Energieverbrauch messen (Smart Meter) - welcher funktioniert mit Homey?

Nix konkretes. Aber die Anleitung legt das nahe, dass man den Viewer mit dem Broker auf dem Gerät verbindet.

https://forum.shrdzm.com/viewtopic.php?t=302

ModbusTCP muss ähnlich wie REST-Abrufe periodisch über Flows getriggert werden (alle xx Sekunden).

Die App dient dazu MQTT Topics graphisch darzustellen:

Ob diese Topics direkt vom erwähnten SmartMeter oder von einem “externen” Broker kommen, geht mMn nicht hervor. Wie auch immer, das müsste Florian mal in Erfahrung bringen.
Die Vor- und Nachteile der unterschiedlichen Protokolle wurden bereits ja erwähnt.

Ich habe einen Youless LS 120 am Start, der die Werte direkt vom Stromzähler ließt. Da Homey selbst keine schönen Grafiken hat, sende ich seine Werte über einen MQTT-Broker (Mosquitto Broker, läuft unter HA im Container), an Home Assistant. Da gibt es ein fertiges Dashboard für Energie:

oder du bastelst dir ein eigenes Dashboard:

MQTT überträgt bei mir alles nach Wunsch.

Kann das sein, dass wir uns völlig unnötige Gedanken machen!?
Wo der MQTT Broker läuft (Homey, HA, SmartMeter), ist doch völlig egal… :man_shrugging:t3:
Sollte bereits ein andere Broker aktiv sein, muss dieser nur deaktiviert und der neue aktiviert werden. Evtl. müssen noch ein paar Kleinigkeiten konfiguriert werden, sollte aber eigentlich kein großer Aufwand sein.
Zuletzt habe ich den MQTT Broker auch von HA nach Homey ohne Probleme und großen Aufwand umgeswitched.

Ein Broker ist in dem Setting mit Homey und HA zentraler Angelpunkt. Der kann auf einem der primären Geräte laufen (die du ja nicht direkt wieder tauschen wirst). Ich lasse ihn aber genau deshalb unabhängig auf dem NAS laufen.
Ich würde ihn aber nicht auf irgend einem Gerät laufen lassen. Das Gerät soll nur Zuspieler sein und kein Server.
Keine Ahnung, was der Zähler mit dem gesammelten Topic-Traffic zwischen Homey und HA macht.

Es wäre daher zu testen, ob man das Gerät auch als MqttClient konfigurieren kann, dass sich an einen externen Broker anbinden. Das ist in der Beschreibung aber nicht beschrieben. Da hilft nur probieren.

Sorry für die Abstinenz die letzten Tage. Die Anbindung des Smartmeters ans Netzwerk sollte demnächst erfolgen. Meine aktuelle Herausforderung ist von meiner Wohnung 6 Etagen tiefer zum Zähler ins UG zu gelangen. Das wird mit einer Devolo Giga Bridge über ein bestehendes COAX Kabel in mein Kellerabteil gemacht. Das M-Bus Kabel wird ebenfalls dorthin verlegt. Derweil hab ich shrdzm kontaktiert und so ein Teil bestellt.

Ich habe folgende Antwort erhalten:

Um es richtig zu verstehen, das Modul soll eine REST Schnittstelle vom Homey aufrufen?
Das wäre prinzipiell möglich, haben Sie auch eine Beschreibung der JSon Struktur in welcher die Daten abgeliefert werden sollen dann können wir das einbauen.

Da ich beim dem Thema REST null Erfahrung habe, könnt ihr mir hier vl. weiterhelfen?
merci vorab

Edit: Wäre dies hier die richtige Information? Web API | Homey Apps SDK
Bzw. das hier? https://api.developer.homey.app/

Bin kein Programmierer aber ich denke, dass sie sich über diese Links schon die richtigen Infos raussuchen können.

Me too, dann haben Sie jedenfalls die richtigen Informationen. In diesem Sinne warte ich auf eine Antwort von shrdzm.

Damit ich das richtig verstehe…
Das Modul bietet bereite eine REST-Schnittstelle (also https mit JSON).
Das soll nun parallel auch in die Rückrichtung passieren, so dass das Modul die Daten adhoc an Homey sendet?

Das wird so nur mit Webhooks funktionieren. Dafür müsste die Standard-Webhook-Adresse vom Homey verwendet werden. Dann kann man normalerweise nur einen Wert pro Aufruf übergeben. Den Wert kannst du dann mit einem Flow lesen.

Sollen mehrere Werte übergeben werden, dann macht es Sinn, eine App zu programmieren mit einer entsprechenden REST-Api. Damit lann die App “von außen” aufgerufen und die Daten übergeben werden. Dad macht vermutlich nur Sinn, wenn der Hersteller die App erstellt.

Danke für den Hinweis, werde ich so weitergeben. Bzw. habe Ihnen den Link hierher angehängt.

Bei shrdzm war heute Nacht noch jemand fleißig am recherchieren.
Ich habe 3 Mails erhalten. Ich muss gestehen, für mich ist in der Thematik selbst Einarbeit nötig.
Wenn ich das richtig verstehe kann ich aus der ersten Mail über die lokale IP-Adresse des Homeys auf REST zugreifen.

Mail 1
Wie schaut denn die Konfigurationsmöglichkeit beim Homey eigentlich aus?
Laut dieser Beschreibung sollte es möglich sein, dem Homey über diese REST-Services Informationen zu schicken bzw. abzufragen:

Speziell dieses PUT Kommando schaut interessant aus. Damit scheint es möglich zu sein, irgendwelche Werte zu schicken die dann aber in der Logik vom Homey erst verarbeitet werden müssten?
PUT { “value”: value } TO http://<HOMEY_IP>/api/manager/logic/variable/<VARIABLE_ID>/

Kannst du eventuell mal ein anderes Kommando direkt aus dem Browser testen um zu sehen ob die REST-Schnittstelle prinzipiell funktioniert?
Ich denke, dieses sollte die bekannten Devices liefern:
http://<HOMEY_IP>/api/manager/devices/device/

Wenn das funktioniert, können wir mal mit einem Simulator (wie Insomnia) das PUT Kommando probieren um testweise mal ein paar Stromverbrauchswerte zu schicken.

Funktioniert das dann, dann wissen wir wie es funktioniert und es ist nicht schwer das ins Modul einzubauen.


Mail 2
Das mit dem REST Aufruf vom Homey geht wohl nur über einen passenden Token.
Dh.: der Aufruf unten funktioniert so über einen Browser nicht.
Mit Insomnia könnte es zum Testen aber funktionieren.

Im Homey Forum wird angedeutet, dass der Homey MQTT Messages empfangen kann?
Eigentlich müsstest du die Daten vom Modul nur zu deinem eigenen MQTT Broker schicken auf den sich dann auch Homey subscribet hat.

Das ist keine Option?


Mail 3
…ok…noch ein wenig gesucht und versucht das Homey System zu verstehen…

Wenn ich es richtig verstanden habe, können Scripte im Homey gebaut und aufgerufen werden?

Dort können auch zB.: REST Aufrufe gemacht werden.
Das Smartmetermodul stellt ja einen REST Endpoint zur Verfügung der dann über ein Script aufgerufen werden könnte.
Der REST Endpoint wird bei deinem Modul auf der General-Seite angezeigt. Wenn du diesen über einen Browser aufrufst, werden auch die Daten angezeigt die ausgegeben werden würden.

Im Script würde so ein Aufruf dann wohl ca. so aussehen wenn ich es richtig verstanden habe…

const response = await fetch(<genau der Link so wie auf der General-Seite vom Modul angezeigt>, { headers: { ‘Authorization’: Bearer egal } })

const energy = await response.json()

Das Thema hatten wir doch schon mal, oder?
Ich versuche mal, das etwas aufzubereiten…

Rest-API:
Eine App (!) kann einen REST-Endpunkt veröffentlichen. Dieser kann von außen aufgerufen werden. Im LAN über die Homey IP geht das m.E. auch ohne Token. Wird ein Token benötigt (kann ich adhoc nicht sagen), dann geht das nur für den HP23 mit lokalem API-Token.
Die App muss dann die Daten aus dem POST-Aufruf übernehmen in ein Gerät und dort als Capability speichern (incl. Flow-Trigger).
Das macht nur Sinn, wenn man eine App für das Gerät entwickelt.

Logik/http:
In AdvancedFlow kann man einen http-Request mit einer Aktionskarte ausführen. Man kann URL und Parameter angeben.
Die Response (JSON) kann man danach mit den JSON-Logikkarzen auswerten.
Dazu fühsrt du den Flow periodisch aus (alle x Minuten) und speicherst den gelesenen Wert in einer Variable oder einem virtuellen Gerät.
Das wäre eine lösung, die rein Homey-intern läuft und keine Zuarbeit vom Garäer-Anbieter benötigt.

Da geb ich dir recht, jedenfalls hab ich dem Entwickler gerade ein allgemeines kleines Homey Wiki geschickt. Sowie deine ausführlichen Beschreibungen (danke dir) zu Logik, REST, und mit MQTT (nur als Client) erweitert. App entwickeln wird vermutlich weniger in Frage kommen, läuft somit auf die Logik Variante bzw. MQTT hinaus.

Antwort kam auch gerade rein:


Logik/http:

Das Modul veröffentlicht aktuell schon einen REST-Endpoint.

Aufzurufen dann periodisch ca. mit diesem Aufruf (habe ich nur aus einem Thread rauskopiert. Ob der genauso im Script vom Homey aussehen muss weiss ich nicht)

const response = await fetch(<genau der Link so wie auf der General-Seite vom Modul angezeigt>, { headers: { } })

const energy = await response.json()

Es würde auch ein Aufruf mit Basic-Authorization gehen welcher wohl ca. so aussehen könnte:

const response = await fetch(<genau der Link so wie auf der General-Seite vom Modul angezeigt aber ohne user und passwort>, { headers: { ‘Authorization’: Basic <user>:<passwort> } })

const energy = await response.json()

User und Passwort ist dann auch auf der General-Seite zu finden. Hier ein Eintrag vom Forum der es beschreibt:
https://forum.shrdzm.com/viewtopic.php?t=285

MQTT:

Wenn das Homey den MQTT Broker zur Verfügung stellt, sollte es sowieso passen. Das Smartmetermodul ist ein MQTT Client.
In den Gateway Settings vom Modul ist dann nur die entsprechende Adresse vom Broker (Also vom Homey) einzugeben und die Daten werden zu diesem transferiert. Vorteil dieser Variante ist natürlich das die Daten sofort gesendet und nicht periodisch gepollt werden müssen wie bei der oberen Variante mit dem REST-Aufruf.

HomeyScript brauchst dafür nicht. Flow genügt. Da muss ich dir später mal ein Beispiel raussuchen.

Aber wenn das Gerät tatsächlich ein MqttClient ist. dann wäre das tatsächlich die beste Variante.
Dann kannst du einen beliebigen MqttBroker laufen lassen (z.B. MqttServer auf Homey). Dann das Gerät mit dem Broker verbinden.
In Homey kannst du entweder mit MqttClient + Flows + virtuelles Gerät oder MqttClient + MqttHub (der Hub kann virtuelle Geräte für Topics erstellen) die Daten auslesen und in ein virtuelles Gerät übernehmen. Vorteil: über Mqtt hast du realtime Pushmessages.

1 Like

Dachte ich mir auch, als er schrieb es sei ein Client. MQTT Hub und Client hatte ich kürzlich am Homey installiert. Allerdings noch nicht getestet und verwendet, käme aber gerade recht für diesen Zweck.

Wenn du die Verbindung von deinem Gerät zum Mqtt-Broker eingerichtet hast, dann kannst du am besten mit dem MqttExplorer die Topics herausfinden:

Nimm gleich die 0.4.x Beta Version.

Dann fügst du ein MqttHub-Gerät ein:

grafik

Name und Typ angeben. Der Typ wird hier nicth relevant sein.
grafik

Icon wählen
grafik

Capability hinzufügen
grafik

Hier wird es etwas technisch. Capability wählen (das definiert die Wertanzeigt und Einheit). Dann die Mqtt-Topic angeben.

Mit “Next” weiter und as Gerät anlegen.

Ind en Geräteeinstellungen kannst du die technischen Daten nochmals ändern.

Viel Erfolg :slight_smile:

1 Like

Nice, danke dir. Werd ich so testen.

Du könntest auch die MQTT Client und die Device Capabilities Apps nutzen. Mit der DC App erstellst Du Dir ein Advanced Virtual Device mit den gewünschten Sensoren (Verbrauch, Einspeisung, aktuelle Leistung, etc.), und dann müssen diese Sensoren des AVDs mit den Flow-Karten der MQTT Client App entsprechend “gefüllt” werden:


(Beispiel von meinem Balkonkraftwerk)

Dann hast Du alle Daten übersichtlich in einem Gerät:

1 Like

Hab schon gesehen, da muss ich mich noch etwas einarbeiten. Danke dir für den weiteren Tipp.

Die MQTT Topics um die Daten vom Stromzähler abzurufen sind die selben, wie Du sie auch bei den Geräten mit der MQTT Hub App benötigst.
Wenn die DC App neu für Dich ist, dann braucht es eventuell etwas Einarbeitung.

1 Like