NEWS
Android TV in Kombination mit KNX schalten
-
Hallo,
vorweg ich bin ziemlich neu unterwegs im IOBroker und JavaScript und habe folgendes Problem bzw. würde gerne das Verhalten verstehen.
Ich habe eine Android TV Box die ich über den ADB Adapter steuern kann. Nun möchte ich wenn ich über meinen KNX Taster die Steckdose wo der Fernseher angeschlossen ist aktiviere, die Android TV Box aus dem Standby Modus holen.
Wenn man fertig ist mit dem Fernsehen, möchte ich per Fernbedienung die Android TV Box wieder in den Standby Modus bringen und dann die Steckdose wieder abschalten.Ich hab dafür folgendes Script erstellt bzw. zusammenkopiert
var Name, Initialisation, Description, Type, Role, SmartName, Text_Alexa, Alexa_Notification, Message, timeout; var flag_switch_tv = 1; function Create_DP(Name, Initialisation, Description, Type, Role, SmartName) { createState(Name, Initialisation, { name: Description, read: true, write: true, type: Type, role: Role, smartName: SmartName }); } function SendAdbKey(keycode) { exec('adb connect 192.168.14.110:5555'); exec('adb shell input keyevent "' + keycode + '"'); } function SendAdbPower() { SendAdbKey('KEYCODE_POWER'); } function SendAdbHome() { SendAdbKey('KEYCODE_HOME'); } function CheckAdbKNXPowerState() { // Funktion überprüft den Status der Android TV Box. Wenn diese in den Standby-Modus geht, wird die Steckdose vom TV ausgeschalten exec('adb connect 192.168.14.110:5555') exec('adb shell dumpsys activity | grep -c "mWakefulness=Asleep"', function (error, stdout, stderr) { setState("0_userdata.0.Devices.AndroidTV.info.state", stdout); if (stdout == 1 && flag_switch_tv == 0) { console.log("Schalte Android TV in Standby"); setState('openknx.0.Steckdosen.Erdgeschoss.Wohnzimmer_Steckdose_TV_Schalten' /* Wohnzimmer_Steckdose_TV_Schalten */, false); flag_switch_tv = 1; } }); // Funktion überprüft den Status der Steckdose vom TV. Wenn diese eingeschalten wird, wird auch die Android TV Box gestartet on({ id: 'openknx.0.Rückmelde&Statusobjekte.Erdgeschoss.Wohnzimmer_Steckdose_TV_Status' /* Wohnzimmer_Steckdose_TV_Status */, change: 'any' }, (obj) => { if (obj.oldState.val == false && obj.state.val == true && flag_switch_tv == 1) { exec('adb connect 192.168.14.110:5555'); exec('adb shell input keyevent "' + 'KEYCODE_POWER' + '"'); console.log("Schalte Android TV ein!!!"); flag_switch_tv = 0; } }); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// Create_DP('0_userdata.0.Devices.AndroidTV.info.state', '', 'Power State', 'string', 'state',''); Create_DP('0_userdata.0.Devices.AndroidTV.power.switch', false, 'Power Switch', 'boolean', 'switch','Anroid TV'); schedule("*/5 * * * * *", function () { CheckAdbKNXPowerState(); }); on({id: '0_userdata.0.Devices.AndroidTV.power.switch'}, function (obj) { SendAdbPower(); });
Prinzipiell funktioniert es, jedoch hab ich ab und zu den Effekt wenn ich die Steckdose einschalte, dann wird sie sofort wieder ausgeschalten. Das ganze Spiel geht oft nur einmal so, ab und zu aber auch drei bis viermal. Danach läuft es wie gewünscht. Das Problem tritt auch nur beim Einschalten auf, sprich das Ausschalten funktioniert immer.
Was ist hier das Problem bzw. was verstehe ich noch nicht
Ich hoffe ihr könnt mir weiterhelfen.lg
-
@feivelzz
Der Trigger (Zeilen 47 bis 56) darf nicht innerhalb der Funktion ausgeführt werden, da so alle 5 s ein neuer Trigger erzeugt wird. -
Danke für die schnelle Antwort.
Kann ich mir das dann so vorstellen das der Trigger dann wirklich nur ausgelöst wird, wenn sich der Status der Steckdose ändert? Es kann aber dennoch passieren, wenn ich einschalte, dass er gleich wieder ausschaltet, weil der Status von der Box noch nicht geändert ist? Dann müsste man doch eigentlich noch ein bisschen nach dem Einschalten warten, bis man das "Freigabe-Flag" (flag_switch_tv) setzt um den entgegenzuwirken oder?