Нещодавно в прошивці ESPHome відбулися зміни, які тепер не дозволяють повторно застосовувати одні й ті ж порти вводу виводу контролера для створення різних сутностей.
Цей механізм отримав назву Pin Reuse validation: https://esphome.io/changelog/2023.12.0.html#pin-reuse-validation
Ці оновлення у версії ESPHome 2023.12.0 також торкнулися прикладів розроблених нашою компанією для продукту GGreg20_V3 Geiger counter ionizing radiation detector module.
Відповідно до звернення (https://github.com/iotdevicesdev/GGreg20_V3-ESP32-HomeAssistant-ESPHome/issues/2) користувача стосовно репозиторію для GGreg20_V3-ESP32-HomeAssistant-ESPHome ми внесли необхідні оновлення в конфігураційний YAML-файл.
Тепер цей приклад буде нормально працювати з урахуванням нововведень у валідацію конфігурацій ESHome та ви зможете перейти на нові версії ESPHome без проблем.
Ми також плануємо оновити інші репозиторії з цією проблемою.
Ви також самостійно можете внести зміни у свої YAML-файли конфігурації у ESPHome.
Станом на зараз нам відомо два шляхи виправлення конфігу так, щоб він проходив нові правила валідації конфігурації:
Шлях №1. Якщо вам потрібно повторно використати pin, натомість використовуйте https://esphome.io/components/copy.html
Це більш правильний шлях, який ми рекомендуємо застосовувати.
Для сутностей сенсорів (sensor entities):
https://esphome.io/components/copy.html#copy-sensor
для сутностей дискретних сенсорів (binary sensor entities):
https://esphome.io/components/copy.html#copy-binary-sensor
Приклад коду який ви маєте отримати наведено ось тут:
Шлях №2. Ви також можете задіяти виключну можливість, описану у документі ESPHome Pin Schemma:
https://esphome.io/guides/configuration-types#config-pin-schema
config key: “allow_other_uses”
Ви можете використати цей ключ налаштування щоб обійти контроль повторного застосування пінів у виключних ситуаціях.
Зверніть увагу, що ключ потрібно вказати не лише в сутностях-дублях, а у кожній сутності, де застосовується конкретний пін, щоб конфігурація пройшла валідацію:
Помилкові ключі:
Правильні ключі:
У вас має вийти ось такий код із застосуванням ключа “alow_other_uses”:
# YAML code example:
- platform: pulse_counter
pin:
number: GPIO2
allow_other_uses: true
state_class: "measurement"
unit_of_measurement: 'CPM'
name: 'Ionizing Radiation Power CPM'
count_mode:
rising_edge: DISABLE
falling_edge: INCREMENT # GGreg20_V3 uses Active-Low logic
# It seems that only one instance of pulse counter internal filters can be set
# So here no any debounce filters for CPM value
use_pcnt: False
internal_filter: 180us
update_interval: 60s
accuracy_decimals: 0
id: my_cpm_meter
- platform: pulse_counter
pin:
number: GPIO2
allow_other_uses: true
inverted: True
mode:
input: True
pullup: False
pulldown: False
unit_of_measurement: 'uSv/Hour'
name: 'Ionizing Radiation Power'
count_mode:
rising_edge: DISABLE
falling_edge: INCREMENT
update_interval: 60s
accuracy_decimals: 3
id: my_dose_meter
filters:
# - sliding_window_moving_average: # 5-minutes moving average (MA5) here
# window_size: 5
# send_every: 1
- multiply: 0.0057 # or 0.00332 for J305 by IoT-devices tube conversion factor of pulses into uSv/Hour
# END of YAML code example
Ви можете обирати, який із способів підходить до вашого DIY проекту.
На цьому все. Бажаємо успіхів!