Aller au contenu

bencol

Membres confirmés
  • Compteur de contenus

    106
  • Inscription

  • Dernière visite

Messages posté(e)s par bencol


  1. @Domodial :

     

    pb1 : il ne faut pas mettre cette ligne dans le mainloop mais dans le script des boutons.

    pb2 : le module doit forcément exister car ta fibaro le voit comme un module de type lampe. Vérifie avec HC2Toolkit si il existe (peut d'ailleurs caché). Sinon même méthode qu'avec Yannick.

    vos box ont un comportement bizarre ou alors il faudrait faire le ménage dans les modules fantômes.


  2. Il n'y a pas d'impact, je teste simplement si le device est allumé avant de l'éteindre. Dans tous les cas, il va l'éteindre.

    Pas contre, il n'y a pas de raison pour mettre le moteur zwave en type lampe. Il suffit de le faire sur le device uniquement.


  3. @971jmd : peux tu me préciser àquoi correspond la ligne 83 chez toi. Si elle correspond àla condition State==1, cela signifie que State est null. Je n'ai pas réussi àreproduire ce cas de mon coté. Remonte le code en mettant un debug sur les variables State1, State2 et State3 pour voir.


  4. => publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français

     

     

    Le principe de ce bout de code est le suivant : simuler une présence dans votre logement en s'appuyant sur votre mode de vie des mêmes journées les précédentes semaines. Le programme analyse le comportement des lumières des 2 dernières semaines (à  partir de l'historique de consommation) et simule par réplication une vraie vie (la vôtre !) dans votre logement.

     

    3 prérequis :

    - il est nécessaire de vérifier que les modules de type lampe sont bien déclarés comme lampe. Pour cela il faut aller dans la configuration avancée des modules concernées et sélectionner dans appareil commandé : Eclairage ou Lampe de chevet ou Lampe de jardin,....

    - ajouter pour les modules qui le permettent le suivi de la consommation électrique (attention, il faudra attendre au moins 2-3 semaines que cela soit efficace)

    - créer une variable globale "Simu_presence" avec comme possibilité ON ou OFF

     

    Le code ci-dessous peut être placé dans la boucle principale dans un module virtuel. En pièce jointe le module à  importer.

    
    -----------------------
    -- fonction d'arrondi --
    ------------------------
    function math.round(num, idp)
        return tonumber(string.format("%."..idp.."f", num ));
    end
    
    --------------------
    -- Debug function --
    --------------------
    function Debug(message, color)
        if (color == nil) then color = "white";end;
        fibaro:debug(string.format("<font color=" .. color .. ">" .. message .. "</font>"));
        return;
    end
    
    ------------------------------------------------------------------------------------------------------------------
    -- Fonction de récupération de l'historique de l'allumage d'une lampe --
    ------------------------------------------------------------------------------------------------------------------
    local function CollecteStatus(DureeHistorique, Device)
    
        local TimeStart = DureeHistorique + 300;        -- à  la date de l'historique plus 5 min
        local TimeEnd = DureeHistorique - 300;        -- à  la date de l'historique moins 5 min
        
        -- init tableaux et variables
        local TabMeasure = {};    -- tableau de mesures timestamp/activité
        local HC2 = Net.FHttp("127.0.0.1",11111);
    
        if (Device ~= nil) then
            Response, status, errorCode = HC2:GET("/api/energy/now-" .. TimeStart .. "/now-" .. TimeEnd .. "/summary-graph/devices/power/" .. Device);
        end;
        
        if (tonumber(errorCode)==0 and tonumber(status)==200)
        then
            TabMeasure = json.decode(Response);    -- chargement des données dans une table
            Debug("Nb mesures : " .. table.getn(TabMeasure) .. " (historique il y a " .. DureeHistorique/86400 .. " jours)","yellow");
            local State = 0;
            -- scan la période concernée les semaines précédente
            for i = 1, table.getn(TabMeasure) do
                local Heure = tonumber(TabMeasure[i][1])/1000;    -- collecte de l'heure et conversion des millisecondes en secondes            
                if (tonumber(TabMeasure[i][2]) > 0)        -- il y a une activité
                then
                    State = 1;
                end            
                Debug("Mesure " .. i .. " : " .. os.date("%A %d/%m/%y %H:%M",Heure) .. " => " .. State);            
            end
            
            return State; -- retour de la fonction
        else
            Debug("fail : ".. status .. " - error : ".. errorCode);
        end
    end
    
    
    -- Scan de tous les devices si alarme active
    if (fibaro:getGlobalValue("Simu_presence") == "ON")
    then
        Debug("START REPLICATOR....");
          fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1062);
          fibaro:log('Simulation active');
        Debug("Alarme active => Scan....");
        for device=1, 1000, 1 do
            if (fibaro:getValue(device, "isLight") == '1')        -- si type lampe
            then
                -- lancement de la fonction de collecte des informations d'allumage ou d'extinction
                Debug("***** Collecte de la consommation électrique pour la lampe " .. device .. " " .. " *****", "yellow");
                local StateSem1 = CollecteStatus(7 * 86400, device);    -- appel de la fonction => 1 semaine avant
                local StateSem2 = CollecteStatus(14 * 86400, device);    -- appel de la fonction => 2 semaines avant
                
                -- si lampe active les dernières semaines et lampe actuellement éteinte => allumage
                if (StateSem1 == 1 or StateSem2 == 1)
                then
                    if (tonumber(fibaro:getValue(device, "value")) == 0)    -- la lampe est éteinte
                    then
                        fibaro:call(device, "turnOn");            -- allumage
                        fibaro:call(device, "setValue", "50");              
                        Debug("Allumage Lampe : " .. device, "green");
                    else
                        Debug("Pas d'action, lampe : " .. device .. " déjà  allumée", "green");
                    end
                end
                
                -- si lampe inactive les dernières semaines et lampe actuellement allumée => extinction
                if (StateSem1 == 0 and StateSem2 == 0)
                then
                    if (tonumber(fibaro:getValue(device, "value")) > 0)    -- si le device est allumé
                    then
                        fibaro:call(device, "turnOff");            -- extinction
                        Debug("Extinction Lampe : " .. device, "red");
                    else
                        Debug("Pas d'action, lampe : " .. device .. " déjà  éteinte","red");
                    end
                end
            end
        end
    else
        fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1061);
          fibaro:log('Simulation inactive');
        Debug('Simulation inactive');
    end
    
    fibaro:sleep(120000); -- temporise 2 minutes
    
    
    

    Presence_Replicator v1.vfib

    Presence_Replicator v2.vfib

    • Upvote 10

  5. Avec un microcontroleur Wifi ESP8266 (4 €) + une sonde DHT11 (1 €).

    Vous trouverez plein de tutos sur internet sur ce sujet. Cela permet de faire une sonde qui communique en Wifi (autonomie sur pile d'environ 2 ans en mode deep sleep).

     

    Je me suis monté qqs sondes qui émettent toutes les 2 minutes températures et humidité à  un serveur HTTP doté d'une base MySQL puis s'endort 2 minutes quasi totalement pour économiser les piles.

     

    De son coté, la HC2 interroge régulièrement la base MySQL pour exploiter les mesures dans des scènes

     

    Et franchement c'est bluffant de voir à  quel point ces composants aussi petits peuvent faire !

     

    Cela fonctionne aussi pour des détecteurs de porte, il suffit d'acheter des capteurs d'entrée de gamme à  qqs euros pour récupérer le capteur magnétique, le connecter à  un ESP8266 et le tour est joué.

     

    Cerise sur le gateau, on peut le programmer en LUA. C'est pas beau ça !


  6. Pour les scenes qui ne fonctionnent pas, il faut supprimer les espaces et commentaires placés devant la déclaration des properties et variables globales.

    -- commentaires scènes xxxx
    -- ....
    
    
    --[[
    %% properties
    
    %% globals
    --]]
    

    doit devenir

    --[[
    %% properties
    
    %% globals
    --]]
    

    De mon coté, les scènes avec trigger refonctionnent avec cette modif.

     

    @Chlorure

    @banzai861


  7. Bon c'est quand même dingue, je passe 2 jours à  essayer de trouver et c'est au moment où j'appelle à  l'aide que la solution me passe brutalement par la tête.

     

    La solution c'est :

    TabJson = "[[1427560251000,18.70],[1427560560000,18.60],[1427561467000,18.70],[1427562051000,18.70]]"
    fibaro:debug(TabJson );
    
    
    TabMesure = json.decode(TabJson );
    fibaro:debug(TabMesure[4][1]);   -- 4ème groupe 1ère valeur
    fibaro:debug(TabMesure[4][2]);   -- 4ème groupe 2ème valeur
    fibaro:debug(table.getn(TabMesure));  -- lg du tableau
    
×