NEWS
Solaredge mit Modbus
-
Na dann herzlich willkommen in der Smarthome Welt. Hier gibt es viel zu lernen.
Grundsätzlich legen ioBroker Adapter Datenpunkte an, die man in "Objekte" finden kann. Dort siehst Du die ausgelesenen Werte der Geräte etc.
Für Deinen Solar Edge WR hat er diverse Punkte angelegt, die Du Dir dann mal anschauen solltest, z.B. wird es da sowas wie "Power" oder ähnliches geben, in dem er angibt, wie viel Leistung die PV Anlage gerade bringt. Den willst Du ja auch in Deiner Logik verwenden.
Weiter gibt es durch den Shelly Adapter Datenpunkte, bei denen auch einer dabei sein dürfe der "Switch" heißt. Den kann man dann mit "wahr" oder "falsch" beschreiben und somit etwa schalten. Wenn Du etwas schalten willst, dann brauchst Du dafür eine Logik um die Verknüpfung herzustellen, entweder gibt es Adapter, die das bereits mit einer einfachen Oberfläche bereitstellen oder Du musst Dir selber die Logik basteln. Hier empfiehlt sich Blockly, eine grafische Oberfläche zum Pogrammieren von logischen Verknüpfungen etc.
Ich empfehle Dir mal auf Youtube oder im Netz nach Blockly zu suchen, da gibt es hilfreiche Tutorials wie das funktioniert. Ist nicht sehr schwer und bei konkreten Problemen bekommt man hier auch immer Hilfe.In etwa so müsste das aussehen:
-
Wie kann ich herausfinden, ob es hier einen Adapter für die Logik gibt?
Bei der Shelly kann ich keinen Schalter finden. Müsste ich diesen auch in der Ansicht "Objekte" schalten können?Hier mal ein Screenshot:
-
Das sind die Datenpunkte des Shelly. Du musst aber mal den "Relay 0" Ordner aufklappen, da findest Du den Switch den Du nutzen kannst. Der Shelly an sich kann keine eigene Logik.
-
Und wo gebe ich dann die Funktionen ein, welche mit Blockly erstellt werden?
-
Ok, habs gefunden.
Bei mir war bei den Instanzen javascript.0 gestartet, aber es wurde im Menü nicht angezeigt. Ich habe es dann gelöscht und neu installiert und dann wurde es auch nach dem Start auch grün angezeigt.Ist das bei den Instanzen jetzt so in Ordnung, oder läuft da noch was nicht Richtig?
Ich habe auch Scripte angelegt.
Sind die automatisch aktiv, wenn diese gestartet sind, oder muss ich hier noch einen Zeitplan oder was anderes machen?Ich habe jetzt einmal das einschalten und das ausschalten:
Ist das jetzt so alles korrekt, oder muss ich noch mehr machen?
-
Du musst immer mit einem Trigger arbeiten, damit die Programme sozusagen bei Eintreten gestartet werden. Also wie von mir oben gezeigt einen Trigger auswählen, dann bspw. als ObjectID im Trigger "Total Real Power..." auswählen und bei "geändert" wird das Programm dann immer aufgerufen, also jedesmal wenn sich dieser Wert ändert. Man kann das aber sinnvollerweise auch auf einen Zeitplan umstellen (anderes Triggersymbol) und dort dann z.B. mal alle 5 min. eintragen, dann wird das Programm alle 5 Minuten aufgerufen und mithilfe Deiner Prüfung dann eben etwas ausgelöst.
P.S.: Die beiden Blöcke musst Du noch direkt hintereinanderhängen...
-
Ok, verstanden.
Mit dem hintereinanderhängen meinst du, dass ich die zusammen in den einen Trigger nehme?Die Instanzen aus dem Screenshot sind so korrekt?
-
Ich meine, dass Du die beiden Falls Abfrageblöcke zu einem Flow zusammenhängst. Alles muss dann von dem Zeitplan umschlossen sein, aber keine Unterbrechung darin sein.
Ja, Javascript läuft. Du hast ja auch schon in Blockly geschrieben...
-
Ich habe jetzt alles entsprechend angepasst, aber es funktioniert nicht richtig.
Die Steckdose wird immer eingeschaltet, auch wenn der Wert auf negativ ist.So schaut es derzeit aus:
M_AC_Power ist bei Einspeisung positiv und wenn Strom bezogen wird negativ (ein Minus-Zeichen vorne dran).
Kann es daran liegen, dass der Wert (800) als Textfeld eingegeben ist?
Oder was kann es sein? -
Ich habe jetzt mal eine Test-Variable mit dazu genommen, mit welcher ich den Wert manuell ändern kann. Wenn ich hier die Werte entsprechend ändere, schaltet die Steckdose korrekt.
Ich vermute, dass die Abfrage mit dem Wert vom Modbus nicht zurecht kommt.
Was kann ich machen? -
Ja, Du vergleichst hier einen Zahlenwert mit einem String, das geht so nicht. Nimm "Mathematik" statt "Text" und dort die Zahl von ganz oben. Die änderst Du auf den gewünschten Wert.
-
Wenn ich es so mache, wie es jetzt ist, kann ich die Zahl von "Mathematik" nicht einfügen. Das Feld wird an dieser Stelle nicht zugelassen.
Ich habe dann die "rote" Objekt-ID genommen und da kann ich die Zahl einfügen. Aber es funktioniert trotzdem nicht.
So habe ich es jetzt.
Was muss ich ändern?
-
Jetzt stimmt das mit der Zahl, nur musst Du halt noch den Wert des Datenpunktes vorne einfügen, statt des "Objekt ID". Objekt ID ist immer ein Platzhalter und kein Wert an sich. Der richtige Baustein dafür ist unter System zu finden.
Den vorne einfügen, dann auf "ID auswählen" klicken und den richtigen Wert aus der geöffneten Liste der Objekte auswählen, dann klappt es auch.
Schau Dir am besten mal ein wenig Blockly Tutorials an oder andere Beispiele....
-
Dank deiner super Hilfe läuft es jetzt.
Bei mir hagelt es jetzt aber Fehlermeldungen in den Protokollen, wenn ich die Shelly-Steckdose ausstecke. Hier der Fehler, der sich alle paar Sekunden wiederholt:Error in function state.coap.http_cmd for state SHPLG-S#DDB706#1.Relay0.Switch and request{"url":"http://192.168.1.51/relay/0","timeout":5000,"qs":{"turn":"off","timer":0}} for 192.168.1.51 (shellyplug-s / shellyplug-s-DDB706 / SHPLG-S#DDB706#1) (Error: connect EHOSTUNREACH 192.168.1.51:80)
Ich habe auch schon mit der Instanz "Ping" einen Ping auf die 192.168.1.51 erstellt und dann über einem neuen Trigger abgefragt, ob der Ping auf "True" ist. Wenn ich das mache, dann funktioniert die Steckdose nicht mehr. Diese kann ich dann auch über die Instanz von "Shelly" nicht mehr an- und ausschalten. Es scheint, als ob die Verbindung zur Shelly abgebrochen ist, da auch keine Verbrauchswerte mehr angezeigt werden.
Was kann ich da machen?
-
Gern geschehen.
Wenn Du die Steckdose "aussteckst", also vom Strom trennst, kann sie doch nicht mehr erreichbar sein und die Fehlermeldungen sind logisch oder was meinst Du nach dem erneuten Versorgen mit Strom?
Bei letzterem: Check mal über die Einstellungen im Browser, ob da der Reboot nach "Connection lost" eingeschaltet ist, ansonsten mögen die sich nämlich nach Netzverlust nicht neu verbinden...
-
Wo finde ich die Einstellung "Connection lost"?
Einen Browser habe ich bei den Instanzen nicht. Oder muss ich da noch was installieren?Ich habe jetzt testweise einen weiteren Parameter der Steckdose abgefragt, bevor der Switch geschaltet wird:
Hier kommt nun folgender Fehler:Error in function state.coap.http_cmd for state SHPLG-S#DDB706#1.Relay0.Switch and request{"url":"http://192.168.1.51/relay/0","timeout":5000,"qs":{"turn":"off","timer":0}} for 192.168.1.51 (shellyplug-s / shellyplug-s-DDB706 / SHPLG-S#DDB706#1) (Error: ESOCKETTIMEDOUT)
Die Steckdose ist nicht immer angesteckt.
Was kann ich machen, damit die Fehlermeldungen nicht kommen?
Die Abfrage mit Ping hat nicht funktioniert. -
Am besten wäre es, wenn erst eine Prüfung durchgeführt wird, ob die Steckdose angesteckt ist. Ich hatte das mit Ping gemacht, aber das hat nicht funktioniert.
Wenn die Steckdose wieder angesteckt wird, wird diese auch direkt wieder erkannt und es kommen keine neuen Fehler.
Wie könnte ich das am besten machen, dass erst geprüft wird, ob die Steckdose vorhanden ist. Denn dann dürfte ja keine Fehlermeldung kommen.
Die Fehlermeldungen würden ja sonst die Logdatei sprengen, da ja alle 2 Sekunden ein Eintrag dazu kommt.
-
Ich würde mal auf "Connection" prüfen. Die dürfte ja weg sein, wenn die Steckdose rausgezogen ist...
-
@joergh said in Solaredge mit Modbus:
Ich würde mal auf "Connection" prüfen. Die dürfte ja weg sein, wenn die Steckdose rausgezogen ist...
Wie kann ich das machen?
-
Du suchst Dir einen Wert, der oft upgedatet wird und fragst danach wann der zuletzt erneuert wurde (z.B. RSSI). Ist das schon länger her, ist er wohl nicht erreichbar. Du kannst nicht nur den Wert selbst, sondern auch den Zeitstempel abfragen wann er geschrieben wurde.