Простой способ изменить любые значения любых датчиков в Home Assistant через автоматизации.

Странно, что штатными средствами автоматизации нет возможности изменить значение датчика, например, на «недоступен» или дать ему любое другое значение. Немного поискав, нашел python скрипт для этой цели.

Скрипт должен находиться по пути /config/python_scripts с именем set_state.py. Сам скрипт:

inputEntity = data.get('entity_id')
if inputEntity is None:
    logger.warning("===== entity_id is required if you want to set something.")
else:    
    inputStateObject = hass.states.get(inputEntity)
    if inputStateObject is None and not data.get('allow_create'):
        logger.warning("===== unknown entity_id: %s", inputEntity)
    else:
        if not inputStateObject is None:
            inputState = inputStateObject.state
            inputAttributesObject = inputStateObject.attributes.copy()
        else:
            inputAttributesObject = {}
    
        for item in data:
            newAttribute = data.get(item)
            logger.debug("===== item = {0}; value = {1}".format(item,newAttribute))
            if item == 'entity_id':
                continue            # already handled
            elif item == 'allow_create':
                continue            # already handled
            elif item == 'state':
                inputState = newAttribute
            else:
                inputAttributesObject[item] = newAttribute
            
        hass.states.set(inputEntity, inputState, inputAttributesObject)

При этом в configuration.yaml нужно разрешить использование python скриптов. Добавляем:

python_script:

И перезагружаем Home Assistant.

Чтобы использовать скрипт в автоматизациях, нужно в action прописать service: python_script.set_state и указать в data_template нужную сущность и нужные значения.

Примеры:

Установить значение сущности, в данном случае switch.switch_123, в статус Недоступно:

  action:
    service: python_script.set_state
    data_template:
      entity_id: switch.switch_123
      state: 'unavailable'

Изменить иконку:

  action:
    service: python_script.set_state
    data_template:
      entity_id: switch.switch_123
      icon: mdi:door-open

Изменить значение на Включен

  action:
    service: python_script.set_state
    data_template:
      entity_id: switch.switch_123
      state: 'on'

Добавить attribution:

  action:
    service: python_script.set_state
    data_template:
      entity_id: switch.switch_123
      attribution: 'Data provided by Synology'

Просто смотрим в Панели разработчика нужный параметр сущности и добавляем его в автоматизацию.

Скрипт найден тут:

https://community.home-assistant.io/t/how-to-manually-set-state-value-of-sensor/43975

 

 

 

 

0 0 голос
Рейтинг статьи

Подписаться
Уведомить о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

9 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Sem2000
Sem2000
5 месяцев назад

Не совсем понял нужность данного скрипта. Если датчик недоступен по техническим причинам, а мы заставили его стать «доступным», что мы выиграем ? Или я самой сути не понял ?

Sem2000
Sem2000
5 месяцев назад
Ответить на  kvv

Идет по улице гражданин, у него выпадает бумажник. Вы подбираете бумажник, но не отдаете потерявшему, а уверяете его, что отдадите в полицию, а те вернут ему ))
Уж если вы при помощи пингов выявили, что датчика нет в экосфере, так сразу оповестите себя, любимого и примите меры.
Ну или я все равно не понял сути ))

Sem2000
Sem2000
5 месяцев назад
Ответить на  kvv

Ясно. Спасибо за разъяснения )

Sander
Sander
5 месяцев назад
Ответить на  Sem2000

Возможно, сделал костыль, но данной функцией воспользовался для датчика расстояния, у которого после 1.6м вместо значения становится значение ‘unknown’ — что не учитываются фильтрами сглаживания. Соответственно, когда датчик выдает такой параметр, то автоматизация(скрипт) заменяет на цифровое значение, которое учитывается в фильтре и дает корректно работать основной автоматизации с этим датчиком.

Автору спасибо за статью!

doob
doob
2 месяцев назад

Отлично!
У меня проблема следующая. Опрашиваю датчики Овен через Modbus TCP, и если нет ответа от девайсов (датчики температуры и датчики наличия напряжения на входе), то HomeAssistant просто не обновляет последнее значение. То есть нет вообще отображения, что датчики недоступны.
Пока не знаю как как это применить, но пока это самое годное из найденного. Спасибо.

Whitemankpi
Whitemankpi
1 месяц назад

Еще один кейс использования.
Например у нас есть универсальный пульт, который управляется по MQTT,
так вот с помощью скрипта можно сделать обновление статуса определенной кнопки, нажимается ли она с пульта или созданным свитчем в HASSIO