Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. [Tester gesucht] Wake on Lan (WOL) für Philips TV

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Tester gesucht] Wake on Lan (WOL) für Philips TV

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      freak1051 last edited by freak1051

      Aktuelle Test Version iobroker.philips-tv-script (fork)
      Veröffentlichungsdatum 12.2019
      Github Link https://github.com/Mic-M/iobroker.philips-tv-script ( Orgnialscript)

      Hallo Zusammen,

      ich habe mich etwas mit dem Phillips-TV-Adapter, bzw. besser gesagt mit dem Script von @Mic auseinander gesetzt. Das Originalscript ist oben im Link zu finden.

      Ich habe mich etwas im bereich der TV-Anschaltung mittel WOL (Wake on Lan ) versucht. Ich versuche Schritt für Schritt, nachvollziehbar, zu erläutern, wie der Versuchsaufbau ist:

      1. Vorbereitungen (PC):

      Zu erst ist es ratsam ein "Packet-Sniffer" auf seinem PC zu installieren, damit man Kontrollieren kann, ob ioBroker überhaupt die sogenannten magic packets versendet.

      Hier empfehle ich Wireshark. Ist das Tool installiert kann man es gerne mal ausführen. Hier bitte die richtige Netzwerkschnittstelle Auswählen. (Sitzt man am Laptop und ist mit Wlan Verbunden sieht man natürlich auf der Lan-Schnittstelle kein Datenverkehr).

      Danach sollte das Bild etwas so Aussehen:
      1.png

      Wie in dem Grünen Feld zu sehen ist, einfach mal Wol eigeben und "Entern". Dann ist der Filer so eingestellt, dass Wireshark nur nach Wake On Lan-Paketen sucht, bzw sie anzeigt.

      ZUSATZINFO: Der TV benamst das Wecken über Wlan WAKE ON WLAN. Wake on Lan und Wake on Wlan ist das gleiche, da beide Protokolle und Funktionen auf dem Ethernet-Standard basieren. Nur das Übertragungsmedium ändert sich. Kurz gesagt Wake on Lan und Wake on WLan ist identisch!

      ============================================================================================

      1. Vorbereitungen TV:

      Am TV muss man die Funktion Wake on Wlan Aktivieren. Hier zu in den Netzwerkeinstellung die Funktion aktivieren. Damit man auch über Wlan wecken kann, muss man sein TV natürlich auch ins Wlan lassen. Also TV mit dem Wlan Verbinden (SSID + Passwort).
      Der TV wird erstmals nur den Wlan-Adapter nutzen, was für Straming nicht optimal ist, aber nach einem Standby - Ein - Übergang merkt er dass die Lan-Schnittstelle die bessere Wahl ist.

      In den Netzwerk-Einstellungen der TV´s gibt es noch eine Übersichtsseite. Hier bitte die IP-Adressen BEIDER Adapter und Mac-Adressen des Wlan-Adapters notieren. Wer sein Netzwerk kennt, kann dies auch mit der Firtzbox oder Tools wie "Advanced IP Scanner" machen. Wichtig ist die Wlan-MAC, da Magic-Packet´s MAC-Basierend sind.

      ==================================================================================================

      1. Scripte

      Falls das ihr noch keinen Benutzernamen/Passwort vom TV zugewisen bekommen habt, bitte nach dieser Anleitung vorgehen.

      Falls ihr das "Standart-Script" von Mic in Benutzung habt, dieses bitte vorläufig deaktivieren.

      Nun das Modifizierte Script einfügen:

      /*******************************************************************************
      * ---------------------------
      * Philips TV Script for ioBroker
      * ---------------------------
      *
      * Da der Philips-TV-Adapter noch nicht wie gewünscht funktioniert, habe ich dieses
      * Script geschrieben, um Philips-TVs zu steuern.
      *
      * ----------------------------------------------------
      * Aktuelle Version:    https://github.com/Mic-M/iobroker.philips-tv-script
      * Support:             https://forum.iobroker.net/topic/8791/aufruf-philips-tv-v0-1-0-testen
      * ----------------------------------------------------
      * Resources:
      *  - ioBroker Philips TV Adapter: https://forum.iobroker.net/topic/8791/aufruf-philips-tv-v0-1-0-testen
      *  - Many thanks to Evgeny Slavnov for the unofficial Philips TV API Reference: https://github.com/eslavnov/pylips/wiki
      *  - Python Script with MQTT support: https://github.com/eslavnov/pylips
      *  - Some info: https://community.openhab.org/t/philips-tv-2016-binding/64579/61
      * ----------------------------------------------------
      * Change Log:
      *  0.6  Mic-M * Added Commands Ambilight Hue On/Off - thanks to BeautyBoyBob
      *  0.5  Mic-M * Initial release on Github
      *******************************************************************************/
      
      
      /*******************************************************************************
      * Settings
      *******************************************************************************/
      // Pfad, unter dem die Objekte angelegt werden.
      const STATE_PATH = 'javascript.0.PhilipsTV-Script.';
      
      // Generate User/Password: see https://github.com/nstrelow/ha_philips_2016
      const PHILIPS_USER = 'USERNANE';
      const PHILIPS_PASS = 'PASSWORD';
      
      // URL, change IP address accordingly (and you may also need to change port, see for example https://github.com/eslavnov/pylips)
      const PHILIPS_URL = 'https://IP_LAN:1926/6/';
      
      // Logging
      const LOG_INFO = true;
      const LOG_DEBUG = true;
      
      /**
      * Falls Philips-TV für mehrere Minuten im Standby ist, ist dieser nicht mehr per PHILIPS_URL erreichbar.
      * Dann lässt dieser sich nicht per Script einschalten. Daher verwenden wir ein separates Gerät,
      * um den TV einzuschalten. Bei mir: Logitech Harmony
      */
      // Auf false setzen, wenn man kein Gerät hat, um den Philips zu schalten. Dann werden die weiteren 2 Settings nicht weiter beachtet.
      const CONTROL_DEVICE_USE = true;
      // State zum Gerät, das den TV ein/aus schaltet
      const CONTROL_DEVICE_STATE = "javascript.0.PhilipsTV-Script.WakeOnLan";
      // Was in den Datenpunkt zum einschalten gesetzt werden muss. Bei Harmony ist dies ein Toggle, es wird 1 erwartet.
      const CONTROL_DEVICE_CMD_ON = 1;
      
      
      /*******************************************************************************
      * Expert Settings
      *******************************************************************************/
      
      // Hier definieren wir die einzelnen Post Commands. 
      let pCommands = [];
      //        0.Command Name                       1.Path              2. curl Command      
      pCommands['Cmd: Ambilight Hue On'] = ['menuitems/settings/update',   '{"values":[{"value":{"Nodeid":2131230774,"Controllable":"true","Available":"true","data":{"value":"true"}}}]}'];  
      pCommands['Cmd: Ambilight Hue Off'] = ['menuitems/settings/update',   '{"values":[{"value":{"Nodeid":2131230774,"Controllable":"true","Available":"true","data":{"value":"false"}}}]}'];  
      pCommands['Cmd: Ambilight Off']             = ['ambilight/power',   '{"power":"Off"}'];
      pCommands['Cmd: Ambilight On']              = ['ambilight/power',   '{"power":"On"}'];
      pCommands['Cmd: Ambilight On Video Standard'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"STANDARD"}'];
      pCommands['Cmd: Ambilight On Video Immersive'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"IMMERSIVE"}'];
      pCommands['Cmd: Ambilight On Video Natural'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"NATURAL"}'];
      pCommands['Cmd: Ambilight On Video Vivid'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"VIVID"}'];
      pCommands['Cmd: Ambilight On Video Game'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"GAME"}'];
      pCommands['Cmd: Ambilight On Video Comfort'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"COMFORT"}'];
      pCommands['Cmd: Ambilight On Video Relax'] = ['ambilight/currentconfiguration',   '{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"RELAX"}'];
      pCommands['Launch: Amazon Prime Video'] = ['activities/launch',   '{"id":"com.amazon.amazonvideo.livingroom","order":0,"intent":{"action":"Intent{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.amazon.amazonvideo.livingroom }","component":{"packageName":"com.amazon.amazonvideo.livingroom","className":"com.amazon.ignition.IgnitionActivity"}},"label":"Prime Video"}'];
      pCommands['Launch: Kodi'] = ['activities/launch',   '{"id":"org.xbmc.kodi","order":0,"intent":{"action":"Intent{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=org.xbmc.kodi }","component":{"packageName":"org.xbmc.kodi","className":"org.xbmc.kodi.Splash"}},"label":"Kodi"}'];
      pCommands['Launch: Netflix'] = ['activities/launch',   '{"id":"com.netflix.ninja","order":0,"intent":{"action":"Intent{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.netflix.ninja }","component":{"packageName":"com.netflix.ninja","className":"com.netflix.ninja.MainActivity"}},"label":"Netflix"}'];
      pCommands['Launch: YouTube'] = ['activities/launch',   '{"id":"com.google.android.apps.youtube.tv.activity.ShellActivity-com.google.android.youtube.tv","order":0,"intent":{"action":"Intent{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.google.android.youtube.tv cmp=com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.ShellActivity }","component":{"packageName":"com.google.android.youtube.tv","className":"com.google.android.apps.youtube.tv.activity.ShellActivity"}},"label":"YouTube"}'];
      pCommands['Key: Adjust']  = ['input/key',   '{"key":"Adjust"}'];
      pCommands['Key: AmbilightOnOff']  = ['input/key',   '{"key":"AmbilightOnOff"}'];
      pCommands['Key: Back']  = ['input/key',   '{"key":"Back"}'];
      pCommands['Key: BlueColour']  = ['input/key',   '{"key":"BlueColour"}'];
      pCommands['Key: ChannelStepDown']  = ['input/key',   '{"key":"ChannelStepDown"}'];
      pCommands['Key: ChannelStepUp']  = ['input/key',   '{"key":"ChannelStepUp"}'];
      pCommands['Key: Confirm']  = ['input/key',   '{"key":"Confirm"}'];
      pCommands['Key: CursorDown']  = ['input/key',   '{"key":"CursorDown"}'];
      pCommands['Key: CursorLeft']  = ['input/key',   '{"key":"CursorLeft"}'];
      pCommands['Key: CursorRight']  = ['input/key',   '{"key":"CursorRight"}'];
      pCommands['Key: CursorUp']  = ['input/key',   '{"key":"CursorUp"}'];
      pCommands['Key: Digit0']  = ['input/key',   '{"key":"Digit0"}'];
      pCommands['Key: Digit1']  = ['input/key',   '{"key":"Digit1"}'];
      pCommands['Key: Digit2']  = ['input/key',   '{"key":"Digit2"}'];
      pCommands['Key: Digit3']  = ['input/key',   '{"key":"Digit3"}'];
      pCommands['Key: Digit4']  = ['input/key',   '{"key":"Digit4"}'];
      pCommands['Key: Digit5']  = ['input/key',   '{"key":"Digit5"}'];
      pCommands['Key: Digit6']  = ['input/key',   '{"key":"Digit6"}'];
      pCommands['Key: Digit7']  = ['input/key',   '{"key":"Digit7"}'];
      pCommands['Key: Digit8']  = ['input/key',   '{"key":"Digit8"}'];
      pCommands['Key: Digit9']  = ['input/key',   '{"key":"Digit9"}'];
      pCommands['Key: Dot']  = ['input/key',   '{"key":"Dot"}'];
      pCommands['Key: FastForward']  = ['input/key',   '{"key":"FastForward"}'];
      pCommands['Key: Find']  = ['input/key',   '{"key":"Find"}'];
      pCommands['Key: GreenColour']  = ['input/key',   '{"key":"GreenColour"}'];
      pCommands['Key: Home']  = ['input/key',   '{"key":"Home"}'];
      pCommands['Key: Info']  = ['input/key',   '{"key":"Info"}'];
      pCommands['Key: Mute']  = ['input/key',   '{"key":"Mute"}'];
      pCommands['Key: Next']  = ['input/key',   '{"key":"Next"}'];
      pCommands['Key: Online']  = ['input/key',   '{"key":"Online"}'];
      pCommands['Key: Options']  = ['input/key',   '{"key":"Options"}'];
      pCommands['Key: Pause']  = ['input/key',   '{"key":"Pause"}'];
      pCommands['Key: Play']  = ['input/key',   '{"key":"Play"}'];
      pCommands['Key: PlayPause']  = ['input/key',   '{"key":"PlayPause"}'];
      pCommands['Key: Previous']  = ['input/key',   '{"key":"Previous"}'];
      pCommands['Key: Record']  = ['input/key',   '{"key":"Record"}'];
      pCommands['Key: RedColour']  = ['input/key',   '{"key":"RedColour"}'];
      pCommands['Key: Rewind']  = ['input/key',   '{"key":"Rewind"}'];
      pCommands['Key: Source']  = ['input/key',   '{"key":"Source"}'];
      pCommands['Key: Standby']  = ['input/key',   '{"key":"Standby"}'];
      pCommands['Key: Stop']  = ['input/key',   '{"key":"Stop"}'];
      pCommands['Key: Subtitle']  = ['input/key',   '{"key":"Subtitle"}'];
      pCommands['Key: Teletext']  = ['input/key',   '{"key":"Teletext"}'];
      pCommands['Key: Viewmode']  = ['input/key',   '{"key":"Viewmode"}'];
      pCommands['Key: VolumeDown']  = ['input/key',   '{"key":"VolumeDown"}'];
      pCommands['Key: VolumeUp']  = ['input/key',   '{"key":"VolumeUp"}'];
      pCommands['Key: WatchTV']  = ['input/key',   '{"key":"WatchTV"}'];
      pCommands['Key: YellowColour']  = ['input/key',   '{"key":"YellowColour"}'];
      
      
      
      /***************************************************************************************************************
      ******************************* Ab hier nichts mehr ändern / Stop editing here! *******************************
      ***************************************************************************************************************/
      
      
      /*******************************************************************************
      * Initial Function
      *******************************************************************************/
      init();
      function init() {
         
         // 1. Create states
         createScriptStates();
      
         // 2. Subscriptions
         setTimeout(subscribeStates, 2000);
      
      }
      
      /**
      * Subscribe to States.
      */
      function subscribeStates() {
         // Command pull-down menu state
         on({id: STATE_PATH + 'Command', change:'any'}, function (obj) {
             doPostCommand(obj.state.val);
         });
      
         // TV on/off buttons
         on({id: STATE_PATH + 'TvOn', val:true}, function (obj) {
            powerPhilipsTv(true);
         });  
         on({id: STATE_PATH + 'TvOff', val:true}, function (obj) {
            powerPhilipsTv(false);
         });  
      
      }
      
      
      
      /**
      * Setzt den entsprechenden Befehl ab.
      * @param {string} id   Command Name von pCommands
      */
      function doPostCommand(id) {
         if (id in pCommands) { // Check if Key exists and typed correctly - https://stackoverflow.com/questions/1098040/checking-if-a-key-exists-in-a-javascript-object
             var exec = require('child_process').exec;
             let postArgs = "-X POST --digest --insecure -u " + PHILIPS_USER + ":" + PHILIPS_PASS + " -d '" + pCommands[id][1] + "' " + PHILIPS_URL + pCommands[id][0];
             exec('curl ' + postArgs, function (error, stdout, stderr) {
                 if (LOG_DEBUG) log('stdout: ' + stdout);
                 if (LOG_DEBUG) log('stderr: ' + stderr);
                 if (error !== null) {
                     log('exec error: ' + error);
                 }
             });
         } else if(id == '') {
             // do nothing, will be empty if script is initally started or user did not select value
         } else {
             log('Wrong command provided to Philips TV: [' + id + ']', 'warn');
         }
      }
      
      /**
      *  Philips TV ein- und ausschalten.
      *  @param {boolean}  pwrState   true zum Einschalten, false zum Ausschalten.
      */
      function powerPhilipsTv(pwrState) {
         // We need to get the GET command to get the TV's powerstate
         let exec = require('child_process').exec;
         let args = "-X GET --digest --insecure -u " + PHILIPS_USER + ":" + PHILIPS_PASS + " " + PHILIPS_URL + "powerstate";
         exec('curl ' + args, function (error, stdout, stderr) {
             if (error) {
      
                 // TV is not reachable.
                 
                 if (LOG_DEBUG) log('stderr: ' + stderr, 'warn');
      
                 if(pwrState) {
                     //TV shall be turned on.
      
                     // Since it is not reachable, we assume it is off.
                     // Therefore we turn it on through external device
                     if (CONTROL_DEVICE_USE) {
                         setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                         //setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                         //setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                         if (LOG_INFO) log('Execute turning TV on: TV is in deep sleep, turning it on now...')
                     } else {
                         if (LOG_INFO) log('Execute turning TV on: TV is off and in deep sleep, no chance to turn it on.', 'warn');
                     }
      
                 } else {
                     // TV shall be turned off.
                     // Since it is not reachable, we assume it is off already.
                     // So we do nothing
                     if (LOG_INFO) log('Execute turning TV off: TV is already turned off and in deep sleep.')
                 }
      
             } else {
      
                 // TV is reachable.
                 
                 // What is the TV's status?
                 let powerStateStr = stdout;
                 powerStateStr = powerStateStr.replace(/powerstate/gi, ''); // remove term 'powerstate'
                 powerStateStr = powerStateStr.replace(/([^a-z]+)/gi, ''); // just keep a-z
                 if (LOG_INFO) log('We have connection to the TV. Power State: ' + powerStateStr);
      
                 if(pwrState) {
                     //TV shall be turned on.
                     if ( powerStateStr === 'Standby') {
                         // TV is in Standby, so let's turn it on
                         if (CONTROL_DEVICE_USE) {
                             // Although TV is reachable, we use the external device, as it might be that it is no longer
                             // reachable in the meantime, as POST command can take a few (m)seconds
                             setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                             //setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                             //setState(CONTROL_DEVICE_STATE, CONTROL_DEVICE_CMD_ON);
                         } else {
                             doPostCommand('Key: Home');
                         }
                         if (LOG_INFO) log('Execute turning TV on: turning it on now...')
                     } else {
                         // Nothing, since TV is not in Standby.
                         if (LOG_INFO) log('Execute turning TV on: TV is already turned on, so no action.')
                     }
      
                 } else {
                     // TV shall be turned off.
                     if ( powerStateStr === 'Standby') {
                         // TV is in Standby, so we do nothing else.
                         if (LOG_INFO) log('Execute turning TV off: TV is already in Standby, so no action.')
                     } else {
                         // TV is not in Standby, so turn off.
                         doPostCommand('Key: Standby');
                         if (LOG_INFO) log('Execute turning TV off: turning it off now...')
                     }                
                 }
             }
         });
      }
      
      
      function createScriptStates() {
      
         /**
          *  Command state Drop-down 
          */
         // create drop-down list
         let dropdown = '';
         for (let lpEntry of Object.keys(pCommands)) {   // 'special' loop here to get the keys
             dropdown += '"' + lpEntry + '":"' + lpEntry + '",'; // fill JSON string
         }
         dropdown = dropdown.substr(0, dropdown.length-1); // remove last comma ","
         dropdown = '{' + dropdown + '}'; // finalize JSON string
         let dropdownJSON = JSON.parse(dropdown); // convert to JSON
      
         // Create state. Force is set to true, so we will always update the states if e.g. configuration in this script changed.
         createState(STATE_PATH + 'Command', '', true, {'name':'Send Command to Philips TV', 'type':'string', 'read':false, 'write':true, 'role':'value', 'states': dropdownJSON});
      
         /**
          *  TV on/off states
          */
         createState(STATE_PATH + 'TvOn',  {'name':'Turn TV On',  'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':false });
         createState(STATE_PATH + 'TvOff', {'name':'Turn TV Off', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':false });
      
      }
      

      Folgende Änderungen wurden Druchgeführt:

      Zeile 50: Austausch von Harmony-Switch gegen WOL-Switch ( WOL-Switch wird in anderem Script automatisch generiert)

      Zeile 211-213: Hier wurde Ursprünglich der Harmony-Switch abgesetzt. Nun ist es der WOL-Switch. Ich habe den Aufruf des Switches mehrfach drin, da es hier auch etwas auf die Netzwerkgröße, Traffic und Topologie ankommt.

      Zeile 243 - 245: Selbiges wie Zeile 211 ff. Je nach netzwerkgröße die "//" entfernen.

      Das nachfolgende Script gibt Standardmäßig 3 Magic-Pakets aus. In meinem Netzwerk hat dies Ausgereicht. Wenn ihr ein kommentar ("//") Wegmacht, werden somit 2 x 3 = 6 Pakete Versendet. Hier einfach etwas Testen. In meinem Fall liegt überall Cat 7e, Gigabit-Ethernet, und direkt neben dem TV ist ein Access Point.

      Das nächste Script ist das eigentliche Wake on Lan Skript:

      createState("javascript.0.PhilipsTV-Script.WakeOnLan",  {'name':'WakeOnWlan',  'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':false });
      var wol = require('wake_on_lan');                   // Lädt von ioBroker die das nötige Paket
      var myPC1 = "MAC_WLAN_ADAPTER";                    // MAC definieren
      
      // Ab hier automatisch
      
      
      on({id: "javascript.0.PhilipsTV-Script.WakeOnLan", change: 'any'}, function (obj) 
         {
             wol.wake(myPC1);
             log("Script WOL - TV1 aufgeweckt", "info");
         }
      
      );
      

      Hier muss evtl. Das nötige Paket händisch im JavaScript Adapter eingefügt werden. War zumindest bei mir so.

      Wenn das Script eingefügt ist und gestartet kann man händisch schon mal den Switch aktivieren und im Wireshark mal schauen, ob denn WOL-Pakete durchs Netzwerk rauschen. Hierbei nicht Wundern. Die pakete werden Als Broadcast an die IP/Subnet 255.255.255.255 gesendet. Das ist alles normal. Wer sich hierfür Interessiert, einfach mal bisschen Nach Netzwerktechnik, Broadcastadresse/Netzaaddresse googlen.

      Damit ich das Ganze per Alexa Ansprechen kann, habe ich noch ein Blockly dazu gebastelt:

      <block xmlns="http://www.w3.org/1999/xhtml" type="on" id="#CQ,fBN.Dq}!3LrY9wiG" x="-387.27999999999986" y="-537.272">
       <field name="OID">SmartHomeSonder.0.Tv.On</field>
       <field name="CONDITION">any</field>
       <field name="ACK_CONDITION"></field>
       <statement name="STATEMENT">
         <block type="controls_if" id="%wW58u?;n`[]b5BBV~[j">
           <value name="IF0">
             <block type="logic_compare" id="YlPsR46lg2RB[7Qa*rBU">
               <field name="OP">EQ</field>
               <value name="A">
                 <block type="get_value" id="|rnVQ8dV^KZ6ceGE|.wd">
                   <field name="ATTR">val</field>
                   <field name="OID">SmartHomeSonder.0.Tv.On</field>
                 </block>
               </value>
               <value name="B">
                 <block type="logic_boolean" id="aLx|9;GsRPN]k-w}C0}]">
                   <field name="BOOL">TRUE</field>
                 </block>
               </value>
             </block>
           </value>
           <statement name="DO0">
             <block type="timeouts_cleartimeout" id="d)nZL{9fJK%dS7W|5|]w">
               <field name="NAME">timeout4</field>
               <next>
                 <block type="timeouts_cleartimeout" id="d/nCWXc]W#Zfv#vjUz*n">
                   <field name="NAME">timeout5</field>
                   <next>
                     <block type="control" id="O;bgDU+{TDnf-[Q[hoyH">
                       <mutation delay_input="false"></mutation>
                       <field name="OID">javascript.0.PhilipsTV-Script.TvOn</field>
                       <field name="WITH_DELAY">FALSE</field>
                       <value name="VALUE">
                         <block type="logic_boolean" id="WZTCA{@t^))c?.Kdy!ci">
                           <field name="BOOL">TRUE</field>
                         </block>
                       </value>
                       <next>
                         <block type="timeouts_settimeout" id="04KAZ,o:jhhJ?j]/rG_m">
                           <field name="NAME">timeout4</field>
                           <field name="DELAY">8000</field>
                           <field name="UNIT">ms</field>
                           <statement name="STATEMENT">
                             <block type="control" id="Y:m0`E^g5:fYZqIxLEA6">
                               <mutation delay_input="false"></mutation>
                               <field name="OID">javascript.0.PhilipsTV-Script.Command</field>
                               <field name="WITH_DELAY">FALSE</field>
                               <value name="VALUE">
                                 <block type="text" id="3U[f,hg,Px#?LLP@o,I?">
                                   <field name="TEXT">Key: Standby</field>
                                 </block>
                               </value>
                             </block>
                           </statement>
                           <next>
                             <block type="timeouts_settimeout" id="+a!W+j%v)~KhlIUz6scy">
                               <field name="NAME">timeout5</field>
                               <field name="DELAY">1000</field>
                               <field name="UNIT">ms</field>
                               <statement name="STATEMENT">
                                 <block type="control" id="*Nsng2O$%AN;-U_8A*1}">
                                   <mutation delay_input="false"></mutation>
                                   <field name="OID">SmartHomeSonder.0.Tv.On</field>
                                   <field name="WITH_DELAY">FALSE</field>
                                   <value name="VALUE">
                                     <block type="logic_boolean" id="4mDT4_?)]Li|yD~fS9~P">
                                       <field name="BOOL">FALSE</field>
                                     </block>
                                   </value>
                                 </block>
                               </statement>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
           </statement>
         </block>
       </statement>
      </block>
      

      Hierzu muss ein "virtueller Taster" ("SmartHomeSonder.0.Tv.On") angelegt werden, der im IOT-Adapter also Virtuelles Gerät in der Alexa angelegt wird.

      Hier musste ich etwas mist den Zeiten experimentieren. Zwischen Wake on Lan und dem StandyBy-Knopf. Mit dieser Verzögerung funktioniert bei mir die Einschaltung zu 100%. Ist zwar immer ne schreck-Sekunde, also ruhig bleiben, aber es geht.

      =======================================================================================

      1. Anregungen

      Was man noch testen sollte wäre Folgendes:

      • Aktuell Sende ich das WOL auf die Wlan-karte (muss ja auch so sein) und Steuere den TV aber über die Lan-Karte. Wäre mal einen Versuch wert, zu testen, ob es auch über die Wlan-Karte Steuerbar ist
      • Ich habe bisher keine anderen Tasten als die Standby-Taste aus Mic´s Script verwendet. Man könnte hier auch Home, etc. verwenden.
      1. Fazit:

      Alles in allem ist es eine kleine Script-Sauerei. Liegt aber daran, dass ich eigentlich noch nie Berührungspunkte mit JavaScript hatte. Habe ein bisschen zusammenkopiert und angepasst. Man könnte sicherlich das WOL-Script direkt in Mic´s Script implementieren. Wollte ich aber erst mal nicht, damit ich Mic´s script nicht unnötig "verwurschtel". Sollte noch etwas Übersicht geben, da es doch eher weniger Anpassungen sind in seinem Code (man spielt einfach nicht in Fremder leute Code... Wie sich das anhört, wenn man es ausspricht 🙂 )

      Irgendwelche Abfragen sind mangels Wissens auch nicht drin. Man könnte sicherlich nen Ping absetzten, und erst wenn dieser TRUE ist, sendet man den Key. Dennoch denke ich, dass man damit mal die WOL-Funktion Testen kann.
      Denkbar wäre auch in Mic´s Script, oder dann irgendwann im fertigen Adapter eine Auswahl zu geben:

      • Einschalten über WOL
      • Einschalten über Harmony (oder andere IR-Geräte)

      Würde mich freuen, wenn sich einige Leute finden, um die ganze Sache zu testen. Ich denke, es kann schon ganz reizvoll sein, ohne Zusatzgerät den TV zu Starten. Oder es läuft wie bei mir, dass ich einfach keinen Spot habe, wo ich den IR-Blaster hinsetzten kann (zudem dass die IR-Schnittstelle von machen Philips-TV´s nicht die beste ist)

      Falls es (Supportan-)Fragen , Anregungen, Ideen Hierzu oder Wünsche gibt, immer her damit. Und viel Spaß beim testen

      mfg Daniel

      @Mic
      @AlCalzone

      Mic 1 Reply Last reply Reply Quote 1
      • Mic
        Mic Developer @freak1051 last edited by

        @freak1051
        Vielen Dank hierfür!

        Ich habe mal bei mir getestet, von einem PC, der im LAN hängt (nicht WLAN). ioBroker hängt ebenso im LAN (nicht WLAN).
        Dann mal im Philips-TV das hier aktiviert (auch wenn da nichts von reinem LAN steht).
        wolPh.png
        Danach habe ich im Philips TV die WLAN-Verbindung zusätzlich eingerichtet.

        Dann habe ich folgendes Script verwendet (mein Philips-TV-Script weiter aktiviert):

        // MAC address of Philips TV. 
        const MAC_ADDR = 'XX:XX:XX:XX:XX:XX';   // LAN        
        //const MAC_ADDR = 'ZZ:ZZ:ZZ:ZZ:ZZ:ZZ'; // WiFi
        
        // Anzahl WOL-Pakete, die gesendet werden sollen (Number of packets to send). Default: 3
        const PACKET_NUM = 3;
        
        // Interval between each packet	(in ms). Default: 100
        const PACKET_INTERVAL = 100;
        
        ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        
        let wol = require('wake_on_lan');
        
        wol.wake(MAC_ADDR, { num_packets:PACKET_NUM, interval:PACKET_INTERVAL }, function(error) {
          if (error) {
            log('Error occurred while sending WOL packets.', 'error');
          } else {
            log('Sending WOL packets successfully exectuted.');    
            setTimeout(function() {
                setState('javascript.0.PhilipsTV.PhilipsTV-Script.Command', 'Key: Home');
            }, 5000)
          }
        });
        
        

        Ergebnis:

        1. Mit der WiFi-MAC vom TV geht es nicht.
        2. Mit der LAN-MAC vom TV funktioniert es! (auch nach Ausschalten von WiFi in den TV-Einstellungen)

        Also: läuft soweit nach 3 Tests 🙂
        Leider muss man ja beim Testen immer mehrere Minuten nach dem Ausschalten des TV warten, bis dieser nicht mehr erreichbar ist. Werde weiter testen.
        Dann baue ich das ins Script mit ein.

        F 1 Reply Last reply Reply Quote 0
        • F
          freak1051 @Mic last edited by freak1051

          @Mic

          Ja sauber 🙂 Wobei dieses Verhalten ja absolut entgegen gesetzt meinem ist. bei mir tut es über LAN kein Stück, und über WLAN tut es.

          Naja ich denke Produktiv gesehen wäre es am besten in einem potentiellen Adapter einfach beide MAC-Adressen anzufordern, und auch beide Zu wecken. Schadet nicht, und die paar Pakete tun eigentlich keinem Netzwerk weh. Nimmt aber den Stress vom Entwickler, zwecks "Es tut nicht"

          Ja und das warten ist immer etwas doof. Hatte eben den Vorteil dass wir 2 Baugleiche TV´s im Haushalt haben, was die Prüfzeit klar halbiert.

          Und dien Script sieht natürlich schon etwas Professioneller aus 🙂 Und so wies Aussieht tut es auch mit der Key Home Taste. Dann werd ich die auch mal noch nutzen. Nur bin ich ein Fan davon in einem ersten Test so gut wie keine Variablen zu vertauschen. Die Variablen kommen im Feldtest automatisch

          Danke dir auf jeden Fall fürs testen 🙂

          Mic 1 Reply Last reply Reply Quote 0
          • Mic
            Mic Developer @freak1051 last edited by Mic

            @freak1051
            Da es so gut bei mir funktioniert, habe ich es in eine Alpha-Version im Philips-TV-Script implementiert, Version 1.0a. Dann kann man direkt damit testen:
            https://github.com/Mic-M/iobroker.philips-tv-script/blob/master/philips-tv-script.js

            @freak1051 sagte in [Tester gesucht] Wake on Lan (WOL) für Philips TV:

            Naja ich denke Produktiv gesehen wäre es am besten in einem potentiellen Adapter einfach beide MAC-Adressen anzufordern, und auch beide Zu wecken. Schadet nicht, und die paar Pakete tun eigentlich keinem Netzwerk weh. Nimmt aber den Stress vom Entwickler, zwecks "Es tut nicht"

            Sehr guter Punkt, das obige Script erlaubt 2 MAC-Adressen für WOL.

            Ebenso können weitere WOL-Einstellungen vorgenommen werden:

            const WOL_USE = true; // Verwendung von "Wake on Lan" / WiFi aktivieren. Falls false, dann werden die weiteren Settings nicht weiter beachtet.
            const WOL_MAC_ADDR_1  = 'AA:AA:AA:AA:AA:AA';   // Philips TV MAC-Adresse. Bitte entsprechend eintragen (lt. "Netzwerkeinstellungen anzeigen" im Philips TV ersichtlich. Dabei entweder "Ethernet MAC Addresse" oder "MAC-Adressse, kabellos")
            const WOL_MAC_ADDR_2  = '';   // 2. Philips TV MAC-Adresse. Man kann hier noch eine 2. MAC-Adresse angeben (z.B. 1. vom LAN, und diese 2. vom WiFi). Falls nicht benötigt, diese 2. Adresse leer lassen.
            const WOL_PACKET_NUM = 5;  // Kann man so lassen; ggf. auf 6-10 erhöhen, falls es nicht funktioniert. Erklärung: Anzahl WOL-Pakete, die jeweils gesendet werden sollen (Number of packets to send). Default: 3
            const WOL_PACKET_INTERVAL = 100;   // Kann man so lassen. Erklärung: Interval between each packet	(in ms). Default: 100
            const WOL_A_DELAY = 4000; // Nach dieser Verzögerung in Millisekunden (ms) wird das eigentliche Kommando zum TV zum einschalten gesendet (COMMAND_TO_LAUNCH).
            

            WOL_A_DELAY reicht bei mir 4000, ggf. auf 6000ms oder 8000ms erhöhen.

            Wie der Fernseher dann eingeschaltet wird, kann man hier einstellen:

            // Kommando das zum TV einschalten abgesetzt wird. Default ist 'Key: Standby'.
            // Genau so kann man hier z.B. 'Key: Home' nehmen, oder 'Launch: Netflix' für Netflix, etc. Siehe pCommands unten für alle möglichen Befehle.
            const COMMAND_TO_LAUNCH = 'Key: Standby'; 
            
            F 2 Replies Last reply Reply Quote 0
            • F
              freak1051 @Mic last edited by

              @Mic

              Perfekt. werd ich nachher gleich mal einbauen und meine Deaktivieren. Bin mal gespannt. Mit TvOn wird dann alles Angetriggert, wenn ich WOL_USE true hab, geh ich davon aus (mobil unterwegs, nicht ins script geschaut)

              Aber freut mich, dass es bei dir doch so gut klappt. Und gute Vorarbeit für den adapter. Danke dir

              Mic 1 Reply Last reply Reply Quote 0
              • Mic
                Mic Developer @freak1051 last edited by

                @freak1051 sagte in [Tester gesucht] Wake on Lan (WOL) für Philips TV:

                Mit TvOn wird dann alles Angetriggert, wenn ich WOL_USE true hab, geh ich davon aus (mobil unterwegs, nicht ins script geschaut)

                Korrekt 🙂

                Ebenso dir vielen Dank, dank deiner Infos konnte ich alles relativ einfach einbauen.

                F 1 Reply Last reply Reply Quote 0
                • F
                  freak1051 @Mic last edited by

                  @Mic

                  Na so gehört es sich doch. Hab zwar anfangs etwas hilfe gebraucht, aber man hilft wo man kann.

                  Hoffe, das sich evtl noch ein paar finden, um das ganze zu testen. ist doch noch ein übersichtliches Feld 🙂

                  1 Reply Last reply Reply Quote 0
                  • F
                    freak1051 @Mic last edited by

                    @Mic

                    So bin doch erst heute dazugekommen zum Testen.

                    Im Großen und ganzen funktioniert alles an deinem Script (naja ausser die Harmony-geschichte... aber das schließt ich auf fehlende Hardware 🙂 )

                    Allerdings komm ich durch meinen LAN-Port nicht rein. Er lässt sich tatsächlich nur über den Wlan-Adapter aufwecken. Aber das mag evtl. ein Unterschiedlicher FW-Stand am TV, unterschiedliche HW oder ein anders modell sein. Von dem her. Voll auf zufrieden.

                    Wie läuft es bei dir? Stabil?

                    Hast du gut gemacht 🙂 Danke 🙂

                    Mic 1 Reply Last reply Reply Quote 0
                    • Mic
                      Mic Developer @freak1051 last edited by

                      @freak1051 sagte in [Tester gesucht] Wake on Lan (WOL) für Philips TV:

                      @Mic
                      Im Großen und ganzen funktioniert alles an deinem Script (naja ausser die Harmony-geschichte... aber das schließt ich auf fehlende Hardware 🙂 )

                      Die ist ja auch nur optional 😉 Ich habe sie bei mir im Script eh jetzt deaktiviert.

                      Allerdings komm ich durch meinen LAN-Port nicht rein. Er lässt sich tatsächlich nur über den Wlan-Adapter aufwecken. Aber das mag evtl. ein Unterschiedlicher FW-Stand am TV, unterschiedliche HW oder ein anders modell sein. Von dem her. Voll auf zufrieden.

                      Ja, seltsam, aber so lange es bei beiden von uns geht.... 🙂

                      Wie läuft es bei dir? Stabil?

                      Ja, bislang sehr stabil 👍

                      1 Reply Last reply Reply Quote 0
                      • B
                        baerengraben last edited by baerengraben

                        @freak1051 und @Mic : Vielen Dank für die tolle Erweiterung des Scripts!

                        Ich habe das Script mit meinem Philips 75PUS7803/12 getestet. Das Einschalten über WOL hat auf Anhieb funktioniert! 👍

                        1 Reply Last reply Reply Quote 0
                        • Mic
                          Mic Developer last edited by

                          @baerengraben super, das freut mich, danke fürs testen 🙂

                          1 Reply Last reply Reply Quote 0
                          • apollon77
                            apollon77 last edited by apollon77

                            Hey All,

                            ich spiele auch gerade mit dem Skript rum mit meinem neuen PUS7334 ... Bei mir will das Power on mit WOL und folgendem Kommando nicht 😞

                            Wenn ich WOL mache dann sehe ich das das Display an geht und dann manchmal auch Ambilight ... aber sonst bleibt der Schirm aus 😞 hab die verschiedensten Kommandos versucht ... 😞 Das Kommando geht wohl erfolgreich durch, auch mehrfach senden geht nicht.

                            Habe den gleichen Effekt aber auch mit der Philips Remote-TV App ... also scheint wohl mal wieder generell blöd zu sein

                            Am Ende bin ich jetzt doch wieder beim Einschalten per "IR" 😞

                            Jemand noch eine Idee?

                            Ingo

                            Mic 1 Reply Last reply Reply Quote 0
                            • Mic
                              Mic Developer @apollon77 last edited by

                              @apollon77
                              Hi Ingo, danke fürs Testen 🙂 Habe dir schon per PM geantwortet.
                              Habe wohl die Lösung hierfür. Mehr Infos folgen alsbald.

                              Mic 1 Reply Last reply Reply Quote 0
                              • Mic
                                Mic Developer @Mic last edited by

                                @apollon77
                                Hier nun die mögliche Lösung, funktioniert bei mir so wunderbar

                                @Mic sagte in Test Adapter Philips-TV v0.2.x:

                                Es gibt folgende neue Optionen:

                                // ######################### Experimental (Version 1.2) #########################
                                // Wie es scheint bleibt das TV-Bild schwarz trotz WOL-Einschaltung, aber TV ist an (sichtbar an nicht mehr leuchtender roter LED)
                                // Wir testen hier folgendes: Nach dem ausführen von COMMAND_TO_LAUNCH wird nach COMMAND_AFTER_WOL_DELAY Millisekunden ein weiterer Command abgesetzt (z.B. 'Launch: Home')
                                const COMMAND_AFTER_WOL_DO = true; // hier diesen Test ein- oder ausschalten
                                const COMMAND_AFTER_WOL_DELAY = 5000; // falls COMMAND_AFTER_WOL_DO = true: Anzahl in Millisekunden nach WOL_A_DELAY
                                const COMMAND_AFTER_WOL_CMD = 'Launch: Home'; // der gesendete Command.
                                // ######################### Experimental (Version 1.2) #########################
                                

                                Das habe ich so seit einigen Wochen schon in Betrieb, und damit schaltet sich immer zuverlässig der Schirm ein, wenn der TV im Tiefschlaf war. Das dauert aufgrund der Delays allerdings etwas, bis das Bild kommt.

                                1 Reply Last reply Reply Quote 0
                                • apollon77
                                  apollon77 last edited by

                                  Neee, mein PUS7334 (2019er Modellreihe) ist da etwas zickiger. Ich sehe Ambilighttechnisch das er auf dem Home-Screen landet ... aber Bildschirm bleibt bis auf bissl backlight aus 😞

                                  Mic 1 Reply Last reply Reply Quote 0
                                  • Mic
                                    Mic Developer @apollon77 last edited by Mic

                                    @apollon77 sagte in [Tester gesucht] Wake on Lan (WOL) für Philips TV:

                                    Neee, mein PUS7334 (2019er Modellreihe) ist da etwas zickiger. Ich sehe Ambilighttechnisch das er auf dem Home-Screen landet ... aber Bildschirm bleibt bis auf bissl backlight aus 😞

                                    Wir hatten uns ja schon ausgetauscht diesbezüglich. Echt seltsam, dass es bei dir so nicht funktioniert und wie von dir vermutet wohl echt Modell- und Firmware-abhängig.

                                    WOL scheint echt ein "pain in the a..." unter. Siehe auch hier: https://github.com/eslavnov/pylips/issues/16#issuecomment-488034130

                                    Bei mir jetzt nun nochmal mehrfach getestet, aktuelle Script Version 1.3 https://github.com/Mic-M/iobroker.philips-tv-script/blob/master/philips-tv-script.js
                                    1.) Bei COMMAND_AFTER_WOL_DELAY = 5000;: zuverlässig
                                    2.) Bei COMMAND_AFTER_WOL_DELAY = 1;: TV bleibt manchmal schwarz.

                                    (1) War bei mir auch einige Wochen so erfolgreich in Betrieb, immer zuverlässig.

                                    Aber gut, daher ist ja auch im Script die Alternative, von "extern" den TV einzuschalten ohne WOL.

                                    popy2k14 created this issue in eslavnov/pylips

                                    closed [FEAT] Switch TV On (WOL)? #16

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    713
                                    Online

                                    31.7k
                                    Users

                                    79.8k
                                    Topics

                                    1.3m
                                    Posts

                                    philips tv tester
                                    4
                                    16
                                    3275
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo