Простой способ изменить любые значения любых датчиков в 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
Не совсем понял нужность данного скрипта. Если датчик недоступен по техническим причинам, а мы заставили его стать «доступным», что мы выиграем ? Или я самой сути не понял ?
Скрипт даёт полный контроль над сущностями, а уже как распоряжаться, каждый придумает) я, например, пробовал делать «недоступным» датчик, на основании его пинга по ip
Идет по улице гражданин, у него выпадает бумажник. Вы подбираете бумажник, но не отдаете потерявшему, а уверяете его, что отдадите в полицию, а те вернут ему ))
Уж если вы при помощи пингов выявили, что датчика нет в экосфере, так сразу оповестите себя, любимого и примите меры.
Ну или я все равно не понял сути ))
Суть в эстетике) для меня это важно. По пингу то я оповещу себя, а в карточке хочется видеть «недоступно»
Ясно. Спасибо за разъяснения )
Возможно, сделал костыль, но данной функцией воспользовался для датчика расстояния, у которого после 1.6м вместо значения становится значение ‘unknown’ — что не учитываются фильтрами сглаживания. Соответственно, когда датчик выдает такой параметр, то автоматизация(скрипт) заменяет на цифровое значение, которое учитывается в фильтре и дает корректно работать основной автоматизации с этим датчиком.
Автору спасибо за статью!
Спасибо за комментарий! На мой взгляд этот скрипт как раз для вот таких костылей, когда встроенными средствами нет возможности что-то исправить.
Отлично!
У меня проблема следующая. Опрашиваю датчики Овен через Modbus TCP, и если нет ответа от девайсов (датчики температуры и датчики наличия напряжения на входе), то HomeAssistant просто не обновляет последнее значение. То есть нет вообще отображения, что датчики недоступны.
Пока не знаю как как это применить, но пока это самое годное из найденного. Спасибо.
Еще один кейс использования.
Например у нас есть универсальный пульт, который управляется по MQTT,
так вот с помощью скрипта можно сделать обновление статуса определенной кнопки, нажимается ли она с пульта или созданным свитчем в HASSIO
А есть ли возможность менять значение сущности и/или атрибута с помощью скрипта (script:). Очень нужно присваивать формулой значение атрибутам.
А есть ли возможность изменять атрибут и саму сущность сенсора с помощью скрипта (script:)?
Очень удобно добавлять рассчитываемые значения в атрибуты, тем самым избавляя себя от создания огромного количества одинаковых сенсоров для групп.
Но вот встает вопрос, как их изменять по одной кнопке c помощью сценария?
Помогите пожалуйста. Сделал все как написано, но у меня ни в какую не хочет появляться сущность python_script.set_state. Вообще никакие python_script.xxxxx не появляются. Каталог python_scripts в config создал. скрипт лежит там, python_script: в configuration.yaml прописал, сервер перегружал. Ничего. Хелп!
Здравствуйте, сущность python_script.set_state и не должна появиться, python_script.set_state это action (действие) для автоматизаций и скриптов. Гляньте в примере
разве после добавления очередного файла xxx.py в каталог python_scripts, не должно появляться python_script.xxx в списке объектов во вкладке Панель разработчика?
Нет, вы как раз в automation.xxx или script.xxx будете указывать action: service: python_script.set_state для нужной сущности из панели разработчика
Добрый день! Сделал согласно описанию. но ничего не сработало.
Есть необходимость, включать чайник на кнопку.
Атрибуты сущности чайника:
Код автоматизации:
Так же пробовал,
Но безуспешно…
Возникает вопрос, а в configuration.yaml, не нужно указывать путь для .py скрипта?
достаточно?
как убедиться что скрипт загрузился в систему?
Спасибо!
Скрипт рабочий …
Проверил на других устройствах.
Чайник xiaomi, не умеет включаться удаленно… Поэтому ничего не включалось
Я уже собрался перепроверять) Хорошо, что разобрались
Спасибо за статью! Где нибуть пригодиться в будущих идеях с умным домо!
Добрый день! Подскажите пожалуйста! сделал питон скрипт: /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 = {} … Подробнее »