LUA : Rafraîchissement nocturne

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
papoo
Messages : 1907
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

LUA : Rafraîchissement nocturne

Message par papoo » 01 juil. 2017, 21:44

Le plus dur dans un script c'est souvent de trouver l'idée de départ. Et plus l'idée est simple, et plus on enrage de ne pas l'avoir trouvé le premier.
C'est ce qu'il m'est arrivé en lisant l'article de Mr Xhark sur blogmotion
En ces temps de canicule il est intéressant de connaitre le moment où la température extérieure passe en dessous de la température intérieure pour profiter du rafraîchissement nocturne (night cooling).

c'est ce que je me suis attaché à faire en LUA pour être intégré facilement à domoticz

Principe : ce script vérifie toutes les cinq minutes si la température extérieure (variable temp_ext) passe en dessous de la température des pièces référencées dans le tableau les_températures.
il compare chaque température au seuil fixé par la variable seuil_notification (en °). Si une ou plusieurs températures sont supérieures à ce seuil, envoie d'une notification pour chacune d'elle.
une seule notification par jour, réinitialisée en cours d'après midi, la période la plus chaude de la journée.
Plusieurs type de notifications, par mail, par pushbullet ou via les notifications de domoticz.
Création de la variable utilisateur de réinitialisation automatique.
tableau des températures intérieures avec définition du nombre de pièces au dessus de la température extérieure avant envoi de notification (variable Nb_pieces)

Code : Tout sélectionner

--[[
--[[
name : script_time_rafraichissement_nocturne.lua
auteur : papoo
MAJ : 09/07/2017
création : 24/06/2017

http://pon.fr/rafraichissement-nocturne/
http://easydomoticz.com/forum/viewtopic.php?f=17&t=4343#p38107
Principe : ce script vérifie toutes les dix minutes si la température extérieure (variable temp_ext) passe en dessous de la température  des pièces référencées dans le tableau les_températures. 
il compare chaque température au seuil fixé par la variable  seuil_notification (en °). Si une ou plusieurs températures sont supérieures à ce seuil, envoie d'une notification pour chacune d'elle.
une seule notification par jour, réinitialisée en cours d'après midi, la période la plus chaude de la journée.
Plusieurs type de notifications, par mail, par pushbullet ou via les notifications de domoticz.
Création de la variable utilisateur de réinitialisation automatique.
tableau des températures intérieures avec définition du nombre de pièces au dessus de la température extérieure avant envoi de notification (variable Nb_pieces)

]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local nom_script = 'Rafraîchissement nocturne'
local version = '1.05'
local debugging = true   	                                    -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url = '127.0.0.1:8080'                                    -- adresse ip domoticz
local seuil_notification = 25 	        	                    -- seuil température intérieure au delà duquel les notifications d'alarme seront envoyées
local deltaT = 2                                                -- Delta T entre T° interieure et T° extérieure avant alarme 
local temp_ext = 'Temperature exterieure' 	                    -- nom de la sonde extérieure
local les_temperatures = { "Temperature Entree", "Temperature Salon","Couloir 1er étage", "Temperature Parents", "Temperature Bureau", "Temperature Cuisine", "Temperature Douche"}; -- Liste de vos sondes intérieures séparées par une virgule
local notif_mail = true                                         -- true si l'on  souhaite être notifié  par mail, sinon false.
local notif_pushbullet = false                                   -- true si l'on  souhaite être notifié  via pushbullet, sinon false.
local notif_all = true                                         -- true si l'on  souhaite être notifié  via le système de notification domoticz, sinon false.
local EmailTo = 'votre.adresse@gmail.com'                            -- adresse mail, séparées par ; si plusieurs (pour la notification par mail)
local var_notif = 'Notification_ouverture_fenetres'             -- nom de la variable de limite de notification
local Nb_pieces = 2                                             -- Définissez le nombre de pièces minimum dont la T° est supérieure à la température extérieure avant l'envoi des notifications
local ResetHeure = 14                                           -- Heure à laquelle vous souhaitez réinitialiser les notifications
local ResetMinute = 25                                           -- Minute à laquelle vous souhaitez réinitialiser les notifications
local Pushbullet_token = ''   -- Token de votre Pushbullet (pour la notification via Pushbullet)
local OS = "linux"                                              -- Définissez l'os sous lequel fonctionne ce script. "linux" ou "windows"

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local message = {}
local alarme = 0
local notification = '' 
commandArray = {}
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
--package.path = package.path..";/home/pi/domoticz/scripts/lua/fonctions/?.lua"
--json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
--curl = '/usr/bin/curl -m 5 -u domoticzUSER:domoticzPSWD '		 	-- ne pas oublier l'espace à la fin
--require('fonctions_perso')

function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	-- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--============================================================================================== 
function urlencode(str) -- encode la chaine str pour la passer dans une url 
   if (str) then
   str = string.gsub (str, "\n", "\r\n")
   str = string.gsub (str, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
   end
   return str
end 
--==============================================================================================
function Pushbullet(pb_title,pb_body)  -- séparer titre et message par un ;
    if OS == "windows" then -- pour windows
        local pb_command = 'c:\\Programs\\Curl\\curl -u ' .. Pushbullet_token .. ': "https://api.pushbullet.com/v2/pushes" -d type=note -d title="' .. pb_title .. '" -d body="' .. pb_body ..'"'
    else --pour Linux
        local pb_command = '/usr/bin/curl -m 5 -u ' .. Pushbullet_token .. ': "https://api.pushbullet.com/v2/pushes" -d type=note -d title="' .. pb_title .. '" -d body="' .. pb_body ..'"'
    end
    exec_success = os.execute(pb_command)
end
-------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
time=os.date("*t")
  
if ((time.min-1) % 10) == 0 then -- Déclenchement du script toutes les 10 minutes en commençant à HH:01 
--if time.min % 1 == 0 then -- pour test
    voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
	voir_les_logs("--- --- --- seuil de notification ".. seuil_notification .."°C",debugging)
    temperature_exterieure = string.match(otherdevices_svalues[temp_ext], "%d+%.*%d*")
    temperature_exterieure = temperature_exterieure 
    voir_les_logs("--- --- --- Temperature exterieure ".. temperature_exterieure .."°C",debugging)
    
    if var_notif ~= nil then -- le nom de la variable utilisateur a t'il été renseigné ?
        if(uservariables[var_notif] == nil) then -- Création de la variable  car elle n'existe pas
            voir_les_logs("--- --- --- La Variable " .. var_notif .." n'existe pas --- --- --- ",debugging)
            commandArray['OpenURL']=url..'/json.htm?type=command&param=saveuservariable&vname='..urlencode(var_notif)..'&vtype=2&vvalue=0'
            adresse = urlencode(var_notif)
            voir_les_logs("--- --- --- adresse " .. adresse .."  --- --- --- ",debugging);
            voir_les_logs("--- --- --- Création de la Variable " .. var_notif .." manquante --- --- --- ",debugging)
            print('script supendu')
        else
        voir_les_logs("--- --- --- La Variable " .. var_notif .." est à : ".. uservariables[var_notif],debugging)
        notification = uservariables[var_notif] 
            if tonumber(notification) > 0 then
            voir_les_logs("--- --- --- Une notification a déjà été envoyée aujourd\'hui",debugging)
            else 
            voir_les_logs("--- --- --- Aucune notification n\'a été envoyée aujourd\'hui",debugging)
            end
        end  
    else 
        voir_les_logs("--- --- --- Le nom de la variable utilisateur n'a pas été correctement défini",debugging)
    end        
            
    for i,d in ipairs(les_temperatures) do
		
		local v=otherdevices[d]                        
			voir_les_logs("--- --- --- device value "..d.." = "..(v or "nil"),debugging)
            if v~= nil then
			
                if string.match(v, ';')  then
                    v=v:match('^(.-);')
                    voir_les_logs("--- --- --- svalue "..d.." = "..(v or "nil").."°C moins le delta T : "..tonumber(v)-tonumber(deltaT).."°C",debugging)
                    local temp_int = tonumber(v)-tonumber(deltaT)
                else
                    voir_les_logs("--- --- --- svalue "..d.." = "..(v or "nil").."°C moins le delta T : "..tonumber(v)-tonumber(deltaT).."°C",debugging)
                end			
			
				if ((tonumber(v)-tonumber(deltaT)) > tonumber(temperature_exterieure)) and (tonumber(v) > tonumber(seuil_notification)) and  (tonumber(temperature_exterieure) >= (tonumber(seuil_notification)-3)) then
                    alarme = tonumber(alarme) + 1
                    voir_les_logs("--- --- --- Température corrigée : "..(tonumber(v)-tonumber(deltaT)).."°C supérieure à la Température exterieure : "..tonumber(temperature_exterieure).."°C, valeur de la variable alarme : ".. alarme,debugging)
                    table.insert(message, 'température '..d..' : '..v..'°C, supérieure à la température exterieure '.. temperature_exterieure ..'°C et au seuil fixé à '.. seuil_notification ..'°C <br>')
				end
                
			end                                            
	end

	if alarme >= tonumber(Nb_pieces)  then
        if notification == 0 then
        voir_les_logs("--- --- --- valeur de la variable alarme :".. alarme .." supérieure ou égale à la valeur de nbPieces :" ..Nb_pieces,debugging)
            if notif_mail == true then
                voir_les_logs("--- --- --- Nb d'alarme(s) : "..alarme,debugging)
                objet = 'Ouverture fenetres recommandee '..os.date("%H:%M")
                commandArray['SendEmail']= objet..'#'.. table.concat(message)  .. '#' .. EmailTo
                voir_les_logs("--- --- --- Objet:"..objet,debugging)
                voir_les_logs("--- --- --- Corps du message: "..table.concat(message),debugging)
                voir_les_logs("--- --- --- Destinataire: "..EmailTo,debugging)
            else
                voir_les_logs("--- --- --- Notification par mail désactivée",debugging)  
            end -- if notif_mail
            
            if notif_pushbullet == true and Pushbullet_token ~= nil then
                Pushbullet('Ouverture des fenetres recommandée','la température exterieure est inférieure à la temperature interieure')
                voir_les_logs("--- --- --- Notification pushbullet",debugging)        
            else
                voir_les_logs("--- --- --- Notification pushbullet désactivée",debugging)   
            end -- notif_pushbullet
            
            if notif_all == true then
                commandArray[#commandArray+1] = {['SendNotification'] = 'Ouverture des fenetres recommandée#la température exterieure est de '.. temperature_exterieure ..'°C'}
                voir_les_logs("--- --- --- Notification domoticz",debugging) 
            else
                voir_les_logs("--- --- --- Notification domoticz désactivée",debugging)  
            end --notif_all
                commandArray['Variable:'.. var_notif] = tostring(1) -- mise à jour de la variable utilisateur
                voir_les_logs("--- --- --- Mise à jour de la variable:".. var_notif .." à 1",debugging)
        end
	else
        voir_les_logs("--- --- --- valeur de la variable alarme :".. alarme .." inférieure ou égale à la valeur de nbPieces :" ..Nb_pieces,debugging)   
    end
    voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
if time.hour == ResetHeure and time.min == ResetMinute then
    commandArray['Variable:'.. var_notif] = tostring(0) -- mise à jour de la variable utilisateur 
    voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
    voir_les_logs("--- --- --- Mise à jour de la variable:".. var_notif .." à 0",debugging)
    voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end
return commandArray

En espérant que cela puisse vous être utile
Modifié en dernier par papoo le 09 juil. 2017, 15:44, modifié 1 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


balajol
Messages : 667
Enregistré le : 13 nov. 2015, 18:54
Localisation : 62

Re: Rafraîchissement nocturne

Message par balajol » 02 juil. 2017, 15:26

Bonjour Papoo,
Merci une nouvelle foi pour ce script abouti .
Bien loin de ce que je fait actuellement :-(

Bose journée.
Cdt
Bertrand
v4.9700 sur PC Windows7 (Elite book); DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, Divers SOMFY RTS etc..

cedric.vi13
Messages : 3
Enregistré le : 03 juil. 2017, 14:52

Re: Rafraîchissement nocturne

Message par cedric.vi13 » 03 juil. 2017, 15:55

Bonjour,

merci pour le script :P

Peux tu me donner des liens de références pour bien débuter en lua?
Je en trouve pas mon bonheur sur google (peut être je ne cherche pas avec les bon mots...)
Mais galère sont:
-je n'arrive pas a changer la valeur d'une variable utilisateur(c'est moi qui l'ai créé )
-pour débuter et débugé le code je n'ai pas d outil :cry:
-comment lancer un commande pour activer ma prise ?????

merci

papoo
Messages : 1907
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: Rafraîchissement nocturne

Message par papoo » 03 juil. 2017, 22:41

cedric.vi13 a écrit :
Peux tu me donner des liens de références pour bien débuter en lua? Je en trouve pas mon bonheur sur google (peut être je ne cherche pas avec les bon mots...)
Je n'ai jamais trouvé de tutoriel simple pour apprendre à programmer car ça n'existe pas. avant d'arriver à faire quelque chose, il faut débuter et pour débuter, il y a matiere à découvrir dans ce forum.
Y chercher un script simple que l'on pourrait adapter a ses besoins en essayant de comprendre chaque phase. Beaucoup lire et tester
cedric.vi13 a écrit :-pour débuter et débugger le code je n'ai pas d outil :cry:
moi non plus
j'utilise comme éditeur pour le lua (et pour le reste) notepad++ et pour débugger ... les logs de domoticz. Cela me dit exactement où mon script plante, j'essaie de le commenter le plus possible pour pouvoir interpréter les informations manipulées et comprendre pourquoi il ne fonctionne pas comme je le souhaite.
ensuite petit pas par petit pas je recherche la fonctionnalité qu'il me faut pour avancer d'un pas.
il est vrai que faire une recherche sur google en tapant les 3 lettres LUA ne renvoi pas grand chose même si la question après ces 3 lettres est pertinente. Pour ma part, je trouve plus facilement sur github. Je sélectionne le langage dans lequel je souhaite rechercher puis je formule ma question en anglais. Cela me donne des exemples de scripts et je lis encore beaucoup avant de trouver ce que je cherche (ou pas)
Pour le lua il existe dans le répertoire scripts/lua deux exemples de script : scrit_time_demo.lua et script_device_demo.lua
le premier est exécuté toutes les minutes le second dès qu'un des devices de domoticz change d'état.
enfin les principales commande en lua pour domoticz se trouve ici => http://www.domoticz.com/wiki/Events#Lua ... _Interface
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


papoo
Messages : 1907
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Rafraîchissement nocturne

Message par papoo » 09 juil. 2017, 15:49

nouvelle version 1.05 du script (mis à jour dans le premier post) avec ajout d'une variable deltaT pour ne notifier que lorsque (T° intérieure - deltaT) > T° extérieure histoire d'avoir une certaine efficacité et ne pas être notifié trop tôt
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

deennoo
Messages : 4006
Enregistré le : 25 janv. 2015, 02:00

Re: LUA : Rafraîchissement nocturne

Message par deennoo » 19 juil. 2017, 22:29

J'en ai un aussi il s'appel ouvre les fenêtres créé en juin lors de premier épisode de chaleur :

Il utilise :
Un dummy temp qui affiche un delta de température entre une moyenne extérieur de mes différentes sondes de jardin et la moyenne de temp intérieur de la maison.

Il ce base aussi sur la saison et une temp extérieur mini.

En fonction de la règle, une lumière intérieur (Gateway Xiaomi) et extérieur (playbulb garden : lampe solaire bluetooth d'extérieur à grosse batterie) s'illumine en bleu si il fait plus frais dehors que dedans, ou en orange si il fait plus chaud dehors que dedans en fonction des ouvertures de fenetres.

J'ai aussi un script qui gère mon store à bras en fonction de la position du soleil, de la météo, du delta t et d'un anemometre pour la sécurité du store.


Aaahhh si j'avais des volets motorisés...je m'eclaterais
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr

Cissou
Messages : 95
Enregistré le : 25 févr. 2015, 13:10

Re: LUA : Rafraîchissement nocturne

Message par Cissou » 20 juil. 2017, 19:32

Salut, super pratique et très bien fait



juste un truc, ca serait possible de rajouter la notif sms de free ?

je comprends le script mais vois pas ou mettre la bonne commande

merci

papoo
Messages : 1907
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : Rafraîchissement nocturne

Message par papoo » 20 juil. 2017, 21:48

je n'utilise pas freesms il faudrait tester et me dire si cela fonctionne stp

Code : Tout sélectionner

--[[
name : script_time_rafraichissement_nocturne.lua
auteur : papoo
MAJ : 20/07/2017
création : 24/06/2017

http://pon.fr/rafraichissement-nocturne/
http://easydomoticz.com/forum/viewtopic.php?f=17&t=4343#p38107
Principe : ce script vérifie toutes les dix minutes si la température extérieure (variable temp_ext) passe en dessous de la température  des pièces référencées dans le tableau les_températures. 
il compare chaque température au seuil fixé par la variable  seuil_notification (en °). Si une ou plusieurs températures sont supérieures à ce seuil, envoie d'une notification pour chacune d'elle.
une seule notification par jour, réinitialisée en cours d'après midi, la période la plus chaude de la journée.
Plusieurs type de notifications, par mail, par pushbullet, sms free ou via les notifications de domoticz.
Création de la variable utilisateur de réinitialisation automatique.
tableau des températures intérieures avec définition du nombre de pièces au dessus de la température extérieure avant envoi de notification (variable Nb_pieces)

]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 
local nom_script = 'Rafraîchissement nocturne'
local version = '1.06'
local debugging = true   	                                    -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local url = '127.0.0.1:8080'                                    -- adresse ip domoticz
local seuil_notification = 25 	        	                    -- seuil température intérieure au delà duquel les notifications d'alarme seront envoyées
local deltaT = 2                                                -- Delta T entre T° interieure et T° extérieure avant alarme 
local temp_ext = 'Temperature exterieure' 	                    -- nom de la sonde extérieure
local les_temperatures = {"Temperature Entree", "Temperature Salon","Couloir 1er étage", "Temperature Parents", "Temperature Bureau", "Temperature Cuisine", "Temperature Douche"}; -- Liste de vos sondes intérieures séparées par une virgule
local notif_mail = true                                         -- true si l'on  souhaite être notifié  par mail, sinon false.
local notif_pushbullet = false                                  -- true si l'on  souhaite être notifié  via pushbullet, sinon false.
local notif_all = true                                          -- true si l'on  souhaite être notifié  via le système de notification domoticz, sinon false.
local EmailTo = 'votre_adresse@gmail.com'                            -- adresse mail, séparées par ; si plusieurs (pour la notification par mail)
local var_notif = 'Notification_ouverture_fenetres'             -- nom de la variable de limite de notification
local Nb_pieces = 4                                             -- Définissez le nombre de pièces minimum dont la T° est supérieure à la température extérieure avant l'envoi des notifications
local ResetHeure = 14                                           -- Heure à laquelle vous souhaitez réinitialiser les notifications
local ResetMinute = 25                                          -- Minute à laquelle vous souhaitez réinitialiser les notifications
local Pushbullet_token = ''  				 -- Token de votre Pushbullet (pour la notification via Pushbullet)
local OS = "linux"                                              -- Définissez l'os sous lequel fonctionne ce script. "linux" ou "windows"
local sms_free_user = nil                                       -- nom d'utilisateur freemobile popur l'envoi d'alerte par SMS, sinon nil 
local sms_free_pass = nil                                       -- mot de passe freemobile popur l'envoi d'alerte par SMS, sinon nil

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local message = {}
local alarme = 0
local notification = '' 
commandArray = {}
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
--package.path = package.path..";/home/pi/domoticz/scripts/lua/fonctions/?.lua"
--json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
--curl = '/usr/bin/curl -m 5 -u domoticzUSER:domoticzPSWD '		 	-- ne pas oublier l'espace à la fin
--require('fonctions_perso')

function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	-- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--============================================================================================== 
function urlencode(str) -- encode la chaine str pour la passer dans une url 
   if (str) then
   str = string.gsub (str, "\n", "\r\n")
   str = string.gsub (str, "([^%w ])",
   function (c) return string.format ("%%%02X", string.byte(c)) end)
   str = string.gsub (str, " ", "+")
   end
   return str
end 
--==============================================================================================
function Pushbullet(pb_title,pb_body)  -- séparer titre et message par un ;
    if OS == "windows" then -- pour windows
        local pb_command = 'c:\\Programs\\Curl\\curl -u ' .. Pushbullet_token .. ': "https://api.pushbullet.com/v2/pushes" -d type=note -d title="' .. pb_title .. '" -d body="' .. pb_body ..'"'
    else --pour Linux
        local pb_command = '/usr/bin/curl -m 5 -u ' .. Pushbullet_token .. ': "https://api.pushbullet.com/v2/pushes" -d type=note -d title="' .. pb_title .. '" -d body="' .. pb_body ..'"'
    end
    exec_success = os.execute(pb_command)
end
-------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------
time=os.date("*t")
  
if ((time.min-1) % 10) == 0 then -- Déclenchement du script toutes les 10 minutes en commençant à HH:01 
--if time.min % 1 == 0 then -- pour test
    voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
	voir_les_logs("--- --- --- seuil de notification ".. seuil_notification .."°C",debugging)
    temperature_exterieure = string.match(otherdevices_svalues[temp_ext], "%d+%.*%d*")
    temperature_exterieure = temperature_exterieure 
    voir_les_logs("--- --- --- Temperature exterieure ".. temperature_exterieure .."°C",debugging)
    
    if var_notif ~= nil then -- le nom de la variable utilisateur a t'il été renseigné ?
        if(uservariables[var_notif] == nil) then -- Création de la variable  car elle n'existe pas
            voir_les_logs("--- --- --- La Variable " .. var_notif .." n'existe pas --- --- --- ",debugging)
            commandArray['OpenURL']=url..'/json.htm?type=command&param=saveuservariable&vname='..urlencode(var_notif)..'&vtype=2&vvalue=0'
            adresse = urlencode(var_notif)
            voir_les_logs("--- --- --- adresse " .. adresse .."  --- --- --- ",debugging);
            voir_les_logs("--- --- --- Création de la Variable " .. var_notif .." manquante --- --- --- ",debugging)
            print('script supendu')
        else
        voir_les_logs("--- --- --- La Variable " .. var_notif .." est à : ".. uservariables[var_notif],debugging)
        notification = uservariables[var_notif] 
            if tonumber(notification) > 0 then
            voir_les_logs("--- --- --- Une notification a déjà été envoyée aujourd\'hui",debugging)
            else 
            voir_les_logs("--- --- --- Aucune notification n\'a été envoyée aujourd\'hui",debugging)
            end
        end  
    else 
        voir_les_logs("--- --- --- Le nom de la variable utilisateur n'a pas été correctement défini",debugging)
    end        
            
    for i,d in ipairs(les_temperatures) do
		
		local v=otherdevices[d]                        
			voir_les_logs("--- --- --- device value "..d.." = "..(v or "nil"),debugging)
            if v~= nil then
			
                if string.match(v, ';')  then
                    v=v:match('^(.-);')
                    voir_les_logs("--- --- --- svalue "..d.." = "..(v or "nil").."°C moins le delta T : "..tonumber(v)-tonumber(deltaT).."°C",debugging)
                    local temp_int = tonumber(v)-tonumber(deltaT)
                else
                    voir_les_logs("--- --- --- svalue "..d.." = "..(v or "nil").."°C moins le delta T : "..tonumber(v)-tonumber(deltaT).."°C",debugging)
                end			
			
				if ((tonumber(v)-tonumber(deltaT)) > tonumber(temperature_exterieure)) and (tonumber(v) > tonumber(seuil_notification)) and  (tonumber(temperature_exterieure) >= (tonumber(seuil_notification)-3)) then
                    alarme = tonumber(alarme) + 1
                    voir_les_logs("--- --- --- Température corrigée : "..(tonumber(v)-tonumber(deltaT)).."°C supérieure à la Température exterieure : "..tonumber(temperature_exterieure).."°C, valeur de la variable alarme : ".. alarme,debugging)
                    table.insert(message, 'température '..d..' : '..v..'°C, supérieure à la température exterieure '.. temperature_exterieure ..'°C et au seuil fixé à '.. seuil_notification ..'°C <br>')
				end
                
			end                                            
	end

	if alarme >= tonumber(Nb_pieces)  then
        if notification == 0 then
        voir_les_logs("--- --- --- valeur de la variable alarme :".. alarme .." supérieure ou égale à la valeur de nbPieces :" ..Nb_pieces,debugging)
            if notif_mail == true then
                voir_les_logs("--- --- --- Nb d'alarme(s) : "..alarme,debugging)
                objet = 'Ouverture fenetres recommandee '..os.date("%H:%M")
                commandArray['SendEmail']= objet..'#'.. table.concat(message)  .. '#' .. EmailTo
                voir_les_logs("--- --- --- Objet:"..objet,debugging)
                voir_les_logs("--- --- --- Corps du message: "..table.concat(message),debugging)
                voir_les_logs("--- --- --- Destinataire: "..EmailTo,debugging)
            else
                voir_les_logs("--- --- --- Notification par mail désactivée",debugging)  
            end -- if notif_mail
            
            if notif_pushbullet == true and Pushbullet_token ~= nil then
                Pushbullet('Ouverture des fenetres recommandée','la température exterieure est inférieure à la temperature interieure')
                voir_les_logs("--- --- --- Notification pushbullet",debugging)        
            else
                voir_les_logs("--- --- --- Notification pushbullet désactivée",debugging)   
            end -- notif_pushbullet
            
            if sms_free_user ~= nil and sms_free_pass ~=nil then
                voir_les_logs("--- --- --- Notification SMS free",debugging)            
                commandArray['OpenURL']='https://smsapi.free-mobile.fr/sendmsg?user='.. sms_free_user ..'&pass='.. sms_free_pass ..'&msg=Ouverture des fenetres recommandée la temperature interieure est de '.. temperature_exterieure ..'°C'
            end20/07/2017      
            
            if notif_all == true then
                commandArray[#commandArray+1] = {['SendNotification'] = 'Ouverture des fenetres recommandée#la température exterieure est de '.. temperature_exterieure ..'°C'}
                voir_les_logs("--- --- --- Notification domoticz",debugging) 
            else
                voir_les_logs("--- --- --- Notification domoticz désactivée",debugging)  
            end --notif_all
                commandArray['Variable:'.. var_notif] = tostring(1) -- mise à jour de la variable utilisateur
                voir_les_logs("--- --- --- Mise à jour de la variable:".. var_notif .." à 1",debugging)
        end
	else
        voir_les_logs("--- --- --- valeur de la variable alarme :".. alarme .." inférieure ou égale à la valeur de nbPieces :" ..Nb_pieces..", pas de notification",debugging)   
    end
    voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end -- if time
if time.hour == ResetHeure and time.min == ResetMinute then
    commandArray['Variable:'.. var_notif] = tostring(0) -- mise à jour de la variable utilisateur 
    voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
    voir_les_logs("--- --- --- Mise à jour de la variable:".. var_notif .." à 0",debugging)
    voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
end
return commandArray
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

romain1206
Messages : 24
Enregistré le : 30 janv. 2019, 21:30

Re: LUA : Rafraîchissement nocturne

Message par romain1206 » 12 juil. 2019, 00:22

bonjour,

ce script ne fonctionne pas chez moi

Code : Tout sélectionner

 2019-07-12 00:21:35.396 Status: LUA: <font color='#f3031d'>=========== Rafraîchissement nocturne (v1.05) ===========</font>
2019-07-12 00:21:35.396 Status: LUA: <font color='#f3031d'>--- --- --- seuil de notification 25°C</font>
2019-07-12 00:21:35.396 Status: LUA: <font color='#f3031d'>--- --- --- Temperature exterieure 21.4°C</font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- La Variable Notification_ouverture_fenetres n'existe pas --- --- --- </font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- adresse Notification%5Fouverture%5Ffenetres --- --- --- </font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- Création de la Variable Notification_ouverture_fenetres manquante --- --- --- </font>
2019-07-12 00:21:35.397 Status: LUA: script supendu
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- device value temperature Salon = 25.0;43;1</font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- svalue temperature Salon = 25.0°C moins le delta T : 23°C</font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>--- --- --- valeur de la variable alarme :0 inférieure ou égale à la valeur de nbPieces :1</font>
2019-07-12 00:21:35.397 Status: LUA: <font color='#f3031d'>========= Fin Rafraîchissement nocturne (v1.05) =========</font>
2019-07-12 00:21:35.398 Status: EventSystem: Fetching URL domoticz.xxxxxx.xx/json.htm?type=command&param=saveuservariable&vname=Notification%5Fouverture%5Ffenetres&vtype=2&vvalue=0 after 0.2 seconds...
2019-07-12 00:21:35.399 Status: EventSystem: Script event triggered: script_time_rafraichissement_nocturne
2019-07-12 00:21:40.592 Error: Error opening url: domoticz.xxxx.xx/json.htm?type=command&param=saveuservariable&vname=Notification%5Fouverture%5Ffenetres&vtype=2&vvalue=0 

vil1driver
Messages : 5189
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: LUA : Rafraîchissement nocturne

Message par vil1driver » 12 juil. 2019, 10:59

Salut,

Remet url comme dans l'exemple et désactive le besoin de mot de pass pour le réseau local

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre