Aller au contenu

Lazer

Administrateur
  • Compteur de contenus

    26 095
  • Inscription

  • Dernière visite

  • Jours gagnés

    1 303

Tout ce qui a été posté par Lazer

  1. Partage ton code et un maximum de détail, les logs, etc Tu peux faire ça dans ton topic d'origine.
  2. OK Donc il faut que tu imbriques les 2 fonctions l'une dans l'autre (en vertu de ce qui a été dit... le code DOIT continuer dans la fonction success() Quand tu décodes le tableau dans la première fonction success() : local jsonTable = json.decode(response.data) Juste après tu modifies la valeur : jsonTable.zones[1].state = "1" Puis tu donnes l'ensemble (avec json.encode()) dans les options de ton second appel http : options = { method = 'POST', data = json.encode(jsonTable) } })
  3. Euh... mais en fait tu récupère un JSON via une requête GET, tu veux modifier une valeur, et le réinjecter dans une requête POST, c'est ça ?
  4. Lazer

    Panneau d'évènements

    Donc c'est bon alors ? Par contre quand il y a beaucoup d'événements, le panneau devient inutilisable... Perso avec 70 modules, ça génère tellement d'information (surtout les relevés de température, etc) que ça devient ingérable. OK pour l'onduleur Disons qu'un final si la HC2 est coupée violemment, on va dire, une fois pas an, ce n'est pas trop un souci. Si c'est tous les mois, ça devient critique. Ce n'est pas la durée de la coupure qui importe, mais la coupure tout court. C'est un PC, la moindre coupure, tu perds le travail en cours, et pire encore, tu corromps les fichiers qui étaient en cours d'écriture à ce moment là. La HC2 met tout dans une base de données, donc un fichier unique. Une coupure au mauvais moment et tu perds tout. Penses à faire des backups réguliers. Si tu as un écran/clavier, va faire un tour dans le BIOS de la carte mère, normalement le paramètre de reboot automatique devrait être actif. Ce n'est peut être pas le cas chez toi. Autre chose, quand la coupure est trop brève (quelques secondes), la carte mère ne redémarre pas toute seule. Mais l'onduleur doit te protéger contre les coupures courte, donc il ne reste que les coupures longues (batterie à plat), et dans ce cas, la carte mère doit redémarrer seule si le paramètre du BIOS est bien réglé.
  5. Je ne comprends pas bien ta question ?!
  6. Lazer

    Panneau d'évènements

    Hum, alors là je n'ai pas d'idée. Par contre tu sembles parler de coupure de courant... si c'est fréquent, cherche pas plus loin, tu as surement corrompu le système. Essaye de contacter le support Fibaro pour voir si ils peuvent corriger à distance. Et dans tous les cas, installes un petit onduleur.
  7. Lazer

    Panneau d'évènements

    Ouais mal là ça ne doit pas être ça, puisqu'il ne voit pas les champs pour sélectionner les heures (en haut du panneau d'événement)
  8. Lazer

    Panneau d'évènements

    Etrange.... Quelques pistes : - rebooter la box - vider le cache du navigateur - changer de navigateur
  9. Lazer

    Json T_end

    Bloug, désolé, toujours pas de code LUA, mais j'ai rédigé un mini tuto qui, je l'espère, t'aidera un peu à y voir plus clair :
  10. Voilà : Par contre c'est fait à la va-vite, je n'ai pas testé le code LUA, j'espère qu'il n'y a pas d'erreur de syntaxe. N'hésitez par à me corriger. Sinon pour @J3R3M, comme tu peux le voir, cela intrigue beaucoup de monde, exemples : https://www.domotique-fibaro.fr/topic/9055-incomprã©hension-dans-les-nethttpclient/ https://www.domotique-fibaro.fr/topic/10888-nethttpclient-contourner-lasynchrone-cest-possible/ https://www.domotique-fibaro.fr/topic/10900-comportement-du-timeout-dans-les-nethttpclient/ https://www.domotique-fibaro.fr/topic/11558-récupérer-les-données-retournées-par-nethttpclient/
  11. Utilisation de net.HTTPClient() asynchrone - dans une scène en LUA sur HC2/HC3 - - dans un QuickApp sur HC3 - Dans les scènes, Fibaro ne nous laisse pas le choix, dès que l'on veut faire des appels HTTP, on est obligé d'utiliser la fonction asynchronse net.HTTPClient(). La fonction Net.FHTTP() synchrone utilisée dans les VD n'est pas disponible dans les scènes. Toutefois, l'avantage de net.HTTPClient() est d'accepter les connexions sécurisées HTTPS devenues majoritaires sur Internet. Exemple de code simple pour une requête de type GET local http = net.HTTPClient() http:request("http://1.2.3.4/url", { success = function(response) if response.status == 200 then print('OK, réponse : '.. response.data) else print("Erreur : status=" .. tostring(response.status)) end end, error = function(err) print("Erreur : " .. err) end, options = { method = 'GET' } }) L'exemple suivant effectue une requête de type POST permettant d'envoyer des données vers le site distant. De plus, la fonction success() récupère les données de type JSON en vue d'un traitement ultérieur (notez que les données envoyées vers le site Web et les données reçues depuis le site Web sont différentes, cela dépend de l'application qui tourne sur le site) : -- Les données à envoyer au formulaire local myJson = { "couleurs": { [1] = "bleu", [2] = "blanc", [3] = "rouge" }, "fruits": { [1] = "pomme", [2] = "banane" }, } -- Appel HTTPS local http = net.HTTPClient() http:request("https://www.domaine.com/url", { success = function(response) if response.status == 200 then if response.data and response.data ~= "" then print('Retour : '.. response.data) local jsonTable = json.decode(response.data) -- Parcours de la table JSON local k, v for k, v in pairs(jsonTable) do print("key = " .. k .. " - type(v) = " .. type(v)) end -- Ici la suite du code, exécuté en asynchrone, donc après la fin de l'exécution du code appelant http:request() -- ... else print("Error : empty response data") end else print("Erreur : status=" .. tostring(response.status)) end end, error = function(err) print("Erreur : " .. err) end, options = { method = 'POST', timeout = 5000, checkCertificate = false, headers = { ["content-type"] = 'application/x-www-form-urlencoded;', ["Authorization"] = "Basic YWRtaW46cGFzc3dvcmQ=" -- username:password encodé en Base64 (admin:password) }, data = json.encode(myJson) } }) -- Ici la suite du code, exécuté en synchrone, donc avant l'exécution du contenu de la fonction success() -- ... On remarque dans les options que l'on peut choisir les paramètres suivants : method : obligatoire : GET ou PUT ou POST ou DELETE timeout : facultatif : délai d'attente en millisecondes avant échec de la requête. Peut être utile avec certains serveurs un peu trop lents à répondre. Dans le doute, inutile d'utiliser ce paramètre. checkCertificate : facultatif : true ou false, permet d'ignorer les alertes de sécurité sur les certificats auto-signés (non reconnus pas une autorité de certification approuvée) headers : facultatif : permet de passer le(s) en-tête(s) HTTP de son choix vers le site Web distant. Si vous ne savez pas ce qu'est un Header, c'est que vous n'avez probablement pas besoin d'envoyer de header, donc ignorez ce paramètre. data : facultatif : ce sont les données à envoyer dans les formulaires POST et PUT sous forme de chaine de caractères. Donc si les données sont de type tableau JSON, il faut les encoder avec json.encode(). Asynchronisme net.HTTPClient() est asynchrone, le code dans les fonctions success() et error() appelées en callback s'exécute toujours après la fin de l'exécution du thread principal. Quand on commence à programmer en asynchrone, il ne faut plus jamais utiliser de fonctions synchrones comme sleep(), sous peine de comportement surprenant. Préférer à la place l'emploi de la fonction settimout() qui est elle-même asynchrone (chercher les exemples sur le forum) La bonne pratique quand on programme en asynchrone est la suivante : Après un appel à net.HTTPClient(), le code devrait se terminer le plus rapidement possible afin de laisser la main à la fonction success() appelée en callback de net.HTTPClient(). La suite du code se déroule donc dans la fonction success(). Celle-ci, à sont tour, peut faire d'autres appels à net.HTTPClient() ou settimeout() pour déclencher de nouveaux appels de fonctions en callback asynchrone. Etc... C'est la technique que j'ai employé dans mes scènes Watchdog et Yamaha MusicCast, partagées sur le forum. C'est une certaine gymnastique qui n'est pas évidente au début, et oblige à revoir toute la structure de son code LUA. En complément je vous invite à lire ce sujet sur la protection des requêtes http avec pcall() :
  12. Oui maitre
  13. C'est un sujet qui revient souvent sur le forum net.HTTPClient() est asynchrone, le code dans les fonctions appelées en callback s'exécute toujours après la fin de l'exécution du thread principal. Quand on commence à programmer en asynchrone, il ne faut plus jamais utiliser de fonctions synchrones comme sleep(), sous peine de comportement surprenant comme tu l'as constaté. Préférer à la place l'emploi de la fonction settimout() qui est elle-même asynchrone (chercher les exemples sur le forum) La bonne pratique quand on programme en asynchrone est la suivante : Après un appel à net.HTTPClient(), le code devrait se terminer le plus rapidement possible afin de laisser la main à la fonction success() appelée en callback de net.HTTPClient(). La suite du code se déroule donc dans la fonction success(). Celle-ci, à sont tour, peut faire d'autres appels à net.HTTPClient() ou settimeout() pour déclencher de nouveaux appels de fonctions en callback asynchrone. Etc... C'est la technique que j'ai employé dans mes scènes Watchdog et Yamaha MusicCast, que tu peux étudier par exemple. C'est une certaine gymnastique qui n'est pas évidente au début, et oblige à revoir toute la structure de son code LUA. Malheureusement Fibaro ne nous laisse pas le choix dans les scènes, dès que l'on veut faire des appels HTTP, on est obligé d'utiliser la fonction asynchronse net.HTTPClient(). La fonction Net.FHTTP() synchrone utilisée dans les VD n'est pas disponible dans les scènes.
  14. oui il y a un popup qu'il faut autoriser. Essaye avec un autre navigateur.
  15. Lazer

    Google Home

    La coupe du monde de quoi ?
  16. Lazer

    Google Home

    Les HC2 aussi est ultra stable... ça fait 2 ou 3 mois qu'on n'a plus aucune mise à jour, pas de risque de régression Bah nous on fait de la domotique grand public de 2018 maintenant.... on a un installé le skill Bruit de pet sur Alexa ce soir.... voilà voilà.... il y en a au moins une qui a bien rigolé
  17. Lazer

    Fibaro Intercom

    J'ai failli m'étrangler :
  18. Lazer

    Google Home

    Merci Jojo, mais c'est un phénomène assez connu sur tous les forums, la première page est rarement lue, pourtant elle est censée rassembler les infos utiles à lire en premier. Pas grave, il y a toujours une bonne âme pour répéter Heureusement que tu suis Tu reviens quand tu veux chez Fibaro
  19. Lazer

    Json T_end

    désolé c'était mal formulé Mais c'est en substance ce que te dis le message d'erreur.
  20. Lazer

    Json T_end

    euh, je crois que c'est juste ton code LUA qui est mal formaté, avec des virgules ou des accolades placées n'importe où. Je t'ai donné un exemple de code, mais désolé je n'ai pas le temps de tester du LUA, donc c'est purement théorique.... Sinon aide toi des nombreux exemples sur le forum. Par exemple le dernier code que j'ai partagé utilisant httpclient() est dans la scène sur le tuto Yamaha MusicCast. Mais ce n'est pas le seul.
  21. Lazer

    Fibaro Intercom

    C'est comme le Homepod, l'Intercom est tellement parfait qu'ils peuvent se contenter de 10% du marché mondial et peuvent ignorer les 90% restants. Parfois certaines stratégies d'entreprise m'échappent... encore que cela reste compréhensible pour le premier objet cité.
  22. Oui ça semble OK Je ne sais pas alors.
  23. Non pas besoin, l'intérêt de HAbridge est d'être reconnu nativement, car il emule un pont Philips Hue. Je n'ai pas encore testé, mais par contre je pense qu'on ne pourra pas dire 'ouvre' ou 'ferme'.
  24. J'en doute, HA-Bridge sert à émuler un pont Phillips Hue, donc des lumières. Mais peut être que quelqu'un a une astuce...
  25. OK dommage, mais tu as raison c'est ce que je craignais. Pourtant mon smartphone sait répondre à OK Google en mode avion, mais bon, il y a un vrai CPU dedans. PS : inutile de citer le message supérieur
×
×
  • Créer...