Aller au contenu

Messages recommandés

Posté(e) (modifié)

Salut tout le monde. 

Je vous partage un petit Quick App qui est encore en développement mais qui fonctionne très bien. 

Etant débutant en LUA, le code n'est certainement pas optimisé et je suis preneur de conseil. 

L'idée de ce Q.A était d'avoir une gestion des lumières Walli pour diverse usages (Veilleuses, ambiance, indicateur de présence dans une pièce, météo etc...) et de pouvoir avoir une gestion automatique ou manuel des leds.   

Un merci tout d'abord à @fredokl, @Fredmas et @Lazer  qui m'ont aidé à faire mon premier Q.A ;) via le forum. 

pm0p.jpg

Téléchargement du Q.A: => 

 

Pour ce qui est des icones j'avais demandé à @fredokl de me faire des jolies icones pour mon Q.A. Good job!  

 

Cyan.png.e5adba5f0a51675cc69476c76d3f9e99.pngGreen.png.ccf12e6db38f49a5677807f445d7ebf6.pngMagenta.png.291c306b1d277b4acdb8c0031a3c6735.pngNone.png.ba40c88de13621002219c5970192fd84.pngPink.png.f13f5b9fa649d96620232655e30a6bb8.pngRed.png.16b36160ab923c678ddd1d38eb9912ac.pngYellow.png.2eea34605b2396f2996bb3dc1359d174.pngBlue.png.187ffc23e632f0f4a8fe2940fd8044e5.png

 

 

Code Q.A:

-- QA Réglage Walli
-- Créé par triossrf
-- Aidé par fredokl , Fredmas , Lazer
-- Version 0.5 le 09/12/2021 
-- Crée pour la communauté https://www.domotique-fibaro.fr/

__TAG = "QA_"..plugin.mainDeviceId.."_SALON_Walli"
local Walli = 58  

function QuickApp:onInit()
    self:debug("onInit")
    self:ActiveWalli()
    self:WalliMaj()
    self:Icone()
    self:loop()
end
--[[
*******************************************
***             On/Off Walli            ***
******************************************* 
]]--
function QuickApp:ActiveWalli()
    local VarAutoMan = self:getVariable("Mode")
    local VarIco = self:getVariable("Icone")
    local VarJourNuit = self:getVariable("JourNuit")
    local Volet = self:getVariable("EtatVolet")
    local VarProfiles = self:getVariable("Profiles")
    local VarIco = self:getVariable("Icone")
    local VarEtatWalli = self:getVariable("EtatWalli")

    local APIVolet = api.get("/devices/"..Walli).properties.value --< Variable de la Valeur du volet
    local APIProfil= api.get("/profiles").activeProfile --< Variable du Profile Actif

    local VarSunrise = api.get("/settings/info").sunriseHour 
    local VarSunset = api.get("/settings/info").sunsetHour

    self:debug("Profiles N°:" ..APIProfil)
    self:debug("Volet: " ..APIVolet.. " %")
    self:debug("Variable Icone:", self:getVariable("Icone"))
    self:debug("Mode activé:", self:getVariable("Mode"))
    self:debug("Etat Walli:", self:getVariable("EtatWalli"))

    --M.A.J Variables
    if APIProfil == 1 then --< Profil Présent
    self:setVariable("Profiles", "Présent")
    elseif APIProfil == 2 then --< Profil Absent
    self:setVariable("Profiles", "Absent")
    end
    if APIVolet == 0 then  --< Volet Fermé à 0 % 
    self:setVariable("EtatVolet", "Fermé")
    self:debug("Etat Volet:", self:getVariable("EtatVolet"))
    else
    self:setVariable("EtatVolet", "Ouvert") --< + de 0 % Volet Ouvert
    self:debug("Etat Volet:", self:getVariable("EtatVolet"))
    end
    if VarSunrise > VarSunset then --< Variable Jour
    self:setVariable("JourNuit", "Jour")
    self:debug("Validation Jourt:", self:getVariable("JourNuit"))
    end
    if VarSunrise < VarSunset then --< Variable Nuit
    self:setVariable("JourNuit", "Nuit")
    self:debug("Validation Nuit:", self:getVariable("JourNuit"))
    end

    --Activation/Désactivation Walli
    if Volet == "Fermé" and VarProfiles == "Présent" and VarAutoMan=="Automatique" then
    fibaro.call(Walli, 'setRingOnColor', "green")  
    fibaro.call(Walli, 'setRingOffColor', VarIco)
    self:setVariable("EtatWalli", "Allumé")
    self:debug("Volet Fermé / Profils Présent")
    end
    if Volet == "Ouvert" and VarProfiles == "Présent" and VarAutoMan=="Automatique"  then
    fibaro.call(Walli, 'setRingOnColor', "green") 
    fibaro.call(Walli, 'setRingOffColor', "none")
    self:setVariable("EtatWalli", "Eteint")
    self:debug("Volet Ouvert / Profils Présent")
    end
    if VarProfiles == "Absent" then
    fibaro.call(Walli, 'setRingOnColor', "none") 
    fibaro.call(Walli, 'setRingOffColor', "none")
    self:setVariable("EtatWalli", "Eteint")
    self:updateProperty("deviceIcon", 1066)
    self:debug("Profils Absent")
    end
end
--[[
*******************************************
***            M.A.J Icone              ***
*******************************************
]]--
    function QuickApp:Icone()
    local VarAutoMan = self:getVariable("Mode")
    local VarIco = self:getVariable("Icone")
    local VarEtatWalli = self:getVariable("EtatWalli")
    if VarIco == "blue" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1062)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Bleu \r ------------------\r Mode :"..VarAutoMan )
    elseif VarIco == "white" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1066)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Blanc \r ------------------\r Mode :"..VarAutoMan )
    elseif VarIco == "red" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1068)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Rouge \r ------------------\r Mode :"..VarAutoMan )
    elseif VarIco == "cyan" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1063)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Cyan \r ------------------\r Mode :"..VarAutoMan  ) 
    elseif VarIco == "green" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1064)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Vert \r ------------------\r Mode :"..VarAutoMan )
    elseif VarIco == "yellow" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1069)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Jaune \r ------------------\r Mode :"..VarAutoMan )
    elseif VarIco == "magenta" and VarEtatWalli == "Allumé" then
    self:updateProperty("deviceIcon", 1067)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Rose \r ------------------\r Mode :"..VarAutoMan )
    elseif VarEtatWalli == "Eteint" then
    self:updateProperty("deviceIcon", 1066)
    self:updateView("labelBur", "text", "------------------ \r Salon \r ------------------ \r Walli: Eteint \r ------------------\r Mode :"..VarAutoMan )
    end
end
--[[
*******************************************
***               Boutons               ***
*******************************************
]]--
function QuickApp:Manuel()
self:setVariable("Mode", "Manuel")
self:Icone()
end
function QuickApp:Auto()
self:setVariable("Mode", "Automatique")
self:Icone()
end
function QuickApp:turnOffBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "none") 
 fibaro.call(Walli, 'setRingOnColor', "none") 
 self:updateProperty("deviceIcon", 1066)
 self:setVariable("EtatWalli", "Eteint")
 self:Icone()
end
function QuickApp:CyanBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "cyan") 
 fibaro.call(Walli, 'setRingOnColor', "red") 
 self:setVariable("Icone", "cyan")
 self:setVariable("EtatWalli", "Allumé")
 self:Icone()
 end
function QuickApp:BleuBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "blue") 
 fibaro.call(Walli, 'setRingOnColor', "red") 
 self:setVariable("EtatWalli", "Allumé")
 self:setVariable("Icone", "blue")
 self:Icone()
end
function QuickApp:BlancBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "white") 
 fibaro.call(Walli, 'setRingOnColor', "red") 
 self:setVariable("EtatWalli", "Allumé")
 self:setVariable("Icone", "white")
 self:Icone()
end
function QuickApp:VertBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "green") 
 fibaro.call(Walli, 'setRingOnColor', "red") 
 self:setVariable("Icone", "green")
 self:Icone()
end
function QuickApp:RougeBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "red") 
 fibaro.call(Walli, 'setRingOnColor', "green") 
 self:setVariable("Icone", "red")
 self:setVariable("EtatWalli", "Allumé")
 self:Icone()
end
function QuickApp:JauneBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "yellow") 
 fibaro.call(Walli, 'setRingOnColor', "red") 
 self:setVariable("Icone", "yellow")
 self:setVariable("EtatWalli", "Allumé")
 self:Icone()
end
function QuickApp:RoseBur()
 self:setVariable("Mode", "Manuel")
 fibaro.call(Walli, 'setRingOffColor', "magenta") 
 fibaro.call(Walli, 'setRingOnColor', "blue") 
 self:setVariable("Icone", "magenta")
 self:setVariable("EtatWalli", "Allumé")
 self:Icone()
end
--[[
*******************************************
***             SLIDER+Variable         ***
*******************************************
]]--
function QuickApp:Brightness(event)
Intensite = event.values[1]
walliBur = fibaro.call(Walli, 'setRingBrightness', Intensite)
self:debug("Slider", Intensite) --<Affiche la valeur du slider dans le débug>
self:updateView("LblSlider", "text", "Intensité: " ..Intensite.. "%") --<M.A.J Intensité dans un Label>
self:setVariable("WalliLu", Intensite) --<Creation d'une variable dans le Q.A lorsqu'on positionne le Slider>
local VarWalli = self:getVariable("WalliLu")  --<Lecture de la variable WalliLu>
self:debug("WalliLu:" ..VarWalli) --<Débug Variable WalliLu>
self:updateView("SliderBrightness", "value", tostring(VarWalli)) --<M.A.J Slider automatiquement à l'ouverture du Q.A>
end
--[[
*******************************************
***             M.A.J SLIDER            ***
*******************************************
]]--
function QuickApp:WalliMaj()
local APIBrillance = api.get("/devices/"..Walli).properties.parameters[3].lastSetValue --<Cherche la valeur lastSetValue de l'ID 13 dans le fichier Json> 
    self:debug("Intensite:" ..APIBrillance) --<Débug A.P.I  >
    self:updateView("LblSlider", "text", "Intensité: " ..APIBrillance.. "%") --<M.A.J Slider>
    self:updateView("SliderBrightness", "value", tostring(APIBrillance)) --<M.A.J Slider>
end
--[[
*******************************************
***              Boucle                 ***
*******************************************
]]--
function QuickApp:loop()
    self:ActiveWalli()
    self:Icone()
    fibaro.setTimeout(10*3000, function() self:loop() end)
end 

 

Walli1.1.fqa

Modifié par triossrf
Mise à jour: 09/12/2021
  • Like 4
  • 9 mois après...
Posté(e)

Bonjour, 

Je suis totalement novice en LUA, je n'utilise que les blocs lorsqu'il s'agit de faire les scénarios par exemple. 
Cependant il se trouve que ce Q.A répond totalement à un des mes "besoins". 
Il me reste plus qu'a comprendre, l'un des vous aurait un lien pour comprendre les bases et que je puisse me débrouiller ou une rapide info sur le manière de le "connecter à un Walli switch ? 
Merci :)

  • Confused 1
×
×
  • Créer...