mikael2235 Posté(e) le 1 août 2022 Signaler Posté(e) le 1 août 2022 Bonjour à tous, Je vous explique mon besoin, je cherche à gérer les cas d'erreurs sur une simple fonction call, afin notamment de detecter si un module non alimenté. fibaro:call(160, turnOn); --Gestion erreur if erreur then send notif KO else execute code OK end Je ne sais pas si j'ai été bien clair ! Je vous remercie d'avance pour votre aide. Mikael
Lorenzo Posté(e) le 1 août 2022 Signaler Posté(e) le 1 août 2022 Salut. Ton message est très clair. Tu voudrais essayer de faire un catch de l erreur. Peut être ici bas une piste? Pas encore vérifié mais peut être regarder ici : https://forum.fibaro.com/topic/20287-how-to-handle-errors-in-lua/ ou https://www.domotique-fibaro.fr/topic/14971-d%C3%A9tecter-les-erreurs-et-prot%C3%A9ger-lex%C3%A9cution-dun-script-lua-avec-pcall/
mikael2235 Posté(e) le 1 août 2022 Auteur Signaler Posté(e) le 1 août 2022 Il y a 3 heures, Lorenzo a dit : Salut. Ton message est très clair. Tu voudrais essayer de faire un catch de l erreur. Peut être ici bas une piste? Pas encore vérifié mais peut être regarder ici : https://forum.fibaro.com/topic/20287-how-to-handle-errors-in-lua/ ou https://www.domotique-fibaro.fr/topic/14971-détecter-les-erreurs-et-protéger-lexécution-dun-script-lua-avec-pcall/ Merci pour ton retour, J'ai bien vu ces liens et j'ai essayé avec pcall (exemple 5) mais sans succès. Je ne suis pas sur de ce que je fais non plus :-/
Lazer Posté(e) le 1 août 2022 Signaler Posté(e) le 1 août 2022 Tu ne peux pas, cette fonction fibaro:call() envoie l'instruction au module concerné, mais ne retourne rien, quel que soit le résultat de l'exécution de la commande. Il faut donc le faire de manière détourner, par exemple selon la séquence suivante (simple suggestion, il y a surement d'autres façon de procéder) : - fibaro:call() - attendre un certain temps avec sleep() ou settimeout() - aller lire le statut du module en question pour connaitre son état avec fibaro.getValue() ou encore api.get() qui te permettra d'aller récupérer toutes les propriétés contenues dans le JSON du module (par exemple dead, power, etc)
mikael2235 Posté(e) le 1 août 2022 Auteur Signaler Posté(e) le 1 août 2022 (modifié) Merci Lazer pour ces précisions. J'avais d'abord essayé avec la propriété dead, mais je ne comprend pas bien comment cela fonctionne car même avec un module débranché, il me renvoie dead : 0 donc pas vraiment fiable. aurais tu un exemple de code pour le json du module ? je ne connais pas ça ! En fait ce que je voudrais c'est par exemple récupérer le "Transfert OK" ou "Problème communication" qui s'affiche dans le module sur le dashboard !! Modifié le 1 août 2022 par mikael2235
Lazer Posté(e) le 1 août 2022 Signaler Posté(e) le 1 août 2022 La propriété dead doit refléter l’icône de ton module dans l'interface, donc je suppose qu'il n'est pas passé en nœud mort ? (icône grisée ou barrée sur HC2, je ne sais plus) Un module mort ne passe pas immédiatement dead, mais uniquement après quelques tentatives infructueuse de le joindre. Et c'est pire pour un module sur batterie, car il ne passe dead qu'après avoir écoulé le temps de son intervalle de réveil (qui peut être infini sur certains modules modernes...) Attention je suis sur HC3, il y a pas mal de petites différences dans le code LUA et l'API avec la HC2. Mais des exemples de code avec api.get() il y en a plusieurs sur le forum, tu les retrouveras facilement.
mikael2235 Posté(e) le 1 août 2022 Auteur Signaler Posté(e) le 1 août 2022 j'ai trouvé un exemple de code api.get complet, local Value=api.get("/devices/"..device[i].id) mais je voudrais savoir qu'elles sont les propriétés interrogeables pour que je puisse savoir si mon module est branché ?
Lazer Posté(e) le 1 août 2022 Signaler Posté(e) le 1 août 2022 Et bien c'est la propriété dead, comme mentionné.
mikael2235 Posté(e) le 2 août 2022 Auteur Signaler Posté(e) le 2 août 2022 finalement je vais utiliser les propriétés log + dead pour plus de fiabilité, avec ce code : --[[ %% properties %% events %% globals --]] id = 21 fibaro:call(id, "turnOn"); ser = fibaro:getValue(id, "dead") fibaro:debug(ser) log = fibaro:getValue(id, "log") fibaro:debug(log) ce qui me donne ce résultat : et la je vais pouvoir lire les status a chaque commande et savoir si il est off ou pas en lisant le log, sans attendre le call d'après ! [DEBUG] 06:43:04: 1 — module débranché [DEBUG] 06:43:04: SEND_COMMAND_TO_DEAD_DEVICE [DEBUG] 06:44:12: 0 — module rebranché [DEBUG] 06:44:12: [DEBUG] 06:44:33: 0 [DEBUG] 06:44:33: [DEBUG] 06:44:40: 0 — module débranché [DEBUG] 06:44:40: ZWave_Send_Failed [DEBUG] 06:44:54: 1 [DEBUG] 06:44:54: SEND_COMMAND_TO_DEAD_DEVICE
jojo Posté(e) le 5 août 2022 Signaler Posté(e) le 5 août 2022 je n'ai pas eu le courage de lire tous vos échanges, mais mon idée serait la suivante : On parle ici d'un module alimenté => faire un test si le module est mort ...
Messages recommandés