Seite 3 von 4
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 10:47 am
von yankee
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?
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 2:27 pm
von jonas1611
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.
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 2:58 pm
von yankee
OK. Also irgend einen Wert für den Zähler musst du halt mitgeben. D.h. aktuell hast du:
Code: Alles auswählen
get_inverter_value_store(2).set(InverterState(power=-power))
Es muss aber sein:
Code: Alles auswählen
get_inverter_value_store(2).set(InverterState(counter=XXXX, power=-power))
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:
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))
"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:
Code: Alles auswählen
energy = client.read_input_registers(28, ModbusDataType.UINT_32, wordorder=Endian.Little, unit=3)
print(energy)
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...
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 5:01 pm
von jonas1611
Also die Endian scheint er noch nicht zu mögen...
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 2013
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...
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 7:15 pm
von yankee
jonas1611 hat geschrieben: ↑Mi Jan 19, 2022 5:01 pm
Also die Endian scheint er noch nicht zu mögen...
Ahso ja... Noch ergänzen:
Ich glaube ich mache bei Gelegenheit mal ein Tutorial...
jonas1611 hat geschrieben: ↑Mi Jan 19, 2022 5:01 pm
Das dumme ist nur, dass die höheren Register manchmal mit meinem Programm um 2 noch oben springen...
Diesen Satz verstehe ich nicht.
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 7:52 pm
von jonas1611
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
Diesen Satz verstehe ich nicht.
Also meistens steht das Ergebnis für die Leistung in der Zeile 30043, manchmal aber auch in Zeile 30045
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
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 8:10 pm
von yankee
jonas1611 hat geschrieben: ↑Mi Jan 19, 2022 7:52 pm
Code: Alles auswählen
pi@raspberrypi:~ $ PYTHONPATH=/var/www/html/openWB/packages python3 /var/www/html/openWB/modules/wr2_smamodbus/sma.py
[..]
0
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 pmAlso meistens steht das Ergebnis für die Leistung in der Zeile 30043, manchmal aber auch in Zeile 30045
Und bei den andern Werten ist es auch so.
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.
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 8:58 pm
von jonas1611
So ich glaube, soweit funktioniert es.
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()
so sieht das Log aus...
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
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.
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 9:07 pm
von yankee
jonas1611 hat geschrieben: ↑Mi Jan 19, 2022 8:58 pm
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.
Hast du das SMA Modul als PV-Modul auf der UI ausgewählt?
Re: PV Modul Growatt
Verfasst: Mi Jan 19, 2022 9:19 pm
von jonas1611
ja als WR2