Aller au contenu

Messages recommandés

Posté(e)

Alors, si on reprend la question original : @kinou.69 souhaitait faire un "stop" des volets.

 

Le code est déjà  présent dans ce que propose @pepite, voir :

    [40] = function()
        -- Simple clic, "-", Arret des volets
            fibaro:debug("Arret des volets")
            for i = 1, #Volets do
               fibaro:call(Volets[i],"stop")   
        end
    end,

Je pense que cela a juste été oublié  ;)

 

Pas besoin de connaitre l'état des volets pour les stopper. 

Posté(e)

Dans ce cas, je te conseil de passer par un scénario différent qui va gérer l'état des volets.

Je te propose une scène ci-dessous (que je n'ai pas pu tester, je suis au travail ET je n'ai pas de volets :) )
 

local ID = XX -- ID de cette scène

local Volets = {xx, xx, xx}

local ouvertureEnCours = fibaro:countScenes() > 1

if (ouvertureEnCours) then
	
	fibaro:debug("Arret des volets")
	for i = 1, #Volets do
		fibaro:call(Volets[i],"stop")   
	end
	fibaro:killScene(ID)
	
else
	
	fibaro:debug("Ouverture volets")
	for i = 1, #Volets do
		fibaro:call(Volets[i], "Open") 
	end
	
	local ready = false
	while (not ready) do
		ready = true
		for i = 1, #Volets do
			ready = ready and (tonumber(fibaro:getValue(Volets[i], "value")) >=98)
		end
		fibaro:sleep(2000)
	end

end 

 
 
Attention, cette scène doit pouvoir s'executer au moins 2 fois en même temps
869520max.png
 
Que fait cette scène.
 
La 1ère fois qu'on l'appel : fibaro:countScenes() va retourné 1 donc on ne sera PAS en mode d'ouverture. Cette scène va donc ouvrir les volets et attendre que ces derniers soient bien tous ouverts. Si pendant ce temps tu relance cette même scène, elle va stopper les volets et stopper toutes les scènes en cours.

 

Modifie donc les 2 premières lignes avec l'identifiant de cette nouvelle scène ainsi que la liste des tes volets.

 

Modifie le code de ton octan remote pour que sur l'appui du code [20] et [40] tu appel directement cette nouvelle scène 

    [20] = function()
        -- Simple clic "+", ouverture des volets
        fibaro:startScene(XXXXXXX)  -- XXXXXX = id de la nouvelle scène

    ...

    [40] = function()
        -- Simple clic, "-", Arret des volets
        fibaro:startScene(XXXXXXX)  -- XXXXXX = id de la nouvelle scène

Voilà  cela devrait le faire du moins je l'espère.

 

Test d'abord uniquement en créer la scène et en appuyant sur le bouton start pour ouvrir/stopper/ouvrir/ ...

 

Have fun

  • Upvote 1
Posté(e)

EAsy le master, je n'aurais jamais pu l'aider comme cela.

 

Le ready, heuuu je comprends qu'elle s'incrémente de la valeur d'ouverture du volet pour ne pas qu'au prochain appui sur la telecommande ca ferme avant 'ouverture complète.

 

J'ai bon master ? :)

Posté(e)

Non tu as faux  ;) mais j'ai soudainement un doute 

 

Si la valeur est de 100, c'est que le volet est ouvert ou fermé ?

Posté(e)
local ready = false
-- ready = false afin de rentrer dans la boucle
while (not ready) do
        -- tant que ready = false je continue
	ready = true
        -- je met ready à  true -- voir en dessous
	for i = 1, #Volets do
                -- pour chaque volet je test si ce dernier est complètement ouvert > = 98%
                -- si c'est le cas ready = read AND ouvert 
                -- ce qui nous donne ready = true AND true
                -- donc si TOUS les volets sont ouverts ready = true
                -- si un volet est fermé on aura
                -- ready = true AND false ---> ce qui donne false
                -- ou ready = false AND true ---> ce qui donne false
		ready = ready and (tonumber(fibaro:getValue(Volets[i], "value")) >=98)
	end
        -- on attend 2 secondes avant de retester
	fibaro:sleep(2000)
end

Je suis pas sà»r d'être très clair  :D

Posté(e)

Bonsoir,

alors j'ai créer une nouvelle scène que j'ai appelé "mouvement volet". Celle-ci est pilotée depuis le bouton de la télécommande.

--[[
%% properties
%% events
%% globals
--]]

local ID = 261 -- ID de cette scène
 
local Volets = {205}
 
local ouvertureEnCours = fibaro:countScenes() > 1
 
if (ouvertureEnCours) then
 
	fibaro:debug("Arret des volets")
	for i = 1, #Volets do
		fibaro:call(Volets[i],"stop")   
	end
	fibaro:killScenes(ID)
 
else
 
	fibaro:debug("Ouverture volets")
	for i = 1, #Volets do
        fibaro:call(Volets[i], "open")
    end
 
	local ready = false
	while (not ready) do
		ready = true
		for i = 1, #Volets do
			ready = ready and (tonumber(fibaro:getValue(Volets[i], "value")) >=98)
		end
		fibaro:sleep(2000)
	end
 
end 

je debug. Donc cela fonctionne mas j'ai un petit soucis.

l'ouverture et l’arrêt fonctionne par appui un clic sur le bouton.

Par contre lorsque le volet se ferme (double clic sur le bouton), soit le volet s’arrête, soit il ré ouvre.

Posté(e)

.... j'ai juste un TRàˆS mauvais souvenir d'association directe entre un module double relai Qubino ZMNHBA2 et un interrupteur Z-WAVE.ME ZME_WCD1 !!!

 

+ en regardant les paramètres de groupe / association directe dans le manuel du fibaro RGBW, je trouve ça assez complexe, d'autant qu'on dirait que ça parle de pondération de bit !!! :o

Posté(e)

Honnetement, sans association ca marche tres bien, depuis que je l'ai, cela n'a jamis buggé, la seule chose qui plante c'est quand mes lignes de code ne font pas ce a quoi je m'attendais lol

  • 2 semaines après...
Posté(e)

bonsoir,

je relance le sujet de mes volets roulants. Pour rappel, je souhaite utiliser un seul bouton pour la commande d'un volet:

1 appui court : ouverture ou arret

1 appui long : fermeture

le script de steven m'a permis de faire l'appui court donc ouverture/arret. par contre, pour la fermeture, cela ne fonctionnement. J'ai créé une 3_ième scène pour avoir le mouvement de fermeture.

maintenant je n'arrive pas àintégrer le tout.

peut on faire dans la même scène le mouvement ouverture et fermeture?

merci pour votre aide

  • 1 mois après...
Posté(e)

Bonjour,

après quelques heures passé j'ai enfin réussi a programmer ma télécommande.

merci a steven pour son script.

Pour améliorer le fonctionnement je souhaiterais le modifier car quand le volet est en mouvement (dans la boucle while) et que j’appuie sur l'interrupteur mural, le volet s'arrete mais la scene considère que le volet est toujours en mouvement. je pense qu'il faudrait rajouter une condition si position n-1 = position n alors on quitte la boucle while.

je ne sais pas l'écrire. Pouvez vous m'aider, Merci

Posté(e)

Etrange car si je me souviens bien, àla fin de la fermeture des volets, on avait mis cela :

fibaro:killScenes(ID)

qui devrait terminer toutes les instances de la scène, donc la boucle while en même temps.

Posté(e)

Bonjour,

le killscene concerne l’arrêt avec la télécommande. Mon soucis c'est quand j’appuie sur l'interrupteur mural pour arrêter le volet que j'ai l'impression que la scène rester dans la boucle while.

Après avoir appuyé sur l'interrupteur mural, je dois a nouveau appuyer sur le bouton de la télécommande pour que la scène interprète l’arrêt du volet.

 

Voici la scene de la télécommande :

--[[
%% autostart
%% properties
465 sceneActivation
%% globals
--]]

-- Liste des volets
local Volets = {20, 301, 303, 307}

------
local actions = {
------action du rond plein "0"
[10] = function()-- Simple clic "0",
fibaro:setGlobal("Mvt_Volet20salon", "ouverture")
fibaro:startScene(261) -- XXXXXX = id de la nouvelle scène
end,

[11] = function()-- Relaché "0"
--
end,

[12] = function()-- Appui long "0",
fibaro:setGlobal("Mvt_Volet20salon", "fermeture")
fibaro:startScene(261) -- XXXXXX = id de la nouvelle scène
end,

[13] = function()-- double clic "0",
--
end,

---- plus les scripts des autres boutons

}

local action = tonumber(fibaro:getValue(465, "sceneActivation"))
actions[action]()
fibaro:debug("PressButton")

 

Et la scene simulant le mouvement du volet :

--[[
%% properties
%% events
%% globals
--]]

local ID = 261 -- ID de cette scène

local Volets = {20}

local ouvertureEnCours = fibaro:countScenes() > 1
local Mvt = fibaro:getGlobal("Mvt_Volet20salon")

if (ouvertureEnCours) then

    fibaro:setGlobal("Mvt_Volet20salon", "arret")
fibaro:debug("Arret des volets")
    for i = 1, #Volets do
        fibaro:call(Volets[i],"stop")
    end
fibaro:killScenes(ID)

else
if Mvt == "ouverture" then
    fibaro:debug("Ouverture volets")
    for i = 1, #Volets do
        --fibaro:call(Volets[i],"setValue", "97")
fibaro:call(Volets[i], "open")
--fibaro:call(205,"setValue", "99")
end

    ready = false
    while (not ready) do
        ready = true
        for i = 1, #Volets do
            ready = ready and (tonumber(fibaro:getValue(Volets[i], "value")) >=99)
        end
        fibaro:sleep(1000)
    end
end
if Mvt == "fermeture" then
    fibaro:debug("Fermeture volets")
    for i = 1, #Volets do
fibaro:call(Volets[i], "close")
end

    ready = false
    while (not ready) do
        ready = true
        for i = 1, #Volets do
            ready = ready and (tonumber(fibaro:getValue(Volets[i], "value")) <=1)
        end
        fibaro:sleep(1000)
    end
end
fibaro:setGlobal("Mvt_Volet20salon", "arret")
end

Pour cela j'ai créé une variable prédéfinie  Mvt_Volet20salon qui a comme valeur : arret/ouverture/fermeture.

 

 

  • 6 mois après...
Posté(e)

Salut ,

 

Je viens d’acquérir cette telecommande.

 

  • Inclusion => Ok
  • Ajout des paramètres 3 

controlez-les-equipements-de-votre-foyer

 

 

ainsi que le paramètre 8 pour le clignotement de la  LED.

 

J 'ai créée une scène  qui fonctionne si je l'a test depuis la console web de la HC2 

 

mais ne fonctionne pas lors de l'appuie du bouton 1 Celui avec le rond blanc.j 'ai bien la led qui s'allume sur le telecommande.

 

 

 

Avez-vous une idée du soucis ...:15:

 

 

scene.JPG

×
×
  • Créer...