Calaos, Home Automation Forum
Tuto Script LUA - Printable Version

+- Calaos, Home Automation Forum (https://calaos.fr/forum)
+-- Forum: Développement (https://calaos.fr/forum/forumdisplay.php?fid=8)
+--- Forum: Programmation (https://calaos.fr/forum/forumdisplay.php?fid=9)
+--- Thread: Tuto Script LUA (/showthread.php?tid=110)

Pages: 1 2 3


Tuto Script LUA - tom - 01-08-2014

Je sais que les dev ont deja un taf de fou pour la sortie de la V2
Mais j'aurai souhaité savoir si un petit tuto sur les scripts LUA serait envisageable histoire de comprendre comment ca fonctionne et avoir quelques petit trucs de base, peut être existe-t-il déjà ?

Merci à vous


RE: Tuto Script LUA - raoulh - 01-08-2014

Le langage utilisé pour les script est du LUA, plus d'info ici:
http://www.lua.org/

Il faut par contre que j'ecrive la doc pour les fonctions propres à Calaos, mais en attendant on peut faire cela:
Code:
calaos:getInputValue("id")
calaos:getOutputValue("id")
calaos:setOutputValue("id", "valeur")
calaos:requestUrl("url")
calaos:requestUrl("url", "POST DATA")

On peut utiliser un script LUA aussi bien dans une condition que dans une action. Dans une condition, le script doit retouner true ou false pour déterminer si la condition est valide ou non et lancer les actions.

Voici un exemple complet de gestion de chauffage chez moi:
Code:
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

L'avantage d'utiliser un script c'est qu'on gérer plus finement les element. Surtout si on a besoin de faire des test par exemple "si temperature < sonde + consigne". On ne peut pas faire ce genre de chose avec des regles simples.

Il faut aussi garder a l'esprit que le script n'est pas executé en continue. Seulement lorsque qu'une IO que l'on specifie dans le regles change. Dans mon programme chauffage, j'ai donc mis les sondes de temperatures de mon chauffage et les consignes comme declencheur du script. Donc des qu'une temperature ou une consigne change, le script se lance pour voir si il faut allumer/couper la pompe, le plancher, l'appoint electrique, etc...


RE: Tuto Script LUA - tom - 01-08-2014

Très intéressant ca me plait bien ça ... Je vais bûcher ca ce soir ...

A quoi sert le premier code que tu as posté ?


RE: Tuto Script LUA - raoulh - 01-08-2014

(01-08-2014, 02:14 PM)tom Wrote: Très intéressant ca me plait bien ça ... Je vais bûcher ca ce soir ...

A quoi sert le premier code que tu as posté ?

A rien tel quel Smile

C'est juste les appels de fonctions spécifiques a Calaos.

Recupere la valeur d'une entrée:
Code:
calaos:getInputValue("id")

Recupere la valeur d'une sortie:
Code:
calaos:getOutputValue("id")

Change la valeur d'une sortie:
Code:
calaos:setOutputValue("id", "valeur")

Appel d'une URL
Code:
calaos:requestUrl("url")

Appel d'une URL avec des donnée en POST[/code]
Code:
calaos:requestUrl("url", "POST DATA")



RE: Tuto Script LUA - captainigloo - 01-08-2014

J'ai dans l'idée d'utiliser un script LUA pour faire la régulation de mon chauffage. Aujourd'hui j'utilise des regles de base écrites avec calaos-installer, mais un des problémes que je rencontre, c'est que lorsque la température est tres proche de la température de consigne, la chaudiére s'allume et s'éteint en permannence, je pense que c'est pas forcément tres bon pour la chaudiére, et je souhaiterai donc ajouter une histeresis, qui me permettrait d'éviter ces effets d'allumage/extinction en permanence.

J'essaierai de mettre en ligne un tuto pour expliquer comment faire.


RE: Tuto Script LUA - tom - 01-09-2014

Raoul j'ai besoin de précision pour commencer ...
Je prend le script de ton chauffage


print("script chauffage start") [ca sert à donner un nom au script ??]
local temp_panneaux = calaos:getInputValue("input_temp_3") [si je comprend bien tu definis un nom de variable à une entrée ??] [ca veut dire quoi "local"?)]
local temp_ballonh = calaos:getInputValue("input_temp_0") [input_temp je suppose que ce doit etre le numéro de l'entrée sonde]
local temp_plancher = calaos:getInputValue("input_temp_2")
local consigne = calaos:getInputValue("intern_10") [ c'est quoi intern 10 ???]
local consigne_ballon = calaos:getInputValue("intern_1")
local consigne_plancher = calaos:getInputValue("intern_0")

if temp_panneaux >= (temp_ballonh + consigne) then [tu veux dire quoi ???]
-- active pompe solaire si < max
if temp_ballonh < 70 then
calaosConfusedetOutputValue("output_chauff_2", true)
else [ca veux dire quoi ??]
calaosConfusedetOutputValue("output_chauff_2", false)
end

-- force stop elect resistance [ce sont simplement des commentaires ??]
calaosConfusedetOutputValue("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
calaosConfusedetOutputValue("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
calaosConfusedetOutputValue("output_chauff_1", true)
end
if temp_ballonh > (consigne_ballon + 1) then
calaosConfusedetOutputValue("output_chauff_1", false)
end
end

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

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


RE: Tuto Script LUA - raoulh - 01-09-2014

Oula... On part de loin Smile

Pour commencer je crois qu'il faudrait que tu lises un tuto ou 2 sur le language LUA pour apprendre sa structure et son fonctionnement.
Par exemple:
http://fr.wikipedia.org/wiki/Lua
http://fr.openclassrooms.com/informatique/cours/programmez-sur-votre-ds-avec-microlua/les-bases-de-la-programmation-avec-lua
http://www.luteus.biz/Download/LoriotPro_Doc/LUA/LUA_Training_FR/Introduction_Programmation.html

LUA est en un language de script, donc il faut connaitre sa syntaxe et avoir des notions de programations. Ca s'apprend et c'est un language assez simple.

Concernant tes questions:

Quote:print("script chauffage start") [ca sert à donner un nom au script ??]
Non ca sert a afficher un message dans les logs, principalement pour débuguer

Quote:local temp_panneaux = calaos:getInputValue("input_temp_3") [si je comprend bien tu definis un nom de variable à une entrée ??] [ca veut dire quoi "local"?)]
Non, ici local déclare une variable locale, et je lui affecte la valeur de la sonde de temperature qui a l'identifiant input_temp_3. Chaque element dans calaos a un identifiant unique.

Quote:local temp_ballonh = calaos:getInputValue("input_temp_0") [input_temp je suppose que ce doit etre le numéro de l'entrée sonde]
Non pas le numero, c'est l'identifiant d'une sonde. L'identifiant dans calaos est unique pour chaque element. Et il peut etre de n'importe quel forme. Par defaut calaos utilise des input_XX ou output_XX

Quote:local consigne = calaos:getInputValue("intern_10") [ c'est quoi intern 10 ???]
C'est une variable interne. On peut les creer dans calaos installer (Variable interne de type booleen, numerique ou chaine de caractere)

Quote:if temp_panneaux >= (temp_ballonh + consigne) then [tu veux dire quoi ???]
-- active pompe solaire si < max
if temp_ballonh < 70 then
calaosConfusedetOutputValue("output_chauff_2", true)
else [ca veux dire quoi ??]
calaosConfusedetOutputValue("output_chauff_2", false)
end
C'est un test. Si la temperature de panneaux solaire est superieur ou égale a celle de mon ballon plus un delta qui est dans une variable (modifiable sur l'ecran tactile) alors je fais une action... Le "else" signifie sinon, c'est ce qui sera executé si le test "if" echou...

Quote:-- force stop elect resistance [ce sont simplement des commentaires ??]
Oui ce sont des commentaires, on peut en ecrire de plusieurs facon en LUA.


RE: Tuto Script LUA - tom - 01-09-2014

Merci pour les info ...
Et oui je pars de loin mais je ne pense pas être plus c.. qu'un autre !
Il va juste falloir que je planche ca a fond !


RE: Tuto Script LUA - raoulh - 01-09-2014

Bien sur! Tout s'apprend...

Si t'as des questions hésites pas.


RE: Tuto Script LUA - tom - 01-09-2014

Merci à toi