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

Home Assistant – automatyzacje

Powitać!
W Smart Home (będę się upierał aby był to odpowiednik Sterowany dom a nie Inteligentny 😉 ) jedną z najważniejszych cech jest wyzwalanie pewnych zachowań na podstawie innych. Na przykład: 'Powiadom jeżeli pobór prądu jest większy niż założony, jeżeli nie ma mnie w domu', 'Obniż temperaturę na głowicy jeżeli okno jest otwarte dłużej niż 3 minuty', 'Zapal światła przed domem, jeżeli robi się ciemno'.
Do tego w Home Assistant, w podstawowym zakresie, służą Automations (za nim jest Node-RED, ale to na przyszłość). Mają kilka parametrów, jak na przykład warunki wyzwolenia, warunki ograniczające i finalnie to, co chcemy uruchomić.

Przyciskamy 'Duży, pomarańczowy plus' i wybieramy:
W sekcji Triggers – czyli 'wyzwalaczy' zdarzenia
– nazwę
– ewentualny opis
– trigger type: Sun, Sunset, Offset

Conditions, czyli w tym przypadku włącz światło tylko jeżeli jest wyłączone:

No i w końcu Actions – co ma się dziać:
– u mnie włącz Sonoff
– wyślij powiadomienie

Ostatecznie lądują zapisane w pliku automations.yaml, gdzie możne je dalej ręcznie edytować.

Jak na przykład:

– 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: '1588675313820′
  alias: Motyw – Ustawienie motywu na starcie HA
  description: ”
  trigger:
  – event: start
    platform: homeassistant
  condition:
  – after: sunrise
    after_offset: +00:30:00
    condition: sun
  action:
  – data:
      name: default
    service: frontend.set_theme

Home Assistant i integracja z tunerem NC+

Przeglądając zasoby internetu pod kątem Home Assistant znalazłem ciekawą integrację dotyczącą tunera NC+.

Wystarczy ściągnąć kod ze strony https://github.com/mercs600/ha-adb_service i umieścić go w folderze configcustom_components:

Po dodaniu w configuration.yaml integracji:

adb_service:
  host: 192.168.1.106

Możemy już dodać pięknego pilota na naszej stronie w kodzie ui-lovelace.yaml:

Kod jest podany w linku na początku artykułu.

Home Assistant – motywy wyglądu

Motywy. Fajny bajer, uzupełniający nasz pulpit.
Nie ma się co rozpisywać, ściągnąć je można przez HACS, zakładka Themes. Po zainstalowaniu znajdą się w folderze jak poniżej.
Konieczne jest skonfigurowanie ścieżki pobierania w configuration.yaml:

frontend:
  themes: !include_dir_merge_named themes

Na tej podstawie zdefiniowałem sobie kilka automatyzacji, które włączają tryb nocny po zachodzie słońca i domyślny, dzienny, pół godziny po wschodzie. Do tego ustawienie odpowiedniego w przypadku restartu Home Assistant.

– id: '1588675313820′
  alias: Motyw – Ustawienie motywu na starcie HA
  description: ”
  trigger:
  – event: start
    platform: homeassistant
  condition:
  – after: sunrise
    after_offset: +00:30:00
    condition: sun
  action:
  – data:
      name: default
    service: frontend.set_theme
– id: '1588675552870′
  alias: Motyw – Ciemny po zachodzie słońca
  description: ”
  trigger:
  – event: sunset
    platform: sun
  condition: []
  action:
  – data:
      name: blue_night
    service: frontend.set_theme
– id: '1588675771948′
  alias: Motyw – Jasny po wschodzie słońca
  description: ”
  trigger:
  – event: sunrise
    offset: +00:30:00
    platform: sun
  condition: []
  action:
  – data:
      name: default
    service: frontend.set_theme
– id: '1588675991329′
  alias: Motyw – Ciemny po starcie HA
  description: ”
  trigger:
  – event: start
    platform: homeassistant
  condition:
  – after: sunset
    condition: sun
  action:
  – data:
      name: blue_night
    service: frontend.set_theme
I mamy jak na zrzutach poniżej:

Home Assistant oraz RFLink

Jako że podjąłem decyzję o przejściu na Home Assistant (a przynajmniej zintegrowaniu wszystkich elementów z Domoticz w HA) musiałem jakoś podejść do tematu RFLink, czyli w moim przypadku transmisji na paśmie 433MHz.. Na początku mojej 'Drogi Smart' był to całkiem popularny i, co ważne, tani standard.

Opisane (http://cezarowy.blogspot.com/2017/09/rflink.html) elementy to na przykład gniazdka i termometry. O ile z nich w większości zrezygnowałem (gniazdka mając transmisję jednokierunkową nigdy nie dawały pewności, że są wyłączone/włączone), to zostało mi kilka ważnych elementów:

– Owl Micro + do monitorowania zużycia energii –
http://cezarowy.blogspot.com/2017/09/owl-micro.html
– Czujniki otwarcia drzwi/okien – http://cezarowy.blogspot.com/2017/04/czujnik-otwarciazamkniecia-drzwi-w.html
– 'Nieśmiertelny' termometr na zewnątrz
– Sterownik ekranu projektora – http://cezarowy.blogspot.com/2017/12/pilot-do-ekranu-dziaajacy-na-433mhz.html
– Czujniki dymu

Jak widać – skórka była warta wyprawki.

Spędziłem już z Home Assistant trochę czasu i muszę powiedzieć, że po zapoznaniu się z nim MOIM ZDANIEM nie ma już odwrotu od przejścia na niego z Domoticz. Po prostu wychodzą na wierzch wszystkie wady Domoticz (brak modułowości, brak porządnej dokumentacji, problematyczne aktualizacje, czasem losowy start w przypadku posiadania skryptów i dodatków).

Jak w większości dodatków do Home Assistant – instalacja i konfiguracja jest banalna.

W configuration.yaml dodajemy linie:

rflink:
  port: /dev/serial/by-id/usb-Arduino__www.arduino.cc__0042_5563930393435111A172-if00

Dane dotyczące portu odczytałem wchodząc po prostu do folderu /dev/serial/by-id/, nadmieniam, że mam system postawiony na DietPi z HA w kontenerze Docker.
Sprawdzenie konfiguracji, restart, działa. Pierwsze wpisy pojawiły się w logu:
Pozostało dopisać elementy (dla czujników dymu jako switch) w:
– switches.yaml
  – platform: rflink
    automatic_add: false
    devices:
      fa20rf_fca258_01:
        name: Alarm Zosia
  – platform: rflink
    automatic_add: false
    devices:
      fa20rf_ff6994_01:
        name: Alarm Staszek
– sensors.yaml (dla czujników temperatury oraz OWL)
  – platform: rflink
    automatic_add: false
    devices:
      alectov4_5fc8_temp:
        sensor_type: temperature
  – platform: rflink
    automatic_add: false
    devices:
      owl_cm180_000d_watt:
        sensor_type: watt
        name: Owl Waty
  – platform: rflink
    automatic_add: false
    devices:
      owl_cm180_000d_kwatt:
        sensor_type: kilowatt
        name: Owl Kilowaty
Większy zgryz miałem ze sterownikiem do projektora. Bo pod jednym kodem były trzy komendy: UP, DOWN, STOP. Znajdź tu jakiś przycisk w HA, który to obsługuje…
Ale poszukałem w logach, pilot wysyłał je w następujący sposób:
No to fru do Developer tools -> Services:
Dalej już poszło jak z płatka, wystarczyło napisać skrypty:
screen_down:
  sequence:
    service: rflink.send_command
    data:
      command: 'down'
      device_id: dooya_12b75900_01  
screen_up:
  sequence:
    service: rflink.send_command
    data:
      command: 'up'
      device_id: dooya_12b75900_01  
screen_stop:
  sequence:
    service: rflink.send_command
    data:
      command: 'stop'
      device_id: dooya_12b75900_01        

oraz jeden automat, który wystartuje i zatrzyma po określonym czasie:
screen_down_and_stop:
  sequence:
    – service: rflink.send_command
      data:
        command: 'down'
        device_id: dooya_12b75900_01  
    – delay: ’00:00:48′
    – service: rflink.send_command
      data:
        command: 'stop'
        device_id: dooya_12b75900_01

Później wystarczyło podpiąć pod przyciski w ui-lovelace.yaml:
  – type: button
    name: Screen Down
    tap_action:
      action: call-service
      service: script.turn_on
      service_data:
        entity_id: script.screen_down
  – type: button
    name: Screen Up
    tap_action:
      action: call-service
      service: script.turn_on
      service_data:
        entity_id: script.screen_up
  – type: button
    name: Screen Stop
    tap_action:
      action: call-service
      service: script.turn_on
      service_data:
        entity_id: script.screen_stop
  – type: button
    name: Screen Down and Stop
    tap_action:
      action: call-service
      service: script.turn_on
      service_data:
        entity_id: script.screen_down_and_stop
Ten system jest naprawdę niesamowity.