Sebbrunie1 Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Bonjour, J'ai écrit ce code Lua à partir des bloc Fibaro --[[ %% properties %% globals jour_nuit iphoneAnne iphoneSeb --]] local startSource = fibaro:getSourceTrigger(); if ( ( fibaro:getGlobalValue("jour_nuit") == "jour" )) then if( ( tonumber(fibaro:getGlobalValue("iphoneAnne")) == tonumber("1") ) or ( tonumber(fibaro:getGlobalValue("iphoneSeb")) == tonumber("1") ) ) then fibaro:call(63, "setArmed", "0"); else fibaro:call(63, "setArmed", "1"); end else fibaro:call(63, "setArmed", "1"); end Et ca marche pas Je veux que mon module ouverture de porte (Module ID 63) s'arme: Le jour que si un des deux iphone est détecté sur le réseau et la nuit soit armé tout le temps.... Merci de votre aide Sébastien
Moicphil Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Bonjour Merci d'éditer le message et d'utiliser les balises pour code : <> De plus, faire attention à l'endroit ou poster le sujet...pour info je l'ai déplacé de "mon installation" à "support hc2"
Sebbrunie1 Posté(e) le 21 septembre 2014 Auteur Signaler Posté(e) le 21 septembre 2014 Bonjour est ce mieux? Merci
Moicphil Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Non! En fait, pour mieux voir le code, un fond noir sera ajouté quand tu auras inséré ton code, pour cela : - éditer le message -Cliquer sur les balises "code" - inserer le code Lua Voici une copie d'écran :
Moicphil Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Peux tu essayer ça ? : --[[ %% properties %% globals jour_nuit --]] local startSource = fibaro:getSourceTrigger(); local iphoneAnne = tonumber(fibaro:getGlobalValue("iphoneAnne")) local iphoneSeb = tonumber(fibaro:getGlobalValue("iphoneSeb")) local jour_nuit = fibaro:getGlobalValue("jour_nuit") if jour_nuit == "jour" and ( iphoneAnne == tonumber("1") or iphoneSeb == tonumber("1") ) then fibaro:call(63, "setArmed", "1") end if jour_nuit == "nuit" then fibaro:call(63, "setArmed", "1"); end
Moicphil Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Ce que j'ai mis ne doit pas marcher... Tes triggers sont l'un des 2 iphones donc il faut modifier l’entête, et j'ai oublié le "else" --[[ %% properties %% globals iphoneAnne iphoneSeb --]] local startSource = fibaro:getSourceTrigger(); local iphoneAnne = tonumber(fibaro:getGlobalValue("iphoneAnne")) local iphoneSeb = tonumber(fibaro:getGlobalValue("iphoneSeb")) local jour_nuit = fibaro:getGlobalValue("jour_nuit") if jour_nuit == "jour" and ( iphoneAnne == tonumber("1") or iphoneSeb == tonumber("1") ) then fibaro:call(63, "setArmed", "1") else fibaro:call(63, "setArmed", "0") end if jour_nuit == "nuit" then fibaro:call(63, "setArmed", "1"); end
Sebbrunie1 Posté(e) le 21 septembre 2014 Auteur Signaler Posté(e) le 21 septembre 2014 Malheureusement ma porte ne s'est pas armé automatiquement à la nuit.... De plus, je voudrais que le jour, si ma femme ou moi sommes à la maison, la porte ne s'arme pas, mais si nous sommes pas à la maison, que la porte s'arme. Et la nuit que nous y soyons ou pas, que la porte s'arme... C'est compliqué non? Merci de votre aide. Sébastien
Moicphil Posté(e) le 21 septembre 2014 Signaler Posté(e) le 21 septembre 2014 Dans ton 1er post tu dis : Je veux que mon module ouverture de porte (Module ID 63) s'arme: Le jour que si un des deux iphone est détecté sur le réseau Dans le dernier : De plus, je voudrais que le jour, si ma femme ou moi sommes à la maison, la porte ne s'arme pas, C'est pas contradictoire non ? Tu peux faire le point sur ce que tu veux exactement, on essayera de trouver quelquechose...
Steven Posté(e) le 22 septembre 2014 Signaler Posté(e) le 22 septembre 2014 @Sébastien A mon avis, ton code (1er post) fonctionne très bien, ce qui ne doit pas fonctionner c'est ta manière de tester ton code Si tu testes ton code en modifiant la valeur des variables globales depuis le Panneau des variables .. je te rassure de suite, cela ne va jamais fonctionner. En effet, quand tu modifies une variable depuis le Panneau de Variables les scénarios ne sont pas déclenchés Aà¯eeeee, je suis entrain de penser à quelque chose : Comment gères-tu la détection de tes téléphones ? Si tu utilises l'api ... c'est mort aussi pour la même raison, "un changement de variable via l'api ne déclenche pas les scénarios". Sinon, je te propose de faire un scénario de test pour tester ton scénario (tordu, je sais mais avec les variables globales, c'est le plus sà»r) : fibaro:setGlobal("jour_nuit", "nuit") fibaro:setGlobal("iphoneAnne", "1") fibaro:setGlobal("iphoneSeb", "1") -- Mode nuit fibaro:sleep(500) if (tonumber(fibaro:getValue(63, "armed")) > 0) then fibaro:debug("Mode nuit : porte armée : OK") else fibaro:debug("Mode nuit : porte armée : ERRRROOORRRR") end -- Mode jour avec 2 personnes à la maison fibaro:setGlobal("jour_nuit", "jour") fibaro:sleep(500) if (tonumber(fibaro:getValue(63, "armed")) > 0) then fibaro:debug("Mode jour : presence (2) : ERRROOOORRRR") else fibaro:debug("Mode jour : presence (2) : OK") end -- Mode jour avec 1 personne à la maison fibaro:setGlobal("iphoneAnne", "0") fibaro:sleep(500) if (tonumber(fibaro:getValue(63, "armed")) > 0) then fibaro:debug("Mode jour : presence (1) : ERRROOOORRRR") else fibaro:debug("Mode jour : presence (1) : OK") end -- Mode jour avec 1 personne à la maison fibaro:setGlobal("iphoneSeb", "0") fibaro:sleep(500) if (tonumber(fibaro:getValue(63, "armed")) > 0) then fibaro:debug("Mode jour : presence (0) : OK") else fibaro:debug("Mode jour : presence (0) : ERRRORRRR") end @moicphil Quand tu as rajouter les 2 iphones comme triggers tu as enlever le jour_nuit. c'est dommage sinon car si les 2 sont à la maison et que cette dernière passe en mode "nuit" le scénario ne s'exécute pas. Sinon, c'était du 100%
Moicphil Posté(e) le 22 septembre 2014 Signaler Posté(e) le 22 septembre 2014 @ Steven C'est comme ça qu'on apprend...
Sebbrunie1 Posté(e) le 22 septembre 2014 Auteur Signaler Posté(e) le 22 septembre 2014 Bonsoir à Tous, merci pour ces encouragements. Alors ce que je veux mode Jour: Si IphoneSeb ou iphone Anne present Alors Porte désarmée Sinon armée mode nuit porte armée Le mode jour/nuit est mis à jour par une scene: --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == fibaro:getValue(1, "sunriseHour")) ) ) then fibaro:setGlobal("jour_nuit", "jour"); end setTimeout(tempFunc, 60*1000) end if (sourceTrigger["type"] == "autostart") then tempFunc() else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then fibaro:setGlobal("jour_nuit", "jour"); end end Donc oui cela met à jour une variable Globale. (je pensais les mettre sur un module virtuel en main loop) Les iphones, c'est aussi via sur un module virtuel en main loop --[[ %% properties %% globals --]] -- Ping v 1.0.1 [05-2013] -- Copyright © 2013 Jean-christophe Vermandé fibaro:log("Start process"); local _deviceIp = "192.168.0.35"; local _devicePort = 62078; local _maxRetryProcess = 5; -- recursive function to ping device local function _ping(retry) retry = retry or 0; --open the socket local tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort); --set the read timeout tcpSocket:setReadTimeout(250); --notify user fibaro:log("Search on the local network, try #" .. retry .. " please wait..."); fibaro:sleep(250); --send packet local bytes, errorCode = tcpSocket:write("test"); --check for error if errorCode == 0 then return true; else if retry < _maxRetryProcess then fibaro:log("Retry process, please wait...") ; fibaro:sleep(1000); return _ping(retry + 1); end return false; end end --ping device, secure with pcall to catch errors. local f, result = pcall(_ping); if (f) then if (result == true) then fibaro:log("Device has been found, is awake and listening."); fibaro:setGlobal("iphoneSeb", "1"); fibaro:setGlobal("iphoneSeb_Text", "Present"); else fibaro:log("Device was not found!"); fibaro:setGlobal("iphoneSeb", "0"); fibaro:setGlobal("iphoneSeb_Text", "Absent") end else fibaro:log("Error: " .. f); end local Seb = fibaro: getGlobal("iphoneSeb"); local Seb_Text = fibaro: getGlobal("iphoneSeb_Text"); fibaro:log(Seb_Text) ; fibaro:call(32,"setProperty", "ui.Label1.value", Seb_Text); fibaro:log("Start process"); local _deviceIpAnne = "192.168.0.12"; local _devicePortAnne = 62078; local _maxRetryProcessAnne = 5; -- recursive function to ping device local function _ping(retryAnne) retryAnne = retryAnne or 0; --open the socket local tcpSocket = Net.FTcpSocket(_deviceIpAnne, _devicePortAnne); --set the read timeout tcpSocket:setReadTimeout(250); --notify user fibaro:log("Search on the local network, try #" .. retryAnne .. " please wait..."); fibaro:sleep(250); --send packet local bytesAnne, errorCodeAnne = tcpSocket:write("test"); --check for error if errorCodeAnne == 0 then return true; else if retryAnne < _maxRetryProcess then fibaro:log("Retry process, please wait..."); fibaro:sleep(1000); return _ping(retryAnne + 1); end return false; end end --ping device, secure with pcall to catch errors. local fAnne, resultAnne = pcall(_ping); if (fAnne) then if (resultAnne == true) then fibaro:log("Device has been found, is awake and listening."); fibaro:setGlobal("iphoneAnne", "1"); fibaro:setGlobal("iphoneAnne_Text", "Presente"); else fibaro:log("Device was not found!"); fibaro:setGlobal("iphoneAnne", "0"); fibaro:setGlobal("iphoneAnne_Text", "Absente") end else fibaro:log("Error: " .. fAnne); end local Anne = fibaro: getGlobal("iphoneAnne"); local Anne_Text = fibaro: getGlobal("iphoneAnne_Text"); fibaro:log(Anne_Text) ; fibaro:call(32,"setProperty", "ui.Label2.value", Anne_Text); Fibaro: sleep(3 * 1000); Bon je teste ce que tu m'as donné... Merci encore de votre aide Sébastien
Sebbrunie1 Posté(e) le 22 septembre 2014 Auteur Signaler Posté(e) le 22 septembre 2014 Voila le message d'erreur que j'ai avec le code de Steven:: [ERROR] 21:47:07: line 8: attempt to compare number with nil grrrrr
Steven Posté(e) le 23 septembre 2014 Signaler Posté(e) le 23 septembre 2014 63, c'est pas l'ID de ton détecteur ?
Sebbrunie1 Posté(e) le 23 septembre 2014 Auteur Signaler Posté(e) le 23 septembre 2014 et oui....... cela marche sur module virtuel ou scene?
Sebbrunie1 Posté(e) le 25 septembre 2014 Auteur Signaler Posté(e) le 25 septembre 2014 Bonsoir Si tu testes ton code en modifiant la valeur des variables globales depuis le Panneau des variables .. je te rassure de suite, cela ne va jamais fonctionner. En effet, quand tu modifies une variable depuis le Panneau de Variables les scénarios ne sont pas déclenchés Pour cela, il faut que je récupère la valeur de la Global variable en local? Est ce que ce que je montre plus haut pour pister l'iphone est bon? Pareil je le mets en local? Merci Sébastien
Sebbrunie1 Posté(e) le 26 septembre 2014 Auteur Signaler Posté(e) le 26 septembre 2014 Steven, le test à marché pour ma porte.... Au milieu j'ai error et le premier et le dernier j'ai OK...
Sebbrunie1 Posté(e) le 3 octobre 2014 Auteur Signaler Posté(e) le 3 octobre 2014 Bonjour, je reviens car cela ne marche toujours pas... grrrrr bon je suis en Version 4.etc grrr voici mon script: local startSource = fibaro:getSourceTrigger(); local jour_nuit = fibaro:getGlobal("jour_nuit"); fibaro:debug(jour_nuit); local iphoneAnne1 = tonumber(fibaro:getGlobalValue("iphoneAnne")); fibaro:debug(iphoneAnne1); local iphoneSeb1 = tonumber(fibaro:getGlobalValue("iphoneSeb")); fibaro:debug(iphoneSeb1); if jour_nuit == "jour" then if( iphoneAnne1 == 1 or iphoneSeb1 == 1 ) then fibaro:call(80, "setArmed", "0"); Fibaro:debug("Non Arme"); else fibaro:call(80, "setArmed", "1"); Fibaro:debug("Arme"); end else fibaro:call(80, "setArmed", "1"); end et le message d'erreur: [DEBUG] 11:32:56: jour [DEBUG] 11:32:56: nil [DEBUG] 11:32:56: 0 [ERROR] 11:32:56: line 24: attempt to index global 'Fibaro' (a nil value) C'est dans une scène... Merci de votre aide Par contre ce qui peut aider, mon détecteur de porte figaro se comporte bizarrement. Quand je l'arme manuellement, et le désarme manuellement, il n'accepte pas mon code PIN alors que si je le fait sur l'IPAD, il veut bien. J'ai l'impression que l'alarme anti sabotage a été déclenchée. Mais comment la désactiver.... grrrr
Shad Posté(e) le 3 octobre 2014 Signaler Posté(e) le 3 octobre 2014 Tu as écrit Fibaro:debug au lieu de fibaro:debug et si sa ne marche pas essaye print ().
Sebbrunie1 Posté(e) le 3 octobre 2014 Auteur Signaler Posté(e) le 3 octobre 2014 Merci en effet je n'ai plus l'erreur.. Par contre cela n'arme pas l'alarme de mon détecteur de porte... grrr
Shad Posté(e) le 3 octobre 2014 Signaler Posté(e) le 3 octobre 2014 Essaye d'enlèver les guillemets à0 et 1
Sebbrunie1 Posté(e) le 3 octobre 2014 Auteur Signaler Posté(e) le 3 octobre 2014 grrr pareil...... es ce mon détecteur de porte qui merdouille?
Shad Posté(e) le 3 octobre 2014 Signaler Posté(e) le 3 octobre 2014 EN plus je dis des bêtises car il faut les guillements. Met des debug pour vérifier que ton code passe bien les if.
Sebbrunie1 Posté(e) le 3 octobre 2014 Auteur Signaler Posté(e) le 3 octobre 2014 oui ca passe puis que j'ai bien dans le debug armé.... oulala ca àl'air complexe
Sebbrunie1 Posté(e) le 3 octobre 2014 Auteur Signaler Posté(e) le 3 octobre 2014 J'ai essayé avec le module de detection de mouvement FGMS001 Motion Sensor. Dés que je veux l'armé manuellement sur mon ordo, il ne reconnait pas mon code pin et si j'essaye avec l'ipad, cela fonctionne... J'ai l'impression d'avoir un problème avec l'alarme. C'est peut être lié à ma scène
Messages recommandés