Page 2 sur 6

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

Publié : 15 févr. 2016, 17:11
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 :?

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

Publié : 02 mars 2016, 20:51
par Nissa
Bonjour,
Script mis en prod, ça fonctionne nickel !
Merci AlexElectro
A+

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

Publié : 03 mars 2016, 11:25
par AlexElectro
merci ;)

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

Publié : 03 avr. 2016, 09:55
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

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

Publié : 03 avr. 2016, 10:05
par AlexElectro
Bonjour
Tu peux poster le bout de log correspondant.

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

Publié : 03 avr. 2016, 10:16
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)

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

Publié : 03 avr. 2016, 10:58
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.

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

Publié : 03 avr. 2016, 11:13
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

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

Publié : 10 mai 2016, 15:45
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

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

Publié : 18 mai 2016, 13:40
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!