Steven Posté(e) le 7 mai 2015 Auteur Signaler Posté(e) le 7 mai 2015 Depuis la version 4.x les sliders ne peuvent recevoir que des chiffres entiers Je te propose de remplacer les slider par des labels, le code est le même et tu pourras y stocker les données sans te soucier des virgules
barnabe Posté(e) le 8 mai 2015 Signaler Posté(e) le 8 mai 2015 Merci STEVEN ..... Je me savais pas un expert en code LUA , mais là ne pas réussir a recopier un code !!!! je ne comprenais plus rien ..... bon we
XSRomano Posté(e) le 5 octobre 2015 Signaler Posté(e) le 5 octobre 2015 Au passage ça ne sert à rien de réinventer la roue quand le script ultime existe déjà ... et il parait même que ça fonctionne très bien : http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/98_PID20.pm Je ne pense pas être assez calé pour adapter ça pour la HC2 mais si on avait un plugin "Regulation_PID", le pied quoi ! hello, juste pour savoir si quelqu'un avait avancé sur une éventuelle implémentation du PID en LUA pour la HC2 ? C est largement hors de ma portée pour le moment :'( @+ XSR
Fredric Posté(e) le 16 octobre 2015 Signaler Posté(e) le 16 octobre 2015 Salut @Steven, j'ai un soucis avec ce module depuis la V4, l'as tu corrigé? (voir photo). si on modifie la fin avec .." " , cela corrige l'affichage... fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", oldCorr.."°") mais comme on fait appel à la valeur du label ça ne fonctionne plus. local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")
Steven Posté(e) le 16 octobre 2015 Auteur Signaler Posté(e) le 16 octobre 2015 Voici le code que j'ai derrière le bouton [-1] et qui fonctionne. L'idée est de rajouter " " à la fin et non pas "°" ainsi il est aisé de convertir la valeur en numérique. local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value") if (oldCorr ~= nil) then local undef = "" .. oldCorr if (undef == "") then oldCorr = 0 fibaro:debug("nil" .. oldCorr) else oldCorr = tonumber(oldCorr) end else oldCorr = 0 end oldCorr = tonumber(oldCorr) - 1 fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", oldCorr.." ") fibaro:call(fibaro:getSelfId(), "pressButton", "2") 1
Fredric Posté(e) le 16 octobre 2015 Signaler Posté(e) le 16 octobre 2015 super rapide la réponse c'est mon symbole qui me créé problème , j'avais bien rajouté "tonumber" mais forcement il à fallut que je rajoute un grigri merci @Steven , ton VD est super, je peux vraiment régler mon chauffage au oignons, j'en ai 11 pour chaque chauffages, 1 par zones (3) et 1 qui gère les zones.
Steven Posté(e) le 17 octobre 2015 Auteur Signaler Posté(e) le 17 octobre 2015 Moi j'ai qu'un poà«le a pellets donc un seul module mais je l'utilise à fond. J'y ai même rajouté une estimation des pellets restants basés sur la consommation .. il est fou ce Steven 1
Fredric Posté(e) le 17 octobre 2015 Signaler Posté(e) le 17 octobre 2015 Je l'ai beaucoup modifier pour qu'il puisse recevoir l'ordre de plusieurs règle du panneau de chauffage, l'option manuel individuel et même comment réagir en mode alarme. Mais la base reste et est vraiment exactement ce qu'il me fallait. 1
vjoubin Posté(e) le 19 novembre 2015 Signaler Posté(e) le 19 novembre 2015 bonjour à tous, j ai ma hc2 depuis 3 semaines et je cherche deseperement à afficher la valeur de mes sondes oregon de ma zibase j ai installe le script zibase qui fonctionne parfaitement, j ai aussi créé les variables OSxxxxxxx_V1 etc, qui se mettent à jour automatiquement mais je ne trouve pas le moyen de les afficher dans un module virtuel oui je sais je suis une buse!! mais qd je lis tout ce que vous etes capable faire je me dis que ca doit vous prendre 1mn pour m expliquer comment faire!! mon hc2 est en version 4.056
iman Posté(e) le 22 décembre 2015 Signaler Posté(e) le 22 décembre 2015 bonjour steven, comment créer ton un scénario qui "appuie sur le bouton rafraichir" pour gérer ton module (je suis complément nul!) merci
iman Posté(e) le 22 décembre 2015 Signaler Posté(e) le 22 décembre 2015 bonjour steven, comment créer ton un scénario qui "appuie sur le bouton rafraichir" pour gérer ton module (je suis complément nul!) merci
Fredric Posté(e) le 23 décembre 2015 Signaler Posté(e) le 23 décembre 2015 il faut de servir de GEA avec cette ligne GEA.add(true, 3*60, "",{{"VirtualDevice", id["GENERAL"], 1},{"Repeat"}})
Fredric Posté(e) le 23 décembre 2015 Signaler Posté(e) le 23 décembre 2015 tu suis ce tuto http://www.domotique-fibaro.fr/index.php/topic/1082-gea-gestionnaire-d%C3%A9v%C3%A9nements-automatique/ est la ligne est GEA.add(true, 3*60, "",{{"VirtualDevice", ID de ton VD de chauffage, 1},{"Repeat"}}) pour un rafraîchissement toute les 3 min. j'ai pas de temps maintenant mais si tu y arrive pas d'ici vendredi, je t’aiderai.
iman Posté(e) le 23 décembre 2015 Signaler Posté(e) le 23 décembre 2015 ok merci je vois demain pour mettre en place
Cmoi20 Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 Merci beaucoup pour cette solution très complète et paramétrable. je voulais optimiser la gestion de mon chauffage et cela m'a permis de réaliser cela très facilement. j'ai opté pour une éxécution a partir de la boucle principale, cela fonctionne très bien. exemple pour une exécution toutes les 5 minutes : fibaro:call(fibaro:getSelfId(), "pressButton", "2") fibaro:sleep (5*60*1000) pour mes optimisation lié a ma chaudière, voici le résultat : -- Méthode à appeler toutes les X secondes (30) par -- un scénario afin de rafraichir ce programme if (not Heating) then Heating = {} Heating.hysteresis = 0.3 --- +/- de chauffage Heating.holidays = 8 -- température souhaitée du mode vacances Heating.stefa = 5 -- id du panneau de chauffage Heating.admin = "admin" Heating.password = "azerty" local selfId = fibaro:getSelfId(); Heating.started = (fibaro:getValue(selfId, "ui.lblRunning.value") == "oui") -- Return la température de référence Heating.getActualTemp = function() return tonumber(fibaro:getValue(58, "value")) end -- module(s) a allumer/éteindre --- ou autre -- choice= turnOn | turnOff Heating.switch1 = function(choice) fibaro:call(182, choice) end Heating.switch2 = function(choice) fibaro:call(173, choice) end Heating.switch3 = function(choice) fibaro:call(175, choice) end -- Mise en chauffe Heating.warmUp = function() -- allumage du système local diff = Heating.getMaxTemp() - Heating.getActualTemp() if (diff < 1) then fibaro:debug("Heating slowly...") Heating.switch1("turnOn") Heating.switch2("turnOff") Heating.switch3("turnOff") elseif (diff < 2) then fibaro:debug("Heating ...") Heating.switch1("turnOn") Heating.switch2("turnOn") Heating.switch3("turnOff") else fibaro:debug("Heating more ...") Heating.switch1("turnOn") Heating.switch2("turnOn") Heating.switch3("turnOn") end fibaro:debug("Warming Up...") Heating.started = true fibaro:call(selfId, "setProperty", "ui.lblRunning.value", "oui") fibaro:call(selfId, "setProperty", "currentIcon", 5) end -- Garde le chauffage allumé -- dans mon cas je ralenti le chauffage -- quand il reste plus euq 1 degré a atteindre Heating.keepOn = function() fibaro:call(selfId, "setProperty", "currentIcon", 6) local diff = Heating.getMaxTemp() - Heating.getActualTemp() if (diff < 1) then fibaro:debug("Heating slowly...") Heating.switch1("turnOn") Heating.switch2("turnOff") Heating.switch3("turnOff") elseif (diff < 2) then fibaro:debug("Heating ...") Heating.switch1("turnOn") Heating.switch2("turnOn") Heating.switch3("turnOff") else fibaro:debug("Heating more ...") Heating.switch1("turnOn") Heating.switch2("turnOn") Heating.switch3("turnOn") end end -- Eteint le système de chauffage Heating.stop = function() Heating.switch1("turnOff") Heating.switch2("turnOff") Heating.switch3("turnOff") fibaro:debug("Sleeping") Heating.started = false fibaro:call(selfId, "setProperty", "ui.lblRunning.value", "no") fibaro:call(selfId, "setProperty", "currentIcon", 7) end -- Optenir la température minimum requise Heating.getMinTemp = function() return Heating.getTempPanel() - Heating.hysteresis end -- Optenir la température maximum requise Heating.getMaxTemp = function() return Heating.getTempPanel() + Heating.hysteresis end -- Démarrage du script Heating.run = function() if (fibaro:getGlobal("Chauffage") == "OFF") then Heating.stop() return end fibaro:debug("Check temperature") -- It is too cold, turn on the heating system if (Heating.getActualTemp() < Heating.getMinTemp()) then fibaro:debug("Warm it up") Heating.warmUp() -- It is warm enough, stop it elseif (Heating.getActualTemp() > Heating.getMaxTemp()) then fibaro:debug("Stop it") Heating.stop() -- Temperature is goo enough, keep it as it else if (Heating.started) then fibaro:debug("Keep it") Heating.keepOn() else -- wait only it is cold enough to activate it fibaro:debug("Sleeping...") fibaro:call(selfId, "setProperty", "currentIcon", 8) end end end -- Méthode de test plus rapide d'écriture -- pour les vieux fatigué comme moi Heating.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- récupère la température de référence indiqué -- dans le pannel de chauffage Heating.getTempPanel = function() if (fibaro:getGlobal("Chauffage") == "VACANCES") then return Heating.holidays end local strefa = Heating.stefa local day = string.lower(os.date("%A")) local hour = os.date("%H") local min = os.date("%M") local now = 0 local temp = 0 local lasttemp = 0 local mode = "" local lastmode = "" HC2 = Net.FHttp("127.0.0.1",80) HC2:setBasicAuthentication(Heating.admin, Heating.password) response = HC2:GET("/api/panels/heating?id="..strefa) local jsontable =json.decode(response) local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} for k,v in pairs(week) do if (v == day) then now = k * 100000 + hour * 60 + min end end for k,v in pairs(week) do for l,w in pairs({"morning","day","evening","night"}) do if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then temp = jsontable.properties[v][w].temperature if (v == "monday") then x = "lundi" elseif (v == "tuesday") then x = "mardi" elseif (v == "wednesday") then x = "mercredi" elseif (v == "thursday") then x = "jeudi" elseif (v == "friday") then x = "vendredi" elseif (v == "saturday") then x = "samedi" elseif (v == "sunday") then x = "dimanche" end if (w == "morning") then y = "matin" elseif (w == "day") then y = "jour" elseif (w == "evening") then y = "soir" elseif (w == "night") then y = "nuit" end mode = x .. " .. " .. y end lasttemp = jsontable.properties[v][w].temperature if (v == "monday") then x = "lundi" elseif (v == "tuesday") then x = "mardi" elseif (v == "wednesday") then x = "mercredi" elseif (v == "thursday") then x = "jeudi" elseif (v == "friday") then x = "vendredi" elseif (v == "saturday") then x = "samedi" elseif (v == "sunday") then x = "dimanche" end if (w == "morning") then y = "matin" elseif (w == "day") then y = "jour" elseif (w == "evening") then y = "soir" elseif (w == "night") then y = "nuit" end lastmode = x .. " .. " .. y end end if (temp == 0) then temp = lasttemp mode = lastmode end local oldMode = fibaro:getValue(selfId, "ui.lblMode.value") fibaro:call(selfId, "setProperty", "ui.lblMode.value", mode ) if (oldMode ~= mode) then fibaro:call(selfId, "setProperty", "ui.lblCorr.value", 0) end return tonumber(temp)+Heating.getCorrection() end -- Obtient la correction indiqué par l'utilisateur Heating.getCorrection = function() local oldCorr = fibaro:getValue(selfId, "ui.lblCorr.value") if (oldCorr ~= nil) then local undef = "" .. oldCorr if (undef == "") then oldCorr = 0 else oldCorr= tonumber(oldCorr) end else oldCorr = 0 end return oldCorr end end Heating.run() --fibaro:sleep(heating.timer * 1000) --fibaro:call(selfId, "pressButton", "1") --fibaro:debug("Current temp : " .. Heating.getActualTemp()) --fibaro:debug("Min temp : " .. Heating.getMinTemp()) --fibaro:debug("Max temp : " .. Heating.getMaxTemp()) --fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped")) local selfId = fibaro:getSelfId(); -- Gestion de l'affichage local temp = Heating.getActualTemp() if (fibaro:getGlobal("Chauffage") == "VACANCES") then fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) elseif (fibaro:getGlobal("Chauffage") == "OFF") then fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" ) else local cor = "" if (Heating.getCorrection() > 0) then cor = "(+" .. Heating.getCorrection() .. ")" elseif (Heating.getCorrection() < 0) then cor = "(" .. Heating.getCorrection() .. ")" end fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) end 1
Fredric Posté(e) le 30 décembre 2015 Signaler Posté(e) le 30 décembre 2015 oui, c'est vrai que GEA n'est pas une obligation mais il est tellement pratique et facile à mettre en place... j'ai optimisé le code de @Steven pour des chauffages électrique, 11 au total, voici un de mes code pour la Zone 1: --salle a manger R1 -- Méthode à appeler toutes les X secondes (30) par -- un scénario afin de rafraichir ce programme ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) local id = { Mod_Chauf_Zone1 = 794, cde1 = 352, cde2 = 354, Radiateur = 364, ST814_Salon = 394 } if (not Heating) then Heating = {} Heating.hysteresis = 0.7 --- +/- de chauffage Heating.holidays = 17 -- température souhaitée du mode vacances Heating.manuel = 19 -- température souhaitée du mode Manuel Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal fibaro:debug(ValeurZ1) Heating.admin = "LOGIN" Heating.password = "MDP" Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui") local selfId = fibaro:getSelfId(); -- Return la température de référence Heating.getActualTemp = function() return tonumber(fibaro:getValue(id["ST814_Salon"], "value")) end -- module(s) a allumer/éteindre --- ou autre -- choice= turnOn | turnOff Heating.switch = function(choice) --fibaro:call(33, choice) fibaro:call(id["Radiateur"], "pressButton", choice); end -- Mise en chauffe Heating.warmUp = function() -- allumage du système fibaro:log("Warming Up...") Heating.started = true fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui") fibaro:call(selfId, "setProperty", "currentIcon", 1083) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078) if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 1 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R1") == "HG") or (fibaro:getGlobal("R1") == "ECO") or (fibaro:getGlobal("R1") == "VACANCES") then Heating.switch("1") end end -- Garde le chauffage allumé -- dans mon cas je ralenti le chauffage -- quand il reste plus euq 1 degré a atteindre Heating.keepOn = function() fibaro:call(selfId, "setProperty", "currentIcon", 1084) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078) --local diff = Heating.getMaxTemp() - Heating.getActualTemp() --if (diff < 1) then -- fibaro:log("Heating slowly...") -- Heating.switch("turnOn") -- fibaro:sleep(2*1000) -- Heating.switch("turnOff") --- We stop it for X minute --else fibaro:log("Heating...") --end end -- Eteint le système de chauffage Heating.stop = function() fibaro:log("Sleeping") Heating.started = false fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "non") fibaro:call(selfId, "setProperty", "currentIcon", 1085) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081) if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 0 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R1") == "HG") or (fibaro:getGlobal("R1") == "ECO") or (fibaro:getGlobal("R1") == "VACANCES") then Heating.switch("4") end end -- Optenir la température minimum requise Heating.getMinTemp = function() return Heating.getTempPanel() - Heating.hysteresis end -- Optenir la température maximum requise Heating.getMaxTemp = function() return Heating.getTempPanel() + Heating.hysteresis end -- Démarragedu script Heating.run = function() if (fibaro:getGlobal("Chauffage") == "OFF") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1081) Heating.stop() return elseif (fibaro:getGlobal("R1") == "ECO") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1079) return elseif (fibaro:getGlobal("R1") == "HG") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1082) return end if (fibaro:getGlobal("R1") == "OFF") then Heating.stop() return end --fibaro:debug("Check temperature") -- It is too cold, turn on the heating system if (Heating.getActualTemp() < Heating.getMinTemp()) then --fibaro:debug("Warm it up") Heating.warmUp() -- It is warm enough, stop it elseif (Heating.getActualTemp() > Heating.getMaxTemp()) then --fibaro:debug("Stop it") Heating.stop() -- Temperature is goo enough, keep it as it else if (Heating.started) then --fibaro:debug("Keep it") Heating.keepOn() else -- wait only it is cold enough to activate it fibaro:log("Sleeping...") fibaro:call(selfId, "setProperty", "currentIcon", 1086) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081) end end end -- Méthode de test plus rapide d'écriture -- pour les vieux fatigué comme moi Heating.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- récupère la température de référence indiqué -- dans le pannel de chauffage Heating.getTempPanel = function() if (fibaro:getGlobal("R1") == "VACANCES") then return Heating.holidays end if (fibaro:getGlobal("R1") == "MANUEL") then return Heating.manuel end local strefa = Heating.stefa local day = string.lower(os.date("%A")) local hour = os.date("%H") local min = os.date("%M") local now = 0 local temp = 0 local lasttemp = 0 local mode = "" local lastmode = "" HC2 = Net.FHttp("127.0.0.1",80) HC2:setBasicAuthentication(Heating.admin, Heating.password) response = HC2:GET("/api/panels/heating?id="..strefa) local jsontable =json.decode(response) local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} for k,v in pairs(week) do if (v == day) then now = k * 100000 + hour * 60 + min end end for k,v in pairs(week) do for l,w in pairs({"morning","day","evening","night"}) do if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then temp = jsontable.properties[v][w].temperature mode = v .. " .. " ..w end lasttemp = jsontable.properties[v][w].temperature lastmode = v .. " .. " ..w end end if (temp == 0) then temp = lasttemp mode = lastmode end local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode ) if (oldMode ~= mode) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblCorr.value", 0); --VD ZONE 1 fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "currentIcon", 1087) end return tonumber(temp)+Heating.getCorrection() end -- Obtient la correction indiqué par l'utilisateur Heating.getCorrection = function() local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value") if (oldCorr ~= nil) then local undef = "" .. oldCorr if (undef == "") then oldCorr = 0 else oldCorr= tonumber(oldCorr) end else oldCorr = 0 end return oldCorr end end Heating.run() --fibaro:sleep(heating.timer * 1000) --fibaro:call(fibaro:getSelfId(), "pressButton", "1") --fibaro:debug("Current temp : " .. Heating.getActualTemp()) --fibaro:debug("Min temp : " .. Heating.getMinTemp()) --fibaro:debug("Max temp : " .. Heating.getMaxTemp()) --fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped")) -- Gestion de l'affichage local temp = Heating.getActualTemp() if (fibaro:getGlobal("R1") == "VACANCES") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) elseif (fibaro:getGlobal("R1") == "OFF") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" ) elseif (fibaro:getGlobal("R1") == "MANUEL") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" ) elseif (fibaro:getGlobal("R1") == "ECO") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" ) elseif (fibaro:getGlobal("R1") == "HG") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" ) else local cor = "" if (Heating.getCorrection() > 0) then cor = "(+" .. Heating.getCorrection() .. ")" elseif (Heating.getCorrection() < 0) then cor = "(" .. Heating.getCorrection() .. ")" end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) end On notera qu'aux lignes 46 et 77 j'ai rajouté la condition de l'état des Switch car à car sinon, à chaque rafraîchissements, le code vient donner l’ordre de mettre ON ou OFF les FGS221 même si il sont déjà dans le bon état. Du coup, toutes les 5 minutes, cela appuyé sur "allumer le chauffage" alors qu'il était déjà sur ON, et 11 modules qui reçoivent la commande de passer sur ON Ou OFF alors qu'il le sont déjà , ça plantait la box en une journée, cela me faisait des crête CPU à 100%. avec cette modif, cela action les Switch seulement si il ne sont pas dans la bon état. On peut réduire du coup, pour avoir un rendu plus précis, le rafraîchissement à 1 minutes sans pénaliser la box, les crête CPU ne dépasse plus les 15%. j'ai également créé une variable pour remplacer l'ID du panneau de chauffage Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal En passant par une scène, je fais changer cette variable selon l'état de la maison, "Absent", "Pressent", " En Mode Alarme"...tous est possible. Il suffit de créer dans le panneau de chauffage un état pour chaque mode et de faire remonter sont ID par la variable. voici ma scène, pas très optimisé mais cela fonctionne très bien: --[[ %% autostart %% properties %% globals Aujourdhui AlarmeGenerale INV --]] ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) ValeurZ2 = ((fibaro:getGlobal('RTC_Z2'))) ValeurZ3 = ((fibaro:getGlobal('RTC_Z3'))) ValeurSB = ((fibaro:getGlobal('RTC_SB'))) Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier'))) if (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --travail fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --CP fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --Weekend fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --ferie fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --travail fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --CP fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --Weekend fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) then --ferie fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --travail fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --CP fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --Weekend fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités end fibaro:debug(ValeurZ1) fibaro:debug(ValeurZ2) fibaro:debug(ValeurZ3) fibaro:debug(ValeurSB) fibaro:debug(Valeur_Cellier)
pocket998 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 Bonjour, Merci pour le VD. J'ai un thermostat heatit pour gérer le chauffage de mon salon et j'aurais besoin d'un cou de main svp. Pourriez-vous me donner le dernier VD qui va en 4.070 de la HC2 J'ai créée une variable prédéfinies Chauffage avec Off On et Vacances J'ai aussi crée le panneau de chauffage mais je trouve pas le ID du panneau de chauffage. Pour le thermostat j'ai 3 icônes, quelles paramètres je dois changer sur le VD ? Merci pour votre aide
jojo Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 pour l'id des panneaux de chauffage http://<ip box>/api/panels/heating
pocket998 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 Merci, Quand je fais un rafraichir j'ai rien qui se mets à jour, il y a combien de chiffre à mettre à jour dans le code ? Merci -- Méthode à appeler toutes les X secondes (30) par -- un scénario afin de rafraichir ce programme if (not Heating) then Heating = {} Heating.hysteresis = 0.7 --- +/- de chauffage Heating.holidays = 8 -- température souhaitée du mode vacances Heating.stefa = 9 -- id du panneau de chauffage Heating.admin = "admin" Heating.password = "11111" Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui") local selfId = fibaro:getSelfId(); -- Return la température de référence Heating.getActualTemp = function() return tonumber(fibaro:getValue(9, "ui.tempSalon.value"))/10 end -- module(s) a allumer/éteindre --- ou autre -- choice= turnOn | turnOff Heating.switch = function(choice) fibaro:call(95, choice) end -- Mise en chauffe Heating.warmUp = function() -- allumage du système Heating.switch("turnOn") fibaro:log("Warming Up...") Heating.started = true fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui") fibaro:call(selfId, "setProperty", "currentIcon", 1057) end -- Garde le chauffage allumé -- dans mon cas je ralenti le chauffage -- quand il reste plus euq 1 degré a atteindre Heating.keepOn = function() fibaro:call(selfId, "setProperty", "currentIcon", 1058) --local diff = Heating.getMaxTemp() - Heating.getActualTemp() --if (diff < 1) then -- fibaro:log("Heating slowly...") -- Heating.switch("turnOn") -- fibaro:sleep(2*1000) -- Heating.switch("turnOff") --- We stop it for X minute --else fibaro:log("Heating...") --end end -- Eteint le système de chauffage Heating.stop = function() Heating.switch("turnOff") fibaro:log("Sleeping") Heating.started = false fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "no") fibaro:call(selfId, "setProperty", "currentIcon", 1059) end -- Optenir la température minimum requise Heating.getMinTemp = function() return Heating.getTempPanel() - Heating.hysteresis end -- Optenir la température maximum requise Heating.getMaxTemp = function() return Heating.getTempPanel() + Heating.hysteresis end -- Démarragedu script Heating.run = function() if (fibaro:getGlobal("Chauffage") == "OFF") then Heating.stop() return end --fibaro:debug("Check temperature") -- It is too cold, turn on the heating system if (Heating.getActualTemp() < Heating.getMinTemp()) then --fibaro:debug("Warm it up") Heating.warmUp() -- It is warm enough, stop it elseif (Heating.getActualTemp() > Heating.getMaxTemp()) then --fibaro:debug("Stop it") Heating.stop() -- Temperature is goo enough, keep it as it else if (Heating.started) then --fibaro:debug("Keep it") Heating.keepOn() else -- wait only it is cold enough to activate it fibaro:log("Sleeping...") fibaro:call(selfId, "setProperty", "currentIcon", 1060) end end end -- Méthode de test plus rapide d'écriture -- pour les vieux fatigué comme moi Heating.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- récupère la température de référence indiqué -- dans le pannel de chauffage Heating.getTempPanel = function() if (fibaro:getGlobal("Chauffage") == "VACANCES") then return Heating.holidays end local strefa = Heating.stefa local day = string.lower(os.date("%A")) local hour = os.date("%H") local min = os.date("%M") local now = 0 local temp = 0 local lasttemp = 0 local mode = "" local lastmode = "" HC2 = Net.FHttp("127.0.0.1",80) HC2:setBasicAuthentication(Heating.admin, Heating.password) response = HC2:GET("/api/panels/heating?id="..strefa) local jsontable =json.decode(response) local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} for k,v in pairs(week) do if (v == day) then now = k * 100000 + hour * 60 + min end end for k,v in pairs(week) do for l,w in pairs({"morning","day","evening","night"}) do if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then temp = jsontable.properties[v][w].temperature mode = v .. " .. " ..w end lasttemp = jsontable.properties[v][w].temperature lastmode = v .. " .. " ..w end end if (temp == 0) then temp = lasttemp mode = lastmode end local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode ) if (oldMode ~= mode) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0) end return tonumber(temp)+Heating.getCorrection() end -- Obtient la correction indiqué par l'utilisateur Heating.getCorrection = function() local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value") if (oldCorr ~= nil) then local undef = "" .. oldCorr if (undef == "") then oldCorr = 0 else oldCorr= tonumber(oldCorr) end else oldCorr = 0 end return oldCorr end end Heating.run() --fibaro:sleep(heating.timer * 1000) --fibaro:call(fibaro:getSelfId(), "pressButton", "1") --fibaro:debug("Current temp : " .. Heating.getActualTemp()) --fibaro:debug("Min temp : " .. Heating.getMinTemp()) --fibaro:debug("Max temp : " .. Heating.getMaxTemp()) --fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped")) -- Gestion de l'affichage local temp = Heating.getActualTemp() if (fibaro:getGlobal("Chauffage") == "VACANCES") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) elseif (fibaro:getGlobal("Chauffage") == "OFF") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" ) else local cor = "" if (Heating.getCorrection() > 0) then cor = "(+" .. Heating.getCorrection() .. ")" elseif (Heating.getCorrection() < 0) then cor = "(" .. Heating.getCorrection() .. ")" end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) end
Yannick Posté(e) le 17 mai 2016 Signaler Posté(e) le 17 mai 2016 Salut Steven (et aux autres aussi bien sà»r...) J'utilise ton VD pour gérer mon chauffage à la maison depuis que j'ai réussi à domotiser ma chaudière de 10 ans avec des FGS. Tout fonctionne nickel, j'ai fait mes réglages Tout est OK. Une question toutefois : j'ai plusieurs panneau de chuaffage (1 pour notre chambre, un pour le couloir, un pour les pièces de vis et le dernier pour les chmabres des enfants). POur ce qui est la gestion du chauffage, je base sur une moyenne des mes capteurs de températures en bas dans le couloir et dans mes pièces de vie pour réguler. Sinon quand il fait 22 ° en haut j'ai 17 dans le couloir et quand c'est l'hiver c'est pire. Bref. Pour ça c'est OK. Par contre, quand je clique sur le bouton vacances ou Off, j'aimerais que mes 4 panneaux passent en mode vacances ou off et que la température de consigne vacances soit prise en compte par toute mes LC13. Ceci afin d'éviter qu'elles continuent à se réguler en fonction du panneau de chauffage et qu'elles ne bouffent des piles pour rien . Comment je peux faire cette chose ? Merci pour ton aide (ou celle des autres bien sà»r) A plus*
Steven Posté(e) le 19 mai 2016 Auteur Signaler Posté(e) le 19 mai 2016 Normalement, tu as du faire ceci : 4) Variable globale :Il faut créer un variable globale "Chauffage" qui peux prendre les valeurs : ON, OFF et VACANCES Cette variable étant la même sur les 4 VD, si tu cliques sur le bouton [Vacances] d'un des 4 VD, cela affecter aussi les 3 autres VD (suffit d'attendre le rafraîchissement ou cliquer sur le bouton [Rafraîchir] pour s'en assurer).
Yannick Posté(e) le 19 mai 2016 Signaler Posté(e) le 19 mai 2016 Ok mais en fait je n'ai fait qu'un VD qui prend comme température de consigne le séjour. Donc je ne pense pas que cela puisse influer sur les autres si ? Et question subsidiaire : est ce que la valeur de température Vacances se retrouve dans le panneau de chauffage ou non ? Est ce que cela envoi la coinsigne sur toutes mes têtes DANFOSS ?
Steven Posté(e) le 19 mai 2016 Auteur Signaler Posté(e) le 19 mai 2016 Alors on c'est mal compris, mais très mal compris Mon VD ne modifie jamais les panneaux de chauffages, il les lit et par rapport à l'heure, il active ou désactive un module selon une température. Si tu clique sur le bouton vacances, le module ne va plus lire les panneaux de chauffage mais va prendre comme température de référence celle indiquée dans le code (8°). Il n'ira donc pas affecter tes LC13. En ce que je comprend, tu a lié un panneau de chauffage à chaq'un de tes LC13 ce qui est bien mais n'a rien à voir avec mon VD qui est fait, justement, pour les module qu'on ne peux pas lié à ces panneaux. Je te conseil de jeter un oeil ici : http://www.domotique-fibaro.fr/index.php/topic/916-gestion-simplifi%C3%A9e-du-chauffage-srt321-ssr303/ Courage
Fredric Posté(e) le 23 janvier 2017 Signaler Posté(e) le 23 janvier 2017 Salut @Steven, j'ai un petit soucis depuis le passage en V4.100 ou V4.110, je m'en rend que maintenant. j'ai cette erreur aléatoirement et je ne comprends pas pourquoi, je pense qu'il ne reconnait pas la valeur dans la variable mais je ne comprends pas pourquoi, aurais tu 5 minutes pour jeter un œil? [DEBUG] 16:33:12: ID Zone : 3 [DEBUG] 16:33:12: Température : 17.80 [DEBUG] 16:36:12: ID Zone : 3 [DEBUG] 16:36:12: Température : 17.80 [ERROR] 16:37:12: line 166: Expected value but found T_END at character 1 [DEBUG] 16:39:12: ID Zone : 3 [DEBUG] 16:39:13: Température : 17.80 [DEBUG] 16:42:13: ID Zone : 3 [DEBUG] 16:42:13: Température : 17.80 le code dans le bouton rafraîchir: --Salon R2 -- Méthode à appeler toutes les X secondes (30) par -- un scénario afin de rafraichir ce programme local id = { Mod_Chauf_Zone1 = 794, cde1 = 355, cde2 = 357, Radiateur = 365, ST814_Salon = 394 } local ValeurZ1 = ((fibaro:getGlobal('RTC_Z1'))) if (not Heating) then Heating = {} Heating.hysteresis = 0.7 --- +/- de chauffage Heating.holidays = 17 -- température souhaitée du mode vacances Heating.manuel = 19 -- température souhaitée du mode Manuel Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal fibaro:debug("ID Zone : "..ValeurZ1) Heating.admin = "xxxxxx" Heating.password = "xxxxxxx" Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui") local selfId = fibaro:getSelfId(); -- Return la température de référence Heating.getActualTemp = function() --return tonumber(fibaro:getValue(242, "ui.sIntTemp.value")) return tonumber(fibaro:getValue(id["ST814_Salon"], "value")) end -- module(s) a allumer/éteindre --- ou autre -- choice= turnOn | turnOff Heating.switch = function(choice) --fibaro:call(33, choice) fibaro:call(id["Radiateur"], "pressButton", choice); end -- Mise en chauffe Heating.warmUp = function() -- allumage du système fibaro:log("Warming Up...") Heating.started = true fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui") fibaro:call(selfId, "setProperty", "currentIcon", 1083) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078) if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 1 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R2") == "HG") or (fibaro:getGlobal("R2") == "ECO") or (fibaro:getGlobal("R2") == "VACANCES") then Heating.switch("1") end end -- Garde le chauffage allumé -- dans mon cas je ralenti le chauffage -- quand il reste plus euq 1 degré a atteindre Heating.keepOn = function() fibaro:call(selfId, "setProperty", "currentIcon", 1084) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078) --local diff = Heating.getMaxTemp() - Heating.getActualTemp() --if (diff < 1) then -- fibaro:log("Heating slowly...") -- Heating.switch("turnOn") -- fibaro:sleep(2*1000) -- Heating.switch("turnOff") --- We stop it for X minute --else fibaro:log("Heating...") --end end -- Eteint le système de chauffage Heating.stop = function() fibaro:log("Sleeping") Heating.started = false fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "non") fibaro:call(selfId, "setProperty", "currentIcon", 1085) fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081) if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 0 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R2") == "HG") or (fibaro:getGlobal("R2") == "ECO") or (fibaro:getGlobal("R2") == "VACANCES") then Heating.switch("4") end end -- Optenir la température minimum requise Heating.getMinTemp = function() return Heating.getTempPanel() - Heating.hysteresis end -- Optenir la température maximum requise Heating.getMaxTemp = function() return Heating.getTempPanel() + Heating.hysteresis end -- Démarragedu script Heating.run = function() if (fibaro:getGlobal("Chauffage") == "OFF") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1081) Heating.stop() return elseif (fibaro:getGlobal("R2") == "ECO") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1079) return elseif (fibaro:getGlobal("R2") == "HG") then fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1082) return end if (fibaro:getGlobal("R2") == "OFF") then Heating.stop() return end --fibaro:debug("Check temperature") -- It is too cold, turn on the heating system if (Heating.getActualTemp() < Heating.getMinTemp()) then --fibaro:debug("Warm it up") Heating.warmUp() -- It is warm enough, stop it elseif (Heating.getActualTemp() > Heating.getMaxTemp()) then --fibaro:debug("Stop it") Heating.stop() -- Temperature is goo enough, keep it as it else if (Heating.started) then --fibaro:debug("Keep it") Heating.keepOn() else -- wait only it is cold enough to activate it fibaro:log("Sleeping...") fibaro:call(selfId, "setProperty", "currentIcon", 1086) --fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081) end end end -- Méthode de test plus rapide d'écriture -- pour les vieux fatigué comme moi Heating.iif = function(condition, iftrue, iffalse) if (condition) then return iftrue end return iffalse end -- récupère la température de référence indiqué -- dans le pannel de chauffage Heating.getTempPanel = function() if (fibaro:getGlobal("R2") == "VACANCES") then return Heating.holidays end if (fibaro:getGlobal("R2") == "MANUEL") then return Heating.manuel end local strefa = Heating.stefa local day = string.lower(os.date("%A")) local hour = os.date("%H") local min = os.date("%M") local now = 0 local temp = 0 local lasttemp = 0 local mode = "" local lastmode = "" HC2 = Net.FHttp("127.0.0.1",80) HC2:setBasicAuthentication(Heating.admin, Heating.password) response = HC2:GET("/api/panels/heating?id="..strefa) local jsontable =json.decode(response) local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} for k,v in pairs(week) do if (v == day) then now = k * 100000 + hour * 60 + min end end for k,v in pairs(week) do for l,w in pairs({"morning","day","evening","night"}) do if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then temp = jsontable.properties[v][w].temperature mode = v .. " .. " ..w end lasttemp = jsontable.properties[v][w].temperature lastmode = v .. " .. " ..w end end if (temp == 0) then temp = lasttemp mode = lastmode end local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value") fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode ) if (oldMode ~= mode) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblCorr.value", 0); --VD ZONE 1 fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "currentIcon", 1087) end return tonumber(temp)+Heating.getCorrection() end -- Obtient la correction indiqué par l'utilisateur Heating.getCorrection = function() local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value") if (oldCorr ~= nil) then local undef = "" .. oldCorr if (undef == "") then oldCorr = 0 else oldCorr= tonumber(oldCorr) end else oldCorr = 0 end return oldCorr end end Heating.run() --fibaro:sleep(heating.timer * 1000) --fibaro:call(fibaro:getSelfId(), "pressButton", "1") --fibaro:debug("Current temp : " .. Heating.getActualTemp()) --fibaro:debug("Min temp : " .. Heating.getMinTemp()) --fibaro:debug("Max temp : " .. Heating.getMaxTemp()) --fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped")) -- Gestion de l'affichage local temp = Heating.getActualTemp() temp = string.format("%.2f",temp) fibaro:debug("Température : "..temp) fibaro:setGlobal("Temp_DEGRES", temp) if (fibaro:getGlobal("R2") == "VACANCES") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / VAC" ) elseif (fibaro:getGlobal("R2") == "OFF") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / OFF" ) elseif (fibaro:getGlobal("R2") == "MANUEL") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / MANUEL" ) elseif (fibaro:getGlobal("R2") == "ECO") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / ECO" ) elseif (fibaro:getGlobal("R2") == "HG") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" ) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / Hors Gel" ) else local cor = "" if (Heating.getCorrection() > 0) then cor = "(+" .. Heating.getCorrection() .. ")" elseif (Heating.getCorrection() < 0) then cor = "(" .. Heating.getCorrection() .. ")" end fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) --charge variable pour message arrivé maison fibaro:setGlobal("Temp_Msg_Cfg", Heating.getTempPanel()) fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor) end
Messages recommandés