wtorek, 26 maja 2020

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://cezarowy.blogspot.com/2017/11/serwis-alexa-integracja-z-domoticz.html

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 :D

- 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

środa, 13 maja 2020

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

wtorek, 12 maja 2020

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 \config\custom_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:



wtorek, 5 maja 2020

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.