PV Modul Growatt
Re: PV Modul Growatt
Ja prima. Das sieht doch korrekt aus. Jetzt brauchst du nurnoch einen Wert für den Energiezähler. Oder musst den von Simcount errechnen lassen. Hast du einen Register der die Gesamtenergiemenge hergibt?
-
- Beiträge: 39
- Registriert: Do Jan 13, 2022 9:42 pm
- Has thanked: 1 time
- Been thanked: 1 time
Re: PV Modul Growatt
Leider habe ich keine Doku für dieses Model finden können. Aber das 30043 oder ggf. das 30003 sollten die Wattangabe für mein WR sein.
Der ist aktuell nicht produktiv und ich habe dort ein Labornetzgerät als Spannungsgeber angeschlossen und kann dort bis max. 120W "erzeugen". Die Werte aus 30043 od. 30003 passen zu dem was ich Einspeise als 0,1W.
Der ist aktuell nicht produktiv und ich habe dort ein Labornetzgerät als Spannungsgeber angeschlossen und kann dort bis max. 120W "erzeugen". Die Werte aus 30043 od. 30003 passen zu dem was ich Einspeise als 0,1W.
openWB Series2 (22 kW) SW 2
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
Re: PV Modul Growatt
OK. Also irgend einen Wert für den Zähler musst du halt mitgeben. D.h. aktuell hast du:
Es muss aber sein:
Die Frage ist: Welchen Wert nimmst du hier statt XXXX. Eine Möglichkeit wäre softwareseitig die Leistung zu integrieren. Das würde gehen mit:
"Schicker" finde ich es, wenn du tatsächlich einen Zähler per Modbus ausgelesen bekommst. Aber ohne Dokumentation könnte der Spaßfaktor den zu finden ganz schön im Keller hängen.
Einmal kurz nach "Growatt modbus" gegoogelt finde ich das hier: https://forum.iobroker.net/assets/uploa ... %89%88.pdf
Demnach (Seite 11) müsstest du in Register 28&29 die Energie wiederfinden. Und zwar als INT32 (eventuell auch UINT32) mit wordorder=little. Du kannst ja mal versuchen ob du mit:
Da einen sinnvollen Wert bekommst.
Auch der Register, den du genommen hast für die Leistung ist Zweifelhaft, wenn die Anleitung stimmen sollte.
Guter Anhaltspunkt zum Spielen kann die Spannung sein. Da weiß man ja recht genau was kommen müsste...
Code: Alles auswählen
get_inverter_value_store(2).set(InverterState(power=-power))
Code: Alles auswählen
get_inverter_value_store(2).set(InverterState(counter=XXXX, power=-power))
Code: Alles auswählen
from modules.common.simcount import SimCountFactory
# [..]
counter, _ = SimCountFactory().get_sim_counter()().sim_count(power, prefix="pv")
get_inverter_value_store(2).set(InverterState(counter=counter, power=-power))
Einmal kurz nach "Growatt modbus" gegoogelt finde ich das hier: https://forum.iobroker.net/assets/uploa ... %89%88.pdf
Demnach (Seite 11) müsstest du in Register 28&29 die Energie wiederfinden. Und zwar als INT32 (eventuell auch UINT32) mit wordorder=little. Du kannst ja mal versuchen ob du mit:
Code: Alles auswählen
energy = client.read_input_registers(28, ModbusDataType.UINT_32, wordorder=Endian.Little, unit=3)
print(energy)
Auch der Register, den du genommen hast für die Leistung ist Zweifelhaft, wenn die Anleitung stimmen sollte.
Guter Anhaltspunkt zum Spielen kann die Spannung sein. Da weiß man ja recht genau was kommen müsste...
-
- Beiträge: 39
- Registriert: Do Jan 13, 2022 9:42 pm
- Has thanked: 1 time
- Been thanked: 1 time
Re: PV Modul Growatt
Also die Endian scheint er noch nicht zu mögen...
Ich denke schon, dass die Register so passen.
Also das passt auch mit dem zusammen, was mir das Display vom WR anzeigt.
30003 Input Power
30004 Input Voltage
30043 Output Power
30067 Gesammt Zähler KWh
30073 tagesertrag KWh
Das dumme ist nur, dass die höheren Register manchmal mit meinem Programm um 2 noch oben springen...
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)
2022-01-19 17:43:20: PID: 31511: pymodbus.client.sync: Connection to Modbus server established. Socket ('192.168.188.80', 45495)
Traceback (most recent call last):
File "/var/www/html/openWB/modules/wr2_smamodbus/sma.py", line 21, in <module>
test()
File "/var/www/html/openWB/modules/wr2_smamodbus/sma.py", line 15, in test
energy = client.read_input_registers(28, ModbusDataType.UINT_32, wordorder=Endian.Little, unit=3)
NameError: name 'Endian' is not defined
Das habe ich natürlich auch schon gesehen, ist aber aus dem Jahr 2013yankee hat geschrieben: ↑Mi Jan 19, 2022 2:58 pm
Einmal kurz nach "Growatt modbus" gegoogelt finde ich das hier: https://forum.iobroker.net/assets/uploa ... %89%88.pdf
Ich denke schon, dass die Register so passen.
Also das passt auch mit dem zusammen, was mir das Display vom WR anzeigt.
30003 Input Power
30004 Input Voltage
30043 Output Power
30067 Gesammt Zähler KWh
30073 tagesertrag KWh
Das dumme ist nur, dass die höheren Register manchmal mit meinem Programm um 2 noch oben springen...
openWB Series2 (22 kW) SW 2
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
Re: PV Modul Growatt
Ahso ja... Noch ergänzen:
Code: Alles auswählen
from pymodbus.constants import Endian
Diesen Satz verstehe ich nicht.
-
- Beiträge: 39
- Registriert: Do Jan 13, 2022 9:42 pm
- Has thanked: 1 time
- Been thanked: 1 time
Re: PV Modul Growatt
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)
2022-01-19 20:36:25: PID: 4457: pymodbus.client.sync: Connection to Modbus server established. Socket ('192.168.188.80', 41351)
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Current transaction state - IDLE
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Running transaction 1
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x3 0x4 0x0 0x1c 0x0 0x2
2022-01-19 20:36:25: PID: 4457: pymodbus.client.sync: New Transaction state 'SENDING'
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: RECV: 0x0 0x1 0x0 0x0 0x0 0x7 0x3 0x4 0x4 0x0 0x0 0x0 0x0
2022-01-19 20:36:25: PID: 4457: pymodbus.framer.socket_framer: Processing: 0x0 0x1 0x0 0x0 0x0 0x7 0x3 0x4 0x4 0x0 0x0 0x0 0x0
2022-01-19 20:36:25: PID: 4457: pymodbus.factory: Factory Response[ReadInputRegistersResponse: 4]
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Adding transaction 1
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Getting transaction 1
2022-01-19 20:36:25: PID: 4457: pymodbus.transaction: Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
2022-01-19 20:36:25: PID: 4457: pymodbus.payload: [0, 0]
2022-01-19 20:36:25: PID: 4457: pymodbus.payload: [b'\x00\x00', b'\x00\x00']
0
Also meistens steht das Ergebnis für die Leistung in der Zeile 30043, manchmal aber auch in Zeile 30045Diesen Satz verstehe ich nicht.
Und bei den andern Werten ist es auch so.
Also der Wert für den Gesamtertrag steht dann in 30069 und nicht wie es sein sollte in 30067
Nur die Werte bei 30003 bleiben in 30003
openWB Series2 (22 kW) SW 2
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
Re: PV Modul Growatt
OK, du hast erfolgreiche eine 0 gelesen. Wenn dein Zähler nicht gerade bei 0 ist, ist es der falsche Register. Da musst du eben googeln, ausprobieren oder beides.jonas1611 hat geschrieben: ↑Mi Jan 19, 2022 7:52 pmCode: Alles auswählen
pi@raspberrypi:~ $ PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py [..] 0
Das ist... ähhh... Irgend ein Bug? Oder was? Ergibt für mich nicht wirklich Sinn, dass die springen. Aber gut, du hast jetzt ein Script, welches die Modbusregister auslesen kann und kannst sie auch über die API an die openWB weitergeben. Welche Register genau musst du dann halt... googeln oder ausprobieren.
-
- Beiträge: 39
- Registriert: Do Jan 13, 2022 9:42 pm
- Has thanked: 1 time
- Been thanked: 1 time
Re: PV Modul Growatt
So ich glaube, soweit funktioniert es.
Habe jetzt die sma.py jetzt so:
so sieht das Log aus...
Habe die Leistung von 30W bis 120W verändert und der Wert ging schön mit.
Es wird auch im WEB_IF angezeigt
Eine Baustelle habe ich jetzt noch.
Das Scipt startet nicht automatisch, da muss ich jetzt mal sehen, was ich in der main.sh noch anpassen muss.
Habe jetzt die sma.py jetzt so:
Code: Alles auswählen
#import logging
#import sys
#from typing import Iterable
import requests
from helpermodules.log import setup_logging_stdout
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
from pymodbus.constants import Endian
def test():
with ModbusClient("192.168.188.254") as client:
power = client.read_input_registers(2, ModbusDataType.INT_16, unit=3)
print(power)
get_inverter_value_store(2).set(InverterState(counter=43, power=-power/10))
if __name__ == '__main__':
#setup_logging_stdout()
test()
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)
2022-01-19 21:48:06: PID: 9664: pymodbus.client.sync: Connection to Modbus server established. Socket ('192.168.188.80', 55953)
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Current transaction state - IDLE
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Running transaction 1
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: SEND: 0x0 0x1 0x0 0x0 0x0 0x6 0x3 0x4 0x0 0x2 0x0 0x1
2022-01-19 21:48:06: PID: 9664: pymodbus.client.sync: New Transaction state 'SENDING'
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Changing transaction state from 'SENDING' to 'WAITING FOR REPLY'
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Changing transaction state from 'WAITING FOR REPLY' to 'PROCESSING REPLY'
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: RECV: 0x0 0x1 0x0 0x0 0x0 0x5 0x3 0x4 0x2 0x1 0x5a
2022-01-19 21:48:06: PID: 9664: pymodbus.framer.socket_framer: Processing: 0x0 0x1 0x0 0x0 0x0 0x5 0x3 0x4 0x2 0x1 0x5a
2022-01-19 21:48:06: PID: 9664: pymodbus.factory: Factory Response[ReadInputRegistersResponse: 4]
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Adding transaction 1
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Getting transaction 1
2022-01-19 21:48:06: PID: 9664: pymodbus.transaction: Changing transaction state from 'PROCESSING REPLY' to 'TRANSACTION_COMPLETE'
2022-01-19 21:48:06: PID: 9664: pymodbus.payload: [346]
346
2022-01-19 21:48:06: PID: 9664: root: PV Watt: -34.6
Es wird auch im WEB_IF angezeigt
Eine Baustelle habe ich jetzt noch.
Das Scipt startet nicht automatisch, da muss ich jetzt mal sehen, was ich in der main.sh noch anpassen muss.
openWB Series2 (22 kW) SW 2
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L
PV: 10 kWp Ost-West, Kostal PLENTICORE plus 8.5 + KSEM
BEV: VW ID3 Pro
WP: Lambda EU08L