Нещодавно в прошивці 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 проекту.
На цьому все. Бажаємо успіхів!