W artykule „Sterownik do piwnej lodówki, czyli grzanie i chłodzenie (brzeczki, piwa), na bazie ESPHome i Home Assistant, z integracją z Brewfather” wspomniałem, że w mojej – coraz mniej tylko testowej – migracji z BrewPiLess do ESPHome, m.in. celu lepszej integracji z Home Assistant, jest jeszcze jedna luka, a mianowicie urządzenie iSpindel, które w standardzie przesyłało informacje do BrewPiLess, a BrewPiLess dalej słał jej do Home Assistant (MQTT) i Brewfather (HTTP). Po zastąpieniu BrewPiLess przez ESPHome skonfigurowałem urządzenie iSpindel tak, by przekazywało informacje bezpośrednio to Brewfather, co jest dla mnie ważniejsze, niż to, by mieć je (tylko) w Home Assistant. W końcu jednak przyszła pora, by również tym tematem się zająć…

iSpindel nadaje do Home Assistant, a ten nadaje do Brewfather

Rozważałem kilka wariantów, jak to zrobić, by informacje z urządzenia iSpindel trafiały zarówno do Brewfather (ważniejsze), jak i do Home Asistant, by móc z nimi dalej pracować również w tym systemie. Ostatecznie – przynajmniej na razie, bo w przyszłości może to się zmieni – zdecydowałem się wykorzystać tutaj serwer MQTT, zamiast połączenia HTTP (API).

Głównie dlatego, że taki wariant umożliwia mi korzystanie z urządzenia iSpindel również poza siecią, gdzie mam serwer Home Assistant, a dopóki będzie dostęp do internetu, informacje z niego będą trafiać po MQTT do serwera Home Assistant, a stąd też i do Brewfather. Bo jak już być może niektórzy się domyślają, właśnie na taki wariant się zdecydowałem:

  • iSpindel -> [MQTT] -> Home Assistant -> [HTTP] -> Brewfather

I na razie działa to całkiem sprawnie, dzięki czemu informacje z iSpindel mam zarówno w Home Assistant, jak i Brewfather. A dzięki temu, że jako „punkt wejścia” informacji z Home Assistant w Brewfather dałem adres dla urządzenia iSpindel, zamiast „niestandardowy strumień”, to Brewfather nawet nie wie, że to nie iSpindel jest dostawcą danych. Zdecydowałem się na taki krok nieprzypadkowo, a po analizie tego, jakie informacje „na jakim kanale” można do Brewfather przesłać.

Połączenie iSpindel do serwera  MQTT

Samej konfiguracji MQTT w iSpindel nie będę podawał, bo jest dość klasyczna – adres serwera, port, nazwa użytkownika i hasło. Trzeba mieć tylko na uwadze, że iSpindel korzysta z tematu (kanału) „ispindel”, więc użytkownik musi mieć możliwość zapisywania wiadomości do tego tematu (ważne, jak korzysta się z ACL).

A wszystkie informacje z iSpindel do serwera MQTT są przesyłane „w temacie” (na kanale):

ispindel/nazwa_urządzenia/

Czyli dla urządzenia o nazwie „iSpindel01” będzie to:

ispindel/iSpindel01/temperature
ispindel/iSpindel01/battery
ispindel/iSpindel01/gravity
ispindel/iSpindel01/tilt
ispindel/iSpindel01/RSSI
ispindel/iSpindel01/interval

Można powiedzieć, że dość klasycznie i raczej jest to dość logicznie ułożone…

Sensory MQTT w Home Assistant

Zakładam, że w Home Assistant połączenie z serwerem MQTT jest skonfigurowane, a jak nie, to od tego trzeba zacząć. Obecnie robi się to z panelu sterowania Home Assistant, a konkretnie przez opcję „urządzenia i usługi”.

Więc zostaje tylko dodać odpowiednie sensory MQTT w Home Assistant, co można zrobić np. za pomocą takiego kodu:

mqtt:
  sensor:
    - state_topic: "ispindel/iSpindel01/temperature"
      name: "iSpindel01-MQTT-Temp"
      device_class: "temperature"
      unit_of_measurement: '°C'
      value_template: "{{ value | round(1) }}"
      expire_after: 300
    - state_topic: "ispindel/iSpindel01/battery"
      name: "iSpindel01-MQTT-Voltage"
      device_class: "voltage"
      unit_of_measurement: 'V'
      value_template: "{{ value | round(2) }}"
      expire_after: 300
    - state_topic: "ispindel/iSpindel01/gravity"
      name: "iSpindel01-MQTT-Gravity"
      device_class: "volume"
      unit_of_measurement: '°P'
      value_template: "{{ value | round(2) }}"
      icon: mdi:beer
      expire_after: 300
    - state_topic: "ispindel/iSpindel01/tilt"
      name: "iSpindel01-MQTT-Tilt"
      value_template: "{{ value | round(2) }}"
      icon: mdi:angle-acute
      expire_after: 300
    - state_topic: "ispindel/iSpindel01/RSSI"
      name: "iSpindel01-MQTT-RSSI"      
      unit_of_measurement: "dBm"
      device_class: signal_strength
      expire_after: 300
    - state_topic: "ispindel/iSpindel01/interval"
      name: "iSpindel01-MQTT-Interval"
      icon: mdi:timer-refresh-outline
      unit_of_measurement: 's'
      expire_after: 300

Oczywiście „tematy”, jak i ewentualnie nazwę czujników, należy dostosować do swoich potrzeb…

Wirtualny iSpindel i Brewfather

Gdy już dane mamy w Home Assistant, zostało jeszcze dostarczyć je do Brewfather. Oczywiście o ile ktoś korzysta. A, że ja korzystam, więc… I tak jak wcześniej już napisałem, zdecydowałem się przesłać te dane podszywając Home Assistant pod urządzenie iSpindel:

rest_command:
  ispindel01_mqtt_to_brewfather:
    url: !secret brewfather_stream_url_is
    method: POST
    verify_ssl: false
    headers:
      Content-Type: application/json
    payload: '{"name": "iSpindel01_MQTT", "temperature": {{states(''sensor.ispindel01_mqtt_temp'')}}, "temp_unit": "C", "comment": "iSpindel01 MQTT", "gravity": {{states(''sensor.ispindel01_mqtt_gravity'')}}, "gravity_unit": "P", "battery": {{states(''sensor.ispindel01_mqtt_voltage'')}}, "angle": {{states(''sensor.ispindel01_mqtt_tilt'')}}, "interval": {{states(''sensor.ispindel01_mqtt_interval'')}}, "RSSI": {{states(''sensor.ispindel01_mqtt_rssi'')}} }'

Oczywiście parametr „brewfather_stream_url_is” został wcześniej zdefiniowany w pliku „secrets.yaml”:

brewfather_stream_url_is: "http://log.brewfather.net/ispindel?id=X77RC0zundTNfA

Zamiast „X77RC0zundTNfA” trzeba wstawić tutaj własny identyfikator, który jest dostępny w ustawieniach Brewfather.

A jak widać na grafice (zrzucie ekranu) powyżej, wszystko działa elegancko. Oczywiście jeszcze wcześniej trzeba dodać opcję odpowiedzialną za cykliczne wysyłanie informacji z Home Assistant do serwisu Brewfather.

Cykliczne przesyłanie danych do Brewfather

Natomiast to, czego brakuje w tym kodzie powyżej, to mechanizmu cyklicznie inicjującego wysyłanie danych do Brewfather. Co pewnie można to osiągnąć za pomocą kodu w stylu (strzelam, nie testowałem):

automation:
  - alias: "iSpindel MQTT: Send to Brewfather"
    trigger:
      platform: time_pattern
      seconds: '/900'
    action:
      service: rest_command.ispindel01_mqtt_to_brewfather

Natomiast ja celowo zdecydowałem się nie dodawać tego do pliku „configuration.yaml”, a zamiast tego skorzystałem z dodawania automatyzacji z poziomu panelu Home Assistant, choć musiałem się tutaj wspomagać edytorem kodu YAML:

alias: "iSpindel MQTT: Send to Brewfather"
description: ""
trigger:
  - platform: time_pattern
    minutes: /15
condition: []
action:
  - service: rest_command.ispindel01_mqtt_to_brewfather
    data: {}
mode: single

Kod ten, a właściwie wynikająca z niego automatyzacja, odpowiada za wysyłanie co 15 minut (900 sekund) informacji do Brewfather. Od razu też dodałem do ekranu przeznaczonego na „piwne IoT” przełącznik, pozwalający włączyć i wyłączyć tę automatyzację, zależnie od potrzeb:

A wybrałem automatyzację z poziomu panelu, bo nie tylko są tam identyczne opcje, ale też można ją rozbudowywać o dodatkowe elementy, już z poziomu graficznego interfejsu, co dla mnie jest wygodniejsze, bo YAML w takim wydaniu to cały czas jednak dla mnie pewnego rodzaju nowość, a do tego też widać, że kolejne opcje stopniowo są przenoszone „z kodu”, do interfejsu użytkownika (ostatnio System Monitor, wcześniej PING, wcześniej…).

A jakby tak ESPHome zastąpić oprogramowanie iSpindel?

I tak jak w temacie „Sterownik do piwnej lodówki, czyli grzanie i chłodzenie (brzeczki, piwa), na bazie ESPHome i Home Assistant, z integracją z Brewfather” na koniec zostawiłem wątek do rozwinięcia, czyli ten, o którym jest ten artykuł (poradnik), tak uznałem, że i tym razem podobny zabieg wykonam.

No bo skoro już tak migruję kolejne urządzenia na ESPHome, również te związane ze wspomaganiem warzenia piwa w domu, czy sterowaniem „piwną lodówką”, to może w ramach kolejnego „testu”, zamiast oprogramowania iSpindel, wykorzystać właśnie ESPHome i wtedy bezpośrednie połączenie po API z Home Assistant?

W końcu to „tylko” odczyt danych z MPU-6050 i DS18B20 podłączonych do ESP8266, do tego w ESPHome filtr dla danych (np. calibrate_linear lub calibrate_polynomial) oraz funkcja głębokiego uśpienia (Deep Sleep Component), dla ograniczenia poboru energii, bo w końcu jest to urządzenie bateryjne.

Nie powiem, kusi, choćby dla samego sprawdzenia, jak takie rozwiązanie będzie się sprawować. Więc kto wie, może niebawem będzie kolejny odcinek tej serii… ;-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk