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)
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
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.
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.
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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
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?
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
} 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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
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
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.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
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?
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.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3