Seite 1 von 4

PV Modul Growatt

Verfasst: Do Jan 13, 2022 10:06 pm
von jonas1611
Hallo zusammen,

ich bin gerade am rumbasteln mit einem Growatt Wechselrichter MIC 600 TL-X.
Was habe ich schon geschafft... Der Growatt ist mit einem RS485 - Lan Adapter verbunden und er antwortet auf Anfragen mit einem Modbus Scanner.
Wie im Bild zu sehen, ist der Wert für die aktuelle Leistung im Registereintrag 30043 zu finden. Ich habe versucht ein bestehendes Modul (wr2_smamodbus) zu modifizieren, was aber nicht von Erfolg gekrönt war. Ich muss auch sagen, dass ich von der Python Programmierung keine Ahnung habe und ich deshalb aktuell auch nicht weiß, welche Werte da was wie bewirken.
Verändert habe ich den Wert in Zeile 17 der Datei sma.py von 30776 in 30043

resp= client.read_holding_registers(30775,2,unit=3) --> resp= client.read_holding_registers(30043,2,unit=3)

Auch ich habe eine OpenWB, teste aber auf einem 2 System mit SSH rechten.
Viele Grüße Jonas1611

Re: PV Modul Growatt

Verfasst: Fr Jan 14, 2022 3:29 pm
von yankee
jonas1611 hat geschrieben: Do Jan 13, 2022 10:06 pm Ich habe versucht ein bestehendes Modul (wr2_smamodbus) zu modifizieren, was aber nicht von Erfolg gekrönt war.
Nimm nicht das Modul als Vorbild. Es ist alt und eher unintuitiv. Nimm zum Beispiel lieber das modules/wr_tripower9000/tripower.py als Vorbild.

Die Leistung müsstest du zum Beispiel so bekommen:

Code: Alles auswählen

with ModbusClient("DEINE WECHSELRICHTER-ADRESSE") as client:
    power = client.read_holding_registers(30043, ModbusDataType.INT_16)
(eventuell musst du für den Register eins weiter oder eins weniger weit nehmen, weil ist je nach client zero-based oder one-based).

Und dann den Wert speichern mit:

Code: Alles auswählen

get_inverter_value_store(1).set(InverterState(power=-power))
("power" wird hier mit -1 multipliziert, denn oWB hätte der Erzeugung von PV gerne als negativen Wert)

Re: PV Modul Growatt

Verfasst: Sa Jan 15, 2022 12:38 am
von jonas1611
Hallo yankee, danke für deine Mühe.
Bin aber nicht viel schlauer als gestern und gebe für heute erst mal auf.
Habe viel probiert bin aber zu keinem Ergebnis gekommen....
Habe jetzt eine py Datei die wie folgt aussieht, aber einen Syntaxerror erzeugt:

#!/usr/bin/env python3
import logging
import sys
from typing import Iterable

import requests

from helpermodules.log import setup_logging_stdout
from modules.common.component_state import InverterState
from modules.common.modbus import ModbusClient, ModbusDataType
from modules.common.store import get_inverter_value_store


power = ModbusClient(192.168.188.254:502).read_holding_registers(30043, ModbusDataType.INT_16, unit=3)
get_inverter_value_store(1).set(InverterState(power=-power))

Re: PV Modul Growatt

Verfasst: Sa Jan 15, 2022 8:19 pm
von yankee
jonas1611 hat geschrieben: Sa Jan 15, 2022 12:38 am Habe jetzt eine py Datei die wie folgt aussieht, aber einen Syntaxerror erzeugt:
Statt

Code: Alles auswählen

ModbusClient(192.168.188.254:502)
Muss es heißen:

Code: Alles auswählen

ModbusClient("192.168.188.254")
Verwende einen Editor mit Syntaxhighlighting um solche Probleme sofort zu sehen. Ich emphele PyCharm (kostenlose Community-version reicht aus). Die IDE ist groß und mächtig, wenn dir das zu viel gibt, gibt es auch einfache Editoren wie Notepad++ die Syntaxhighlighting können.

Wenn nochmal ein Fehler kommt, verwende bitte [​code][/code]-tags und schreib auch die Fehlermeldung dazu, die du bekommst.

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 12:52 am
von jonas1611
Also ersmal, ich weiß gar nicht was ich hier mache...
Habe jetzt folgendes zusammengeschrieben:

Code: Alles auswählen

#!/usr/bin/env python3
#import logging
#import sys
#from typing import Iterable

import requests

#from helpermodules.log import setup_logging_stdout
from modules.common.component_state import InverterState
from modules.common.modbus import ModbusClient, ModbusDataType
from modules.common.store import get_inverter_value_store

def test():
    with ModbusClient("192.168.188.254:port=502") as client:
        power = client.read_holding_registers(30043, ModbusDataType.INT_16, unit=3)
get_inverter_value_store(1).set(InverterState(power=-power))
f = open('/var/www/html/openWB/ramdisk/pv2watt', 'w')
f.write(str(power))
f.close()

Wie kann ich eigentlich überprüfen, was ich da mache.
Kann man auf der Konsole das einfach so aufrufen?

Code: Alles auswählen

pi@raspberrypi:~ $ sudo python /var/www/html/openWB/modules/wr2_smamodbus/sma.py
Traceback (most recent call last):
  File "/var/www/html/openWB/modules/wr2_smamodbus/sma.py", line 9, in <module>
    from modules.common.component_state import InverterState
ImportError: No module named modules.common.component_state

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 7:52 am
von yankee
jonas1611 hat geschrieben: Mo Jan 17, 2022 12:52 am Habe jetzt folgendes zusammengeschrieben:
Daraus diese 3 Zeilen ersatzlos streichen:

Code: Alles auswählen

f = open('/var/www/html/openWB/ramdisk/pv2watt', 'w')
f.write(str(power))
f.close()
Die Arbeit wird jetzt von der Zeile

Code: Alles auswählen

get_inverter_value_store(1).set(InverterState(power=-power))
übernommen. Wenn du pv2 willst, dann müsstest du stattdessen noch

Code: Alles auswählen

get_inverter_value_store(2).set(InverterState(power=-power))
verwenden.
jonas1611 hat geschrieben: Mo Jan 17, 2022 12:52 am

Code: Alles auswählen

with ModbusClient("192.168.188.254:port=502") as client:
Lass den Port weg! Die Syntax ist so falsch, es müsste wenn als zweites Argument dazu. Aber 502 ist ohnehin der Standardwert, wenn du den einfach weglässt nimmt es automatisch 502.
jonas1611 hat geschrieben: Mo Jan 17, 2022 12:52 am Kann man auf der Konsole das einfach so aufrufen?

Code: Alles auswählen

pi@raspberrypi:~ $ sudo python /var/www/html/openWB/modules/wr2_smamodbus/sma.py
Nicht ganz. So geht es:

Code: Alles auswählen

PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 10:35 am
von jonas1611
Hallo yankee, danke dass du dich meiner annimmst....
Habe jetzt alles so geändert, wie du geschrieben hast.

Code: Alles auswählen

#!/usr/bin/env python3
#import logging
#import sys
#from typing import Iterable

import requests

#from helpermodules.log import setup_logging_stdout
from modules.common.component_state import InverterState
from modules.common.modbus import ModbusClient, ModbusDataType
from modules.common.store import get_inverter_value_store

def test():
    with ModbusClient("192.168.188.254") as client:
        power = client.read_holding_registers(30043, ModbusDataType.INT_16, unit=3)
get_inverter_value_store(2).set(InverterState(power=-power))

hier die Ausgabe der Fehelermeldung auf der Konsole:

Code: Alles auswählen

pi@raspberrypi:~ $ PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py
/usr/lib/python3/dist-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
Traceback (most recent call last):
  File "/var/www/html/openWB/modules/wr2_smamodbus/sma.py", line 16, in <module>
    get_inverter_value_store(2).set(InverterState(power=-power))
NameError: name 'power' is not defined
Ich hoffe du hast noch ein, zwei Tipps für mich.....

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 1:25 pm
von yankee
Die Einrückung stimmt nicht. Die Zeile "get_inverter_value_store(2).set(InverterState(power=-power))" musst du auf die gleiche Stufe wie das `with` zwei Zeilen drüber einrücken.

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 2:30 pm
von jonas1611
Ich habe das gleich mal geändert. Die Fehlermeldung mit dem NameError ist jetzt weg.
Die Warnung bleibt aber:

Code: Alles auswählen

pi@raspberrypi:~ $ PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py
/usr/lib/python3/dist-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
Auch werden keine Abfragen ausgelöst. Am LAN- RS485 Adapter haben die LEDs Tx und Rx mit dem original Modul "wr2_smamodbus/sma.py" ca. alle 10 sec geblinkt.
Hier passiert aktuell nichts.... :(

Re: PV Modul Growatt

Verfasst: Mo Jan 17, 2022 3:00 pm
von yankee
jonas1611 hat geschrieben: Mo Jan 17, 2022 2:30 pmDie Warnung bleibt aber:
Die Warnung die du da erhälst ist auch spannend, ich denke aber dass das für deinen Code kein Hindernis ist, da du das requests-paket nicht brauchst. Du bist auf original openWB Hardware?
jonas1611 hat geschrieben: Mo Jan 17, 2022 2:30 pmDie Warnung bleibt aber:

Code: Alles auswählen

pi@raspberrypi:~ $ PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py
/usr/lib/python3/dist-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.26.8) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
Kein Fehler. Das ist eigentlich (tm) ein Zeichen dafür, dass alles geklappt hat. Ist denn eine Datei /var/www/html/openWB/ramdisk/pv2 entstanden und steht was sinnvolles drin?

Du kannst sonst auch mal

Code: Alles auswählen

print(power)
hinter oder vor `get_inverter_value_store` hinzufügen um zu sehen was passiert.

Oder du könntest noch

Code: Alles auswählen

from helpermodules.log import setup_logging_stdout

setup_logging_stdout()
Hinzufügen, dann müsstest du jede Menge Logausgaben bekommen.
jonas1611 hat geschrieben: Mo Jan 17, 2022 2:30 pmAuch werden keine Abfragen ausgelöst. Am LAN- RS485 Adapter haben die LEDs Tx und Rx mit dem original Modul "wr2_smamodbus/sma.py" ca. alle 10 sec geblinkt.
Hier passiert aktuell nichts.... :(
Das mag bedeuten, dass die Modbusanfrage nicht raus geht. Oder nicht ankommt. Was aber merkwürdig wäre, weil dann müsstest du eigentlich auch einen Fehler bekommen.