Script: Shelly 3EM Pro Switch Add-on smart load switch based on available power

Hinweis zur Nutzung von Skripten (für Nutzer)

Die Verwendung von Skripten erfolgt ausdrücklich auf eigene Gefahr. Weder Shelly noch die jeweiligen Autoren oder Entwickler der Skripte übernehmen irgendeine Form der Haftung für mögliche Schäden, Fehlfunktionen, Datenverluste oder anderweitige Beeinträchtigungen, die durch die Nutzung dieser Skripte entstehen könnten. Bitte stellen Sie vor dem Einsatz sicher, dass Sie den Quellcode verstehen und sich der möglichen Auswirkungen bewusst sind. Die Skripte werden ohne Gewähr bereitgestellt und unterliegen keiner regelmäßigen Wartung oder offiziellen Unterstützung.


Hinweis für Entwickler

Wenn Sie eigene Skripte bereitstellen, achten Sie bitte darauf, eine klare Beschreibung, eventuelle Einschränkungen und Sicherheitsaspekte zu dokumentieren. Beachten Sie zudem, dass Nutzer Ihre Skripte grundsätzlich auf eigenes Risiko verwenden. Eine Haftung für Schäden ist ausgeschlossen, sofern diese nicht vorsätzlich oder grob fahrlässig verursacht wurden oder gesetzlich anderweitig geregelt ist.

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 zusammen,

    ich habe ein Script geschrieben was recht smart einen PV Boost über den Shelly 3 em pro und das Switch addon schaltet.
    Ich wurde aufgefordert es hier zu veröffentlichen.
    Ich hoffe das passt alles soweit.

    Wesentliche Features sind:
    + Einschalten wenn absehbar genügend Leistung ins Netz eingespeist wird
    + Ausschalten wenn absehbar keine Leistung ins Netz eingespeist wird
    + Als Trigger wird ein 7,5 Minuten Durchschnitt verwendet
    + Es wird garantiert nicht häufiger als alle 15 Minuten geschaltet
    + Das Script läuft lokal und auch ohne Netzwerk

    Weitere Kommentare im Script.

    Viel Spaß und liebe Grüße ;)

  • Karaiso 1. Juni 2025 um 18:50

    Hat den Titel des Themas von „Script: Shelly 3EM Pro Switch Add-on smart load switch based power fed or consumption“ zu „Script: Shelly 3EM Pro Switch Add-on smart load switch based on available power“ geändert.
  • Ich freue mich, wenn einer der Experten hier das Script lesen würde und mir Feedback dazu geben würde.
    Ich habe versucht den Code so einfach wie möglich zu halten.

    Vielen Dank

  • Hallo,

    danke für dein Script !

    Ich suche eine ähnliche Funktion welche über dem 3 EM Pro die aktuelle Leistung abfragt und sobald -200Watt zum Beispiel erreicht werden soll er die PV Anlage an Plug S abschalten und bei 0 wieder einschalten. Leider bringt es einen Fehler "Fehler beim Zugriff auf sysfs: No handler for sysfs.get"


    Script:

    let PLUG_IP = "192.168.178.158"; // IP des Plug S
    let OFF_THRESHOLD = -200;
    let ON_THRESHOLD = 0;
    let CHECK_INTERVAL = 15000;

    let plugIsOn = true;

    function setPlug(state) {
    let url = "http://" + PLUG_IP + "/rpc/Switch.Set?id=0&on=" + state;
    HTTP.request({ method: "GET", url: url }, function (res, code, err) {
    if (res) {
    print("Plug " + (state ? "eingeschaltet" : "ausgeschaltet") + ".");
    plugIsOn = state;
    } else {
    print("Fehler beim Schalten:", err);
    }
    });
    }

    function parseEmData(data) {
    let total = 0;
    let lines = data.split("\n");
    for (let i = 0; i < lines.length; i++) {
    let parts = lines[i].split(",");
    if (parts.length >= 8) {
    let val = parseFloat(parts[7]);
    if (!isNaN(val)) total += val;
    }
    }
    return total;
    }

    function checkPower() {
    Shelly.call("sysfs.get", { name: "em_data" }, function (res, err_code, err_msg) {
    if (!res || !res.value) {
    print("Fehler beim Zugriff auf sysfs:", err_msg);
    return;
    }

    let totalPower = parseEmData(res.value);
    print("Gesamtleistung berechnet:", totalPower, "W");

    if (totalPower < OFF_THRESHOLD && plugIsOn) {
    setPlug(false);
    } else if (totalPower >= ON_THRESHOLD && !plugIsOn) {
    setPlug(true);
    }
    });
    }

    print("Starte Überwachung über sysfs.get...");
    Timer.set(CHECK_INTERVAL, true, checkPower);

  • Robbi82 Bitte zur besseren Lesbarkeit Skripte in einen Code-Block einfügen:

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

    Sonst passieren komische Dinge:

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

    Überwiegend PRO 3EM im Einsatz zur Haus und PV Überwachung

  • Eins vorweg:


    ich bin "Scriping-Newbie" und versuche gerade das Scripting durch "copy-and-paste"-Programmierung vorgegebener Scripte zu verstehen und erlernen.


    Karaiso

    danke für das Veröffentlichen deines Scriptes.

    Ist vielleicht nicht die einfachste Art um Scripting zu verstehen, aber man lernt ja mit dem Aufgaben und ein bisschen etwas verstehe ich schon.

    Aber jetzt zu meinen (dummen?)-Newbie Fragen:


    Wesentliche Features sind:
    + Einschalten wenn absehbar genügend Leistung ins Netz eingespeist wird
    + Ausschalten wenn absehbar keine Leistung ins Netz eingespeist wird
    + Als Trigger wird ein 7,5 Minuten Durchschnitt verwendet
    + Es wird garantiert nicht häufiger als alle 15 Minuten geschaltet
    + Das Script läuft lokal und auch ohne Netzwerk

    Wo deffinierst du, was "genügend Leistung" ist?

    Eine entsprechende Variablenzuordnung übersehe ich offensichtlich in deinem Script.

    "PowerLimit" sollte AFAIU diese Leistung sein, aber wo deffinierst du den Wert?

    Gleiche Frage habe ich zur Triggerzeit. Diese sollte AFAIU "powerTime" sein, oder?


    Danke für Hilfestellung und Aufklärung :)

    Shelly PRO3 em mit dem Ziel: einfaches Energiemanagement über Scripting (da gibt es noch viel zu lernen für mich... :/)