Komponent wM-Bus do ESPHome (SzczepanLeon) wersja 3.x - wątek ogólny

Witam,

chciałem zmienić u siebie integracje wmbus do odczytu nakładek liczników wody, które miałem podłączone za pomocą wmbusmeter oraz tunera usb. Miałem problemy z zasięgiem i obciąża to HA.

Kilka urządzeń udało mi się już postawić na esphome, więc spróbowałem swoich sił także z opisywanym tutaj komponentem na esp.

Zakupiłem płytkę Wemos D1 mini oraz moduł CC1101, planowałem wzorować się na tym:
Radiowy odczyt licznika wody firmy Apator - Olek Data jeśli chodzi i konfigurację, niestety u mnie problem jaki występuje to:

[E][wmbus:409]:   Check connection to CC1101!
[E][component:082]:   Component wmbus is marked FAILED

Poczytałem trochę forum i zakupiłem kolejna sztukę CC1101, polutowałem na nowo przewody.
Do płytki Wemos D1 mini mam zlutowane wyjścia, nowy moduł CC1101 ten sam efekt.

Podłączyłem CC1101 do nowo przygotowanej i skonfigurowanej płytki esp-wroom-32 - ten sam efekt, ten sam komunikat w logach.

Próbowałem już równych GPIO używać za każdym razem to samo - ten sam error.

Poniżej konfiguracją, która używałem do Wemos D1 mini:

[C][wmbus:372]: wM-Bus v3.2.1:
[C][wmbus:389]:   CC1101 frequency: 868.950 MHz
[C][wmbus:390]:   CC1101 SPI bus:
[C][wmbus:391]:     MOSI Pin: GPIO12
[C][wmbus:392]:     MISO Pin: GPIO14
[C][wmbus:393]:     CLK Pin:  GPIO16
[C][wmbus:394]:     CS Pin:   GPIO13
[C][wmbus:395]:     GDO0 Pin: GPIO4
[C][wmbus:396]:     GDO2 Pin: GPIO5
[E][wmbus:409]:   Check connection to CC1101!
[E][component:082]:   Component wmbus is marked FAILED
esphome:
  name: water-usage-sensor
  friendly_name: esp8266 D1 mini

esp8266:
  board: d1_mini

logger:
  level: VERY_VERBOSE

api:
  encryption:
    key: !secret api_encryption_key

ota:
  platform: esphome
  password: !secret OTA_PASSWORD

wifi:
  ssid: !secret WIFI_SSID
  password: !secret WIFI_PASSWORD

  manual_ip:
    static_ip: 192.168.0.101
    gateway: 192.168.0.1
    subnet: 255.255.255.0

external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus ]    

time:
  - platform: sntp
    id: time_sntp    

# #v1
# wmbus:
#   mosi_pin: GPIO13
#   miso_pin: GPIO12
#   clk_pin:  GPIO14
#   cs_pin:   GPIO2
#   gdo0_pin: GPIO4
#   gdo2_pin: GPIO5

#   log_unknown: True

#v2
# wmbus:
#   mosi_pin: GPIO13  # GPIO13
#   miso_pin: GPIO12  # GPIO12
#   clk_pin:  GPIO14  # GPIO14
#   cs_pin:   GPIO15  # GPIO15
#   gdo0_pin: GPIO4  # GPIO4 (opcjonalnie)
#   gdo2_pin: GPIO0  # GPIO0 (opcjonalnie)

#   log_unknown: True

#v3 - na podstawie tego zdjęcia https://allegro.pl/oferta/wemos-d1-mini-esp8266ex-15656630864
# wmbus:
#   mosi_pin: GPIO12 #D6
#   miso_pin: GPIO14 #D5
#   clk_pin:  GPIO16 #D0
#   cs_pin:   GPIO13 #D7 
#   gdo0_pin: GPIO4  #D2
#   gdo2_pin: GPIO5  #D1

#   log_unknown: True

#v4
wmbus:
  mosi_pin: GPIO12 #D6
  miso_pin: GPIO14 #D5
  clk_pin:  GPIO16 #D0
  cs_pin:   GPIO13 #D7 
  gdo0_pin: GPIO4  #D2
  gdo2_pin: GPIO5  #D1

  log_unknown: True 
    
#
# https://github.com/SzczepanLeon/esphome-components
#
# https://forum.arturhome.pl/t/komponent-wm-bus-do-esphome-szczepanleon-wersja-2-x-watek-ogolny/9117/69
#
#
#  ***********************  Podłączenie fizyczne modułów ****************************************

# v1
#
#                                    +-----------------+| 
#                                    |    |  |  |  |    |
#                              [RST] |o                o| [TX ] [GPIO1]
#                     [ ADC1 ] [ A0] |o                o| [RX ] [GPIO3]
#  4 brąz             [GPIO16] [ D0] |o   W E M O S    o| [D1 ] [GPIO5]   6 fiolet
#              [ SCK] [GPIO14] [ D5] |o                o| [D2 ] [GPIO4]   7 niebieski
#  5 biały     [MISO] [GPIO12] [ D6] |o   D1 MINI      o| [D3 ] [GPIO0]
#  3 pomar     [MOSI] [GPIO13] [ D7] |o                o| [D4 ] [GPIO2]   8 zielony
#              [ SS ] [GPIO15] [ D8] |o                o| [GND]           2 szary
#  1 czerwony                  [3v3] |o                o| [5V ]
#                                    |                  |
#                                    |------|usb|-------|
#
#
#                                    +---------------------+
#  1 czerwony                [ VCC]  |o                    |                 
#  2 szary                   [ GND]  |o                    |                 
#  3 pomar                   [MOSI]  |o                   o| [GND]
#  4 brąz                    [SCLK]  |o     CC1101        o| [ATN] /\/\/\/\/               
#  5 biały                   [MISO]  |o                   o| [GND]                
#  6 fiolet                  [GDO2]  |o                    |                 
#  7 niebieski               [GDO0]  |o                    |                 
#  8 zielony                 [ CSN]  |o                    |                 
#                                    +---------------------+


# v2
# CC1101                         D1 Mini (ESP8266MOD)
# ----------------------------------------------
# 1 czerwony  [ VCC]     ->      3V3
# 2 szary     [ GND]     ->      GND
# 3 pomarańczowy [MOSI]  ->      D7 (GPIO13)
# 4 brązowy   [SCLK]     ->      D5 (GPIO14)
# 5 biały     [MISO]     ->      D6 (GPIO12)
# 6 fioletowy [GDO2]     ->      D3 (GPIO0) (opcjonalnie)
# 7 niebieski [GDO0]     ->      D2 (GPIO4) (opcjonalnie)
# 8 zielony   [ CSN]     ->      D8 (GPIO15)

# v3
# CC1101                         D1 Mini v2.2
# 1 czerwony  [ VCC]     ->      3V3
# 2 szary     [ GND]     ->      GND
# 3 pomarańczowy [MOSI]  ->      GPIO12 (D6)
# 4 brązowy   [SCLK]     ->      GPIO14 (D5)
# 5 biały     [MISO]     ->      GPIO16 (D0)
# 6 fioletowy [GDO2]     ->      GPIO5 (D1) (opcjonalnie)
# 7 niebieski [GDO0]     ->      GPIO4 (D2) (opcjonalnie)
# 8 zielony   [ CSN]     ->      GPIO13 (D7)


# v4
# CC1101                         WEMOS D1 Mini ESP8266-12F
# ----------------------------------------------
# 1 czerwony  [ VCC]     ->      3V3 (zasilanie)
# 2 szary     [ GND]     ->      GND (masa)
# 3 pomarańczowy [MOSI]  ->      GPIO12 (D6)
# 4 brązowy   [SCLK]     ->      GPIO14 (D5)
# 5 biały     [MISO]     ->      GPIO16 (D0)
# 6 fioletowy [GDO2]     ->      GPIO5  (D1) (opcjonalnie)
# 7 niebieski [GDO0]     ->      GPIO4  (D2) (opcjonalnie)
# 8 zielony   [ CSN]     ->      GPIO13 (D7)

# sensor:
#   - platform: wmbus
#     meter_id: 0x4140d40b
#     type: izar
#     key: "00000000000000000000000000000000"
#     add_prefix: False
#     lqi:
#       name: "LQI główny"
#     rssi:
#       name: "RSSI główny"
#     total_water_m3:
#       name: "glowny"

#   - platform: wmbus
#     meter_id: 0x2141c358
#     type: izar
#     key: "00000000000000000000000000000000"
#     add_prefix: False
#     lqi:
#       name: "LQI ogrodowy"
#     rssi:
#       name: "RSSI ogrodowy"
#     total_water_m3:
#       name: "ogrodowy"

# text_sensor:
#   - platform: wmbus
#     name: "Text debug for Izar"

Proszę o pomoc, bo sam już nie mam pomysłu, posprawdzam jeszcze więcej opcji z esp32 i płytka wroom-32, mam jeszcze nowy kolejny moduł CC1101 - ale nie wydaje mi się, że 2 moduły są uwalone - zakładam, że problem jest po mojej stronie…

  1. Nie wiem na ile komunikaty błędów się zmieniły, ale czuję w kościach, że chodzi o to
    Wątek archiwalny - Komponent wM-Bus do ESPHome (SzczepanLeon) starsze wersje do 1.5.1 włącznie - #495 przez _Szczepan

  2. Nie można sobie wybierać pinów “na pałę” - w przypadku płytek na bazie ESP8266 jest sporo “niezdrowych” pinów (takich które nie nadają się do każdego zastosowania) - przykładowo takim niezdrowym jest GPIO16 ( = D0 na niektórych płytkach), takie rzeczy można sprawdzić w jakimś bryku z dokumentacji
    ESP8266 Pinout Reference: Which GPIO pins should you use? | Random Nerd Tutorials

    Zestaw pinów użytych w projekcie który sam podlinkowałeś jest OK, czemu z niego nie skorzystałeś?

    ESP32 jest pod tym względem sporo elastyczniejszy, bo w ogóle ma więcej pinów dzięki czemu “zdrowych” też jest więcej (ale też nie każdy można użyć w dowolnym zastosowaniu).

  3. Oczywiście CC1101 może być niesprawny (nie mam siły na gimnastykę umysłową, by przeliczyć prawdopodobieństwo takiej wpadki, że 2 z 2 egzemplarzy są wadliwe, ale przyjmij że 20% płytek na Ali jest wadliwych), klony Wemosa D1 mini (np. D1 m1n1) też bywają wadliwe.

  4. Może jakieś fotki makro, bo można też kupić różne konstrukcje (i nie wiem czy wszystkie mają ten sam pinout).

Przede wszystkim do podłączenia modułów należy stosować krótkie lutowane połączenia.
Moduł RF nie lubi się z ESP, z Nano ma większe zasięgi.
Na 4 chińskie modułu sprawny był tylko 1, być może dlatego, że wybrałem najtańsze :wink:
Dla próby kupiłem jeszcze 2 inne niż te popularne - w TME Radiocontrolli (chyba włoskie), dzialaly bez problemu.

Trochę z tymi modułami walczyłem stąd takie obserwacje.

  1. startowałem z projektu wzorcowego i z tego korzystałem ale nie działało, potem drugi moduł CC1101, a jak to nie pomogło to zdecydowałem się na szukanie informacji o płytce i znalazłem, że mogę mieć inna wersja i polecane są inne łączenia, a na końcu to już zapytałem chatgpt o schemat…

  2. Przesyłam zdjęcia jak wygląda moja płytka i moduł, do modułu przewody wlutowałem, do płytki gniazda




t

Masz wadliwy moduł CC1101, tor antenowy można (chyba) naprawić - wlutowując elementy na swoje miejsce, no w sumie nie jestem pewien, bo brakuje jeszcze jednego elementu, oprócz tego przemieszczonego - kondensatora edit niestety też chyba cewki, to taki bielszy element - (zaraz przy złączu anteny, musiałbym sprawdzić schemat, więc zrobię to później, ale tam MUSI być wlutowany brakujący element! poszukaj go u siebie, bo to jest takie miejsce gdzie mógł odpaść przy wlutowywaniu antenki (chyba przegrzałeś PCB i stąd przemieszczenia elementów SMD w torze antenowym), a bez niego i tak nie będzie odbioru, więc trud daremny)

ale może mieć potencjalnie inne wady (tym bardziej jeśli to nie są skutki uboczne twojego lutowania)

oprócz tego masz te przewody nie za elegancko wlutowane i wiem, że to ekstremalnie trudne, ale luźne druty mogą robić zwarcia

ponadto najprawdopodobniej masz zwarcie między wyprowadzeniami IC (to do sprawdzenia, bo zdjęcie nie było dostatecznie makro)

Gdy będę miał schemat przed oczami, to dokończę

przewód CC1101 ESP8266 GPIO D1 mini
czerwony 3V3 3V3 ND 3V3
szary GND GND ND GND
pomarańczowy MOSI MOSI 13 D7
brązowy SCLK SCLK 14 D5
biały MISO MISO 12 D6
fiolet GDO2 any DIO np. 4 D2
niebieski GDO1 any DIO np. 5 D1
zielony CSN CS/any DIO 15 D8

bazowałem na tym schemacie, bez sprawdzania w datasheet’cie, więc teoretycznie GDO1i2 mogą być zamienione miejscami (nigdy nie pamiętam na jakim schemacie w sieci są ok, a na jakim zamienione miejscami), co do klona D1 mini, to on ma zgodne wyprowadzenia z oryginałem, nie należy używać TX ani RX

Jednak nie dałem rady bez oficjalnej dokumentacji mimo to GDO należy sprawdzić eksperymentalnie (bo nie widać dobrze ścieżek, a już nie mam więcej siły na walkę)

PS Jak na razie chyba nie znam nikogo, komu GPT by pomógł skutecznie w podobnych kwestiach…

2 Likes

Mój zestaw to Wemos D1mini PRO i E07-900M10S na którym mam problemy z czytaniem licznika prądu. (na począku działało super) Tak się zastanawiam, czy urządzenie od #Mariusz_Woszczyński ma większe szanse na to, że odczytam ten licznik, czy to jeden grzyb?

@Marek_l U Ciebie też wodomierz wysyła dane od 7. do 19.? W instrukcji jest napisane, że powinien od 8. do 18. Nie wiem z czego to wynika. Myślałem, że to może chodzi o czas letni i zimowy, ale raczej nie.

u mnie wysyła cały czas

Przedział czasowy kiedy wysyłają wodomierze (czy raczej ich nakładki radiowe) zależy od ich konfiguracji (czyli zazwyczaj zależy od tego, co sobie ich właściciel zażyczył, ograniczenia czasu wynikają z możliwości wydłużenia czasu pracy ogniwa do granicy niemal równej czasowi jego samorozładowania).

Jak się nie ma dostępu po stronie softu do wodomierza to domyślnie wysyła dane w tzw. dniach i godzinach roboczych. Można to zmienić, ale trzeba mieć klucz i soft. Ja nie mam i mieć nie będę, bo to wodomierz jako zakup prywatny. W Maddalena ELECTO SJ żywotność baterii jest przewidziana/obliczona na 13 lat. Czas pokaże ile wytrzyma…

@szopen dziękuje za sprawdzenie i pomoc! Polutowałem od nowa 3ci moduł bardziej starannie najlepiej jak umiałem, podłączyłem według tego co podesłałeś i po podłączeniu i wgraniu firmware od strzała ruszyło. Jak tylko nakładki zaczną jutro nadawać przeniosę konfigurację z wmbusmeters i liczę, że będzie działać.

EDIT
dodałem obie nakładki jako sensory według dokumentacji i dane zaczytuje poprawnie.

2 Likes

@_Szczepan po pierwsze dziękuję za projekt :slight_smile:

I pytanie, na które na forum nie znalazłem odpowiedzi, a temat chyba jest popularny. Mam dwa liczniki wody, z czego jeden główny, a drugi podlicznik na ogród.
W jaki sposób uzyskać ilość wody, którą zużywa dom i gdzie to liczyć. Jak zrobię to w HA templates, to czasami dostaję wynik ujemy mimo, że deklaruję wartość bezwzględną. Może lepiej to przerzucić do ESPhome?

- sensor:
    - name: "wodomierz_dom2"
      availability: >
        {{ ((117 + states('sensor.wodomierz_total') | float(0) - 
             states('sensor.wodomierz_ogrod') | float(0) ) | round(3,default=0)) > 0 }}
      state: >
        {% set licznik_total = states('sensor.wodomierz_total') | float %}
        {% set licznik_ogrod = states('sensor.wodomierz_ogrod') | float %}
        {{ (117 + licznik_total - licznik_ogrod) | round(3,default=0)|abs }}

jak wrzuciłem do esphome

  - platform: template
    id: wodomierz_dom_1
    name: "Wodomierz dom1"
    unit_of_measurement: "m³"
    icon: "mdi:water"
    device_class: "water"
    state_class: "total_increasing"
    accuracy_decimals: 3
    lambda: |-
      return id(wodomierz_total) - id(wodomierz_ogrod);

to na razie wychodzą jakieś kosmosy. Chyba dlatego, że jeden licznik nie raportuje aktualnie.

Jak to zrobić najlepiej?

To NIE jest mój projekt, jeśli chcesz się odwdzięczyć autorowi, to poślij kawę @_Szczepan

powinieneś sprawdzać availability (dostępność danych), więc generalnie idziesz w dobrym kierunku, template może być, tylko bardziej rozbudowane, bo obie wartości muszą być dostępne w momencie renderowania szablonu

zdecydowanie nie chodzi o ukrywanie problemu wartością bezwzględną (bo to i tak wygeneruje bzdury)

W ESPHome napotykasz na podobny problem (ale rozwiązanie będzie raczej trudniejsze)

Poprawiłem :slight_smile:

Poprawiłem w HA

      availability: >
        {{ has_value('sensor.wodomierz_total') and 
           has_value('sensor.wodomierz_ogrod')}}

zobaczymy, co będzie

To jest jakiś błąd w transmisji, czy to jest błąd w oprogramowaniu?

[String] ‘id: 947088 … h CRC]’: Reallocating large String(511 → 515 bytes)

[V][rxLoop:167]: Have 217 bytes from CC1101 Rx, RSSI: -65 dBm LQI: 188
[D][mbus:023]: Processing C1 B frame
[V][mbus:027]: Frame: D6E6C35D73FAF8CF22667FBAFC54744428EC127E53F43E07C02DB5C42E27E3CF62FC2C4E13A060CC57A7629CAD19B3895BD74BDD1BE6A1A2537BC1C8A2A27BC613D63B79B46E4A3151BCB0C9E336201E17A8AB9EFFDF44B27F22B15FE8ECC4E0376654207836662B00CB0D3DC6E6F85D569D9EF25000EF4E9F2A2FB78D842B2045345F994EEF5E79B376F0163C7A2B7871A00C71AB0EE7671904766FCB5A1F864CB776900348CF471AB580A077B4BE62B584CE28651DCFEEAE48ADCF9C3B7DD7B2BBE96C5592B60F5D4D65760E99FC8947336699F7D70A (215) [with CRC]
[String] 'id: 947088 ... h CRC]': Reallocating large String(511 -> 515 bytes)
[V][mbus:165]: Validating CRC for Block1 + Block2
[D][crc:035]:     calculated: 0xBCBA, read: 0x2B20  !!!
[W][component:237]: Component wmbus took a long time for an operation (62 ms).
[W][component:238]: Components should block for at most 30 ms.