Page 1 sur 1

[LUA] Sauvegarde des températures journalieres

Publié : 14 mai 2015, 09:38
par ganq
Bonjour,
Suite à un précédent post, j'ai écrit un script permettant de sauvegarder les températures de mes capteurs
C'est un premier script, il n'est surement pas optimisé. Je n'ai peut-être pas pris les fonctions les plus rapides.

Code : Tout sélectionner

-- Guillaume Anquetil - 13/05/2015
 -- ce script copie toutes les 5 minutes les données des idx choisis par des ; et ajoute une ligne au début avec le nom si le fichier n'existe pas
 -- le nom du fichier est de la forme YYYYMMDD_bdd.csv
		
commandArray = {}
-- récupérer la date et l'heure et le mettre dans aujourdhui dans le format yyyymmdd
 aujourdhui=os.date("%Y%m%d")
-- repertoire et nom de fichier de sauvegarde de la bdd
rep='/var/tmp/'..aujourdhui..'_bdd.csv'

-- debog au cas ou (des print et un délai d'une minute entre 2 enregistrement)
debog=0
if (debog~=0) then	
	delai=0
	else
	delai=290
	end
	
 -- récupération de l'heure actuelle
 heure_actuelle=os.time()
 -- décalage entre deux mesures (une variable dans domoticz heure_precedente2 enregistre l'heure d'enregistrement en secondes)
 heure_precedente2=uservariables['heure_precedente2'] +delai


if (heure_actuelle > heure_precedente2) then
	-- enregistrement de l'heure de changement dans la variable domoticz
	commandArray['Variable:heure_precedente2']=tostring(heure_actuelle)
	
	-- mise à zéro des températures
	T1=''
	T2='' 
	T3=''
	-- mettre les données en 1ere ligne si le fichier n'existe pas 
	if  (io.open(rep,"r")==nil) then
		-- dans l'ordre, température, humidité, état des piles
		ch='echo \'heure;T1;H1;E1;T2;H2;E2;T3;H3;E3\' >'..rep
		os.execute (ch)	
		if (debog~=0) then 
			print(ch)	
		end
	end
	
	-- lecture des données, si c'est une des températures que l'on veut garder, on la sauvegarde.
	for i, v in pairs(otherdevices_svalues) do 
		if (i=='Temp Chambre') then
			T1 = v
		end
		if (i=='Temp Salle') then
			T2= v
		end
		if (i=='Temp Cuisine') then
			T3 = v
		end
	end	
	
	-- écriture de la chaine de caractère de sauvegarde"
	ch='echo \''..os.date("%H:%M:%S")..' ; '
	ch=ch..T1..' ; '..T2..' ; '..T3..'\' >>'..rep
	
	if (debog~=0) then 
		print ('températures : '..T1..' '..T2..' '..T3)
		print(ch)
		print ('températures : '..T1..' '..T2..' '..T3)
	end	
	os.execute (ch)	

end	
	return commandArray
le fichier a cette forme :
pi@raspberrypi /var/tmp $ sudo cat 20150514_bdd.csv
heure;T1;H1;E1;T2;H2;E2;T3;H3;E3
00:04:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.3;55;1
00:09:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:14:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:19:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:24:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:29:00 ; 20.1;59;1 ; 19.5;58;0 ; 20.2;55;1

Re: sauvegarde des températures journalieres

Publié : 14 mai 2015, 11:47
par vil1driver
salut,

quel est l’intérêt ?

Re: sauvegarde des températures journalieres

Publié : 14 mai 2015, 16:05
par ganq
Je pars quelques jours en vacances, quand je reviens, cela me permets de voir comment a réagit les températures en fonction des autres paramètres (chauffage, soleil extérieur... )

Re: sauvegarde des températures journalieres

Publié : 14 mai 2015, 17:10
par vil1driver
Justement domoticz gère déjà cela, graph en prime...

Image

Re: sauvegarde des températures journalieres

Publié : 14 mai 2015, 18:47
par ganq
pas sur une semaine..

Re: sauvegarde des températures journalieres

Publié : 08 janv. 2016, 23:04
par ftn
ganq a écrit :Bonjour,
Suite à un précédent post, j'ai écrit un script permettant de sauvegarder les températures de mes capteurs
C'est un premier script, il n'est surement pas optimisé. Je n'ai peut-être pas pris les fonctions les plus rapides.

Code : Tout sélectionner

-- Guillaume Anquetil - 13/05/2015
 -- ce script copie toutes les 5 minutes les données des idx choisis par des ; et ajoute une ligne au début avec le nom si le fichier n'existe pas
 -- le nom du fichier est de la forme YYYYMMDD_bdd.csv
		
commandArray = {}
-- récupérer la date et l'heure et le mettre dans aujourdhui dans le format yyyymmdd
 aujourdhui=os.date("%Y%m%d")
-- repertoire et nom de fichier de sauvegarde de la bdd
rep='/var/tmp/'..aujourdhui..'_bdd.csv'

-- debog au cas ou (des print et un délai d'une minute entre 2 enregistrement)
debog=0
if (debog~=0) then	
	delai=0
	else
	delai=290
	end
	
 -- récupération de l'heure actuelle
 heure_actuelle=os.time()
 -- décalage entre deux mesures (une variable dans domoticz heure_precedente2 enregistre l'heure d'enregistrement en secondes)
 heure_precedente2=uservariables['heure_precedente2'] +delai


if (heure_actuelle > heure_precedente2) then
	-- enregistrement de l'heure de changement dans la variable domoticz
	commandArray['Variable:heure_precedente2']=tostring(heure_actuelle)
	
	-- mise à zéro des températures
	T1=''
	T2='' 
	T3=''
	-- mettre les données en 1ere ligne si le fichier n'existe pas 
	if  (io.open(rep,"r")==nil) then
		-- dans l'ordre, température, humidité, état des piles
		ch='echo \'heure;T1;H1;E1;T2;H2;E2;T3;H3;E3\' >'..rep
		os.execute (ch)	
		if (debog~=0) then 
			print(ch)	
		end
	end
	
	-- lecture des données, si c'est une des températures que l'on veut garder, on la sauvegarde.
	for i, v in pairs(otherdevices_svalues) do 
		if (i=='Temp Chambre') then
			T1 = v
		end
		if (i=='Temp Salle') then
			T2= v
		end
		if (i=='Temp Cuisine') then
			T3 = v
		end
	end	
	
	-- écriture de la chaine de caractère de sauvegarde"
	ch='echo \''..os.date("%H:%M:%S")..' ; '
	ch=ch..T1..' ; '..T2..' ; '..T3..'\' >>'..rep
	
	if (debog~=0) then 
		print ('températures : '..T1..' '..T2..' '..T3)
		print(ch)
		print ('températures : '..T1..' '..T2..' '..T3)
	end	
	os.execute (ch)	

end	
	return commandArray
le fichier a cette forme :
pi@raspberrypi /var/tmp $ sudo cat 20150514_bdd.csv
heure;T1;H1;E1;T2;H2;E2;T3;H3;E3
00:04:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.3;55;1
00:09:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:14:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:19:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:24:00 ; 20.2;59;1 ; 19.5;58;0 ; 20.2;55;1
00:29:00 ; 20.1;59;1 ; 19.5;58;0 ; 20.2;55;1
Cehez moi non fonctionel. voici l'erreur affiché par le fichier de log:

2016-01-08 22:56:00.167 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_log.lua:22: attempt to perform arithmetic on field 'heure_precedente2' (a nil value)

Je regarde ça dimanche.

Re: sauvegarde des températures journalieres

Publié : 09 janv. 2016, 10:50
par ganq
oups, j'ai oublié de préciser, il faut créer cette variable dans domoticz