Aller au contenu
fmplaw

Mes premiers pas...

Recommended Posts

Merci !

 

Je viens donc de faire ma première scène en LUA pour m'alerter en cas d'incendie chez moi :

 

--[[
%% properties
22 value
26 value
30 value
5 value
9 value
%% events
%% globals
--]]

local sujet = "Alerte Fibaro SS"
local VarP = fibaro:getValue(22, "value")
local VarJ = fibaro:getValue(26, "value")
local VarC = fibaro:getValue(30, "value")
local VarM = fibaro:getValue(5, "value")
local VarSDJ = fibaro:getValue(9, "value")

fibaro:debug("SS Pierre. Valeur = " ..VarP)
if tonumber(fibaro:getValue(22, "value")) > 0 then
  	fibaro:debug("SS Pierre. Valeur = " ..VarP)
  	fibaro:call(34, "sendEmail", sujet, "Le détecteur de fumée de la chambre de Pierre est en alerte");
	fibaro:call(12, "sendPush", "Le détecteur de fumée de la chambre de Pierre est en alerte");
    fibaro:call(15, "sendEmail", sujet, "Le détecteur de fumée de la chambre de Pierre est en alerte");
	fibaro:call(33, "sendPush", "Le détecteur de fumée de la chambre de Pierre est en alerte");
end

fibaro:debug("SS Juliette. Valeur = " ..VarJ)
if tonumber(fibaro:getValue(26, "value")) > 0 then
  	fibaro:debug("SS Juliette. Valeur = " ..VarJ)
  	fibaro:call(34, "sendEmail", sujet, "Le détecteur de fumée de la chambre de Juliette est en alerte");
	fibaro:call(12, "sendPush", "Le détecteur de fumée de la chambre de Juliette est en alerte");
  	fibaro:call(15, "sendEmail", sujet, "Le détecteur de fumée de la chambre de Pierre est en alerte");
	fibaro:call(33, "sendPush", "Le détecteur de fumée de la chambre de Pierre est en alerte");
end  	

fibaro:debug("SS Cuisine. Valeur = " ..VarC)
if tonumber(fibaro:getValue(30, "value")) > 0 then
  	fibaro:debug("SS Juliette. Valeur = " ..VarC)
  	fibaro:call(34, "sendEmail", sujet, "Le détecteur de fumée de la Cuisine est en alerte");
	fibaro:call(12, "sendPush", "Le détecteur de fumée de la Cuisine est en alerte");
  	fibaro:call(15, "sendEmail", sujet, "Le détecteur de fumée de la Cuisine est en alerte");
	fibaro:call(33, "sendPush", "Le détecteur de fumée de la Cuisine est en alerte");
end  	

fibaro:debug("SS Mezzanine. Valeur = " ..VarM)
if tonumber(fibaro:getValue(5, "value")) > 0 then
  	fibaro:debug("SS Mezzanine. Valeur = " ..VarM)
  	fibaro:call(34, "sendEmail", sujet, "Le détecteur de fumée de la Mezzanine est en alerte");
	fibaro:call(12, "sendPush", "Le détecteur de fumée de la Mezzanine est en alerte");
  	fibaro:call(15, "sendEmail", sujet, "Le détecteur de fumée de la Mezzanine est en alerte");
	fibaro:call(33, "sendPush", "Le détecteur de fumée de la Mezzanine est en alerte");
end  

fibaro:debug("SS Salle de jeux. Valeur = " ..VarSDJ)
if tonumber(fibaro:getValue(9, "value")) > 0 then
  	fibaro:debug("SS Salle de jeux. Valeur = " ..VarSDJ)
  	fibaro:call(34, "sendEmail", sujet, "Le détecteur de fumée de la Salle de jeux est en alerte");
	fibaro:call(12, "sendPush", "Le détecteur de fumée de la Salle de jeux est en alerte");
  	fibaro:call(15, "sendEmail", sujet, "Le détecteur de fumée de la Salle de jeux est en alerte");
	fibaro:call(33, "sendPush", "Le détecteur de fumée de la Salle de jeux est en alerte");
end  

Qu'en pensez vous ? :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Beaucoup de if-end, mais ca fonctionne non ? C'est le principal. Et suis un noob aussi lol

 

Vite fait pour te montrer ce qui est faisable, attention, non testé et me connassant, il doit y avoir des erreurs de syntaxe et peut-etre de logique


 

--[[
%% properties
22 value
26 value
30 value
5 value
9 value
%% events
%% globals
--]]

-------------------------------
local Capteurs = {22, 26, 30, 5, 9}
local IdTel = {12, 33)
local MailUsers = 15, 34}
local sujet = "Alerte Fibaro SS"

-----------------------------------

local trigger = fibaro:getSourceTrigger()
local name = trigger["name"]
local DeviceID = trigger["deviceID"]
local msg

-------------------------------------
-- Envoi Notification MAIL et PUSH  --
-------------------------------------
function Notification(sujet,message)
    fibaro:debug(Message)
        for i = 1, #IdTel do
            fibaro:call(IdTel[i], "sendPush", message)
        end
        for i = 1, #MailUsers do
            fibaro:call(MailUsers[i], "sendEmail", sujet, message)
        end          
end


--------------------------------------
-- Device Declencheur ---------------
--------------------------------------
function DeviceDeclencheur()
    if (trigger["type"] == "property") then
        for i = 1, #Capteurs do
            if tonumber(fibaro:getValue(Capteurs[i], "value")) > 0 then
                fibaro:debug("Module Déclencheur : "..DeviceID.. " Nom : " ..name)
                msg = "Le détecteur de fumée : " ..name.. " est en alerte"
            end
            return name, DeviceID, msg
        end
    end
end


----- Execution----
DeviceDeclencheur()
Notification(sujet,msg)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci @pepite ! C'est intéressant de voir ce qu'il est possible au niveau syntaxe...

 

Par contre pourrais tu m'éclairer sur quelques points :

 

  • Dans ta bouche for, à quel moment la condition i=1 est rempli ?
  • Je ne comprends pas bien ce test : if (trigger["type"] == "property") then

En te remerciant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me permet quelques petites corrections et explication

 

local trigger = fibaro:getSourceTrigger() permet d'obtenir les informations de ce qui a déclenché le scénario.

trigger["deviceID"] contiendra l'ID du module ayant déclenché le scénario

 

 

for i = 1, #idTel signifie de 1 à (nombre d'éléments dans le tableaux idTel), ayant 2 éléments dans ce tableau (12 et 33), cette boucle sera parcourue 2 fois.

 

--[[
%% properties
22 value
26 value
30 value
5 value
9 value
%% events
%% globals
--]]

-------------------------------
local idTel = {12, 33)
local mailUsers = {15, 34}
local sujet = "Alerte Fibaro SS"
-----------------------------------

local trigger = fibaro:getSourceTrigger()

-------------------------------------
-- Envoi Notification MAIL et PUSH  --
-------------------------------------
function notification(message)
    fibaro:debug(message)
        for i = 1, #idTel do
            fibaro:call(idTel[i], "sendPush", message)
        end
        for i = 1, #mailUsers do
            fibaro:call(mailUsers[i], "sendEmail", sujet, message)
        end          
end

----- Execution----
if (trigger["type"] == "property") then
  local deviceID = trigger["deviceID"]
  local name = fibaro:getName(deviceID)
  local msg = "Le détecteur de fumée : " ..name.. " est en alerte"
  notification(msg)
end

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Steven,

oui tu peux te permettre master

J'avais une fonction de trop ;-)  ;-).

Plus simple avec le fibaro;getName plutot que trigger"name", j'y avais pas pense lol

 

Bon ben pas de code du 1er coup alors ;-). Plutot simple normalement celui la ;-)

Modifié par pepite

Partager ce message


Lien à poster
Partager sur d’autres sites

le trigger["name"] fonctionne uniquement lorsque le déclencheur est une variable globale et name contiendra le nom de la variable globale.

 

Dans le cas d'un déclenchement pas "properties" tu auras "nil" dans cette variable.

 

Oui, une petite boucle en trop. Tu vas rechercher un Capteur que tu as déjà reçu dans le trigger.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci messieurs, c'est très intéressant !

 

Par contre je ne comprends toujours pas lz condition d’exécution du script :

if (trigger["type"] == "property")

 

Faut il la lire de cette manière : Si le module déclencheur == à l'un des module présent dans l'en-tête %%properties ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as tout compris.

 

C'est ici si tu veux plus d'info : http://www.fibarouk.co.uk/support/lua/library/fibarogetsourcetrigger/

 

Il y a "property", "global", "autostart" et "other" ... soit respectivement : déclenché par un changement de module, une variable globale, l'enregistrement de la scène ou un autre type de lancement.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à vous,

 

je rencontre depuis maintenant environ 2 mois des erreurs récurrentes 503... Je n'ai vraiment pas eu le temps de m'y consacrer jusqu’à aujourd'hui !

 

En gros, je suis obligé de redémarrer ma HC2 et je récupère la webui pour environ une journée.... Le lendemain rebelote erreur 503 !?!

 

Existe-t-il des journaux qui pourraient m'aider a savoir ce qu'il se passe ?

 

En vous remerciant !

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai essayé de prêter attention au fonctionnement de la box. J'ai petit a petit désactiver toutes les scènes mas rien n'y fait.

 

Voici par exemple l'état de la mémoire de la box :

 

hc2.png.dc72168081a7d1fce59ae2450aca38bb.png

 

Avez vous une idée de la manière d'identifier quel process utilise toute la mémoire ?

 

Que puis-je faire pour tenter de résoudre le problème ?

 

Je précise que la mémoire sature petit à petit.... Après un reboot les choses rentrent dans l'ordre pour un temps....

 

En vous remerciant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum, pas normal effectivement. Quand tu boot, elle démarre à combien ?

Sinon la seule chose que je vois, c'est un recovery, mais tu vas perdre tes icônes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Euh attends, c'est normal ça, en 4.102 il y avait encore les problèmes de fuite mémoire il me semble bien. Ce firmware est assez ancien.

Met à jour ça devrait aller mieux.

 

EDIT : n'importe quoi.... ton screenshot indique bien la bonne version 4.130, c'est donc juste ta signature qui n'est pas à jour.

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement, je mets ma signature a jour !

 

@Nico Quand je boot j'ai 67% de mémoire free mais ca mon progressivement et en général en 24h je suis full et les services tombent un à un (dont le serveur web)...

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je pense qu'une recovery réglera ton souci, mais tu perdras tes icônes. Fais bien une sauvegarde avant et une copie du répertoire backups de la clef recovery sur un PC, au cas où.

Partager ce message


Lien à poster
Partager sur d’autres sites

@nico Quand tu parles d'une recovery, c'est une restauration à une date antérieure, ou bien une raz complète ? Devrais-je ré associer tous mes périphériques Z-wave ?

 

En te remerciant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de faire une raz. J'ai ensuite mis à jour en 4.130 puis un restore de ma config.

 

En espérant que cela résoudra mon problème !

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Et, résultat ? Cela monte de suite ou c'est mieux ?

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Nico J'ai attendu un petit peu et rebelote la mémoire se remplit petit à petit... Quand j'ai reboot j'étais a 67% de mémoire libre. J'en suis a 16% maintenant....

 

Une idée de ce que je peux faire d'autres ? :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as beaucoup de scène et de VDs ? Sinon commencer par les sauvegarder, puis tu en supprimes une , tu regardes ce que a donne, et ainsi de suite. Si cela ce trouve tu as en une qui à un gros souci.

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai 109 modules et 11 scènes... J'ai désactivé toutes mes scènes mais le souci est identique. Tu penses que la désactivation ne suffit pas ? Une suppression est nécessaire ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne sais pas trop te dire. Tu as aussi des VDs avec des mainloops ?

Sino tu attends lundi et tu demandes au support de se connecter pour voir lequel pose souci.

Partager ce message


Lien à poster
Partager sur d’autres sites

×