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
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
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
-
raspberry
-
jak adon do Home Assistant
-
Docker
Ja mam serwer Synolgy i w przeciwieństwie do @jolka bardzo lubię kontenery więc zrobiłem na dockerze
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:
Do folderu etc
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
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 najważniejsze, że nie informacji encrypted
(jak na screenie niżej) co oznacza że mój liczniki nie jest zakodowany kluczem
Zatrzymujemy kontener i w folderze wmbusmeters.d
tworzymy plik z taką konfiguracją:
name=Licznik_wody
type=izar
id=2140eeee
key=
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³'
state_class: total_increasing
device_class: water
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 masz 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"
wstaw swoje IP serwera w miejsce IP_SERWERA
wstaw swoje nazwę użytkownika dla MQTT w miejsce USER_MQTT
wstaw swoje hasło do MQTT w miejsce HASŁO_MQTT