Seite 1 von 2

Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 13. Nov 2021 10:08
von TurboMOD
Hallo,
ich versuche jetzt schon seit einigen Wochen immer mal wieder die Daten von meinem Growatt (Solarwechselrichter) in openhab zu integrieren. Da hat schon jemand etwas in python geschrieben: https://github.com/johanmeijer/grott Es ist dort zwar schon vieles beschrieben, aber ich verstehe trotzdem nur Bahnhof (Windowsuser xD) :?

Ich hatte auch schon diesen viewtopic.php?t=5074&hilit=growatt gefunden. Da sieht es aber genau so aus.

Ich denke mir fehlt einfach der ganze Zusammenhang. wie zb. kann man solche Dateien mit der Endung .py einfach auf den Raspi kopieren und dann irgendwie in openhab ausführen?

Ich habe aktuell openhab 3 auf einem Raspberry Pi 4 installiert, ein paar bindings installiert und things erstellt, rules geschrieben, eine sitemap erstellt und mich mit modbus auseinandergesetzt. Um mal grob meinen aktuellen Stand zu beschreiben.

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 20. Nov 2021 17:24
von TurboMOD
Bin heute mal ein ganzes Stück weiter gekommen. Das Script läuft, bekommt die Daten vom Wechselrichter und schickt sie an den Growatt-Server weiter. Hier habe ich alle Schritte beschrieben, ist sicherlich nicht Fehlerfrei, aber es klappt: :D
https://github.com/johanmeijer/grott/issues/72
Im Anhang sieht man den Log, also die Daten kommen an.

Als nächstes habe ich ein neues thing (MQTT Broker) erstellt.

Code: Alles auswählen

UID: mqtt:broker:MQTT_Broker
label: MQTT Broker
thingTypeUID: mqtt:broker
configuration:
  lwtQos: 0
  publickeypin: true
  keepAlive: 60
  clientid: a81ddf58-d642-4e49-b211-bdc0e13539a1
  qos: 0
  reconnectTime: 60000
  port: 1883
  host: localhost
  secure: false
  certificatepin: true
  lwtRetain: true
  enableDiscovery: true
Dann das thing "Growatt" (Generic MQTT Thing)

Code: Alles auswählen

UID: mqtt:topic:MQTT_Broker:Growatt
label: Growatt
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:MQTT_Broker
channels:
  - id: ch_pvpowerout
    channelTypeUID: mqtt:number
    label: PV produktie
    description: ""
    configuration:
      stateTopic: growatt
      transformationPattern: JSONPATH:$.values.pvpowerout
Beide werden "online" angezeigt. Aber der Channel "PV produktie" bekommt keine Daten (NULL).
Hat Jemand eine Idee, wo der Fehler liegen könnte?

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 20. Nov 2021 20:24
von peter-pan
Ich gehe auch mal davon aus, dass alles (OH, Mosquitto, Python, etc) alles auf deinem Pi4 läuft und das auch die Transformation (JSONPATH:$.values.pvpowerout) richtig ist.

Hast du schon mal mit MQTT.fx geschaut, wie (und ob) deine Topics "subscribed" werden. Es steht zwar da(im Screenshot), dass ein MQTT-String erzeugt wurde und auch gesendet wurde und dann müsste er auch im MQTT-Tool (MQTT.fx) sichtbar sein.

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 10:01
von udo1toni
Insbesondere fehlt da eine Information im grott log, das ist das Topic, an das das json Objekt gesendet wurde.

Tipp am Rande: Man kann (z.B. über PuTTY) hervorragend Text in die Zwischenablage kopieren und dann von dort aus hier im Forum direkt als Text einfügen (markiert als Code), das macht die Suche nach Schlüsselwörten einfacher...

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 10:37
von TurboMOD
Musste warten, bis es wieder Hell wird, da sich das Gerät abschaltet, wenn keine PV Leistung mehr erzeugt wird und ja, es ist alles auf dem gleichen RPI installiert.

MQTT.fx kannte ich noch nicht. Habe es damit direkt mal ausprobiert und da funktioniert es auf Anhieb. Dort habe ich auch gesehen, dass dort energy/growatt steht und darauf hin folgendes angepasst

Code: Alles auswählen

stateTopic: energy/growatt
@udo1toni war das schon die fehlende Information? Mit der Änderung funktioniert es leider auch nicht.
Strg + C funktionierte in Putty nicht, daher erschien es mir einfacher mal eben einen screenshot zu machen. Habe es aber gerade nachgelesen. Man muss den Text nur markieren und er landet in der Zwischenablage. Danke für den Tip

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 10:47
von udo1toni
In PuTTY musst Du nur den Text markieren, er befindet sich dann sofort in der Zwischenablage. Umgekehrt funktioniert das Einfügen von Text in PuTTY aus der Zwischenablage über einen einfachen Rechtsklick. Der Text wird dann dort eingefügt, wo der Cursor gerade steht (nicht etwa dort, wo man hin klickt).

Da das Topic energy/growatt lautet, musst Du dieses auch eintragen.

Zur Fehlersuche bietet es sich an, zunächst die stateTransformation zu entfernen. Allerdings musst Du zusätzlich auch noch den Channel Type auf String ändern, da nun ja das komplette json Objekt im Channel landet.
Nun solltest Du im Log sehen können, wenn ein Status empfangen wird. Eventuell solltest Du zusätzlich noch ein String Item mit dem String Channel verknüpfen, nur um ganz sicher zu gehen.

Frage am Rande: möchtest Du ausschließlich die eine Information auslesen?
Falls Du weitere Informationen aus dem json Objekt auswerten willst, böte es sich an, die stateTransformation links liegen zu lassen und stattdessen pro verlinktem Item ein json Profile zu erstellen. Das hat den Vorteil, dass Du nur den einen Channel benötigst, aber viele Items mit unterschiedlichen Status füllen kannst.

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 10:49
von peter-pan
udo1toni hat geschrieben: 21. Nov 2021 10:01 Tipp am Rande: Man kann (z.B. über PuTTY) hervorragend Text in die Zwischenablage kopieren
...besser hätte ich das auch nicht sagen können.👍

In dem Thread in "github" kann man sehen, dass der "grott.service" nicht läuft. Ist das inzwischen behoben?

Wie Udo, habe ich mich gefragt, wie du auf das Topic "growatt" gekommen bist. Ich hab dann noch mal in deinem Querverweis gegoogelt und unter dieser Url diese MQTT-Parameter gefunden:

Code: Alles auswählen

[MQTT]
# Mqtt parameters definitions
# Be aware nomqtt = True means no MQTT processing will be done!!!!!!

nomqtt = False
ip = localhost
port = 1883
topic= energy/growatt
auth = False
user = grott
password = growatt2020
Danach lautet das Topic "energy/growatt" (ohne die anderen Parameter weiter zu bewerten). Wie sehen denn deine Topic-Einstellung hier aus ?

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 11:36
von TurboMOD
udo1toni hat geschrieben: 21. Nov 2021 10:47Zur Fehlersuche bietet es sich an, zunächst die stateTransformation zu entfernen. Allerdings musst Du zusätzlich auch noch den Channel Type auf String ändern, da nun ja das komplette json Objekt im Channel landet.
Nun solltest Du im Log sehen können, wenn ein Status empfangen wird. Eventuell solltest Du zusätzlich noch ein String Item mit dem String Channel verknüpfen, nur um ganz sicher zu gehen.
Ja, damit kommt jetzt alles an, sowohl im log, als auch im item:

Code: Alles auswählen

{"device": "GAH0A4409A", "time": "2021-11-21T11:15:04", "buffered": "no", "values": {"pvstatus": 1, "pvpowerin": 470, "pv1voltage": 1059, "pv1current": 3, "pv1watt": 470, "pv2voltage": 0, "pv2current": 0, "pv2watt": 0, "pvpowerout": 459, "pvfrequentie": 5000, "pvgridvoltage": 2323, "pvgridcurrent": 10, "pvgridpower": 485, "pvgridvoltage2": 0, "pvgridcurrent2": 0, "pvgridpower2": 0, "pvgridvoltage3": 0, "pvgridcurrent3": 0, "pvgridpower3": 0, "totworktime": 24319624, "pvenergytoday": 0, "pvenergytotal": 7556, "epvtotal": 7454, "epv1today": 0, "epv1total": 7454, "epv2today": 0, "epv2total": 0, "pvtemperature": 138, "pvipmtemperature": 234}}
Also liegt der Fehler in der stateTransformation nehme ich an?
Frage am Rande: möchtest Du ausschließlich die eine Information auslesen?
Nein, ich möchte mehrere aber nicht alle Informationen auslesen. Hatte erstmal nur einen Channel erstellt, um zu schauen, ob es funktioniert.

Der Fehler mit dem Topic ist mir jetzt auch klar. Hier hatte jemand beschrieben, wie er das Script in openhab eingebunden hat. https://community.openhab.org/t/binding ... r/96288/13

Code: Alles auswählen

Bridge mqtt:broker:bbp295broker "BBP295 MQTT Broker"[ host="192.168.1.1", port=1883, secure=false]
{
    Thing topic pvbbp295info "PV BBP295 informatie"
	{
        Channels:

            Type number : ch_pvpowerout "PV produktie" [ stateTopic="bbp295/growatt", transformationPattern="JSONPATH:$.values.pvpowerout" ]	
            Type number : ch_pvenergytoday "PV produktie vandaag" [ stateTopic="bbp295/growatt", transformationPattern="JSONPATH:$.values.pvenergytoday" ]
            Type number : ch_pvenergytotal "PV produktie totaal" [ stateTopic="bbp295/growatt", transformationPattern="JSONPATH:$.values.pvenergytotal" ]	
            Type number : ch_pvstatus "PV status" [ stateTopic="bbp295/growatt", transformationPattern="JSONPATH:$.values.pvstatus" ]	
            Type datetime : ch_time "PV laatste bericht" [ stateTopic="bbp295/growatt", transformationPattern="JSONPATH:$.time" ]				
    }
}
Ich hatte fälschlicherweise angenommen, dass das bbp295 in stateTopic="bbp295/growatt" sich auf den Namen des MQTT Brokers ("BBP295 MQTT Broker") bezieht.

EDIT: In der Grott.ini steht folgendes:

Code: Alles auswählen

#nomqtt = False
#ip = localhost
#port = 1883
#topic= energy/growatt
#auth = False
#user = grott
#password = growatt2020
Achja, der Fehler, dass grott.service nicht läuft ist behoben

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 12:11
von TurboMOD
Ich habe gerade die Vermutung, dass da am Anfang nix ankam, weil ich Channel Type auf Number hatte. Jetzt wo es auf String geändert ist, kommen trotzdem alle informationen an, obwohl ich die stateTransformation wieder aktiviert habe.

Re: Growatt-openhab (python,MQTT) Verständnisproblem

Verfasst: 21. Nov 2021 12:35
von peter-pan
...sorry, während ich noch in den Threads von "johanmeijer" gestöbert habe, habt ihr das Problem mit dem Topic schon gelöst. Wobei ich mich jetzt allerdings frage, wo das Topic bei dir gesetzt wird, wenn es in der "Ini-Datei" auskommentiert ist.

Eigentlich sollte die State-Transformation jetzt auch als Number funktionieren. Es sei denn ich habe irgend etwas übersehen. :oops:

Edit: Grad gesehen, dass vor dem Wert noch ein "Leerzeichen" steht. Dass könnte der Grund sein, dass das Number so nicht funktioniert :oops: