Home assistant / esphome (делимся примерами и наработками в данной области).

Тема в разделе "Глядите, что я сделал", создана пользователем Securbond, 6 ноя 2020.

  1. Sanchorezh

    Sanchorezh Нуб

    Прошивал камеру ESP32-CAM, работает. Не забывали нулевой садить на землю перед прошивкой?
     
  2. vovatvset

    vovatvset Нуб

    Знающие, подскажите в чем проблема, у меня добавляются не все объекты (сенсоры, выключатели) от устройств ESP8266, ESP32 в HA, В логе от ESP они есть, а в Home Assistant появляется половина из них. Удаление из интеграций и новое добавление проблему не решает. Даже например от AHT10 влажность приходит а температура - нет. В чем может быть проблема?
     
  3. mikl

    mikl Нуб

    Здравствуйте. Я недавно начал изучать ESPHOME. Написал часть кода, который считает количество движений(binary_sensor), который после 2-х срабатываний датчика движения, включает реле и через 5сек выключает и обнуляет счетчик. Что нужно дописать чтобы если после первого срабатывания датчика движения прошло 10сек,а второго движения не было зафиксировано за это время, он обнулял счетчик?

    globals:
    - id: motion_val
    type: int
    initial_value: '0'

    binary_sensor:
    - platform: gpio
    pin:
    number: GPIO2
    mode: INPUT_PULLUP
    inverted: False
    name: "PIR Sensor"
    device_class: motion
    id: pir
    on_press:
    then:
    - if:
    condition:
    lambda: |-
    id(motion_val) +=1;

    return id(motion_val) > 2;
    then:
    - switch.turn_on: relay_1
    - lambda: |-
    id(motion_val) = 0;


    - platform: template
    name: "111"
    lambda: 'return id(pir).state;'
    filters:
    - delayed_off: 5s
    on_release:
    then:
    - switch.turn_off: relay_1

    switch:
    - platform: gpio
    pin: GPIO0
    name: "Relay_1"
    id: relay_1
     
  4. mikhail09p

    mikhail09p Гик

    Здравствуйте.
    Приобщился к обществу любителей Home Asistant...
    Учусь понемногу, подскажите одну вещь: как реализовать сравнение. Нужно, чтобы выход relay принимал 1, когда volt_on_charg больше voltage. И 0 , когда меньше.
    Как это пишется? Вставляю lambda: |- в разные места программы, везде ошибка...
    Код привожу ниже.

    Код (C++):
    esphome:
      name: energymonitor1
    #  плата ESP8266-NODEMCU2
    #  Датчик струму і напруги INA226, температура і вологість АНТ10
    #  дисплей 16x2, кнопка на D7, вихід на реле D6

    esp8266:
      board: nodemcuv2
     
    wifi:
    # Логин и пароль к сети WIFI
      ssid: "Mixa3"
      password: "********"

      # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "ESP 3"
        password: "12345678"

    captive_portal:

    # Enable logging
    logger:

    # Enable Home Assistant API
    api:
      password: ""

    ota:
      password: ""

    web_server:
      port: 80

    # GPIO Binary Sensor
    # Активация внутреннего подтягивания вывода и обозначение кнопки
    binary_sensor:
      - platform: gpio
        pin:
          number: D7
          mode: INPUT_PULLUP
          inverted: True
        name: "Кнопка"
        on_press:
        - switch.toggle: mybutton

    switch:
    #
      - platform: template
        name: "Реле"
        optimistic: true
        id: mybutton
        turn_on_action:
        - switch.turn_on: relay
        - light.turn_on: led
        turn_off_action:
        - switch.turn_off: relay
        - light.turn_off: led
    # Назначение выхода на реле
      - platform: gpio
        id: relay
        pin: D6
    # ---------------------------------------->
    # Monochromatic Light
    # Плавное зажигание светодиода
    output:
      - platform: esp8266_pwm
        id: basic_green_led
        pin:
          number: D8
          inverted: True

    light:
      - platform: monochromatic
        name: "Світлодіод"
        output: basic_green_led
        id: led
    # ----------------------------------------<
    # Example configuration entry
    number:
      - platform: template
        name: "Template number"
        id: volt_on_charg
        optimistic: true
        min_value: 10
        max_value: 30
        step: 0.1
       
    display:
      - platform: lcd_gpio
        dimensions: 16x2
        data_pins:
          - D0
          - D1
          - D2
          - D3
        enable_pin: D4
        rs_pin: D5
        lambda: |-
          it.printf("%s", id(relay).state ? "Charger" : "       ");
          it.printf(0, 1, "U=%.1fV I=%.2fA", id(voltage).state, id(current).state);
          it.strftime(11, 0,"%H:%M", id(my_time).now());
    # ----------------------------------------<    
    sensor:
      - platform: ina226
        address: 0x40
        shunt_resistance: 0.1 ohm
        current:
          name: "INA226 Current"
          id: current
        power:
          name: "INA226 Power"
        bus_voltage:
          name: "INA226 Bus Voltage"
          id: voltage
        shunt_voltage:
          name: "INA226 Shunt Voltage"
        max_current: 13A
        update_interval: 1s
       
      - platform: aht10
        temperature:
          name: "Temperature"
          disabled_by_default: false
          force_update: false
          unit_of_measurement: °C
          accuracy_decimals: 1
          device_class: temperature
          state_class: measurement
        humidity:
          name: "Humidity"
          disabled_by_default: false
          force_update: false
          unit_of_measurement: '%'
          accuracy_decimals: 1
          device_class: humidity
          state_class: measurement
        update_interval: 30s
        address: 0x38
       
    i2c:
      sda: GPIO3
      scl: GPIO1
      scan: true
     
    time:
    - platform: homeassistant
      id: my_time
     
     
  5. papant

    papant Нуб

    Добрый день!
    Подсткажите плиз по интеграции пылесоса Roborock S50 с прошивкой Valetudo в НА.
    В конфиг написал:
    - url: /local/custom_lovelace/valetudo-map-card.js
    type: module
    в лоулейсе так:
    - type: custom:valetudo-map-card
    vacuum_entity: vacuum.valetudo_timosha
    title: Timosha Vacuum Map Card
    preset_name: Live map
    entity: camera.valetudo_timosha_map_data
    map_scale: 1
    min_height: 0
    На выходе получаю вот так:
    изображение_2022-08-15_071614697.png
    Объект MAP в системе присутствует
    camera.valetudo_timosha_map_data
    Перечитал уже гору форумов, у всех все работает, один я рукожопый (
     
  6. Slacky

    Slacky Гик

    Добрый день.

    А вот подскажите. Установил HA на Debian 11. По иструкции linux core. И не работает restart из web-интерфейса. При нажатии на эту кнопку просто останавливает HA, но не запускает.

    При этом systemctl restart home-assistant@homeassistant прекрасно работает.

    Никакие конфиги не правил, система чистая.

    Куда смотреть?
     
  7. Un_ka

    Un_ka Гуру

    В логи. Какая версия python и HA?
     
  8. Slacky

    Slacky Гик

    А уже не актуально. Снес. Поставил вариант с supervisor. Те еще пляски с бубном (в основном с сетью и ее безопасностью). Пока ее тестирую.
     
  9. Slacky

    Slacky Гик

    А вот еще вопрос. Перерыл инет, но ответа пока не нашел.

    Есть некий счетчик. При срабатывании (не важно чего), он увеличивается, допустим, на единицу.

    Как сделать автоматизацию по увеличению счетчика?
     
  10. ИгорьК

    ИгорьК Гуру

    Получение погоды от Open Weather, вывод на брокер и в Home Assistant .

    1. Сначала Node Red. Он есть в НА в дополнениях, в магазине, HACS или отдельностоящий у тех кто подольше.

    Изображение:
    upload_2025-1-30_12-29-4.png
    Устройство:
    Код (Bash):
    [
        {
            "id": "9ee30296d86cea01",
            "type": "http request",
            "z": "01532b6fef1e6210",
            "name": "Текущая Погода",
            "method": "GET",
            "ret": "txt",
            "paytoqs": "ignore",
            "url": "http://api.open-meteo.com/v1/forecast?latitude=55.7522&longitude=37.6156&current=temperature_2m,relative_humidity_2m,is_day,rain,weather_code,wind_speed_10m&timezone=auto&forecast_days=1",
            "tls": "",
            "persist": false,
            "proxy": "",
            "insecureHTTPParser": false,
            "authType": "",
            "senderr": false,
            "headers": [],
            "x": 390,
            "y": 280,
            "wires": [
                [
                    "085e13a085ac2be6"
                ]
            ]
        },
        {
            "id": "4dac0f77da90b92c",
            "type": "inject",
            "z": "01532b6fef1e6210",
            "name": "",
            "props": [
                {
                    "p": "payload"
                },
                {
                    "p": "topic",
                    "vt": "str"
                }
            ],
            "repeat": "900",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 170,
            "y": 280,
            "wires": [
                [
                    "9ee30296d86cea01",
                    "d9ce8d4a6aa44c1f"
                ]
            ]
        },
        {
            "id": "420469432a5556db",
            "type": "mqtt out",
            "z": "01532b6fef1e6210",
            "name": "",
            "topic": "mosweather/now",
            "qos": "",
            "retain": "",
            "respTopic": "",
            "contentType": "",
            "userProps": "",
            "correl": "",
            "expiry": "",
            "broker": "842c076a4df99a05",
            "x": 1070,
            "y": 280,
            "wires": []
        },
        {
            "id": "085e13a085ac2be6",
            "type": "json",
            "z": "01532b6fef1e6210",
            "name": "",
            "property": "payload",
            "action": "obj",
            "pretty": false,
            "x": 570,
            "y": 280,
            "wires": [
                [
                    "1255dcaacde0f6b9"
                ]
            ]
        },
        {
            "id": "1255dcaacde0f6b9",
            "type": "function",
            "z": "01532b6fef1e6210",
            "name": "Текущее преобразование",
            "func": "let nmsg = {};\nnmsg.payload = {}\n\nglobal.set(\"tempnow\", msg.payload.current.temperature_2m);\n\nnmsg.payload.tempnow = msg.payload.current.temperature_2m;\nnmsg.payload.offset = msg.payload.utc_offset_seconds;\nnmsg.payload.is_day = msg.payload.current.is_day;\nnmsg.payload.humidity = msg.payload.current.relative_humidity_2m;\nnmsg.payload.rain = msg.payload.current.rain;\nnmsg.payload.windspeed = msg.payload.current.wind_speed_10m;\n\nreturn nmsg;",
            "outputs": 1,
            "timeout": 0,
            "noerr": 0,
            "initialize": "",
            "finalize": "",
            "libs": [],
            "x": 780,
            "y": 280,
            "wires": [
                [
                    "420469432a5556db"
                ]
            ]
        },
        {
            "id": "7ee29c138b6434be",
            "type": "http request",
            "z": "01532b6fef1e6210",
            "name": "Прогноз Погоды",
            "method": "GET",
            "ret": "txt",
            "paytoqs": "ignore",
            "url": "http://api.open-meteo.com/v1/forecast?latitude=55.7522&longitude=37.6156&hourly=temperature_2m,weather_code&timezone=Europe%2FMoscow&temporal_resolution=hourly_6&forecast_days=1&forecast_hours=24",
            "tls": "",
            "persist": false,
            "proxy": "",
            "insecureHTTPParser": false,
            "authType": "",
            "senderr": false,
            "headers": [],
            "x": 390,
            "y": 360,
            "wires": [
                [
                    "eb46a2a2aa1c9e0f"
                ]
            ]
        },
        {
            "id": "eb46a2a2aa1c9e0f",
            "type": "json",
            "z": "01532b6fef1e6210",
            "name": "",
            "property": "payload",
            "action": "obj",
            "pretty": false,
            "x": 570,
            "y": 360,
            "wires": [
                [
                    "a259b93fa286042f",
                    "aafa55221a787af9"
                ]
            ]
        },
        {
            "id": "a259b93fa286042f",
            "type": "function",
            "z": "01532b6fef1e6210",
            "name": "Текущее преобразование",
            "func": "let nmsg = {};\nnmsg.payload = {}\nnmsg.payload.offset = msg.payload.utc_offset_seconds;\n\nlet tenpnow = global.get(\"tempnow\");\n\nlet numbers = msg.payload.hourly.temperature_2m;\nlet minimum = Math.min(...numbers);\n\nlet fcnumbers = msg.payload.hourly.weather_code;\nlet fcmax = Math.max(...fcnumbers);\n\nnmsg.payload.tempnow = tenpnow; \nnmsg.payload.tempFC = minimum;\nnmsg.payload.weatherFC = fcmax;\n\nreturn nmsg;",
            "outputs": 1,
            "timeout": 0,
            "noerr": 0,
            "initialize": "",
            "finalize": "",
            "libs": [],
            "x": 780,
            "y": 360,
            "wires": [
                [
                    "ad1347aee01b4bab",
                    "dbe0b7631872b7d1"
                ]
            ]
        },
        {
            "id": "d9ce8d4a6aa44c1f",
            "type": "delay",
            "z": "01532b6fef1e6210",
            "name": "",
            "pauseType": "delay",
            "timeout": "3",
            "timeoutUnits": "seconds",
            "rate": "1",
            "nbRateUnits": "1",
            "rateUnits": "second",
            "randomFirst": "1",
            "randomLast": "5",
            "randomUnits": "seconds",
            "drop": false,
            "allowrate": false,
            "outputs": 1,
            "x": 170,
            "y": 360,
            "wires": [
                [
                    "7ee29c138b6434be"
                ]
            ]
        },
        {
            "id": "aafa55221a787af9",
            "type": "function",
            "z": "01532b6fef1e6210",
            "name": "Погода",
            "func": "let nmsg = {};\nnmsg.payload = {}\n\nlet tenpnow = global.get(\"tempnow\");\nnmsg.payload.tempnow = tenpnow; \n\nlet numbers = msg.payload.hourly.temperature_2m;\nlet minimum = Math.min(...numbers);\n\nnmsg.payload.tempFC = minimum;\n\nlet fcnumbers = msg.payload.hourly.weather_code;\nlet fcmax = Math.max(...fcnumbers);\n\nnmsg.payload.weatherFC = fcmax;\nlet nfcmax = Number(fcmax);\n\nlet codew = {}\n    codew[0] = \"Ясно\"\n    codew[1] = \"Ясно\"\n    codew[2] = \"Облачно\"\n    codew[3] = \"Хмуро\"\n    codew[45] = \"Туман\"\n    codew[48] = \"Мрак\"\n    codew[51] = \"Легкая Морось\"\n    codew[53] = \"Морось\"\n    codew[55] = \"Моросящий Дождик\"\n    codew[56] = \"Дряпня\"\n    codew[57] = \"Дряпня\"\n    codew[61] = \"Легкий Дождь\"\n    codew[63] = \"Дождь\"\n    codew[65] = \"Дождяра\"\n    codew[66] = \"Дряпня\"\n    codew[67] = \"Полная дряпня\"\n    codew[71] = \"Снежок\"\n    codew[73] = \"Снег\"\n    codew[75] = \"Метель\"\n    codew[77] = \"Буран\"\n    codew[80] = \"Отдельные Ливни\"\n    codew[81] = \"Ливень\"\n    codew[82] = \"Льет Как Из Ведра\"\n    codew[85] = \"Снежный Ливень\"\n    codew[86] = \"Пипец Какой-то - Снег с Дождем\"\n    codew[95] = \"Гроза\"\n    codew[96] = \"Гроза с Градом\"\n    codew[99] = \"Гроза с Градом\"\nnmsg.payload.weatherFCtxt = codew[nfcmax];\n\nreturn nmsg;",
            "outputs": 1,
            "timeout": 0,
            "noerr": 0,
            "initialize": "",
            "finalize": "",
            "libs": [],
            "x": 680,
            "y": 440,
            "wires": [
                [
                    "e57ace6b287857d3"
                ]
            ]
        },
        {
            "id": "ad1347aee01b4bab",
            "type": "mqtt out",
            "z": "01532b6fef1e6210",
            "name": "",
            "topic": "mosweather/fc",
            "qos": "",
            "retain": "",
            "respTopic": "",
            "contentType": "",
            "userProps": "",
            "correl": "",
            "expiry": "",
            "broker": "842c076a4df99a05",
            "x": 1080,
            "y": 360,
            "wires": []
        },
        {
            "id": "3a12200365d6f8ad",
            "type": "mqtt out",
            "z": "01532b6fef1e6210",
            "name": "",
            "topic": "mosweather/fctxt",
            "qos": "",
            "retain": "",
            "respTopic": "",
            "contentType": "",
            "userProps": "",
            "correl": "",
            "expiry": "",
            "broker": "842c076a4df99a05",
            "x": 1070,
            "y": 440,
            "wires": []
        },
        {
            "id": "e57ace6b287857d3",
            "type": "delay",
            "z": "01532b6fef1e6210",
            "name": "",
            "pauseType": "delay",
            "timeout": "3",
            "timeoutUnits": "seconds",
            "rate": "1",
            "nbRateUnits": "1",
            "rateUnits": "second",
            "randomFirst": "1",
            "randomLast": "5",
            "randomUnits": "seconds",
            "drop": false,
            "allowrate": false,
            "outputs": 1,
            "x": 870,
            "y": 440,
            "wires": [
                [
                    "3a12200365d6f8ad"
                ]
            ]
        },
        {
            "id": "842c076a4df99a05",
            "type": "mqtt-broker",
            "name": "",
            "broker": "192.168.27.31",
            "port": "1883",
            "clientid": "",
            "autoConnect": true,
            "usetls": false,
            "protocolVersion": "4",
            "keepalive": "60",
            "cleansession": true,
            "autoUnsubscribe": true,
            "birthTopic": "",
            "birthQos": "0",
            "birthRetain": "false",
            "birthPayload": "",
            "birthMsg": {},
            "closeTopic": "",
            "closeQos": "0",
            "closeRetain": "false",
            "closePayload": "",
            "closeMsg": {},
            "willTopic": "",
            "willQos": "0",
            "willRetain": "false",
            "willPayload": "",
            "willMsg": {},
            "userProps": "",
            "sessionExpiry": ""
        }
    ]
     
  11. ИгорьК

    ИгорьК Гуру

    2. НА забирает:
    Код (Bash):
    mqtt:
      sensor:
        - name: "В Москве Сейчас"
          device_class: temperature
          unique_id: temperature_at_moscow_from_ow
          state_topic: "mosweather/fctxt"
          value_template: "{{ value_json.tempnow }}"
          unit_of_measurement: '℃'

        - name: "В Москве Ветер"
          device_class: wind_speed
          unique_id: wspeed_at_moscow_from_ow
          state_topic: "mosweather/now"
          value_template: "{{ value_json.windspeed }}"
          unit_of_measurement: 'm/c'

        - name: "В Москве Дождь"
          # device_class: speed
          unique_id: rain_at_moscow_from_ow
          state_topic: "mosweather/now"
          value_template: "{{ value_json.rain }}"
          # unit_of_measurement: 'm/c'

        - name: "В Москве Влажность"
          device_class: humidity
          unique_id: humi_at_moscow_from_ow
          state_topic: "mosweather/now"
          value_template: "{{ value_json.humidity }}"
          unit_of_measurement: '%'

        - name: "В Москве Ожидается"
          device_class: temperature
          unique_id: temperature_at_moscow_from_owfc
          state_topic: "mosweather/fctxt"
          value_template: "{{ value_json.tempFC }}"
          unit_of_measurement: '℃'

        - name: "В Москве Будет"
          # device_class: text
          unique_id: weth_at_moscow_from_owfc_txt
          state_topic: "mosweather/fctxt"
          value_template: "{{ value_json.weatherFCtxt }}"
          # unit_of_measurement: '℃'
     

    3. Результат:

    upload_2025-1-30_12-36-15.png