Page 3 sur 3

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 08:56
par Michel91
Bonjour Keros,
Après de multiples essais j'obtiens un résultat sans erreur dans domoticz mais dans ma table phpmyadmin rien du tout.
Script LUA trigger Time

Code : Tout sélectionner

--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local nom_script = "export mysql"
local version = "0.10"
local debugging = true  	-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url = "localhost/loggemulti.php"

local les_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 Puissance Lave Linge et Puissance Sèche Linge )
les_devices[#les_devices+1] = {device="Congélateur",nom="Congélateur",canal = "1"}
les_devices[#les_devices+1] = {device="B.O.F",nom="B.O.F",canal="1"}
les_devices[#les_devices+1] = {device="Viandes",nom="Viandes",canal="1"}
les_devices[#les_devices+1] = {device="Légumes",nom="Légumes",canal="1"}
les_devices[#les_devices+1] = {device="Mise en place",nom="Mise en place",canal="1"}
--les_devices[#les_devices+1] = {device="Tem extérieure"}


local feeds =""
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------

--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------

 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 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 urlencode(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 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 then  -- export des données toutes les 2 minutes
--if ((time.min-1) % 15) == 0 then  -- export des données toutes les 15 minutes
voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",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)
            print(sans_accent(d.device))
			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)
			
		feeds = feeds .. '&f'.. i .. '=' .. urlencode(d.nom) .. '&v' .. i .. '=' .. valeurs[c]
		elseif d.nom ~= nil then
		feeds = feeds .. '&f'.. i.. '=' .. urlencode(d.nom) .. '&v' .. i .. '=' .. v
        else
        feeds = feeds .. '&f'.. i.. '=' .. urlencode(d.device) .. '&v' .. i .. '=' .. v
		end
    I = i    
	end

        feeds = string.gsub (feeds, ".000", "") 
  
    url = url .. "?feeds=" .. I
    voir_les_logs("--- --- ---Envoi valeurs dans la base de données",debugging)
    voir_les_logs("curl -m5 " .. "'".. url .. feeds .."'",debugging)
    voir_les_logs("--- --- ---i a une valeur de : "..I,debugging)
os.execute("curl -m5 " .. "'".. url .. feeds .."'")

voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
-- ============================================================================
return commandArray
Et ça donne dans le Log
2022-12-27 08:45:00.290 Status: LUA: <font color='#f3031d'>=========== export mysql (v0.10) ===========</font>
2022-12-27 08:45:00.290 Status: LUA: <font color='#f3031d'>--- --- --- Congelateur = -14.50</font>
2022-12-27 08:45:00.290 Status: LUA: Congelateur
2022-12-27 08:45:00.290 Status: LUA: <font color='#f3031d'>--- --- --- canal = 1</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- B.O.F = 7.25</font>
2022-12-27 08:45:00.291 Status: LUA: B.O.F
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- canal = 1</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- Viandes = 15.75</font>
2022-12-27 08:45:00.291 Status: LUA: Viandes
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- canal = 1</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- Legumes = 15.75</font>
2022-12-27 08:45:00.291 Status: LUA: Legumes
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- canal = 1</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- Mise en place = 15.25</font>
2022-12-27 08:45:00.291 Status: LUA: Mise en place
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- --- canal = 1</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- ---Envoi valeurs dans la base de données</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>curl -m5 'localhost/loggemulti.php?feeds=5&f1=Cong%C3%A9lateur&v1=-14.50&f2=B%2EO%2EF&v2=7.25&f3=Viandes&v3=15.75&f4=L%C3%A9gumes&v4=15.75&f5=Mise+en+place&v5=15.25'</font>
2022-12-27 08:45:00.291 Status: LUA: <font color='#f3031d'>--- --- ---i a une valeur de : 5</font>
2022-12-27 08:45:00.316 Status: LUA: <font color='#f3031d'>========= Fin export mysql (v0.10) =========</font>

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 10:05
par Keros
De ce que je comprends, le script s'appuie sur localhost/loggemulti.php pour mettre les données dans PHPmyadmin. Est-ce que ce côté là fonctionne ?

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 10:20
par Michel91
je crois que tu as raison, mais je n'arrive pas à savoir ou ça pêche. Je t'explique mon installation.
Domoticz est sur un vps, mon serveur web est sur le même vps apache2 et les fichiers info_db.php & loggemulti.php sont dans le répertoire /var/www/html. Phpmyadmin lui est sur mon Nas synology qui est chez moi.
Et je crois que c'est là que ça coince

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 10:25
par Keros
A mon avis, tu dois pouvoir tester le loggemulti.php sans passer par le script DomoticZ.
Tu as bien vérifié que ton VPS pouvais accéder à ta base SQL qui est chez toi (Phpmyadmin n'est qu'une application qui permet de visualiser/éditer la base de donnée).

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 10:36
par Michel91
J'ai testé loggemulti.php en direct avec une page internet et je recois "v or f is null" je pense que c'est normal donc le problème serais la liaison avec mon Nas non?

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 10:50
par Keros
Sauf que si v ou f est vide, cela veut dire qu'il n'y a rien à envoyer, donc la liaison php > SQL n'est pas sollicitée/testée.

Il faut mettre quelques infos dans le genre :
loggemulti.php?feeds=5&f1=Cong%C3%A9lateur&v1=-14.50&f2=B%2EO%2EF&v2=7.25&f3=Viandes&v3=15.75&f4=L%C3%A9gumes&v4=15.75&f5=Mise+en+place&v5=15.25'
Pas forcément tout. Il faut comprendre comment fonctionne loggemulti.php et peut-être lui demander d'envoyer une valeur 0 ou 1 dans une base de test.

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 15:28
par Michel91
Le problème que j'ai maintenant c'est de créer un dossier sur mon serveur web synology. J'ai déplacer domoticz sur le syno pour réduire les accès.

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 27 déc. 2022, 17:04
par Keros
Là, je ne pourrais plus t'aider, désolé.

Re: [LUA] Exporter vos données vers une base MySQL

Publié : 28 déc. 2022, 10:22
par Michel91
Bonjour Keros,
Après des heures de recherche je suis revenu à la config primaire, mon Nas bloquait l'adresse ip de mon domoticz, après déblocage quand j'envoie une requête du genre

http://xxx.xxx.xxxx.xxxx/loggemulti.php ... e&v5=15.25

La page affiche le contenu de mon fichier info_db.php
?php $hostname = "xxx.fr/phpmyadmin"; $db_login = "user"; $db_passw = "monmotdepasse" $db_name = "BW_Saclay"; $db_table = "cuisine"; ?>

Il doit manquer quelque chose non parce que la table est toujours vide