{"id":2055,"date":"2020-12-31T11:04:36","date_gmt":"2020-12-31T10:04:36","guid":{"rendered":"http:\/\/hamspirit.pl\/SQ9MDD\/?p=2055"},"modified":"2020-12-31T11:04:36","modified_gmt":"2020-12-31T10:04:36","slug":"radiowy-odczyt-wodomierzy","status":"publish","type":"post","link":"https:\/\/sq9mdd.hamspirit.pl\/?p=2055","title":{"rendered":"Radiowy odczyt wodomierzy"},"content":{"rendered":"<p>Podczas planowej wymiany wodomierzy w moim bloku, zauwa\u017cy\u0142em \u017ce nowe wodomierze instalowane przez sp\u00f3\u0142dzielni\u0119 wyposa\u017cone s\u0105 w nak\u0142adki radiowe do zdalnego odczytu stanu licznika. Postanowi\u0142em \u017ce skorzystam z okazji i wrzuc\u0119 odczyt wodomierzy do domoticza.<\/p>\n<p><!--more--><\/p>\n<p>Monter instaluj\u0105cy nowe liczniki niestety nie posiada\u0142 \u017cadnych informacji wiec pozosta\u0142o mi poszukanie pomocy w sieci. Po kr\u00f3tkich poszukiwaniach znalaz\u0142em na stronie<a href=\"https:\/\/hejdom.pl\/blog\/22-home-assistant\/162-home-assistant-odczyt-stanu-licznika-wody-z-zakladka-apator.html\"> hejdom.pl<\/a> artyku\u0142 szczeg\u00f3\u0142owo opisuj\u0105cy spos\u00f3b odczytu z licznik\u00f3w kt\u00f3re mi zainstalowano.<\/p>\n<p><a href=\"http:\/\/10.9.48.151\/?attachment_id=2070\" rel=\"attachment wp-att-2070\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2070\" src=\"http:\/\/10.9.48.151\/wp-content\/uploads\/2020\/12\/photo_2020-12-31_10-57-20-300x280.jpg\" alt=\"\" width=\"300\" height=\"280\" srcset=\"https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/photo_2020-12-31_10-57-20-300x280.jpg 300w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/photo_2020-12-31_10-57-20.jpg 595w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Odczyt licznik\u00f3w realizowany jest poprzez odbi\u00f3r transmisji danych na cz\u0119stotliwo\u015bci 868,9MHz gdzie pracuj\u0105 liczniki. Realizowane jest to za pomoc\u0105 dongla DVB-T na chipsecie RTL. Odebrane dane s\u0105 dekodowane przez oprogramowanie rtl-wmbus. A nast\u0119pnie obrabiane za pomoc\u0105 wmbusmeter, kt\u00f3ry zapisuje odebrane dane w formacie JSON na dysku.<br \/>\nA st\u0105d ju\u017c prosta droga do wrzucenia tego do domoticza.<\/p>\n<p>Prace zaczynam od \u015bci\u0105gni\u0119cia i zainstalowania pakiet\u00f3w do obs\u0142ugi radia.<\/p>\n<pre>sudo apt install rtl-sdr\n<\/pre>\n<p>&nbsp;<\/p>\n<p>W kolejnym kroku \u015bci\u0105gam pakiet GIT\u00a0 je\u015bli jeszcze niema zainstalowanego kt\u00f3ry b\u0119dzie potrzebny do \u015bci\u0105gni\u0119cia oprogramowania z serwisu github.<\/p>\n<pre>sudo apt install git\n<\/pre>\n<p>Po skompletowaniu narz\u0119dzi mo\u017cemy \u015bci\u0105gn\u0105\u0107 pakiet rtl-wmbus z serwisu github, robimy to komend\u0105:<\/p>\n<p>&nbsp;<\/p>\n<pre>git clone https:\/\/github.com\/xaelsouth\/rtl-wmbus.git\n<\/pre>\n<p>Teraz mo\u017cemy przyst\u0105pi\u0107 do kompilacji \u015bci\u0105gni\u0119tego oprogramowania. Wchodzimy do katalogu z wmbus i wydajemy komendy do kompilacji:<\/p>\n<pre>cd rtl-wmbus\nmake\n<\/pre>\n<p>Po zakonczonej kompilacji przenosimy skompilowany plik do odpowiedniego katalogu.<\/p>\n<pre>sudo cp build\/rtl_wmbus \/usr\/bin\/rtl_wmbus\n<\/pre>\n<p>Teraz mo\u017cemy sprawdzi\u0107 czy odbiornik dzia\u0142a i czy odbieramy i dekodujemy jakie\u015b dane:<\/p>\n<pre>\/usr\/bin\/rtl_sdr -f 868.9M -s 1.6e6 - | \/usr\/bin\/rtl_wmbus\n<\/pre>\n<p>Powinni\u015bmy zobaczy\u0107 co\u015b jak na zrzucie ekranu poni\u017cej, przy czym nale\u017cy pami\u0119ta\u0107 \u017ce ilo\u015b\u0107 danych i cz\u0119stotliwo\u015b\u0107 odbioru zale\u017cy od ilo\u015bci licznik\u00f3w w zasi\u0119gu odbioru.<\/p>\n<p><a href=\"http:\/\/10.9.48.151\/?attachment_id=2061\" rel=\"attachment wp-att-2061\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2061\" src=\"http:\/\/10.9.48.151\/wp-content\/uploads\/2020\/12\/rtl-wmbus-300x176.png\" alt=\"\" width=\"300\" height=\"176\" srcset=\"https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/rtl-wmbus-300x176.png 300w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/rtl-wmbus-1024x599.png 1024w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/rtl-wmbus-768x449.png 768w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/rtl-wmbus.png 1046w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Na powy\u017cszym zrzucie wida\u0107 ze odbieram sporo danych, s\u0105 to liczniki moje i okolicznych s\u0105siad\u00f3w, teraz nale\u017cy zainstalowa\u0107 program wmbusmeters i skonfigurowa\u0107 go do odczytu moich licznik\u00f3w. W tym celu pos\u0142u\u017c\u0119 si\u0119 numerem seryjnym nak\u0142adki kt\u00f3ry mo\u017cna znale\u017a\u0107 na naklejce na nak\u0142adce licznika.<br \/>\nPrzechodzimy do katalogu \/home\/pi i za pomoc\u0105 git-a \u015bci\u0105gamy paczk\u0119 z plikami wmbusmasters:<\/p>\n<pre>cd\ngit clone https:\/\/github.com\/weetmuts\/wmbusmeters.git\n<\/pre>\n<p>Po \u015bci\u0105gni\u0119ciu \u017ar\u00f3de\u0142 wchodzimy do katalogu i przygotowujemy program do kompilacji:<\/p>\n<pre>cd wmbusmeters\n.\/configure\n<\/pre>\n<p>I tutaj ma\u0142a uwaga po wydaniu komendy konfigure obserwujemy odpowied\u017a i w razie potrzeby doinstalowujemy zasugerowane pakiety. W moim przypadku by\u0142y to dodatkowe polecenia:<\/p>\n<pre>sudo apt install librtlsdr-dev\nsudo apt install libncurses-dev\n<\/pre>\n<p>Gdy wydanie komendy configure zakonczy si\u0119 bez b\u0142\u0119d\u00f3w i sugestii mo\u017cemy przyst\u0105pi\u0107 do kompilowania i instalacji oporogramowania komendy kolejno jak poni\u017cej:<\/p>\n<pre>make\nsudo make install\nsudo systemctl daemon-reload\n<\/pre>\n<p>Wi\u0119ksza cz\u0119\u015b\u0107 praca za nami, teraz przyst\u0119pujemy do przygotowania plik\u00f3w konfiguracyjnych. Ja mam w domu cztery liczniki wi\u0119c musz\u0119 przygotowa\u0107 odpowiedni\u0105 konfiguracj\u0119. Zaczynam od globalnego pliku konfiguracyjnego:<\/p>\n<pre>sudo pico \/etc\/wmbusmeters.conf\n<\/pre>\n<p>Wewn\u0105trz pliku musi si\u0119 znale\u017a\u0107 taki zapis:<\/p>\n<pre>loglevel=normal\ndevice=rtlwmbus:868.9M\nlogtelegrams=false\nformat=json\nmeterfiles=\/var\/log\/wmbusmeters\/meter_readings\nmeterfilesaction=overwrite\nlogfile=\/var\/log\/wmbusmeters\/wmbusmeters.log\n<\/pre>\n<p>Nast\u0119pnie przechodzimy do katalogu w kt\u00f3rym utworzymy konfiguracje poszczeg\u00f3lnych licznik\u00f3w:<\/p>\n<pre>cd \/etc\/wmbusmeters.d\/\n<\/pre>\n<p>W \u015brodku utworzy\u0142em cztery pliki zawieraj\u0105ce konfiguracj\u0119 moich licznik\u00f3w ka\u017cdy plik musi by\u0107 skonstruowany jak poni\u017cej:<\/p>\n<pre>name=Kuchnia_CW\ntype=apator162\nid=02977724\nkey=00000000000000000000000000000000\n<\/pre>\n<p>Name to przyjazna nazwa licznika a id to numer seryjny nak\u0142adki. Po utworzeniu plik\u00f3w konfiguracyjnych uruchamiamy us\u0142ug\u0119 i czekamy a\u017c dane zostan\u0105 odebrane i w katalogu \/var\/log\/wmbusmeters\/meter_readings\/ zostan\u0105 utworzone pliki z odczytem licznik\u00f3w.<\/p>\n<p>Komenda do uruchomienia odbioru:<\/p>\n<pre>sudo systemctl start wmbusmeters.service\n<\/pre>\n<p>Mo\u017cemy sprawdzi\u0107 czy wszystko dzia\u0142a za pomoc\u0105:<\/p>\n<pre>sudo systemctl status wmbusmeters.service\n<\/pre>\n<p>Jak napisano na hejdom.pl dane s\u0105 przesy\u0142ane w godzinach pracy inkasent\u00f3w cz\u0119\u015bciej, a poza godzinami ich pracy, by oszcz\u0119dzi\u0107 bateri\u0119 raz na p\u00f3\u0142 godziny. Nale\u017cy wi\u0119c cierpliwie czeka\u0107 a\u017c pojawi\u0105 si\u0119 wszystkie pliki z odczytami licznik\u00f3w.<\/p>\n<p>Zawarto\u015b\u0107 plik\u00f3w odczyt\u00f3w to wszystkie interesuj\u0105ce nas dane:<\/p>\n<pre>\n{\"media\":\"water\",\"meter\":\"apator162\",\"name\":\"Kuchnia_CW\",\"id\":\"02777124\",\"total_m3\":0.081,\"timestamp\":\"2020-12-31T10:06:52Z\",\"device\":\"rtlwmbus[00000001]\",\"rssi_dbm\":120}\n{\"media\":\"water\",\"meter\":\"apator162\",\"name\":\"Kuchnia_ZW\",\"id\":\"03777491\",\"total_m3\":0.155,\"timestamp\":\"2020-12-31T10:08:24Z\",\"device\":\"rtlwmbus[00000001]\",\"rssi_dbm\":140}\n{\"media\":\"water\",\"meter\":\"apator162\",\"name\":\"Lazienka_CW\",\"id\":\"02777294\",\"total_m3\":0.415,\"timestamp\":\"2020-12-31T10:08:04Z\",\"device\":\"rtlwmbus[00000001]\",\"rssi_dbm\":127}\n{\"media\":\"water\",\"meter\":\"apator162\",\"name\":\"Lazienka_ZW\",\"id\":\"03777702\",\"total_m3\":0.607,\"timestamp\":\"2020-12-31T10:08:18Z\",\"device\":\"rtlwmbus[00000001]\",\"rssi_dbm\":129}\n<\/pre>\n<p>Ostatni etap pracy to skrypt w pythonie kt\u00f3ry odczytuje dane z plik\u00f3w w katalogu \/var\/log\/wmbusmeters\/meter_readings\/<br \/>\nZawarto\u015b\u0107 tego skryptu znajduje si\u0119 poni\u017cej:<\/p>\n<pre>#!\/usr\/bin\/python\n\nimport requests\nimport json\nimport urllib\n\ndomoti_ip = '10.9.48.3'\n\nkuchnia_CW_file = \"\/var\/log\/wmbusmeters\/meter_readings\/Kuchnia_CW\"\nkuchnia_ZW_file = \"\/var\/log\/wmbusmeters\/meter_readings\/Kuchnia_ZW\"\nlazienka_CW_file = \"\/var\/log\/wmbusmeters\/meter_readings\/Lazienka_CW\"\nlazienka_ZW_file = \"\/var\/log\/wmbusmeters\/meter_readings\/Lazienka_ZW\"\n\nkuchnia_CW_idx = '132'\nkuchnia_ZW_idx = '133'\nlazienka_CW_idx = '134'\nlazienka_ZW_idx = '135'\n\ndef read_and_set_data(input_file,idx):\n    with open(input_file) as json_file:\n        data = json.load(json_file)\n        urllib.urlopen('http:\/\/' + domoti_ip + '\/json.htm?type=command&amp;param=udevice&amp;idx=' + str(idx) + '&amp;svalue=' + str(data['total_m3']*1000))\n        print(data['total_m3'])\n\ntry:\n    read_and_set_data(kuchnia_CW_file,kuchnia_CW_idx)\nexcept:\n    print(\"b\/d\")\n\ntry:\n    read_and_set_data(kuchnia_ZW_file,kuchnia_ZW_idx)\nexcept:\n    print(\"b\/d\")\n\ntry:\n    read_and_set_data(lazienka_CW_file,lazienka_CW_idx)\nexcept:\n    print(\"b\/d\")\n\ntry:\n    read_and_set_data(lazienka_ZW_file,lazienka_ZW_idx)\nexcept:\n    print(\"b\/d\")\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Jak wida\u0107 odpowiednie odczyty s\u0105 przesy\u0142ane do utworzonych w domoticzu obiekt\u00f3w licznik\u00f3w. Konfiguruj\u0105c liczniki, ustawiamy typ na wodomierz. Powy\u017cszy skrypt wysy\u0142a do domoticza dane w litrach, dzi\u0119ki temu wykresy w domoticzu b\u0119d\u0105 dzia\u0142a\u0107 poprawnie.<\/p>\n<p>Finalnie efekt wygl\u0105da jak poni\u017cej:<\/p>\n<p><a href=\"http:\/\/10.9.48.151\/?attachment_id=2071\" rel=\"attachment wp-att-2071\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2071\" src=\"http:\/\/10.9.48.151\/wp-content\/uploads\/2020\/12\/wodomierze-domoticz-300x148.png\" alt=\"\" width=\"300\" height=\"148\" srcset=\"https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/wodomierze-domoticz-300x148.png 300w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/wodomierze-domoticz-768x378.png 768w, https:\/\/sq9mdd.hamspirit.pl\/wp-content\/uploads\/2020\/12\/wodomierze-domoticz.png 946w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Teraz po stronie domoticza mog\u0119 generowa\u0107 raporty ze zu\u017cycia wody, ustawi\u0107 alarmy wycieku wody itd&#8230;<\/p>\n<p>R.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Podczas planowej wymiany wodomierzy w moim bloku, zauwa\u017cy\u0142em \u017ce nowe wodomierze instalowane przez sp\u00f3\u0142dzielni\u0119 wyposa\u017cone s\u0105 w nak\u0142adki radiowe do zdalnego odczytu stanu licznika. Postanowi\u0142em \u017ce skorzystam z okazji i wrzuc\u0119 odczyt wodomierzy do domoticza.<\/p>\n","protected":false},"author":2,"featured_media":2070,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,22],"tags":[],"class_list":["post-2055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-domoticz","category-software"],"_links":{"self":[{"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/posts\/2055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2055"}],"version-history":[{"count":0,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/posts\/2055\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=\/wp\/v2\/media\/2070"}],"wp:attachment":[{"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sq9mdd.hamspirit.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}