4.3 KiB
SamsungTheFrameAsync
Alternative asynchrone à apps/samsungtheframe.py. La classe reste
SamsungTheFrame et utilise les mêmes entrées, sorties, consignes, événements
de volume, services de réveil et fichier apps/theframe_token.txt.
Basculement manuel
Dans apps/global/homecinema.yaml, remplacer uniquement :
module: samsungtheframe
par :
module: SamsungTheFrameAsync
Conserver class: SamsungTheFrame. Revenir au nom de module précédent pour
restaurer l'ancienne implémentation. Ne pas lancer les deux apps simultanément :
elles piloteraient la même TV et les mêmes capteurs. Le YAML n'a pas été modifié
lors de l'ajout de ce module.
Fonctionnement
- Les callbacks AppDaemon transmettent les demandes à la boucle asyncio et retournent immédiatement, sans communication réseau avec la TV.
- Une connexion WebSocket Art reste ouverte tant que la TV est alimentée et que sa consommation dépasse le seuil. Un lecteur unique reçoit notifications et réponses, corrélées par identifiant de requête.
art_mode_changed,artmode_status,go_to_standbyetwakeupsont traités. Les notifications mettent à jour les capteurs sans attendre le prochain relevé de consommation. Leur disponibilité dépend du modèle et du firmware.- Une connexion télécommande distincte est ouverte à la première commande puis réutilisée. Les commandes sont sérialisées ; une touche maintenue est relâchée même si la transition est annulée.
- Une lecture Art de secours a lieu toutes les 60 secondes. Les fluctuations de consommation réveillent le moniteur sans multiplier ces lectures.
- Une perte réseau conserve les derniers états connus. Une consommation sous le seuil ou une prise explicitement éteinte confirme l'arrêt et ferme les connexions. Une consommation indisponible n'est pas assimilée à un arrêt.
- Après un échec de lecture, reconnexion avec attente progressive : 5, 10, 20, 40, puis 60 secondes. Les événements de consommation ne contournent pas cette attente en surveillance seule. Pendant une transition, cette attente est plafonnée à 2 secondes, y compris après une erreur de transition. Une nouvelle consigne raccourcit aussi une attente de reconnexion déjà en cours.
- Les cinq consignes sont conservées :
manual,art_mode,tv_off,hdmi,power_off. Une nouvelle consigne annule la transition précédente, y compris l'attente de 5 secondes avant coupure électrique. Une commande Power échouée n'est pas immédiatement rejouée : l'état est relu avant une nouvelle action. - Les répétitions de volume en attente expirent après une seconde ; la file est limitée à huit événements. Les échecs ne sont pas rejoués.
- À l'arrêt/rechargement, les tâches sont annulées et les connexions fermées.
Les sockets utilisent aiohttp, déjà fourni par AppDaemon. Aucun thread de
réseau supplémentaire n'est créé. Les seules opérations envoyées à un executor
sont la lecture et l'écriture du petit fichier de token.
Réglages facultatifs
Ces clés peuvent être ajoutées à l'app ; elles ne sont pas nécessaires au basculement :
network_timeout: 2 # secondes, connexion/autorisation et requêtes TV
reconnect_delay: 5 # attente initiale, doublée jusqu'à 60 secondes
transition_retry_delay: 2 # attente entre tentatives pendant une transition
fallback_refresh: 60 # intervalle de lecture de secours, en secondes
power_threshold: 35 # watts, même seuil que l'ancienne app
Le timeout s'applique à chaque opération, pas à une transition complète. Les
attentes de réveil/confirmation et l'appui long Power utilisent asyncio et
n'occupent pas les threads de callbacks AppDaemon.
Vérification
python -m unittest discover -s tests -p 'test_samsungtheframe_async.py' -v
Les tests simulent les messages et sockets TV : persistance, notifications, concurrence, délais, reconnexion, transitions et annulation. Ils ne contactent pas la TV réelle. La réception des événements et les commandes doivent encore être validées sur le téléviseur lors du basculement manuel.
Après allumage de la prise, la transition est revérifiée après 5 secondes ; après une commande de réveil, après 10 secondes (au lieu de 60). Les délais de confirmation après une touche et avant coupure électrique sont conservés.