Wątek archiwalny - Komponent wM-Bus do ESPHome (SzczepanLeon) starsze wersje do 1.5.1 włącznie

Wypchałem do githuba nową wersję 1.2.0.
Można zdefiniować klucz per sensor.
Domyślny klucz jest pusty, więc posiadacze apator162 muszą dodać linię:

key: "00000000000000000000000000000000"
1 polubienie

Działa, dzięki za pomoc.
pozdrawiam

1 polubienie

T1;0;0;2023-01-08 22:22:14.000;36;53;FF126858;0x6eff0106586812ffff07ffffffff8564ffffffb96cff2c95ff10ffffa606e2e2ff52881877ffff90b0ffffffffffffffffffffffffffffffffffffffff69ffffff26ff069cacffceffffa6e235b601ffffffffffff0fffffff14e0ff03ffffff79ffffffffffffffffffccffc0ff93<0A>"

Otrzymałem coś takiego ??

2 posty zostały scalone z istniejącym tematem: Nakładki Apator wm-bus (08 i 16) wymiana ogniwa zasilającego i reset wskazań

Gdzie i z jakiego licznika?

Licznik fila sztum , wcześniej jest zdięcie

Podeślij jakąś ramkę odczytaną z CC1101. To co podesłałeś to jakieś śmieci, które nie przeszły sprawdzania ani CRC ani dekodowania 3OUTOF6.

Hej, gdyby ktoś się zastanawiał jak skalibrować odczyty poprzez WMBUS na używanych nakładkach to jest genialna prosta metoda - wystarczy dodać filtr do sensora, np.

sensor:
  - platform: wmbus
    name: "Licznik cieplej wody"
    meter_id: 0x00080470
    type: apator162
    key: "00000000000000000000000000000000"
    filters:
      offset: -10.0

Skutkuje to skalibrowaniem odczytu o -10 m3. Oczywiscie trzeba odczytać swoje zużycie, zużycie jakie podaje obecnie nakładka i tutak +/- podać różnice.

Póki co mi został jeszcze probelm najwazniejszy - tak jakby nakładka nie pasowała do licznika Apator? Nie mogę docisnąć by usłyszeć klik i nie trzyma się mocno, a niby zaczepy odpowiadają i nie są urwane :frowning: Ktoś montował używane nakładki apatora?

Mój licznik taki jak pożej
image

@Piotr Nie znam się na wodomierzach za bardzo, ale chyba zasmucę Ciebie.
Nakładka tam nie podejdzie, a nawet jak jakoś ją umocujesz to nic nie odczyta.
Ta najmniejsza wskazówka 0,0001 musi być inaczej wykonana. Ty masz wodomierz STANDARD JS90-1,6 a do nakładki potrzebujesz przynajmniej SMART+ JS90-1,6. Taki jak poniżej:
obraz

Uprzedziłeś mnie - właśnie miałem pisać, że chyba o tą wskazówkę chodzi a w nakładce są 3 czujniki optyczne reagujące na zmiane pola białe/czarne. No nic - pobawiłem się trochę i tyle :slight_smile:

16 postów zostało podzielonych na nowy temat: Nakładki Apator wm-bus (08 i 16) wymiana ogniwa zasilającego i reset wskazań

@ _Szczepan, próbuję skompilować przykładowy kod dla wmbus z gitbub. Już podczas kompilacji wyskakuje parę ostrzeżeń:

In file included from src\esphome\components\wmbus\wmbus.cpp:2:
src\esphome\components\wmbus\wmbus.cpp: In member function 'virtual void esphome::wmbus::WMBusComponent::loop()':
src\esphome\components\wmbus\wmbus.cpp:59:25: warning: too many arguments for format [-Wformat-extra-args]
   59 |           ESP_LOGE(TAG, "Something was not OK during decrypting telegram for ID [0x%08X] '%s' key: '$s'", meter_id, sele
cted_driver->get_name().c_str(), key.c_str());
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/esphome/core/log.h:69:36: note: in definition of macro 'ESPHOME_LOG_FORMAT'
   69 | #define ESPHOME_LOG_FORMAT(format) format
      |                                    ^~~~~~
src/esphome/core/log.h:146:28: note: in expansion of macro 'esph_log_e'
  146 | #define ESP_LOGE(tag, ...) esph_log_e(tag, __VA_ARGS__)
      |                            ^~~~~~~~~~
src\esphome\components\wmbus\wmbus.cpp:59:11: note: in expansion of macro 'ESP_LOGE'
   59 |           ESP_LOGE(TAG, "Something was not OK during decrypting telegram for ID [0x%08X] '%s' key: '$s'", meter_id, sele
cted_driver->get_name().c_str(), key.c_str());
      |           ^~~~~~~~
In file included from src\esphome\components\wmbus\sensor\wmbus_sensor.cpp:1:
src\esphome\components\wmbus\sensor\wmbus_sensor.cpp: In member function 'virtual void esphome::wmbus::WMBusSensor::dump_config(
)':
src\esphome\components\wmbus\sensor\wmbus_sensor.cpp:24:22: warning: format '%lu' expects argument of type 'long unsigned int',
but argument 5 has type 'uint32_t' {aka 'unsigned int'} [-Wformat=]
   24 |   ESP_LOGCONFIG(TAG, "  ID: %lu [0x%08X]", this->id, this->id);
Compiling .pioenvs\wemoswmbus\src\esphome\core\helpers.cpp.o
      |                      ^~~~~~~~~~~~~~~~~~~~
src/esphome/core/log.h:69:36: note: in definition of macro 'ESPHOME_LOG_FORMAT'
   69 | #define ESPHOME_LOG_FORMAT(format) format
      |                                    ^~~~~~
src/esphome/core/log.h:154:33: note: in expansion of macro 'esph_log_config'
  154 | #define ESP_LOGCONFIG(tag, ...) esph_log_config(tag, __VA_ARGS__)
      |                                 ^~~~~~~~~~~~~~~
src\esphome\components\wmbus\sensor\wmbus_sensor.cpp:24:3: note: in expansion of macro 'ESP_LOGCONFIG'
   24 |   ESP_LOGCONFIG(TAG, "  ID: %lu [0x%08X]", this->id, this->id);
      |   ^~~~~~~~~~~~~
src\esphome\components\wmbus\sensor\wmbus_sensor.cpp:24:31: note: format string is defined here
   24 |   ESP_LOGCONFIG(TAG, "  ID: %lu [0x%08X]", this->id, this->id);
Compiling .pioenvs\wemoswmbus\src\esphome\core\log.cpp.o
      |                             ~~^
      |                               |
      |                               long unsigned int
      |                             %u

oraz:

Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\3outof6.cpp.o
Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\aes.cpp.o
Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\crc.cpp.o
.piolibdeps\wemoswmbus\SmartRC-CC1101-Driver-Lib\ELECHOUSE_CC1101_SRC_DRV.cpp: In member function 'void ELECHOUSE_CC1101::Reset(
)':
.piolibdeps\wemoswmbus\SmartRC-CC1101-Driver-Lib\ELECHOUSE_CC1101_SRC_DRV.cpp:149:3: warning: this 'while' clause does not guard
... [-Wmisleading-indentation]
  149 |   while(digitalRead(MISO_PIN));
      |   ^~~~~
.piolibdeps\wemoswmbus\SmartRC-CC1101-Driver-Lib\ELECHOUSE_CC1101_SRC_DRV.cpp:150:2: note: ...this statement, but the latter is
misleadingly indented as if it were guarded by the 'while'
  150 |  digitalWrite(SS_PIN, HIGH);
      |  ^~~~~~~~~~~~
Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\mbus_packet.cpp.o
Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\rf_mbus.cpp.o
Compiling .pioenvs\wemoswmbus\liba37\wMbus-lib\utils.cpp.o
.piolibdeps\wemoswmbus\SmartRC-CC1101-Driver-Lib\ELECHOUSE_CC1101_SRC_DRV.cpp: In member function 'void ELECHOUSE_CC1101::setPA(
int)':
.piolibdeps\wemoswmbus\SmartRC-CC1101-Driver-Lib\ELECHOUSE_CC1101_SRC_DRV.cpp:498:13: warning: 'a' may be used uninitialized in
this function [-Wmaybe-uninitialized]
  498 | PA_TABLE[1] = a;
      | ~~~~~~~~~~~~^~~

Zaznaczam, że obecnie nie mam podłączonego cc1101 ale chyba esp nie powinien załapywać bootloop’a w takim przypadku. Mam to w logu ESP:

[20:58:44]←[0;35m[C][api:025]: Setting up Home Assistant API server...←[0m
[20:58:44]
[20:58:46]
[20:58:46]--------------- CUT HERE FOR EXCEPTION DECODER ---------------
[20:58:46]
[20:58:46]Soft WDT reset
[20:58:46]
[20:58:46]>>>stack>>>
←[33mWARNING Found stack trace! Trying to decode it←[0m
[20:58:46]
[20:58:46]ctx: cont
[20:58:46]sp: 3ffffc60 end: 3fffffc0 offset: 01a0
[20:58:46]3ffffe00:  3fff19dc 00000002 3fff241d 4022690d
←[33mWARNING Decoded 0x4022690d: ELECHOUSE_CC1101::Reset()←[0m
[20:58:46]3ffffe10:  3ffffe80 00000002 3fff2414 402274fc
←[33mWARNING Decoded 0x402274fc: ELECHOUSE_CC1101::Init()←[0m
[20:58:46]3ffffe20:  3fff3d3c 00000002 3fff2414 4021fc3d
←[33mWARNING Decoded 0x4021fc3d: rf_mbus_init(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigne
d char)←[0m
[20:58:46]3ffffe30:  0000000f 0000000d 0000000e 40236c0c
←[33mWARNING Decoded 0x40236c0c: operator delete(void*) at /workdir/repo/gcc-gnu/libstdc++-v3/libsupc++/del_op.cc:50←[0m
[20:58:46]3ffffe40:  ffff2a45 3ffe8cbc 00000020 00000002
[20:58:46]3ffffe50:  00000005 0000000d 3fff321c 4021127a
←[33mWARNING Decoded 0x4021127a: esphome::wmbus::WMBusComponent::setup()←[0m
[20:58:46]3ffffe60:  3ffffea0 3fff54a4 00000000 402138d9
←[33mWARNING Decoded 0x402138d9: void std::__push_heap<__gnu_cxx::__normal_iterator<std::unique_ptr<esphome::Scheduler::Schedule
rItem, std::default_delete<esphome::Scheduler::SchedulerItem> >*, std::vector<std::unique_ptr<esphome::Scheduler::SchedulerItem,
 std::default_delete<esphome::Scheduler::SchedulerItem> >, std::allocator<std::unique_ptr<esphome::Scheduler::SchedulerItem, std
::default_delete<esphome::Scheduler::SchedulerItem> > > > >, int, std::unique_ptr<esphome::Scheduler::SchedulerItem, std::defaul
t_delete<esphome::Scheduler::SchedulerItem> >, __gnu_cxx::__ops::_Iter_comp_val<bool (*)(std::unique_ptr<esphome::Scheduler::Sch
edulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> > const&, std::unique_ptr<esphome::Scheduler::SchedulerItem,
std::default_delete<esphome::Scheduler::SchedulerItem> > const&)> >(__gnu_cxx::__normal_iterator<std::unique_ptr<esphome::Schedu
ler::SchedulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> >*, std::vector<std::unique_ptr<esphome::Scheduler::S
chedulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> >, std::allocator<std::unique_ptr<esphome::Scheduler::Sched
ulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> > > > >, int, int, std::unique_ptr<esphome::Scheduler::Schedule
rItem, std::default_delete<esphome::Scheduler::SchedulerItem> >, __gnu_cxx::__ops::_Iter_comp_val<bool (*)(std::unique_ptr<espho
me::Scheduler::SchedulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> > const&, std::unique_ptr<esphome::Schedule
r::SchedulerItem, std::default_delete<esphome::Scheduler::SchedulerItem> > const&)>&)←[0m
[20:58:46]3ffffe70:  00000000 3fff54a4 3fff54a8 3fff3ef0
[20:58:46]3ffffe80:  0000000f 0000000e 3fff1540 3fff3ef0
[20:58:46]3ffffe90:  00000000 3fff3eec 3fff1540 00000102
[20:58:46]3ffffea0:  3fff321c 00000011 3fff1540 40228ebc
←[33mWARNING Decoded 0x40228ebc: esphome::Component::call_setup()←[0m
[20:58:46]3ffffeb0:  3fff3414 3ffffed0 3fff1540 40228f74
←[33mWARNING Decoded 0x40228f74: esphome::Component::call()←[0m
[20:58:46]3ffffec0:  3fff3890 00000010 3fff1540 402127b9
←[33mWARNING Decoded 0x402127b9: esphome::Application::setup()←[0m
[20:58:46]3ffffed0:  0000000c 0000000c 3fff3e0c 4020942c
←[33mWARNING Decoded 0x4020942c: esphome::sensor::Sensor::set_unit_of_measurement(std::__cxx11::basic_string<char, std::char_tra
its<char>, std::allocator<char> > const&)←[0m
[20:58:46]3ffffee0:  00000048 0000002c 0000000b 3ffeac1c
[20:58:46]3ffffef0:  3fff3b00 3fff1540 3fff3ad4 3ffeac1c
[20:58:46]3fffff00:  3fff3b00 3fff1540 3fff15fc 40214ed6
←[33mWARNING Decoded 0x40214ed6: setup←[0m
[20:58:46]3fffff10:  3fffff18 00000003 00b3c26d 65740072
[20:58:46]3fffff20:  6e650072 00687467 00000000 00000000
[20:58:46]3fffff30:  3fffff38 0000000a 33303630 37383437
[20:58:46]3fffff40:  00003437 00000000 00000000 00000000
[20:58:46]3fffff50:  00000000 00000000 00000000 00000000
[20:58:46]3fffff60:  00000000 00000000 3fffff70 00000004 <
[20:58:46]3fffff70:  72617a69 36317200 fe000032 feefeffe
[20:58:46]3fffff80:  3fff3950 00000000 3fff3ad4 00000002
[20:58:46]3fffff90:  feefeffe feefeffe feefeffe 3fff1ba4
[20:58:46]3fffffa0:  3fffdad0 00000000 3fff1b90 4022407c
←[33mWARNING Decoded 0x4022407c: loop_wrapper() at core_esp8266_main.cpp←[0m
[20:58:46]3fffffb0:  feefeffe feefeffe 3ffe8684 401004a5
←[33mWARNING Decoded 0x401004a5: cont_wrapper←[0m
[20:58:46]<<<stack<<<
[20:58:46]
[20:58:46]--------------- CUT HERE FOR EXCEPTION DECODER ---------------
[20:58:46]
[20:58:46] ets Jan  8 2013,rst cause:2, boot mode:(3,6)

P.S. czy planujesz rozszerzyć komponent o obsługę liczników hydrodigit (BMETERS), gdzieś wcześniej pojawiała się taka informacja od Ciebie, że potrafisz to zdekodować ale nie widzę pliku w komponencie dla tego wodomierza? obecnie mam to zrobione na wmbusmeters, w razie czego służe ramkami i ewentualnie moimi skryptami w pythonie gdzie odczytywałem je zanim nastał wmbusmeters.

@reaper7 Warningi poprawione są (chyba) w wersji 1.2.2, razem z dodaniem Bmeters’a (możesz sprawdzić czy działa dekodowanie - dodawałem w ciemno bez przetestowania). Wszystkie wodomierze OMS są łatwe do dekodowania, nie ma to jak jakiś standard.

Warningi pochodzące z drivera CC1101 niestety zostają.

Co do nie podpiętego cc1101 i bootloopów to chyba to normalne (nie sprawdzałem nigdy takiego zachowania).

1 polubienie

w 1.2.2 warningi zniknęły, pozostały te z cc1101.
Czekam na cc1101 do testów więc na razie bez postępów…

Co do bootloopów to raczej nie jest to normalne ale widzę że biblioteka cc1101 zatrzymała się dawno temu.
Wyobraź sobie że masz urządzenie gdzieś zabudowane i z powodu jakiejś awarii peryferiów spi czy innych, cc1101 przestaje odpowiadać i esp wpada w taki bootloop…ani to przeflashować, ani zdiagnozować via net… bida panie :slight_smile:
Widzę jedynie dwa forki tej biblioteki modyfikowane 7 i 3 miesiące temu…może coś poprawili względem oryginału…

Aby ten komponent miał jakiekolwiek szanse wejść do oficjalnego repo ESPHome to i tak cała obsługa CC1101 musi być przepisana/ta libka wywalona. Priorytetem u mnie było uruchomić to wszystko w miarę stabilnie i z przyjaznym interface dla użytkownika. Wydaje mi się że oba wymagania spełniłem. Jak dla mnie to postać komponentu do ESPHome nabrała dopiero sensu, kiedy powstał BLE Proxy i mogę mieć więcej klocków na jednym ESP + nie będzie się on nudził :wink: No ale to takie moje domowe wymagania - bez tego to zwykła bramka wM-Bus → TCP + wmbusmeters była wystarczająca. Może też małą motywacją był widok jak się męczycie z template itp :wink:

3 polubienia

Ja nieśmiało również podkreślę swoją rolę :stuck_out_tongue:
Pomimo tego, że programista ze mnie żaden, to czuje się trochę protoplastusiem adaptacji odczytów z CC1101 (z repo Maćka z Elektrody) w ESPHome :slight_smile:
Ale jak @_Szczepan przejął pałęczkę, to nie ma co zbierać…inny level

4 polubienia

Oczywiście, nie umniejszam tu Twojej roli, oraz @OlekD też miał duży udział w finalnym produkcie.

1 polubienie

musiałem się połechtać :smiley:

1 polubienie

A tak jak do domku jednorodzinnego gdzie jest podlewanie ogrodu wodomierz taki z 3/4" z gwintem na 1" wystarczy ?
https://allegro.pl/oferta/wodomierz-licznik-wody-zimnej-3-4-4-0m3-legal-2027-12715518511?utm_medium=afiliacja&utm_source=ctr&utm_campaign=8abe7e3b-0728-4bee-9ea9-bc079ac82431#

Czy musi być jakiś większy ale nie znalazłem…

Q3=4.0m3/h spokojnie wystarcza.