[gelöst] Mehrere Bedingungen in einer Rule
Verfasst: 3. Sep 2020 19:48
Hallo OpenHAB Gemeinde,
ich habe mich daran gewagt für mein Smart Home OpenHAb als Zentrale zu verwenden.
Zu Beginn habe ich mich an eien vermeindlich Leichte Aufgabe gewagt.
Die Aufgabenstellung sieht wie folgt aus:
Ein Sonoff POW ist mit Tasmota geflasht und in THhings und Items angelegt. Sie erscheint mit allen Werten als Gruppe im Control Fenster und läst sich bedienen. Diesen nutze ich um die Media Geräte zu schalten.
Nun habe ich versucht eine Rule zu erstellen, die den POW bei unterschreiten einer Leistung (alle Geräte in StdBy) nach eine Zeit ausschalten soll. Dies funktioniert auch.
Sobald der Timer läuft und jemand 1 Gerät wieder ein schaltet soll der Timer gestopt werden. Auch das funktioniert.
Der Code hierzu:
Mit diesem Code wird aber ständig der Timer aktiviert und der POW ausgeschaltet wenn die Geräte oder soger der POW aus ist . ebenso wird der Timer gecancelt solange ein Gerät eingeschaltet ist.
Um dies zu vermeiden habe ich diverse Konstallationen versucht, um 2 Bedingung für die aAktivierung und das canceln des Timer zu setzen. Ich habe auf dieversen Seiten nach Lösungen gesucht, um 2 Bedingungen in einer Rule zu verknüpfen.
Hier mein Code Ansatz, den ich mir erarbeitethabe für die Funktionen:
Alternativ habe ich auch die folgen Zeilen versucht :
Nach den Vorlagen, die ich gefunden habe sollten beide Möglichkeiten funktionieren. Leider funktioniert keine der Möglichkeiten. Ich habe alles mehrfach umgestellt und versucht, aber irgendwie habe ich ein Brett vor dem Kopf und finde keinen Fehler.
Kann mir evtl. jemand eien Tip geben wo mein Denkfehler ist.
Mit freundlichen Grüßen
Markus
ich habe mich daran gewagt für mein Smart Home OpenHAb als Zentrale zu verwenden.
Zu Beginn habe ich mich an eien vermeindlich Leichte Aufgabe gewagt.
Die Aufgabenstellung sieht wie folgt aus:
Ein Sonoff POW ist mit Tasmota geflasht und in THhings und Items angelegt. Sie erscheint mit allen Werten als Gruppe im Control Fenster und läst sich bedienen. Diesen nutze ich um die Media Geräte zu schalten.
Nun habe ich versucht eine Rule zu erstellen, die den POW bei unterschreiten einer Leistung (alle Geräte in StdBy) nach eine Zeit ausschalten soll. Dies funktioniert auch.
Sobald der Timer läuft und jemand 1 Gerät wieder ein schaltet soll der Timer gestopt werden. Auch das funktioniert.
Der Code hierzu:
Code: Alles auswählen
var Timer MediaAus = null
rule "Media aus"
when
Item Steckdose_Media_Leistung changed
then
var Leistung = Steckdose_Media_Leistung.state as Number
if (Leistung < 28)
{ logInfo("rules", "Media Power low")
logInfo("rules", "Media Timer activated")
MediaAus = createTimer(now.plusSeconds(90), [| Steckdose_Media_Power.sendCommand("OFF")
logInfo("rules", "Media Timer triggered")])
}
end
rule "Media cancel"
when
Item Steckdose_Media_Leistung changed
then
var Leistung = Steckdose_Media_Leistung.state as Number
if (Leistung > 30) {
logInfo("rules", "Media Power high")
MediaAus = null
logInfo("rules", "Media Timer canceled")
}
end
Um dies zu vermeiden habe ich diverse Konstallationen versucht, um 2 Bedingung für die aAktivierung und das canceln des Timer zu setzen. Ich habe auf dieversen Seiten nach Lösungen gesucht, um 2 Bedingungen in einer Rule zu verknüpfen.
Hier mein Code Ansatz, den ich mir erarbeitethabe für die Funktionen:
Code: Alles auswählen
var Timer MediaAus = null
rule "Media aus"
when
Item Steckdose_Media_Leistung changed
then
var Leistung = Steckdose_Media_Leistung.state as Number
if (Leistung < 28)
{ logInfo("rules", "Media Power low")
if (Steckdose_Media_Power.state = "ON") {
logInfo("rules", "Media Timer activated")
MediaAus = createTimer(now.plusSeconds(90), [| Steckdose_Media_Power.sendCommand("OFF")
logInfo("rules", "Media Timer triggered")])
}
}
end
rule "Media cancel"
when
Item Steckdose_Media_Leistung changed
then
var Leistung = Steckdose_Media_Leistung.state as Number
if (Leistung > 30) {
logInfo("rules", "Media Power high")
if (MediaAus !== null) {
MediaAus = null
logInfo("rules", "Media Timer canceled")
}
}
end
Code: Alles auswählen
if ((Leistung < 28) && (Steckdose_Media_Power.state = "ON")) {...Timer Ein...}
if ((Leistung > 30) && (MediaAus !== null) ){...Timer cancel...}
Kann mir evtl. jemand eien Tip geben wo mein Denkfehler ist.
Mit freundlichen Grüßen
Markus