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ą?
- Wyłączanie telewizora – np. wyjście z domu, sen etc.
- 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
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
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
Xiaomi, bramka +
1. czujnik temperatury (dla temp., ciśnienie, wilgotność)
2. czujnik ruchu (dla ruchu:-) i oświetlenia) – werjsa starsza, ta bez nóżki działa u mnie lepiej
Dodatkowo można wykorzystać kontaktrony, przyciski, polecam.
Na promocjach można wyłapać te czujki po taniości.
więcej tu: https://www.mi.com/global/mi-smart-sensor-set/