Apator, Izar, AT-WMBUS-16-2 odczyt wodomierza ESPHome + CC1101

Jordan, brakuje Ci w yamlu bloku tekst sensor:

text_sensor:
  - platform: custom
    lambda: |-
      auto textsensor = new MyTextSensor();
      App.register_component(textsensor);
      return {textsensor->my_text_sensor};
    text_sensors:
      - name: Meter ID                    #text HEX
        filters:
        - to_upper:

Właśnie umieściłem na githubie nowszą wersję (0.9.8), zarówno biblioteki jak i mojego komponentu.
Przez ostatnie 12h nie miałem ani jednego restartu wymuszonego poprzez WDT (brak odczytu z CC1101).

Mam taki błąd podczas kompilacji.

Library Manager: Resolving dependencies...
INFO Resolving dependencies...
Library Manager: Installing bblanchon/ArduinoJson @ 6.18.5
INFO Installing bblanchon/ArduinoJson @ 6.18.5
Unpacking  [####################################]  100%
Library Manager: ArduinoJson@6.18.5 has been installed!
INFO ArduinoJson@6.18.5 has been installed!
Library Manager: Installing git+https://github.com/SzczepanLeon/wMbus-lib @ 0.9.7
INFO Installing git+https://github.com/SzczepanLeon/wMbus-lib @ 0.9.7
git version 2.30.2
Cloning into '/data/cache/platformio/cache/tmp/pkg-installing-7s08z0hr'...
Error: Package version 0.9.8+sha.6ac83e4 doesn't satisfy requirements 0.9.7 based on PackageMetaData <type=library name=wMbus-lib version=0.9.8+sha.6ac83e4 spec={'owner': None, 'id': None, 'name': 'wMbus-lib', 'requirements': '0.9.7', 'uri': 'git+https://github.com/SzczepanLeon/wMbus-lib'}

Powywalaj wszystko z:
config/esphome/.esphome/external_components

Daj też clean build files.

Wywaliłem odpowiedni katalog z .esphome/build/… , zrobiłem clean build ale external_components zostawiłem w spokoju :person_facepalming: .

Teraz wszystko poszło, dzięki.

1 polubienie

Faktycznie kurde, nie wiem jak tak dalem plamy :slight_smile:

Dobra, to chyba zostal problem z podlaczeniem CC1101 do ESP32 (z 8266 dziala mi normalnie)
Kupilem dodatkowo ESP32 aby sie pobawic ale po podlaczeniu CC1101 do ESP32 przestaje dzialac i jest nie dostepne.

Sprawedzilem czy nie ma zwarcc miedzy polaczeniami, napiecie do CC dociera i jest na normalnym poziomie wiec przypuszczam ze cos go gryzie podlaczenie sygnalowe.

Podlaczylem wedlug tej informacji ze zrodla

CC1101  -> ESP32(left side)
============================
           5V
           GND
MISO    -> GPIO12
MOSI    -> GPIO13
CSN     -> GPIO15
SCK     -> GPIO14
           GPIO2
           GPIO4


(right side)
VCC     -> 3V3
GDN     -> GND
VCC   -----------------
GND   |               |
MOSI  |               |
SCK   | CC1101        | GND
MISO  |               | ANT
GDO2  |               | GND
GDO0  |     crystal   |
CSN   |_______________-

@Mariusz_Woszczyński - Ja tak w woli tego REP:

STAN REPOZYTORIUM NA DZIEŃ 2022-12-21 godzina 13:20

Po wielu przegranych bitwach z moim RP3b+ i dzięki wsparciu @szopen i @macek (wielkie dzięki) wkońcu udało mi się skompilować BINarke i wgrać do NodeMcu i scalić to z HA, tak że to hula.

Kilka uwag:

  1. Dostaje (jak inni) PIKI. Po piku następuje powrót do prawidłowej wartości…
    a) ale tylko dla stanu licznika
apator.h
 93            my_sensor_state->publish_state(v);

image

b) dla wartości ID licznika robi się bałagan po piku i pozostaje - nie resetuje się.

apator.h
 94            my_sensor_id->publish_state(MeterID);


image

Robię restart NodeMcu (fizycznym przyciskiem) i …
nadal błędne ID


Odłączenie zasilania i przywrócenie nie pomogło w ustaleniu właściwego ID
image
najpierw (przy starcie) id na status nieznany (17:32:22), po rozruchu ID ustawione na niewłaściwe (17:32:45).

A i jeszcze jedno
dostając ten komunikat nie zorientowałem się, że wodomierz był poza zasięgiem mojego odbiornika, myślałem że BINarka była do dupy :stuck_out_tongue:

apator.h
98        ESP_LOGI("Info", "Incompatible ID\n");

4829838 hex = 75667512 dec

Po raz kolejny powtarzam, że piki to nie moja wina. Ja wrzuciłem gotowy dekder od @OlekD do esphome i to działa. W celu wyeliminowania pikow dodałem filtr, biorący pod uwage wartości pomiedzy 0 a 1000000, który @Jarosław_Wicik później zmodyfikował. Sproboj wrzucic jego wersję (jest wyzej w tym temacie)

Nic wiecej nie jestem w stanie zaoferować

Nie denerwuj się. Wielki szacunek za udostępnienie swojej pracy. W tym temacie jest taka wielowątkowość że idzie się pogubić :slight_smile: są omawiane trzy albo i więcej repozytoria :slight_smile:

A może i moja wina jednak…
Po konsultacji z @OlekD, zaktualizowałem repo.
Wersja na 1 licznik Apator:

Wersja na 2 liczniki Apator:

Potestujcie czy wali wartościami stanu licznika z kosmosu.
Przerobiłem też sposób przesyłania ID. Ze względu na to, że esphome wysyła dane w zmiennej float, ma pewne ograniczenia co do wartości i przez to może wyświetlać nieprawidłową wartość ID w HA. Zrobiłem przesyłanie ID tak jak w przypadku Izara - jako text sensor.

3 polubienia

@Mariusz_Woszczyński Testuje:

Test 1 - porażka
Nic nie przekazuje do HA, ani nie zmienia w rejestrach na NodeMcu


image

usunięcie nawiasów przy filtrze w pliku apator.h,
image

Test 2 - sukces


image

teraz potestujemy stabilność :slight_smile:
Update 1
narazie nakładka śpi, bo mam już rozbieżność między fizycznym odczytem a radiowym 10 l
Update 2
o 05:28 nakładka się przebudziła na chwile i poszła spać dalej :slight_smile:
o 06:43 nakładka się przebudziła na chwile i poszła spać dalej :slight_smile:

Dzięki za info.
Dodałem te nawiasy na githubie już po kompilacji kodu u siebie, gdzie nawiasów nie miałem.
Chciałem żeby to tak ładnie było ogarnięte. Dziwne, że te nawiasy coś zmieniają…

Usunąłem

Nie mogą, Jak coś zmieniają to albo kompilator jest “walnięty” (mało prawdopodobne) albo warunki w IF’e mają jakiś defekt.
99% junior programistów pierwsze co słyszy w pracy to “wciskaj nawiasy wszędzie – niech nikt nie zastanawia się co autor miał na myśli”, czyli inaczej “nie zakłądaj że ktoś po tobie będzie znał kolejność wykonywania działań i operatorów” :wink:

Też usłyszałem od kolegi elektronika, żeby dać nawiasy do każdego warunku, to tak zrobiłem, bo to nawet lepiej w kodzie wygląda.
Dlaczego inaczej działa - nie wiem…

Nie wiem dlaczego bez nawiasów działa a z nie. Kompilowałem zgodnie z wcześniejszą sugestią repo przed ostatnimi poprawkami dodając samodzielnie filtr i miałem dokładnie tą samą sytuacje. Z nawiasami nie było żadnych wartości (ID, STATUS) bez były.

Platforma to NodeMcu V3 z ESP8266MOD na pokładzie z CH340 robiącym za UART.

Z tym że deklaracja platformy ESP8266 jest u mnie zmieniona zgodnie z obowiązującą dokumentacją ESPHome:

esphome:
  name: apator
  comment: Maszynownia - licznik wody
  includes:
    - custom_components/apator.h

  libraries:
    -  SPI
    - "https://github.com/bblanchon/ArduinoJson.git"
    - "https://github.com/LSatan/SmartRC-CC1101-Driver-Lib.git"
    - "https://github.com/SzczepanLeon/wMbus-lib.git"
    - "https://github.com/MariuszWoszczynski/Apator-meter-reader-core.git"

esp8266:
  board: nodemcuv2

# Enable logging
logger: 
  level: DEBUG

# Enable Home Assistant API
api:
  encryption:
    key: "*************************************************************"

ota:
  password: "******************************************"

# Serwer with a statistic data and OTA board update
web_server:
  port: 80
  version: 2
  auth:
    username: !secret maszynownia_auth_u
    password: !secret maszynownia_auth_p

# WiFi Local Area Network (HA)
wifi:
  ssid: !secret maszynownia_wifi_ssid
  password: !secret maszynownia_wifi_p

  # Hotspot when can't connect to Local WiFi
  ap:
    ssid: "Apator AP"
    password: !secret maszynownia_ap_p

captive_portal:
text_sensor:
  - platform: custom
    lambda: |-
      auto textsensor = new MyTextSensor();
      App.register_component(textsensor);
      return {textsensor->my_text_sensor};
    text_sensors:
      - name: Meter ID                    #text 
        filters:
        - to_upper:

sensor:
  - platform: custom
    lambda: |-
      auto sensor = new MySensor();
      App.register_component(sensor);
      return {sensor->my_sensor_state};
    sensors:
      - name: Water meter state          #float value
        unit_of_measurement: L
        accuracy_decimals: 0

# int ApatorID = 0x4829838;

może to pomoże w dochodzeniu

U mnie po aktualizacji źródeł nadal jeden licznik odczytywany jest prawidłowo a drugi podaje stale kosmiczne wartości (nie są to chwilowe piki).
Jeśli chodzi o stabilność to z moich obserwacji jest dobrze.

Poniżej wartości odczytywane u mnie z liczników wody:
water_meter

@MarcO A czy ten drugi licznik kupowałeś z nakładką lub samą nakładkę jako nowe czy używane? Bo sprzedając używki nikt nie resetuje licznika w nakładce, a u Ciebie wskazanie to 469795,584 m3 co przekracza już zakres samego liczydła. 00000,000m3

Obydwa liczniki wraz z nakładkami były wyminiane na nowe przez firmę.
Prawidłowy odczyt tego licznika jest 36 589 L, który realizuję za pomocą wmbusmeters i karty DVB-T.

A spróbuj zainstalować wersję na jeden licznik i podaj ID tego co źle pokazuje.
Trzeba dojść do tego czy coś jest z repo na 2 liczniki, czy ten licznik inaczej nadaje i dekoder nie daje rady.

Czy HA liczy zużycie przy tej wartości (czy wartość się zmienia)?

1 polubienie

Poniżej historia odczytu tego licznika z ostatnich ok 16h:


Jak widać najniższe wartości mają ok 50 000 000 L co nie jest prawdą bo aktualny stan licznika to 36 589 L.

Po wgraniu wersji na jeden licznik przy utworzonym filtrze nie otrzymuję żadnych wartości, po usunięciu filtra dane są bez zmian kosmiczne:
water_meter1