Aller au contenu

Zorgonaute84

Membres confirmés
  • Compteur de contenus

    146
  • Inscription

  • Dernière visite

  • Jours gagnés

    5

Tout ce qui a été posté par Zorgonaute84

  1. Effectivement, je n'ai pas le soucis chez moi car j'avais modifié le nom des variables spécifiquement pour ce tuto... J'avais semble t'il oublié de corriger les noms dans tout le code. A l'occasion je vais réuploader la version corrigé. Merci
  2. Idem depuis une semaine cela ne fonctionne plus... Ils font chier Logitech àchanger leur API tous les 4 matins... Envoyé de mon iPhone en utilisant Tapatalk
  3. Oui le hub est indispensable. Mais attend un peu ils sortent une nouvelle version en ce moment. Envoyé de mon iPhone en utilisant Tapatalk
  4. J'ai apporté quelques modifications je me suis rendu compte qu'une petite erreur de copier/coller s'était glissé dans le tuto.
  5. Alors oui effectivement ça peut aider. Je vais essayer également de faire un tuto pour domotiser ses volets Somfy via un Arduino ou Photon et une télécommande d'origine. Le tuto de base n'est pas de moi mais comme je l'ai réalisé il y a peu je peu faire profiter de mon expérience. Tu verras l'approche pourrait effectivement t'intéresser fortement... Envoyé de mon iPhone en utilisant Tapatalk
  6. Pour ceux qui ne connaissent pas le Particle Photon, il s'agit d'une petite carte électronique programmable avec une puce Wifi embarquée. La programmation de la puce se fait avec un IDE en ligne disponible sur le site de Particle et le language est très sensiblement le même que pour les cartes Arduino. L'avantage de cette puce, c'est d'une sa taille (De mémoire ils parlent de 6x plus petites qu'un Arduino), le wifi intégré, et le prix : 19USD hors frais de port et enfin (et surtout), le Particle Cloud ! Le Particle Cloud permet a votre puce d'être connecté, consultable et pilotable en tout instant via vos propres requêtes REST. En gros, avec cette puce vous êtes capable de fabriquer n'importe quoi pour votre système domotique et de l'intégrer totalement avec votre HC2. Le tuto qui va suivre portera de manière générique sur la communication bi directionnel entre le Photon et votre HC2. Je publierai plus tard et dans un autre sujet, le code source d'un module permettant d'activer et désactiver l'alarme d'une HC2 avec confirmation d'activation et retour d’échec (avec informations des portes restées ouvertes qui ont causées l’échec). Ce Alarme Button comme je l'ai appelé est basé sur le hardware de l'Internet Button vendu sur le site de Particle (il s'agit d'une puce Photon pluggé sur une carte avec 4 boutons, un accéléromètre et 11 LED RGB disposées en cercle. (Voir Internet Button). Communication du HC2 --> Particle Photon : a/ Exécuter quelque chose sur le Particle Photon : Tout d'abord, il faut déclarer dans le code de votre Photon votre fonction publique (a l'intérieur de votre boucle void setup ) : void setup() { Spark.function("NomDeLaFonctionCLOUD", NomDeLaFonctionLOCAL); } NomDeLaFonctionCLOUD sera le nom appelé depuis la HC2 (ATTENTION contrairement a mon exemple le nom ici ne doit pas dépasser les 12 caractères) NomDeLaFonctionLOCAL sera le nom de votre fonction exécutée dans le code de votre Photon : int NomDeLaFonctionLOCAL() { // Les trucs a exécuter } Et voila, c'est fini du côté de votre Photon. Maintenant, sur votre HC2. A noter que la connexion avec le Photon se fait en https et non http. Ce qui veut dire que la fonction netFhttp n'est pas possible ! Il faut donc utiliser la commande Net.HttpClient qui fonctionne uniquement dans une scène ! Donc exit le code dans un virtual device. A vous de voir comment vous voulez vous y prendre, mais pour ma part, j'ai créer une scène dédiée a la communication avec le Photon. Mes virtuals device ne font que passer 2 arguments dans une variable global, arguments repris par la scène de communication avec le Photon. Donc pour comprendre le schéma, l'appui sur un bouton de mon virtual device, modifie une variable pour contenir le nom de la fonction a exécuter, puis une seconde variable avec un éventuel paramètre. Puis ma scène se déclenche automatiquement, récupère ces deux valeurs pour communiquer avec le photon et réinitialise les variables pour la prochaine utilisation. D'un point de vue authentification sur le Cloud, il vous faut récupérer le N° unique de votre device Photon et le Token d'authentification. Voici donc le code de ma scène pour gérer l’exécution d'une scene. (Les deux variables globales que j'ai créé auparavant sont donc : IntBut_Function et IntBut_Argument) : local Device ='xxxxxxxxxxx' local Token ='xxxxxxxxx' local FunctionRequested = fibaro:getGlobalValue("IntBut_Function") local ArgumentSent = fibaro:getGlobalValue("IntBut_Argument") ------------------ FONCTION SPARK ------------------ function SparkFunction(Name,Argument) local Path = 'https://api.particle.io/v1/devices/'..Device..'/'..Name..'?access_token='..Token local Spark = net.HTTPClient(); Spark:request(Path, { options = { method = 'POST', headers = {["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"} , data = 'arg='..Argument } , success = function(response) if tonumber(response.status) == 200 then print('Function "'..Name..'" ('..Argument..') sent with success'); SparkTable = json.decode(response.data) else print('Function "'..Name..'" ('..Argument..') Error Status : '..response.status); end end , error = function(err) print('Connection error = ' .. err) end }); end ------------------ FIN DE FONCTION SPARK ------------------ Cette fonction est donc générique pour tous les appels de fonctions. J'ajoute alors a cette scène a la suite, un bout de code comme celui-ci pour chaque fonction : if FunctionRequested == "NomDeLaFonctionCLOUD" -- Ici il s'agit du nom de la fonction Cloud déclaré précedement dans le code de notre Photon then SparkFunction(FunctionRequested, ArgumentSent) end PS : J'aurais pu exécuter le code de la fonction en direct sans passer par ce bout de code, mais j'ai fais ce choix afin de pouvoir également exécuter d'autres actions que celle de communiquer avec le Photon. Et enfin pour lancer tout le processus depuis un virtual device ou depuis une scène, il suffit d'intégrer ces deux lignes de codes dans un bouton ou ailleurs : fibaro:setGlobal("IntBut_Argument",ArgumentATransmetre) fibaro:setGlobal("IntBut_Function",NomDeLaFonctionCLOUD) b/ Récupérer la valeur d'une variable contenue dans le Photon : Cette fois nous souhaitons récupérer la valeur d'une variable. On déclare une variable public dans le code source du Photon : //Particle.variable("LaVariableCLOUD", &LaVariableLOCAL, STRING); Puis dans la HC2, l'approche est exactement la même, mais il faudra tout d'abord créer une autre variable global pour stocker temporairement le nom de la variable demandé et une autre pour stocker le résultat (ex : IntBut_Variable et MaVariableDeResultat). Et voici la fonction a intégrer dans la scène gérant la communication avec le Photon : local VariableRequested = fibaro:getGlobalValue("IntBut_Variable") --------------------- VARIABLE SPARK ---------------------- function SparkVariable(Name) local Path = 'https://api.particle.io/v1/devices/'..Device..'/'..Name..'?access_token='..Token local Spark = net.HTTPClient(); local Result Spark:request(Path, { options = { method = 'GET', headers = {["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"} , } , success = function(response) if tonumber(response.status) == 200 then print('Variable "'..Name..'" requested with success'); SparkTable = json.decode(response.data) Result = SparkTable.result fibaro:setGlobal("MaVariableDeResultat",Result) else print('Function "'..Name..' Error Status : '..response.status); end end , error = function(err) print('Connection error = ' .. err) end }); end ------------------ FIN DE VARIABLE SPARK ------------------ Puis le bloc d'appel a ajouter a la suite : if VariableRequested == "LaVariableCLOUD" -- Ici il s'agit du nom de la variable Cloud déclaré précedement dans le code de notre Photon then SparkFunction(VariableRequested) end et enfin le code a intégrer a un boutton pour autre pour appeler tout le bazard : fibaro:setGlobal("IntBut_Variable","LaVariableCLOUD") Communication du Particle Photon --> HC2 : Cette fois ce sera beaucoup plus simple. A noter qu'il est possible de modifier la valeur d'une variable via un requete REST mais que cette modification ne déclenche pas une éventuelle scène associée. Je vais alors vous montrer ce qui me semble être la requête la plus utile, a savoir une requête demandant l'appuie sur le bouton d'un Virtual Device : Ici tout ce passe dans le code source du Photon : Comme vous pouvez le voir, il faut renseigner l'adresse IP de la box, votre admin:password en base 64, l'ID du device a actionner et le N° du boutton. Dans mon exemple ci-dessous le Photon demande l'appui sur le bouton 1 du device 50 dès sont initialisation : String server = "AdresseIPdelaHC2"; // Adresse IP de la box Fibaro String FibaroLogin = "xxxxxxxxxxx"; // admin:password en base 64 int FibaroDeviceID = 50; // N°ID du device Fibaro a piloter int NduBoutton = 1; // N° du bouton a actionner void setup() { FibaroCommunication("{\"args\":[" + String(NduBoutton) + "]}"); } void loop() { } /////////// FONCTION PRIVE DE COMMUNICATION AVEC LA FIBARO /////////// bool FibaroCommunication(String PostData) { if (Fibaro.connect(server,80)) { Serial.println("Connection Success"); Fibaro.print("POST /api/devices/"); Fibaro.print(NduBoutton); Fibaro.print("/action/pressButton"); Fibaro.println(" HTTP/1.1"); Fibaro.print("Host: "); Fibaro.println(server); Fibaro.print("Authorization: Basic "); Fibaro.println(FibaroLogin); Fibaro.print("Content-Length: "); Fibaro.println(PostData.length()); Fibaro.println(); Fibaro.println(PostData); return true; } else { Serial.println("Connection Failed."); return false; } } Bon voila, c'est terminé ! En espérant avoir été assez clair ! Vous verrez on peut faire de vrai merveilles avec ce Photon couplé a notre HC2.
  7. Comme il y a pas mal de sujet éparpillés concernant les requetes GET et PUT sur HCL, j'ai décidé d'en créer un de plus ! Non plus sérieusement après avoir écumé tous les sujets (avoir tout lu et son contraire) et galéré a trouver quelque chose qui fonctionne, voici les deux syntaxes pour du GET et du PUT sur HCL qui fonctionnent en V4.057 ! Pour du PUT (changement d'une variable) : Il est IMPERATIF que l'IP du virtual device soit 127.0.0.1 et son port : 11111 La requête s'écrit alors exactement comme cela : PUT /api/globalVariables/VOTRE_VARIABLE HTTP/1.1 Host: 127.0.0.1 Authorization: Basic VOTRE_ADMIN:PASSWORD_EN_BASE64 {"name":"VOTRE_VARIABLE","value":"LA_VALEUR_A_CHANGER"} Rien de plus, et rien de moins ! Meme si le host est 127.0.0.1, il faut garder le "Authorisation: Basic" sinon ca marche pas (j'ai testé), rajouter Votre variable a la fin de l'URL est indispensable, sinon ca ne marche pas non plus et le content-length ne sert a rien (j'ai pas testé si ça fonctionnait avec, mais ca fonctionne sans) Pour le GET c'est une autre histoire (déclenchement d'une scène) Vous pouvez écrire ce qu'il vous chante dans le champ adresse IP et port du virtual device, que ce soit l'IP de la box, 127.0.0.1 ou rien du tout, ca fonctionne ! La syntaxe est celle la : GET /api/sceneControl?id=ID_DE_VOTRE_SCENE&action=start HTTP/1.10x0D0x0AHost:IP_DE_VOTRE_HCL:80 0x0D0x0AAuthorization: Basic VOTRE_ADMIN:PASSWORD_EN_BASE64 0x0D0x0A0x0D0x0A Ce coup-ci c'est bien l'IP de la fibaro qu'il faut mettre, sinon ca ne marche pas ! Et il faut écrire toutes les petites merde comme celle-ci pour simuler des retours a la ligne (0x0D0x0A) sinon ca ne marche pas ! Remarque importante : Le changement d'une variable via la méthode PUT ne déclenche pas les scènes dont cette variable est le déclencheur.
  8. Idem de mon côté. Le plugin ne fonctionne plus depuis plusieurs jours. Moi je suis marqué comme déconnecté, et si je tente une synchronisation, j'ai ce message : Sign In failed. Please check and retype Email ID or Password and press save button. Idem, login et mot de passe vérifié sur le site. Et tout fonctionnait bien a l'origine...
  9. Bon après plusieurs essais, je me suis rendu compte que ma variable ne passait avec la syntaxe de Krikroff, en revanche, impeccable avec le code Stephen ! Donc l'appel de fonction passe bien, par contre je galère toujours pour récupérer proprement la valeur de ma variable. Aujourd'hui mon code d'appel de variable ressemble a ca : function SparkVariable(Name) local Path = 'https://api.particle.io/v1/devices/'..Device..'/'..Name..'?access_token='..Token local Spark = net.HTTPClient(); local Result Spark:request(Path, { options = { method = 'GET', headers = {["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"} , } , success = function(response) if tonumber(response.status) == 200 then print('Variable "'..Name..'" requested with success'); SparkTable = json.decode(response.data) Result = SparkTable.result print("Resultat au milieu de la fonction : "..Result) else print('Function "'..Name..' Error Status : '..response.status); end end , error = function(err) print('Connection error = ' .. err) end }); print("Résultat en fin de fonction") print(Result) end Et voila a quoi ressemble le debogeur : [DEBUG] 16:42:31: Résultat en fin de fonction [DEBUG] 16:42:31: nil [DEBUG] 16:42:32: Variable "MaVariable" requested with success [DEBUG] 16:42:32: Resultat au milieu de la fonction : 5 En gros, contrairement a l'ordre des instructions, les deux print en fin de fonction sont exécuté avant ceux en milieu de la fonction. Mon objectif final est de remplacer les deux print en fin de fonction par un return Result. Alors avant que quelqu'un me propose de faire un fibaro:sleep(5000) j'ai déjà essayé sans succes. En effet, le fibaro:sleep mets en pause tout le code, donc j'ai mes retours plus tard, mais toujours dans le mauvaise ordre. Je n'ai pas trouvé de syntaxe de type fibaro:pause ou fibaro:wait afin de juste retarder les instructions suivantes sans pour autant bloquer les autres actions. Merci pour votre aide !
  10. Alors fibaro:debug(SparkTable.result) me donne un nil si il est a la fin de la fonction et la bonne valeur si il se trouve a la ligne 12. Impossible de l'executer en dehors de la fonction. Le print idem, a la ligne 12 aucun soucis. Passer une variable globale serait la solution mais c'est quand même moche.
  11. Super merci pour les exemples, cela m'as permis d'avancer car je galerais avec la requete GET pour récuperer les informations d'une variable. Alors pour le moment, pour faire un POST et appeler une fonction sur mon Spark j'ai ceci (qui fonctionne impeccablement) : ------------------ FONCTION SPARK ------------------ function SparkFunction(Name,Argument) local Path = 'https://api.particle.io/v1/devices/'..Device..'/'..Name..'?access_token='..Token local Spark = net.HTTPClient(); Spark:request(Path, { success = function(response) if tonumber(response.status) == 200 then print('Function "'..Name..'" ('..Argument..') sent with success'); else print('Function "'..Name..'" ('..Argument..') Error Status : '..response.status); end end , error = function(err) print('Connection error = ' .. err) end , options = { method = 'POST', headers = {["content-type"] = 'application/x-www-form-urlencoded;'}, data = '{"arg"='..Argument..'}' } }); end ------------------ FIN DE FONCTION SPARK ------------------ Et pour lire une variable via une reqette GET, j'ai ceci (qui fonctionne aussi, mais qui ne me renvoi pas la valeur): --------------------- VARIABLE SPARK ---------------------- function SparkVariable(Name) local Path = 'https://api.particle.io/v1/devices/'..Device..'/'..Name..'?access_token='..Token local Spark = net.HTTPClient(); Spark:request(Path, { success = function(response) if tonumber(response.status) == 200 then print('Variable "'..Name..'" requested with success'); SparkTable = json.decode(response.data) return SparkTable.result else print('Variable "'..Name..'" request Error Status : '..response.status); end end , error = function(err) print('Connection error = ' .. err) end , options = { method = 'GET', headers = {["content-type"] = 'application/x-www-form-urlencoded;'}, } }); end ------------------ FIN DE VARIABLE SPARK ------------------ Sauf que j'ai quelques soucis pour renvoyer la valeur du résultat. A la ligne 11 je décode correctement ma table Json. Car si je fais un print(SparkTable.result) j'ai bien le résultat correct qui s'affiche dans la fenetre du débugeur. Mais impossible de faire un return sur cette valeur. J'ai testé pleins de solution mais rien a faire. Le return me renvoi systématiquement un "nil". Je veux bien un petit coup de pouce ;-) Je précise que les deux variables Device et Token sont déclarés en amont des fonctions.
  12. Alors si si, je viens de tester et ca fonctionne ! le HTTPClient gère bien le httpS !!!
  13. Bonjour à tous, J'ai acquis récemment un Spark Photon. Pour ceux qui ne connaissent pas je vous conseille de vous renseigner, c'est absolument merveilleux cette petite bête. Toutefois j'essaie de faire quelques tests pour le moment (avant de faire quelque chose de plus sérieux) mais je galère avec la connection entre la HC2 et le cloud de Spark. En effet, toutes les connections ne se font qu'exclusivement via https. Il me semble avoir lu quelque part que la commande NetFhttp ne gérait pas les connexions sécurisés. Est-ce toujours d'actualité avec cette v4, et si oui, avez-vous une solution magique pour contourner le soucis ? Bon si vraiment il n'y a aucune solution propre, il semble que ce soit possible de passer par IFTT. Le Spark arrive a communiquer avec IFTT et la HC2 aussi. C'est juste con d'ajouter un intermédiaire dans le processus. Merci pour votre aide.
  14. Bonjour à tous, Je suis tombé par hasard sur la documentation avancé de Fibaro, et en fin de documentation, ils parlent d'un Dashboard Panel ! Avez vous déja entendu parlé de ce truc la ??? A voir en chapitre 5.12 (Page 139 et 140) de la documentation : http://www.fibaro.com/sites/default/files/poradnik_instalatora/Advanced%20User%20Guide%20ver%201.06.pdf
  15. Bonjour, Désolé pour le retour tardif. En ce qui concerne la variable ce n'est peut etre pas clair, alors je m'explique. Le VD stock dans une variable la position du volet afin de pouvoir faire fonctionner le slider. Il faut donc créer une variable par VD (et donc pas volet). Il vous faut donc créer une variable numérique. Par exemple: EtatV1 pour l'état de votre volet 1 et ensuite entrer le nom de cette variable a cette ligne la (a la place de EtatVolet1) : local VarGlobalEtatDuVolet = 'EtatVolet1' --Indiquer le nom de la variable du volet Remarque : Il faut modifier cette ligne pour chaque bouton du VD. Il s'agit de la ligne 4 pour les boutons Ouvrir, Fermer et My, et la ligne 12 pour le slider. En ce qui concerne un mainloop qui récupère l'info d'état du volet, c'est malheureusement impossible. Si on veut que le plugin fonctionne correctement, il ne faut plus utiliser la télécommande. Remarque 2 : Le slider fonctionnera correctement si la position de départ est : totalement ouvert, totalement fermé, en position My, ou en position intermédiaire depuis le slider. Le Slider ne fonctionnera pas, si le volet a été stoppé via le bouton My pendant sa course. Exemple : le volet est ouvert, vous appuyez sur fermer, et a mi chemin vous faites My. Le volet sera en position intermédiaire, mais le systeme le pensera en position My, et donc le slider ne fonctionnera pas correctement.
  16. La station Netatmo est en promotion actuellement sur Amazon, j'envisage donc son achat, par contre, je me pose la question de la fiabilité du pluging netatmo pour la V4. Depuis toute ces mise a jour, est-ce que ce plugin fonctionne correctement maintenant ? Et est-ce quelqu'un pourrait faire une capture d'écran pour voir un peu a quoi cela ressemble ? Dernière question, arrive t'on a récupéré ces infos pour en faire des déclencheurs de scenes ? Merci.
  17. Bon bah j'ai recu la télécommande... Validé et Approuvé !!!!! Elle fonctionne du feu de dieu, contrairement a Berale24, je trouve la télécommande réactive. Les 4 types d'appuie permettent des actions assez intéressantes. Pour ma part j'utilise l'appuie long sur le + et le - pour démarrer une boucle infinie qui augmente ou diminue l'intensité lumineuse de mes Hue et l'action relâche pour interrompre cette boucle. Il est également possible d'augmenter significativement le nombre d'actions disponibles. Chez moi j'ai programmé les boutons rond plein et rond vide pour changer une variable que j'ai appelé ModeOctan, et ensuite les boutons + et - réagissent différemment en fonction du mode dans lequel je me trouve. Cela permet de pouvoir contrôler plusieurs actions en créant une sorte de "logique" facile a mémoriser. Pour conclure, je trouve que c'est une franche réussite, 100% fonctionnel sur nos HC2, facilement programmable et très réussi esthétiquement. Bref, désormais Madame n'as plus du tout besoin de son smartphone pour interagir avec notre système domotique.
  18. Impec, par contre, il y a un petite erreur de frappe dans ton code. La derniere ligne n'est pas Return Num_icones Mais return Num_Icone
  19. Ah merci pour la syntaxe que je ne connaissais pas. C'est vrai que c'est nettement plus propre...
  20. Si ca interesse du monde, j'ai écris vite fait le canevas de la scene permettant de gérer la télécomande (en attendant la mienne qui devrait arriver demain). Il faut juste remplacer les xx des lignes 4 et 8 par l'ID de l'Octan --[[ %% properties xx sceneActivation %% globals --]] local ValeurOctan = tonumber(fibaro:getValue(xx, "sceneActivation")) ------------- ACTIONS DU ROND PLEIN ------------- -- 1 Pression if (ValeurOctan == 10) then end -- Double Pression if (ValeurOctan == 13) then end -- Maintenue if (ValeurOctan == 12) then end -- Relaché if (ValeurOctan == 11) then end ------------- ACTIONS DU ROND VIDE ------------- -- 1 Pression if (ValeurOctan == 30) then end -- Double Pression if (ValeurOctan == 33) then end -- Maintenue if (ValeurOctan == 32) then end -- Relaché if (ValeurOctan == 31) then end ------------- ACTIONS DU + ------------- -- 1 Pression if (ValeurOctan == 20) then end -- Double Pression if (ValeurOctan == 23) then end -- Maintenue if (ValeurOctan == 22) then end -- Relaché if (ValeurOctan == 21) then end ------------- ACTIONS DU - ------------- -- 1 Pression if (ValeurOctan == 40) then end -- Double Pression if (ValeurOctan == 43) then end -- Maintenue if (ValeurOctan == 42) then end -- Relaché if (ValeurOctan == 41) then end
  21. ton lien ne fonctionne pas
  22. Oui oui je sais, mais est-ce que ce n'est pas tous ces contrôles qui créer tant de soucis au final ? Je sais pas, je dis ca juste comme ca.
  23. Non: MiniKeypad et/ou TagReader Fabricant: Zipato et/ou Benext Référence matériel: ?? Version: ??
  24. C'est très simple, je viens d'éditer mon 1er message pour l'expliquer.
  25. Si ca peut aider, c'est beaucoup moins chiader que vous, mais voici mon code pour démarrer l'enregistrement : -- User configurable variables local selfID = fibaro:getSelfId() local camera = "2" local action = "start" local ip = fibaro:get(selfID, 'IPAddress') local port = fibaro:get(selfID, 'TCPPort') local sid = "MON SID" Synology = Net.FHttp(ip,tonumber(port)) Synology:GET("/webapi/entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&action="..action.."&cameraId="..camera.."&_sid="..sid); fibaro:log("Début de l'enregistrement vidéo") Le SID est en fixe dans mon code et cela fonctionne depuis début Juin. Je n'ai pas l'impression que le SID change si souvent que cela. Pour ma part, il semble n'avoir changé que lors de la grosse mise a jour de Surveillance Station et quand j'ai modifié mes login et mots de passe. A voir dans le temps mais pour le moment c'est fiable et 100% fonctionnel.
×
×
  • Créer...