NEWS
Shellys ("Alt und Plus") über MQTT Adapter
-
@mickym Danke für die Anregungen ich werde das Thema Alexa mal auf den Prüfstand stellen.
Für die Ansagen (über Blockly) nutze ich aktuell den Alexa2 Adapter. Das sollte ja möglich sein über ioBroker Out auf das jeweilige Objekt (speak).
Fürs steuern mit der Alexa in den ioBroker (meistens auf die Shellys) nutze ich den iot Adapter (da war was mit Kosten, glaub jährlich). Aktuell steuere ich damit auf die Objekte der Shellys die wir angelegt haben. Wie das dann aussieht wenn ich eigentlich die Objekte nicht mehr erstellen lassen möchte, muss ich mir dann anschauen. Bin ja bei Dir mit deinem Grundsatz: Keine Verdopplung von Informationen!
Ausserdem ist Node-RED eh viel besser ;-).
-
@hotspot_2 sagte in Shellys ("Alt und Plus") über MQTT Adapter:
Ausserdem ist Node-RED eh viel besser ;-).
Tja damit gehörst Du nun zu einer erlesenen Minderheit hier im Forum, die das inzwischen gecheckt haben. - Die meisten legen gleich mit Blockly los und haben dann den Aufwand. Auch die alten Hasen pushen hier meist das Blockly. Ich bin gerade der Meinung, dass sich Einsteiger die 3 wichtigsten Logikmaschinen (also Blockly, Javascript und NodeRed) anschauen sollten und die gleiche Aufgabe mit allen Tools lösen sollten, bevor sie eine Entscheidung treffen. Machen aber leider die wenigsten.
-
@hotspot_2 sagte in Shellys ("Alt und Plus") über MQTT Adapter:
Wie das dann aussieht wenn ich eigentlich die Objekte nicht mehr erstellen lassen möchte, muss ich mir dann anschauen. Bin ja bei Dir mit deinem Grundsatz: Keine Verdopplung von Informationen!
Es macht nichts erstmal die Infos in die Objekte weiter schreiben zu lassen. Parallel - und Du kannst ja auch mehrere mqtt-In Nodes auf das gleiche Topic machen, kannst Du neue Flows erstellen und dann die Blocklies Stück für Stück deaktivieren . Ein Teil der Datenpunkte wirst Du ja auch für Dein Jarvis brauchen. Das kann glaub immer noch schwer mit Objekten umgehen, ich hab das mal versucht und war da nur halb erfolgreich. Ich bin ja nicht so der super kreative Mensch, der diese tollen grafischen Seiten macht. Für mich muss es schnell und funktionell sein.
-
@mickym Guten Morgen! Ich bin gerade am überlegen wie ich einen Flow hinbekomme um alle Batteriemeldungen (< 5%) über einen Flow einzusammeln und dann ein Pushover zu versenden. Kriegt man das hin das man quasi jeden MQTT-in auswertet und wenn <5% den Text für die Pushover mitgibt (welches Element es ist) und dann den Text im Pushover-Node zusammenbaut?
Ähnliches Thema hätte ich auch bei Shelly Smoke Plus, habe davon mehrere, das ich quasi nur ein Node fürs Versenden habe und die Infos welcher Melder es war mitgebe.
Mir würde erst mal nur ein Tipp reichen musst nicht den ganzen Flow machen Natürlich muss ja auch erstmal so funktionieren.
Wie kann ich dem einen bereits befüllten Payload einen weiteren Text dranhängen? Dann würde ich nämlich wie oben vorgehen im ersten Switch die Bezeichnung des Melders mitgeben und dann ale auf den zweiten Switch verbinden und die Message dort dann zusammenbauen. Ich hab aber beim googeln nix gefunden wie man die alte Payload verwenden und vorne hinten was dran machen kann an den String.
Mit der Vorgehensweise könnte ich ja dann Batteriemeldungen und Alarme managen mit einem großen Flow. Das wäre toll.
-
@hotspot_2 Ja Du kannst die topics einzeln auslesen, Du kannst Deine Datenpunkte verwenden, du kannst wenn Du Deine Struktur einheitlich aufgebaut hast auch mit Wildcards arbeiten, dann brauchst Du nicht für jede Eingabe eine eigene Node verwenden. Du kannst diese Zustände triggern lassen oder auch die Gesamtzustände in einem eigenen Datenpunkt oder in mqtt abspeichern.
Du hast zu jeder Nachricht ein topic, dass Du entweder extrahieren kannst oder modifizierst damit die Quelle leichter lesbar ist.
Du kannst eine payload wieder ganz einfach über eine Change Node modifizieren, indem Du JSONATA benutzt und Strings miteinander verkettest: https://docs.jsonata.org/other-operators
Also "string vorher " & payload & " string nachher". Du kannst aber auch die payload in einen Menge Text oder HTML Code über eine template Node formatieren, damit Du schöne Nachrichten bekommst. Keine Ahnung ob das von pushover unterstützt wird.Du kannst wie gesagt abwarten bis Du alle Zustände hast - mache ich meist bei zeitunkritischen Sachen - du kannst aber auch Objekte bilden und diese in Datenpunkte wegspeichern, um diese dann beim Neustart von NodeRed zur Verfügung zu haben.
Ich habe mir für Alarm zustände eigene Strukturen gebastelt (battery, online, Fenster auf, etc.) :
und arbeite nur mit true und false:
Also bist ja gar nicht so schlecht mit Deinem Anfang - aber du solltest bei allem Detail - immer Deine übergeordneten Ziele im Auge behalten.
Ich denke, dass damit Deine Fragen beantwortet sein sollten, damit Du mit Deinem Flow weiter kommst.
-
@mickym Super, das hilft erstmal.
Wenn ich das hier mache:
Dann kommt am Ende nur "Wasseralarm." raus obwohl der msg.payload vorher "Waschküche" war. Stimmt der Bezeichner nicht?
-
@hotspot_2 Dann war die payload leer oder undefined.
-
Zurück zur allgemeinen Betrachtung:
Wenn im Status beispielsweise auch die Batteriewerte enthalten sind und der Aufbau gleich ist, kann man im mqtt sowas auch mit einer Node vereinfachen - indem man für bestimmte Hierarchielevel Wildcards benutzt und somit kannst Du einzelne Nodes sparen.
In dem abgebildeten Beispiel ist die Struktur wunderbar gleich und unterscheidet sich im vorletzten level also bwm_wk und bwm_flur_keller.
Sowas kannst Du auch durch abonnieren des topics mit einer Node erreichen in dem Du als topic folgendes angibst:
shellies/sonstiges/+/status
-
@mickym Ja, stimmt. Ich muss die Payload vorher auch in Anführungszeichen setzen. Dann klappt es perfekt.
-
@hotspot_2 Nein die payload selbst nicht - das ist eine Variable die darf nicht in Anführungszeichen. Probiere halt mit Inject NOdes aus.
-
@hotspot_2 Und wie gesagt für komplexere Ausgaben - zum Beispiel Nachrichten kannst du auch template Nodes verwenden.
-
@mickym Ich meinte dort wo ich "Waschküche" eingetragen habe als msg.payload muss "Waschküche" auch in Anführungszeichen in die Payload eingetragen werden (msg.payload) dann klappt das zusammensetzen einwandfrei.
-
@hotspot_2 Na alle konstanten Strings die hinzufügen willst und keine Nachrichteneigenschaften sind müssen natürlich in Anführungszeichen. Die Nachrichteneigenschaft payload selbst im alten Nachrichtenobjekt darf aber nicht in Anführungszeichen, sonst wird ja der String "payload" ausgegeben.
-
@mickym sagte in Shellys ("Alt und Plus") über MQTT Adapter:
"string vorher " & payload & " string nachher"
Hier mal wieder ein paar Beispiele - für Nachrichtenausgaben:
Für komplexere Beispiele was die Template Node alles kann, schau hier: https://stevesnoderedguide.com/node-red-template-node
-
@mickym sagte in Shellys ("Alt und Plus") über MQTT Adapter:
@hotspot_2 OK - dann ist das der richtig - in der Output eigenschaft steht der Status - dann also bitte die mqtt-In Node auf dieses Status topic und dann eine debug-Node dahinter machen.
HI Mickym,
ich bekomme es leider nicht hin, ich stehe irgendwie auf dem Schlauch
habe den Post jetzt x-xmal gelesen...ich mache das, aber er debuggt nicht, kann schalten wie ich will.
ich habe einen Shelly 2pm Plus, welcher im switch 0 und 1 via "output":false/ true gesteuert wurd
-
@dos1973 Also als allererstes wenn Du mit mqtt Nodes arbeitest musst Du auch mqtt Schreibweise verwenden - da Du die nicht aus dem iobroker ausliest sonder via mqtt. Die topics stehen in dem mqtt Adapter unter Name. Du musst als den Namen aus dem mqtt-Adapter kopieren und nicht den Pfad zum Objekt.
Um also den Status von deinem switch:0 und switch:1 auszulesen musst Du die topics in der mqtt-IN Node auf
shellies/Licht/Badezimmer/status/switch:0
bzw.
shellies/Licht/Badezimmer/status/switch:1
setzen.
Sie Hierarchien der topics in der mqtt Schreibweise werden durch einen Schrägstrich und nicht durch einen Punkt getrennt. (mqtt kennt auch keine iobroker-Adapter und folglich auch keine Adapterinstanzen. )
Wenn das funktioniert melde Dich mal mit einem Screen-shot der debug1 Ausgabe. -
@mickym
oh mann ... ja jetzt debuggt dasMensch das hätte ich merken müssen
output:false /true ist die Steuerung
-
@dos1973 Genau - Du musst also nur nach dem output selektieren bei Dir aber gleichzeitig noch nach der id - damit Du weisst welcher Schalter. Ich würde also das topic auf die ID setzen und die payload auf den output. Wenn Du das gerne also Flow hast. dann kopiere mal bitte den ganzen Wert in code-tags hier rein in dem Du in der ersten Zeile den Wert des objects kopierst.
-
@mickym
ich bekomme gerade nix verstandenich verstehe momentan noch nicht was mein Ziel ist. mit den Gen1 Adaptern habe ich ja einen IOBroker DP den ich mit True / false schalte
muss ich den Output wert als auch DP erzeugen?
-
@dos1973 Nun Du schaltest über den rpc Datenpunkt - den brauchst Du wenn Du NodeRed mqtt-Out Nodes machst nicht erstellen, weil Du dann direkt das topic publishst - anschliessend siehst Du ihn auch im mqtt Adapter.
Zum Schalten geht alles in einen rpc topic von dem ganzen Shelly:
Ich habs schon mal in das msg.topic reingemacht - also selbst wenn du die mqtt-In Node nicht konfigurierst müsste es gehen:
Also das topic habe ich gelb/orange markiert:
Ich habe mal um es flexibel für Dich zu machen - eine Nachrichteneigenschaft "switch" definiert!
Mit 0 oder 1 definierst Du welchen Schalter du schalten willst.
Grün siehst du als die payload und den switch im Objekt dass Du an den rpc Datenpunkt schickst
Letzlich noch lila markiert die beiden Parameter, die Du frei vergeben kannst.
Die ID - ist eine Nummer von Dir - die userid der Name - damit identifiziert werden kann, wer das Kommando geschickt hat. Ich habe hier mal deinen Nickname verwendet, könnte aber auch Dein Flow Name sein, damit Du siehst woher das Kommando stammt.
Unter command oder response - keine Ahnung wie das heißt wirst du dann unter diesem Namen den Response finden - auf Dein Kommando.
Hier der Flow ohne mqtt Node: