In deel 1 heb je de basis kunnen lezen hoe je de zendernaam, kanaalnummer en het volume van je TV als UserVariables in Domoticz kunt verkrijgen. In deel 2 gaan we op basis van deze informatie acties uitvoeren.
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.
Belangrijk: doorloop eerst deel 1, anders werkt het niet!
We gaan een Lua script maken dat checkt of de TV aanstaat en op welke zender hij staat. Als dat een radiozender is voert hij een aantal knopcommando’s uit waardoor het scherm uit gaat maar de radio verder speelt.
Stap 1: Maak UserVariables aan
- Log in op Domoticz en ga in het menu naar UserVariables (of Gebruikersvariabelen in het Nederlands)
- Geef je variabele de naam SchermUit
- Vul als Type String in
- De waarde mag je op False zetten
Dit Uservariable gaan we gebruiken om te laten checken of het scherm al uit staat. Anders zou je juist het scherm weer aanzetten.
Stap 2: Presence Detection TV
We maken gebruik van Aanweigheidsdetectie om te controleren of de TV aanstaat. Als dat zo is zal er een schakelaar aangaan. Volg de stappen in deze blogpost, je kunt stap 1 overslaan. Je doet dit natuurlijk voor je TV, niet voor je smartphone!
Stap 3: Bestuur je TV script
Om de TV te bedienen maken we gebruik van PHP. Het mooie daarvan is, is dat je variabelen kunt meesturen via de URL. Ik heb een script gemaakt waarin je tot 10 knopcommando’s kunt doorsturen naar je TV. Die voert dat uit alsof er op de afstandsbediening wordt gedrukt.
- Ga in je NAS naar File Station en dan naar de map ‘web’.
- Ga naar de map ‘php2domo’ die je in deel 1 gemaakt hebt.
- Open de Tekstverwerker vanuit het hoofdmenu, het is een soort ‘kladblok’
- Plak dit onderstaande script in de tekstverwerker
<?php // Vraag de variabelen op uit de URL met GET $knop1 = $_GET["knop1"]; $knop2 = $_GET["knop2"]; $knop3 = $_GET["knop3"]; $knop4 = $_GET["knop4"]; $knop5 = $_GET["knop5"]; $knop6 = $_GET["knop6"]; $knop7 = $_GET["knop7"]; $knop8 = $_GET["knop8"]; $knop9 = $_GET["knop9"]; $knop10 = $_GET["knop10"]; $volume = $_GET["volume"]; // Stop de variabelen in een 'key' array $knoparray1 = array( "key" => $knop1 ); $knoparray2 = array( "key" => $knop2 ); $knoparray3 = array( "key" => $knop3 ); $knoparray4 = array( "key" => $knop4 ); $knoparray5 = array( "key" => $knop5 ); $knoparray6 = array( "key" => $knop6 ); $knoparray7 = array( "key" => $knop7 ); $knoparray8 = array( "key" => $knop8 ); $knoparray9 = array( "key" => $knop9 ); $knoparray10 = array( "key" => $knop10 ); $volumearray = array( "muted" => "false", "current" => $volume ); // encodeer de arrays naar json zodat de tv het snapt $url_send ="http://192.168.2.19:1925/1/input/key"; $url_volume ="http://192.168.2.19:1925/1/audio/volume"; $str_data1 = json_encode($knoparray1); $str_data2 = json_encode($knoparray2); $str_data3 = json_encode($knoparray3); $str_data4 = json_encode($knoparray4); $str_data5 = json_encode($knoparray5); $str_data6 = json_encode($knoparray6); $str_data7 = json_encode($knoparray7); $str_data8 = json_encode($knoparray8); $str_data9 = json_encode($knoparray9); $str_data10 = json_encode($knoparray10); // laat de data zien aan gebruiker print $str_data1; print $str_data2; print $str_data3; print $str_data4; print $str_data5; print $str_data6; print $str_data7; print $str_data8; print $str_data9; print $str_data10; // het daadwerkelijk versturen van de data door middel van curl function sendPostData($url, $post){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS,$post); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); curl_close($ch); // Seems like good practice return $result; } // laat zien wat er gestuurd is en laat het script even slapen om de GUI van de TV de kans te geven de actie uit te voeren echo " " . sendPostData($url_send, $str_data1); sleep(1); echo " " . sendPostData($url_send, $str_data2); sleep(1); echo " " . sendPostData($url_send, $str_data3); sleep(1); echo " " . sendPostData($url_send, $str_data4); sleep(5); echo " " . sendPostData($url_send, $str_data5); sleep(1); echo " " . sendPostData($url_send, $str_data6); sleep(1); echo " " . sendPostData($url_send, $str_data7); sleep(1); echo " " . sendPostData($url_send, $str_data8); sleep(1); echo " " . sendPostData($url_send, $str_data9); sleep(1); echo " " . sendPostData($url_send, $str_data10); sleep(3); ?>
Vervang het IP adres van mijn TV door die van jouw. Het poortnummer is wel 1925 voor alle TV’s.
Met dit PHP script kun je de TV tot 10 opdrachten laten uitvoeren en het volume daarna aanpassen. De 10 opdrachten zijn de knop commando’s zoals de beschreven staat in de Jointspace API. Om de TV daadwerkelijk een opdracht te geven ga je met je browser naar het bestand:
http://ip-adres van NAS/mapnaam/bestandsnaam.php
Als alles werkt en je TV aan staat krijg je het volgende antwoord:
{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}{"key":null}
Stap 3b: Test de besturing van je TV
Om de TV op een andere zender te zetten kun je het volgende doen
IP-adres nas/mapnaam/bestandsnaam.php?knop1=Digit4
Waarmee we de TV op zender 4 zetten.
Wil je ook het volume aanpassen doe dan:
IP-adres nas/mapnaam/bestandsnaam.php?knop1=Digit4&volume=25
Waarmee we de TV op zender 4 zetten en het volume op 25
Wil je het kanaal op radio zetten kies dan:
IP-adres nas/mapnaam/bestandsnaam.php?knop1=Digit1&knop2=Digit8&knop3=Digit2&knop4=Digit5
Vergeet niet dat je steeds het knopnummer ophoogt.
Stap 4: Maak een lua script aan
Nu we de TV kunnen bedienen via deze URL kunnen we dus ook op basis van de waarden in Domoticz acties uitvoeren. Zoals het scherm uitzetten als de TV op radio staat.
- Ga in het menu van Domoticz naar events
- Kies voor Type Lua script en Time
- Geef je script een naam bijvoorbeeld RadioAanSchermUit
- Plak onderstaande script in je scherm.
commandArray = {} print ("*********** RadioAan SchermUit ****************"); if (otherdevices['Phillips TV (2.19)'] == 'On') then print "De TV staat aan" -- TV staat aan. -- check de radio aan staat if (tonumber(uservariables['KanaalTV']) > 1000) then print "De radio staat aan" if (uservariables['SchermUit'] == 'True') then print "Het scherm is uit." else print "Het scherm staat nog aan. Die gaan we uitzetten" commandArray['OpenURL']='192.168.2.150/php2domo/radioaan.php?knop1=Adjust&knop2=CursorRight&knop3=Confirm&knop4=CursorDown&knop5=Confirm' commandArray['Variable:SchermUit']="True" end else print "De TV is aan maar staat niet op de radio" commandArray['Variable:SchermUit']="False" end else print ("De TV staat uit") end print ("*********** einde RadioAan SchermUit ****************"); return commandArray
Vervang de naam van je schakelaar (in mijn geval Philips TV (2.19)) door de naam van je eigen schakelaar.
Vervang het IP-Adres in die van je NAS en de map waar het PHP bestand staat.
Zodra het lua script uitgevoerd wordt zie je dat de TV naar het menu gaat, naar rechts gaat, op OK klikt, 1x naar beneden gaat en weer op OK klikt. De TV meld nu dat het in ecomodus gaat en en scherm gaat uit.
[…] Bedien je TV met Domoticz | Deel 2 […]
[…] 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 […]