WMBusmeters odczyt licznika wody IZAR RC 868 I R4 PL Diehl (AI-Speaker - Home Assistant)

Był licznik gazu to teraz opisze jak dodałem do HA licznik wody.
Przymierzałem się długo ale dopiero @Cezary.K naprowadził mnie jak zacząć, do tego wskazał sprzęt do odczytu za 20zł, jeszcze raz dzięki @Cezary.K i szacunek :+1: :clap:
Zasada działania jest prosta, tuner dvbt (Hardware) zbiera dane z licznika i przekazuje informacje do MQTT (Software) a stamtąd trafiają do Home Assistant.

HARDWARE

Ja użyłem tuner dvbt:
NOT ONLY TV LV5T DELUXE
image
Jaki można użyć inny tuner a jaki nie będzie działa na pewno chętnie podpowie @Cezary.K.

SOFTWARE
Jak postawić serwer wmbusmeters opisane jest na stronie projektu:
weetmuts/wmbusmeters: Read the wireless mbus protocol to acquire utility meter readings. (github.com)

Generalnie serwer wmbusmeters można postawić na

  1. raspberry

  2. jak adon do Home Assistant

  3. Docker

Ja mam serwer Synolgy i w przeciwieństwie do @jolka bardzo lubię kontenery więc zrobiłem na dockerze :wink:

Mój Synology pracuje na DSM 7 i byłem pewien, że będzie problem ze sterownikami do tuner dvbt ale okazało się że jest rozpoznawany przez DSM 7 bez żadnych problemów:

Jak postawić serwer wmbusmeters w kontenerze jest opisane tutaj:
weetmuts/wmbusmeters - Docker Image | Docker Hub
Po zainstalowaniu dockera z wmbusmeters programie File Station będą następujące foldery:
image
Do folderu etc
image
wrzucam pliki wmbusmeters.conf z taką konfiguracją:

loglevel=debug
device=auto
logtelegrams=false
ignoreduplicates=false
format=json
meterfiles=/wmbusmeters_data/logs/meter_readings
meterfilesaction=overwrite
logfile=/wmbusmeters_data/logs/wmbusmeters.log
shell=/usr/bin/mosquitto_pub -h IP_SERWERA -t wmbusmeters/$METER_ID -m "$METER_JSON"

lub jak mamy hasło do MQTT to ostania linijka powinna wyglądać tak:

shell=/usr/bin/mosquitto_pub -h IP_SERWERA -u USER_MQTT -P HASŁO_MQTT -t wmbusmeters/$METER_ID -m "$METER_JSON"

Mój licznik wysyła dane co 8sekund.
Jeżeli parametr ignoreduplicates=false ustawimy na false to do MQTT trafi każdy odczyt co 8sekund.
Jeżeli parametr ignoreduplicates=true ustawimy na true to do MQTT trafi odczyt tylko w przypadku zmiany stanu (np. ktoś odkręci wodę)
Powyższa konfiguracja nie jest docelowa, służy wyszukaniu naszego licznika.
Przed przystąpieniem do szukania najlepiej być jak najbliżej licznika.
Uruchamiamy kontener:


Następnie przechodzimy do File Station i otwieramy plik wmbusmeters.log
image
i patrzymy co wypluje.
Żeby zobaczyć aktualne logi trzeba zamykac i otwierać ten plik, niestety nie udało mi się uruchomić konsoli dla wmbusmetera.
U mnie w logach pojawił się wpis:

Received telegram from: 2140eeee
          manufacturer: (SAP) Sappel (0x4c30)
                  type: Water meter (0x07)
                   ver: 0x00
                device: rtlwmbus[00000001]
                  rssi: 6 dBm
                driver: izar

to znaczy, że został znaleziony licznik (id 2140eeee) i ważne nie jest on kodowany, jakby był kodowany to przy device type była by o tym informacja:
image

Zatrzymujemy kontener i w folderze wmbusmeters.d

image

tworzymy plik z taką konfiguracją:

name=Licznik_wody
type=izar
id=2140eeee

gdzie id to numer naszego znalezionego licznika
Uruchamiamy kontener i teraz w logach w pliku wmbusmeters.log powinismy zobaczyć:

(shell) env "METER_ID=2140eeee"
(shell) env "METER_NAME=izar_2140eeee"
(shell) env "METER_MEDIA=water"
(shell) env "METER_TYPE=izar"
(shell) env "METER_TIMESTAMP=2022-09-15T18:20:56Z"
(shell) env "METER_TIMESTAMP_UTC=2022-09-15T18:20:56Z"
(shell) env "METER_TIMESTAMP_UT=1663266056"
(shell) env "METER_TIMESTAMP_LT=2022-09-15 20:20.56"
(shell) env "METER_DEVICE=rtlwmbus[00000001]"
(shell) env "METER_RSSI_DBM=12"
(shell) env "METER_PREFIX=C51DA"
(shell) env "METER_SERIAL_NUMBER=050552"
(shell) env "METER_TOTAL_M3=191.631"
(shell) env "METER_LAST_MONTH_TOTAL_M3=184.72"
(shell) env "METER_LAST_MONTH_MEASURE_DATE=2022-08-31"
(shell) env "METER_REMAINING_BATTERY_LIFE_Year=14"
(shell) env "METER_CURRENT_ALARMS=underflow"
(shell) env "METER_PREVIOUS_ALARMS=no_alarm"
(shell) env "METER_TRANSMIT_PERIOD_Second=8"
(shell) env "METER_MANUFACTURE_YEAR=2021"

I te dane powinny pojawić się na MQTT a stamtąd przekazujemy je do HA np. za pomocą wpisu w configuration.yaml:

mqtt:
  sensor:
    - name: Licznik Wody Total
      state_topic: 'wmbusmeters/2140e6b6'
      json_attributes_topic: 'wmbusmeters/2140e6b6'
      unit_of_measurement: 'm³'
      value_template: "{{ value_json.total_m3 }}"
      icon: "mdi:hand-water"
    - name: Licznik Wody Last Month Total
      state_topic: 'wmbusmeters/2140eeee'
      json_attributes_topic: 'wmbusmeters/2140eeee'
      unit_of_measurement: 'm³'
      value_template: "{{ value_json.last_month_total_m3 }}"
      icon: "mdi:hand-water"  
    - name: Licznik Wody Last Month Measure Date
      state_topic: 'wmbusmeters/2140eeee'
      json_attributes_topic: 'wmbusmeters/2140eeee'
      value_template: "{{ value_json.last_month_measure_date }}" 
      icon: "mdi:calendar"
    - name: Licznik Wody Current Alarms
      state_topic: 'wmbusmeters/2140eeee'
      json_attributes_topic: 'wmbusmeters/2140eeee'
      value_template: "{{ value_json.current_alarms }}"
      icon: "mdi:alarm-light-outline"    
    - name: Licznik Wody Previous Alarms
      state_topic: 'wmbusmeters/2140eeee'
      json_attributes_topic: 'wmbusmeters/2140eeee'
      value_template: "{{ value_json.previous_alarms }}"
      icon: "mdi:alarm-light-outline" 
    - name: Licznik Wody RSSI
      state_topic: 'wmbusmeters/2140eeee'
      json_attributes_topic: 'wmbusmeters/2140eeee'
      value_template: "{{ value_json.rssi_dbm }}"
      icon: "mdi:access-point-network"

efekt taki:

Jak wszystko działa to optymalizujemy działanie serwera aby nie obciążać Synology.
Moje logi ze znalezienia licznika były takie:

Received telegram from: 2140eeee
          manufacturer: (SAP) Sappel (0x4c30)
                  type: Water meter (0x07)
                   ver: 0x00
                device: rtlwmbus[00000001]
                  rssi: 6 dBm
                driver: izar

więc ostateczna konfiguracja jest taka:

loglevel=normal
device=rtlwmbus[00000001]:t1
listento=t1
logtelegrams=false
ignoreduplicates=true
format=json
meterfiles=/wmbusmeters_data/logs/meter_readings
meterfilesaction=overwrite
logfile=/wmbusmeters_data/logs/wmbusmeters.log
shell=/usr/bin/mosquitto_pub -h IP_SERWERA -t wmbusmeters/$METER_ID -m "$METER_JSON"

lub jak mamy hasło do MQTT to ostania linijka powinna wyglądać tak:

shell=/usr/bin/mosquitto_pub -h IP_SERWERA -u USER_MQTT -P HASŁO_MQTT -t wmbusmeters/$METER_ID -m "$METER_JSON"

4 polubienia

W przypadku natywnej instalacji HA (HAOS, np. na RPi) jest jeszcze prościej, instalujesz add-on z repozytorium GitHub - weetmuts/wmbusmeters: Read the wireless mbus protocol to acquire utility meter readings. konfigurujesz przez GUI (jest nawet enable_mqtt_discovery więc encje w HA pojawiają sie automatycznie), uruchamiasz i cieszysz się zdalnym odczytem liczników, w moim przypadku licznika wody z nakładką Apator, licznika mojego i sąsiada :grin:.

Sprawdź czy również w nocy bo nakładki Apator po godzinach pracy raportują bardzo rzadko. Wynika to z ich konfiguracji przez dostawcę, zakłada on, że odczyty do rozliczeń są wykonywane w godzinach pracy (pn - pt w godzinach 7-17). Z tego powodu odczyty stanu licznika wieczorami i w weekendy są odczytywane z opóźnieniem.

Trochę jest zajęty aby podejść do tego ale proponuję zajrzeć na forum https://forum.arturhome.pl, tam temat był kilka razy poruszany.

A z wodomierzami typu “JS90-2,5-02” marki Apator Powogaz da się coś zrobić?

A jak nie spróbuje to się nie przekona…

To jest sam wodomierz mechaniczny, a dane wysyła nakładka WMBus - masz jakąś?

Niestety nie mam żadnej nakładki :frowning:
A wodomierz nie jest z serii Smart, więc nie wiem czy nawet jak bym zakupił nakładkę WMBus to czy by pasowała.

Jeśli dobrze pamiętam pasowałaby, on ma sprzęg magnetyczny, możesz też poszukać dokumentacji technicznej to się upewnisz.
Jakkolwiek modyfikacje zaplombowanego licznika musisz przeprowadzić w uzgodnieniu z dostawcą wody, jeśli to twój własny podlicznik, z którego się nie rozliczasz to oczywiście możesz robić co chcesz.
(prawdopodobnie używane nakładki widziałem po 40zł)

PS Pewnie już gdzieś to było omawiane, ale jest projekt na bazie modułów ESP32-Cam służący do przechwytywania odczytów z liczników mechanicznych metodą OCR (zupełnie o nim zapomniałem, a mam prawdopodobnie odpowiedni sprzęt to może przyjdzie czas na eksperymenty)

1 polubienie

@damu a może lepszym (tańszym) rozwiązaniem będzie dla Ciebie:

Tu masz licznik za 90zl

Opisałem jak uruchomić ciekawy linuxowy system z KODI CoreELEC na bramce DEV1 i dać jej nowe życie z Docker jako natywnym dodatkiem.

CoreELEC pozwala na używanie dodatku w postaci Docker po SSH. Tuner DVB-T rozpoznany w nim bez problemów

CoreELEC:~/docker/wmbusmeters # docker -v
Docker version 19.03.15, build 99e3ed89195c4e551e87aad1e7453b65456b03ad
CoreELEC:~/docker/wmbusmeters # lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 008: ID 1f4d:c803 G-Tek Electronics Group NotOnlyTV (Lifeview) LV5TDLX DVB-T [RTL2832U]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
CoreELEC:~/docker/wmbusmeters # 

Utworzyłem katalog wmbusmeters

CoreELEC:~/docker/wmbusmeters # pwd
/storage/docker/wmbusmeters
CoreELEC:~/docker/wmbusmeters # 

I stworzyłem kontener za pomocą komendy dockera:

docker run -d --privileged \
    --name=wmbusmeters \
    --restart=always \
    -v /etc/localtime:/etc/localtime:ro \
    -v /storage/docker/wmbusmeters:/wmbusmeters_data \
    -v /dev/:/dev/ \
    weetmuts/wmbusmeters

Pozostałe kroki konfiguracji wmbusmeters można wykonać w/g wskazówek @Tomasz