Categorieën
Domotica Domoticz Scripts

Bedien je TV met Domoticz | Deel 2

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

  1. Log in op Domoticz en ga in het menu naar UserVariables (of Gebruikersvariabelen in het Nederlands)
  2. Geef je variabele de naam SchermUit
  3. Vul als Type String in
  4. 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.

uservars

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!

Advertenties

tv-aan

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.

  1. Ga in het menu van Domoticz naar events
  2. Kies voor Type Lua script en Time
  3. Geef je script een naam bijvoorbeeld RadioAanSchermUit
  4. 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.

 

 

 

Advertenties

2 reacties op “Bedien je TV met Domoticz | Deel 2”

Laat weten wat je van dit artikel vindt!

Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.