Export données vers emoncms.org

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Export données vers emoncms.org

Message par astrometeo974 »

Bonjour

J'ai mis en œuvre le script de Papoo qui marche à la perfection, mais a cette occasion
je me suis aperçu que la remontée d'info de ma sonde d'humidité était erronée, confère
les traces ci après.

Onglet dispositifs
Idx / Matériel / ID / Unit / Nom / Type / Sous-type / Donnée
219 / RFLINK / 010A / 10 / Temp WS2300 /Temp / LaCrosse TX3/ 18.6 C
220 / RFLINK / 010A / 1 / Hum WS2300 /Humidity/ LaCrosse TX3 /Humidity 65 %

Etat des valeurs
Idx/ Name /Current state /Last updated / sValues
219 /Temp WS2300/ 18.7 / 2017-06-04 17:20:23 / 18.7
220/ Hum WS2300 /3 / 2017-06-04 17:20:23/ 3

Log du script de Papoo
2017-06-04 17:26:00.478 LUA: --- --- --- Export vers emoncms : 17:26
2017-06-04 17:26:00.478 LUA: Temp WS2300 = 18.5
2017-06-04 17:26:00.478 LUA: Sonde Solaire = 209
2017-06-04 17:26:00.479 LUA: Hum WS2300 = 3
2017-06-04 17:26:00.479 LUA: OWL CM180 = 692.000;2868027.000

Le widget Hum WS2300 correspond à celui de la page dispositifs (65%) , contrairement aux valeurs passées (3)
alors que tout est ok pour les autres capteurs.

Si quelqu'un à une idée ou une piste je suis preneur.

Merci par avance pour l'aide.

Astrometeo974
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Export données vers emoncms.org

Message par papoo »

j'ai mis le script à jour viewtopic.php?f=17&t=2017&p=18007#p18007
essai et dis moi si cela fonctionne mieux
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Re: Export données vers emoncms.org

Message par astrometeo974 »

Bonjour et merci pour la réponse

A priori le script modifié bug à la ligne 79

2017-06-06 11:10:00.125 Error: EventSystem: in Export_Graphiques_2: [string "--[[script_time_export_emoncms.lua..."]:79: attempt to concatenate a nil value

Mais ce qui me chagrine le plus est la valeur de l'état courant de l'humidité (Hum WS2300) alors que sa valeur est de
220 RFLINK 010A 1 Hum WS2300 Humidity LaCrosse TX3 Humidity 85 %

217 Sonde Solaire 126.5 2017-06-06 11:21:42 126.5
219 Temp WS2300 16.6 2017-06-06 11:20:49 16.6
220 Hum WS2300 3 2017-06-06 11:20:49 3
221 Oregon Temp 18.9 2017-06-06 11:21:42 18.9
223 Pluie WS2300 0;306.7 2017-06-06 11:14:24 0;306.7

Pour info,
Ne serai ce pas la présentation de la valeur données (Humidity 85 %) qui planterai au lieu de (85%) tout simplement.

Merci par avance.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Export données vers emoncms.org

Message par papoo »

reprend le script je viens de mettre la version 2 dans le premier post
il te faut maintenant declarer le "canal" de la valeur que tu souhaite remonter
en clair si tu as un device qui remonte température et humidité et que tu souhaite remonter l'humidité il te faudra déclarer le canal 2 pour l'humidité
exemple :

Code : Tout sélectionner

les_devices[8] = {device="Temperature exterieure", nom="Humidité", canal=2}
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Re: Export données vers emoncms.org

Message par astrometeo974 »

Merci

En prenant le device de LaCrosseV2 je récupère bien les données (3) les deux premières ok (Temp et Hum) mais la troisième (1) ???
et c'est celle là que je retrouvais dans mon device Hum WS2300.


2017-06-07 18:48:00.474 LUA: =========== export emoncms (v2.01) ===========
2017-06-07 18:48:00.474 LUA: --- --- --- Export vers emoncms : 18:48
2017-06-07 18:48:00.474 LUA: --- --- --- Temp WS2300 = 25.6
2017-06-07 18:48:00.474 LUA: --- --- --- canal = nil
2017-06-07 18:48:00.474 LUA: --- --- --- Sonde Solaire = 588.5
2017-06-07 18:48:00.474 LUA: --- --- --- canal = nil
2017-06-07 18:48:00.475 LUA: --- --- --- LaCrosseV2 = 25.6;40;1
2017-06-07 18:48:00.475 LUA: --- --- --- canal = 2
2017-06-07 18:48:00.475 LUA: --- --- --- valeurs multiples dans LaCrosseV2 = 25.6;40;1
2017-06-07 18:48:00.475 LUA: --- --- --- Nb de point virgule = 2
2017-06-07 18:48:00.475 Error: EventSystem: in Export_Graphiques: [string "--[[script_time_export_emoncms.lua..."]:91: attempt to call global 'split' (a nil value)

Sinon tj erreur en ligne 91
local valeurs = split(v,";")

Cordialement
Astrometeo974
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Export données vers emoncms.org

Message par papoo »

tu as apparemment commenté une variable (local script=) qui est donc introuvable
post ton script personnalisé stp (en utilisant le bouton Code) afin que je puisse voir ou se situe exactement le pb
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Re: Export données vers emoncms.org

Message par astrometeo974 »

Ci Joint le script:

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	
Cordialement
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Re: Export données vers emoncms.org

Message par astrometeo974 »

papoo a écrit :tu as apparemment commenté une variable (local script=) qui est donc introuvable
post ton script personnalisé stp (en utilisant le bouton Code) afin que je puisse voir ou se situe exactement le pb
Juste une question les fonctions split et join sont elle en natif dans DZ.

Je ne suis pas un grand programmeur, mais je me suis posé la question.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Export données vers emoncms.org

Message par papoo »

as tu créé la variable utilisateur contenant l"api emoncms?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
astrometeo974
Messages : 35
Inscription : 17 févr. 2017, 11:08

Re: Export données vers emoncms.org

Message par astrometeo974 »

papoo a écrit :as tu créé la variable utilisateur contenant l"api emoncms?
Oui

5 api_emoncms Chaîne xxxxxxxxxxxxxxxxxxxxxxxxxxxx 2017-06-07 20:58:58

ça plante sur la fonction split pour virer les points virgules de la valeur de la variable v, comme
si l'on ne trouvait pas split en fonction globale??
Répondre