Autor: Wojciech Kawecki

  • Integracja z alarmem Satel Integra 64

    Istnieje oczywiście możliwość integracji przez moduł eth, ale ponieważ jest on kosztowny zaprojektowałem proste rozwiązanie wykorzystując wolne wyjścia w domowej centrali Satel Integra. Nie jest to dwukierunkowa integracja, a jedynie przekazywanie informacji od alarmu do HomeAssistant. Dzięki temu można stworzyć fajne automatyzacje na podstawie wykrytego ruchu. Koszt integracji ok 50 PLN

    W tym rozwiązaniu akumulator w centrali alarmowej jest wykorzystywany jako UPS dla RaspberryPI, co oczywiście skraca czas działania alarmu przy długich wyłączeniach prądu.

    Hardware

    • Konwerter poziomów logicznych dwukierunkowy, 4-kanałowy – Pololu – 2 szt.
    • Przetwornica Step-Down – 9-38V – na 5V – USB – 5A
    • NodeMCU (alternatywnie Wemos D1 mini – tańsze rozwiązanie, ja miałem pod ręką akurat wolny chipset NodeMCU)

    Schemat blokowy

    Zastosowałem 25W przetwornicę napięcia, aby z alarmu zasilić od razu RaspberryPI na którym jest uruchomiony HomeAssistant. Dzięki temu w przypadku braku zasilania RPi działa aż do wyczerpania baterii w alarmie.

    Ważne jest użycie i skonfigurowanie odpowiednich wyjść w na płycie Integra – nie wszystkie wyjścia są wyjściami wysokoprądowymi.

    Uwaga na schemacie nie zaznaczono masy.

    Widok płytki od strony elementów

    Software

    Alarm

    Konfiguracja w systemie alarmowym jest wykonana w oprogramowaniu DLOADX.

    Wyjścia typu Out są wysterowane przez 3 sekundy przez wejścia z czujek PIR

    Wyjście OUT Integra64OpisNodeMcu
    4Zasilanie 12V/3A: – Raspberry 5V/2,5A – NodeMCU 5V/300mA –
    5Załączony alarm w strefach: 1, 3D3/GPIO0
    6PIR1D1/GPIO5
    7PIR2D4/GPIO2
    9PIR3D2/GPIO4
    10PIR4D5/GPIO14
    12PIR5D0/GPIO16
    13PIR6D6/GPIO12
    14PIR7D7/GPIO13

    HomeAssistant

    ESPHome

    Należy wcześniej zainstalować addon ESPHome w HomeAssistant

    Konfiguracja NodeMCU w ESPHome. Należy dodatkowo utworzyć plik secrets.yaml

    esphome:
      name: alarm
      platform: ESP8266
      board: nodemcuv2
    
    wifi:
      networks:
      - ssid: !secret ssid
        password: !secret password
    
      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "Alarm Fallback Hotspot"
        password: !secret password_fallback
    
    captive_portal:
    
    # Enable logging
    logger:
      level: INFO
    
    # Enable Home Assistant API
    api:
      port: 6053
    
    ota:
      - platform: esphome
      
    #web_server:
    
    mqtt:
      broker:  !secret mqtt_broker_ip
      username: !secret mqtt_username
      password: !secret mqtt_password
    
    binary_sensor:
      - platform: gpio
        pin: 
          number: GPIO0
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "alarm_1_3"
        
      - platform: gpio
        pin: 
          number: GPIO5
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir1"
        device_class: motion
    
      - platform: gpio
        pin: 
          number: GPIO2
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir2"
        device_class: motion
        
      - platform: gpio
        pin: 
          number: GPIO4
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir3"
        device_class: motion
    
      - platform: gpio
        pin: 
          number: GPIO14
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir4"
        device_class: motion
        
      - platform: gpio
        pin: 
          number: GPIO16
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir5"   
        device_class: motion
        
      - platform: gpio
        pin: 
          number: GPIO12
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir6"
        device_class: motion
        
      - platform: gpio
        pin:  
          number: GPIO13
        filters:
          - invert:
          - delayed_on: 250ms
          - delayed_off: 250ms
        name: "ruch_pir7"
        device_class: motion

    Plik secrets.yaml

    #mqtt
    mqtt_broker_ip: 192.168.1.1
    mqtt_username: uzytkownik_mqtt
    mqtt_password: haslo_mqtt
    
    # Your Wi-Fi SSID and password
    ssid: 'nazwa_wifi'
    password: 'haslo_wifi'
    
    #Wifi Fallback Hotspot
    password_fallback: 'magiczne_haslo'

    Przykładowe automatyzacje

    Włączenie/wyłączenie światła

    - id: 'auto_kuchnia_swiatla_on'
      alias: 'Kuchnia - Włącz światło'
      trigger:
        platform: state
        entity_id: binary_sensor.ruch_pir1
        from: 'off'
        to: 'on'
      condition:
        condition: and
        conditions:
        - condition: state
          entity_id: light.kuchnia
          state: 'off'
          for:
            seconds: 5
        - condition: template
          value_template: "{{ states.sun.sun.attributes.elevation  | int < 3 }}"
      action:
        service: light.turn_on
        entity_id: light.kuchnia
    
    - id: 'auto_kuchnia_swiatla_off'
      alias: 'Kuchnia - wyłącz po 3 min'
      trigger:
        platform: state
        entity_id: binary_sensor.ruch_pir1
        to: 'off'
        for: 
          minutes: 3
      condition:
        - condition: state
          entity_id: light.kuchnia
          state: 'on'
      action:
        service: light.turn_off
        entity_id: light.kuchnia

    Wyłączenie urządzeń przy załączeniu strefy w alarmie

    - id: 'auto_alarm_swiatla_off'
      alias: 'Alarm - Wyłącz światła przy załączonym alarmie'
      trigger:
        platform: state
        entity_id: binary_sensor.alarm_1_3
        from: 'off'
        to: 'on'
        for: 
          seconds: 15
      condition:
        - condition: state
          entity_id: group.swiatla_dol
          state: 'on'
      action:
        - service: light.turn_off
          entity_id: group.swiatla_dol
        - service: switch.turn_off
          entity_id: switch.pompa_wody
        - service: light.turn_off
          entity_id: light.lampki_choinkowe
        - service: media_player.turn_off
          entity_id: media_player.amplituner
        - service: media_player.turn_off
          entity_id: media_player.tv

    Linki

    https://esphome.io

    https://www.satel.pl/instrukcje

  • Sterowanie przez podczerwień i pomiar temperatury, wilgotności i ciśnienia

    Jedno z moich pierwszych urządzeń to pilot na podczerwień (odbiornik i nadajnik) oraz pomiar temperatury, wilgotności i ciśnienia (szacunkowy koszt ok 40 PLN, bez zasilacza). Jest też gotowy shield IR do Wemos D1 mini – co jest prostszym rozwiązaniem niż lutowanie całości.

    Wykorzystane komponenty:

    • Wemos D1 mini
    • BME280
    • nadajnik i odbiornik podczerwieni

    Poniżej schemat logiczny:

    Układ połączeń

    Uwaga – należy jak najdalej odsunąć czujnik BME280 od Wemos D1

    Oprogramowanie

    Do układu Wemos D1 mini zostało wgrane oprogramowanie Tasmota Sensor. Wcześniej używałem ESPHome, ale w tym przypadku trudniej obsługiwać sterowanie różnymi pilotami na podczerwień. Tasmota Sensor rozpoznaje kody pilotów różnych dostawców., dzięki czemu skrypty w HomeAssistant są prostsze. Opcjonalnie można by też użyć wersji tasmota-ir, aby obsłużyć więcej różnych dostawców urządzeń IR.

    Konfiguracja

    Tasmota Sensor

    Dodatkowo w Tasmocie jest ustawiona konfiguracja połączenia do serwera MQTT.

    Odczyt kodów IR z pilota najlepiej przeprowadzić z poziomu konsoli Tasmota.

    HomeAssistant

    Czujnik BME280 wykrywany jest automatycznie przez HA.

    Przykładowy skrypt wysyłający kod IR do urządzenia:

     script:
      amplituner_volume_up:
        alias: Głośniej
        sequence:
          - service: mqtt.publish
            data_template:
              payload: "{\"Protocol\":\"NEC\",\"Bits\":32,\"Data\":0x5EA158A7}"
              topic: cmnd/wemos2/IRSend
              retain: true

    Linki

    https://tasmota.github.io/docs

  • Pobranie danych z licznika wody Multical 21

    Poniżej tania integracja (ok. 50PLN) odczytu bieżącego zużycia wody z licznika Multical 21. Aby uruchomić tą integracja trzeba:

    • spore umiejętności przy lutowaniu oraz
    • kontakt z firmą, która obsługuje rozliczenie wody i trochę cierpliwości, aby otrzymać kod deszyfrujący AES dla licznika

    Licznik Multial 21 może wysyłać dane bezprzewodowo przy użyciu protokołu Wireless M-Bus. Multical21 zapewnia następujące dane:

    • licznik całkowity – całkowite zużycie wody w m³
    • licznik docelowy – zużycie wody do 1. dnia bieżącego miesiąca
    • temperatura średnia – w °C
    • temperatura otoczenia – w °C
    • kody informacyjne – BURST, LEAK, DRY, REVERSE, TAMPER, RADIO OFF
    Kod informacyjny
    wyświetlany na
    wyświetlaczu
    Znaczenie
    LEAK W ciągu ostatniej doby nie zanotowano zatrzymania przepływu przez wodomierz przez minimum jedną godzinę.
    Może to świadczyć o nieszczelności kranu lub zbiornika toalety.
    BURST Stałe wysokie zużycie wody w ciągu pół godziny, co oznacza pęknięcie rury.
    TAMPER Próba oszustwa. Wodomierz nie nadaje się do celów rozliczeniowych.
    DRY Brak wody w wodomierzu. Pomiar nie jest prowadzony.
    REVERSE Woda przepływa przez wodomierz w nieprawidłowym kierunku.
    RADIO OFFRADIO OFF wyświetlany ciągle. Nadajnik radiowy jest permanentnie wyłączony.

    Hardware

    • Wemos D1 mini (lub ESP32) – koszt ok 12 PLN
    • moduł radiowy CC1101 868 MHz z anteną (ja zamówiłem tu) – koszt ok 30 PLN
    • 7 przewodów

    Software

    Połączenie

    Trzeba sporo wprawy, aby zlutować połączenia do CC1101 – raster jest mniejszy niż standardowy goldpin.

    CC1101ESP8266
    VCC3V3
    GNDGND
    CSND8
    MOSID7
    MISOD6
    SCKD5
    GDO0D2

    Poniżej jak mi to wyszło:

    Uruchomienie

    Polecam najpierw złożyć, uruchomić bez kodu deszyfrującego – zweryfikować, czy działa komunikacja . A następnie ponowne programowanie Wemos D1 mini już z kluczem AES. W moim przypadku odczyt następuje z ok 10 metrów przez kilka ścian.

    Aby uzyskać klucz deszyfrujący AES należy skontaktować się ze spółką rozliczającą wodę. W moim przypadku wystarczyło pismo ogólne zgłoszone przez platformę EPUAP (w tym wypadku nie musiałem poświadczać swojej tożsamości) i plik z kluczem oraz hasłem dostałem bezpośrednio na emaila. (podziękowania dla pana Piotra ze Spółki Komunalnej Żukowo).

    Przykładowe pismo znajduje się tu.

    Plik ZIP z plikiem KEM zawiera kluczem AES, Aby odczytać klucz AES konieczne jest hasło i należy użyć dodatkowego programu w python.

    Programowanie

    Na PlatformIO zaimportuj projekt esp-multical21.

    Zmiany w kodzie

    Należy zmienić nazwę pliku config_template.h na config.h oraz w pliku wprowadzić zmiany

    Ustawić numer licznika

    //numer seryjny licznika
    #define SERIAL_NUMBER       0x65, 0x00, 0x05, 0x43

    Ustawić sieć WiFi, adres serwera MQTT

    std::vector<CREDENTIAL> const credentials = {
         { "sid_sieci_wifi", "haslo_sieci_wifi", "", "", ""}   // no MQTT
       , { "sid_sieci_wifi", "haslo_sieci_wifi", "adres_IP_serwera_mqtt", "login_serwera_mqtt", "haslo_serwera_mqtt"}  // MQTT with auth
    };

    Ustawić klucz AES (najlepiej po sprawdzeniu, czy odbiera się ramki z licznika

    #define ENCRYPTION_KEY      0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x10, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
    

    Weryfikacja logów na porcie COM z prędkością 115200. Podczas wyszukiwania sieci mruga dioda na chipie Wemos D1.

    Dekodowanie pliku KEM

    Aby odczytać klucz AES należy uruchomić program kem-decryptor.py w pythonie ze strony:

    https://gist.github.com/mbursa/caa654a01b9e804ad44d1f00208a2490

    kem-decryptor.py nazwa_pliku_ZIP_lub_KEM hasło

    Na ekranie oraz w pliku etc\wmbusmeters.d\<numer_Licznika> będzie klucz który przepisujemy do pliku config.h, ponownie kompilujemy i wgrywamy oprogramowanie do Wemos D1 mini.

    Konfiguracja HA

    W moim przypadku Wemos przesyła informacje do serwera MQTT uruchomionego jako dodatek w HA.

    Konfiguracja dla sekcji mqtt:

    Plik configuration,xml

    mqtt: !include mqtt.yaml

    Plik mqtt.xml

      - state_topic: "watermeter/0/total"
        name: "watermeter_total"  
        unit_of_measurement: "m³"
        device_class: water
        state_class: total_increasing
        icon: mdi:water
    
      - state_topic: "watermeter/0/target"
        name: "watermeter_target"  
        unit_of_measurement: "m³"
        device_class: water
        state_class: total_increasing
        icon: mdi:water
    
      - state_topic: "watermeter/0/infocode"
        name: "watermeter_infocode"  
        
      - state_topic: "watermeter/0/flowtemp"
        name: "watermeter_flowtemp"  
        unit_of_measurement: '°C'
        device_class: temperature   
    
      - state_topic: "watermeter/0/ambienttemp"
        name: "watermeter_ambienttemp"  
        unit_of_measurement: '°C'
        device_class: temperature   

    A tak to wygląda w HomeAssistant:

    Linki

    Karta katalogowa Multical 21

    https://github.com/chester4444/esp-multical21

    https://github.com/wmbusmeters

  • Mój „inteligentny” dom

    Przez ostatnich kilka lat coraz bardziej rozbudowałem mój SmartDom w oparciu o HomeAssistanta i ostatnio postanowiłem udokumentować szereg rozwiązań oraz integracji. W 2018 pierwszą instancja działała na Raspberry PI 3 z 2GB RAMu, w tej chwili działa na RPI 5 z 8GB.

    Lista urządzeń, które sterują moim domem:

    • Shelly 1
    • Shelly 1 PM
    • Shelly 1 PM gen 4
    • Shelly 2
    • Shelly 2 PM gen 4
    • Sonoff Basic (z firmware Tasmota)
    • Sonoff TH
    • Alarm Integra 64
    • Czujniki SI7021
    • Czujnik HC-SR04 
    • Czujnik BME-280
    • Czujnik deszczu z czujnikiem oświetlenia (zigbee)
    • Moduł WiFi NodeMCU V2
    • Moduł Wifi ESP32
    • Wemos D1 mini
    • Raspberry PI3 (HyperBian)
    • Raspberry PI5 (Debian) + Raspberry AI Kit + Hailo 8L
    • Nettigo Air Monitor 0.3
    • bramka Zigbee
    • Termostaty TUYA HY368 ZigBee oraz TUYA ID3 GTZ08
    • gniazdka zigbee
    • żarówki zigbee
    • sterowanie roletą (zigbee)
    • Ebusd
    • Listwy LED
    • Kamera USB
    • Tester gleby
    • Tagi NFC

    plus szereg integracji:

    Szczegółowa lista urządzeń i integracji

    Konfiguracja HomeAssistanta