Bonjour Hydro,
Excellente question Tu as bien cerné les différentes possibilités !
Dans le cas d’un package Constellation (Python ou .NET) a toi de voir quelle est la meilleur façon de faire. Quelques exemples :
- “HWMonitor” : interrogation des compteurs WMI toutes les x ms pour Push vers Constellation (interval à config dans les settings)
- WindowsControl : qui push l’état de la session Windows (session locké ou non) Push dès que l’état change (event sur le changement d’état au niveau de l’API WIndows)
- Nest : Push dès qu’un device Nest changent via l’API REST Streaming de Nest (le code est sur mon github pour l’exemple)
- Vera : la Vera est l’une des rares box Z-Wave a avoir une API REST en “long polling”, ainsi la requete est bloquée tant qu’il n’y a pas de modification! De ce fait, je push seulement les devices qui ont bougé sans devoir faire des requêtes en rafale
- Hue : par contre là, pas de possibilité de savoir si ca a changé : je suis obligé d’interroger toutes les secondes (bien que l’interval soit configurable dans les settings) l’API Hue pour push l’état des lampes !
Il faut donc “faire au mieux” pour concilier le besoin d’une donnée la plus fraîche possible (quel réactivité veut-on ?) versus les performances !
Dans le cas d’un service comme Nest ou Vera, les deux permettent cela, mais pas sur le Hue ! Mais comme je veux connaitre l’état de chaque lampe Hue en “pseudo temps reel” je suis obligé d’interroger constamment le service même si “c’est pas propre” !
Après pour un package type “Exchange” qui push mon calendrier dans Constellation ou “Google Traffic” qui push les itinéraires avec temps de trafic, je n’ai pas besoin d’une telle réactivité. Un “poll/push” toutes les 10 ou 15 minutes est suffisant !
Autre possibilité comme tu l’évoques : Pusher directement depuis le device ! Pour cela on crée un “Package Virtuel” comme je peux le faire avec les ESP (IR remote, capteur de luminosité ou autre présentés sur mon blog).
Les packages virtuels exploitent l’API REST de Constellation donc tu peux l’utiliser depuis n’importe où! Perso j’ai quelques scripts Powershell qui push des SO dans Constellation via un simple appel HTTP!
En son temps, j’avais fait un POC d’intégration de Domoticz dans Constellation! Comme il n’y a pas d’API en HTTP long polling, j’avais directement dans Domoticz, attaché un événement à chaque modification de device Z-Wave pour appeller l’API HTTP de COnstellation afin de mettre à jour le SO correspondant (évitant ainsi de poller constamenent l’API de Domoticz).
Comme tu le vois, il y a plein de façon de faire