Aller au contenu

Drôle De Problèmes Dans Un Virtual Device


tcheri

Messages recommandés

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)
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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");
Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ...

Lien vers le commentaire
Partager sur d’autres sites

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. 

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

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!

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...