• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESPHOME HomeAssistant esp8266 + 2x hc-sr04 + ssd1306_i2c + relay

vasilik

New member
Доброго времени суток.
Кто-то сталкивался с таким, если у датчика HC-SR04 измеренное расстояние превышает максимальное значение, и он передает NULL , и дать ему расстояние которое входит в автоматизацию для включения реле, оно не срабатывает, но если расстояние будет выше расстояния срабатывания и приблизить до расстояния срабатывания автоматизации всё работает нормально

Код:
captive_portal:
#  D1- sda, D2 - scl -- ssd1306_i2c display
#  D3 - trigg, D4 - echo -- HC-R04(1)
#  D5 - Relay
#  D6 - trigg, D7 - echo  -- HC-SR04(2)
font:
  - file: 'arial.ttf'
    id: font1
    size: 12
   
switch:
  - platform: gpio
    pin: D5
    name: "Relay"
    id: relay

i2c:
  sda: D1
  scl: D2

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    update_interval: 0.5s
    lambda: |-
      if (id(relay).state) {
        it.print(25, 45, id(font1), "Relay: ON");
      } else {
        it.print(25, 45, id(font1), "Relay: OFF");
      }
      it.print(5, 0, id(font1), "Status");
      it.printf(15, 15, id(font1), "Sensor 1: %.2f", id(us1).state);
      it.printf(15, 30, id(font1), "Sensor 2: %.2f", id(us2).state);

sensor:
  - platform: ultrasonic
    trigger_pin: D3
    echo_pin: D4
    update_interval: 0.2s
    name: "Ultrasonic Sensor 1"
    id: us1
    on_value_range:
        - below: 0.3
          then:
            - switch.turn_on: relay
            - delay: 5s
            - switch.turn_off: relay
             
  - platform: ultrasonic
    trigger_pin: D6
    echo_pin: D7
    update_interval: 0.1s
    name: "Ultrasonic Sensor 2"
    id: us2
    on_value_range:
        - below: 0.3
          then:
            - switch.turn_on: relay
            - delay: 5s
            - switch.turn_off: relay
 

nikolz

Well-known member
ничего не понял.
каким образом "расстояние входит в автоматизацию"?
-----------------------------
Велик и могуч русский язык.
 

vasilik

New member
ничего не понял.
каким образом "расстояние входит в автоматизацию"?
-----------------------------
Велик и могуч русский язык.
on_value_range:
- below: 0.3
then:
- switch.turn_on: relay
- delay: 5s
- switch.turn_off: relay

если значение меньше 0.3
реле включается
задержка 5 секунд
реле выключается
 

Lexeyka

New member
Доброго времени суток.
Кто-то сталкивался с таким, если у датчика HC-SR04 измеренное расстояние превышает максимальное значение, и он передает NULL , и дать ему расстояние которое входит в автоматизацию для включения реле, оно не срабатывает, но если расстояние будет выше расстояния срабатывания и приблизить до расстояния срабатывания автоматизации всё работает нормально

Код:
captive_portal:
#  D1- sda, D2 - scl -- ssd1306_i2c display
#  D3 - trigg, D4 - echo -- HC-R04(1)
#  D5 - Relay
#  D6 - trigg, D7 - echo  -- HC-SR04(2)
font:
  - file: 'arial.ttf'
    id: font1
    size: 12
 
switch:
  - platform: gpio
    pin: D5
    name: "Relay"
    id: relay

i2c:
  sda: D1
  scl: D2

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    update_interval: 0.5s
    lambda: |-
      if (id(relay).state) {
        it.print(25, 45, id(font1), "Relay: ON");
      } else {
        it.print(25, 45, id(font1), "Relay: OFF");
      }
      it.print(5, 0, id(font1), "Status");
      it.printf(15, 15, id(font1), "Sensor 1: %.2f", id(us1).state);
      it.printf(15, 30, id(font1), "Sensor 2: %.2f", id(us2).state);

sensor:
  - platform: ultrasonic
    trigger_pin: D3
    echo_pin: D4
    update_interval: 0.2s
    name: "Ultrasonic Sensor 1"
    id: us1
    on_value_range:
        - below: 0.3
          then:
            - switch.turn_on: relay
            - delay: 5s
            - switch.turn_off: relay
           
  - platform: ultrasonic
    trigger_pin: D6
    echo_pin: D7
    update_interval: 0.1s
    name: "Ultrasonic Sensor 2"
    id: us2
    on_value_range:
        - below: 0.3
          then:
            - switch.turn_on: relay
            - delay: 5s
            - switch.turn_off: relay
Здравствуйте. Скажите, Вы нашли решение?
У меня похожая проблема. Автоматизация такая: Если мы подходим близко к датчику, дисплей зажигается. Отходим (но не слишком далеко, т.е. в пределах работы датчика) - дисплей тухнет.
Но если расстояние слишком большое (возвращается NAN), то экран продолжает гореть,
т.к. запоминается последнее считанное (входящее в автоматизацию) перед NAN значение.
А надо, чтобы и при NAN экран выключался.

Код:
interval:  
  # Если датчик возвращает небольшое расстояние (кто-то появился перед датчиком),
  # то зажигаем дисплей
  - interval: 1s
    then:
      - if:
          condition:
            sensor.in_range:
              id: usonic
              below: 0.2
          then:
             - script.execute: display_on

  # Если в течение заданного времени (15-ти сек) сохраняется большое расстояние (никого нет перед датчиком),
  # то гасим дисплей (page5 - это пустая страница)
  - interval: 1s
    then:
      - if:
          condition:
            for:
              time: 15s
              condition:
                sensor.in_range:
                  id: usonic
                  above: 0.2
          then:
            - script.stop: display_on
            - display.page.show: page5
 

Lexeyka

New member
Здравствуйте. Скажите, Вы нашли решение?
У меня похожая проблема. Автоматизация такая: Если мы подходим близко к датчику, дисплей зажигается. Отходим (но не слишком далеко, т.е. в пределах работы датчика) - дисплей тухнет.
Но если расстояние слишком большое (возвращается NAN), то экран продолжает гореть,
т.к. запоминается последнее считанное (входящее в автоматизацию) перед NAN значение.
А надо, чтобы и при NAN экран выключался.

Код:
interval: 
  # Если датчик возвращает небольшое расстояние (кто-то появился перед датчиком),
  # то зажигаем дисплей
  - interval: 1s
    then:
      - if:
          condition:
            sensor.in_range:
              id: usonic
              below: 0.2
          then:
             - script.execute: display_on

  # Если в течение заданного времени (15-ти сек) сохраняется большое расстояние (никого нет перед датчиком),
  # то гасим дисплей (page5 - это пустая страница)
  - interval: 1s
    then:
      - if:
          condition:
            for:
              time: 15s
              condition:
                sensor.in_range:
                  id: usonic
                  above: 0.2
          then:
            - script.stop: display_on
            - display.page.show: page5
Отвечаю сам себе. Всего-то нужно было фильтр filter_out воткнуть.
Код:
- platform: ultrasonic
    trigger_pin: GPIO14
    echo_pin: GPIO13
    name: "Ultrasonic Sensor"
    id: usonic
    update_interval: 500ms
    filters:
    - filter_out: nan
 

Lexeyka

New member
Отвечаю сам себе. Всего-то нужно было фильтр filter_out воткнуть.
Код:
- platform: ultrasonic
    trigger_pin: GPIO14
    echo_pin: GPIO13
    name: "Ultrasonic Sensor"
    id: usonic
    update_interval: 500ms
    filters:
    - filter_out: nan
Не смотрите на это, я поторопился с решением.
Но теперь я его нашёл. Данный фильтр меняет NAN на указанное Вами значение, н-р, на 2 метра:
Код:
sensor:
  - platform: ultrasonic
    trigger_pin: GPIO14
    echo_pin: GPIO13
    name: "Ultrasonic Sensor"
    id: usonic
    update_interval: 1s
    filters:
      - lambda: if (isnan(x)) {  return 2.0; } return x;
Где нашлось:
 
Сверху Снизу