NEWS
Shelly addon über Node Red auf einer NAS mit iobroker
-
Hallo zusammen,
ich bin absoluter Neuling, was iobroker und NodeRed betrifft.
Das vorab als Generalentschuldigung.
Aber: ich habe es auch schon mit den Threads hier versucht zu lösen, komme damit aber leider nicht weiter.Thema ist:
Ich möchte die Shelly plus 1pm mit Addon Sensoren im iobroker sehen und die Daten (Temperaturen) sichern um eine Gegenüberstellung der verschiedenen Sensoren zu machen.
Hierzu nutze ich meine bereits vorhandene Synology DS220+ (Intel Celeron J4025 mit 10GB Speicher und 2 grossen Festplatten).
Sie läuft eh und darauf habe ich via docker den portainer und den iobroker installiert.Ich komme im iobroker über den shelly adapter nicht an die Daten der Sensoren,
weswegen ich den mqtt adapter installiert habe.Hier erkenne ich die Shelly (momentan einer, aber zwei weitere warten auf den Einsatz) UND deren Sensoren.
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}Jetzt habe ich schon verstnadnen, dass der Node-RED dafür genutzt werden kann, solche Werte zzu splitten.
Mit Sicherheit ist das ein Bruchteil von dem, was damit gemacht werden kann,
aber: das wäre genau mein Wunsch.
Problem ist: ich bekomme es nicht hin, irgendwas in node-red einzulesen und demnach auch auszugeben.
Ich hatte bereits ein wenig mit Dirk gechattet und er riet mir dazu einen Thread zu eröffnen.
Nachdem ich mit dem andern Thread nicht klar gekommen bin (ich finde mosquitto nicht), muss ich in den sauren Apfel beissen und mich hier offenbaren
Ich würd mich über Hilfe wahnsinnig freuen.Danke und bis dahin,
MichaelFalls noch irgendwelche Daten benötigt werden, lasst es mich wissen.
Plattform: docker
Betriebssystem: linux
Architektur: x64
CPUs: 2
Geschwindigkeit: 2001 MHz
Modell: Intel(R) Celeron(R) J4025 CPU @ 2.00GHz
RAM: 9.5 GB
System-Betriebszeit: 33 T. 17:41:41
Node.js: v18.15.0 -
@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 KLassseeee:
Danke sehr.
Ncoh eine Frage:
Ich verweise dann auf eine weitere Zahl unter userdata oder bleibt das direkt im alias?
Ich freu mich, dass das so einfach ist.
Dann schmiess ich mal schnell den notered wieder raus.
Wird dann momentan nicht benötigt. -
@merbes sagte in Shelly addon über Node Red auf einer NAS mit iobroker:
@mickym KLassseeee:
Danke sehr.
Ncoh eine Frage:
Ich verweise dann auf eine weitere Zahl unter userdata oder bleibt das direkt im alias?
Ich freu mich, dass das so einfach ist.
Dann schmiess ich mal schnell den notered wieder raus.
Wird dann momentan nicht benötigt.Ich kann Dir zwar auch noch eine Menge mit NodeRed zeigen, aber wenn Du das Tool nicht lernen willst (was aus meiner Sicht ein großer Fehler ist, dann ist das ja Eure Entscheidung.)
Ich finde es 10 mal besser als Blockly, aber wenn ihr das nicht wollt, dann ist es halt so.Nein die Zahl bleibt direkt im Alias - der Verweis geht aber auf den Punkt im mqtt-Adapter. Ich hab den JSON nur zu Demozwecken in userdata angelegt. Du hast nur den Alias und das Original im mqtt
-
@mickym Das war gar nicht so gemeint.
Ich bin gerade auch noch mit dem iobroker überfordert.
Also der Funktionsumfang und die Einstellmöglichkeiten sind enorm.
Desswegen nur. -
@merbes sagte in Shelly addon über Node Red auf einer NAS mit iobroker:
@mickym Das war gar nicht so gemeint.
Ich bin gerade auch noch mit dem iobroker überfordert.
Also der Funktionsumfang und die Einstellmöglichkeiten sind enorm.
Desswegen nur.Also wie gesagt Du verweist im Alias auf den Datenpunkt im mqtt.
EDIT: Nee keinen Flow - wenn Du den Adapter eh wieder runter schmiesst.
@Dirk-4 hat nur schon Flows in NodeRed laufen, deswegen hat er wahrscheinlich NodeRed gewählt und wir haben das zusammen gemacht und @hotspot_2 ist glaub auch von NodeRed angetan.
Deswegen alles ein KANN aber kein MUSS.
-
@mickym Verstanden.
Ich nehme dann bei den drei Punkten den mqtt und hangel mich runter zu dem entsprechenden (gewünschten) Sensor.
Klasse.
ich kann mich nur 1000fach bedanken. -
@merbes sagte in Shelly addon über Node Red auf einer NAS mit iobroker:
@mickym Verstanden.
Ich nehme dann bei den drei Punkten den mqtt und hangel mich runter zu dem entsprechenden (gewünschten) Sensor.
Klasse.
ich kann mich nur 1000fach bedanken.Genau.
-
@mickym Wenn ich hier noch einmal aufschlagen darf. Der Alias Datenpunkt hat einwandfrei funktioniert, vielen Dank. Jetzt benötige ich zur Steuerung in Blockly aber auch einen Datenpunkt für den Relais-Switch, also true oder false. Zudem ja dann auch schreibbar. Kann ich das auch über Alias machen und wenn je was muss ich da einstellen? Ich bekomme zwar einen Wert, wenn ich den Wert "true" aber in "false"ändere passiert nichts bzw. iobroker stürzt ab. Ich komme da gerade nicht weiter.
-
@ronnyempire Du brauchst zur Steuerung im Blockly kein true oder false Wenn Du es im Blockly machst, kannst Du sowohl im Blockly die Werte extrahieren und schreiben, tust Du in einem anderen Datenpunkt.
Du kannst es deshalb nicht über einen Alias machen, weil das commando und der Zustand des Relais aus verschiedenen Datenpunkten kommt.Funktioniert über EINEN Alias - habe ich in den Nachfolge-Posts gezeigt.Wenn Du ein plus Gerät hast, musst Du über das topic command schicken. - Aber wie gesagt, wenn Du das eh über Blockly machst dann kannst Du es auch so schicken. Mit NodeRed wäre es noch einfacher - aber egal.
Du kannst zwar einen Alias nehmen, um true oder false zu übersetzen - aber das Problem ist wie gesagt, dass Du zum Steuern andere Datenpunkte hast, als zum Lesen. MQTT kennt keine ACK Flags. Man könnte höchsten 2 Alias erstellen - aber wie gesagt, wenn Du eh mit Blockly hantierst, dann brauchst Du das ja nicht.
Bei den Shellies schaltest Du die Relais via MQTT ja nicht mit true/false sondern on/off
-
@mickym Gibt es dafür eine Anleitung? Weil der jetzige Datenpunkt (switch0) ja mehrere Parameter enthält.
-
@ronnyempire Schau mal grundsätzlich hier: https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Mqtt
So nun zu Deinen jetzigen Datenpunkten.
Zum Auslesen ist das ja ziemlich simple - Du liest einfach den output Parameter aus.
Du lässt den Datenpunkt einfach triggern und liest dann den Datenpunkt aus und selektierst das Attribut. Schreiben tust Du im Prinzip über das command topic.
Wenn Du es über einen Datenpunkt machen willst, den Du auch in der VIS bedienen kannst, dann musst Du selbst einen Datenpunkt erstellten. - Ich kann Dich schon durch den Prozess führen - auch wenn ich das Puzzeln nicht besonders mag.
Also wenn Du es über einen Datenpunkt machen willst, dann kopiere mir mal den Wert von switch:0 hier in codetags rein und ich simuliere das dann bei mir über einen Datenpunkt und führe Dich durch den Prozess.
-
@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}}
-
@ronnyempire sagte in Shelly addon über Node Red auf einer NAS mit iobroker:
{"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 nur für Dich zur Info - ich habe jetzt mal 2 Datenpunkte unter 0_userdata.0 angelegt - Du brauchst aber für Dein Relais Schalter nur einen Datenpunkt vom Typ Boolean - ich hab den schalter genannt. der shelly1pm repräsentiert Deinen Datenpunkt des Shelly1PMs im Mqtt.
Mit diesem Blockly setzt Du den Wert Deines Datenpunktes - Schalter, sobald vom mqtt ein neuer Status kommt.
Du musst halt die Pfade zu Deinen Datenpunkten anpassen.
-
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:0
Zum Schreiben den manuell erstellten Datenpunkt unter command.
mqtt.0.shellyplus1pm-80646fe3f840.command.switch:0
Die Lesen Konvertierungsfunktion ist dann wie gehabt:
JSON.parse(val).output
Die 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
-
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.
-
@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:0
auch 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 }