Seite 1 von 2

AV Receiver Statusabfrage Eingang

Verfasst: 14. Apr 2019 14:13
von Arno++
Hallo zusammen,
Bin gerade dabei mein AV Receiver in Openhab einzubinden. Möchte gerne den Eingang vom Receiver abfragen. Bin mit meiner Suche nicht weitergekommen.
Was funktioniert: Ist eine Regel sobald der Eingang wechselt war der Input Radio und wird auf AUX2 geschaltet.

Code: Alles auswählen

rule "Ambilight ein über Eingang Denon AV Receiver"
when
     Item  marantz_input changed to AUX2
then
     sendCommand(eg_wz_media, ON)
end
Denke ich brauche zusätzlich eine Status Abfrage vom Eingang
Hat eine/einer eine Idee?
Besten Dank

Re: AV Receiver Statusabfrage Eingang

Verfasst: 14. Apr 2019 15:24
von udo1toni
Vor allem solltest Du nicht das Pferd von hinten aufzäumen.

Immerhin ist aus dem verwendeten Itemnamen zu erraten, dass der Hersteller Deines Gerätes vermutlich Marantz ist. Dennoch bleiben ein paar Fragen offen:
Welches Binding verwendest Du?
Welche Version des Bindings?
Welche Version von openHAB?
Aber am Allerwichtigsten: Wie ist Dein Item konfiguriert (und falls es sich um ein openHAB2-Addon handelt: wie sind Channel, Thing und Bridge konfiguriert)

Eine nicht funktionierende Rule ist etwas wenig, um zu helfen...

Re: AV Receiver Statusabfrage Eingang

Verfasst: 14. Apr 2019 16:01
von Arno++
Habe Openhab2 auf einen Raspberry am laufen und das Binding „denonmarantz - 2.4.0“ installiert.

Code: Alles auswählen

Switch marantz_power    "Receiver"                  {channel="denonmarantz:avr:0005cd434558:general#power"}
Dimmer marantz_volume   "Volume"                    {channel="denonmarantz:avr:0005cd434558:mainZone#volume"}
Number marantz_volumeDB "Volume [%.1f dB]"          {channel="denonmarantz:avr:0005cd434558:mainzone#volume"}
Switch marantz_mute     "Mute"     <mute>           {channel="denonmarantz:avr:0005cd434558:mainZone#mute"}
// Switch marantz_z2power  "Zone 2"                 {channel="denonmarantz:avr:0005cd434558:zone2#power"}
String marantz_input    "Input [%s]"                {channel="denonmarantz:avr:0005cd434558:mainZone#input" }
String marantz_surround "Surround: [%s]"            {channel="denonmarantz:avr:0005cd434558:general#surroundProgram"}
String marantz_command                              {channel="denonmarantz:avr:0005cd434558:general#command"}
 
Wollte meine Regel erweitern da nur beim Wechseln auf AUX2 mein Ambilight angeschaltet wird.
Schalte ich den Receiver beim Eingang AUX2 aus und dann wieder wird mein Ambilight nicht eingeschaltet.

Re: AV Receiver Statusabfrage Eingang

Verfasst: 14. Apr 2019 18:52
von PeterA
Hallo Arno++

ggf. geht meine Frage am Thema dieses Thread vorbei aber ich habe hier auch einen DENON AVR (X2000)
Und habe diesen auch über das o.g Binding in Openhab eingebunden, was auch super Funktioniert.
Sitemap:

Code: Alles auswählen

Frame label="Denon AVR X2000" icon="receiver" {
Text label="Denon AVR X2000" icon="receiver" {
Switch item=DenonAVRX2000_MainZone_Power mappings=[ON="An", OFF="Aus"]
Switch item=DenonAVRX2000_MainZone_Mute icon="soundvolume_mute" mappings=[ON="An", OFF="Aus"] visibility [DenonAVRX2000_MainZone_Power==ON]
Setpoint item=DenonAVRX2000_MainZone_Volume icon="soundvolume" label="Volume [%.1f]" minValue=0 maxValue=40 step=0.5  visibility=[DenonAVRX2000_MainZone_Power==ON]      
Selection item=DenonAVRX2000_MainZone_InputSource mappings=["TUNER"="Tuner","Internet Radio"="Internet-Radio","MPLAY"="Chromecast","BD"="Blu-Ray","SAT/CBL"="Sat/Tv"] visibility=[DenonAVRX2000_MainZone_Power==ON]
Text item=DenonAVRX2000_General_NowPlayingArtist label="Sender:" icon="" visibility=[DenonAVRX2000_MainZone_InputSource=="Internet Radio"]
Text item=DenonAVRX2000_General_NowPlayingTrack label="Titel:" icon="" visibility=[DenonAVRX2000_MainZone_InputSource=="Internet Radio"
Text item=DenonAVRX2000_General_SurroundProgram icon="" visibility=[DenonAVRX2000_MainZone_Power==ON] // mappings=["2ch Stereo"="2ch Stereo","5ch Stereo"="5ch Stereo","Chamber"="Chamber","Sci-Fi"="Sci-Fi","Adventure"="Adventure"]
Nun habe ich aber folgendes Verhalten:
Wenn ich über die Normale IR-Remote auf Internet Radio schalte wird automatisch mein eingestellter Sender abgespielt.
Wenn ich aber über Openhab auf "Internet Radio" schalte funktioniert das nicht. Es wird zwar auf Internet Radio umgeschaltet aber
der eingestellte Sender wird nicht automatisch abgespielt...

Hier die Einträge aus dem Log:

Umschaltung per IR-Remote:

Code: Alles auswählen

2019-04-14 18:56:29.543 [vent.ItemStateChangedEvent] - DenonAVRX2000_MainZone_InputSource changed from SAT/CBL to Internet Radio
Stream wird automatisch abgespielt.

Umschaltung via Openhab zunächst auf Sat und dann wieder auf Internet Radio:

Code: Alles auswählen

2019-04-14 18:57:18.535 [ome.event.ItemCommandEvent] - Item 'DenonAVRX2000_MainZone_InputSource' received command SAT/CBL
2019-04-14 18:57:18.543 [nt.ItemStatePredictedEvent] - DenonAVRX2000_MainZone_InputSource predicted to become SAT/CBL
2019-04-14 18:57:27.279 [ome.event.ItemCommandEvent] - Item 'DenonAVRX2000_MainZone_InputSource' received command Internet Radio
2019-04-14 18:57:27.290 [nt.ItemStatePredictedEvent] - DenonAVRX2000_MainZone_InputSource predicted to become Internet Radio
Stream wird nicht automatisch abgespielt.

Wie ist das bei Dir ?

Gruß Peter

Re: AV Receiver Statusabfrage Eingang

Verfasst: 15. Apr 2019 13:00
von mamoel
Hallo Arno++, ich schätze es ist einfacher, wenn Du Dir ein DummyItem anlegst, z.B. mit dem Namen "AmbilighthON".

Dann erstellst Du eine Regel, die timergesteuert (CHRON) - sagen wir mal alle 30 Sekunden - prüft, ob die Bedingungen für das Ambilight erfüllt sind oder nicht.
So soll z.B. der Eingang auf AUX2 stehen und der Receiver sollte sicherlich auch auf Power=ON stehen um das Ambilight einschalten zu wollen. Sollte mindestens eine der Bedingungen nicht erfüllt sein, Ambilight->OFF.
So kannst Du auch relativ einfach reagieren, falls Du noch ein weiteres Gerät an das Ambilight anbinden möchtest.

Re: AV Receiver Statusabfrage Eingang

Verfasst: 15. Apr 2019 21:53
von udo1toni
Nein, das muss man nicht mit polling machen. Du musst nur Deine Rule etwas erweitern:

Code: Alles auswählen

rule "Ambilight ein über Eingang Denon AV Receiver"
when
    Item marantz_power changed to ON or
    Item marantz_input changed to AUX2
then
    if(marantz_power.state == ON && marantz_input.state.toString == "AUX2")
         eg_wz_media.sendCommand(ON)
end
Eventuell soll das Ambilight auch ausgehen, falls der Eingang gewechselt oder der Receiver ausgeschaltet wird, dann kann das ohne weiteres auch noch in die Rule mit hinein:

Code: Alles auswählen

rule "Ambilight ein über Eingang Denon AV Receiver"
when
    Item marantz_power changed or
    Item marantz_input changed
then
    if(marantz_power.state == ON && marantz_input.state.toString == "AUX2") {
        eg_wz_media.sendCommand(ON)
    } else {
        eg_wz_media.sendCommand(OFF)
    }
end
Ich habe hier die Methode statt der Action verwendet, das ist allgemein zuverlässiger.

Re: AV Receiver Statusabfrage Eingang

Verfasst: 16. Apr 2019 05:46
von mamoel
Nein, natürlich muss man das nicht mit Polling machen. Mir persönlich gefällt es allerdings besser, wenn eine Rule jeweils nur auf ein einziges Ereignis triggert. Bei meinem Ambilight kommen noch mehr Bedingungen hinzu und dann ist die Pollingvariante für mich übersichtlicher.
Ist aber natürlich eine Geschmacksfrage.

Re: AV Receiver Statusabfrage Eingang

Verfasst: 16. Apr 2019 13:00
von udo1toni
Übersichtlicher mag es sein, das Problem ist aber, dass eine Rule, die z.B. alle 30 Sekunden pollt, auch alle 30 Sekunden einen Thread braucht und Prozessorzeit beansprucht.
openHAB bietet default 5 + 2 Threads, in denen Rules laufen (zwei für Time cron). Wenn man die Trigger unbedacht wählt, wird es da ganz schnell eng.

Eine Rule kann notfalls auch hundert Trigger haben, wenn die Rule in Abhängigkeit von bestimmten Bedingungen arbeiten soll (in diesem Fall: Reveiver ist eingeschaltet und Quelle ist AUX2), muss ohnehin in der Rule beides (oder auch hundert Bedingungen) abgefragt werden, es sei denn, man erstellt zwei Rules, also für jedes Item eine, in der dann nur das andere Item abgefragt wird. Was ist nun unübersichtlicher?

Re: AV Receiver Statusabfrage Eingang

Verfasst: 16. Apr 2019 13:41
von mamoel
Ich hoffe, openHAB stellt die - mangels Threads - grerade nicht ausführbaren Aufgaben einfach hintenan und ignoriert sie nicht komplett?
Dann sehe ich da wenig Probleme.
In der Rules-DSL dürften in der Regel(!) wenig mega-aufwändige Aufgaben abgearbeitet werden, so dass eine Verzögerung um 200 ms weniger tragisch sein dürfte. Wer natürlich gerne mit Thread::sleep arbeitet, bekommt eventuell ernste Probleme.

Ich wollte die Polling-Lösung auch nicht als super-elegant oder die ultimative Lösung hinstellen. Bei mir funktioniert das super und ich habe ziemlich viele Rules, welche teilweise sogar wirklich rechnen (Stromverbrauch). Dennoch konnte ich noch keine Blockade feststellen.
Gibt es eigentlich eine Warnung im Log, wenn man ans Limit kommt?

Ein nicht zu unterschätzender Vorteil beim Polling ist auch dann gegeben, wenn man eine am Reicheweitelimit platzierte Zigbee-Steckdose für die Versorgung des Ambilights benutzt. Wenn das dämliche Ding nämlich mal wieder nicht reagiert, besteht die Chance, dass sie es beim nächsten Polling mitbekommt. :D

Meine Rule heißt irgendwie so ähnlich wie "AmbilightScheduler". Sie soll zeitgesteuert prüfen, ob die Bedingungen für eingeschaltetes Ambilight gegeben sind oder nicht. Sie prüft dabei den Zustand der aktuellen HarmonyHub-Activity (NvidiaShield, FireTV, BluRay, PowerOFF). Da aber gewisse Familienmitglieder auch mal andere Fernbedienungen benutzen :roll: wird auch noch der Denon direkt über LAN abgefragt (Denon OFF bedeutet immer auch Ambilight OFF).
Das über mehrere Rules zu verteilen gefällt mir persönlich nicht. Deshalb also lieber die Polling-Variante, da diese auch eher meiner logischen Denkweise entspricht.

Aus der Softwareentwickler-Sicht würde ich natürlich (fast) niemals Polling wählen, wenn ich ereignisorientiert arbeiten kann. Hier geht in der Regel Performance vor Lesbarkeit und ja, Polling verbraucht mehr Ressourcen.

Re: AV Receiver Statusabfrage Eingang

Verfasst: 17. Apr 2019 12:52
von udo1toni
mamoel hat geschrieben: 16. Apr 2019 13:41 Ich hoffe, openHAB stellt die - mangels Threads - grerade nicht ausführbaren Aufgaben einfach hintenan und ignoriert sie nicht komplett?
Das sollte so sein :)
Wer natürlich gerne mit Thread::sleep arbeitet, bekommt eventuell ernste Probleme.
Definitiv.

Der Punkt ist, dass dieses Thema immer wieder im englischen Forum hochkocht, speziell im Zusammenhang mit Thread::sleep()
Ich wollte die Polling-Lösung auch nicht als super-elegant oder die ultimative Lösung hinstellen. Bei mir funktioniert das super und ich habe ziemlich viele Rules, welche teilweise sogar wirklich rechnen (Stromverbrauch). Dennoch konnte ich noch keine Blockade feststellen.
Ich wollte das auch nicht in Abrede stellen, es ist halt an der Rules DSL vorbei programmiert. Was Berechnungen betrifft, habe ich selbst bei aufwändigen Berechnungen selten Laufzeiten über 100mSec gesehen - eher gibt es dann Actions, die lange Antwortzeiten haben (z.B. sendMail oder sendNotification - ich gehe davon aus, dass da auf die ok-Meldung gewartet wird (auch wenn man die nicht auswerten kann)
Gibt es eigentlich eine Warnung im Log, wenn man ans Limit kommt?
Nein.
Ein nicht zu unterschätzender Vorteil beim Polling ist auch dann gegeben, wenn man eine am Reicheweitelimit platzierte Zigbee-Steckdose für die Versorgung des Ambilights benutzt. Wenn das dämliche Ding nämlich mal wieder nicht reagiert, besteht die Chance, dass sie es beim nächsten Polling mitbekommt. :D
Das ist dann allerdings ein komplett anderes Problem. Wenn es eine vernünftige Rückmeldung gibt (so wichtig, trotzdem unterstützt das nicht jede Hardware und entsprechend auch nicht jedes Binding), wäre ein Timer auch hier die elegantere Lösung.
Der Timer wird gestartet und sofort ausgeführt. Im Timer wird der Status des Items geprüft. Falls der Status nicht stimmt, wird das Item geschaltet und der Timer erneut geplant, z.B. mit einer Sekunde. Hat das Item den richtigen Zustand, wird nur der Timer gelöscht.