Such mal in der Bucht nach "hichi ir". Da solltest du einige Varianten finden,
Beiträge von SeRef
-
-
Es gibt verschiedene Leseköpfe. Mit USB-Anschluss z.B. zur Verbindung mit einem Raspberry oder auch mit serieller Schnittstelle. Mittlerweile auch eine Kombination aus Lesekopf mit einem integrierten ESP01S auf dem Tasmota (link zu Heise) installiert ist. Damit stehen einem ausreichende Möglichkeiten der Anbindung über WLAN zur Verfügung.
-
und schaltet zum nächsten bei 0,5 auf die volle Zahl.
Bist du dir da sicher? Mein Zähler zeigt die kWh auch ohne Kommastellen an, rundet aber nicht auf. Er zeigt erst mit Erreichen der vollen kWh eine mehr an.
Wenn du schon einen neuen Zähler hast, hast du dir schon mal überlegt die Infrarotschnittstelle auszulesen? Dann bräuchtest du deinen Gesamtverbrauch nicht mehr mit einem EM zu messen und die Probleme hinsichtlich des Saldierens wären erledigt.
-
Sorry, da habe ich mich etwas vertan.
Ich habe nochmal in der API-Referenz nachgeschaut. Die Werte unter by_minute werden als mWh angegeben, da wäre 60.000 richtig. Aber unter total werden sie in Wh angegeben. Da muss der Teiler dann 1.000 sein. Ich habe das Skript in Beitrag 34 geändert.
-
Das könnte an einem Neustart des Shelly liegen. Dabei wird der interne Zähler genullt, wohingegen in der Cloud weiter addiert wird.
Das ließe sich kontrollieren. Durch Aufruf http://192.168.178.77/rpc/Shelly.GetStatus in einem Browser findest du hinter aenergy:total den Verbrauch in Wattminuten. Diesen durch 60.000 teilen, um ihn in kWh umzurechnen. Der berechnete Wert sollte zu dem Wert in der CCU identisch sein.
Zudem gibt es noch die Uptime in Sekunden. Die gibt die Laufzeit seit dem letzten Start an. Das wäre dann auch der Zeitraum, den du mit der Cloud vergleichen kannst.
Um das Nullen beim Neustart abzufangen, müsste das Skript noch erweitert werden.
-
Gibt es eine Möglichkeit zum downgrade auf die 0.11.0-beta3?
Eine Möglichkeit wie bei den Gen1-Geräten gibt es nicht.
Wenn man die Firmware als sie aktuell war heruntergeladen hatte, kann man sie über einen eigenen Server bereitstellen und unter Angabe der Adresse per API oder Webui installieren. Ein paar Infos dazu gibt es z.B. hier.
-
Respekt für die schnelle Umsetzung
Danke
Ich habe mal versucht, mit dem Skript für den Dimmer2 einen 1PM (Gen1, nicht Plus) auszulesen. Dort funktioniert es ebenfalls. Es kann also sein, dass es noch bei weiteren Shellys der Gen1 funktioniert. Einfach mal Probieren, kann nichts kaputtgehen.
Bei den Shellys der Gen2 gäbe es auch die Möglichkeit, auf die zyklische Abfrage der Werte Leistung und Arbeit zu verzichten. Bei denen kann man per Skript die Werte bei Änderung an die CCU senden und in eine Variable schreiben lassen.
-
Versuch bitte mal.
Die Variable erstellen und im Skript anpassen nicht vergessen!
Code
Alles anzeigen! Skript zur Gesamt-Verbrauchsaktualisierung Shelly Dimmer2 V1.0.0 ! Copyright by SeRef @ www.smarthome-forum.eu ! ************************************** string vIP = "192.168.178.74"; ! IP des Dimmer2 string vName = "Dimmer2_Verbrauch"; ! Variablenname für Verbrauch ! ************************************** ! ** ab hier braucht nichts geändert zu werden ** var vUrl = "http://" # vIP # "/status"; string stdout = ""; string stderr = ""; real vArbeit = -1.0; system.Exec("wget -O - -t 1 -T 10 " # vUrl, &stdout, &stderr); stdout = stdout.Replace("}", ","); if (stdout.Contains('"meters"')) { stdout = stdout.StrValueByIndex('"meters"', 1); if (stdout.Contains('"total"')) { stdout = stdout.StrValueByIndex('"total"', 1).StrValueByIndex(',', 0).StrValueByIndex(':', 1); vArbeit = stdout.ToFloat() / 60000; if (dom.GetObject(vName)) { dom.GetObject(vName).State(vArbeit); } } }
-
Schön, dass es funktioniert
Das Skript an den Dimmer2 anzupassen, sollte kein großes Problem sein. Da ich allerdings keinen Dimmer2 habe, bräuchte ich von dir die Ausgabe von
http://<IpDimmer2>/status.
-
Wenn es dir nur um die Funkschnittstelle geht, wäre vielleicht der Pro2PM eine Option für dich. Der kann Netzwerk auch über Kupfer. Den kannst du dann per http-Befehl schalten.
-
Ich schaue mal, ob ich das Skript anpassen kann.
Mach' Dir keine unnötige Arbeit. Er hat ja inzwischen selbst das Richtige gepostet! (Beitrag 7)
Naja, nun doch
Code
Alles anzeigen! Skript zur Gesamt-Verbrauchsaktualisierung ShellyPlus1PM V1.0.1 ! Copyright by SeRef @ www.smarthome-forum.eu ! ************************************** string vIP = "192.168.178.77"; ! IP des ShellyPlus1PM string vName = "Waschmaschine_Verbrauch"; ! Variablenname für Verbrauch ! ************************************** ! ** ab hier braucht nichts geändert zu werden ** var vUrl = "http://" # vIP # "/rpc/Shelly.GetStatus"; string stdout = ""; string stderr = ""; real vArbeit = -1.0; system.Exec("wget -O - -t 1 -T 10 " # vUrl, &stdout, &stderr); if (stdout.Contains('"aenergy":{"total"')) { stdout = stdout.StrValueByIndex('"aenergy":{"total"', 1).StrValueByIndex(',', 0).StrValueByIndex(':', 2); vArbeit = stdout.ToFloat() / 1000; if (dom.GetObject(vName)) { dom.GetObject(vName).State(vArbeit); } } ! Ende Skript
Viel Erfolg!
Edit: Fast vergessen. Dieses Skript sollte zu keinem Blockieren der CCU führen. Kannst du ohne Abfrage, ob Online im Programm verwenden.
-
... und wenn's ganz ohne Schnickedöns sein darf:
Ein
http://<IPCCU>/x.exe?y=dom.GetObject("<Kanalname>").State(1)
Aus
http://<IPCCU>/x.exe?y=dom.GetObject("<Kanalname>").State(0)
IP der CCU und den zu schaltenden Kanalnamen eintragen. Ist ein Leerzeichen im Namen, muss dieses durch %20 ersetzt werden.
-
Hallo LeoHansen,
und vergiss nicht, die Zeile in deinem Programm zu löschen, in dem du das falsche Srkipt vom 1PM aufrufst. Es darf nicht gestartet werden. Es überschreibt sonst die Variable "Waschmaschine_Verbrauch" mit "" (nichts),
-
Um einen Shelly Plus 1PM
Das ist das Problem. Ein Skript für einen Shelly 1PM kann für einen Shelly Plus1PM nicht funktionieren. Die Anfrage und Antwort sind verschieden.
Ich schaue mal, ob ich das Skript anpassen kann.
-
Wenn du das "!" in Zeile 23 und/oder 25 entfernt hast, solltest du eigentlich den Antwortstring des Shelly angezeigt bekommen, der scheint bei dir aber nicht zu kommt.
Es handelt sich um einen 1PM und nicht um einen Plus1PM?
Die IP-Adresse des Shelly passt?
Wenn beides Ja, dann stelle bitte mal das Skript ein, mit dem du den Onlinestatus bzw. die Leistung abfragst.
-
Welche Variante der Aktualisierung würdest Du empfehlen?
Wenn in einem anderen Skript schon überprüft wird, ob der Shelly online ist und in einer Variable gespeichert wird (wovon ich laut Screenshot ausgehe) diese im Programm als Bedingung hinzufügen (Wenn Online dann).
Oder das Skript in das Skript, in dem der Onliestatus geprüft wird, mit einfließen lassen.
Bekommst du mittlerweile eine Rückmeldung unter Skript testen?
-
Hallo LeoHansen,
Ich bekomme leider auch keine Rückmeldung oder einen Fehler, sobald ich das Skript teste.
Im Skript sind alle Zeilen mit WriteLine auskommentiert. Um bei Skript testen eine Ausgabe zu bekommen, müssen in den Zeilen mit WriteLine die "!" am Zeilenanfang entfernt werden.
Woran könnte es liegen?
Im Skript schreibst du in die Variable "Waschmaschine_Verbrauch". Existiert diese überhaupt? Im Screenshot heißt eine Variable "Shelly_Verbrauch".
Gruß
SeRef
Edit: So wie du das Skript im Programm verwendest, läufst du Gefahr, dass die CCU bei nicht Erreichbarkeit des Shelly (Offline) bei jedem Aufruf für eine gewisse Zeit blockiert wird und keine anderen Programme ausführt. Die Zeit ist unter anderem davon abhängig, was im verwendetem CuXD Kanal unter EXEC_TIMEOUT eingetragen ist.
-
Hello muety,
the Pro1PM is able to recognize whether it is currently being consumed or feed in. In the case of feed in, the sign is negative.
However, it doesn't seem to measure very accurately. Mine has a deviation of about 9%.
Because of the relay in the Pro1PM and the higher accuracy, I would recommend you to use an EM or 3EM.
greeting
SeRef
-
-