Alexa i problem z odczytywaniem zmian po stronie HABridge

Usssss… 

Ostatnie godziny spędzone z Alexą i HABridge były bardzo stresujące…
Przeniosłem cały system Home Assistant w nowe miejsce, na nowej instalacji DietPi, w kontenerze Dockerowym. Chciałem dodać nowe elementy w HABridge, trochę porządku zrobić. I zaciąłem się na dwa dni :/
Skasowałem listę przystkich urządzeń, wybrałem Discover zaczęły się cuda. Czego bym nie robił, jak nie kombinował – Alexa ciągle odczytywała mi poprzednie urządzenia, podpinała dziwne ID pod nie – ogólnie dramat. Poprosiłem nawet mojego dobrego kolegę (pozdrawiam Arka), speca od sieci i Linuxa aby pomógł mi zidentyfikować problem, bo myślałem, że gdzieś, jakimś cudem zainstalowałem osobną instancję, albo konfiguracja HABridge jest odczytywana ze złego miejsca. Sprawdziliśmy każde IP w moim domu – nic.
Bliski rozpaczy wpadłem na pomysł, aby ręcznie skasować te kilka starych urządzeń przypisanych w konfiguracji Alexy jedno po drugim i nagle pomogło! Poprawnie zaczytała kilka testowych urządzeń dodanych do HABridge.

Mission accomplished. Dziękuję Arkowi za pomoc!

Home Assistant, Alexa oraz HABridge. Ufff – uruchomiłem!

Dzień dobry. 
Dylematów przy rezygnacji z Domoticz było kilka. Między innymi RFLink (to już się udało zrobić) oraz integracja z Amazon Alexa. Mam ją zrobioną w dość prosty, ale w zupełności wystarczający sposób – przy pomocy HABridge – http://blog.asobczak.pl/2017/11/02/serwis-alexa-integracja-z-domoticz/
Tak przy okazji – to już prawie trzy lata, ależ ten czas leci…
Zasada jest ta sama – HABridge emuluje Hue Lights firmy Philips, pozwalając sterować włącznikami światła, gniazdkami, itp.
Zmienił się sposób instalacji JDK i teraz wygląda to tak:
sudo apt install default-jdk
Hint: na Ubuntu na Intel NUC plik konfiguracyjny wygląda tak:
[Unit]
Description=HA Bridge
Wants=network.target
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/cezar/habridge
ExecStart=/usr/lib/jvm/java-8-openjdk-amd64/bin/java -jar -Dconfig.file=/home/cezar/habridge/data/habridge.config /home/cezar/habridge/ha-bridge.jar
[Install]
WantedBy=multi-user.target

Pierwsza sprawa do zrobienia – wygenerowanie klucza w Home Assistant, który można później używać w HABridge. Taki uniwersalny, coś w stylu tokenów Google App. Ten to wygenerowany klucz wstawiamy w sekcję konfiguracji HABridge.

Następnie, po restarcie HABridge będziemy mieli dostęp do urządzeń Home Assistant:
Wybieramy Build Item i urządzenia z Home Assistant pojawiają się w HABridge.
Co ważne, można przez https://github.com/custom-components/alexa_media_player (dostępny w HACS) zmusić Alexę do przekazywania nam głosowych komunikatów systemowych. Niestety, da się zrobić wyłącznie przez notyfikacje, ale coś za coś. W sumie to wystarczające do większości zastosowań.
notify:
  – platform: alexa_media
    name: alexa_media
Podczas konfigurowania integracji trzeba podać namiary na konto amazon.
Przykładowe automatyzacje:
– id: '1588278306126′
  alias: Światła – Wyłącz przed domem o 22
  description: ”
  trigger:
  – at: ’22:00′
    platform: time
  condition:
  – condition: state
    entity_id: switch.sonoff_power
    state: 'on'
  action:
  – data: {}
    entity_id: switch.sonoff_power
    service: switch.turn_off
  – data:
      message: HA – wyłączyłem światła przed domem
    service: notify.cezar
  – data:
      data:
        method: all
        type: announce
      message: <amazon:effect name=’whispered'>Lights outside are off</amazon:effect>
      title: Lights outisde
    service: notify.alexa_media_adam_s_echo_dot

– id: light_turn_on_lights_outside
  alias: Światła – Włącz godzinę po zachodzie słońca
  description: Włącz światło przed domem godzinę po zachodzie słońca i powiadom mnie
  trigger:
  – event: sunset
    offset: +01:00
    platform: sun
  condition:
  – condition: state
    entity_id: switch.sonoff_power
    state: 'off'
  action:
  – entity_id: switch.sonoff_power
    service: switch.turn_on
  – data:
      message: HA – światła przed domem włączone
    service: notify.cezar
  – data:
      data:
        method: all
        type: announce
      message: Lights outside are on
      title: Lights outisde
    service: notify.alexa_media_adam_s_echo_dot
Dla dzieci, żeby się trochę pośmiały i zobaczyły na żywym przykładzie te całe automatyzacje stworzyłem jeszcze jedną – po włączeniu światła Alexa wydaje ryk lwa 😀
– id: '1588281346963′
  alias: AleJaja
  description: ”
  trigger:
  – entity_id: switch.wall_switch_right_158d0001dbe288
    from: 'off'
    platform: state
    to: 'on'
  condition: []
  action:
  – data: {}
    service: script.roar_alexa

Aktualizacja HABridge

Kilka dni temu wszedłem na stronę habridge i zauważyłem, że jest nowa wersja. Wypadałoby w takim razie zaktualizować to, co już mam. Nasunęło się pytanie – Jak?

Po pierwsze – najnowsza wersja jest tutaj: https://github.com/bwssytems/ha-bridge/releases

Zatrzymujemy habridge.

Jeżeli trzymaliście się instrukcji (po poprawkach!) przedstawionej tutaj: https://cezarowy.blogspot.com/2017/11/serwis-alexa-integracja-z-domoticz.html

to wystarczy zrobić poniższe czynności.

sudo systemctl stop habridge

cd habridge

Powyższe – zależnie od tego gdzie zainstalowaliście habridge. U mnie w /home/pi/.

wget https://github.com/bwssytems/ha-bridge/releases/download/v{VERSION}/ha-bridge-{VERSION}.jar

Czyli w przypadku wersji 5.2 będzie to:

wget https://github.com/bwssytems/ha-bridge/releases/download/v5.2.0/ha-bridge-5.2.0.jar

mv ha-bridge-{VERSION}.jar ha-bridge.jar

sudo systemctl start habridge

I mamy aktualizację gotową.

Aktualizacja! Jeżeli z jakiegokolwiek powodu stracicie połączenie na linii Alexa <-> HABridge – w pierwszej kolejności sprawdźcie jaki macie podany adres UPNP w konfiguracji HABridge. Czasem dopisuje się tam inny adres Raspberry Pi – u mnie tak jest w przypadku podania sztywnego adresu IP. Nie wiem czemu Malina zgłasza się pod dwoma – ale to podobno znany błąd.

Raspberry Pi, Raspbian, Domoticz – od zera do bohatera…

W kolejnym (długim!) poście pozwolę sobie zająć się przygotowaniem Raspberry Pi do działania.

Pomocy na różnych stronach jest mnóstwo, przesadą byłby kolejny szczegółowy poradnik, skupię się więc wyłącznie na esencji i najważniejszych tematach, ważnych dla mnie z punktu widzenia prostej automatyki domowej za pomocą Malinki. Z czasem wpis się może zmieniać, ponieważ ciągle coś nowego dochodzi. Ostatnio na przykład HABridge, skoro już Alexa się zadomowiła.

Wpis jest długi i opisuje wiele tematów, może znajdziecie coś dla siebie.

Kwestia wyboru sposobu instalacji Raspbiana zależy już od Was, swego czasu korzystałem z NOOBS LITE, który wszelkie potrzebne do instalacji komponenty pobiera na bieżąco z sieci.

Ostatnio wolę jednak mieć przygotowany obraz jako plik .img i za pośrednictwem Win32 Disk Imager szybko wrzucić go na kartę.

Chwila podstaw, która mam nadzieję pomoże innym wkroczyć w ten świat.

Instrukcja – jak szybko postawić system, zrobić podstawową konfigurację, zrobić kopię bezpieczeństwa na przyszłość.

Podstawowa strona: raspberrypi.org. Tam powinien się udać każdy początkujący. W zależności od potrzeb mamy:
1. Możliwości ściągnięcia instalatora Noobs
– wersja pełna z danymi systemów od razu dostępnymi
– wersja Lite, zajmująca 40 Mb, resztę danych potrzebnych dla różnych systemów ściąga bezpośrednio z sieci
2. w przypadku instalacji Raspbiana – ostatnia dostępna stabilna wersja (w czasie pisania posta – Stretch), pełna ze środowiskiem graficznym albo Lite

Ja opieram się na pełnym obrazie Jessie (czyli poprzednim do Stretch) – jest to dla mnie osobiście najwygodniejsze i w mojej opinii ta wersja jest najbardziej stabilna. Wszelkie opisane tutaj programy i instalacje działają na każdej z wersji. Oprócz SSL w Domoticz na wersji Stretch, bez czego nie uruchomimy go! Wszystkie obrazy Raspbiana można pobrać z: http://downloads.raspberrypi.org/raspbian/images/.

W tym wpisie zajmiemy się:
– ogólnymi komendami do wykonania
– raspi-config
– Interface sieciowy
– Mapowanie pendrive + ntfs-3g
– Konfiguracja Samba
– Instalacja FTP
– Win32DiskImager

Nie opisuję każdej komendy dokładnie – poradników w sieci jest na tyle dużo, że mija się to z celem.

Jak zaczynamy?

– Pobieramy obraz systemu ze strony Raspberry Pi
– rozpakowujemy
– ja używam Win32 Disk Imager aby wrzucić do na kartę SD
– po zgraniu podłączam klawiaturę i kabel HDMI do TV

Do pierwszych dwóch punktów musimy podpiąć klawiaturę bezpośrednio do Raspberry – ssh (do zdalnego połączenia) jest domyślnie wyłączone za względów bezpieczeństwa. Później możemy się przenieść na komputer – będzie bardziej komfortowo.

1. Najważniejsza sprawa zanim cokolwiek rozpoczniemy. Zawsze, gdziekolwiek – zmiana hasła!

passwd

2. Konfiguracja

sudo raspi-config

Domyślnie (od pewnego czasu, ze względów bezpieczeństwa) SSH jest wyłączone, musimy je włączyć. Przynajmniej jeżeli chcemy dostać się do Pi zdalnie, nie klęcząc przed telewizorem czy monitorem.

Następnie dobrze ustawić strefę czasową.

Wybieramy Europe -> Warsaw

Ja jeszcze osobiście ustawiam Memory split na minimum.

Oraz Hostname na swój.

3. Kolejny temat to aktualizacja Raspbiana i komponentów, które mamy zainstalowane. Oczywiście, z wpiętym kablem z routera.

sudo apt-get update
sudo apt-get upgrade

4. Następnie – konfiguracja sieci WiFi, bo głupio tak z kablami Malina wygląda 😉 …

Ja osobiście używam edytora nano. Przy wyjściu, w celu zapisu – Ctrl + X, Y(es), potwierdzamy nazwę pliku.

sudo nano /etc/network/interfaces

Ja chciałem mieć połączenie przez Wifi na stałym adresie IP (192.168.1.200, czyli warto to skonfigurować na routerze!), a w przypadku podłączenia kabla sieciowego adres z DHCP (czyli z automatu), wpakowałem tam więc:

auto wlan0

iface lo inet loopback

iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.100
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Konfiguracja połączenia z routerem odbywa się w pliku wpa_supplicant.conf.

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

I tutaj:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid=”Cezar”
        psk=”TwojeHaslo”
        proto=RSN
        key_mgmt=WPA-PSK
}

5. Warto byłoby teraz zainstalować dodatkowe programy. Mnie się przydaje Samba (dostęp do udostępnionych plików), obsługa NTFS, FTP, Midnight Commander oraz (do Domoticz) arp-scan i speedtest.

sudo apt-get install samba samba-common-bin cifs-utils ntfs-3g mc proftpd arp-scan speedtest-cli -y

6. Skoro już mam czego potrzebuję – najwyższa pora na Domoticz! Przypominam, że instaluję na Jessie, także nie mam problemu z ssl na wersji Stretch!

sudo curl -L install.domoticz.com | bash

7. Tworzenie wirtualnych folderów. Mam podpięty pendrive, na który nie dość, że lądują backupy Domoticz, to jeszcze są piosenki córki i syna. Trzeba go podpiąć, jeżeli Raspbian sam go nie wykrywa.

Możemy się wspomóc:
sudo fdisk -l
oraz
df -h

Tworzenie wirtualnego folderu:

sudo mkdir /media/Dysk

U mnie pendrive pojawił się na sda, więc:

sudo mount -t auto /dev/sda /media/Dysk

Edycja fstab, gdzie znajdują się informacje o mapowanych dyskach, folderach.

sudo nano /etc/fstab

Dodaję na końcu

/dev/sda /media/Dysk ntfs-3g nofail,defaults 0 0

8. Konfiguracja Samba (czyli dostępu do plików)

Zainstalowaliśmy ją już wcześniej (punkt 5), teraz trzeba skonfigurować. Ot, taki prosty NAS. Bardzo prosty…

Dodajemy użytkownika/użytkowników:

sudo useradd Cezar
sudo smbpasswd -a Cezar

Uruchamiamy:

sudo nano /etc/samba/smb.conf

I konfigurujemy. Oczywiście wszelkie foldery, nazwy – dostosowujemy do siebie.

[global]

#PL znaki w SMB
display charset = utf-8
unix charset = utf-8
dos charset = 852

workgroup = DOM
server string = Serwer NAS
wins support = yes
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0

####### Authentication #######
security = user
map to guest = Bad User

[homes]
comment = Home Directories
browseable = no
read only = no
valid users = %S

[dysk_public]
comment = Server NAS 4 All
path = /media/Dysk/
public = yes
only guest = no
writable = yes

Ostatnie trzy parametry to: Publiczny – tak, Tylko goście – nie, Zapisywalny – tak.

Oczywiście dostosujcie go pod siebie, można definiować foldery dla użytkowników, nadawać uprawnienia, itp. itd. Dla mnie było ważne, aby każdy w domu mógł tam łatwo się dostać.

Restart serwisu i powinno działać:

sudo /etc/init.d/samba restart

8. Następnie nadanie praw do wykonania dla skryptu robiącego kopię baz i folderu www Domoticz.

sudo chmod +x /home/pi/domoticz/scripts/domoticz_backup.sh

9. Bez Dashticz sobie już życia nie wyobrażam…

10. Zdalny dostęp do Raspberry i Domoticz, czyli Dataplicity. Ale to już opisywałem wcześniej.

11. bluez – potrzebny do Xiaomi Mi Flora

12. Logitech, a dokładnie instalacja odtwarzacza Squeezelite

13. HABridge

Po około 1.5 godziny mamy kompletny system.

Teraz sudo poweroff, kopia karty w Win32 Disk Imager i jesteśmy bezpieczni. W razie rozsypania się danych na karcie – szybki restore i jesteśmy gotowi do działania.

WAŻNE! Komenda Czytaj zapisuje dane Z KARTY NA DYSK, Zapisz – odwrotnie – Z DYSKU NA KARTĘ, czyli Zapisz może Wam namieszać, jeżeli nie używacie jej rozważnie!

Serwis Alexa – integracja z Domoticz

Ha! Dzisiaj samo sedno – połączenie serwisu Alexa z Domoticz. Wersja trudniejsza, przez HABridge. Jest skill w postaci Controlicz, ale nie mam wystawionego Domoticz w prosty sposób na 'świat', dlatego zrobiłem połączenie w inny sposób. Wydaje mi się, że lepszy…

Instalacja HABridge (system emulujący oświetlenie Philips Hue) jest banalnie prosta.

Najpierw musimy się upewnić, że odpowiednia wersja Java jest zainstalowana. Powinna być, ale w razie czego:

sudo apt-get update && sudo apt-get install oracle-java8-jdk

Jaka jest najnowsza wersja HABridge możemy dowiedzieć się tutaj:

https://github.com/bwssytems/ha-bridge/releases

Później kilka komend:

cd /home/pi/
mkdir habridge
cd habridge

wget https://github.com/bwssytems/ha-bridge/releases/download/<your version1>/ha-bridge-<your version2>.jar

Czyli w przypadku dla aktualnej wersji na 01.11.2017 wygląda to tak:

wget https://github.com/bwssytems/ha-bridge/releases/download/v4.5.6/ha-bridge-4.5.6.jar

Edit: lepiej będzie na przyszłość (w przypadku aktualizacji) zrobić jak poniżej.

mv ha-bridge-{VERSION}.jar ha-bridge.jar

Przed startem musimy stworzyć plik konfiguracyjny:

sudo nano starthabridge.sh

cd /home/pi/habridge
rm /home/pi/habridge/habridge-log.txt
nohup sudo java -jar /home/pi/habridge/ha-bridge.jar > /home/pi/habridge/habridge-log.txt 2>&1 &
chmod 777 /home/pi/habridge/habridge-log.txt

WAŻNE. Z tego co wyczytałem, HABridge powinien się uruchomić na porcie 8080, ale z jakiegoś powodu zrobił to na 80, a tam mam Domoticz. Musiałem podać port ręcznie, używając parametru:
-Dserver.port=8080

Czyli u mnie zawartość pliku wygląda tak:

cd /home/pi/habridge
rm /home/pi/habridge/habridge-log.txt
nohup sudo java -jar -Dserver.port=8080 /home/pi/habridge/ha-bridge.jar > /home/pi/habridge/habridge-log.txt 2>&1 &
chmod 777 /home/pi/habridge/habridge-log.txt

Ustawienie praw do uruchomienia:

sudo chmod u+x starthabridge.sh

Serwis uruchamiamy komendą

sudo ./starthabridge.sh

Sprawdzić czy działa możemy poleceniem

tail -f habridge-log.txt

Dobrze by było również, aby uruchamiał się przy starcie, to możemy zrobić edytując:

cd /etc/systemd/system

sudo nano habridge.service


I tam wstawić:
[Unit]
Description=HA Bridge
Wants=network.target
After=network.target

[Service]

Type=simple
WorkingDirectory=/home/pi/habridge
ExecStart=/usr/bin/java -jar -Dconfig.file=/home/pi/habridge/data/habridge.config /home/pi/habridge/ha-bridge.jar

[Install]

WantedBy=multi-user.target

Później po kolei:
sudo systemctl daemon-reload

sudo systemctl start habridge.service


sudo systemctl enable habridge.service

Po wystartowaniu musimy przejść do przeglądarki i teraz zaczyna się prawdziwa zabawa!

Wita nas pusta strona HABridge, którą będziemy teraz wypełniać.

Przechodzimy na Bridge Control

Przechodzimy na dół do sekcji Domoticz Names and IP Addresses:

Tam dodajemy swoje dane serwera Domoticz:

I, BARDZO WAŻNE, wracamy na górę i zapisujemy.

Jeżeli wszystko dobrze zrobiliście (wierzę w Was, także na pewno tak 😉 ), na zakładce Domoticz Devices znajdą się Wasze urządzenia. To już ogromny sukces!

Teraz, po wejściu za pomocą przycisku Build na konkretny element (lub, jeżeli macie urządzenia nazwane po angielsku – można je zaznaczyć i wybrać Bulk Add), na początek wybieramy jego nazwę w polu Name, którą będziemy używać z Alexą.

Czyli, coś przyjaznego do wymówienia 😀

Najpierw zabrałem się do opisywania tego dość bogato, kończąc jednak na prostych, szybkich frazach. Inaczej mówi się 'Alexa, turn living room lights on', a inaczej 'Alexa, living on'. Ale akurat tutaj Alexa jest nam bardzo pomocna i w większości wypadków rozpozna różne frazy. W sumie 'Alexa, living room on, 'Alexa, turn living room on', 'Alexa turn living room lights on' – da ten sam efekt.

W tym przykładzie integruję Yeelight, którą mam dodaną w Domoticz z HABridge.

HABridge rozpozna typ i zaproponuje komendę JSON do włączenia i wyłączenia urządzeń.
Miałem przez godzinę zgryz z komendą 'dim', czyli rozjaśnianiem i ściemnianiem. Może coś źle zrobiłem przy definicji w Domoticz, może jakiś inny powód, ale w HABridge musiałem podać w Dim Items, komendę w Target Item ręcznie. Jak poniżej na zrzucie ekranu. Dzięki parametrowi ${intensity.percent} możemy zadać Alexie żądany poziom jasności.

Chwilowo tyle. Przechodzimy do serwisu Alexa albo wydajemy jej polecenie 'Alexa, discover devices'. Dla jasności przestawiam również proces rozpoznawania na stronie, który ogranicza się do wybrania Discover.

TADAM! Już można wołać 'Alexa, left light on', 'Alexa, left light off,' 'Alexa, dim left light to 20′. W tym ostatnim przykładzie odnosimy się do procentów, czyli efekt ten sam jak przy ’20 percent'.

Warto również od razu zrobić backup bazy danych HABridge. Jest dostępny na dole strony, przy pracy z ekranem Home.

Ja dodałem sobie również komendę do skryptu, który co noc robi ma na pendrive backup bazy, skryptów i folderu www Domoticz.

Identycznie jak żarówki zintegrowałem sobie zdalne gniazdka sieciowe. Nieważne czy 433MHz, Xiaomi, czy inne – po prostu działa po wypowiedzeniu komendy.