PV Anlage in Homey einbinden

Kurze Aufklärung :slight_smile:

Das ist nochmal der Ausschnitt aus dem MqttExplorer:

Das ist der Topic-Pfad im MQTT-Device:

“stateTopic”: “tele/tasmota_B65B9C/SENSOR”,

Über den Topic-Pfad erhältst du also den grünen Wert.

Diese Topic enthält keinen Wert, sondern einen JSON-String.
Deshalb wird anschließend mit dem value Template “valueTemplate”: “$.Power.Total_in”, ein Wert aus dem JSON gelesen (der gelbe Wert mit dem JSON-Pfad - in zwei Stufen über Power.Total_in).

Das habe ich im MQTT Device im Homey abgelegt. Und den Code habe ich nach sehr langen Suchen aus den gefundenen Beispielen abgeleitet.

Der Flow ist bei mir um ein zweites Gerät zu füllen. Beide Wege sind bei mir unabhängig voneineander. Ich hatte eben nur keine Ruhe, bis beides bei mir funktioniert hat.

Hier die einzelnen Schritte:


Gross/Kleinschreibung muss bei State Topic und Value Template unbedingt beachtet werden.

Über “Einstellungen” kann man aber im nachhinein noch anpassungen vornehmen. Aber nicht über die Eingabefelder wie beim anlegen, sondern nur über den Topics EIntrag bei den einstellungen.

Hier noch meine MQTT Einstellungen im Tasmota Lesekopf:

Den Aufbau habe ich mehr oder weniger verstanden. Allerdings habe ich nach wie vor nicht verstanden was ein "valueTemplate" ist, wofür es gut ist und warum ein Dollar-Zeichen vor $.Power.Total_in hinzugefügt werden muss.
@Michael_Justus hat den Code in einem Geräte von der MQTT Hub App eingetragen, aber eigentlich möchte ich nicht extra die MQTT Hub App installieren die ich sonst nicht benötige. Der Arbeitsspeicher vom Homey ist nun mal begrenzt und viel Platz habe ich nicht mehr. Dennoch vielen Dank für die ausführliche Beschreibung! :+1:

Deshalb noch mal die Frage, ob es nicht auch mit den Build-In Logik Karten geht? Schließlich können diese ja auch einen JSON String analysieren und einen “Pfad” z.B. als Nummern-Tag setzen. Ich habe bereits einiges als “Pfad” ausprobiert, aber ich bekomme keinen Wert in die Variable gespeichert. Wenn es mit einer dieser Karten funktionieren sollte, dann bekomme ich es gerade nicht hin den richtigen Pfad zu hinterlegen.
Alternativ sollte es doch mit einem Homey Script funktionieren, oder? Ich habe bereits etwas mit ChatGPT rum gespielt. Im Großen und Ganzen sehen die Scripts auch ganz logisch aus, soweit ich das überhaupt beurteilen kann. Woran ich bei den Scripts momentan scheitere, ist die Übergabe des Topic Inhalts von der MQTT Client App in das Script.

Hier noch mal alle Infos.

  • MQTT-Topic
tasmota/discovery/4C11AE139298/sensors
  • JSON-String vom o.g. MQTT-Topic
{"sn":{"Time":"2024-12-21T10:18:31","sml":{"zaehlerstand_180":1122.675,"zaehlerstand_280":238.043,"netz_frequenz":49.9,"aktuelle_wirkleistung":256,"strom_l1":0.93,"spannung_l1":228.2,"wirkleistung_l1":114,"strom_l2":0.95,"spannung_l2":227.1,"wirkleistung_l2":193,"strom_l3":0.39,"spannung_l3":226.8,"wirkleistung_l3":-51}},"ver":1}
  • Flow

  • Homey Script
    (Beispielhaft möchte ich den Wert aktuelle_wirkleistung in die numerische Variable BeispielVariable mit folgendem Flow schreiben lassen.)
// JSON String wird durch MQTT empfangen
const jsonString = payload;  // payload wird automatisch von MQTT Client geliefert

// Parse JSON
try {
    const data = JSON.parse(jsonString);

    // Extrahiere aktuelle_wirkleistung
    const aktuelleWirkleistung = data.sn.sml.aktuelle_wirkleistung;

    // Schreibe in die Homey-Variable 'BeispielVariable'
    const varName = 'BeispielVariable';

    await setTagValue(varName, {type: 'number', value: aktuelleWirkleistung});

    console.log(`aktuelle_wirkleistung (${aktuelleWirkleistung}) wurde in die Variable '${varName}' geschrieben.`);
} catch (error) {
    console.error('Fehler beim Parsen des JSON Strings:', error);
}

Wenn ich den Flow dann teste erscheint aber folgende Fehlermeldung bei der Homey Script Flow Karte:

Es scheitert also scheinbar an der Übergabe des MQTT Topics bzw. des Inhaltes des JSON-Strings an das Script.
Weiß jemand Abhilfe?

payload ist nicht definiert bei dem Skript.
Eine Input-Variable musst du verwenden mit:

const jsonString = args[0];

Dazu musst du dein Skript mit dieser Karte aufrufen und den Tag der MQTT-Client-Karte einfügen:


Bisschen schlecht übersetzt…

1 Like

Es gibt auch bei den Homey Logik Karten eine für JSON

ohne $. funktioniert es übrigens auch.

1 Like

Dann müsste das Script aber geändert werden. In dem ChatGPT Script wird der Wert ja direkt in eine Variable geschrieben. Mit der von Dir gezeigten HomeyScript Flow Karte wird der Wert aber als Ergebnis zurückgegeben und dann in einer weiteren Logik Karte in eine Variable geschrieben:

So eine Logik Karte meinte ich auch und es funktioniert auch. Perfekt! :+1:

Eine Frage hätte ich allerdings trotzdem noch. Weiß jemand warum der Tasmota IR Lesekopf 2x im MQTT Explorer auftaucht?

Wie man anhand der Anzahl der messages erkennen kann, werden die Daten im oberen MQTT Gerät tasmota nicht aktualisiert, im unteren tele schon.
Zuerst dachte ich, dass das Gerät tele von Home Assistant kommt. Aber wenn ich die HA MQTT Integration deaktiviere, werden die Werte im MQTT Explorer trotzdem aktualisiert, in HA selber aber nicht mehr. Der MQTT Broker läuft auf Homey.

Kann ich leider nicht beantworten. Sieht bei mir aber genauso aus.

1 Like

Du nutzt aber nicht Home Assistant, oder?

ja, ich benutze auch Homeassistant.

Hm, okay. Ich dachte zuerst, dass das Topic tele irgendwie von HA kommt. Habe HA gerade aber mal vollständig runtergefahren und abgeklemmt und das Topic tele wird trotzdem weiterhin aktualisiert. So soll es auch sein.

nein, Tele kommt von tasmota.

1 Like

Hi, kannst du kurz erklären, wie die Daten des WR über die HAC-App in Homey integriert werden muss, um die Daten im Energy-Dashboard sehen zu können? Für jeden Wert ein einzelnes Gerät? Als Sensor? Benutzerdefiniertes Gerät?

DANKE!

Die Daten meines WR werden nicht mehr über HA und der HAC App importiert, sondern direkt via MQTT in ein AVD von der Device Capabilities App geschrieben.

Als ich den Umweg noch über HA genutzt hatte, habe ich damals die Daten vom WR in der homey.yaml eingetragen und dann als Verbund Gerät importiert. Heute würde ich allerdings ein Benutzerdefiniertes Gerät benutzen und die einzelnen Entitäten hinzufügen.

@RonnyW hat auf seiner eigenen Homepage ein Tutorial veröffentlicht, wie man ein SmartMeter von HA in Homey für das Energy Dashboard verfügbar macht:
HomeAssistant: Verwende deinen SmartMeter in HomeyEnergy – Ronny Winkler
Beim WR ist es eigentlich nicht viel anders. Da es sich aber um ein SmartMeter mit Energie-Import und -Export handelt, werden in dem Beispiel die Capabilities meter_power.imported und meter_power.exported genutzt. Diese gibt es für einen WR natürlich nicht, sondern nur der Ertrag in kWh. Deshalb muss man für die entsprechende Entität in dem gekennzeichneten Feld die Capability meter_power auswählen.

Das darauffolgende Drop-Down Feld Meter type for cumulative device sollte dann erst gar nicht erscheinen bzw. sollte vernachlässigbar sein.

In den erweiterten Geräteeinstellungen müssten in dem Abschnitt Energie die Parameter Kumulative Energiemessung und In Gesamtenergie einbeziehen noch auf Ja geändert werden. Als Geräte-Typ müsste Sensor ausgewählt werden.
Das sollte es eigentlich sein.

Sollte etwas unklar sein oder nicht funktionieren, einfach melden.

Danke - das mit Import und Export ist mir noch nicht klar. In HA habe ich die Entitäten Sensor.import_power bzw. Sensor.export_power.

Damit gibt er mir im Energy DB dann aber offensichtlich falsche Werte aus.

Das meinst du vermutlich oben - wie bekomm ich das hin? VG

Wird Import/Export von einem Batteriespeicher übermittelt? Oder wo kommen die Entitäten her?

… das ist eine gute frage. ich war immer davon ausgegangen, dass das Netzimport/netzexport ist!?

Ich bekomme diese Daten von HA - die Werte stimmen mit denen des Sungrow Wechselrichters überein:

Im Energy DB sieht’s aber so aus:

Hat jemand einen Tipp? Danke!

Du verwendest HA Sensoren mit aktuellen Verbrausdaten (W). Diese darfst du nur übernehmen in passende Homey Capabilities (measure_power).
Für einen SmartMeter bräuchtest du einen Sensorwert, der den aktuellen Steomverbrauch angibb, positiv für Verbrauch, negativ für Einspeisung.

Für die Gesamtdarstellung im Energiedashboard brauchst du Zähler (kWh). Diese Zählerdaten, getrennt nach Import/Export kannst du den Zähler-Capabilities zuordnen, also meter_power
imported/meter_power.exported.

Hast du diese Zähler in HA verfügbar?
Wenn nicht, könntest du die Summierung in einen Zähler mit der App ‘PowerByTheHour’ machen. Das ist dann zwar nur angenähert und abh. von der Aktualisierungsrate, aber besser als nichts.

Edit: Moment, ist das der „richtige“ Zähler?