Aller au contenu

Controle du panneau de chauffage


Messages recommandés

Posté(e)

Bonjour,

 

Je suis entrain de faire un module virtuel pour mettre et enlever le mode vacances sur mes zones du panneau de chauffage.

 

exemple pour la mise en route:

HC2 = Net.FHttp("192.168.0.21",80)
HC2:setBasicAuthentication("xxx", "xxx")
local stra = 2
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..stra)
jsonTable = json.decode(response)
jsonTable.properties.vacationTemperature =7;
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id="..stra, json)

et pareil avec la désactivation en mettant 0 au lieu de 7

 

mais j'ai 4 zones à  faire, et si je répète 4 fois ce code, ça ne marche pas.

HC2 = Net.FHttp("192.168.0.21",80)
HC2:setBasicAuthentication("admin", "xxx")
local strefa = 2
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa)
jsonTable = json.decode(response)
jsonTable.properties.vacationTemperature =0;
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id="..strefa, json)

HC2 = Net.FHttp("192.168.0.21",80)
HC2:setBasicAuthentication("admin", "xxx")
local strefa = 4
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa)
jsonTable = json.decode(response)
jsonTable.properties.vacationTemperature =0;
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id="..strefa, json)

HC2 = Net.FHttp("192.168.0.21",80)
HC2:setBasicAuthentication("admin", "xxx")
local strefa = 6
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa)
jsonTable = json.decode(response)
jsonTable.properties.vacationTemperature =0;
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id="..strefa, json)

HC2 = Net.FHttp("192.168.0.21",80)
HC2:setBasicAuthentication("admin", "xxx")
local strefa = 8
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa)
jsonTable = json.decode(response)
jsonTable.properties.vacationTemperature =0;
json = json.encode(jsonTable);
HC2:PUT("/api/panels/heating?id="..strefa, json)

Je débute dans la programmation et je me doute que la syntaxe ou la manière n'est pas là .

 

Autre question: pourquoi passer par des commandes "extérieures HTTP" pour faire changer des données du HC2? On ne peut pas le faire directement avec une commande du style fibaro:get.... ou fibaro:setglobal... ? 

Au final je veux juste mettre "7" dans la donnée "vacationTemperature" des mes "panels/heating" qui ont les id 2,4,6 et 8

 

Sinon, pour comprendre un peu mieux le premier code qui marche:

 

HC2 = Net.FHttp("192.168.0.21",80)   => donne l'adresse pour se loguer au HC2
HC2:setBasicAuthentication("xxx", "xxx")   => donne les identifiants

local stra = 2                                            => défini la variable "stra" à  2
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..stra) => capture toues les valeurs du panneau de chauffage 2 ??

jsonTable = json.decode(response)              => met ces données dans la table appelée jsontable ???
jsonTable.properties.vacationTemperature =7;     => met le champs "vacationtemperature" à  7 ???
json = json.encode(jsonTable);       => ??? ré-encode tous les champs?
HC2:PUT("/api/panels/heating?id="..stra, json)  => remet tous les champs, y compris les modifés dans le panneau de chauffage 2

 

Voila ce que j'en comprend, est-ce à  peut près ça?

 

Merci de votre patiente si vous êtes arrivés jusqu'ici :)

 

Posté(e)

Cela m'interesse car je n'y suis pas arrivé avec un seul code.

J'ai fait un VD avec X jeu de deux boutons pour chaque zone, puis un jeu de bouton appelant tous les autres.

 

J'ai essayé le code suivant de Andrew de Fibaro, sans le slider en fixant la température (j'ai remplacé "_sliderValue_" par "15") mais cela ne marche pas, une seule zone change de statut, pas les autres.

local new_temp = _sliderValue_;
local heating_section

-- your sections from min to max
id_sections = {1,3,5 }

 for var = 1, #id_sections do
heating_section =id_sections[var];
 
--your hc2 ip
HC2 = Net.FHttp("192.168.100.xx",80)
--your hc2 login data
HC2:setBasicAuthentication("admin", "admin")

-- get harmonogram
fibaro:log("trying for " .. heating_section)
fibaro:sleep(1000)
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..heating_section)

fibaro:log("status = " .. status)
fibaro:sleep(3000)
 
if (tonumber(status) == 200) then
   
  jsonTable = json.decode(response)
  if (tonumber(jsonTable.properties.vacationTemperature) == tonumber(new_temp))
  then
        --calling action
        fibaro:log("you got that temp "..jsonTable.properties.vacationTemperature)
  else
        --calling action
       
   fibaro:log("setting temp")
    -- change tabele in Lua
  jsonTable.properties.vacationTemperature = tonumber(new_temp);
 
  -- send back
  json = json.encode(jsonTable);
  HC2:PUT("/api/panels/heating?id="..heating_section, json)
  fibaro:log("Holiday mode set")
  end 
   
  else
      fibaro:log("there is no such section");
    fibaro:sleep(1000);
  end
fibaro:log("going to next section");
fibaro:sleep(5000) 
end
Posté(e)

Bonsoir,
Pour ma part, le code ci-après fonctionne, une modification avait été faite par Robmac sur le forum officiel.

J'ai décalé la ligne pour montrer la différence. Juste après le commentaire --Send back

local new_temp = _sliderValue_; 
local heating_section 

-- your sections from min to max 
id_sections = {1,3,5 } 

 for var = 1, #id_sections do 
heating_section =id_sections[var]; 
  
--your hc2 ip 
HC2 = Net.FHttp("192.168.100.xx",80) 
--your hc2 login data 
HC2:setBasicAuthentication("admin", "admin") 

-- get harmonogram 
fibaro:log("trying for " .. heating_section) 
fibaro:sleep(1000) 
response ,status, errorCode = HC2:GET("/api/panels/heating?id="..heating_section) 

fibaro:log("status = " .. status) 
fibaro:sleep(3000) 
  
if (tonumber(status) == 200) then 
    
  jsonTable = json.decode(response) 
      if (tonumber(jsonTable.properties.vacationTemperature) == tonumber(new_temp)) 
      then 
            --calling action 
            fibaro:log("you got that temp "..jsonTable.properties.vacationTemperature) 
            fibaro:sleep(1000) 
      else 
            --calling action 
            
            fibaro:log("setting temp") 
            fibaro:sleep(1000) 
            -- change tabele in Lua 
            jsonTable.properties.vacationTemperature = tonumber(new_temp); 
        
          -- send back 
jsonstr = json.encode(jsonTable); 
          response2 ,status2, errorCode2 = HC2:PUT("/api/panels/heating?id="..heating_section, jsonstr)
          if (tonumber(errorCode2)==0) 
          then 
          fibaro:log("Holiday mode set Status "..status2) 
          fibaro:sleep(1000) 
          else 
          fibaro:log("Error in send back "..errorCode2) 
          fibaro:sleep(1000) 
          end 
      
      
      end 
    
else 
        fibaro:log("there is no such section"); 
        fibaro:sleep(1000); 
end 
fibaro:log("going to next section"); 
fibaro:sleep(5000) 
end
  • Upvote 1
  • 1 mois après...
Posté(e)

Si quelqu'un suit le sujet, le code ci-dessus fonctionne. 

Pour info personnelle, si je veux récupérer la valeur du slider dans un autre bouton (slider = réglage et bouton = envoi du réglage)

le temp = _sliderValue_ ne fonctionne pas, il faut un figaro:getValue(ID du virtDevice, ID du slider) ?

  • Upvote 1
×
×
  • Créer...