Code : Tout sélectionner
--[[script_time_export_emoncms.lua
auteur : papoo
maj : 23/04/2017
date : 18/05/2016
Principe :
exporter les données de compteurs, Températures, etc.. sur le site https://emoncms.org/
Le script est lu toutes les minutes mais n'exporte les données que toutes les 2 minutes
http://easydomoticz.com/forum/viewtopic.php?f=17&t=2017
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "export emoncms"
local version = "2.01"
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url_emoncms = 'http://emoncms.org/api/'
local api_emoncms = 'api_emoncms' -- créer une variable de type chaîne contenant votre code API Write KEY emoncms de 32 caractères
local les_devices = {}; -- pas plus de 11 devices
-- si vous souhaitez remonter les valeurs d'un device qui en comporte plusieurs (ex: température et hygrometrie extérieure)
--renseigner le nom de la valeur à remonter (à partir de la deuxieme valeur) ainsi que le numero d'ordre dans canal (voir exemples ci dessous les_devices[9] et les_devices[17] )
les_devices[1] = {device="Temp WS2300", nom="", canal=""} -- 1er compteur
les_devices[2] = {device="Sonde Solaire", nom="", canal=""} -- 2eme compteur
les_devices[3] = {device="LaCrosseV2", nom="Humidity", canal="2"}-- 3eme compteur
les_devices[4] = {device="OWL CM180", nom="", canal=""}-- 4eme compteur
--les_devices[5] = {device="Compteur Lumières", nom="", canal=""}
--les_devices[6] = {device="Compteur Technique", nom="", canal=""}
--les_devices[7] = {device="DJU", nom="", canal=""}
--les_devices[8] = {device="Temperature exterieure", nom="", canal=""}
--les_devices[8] = {device="Temperature exterieure", nom="Humidité", canal=2}
--les_devices[9] = {device="Temperature Salon", nom="", canal=""}
--les_devices[10] = {device="Couloir 1er étage", nom="", canal=""}
--les_devices[11] = {device="Point de givrage", nom="", canal=""}
--les_devices[12] = {device="Point de rosée", nom="", canal=""}
--les_devices[13] = {device="Temp départ chauffage", nom="", canal=""}
--les_devices[14] = {device="Temp retour chauffage", nom="", canal=""}
--les_devices[16] = {device="Temp Parents", nom="", canal=""}
--les_devices[17] = {device="anémometre", nom="direction", canal=2}
local fields =""
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
commandArray = {}
function voir_les_logs (s)
if (debugging) then
print ("<font color='#f3031d'>".. s .."</font>");
end
end
function sans_accent(str)
if (str) then
str = string.gsub (str,"Ç", "C")
str = string.gsub (str,"ç", "c")
str = string.gsub (str,"[-èéêë']+", "e")
str = string.gsub (str,"[-ÈÉÊË']+", "E")
str = string.gsub (str,"[-àáâãäå']+", "a")
str = string.gsub (str,"[-@ÀÁÂÃÄÅ']+", "A")
str = string.gsub (str,"[-ìíîï']+", "i")
str = string.gsub (str,"[-ÌÍÎÏ']+", "I")
str = string.gsub (str,"[-ðòóôõö']+", "o")
str = string.gsub (str,"[-ÒÓÔÕÖ']+", "O")
str = string.gsub (str,"[-ùúûü']+", "u")
str = string.gsub (str,"[-ÙÚÛÜ']+", "U")
str = string.gsub (str,"[-ýÿ']+", "y")
str = string.gsub (str,"Ý", "Y")
end
return (str)
end
function urlencode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w ])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
commandArray = {}
time=os.date("*t")
if time.min % 2 == 0 then -- export des données toutes les 2 minutes
voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
voir_les_logs("--- --- --- Export vers emoncms : "..time.hour.. ":" ..time.min,debugging)
local API_key = uservariables[api_emoncms]
for i,d in ipairs(les_devices) do
v=otherdevices[d.device]
c=tonumber(d.canal)
voir_les_logs("--- --- --- ".. sans_accent(d.device) .." = "..(v or "nil"),debugging)
voir_les_logs("--- --- --- canal = "..(c or "nil"),debugging)
if v~= nil then v,nbCommas=string.gsub(v,";",";") end-- verification de la presence d'un ou plusieurs point virgule => valeurs multiples
if nbCommas > 1 and c ~= nil then
voir_les_logs("--- --- --- valeurs multiples dans ".. sans_accent(d.device) .." = ".. v,debugging)
voir_les_logs("--- --- --- Nb de point virgule = "..(nbCommas or "nil"),debugging)
local valeurs = split(v,";")
voir_les_logs("--- --- --- valeur 1 = "..(valeurs[1] or "nil"),debugging)
voir_les_logs("--- --- --- valeur 2 = "..(valeurs[2] or "nil"),debugging)
voir_les_logs("--- --- --- valeur 3 = "..(valeurs[3] or "nil"),debugging)
voir_les_logs("--- --- --- valeur 4 = "..(valeurs[4] or "nil"),debugging)
fields = fields .. '{'.. d.nom .. ':' .. valeurs[c] .. '},'
else
fields = fields .. '{'.. d.device .. ':' .. v .. '},'
end
end
fields = string.gsub (fields, ",$", "") -- suppression de la derniere virgule
fields = urlencode(sans_accent(fields)) -- suppression des caractères accentués
voir_les_logs("--- --- --- ".. url_emoncms ..'post?apikey=' .. API_key .. '&json=' .. fields ,debugging)
commandArray[1]={['OpenURL']=url_emoncms ..'post?apikey=' .. API_key .. '&json=' .. fields }
os.execute('curl -m5 "'..url_emoncms ..'post?apikey=' .. API_key .. '&json=' .. fields)
voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
-- ============================================================================
return commandArray