Aller au contenu

jjacques68

Membres confirmés
  • Compteur de contenus

    4 346
  • Inscription

  • Dernière visite

  • Jours gagnés

    39

Tout ce qui a été posté par jjacques68

  1. jjacques68

    Capteur Http Eedomus -> HC3

    hé bé enfin
  2. jjacques68

    Capteur Http Eedomus -> HC3

    punaise oui et maintenant ? success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", json.encode(data.state)) self:debug("any_on = ", data.state.any_on) self:debug("all_on = ", data.state.all_on) end,
  3. jjacques68

    Capteur Http Eedomus -> HC3

    success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", json.encode(data.state)) end,
  4. jjacques68

    Capteur Http Eedomus -> HC3

    success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) local data = json.decode(response.data) self:debug("1 = ", data.state) end, et maintenant ?
  5. jjacques68

    Capteur Http Eedomus -> HC3

    ah ! et maintenant ? success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) self:debug("1 ", response.data.state) end,
  6. jjacques68

    Capteur Http Eedomus -> HC3

    roah punaise c'est frustrant, on est vraiment pas loin... comme dis, juste un problème de syntaxe, essaye dans le success : success = function(response) self:debug("response status:", response.status) self:debug("headers:", response.headers["Content-Type"]) self:debug("1 ", response.data) local data = json.decode(response.data) self:debug("2 ", data) end,
  7. Hello tout le monde ! j'utilise depuis le début de la HC3 l'API "debugMessages", afin de récupérer les messages (debug, trace, warning, error) pour les insérer en base. Je me suis rendu compte que je loupais de temps en temps des infos. Voici le panel de l'API : alors il faut savoir que si on met rien dans le paramètre "offset" il nous retourne que les 30 derniers... (d'où mes loupés... ... ...) En fait, je souhaite tout simplement, à chaque fois que j'interroge l'API, récupérer tous les messages depuis la dernière interrogation. Là j'arrive à faire ce que je veux avec : local MonContenu = api.get("/debugMessages?from="..self.lastCheck.."&last=0&offset=200").messages Mais j'ai du faire une usine à gaz de code pour arrivé à mes fins : A chaque boucle, je mémorise le timestamp du 1er message ainsi que son ID (attention le premier message est le plus récent) ensuite pour la prochaine interrogation, j'utilise le paramètre "from" dans lequel je lui glisse le memo du timeStamp précédent. ça marche très bien, sauf qu'il m'inclus dans la requête, CE memo du timeStamp (c'est clairement stipulé !! - younger than or equal) Donc j'ai des doublons maintenant. j'ai mis le paramètre "last" à 0. Sa définition est pas très clair... et le paramètre "offset" à 200. Le valeur -1 qui m'intéresserait ne marche pas. il comprends "1" !! Donc en français ça donne : je récupère les 200 derniers nouveau messages depuis le timeStamp mémorisé. et pour virer les doublons, si l'ID du message en en cours <= l'ID mémorisée alors je l'oublie. Mais ce serait tellement plus simple de pouvoir récupérer les messages dont l'ID est supérieur à la valeur donnée !!! Ce que devrait faire le paramètre "last", sauf que si on lui donne une valeur, il renvoie les messages inférieurs à cette valeur !!! Je me plante complètement de raisonnement, où y a des loups cachés qqpart ?? Ensuite quand on observe le JSON de réponse, il y a cette info : Quelqu'un a une idée de ce que c'est ? C'est un ID c'est sûr, mais je n'arrive jamais à voir le message correpsondant à cet ID ?? merci pour vos conseils !!! PS pour ceux que ça intéressent voici le code de la fonction dans mon QA : function QuickApp:Check() if self.properties.value == true then --recupère les data de l'API local MonContenu = api.get("/debugMessages?from="..self.lastCheck.."&last=0&offset=200").messages --pour chaque ligne for MaLigne = 1, #MonContenu do --si on trouve des ID inférieur au mémo alors on oublie (= doublon) if MonContenu[MaLigne].id <= self.memoID then break end --créé la chaine pour envoyer sur la socket local MaData = os.date("%d/%m/%Y %H:%M:%S", MonContenu[MaLigne].timestamp)..";".. MonContenu[MaLigne].id..";".. MonContenu[MaLigne].type..";".. MonContenu[MaLigne].tag..";".. json.encode(MonContenu[MaLigne].message) --l'envoie en base fibaro.call(487,"AddElement", "LOG;"..MaData) --envoi des erreur par mail si option activée if MonContenu[MaLigne].type == 'error' and self:getVariable("SendError") == "1" then fibaro.call(457, "SendMail", MaData) end end --mémorise les infos pour la prochaine boucle (l'élément 1 du tableau sera le dernier élément lors de la prochaine boucle) self.lastCheck = MonContenu[1].timestamp self.memoID = MonContenu[1].id end --bouclage setTimeout(function() self:Check() end, tonumber(self.TimeLoop)) end
  8. jjacques68

    QA Réveil - conseils

    J'ai bien lu tes explications. Je comprends la notion de class et d'héritage, d'instanciation, ... Mais pas évident de faire la parallèle sur la HC3 ! avec ce que du dis et ce que j'imagine, je dirais (on va voir si j'ai compris qqch ) 1ère couche : on a une class principale "Fibaro" (qui inclut des "composants" comme math, json, string, fonction spécifiques à Fibaro, ...) 2ème couche : une class "QuickApp" qui hérite de "Fibaro" (avec des fonctions, variables propres au QA en plus) qu'on utilise quand on créé un QA simple 3ème couche une class "QuickAppChild" qui hérite de "QuickApp" qu'on utilise pour les QA avec Child ou plutôt pour les Child des QA On pourrait pas créer une autre class QuickAppChild ou encore QuickApp ? En les appelant autrement biensûr... (j'en vois pas l'intérêt, mais ce serait possible ?) et ça me fait rebondir sur ton QA qui permet de lister les variables, fonctions et objects disponibles. Ce sont des éléments de la class QuickApp alors ? Les variables sont les attributs, les fonctions sont les méthodes ? où on est encore une couche plus haut ? vu qu'on retrouve des similitudes avec les scènes d'ailleurs les scènes se placent où dans tout ça ? merci d'avance !!
  9. J'ai fait le test pour les QA en version 5.061.36, et la seule chose en plus est dans les objets : net.UDPSocket => userdata net.WebSocketClient => userdata net.WebSocketClientTls => userdata et je pense que ça date d'avant cette mise à jour...
  10. Je sais pas, aussi étrange que cela puisse paraitre, mes boutons de backup local sont grisés !!!! EDIT : de nouveau fait mon boulet, ils sont grisés car j'avais déjà 3 backup local stockés dans la HC3. Je confirme comme @Krikroff, l'option est sur les 2 types.
  11. ah zut, faut le faire au moment du backup... @Lazer ? va falloir que tu modifie le script de backup auto pour tenir compte de cette option non ? vais me faire envoyer promener, je le sens...
  12. c'est où ça quelqu'un l'a vu ?
  13. Je viens de faire cette mise à jour, bon mon vieux !! c'était LA-BO-RIEUX !!!!! Mise à jour, assez rapide. Après don redémarrage, panique complet. Tous mes QA qui utilisent les socket ehternet = tentative de connexions en boucle, sans respecter le timeout de 3s que j'ai mis en place. Reboot de la HC3. ça a mis trois plomb. Socket OK. Moteur Z-wave a mis plus de 10 minutes à se mettre en route !! CPU à 100 % un core après l'autre pendant ces 10 minutes. et tout d'un coup c'est ok. On dirait qu'elle est plus réactive ? ou c'est une impression ? Je le constate à l'usage du CPU...
  14. jjacques68

    QA Réveil - conseils

    oh punaise ! il va falloir que je lise ton explication plusieurs fois !! merci pour ta patience !!
  15. si si tout à fait, dans mon cas précis, j'ai qu'un seul type de child, les binarySensor...
  16. jjacques68

    QA Réveil - conseils

    Je me suis rendu compte pendant mes essais, que commencer un fichier avec class 'WAKEUP' (QuickAppChild) function WAKEUP:MyFunction() [...] end avait visiblement le même effet que si j'avais fait WAKEUP = {} function WAKEUP:MyFunction() [...] end Dans les 2 cas, Les fonctions sont accessibles dans le main en faisant : WAKEUP:MyFunction() C'est normal ça ?? est-ce la même chose ? D'ailleurs visiblement, on est pas obligé d'utilisé une class ou un tableau de fonctions dans un fichier ! On peut simplement y déplacer des fonctions du main ! Ce que j'ai fait pour le code des actions sur les boutons. Histoire de pas polluer le code dans le main... ça permet de ranger un peu la structure du code... Ne suis-je pas encore entrain de détourner son l'utilisation ? ça reste encore un peu obscure tout ça... il manque une sorte de représentation graphique de la structure d'un QA... Ce qui aiderait à mieux comprendre je pense. Bien que la petite phrase de @Lazer : a résonné tout la journée dans la tête et m'a ouvert pas mal les yeux @jang : I have read your link more and more. I don't understand anymore with the "shared" sorry, it's too strange for me
  17. oui c'est vrai, c'est que j'ai fait dans un autre QA d'ailleurs... Mais y avait plus de Child aussi... Mais c'est lourd...
  18. les QA concernés sont ceux de mes réveils : le QA parent : Mais ya quand même un problème avec la gestion de ces foutus ID des Child... Dans le QA Parent, on voit les 2 boutons Set Left et Set Right. Le code derriere ces boutons est le suivant : function QuickApp:BTN_SET_LT(event) self:setWakeup(731) end function QuickApp:BTN_SET_RT(event) self:setWakeup(732) end C'est nul !! Si je supprime les Child et que je les recréé, il faut que j'aille changer l'ID de ces 2 boutons, sinon, ça marche plus... C'est pourri !! Si on pouvait avoir une listebox dans les QA, on alimenterait dynamiquement cette listebox avec la liste des Child, et il suffirait de sélectionné le child que l'on veut régler, et le tour est joué !!
  19. ben j'ai beau faire des essais dans tous les sens, ça marche bien ! J'ai ajouter la possibilité de décaler l'heure stockée dans la variable du QA, une sorte d'offset...
  20. jjacques68

    QA Réveil - conseils

    thanks @jang, I will read it
  21. Que pensez-vous de ce contournement pour mon histoire de déclenchement de scène sur une date/heure paramétrable ? Du coup : Plus aucunes scènes. J'ai un QA principal qui tourne en boucle toutes les minutes. Dans ce QA, je lui donne une liste de QA, qui contiennent une action à effectuer à une heure particulière. Dans cette liste, je précise l'ID du QA, le nom de la variable contenant l'heure, et la fonction à exécuter, A chaque boucle, je vais lire les variables des QA (fonction GetVariableQA() de @Lazer ->merci !!) Si l'heure courante = l'heure stockée dans la variable alors j'execute la fonction précisée. ça à l'aire de bien marcher... Que ce soit pour des QA Parents ou Child... Bon la c'est grossier, mais c'est pour tester le principe ! Si je modifie l'heure de déclenchement dans un QA, ça le prends très bien en compte. Si vous avez de meilleurs idées ?? elles sont bienvenues !! function QuickApp:onInit() self:debug("onInit") self.timeLoop = 60*1000 --Liste des QA ayant une fonction à déclencher à une horaire précise self.listTrigger = { {id=731, var="MaVarX", func="MaFonc1"}, {id=732, var="MaVarY", func="MaFonc2"}, } self:main() end --[[------------------ FUNCTION MAIN --------------------]] function QuickApp:main() --pour chaque QA de la liste for _, myDevice in ipairs(self.listTrigger) do --récupère l'heure de déclenchement dans le QA local QA_Time = lib:GetVariableQA(myDevice.id, myDevice.var) --si l'heure courante = l'heure du QA, on execute la fontion du QA if os.date("%H:%M", os.time()) == QA_Time then fibaro.call(myDevice.id, myDevice.func) end end --boucle de rafraichissement pour la lecture des variables des QA setTimeout(function() self:main() end, self.timeLoop) end
  22. jjacques68

    QA Réveil - conseils

    j'ai relu plusieurs fois cette discussion... c'est vachement intéressant !! c'est marrant justement, pour les notifications, moi j'ai un QA spécifique. Avec tout dedans (Push, Mail, TTS, Prowl) Pour envoyer une notification je fais appel à une méthode de ce QA avec par exemple : fibaro.call(ID_QA, "sendPush", "blablabla") ça fonctionne très bien. Mais la question se pose : est-il plus efficace (performance, réactivité, maintenabilité, ...) d'appeler une méthode d'un QA ou d'intégrer le code dans d'envoi dans un fichier comme tu le fais ?
  23. jjacques68

    QA Réveil - conseils

    je développe énormément sous Windev au boulo... Qui est un "langage" si je peux dire ainsi, très très très très évolué. La POO est tout à fait réalisable avec, mais j'avoue resté à "l'ancienne". En même temps, leur système de base de données intégré (= HFSQL qui fonctionne à merveille) ne nous pousse pas à faire de la POO... Même pour des très gros projet, ça passe tout seul. Après je développe des applications. Pas des applications, pour créer des applications Là la POO serait plus que obligatoire...
  24. jjacques68

    QA Réveil - conseils

    oui la tu vas trop vite pour moi Je viens juste de comprendre que tout était rangé dans des tableaux, Je me rends compte que moi-même il m'arrive de faire des tableaux de fonctions, mais ça s'arrête là... Je découvre cette manière de coder. C'est un vrai état d'esprit ! on sort du codage conventionnel, séquentiel, procédural, ... Faut s'y faire...
  25. jjacques68

    QA Réveil - conseils

    ouiiiii j'avais vu ça ! Avais pas tout compris, mais avec ce que tu viens de dire, ça vaut le coup de s'y intéresser a nouveau !
×
×
  • Créer...