NEWS
iobroker, MQTT und Shelly - Was geht wie?
-
@mickym Da ist eigentlich nur ein Script, welches den Shelly schaltet. Und weil 14 Uhr im Programm und 2 Uhr schaltet die Kiste, dachte ich irgendwie an 24/12 Stunden Problem. Ein Witz, da
ß
der Scheduler ausgerechnet auf 2 Uhr stand.@laser Na ja wie gesagt, vielleicht hat das auch was mit dem Shelly Adapter zu tun gehabt (den ich nicht kenne), dass Du
ü
ber diesen Adapter auch intern den Scheduler ansteuern kannst. Soweit ich wei
ß
, hattest Du doch den Shelly mal mit dem Adapter angesteuert. -
@laser Na ja wie gesagt, vielleicht hat das auch was mit dem Shelly Adapter zu tun gehabt (den ich nicht kenne), dass Du
ü
ber diesen Adapter auch intern den Scheduler ansteuern kannst. Soweit ich wei
ß
, hattest Du doch den Shelly mal mit dem Adapter angesteuert.@mickym Schwer zu sagen, wie der Scheduler da rein kam. Ich dachte eigentlich, der Shelly war neu. Der Shelly- Adapter ist schon gut. So wie alle Adapter, wenn Sie gepflegt werden. IO Broker lebt doch von den Adaptern. Man kann nicht immer im Urschleim anfangen. Da l
ö
st man nie anspruchsvolle Aufgaben, weil die Zeit irgendwann nicht mehr reicht. -
@mickym Schwer zu sagen, wie der Scheduler da rein kam. Ich dachte eigentlich, der Shelly war neu. Der Shelly- Adapter ist schon gut. So wie alle Adapter, wenn Sie gepflegt werden. IO Broker lebt doch von den Adaptern. Man kann nicht immer im Urschleim anfangen. Da l
ö
st man nie anspruchsvolle Aufgaben, weil die Zeit irgendwann nicht mehr reicht.@laser Klar sind Adapter gut, aber sie bringen halt grunds
ä
tzlich eine zust
ä
tzliche Fehlerquelle mit und interpretieren halt die Dinge, die sie kennen. Sobald was neu ist, muss ein Entwickler wieder dran.
Ich nutze ja auch Adapter, die Dinge oder APIs toll verkapseln (ein hervorragender Adapter ist zum Beispiel der mercedes-me Adapter, den ich hier mal besonders lobend herausstellen will, weil hier das mit der Authentifizierung nicht einfach ist und bei Problemen quasi noch am gleichen Tag vom Entwickler eine L
ö
sung bereitgestellt wird). Aber alles was mqtt spricht betreibe ich lieber direkt, da braucht es in meinen Augen keine Adapter. mqtt ist ein allgemeines Protokoll und leicht lesbar. Man muss sich also nur mit den topics etc. auskennen und die Basis von JSON und das ist wirklich kein Hexenwerk.
Teilweise ist das ja auch alles historisch gewachsen. Und
ü
ber die Aliasfunktion, die ja nun richtig komfortabel ist, kann man auch selbst viele Dinge quasi "standardisieren".Aber lasser wir lieber die Diskussion, ich hab mir hier mit meiner Meinung schon genug
Ä
rger zugezogen.Jeder hat halt so seine Meinung und das ist auch gut so. Ich bin ja wie gesagt auch kein Puzzlefreund und finde die "roten Knoten" viel m
ä
chtiger, wenn man nicht herk
ö
mmlich codieren will. -
@laser Klar sind Adapter gut, aber sie bringen halt grunds
ä
tzlich eine zust
ä
tzliche Fehlerquelle mit und interpretieren halt die Dinge, die sie kennen. Sobald was neu ist, muss ein Entwickler wieder dran.
Ich nutze ja auch Adapter, die Dinge oder APIs toll verkapseln (ein hervorragender Adapter ist zum Beispiel der mercedes-me Adapter, den ich hier mal besonders lobend herausstellen will, weil hier das mit der Authentifizierung nicht einfach ist und bei Problemen quasi noch am gleichen Tag vom Entwickler eine L
ö
sung bereitgestellt wird). Aber alles was mqtt spricht betreibe ich lieber direkt, da braucht es in meinen Augen keine Adapter. mqtt ist ein allgemeines Protokoll und leicht lesbar. Man muss sich also nur mit den topics etc. auskennen und die Basis von JSON und das ist wirklich kein Hexenwerk.
Teilweise ist das ja auch alles historisch gewachsen. Und
ü
ber die Aliasfunktion, die ja nun richtig komfortabel ist, kann man auch selbst viele Dinge quasi "standardisieren".Aber lasser wir lieber die Diskussion, ich hab mir hier mit meiner Meinung schon genug
Ä
rger zugezogen.Jeder hat halt so seine Meinung und das ist auch gut so. Ich bin ja wie gesagt auch kein Puzzlefreund und finde die "roten Knoten" viel m
ä
chtiger, wenn man nicht herk
ö
mmlich codieren will.@mickym Hallo mickym, ich stehe genau vor dem von Dir geschilderten Problem. F
ü
r meine neue WP habe ich einen neuen 3Phasen Shelly Energiez
ä
hler installiert. Aber dieses Ger
ä
t wird (noch) nicht vom Shelly Adapter unterst
ü
tzt. Einen HW request habe ich in Github gestellt, aber KA wann der eingebaut wird.Mit dem Mqtt Server kann ich die json Daten sehen. Jetzt habe ich einige Daten und
ü
berlege, wie ich die in verschiedenen DP bekomme.
Vielleicht kannst Du mir erkl
ä
ren, wie ich die Leistungsdaten ( z.B. Gesamtleistung war gerade 2,8kw = total_act_power":2865.999, und wenn m
ö
glich je Phase) in DP bekomme?Hier die json:
{"src":"shellypro3em63-..........."shellypro3em63-........./events","method":"NotifyStatus","params":{"ts":............,"em:0":{"id":0,"a_act_power":-932.3,"a_aprt_power":2434.9,"a_current":10.391,"a_freq":50.0,"a_pf":0.38,"a_voltage":234.5,"b_act_power":2215.8,"b_aprt_power":2462.7,"b_current":10.524,"b_freq":50.0,"b_pf":0.90,"b_voltage":234.1,"c_act_power":1582.4,"c_aprt_power":2779.7,"c_current":11.904,"c_freq":50.0,"c_pf":0.57,"c_voltage":233.5,"n_current":null,"total_act_power":2865.999,"total_aprt_power":7677.312,"total_current":32.819}}} -
@mickym Hallo mickym, ich stehe genau vor dem von Dir geschilderten Problem. F
ü
r meine neue WP habe ich einen neuen 3Phasen Shelly Energiez
ä
hler installiert. Aber dieses Ger
ä
t wird (noch) nicht vom Shelly Adapter unterst
ü
tzt. Einen HW request habe ich in Github gestellt, aber KA wann der eingebaut wird.Mit dem Mqtt Server kann ich die json Daten sehen. Jetzt habe ich einige Daten und
ü
berlege, wie ich die in verschiedenen DP bekomme.
Vielleicht kannst Du mir erkl
ä
ren, wie ich die Leistungsdaten ( z.B. Gesamtleistung war gerade 2,8kw = total_act_power":2865.999, und wenn m
ö
glich je Phase) in DP bekomme?Hier die json:
{"src":"shellypro3em63-..........."shellypro3em63-........./events","method":"NotifyStatus","params":{"ts":............,"em:0":{"id":0,"a_act_power":-932.3,"a_aprt_power":2434.9,"a_current":10.391,"a_freq":50.0,"a_pf":0.38,"a_voltage":234.5,"b_act_power":2215.8,"b_aprt_power":2462.7,"b_current":10.524,"b_freq":50.0,"b_pf":0.90,"b_voltage":234.1,"c_act_power":1582.4,"c_aprt_power":2779.7,"c_current":11.904,"c_freq":50.0,"c_pf":0.57,"c_voltage":233.5,"n_current":null,"total_act_power":2865.999,"total_aprt_power":7677.312,"total_current":32.819}}}@hal Nun du kannst Dir entweder Aliase erstellen, f
ü
r die Datenpunkte, die Dich interessieren:
https://forum.iobroker.net/post/980575Oder Du nutzt Deine Logikmaschine. Wenn Du NodeRed nutzt, habe ich auch einen Flow der Dir alles in einzelne Datenpunkte zerlegt, aber das braucht man in der Regel nicht.
Also nachdem Dein Objekt ein Doppelpunkt enth
ä
lt und auch deine Daten nicht sauber sind, habe ich das hier mal mit einem Alias f
ü
r Dich nachgebaut:Also wenn Dein Datenpunkt diesen JSON enth
ä
lt:{ "method": "NotifyStatus", "params": { "em:0": { "id": 0, "a_act_power": -932.3, "a_aprt_power": 2434.9, "a_current": 10.391, "a_freq": 50, "a_pf": 0.38, "a_voltage": 234.5, "b_act_power": 2215.8, "b_aprt_power": 2462.7, "b_current": 10.524, "b_freq": 50, "b_pf": 0.9, "b_voltage": 234.1, "c_act_power": 1582.4, "c_aprt_power": 2779.7, "c_current": 11.904, "c_freq": 50, "c_pf": 0.57, "c_voltage": 233.5, "n_current": null, "total_act_power": 2865.999, "total_aprt_power": 7677.312, "total_current": 32.819 } } }
Dann ist da ein Doppelpunkt bei dem em:0 drin - und den musst Du dann in Deiner Konverierungsfunktion, wie folgt schreiben:
JSON.parse(val).params['em:0'].total_act_power

Dann erh
ä
lst du im Alias auch Deinen Wert einzeln. -
@hal Nun du kannst Dir entweder Aliase erstellen, f
ü
r die Datenpunkte, die Dich interessieren:
https://forum.iobroker.net/post/980575Oder Du nutzt Deine Logikmaschine. Wenn Du NodeRed nutzt, habe ich auch einen Flow der Dir alles in einzelne Datenpunkte zerlegt, aber das braucht man in der Regel nicht.
Also nachdem Dein Objekt ein Doppelpunkt enth
ä
lt und auch deine Daten nicht sauber sind, habe ich das hier mal mit einem Alias f
ü
r Dich nachgebaut:Also wenn Dein Datenpunkt diesen JSON enth
ä
lt:{ "method": "NotifyStatus", "params": { "em:0": { "id": 0, "a_act_power": -932.3, "a_aprt_power": 2434.9, "a_current": 10.391, "a_freq": 50, "a_pf": 0.38, "a_voltage": 234.5, "b_act_power": 2215.8, "b_aprt_power": 2462.7, "b_current": 10.524, "b_freq": 50, "b_pf": 0.9, "b_voltage": 234.1, "c_act_power": 1582.4, "c_aprt_power": 2779.7, "c_current": 11.904, "c_freq": 50, "c_pf": 0.57, "c_voltage": 233.5, "n_current": null, "total_act_power": 2865.999, "total_aprt_power": 7677.312, "total_current": 32.819 } } }
Dann ist da ein Doppelpunkt bei dem em:0 drin - und den musst Du dann in Deiner Konverierungsfunktion, wie folgt schreiben:
JSON.parse(val).params['em:0'].total_act_power

Dann erh
ä
lst du im Alias auch Deinen Wert einzeln. -
@hal Nun du kannst Dir entweder Aliase erstellen, f
ü
r die Datenpunkte, die Dich interessieren:
https://forum.iobroker.net/post/980575Oder Du nutzt Deine Logikmaschine. Wenn Du NodeRed nutzt, habe ich auch einen Flow der Dir alles in einzelne Datenpunkte zerlegt, aber das braucht man in der Regel nicht.
Also nachdem Dein Objekt ein Doppelpunkt enth
ä
lt und auch deine Daten nicht sauber sind, habe ich das hier mal mit einem Alias f
ü
r Dich nachgebaut:Also wenn Dein Datenpunkt diesen JSON enth
ä
lt:{ "method": "NotifyStatus", "params": { "em:0": { "id": 0, "a_act_power": -932.3, "a_aprt_power": 2434.9, "a_current": 10.391, "a_freq": 50, "a_pf": 0.38, "a_voltage": 234.5, "b_act_power": 2215.8, "b_aprt_power": 2462.7, "b_current": 10.524, "b_freq": 50, "b_pf": 0.9, "b_voltage": 234.1, "c_act_power": 1582.4, "c_aprt_power": 2779.7, "c_current": 11.904, "c_freq": 50, "c_pf": 0.57, "c_voltage": 233.5, "n_current": null, "total_act_power": 2865.999, "total_aprt_power": 7677.312, "total_current": 32.819 } } }
Dann ist da ein Doppelpunkt bei dem em:0 drin - und den musst Du dann in Deiner Konverierungsfunktion, wie folgt schreiben:
JSON.parse(val).params['em:0'].total_act_power

Dann erh
ä
lst du im Alias auch Deinen Wert einzeln.@mickym noch eine Frage, der Wert wird normal angezeigt, im log steht aber :
Invalid read function for "alias.0.WP_Leistung": "JSON.parse(val).params['em:0'].total_act_power" => Cannot read properties of undefined (reading 'total_act_power')Muss ich da noch etwas definieren ?
-
@mickym noch eine Frage, der Wert wird normal angezeigt, im log steht aber :
Invalid read function for "alias.0.WP_Leistung": "JSON.parse(val).params['em:0'].total_act_power" => Cannot read properties of undefined (reading 'total_act_power')Muss ich da noch etwas definieren ?
-
@mickym noch eine Frage, der Wert wird normal angezeigt, im log steht aber :
Invalid read function for "alias.0.WP_Leistung": "JSON.parse(val).params['em:0'].total_act_power" => Cannot read properties of undefined (reading 'total_act_power')Muss ich da noch etwas definieren ?
-
@hal wenn es zu sehr nervt, dann nimm deine Logikmaschine und schreib Dir selbst einen Datenpunkt unter 0_userdata.0
-
@hal Nun du kannst Dir entweder Aliase erstellen, f
ü
r die Datenpunkte, die Dich interessieren:
https://forum.iobroker.net/post/980575Oder Du nutzt Deine Logikmaschine. Wenn Du NodeRed nutzt, habe ich auch einen Flow der Dir alles in einzelne Datenpunkte zerlegt, aber das braucht man in der Regel nicht.
Also nachdem Dein Objekt ein Doppelpunkt enth
ä
lt und auch deine Daten nicht sauber sind, habe ich das hier mal mit einem Alias f
ü
r Dich nachgebaut:Also wenn Dein Datenpunkt diesen JSON enth
ä
lt:{ "method": "NotifyStatus", "params": { "em:0": { "id": 0, "a_act_power": -932.3, "a_aprt_power": 2434.9, "a_current": 10.391, "a_freq": 50, "a_pf": 0.38, "a_voltage": 234.5, "b_act_power": 2215.8, "b_aprt_power": 2462.7, "b_current": 10.524, "b_freq": 50, "b_pf": 0.9, "b_voltage": 234.1, "c_act_power": 1582.4, "c_aprt_power": 2779.7, "c_current": 11.904, "c_freq": 50, "c_pf": 0.57, "c_voltage": 233.5, "n_current": null, "total_act_power": 2865.999, "total_aprt_power": 7677.312, "total_current": 32.819 } } }
Dann ist da ein Doppelpunkt bei dem em:0 drin - und den musst Du dann in Deiner Konverierungsfunktion, wie folgt schreiben:
JSON.parse(val).params['em:0'].total_act_power

Dann erh
ä
lst du im Alias auch Deinen Wert einzeln.@mickym
Hallo mickym, leider wird mein log jetzt massive von den Alias Fehlern vollgeschrieben und ich mu
ß
einen anderen Weg finden. Mit Blockly habe ich es versucht, bin aber auch nicht erfolgreich gewesen:

Du hast von einem NoteRed Flow geschrieben, der die einzelnen DP erzeugt. Kannst Du mir den zur Verf
ü
gung stellen ? -
@mickym
Hallo mickym, leider wird mein log jetzt massive von den Alias Fehlern vollgeschrieben und ich mu
ß
einen anderen Weg finden. Mit Blockly habe ich es versucht, bin aber auch nicht erfolgreich gewesen:

Du hast von einem NoteRed Flow geschrieben, der die einzelnen DP erzeugt. Kannst Du mir den zur Verf
ü
gung stellen ?@hal sagte in iobroker, MQTT und Shelly - Was geht wie?:
Du hast von einem NoteRed Flow geschrieben, der die einzelnen DP erzeugt. Kannst Du mir den zur Verf
ü
gung stellen ?Klar - Du musst den nur importieren:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Ich habs gerade auch nochmal getestet, funktioniert ohne Fehler:
Kannst auch direkt importieren:

Du musst nur im Node-Red Adapter das Erstellen von Fremdobjekten zulassen:
Diese Node erzeugt Dir dann folgenden Ast aus einzelnen Datenpunkten:

-
@mickym
Hallo mickym, leider wird mein log jetzt massive von den Alias Fehlern vollgeschrieben und ich mu
ß
einen anderen Weg finden. Mit Blockly habe ich es versucht, bin aber auch nicht erfolgreich gewesen:

Du hast von einem NoteRed Flow geschrieben, der die einzelnen DP erzeugt. Kannst Du mir den zur Verf
ü
gung stellen ?@hal Ich habs aber gerade auch nochmal im Blockly f
ü
r Dich probiert und so funktioniert es meines Erachtens:
Du musst Dich halt den Pfad lang schl
ä
ngeln:
Hier der Import:
Aber wie gesagt, wenn Du meinen NodeRed Flow nehmen und wenn Du den ganzen Shelly triggerst und keepTopic gleich true verwendest, wird Dir auch der ganze Baum zerlegt.
-
@hal Ich habs aber gerade auch nochmal im Blockly f
ü
r Dich probiert und so funktioniert es meines Erachtens:
Du musst Dich halt den Pfad lang schl
ä
ngeln:
Hier der Import:
Aber wie gesagt, wenn Du meinen NodeRed Flow nehmen und wenn Du den ganzen Shelly triggerst und keepTopic gleich true verwendest, wird Dir auch der ganze Baum zerlegt.
-
9@mickym Jetzt habe ich die Qual der Wahl

Sowohl RedNote als auch Blockly funktionert .
DANKE .@hal Wenn Du mit dem Flow den ganzen Baum exportierst, dann sieht das so aus:

Da kannst Du den 1. Teil dann wieder mit einer Text Node k
ü
rzen, dass dan mqtt.1.shellies zum Beispiel nicht mitkommt.Also das gleiche Beispiel nur der Anfang des Topics weggek
ü
rzt:

In diesem Fall, l
ä
sst Du bei keepTopic einfach den Teil des topic durch einen Leerstring ersetzen:

Wichtig ist halt dass Du
ü
ber Wildcard Deinen ganzen Ast bzw. alle Datenpunkte Deines Shellies triggern l
ä
sst.
Aber wenn beides funktioniert, dann hast Du ja nun wieder alle M
ö
glichkeiten.
-
9@mickym Jetzt habe ich die Qual der Wahl

Sowohl RedNote als auch Blockly funktionert .
DANKE .@hal Falls Du
ü
brigens auch in Node-Red nur EINEN Wert und nicht das ganze JSON Objekt extrahieren willst, geht das genauso einfach wie in Blockly. Du musst das ganze mit einer JSON NOde nur in ein Objekt verwandeln:
Hier auch zum Ausprobieren:
-
@hal Falls Du
ü
brigens auch in Node-Red nur EINEN Wert und nicht das ganze JSON Objekt extrahieren willst, geht das genauso einfach wie in Blockly. Du musst das ganze mit einer JSON NOde nur in ein Objekt verwandeln:
Hier auch zum Ausprobieren:
-
@hal sagte in iobroker, MQTT und Shelly - Was geht wie?:
@mickym Du bist genial !
Danke f
ü
r die Blumen! - Ich w
ü
rde an Deiner Stelle halt vielleicht ein Issue erstellen, wegen dem Alias und diesen Fehlermeldungen.
Ü
brigens wenn Dein Objekt getriggert hat, kannst Du nat
ü
rlich sowohl im NodeRed als auch im Blockly auch Deine Werte, die f
ü
r Dich von Interessen sind auf einmal extrahieren (wenn Du nicht mit dem Flow alle Werte brauchst). In NodeRed machst Du dann einfach f
ü
r jeden Wert, den Du extrahieren willst, hinter die JSON Node eine ChangeNode bzw. halt im Blockly jeweils ein Attribut Puzzlest
ü
ck. -
@hal sagte in iobroker, MQTT und Shelly - Was geht wie?:
@mickym Du bist genial !
Danke f
ü
r die Blumen! - Ich w
ü
rde an Deiner Stelle halt vielleicht ein Issue erstellen, wegen dem Alias und diesen Fehlermeldungen.
Ü
brigens wenn Dein Objekt getriggert hat, kannst Du nat
ü
rlich sowohl im NodeRed als auch im Blockly auch Deine Werte, die f
ü
r Dich von Interessen sind auf einmal extrahieren (wenn Du nicht mit dem Flow alle Werte brauchst). In NodeRed machst Du dann einfach f
ü
r jeden Wert, den Du extrahieren willst, hinter die JSON Node eine ChangeNode bzw. halt im Blockly jeweils ein Attribut Puzzlest
ü
ck. -
@mickym btw, ich habe noch ein (f
ü
r mich ) etwas komplexes Blockly im Kopf, kann ich bei Problemen ggf. auch auf Deine Expertise hoffen ?
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden