Aller au contenu

Messages recommandés

Posté(e) (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é par Jean Louis DURET
Complément info
Posté(e)

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.

Posté(e)

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

 

Ecran 2025-04-15 à 08.45.11.jpg

Ecran 2025-04-15 à 08.41.06.jpg

Ecran 2025-04-15 à 08.40.51.jpg

Posté(e)

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.

Posté(e)

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.

Posté(e)

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

:wacko: La même erreur encore..

Ecran 2025-04-15 à 15.37.22.jpg

Ecran 2025-04-15 à 15.37.08.jpg

Ecran 2025-04-15 à 15.41.18.jpg

Posté(e)

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

×
×
  • Créer...