Files
ad_trident/docs/samsungtheframeasync.md
2026-10-17 22:46:44 +02:00

92 lines
4.3 KiB
Markdown

# 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 :
```yaml
module: samsungtheframe
```
par :
```yaml
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_standby` et `wakeup` sont 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 :
```yaml
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
```sh
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.