Calaos, Home Automation Forum
Script avec condition ou - Printable Version

+- Calaos, Home Automation Forum (https://calaos.fr/forum)
+-- Forum: Utilisation - Installation - Configuration (https://calaos.fr/forum/forumdisplay.php?fid=4)
+--- Forum: Calaos Installer (https://calaos.fr/forum/forumdisplay.php?fid=6)
+--- Thread: Script avec condition ou (/showthread.php?tid=386)

Pages: 1 2


Script avec condition ou - tom - 12-22-2014

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



RE: Script avec condition ou - raoulh - 12-22-2014

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.


RE: Script avec condition ou - tom - 12-22-2014

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


RE: Script avec condition ou - raoulh - 12-22-2014

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/programmez-sur-votre-ds-avec-microlua/les-bases-de-la-programmation-avec-lua


RE: Script avec condition ou - tom - 12-23-2014

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 !


RE: Script avec condition ou - tom - 12-23-2014

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 !!!


RE: Script avec condition ou - raoulh - 12-27-2014

Bizarre ton bug, j'utilise cette fonction tout le temps chez moi...
T'es sur que t'a pas ouvert une vieille config?


RE: Script avec condition ou - tom - 12-27-2014

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


RE: Script avec condition ou - raoulh - 12-28-2014

Sur la v1 ou v2 du coup?


RE: Script avec condition ou - tom - 12-28-2014

La question qui fâche !!!
Toujours sur V1