Bonjour,
Est-il possible d’utiliser des fonctions python avec Home assistant ?
Je souhaiterais pouvoir déterminer certaines valeurs de sensor en utilisant les valeurs de certains sensors comme variables dans une fonction.
Par exemple:
> import math as m
> def fonction(sensor_temperature_1, sensor_temperature_2):
> calcul = m.log(sensor_temperature_1) + m.log(sensor_temperature_2)
> return calcul
SI c’est réalisable, avez-vous une direction à me donner ? (python script, etc…)
Je vous remercie par avance.
Ma configuration
System Information
version
core-2024.7.3
installation_type
Home Assistant OS sous PROXMOX
dev
false
hassio
true
docker
true
virtualenv
false
python_version
3.12.4
os_name
Linux
os_version
6.6.33-haos
arch
x86_64
timezone
Europe/Paris
___
vincen
Juillet 20, 2024, 8:38
2
Salut
Pyscript ne ferait pas l’affaire ? cela te permet d’utiliser Python dans des automations: GitHub - custom-components/pyscript: Pyscript adds rich Python scripting to HASS
Vincèn
Salut @vincen ,
Effectivement, j’avais identifié au moins 2 solutions:
Faire une intégration « maison »
Utiliser Pyscript
J’ai jeté un oeil pour l’intégration. La structure est compréhensible mais je m’y perd, je vais potasser quelques exemples.
J’ai finalement utilisé Pyscript avec 3 étapes:
Création d’un template sensor
C’est le sensor qui va recevoir la valeur calculée.
- name: NOM_TEMPLATE_SENSOR
unique_id: NOM_TEMPLATE_SENSOR
unit_of_measurement: "UNITE_TEMPLATE_SENSOR"
state: "{{ states('sensor.NOM_TEMPLATE_SENSOR') }}"
Ajout d’un fichier .py avec ma fonction dans le dossier /config/pyscript
#Import des modules éventuellement nécessaires
import math as m
#Déclaration des variables éventuelles
C=200
#La fonction
@service
def NOM_FONCTION(VARIABLE_UTILISEE=None):
# Mon calcul, ici un exemple
resultat = m.exp(VARIABLE_UTILISEE+C)
# J'écris la valeur dans le sensor de Home Assistant
state.set("sensor.NOM_TEMPLATE_SENSOR", resultat)
Ajout de l’automatisation qui permet de faire le calcul dès que VARIABLE_UTILISEE change
- id: ...
alias: "Calculer sensor NOM_TEMPLATE_SENSOR"
description: "..."
trigger:
- platform: state
entity_id: sensor.VARIABLE_UTILISEE
action:
- service: pyscript.NOM_FONCTION
data:
VARIABLE_UTILISEE: "{{ states('sensor.VARIABLE_UTILISEE') }}"
1 « J'aime »