Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zdalny odczyt licznika wody z nakładką IZAR

krzbor 16 Jul 2021 14:04 3030 2
  • Zdalny odczyt licznika wody z nakładką IZAR Budując inteligentny dom stwierdziłem, że przydały by się odczyty wodomierzy (mam główny i podlicznik na ogród). Głównie chodziło mi o ogród, aby zoptymalizować podlewanie. Jednak odczyt głównego licznika umożliwia dodatkową analizę ewentualnych wycieków. Oba liczniki wyposażone są w nakładki IZAR. Licznik główny w IZAR CP R 3.5 868MHz, a licznik ogrodowy ma zupełnie nową nakładkę i ta jest w wersji IZAR RC 868 i R4 PL. Najpierw postanowiłem przeszukać internet w celu znalezienia informacji, jak odczytywać dane i jak je dekodować i ewentualnie odszyfrować.
    Pomocna okazała się elektroda, gdzie dowiedziałem się, że informacje są transmitowane jako wireless M-BUS oraz, że do odbioru i dekodowania nadaje się program wmbusmeters.
    Oto strona projektu: https://github.com/weetmuts/wmbusmeters

    Odbiornik
    Ponieważ z bezprzewodowym M-BUS nie miałem do czynienia najpierw należało się zaopatrzyć w jakiś odbiornik. Ogólnie są trzy rozwiązania:
    - dedykowany odbiornik wireless M-BUS np. iM871A-USB (należy sprawdzić te urządzenia na stronie projektu wmbusmeters)
    - układ typu CUL (właściwie nanoCUL) – konstrukcja oparta o Arduino Nano z układem FTDI i odbiornikiem CC1101
    - układ oparty o odbiornik DVB-T

    To ostatnie rozwiązanie jest najtańsze, jednak dekodowaniem sygnału musi zajmować się procesor komputera. Planowałem podłączenie układu do Pi i wolałem go nie męczyć takimi rzeczami, tym bardziej, że realizuje już inne funkcje (odbiór i dekodowanie temperatury z serii czujników INODE BT).
    Rozwiązanie pierwsze wygląda na najprostsze, ale zdziwiła mnie cena tych odbiorników (ponad 300zł). Zdecydowałem się na rozwiązanie środkowe – nanoCUL. Jego zaletą jest zewnętrzna antena. Zakup na ebay był bezproblemowy:
    Zdalny odczyt licznika wody z nakładką IZAR
    Są też dostępne trochę tańsze wersje bez obudowy. Niestety, jak się później okazało ten odbiornik nie działa właściwie z wmbusmeters – ma inny firmware. Na stronach często jest informacja o możliwości wgrania odpowiedniego firmware do MBUS, czego wcześniej nie doczytałem. Na całe szczęście na stronie: Link jest firmware nanoCUL-MBUS.hex, który można pobrać i za pomocą XLOADERa Link wgrać.

    Oprogramowanie
    Oprogramowanie wmbusmeters instalowałem na Pi:
    Code:

    git clone https://github.com/weetmuts/wmbusmeters.git
    cd wmbusmeters
    sudo apt install librtlsdr-dev
    sudo apt install libncurses-dev
    ./configure
    make
    sudo make install

    Jak widać najpierw pobieramy źródła, dodatkowe aplikacje, a następnie kompilujemy i instalujemy.
    Teraz możemy podłączyć nasz odbiornik MBUS.
    Aby odczytać dane ze wszystkich widocznych liczników (skan) wydajemy komendę:
    Code:
    wmbusmeters auto:t1 MyWater auto '*' NOKEY

    i musimy trochę poczekać. Jeśli wszystko jest OK powinny być widoczne odczytane informacje. U mnie wskazania licznika mechanicznego i elektronicznego zgadzały się co do litra.
    Tu drobna uwaga – w trybie „auto” wmbusters skanuje wszystkie porty. Niestety źle się to kończy dla BT na Pi – po prostu przestaje działać (BT na Pi działa na UART), a ja na BT mam odczyt temperatury. Długo szukałem przyczyny problemu, a winny okazał się tryb „auto” dlatego po jednorazowym rozpoznaniu lokalizacji naszego odbiornika MBUS możemy zrestartować Pi i od tego momentu więcej nie używać „auto” lecz podawać określony port. U mnie jest to /dev/ttyUSB0
    Skanowanie dla urządzenia CUL wygląda zatem tak:
    Code:
    wmbusmeters /dev/ttyUSB0:cul:t1 MyWater auto '*' NOKEY

    Po więcej informacji odsyłam na stronę projektu.
    Skanowanie umożliwia nam zlokalizowanie naszego licznika/liczników np. po numerze licznika lub po odczytanej wartości zużycia wody.
    Gdy już zlokalizujemy nasze liczniki przystępujemy do ostatecznej konfiguracji.
    W folderze etc powinien być wmbusmeters.conf. Oto moja zawartość tego pliku:
    Code:
    loglevel=normal
    
    device=/dev/ttyUSB0:cul:t1
    logtelegrams=false
    format=json
    #meterfiles=/var/log/wmbusmeters/meter_readings
    #meterfilesaction=overwrite
    logfile=/var/log/wmbusmeters/wmbusmeters.log
    shell=curl -X POST 192.168.1.24/woda.php -d "$METER_JSON"

    dane będą wysyłane w formacie json do mojego skryptu woda.php w postaci POST. Jak widać zakomentowane są dwie linie, gdyż zgodnie z opisem na stronie projektu:
    „If you are running on a Raspberry PI with flash storage and you relay the data to another computer using a shell command (mosquitto_pub or curl or similar) then you might want to remove meterfiles and meterfilesaction to minimize the writes to the local flash file system.”
    Oczywiście linie możemy usunąć/zakomentować później, gdyż na etapie testów zapisywane dane mogą być bardzo przydatne.

    W folderze /etc/wmbusmeters.d mam dwa pliki (każdy dla jednego licznika) o nazwach zgodnych z parametrem „name”. Ich zawartość jest bardzo prosta:
    Code:
    name=glowny
    
    id=210b1234
    key=

    oraz
    Code:
    name=ogrod
    
    id=21401234
    key=

    W każdym pliku mamy: nazwę symboliczną, id (ustalone podczas skanowania), oraz klucz potrzebny do dekodowania. Na całe szczęście dla odbiorników IZAR nie ma klucza. Na stronie projektu jest jednak wymieniona cała lista nakładek, z którymi współpracuje wmbusmeter. Niektóre szyfrują algorytmem AES, ale jak można przeczytać na różnych stronach operatorzy sieci często nie zmieniają domyślnego klucza składającego się np. z samych zer :) Tu znajdziemy informacje o nakładce APATOR i odbiorniku DVB-T: Link

    Gdy przygotujemy pliki oraz skrypt/program, który będzie odbierał dane możemy testować uruchamiając wmbusmeters z domyślną konfiguracją:
    Code:
    sudo wmbusmeters --useconfig=/

    Jeśli wszystko jest OK to możemy uruchamiać całość wraz ze startem systemu operacyjnego. W tym celu wydajemy komendę:
    Code:
    sudo systemctl enable wmbusmeters

    Na koniec jeszcze informacja jak odczytać dane POST wysłane do PHP:
    Code: php
    Log in, to see the code

    Tak odczytane dane możemy zapisywać do bazy danych, obrobić i przesłać dalej lub po prostu zapisać do pliku. Dodatkowe informacje o integracji: https://weetmuts.github.io/wmbusmeterswiki/
    Poniżej jeszcze kilka ciekawych linków, z których można się czegoś dowiedzieć:
    https://github.com/zibous/ha-watermeter
    https://github.com/ZeWaren/izar-prios-smart-meter-collector

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    krzbor
    Level 21  
    Offline 
    krzbor wrote 700 posts with rating 366, helped 15 times. Been with us since 2004 year.
  • #2
    gruby1
    Level 29  
    Bardzo cenne informacje tutaj kolega przedstawił za co osobiście jestem wdzięczny. Sam ten temat kiedyś badałem ale ze względu na małą ilość informacji i natłok zajęć odpuściłem, a tu wszystko podane na tacy. Kawał dobrej roboty.
  • #3
    krzbor
    Level 21  
    gruby1 wrote:
    Bardzo cenne informacje tutaj kolega przedstawił za co osobiście jestem wdzięczny. Sam ten temat kiedyś badałem ale ze względu na małą ilość informacji i natłok zajęć odpuściłem, a tu wszystko podane na tacy. Kawał dobrej roboty.

    Dziękuję za miłe słowa. Rzeczywiście na początku powstaje problem "jak to ugryźć". Dzięki tematowi z elektrody Link dowidziałem się że "można". Ten temat wskazał mi też rozwiązanie programowe: wmbusmeters.
    Reszta to już zgłębianie tematu. Gdyby go w pełni opisać artykuł musiałby być znacznie większy, ale to co opisałem powinno wystarczyć do zrozumienia idei i lepszego czytania git'a wmbusmeters. Myślę, że ciekawa może być wskazówka co do kłopotów z trybem "auto". Zajęło mi to wiele godzin - nie potrafiłem zrozumieć dlaczego przestał działać BT na Pi. Wiedziałem tylko, że jest to związane z wmbusmeters. Nie mogąc rozwiązać problemu przywróciłem zawartość karty SD (miałem zgrany obraz Pi). Rozpocząłem proces instalacji od nowa, gdyż byłem przekonany, że coś się zepsuło podczas instalacji. Ale nie to było problemem. Wszystko zainstalowałem, a BT nadal działał. Dopiero uruchomienie programu rodziło kłopoty. Wmbusmeters ma ciekawy tryb "debug". Już wcześniej zauważyłem, że otwiera i zamyka porty w poszukiwaniu urządzenia i wtedy mnie oświeciło - BT na UART, a wmbusmeters otwiera je i zamyka. Już wiedziałem co robić i myślę, że innym zaoszczędzę trochę czasu.