Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Working commands 55PUS7181
http://192.168.3.51:1925/system
{"menulanguage":"Dutch","name":"55PUS7181\/12","country":"Netherlands","serialnumber_encrypted":"F6905Z+vyquNhZoXegQ1DzZXCqMIcjJpkzy3LsiPac=\n","softwareversion_encrypted":"1YWR42sjQ6xdjuyIXWZbyPnoRswLoRswLmKtAhR9GRsBx1qY=\n","model_encrypted":"jGNvXDerdJoWjOpwh\/n0gw2MgM7oRswLoRswLKC73wfMgra3S62c4=\n","deviceid_encrypted":"7mv3ZEtMH8oRswL0RoRswLISTn38FN8HAqfmSF95qoaiRsuukSraQ=\n","nettvversion":"6.0.2","epgsource":"one","api_version":{"Major":6,"Minor":2,"Patch":0},"featuring":{"jsonfeatures":{"editfavorites":["TVChannels","SatChannels"],"recordings":["List","Schedule","Manage"],"ambilight":["LoungeLight","Hue","Ambilight"],"menuitems":["Setup_Menu"],"textentry":["context_based","initial_string_available","editor_info_available"],"applications":["TV_Apps","TV_Games","TV_Settings"],"pointer":["not_available"],"inputkey":["key"],"activities":["intent"],"channels":["preset_string"],"mappings":["server_mapping"]},"systemfeatures":{"tvtype":"consumer","content":["dmr","dms_tad"],"tvsearch":"intent","pairing_type":"digest_auth_pairing","secured_transport":"true"}}}
Seems to support all ambilight commands from http://jointspace.sourceforge.net/projectdata/documentation/jasonApi/1/doc/API.html
Extra/undocumented:
http://192.168.3.51:1925/ambilight/currentconfiguration
{"styleName":"FOLLOW_VIDEO","isExpert":false,"menuSetting":"STANDARD"}
http://192.168.3.51:1925/ambilight/lounge
{"color":{"hue":0,"saturation":0,"brightness":0},"colordelta":{"hue":0,"saturation":0,"brightness":0},"speed":0,"mode":"Default"}
http://192.168.3.51:1925/ambilight/power
{"power":"On"}
http://192.168.3.51:1925/ambilight/supportedstyles
{"supportedStyles":[{"styleName":"OFF"},{"styleName":"FOLLOW_VIDEO"},{"styleName":"FOLLOW_AUDIO","algorithms":["ENERGY_ADAPTIVE_BRIGHTNESS","ENERGY_ADAPTIVE_COLORS","VU_METER","SPECTRUM_ANALYZER","KNIGHT_RIDER_CLOCKWISE","KNIGHT_RIDER_ALTERNATING","RANDOM_PIXEL_FLASH","STROBO","PARTY"],"maxTuning":2},{"styleName":"FOLLOW_COLOR","algorithms":["MANUAL_HUE","AUTOMATIC_HUE"],"maxSpeed":255},{"styleName":"LOUNGE"},{"styleName":"MANUAL"},{"styleName":"EXPERT"},{"styleName":"GRID"}]}
regular:
http://192.168.3.51:1925/ambilight/mode
{"current":"internal"}
http://192.168.3.51:1925/ambilight/cached
{"layer1":{"left":{"0":{"r":0,"g":0,"b":0},"1":{"r":0,"g":0,"b":0},"2":{"r":0,"g":0,"b":0},"3":{"r":0,"g":0,"b":0}},"top":{"0":{"r":0,"g":0,"b":0},"1":{"r":0,"g":0,"b":0},"2":{"r":0,"g":0,"b":0},"3":{"r":0,"g":0,"b":0},"4":{"r":0,"g":0,"b":0},"5":{"r":0,"g":0,"b":0},"6":{"r":0,"g":0,"b":0},"7":{"r":0,"g":0,"b":0}},"right":{"0":{"r":0,"g":0,"b":0},"1":{"r":0,"g":0,"b":0},"2":{"r":0,"g":0,"b":0},"3":{"r":0,"g":0,"b":0}}}}
http://192.168.3.51:1925/ambilight/topology
{"layers":"1","left":4,"top":8,"bottom":0,"right":4}
http://192.168.3.51:1925/ambilight/measured
{"layer1":{"left":{"0":{"r":43,"g":18,"b":24},"1":{"r":122,"g":79,"b":84},"2":{"r":114,"g":154,"b":130},"3":{"r":164,"g":189,"b":191}},"top":{"0":{"r":173,"g":189,"b":191},"1":{"r":178,"g":186,"b":186},"2":{"r":186,"g":180,"b":172},"3":{"r":192,"g":186,"b":172},"4":{"r":196,"g":192,"b":181},"5":{"r":193,"g":187,"b":173},"6":{"r":192,"g":186,"b":172},"7":{"r":196,"g":188,"b":179}},"right":{"0":{"r":196,"g":191,"b":185},"1":{"r":113,"g":108,"b":115},"2":{"r":69,"g":75,"b":88},"3":{"r":56,"g":51,"b":23}}}}
http://192.168.3.51:1925/ambilight/processed
{"layer1":{"left":{"0":{"r":145,"g":7,"b":32},"1":{"r":254,"g":75,"b":92},"2":{"r":102,"g":255,"b":158},"3":{"r":162,"g":245,"b":254}},"top":{"0":{"r":188,"g":247,"b":254},"1":{"r":222,"g":255,"b":254},"2":{"r":254,"g":231,"b":202},"3":{"r":254,"g":233,"b":186},"4":{"r":254,"g":240,"b":203},"5":{"r":254,"g":235,"b":184},"6":{"r":254,"g":234,"b":186},"7":{"r":254,"g":226,"b":197}},"right":{"0":{"r":254,"g":234,"b":213},"1":{"r":243,"g":213,"b":254},"2":{"r":133,"g":164,"b":254},"3":{"r":201,"g":164,"b":29}}}}
@wojtulab

This comment has been minimized.

Copy link

@wojtulab wojtulab commented Sep 29, 2017

hello, do you know how to send post message to simulate standby input?
I mean how to power off my tv remotly?

I found that new Philips TV's support https protocol like this one:
https://iptv:1926/key/Standby
But I can't send it. Wireshark can't trace traffic between android app and my tv on https.

@VonLatvala

This comment has been minimized.

Copy link

@VonLatvala VonLatvala commented Feb 8, 2018

@wojtulab A simple curl command like this will do the trick:
curl -X POST -d '{"key":"Standby"}' http://{IP_ADDRESS}:1925/6/input/key

So in essence, issue a POST request to /6/input/key with the body {"key":"Standby"}

As described here: http://jointspace.sourceforge.net/projectdata/documentation/jasonApi/1/doc/API-Method-input-key-POST.html [08.02.2018]
And the full documentation is located here: http://jointspace.sourceforge.net/projectdata/documentation/jasonApi/1/doc/API.html [08.02.2018]

I have these files saved offline in case they get taken down for some reason (ping me if they do).

@arzzen

This comment has been minimized.

Copy link

@arzzen arzzen commented Oct 20, 2018

hi everyone, you can use my implementation https://github.com/arzzen/philips-tv

@nstrelow

This comment has been minimized.

Copy link

@nstrelow nstrelow commented Oct 30, 2018

@lucasvdh

This comment has been minimized.

Copy link

@lucasvdh lucasvdh commented Nov 2, 2018

@arzzen you the best!

@ivandompe

This comment has been minimized.

Copy link

@ivandompe ivandompe commented Dec 11, 2018

Hi Guys,
I get an 55OLED803... really nice ;-) and I'm looking to find url command to control it. http://ip:1925/system and all other ambilight GET command are working on my TV, but not the other ones like /audio/voume. And I didin't succeed to POST any command, I tried also 1926 port. Not a lot of info trough the net.

@oscarb

This comment has been minimized.

Copy link

@oscarb oscarb commented Jan 3, 2019

@ivandompe I have the 55OLED803 and I was able to send POST requests and control my TV after first following the README here:
https://github.com/nstrelow/ha_philips_2016

@Stormbringer11

This comment has been minimized.

Copy link

@Stormbringer11 Stormbringer11 commented Apr 20, 2019

hello, thanks for the great description. I get a lot of things to work with. However, I really want to turn ambi and hue off and on. but unfortunately it never works. could you please help me. what is the right curl command for it?

@SchmuFoo

This comment has been minimized.

Copy link

@SchmuFoo SchmuFoo commented Dec 25, 2019

@Stormbringer11

I have an 58PUS7304/12 (2019) Modell and have installed the newest one which came a few days ago:

"2019er TVs mit Android TV 9 Pie (TPM191E: 1.2.173.7)"
https://toengel.net/philipsblog/2019/12/18/philips-neue-firmware-fuer-2019er-tvs-mit-android-tv-9-pie-tpm191e-1-2-173-7/

My focus is controlling the Ambilight which works fine, but what is not working is POST Standby and GETing Powerstate

Ambilight

loxberry@loxberry:~ $ curl -v -s -X POST -d {"power":"Off"} http://192.168.178.75:1925/6/ambilight/power
*   Trying 192.168.178.75...
* TCP_NODELAY set
* Connected to 192.168.178.75 (192.168.178.75) port 1925 (#0)
> POST /6/ambilight/power HTTP/1.1
> Host: 192.168.178.75:1925
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Length: 11
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 11 out of 11 bytes
< HTTP/1.1 200 OK
< Date: Wed, 25 Dec 2019 22:03:49 GMT
< Accept-Ranges: bytes
< Server: Restlet-Framework/2.3.12
< Access-Control-Allow-Origin: *
< Content-Length: 0
<
* Curl_http_done: called premature == 0
* Connection #0 to host 192.168.178.75 left intact
loxberry@loxberry:~ $ curl -v -s -X POST -d {"power":"On"} http://192.168.178.75:1925/6/ambilight/power
*   Trying 192.168.178.75...
* TCP_NODELAY set
* Connected to 192.168.178.75 (192.168.178.75) port 1925 (#0)
> POST /6/ambilight/power HTTP/1.1
> Host: 192.168.178.75:1925
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Length: 10
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 10 out of 10 bytes
< HTTP/1.1 200 OK
< Date: Wed, 25 Dec 2019 22:04:00 GMT
< Accept-Ranges: bytes
< Server: Restlet-Framework/2.3.12
< Access-Control-Allow-Origin: *
< Content-Length: 0
<
* Curl_http_done: called premature == 0
* Connection #0 to host 192.168.178.75 left intact
loxberry@loxberry:~ $

GETing Powerstate

loxberry@loxberry:~ $ curl -v -s http://192.168.178.75:1925/6/powerstate
*   Trying 192.168.178.75...
* TCP_NODELAY set
* Connected to 192.168.178.75 (192.168.178.75) port 1925 (#0)
> GET /6/powerstate HTTP/1.1
> Host: 192.168.178.75:1925
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Date: Wed, 25 Dec 2019 22:05:45 GMT
< Accept-Ranges: bytes
< Server: Restlet-Framework/2.3.12
< Content-Length: 439
< Content-Type: text/html; charset=UTF-8
<
<html>
<head>
   <title>Status page</title>
</head>
<body style="font-family: sans-serif;">
<p style="font-size: 1.2em;font-weight: bold;margin: 1em 0px;">Not Found</p>
<p>The server has not found anything matching the request URI</p>
<p>You can get technical details <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5">here</a>.<br>
Please continue your visit at our <a href="/">home page</a>.
</p>
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host 192.168.178.75 left intact

Standby

​​​​​​​loxberry@loxberry:~ $ curl -v -s -X POST -d {"key":"Standby"} http://192.168.178.75:1925/6/input/key
*   Trying 192.168.178.75...
* TCP_NODELAY set
* Connected to 192.168.178.75 (192.168.178.75) port 1925 (#0)
> POST /6/input/key HTTP/1.1
> Host: 192.168.178.75:1925
> User-Agent: curl/7.52.1
> Accept: */*
> Content-Length: 13
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 13 out of 13 bytes
< HTTP/1.1 404 Not Found
< Date: Wed, 25 Dec 2019 22:07:19 GMT
< Accept-Ranges: bytes
< Server: Restlet-Framework/2.3.12
< Content-Length: 439
< Content-Type: text/html; charset=UTF-8
<
<html>
<head>
   <title>Status page</title>
</head>
<body style="font-family: sans-serif;">
<p style="font-size: 1.2em;font-weight: bold;margin: 1em 0px;">Not Found</p>
<p>The server has not found anything matching the request URI</p>
<p>You can get technical details <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5">here</a>.<br>
Please continue your visit at our <a href="/">home page</a>.
</p>
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host 192.168.178.75 left intact
@SchmuFoo

This comment has been minimized.

Copy link

@SchmuFoo SchmuFoo commented Dec 25, 2019

P.S. with regard to the Ports and Protocols:

Luckily I was able to use the plain HTTP Socket at 1925 (For Ambilight ONLY) without any pairing or authentication on that AndroidTV Version 9.0 (!) - This confirms something I found on the web:

"That the API is on version 6 doesn’t necessarily mean that it uses port 1926 though. I’ve been in contact with someone else who has also been developing a Jointspace API client and has had contact with someone at Philips responsible for the API. What he says is that all Android TV’s should use port 1926 and all non-Android TV’s should use 1925. Also, apparently Android TV’s only support the /6/system endpoint on port 1925 to comply with older clients and should also work in 1926."

For most of the other stuff the API Level 6 with HTTPS and Authentication is needed :-/ I sniffed the connection between the official Philips TV Remote App, Decrypted the SSL and checked what the App is using when pressing Standby:

But this POST command is not working at plain 1925..

image

@marcelrv

This comment has been minimized.

Copy link
Owner Author

@marcelrv marcelrv commented Dec 27, 2019

thank @SchmuFoo
I did not know the Telerik Fiddler you use.... is very helpful in testing this stuff in windows

@skribb

This comment has been minimized.

Copy link

@skribb skribb commented Jan 5, 2020

after a few hours the TV's server refuses commands "No connection could be made because the target machine actively refused it"

if i kill the power to the TV (pull the cable) and restart the TV, it accepts commands again, for a while. does anyone know what this could be? I have a PUS6754 and i'm using Python to send commands
import httplib
key='{"key": "Standby"}'
h = httplib.HTTPConnection('192.168.0.xxx:1925')
h.request('POST','/6/input/key', key)

r = h.getresponse()

print r.read()
@SchmuFoo

This comment has been minimized.

Copy link

@SchmuFoo SchmuFoo commented Jan 13, 2020

after a few hours the TV's server refuses commands "No connection could be made because the target machine actively refused it"

if i kill the power to the TV (pull the cable) and restart the TV, it accepts commands again, for a while. does anyone know what this could be? I have a PUS6754 and i'm using Python to send commands
import httplib
key='{"key": "Standby"}'
h = httplib.HTTPConnection('192.168.0.xxx:1925')
h.request('POST','/6/input/key', key)

r = h.getresponse()

print r.read()

I have an similiar problem from time to time with my 58PUS7304/12 - Unfurtunately the PowerCord Off/On didnt solve it then. The only thing I can do is wait.

Verbose: Sometimes both API Ports are not open any more, then also the official Philips Remote App is not working any more. Didnt found a solution for that, only can wait then always until they are up again.

Working

On my 7304 from 2019 there IS an response (most of the time) on:
http://IP:1925/system
https://IP:1926/system
http://IP:1925/6/system
https://IP:1926/6/system

root@loxberry:/opt/loxberry# nmap -sT -P0 philipstv -p 1925,1926
Starting Nmap 7.40 ( https://nmap.org ) at 2019-12-25 00:51 CET
Nmap scan report for philipstv (192.168.178.75)
Host is up (0.0026s latency).
rDNS record for 192.168.178.75: PhilipsTV.fritz.box
PORT     STATE SERVICE
1925/tcp open  discovery-port
1926/tcp open  egs

Non working

`loxberry@loxberry:~ $ nmap -sT -P0 philipstv
Starting Nmap 7.40 ( https://nmap.org ) at 2020-01-12 20:26 CET
Nmap scan report for philipstv (192.168.178.75)
Host is up (0.0019s latency).
rDNS record for 192.168.178.75: PhilipsTV.fritz.box
Not shown: 995 closed ports
PORT      STATE SERVICE
8008/tcp  open  http
8009/tcp  open  ajp13
8443/tcp  open  https-alt
9000/tcp  open  cslistener
49153/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
loxberry@loxberry:~ $ nmap -sT -P0 philipstv -p 1925,1926
loxberry@loxberry:~ $ nmap -sT -P0 philipstv -p 1925,1926

Starting Nmap 7.40 ( https://nmap.org ) at 2020-01-12 20:09 CET
Nmap scan report for philipstv (192.168.178.75)
Host is up (0.00053s latency).
rDNS record for 192.168.178.75: PhilipsTV.fritz.box
PORT     STATE  SERVICE
1925/tcp closed discovery-port
1926/tcp closed egs

Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

@stereodruid

This comment has been minimized.

Copy link

@stereodruid stereodruid commented Feb 27, 2020

Is there a way to change the input source? My PhilipsTV is on Version 6.1, so this "/sources/current {"id":"hdm2"}" is not working for me. Any idea? Btw, on Port: https://IP:1926/6/, i can use some commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.