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

Zainspirowany skryptem znalezionym w necie postanowiłem uruchomić proces mierzący czas pinga, prędkość downloadu i uploadu mojego dostawcy internetu.

Konfiguracja w DOMOTICZ sprowadza się do zdefiniowana wirtualnych sensorów poprzez:

  1. KONFIGURACJA>SPRZĘT>DODAJ

  2. Na dodanym sprzęcie klikamy UTWÓRZ WIRTUALNE CZUJNIKI
  3. Dodajemy odpowiednio czujniki dla PING, DOWNLOAD, UPLOAD, wybierając typ czujnika CUSTOM SENSOR  a w etykiecie AXIS wprowadzamy jednostkę w której chcemy wykonywać pomiary – u mnie odpowiednio ms dla PING, i Mbit/s dla DOWNLOAD i UPLOAD

  4. Następnie z pozycji KONFIGURACJA>URZĄDZENIA odczytujemy IDXy naszych czujników – będą potrzebne do konfiguracji skryptu.

Do pomiaru prędkości złącza wykorzystamy pakiet speedtest. Jego instalacja sprowadza się do uruchomienia poniższej komendy.

sudo apt-get install speedtest-cli

Uruchomienie standardowe poprzez komendę speedtest zwraca komplet potrzebnych informacji.
Uruchomienie go z parametrem –simple ograniczy ilość zwracanych danych, co pozwoli nam łatwiej je obrobić.
Do obróbki wykorzystałem linuxowy program sed

Kompletny skrypt zamieszczam poniżej:

#!/bin/bash

#setup
pingidx=47
downloadidx=45
uploadidx=46
</pre>
#pobieranie danych
speedtest --source 192.168.1.101 --simple > speedtest.dat
ping=$(sed -n -E '1s/Ping: | ms//gp' speedtest.dat)
download=$(sed -n -E '2s/Download: | Mbit\/s//gp' speedtest.dat)
upload=$(sed -n -E '3s/Upload: | Mbit\/s//gp' speedtest.dat)

echo $ping
echo $download
echo $upload

curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$pingidx&svalue=$ping"
curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$downloadidx&svalue=$download"
curl -s -i -H "Accept: application/json" "http://$user:$password@$host:$port/json.htm?type=command&param=udevice&idx=$uploadidx&svalue=$upload"

sed w dużym skrócie potrafi odpowiednio manipulować tekstami, w naszym przypadku wyciąga potrzebne dane z rezultatu zwracanego przez speedtest. Spreparowane dane  następnie przysyłamy do systemu DOMOTICZ w wykorzystaniem jego API. Oczywiście powyższy skrypt musicie zmodyfikować poprzez wprowadzenie własnych IDXów i adresu DOMOTICZ.

Aby uruchomić skrypt musimy mu jeszcze nadać odpowiednie uprawnienia poprzez wydanie komendy:

chmod +x speedtest.sh

(mój plik nazywa się speedtest.sh)

Na koniec aby to okresowo sprawdzać prędkość złącza musimy włączyć harmonogram odpalania skryptu.

Realizujemy to poprzez wrzucenie odpowiedniego wpisu do crontaba. Tak więc:

1. Uruchamiamy crontaba:

crontab -e

2. Dodajemy nowy wpis:

0 * * * * /home/pi/domoticz/scripts/shell/speedtest.sh

Czyli w moim przypadku skrypt będzie uruchamiany w każdej zerowej minucie godziny – czyli co godzine;-).

Więcej o harmonogramie w crontabie możecie znaleźć TU

Efekt końcowy na obrazkach poniżej:-)

Będąc na co dzień użytkownikiem systemu MS Windows 10 zachwycam się prostotą pewnych rzeczy na raspberry.

Jedną z nich jest wysyłanie wiadomości przez aplikację PUSHBULLET za pomocą basha.

Jak to się robi?

curl --silent -u """Twoj_APIKey"":" -d type="note" -d body="treść wiadomości" -d title="title wiadomości" 'https://api.pushbullet.com/v2/pushes'

Oczywiście wcześniej należy zainstalować darmową aplikację PUSHBULLET oraz w miejscu Twoj_APIKey wprowadzić wartość podaną przez pushbulleta.

Jak uzyskać APIKEY na rysunku poniżej.

 

 

 

 

Dostaliśmy w prezencie dekoracyjne kule LED w kolorze białym. Uznaliśmy, że skoro posiadają pewien poziom wodoodporności ich miejsce powinno być na balkonie.

Lampki same w sobie nie posiadają włącznika, a uruchomienie ich następuje przez umieszczenie wtyczki w gniazdku. Proste i niezawodne rozwiązanie.

No zaraz, ale miało być inteligentnie.

Cel

Po zmroku lampki mają się zapalić, odczekać 2-3 godziny po których powinny się samoczynnie zgasić.

Instalacja

Co będzie potrzebne?

  • Lampki (lidl|bierdornka) ~35pln
  • Przełącznik SONOFF BASIC (aliexpress) ~20pln
  • Obudowa wodoodporna (aliexpress) ~15pln
  • Konwerter USB to TTL CP2102 Arduino (allegro) ~12pln
  • Narzędzia (kabelki, lutownica, cyna)
  • Oprogramowanie alternatywne do SONOFF BASIC np. ESPEASY, AFE
  • NodeMCU Flasher

Z uwagi na patriotyzm postanowiłem dać szansę polskiemu alternatywnemu oprogramowaniu –  AFE .

Dokładny opis wgrania softu znajduje się pod linkiem https://www.smartnydom.pl/firmware-sonoff/instalacja/

W moim przypadku urządzenie po zmianie softu nie działało prawidłowo. Wszystkie problemy rozwiązało wyczyszczenie pamięci SONOFFa przez wgranie tzw blanka. Instrukcja wgrywania do pobrania TU

Jeżeli nie czujesz się na siłach w starciu z lutownicą i nie masz czasu na rozwiązywanie ewentualnych problemów  – możesz zakupić SONOFFa na allegro już z wgranym oprogramowaniem lub zamówić jego wgranie do posiadanych sztuk.

Konfiguracja

Po pierwszym uruchomieniu SONOFFa z nowym oprogramowaniem rozpoczyna on pracę w trybie ACCESS POINT udostępniając otwartą sieć o nazwie AFE-Device

Postępujemy wg schematu:

  • Podłączamy się do sieci AFE-Device
  • W przeglądarce odpalamy adres http://192.168.5.1
  • W ustawieniach konfigurujemy na razie wyłącznie parametry podłączenia do naszej sieci (to wystarczy)
  • Zapisujemy konfigurację klikając [Zapisz konfigurację]

Warto przypisać urządzeniu adres IP poprzez ustawienia DHCP na routerze, lub bezpośrednio w konfiguracji SONOFFa.

Po restarcie urządzenia stanie się ono widoczne w naszej sieci pod adresem skonfigurowanym w sekcji Sieć Wifi

Konfigurację systemu DOMOTICZ przeprowadzamy według poniższej instrukcji:

  1. KONFIGURACJA>SPRZĘT>DODAJ dodajemy nowy sprzęt typu Dummy (Does nothing, use for virtual switches only)  nazywając go np. włączniki sonoff



  2. Klikając Utwórz wirtualne czujniki dodajemy nowe urządzenie o nazwie pod jaką będzie widoczne w naszym systemie i typie “Przełącznik”



  3. Odczytujemy i zapamiętujemy IDX z poziomu KONFIGURACJA>URZĄDZENIA.



  4. Oznaczamy nasze urządzenie jako używane, poprzez kliknięcie zielonej strzałeczki.
  5. Przechodzimy do opcji z menu głównego PRZEŁĄCZKI
  6. Klikając EDYCJA modyfikujemy pola (oczywiście podając własny adres IP urządzenia)
    WŁĄCZ AKCJĘ: http://192.168.1.200/?device=relay&name=switch&command=on&source=domoticz
    WYŁĄCZ AKCJĘ: http://192.168.1.200/?device=relay&name=switch&command=off&source=domoticz

 

Po tej operacji nasz przełącznik będzie już widoczny z poziomu systemu DOMOTICZ a co za tym idzie będzie go można włączać z zdalnie.

Pozostało jeszcze skonfigurowanie komunikacji w kierunku SONOFF > DOMOTICZ. Chcielibyśmy mieć możliwość informowania systemu DOMOTICZ o ewentualnie analogowym przełączeniu SONOFFa.

Realizujemy to poprzez:

  1. Wchodzimy w ustawienia oprogramowania AFE wpisując w przeglądarce adres IP przełącznika.
  2. W opcjach MENU>URZĄDZENIE zaznaczamy opcję Domoticz API włączone?


  3. W opcjach MENU>PRZEKAŹNIK ustawiamy wartość IDX w Domoticz* wartością z DOMOTICZ

  4. Zapisujemy ustawienia klikając MENU>ZAPISZ KONFIGURACJĘ

 

Tak spreparowane urządzenie możemy podłączyć pod sceny w systemie DOMOTICZ i wieczorami cieszyć się oświetleniem balkonu.