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
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
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.
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 (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
Podzielę się z Wami moim doświadczeniem
Ja musiałem oddalić się od wodomierzy 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ł
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ą