In meiner Anwesenheitssimulation setze ich darauf, dass der TV immer mal wieder für eine gewisse Zeit läuft, auch wenn ich nicht zuhause bin.
Zur Steuerung der API gibt es von Sony eine Liste der JSON-Befehle welche vom TV unterstützt werden.
Um die Steuerung durchführen zu können müssen ein paar Einstellungen am TV vorgenommen bzw. geprüft werden:
- Authentication: [HOME] Settings > Network > Home network setup > IP control > Authentication:
hier den Wert Normal & Pre-Shared Key auswählen - PSK: [Home] Settings > Network > Home network setup > IP control > Pre-Shared Key:
hier einen PIN setzen und merken, dieser wird später im Skript benutzt.
Vorbereitungen der CCU3:
- CUxD muss installiert sein
- CUxD-EXEC Gerät ist an der CCU3 angelernt
Auf der CCU3 wird ein Programm benötigt, welches bei der Ausführung ein Skript aufruft.
Skript:
Code: Alles auswählen
!--SONY TV Ausschalten
! Skript von marcels
!_IP Adresse
string ip_address = "192.168.178.20";
!_API-PIN
string api_pin="1234";
!_Einstellungen
string api_path="system";
string api_method="setPowerStatus";
string api_id="55";
string api_params="{\"status\": false}";
string api_version="1.0";
!------ NICHT Verändern-------
string reqdata="{\"method\": \"" # api_method # "\", \"id\": " # api_id # ", \"params\": [" # api_params # "], \"version\": \"" # api_version # "\"}";
string request="/usr/local/addons/cuxd/curl -X POST -H \"X-Auth-PSK: " # api_pin # " \" -d '" # reqdata # "' http://"# ip_address # "/sony/" # api_path;
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(request);
quit;
Code: Alles auswählen
http://192.168.178.20/sony/system
{
"method": "setPowerStatus",
"id": 55,
"params": [{"status": false}],
"version": "1.0"
}
https://pro-bravia.sony.net/develop/int ... index.html
Unter Syntax ist immmer der API-Pfad (Variable api_path) angegeben.
Aus: http://<Base URL>/system wird in unserem Fall string api_path="system";
Unter Request sind die für den Befehl verfügbaren parameter (Variable api_params) angegeben und direkt darunter ein JSON Example mit der benötigten ID und Version.
Weitere Beispiele:
Code: Alles auswählen
!--SONY TV auf SAT umschalten
! Skript von marcels
!_IP Adresse
string ip_address = "192.168.178.20";
!_API-PIN
string api_pin="1234";
!_Einstellungen
string api_path="avContent";
string api_method="setPlayContent";
string api_id="101";
string api_params="{\"uri\": \"tv:dvbs?trip=1.1017.61301&srvName=ProSieben HD\"}";
string api_version="1.0";
!------ NICHT Verändern-------
string reqdata="{\"method\": \"" # api_method # "\", \"id\": " # api_id # ", \"params\": [" # api_params # "], \"version\": \"" # api_version # "\"}";
string request="/usr/local/addons/cuxd/curl -X POST -H \"X-Auth-PSK: " # api_pin # " \" -d '" # reqdata # "' http://"# ip_address # "/sony/" # api_path;
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(request);
quit;
Um eine Liste der verfügbaren Programme zu erhalten empfehle ich eine API-Abfrage mit der Software "Postman" (https://www.getpostman.com/)
Die Abfrage sieht wie folgt aus: und liefert ein Ergebnis im folgenden Format, welches Ihr dann im Script verarbeiten könnt:
Code: Alles auswählen
{
"result": [
[
{
"uri": "tv:dvbs?trip=1.1019.10301&srvName=Das Erste HD",
"title": "Das Erste HD",
"index": 0,
"dispNum": "0001",
"tripletStr": "1.1019.10301",
"programMediaType": "tv"
},
{
"uri": "tv:dvbs?trip=1.1011.11110&srvName=ZDF HD",
"title": "ZDF HD",
"index": 1,
"dispNum": "0002",
"tripletStr": "1.1011.11110",
"programMediaType": "tv"
},
{
"uri": "tv:dvbs?trip=1.1017.61300&srvName=SAT.1 HD",
"title": "SAT.1 HD",
"index": 2,
"dispNum": "0003",
"tripletStr": "1.1017.61300",
"programMediaType": "tv"
},
{
"uri": "tv:dvbs?trip=1.1057.61200&srvName=RTL HD",
"title": "RTL HD",
"index": 3,
"dispNum": "0004",
"tripletStr": "1.1057.61200",
"programMediaType": "tv"
},
{
Code: Alles auswählen
!--SONY TV Programm umschalten
! Skript von marcels
!_IP Adresse
string ip_address = "192.168.178.20";
!_API-PIN
string api_pin="1234";
!_Einstellungen
string programm;
var TV_Programm = dom.GetObject("TV_Programm");
string tv_programm = TV_Programm.Variable();
if (tv_programm == "0")
{
programm = "tv:dvbs?trip=1.1019.10301&srvName=Das Erste HD";
}
if (tv_programm == "1")
{
programm = "tv:dvbs?trip=1.1011.11110&srvName=ZDF HD";
}
if (tv_programm == "2")
{
programm = "tv:dvbs?trip=1.1017.61300&srvName=SAT.1 HD";
}
string api_path="avContent";
string api_method="setPlayContent";
string api_id="101";
string api_params="{\"uri\": \"" # programm # " \"}";
string api_version="1.0";
!------ NICHT Verändern-------
string reqdata="{\"method\": \"" # api_method # "\", \"id\": " # api_id # ", \"params\": [" # api_params # "], \"version\": \"" # api_version # "\"}";
string request="/usr/local/addons/cuxd/curl -X POST -H \"X-Auth-PSK: " # api_pin # " \" -d '" # reqdata # "' http://"# ip_address # "/sony/" # api_path;
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(request);
quit;
Viel Spaß damit und ggf. helfen die Skripte ja auch anderen Leuten bei der Bedienung eines beliebigen Gerätes im Haushalt, welches eine API besitzt.
OT: Wer sich als Auto einen BMW entsprechender Klasse leisten kann, der kann über API das Auto hupen lassen, den Tankinhalt bzw. die Koordinaten abfragen