Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Script Lua'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Calendriers

Aucun résultat à afficher.


Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

57 résultats trouvés

  1. Connaissiez-vous le site officiel de la documentation de la HC2 pour les développeurs ? https://developer.fibaro.com/ Il faut s'enregistrer, mais c'est gratuit
  2. À partir du code Krikroffs, j'ai fait un disque virtuel de télécharger les données météo actuelles du wunderground.com. La plupart des crédits doit aller à Krikroff P.s Google translate à tous WU_Weather.vfib
  3. Shad

    Gestion Minimote

    Voici un petit tuto pour les fonctionnalité possible avec la minimote. Avant touche chose la scène de base pour faire fonctionner la minimote. Remplacez l'id des lignes 3 et 7 par celui de votre télécommande. --[[ %% properties 156 sceneActivation %% globals --]] local Minimotesalon = fibaro:getValue(156, "sceneActivation"); if (tonumber(Minimotesalon) == 1) then elseif (tonumber(Minimotesalon) == 2) then elseif (tonumber(Minimotesalon) == 3) then elseif (tonumber(Minimotesalon) == 4) then elseif (tonumber(Minimotesalon) == 5) then elseif (tonumber(Minimotesalon) == 6) then elseif (tonumber(Minimotesalon) == 7) then elseif (tonumber(Minimotesalon) == 8) then end Maintenant entrons dans le vif du sujet. Gestion d'une alarme: Il est tout à fait possible d'armer des modules spécifiques pour votre alarme mais le problème si un module est "breached" votre alarme va s'activer. Grâce au code suivant vos modules ne s'armeront pas et vous recevrez une notification push sur les modules breached. Le code a mettre avant celui de la minimote. Remplacez les id des sensors et le nom des pièces ou ils se trouvent et ligne 27 mettez l'id de votre téléphone ou autre. local windowSensor = {14, 47, 32, 124, 111, 114, 115, 116}; local placeSensor = {"salon","Chambre Bleu","Entrée","Chambre de Marion","bureau","Salon","Salon","Garage"}; local startSource = fibaro:getSourceTrigger(); function statutWindows () local statut = "close"; for i=1, #windowSensor do if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then statut = "open"; end end return statut; end function alertWindows () local place = nil; for i=1, #windowSensor do if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then if (place == nil) then place = placeSensor[i]; elseif (place ~= nil) then place = place .. ", " .. placeSensor[i]; end end end fibaro:debug("Fenetre(s) ouverte(s): " .. place); fibaro:call(53, "sendPush", "Fenetre(s) ouverte(s): " .. place); end function armedSensor (value) for i=1, #windowSensor do fibaro:call(windowSensor[i], "setArmed", value); end end Pour la partie minimote remplacez ligne 12 pas l'id de voter téléphone if ( tonumber(ButtonPressed) == 1) then statut = statutWindows(); if (statut == "close") then armedSensor(1); fibaro:debug("button 1 pressed Alarme Activé"); elseif (statut == "open") then alertWindows(); end elseif ( tonumber(ButtonPressed) == 2) then armedSensor(0); fibaro:call(53, "sendPush", "Alarme désactivé)); fibaro:debug("button 2 Pressed Alarme Désactivé"); Gestion des ambiances: Pour commencé voici des exemples possibles. Créez une variable globale prédéfinie avec les valeurs (vous pouvez en ajoutez autant que vous voulez: - Normal - Cinema - Musique - Romantique Vous devez créez deux scènes. Dans la scène de la minimote collez avant le code des boutons: Vous devez réécrire les ambiances avec de la même façon que dans la globale et dans cette exemple je pars sur le principe qu'il s'agit du salon sinon éditez ligne 6. local AmbianceSalon = {"Normal", "Cinema", "Musique", "Romantique"}; function Ambiance (place,global,value) local Global = tostring(fibaro:getGlobalValue(global)); local item = 0; if (place == "Salon" ) then repeat item = item + 1; if (item == 20) then fibaro:killScenes(31); end until Global == AmbianceSalon[item]; finalItem = nextItem(value, item, table.getn(AmbianceSalon)); fibaro:setGlobal(global, AmbianceSalon[finalItem]); end end function nextItem (value, item, size) if (value == "nextone") then item = item + 1; if ( size < item ) then item = 1; end elseif (value == "previous") then item = item - 1; if ( 0 >= item ) then item = size; end end return item; end Pour la partie miimote: pour la fonction Ambiance ligne 2 et 5, la première fonction Salon est la pièce, ensuie SalonAmbiance est la variable global et nextone ou previous est dans le sens ou vous naviguez dans le "menu". Il faut également éditer le numéro de la scène. if (tonumber(Minimotesalon) == 1) then Ambiance("Salon","SalonAmbiance","nextone"); fibaro:startScene(25); elseif (tonumber(Minimotesalon) == 2) then Ambiance("Salon","SalonAmbiance","previous"); fibaro:startScene(25); Ensuite il faut une scène d'ambiance pour le salon. Voici un exemple de ma scène: --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); local ambiance = fibaro:getGlobalValue("SalonAmbiance"); local night = fibaro:getGlobalValue("Nightime"); if (startSource["type"] == "other") then if (ambiance == "Normal") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 1) then fibaro:call(89, "turnOff") end if (night == "Off") then fibaro:call(4, "setValue", "99"); end fibaro:call(83, "pressButton", "2") fibaro:call(7, "setValue", "99"); fibaro:call(7, "setValue", "99"); fibaro:call(11, "setValue", "99"); fibaro:call(12, "setValue", "99"); fibaro:call(91, "setColor", "243", "68", "0", "0"); elseif (ambiance == "Cinema") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(4, "setValue", "0"); fibaro:call(83, "pressButton", "1") fibaro:call(7, "setValue", "0"); fibaro:call(7, "setValue", "0"); fibaro:call(11, "setValue", "0"); fibaro:call(12, "setValue", "0"); fibaro:call(91, "setColor", "10", "8", "33", "0"); elseif (ambiance == "Musique") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(83, "pressButton", "3") fibaro:call(7, "setValue", "30"); fibaro:call(7, "setValue", "30"); fibaro:call(11, "setValue", "30"); fibaro:call(12, "setValue", "30"); fibaro:call(91, "setColor", "50", "0", "175", "0"); elseif (ambiance == "Romantique") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(83, "pressButton", "7") fibaro:call(7, "setValue", "0"); fibaro:call(7, "setValue", "0"); fibaro:call(11, "setValue", "0"); fibaro:call(12, "setValue", "0"); fibaro:call(91, "setColor", "255", "0", "108", "0"); end end Gestion des volets, virtuals device (chaîne de radion pour sonos..) Avec ce code vous pouvez mettre vos volets dans 4 position (ouvert,fermé, 50% et 75%). Donc le code toujours à insérez entre le début et le code de la minimote. local idBlind = 4; function Blind (value) if (value == 1) then if (tonumber(fibaro:getValue(idBlind, "value")) == 75) then fibaro:call(idBlind, "setValue", "50"); fibaro:debug("Volet réglé à 50%"); elseif (tonumber(fibaro:getValue(idBlind, "value")) ~= 75) then fibaro:call(idBlind, "setValue", "75"); fibaro:debug("Volet réglé à 75%"); end elseif (value == 2) then if (tonumber(fibaro:getValue(idBlind, "value")) ~= 99) then fibaro:call(idBlind, "open"); fibaro:debug("Volet Ouvert"); elseif (tonumber(fibaro:getValue(idBlind, "value")) == 99) then fibaro:call(idBlind, "close"); fibaro:debug("Volet Close"); end end end Placez ensuite ce code dans votre minimote: elseif (tonumber(Minimotesalon) == 3) then Blind(1) elseif (tonumber(Minimotesalon) == 4) then Blind(2) Désolé si c'est pas très clair mais je suis crevé ce soir. J'éditerais le code lorsque je l'aurais améliorer voir mis sous plugin si la v4 arrive
  4. Rem's

    Help En Lua

    Bonsoir àtous, J'essaye tant bien que mal de faire marcher cette scène .... elle se déroule mais lit toute les lignes, sans prendre en compte l'intervalle de temps. Je me disais que si il y avait un pro du Lua, ca pourrait m'aider àcomprendre. --[[%% properties157 value%% globals--]] -- Ce scénario sera executé uniquement àl'ouverture / fermeture-- du décteur de porte ID 157, porte de Julialocal door = 157local light = 9local startSource = fibaro:getSourceTrigger();-- startSource["type"] == "other"local heure = string.format(os.date("%H"), "%2d")..string.format(os.date("%M"), "%2d")local heureValable = heure >= "1940" or heure < "1950"local heureValable2 = heure >= "1110" or heure < "1140"local heureValable3 = heure >= "2001" or heure < "2010"local heureValable4 = heure >= "2011" or heure < "2021"local enAlerte = (tonumber(fibaro:getValue(door, "value")) > 0) if enAlerte and heureValable or startSource["type"] == "other" then -- porte en alerte soit ouverte fibaro:call(26, "setColor", "255","255","255","0"); fibaro:call(light, "setValue", "8"); fibaro:debug("Porte ouverte") else -- porte fermée fibaro:call(light, "turnOff"); fibaro:debug("Porte fermée 1") endif enAlerte and heureValable2 then -- porte en alerte soit ouverte fibaro:call(26, "setColor", "255","0","0","0"); fibaro:sleep(5*1000); fibaro:call(26, "turnOff") fibaro:debug("Porte ouverte, alerte led 2") else -- porte fermée fibaro:call(light, "turnOff"); fibaro:debug("Porte fermée 2") endif enAlerte and heureValable3 then -- porte en alerte soit ouverte fibaro:call(light, "setValue", "8"); fibaro:call(26, "setColor", "0","255","0","0"); fibaro:sleep(5*1000); fibaro:call(26, "turnOff") fibaro:debug("Porte ouverte, alerte led 3") else -- porte fermée fibaro:call(light, "turnOff"); -- fibaro:debug("Porte fermée 3") endif enAlerte and heureValable4 then -- porte en alerte soit ouverte fibaro:call(26, "setColor", "0","0","255","0"); fibaro:sleep(5*1000); fibaro:call(26, "turnOff") fibaro:debug("Porte ouverte, alerte led 4") else -- porte fermée fibaro:call(light, "turnOff"); fibaro:debug("Porte fermée 4") endfibaro:sleep(60*1000);Merci de votre aidePs :
  5. lionel

    Simulation de Présence

    Script de Clarkkent609 posté ici : http://forum.fibaro.com/viewtopic.php?t=3009 1ere étape: Créer une variable prédéfinie :"Simu_presence" avec les valeurs "On" and "Off" 2eme étape: créer un module virtuel 3eme étape: copier et coller ce code: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "On"); --fibaro:debug("Simulation de présence activée"); fibaro:log("Simulation de présence activée"); fibaro:call(30, "setProperty", "ui.status.value", "activée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID du module virtuel coller ce code dans le second bouton: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "Off"); --fibaro:debug("Simulation de présence désactivée"); fibaro:log("Simulation de présence désactivée"); fibaro:call(30, "setProperty", "ui.status.value", "désactivée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID module virtuel. Attention : ID du Label doit contenir "status" : voir photo: 4eme étape copier et coller ce code dans le MAIN LOOP et remplacer par vos valeurs utilisateur --[[ %% properties %% globals --]] -- LUA - Presence Simulator V1.0.0 -- -- simulate a presence when you're on vacation. -- A part of code is reused, it can found here. Thanx to Richo: http://forum.fibaro.com/viewtopic.php?t=1892&postdays=0&postorder=asc&highlight=presence&start=15 and here thx to Krikroff http://forum.fibaro.com/viewtopic.php?t=1656 -- USER SETTINGS : local start_hour = 19; --hour to start simulation local start_minute = 30; --minute to start simulation, example 19:30 local rndmaxtime = 20 --random time of light change in minutes --> here each device is on max 20min local runtime = 90 --how long to run simulation in minutes local ID_devices_lights = {17, 13} --IDs of lights to use in simulation local numbers_lights = #ID_devices_lights --numbers of light devices listed above local activated_push = true; --activate push when simulation starts and stops local ID_Smartphone = 7; --ID of your smartphone local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local debug = true; --activate the debug mode -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- local minute = 60000 --in milliseconds local currentDate = os.date("*t"); SimulatorPresenceEngine = { version = "1.0.0" }; -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) local name, id; local ID_devices_group = group; for i=1, #ID_devices_group do id = tonumber(ID_devices_group[i]); fibaro:call(id, "turnOff"); if (debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " On "); end end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() local start = os.time() local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation if (activated_push) then fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation started") ; --send push notification if (debug) then fibaro:debug("push start sent") end end while ((os.time() < endtime) and (simu == "On")) do local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end local sleeptime = math.random(rndmaxtime*minute) --random sleep fibaro:sleep(sleeptime) local sleeptimemin = math.abs(sleeptime/60000) if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. end --turn Off all lights SimulatorPresenceEngine:TurnOff(ID_devices_lights); fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation stopped") ; --send push notification if (debug) then fibaro:debug("push stop sent") end fibaro:sleep(60000); end -- Condition to start simulation if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered. end
  6. Romain80

    Alerte Si Porte Ouverte

    Salut, Je viens vous proposer un petit scenario pour vous alerter si une porte reste malencontreusement ouverte. Alors bien sur, c'est pas pour la complexité de la scene que je le poste mais encore une fois pour donner des idées. Etant donnée l' engouement pour le scenario qui gère les lumières extérieure en journée, je me dis que tout est bon a poster et que ça peut servir. Alors le voila --[[ %% properties 28 value 26 value %% globals --]] local startSource = fibaro:getSourceTrigger(); local temp_ouverture = 10*60*1000 -- temps exprimé en ms if ( ( tonumber(fibaro:getValue(28, "value")) > 0) ) then fibaro:sleep(temp_ouverture) if ( ( tonumber(fibaro:getValue(28, "value")) > 0) ) then fibaro:call(4, "sendPush", "Porte Entrée Ouverte depuis 10 minutes !"); end end if ( ( tonumber(fibaro:getValue(26, "value")) > 0) ) then fibaro:sleep(temp_ouverture) if ( ( tonumber(fibaro:getValue(26, "value")) > 0) ) then fibaro:call(4, "sendPush", "Porte Terrasse Ouverte depuis 10 minutes !"); end end Alors, oui bien sur, j' aurais certainement pu faire un truc plus joli/propre/optimisé Mais ça fonctionne dans l' état. Je verrais pour les optimisation plus tard. Mes capteurs d' ouverture sont des FIBARO FGK. Voilou, en esperant que ça serve ou donne des idées ++
  7. jojo

    Backup Hc2 - Idées

    Bonsoir, J'ouvre ce topic pour récolter vos bonnes idées pour réaliser un backup externe de notre BOX. L'idée vient de mprinfo : utiliser l'API de Fibaro, qui nous ressort 3000 json (Devices, Rooms, Pannels, ...) Il "suffit" de parser tout le bazar, et c'est bon. La permière question que j'aurais, c'est comment sauver dans un fichier txt le contenu d'un json ?
  8. Tout à commencé ici http://forum.fibaro.com/viewtopic.php?t=1894 Ce script peut servir à vérifier l'accès à un domaine et donc aussi sa connexion Internet. J'utilise une variable pour enregistrer le résultat: Cette variable n'est pas obligatoire, juste utile pour utiliser le résultat du script dans une scène. La limite de cette méthode pour le test de connexion est la disponibilité du domaine vers lequel pointe le script. --[[ %% properties %% globals --]] fibaro:log("Start process"); fibaro:sleep(2000); fibaro:log("<b>Check internet connection.</b>"); fibaro:sleep(2000); HC2 = Net.FHttp("dyn.com"); -- call domaine to check response, status, errorCode = HC2:GET("/"); -- check for error if errorCode == 0 then fibaro:setGlobal('Network Status', 1); fibaro:log("Internet connection is alive, http response status is " .. status); if tonumber(status) == 200 then fibaro:sleep(2000); fibaro:log("<b>The request has succeeded</b>"); end else fibaro:setGlobal('Network Status', 0); fibaro:log("<b>Internet is down, check your connection</b>"); end --EOF
  9. Domotique-Home

    Notre Hc2 Nous Réveille Le Matin

    Bonjour, Aujourd'hui je partage avec vous une scène simple qui permet nous réveiller le matin. Pour cela nous allons utiliser notre serveur PAW et sa synthèse vocale Si vous ne l'avez pas encore installé et configuré c'est par ici Créez une nouvelle scène puis insérez le code suivant en modifions a votre convenance. Comme d'habitude j’essaye de commenter le code au maximum, si vous avez des questions n’hésitez pas --[[ %% autostart %% properties %% globals --]] -- SETTINGS local HReveil = "06:30"; -- heure du réveille local IdSv = XX -- remplacez XX par ID_de_votre_VD_synthèse_vocale; local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); -- currentDate.wday == 1 correspond a Dimanche -- currentDate.wday == 2 correspond a Lundi -- etc... -- currentDate.wday == 7 correspond a Samedi -- ici j'ai programmé le réveil de lundi au vendredi -- modifier a votre convenance if ( ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == HReveil ) ) ) then -- volume sonore du smartphone fibaro:setGlobal("vol", "10") -- message vocal à envoyer au smartphone fibaro:setGlobal("speech", "Bonjour, il est " .. string.format("%02d", currentDate.hour) .. " heure " .. string.format("%02d", currentDate.min) .. " il faut se réveiller") -- activation du périphérique virtuel et bouton ad hoc fibaro:call(IdSv, "pressButton", "1"); end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then -- volume sonore du smartphone fibaro:setGlobal("vol", "10") -- message vocal à envoyer au smartphone fibaro:setGlobal("speech", "Bonjour, il est " .. string.format("%02d", currentDate.hour) .. " heure " .. string.format("%02d", currentDate.min) .. " il faut se réveiller") -- activation du périphérique virtuel et bouton ad hoc fibaro:call(IdSv, "pressButton", "1"); end end
  10. jojo

    Modifier L'icone D'un Device

    Avec ce VD, vous pourrez modifier l'icône d'un device via script LUA. N.B. : il n'est pas nécessaire d'utiliser ce VD pour modifier l'icône d'un autre VD. Préférez simplement l'instruction fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 153) Un tout grand merci à Lazer et PITP2 pour leur aide pour la V4..x et à Did pour avoir fait germer l'idée. Exemple d'utilisation : vous avez un thermomètre dans votre congélateur, et vous souhaitez que l'icône soit différente si la température est normale ou trop élevée. Ok, ce n'est que de l'esthétique, mais si en plus d'être utile, la domotique peut être belle … Voici les icônes que Did a créées pour la température de son congélateur. http://www.domotique-fibaro.fr/index.php/gallery/image/3703-cong%C3%A9lateur/ http://www.domotique-fibaro.fr/index.php/gallery/image/3704-cong%C3%A9lateur-alarm/ Vous devez d'abord charger les icônes pour le type de device dont vous souhaitez modifier l'icône (cette phrase devient très mystique … ). Ensuite vous devez : Récupérer l'ID du device : vous le voyez dans l'URL lorsque vous modifiez le device Récupérer l'ID des icônes : voir tuto de Did : Récupérer l'id d'une Icône. Finalement Importez le VD ci-joint (il est compatible V3.x et v4.x) Recopiez autant de fois que nécessaire le bouton avec son code, en mentionnant au début l'ID du device et de l'icône DeviceIcone_v1.0.vfib Utilisation : Via GEA : ajouter l'option {“VirtualDeviceâ€, <id,_module>, <no_bouton>} - Press le bouton du module virtuel {“VirtualDeviceâ€, 2, 1} Via LUA : fibaro:call(<ID de ce VD>, "pressButton", "<# du bouton>") Pour connaître le n° du bouton : voir tuto de mprinfo : Module Virtuel - Numérotation Des Boutons Limitation : lorsque l'icône d'un device est modifiée, il faut faire un refresh du browser pour que la modification apparaisse.
  11. Bonjour, J'utilise ce petit bout de code pour déterminer la version du firmware, et adapter le code pour V4.X ou v3.X. Il a toujours très bien fonctionné, jusqu'il y a peu. Quelqu'un aurait une idée ? Code : -- détermination de la version du firmware HC2 = Net.FHttp("127.0.0.1",11111) version = "" payload = "/api/settings/info" response, status, errorCode = HC2:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response) if tonumber(jsonTable.softVersion) >= 4 then version = "4.x" else version = "3.x" end else fibaro:log("--- ERROR --- code : " ..errorCode) fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end fibaro:debug('version = ' ..version) Debug : [DEBUG] 17:00:29: status=, errorCode=2, payload=/api/settings/info, response= [DEBUG] 17:00:29: version = [DEBUG] 17:00:32: status=, errorCode=2, payload=/api/settings/info, response= [DEBUG] 17:00:32: version = [DEBUG] 17:00:35: status=, errorCode=2, payload=/api/settings/info, response= [DEBUG] 17:00:35: version = [DEBUG] 17:00:38: status=, errorCode=2, payload=/api/settings/info, response= [DEBUG] 17:00:38: version = Mais quand je fais un save du VD (SANS avoir fait AUCUNE modif) tout redevient ok. [DEBUG] 17:07:08: version = 3.x [DEBUG] 17:07:08: Aucune lumière allumée [DEBUG] 17:07:11: version = 3.x [DEBUG] 17:07:11: Aucune lumière allumée ?????? Merci
  12. Bonjour, Je commence ce sujet pour continuer la discussion par rapport aux améliorations proposées pour le tuto "Afficher Les Valeurs D'une Variable Dans Un Vd sous HC2". Ainsi, on garde le tuto plus clean. Je remercie déjà mprinfo pour ses bonnes idées et sa proposition d'encore en donner plus. Mais bon, je devrais essayer de me retenir de trop y travailler d'ici le 20 avril ...
  13. Shad

    LUA scheduler for HC2

    Ce code a été écrit par robmac avec l'aide de jompa68 , A.Socha. J'ai également fais une traduction du poste original ici. Je ne vais pas tout expliquez mais juste faire comprendre le fonctionnement de base. Ce script a été écrit pour pouvoir gérer tout les heures de lancement d'une action depuis une seule scène. Personnellement ce script fonctionne beaucoup que le code standard lua. Les commandes sunset or sunrise fonctionne très bien. ATTENTION CE CODE NE FONCTIONNE PAS CHAQUE MINUTES DONC N'UTILISE PAS DE RESSOURCES SYSTEME. ILS DÉMARRENT SEULEMENT LORSQU'UNE TACHE EST PLANIFIÉE. Personnellement, depuis que j'utilise ce code ma HC2 ne fonctionne que mieux, dans chaque scène vous n'avez juste qu'à y mettre vos conditions et actions. Je ne posterais pas le code car il fait plus de 1000 lignes. Ce script ajoute également une fonctionne qui manque cruellement à la HC2, des alarmes. Par défaut il n'en possède que deux. Pour mon usage j'en ai programmé deux, une pour la semaine et l'autre pour le week-end. Installation du script: Créer une scène en Lua et collez le code du fichier Scene-1 - ID 1 Scheduler.txt, importez le fichier Alarm_Clock.vfib 4 fois (editez le numéro de chaqu'un dans le code) et 1 fois le Scheduler Control. Il vous faudra ensuite créer des globals variables avec comme nom: - scheduleGroup - scheduleActive - alarmTime1 - alarmTime2 - alarmTime3 - alarmTime4 Après pour redémarrez le scheduler il faut créer une scène avec: --[[ %% properties %% globals --]] local scheduleScene = 1 while (fibaro:countScenes(scheduleScene) > 0) do fibaro:killScenes(scheduleScene); fibaro:debug("Kill") end; active = active or { Active = 1, Disabled = 2 } activeIndex = activeIndex or { [1] = "Active", [2] = "Disabled"} local scheduleActive = fibaro:getGlobalValue("scheduleActive") or activeIndex[1] if scheduleActive == activeIndex[1] then -- restart a new instance if active fibaro:startScene(scheduleScene) end Maintenant pour paramétrez tout sa c'est très simple. Dans le scheduler il faut éditez les lignes: - 96: Id scène pour redémarrer - 97: Id virtual device pour controler le scheduler - 98, 103, 108 et 113: les id des virtuals devices pour les alarmes. Ensuite dans la scène pour redémarrer le scheduler éditez la ligne suivante avec l'id de la scène du scheduler: local scheduleScene = 1 Normallement c'est tout pour la configuration. MISE EN PLACE DU SCENARIO: Vous devez insérez vos lignes en-dessous la section <ADD YOUR LINES HERE> luaDaySchedule:add(<time>,<id>, <parameter> , <action>, <days> ,<catchup>,<p1>,<p2>,<p3>) Heure de lancement du scénario: <time> : Remplacez cette balise par une heure dans un format de 24h exemple: "23:21" ou "07:00". PS: Vous ne pouvez changer une variable globale pour changez l'heure de la scène sans relancez la scène. SUNRISE - SUNSET avec + ou - x minutes: <time>: Remplacez cette balise par "Sunrise" ou Sunset" <p1> Remplacez cette balise par 27 pour ajoutez 27 minutes ou - 11 pour lancez 11 minutes plus tôt. ID DU MODULE OU DE LA SCENE: <id> Remplacez cette balise par l'id de votre module ou scène. ACTION POSSIBLE (liste non entière et consulter le poste originale pour voir les commandes): Allumez ou éteindre un module régler une valeur pour un dimer envoyer un mail envoyer une notification push à un ou tous les périphériques envoyer un mail à un ou tous les utilisateurs appuyer sur un modules virtuels régler un slider pour un modules virtuels régler un variable global armer ou désarmer un module régler toute chacune des couleurs d'un module RGB démarrer un programme RGB démarrer une autre scène CHOIX DES JOURS DE LANCEMENT DES SCENARIOS: <days> Remplacer cette balise par jour de la semaine Il est également possible de mettre plusieurs jours de la semaine avec {"Sunday','Monday"}. Il y a 3 commandes spécial: {"All"] = Tous les jours de la semaines {"Weekend"} = Samedi et Dimanche {"Weekday"} = Lundi au Vendredi Ils peuvent également être fusionner avec les jours de la semaine {"Weekend","Monday"} = Samedie, Dimanche et Lundi LES ALARMES: Pour configurer les alarmes, un fichier vfib est disponible dans le zip joint. A la ligne 92 du scheduler vous devez paramétrer les id de vos modules virtuels ainsi que l'id de la scene du redémarrage du scheduler (également fournie dans le zip). Dans chaque bouton du module virtuel vous devez également reconfigurer l'id de ce module virtuel. Et pour finir vous devez créer des variables globales pour alarmDays1 - alarmDays2 - alarmTime1- alarmTime2. Voici les lignes que vous devez ajoutez à votre scheduler: --Réveil 1 luaDaySchedule:add(getAlarm("alarmTime1"),{"4"}, "" , "startScene", {"All"} ,false) --Réveil 2 luaDaySchedule:add(getAlarm("alarmTime2"),{"5"}, "" , "startScene", {"All"} ,false) Voici quelques une de mes lignes: luaDaySchedule:add("07:00","30", "" , "startScene", {"Weekday"}, false); luaDaySchedule:add("07:30","30", "" , "startScene", {"Saturday"}, false); luaDaySchedule:add("Sunset","Nightime", "1" , "setGlobal", {"All"}, false , 0); Comme écrit plus haut je n'ai pas tout expliquer car trop long. Il s'agit juste d'un résumé Des exemples sont fournis dans le scheduler + d'autre explication sur le poste originale du forum officiel. scheduler-1-3-0.zip Scheduler1-3-1.zip
  14. Salut a tous, Je pense que ça a du au moins vous arriver une fois dans votre vie d'allumer par mégarde une lampe extérieure sans vous en rendre compte et la laisser allumée. J' ai donc fait un petit script rapide qui permet de detecter quand une lampe extérieure est allumée en journée et l'éteindre automatiquement après 20 secondes. voici donc le script : --[[ %% properties 29 value 34 value 33 value %% globals sunsetHour --]] local startSource = fibaro:getSourceTrigger(); if (fibaro:getGlobal("sunsetHour") == "0") then if (fibaro:getValue(29, "value") > "0") or (fibaro:getValue(33, "value") > "0") or (fibaro:getValue(34, "value") > "0") then fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction."); fibaro:sleep(20*1000) fibaro:call(29, "turnOff") fibaro:call(33, "turnOff") fibaro:call(34, "turnOff") end end Dans ce script les IDs 29, 33 et 34 sont les IDs de mes lampes extérieures. Il faudra donc les modifier par les votres. Egalement j' ai 3 lampes ext, si vous avez plus ou moins, il faudra adapter le code en enlevant ou ajoutant des lignes. Et j'utilise comme element de verification une variable Globale "sunsetHour" pour savoir si nous sommes en journée ou de nuit. Voila c'est tout bête, mais ça dépanne.
  15. rahany

    Script Lua "repeter Une Scene"

    Bonjour, Je viens de créer un petit script en LUA, mais le souci c'est que je ne sais pas comment répéter la scène toutes les x minutes. Si une bonne âme peut m'aider , merci d'avance. Je vous mets le code ci-dessous fibaro:debug ('debut') -- debut du script local etatpe = fibaro:getValue(23, 'value') fibaro:debug('Ma valeur du vinyle 1=ON ; 0=OFF: ' ..etatpe) local etatge = fibaro:getValue(25, 'value') fibaro:debug('Ma valeur du vinyle 1=ON ; 0=OFF: ' ..etatge) local Maintenant = os.date("*t") -- varaible date -- ========================================= -- Debut du scritp -- ========================================= if ( Maintenant['hour'] >= 15 or Maintenant['hour'] < 1) if (etatpe == '0') and (etatge == '0') then fibaro:sleep(300) fibaro:call(29, 'turnOff') end end
  16. Gestionnaire d'Evénements Automatique (GEA) ancienement : Wtdiso What To Do If Still Open Edit : version 5.00 modifiée le 8 décembre 2014 But : Ce script a pour but de contrôler, à intervalle régulier, l'état de votre environnement pendant une durée déterminée afin de vous avertir d'éventuel soucis et si nécessaire d'effectuer automatiquement certaines actions. Depuis la version 3.00 vous avez aussi la possibilité d'utiliser ce script en exploitant les déclencheurs %%properties end %%globals. Exemple : Etre informé si la porte du garage est restée ouverte plus de 10 minutes Recevoir une notification et allumer le radiateur s'il fait trop froid depuis 30 minutes Eteindre automatiquement la lumière des WC si cette dernière est allumée plus de 5 minutes Eteindre le frigo et recevoir une notification si ce dernier consomme trop d'électricité ou pas assez Installation : Nouveauté de la version 3.80 Depuis le panneau des variables, créer une variable (simple) appelée "GEA_Tasks" (son contenu n'a pas d'importance) Créer un scénario en mode LUA Insérer le script ci-joint (GEA.lua)) Adapter les dernières lignes à vos besoins (en dessous de la ligne "A VOUS DE JOUER") Paramétrage : Définir l'intervalle de contrôle en secondes GEA.checkEvery = <nb secondes> (30 par défaut) Exemple : GEA.checkEvery = 30 Indique la liste des portables par défaut devant recevoir une notification {70, 71} GEA.portables = {<id portable> [, <id portable>][, ...]} Exemple : GEA.portables = {70, 71} Indique si on utilise un firmware égale ou supérieur à la version 4.017 GEA.isVersionFour = true --- On est en version 4.017 Beta ou suppérieur Indique la langue utilisée (Français : FR ou Anglais : EN) GEA.language = "FR" Bascule en mode de débogage pour obtenir plus de traces GEA.debug = true | false (false par défaut) Exemple : GEA.debug = true Permet un débugage fort de GEA, chque erreur provoque l'arrêt de GEA si cette option est à false GEA.catchError = true | false (true par défaut) Exemple : GEA.catchError = false -- va afficher les erreurs et stopper GEA Supsendre le script à la volée GEA.getGlobalForActivation = {<variable globale>, <valeur>} Exemple : GEA.getGlobalForActivation = {"SuspendreGEA", "non"} Tant que la variable globale "SuspendreGEA" sera à "non" le script continuera son action. Syntaxe : Simple condition : GEA.add(<condition>, <durée en secondes|-1>, <message a notifier>[, <options>]) Exemple : GEA.add(100, 10*60, "Lampe allumée de puis plus de 10mn, on l'éteint", {{"turnOff"}}) Condition multiple : GEA.add( { <condition_principale>[, <condition2>[, ...]] } , <durée en secondes|-1>, <message a notifier>[, <options>]) Exemple : GEA.add( { 100, {"Global", "JourNuit", "Nuit"} } }, 10*60, "Lampe allumée de puis plus de 10mn ET la variable global JourNuit indique Nuit alors on éteint la lampe", {{"turnOff"}}) Conditions autorisées : <Id module> -- Identifiant du module * {"Global", <nom variable>, <valeur>} -- Si la variable global X contient la valeur Y {"Weather", <valeur>} -- Si la météo indique la valeur {"Sensor+", <id module>, <valeur max>} -- Si la valeur du sensor X est supérieur à Y {"Sensor-", <id module>, <valeur max>} -- Si la valeur du sensor X est inférieur à Y {"Sensor", <id module>, <valeur max>} -- Si la valeur du sensor X est égale à Y {"Sensor!", <id module>, <valeur max>} -- Si la valeur du sensor X est différente à Y {"Value+", <id module>, <valeur max>} -- Si la valeur du module X est supérieur à X {"Value-", <id module>, <valeur max>} -- Si la valeur du module X est inférieur à X {"Value", <id module>, <valeur max>} -- Si la valeur du module X est égale à X {"Value!", <id module>, <valeur max>} -- Si la valeur du module X est différente à X {"Global+", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est supérieur à X {"Global-", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est inférieur à X {"Global", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est égale à X {"Global!", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est différente à X {"Slider-", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est inférieur à X {"Slider+", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est supérieur à X {"Slider", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est égale à X {"Slider!", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est différente à X {"Label", <id_vd>, <nom label>, <contenu>} -- Si la valeur du label est égale à X {"Label!", <id_vd>, <nom label>, <contenu>} -- Si la valeur du label est différente à X {"Property", <id_module>, <nom propriété>, <valeur>} -- Si la valeur de la propriété du module est égale à la valeur indiquée {"Property!", <id_module>, <nom propriété>, <valeur>} -- Si la valeur de la propriété du module est différente à la valeur indiquée {"Battery", <id module>, <valeur max>} -- Si l'état de la pile du module X est inférieur ou égale à X {"Batteries", <valeur max>} -- Si l'état de la pile des 350 premiers ont une pile inférieur ou égale à X {"Dead", <id module>} -- Si le module X ne répond plus {"Group", <numéro du groupe>} -- Si le groupe X est valable {"SceneActivation", <id module>, <id scene>} -- Si la scene X du module Y est le déclencheur du script * Si seul l'Identifiant du module le script considère qu'il doit vérifier si le module est activé. Durée : <durée en secondes> -- Nombre de secondes pendant lequel la condition doit être respectée Message : <message à notifier> -- Le message devant être notifier ** ** Si le message est vide "" aucune notification ne sera envoyée Un message peut contenir des variables qui seront remplacée à la volée. Ces variables sont #time#, #duration#, #value#, #date#, #seconds#, #name#, #runs#, #rooms# soit respectivement heure, durée, dernière valeur, date, secondes, nom du périphérique, nombre d'exécution et pièce Exemple "Le consommation #valeur#W relevée à #time#, le #date# sur le périphérique #name# est trop élevée" Depuis la version 4.20, il est possible de connaitre les valeurs des autres périphériques impliqué. GEA.add( { condition1, condition2, condition3 }, <durée>, "#value[1]# #value[2]# #value[3]#"). Les variables indexée sont : #value[index]#, #name[index]# et #room[index]#. #name#, #value# et #room# indique toujours la condition principale. Options : {<option>[,<option>][,...]} -- Il s'agit d'un groupe d'options {{},{},{}} Option : {"turnOff"[,<id module>]} -- Eteint le périphérique concenné {"turnOff"} ou {"turnOff",21} {"turnOn"[,<id module>]} -- Allume le périphérique concerné {"turnOn"} ou {"turnOn",21} {"Inverse"} -- On inverse la condition si elle était vrai, le script retourn faux {"Repeat"} -- On répete les avertissements tant que le périphérique n'a pas changé d'état. {"Portable", <id>} -- Le message associé à ce périphérique sera envoyé à ce portable au lieu de ceux par défaut {"Portable", 70} {"Scenario", <id>} -- Lance un scénario selon son identifiant {"Scenario", 2} {"Value", <value>} -- Met la valeur 20 dans le périphérique - dimmer une lampe. {"Value", 20} {"Value", <id>, <value>} -- Met la valeur 20 dans le périphérique <id> - dimmer une lampe. {"Value", 19, 20} {"Open"} -- Ouvre le volet {"Open", <value>} -- Ouvre le volet de X % {"Open", 20} {"Open", <id>, <value>} -- Ouvre le volet (id) de X% {"Open", 61, 20} {"Close"} -- Ferme le volet {"Close", <value>} -- Ferme le volet de X % {"Close", 20} {"Close", <id>, <value>} -- Ferme le volet (id) de X% {"Close", 61, 20} {"Global", <variable>, <valeur>} -- Met la valeur "Oui" dans la variable globale "Maison" {"Global", "Maison", "Oui"} {"Global", <variable>, "inc+"} -- Incrémente de 1 automatiquement la variable globale {"Global", <variable>, "dec-"} -- Decrémente de 1 automatiquement la variable globale {"Time", <from>, <to>} -- Ne vérifie l'évenement QUE si nous sommes dans la/les tranches horaires {"Time", "22:00", "06:00"} {"Dates", <from>, <to>} -- Ne vérifie l'évenement QUE si nous sommes dans la/les périodes de dates spécifiée {"Dates", "01/01[/2014]", "31/01[/2014]"} {"Armed"} -- Ne vérifie QUE si le module est armé {"Disarmed"} -- Ne vérifie QUE si le module est désarmé {"setArmed", <id>} -- arme le module <id> {"setDisarmed", <id>} -- desarme le module <id> {"RestartTask", <id_tache>} -- Redémarre une tâche selon son <id> {"StopTask", <id_tache>} -- Stoppe une tâche selon son <id> {"NotStarted"} -- Empêche la tache de démarrer automatiquement (voir RestartTask) {"MaxTime", <number>} -- Stoppe une tâche après un certain nombre d'exécution {"DST"} -- Ne vérifie l'évenement QUE si nous sommes en mode "Saving time" soit heure d'été {"NOTDST"} -- Ne vérifie l'évenement QUE si nous sommes en mode heure d'hiver {"VirtualDevice", <id,_module>, <no_bouton>} -- Pr ess le bouton du module virtuel {"VirtualDevice", 2, 1} {"Label", <id_module>, <name>, <message>} -- Attribue le message au label du module virtuel {"Label", 21, "ui.Label1.value", "activé"} {"WakeUp", <id,_module>} -- Essai de réveillé le module {"WakeUp", 54} {"Email", <id_user>,} -- Envoi le message par email à l'utilisateur {"Email", 2} {"Email", <id_user>,<sujet>} -- Envoi le message par email à l'utilisateur {"Email", 2, "Sujet du message"} {"Group", <numero>} -- Attribut cet événement au groupe {"Group", 2} {"Slider", <id_module>, <id_slider>, <valeur>} -- Met la valeur dans le slider du module {"Slider", 19, 1, 21.3} {"Program", <id_module>, <no>} -- Exécute le programme du module RGB {"Program", 19, 5} {"RGB", <id_module>, <col1>, <col2>, <col3>, <col4>} -- Modifie la couleur RGB du module {"RGB", 19, 100, 100, 0, 100} {"Days", <jours>} -- Ne vérifie l'évenement que si le jours d'exécution est dans le/les jours indiqué (jeurs peut prendre les valeurs suivantes "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, All, Weekday, Weekend") {"CurrentIcon", <id_module>, <no_icon>} -- Modifie l'icone d'un module virtuel {"CopyGlobal", <var_source>, <var_dest>} -- Copy la valeur de la variable global <var_source> dans la variable global <var_dest> {"If", {[{<condition}[,{<condition}[,...]]}} -- L'événement sera autorisé uniquement si toutes les conditions sont valides Demande de support / FAQ : un topic a été dédié pour répondre à toutes les questions sur le projet : Support GEA n'hésitez pas à venir nous y retrouver. Explication : Vous précisez quel module le scénario doit contrôler (GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes")). Toutes les 30 secondes, le scénario va vérifier l'état de la porte 28. Si cette porte est restée ouverte plus de 10 minutes, il vous enverra un message push. Contrairement à d'autre scénario, celui-ci contrôle l'état d'une porte/lumière/volet toutes les X secondes. Dans l'exemple de la porte de garage, si cet dernière a été fermée et ré-ouverte pendant les dernières 10 minutes, le compteur sera redémarré. Ce scénario permet de cumuler plusieurs avertissements, il vous suffit donc d'un seul scénario pour contrôler tout votre environnement :[/indent] GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}) GEA.add(69, 5*60, "La lumière du local technique est allumée depuis plus de 5 minutes") GEA.add({"Global", "Capsule", "100"}, 1*60, "Il faut commander du café, plus de capsule") GEA.add({"Sensor+", 19, 450}, 5*60, "Consommation du frigo excessive (#value#W), on l'éteint", {{"turnOff"}}) Voici un exemple minimaliste de scénario -- ================================================== -- A VOUS DE JOUER -- ================================================== GEA.checkEvery = 30 -- On vérifie toutes les X secondes GEA.portables = {70} -- Liste des portables devant recevoir une notification {70, 71} GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}}) GEA.add(69, 5*60, "", {{"turnOff"}}) -- Eteindre automatiquement le local technique -- Si un enfant allume sa lampe le soir, après 10mn le système la dim à 20%. Après 20mn le système éteint la lampe. GEA.add(66, 10*60, "Chambre Kendra allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(66, 20*60, "Chambre Kendra extinction", {{"Time", "22:00", "06:00"}, {"turnOff"}}) -- Variable global GEA.add({"Sensor+", 80, 100}, 30, "Consommation cafetière, café en cours", {{"Global", "Capsule", "inc+"}}) GEA.add({"Global", "Capsule", "100"}, 1*60, "Recommander du café") -- Sensor et valeur GEA.add({"Sensor+", 19, 100}, 1*60, "Consommation excessive de la WMC #value#") GEA.add({"Value-", 8, 18}, 30*60, "Il fait froid au salon #value# à #time#") -- NE PAS OUBLIER - Démarrage du scénario GEA.run() Special Thanks to : Fredric, Diuck, Domodial, moicphil, lolomail, byackee, JossAlf, Did, Hansolo, Shyrka973, fredo, jompa98 et tous les autres gars de Domotique-fibaro.fr Quelques exemples : GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}}) -- On vérifie toutes les 10mn si la porte du garage est ouverte et on envoi un message push. On répète l'opération tant que la porte n'est pas fermée. GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}, {"Time", "22:00", "06:00"}}) -- Idem de précédent mais on vérifie uniquement entre 22:00 et 06:00 GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}, {"Time", "22:00", "06:00"}, {"Time", "12:00", "13:00"}}) -- Idem de précédent mais on vérifie entre 22:00 - 06:00 et 12:00 - 13:00 GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Scenario", 1}, {"Time", "22:00", "06:00"}, {"Time", "12:00", "13:00"}}) -- Si la porte du garage est ouverte plus de 10mn entre 22:00 - 06:00 ou 12:00 - 13:00, on lance le scénario 1 GEA.add(69, 5*60, "", {{"turnOff"}}) -- On éteint la lumière des toilettes automatiquement après 5 minutes GEA.add(69, 5*60, "", {{"turnOff"}, {"Global", "WC", "Allumé"}, {"Time", "22:00", "06:00"}}) -- On éteint la lumière des toilettes automatiquement après 5 minutes si ils ont été allumé entre 22:00 et 06:00 et on met la variable global "WC" à "Allumé" GEA.add(19, 5*60, "Lumière extérieur est éteinte", {{"Inverse"}, {"Time", "Sunset", "Sunrise"}, {"Portable", 71}}) -- Si la lumière extérieur est éteinte (inverse) depuis plus de 5minutes entre le couché du soleil et le levé on envoi un message push au portable ayant l'ID 71 au lieu de celui par defaut. GEA.add(69, 5*60, "", {{"Global", "Karotz", "WC occuper"}, {"VirtualDevice", 20, 1}}) -- Si la lumière est allumée plus de 5mn, on met la variable "Karotz" à "WC occuper" et on appuie sur le bouton (id : 1) du module virtuel (id : 20) GEA.add(69, 5*60, "", {{"Days", "Weekend, Monday"}}) -- On vérifie si la lumière est allumée plus de 5mn, uniquement les Samedis, Dimanches et Lundi -- On dimme la lampe à 20% si elle est allumée plus de 10mn entre 22:00 et 06:00 puis après 20mn on l'éteint GEA.add(31, 10*60, "", {"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(31, 20*60, "", {"Time", "22:00", "06:00"}, {"turnOff"}}) -- Variable globale -- si la variable "Capsule" contient "100" depuis plus d'une minute GEA.add({"Global", "Capsule", "100"}, 1*60, "Commander du café, plus de capsule") -- Batterie -- parcours les 350 premiers modules à la recherche de pile inférieur ou égal à 40% GEA.add({"Batteries", 40}, 24*60"60, "", {{"Repeat"}}) -- Sensors -- Si le frigo comsomme trop depuis 5 minutes (plus de 450W), on l'arrête GEA.add({"Sensor+", 19, 450}, 5*60, "Consommation excessive #value# > 450W", {{"turnOff"}}) -- Si le frigo ne comsomme pas assez depuis 5 minutes (moins de 3W), on averti GEA.add({"Sensor-", 19, 3}, 5*60, "Consommation insuffisante #value#< 3W", {{"Repeat"}}) -- Value GEA.add({"Value-", 8, 20}, 1*60, "Il fait froid au salon #value# à #time#") -- moins de 20 GEA.add({"Value+", 8, 22}, 1*60, "Il fait trop chaud #value# au salon depuis #duration#") -- plus de 22 -- RGB si la consommation du frigo est trop élevée (> 450W) GEA.add({"Sensor+", 19, 450}, 1*60, "Le périphérique #name# consomme trop (#value#)", {{"RGB", 27, 100, 0, 100, 100}}) -- Slider - attribue 100 à la valeur d'un slider (1) du module virtuel (27) si la lampe (19) est allumée depuis 1 minutes GEA.add(19, 1*60, "", {{"Slider", 27, 1, 100}}) -- Programme - lance le programme 5 du module 23 si la lampe (19) est allumée depuis 1 minutes -- puis éteint la lampe 19 GEA.add(19, 1*60, "", {{"Program", 23, 5}, {"turnOff"}}) -- Dead GEA.add({"Dead", 27}, 1*60, "Le périphérique #name# ne répond plus", {{"WakeUp", 27}}) -- Détecteur (id 200) avec allumage de lampe (id 100) -- Chaque détection redémarre le time de la lampe local myTask = GEA.add(100, 5*60, "Extinction de la lampe après 5mn", {{"turnOff"}}) GEA.add(200, -1, "", {{"RestartTask", myTask}}) -- Groupes GEA.add({"Global", "absent", "oui"}, 10*60, "", {{"Group", 2}}) GEA.add(19, 10*60, "", {{"Group", 2}}) GEA.add({"Group", 2}, 5*60, "Absent mais la lampe (19) est encore allumée, extinction", {{"turnOff", 19}}) -- Si la variable global "absent" est sur "oui" depuis 10 minutes -- Si la lampe 19 est allumée depuis 10 minutes -- Si ces éléments sont vrai pendant plus de 5 minutes alors j'envoi un push et j'éteint la lampe 19. Déclenchement instantané La version 3+ permet de déclenché ce script en instantané Exemple allumé la lampe (65) à l'ouverture de la porte (18) et l'éteindre à la fermeture --[[ %% autostart %% properties 18 value %% globals Capsule --]] ... GEA.add(18, -1, "", {{"turnOn",65}}) GEA.add(18, -1, "", {{"Inverse"},{"turnOff",65}}) GEA.add({"Global","Capsule", "100"} Paramètre "If" La version 3.10 voit naître le paramètre "If". Ce dernier permet de valider un certain nombre de conditions avant de valider l'événement. -- Si la lumière (69) est allumée un Lundi, Samedi ou Dimanche -- ET que "Vacances = 0" ET que "Absence" = 1 -- ET que la température (8) est inférieur à 18° local condition = {"If",{{"Global", "Absence", "1"},{"Global", "Vacances", "0"},{"Value-", 8, 18}}} GEA.add(69, -1, "La lumière est allumée", {{"Days", "Monday, Weekend"}, condition}) Historique des versions : Version 1.10 [Nouveauté] Si vous mettez "turnOff" comme message, le scénario ne vous enverra pas d'avertissement mais éteindra directement le périphérique en question [Fix] Correction pour les périphérique de type dimmable_light et binary_light Version 1.20 [Nouveauté] GEA.getGlobalForActivation Cette nouvelle fonctionnalité permet de suspendre/activé le scénario par le biais d'une variable global GEA.getGlobalForActivation = {"Alerte", "activé"} -- Le scénario ne fonctionnera que si la variable globale "Alerte" contient "activé" [Nouveauté] GEA.setGlobalMessages Cette nouvelle fonctionnalité permet de mettre a jour une variable globale au lieu d'envoyé un message push. GEA.setGlobalMessages = {{"SARAH:", "parle"}, {"KAROTZ:", "Karotz"}} -- Indique au scénario que si le message contient "SARAH:" ou "KAROTZ:" le scénario doit mettre à jour la variable "parle" ou "Karotz" au lieu d'envoyé un message push. [Nouveauté] Repeat Vous pouvez ajouté un dernier paramètre à la fonction GEA.add pour indiquer si l'avertissement doit être répété ou non. GEA.add(71, 5*60, "Toilette r-c allumée") -- l'avertissement ne sera pas répété GEA.add(71, 5*60, "Toilette r-c allumée", true) -- l'avertissement sera répété GEA.add(71, 5*60, "Toilette r-c allumée", false) -- l'avertissement ne sera pas répété Version 1.30 - Refonte globale [supprimé] GEA.setGlobalMessages Cette fonctionnalité est remplacée par le paramètre {"Global", "MaVariable", "MaValeur"} [supprimé] Repeat Le paramètres Repeat a été supprimé et remplacé par le paramètre {"Repeat"} Version 1.40 [Ajouté] Paramètre {"Days", "..."} [Ajouté] Sunset et Sunrise {"Time", "Sunset", "Sunrise"} Version 1.41 [Fix] Suppression du message "hors plage horaires" prêtant à confusionVersion 1.42 [Fix] Si une plage horaires est définie et que la vérification à lieu dans cette même plage, le scénario ne contrôlait plus le paramètre {"Days"}Version 1.50 [Ajouté] Paramètre {"Value", <valeur>} Ce paramètre permet de modifier la valeur d'un périphérique. Utiliser principalement pour dimmer une lampe par exemple on dimme la lampe à 20% si elle est allumée plus de 10mn entre 22:00 et 06:00 puis après 20mn on l'éteint. GEA.add(31, 10*60, "", {"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(31, 20*60, "", {"Time", "22:00", "06:00"}, {"turnOff"}})Version 1.51 [Ajouté] Message d'avertissement lorsque le scénario est suspenduVersion 1.52 [Modifié] Trace plus clair en mode "debug"Version 1.55 [Optimisation] Optimisation du codeVersion 1.60 [Nouveauté] Ajout de déclencheur Avant, il n'était possible uniquement d'avoir comme déclencheur l'identifiant d'un périphérique et le système utilisait sont état (actif ou non). Il est maintenant possible d'avoir comme déclencheur une variable global ou la valeur d'un sensor (voir les derniers exemples)Version 1.70 [Nouveauté] Ajout des déclencheurs "Value+", "Value-" et "Dead" [Nouveauté] Ajout des actions "Email", "Label" et "WakeUp" [Nouveauté] Ajout de variables dans le message : time, duration, value, date, seconds, name Version 1.71 [Nouveauté] Possibilité de précisé un ID différent pour turnOn ou turnOff (ex : {"turnOff", 21})Version 1.80 [Nouveauté] Ajout des actions "Program", "RGB" et "Slider" [Nouveauté] Ajout de la propriété {"Group", 1} [Nouveauté] Ajout du déclencheur {"Group", 1} Version 1.81 [Fix] Gestion des groupesVersion 2.00 [Modification] Renommage du projet (anciennement Wdtiso)Version 2.01 [Nouveauté] Ajout de l'action {"Value", <id>, <valeur>} permettant de modifier la valeur d'un module autre que celui testéVersion 3.00 [Nouveauté] Ajout de l'action {"Open"} et {"Close"} permettant d'ouvrir fermer les volets [Nouveauté] Ajout de l'action {"Open", valeur} et {"Close", valeur} permettant d'ouvrir fermer les volets selon un pourcentage [Nouveauté] Ajout de l'action {"Open", id, valeur} et {"Close", id, valeur} permettant d'ouvrir fermer les volets du module (ID) selon un pourcentage [Nouveauté] Possibilité des déclencheurs %%properties et %%globales avec comme durée -1 Version 3.10 [Correction] Correction des modes {"Open", <id>, <value>} et {"Open", <id>, <value>} [Nouveauté] Ajout du paramètre {"DST"} permettant de vérifié l'heure d'été [Nouveauté] Ajout du paramètre {"If", {[{condition}][,{condition}[,...]]}} Permet de valider X conditions avant de lancer les actions Version 3.15 [Nouveauté] Ajout du paramètre {"NOTDST"} permettant de vérifié l'heure d'hiverVersion 3.20 [Fix] Correction des paramètres {"DST"} et {"NOTDST"} [Modification] Une correction est maintenant appliquée sur le délai entre 2 vérifications selon la durée de traitement des événements. Exemple, vous avez spécifier un intervalle de 30 secondes entre 2 passage. La durée de traitement est de 1 seconde, le nouveau délai sera donc de 29 secondes Version 3.21 [Modification] #duration# affiche dorénavant la vrai durée et au format Xh Xm Xs (La porte est ouverte depuis 5m 30s) [Nouveauté] Ajout de l'action {"Stop"} et {"Stop", <id>} Version 3.30 [Nouveauté] Ajout de l'options {"Dates", "01/01[/2014]", "31/01[/2014]"} [Nouveauté] Ajout de l'option {"Time", "Sunrise<07:30", "Sunset<22:00 [Nouveauté] Ajout de l'option {"Time", "Sunrise+20", "Sunset-100"} [Nouveauté] Ajout de la variable #durationfull# pour les message (3 heures 5 minutes 30 secondes) [Nouveauté] Les variables de message #time#, #duration#, #date#, ... sont utilisable dans les variables globales, les labels et les emails [Nouveauté] Supporte le format d'heure H:mm [Nouveauté] Ajout des options {"Armed"} et {"Disarmed"} [Nouveauté] Ajout de la condition {"Battery", <id>, <valeur max>} [Correction] Correction du paramètre {"Email", <id user>} [Optimisation]Isolation des commandes en cas d'erreur [Optimisation]Ajout de validations techniques Version 3.40 [Nouveauté] Ajout de la condition {"Batteries", <valeur max>} [Nouveauté] Ajout de la condition {"SceneActivation", <id module>, <id scene>} [Correction] détection activation/désactivation sur module RGB par @HANSOLO Version 3.50 [Nouveauté] Ajout des conditions {"Global+", <variable>, <valeur>} et {"Global+", <variable>, <valeur>} par @HANSOLO [Nouveauté] Ajout des conditions {"setArmed", <id>} et {"setDisarmed", <id>} [Correction] Erreur lorsqu'un module à pile ne retourne pas son information [Correction] Mode debug dans certains circonstance Version 3.51 [Correction] Batteries, la valeur n'était pas prise en compte et fixée à 80 [Correction] #durationfull# amélioration en utilisant le "et" (exemple : 1 heure et 30 minutes, 23 minutes et 30 secondes, 1 heure 20 minutes et 30 secondes,...) Version 3.60 [Nouveauté] Ajout de la condition {"Slider-", <id_vd>, <nom_slider>, <valeur>} [Nouveauté] Ajout de la condition {"Slider+", <id_vd>, <nom_slider>, <valeur>} [Nouveauté] Ajout de la condition {"Label", <id_vd>, <nom_label>, <contenu>} Version 3.61 [Correction] Les options Label et Slider introduit dans la v1.70 ne fonctionnaient pas correctementVersion 3.62 [Amélioration] Etat des capteurs (mouvement, porte, inondation) par @Shyrka973 [Amélioration] Coloration des logs pour plus de lisibilité (inspiré du Maestro @Krikroff) Version 3.65 [Amélioration] Déportation du code utilisateur en début de script, proposition de @fredo [Nouveauté] Ajout de l' action {"Global", <variable>, "inc+"} pour incrémenter de 1 automatiquement la variable [Nouveauté] Ajout de l' action {"Global", <variable>, "dec-"} pour décrémenter de 1 automatiquement la variable Version 3.70 [Amélioration] RGBW : permettre de spécifier chaque canal indépendamment par @Shyrka973Version 3.75 [Nouveauté] GEA devient multilingue. Par défaut le français est conservé.Version 3.80 [Nouveauté] Possibilité de stopper n'importe quel tâche {"StopTask", <id_task>}. [Nouveauté] Possibilité de redémarrer n'importe quel tâche {"RestartTask", <id_task>}. [Nouveauté] Possibilité de spécifier le nombre d’exécution d'une tâche {"MaxTime", <number>} [ATTENTION] Veuillez créer la variable globale GEA_Tasks Version 3.81 [Correction] {"StopTask", <id_task>}, {"RestartTask", <id_task>} et {"MaxTime", <number>} était issu d'une mauvaise implémentation. [Nouveauté] Add {"Global!", <variable>, <value>} Pour vérifier qu'une variable globale ne soit pas égale à la valeur. [Nouveauté] Ajout de la variable #runs# dans les messages pour savoir le nombre de fois que la tâche a été exécutée. [ATTENTION] Veuillez créer la variable globale GEA_Tasks Version 3.82 [Correction] réparation du {"Repeat"} cassé lors de la 3.81. (thanks jompa68) [Amélioration] Ajout du code de Shyrka973 affichant l'ID d'un module déclenchant GEA sans pour autant avoir de tâche à effectuer. Version 4.017 [Correction] Mise en phase avec la version du firmware 4.017. (thanks jompa68)Version 4.020 [Adaptation] Mise en phase avec la version du firmware 4.017 et plus. [Nouveauté] Multiple condition pour remplacer les If [Nouveauté] #value[index]#, #name[index]# et #room[index]# indexé par périphérique. Version 4.021 [Correction] Impossible d'éteindre un dimmer.Version 4.10 [Correction] Déclenchement instantané : prise en compte de Global!, Global+ et Global-. [Nouveauté] {"Weather", "rain"} permet de savoir s'il pleux [Nouveauté - condition] {"Property", <id_module>, <nom propriété>, <valeur>} Permet de savoir si la propriété <nom propriété> du module <id module> est égala à <valeur> [Nouveauté - condition] {"Property!", <id_module>, <nom propriété>, <valeur>} Permet de savoir si la propriété <nom propriété> du module <id module> est égala à <valeur> [Nouveauté - action] {"CurrentIcon", <id_module>, <id_icon>} Permet modiifier l'icone d'un module virtuel [Nouveauté - action] {"CopyGlobal", <ivar_source>, <var_dest>} Permet copy la variable global <var source> dans <var dest> [Nouveauté] Utilisation des regex pour Value, Property, Weather, Global, et Label ainsi que leur déclinaison. Version 5.00 [Correction] Message indiquant les piles faibles {Batteries} [Correction] #value[?]#, #room[?]# sont maintenant corrigé [Correction] Allumage et extinction des module RGB [Correction] {"Global", "", ""} ne fonctionne plus en 4.x et est maintenant transformer en "true" à la volée [Ajout] l'option {"NotStarted"} empêche une tache de démarrer automatiquement (c.f. RestartTask pour la démarrer) [Ajout] {"Email", <id utilisateur>[, <sujet>]} Le sujet du message peut maintenant être personnalisé. Attention, pour obtenir l'icone en 128x128, veuillez préalablement cliquer dessus avant de l'enregistrer. GEA._5_00.lua
  17. Did

    Heure d'été

    Bonjour, J'ai découvert une commande Lua "isdst" qui permet de savoir si nous sommes en heure d'été. On doit pouvoir stocker cette réponse "true" dans une variable Saison mais je ne sait pas si il y a une réponse "false" pour les mois d'hiver. Quelqu'un a une idée sur les lignes de commande Lua pour récupérer cette info dans le panneau des variables? Merci.
  18. Alerte Lumineuse RGBW sur détection de mouvement Avec le module RGBW, comme l'explique Fibaro, il est possible d'utiliser plusieurs formes d'alertes lumineuses, seul l'absence d'imagination est un frein. (Eau de la baignoire trop chaude, distance de garage minimum, température aquarium, état de la météo) à l'aide d'un bandeau à led RGB. Le fait d'avoir des "notifications" visuel est très intéressant pour moi, autant qu'une sirène lors d'une effraction. Ici, nous voulons juste être avertit lors d'une séance cinéma, qu'un intrus potentiel franchit une zone extérieur sous contrôle. Une sorte d'alarme silencieuse, qui ne dérange pas vos invités, mais vous incite à aller voir ce qu'il se passe. Il serait possible de pousser le vis plus loin avec une incrustation sur l'écran sous forme de PIP, provenant d'une caméra vidéo. Alerte lumineuse + confirmation par la caméra qu'il s'agit du chat, ou d'un réel intrus. Le script maintenant : Quand le détecteur de mouvement extérieur (69) est en alerte et armé Si uniquement il fait nuit (coucher du soleil par une variable) Alors déclencher alerte lumineuse (90) Avec un programme rouge clignotant (7) sous le meuble cinéma pendant 10 secondes Puis revenir à la couleur ou programme précédent. Cela fonctionne aussi bien si un programme complet était lancé ou juste une couleur fixe. à‡a a l'air bête et simple expliqué sur 3 lignes, mais c’était ici la complexité d'avoir les deux à la fois, et pas évident, Fibaro n'ayant pas tout permit de manière simple dans les blocs, ou pas. Au départ ça fonctionnait uniquement en couleur fixe. 69 est le détecteur de mouvement 90 le module RGBW Fibaro 7 est le numéro du programme RGBW a déclencher Les autres lignes sont commentés. Bonne bidouilles Merci @Krikroff pour m'avoir écrit ce script ! Sans sont aide je serais encore à la première ligne...cad celle là --[[ --[[ %% properties 69 value 69 armed Jour_Nuit %% globals --]] --Quand detecteur de mouvement rue est en alerte et armed local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(fibaro:getValue(69, "value")) > 0 and tonumber(fibaro:getValue(69, "armed")) > 0) ) --Et uniquement si il fait nuit (variable sur la semaine + coucher du soleil) --S'il fait jour aucune raison d'allumer les leds car je ne suis pas devant la TV and ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) --Alors allumer les led du meuble TV and ( tonumber(fibaro:getValue(90, "value")) > 0 ) or startSource["type"] == "other" ) then fibaro:call(90, "turnOn"); --Si un programme led est actif local currentProgramID = tonumber(fibaro:getValue(90, "currentProgramID")); if (currentProgramID > 0) then --stoper le prog en cours fibaro:call(90, "turnOff"); --lancer le programme ALERTE 7 fibaro:call(90, "startProgram", "7"); --Passer en lunimosite maximal 100 fibaro:call(90, "setValue", "100"); --Fait une pause de 10 secondes fibaro:sleep(10000); --apres 10 secondes, relancer le programme precedent fibaro:call(90, "startProgram", currentProgramID); else --get last color local colorSet = fibaro:getValue(90, "lastColorSet"); --set old color local RGBWTable= {}; local i = 1; for value in string.gmatch(colorSet,"(%d+)") do RGBWTable[i] = value; i = i + 1; end -- lance le prog ALERTE !!!! fibaro:call(90, "startProgram", "7"); fibaro:sleep(10000); -- apres 10 secondes, relance la couleur fixe --fibaro:call(90, "stopProgram", "7"); -- pas utile mais a activer si probleme de changement de couleur fibaro:call(90, "setColor", RGBWTable[1], RGBWTable[2], RGBWTable[3], RGBWTable[4]); end end
  19. kabutop

    Device Sabnzbd

    Hello, Pour ceux qui utilisent SABnzbd, voilà un petit module virtuel qui pourrait vous être utile. Ca ressemble à ca : Il est dispo ici https://raw.githubusercontent.com/eremid/hc2_sabnzbd/master/SABnzbd.vfib Vous avez aussi l'icone si vous voulez : https://raw.githubusercontent.com/eremid/hc2_sabnzbd/master/sa.png A+
  20. Bonjour, J'ai le code suivant dans une scene: --[[ %% properties %% globals mvt_EO_ceiling mvt_EO_wall --]] local startSource = fibaro:getSourceTrigger(); if ( ( tonumber(fibaro:getGlobalValue("mvt_EO_ceiling")) == tonumber("1") ) or ( tonumber(fibaro:getGlobalValue("mvt_EO_wall")) == tonumber("1") ) or startSource["type"] == "other" ) then fibaro:debug("source type: "..startSource['type']) if startSource['type'] == 'global' then fibaro:debug("source variable:"..startSource['varName']) fibaro:sleep(1*1000) if (startSource["varName"] == "mvt_EO_ceiling") etc... et lorsqu'il se lance sur changement des variables, il me donne une erreur en ligne 21 comme quoi le champ 'varName' n'a pas de valeur (nil value), alors même que le type contient bien 'global' comme le debug me le donne. Si quelqu'un a une idée... Merci par avance!
  21. lionel

    Filtration Piscine

    Avant que les beaux jours ne reviennent j ai créer ce petit script pour gérer le temps de filtration en fonction de la Température de la piscine (les retours sur une amélioration de celui sont les bienvenues) tout d abord ,j ai une créer un scénario qui: - ce lance tous les jours à 14 hrs - relève la température de la piscine - lance le script ci dessous --[[ %% properties %% globals --]] --filtration en route en fonction de le température de la piscine fibaro:debug("HC2 demarre le script le " .. os.date()); local MaVariable MaVariable=fibaro:getValue(112,'value')--module temperature piscine fibaro:debug('value = ' .. MaVariable) if (MaVariable >= '24' and MaVariable < '26') then sleep(288*100*1000) -- 8 heures fibaro:call(115,"turnOff") fibaro:debug(115) if (MaVariable >= '26' and MaVariable < '28') then sleep(360*100*1000) -- 10 heures fibaro:call(115,'turnOff') fibaro:debug(115) end end
  22. Bonjour, Encore un code de ma part : la gestion de volets extérieur automatiques. Mon idée est de faire de sorte que mes volets soient commandés de façon semi auto en journée, lors des chaleurs dà»es a l'été pour éviter de faire rentrer trop de chaleur dans la maison (et ainsi ne pas utiliser de clim). L'installation est plus ou moins prévue pour ma maison, car j'ai une double orientation, donc 2 sondes extérieures, et 2 groupes de volets. Il me reste a finir : la gestion des volets non basé sur des modules roller shutter (voir ma bidouille pour commander des stores SSL de Velux la : http://blog.oav.net/dotclear/index.php?post/2014/03/07/How-to-interface-a-Velux-Solar-powered-roller-shutter-and-ZWave-Domotic-box... la gestion de l'hivers avec ouverture en cas de soleil la gestion des orages toute l'année pour fermer tous les volets (y compris les velux) pour éviter ... d'avoir des dégâts (ou les limiter) Il y a plusieurs variables a configurer : tempsensors: les sondes de température à l'extérieur et à l'ombre. Ici 34 & 123 a_shutters: les roller shutter associés au sondes de température extérieures (ici les volets 96 & 218 sont associés à la sonde 34, et le volet 97 à la sonde 123) shutter_sensors: les détecteurs d'ouvertures qui correspondent aux fenêtres des volets pour tester si la fenêtre/porte est ouverte shutter_close: comme j'ai 3 type de fenêtre, les positions "été" sont souvent pas les même templimit: la temperature extérieure à partir de laquelle les volets vont être fermés minhour et minminutes : heure a laquelle on force la levée des volets le matin. C'est l'option WAF qui permet de dormir le week-end et éviter que les volets s'ouvrent automatique par beau temps, lors.... du lever de soleil. Dans mon code cette valeur est 10h30. debug: si vous voulez du debug ou pas. En option la variable shutter_open est la valeur à laquelle vous voulez que la position "ouvert" soit configuré (içi 99.0 = défaut du HC). A noter que le programme recherche une variable mise par l'excellent scheduler de robmac : -- Nuit et Jour luaDaySchedule:add("Sunset","NightTime", "1" , "setGlobal", {"All"} , true , - 11) luaDaySchedule:add("Sunrise","NightTime", "0" , "setGlobal", {"All"} , true , 11 ) Voici le code, je ne l'ai pas encore mis sur mon GIT public --[[ %% properties 3 WeatherConditionConverted %% globals --]] -- Version 1.0.3 - (C) Xavier Beaudouin under the MPL 1.1 LICENSE -- set here sensors local tempsensors = { 34, 123 }; -- Create array with same index than temp sensors (used to cache max temps per day) local max_temp = { [34] = -99.0, [123]= -99.0, }; -- Roller Shutter associated (ONLY ROLLER SHUTTER !) to the sensors local a_shutters = { [34] = { 96, 218 }, [123] = { 97 }, }; -- Door sensors associated to Roller Shutter local shutter_sensors = { [96] = 77 , [97] = 75 , [218]= 83 , }; -- set limit when shutter has to go down local templimit = 25.0; local shutter_open = 99.0; -- Adjust with the right numbers needed to get right calibration. local shutter_close = { [96] = 44.0, [97] = 40.0, [218]= 20.0, }; -- Hour and minute in the morning when shutter are not to be upped if -- current time is below this hour and minutes local minhour = 10; local minminutes = 30; -- debug or not debug = true; -- Don't change anthing there -- Variable delay stuff depending of meteo and night -- sleepdelta is number of 10 minutes respawn of this script local sleepdelta = 1; -- Avoid multiple launch of this script if (fibaro:countScenes()>1) then fibaro:debug('Second instance closed') fibaro:abort(); end -- functions function mydebug(string) if (debug) then fibaro:debug(string); end end function checktime() local todayIs = os.date("*t"); local destdate = os.time{year=todayIs.year,month=todayIs.month, day=todayIs.day, hour=minhour, min=minminutes}; local currenttime = os.time(); mydebug("Time is : "..todayIs.hour..":"..todayIs.min); mydebug("Comparing to "..minhour..":"..minminutes); mydebug("Current time is : "..currenttime); mydebug("Dest time is : "..destdate); if (currenttime < destdate) then mydebug("Time is < -> ok"); return true; else mydebug("Current time is > "); return false; end return false; end function check_shutter(shutters, what) local value; mydebug("-- check_shutter()"); for s,z in ipairs(shutters) do if (what == "up") then value = shutter_open; elseif (what == "down") then value = shutter_close[z]; end local cur_shutter = tonumber(fibaro:getValue(z, "value")); local shutter_name = fibaro:getName(z); mydebug("--- Shutter "..shutter_name.."("..z..") is currently : "..cur_shutter.." comparing to command : "..value); if (what == "up") then if (cur_shutter >= value) then mydebug("---- Shutter is ok, skip"); else if (checktime()) then mydebug("---- Current time is < to ".. minhour..":"..minminutes.." : don't up the shutter"); else mydebug("---- Shutter is to be upped"); fibaro:call(z, "setValue", value); end end elseif (what == "down") then if (cur_shutter <= value) then mydebug("---- Shutter is ok, skip"); else mydebug("---- Shutter has to be downed"); -- Check if door is open. If not, then close the shutter local door_is_open = tonumber(fibaro:getValue(shutter_sensors[z], "value")); if (door_is_open == 1) then mydebug("----- Door / Window is open : don't close "..z); else mydebug("----- Yes we close "..z); fibaro:call(z, "setValue", value); end end end -- Sleep for 10 seconds mydebug(" 10 sec sleep"); fibaro:sleep(10*1000); end return 0; end function do_shutter_work() -- Do the real Shutter work sleepdelta=1; fibaro:debug("- Now figure if we need to get down shutter"); for i,v in ipairs(tempsensors) do local cur_temp = tonumber(fibaro:getValue(v, "value")); local temp_name = fibaro:getName(v); fibaro:debug("- Sensor "..temp_name.."("..v..") has temperature "..cur_temp.."°C"); -- Update the cache if needed. if (cur_temp > max_temp[v]) then fibaro:debug("- Update cache for "..v); max_temp[v] = cur_temp; if (cur_temp > templimit) then fibaro:debug("-- Temp is out limit"); check_shutter(a_shutters[v], "down"); end else if (cur_temp < templimit) then fibaro:debug("-- Temp is under limit"); check_shutter(a_shutters[v], "up"); end end end end -- main code while true do -- Check it this is night if ( fibaro:getGlobalValue("NightTime") == "0") then local meteo = fibaro:getValue(3, "WeatherConditionConverted"); -- Meteo can be : clear, fog, cloudy fibaro:debug("Weather is ".. meteo); if (meteo == "clear") then do_shutter_work(); else if (meteo == "cloudy") -- Even if meteo is cloudy it can be hot then do_shutter_work(); else -- Sleep for 20 Minutes sleepdelta=2; end end else fibaro:debug("This is night, nothing to do..."); -- Reset the temperature to default values for i,v in ipairs(tempsensors) do max_temp[v] = -99.0; end -- Sleep for one hour sleepdelta=6; end if (sleepdelta == 0) then sleepdelta = 1; -- 10 Minutes end fibaro:debug("Sleep for "..(sleepdelta*10).." minutes..."); fibaro:sleep(sleepdelta*600*1000); end Historique : Version 1.0.0 : version initiale Version 1.0.1 : - Ajout d'un système de cache pour éviter que les volets ne fassent monter et descendre lors de baisse faible de température. Le volet ne descendra QUE si la temperature ne fait que monter. Version 1.0.2: - Ajout d'une tempo de 10 secondes entre 2 commandes ZWave (important quand on a beaucoup de modules) Version 1.0.3: - Ajout de la fonction WAF qui permet de ne pas ouvrir le volet quand il fait beau ou nuageux en même temps que le soleil. Teste si le volet est fermé, dans cas "ne fait" rien jusqu'à l'heure indiquée. Merci de me donner tout patches, correctif, ou idée de code a intégrer.
  23. Voici un script de rafal.m repris sur le forum officiel. Ce script permet de basé l'éclairage automatique d'une salle de bain, toilette ... Sur l'ouverture d'une porte pour un fgk-101. Je n'ai pas retesté ce script depuis les modifications de l'alarme, je l'ai modifier pour utiliser une variable globale. -- NOTICE TO CHANGE DEVICES ID's: --[[ %% properties 7 value 17 value %% globals --]] -- BATHROOM SCENE FUNCTIONALITY: -- No extra Global variables needed! -- Automatic light depending of opening and closing door -- Time to enter - detecting another situations, like cleaning bathroom -- NOTICE TO CHANGE DEVICES ID's: doorID = 7; lightID = 17; -- time to enter, longer time will detect as another situation, like: cleaning timeToEnter = 10; local light = fibaro:getValue(lightID, 'value'); local door = fibaro:getValue(doorID, 'value'); local armed, lastArmed = fibaro:get(doorID, 'armed'); local trigger = fibaro:getSourceTrigger(); if (fibaro:countScenes()>1) then fibaro:debug('Kill second scene!'); fibaro:abort(); end if (trigger['type']=='property') then -- door trigger if (trigger['deviceID']==tostring(doorID)) then -- door opened if (door=='1') then fibaro:debug('Door opened.'); if (armed=='0') then fibaro:call(lightID, 'turnOn'); fibaro:call(doorID, 'setArmed', '1'); fibaro:call(doorID, 'setArmed', '0'); fibaro:debug('Light on!'); end -- door closed elseif (door=='0') then fibaro:debug('Door closed.'); if (armed=='1' or (os.time()-lastArmed)>=timeToEnter) then fibaro:call(lightID, 'turnOff'); fibaro:call(doorID, 'setArmed', '0'); fibaro:debug('Light off, room empty!'); else fibaro:call(doorID, 'setArmed', '1'); fibaro:debug('Someone inside!'); end end -- light manual elseif (trigger['deviceID']==tostring(lightID) and (os.time()-lastArmed)>0) then -- light manual off if (light=='0') then if (door=='1') then -- when door are opened fibaro:call(doorID, 'setArmed', '1'); else -- when door are closed fibaro:call(doorID, 'setArmed', '0'); end fibaro:debug('Light manual off!'); -- light manual on elseif (light=='1') then fibaro:call(doorID, 'setArmed', '1'); fibaro:debug('Light manual on, arming...'); end end end
  24. Pour fêter ma nomination à l'élection du "Membre du mois de mai" je vous propose mon nouveau jouet... Il y a 2 jours, j'ai rêvé d'envoyer un message à la HC2 par sms pour qu'il soit diffusé sur squeeze, Karotz, sonos ou tout autre système du même type. La HC2 ne peut pas recevoir de sms (pour le moment du moins), je me suis donc dit qu'il fallait utiliser un autre moyen. L'idée est donc de modifier le contenu d'une variable qui sera ensuite utilisée avec google Translate pour être prononcée : http://translate.google.com/translate_tts?tl=FR&ie=UTF-8&q=j'arrive%20dans%205%20minutes Il me fallait donc un moyen pour modifier le texte "j'arrive dans 5 minutes" de cette variable -> Donc créer un clavier ! Comme ce clavier sera utilisé sur téléphone ou tablette pour écrire des petits messages : Premièrement, je ne me suis pas embêté avec : • la ponctuation qui se résume à un "point" et un "Espace" (placés 2 fois en haut et bas du clavier pour plus de souplesse). • les caractères spéciaux puisque l'on peut s'en passer et se débrouiller ("français" s'écrira "fransser" ; "Porte d'entrée" s'écrira "porte d'entrer" ou porte dantrer"). Deuxièmement, je me suis créé des petits boutons raccourcis qui écrivent directement dans la variable : • "J'arrive d" -> "J'arrive dans " • "minutes" -> " minutes " • "Merci" -> " merci " • "Devoirs" -> "C'est l'heure de faire les devoirs" • "C'est l'heure" -> "C'est l'heure d'y aller" Du coup en utilisant 4 boutons je peux dire "J'arrive dans 15 minutes". Passons au visuel du clavier : Je ne suis pas chez moi, alors je ne peux pas exporter le module virtuel. Mais je le poste dès demain (à moins que quelqu'un sache comment faire de l'extérieur - même pas réussi avec un VPN...). MAJ : Voici le Module à télécharger : N'oubliez pas de renseigner l'adresse MAC de votre/vos Squezebox dans le bouton lecture. Messager.vfib L'utilisation du clavier pour modifier le contenu d'une variable pourra être décliné pour d'autres utilisations que celle-ci. Je pensais à afficher un message sur les squeezerbox ou un autre support (en guise de Post It)... à envoyer un message en push sur la tablette des gamins, ou le téléphone de madame qui ne capte pas le réseau 3G/GSM mais qui est connecté au wifi... Si vous avez d'autres idées n'hésitez pas !
  25. Le script de BenjyNet m'a donné un idée pour des rubans leds que j'ai chez moi au niveau de la télé, l'idée est de démarrer les leds quand il fait nuit et quand la télé marche donc tire du jus sur le wallplug ou elle est branchée. J'ai fais le script suivant: --[[ %% autostart %% properties %% globals --]] -- Allumage led fonction conso wallplug v 1.0.0 [03-2014] -- Copyright © 2014 lolomail local sourceTrigger = fibaro:getSourceTrigger(); local current_conso = 0; if ( (sourceTrigger["type"] == "autostart") and ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" ) ) then while true do local current_conso = tonumber(fibaro:getValue(66, "valueSensor")); fibaro:debug("Conso wallplug " ..current_conso); if current_conso > 80 then fibaro:debug(os.date() .. " - Télé allumée"); fibaro:debug(os.date() .. " - LEDs allumées"); if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then fibaro:call(132, "turnOn"); end if ( tonumber(fibaro:getValue(133, "value")) < 1 ) then fibaro:call(133, "turnOn"); end end if current_conso < 80 then fibaro:debug(os.date() .. " - Télévision éteinte"); fibaro:debug(os.date() .. " - LEDs éteintes"); if ( tonumber(fibaro:getValue(132, "value")) > 1 ) then fibaro:call(132, "turnOff"); end if ( tonumber(fibaro:getValue(133, "value")) > 1 ) then fibaro:call(133, "turnOff"); end fibaro:sleep(10*1000) end end end Il me démarre nickel les rubans quand la conso de la télé passe au delà de 80w mais quand j'éteins, il n'éteint pas les rubans. J'ai fais une coquille? Merci Laurent
×