tcheri Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 Salut, J'ai de drôles de problèmes dans un virtual device. J'en ai plusieurs qui fonctionnent bien, mais dans un, j'ai des problèmes assez aléatoires que je n'arrive pas à expliquer. Rien de bien particulier dans la main loop Mes soucis : par exemple,dans les dernières lignes, je fais une mise à jour des labels 6 et 7 avec deux valeurs de température (ligne 116 et 117). Dans certains cas, même si en debug j'ai les bonnes valeurs, il n'affiche rien ou une valeur farfelue. J'ai tout revérifié, je trouve pas. J'ai exporté le VD, recréé, rebelote J'utilise peut être un peu plus de fibaro:setGlobal et fibaro:GetGlobal que dans d'autres modules. Question : est-ce que j'utilise des fonctions à risque (par exemple lecture/écriture de variables globales) ? Merci -- Init local idPompe = 328 local idPAC = 333 local nSleep = 5 local idThis = 378 local P_Mode = fibaro:getGlobalValue("P_Mode"); fibaro:debug('Mode: '.. P_Mode); -- Is PAC Dead ? if tonumber(fibaro:getValue(idPAC, "dead")) == 1 then fibaro:debug("PAC Dead") fibaro:call(1, "wakeUpDeadDevice", idPAC); fibaro:sleep(nSleep*60*1000); end -- Temps MAX local P_Time = tonumber(fibaro:getGlobalValue("P_Time")) local P_MaxTime = tonumber(fibaro:getGlobalValue("P_MaxTime")) fibaro:call(idThis, "setProperty", "ui.Slider1.value", P_MaxTime/600*100) if tonumber(fibaro:getValue(idPompe, "value") ) == 1 then P_Time = P_Time + nSleep fibaro:setGlobal("P_Time",tostring( P_Time ) ) end fibaro:call(idThis, "setProperty", "ui.Label5.value", P_Time .." minutes") fibaro:call(idThis, "setProperty", "ui.Label4.value", P_MaxTime..' minutes' ) fibaro:debug('Temps : '.. tostring(P_Time)..' on '.. tostring(P_MaxTime) ); -- TEMPERATURES fibaro:debug('5'); local P_PAC_Temp_ON = '0' local W_MaxTemp = tonumber(fibaro:getGlobalValue("W_MaxTemp")); fibaro:debug(tostring(W_MaxTemp)); if W_MaxTemp <= 13 then P_PAC_Temp_ON = 10; elseif W_MaxTemp < 16 then P_PAC_Temp_ON = W_MaxTemp - 2; elseif W_MaxTemp < 22 then P_PAC_Temp_ON = W_MaxTemp - 3; else P_PAC_Temp_ON = 20; end fibaro:setGlobal("P_PAC_Temp_ON", tostring(P_PAC_Temp_ON) ); fibaro:call(idThis, "setProperty", "ui.Label2.value", P_PAC_Temp_ON .." °C") ; local W_ActualTemp = tonumber(fibaro:getValue(350, "value") ); fibaro:call(idThis, "setProperty", "ui.Label3.value", W_ActualTemp.." °C"); fibaro:debug('Temp ON : '.. tostring(P_PAC_Temp_ON) ); -- MODE ON if P_Mode == '1' then fibaro:call(idThis, "setProperty", "ui.Label1.value", 'On'); fibaro:startScene(44); end -- MODE OFF if P_Mode == '0' then fibaro:call(idThis, "setProperty", "ui.Label1.value", 'Off'); fibaro:startScene(25); end -- MODE CHAUDIERE if P_Mode == '3' then fibaro:debug('Temps pompe ON : '.. tostring(P_Time) ); if P_Time < P_MaxTime then fibaro:call(idPompe, "turnOn"); fibaro:call(idThis, "setProperty", "ui.Label1.value", "Chaudiere - ON"); else fibaro:call(idPompe, "turnOff"); fibaro:call(idThis, "setProperty", "ui.Label1.value", "Chaudiere - OFF"); end end -- MODE AUTO if P_Mode == '2' then if W_ActualTemp >= P_PAC_Temp_ON and (P_Time < P_MaxTime) then fibaro:call(idThis, "setProperty", "ui.Label1.value", "Auto - ON") fibaro:startScene(44) else fibaro:call(idThis, "setProperty", "ui.Label1.value", "Auto - OFF") fibaro:startScene(25) end end ---- ALERTE SI PAC DEMARE PAS if fibaro:getValue(idPompe, "value") == '1' and fibaro:getValue(idPompe, "value") ~= '1' and PACDayMin > 10 and P_Mode == 3 then fibaro:call(31, "sendPush", "Mise en sécurité PAC"); end -- FIN MODE fibaro:call(idThis, "setProperty", "ui.Label6.value", fibaro:getValue(368, "value") .." °C"); fibaro:call(idThis, "setProperty", "ui.Label7.value", fibaro:getValue(369, "value").." °C"); fibaro:sleep(nSleep*60*1000)
Shad Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 Qu'est-ce que tu utilises comme sonde de température pour l'id 368 et 369?
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 J'utilise un module "FGBS321 Universal Binary Sensor" avec deux capteurs de température (le même pour les deux). Dans l'interface, ils donnent les bonnes valeurs. La particularité aussi c'est qu'ils sont dans une HC2 salve.
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 Et ce que je comprends pas,c'est que cela a fonctionné pendant des semaines, si pas des mois, et plus maintenant : sans changer de version 3.591, juste avec quelques petites modifs autre part dans le code de la main loop.
Krikroff Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 peux-tu essayer ceci en avec les lignes de fin fibaro:call(idThis, "setProperty", "ui.Label6.value", fibaro:getValue(368, "value") .." °C"); fibaro:call(idThis, "setProperty", "ui.Label7.value", fibaro:getValue(369, "value").." °C"); et remplacer par fibaro:sleep(1000); local val1, val2 = fibaro:getValue(368, "value") or "n.c", fibaro:getValue(369, "value") or "n.c"; fibaro:debug(val1); fibaro:debug(val2); fibaro:call(idThis, "setProperty", "ui.Label6.value", val1 .. " °C"); fibaro:call(idThis, "setProperty", "ui.Label7.value", val2 .. " °C");
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 Merci Krikroff. Cela marche pas mieux : les variables en debug ne sont pas bonnes non plus. Même avec une pause de 10 sec Je suis ici en P_Mode = 3. Si je passe en P_Mode 0, j'ai les bonnes valeurs (avec ton code ou l'original)
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 J'ai refais quelques tests : seul le P_Mode 3 pose problème ! Si je commente les lignes 85 et 88, je n'ai plus de problème ! C'est un appel àun switch AON Labs pour allumer ou fermer une pompe, qui se trouve sur une HC2 slave. Dans les autres modes, j'appelle une scène... Je vais donc remplacer par un appel de scène. Mais c'est bizarre !
Krikroff Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 tu n'aurais pas un un trigger dans une scène (sur le device responsable de la pompe) avec un code qui modifierait la valeur des variables 368 et 369 ?
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 Non, la 368 et 369 ne sont lues que dans ce VD. J'ai bien un trigger dans une scène sur la pompe, mais il ne fait que couper un autre équipement. Je pense avoir reproduit le problème : -> si je commande un switch qui est sur un HC slave, je reproduis le problème. Quelque soit le switch, y compris ceux sans trigger. -> si je commande un switch qui est sur le master, pas de soucis -> si j'appelle une scène qui commande le switch sur la slave, ok aussi Et comme je l'avais écrit au début, cela cause d'autre soucis : par exemple la lecture d'une variable globale retournait parfois nul au passage suivant. Donc pas uniquement ce problème d'affichage : cela déstabilise tout le VD.
Krikroff Posté(e) le 26 août 2014 Signaler Posté(e) le 26 août 2014 il est possible que tu es mis le doigt sur un bug mais le truc c'est que je ne vois pas trop la relation entre le ON/OFF du device et la valeur °C de la varible ...
tcheri Posté(e) le 26 août 2014 Auteur Signaler Posté(e) le 26 août 2014 Ce n'est pas l'affichage, mais toute lecture de variable ou device. J'ai simplifié le code : local P_Mode = fibaro:getGlobalValue("P_Mode"); fibaro:debug('Mode before : '.. P_Mode); --- ************* --fibaro:call(328, "turnOn"); --- ************* local val1, val2 = fibaro:getValue(368, "value") or "n.c", fibaro:getValue(369, "value") or "n.c"; fibaro:debug(val1); fibaro:debug(val2); fibaro:call(379, "setProperty", "ui.Label6.value", val1 .. " °C"); fibaro:call(379, "setProperty", "ui.Label7.value", val2 .. " °C"); P_Mode = fibaro:getGlobalValue("P_Mode"); fibaro:debug('Mode after : '.. P_Mode); fibaro:sleep(5*60*1000); Avec l'appel à la pompe commenté, j'ai en debug le résultat correct : [DEBUG] 22:20:56: Mode before : 3 [DEBUG] 22:20:56: 26.62 [DEBUG] 22:20:56: 27.31 [DEBUG] 22:20:56: Mode after : 3 Si je dé-commente, j'ai en debug : [DEBUG] 22:24:48: Mode before : 3 [DEBUG] 22:24:48: [DEBUG] 22:24:48: 26.56 [DEBUG] 22:24:48: Mode after : 27.31 Je retrouve donc dans ma première lecture un blanc, puis dans ma deuxième ma valeur de la première, et dans la dernière, qui devrait contenir '3' comme au début du script, la valeur du deuxième capteur de température... ça ressemble donc à un bug Et cela se produit si j'inclus n'importe que call à tout device du HC slave ! Reste à voir si cela se reproduit sur d'autres install.
tcheri Posté(e) le 22 septembre 2014 Auteur Signaler Posté(e) le 22 septembre 2014 Bug confirmé par Fibaro We apologize for such late answer. We checked and tested your issue and confirmed there is some bug. We forwarded this case to our programmers. It will be resolved in one of our next software versions. We apologize for any inconvenience.If you will have any additional questions please feel free to ask us!
Messages recommandés