FHEM, WebSocket und Node-RED, Statusüberwachung einer Warema Markise

Begonnen von h002, 22 Dezember 2021, 17:21:44

Vorheriges Thema - Nächstes Thema

h002

Ich bin gerade in einer Sackgasse bei meinen Anliegen und versuche bei euch neuen Input für weitere Möglichkeiten zu finden. :-)

Mittels Node-RED konnte ich die Verbindung zwischen einem Funk-Adapter und einer Warema Markise (WMS) herstellen. Damit kann ich die Markise steuern (hoch, runter, stopp) und den Status abfragen.

Über eine Installation von zwei Node.js Paketen (warema-wms-venetian-blinds mit warema-wms-venetian-blinds-ws-api) mittels npm, ist eine Verbindung zwischen dem Funk-USB-Stick und der Warema Markise sowie eine Steuerung über Node-RED möglich. Dahinter steht eine WebSocket-API, welche die Kommandos über ein "http in" entgegennimmt (siehe Bild mit Node-RED-Flow). In FHEM habe ich dafür ein Dummy-Device, worüber ich mit Hilfe von DOIF die Steuerung der Markise vornehmen kann.



([WaremaMarkise] eq "down") {
qx"curl http://noderedip:1880/warema/down 1>/dev/null";
}
DOELSEIF ([WaremaMarkise] eq "up") {
qx"curl http://noderedip:1880/warema/up 1>/dev/null";
}
DOELSEIF ([WaremaMarkise] eq "stop") {
qx"curl http://noderedip:1880/warema/stop 1>/dev/null";
}
DOELSEIF ([WaremaMarkise] eq "bind") {
qx"curl http://noderedip:1880/warema/bind 1>/dev/null";
}
DOELSEIF ([WaremaMarkise] eq "status") {
qx"curl http://noderedip:1880/warema/status 1>/dev/null";
}


Mein Problem ist, dass ich nicht weiß, wie ich den Status dieses WebSockets mit Node-RED sinnvoll an FHEM übergeben kann. Der Status kommt via WebSocket im JSON-Format zurück. Die erste Idee war, über ein "http request" diesen Status an FHEM zu vermitteln wie z.B. http://fhemip:8083/fhem?fwcsrf=csrf_token&cmd=setreading%20WaremaMarkise%20waremaStatePosition%20{msg.position}. Dies führt dazu, dass sich die WebSocket wie in eine Art Loop befindet. Ich kann mir aber nicht erklären, wie es dazu kommt. Nachdem ich z.B. http://noderedip:1880/warema/status aufrufe, wird der Status über JSON an den "Empfang" übergeben und beim WebSocket anschließend wieder der Status angefragt und an FHEM gesendet. So entsteht der Loop. Mittels der "function" hole ich mir aus dem Payload nur den Integer-Wert für die Position.

Kann mir anhand dieser Problembeschreibung schon jemand Ansätze liefern, wie ich sinnvoll den Status der Warema Markise an FHEM übergeben bekomme? Vielen Dank für eure Hinweise!



Esjay


h002

Kurz und knapp. Kenne mich mit MQTT nicht so gut aus, aber Dank FHEM lief es wie von selbst. Danke dir.

- MQTT-Broker (Server) in FHEM erstellt
- den WebSocket mit einem Node-RED "mqtt out" verbunden
- anschließend wurde automatisch ein MQTT-Device in FHEM angelegt und die Daten aus dem Payload geladen

Schockierend wie einfach das war. :-)