Philips TV über JointSpace API steuern

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Philips TV über JointSpace API steuern

Beitrag von eiGelbGeek » 25.07.2016, 15:49

Vielleicht hilft das ganze jemanden weiter um einen Philips TV mit JointSpace API in seiner CCU zu integrieren.

Anfangs habe ich von der CCU ein SSH Login an einen RaspberryPi geschickt und ein BashScript ausführen lassen. Funktionierte super , aber warum soll es der RPI machen, wenn die CCU doch auch CURL kann .... das Problem war nur das die CCU im Script bzw. in dessen CURL Befehl Anführungszeichen anders interpretiert, als in der Shell. Die Anführungszeichen sind aber zwingend erforderlich, weil die JointSpace Api das so her gibt ;)

Erster Versuch in der Shell der CCU -> Erfolgreich

Code: Alles auswählen

/usr/local/addons/cuxd/curl -s -X POST -d {"key":"ChannelStepUp"} http://IP.DES.PHILIPS.TV:1925/1/input/key
Zweiter Versuch in CUxD Exec -> Nicht erfolgreich -> Problem sind die Anführungszeichen in Data Teil ...

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:15.CMD_EXEC").State("/usr/local/addons/cuxd/extra/curl -s -X POST -d {"key":"ChannelStepUp"} http://IP.DES.PHILIPS.TV:1925/1/input/key");
Also muss der Data Teil vom Post in ein "XML" File (Text Datei sollte genauso gehen, aber ich habe mir für xml entschieden ;) )

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:15.CMD_EXEC").State("cat /usr/local/addons/test.xml | /usr/local/addons/cuxd/curl -s -X POST -d @-  http://IP.DES.PHILIPS.TV:1925/1/input/key");
XML File um 1 Sender Hoch zu schalten:

Code: Alles auswählen

{
"key":"ChannelStepUp"
}
XML File um 5 Sender Hoch zu schalten:

Code: Alles auswählen

{
"key":"ChannelStepUp",
"key":"ChannelStepUp",
"key":"ChannelStepUp",
"key":"ChannelStepUp",
"key":"ChannelStepUp"
}
Die API ist über http://IP.DES.PHILIPS.TV:1925/1/doc/API.html einsehbar :)

Und somit ist der TV über Mediola Interface (oder auch jeder anderen App die mit CUxD Geräten umgehen kann) mit relativ geringen Delay bedienen....
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

Benutzeravatar
eiGelbGeek
Beiträge: 979
Registriert: 24.07.2014, 17:46
Wohnort: Ruhrpottrandgebiet
Hat sich bedankt: 105 Mal
Danksagung erhalten: 19 Mal

Re: Philips TV über JointSpace API steuern

Beitrag von eiGelbGeek » 30.07.2016, 16:20

Das oben geschrieben funktioniert natürlich, aber erzeugt natürlich ein gewisses Delay ... deswegen habe ich mir nochmal Gedanken gemacht ;)

Habe das ganze nun ohne CCU Interaktion gelöst....

Ich habe einfach eine kleine PHP App geschrieben, die POST's absetzt. Die Urls können ja direkt über das Mediola Interface aufgerufen werden :) Fazit: fast kein Delay :)

Natürlich muss man dafür irgendwo im Haushalt ein Gerät haben das ein WebServer hat .... bei mir ist es ein Raspberry ;)

Code: Alles auswählen

<?php

//Konfiguration
	$url = 'http://IP.DES.PHILIPS.TV:1925/1/input/key';

//
//TV Funktionen (Standalone)
//
	//Standby Taste
 	if($_GET['action'] == "Standby") {
    	$jsonData = array(
			'key'=>'Standby'
		);
        tv_command($url, $jsonData);
	}
	//Zurück Taste
 	if($_GET['action'] == "Back") {
    	$jsonData = array(
			'key'=>'Back'
		);
        tv_command($url, $jsonData);
	}
	//Find Taste
 	if($_GET['action'] == "Find") {
    	$jsonData = array(
			'key'=>'Find'
		);
        tv_command($url, $jsonData);
	}
	//Rote Taste
 	if($_GET['action'] == "RedColour") {
    	$jsonData = array(
			'key'=>'RedColour'
		);
        tv_command($url, $jsonData);
	}
	//Grüne Taste
 	if($_GET['action'] == "GreenColour") {
    	$jsonData = array(
			'key'=>'GreenColour'
		);
        tv_command($url, $jsonData);
	}
	//Gelbe Taste
 	if($_GET['action'] == "YellowColour") {
    	$jsonData = array(
			'key'=>'YellowColour'
		);
        tv_command($url, $jsonData);
	}
	//Blaue Taste
 	if($_GET['action'] == "BlueColour") {
    	$jsonData = array(
			'key'=>'BlueColour'
		);
        tv_command($url, $jsonData);
	}
	//Home Taste
 	if($_GET['action'] == "Home") {
    	$jsonData = array(
			'key'=>'Home'
		);
        tv_command($url, $jsonData);
	}
	//Volume + Taste
	if($_GET['action'] == "VolumeUp") {
    	$jsonData = array(
			'key'=>'VolumeUp'
		);
        tv_command($url, $jsonData); 
    }
    //Volume - Taste
	if($_GET['action'] == "VolumeDown") {
    	$jsonData = array(
			'key'=>'VolumeDown'
		);
        tv_command($url, $jsonData); 
    }
	//Mute Taste
    if($_GET['action'] == "Mute") {
    	$jsonData = array(
			'key'=>'Mute'
		);
        tv_command($url, $jsonData); 
    }
    //Optionen Taste
    if($_GET['action'] == "Options") {
    	$jsonData = array(
			'key'=>'Options'
		);
        tv_command($url, $jsonData); 
    }
	//Dot Taste
    if($_GET['action'] == "Dot") {
    	$jsonData = array(
			'key'=>'Dot'
		);
        tv_command($url, $jsonData); 
    }
	//Ziffernblock 0 Taste
    if($_GET['action'] == "Digit0") {
    	$jsonData = array(
			'key'=>'Digit0'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 1 Taste
    if($_GET['action'] == "Digit1") {
    	$jsonData = array(
			'key'=>'Digit1'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 2 Taste
    if($_GET['action'] == "Digit2") {
    	$jsonData = array(
			'key'=>'Digit2'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 3 Taste
    if($_GET['action'] == "Digit3") {
    	$jsonData = array(
			'key'=>'Digit3'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 4 Taste
    if($_GET['action'] == "Digit4") {
    	$jsonData = array(
			'key'=>'Digit4'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 5 Taste
    if($_GET['action'] == "Digit5") {
    	$jsonData = array(
			'key'=>'Digit5'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 6 Taste
    if($_GET['action'] == "Digit6") {
    	$jsonData = array(
			'key'=>'Digit6'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 7 Taste
    if($_GET['action'] == "Digit7") {
    	$jsonData = array(
			'key'=>'Digit7'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 8 Taste
    if($_GET['action'] == "Digit8") {
    	$jsonData = array(
			'key'=>'Digit8'
		);
        tv_command($url, $jsonData); 
    }
    //Ziffernblock 9 Taste
    if($_GET['action'] == "Digit9") {
    	$jsonData = array(
			'key'=>'Digit9'
		);
        tv_command($url, $jsonData); 
    }
    //Info Taste
    if($_GET['action'] == "Info") {
    	$jsonData = array(
			'key'=>'Info'
		);
        tv_command($url, $jsonData); 
    }
	//Cursor Hoch Taste
	if($_GET['action'] == "CursorUp") {
    	$jsonData = array(
			'key'=>'CursorUp'
		);
        tv_command($url, $jsonData);
	}    
	//Cursor Runter Taste
	if($_GET['action'] == "CursorDown") {
    	$jsonData = array(
			'key'=>'CursorDown'
		);
        tv_command($url, $jsonData);
	}
	//Cursor Links Taste
	if($_GET['action'] == "CursorLeft") {
    	$jsonData = array(
			'key'=>'CursorLeft'
		);
        tv_command($url, $jsonData);
	}
	//Cursor Rechts Taste
	if($_GET['action'] == "CursorRight") {
    	$jsonData = array(
			'key'=>'CursorRight'
		);
        tv_command($url, $jsonData);
	}
	//Confirm/Ok/Enter Taste        
	if($_GET['action'] == "Confirm") {
    	$jsonData = array(
			'key'=>'Confirm'
		);
        tv_command($url, $jsonData);
	}
	//Next Taste        
	if($_GET['action'] == "Next") {
    	$jsonData = array(
			'key'=>'Next'
		);
        tv_command($url, $jsonData);
	}
	//Previous Taste        
	if($_GET['action'] == "Previous") {
    	$jsonData = array(
			'key'=>'Previous'
		);
        tv_command($url, $jsonData);
	}
	//Adjust Taste        
	if($_GET['action'] == "Adjust") {
    	$jsonData = array(
			'key'=>'Adjust'
		);
        tv_command($url, $jsonData);
	}
	//WatchTV Taste        
	if($_GET['action'] == "WatchTV") {
    	$jsonData = array(
			'key'=>'WatchTV'
		);
        tv_command($url, $jsonData);
	}
	//Viewmode Taste        
	if($_GET['action'] == "Viewmode") {
    	$jsonData = array(
			'key'=>'Viewmode'
		);
        tv_command($url, $jsonData);
	}
	//Teletext Taste        
	if($_GET['action'] == "Teletext") {
    	$jsonData = array(
			'key'=>'Teletext'
		);
        tv_command($url, $jsonData);
	}
	//Subtitle Taste        
	if($_GET['action'] == "Subtitle") {
    	$jsonData = array(
			'key'=>'Subtitle'
		);
        tv_command($url, $jsonData);
	}
	//Sender + Taste
	if($_GET['action'] == "ChannelStepUp") {
    	$jsonData = array(
			'key'=>'ChannelStepUp'
		);
        tv_command($url, $jsonData); 
    }
    //Sender - Taste
    if($_GET['action'] == "ChannelStepDown") {
    	$jsonData = array(
			'key'=>'ChannelStepDown'
		);
        tv_command($url, $jsonData); 
    }
    //Source - Taste
    if($_GET['action'] == "Source") {
    	$jsonData = array(
			'key'=>'Source'
		);
        tv_command($url, $jsonData); 
    }
    //PlayPause - Taste
    if($_GET['action'] == "PlayPause") {
    	$jsonData = array(
			'key'=>'PlayPause'
		);
        tv_command($url, $jsonData); 
    }
    //Pause - Taste
    if($_GET['action'] == "Pause") {
    	$jsonData = array(
			'key'=>'Pause'
		);
        tv_command($url, $jsonData); 
    }
    //FastForward - Taste
    if($_GET['action'] == "FastForward") {
    	$jsonData = array(
			'key'=>'FastForward'
		);
        tv_command($url, $jsonData); 
    }
    //Stop - Taste
    if($_GET['action'] == "Stop") {
    	$jsonData = array(
			'key'=>'Stop'
		);
        tv_command($url, $jsonData); 
    }
    //Rewind - Taste
    if($_GET['action'] == "Rewind") {
    	$jsonData = array(
			'key'=>'Rewind'
		);
        tv_command($url, $jsonData); 
    }
    //Record - Taste
    if($_GET['action'] == "Record") {
    	$jsonData = array(
			'key'=>'Record'
		);
        tv_command($url, $jsonData); 
    }
    //Online - Taste
    if($_GET['action'] == "Online") {
    	$jsonData = array(
			'key'=>'Online'
		);
        tv_command($url, $jsonData); 
    }    


//Json Function Aufruf    
function tv_command($url, $jsonData)
{
$ch = curl_init($url);
$jsonDataEncoded = json_encode($jsonData);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonDataEncoded);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
$result = curl_exec($ch);
}

?>
Aufgerufen wird das ganze dann mit:

Code: Alles auswählen

http://IP.DES.WEB.SERVER/NAME_DES_PHP_FILE.php?action=Standby
Nur weil es nicht geht, muss es nicht kaputt sein ^^

Apple for Work, Linux for Network, iOS for Mobility and still Windows for Solitaire

ChrisL
Beiträge: 344
Registriert: 25.05.2011, 08:31

Re: Philips TV über JointSpace API steuern

Beitrag von ChrisL » 04.02.2017, 10:19

Hallo,

ich habe eben versucht meinen Philips TV damit anzusteuern. Kann es sein, dass dieses Jointspace in meinem 2015er Android TV nicht mehr vorhanden ist? Es heißt immer "Not Found"

Danke und Gruß
Chris

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“