Aller au contenu

jjacques68

Membres confirmés
  • Compteur de contenus

    4 364
  • Inscription

  • Dernière visite

  • Jours gagnés

    39

Tout ce qui a été posté par jjacques68

  1. Hello, Y a t il moyen de faire remonter les petits bug et éventuelles améliorations que l'on rencontre sur la HC3 quelque part ? C'est osé comme question, je sais... j'imagine que si c'était possible, la boite serait saturée en... un rien de temps , mais c'est dommage de ne pas pouvoir le faire... Voici la liste de petites choses que j'ai remarqué : pouvoir choisir une icone pour les QA générique notification pour DoorSensor quand "closing" (il existe que pour le opening...) bouton QA : bug avec les caractères accentués icone volet sur l'application iphone : inversée par rapport à la réalité (ouvert quand fermé et vice et versa...)
  2. jjacques68

    Google Home & QA

    Bon ben aucun soucis pour la gestion du Google Home avec la HC3... Attention je fonctionne à l'ancienne, sans passer par le plugin Fibaro de google home. Je préfère... je maîtrise ce que je veux comme je veux... ça se discute... bref... Prérequis : - accéder à la HC3 depuis l'extérieur (ouverture de port sur le routeur, connaitre son IP publique, ...) - un compte IFTTT - un user spécifique sur la HC3 avec accès uniquement au QA de réception du message Voici les paramètres de l'applet IFTTT : What do you want to say? = HC3 $ URL = http://user:pass@adresse_ip_publique:port/api/devices/57/action/Receive Method = POST Content Type (optional) = application/x-www-form-urlencoded Body (optional) = {"args":["{{TextField}}"]} où : - 57 est l'ID de QA - "Receive" est le nom de la fonction (méthode) dans le QA. Voici le code du QA qui permet, pour le moment, d'afficher la commande dans un label et exécuter l'action : function QuickApp:Receive(value) self:updateView("LBL_Receive","text",tostring(value)) self:Execute(value) end function QuickApp:Execute(value) if value == "ferme le volet 6" then fibaro.call(38, "close") end if value == "ferme le volet 5" then fibaro.call(41, "close") end --et puis tout ce qu'on a envie de faire... end Donc si je dis "OK google, ferme le volet 6", Le GH transmet à IFTTT qui transmet à la HC3 la commande "ferme le volet 6". C'est donc la fonction "Receive" qui reçoit cette commande, La fonction "Execute" récupère ce message et selon la phrase, effectuera l'action demandée. et ben... donc le volet 6 se ferme et la réactivité est nickel. JE PRECISE : Vous avez peut-être remarqué, je ne dis pas "OK google, HC3 ferme le volet 6" comme ça devrait l'être normalement, ... Je dis bien "OK google, ferme le volet 6". Le mot clé "HC3" définit dans l'applet disparaît, car je passe par des routines, décrites dans l'application GH (allez dans : paramètres - plus de paramètres - assistant - routines). La routine est paramétrée ainsi : - Quand je dis : "ferme le volet 6" - L'assistant exécute : "HC3 ferme le volet 6" du coup pas besoin de spécifier le mot clé tout moche avant de donner l'ordre. On peut cumuler plusieurs actions dans un seul ordre, et ça c'est top ! Bon, ça veut dire que chaque ordre doit être saisi... (inconvenient si on en a beaucoup) y a peut-être d'autres solutions plus ou moins simple... j'utilisais déjà ça avec la HC2... jamais eut de soucis.
  3. tout à fait d'accord ! merci pour le tuyau !!
  4. ah, savais pas qu’on pouvait faire ça ! oui je comprends, cela évite de devoir parcourir tous les device, afin de connaître leur catégories...
  5. c’est quoi le message dans le debug de la HC2 ? Tu as modifier le user:mode_de_passe, encoder en base 64 dans la section Authorization ?
  6. jjacques68

    fibaro.debug()

    ah zut, pas de bol !! ok ! merci !!
  7. et puis il faudrait ajouter, dans les profils, dans la ListeBox du choix de la box, la HC3
  8. Petite question : à quoi sert le "tag" quand on utilise la fonction debug ? d'après l'aide : on pourrait filtrer les messages dans le debug ! mais où et comment ?? Visiblement on a une seule et unique fenêtre de debug pour les scènes. Donc tous les messages s’enchaînent, et ça devient très vite incomprehensible... Je fait attention à bien saisir un "tag" lors de l'appel de cette fonction, mais je vois pas où ça intervient... ???
  9. Alors voici un exemple tout simple de gestion des volets : principe : ouverture le matin 15 min avant le levé de soleil fermeture le soir 15 min après le couché de soleil subtilité avec un volet : qui se ferme que si je suis absent et que la porte est fermée. Voici les Trigger : { operator = "any", conditions = { {type = "date", property = "sunrise", operator = "==", value = -15, isTrigger = true}, {type = "date", property = "sunset", operator = "==", value = 15, isTrigger = true} } } et voici la scène : fibaro.debug("Volets", "start Scene") local Trigger = sourceTrigger local Tel = tonumber(fibaro.getGlobalVariable("MonPhone")) local Message = "" local ListeDevice = api.get("/devices/") local IDVoletSalon = 38 ---------------------- --SUNSET ---------------------- if Trigger.property == "sunset" then fibaro.debug("Volets", "Sunset Trigger") Message = "Fermeture des volets" for i = 1, #ListeDevice do if ListeDevice[i].properties.categories then if ListeDevice[i].properties.categories[1] == "blinds" then --Volet du salon : le fermer que si absent et porte fermée if ListeDevice[i].id == IDVoletSalon then if fibaro.getGlobalVariable("Present") == "0" and fibaro.getValue(36, "value") == false then fibaro.call(38, "close") end else fibaro.call(ListeDevice[i].id, "close") end end end end end ---------------------- --SUNRISE ---------------------- if Trigger.property == "sunrise" then fibaro.debug("Volets", "Sunrise Trigger") Message = "Ouverture des volets" for i = 1, #ListeDevice do if ListeDevice[i].properties.categories then if ListeDevice[i].properties.categories[1] == "blinds" then fibaro.call(ListeDevice[i].id, "open") end end end end fibaro.alert("push", {Tel}, Message) et marche nickel
  10. Je sais pas, j'ai jamais utilisé GEA, désolé...
  11. Comme je connais bien Windev, je me suis créé un soft moi-même.. Il reçoit les infos de la HC2 et maintenant aussi de la HC3 via une socket (enfin 2 maintenant) et pilote les équipements via les requêtes HTTP.
  12. jjacques68

    Question TCPSocket

    @Krikroff, je vais abuser... désolé... mais tu as pu regarder cette histoire de socket ??
  13. Franchement, cette box est très prometteuse... J'ai mis pas mal de temps à faire des petits essai de cohabitations avec elle et d'autres équipements (HC2, IPX, mon soft sur écran tactile...) et bien ça se passe bien... Mais alors la migration va être longue...
  14. Hello ! voici ma méthode pour faire remonter la valeur d'un capteur de la HC2 vers la HC3 dans QA. Le QA est typé "Door Sensor" avec les icones qui vont bien voici le code du QA : avec la méthode "set" appelée par la HC2 function QuickApp:set(MyValue) self:debug(MyValue) if MyValue == tonumber(0) then MyValue = false else MyValue = true end self:updateProperty('value', MyValue) self:updateView("label", "text", tostring(MyValue)) end et voici le code de la HC2 : --[[ %% properties 57 value %% events %% globals --]] local http = net.HTTPClient() --connexion à la HC2 local Command = "http://192.168.2.60/api/callAction?deviceID=36&name=set&arg1="..fibaro:getValue(57, "value") http:request(Command, { options = { headers = { ['Authorization']='Basic YWRtxxxxxxxxxx', ['Content-type']='application/x-www-form-urlencoded' }, method = 'GET' }, success = function(response) print("OK "..response.status) end, error = function(response) print("NOK "..response) end }) la requête est un peu lourde... mais ça marche très bien. De cette manière, on peut utiliser un capteur pas encore migré sur la HC3, autant en interrogeant sa valeur que comme trigger de scène. J'arrive pas à trouver la syntaxe pour faire du POST... m'énerve ces syntaxes de requête... Mais du coup, ça fait une scene pour un capteur et donc un QA. Les QA j'aurais pas le choix, c'est comme un device. Mais pour la HC2, c'est me fait ch... de faire une scène par capteur... faut que je réfléchisse encore...
  15. si je pouvais aussi avec un PUT comme l'a fait @TonyC mais cela ne marchera pas pour les remonté de capteurs, je souhaite avoir qqch de plus générique... mais je sais pas si je vais trouver comment faire. Si les capteurs sont juste des valeurs à exploiter dans les scènes, je pourrais les stocker dans une VG tableau... Mais s'ils doivent être trigger d'une scène, vais être obligé de passer par un QA spécifique à chaque capteur
  16. et bien ça marche nickel ça !! viens de tester... je remonte la valeur d'une VG de la HC2 dans une VG de la HC3 en passant par un QA... cela me permet dans ce cas, d'avoir mon statut Present/Absent sur la HC3... Maintenant faut que je réfléchisse pour avoir un système générique, pas trop envie de créer une multitude de scènes sur le HC2 et de QA sur le HC3, juste pour le temps de la migration...
  17. bon je me réponds tout seul, il manquait un "s" à "option"...
  18. Hello ! j'essaye de faire fonctionner une requête HTTP qui marche parfaitement bien depuis l'outil Advanced REST, mais que je n'arrive pas à transposer dans la HC2 : voici le code : local http = net.HTTPClient() --connexion à la HC3 local Command = "http://192.168.2.60/api/callAction?deviceID=35&name=State&arg1=toto" http:request(Command, { option = { headers = { ['Authorization']='Basic YWRtaxxxxxxxxxxxx', ['Content-type']='application/x-www-form-urlencoded;' }, method = 'GET' }, success = function(response) print("OK "..response.status) end, error = function(response) print("NOK "..response) end }) et j'ai en retour : OK 401 401 = utilisateur non authentifié Je fais quoi comme erreur ? merci à vous !!
  19. jjacques68

    getSourceTrigger

    ben j'avais vu ça... mais alors faut vachement extrapoler...
  20. jjacques68

    Question TCPSocket

    alors j'ai essayé sans le close, même résultat. mais le QA ne plante pas, (du moins j'ai pas le message du crash comme j'ai déjà eu) J'ai essayé de faire un Open à chaque envoi (un peu comme sur la HC2), mais ça marche pas non plus. On dirait qu'on a perd de la réactivité avec ces sockets. Pourtant tant que tu redémarres pas le serveur TCP, ça marche nickel !!
  21. Encore moi désolé j'ai tendance à bombarder le forum de questions, mais je vous promets que je cherche des réponses avant de poster Alors on en avait un peu discuté avec @Lazer je crois, mais je me rends compte que les Trigger dans les scènes semblent être plus compliqués... Je m'explique : Je veux qu'une scène soit triggée lorsque qu'un Wall Plug (pour cette exemple) change d'état. Et bien je suis obligé de mettre 2 lignes de conditions, une pour tester le "True" et pour le "False". { operator = "any", conditions = { {type = "device", id = 34, property = "value", operator = "==", value = true, isTrigger = true}, {type = "device", id = 34, property = "value", operator = "==", value = false, isTrigger = true} } } Je pensais qu'il était possible, par exemple, d'en avoir qu'une : { operator = "any", conditions = { {type = "device", id = 34, property = "value", operator = "!=", value = 2, isTrigger = true}, } } Mais visiblement, il n'accepte (pour ce type de module) que le "True" et "False" comme "value". Alors imaginons maintenant que cette scène doit être triggée par tout tout tout plein de device ! La liste des conditions va exploser, minimum le double que ce qu'on faisait sur la HC2 !! c'est un peu bof comme méthode non ? où je me trompe complètement !
  22. jjacques68

    getSourceTrigger

    yes !! merci @Krikroff ! ça marche nickel ! Mais où as tu ces informations, elles ne sont pas renseignées dans les pages d'aide de Fibaro ?
  23. Hello tout le mode ! On a visiblement plus le getSourceTrigger dans la HC3 du coup pour une scène qui a comme trigger ce genre de chose : { operator = "any", conditions = { { type = "device", id = 10, property = "value", operator = "==", value = true, isTrigger = true }, { type = "device", id = 12, property = "value", operator = "==", value = true, isTrigger = true } } } et qu’on cherche à savoir qui à déclenché la scène ? comment fait-on ? merciiiii !
  24. jjacques68

    Question TCPSocket

    J'ai fais comme tu dis : function QuickApp:onInit() self.sock = net.TCPSocket() self.ip = self:getVariable("IP") self.port = tonumber(self:getVariable("Port")) self:Open_Socket() end function QuickApp:Open_Socket() self.sock:connect(self.ip, self.port) self:debug("Socket open") end function QuickApp:Close_Socket() self.sock.close() self:debug("Socket close") end function QuickApp:Send(MaTrame) --affiche la trame dans le label self:updateView("LBL_Buffer", "text", tostring(MaTrame)) --envoi la trame self.sock:write(MaTrame, { success = function() self:debug("data sent") end, error = function(err) self:debug("error : "..err) self:Close_Socket() fibaro.setTimeout(5000, function() self:Open_Socket() self:Send(MaTRame) end) end }) end Le comportement est vraiment étrange : - tout est toujours ok au démarrage du QA. - mais après redémarrage du serveur TCP, pareil la 1ère trame envoyée me répond "data sent", mais je vois toujours rien ! - à la 2ème trame, j'ai l'erreur "Broken Pipe" (logique je comprends...) - et le setTimeout semble prendre après très très longtemps (plus que les 5 secondes) : j'ai le "Socket Open" qui arrive après 10 s !! - et la trame n'a pas été renvoyée étrange tout ça
  25. jjacques68

    Question TCPSocket

    Bonjour à tous, Pour ceux qui ont commencé à jouer avec la HC3, j'ai une petite question : J'ai un QA qui envoie des trames sur une socket TCP vers un serveur. ça marche avec ce code (je vois mes trames arriver sur le serveur) : function QuickApp:onInit() self:debug("onInit") self:Open_Socket() end function QuickApp:Open_Socket() self.ip = self:getVariable("IP") self.port = tonumber(self:getVariable("Port")) self.sock = net.TCPSocket() self.sock:connect(self.ip, self.port) end function QuickApp:Send(MaTrame) --affiche la trame dans le label self:updateView("LBL_Buffer", "text", tostring(MaTrame)) --envoi la trame self.sock:write(MaTrame, { success = function() self:debug("data sent") end, error = function(err) self:debug("error while sending data") self.sock:close() fibaro.sleep(200) self:Open_Socket() fibaro.sleep(200) self:Send(MaTrame) end }) end Donc en gros, J'ouvre la socket au démarrage du QA, et j'envoi la trame sur appel de la méthode Send(MaTrame) Actuellement je passe par un bouton dans le QA pour déclencher l'envoi, plus tard ce sera fait par scène, bref... le problème est pas là. Le soucis est que si le serveur TCP redémarre, je n'arrive plus à relancer la connexion depuis le QA ! malgré ces lignes : self.sock:close() fibaro.sleep(200) self:Open_Socket() fibaro.sleep(200) self:Send(MaTrame) où je ferme la précédente socket, je la ré-ouvre, et je renvoi la trame (le tout temporisé) ! Et bien au premier essai, après redémarrage du serveur TCP, il me répond que la trame a bien été envoyé. Et biensûr j'ai rien vu arriver sur le serveur. Au deuxième essai il boucle indéfiniment en me disant "error while sending data". Comment peut-on réinitialiser la socket proprement, et relancer la trame qui n'a pas pu être envoyée !! des idées ???? merciiiiiiiiiiiiii !
×
×
  • Créer...