Precisas de soldar o pin do DIO02 se acessível.
Para permitir o FSK.
Precisas de soldar o pin do DIO02 se acessível.
Para permitir o FSK.
Olá Marco, Post muito bem explicado, estou a tentar implementar a leitura do contador de agua com um esp32+cc1101, e como não tenho experiencial com esp estou com duvidas sobre a configuração dos ficheiro a enviar para o esp32, podes enviar a tua configuração?
Ao tentar compilar no esphome tenho erros:
INFO ESPHome 2024.9.1
INFO Reading configuration /config/esphome/wm-esp32-test.yaml…
INFO Updating https://github.com/SzczepanLeon/esphome-components.git@main
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
Failed config
wmbus: [source /config/esphome/wm-esp32-test.yaml:249]
mosi_pin: GPIO23
miso_pin: GPIO19
clk_pin: GPIO18
cs_pin: GPIO05
gdo0_pin: GPIO16
gdo2_pin: GPIO17
[log_unknown] is an invalid option for [wmbus]. Please check the indentation.
log_unknown: True
Boas, @carlosrino.
Houveram algumas alterações, com a última actualização do ESPHome.
Na tua configuração, apaga:
log_unknown: True
E altera logs & sensores.
Ex:
wmbus:
mosi_pin: GPIO23 ## SI: braun 3: MOSI Attached to Hardware SPI controller MOSI SPI Interface
miso_pin: GPIO19 ## SO: grün 5: MISO Attached to Hardware SPI controller MISO SPI Interface
clk_pin: GPIO18 ## SCLK: violett 4: SCK Attached to Hardware SPI controller CLK
cs_pin: GPIO05 ## CSN: orange 8: CSN Attached to Hardware SPI controller
gdo0_pin: GPIO16 ## GD00: gelb 7: RX Clock output. High Impedance !
gdo2_pin: GPIO17 ## GD02: weiss 6: TX FIFO status signals. High Impedance !
#Onde antes tinhas log_unknown: True
all_drivers: False
log_all: False
sensor:
- platform: wmbus
meter_id: 0xXXXXXX #O id do teu meter
type: izar #O type do teu meter
sensors:
- name: "my hot water RSSi"
field: "rssi"
accuracy_decimals: 0
unit_of_measurement: "dBm"
device_class: "signal_strength"
state_class: "measurement"
entity_category: "diagnostic"
- name: "Watermeter Display"
field: "total"
accuracy_decimals: 3
unit_of_measurement: "m³"
device_class: "water"
state_class: "total_increasing"
icon: "mdi:counter"
O resto da configuração mantém-se igual.
Ps. Se ainda não tiveres o id to teu meter e o type, não colocas os sensors e pões “all_drivers: True” e “log_all: True”; alteras depois para False quando já tiveres a info do teu meter: id & type, e tiveres criado os sensores.
Ps2. Se já tiveres configurados utility_meters poderás ter de alterar o input_sensor, se o entity_id do teu sensor tiver mudado.
Já agora um exemplo de aplicação no frontend, que nunca cheguei a mostrar:
Dá para saber até qual o consumo de cada descarga do autoclismo, poucos segundos depois de o puxar.
Wow, que confusão…
Para copiares a tua configuração e colar aqui, utiliza 3 acentos graves entre o code que partilhas (sem os parênteses):
(```)
code:
(```)
E separa a configuração do log que recebes com os erros; caso contrário é impossível ver se há algum erro de indentation na tua config.
---
## ---------------------------------------------------------------------------
## WMBUS METER az-delivery-devkit-v4 + CC1101 for Diehl IZAR RC 868 I R4 PL
## Hardware: ESP32 240MHz, 520KB RAM, 4MB Flash
##
## this version shows all watermeters. Use this for the first test
##
## 1. uses the latest wmbusmeter component from github
## 2. Optional uses syslog component
##
## SYSLOG: tail -f /var/log/syslog | grep "water-meter"
##
## ---------------------------------------------------------------------------
substitutions:
## device settings
device_name_short: "water-meter-esp"
device_description: "ESP32 CC1101 IZAR module"
projectname: "Diehl IZAR RC 868.Watermeter"
appversion: "2.0.7"
## all watermeters wmid: "0"
## your watermeter: wmid: !secret watermeterId
wmid: "0"
## logger settings
log_level: "DEBUG" # not that logging need memory, so in production mode use "WARN"
log_wmbus: "DEBUG" # Loglevel for wmbus meters component
log_baudrate: "0" # 0 disable uart logger messages
## ----------------------------------------------------------------
## APPLICATION ESPHOME
## ----------------------------------------------------------------
esphome:
name: ${device_name_short}
comment: ${device_description}
project:
name: ${projectname}
version: ${appversion}
build_path: ./build/${device_name_short}
on_boot:
priority: 200
then:
- globals.set:
id: boot_counter
value: !lambda "return id(boot_counter)+=1;"
- globals.set:
id: send_millisecond
value: !lambda "return millis();"
- logger.log:
level: INFO
tag: "system"
format: "BOOTMESSAGE:${device_name_short} API is connected, Device ready!"
- component.update: bootcounter
on_shutdown:
priority: 700
then:
- logger.log:
level: ERROR
tag: "system"
format: "BOOTMESSAGE:${device_name_short} is down!"
## ----------------------------------------------------------------
## HARDWARE az-delivery-devkit-v4
## ESP32 240MHz, 520KB RAM, 4MB Flash
## ----------------------------------------------------------------
esp32:
board: az-delivery-devkit-v4
framework:
type: arduino
## ----------------------------------------------------------------
## EXTERNAL COMPONENTS
## ----------------------------------------------------------------
external_components:
# uses the latest version from SzczepanLeon
# https://github.com/SzczepanLeon/esphome-components
# You can make ESPHome check the repository every time by setting this option to 0s
- source: github://SzczepanLeon/esphome-components@main
refresh: 0s
components: [wmbus]
# use local component from
# https://github.com/zdzichu6969/esphome-components
- source:
type: local
path: custom_components
components: [backup]
# use local component from
# https://github.com/TheStaticTurtle/esphome_syslog
# - source:
# type: local
# path: custom_components
# components: [syslog]
## ---------------------------------------------------
## syslog service
## tail -f /var/log/syslog | grep "water-meter"
## ---------------------------------------------------
# syslog:
# ip_address: !secret syslog_server
# port: !secret syslog_port
# min_level: DEBUG
# enable_logger: true
# ----------------------------------------------------------------
# Save your ESPHome device configuration in firmware and and
# recover it if you lost source files.
# ----------------------------------------------------------------
backup:
auth:
username: !secret web_username
password: !secret web_password
force_update: false
## ----------------------------------------------------------------
## Global variables
## ----------------------------------------------------------------
globals:
- id: boot_counter
type: int
restore_value: yes
initial_value: "0"
- id: last_value
type: float
restore_value: yes
initial_value: "0.00"
- id: alarm_error_text
type: std::vector<std::string>
restore_value: no
initial_value: '{"no error", "general_alarm","leakage","meter_blocked","back_flow","underflow","overflow","submarine","sensor_fraud","mechanical_fraud"}'
## ---------------------------------------------------
## WIFI Settings 3 wifis
## ---------------------------------------------------
wifi:
networks:
- ssid: !secret ssid3_name
password: !secret ssid3_pswd
priority: 0
- ssid: !secret ssid1_name
password: !secret ssid1_pswd
priority: 1
- ssid: !secret ssid2_name
password: !secret ssid2_pswd
priority: 2
domain: !secret domain
## ---------------------------------------------------
## The captive portal component in ESPHome is a
## fallback mechanism for when connecting to the
## configured WiFi fails.
## ---------------------------------------------------
captive_portal:
## ---------------------------------------------------
## LOGGER COMPONENT
## ---------------------------------------------------
logger:
id: appslogger
level: ${log_level}
baud_rate: ${log_baudrate}
logs:
wmbus: ${log_wmbus}
wMBus-lib: ${log_wmbus}
## ---------------------------------------------------
## OTA COMPONENT
## ---------------------------------------------------
ota:
password: !secret ota_pswd
platform: esphome
on_error:
then:
- logger.log:
level: INFO
tag: "system"
format: "OTA update error %d"
args: ["x"]
## ---------------------------------------------------
## WEBSERVER COMPONENT
## Include supporting javascript locally allowing
## it to work without internet access.
## local: true ## without internet access.
## local: false ## with internet access.
## ---------------------------------------------------
web_server:
port: 80
version: 2
local: true
## ---------------------------------------------------
## Home Assistant API COMPONENT
## ---------------------------------------------------
api:
id: espapi_wmbus_esp32
port: 6053
reboot_timeout: 0s
## ---------------------------------------------------
## SNTP COMPONENT
## ---------------------------------------------------
time:
- platform: sntp
id: time_sntp
timezone: Europe/Berlin
servers:
- 0.at.pool.ntp.org
- 0.pool.ntp.org
- 1.pool.ntp.org
on_time_sync:
then:
- logger.log:
tag: "system"
level: INFO
format: "Synchronized sntp clock"
## ------------------------------------------------------------------
## WMBUS CC1101 --> ESP32 az-delivery-devkit-v4
## ------------------------------------------------------------------
##
##
## o 1 (3.3V)
## |
## ╭――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x――o―╮
## | |
## | |
## - | 5v az-delivery-devkit-v4 | -- ANT
## | |
## | 16 17 5 18 19 23 |
## ╰――x――x――x――x――x――x――x――x――o――x――o――o――o――o――o――o――o――o――o――o―╯
## | | | | | | |
## o | | o | | ╰-o - 2 (GND)
## 7 o | 4 o o
## GDO0 6 | CLK 5 3
## GD02 o MISO M0SI
## 8
## CSN
##
## ------------------------------------------------------------------
wmbus:
mosi_pin: GPIO23 ## SI: braun 3: MOSI Attached to Hardware SPI controller MOSI SPI Interface
miso_pin: GPIO19 ## SO: grün 5: MISO Attached to Hardware SPI controller MISO SPI Interface
clk_pin: GPIO18 ## SCLK: violett 4: SCK Attached to Hardware SPI controller CLK
cs_pin: GPIO05 ## CSN: orange 8: CSN Attached to Hardware SPI controller
gdo0_pin: GPIO16 ## GD00: gelb 7: RX Clock output. High Impedance !
gdo2_pin: GPIO17 ## GD02: weiss 6: TX FIFO status signals. High Impedance !
# log_unknown (Optional): Show telegrams from not configured meters in log.
# Defaults to False
# log_unknown: True
all_drivers: true
log_all: true
## ---------------------------------------------------
## SWITCHES
## ---------------------------------------------------
switch:
# reset boot counter value
- platform: template
name: Device Boot Counter reset
turn_on_action:
then:
- lambda: |-
id(boot_counter) = 0;
id(bootcounter).publish_state(id(boot_counter));
- logger.log:
level: INFO
tag: "system"
format: "${device_name_short} reset boot counter o.k!"
- component.update: bootcounter
- platform: safe_mode
name: "Device Restart (Safe Mode)"
- platform: restart
name: "Restart"
id: restart_switch
- platform: factory_reset
name: Device Restart Factory
## ---------------------------------------------------
## SENSORS
## ---------------------------------------------------
#sensor:
Log de erros:
INFO ESPHome 2024.9.1
INFO Reading configuration /config/esphome/wm-esp32-test.yaml...
INFO Updating https://github.com/SzczepanLeon/esphome-components.git@main
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
Failed config
esphome: None
name: water-meter-esp
comment: ESP32 CC1101 IZAR module
project:
name: Diehl IZAR RC 868.Watermeter
version: 2.0.7
build_path: ./build/water-meter-esp
on_boot:
- priority: 200.0
then:
- globals.set:
id: boot_counter
value: !lambda |-
return id(boot_counter)+=1;
- globals.set:
Couldn't find ID 'send_millisecond'. Please check you have defined an ID with that name in your configuration.
id: send_millisecond
value: !lambda |-
return millis();
- logger.log:
level: INFO
tag: system
format: BOOTMESSAGE:water-meter-esp API is connected, Device ready!
args: []
- component.update:
Couldn't find ID 'bootcounter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "boot_counter".
id: bootcounter
on_shutdown:
- priority: 700.0
switch.template: [source /config/esphome/wm-esp32-test.yaml:267]
platform: template
name: Device Boot Counter reset
turn_on_action:
then:
-
Couldn't find ID 'bootcounter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "boot_counter".
lambda: !lambda |-
id(boot_counter) = 0;
id(bootcounter).publish_state(id(boot_counter));
- logger.log:
level: INFO
tag: system
format: water-meter-esp reset boot counter o.k!
args: []
- component.update:
Couldn't find ID 'bootcounter'. Please check you have defined an ID with that name in your configuration. These IDs look similar: "boot_counter".
id: bootcounter
disabled_by_default: False
restore_mode: ALWAYS_OFF
Desculpem a confusão na publicação anterior, mas já estou a ver que sem ajuda não vou lá.
Muito obrigado pela atenção dispensada.
Ok, vamos simplificar as coisas; admito que não sou fã do método utlizado que ‘enfia’ tudo para o esphome.
Não é ideal, mas… vamos tentar de outra forma.
Imagino que seja a primeira configuração que estás a fazer para o device e ainda não tenhas o id e o type do meter, certo?
Se for o caso, cria um novo device no ESPHome e utiliza esta configuração - alterando os valores em “XXXX”, em ap, ota, api que são criados (copia esses valores e insere-os nesta configuração) quando crias o novo device:
esphome:
name: watermeter
friendly_name: watermeter
esp32:
board: az-delivery-devkit-v4
framework:
type: arduino
logger:
id: appslogger
level: DEBUG
baud_rate: 0
logs:
wmbus: DEBUG
wMBus-lib: WARN
sensor: WARN
sensor.filter: WARN
text_sensor: WARN
api.service: ERROR
json: ERROR
mqtt: WARN
scheduler: ERROR
wifi: WARN
component: ERROR
api: WARN
time:
- platform: sntp
id: time_sntp
timezone: Europe/Lisbon
servers:
- 0.at.pool.ntp.org
- 0.pool.ntp.org
- 1.pool.ntp.org
api:
encryption:
key: "XXXX" #altera valor
ota:
- platform: esphome
password: "XXXX" #altera valor
wifi:
networks:
- ssid: "XXXXX" #coloca o SSID do teu WIFI
password: "XXXXX" #coloca a password
ap:
ssid: "Watermeter Fallback Hotspot"
password: "XXXX" #altera valor
captive_portal:
external_components:
- source: github://SzczepanLeon/esphome-components@main
wmbus:
mosi_pin: GPIO23 ## SI: braun 3: MOSI Attached to Hardware SPI controller MOSI SPI Interface
miso_pin: GPIO19 ## SO: grün 5: MISO Attached to Hardware SPI controller MISO SPI Interface
clk_pin: GPIO18 ## SCLK: violett 4: SCK Attached to Hardware SPI controller CLK
cs_pin: GPIO05 ## CSN: orange 8: CSN Attached to Hardware SPI controller
gdo0_pin: GPIO16 ## GD00: gelb 7: RX Clock output. High Impedance !
gdo2_pin: GPIO17 ## GD02: weiss 6: TX FIFO status signals. High Impedance !
all_drivers: True
log_all: True
Se tudo correr bem, irá surgir no log algo assim:
[12:07:35][D][mbus:035]: Received T1 A frame
[12:07:35][I][wmbus:085]: izar [0xXXXXXXX] RSSI: -76dBm T: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (26) T1 A
[12:07:39][D][mbus:035]: Received T1 A frame
[12:07:39][I][wmbus:085]: izar [0xXXXXXXX] RSSI: -83dBm T: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (26) T1 A
Daí podemos descobrir o type; que neste caso é “izar”, e o id do meter que é o valor seguinte [0xXXXXXX]. Mas como vês surgem 2 meters - podem até aparecer mais, e daí eu dizer que não é o método ideal, pois a forma de descobrir qual será o teu será pela força do sinal RSSI: quando maior, mais perto estará do teu device.
Mas de qualquer forma, pode-se depois confirmar com a criação dos sensores e confirmar se o valor total que o contador apresenta bate certo, ou ir alterando o id do meter até ter o mesmo valor do contador.
Estando isso feito apenas tens de acrescentar os sensores/switches à configuração:
sensor:
- platform: wmbus
meter_id: 0xXXXXXXX #altera pelo id do teu contador
type: izar #altera pelo type do teu contador
sensors:
- name: "my hot water RSSi"
field: "rssi"
accuracy_decimals: 0
unit_of_measurement: "dBm"
device_class: "signal_strength"
state_class: "measurement"
entity_category: "diagnostic"
- name: "Watermeter Display"
field: "total"
accuracy_decimals: 3
unit_of_measurement: "m³"
device_class: "water"
state_class: "total_increasing"
icon: "mdi:counter"
switch:
- platform: restart
name: "Restart Device"
id: restart_switch
icon: mdi:restart
Tens toda a razão, visto assim fica tudo muito mais claro, vou testar e depois já comento.
Mais uma vez muitíssimo obrigado pela atenção.
Olá, tenho este log, devo ter algo mal:
INFO ESPHome 2024.9.1
INFO Reading configuration /config/esphome/watermeter.yaml...
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from 192.168.17.48 using esphome API
INFO Successfully connected to watermeter @ 192.168.17.48 in 0.122s
INFO Successful handshake with watermeter @ 192.168.17.48 in 0.063s
[21:58:08][I][app:100]: ESPHome version 2024.9.1 compiled on Sep 27 2024, 21:14:48
[21:58:08][C][logger:185]: Logger:
[21:58:08][C][logger:186]: Level: DEBUG
[21:58:08][C][logger:188]: Log Baud Rate: 0
[21:58:08][C][logger:189]: Hardware UART: UART0
[21:58:08][C][logger:193]: Level for 'wmbus': DEBUG
[21:58:08][C][logger:193]: Level for 'wMBus-lib': WARN
[21:58:08][C][logger:193]: Level for 'sensor': WARN
[21:58:08][C][logger:193]: Level for 'sensor.filter': WARN
[21:58:08][C][logger:193]: Level for 'text_sensor': WARN
[21:58:08][C][logger:193]: Level for 'api.service': ERROR
[21:58:08][C][logger:193]: Level for 'json': ERROR
[21:58:08][C][logger:193]: Level for 'mqtt': WARN
[21:58:08][C][logger:193]: Level for 'scheduler': ERROR
[21:58:08][C][logger:193]: Level for 'wifi': WARN
[21:58:08][C][logger:193]: Level for 'component': ERROR
[21:58:08][C][logger:193]: Level for 'api': WARN
[21:58:08][C][captive_portal:089]: Captive Portal:
[21:58:08][C][sntp:048]: SNTP Time:
[21:58:08][C][sntp:049]: Server 1: '0.at.pool.ntp.org'
[21:58:08][C][sntp:050]: Server 2: '0.pool.ntp.org'
[21:58:08][C][sntp:051]: Server 3: '1.pool.ntp.org'
[21:58:08][C][sntp:052]: Timezone: 'WET0WEST,M3.5.0/1,M10.5.0'
[21:58:08][C][mdns:116]: mDNS:
[21:58:08][C][mdns:117]: Hostname: watermeter
[21:58:08][C][esphome.ota:073]: Over-The-Air updates:
[21:58:08][C][esphome.ota:074]: Address: 192.168.17.48:3232
[21:58:08][C][esphome.ota:075]: Version: 2
[21:58:08][C][esphome.ota:078]: Password configured
[21:58:08][C][safe_mode:018]: Safe Mode:
[21:58:08][C][safe_mode:020]: Boot considered successful after 60 seconds
[21:58:08][C][safe_mode:021]: Invoke after 10 boot attempts
[21:58:08][C][safe_mode:023]: Remain in safe mode for 300 seconds
[21:58:08][C][wmbus:299]: wM-Bus v4.0.5-1.17.1-b8f4a945:
[21:58:08][C][wmbus:316]: MAC: CDF9D108
[21:58:08][C][wmbus:317]: CC1101 frequency: 868.950 MHz
[21:58:08][C][wmbus:318]: CC1101 SPI bus:
[21:58:08][E][wmbus:320]: Check connection to CC1101!
[21:58:08][C][wmbus:322]: MOSI Pin: GPIO23
[21:58:08][C][wmbus:323]: MISO Pin: GPIO19
[21:58:08][C][wmbus:324]: CLK Pin: GPIO18
[21:58:08][C][wmbus:325]: CS Pin: GPIO5
[21:58:08][C][wmbus:326]: GDO0 Pin: GPIO16
[21:58:08][C][wmbus:327]: GDO2 Pin: GPIO17
[21:58:08][C][wmbus:333]: Available drivers: wme5, weh_07, watertech, waterstarm, vario451mid, vario451, vario411, unknown, unismart, ultrimis, ultraheat, tsd2, topaseskr, supercom587, sontex868, sharky774, sharky, sensostar, rfmtx1, rfmamb, qwater, qualcosonic, qsmoke, qheat_55_us, qheat, qcaloric, q400, pollucomf, piigth, omnipower, nemo, munia, multical21, mkradio4a, mkradio4, mkradio3, minomess, microclima, lse_08, lse_07_17, lansenth, lansensm, lansenrp, lansenpu, lansendw, kampress, kamheat, izar, iwm
[21:58:08][E][component:082]: Component wmbus is marked FAILED
[21:58:40][I][safe_mode:041]: Boot seems successful; resetting boot loop counter
[21:58:40][D][esp32.preferences:114]: Saving 1 preferences to flash...
[21:58:40][D][esp32.preferences:143]: Saving 1 preferences to flash: 0 cached, 1 written, 0 failed
Olá, já verifiquei todas as ligações e parecem-me bem, pela foto podem-me confirmar que está tudo ok?
já troquei o 19 com o 23 e dá o mesmo erro.
À primeira vista as conexões anteriores parecem estar certas.
Experimenta, ainda assim, fazer um teste de continuidade entre a solda nas traseiras do CC1101 e os pins inferiores do ESP32.
Em último caso pode até ser um problema de um dos componentes; daí eu gostar de ter sempre mais do que um - pelo sim, pelo não.
Edit:
No github vês, em issues, muita gente a queixar-se de boards CC1101 defeituosas…
Eu comprei esta.
OK, Marco, quase de certeza que deve ser a placa CC1101 com defeito, vou tentar comprar de outro fornecedor.
obg.
Por baixo facilmente fazem shunt com o ground plane, basta calor a mais.
Pelo preço provavelmente há muitos defeituosos.
Olá, já recebi o novo CC1101 de outro fornecedor e este já funciona,
[21:06:53][D][mbus:035]: Received T1 A frame
[21:06:53][I][wmbus:091]: izar [0x21xxxxxxx] RSSI: -79dBm T: 1944304CE3B14F214404B131180013E6C41CD3CCFEC69E2B6004 (26) T1 A
[21:07:02][D][mbus:035]: Received T1 A frame
Mais uma vez obrigado pela ajuda.
Isto é bastante pequeno…
Talvez com uma barra de pins: 1.27mm.
Esse são 2.54mm?
Copyright © 2017-. Todos os direitos reservados
CPHA.pt - info@cpha.pt