Hint : Récupérer les valeurs instantanées d'un capteur rfxcom
Publié : 28 mai 2016, 11:00
Bonjour à tous,
Dans un post précedent (viewtopic.php?f=8&t=1930#p17408) je me demandais comment récupérer les valeurs instantanées de mon owl. J'avais besoin d'une résolution plus fine que les 5min du petit log de domoticz pour analyser la marche/arrêt de certains appareil.
J'ai finalement trouvé une solution que je souhaite partager avec vous : Il s'agit simplement d'un tout petit script Lua de type device, qui s'exécute donc à chaque update d'un capteur, et qui va enregistrer dans une base mysql les valeurs instantanées :
Le setup :
J'avais dans un premier temps essayé en passant par l'API mysql de lua (voir ici http://www.tutorialspoint.com/lua/lua_d ... access.htm) mais ça ne marche qu'un temps. Cette solution provoquait des fuites mémoire sur domoticz et fini par planter au bout de 12-18h
En passant par un os.execute, c'est moins élégant, mais plus stable !
Dans un post précedent (viewtopic.php?f=8&t=1930#p17408) je me demandais comment récupérer les valeurs instantanées de mon owl. J'avais besoin d'une résolution plus fine que les 5min du petit log de domoticz pour analyser la marche/arrêt de certains appareil.
J'ai finalement trouvé une solution que je souhaite partager avec vous : Il s'agit simplement d'un tout petit script Lua de type device, qui s'exécute donc à chaque update d'un capteur, et qui va enregistrer dans une base mysql les valeurs instantanées :
Le setup :
- * Mon capteur OWL s'appelle "owl" dans domotocz ; pas très original mais ça a le mérite d'être clair
* J'ai un serveur mysql sur la même machine qui exécute domoticz
* la base de donnée s'appelle cm160, l'utilisateur qui a le droit d'écriture sur cette base s'appelle aussi cm160
* la table s'appelle rawdata et contient :- - un champs rd_id en autoincrement,
- un champs rd_date de type DATETIME qui contient l'horodatage de la mesure
- un champs rd_w de type FLOAT qui contient la consommation instantanée à la date de la mesure
- - un champs rd_id en autoincrement,
Code : Tout sélectionner
local mesure = "owl"
commandArray = {}
if (devicechanged[mesure]) then
date_stamp=os.date("%Y-%m-%d %H:%M:%S")
actual_conso, compteur, dum2 = string.match(otherdevices_svalues[mesure],"(%d+.%d*);(%d+).(%d*)")
exec_mysql="echo \"INSERT INTO rawdata(rd_date,rd_w) VALUES ('"..date_stamp.."','"..actual_conso.."')\" | mysql -D cm160 -u cm160 --password=censuré"
-- print(exec_mysql)
status,errorString=os.execute(exec_mysql)
-- print(status,errorString )
end
return commandArray