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

Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *