Seite 3 von 3

Re: AVR Receiver Input via Rule

Verfasst: 18. Aug 2020 22:14
von udo1toni
Das ist ja schon ein Weilchen her...

Wie sieht der Code denn aktuell aus?


Gesendet von iPad mit Tapatalk

Re: AVR Receiver Input via Rule

Verfasst: 18. Aug 2020 22:17
von PeterA
Original so wie in deinem als beste Antwort markierten Post.

Re: AVR Receiver Input via Rule

Verfasst: 22. Aug 2020 12:44
von PeterA
Hier noch mal die aktuelle Rule:

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) {
        logInfo("autoinput","Regel getriggert, aber deaktiviert.")
        return;
    }
    var status = getThingStatusInfo("denonmarantz:avr:0005cd3a0e8e").getStatus()
    if(status.toString() != 'ONLINE') {
        logInfo("autoinput","Regel getriggert, Gerät nicht ONLINE.")
        return;
    }
    if (now.getHourOfDay < 7 || now.getHourOfDay > 12 || now.getDayOfWeek < 6) {
        logInfo("autoinput","Regel getriggert, falscher Zeitraum.")
        return;
    }
    logInfo("autoinput","Regel getriggert, berreite Umschaltung vor.")
    tAutoInput?.cancel
    tAutoInput = createTimer(now.plusSeconds(15), [|
        logInfo("autoinput","Timer abgelaufen, wähle Internet Radio.")
        DenonAVRX2000_MainZone_InputSource.sendCommand("IRP")
    ])
end
Gruß Peter

Re: AVR Receiver Input via Rule

Verfasst: 22. Aug 2020 17:42
von udo1toni
Gut. Ich gehe von "TV" als Input Namen aus. Falls das abweicht, musst Du das entsprechend ändern.

Code: Alles auswählen

var Timer tAutoInput = null  // globale Variablen immer zu Beginn der Datei definieren

rule "Denon Autoinput bei Einschalten"
when 
    Thing "denonmarantz:avr:0005cd3a0e8e" changed
then
    if(DenonInputAuto_to_IRP.state != ON) {
        logInfo("autoinput","Regel getriggert, aber deaktiviert.")
        return;
    }
    var status = getThingStatusInfo("denonmarantz:avr:0005cd3a0e8e").getStatus()
    if(status.toString() != 'ONLINE') {
        logInfo("autoinput","Regel getriggert, Gerät nicht ONLINE.")
        return;
    }
    if (now.getDayOfWeek < 6) {
        logInfo("autoinput","Regel getriggert, kein Wochenende.")
        return;
    }
    logInfo("autoinput","Regel getriggert, bereite Umschaltung vor.")
    tAutoInput?.cancel
    tAutoInput = createTimer(now.plusSeconds(15), [|
        var String strInput = "TV"
        if (now.getHourOfDay > 6 && now.getHourOfDay < 13)
            strInput = "IRP"
        logInfo("autoinput","Timer abgelaufen, wähle {}.",strInput)
        DenonAVRX2000_MainZone_InputSource.sendCommand(strInput)
    ])
end
Die Umschaltung wird nur am Wochenende ausgeführt. (letztes return vor dem Erstellen des Timers...) Im Timer entscheidet die Rule anhand der Uhrzeit, welcher Eingang gewählt wird. Innerhalb des Zeitfensters 7 Uhr bis 13 Uhr wird Internet Radio gewählt, außerhalb TV. Ich war faul und habe einfach den zu übergebenden String im log verwendet, der Lesende dürfte damit genauso gut zurechtkommen ;)

Re: AVR Receiver Input via Rule

Verfasst: 23. Aug 2020 20:21
von PeterA
Hallo Udo,

was soll ich sagen ? Funktioniert! Vielen Dank!

Code: Alles auswählen

var Timer tAutoInput = null  // globale Variablen immer zu Beginn der Datei definieren

rule "Denon Autoinput bei Einschalten"
when 
    Thing "denonmarantz:avr:0005cd3a0e8e" changed
then
    if(DenonInputAuto_to_IRP.state != ON) {
        logInfo("autoinput","Regel getriggert, aber deaktiviert.")
        return;
    }
    var status = getThingStatusInfo("denonmarantz:avr:0005cd3a0e8e").getStatus()
    if(status.toString() != 'ONLINE') {
        logInfo("autoinput","Regel getriggert, Gerät nicht ONLINE.")
        return;
    }
    if (now.getDayOfWeek < 6) {
        logInfo("autoinput","Regel getriggert, kein Wochenende.")
        return;
    }
    logInfo("autoinput","Regel getriggert, bereite Umschaltung vor.")
    tAutoInput?.cancel
    tAutoInput = createTimer(now.plusSeconds(15), [|
        var String strInput = "SAT/CBL"
        if (now.getHourOfDay > 6 && now.getHourOfDay < 13)
            strInput = "IRP"
        logInfo("autoinput","Timer abgelaufen, wähle {}.",strInput)
        DenonAVRX2000_MainZone_InputSource.sendCommand(strInput)
    ])
end

Re: AVR Receiver Input via Rule

Verfasst: 10. Nov 2020 08:32
von PeterA
Hallo Udo,
es gibt ja im "Live" Betrieb immer noch etwas was nicht bedacht wurde :)
Nämlich kann es sein das der Denon auf "BD" (Blu-Ray) als Input steht. (Weil halt jemand gerade Blu-Ray schaut)
Ab und zu passiert es aber leider das das Denon Thing in OpenHAB Offline geht und danach wieder online. (Ursache noch nicht gefunden)
Dann würde die Rule wieder auf SAT/IRP umschalten.... -> doof.
Ich habe jetzt noch eine Zusätzliche Abfrage eingebaut welche prüft ob der Input gerade auf "BD" steht.

Code: Alles auswählen

var Timer tAutoInput = null  // globale Variablen immer zu Beginn der Datei definieren

rule "Denon Autoinput bei Einschalten"
when 
    Thing "denonmarantz:avr:0005cd3a0e8e" changed
then
    if(DenonInputAuto_to_IRP.state != ON) {
        logInfo("autoinput","Regel getriggert, aber deaktiviert.")
        return;
    }
    if(DenonAVRX2000_MainZone_InputSource.state.toString == "BD") {
        logInfo("autoinput","Regel getriggert, InputSource Blu-Ray, Abbruch.")
        return;
    }
    var status = getThingStatusInfo("denonmarantz:avr:0005cd3a0e8e").getStatus()
    if(status.toString() != 'ONLINE') {
        logInfo("autoinput","Regel getriggert, Gerät nicht ONLINE.")
        return;
    }
    if (now.getDayOfWeek < 6) {
        logInfo("autoinput","Regel getriggert, kein Wochenende.")
        return;
    }
    logInfo("autoinput","Regel getriggert, bereite Umschaltung vor.")
    tAutoInput?.cancel
    tAutoInput = createTimer(now.plusSeconds(15), [|
        var String strInput = "SAT/CBL"
        if (now.getHourOfDay > 6 && now.getHourOfDay < 13)
            strInput = "IRP"
        logInfo("autoinput","Timer abgelaufen, wähle {}.",strInput)
        DenonAVRX2000_MainZone_InputSource.sendCommand(strInput)
    ])
end