il n’y a pas en standard de service pour forcer une mise à jour d’un sensor, la solution est d’utiliser un développement python_script
une fois installé
- créer le répertoire config/python_scripts
- ajouter dans configuration.yaml une ligne
python_script:
- relancer la configuration yaml
de créer un service qui s’appelle python_script.set_state
je recopie ici le .py qu’il faut ajouter dans le repertoire python_scripts
#==================================================================================================
# python_scripts/set_state.py
#==================================================================================================
#--------------------------------------------------------------------------------------------------
# Set the state or other attributes for the entity specified in the Automation Action
#--------------------------------------------------------------------------------------------------
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)
inputState = inputStateObject.state
inputAttributesObject = inputStateObject.attributes.copy()
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 == 'state':
inputState = newAttribute
else:
inputAttributesObject[item] = newAttribute
hass.states.set(inputEntity, inputState, inputAttributesObject)
pour prendre en compte ce service
- dans outils de developpement/services
appeler le service : Python Scripts: Recharger (reload)
pour plus d’info suivre ce post:
le service python_script.set_state est maintenant disponible
créer un sensor: je l’ai mis dans template.yaml mais j’aurais pu le mettre dans sensors.yaml
donc dans template.yaml,
edit: on peut aussi créer le sensor via l’UI : paramètres/appareils et services/entrées/template/modéliser un capteur et on mets les mêmes infos que ce que j’ai mis dans le yaml, mettre {{ « 13 »}} dans modèle d’entité
- sensor:
- name: "temp_portail_input"
unique_id: "temp_portail_input01"
unit_of_measurement: "°C"
device_class: temperature
state_class: measurement
state: >
{{ "13"}}
le 13 c’est juste pour voir si c’est OK dans lovelace
ensuite créer un automate avec le webhook: temperature_portail, le service python_script.set_state, le sensor créé
- id: '1704584692313'
alias: recois temperature portail
description: ''
trigger:
- platform: webhook
allowed_methods:
- POST
- PUT
- GET
local_only: true
webhook_id: temperature_portail
condition: []
action:
- service: python_script.set_state
data_template:
entity_id: sensor.temp_portail_input
state: '{{ (trigger.query.temperature_portail | float) }}'
mode: single
relancer HA (ou les parties nécessaires)
l’appel depuis le déclencheur externe est lui à automatiser et utilise le webhook de HA avec la syntaxe:
http://IP_HA:8123/api/webhook/temperature_portail?temperature_portail=21.5