Aller au contenu
Lionel57

Ma Solution Pour Gérer Le Chauffage À Partir Du Panneau De Chauffage

Recommended Posts

L’idée, utiliser le panneau de chauffage pour sa souplesse pour la gestion de mes chaudières, sans en subir les conséquences. Toutes les consignes sont utilisées  normalement (consignes courantes, consignes vacances et consignes provisoires) pour toutes zones existante.

 

Pour chaque zone, un pré-requis, créer une variable prédéfinie appelé id_Chauf_pièce, où pièce correspond au nom de la zone de consigne(ex : pour une zone définie dans le panneau de chauffage nommée « Salon », on crée une variable prédéfinie appellée « id_Chauf_Salon »).

 

Pour chaque variable, on crée :

  - une valeur D_xxx où xxx est l’ID du module qui déclenche la chaudière (pour ma part, un FGS211 relié à  chaque chaudière)

  - une valeur T_xxx où xxx est l’ID du module qui renvoie la température courante de la zone

  - une ou plusieurs valeur Z_xxx où xxx correspond aux ID des modules qui contrôlent les radiateurs ou SRT321 (vannes Danfoss dans mon cas). En cas d’absence d’un de ces modules dans une zone, on met Z_000

 

On crée une variable prédéfinie :

  - Present (Oui/Non)

  - Fenetre_ouverte (Oui/Non)

  - JourChome (Oui/ Non)

 

On crée un module virtuel avec un bouton nommé « rafraichir » et on colle le code LUA suivant :

Adresse_IP="192.168.1.xxx";
Utilisateur="admin"
MotDePasse="12345678";

function EnumZone() -- Relève l'ensemble des zones du panneau de chauffage
   local a, b, c = 0;
   local p = { };
   local i = 0;
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/panels/heating");
   a, b = string.find(result, "name", 1);
   while a do
      b, c = string.find(result, ",", a + 6);
      i = i + 1;
      table.insert(p, string.sub(result, a + 7, b -2));
      a = b + 1;
      a, b = string.find(result, "name", a);
   end;
   return p;
end

function IdZone(piece) -- Récupère l'ID d'une zone
   local a, b, c = 0;
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/panels/heating");
   a, b = string.find(result, piece, 1);
   b, c = string.find(result, "id", a - 18);
   return string.sub(result, b + 4, a - 10);
end

function TempActuelle(piece) -- Relève la température actuelle d'une zone
   local a, b, c, d = 0;
   local T = "";
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/globalVariables");
   a, b = string.find(result, "id_Chauf_" .. piece, 1);
   b, c = string.find(result, "T_", a);
   c, d = string.find(result, "\"", ;
   T = string.sub(result, b + 2, c - 1);
   return fibaro:getValue(T, "value");
end;

function TempMini(Id)  -- Recherche la température mini d'une zone, pour la définir comme température de consigne en cas d'absence
   local c, d, e, i =0;
   local t="";
   local TM = "99";
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/panels/heating?id=" .. Id);
   for i = 1, 4 do
      c, d = string.find(result, "temperature", e);
      e, d = string.find(result, "}", c);
      t = string.sub(result, c + 13, e-1);
      if tonumber(t) < tonumber(TM) then TM = t end;
   end;
   return TM;
end;

function TempProv(Id)
   local a, b, c, d =0;
   local TP, TM = "";
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/panels/heating");
   a, b = string.find(result, "id\":" .. Id, 1);
   b, c = string.find(result, "handTemperature", a);
   c, d = string.find(result, ",", ;
   TP = string.sub(result, b+17, c-1);
   a, b = string.find(result, "handTimestamp", c);
   b, c = string.find(result, ",", a);
   TM = string.sub(result, a+15, b-1);
   if tonumber(TM) < os.time() then TP = "0" end;
   return TP;
end;

function TempVac(Id)
   local a, b, c, d =0;
   local TP, TM = "";
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/panels/heating");
   a, b = string.find(result, "id\":" .. Id, 1);
   b, c = string.find(result, "vacationTemperature", a);
   c, d = string.find(result, "}", ;
   TP = string.sub(result, b+21, c-1);
   return TP;
end;

function TempConsigne(Id) -- Défini la température de consigne pour une zone
   local T = "";
   if fibaro:getGlobalValue("Present") == "Oui" then
      T = TempProv(Id); 
      if T == "0" then
         local a, b, c, d = 0;
         local h, heureCourante, e, programme  = "";
         local jour = "";
         local currentDate = os.date("*t");
         local HC2= Net.FHttp(Adresse_IP);
         HC2:setBasicAuthentication(Utilisateur, MotDePasse);
         local result, status, errorCode = HC2:GET("/api/panels/heating?id=" .. Id);
         if fibaro:getGlobalValue("JourChome") == "Oui" then
            jour = "sunday";
         else
            jour = string.lower(os.date("%A"));
         end;
         a, b = string.find(result, jour, 1);
         b, c = string.find(result, "}}", a);
         programme = string.sub(result, a-1, ;
         b = 1;
         if tonumber(currentDate.hour)<10 then e = "0" else e = "" end;
         heureCourante = e .. currentDate.hour
         if tonumber(currentDate.min)<10 then e = "0" else e = "" end;
         heureCourante = heureCourante .. ":" .. e .. currentDate.min;
         for a = 1, 4 do
            h = "";
            b, c = string.find(programme, "hour", b+1);
            c, d = string.find(programme, ",", ;
            if tonumber(string.sub(programme, b+6, c-1))<10 then e = "0" else e = "" end;
            h = e .. string.sub(programme, b+6, c-1);
            b, c = string.find(programme, "minute", ;
            c, d = string.find(programme, ",", ;
            if tonumber(string.sub(programme, b+8, c-1))<10 then e = "0" else e = "" end;
            h = h .. ":" .. e .. string.sub(programme, b+8, c-1);
            if h < heureCourante then
                c, d = string.find(programme, "temperature", ;
                e, d = string.find(programme, "}", ;
                T = string.sub(programme, c + 13, e-1);
            end;
         end;
         if T == "0" then
             jour = string.lower(os.date("%A", os.time()- 24 * 60 * 60));
             a, b = string.find(result, jour, 1);
             b, c = string.find(result, "}}", a);
             programme = string.sub(result, a-1, ;
             b = 1;
             a, b = string.find(programme, "night", 1) ;
             a,b = string.find(programme, "temperature", a);
             e, d = string.find(programme, "}", a);
             T = string.sub(programme, a + 13, e-1);
         end;
      end;   
   else
      T = TempVac(Id);
      if T == "0" then T = TempMini(Id) end;
   end
   return T;
end

function EnumDeclencheur() -- Enumère les modules qui enclenchent les chaudières ou radiateurs électriques d'une zone (FGS211)
   local a, b = 0;
   local Declencheur = "";
   local Exist = false;
   local i, j = 0;
   local D = { };
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/globalVariables");
   a, b = string.find(result, "D_", 1);
   while a do
      i = i + 1 ;
      b, c = string.find(result, "\"", a);
      Declencheur = string.sub(result, a + 2, b - 1);
      j = 1;
      Exist = false;
      while D[j] do
        if D[j] == Declencheur then Exist = true end;
        j = j + 1;
      end
      if not Exist then table.insert(D, Declencheur) end;
      a, b = string.find(result, "D_", a + 2);
   end;
   return D;
end

function DeclencheurZone(piece) -- Recherche l'ID du déclencheur de chaudière pour une zone
   local a, b, c = 0;
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/globalVariables");
   a, b = string.find(result,"id_Chauf_" .. piece, 1);
   a, b = string.find(result, "D_", a);
   b, c = string.find(result, "\"", a);
   return string.sub(result, a + 2, b - 1);
end

function EnumSourceZ(piece) -- Enumère toutes les vannes ou thermostat d'une zone
   local a, b, c, d  = 0;
   local Cons = { };
   local HC2= Net.FHttp(Adresse_IP);
   HC2:setBasicAuthentication(Utilisateur, MotDePasse);
   local result, status, errorCode = HC2:GET("/api/globalVariables");
   a, b = string.find(result, "id_Chauf_" .. piece, 1);
   a, b = string.find(result, "Z_", a);
   while a do
      b, c = string.find(result, "\"", a);
      table.insert(Cons, string.sub(result, a + 2, b - 1));
      d = a;
      a, b = string.find(result, "Z_", a + 2);
      if a then 
        b, c = string.find(result, "id_Chauf_", d);
        if b then
           if b < a then a = nil end;
        end;
      end;
   end;
   return Cons;
end;

function Inertie(piece, TempCons, TempAct)
   return "0";
end;

function DecInertie(piece, TempCons, TempAct)
end;

function DefInertie(piece, TempCons, TempAct)
end




local declencheur = EnumDeclencheur();
if fibaro:getGlobalValue("Fenetre_ouverte") == "Non" then
   local i,j,k = 1;
   local l = 0;
   local piece = EnumZone();
   local besoin = {};

   while piece[i] do -- Pour chaque zone du panneau de chauffage
      j = 1;
      EnumSource = EnumSourceZ(piece[i]);
      while EnumSource[j] do
         if EnumSource[j] ~= "000" then
            fibaro:call(EnumSource[j], "setTargetLevel", TempConsigne(IdZone(piece[i])));   -- Défini les consignes de température pour les vannes Danfoss ou thermostat pour chaque zone (piece[i])
         end;
         j = j + 1;
      end;
   
      l = 0;
      k = 1;
      while declencheur[k] do
         if declencheur[k] == DeclencheurZone(piece[i]) then l = k end; -- Repère le l'ID du déclencheur de chauffage pour la zone étudiée
         k = k + 1;
      end;

      -- besoin{} établi si, pour un déclencheur, un besoin de chauffage est nécessaire -> Si température actuelle inférieur à  température consigne - 0.7, on déclenche un besoin (envoi de "turnOn" au déclencheur).
      --  Si besoin=nil, si toutes les zones attachées ont atteint la température, on coupe le besoin (envoi de "turnOff" sur le déclencheur), sinon, on laisse faire
      if tonumber(TempActuelle(piece[i])) < (tonumber(TempConsigne(IdZone(piece[i]))) - 0.7) then
         besoin[l] = "turnOn";
         DecInertie(IdZone(piece[i]), TempConsigne(IdZone(piece[i])), TempActuelle(piece[i]))          
      else
         if not besoin[l] and tonumber(TempActuelle(piece[i])) < tonumber(TempConsigne(IdZone(piece[i]))) - tonumber(Inertie(IdZone(piece[i]), tonumber(TempConsigne(IdZone(piece[i]))), TempActuelle(piece[i]))) then 
            besoin[l] = "standby";
            --DefInertie(piece[i], TempConsigne(IdZone(piece[i])), TempActuelle(piece[i]))
         else
            DefInertie(IdZone(piece[i]), TempConsigne(IdZone(piece[i])), TempActuelle(piece[i]))          
            if not besoin[l] then
               besoin[l] = "turnOff";
            end;
         end;
      end;  
      --fibaro:debug(tostring(tonumber(TempConsigne(IdZone(piece[i]))) - tonumber(Inertie(piece[i], tonumber(TempConsigne(IdZone(piece[i])))))));
      i = i + 1;
   end;
   i = 1;
   while declencheur[i] do
      if besoin[i] ~= "standby" then 
         fibaro:call(declencheur[i], besoin[i]); -- Envoi la consigne au déclencheur
      end;
      i = i + 1;
   end;
else
   local k = 1;
    while declencheur[k] do
       fibaro:call(declencheur[k], "turnOff"); -- Si Fenetre_ouverte alors tout déclencheur à  "turnOff"
       k = k + 1;
    end; 
end;

On adaptera les 3 variables (Adresse_IP, Utilisateur, MotDePasse)

 

Les fonctions Inertie, DecInertie et DefInertie ne sont pas partagées pour le moment, en cours de développement...

 

Petite précision, ce code a été écrit en 4.018, alors que JSON ne fonctionnait pas.

 

Enfin, on créera une scène par bloc qui appuiera toutes les minutes sur le bouton "Rafraichir" du module virtuel en omettant pas de cocher la case "Lancer au démarrage de la HC2"

 

Je crois que je n'ai rien oublié

 

  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

Ahhh, cela pourrait du coup remplacer mes modules liés en attendant qu'ils les réparent dans la 4.020...

Par contre si je comprend bien, si on a plusieurs pièces dans une zone, il faut les séparer et mettre une pièce par zone max, c'est bien ça ?

Partager ce message


Lien à poster
Partager sur d’autres sites

En faite, je vais supprimer l'association de mon srt321 avec mes FGS211 et faire en sorte que quand je modifie la consigne sur celui ci ou sur une vanne Danfoss, ça devienne une consigne manuelle pour 1 heure pour la zone. (pour ça, j'avais besoin de JSON et celui ci est de retour...)

 

Dans ma configuration, je règle la température par pièce (je ne chauffe pas la chambre la journée par exemple) donc zone ou pièce, pour moi, c'est pareil (je ne me soucis pas du paramétrage des pièces pour une zone dans le tableau de chauffage). Si plusieurs pièces sont concernées pour une zone, il suffit de rajouter autant de Z_xxx (xxx étant l'ID d'une vanne) que nécessaire dans la variable prédéfinie de la zone

Partager ce message


Lien à poster
Partager sur d’autres sites

Je vais tout réécrire en utilisant JSON, je pense que le code sera plus clair.

Partager ce message


Lien à poster
Partager sur d’autres sites

Lionel,

Je n'y comprends rien au LUA (pour l'intant), mais le code que tu as fais permettrait-il d'interagir avec les panneaux de chauffage en fonction de variables ou de l'état de devices ?

Je pense aux cas suivants : Variable Vacances = Oui, alors utiliser la fonction Holliday du panneau de chauffage. Lorsque vacances = Non, sortir de ce mode. En fonction du status d'un device, interagir (exple : fenêtre ouverte => passer en manuel durant une période donnée)

Si oui, tu m'auras fais regretter de ne pas avoir acheté une HC2  :15:

Partager ce message


Lien à poster
Partager sur d’autres sites

@jojo, c'est en effet le but recherché par lionel et le mien aussi mais j'ai été coupé dans mon élan par le plantage de ma box avec l'utilisation de l'API.

L'utilisation d'un device virtuel agissant sur le panneau de chauffage pour le mode vacance et surtout le mode modification ponctuel de la température pendant une période de temps serait top. C'est idiot car cette fonction existe mais uniquement en passant par l'interface du navigateur.

 

Je ne sais pas si c'est du à  cette nouvelle version mais je suppose vu car j'ai essayé de partir du code de Jossalf et cela me fait planter la box.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai trouvé que l'interface de gestion de chauffage est bien pensé, mais que la façon de le géré était un peu tortueux, voir complètement abstraite (surtout que j'ai 2 chaudières). 

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut à  tous, je suis en train de m'intéresser à  la gestion de mon chauffage et à  l'optimisation de mes conso de gaz et suis tombé sur ton code Lionel57. Très intéressant. 

 

J'ai une question, j'ai une chaudière vieille de 12 ans donc non pilotable avec production d'eau chaude donc je ne peux pas l'arrêter, mais je pourrais bypasser uniquement le connecteur de chauffage sans toucher à  l'eau chaude. j'ai sur tous mes radiateurs des têtes DANFOSS LC13. j'avais acheté en prévision un SRT321 mais je ne l'ai jamais utilisé ni jamais installé. Pour moi et au vu de ce que j'ai pu lire, les LC13 régulent toutes seules leur zone respective.

 

Y at-il un intérêt de coupler les LC13 avec le SRT321 ? et de connecter la chaudière avec un FGS ou un autre module de chez HORSTMANN (j'ai également un Centaur Plus C17) ?

 

Quelqu'un peut-il m'éclairer avant que je ne fasse la connerie (ou pas !) de revendre mon kit Horstmann ?

 

Merci pour votre retour

Partager ce message


Lien à poster
Partager sur d’autres sites

A mon sens, si tous tes radiateurs ont une LC13, le thermostat est inutile. Par contre, on conseille généralement d'avoir un radiateur tout le temps ouvert pour éviter de fatiguer le circulateur de la chaudière si toutes tes LC13 sont fermées. 

Cela dit tu peux utiliser ton thermostat pour mettre une température à  16 quand tu es au boulot ou en vacances. Même si tu peux le faire via un scénario et tes LC13. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Bono2007 pour ton retour. Mon circuit de chauffage est prévu pour ne pas fatiguer le circulateur. par d'inquiétude de ce côté là  je connais la musique !

 

Pour ce qui est du thermostat, le panneau de chuffage fait l'affaire pour gérer les absence et les congés et tout ça .. d'ailleurs, je l'utilise actuellement pour gérer les températures de mes zones et les périodes de la journée et ça fonctionne très bien.

Le seul souci que je vois c'est qu'en cas de radical de température extérieure (par exemple : toute la semaine ou a eu du brouillard et une température qui ne dépassait pas les 5° et hier comme par magie on est monté à  23° avec un grand soleil) ou bien quand par exemple en pleine hiver si j'ai décidé de mettre la température à  19° par ce que personne n'est présent et que l'un de mes enfants rentre à  la maison parce qu'il n'a pas cours et qu'il a froid, pouvoir simplement actionner le thermostat pour augmenter la température de consigne à  la place d'aller dans le navigateur , puis HC puis authentification puis panneau de chauffage puis augmenter la température de consigne de manière manuel. 

 

Est ce que ce genre de chose est envisageable avec des LC13 et le script de lionel57 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as une option, tu crées un bouton Do ( https://ifttt.com/myrecipes/do ) qui avec Maker fait la modif que tu veux sur les LC13, et tu l'installes sur le portable d'un de tes enfants ^^

Attention à  ne pas trop laisser libre accès aux enfants au thermostat, tu pourras te retrouver avec des surprises ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

ouais mais ça justement je ne veux pas qu'ils utilisent leur portable pour toucher au chauffage. la seule chose que les autorise àfaire c'est d'allumer les lampes et fermer les volets.

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec la fonction Do tu peux juste limiter à  mettre le chauffage à  XX° par exemple. Tu peux aussi agir sur la présence du téléphone à  proximité pour agir sur le chauffage ( quand il rentre ). 

Partager ce message


Lien à poster
Partager sur d’autres sites

mouais bof, c'est chiant d'avoir tout le temps son smartphone sur soi  pour toujours tout faire.. piloter une maison depuis l'extérieur oui.. Automatiser tout à  l'extrême j'achète mais les quelques actions basiques comme augmenter le chauffage de 1° ou allumer une cafetière je trouve que ça garde un charme quand même quand c'est fait à  l'ancienne non....

 

Je vais essayer de faire avec le SRT321 ce que je voudrais qu'il fasse et on verra bien... merci Bono à  plus

 

Par contre je ne connais pas ifttt. il faut créer un compte ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

oui, il faut créer un compte gratuit

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut grand Jojo, ça va ?  

 

je viens de regarder mais je n'y entends absolument rien à  comment ça fonctionne. tu sais s'il y a un tuto quelque part sur le forum ?

Partager ce message


Lien à poster
Partager sur d’autres sites

àma connaissance, il n'y en a pas, sur comment créer un compte, mais créer un compte est simple

Egalement créer les premiers receipt : j'ai commencé par stocker dans une feueille xls (google sheet) tous les sms que je reçois et envoie. Ca ne va pas changer ma vie, mais c'est une sorte d'historique de tous mes SMS, ça peut toujours servir ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer le compte ça va ... pas eu trop de mal merci ... mais le script alors là? ??

Envoyé de mon SM-G928F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

commence avec quelque chose de simple et inutile pour te faire la main

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci jojo

Envoyé de mon SM-G928F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Il faut utiliser Makers chez IFTTT. 

 

Voir ici dans un premier temps : http://www.abavala.com/l-interface-ifttt-generique-est-arrivee-les-requetes-http-pour-les-makers/

 

Voilà  une fonction qui marche, en LUA :

function ifttt(trigger)
local httpClient = net.HTTPClient({ timeout = 2000 });
local url = 'https://maker.ifttt.com/trigger/'..trigger..'/with/key/kkkkkkkkkk';
--debug url
print(url);
httpClient:request(url, {
success = function(response)
if tonumber(response.status) == 200 then
print("Updated at " .. os.date());
else
print("Error " .. response.status)
end
end,
error = function(err)
print('error = ' .. err)
end,
options = {
method = 'GET'
}
});
end

Partager ce message


Lien à poster
Partager sur d’autres sites

salut salut, 

 

je reviens sur le code de Lionel57, es-tu là  ?????

 

Je n'arrive pas à  comprendre comment fonctionne tout bouton "rafraichir". J'ai une question : si par exemple depuis le VD que tu as créé on pouvais changer la température de consigne ce serait top dans les pièces définies. mais comment on peut faire ?

 

je pensais que ça aller m'aider mais en fait non je reste un peu sur ma fin.

 

Merci pour ton aide si tu peux m'aider

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

J'ai jeté un oeil au code de Lionel, pourquoi tu modifies les consignes des danfoss ? Normalement, si le danfoss est le thermostat principal de la pièce, et si la pièce est dans la zone, le HC2 modifie lui même la consigne du danfoss (et voire même il augmente la température 2h avant par palier jusqu'à  la température du panneau à  la bonne heure).

 

Je suis en train d'essayer d'adapter le script pour piloter des radiateurs elec avec fil pilote qubino.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon j'ai abandonné le code de Lionel, et je me suis démerdé tout seul, j'ai utilisé un thermostat d'ambiance SRT321 que j'ai mis en place dans mon salon, il est donc géré automatiquement par mon panneau de chauffage. Pour les actions manuelles, si pendant un hiver rude et qu'on se tape des -40°, j'ai créé une petite scène qui associe les consignes données au SRT321 en bougeant la molette à  mes LC13 présentes dans ma pièce :

--[[
%% properties
267 value
%% globals
--]]
local srt = 267
local vanne1 = 68
local vanne2 = 174
local vanne3 = 176

fibaro:call(vanne1, 'setTargetLevel', fibaro:getValue(srt, 'value'))
fibaro:call(vanne1, 'setTime', 0)
fibaro:call(vanne2, "setTargetLevel", fibaro:getValue(srt, 'value'))
fibaro:call(vanne2, 'setTime', 0)
fibaro:call(vanne3, "setTargetLevel", fibaro:getValue(srt, "value"))
fibaro:call(vanne3, 'setTime',0)

fibaro:debug("température de consigne : "..fibaro:getValue(srt, 'value').." °")
fibaro:debug("temps de consigne : "..(fibaro:getValue(srt, 'timestamp')).." ")
fibaro:debug("température de consigne : "..fibaro:getValue(vanne1, 'value').." °")
fibaro:debug("temps de consigne : "..(fibaro:getValue(vanne1, 'timestamp')).." ")

et afin de limiter les réglages de température de consignes trop élevées (j'ai des enfants qui ont l'impression des fois que chauffer une pièce à  35 ° quand ils ont froid est la bonne solution !) j'ai créé une petite scène qui scrute la température de consigne envoyée au LC13 et qui m'alerte si la température est trop élevée (au delà  de 24 pour le salon et au delà  de 21 pour la chambre) tout en la remenant à  une température de base (19 pour le salon et 17 pour la chambre avec un timeStamp à  0).
 

--[[
%% properties
68 targetLevel
174 targetLevel 
176 targetLevel 
178 targetLevel
%% globals
--]]


local tempcosgn1= fibaro:getValue(68, "targetLevel")
local tempcosgn2= fibaro:getValue(174, "targetLevel")
local tempcosgn3= fibaro:getValue(176,"targetLevel")
local tempchambre= fibaro:getValue(178,"targetLevel")
local vannes_salon={68,174,176}
local vanne_chambre = 178
local id_smart = tonumber(165)
local scenenum = fibaro:countScenes()
fibaro:debug ("vanne 1 : "..tempcosgn1.." °") 
fibaro:debug( "vanne 2 : "..tempcosgn2.." °")
fibaro:debug( "vanne 3 : "..tempcosgn3.." °")
fibaro:debug("Chambre : "..tempchambre.." °")

if scenenum >2 then
  fibaro:abort()
  end

for _,v in pairs(vannes_salon) do
  if ((tempcosgn1 >= "24") or (tempcosgn2 >= "24") or (tempcosgn3 >="24")) 
    then 
    fibaro:call(id_smart, 'sendPush',"Attention dépassement de la température max !")
    fibaro:call(v, 'setTargetLevel', 21)
    fibaro:call(v, 'setTime', 0)
    end
      if (tempchambre > "21") then 
        fibaro:call(id_smart, 'sendPush',"Alerte Température dans Chambre !")
    fibaro:call(vanne_chambre, 'setTargetLevel', 17)
    fibaro:call(vanne_chambre, 'setTime', 0)
  end
end

voilà , au moins j'automatise mon chauffage de façon optimale (pour moi) et je peux contrôler manuellement et ponctuellement mes conditions particulières...
 
A plus à  tous

Partager ce message


Lien à poster
Partager sur d’autres sites

×