Re: MyDomoAtHome - ImperiHome
Publié : 12 sept. 2019, 10:48
je réponds ça pourra servir à quelqu'unjluc2808 a écrit : 18 juil. 2019, 16:30 bonjour ,
j'ai de manière aléatoire des arrêts de MyDomoAtHome, installé sur mon NAS synology DSM6.2.2 version 0.2.39, je n'ai pas réussit à trouvé pourquoi, mais je constate que le service est arrêté.
j'utilise ce service principalement pour impérihome qui de ce fait ne répond plus (of course!!!)
je veux pouvoir monitorer le service et lorsqu'il est arrêté, le redémarrer.
Pour cela j'ai mis en place 1 script dzvents sous domoticz qui va, toutes les 15 minutes tester si le service est toujours en vie et accessible, via un simple appel en http://IP_MYDomoatHome:3002 et je récupère le code 200 pour savoir si c'est en vie, tout cela marche.
Maintenant, et c'est l'objet de mon post, si c'est KO je veux redémarrer le service (synoservice), en SSH l'ordre est assez simple : sudo synoservice --restart pkgctl-MyDomoAtHome et fonctionne parfaitement.
Ma demande est : comment / quelle syntaxe pour faire exécuter cet ordre depuis mon script Dzvents sous domoticz au NAS, sachant que les 2 sont sur ce même NAS synology (donc je n'ai pas de souci d'ouverture d'IP/Port/...)
merci bien de vos suggestions
jluc
voici le script que j'ai mis en place et qui fonctionne maintenant depuis quelques semaines :
Code : Tout sélectionner
local delai = 15 -- pour initialiser le timer, changer la valeur si trop rapide ou lent
return {
on = {
timer = {
'every ' .. delai .. ' minutes' -- pour programmer la récurrence de la requête dans le temps
},
httpResponses = {
'trigger_normal', -- quand tout s'est bien passé jusque là
'trigger_error' -- on a déjà relancé 1 fois
}
},
execute = function(domoticz, item)
if (item.isTimer) then
domoticz.openURL({
url = 'http://192.168.1.xx:3002', -- appel de myDomoAtHome, mettre le bon IP
method = 'GET',
callback = 'trigger_normal', -- regarder httpResponses plus loin.
})
end
if (item.isHTTPResponse) then
if (item.statusCode == 200) then -- le service est opérationnel
local someValue = "MyDomoAtHome fonctionne correctement " -- prépare le texte
domoticz.log(someValue, domoticz.LOG_INFO) -- log l'info
domoticz.devices('myDomoAtHome').updateText(someValue) -- écrire le text dans le dispositif Domoticz, le nom doit correspondre au dispositif virtuel
else
local someValue_error = "MyDomoAtHome ne fonctionne pas, retour du status:" ..item.statusCode .. ", démarrage lancé (start)" -- prépare le texte
if item.trigger == 'trigger_normal' then
os.execute("echo ###### | sudo -S synoservice --start pkgctl-MyDomoAtHome") -- execute la relance du service dans SYNOLOGY
domoticz.devices('myDomoAtHome').updateText(someValue_error)
domoticz.log(someValue_error, domoticz.LOG_INFO) -- log l'info
else
os.execute("echo ###### | sudo -S synoservice --restart pkgctl-MyDomoAtHome")
someValue_error = "MyDomoAtHome ne fonctionne pas, retour du status:" ..item.statusCode .. ", redémarrage lancé (restart)" -- prépare le texte
end
-- changer le pswd par le votre, malheureusement en clair
-- on va laisser un délai pour permettre au service de redémarrer et immédiatement on va contrôler que ça fonctionne
domoticz.openURL({
url = 'http://192.168.1.xx:3002', -- appel myDomoAtHome , mettre le bon IP
method = 'GET',
callback = 'trigger_error', -- see httpResponses above.
}).afterSec(20) -- appel de la requête après 20 secondes
-- update some device in Domoticz
domoticz.devices('myDomoAtHome').updateText(someValue_error) -- écrire le text dans le dispositif Domoticz, le nom doit correspondre au dispositif virtuel
-- domoticz.log('There was a problem handling the request', domoticz.LOG_ERROR) -- log erreur
domoticz.log(item, domoticz.LOG_ERROR) -- uncomment seulement si nécessaire
end
end
end
}