script lua domoticz

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 <\>.
dou_dou_69
Messages : 7
Inscription : 03 sept. 2022, 18:22

script lua domoticz

Message par dou_dou_69 »

Bonjour à tous,

je vous expose mon soucis.

j'ai utilisé un script lua dans les events de domoticz pour m'envoyer un email avec vun rapport hebdomadaire de l'état des batteries de mes devices domoticz.

Ca fonctionne trop bien, ca me spam ma boite mail pendant la minute concernée et ca monte jusqu'à 132 mails par rapport.

comment pourrais-je limiter la casse? j'ai essayé de mettre une tempo avant la ligne return commandArray avec wait() contenant les secondes d'attente mais il me renvoi attempt to call a nil value (global 'wait').
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: script lua domoticz

Message par Keros »

Bonjour dou_dou_69 et bienvenu sur le forum :)

Tu peux nous partager ton script et nous indiquer quel trigger tu as mis ?
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
dou_dou_69
Messages : 7
Inscription : 03 sept. 2022, 18:22

Re: script lua domoticz

Message par dou_dou_69 »

Bonjour à tous,

j'utilise le scripts de framboise comme base, rendons à césar ce qui est a césar.

le voici :

Code : Tout sélectionner

-- User configuration
BatteryThreshold = 20 -- niveau mini à partir duquel nous souhaitons recevoir un mail.
WeeklySummary = true -- true ou false, suivant que lon souhaite ou pas avoir un récapitulatif de l'état des batteries une fois par semaine.
SummaryDay = 1 --si "WeeklySummary = true", quel jour sera envoyé le récapitulatif (1 = dimanche)
EmailTo = "mon email"
ReportHour = 08 -- Heure de déclenchement de la vérification.
ReportMinute = 30 -- Minute de déclenchement de la vérification.
ident = "mon ident de boite mail" --en base 64 solution longue à trouver
pass = "mon pass de boite mail" -- idem en base 64

Domoticz =  -- Protocole et Adresse de Domoticz (par défaut, http://localhost")
DomoticzPort =  -- Port de connexion à Domoticz (par défaut, 8080")
Sujet = '' -- // Ne pas modifier, Initialisation de la variable
Message = '' -- // Ne pas modifier, Initialisation de la variable
EnvoiMail = false -- // Ne pas modifier, Initialisation de la variable

json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- linux
--json = (loadfile "C:\\Domoticz\\scripts\\lua\\json.lua")() -- windows
commandArray = {}
time = os.date("*t")

-- Weekly Device Battery Summary
if WeeklySummary == true and time.wday == SummaryDay and time.hour == ReportHour and time.min == ReportMinute then

    -- Get a list of all devices
    handle = io.popen("curl 'http://" .. Domoticz .. ":" .. DomoticzPort .. "/json.htm?username=" .. ident .. "=&password=" .. pass .. "=&type=devices&order=name'")  --  j'ai trouver tant bien que mal comment intégrer mon ident et password à la connexion, si ca peut aider ceux qui en ont besoin.
    devicesJson = handle:read('*all')
    handle:close()
    devices = json:decode(devicesJson)
    BattToReplace = false
    Sujet = 'Info Domoticz : Niveau des Batteries'
    for i,device in ipairs(devices.result) do
        if device.BatteryLevel < 100 then --and device.BatteryLevel ~=0 and device.Used == 1 then
            Message = Message .. device.Name .. ' : Batteries = ' .. device.BatteryLevel .. '%<br>'
            print(device.Name .. ' : Batteries = ' .. device.BatteryLevel .. '%')
            EnvoiMail = true
        end
    end

-- Daily Low Battery Report
elseif time.hour == ReportHour and time.min == ReportMinute then

    -- Get a list of all devices
    handle = io.popen("curl 'http://" .. Domoticz .. ":" .. DomoticzPort .. "/json.htm?username=" .. ident .. "=&password=" .. pass .. "=&type=devices&order=name'")
    devicesJson = handle:read('*all')
    handle:close()
    devices = json:decode(devicesJson)
    BattToReplace = false
    Sujet = 'Alerte Domoticz : Niveau Batteries faible'
    for i,device in ipairs(devices.result) do
        if device.BatteryLevel < BatteryThreshold then --and device.BatteryLevel~=0 and device.Used == 1 then
            Message = Message .. device.Name .. ' : Batteries = ' .. device.BatteryLevel .. '%<br>'
            print(device.Name .. ' : Batteries = ' .. device.BatteryLevel .. '%')
            EnvoiMail = true
        end
    end

end

if EnvoiMail == true then
    commandArray['SendEmail']=Sujet .. '#' .. Message .. '#' .. EmailTo
end

return commandArray
pour le trigger je suppose que c'est la condition de déclechement.
pour moi c'est jour + heure ou niveau de batterie + heure
Dernière modification par Keros le 04 sept. 2022, 11:32, modifié 1 fois.
Raison : Ajout des balises code pour le script
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: script lua domoticz

Message par Keros »

Regarde dans ma présentation (lien en signature), j'ai écrit des petits guides et dans l'un deux, je parle des triggers. Documente-toi dessus pour comprendre le principe de déclenchement des scripts. Je pense que ton souci vient de là ;)
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
dou_dou_69
Messages : 7
Inscription : 03 sept. 2022, 18:22

Re: script lua domoticz

Message par dou_dou_69 »

le trigger fonctionne vu que je reçois des mail mail il faudrait arrêter au 1er envoie valide lol
Répondre