Sowliny Posté(e) le 10 juin 2020 Signaler Posté(e) le 10 juin 2020 Bonsoir à tous, je sèche... Je recherche le moyen de vérifier l'état (brachée au secteur, ou pas) d'une prise, en l'occurence une Aeon SmartSwitch. En effet, la fonction fibaro.getValue(id,"value") me renvoie "true" (ou "Off" selon le cas) même si la prise est débranchée du secteur (renvoi de son dernier état connu). Bien, mais le PAF est à zéro (Programmer Acceptance Factor)... Je recherche le moyen (au pire) de savoir si le module est connu comme "disconnected" dans la HC3. Si ça se trouve, c'est bête comme chou et je connais certainement la réponse, mais je boucle sans fin, malgré des recherches tous azimuts. Un p'tit coup de barre peut-être... Merci d'avance si quelqu'un peut m'aiguiller !
Lazer Posté(e) le 10 juin 2020 Signaler Posté(e) le 10 juin 2020 C'est loin d'être simple.... Le getValue() n'interroge pas le module, mais uniquement son dernier état connu dans la base de données de la HC3. Dans les grandes lignes, voici les 4 pistes que je te propose : oublier ton idée, le Z-Wave n'est pas fait pour ça... on ne doit pas "pinguer" un module en continu comme on le ferai sur un réseau IP, au risque de saturer le réseau Z-Wave si vraiment tu t'obstines : faire un "polling" du module, tu peux le forcer via l'API de la box (pour obtenir la méthode, tu fais F12 pour obtenir les outils de dev de ton navigateur, et tu regardes l'URL et les données envoyées au moment où tu cliques sur ce bouton dans la box) attendre quelques secondes au bout d'un certain temps, voire même d'un temps certain, si la box n'arrive pas à communiquer avec le module parce qu'il est débranché, elle le marque en dead (dans ses propriétés accessibles dans son JSON via l'API) lire cette valeur dead et faire ton scénario si le module est débranché se souvenir que mon premier conseil d'oublier ton idée était... une bonne suggestion si finalement tu persistes dans ton obstination, surtout ne tente pas de communiquer avec le module trop souvent.... idéalement il faut que ce polling soit au moins aussi lent que le polling global enregistré dans la box (et plus y'a de modules sur le réseau, plus le polling est allongé, voir supprimée (et hop, retour au point n°1 !!! )) 2
jojo Posté(e) le 11 juin 2020 Signaler Posté(e) le 11 juin 2020 si ton objectif final est de savoir si une prise est alimentée en courant, il existe ce module, qui en cas de perte et retour de courant (par association) peut agir sur un autre (l'éteindre ou l'allumer) et donc tu peux savoir s'il y a du courant
Lazer Posté(e) le 11 juin 2020 Signaler Posté(e) le 11 juin 2020 Et son topic unique : https://www.domotique-fibaro.fr/topic/4993-nodon-prise-intelligente-z-wave/
Sowliny Posté(e) le 11 juin 2020 Auteur Signaler Posté(e) le 11 juin 2020 (modifié) Merci à tous pour ces infos ! Mon idée de départ n'était pas bien sur de pinguer ce module à tout va, mais "simplement" de tester l'état "de vie" de ce module en cas de non-réponse à un ordre (turnOn/turn/Off) donné. J'effectue en cas de discordance entre l'état demandé (turnOn par exemple) et l'état résultant après l'émission de l'ordre, une boucle limitée à trois réitérations de cet ordre, à 3 secondes d'intervalle chacunes. Ca fonctionne bien si il y a discordance, mais si le module est H.S. (par exemple, ou non alimenté) ma fonction se basera donc sur l'état connu par la HC3. Je vais donc suivre le sage conseil de @Lazer et mettre cette fonction en veilleuse (j'ai visité aussi le lien sur la prise Nodon - intéressant). Je vais aussi suivre la piste du marquage en "dead" - et aussi celle du marquage "déconnecté" par la HC3. Ci-dessous, l'icône résultant de l'absence d'alimentation d'un FGK - même icône pour la prise Aeon SmartSwitch. Merci encore pour vos réponses ! Modifié le 11 juin 2020 par Sowliny eclaircissement des mes explications
Lazer Posté(e) le 11 juin 2020 Signaler Posté(e) le 11 juin 2020 Oui justement ça c'est l’icône d'un nœud mort = dead
jojo Posté(e) le 11 juin 2020 Signaler Posté(e) le 11 juin 2020 il traine sur le forum un VD qui détecte les modules morts
Sowliny Posté(e) le 11 juin 2020 Auteur Signaler Posté(e) le 11 juin 2020 Merci à toi, Lazer. Je reconnais humblement que j'ai encore (beaucoup) de lacunes (par exemple le json m'est étranger - mais je vais m'y mettre !). Je n'avais pas fait la relation "déconnecté" et dead - mais je pense que ça n'aurait pas tardé... .
Sowliny Posté(e) le 11 juin 2020 Auteur Signaler Posté(e) le 11 juin 2020 Merci Jojo ! Je vais de ce pas voir ce VD !
Lazer Posté(e) le 11 juin 2020 Signaler Posté(e) le 11 juin 2020 Je ne suis pas certain que le VD soit encore d'actualité, il date des tous débuts de la HC2.... l'API a pas mal évoluée depuis. Le JSON d'un module tu peux le récupérer via l'API grâce à l'URL suivante sur l'adresse IP de ta box (remplacer 150 par l'ID de ton module) : /api/devices/150 Tu récupères quelque chose qui ressemble à ça, avec la propriété "dead" qui nous intéresse (en bas de ma capture) : { "id": 150, "name": "Eco-Devices", "roomID": 219, "view": [ { "type": "json" } ], "type": "com.fibaro.powerSensor", "baseType": "com.fibaro.multilevelSensor", "enabled": true, "visible": true, "isPlugin": true, "parentId": 0, "viewXml": true, "configXml": false, "interfaces": [ "energy", "power", "quickApp" ], "properties": { "apiVersion": "1.1", "categories": [ "other" ], "dead": false, "deadReason": "", En LUA, tu peux aller récupérer tout le JSON grâce à api.get("/devices/150") ou directement la valeur qui t'intéresse via fibaro:getValue(150, "dead") Pour forcer un polling, comme dit c'est un peu plus technique, il faut utiliser les outils de dév de ton navigateur web pour récupérer l'appel qui est fait à l'API (ce n'est pas officiellement documenté) Par exemple je l'ai déjà fait dans une scène sur la HC2 ça ressemble à ça (il faut au préalable connaitre l'ID du module parent du module que tu veux interroger) : local postURL = 'http://127.0.0.1:11111/api/devices/' .. parentId .. '/action/poll' local httpClient = net.HTTPClient() httpClient:request(postURL, { success = function(response) if response.status == 200 or response.status == 202 then fibaro:debug("Poll device OK") else fibaro:debug('<span style="color:red;">Error : status='..tostring(response.status)..'</span>') end end, error = function(err) fibaro:debug('<span style="color:red;">Error : '..err..'</span>') end, options = { method = 'POST' } })
Messages recommandés