[LUA] Exporter des données vers emoncms.org

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.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[LUA] Exporter des données vers emoncms.org

Message par papoo »

Bonjour, sur le même principe que le script pour exporter les données vers ThingSpeak voici un script Lua pour exporter vos données vers emoncms.org

Bien sur avant de mettre en place ce script, il faut s'inscrire sur le site, et récupérer le numéro d'api WRITE.
ensuite personnalisez le script avec votre clé API WRITE et lister vos devices dans le tableau ... les_devices
Sauvegarder le fichier, en le nommant script_time_CE_QUE_VOUS_VOULEZ.lua, dans le répertoire dédié aux scripts lua
Le script est lu toutes les minutes mais n'exporte les données que toutes les 2 minutes, valeur que vous pouvez bien sur modifier
Le site emoncms.org ne prenant pas en charge les caractères accentués,(le nom du device se voit carrément amputé du caractère accentué) j'ai un peu galéré pour faire une formule de suppression des accents, mais cela fonctionne correctement.

Code : Tout sélectionner

--[[script_time_export_emoncms.lua
auteur : papoo

maj : 11/03/2018
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
https://easydomoticz.com/forum/viewtopic.php?f=17&t=2017
https://pon.fr/exporter-des-donnees-vers-le-site-emoncms/
https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_export_emoncms.lua
--]]

--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local debugging = true  	-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true   -- true pour activer l'execution du script ou false pour le désactiver
local url_emoncms = 'http://emoncms.org/api/' 
local api_emoncms = 'api_emoncms' -- créer une variable de type chaine 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[#les_devices+1] = {device="Compteur Eau Froide", nom="", canal=""} -- 1er compteur 
-- les_devices[#les_devices+1] = {device="Compteur Eau Chaude", nom="", canal=""} -- 2eme compteur 
-- les_devices[#les_devices+1] = {device="Compteur Gaz", nom="", canal=""}-- 3eme compteur
-- les_devices[#les_devices+1] = {device="Compteur Prises", nom="", canal=""}
-- les_devices[#les_devices+1] = {device="Compteur Lumières", nom="", canal=""}
-- les_devices[#les_devices+1] = {device="Compteur Technique", nom="", canal=""}
-- les_devices[#les_devices+1] = {device="DJU", nom="", canal=""}
les_devices[#les_devices+1] = {device="Temperature exterieure", nom="", canal=""}
les_devices[#les_devices+1] = {device="Temperature exterieure", nom="Humidité", canal=2}
les_devices[#les_devices+1] = {device="Temperature Salon", nom="", canal=""}
les_devices[#les_devices+1] = {device="Point de givrage", nom="", canal=""}
les_devices[#les_devices+1] = {device="Point de rosée", nom="", canal=""}
--les_devices[#les_devices+1] = {device="Couloir 1er étage", nom="", canal=""}
les_devices[#les_devices+1] = {device="Congélateur", nom="", canal=""}
--les_devices[#les_devices+1] = {device="Temp départ chauffage", nom="", canal=""}
--les_devices[#les_devices+1] = {device="Temp retour chauffage", nom="", canal=""}
--les_devices[#les_devices+1] = {device="Temp Parents", nom="", canal=""}
--les_devices[#les_devices+1] = {device="anémometre", nom="direction", canal=2}
local fields =""
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local nom_script = "export emoncms"
local version = "2.1"
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
-- package.path = package.path..";/home/pi/domoticz/scripts/lua/fonctions/?.lua"
-- require('fonctions_perso')

function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	-- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--============================================================================================== 
function url_encode(str) -- encode la chaine str pour la passer dans une url 
   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 
--============================================================================================== 
function sans_accent(str) -- supprime les accents de la chaîne 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 split(inputstr, sep)
        if sep == nil then
                sep = "%s"
        end
        local t={} ; i=1
        for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
                t[i] = str
                i = i + 1
        end
        return t
end -- usage : valeurs = split(variable,";")
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------

commandArray = {}
time=os.date("*t")
if ((time.min-1) % 2) == 0 and script_actif == true 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-- vérification de la présence 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 .. '{'.. sans_accent(d.nom) .. ':' .. valeurs[c] .. '},'
		elseif v ~= nil then
    fields = fields .. '{'.. sans_accent(d.device) .. ':' .. v .. '},'
		end
	end
		fields = string.gsub (fields, ",$", "") -- suppression de la dernière virgule
        fields = url_encode(fields) -- encodage de l'URL

		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('curl -m5 "'..url_emoncms ..'post?apikey=' .. API_key .. '&json=' .. fields ..'"',debugging)
		voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
-- ============================================================================
return commandArray	
à vous les graphiques et les dashboards (plus intuitif que thingspeak pour ma part)
un premier essai réalisé en 5mn
2016-05-18 22_34_21-Emoncms - dashboard edit.png
2016-05-18 22_34_21-Emoncms - dashboard edit.png (74.74 Kio) Consulté 15113 fois
Dernière modification par papoo le 11 mars 2018, 22:49, modifié 9 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
kronotops
Messages : 5
Inscription : 09 août 2016, 19:19
Localisation : Sauzet (30)

Re: Lua : Exporter des données vers emoncms.org

Message par kronotops »

Bonjour,

comme d'habitude je dirai excellent script qui fonctionne parfaitement pour un projet de gestion de température que je finalise. J'aimerai savoir s'il est possible de récupérer en plus des températures l'humidité des sondes ?

Merci :D
Raspberry Pi 3 + RFLink + Domoticz
Prise mural Chacon
Module ECR-100 avec fil pilote
Module température + humidité Alecto v4 Banggood
Téléinfo sans-fil en cours de réalisation
itcitc77
Messages : 73
Inscription : 30 mai 2016, 06:17

Re: Lua : Exporter des données vers emoncms.org

Message par itcitc77 »

super je vais essayer rapidement, merci pour l'info
Domoticz, CustomPage,
Pi3 RFXCom + Razberry;Z-Stick Gen5
itcitc77
Messages : 73
Inscription : 30 mai 2016, 06:17

Re: Lua : Exporter des données vers emoncms.org

Message par itcitc77 »

super je vais essayer rapidement, merci pour l'info
Domoticz, CustomPage,
Pi3 RFXCom + Razberry;Z-Stick Gen5
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Lua : Exporter des données vers emoncms.org

Message par papoo »

kronotops a écrit : J'aimerai savoir s'il est possible de récupérer en plus des températures l'humidité des sondes ?
Merci :D
il est possible de récupérer la deuxième valeur d'un device, mais il se pose dans ce cas la un problème. Comment en automatique connaitre le nom à attribuer à cette valeur? si en auto je remonte l’ensemble des valeurs de chaque device, faut il les numéroter?
exemple si ma sonde de température salon dispose de l'humidité en 2 et de la pression atmosphérique en 3 faut il que je les nomme
température salon 2 et température salon 3 ? je vais réfléchir comment faire dans la liste des devices à exporter pour ajouter un nom autre que le nom du device
apparemment emoncms limiterait les remontées d'infos à 11 est-ce le cas pour toi?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
kronotops
Messages : 5
Inscription : 09 août 2016, 19:19
Localisation : Sauzet (30)

Re: Lua : Exporter des données vers emoncms.org

Message par kronotops »

Je n'ai pas encore rencontre de limitation avec emoncms n'ayant pour le moment que 9 sondes qui remontent grâce à ton script et les esp8266 que j'ai font des remontés hum temp et co2 chacun...
Peut'on utiliser différents nodes afin de palier à la limite de 11 remontées (température sur node 0 et humidité sur node 1) ?
Raspberry Pi 3 + RFLink + Domoticz
Prise mural Chacon
Module ECR-100 avec fil pilote
Module température + humidité Alecto v4 Banggood
Téléinfo sans-fil en cours de réalisation
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Lua : Exporter des données vers emoncms.org

Message par papoo »

il faut pour cela dupliquer le script en le renommant et en changeant l'api pour renvoyer sur un autre node
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Lua : Exporter des données vers emoncms.org

Message par papoo »

dis moi si cela fonctionne avec tes devices T°, hum et co2
Dernière modification par papoo le 06 juin 2017, 22:24, modifié 1 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
javed222uy
Messages : 1
Inscription : 21 sept. 2016, 03:02

Re: Lua : Exporter des données vers emoncms.org

Message par javed222uy »

Merci Papoo

Comme le script serait écrite afin d’envoyer des données à emoncms tous 20segundos?
megerwan
Messages : 4
Inscription : 03 janv. 2017, 17:20

Re: Lua : Exporter des données vers emoncms.org

Message par megerwan »

merci pour le script.

cela fonctionne aléatoirement pour moi.

j ai tres regulierement des errors "Error opening url" quand le script s'execute

017-01-03 16:58:07.430 Error: Error opening url: https://emoncms.org/input/post.json?jso ... key=xxxxxx

et quand je poste le lien complet dans un navigateur, cela fonctionne parfaitement.

des idees ?
(j ai changé le noms des variables, virer les espaces et underscore , passer en https au lieu de http..... mais rien n y fait.

merci
Répondre