Heizung Freigabe_Sperren von Viedeotraum -> Problem

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.

  • Beschreibung des Shelly Plus Uni Skripts

    Zweck des Skripts

    Das Skript dient zur Überwachung des digitalen Eingangs IN1 an einem Shelly Plus Uni. Es analysiert über einen bestimmten Zeitraum, ob der Eingang aktiv ist (z. B. geschlossen) oder nicht. Falls die Bedingung erfüllt ist (mindestens 75 % der Messwerte sind „true“), wird ein Relais für eine definierte Zeit eingeschaltet.

    Anwendungsfall

    Das Skript eignet sich z. B. für die Steuerung einer Heizungssperre in Abhängigkeit von der Leistung eines Wechselrichters.

    • Sobald der Wechselrichter eine bestimmte Leistung überschreitet, aktiviert er den potenzialfreien Kontakt, wodurch IN1 am Shelly ein Signal erhält.
    • Falls das Signal über mindestens 75 % der letzten 10 Minuten aktiv bleibt, wird das Relais eingeschaltet (z. B. um eine Heizung zu sperren).
    • Wenn die Leistung wieder unter den Grenzwert fällt und die Bedingung nicht mehr erfüllt ist, bleibt das Relais ausgeschaltet.

    Funktionalität im Detail

    1️⃣ Initialisierung der Konfiguration (CONFIG)

    Die Konfigurationswerte werden in einem CONFIG-Objekt definiert:

    • checkInterval: Zeitintervall für die Abfrage von IN1 (in Sekunden). Standard: 10 Sekunden.
    • maxEntries: Maximale Anzahl gespeicherter Werte (Standard: 60 Einträge → 10 Minuten Verlauf).
    • evaluationInterval: Intervall für die Auswertung (Standard: 30 Überprüfungen → 5 Minuten).
    • threshold: Prozentuale Grenze für das Aktivieren des Relais (Standard: 75 % müssen „true“ sein).
    • relayIP: IP-Adresse des Geräts, das das Relais steuert (z. B. localhost für Shelly selbst).
    • relayNR: Nummer des Relais, das gesteuert werden soll (1 für Relais 1).
    • inputID: Nummer des Eingangs (1 für IN1).
    • debug: Falls true, werden Debug-Nachrichten in der Konsole ausgegeben.

    2️⃣ Speicherung der letzten 60 Werte (SETUP.inputHistory)

    Ein Ringpuffer (FIFO-Speicher) speichert die letzten 60 Abfragen von IN1 (entspricht 10 Minuten).

    • Falls die maximale Anzahl erreicht ist, wird der älteste Wert überschrieben.
    • Das sorgt dafür, dass immer ein gleitender Verlauf ausgewertet wird.

    3️⃣ Überprüfung von IN1 (checkInputLoop)

    Ein Timer wird gestartet, um alle 10 Sekunden den Status von IN1 abzufragen:

    • Das Skript sendet eine HTTP-GET-Anfrage an:

      Code

      Code
      httpKopierenBearbeitenhttp://localhost/rpc/Input.GetStatus?id=1
    • Falls der Eingang geschlossen (true) oder offen (false) ist, wird der Wert gespeichert.
    • Debugging-Info: Es wird in der Konsole ausgegeben, ob IN1 gerade aktiv oder inaktiv ist.

    4️⃣ Speicherung der Werte (sevedData)

    Jede neue Messung wird im Ringpuffer gespeichert.

    • Falls 60 Einträge erreicht sind, wird der älteste überschrieben.
    • Nach jeder Speicherung wird überprüft, ob eine 5-Minuten-Analyse fällig ist.

    5️⃣ Analyse der letzten 5 Minuten (evaluateHistory)

    Alle 5 Minuten wird überprüft, ob mindestens 75 % der letzten 60 Werte „true“ waren.

    • Falls ≥ 75 % → Relais EIN
    • Falls < 75 % → Relais AUS

    💡 Debugging-Info:

    • Die Konsole gibt aus, wie hoch der Anteil der „true“-Werte ist (z. B. 82,3 %).
    • Falls der Grenzwert überschritten wurde, wird das Relais eingeschaltet.
    • Falls nicht, bleibt das Relais ausgeschaltet.

    Das Einschalten erfolgt über einen HTTP-Call:

    Code

    Code
    httpKopierenBearbeitenhttp://localhost/relay/1?turn=on&timer=301

    (Das Relais bleibt 301 Sekunden an, dann wird erneut geprüft.)

    Falls die Bedingung nicht erfüllt ist, bleibt das Relais aus.


    Zusätzliche Features

    Fehlertoleranz: Falls die Shelly-API nicht erreichbar ist, stürzt das Skript nicht ab, sondern gibt eine Fehlermeldung aus.
    Keine schnellen Schaltvorgänge: Dank des 10-Minuten-Speichers wird verhindert, dass das Relais durch Sonnen-Wolken-Schwankungen ständig an/aus geht.
    Energieoptimierung: Das Skript prüft nur alle 10 Sekunden statt in Dauerschleife

  • Viedotraum

    Betrifft nur bei Sonnen Wolken Spiel das war eben heute der Fall

    Ich denke ich habe einen Fehler gefunden kann das jemand bestätigen...habe ich erste heute bemerkt da ich nicht immer vor Ort bin.


    Wenn der Eingang da ist dann wird nach den Parametern der Kessel gesperrt... soweit ok...

    Ist etwas schwiering zu erklären ich probiers mal!

    Sagen wir der Kessel ist gesperrt PV Leistung usw. alles ok -> Bedingungen erfüllt!

    Dann habe ich Leistungschwankungen weil die Sonne hinter einer Wolke ist die 5min Nachlaufzeit ist aktiv bis Kessel freigeben wird

    Aber nach 3min Minunten kommt die Sonne wieder raus und die PV Leistung stimmt wieder...
    meiner Meinung nach fängt dann das Script die Auswertung wieder von vorne an also das heist der Kessel ist dann kurz freigegen bis er wieder gesperrt wird
    weil eben die Bedingungen wieder für Sperrung erfüllt wurden!

    evaluationInterval: 60, // 60 Durchläufe = 10 Minuten (60 x 10s = 10 Minuten)
    threshold: 0.85, // 85% müssen true sein -> 85% Sonnenschein

    Heute hat der Kessel somit 3mal also gestartet und dann wurde er gleich wieder gesperrt bzw. eben dann wieder abgestellt.

    Kann des das sein laut Script?

    Und warum werden meine 85% nicht übernommen die ich oben eingetragen habe!

    Code
    if (percentage >= CONFIG.threshold) {
        log("75% erreicht → Relais EIN");
        Shelly.call("http.get", { url: relayURL_ON });
      } else {
        log("Weniger als 75% → Relais bleibt AUS");

    6 Mal editiert, zuletzt von gexle (10. Februar 2026 um 16:34)

  • gexle 10. Februar 2026 um 15:14

    Hat den Titel des Themas von „Heizung Freigabe_Sperren von Videotraum -> Problem“ zu „Heizung Freigabe_Sperren von Viedeotraum -> Problem“ geändert.
  • Also, ich falle auch immer darauf rein, dass JavaScript nur asynchrone Prozesse zur Verfügung stellt.

    Das Shelly.call dürfte dein Problem sein, gerade mit dem Speed, mit dem dein Script läuft.


    Ich habe ein ähnliches Script am laufen, um die Brennertaktsperre zu aktivieren, wenn der Warmwasserspeicher durch den Heizstab voll geladen ist. Ich habe auch Ringspeicher (3 Stück) und muss mir noch von anderen Shellys Infos holen.

    Mein Script läuft deutlich langsamer in einer Statemachine:
    1. holen von externen Daten, eine Minute warten
    2. Ringspeicher bedienen und Brennertaktsperrenlogik durchführen., eine Minute warten
    3. Output setzen und Daten senden, eine Minute warten

    Und alle Shelly Aktionen in Try / Catch anlegen!

  • Hallo

    Ja kann es den möglich sein?

    Ich habe den IN1 also den Freigabe Eingang auch ein bzw ausschaltverzögert..habe einen Shelly UniPlus das sollte nicht das Problem sein...

  • Dieses Thema enthält 17 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.