NEWS
Shellys ("Alt und Plus") über MQTT Adapter
-
Kannst Du zwar machen - aber das brauchst nicht - abonniere einfach diesen Datenpunkt und prüfe ab, obe eine stable Version verfügbar ist:
Wenn Du dann auch noch die Version extrahieren willst - dann schreibst die halt in ein Mail
Von mir aus schreibst was in einen Datenpunkt - aber das analysieren des JSON sollte doch für Dich kein Problem sein und kannst es auch direkt in eine Mail-Node schreiben.
Einfach Pfad kopieren und du kannst doch auf jede Info zugreifen.
Du kannst natürlich auch die Analyse direkt als true oder false in einen DP schreiben - aber in meinen Augen überflüssig.
Kanst ja auch mit Wildcard die status topics abonnieren und dann das topic analysieren.
-
@mickym Super! Danke, das hilft.
Das mit den Wildcards klingt interessant. Könnte ich damit alle Status topics z.B. alles was unterhalb vom topic "shelies" bei mir kommt vom MQTT Adapter analysieren und dann jeweils ermitteln von wem die Meldung kommt (IP oder Name)?
-
@hotspot_2 Wie schaut denn Deine Struktur aus? Und dieses Info ist unter status? Du brauchst doch nicht alles - sondern nur das status topic!!! Wichtig ist halt dass Du Deine mqtt Struktur hierarchisch identisch aufgebaut hast.
-
@mickym Ja, das stimmt. Es würde ja völlig genügen einen von jedem Typ in Node RED abzufragen und dann Singal zu geben das was Neues da ist.
-
@hotspot_2 sagte in Shellys ("Alt und Plus") über MQTT Adapter:
@mickym Ja, das stimmt. Es würde ja völlig genügen einen von jedem Typ in Node RED abzufragen und dann Singal zu geben das was Neues da ist.
Normaler weise ist der status topic doch direkt unter dem topic des Gerätes - die Frage ist nur - ob alle Geräte auf gleicher Ebene sind und wie die mqtt Struktur aussieht.
Wie schaut es denn deine mqtt Struktur aus
-
@mickym Nein die sind aktuell nicht auf gleicher Ebene. Sondern aufgeteilt nach Art (Licht, Schalter, usw.) und dann nach den Bereichen (Keller, Garten, Dachgeschoss, EG, usw.).
-
@hotspot_2 Àuch das macht ja nichts wenn die Hierarchie die gleich ist. mqtt kannst du für jede Ebene einen Wildcard verwenden. Mach halt mal einen Screenshot und klapp die Dinger mal auf.
Ich hab das auch so:
bei mir sieht die Struktur so aus:
shellies/Art/Raum/Gerät
-
@mickym Sieht so aus:
-
dann schau mal ob das so passt auf gleicher Ebene.
shellies/+/+/+/status/sys
Die + stehen für beliebigen Wert. Also wenn die Ebenen gleich sind bekommst Du damit alle topic in dem die Info steht. Das topic kannst dann auch noch über einen regulären Ausdruck ausfiltern. Keine Ahnung ob es in sys ist - musst Du wissen. Ich hab keine Gen2 Geräte.
Ansonsten kannst ja mehrer mqtt-In Nodes mit unterschiedlichen Ebenen in einen Flow laufen lassen. Du kannst ja auch das ganze topic verwenden.
Unspezifischen alles subscriben würde ich auf KEINEN Fall.
-
@mickym Wie kann ich den nochmal testen was für ein output das mqtt in node produzieren würde mit den wildcards oben? Einfach ein Debug dahintersetzen geht ja nicht.
-
@hotspot_2 Freilich einfach ein debug dahinter setzen - dann siehst du ja was rauskommt. Du solltest außerdem ein
command Datenpunkt direkt unter shellies haben. Dort das Kommando announce reinschreiben, dann werden alle Shellies ihren Status aktualisieren.
Anhand der topics der einzelnen Nachrichten siehst Du im debug doch, von welchem Shelly die Nachricht stammt.
das sollte auch für Gen2 Geräte funktionieren:
entweder für alle oder einzelne Geräte
-
@mickym Irgendwie klappt das nicht bei mir. Da passiert nichts im debug.
[ { "id": "80576c1b365aebef", "type": "mqtt in", "z": "10e6b7a36260eb50", "name": "", "topic": "shellies/licht/garten/hof/status/sys", "qos": "2", "datatype": "auto-detect", "broker": "b22fc4d3e3f172bb", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 190, "y": 180, "wires": [ [ "cd4cde48c92b7d8b" ] ] }, { "id": "cd4cde48c92b7d8b", "type": "debug", "z": "10e6b7a36260eb50", "name": "debug 1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 520, "y": 180, "wires": [] }, { "id": "111bda243154cac4", "type": "inject", "z": "10e6b7a36260eb50", "name": "", "props": [ { "p": "payload" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "announce", "payloadType": "str", "x": 140, "y": 240, "wires": [ [ "322b9cc7039a66b2" ] ] }, { "id": "322b9cc7039a66b2", "type": "mqtt out", "z": "10e6b7a36260eb50", "name": "", "topic": "shellies/command", "qos": "", "retain": "", "respTopic": "", "contentType": "", "userProps": "", "correl": "", "expiry": "", "broker": "b22fc4d3e3f172bb", "x": 490, "y": 240, "wires": [] }, { "id": "b22fc4d3e3f172bb", "type": "mqtt-broker", "name": "iobroker mqtt adapter", "broker": "localhost", "port": "1883", "clientid": "mqttin_nodered", "autoConnect": true, "usetls": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
-
@hotspot_2 Hmm das müsste gehen - Du siehst doch unter den Objekten im mqtt welche Datenpunkte aktualisiert werden. Steht das denn unter sys mit dem Update? - Wie gesagt da ich kein Gen2 Geräte habe - kann ich nur mutmaßen, wie es funktionieren sollte.
-
Ich habs. Man muss "status_update" senden.
-
@hotspot_2 Ah stimmt steht ja auch so drin.
-
@mickym Ja, so passt das. Habe jetzt mit den "+" Zeichen von allen Gen2 eine Antwort bekommen. Kann dann auch die Gen1 einbauen und mal einen schönen Flow basteln ;-). Danke für deine Hilfe, vielleicht melde ich mich nochmal wenn's klemmt.
-
Hi, darf ich dich nochmals um Hilfe bitten.
ich habe eine Shelly Bewegungsmelder mit folfendem Inhalthabe auch die Datenpunkte aus dem Payload als DP im Iobroker, klappt alles soweit.
Der Wert zeigt an ob der Bewegungsmelder "scharf" ist
active: true/ falseDer Wert wird basierend des Status mittels mqqt aktualisiert, aber ich würde den DP auch gern schalten können mit true/false
0_userdata.0.Wohnung.Status.Shellys.1-Wohnzimmer.Ipad-Motion_new.Bewegungsmelder_aktiv
habe leider keinen Schimmer wie ich es angehen muss.
Kannst du helfen? -
@dos1973 Bewegungsmelder sind Gen1 Geräte https://shelly-api-docs.shelly.cloud/gen1/#shelly-motion-mqtt
Was willst Du denn an einem Bewegungsmelder bitte schalten?
Die Parameter etc. kann man sowie ich die Doku verstehen, alle über HTTP steuern - dafür musst dann halt HTTP requests raussenden.
Also über die Get Methode - ich würde halt übers WEB Interface prüfen, ob der Parameter dann angekommen ist.
https://shelly-api-docs.shelly.cloud/gen1/#shelly-motion-settings
Also wenn du eine LED deaktivieren willst müsstest Du ein Objekt wie folgt senden:
{ "led_status_disable": true }
Also ausser konfigurieren weiss ich nicht was man an einem BWM schalten soll. Wie gesagt viel kann man da nicht über mqtt machen, sondern muss halt über http schalten.
Ansonsten kann man ihn ggf. ausschalten - muss dann aber ans Gerät wieder um ihn einzuschalten.
-
Motion sensor aktivieren oder deaktivieren will ich schalten.
Also dass der BW melder bei Bewegung eben nicht reagiertÜber http habe ich den weg… aber ich dachte via true/ false aus node red wäre ganz nett.
-
@dos1973 Na wie gesagt wenn der Shelly kein MQTT nicht annimmt - dann ist das halt nicht implementiert, kannst Du doch über Node-Red direkt HTTP befehle schicken. Hab doch einen Beispielflow eingestellt. Insbesondere wenn Du die Befehle schon über HTTP ausprobiert hast.
kannst Du ja senden - ersetzt das halt in meiner Inject Node und schau ob das geht und sendest halt:
{ "motion_enable" : false }