WMBUS odczyt danych...
 
Powiadomienia
Wyczyść wszystko

WMBUS odczyt danych z wodomierza

superprzemo
(@superprzemo)
Młodzik

Witam,

Mam takie pytanie: czy ktoś już przerabiał temat odczytu danych z nakładek APATORa?

Mam na wodomierzu założoną nakładkę AT-WMBUS-17 do zdalnego odczytu. W necie czytałem, że jest możliwy odczyt wskazań takiego wodomierza: https://www.domoticz.com/forum/viewtopic.php?t=16091 nawet za pomocą tunera DVBT: https://hejdom.pl/blog/22-home-assistant/162-home-assistant-odczyt-stanu-licznika-wody-z-zakladka-apator.html

Czy ktoś już próbował odczytać takie dane i pomyślnie przesłać je do Domoticz?

 

 

Cytuj
Autor tematu Dodane : 27/11/2020 2:40 pm
superprzemo
(@superprzemo)
Młodzik

Udało mi się odczytać ilość wody z nakładki APATOR na wodomierzu (AT-WMBUS-16-2) za pomocą tunera DVB-T RTL2838U RTL-SDR (na znanym portalu za ok. 70zł), poniżej opis co trzeba zrobić żeby przesłać dane do Domoticza:

Instalacja RTL:

zaczynamy od rtl-sdr:

sudo apt-get update
sudo apt-get install cmake build-essential python-pip libusb-1.0-0-dev python-numpy git pandoc
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
make
sudo make install
sudo ldconfig
sudo cp src/rtl_sdr /usr/bin/rtl_sdr

teraz rtl-wmbus:

cd
git clone https://github.com/xaelsouth/rtl-wmbus.git
cd rtl-wmbus
make
sudo cp build/rtl_wmbus /usr/bin/rtl_wmbus

możemy teraz spróbować odpalić czy skanuje, wkładamy tuner i odpalamy:

rtl_sdr -f 868.95M -s 1600000 - 2>/dev/null | build/rtl_wmbus

Czasami trzeba trochę dłużej poczekać żeby ukazała nam się ramka:

T1;1;1;2021-01-03 20:47:39.000;7;20;XXXXXXXX;0x4e4401065499040105077a77004085c03493eaa8da63b8d3759707a957d658fa9dcf4b6dc31446bff494249b98de13fa04622141f45b69a1b195ff04ad163e606132df2f3ab693a656e4936b5ea4f7

Możemy teraz się zająć dodaniem wirtualnego czujnika w domoticzu. W tym celu klikamy na "Utwórz wirtualne czujniki" w Konfigurajca/Sprzęt. Wybieramy "Custom Sensor", nazywamy np: "Woda" i w ostatnie pole wpisujemy "m3", po dodaniu czujnika zczytujemy IDX w Urządzeniach (będzie mam potrzebne w konfiguracji wmbusmeters).

Wyjmujemy tuner z USB i instalujemy wmbumeters:

cd
sudo apt-get install libncurses5-dev
git clone https://github.com/weetmuts/wmbusmeters.git
cd wmbusmeters
./configure
make
sudo make install
sudo systemctl daemon-reload

Dodajemy plik konfiguracyjny z nakładką licznika:

sudo nano /etc/wmbusmeters.d/MyTapWater

Konfiguracja nakładki powinna mniej więcej wyglądać tak:

name=MyTapWater
type=apator162
id=XXXXXXXX
key=00000000000000000000000000000000
shell=/usr/bin/mosquitto_pub -h localhost -t domoticz/in -m "{\"idx\":ABC,\"svalue\":\"$METER_TOTAL_M3\"}"

Gdzie XXXXXXXX to ośmio-cyfrowy numer nakładki, a ABC to IDX z Domoticza, edytujemy plik konfiguracyjny wmbusmeters:

sudo nano /etc/wmbusmeters.conf

Zmieniamy device na:  device=rtlwmbus:868.9M  oraz na końcu dodajemy:   shell=/usr/bin/mosquitto_pub -h localhost -t domoticz/in -m "{\"idx\":ABC,\"svalue\":\"$METER_TOTAL_M3\"}"    i zapisujemy.

Możemy teraz uruchomić wmbusmeters oraz ustawić żeby ładował się przy uruchomieniu systemu:

sudo systemctl start wmbusmeters
sudo systemctl enable wmbusmeters

Po włożeniu tunera do USB tuner powinien odczytywać ramki danych z nakładki, jeżeli wszystko jest dobrze skonfigurowane, to po jakimś czasie domoticz powinien otrzymać aktualny stan licznika wody.

 

Podsumowanie:

Ośmio-cyfrowy numer nakładki XXXXXXXX można uzyskać odczytując numer na nakładce i zmienić na system szestnastkowy HEX (numer na nakłdce jest zapiasany w systemie dziesiętnym), lub odczutyjąc z przechwyconej ramki.

Jak ktoś ma inną nakładkę (AT-WMBUS-08) to w pliku konfiguracyjnym /etc/wmbusmeters.d/MyTapWater  trzeba zmienić type na type=apator08.

Standardowo (fabrycznie) nakładki mają klucz AES 00000000000000000000000000000000, może się jednak zdażyć, że opertor zmieni ten klucz i wówczas nie będziemy mieli odczytu bez znajomości tego klucza.

Nakładki wysyłają ramki w różnych odcinkach czasu (czasami trzeba trochę dłużej odczekać żeby uzyskać odczyt).

Obsługa RTL+wmbusmeters powoduje dodatkowe obciązenie procesora (w przypadku RPI3+ jest to ok. 7-9% więcej).

 

Na koniec odsyłam do strony domowej projektu wmbusmeters: https://github.com/weetmuts/wmbusmeters

OdpowiedzCytuj
Autor tematu Dodane : 03/01/2021 7:21 pm
sp5mbx polubień
piotras78
(@piotras78)
Stażysta

Cześć

Próbuje odpalić u siebie wmbuster.

Mam kilka pytań:

1. Jak wygląda plik konfiguracyjny w przypadku dwóch lub więcej nakładek?

2. W opisie jest ze ABC to idx wirtualnego czujnika. Nigdzie nie widze ABC wiec domyslam sie ze to błąd i wpisujemy odczytany nr w miejsce IDX ?

"{\"idx\"\"$METER_TOTAL_M3\"}

3. Czy tak samo ttrzeba wpisac nr idx w

sudo nano /etc/wmbusmeters.conf

4. Tuner widzi mi nakładki ale po wydaniu komendy 

sudo systemctl start wmbusmeter

otrzymuję komunikat:

Failed to start wmbusmeter.service: Unit wmbusmeter.service not found.

W trakcie instalacji nie miałem żadnych problemów i błędów - w czym jest probem ?

EDIT:

Ad. 4

Jest błąd w komendzie - na końcu powinno być "s"

Prawidłowa:

sudo systemctl start wmbusmeters

OdpowiedzCytuj
Dodane : 03/09/2021 4:47 pm
Mariusz K
(@mariuszk)
Młodzik

A czy ktoś poszedł dalej, żeby z tych odczytów dało się robić sensowne raporty?

Custom sensor daje tylko odczyty, które cały czas rosną i w zasadzie nic to nie raportuje, ot odczyt i tyle. Czy da się jakoś to dalej pchnąć w zużycie tygodniowe, miesięczne, itd... Niby można podpiąć odczyty pod 'Counter', w domoticz, ale jego wskazania dzienne zmieniają się tylko co 1m3 (1000l), co jest trochę lipą. Może ktoś już z tym walczył?

OdpowiedzCytuj
Dodane : 15/06/2022 12:13 pm
piotras78
(@piotras78)
Stażysta

Ja znalazłem coś takiego

http://hamspirit.pl/SQ9MDD/?p=2055

Niestety nie mam jak sprawdzić bo wyrzuca mi ciągle błąd requests w pythonie i nie wiem jak go naprawić (a próbowałem już chyba wszystkiego)

OdpowiedzCytuj
Dodane : 17/06/2022 10:30 pm
Mariusz K
(@mariuszk)
Młodzik

@piotras78 a próbowałeś odpalać z linii polecenia zamiast skryptu w domoticz?

 

OdpowiedzCytuj
Dodane : 18/06/2022 12:09 am
piotras78
(@piotras78)
Stażysta

Nie próbowałem - jakoś ostatnio nie miałem czasu dalej z tym powalczyć. A co to zmieni ? Żeby działało to chyba musi być odpalony skrypt w domoticzu ? Skupiłem się na naprawie tego błędu requests ale poległem.

OdpowiedzCytuj
Dodane : 18/06/2022 10:35 pm
superprzemo
(@superprzemo)
Młodzik

Ja zamieniłem odczyty na aktualny przepływ: https://www.smartnydom.pl/forum/domoticz-reguly/zamiana-stanu-licznika-w-m3-na-przeplyw/

OdpowiedzCytuj
Autor tematu Dodane : 20/06/2022 11:16 am
Mariusz K
(@mariuszk)
Młodzik

@piotras78

No właśnie nie musi, bo on tylko podsyła dane do domoticz, które pobiera z plików. Chodziło mi o to, żeby mieć orientacyjne, ale w miarę sensowne koszty miesięczne (raport przy liczniku). Ponieważ licznik wysyła dane tylko w dni powszednie w godzinach od 7 do 18, w cronie ustawiłem odpalanie go w tym czasie co kilka minut.

Na razie testuję, ale wygląda, że chyba to będzie to, o co mi chodziło.

OdpowiedzCytuj
Dodane : 20/06/2022 11:37 am
superprzemo
(@superprzemo)
Młodzik

To zależy jaką masz nakładkę, moja wysyła dane cały czas, przez 24 h/ dobę, tylko w weekendy wysyła dane rzadziej. Możesz napisać skrypt żeby uruchamiał się raz w miesiącu i odejmował obecne wskazanie od tego sprzed miesiąca. Mi bardziej pasuje przepływ, bo wówczas mogę wykryć jakiś przeciek lub zalanie i mogę przeanalizować kiedyś jest największe zużycie wody.

OdpowiedzCytuj
Autor tematu Dodane : 20/06/2022 12:22 pm
piotras78
(@piotras78)
Stażysta

@mariuszk Spróbowałem wczoraj uruchomić skrypt z linii poleceń ale ciągle mi zwraca wartość b/d i nie aktualizuje danych w domoticzu. Cos u mnie jest chyba nie tak. RTL działa prawidłowo bo czyta różne liczniki z okolicy

OdpowiedzCytuj
Dodane : 24/06/2022 9:16 pm
Mariusz K
(@mariuszk)
Młodzik

@piotras78 wrzucę wieczorem to co mam i mi działa.

OdpowiedzCytuj
Dodane : 25/06/2022 11:03 am
Mariusz K
(@mariuszk)
Młodzik

z crona:

*/5 7-19 * * 1-5 python /home/pi/liczniki.py 

co oznacza, że co 5 minut, między 7-19 , każdego dnia miesiąca, w każdym miesiącu, w dniach poniedziałek-piątek odpala się skrypt ze ścieżki.

 

niżej zawartość liczniki.py (tam w pewnym momencie użyłem -1721, żeby sobie sprowadzić obecne wskazanie licznika do trybu inicjalnego - żeby mi nie naliczył statystyk za tą wartość): 

 

#!/usr/bin/python

import requests
import json
import urllib

domoti_ip = '192.168.1.3:8080'

woda_file = "/var/log/wmbusmeters/meter_readings/woda_kuchnia"
smieci_file = "/var/log/wmbusmeters/meter_readings/woda_kuchnia"

woda_idx = '515'
smieci_idx = '516'

def read_and_set_data(input_file,idx):
    with open(input_file) as json_file:
        data = json.load(json_file)
        urllib.urlopen('http://' + domoti_ip + '/json.htm?type=command&param=udevice&idx=' + str(idx) + '&svalue=' + str((data['total_m3']-1721)*1000))

try:
    read_and_set_data(woda_file,woda_idx)
except:
    print("b/d")
try:
    read_and_set_data(smieci_file,smieci_idx)
except:
    print("b/d")

 

Jeżeli masz cały czas "b/d" to bym zwrócił uwagę na to, czy użytkownik wykonujący skrypt pythona ma uprawnienia do odczytu pliku wskazań licznika, oraz, czy ścieżka do plików jest na pewno dobra (np. nano /var/log/wmbusmeters/meter_readings/woda_kuchnia) czy plik się otwiera i pokazuje zawartość?

OdpowiedzCytuj
Dodane : 27/06/2022 3:50 pm
piotras78
(@piotras78)
Stażysta

@mariuszk - mam identycznie z wyjątkiem tego -1721. U mnie jest tylko dodatkowo print data tak jak na stronie z której to robiłem

#!/usr/bin/python

import requests
import json
import urllib

domoti_ip = '192.168.0.100:8082'

licznik_ZW_file = "/var/log/wmbusmeters/meter_readings/Licznik_ZW"
podlicznik_ZW_file = "/var/log/wmbusmeters/meter_readings/Podlicznik_ZW"

licznik_ZW_idx = '778'
podlicznik_ZW_idx = '779'

def read_and_set_data(input_file,idx):
    with open(input_file) as json_file:
        data = json.load(json_file)
        urllib.urlopen('http://' + domoti_ip + '/json.htm?type=command&param=udevice&idx=' + str(idx) + '&svalue=' + str(data['total_m3']*1000))
        print(data['total_m3'])


try:
    read_and_set_data(licznik_ZW_file,licznik_ZW_idx)
except:
    print("b/d")

try:
    read_and_set_data(podlicznik_ZW_file,podlicznik_ZW_idx)
except:
    print("b/d")

Uprawnienia oczywiście mam wszystkie - od tego zaczynałem sprawdzenie.

Z jakiego źródła instalowałeś RTLa ? z tej strony czy tej gdzie podałem link. Instalacje trochę się różnią

OdpowiedzCytuj
Dodane : 27/06/2022 5:47 pm
Mariusz K
(@mariuszk)
Młodzik

@piotras78 aaaa.. no ja przyjąłem, że odczyty w pliku już masz...

Patrząc po zawartości strony, to chyba wg tego tutoriala robiłem... chociaż teraz widzę, że tam nawet skrypt jest, którego wcześniej jakoś nie ogarnąłem 🙂

z tym, że ja w /etc/wmbusmeters.conf mam:

loglevel=normal
# Remember to change auto here to the device you are going to use in production.
#device=auto:t1
device=rtlwmbus:868.9M
logtelegrams=false
format=json
meterfiles=/var/log/wmbusmeters/meter_readings
meterfilesaction=overwrite
logfile=/var/log/wmbusmeters/wmbusmeters.log

Warto dodać ścieżki do plików w konfigu wyżej, bo w nowszej wersji wmbusmeters zmienili te domyślne (których np. ja używałem), ale plikiem można to sobie "wyprostować".

Natomiast w pliku konfigu licznika (/etc/wmbusmeters.d/woda_kuchnia):

name=woda_kuchnia
type=rfmtx1
id=14075973
key=00000000000000000000000000000000
shell=/usr/bin/mosquitto_pub -h localhost -t domoticz/in -m "{\"idx\":504,\"svalue\":\"$METER_TOTAL_M3\"}"
shell=/usr/bin/mosquitto_pub -h localhost -t domoticz/in -m "{\"idx\":505,\"svalue\":\"$METER_TOTAL_M3\"}"
shell=/usr/bin/mosquitto_pub -h localhost -t domoticz/in -m "{\"idx\":510,\"svalue\":\"$METER_RSSI_DBM\"}"


 

OdpowiedzCytuj
Dodane : 28/06/2022 9:37 am
piotras78
(@piotras78)
Stażysta

@mariuszk - po co odczytujesz te same dane pod dwa różne idx'y (504 i 505).

Zrobiłem tak jak u Ciebie i pokazuje mi stan liczników w m3 ale nadal nie działa mi ten skrypt w pythonie - myślę że coś tu jest nie tak. Może da się napisać jakoś w dzvents żeby odczytywał te dane z sensorów w m3 i przekazywał do sensorów/liczników wody żeby były raporty miesięcznego zużycia ?

OdpowiedzCytuj
Dodane : 28/06/2022 10:01 pm
Mariusz K
(@mariuszk)
Młodzik

@piotras78 jeżeli już masz odczyty w pliku, to instaluj w pip (pip install requests json urllib) i wtedy odpal skrypt pythona z łapy (to co w przykładzie z crona wyżej jest).

 

Te 2 idx, to wcześniej kombinowałem z licznikami (general i RFXmeter) bez pythona, ale żaden licznik nie robił mi raportów, stąd to zostało. Tzn. RFX Meter ma raporty, ale z rozdzielczością do 1m3, co jest trochę bardziej niż orientacyjne. Chociaż w jakimś dłuższym okresie sobie porównam jak to się zgra z tymi licznikami w rozdzielczości litrowej (zawsze gdzieś ten 1m3 na przełomie miesiąca może mi uciąć).

Dzvents jestem za cienki, python w domoticz nie widzi bibliotek systemu (ale dziecko mi wspomniało, że może mieć własne środowisko i nie widzieć bibliotek systemowych). Więc sobie odpuściłem odpalanie i kombinowanie z tym w domoticz, skoro cron mi robi robotę i w przypadku czasowej transmisji przez licznik, mogę to sobie również ogarnąć. Zresztą wmbusmeters też pracuje w zakresach czasowych, bo widzę, że on dość mocno obciąża procesor w pi.

OdpowiedzCytuj
Dodane : 29/06/2022 11:36 am
piotras78
(@piotras78)
Stażysta

Niestety u mnie po wydaniu polecenia

pi@smarticz:~ $ pip install requests json urllib

Zwraca komunikat
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (2.27.1)
ERROR: Could not find a version that satisfies the requirement json (from versions: none)
ERROR: No matching distribution found for json
WARNING: There was an error checking the latest version of pip.

z ręki jak odpalam skrypt to ciagle mam b/d. Wygląda na to że skrypt się wykonuje tylko nie potrafi przesłać odczytanych z plików danych (lub nawet ich odczytać).

Chyba odpuszcze temat - może spróbuje na czystym systemie w drugim raspberry (teraz mam smarticza). Z dzvents tez nie moja bajka

OdpowiedzCytuj
Dodane : 29/06/2022 11:38 pm
Mariusz K
(@mariuszk)
Młodzik

@piotras78 hehe, to ja potrafię całymi tygodniami (no nie cały czas) o coś walczyć, aż mi się to uda zrobić... dopiero wtedy odpuszczam 🙂

Ale do tematu, bo może być kilka myków które bym zasugerował.

Gdzieś doczytałem, że nie powinno się ani pip ani pythona instalować przez sudo (chyba komunikat przy instalacji nawet występuje), ale raspberry ma ponoć kłopoty bez sudo. Więc to należałoby sprawdzić.

Kolejna rzecz, jeżeli masz pythona 3.7, to może skrypt odpalać jako python3.... a biblioteki instalować przez pip3 install... (i tu znowu z sudo i bez sudo). 

No i samo odpalanie skryptu również spróbować przez sudo python3 /sciezka/do/skryptu.py.

P.S. Ja u siebie mam 2 wersje pythona (python - 2.7 i python3 - 3.7). Skrypt śmiga z wersji 2.7, który był instalowany przez sudo, ale skrypt odpalany jest bez sudo.

P.S.2 Ważne!!!

json is a built-in module, you don't need to install it with pipWięc tu sprawa prosta 🙂 tego się nie instaluje dodatkowo 🙂

OdpowiedzCytuj
Dodane : 30/06/2022 9:02 am
piotras78
(@piotras78)
Stażysta

@mariuszk - dzięki za podpowiedzi ale już to testowałem. Mam dwie wersje pythona tak jak u Ciebie - na żadnej nie działa. Instalacja przez pip3 tez niczego nowego nie wnosi - ciągle wyrzuca błędy. 

OdpowiedzCytuj
Dodane : 01/07/2022 12:00 am
Udostępnij: