Lire erreur fichier log dans script lua
Lire erreur fichier log dans script lua
Bonjour
J'ai Domoticz installé avec docker sur un Synology, et quelques interrupteurs espEasy qui communiquent en wifi.
Il arrive que la commande http ne passe pas, le récepteur ne change pas d'état, j'ai un message d'erreur dans le log et le bouton de commande de Domoticz lui change bien d'état.
Au final, je me trouve avec une information On dans Domoticz, alors que le récepteur est toujours à Off.
J'utilise des commandes du type http://192.168.xxx.xxx/control?cmd=GPIO,4,1 et espEasy doit me renvoyer une réponse OK/NOK que lit Domoticz
Quand la requête foire, j'ai immédiatement un message d'erreur du type
2022-08-24 10:24:46.762 Error: Error opening url: http://192.168.xxx.xxx/control?cmd=GPIO,4,1
De mes recherches, j'ai vu des solutions allant chercher des commandes externes à Domoticz, mais ne sachant pas manipuler les "curl" sous synology/Docker, DzVents ne fonctionnant pas avec mon installation, je cherche à vérifier que la commande à réussi en lisant le log de domoticz avec Lua.
Est-il possible de lire le log avec une requete JSON du type
/json.htm?type=command¶m=getlog&lastlogtime=LASTLOGTIME&loglevel=LOGLEVEL
avec un script lua ?
Si je dois charger le fichier Json.lua pour decoder le Json, peut-on me dire ou le trouver sur une installation Docker/Synology ?
Merci de votre aide
J'ai Domoticz installé avec docker sur un Synology, et quelques interrupteurs espEasy qui communiquent en wifi.
Il arrive que la commande http ne passe pas, le récepteur ne change pas d'état, j'ai un message d'erreur dans le log et le bouton de commande de Domoticz lui change bien d'état.
Au final, je me trouve avec une information On dans Domoticz, alors que le récepteur est toujours à Off.
J'utilise des commandes du type http://192.168.xxx.xxx/control?cmd=GPIO,4,1 et espEasy doit me renvoyer une réponse OK/NOK que lit Domoticz
Quand la requête foire, j'ai immédiatement un message d'erreur du type
2022-08-24 10:24:46.762 Error: Error opening url: http://192.168.xxx.xxx/control?cmd=GPIO,4,1
De mes recherches, j'ai vu des solutions allant chercher des commandes externes à Domoticz, mais ne sachant pas manipuler les "curl" sous synology/Docker, DzVents ne fonctionnant pas avec mon installation, je cherche à vérifier que la commande à réussi en lisant le log de domoticz avec Lua.
Est-il possible de lire le log avec une requete JSON du type
/json.htm?type=command¶m=getlog&lastlogtime=LASTLOGTIME&loglevel=LOGLEVEL
avec un script lua ?
Si je dois charger le fichier Json.lua pour decoder le Json, peut-on me dire ou le trouver sur une installation Docker/Synology ?
Merci de votre aide
Re: Lire erreur fichier log dans script lua
Analyser les logs me semble compliqué.
Regarde peut-être en DzVents, tu peux faire de la gestion d'erreur sur des requêtes http.
Tu peux également regarder en utilisant du MQTT : tu auras le retour d'info.
Regarde peut-être en DzVents, tu peux faire de la gestion d'erreur sur des requêtes http.
Tu peux également regarder en utilisant du MQTT : tu auras le retour d'info.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Lire erreur fichier log dans script lua
Bonjour, merçi de la réponse
Je n'ai pas réussi à faire fonctionner DzVents sur mon installation, par contre le MQTT peut être une piste, même si ma dernière tentative Synology/Docker/Mosquitto n'a pas été franchement réussie...
Je n'ai pas réussi à faire fonctionner DzVents sur mon installation, par contre le MQTT peut être une piste, même si ma dernière tentative Synology/Docker/Mosquitto n'a pas été franchement réussie...
Re: Lire erreur fichier log dans script lua
Pardon oui, j'ai perdu de l'idée que tu avais un souci avec DzVents. Désolé.
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Lire erreur fichier log dans script lua
OUi, il est tout a fait possible de lire les logs pour ensuite enchaine une action.Sherco49 a écrit : 24 août 2022, 11:40 Est-il possible de lire le log avec une requete JSON du type
/json.htm?type=command¶m=getlog&lastlogtime=LASTLOGTIME&loglevel=LOGLEVEL
avec un script lua ?
Voici la fonction que j'utilise, il te faudra évidement l'adapter (définition des variables curl et domoticzURL)
Code : Tout sélectionner
function lastLogEntry(loglevel)
local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getlog'..loglevel..'"'))
local list = rid:read('*all')
rid:close()
local tableau = json:decode(list).result
if tableau ~= nil then
return tableau
else
tableau = {}
return tableau
end
endCode : Tout sélectionner
LastLogTime = os.time() - 61
for n, line in ipairs(lastLogEntry('&lastlogtime='..LastLogTime..'&loglevel=268435455')) do
if line['message'] ~= '' then
if string.match(line['message'], "message a personnaliser") then
--action a définir
end
end
endPi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: Lire erreur fichier log dans script lua
Bonjour, et merçi pour la solution.
J'ai fais un exemple de script à partir de ton code, et j'ai trouvé comment définir le chemin de curl.
Par contre , j'ai le message d'erreur suivant:
je comprends qu'il me dit que je tente de concaténer une valeur non définie qui serait domoticzURL, alors que je la définit.
en mettant directement l'IP dans la commande curl, j'ai le message d' erreur.
mon code:
J'ai fais un exemple de script à partir de ton code, et j'ai trouvé comment définir le chemin de curl.
Par contre , j'ai le message d'erreur suivant:
Code : Tout sélectionner
EventSystem: in test curl: [string "function lastLogEntry(loglevel) ..."]:2: attempt to concatenate a nil value (global 'domoticzURL')en mettant directement l'IP dans la commande curl, j'ai le message d' erreur.
Code : Tout sélectionner
Error: EventSystem: in test curl: [string "function lastLogEntry(loglevel) ..."]:2: attempt to concatenate a nil value (global 'curl')Code : Tout sélectionner
function lastLogEntry(loglevel)
local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getlog'..loglevel..'"'))
local list = rid:read('*all')
rid:close()
local tableau = json:decode(list).result
if tableau ~= nil then
return tableau
else
tableau = {}
return tableau
end
end
local curl = '/usr/bin/curl'
local domoticzURL='http://192.168.1.20'
LastLogTime = os.time() - 61
for n, line in ipairs(lastLogEntry('&lastlogtime='..LastLogTime..'&loglevel=268435455')) do
if line['message'] ~= '' then
if string.match(line['message'], "RF433: RFXMeter (Cuve fioul)") then
print("coucou")
end
end
end-
denis_brasseur
- Messages : 898
- Inscription : 24 déc. 2018, 17:05
- Localisation : (26)
Re: Lire erreur fichier log dans script lua
Il manque le port dans domoticzURL
exemple
Tu peux aussi écrire en dur dans la fonction les valeurs de domoticzURL et curl, je pense qu'il ne trouve pas les 2 variables, a définir dans la fonction peut etre.
Cela donne ceci chez moi :
exemple
Code : Tout sélectionner
local domoticzURL='http://192.168.1.20:8060'Cela donne ceci chez moi :
Code : Tout sélectionner
local rid = assert(io.popen('/usr/bin/curl -m 15'..'"http://192.168.1.111:8099/json.htm?type=command¶m=getlog'..loglevel..'"'))Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Re: Lire erreur fichier log dans script lua
Effectivement, je ne maitrise pas correctement la portée des variables....
En mettant dans la fonction la définition de curl et de l'adresse Domoticz, je n'ai plus le même message d'erreur
Maintenant, c'est la commande Json.decode qu'il ne comprends pas.
Ce que je comprends, c'est qu'il faut charger une fois la bibliothèque Json.lua avec la commande :
Pouvez vous m'aider à charger cette librairie sur mon système ? (Synology/Docker/Domoticz) ?
En mettant dans la fonction la définition de curl et de l'adresse Domoticz, je n'ai plus le même message d'erreur
Maintenant, c'est la commande Json.decode qu'il ne comprends pas.
Ce que je comprends, c'est qu'il faut charger une fois la bibliothèque Json.lua avec la commande :
Code : Tout sélectionner
JSON = assert(loadfile "JSON.lua")()Re: Lire erreur fichier log dans script lua
J'ai ceci comme exemple :
Code : Tout sélectionner
--Sélectionner le chemin vers votre fichier JSON.lua en enlevant les dé commentant la ligne pour votre système d'exploitation
--json = (loadfile "/home/votrenomutilisé/domoticz/scripts/lua/JSON.lua")() -- For Linux
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- for PI
--json = (loadfile "/volume1/@appstore/domoticz/var/scripts/lua/JSON.lua")() -- For SynoComment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
Re: Lire erreur fichier log dans script lua
merci pour l'exemple, il correspond à ce que j'ai deviné en continuant mes recherches. (j'ai trouvé cette page: https://easydomoticz.com/lua-et-json/
La version Docker de Domoticz installée n'a pas le fichier JSON.lua en natif, j'ai fait un find à partir de la racine, rien... ( find ne s'occupe pas des droits ou des fichiers cachés ?)
J'ai chargé le fichier JSON.lua dans le répertoire /volume1/docker/domoticz/userdata/scripts/lua, et ai mis le chemin dans mon code, mais...
j'ai rajouté "assert" devant loadfile, sans celà il y a une erreur "attempt to call a nil value"
Ou est mon erreur sur le chemin du fichier ? ou y a t il des soucis avec les permissions ? toute l'arborescence est avec mon ident comme owner
La version Docker de Domoticz installée n'a pas le fichier JSON.lua en natif, j'ai fait un find à partir de la racine, rien... ( find ne s'occupe pas des droits ou des fichiers cachés ?)
J'ai chargé le fichier JSON.lua dans le répertoire /volume1/docker/domoticz/userdata/scripts/lua, et ai mis le chemin dans mon code, mais...
Code : Tout sélectionner
cannot open /volume1/docker/domoticz/userdata/scripts/lua/JSON.lua: No such file or directoryOu est mon erreur sur le chemin du fichier ? ou y a t il des soucis avec les permissions ? toute l'arborescence est avec mon ident comme owner
Code : Tout sélectionner
function lastLogEntry(loglevel)
local curl = '/usr/bin/curl'
local domoticzURL='http://192.168.1.20:8080'
local rid = assert(io.popen(curl..'"'..domoticzURL..'/json.htm?type=command¶m=getlog'..loglevel..'"'))
local list = rid:read('*all')
rid:close()
local tableau = json:decode(list).result
if tableau ~= nil then
return tableau
else
tableau = {}
return tableau
end
end
json = assert(loadfile "/volume1/docker/domoticz/userdata/scripts/lua/JSON.lua")()
LastLogTime = os.time() - 61
for n, line in ipairs(lastLogEntry('&lastlogtime='..LastLogTime..'&loglevel=268435455')) do
if line['message'] ~= '' then
if string.match(line['message'], "RF433: RFXMeter (Cuve fioul)") then
print("coucou")
end
end
end
Dernière modification par Sherco49 le 25 août 2022, 12:18, modifié 2 fois.