Aller au contenu

Jean Louis DURET

Membres confirmés
  • Compteur de contenus

    77
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par Jean Louis DURET

  1. Pas trouvé d'onglet paramètres dans le QA
  2. Je te l'ai redonné pour que tu voies que j'ai bien remplacé les deviceId par les bons et les images pour que OUI çà correspond bien aux températures relevées par FGMS 001. Regarde les captures écran, ce sont bien les ID de sondes. Que faudrait il d'autre pour vérifier ? Merci de ta patience.
  3. Génial le principe, j’ai enfin compris l’utilité d’une Quick App ! Je n’ai pas eu le temps de remonter mes sondes sur le volet et j’ai donc testé sur 2 FGMS 001 209 et 221 _vois les images_ Çà me renvoie une erreur local myVersion = "0.10"; -- Barelle le 14/04/2025 : création -- Chargement d'un fichier au format ics local refreshDelay = 60; -- secondes local delay = refreshDelay; local devId1, devId2 = 0, 0; local dev1Lbl = "Device 1"; local dev2Lbl = "Device 2"; local selfId = plugin.mainDeviceId; __TAG = "Comparaison_"..plugin.mainDeviceId; function QuickApp:onInit() local initError = false; local initErrorCause = ""; local testVariable = function(varName, defaultValue) local var = self:getVariable(varName); if (var == "") or (var == nil) then var = defaultValue; self:setVariable(varName, var); if type(var) == "table" then self:warning("QuickApp:onInit>testVariable>>>🤨 Variable \"" .. varName .. "\" not defined, now sets to " .. json.encode(var)); else self:warning("QuickApp:onInit>testVariable>>>🤨 Variable \"" .. varName .. "\" not defined, now sets to " .. stuffToString(var)); end else if type(var) == "table" then self:debug('QuickApp:onInit>testVariable>>>😐 variable "'..varName..'"='..json.encode(var), "SeaGreen"); else self:debug('QuickApp:onInit>testVariable>>>😐 variable "'..varName..'"='..tostring(var)); end end return var; end -- testVariable self:trace("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* [" .. __TAG .. "] onInit (version " .. myVersion .. ") *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"); -- 0) Check if QuickApp device is enabled if api.get("/devices/" .. tostring(selfId)).enabled then self:updateProperty("log", ""); else self:updateProperty("log", "❌ Disabled ❌"); self:warning("QuickApp:onInit>>>Device " .. self.name .. " is disabled => QuickApp stopped."); return; end -- 1) On récupère le delay de raffraichissement des données delay = testVariable("refreshDelay", defaultDelay); self:trace('onInit>>>🙂 Variable "refreshDelay"=' .. delay .. ' seconds.'); -- 2) On récupère l'Id du premier appareil devId1 = tonumber(testVariable("209", devId1)); self:trace('onInit>>>🙂 Variable "209"=' .. devId1 .. '.'); -- 3) On récupère l'Id du deuxième appareil devId2 = tonumber(testVariable("221", devId2)); self:trace('onInit>>>🙂 Variable "221"=' .. devId2 .. '.'); -- 4) On vérifie que les paramètres sont bons if (devId1 > 1) and (devId2 > 1) then local val1 = hub.getValue(devId1, 'value'); if (type(val1) ~= "number") then initError = true; initErrorCause = '🥵 Invalid device "209" : ' .. devId1; dev1Lbl = "Device 1 (id: " .. devId1 .. ")"; else dev1Lbl = "Device 1 (id: " .. devId1 .. ") value=" .. val1; end local val2 = hub.getValue(devId2, 'value'); if (type(val2) ~= "number") then initError = true; initErrorCause = initErrorCause ..' 🥵 Invalid device "221" : ' .. devId2; dev2Lbl = "Device 2 (id: " .. devId2 .. ")"; else dev2Lbl = "Device 2 (id: " .. devId2 .. ") value=" .. val2; end if (type(val1) == "number") and (type(val2) ~= "number") then self:updateProperty("value", val1-val2); end else initError = true; dev1Lbl = "Device 1 (id: " .. devId1 .. ")"; dev2Lbl = "Device 2 (id: " .. devId2 .. ")"; initErrorCause = '🥵 Paramètres invalides.'; end -- 5) On met à jour l'interface utilisateur self:updateView("dev1Lbl", "text", dev1Lbl); self:updateView("dev2Lbl", "text", dev2Lbl); self:updateView("majLbl", "text", "Le " ..os.date ("%d/%m/%Y à %H:%M:%S", os.time()) .. "."); if initError then self:warning(initErrorCause); self:updateView("resultLbl", "text", initErrorCause); self:updateProperty("value", 0); self:updateProperty("log", "❌ Erreur ❌"); else self:loop(delay); end end -- QuickApp:onInit function QuickApp:loop(delay) -- Check if QuickApp device is enabled if api.get("/devices/"..tostring(self.id)).enabled then self:updateProperty("log", ""); else self:updateProperty("log", "❌ Disabled ❌"); self:warning("Device", self.name, "is disabled => QuickApp stopped"); return end local valDev1 = hub.getValue(devId1, 'value'); local valDev2 = hub.getValue(devId2, 'value'); local ecart = valDev1 - valDev2; self:updateView("dev1Lbl", "text", "Device 1 (id: " .. devId1 .. "), value = " .. valDev1); self:updateView("dev2Lbl", "text", "Device 2 (id: " .. devId2 .. "), value = " .. valDev2); self:updateProperty("value", ecart); self:updateProperty("log", "Ecart = " .. ecart); self:updateView("resultLbl", "text", "L'écart entre les valeurs est de " .. ecart .. "."); self:updateView("majLbl", "text", "Le " ..os.date ("%d/%m/%Y à %H:%M:%S", os.time()) .. "."); self:trace("QuickApp:loop>>>Le QA a été mis a jour : prochaine mise à jour dans "..delay.." secondes."); hub.setTimeout(delay * 60 * 1000, function() self:loop(delay); end) end -- QuickApp:loop function stuffToString(stuff) local typ = type(stuff); if typ == "nil" then return "nil"; elseif typ == "string" then return stuff; elseif typ == "number" then return tostring(stuff); elseif typ == "boolean" then return iif(stuff, "true", "false"); elseif typ == "table" then return json.encode(stuff); elseif typ == "function" then return "function"; elseif typ == "userdata" then return "userdata"; elseif typ == "thread" then return "\"thread\" not supported by Fibaro!"; else return "unknown Lua variable type: "..typ; end end -- stuffToString
  4. Question con, dois je remplacer deviceId1 et deviceI2 à chaque occurence dans ton programme ?
  5. OK, je testerai début semaine prochaine, car je pars demain tôt. Merci de ton aide.
  6. Mille mercis Barelle pour cet imposant QA. Il me semble (dis je tout doucement) que ma recherche est plus simple : 310 mn après lever du soleil ici isTrigger = true, operator = "==", property = "sunrise", type = "date", value = 310 ET Si on est en mode SOLEIL ici isTrigger = true, operator = "==", property = "activeProfile", type = "profile", value = 1 ET Si la valeur T° du capteur A (T° de l'air _ID 330) est supérieure à la valeur du capteur B (T° de l'eau_ID 340) Et si le volet piscine est fermé ici isTrigger = true, operator = "==", property = "VOLET_PISCINE", type = "global-variable", value = "FERME" Alors : On lance la scène "Ouverture volet" ici hub.scene('execute', {[1] = 200, }) On envoie un mail hub.alert('email', {[1] = 2, }, 'OUVERTURE VOLET PISCINE LANCEE', false, '', false) Et on met le "Mode" en mode "Soleil" hub.profile(1, 'activateProfile') Le truc que je n'arrive pas à faire _je suis une buse en programmation_ c'est d'écrire la comparaison que j'ai surligné. En tous cas merci de ton aide, j'espère _je vois des vidéos et lis des Tutos Lua pour tenter de comprendre.
  7. Jojo je te remercie de tout ce mal que tu te donnes. Je ne sais ce qu'est GEA ; sur ma Yubii j'ai "Blocs" convertibles en "Lua" et Quick App … pas de GEA en vue. Le mode"Soleil" est le mode par défaut installé sur Yubii que j'ai renommé Soleil et d'autres Pluie (les volets ne se ferment plus partiellement) et Enfants (je n'ouvre pas leurs volets le matin si ils sont là" etc Dans le Lua c'est cette partie "isTrigger = true, operator = "==", property = "activeProfile", type = "profile", value = 1" Vois l'équivalent de toute la partie "Déclarations" en mode bloc, ce sera plus clair. Je me demande si la partie "comparaison de T°" ne doit pas être plutôt à la suite des "Déclarations" Plutôt que les "Actions" où l'on ne devrait avoir que le lancement du scénario "Ouverture de volet" et le message disant que c'est fait …. En fait la comparaison des T° est une condition de plus pour que le volet s'ouvre. Actuellement au fur et à mesure de l'avancement de la saison je change la T° extérieure (ici 16°C) qui devient 28°C en été : et c'est pour m'éviter çà que je cherche. Ceci dit si tu penses que je peux avoir accès à GEA (? les Quick Apps sur lesquelles j'ai calé) et que c'est plus simple c'est peut être à essayer.
  8. Oui c'est ce que j'ai actuellement. 310 après lever du soleil, le coucher je ne m'en occupe pas (la fermeture du volet n'est pas automatique pour des raisons de sécurité) Je n'utiliserai plus le FGMS mais les valeurs des sondes soi id 330 pour l'air et 334 pour l'eau. Les 2 dernières restent en l'état.
  9. suite ... Si la T° du FGMS 01 (Id 221) est > 16°C Si on est en mode "Soleil" Si la variable "Volet_piscine" est "Fermé"
  10. La variable est mise à jour par l'ouverture ou la fermeture du volet. Oui les ID T° est et eau sont bien celles là Le module qui ouvre est un FGS 224 le 1er relai commande ouverture et le 2ème la fermeture. Là je ne t'ai mis que les "déclarations" (conditions d'ouverture) et pas les actions. En fait les conditions ACTUELLES d'ouverture son : 310 minutes après lever du soleil
  11. Je ne sais pas si çà peut aller ? Il faut ajouter la condition ET si valeur T° capteur A > valeur T° capteur B. Les capteurs A et B que je renommerai sont les valeurs relevées par 2 sondes DS18B20 branchées sur un FGBS321. En tous cas merci encore de ta patience
  12. { conditions = { { isTrigger = true, operator = "==", property = "sunrise", type = "date", value = 310 }, { id = 221, isTrigger = true, operator = ">=", property = "value", type = "device", value = 16 }, { isTrigger = true, operator = "==", property = "activeProfile", type = "profile", value = 1 }, { isTrigger = true, operator = "==", property = "VOLET_PISCINE", type = "global-variable", value = "FERME" } }, operator = "all" }
  13. Jojo, merci de tes efforts pour m'aider, mais j'ai prévenu être une triple triple buse. J'ai transpiré il y a quelques temps pour utiliser un QA sensée récupérer des infos sur mon NAS Synology => sans succès. J'ignore totalement ce qu'est un GEA ??. Bon j'ai demandé du renfort aux tech Fibaro en leur donnant ma scène (en Lua) et leur demandant si il était possible d'ajouter …….. ce que recherché. On verra. Merci encore de ta patience. Bonne journée
  14. Ah aussi je me suis amusé à réaliser tous mes icônes en photographiant mes portes, mes volets, mes sirènes, mes pompes, mes caméras etc ainsi que pour les pièces pour personnaliser au max
  15. Savoyard pas tout jeune, ingénieur électricien et passionné d'informatique. Je ne jure plus que par Apple depuis 15 ans. J'ai domotisé ma maison avec la Yubii Home (ID HC3 Lite) et je suis un peu au bout de ses capacités, çà se ressent sur sa vitesse de réaction lorsque plusieurs scènes se télescopent ; mais au total je suis ravi çà fonctionne correctement. Ma plus grosse lacune est la programmation et j'avoue ne jamais avoir plongé dans Lua, ce qui limite la "puissance" de mes scènes qui ont toutes été écrites en mode "Bloc". Je fais assez souvent appel à l'aide Fibaro qui ne répond pas très vite mais toujours, avec quelques fois des lacunes : j'ai bien ris le jour où j'ai appris à un tech maison que le FG224 pouvait être paramètré (paramètre 164 de tête) pour que les 2 relais ne puissent pas être commandés en même temps (un relai pour ouvrir un volet piscine et l'autre pour le fermer). Là je cherche comment écrire une routine Lua, soi-disant simple d'après certains, qui permette une action lorsque la température d'un capteur est supérieure à la température d'un autre capteur : pour ajouter çà à la scène qui permet d'ouvrir le volet de la piscine si la T° extérieure est supérieure à la T° de l'eau. J'ai connecté 2 DS18B20 à un FGBS321 pour ces 2 mesures.
  16. Jojo : Je n'ai pas trouvé mon bonheur et je n'ai à peu près rien compris sur ces 2 liens qui parlent de Quick App sauf erreur. Quelqu'un peut il me fournir une simple routine écrite en Lua que j' intégrerai à ma scène et qui permet de réaliser une action si la valeur T° d'un capteur est supérieure à la valeur T1° d'un deuxième capteur. Je n'ai pas trouvé çà sur le Forum, peut être pas cherché au bon endroit.
  17. Peux tu me montrer un exemple en LUA, je peux tenter ?
  18. …. à moins que le "mode bloc" ne soit simplement que celui que j'utilise pour écrire tous mes scénarios ! Dans ce cas je ne vois pas (avec quels blocs) je peux écrire si T° capteur A > T° capteur B = action ?
  19. J'avais bien prévenu que j'étais une buse J'ignore totalement ce qu'est une scène en mode bloc. Bien sûr j'ai rédigé et ma Yubii utilise 34 scènes, mais j'ai beau "farfouiller" j'ignore absolument comment accéder à ce mode. Merci de ta patience.
  20. Merci JoJo, C'est une Yubii Home (l'équivalent de HC3L). Bonne nouvelle si c'est sans programmation, mais je n'ai pas trouvé comment le faire en direct avec l'application ? Bon je vais regarder de plus près, sans soute ai je manqué quelque chose. Merci encore et bonne journée
  21. Entre autres j'utilise ma Yubii Home pour commander l'ouverture automatique du volet de ma piscine à conditions qu'il fasse beau et assez chaud._j'ai des FGMS 001 au bons endroits_ et çà fonctionne correctement, mais en fonction de la saison je dois sans arrêt modifier les consignes dans le scénario. J'ai acquis un FGBS321 et 2 sondes DS18B20, l'une dans l'eau et l'autre dans l'air. Je voudrais que mon volet s'ouvre si la température de l'air est supérieure à celle de l'eau … et avec les autres conditions de beau temps par ailleurs. Je ne sais pas comment comparer les valeurs des divers capteurs ou sonde avec la valeur du capteur de T° de l'eau. Est ce possible ? Merci de vos lumières à un archi nul en programmation … bien qu'intéressé d'apprendre et volontaire.
  22. 9 appareils Nice, 34 appareils zwave et 34 scènes, je suis presque au taquet. La télécommande Fibaro et le bouton sont utilisés pour différentes scènes. 3 sirènes (on n'est jamais trop prudent ;=)) ) Utilisée pour mes gérer mes volets, pour des alarmes intrusions, pour commander le volet de ma piscine et les filtrations été ou hiver. J'utilise par ailleurs un NAS Synology DS218 qui gère aussi 2 caméras de surveillance. Mes scènes ont toutes été programmées avec le logiciel Fibaro …. je suis archi nul en programmation Lua.
×
×
  • Créer...