NEWS
Shelly addon über Node Red auf einer NAS mit iobroker
Shelly addon über Node Red auf einer NAS mit iobroker
-
So hier ist dann auch der umgekehrte Weg. Wenn Du also in Deinen selbst erstellten DP mit steuer also ACK=False schreibst, dann wird der untere Ast selektiert:

Unter Deinen mqtt- Datenpunkten sollte dann auch der command Ast auftauchen:

Sobald der Datenpunkt unten erstellt ist, kannst Du diesen anstelle von SendTo auch mit steuere direkt in den Datenpunkt schreiben.
So nun habe ich aber genug gepuzzelt - ich hasse puzzeln.

===============================================================
Eine Alternative ist DOCH ein Alias zu nutzen (s. nächster Post)
-
So hier ist dann auch der umgekehrte Weg. Wenn Du also in Deinen selbst erstellten DP mit steuer also ACK=False schreibst, dann wird der untere Ast selektiert:

Unter Deinen mqtt- Datenpunkten sollte dann auch der command Ast auftauchen:

Sobald der Datenpunkt unten erstellt ist, kannst Du diesen anstelle von SendTo auch mit steuere direkt in den Datenpunkt schreiben.
So nun habe ich aber genug gepuzzelt - ich hasse puzzeln.

===============================================================
Eine Alternative ist DOCH ein Alias zu nutzen (s. nächster Post)
Ah ich sehe man kann doch unterschiedliche IDs zum Lesen und Schreiben in EINEM ALIAS verwenden, dann probieren wir das ohne Blockly. So also alles zurück - es funktioniert mit einem ALIAS.

Zum Lesen musst Du Deinen status Datenpunkt eingeben.
mqtt.0.shellyplus1pm-80646fe3f840.status.switch:0Zum Schreiben den manuell erstellten Datenpunkt unter command.
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0Die Lesen Konvertierungsfunktion ist dann wie gehabt:
JSON.parse(val).outputDie Schreiben Konvertierungsfunktion:
val ? "on" : "off"Damit kannst Du dann ganz normal mit dem ALIAS über steuere und Blockly/VIS EIN und AUS-Schalten und liest den Status gleichzeitig über die Lesefunktion ein.
Ich wusste selbst nicht, dass das inzwischen aufgebohrt wurde. Aber damit geht alles über EINEN Alias
-
@mickym Alles klar, also VIS muss nicht unbedingt sein. Mir ist nur wichtig, dass meine Blockly Skripte weiter funktionieren. Ich musste ja vom Shelly Adapter auf den Mqtt Adapter umstellen, damit ich die Temperatur richtig auslesen kann.
{"id":0, "source":"HTTP", "output":true, "apower":1189.5, "voltage":226.2, "current":5.269, "aenergy":{"total":16468.090,"by_minute":[19845.818,19817.516,19857.311],"minute_ts":1692544679},"temperature":{"tC":67.5, "tF":153.4}}So ich hab es auch noch mal mit einem Blockly getestet zum EIN- und AUSSCHALTEN und EINEM Alias

also mit steuere und das funktioniert!
Den unteren Teil kannst vergessen, den habe ich nur genommen, um Deinen Shelly1PM zu simulieren.
Um manuell übrigens den Datenpunkt im mqtt zu erstellen, musst Du den Expertenmodus einschalten.
-
Ah ich sehe man kann doch unterschiedliche IDs zum Lesen und Schreiben in EINEM ALIAS verwenden, dann probieren wir das ohne Blockly. So also alles zurück - es funktioniert mit einem ALIAS.

Zum Lesen musst Du Deinen status Datenpunkt eingeben.
mqtt.0.shellyplus1pm-80646fe3f840.status.switch:0Zum Schreiben den manuell erstellten Datenpunkt unter command.
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0Die Lesen Konvertierungsfunktion ist dann wie gehabt:
JSON.parse(val).outputDie Schreiben Konvertierungsfunktion:
val ? "on" : "off"Damit kannst Du dann ganz normal mit dem ALIAS über steuere und Blockly/VIS EIN und AUS-Schalten und liest den Status gleichzeitig über die Lesefunktion ein.
Ich wusste selbst nicht, dass das inzwischen aufgebohrt wurde. Aber damit geht alles über EINEN Alias
@mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:
val ? "on" : "off"
Ich danke dir herzlich für deine Mühen, jedoch bekomme ich es bei mir nicht zum laufen. Es erscheint beim Wert immer nur "null" und ein ändern bringt gar keinen effekt.

{ "common": { "name": "SwitchPool", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": true, "def": "", "alias": { "id": { "read": "mqtt.1.shellyplus1pm-80646fe3f840.status.switch:0", "write": "mqtt.1.shellyplus1pm-80646fe3f840.command.switch:0" }, "read": "JSON.parse(val).output", "write": "val ? \"on\" : \"off\"" } }, "type": "state", "native": {}, "_id": "alias.0.SwitchPool", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1692625966200 -
@mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:
val ? "on" : "off"
Ich danke dir herzlich für deine Mühen, jedoch bekomme ich es bei mir nicht zum laufen. Es erscheint beim Wert immer nur "null" und ein ändern bringt gar keinen effekt.

{ "common": { "name": "SwitchPool", "desc": "Manuell erzeugt", "role": "state", "type": "boolean", "read": true, "write": true, "def": "", "alias": { "id": { "read": "mqtt.1.shellyplus1pm-80646fe3f840.status.switch:0", "write": "mqtt.1.shellyplus1pm-80646fe3f840.command.switch:0" }, "read": "JSON.parse(val).output", "write": "val ? \"on\" : \"off\"" } }, "type": "state", "native": {}, "_id": "alias.0.SwitchPool", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1692625966200@ronnyempire Ist das bei Dir nicht mqtt.0 ? - anstelle von mqtt.1 ? Ich habs unten mal ausgebessert - da nur bei mir die 1. Instanz und nicht die 0. ist.
Du müsstest im Log auch Warnungen haben, wenn die Quelldatenpunkte nicht gefunden werden. Hast Du den Datenpunkt:
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0auch erstellt?
-
@ronnyempire Ist das bei Dir nicht mqtt.0 ? - anstelle von mqtt.1 ? Ich habs unten mal ausgebessert - da nur bei mir die 1. Instanz und nicht die 0. ist.
Du müsstest im Log auch Warnungen haben, wenn die Quelldatenpunkte nicht gefunden werden. Hast Du den Datenpunkt:
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0auch erstellt?
@mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0
Ok ich habe es angepasst, aber immer noch kein effekt. Der Datenpunt war schon da unter command
{ "_id": "mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0", "common": { "name": "shellyplus1pm-80646fe3f840/command/switch:0", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "boolean" }, "native": { "topic": "shellyplus1pm-80646fe3f840/command/switch:0" }, "type": "state", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1692626757693 } -
@mickym said in Shelly addon über Node Red auf einer NAS mit iobroker:
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0
Ok ich habe es angepasst, aber immer noch kein effekt. Der Datenpunt war schon da unter command
{ "_id": "mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0", "common": { "name": "shellyplus1pm-80646fe3f840/command/switch:0", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "boolean" }, "native": { "topic": "shellyplus1pm-80646fe3f840/command/switch:0" }, "type": "state", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1692626757693 }@ronnyempire na ok. Dann halt erstmal schauen ob es grundsätzlich funktioniert ohne Alias.
Schreibe doch mal „on“ oder „off“ ohne Bestätigung in den command Datenpunkt und schau ob das Relais schaltet.
-
@ronnyempire na ok. Dann halt erstmal schauen ob es grundsätzlich funktioniert ohne Alias.
Schreibe doch mal „on“ oder „off“ ohne Bestätigung in den command Datenpunkt und schau ob das Relais schaltet.
@mickym Danke dir, dass war der entscheidende Hinweis. Der Datenpunkt war als Logikwert hinterlegt. Ich habe es auf Zeichenkette geändert und jetzt geht es.

-
@mickym Danke dir, dass war der entscheidende Hinweis. Der Datenpunkt war als Logikwert hinterlegt. Ich habe es auf Zeichenkette geändert und jetzt geht es.

@ronnyempire ok das heißt jetzt geht auch der ganze Zyklus mit Lesen und Schreiben? Und du kannst mit Blockly steuere über den Alias schalten?
-
@ronnyempire ok das heißt jetzt geht auch der ganze Zyklus mit Lesen und Schreiben? Und du kannst mit Blockly steuere über den Alias schalten?
@mickym Ja korrekt, skript läuft einwandfrei durch, danke dir
-
@mickym Ja korrekt, skript läuft einwandfrei durch, danke dir
@ronnyempire na dann viel Spaß. Ich began schon an mir zu zweifeln.

-
@merbes sagte in Shelly addon über Node Red auf einer NAS mit iobroker:
Leider wird wird der Wert der IDs so angezeigt, dass die graphische Auswertung keinen Sinn macht.
Der Wert lautet beispielsweise:
{"id": 100,"tC":53.5, "tF":128.3}Wenn der Shelly diese Information liefert, brauchst Du deswegen immer noch kein NodeRed - so toll ich dieses Tool auch finde. Du kannst einen Alias definieren und den Wert direkt extrahieren.
Erstelle also unter alias.0 einen Datenpunkt, wo immer Du den auch haben möchtest.


Wenn Du den erstellt hast, klicke rechts auf den Bleistift.
Ich hab nun mal testweise einen Datenpunkt mit Deinem JSON angelegt:

Du musst dann aber auf den original Datenpunkt verweisen, der in Deinem MQTT- Adapter vorhanden ist.
Du klickst also auf die 3 Punkte in Deinem Alias und verweist auf den Datenpunkt wo der JSON mit der Temperatur enthalten ist.


Wie gesagt bei Dir steht dann mqtt.0 etc drin.
Solange Du noch keinen originalen Datenpunkt ausgewählt hast, bekommst Du entsprechende Warnungen im Protokoll:

Da Du beim Anlegen des Alias gesagt hast, dass Du einen Datentyp "number" hast wird noch eine null drin stehen.
Nun erstellst Du im Alias folgende Konvertierungsfunktion:

Unter common kannst Du dann noch eine Einheit hinzufügen:

Und vola:

Dein Datenpunkt enthält die Temperatur mit der Einheit.
Also Daten aus einem JSON String - kann man das auch mit dem Alias extrahieren - dafür braucht es kein Node-Red.
@mickym
Hallo mickym,herzlichen Dank für die tolle Erklärung und das Beispiel. Mit Deiner Hilfe habe ich es jetzt nach unendlich vielen Versuchen geschafft, die Werte der neuen Shelly-Plus-Generation aus dem JSON-String zu extrahieren und kann damit die Datenpunkte für die weitere Auswertung/Steuerung nutzen.

Wenn man's weiß, ist das ja ganz einfach
VG Michael -
@mickym
Hallo mickym,herzlichen Dank für die tolle Erklärung und das Beispiel. Mit Deiner Hilfe habe ich es jetzt nach unendlich vielen Versuchen geschafft, die Werte der neuen Shelly-Plus-Generation aus dem JSON-String zu extrahieren und kann damit die Datenpunkte für die weitere Auswertung/Steuerung nutzen.

Wenn man's weiß, ist das ja ganz einfach
VG Michael@mickym Ich habe ein ähnliches Problem und bekomme die Konvertierungsfunktion nicht hin. Iobroker hängt teilweise minutenlang.
Dannpunkt vorhanden:
{"sn":{"Time":"2023-12-03T10:49:52","MHZ19B":{"Model":"B","CarbonDioxide":741,"Temperature":24.0},"TempUnit":"C"},"ver":1}
Meine Funktion:

Es wird kein Datenpunkt generiert. -
@mickym Ich habe ein ähnliches Problem und bekomme die Konvertierungsfunktion nicht hin. Iobroker hängt teilweise minutenlang.
Dannpunkt vorhanden:
{"sn":{"Time":"2023-12-03T10:49:52","MHZ19B":{"Model":"B","CarbonDioxide":741,"Temperature":24.0},"TempUnit":"C"},"ver":1}
Meine Funktion:

Es wird kein Datenpunkt generiert.@laser Na Datenpunkt generiert ist etwas missverständlich - es liegt auch daran, dass Du den Pfad nicht richtig definierst.
die Konvertierung muss lauten:
JSON.parse(val).sn.MHZ19B.CarbonDioxideWenn Du so was nicht auf den ersten Block siehst empfehle ich Dir den JSON Formatter:
https://jsonformatter.org/Wenn Du Deinen JSON links einträgst und dann auf Format Beauty klickst, bekommst die Hierarchie schön zu sehen.

Wenn Du auf den Filter gehst, kannst Du direkt überprüfen, ob Du den Pfad richtig eingegeben hast:

-
@laser Na Datenpunkt generiert ist etwas missverständlich - es liegt auch daran, dass Du den Pfad nicht richtig definierst.
die Konvertierung muss lauten:
JSON.parse(val).sn.MHZ19B.CarbonDioxideWenn Du so was nicht auf den ersten Block siehst empfehle ich Dir den JSON Formatter:
https://jsonformatter.org/Wenn Du Deinen JSON links einträgst und dann auf Format Beauty klickst, bekommst die Hierarchie schön zu sehen.

Wenn Du auf den Filter gehst, kannst Du direkt überprüfen, ob Du den Pfad richtig eingegeben hast:

-
@mickym Danke, das funktioniert. Mit dem richtigen Pfad. Es wird kein neuer Datenpunkt generiert, sondern im Vorhandenen wird der selektierte Wert eingetragen.
-
@mickym muß ich noch etwas tun, damit der Wert im Alias-Datenpunkt automatisch aktualisiert wird?
Wenn ich den MQTT Adapter neu starte , wird aktualisiert.@laser Nein - der Datenpunkt wird immer mit dem Originaldatenpunkt aktualisiert. Wenn dieser nicht aktualisiert wird, dann wird es der Alias auch nicht. Mit dem Adapterneustart - wird halt alles neu initialisiert. Aber wenn was nicht aktualisiert wird, liegt es an der Quelle und nicht am Alias.
-
@laser Nein - der Datenpunkt wird immer mit dem Originaldatenpunkt aktualisiert. Wenn dieser nicht aktualisiert wird, dann wird es der Alias auch nicht. Mit dem Adapterneustart - wird halt alles neu initialisiert. Aber wenn was nicht aktualisiert wird, liegt es an der Quelle und nicht am Alias.
@mickym Das liegt an der Tasmota - MQTT- Übertragung. Der Zeit- Stempel wird auch nicht aktualisiert. War halt ein Versuch, über Tasmota etwas zu messen. Muß im Tasmota etwas suchen, evtl. ist dort die Update zeit zu hoch eingestellt. Steht aber auf 5 Sec.
-
@mickym Das liegt an der Tasmota - MQTT- Übertragung. Der Zeit- Stempel wird auch nicht aktualisiert. War halt ein Versuch, über Tasmota etwas zu messen. Muß im Tasmota etwas suchen, evtl. ist dort die Update zeit zu hoch eingestellt. Steht aber auf 5 Sec.
@laser Na ich weiß ja nicht welchen Datenpunkt Du da nimmst. Der Status wird in der Regel im stat Ast übermittelt.
Ansonsten kannst Du noch schauen ob im tele Ast der Status aktualisiert wird. Dort gibt es auch eine stat und sensor Datenpunkt. Ggf. ändert sich der Wert aber auch nicht, wenn nicht eine gewisse Schwelle überschritten wird - da das sonst dauernd zappelt.Du könntest den Sensor ja mal mit mehr CO2 zu Wertänderungen veranlassen.
Die Datenpunkte unter stat sollten eigentlich die Einzelwerte übermittel (hellblau markiert) - die unter tele (gelb) werden glaube ich ca. alle 30 s im Standard aktualisiert.

ich hab nur was mit discovery gesehen - aber ich denke das ist nur EINMALIG - um ggf. Geräte zu entdecken. Aber Du musst halt Deine mqtt Struktur bzgl. tasmota richtig untersuchen.
-
@laser Na ich weiß ja nicht welchen Datenpunkt Du da nimmst. Der Status wird in der Regel im stat Ast übermittelt.
Ansonsten kannst Du noch schauen ob im tele Ast der Status aktualisiert wird. Dort gibt es auch eine stat und sensor Datenpunkt. Ggf. ändert sich der Wert aber auch nicht, wenn nicht eine gewisse Schwelle überschritten wird - da das sonst dauernd zappelt.Du könntest den Sensor ja mal mit mehr CO2 zu Wertänderungen veranlassen.
Die Datenpunkte unter stat sollten eigentlich die Einzelwerte übermittel (hellblau markiert) - die unter tele (gelb) werden glaube ich ca. alle 30 s im Standard aktualisiert.

ich hab nur was mit discovery gesehen - aber ich denke das ist nur EINMALIG - um ggf. Geräte zu entdecken. Aber Du musst halt Deine mqtt Struktur bzgl. tasmota richtig untersuchen.
