Page 4 sur 5

Re: LUA : Rafraîchissement nocturne

Publié : 05 janv. 2020, 18:01
par Stf4
denis_brasseur a écrit : 05 janv. 2020, 10:21
denis_brasseur a écrit : 04 janv. 2020, 13:41 Pour poster ton code, utilise la balise code, il s'agit du bouton </>

Code : Tout sélectionner

local les_temperatures = {
'tempsdb',
'tempmaison',
'temptony',
} -- Liste de vos sondes intérieures séparées par une virgule
La virgule après 'temptony' est inutile, et même génante.

Et je retrouve ceci en fin du code (d'ou l'utilité de la balise code) :
domoticz beta/Ra
Sinon, pas d'erreur de syntaxe par rapport au code d'origine
Supprime cette virgule, teste, et republie ton code entre les balises code
merci @Papoo & @denis_brasseur en supprimant la virgule et en supprimant la ligne
domoticz beta/Ra
ca semble fonctionner ! :D :D :D :D :D Mais je n'ai pas d'alerte par telegram comment faire pour l'activer?
04.JPG
04.JPG (47.59 Kio) Consulté 6032 fois

Code : Tout sélectionner


--[[
rafraichissementNocturne.lua
author/auteur = papoo
update/mise à jour = 02/01/2020
creation = 24/06/2017
github https://github.com/domoticz_scripts/dzVents/scripts/rafraichissementNocturne.lua
blog https://pon.fr/
forum http://easydomoticz.com/forum/viewtopic.php?f=17&t=4343#p38107
ce script utilise la fonction de notification universelle https://pon.fr/dzvents-fonction-de-notification-universelle/
--]]

local scriptName        		= 'Rafraichissement nocturne'
local scriptVersion     		= '2.0'
local seuil_notification 		= 25 	        	                    -- seuil température intérieure au delà duquel les notifications seront envoyées
local deltaT 					= 2                                                -- Delta T entre T° interieure et T° extérieure avant notification 
local frequency_notifications 	= 3600
local quiet_hours 				= "23:00-07:15"
local subSystems				= "TELEGRAM" --NSS_GOOGLE_CLOUD_MESSAGING, NSS_HTTP, NSS_KODI, NSS_LOGITECH_MEDIASERVER, NSS_NMA,NSS_PROWL, NSS_PUSHALOT, NSS_PUSHBULLET, NSS_PUSHOVER, NSS_PUSHSAFER, NSS_TELEGRAM
local temp_ext 					= 'TempExterieur' 	                    -- nom de la sonde extérieure
local les_temperatures 			= {
								'tempsdb',
								'tempmaison',
								'temptony'
		} -- Liste de vos sondes intérieures séparées par une virgule
local subject               	= "\xE2\x9A\xA0 /!\\ Ouverture des fenetres recommandee /!\\ \xE2\x9A\xA0" 

return {
    active = true,
    on = { timer =   {'every 1 minutes'}},
	--on = { timer =   {'every minute'}},
logging =   {    level    =   domoticz.LOG_DEBUG,
                    -- level    =   domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                    -- level    =   domoticz.LOG_ERROR,            -- Only one level can be active; comment others
                    -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
marker = scriptName..' v'..scriptVersion },
				
	

    execute = function(dz)
		local round = dz.utils.round
		--local _ = require('lodash')
		local function logWrite(str,level)             -- Support function for shorthand debug log statements
			dz.log(tostring(str),level or dz.LOG_DEBUG)
		end
		
		local function split(s, delimiter)
			if s ~= nil then
				result = {};
				for match in (s..delimiter):gmatch("(.-)"..delimiter) do
					table.insert(result, match);
				end
			else
				result = {""};
			end
			return result;
		end


		local function notificationTable(str)
		--NSS_GOOGLE_CLOUD_MESSAGING, NSS_HTTP, NSS_KODI, NSS_LOGITECH_MEDIASERVER, NSS_NMA,NSS_PROWL, NSS_PUSHALOT, NSS_PUSHBULLET, NSS_PUSHOVER, NSS_PUSHSAFER, NSS_TELEGRAM
			if (str) then
			str = string.gsub (str,"GCM", dz.NSS_GOOGLE_CLOUD_MESSAGING)
			str = string.gsub (str,"GOOGLE_CLOUD_MESSAGING", dz.NSS_GOOGLE_CLOUD_MESSAGING)
			str = string.gsub (str,"HTTP", dz.NSS_HTTP)
			str = string.gsub (str,"LMS", dz.NSS_LOGITECH_MEDIASERVER)
			str = string.gsub (str,"LOGITECH_MEDIASERVER", dz.NSS_LOGITECH_MEDIASERVER)
			str = string.gsub (str,"NMA", dz.NSS_NMA)
			str = string.gsub (str,"PROWL", dz.NSS_PROWL)
			str = string.gsub (str,"PUSHALOT", dz.NSS_PUSHALOT)
			str = string.gsub (str,"PUSHOVER", dz.NSS_PUSHOVER)
			str = string.gsub (str,"PUSHSAFER", dz.NSS_PUSHSAFER)
			str = string.gsub (str,"PUSHBULLET", dz.NSS_PUSHBULLET)
			str = string.gsub (str,"TELEGRAM", dz.NSS_TELEGRAM)
			end
			return (split(str,','))
		end
		
		local tempExt = round(dz.devices(temp_ext).temperature,2)
			  logWrite("le device  : "..tostring(dz.devices(temp_ext).name).." indique une température de "..tostring(tempExt).."°C")		
		local i = 0
		local tempsInt = 0
        for _, name in ipairs(les_temperatures) do
			i = i + 1
			local dev = dz.devices(name)
            if dev.temperature then
				logWrite("le device  : "..tostring(dev.name).." indique une température de "..tostring(round(dev.temperature,2)).."°C")
				tempsInt = tempsInt + dev.temperature
			end
        end
		logWrite("nombre de sondes intérieures parcourues est de "..tostring(i))
		tempsInt = round(tempsInt/i)
		logWrite("la moyenne ambiante intérieure est de  "..tostring(tempsInt).."°C")
		if (tempsInt + deltaT) > tempExt and seuil_notification < tempExt then 
			logWrite("la moyenne ambiante intérieure moins le deltat T est de  "..tostring(tempsInt - deltaT).."°C")
			dz.helpers.managedNotify(dz, subject, "Ouverture des fenêtres recommandée, la température moyenne ambiante intérieure est supérieure de "..deltaT.."°C à la temperature extérieure" , notificationTable(subSystems), frequency_notifications , quiet_hours)
		end
	        -- dz.devices(les_temperatures).forEach(
				-- function(device)
					-- logWrite("le device  : "..tostring(device.name).." a une température de "..tostring(device.temperature))


				-- end
			-- )
	-- local temp = dz.devices().filter(function(device)
		-- return _.includes(les_temperatures, device.name)
	-- end)
-- print_table(temp)
    end -- execute function
}


Re: LUA : Rafraîchissement nocturne

Publié : 05 janv. 2020, 18:06
par Stf4
papoo a écrit : 05 janv. 2020, 10:29 les scripts commençant par script_time ou script_device ne sont pas des scripts dzvents, ils ne doivent pas être placer dans

Code : Tout sélectionner

/home/pi/domoticz/scripts/dzVents/scripts/
mais dans

Code : Tout sélectionner

/home/pi/domoticz/scripts/lua/
Merci @papoo pour cette précision , je vais les déplacer

Re: LUA : Rafraîchissement nocturne

Publié : 19 janv. 2020, 08:30
par Stf4
Je m'étonne de ne pas avoir de retour par telegram :

Code : Tout sélectionner

2020-01-19 08:29:00.523 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Start external script: rafraichissementNocturne.lua:, trigger: every 1 minutes
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : TempExterieur indique une température de 3.2°C
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : tempsdb indique une température de 22.5°C
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : tempmaison indique une température de 20.1°C
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : temptony indique une température de 19.5°C
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: nombre de sondes intérieures parcourues est de 3
2020-01-19 08:29:00.523 Status: dzVents: Debug: Rafraichissement nocturne v2.0: la moyenne ambiante intérieure est de 21.0°C
2020-01-19 08:29:00.525 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Finished rafraichissementNocturne.lua
Y a t'il une manipulation particulière a faire ?

Re: LUA : Rafraîchissement nocturne

Publié : 19 janv. 2020, 09:32
par papoo
C’est un script pour l’été, pour l’essayer en hiver il te faut modifier temporairement la variable suivante

Code : Tout sélectionner

 local seuil_notification = 25
en dessous de la température extérieure de plus de 2 degrés

Re: LUA : Rafraîchissement nocturne

Publié : 19 janv. 2020, 17:22
par Stf4
merci @Papoo ca fonctionne vivement cet été pour le tester :D

Re: LUA : Rafraîchissement nocturne

Publié : 20 juil. 2020, 18:12
par dranreb38
Bien utile en ce moment :!: , j'utilise celui en dzvent tout est OK :D

Re: LUA : Rafraîchissement nocturne

Publié : 16 juin 2021, 22:54
par EMqA
papoo a écrit : 03 janv. 2020, 23:36 je viens de réaliser une version plus simple de ce script en DZvents si tu souhaite la tester
J'essaie d'utiliser la version DZvents de ce script, saisie directement dans l'éditeur intégré a Domoticz. J'ai par ailleurs implémenté la fonction de notification universelle nécessaire.
Le script semble fonctionner en majeur partie (calcul de la moyenne des températures intérieures, comparaison avec la Température extérieure mais je butte sur l'envoi de notification.
Exemple de ce soir : une fois les conditions réunies, le script indique dans les logs qu'il a envoyé la notification hier soir (ce qui est vrai) mais ne m'envoie pas de notification pour ce jour.

Code : Tout sélectionner

2021-06-16 22:40:00.560 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Start internal script: RafraichissementNocturne:, trigger: "every 10 minutes"
2021-06-16 22:40:00.600 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for $Température Aqara_01_T.ext: Temperature device adapter
2021-06-16 22:40:00.601 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : $Température Aqara_01_T.ext indique une température de 24.01°C
2021-06-16 22:40:00.603 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for $Température Aqara_03_T.salon: Temperature device adapter
2021-06-16 22:40:00.603 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : $Température Aqara_03_T.salon indique une température de 24.68°C
2021-06-16 22:40:00.605 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for $Température Aqara_04_T.ch1: Temperature device adapter
2021-06-16 22:40:00.605 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : $Température Aqara_04_T.ch1 indique une température de 24.87°C
2021-06-16 22:40:00.607 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for $Température Aqara_02_T.sdb: Temperature device adapter
2021-06-16 22:40:00.607 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : $Température Aqara_02_T.sdb indique une température de 24.72°C
2021-06-16 22:40:00.607 Status: dzVents: Debug: Rafraichissement nocturne v2.0: nombre de sondes intérieures parcourues est de 3
2021-06-16 22:40:00.608 Status: dzVents: Debug: Rafraichissement nocturne v2.0: la moyenne ambiante intérieure est de 25°C
2021-06-16 22:40:00.608 Status: dzVents: Debug: Rafraichissement nocturne v2.0: la moyenne ambiante intérieure moins le deltat T est de 23°C
2021-06-16 22:40:00.608 Status: dzVents: Info: Rafraichissement nocturne v2.0: le message 'Ouverture des fenêtres recommandée, la température moyenne ambiante intérieure est supérieure de 2°C à la temperature extérieure' a été envoyé Mardi, 15 Juin 2021 (23:10)
2021-06-16 22:40:00.609 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Finished RafraichissementNocturne
Je vois que dans la version LUA présente dans le premier message de ce sujet, il est question de réinitialiser l'envoi de notifications une fois par jour.

Code : Tout sélectionner

local ResetHeure = 14                                           -- Heure à laquelle vous souhaitez réinitialiser les notifications
local ResetMinute = 25                                           -- Minute à laquelle vous souhaitez réinitialiser les notifications
Il semble que cela fasse défaut dans la version DZvent. Est-ce possible d''arriver a un fonctionnement approchant ?

Re: [LUA] Rafraîchissement nocturne

Publié : 18 juin 2021, 00:01
par kisskool
Je seche aussi sur les notifications, j'aimerais être notifié par mail mais je n'ai pas trouvé comment faire fonctionner les notif universelle, je ne sais même pas si c'est possible par mail

Re: [LUA] Rafraîchissement nocturne

Publié : 18 juin 2021, 06:05
par Chrominator
La notif universelle ne fonctionne pas avec les mails, uniquement avec les sous-systèmes de notifications qui sont décrits sur cette page via ces constantes.

La notif universelle est un script à placer tel quel dans l'un des répertoires de dzVents.

Source originale ici : https://www.domoticz.com/forum/viewtopi ... 42#p204958

Pour le mettre en place, il faut créer un script domoticz/scripts/dzVents/scripts/global_data.lua s'il n'existe pas déjà, avec comme contenu le script de waaren que je reproduis ici :

Code : Tout sélectionner

-- global_data.lua 
 
return {
        data =  {
                    managedNotifications                    = { initial = {}},
                },
	helpers =   {
                    managedNotify = function (dz, subject,message, messageType, muteTimeMin,quietHours) 
                        local now = os.time(os.date('*t'))                  -- seconds since 1/1/1970 00:00:01
                        muteTimeMin = muteTimeMin or 1
                        if subject == nil or string.lower(subject) == "delete"  then 
                            dz.globalData.managedNotifications[message] = nil 
                            dz.log("message " .. message .. "  on request deleted",dz.LOG_FORCE)
                            return 3
                        elseif string.lower(subject) ==  "deleteall" then
                            dz.globalData.managedNotifications = nil 
                            dz.log("All messages on request deleted",dz.LOG_FORCE)
                            return 4
                        elseif ( not dz.globalData.managedNotifications[message] ) or 
                              (( dz.globalData.managedNotifications[message] + muteTimeMin * 60 ) <= now ) then
                                if quietHours and dz.time.matchesRule("at " .. quietHours) then
                                    dz.log("Quiet hours: no notification.")
                                    return 1
                                else
                                    dz.notify(subject, message,nil,nil,nil,messageType)  
                                    dz.globalData.managedNotifications[message] = now
                                    local cleanupPeriod = 30 * 24 * 3600                                -- 30 days
                                    for key,timeStamp in pairs(dz.globalData.managedNotifications) do
                                        if ( dz.globalData.managedNotifications[key] + cleanupPeriod ) < now then 
                                            dz.globalData.managedNotifications[key] = nil
                                            dz.log("(Old) message " .. key .. "  deleted",dz.LOG_FORCE)
                                        end
                                    end
                                    return 0
                                end     
                        else
                            -- No action required yet.  
                            dz.log("Last '" .. message .. "' message was send at " .. 
                                    os.date("%A, %d %B %Y (%H:%M)",dz.globalData.managedNotifications[message]) ,dz.LOG_FORCE)
                            return 2        
                        end
                    end,
                },
        }
EMqA a écrit : 16 juin 2021, 22:54 Le script semble fonctionner en majeur partie (calcul de la moyenne des températures intérieures, comparaison avec la Température extérieure mais je butte sur l'envoi de notification.
La notification en fonctionne pas correctement dans le cas de l'exemple 21, je suis en train de tester.
Peut-être une bonne nouvelle tout à l'heure.

Re: [LUA] Rafraîchissement nocturne

Publié : 18 juin 2021, 09:20
par kisskool
Merci Chrominator
Donc j'ai parametré TELEGRAM pour envoyer les notifications.
Pour mettre en place le script de notif universel je peux aussi passer par Domoticz / evenement ?

Le script à l'air fonctionner mais j'ai encore des erreurs mais j'nai aucune idée du problème migne 94...

Code : Tout sélectionner

2021-06-18 09:15:01.269 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Start internal script: Rafraichissement nocturneV2:, trigger: "every minute"
2021-06-18 09:15:01.269 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for Netatmo Extérieur: Temperature+humidity device adapter
2021-06-18 09:15:01.269 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : Netatmo Extérieur indique une température de 22.0°C
2021-06-18 09:15:01.270 Status: dzVents: Debug: Rafraichissement nocturne v2.0: Processing device-adapter for Netatmo Intérieur: Temperature+humidity+barometer device adapter
2021-06-18 09:15:01.270 Status: dzVents: Debug: Rafraichissement nocturne v2.0: le device : Netatmo Intérieur indique une température de 24.5°C
2021-06-18 09:15:01.270 Status: dzVents: Debug: Rafraichissement nocturne v2.0: nombre de sondes intérieures parcourues est de 1
2021-06-18 09:15:01.270 Status: dzVents: Debug: Rafraichissement nocturne v2.0: la moyenne ambiante intérieure est de 25°C
2021-06-18 09:15:01.270 Status: dzVents: Debug: Rafraichissement nocturne v2.0: la moyenne ambiante intérieure moins le deltat T est de 23°C
2021-06-18 09:15:01.270 Status: dzVents: Info: Rafraichissement nocturne v2.0: ------ Finished Rafraichissement nocturneV2
2021-06-18 09:15:01.270 Error: dzVents: Error: (3.1.7) Rafraichissement nocturne v2.0: An error occurred when calling event handler Rafraichissement nocturneV2
2021-06-18 09:15:01.270 Error: dzVents: Error: (3.1.7) Rafraichissement nocturne v2.0: ...zVents/generated_scripts/Rafraichissement nocturneV2.lua:94: attempt to index a nil value (field 'helpers')