Files
devmel_hass_airsend-addon/addons/airsend/sync_hass_states.php
T

46 lines
1.9 KiB
PHP

<?php
require_once dirname(__FILE__) . "/hassapi.class.php";
// --- Configuration (Identique à votre setup actuel) ---
$SUPERVISOR_TOKEN = @getenv("SUPERVISOR_TOKEN");
$HASS_HOST = @getenv("HASS_HOST");
$HASS_TOKEN = @getenv("HASS_TOKEN");
// ... [Logique de construction de $api identique à celle de votre script principal] ...
if ($api->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
);
}
}
}