Tag: woda

  • Pobranie danych z analogowego licznika wody

    Prosty projekt odczytujący z analogowego licznika dane i przekazujący informację do HomeAssistant przez MQTT. Projekt wykorzystuje bibliotekę uczenia maszynowego Tensorflow Lite do analizy obrazu.

    Hardware

    • ESP32 + OV2640 2.0MP camera module + antena (koszt ok 10$)
    • karton i trochę srebrnej taśmy

    Software

    AI on the Edge Device

    Konfiguracja

    Link

    https://github.com/jomjol/AI-on-the-edge-device

  • 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