Steven Posté(e) le 24 octobre 2014 Auteur Signaler Posté(e) le 24 octobre 2014 Il y a une function 'switch' dans mon code, non ? Si oui, envoie moi juste ce morceau de code.
Fredric Posté(e) le 24 octobre 2014 Signaler Posté(e) le 24 octobre 2014 Heating.switch = function(choice) --fibaro:call(33, choice) --fibaro:call(340, "pressButton", "1"); 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 c'est de cette partie que tu parles?
Fredric Posté(e) le 24 octobre 2014 Signaler Posté(e) le 24 octobre 2014 voila ce que j'ai fait, ça àl'air de fonctionner, peux-tu me dire si c'est correct? -- module(s) a allumer/éteindre --- ou autre -- choice= turnOn | turnOff Heating.switch = function(choice) --fibaro:call(33, choice) fibaro:call(340, "pressButton", choice); end -- Mise en chauffe Heating.warmUp = function() -- allumage du système Heating.switch("1") fibaro:log("Warming Up...") Heating.started = true fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui") fibaro:call(selfId, "setProperty", "currentIcon", 1083) end -- Eteint le système de chauffage Heating.stop = function() Heating.switch("4") fibaro:log("Sleeping") Heating.started = false fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "no") fibaro:call(selfId, "setProperty", "currentIcon", 1085) end
Steven Posté(e) le 24 octobre 2014 Auteur Signaler Posté(e) le 24 octobre 2014 A vu de nez c'est parfait, tu as remplacer le turnOn par 1, le turnOff par 4 et dans switch mis pressButton choice. C'est parfait. Bravo.
Fredric Posté(e) le 24 octobre 2014 Signaler Posté(e) le 24 octobre 2014 Merci @Steven, ça à l'air de fonctionner parfaitement et j'ai pu récupérer les températures de mes sonde Netatmo. juste une autre question qui me chiffonne, il y à 4 état symbolisés par des icônes, la flamme orange pour "confort", la flamme noir pour "Stop", mais les deux autre? la flamme blanche et le ZZZ? quoi que c'est monsieur?
Steven Posté(e) le 24 octobre 2014 Auteur Signaler Posté(e) le 24 octobre 2014 De mémoire : Orange ... en chauffe Noir ... rien du tout Vert/Blanc ... en chauffe douce Zzzz ... en attente d'un réveil soudain. J'ai un poêle a pellet. Avec une température de confort de 21° et une hystéresis de 0.7°. Donc je chauffe àfond (Orange) jusqu'à21° si je suis en dessous de 20.3° puis je ralenti entre 21 et 21.7° (Vert) et je stoppe (Noir),en delà. En redescendant en température quand je suis entre 20.3 et 21.7, j'affiche le Zzzz cela me permettait de savoir que je suis en perte de température et non pas en montée. Voilà
Fredric Posté(e) le 2 novembre 2014 Signaler Posté(e) le 2 novembre 2014 @Steven, j'ai besoin de ton aide, ton module fonctionne parfaitement mais j'ai tout de même un soucis que je n'arrive pas à gérer. Je veux pouvoir utiliser les radiateurs indépendamment par les 4 ordres fil pilote, au début. Je stoppais et killé la scène comme ceci: fibaro:setSceneEnabled(99, false) fibaro:killScenes(99) mais je trouvais pas trop génial ce procédé et je préfère passer par une variable, "MANUEL" que j'ai rajouté à "chauffage". donc j'ai réussi à changer l'affichage de ton module mais pas l'action, il repasse en AUTO. -- 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" ) elseif (fibaro:getGlobal("Chauffage") == "MANUEL") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" ) je voudrais que quand la variable "MANUEL" remplace "OFF", "ON" ou "VACANCES", le module affiche "MANUEL" et n'ai plus d'action tant que la variable n'est pas changé. Tu peux m'aider?
yoda6907 Posté(e) le 3 novembre 2014 Signaler Posté(e) le 3 novembre 2014 Dès la sortie de la V4 ... La suite ici : http://www.domotique-fibaro.fr/index.php/topic/2164-plugin-virtual-sensor/ Bonsoir, J'ai réaliser la mise à jour vers la 4.018 et depuis j'ai un problème avec un bout de votre code lua de votre module virtuel : 140 response = HC2:GET("/api/panels/heating?id="..strefa) 141 local jsontable =json.decode(response) Lors que je debug, voici ce que j'obtiens : [ERROR] 20:27:03: line 141: attempt to index global 'json' (a nil value)[ERROR] 20:27:07: line 141: attempt to index global 'json' (a nil value) [ERROR] 20:27:09: line 141: attempt to index global 'json' (a nil value) [DEBUG] 20:27:11: Current temp : 20.4 [ERROR] 20:27:11: line 141: attempt to index global 'json' (a nil value) [DEBUG] 20:27:14: Stop it [DEBUG] 20:27:14: Current temp : 20.4 [DEBUG] 20:27:14: Min temp : 7.3 [DEBUG] 20:27:14: Max temp : 8.7 [DEBUG] 20:27:14: Started : stopped [DEBUG] 20:27:14: VACANCES [ Voilà trois heures que je cherche et rien..... Vous avez une idée ? Merci de votre aide Bonne soirée
BenjyNet Posté(e) le 3 novembre 2014 Signaler Posté(e) le 3 novembre 2014 Bah oui, le json est buggé dans la 4.018
zozotte Posté(e) le 7 novembre 2014 Signaler Posté(e) le 7 novembre 2014 Bonjour Steven, Merci pour ce module et d'ailleurs toutes tes contributions au forum (je suis fan !). Fonctionne super ! 2
Fredric Posté(e) le 11 novembre 2014 Signaler Posté(e) le 11 novembre 2014 @Steven, j'ai besoin de ton aide, ton module fonctionne parfaitement mais j'ai tout de même un soucis que je n'arrive pas à gérer. Je veux pouvoir utiliser les radiateurs indépendamment par les 4 ordres fil pilote, au début. Je stoppais et killé la scène comme ceci: fibaro:setSceneEnabled(99, false) fibaro:killScenes(99) mais je trouvais pas trop génial ce procédé et je préfère passer par une variable, "MANUEL" que j'ai rajouté à "chauffage". donc j'ai réussi à changer l'affichage de ton module mais pas l'action, il repasse en AUTO. -- 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" ) elseif (fibaro:getGlobal("Chauffage") == "MANUEL") then fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" ) je voudrais que quand la variable "MANUEL" remplace "OFF", "ON" ou "VACANCES", le module affiche "MANUEL" et n'ai plus d'action tant que la variable n'est pas changé. Tu peux m'aider? @Steven , je fais un petit UP car je n'arrive pas à avancer. je n’arrête pas de parcourir ton code sans arrivé à stopper l'action. si j'ai bien compris, si la variable "chauffage" n'est pas sur "OFF" ou "VACANCES" donc le module est en AUTO, la variable "ON" sert juste à changer l'état de la variable "chauffage" mais n'a aucune action dans le code?
Steven Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 @Fredric Tu as eu raison de faire un "UP" je t'avais oublié .. honte sur moi. Ce que tu aimerais c'est qu'en mode "MANUEL" le module virtuel ne fasse plus rien ? C'est bien cela ? Dans mon code, cherche Heating.run = function() et juste la ligne en dessous ajoute ceci : if (fibaro:getGlobal("Chauffage") == "MANUEL") then return end Cela va stopper le module virtuel en mode MANUEL. Tiens moi au courant stp. P.S: Oui "ON" est juste pour avoir autre chose que "OFF" et "Vacances" ... le code ne vérifie que OFF et Vacances et considère tout le reste comme le mode AUTO.
benjaoriane Posté(e) le 11 novembre 2014 Signaler Posté(e) le 11 novembre 2014 Bonjour à tous, J'ai adapté ce code pour gérer mon chauffage, c'est le top, merci Steven. Par contre, j'ai un soucis pour utiliser le panneau de chauffage, visiblement à cause du bug de json dans la version 4.018 (même message d'erreur que yoda6907)... Comment peut on faire dans ce cas là ? Pour info, je suis obligée de rester dans cette version pour utiliser le plugin virtual sensor qui gère ma sonde de température ! Merci d'avance de votre aide
Steven Posté(e) le 11 novembre 2014 Auteur Signaler Posté(e) le 11 novembre 2014 Il faudrait coder les heures directement dans le module virtuel en attendant mais sans ma HC2 je n'y arriverais pas. Il faut attendre quelques jours. Envoyé de mon HTC One_M8 dual sim en utilisant Tapatalk
yoda6907 Posté(e) le 11 novembre 2014 Signaler Posté(e) le 11 novembre 2014 (modifié) Bonjour à tous, J'ai adapté ce code pour gérer mon chauffage, c'est le top, merci Steven.Par contre, j'ai un soucis pour utiliser le panneau de chauffage, visiblement à cause du bug de json dans la version 4.018 (même message d'erreur que yoda6907)...Comment peut on faire dans ce cas là ?Pour info, je suis obligée de rester dans cette version pour utiliser le plugin virtual sensor qui gère ma sonde de température ! Merci d'avance de votre aide Bonsoir,Pour ma part, j'ai fait un downgrade vers la version 3.590. J'ai retouché le module pour y intégrer une gestion par le fil pilote (gestion des ordres confort, eco, arret, ..). J'ai laisse tombé le panneau de chauffage pour utiliser des variables : L'idée est de définir dans les variables (une pour chaque jour) les plages horaires pendant lequel le chauffage doit être en mode confort. Si pas dans la plage, on passe en mode Eco -- Bout de code qui détermine si l'on est dans une plage 'Confort' local i = 1 -- Recupere les plages horaire 'Confort' du jour local day = string.lower(os.date("%A")) local ch ="?" fibaro:debug("Jour : " ..day) ch =fibaro:getGlobal(day) local lg = string.len(ch) fibaro:debug("Chaine :" .. ch .. "-" .. lg) local hour = (os.date("%H")) local min = (os.date("%M")) local now = 100000 + hour * 60 + min fibaro:debug("jour : " ..day) local ipos1 = 0 while (ipos1 <= lg) do local sep1=string.find (ch,"-",ipos1) local sep2=string.find (ch,"/",sep1) hdeb=string.sub(ch,ipos1,sep1-1) hdebH=(string.sub(hdeb,0,2)) hdebM=(string.sub(hdeb,4,5)) heuredebut =100000 + hdebH * 60 + hdebM hfin=string.sub(ch,sep1+1,sep2-1) hfinH=(string.sub(hfin,0,2)) hfinM=(string.sub(hfin,4,5)) heurefin =100000 + hfinH * 60 + hfinM fibaro:debug(heuredebut .. "-" ..heurefin) ipos1 = sep2 + 1 if (now >= heuredebut) and (now <= heurefin) then gAutoConfort = 1 fibaro:debug("Plage N° : " ..i) break end i=i+1 end Voila rapidement. Je tacherais de prendre du temps pour diffuser le module complet Modifié le 15 novembre 2014 par yoda6907 Bonjour, merci d'editer le message et d'utiliser les balises pour code : <>
Fredric Posté(e) le 12 novembre 2014 Signaler Posté(e) le 12 novembre 2014 merci @Steven je viens de faire la modification, mais comme je suis au boulot et que les icônes de certain vd ne remonte pas, je ne vois pas si cela fonctionne, s'en en a tout l'air en tous cas. je te teins au courant 1
Steven Posté(e) le 14 novembre 2014 Auteur Signaler Posté(e) le 14 novembre 2014 Pour les fou de la v 4.018 Voici une solution temporaire (workaround) autre que celle de yoda6907 (qui a l'avantage d'utiliser des variables globales et d'être plus lisible). J'ai donc remplacer la méthode Heating.getTempPanel par celle-ci (quasiment identique) 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"} local datas = {} datas["monday"] = {} datas["monday"]["morning"] = {hour=7; minute=0; temperature=21} datas["monday"]["day"] = {hour=9; minute=0; temperature=19} datas["monday"]["evening"] = {hour=16; minute=0; temperature=21} datas["monday"]["night"] = {hour=23; minute=0; temperature=19} datas["tuesday"] = datas["monday"] datas["thursday"] = datas["monday"] datas["friday"] = datas["monday"] datas["wednesday"] = {} datas["wednesday"]["morning"] = {hour=7; minute=0; temperature=21} datas["wednesday"]["day"] = {hour=9; minute=0; temperature=21} datas["wednesday"]["evening"] = {hour=16; minute=0; temperature=21} datas["wednesday"]["night"] = {hour=23; minute=0; temperature=19} datas["saturday"] = datas["wednesday"] datas["sunday"] = datas["wednesday"] 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+datas[v][w].hour*60+datas[v][w].minute) then temp = datas[v][w].temperature mode = v .. " .. " ..w end lasttemp = datas[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 Vous constaterez que j'ai simplement déclarer en "dur" les jours et heures de chauffe en reprenant le même format que retourne normalement le panneau de chauffage de la fibaro. Voici une petit explication rapide : - Chaque jour est composé de 4 périodes : matin, jour, soirée, nuit - Chaque période commence à une certaine heure et est liée à une certaine température. Dans mon cas j'ai déclaré les données pour le lundi et ensuite j'ai juste indiqué que mardi, jeudi et vendredi sont identique datas["monday"] = {} datas["monday"]["morning"] = {hour=7; minute=0; temperature=21} datas["monday"]["day"] = {hour=9; minute=0; temperature=19} datas["monday"]["evening"] = {hour=16; minute=0; temperature=21} datas["monday"]["night"] = {hour=23; minute=0; temperature=19} -- Idem que lundi datas["tuesday"] = datas["monday"] datas["thursday"] = datas["monday"] datas["friday"] = datas["monday"] Pour moi le mercredi est comme le week-end, un jour non-travaillé datas["wednesday"] = {} datas["wednesday"]["morning"] = {hour=7; minute=0; temperature=21} datas["wednesday"]["day"] = {hour=9; minute=0; temperature=21} datas["wednesday"]["evening"] = {hour=16; minute=0; temperature=21} datas["wednesday"]["night"] = {hour=23; minute=0; temperature=19} -- idem que le mercredi datas["saturday"] = datas["wednesday"] datas["sunday"] = datas["wednesday"] Voilà , avec un peu d'attention, c'est assez simple à comprendre et adapté. J'espère avoir répondu a vos attente.
benjaoriane Posté(e) le 14 novembre 2014 Signaler Posté(e) le 14 novembre 2014 super, merci Steven, je pense que ça va résoudre mes soucis! Je vais tester le plus vite possible !!!
Fredric Posté(e) le 15 novembre 2014 Signaler Posté(e) le 15 novembre 2014 @Fredric Tu as eu raison de faire un "UP" je t'avais oublié .. honte sur moi. Ce que tu aimerais c'est qu'en mode "MANUEL" le module virtuel ne fasse plus rien ? C'est bien cela ? Dans mon code, cherche Heating.run = function() et juste la ligne en dessous ajoute ceci : if (fibaro:getGlobal("Chauffage") == "MANUEL") then return end Cela va stopper le module virtuel en mode MANUEL. Tiens moi au courant stp. P.S: Oui "ON" est juste pour avoir autre chose que "OFF" et "Vacances" ... le code ne vérifie que OFF et Vacances et considère tout le reste comme le mode AUTO. Merci @Steven, cela marche parfaitement 1
Fredric Posté(e) le 23 décembre 2014 Signaler Posté(e) le 23 décembre 2014 Bonjour @Steven, peux-tu me dire si la modification suivant est possible et fonctionnel dans ton module. pour que le chauffage fonctionne différemment selon si il y à personne ou si on est là , j'ai créé une deuxième zone de chauffage et je souhaite l'activer via une variable que j'utilise déjà dans plusieurs scripts. l'idée: "si aujourd’hui est égale à 1 alors choisir l'ID 5 si non choisir l'ID 3" -- 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 = 17 -- température souhaitée du mode vacances if tonumber(fibaro:getGlobalValue("Aujourdhui")) == tonumber("1") then Heating.stefa = 5 -- id du panneau de chauffage Present elseif Heating.stefa = 3 -- id du panneau de chauffage normal end Heating.admin = "login" Heating.password = "password" tu ne vois pas de complication pour le bon fonctionnement de ton module?
Steven Posté(e) le 23 décembre 2014 Auteur Signaler Posté(e) le 23 décembre 2014 Aucune contre-indication de mon côté, l'idée me semble même bonne. Juste que ton code n'est pas bon .. .voici la version corrigée if (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1) then Heating.stefa = 5 -- id du panneau de chauffage Present else Heating.stefa = 3 end
Fredric Posté(e) le 23 décembre 2014 Signaler Posté(e) le 23 décembre 2014 (modifié) ok, super j'ai un bug, j'avais déjà créé deux zones, une pour la sale de bain et une pour la zone 1 (salon, salle à manger ...), pas de soucis, les températures sont bien respectés. si je crée une troisième ou même plus, les horaires ne sont pas respectés, par exemple, il est 18h45, il va chercher la température de 00h00. tu as créé plusieurs zones ??? ça vient du panneau de chauffage, j'en ai créé un autre sans supprimer ce dernier et ça marche!! va comprendre...... Modifié le 23 décembre 2014 par Fredric
Steven Posté(e) le 24 décembre 2014 Auteur Signaler Posté(e) le 24 décembre 2014 Bonne nouvelle. Pour l'instant j'ai pas remis les zones. Il faudrait que je le fasse. Je les avait enlever lorsque le json ne fonctionnait plus. Envoyé de mon portable grâce àmes petits doigts.
barnabe Posté(e) le 7 mai 2015 Signaler Posté(e) le 7 mai 2015 Bonjour..... Petite question concernant toujours le même pb de conversion des données récupérer sur la ZIBASE: J'ai appliqué la ligne suivante sur un Slider (comme le devise virtuel de STEVEN) local temp = tonumber(fibaro:getValue(37, "ui.Slider1.value"))/10 et malgré cela , mes données affichées sont toujours sans la virgule !!! je pêche :-( besoin d'aides merci
Messages recommandés