Aller au contenu
SebDel

Eco-Devices Et Compagnie

Recommended Posts

Bonjour à  tous,

 

Je viens d'installer un module eco-devices de GCE qui s'occupe de capter pour l'instant la consommation de deux compteurs d'eau.

L'intégration avec la HC2 c'est assez bien passé puisque j'ai pu créer un module virtuel qui interroge périodiquement l'éco-devices et renseigne dans des variables la consommation instantanée et moyenne glissante sur une période plus large pour détecter les puisages ponctuels ou les douches/bains plus important.

Sur la requête

local response ,status, err = HC2:GET("/api/xdevices.json?cmd=10") 

 le retour json est erroné :

{"product":"Eco-devices","T1_PTEC":"----","T1_PAPP":0,","T2_PTEC":"----","T2_PAPP":0,","INDEX_C1":592,"INDEX_C2":431}
au lieu de
{"product":"Eco-devices","T1_PTEC":"----","T1_PAPP":0,"T2_PTEC":"----","T2_PAPP":0,"INDEX_C1":592,"INDEX_C2":431} 

il faut donc le corriger pour l'instant comme ceci

response2=string.gsub(response,"\"T1_PAPP\":0,\",\"T2_PTEC\":\"----\",\"T2_PAPP\":0,\"","\"T1_PAPP\":0,\"T2_PTEC\":\"----\",\"T2_PAPP\":0")

Ensuite et au bout d'un certain temps le json.decode deconne (c'est un jeu de mot) !

 

Malgré les excellents tutos sur le sujet avec les tests nil  du result + protection divers et surtout l'appel avec le pcall revu et corrigé le module virtuel fini par planter et la boucle cesser...

Voici pour ceux qui pourront m'aider le code que j'ai dans le module virtuel

if (not ED) then
  SelfId = fibaro:getSelfId()
  local EcoDevIP = fibaro:get(SelfId, "IPAddress")
  local EcoDevPort = fibaro:get(SelfId, "TCPPort")
  
    function EcoDevices(initHostPort)
	  local self = {
			UserPwd = "",
			TabEauF = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			TabEauC = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
			LastEauF=0,
			LastEauC=0
		  }
		  
		function self.init()
			LastEauF=0
			LastEauC=0
		end

	  function self.Main()
	  	local tmpeauf = tonumber(fibaro:getGlobalValue("EcoDev_EF"))
		local tmpeauc = tonumber(fibaro:getGlobalValue("EcoDev_EC"))
		local difeauf=0
		local difeauc=0
		local moy10f=0
		local moy10c=0
		HC2=Net.FHttp(EcoDevIP)
		HC2:setBasicAuthentication("admin","xxxxxxxxx")
		local response ,status, err = HC2:GET("/api/xdevices.json?cmd=10")
		if (tonumber(status) == 200 and tonumber(err)==0) then
			--fibaro:debug(response)
			if response ~= nil then
			  response2=string.gsub(response,"\"T1_PAPP\":0,\",\"T2_PTEC\":\"----\",\"T2_PAPP\":0,\"","\"T1_PAPP\":0,\"T2_PTEC\":\"----\",\"T2_PAPP\":0")
          	  if response2~=response then
                result=json.decode(response2)
                if(tmpeauf>0) then difeauf=tonumber(result.INDEX_C1)-tmpeauf end
                if(tmpeauc>0) then difeauc=tonumber(result.INDEX_C2)-tmpeauc end
                difeauf=difeauf-difeauc
                HC2=Net.FHttp("api.thingspeak.com")
                response=HC2:GET("/update?api_key=xxxxxxxxxxxxxxxxx&field1="..tostring(difeauf).."&field2="..tostring(difeauc))
                fibaro:debug(response)
                for tmpi = 20 , 1 , -1 do
                    ED.TabEauF[tmpi]=ED.TabEauF[tmpi-1]
                    ED.TabEauC[tmpi]=ED.TabEauC[tmpi-1]
                end
                ED.TabEauF[1]=difeauf
                ED.TabEauC[1]=difeauc
                moy10f=0
                moy10c=0
                for tmpi = 1 , 20 , 1 do
                    moy10f=moy10f+ED.TabEauF[tmpi]
                    moy10c=moy10c+ED.TabEauC[tmpi]
                end
                fibaro:call(SelfId, "setProperty", "ui.lblInstantf.value", difeauf)
                fibaro:call(SelfId, "setProperty", "ui.lblInstantc.value", difeauc)
                fibaro:call(SelfId, "setProperty", "ui.lblM10F.value", moy10f)
                fibaro:call(SelfId, "setProperty", "ui.lblM10C.value", moy10c)
                fibaro:setGlobal('EcoDev_EF', result.INDEX_C1)
                fibaro:setGlobal('EcoDev_EC', result.INDEX_C2)
                fibaro:setGlobal('EcoDev_GliF', moy10f)
                fibaro:setGlobal('EcoDev_GliC', moy10c)
                fibaro:log("F="..difeauf.." C="..difeauc.." GF="..moy10f.." GC="..moy10c)
            	end
			end
		else
        fibaro:debug(string.format("<font color=\"red\">Error: %s</font>", "Error code: " .. err))
        return false
		end
		--fibaro:sleep(60*1000)
      	return true
	  end 
	
			
	  self.init()
	  return self
	end

  
  if EcoDevIP == nil or EcoDevIP == "" then
    fibaro:debug(string.format("<font color=\"red\">Error: %s</font>", "Please specify the IP of the virtual device"))
  else
    if EcoDevPort == nil or EcoDevPort == "" then
      EcoDevPort = "80"
      fibaro:debug(string.format("<font color=\"green\">Info: %s%s:%s</font>", "Initialize EcoDev controler on", EcoDevIP, EcoDevPort))
    end 
    ED = EcoDevices(EcoDevIP..":"..EcoDevPort)
    fibaro:debug(string.format("<font color=\"green\">Info: %s</font>", "EcoDevices succesfully loaded"))
  end
  

end


   
if ED then
  local status, err, value = pcall(function () resInt = ED.Main(); end)
  if (status == false) then
    fibaro:debug("err: "..tostring(err or 'n.c'));
  end
  fibaro:sleep(60*1000)
end

Bonnes fêtes de fin d'année à  tous.

Séb

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour HANSOLO,

 

J'ai téléchargé la dernière version : 

Web Version: 1.05.06
Prog. Version: 1.05.05
J'ai changé le json.decode avec string.sub pour prendre les valeurs bruts...
Amicalement
Séb

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne sais pas comment mettre àjour le prog

En fait j'ai fait un upload du .bin seulement.

Je n'ai pas vu de procédure pour mettre àjour le firmware.

Il y a un bien un .hex mais je ne vois pas trop comment le mettre àjour sur l'eco-devices

Partager ce message


Lien à poster
Partager sur d’autres sites

Ca fait longtemps que j'ai fait la maj, me souvient plus en détail !

Faut le faire en 2 fois

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon je viens de trouver...

EN fait c'est en utilisant l'utilitaire mais celui ci ne fonctionne qu'en scan local et malheureusement je n'ai pas de machine sous Windows sur le réseau de l'écodevice.

Je n'y accède que par le WAN et donc pas de possibilité de flasher le programme.

J'ai vu dans les notes que le correctif avait été fait.

Il va falloir que je prenne un portable, que je l'installe sur le réseau et ensuite je ferai la mise àjour du WEB + PROG.

Pas cool le scandevice juste en local...

Merci pour la piste du web différent du prog.

Séb

Partager ce message


Lien à poster
Partager sur d’autres sites

×