Thomas hat dies in #54 doch eindeutig gekennzeichnet. Wenn ohnehin Leitungen zum flashen angelötet werden müssen, genügt diese Info doch.
Beiträge von eiche
-
-
Die Firmware ist somit nicht DAU-sicher.
-
dann leuchtet die Lampe nur solange, wie ich den Taster drücke
Ich konnte nur an einem Plus 1 nachsehen.
Select Input Mode: Button - hast du offenbar bereits
Set Output Type: Momentary - schaltet mit jedem Tastendruck um
Das sollte im Plus 2PM nicht anders sein.
Kann ich denn den ShellyI4 dazu bringen, beim 2PM ein Skript auszuführen?
Damit geht alles.
Auch Anwender spezifische Funktionen in einem Skript ausführen lassen. Dafür gibt es unterschiedliche Kombinationsmöglichkeiten.
- auf i4 Actions (ohne Skript) -> vorgesehene Funktion per URL zum 2PM
- auf i4 vom Skript -> vorgesehene Funktion per URL zum 2PM
- auf i4 Actions (ohne Skript) -> per URL Anwender spezifische Funktion per Skript auf 2PM
- auf i4 vom Skript -> per URL Anwender spezifische Funktion per Skript auf 2PM
Welche Kombination zielführend ist, hängt von den Wünschen des Anwenders ab.
Somit muss von Anwenderseite erst einmal eindeutig geklärt werden, was gewünscht ist - und ggf. welcher Aufwand für die Implementation getrieben werden darf.
Auch Zeitsteuerungen sind möglich, sogar zeitanbängiges Verhalten der Tastenfunktionen.
-
Afaik kann man im tasmotizer einstellen, dass die Firmware vor dem Flashen gesichert werden soll.
Falls du das getan hasst, sollte es möglich sein, mit dieser Sicherung die Original Firmware wieder zu flashen, mit dem tasmotizer.
Es wäre ein Versuch wert.
Falls du nicht gesichert hast, kann ich hier nicht weiterhelfen.
-
Bei Deiner besseren Ergänzung muss ich dann auch einen Job im Browser starten?
Ja, das kurze obige Skript ist per Schedule Job, wie in #2 angelegt, um 00:00 Uhr (oder so) zu starten.
Es stoppt zunächst das saldierende Skript.
Dann löscht es die beiden KVS Einträge.
Nach 5s startet es das saldierende Skript.
Nach 10s, also 5s nach dem Start von Skript 1, stoppt es sich selbst.
Du willst gegen 00:00 Uhr all dies durchführen lassen. Somit ist dafür genau ein Schedule Job wie in #2 erforderlich.
Edit:
Na ja, manche mögen dafür im Skript einen Timer und Zeitvergleiche einsetzen. Ein Schedule Job passt hierfür aber bestens und der Scheduler arbeitet verlässlich.
Kleine Korrektur:
Der Job wird nicht per Browser "gestartet" sondern angelegt. Der Scheduler in der Firmware ruft an Hand der timespec Angabe die eingetragene Methode mit den eingetragenen Parametern auf.
Jeder eingetragene und freigegebene (enable=true) Schedule Job ist ein Auftrag an den Firmware internen Scheduler, den Job auszuführen.
-
Dann habe ich eine verbessernde Ergänzung:
CodeShelly.call("script.stop", {id:1}); // stoppt Skript 1 Shelly.call("kvs.delete", {key:"EnergyConsumed"}); Shelly.call("kvs.delete", {key:"EnergyReturned"}); Timer.set(5000, false, function() {Shelly.call("script.start", {id:1});}); // startet Skript 1 Timer.set(10000, false, function() {Shelly.call("script.stop", {id:Shelly.getCurrentScriptId()});}); // stoppt sich selbst
Edit:
Vielleicht können die letzten beiden Aufrufe Shelly.call... auch ohne Wartezeiten per Timer genutzt werden. Das müsste aber getestet werden.
-
at Shelly.cal("script.stop", {id:1});
call mit zwei l
Ich korrigiere oben. Ich habe das Skript nicht getestet, sorry.
-
Es ginge bspw. auch mit einem einzelnen Schedule Job und einer Funktion "reset" im Skript. Diese Funktion sollte die Skript internen Salden auf 0 setzen, je nach Skript auch die KVS Werte.
Dann braucht der Shedule Job die Methode "script.eval" und "params":["id":1,"code":"reset()"]
-
Die KVS Daten nur auf null setzten klappt nicht, da sie im Skript gespeichert sind und alle 10Sek übergeben werden.
Dazu habe ich in #7 auf drei Jobs hingewiesen.
Job 1 stoppt das Skript. timespec="55 59 23 * * *"
Job 2 setzt die KVS Werte auf 0. timespec="0 0 0 * * *"
Job 3 startet das Skript. timespec="5 0 0 * * *"
-
Hab's gefunden.
Ich hatte etwas später noch korrigiert. In #2 steht es mittlerweile richtig.
Deine Schedule Einträge:
Code{"jobs":[{"id":1,"enable":true,"timespec":"0 * * * * *","calls":[{"method":"script.start","params":{"id":1}}]},{"id":2,"enable":true,"timespec":"0 0 0 * * *","calls":[{"method":"script.start","params":{id:2}}]}], "rev":65}
Im Job 2 muss hinter "params" der Key id in Anführungszeichen stehen.
Edit:
Interessant. Dann tritt ein solcher Fehler beim Methodenaufruf auf und nicht etwa während des Eintragens.
-
Bei mir gab es keine Fehlermeldung. Ich testete aber auf einem Shelly Plus 1, habe keinen Pro 3EM.
Sorry, ich testete nur den Job von #3.
Ich kann keinen Syntaxfehler im Job von #2 erkennen.
Edit:
Ich legte den Job nach #2 soeben erfolgreich an, ohne Fehlermeldung.
-
Da die Daten Saldiert werden und wenn das Skript weiter läuft die KVS-Daten nicht zurückgesetzt werden
Dann sollte das Rücksetzen der Werte auf 0 genügen. Teste doch mal den Schedule Job von #3! Nur den oberen Teil bitte, nicht das Listing!
Ok, vielleicht ist ein kurzzeitiges Anhalten vor dem Werte-Rücksetzen zielführend. Dann wäre das Skript kurz nach dem Rücksetzen zu starten. Das sind dann drei Schedule Jobs.
-
Nur zu Info: der 3Pro EM hat keine Web Ui, mit ihm kann man keine Schedule Job editieren.
Tatsache? Das ist dann aber schwach.
SyntaxError: JSON.parse: expected property name or '}' at line 1 column 203 of the JSON data
Du sollst den Schedule Job ja auch nicht in ein Skript packen!
Außerdem wird dein Job 1 per timespec jede volle Minute gestartet. Ok, zum testen halt ...
-
Also nee, dies ist der Standard Off Topic Thread.
-
Es bleiben folgende Fragen.
- Warum sollen die beiden KVS Einträge entfernt werden? Es sollte genügen, sie zu überschreiben, bspw. mit den Werten 0.
- Warum soll Skript 1 gestoppt werden?
Zu 1. Das kann auch per Schedule Job erfolgen. Ich versuche es mal.
Codehttp://<IP Adresse>/rpc/schedule.create?timespec="0 0 0 * * *"&calls=[{"method":"kvs.set","params":{"key":"EnergyConsumed","value":0}},{"method":"kvs.set","params":{"key":"EnergyReturned","value":0}}]
Die Methode "schedule.list" zeigt folgendes:
-
Hallo Marius alias Pit38
Da gibt es einiges zu klären.
- Das Auflisten eines Schedule Jobs (Zeilen 4 bis 15) hat nichts mit einem Skript zu tun.
Das ist ein solcher Job im JSON Format dargestellt. Ein Schedule Job, oder mehrere davon, lassen sich nicht in ein Skript einbauen, bzw. der JavaScript Interpreter kann dies nicht "verdauen".
Der timespec ist übrigens unvollständig. Er braucht immer 6 Teile. - Eine Fallunterscheidung (scwitch, case, case, ..., default) ist nur dann zweckdienlich, wenn sich die Fälle (case Ausdruck: ...), also die Werte der Ausdrücke hinter den case unterscheiden. Vermutlich würde trotzdem diese Fallunterscheidung so abgearbeitet, wie du es erwartest.
Alles folgende ist ungetestet, sollte aber funktionieren.
Wenn ich dich richtig verstehe, genügt hierfür ein etwas komplexerer Schedule Job oder ein einfacher Schedule Job in Kombination mit einem Skript. Ich frage an dieser Stelle nicht nach dem Zweck deines Vorhabens.
Ein vermutlich für dein Vorhaben geeignetes Skript:
CodeShelly.call("script.stop", {id:1}); Shelly.call("kvs.delete", {key:"EnergyConsumed"}); Shelly.call("kvs.delete", {key:"EnergyReturned"}); Timer.set(5000, false, function() {Shelly.call("script.stop", {id:Shelly.getCurrentScriptId()});});
Dieses Skript stoppt Skript 1, entfernt die beiden Einträge mit den Keys "EnergyConsumed", "EnergyReturned" und stoppt sich selbst nach 5 Sekunden.
Ich habe die Wartezeit von 5 Sekunden eingebaut, um sicherzustellen, dass die ersten drei Anweisungen komplett ausgeführt werden. Man mag testen, ob dies immer auch ohne diese Wartezeit sichergestellt ist.
Angenommen, dieses obige Skript hat die Id 2. Dann kannst du den passenden Schedule Job wie folgt anlegen und die Zeitangabe später bspw. per Web UI ändern.
- Das Auflisten eines Schedule Jobs (Zeilen 4 bis 15) hat nichts mit einem Skript zu tun.
-
PM ist nicht erforderlich, den Plus 2 gibt es aber ausschließlich mit PM.
welcher dem Shelly Plus i4 (der das Relais ersetzt) in der Lampe sagt welchen Ausgang er schalten soll?
Anders herum, ein i4 hat keine Relais, noch nicht einmal Ausgänge. An einen i4 werden Taster oder Schalter angeschlossen. i4 = input 4, d.h. er hat 4 Eingänge. Mit einem Plus 2(PM) kannst du zwei Stromkreise schalten, was in deinem Fall passen täte. Ein Plus 1 ist wenig geeignet, weil er nur einen Relais-Ausgang besitzt und einen Eingang. Willst du die beiden Stromkreise nicht auch unabhängig voneinander schalten können?
-
Willst du deine Steuerung wirklich Cloud abhängig machen?
-
Siehe meine Signatur!
Es gibt eine Möglichkeit, die Messdaten lokal auf dem Shelly zu speichern - autark, per Skript.
Diese können bei Bedarf und Gelegenheit abgerufen oder per Copy & Paste übertragen werden. Das Ganze ohne Cloud.
Wer mehr mmöchte, dem kann ich im lokalen Netz einen Raspberry Pi empfehlen, auf dem Influx und Grafana laufen ... auch alles ohne diese abhängig machende Cloud.
-
Ich lese wiederholt von Shelly 2PM, weshalb ich einen aktuellen Shelly Plus 2PM vermute, also ein Gerät der zweiten Generation.
Mit einem solchen gelingt das, was du willst. Es ist allenfalls eine Frage des Aufwandes (evtl. im programmieren).
Da du eh Taster vorziehen willst, stehen hierfür Ereignisse wie push, long push, double push und triple push zur Verfügung - vielleicht nicht auf einem Plus 2PM, aber jedenfalls auf einem Shelly i4.
Den i4 kannst du zum reinen Steuern eines Plus 2PM an der Lampe verwenden. Das muss aber nicht sein, wenn genügend Leitungen zur Lampe führen und der Plus 2PM die von dir gewünschten Ereignisse zur Verfügung stellt.
An Hand solcher Ereignisse kannst du Webhooks (=Actions) einrichten, die das Gewünschte veranlassen.
Per Skript auf einem Plus 2PM gelingt es in jedem Fall.