Re: AVR Receiver Input via Rule
Verfasst: 11. Mär 2020 04:43
Man kann Bool'sche Algebra eigentlich immer beliebig komplex gestalten. Es muss nur am Ende true oder false heraus kommen.
Eine andere Variante (mit Timer für die Verzögerung):
Diese Variante läuft genau andersrum. Die Bedingungen werden der Reihe nach überprüft, falls eine Bedingung nicht zutrifft, wird der Ablauf der Regel abgebrochen (die Anweisung return). Ausnahmsweise muss hier ein Semikolon stehen, das liegt daran, dass return eigentlich einen Parameter erwartet (den Rückgabewert), den man aber auch weg lassen kann. Um die Übersetzung nicht scheitern zu lassen, braucht es also das Semikolon.
Weil es so schön ist, gibt die Rule jeweils per log Auskunft darüber, warum sie abgebrochen wurde. Das ist natürlich optional.
Weil man solche Meldungen im Alltag eher nicht sehen möchte, habe ich hier bewusst logDebug() eingesetzt. Um die Meldungen zu Gesicht zu bekommen, muss man über die Karaf Konsole das log Level für org.openhab.model.script.autoinput auf DEBUG setzen.
Die Rule wie oben zu schreiben, hat den Vorteil, dass man auch nach Jahren ohne weitere Kommentare direkt erkennen kann, was die Rule macht.
Weiterhin werden alle unnötigen Dinge gar nicht erst erledigt. In der früheren Variante wurde hingegen immer alles bis auf den eigentlichen Schaltbefehl ausgeführt. Die neue Variante wird also ziemlich sicher weniger Taktzyklen pro Durchlauf benötigen (solange eine der Bedingungen nicht zutrifft).
Eine andere Variante (mit Timer für die Verzögerung):
Code: Alles auswählen
var Timer tAutoInput = null // globale Variablen immer zu Beginn der Datei definieren
rule "Denon Autoinput IRP"
when
Thing "denonmarantz:avr:0005cd3a0e8e" changed
then
if(DenonInputAuto_to_IRP.state != ON) {
logDebug("autoinput","Regel getriggert, aber deaktiviert.")
return;
}
var status = getThingStatusInfo("denonmarantz:avr:0005cd3a0e8e").getStatus()
if(status.toString() != 'ONLINE') {
logDebug("autoinput","Regel getriggert, Gerät nicht ONLINE.")
return;
}
if (now.getHourOfDay < 7 || now.getHourOfDay > 12 || now.getDayOfWeek < 6) {
logDebug("autoinput","Regel getriggert, falscher Zeitraum.")
return;
}
logDebug("autoinput","Regel getriggert, berreite Umschaltung vor.")
tAutoInput?.cancel
tAutoInput = createTimer(now.plusSeconds(30), [|
logDebug("autoinput","Timer abgelaufen, wähle Internet Radio.")
DenonAVRX2000_MainZone_InputSource.sendCommand("IRP")
])
end
Weil es so schön ist, gibt die Rule jeweils per log Auskunft darüber, warum sie abgebrochen wurde. Das ist natürlich optional.
Weil man solche Meldungen im Alltag eher nicht sehen möchte, habe ich hier bewusst logDebug() eingesetzt. Um die Meldungen zu Gesicht zu bekommen, muss man über die Karaf Konsole das log Level für org.openhab.model.script.autoinput auf DEBUG setzen.
Die Rule wie oben zu schreiben, hat den Vorteil, dass man auch nach Jahren ohne weitere Kommentare direkt erkennen kann, was die Rule macht.
Weiterhin werden alle unnötigen Dinge gar nicht erst erledigt. In der früheren Variante wurde hingegen immer alles bis auf den eigentlichen Schaltbefehl ausgeführt. Die neue Variante wird also ziemlich sicher weniger Taktzyklen pro Durchlauf benötigen (solange eine der Bedingungen nicht zutrifft).