Tasten virtueller Fernbedienung mit readingsproxy

Begonnen von TomLee, 16 April 2017, 14:02:22

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

mit Alexa die nötigsten Funktionen meines TV (LG) zu steuern stand schon einige Zeit auf meiner Wunschliste, sehr kostengünstig umgesetzt hab ich das jetzt nach Reinhart's Anleitung hier:

https://forum.fhem.de/index.php/topic,67316.0.html

Wie bereits in dem Thread erwähnt nutze ich das readingsproxy Modul um die einzelnen Tasten der in Fhem erstellten virtuellen Fernbedienung (remotecontrol Modul) als eigenständiges Device darzustellen um diese dann über Sprache zu steuern.
Was bspw. so aussieht:

Internals:
   CHANGED
   DEF        LG_TV_Wohnzimmer:state
   DEVICE     LG_TV_Wohnzimmer
   NAME       rp_LG_TV_RTL
   NOTIFYDEV  LG_TV_Wohnzimmer,global
   NR         395
   NTFY_ORDER 50-rp_LG_TV_RTL
   READING    state
   STATE      off
   TYPE       readingsProxy
   Content:
     LG_TV_Wohnzimmer 1
   Readings:
     2017-04-15 21:27:36   lastCmd         on
     2017-04-16 12:23:49   state           off
Attributes:
   alexaName  er t l
   devStateIcon on:control_on_off@green off:control_standby
   event-on-change-reading .*
   genericDeviceType switch
   room       Alexacontrol,TV Fernbedienungen
   setFn      { return 'KEY_3' if( $CMD eq 'on' );; return 'off';; }
   setList    on off
   valueFn    { return 'on' if( $VALUE eq 'KEY_3' );; return 'off';; }


Zweistellige Kanäle hab ich erstmal mit einem DUMMY und DOIF gelöst

DUMMY:

Internals:
   CFGFN
   NAME       du_szene_DMAX
   NR         18543
   STATE      off
   TYPE       dummy
   Readings:
     2017-04-16 13:03:27   state           off
Attributes:
   alexaName  d. max
   genericDeviceType switch
   room       Alexacontrol,Dummy,TV Fernbedienungen
   setList    on off


DOIF:

Internals:
   CFGFN
   DEF        (["du_szene_DMAX:on"])(set LG_TV_Wohnzimmer KEY_1;set LG_TV_Wohnzimmer KEY_0;set du_szene_DMAX off)
   NAME       doif_du_szene_DMAX
   NR         18727
   NTFY_ORDER 50-doif_du_szene_DMAX
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-04-16 13:03:27   Device          du_szene_DMAX
     2017-04-16 13:03:27   cmd             1
     2017-04-16 13:03:27   cmd_event       du_szene_DMAX
     2017-04-16 13:03:27   cmd_nr          1
     2017-04-16 13:03:27   error           set LG_TV_Wohnzimmer KEY_1;set LG_TV_Wohnzimmer KEY_0;set du_szene_DMAX off: KEY_1
KEY_0
     2017-04-16 13:03:27   matched_event_c1_1 on
     2017-04-16 13:03:27   state           cmd_1
   Condition:
     0          EventDoIf('du_szene_DMAX',$hash,'on',0)
   Devices:
   Do:
     0:
       0          set LG_TV_Wohnzimmer KEY_1;set LG_TV_Wohnzimmer KEY_0;set du_szene_DMAX off
     1:
   Helper:
     event      on
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   du_szene_DMAX
     timerevent on
     triggerDev du_szene_DMAX
     timerevents:
       on
       off
     timereventsState:
       state: on
     triggerEvents:
       on
       off
     triggerEventsState:
       state: on
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          du_szene_DMAX:on
     All:
       0          du_szene_DMAX:on
   State:
   Trigger:
Attributes:
   do         always
   wait       0,1


Hier komm ich dann auch zu meiner Frage, es funktioniert alles, auch das DOIF, trotzallem kommt es zu dem error in den Readings des DOIF ? Da komm ich nicht weiter.

Im IR Thread hatte ich schon gefragt

Zitat von: TomLee am 27 März 2017, 22:56:05
Es funktioniert alles, doch wie gesagt ein

set LG_TV_Wohnzimmer state KEY_POWER

oder anderer Befehl ( KEY_1,KEY_2,KEY_3 ...) aus der Befehlszeile, notify oder doif nicht.

Getauscht hatte ich nichts mehr nachdem ich mit dem IRrecvDumpV2 feststellte das NEC verwendet wird.

edit:
Ein

set LG_TV_Wohnzimmer KEY_POWER

ist die Lösung. Warum auch immer.


Könnte mir vorstellen das es damit was zu tun hat. Wie gesagt funktioniert ja aber alles.

Weiter wollt ich fragen ob nicht auch die Möglichkeit besteht auf das DOIF zu verzichten und die zwei set Kommandos direkt im readingsproxy abzusetzen.

So was in der Art stell ich mir da vor:

attr rp_LG_TV_DMAX setFn {fhem("set LG_TV_Wohnzimmer KEY_1". ($CMD eq 'on' ?"on":"off"; set LG_TV_Wohnzimmer KEY_0". ($CMD eq 'on' ?"on":"off"))}