Beiträge von towiat

    Das Script ist umgezogen!

    Ich habe das Script vom bestehenden Github Gist in ein vollwertiges Github Repository überführt.

    In diesem Zuge habe ich die Dokumentation aus dem Script herausgenommen und in die README Datei überführt. Damit ist sie jetzt umfangreicher und (hoffentlich) besser strukturiert. Außerdem ist ein vollwerrtiges Repo für mich als Entwickler praktischer, weil ich diverse Konfigurations- und Tooleinstellungen inkludieren kann.

    Im Zuge des Umzugs habe ich auch den Code überarbeitet und restrukturiert. An der bestehenden Funktionalität hat sich dadurch (hoffentlich :rolleyes:) nichts geändert und laut meinen Tests funktioniert alles wie gehabt.

    Neues Feature: Preislimit

    Es gibt eine neue Konfigurationsvariable namens priceLimit. Damit kann man einen Maximalpreis definieren (z. B. 10 cent/kWh). Wenn der günstigste berechnete Durchschnittspreis höher ist als dieses Limit, wird die Stromzufuhr für das aktuelle Zeitfenster nicht eingeschaltet (und die Nachrichten im KVS bzw. über Telegram informieren den Benutzer auch darüber).

    In der Grundeinstellung ist das Preislimit nicht aktiv.

    Der neue Link zum Script ist hier:

    https://github.com/towiat/spotelly

    Der alte Link bleibt aktiv, enthält aber nur noch einen Verweis auf den neuen Standort.

    Ich bitte um Rückmeldung, falls die neue Version unerwarteterweise Probleme machen sollte...

    Viel Spaß!

    TomPu31

    Hallo Thomas,

    Grundsätzlich bearbeitet das Script nur ein Zeitfenster und teilt die Einschaltzeiten nicht auf. Wenn du die Einschaltdauer (switchOnDuration) auf z. B. drei Stunden setzt, schaltet es stur den günstigsten Dreistundenblock innerhalb des definierten Zeitfensters.

    Du kannst aber auf dem Shelly bis zu fünf Scripte gleichzeitig laufen lassen und es hindert dich nichts daran, zwei Versionen dieses Scriptes mit unterschiedlichen Einstellungen zu.betreiben.

    Wenn du z. B. die günstigsten vier Stunden während des Tages und die günstigsten drei Stunden während der Nacht nutzen willst, könntest du das Script einmal mit den diesen Einstellungen installieren:

    Code
    // finde den günstigsten Vierstundenblock im Zeitraum von 6:00 bis 18:00
    let switchOnDuration = 4;
    let timeWindowStartHour = 6; 
    let timeWindowEndHour = 18;

    Dann installierst du das Script ein zweites Mal mit den folgenden Einstellungen:

    Code
    // finde den günstigsten Dreistundenblock im Zeitraum von 18:00 bis 6:00
    let switchOnDuration = 3;
    let timeWindowStartHour = 18; 
    let timeWindowEndHour = 6;

    Damit kümmert sich Script 1 um die Tages- und Script 2 um die Nachtzeiten.

    Ich habe so ein Setup eine Zeit lang bei mir laufen lassen und das funktionierte problemlos. Du solltest nur darauf achten, dass sich die Zeitfenster der beiden Instanzen nicht überschneiden, weil sich sonst die berechneten Ein- und Ausschaltzeiten überschneiden könnten.

    Für weitere Fragen stehe ich natürlich zur Verfügung...

    Turbinendriver

    Freut mich, dass das Script nützlich ist!

    Wenn das Script erfolgreich einen Zeitplan berechnet, sollte das Ein- und Ausschalten der Stromzufuhr eigentlich problemlos funktionieren. Ein möglicher Grund für das Unterbleiben der Schaltung wäre, wenn der Shelly selbst kurzzeitig von der Stromversorgung getrennt oder aus einem anderen Grund neu gestartet wurde. Dann würden die vom Script gesetzten Timer verloren gehen und die Schaltung würde erst nach dem nächsten planmäßigen Scriptdurchlauf wieder funktionieren.

    Wenn du Telegram aktiviert hast und die Variablen sendPowerOn und sendPowerOff auf true stehen, solltest du zu den berechneten Schaltzeiten Nachrichten erhalten, die dir sagen, dass die Stromzufuhr ein-/ausgeschaltet wurde.

    Bezüglich Anleitung und Fehlersuche habe ich ein paar Ideen, um das besser und verständlicher zu gestalten - sobald es etwas zu berichten gibt, werde ich das hier tun.

    Ich habe eine aktualisierte Version des Skriptes online gestellt, die folgende Änderung enthält:

    In der originalen Skript-Version war es schwierig, die errechneten Ein- und Ausschaltzeiten einzusehen. Telegram-Benutzer können sich entsprechende Nachrichten auf das Handy schicken lassen, aber alle anderen konnten die Zeitpläne nur im Log sehen, was natürlich nicht sonderlich praktisch ist.

    Die neue Skript-Version behebt dieses Manko, indem sie die errechneten Zeitpläne im Key-Value Store (KVS) des Gerätes ablegt. Das sieht so aus:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Die KVS-Seite kann über die Menüpunkte Advanced/KVS aufgerufen werden oder auch direkt mit der URL http://IPAdresseDesShelly/#/key-value-store (und diese URL kann natürlich auch als Favorit im Browser abgelegt werden).

    Die Daten werden bei jeder Ausführung der Preisanalyse aktualisiert (in der Standard-Einstellung also täglich um 15.00).

    Für ein Update von der alten auf die neue Skript-Version sind folgende Schritte durchzuführen:

    1. Die Ausführung des Skriptes stoppen
    2. Den Code des Skriptes KOMPLETT mit der neuen Version ersetzen
    3. Eventuelle Konfigurationsänderungen (awattarCountry, scheduleTimeSpec, etc etc) erneut durchführen
    4. Die Ausführung des Skriptes starten

    Die Nachricht erscheint dann nach der erstmaligen Durchführung der Preisanalyse (also um 15:00, wenn die Standard-Einstellung nicht geändert wurde).

    Hier noch einmal der (unveränderte) Link zum Skript:

    https://gist.github.com/towiat/070135d…5d189a332d37b5a

    Viel Spaß!

    Andrea57

    Wenn das Skript laut Schedule ausgeführt wird, werden Timer gesetzt, um die Stromzufuhr zum richtigen Zeitpunkt ein- bzw. auszuschalten. Das Problem ist, dass diese Timer nicht in der Benutzeroberfläche sichtbar sind.

    Allerdings schreibt das Skript zum Zeitpunkt der Ausführung Nachrichten in das Log, die so aussehen:

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Der erste markierte Eintrag enthält Debuginformationen zur Fehleranalyse - der zweite sagt im Klartext, was das Skript vorhat.

    Es wäre also interessant, ob du diese Einträge erhältst und wie sie aussehen - dazu müsstest du das Log zum Zeitpunkt der planmäßigen Ausführung lt. Schedule abfragen und die Einträge gegebenenfalls hier posten.

    Andrea57

    Ich bin ehrlich gesagt komplett neu in der Shelly-Welt - das Skript läuft problemlos auf zwei Gen2-Geräten, aber ich kenne die anderen Shelly-Produkte eigentlich gar nicht. Wenn die Shelly-Gurus sagen, dass es auf Gen1 nicht läuft, wird das schon so stimmen...

    Ganz generell zur Skript-Installation:

    Wenn du ein Gen2-Gerät in dein WLAN eingebunden hast, bekommt es ja eine lokale IP-Adresse. Um ein Skript zu installieren, musst du nur diese lokale IP-Adresse in einen Browser eintippen. Dann bist du auf der Web-Oberfläche des Gerätes und hast dort einen Abschnitt "Scripts" in den du das Skript reinkopieren kannst. Ein Tutorial habe ich hier gefunden...

    LG

    towiat

    Codeschnipsler

    Hallo Codeschnipsler,

    Bei der Pin-Ansteuerung kann ich dir leider nicht helfen - aber wenn ich deine Anforderung richtig verstehe, willst du ja die billigsten Stunden haben und nicht die teuersten oder? Das wäre ja genau das, was das Skript leistet...

    Die Preisfindung findet jedenfalls im folgenden Abschnitt des Skriptes statt:

    Nach Ausführung dieses Abschnittes hast du in der Variable SwitchOn den Beginn und in der Variable SwitchOff das Ende der günstigsten Periode des gewählten Zeitraumes (jeweils als POSIX-Zeitstempel). Wenn ich deine Anforderung richtig verstehe, willst du dann die WP zu Beginn dieser Periode einschalten und am Ende wieder ausschalten. Dazu müsstest du dann zwei Timer setzen, was in meinem Skript so aussieht:

    JavaScript
     let now = Date.now();
     Timer.set(switchOn - now, false, switchOnPower);
     Timer.set(switchOff - now, false, switchOffPower);

    Du müsstest also die Funktionen SwitchOnPower und SwitchOffPower durch deine eigenen Funktionen ersetzen, die dann über die Pins die Wärmepumpe ein- bzw. ausschalten.

    Falls ich das falsch verstanden habe, beschreibe mir bitte noch einmal genauer, was du mit "teure Stunden ermitteln" gemeint hast...

    LG

    towiat

    AlexAn

    Wenn ich das richtig sehe, hat das Script gestern (Samstag) um ca. 8:00 versucht, die Preise für heute (Sonntag) zu analysieren. Das kann nicht funktionieren, weil die Preise für heute zu diesem Zeitpunkt noch nicht existiert haben.

    Generell werden die Preise für den nächsten Tag an der Strombörse EPEX ausgeschnapst, und zwar in einer Auktion, die täglich um 12:00 stattfindet. Die ausgehandelten Preise werden dann zwischen 13:00 und 14:00 veröffentlicht und stehen natürlich auch erst dann über das Awattar-API zur Verfügung.

    Es hat also eher wenig Sinn, die Preisanalyse vor 14:00 laufen zu lassen.

    Wenn du das Script zum ersten Mal startest, passiert eigentlich nur eines: Es setzt (basierend auf der Variable scheduleTimeSpec) einen Schedule, über den der Shelly dann die Preisanalyse zu den festgelegten Zeiten startet. Diesen Schedule findest du auch in der Weboberfläche unter der Bezeichnung "<Scriptname> eval".

    Der Schedule ist fix gespeichert und bleibt auch bei einem Reboot erhalten.

    Das Ein- und Ausschalten der Stromzufuhr passiert nicht über Schedules, sondern über Timer. Die sind generell praktischer für diesen Zweck, aber soweit mir bekannt ist, kann man gesetzte Timer leider nirgendwo sehen (wenn das doch geht, wäre ich für Hinweise dankbar).

    Gesetzte Timer gehen bei einem Reboot verloren - in so einem Fall würde also das Ein- und Ausschalten für den aktuellen Zyklus nicht erfolgen. Bei der nächsten planmäßigen Scriptausführung funktioniert dann aber wieder alles wie geplant.

    AlexAn

    Freut mich, dass es nützlich ist!

    • Das verlinkte Script ändert offensichtlich den Namen des Gerätes, um seine Daten auf dem WebUI anzuzeigen. Das könnte ich natürlich auch machen - die Frage ist allerdings, was genau du da gerne sehen würdest. Es können ja - abhängig vom Resultat der Preisanalyse - Timer für bis zu zwei Zeitblöcke aktiv sein (z. B. heute von 17:00 bis 20:00 und morgen von 13:00 bis 16:00). Und wenn du (wie angedeutet) eine zweite Script-Instanz gleichzeitig laufen lassen willst, hättest du bis zu vier Zeitblöcke. Was sollte in diesen Fällen auf der Weboberfläche angezeigt werden?
    • Ich habe es zwar nicht getestet, aber ich sehe keinen Grund, warum du nicht zwei Instanzen des Scripts gleichzeitig laufen lassen könntest. Sinnigerweise sollten dann natürlich beide Instanzen unterschiedliche (und nicht überlappende) Zeitfenster bearbeiten, weil sich sonst die gesetzten Timer in die Quere kommen könnten.
    • Den dritten Punkt verstehe ich nicht ganz, aber generell stellt das Awattar-API die Preise für den Folgetag ab ca. 14:00 zur Verfügung. Der Default von 15:00 ist also mit einem Sicherheitspolster gerechnet. Du kannst natürlich die Daten auch später abfragen, wenn sich das mit deinem gewünschten Zeitablauf ausgeht.

    Ich habe ein Script erstellt, das einen Shelly Plus Plug S über die stündlichen Strompreise der EPEX (abgerufen über das Awattar API) steuern kann. Funktionsprinzip und Konfiguration sind im Script ausführlich erklärt - hier ein Schnelldurchlauf:

    • Man definiert einen Zeitplan (z. B. täglich um 15:00 Uhr), ein Zeitfenster (z. B. 7:00 bis 19:00 Uhr) und eine Dauer (z. B. vier Stunden).
    • Mit den obigen Einstellungen bezieht das Script jeden Tag um 15:00 die Spotpreise für das gewählte Zeitfenster (also 7:00 bis 19:00 des nächsten Tages) von Awattar. Dann identifiziert es die Vier-Stunden-Periode mit dem niedrigsten Durchschnittspreis innerhalb des Fensters und setzt zwei Timer, die die Stromzufuhr am Beginn dieser Periode ein- und am Ende wieder ausschalten.

    Es kann wahlweise das österreichische oder das deutsche Awattar-API verwendet werden.

    Optional kann das Script via Telegram über folgende Ereignisse informieren:

    • wenn neue Timer gesetzt wurden (inklusive Durchschnittspreis für die gewählte Periode)
    • wenn die Stromzufuhr durch das Script eingeschaltet wurde
    • wenn die Stromzufuhr durch das Script ausgeschaltet wurde

    Das Script ist hier zu finden (editiert am 06.10.24: Link aktualisiert):

    https://github.com/towiat/spotelly

    Viel Spaß!