NEWS
iobroker, MQTT und Shelly - Was geht wie?
-
@mickym Das war es! ich hatte "Zeichenkette".
-
@laser sagte in iobroker, MQTT und Shelly - Was geht wie?:
@mickym Das war es! ich hatte "Zeichenkette".
Na dann ist ja alles gut!!
-
@mickym Danke nochmal!
-
@laser Gerne - und wenn Du in NodeRed - oder mit JSONs oder Objekten Schwierigkeiten hast, stehe ich gerne für Auskünfte bereit, wenn ich es selbst weiß.
-
Mein Shelly 2.5 schaltet nachts, etwa 2 Uhr, den Kanal 0 aus. Kann das ein Problem mit der Zeit sein? 14 Uhr soll er ausschalten.
-
@laser Ich habe keine Ahnung mit was Du schaltest. Das hat ja mit MQTT erst mal nichts zu tun, sondern mit Deiner Logikmaschine mit der Du schaltest.
Wenn das der Scheduler im Shelly selbst ist, dann musst Du halt schauen, dass der Shelly die richtige Zeit hat, wenn Du puzzelst, dann ist da halt was verkehrt, aber da können Dir die Puzzlefreunde besser helfen. Ich bin bekanntlich kein Verfechter dieser Puzzleteilchen.
-
@mickym Ich schalte über MQTT. Umweg über einen Alias.
Ist ja irre! Ein Scheduler war drin! -
@laser sagte in iobroker, MQTT und Shelly - Was geht wie?:
@mickym Ich schalte über MQTT. Umweg über einen Alias.
Ist ja irre! Ein Scheduler war drin!Na dann hast Du ja den Fehler gefunden. Aber wie gesagt auch wenn Du über MQTT oder einen Alias schaltest, ist der Trigger ja entweder eine Logikmaschine oder ein Trigger im Shelly selbst. Sprich über welchen Weg Du schaltest ist erst mal unwichtig, wichtig was ja den Trigger zu finden und das hast Du ja nun getan.
-
@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.
-
@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.
-
@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.
-
@mickym boah super DANKE, ich schaue mir das später richtig an und versuche das so umzusetzen.
Hat geklappt , nochmals DANKE !
-
@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 Nein - ausser es kommt zu diesem Zeitpunkt ein Wert rein, der nicht das ganze Objekt enthält. Ich weiß aber auch nicht, wie man das unterdrückt.
-
@hal wenn es zu sehr nervt, dann nimm deine Logikmaschine und schreib Dir selbst einen Datenpunkt unter 0_userdata.0
-
@mickym Alles klar, Danke
-
@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 ?