Growatt Noah Nulleinspeisung MQTT

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

Hallo zusammen,
ich versuche mich gerade an einer Nulleinspeisung meines BKW-Speichers.
Über den MQTT-Explorer kann ich die Ausgangsleistung händich einstellen. Aber wie kann ich das MQTT-Command mit OH absetzen?
Das Topic sieht so aus:

Code: Alles auswählen

noah2mqtt/deviceSerial/parameters/set
Und der JSON-Inhalt so:

Code: Alles auswählen

{"charging_limit":100,"discharge_limit":10,"output_power_w":100}
Wenn ich das in OH übernehme sieht das irgendwie nicht so sinnvoll aus und es kommt auch falsch im MQTT-Explorer an:
OH+MQTT_Command.jpg
MQTT_Explorer_300.jpg
Am Ende müsste ich ja auch den Outputwert dynamisch übermitteln, d.h. "aktueller Hausverbrauch" größer 50W, dann "Outputwert" = "aktueller Hausverbrauch" bis 800W
Könnte mir jemand bei dem Script helfen?

Vielen Dank.

Gruß Rudi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von Harka »

Moin,
müssen alle 3 Parameter gleichzeitig geschickt werden? Möglich, aber imho unüblich. Falls nicht, würde ich jeweils ein eigenen Channel erstellen.
Beispiel für output_power_w

Code: Alles auswählen

channels:
  - id: Growatt_out
    channelTypeUID: mqtt:number
    label: Growatt_out
    description: ""
    configuration:
      commandTopic: noah2mqtt/deviceSerial/parameters/set
      unit: W
      formatBeforePublish: '{"output_power_w": %s}'
      stateTopic: noah2mqtt/deviceSerial/parameters
      transformationPattern:
        - JSONPATH:$.output_power_w
transformationPattern = Incoming Value Transformations
formatBeforePublish = Outgoing Value Format

Um alle Einstellungen sehen zu können ggf. Show advanced aktivieren und die JSONPATH transformation muss installiert sein. Falls zwar Kommandos raus gehen aber nicht befolg werden - mal die Unit W raus nehmen.

PS: beim Script bin ich noch aussen vor. Unser Stromzähler wurde vor 2 Wochen gewechselt aber ein Akku wird wohl erst im Frühjahr Einzug halten. Der Growatt ist bisher auch mein Favorit :)

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

Hi,
als ich mit dem MQTT-Explorer rumgespielt hatte, hat nur das Senden aller 3 Parameter funktioniert.
Channel und item sind angelegt:
OH+MQTT_Command2.jpg
Wenn ich einen beliebigen Wert sende, kommt dieser auch im MQTT Explorer an, wird aber nicht vom Growatt übernommen. Ich vermute, dass es daran liegt, dass er gerade in standby ist. Ich werde es morgen bei Sonnenschein noch einmal testen.
MQTT_Explorer_300.jpg
Vielen Dank.

VG Rudi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

Hallöchen,
ich habe es jetzt geschafft, dass ich über ein Item die Ausgangsleistung bequem über OH steuern kann.
Danach habe ich mir mit blockly ein Script gebaut, um die Ausgangsleistung dyn. an meinen aktuellen Hausverbrauch anzupassen.

Als erstes habe ich mir zum Testen ein Number-Item erstellt. Aber leider wird das Item nicht mit dem Wert das Hausverbrauchs befüllt. Merkwürdigerweise kommt auch nichts im log an. Hat einer eine Idee?
OH_blockly.jpg
Number_Itemjpg.jpg
Edit:
In der log-Datei wird irgendwie ab dem 15.10. nichts mehr geloggt. Ich hab keine Ahnung warum nicht.

Code: Alles auswählen

"\openhab\userdata\logs\openhab.log"
Wenn ich aber im Portainer im Containerlog gucke habe ich folgende Fehlermeldung:

Code: Alles auswählen

09:49:30.546 [OH-rule-434754c00f-1] ERROR org.openhab.core.automation.module.script.internal.handler.ScriptActionHandler - Script execution of rule with UID '434754c00f' failed: org.graalvm.polyglot.PolyglotException: TypeError: Set_Einspeisung.sendCommand is not a function
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von udo1toni »

Erst mal: BITTE Text, wo möglich.
Die Blockly Rule kannst Du als Code markiert in Textform hier einfügen, das ist im Zweifel besser lesbar und man kann den Code leicht abändern, wenn man Anmerkungen dazu machen möchte.
Das gleiche gilt inzwischen für das Item (zumindest wenn Du eine aktuelle Version von openHAB einsetzt, gibt es auch dort Code-Ansichten, leider in der UI getrennt nach Item und einzelnen Metadaten, es sei denn Du ziehst das JSON aus der REST API (items/GET->Items/[itemname])

Du zeigst ein Item A_Number_Item, das taucht in der gezeigten Rule nicht auf. Es gäbe evtl. das Item Number_Item, aber das ist nur Datenquelle, nicht Datensenke.
Ist Set_Einspeisung denn überhaupt ein Item?
send command benötigt als Ziel ein Item, welches den gesendeten Befehl ausführen kann.
Eventuell möchtest Du eigentlich nur den Status des Items ändern, dann wäre post update die richtige Option, aber auch dort muss als Ziel ein Item angegeben werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

Hallo Udo,
ich danke dir. Jetzt wollte ich dir Item und Blockly Rule als Text einfügen, da ist mir mir, wie du schon richtig gemerk hast, aufgefallen, dass ich das Item "Number_Item" zu A_Number_Item geändert hatte, damit es in der Itemübersicht weiter oben steht. Das hat sich aber in der Rule nicht vertragen, dort wurde immernoch das "alte" Item verwendet. Nach dem löschen und neuanlegen sieht es erstmal ok aus der Status ist der gleiche wie der vom Input Item Hausverbrauch.
Anbei mein Script, dass den aktuellen Hausverbauch -50W an das BKW_Output_Power weitergeben soll. Damit sollte ich in Zukunft vermeiden, den Strom zu verschenken und kann aber gleichzeitig auf Lastspitzen reagieren.
Ich danke dir.

Code: Alles auswählen

var Hausverbrauch, Hausverbrauch_in_W, BKW_Output_Power, tmp_BKW_Output_Power;


Hausverbrauch = items.getItem('E_Bezug_KW').state;
Hausverbrauch_in_W = (typeof Hausverbrauch_in_W === 'number' ? Hausverbrauch_in_W : 0) + Hausverbrauch * 1000;
BKW_Output_Power = items.getItem('A_Number_Item').state;
if (Hausverbrauch_in_W >= 100) {
  tmp_BKW_Output_Power.postUpdate((Hausverbrauch_in_W - 50));
}
if (tmp_BKW_Output_Power > BKW_Output_Power + 50) {
  items.getItem('A_Number_Item').postUpdate(tmp_BKW_Output_Power);
}
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von Harka »

Moin,
ich verstehe bisher noch nicht was da passiert :?:
- Woher kommt der Wert Hausverbrauch? Falls aus dem Zähler aus dem Schaltschrank, welcher möglichst 0 sein soll, ist die Berechnung imho möglicherweise falsch.
- nimmt der Noah jeden x-Beliebigen Wert entgegen oder gibt es Limitationen (Nachkomma, Minimum, Maximum, ...) E: // system output power in watts, between 0 and 800

Ich sehe hier eine häufige Fehlerquelle im Umgang mit den Werten in Regeln. Für Berechnungen und Vergleiche musst Du sicherzustellen, das diese Werte dafür geeignet sind. Bitte das einfache State weitestgehend vermeiden. Beispiele
ForumGrowatt1.png
Ich bin eher Team numeric_state. Für UoM gibt es extra Blöcke zum Rechnen und Vergleichen.

Ps: Bestellung ist raus. Vorhin ein Angebot gesehen bei dem wir zuschlagen mussten.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

Hallo Haka,
nehme ich mir zu Herzen und versuche ich umzusetzen (ist mein erstes Script in OH und Blockly).

Soweit bin ich ganz zufrieden. Der Noah und Neo funktionieren bisher tadellos. Nur die Integration ins smarthome hätte ich mir einfacher vorgestellt, wobei mir klar war, dass ich ihn nicht in die homematic bekomme.

Ja Hausverbrauch kommt vom Smartmeter und ist immer größer/gleich 0.
Ich hatte dem Noah über mqtt auch Werte über 800 gesendet, die er dann mit Max 800 verarbeitet hat.

Ich gucke mir das Thema numeric_state mal an, danke.

Gruß Rudi
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

Harka
Beiträge: 487
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von Harka »

Moin,
Jetzt grüble ich die ganze Zeit, wie das mit einem reinem Verbrauchszähler bei uns funktionieren könnte und sich dabei noch gut handhaben lässt. Kein Plan ob so wirklich gut und für Deine Zwecke geeignet ist. Eventuell kann ja doch noch jemand mit Erfahrung was zum Thema beisteuern.

Mein aktueller Lösungsansatz wäre:
Eine Regel zur "Grundlast"-Berechnung. Hier werden zur eigentlichen Grundlast, welche 24/7 vorhanden ist, noch alle von openHAB einsehbaren Verbraucher hinzu addiert. Das sind die Verbrauchsmessungen von Steckdosen u.ä. (alle in eine Gruppe welche mit der Aggregation_Function die Summe bildet), Schalter, Onlinestatus, …). Hier würde ich unbedingt den Kühlschrank als "Großverbraucher" mit rein nehmen. Alle diese Geräte und Gruppen sind Trigger dieser Gruppe. Das Ergebnis wird in ein Item geschrieben.

Dieses Item und der Verbrauchszähler sind Trigger für die 2. Regel. Diese schaut ob der aktuelle Wert von Akku-out + Verbrauchsmesser > z.B 800 ist -> dann 800
Wenn Verbrauchsmesser = 0 dann GrundlastItem.

Ich denke das wäre für uns ein guter Anfang, welcher an Tagen wo die Sonne mitspielt, schon mal ein Eigenverbrauch von 70-80 % bringen sollte. Danach noch etwas hübsch machen (Filter, damit sich die Sollwerte nicht im Sekundentakt ändern; schauen welche weiteren Verbraucher noch erfasst werden können, …)

E: Paket ist gestern gekommen, Einrichtung erfolgt, über Nacht schon mit der vereinfachten Regel getestet -> schöne Spielwiese. Nur bei Lasten bis 100 W verträgt er sich nicht mit dem Wechselrichter und die Regelung muss daher mit OpenDTU erfolgen

kopfnuss
Beiträge: 23
Registriert: 27. Dez 2023 00:16
Answers: 0

Re: Growatt Noah Nulleinspeisung MQTT

Beitrag von kopfnuss »

So ich habe fertig. Bin damit ertstmal zufrieden.
Aktuell wird der Batteryoutput abhängig vom Hauptstromzähler geregelt. Dort erfasse ich die aktuelle Leistung posHausverbrauch und die aktuelle Einspeisung negHausverbrauch (positvier Wert). Der BKW Akku hängt an einer verbrauchsmessenen Steckdose (auf Einspeismodus eingestellt).

Der wahre Hausverbauch errechnet sich anhand posHausverbauch + Einspeisesteckdose - negHausverbrauch.
Wenn posHausverbrauch größer 100W dann wird der Batteryoutput neu berechnet.
Wenn posHausverbauch kleiner 50W dann Batteryoutput = wahrer Hausverbauch -50W.

Damit erfolgt eine Regelung nur bei Netzbezug von unter 50W und über 100W.

Aktuell probiere ich mich noch am Trigger der Rule, damit im Falle einer Einspeisung ins Netz eine schnellere Anpassung des Batteryoutputs erfolgt, wobei eine Einspeisung von 100W für 5min auch nicht so dramtisch ist.

Anbei das Blockly und ein Grafanaauszug:

Code: Alles auswählen

var posHausverbrauch, negHausverbrauch, Einspeisesteckdose, Battery_Outtput_read, Batter_Soc, trueHausverbrauch;


posHausverbrauch = items.getItem('Netzbezug_Last_Value').numericState;
negHausverbrauch = items.getItem('Netzeinspeisung_Last_Value').numericState;
Einspeisesteckdose = items.getItem('HMIPPSM_1_Power').numericState;
Battery_Outtput_read = items.getItem('output_w').numericState;
Batter_Soc = items.getItem('Battery_Soc').numericState;
trueHausverbrauch = posHausverbrauch + (Einspeisesteckdose - negHausverbrauch);
if (posHausverbrauch >= 100 && trueHausverbrauch - 50 >= Einspeisesteckdose + 50 && Battery_Outtput_read < 800 && Batter_Soc > 15) {
  if (posHausverbrauch >= 800) {
    items.getItem('MQTT_noah2mqtt_Battery_Output').sendCommand(800);
    items.getItem('A_Number_Item').postUpdate(800);
  } else {
    items.getItem('MQTT_noah2mqtt_Battery_Output').sendCommand((trueHausverbrauch - 35));
    items.getItem('A_Number_Item').postUpdate((trueHausverbrauch - 35));
  }
}
if (posHausverbrauch < 50 && Einspeisesteckdose > 50 && Batter_Soc > 15) {
  items.getItem('MQTT_noah2mqtt_Battery_Output').sendCommand((trueHausverbrauch - 50));
  items.getItem('A_Number_Item').postUpdate((trueHausverbrauch - 50));
}
if (Batter_Soc > 10 && Batter_Soc <= 15) {
  items.getItem('MQTT_noah2mqtt_Battery_Output').sendCommand(175);
  items.getItem('A_Number_Item').postUpdate(175);
}
OH_blockly.jpg
Ich bedanke mich für den erbrachten Input aus dem Forum. Gerade der Input mit dem numeric State war sehr hilfreich ;)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 4.3.3 im Debian-Docker-Container (bookworm)

Antworten