Seite 1 von 2

Rule für Dämmerung

Verfasst: 3. Dez 2021 10:58
von hulda
Problem:
wie kann ich es lösen wenn der Hauptschalter"automatik_sd03" geschalten ist und der
Daemmerungswerteinstellen_sd03 Wert kleiner als der" Daemmerungswert "
die Steckdose Sd_03_EZ01_2OG geschalten wird.
Ansonsten soll dann einfach alles aus gehen.
Später soll nach der eingestellten Uhrzeit "uhrzeit_schalten_sd03" alles aus geschalten werden.(dafür habe ich noch gar keinen Plan)

Gruß Dirk



Items

Code: Alles auswählen

Number                uhrzeit_schalten_sd03
Switch                Sd_03_EZ01_2OG  
Number                Daemmerungswerteinstellen_sd03  
 Number                Daemmerungswert 
Switch                automatik_sd03                 
rule

Code: Alles auswählen

rule "Dämmerungsschalter Fenster Esszimmer"
when
Item Daemmerungswert received update 

then

if (automatik_sd03.state != ON)
{
   if (Daemmerungswert.state <= Daemmerungswerteinstellen_sd03.state as Number)
   
       Sd_03_EZ01_2OG.postUpdate(ON) 
       
       else{
     Sd_03_EZ01_2OG.postUpdate(OFF) 
}
}
else{
     Sd_03_EZ01_2OG.postUpdate(OFF) 
}

end

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 11:58
von int5749
hulda hat geschrieben: 3. Dez 2021 10:58 Problem:
wie kann ich es lösen wenn der Hauptschalter"automatik_sd03" geschalten ist und der
Daemmerungswerteinstellen_sd03 Wert kleiner als der" Daemmerungswert "
die Steckdose Sd_03_EZ01_2OG geschalten wird.
Ansonsten soll dann einfach alles aus gehen.
Später soll nach der eingestellten Uhrzeit "uhrzeit_schalten_sd03" alles aus geschalten werden.(dafür habe ich noch gar keinen Plan)
Also ich fange mal mit meinem Problem an, denn ich habe die Anforderung mit der Rule noch nicht verstanden. :oops:

1) Du möchtest etwas ausführen, wenn ein Schalter = ON ist. Fragst aber
!= ON
ab, was ein nicht ON ist
2) Du schreibst Daemmerungswerteinstellen_sd03 Wert kleiner als der" Daemmerungswert " fragst dies aber anders herum ab. Hier passt -mein Verständnis - Anforderung und Umsetzung nicht. Da aber der Wert Daemmerungswert wäre es sogar richtig umgesetzt :)
3) Zudem hattest Du noch einen Code-Fehler, es fehlen einige Klammern.
4) Ich habe den Code mit etwas Formatierung/Einrücken der Bausteine eine - zumindest für mich - übersichtliche Formatierung erstellt.

Versuch einmal wie folgt

Code: Alles auswählen

rule "Dämmerungsschalter Fenster Esszimmer"
when
    Item Daemmerungswert received update 
then
    if (automatik_sd03.state == ON) {
        if (Daemmerungswert.state <= Daemmerungswerteinstellen_sd03.state as Number) {
            Sd_03_EZ01_2OG.postUpdate(ON)
        } else {
            Sd_03_EZ01_2OG.postUpdate(OFF)
        }
    } else {
        Sd_03_EZ01_2OG.postUpdate(OFF)
    }
end

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 13:18
von peter-pan
Hab auch nicht alles verstanden, aber könnte es sein, das die Regel, dann eingesetzt werden soll, wenn die Automatik nicht läuft ???

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 14:18
von hulda
so passt es...

Code: Alles auswählen

rule "Dämmerungsschalter Fenster Esszimmer"
when
    Item Daemmerungswert received update or  //wenn eins von beiden ausgelöst
    Item automatik_sd03 received update
then
    if (automatik_sd03.state == ON) {   //wenn der Schalter auf ein steht
        if (Daemmerungswert.state <= Daemmerungswerteinstellen_sd03.state as Number) {  //wenn der Daemmerungswert kleiner ist als Daemmerungswerteinstellen_sd03
            Sd_03_EZ01_2OG.postUpdate(ON)  //dann Steckdose ein
        } else {
            Sd_03_EZ01_2OG.postUpdate(OFF)  //ansonsten Steckdose aus
        }
    }
end
wie kann man die Steckdose Sd_03_EZ01_2OG
nach dieser eingestellten Zeit "uhrzeit_schalten_sd03" ausschalten?

oder ist es viel einfacher es mit einer weiteren Rule einfach so zu machen?

Code: Alles auswählen

rule "Dämmerungsschalter Fenster Esszimmer aus"
when
    Time cron "0 0 21 * * ?"                                                                  // täglich um 21 Uhr
                                               
then
    Sd_03_EZ01_2OG.postUpdate(OFF)                                                            
                                                                                 
end

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 14:49
von int5749
Kleiner Tipp, Du solltest sendCommand() nutzen, anstatt postUpdate. Denn nur das sendet (wie das wort sagt) ein Kommando und forciert so einen Statuswechsel. In vielen Fällen funktioniert zwar ein postUpdate() aber ein Command ist sicherer für den Status.

Auch könntest Du den Status abfragen bevor Du unnötigerweise ein erneutes Kommando sendest.
Beispiel aus Deiner Rule

Code: Alles auswählen

        } else {
            if (Sd_03_EZ01_2OG == ON)
                  Sd_03_EZ01_2OG.sendCommand(OFF)  //ansonsten Steckdose aus
        }
Dies sendet ein OFF nur, wenn die Lampe/Steckdose eingeschaltet ist.
PS: Geht natürlich auch anders herum für das einschalten.

Ob Du nun mit einem Timer in der Rule arbeitest oder eine separate Rule nutzen möchtest um dies unabhängig zu schalten, obliegt Deinen Anforderungen. Wenn Du das item auch ausserhalb der Rule schalten kannst, ist eine separate Rule ggfs sicherer um das item zum gewünschtem Zeitpunkt immer auszuschalten. Wenn das Item nur und ausschließlich in der Rule geschaltet würde, könnte man mit einem Timer arbeiten.

Viele Grüße

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 19:41
von hulda
peter-pan hat geschrieben: 3. Dez 2021 13:18 Hab auch nicht alles verstanden, aber könnte es sein, das die Regel, dann eingesetzt werden soll, wenn die Automatik nicht läuft ???
nein umgedreht.. wenn automatik dann soll die Regel eingesetzt werden.
Also wie ein Hauptschalter

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 20:36
von peter-pan
Dann passt das ja, was @int5749 vorschlägt.

Re: Rule für Dämmerung

Verfasst: 3. Dez 2021 21:34
von int5749
Eine Idee für eine Abschaltung um 21 Uhr wäre

Code: Alles auswählen

var Timer tLightsDusk = null     // dies muss nach ganz oben in der Rules Datei

rule "Dämmerungsschalter Fenster Esszimmer"
when
    Item Daemmerungswert received update or  //wenn eins von beiden ausgelöst
    Item automatik_sd03 received update
then
    if ((automatik_sd03.state == ON) && (Sd_03_EZ01_2OG.state == OFF)) {   //wenn der Schalter auf ein steht und die Steckdose noch aus ist
        if (Daemmerungswert.state <= Daemmerungswerteinstellen_sd03.state as Number) {  //wenn der Daemmerungswert kleiner ist als Daemmerungswerteinstellen_sd03
            Sd_03_EZ01_2OG.sendCommand(ON)  //dann Steckdose ein
            tLightsDusk?.cancel
            tLightsDusk = createTimer(now.plusMinutes(Duration.between(LocalTime.now, LocalTime.now.withHour(21).withMinute(0)).toMinutes()),[|
                Sd_03_EZ01_2OG.sendCommand(OFF)  //ansonsten Steckdose aus
            ])
        }
    }
end
Aber dies ist ungetestet und nur ein Weg nach Rom.

Re: Rule für Dämmerung

Verfasst: 7. Dez 2021 08:29
von hulda
Hallo,
erst einmal vielen Dank für deine Mühen...
ich habe es mal ausprobiert. Aber irgendwie verstehe ich das nicht.
Muß nicht noch eine Zeit rein ab wann die Steckdose überhaupt wieder eingeschaltet werden darf? z.B 10 uhr oder wenn es wieder Hell geworden ist?

Gruß Dirk

Re: Rule für Dämmerung

Verfasst: 7. Dez 2021 08:36
von int5749
hulda hat geschrieben: 7. Dez 2021 08:29 ich habe es mal ausprobiert. Aber irgendwie verstehe ich das nicht.
Hat es denn funktioniert??
hulda hat geschrieben: 7. Dez 2021 08:29 Muß nicht noch eine Zeit rein ab wann die Steckdose überhaupt wieder eingeschaltet werden darf? z.B 10 uhr oder wenn es wieder Hell geworden ist?
Müssen muß es nicht und war von Dir auch ncht angegeben. Du kannst die Steckdose quasi direkt wieder einschalten, wenn Du magst.
Es wird ja "nur" geschaltet, nichts gesperrt.

Viele Grüße und einen guten Start in den Tag.