[LUA] Températures min/max et envoi par mail

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
fratton
Messages : 150
Inscription : 19 août 2015, 16:38

Re: Températures min/max et envoi par mail

Message par fratton »

Pour la troisième variable, ce ne serait pas l'état des piles ? Un truc du genre 0 = 0%, 1 = 50% et 2 = 100% suivant les constructeur :?
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi
Nissa
Messages : 96
Inscription : 21 déc. 2015, 23:38
Localisation : Bordeaux

Re: Températures min/max et envoi par mail

Message par Nissa »

Bonjour,
Script mis en prod, ça fonctionne nickel !
Merci AlexElectro
A+
Domoticz sur RPI4 / Rflink / Rftrxcom / Sondes thermo sur 1Wire / Volets Somfy rts / Divers modules 433 mhz pas chers / Poele à pellets Ravelli domotisé / Volets Bubendorf / SonOff / Arrosage enterré sur SonOff 4 / Robot piscine domotisé
AlexElectro
Messages : 55
Inscription : 18 juil. 2015, 22:13

Re: Températures min/max et envoi par mail

Message par AlexElectro »

merci ;)
Domoticz sur RPi - RfxCom - Sondes oregon DIY - Bus one wire - sondes DS18B20 - BMP085 - Home confort
http://electro.bassignyinformatique.fr/
Chris54220
Messages : 124
Inscription : 20 mars 2016, 20:54
Localisation : Nancy

Re: Températures min/max et envoi par mail

Message par Chris54220 »

Bonjour Merci pour ce scripts très intéressent

mais j'ai un petit soucis il m'envoi pas le mail a 7h00 du matin et je trouve pas pour

petit info :

ma sonde extérieur me donne les donnée que toute les 10 min je sais pas si cela peux jouer
AlexElectro
Messages : 55
Inscription : 18 juil. 2015, 22:13

Re: Températures min/max et envoi par mail

Message par AlexElectro »

Bonjour
Tu peux poster le bout de log correspondant.
Domoticz sur RPi - RfxCom - Sondes oregon DIY - Bus one wire - sondes DS18B20 - BMP085 - Home confort
http://electro.bassignyinformatique.fr/
Chris54220
Messages : 124
Inscription : 20 mars 2016, 20:54
Localisation : Nancy

Re: Températures min/max et envoi par mail

Message par Chris54220 »

voila le LOG de 7h00

2016-04-03 07:01:02.923 Hardware Monitor: Fetching data (System sensors)
2016-04-03 07:01:19.680 (433 Mhz) Temp (Congelateur)
2016-04-03 07:01:22.930 LUA: #### Debug script température ####
2016-04-03 07:01:22.931 LUA: sonde Exterieur = 9°C
2016-04-03 07:01:22.931 LUA: Temp_max_ext = 11°C
2016-04-03 07:01:22.931 LUA: Temp_min_ext = 8°C
2016-04-03 07:01:22.931 LUA: Nous sommes le 3, il est 7h1min
2016-04-03 07:01:22.931 LUA: #### Fin du debug ####
2016-04-03 07:01:22.920 (Meteo) Temp + Humidity + Baro (Exterieur)
AlexElectro
Messages : 55
Inscription : 18 juil. 2015, 22:13

Re: Températures min/max et envoi par mail

Message par AlexElectro »

Ca c'est le log de 7h01, le script envoi le mail à 7h00. Comme c'est un script time il s'exécute toutes les minutes.
Change l'heure en mettant quelque chose de proche, genre s'il est 11h00 met 11h04 et poste le log de cette minute précise.
C'est cette partie là qui semble ne pas s'exécuter:

Code : Tout sélectionner

 if (hour==07 and min==00)
            then 
            objet = 'Températures du '..day
            message = 'Cette nuit, la température est descendue à '..uservariables["Temp_min_ext"]..'°C à ' ..uservariables["Temp_min_ext_hour"]..'h'..uservariables["Temp_min_ext_min"]..'. Hier la température maxi a été de '..uservariables["Temp_max_ext"]..'°C à '..uservariables["Temp_max_ext_hour"]..'h'..uservariables["Temp_max_ext_min"]..'.'
            commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
            commandArray['Variable:Temp_max_ext']= tostring(0)
            if (debug == 'oui') then
               print('message envoyé')
               print('Objet:'..objet)
               print('Corps du message: '..message)
               print('Destinataire: '..EmailTo)
               end
         end
Sinon il n'y a pas de problème avec ta sonde, elle est bien reconnue.
Domoticz sur RPi - RfxCom - Sondes oregon DIY - Bus one wire - sondes DS18B20 - BMP085 - Home confort
http://electro.bassignyinformatique.fr/
Chris54220
Messages : 124
Inscription : 20 mars 2016, 20:54
Localisation : Nancy

Re: Températures min/max et envoi par mail

Message par Chris54220 »

je viens de change l'heure pour le mettre a l'heure que le scripts s’exécute est cela fonctionne bien je te remercie
dolby44
Messages : 46
Inscription : 20 janv. 2016, 10:32

Re: Températures min/max et envoi par mail

Message par dolby44 »

Hello,

Merci pour ce code qui correspond à ce que je cherchais :-)
Mon objectif sera un peu différent (car il commence à faire meilleur ;-))
J'aimerai regarder le minimum des températures dans la maison pour passer en mode été quand le minimum est de 20°C par exemple
Je passerai en mode hivers dès que le minimum passera à 18°C par exemple.

Bref, c'est pas le sujet !

En mettant en place le code dans mon domoticz, j'ai vu quelques optimisations possible.

1. plutôt que d'utiliser 4 variables pour le stockage de l'heure de température mini et maxi, j'utilise le uservariables_lastupdate[]
au passage, si le script était modifié pour se dérouler sur une periode de plusieurs jours, on aurait la date et l'heure du min/max.


2. si l'intervalle d’émission de la sonde est supérieur à la minute ou si il y a des perturbations, on peut louper l'envoi du mail.
Du coup, j'ai déplacé le code d'envoi du mail hors du devicechanged
Par contre, le pb, c'est qu'il m'envoie 10 mails !
J'ai pas encore regardé, mais il faudrait probablement utiliser une variable pour eviter ça

Voici mon code modifié, qui nécessite encore des améliorations !

Code : Tout sélectionner

commandArray = {}

---------------------------------
------ Variables à adapter ------
---------------------------------
local EmailTo = 'email@gmail.com'  -- adresse mail, séparées par ; si plusieurs
local sonde = 'Exterieur'  -- nom de la sonde à surveiller
local typeSonde = 'humid' -- type de sonde: 'temp': uniquement température / 'humid' : temp+humidité
local debug = 'oui'  -- oui ou non pour avoir des valeurs dans le log

---------------------------------
---------------------------------
hour    = tonumber(os.date("%H"));
min    = tonumber(os.date("%M"));
day    = tonumber(os.date("%d"));


if (hour==7 and min==00)
    then 
    objet = 'Températures du '..day
    --message = 'Cette nuit, la température est descendue à '..uservariables["Temp_min_ext"]..'°C à ' ..uservariables["Temp_min_ext_hour"]..'h'..uservariables["Temp_min_ext_min"]..'. Hier la température maxi a été de '..uservariables["Temp_max_ext"]..'°C à '..uservariables["Temp_max_ext_hour"]..'h'..uservariables["Temp_max_ext_min"]..'.'
    message = 'Cette nuit, la température est descendue à '..uservariables["Temp_min_ext"]..'°C à ' ..uservariables_lastupdate["Temp_min_ext"]..'. Hier la température maxi a été de '..uservariables["Temp_max_ext"]..'°C à '..uservariables_lastupdate["Temp_max_ext"]..'.'
    commandArray['SendEmail']= objet..'#'.. message .. '#' .. EmailTo
    commandArray['Variable:Temp_max_ext']= tostring(0)
    if (debug == 'oui') then
       print('message envoyé')
       print('Objet:'..objet)
       print('Corps du message: '..message)
       print('Destinataire: '..EmailTo)
    end
end

if (devicechanged[sonde]) then
        if (typeSonde == 'temp') then
            temp = tonumber(otherdevices_svalues[sonde])
        elseif (typeSonde == 'humid') then
            temp, sHumid = otherdevices_svalues[sonde]:match("([^;]+);([^;]+)")
            temp = tonumber(temp)
        end
        temp_min = tonumber(uservariables["Temp_min_ext"])
        temp_max = tonumber(uservariables["Temp_max_ext"])
        if (debug == 'oui') then
            print('#### Debug script température ####')
            print('sonde '..sonde..' = '..temp..'°C')
            print('Temp_max_ext = '..temp_max..'°C')
            print('Temp_min_ext = '..temp_min..'°C')
            print('Nous sommes le '..day..', il est '..hour..'h'..min..'min')
        end
         
         
        if (tonumber(uservariables["Temp_ext_day"]) ~= day)
            then 
            commandArray['Variable:Temp_min_ext']= tostring(30)
            commandArray['Variable:Temp_ext_day'] = tostring(day)   
            if (debug == 'oui') then
               print('Variable "day" changée, maintenant :'..day)
               print('Variable Temp_min_ext passée à 30')
               end
            end
         
        if (temp < temp_min)
            then
            commandArray['Variable:Temp_min_ext']= tostring (temp)
            --commandArray['Variable:Temp_min_ext_hour']= tostring (hour)
            --commandArray['Variable:Temp_min_ext_min']= tostring (min)
            print('Temp_min_ext mis à jour : '..temp..' °c à '..hour..'h'..min)
            
        end
         
        if (temp > temp_max)
            then
            commandArray['Variable:Temp_max_ext']= tostring (temp)
            --commandArray['Variable:Temp_max_ext_hour']= tostring (hour)
            --commandArray['Variable:Temp_max_ext_min']= tostring (min)
            print('Temp_max_ext mis à jour : '..temp..' °c à '..hour..'h'..min)
        end
         
        if (debug == 'oui') then
               print('#### Fin du debug ####')
        end
end

return commandArray
AlexElectro
Messages : 55
Inscription : 18 juil. 2015, 22:13

Re: Températures min/max et envoi par mail

Message par AlexElectro »

C'est compliqué d'utiliser un deviceChanged pour la condition car le programme considère qu'il y a changement trop souvent. En effet les sondes emèttent régulièrement une data. Domoticz actualise la valeur et même si elle n'a pas varié. Ca change la date et l'heure et donc deviceChanged considère qu'il y a eu changement.... Je ne sais pas si j'ai été clair... :oops:

Bref, c'est pour ça que je suis plutôt parti sur un scripTime

Si tu arrives à faire fonctionner le script avec moins de lignes de code, je suis preneur!
Domoticz sur RPi - RfxCom - Sondes oregon DIY - Bus one wire - sondes DS18B20 - BMP085 - Home confort
http://electro.bassignyinformatique.fr/
Répondre