Ga naar inhoud


Linux bash, Growatt uitlezen ipv met Python.


Con

Aanbevolen berichten

Het vervolg maar eerst een intro voor de onbekenden.

 

Ik lees mijn slimme meter en zon-inverter uit met een Pythonscript.

Daarmee heb ik bizar veel overrruns-meldingen in mijn log's.

Reden tot zoeken naar een oplossing. Het grote www gaf geen soelaas.

Dus ben ik op zoek naar een oplossing en had de beleving om de

scripts in de bash te houden verbetering kon brengen.

 

wiz en De_Perre hebben daarbij zwaar geholpen en later heeft

De_Perre het stokje helemaal overgenomen. (een bash-freak)

(het uiteindelijke resultaat: https://www.sat4all.com/forums/topic/346795-cronjob-datum-of-tijd-meegeven-in-logfile/?do=findComment&comment=2311447

 

Waar heeft dat toe geleid? Een prachtig bash-script die mijn slimme

meter uitleest. Geloof het of niet maar nu zijn de overruns al drastisch

verminderd, ik zeg "how bizar".

En hoeveel minder? Meestal had ik iedere 40 a 60 minuten 6 overruns, nu

nog maar 10-15 keer per uur. Let wel, deze overruns worden veroorzaakt

door mijn nog draaiende Python scripts. Boeiend toch?

 

Oké, nu de inverter.

Het Pythonscript wat ik hiervoor gebruik is;

from pyowm import OWM
from pymodbus.client.sync import ModbusSerialClient as ModbusClient

gro = ModbusClient(method='rtu', port='/dev/Growatt', baudrate=9600, stopbits=1, parity='N', bytesize=8, timeout=2)
gro.connect()

#Growatt uitlezen
try:
  ra = gro.read_input_registers(17,13)
  data = str(ra.registers)
  gro.close()
except  AttributeError:
  data = "0,0,0,0,0,0,0,0,0,0,0,0,0"
  gro.close()

#Growatt data-afhandeling (dit is niet belangrijk voor het uitlezen van de Growatt) 
data = data.strip("[]")
data = data.replace(" ", "")
data = data.replace("0,0,0,0,0,0,0,0,0,", "")
k1= data.find(',', 0)
k2= data.find(',', k1+1)
k3= data.find(',', k2+1)
zo = int(float(data[0:k1])/10+.5)
da = int(float(data[k1+1:k2])*100)
To = int(float(data[k3+1:]))

Die afhandeling is voorlopig niet boeiend, met een bash script moet dat sowieso

heel anders in combinatie met wellicht een heel andere insteek.

 

Maar bovenstaand is het verhaal, puur het uitlezen van de Growatt, wat ik dus

graag in een bash-script zie gebeuren.

 

Boeiend wellicht om te vertellen dat mijn USB 1 toegekend is aan Growatt vandaar

port='/dev/Growatt' ipv port='/dev/ttyUSBx'.

 

Ben heel benieuwd.

aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites


  • Reacties 37
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit topic

Beste reacties in dit topic

Geplaatste afbeeldingen

Als basis, omdat ik vermoed dat we ook hier weer met 'cu .............' aan de slag moeten:

#!/bin/sh

#files
tempfile=growatt_tmp.txt


#lees growatt uit
#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/Growatt -s 9600 --parity=none >> $tempfile)&

fg

xdotool key ~.

exit 0

Dit zal nog niet veel doen, omdat cu in de achtergrond gestart wordt, en dan direct terug naar de voorgrond wordt gebracht en afgesloten.
Dus, ik zou eerst even willen concentreren om met cu wel degelijk de correcte verbinding op te zetten om de data uit te lezen.
 
 
In je python, zien we dat er nog stopbits/bytesize en timeout vermeld staan. Deze staan nog niet in de cu command.
 
Je zou met cu variabelen kunnen voorzien en opvullen met '~s'

~s variable value
     Set a cu variable to the given value. If value is not given, the variable is set to true.

alleen weet ik niet of je hier zo maar redelijk specifieke systeem variabelen mee kan/mag opvullen.
 
Mogelijk kan je dit eerst even bekijken met een van beide onderstaande:

~v
  List all the variables and their values.
 
~?
   List all commands.



Kan je anders gewoon via cli al eens "cu -l /dev/Growatt -s 9600 --parity=none" uitvoeren??

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Helaas moet dit mijn laatste reactie zijn voor nu, moet echt weer plat.

 

Jouw hint had ik uiteraard al geprobeerd op de commandline

en kreeg als antwoord;

Connected

 

en als ik ~. geef dan krijg ik;

Disconnected.

 

Dit kreeg ik vandaag ook al hoewel nu (dit ogenblik)

niet helemaal representatief is, de inverter "slaapt"

nu en is er in de basis geen communicatie mogelijk.

 

Ik heb het vandaag ook nog aangevuld gehad met >> log.txt

maar daar kwam ook connected en disconnected in te staan.

 

Maar voor nu (helaas, ik heb helemaal geen zin) moet ik

gaan pitten.

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

misschien kan het met 'stty'; 'cu ....' is niet echt het meest recente ding heb ik vanmiddag gelezen.

 

opvragen status kan met

stty -F /dev/Growatt --all

moet ik me nog wel even verder in verdiepen; zal voor later vanavond zijn...

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

En dit is het resultaat;
 

speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl -echoke
aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

  • Moderator

leesvoer!

 

Bijgevoegd zit de beschrijving van de growatt inverter communicatie , dan hebben jullie in ieder geval een idee hoe je die commucatie tot stand kunt brengen en hoe je er data uit kan toveren.

growatt-proto.pdf

VU+ Duo2  met VTi  13 VU+ Uno met VTi  9.0.2

geen Canal Digitaal meer en geen Sparql iptv meer
Triax 78, astra 1,2,3, HB

Link naar reactie
Delen op andere sites

Ik hoop dat De_Perre hier meer van begrijpt dan ik... maar dank.

aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

@wiz: bedankt. Het is voorlopig nog even chinees (no pun intended) maar komt nog wel in orde denk ik

 

 

 

 

@con: ook bedankt. Geeft me al iets om over na te denken.

**Edit**

Con, heb je al eens geprobeerd met een 'cat /dev/Growatt ' of 'tail /dev/Growatt '??

Nu is het alweer donker, maar misschien heb je morgen nog even tijd.

 

**edit 2**

zowat halfweg deze pagina staat een voorbeeld scriptje dat gebruik maakt van stty

Indien je enig succes zou hebben met 'cat ........' kan je dit scriptje misschien overnemen als basis; en dan verder tweaken naar welke output je zou willen bekomen

 

**edit 3**scriptje in het voorbeeld stuurt wel data die de gebruiker zou moeten ingeven. Zal dus nog nader bekeken moeten worden.

aangepast door De_Perre

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Eerst ff wat rechtzetten, was een beetje krom geschreven met;

En hoeveel minder? Meestal had ik iedere 40 a 60 minuten 6 overruns, nu

nog maar 10-15 keer per uur. Let wel, deze overruns worden veroorzaakt

door mijn nog draaiende Python scripts. Boeiend toch?

 

Bedoelde ik dat ik tussen de 40 en 60 keer per minuut 6 overruns had.

Nu dus maar 10-15 per minuut.

 

En met het stukje;

...try:

ra = gro.read_input_registers(17,13)

data = str(ra.registers)

gro.close()

except AttributeError:...

 

las ik alleen maar 13 plaatsen uit het register

van de meer dan 60 waarden. Daartussen (17 en 30)

stonden maar 3 waarden die benodigd waren.

 

Wellicht allemaal overbodig, je weet maar nooit.

Vanavond weer de hele avond www afgestruind maar

nog niets gevonden helaas.

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

Even een probeersel om het serienummer uit te lezen:

#!/bin/sh

#open connectie naar inverter
# 9600 = connectionspeed
# cs8 = 8 databits
# -cstopb = 1 stop bit

stty -F /dev/Growatt 9600 cs8 -cstopb 

#read inverter serial
##stuur eerst commando om data te lezen
echo -e -n '\x3F \x23 \x7E \x34 \x53 \x7E \x32 \x59 ' > /dev/Growatt
##lees data uit
serial=$(cat /dev/Growatt)

#kill stty
echo -n ^U > /dev/Growatt

#toon serial
echo 'Mijn serienummer = ' $serial


exit 0

Mocht dit al werken, hebben we al een vertrekpunt.

Dan zouden we nog even moeten bekijken welke gegevens je precies wil uitlezen; eventueel met welk interval... En of dit interval via cron of automatische methode van de inverter loopt.

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Met;

Mijn serienummer = 

stopt het helaas.

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

Het gaf al geen error; dus op zich lijkt dat al mooi.

 

Nog even die link bekeken in mijn eerdere post; mogelijk is de volgorde niet 100% correct want in het voorbeeldscript werd de cat naar de achtergrond gezet.

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Een beetje sneu misschien maar de inverter ligt onder de lakens.

En dan is hij volgens mij helemaal niet meer voor reden vatbaar  :sick:  :grin:

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds maart 2021 glasvezel via KPN.

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

Intel Nuc i7 met W10, Gigabyte Brix met Home Assistant, 17 Shelly's en 2 ESP-tjes.

Link naar reactie
Delen op andere sites

#!/bin/sh

#open connectie naar inverter
# 9600 = connectionspeed
# cs8 = 8 databits
# -cstopb = 1 stop bit

stty -F /dev/Growatt 9600 cs8 -cstopb 

##capteer data in achtergrond
(cat /dev/Growatt > tempGrowat.txt)&
# Capture PID of background process so it is possible to terminate it when done
bgPid=$?


#read inverter serial
##stuur eerst commando om data te lezen
echo -e -n '\x3F \x23 \x7E \x34 \x53 \x7E \x32 \x59 ' > /dev/Growatt


#kill stty
echo -n ^U > /dev/Growatt
#kill cat
kill $bgPid

exit 0

Nieuw probeersel om de inverter serial uit te lezen.

Nu zou er normaal in achtergrond naar een file gelogd moeten worden; hopelijk helpt dit.

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Een beetje sneu misschien maar de inverter ligt onder de lakens.

En dan is hij volgens mij helemaal niet meer voor reden vatbaar  :sick:  :grin:

 

Hmm, is dit op basis van een tijdsinstelling of op basis van productie?

 

Dan zal het voor morgen zijn :)

 

geniet er ook maar eens van.

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Link naar reactie
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
×
×
  • Nieuwe aanmaken...