flamalex Posté(e) le 6 novembre 2022 Signaler Posté(e) le 6 novembre 2022 Bonjour à tous, j’aurai besoin de vos lumières sur les requêtes http, lancées depuis un script sur jeedom (ou NAS) vers la hc3. je lance (depuis jeedom) une requete http pour modifier la variable d'un QA, ça fonctionne très bien exemple: http://192.168.1.45/api/callAction?deviceID=182&name=setVariable&arg1=pluie_ds_lheure&arg2=oui je souhaite le meme genre de requete http mais pour modifier une VG qu'est ce que je dois modifer dans la ligne ci dessus (http pour modifier une variableQA ) pour que ca fonction pour une variable Globale (VG), une idée? je sais que ça va tourner autour de ceci http://192.168.1.45/api/globalVariables j'ai essayé des choses comme ceci mais rien à faire http://192.168.1.45/api/globalVariables?name=pluie_dans_lheure&value = non http://192.168.1.45/api/globalVariables?name=pluie_dans_lheure&value="non" http://192.168.1.45/api/globalVariables/"name":"pluie_dans_lheure","value":"non" http://192.168.1.45/api/globalVariables/{pluie_dans_lheure},"value":"non" Exemple: si je rentre ceci comme requete http://192.168.1.45/api/globalVariables/pluie_dans_lheure?"name":"pluie_dans_lheure","value":"non" reponse: {"name":"pluie_dans_lheure","value":"oui","readOnly":false,"isEnum":true,"enumValues":["non","oui"],"created":1667552153,"modified":1667552153} j'ai la meme reponse en mettant la requete http://192.168.1.45/api/globalVariables/pluie_dans_lheure
Lazer Posté(e) le 6 novembre 2022 Signaler Posté(e) le 6 novembre 2022 Quand tu ne sais pas et que ce n'est pas documenté, il faut regarder comment Fibaro fait, puisque toute l'interface Web de la HC3 passe par l'API HTTP. Dans ton navigateur, il faut utiliser les outils de développement, normalement accessibles par la touche F12, puis aller dans l'onglet Réseau. Ensuite tu fais ta modification de VG dans l'interface Web, et tu regardes en bas à quoi ressemble la requête, pour pouvoir le reproduire. Déjà on voit que c'est une requête de type PUT (et non pas GET), donc les arguments ne doivent pas être passés dans l'URL de la requête, mais dans les données associées. Après avoir cliqué sur la requête, dans la fenêtre en bas à droite tu as l'onglet Requête avec le détail des données envoyées : Et pour info, dans l'onglet Réponse tu peux voir ce qui est attendu comme retour : Note le petit switch Texte brut qui permet de basculer entre la vue formatée du JSON et l'affichage en texte brut. Dernière remarque : La méthode GET c'est pour la lecture d'une variable globale La méthode POST c'est pour la création d'une variable globale, donc uniquement la première fois La méthode PUT c'est pour la modification d'une variable globale, donc toutes les fois suivantes La méthode DELETE c'est pour la suppression d'une variable globale Tout cela est conforme au standard CRUD mis en oeuvre de la plupart des API REST : https://fr.wikipedia.org/wiki/CRUD 1
jojo Posté(e) le 6 novembre 2022 Signaler Posté(e) le 6 novembre 2022 @Lazer, merci pour ce petit cours résumé (comme je les aime) sur F12 et les types de requêtes. mais je reste toujours avec la question de l'authentification, même en local, la HC3 requiert une authentification, ici pour l'utilisation générale de l'API, ce devrait être le compte admin ?
Lazer Posté(e) le 6 novembre 2022 Signaler Posté(e) le 6 novembre 2022 Alors là je ne sais pas.... comme je n'ai jamais modifié une variable globale via l'API depuis une machine externe, oui bien sûr il faudra s'authentifier, mais je ne sais pas s'il faut utiliser le compte admin, ou bien si un autre utilisateur peut le faire. Le mieux c'est de tester, tu seras vite fixé. Dans ma capture d'écran on voit que le code de retour attendu c'est 200, donc si c'est un code de la famille 4xx, ça sera surement une erreur d’authentification de type droits insuffisants.
flamalex Posté(e) le 6 novembre 2022 Auteur Signaler Posté(e) le 6 novembre 2022 (modifié) Oui on revient au code de @Steven en 2015 pour la hc2 * ---------------------------------------------- * Modifie une variable existante * ---------------------------------------------- **/ function modify(name, value) { var payload = "{\"name\" : \"" + name + "\", \"value\" : \"" + value + "\"}"; var url = "http://" + HC2_IP + "/api/globalVariables/" + name; var options = {"headers": {"Authorization": "Basic " + Utilities.base64Encode("admin:pass007")}, "Content-Type": "application/json", "method":"put","payload": payload}; UrlFetchApp.fetch(url, options); } // modify() dans le même esprit j’utilise dans un arduino qui vient modifier des VG dans la hc3, après avoir relevé les données de l’anémomètre. d’une machine extérieure type jeedom, il faut passer en php et lancer script pour arriver au même résultat. Modifié le 9 novembre 2022 par flamalex
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 (modifié) Bonjour, de l'exterieur, une requete http fait la mise à jour d'une variable globale toutes les x secondes (exemple 2 secondes) puis je viens chercher cette VG à chaque changement de valeur (GEA -1) pour l'afficher dans un QA ma HC3, n'est pas trop chargée pour le moment, puisque j'en suis toujours à la phase découverte le fait d'envoyer requete sur HC3 toutes les x secondes et que le changement de valeur soit traité en instantané, cela a t il un impact sur la fiabilité de la HC3 (dans le temps) est ce déconseillé ? function config(GEA) -- =================================================== -- Configuration générale -- =================================================== GEA.debug = false GEA.portables = {57} end function setEvents() -- ========================================================== -- Règles utilisateur -- ========================================================== local id = { QA_PUISS_INSTANTANE_PINCE1 = 185 } GEA.add ({"Global!", "PuissancePince1", 0}, -1, "",{{"QuickApp", id["QA_PUISS_INSTANTANE_PINCE1"],"actualise"}}) end Modifié le 9 novembre 2022 par flamalex
jojo Posté(e) le 9 novembre 2022 Signaler Posté(e) le 9 novembre 2022 je vois que c'est pour dces pinces ampérométriques. J'en utilise également pour monitorer le courant global de ma mison et faire du délestage (GEA = -1) de ma PAC si nécessaire. Mais j'ai des pinces Z-Wave (AEON) qui remonte l'info (A) toutes les 2 sec. Ca va très bien. Alors, je me pose la question, pourquoi passer par Jeedom ?
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 Lol non jojo jeedom c’est pour la pluie de meteo france 1h avec un arduino je gère l’anémomètre et ici pinces, transfo tension.
Lazer Posté(e) le 9 novembre 2022 Signaler Posté(e) le 9 novembre 2022 Il y a 6 heures, flamalex a dit : le fait d'envoyer requete sur HC3 toutes les x secondes et que le changement de valeur soit traité en instantané, cela a t il un impact sur la fiabilité de la HC3 (dans le temps) Le déclenchement instantané n'a aucun impact sur l'usure (c'est juste un CPU qui travaille), mais en revanche les écritures (modification de variable globale) ça use la mémoire flash. Après, est-ce qu'en pratique la HC3 va mourir prématurément, c'est difficile à dire.... je pense qu'il faudrait vraiment y aller comme un goret pour cramer la flash, car le "disque" interne est comme un SSD, avec tous les algorithme de gestion de l'usure, répartition des écritures, etc, comme dans un PC normal (ou un téléphone, c'est pareil maintenant). Ce qui n'est pas le cas d'une carte mémoire SD ou d'une clé USB (on se souvient de la clé USB recovery de la HC2 qui cramait toujours en premier)
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 oui c'est vrai, comme la SD du jeedom aussi mais ici, si j'ai bien compris c'est bon (ok c'est le CPU qui encaisse) à la fin, je devrai avoir 8 ou 10 VG qui seront ecrites toutes les 2 secondes (allé au pire 1 seconde) par un arduino (via requete http)
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 (modifié) ah oui j'oubliais sur ma ligne {"Global!", "PuissancePince1", 0}, -1, le "!" apres Global, veut bien dire "different de" c'est bien ça? ( si je note Global+ le symbole +, c'est superieur uniquement ou superieur ou egal?) ici 0, mais alors si j'ai zero, il ne declenchera (-1) pas ? existe t il une alternative type "" ou "_" ? (quelque chose à mettre à la place de 0, ou un superieur ou egale devant globale) merci pour vos reponses Modifié le 9 novembre 2022 par flamalex
Lazer Posté(e) le 9 novembre 2022 Signaler Posté(e) le 9 novembre 2022 Le CPU embarqué a 4 cœurs, ce n'est vraiment pas un problème sur la HC3, elle peut encaisser. Perso avec ma box pas mal chargée (modules Z-Wave et QuickApps), ça oscille entre 3 et 15%, donc il reste de la marge. Pour les écritures, 10 VG toutes les 2 secondes.... dis toi qu'avec certains modules Z-Wave type Wall Plug ça peut être bien plus que ça... Pour GEA, tu peux résoudre le problème avec une comparaison {"Global+", "Puissance", -1} Comme ça il déclenchera tant que la puissance varie en étant supérieure strictement à -1, ce qui sera toujours le cas. Par contre... plusieurs déclenchements de GEA par seconde, tu nous diras ce que ça donne, niveau charge CPU ça va être intéressant à observer... en espérant que tu n'aies pas des latences de fou.
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 Il y a 2 heures, jojo a dit : je vois que c'est pour dces pinces ampérométriques. J'en utilise également pour monitorer le courant global de ma mison et faire du délestage (GEA = -1) de ma PAC si nécessaire. Mais j'ai des pinces Z-Wave (AEON) qui remonte l'info (A) toutes les 2 sec. Ca va très bien. Alors, je me pose la question, pourquoi passer par Jeedom ? J’avais pensé à l’aeon en effet, mais j’avais l’arduino qui tournait que pour l’anémomètre il me manquait juste 2 pinces et 1 mesure de tension.
flamalex Posté(e) le 9 novembre 2022 Auteur Signaler Posté(e) le 9 novembre 2022 (modifié) le GEA en RUN uniquement pour ce declenchement passe de 4% à 9% (et ma box est vide pour le moment) ça va craindre, apres la latence sur le reseau, si c'est de cette latence la dont tu fais reference, ras pour le moment bien vu le -1 pour le Global+ thx Modifié le 9 novembre 2022 par flamalex
Lazer Posté(e) le 9 novembre 2022 Signaler Posté(e) le 9 novembre 2022 Non latence de GEA.... si trop de déclenchement instantanés, le temps de traiter les règles, ça ne sera plus instantané... tu pourras mesurer la latence, ça risque de dépasser la seconde à un moment donné... selon le nombre de règles. Peut être qu'il sera judicieux de faire plusieurs instances GEA pour limiter les temps de traitement. Comme à l'époque sur HC2 firmware v4.
flamalex Posté(e) le 10 novembre 2022 Auteur Signaler Posté(e) le 10 novembre 2022 Ah oui, j’ai un GEA « energy » spécifique pour cette application « monitoring photovoltaïque » et un GEA « Alarme » spécifique pour mes déclenchement de barrières et capteurs optex (push IPX) puis la gestion de l’ alarme visonic via ipx je fais bien de séparer les GEA
jojo Posté(e) le 10 novembre 2022 Signaler Posté(e) le 10 novembre 2022 je m'en sort avec 1 GEA et des centaines de règles ...
Lazer Posté(e) le 10 novembre 2022 Signaler Posté(e) le 10 novembre 2022 Je n'ai peut être pas été clair Jojo, mais ce n'est pas tant le nombre de règle qui compte que la fréquence des déclenchements instantanés (trigger) Chaque trigger, c'est une instance de GEA qui démarre, filtre les règles avec -1, analyse les règles avec -1, et prend éventuellement les actions correspondantes aux règles qui matchent. Si tu as 10 triggers par seconde, ça ne va pas bien se passer. A l'inverse, si tu as 500 règles, dont 50 règles avec trigger, et que les trigger se déclenchent disons 1 fois toutes les 5 minutes, alors il n'y a aucun souci. 1
flamalex Posté(e) le 10 novembre 2022 Auteur Signaler Posté(e) le 10 novembre 2022 oui sur HC2, j'etais déjà obligé de faire plusieurs GEA, pcq bcp de trigger -1 si tout sous le meme GEA, il est vrai, comme l'expliquait Lazer, que l'on pouvait sentir une "hésitation" une latence ici je découpe en plusieurs GEA par domaines qui ne devraient pas se télescoper
jojo Posté(e) le 10 novembre 2022 Signaler Posté(e) le 10 novembre 2022 mon intuition de réserver les trigger (-1) à l'indispensable de l'instantané, n'tait donc pas si stupide : le reste (et donc beaucoup) est avec une durée de 0. Je trouve sympa d'avoir tout centralisé en un endroit, car il aura toujours un cas où une règle aurait de bonnes raisons de se trouver dans 2 GEA. Alors tant que c'est ok, ...
jang Posté(e) le 13 novembre 2022 Signaler Posté(e) le 13 novembre 2022 Le 11/10/2022 à 9:36 PM, Lazer a dit : I may not have been clear Jojo, but it's not so much the number of rules that counts as the frequency of instantaneous triggers (trigger) Each trigger is an instance of GEA that starts, filters the rules with -1, analyzes the rules with -1, and possibly takes the actions corresponding to the rules that match. If you have 10 triggers per second, it's not going to go well. Conversely, if you have 500 rules, including 50 rules with triggers, and the triggers fire say once every 5 minutes, then there is no problem. For a given event it becomes <time to select relevant rule(s)> + <time to execute rule(s)> time-to-execute may be hard to do something about, but If you have a lot of trigger rules, time-to-select will increase, even if the event doesn't trigger any rule at all. It could be optimized by some smart hash-function with the event as the key and possible matching rules as the value, reducing the number of rules needed to be searched through and filtered. Another thing about GEA as I understand it, is that it runs the non-trigger rules every 30s. I guess that every 30s then there is a peak when all rules evaluate their tests - a peak that increase with the number of rules? Here again, and it's a bit more complicated, one could analyze the rule tests when the rules are defined to see what events they depend on. ...and then only invoke the rules that have tests that depends on what events have happened the last 30s. (treating also time as an event...) 1
Messages recommandés