• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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;
Где нашлось:
 
Сверху Снизу