Page 1 sur 1

[DzVents] Rappel ordre DI-O / 433 MHz RFLink RFXCOM

Publié : 12 déc. 2020, 12:54
par Chrominator
De temps à autres, l'ordre On ou Off d'un interrupteur quelconque en 433 MHz est exécuté dans Domoticz, mais en réalité l'actionneur correspondant n'a pas bougé.
Comme il n'y a pas de retour d'état, Domoticz "ne s'en rend pas compte" et ne ré-essaie pas d'envoyer l'ordre.

Pour éviter ça, un petit script de rappel ci-dessous va considérer l'état dans lequel Domoticz place les interrupteurs, et envoyer les ordres correspondants à l'actionneur.

C'est particulièrement utile pour les actionneurs en relation avec des consommations (eau, électricité ou autre).
Quand l'actionneur laisse s'échapper inutilement la ressource, c'est la facture qui s’alourdit.

Ça ne surcharge pas les logs; si l'actionneur a déjà bougé, on ne trouve pas trace du nouvel ordre.
Par contre, si l'actionneur n'était pas dans l'état attendu, alors le script le fait changer d'état en conformité avec l'état dans lequel il est dans Domoticz.

Exemple hier soir, ma guirlande électrique extérieure aurait dû s'éteindre grâce au timer, mais en fait c'est le script un peu plus tard qui a rappelé l'ordre et éteint la guirlande :

Screenshot_2020-12-12 Domoticz.png
Screenshot_2020-12-12 Domoticz.png (9.95 Kio) Consulté 1444 fois

Le script est simple, écrit pour DzVents.
A placer dans /home/pi/domoticz/scripts/dzVents/scripts
Vous devrez spécifier les noms des interrupteurs que vous voulez contrôler avec ce script (tableau actuators) et adapter la fréquence d'appel du script à ce que vous souhaitez faire (timer).

Le script :

Code : Tout sélectionner

--[[

	Rappel de l'ordre de mise en route aux actionneurs 
		(DI-O, pas de retour d'état)

    2020-11-26  : Initial version
    Author      : chrominator@free.fr
	
	Principe :  

--]]

local actuators 	= {	"VMC-OnOff",
						"VMC-GV",
						"Circulateur",
						"Chargeur tablette",
						"Guirlande"
					}

return
{
    active = true,
    on =
    {
		timer = {
				"every 15 minutes",
				},
    },

    logging = {
        -- level = domoticz.LOG_INFO,                  		-- Seulement un niveau peut être actif; commenter les autres
        -- level = domoticz.LOG_ERROR,
        level = domoticz.LOG_DEBUG,
        -- level = domoticz.LOG_MODULE_EXEC_INFO,
		marker = string.match(debug.getinfo(1, "S").short_src, "([^\\/]-)$")
    },
    
    execute = function(dz, switch)
	
		local log_info = {}

		for i, j in pairs(actuators) do
			local actuator = dz.devices(j)
			if actuator.state == 'On' then
				actuator.switchOn()
			else
				actuator.switchOff()
			end
			log_info[i] = actuator.name .. " : " .. actuator.state
			-- dz.log("Actuator " .. actuator.name .. " has been refreshed on state " .. actuator.state .. ".", dz.LOG_DEBUG)
		end
		dz.log("The following actuators have been refreshed:", dz.LOG_DEBUG)
		for i, j in pairs(log_info) do
			dz.log(j, dz.LOG_DEBUG)
		end
    end
}