Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'script lua'.



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
    • Annonces et suggestions
    • Nouveau ? Présentez-vous
    • Le bistrot
    • Mon installation domotique
    • Autres Solutions Domotiques
  • La HC2 et ses périphériques
    • La Home Center pour les nuls
    • Home Center 2 & Lite
    • Modules Fibaro
    • Modules Z-wave
    • Périphériques et matériels autres
    • Plugins
    • Alarme & Vidéo-surveillance
    • Multimédia
    • Chauffage et Energie
    • Actionneurs & Ouvrants (Portail, volets...)
    • Eclairage
    • Applications Smartphones et Tablettes
    • English Section
  • Les objets connectés
    • Les Assistants Vocaux
  • Fibaro's Awards
    • Membre du mois
    • Jeux concours & Cadeaux
  • Les bonnes affaires
    • Sites internet
    • Petites annonces

Calendriers

Aucun résultat à afficher.


45 résultats trouvés

  1. Heating Manager

    HEATING MANAGER v. 3.1.1 - 28/11/2017 Heating Manager est un programme permettant d'utiliser le Home Center 2 pour gérer avec une grande souplesse le chauffage d'une habitation, en permettant de franchir une étape supplémentaires dans la gestion de celui-ci. En effet, s'il est parfaitement capable de fonctionner en suivant une planification, Heating Manager permet de passer à l'étape suivante et d'exploiter pleinement les potentialités de la domotique en se passant totalement de planification et en gérant le chauffage sur une base événementielle exclusivement dynamique. Heating Manager, qui propose de réguler le chauffage sur un mode proportionnel avec prise en compte des déperditions (Ubat) ou sur un mode classique avec hystérésis, est compatible avec n'importe quel système de commande de chauffage, y compris des modules virtuels. Il peut fonctionner en tout ou partie en mode planification via l'utilisation des panneaux de chauffage natifs du Home Center 2, de modules dédiés ou de variables globales. En mode événementiel, il peut s'appuyer sur n'importe quelle propriété de n'importe quel module, virtuel ou non, ainsi que sur des variables globales. L'utilisation de boucles conditionnelles dans la configuration permet en outre de faire varier cette configuration en fonction de n'importe quelle condition. Ces développements doivent beaucoup aux échanges stimulants intervenus sur ce fil de discussion, qui m'ont amené à aller bien plus loin que ce qui était prévu au départ, à savoir simplement pouvoir utiliser les panneaux de chauffage avec les modules fils pilote proposés par Qubino... Que tous soient remerciés . _ _ _ PRE-REQUIS Ce programme a été conçu et testé sur le Home Center 2 tournant avec le firmware v. 4.140. Il ne requiert aucun matériel particulier et peut s'adapter facilement à toutes les configurations. _ _ _ INSTALLATION 1. Pour une utilisation en tout ou partie en mode planification, il faut commencer par définir les plannings de chauffe souhaités. La première étape dans cette optique de fonctionnement est de définir un planning de chauffe dans lequel Heating Manager ira chercher la température de consigne à atteindre. Ce planning de chauffe peut être mis en place en utilisant les panneaux de chauffage fournis nativement par le Home Center 2. Attention cependant, un bug a été constaté, évoqué dans ce fil, entraînant l'absence de prise en compte du changement de température de consigne après minuit. Il peut également être mis en place en utilisant n'importe quel module virtuel ou bien celui, basique, fourni avec Heating Manager >>>> Heating_Provider.vfib Pour utiliser ce module virtuel, il faut adapter la configuration donnée en exemple à votre cas en modifiant, et en ajoutant le cas échéant, les étiquettes, chaque étiquette correspondant à une zone de chauffage. La définition du planning de chauffe pour chacun de ces zones intervient dans le main loop du module virtuel, dans la partie Configuration : HeatingManager:add(zone, day, time, temperature) zone correspond au nom d''une étiquette du module virtuel day est soit un ou plusieurs jours de la semaine (en anglais e.g. {"monday","friday"}), soit "weekday" (du lundi au vendredi), soit "weekend", soit "week" time est l''heure à laquelle la température de consigne devra être appliquée "hh:mm" temperature est la température de consigne devant être appliquée à compter de l''horaire défini juste avant Il est important que la construction du planning de chauffe soit faite de manière chronologique, le module virtuel ne faisant pas de tri chronologique, ce qui peut entraîner un comportement s'écartant de celui attendu. 2. Pour une utilisation en tout ou partie en mode événementiel, il faut importer un thermostat par pièce concernée >>>> Thermostat.vfib Ce module virtuel permet de définir la température de consigne (mode Confort et mode Economique) pour la pièce, de forcer l'un de ces deux modes ou de passer en mode manuel avec un minuteur permettant de retourner au mode automatique. Les ordres donnés par l'intermédiaire de ce module viruel l'emportent sur toute autre évènement défini dans la configuration de Heating Manager. Il faut juste mettre un module virtuel dans chaque pièce. Sa détection par Heating Manager se fait automatiquement. 3. [OPTIONNEL] Pour afficher de manière centralisée les températures de consigne en cours, il faut installer le module virtuel Heating Viewer >>>> Heating_Viewer.vfib Pour le bon fonctionnement de ce module, chaque pièce dont le chauffage est géré par Heating Manager doit avoir une étiquette, dont l'ID doit être le nom de cette pièce débarrassé de tous les accents, espaces et autres caractères exotiques. Ainsi, pour la pièce "Séjour Principal #1", l'ID de l'étiquette doit être "SejourPrincipal1". Les étiquettes inutilisées peuvent être supprimées, tout comme il peut être ajouté autant d'étiquettes que nécessaire. 4. Création d'une scène en mode Lua avec copier-coller du code >>>> Heating Manager - Scène.lua La configuration de Heating Manager est réalisée par l'exécution de neuf fonctions différentes à paramétrer dans la partie USER CONFIGURATION ZONE qui se trouve à partir de la ligne 100 du code. self:setConfiguration(checkConfig, oldLastTempUpdate, logInfo, pushWarnErrLog, pushTo, popupWarnErrLog, logMemory) checkConfig est un booléen dont la valeur par défaut est true, qui permet de définir si Heating Manager doit contrôler de manière approfondie la configuration (existence des pièces, des modules, des propriétés de modules, des variables globales, etc.) Une fois que votre configuration est rodée et fonctionne sans problème, vous pouvez passer ce paramètre à false. oldLastTempUpdate est un nombre dont la valeur par défaut est 180 et qui est le nombre de minutes depuis la dernière remontée de température d'une sonde intérieure au-delà duquel Heating Manager adressera un message d'alerte et arrêtera la chauffe. logInfo est un booléen dont la valeur par défaut est true et qui permet de définir si l'intégralité des messages doit s'afficher dans la fenêtre de debug, ou uniquement les plus importants (action, survenance d'un événement, changement de la température de consigne). pushWarnErrLog est un booléen dont la valeur par défaut est false et qui permet de définir si les messages d'alerte et d'erreur doivent faire l'objet d'une notification Push. pushTo est une table contenant l'ID des téléphones mobiles auxquels envoyer les notification Push si le paramètre précédent est à true. popupWarnErrLog est un booléen dont la valeur par défaut est false et qui permet de définir si les messages d'alerte et d'erreur doivent faire l'objet d'une notification dans le centre de notification du Home Center 2. logMemory est un booléen dont la valeur par défaut est true et qui permet d'afficher dans la fenêtre de debug, toutes les cinq minutes, la mémoire utilisée par Heating Manager. self:setProportionalMode(default_kP, auto_kP, default_kT, cycle, minCycle, defaultSetpoint) Cette fonction ne doit être utilisée que si vous souhaitez utiliser le mode de régulation proportionnel. default_kP est un nombre dont la valeur par défaut est 60 et qui est le coefficient proportionnel utilisé par Heating Manager dans le cadre de la régulation proportionnelle si aucun coefficient particulier n'est défini pour un radiateur donné. auto_kP est un booléen dont la valeur par défaut est true et qui permet de définir si Heating Manager doit adapter le coefficient proportionnel en fonction de l'expérience acquise lors des cycles de chauffe. default_kT est un nombre dont la valeur par défaut est 1 et qui est le coefficient de déperditions thermiques (Ubat) utilisé par Heating Manager dans le cadre de la régulation proportionnelle si aucun coefficient particulier n'est défini pour un radiateur donné. La valeur 1 correspond à une maison bien isolée. Pour un bâtiment mal isolé, ce coefficient peut être fixé à 3. cycle est un nombre dont la valeur par défaut est 15 et qui est la durée d'un cycle de chauffage en minutes, au sein duquel s'insère la période de chauffe calculée par Heating Manager. minCycle est un nombre dont la valeur par défaut est 1 et qui est la durée minimale en minutes d'une période de chauffe. defaultSetpoint est soit comfort, soit eco (sans guillemets) et permet de déterminer, uniquement pour un fonctionnement en mode événementiel, si la consigne à appliquer en dehors de tout événement est la température de confort définie dans le thermostat virtuel ou la température économique. La valeur par défaut est comfort. self:setHysteresisMode(hysteresis, cycle, defaultSetpoint) Cette fonction ne doit être utilisée que si vous souhaitez utiliser le mode de régulation par hystérésis. hysteresis est un nombre dont la valeur par défaut est 0 et qui est l'écart en degré entre la température courante et la température de consigne au-delà ou en-deça duquel le chauffage sera démarré. cycle est un nombre dont la valeur par défaut est 15 et qui est l'intervalle en minutes entre deux comparaisons de la température courante et de la température de consigne. defaultSetpoint est soit comfort, soit eco (sans guillemets) et permet de déterminer, uniquement pour un fonctionnement en mode événementiel, si la consigne à appliquer en dehors de tout événement est la température de confort définie dans le thermostat virtuel ou la température économique. La valeur par défaut est comfort. self:setEventDefaults(eCumulative, eSetpoint, eDuration, eStep, ePersistence) eCumulative est un booléen dont la valeur par défaut est true et qui permet de définir si les conditions d'un événement doivent toutes être réalisés pour que l'événement soit considéré comme survenu, ou si la réalisation d'une seule condition est suffisante. Il s'agit ici de définir la valeur par défaut qui sera utilisée à défaut de paramétrage contraire lors du paramétrage de chaque événement. eSetpoint est un nombre dont la valeur par défaut est 18 et qui permet de définir la température de consigne qui sera appliquée par défaut en cas de survenance d'un événement lorsqu'aucune température de consigne propre n'est définie lors du paramétrage de l'événement. eDuration est un nombre dont la valeur par défaut est 0 et qui permet de définir la durée en minutes devant s'écouler entre la survenance de l'événement et l'application de la température de consigne correspondante, permettant ainsi de prévoir une diminution ou une augmentation graduelle de la température de consigne. eStep est un nombre dont la valeur par défaut est 0.5 et qui permet de définir les étapes de diminution ou d'augmentation graduelle de la température de consigne. ePersistence est un nombre dont la valeur par défaut est 0 et qui permet de définir la durée par défaut pendant laquelle Heating Manager continuera à considérer qu'un événement est réalisé à partir de l'instant où les conditions de sa réalisation ne sont plus remplies. Si les conditions sont à nouveau remplies pendant le délai de persistence, Heating Manager agira comme si elles n'avaient jamais cessé d'être remplies. self:addHeater(idRoom, idHeater, idSonde, localkP, localkT) Cette fonction permet de déclarer les radiateurs qui seront gérés par Heating Manager. La fonction doit être paramétrée pour chaque radiateur. idRoom est l'ID de la pièce définie dans le Home Center 2 dans laquelle se trouve le module de commande du radiateur. idHeater désigne un module de commande d'un radiateur sous forme de table {ID du module, instruction pour mise en route, instruction pour arrêt, valeur à l'arrêt} : ID du module est l'ID d'un module, virtuel ou non, permettant de commander la mise en route ou l'arrêt du chauffage. instruction pour mise en route est soit la commande à transmettre s'il s'agit d'un module 'réel' ("turnOn" par exemple), soit le numéro d'ordre du bouton d'un module virtuel. instruction pour arrêt est soit la commande à transmettre s'il s'agit d'un module 'réel' ("turnOff" par exemple), soit le numéro d'ordre du bouton d'un module virtuel. valeur à l'arrêt est la valeur de la propriété value lorsque le radiateur est arrêté, et est utilisé pour éviter d'envoyer les commandes de mise en route et d'arrêt inutilement. idSonde désigne une sonde de température qui peut être définie spécifiquement pour un radiateur s'il n'est pas asservi à la sonde de température principale de la pièce définie dans le Home Center 2. Il peut s'agir d'une sonde de température proprement dite ou d'un module virtuel et sera dans tous les cas sous la forme {ID du module, nom de la propriété contenant la température}. Il peut également s'agir du nom d'une variable globale dans laquelle est stockée la température. localkP permet de définir un coefficient proportionnel fixe qui sera utilisé pour calculer la commande de chauffe de ce radiateur. localkT permet de définir un coefficient de déperditions thermiques qui sera utilisé pour calculer la commande de chauffe de ce radiateur. self:addEvent(idRoom, idEvent, conditions, cumulative, setpoint, duration, persistence) Cette fonction permet de définir les événements qui entraîneront une modification de la température de consigne (ouverture d'une fenêtre, absence temporaire ou prolongée, lumière allumée ou éteinte...). idRoom est l'ID de la pièce concernée par l'événement, ou une table contenant les IDs de plusieurs pièces concernées par l'événement. idEvent est le nom de l'événement, qui sera affiché dans la fenêtre de debug lors de sa survenance. conditions est une table contenant les différentes conditions devant être réalisées, ensemble ou séparément, pour que l'événement soit considéré comme survenu et la température de consigne modifiée en conséquence. Cette table contient elle-même une table par condition (il y a donc forcément une double accolade au début et à la fin), sous la forme {nom de variable globale, opérateur ("==", "~=", ">=", "<=", ">", "<"), valeur à vérifier, durée en minutes devant s'être écoulée depuis que le résultat de la comparaison est vrai} ou {ID d'un module, nom de la propriété d'un module, opérateur ("==", "~=", ">=", "<=", ">", "<"), valeur à vérifier, durée en minutes devant s'être écoulée depuis que le résultat de la comparaison est vrai}. cumulative est un booléen permet de définir, pour cet événement particulier, si sa survenance implique la réalisation de toutes les conditions ou si une seule est suffisante. setpoint permet de définir la température de consigne devant être appliquée lorsque l'événement survient. Dans le cadre du mode de fonctionnement événementiel, vous pouvez utiliser les variables comfort et eco qui font références aux températures définies pour la pièce avec le module virtuel Thermostat. duration est la durée en minutes devant s'écouler entre la survenance de l'événement et l'application de la température de consigne correspondante, permettant ainsi de prévoir une diminution ou une augmentation graduelle de la température de consigne. persistence est un nombre qui permet de définir la durée pendant laquelle Heating Manager continuera à considérer que l'événement est réalisé à partir de l'instant où les conditions de sa réalisation ne sont plus remplies. Si les conditions sont à nouveau remplies pendant le délai de persistence, Heating Manager agira comme si elles n'avaient jamais cessé d'être remplies. Dans le cadre de la configuration, cette fonction peut s'insérer dans une boucle conditionnelle permettant de ne laisser l'événement se réaliser que sous des conditions précises, par exemple d'horaires. self:addGlobalEvent(idEvent, conditions, cumulative, setpoint, duration, persistence) Cette fonction permet de définir un événement s'appliquant à toutes les pièces dont le chauffage est géré par Heating Manager, et se configure exactement de la même manière que la précédente, le paramètre idRoom en moins. Attention : le fait que l'événement soit global ne signifie pas qu'il l'emporte sur les événements spécifiques d'une pièce. Heating Manager contrôle les événements les uns à la suite des autres pour chaque pièce, dans l'ordre de leur configuration. Dès que les conditions d'un événement sont remplies, le programme cesse la boucle et n'analyse pas les autres événements déclarés. self:setIndoorSonde(idRoom, idSonde) Cette fonction permet de définir la sonde de température d'une pièce si vous ne souhaitez pas utiliser la sonde de température principale définie dans le Home Center 2. idRoom est l'ID de la pièce concernée. idSonde désigne une sonde de température proprement dite ou un module virtuel et sera dans tous les cas sous la forme {ID du module, nom de la propriété contenant la température}. Il peut également s'agir du nom d'une variable globale dans laquelle est stockée la température. self:setSetpoint(idRoom, idSetpoint) Cette fonction permet de définir, pour une pièce donnée, la source de la température de consigne qui devra être appliquée. L'utilisation de cette fonction n'est requise que dans le cas de l'utilisation du mode planification, et est inutile lorsque le chauffage de la pièce est effectué selon le mode événementiel. idRoom est l'ID de la pièce concernée. idSetpoint désigne la source de la température de consigne et peut être : l'ID d'un panneau de chauffage natif du Home Center 2. une table sous la forme {ID du module, propriété du module contenant la température de consigne} s'il s'agit d'un module, virtuel ou non. le nom d'une variable globale qui contiendra la température de consigne. self:setOutdoorSonde(idSonde) Cette fonction permet définir une sonde de température extérieure. Elle n'est utilise que dans le cas de la régulation proportionnelle qui tient compte de la température extérieure, et est inutile pour une régulation à base d'hystérésis. idSonde désigne une sonde de température proprement dite ou un module virtuel et sera dans tous les cas sous la forme {ID du module, nom de la propriété contenant la température}. Lorsqu'aucune sonde de température extérieure n'est définie et que le mode de régulation proportionnel est utilisé, Heating Manager utilise la température fournie par le plugin Météo. 5. Mise à jour depuis une version précédente Cette nouvelle version apporte des modifications en profondeur du programme et de la manière de le configurer. Il n'est donc pas possible de faire simplement un copier-coller de la configuration d'une version précédente à la 3.0, qui était éclatée entre la scène et un module virtuel, mais il est nécessaire de reprendre la configuration depuis le départ. Depuis la version 3.0, il est impératif de modifier les fonctions self:addEvent pour ajouter dans les conditions le paramètre operator : "==", "~=", ">=", "<=", ">" ou "<". Si le contrôle de configuration est activé, un message d'erreur s'affichera dans la fenêtre de debug sans faire planter le programme. L'ajout du paramètre ePersistence dans la fonction self:setConfiguration et persistent dans les fonctions self:addEvent n'est pas indispensable puisqu'il s'agit du dernier paramètre de ces fonctions. A défaut de les ajouter, c'est la valeur par défaut (0) qui s'appliquera. _ _ _ ROADMAP [VIDE] _ _ _ ICONES
  2. Salut à tous !!! Pour mon premier post, je partage avec vous quelques VD lié à l’univers Philips Hue. Ils sont inspirés de ce que j’ai pu glané ici et là sur le forum, notamment le VD de @Zorgonaute84 et le VD de @Moicphil. /!\ Avant de commencer : Créer un compte Développeur sur son bridge Connectez-vous au Bridge Hue depuis un navigateur internet via l'adresse suivante : http://<IPduBridgeHUE>/debug/clip.html Dans URL : vous tapez : /api Dans Message body : {"devicetype":"my_hue_app#newdevelopper"} Appuyez sur le bouton d'association de votre bridge HUE, puis vous cliquez sur POST Dans Command Response : recopier le username Récupérer la configuration de votre bridge Connectez-vous au Bridge Hue depuis un navigateur internet via l'adresse suivante : http://<IPduBridgeHUE>/debug/clip.html Dans URL : vous tapez : /api/VotreUsername/ Cliquez sur GET Dans Command Response : recopier et sauvegarder le texte afin de conserver sur le coude vos n° de lampe, n° de groupe, etc… Créer la variable globale VD_Hue_User Dans le panneau de Variables, ajouter, dans le tableau Variables prédéfinies, la variable VD_Hue_User. Donner lui la valeur de votre username récupéré sur le Bridge. Supprimer l’autre valeur, en lui donnant la même valeur. Du coup, pour la plupart des VD proposés, vous aurez plus qu’à renter l’adresse IP et le n° de l’ID (n° de la lampe, n° du groupe, etc…) dans le port TCP. Quelques liens utiles https://my.meethue.com/fr-fr/ https://developers.meethue.com/documentation/getting-started https://developers.meethue.com/philips-hue-api https://developers.meethue.com/documentation/supported-lights Logiciel WinHue 3 : https://hyrules.github.io/WinHue3/ Gamut - Espace Colorimétrique Philips utilise 3 Espaces de couleur : A, B et C. en fonction de la référence du produit. Les VD proposés sont optimiser pour un Gamut de type C. Pour le Gamut A, relativement proche, il ne devrait pas y avoir de soucis. Par contre pour le Gamut B, à cause de l'espace colorimétrique, les couleurs entre le jaune et le bleu (Lime, Vert, Jade, Cyan, Bleu ciel) devraient logiquement être presque blanche... Icônes : Pour chaque VD ou Scène, pour l'icône par défaut, j'utilise toujours une icône invalide (la rose avec ?). Cela me permet de savoir au premier coup d'œil si le VD ou la scène fonctionne correctement. --------------------------------------- VD Talwayseb - Bridge Philips Hue : - Renseigner l'adresse IP de votre bridge dans le champ "Adresse IP" du module - Renseigner le port 80 de votre bridge dans le champ "Port TCP" - Ajouter les 7 icônes pour le modèle de votre choix pour chaque état : Bridge V1 Bridge V2 - Dans la Boucle Principale (Main Loop), il faut également ajouter le numéro des icônes en fonction de chaque état. Téléchargement : Le ZIP : VD Talwayseb - Bridge Philips Hue V1.0.zip (Contient le .VFIB + les icônes) Mot de Passe : Talwayseb --------------------------------------- VD Talwayseb - Ampoule Philips en fonction du type : - Renseigner l'adresse IP de votre bridge dans le champ "Adresse IP" du module - Renseigner le n° ID de la lampe Hue à contrôler dans le champ "Port TCP" - Ajouter les 26 icônes pour la catégorie de votre choix pour chaque couleur : Ampoule E27 Ampoule GU10 Bandeau LED Ampoule blanche dimmable - Dans la Boucle Principale (Main Loop), il faut également ajouter le numéro des icônes en fonction de chaque couleur. Téléchargement : Le ZIP pour les ampoules de couleurs : VD Talwayseb - Ampoule Philips Hue Color V1.0.zip (Contient le .VFIB + les icônes) Le ZIP pour les ampoules de couleurs étendues : VD Talwayseb - Ampoule Philips Hue White & Color V1.1.zip (Contient le .VFIB + les icônes) Le ZIP pour les ampoules blanche d'ambiance : VD Talwayseb - Ampoule Philips Hue White Ambiance V1.0.zip (Contient le .VFIB + les icônes) Le ZIP pour les ampoules blanche dimmable : VD Talwayseb - Ampoule Philips Hue White V1.0.zip (Contient le .VFIB + les icônes) Mot de Passe : Talwayseb --------------------------------------- VD Talwayseb - Groupe Philips Hue White & Color : - Renseigner l'adresse IP de votre bridge dans le champ "Adresse IP" du module - Renseigner le n° ID du groupe Hue à contrôler dans le champ "Port TCP" - Ajouter les 26 icônes pour chaque couleur - Dans la Boucle Principale (Main Loop), il faut également ajouter le numéro des icônes en fonction de chaque couleur. Téléchargement : Le ZIP pour le groupe des ampoules de couleurs : A venir Le ZIP pour le groupe des ampoules de couleurs étendues : VD Talwayseb - Groupe Philips Hue White & Color V1.1.zip (Contient le .VFIB + les icônes) Le ZIP pour le groupe des ampoules blanche d'ambiance : A venir Le ZIP pour le groupe des ampoules blanche dimmable : A venir Mot de Passe : Talwayseb --------------------------------------- VD Talwayseb - Beyond Philips Hue : - Renseigner l'adresse IP de votre bridge dans le champ "Adresse IP" du module. - Renseigner le n° ID du groupe Hue par défaut à contrôler dans le champ "Port TCP". - Créer une variable globale unique pour chaque VD pour le mode. Dans mon VD, elle s'appelle VD_ModeHue_SAM. - Pour la plupart des Boutons et dans la Boucle Principale (Main Loop), il faut renseigner les groupes à gérer en fonction du mode choisi : NumGroupUp pour le N° du Groupe Beyond Up NumGroupDown pour le N° du Groupe Beyond Down - Ajouter les 96 icônes pour chaque couleur : Icônes communes Mode1 (gestion de l'Eclairage Bas en Blanc + Eclairage Haut en Couleur) Mode2 (gestion de l'Eclairage Bas en Couleur + Eclairage Haut en Blanc) Mode3 (Gestion des 2 sources lumineuses de façon identique) Mode4 (Gestion de la source lumineuse Haute) Mode5 (Gestion de la source lumineuse Basse) - Dans la Boucle Principale (Main Loop), il faut également ajouter le numéro des icônes en fonction de chaque couleur pour chaque mode. - Toujours dans la boucle, renseigner un n° ID d'une lampe comprise dans le groupe par défaut. Téléchargement : Le ZIP : VD Talwayseb - Beyond Philips Hue V1.2.zip (Contient le .VFIB + les icônes) Mot de Passe : Talwayseb --------------------------------------- VD Talwayseb - CMD Général Philips Hue White & Color (Groupe 0) : /!\ attention à la gestion des groupes, j'ai personnellement un groupe avec des informations différentes. j'ai fais en sorte de ne pas l'interroger. - Renseigner l'adresse IP de votre bridge dans le champ "Adresse IP" du module - Renseigner le n° ID du groupe Hue par défaut à contrôler dans le champ "Port TCP" - Ajouter les 26 icônes pour chaque couleur - Dans la Boucle Principale (Main Loop), il faut également ajouter le numéro des icônes en fonction de chaque couleur. - Sur certain Bouton et dans la Boucle Principale, il faut renseigner la variable CdeGroupMax avec le nombre de groupe que vous avez. Téléchargement : Le ZIP : VD Talwayseb - CMD Général Philips Hue White & Color (Groupe 0) V1.1.zip (Contient le .VFIB + les icônes) Mot de Passe : Talwayseb Voiloùuuuuu !!! C'est avec plaisir que je prendrai les suggestions d'amélioration !!!
  3. Faire parler la station Netatmo

    bonjour à tous, j'utilise l'excellent VD d'un des membres de cet excellent forum, pour avoir la remontée des données météo de ma station NETATMO. Je voudrai lui faire dire la température par le biais du TTS - voice RSS. Le truc, je ne sais pas extraire et stocker ces données pour le renvoyer dans le TTS. Pouvez vous m'aider ...?? Merci du coup de main.
  4. Voici un nouveau venu dans la série backup/restore. Avec ce couple scène / VD vous pourrez faire un backup (hors de votre HC2) de vos panneaux de chauffage (Heating Panels) et ensuite un restore sur une nouvelle box (ou après un recovery). Avec la scène en mode débug, on crée le backup des heating panels. Le système génère deux tables une pour la liste des Heating Panels et une autre avec la configuration de chaque heating panel On colle le résultat du debug de la scène dans le bouton restore du VD (que vous exportez sur votre disque dur). Créer manuellement autant de heating panels qu'il y en a à restaurer (car il n'est pas possible de prédire facilement (et de manière fiable) les ID qui seront générés par le système) Récupérer les ID de ces nouveau Heating Panels via http://<ip>/api/panels/heating Dans la table "ListeHP", remplacer les ID actuels par les nouveaux ID Appuyez sur le bouton restore. (Si vous lancez le restore en Debug, vous avez un débug détaillé de ce qu'il a fait). Ceci peut également être utilisé pour : (=> faites attention à ce que les noms repris dans les tables ListeHP et ConfigHP soient parfaitement identiques) Renommer un panneaux de chauffage Faire une copie d'un panneau de chauffage, et donc l'utiliser comme template d'un nouveau … PS : les instruction se trouvent également dans le Main Loop du VD v3:: correction bug API Backup_HeatPanel_v3.0.vfib Backup_HeatPanel_v3.0.lua Historique : v2 : Backup_HeatPanel_v2.0.lua Backup_HeatPanel_v2.0.vfib v1.1 : optimisation du code du bouton backup grâce à Steven Backup_HeatPanel_v1.1.vfib Backup_HeatPanel_v1.1.lua v 1.0 : Backup_HeatPanel_v1.0.vfib
  5. Modifier L'icone D'un Device

    Avec ce VD, vous pourrez modifier l'icône d'un device via script LUA. N.B. : il n'est pas nécessaire d'utiliser ce VD pour modifier l'icône d'un autre VD. Préférez simplement l'instruction fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 153) Un tout grand merci à Lazer et PITP2 pour leur aide pour la V4..x et à Did pour avoir fait germer l'idée. Exemple d'utilisation : vous avez un thermomètre dans votre congélateur, et vous souhaitez que l'icône soit différente si la température est normale ou trop élevée. Ok, ce n'est que de l'esthétique, mais si en plus d'être utile, la domotique peut être belle … Voici les icônes que Did a créées pour la température de son congélateur. http://www.domotique-fibaro.fr/index.php/gallery/image/3703-cong%C3%A9lateur/ http://www.domotique-fibaro.fr/index.php/gallery/image/3704-cong%C3%A9lateur-alarm/ Vous devez d'abord charger les icônes pour le type de device dont vous souhaitez modifier l'icône (cette phrase devient très mystique … ). Ensuite vous devez : Récupérer l'ID du device : vous le voyez dans l'URL lorsque vous modifiez le device Récupérer l'ID des icônes : voir tuto de Did : Récupérer l'id d'une Icône. Finalement Importez le VD ci-joint (il est compatible V3.x et v4.x) Recopiez autant de fois que nécessaire le bouton avec son code, en mentionnant au début l'ID du device et de l'icône DeviceIcone_v1.0.vfib Utilisation : Via GEA : ajouter l'option {“VirtualDeviceâ€, <id,_module>, <no_bouton>} - Press le bouton du module virtuel {“VirtualDeviceâ€, 2, 1} Via LUA : fibaro:call(<ID de ce VD>, "pressButton", "<# du bouton>") Pour connaître le n° du bouton : voir tuto de mprinfo : Module Virtuel - Numérotation Des Boutons Limitation : lorsque l'icône d'un device est modifiée, il faut faire un refresh du browser pour que la modification apparaisse.
  6. Enregistrer Un Json

    Bonsoir, Je cherche à modifier l'icône d'un device standard. (PAS d'un virtual device) J'y arrive en v3.600. Mais pas en v4.x. Hors je souhaite partager, et il faut qu'il soit utile à plus que Lazer, Did , Sebcbien et moi Je modifie la propriété deviceIcon. Mais comment (en v4.x) enregistrer le json modifié ? Voici le code ---------------------------------- -- User Settings ---------------------------------- local DeviceID = 340 local IconeID = 1027 ---------------------------------- -- DO not change bellow this line ---------------------------------- HC2 = Net.FHttp("127.0.0.1",11111) -- détermination de la version du firmware version = "" payload = "/api/settings/info" response, status, errorCode = HC2:GET(payload) if tonumber(status) == 200 then jsonTable = json.decode(response) if tonumber(jsonTable.softVersion) >= 4 then version = "4.x" else version = "3.x" end else fibaro:log("--- ERROR ---") fibaro:debug('<span style="color:red;">status='..status..', errorCode='..errorCode..', payload='..payload..', response='..response..'</span>') end fibaro:debug('version = ' ..version) -- modification de l'icone if version == "3.x" then -- récupération du nom du device payload = "/api/devices?id=" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) NameDev = jsonTable.name IconeDev = IconeID -- préparation du nouveau json NouvelleIcone = ('{"id":' ..DeviceID.. ',"name":"' ..NameDev.. '","properties":{"deviceIcon":"' ..IconeDev.. '"}}') -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) else -- récupération du json du device payload = "/api/devices/" ..DeviceID response, status, errorCode = HC2:GET(payload) jsonTable = json.decode(response) fibaro:debug(jsonTable.id.. " - " ..jsonTable.name.. " - " ..jsonTable.properties.deviceIcon) jsonTable.properties.deviceIcon = tostring(IconeID) fibaro:debug(jsonTable.properties.deviceIcon) -- préparation du nouveau json NouvelleIcone = json.encode(jsonTable) -- écriture du nouveau json HC2:PUT(payload, NouvelleIcone) end A gagner : son nom cité dans le tuto que je ferai pour partager
  7. Top 10 Power

    Je publie ici un Virtual Device qui a originellement été créé par Lazer http://www.domotique-fibaro.fr/index.php/topic/770-modules-les-plus-consommateurs-d%C3%A9nergie/?p=8372 Il a évolué depuis sa création : affichage de la consommation totale affichage d'îcônes (merci à Frédéric) différentes en fonction de la consommation totale compatibilité automatique v3.x / v4.x (merci à Shyrka973) L'objectif est de continuer ici les discussions et proposition d'évolution de ce VD. Top_10_Power_v3.0.vfib
  8. Pour la HCL, j'avais en son temps fait un tuto pour afficher une icône dans un virtual device une icône en fonction de la valeur d'une variable globale, et de pouvoir modifier sa valeur (également depuis son smartphone), quelle se mette à jour lors d'un restart de la box, etc pour une HCL En passant sous HC2, j'avais gardé le même principe, et pour chaque VD (et donc chaque variable), la main loop tournait en continu pour vérifier que l'icône correspond bien à la valeur de la variable. Ce n'est vraiment pas optimal. Je vais vous expliquer ici la solution que j'ai mise en place pour que la charge sur la box soit moins importante. Merci à Steven, i-magin et mprinfo qui m'ont aidé pour débugger Création des variables Je prendrai dans mon exemple 2 variables globales : Auth_PS3 avec 2 valeurs possibles : "Autorisé" et "Interdit" Auth_TV avec 2 valeurs possibles : "Autorisé" et "Interdit" (mais les valeurs pourraient être différentes que pour la 1° variable, ou avoir plus que 2 valeurs) Modules virtuels Chaque variable a son module virtuel. Il a pour objectif d'afficher une icône différente en fonction de la valeur de la variable. Pour facilement les retrouver, j'ai créé une section "Section Virtuelle" et dedans une pièce "Variables". Chaque VD a le nom suivant : "Var_xxxx" où xxxx est le nom de la variable globale. Dans notre exemple : "Var_Auth_PS3" et "Var_Auth_TV". L'icône par défaut du VD est et doit rester l'horrible cube bleu (facile ainsi de repérer si la VD est à jour) J'ai créé les boutons suivants : Bouton 1 : Autorisé / Interdit Il permet simplement de faire le switch de la valeur de la variable. C'est le bouton par défaut du VD. Il n'y a pas d'icône associée. -- nom de la variable à modifier local variable = "Auth_PS3" if fibaro:getGlobal(variable) == "Interdit" then fibaro:call(fibaro:getSelfId(), "pressButton", "3") else fibaro:call(fibaro:getSelfId(), "pressButton", "4") end Label : Statut afficher en texte la valeur de la variable Bouton3 : Autorisé c'est le bouton qui est appelé pour mettre la variable à "Autorisé" Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID) fibaro:setGlobal('Auth_PS3', 'Autorisé') fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Autorisé') Bouton4 : Interdit c'est le bouton qui est appelé pour mettre la variable à "Interdit" Il contient l'icône qu'on veut voir affichée (comme ça on ne doit pas chercher son ID) fibaro:setGlobal('Auth_PS3', 'Interdit') fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Statut.value", 'Interdit') N.B. l'ID de ce bouton ne peut pas être appelée par le bouton Switch, mais seulement son numéro QUI CHANGE si vous changez l'ordre. C'est débile, mais c'est comme ça … Utilisation On clique sur le bouton principal, et il switch la valeur de la variable On peut utiliser Google Calendar pour lui dire d'appuyer directement sur le bouton "Autorisé" ou "Interdit" Vous devez modifier les scènes qui modifiaient directement la variable, en la faisant appuyer sur le bouton de la VD qui modifie la variable et met à jour l'icône de la VD (car il n'y a plus le mainloop qui contrôle en continu la valeur de la variable) Limitations et solution : Lors du redémarage de la box, ou Lors de la sauvegarde du VD (parce que vous avez fait une petite modif, ou …) L'icône qui est affichée pour le VD, est l'icône par défaut du VD. Le cube bleu, pas cool … Donc pour pallier à ce problème, j'ai créé un VD supplémentaire "Var_Update" Dont voici le code : un GRAND merci à mprinfo qui m'a beaucoup aider pour faire qqch de plus sympa et générique ---------------------------------- -- User Settings ---------------------------------- -- la Table doit avoir la structure suivante : -- 1/ nom de la variable globale entre " -- 2/ ID du VD qui affiche la valeur de la VG -- 3/ n° du premier bouton qui doit être appuyé -- (qui correspond à la première valeur de la variable) -- 4/ n° du dernier bouton qui doit être appuyé -- (qui correspond à la dernière valeur de la variable -- on suppose que tous les boutons se suivent de 1 en 1) -- 5/ valeurs possibles de la variable entre " -- (elles doivent être listées dans l'ordre des boutons de la VD) local Table = {"Auth_PS3", 23, 3, 4, "Autorisé", "Interdit", "Auth_TV", 289, 3, 4, "Autorisé", "Interdit", "Auth_VMCEtage", 290, 3, 4, "Autorisé", "Interdit", "Auth_TerrPar", 291, 3, 4, "Autorisé", "Interdit", "Auth_LumHallNuit", 362, 3, 4, "Autorisé", "Interdit", "ECS", 292, 3, 4, "Oui", "Non", "DayPart", 130, 3, 4, "After SunRise", "After SunSet", "Noel", 363, 3, 4, "Oui", "Non", "Saison", 133, 3, 6, "Printemps", "Eté", "Automne", "Hiver", "Chauffage", 351, 3, 5, "0", "1", "2", "Vacances", 293, 3, 4, "Oui", "Non" } ---------------------------------- -- DO not change bellow this line ---------------------------------- local i = 1 while Table[i] ~= nil do local VG_Nom = tostring(Table[i]) fibaro:debug("----------------------------") fibaro:debug("Nom de la variable Globale = " ..VG_Nom) local VD_id = tostring(Table[i+1]) local Btn_Deb = tonumber(Table[i+2]) local Btn_Fin = tonumber(Table[i+3]) local NbrVal = (Btn_Fin - Btn_Deb) + 1 --Nbr de valeur possibles de la variable fibaro:debug('NbrVal = ' ..NbrVal) i = i + 4 local VG_Val = fibaro:getGlobalValue(VG_Nom) fibaro:debug('Valeur de la variable Globale = ' ..VG_Val) for j = 1,NbrVal do if VG_Val == Table[i+j-1] then fibaro:debug(VG_Nom.. ' = ' ..VG_Val) fibaro:debug("Il faut appuyer sur le bouton : " ..Btn_Deb.. " de la VD_id " ..VD_id) fibaro:call(VD_id, "pressButton", Btn_Deb) end Btn_Deb = Btn_Deb + 1 end -- for i = i + NbrVal end -- while Pour retrouver l'ID du VD, vous avez plusieurs solutions : Le toolkit de Krikroff l'API : http://<IP Box>:<Port Box>/api/virtualDevices vous exportez le VD, et dans l'URL vous voyez ?id=xxx vous éditez le VD, et dans l'URL vous voyez ?vid=xxx Il vérifie la valeur de la variable et appuie sur le bouton correspondant à l'icône. D/Variable. Donc maintenant, quand je vois qu'une des icônes associée à mes variables est l'icone standard, je clique sur le bouton, et tout est remis au carré. Cela évite d'avoir un main loop qui tourne pour chaque variable 99% du temps pour rien. On a donc trouvé une parade à la deuxième limitation ;-) Pour la première limitation (mise à jour après un restart de la box) la solution est facile : Créer une scène qui appelle la VD "Var_Update" / bouton 1 au démarrage de la box. --[[ %% autostart --]] fibaro:sleep (10*1000) fibaro:call(361, "pressButton", "1") où 361 est l'ID du Vd "Var_Update" Merci à Steven qui finalement à trouvé la solution du sleep au début de la scène, ainsi qu'à i-magin et mprinfo pour leurs bonnes idées
  9. My Batteries

    @flamalex a fait une modification au code car problèmes à partir du firmware v'.140ou v 4.145. Il l'a baptisée v2, mas comme on était déjà à v5.4, je l'ai rebaptisé v6.0. My_Batteries_v6.0.vfib --------------------------------------------------------------------------------------------------------------- My Batteries Ce virtual device permet de visualiser le niveau des batteries de l'ensembles de vos appareils sur batterie (max 10). Il est TRES largement inspiré du travail initial de Steven http://www.domotique-fibaro.fr/index.php/topic/1710-my-batteries/ Merci également à Moicphil qui m'a énormément aidé pour debugger la partie v4.x Les modifications que j'y ai apportées : modification de l'affichage, avec moment du dernier check automatique incorporation des supers icônes de @couillerot firmware 4.x push si batterie sous un certain niveau Voici la dernière version du VD : My_Batteries_v5.4.vfib Et les codes : MyBatteries.Batteries.lua MyBatteries.MainLoop.lua
  10. ATTENTION Ce VD peux corrompre la DB de votre HC2, à n'utiliser qu'en connaissance de cause. Je ne puis être tenu pour responsable en cas de problème. Faire un backup de la DB avant de commencer à l'utiliser. Si vous cachez un device , notez bien son numéro, car il ne sera plus visible, et donc "impossible" à reconfigurer, ... (en tout cas si vous cachez le Main device et ses child devices) Merci : Merci à Steven pour son code "Double click pour confirmer" Merci à notre graphiste national (Couillerot) pour ses icônes Objectif : Ce VD permet de modifier une propriété d'un device. Je l'ai déjà utilisé dans les situations suivantes : dead : marquer manuellement un device sur pile comme mort, quand il n'a plus de pile ... disabled : afficher un "sous-device" qui était caché par erreur / cacher des child devices inutilisés (exple dans les binary sensors). "offset" : modifier l'offset d'une sonde de température (plutôt que d'utiliser le slider) Utilisation : avec l'URL suivante "<IP>/api/devices/" (suivi du # du device) vous pouvez voir dans votre browser les propriétés et leur nom précis (dépend du type de device) {"id":649,"name":"Tmp_Tisun","roomID":12,"type":"com.fibaro.temperatureSensor","baseType":"com.fibaro.multilevelSensor","enabled":true,"visible":true,"isPlugin":false,"parentId":634,"remoteGatewayId":0,"interfaces":["zwave"],"properties":{"parameters":[{"id":1,"lastReportedValue":0,"lastSetValue":0,"size":2,"value":0},{"id":2,"lastReportedValue":0,"lastSetValue":0,"size":2,"value":0},{"id":3,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":4,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":5,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":6,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":7,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":8,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":9,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":10,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":11,"lastReportedValue":200,"lastSetValue":200,"size":1,"value":200},{"id":12,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":13,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":14,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0}],"zwaveCompany":"Fibargroup","zwaveInfo":"3,3,52","zwaveVersion":"2.1","pollingTimeSec":0,"configured":"true","dead":"false","deviceControlType":"0","deviceIcon":"30","emailNotificationID":"0","emailNotificationType":"0","endPointId":"3","liliOffCommand":"","liliOnCommand":"","log":"","logTemp":"","manufacturer":"","markAsDead":"true","model":"","nodeId":"79","offset":"10.00","parametersTemplate":"85","productInfo":"1,15,5,1,16,2,2,1","pushNotificationID":"0","pushNotificationType":"0","remoteGatewayId":"0","saveLogs":"false","showFireAlarm":"false","showFreezeAlarm":"false","smsNotificationID":"0","smsNotificationType":"0","unit":"C","useTemplate":"true","userDescription":"","value":"70.87"},"actions":{"reconfigure":0},"created":1444553629,"modified":1444553629,"sortOrder":113} les propriétés concernées se trouvent dans : "properties":{...} {"parameters":[{"id":1,"lastReportedValue":0,"lastSetValue":0,"size":2,"value":0},{"id":2,"lastReportedValue":0,"lastSetValue":0,"size":2,"value":0},{"id":3,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":4,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":5,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":6,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":7,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":8,"lastReportedValue":255,"lastSetValue":255,"size":1,"value":255},{"id":9,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":10,"lastReportedValue":1,"lastSetValue":1,"size":1,"value":1},{"id":11,"lastReportedValue":200,"lastSetValue":200,"size":1,"value":200},{"id":12,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":13,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0},{"id":14,"lastReportedValue":0,"lastSetValue":0,"size":1,"value":0}],"zwaveCompany":"Fibargroup","zwaveInfo":"3,3,52","zwaveVersion":"2.1","pollingTimeSec":0,"configured":"true","dead":"false","deviceControlType":"0","deviceIcon":"30","emailNotificationID":"0","emailNotificationType":"0","endPointId":"3","liliOffCommand":"","liliOnCommand":"","log":"","logTemp":"","manufacturer":"","markAsDead":"true","model":"","nodeId":"79","offset":"10.00","parametersTemplate":"85","productInfo":"1,15,5,1,16,2,2,1","pushNotificationID":"0","pushNotificationType":"0","remoteGatewayId":"0","saveLogs":"false","showFireAlarm":"false","showFreezeAlarm":"false","smsNotificationID":"0","smsNotificationType":"0","unit":"C","useTemplate":"true","userDescription":"","value":"70.87"}ensuite adapter suivant vos désirs les lignes 4, 10 et 11 du VD local Property = "offset" -- vleurs possibles : cfr json local NewPropValue = "0.00" -- la valsur doit être entre " local deviceID = 649 Lorsque vous appuyez une première fois sur le bouton "Update device property", il vous affiche le device, la propriété à modifier, sa valeur actuelle, et la future valeur Appuyez une deuxième fois sur le bouton (dans les 5 sec) pour effectuer la modification Si le nom de la propriété introduit en ligne 4 n'existe pas, il affiche un message d'erreur. Cette v2 est compatible avec le firmware v4.x DeviceProperties_v2.0.vfib DeviceProperties_v1.0.vfib DeviceProperties._v2.0.vfib
  11. Support Gea

    SUPPORT GEA ______________ Le projet GEA ayant pris de l'ampleur, il n'est plus possible de regroupé toutes les questions/réponses, demandes de support et évolutions au sein d'un seul et même topic. Ce topic est donc créer pour répondre à vos questions, doutes, demandes d'assistance. N'hésitez pas à poser vos questions ici, la communauté sera contente de vous aider dans la mesure du possible Projet GEA : Tutorial Version actuel 5.40 : disponible sur GitHub Un Wiki est disponible (connexion pas forcément stable) : Wiki
  12. Meteoalerte

    MeteoAlert - Version 1.40 But : Ce module virtuel à pour but d'aller chercher les informations d'alerte météo sur le site officiel vigilance métérologique et de parcourir le fichier XML afin de trouver les alertes relatives à votre département. Ce module peut aussi vous envoyer des messages push sur votre smartphone en cas d'alerte météo. Une possibilité d'utilisation de variable globale est aussi prévu afin de pouvoir bénéficier du niveau d'alerte dans vos autres scénarios. Installation : - Importer le module virtuel ci-joint : MeteoAlerte.vib Paramétrage : Il est important de modifier le code du bouton "Vérifier" afin que ce dernier correspond à vos attentes. Vérifier préalablement que votre département existe bien sur le site http://vigilance.meteofrance.com/ dans le cas contraire, notez un numéro de département proche du votre. -- -------------------------------------------------------------------------------------------------------------- -- MeteoAlerte est est script qui va vérifier les alertes méteo du site vigilance.meteofrance.com -- Le site retournant des informations XML, le script va donc les parser. -- Author = "Steven Piccand" -- Version = "V1.40" -- -------------------------------------------------------------------------------------------------------------- if (not MeteoAlerte) then MeteoAlerte = {} -- !!! VOS PARAMETRES !!! MeteoAlerte.dep = "74" -- votre département MeteoAlerte.smartphone = {70} -- {70,71} le(s) portable(s) ou envoyé la notification push en cas d'alerte MeteoAlerte.niveauAlerte = 3 -- le niveau minimum d'alerte pour être notifié MeteoAlerte.globalvariable = "" -- Nom de la variable globale a renseigné Météo France fourni un niveau d'alerte de 1 (rien à signaler) à 4 (Très dangereux). en mettant la variable MeteoAlerte.niveauAlerte = 3, le module virtuel enverra un message push dès que le niveau sera de 3 ou supérieure. Si vous renseigné MeteoAlerte.globalvariable avec le nom d'une variable que vous aurez précédemment créée, ce script renseignera sa valeur (1 à 4) dès que possible. Ce script est initialement prévu pour s'exécuter toutes les 12 6 heures. Visuel : Historique : Version 1.10 En de problème d'accès au fichier XML, le script tente 5 fois toutes les 10 minutes de récupérer le fichier. En cas d’échec, il attendra les prochaines 6 heures. Taux de rafraîchissement augmenté à toutes les 6 heures (précédemment 12 heures). Version 1.20 Autorisé l'envoi de la notification sur plusieurs smartphonesVersion 1.30 Correction des soucis apporté par le Main LoopVersion 1.40 Correction du status relevé par @JM13 Ajout de la possibilité de personnalisé l'icone selon le status en cours (demandé par @Gwendal) Version 2.00 Ajout du type de risque (nouveauté de MétéoFrance) Pour les développeurs : ce script inclus une fonction de parsing XML libre de droit. MeteoAlerte.vfib
  13. Pour fêter ma nomination à l'élection du "Membre du mois de mai" je vous propose mon nouveau jouet... Il y a 2 jours, j'ai rêvé d'envoyer un message à la HC2 par sms pour qu'il soit diffusé sur squeeze, Karotz, sonos ou tout autre système du même type. La HC2 ne peut pas recevoir de sms (pour le moment du moins), je me suis donc dit qu'il fallait utiliser un autre moyen. L'idée est donc de modifier le contenu d'une variable qui sera ensuite utilisée avec google Translate pour être prononcée : http://translate.google.com/translate_tts?tl=FR&ie=UTF-8&q=j'arrive%20dans%205%20minutes Il me fallait donc un moyen pour modifier le texte "j'arrive dans 5 minutes" de cette variable -> Donc créer un clavier ! Comme ce clavier sera utilisé sur téléphone ou tablette pour écrire des petits messages : Premièrement, je ne me suis pas embêté avec : • la ponctuation qui se résume à un "point" et un "Espace" (placés 2 fois en haut et bas du clavier pour plus de souplesse). • les caractères spéciaux puisque l'on peut s'en passer et se débrouiller ("français" s'écrira "fransser" ; "Porte d'entrée" s'écrira "porte d'entrer" ou porte dantrer"). Deuxièmement, je me suis créé des petits boutons raccourcis qui écrivent directement dans la variable : • "J'arrive d" -> "J'arrive dans " • "minutes" -> " minutes " • "Merci" -> " merci " • "Devoirs" -> "C'est l'heure de faire les devoirs" • "C'est l'heure" -> "C'est l'heure d'y aller" Du coup en utilisant 4 boutons je peux dire "J'arrive dans 15 minutes". Passons au visuel du clavier : Je ne suis pas chez moi, alors je ne peux pas exporter le module virtuel. Mais je le poste dès demain (à moins que quelqu'un sache comment faire de l'extérieur - même pas réussi avec un VPN...). MAJ : Voici le Module à télécharger : N'oubliez pas de renseigner l'adresse MAC de votre/vos Squezebox dans le bouton lecture. Messager.vfib L'utilisation du clavier pour modifier le contenu d'une variable pourra être décliné pour d'autres utilisations que celle-ci. Je pensais à afficher un message sur les squeezerbox ou un autre support (en guise de Post It)... à envoyer un message en push sur la tablette des gamins, ou le téléphone de madame qui ne capte pas le réseau 3G/GSM mais qui est connecté au wifi... Si vous avez d'autres idées n'hésitez pas !
  14. Gestionnaire d'Evénements Automatique (GEA) ancienement : Wtdiso What To Do If Still Open Edit : version 5.00 modifiée le 8 décembre 2014 But : Ce script a pour but de contrôler, à intervalle régulier, l'état de votre environnement pendant une durée déterminée afin de vous avertir d'éventuel soucis et si nécessaire d'effectuer automatiquement certaines actions. Depuis la version 3.00 vous avez aussi la possibilité d'utiliser ce script en exploitant les déclencheurs %%properties end %%globals. Exemple : Etre informé si la porte du garage est restée ouverte plus de 10 minutes Recevoir une notification et allumer le radiateur s'il fait trop froid depuis 30 minutes Eteindre automatiquement la lumière des WC si cette dernière est allumée plus de 5 minutes Eteindre le frigo et recevoir une notification si ce dernier consomme trop d'électricité ou pas assez Installation : Nouveauté de la version 3.80 Depuis le panneau des variables, créer une variable (simple) appelée "GEA_Tasks" (son contenu n'a pas d'importance) Créer un scénario en mode LUA Insérer le script ci-joint (GEA.lua)) Adapter les dernières lignes à vos besoins (en dessous de la ligne "A VOUS DE JOUER") Paramétrage : Définir l'intervalle de contrôle en secondes GEA.checkEvery = <nb secondes> (30 par défaut) Exemple : GEA.checkEvery = 30 Indique la liste des portables par défaut devant recevoir une notification {70, 71} GEA.portables = {<id portable> [, <id portable>][, ...]} Exemple : GEA.portables = {70, 71} Indique si on utilise un firmware égale ou supérieur à la version 4.017 GEA.isVersionFour = true --- On est en version 4.017 Beta ou suppérieur Indique la langue utilisée (Français : FR ou Anglais : EN) GEA.language = "FR" Bascule en mode de débogage pour obtenir plus de traces GEA.debug = true | false (false par défaut) Exemple : GEA.debug = true Permet un débugage fort de GEA, chque erreur provoque l'arrêt de GEA si cette option est à false GEA.catchError = true | false (true par défaut) Exemple : GEA.catchError = false -- va afficher les erreurs et stopper GEA Supsendre le script à la volée GEA.getGlobalForActivation = {<variable globale>, <valeur>} Exemple : GEA.getGlobalForActivation = {"SuspendreGEA", "non"} Tant que la variable globale "SuspendreGEA" sera à "non" le script continuera son action. Syntaxe : Simple condition : GEA.add(<condition>, <durée en secondes|-1>, <message a notifier>[, <options>]) Exemple : GEA.add(100, 10*60, "Lampe allumée de puis plus de 10mn, on l'éteint", {{"turnOff"}}) Condition multiple : GEA.add( { <condition_principale>[, <condition2>[, ...]] } , <durée en secondes|-1>, <message a notifier>[, <options>]) Exemple : GEA.add( { 100, {"Global", "JourNuit", "Nuit"} } }, 10*60, "Lampe allumée de puis plus de 10mn ET la variable global JourNuit indique Nuit alors on éteint la lampe", {{"turnOff"}}) Conditions autorisées : <Id module> -- Identifiant du module * {"Global", <nom variable>, <valeur>} -- Si la variable global X contient la valeur Y {"Weather", <valeur>} -- Si la météo indique la valeur {"Sensor+", <id module>, <valeur max>} -- Si la valeur du sensor X est supérieur à Y {"Sensor-", <id module>, <valeur max>} -- Si la valeur du sensor X est inférieur à Y {"Sensor", <id module>, <valeur max>} -- Si la valeur du sensor X est égale à Y {"Sensor!", <id module>, <valeur max>} -- Si la valeur du sensor X est différente à Y {"Value+", <id module>, <valeur max>} -- Si la valeur du module X est supérieur à X {"Value-", <id module>, <valeur max>} -- Si la valeur du module X est inférieur à X {"Value", <id module>, <valeur max>} -- Si la valeur du module X est égale à X {"Value!", <id module>, <valeur max>} -- Si la valeur du module X est différente à X {"Global+", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est supérieur à X {"Global-", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est inférieur à X {"Global", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est égale à X {"Global!", <nom variable>, <valeur>} -- Si la valeur de la variable globale X est différente à X {"Slider-", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est inférieur à X {"Slider+", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est supérieur à X {"Slider", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est égale à X {"Slider!", <id_vd>, <nom slider>, <valeur>} -- Si la valeur du slider est différente à X {"Label", <id_vd>, <nom label>, <contenu>} -- Si la valeur du label est égale à X {"Label!", <id_vd>, <nom label>, <contenu>} -- Si la valeur du label est différente à X {"Property", <id_module>, <nom propriété>, <valeur>} -- Si la valeur de la propriété du module est égale à la valeur indiquée {"Property!", <id_module>, <nom propriété>, <valeur>} -- Si la valeur de la propriété du module est différente à la valeur indiquée {"Battery", <id module>, <valeur max>} -- Si l'état de la pile du module X est inférieur ou égale à X {"Batteries", <valeur max>} -- Si l'état de la pile des 350 premiers ont une pile inférieur ou égale à X {"Dead", <id module>} -- Si le module X ne répond plus {"Group", <numéro du groupe>} -- Si le groupe X est valable {"SceneActivation", <id module>, <id scene>} -- Si la scene X du module Y est le déclencheur du script * Si seul l'Identifiant du module le script considère qu'il doit vérifier si le module est activé. Durée : <durée en secondes> -- Nombre de secondes pendant lequel la condition doit être respectée Message : <message à notifier> -- Le message devant être notifier ** ** Si le message est vide "" aucune notification ne sera envoyée Un message peut contenir des variables qui seront remplacée à la volée. Ces variables sont #time#, #duration#, #value#, #date#, #seconds#, #name#, #runs#, #rooms# soit respectivement heure, durée, dernière valeur, date, secondes, nom du périphérique, nombre d'exécution et pièce Exemple "Le consommation #valeur#W relevée à #time#, le #date# sur le périphérique #name# est trop élevée" Depuis la version 4.20, il est possible de connaitre les valeurs des autres périphériques impliqué. GEA.add( { condition1, condition2, condition3 }, <durée>, "#value[1]# #value[2]# #value[3]#"). Les variables indexée sont : #value[index]#, #name[index]# et #room[index]#. #name#, #value# et #room# indique toujours la condition principale. Options : {<option>[,<option>][,...]} -- Il s'agit d'un groupe d'options {{},{},{}} Option : {"turnOff"[,<id module>]} -- Eteint le périphérique concenné {"turnOff"} ou {"turnOff",21} {"turnOn"[,<id module>]} -- Allume le périphérique concerné {"turnOn"} ou {"turnOn",21} {"Inverse"} -- On inverse la condition si elle était vrai, le script retourn faux {"Repeat"} -- On répete les avertissements tant que le périphérique n'a pas changé d'état. {"Portable", <id>} -- Le message associé à ce périphérique sera envoyé à ce portable au lieu de ceux par défaut {"Portable", 70} {"Scenario", <id>} -- Lance un scénario selon son identifiant {"Scenario", 2} {"Value", <value>} -- Met la valeur 20 dans le périphérique - dimmer une lampe. {"Value", 20} {"Value", <id>, <value>} -- Met la valeur 20 dans le périphérique <id> - dimmer une lampe. {"Value", 19, 20} {"Open"} -- Ouvre le volet {"Open", <value>} -- Ouvre le volet de X % {"Open", 20} {"Open", <id>, <value>} -- Ouvre le volet (id) de X% {"Open", 61, 20} {"Close"} -- Ferme le volet {"Close", <value>} -- Ferme le volet de X % {"Close", 20} {"Close", <id>, <value>} -- Ferme le volet (id) de X% {"Close", 61, 20} {"Global", <variable>, <valeur>} -- Met la valeur "Oui" dans la variable globale "Maison" {"Global", "Maison", "Oui"} {"Global", <variable>, "inc+"} -- Incrémente de 1 automatiquement la variable globale {"Global", <variable>, "dec-"} -- Decrémente de 1 automatiquement la variable globale {"Time", <from>, <to>} -- Ne vérifie l'évenement QUE si nous sommes dans la/les tranches horaires {"Time", "22:00", "06:00"} {"Dates", <from>, <to>} -- Ne vérifie l'évenement QUE si nous sommes dans la/les périodes de dates spécifiée {"Dates", "01/01[/2014]", "31/01[/2014]"} {"Armed"} -- Ne vérifie QUE si le module est armé {"Disarmed"} -- Ne vérifie QUE si le module est désarmé {"setArmed", <id>} -- arme le module <id> {"setDisarmed", <id>} -- desarme le module <id> {"RestartTask", <id_tache>} -- Redémarre une tâche selon son <id> {"StopTask", <id_tache>} -- Stoppe une tâche selon son <id> {"NotStarted"} -- Empêche la tache de démarrer automatiquement (voir RestartTask) {"MaxTime", <number>} -- Stoppe une tâche après un certain nombre d'exécution {"DST"} -- Ne vérifie l'évenement QUE si nous sommes en mode "Saving time" soit heure d'été {"NOTDST"} -- Ne vérifie l'évenement QUE si nous sommes en mode heure d'hiver {"VirtualDevice", <id,_module>, <no_bouton>} -- Pr ess le bouton du module virtuel {"VirtualDevice", 2, 1} {"Label", <id_module>, <name>, <message>} -- Attribue le message au label du module virtuel {"Label", 21, "ui.Label1.value", "activé"} {"WakeUp", <id,_module>} -- Essai de réveillé le module {"WakeUp", 54} {"Email", <id_user>,} -- Envoi le message par email à l'utilisateur {"Email", 2} {"Email", <id_user>,<sujet>} -- Envoi le message par email à l'utilisateur {"Email", 2, "Sujet du message"} {"Group", <numero>} -- Attribut cet événement au groupe {"Group", 2} {"Slider", <id_module>, <id_slider>, <valeur>} -- Met la valeur dans le slider du module {"Slider", 19, 1, 21.3} {"Program", <id_module>, <no>} -- Exécute le programme du module RGB {"Program", 19, 5} {"RGB", <id_module>, <col1>, <col2>, <col3>, <col4>} -- Modifie la couleur RGB du module {"RGB", 19, 100, 100, 0, 100} {"Days", <jours>} -- Ne vérifie l'évenement que si le jours d'exécution est dans le/les jours indiqué (jeurs peut prendre les valeurs suivantes "Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, All, Weekday, Weekend") {"CurrentIcon", <id_module>, <no_icon>} -- Modifie l'icone d'un module virtuel {"CopyGlobal", <var_source>, <var_dest>} -- Copy la valeur de la variable global <var_source> dans la variable global <var_dest> {"If", {[{<condition}[,{<condition}[,...]]}} -- L'événement sera autorisé uniquement si toutes les conditions sont valides Demande de support / FAQ : un topic a été dédié pour répondre à toutes les questions sur le projet : Support GEA n'hésitez pas à venir nous y retrouver. Explication : Vous précisez quel module le scénario doit contrôler (GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes")). Toutes les 30 secondes, le scénario va vérifier l'état de la porte 28. Si cette porte est restée ouverte plus de 10 minutes, il vous enverra un message push. Contrairement à d'autre scénario, celui-ci contrôle l'état d'une porte/lumière/volet toutes les X secondes. Dans l'exemple de la porte de garage, si cet dernière a été fermée et ré-ouverte pendant les dernières 10 minutes, le compteur sera redémarré. Ce scénario permet de cumuler plusieurs avertissements, il vous suffit donc d'un seul scénario pour contrôler tout votre environnement :[/indent] GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}) GEA.add(69, 5*60, "La lumière du local technique est allumée depuis plus de 5 minutes") GEA.add({"Global", "Capsule", "100"}, 1*60, "Il faut commander du café, plus de capsule") GEA.add({"Sensor+", 19, 450}, 5*60, "Consommation du frigo excessive (#value#W), on l'éteint", {{"turnOff"}}) Voici un exemple minimaliste de scénario -- ================================================== -- A VOUS DE JOUER -- ================================================== GEA.checkEvery = 30 -- On vérifie toutes les X secondes GEA.portables = {70} -- Liste des portables devant recevoir une notification {70, 71} GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}}) GEA.add(69, 5*60, "", {{"turnOff"}}) -- Eteindre automatiquement le local technique -- Si un enfant allume sa lampe le soir, après 10mn le système la dim à 20%. Après 20mn le système éteint la lampe. GEA.add(66, 10*60, "Chambre Kendra allumée 20%", {{"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(66, 20*60, "Chambre Kendra extinction", {{"Time", "22:00", "06:00"}, {"turnOff"}}) -- Variable global GEA.add({"Sensor+", 80, 100}, 30, "Consommation cafetière, café en cours", {{"Global", "Capsule", "inc+"}}) GEA.add({"Global", "Capsule", "100"}, 1*60, "Recommander du café") -- Sensor et valeur GEA.add({"Sensor+", 19, 100}, 1*60, "Consommation excessive de la WMC #value#") GEA.add({"Value-", 8, 18}, 30*60, "Il fait froid au salon #value# à #time#") -- NE PAS OUBLIER - Démarrage du scénario GEA.run() Special Thanks to : Fredric, Diuck, Domodial, moicphil, lolomail, byackee, JossAlf, Did, Hansolo, Shyrka973, fredo, jompa98 et tous les autres gars de Domotique-fibaro.fr Quelques exemples : GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}}) -- On vérifie toutes les 10mn si la porte du garage est ouverte et on envoi un message push. On répète l'opération tant que la porte n'est pas fermée. GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}, {"Time", "22:00", "06:00"}}) -- Idem de précédent mais on vérifie uniquement entre 22:00 et 06:00 GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Repeat"}, {"Time", "22:00", "06:00"}, {"Time", "12:00", "13:00"}}) -- Idem de précédent mais on vérifie entre 22:00 - 06:00 et 12:00 - 13:00 GEA.add(28, 10*60, "La porte du garage est ouverte depuis plus de 10 minutes", {{"Scenario", 1}, {"Time", "22:00", "06:00"}, {"Time", "12:00", "13:00"}}) -- Si la porte du garage est ouverte plus de 10mn entre 22:00 - 06:00 ou 12:00 - 13:00, on lance le scénario 1 GEA.add(69, 5*60, "", {{"turnOff"}}) -- On éteint la lumière des toilettes automatiquement après 5 minutes GEA.add(69, 5*60, "", {{"turnOff"}, {"Global", "WC", "Allumé"}, {"Time", "22:00", "06:00"}}) -- On éteint la lumière des toilettes automatiquement après 5 minutes si ils ont été allumé entre 22:00 et 06:00 et on met la variable global "WC" à "Allumé" GEA.add(19, 5*60, "Lumière extérieur est éteinte", {{"Inverse"}, {"Time", "Sunset", "Sunrise"}, {"Portable", 71}}) -- Si la lumière extérieur est éteinte (inverse) depuis plus de 5minutes entre le couché du soleil et le levé on envoi un message push au portable ayant l'ID 71 au lieu de celui par defaut. GEA.add(69, 5*60, "", {{"Global", "Karotz", "WC occuper"}, {"VirtualDevice", 20, 1}}) -- Si la lumière est allumée plus de 5mn, on met la variable "Karotz" à "WC occuper" et on appuie sur le bouton (id : 1) du module virtuel (id : 20) GEA.add(69, 5*60, "", {{"Days", "Weekend, Monday"}}) -- On vérifie si la lumière est allumée plus de 5mn, uniquement les Samedis, Dimanches et Lundi -- On dimme la lampe à 20% si elle est allumée plus de 10mn entre 22:00 et 06:00 puis après 20mn on l'éteint GEA.add(31, 10*60, "", {"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(31, 20*60, "", {"Time", "22:00", "06:00"}, {"turnOff"}}) -- Variable globale -- si la variable "Capsule" contient "100" depuis plus d'une minute GEA.add({"Global", "Capsule", "100"}, 1*60, "Commander du café, plus de capsule") -- Batterie -- parcours les 350 premiers modules à la recherche de pile inférieur ou égal à 40% GEA.add({"Batteries", 40}, 24*60"60, "", {{"Repeat"}}) -- Sensors -- Si le frigo comsomme trop depuis 5 minutes (plus de 450W), on l'arrête GEA.add({"Sensor+", 19, 450}, 5*60, "Consommation excessive #value# > 450W", {{"turnOff"}}) -- Si le frigo ne comsomme pas assez depuis 5 minutes (moins de 3W), on averti GEA.add({"Sensor-", 19, 3}, 5*60, "Consommation insuffisante #value#< 3W", {{"Repeat"}}) -- Value GEA.add({"Value-", 8, 20}, 1*60, "Il fait froid au salon #value# à #time#") -- moins de 20 GEA.add({"Value+", 8, 22}, 1*60, "Il fait trop chaud #value# au salon depuis #duration#") -- plus de 22 -- RGB si la consommation du frigo est trop élevée (> 450W) GEA.add({"Sensor+", 19, 450}, 1*60, "Le périphérique #name# consomme trop (#value#)", {{"RGB", 27, 100, 0, 100, 100}}) -- Slider - attribue 100 à la valeur d'un slider (1) du module virtuel (27) si la lampe (19) est allumée depuis 1 minutes GEA.add(19, 1*60, "", {{"Slider", 27, 1, 100}}) -- Programme - lance le programme 5 du module 23 si la lampe (19) est allumée depuis 1 minutes -- puis éteint la lampe 19 GEA.add(19, 1*60, "", {{"Program", 23, 5}, {"turnOff"}}) -- Dead GEA.add({"Dead", 27}, 1*60, "Le périphérique #name# ne répond plus", {{"WakeUp", 27}}) -- Détecteur (id 200) avec allumage de lampe (id 100) -- Chaque détection redémarre le time de la lampe local myTask = GEA.add(100, 5*60, "Extinction de la lampe après 5mn", {{"turnOff"}}) GEA.add(200, -1, "", {{"RestartTask", myTask}}) -- Groupes GEA.add({"Global", "absent", "oui"}, 10*60, "", {{"Group", 2}}) GEA.add(19, 10*60, "", {{"Group", 2}}) GEA.add({"Group", 2}, 5*60, "Absent mais la lampe (19) est encore allumée, extinction", {{"turnOff", 19}}) -- Si la variable global "absent" est sur "oui" depuis 10 minutes -- Si la lampe 19 est allumée depuis 10 minutes -- Si ces éléments sont vrai pendant plus de 5 minutes alors j'envoi un push et j'éteint la lampe 19. Déclenchement instantané La version 3+ permet de déclenché ce script en instantané Exemple allumé la lampe (65) à l'ouverture de la porte (18) et l'éteindre à la fermeture --[[ %% autostart %% properties 18 value %% globals Capsule --]] ... GEA.add(18, -1, "", {{"turnOn",65}}) GEA.add(18, -1, "", {{"Inverse"},{"turnOff",65}}) GEA.add({"Global","Capsule", "100"} Paramètre "If" La version 3.10 voit naître le paramètre "If". Ce dernier permet de valider un certain nombre de conditions avant de valider l'événement. -- Si la lumière (69) est allumée un Lundi, Samedi ou Dimanche -- ET que "Vacances = 0" ET que "Absence" = 1 -- ET que la température (8) est inférieur à 18° local condition = {"If",{{"Global", "Absence", "1"},{"Global", "Vacances", "0"},{"Value-", 8, 18}}} GEA.add(69, -1, "La lumière est allumée", {{"Days", "Monday, Weekend"}, condition}) Historique des versions : Version 1.10 [Nouveauté] Si vous mettez "turnOff" comme message, le scénario ne vous enverra pas d'avertissement mais éteindra directement le périphérique en question [Fix] Correction pour les périphérique de type dimmable_light et binary_light Version 1.20 [Nouveauté] GEA.getGlobalForActivation Cette nouvelle fonctionnalité permet de suspendre/activé le scénario par le biais d'une variable global GEA.getGlobalForActivation = {"Alerte", "activé"} -- Le scénario ne fonctionnera que si la variable globale "Alerte" contient "activé" [Nouveauté] GEA.setGlobalMessages Cette nouvelle fonctionnalité permet de mettre a jour une variable globale au lieu d'envoyé un message push. GEA.setGlobalMessages = {{"SARAH:", "parle"}, {"KAROTZ:", "Karotz"}} -- Indique au scénario que si le message contient "SARAH:" ou "KAROTZ:" le scénario doit mettre à jour la variable "parle" ou "Karotz" au lieu d'envoyé un message push. [Nouveauté] Repeat Vous pouvez ajouté un dernier paramètre à la fonction GEA.add pour indiquer si l'avertissement doit être répété ou non. GEA.add(71, 5*60, "Toilette r-c allumée") -- l'avertissement ne sera pas répété GEA.add(71, 5*60, "Toilette r-c allumée", true) -- l'avertissement sera répété GEA.add(71, 5*60, "Toilette r-c allumée", false) -- l'avertissement ne sera pas répété Version 1.30 - Refonte globale [supprimé] GEA.setGlobalMessages Cette fonctionnalité est remplacée par le paramètre {"Global", "MaVariable", "MaValeur"} [supprimé] Repeat Le paramètres Repeat a été supprimé et remplacé par le paramètre {"Repeat"} Version 1.40 [Ajouté] Paramètre {"Days", "..."} [Ajouté] Sunset et Sunrise {"Time", "Sunset", "Sunrise"} Version 1.41 [Fix] Suppression du message "hors plage horaires" prêtant à confusionVersion 1.42 [Fix] Si une plage horaires est définie et que la vérification à lieu dans cette même plage, le scénario ne contrôlait plus le paramètre {"Days"}Version 1.50 [Ajouté] Paramètre {"Value", <valeur>} Ce paramètre permet de modifier la valeur d'un périphérique. Utiliser principalement pour dimmer une lampe par exemple on dimme la lampe à 20% si elle est allumée plus de 10mn entre 22:00 et 06:00 puis après 20mn on l'éteint. GEA.add(31, 10*60, "", {"Time", "22:00", "06:00"}, {"Value", 20}}) GEA.add(31, 20*60, "", {"Time", "22:00", "06:00"}, {"turnOff"}})Version 1.51 [Ajouté] Message d'avertissement lorsque le scénario est suspenduVersion 1.52 [Modifié] Trace plus clair en mode "debug"Version 1.55 [Optimisation] Optimisation du codeVersion 1.60 [Nouveauté] Ajout de déclencheur Avant, il n'était possible uniquement d'avoir comme déclencheur l'identifiant d'un périphérique et le système utilisait sont état (actif ou non). Il est maintenant possible d'avoir comme déclencheur une variable global ou la valeur d'un sensor (voir les derniers exemples)Version 1.70 [Nouveauté] Ajout des déclencheurs "Value+", "Value-" et "Dead" [Nouveauté] Ajout des actions "Email", "Label" et "WakeUp" [Nouveauté] Ajout de variables dans le message : time, duration, value, date, seconds, name Version 1.71 [Nouveauté] Possibilité de précisé un ID différent pour turnOn ou turnOff (ex : {"turnOff", 21})Version 1.80 [Nouveauté] Ajout des actions "Program", "RGB" et "Slider" [Nouveauté] Ajout de la propriété {"Group", 1} [Nouveauté] Ajout du déclencheur {"Group", 1} Version 1.81 [Fix] Gestion des groupesVersion 2.00 [Modification] Renommage du projet (anciennement Wdtiso)Version 2.01 [Nouveauté] Ajout de l'action {"Value", <id>, <valeur>} permettant de modifier la valeur d'un module autre que celui testéVersion 3.00 [Nouveauté] Ajout de l'action {"Open"} et {"Close"} permettant d'ouvrir fermer les volets [Nouveauté] Ajout de l'action {"Open", valeur} et {"Close", valeur} permettant d'ouvrir fermer les volets selon un pourcentage [Nouveauté] Ajout de l'action {"Open", id, valeur} et {"Close", id, valeur} permettant d'ouvrir fermer les volets du module (ID) selon un pourcentage [Nouveauté] Possibilité des déclencheurs %%properties et %%globales avec comme durée -1 Version 3.10 [Correction] Correction des modes {"Open", <id>, <value>} et {"Open", <id>, <value>} [Nouveauté] Ajout du paramètre {"DST"} permettant de vérifié l'heure d'été [Nouveauté] Ajout du paramètre {"If", {[{condition}][,{condition}[,...]]}} Permet de valider X conditions avant de lancer les actions Version 3.15 [Nouveauté] Ajout du paramètre {"NOTDST"} permettant de vérifié l'heure d'hiverVersion 3.20 [Fix] Correction des paramètres {"DST"} et {"NOTDST"} [Modification] Une correction est maintenant appliquée sur le délai entre 2 vérifications selon la durée de traitement des événements. Exemple, vous avez spécifier un intervalle de 30 secondes entre 2 passage. La durée de traitement est de 1 seconde, le nouveau délai sera donc de 29 secondes Version 3.21 [Modification] #duration# affiche dorénavant la vrai durée et au format Xh Xm Xs (La porte est ouverte depuis 5m 30s) [Nouveauté] Ajout de l'action {"Stop"} et {"Stop", <id>} Version 3.30 [Nouveauté] Ajout de l'options {"Dates", "01/01[/2014]", "31/01[/2014]"} [Nouveauté] Ajout de l'option {"Time", "Sunrise<07:30", "Sunset<22:00 [Nouveauté] Ajout de l'option {"Time", "Sunrise+20", "Sunset-100"} [Nouveauté] Ajout de la variable #durationfull# pour les message (3 heures 5 minutes 30 secondes) [Nouveauté] Les variables de message #time#, #duration#, #date#, ... sont utilisable dans les variables globales, les labels et les emails [Nouveauté] Supporte le format d'heure H:mm [Nouveauté] Ajout des options {"Armed"} et {"Disarmed"} [Nouveauté] Ajout de la condition {"Battery", <id>, <valeur max>} [Correction] Correction du paramètre {"Email", <id user>} [Optimisation]Isolation des commandes en cas d'erreur [Optimisation]Ajout de validations techniques Version 3.40 [Nouveauté] Ajout de la condition {"Batteries", <valeur max>} [Nouveauté] Ajout de la condition {"SceneActivation", <id module>, <id scene>} [Correction] détection activation/désactivation sur module RGB par @HANSOLO Version 3.50 [Nouveauté] Ajout des conditions {"Global+", <variable>, <valeur>} et {"Global+", <variable>, <valeur>} par @HANSOLO [Nouveauté] Ajout des conditions {"setArmed", <id>} et {"setDisarmed", <id>} [Correction] Erreur lorsqu'un module à pile ne retourne pas son information [Correction] Mode debug dans certains circonstance Version 3.51 [Correction] Batteries, la valeur n'était pas prise en compte et fixée à 80 [Correction] #durationfull# amélioration en utilisant le "et" (exemple : 1 heure et 30 minutes, 23 minutes et 30 secondes, 1 heure 20 minutes et 30 secondes,...) Version 3.60 [Nouveauté] Ajout de la condition {"Slider-", <id_vd>, <nom_slider>, <valeur>} [Nouveauté] Ajout de la condition {"Slider+", <id_vd>, <nom_slider>, <valeur>} [Nouveauté] Ajout de la condition {"Label", <id_vd>, <nom_label>, <contenu>} Version 3.61 [Correction] Les options Label et Slider introduit dans la v1.70 ne fonctionnaient pas correctementVersion 3.62 [Amélioration] Etat des capteurs (mouvement, porte, inondation) par @Shyrka973 [Amélioration] Coloration des logs pour plus de lisibilité (inspiré du Maestro @Krikroff) Version 3.65 [Amélioration] Déportation du code utilisateur en début de script, proposition de @fredo [Nouveauté] Ajout de l' action {"Global", <variable>, "inc+"} pour incrémenter de 1 automatiquement la variable [Nouveauté] Ajout de l' action {"Global", <variable>, "dec-"} pour décrémenter de 1 automatiquement la variable Version 3.70 [Amélioration] RGBW : permettre de spécifier chaque canal indépendamment par @Shyrka973Version 3.75 [Nouveauté] GEA devient multilingue. Par défaut le français est conservé.Version 3.80 [Nouveauté] Possibilité de stopper n'importe quel tâche {"StopTask", <id_task>}. [Nouveauté] Possibilité de redémarrer n'importe quel tâche {"RestartTask", <id_task>}. [Nouveauté] Possibilité de spécifier le nombre d’exécution d'une tâche {"MaxTime", <number>} [ATTENTION] Veuillez créer la variable globale GEA_Tasks Version 3.81 [Correction] {"StopTask", <id_task>}, {"RestartTask", <id_task>} et {"MaxTime", <number>} était issu d'une mauvaise implémentation. [Nouveauté] Add {"Global!", <variable>, <value>} Pour vérifier qu'une variable globale ne soit pas égale à la valeur. [Nouveauté] Ajout de la variable #runs# dans les messages pour savoir le nombre de fois que la tâche a été exécutée. [ATTENTION] Veuillez créer la variable globale GEA_Tasks Version 3.82 [Correction] réparation du {"Repeat"} cassé lors de la 3.81. (thanks jompa68) [Amélioration] Ajout du code de Shyrka973 affichant l'ID d'un module déclenchant GEA sans pour autant avoir de tâche à effectuer. Version 4.017 [Correction] Mise en phase avec la version du firmware 4.017. (thanks jompa68)Version 4.020 [Adaptation] Mise en phase avec la version du firmware 4.017 et plus. [Nouveauté] Multiple condition pour remplacer les If [Nouveauté] #value[index]#, #name[index]# et #room[index]# indexé par périphérique. Version 4.021 [Correction] Impossible d'éteindre un dimmer.Version 4.10 [Correction] Déclenchement instantané : prise en compte de Global!, Global+ et Global-. [Nouveauté] {"Weather", "rain"} permet de savoir s'il pleux [Nouveauté - condition] {"Property", <id_module>, <nom propriété>, <valeur>} Permet de savoir si la propriété <nom propriété> du module <id module> est égala à <valeur> [Nouveauté - condition] {"Property!", <id_module>, <nom propriété>, <valeur>} Permet de savoir si la propriété <nom propriété> du module <id module> est égala à <valeur> [Nouveauté - action] {"CurrentIcon", <id_module>, <id_icon>} Permet modiifier l'icone d'un module virtuel [Nouveauté - action] {"CopyGlobal", <ivar_source>, <var_dest>} Permet copy la variable global <var source> dans <var dest> [Nouveauté] Utilisation des regex pour Value, Property, Weather, Global, et Label ainsi que leur déclinaison. Version 5.00 [Correction] Message indiquant les piles faibles {Batteries} [Correction] #value[?]#, #room[?]# sont maintenant corrigé [Correction] Allumage et extinction des module RGB [Correction] {"Global", "", ""} ne fonctionne plus en 4.x et est maintenant transformer en "true" à la volée [Ajout] l'option {"NotStarted"} empêche une tache de démarrer automatiquement (c.f. RestartTask pour la démarrer) [Ajout] {"Email", <id utilisateur>[, <sujet>]} Le sujet du message peut maintenant être personnalisé. Attention, pour obtenir l'icone en 128x128, veuillez préalablement cliquer dessus avant de l'enregistrer. GEA._5_00.lua
  15. Il m'est arrivé une fois un deux de me retrouver loin de chez moi (c'est toujours àce moment làque ça arrive) avec un box internet allumée mais plantée... Il aurait suffit de la débrancher et de la retrancher mais ... j'étais po là! Ce qu'il vous faut : 1/ Un NAS ou un serveur qui peut executer un PHP 2/ une prise (Fibaro wallplug ou Everspring An157 ...) qui gèrera l'alimentation de la box internet. Comment ça fonctionne : 1/ On teste la connexion vers l'extérieur en essayant de joindre google (la boxe peut sembler fonctionner wifi, switch et DHCP OK, mais plus d'accès vers l'extérieur) 2/ Si google ne répond pas on en déduit que la box est plantée. 3/ on éteint 5 secondes puis on rallume. Voici le script php àmettre sur votre NAS qui va faire ça àvotre place. Vous l'appellerez par le planificateur de tâche (Cron) avec une commande du type : "php -f /volume1/domotique/testinternet.php > /volume1/domotique/LogsTestinternet.txt" (qui sera exécutée toutes les 2 heures par exemple). $i=0; // initialisation du compteur pour la boucle du test d'accès au site google.fr $echec=0; // initialisation du nombre de tentatives infruscteuses //Je teste 6 fois le site google.fr avec 30 secondes entre chaque test (Donc si injoignable pendant 3 minutes je reboote) while($i<6) { $fp = fsockopen('www.google.fr', 80); //Ouvre un socket if(!$fp) { $echec++; } sleep(30); $i++; } //Si le test est négatif 3 fois de suite je relance la freebox. if($echec==6) { echo date('d / m / Y H:i:s').' Attention : le site de google.fr n\'a pas répondu '.$echec.' fois de suite !'; // $zibase->execScript("lm [Relancer Freebox]"); $fp = fsockopen('http://Login:MotDePass@AdresseIpLocaleHC2/api/callAction?deviceID=76&name=pressButton&arg1=1'); } else { echo date('d / m / Y H:i:s'). ' Le site de google.fr a bien répondu.'; fclose($fp); //ferme le socket ouvert } ?> Le bouton de mon module virtuel contient ceci : fibaro:call(75, "turnOff");fibaro:sleep(3000)fibaro:call(75, "turnOn"); Ma prise An157 àl'ID 75. Voilàqui peut vous permettre de continuer vos vacances sereinement loin de chez vous avec une box toujours joignable. En espérant que ça vous soit utile.
  16. Récurrence Scène

    Bonsoir à tous, Voici mon bout de code qui me permet de lancer le réveil le matin. Si je lance manuellement cette scène (je me suis levé plus tôt), elle va donc tournée 2 fois à l'heure dite. J'ai rajouté la condition "fibaro:countScenes" ....... Est-elle au bon endroit ?? depuis cette modif, la scène ne se lance plus toute seul. Merci de votre coup d'oeil --[[ %% autostart %% properties %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do if fibaro:countScenes() > 1 then -- si la scène est lancée plus d'une fois alors fibaro:abort() -- arrêt de cette lecture du script end -- fin de la condition local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "06:45") ) ) then -- 6h45 : Allumage réveil fibaro:call(71, "turnOn");
  17. Device Sabnzbd

    Hello, Pour ceux qui utilisent SABnzbd, voilà un petit module virtuel qui pourrait vous être utile. Ca ressemble à ca : Il est dispo ici https://raw.githubusercontent.com/eremid/hc2_sabnzbd/master/SABnzbd.vfib Vous avez aussi l'icone si vous voulez : https://raw.githubusercontent.com/eremid/hc2_sabnzbd/master/sa.png A+
  18. Alerte Si Porte Ouverte

    Salut, Je viens vous proposer un petit scenario pour vous alerter si une porte reste malencontreusement ouverte. Alors bien sur, c'est pas pour la complexité de la scene que je le poste mais encore une fois pour donner des idées. Etant donnée l' engouement pour le scenario qui gère les lumières extérieure en journée, je me dis que tout est bon a poster et que ça peut servir. Alors le voila --[[ %% properties 28 value 26 value %% globals --]] local startSource = fibaro:getSourceTrigger(); local temp_ouverture = 10*60*1000 -- temps exprimé en ms if ( ( tonumber(fibaro:getValue(28, "value")) > 0) ) then fibaro:sleep(temp_ouverture) if ( ( tonumber(fibaro:getValue(28, "value")) > 0) ) then fibaro:call(4, "sendPush", "Porte Entrée Ouverte depuis 10 minutes !"); end end if ( ( tonumber(fibaro:getValue(26, "value")) > 0) ) then fibaro:sleep(temp_ouverture) if ( ( tonumber(fibaro:getValue(26, "value")) > 0) ) then fibaro:call(4, "sendPush", "Porte Terrasse Ouverte depuis 10 minutes !"); end end Alors, oui bien sur, j' aurais certainement pu faire un truc plus joli/propre/optimisé Mais ça fonctionne dans l' état. Je verrais pour les optimisation plus tard. Mes capteurs d' ouverture sont des FIBARO FGK. Voilou, en esperant que ça serve ou donne des idées ++
  19. Gestion Minimote

    Voici un petit tuto pour les fonctionnalité possible avec la minimote. Avant touche chose la scène de base pour faire fonctionner la minimote. Remplacez l'id des lignes 3 et 7 par celui de votre télécommande. --[[ %% properties 156 sceneActivation %% globals --]] local Minimotesalon = fibaro:getValue(156, "sceneActivation"); if (tonumber(Minimotesalon) == 1) then elseif (tonumber(Minimotesalon) == 2) then elseif (tonumber(Minimotesalon) == 3) then elseif (tonumber(Minimotesalon) == 4) then elseif (tonumber(Minimotesalon) == 5) then elseif (tonumber(Minimotesalon) == 6) then elseif (tonumber(Minimotesalon) == 7) then elseif (tonumber(Minimotesalon) == 8) then end Maintenant entrons dans le vif du sujet. Gestion d'une alarme: Il est tout à fait possible d'armer des modules spécifiques pour votre alarme mais le problème si un module est "breached" votre alarme va s'activer. Grâce au code suivant vos modules ne s'armeront pas et vous recevrez une notification push sur les modules breached. Le code a mettre avant celui de la minimote. Remplacez les id des sensors et le nom des pièces ou ils se trouvent et ligne 27 mettez l'id de votre téléphone ou autre. local windowSensor = {14, 47, 32, 124, 111, 114, 115, 116}; local placeSensor = {"salon","Chambre Bleu","Entrée","Chambre de Marion","bureau","Salon","Salon","Garage"}; local startSource = fibaro:getSourceTrigger(); function statutWindows () local statut = "close"; for i=1, #windowSensor do if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then statut = "open"; end end return statut; end function alertWindows () local place = nil; for i=1, #windowSensor do if (tonumber(fibaro:getValue(windowSensor[i], "value")) > 0) then if (place == nil) then place = placeSensor[i]; elseif (place ~= nil) then place = place .. ", " .. placeSensor[i]; end end end fibaro:debug("Fenetre(s) ouverte(s): " .. place); fibaro:call(53, "sendPush", "Fenetre(s) ouverte(s): " .. place); end function armedSensor (value) for i=1, #windowSensor do fibaro:call(windowSensor[i], "setArmed", value); end end Pour la partie minimote remplacez ligne 12 pas l'id de voter téléphone if ( tonumber(ButtonPressed) == 1) then statut = statutWindows(); if (statut == "close") then armedSensor(1); fibaro:debug("button 1 pressed Alarme Activé"); elseif (statut == "open") then alertWindows(); end elseif ( tonumber(ButtonPressed) == 2) then armedSensor(0); fibaro:call(53, "sendPush", "Alarme désactivé)); fibaro:debug("button 2 Pressed Alarme Désactivé"); Gestion des ambiances: Pour commencé voici des exemples possibles. Créez une variable globale prédéfinie avec les valeurs (vous pouvez en ajoutez autant que vous voulez: - Normal - Cinema - Musique - Romantique Vous devez créez deux scènes. Dans la scène de la minimote collez avant le code des boutons: Vous devez réécrire les ambiances avec de la même façon que dans la globale et dans cette exemple je pars sur le principe qu'il s'agit du salon sinon éditez ligne 6. local AmbianceSalon = {"Normal", "Cinema", "Musique", "Romantique"}; function Ambiance (place,global,value) local Global = tostring(fibaro:getGlobalValue(global)); local item = 0; if (place == "Salon" ) then repeat item = item + 1; if (item == 20) then fibaro:killScenes(31); end until Global == AmbianceSalon[item]; finalItem = nextItem(value, item, table.getn(AmbianceSalon)); fibaro:setGlobal(global, AmbianceSalon[finalItem]); end end function nextItem (value, item, size) if (value == "nextone") then item = item + 1; if ( size < item ) then item = 1; end elseif (value == "previous") then item = item - 1; if ( 0 >= item ) then item = size; end end return item; end Pour la partie miimote: pour la fonction Ambiance ligne 2 et 5, la première fonction Salon est la pièce, ensuie SalonAmbiance est la variable global et nextone ou previous est dans le sens ou vous naviguez dans le "menu". Il faut également éditer le numéro de la scène. if (tonumber(Minimotesalon) == 1) then Ambiance("Salon","SalonAmbiance","nextone"); fibaro:startScene(25); elseif (tonumber(Minimotesalon) == 2) then Ambiance("Salon","SalonAmbiance","previous"); fibaro:startScene(25); Ensuite il faut une scène d'ambiance pour le salon. Voici un exemple de ma scène: --[[ %% properties %% globals --]] local startSource = fibaro:getSourceTrigger(); local ambiance = fibaro:getGlobalValue("SalonAmbiance"); local night = fibaro:getGlobalValue("Nightime"); if (startSource["type"] == "other") then if (ambiance == "Normal") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 1) then fibaro:call(89, "turnOff") end if (night == "Off") then fibaro:call(4, "setValue", "99"); end fibaro:call(83, "pressButton", "2") fibaro:call(7, "setValue", "99"); fibaro:call(7, "setValue", "99"); fibaro:call(11, "setValue", "99"); fibaro:call(12, "setValue", "99"); fibaro:call(91, "setColor", "243", "68", "0", "0"); elseif (ambiance == "Cinema") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(4, "setValue", "0"); fibaro:call(83, "pressButton", "1") fibaro:call(7, "setValue", "0"); fibaro:call(7, "setValue", "0"); fibaro:call(11, "setValue", "0"); fibaro:call(12, "setValue", "0"); fibaro:call(91, "setColor", "10", "8", "33", "0"); elseif (ambiance == "Musique") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(83, "pressButton", "3") fibaro:call(7, "setValue", "30"); fibaro:call(7, "setValue", "30"); fibaro:call(11, "setValue", "30"); fibaro:call(12, "setValue", "30"); fibaro:call(91, "setColor", "50", "0", "175", "0"); elseif (ambiance == "Romantique") then if (fibaro:getValue(64, "value") == 0) then fibaro:call(64, "turnOn"); fibaro:sleep(2000); end if (fibaro:getValue(89, "value") == 0) then fibaro:call(89, "turnOn") end fibaro:call(83, "pressButton", "7") fibaro:call(7, "setValue", "0"); fibaro:call(7, "setValue", "0"); fibaro:call(11, "setValue", "0"); fibaro:call(12, "setValue", "0"); fibaro:call(91, "setColor", "255", "0", "108", "0"); end end Gestion des volets, virtuals device (chaîne de radion pour sonos..) Avec ce code vous pouvez mettre vos volets dans 4 position (ouvert,fermé, 50% et 75%). Donc le code toujours à insérez entre le début et le code de la minimote. local idBlind = 4; function Blind (value) if (value == 1) then if (tonumber(fibaro:getValue(idBlind, "value")) == 75) then fibaro:call(idBlind, "setValue", "50"); fibaro:debug("Volet réglé à 50%"); elseif (tonumber(fibaro:getValue(idBlind, "value")) ~= 75) then fibaro:call(idBlind, "setValue", "75"); fibaro:debug("Volet réglé à 75%"); end elseif (value == 2) then if (tonumber(fibaro:getValue(idBlind, "value")) ~= 99) then fibaro:call(idBlind, "open"); fibaro:debug("Volet Ouvert"); elseif (tonumber(fibaro:getValue(idBlind, "value")) == 99) then fibaro:call(idBlind, "close"); fibaro:debug("Volet Close"); end end end Placez ensuite ce code dans votre minimote: elseif (tonumber(Minimotesalon) == 3) then Blind(1) elseif (tonumber(Minimotesalon) == 4) then Blind(2) Désolé si c'est pas très clair mais je suis crevé ce soir. J'éditerais le code lorsque je l'aurais améliorer voir mis sous plugin si la v4 arrive
  20. À partir du code Krikroffs, j'ai fait un disque virtuel de télécharger les données météo actuelles du wunderground.com. La plupart des crédits doit aller à Krikroff P.s Google translate à tous WU_Weather.vfib
  21. Voici un périphérique virtuel qui a pour utilité de détecter et de notifier un utilisateur lorsqu’une nouvelle mise à jour est disponible en téléchargement pour le HC2 de Fibaro. (Publié sur le blog de Pascal le 21-03-2014) Version 1.0.8 - Mise à jour : 13/01/2015 Vous pouvez télécharger la dernière version ici et sur le blog consulter la notice d'installation et d'utilisation bien que tout soit simplifié au maximum Version 1.0.8 - Mise à jour : 13/01/2015 (Pour HC2 >= V4.031) Aucunes configuration nécessaire dorénavant, il faut importer le vd et c'est tout. Compatible API REST de la V4 L'unique paramétrage restant à faire par l'utilisateur est de préciser dans le code (dans le mainloop) l' ID du smartphone et de l' utilisateur pour les notifications. local userID = 2; local smartphoneID = 844; Version 1.0.6 - Mise à jour : 08/09/2014 (Pour HC2 <= V3.600) L'image principale du Virtual Device réapparaît maintenant automatiquement après l'appui sur un bouton Notification de mise à jour disponible sur la home du périphérique virtual. Remise en forme et révision du code Version 1.0.5 - Mise à jour : 04/09/2014 Amélioration: Récupération automatique de la variable en cas de données corrompues (suggéré par Lazer) Mise à jour des traductions Version 1.0.4 - Mise à jour : 03/09/2014 Nouveau: Affichage du numéro de version dans l'interface utilisateur et ajouté à la notification (mail & push) Nouveau: Icône d'un membre du forum domotique-fibaro.fr, merci Lazer Amélioration: Envoyer une notification si une nouvelle mise à jour est détectée et ne pas répéter les envois. Corrections mineures. Version 1.0.2 - Mise à jour : 21/02/2014 Corrections mineures. Version 1.0.1 - Mise à jour : 14/02/2014 Installation automatisée pour faciliter la mise en place des variables globales et du paramétrage de l’application. Possibilité de choisir le type de notification avec un bouton à trois états depuis l’interface graphique: Email, Push ou les deux. Possibilité de choisir le type de mise à jour devant être notifié avec un bouton à trois états depuis l’interface graphique : Bêta, stable ou les deux. Multilingue : Français, Anglais. Téléchargements: UpdateNotifier_1.0.8.zip pour HC2 en V4.xxx
  22. Bonjour, Aujourd'hui je partage avec vous une scène simple qui permet nous réveiller le matin. Pour cela nous allons utiliser notre serveur PAW et sa synthèse vocale Si vous ne l'avez pas encore installé et configuré c'est par ici Créez une nouvelle scène puis insérez le code suivant en modifions a votre convenance. Comme d'habitude j’essaye de commenter le code au maximum, si vous avez des questions n’hésitez pas --[[ %% autostart %% properties %% globals --]] -- SETTINGS local HReveil = "06:30"; -- heure du réveille local IdSv = XX -- remplacez XX par ID_de_votre_VD_synthèse_vocale; local sourceTrigger = fibaro:getSourceTrigger(); if (sourceTrigger["type"] == "autostart") then while true do local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); -- currentDate.wday == 1 correspond a Dimanche -- currentDate.wday == 2 correspond a Lundi -- etc... -- currentDate.wday == 7 correspond a Samedi -- ici j'ai programmé le réveil de lundi au vendredi -- modifier a votre convenance if ( ( ((currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == HReveil ) ) ) then -- volume sonore du smartphone fibaro:setGlobal("vol", "10") -- message vocal à envoyer au smartphone fibaro:setGlobal("speech", "Bonjour, il est " .. string.format("%02d", currentDate.hour) .. " heure " .. string.format("%02d", currentDate.min) .. " il faut se réveiller") -- activation du périphérique virtuel et bouton ad hoc fibaro:call(IdSv, "pressButton", "1"); end fibaro:sleep(60*1000); end else local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); if ( startSource["type"] == "other" ) then -- volume sonore du smartphone fibaro:setGlobal("vol", "10") -- message vocal à envoyer au smartphone fibaro:setGlobal("speech", "Bonjour, il est " .. string.format("%02d", currentDate.hour) .. " heure " .. string.format("%02d", currentDate.min) .. " il faut se réveiller") -- activation du périphérique virtuel et bouton ad hoc fibaro:call(IdSv, "pressButton", "1"); end end
  23. Le script de BenjyNet m'a donné un idée pour des rubans leds que j'ai chez moi au niveau de la télé, l'idée est de démarrer les leds quand il fait nuit et quand la télé marche donc tire du jus sur le wallplug ou elle est branchée. J'ai fais le script suivant: --[[ %% autostart %% properties %% globals --]] -- Allumage led fonction conso wallplug v 1.0.0 [03-2014] -- Copyright © 2014 lolomail local sourceTrigger = fibaro:getSourceTrigger(); local current_conso = 0; if ( (sourceTrigger["type"] == "autostart") and ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" ) ) then while true do local current_conso = tonumber(fibaro:getValue(66, "valueSensor")); fibaro:debug("Conso wallplug " ..current_conso); if current_conso > 80 then fibaro:debug(os.date() .. " - Télé allumée"); fibaro:debug(os.date() .. " - LEDs allumées"); if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then fibaro:call(132, "turnOn"); end if ( tonumber(fibaro:getValue(133, "value")) < 1 ) then fibaro:call(133, "turnOn"); end end if current_conso < 80 then fibaro:debug(os.date() .. " - Télévision éteinte"); fibaro:debug(os.date() .. " - LEDs éteintes"); if ( tonumber(fibaro:getValue(132, "value")) > 1 ) then fibaro:call(132, "turnOff"); end if ( tonumber(fibaro:getValue(133, "value")) > 1 ) then fibaro:call(133, "turnOff"); end fibaro:sleep(10*1000) end end end Il me démarre nickel les rubans quand la conso de la télé passe au delà de 80w mais quand j'éteins, il n'éteint pas les rubans. J'ai fais une coquille? Merci Laurent
  24. Salut a tous, Je pense que ça a du au moins vous arriver une fois dans votre vie d'allumer par mégarde une lampe extérieure sans vous en rendre compte et la laisser allumée. J' ai donc fait un petit script rapide qui permet de detecter quand une lampe extérieure est allumée en journée et l'éteindre automatiquement après 20 secondes. voici donc le script : --[[ %% properties 29 value 34 value 33 value %% globals sunsetHour --]] local startSource = fibaro:getSourceTrigger(); if (fibaro:getGlobal("sunsetHour") == "0") then if (fibaro:getValue(29, "value") > "0") or (fibaro:getValue(33, "value") > "0") or (fibaro:getValue(34, "value") > "0") then fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction."); fibaro:sleep(20*1000) fibaro:call(29, "turnOff") fibaro:call(33, "turnOff") fibaro:call(34, "turnOff") end end Dans ce script les IDs 29, 33 et 34 sont les IDs de mes lampes extérieures. Il faudra donc les modifier par les votres. Egalement j' ai 3 lampes ext, si vous avez plus ou moins, il faudra adapter le code en enlevant ou ajoutant des lignes. Et j'utilise comme element de verification une variable Globale "sunsetHour" pour savoir si nous sommes en journée ou de nuit. Voila c'est tout bête, mais ça dépanne.
  25. Bon voila, y a quelque temps j'ai mis en un virtual device dont le but est de me permettre de voir en un coup d'oeil divers point de la maison. Par exemple quel volet est ouvert, l'état d'une variable qui est changée via des scripts (ex video armer....). On peut imaginer bcp de chose: état alarme, état volet, état contacteur porte, état chauffage, état éclairage... Pour cela faire un virtual device avec autant de label que d'etat à reporter. Dans la main loop mettre les codes qu'il faut pour chaque état en se basant sur: Pour un volet: -- Controle volet if ( tonumber(fibaro:getValue(ID_module, "value")) == 0 ) then fibaro:call(ID_Virtualdevice, "setProperty", "ui.labelX.value", "Texte à afficher dans le VD quand le volet est fermé"); end if ( tonumber(fibaro:getValue(ID_module, "value")) > 0 ) then fibaro:call(ID_Virtualdevice, "setProperty", "ui.labelX.value", "Texte à afficher dans le VD quand le volet est ouvert"); end Il faut changer: - ID_Module par le numéro de votre module - ID_Virtualdevice par le numéro de notre virtual device - ui.labelX.value par la désignation de votre label Pour une variable: -- Controle jour/nuit if ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) then fibaro:call(ID_Virtualdevice, "setProperty", "ui.labelX.value", "Texte à afficher dans le VD quand la variable = nuit"); end if ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" ) then fibaro:call(ID_Virtualdevice, "setProperty", "ui.labelX.value", "Texte à afficher dans le VD quand la variable = jour"); end - Jour_Nuit par le non de votre variable à controler - ID_Virtualdevice par le numéro de notre virtual device - ui.labelX.value par la désignation de votre label Penser à ajouter avant le dernier "end" un petit: fibaro:sleep(60*1000)
×