[Gelöst]Schalten von verschiedenen Stellen

Begonnen von OliWee, 13 Dezember 2016, 20:06:08

Vorheriges Thema - Nächstes Thema

OliWee

Hi!

Ich hab folgende Konstellation:


Internals:
   NAME       EG.Wohnzimmer.Radio
   NR         84
   STATE      on
   TYPE       dummy
   Readings:
     2016-12-13 19:54:36   state           on
Attributes:
   alias      Radio im Wohnzimmer
   devStateIcon on:audio_sound@green off:audio_sound@white
   room       Alexa,EG.Wohnzimmer
   setList    on off



Internals:
   DEF        ([EG.Wohnzimmer.Radio] eq "on")(set EG.Wohnzimmer.Receiver on)(set EG.Wohnzimmer.Receiver volume 25)(set EG.Wohnzimmer.Receiver input fm)
DOELSEIF ([EG.Wohnzimmer.Radio] eq "off")(set EG.Wohnzimmer.Receiver off)
   NAME       EG.Wohnzimmer.Radio.Set
   NR         85
   NTFY_ORDER 50-EG.Wohnzimmer.Radio.Set
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-12-13 19:54:36   Device          EG.Wohnzimmer.Radio
     2016-12-13 19:54:40   cmd             1.3
     2016-12-13 19:54:40   cmd_event       EG.Wohnzimmer.Radio
     2016-12-13 19:54:40   cmd_nr          1
     2016-12-13 19:54:40   cmd_seqnr       3
     2016-12-13 19:54:36   e_EG.Wohnzimmer.Radio_STATE on
     2016-12-13 19:54:40   state           cmd_1
     2016-12-13 19:54:40   wait_timer      no timer
   Condition:
     0          InternalDoIf($hash,'EG.Wohnzimmer.Radio','STATE') eq "on"
     1          InternalDoIf($hash,'EG.Wohnzimmer.Radio','STATE') eq "off"
   Devices:
     0           EG.Wohnzimmer.Radio
     1           EG.Wohnzimmer.Radio
     all         EG.Wohnzimmer.Radio
   Do:
     0:
       0          set EG.Wohnzimmer.Receiver on
       1          set EG.Wohnzimmer.Receiver volume 25
       2          set EG.Wohnzimmer.Receiver input fm
     1:
       0          set EG.Wohnzimmer.Receiver off
   Helper:
     event      on
     globalinit 1
     last_timer 0
     sleepdevice EG.Wohnzimmer.Radio
     sleepsubtimer -1
     sleeptimer -1
     timerdev   EG.Wohnzimmer.Radio
     timerevent on
     triggerDev EG.Wohnzimmer.Radio
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   Internals:
     0           EG.Wohnzimmer.Radio:STATE
     1           EG.Wohnzimmer.Radio:STATE
     all         EG.Wohnzimmer.Radio:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     All:
   State:
   Trigger:
Attributes:
   do         always
   room       EG.Wohnzimmer
   wait       0,2,2:0


EG.Wohnzimmer.Receiver ist ein Onkyo-Receiver (Modul ONKYO_AVR), das passt auch alles soweit.

Wenn ich über den Dummy EG.Wohnzimmer.Radio den Receiver einschalte, funktioniert das auch alles wunderbar. Mein Problem ist aber:
Wie bekommen sowohl Dummy und DOIF mit, wenn ich den Receiver direkt am Gerät anschalte? Ich hab schon probiert, mit einem zweiten DOIF auf den Statuswechsel des Receivers direkt zu reagieren und dort drin dann mit setstate sowohl Dummy als auch DOIF zu setzen. Aber bei dem DOIF hat das irgendwie nicht funktioniert...
Kann mir jemand noch nen Tipp geben?

Gruß
Oli

kumue

Ich kenne den receiver nicht, wie ich aber der commandref zu ONKYO_AVR entnehme, hat das Teil ein LAN Interface.
Über das Presence-Modul könntest du doch auswerten (incl. manuellem aus/ein) , ob er läuft oder nicht und das Ergebnis (present oder absent) in Dummy/DOIF einfließen lassen...

OliWee

Der Receiver ist, wie ich geschrieben habe, bereits über das ONKYO_AVR-Modul integriert und lässt sich auch wunderbar über FHEM bedienen.

Vielleicht muss ich mein Problem etwas detailierter beschreiben...

Der Dummy wird über diverse Quellen (TelegramBot, Alexa, at) gesetzt und schaltet wie gewünscht den Receiver ein,setzt die Lautstärke und die Quelle. Soweit so gut. Auch das Ausschalten über den Dummy funktionert.
Aber wenn ich den Receiver jetzt direkt am Gerät (oder auch direkt das Receiver-Objekt in FHEM) einschalte, dann wird zum Einen der Status des Dummy falsch dargestellt, zum anderen ist der DOIF im falschen Zustand und dadurch lässt sich der Receiver auch nur noch direkt am Gerät und nicht mehr über den Dummy ausschalten. Dasselbe umgekehrt: Wird der Receiver direkt ausgeschaltet, funktioniert das Einschalten über den Dummy nicht mehr...

OliWee

Ich bin ein Stück weiter...

Mein DoIf sieht jetzt so aus:
([EG.Wohnzimmer.Radio] eq "on")(set ReceiverDummy on)(setreading ReceiverDummy volume 25)(setreading ReceiverDummy input fm)
DOELSEIF ([EG.Wohnzimmer.Radio] eq "off")(set ReceiverDummy off)
DOELSEIF ([ReceiverDummy] eq "off")(set EG.Wohnzimmer.Radio off)
DOELSEIF ([ReceiverDummy] eq "on")(set EG.Wohnzimmer.Radio on)


Hab den Receiver provisorisch durch nen Dummy ersetzt, damit mein Sohn in Ruhe Fernsehen kann...  ;D

Wenn jetzt aber der Receiver direkt eingeschaltet wird, dann steht der Doif ja in cmd_4, was dazu führt, dass per Dummy trotzdem eingeschaltet werden kann und dann wieder Lautstärke und Quelle gesetzt werden. Das gilt es jetzt noch zu vermeiden....

OliWee

Hach, ich liebe DOIF!  :D

So funktionierts...

([EG.Wohnzimmer.Radio] eq "on" and [?ReceiverDummy] eq "off")(set ReceiverDummy on)(setreading ReceiverDummy volume 25)(setreading ReceiverDummy input fm)
DOELSEIF ([EG.Wohnzimmer.Radio] eq "off")(set ReceiverDummy off)
DOELSEIF ([ReceiverDummy] eq "off")(set EG.Wohnzimmer.Radio off)
DOELSEIF ([ReceiverDummy] eq "on")(set EG.Wohnzimmer.Radio on)


Man sollte doch öfters (Fast-)Monologe führen...
Vielleicht hilfts ja dem einen oder anderen...  :)

Gruß
Oli