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.
-- 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
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... )
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.
-- 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
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.