PV Modul Growatt

Anfragen zum Erstellen von Modulen, Fragen zu Modulen
yankee
Beiträge: 481
Registriert: Sa Mai 16, 2020 11:34 am

Re: PV Modul Growatt

Beitrag 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?
jonas1611
Beiträge: 17
Registriert: Do Jan 13, 2022 9:42 pm

Re: PV Modul Growatt

Beitrag 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.
yankee
Beiträge: 481
Registriert: Sa Mai 16, 2020 11:34 am

Re: PV Modul Growatt

Beitrag 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...
jonas1611
Beiträge: 17
Registriert: Do Jan 13, 2022 9:42 pm

Re: PV Modul Growatt

Beitrag 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
yankee 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
Das habe ich natürlich auch schon gesehen, ist aber aus dem Jahr 2013 :roll:

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...
yankee
Beiträge: 481
Registriert: Sa Mai 16, 2020 11:34 am

Re: PV Modul Growatt

Beitrag 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:

Code: Alles auswählen

from pymodbus.constants import Endian
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.
jonas1611
Beiträge: 17
Registriert: Do Jan 13, 2022 9:42 pm

Re: PV Modul Growatt

Beitrag 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
yankee
Beiträge: 481
Registriert: Sa Mai 16, 2020 11:34 am

Re: PV Modul Growatt

Beitrag 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.
jonas1611
Beiträge: 17
Registriert: Do Jan 13, 2022 9:42 pm

Re: PV Modul Growatt

Beitrag 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 :D
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.
yankee
Beiträge: 481
Registriert: Sa Mai 16, 2020 11:34 am

Re: PV Modul Growatt

Beitrag 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?
jonas1611
Beiträge: 17
Registriert: Do Jan 13, 2022 9:42 pm

Re: PV Modul Growatt

Beitrag von jonas1611 »

ja als WR2
Antworten