This is an old revision of the document!


3- Liste des scripts LUA


1- Modifier la couleur d’une lumière Led en fonction de la température de la pièce

By captainigloo

But : Script permettant de modifier la couleur d’une led RGB en fonction de la température de la pièce

-- Title: Set RGB light output depending on Temperature
-- 
-- Description :
-- Set white color if temp is < 10°C
-- Set light blue color if temps is between 10 and 15
-- Set dark blue color if temp is between 15 and 19
-- Set green color if temp is between 19 and 22
-- Set Yellow color ir temp is between 22 and 25
-- Set Orange color if temp is between 25 and 28
-- Set Red color if temp is greater than 28
--
-- Inputs 
--   * input_4 : N° entrée Temperature
-- Output
--   * output_6 : N° Sortie RGB light
-- Events
-- This script may be launched on input_4 changes

local temp = calaos:getInputValue("input_4")
if temp < 10.0 then
    --blanc
    str = "set 0x60FFFF"
elseif temp >= 10.0 and temp < 15.0 then
    --bleu clair
    str = "set 0x28FFFF"
elseif temp >= 15.0 and temp < 19.0 then
    --bleu foncé
    str = "set 0x0060FF"
elseif temp >= 19.0 and temp < 22.0 then
    -- vert
    str = "set 0x28FF28"
elseif temp >= 22.0 and temp < 25.0 then
    -- Jaune
    str = "set 0x7AFF00"
elseif temp >= 25.0 and temp < 28.0 then
    -- Orange
    str = "set 0xFFFF00"
elseif temp > 28.0 then
    -- Rouge
    str = "set 0xFF3D00"
end
calaos:setOutputValue("output_6", str)
return true


2- Envoyer un SMS via Free suivant un évènement donné

By captainigloo

But : Script permettant d’envoyer un message par SMS en fonction d’une condition. Attention ne fonctionne qu’avec free. Voir le tuto complet ici : Utilisation du systeme de notifications par sms de free

function urlencode(str)
   if (str) then
      str = string.gsub (str, "\n", "\r\n")
      str = string.gsub (str, "([^%w ])",
         function (c) return string.format ("%%%02X", string.byte(c)) end)
      str = string.gsub (str, " ", "%%20")
   end
   return str    
end

local user = "username"
local pass = "password"
local msg = "le message à envoyer en fonction de la règle"

calaos:requestUrl("https://smsapi.free-mobile.fr/sendmsg?user="..user.."&pass="..pass.."&msg="..urlencode(msg))

return true


3- Gestion d'un chauffage

By Raoulh

But : Script permettant de gérer le chauffage en fonction de la température des panneaux solaires du ballon EC et du plancher.

print("script chauffage start")
 local temp_panneaux = calaos:getInputValue("input_temp_3")
 local temp_ballonh = calaos:getInputValue("input_temp_0")
 local temp_plancher = calaos:getInputValue("input_temp_2")
 local consigne = calaos:getInputValue("intern_10")
 local consigne_ballon = calaos:getInputValue("intern_1")
 local consigne_plancher = calaos:getInputValue("intern_0")

 if temp_panneaux >= (temp_ballonh + consigne) then
     -- active pompe solaire si < max
     if temp_ballonh < 70 then
         calaos:setOutputValue("output_chauff_2", true)
     else
         calaos:setOutputValue("output_chauff_2", false)
     end

     -- force stop elect resistance
     calaos:setOutputValue("output_chauff_1", false)

     active_elec = false
 end

 -- Arret de la pompe solaire si temperature panneau insuffisante
 if temp_panneaux <= temp_ballonh then
     -- stop pompe solaire
     calaos:setOutputValue("output_chauff_2", false)

     active_elec = true
 end

 -- start/stop elec si consigne et active elec
 if active_elec then
     if temp_ballonh <= consigne_ballon then
         calaos:setOutputValue("output_chauff_1", true)
     end
     if temp_ballonh > (consigne_ballon + 1) then
         calaos:setOutputValue("output_chauff_1", false)
     end
 end

 -- start/stop plancher pompe si consigne
 if temp_plancher <= consigne_plancher then
     calaos:setOutputValue("output_chauff_0", true)
 end
 if temp_plancher > (consigne_plancher + 1) then
     calaos:setOutputValue("output_chauff_0", false)
 end

 -- pas besoin d'action, toujours retourner false
 return false


4- Gestion de l'alimentation d'un transfo de rubans leds

By Raoulh & Eric64

But : Script permettant de gérer la mise en route d'un transformateur 220v/24v pour l'allumage de led.

Précisions : plusieurs cordons leds sont allimentés par le même transfo. Nous souhaitons que le transfo soit éteint lorsqu'aucune led n'est allumée et pouvoir allumer ou éteindre le transfo lorsque le système détecte un changement d'état d'une led.

A noter : Calaos V2 ne gère pas les rubans led RGBW. Il faut donc créer 2 lumières DMX, une pour le RGB l'autre pour le W.

A créer dans CALAOS INSTALLER :

- IO inter_booleen. "active_bloc" : Elle va nous permettre de signaler un changement d'état des leds
- lumière : cette lumière est "fictive". Elle sert 

Règles à créer pour chaque lumière :

SI RGBplafond == changed
 ALORS active_bloc = toggle

Règle pour gérer le transfo :

SI active_bloc = changed
 ALORS exécution du script

Script :

 local RGBplafond = calaos:getOutputValue("output_55")  -- lumière RGB du plafond
 local Wplafond = calaos:getOutputValue("output_72")  -- lumière W du plafond
 local RGBmeuble = calaos:getOutputValue("output_73")  -- lumière RGB des meubles
 local Wmeuble = calaos:getOutputValue("output_74")  -- lumière W des meubles
 local RGBplinthes = calaos:getOutputValue("output_75")  -- lumière RGB des plinthes
 local Wplinthes = calaos:getOutputValue("output_76")  -- lumière W des plinthes

-- SI une lumière est différente de 0 (donc n'est pas éteinte)
 if RGBplafond ~= "0" or Wplafond ~= "0" or RGBmeuble ~= "0" or Wmeuble ~= "0" or RGBplinthes ~= "0" or Wplinthes ~= "0"
 then
    -- ALORS allume le bloc
    calaos:setOutputValue("output_81", true)  -- output_81 correspond à la lumière "Fictive" et donc au relais du transfo
 else
    -- SINON coupe le bloc
    calaos:setOutputValue("output_81", false)
 end
 return true


5- Conserver la valeur d'un appui sur un BP dans une variable

By eric64

But : Script permettant de donner une valeur True ou False à une variable lors de l'appui sur un BP pour allumer/éteindre des lumières. Certaines lumières de mon entrée sont pilotées par un BP (pour éclairer le temps voulu) et un détecteur de mouvement (pour éclairer juste le temps du passage). Je veux que les actions du détecteur de mouvement soient bloquées lorsque j'allume les lumières depuis le BP. Lorsque j'allume par le BP la variable passe à True. J'ai donc ajouté la condition variable == false sur les actions du détecteur de mouvement.

local Variable_Activation_Inter = calaos:getInputValue("intern_7")  -- je déclare ma variable

if Variable_Activation_Inter == false then            -- si ma variable est fausse (je n'ai donc pas allumé les lumières par BP)
  calaos:setOutputValue("output_78", set 0xFFFF00)    -- alors j'allume ma lumière RGB en orange
  calaos:setOutputValue("output_54", true)            -- + 2 spots au sol 
  calaos:setOutputValue("output_14", true)            -- + 1 spot plafond
  calaos:setOutputValue("intern_7", true)             -- et je modifie l'état de ma variable pour la mettre à vrai
  
elseif Variable_Activation_Inter == true then         -- sinon si ma variable est vrai (j'avais déjà donc allumé mes lumières par BP)
  calaos:setOutputValue("output_78", false)           -- alors j'éteins toutes mes lumières
  calaos:setOutputValue("output_54", false)
  calaos:setOutputValue("output_14", false)
  calaos:setOutputValue("intern_7", false)            -- et je remets ma variable à faux
end
return true


6- Détection d'une situation "panique"

By mifrey

But : Script permettant de détecter une situation “panique” dans laquelle un poussoir est actionné plusieurs fois pendant un certain temps.

Précisions : Le script doit être mis dans les conditions d'une règle et être déclenché par tous les poussoirs voulus (je les ai mis tous chez moi). Il retourne true en cas de situation panique. Dans l'exemple, il retourne true si les poussoirs sont pressés 6 fois (12 changements d'etat) dans les 2 secondes (à définir dans le timer). Les actions sont à dénifir dans la règle, par exemple allumer toute les lumières, envoyer un mail ou déclencher l'alarme, etc.

A créer dans CALAOS INSTALLER :

- Un timer (type InputTimer) : Pour mesurer le temps depuis la première pression sur le poussoir. Le timer est à régler sur quelques secondes.
- Un compteur (type InternalInt) : Pour compter le nombre de fois qu'un poussoir est actionné.

Script :

-- Detect a panic situation in which switches are pressed several times within a short time.
-- The script assumes to be called each time the state of a switch changes.
 
--if true then return false end -- Uncomment to disable the script
 
-- Script start
local script_name = "SCRIPT_CONDITIONS_PANIC"
print(script_name .. ": start")
 
-- IO id
local timer_id = "input_58" -- InputTimer type
local counter_id = "intern_0" -- InternalInt type
 
-- Other variables to define
local panic_count = 12 -- Number of times the state of a switch must change within a specific time (typically 2 seconds) to trigger a panic situation
 
-- Print timer and counter value at script start
print(script_name .. ": timer = " .. tostring(calaos:getInputValue(timer_id)))
print(script_name .. ": counter = " .. tostring(calaos:getInputValue(counter_id)))
 
-- Get timer status: Timer is false when timer starts or stops, true when timer is done.
local timer = calaos:getInputValue(timer_id) -- ATTENTION: getInputValue(InputTimer type) returns a string type
 
-- Timer is done, reset timer and counter.
if timer == "true" then
    print(script_name .. ": Timer is done, reset timer and counter.")
    calaos:setOutputValue(timer_id, "start")
    calaos:setOutputValue(counter_id, 1)
    print(script_name .. ": timer = " .. tostring(calaos:getInputValue(timer_id)))
    print(script_name .. ": counter = " .. tostring(calaos:getInputValue(counter_id)))
    print(script_name .. ": end")
    return false
end
 
-- Increment the counter
local counter = calaos:getInputValue(counter_id) + 1
calaos:setOutputValue(counter_id, counter)
 
-- Timer is not done and counts not reached, continues to count.
if counter < panic_count then
    print(script_name .. ": Timer is not done and counts not reached, continue.")
    print(script_name .. ": timer = " .. tostring(calaos:getInputValue(timer_id)))
    print(script_name .. ": counter = " .. tostring(calaos:getInputValue(counter_id)))
    print(script_name .. ": end")
    return false
-- Timer is not done and counts reached, panic mode.    
else
    print(script_name .. ": Timer is not done and counts reached, panic mode.")
    print(script_name .. ": timer = " .. tostring(calaos:getInputValue(timer_id)))
    print(script_name .. ": counter = " .. tostring(calaos:getInputValue(counter_id)))
    calaos:setOutputValue(timer_id, "stop")
    calaos:setOutputValue(counter_id, 0)
    print(script_name .. ": end")
    return true
end
 
print(script_name .. ": Oups, should never be there...")
return false