Aller au contenu

Scène Volets


Fredric

Recommended Posts

bonsoir,

j'ai besoin d'un œil neuf sur une de mes scène,

j'ai une scène général qui ferme mes volets le soir, àla tombée de la nuit.

et la scène qui me pose problème, l'ouverture, quand je suis en congés ou en week end.

ce qui ce passe, quand la scène fermeture ferme les volets, ils descendent complètement une fois et remontent de 5cm, et là, il "clignotent", en monté, en descente, sans arrêt.

pour stopper la scène inverse, j'ai créé un VD avec "fibaro:abort(Id de la scène inverse)" mais cela n'a pas l'air de fonctionner, car quand j'actionne l'un ou l'autre, les scène reste active dans le dashbord.

j'ai la variable "journuit" qui fonctionne très bien dans d'autre scène et la variable aujourd'hui(agenda google) qui fonctionne aussi très bien.

j'ai la sensation de passer àcoté de quelque chose de simple.

quelque chose vous choc dans mes bloc?

Lien vers le commentaire
Partager sur d’autres sites

En fait, ces scenes, fonctionnait très bien avant que j'apporte de modification.

La première modification est dans la scène de fermeture, j'ai rajouté l'option "et si les volets sont ouverts" car sans cette option, la commande se faisait même si les volets étaient fermés et je recevais sans arrêt la notification tous les jours.

Le deuxième changement est dans la scène d'ouverture, j'ai rajouté "ou aujourd'hui =2" pour le week-end.

Làle but, c'est que la HC2 fasse la différence entre les congés payés et les week-ends.

La chose qui se passe, on dirait que c'est ordre et contrordres, les volets se ferment mais en l'ordre de se réouvrir mes de se refermer etc. etc. et donc cela fait àla claque claque sans arrêt.

J'ai beau manuellement faire stop sur toutes les scènes ça ne débloque pas les volets et je suis obligé de couper au compteur ou d'éteindre la boxe, ce qui lui dire que c'était un ordre qui vient d'elle.

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bah tes contre ordres viennent surement de ta conditions si "volets ouverts" car mis comme cela c'est un trigger, cad que cela déclenche les scènes Je pense donc que si tu changes l'état via une scène pour les fermer cela me donne l'info à  l'autre scène qui du coup les ouvre et hop c'est reparti pour le cycle suivant.

 

La solution serait de passer en LUA et de ne faire balancer la notification qu'après la fermeture des volets et mettre un check de l'état des volets de ce style:

if ( tonumber(fibaro:getValue(ID_Volet, "value")) > 0 )
then
		fibaro:call(ID_Volet, "close");
		fibaro:debug("Volet ouvert et fermeture en cours");
		fibaro:call(ID_Smartphone, "sendDefinedPushNotification", "ID_notif");
end
Lien vers le commentaire
Partager sur d’autres sites

Si j'étais toi je passerais en lua pour deux raisons:

- Tu pourrais combiner ta ouverture volet en semaine et quand tes pas là

- Ce sera plus simple àcodé ;)

Lien vers le commentaire
Partager sur d’autres sites

Je suis en mode bloc et je galère aussi. Je vais essayé de  travailler mon script en LUA je crois.

Je ferme mes volets à  16% à  la tombée de la nuit et les ouvre au lever du soleil à  16%.

J'ai 2 problèmes et je voulais avoir votre avis. Lorsque mes volets déjà  fermés volontairement avant le coucher du soleil, il s'ouvre de nouveau à  16% et inversement si mes volets sont déjà  ouvert avant le lever du soleil, il se ferme pour se mettre à  16%.

Mon 2ème problème est que je voudrais que le script ne s'exécute pas si je ne suis pas à  la maison (parti en vacances par exemple).

 

Je n'ai pas créer un sujet car je pense que le besoin d'aide est la même.

Lien vers le commentaire
Partager sur d’autres sites

Sur la HC2, est-ce qu'on peut utiliser le mode "en alerte" en activant  l'alarme et par conséquent il n'exécute pas le script?

Cela correspond-il un peu à  un mode "je suis hors de chez moi ou en vacances"?

Lien vers le commentaire
Partager sur d’autres sites

Ajoute une variable globale absent, et tu as juste à  l’activé quand tu pars.

Le mode alerte veut dire ce que sa veut dire, quand l'alarme se déclenche

Et pour ton problème de 16% que je comprend pas, ton code serait pas mal.

 

Quelque conseil pour vous deux:

- Passez en lua étape par étape

- Utilisez le scheduler, il vous simplifiera la vie et vous aurez juste a réglez les conditions de démarrage de la scène et pas vous occupez de l'heure.

- Faites au plus simple et améliorez ensuite par rapport à  votre niveaux.

Lien vers le commentaire
Partager sur d’autres sites

si je comprend bien, c'est juste parce que les volets sont coché dans trigger.

 

Je sais bien que le lua est plus complet, mais également plus complexe, je pense que le Bloc de Fibaro est vraiment sympa pour démocratiser la domotique.

Cela ouvre vraiment aux plus grand nombres des possibilités impensable avant.

c'est pour ça que j'essais de comprends le fonctionnement et les subtilités des bloc.

Le Lua est indispensable pour certaine choses, comme les télécommandes ou les VD, mais je crois qu'il faut continuer à  expliquer le Lua, rien que pour les possesseur de la HC lite déjà ...  ;)

merci pour vos réponse, je ferais un retour sur les résulta de mes essais.

Lien vers le commentaire
Partager sur d’autres sites

c'est ce que j'ai fais et le résulta demain  ;)

mais effectivement, je pense que tu as raison, car quand les volets tournent en boucle, je reçois en boucle également le push de fermeture uniquement, si la scène d'ouverture était en cause, je recevrais les push ouverture aussi.

si cela fonctionne bien, je passerai en Lua pour avoir la notification "que" lorsqu'ils sont fermés et pas quand l'ordre à  était donné. effectivement, ont ne peut pas en bloc.

dans l'idée de ton bout de code  ;)

Lien vers le commentaire
Partager sur d’autres sites

Voila un test en lua, cela vous semble bon?

--[[
%% autostart
%% properties
%% globals
JouretNuit
--]]

local startSource = fibaro:getSourceTrigger();  --c'est pour le démarrage de la scéne en automatique j'imagine, si quelqu'un peut confirmer

--si la nuit tombe et que les volets sont ouverts, meme peut ouverts.
if (
 ( fibaro:getGlobalValue("JouretNuit") == "Nuit"  and  tonumber(fibaro:getValue(57, "value")) > 0  and  tonumber(fibaro:getValue(65, "value")) > 0 ))

--alors fermer les volets jusqu'a la valeur 0
then
	fibaro:call(57, "close");
	fibaro:call(57, "setValue2", "0");
	fibaro:call(65, "close");
	fibaro:call(65, "setValue2", "0");
	
end

--si les volets sont fermés, donc à0
if (
(tonumber(fibaro:getValue(57, "value")) = 0  and  tonumber(fibaro:getValue(65, "value")) = 0 ))

-- alors message debug et push iphone fred
then
		
		fibaro:debug("Volets fermés");
		fibaro:call(53, "sendDefinedPushNotification", "20");
end
 end
Lien vers le commentaire
Partager sur d’autres sites

Très long pour ce que tu veux faire ;)

--[[
%% autostart
%% properties
%% globals
JouretNuit
--]]

local windowscontrolrelay = {57, 65};
--si la nuit tombe et que les volets sont ouverts, meme peut ouverts.
if ( fibaro:getGlobalValue("JouretNuit") == "Nuit") then
    for i =1, #windowscontrolrelay do
        if (fibaro:getValue(windowscontrolrelay[i], "value") > 0) then
            fibaro:call(windowscontrolrelay[i], "close");
        elseif (fibaro:getValue(windowscontrolrelay[i], "value") == 0) then
            --Met le code que tu veux
        end
    end
    fibaro:debug("Volets fermés");
    fibaro:call(53, "sendDefinedPushNotification", "20");
    fibaro:sleep(60*1000);
end
Lien vers le commentaire
Partager sur d’autres sites

Merci Shad, mais je voudrais comprendre pour progrésser 

;) 

déjà , ma scène était-elle bonne?

ensuite, peus tu, s'il te plait m'expliquer certain terme, en fait....tout :huh: 

 

--[[ 
%% autostart
%% properties 
%% globals 
JouretNuit 
--]] 
local windowscontrolrelay = {57, 65}; -- ça c'est pour faire la concaténation des ID, si j'ai d'autres volets, je rajoute les ID.
--si la nuit tombe et que les volets sont ouverts, meme peut ouverts. 
if ( fibaro:getGlobalValue("JouretNuit") == "Nuit") then 
for i =1, #windowscontrolrelay do -- la je ne comprend pas 
if (fibaro:getValue(windowscontrolrelay[i], "value") > 0) then --là , je comprend l'action mais pourquoi les crochés entourent le I? 
fibaro:call(windowscontrolrelay[i], "close"); 
elseif (fibaro:getValue(windowscontrolrelay[i], "value") == 0) then 

--Met le code que tu veux --c'est à  dire???

  end 
end
fibaro:debug("Volets fermés"); 
fibaro:call(53, "sendDefinedPushNotification", "20"); 
fibaro:sleep(60*1000); -- ça, j'avais oublié 

 end

Merci  ;)

Lien vers le commentaire
Partager sur d’autres sites

- Oui tu as juste as rajouter d'autre volet.

-

for i =1, #windowscontrolrelay do

Sa veut dire qu'il va regarde dans ton array les id en commençant par le premier.

-

if (fibaro:getValue(windowscontrolrelay[i], "value") > 0)

  tu le met entre crochet pour dire que c'est pas juste un i

-

elseif (fibaro:getValue(windowscontrolrelay[i], "value") == 0)

Je l'ai repris car c'était dans ton code je sais pas pourquoi tu voulais le mettre. A moins que tu veux vérifier à  la fin que les volets soit bien fermer dans ce cas il faut ajouter un sleep pour le temps que les volets ce ferme et revérifier  que c'est fermer. donc tu as une erreur.

 

Pour ton code:

local startSource = fibaro:getSourceTrigger();

Inutile dans le cas présent. En fait il start pour démarrer d'une autre façon ta scène exemple:

local startSource = fibaro:getSourceTrigger();
if ( startSource["type"] == "other" ) then

Ensuite:

fibaro:call(57, "close");
fibaro:call(57, "setValue2", "0");
fibaro:call(65, "close");
fibaro:call(65, "setValue2", "0");

C'est quoi le setValue2 ??? De toute façon le close suffit.

 

Et pour finir je crois que tu as un end en trop.

Lien vers le commentaire
Partager sur d’autres sites

Merci, là  j'ai tout compris.  ;)

 

Le "setValue2", je l'ai piqué dans le code bloc passé en lua et je pensé que c'était pour fermer le volet jusqu’à  "0"

 

Effectivement c'était un oublie

if ( startSource["type"] == "other" ) then

Et oui, tu as raison, je veux savoir si mes volets sont fermé ou arrêtés en cours, il ont une sécurité et je me suis aperçu que si je les arrête à  la main en cours, ils stop et il reste comme ça.

donc, je veux recevoir le push uniquement quand il sont fermés, voir même, un push si au bout d'une minute ils sont pas fermés, car le plus grand met presque une minute à  descendre, c'est pas du violant.

 

en tous cas merci pour l'explication  :60:

Lien vers le commentaire
Partager sur d’autres sites

par contre, pour info, pour ceux qui utilise les bloc, la scène bloc du début du poste sans cocher "trigger" pour les volet fonctionne; mais le push par même si les volet ce sont arrêtés, c'est pour ça que je préfère passer en LUA, essayer en tout cas  :D

Lien vers le commentaire
Partager sur d’autres sites

Merde j'ai oublier tous les tonumber.

--[[
%% autostart
%% properties
%% globals
JouretNuit
--]]

local windowscontrolrelay = {57, 65};
--si la nuit tombe et que les volets sont ouverts, meme peut ouverts.
if ( fibaro:getGlobalValue("JouretNuit") == "Nuit") then
    for i =1, #windowscontrolrelay do
        if (tonumber(fibaro:getValue(windowscontrolrelay[i], "value")) > 0) then
            fibaro:call(windowscontrolrelay[i], "close");
        elseif (tonumber(fibaro:getValue(windowscontrolrelay[i], "value")) == 0) then
            --Met le code que tu veux
        end
    end
    fibaro:debug("Volets fermés");
    fibaro:call(53, "sendDefinedPushNotification", "20");
    fibaro:sleep(60*1000);
end

 

Par contre pense à  faire ta vérification que les volets soit fermé.

Lien vers le commentaire
Partager sur d’autres sites

--[[

%% autostart

%% properties

%% globals

JouretNuit

--]]

local windowscontrolrelay = {57, 65};

--si la nuit tombe et que les volets sont ouverts, meme peut ouverts.

if ( fibaro:getGlobalValue("JouretNuit") == "Nuit") then

for i =1, #windowscontrolrelay do

if (tonumber(fibaro:getValue(windowscontrolrelay, "value")) > 0) then

fibaro:call(windowscontrolrelay, "close");

fibaro:sleep(60*1000); --attente une minute pour attendre que les volets déscendent

elseif (tonumber(fibaro:getValue(windowscontrolrelay, "value")) == 0) then --si les volets sont fermés

fibaro:call(53, "sendDefinedPushNotification", "20");

elseif (tonumber(fibaro:getValue(windowscontrolrelay, "value")) > 0) then --si les volets sont pas fermés

fibaro:call(53, "sendDefinedPushNotification", "21");

end

end

fibaro:debug("Volets fermés");

fibaro:sleep(60*1000);

end

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...