Met een nieuwe generatie TV toestel (vanaf 2014) van Philips is er de mogelijkheid om informatie uit de TV te verkrijgen. Philips gebruikt hiervoor de REST API, Jointspace. Je kunt het volume opvragen, de zender, firmware versie en nog meer. Het zou in een aantal gevallen interessant kunnen zijn om te beschikken over deze informatie in Domoticz. Het wordt natuurlijk nog mooier als je in bepaalde situaties de TV er ook mee kunt bedienen! Je kunt bijvoorbeeld de TV aan laten gaan terwijl je op vakantie bent, zodat het lijkt alsof je thuis bent.
Mijn doel is iets anders: stel je luistert de hele dag naar de radio via de TV. Hierbij staat dan de hele dag het scherm aan met de melding ‘radiozender’ in beeld. Zonde van de elektriciteit en de kosten! We kunnen via het menu het scherm uitschakelen, maar dat kost een aantal handmatige acties. Dat moet beter kunnen. We gaan dit automatiseren door middel van de Jointspace API en Domoticz.
Stappenplan TV bedienen met Domoticz | Deel 1
Om informatie te verkrijgen uit de TV moet hij natuurlijk wel aanstaan. Dat gaat ons script eerst checken. Daarna zoeken we uit of de TV op een radiozender staat. Als dat zo is zetten we het scherm uit door een reeks knoppen ‘in te drukken’. Om de informatie tussen TV en Domoticz op mijn Synology NAS uit te wisselen gebruik ik PHP. Dit dien je in te schakelen op je Raspberry Pi of op je Synology NAS.
Stap 1: Vast IP-adres instellen TV
Zorg dat je TV een vast IP adres heeft. Dit kun je instellen in het menu van de TV. Op mijn model, de 7109, gaat dat als volgt:
- Druk op de knop Home
- Navigeer naar Configuratie
- Navigeer naar Netwerkinstellingen
- Kies bij Netwerktype voor Bedraad of Draadloos.
- Kies bij Netwerkmodus voor Statische IP
- Vul de volgende gegevens in voor jouw situatie:
- IP adres bijv. 192.168.2.19
- Netwerkmasker: 255.255.255.0
- Poort: (standaard gateway, ip-adres van je router of modem) bijv. 192.168.2.1
- DNS1 en DNS2: 8.8.8.8 of 4.4.4.4 voor de DNS servers van Google. Wil je die van je Internet Provider gebruiken zoek die dan op op je computer onder de status van je netwerkverbinding.
- Als het goed is heeft de TV nu een werkende internet verbinding.
Stap 2: PHP activeren op je NAS
Om straks opdrachten te versturen naar je TV gebruik ik een PHP script. De NAS moet weten hoe hij PHP moet uitvoeren en daarom moeten we dat eerst activeren in de webservices van de NAS. Dat gaat alsvolgt:
- Configuratiescherm
- Webservices
- Vink Web station inschakelen aan
- Klik op toepassen
- Ga naar het tabje PHP-instellingen
- Vink PHP-cache en display_errors aan.
Stap 3: Maak UserVariables aan in Domoticz
Om straks de waarden die je uit je TV opvraagt op te kunnen slaan maken we een UserVariable aan. We maken er een aan voor de Zendernaam, Kanaalnummer en het volume.
- Log in op Domoticz en ga in het menu naar UserVariables (of Gebruikersvariabelen in het Nederlands)
- Geef je variabele de naam KanaalTV
- Vul als Type Integer in
- De waarde mag je op 0 zetten
Herhaal stappen 2 tot 4 voor ZendernaamTV en VolumeTV beide Type String.
Onthoud of schrijf de idx op van de variabelen. Deze heb je straks nodig.
Stap 4: Plaats de PHP scripts op je NAS
Om de informatie in Domoticz te krijgen laten we de NAS iedere minuut een PHP script uitvoeren. Dit PHP script vraagt de informatie van de TV op en stuurt dit naar Domoticz.
- Ga in je NAS naar File Station en dan naar de map ‘web’.
- Maak een nieuwe map aan bijvoorbeeld ‘php2domo’.
- Open de Tekstverwerker vanuit het hoofdmenu, het is een soort ‘kladblok’
- Plak dit onderstaande script in de tekstverwerker
<?php // Vraag het json resultaat op van de huidige zender. Dit is de zender ID. $url = 'http://192.168.2.19:1925/1/channels/current'; $content = file_get_contents($url); $obj = json_decode($content); $zenderid = $obj->{'id'}; print 'Zender ID: '; print $zenderid; // Vraag wat de naam en het kanaal is van het zender id. Dit is de naam die je normaal in beeld ziet. bijv. NPO1HD op kanaal 1 $url = 'http://192.168.2.19:1925/1/channels/' .$zenderid; $content = file_get_contents($url); $obj = json_decode($content); $zendernaam = $obj->{'name'}; $kanaal = $obj->{'preset'}; print '<br>Kanaal: '; print $kanaal; print '<br>Zendernaam: '; $zendernaam = str_replace(' ', '', $zendernaam); print $zendernaam; print '<br>'; // Domoticz updaten met de nieuwe waarden. VERVANG HIER IDX EN HET IPADRES! $domoticzurl ='http://192.168.2.150:8084/json.htm?type=command¶m=updateuservariable&idx=14&vname=KanaalTV&vtype=0&vvalue=' .$kanaal; $result = file_get_contents($domoticzurl); print $result; print '<br><br>'; // Domoticz updaten met de nieuwe waarden. VERVANG HIER IDX EN HET IPADRES! $domoticzurl ='http://192.168.2.150:8084/json.htm?type=command¶m=updateuservariable&idx=13&vname=ZendernaamTV&vtype=2&vvalue=' .$zendernaam; $result = file_get_contents($domoticzurl); print $result; print '<br><br>'; $url = 'http://192.168.2.19:1925/1/audio/volume'; $content = file_get_contents($url); $obj = json_decode($content); $volume = $obj->{'current'}; print 'Current volume: '; print $volume; print '<br>'; // Domoticz updaten met de nieuwe waarden. VERVANG HIER IDX EN HET IPADRES! $domoticzurl ='http://192.168.2.150:8084/json.htm?type=command¶m=updateuservariable&idx=12&vname=VolumeTV&vtype=2&vvalue=' .$volume; $result = file_get_contents($domoticzurl); print $result; print '<br>';
- Zoek en vervang:
- Zoek: http://192.168.2.150:8084
- Vervang dit door je eigen Domoticz IP-adres en poort
- Zoek en vervang:
- Zoek: http://192.168.2.19
- Vervang dit door je eigen TV IP adres
- Vervang in de $domoticzurl’s het cijfer van idx in jouw eigen idx van VolumeTV, KanaalTV en ZendernaamTV
- Sla je script in de tekstverwerker op in de php2domo map als ‘zender.php’
Stap 5: Cronjob zender.php
Om steeds de laatste informatie binnen domoticz te hebben laten we de NAS iedere minuut zender.php uitvoeren. Hiervoor gebruiken we een cronjob, de taakplanner in het Nederlands.
Ga naar het configuratiescherm van je NAS en Klik op taakplanner.
Maak een nieuwe taak van het type ‘Door de gebruiker gedefinieerd script’ aan die je ZenderTV noemt. Je voert ‘m uit als admin en het is de volgende opdracht:
wget -q -O /dev/null 'http://192.168.2.150:8086/php2domo/zender.php'
Uiteraard moet je ook hier weer je poort en ipadres van je NAS vervangen.
Klik op het tabje Planning en laat de taak tot 23:59 iedere minuut dagelijks uitvoeren.
Stap 6:
Klaar! Als de TV aanstaat geeft het PHP-script nu automatisch de waarden door aan Domoticz. Op basis van deze informatie kunnen we weer taken gaan automatiseren, bijvoorbeeld het scherm uit zetten als de Radio aanstaat. Hoe je dat doet lees je in deel 2
Heb je vragen of is het gelukt? Laat hier je reactie achter!
mooie uitleg! Maar helaas werkt het voor mij niet…
klopt het dat voor philips tv’s v.a. 2016 een andere manier moet worden gebruikt? weet je ook hoe toevallig?
Hoi Tim,
Dank je wel, leuk dat je reageert. Het klopt dat de API aangepast is voor 2016 modellen. In de Domoticz Philips TV wiki staat helemaal onderaan de pagina ‘2016 Models’. Hier kun je lezen wat je kunt aansturen. Op de pagina van de link die daar staat kun je een python script vinden waarmee je de TV kunt aansturen. Hiermee heb ik uiteraard geen ervaring helaas.
Het ziet ernaar uit dat je eerst een soort authenticatie moet doen voordat je met de API mag praten.
Succes! Laat me weten als je verder bent!
Wouter