Aller au contenu

Messages recommandés

Posté(e)

Comme nous l'avons fais avec quelques membres du forum (VD Météo)


 


je vous propose de développer un script en groupe


 


Niveau : Débutant


 


Je demande donc au pro de ne pas mettre la solution Merci


 


1 - Je désire envoyer une notification a chaque fois que j'ouvre et ferme une porte


 


2 - il faut que le code soit le plus générique possible


 


3 - il faut que le l'on puisse l'utilisé avec plusieurs téléphones


 


4 - il faut que le script prenne en compte au maximum tout les exigences des participants


 


5 - On pourra aussi adapter ce code pour envoyer un SMS a la place d'un PUSH


 


 


A la fin un des participant devra faire un tuto pour expliquer le fonctionnement


 


voici la commande pour envoyer une notification



fibaro:call(ID, "sendPush", "Test Notification HC2")

Vous débutez et vous voulez apprendre cette exercice et pour vous


 


il n'y a pas de questions bête ce qui est bête c'est de ne pas poser la question 


 


c'est partie


 


Si vous n'avez pas d'idée mais que le sujet vous intéresse


 


posté simplement "Je Participe"


 


 


Voici un début de code que je propose :



--[[
%% properties
69 value
53 value
73 value
%% globals
--]]
 
local IdSMS = 181 -- récuperation de la variable global instance freesms
local SourceTrigger = fibaro:getSourceTrigger() -- on demande au système de récupérer (get) l'origine (Source) du déclenchement de la scène (Trigger)
fibaro:debug('ID Plugin SMS = ' ..IdSMS)
if SourceTrigger['type'] == 'property' then -- si l'origine du déclenchement de la scène est la modification d'une propriété d'un module surveillée dans l'entête alors
   local id = SourceTrigger['deviceID'] -- Récuperation de l'id du déclencheur
   local Name = fibaro:getName(id) -- Récuperation Nom du module déclencheur
   local MaPorte = fibaro:getValue(id, 'value' ) -- récuperation de la valeur de l'id déclencheur
   
   local MessageSms = ('La ' ..Name)
 
 
   if (MaPorte == '0') then
      fibaro:call(IdSMS, "sendPush", MessageSms .." est Fermee") -- envoi un push
      fibaro:debug( 'Fermer' )
   else
      fibaro:call(IdSMS, "sendPush", MessageSms .." est Ouverte") -- envoi un push
      fibaro:debug( 'Ouverte' )
   end
 
elseif SourceTrigger['type'] == 'other' then -- sinon si l'origine du déclenchement de la scène est autre alors
    fibaro:call(IdSMS, "sendPush", "Message test Home Center 2");
    fibaro:debug('La scène a été lancée manuellement')
end


Script pour plusieurs Téléphones Réalisé par un membre du forum


Merci aussi a Pépite pour son aide



--[[
%% autostart
%% properties
69 value
53 value
73 value
--]]

-- ================================================
-- PREPARATION DU CODE, ON CREER LES FONCTIONS QUE
-- NOUS ALLONS DEVOIR APPELER PAR LA SUITE
-- Dans notre cas, il y a au moins 2 fonctions :
-- une pour l'envoi du message
-- une pour obtenir les informations du module et son état
--
-- Une fonction est un morceau de code que nous pouvons appeler
-- plusieurs fois. Elle peux recevoir des paramètres.
-- Une fonction peux exister sans pour autant être utilisée
-- ================================================

-- ================================================
-- Envoi un message sur un ou plusieurs portables
-- ----------------------------------------------------------------------------------
-- Parmètre :
-- idPortables : numéro d'un portable ou tableau de plusieurs portable
-- message : message à  envoyer
-- Exemple :
-- sendPush(23, "Envoi d'un message simple")
-- sendPush({23,25,27}, "Envoi a plusieurs destinataires")
-- ================================================
function sendPush(idPortables, message)
if (type(idPortables) == "table") then
-- Si nous avons plusieurs numéros dans un tableau {}
for i = 1, #idPortables do
-- On envoi le message sur tout les portables
fibaro:call(idPortables[i], "sendPush", message)
end
fibaro:debug(string.format("Pushs envoyés : %s", message))
elseif (type(idPortables) == "number") then
-- Si nous avons un seul numéro de portable
fibaro:call(idPortables, "sendPush", message)
fibaro:debug(string.format("Push envoyé : %s", message))
else
fibaro:debug(string.format("Erreur : le numéro %s n'est pas valable", idPortables))
end
end

-- ================================================
-- Retourne les information sur un device
-- ----------------------------------------------------------------------------------
-- Parmètre :
-- deviceId : l'dientifiant du device
-- Exemple :
-- local message = getDeviceInfo(69)
-- ================================================
function getDeviceInfo(deviceId)
local etat = "ouverte"
if (fibaro:getValue(deviceId, 'value' ) == "0") then
etat = "ferme"
end
return string.format("La %s est %s.", fibaro:getName(deviceId), etat)
end

-- ================================================
-- FIN DE LA PREPARATION DU CODE
-- ================================================

-- ================================================
-- DEBUT DU CODE PRINCIPAL
-- ================================================

-- Déclaration du/des numéros de portables
local idportables = 181
-- local idportables = {23, 24, 25}

-- Le déclencheur de cette scène, va nous permettre de savoir qui et
-- comment cette scène a été démarrée
local SourceTrigger = fibaro:getSourceTrigger()

if (SourceTrigger['type'] == 'property') then
-- si la scène a été démarrée par un "device", on va récupérer
-- les informations du device
local message = getDeviceInfo(SourceTrigger['deviceID'])
-- puis l'envoyer sur les portables
sendPush(idportables, message)
elseif (SourceTrigger['type'] == 'other') then
-- Si la scène a été démarrée manuellement
sendPush(idportables, string.format("La scène a été lancée le %s a %s", os.date("%d/%m/%Y"), os.date("%R")))
elseif (SourceTrigger['type'] == 'autostart') then
-- Si la scène a été démarrée par une sauvegarde de cette scène
-- ou le redémarrage de la box
sendPush(portables, string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R")))
end
  • Upvote 3
Posté(e)

Bonjour à  tous,

 

J'aimerai participer même si je suis un vrai bille dans le domaine.

 

Avec la soirée passé avec mprinfo, je tente de comprendre les choses :)

 

Donc si je peux ajouter un petit caillou à  la chose, je le ferai :D

  • Upvote 1
Posté(e)

si je peux me permettre,

 

ma première idée serait de faire un script en lua, mais aucune base je l'avoue :)

 

J'ai créer une variable avec MODE 

1- MAISON

2- ABSENT

3- NUIT

4- VACANCES

 

La chose étant de pouvoir créer une scène avec déjà  

 

Si le MODE VACANCES activé, le détecteur de mouvement voit si la porte ou les portes s'ouvre ou pas, si elles s'ouvrent, envoi d'un SMS direct.

 

J'ai tenté de le faire en bloc et le passer en LUA après afin de comprendre le fonctionnement, mais je suis limité en bloc quand je veux introduire si porte ouverte ou pas, bref !! lol je suis perdu

Posté(e)
il n'y a pas de questions bête ce qui est bête c'est de ne pas poser la question 

 

 

 

J'aime bien lire ce genre de phrase. :)

Bien que tu ai déjà  mis une ligne en lua, pourquoi exclure les possesseurs de HCL ?

 

Avant d'avoir ma HC2, je me suis bien amusé avec ma HCL.

L’énoncé de ton exercice me semble, à  priori, pouvoir s'appliquer aux deux.

 

Y'a-t-il des volontaires chez les HCL ?

Posté(e)

Je ne connais pas du tout la HCL le but de l'exercice au départ c'est pour apprendre par l'exemple le lua mais pas de soucis si tu peux donner un coup de mains pour l'adapter a la HCL

c'est vrai que dans l'idéal il serait bien que cela fonctionne sur HCL et HC2

Posté(e)

Le problème c'est que si c'est un exercice pour apprendre le LUA, les HCL seront obligatoirement exclu. Il vaudrait mieux ensuite créer un autre exercice pour HCL ou alors dans le tuto mettre la traduction pour les HCL.

Posté(e)

Le probléme c'est que je n'ai pas de HCL donc pas facile effectivement d'arriver a faire la même chose sur une hcl. Ta réflexion est bonne mais comment faire ?

Posté(e)

Sur HCL ce sera obligatoirement par le mode bloc graphique donc tu peux le faire @mprinfo. En fait la HCL c'est ta HC2 mais tu oublis TOUT ce qui est Lua ^^

Posté(e)

Peut on crée des variables globales ?

 

le soucis ça va pas être aussi précis qu'avec le lua pour envoyer les messages personnaliser. Il va falloir que je me mette au scène bloc lol j'utilise rarement car je n'aime pas trop le générateur de codes. Mais ok on peut faire une version HC2 et faire un équivalent en scène bloc

Posté(e)

donc ok

je pense qu'il faut faire deux type de groupe et d'adapté le lua qu'en c'est possible au scène bloc et pour ceux qui feront du scène bloc d'écrire la scène en lua pour HC2. Pas facile tout cela lol

Posté(e)

Le début de la scene en LUA pour moi ;-)

 

--[[
%% autostart
%% properties
%% globals
--]]

-- Verif du nombre d'instances en cours
 if (fibaro:countScenes() > 1) 
    then  
    fibaro:abort(); 
end

@cybersquat, vite fait qqch comme ca mais pas sur que cela soit optimisé ;-)

 


local IDTEL = 99 -- ID du tel qui recoit les PUSH

if (fibaro:getGlobalValue("MODE") == "VACANCES") and --Variable GLOBALE "MODE" est VACANCES
    (fibaro:getValue(id_porte, 'value') == "1") -- porte ouverte
    then 
        fibaro:call(IDTEL, "sendPush", "La porte d'entrée est Ouverte") -- Envoi du PUSH au tel "IDTEL"
        fibaro:debug( "VACANCES : Porte Ouverte")
end
Posté(e)

J'ai un peu honte, mais, allez….

 

"Je Participe"

 

Je ne promets pas d'écrire quoi que soit, mais je vous regarde. J'ai tout à  apprendre sur le sujet...

 

C'est sympa votre idée.

Posté(e)

lol,

 

Je participe aussi, je regarde de loin lol, je suis perdu :D

 

%% autostart ( ca sert pas a démarrer la scène de facon automatique) ? remplace pas la coche scène active?

Posté(e)

merci le but ce n'est pas que d' écrire du code. le but c'est de discuter ensemble de ce que l'on aimerai faire ou plutot avoir sur notre box pour être averti lorsqu'une porte est ouverte ou fermer.

Donc n'hésite pas a intervenir par exemple j'aimerai pouvoir mettre le tel de ma femme et le miens

Posté(e)

@mprinfo : oui je ferais une scene, après soit avec un trigger sur l'ouverture de la porte ou alors avec le %%autostart pour que la scene se relance au demarrage ;-)

 

@cybersquat : oui cela sert a cela, par exemple en cas de redémarrage de la box, la scene est de nouveau active

Posté(e)

le but c'est de participer d’échanger des idées afin que tout le monde même débutant puisse faire quelque chose de sympas sur la hc2

et pourquoi pas une fois ce sujet résolu débattre ensemble pour un autre exercice. Donc dites ce que vous voulez que ce programme fasse, le code on s'en fou un peu il y a assez de membre qui pourront nous aider.

Posté(e)

@pépite je voyais cela aussi comme ça, dans une scène mais peut être que d'autre membres on une autre idées

Par contre je ne vois pas pourquoi autosart ? puisque tu as un trigger "un trigger et un déclencheur qui va permettre de lire la scéne, le trigger ne peut être utiliser que dans les scénes"

Posté(e)

@mprinfo : si effectivement on part sur un trigger, pas besoin d'autostart, mais selon les besoins, rien empeche de le mettre ce qui permet d'etre plus ouvert sur le code ;-) et ne pas s'enfermer avec le trigger. 

Partons sur un trigger alors 

Posté(e)

j'ai donc ajouter l'entête pour dire qu'a priori on partirai sur une scéne. Par contre je ne mets pas autostart car je ne vois pas bien a quoi cela peu servir

 

 

Voici un tuto sur l'entéte des scénes et leurs utilisation : http://www.domotique-fibaro.fr/index.php/topic/4153-tout-sur-le-d%C3%A9clenchement-dune-sc%C3%A9ne-en-lua-by-steven/#entry61430

Posté(e)

Voilà  qui est bien :

" puisque tu as un trigger â€¦."

 

avec le sous-titre ou la traduction simultanée :

 

"un trigger et un déclencheur qui va permettre de lire la scéne, le trigger ne peut être utiliser que dans les scénes"

 

C'est vrai, quand j'ai vu le sujet sur les HUE, je suis allé voir sur internet, c'est quoi les HUE... :lol:

Posté(e)

non je voulais que tu expliques pourquoi autostart. Je pensé que tu voulais mettre cela pour que l'on reçoive un message lors d'un démarrage de la box comme cette commande permet d exécuter le script au démarrage. 

×
×
  • Créer...