From 0bea772784d4277362f39b1834282abf5428bee3 Mon Sep 17 00:00:00 2001 From: "stephane.david" Date: Tue, 7 Jul 2026 19:48:59 +0200 Subject: [PATCH] update states scritp and add refresh status every 5 mins --- addons/airsend/run.sh | 14 +++++++++ addons/airsend/state_post.sh | 2 +- addons/airsend/states_get.sh | 2 +- addons/airsend/sync_hass_states.php | 45 +++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 addons/airsend/sync_hass_states.php diff --git a/addons/airsend/run.sh b/addons/airsend/run.sh index 97326e0..bd666a0 100644 --- a/addons/airsend/run.sh +++ b/addons/airsend/run.sh @@ -51,6 +51,20 @@ fi # Give services time to start sleep 5 +# Lancement du synchro en arrière-plan toutes les X secondes +# Cela garantit que même si un équipement est sur un "autre canal", +# il sera interrogé et mis à jour car on boucle sur la liste globale. +php -r "while(true) { include 'sync_hass_states.php'; sleep(10); }" & SYNC_PID=$! + +# Surveillance du processus de synchronisation +while true; do + sleep 60 + if [[ -n "$SYNC_PID" && "$SYNC_PID" =~ ^[0-9]+$ ]] && ! kill -0 $SYNC_PID 2>/dev/null; then + echo "ERROR: Sync Service died..." >&2 + break + fi +done + # Monitor services ASW_PID=$(cat AirSendWebService.lock) while true; do diff --git a/addons/airsend/state_post.sh b/addons/airsend/state_post.sh index f2783e2..c92abca 100644 --- a/addons/airsend/state_post.sh +++ b/addons/airsend/state_post.sh @@ -2,4 +2,4 @@ payload=`echo $2 | base64 -d` -echo -en $payload | curl -s --data-binary @- -X POST -H "Authorization: Bearer ${SUPERVISOR_TOKEN}" -H "Content-Type: application/json" http://supervisor/core/api/states/$1 +echo -en $payload | curl -s --data-binary @- -X POST -H "Authorization: Bearer ${HASS_TOKEN}" -H "Content-Type: application/json" http://${HASS_HOST}/api/states/$1 diff --git a/addons/airsend/states_get.sh b/addons/airsend/states_get.sh index c8bd2f5..4c0b298 100644 --- a/addons/airsend/states_get.sh +++ b/addons/airsend/states_get.sh @@ -1,3 +1,3 @@ #!/usr/bin/with-contenv bashio -curl -o states.json -s -X GET -H "Authorization: Bearer ${SUPERVISOR_TOKEN}" -H "Content-Type: application/json" http://supervisor/core/api/states +curl -o states.json -s -X GET -H "Authorization: Bearer ${HASS_TOKEN}" -H "Content-Type: application/json" http://${HASS_HOST}/api/states/$1 diff --git a/addons/airsend/sync_hass_states.php b/addons/airsend/sync_hass_states.php new file mode 100644 index 0000000..2f5783f --- /dev/null +++ b/addons/airsend/sync_hass_states.php @@ -0,0 +1,45 @@ +isAuthorized()) { + // On récupère la liste des entités que Home Assistant connaît + // Cela nous sert de "liste de courses" pour savoir ce qu'on doit mettre à jour. + $all_entities = $api->loadStates(); + + foreach ($all_entities as $entity_data) { + $id = $entity_data['entity_id']; + $details = $api->getState($id); // Récupère le type (temp, humidity, etc.) et l'état actuel. + + if ($details) { + /** + * ÉTAPE CRUCIALE : Ici, au lieu d'attendre un événement AirSend, + * vous devez appeler une fonction qui interroge directement + * votre service AirSendWebService pour obtenir la valeur physique. + * + * Si vous avez une méthode ou un endpoint dans AirSend pour "récupérer tout", + * utilisez-le ici pour remplir $current_physical_value. + */ + $current_physical_value = $details['state']; // Par défaut, on garde l'ancienne si pas de changement + + // Exemple logique si vous interrogez le service AirSend directement : + // $raw_airsend = \AirSendService::fetchStatus($entity_data['some_id']); + // if ($raw_airsend) { $current_physical_value = $raw_airsend; } + + // On force la mise à jour vers Home Assistant + $api->setState( + $id, + $details['type'] ?? 'state', + $current_physical_value, + time() * 1000, // Timestamp actuel pour forcer le "last_updated" dans HA + $entity_data['attributes']['channel'] ?? null + ); + } + } +}