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 (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"))}