[LUA] Sauvegarde des températures journalieres

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

[LUA] Sauvegarde des températures journalieres

Message 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
domoticien amateur option bidouille
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: sauvegarde des températures journalieres

Message par vil1driver »

salut,

quel est l’intérêt ?
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: sauvegarde des températures journalieres

Message 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... )
domoticien amateur option bidouille
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: sauvegarde des températures journalieres

Message par vil1driver »

Justement domoticz gère déjà cela, graph en prime...

Image
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: sauvegarde des températures journalieres

Message par ganq »

pas sur une semaine..
domoticien amateur option bidouille
ftn
Messages : 27
Inscription : 08 janv. 2016, 13:01

Re: sauvegarde des températures journalieres

Message 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.
Raspberry PI2, Domoticz, RFXtrx433E, PCR800 (Capteur pluie), 3 x THGR 810, BTHGN129, Une prise 230V DIO, un contacteur d’ouverture, Aeotec ZW075-C16, aeotec aeoezw090, Zipato ph-pat02.
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: sauvegarde des températures journalieres

Message par ganq »

oups, j'ai oublié de préciser, il faut créer cette variable dans domoticz
domoticien amateur option bidouille
Répondre