Migracja z Domoticz do Home Assistant – jak to zrobić, żeby się wyrobić…

Dzień dobry.
Niespokojnym duchem będąc i uwielbiając zmieniać, próbować, usprawniać – musiałem przejść na Home Assistant. Było kilka powodów, niektóre mniej, niektóre bardziej ważne.
1. Aby zaktualizować wersję Domoticz którą mam aktualnie (3.8153 – relikt, ale działa) musiałbym przejść z Raspbian Jessie na Raspbian Buster. Jeżeli miałbym to zrobić – czekałaby mnie reinstalacja części komponentów, zapewne problemy z Broadlink (z tego co raportowali czytelnicy jakimś cudem mi się udało, ale wiele osób miało z tym problemy w Domoticz) oraz innymi komponentami. Niestety, w Domoticz nie jest to łatwe.
2. Niestety sprawdziłem jak prosta była i jest konfiguracja Home Assistant – po tym już Domoticz nie był taki sam. Osobiście lubię się bawić w konfiguracje w plikach tekstowych i możliwość dostosowania dzięki temu systemu do moich potrzeb. Teraz w większości przypadków nie trzeba znać YAML – pozostał dla takich świrów jak ja. HA niesamowicie szybko się rozwija.
3. KAŻDY, absolutnie KAŻDY dodatek, integracja, tapeta jest dokładnie opisana. Każda aktualizacja jest dokładnie udokumentowana w sposób jednakowy dla całego systemu. To samo tyczy się aktualizacji samego systemu HA. Bo trzeba wiedzieć, że są one rozłączne, to my decydujemy co ładujemy, na czym się opieramy, w jaki sposób dodajemy.
Niniejszym zaczynam ciąg artykułów o przejściu z Domoticz na Home Assistant! 
Część już opisałem wcześniej, postaram się aktualizować ten artykuł i kolejne sukcesy. A udało mi się w sumie przenieść już prawie wszystko.
Do przeniesienia miałem:
    – gniazdka Xiaomi
    – włączniki ścienne Xiaomi
    – Miilight LED 
    – Yeelight
    – światło przed domem – Sonoff na Tasmota (przy okazji zmiana oprogramowania na najnowsze przez OTA)
    – czujnik smogu – ESPEasy
    – Owl (RFLink)
    – UPS
    – oczyszczacz powietrza
    – MiFlora
    – kamery
    – Xiaomi Gateway
    – Logitech Media Server
    – Broadlink
    – NC+
    – aktywności sprzętów IP, zliczenie czasu używania
    – Sonoff POW
    – Sceny
    – pogoda/Airly
    – internet – raportowanie
    – System
    – skrypty
        – drzwi otwarte
        – emulator obecności
        – powiadamianie o temperaturze
        – poranne news o domu
        – zużycie energii

Home Assistant – migracja z Tasmota na ESPHome

Dzień dobry.

Jako że lubię testować i sprawdzać co się da – postanowiłem sprawdzić ESPHome, skoro już zdecydowałem na przejście na Home Assistant, a akurat ESPHome świetnie się z nim integruje. Do tego – ma dość ciekawe podejście do tematu.

Aby dowiedzieć się wszystkiego polecam wizytę na stronie https://esphome.io/.

Na większości sprzętów Sonoff (oprócz czujnika smogu) przeszedłem już na Tasmota, ESPHome pozwala na bezbolesną migrację z Tasmota (ale również z ESPEasy). Opisane wszystko jest na stronie: https://esphome.io/guides/migrate_sonoff_tasmota.html. Konfiguracja przy użyciu Tasmota i MQTT nie jest jakoś specjalnie skomplikowana, ale używając ESPHome, faktycznie jest to kilka kliknięć i wpisów (mam plik lovelace-ui.yaml edytowany ręcznie).
Najpierw dodajemy repozytorium:

Dodajemy do Home Assistant:

Po starcie wybieramy Open WEB UI:

Jedynym zgrzytem było to, że musiałem zainstalować nowy kernel na moim Raspberry Pi 4, ponieważ bez tego nie mogłem skompilować plików do wgarnia na Sonoffy. 
Nie było to jakoś magicznie trudne.
sudo apt-get install raspi-config

sudo apt-get install rpi-update

uname -a

Po tej operacji kompilacja plików przeszła już bezboleśnie.

Plik .bin wgrałem do Sonoff Basic:

Encje pojawiły się w integracji i można było je dodać do Home Assistant.

Bardziej dla mnie, konfiguracja SDS011 na przyszłość, ale chyba pozostanę przy ESPEasy.
uart:
  rx_pin: D0
  tx_pin: D6
  baud_rate: 9600
sensor:
  – platform: sds011
    pm_2_5:
      name: „Particulate Matter <2.5µm Concentration”
    pm_10_0:
      name: „Particulate Matter <10.0µm Concentration”
    update_interval: 30min


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

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.

Home Assistant – powiadomienia

Powiadomienia w systemie automatyki domowej są jakby niezbędne. 
Fakt. 
Jakie – każdy sobie wybiera. Ja lubię akurat e-maile, bo nie wymagają ode mnie dodatkowych elementów. Poniżej swoje dane musicie uzupełnić odpowiednimi Waszymi, które odczytacie w konfiguracji serwerów na przykład na stronie dostawcy.
Na początek konieczne są dodatkowe sekcje w configuration.yaml. Nadpisujemy/dodajemy wpisy dotyczące notify.
notify:
  – name: Cezar
    platform: smtp
    server: !secret email_server
    port: 587
    timeout: 15
    sender: !secret email_sender
    encryption: starttls
    username: !secret email_username
    password: !secret email_password
    recipient:
      – !secret email_cezar
    sender_name: My Home Assistant
Hasła trzymamy oczywiście w pliku secrets.yaml.
Później restart i mały test. Przechodzimy na Developer Tools, Services i jak w przykładzie w dokumentacji podane, wprowadzamy:
{
  „message”: „The sun is {% if is_state(’sun.sun’, 'above_horizon’) %}up{% else %}down{% endif %}!”
}

Później Configuration -> Automations

Ja stworzyłem sobie powiadomienie o włączeniu świateł przed domem godzinę po zachodzie słońca.

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

Zrobione. Tyle na dzisiaj. Muszę wrócić do częstszego, a krótszego pisania o HA.

Home Assistant wersja 0.105 – a nawet nie zdążyłem opisać poprzedniej

Problem z pisaniem o Home Assistany jest jeden i zasadniczy – system się niesamowicie zmienia i pisanie o nim prawie gwarantuje, że za dwa miesiące artykuł jest nieaktualny. Dwa miesiące temu miałem prawie przygotowany tekst o automatyzacjach – dodali kreator. Ledwo się zebrałem, żeby coś napisać – wyszła wersja 0.105, która wiele zrzutów ekranu kieruje do kosza 😀

Zamieszali, nie powiem. Ale na plus!

Najważniejszą zmianą jest wprowadzenie Safe mode – poprzednio jeżeli coś 'zamieszaliśmy’ w konfiguracji mogliśmy się obudzić z systemem, który nie chciał zadziałać po restarcie. Teraz uruchomi się, ale w podstawowej wersji konfiguracji – to się bardzo przyda. Szczególnie osobom początkującym lub dużo zmieniającym w systemie.

Pojawił się Supervisor zamiast Hass.io z kolorowymi ikonami

Zmieniła się też zakładka konfiguracji.

I jak zwykle kolejne sprzęty, integracje – miłe jest to, że coraz więcej osób z Polski jest twórcami oficjalnych integracji.

Pora zebrać się do kupy i zacząć znowu pisać.