Hallo,
ich habe einen Noah2000 ,daran angeschlossen 4 Solarpaneele, hinter dem Noah einen Growatt 800 Wechselrichter. Läuft bisher einwandfrei, auch die Einbindung in Home Assistant. Nun bin ich seit geraumer Zeit auf der Suche nach einer Möglichkeit, den Status „Batterie zuerst“ & „Verbraucher zuerst“ - den man in der App einstellen kann - irgendwo auszulesen. Hat das jemand hinbekommen? Ich habe die offizielle Integration von HA zur Growatt Datenauslesung installiert, nur leider finde ich dort keinen passenden Parameter.
Kurzes Update, vielleicht kann mir einer damit helfen. Habe herausgefunden, das per MQTT folgendes übertragen wird:
Und da steht auch der „work mode“ - wie bekomme ich den als Entität in Home Assistant?
Hi, ich habe genau dazu hier gestern schon einmal dazu geschrieben. Deine Daten liegen im json Format vor, daher kannst du dort dann die gewünschten Werte herausziehen. Lese mal bitte in diesem Link dazu:
Liefert der MQTT Explorer alle Werte die ich brauche? Und wo erstelle ich das ?? Gibt es irgendwo eine Anleitung/Video dazu?
Sieht in deinem Screenshot so aus, dass du alle wichtigen Daten bekommst.
Hast du dir den Link einmal durchgelesen?
Die Mqtt-Sensoren müssen in der configuration.yaml erstellt werden (das geht soweit ich weiß noch nicht über Helfer in der UI). Der Mqtt-Explorer ist nur für deine Übersicht, hat aber nicht direkt etwas mit Home Assistant zu tun. In HA musst du dir dafür den (mqtt) mosquitto broker installieren (über HACS), diesen konfigurieren und im Anschluss kannst du die Daten vom Noah an den mosquitto broker weiterreichen.
Wie sieht dein linke Seite im Mqtt-Explorer, aus also dort wo die Topic aufgeführt wird. Du ha jetzt nur die json von der rechten Seite im Explorer gezeigt.
Deine Topic lautet demnach noah2mqtt/0PVP6H6ZR23MT00X8
.
Diese trägst du entsprechend ein.
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
Darunter kannst du dann über den Text/Namen den gewünschten Wert aus der json herausziehen.
value_template: "{{ value_json.solar_w }}"
Ich habe mal die Konfiguration für dich erstellt. So sollte das ausschauen:
mqtt:
sensor:
- name: "Solar Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "solar_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.solar_w }}"
device_class: power
- name: "Output Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "output_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.output_w }}"
device_class: power
- name: "State of Charge"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_soc"
unit_of_measurement: "%"
value_template: "{{ value_json.soc }}"
device_class: battery
- name: "Charge Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "charge_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.charge_w }}"
device_class: power
- name: "Discharge Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "discharge_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.discharge_w }}"
device_class: power
- name: "Generation Today"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "generation_today_kwh"
unit_of_measurement: "kWh"
value_template: "{{ value_json.generation_today_kwh }}"
device_class: energy
state_class: total_increasing
- name: "Generation Total"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "generation_total_kwh"
unit_of_measurement: "kWh"
value_template: "{{ value_json.generation_total_kwh }}"
device_class: energy
state_class: total_increasing
- name: "Battery Status"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_status"
value_template: "{{ value_json.status }}"
Diese Sensoren legst du in deiner configuration.yaml an, z.B. mit dem File-Explorer oder Visual Code Studio. Danach nur noch HA einmal neustarten und dann solltest du die gewünschten Werte in HA intergriert haben. In den Entwicklerwerkzeugen unter Zustände oder unter Geräte nach den gerade neu erstellten Entitäten suchen und schauen, ob Daten korrekt geliefert werden.
Also erstmal Respekt - in so kurzer Zeit die ganzen Werte…Wahnsinn. Ich habe festgestellt, das mir ja eigentlich nur ein Wert fehlt: „work mode“ - den finde ich in deinen Texten auch nicht. Kann ich den auch einzeln in der configuration.yaml einsetzen:
mqtt:
sensor:
- name: "Lade Priorität Noah2000"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "work_mode"
value_template: "{{ value_json.status }}"
Wo muss das rein in der configuration.yaml!!
Danke, ist ja relativ schnell gemacht, einfach einen Sensor erstellt und dann entsprechend mit deinen Namen die nachfolgenden Sensoren kopiert und die etnsprechenden device_classes vergeben. Müsste eigentlich so passen.
Einfügen kannst du die Sensoren an einer beliebigen Stelle in der config.yaml. Ich habe die mqtt Sensoren bei mir gleich am Anfang eingebunden.
Stimmt, den work_mode habe ich nicht mit aufgenommen, kannst du aber wie bei den anderen einfach ergänzen (auch einzeln möglich).
- name: "Work Mode"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_work_mode"
value_template: "{{ value_json.work_mode }}"
icon: mdi:cog
Hier nochmal der komplette Code mit work_mode ergänzt.
mqtt:
sensor:
- name: "Solar Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "solar_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.solar_w }}"
device_class: power
- name: "Output Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "output_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.output_w }}"
device_class: power
- name: "State of Charge"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_soc"
unit_of_measurement: "%"
value_template: "{{ value_json.soc }}"
device_class: battery
- name: "Charge Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "charge_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.charge_w }}"
device_class: power
- name: "Discharge Power"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "discharge_power_w"
unit_of_measurement: "W"
value_template: "{{ value_json.discharge_w }}"
device_class: power
- name: "Generation Today"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "generation_today_kwh"
unit_of_measurement: "kWh"
value_template: "{{ value_json.generation_today_kwh }}"
device_class: energy
state_class: total_increasing
- name: "Generation Total"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "generation_total_kwh"
unit_of_measurement: "kWh"
value_template: "{{ value_json.generation_total_kwh }}"
device_class: energy
state_class: total_increasing
- name: "Battery Status"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_status"
value_template: "{{ value_json.status }}"
- name: "Work Mode"
state_topic: "noah2mqtt/0PVP6H6ZR23MT00X8"
unique_id: "battery_work_mode"
value_template: "{{ value_json.work_mode }}"
icon: mdi:cog
@jayjojayson : muss die unique ID nicht nur „work_mode“ heissen statt „battery_work_mode“ ??
Moin, die kannst du benennen wie du möchtest. Die braucht man, um später in der UI die Konfiguration vornehmen zu können, ansonsten ist das gesperrt. Hat aber keinen Einfluss auf die übermittelten Daten.
Ich hatte gedacht das bezieht sich auf die Bezeichnung von MQTT…dann werde ich den Text mal in die Configuration.yaml werfen
Danke…
Nein für die Bezeichnung aus der MQTT json wird neben der Topic diese Passage verwendet:
value_template: "{{ value_json.work_mode }}"
Hier ist dann Bezeichnung work_mode
genauso wie in deiner json zu benennen.
Also immer Topic → Bezeichnung/Name json-Wert
Viel Erfolg beim testen
Ich habe noch eine Frage: kann ich ,mit einem Helfer zum Beispiel,die Ausgabe einer Entität anpassen? In meinem Fall ist die Ausgabe im Original: load First und battery First - die würde ich gern anders benennen.
Hi, dann hast du es soweit mit MQTT hinbekommen?
Ja du kannst die Ausgabe anpassen mit einem Template-Helfer. Den kannst du in der UI oder direkt in der configuration.yaml erstellen.
So würde er für die config.yaml aussehen.
template:
- sensor:
- name: "Betriebsmodus auslesen"
state: >
{% if states('sensor.work_mode') == 'load First' %}
Last zuerst
{% elif states('sensor.work_mode') == 'battery First' %}
Batterie zuerst
{% else %}
{{ states('sensor.work_mode') }}
{% endif %}
Diesen Teil müsstest du im Helfer als Template angeben, wenn du dir einen Helfer über die UI erstellst.
{% if states('sensor.work_mode') == 'load First' %}
Last zuerst
{% elif states('sensor.work_mode') == 'battery First' %}
Batterie zuerst
{% else %}
{{ states('sensor.work_mode') }}
{% endif %}
Der Sensor work_mode sollte ja der richtige Sensor sein, wenn nicht musst du den auch anpassen.
@jayjojayson : hab heute die Daten in die configuration.yaml eingefügt - hab den Sensor auch gefunden - zeigte allerdings „unbekannt“…hab schon an mir gezweifelt, bis ich die Seriennummern verglichen habe: die sind unterschiedlich. Hab sie dann gegen meine ausgetauscht - läuft jetzt!!!
Vielen Dank nochmal. Jetzt mache ich mich an die Helfer…
@jayjojayson : Helfer funktionieren auch, habe allerdings zwischen load und firts ein „_“ eingefügt, in MQTT heissen die zumindest so.
Vielen,vielen Dank nochmals…
Das nächste Projekt ist die Nulleinspeisung, hab da einige Anleitungen zu gefunden.
Gerne, gerne, dann hast du jetzt alle notwendigen Daten zusammen, um die Nulleinspeisung anzugehen.
@jayjojayson : ich verzweifle gerade an der Nulleinspeisung ,aber nicht weil ich sie in Betrieb nehmen will, sondern wenn ich den „Code“ aus dem Beitrag in den YAML einfüge, ist nach dem abspeichern alles durcheinander. Also die Zeilen sind nicht mehr wie sie waren, sondern zusammen gerückt. Was kann das sein?? Ich habe allerdings noch nicht probiert ,ob sie trotzdem läuft, bin noch nicht dazu gekommen.
Und bei diesem Code sagt er mir immer, das in Zeile 23 Spalte 9 irgendein Fehler ist. Finde da aber nichts:
alias: Nulleinspeisung
description: >-
Sofern sich der numerische Wert des Momentanverbrauchs ändert, wird der
numerische Wert als Ausgangsleistung der Batterie festgelegt. Höchstens jedoch
800 Watt.
triggers:
- trigger: state
entity_id:
- sensor.tasmota_strom_power_curr
conditions: []
actions:
# 10 sek Verzögerung aufgrund der Cloudlösung, sonst springt es zu wild hin und her
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- action: number.set_value
metadata: {}
data:
value: >
# liest den aktuellen Stromverbrauch aus
{% set consumption = states('sensor.tasmota_strom_power_curr') | float %}
# liest die aktuell eingestellte Einspeisung des Noah aus
{% set current_output = states('sensor.noah_2000_output_power') | float %}
# stellt den minimalen und maximalen Output ein, beim Neo ist minimum scheinbar 50W
{% set min_output = 50 %}
{% set max_output = 800 %}
# wenn der aktuelle Stromverbrauch > 0 W, dann stelle die gewünschte Einspeisung auf diesen Wert abzgl. 15 W
{% if consumption > 0 %}
{% set desired_output = consumption - 15 %}
# falls bereits eingespeist wird, wird dieser Wert dazu gerechnet.
# Beispielweise: aktueller Verbrauch 50 W, aktuelle Einspeisung 50 W => desired Output = 35 (50-15 siehe Berechnung davor) + 50 => 85W
{% set desired_output = current_output + desired_output %}
{% elif -9 < consumption <= 0 %}
# Wenn aktueller Verbrauch zwischen -9 W und 0 W => mache gar nichts und belasse den Output auf dem aktuellen Wert
{% set desired_output = current_output %}
{% else %}
# Bei negativen (mehr als -9 W) Momentanverbrauch setzte den Wert höher.
# Beispiel: Momentenverbrauch -50 W, Einspeisung 100 W
# => 100 + (-50) = 50 W
{% set desired_output = current_output + consumption %}
{% endif %}
# Prüfung ob der maximale Wert überschritten bzw. der minimale Wert unterschritten wird. Wenn ja, setze die o.g. Grenzwerte.
{% set desired_output = [desired_output | round(0, 'floor'),max_output] | min %}
{% set desired_output = [desired_output,min_output] | max %}
# Wert aus den o.g. Berechnungen
{{ desired_output }}
target:
# Ergebnis als Output des Noah vorgeben
entity_id: number.noah_2000_system_output_power
Habe natürlich die Entitäten ersetzt durch meine.
Nimm mal diesen Code hier, habe die Einrückung korrigiert. Der hat dort anscheinend Problem mit den Notizen gehabt. Zeile 23 ist der Sensor sensor.tasmota_strom_power_curr'
, den hast du auch wirklich so vorliegen?
alias: Nulleinspeisung
description: >-
Sofern sich der numerische Wert des Momentanverbrauchs ändert, wird der
numerische Wert als Ausgangsleistung der Batterie festgelegt. Höchstens jedoch
800 Watt.
triggers:
- trigger: state
entity_id:
- sensor.tasmota_strom_power_curr
conditions: []
actions:
# 10 sek Verzögerung aufgrund der Cloudlösung, sonst springt es zu wild hin und her
- delay:
hours: 0
minutes: 0
seconds: 10
milliseconds: 0
- action: number.set_value
metadata: {}
data:
value: >
# liest den aktuellen Stromverbrauch aus
{% set consumption = states('sensor.tasmota_strom_power_curr') | float %}
# liest die aktuell eingestellte Einspeisung des Noah aus
{% set current_output = states('sensor.noah_2000_output_power') | float %}
# stellt den minimalen und maximalen Output ein, beim Neo ist minimum scheinbar 50W
{% set min_output = 50 %}
{% set max_output = 800 %}
# wenn der aktuelle Stromverbrauch > 0 W, dann stelle die gewünschte Einspeisung auf diesen Wert abzgl. 15 W
{% if consumption > 0 %}
{% set desired_output = consumption - 15 %}
# falls bereits eingespeist wird, wird dieser Wert dazu gerechnet.
# Beispielweise: aktueller Verbrauch 50 W, aktuelle Einspeisung 50 W => desired Output = 35 (50-15 siehe Berechnung davor) + 50 => 85W
{% set desired_output = current_output + desired_output %}
{% elif -9 < consumption <= 0 %}
# Wenn aktueller Verbrauch zwischen -9 W und 0 W => mache gar nichts und belasse den Output auf dem aktuellen Wert
{% set desired_output = current_output %}
{% else %}
# Bei negativen (mehr als -9 W) Momentanverbrauch setzte den Wert höher.
# Beispiel: Momentenverbrauch -50 W, Einspeisung 100 W
# => 100 + (-50) = 50 W
{% set desired_output = current_output + consumption %}
{% endif %}
# Prüfung ob der maximale Wert überschritten bzw. der minimale Wert unterschritten wird. Wenn ja, setze die o.g. Grenzwerte.
{% set desired_output = [desired_output | round(0, 'floor'),max_output] | min %}
{% set desired_output = [desired_output,min_output] | max %}
# Wert aus den o.g. Berechnungen
{{ desired_output }}
target:
# Ergebnis als Output des Noah vorgeben
entity_id: number.noah_2000_system_output_power
Innerhalb des Codes kannst du mit Shift eine oder gleich mehrere Zeilen nach rechts bewegen, mit Shift + Tab geht das ganze nach links. So kann man schnell die Einrückung korrigieren.