Aller au contenu
flechg

variable haute

Recommended Posts

j ai essaye rien a faire ca fonctionne pas 

est ce possible de faire une scène avec activation et désactivation du ventilo selon la température

---activation du ventilo exemple 

HC2:GET("/control?cmd=GPIO,16,1");

merci

cdt

Partager ce message


Lien à poster
Partager sur d’autres sites

salut a tous 

encore le casse pied avec son nan et nan:P

voila si je veux passer par une scène pour allumer ou éteindre le ventilo 

j ai fait ca mais ca marche pas une idée 

--[[
%% properties
747 value
%% events
%% globals
--]]

local value = fibaro:getValue(747, "ui.lbl1.value")
local tempMax = 38
while true do 
    fibaro:debug(value)
 fibaro:sleep(6*1000)
 if (tonumber(value) == 200 and tonumber(err)==0) then
	
   if value > tempMax then
    fibaro:call(747, "pressButton", "2");
      fibaro:debug("allumage ventilo")
   
    end
  end
  end

  

merci encore

Partager ce message


Lien à poster
Partager sur d’autres sites
--[[
%% autostart
%% properties
747 value
%% events
%% globals
--]]
while true do
local value = fibaro:getValue(747, "ui.lbl1.value")
local tempMax = "38 °C" -- penser °c autrement compare nil value erreur
local tempMin = "32 °C"

    fibaro:debug(value)
  fibaro:sleep(60*1000)
 	--Pour traiter le "nan"
	 if value == "nan" then value = "tempMin" end
   if value > tempMax then
    fibaro:call(747, "pressButton", "2");
      fibaro:debug("allumage ventilo") end
   if value < tempMin then
  fibaro:call(747, "pressButton", "3");
      fibaro:debug("extinction ventilo") end
    
  
  end

Bon voila la scène est fonctionnel elle peut être amélioré sûrement si vous avez des suggestions 

merci 

Partager ce message


Lien à poster
Partager sur d’autres sites

Ha ben voilà !! Nickel ça ! :) 

 

tu pourrais peut être rajouter ce bout de code dans le main du VD, ça te fera une scène en moins, et tout sera au meme endroit...

par contre si tu fais ça, pas besoin du while true do... il boucle tout seul...

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

merci encore pour ton aide 

effectivement je vais grouper les deux se sera mieux:60::13:

bonne nuit

 

Modifié par flechg

Partager ce message


Lien à poster
Partager sur d’autres sites

bon je savais que c était pas fini

[DEBUG] 00:23:20: nan °C
[DEBUG] 00:23:35: extinction ventilo
[DEBUG] 00:23:35: allumage ventilo
[DEBUG] 00:23:35: nan °C
[DEBUG] 00:23:50: extinction ventilo
[DEBUG] 00:23:50: allumage ventilo
[DEBUG] 00:24:50: nan °C
[DEBUG] 00:25:05: extinction ventilo
[DEBUG] 00:25:05: allumage ventilo

comment on pourrait régler cela

je vais chercher mmais demain 

bonne nuit a tous:angry: 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je crois que je viens de comprendre le « nan », il faut y ajouter le « °C » aussi ...

 

Ensuite attention, tu dois ajouter la convertion des chaînes (value, tempMax et tempMin) comme dans le code précédent.

Avant de faire la comparaison

--[[
%% autostart
%% properties
747 value
%% events
%% globals
--]]
while true do

	local value = fibaro:getValue(747, "ui.lbl1.value")
	local tempMax = "38 °C" -- penser °c autrement compare nil value erreur
	local tempMin = "32 °C"

	fibaro:debug(value)
	fibaro:sleep(60*1000)
	
	--Pour traiter le "nan" ATTENTION au "°C" après le "nan"
	if value == "nan °C" then value = "tempMin" end
	
	if value > tempMax then
    	fibaro:call(747, "pressButton", "2");
		fibaro:debug("allumage ventilo")
	elseif value < tempMin then
		fibaro:call(747, "pressButton", "3");
		fibaro:debug("extinction ventilo")
	end

end

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

re salut 

bon va t on y arriver :(:(

voila ma requête du fait que le "nan °C" ne fonctionne pas 

est il possible d attribuer une local nan et lui dire que cette local est = ou < a la température Mini 

ex

local nul = nan ou "nan °C"
local nul < local tempMin
                 

parce que la je pense que la valeur nan est comprise comme valeur > a la température Max

 

ou alors peut être plus simple mais je sais pas si cela est possible si valeur = nan alors on remonte a la ligne 1

 

merci encore

bonne soirée

Modifié par flechg

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais tu as essayé avec les convertions de type ?

 

Voilà le code les comprenant :

 

--[[
%% autostart
%% properties
747 value
%% events
%% globals
--]]
while true do

	local value = fibaro:getValue(747, "ui.lbl1.value")
	local tempMax = "38 °C" -- penser °c autrement compare nil value erreur
	local tempMin = "32 °C"

	fibaro:debug(value)
	fibaro:sleep(60*1000)
	
	--Pour traiter le "nan" ATTENTION au "°C" après le "nan"
	if value == "nan °C" then value = "tempMin" end
	
	--convertion
	value = string.format("%.1f",value)
	tempMax = string.format("%.1f",tempMax)
	tempMin = string.format("%.1f",tempMin)
	
	--debug pour être sur des valeurs :
	fibaro:debug("value = "..tonumber(value))
	fibaro:debug("tempMax = "..tonumber(tempMax))
	fibaro:debug("tempMin = "..tonumber(tempMin))
	
	if tonumber(value) > tonumber(tempMax) then
		fibaro:call(747, "pressButton", "2");
		fibaro:debug("allumage ventilo")
	elseif tonumber(value) < tonumber(tempMin) then
		fibaro:call(747, "pressButton", "3");
		fibaro:debug("extinction ventilo")
	end

end

 

Partager ce message


Lien à poster
Partager sur d’autres sites

salut

non ca fonctionne pas

[DEBUG] 23:48:14: nan °C
[DEBUG] 23:48:29: line 22: bad argument #2 to 'format' (number expected, got string)

la ligne 22
value = string.format("%.1f",value)

par contre j ai trouvé une méthode qui ne me plait pas mais bon

tant que la valeur est a nan on relance la boucle

while value == erreurnan do -- reboot si nan
     fibaro:call(747, "pressButton", "3");
      fibaro:debug("ventilo off") end

qu en penses tu

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

C’est clairement un problème de convertion de type.

essayes ça Dans le paragraphe convertion :

	--convertion
	value = string.match(value, "[0-9.]+")
	tempMax = string.match(tempMax, "[0-9.]+")
	tempMin = string.match(tempMin, "[0-9.]+")

 

Modifié par jjacques68
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

SALUT

bon alors le nan une belle m.......................

avec ton code dans le debug on a plus le °C mais que la valeur numérique mais quand le NAN apparaît alors bug

[DEBUG] 19:49:20: 38.63 °C
[DEBUG] 19:50:20: value = 38.63
[DEBUG] 19:50:20: tempMax = 38
[DEBUG] 19:50:20: tempMin = 32
[DEBUG] 19:50:20: allumage ventilo
[DEBUG] 19:50:20: nan °C
[DEBUG] 19:51:20: line 26: attempt to concatenate a nil value

pouf!!!!!!!!!!!!!!!!!!!!!!!

merci en tout cas 

je penses que je vais le faire rebooter quand il y a nan 

:13::74:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah le boulet, j’avais pas vu !! C’est normal !!

--Pour traiter le "nan" ATTENTION au "°C" après le "nan"
if value == "nan °C" then value = "tempMin" end

C’est faux !!

voilà ce qu’il faut : enlever les double quote autour de tempMin.

enfait ce qu’on a fait, c’est que si value = nan °C alors value = tempMin et non 32 !

--Pour traiter le "nan" ATTENTION au "°C" après le "nan"
if value == "nan °C" then value = tempMin end

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

SALUT

POPOPOPOP CA MARCHE!!!!!!!!!!!!!!!!!!!!!!!!

 

moi aussi j avais pas vu un grand merci 

j ai aimé cette collaboration qui ma fait avancé un peu

merci encore:74::P 

Partager ce message


Lien à poster
Partager sur d’autres sites

encore une petite question

peux tu m expliquer ce code je ne vois pas a quoi il sert

if (tonumber(status) == 200 and tonumber(err)==0) then

merci @+

Partager ce message


Lien à poster
Partager sur d’autres sites

Ce bout de code que tu trouves après l’exécution de ta requête HTTP, permet de contrôler le retour d’état de celle-ci.

si status = 200 veut dire que tout s’est bien passé et err=0 veut dire qu’il n’y a pas d’erreur en retour.

Donc avec ces 2 conditions, tu peux donc continuer à traiter ton code.

Sinon ça sert à rien, ton code va planter. Il sera possible aussi du coup d’afficher le code erreur renvoyé( en option).

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

voila le code du vd pour ne pas utiliser la scène 

est il d après vous correct 

il est fonctionnel il remonte le nan mais sans poser de problème pour moi il a l air bien

si vous voyez des erreurs merci de m en informer

cdt

local selfId = fibaro:getSelfId()
local WEB = Net.FHttp("192.168.1.24",80) -- IP to your espeasy
local response ,status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy
local VgHc2 = fibaro:getGlobal("TempHc2")
local jsonTable = json.decode(response)
local value = jsonTable.Temperature
local tempMax = 38,00
local tempMin = 32,00
local nan = 10,00
if (tonumber(status) == 200 and tonumber(err)==0) then

	  --Pour traiter le "nan"
	-- if value == nan then value = VgHc2 end
	
  --update label VD
 	if value == nan then
	fibaro:call(selfId, "setProperty", "ui.lbl1.value",  "10 °C") --remplace le nan par "0 °C"
elseif
	 value ~= nan then
	fibaro:call(selfId, "setProperty", "ui.lbl1.value", value.. " °C") --sinon insere la température
end
  
  	--debug + log
	fibaro:log(value)
	fibaro:debug("Valeur mesurée = "..value)
	fibaro:debug("Valeur mémorisée = "..VgHc2)  
    
    
	--conversion des string
	value = string.format("%.1f",value)

	--convertion en chiffre -----> A TESTER
	value = tonumber(value)
	VgHc2 = tonumber(VgHc2)

	--Pour voir la modif
	--fibaro:debug("Valeur mesurée modifiée = "..value)
	--fibaro:debug("Valeur mesurée modifiée = "..VgHc2)

	--Comparaison entre la Temperature mémorisée et la température mesurée
  if value > VgHc2 then        
		fibaro:setGlobal("TempHc2", value)
		fibaro:debug("température supérieure = Mise à jour de la VG")
	else
		fibaro:debug("température inférieure = rien")
	end 
 if VgHc2 == 85 then 
  	fibaro:call(747, "pressButton", "5");
		fibaro:debug("eraz variable")
  end
  end
if value == nan then value = tempMin end
value = tonumber(value)
tempMax = tonumber(tempMax)
tempMin = tonumber(tempMin)
fibaro:debug("value = "..tonumber(value))
fibaro:debug("tempMax = "..tonumber(tempMax))
fibaro:debug("tempMin = "..tonumber(tempMin))
if value > tempMax then
  fibaro:call(747, "pressButton", "2");
  fibaro:debug("allumage ventilo")
  elseif value < tempMin then
  fibaro:call(747, "pressButton", "3");
  fibaro:debug("extinction ventilo")
  end

merci 

bonne soirée

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouch ! Tu as fait un mix de tout ;) c’est un peu le cirque...

Je viens de réécrire, à essayer pour voir... 

À essayer... j’ai pas testé donc peut être des erreurs...

quand tu codes, n’hésites pas à mettre des commentaires, debug et respecter l’indentation pour plus de facilité à relire le code et le comprendre... :) 

je comprends pas le coup du 85 °C ???

local selfId = fibaro:getSelfId() --ID du VD de type integer
local WEB = Net.FHttp("192.168.1.24",80) -- IP to your espeasy
local VgHc2 = fibaro:getGlobal("TempHc2") --valeur mémorisée de type string
local tempMax = "38 °C" --de type string
local tempMin = "32 °C" --de type string
local tempNan = "10 °C" --de type string

local response ,status, err = WEB:GET("/json?tasknr=1") -- task id on espeasy
if (tonumber(status) == 200 and tonumber(err)==0) then -- si réponse ok


	local jsonTable = json.decode(response) --recupère la table des valeurs de retour
	local value = jsonTable.Temperature -- sélectionne que la température
	
	--force value à tempNan si réponse = "nan °C"
	if value == "nan °C" then value = tempNan end

	--debug 
	fibaro:debug("Valeur mesurée = "..value)

	 --update label VD (le "°C" est dans value)
	fibaro:call(selfId, "setProperty", "ui.lbl1.value", value)
    
	--conversion des string
	if value then value = string.match(value, "[0-9.]+") end
	if tempMax then tempMax = string.match(tempMax, "[0-9.]+") end
	if tempMin then tempMin = string.match(tempMin, "[0-9.]+") end
	if tempNan then tempNan = string.match(tempNan, "[0-9.]+") end
	if VgHc2 then VgHc2 = string.match(VgHc2, "[0-9.]+") end

	--debug des valeur converti pour info
	fibaro:debug("valeur converti :")
	fibaro:debug("value = "..tonumber(value))
	fibaro:debug("tempNan = "..tonumber(tempNan))

	--Comparaison entre la Temperature mémorisée et la température mesurée
	fibaro:debug("Comparaison pour stockage dans variable : ")
	fibaro:debug("Valeur mémorisée actuelle = "..VgHc2)
	if tonumber(value) > tonumber(VgHc2) then        
		fibaro:debug("température mesurée supérieure -> Mise à jour de la VG")
		fibaro:setGlobal("TempHc2", value.." °C")
	else
		fibaro:debug("température mesurée inférieure ou égal -> pas de mémorisation")
	end
	
	--si temperature = 85 alors appui sur Btn 5 du device 747
	fibaro:debug("Comparaison avec 85 °C :")
	if tonumber(VgHc2) == 85 then 
		fibaro:call(747, "pressButton", "5");
		fibaro:debug("= 85 °C -> eraz variable")
	else
		fibaro:debug("<> 85 °C -> rien à faire")
	end

	--allumage ou pas du ventilo
	fibaro:debug("Comparaison pour allumage du ventilo :")
	fibaro:debug("tempMax = "..tonumber(tempMax))
	fibaro:debug("tempMin = "..tonumber(tempMin))
	if tonumber(value) > tonumber(tempMax) then
		fibaro:call(747, "pressButton", "2");
		fibaro:debug("allumage ventilo")
	elseif value < tempMin then
		fibaro:call(747, "pressButton", "3");
		fibaro:debug("extinction ventilo")
  	end
  	
  	fibaro:sleep(10*1000) -- en option : petite tempo pour calmer le code dans le VD
  	
end

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

salut le code fonctionne mais dés que nan apparaît il y a un message d erreur c est sûre que c est beaucoup mieux c est pas le bazar comme le mien

je vais étudier le code et je reviens vers toi pour des améliorations cela va me permettre de comprendre 

merci encore

@+

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut
ok je vois demain car aujourd'hui je ne suis pas chez moi
Bon week

Envoyé de mon MHA-L09 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×