Telewizor PHILIPS rocznik >=2016

W sieci jest wiele materiałów na temat integracji TV PHILIPS z domoticz i home assistant. Niestety nie znalazłem rozwiązań realizujących moje dwie potrzeby. A jakie one są?

  1. Wyłączanie telewizora – np. wyjście z domu, sen etc.
  2. Włączanie telewizora z obsługą wakeonlan – np. uruchomienie wiadomości porannych w ramach pobudki.

Zaznaczę, że w moim przypadku źródłem sygnałów AV jest amplituner, więc mam trochę prościej.

W przypadku telewizorów PHILIPS w rocznikach >=2016 wymagana jest dodatkowa autentykacja urządzeń sterujących.

Przeprowadzamy ją za pomocą skryptu philps.py ja pobrałem go z stąd:

https://github.com/suborb/philips_android_tv/blob/master/philips.py

Skrypt uruchamiamy tak:

python philips.py --host 192.168.1.154 pair

gdzie 192.158.1.154 to adres ip naszego telewizora w sieci

Po uruchomieniu podajemy passcode (w telewizorze) a następnie odczytujemy username i password w postaci:


Username for subsequent calls is: 2xqDUOQfIjGxqL4M

Password for subsequent calls is: ccf9b46f9bb9a7efdf929fe8c0968cf1761bc5518fa8f99750096752b40217fd

Po takim sparowaniu za pomocą CURL możemy rozpocząć proces sterowania telewizorem.

Przykładowe komendy:


# wyłączenie:

curl -s --insecure --anyauth --user USER:PASS -H "Accept: application/json" -X POST -d "{\"key\":"Standby"}" <a href="https://192.168.1.154:1926/6/input/key">https://192.168.1.154:1926/6/input/key</a>

# status:

curl -s --insecure --anyauth --user USER:PASS -H "Accept: application/json" -X GET <a href="https://192.168.1.154:1926/6/system">https://192.168.1.154:1926/6/system</a>

#Audio, głośność

curl -s --insecure --anyauth --user USER:PASS -H "Accept: application/json" -X POST -d "{\"muted\":false,\"current\":0}" <a href="https://192.168.1.154:1926/6/audio/volume">https://192.168.1.154:1926/6/audio/volume</a>

# aktualny tryb pracy

curl -s --insecure --anyauth --user USER:PASS -H "Accept: application/json" -X GET <a href="https://192.168.1.154:1926/6/powerstate">https://192.168.1.154:1926/6/powerstate</a>

 

odpowiednio USER:PASS to w moim przypadku: 2xqDUOQfIjGxqL4M:ccf9b46f9bb9a7efdf929fe8c0968cf1761bc5518fa8f99750096752b40217fd

Więcej komend można znaleźć tu: http://jointspace.sourceforge.net/projectdata/documentation/jasonApi/1/doc/API.html

I wszystko by było fajnie, poza jedną małą rzeczą. Uśpionego PHILIPSa nie da wybudzić się za pomocą powyższych metod.

Z pomocą przychodzi pakiet WAKEONLAN. Instalacja:


sudo apt-get install wakeonlan

Tak więc jeżeli puścimy MAGIC PACKET (WAKEONLAN) na nasz TV PHILPS, odczekamy aż zacznie pingować i a następnie wywołamy komendę STANDBY – skutecznie włączymy nasze urządzenie.

Poniżej skrypt tv.sh w shellu realizujący powyższy proces:


#!/bin/bash

#setup
hostip=192.168.69.70
hostmac=70:af:24:11:9f:8b
user=bJA8dKn2zGOiOPCt
pass=dac73bd9961a8525a0e318b68002c5d6c93b89b310664152045ba1444c2a6304

#parametry

status=0
off=0
on=0
ha=0

# ha - home assistant support

while [ -n "$1" ]; do
case "$1" in
-status) status=1 ;;
-ha) ha=1 ;;
-on) on=1 ;;
-off) off=1 ;;
*) echo "$1 - nierozpoznany parametr" ;
esac
shift
done

if [ $ha = 1 ] && [ $status = 1 ] ; then
sleep 3
fi

getcmd="curl -s --max-time 2 --insecure --anyauth --user $user:$pass -H \"Accept: application/json\" -X GET https://$hostip:1926/6/CMD"
keycmd="curl -s --max-time 2 --insecure --anyauth --user $user:$pass -H \"Accept: application/json\" -X POST -d \"{\\\"key\\\":\"KEY\"}\" https://$hostip:1926/6/input/key"

getpowerstatecommand=${getcmd/CMD/powerstate}
jsonres=$(eval $getpowerstatecommand)
powerstate=$(jq -r '.powerstate' <<< ${jsonres})

#obsluga cmd

if [ -z "$powerstate" ] ; then
powerstate="Off"
fi

if [ $status = 1 ] ; then
if [ $ha = 1 ] ; then
if [ "$powerstate" == "On" ] ; then
exit 0
else
exit 1
fi
else
echo "$powerstate"
fi
fi

#tv jest wyłączony, robimy budzenie, potem włączenie
if [ $on = 1 ] && [ "$powerstate" == "Off" ] ; then
wakeonlan "$hostmac"
((count = 20))
while [[ $count -ne 0 ]] ; do
ping -c 1 "$hostip" > /dev/null
rc=$?
if [[ $rc -eq 0 ]] ; then
((count = 1))
fi
((count = count - 1))
done

if [[ $rc -eq 0 ]] ; then
sleep 5
cmd=${keycmd/KEY/Standby}
eval $cmd
fi
fi

if [ $on = 1 ] && [ "$powerstate" == "Standby" ] ; then
cmd=${keycmd/KEY/Standby}
eval $cmd
fi

if [ $off = 1 ] && [ "$powerstate" == "On" ] ; then
cmd=${keycmd/KEY/Standby}
eval $cmd
fi

Skrócona instrukcja:

Możliwe wywołania:
tv.sh -status : zwraca status aktualny telewizora
tv.sh -on : wlacza telewizor
tv.sh -off : wylacza telewizor

Potrzebne:

jq – JSON command utility (bo będę się pewnie więcej bawił JSONem)
wakeonlan – magic packet utility

Instalacja jq:

cd /tmp
wget https://github.com/stedolan/jq/releases/download/jq-1.5/jq-1.5.tar.gz
tar xfvz jq-1.5.tar.gz
cd jq-1.5
./configure && make && sudo make install

Instalacja wakeonlan:

apt-get install wakeonlan

 

Na koniec dla użytkowników HOME ASSISTANT kawałek z configuration.yaml

 

switch:
  platform: command_line
  switches:
    tv:
      command_on: "/home/pi/scripts/tv/tv.sh -on"
      command_off: "/home/pi/scripts/tv/tv.sh -off"
      command_state: "/home/pi/scripts/tv/tv.sh -status -ha"
      friendly_name: Telewizor PHILIPS

2 komentarze

  1. Widzę na jednym z załączonych grafik odczyt z czujników ciśnienia, temperatury, natężenia światła oraz wilgotności względnej. Można prosić o informację za pomocą jakich urządzeń te parametry są odczytywane?Pozdrawiam

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *