Und benutze bitte Codetags für Programmcode (so ist das nur schwer lesbar):
Beiträge von ostfriese
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
-
-
Hallo, welche FW hast du und welche Meldungen gibt das Skript aus?
-
-
-
-
Ok, dann kann das Skript als Vorlage für die vielen Leute die immer nach "Saldieren" fragen, dienen. Muss man nur leicht modifizieren.
Sollen die Admins entscheiden
-
Ich gehe mal davon aus das dieses hier geschlossen wird 🤔
Warum?
EDIT: Ich gehe davon aus, dass der TE 3 mal 200 Watt hat.
-
Testen, hatte nur einen 3EM zum ausprobieren. Aktuelle Firmware 1.0.7-beta1 auf dem Skript-Shelly.
In der Konfiguration Websocket debug enablen.
Ich gehe davon aus, dass das Skript auf dem Plus 1 PM läuft, der auch schalten soll. Deswegen localhost. Die period soll mindesten 30 sein!
Und, es gibt evtl. noch ein Problem, das ich von hier schlecht lösen kann. Wenn die WP läuft, beeinflusst das die Messungen der EM-Shelly?
Code
Alles anzeigenlet Config = { emips : ["172.16.0.77","172.16.0.78","172.16.0.79"], actor_ip : "localhost", actor_relay : "0", on_time : 5, watt : -500, period : 30 } function react() { print("Sum_power", sum_power,"Watt"); if(sum_power < Config.watt) { print(a_url); Shelly.call('http.get', {url:a_url, timeout:5}); } } function get_power() { Timer.set(Config.period * 500, false, react); sum_power = 0; for (let i=0; i<Config.emips.length; i++) { let url = "http://" + Config.emips[i] + "/emeter/0/em_data"; Shelly.call('http.get', {url:url, timeout:5}, function(result, error_code, error_message,action_type) { if(error_code === 0) { let body = JSON.parse(result.body); let power = body.power; print(url,power,"Watt") sum_power = sum_power + power; } } ) } } let sum_power; let t = JSON.stringify(Config.on_time * 60); let a_url = "http://" + Config.actor_ip + "/relay/"; a_url = a_url + Config.actor_relay + "?turn=on&timer=" + t; Timer.set(Config.period * 1000, true, get_power);
-
Jeder, wie er will
-
-
Es gibt auch noch die Möglichkeit, das Skript über den spezifischen Stromverbrauch deines Ultaschall-Gerätes zu triggern.
Aber, Skript an/aus geht natürlich auch.
-
Bitte schön, gerne geschehen.
-
Richtig! Aber, so teuer ist ja so ein Plug auch nicht. Da lohnt sich evtl. ein extra Plug für das Ultraschall-Gerät.
Ein Plus 1 (PM) kann das alles. Aber, der müsste ja eingebaut werden.
-
Bei dem Plug gibt es das nicht.
Wenn du
Codefunction eventcallback(event) { print(JSON.stringify(event)); } Shelly.addEventHandler(eventcallback);
verwendest, siehst du ALLES, was als Event zur Verfügung steht. Und es gibt nur kurzer Druck auf den Button, sonst nichts.
Kein Long Push und kein Double Push. Und bei detached passiert gar nichts!
-
Ok, dann warte ich erst einmal...
-
Mach mal bitte ein Update auf 1.0.7-beta1. Manchmal, wenn keine Ausgaben im Browser kommen hilft ein Reboot und es muss in den Settings:
Debug -->
Enable Websocket debug
eingestellt sein.
-
Bei mir wird hier gar nichts ausgegeben.
Aber der Plug schaltet?
-
-
Code
20:22:59 {"component":"switch:0","name":"switch","id":0,"now":1697307779.83673501014,"info":{"component":"switch:0","id":0,"event":"toggle","state":true,"ts":1697307779.83999991416}}
Dabei habe ich festgestellt, dass, wenn detrInput auf detached steht, kein Event ausgelöst wird. Also muss ich auf den Wechsel von Aus nach An reagieren.
Da das Ganze ja mit der Bedingung Switch 0 wird auf an geschaltet.
An die einzelnen Sachen in dem Objekt kommt man mit einer Punktnotation heran.
In event info component muss switch::0 stehen und
-
Mein erster Ansatz war, mir an zu schauen, wie ich das richtige Event finde.
Dazu brauche ich:
Shelly.addEventHandler(eventcallback);
Der macht nichts anderes als die in den Klammern angegebene Funktion aufrufen. Man hätte die Funktion auch anders nennen können.
Codefunction eventcallback(event) { print(JSON.stringify(event)); } Shelly.addEventHandler(eventcallback);
In event ist dann das Event als Objekt.
Mit JSON.stringify kann man das als String ausgeben.