Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. [Tester gesucht] Wake on Lan (WOL) für Philips TV

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

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

Geplant Angeheftet Gesperrt Verschoben Tester
testerphilips tv
16 Beiträge 4 Kommentatoren 3.9k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • F Offline
    F Offline
    freak1051
    schrieb am zuletzt editiert von freak1051
    #1
    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

    MicM 1 Antwort Letzte Antwort
    1
    • F 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

      MicM Offline
      MicM Offline
      Mic
      Developer
      schrieb am zuletzt editiert von
      #2

      @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 Antwort Letzte Antwort
      0
      • MicM Mic

        @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 Offline
        F Offline
        freak1051
        schrieb am zuletzt editiert von freak1051
        #3

        @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 :)

        MicM 1 Antwort Letzte Antwort
        0
        • F 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 :)

          MicM Offline
          MicM Offline
          Mic
          Developer
          schrieb am zuletzt editiert von Mic
          #4

          @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 Antworten Letzte Antwort
          0
          • MicM 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 Offline
            F Offline
            freak1051
            schrieb am zuletzt editiert von
            #5

            @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

            MicM 1 Antwort Letzte Antwort
            0
            • F freak1051

              @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

              MicM Offline
              MicM Offline
              Mic
              Developer
              schrieb am zuletzt editiert von
              #6

              @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 Antwort Letzte Antwort
              0
              • MicM Mic

                @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 Offline
                F Offline
                freak1051
                schrieb am zuletzt editiert von
                #7

                @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 Antwort Letzte Antwort
                0
                • MicM 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 Offline
                  F Offline
                  freak1051
                  schrieb am zuletzt editiert von
                  #8

                  @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 :)

                  MicM 1 Antwort Letzte Antwort
                  0
                  • F freak1051

                    @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 :)

                    MicM Offline
                    MicM Offline
                    Mic
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @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:

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      baerengraben
                      schrieb am zuletzt editiert von baerengraben
                      #10

                      @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:

                      1 Antwort Letzte Antwort
                      0
                      • MicM Offline
                        MicM Offline
                        Mic
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        @baerengraben super, das freut mich, danke fürs testen :-)

                        1 Antwort Letzte Antwort
                        0
                        • apollon77A Online
                          apollon77A Online
                          apollon77
                          schrieb am zuletzt editiert von apollon77
                          #12

                          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

                          Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                          • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                          • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                          MicM 1 Antwort Letzte Antwort
                          0
                          • apollon77A 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

                            MicM Offline
                            MicM Offline
                            Mic
                            Developer
                            schrieb am zuletzt editiert von
                            #13

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

                            MicM 1 Antwort Letzte Antwort
                            0
                            • MicM Mic

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

                              MicM Offline
                              MicM Offline
                              Mic
                              Developer
                              schrieb am zuletzt editiert von
                              #14

                              @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 Antwort Letzte Antwort
                              0
                              • apollon77A Online
                                apollon77A Online
                                apollon77
                                schrieb am zuletzt editiert von
                                #15

                                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 :-(

                                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                                MicM 1 Antwort Letzte Antwort
                                0
                                • apollon77A apollon77

                                  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 :-(

                                  MicM Offline
                                  MicM Offline
                                  Mic
                                  Developer
                                  schrieb am zuletzt editiert von Mic
                                  #16

                                  @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.

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  616

                                  Online

                                  32.5k

                                  Benutzer

                                  81.6k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe