Calaos, Home Automation Forum

Full Version: Script avec condition ou
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
Je souhaiterai effectuer un script avec fonction ou (afin d'éviter de creer 50 regles dans Calaos installer)

Je souhaiterai me programmer un état "fenêtre ouverte à l'étage"
L'état == true si une fenêtre ouverte à l'étage.

voici mon script (je precise que c'est mon premier script alors soyez indulgent !!!
Code:
Print("Fenêtre étage ouverte")

-------------------------------------------
Fenêtre Bureau = calaos:getInputValue("input_117")
Fenêtre Juliette = calaos:getInputValue("input_123")
Fenêtre Charlotte = calaos:getInputValue("input_122")
Fenêtre SdBP = calaos:getInputValue("input_121")
Fenêtre Parents = calaos:getInputValue("input_120")
Fenêtre Buanderie = calaos:getInputValue("input_119")
Fenêtre SdBE = calaos:getInputValue("input_118")


Fenêtre étage ouverte = calaos:getOutputValue("intern_11")
---------------------------------------------------

--- une fenêtre étage ouverte
If Fenêtre Bureau = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre Juliette = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre Charlotte = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre SdBP = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre Parents = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre Buanderie = "true" then
calaos:setOutputValue("intern_11", "true")
end

If Fenêtre SdBE = "true" then
calaos:setOutputValue("intern_11", "true")
end

--- toutes les fenêtres étage fermées
If Fenêtre Bureau = "false"
else
If Fenêtre Juliette = "false"
else
If Fenêtre Charlotte = "false"
else
If Fenêtre SdBP = "false"
else
If Fenêtre Parents = "false"
else
If Fenêtre Buanderie = "false"
else
If Fenêtre SdBE = "false"
calaos:setOutputValue("intern_11", "false")
end

return false
Plusieurs choses:

Etant donné que LUA est un language de programmation, il faut respecter certain points.
- Il faut déclarer les variables utilisées dan LUA avec le mot clé local:

Code:
local fanetre_ouverte

- Ensuite un nom de variable ne peut pas contenir d'espace ou de caractere spéciaux (les accents par ex)

- Pour les OU tu peux faire ca:

Code:
local FenetreBureau = calaos:getInputValue("input_117")
local FenetreJuliette = calaos:getInputValue("input_123")

if FenetreBureau = true or FenetreJuliette = true then
   -- Au moins une fenetre ouverte
   return true
else
   -- Aucune fenetre ouverte
   return false
done

Ensuite pour le script, je te conseille de le mettre dans une condition script et ensuite d'ajouter des "trigger", il s'agit de la liste d'entrée qui vont lancer l'execution du script. La il faut que tu donnes tous tes capteurs des fenetres.

Dans mon dernier exemple, je retourne true si au moins une fenetre est ouverte, et false sinon.
Ca te permet dans la regle de mettre ton action directement, quand tu retournes false dans le script, les actions ne seront pas executés.
ok je m"en doutais un peu concernant les caractères spéciaux

Si je comprend bien mon script complet devrait ressembler à ca ...

Code:
Print("Fenêtre étage ouverte")

-------------------------------------------
Local Fenetre_Bureau = calaos:getInputValue("input_117")
Local Fenetre_Juliette = calaos:getInputValue("input_123")
Local Fenetre_Charlotte = calaos:getInputValue("input_122")
Local Fenetre_SdBP = calaos:getInputValue("input_121")
Local Fenetre_Parents = calaos:getInputValue("input_120")
Local Fenetre_Buanderie = calaos:getInputValue("input_119")
Local Fenetre_SdBE = calaos:getInputValue("input_118")
---------------------------------------------------

--- Au moins une fenêtre ouverte
If Fenetre_Bureau = true or Fenetre_Juliette = true or Fenetre_Charlotte = true or Fenetre_SdBP = true or Fenetre_Parents = true or Fenetre_Buanderie = true or Fenetre_SdB = trueE then

Return true

--- aucune fenêtre ouverte

Else

Return false

done

Je ne comprend pas forcement le "else" et le "done" aurrais tu une table concernant ces point
En fait c'est une structure de controle. En gros ca veut dire:

SI fentreX est ouverte OU fenetreY est ouverte faire:
return true
sinon
return false
fin du bloc IF/THEN/ELSE


Je te conseille de lire cette page:
http://openclassrooms.com/courses/progra...n-avec-lua
Bon finalement j'ai fait ça
Code:
print("Fenêtre étage ouverte")
-------------------------------------------
local Fenetre_Bureau = calaos:getInputValue("input_117")
local Fenetre_Juliette = calaos:getInputValue("input_123")
local Fenetre_Charlotte = calaos:getInputValue("input_122")
local Fenetre_SdBP = calaos:getInputValue("input_121")
local Fenetre_Parents = calaos:getInputValue("input_120")
local Fenetre_Buanderie = calaos:getInputValue("input_119")
local Fenetre_SdBE = calaos:getInputValue("input_118")
---------------------------------------------------

-- Au moins une fenêtre ouverte
if Fenetre_Bureau == true or Fenetre_Juliette == true or Fenetre_Charlotte == true or Fenetre_SdBP == true or Fenetre_Parents == true or Fenetre_Buanderie == true or Fenetre_SdB == true then
calaos:setOutputValue("intern_11","true")
return true

-- aucune fenêtre ouverte
else
calaos:setOutputValue("intern_11","false")
return false

--fin
end

J'agis donc sur une variable interne nommée "fenêtre étage ouverte" et j'envoie quand même "true" ou "false" au cas où !
Je préfere utiliser une variable car plus facile à rechercher dans la conf par la suite.

Du coup dans ma folle lancée j'ai aussi pondu celui ci
Code:
-- ETAT EN TEXTE ALARME INTRUSION
---------------------------------------------------
local MEST = calaos:getInputValue("input_134")
local MESP = calaos:getInputValue("input_135")
local MHS = calaos:getInputValue("input_139")
local ALARME_INTRUSION = calaos:getInputValue("input_136")
local DEFAUT_INTRUSION = calaos:getInputValue("input_137")
---------------------------------------------------

-- Tableau des états de la centrale intrusion
etat_intrusion = {["Total"]=MEST, ["Partiel"]=MESP, ["Hors_service"]=MHS}


for k,v in pairs(etat_intrusion)  -- k = key (Total) ; v = value (true, false)
do
    if v == true then
        calaos:setOutputValue("intern_1", k)
        print (k)
    return false
    end

--fin
end

Qui me rempli une variable interne en texte.
Donc je peux avoir l'état de ma centrale en texte "total" "partiel" et "hors service"

C'est ma femme qui est heureuse ;-)

Petite idée ne serait-il pas interessant de répertorier tous les scripts qui fonctionnent et qui pourrait servir dans le wiki ou dans un post ?

@Raoulh merci pour ton lien, c'est le plus compréhensible que j'ai pu lire ... Je recommande !
Je me permet d'ajouter un petit bug constaté ce soir les scripts ne sont pas sauvegardés dans la conf si je télécharge la conf depuis calaos direct les scripts sont vides !!!
Bizarre ton bug, j'utilise cette fonction tout le temps chez moi...
T'es sur que t'a pas ouvert une vieille config?
Sur j'ai vérifié 2 fois.

Si j'ouvre le projet depuis la centrale
Le contenu des scripts qui se trouve dans les actions est conservé et celui des conditions est perdu.

Idem pour les conf sauvegardées
Sur la v1 ou v2 du coup?
La question qui fâche !!!
Toujours sur V1
Pages: 1 2