Про зміни у валідації конфігу ESPHome – Pin Reuse validation

  • Категорія запису:Новини / Tips

Нещодавно в прошивці 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

Приклад коду який ви маєте отримати наведено ось тут:

https://github.com/iotdevicesdev/GGreg20_V3-ESP32-HomeAssistant-ESPHome/issues/2#issuecomment-1867814996

Шлях №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 проекту.

На цьому все. Бажаємо успіхів!