Page 1 sur 1

Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 02 août 2016, 12:27
par Homerci
bonjour , j'ai en place un réseau de 100 metres qui fait le tour de la maison et 25 capteurs DS18B20 de température ainsi que 2 capteurs de consommation d'eau ( Total froid et chaud) par des ds2423 , ce reseau est piloté par un boitier HA7NET, interrogeable a distance sur ethernet.
avec des commandes comme :
HA7net Serveur Ethernet 1-wire Haute Performance
http://192.168.1.54/1Wire/Search.html" qui retourne dans une page html la liste des capteurs connectés sur tout le réseau.
http://192.168.1.54/1Wire/ReadTemperatu ... 073B028828 qui retourne dans une page HTML la temperature du capteur.
et plus mais bon voila la présentation.
J'ai fait ou plutot copié (merci papoo le genial) un bout de code pour relever dans une premier essai la temperature d'un capteur.
mais je n'arrive pas a la passer dans le device comme papoo le fait si bien, comprend pas que ca ne marche, ou est que je me trompe ?
Pourtant en log, les valeurs apparaissent bien, malgré un formatage succint comme "23,5"
voila le code , si quelq'un a une idée, je suis preneur.
:ugeek: :?:
Faut ajouter que je suis nul en lua. :oops:

Code : Tout sélectionner

--[[
name : script_time_phase_lunaire.lua
auteur : Homerci
version : 1.01
Mise à jour : 01/08/2016
date : 15/07/2016
Principe :
 Ce script inspiré du script de Papoo du 26/06/2016 sur les phases Lunaire 
 a pour but de remonter les informations du Boitier HA7NET qui gere facilement le réseau 
 de capteurs de temperature 1WIRE
 en interrogeant ce boitier de cette façon: 
  Example: http://ha7.net ou 192.168.1.xxx/1Wire/ReadTemperature.html?Address_Array=9D00080027AF4A10,73000000B0E22E28 sur domoticz 
 Les informations disponibles : numero ID (unique de la sonde DS18B20, le taux de résolution
   (9 ou 12), Code erreur de la page (0 = tout est Ok sinon réponse fausse)
]]--
-- ========================================================================
-- Variables à éditer
-- ========================================================================
local wir_salon = 26			-- renseigner l'id du device (temperature) Temp. du salon associé si souhaité, sinon nil
-- local wir_id_salon = 700000073B028828 					ID de la sonde DS18B20 du salon
local wir_Sortie_eauchaude = 25 -- renseigner l'id du device(pourcentage) Sortie ECS Eau chaude associé  si souhaité, sinon nil
-- 13000005966DC628				-- ID de la sonde DS18B20 sortie Eau Chaude ECS
-- local dz_distance = nil 		-- renseigner l'id du device (texte) distance Lune - Terre associé si souhaité, sinon nil
-- local dz_age = nil 				-- renseigner l'id du device (texte) Age de la Lune associé si souhaité, sinon nil
-- local dz_eclipse = nil 			-- renseigner l'id du device (texte) prochaine éclipse lunaire associé si souhaité, sinon nil
-- local dz_trajectoire = nil		-- renseigner l'id du device (texte) Trajectoire associé si souhaité, sinon nil
-- local dz_constellation = nil	-- renseigner l'id du device (texte) Constellation associé si souhaité, sinon nil
-- local dz_perigee = nil 			-- renseigner l'id du device (texte) Prochain périgée lunaire associé si souhaité, sinon nil
-- local dz_apogee = nil 			-- renseigner l'id du device (texte) Prochain apogée lunaire associé si souhaité, sinon nil
-- local dz_noeud = nil 			-- renseigner l'id du device (texte) Prochain noeud lunaire associé si souhaité, sinon nil

local debugging = true  		-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
-- ========================================================================
-- Fin Variables à éditer
-- ========================================================================
local indexArray=0	
--======================================================================== 
--Fonctions
--========================================================================
function voir_les_logs (s)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>");
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>");
		end
    end
end	


--======================================================================== 
-- Fin Fonctions
--========================================================================
commandArray = {}
time = os.date("*t")

-- if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
-- if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 18))) then -- 3 éxecutions du script par jour à 7H20, 13h20 et 18H20
-- if time.hour%2 == 0 then -- toutes les deux heures
-- if (time.hour%1 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
if time.min%1 == 0 then -- Toutes les 5 minutes
print('--- --- --- Script_time_Ha7net_Temperature.Lua  --- --- ---')

		local fname ="Ha7net_Releve_DS18b20.xml"
		-- os.execute("wget -q -O " .. fname .. " http://www.calendrier-lunaire.net/")
			os.execute("wget -q -O " .. fname .. " http://192.168.1.54/1Wire/ReadTemperature.html?Address_Array=700000073B028828,13000005966DC628" )  -- Si fichier existant le remplace
			
		
				local f = io.open(fname, "r")

			 if f == nil then
			 print("Error opening file '" .. fname .. "'.")
			 os.exit(1)
			 end
 
		local testHtml = f:read("*all")
					f:close()
		
					
for instance in testHtml:gmatch("<body>(.-)</body>") do 
-- print(instance)
-- local salon=instance:match('<strong>Nom de la phase : </strong>(.-)</li>')
local salon=instance:match('700000073B028828"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_0" ID="Temperature_0" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')

-- local visibilite=instance:match('<strong>Visibilité : </strong>(.-)</li>')
local ecs_chaud=instance:match('13000005966DC628"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_1" ID="Temperature_1" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')
-- print(ecs_chaud)

-- local distance=instance:match('Terre : </strong>(.-)</li>')
-- local age=instance:match('<strong>Age de la Lune : </strong> (.-)</li>')
-- local eclipse=instance:match('lunaire: </strong> (.-)</a></li>')
-- local trajectoire=instance:match('Trajectoire : </strong>(.-)<img')
-- local constellation=instance:match('</span>Constellation : </strong>(.-)<img')
-- local perigee=instance:match('Prochain périgée lunaire : </strong>(.-)<img')
-- local apogee=instance:match('Prochain apogée lunaire : </strong>(.-)<img')
-- local noeud=instance:match('Prochain noeud lunaire : </strong>(.-)<img')

voir_les_logs("--- --- --- Temp. du Salon : "..salon,debugging)
		  if wir_salon ~= nil and Salon ~= nil   then -- Mise à jour du devise Salon si il existe
			commandArray[indexArray] = {['updateDevice'] = wir_salon..'|0|'.. salon}
			  --   commandArray[indexArray] = {['domoticz_updateDevice'] = tostring(salon)}
			 indexArray=indexArray+1
		  end
		  
voir_les_logs("--- --- --- ECS Sortie Eau chaude du ballon : "..ecs_chaud,debugging)
		  if wir_Sortie_eauchaude ~= nil and ecs_sortie_eauchaude ~= nil then -- Mise à jour du devise visibilité si il existe
			 -- ecs_chaud = string.gsub (ecs_chaud, " %%", "")	-- supprime le caractere % afin de ne recuperer que la valeur	  
			-- commandArray[indexArray] = {['UpdateDevice'] = wir_Sortie_eauchaude..'|0|'.. ecs_chaud}
			--  domoticz_updateDevice(14068,'',ecs_chaud .. ";)
			 indexArray=indexArray+1
		  end
	
end	 -- for
end -- if time
return commandArray
  • xx

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 02 août 2016, 23:03
par Neutrino
Bonsoir,
Pfiou, il va falloir nettoyer un peu ce code :D mais c'est un bon début !
Le problème est peut-être juste la virgule.
Domoticz attend 23.5 et on 23,5.

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 03 août 2016, 18:49
par Homerci
non j'ai vérifié, mais c'est bien un point qui est transmi.

le probléme vient de la commande suivante:
voir_les_logs("--- --- --- Temp. du Salon : "..salon,debugging)
if wir_salon ~= nil and salon ~= nil then -- Mise à jour du devise Salon si il existe
print("---if wirsalon=ok----je passe la var salon: ----" ..salon)
print( wir_salon..'|0|'..salon) ---> retourne en log " 28|0|24 " avec 28=id du device virtual créé, 0=?, et 24 la temp du capteur
commandArray[indexArray] = {['updateDevice'] = wir_salon..'|0|'..salon} -- passe pas au device la valeur
indexArray=indexArray+1
end

je ne trouve pas la syntaxe pour commandArray[indexArray] = {['updateDevice'] alors
peut etre avec une commande json ?

J'ai nettoyé un peu, suivant ton conseil.
merci

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 03 août 2016, 20:21
par Neutrino
Ta variable salon contient sans doute un caractère àlakon genre un retour chariot ou un truc du genre.
Essaye avec ça avant ton commandArray :

Code : Tout sélectionner

salon = tonumber(salon)

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 03 août 2016, 20:34
par georges.attali
Bonjour,
et aussi j'ai vu un 'updateDevice' au lieu de 'UpdateDevice' (minuscule/majuscule sur le U).
Normalement c'est 'UpdateDevice' (U majuscule).
Je suis pas certain que ca suffise, mais ça vaudrait le coup de corriger et de réessayer.
Bye, GD

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 03 août 2016, 20:56
par Neutrino
Yes, t'as raison ! :)
Extrait du wiki http://www.domoticz.com/wiki/Events :

Code : Tout sélectionner

 commandArray[tempDeviceIdx] = { ['UpdateDevice'] = tempDeviceIdx..'|0|'..temp }

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 04 août 2016, 16:12
par Homerci
Bingo !!
c'est bien çà, donc en premier, ne prend que le nombre (tonumber),
et en 2 UpdateDevice avec les majuscules là ou il faut.
merci pour s'etre penché sur ce bout de code.

Pour le moment, le script tourne sous cette forme;
Surement à améliorer par la suite, mais pour un premier essai, je suis content.
Voila le scrpit, les critiques sont vivement admises.

Code : Tout sélectionner

--[[
name : Script_time_Ha7net_Temperature.lua
auteur : Homerci
version : 1.02
Mise à jour : 04/08/2016
date : 20/07/2016
Principe :
 Ce script inspiré (largement) du script de Papoo du 26/06/2016 sur les phases Lunaire 
 a pour but de remonter les informations du Boitier HA7NET qui gere facilement un réseau de
  capteurs de temperature ou autre 1WIRE en interrogeant le boitier de cette façon: 
  Example: http://ha7.net ou 192.168.1.xxx/1Wire/ReadTemperature.html?Address_Array=9D00080027AF4A10,73000000B0E22E28 sur domoticz 
 Les informations disponibles : numero ID (unique de la sonde DS18B20, le taux de résolution
   (9 ou 12), Code erreur de la page (0 = tout est Ok sinon réponse fausse)
]]--
-- ========================================================================
-- Variables à éditer
-- ========================================================================
local wir_salon = 26			-- renseigner l'id du device (temperature) Temp. du salon associé si souhaité, sinon nil
-- local wir_id_salon = 700000073B028828 					ID de la sonde DS18B20 du salon
local wir_Sortie_eauchaude = 29 -- renseigner l'id du device(temperature) Sortie ECS Eau chaude associé  si souhaité, sinon nil
-- 13000005966DC628				-- ID unique de la sonde DS18B20 sortie Eau Chaude ECS
local wir_ecs_haut = 30 		-- renseigner l'id du device(temperature) HAUT ECS Eau chaude associé si souhaité, sinon nil
-- A700000595AE0C28				-- ID unique de la sonde DS18B20
local wir_ecs_milieu = 31 		-- renseigner l'id du device(temperature) (1/3) ECS Eau chaude associé si souhaité, sinon nil
-- 2500000595B1B528				-- ID unique de la sonde DS18B20
local wir_grenier_faitage = 32		-- renseigner l'id du device(temperature)  sonde dans le GRENIER sous Faitage associé si souhaité, sinon nil
-- AC0000073D2B9F28				-- ID unique de la sonde DS18B20


local debugging = true  		-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
-- ========================================================================
-- Fin Variables à éditer
-- ========================================================================
local indexArray=0	
--======================================================================== 
--Fonctions
--========================================================================
function voir_les_logs (s)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>");
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>");
		end
    end
end	
--======================================================================== 
-- Fin Fonctions
--========================================================================
-- Amélioration , implanter un ping vers le Manager HA7NET reseau 1WIRE si ping=faux sortie directe du script
--========================================================================

commandArray = {}
time = os.date("*t")

-- if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
-- if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 18))) then -- 3 éxecutions du script par jour à 7H20, 13h20 et 18H20
-- if time.hour%2 == 0 then -- toutes les deux heures
-- if (time.hour%5 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
if time.min%5 == 0 then -- Toutes les 5 minutes

voir_les_logs("--- --- --- Script_time_Ha7net_Temperature.Lua  --- --- ---",debugging)
		local fname ="Ha7net_Releve_DS18b20.xml"
			os.execute("wget -q -O " .. fname .. " http://192.168.1.54/1Wire/ReadTemperature.html?Address_Array=700000073B028828,13000005966DC628,A700000595AE0C28,2500000595B1B528,AC0000073D2B9F28" )  -- Si fichier existant le remplace
			
		
				local f = io.open(fname, "r")

			 if f == nil then
			 print("Error opening file '" .. fname .. "'.")
			 os.exit(1)
			 end
 
		local testHtml = f:read("*all")
					f:close()
		
					
for instance in testHtml:gmatch("<body>(.-)</body>") do 

-- Le statut de la page Html est different de "OK", donc erreur de lecture -> Affichage dans LOG, du script   si--> VALUE="Device ID CRC Failure"
local statut=instance:match('<td><INPUT CLASS="error" NAME="Exception_String_0" ID="Exception_String_0" TYPE="text" (.-) Size="34" disabled></td></tr></table><')

if statut  ~=  nil then
print("--- --- --- Releve de Temperature,Erreur de statut : " .. statut)
end -- statut

			local indexrang = 0
local salon=instance:match('700000073B028828"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_' .. indexrang .. '" ID="Temperature_' .. indexrang .. '" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')
			local indexrang = indexrang+1
			indexrang = tostring(indexrang)	
local ecs_chaud=instance:match('13000005966DC628"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_' .. indexrang .. '" ID="Temperature_' .. indexrang .. '" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')
			local indexrang = indexrang+1
			indexrang = tostring(indexrang)
local ecs_haut=instance:match('A700000595AE0C28"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_' .. indexrang .. '" ID="Temperature_' .. indexrang .. '" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')
			local indexrang = indexrang+1
			indexrang = tostring(indexrang)
local ecs_milieu=instance:match('2500000595B1B528"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_' .. indexrang .. '" ID="Temperature_' .. indexrang .. '" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')
			local indexrang = indexrang+1
			indexrang = tostring(indexrang)
local grenier_faitage=instance:match('AC0000073D2B9F28"></td><td colspan=1><INPUT CLASS="HA7Value" NAME="Temperature_' .. indexrang .. '" ID="Temperature_' .. indexrang .. '" TYPE="text" VALUE="(.-)"></td><td colspan=1><INPUT CLASS="HA7Value"')



voir_les_logs("--- --- --- Temp. du Salon : "..salon,debugging)
		  if wir_salon ~= nil and salon ~= nil   then -- Mise à jour du devise Salon si il existe
			  salon = tonumber(salon)
		    commandArray[indexArray] = {['UpdateDevice'] = wir_salon .. '|0|' .. salon}
			 indexArray=indexArray+1
		  end
		  

voir_les_logs("--- --- --- ECS Sortie Eau chaude du ballon : "..ecs_chaud,debugging)
		  if wir_Sortie_eauchaude ~= nil and ecs_chaud ~= nil then -- Mise à jour du devise  si il existe
		    ecs_chaud = tonumber(ecs_chaud)
			commandArray[indexArray] = {['UpdateDevice'] = wir_Sortie_eauchaude ..'|0|'.. ecs_chaud}
			 indexArray=indexArray+1
		  end
		  
 voir_les_logs("--- --- --- ECS Temp haut du ballon : "..ecs_haut,debugging)
		  if wir_ecs_haut ~= nil and ecs_haut ~= nil then -- Mise à jour du devise visibilité si il existe
			 ecs_haut = tonumber(ecs_haut)
			commandArray[indexArray] = {['UpdateDevice'] = wir_ecs_haut ..'|0|'.. ecs_haut}
			 indexArray=indexArray+1
		  end
		  
voir_les_logs("--- --- --- ECS Temp Milieu 1/3 du ballon : "..ecs_milieu,debugging)
		  if wir_ecs_milieu ~= nil and ecs_milieu ~= nil then -- Mise à jour du devise visibilité si il existe
			 ecs_milieu = tonumber(ecs_milieu)
			commandArray[indexArray] = {['UpdateDevice'] = wir_ecs_milieu ..'|0|'.. ecs_milieu}
			 indexArray=indexArray+1
		  end
		  
 voir_les_logs("--- --- --- Grenier Temp au Faitage (ardoise) : "..grenier_faitage,debugging)
		  if wir_grenier_faitage ~= nil and grenier_faitage ~= nil then -- Mise à jour du devise visibilité si il existe
			 grenier_faitage = tonumber(grenier_faitage)
			commandArray[indexArray] = {['UpdateDevice'] = wir_grenier_faitage ..'|0|'.. grenier_faitage}
			 indexArray=indexArray+1
		  end
		  
end	 -- for
end -- if time
return commandArray
pour le log en debug, on obtient cela (copie de l'ecran)

2016-08-04 16:10:00.308 LUA: (PING) ping success smartphone Marie-France
2016-08-04 16:10:00.316 LUA: (PING) ping success Presence Réseau 1Wire
2016-08-04 16:10:00.325 LUA: --- --- --- Script_time_Ha7net_Temperature.Lua --- --- ---
2016-08-04 16:10:04.347 LUA: --- --- --- Temp. du Salon : 23.5
2016-08-04 16:10:04.348 LUA: --- --- --- ECS Sortie Eau chaude du ballon : 25
2016-08-04 16:10:04.348 LUA: --- --- --- ECS Temp haut du ballon : 53
2016-08-04 16:10:04.348 LUA: --- --- --- ECS Temp Milieu 1/3 du ballon : 68.3125
2016-08-04 16:10:04.348 LUA: --- --- --- Grenier Temp au Faitage (ardoise) : 37
2016-08-04 16:10:04.354 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_Ha7net_temperature.lua
2016-08-04 16:10:05.268 EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_SolarSensor56.lua

Re: Reseau 1Wire, Connection par Boitier HA7NET Analyse

Publié : 04 août 2016, 19:47
par Neutrino
Génial !!! :D
Attention avec les scripts ! On y prend goût très vite !!!