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

próbowałem, nawet to nie pomogło…
Obeszliśmy to tak, że ja wygenerowałem bin u siebie i ten ktuś wgrał go do esp8266.

Oprócz ograniczenia liczby wątków kompilacji trzeba zadbać o ilość RAMu - najprościej tymczasowo - zatrzymując Dodatki, a na stałe - przez zwiększenie rozmiaru swapa.

Powiększanie swapa na HAOS (wersje dla SBC, ale myślę, że i na generic na ultrabiednym sprzęcie zahula ta metoda)

i na RPiOS

1 polubienie

Dzięki, następnym razem sproboję tej metody

Edit:

Lubię trochę porozgryzać temat jak mnie coś zaintryguje. Doszedlem juz do tego, że przepisuję stringa z funkcji select, to zmiennej globalnej string.

Teraz zasadnicze pytanie. W Twojej funkcji sensor nalezy podać typ nakładki jako tekst (np. “izar”). Czy będzie to działać jak zamiast tekstu podstawię zmienną global string, która ten tekst “izar” zawiera?
Pierwsze próby zakończyły sie porażką, dlatego zanim będę drążył dalej, chcialem najpierw zapytać czy to w ogole przejdzie u Ciebie w cpp.

Niezbyt, a na pewno nie przy takim kodzie jak teraz jest.
Pewnie piszesz o tym konstruktorze:

Sensor, zdefiniowany w YAMLu, jest tworzony tutaj:

A jego “słuchacz” tutaj:

Do tego pythona jest też tworzony kod C++

  wmbus_wmbussensor = new wmbus::WMBusSensor(0x24202020, "apator162", "00000000000000000000000000000000");
  wmbus_wmbussensor->set_component_source("wmbus.sensor");
  App.register_component(wmbus_wmbussensor);
  App.register_sensor(wmbus_wmbussensor);
  wmbus_wmbussensor->set_name("My water from Apator");
  wmbus_wmbussensor->set_disabled_by_default(false);
  wmbus_wmbussensor->set_icon("mdi:water");
  wmbus_wmbussensor->set_device_class("water");
  wmbus_wmbussensor->set_state_class(sensor::STATE_CLASS_TOTAL_INCREASING);
  wmbus_wmbussensor->set_unit_of_measurement("m\302\263");
  wmbus_wmbussensor->set_accuracy_decimals(3);
  wmbus_wmbussensor->set_force_update(false);
  wmbus_wmbuscomponent->register_wmbus_listener(wmbus_wmbussensor);

Aby Twoje próby miały jakieś ręce i nogi (chociaż jedną), to musisz w YAMLu zdefiniowac jakiś jeden sensor. Taki dummy, byle by był. I następnie już zabawił się w modyfikację mapy “słuchaczy”:

std::map<uint32_t, WMBusListener *> wmbus_listeners_{};

Powinna ona mieć jeden wpis kierujący do tego sensora. A tam musisz zmienić:

  • key - ID licznika
  • type - typ (string definiujący czym będziemy dekodować)
  • key - klucz

Najprościej to wykorzystać metodę:

WMBusComponent::register_wmbus_listener

Możesz też ręcznie zrobić wszystko to co jest automatycznie generowane i nie definiować sensora w YAMLu, ale wg mnie to jest cofanie się w rozwoju i to z błahego powodu jakim jest niemożliwość kompilacji na malinie.

Dzięki za tą analizę.
To niestety przekracza moje umiejętności.
Liczyłem na to, że da się to po prostu podstawić w yamlu.
Absolutnie nie chcę brać się za modyfikacje Twoich lub pisanie nowych kodów, bo nie taki był zamysł.

Niemożliwość kompilacji na mailinie, to tylko jeden z powodów, dla których uznałem, że taka konfiguracja (type, ID i KEY) bezpośrednio z HA była by sensowna :slight_smile:

YAML służy jedynie (powiedzmy) do generowania kodu C++, więc cała magia potem jest w C++.

Ależ proszę bardzo - pisz co chcesz i rób potem requesta w github’ie. :wink:

6 postów zostało podzielonych na nowy temat: ESP8266/ESP32 + CC1101 everblu-meters-esp8266

Cześć,
Zakupiłem moduł do zliczania wody czytnik wmbus CC110 od kolegi Mariusza.
Niestety nie działa mi zliczanie wody.
Posiadam licznik Apator AT-WMBUS-16-2
W konfiguracji ESPHome mam dodane urządzenie policzwodę. Konfiguracja pliku yaml wygląda następująco:

esphome:
  name: policzwode
#  friendly_name: policzwode

esp8266:
  board: nodemcuv2


external_components:
  - source: github://SzczepanLeon/esphome-components@main
    components: [ wmbus ]
#    refresh: 0d

# Enable logging
logger:
  level: VERBOSE

time:
  platform: sntp

# Enable Home Assistant API
api:
  encryption:
    key: "HASŁO"

ota:
  password: "HASŁO"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Policzwode Fallback Hotspot"
    password: "HASŁO"

captive_portal:

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

sensor:
  - platform: wmbus
    name: "Stan licznika wody Apator"
    meter_id: 0x03624232
    type: apator162
    key: "00000000000000000000000000000000"
    accuracy_decimals: 5

Gdy pobieram logi z urządzenia mam tylko to:

INFO Reading configuration /config/esphome/policzwode.yaml...
INFO Detected timezone 'Europe/Warsaw'
INFO Starting log output from policzwode.local using esphome API
INFO Successfully connected to policzwode.local
[10:35:19][I][app:102]: ESPHome version 2023.2.4 compiled on Feb 23 2023, 18:29:30
[10:35:19][C][wifi:504]: WiFi:
[10:35:19][C][wifi:362]:   Local MAC: 7C:87:CE:B5:D9:9D
[10:35:19][C][wifi:363]:   SSID: [redacted]
[10:35:19][C][wifi:364]:   IP Address: 192.168.1.105
[10:35:19][C][wifi:365]:   BSSID: [redacted]
[10:35:19][C][wifi:367]:   Hostname: 'policzwode'
[10:35:19][C][wifi:369]:   Signal strength: -21 dB ▂▄▆█
[10:35:19][V][wifi:371]:   Priority: -3.0
[10:35:19][C][wifi:373]:   Channel: 11
[10:35:19][C][wifi:374]:   Subnet: 255.255.255.0
[10:35:19][C][wifi:375]:   Gateway: 192.168.1.1
[10:35:19][C][wifi:376]:   DNS1: 8.8.8.8
[10:35:19][C][wifi:377]:   DNS2: 194.204.159.1
[10:35:19][C][logger:293]: Logger:
[10:35:19][C][logger:294]:   Level: VERBOSE
[10:35:19][C][logger:295]:   Log Baud Rate: 115200
[10:35:19][C][logger:296]:   Hardware UART: UART0
[10:35:19][C][wmbus_sensor:016]: wM-Bus Sensor 'Stan licznika wody Apator'
[10:35:19][C][wmbus_sensor:016]:   Device Class: 'water'
[10:35:19][C][wmbus_sensor:016]:   State Class: 'total_increasing'
[10:35:19][C][wmbus_sensor:016]:   Unit of Measurement: 'm³'
[10:35:19][C][wmbus_sensor:016]:   Accuracy Decimals: 5
[10:35:19][C][wmbus_sensor:016]:   Icon: 'mdi:water'
[10:35:19][C][wmbus_sensor:022]:   Key: '00000000000000000000000000000000'
[10:35:19][C][wmbus_sensor:023]:   Type: apator162
[10:35:19][C][wmbus_sensor:024]:   ID: 56771122 [0x03624232]
[10:35:19][C][captive_portal:088]: Captive Portal:
[10:35:19][C][mdns:108]: mDNS:
[10:35:19][C][mdns:109]:   Hostname: policzwode
[10:35:19][V][mdns:110]:   Services:
[10:35:19][V][mdns:112]:   - _esphomelib, _tcp, 6053
[10:35:19][V][mdns:114]:     TXT: version = 2023.2.4
[10:35:19][V][mdns:114]:     TXT: mac = 7c87ceb5d99d
[10:35:19][V][mdns:114]:     TXT: platform = ESP8266
[10:35:19][V][mdns:114]:     TXT: board = nodemcuv2
[10:35:19][V][mdns:114]:     TXT: network = wifi
[10:35:19][C][ota:093]: Over-The-Air Updates:
[10:35:19][C][ota:094]:   Address: policzwode.local:8266
[10:35:19][C][ota:097]:   Using Password.
[10:35:19][C][api:138]: API Server:
[10:35:19][C][api:139]:   Address: policzwode.local:6053
[10:35:19][C][api:141]:   Using noise encryption: YES
[10:35:19][C][sntp:053]: SNTP Time:
[10:35:19][C][sntp:054]:   Server 1: '0.pool.ntp.org'
[10:35:19][C][sntp:055]:   Server 2: '1.pool.ntp.org'
[10:35:19][C][sntp:056]:   Server 3: '2.pool.ntp.org'
[10:35:19][C][sntp:057]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[10:35:19][C][wmbus:242]: wM-Bus v1.3.9:
[10:35:19][C][wmbus:259]:   CC1101 SPI bus:
[10:35:19][C][wmbus:260]:     MOSI Pin: GPIO13
[10:35:19][C][wmbus:261]:     MISO Pin: GPIO12
[10:35:19][C][wmbus:262]:     CLK Pin:  GPIO14
[10:35:19][C][wmbus:263]:     CS Pin:   GPIO2
[10:35:19][C][wmbus:264]:     GDO0 Pin: GPIO5
[10:35:19][C][wmbus:265]:     GDO2 Pin: GPIO4
[10:35:19][C][wmbus:272]:   Available drivers:  amiplus, apator08, apator162, bmeters, elf, evo868, fhkvdataiii, hydrocalm3, izar, mkradio3, mkradio4, ultrimis, unismart

Urządzenie nawiązuje połączenie.
W Devce & Services wykryło mi urządzenie i encje. Niestety encja Stan licznika wody Apator jest cały czas Unknown.
Nic się nie zmienia od 24 godzin.
Ktoś jest w stanie pomóc?

Ja tylko dodam że sprzęt jest sprawny, bo testowałem u mnie. Sprawdziliśmy na 2 szt i to samo

Tuner coś odbiera? Może ten wodomierz nie nadaje :smiley: (tak często)?

W ogole nie było nawet komunikatu ze połączył się z HA. Tunera chyba kolega nie ma.
Bloom, a masz możliwość podłączenia jakiegoś dodatkowego czujnika? Ds18b20, albo dht22?
Chodzi o to czy czasem esp sie nie zawiesza z jakiegoś powodu, bo na kogach zupełnie nic się nie dzieje

Albo chociaż text sensor dodaj (np. na końcu po całym bloku sensor)

text_sensor:
  - platform: template
    name: "Template Text Sensor"
    lambda: |-
        return {"Hello World"};
    update_interval: 60s

Cześć,
Niestety nie mam tunera. Myślałem że tym załatwię sprawę.

@Mariusz_Woszczyński Nie mam nic dopiero zaczynam zabawę z odczytem wody

Wpisz ten tekst sensor i zobacz w logach czy leci komunikat co określony czas do HA

Ale z tego co @bloom napisał to w HA wszystko działa. Encja się dodała itp. Tylko CC1101 nic nie odbiera.

Tak to wygląda, jak by nie odbierał, ale w logach totalna cisza, więc może warto sprawdzić czy cokolwiek leci do HA. Łączyłem się przez teamviewer i wszystko jest wg mnie ok, a dane nie lecą.
W ogóle jak HA dodawal sobie urządzenie, to czasem nawet nie prosil o Api key. I trzeba bylo dłuższą chwilę poczekać na pojawienie sie encji

Aaaaa, jeszcze mi jedna rzecz do glowy przyszła. Czy czesem Apator nie został skinfigurowany tak, ze odpowiada tylko na zapytanie…

Panowie macie jakies pomysly co do rozwiazania problemu czy pozostaje mi obejść się smakiem?

  • przybliżyć odbiornik do wodomierza
  • wywalić sensory z YAMLa i obserwować logi (jakimi nieznanymi IDkami rzuca)
  • jakbyś miał tuner to nim nasłuchiwać, aby upewnić się że tan Apator nadaje tak sam z siebie

OK skasowałem z yamla sensory:

sensor:
  - platform: wmbus
    name: "Stan licznika wody Apator"
    meter_id: 0x03624232
    type: apator162
    key: "00000000000000000000000000000000"
    accuracy_decimals: 5

Dam znać czy coś widać w logach

Edit:

Po skasowaniu sensorów nic nie widać ciekawego w logach

INFO Reading configuration /config/esphome/policzwode.yaml...
INFO Detected timezone 'Europe/Warsaw'
INFO Starting log output from policzwode.local using esphome API
INFO Successfully connected to policzwode.local
[17:04:10][I][app:102]: ESPHome version 2023.2.4 compiled on Feb 24 2023, 16:50:18
[17:04:11][C][wifi:504]: WiFi:
[17:04:11][C][wifi:362]:   Local MAC: 7C:87:CE:B5:D9:9D
[17:04:11][C][wifi:363]:   SSID: [redacted]
[17:04:11][C][wifi:364]:   IP Address: 192.168.1.100
[17:04:11][C][wifi:365]:   BSSID: [redacted]
[17:04:11][C][wifi:367]:   Hostname: 'policzwode'
[17:04:11][C][wifi:369]:   Signal strength: -24 dB ▂▄▆█
[17:04:11][V][wifi:371]:   Priority: 0.0
[17:04:11][C][wifi:373]:   Channel: 11
[17:04:11][C][wifi:374]:   Subnet: 255.255.255.0
[17:04:11][C][wifi:375]:   Gateway: 192.168.1.1
[17:04:11][C][wifi:376]:   DNS1: 8.8.8.8
[17:04:11][C][wifi:377]:   DNS2: 194.204.159.1
[17:04:11][C][logger:293]: Logger:
[17:04:11][C][logger:294]:   Level: VERBOSE
[17:04:11][C][logger:295]:   Log Baud Rate: 115200
[17:04:11][C][logger:296]:   Hardware UART: UART0
[17:04:11][C][captive_portal:088]: Captive Portal:
[17:04:11][C][mdns:108]: mDNS:
[17:04:11][C][mdns:109]:   Hostname: policzwode
[17:04:11][V][mdns:110]:   Services:
[17:04:11][V][mdns:112]:   - _esphomelib, _tcp, 6053
[17:04:11][V][mdns:114]:     TXT: version = 2023.2.4
[17:04:11][V][mdns:114]:     TXT: mac = 7c87ceb5d99d
[17:04:11][V][mdns:114]:     TXT: platform = ESP8266
[17:04:11][V][mdns:114]:     TXT: board = nodemcuv2
[17:04:11][V][mdns:114]:     TXT: network = wifi
[17:04:11][C][ota:093]: Over-The-Air Updates:
[17:04:11][C][ota:094]:   Address: policzwode.local:8266
[17:04:11][C][ota:097]:   Using Password.
[17:04:11][C][api:138]: API Server:
[17:04:11][C][api:139]:   Address: policzwode.local:6053
[17:04:11][C][api:141]:   Using noise encryption: YES
[17:04:11][C][sntp:053]: SNTP Time:
[17:04:11][C][sntp:054]:   Server 1: '0.pool.ntp.org'
[17:04:11][C][sntp:055]:   Server 2: '1.pool.ntp.org'
[17:04:11][C][sntp:056]:   Server 3: '2.pool.ntp.org'
[17:04:11][C][sntp:057]:   Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
[17:04:11][C][wmbus:242]: wM-Bus v1.3.9:
[17:05:36][D][api:102]: Accepted 192.168.1.10
[17:05:36][W][api.connection:071]: 192.168.1.10: Socket operation failed: BAD_INDICATOR errno=11
[17:05:36][V][api:114]: Removing connection to 192.168.1.10
[17:05:37][D][api:102]: Accepted 192.168.1.10
[17:05:37][V][component:200]: Component api took a long time for an operation (0.28 s).
[17:05:37][V][component:201]: Components should block for at most 20-30ms.
[17:05:37][V][api.connection:899]: Hello from client: 'aioesphomeapi (192.168.1.10)' | API Version 1.7
[17:05:37][W][api.connection:083]: aioesphomeapi (192.168.1.10): Connection closed
[17:05:37][V][api:114]: Removing connection to aioesphomeapi (192.168.1.10)
[17:05:37][D][api:102]: Accepted 192.168.1.10
[17:05:38][V][component:200]: Component api took a long time for an operation (0.28 s).
[17:05:38][V][component:201]: Components should block for at most 20-30ms.
[17:05:38][V][api.connection:899]: Hello from client: 'Home Assistant 2023.2.5 (192.168.1.10)' | API Version 1.7
[17:05:38][D][api.connection:918]: Home Assistant 2023.2.5 (192.168.1.10): Connected successfully

Dodałem urządzenie ESPHome do Devices. Niestety nie wykrywa encji :frowning:

Podzielę się z Wami moim doświadczeniem
Ja musiałem oddalić się od wodomierzy :slight_smile: mam 2 Apator162
jak był esp w pomieszczeniu gdzie są wodomierze to jeden z nich nie działał, esp nie odbierał żadnych telegramów.
Przeniosłem esp do innego pomieszczenia i jest ok

Nieraz za dobry sygnał to zły sygnał :slight_smile:

Jeżeli wodomierz byłby faktycznie skonfigurowany tak że odpowiada tylko na zapytanie to istnieje jakiś sposób na wysłanie takiego zapytania by wodomierz odpowiedział. Mam podobny problem tylko z wodomierzem Techem mkradio3 i podejrzewam że tak właśnie jest skonfigurowany by odpowiadał tylko na zapytania mimo że wszyscy sąsiedzi w bloku mają te same wodomierze to tylko moje nie nadają