Простой способ изменить любые значения любых датчиков в 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 vote
Article Rating

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

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

7 Комментарий
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Sem2000
Sem2000
1 месяц назад

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

Sem2000
Sem2000
1 месяц назад
Reply to  kvv

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

Sem2000
Sem2000
1 месяц назад
Reply to  kvv

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

Sander
Sander
27 дней назад
Reply to  Sem2000

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

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