Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'Tuto Alarme'.



Plus d’options de recherche

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Bienvenue
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Annonces et suggestions
  • La Home Center et ses périphériques
    • La Home Center pour les nuls
    • HC 2 & Lite
    • HC 3
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Quick App
    • Multimédia (audio, vidéo ...)
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets, piscines, ...)
    • Eclairage
    • Applications Smartphones et Tablettes
  • Autres solutions domotiques
    • Box / Logiciel
    • Modules Nice (433 & 866 MHz)
    • Modules Zigbee
    • GCE Electronics
    • Modules Bluetooth Low Energy
  • Objets connectés
    • Les Assistants Vocaux
    • Netatmo
    • Philips Hue
    • DIY (Do It Yoursel)
  • Sécurité
    • Alarmes
    • Caméras
    • Portiers
    • Serrures
  • Informatique / Réseau
    • Tutoriels
    • Matériels Réseaux
    • Matériels Informatique
    • NAS
    • Virtualisation
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

13 résultats trouvés

  1. Je vous propose une tutoriel pour domotiser une alarme Diagral de la gamme sortie en 2011. Cette domotisation est partielle, car cette alarme, bien que très fiable, est très fermée. En effet, la centrale ne dispose d'aucun connecteur permettant de récupérer son statut, ni de la piloter. La domotisation se fait donc au travers de modules Diagral externes, reliés à des modules Z-Wave notamment de marque Fibaro. Je propose dans un premier temps de récupérer le statut de l'alarme. Éventuellement dans un second temps, nous verrons comment piloter l'alarme, mais je ne suis pas très pressé étant donné les problèmes de sécurité que cela peut soulever. Il faut 2 modules Récepteur Extérieur 12-24V Contact-sec DIAG63ARX. Notez que cela est faisable avec des modules 230V DIAG62ARX mais l'alimentation pose plus de problèmes, comme nous le verrons plus loin. Et un micro-module Fibaro Universal Sensor FGBS : D'après le tableau de la notice, le module DIAG63ARX permet d'effectuer plusieurs actions, mais 2 d'entre elles nous intéressent tout particulièrement : Activation sur intrusion Report Etat Système Comme ces 2 modes sont exclusifs, c'est la raison pour laquelle il nous faut 2 modules différents. Le fonctionnement de ces 2 modes est décrit dans la page du manuel : La programmation du mode de fonctionnement se fait à l'aide de l'unique bouton situé à l'intérieur du coffret : Comme toujours avec Diagral, la séquence de programmation n'est pas très ergonomique, je vous laisse étudier en détail dans la notice dont voici un extrait : Pour notre usage, il faut programmer les paramètres suivants : Report état système : paramètre 5 / valeur 1 Activation sur intrusion : paramètre 6 / valeur 1 D'après la notice, le câblage d'un automatisme s'effectue ainsi : Pour notre utilisation, nous y connectons un module Fibaro Universel, donc on réalise le schéma suivant : En réalité, afin de ne pas surcharger le schéma, il faut connecter le 2nd module DIAG63ARX sur l'entrée IN2 du Fibaro Universel. La même alimentation, 12V dans mon cas, sert à alimenter les 2 modules Diagral et le module Fibaro. C'est là qu'on comprends que le module Diagral DIAG62ARX en 230V est moins pratique à utiliser pour cet usage. Notes : il est également possible d'utiliser le module Fibaro simultanément avec 4 sondes de températures 1-Wire, afin de l'utiliser au maximum de ses capacités. je n'utilise pas les 2 sorties du Fibaro, mais sachant qu'elles sont "copiées" sur les entrées, vous pouvez vous en servir pour allumer une LED, ou tout autre usage à votre convenance. Une fois en place chez moi, cela ressemble à ça, avec les 2 modules cote à cote, j'en ai laissé un ouvert pour l'illustration : Le Fibaro Universel est placé un peu plus loin dans une boite de dérivation avec un départ vers 4 sondes de températures. Pour l'alimentation, au début je pensais utiliser l'alimentation modulaire 12V de GCE Electronics prévue pour les IPX800 et Eco-Devices. Finalement, et grâce à une discussion sur un autre sujet de ce forum, j'ai choisi d'utiliser une alimentation secourue 12V trouvée chez Conrad, associée à une batterie au plomb 12V 1.2Ah. Sachant que la consommation maxi du circuit (2 x Diagral + 1 x Fibaro) est de 194mA, cela me donne une autonomie de plus de 6h en cas de coupure secteur, ce qui est confortable et sécurisant. Le reste de la configuration se passe dans l'interface Home Center 2. Tout d'abord, il faut modifier les propriétés du Fibaro Universel : Cocher la case : Sensor is excluded from alarm system Modifier le paramètre 3 : Entrée normalement ouverte Modifier le paramètre 4 : Entrée normalement ouverte Concernant les paramètres 3 et 4, il faut les modifier ainsi car c'est le choix de câblage que j'ai fait précédemment. A l'inverse, si vous câblez sur la sortie repos des relais des DIAG63ARX, alors il faudra laisser les paramètres 3 et 4 à leur valeur par défaut : entrée normalement fermée. Ensuite, on modifie les propriétés du module associé à l'entrée n°1 du FGBS : Nom : Alarme Cocher la case : Sensor is excluded from alarm system Affectation de 2 icônes sympas que l'on trouve sur le forum. Ensuite, on modifie les propriétés du module associé à l'entrée n°2 du FGBS : Nom : Intrusion on s'assure que la case "Sensor is excluded from alarm system" n'est pas cochée on peut éventuellement ajouter des notifications par SMS, email, push. Pour paramétrer le message des notifications, ça se passe dans le panneau des notifications : Il faut ensuite accéder au panneau d'alarme Fibaro : Dans l'onglet Avancé, on peut paramétrer toutes les actions désirées lorsque l'alarme se déclenchera : allumage/clignotement des lumières, envoi de notifications, pilotage de caméra, etc... : Le principe de fonctionnement est le suivant : L'utilisateur met l'alarme Diagral en marche (via la télécommande, badge RFID, ou clavier) La centrale Diagral informe le 1er module DIAG63ARX qui met le relai en position de travail L'entrée IN1 du Fibaro Universel récupère ce statut Un script LUA se déclenche lorsque le statut du module "Alarme" associé à l'entrée n°1 du FGBS change Ce script arme le module "Intrusion" associé à l'entrée n°2 du FGBS Le panneau d'alarme de la HC2 se met automatiquement en armé (rappel : dans la HC2, ce n'est pas l'alarme qu'on active, mais l'ensemble des capteurs formant cette alarme. Dans notre cas il y a un seul capteur) SI une intrusion est détectée par la centrale Diagral, celle-ci informe le 2nd module DIAG63ARX qui met le relai en position de travail, lequel active l'entrée IN2 du Fibaro Universel, ce que le panneau d'alarme Fibaro interprète immédiatement et déclenche tous les moyens d'actions pré-programmés. Ensuite l'utilisateur désactive l'alarme Diagral => je ne répète pas toutes les opérations, mais on effectue toutes les opérations n°1 à n°6, sauf qu'au lieu d'armer, on désarme le module et donc le panneau d'alarme Pour le script LUA, plutôt que de réinventer la roue, j'ai préféré utiliser le Gestionnaire D'événements Automatique de Steven : local id = { ALARME = 46, -- FGBS Grenier Alarme INTRUSION = 47 -- FGBS Grenier Intrusion } -- Si l'alarme externe est mise en marche, on arme le capteur et le panneau d'alarme GEA.add(id["ALARME"], -1, "", {{"setArmed", id["INTRUSION"]}}) -- Si l'alarme externe est arrêtée, on désarme le capteur et le panneau d'alarme GEA.add(id["ALARME"], -1, "", {{"Inverse"}, {"setDisarmed", id["INTRUSION"]}}) Note : vue la simplicité de ces 2 actions, cela me semble tout à fait réalisable en mode bloc, et devrait permettre aux détenteurs d'une Home Center Lite d'appliquer ce tutoriel dans son intégralité. Je précise que je n'ai pas testé la scène en mode bloc. Maintenant, lorsqu'on active le système d'alarme Diagral, les modules prennent l'état suivant dans la HC2 : Et le panneau d'alarme est armé : Après un cycle de mise en marche puis arrêt de l'alarme, on voit les messages suivants dans le GEA : [DEBUG] 20:16:15: [ 46 | Alarme ] Add Property : ajout de la tache pour lancement instantané [setArmed,47] [DEBUG] 20:16:15: [ 46 | Alarme ] Add Property : ajout de la tache pour lancement instantané [Inverse] [setDisarmed,47] [DEBUG] 20:16:15: GEA Version 3.50 : running... [DEBUG] 20:16:15: [ 46 | Alarme ] sendActions : traitement des actions [setArmed,47] [DEBUG] 20:16:15: [ 46 | Alarme ] sendActions : !ACTION! : setArmed 47 [setArmed,47] [DEBUG] 20:17:15: [ 46 | Alarme ] Add Property : ajout de la tache pour lancement instantané [setArmed,47] [DEBUG] 20:17:15: [ 46 | Alarme ] Add Property : ajout de la tache pour lancement instantané [Inverse] [setDisarmed,47] [DEBUG] 20:17:15: GEA Version 3.50 : running... [DEBUG] 20:17:15: [ 46 | Alarme ] sendActions : traitement des actions [Inverse] [setDisarmed,47] [DEBUG] 20:17:15: [ 46 | Alarme ] sendActions : !ACTION! : setDisarmed 47 [Inverse] [setDisarmed,47] . Il ne reste plus qu'à faire un test réel d'intrusion, avec un pied de biche la poignée d'une fenêtre, afin de vérifier que tout réagit comme attendu. Dans le panneau d'alarme, on constate les événements suivants : Dans cet exemple, j'ai laissé sonner la sirène pendant 3 secondes, entre 14:54:53 et 14:54:56. Et si on l'a paramétré, on reçoit un petit email :
  2. Krikroff

    Installation Satel Integra

    Préambule: Il faut impérativement prendre le temps nécessaire afin de réfléchir à ses besoins : quelles sont les zones à protéger, quels sont les types de protections envisagés (ils peuvent différer selon la topologie des lieux). Après avoir établi le schéma d’implantation afin de visualiser le positionnement de tous les dispositifs de protection, des avertisseurs et du boîtier de l’alarme vous pourrez déterminer la solution technique adéquate, à savoir du tout filaire, du sans fil ou bien un mix des deux. Dans tous les cas de figure si la solution retenue a des caractéristiques filaires et même si en générale le nombre de zone supporté par la carte mère définit sa capacité à les alimenter, il est important de calculer la puissance requise pour tous les dispositifs connectés afin de ne pas risquer de surcharger le module d’alimentation de la CM ni de dépasser le rendement du bloc d’alimentation, si tel est le cas le passage sur un modèle avec un rendement supérieur est impératif, l’autre solution consiste à ajouter une extension au bloc d’alimentation. (il existe un logiciel ConfX pour les installateurs qui permet ce calcul automatiquement en fonction des dispositifs ajoutés) Il me semble aussi préférable d’anticiper de futures besoins et de ne pas sous-dimensionner son installation au risque de devoir faire trop de modification par la suite. Pré requis : Vérifier et installer si besoin les mises à jour des micros logiciels pour la carte mère Intégra, la carte IP ETHM-1, les claviers, cartes d’extensions etc. Tous les fichiers utiles sont téléchargeables sur le site SATEL ici http://www.satel.pl/fr/product/343/#cat609 . Attention, la mise à jour peut être délicate et peut rendre le dispositif non opérationnel si la procédure est mal effectuée. Il est recommandé d’utiliser un ordinateur portable ou un poste fixe sur onduleur pour l’installation du Micro logiciel. Attention aussi aux convertisseurs USB / série utilisés car ils ne se valent pas tous et la carte de mise en réseau ETHM-1 est très sensible à la qualité de la liaison série. Télécharger le logiciel de programmation DloadX disponible en français à l’adresse suivante http://www.satel.pl/fr/product/343/. Procédure : Nota : pour des raisons de sécurité les codes par défaut ne seront pas publiés ici. 1. Configuration de la carte ETHM-1 a. Attribuer une adresse au module avec les cavaliers repérés ADR sur la carte. Cette adresse permet l’identification unique des dispositifs connectés au bus de la centrale Integra. Attention l’adresse doit être unique, en général le clavier principal est en « 0 », le module ETHM-1 peut prendre l’adresse « 1 ». Le constructeur recommande que les adresses commencent à partir de 0 et suivent un ordre croissant. Par exemple il ne faut pas mettre le clavier en 0 et la carte IP en 4… b. Installer le module dans le boîtier de la centrale, le raccorder au BUS clavier de la carte mère, le connecter sur le connecteur de liaison série de la CM dans le cadre d’une programmation par réseau (tcp/ip) avec le logiciel DloadX. Connecter le module au réseau à l’aide d’un câble de catégorie 5 minimum. c. Mettre en route la centrale (Attention la centrale doit être mise en route avec tous les dispositifs raccordés, il est conseillé cependant de ne pas raccorder la sirène, dans ce cas il faut ponter les sorties OUT 1 voir OUT2 2 (selon les options de la sirène) avec une résistance afin que la centrale détecte un dispositif sur ces sorties sans les endommager. d. démarrer la procédure d’identification du matériel depuis le clavier principale (le module ETHM-1 est considéré comme un clavier à part entière.) : Pour cela il faut rentrer en « MODE DE SERVICE* » depuis le clavier et parcourir STRUCTURE -> DISPOSITIF/MATERIEL -> IDENTIFICATION. Lorsque l’identification est correcte, la lettre « I » s’affiche sur l’écran du clavier sous l’adresse du module. *Pour rentrer en « MODE DE SERVICE » il faut taper le code technicien validé par la touche étoile. Information : lors de la mise en service la centrale demande la programmation de l’horloge RTC (horloge temps réel ou real-time clock en anglais), cette action doit être faite avec le logiciel DloadX 2. Configuration de la centrale et de la carte IP ETHM-1 Pour rendre la programmation possible depuis le logiciel DLoadX il faut impérativement que l’option « ACCES PERMANENT DU SERVICE » soit activée. Pour cela il faut rentrer en « MODE DE SERVICE* » depuis le clavier et parcourir CHANGEMENT DE L’OPTION -> ACCES PERM. DU SERV. Note 1: Il est recommandé de sélectionner l’option „Connexion RS†dans les paramètres des claviers auxquels le PC de l’utilisateur sera connecté. L’échange des données avec le PC va démarrer automatiquement au moment de la mise en marche du logiciel GUARDX. Note 2: Après trois saisies de la clé erronée, le module ETHM-1 bloquera la communication avec l’ordinateur pendant environ 20 minutes. a. Pour commencer la programmation en local, il faut connecter le port RS-232 de la carte mère Intégra sur un port RS-232 de l’ordinateur au moyen d’un adaptateur USB/Série ou sur un port disponible déjà existant. Utiliser pour cela le câble e liaison SATEL adéquat ou bien réaliser celui-ci en suivant les indications fournies dans la documentation d’installation. b. Ensuite, rentrer en « MODE DE SERVICE* » sur le clavier principal de l’installation, défiler jusqu'à l’option « DOWNLOADING » , appuyer sur la touche # pour valider la sélection, sélectionner maintenant « DEMARRAGE DWNL-RS » puis valider la sélection toujours avec la touche #. c. Sur l’ordinateur, ouvrir le logiciel DloadX ; Si le port RS-232 de centrale a été connecté au port COM1 de l’ordinateur, la communication avec la centrale sera établie automatiquement. Sinon, créer un espace de travail, FICHIER -> NOUVEAU -> Choisir le modèle de la centrale. Puis sur l’icone « clé à molette » ou bien dans le menu CONNECTION -> CONFIGURATION, indiquer le port RS-232 à utiliser. L’établissement de la communication devrait être automatique après validation de la fenêtre, si ce n’est pas le cas il faut cliquer sur l’icône « communication » et choisir port RS-232. (icones « clé a molette » et « connexion ») Lorsque la connexion est établie, la fenêtre peut être fermée. Programmation de l’horloge RTC : Cliquer sur l’icône horloge puis valider la boîte de dialogue par « oui » d. Dans le menu DONNEES -> STRUCT. METERIEL -> STRUCTURE -> Onglet Matériel Le module ETHM-1 apparait dans la liste des claviers D’une manière général il est préférable de désactivé la fonction DHCP de la carte et de fixer les paramètres réseau en renseignant manuellement une adresse IP fixe disponible, le masque sous-réseau et la passerelle. Le DNS peut lui rester automatique, il est usuel d’utilisé celui de google : 8.8.8.8 Conserver ou modifier le port attribué par défaut pour DloadX (7090) et pour GuardX (7091). Attribuer un port différent pour L’intégration en veillant à ce que la case à coché « intégration cryptée » soit bien décoché faute de quoi le HC2 ne pourrait pas communiquer avec la centrale. e. L’administrateur (utilisateur principale) doit avoir tous les privilèges, cela peut ce vérifier dans DloadX sous le menu UTILISATEURS -> UTILISATEURS, utilisateur de type « Administrateur » f. Vérifier dans le menu DONNEES -> OPTIONS -> Onglet Temps que la case à coché « Cacher Information sur armer après » soit bien décochée, activée cette option pourrait fausser l’état des détecteurs. g. Pour pouvoir gérer la centrale via Ethernet à l’aide du programme DloadX les options « REPONSE-MODEM », « MODEM EXTERNE », « MODEM EXTERIEUR ISDN/GSM/ETHM » doivent être activées. h. Depuis le menu COMMUNICATION -> CODES NBRE. TEL. Renseigner les champs suivants : - Identifiant pour la centrale : identifiant de la communication de la centrale correspondant à celui programmé dans la centrale - Identifiant DloadX : identifiant de la communication du programme DLOADX correspondant à celui programmé dans la centrale - Identifiant GuardX : identifiant de la communication du programme GUARDX correspondant à celui programmé dans la centrale - Connexion TCP/IP : DloadX -> ETHM : adresse IP du module ETHM-1, le port (identique à celui programmé dans le module pour la communication avec le programme DLOADX ou bien celui exposé par votre pare feu). La clé serveur (identique à celle programmée dans le module pour la communication avec le programme DLOADX.) Enregistrer les données dans la mémoire flash de la centrale Integra en fin de configuration. i. La fonction de programmation en local depuis l’ordinateur (« DOWNLOADING ») doit être terminée pour pouvoir établir une connexion par Ethernet avec le module ETHM-1 que cela soit avec DloadX, GuardX ou bien par le port d’intégration utilisé par le serveur Fibaro HC2. Pour cela, rentrer en « MODE DE SERVICE* » sur le clavier, défiler jusqu'à l’option « DOWNLOADING » , appuyer sur la touche # pour valider la sélection, choisir « FIN DWNL-RS », valider par #. Note : Selon la documentation constructeur il est dit que : « La fonction sera arrêtée automatiquement si, depuis la dernière utilisation du logiciel DLOADX sont passées 255 minutes, et pendant ce temps, l’accès au service a été verrouillé ou a expiré. » Lexique : BUS : Utilisé pour le transfert des données, il interconnecte différents éléments d’un même environnement. Micro-logiciel: Communément appelé « Firmware » en anglais, le micro logiciel est un logiciel intégré (ou embarqué) dans un matériel. Cette fonctionnalité permet à un matériel d’évoluer par mise à jour. Liaison série (RS232) : Permet la transmission d’information d’un matériel à un autre. Ex : Ordinateur <-> Centrale d’alarme
  3. YAPS - Présence Simulator, Un De Plus ... ? Voici un petit script qui améliore (enfin pour moi en tout cas) les scripts de simulation de présence existants. Je me suis basé sur celui-ci: http://forum.fibaro.com/viewtopic.php?p=52734#52734 que j'ai amélioré depuis quelques temps mais sur le forum officiel. Ce script enclenche la simulation au coucher du soleil et la termine à heure fixe définie dans les variables: local stop_hour = "01" local stop_minute = "10"; Pas besoin d'utiliser le VirtualDevice pour activer et désactiver, définir la Variable Globale "Simu_presence" (via GEA par exemple) enclenche ou déclenche la scène Le Virtual device surveille aussi l'état de la VG et se modifie en fonction pour afficher la bonne icône et le status en toutes lettres. Pour cela, j'ai modifié le script pour qu'il tourne dans une scène (appuyer sur les boutons des VD via script me gave, les boutons changent d'id, en cas de reset complet de la box il faut retrouver les id etc... J'ai ajouté un mode "marche forcée" J'ai ajouter l'exit immédiat en cas de changement de Variables Globales J'ai ajouté la possibilité d'allumer une lampe en fin de script J'ai corrigé pas mal de bugs du script d'origine, je pense qu'il n'y en a plus actuellement Soit, rien de tel que les VG et les scènes, très faciles pour utiliser avec GEA, scènes en mode block etc. Je garde les Virtual Devices pour l'apparence et les commandes (via modification de VG) Avantages: Portabilité, interaction avec d'autres scripts possibles, migration aisée. Première étape: Créer une Variable Globale prédéfinie "Simu_presence" avec les valeurs 0 et 1 Créer une Variable Globale prédéfinie "overideSimuSunset" avec les valeurs 0 et 1 Deuxième étape: Créer le Virtual Device: Pour cela, importer le fichier: Presence_Simulator.vfib (ajouter nouveau virtual device) Pour avoir une idée: Voici le bouton ON: fibaro:setGlobal("Simu_presence", "1") fibaro:setGlobal("overideSimuSunset", "0") OFF: fibaro:setGlobal("Simu_presence", "0") fibaro:setGlobal("overideSimuSunset", "0") Override: fibaro:setGlobal("Simu_presence", "1") fibaro:setGlobal("overideSimuSunset", "1") et le main loop: -------------------------------- -- YAPS Presence Simulator V2.0 -- SebcBien -- Janvier 2015 -------------------------------- local thismodule = fibaro:getSelfId(); local presence = fibaro:getGlobal("Simu_presence") local overide = fibaro:getGlobal("overideSimuSunset") --fibaro:debug(presence) --fibaro:debug(overide) if presence == "1" then presencemsg = "ON" else presencemsg = "OFF" end if overide == "1" then overidemsg = "ON" else overidemsg = "OFF" end fibaro:log(presencemsg .. " (Overide " .. overidemsg .. ")") fibaro:call(thismodule, "setProperty", "ui.status.value", "Presence: " .. presencemsg .. " (Overide " .. overidemsg .. ")"); --fibaro:debug(thismodule); if presence == "1" then fibaro:call(thismodule, "setProperty", "currentIcon", 1026) end if presence == "0" then fibaro:call(thismodule, "setProperty", "currentIcon", 1027) end fibaro:sleep(5000); Troisième étape: Créer une nouvelle scène lua et y mettre ce code: Attention, ce n'est plus la dernière version, voir les pages suivantes pour les mises à jour. LA DERNIERE VERSION SERA TOUJOURS SUR GITHUB !!!: https://github.com/sjauquet Ensuite Allez sur YAPS.scene.lua et télécharger avec le bouton RAW si vous ne voulez pas installer un client GIT (SmartGit est top ;-) ) --[[ %% autostart %% properties %% globals Simu_presence --]] -------------------------------- -- YAPS Presence Simulator V2.0 -- SebcBien -- Janvier 2015 -------------------------------- if (fibaro:countScenes() > 1) then fibaro:debug("More than one scene active, exiting!"); fibaro:abort(); end --------------------- USER SETTINGS -------------------------------- local id = { LAMPE_SDB = 16, LAMPE_CH_AMIS = 24, LAMPE_SALON = 45, LAMPE_BUREAU = 49, LAMPE_HALL = 52, LAMPE_CELLIER = 56, LAMPE_CH_EMILIEN = 58 } local stop_hour = "01"; -- Hour when you want simulation to stop local stop_minute = "10"; -- Minute of the hour you want simulation to stop -- note 1: the script will not exit while waiting the random time of the last light turned on. So end time can be longer than specified end time -- note 2: if the global variable changes during the same wait time as above, it will exit immediately (when back home while simulation runs) local rndmaxtime = 30 -- random time of light change in minutes --> here each device is on maximum 30min local ID_devices_lights = {id["LAMPE_SDB"],id["LAMPE_HALL"],id["LAMPE_BUREAU"],id["LAMPE_CELLIER"],id["LAMPE_CH_AMIS"]} -- IDs of lights to use in simulation --local ID_devices_lights = {id["LAMPE_HALL"],id["LAMPE_BUREAU"],id["LAMPE_CELLIER"]} -- IDs of lights to use in simulation local activatePush = true; -- activate push when simulation starts and stops local ID_Smartphone = 53; -- ID of your smartphone local ID_On_After_Simu = id["LAMPE_HALL"] -- Only One ID of a lamp to turn on after simulation ends (set 0 to disable) --------------------- USER SETTINGS END ---------------------------- ----------------------ADVANCED SETTINGS----------------------------- local showStandardDebugInfo = true; -- Debug shown in white local showExtraDebugInfo = true; -- Debug shown in orange local numbers_lights = #ID_devices_lights -- numbers of light devices listed above local manualOveride = fibaro:getGlobal("overideSimuSunset"); -- if = 1 then the simulation is forced -------------------------------------------------------------------- ----------------------------------- ----- Do not change code below ---- ----------------------------------- local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local start_simu = fibaro:getValue(1, "sunsetHour"); --Start simulation when sunset --local start_simu = "22:28" local endtime version = "1.1.0" SimulatorPresenceEngine = {}; -- debug function Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); end ExtraDebug = function (debugMessage) if ( showExtraDebugInfo ) then Debug( "orange", debugMessage); end end StandardDebug = function (debugMessage) if ( showStandardDebugInfo ) then Debug( "white", debugMessage); end end -- function push message to mobile pushMessage = function (sendPush) if (activatePush) then ExtraDebug("Push info sent to mobile") fibaro:call(ID_Smartphone, 'sendPush', sendPush); end end -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) Debug("red","TurnOff All lights!") local name, id2; local ID_devices_group = group; for i=1, #ID_devices_group do id2 = tonumber(ID_devices_group[i]); fibaro:call(id2, "turnOff"); name = fibaro:getName(id2); if (name == nil or name == string.char(0)) then name = "Unknown" end StandardDebug("Device:" .. name .. " Off "); end if ID_On_After_Simu ~= 0 then fibaro:call(ID_On_After_Simu, "turnOn"); end end -- function to calculate endtime function SimulatorPresenceEngine:EndTimeCalc() local start = os.date("%H:%M") local time = os.time() local date = os.date("*t", time) local year = date.year local month = date.month local day = date.day endtime = os.time{year=year, month=month, day=day, hour=stop_hour, min=stop_minute, sec=sec} --ExtraDebug ("CurrentTime" ..os.time()) --ExtraDebug ("Original EndTime " ..endtime) if endtime < os.time() then endtime = endtime + 24*60*60 -- ExtraDebug ("Modified Endtime " ..endtime) end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() ExtraDebug( "Simulation will stop: "..stop_hour..":"..stop_minute ); if (os.time() >= endtime) or (simu == "0") or (manualOveride == "0") then ExtraDebug("Simulation stopped") SimulatorPresenceEngine:TurnOff(ID_devices_lights) end pushMessage("Lights simulation started") while ((os.time() <= endtime) and (simu == "1")) or ((manualOveride == "1")) do -- original code: while ((os.time() <= endtime) and (simu == "1")) or ((os.time() <= endtime) and (simu == "1") and (manualOveride == "1")) do if time == endtime then StandardDebug("time and endtime same value -> end") end local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update StandardDebug('light ID:'..random_light..' status:'..lightstatus) local sleeptime = math.random(rndmaxtime*60000) --random sleep fibaro:debug("entering loop of " .. sleeptime/60000 .. "minutes") -- This modification allows to exit the scene if the Simu_presence global var changes to 0 during the random sleep local counterexitsimu = 200 while (counterexitsimu > 0) do counterexitsimu = counterexitsimu - 1; test_presence_state = fibaro:getGlobal("Simu_presence") simu = tonumber(test_presence_state); --verify the global value, if the virtual device is deactivated, the scene stops. --fibaro:debug("simu var state : " .. simu) if simu == 0 then counterexitsimu = 0 end fibaro:sleep(sleeptime/200) end fibaro:debug("exiting loop of " .. sleeptime/60000 .. "minutes") local sleeptimemin = math.abs(sleeptime/60000) StandardDebug('sleeptime:'..sleeptimemin) simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. manualOveride = fibaro:getGlobalValue("overideSimuSunset") end end -- Main Script beginning SimulatorPresenceEngine:EndTimeCalc(); if (simu == "1") then Debug("green", "Simulate Presence at Home | v" .. version ); Debug( "green", "--------------------------------------------------"); ExtraDebug("Today's sunset: "..fibaro:getValue(1, "sunsetHour")) end if (simu == "1") then Debug("grey", "Simulate Presence will start at "..start_simu) pushMessage("Simulate Presence will start at "..start_simu) end -- Main Loop while (simu=="1") do -- Condition to start simulation simu = fibaro:getGlobal("Simu_presence"); manualOveride = fibaro:getGlobal("overideSimuSunset"); if (os.date("%H:%M") >= start_simu) then sunset = 1 else sunset = 0 end if ((simu == "1") and os.time() <= endtime and sunset == 1 ) or ((simu == "1") and manualOveride == "1" ) then SimulatorPresenceEngine:Launch(); --launch the simulation. if manualOveride == "1" and sunset == 0 then Debug("grey", "Manual override activated") elseif sunset == 1 then Debug("grey", "It's sunset time, starting simulation") end if sunset == 0 and manualOveride == "0" then Debug("grey", "Not manual override so Presence Simulation will not be activated"); elseif os.time() >= endtime then Debug("grey", "Time is now after:"..stop_hour..":"..stop_minute.."deactivating"); SimulatorPresenceEngine:TurnOff(ID_devices_lights); Debug("red","Simulation is deactivated") pushMessage("Lights simulation stopped") end end end -- Condition to end simulation if (simu == "0") then SimulatorPresenceEngine:TurnOff(ID_devices_lights); Debug("red","Simulation is deactivated") pushMessage("Lights simulation stopped") end Debug("red","Exit from scene") Dans user settings vous pouvez y mettre votre liste d'id "format GEA" (ça facilite quand il faut tout réinstaller hein ) Pour définir la variable rndmaxtime, pensez que ce script n'allume pas une lampe après en avoir éteint une autre, mais il y en aura tantôt 3 d'allumées, puis 1 s'éteint etc. c'est donc plutôt une variable qui définit le "mouvement" dans la maison, il n'y a pas d'effet sapin de noà«l qui clignotte S'il y a une demande je pourrais considérer de traduire le code en français, mais je pense que avec des rudiments d'anglais ça se lit facilement ;-) Les icônes viennent du post 6 de ce fil: http://www.domotique-fibaro.fr/index.php/topic/198-simulation-de-pr%C3%A9sence/ pour les id des icônes pour remplacer dans le mainloop du virtual device, if presence == "1" then fibaro:call(thismodule, "setProperty", "currentIcon", 1026) end if presence == "0" then fibaro:call(thismodule, "setProperty", "currentIcon", 1027) end je l'ai fait à l'arrache mais apparemment il y a une méthode plus scientifique en utilisant le toolkit de Krikroff... si une bonne âme la connait, feel free to post Enjoy ! icônes pour VD et Scène:
  4. Moicphil

    Module Virtuel Alarme Avancée

    Module Virtuel Alarme Avancée Voici un module virtuel qui va vous permettre de gérer une " alarme " avec sélection de la zone à contrôler. Ce module est couplé à une seule et unique scène. Avant d'activer la zone choisie, vous aurez préalablement renseigné les sensors à contrôler. Possibilité, pour chaque zone, d'exclure temporairement un ou plusieurs sensors de la zone. Possibilité de lancer un test de l'ensemble des sensors déclarés dans la HC2. Ceci pour vérifier leur état ( ouvert ou fermé ) Un mode "Panic" fonctionnant sur un double-clic (paramétrable) Principe de fonctionnement : Appui sur la zone souhaitée...si les sensors déclarés sont dans l'état "fermé", on active le mode choisi (via une variable) puis push pour confirmer la mise en route. Si un ou des sensors sont ouverts, on reste en mode "arrêt", puis push pour nous signaler quel(s) sensor est ouvert(s). La scène contrôle en continu l'état des variables et des sensors. si passage en "ouvert" pendant qu'une zone est active, les actions se feront selon votre choix selon si votre sensor est "ouvert" ou "ouvert et armé" Nous avons donc 7 scènes en une . Dans ce module, pour "regrouper", j'ai intégré le pilotage de mes automatismes, mais vous pouvez bien évidement supprimer les boutons et labels dédiés. Avant toute chose, créer 3 variables : PA_Sensors (stocke les ID a contrôler) PA_Mode (stocke le mode en cours) PA_Exclus (stocke les ID a exclure) Sur les 3 premiers boutons (dans mon cas, c'est Jour, Nuit, Silence), il faut remplacer la ligne local sensors = {21, 28, 91, 82} par les détecteurs que vous souhaitez vérifier selon le mode : . Si vous souhaitez "armer" les sensor dans un mode vous pouvez saisir le code ci-dessous pour chaque sensor à armer : . local sensors = {133, 25, 232, 103, 28, 31, 132, 229, 228, 29, 30, 131} --"Porte escalier","Porte salon 1","Porte entrée","Porte salon 2","Fenetre garage","Fenetre buanderie","Fenetre cuisine","Porte de garage","Chambre grise","Fenetre chambre","velux","Fenetre salon 3"} -- --------------------------------------- -- Ne pas toucher -- --------------------------------------- local mode = "Jour" fibaro:setGlobal("PA_Sensors", json.encode(sensors)) fibaro:setGlobal("PA_Mode", mode) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode) --pour armer un ou des sensors : --fibaro:call(25, "setArmed", "1") armer un sensor --fibaro:call(232, "setArmed", "1") armer un sensor . Les boutons d'exclusion sensor: Derrière chaque bouton, renommer le Label ( dans mon cas "Fen.1" ... "Fen.2" ), puis copier le code ci-dessous et changer l'ID de l'ouvrant concernée ..ID 25 dans mon cas car 25 est l'ID de mon détecteur de fenêtre 1 local sensor = 25 . Code à insérer sur chaque bouton : local sensor = 25 -- --------------------------------------- -- Ne pas toucher -- --------------------------------------- function exist(t, s) for i,k in ipairs(t) do if (k == s) then return i end end return nil end local exclus = fibaro:getGlobal("PA_Exclus") if (exclus and exclus ~= "") then exclus = json.decode(exclus) else exclus = {} end local index = exist(exclus, sensor) if (index) then table.remove(exclus, index) else table.insert(exclus, sensor) end local jExclus = "" local nExclus = "" if (#exclus > 0) then jExclus = json.encode(exclus) for i = 1, #exclus do nExclus = nExclus .. fibaro:getName(exclus[i]) .. ", " end nExclus = nExclus:sub(1, nExclus:len()-2) end fibaro:setGlobal("PA_Exclus", jExclus) fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblExclus.value", nExclus) Vous pouvez, si vous souhaitez, supprimer ou ajouter des boutons supplémentaires. Bouton "test des ouvrants" : Pour le bouton "test des ouvrants", spécifier le ou les Id des smartphones qui recevront une notification : (Dans mon cas : 239 ) . Voici la scène qui gère tout ça : Ce que vous avez à faire : Au début du code... - Renseigner l'ensemble des id des sensors associé à la HC2 sous l'entète "properties" - Renseigner l'Id du ou des smartphones - Renseigner l'Id du module virtuel précédemment créé. - Renseigner les actions selon le mode choisi et si le(s) sensor(s) et armé ou non : . --[[ %% properties %% globals PA_Mode PA_Sensors --]] local portables = {xx, xx} local id_module_virtuel = xxx function doIt(mode, armed, id) fibaro:debug(mode) if (armed) then fibaro:debug("armé") else fibaro:debug("désarmé") end ----------------------------------------------------------------- if (mode == "Jour" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Jour" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Nuit" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Nuit" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Silence" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Manuel" and armed) then ----------------------------------------------------------------- elseif (mode == "Manuel" and not armed) then ----------------------------------------------------------------- elseif (mode == "Arret" and armed) then ----------------------------------------------------------------- elseif (mode == "Arret" and not armed) then ----------------------------------------------------------------- ----------------------------------------------------------------- elseif (mode == "Panic") then ----------------------------------------------------------------- ----------------------------------------------------------------- end end -- ----------------------------------------------------- -- Envoi le message PUSH -- ----------------------------------------------------- function sendMessage(message) for i = 1, #portables do fibaro:call(portables[i], "sendPush", message) end fibaro:debug(message .. " [envoyé]") end -- ----------------------------------------------------- -- Vérifie si les portes sont bien fermées -- ----------------------------------------------------- function check(doors) local stillopen = {} -- On vérifie l'état des portes -- for i = 1, #doors do if (doors[i]~=nil) then local id = tonumber(doors[i]) local name = fibaro:getName(id) or "unknown" if (tonumber(fibaro:getValue(id, "value")) == 1) then table.insert(stillopen, id) fibaro:debug(name .. " est ouverte") else fibaro:debug(name .. " est fermée") end else fibaro:debug("ID #"..i.." n'existe plus") end end if (stillopen and #stillopen > 0) then -- au moins une porte n'est pas fermée local msg = "" if (#stillopen == 1) then msg = msg .. "Attention : " else msg = msg .. "Attention : " end for i = 1, #stillopen do msg = msg .. " " .. fibaro:getName(tonumber(stillopen[i])) end if (#stillopen == 1) then msg = msg .. " est toujours ouverte." else msg = msg .. " sont toujours ouvertes." end -- -------------------------------------------- -- Actions si sensor(s) ouvert(s) ----------------------------------------------- -- on averti par push sendMessage(msg) -- Passage en mode Arret local mode = "Arret" fibaro:setGlobal("PA_Mode", mode) fibaro:call(id_module_virtuel, "setProperty", "ui.lblMode.value", mode) return false end return true end -- ----------------------------------------------------- -- Transforme une châine en tableau en utilisant -- un délimiteur -- ----------------------------------------------------- function split(text, sep) local sep, fields = sep or ":", {} local pattern = string.format("([^%s]+)", sep) text:gsub(pattern, function(c) fields[#fields+1] = c end) return fields end local source = fibaro:getSourceTrigger() local id_declencheur = nil local isOpen = "1" fibaro:debug(source["type"]) if (source["type"] == "property") then id_declencheur = tonumber(source["deviceID"]) elseif (source["type"] == "global") then fibaro:debug( source["name"]) local gName = fibaro:getGlobal(source["name"]) if ( gName == "Panic") then doIt( "Panic", false, 0 ) elseif (source["name"] == "PA_Sensors") then fibaro:debug(gName) local doors = fibaro:getGlobal("PA_Sensors") local exclus = fibaro:getGlobal("PA_Exclus") doors = split(string.gsub(doors, "[%[%]]", ""), ",") if (exclus and exclus ~= "") then exclus = split(string.gsub(exclus, "[%[%]]", ""), ",") else exclus = {} end todo = {} for i = 1, #doors do local found = false for j = 1, #exclus do if (doors[i] == exclus[j]) then found = true end; end if (not found) then table.insert(todo, doors[i]) fibaro:debug(doors[i] .. " doit être vérifiée") end end fibaro:debug("Checking doors") if (not check(todo)) then else ------------------------------------------- -- Actions lorsque l'alarme est activée ------------------------------------------- --Vos actions ici ---------------------------------------------- end end elseif (source["type"] == "other") then id_declencheur = nil isOpen = "0" end if (not id_declencheur) then return end fibaro:debug("Déclencheur " .. id_declencheur) local actif = fibaro:getGlobal("PA_Sensors") local exclus = fibaro:getGlobal("PA_Exclus") if (actif and actif ~= "") then fibaro:debug(actif) actif = string.gsub(actif, "[%[%]]", ",") local exist = string.find(actif, ","..id_declencheur) if (exist) then fibaro:debug("exist") end local todo = exist if (exclus and exclus ~= "") then fibaro:debug(exclus) exclus = string.gsub(exclus, "[%[%]]", ",") if (string.find(exclus, ","..id_declencheur)) then fibaro:debug("ID Excluded") todo = false end else fibaro:debug("Exclus empty") end if (todo and fibaro:getValue(id_declencheur, "value")==isOpen ) then doIt( fibaro:getGlobal("PA_Mode"), fibaro:get(id_declencheur, 'armed')=="1", id_declencheur ) end end -- J'ai testé ce module pendant 15 jours, sans aucuns soucis, très fiable et réactif. Pour télécharger le Vfid, c'est ici : >> Alarme_Avancée.vfib J’espère ne rien avoir oublié et que c'est assez clair... Un grand merci à Steven pour son aide si précieuse . .
  5. fdp2

    Virtual Device Alarme Somfy

    Ce module virtuel permet de contrôler une alarme Somfy Protexiom via son interface web. A ce jour la solution permet de : Connaître l'état de l'alarme (etat des zones, et alerte) Récupérer les éventuels défaut de l'alarme (défaut pile, liaison radio, porte ouverte, sabotage) Piloter l'alarme (choix des zones à activer ou arrêt total. L'alarme protexiom permettant de contrôler des volet roulants RTS, un second device est livré, afin de permettre le control de vos volets somfy (attention, il s'agit d'une commande centralisée. N'ayant pas de volets somfy, je l'utilise pour piloter mon store banne RTS). Sur le même principe que les volets roulants, un troisième device permet de piloter un lumière RTS via la centrale d'alarme SOMFY. Ce device virtuel est plug&play : Il créera lors de son installation les variables globales nécessaires à son fonctionnement. (grâce à un bout de code très très largement inspiré d'un dev de @Krikroff que je remercie au passage:-) Les variables globales créées peuvent êtres utilisée dans des scènes afin d'agir sur les événements de l'alarme. Attention : Le device virtuel n'a pas été adapté pour la V4 du firmware HC2. Si vous être en V4, vous devrez créer manuellement les variables. Les limites de la solution (On commence par les choses qui fachent ) Versions d'alarme compatible Pour une même version de l'alarme (Protexiom 600), il existe différentes versions de materiel et de firmware. Somfy ne permet pas de faire des mises à jour de firmware. Somfy ne propose pas d'API, le device virtuel execute donc les pages webs comme on le ferait via un browser. Selon les versions de firmware, certaines pages sont différentes La solution supporte actuellement 4 version différente, aussi bien dans la gamme protexiom que protexial. Si la votre n'est pas compatible, tenez moi informé afin de voir s'il est possible de l'intégrer. Session unique L'ouverture d'une session sur l'alarme est lente, et log une entrée dans son journal d’événement. Afin de ne pas surcharger l'alarme, et d'avoir un plugin réactif, la session est maintenue ouverte par le plugin. L'alarme ne permet qu'une seule session active à la fois. Cela signifie que lorsque le device virtuel est connecté, vous ne pouvez pas vous connecter à l'alarme (par exemple pour consulter sont journal d’événement ou la paramétrer. Pour contourner ce problème, ou bouton VD OFF est présent sur le device virtuel. Lorsqu'il est activé, le device virtuel interromp sa connexion avec l'alarme et libère la session. Il n'est donc plus opérationel, mais vous laisse la possibilité de vous connecter à l'alarme. Dans ces conditions, le module volets roulant est également inopérant. L'appuis sur VD ON permet de relancer la connexion Timout session La session de l'alarme a une durée de vie limitée. Même avec des interrogation régulière, la session est interrompue au bout du timout. L'interface d'amin de votre alarme permet de régler ce timeout. Je vous conseil de le régler au maximum (soit 99 minutes). Lors du timout, le device virtuel gérera automatiquement la reconnexion. Ce fonctionnement sera donc totalement transparent, si ce n'est l’apparition des logs de connexion dans le journal d’événement de l'alarme. Stabilité du serveur web de l'alarme Le serveur web de l'alarme somfy n'est pas conçu pour être utilisé de cette façon. Il est donc parfois instable. Il arrive que l'alarme génère un fichier XML vide pour le retour d'état. Dans ce cas, le module virtuel ferme puis ouvre une nouvelle session. Cela suffit à corriger l'erreur de façon automatique Il arrive que le serveur web de l'alarme ne réponde plus correcte. Dans ce cas la seule solution est de débrancher la centrale téléphonique de l'alarme pour réinitialiser le serveur WEB. Cette action n'a pas de conséquence car l'alarme fonctionne sur pile. Elle est toujours opérationnelle durant le reboot, seul la fonction « serveur web » utilise l'alimentation secteur. Le device virtuel contient une méthode reboot (décrite plus loin) qui permet de prendre en charge le « reboot » lorsque l'alarme ne répond pas. Malgré ces défaut, j'ai tester le module virtuel avec une interrogation de l'alarme toutes les 3 secondes pendant plusieurs jours, cela fonctionne parfaitement et à l'usage ces défaut restent imperceptibles. La disponibilité du développeur Comme la pluspart d'entre vous, je suis passionné par la domotique, j'aimerai avoir beaucoup plus de temps a y consacré. Je souhaite que ce developpement puisse profité au plus grand nombre. En cas de difficulté, j'essayerai de vous aider du mieux possible, mais ma productivité, et le temps que j'arrive à consacrer à mes propres projets... il va falloir vous armer de beaucoup de patience... Installation / Paramétrage Paramétrage de l'alarme (Timeout) Il est conseillé d'augmenter le timout de l'alarme a sa valeur maximum. Connecter vous à l'alarme en mode Administrateur puis dans les réglages de l'interface, régler le délais d'expiration de la session. Installation / paramétrage du device virtuel Importer le device virtuel, puis dans l'onglet avancé indiquez l'adresse IP et le port de l'alarme sur le réseau local. Il est ensuite nécessaire de paramétrer les variables suivantes dans le main loop : -- Password for Somfy user SomfyPwd = "1234" SomfyPwd = Le mot de passe utilisateur (important, pas le mot de passe administrateur ou installateur) -- Authentication Card SomfyAuthCard = {} SomfyAuthCard.A1 = "1234"; SomfyAuthCard.A2 = "1234"; SomfyAuthCard.A3 = "1234"; SomfyAuthCard.A4 = "1234"; SomfyAuthCard.A5 = "1234" SomfyAuthCard.B1 = "1234"; SomfyAuthCard.B2 = "1234"; SomfyAuthCard.B3 = "1234"; SomfyAuthCard.B4 = "1234"; SomfyAuthCard.B5 = "1234" SomfyAuthCard.C1 = "1234"; SomfyAuthCard.C2 = "1234"; SomfyAuthCard.C3 = "1234"; SomfyAuthCard.C4 = "1234"; SomfyAuthCard.C5 = "1234" SomfyAuthCard.D1 = "1234"; SomfyAuthCard.D2 = "1234"; SomfyAuthCard.D3 = "1234"; SomfyAuthCard.D4 = "1234"; SomfyAuthCard.D5 = "1234" SomfyAuthCard.E1 = "1234"; SomfyAuthCard.E2 = "1234"; SomfyAuthCard.E3 = "1234"; SomfyAuthCard.E4 = "1234"; SomfyAuthCard.E5 = "1234" SomfyAuthCard.F1 = "1234"; SomfyAuthCard.F2 = "1234"; SomfyAuthCard.F3 = "1234"; SomfyAuthCard.F4 = "1234"; SomfyAuthCard.F5 = "1234" Renseigner dans chaque variable A1, A2... le code correspondant de cotre carte d'authentification. -- Polling ninterval (in sec) SomfyPollingTime = 0 Renseigner dans SomfyPolling time la durée en seconde que vous souhaitez entre 2 interrogation de l'état de l'alarme. -- HC2 admin credential for variable creation Hc2Login = "admin" Hc2Passwd = "XXXXXXXX" Renseigner ici les identifiants admin de votre HC2. Il sont necessaire à la création des variables globales au premier lancement. -- IconID IconAlarmTriggered = 1031 IconAlarmStoped = 1032 IconAlarmOn = 1033 Renseigner ici les ID des icones que vous souhaitez utiliser. Une fois le paramétrage terminé, il suffit de sauvegarder, puis d'aller consulter le debug du mail loop. Si tout s'est bien passé, la log devrait ressembler à ça : Si votre HC2 est dans une version > 3.590, il est nécessaire de créer manuellement les variables suivantes dans le panneau de variable: ProtexiomVDOn = "OFF" ProtexiomOnOff = "000" ProtexiomTriggered = "0" ProtexiomDefault = "0000" ProtexiomToken = "" ProtexiomHwVers = "" A ce stade, le module est prêt à fonctionner. Le warning indique que le device virtuel est arreté. Il suffit désormais d'appuer sur le bouton VD ON pour que le module initialise la connexion avec l'alarme. La connexion mettra quelques dizaines de secondes à s'établir (+ le délais de polling) puis le message suivant indique une connexion correcte. Importer également le module volet roulants si vous souhaitez l'utiliser. Sur ce module, on renseigne également l'adresse IP et le port de l'alarme. Par contre pas de paramètres à modifier dans le main loop. Redemarrage du serveur web en cas d'instabilité Sur des alarme récentes, il est possible que le serveur web soit plus stable et ne nécessite pas de redémarrage. Dans ce cas, rien de plus à faire. Si le device virtuel ne se met plus à jour et que des trace de reboot apparaissent dans son mail loop, il sera alors nécessaire : De contrôler l'alimentation de la centrale téléphonique via un wall plug, micromodule switch ou autre solution Compléter dans le main loop la fonction reboot (ligne 879) afin quelle désactive, puis réactive l'alimentation de la centrale. Utilisation dans des scenes Un certain nombre de variables sont créées par le module, afin de gérer la session, et stocker l'état de l'alarme. Les variables suivantes sont utilisable afin de déclencher des scènes sur changement d'état de l'alarme : ProtexiomAlarmOnOff Les 3 digits représentent la valeur des trois zones : 000 = Alarme désactivée 100 = Zone A activée 111 = Zones ABC activées … ProtexiomAlarmTriggered OK = Pas d'alarme NOK_INT = Alarme intrusion D'autres valeurs sont possible par exemple si vous avez des détecteurs d'incendie. ProtexiomDefault : Chaque digit représente un défaut. 0 = pas de défaut, 1 = un défaut. Les digits correspondent dans l'ordre à : Piles faibles Porte ouverte Sabotage (autoprotection des capteurs) Problème de communication avec un capteur Troubleshootings : Si le device virtuel ne fonctionne pas, et que vous obteniez dans la log du main loop l'erreur ci_dessous (avec hardware version <> 1, 2, 3, ou 4) C'est probablement que vous avez des valeurs éronnés dans certaines variables. Utilisez la procédure décrite ici pour rétablir la situation.
  6. bencol

    Réplicateur De Présence

    => publication d'une version 2.0 plus efficace, plus simple et avec un meilleur debug + commentaires en français Le principe de ce bout de code est le suivant : simuler une présence dans votre logement en s'appuyant sur votre mode de vie des mêmes journées les précédentes semaines. Le programme analyse le comportement des lumières des 2 dernières semaines (à partir de l'historique de consommation) et simule par réplication une vraie vie (la vôtre !) dans votre logement. 3 prérequis : - il est nécessaire de vérifier que les modules de type lampe sont bien déclarés comme lampe. Pour cela il faut aller dans la configuration avancée des modules concernées et sélectionner dans appareil commandé : Eclairage ou Lampe de chevet ou Lampe de jardin,.... - ajouter pour les modules qui le permettent le suivi de la consommation électrique (attention, il faudra attendre au moins 2-3 semaines que cela soit efficace) - créer une variable globale "Simu_presence" avec comme possibilité ON ou OFF Le code ci-dessous peut être placé dans la boucle principale dans un module virtuel. En pièce jointe le module à importer. ----------------------- -- fonction d'arrondi -- ------------------------ function math.round(num, idp) return tonumber(string.format("%."..idp.."f", num )); end -------------------- -- Debug function -- -------------------- function Debug(message, color) if (color == nil) then color = "white";end; fibaro:debug(string.format("<font color=" .. color .. ">" .. message .. "</font>")); return; end ------------------------------------------------------------------------------------------------------------------ -- Fonction de récupération de l'historique de l'allumage d'une lampe -- ------------------------------------------------------------------------------------------------------------------ local function CollecteStatus(DureeHistorique, Device) local TimeStart = DureeHistorique + 300; -- à la date de l'historique plus 5 min local TimeEnd = DureeHistorique - 300; -- à la date de l'historique moins 5 min -- init tableaux et variables local TabMeasure = {}; -- tableau de mesures timestamp/activité local HC2 = Net.FHttp("127.0.0.1",11111); if (Device ~= nil) then Response, status, errorCode = HC2:GET("/api/energy/now-" .. TimeStart .. "/now-" .. TimeEnd .. "/summary-graph/devices/power/" .. Device); end; if (tonumber(errorCode)==0 and tonumber(status)==200) then TabMeasure = json.decode(Response); -- chargement des données dans une table Debug("Nb mesures : " .. table.getn(TabMeasure) .. " (historique il y a " .. DureeHistorique/86400 .. " jours)","yellow"); local State = 0; -- scan la période concernée les semaines précédente for i = 1, table.getn(TabMeasure) do local Heure = tonumber(TabMeasure[i][1])/1000; -- collecte de l'heure et conversion des millisecondes en secondes if (tonumber(TabMeasure[i][2]) > 0) -- il y a une activité then State = 1; end Debug("Mesure " .. i .. " : " .. os.date("%A %d/%m/%y %H:%M",Heure) .. " => " .. State); end return State; -- retour de la fonction else Debug("fail : ".. status .. " - error : ".. errorCode); end end -- Scan de tous les devices si alarme active if (fibaro:getGlobalValue("Simu_presence") == "ON") then Debug("START REPLICATOR...."); fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1062); fibaro:log('Simulation active'); Debug("Alarme active => Scan...."); for device=1, 1000, 1 do if (fibaro:getValue(device, "isLight") == '1') -- si type lampe then -- lancement de la fonction de collecte des informations d'allumage ou d'extinction Debug("***** Collecte de la consommation électrique pour la lampe " .. device .. " " .. " *****", "yellow"); local StateSem1 = CollecteStatus(7 * 86400, device); -- appel de la fonction => 1 semaine avant local StateSem2 = CollecteStatus(14 * 86400, device); -- appel de la fonction => 2 semaines avant -- si lampe active les dernières semaines et lampe actuellement éteinte => allumage if (StateSem1 == 1 or StateSem2 == 1) then if (tonumber(fibaro:getValue(device, "value")) == 0) -- la lampe est éteinte then fibaro:call(device, "turnOn"); -- allumage fibaro:call(device, "setValue", "50"); Debug("Allumage Lampe : " .. device, "green"); else Debug("Pas d'action, lampe : " .. device .. " déjà allumée", "green"); end end -- si lampe inactive les dernières semaines et lampe actuellement allumée => extinction if (StateSem1 == 0 and StateSem2 == 0) then if (tonumber(fibaro:getValue(device, "value")) > 0) -- si le device est allumé then fibaro:call(device, "turnOff"); -- extinction Debug("Extinction Lampe : " .. device, "red"); else Debug("Pas d'action, lampe : " .. device .. " déjà éteinte","red"); end end end end else fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1061); fibaro:log('Simulation inactive'); Debug('Simulation inactive'); end fibaro:sleep(120000); -- temporise 2 minutes Presence_Replicator v1.vfib Presence_Replicator v2.vfib
  7. jimbo007be

    Alarme SATEL Integra-32

    Bonjour j'ai suivi la procédure pour l'intégration Fibaro-Satel et j'ai donc bien "récupéré" dans le HC2 toute la config de mon installation SATEL ... par contre j'ai un petit signal "warning" qui me dit : Attention, integration with the Satel control panel is not fully configured. The control panel does not have a alarm partition named Fibaro. par ailleurs, je trouve qu'il manque cruellement de documentation par rapport à l'utilisation de la chose une fois que c'est configuré ... quelqu'un peut-il me donner des infos là -dessus ? merci d'avance
  8. Pour amener ma pierre à l'édifice, il y a quelques temps j'ai installé un Aeon 4 en 1 à l'extérieur mais ce capteur a une détection de mouvement simple qui fait que le moindre vent qui fait bouger quelque chose peut le déclencher. Donc hors de question de l'utiliser pour des applications de détection de présence sinon bonjour les fausses alertes... J'ai d'autre solution, mais nada, je suis parti avec l'idée d'une barrière infra-rouge. J'ai cherché mais rien trouvé qui puisse remplir mes exigences de tout prêt. En fouinant sur le net j'ai trouvé la barrière infra-rouge BX-80NR qui a un double faisceau pour éviter les fausses détections, une compensation en température, un fonctionnement sur pile qui dure longtemps et surtout un espace vide pour loger un capteur et un contact sec. Voici le lien du constructeur: http://www.optex-security.com/produits/detection-exterieure/detection-volumetrique-infrarouge/bx-80nr J'ai mis dedans un module fibaro FGK-101 que j'ai déclaré comme détecteur de mouvement dans le HC et zou un détecteur tip top. Si cela peut servir à quelqu'un
  9. Petit tuto pour installer et utiliser une sirène extérieure filaire Cela faisait un petit moment déjà que je cherchais une sirène extérieure, le problème, c'est qu'en Z-wave, on a pas beaucoup de choix concernant les modèles... A ma connaissance, actuellement, il n'y en a qu'une, de la marque Fortrezz...mais que je trouve personnellement moche pour un boitier qui est censé être fixé sur notre façade de maison! Je me suis donc orienté vers une sirène Pro, filaire. Le modèle que j'ai retenu est une sirène de marque Elkron, HPA702L certifiée NFa2P Pour ma part, je vais utiliser mon IPX800 pour la piloter, mais on peux tout aussi bien utiliser un DOMOTMX ou alors un module Fibaro par exemple. La priorité étant de gérer un contact sec de préférence NF. (Pour l'installation d'une autre sirène, il faudra bien évidement suivre la notice du fabriquant quant à la tension d'alimentation, câblage...) Pour l'Elkron HPA702L, il faut savoir que c'est une sirène "auto-alimentée", il est donc impératif de lui ajouter une batterie ( 12v;2.1Ah; non fournie ; emplacement prévu dans le boitier) sans quoi elle ne fonctionnera pas! Une led dédiée au contrôle de charge de la batterie est visible boitier fermé ( trés utile !) Prérequis : -1 sirène Elkron HPA702L -1 batterie 12V / 2.1 Ah -1 alimentation 12v / 0.8 A -1 module contact sec ( ipx800,fgs...) - câble blindé 2 paires mini Câblage de la sirène : Au niveau du fonctionnement, si la batterie est chargée, en cas de coupure du " + de blocage " ( plot BL sur la carte ), la sirène et le flash s'enclencheront. Si il y a coupure d'alimentation 12v ( volontaire ou pas ) la sirène et le flash s'enclencheront.(tempo paramétrable) A savoir que d'autres paramétrages sont possibles au niveau de la sirène, comme par exemple, modifier type de sonnerie, choisir un " - " de blocage, fonctionnement direct ou équilibré... Il ne reste plus qu'a réaliser nos scénarios selon notre besoin et notre matériel de commande ( actionneur http, module ...) Ce modèle est d'excellent rapport qualité/prix, environ 100€... La batterie coà»te dans les 15 € et dure 2 ans environ. Le petit bémol...on ne peux pas gérer le flash indépendamment de la sirène. Pour interfacer cela avec notre HC2 j'ai créer un périphérique virtuel qui actionne la sortie (contact NF) de mon IPX800 en cas d'intrusion : Code pour passer la sortie à ON: GET /preset.htm?led2=1 HTTP/1.10x0D0x0A0x0D0x0A Code pour passer la sortie à OFF: GET /preset.htm?led2=0 HTTP/1.10x0D0x0A0x0D0x0A Maintenant...à vous de jouer!...
  10. Bonjour à Tous, Fibaro a travaillé sur l'intégration des Alarmes Satel Integra sur le Home Center; cependant les infos venant de Fibaro sur le sujet sont assez rares et il n'est donc pas toujours évident de juger des possibilités de la chose. J'ai acheté ce système d'alarme justement pour cette intégration ; J’en profite pour remercier au passage @KRIKROFF qui n’a jamais hésité à donner des infos et à valoriser la chose ; c’est en relisant encore et encore ses messages que je me suis décider à acheter :D Je voulais juste exposer un exemple concret de l'utilisation de ce système avec l'automatisme de ma porte de garage: Actuellement je dispose d'une télécommande pour la porte (CAME) et d'une télécommande pour armer/désarmer l'alarme (SATEL MPT-300); le but du jeu: 1 seule télécommande regroupant toutes les fonctions. Ce document n’avait pas pour vocation d’être un tuto, mais plutôt un prise de note/aide-mémoire et puis du coup autant en faire profiter du monde si ça peut servir et surtout donner une idée des possibilités du système. Du coup je ne m’attarde pas sur le fait qu’il faut un minimum connaitre le système et faire attention aux risques électriques. De même ce n’est pas un mode d’emploi, le document peut comporter des erreurs. En tout cas chez moi les 2 solutions évoquées fonctionnent et Madame est bien contente d'avoir une télécommande en moins... Nicolas Automatisation_Porte_de_Garage_via_Satel.pdf
  11. Une petite mise en situation de ma future installation de sécurité du logement, en utilisant non pas de détecteurs de mouvement zwave mais en rendant zwave des détecteurs couramment utilisés dans les habitations pour allumer des lumières. Pour ma part il s'agit de détecteurs Legrand 3 fils. Ainsi ils rempliront 2 rôles: allumer les LED de la lumière indirecte du plafond de l'entrée et des couloirs (via le module RGBW de Fibaro), et surveiller le logement lorsque j'activerai l'alarme avec un clavier RFID. A. Pour l’intégration d’un clavier RFID Basé sur le tuto suivant : http://e-domotic.fr/blog/autres-devices/realisation-dun-lecteur-rfid-zwave/ S’inspirant lui-même de cette page : http://homeautomategorilla.blogspot.fr/2011/03/materiel-controle-dacces-rfid.html I) Matériel nécessaire : Un clavier RFID (acheté sur ebay en tapant « keypad rfid », le clavier benext RFID n'étant malheureusement pas (encore?) géré par le HC2... Des badges RFID 125kHz également achetés sur ebay Un transformateur AC 230V en DC 12V (ou 24V suivant le clavier RFID) Un module universel Fibaro FGBS-001 « Universal Sensor » chez votre revendeur préféré II) Branchements Le branchement à l'arrière du clavier RFID: 12V et GND pour alimenter la clavier, NC et COM vers l'universal sensor Fibaro Le branchement de l'universal sensor Fibaro: Alimentation électrique par le même transfo que le clavier ou un autre (le module Fibaro s'alimente de 9V à 30V DC). Une entrée (IN1 ou IN2) branché à la borne NC du clavier, et le fil GND branché à la borne COM du clavier. On voit également les fils bleu blanc et marron du module Fibaro reliés à des dominos pour l’intégration d’une sonde de température (je me demandais si on pouvait avoir en même temps une remontée de la température et l’utilisation du module en tant que capteur universel, car les schémas de la notice indique le montage pour l’une ou l’autre des situations mais n’indique nulle part si on peut combiner ces 2 utilisations, chose validée par ce test ) III) Réglages Un très bon tuto surtout pour la partie qui surveille les brouillages zwave :http://domotique-info.fr/2013/06/fibaro-mise-en-place-de-la-securite-du-logement/ Réglage du clavier RFID : s’agissant d’un clavier pour ouverture de porte, lorsque le bon code est rentré ou lorsque le badge est passé devant, une impulsion électrique est envoyée par le clavier pendant 5s par défaut pour que la gâche de la porte reste ouverte. Pensant cela j’ai acheté un relai bistable comme sur le premier tuto en haut de page (à souder soit même au passage…) mais en faisant mes tests je me suis aperçu que le relai collait une seconde fois, les 5s écoulée… Comme si une nouvelle impulsion était renvoyée pour la fermeture de la gâche. Je n’ai pas trop compris le principe de fonctionnement. Quoi qu’il en soit je n’avais pas besoin de ce relai bistable car j’avais la possibilité de mettre le temps d’ouverture de la gâche à 0 ! Une seule impulsion est donc envoyée par le clavier RFID au module Fibaro.Pour les réglages du module fibaro, l’entrée IN peut rester en Normalement Fermée (paramètre 3 ou 4) Chaque passage de badge ou entrée de mot de passe valide sur le clavier fera changer l’état du module Fibaro (Safe ou Breached) B. Pour l’intégration de capteur de mouvement Legrand (ou autre) I) Matériel nécessaire Des détecteurs de mouvements (3 fils pour mon cas, mais possible en 2 fils aussi, la différence est que sur le 2 fils il n’y a pas de neutre sur le détecteur). Le modèle Legrand 78451 est sensé ne pas faire de bruit au déclenchement, je dois encore l’acheter pour vérifier. Un module universel Fibaro FGBS-001 « Universal Sensor » Un transformateur pour alimenter le module Fibaro Un relai monostable 230V monté sur un support DIN pour l’installer dans le tableau électrique http://www.conrad.fr/ce/fr/product/503003/Relais-industriel-4-inverseurs-RT-7-A-Finder-553482300040?queryFromSuggest=true (celui ci permet de brancher jusque 4 circuit différents. Un circuit peut être composé de plusieurs détecteurs montés en parallèle) II) Branchements III) Réglages J’ai posté un message sur ce forum en bas de page pour poser une question à laquelle j’ai répondu peu après. http://www.touteladomotique.com/forum/viewtopic.php?f=18&t=11715 Avec un relai schneider (qui sera surement remplacé par un autre moins gros et moins bruyant) j'ai fait la liaison entre mon detecteur Legrand et le module universel Fibaro FGBS321. EDIT : le module finder reste un peu bruyant quand même. A voir si il existe des relai silencieux… Sur le relais SCHNEIDER: Neutre du réseau sur A1 Sortie 220V du détecteur de mouvement sur A2 IN1 du module fibaro sur 2 Fil bleu (commun) du module sur 1 Quand le détecteur capte un mouvement, le courant 220V est envoyé via le fil navette sur le relais, qui est relié de l'autre coté au neutre. Le courant passe alors dans le relais et sa bobine ferme le contact sec. Le circuit du module fibaro est alors fermé (aucun courant ne circule c'est un contact sec). Le module change alors d'état. Pensez à changer le paramètre 3 ou 4 (suivant si vous avez branché IN1 ou IN2) en normalement ouvert (normalement fermé par défaut) sinon vous aurez l'information à l'envers (safe quand vous déclenchez le capteur et breached quand il revient en pause)
  12. lionel

    Simulation de Présence

    Script de Clarkkent609 posté ici : http://forum.fibaro.com/viewtopic.php?t=3009 1ere étape: Créer une variable prédéfinie :"Simu_presence" avec les valeurs "On" and "Off" 2eme étape: créer un module virtuel 3eme étape: copier et coller ce code: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "On"); --fibaro:debug("Simulation de présence activée"); fibaro:log("Simulation de présence activée"); fibaro:call(30, "setProperty", "ui.status.value", "activée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID du module virtuel coller ce code dans le second bouton: --[[ %% properties %% globals --]] fibaro:setGlobal("Simu_presence", "Off"); --fibaro:debug("Simulation de présence désactivée"); fibaro:log("Simulation de présence désactivée"); fibaro:call(30, "setProperty", "ui.status.value", "désactivée"); --fibaro:debug(fibaro:getValue(30, "ui.status.value")) 30 =ID module virtuel. Attention : ID du Label doit contenir "status" : voir photo: 4eme étape copier et coller ce code dans le MAIN LOOP et remplacer par vos valeurs utilisateur --[[ %% properties %% globals --]] -- LUA - Presence Simulator V1.0.0 -- -- simulate a presence when you're on vacation. -- A part of code is reused, it can found here. Thanx to Richo: http://forum.fibaro.com/viewtopic.php?t=1892&postdays=0&postorder=asc&highlight=presence&start=15 and here thx to Krikroff http://forum.fibaro.com/viewtopic.php?t=1656 -- USER SETTINGS : local start_hour = 19; --hour to start simulation local start_minute = 30; --minute to start simulation, example 19:30 local rndmaxtime = 20 --random time of light change in minutes --> here each device is on max 20min local runtime = 90 --how long to run simulation in minutes local ID_devices_lights = {17, 13} --IDs of lights to use in simulation local numbers_lights = #ID_devices_lights --numbers of light devices listed above local activated_push = true; --activate push when simulation starts and stops local ID_Smartphone = 7; --ID of your smartphone local simu = fibaro:getGlobal("Simu_presence"); --value of the global value: simulation is on or off local debug = true; --activate the debug mode -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- local minute = 60000 --in milliseconds local currentDate = os.date("*t"); SimulatorPresenceEngine = { version = "1.0.0" }; -- function to switch off devices in the list function SimulatorPresenceEngine:TurnOff(group) local name, id; local ID_devices_group = group; for i=1, #ID_devices_group do id = tonumber(ID_devices_group[i]); fibaro:call(id, "turnOff"); if (debug) then name = fibaro:getName(id); if (name == nil or name == string.char(0)) then name = "Unknown" end fibaro:debug("Device:" .. name .. " On "); end end end -- function to simulate a presence function SimulatorPresenceEngine:Launch() local start = os.time() local endtime = start + runtime*minute/1000 -- after how many minutes exit simulation if (activated_push) then fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation started") ; --send push notification if (debug) then fibaro:debug("push start sent") end end while ((os.time() < endtime) and (simu == "On")) do local random_light = tonumber(ID_devices_lights[math.random(numbers_lights)]) --choose a random light in the list local lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light in the list -- turn on the light if off or turn off if on if tonumber(lightstatus) == 0 then fibaro:call(random_light, 'turnOn') else fibaro:call(random_light, 'turnOff') end fibaro:sleep(1000) ; --necessary to get back the new status, because HC2 is too fast :-) lightstatus = fibaro:getValue(random_light, 'value') --get the value of the random light after his update if (debug) then fibaro:debug('light ID:'..random_light..' status:'..lightstatus) end local sleeptime = math.random(rndmaxtime*minute) --random sleep fibaro:sleep(sleeptime) local sleeptimemin = math.abs(sleeptime/60000) if (debug) then fibaro:debug('sleeptime:'..sleeptimemin) end simu = fibaro:getGlobal("Simu_presence"); --verify the global value, if the virtual device is deactivated, the scene stops. end --turn Off all lights SimulatorPresenceEngine:TurnOff(ID_devices_lights); fibaro:call(ID_Smartphone, 'sendPush', "Lights simulation stopped") ; --send push notification if (debug) then fibaro:debug("push stop sent") end fibaro:sleep(60000); end -- Condition to start simulation if ((simu == "On")and (currentDate.hour == start_hour ) and (currentDate.min == start_minute))then SimulatorPresenceEngine:Launch(); --launch the simulation when virtual device is on, and the current time is triggered. end
  13. Bonjour, Voici un autre exemple d'utilisation conjointe Satel/Home Center: la fermeture centralisée des volets roulants via Keypad. Les volets roulants sont equipés de modules Fibaro FGRM-222 Le Keypad est un INT-KSG-SSW Pour ceux qui ne hésitent sur l'acquisition du système, cela permet de donner une idée de ce qu'il est possible de faire, et que la communication Satel/Home center ça fonctionne bien. Voilà je me dis que ça peut toujours servir à quelqu'un. Nicolas Gestion_VR_via Keypad.pdf
×