planification volet somfy rts

Posez ici vos questions d'utilisation, de configuration de DomoticZ, de bugs, de conseils sur le logiciel lui même dans son utilisation et son paramétrage.
Des forums spécifiques sont ouverts ci-dessous pour regrouper les différents sujets.
Répondre
taad
Messages : 61
Inscription : 17 juil. 2017, 21:41

planification volet somfy rts

Message par taad »

Bonjour a tous,

je viens d installer domoticz sur mon synology. j ai installé le rfxcom puis connecté tout mes volets.

Jusqu ici tout va bien et tout fonctionne !

je voudrais maintenant programmer les horaires d'ouverture et de fermeture des volets et je me pose des questions :
* Doit on programmer les volets un par un (grace a la fonction planning) ou peut on creer des groupes de volet ou copier/coller les planning d un volet sur un autre ?
* Est il possible de creer des scenarios pour les volets. j aimerais avoir un scenario par defaut et un scenario en cas d absence. est ce possible? si oui, comment fait on cela ? comment choisit on d activer le scenario d absence ?

D'avance merci pour votre aide
digdogger
Messages : 213
Inscription : 16 juil. 2017, 09:21

Re: planification volet somfy rts

Message par digdogger »

Salut,
perso j'ai fait simple, j'utilise un scénario qui ferme tous mes volets à 19h55. Dans les dispositifs à commander, tu ajoutes les volets que tu veux fermer ou ouvrir.
J'ai réglé le planning à 19h55 tous les jours mais tu peux aussi déclencher le scénario par un script si tu veux ou par un événement extérieur..
Raspberry Pi 3 + Raspbian Jessie Lite + Domoticz V4.9700 - RFlink USB V48 433.42MHz - Volets Somfy RTS - MySensors USB V2.1.1 - IDE Arduino 1.8.8
taad
Messages : 61
Inscription : 17 juil. 2017, 21:41

Re: planification volet somfy rts

Message par taad »

Salut,

Comment fais tu pour faire un scénario qui ferme tes volets à une heure précise ? Dans le scénario peux tu gerer plusieurs conditions ? Plusieurs heures d'ouverture et de fermeture ?

Merci pour ton aide
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: planification volet somfy rts

Message par balajol »

Bonjour,
Tout est possible,personnellement gestion horaires et surchauffe (fermeture des volets si la temp. Est supérieure à un seuil etc...)
Pour une commande générale avec du somfy, tu peux également associer un volet virtuel à tous les volets ( comme une télécommande ) sans avoir besoin de le gérer par DOMOTICZ
Cdt
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;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, SOMFY RTS,Sonoff ..
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: planification volet somfy rts

Message par Chrominator »

Pour la fermeture des volets le soir, j'ai fait simple ; planning sur chaque volet (ou presque) qui ferme autour du coucher du soleil, sauf dans les pièces de vie (j'aime pas ne pas voir dehors même s'il fait nuit).
Capture.PNG
Capture.PNG (159.72 Kio) Consulté 9080 fois
Ensuite vers 23h30, un groupe défini dans un scenario ferme les volets des pièces de vie.

C'est pour l'ouverture que c'est plus corsé, faut gérer les heures d'ouverture en fonction des jours ouverts, des week-end, des jours fériés, des vacances des gosses, des congés... Bref pour ça merci à LUA. :geek:
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
taad
Messages : 61
Inscription : 17 juil. 2017, 21:41

Re: planification volet somfy rts

Message par taad »

Merci pour ton retour Chrominator.

Peux tu partager ton script LUA pour que je puisse m'en inspirer ?
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: planification volet somfy rts

Message par Chrominator »

Le voilà.
C'est un peu perso, pas certain que les commentaires que j'ai mis dans le source à l'époque soient suffisants pour que tu comprennes l'ensemble.
Mais là j'ai pas trop le temps de documenter plus que ça.
Tu trouveras sur le forum des scripts auxiliaires dont je me sers, notamment celui qui détermine si on est un jour férié.

Je te file aussi le module qui contient la fonction voir_les_logs que j'ai piqué ici.
Faudra simplifier, y un système dedans qui me permet de tracer un script nommé ou plusieurs à la fois.
startmon et stopmon n'apportent pas grand chose, ça me sert à logger le temps d'exécution de mes scripts quand je me décide à optimiser le code de certaines parties, tu peux virer ces appels.

Code : Tout sélectionner

--[[      	Script opening all blinds in the morning
			It closes the blinds on the evening when nobody is at home
	
	~/domoticz/scripts/lua/script_time_open_blind.lua
	
	-- Autors  ----------------------------------------------------------------
	V1.0 - Chrominator 
	
	-- Require  --------------------------------------------------------------
	
	Devices : 	Name of a scene of all blinds to close
	Congés 	:	Virtual switch, "On" status for a day at home
	jf		:	Variable "false" or "true" for bank hollidays
	Absence	:	Switch attached to Netatmo thermostat
	
	-- Versions -------------------------------------------------------------
	2016-12-28 : Initial version
	
]]--
-- chargement des modules
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
require "perfmon"
require "getscenestatus"

startmon()
startdebug()

-- Variables to customize ------------------------------------------------

-- Poste 1 jour travaillé
-- Poste 2 jour d'absence
local Time_To_Open_Blind = {'06:55','09:55'}
local LastTime	= {'06:57','09:57'}

local jf 		= uservariables['jf']
local DayOff 	= otherdevices['Congés']
local DayName 	= os.date("%w")				-- Sunday = 0
local OutOfHome	= otherdevices['Absence']	-- Absence button on Netatmo thermostat	
local CurrentTime = os.date('%H:%M')
-- Below , edit at your own risk ------------------------------------------

commandArray = {}

--[[ 
	If out of home (Absence='On') the blinds shoud be opened, later than usual, whatever are the other conditions.
	No opening if day off spent at home ==> congés = On 
	Or Bank hollidays ==> jf = true
	Or during the week-end 
	Opening early in the morning in other cases
]]--

voir_les_logs ('=========== OUVERTURE DES VOLETS LE MATIN  ==============')
voir_les_logs ("Horaires d'ouverture des volets")
voir_les_logs ('Heure jour travaillé : '..Time_To_Open_Blind[1])
voir_les_logs ("Heure jour d'absence : "..Time_To_Open_Blind[2])
voir_les_logs ("Jour férié : "..jf)
voir_les_logs ('Jour de congé : '..DayOff)
voir_les_logs ('Heure actuelle : '..CurrentTime)
voir_les_logs ('Heure butoir travaillé :'..LastTime[1])
voir_les_logs ("Heure butoir d'absence :"..LastTime[2])
voir_les_logs ('N° du jour : '..DayName)
voir_les_logs ('Etat des volets matin : '..getscenestatus('1'))


if (OutOfHome == 'On') then
	voir_les_logs ("Jour d'absence hors de la maison, on ouvre les volets face rue à "..Time_To_Open_Blind[2])
	voir_les_logs ('On laisse les volets arrières fermés')
	if (CurrentTime >= Time_To_Open_Blind[2] and CurrentTime <= LastTime[2]) then
		voir_les_logs ("Il est l'heure convenue d'ouverture des volets")
		if getscenestatus('2') == 'On' then
			commandArray['Group:Tous les volets'] = 'Off'
			commandArray['Group:Volets Matin'] = 'On'
			end
	end
else
	if (jf == 'false' and DayName ~= '6' and DayName ~= '0' and DayOff == 'Off') then 
	voir_les_logs ("Jour travaillé, on ouvre les volets à "..Time_To_Open_Blind[1])
		if (CurrentTime >= Time_To_Open_Blind[1] and CurrentTime <= LastTime[1]) then
			voir_les_logs ("Il est l'heure convenue d'ouverture des volets")
--			if getscenestatus('1') == 'On' then 
				voir_les_logs ("Ouverture des volets")
				commandArray['Group:Volets Matin'] = 'Off'
--			end
		end
	else
		voir_les_logs ("Jour de congé à la maison, ouverture des volets gérée manuellement")
	end
end

if (timeofday['Nighttime'] and OutOfHome == 'On') then
--	if (otherdevices['Scene:Tous les volets'] == '0') then
		voir_les_logs ('La nuit est tombée et nous sommes absents, fermeture de tous volets')
		commandArray['Group:Tous les volets'] = 'On'
--	end
end
voir_les_logs ('=============  FIN GESTION DES VOLETS  ==================')

stopmon(script_name())

return commandArray
Le module perfmon qui contient les fonctions appelées dans tous mes scripts.

Code : Tout sélectionner

--[[      	
	~/domoticz/scripts/lua/perfmon.lua
	
	-- Autors  ----------------------------------------------------------------
	V1.0 - Chrominator 
	
	-- Require  --------------------------------------------------------------
	/!\  require Domoticz v3.5776 and after /!\
	
]]--

perf_monitor = 'PERF-Audit'		-- Name of the switch that enables performance monitoring in Domoticz

function script_name()
   local str = debug.getinfo(2, "S").source:sub(2)
   return str
end

function startmon()
    if (otherdevices[perf_monitor]=='On') then 
		startcpuclock = os.clock()
	end
end

function stopmon(script)
	if (otherdevices[perf_monitor]=='On') then 
		stopcpuclock = os.clock()
		print('PERFMON;'..script..": "..string.format("elapsed time; %.6f\n", stopcpuclock - startcpuclock))
	end
end

function startdebug()
--
--	Si l'inter de debug est On, on force la trace de tous les programmes
--
	if(otherdevices["ModeDebug"]=='On') then   -- Si le mode debug est activé dans Domoticz (inter debug sur on)
		DEBUG = true
	else
		local str = debug.getinfo(2, "S").source:sub(2)
		local pos_snom = string.find(str, '/lua/', -1*string.len(str))
		local snom = string.sub (str, pos_snom+5)
		if uservariables['script_debug'] == snom then
			DEBUG = true
		else
			DEBUG = false
		end
	end
end

function voir_les_logs (s) -- nécessite la variable DEBUG
    if DEBUG then
      if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
      else
        print ("<font color='#f3031d'>aucune valeur affichable</font>")
      end
    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
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: planification volet somfy rts

Message par Chrominator »

Mince, il va te falloir aussi celui-là.
vil1driver m'avait indiqué qu'une fonction native existait pour ça après que je l'ai écrite. Comme la mienne marchait, j'ai pas changé le source...

Code : Tout sélectionner

--[[      	Script décrivant la fonction permettant 
			de connaitre l'état d'un groupe ou d'une scene.
	
	~/domoticz/scripts/lua/getscenestatus.lua
	
	-- Autors  ----------------------------------------------------------------
	V1.0 - Chrominator 
	-- Require  --------------------------------------------------------------
	
	input : index de la scene ou du groupe
	output : etat de la scene, nom de la scene
		
	-- Versions -------------------------------------------------------------
	2017-01-15 : Initial version
	
]]--
-- chargement de l'encodeur/décodeur json
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()

local ipportdomoticz = '127.0.0.1:8080'

function getscenestatus(Scene_idx)

	local Events = assert(io.popen('curl "http://'..ipportdomoticz..'/json.htm?type=scenes"'))
	local Scene = Events:read('*all')
	Events:close()

	local jsonScene = json:decode(Scene)
	if jsonScene == nil then 	
		print("Erreur dans l'url json") 
	end  

	Groups = jsonScene['result']

	for response,results in pairs(Groups) do
		if results['idx'] == Scene_idx then 
			status = results['Status']
			name = results['Name']
			end
	end
	return status, name
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
taad
Messages : 61
Inscription : 17 juil. 2017, 21:41

Re: planification volet somfy rts

Message par taad »

un grand merci, je regarde ca ce week end !
bruch05
Messages : 47
Inscription : 27 févr. 2016, 21:06

Re: planification volet somfy rts

Message par bruch05 »

Salut,

Voici ce que j'ai chez moi.

Un capteur de lumière renvoi une valeur de 5% (lumière de l'éclairage public) à 95% (Jour couvert)
Chaque fois que sa valeur change, le script ci-dessous intercepte le change et réagit.

Ainsi, on ferme les volets quand la lumière est dessous de 10% et on les ouvre quand la lumière est au dessus de 80%.
A noter que je ferme tout, mais que je n'ouvre pas les volets des chambres automatiquement, mes enfants m'auraient collés les avocats :D

Il faut créer la variable "statut_volets" afin que les scripts n'agissent qu'une fois à la fermeture et à l'ouverture.

Code : Tout sélectionner

---------------------------------------------------------------------------
-- Script       : script_device_fermeture_volets.lua
--
-- Objectif     : Fermeture des volets quand la nuit est tombée
--
-- Auteur       : Christophe BRUXXX
-- Date         : 19/03/2016
-- Version      : 1.0
---------------------------------------------------------------------------

commandArray = {}

if (devicechanged['Sonde Lumiere']) then

    print "=========== Début Script de fermeture des volets ==========="
    
	local lumiere = tonumber(otherdevices_svalues['Sonde Lumiere'])   -- Lumière relevée dans le salon
	local user_variable_name = "statut_volets" -- Nom de la variable 
    local statut_volets = uservariables[user_variable_name] 

	if lumiere < 10 and statut_volets == 'Ouverts' then -- Quand la lumière augmente et que les volets sont fermés, sans le test, on lancerait la fermeture jusqu'à passer au dessus du seuil
		    
        print ('Fermeture Volets')
	    print ('Lumière = '..lumiere)
        	
	    commandArray['Variable:statut_volets'] = "Fermés"
	    
	    local t = os.execute("/volume1/@appstore/domoticz/var/scripts/bash/Play-Sound.bash 5 corne")
	    local t = os.execute("/volume1/@appstore/domoticz/var/scripts/bash/Play-Text.bash attention fermeture volets")

	    commandArray['Volet Parents'] = 'On'
	    commandArray['Volet Marie'] = 'On'
	    commandArray['Volet Lea'] = 'On'
        commandArray['Volet Porte Salon Temporise'] = 'On'
	    commandArray['Volet Cuisine'] = 'On'
	    commandArray['Volet Baie Salon'] = 'On'
	    commandArray['Volet Vitre Salon'] = 'On'
        
    	end
    	
    print "=========== Fin Script de fermeture des volets ==========="   
end
return commandArray

Code : Tout sélectionner

-------------------------------------------------------------------------
-- Script       : script_device_ouverture_volets.lua
--
-- Objectif     : Ouverture des volets quand le jour est levé
--
-- Auteur       : Christophe BRUXXX
-- Date         : 19/03/2016
-- Version      : 1.0
---------------------------------------------------------------------------

commandArray = {}

if (devicechanged['Sonde Lumiere']) then

    print "=========== Début Script d'Ouverture des volets ==========="
    
	local lumiere = tonumber(otherdevices_svalues['Sonde Lumiere'])   -- Lumière relevée devant la maison
	local user_variable_name = "statut_volets" -- Nom de la variable 
    local statut_volets = uservariables[user_variable_name] 
    print ('Lumière = '..lumiere)
    print ('statut_volets = '..statut_volets)

    if lumiere > 80 and statut_volets == 'Fermés' then -- Quand la lumière baisse et que les volets sont ouverts, sans le test, on lancerait l'ouverture jusqu'à passer en dessous du seuil.
    	
        print ('Ouverture Volets Salon')
    	
        commandArray['Variable:statut_volets'] = "Ouverts" -- On positionne la variable pour dire que c'est ouvert
        
        commandArray['Volet Cuisine'] = 'Off'
        commandArray['Volet Porte Salon'] = 'Off'
        commandArray['Volet Porte Salon Temporisé'] = 'Off'
        commandArray['Volet Baie Salon'] = 'Off'
        commandArray['Volet Vitre Salon'] = 'Off'
        commandArray['SendNotification']='Domoticz - Ouverture volets#OK#0'
    end
    	 
    print "=========== Fin Script d'Ouverture des volets ==========="
    
end
return commandArray
Répondre