[LUA] Exporter des données vers le site ThingSpeak
Re: Lua : Exporter des données vers le site ThingSpeak
la version 1.2 est disponible, j'ai edité le code sur le premier post
en espérant que cela réponde à ta problématique.
en espérant que cela réponde à ta problématique.
Re: Lua : Exporter des données vers le site ThingSpeak
Merci Papoo,
Effectivement ça extrait bien les bons champs.
Mais il reste des problèmes..
API_key
donne
Error: EventSystem: in export_ThingSpeak: [string "--[[script_time_export_ThingSpeak.lua..."]:126: attempt to concatenate local 'API_key' (a nil value)
j'ai remplacé par
C'a c'est réglé.
dans débug j'ai les bonnes valeurs dans le log mais thinkspeak ne les prend pas :
l'envoi de l'ancien scipt :
le nouveau scipt :
{Temp Exterieure:18.4} Est ce que ce n'est pas plutôt &field1=18.8
Effectivement ça extrait bien les bons champs.
Mais il reste des problèmes..
API_key
Code : Tout sélectionner
local api_thingspeak = 'xxxxxxxxxxxxxxxx' -- creer une variable de type chaine contenant votre code API Write KEY ThingSpeak
...
local API_key = uservariables[api_thingspeak]donne
Error: EventSystem: in export_ThingSpeak: [string "--[[script_time_export_ThingSpeak.lua..."]:126: attempt to concatenate local 'API_key' (a nil value)
j'ai remplacé par
Code : Tout sélectionner
local API_key = 'xxxxxxxxxxxxxxxx' -- creer une variable de type chaine contenant votre code API Write KEY ThingSpeak
...
--local API_key = uservariables[api_thingspeak]C'a c'est réglé.
dans débug j'ai les bonnes valeurs dans le log mais thinkspeak ne les prend pas :
l'envoi de l'ancien scipt :
Code : Tout sélectionner
https://api.thingspeak.com/update?key=xxxxxxxxxxxxxxxx&field1=18.8&field2=22.7&field3=28.9&field4=386 ;139140&field5=5067&field6=25.3;1016.1;2;668.32&field7=21.3&field8=22988228;0;0;0;360;0Code : Tout sélectionner
https://api.thingspeak.com/update?key=xxxxxxxxxxxxxxxx{Temp Exterieure:18.4},{Temp Salon:22.7},{Temp veranda haut:28.9},{Solaire Production:199 ;139210},{Luminosite:2644},{Pression:1016.6},{Temp Chambre coucher:20.9},{Puissance:360},Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Re: Lua : Exporter des données vers le site ThingSpeak
Bonjour papoo
J'ai trouvé et ça fonctionne bien
dit moi s’il y a un truc qui ne va pas
et encore merci !
J'ai trouvé et ça fonctionne bien
dit moi s’il y a un truc qui ne va pas
et encore merci !
Code : Tout sélectionner
--[[script_time_export_ThingSpeak.lua
auteur : papoo
MAJ: 26/11/2017
date : 18/05/2016
Principe :
exporter les données de compteurs, Températures, etc.. sur le site thingspeak.com
limite de "field" par "channel" = 8
Le script est lu toutes les minutes mais n'exporte les données que toutes les 4 minutes (temps modifiable ligne 40)
http://easydomoticz.com/forum/viewtopic.php?f=17&t=1925&p=25015
http://pon.fr/exporter-des-donnees-vers-le-site-thingspeak/
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "export ThingSpeak"
local version = "1.2"
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url_thingspeak = 'https://api.thingspeak.com/'
local API_key = 'xxxxxxxxxxxxxxxxx' -- creer une variable de type chaine contenant votre code API Write KEY ThingSpeak
-- 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 exemple ci dessous field 7 )
local les_devices = {}; -- pas plus de 8 devices
-- 1er compteur : device ="nom du device 1", field=field ThingSpeak associé, nom=nom du device si canal >1, canal=si valeur multiple n° du canal à utiliser
les_devices[#les_devices+1] = {device="Temp Extérieure", field=1, nom="", canal=""}
-- 2eme compteur : device ="nom du device 2", field=field ThingSpeak associé
les_devices[#les_devices+1] = {device="Temp Salon", field=2, nom="", canal=""}
-- 3eme compteur : device ="nom du device 3", field=field ThingSpeak associé
les_devices[#les_devices+1] = {device="Temp veranda haut", field=3, nom="", canal=""}
les_devices[#les_devices+1] = {device="Solaire Production", field=4, nom="Solaire", canal="1"}
les_devices[#les_devices+1] = {device="Luminosite", field=5, nom="", canal=""}
les_devices[#les_devices+1] = {device="Barometre", field=6, nom="Pression", canal="2"}
les_devices[#les_devices+1] = {device="Temp Chambre coucher", field=7, nom="", canal=""}
les_devices[#les_devices+1] = {device="Compteur kWh Total", field=8, nom="puissance", canal="5"}
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local fields =""
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging) -- nécessite la variable local debugging
if (debugging) then
if s ~= nil then
print (s)
else
print ("aucune valeur affichable")
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) % 1) == 0 then-- export des données toutes les 1 minutes en commençant par xx:01
voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--local API_key = uservariables[api_thingspeak]
voir_les_logs("--- --- --- Export vers ThingSpeak : "..time.hour.. ":" ..time.min,debugging)
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)
voir_les_logs("--- --- --- valeur 5 = "..(valeurs[5] or "nil"),debugging)
--fields = fields .. '{'.. sans_accent(d.nom) .. ':' .. valeurs[c] .. '},'
fields = fields .. '&field' .. i ..'=' .. valeurs[c]
elseif v ~= nil then
--fields = fields .. '{'.. sans_accent(d.device) .. ':' .. v .. '},'
fields = fields .. '&field'.. i ..'=' .. v
end
end
voir_les_logs("--- --- --- ".. url_thingspeak ..'update?key=' .. API_key .. fields ,debugging)
os.execute('curl -m5 "'.. url_thingspeak ..'update?key=' .. API_key .. fields)
voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
-- ============================================================================
return commandArray Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Re: Lua : Exporter des données vers le site ThingSpeak
il restait un problème
en bas de programme, j'ai remplacé la ligne qui ne fonctionne pas (je ne sais pas pourquoi) :
par celle ci et la tout semble OK
en bas de programme, j'ai remplacé la ligne qui ne fonctionne pas (je ne sais pas pourquoi) :
Code : Tout sélectionner
os.execute('curl -m5 "'.. url_thingspeak ..'update?key=' .. API_key .. fields)Code : Tout sélectionner
commandArray[1]={['OpenURL']=url_thingspeak ..'update?key=' .. API_key .. fields } Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Re: Lua : Exporter des données vers le site ThingSpeak
curl est il installé sur ta machine?
Re: Lua : Exporter des données vers le site ThingSpeak
oui version 7.52.1
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
Re: Lua : Exporter des données vers le site ThingSpeak
Bonjour,
Je me permet de déterrer ce post, étant totalement novice dans tout ce qui est Iot, et apiculteur débutant j'ai cherché à me fabriquer une balance de ruche connectée.
Je me suis débrouillé avec mysensors et c'est plutôt concluant et stable, avec arduino pro-mini 3.3v sur batterie 18650 (Merci aux super tutos de Henri Bachetti sur son blog riton-duino).
Je n'utilise Domoticz uniquement pour des capteurs (pas d'actionneur) et je n'ai donc pas l'envie d'utiliser un VPN, et je voudrais fermer l'accès au serveur en distant.
Je n'ai strictement aucune compétence ou plutôt j'en avais aucune avant de me lancer dans ce projet et les scripts sont donc pour moi une science totalement occulte,
Chaque balance donc chaque nœud comprend 4 capteurs :
Je ne retrouve pas dans le script d’occurrence aux noms des noeuds (node), je suppose donc que l'association se fait uniquement sur le nom du dispositif (child) et donc que je devrait faire un scrip par noeud (mais j'en sais rien en fait), mais comment associer chaque noeud a chaque script,
D'ailleurs que se passe-il lorsque l'on a plusieurs dispositif portant le même nom, ne vaudrait-il mieux pas faire référence à l'ID du dispositif ?
ça m'irait bien d'avoir un channel par ruche et donc une API par ruche,
Faut-il que je différencie les nom des dispositifs pour que ça soit possible ?
Par exemple :
Merci d'avance,
Je me permet de déterrer ce post, étant totalement novice dans tout ce qui est Iot, et apiculteur débutant j'ai cherché à me fabriquer une balance de ruche connectée.
Je me suis débrouillé avec mysensors et c'est plutôt concluant et stable, avec arduino pro-mini 3.3v sur batterie 18650 (Merci aux super tutos de Henri Bachetti sur son blog riton-duino).
Je n'utilise Domoticz uniquement pour des capteurs (pas d'actionneur) et je n'ai donc pas l'envie d'utiliser un VPN, et je voudrais fermer l'accès au serveur en distant.
Je n'ai strictement aucune compétence ou plutôt j'en avais aucune avant de me lancer dans ce projet et les scripts sont donc pour moi une science totalement occulte,
Chaque balance donc chaque nœud comprend 4 capteurs :
- "Poids de la ruche" - cellule de charge MAVIN NA4
"T°C de la cellule de charge" (pour une éventuelle compensation de la mesure de poids par rapport à la température) - DS18B20
"Variation de poids" entre 2 mesures (pour le déclenchement d'alerte, ex : essaimage)
"T°C et Hr" dans la ruche - SHT31D
Je ne retrouve pas dans le script d’occurrence aux noms des noeuds (node), je suppose donc que l'association se fait uniquement sur le nom du dispositif (child) et donc que je devrait faire un scrip par noeud (mais j'en sais rien en fait), mais comment associer chaque noeud a chaque script,
D'ailleurs que se passe-il lorsque l'on a plusieurs dispositif portant le même nom, ne vaudrait-il mieux pas faire référence à l'ID du dispositif ?
ça m'irait bien d'avoir un channel par ruche et donc une API par ruche,
Faut-il que je différencie les nom des dispositifs pour que ça soit possible ?
Par exemple :
- "R001 - Poids de la ruche"
"R001 - T°C de la cellule de charge"
"R001 - Variation de poids"
"R001 - T°C/Hr dans la ruche"
Merci d'avance,
Domoticz V 4.10717
Raspberry pi3+
Mysensors
Raspberry pi3+
Mysensors
Re: Lua : Exporter des données vers le site ThingSpeak
Thingspeak n'accepte que 8 valeurs remontées par API il te faudra donc comme tu le suggere une aPI par ruche voir une API pour 2 ruches. si tu pars sur une API par ruche indique le numero de ruche dans le nom du fichier puis personnalise l'api et chacun des devicesFab59 a écrit : 15 janv. 2020, 16:34 comment associer chaque nœud a chaque script
.../...
ça m'irait bien d'avoir un channel par ruche et donc une API par ruche,
si les noms sont identiques domoticz ne pourra les différencier et cela ne fonctionnera pasFab59 a écrit : 15 janv. 2020, 16:34 D'ailleurs que se passe-il lorsque l'on a plusieurs dispositif portant le même nom, ne vaudrait-il mieux pas faire référence à l'ID du dispositif ?
c'est une bonne idée, cela te permet de ne modifier que ce numero dans chaque scriptFab59 a écrit : 15 janv. 2020, 16:34 Faut-il que je différencie les nom des dispositifs pour que ça soit possible ?
Par exemple :
- "R001 - Poids de la ruche"
"R001 - T°C de la cellule de charge"
"R001 - Variation de poids"
"R001 - T°C/Hr dans la ruche"
si openurl fonctionne pour toi pas besoin de curl comme marcus le signaleFab59 a écrit : 15 janv. 2020, 16:34 dernière question a la vue du dernier commentaire curl est-il nécessaire pour l'application de ce script ?
Re: Lua : Exporter des données vers le site ThingSpeak
Bonjour,
Merci pour ces réponses rapides et complètes,
J'ai tester le script avec curl et openurl et j'ai malgré tout le même message de problème de concaténation de la clé API,
Error: EventSystem: in export_ThingSpeak: [string "--[[script_time_export_ThingSpeak.lua..."]:126: attempt to concatenate local 'API_key' (a nil value)
Je suppose que ça vient donc des prérequis non-installés sur mon serveur, comment puis-je résoudre le problème ?
Merci d'avance,
Merci pour ces réponses rapides et complètes,
J'ai tester le script avec curl et openurl et j'ai malgré tout le même message de problème de concaténation de la clé API,
Error: EventSystem: in export_ThingSpeak: [string "--[[script_time_export_ThingSpeak.lua..."]:126: attempt to concatenate local 'API_key' (a nil value)
Je suppose que ça vient donc des prérequis non-installés sur mon serveur, comment puis-je résoudre le problème ?
Merci d'avance,
Domoticz V 4.10717
Raspberry pi3+
Mysensors
Raspberry pi3+
Mysensors
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Lua : Exporter des données vers le site ThingSpeak
Fab59 a écrit : 20 janv. 2020, 10:00 Bonjour,
Merci pour ces réponses rapides et complètes,
J'ai tester le script avec curl et openurl et j'ai malgré tout le même message de problème de concaténation de la clé API,
Error: EventSystem: in export_ThingSpeak: [string "--[[script_time_export_ThingSpeak.lua..."]:126: attempt to concatenate local 'API_key' (a nil value)
Je suppose que ça vient donc des prérequis non-installés sur mon serveur, comment puis-je résoudre le problème ?
Merci d'avance,
Ligne 21
Code : Tout sélectionner
local api_thingspeak = 'api_thingspeak' -- creer une variable de type chaine contenant votre code API Write KEY ThingSpeakPi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090