Shelly 1PM Plus / Addon Temperatur mit Switch Eingang kombinieren

  • Hallo Liebes Forum,


    Ich bin noch Anfänger was die Shellys betrifft, bitte daher um Nachsicht sollte ich hier etwas wenig intelligente Fragen stellen.

    Was ich erreichen möchte:

    1. Steuerung einer Steckdose im Außenbereich für Frostschutz
    2. Hardware: Shelly 1PM Plus, Shelly Plus Addon mit DHT21 / AM2301 Temperatursensor, Taster für 1PM Plus Switch Eingang
    3. Gewünschtes Verhalten:
      1. Winterbetrieb mit temperaturgesteuerter Schalthysterese:
        1. Wenn aktuelle Temperatur <= 2 Grad Celsius Steckdose ON
        2. Wenn Temperatur >= 5 Grad Celsius Steckdose OFF
      2. Sommerbetrieb per Taster aktivierbar:
        1. Betätigung des Tasters soll die Steckdose für 6h einschalten, unabhängig von der aktuellen Temperatur.
        2. Erneute Betätigung des Tasters innerhalb der 6h soll den Timer wieder auf 6h zurücksetzen
        3. Nach den 6 Stunden soll die Temperaturregelung wieder greifen: wenn die aktuelle Temperatur >= 5 Grad ist (Abschalttemperatur von Punkt 3.2) dann abschalten, sonst bleibt die Steckdose eingeschaltet.

    Soweit ich das bisher verstanden habe, wäre der reine Winterbetrieb mit einer Aktion umsetzbar.
    Aber ich glaube der Sommerbetrieb mit dem Taster ist nicht in der Aktion inkludierbar, dafür brauche ich dann ein Script, welches alles abdeckt. Stimmt das so weit?

    Wie könnte so ein Script in Grundzügen aussehen?

    Danke für eure Hilfe! :)

    LG,

    Wolf

  • Willkommen im Forum 🤗

    Weißt du nicht ob Sommer oder Winter ist 🙃🤗✌️

    Aber OK

    1.1 geht mit interner Automation =ON

    1.2 geht mit interner Automation =OFF

    2.1 geht mit interner Automation shortpush ON+Timer6h

    2.2 geht, erneuter shortpush startet den Timer neu

    2.3 geht natürlich weiterhin

    Achtung Winterbetrieb: shortpush am SW schaltet erst einmal An !

    Ist es dauernd in diesem Zeitraum >= 5 Grad gibt es erst mal den Auslöser nicht

    damit wird erst nach Timer Off geschaltet

    Shelly’s: 2x 1, 10x 1PM , 4x 2.5, 3x i3, 10x Plus 1PM, 22x Plug S, 11x UNI, 2x 1L mit PIR, 8x AddOn mit Temp/DHT22, 3x RGBW2, 2x Plus i4, 5x Plus 1, 4x Plus 2PM, 4x EM, 2x 3EM, 1x TRV, 3x Plus AddOn, 1x Pro 3EM, 2x BLU, 5xPlusPMmini, 1xPlus1PMmini, 4xPlusUNI

    Fritz!Box5690pro, 3x FRITZ!Repeater6000, 6x Fritz!Dect200

    HomeAssistant auf RaspberryPi5(8GB) mit NVMe, HomeAssistant auf Synology DS1019+, Backup HomeAssistant auf RaspberryPi4B(4GB)

    DHT21 (AM2301) oder (AM2320) für unter 0 Grad

  • Danke für die Antwort, ich versuche es mal rein über die interne Automatisation.

    Das was du unter "Achtung" geschrieben hast ist genau das, was ich erreichen möchte. Der Taster soll die Steckdose für 6h einschalten, egal was sonst ist. :thumbup:

  • Mit der internen Automation hab ich es nicht geschafft, dass die Temperatur nicht den per Taster aktivierten 6h-on Status zurückgesetzt hätte. Ein mal über 5 Grad Celsius und die Dose war wieder ausgeschalten.

    Für die interessierte Nachwelt: Ich habe das jetzt über ein Script gelöst.

    Vorbedingungen: Der Taster ist im "detached" Modus konfiguriert & ein Temperatursensor ist über den Shelly Addon angeschlossen (bei mir ein DHT21).

    Wenn man noch Szenen für An/Aus Benachrichtigungen anlegt dann tauchen die auch im Aktivitätslog auf :) .

    Einmal editiert, zuletzt von TheWolf (18. März 2024 um 20:39)

  • Mir gefällt dein Skript. Wegen des gut strukturierten Codes will ich nicht meckern. :thumbup:

    Trotzdem folgende Dinge, falls es dich interessiert. Wenn nicht, ignoriere meine Hinweise einfach! ;)

    1. user defined parameter ist rein optional. An solchen null zu übergeben und ud nicht zu nutzen, ist absolut überflüssig.
    2. In JavaScript gibt es den Vergleichsoperator, der auf Wert und Typ prüft (===). Im Zweifelsfall könnte dies zielführend sein.
      Der entsprechende ungleich Operator ist !==.
      Dies kann eine Rolle spielen, da diese Sprache nicht typenstreng ist.
    3. Zum schalten muss nicht vorher geprüft werden, ob der Ausgang bereits den angestrebten Zustand hat. Du erreichts damit allenfalls, dass laufzeitabhängig ein ggf. überflüssiger Methodenaufruf nicht stattfindet.

    status = isTurnedOn();

    // print ("turnOff called, status=" + status);

    if (true == status) {

    Hier genügt bspw.

    if(isTurnedOn()) {

    allerdings nur ohne die Ausgabe zwecks Test/Prüfung.

    Mit status genügt

    if(status) { // status beinhaltet bereits einen Wahrheitswert, der muss nicht noch mit true, oder an anderer Stelle mit false, verglichen werden.

    Ich weiß, dass dies sehr, sehr oft zu finden ist. Das erscheint mir aber sehr stereotyp. Und Häufigkeit hat nichts mit Qualität zu tun. :S

    An Cloud-/Szenen-Benutzer (insbesondere für Regelungen): Was erwartest du, wenn Internet oder Cloud sabotiert werden? Nicht nur dafür meine kleine Skripteinführung  8)

    Die einzig existierende Konstante ist der Wandel. Oft liegt die größte Schwierigkeit darin, das Anliegen des Klienten zu verstehen.

    4 Mal editiert, zuletzt von eiche (19. März 2024 um 09:09)

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