wtorek, 29 września 2020

Home Assistant - moje repozytorium dostępne na GitHub

Dzień dobry.

Coś sobie w końcu wydłubałem w Home Assistant w taki sposób, że jestem z tego zadowolony. A że moje korzenie programowania zasadzają się w demoscenie komputerowej, która nauczyła mnie cieszyć się z tego co zrobiłem i dzielić tym - teraz również się dzielę. 

Oto kod YAML mojej konfiguracji Home Assistant:

https://github.com/CaesarPL/Home-Assistant-Cezar

Interface podzielony na karty, z automatyzacjami, itp., itd. Kod podzielony na osobne pliki dla włączników, kamer, czujników, świateł, skryptów, ręczna konfiguracja wyglądu.

Dodatkowym plusem takiego rozwiązania (poddając się krytyce internautów) jest to, że przeglądałem ten kod kilkukrotnie aby uniknąć powtórzeń, starych bloków, oczyścić go, uczynić bardziej logicznym. Na pewno jest jeszcze dużo do zrobienia, na pewno będę go aktualizował. Nienawidzę stać w jednym miejscu zbyt długo :D

Zapraszam do sprawdzenia, z chęcią dowiem się, że coś można zrobić coś lepiej, łatwiej, szybciej, ładniej.












poniedziałek, 21 września 2020

Home Assistant - wersja 0.115 - Media browser

Usssss... Nie nadążam ze zmianami w konfiguracji a pojawia się coraz więcej ciekawych rzeczy!

W wersji 0.115 najbardziej zainteresował mnie Media browser. Cóż to? Mała ikona, folder w tle, ale jakże wiele dająca.

Po pierwsze, po dodaniu wpisu media_source: w configuration.yaml dostaliśmy możliwość podejrzenia tego, co mamy w folderze media, który może być zamapowany na przykład do naszego NAS. Nie ogarniam jeszcze Dockera tak jakbym chciał (ale staram się nauczyć ;) ), dlatego nie wiedziałem jak zamapować folder z mojej sieci tak aby Home Assistant go zobaczył. A instalację mam w Docker.

Znalazłem jednak folder pod Ubuntu, gdzie okazało się, że jest ten folder widoczny pod HA. Widocznie tak to zrobili i tyle. Na razie nie wnikam.

/usr/share/hassio/media

A skoro go znalazłem to już sobie go potrafię zmapować na mój NAS.

sudo -s

mount -t cifs //192.168.1.124/Sobczaki/Muzyka /usr/share/hassio/media

Restart Home Assistant i voila! Mam dostęp do całej swojej biblioteki z poziomu Home Assistant.


A dokładniej z poziomu Mi Box. Widzicie ten folder w prawym dolnym rogu? Super, to dzięki niemu teraz mogę z poziomu Home Assistant puścić co chcę na Mi Box. Automatyzacje przyjdą z czasem...


Kolejny temat - Spotify. Tam też można sterować swoimi Playlistami, Ulubionymi, Ostatnio odtwarzanymi, itp.

Najpierw zakładamy nową aplikację na koncie deweloperskim Spotify (tak, pełna wersja Spotify jest konieczna)

https://developer.spotify.com/dashboard/applications


I pozyskane klucze wpisujemy w configuguration.yaml

spotify:
  client_id: !secret spotify_client_id
  client_secret: !secret spotify_client_secret

Dopiero teraz instalujemy Integrację Spotify i dodajemy na stronę:

      - type: media-control
        entity: media_player.spotify_sobczaki



Niby od przybytku głowa nie boli, ale ostatnio nie ma kiedy nawet z nowościami się zapoznać :D

To jedna z nowości a kiedy sprawdzić zmiany w automatyzacjach, sekcje More info, ładowanie zdjęć użytkowników (to akurat co prawda sam sobie już zrobiłem), zmiany w kalendarzu? 

Home Assistant i ZeroTier - Zdalny dostęp bez zewnętrznego IP, bez Nabu Casa

Dzień dobry. Jak zapewne prawie każdy - mam w domu internet :) Cały problem w tym, że nie mam zewnętrznego adresu IP, nie chcę za niego dodatkowo płacić, a przydałoby się mieć dostęp do swojej infrastruktury będąc na wczasach, wyjeździe, w pracy.

Za czasów Domoticz postawiłem na dostęp przez Dataplicity i byłem z tego bardzo zadowolony: http://cezarowy.blogspot.com/2017/03/dataplicity-zdalny-dostep-do-raspberry.html. Jednak Dataplicity potrafi wyłącznie wyeksponować port 80, a na nim akurat teraz mam HABridge, który służy do obsługi Alexy.

Skoro można to było osiągnąć na Raspberry Pi i Domoticz, to czemu nie zrobić czegoś podobnego z Home Assistant?

W tym celu tym razem udałem się do ZeroTier - https://zerotier.com/. Tak, wiem, zewnętrzna firma, której pozwalam na przesyłanie mojego ruchu. Nie jest jednak mała, miliony podłączonych urządzeń - Wasza decyzja. Niektórzy się zdecydują, niektórzy wzdrygną z obrzydzeniem.


Procedura jest taka: 

- klient ZeroTier tworzy połączenie VPN (na przykład na naszym telefonie)

- po jego włączeniu klient pośredniczy (tworzy wirtualny kanał) w komunikacji z naszym Home Assistant

- na telefonie możemy korzystać ze strony www lub aplikacji HA na podanym przez ZeroTier adresie

Pierwsza i podstawowa sprawa - musicie założyć konto na ZeroTier. 

Tam wybrać plan, który Wam odpowiada - dla mnie jest wystarczający Basic, darmowy, dla jednego urządzenia. Poniżej dostępne jest generowanie Waszego prywatnego tokena, który będzie służył przy komunikacji z dodatkiem ZeroTier One po stronie Home Assistant. Zapisać, skopiować, za chwilę będzie użyty. Drugi raz nie będzie można go zobaczyć (ale oczywiście będzie można go skasować i założyć nowy).



Później przechodzimy do zakładki Networks. Założenie jest takie, że token określa kto się loguje, nazwa sieci - do jakiej sieci. As simple as that. Zapisać, zapamiętać.


Wszystko to dostępne pod adresem https://my.zerotier.com/network.


W środku strony mamy możliwość wyboru puli adresów, których można będzie użyć. To ważne, bo przecież różnie możecie mieć skonfigurowane Wasze sieci domowe. Ja wybrałem domyślną.


Poniżej bardzo ważny element - lista adresów klientów, którzy chcą się dostać do naszej sieci. I to my decydujemy o tym, czy mogą się zalogować do naszego kanału, czy nie. Robimy to check-boxem po lewej stronie. I to na na adres podany pod Managed IPs będziemy się logować czy to przez przeglądarkę, czy przez aplikację Home Assistant. Jednorazowo, później już autoryzacja będzie przeprowadzana automatycznie.



Skoro to gotowe - przechodzimy do Home Assistant i instalujemy z poziomu Supervisor -> Add-on store ZeroTier One.


W konfiguracji podajemy kod naszej sieci oraz kod naszego tokena.


Sprawdzamy konfigurację, zapisujemy, startujemy Add-on.

Teraz pora zająć się telefonem. U mnie jest to iPhone, także z AppStore ściągnąłem odpowiednią aplikację ZeroTier One.


W niej muszę podać moje Network ID, zapisać.


Później wystarczy włączyć dostęp VPN, poczekać na autoryzację...


I korzystać z dostępu! Czy to przez stronę, czy przez aplikację na iPhone.


Coraz lepiej to wszystko wygląda :D

piątek, 18 września 2020

Commodore 64 - obcowanie z legendą, fajna historia i podstawy podstaw

Dobry wieczór. 

Dzisiaj fajna, pozytywna historia. Bardzo krzepiąca w tym zalewie komercji, skoku na kasę, itd.

Odbierałem ostatnio od pewnego młodzieńca (cóż, trochę już mam na karku ;) ) telewizor CRT. Sony Trinitron, 29 cali, będzie służył dzielnie do konsol i starych komputerów. Ogłoszenie pojawiło się na jednej z grup na Facebooku. Odpowiedziałem, zdeklarowałem się na odbiór nie wiedząc jak fajne zakończenie będzie miał ten temat. Tutaj taka ogólna dygresja - zawsze warto! Cokolwiek, ale warto. Robić, działać, rozmawiać, komunikować się. Po zniesieniu i zapakowaniu tej kolubryny do samochodu, podczas odpoczynku opowiedziałem o swoich zainteresowaniach. Że starsze sprzęty, że komputery, że zbieram, że opiekuję się nimi, itp. 
Na co zostałem zaskoczony pytaniem: 'Wiesz, koło mnie na strychu leży Commodore 64. Nieużywane od wielu lat, ale może jeszcze działa. Chcesz?'. Oczko skoczyło, nóżka zadrżała -  jasne, zajmie godne miejsce w kolekcji! W tym momencie składam gorące podziękowania. Nieczęsto się zdarza osoba (a w sumie dwie, bo i żona szanownego kolegi nie miała nic przeciwko), która po prostu chce coś przekazać, uratować od zapomnienia czy zniszczenia.

Życzę tej parze szczęścia na nowej drodze życia, z takim podejściem człowiek oddycha swobodniej, bo wie, że jest szansa w narodzie :D


Komputer faktycznie jest sprawny, po tych zapewne 10-15 latach uruchomił się bez problemu.



Swego czasu zakupiłem SD2IEC i czekał na lepsze czasy (czytaj - odpowiedni komputer), od razu podłączyłem, przy okazji trzeba było się douczyć, ale o tym później.




Technocop w akcji.


Last Ninja również uruchomione!


Komputer faktycznie przeleżał swoje, kurzu i brudu było co niemiara, ale od czego szmatka, woda i szczoteczka do zębów :D








Na koniec podarowałem sobie partyjkę w Spy vs Spy: Arctic antics.


Teraz jednak trochę specyficznych technikaliów ;) Mimo że z komputerem dostałem również magnetofon, z którego zapewne kiedyś spróbuję wgrać grę, to jednak używanie go teraz to już trochę zbyteczny masochizm (moim zdaniem oczywiście!). Z pomocą przychodzą nowoczesne rozwiązania jak SD2IEC w przypadku C64 (czy na przykład SDrive MAX do Atari 65XE/800XL - http://cezarowy.blogspot.com/2019/09/atari-65xe-i-sdrive-max-skadamy.html). Swoją drogą fajny zbieg okoliczności, bo wpis ten opublikowałem prawie równo rok temu :D Może za rok w moje ręce wpadnie Amstrad :D

Moje pierwsze pytanie do samego siebie było: 'Jak?'. Jak wgrać cokolwiek, jak obsłużyć? SD2IEC czekał na komputer aby go użyć, także to akurat już było ogarnięte. Na razie zrobiłem to w jakimś podstawowym zakresie, pewnym jednak jest, że będę musiał zaopatrzyć się w jakiś cartridge (BlackBox?) to wygodniejszej obsługi.

Na stronie projektu https://www.thefuturewas8bit.com/sd2iec-info jest paczka z oprogramowaniem do pobrania. Po wgryzieniu się trochę głębiej okazało się, że jest tam program o nazwie SDBROWSE.PRG. Z tego co mi się wydawało - na początek wystarczający.

Zgodnie z instrukcją sformatowałem kartę SD na FAT32, wgrałem gry i dema do swoich folderów (wtedy katalogów ;) ) a w głównym umieściłem SDBROWSE.PRG.

Ogólnie to jest tak, odczyt pliku z grą/programem/demem to: 
LOAD"nazwa programu",8,1
Zapis:
SAVE"nazwa programu",8,1

Odczyt katalogu:
LOAD"$",8
LIST

Teraz wystarczyło podłączyć wszystko razem, włączyć komputer i wpisać:
LOAD"SDBROWSE.PRG",8,1
RUN
I zaczęło się!


Skorzystałem ze swojego archiwum gier, oraz bardzo fajnej składanki, którą popełniła jedna z osób na grupach retro - gry, które były opisywane w Top Secret (taka stara gazeta o grach, 'przedinternetowa' skarbnica wiedzy). Posortowane numerami, aby można było czytać recenzję i sobie od razu zagrać. Świetna sprawa. Wystarczy wybrać, poczekać chwilę i można grać.

Dema w większości nie chodzą, wydaje mi się, że wiem dlaczego, jak to potwierdzę to opiszę.

Dobranoc! Starczy na dzisiaj, jutro biegi górskie w Ustroniu...

środa, 16 września 2020

Gniazdka Blitzwolf - tworzymy automatyzacje w oparciu o stan poboru prądu.

Dzień dobry. Ostatnia, trzecia, część konfiguracji gniazdek Blitzwolf.

Poprzednie tutaj:

http://cezarowy.blogspot.com/2020/08/pierwsze-efekty-buy-my-coffee-gniazdka.html

http://cezarowy.blogspot.com/2020/08/gniazdka-blitzwolf-wgrywamy-tasmota-za.html


Na jakiej zasadzie się oparłem? Odczytuję stan pobory mocy w gniazdku. Jeżeli pobór jest większy niż 2 Watt, zmieniam status czujnika na 'pranie'. Jeżeli spada do zera, zmienia się na 'wyłączona'. W Automations HA sprawdza na bieżąco stan czujnika, jeżeli zmieni się z 'pranie' na 'wyłączona' na trzy minuty, powiadamia mnie e-mailem oraz Alexą, że pranie się skończyło. Trzy minuty to, na podstawie testów, czas w którym już wiem, że grzałka nie działa, silnik nie kręci bębnem, pompa nie odsącza wody.


Wstawiam ponownie konfigurację gniazdek po stronie Tasmota, bo trochę zmieniło się nazewnictwo. Parametry i nazwy wyglądają teraz następująco:


Jak widać, w MQTT Topic do komunikacji ma nazwę blitzwolf2:


To później wykorzystuję w konfiguracji w pliku sensors.yaml. Z jakiegoś powodu (mimo włączenia odpowiednich parametrów odpowiadających za auto discovery) nie działało mi automatyczne wykrywanie, aby więc nie stać w miejscu dodałem je ręcznie :D I tak postąpiłem z każdym, dla nauki.
Przy okazji - Tak, wolę nazwy angielskie w parametrach. Na pulpicie HA nazwy są polskie, ale wewnątrz konfiguracji wolę je mieć po angielsku. Taki odchył ;)

Jak widać poniżej z kanału blitzwolf2 w MQTT odczytuję poszczególne parametry i wstawiam je do zmiennych:

  - platform: mqtt

    name: "Pralka Energy Today"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Today"] }}'

    unit_of_measurement: "kWh"

  - platform: mqtt

    name: "Pralka Energy Yesterday"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Yesterday"] }}'

    unit_of_measurement: "kWh"

  - platform: mqtt

    name: "Pralka Energy Total"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Total"] }}'

    unit_of_measurement: "kWh"

  - platform: mqtt

    name: "Pralka Power"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Power"] }}'

    unit_of_measurement: "W"

  - platform: mqtt

    name: "Pralka Voltage"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Voltage"] }}'

    unit_of_measurement: "V"

  - platform: mqtt

    name: "Pralka Power Factor"

    state_topic: "tele/blitzwolf2/SENSOR"

    value_template: '{{ value_json["ENERGY"]["Factor"] }}'   

Kolejny wpis w pliku sensors.yaml. Tutaj właśnie realizowana jest zmiana statusu włączona/wyłączona na podstawie poboru mocy.

  - platform: template

    sensors:
      pralka:
        friendly_name: "Pralka"
        value_template: >-
          {% if states('sensor.pralka_power') != ('unavailable' or 'unknown') %}
            {% if states('sensor.pralka_power') | int > 2 %}
              pranie
            {% else %}
              wyłączona
            {% endif %}
          {% else %}
            {{ states('sensor.pralka') }}
          {% endif %}



Aby skonfigurować stronę jak powyżej dodałem wpis w ui-lovelace.yaml:

    - type: vertical-stack
      in_card: true
      cards:
        - type: glance
          no_card: true
          title: "Łazienka góra"
          show_name: false
          entities:
            - sensor.temperature_158d00022723b2
            - sensor.humidity_158d00022723b2  
            - sensor.pralka
            - sensor.pralka_power

A ikony zdefiniowałem sobie w customize.yaml:

sensor.pralka:
  icon: mdi:washing-machine  
sensor.pralka_power:
  icon: mdi:power

Automatyzacja wygląda następująco:



Tak jak pisałem na początku - jeżeli przez trzy minuty zostanie utrzymana zmiana statusu z 'pranie' na 'wyłączona' - powiadom mnie wybranymi kanałami.

- id: '1599813679318'
  alias: Pralka - koniec prania
  description: ''
  trigger:
  - entity_id: sensor.pralka
    for: 00:03:00
    from: pranie
    platform: state
    to: wyłączona
  condition: []
  action:
  - data:
      message: HA - pralka skończyła pranie
    service: notify.cezar
  - data:
      data:
        method: all
        type: announce
      message: Washing machine has finished job
      title: Washing machine off
    service: notify.alexa_media_adam_s_echo_dot
  mode: single

Dla porządku mam je również wstawione w innych miejscach:




Przy konfiguracji posiłkowałem się konfiguracją https://github.com/bieniu/home-assistant-config. Wpłata na jego konto wskazana :)