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

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. Ce bout de code LUA permet de faire un Ping sur un équipement de votre réseau. Première publication sur le Forum Fibaro ici http://forum.fibaro.com/viewtopic.php?t=1927 Les variables sont les suivantes: deviceIp : Adresse IP du périphérique réseau à contacter. devicePort : Port maxRetryProcess : Nombre de tentatives pour contacter le périphérique. --[[ %% properties %% globals --]] -- Ping v 1.0.1 [05-2013] -- Copyright © 2013 Jean-christophe Vermandé fibaro:log("Start process"); local _deviceIp = "192.168.1.250"; local _devicePort = 80; 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."); else fibaro:log("Device was not found!"); end else fibaro:log("Error: " .. f); end Notez l'utilisation de la fonction LUA pcall qui permet l’exécution du code en mode "protégé" ou "encapsulé", c'est à dire qu' il ne lèvera pas d' erreur dans le processus de votre box si jamais le code provoquait une erreur. La box est protégée, vos scènes aussi .
  2. Voici un autre script publié sur le forum Fibaro http://forum.fibaro.com/viewtopic.php?p=16320 pour démarrer un ordinateur complètement éteint à partir du réseau: "wake on lan". La seule chose à faire ici est de remplacer "00:00:00:00:00:00" par votre adresse mac. Utilisez ce code dans le bouton d'un périphérique virtuel. Je l'utilise pour démarrer mon micro serveur HP. --[[ %% properties %% globals --]] -- Wake On Lan v 1.0.0 [02-2013] -- Copyright © 2013 Jean-christophe Vermandé -- convert MAC adress, every 2 Chars (7-bit ASCII), to one Byte Char (8-bits) function convertMacAddress(address) local s = string.gsub(address, ":", ""); local x = ""; -- will contain converted MAC for i=1, 12, 2 do x = x .. string.char(tonumber(string.sub(s, i, i+1), 16)); end return x; end fibaro:log("Start process"); local _selfId = fibaro:getSelfId(); -- MAC adress local _macAddress = convertMacAddress("00:00:00:00:00:00"); -- Create Magic Packet 6 x FF local _magicPacket = string.char(0xff, 0xff, 0xff, 0xff, 0xff, 0xff); -- Broadcast Address local _broadcastAddress = "255.255.255.255"; -- Default port used local _wakeOnLanPort = 9; fibaro:sleep(750); for i = 1, 16 do _magicPacket = _magicPacket .. _macAddress; end fibaro:log("Magic packet successfully created"); fibaro:sleep(1000); socket = Net.FUdpSocket(); socket:setBroadcast(true); local bytes, errorCode = socket:write(_magicPacket, _broadcastAddress, _wakeOnLanPort); --check for error if errorCode == 0 then fibaro:log("Successfully sent"); else fibaro:log("Transfer failed"); end -- clean up memory socket = nil; fibaro:sleep(1000); fibaro:log("Please wait for the server startup.");
  3. Bonjour, Sur le post du script pour le contrôle du niveau des piles j'ai abordé le sujet nÅ“uds morts pour les détecter et voici un script tip top qui/ - Contrôle les nÅ“uds morts, - Chercher a les réveiller, - Envoie des notifications pour avertir --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( (tonumber(os.date("%H%M")) >= tonumber(string.format("%02d%02d", "07", "00")) and tonumber(os.date("%H%M")) <= tonumber(string.format("%02d%02d", "23", "00"))) and (math.floor(os.time()/60)-math.floor(1369026000/60))%2 == 0 ) ) then local i = 1 local TotalDevices = 156 + 1 while i < TotalDevices do local status = fibaro:getValue(i, 'dead'); if status == "1" then fibaro:setGlobal('lastDeadNode', i); -- fibaro:call(30, "pressButton", "6"); fibaro:call(1, "wakeUpDeadDevice",i); fibaro:debug("Try to wake up node "..i); fibaro:call(68, "sendPush", "Try to wake up node "..i); fibaro:sleep(5*1000); local status = fibaro:getValue(i, 'dead'); if status == "1" then fibaro:debug("Device "..i.." still dead"); fibaro:call(68, "sendPush", "Device "..i.." still dead"); -- fibaro:call(30, "pressButton", "6"); -- fibaro:call(65, "sendDefinedPushNotification", "9"); -- fibaro:call(2, "sendEmail", "DEAD "..i); else -- fibaro:call(30, "pressButton", "7"); fibaro:debug("Device "..i.." fixed"); fibaro:call(68, "sendPush", "Device "..i.." fixed"); end else end i = i + 1 end end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then fibaro:debug("send notification"); fibaro:call(68, "sendPush", "start check dead node"); local i = 1 local TotalDevices = 156 + 1 while i < TotalDevices do local status = fibaro:getValue(i, 'dead'); if status == "1" then fibaro:setGlobal('lastDeadNode', i); -- fibaro:call(30, "pressButton", "6"); fibaro:call(1, "wakeUpDeadDevice",i); fibaro:debug("Try to wake up node "..i); fibaro:call(68, "sendPush", "Try to wake up node "..i); fibaro:sleep(5*1000); local status = fibaro:getValue(i, 'dead'); if status == "1" then fibaro:debug("Device "..i.." still dead"); fibaro:call(68, "sendPush", "Device "..i.." still dead"); -- fibaro:call(30, "pressButton", "6"); -- fibaro:call(65, "sendDefinedPushNotification", "9"); -- fibaro:call(2, "sendEmail", "DEAD "..i); else -- fibaro:call(30, "pressButton", "7"); fibaro:debug("Device "..i.." fixed"); fibaro:call(68, "sendPush", "Device "..i.." fixed"); end else end i = i + 1 end end end Voici le script,son auteur est Olivier MALE. Il faut l'adapter pour le N° d'ID pour le push. Son auteur a aussi mis des "--" devant certaines lignes de notifications push et de virtual device, perso j'ai supprimé ces lignes. Le script fonctionne nickel chez moi.
  4. Je ressors un vieux bout de lua basé sur les équations de robert penner et posté à l'origine ici http://forum.fibaro.com/viewtopic.php?t=1656 Tout est dans le titre. Vous pouvez utiliser cette scène de manière autonome ou bien dans le cadre d'une programmation horaire . Amusez vous bien Pour la mise en place, il faut créer donc une nouvelle scène en mode LUA puis copier le code ci-dessous. ensuite, renseigner tous les identifiants des périphériques de type "dimmer" dans la variable devices, c'est eux qui varieront d'intensité lumineuse. local devices = {23, 45, 55}; Renseigner dans la variable local curve = "inExpo" la courbe choisie pour la variation lumineuse ou bien conserver celle par défaut. cf. tableau des courbes. local duration = 20; La variable duration correspond à la durée totale en seconde de la scène pour faire une transition de la valeur basse à la valeur haute. --[[ %% properties %% globals --]] fibaro:debug("HC2 start script at " .. os.date()); -- LUA - Dawn simulator V1.0.1 -- -- Wake up "naturally", illuminated by a soft light and progressive. -- Based on open source Robert Penner's original easing equations (Copyright © 2001 Robert Penner) -- Copyright © 2013 Jean-christophe Vermandé -- USER SETTINGS : -- Type of equation used to generate the curve (dimming). -- Possible values are: linear, inQuad, inExpo, outExpo, inOutQuad, inOutExpo, outInExpo local curve = "inExpo"; -- Type of equation used to generate the curve (dimming). local debug = false; -- To log in HC2 debug area local devices = {36}; -- IDs of devices to be varied (only dimmable device), eg. {1, 16, 10} local startValue = 0; -- Begin value local endValue = 100; -- End value local duration = 100; -- Execution time in seconds of the scene -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- dawnSimulatorEngine = { version = "1.0.1" }; function dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug) self._lastValue = 0 self._startValue = startValue or 0; self._endValue = endValue or 100; self._duration = duration or 1; self._devices = devices or {}; self._curve = equations.map[curve or 'linear']; -- require 'equations' to operate self._debug = debug or true; end function dawnSimulatorEngine:_update(value) self._lastValue = value; -- keep in memory the last value to compare later -- loop in deveices local name, id; for i=1, #self._devices do id = tonumber(self._devices[i]); fibaro:call(id, "setValue", value); if (self._debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " setValue: " .. value); end end end function dawnSimulatorEngine:_compute(time) return math.ceil(tonumber(self._curve(time, self._startValue, self._endValue, self._duration))); end function dawnSimulatorEngine:start() local computedValue; local doWhile = true; local time = 0; -- timeline while (doWhile == true) do computedValue = self:_compute(time); -- prevent multiple call with same value if (computedValue ~= self._lastValue) then -- update device value self:_update(computedValue); end time = time + 1; if (time > self._duration) then doWhile = false; if (self._lastValue < self._endValue) then -- force target value self:_update(computedValue); end else fibaro:sleep(1000); end -- do while end end -- Easing function (Penner's Easing Equations) equations = equations or { version = "1.0.1", -- Linear linear = function(t, b, c, d) return c * t / d + b; end, -- InQuad inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end, -- InOutQuad inOutQuad = function(t, b, c, d) t = t / d * 2; if t < 1 then return c / 2 * math.pow(t, 2) + b; else return -c / 2 * ((t - 1) * (t - 3) - 1) + b; end end, -- InOutExpo inOutExpo = function(t, b, c, d) if t == 0 then return b end if t == d then return b + c end t = t / d * 2; if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005; else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b; end end, -- OutInExpo outInExpo = function(t, b, c, d) if t < d / 2 then return equations.outExpo(t * 2, b, c / 2, d); else return equations.inExpo((t * 2) - d, b + c / 2, c / 2, d); end end, -- InExpo inExpo = function(t, b, c, d) if t == 0 then return b; else return c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001; end end, -- OutExpo outExpo = function(t, b, c, d) if t == d then return b + c; else return c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b; end end }; -- Equations map equations.map = { ['linear'] = equations.linear, ['inQuad'] = equations.inQuad, ['inExpo'] = equations.inExpo, ['outExpo'] = equations.outExpo, ['inOutQuad'] = equations.inOutQuad, ['inOutExpo'] = equations.inOutExpo, ['outInExpo'] = equations.outInExpo } -- START SIMULATOR ENGINE if (debug) then fibaro:debug("Starting the process"); end --startEngine(equations.map[curve]); dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug); dawnSimulatorEngine:start(); if (debug) then fibaro:debug("End of the process"); end
  5. Script pour connaitre la capacité et être averti par e-mail en cas de "piles faibles" sur un ou des modules Créer une Scène en Lua et insérer ce code : --[[ %% properties %% globals --]] local batterieDevice = "1" local minbattSeuil = 70 -- Saisir le seuil mini d'alerte ici! local i = 0 local maxNodeID = 250 for i = 0, maxNodeID do local type = fibaro:get (i, "isBatteryOperated"); x , y = string.find (type, batterieDevice ) local niveauBatterie = tonumber(fibaro:getValue (i, "batteryLevel")) if x ~= nill and niveauBatterie ~= nill and (niveauBatterie <= minbattSeuil or minbattSeuil == 255) then local nom = fibaro:getName(i) fibaro:debug("Device "..i.."="..nom.." Niveau Batterie="..niveauBatterie) fibaro:call(4, "sendEmail", "Alerte Batterie", "Piles faibles module: "..nom) end end Vous avez juste à spécifier à partir de quel seuil vous souhaitez être averti . Dans cet exemple, je vais recevoir un mail pour chaque module en dessous de 70%.(changer l'ID "sendEmail" par celui souhaité) Vous pouvez aussi remplacer "sendEmail" par "sendPush" pour une notification Vous pouvez lancer la scène manuellement périodiquement . Personnellement, j'ai créé une autre scène qui exécute celle-ci tous les jours. Auteur original du script : Jompa68
  6. Checker l'éclairage chez soi Exécution automatique d'un script qui vérifie si toutes les lumières sont éteintes au départ de chez soi. NB : Je ne suis pas un spécialiste de LUA et mes connaissances en programmation datent de plus de 20 ans (inutile de m'appeler papy ) L'exemple ci-dessous est une adaptation d'un script de contrôle de fenêtres écrit par @quikdav...j'espère qu'il rejoindra ce forum Cette scène est exécutée automatiquement au départ de chez moi Quelques précisions : - "wallplug" et "interrupteur" sont des variables locales de type "table" - les valeurs entre parenthèses bouclées, sont les ID des modules Fibaro (Wall plug FGP111 / Dimmer FGD111). Elles sont séparées par des virgules - Le script va lire les valeurs d'une table dans une boucle : "for i = 1, #wallplug do" par exemple - Ces valeurs sont utilisées dans les commandes : "fibaro:getValue" - "tonumber" permet de changer le type de variable de "caractères à "nombre" - la variable "request" recueille le message à envoyer : une concaténation de textes et de variable - les deux lignes suivantes permettent d'envoyer le message par l'outil "Prowl" que j'expliquerai dans un futur post fibaro:setGlobal('pushnotification', request); fibaro:call(46, "pressButton", "3"); -- Message Prowl Voilà donc un premier post à propos de LUA Et n'hésitez pas dans vos remarques ! --[[ %% properties %% globals --]] wallplug = {6, 67, 68, 69} -- id des wallplugs interrupteur = {22, 50, 51, 87} -- id des interrupteurs local startSource = fibaro:getSourceTrigger(); local bconso = 0 -- contrôle wall plug for i = 1, #wallplug do local wallplugname = fibaro:getName(wallplug[i]); local request -- contrôle si conso supérieure à 1W (halogène consomme 0.5 à l'arrêt) if (tonumber(fibaro:getValue(wallplug[i], "valueSensor")) > 1) then -- remplace les espaces par des %20 pour que cela puisse être interprété dans une URL wallplugname = string.gsub(wallplugname, " ", "%%20") request = 'La%20lampe%20'..wallplugname..'%20est%20allumée'; fibaro:debug(request); fibaro:setGlobal('pushnotification', request); fibaro:call(46, "pressButton", "3"); -- Message Prowl bconso = 1 fibaro:sleep(2000); end end -- contrôle interrupteurs for i = 1, #interrupteur do local interrupteurname = fibaro:getName(interrupteur[i]); local request if (tonumber(fibaro:getValue(interrupteur[i], "value")) > 0) then -- remplace les espaces par des %20 pour que cela puisse être interprété dans une URL interrupteurname = string.gsub(interrupteurname, " ", "%%20") request = 'La%20lampe%20'..interrupteurname..'%20est%20allumée'; fibaro:debug(request); fibaro:setGlobal('pushnotification', request); fibaro:call(46, "pressButton", "3"); -- Message Prowl bconso = 1 fibaro:sleep(2000); end end if (bconso == 0) then request = "Aucune%20lampe%20n'est%20allumée"; fibaro:debug(request); fibaro:setGlobal('pushnotification', request); fibaro:call(46, "pressButton", "3"); -- Message Prowl end
  7. 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
×