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

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.
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

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

Message 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é 1443 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
}
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Répondre