Python скрипт для изменения значений сущностей Home Assistant

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

 

 

 

 

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

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

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

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

Sem2000
Sem2000
4 лет назад
Ответить на  kvv

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

Sem2000
Sem2000
4 лет назад
Ответить на  kvv

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

Sander
Sander
4 лет назад
Ответить на  Sem2000

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

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

doob
doob
4 лет назад

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

Whitemankpi
Whitemankpi
4 лет назад

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

Андрей
Андрей
4 лет назад

А есть ли возможность менять значение сущности и/или атрибута с помощью скрипта (script:). Очень нужно присваивать формулой значение атрибутам.

Андрей Снейк
Андрей Снейк
4 лет назад

А есть ли возможность изменять атрибут и саму сущность сенсора с помощью скрипта (script:)?
Очень удобно добавлять рассчитываемые значения в атрибуты, тем самым избавляя себя от создания огромного количества одинаковых сенсоров для групп.
Но вот встает вопрос, как их изменять по одной кнопке c помощью сценария?

Semyon Ovchinnikov
Semyon Ovchinnikov
4 лет назад

Помогите пожалуйста. Сделал все как написано, но у меня ни в какую не хочет появляться сущность python_script.set_state. Вообще никакие python_script.xxxxx не появляются. Каталог python_scripts в config создал. скрипт лежит там, python_script: в configuration.yaml прописал, сервер перегружал. Ничего. Хелп!

Semyon Ovchinnikov
Semyon Ovchinnikov
4 лет назад
Ответить на  kvv

разве после добавления очередного файла xxx.py в каталог python_scripts, не должно появляться python_script.xxx в списке объектов во вкладке Панель разработчика?

Алексей
Алексей
3 лет назад

Добрый день! Сделал согласно описанию. но ничего не сработало.
Есть необходимость, включать чайник на кнопку.
Атрибуты сущности чайника:

action_id: 0
action: idle
friendly_name: Электрический чайник Power
device_class: power

Код автоматизации:

#4ainik
 - trigger:
    platform: state
    entity_id: sensor.0x158d0003d43a49_action
    to: single
  action:
   - service: python_script.set_state
     data_template:
      entity_id: binary_sensor.ac9a22f232fb_power
      state: 'on'

Так же пробовал,

 action:
   - service: python_script.set_state
     data_template:
      entity_id: binary_sensor.ac9a22f232fb_power
      action_id: '1'

Но безуспешно…

Возникает вопрос, а в configuration.yaml, не нужно указывать путь для .py скрипта?

python_script:

достаточно?

как убедиться что скрипт загрузился в систему?

Спасибо!

Последний раз редактировалось 3 лет назад Алексей Аравин ем
Алексей
Алексей
3 лет назад
Ответить на  Алексей

Скрипт рабочий …
Проверил на других устройствах.

Чайник xiaomi, не умеет включаться удаленно… Поэтому ничего не включалось

Алексей
Алексей
3 лет назад
Ответить на  kvv

Спасибо за статью! Где нибуть пригодиться в будущих идеях с умным домо!

Виктор
Виктор
3 лет назад

Добрый день! Подскажите пожалуйста! сделал питон скрипт: /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 = {}         … Подробнее »

Последний раз редактировалось 3 лет назад Виктор ем