Jean Louis DURET Posté(e) lundi à 20:34 Auteur Signaler Posté(e) lundi à 20:34 (modifié) 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. Modifié lundi à 20:37 par Jean Louis DURET Complément info
Barelle Posté(e) lundi à 20:39 Signaler Posté(e) lundi à 20:39 Le QA proposé se comporte comme un thermomètre qui affiche la différence entre les valeurs de deux devices. Installe le, et dans ton cas, change le paramètre deviceId1 à la valeur 330 et le paramètre deviceId2 à la valeur 340. Ce QA te retournera la différence des valeurs et tu pourras l'interroger dans tes scènes comme n'importe quel thermomètre.
Jean Louis DURET Posté(e) lundi à 20:52 Auteur Signaler Posté(e) lundi à 20:52 OK, je testerai début semaine prochaine, car je pars demain tôt. Merci de ton aide.
Jean Louis DURET Posté(e) lundi à 21:00 Auteur Signaler Posté(e) lundi à 21:00 Question con, dois je remplacer deviceId1 et deviceI2 à chaque occurence dans ton programme ?
Jean Louis DURET Posté(e) mardi à 08:37 Auteur Signaler Posté(e) mardi à 08:37 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
Barelle Posté(e) mardi à 08:45 Signaler Posté(e) mardi à 08:45 Cette erreur à l'initialisation signifie que la valeur de l'un des paramètres "deviceId1" ou "deviceId2" ne correspond pas à une sonde de température. Note : il est inutile de recopier le code du QA dans les réponses, par contre les valeurs des paramètres, la correspondance entre les id et les appareils, et l'affichage du QA pourraient être plus utiles.
Jean Louis DURET Posté(e) mardi à 09:29 Auteur Signaler Posté(e) mardi à 09:29 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.
Barelle Posté(e) mardi à 09:31 Signaler Posté(e) mardi à 09:31 Une copie d'écran de l'onglet paramètres du QA.
Jean Louis DURET Posté(e) mardi à 09:33 Auteur Signaler Posté(e) mardi à 09:33 Pas trouvé d'onglet paramètres dans le QA
Barelle Posté(e) mardi à 09:36 Signaler Posté(e) mardi à 09:36 Merci, et pourrais-tu mettre une copie de l'onglet "Variables" du QA.
Jean Louis DURET Posté(e) mardi à 09:54 Auteur Signaler Posté(e) mardi à 09:54 Dois je remplacer ici les deviceId par leur ID 209 et 221 ?
Barelle Posté(e) mardi à 09:55 Signaler Posté(e) mardi à 09:55 Tu devrais avoir ceci : Et tu peux supprimer les variables "209" et "221" inutiles.
Jean Louis DURET Posté(e) mardi à 10:00 Auteur Signaler Posté(e) mardi à 10:00 Fait, relancé et toujours même message. Je vais tenter redémarrer Yubii
Jean Louis DURET Posté(e) mardi à 10:05 Auteur Signaler Posté(e) mardi à 10:05 Après redémarrage la même erreur.
Jean Louis DURET Posté(e) mardi à 13:00 Auteur Signaler Posté(e) mardi à 13:00 Excuse moi j'étais en vadrouille.
Jean Louis DURET Posté(e) mardi à 13:01 Auteur Signaler Posté(e) mardi à 13:01 Curieusement, çà fait 2 fois que je les supprime, 209 et 221 réapparaissent dans Variables
Barelle Posté(e) mardi à 13:16 Signaler Posté(e) mardi à 13:16 Dans la console, quels sont les messages du QA ?
Barelle Posté(e) mardi à 13:21 Signaler Posté(e) mardi à 13:21 Bon j'ai trouvé, tu as modifié le code, aussi je te suggère de supprimer le QA existant, d'importer la version ci-dessous, et enfin de déclarer les variables comme ci-dessus . Comparaison-0.12.fqa
Jean Louis DURET Posté(e) mardi à 13:41 Auteur Signaler Posté(e) mardi à 13:41 Bon j'ai rechargé le fia, remplacé 3 deviceId1 et 3 deviceId2 par 209 et 221, ensuite dans Variables j'ai changé les valeurs par 209 et 221 La même erreur encore..
Jean Louis DURET Posté(e) mardi à 13:43 Auteur Signaler Posté(e) mardi à 13:43 J'avais supprimé les variables 209 et 221 et elles réapparaissent immédiatement. Relancé le programme aussi
Jean Louis DURET Posté(e) mardi à 13:46 Auteur Signaler Posté(e) mardi à 13:46 Bingo !! Çà marche : comme un âne j'avais soigneusement remplacé les deviceId dans le programme Là je me suis contenté de charger le fqa et changé les valeurs variables
Jean Louis DURET Posté(e) mardi à 13:47 Auteur Signaler Posté(e) mardi à 13:47 Millions de mercis et pour ton infinie patience.
Messages recommandés