Aller au contenu

Rechercher dans la communauté

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



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

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Jabber


Skype


Ville :


Intéret :


Version

16 résultats trouvés

  1. maestrea

    Vd Thermostat Virtuel Pid

    Salut, Je vous presente une VD avec un thermostat virtuel. Caractéristiques: - Modes: Auto, Manuel, Off - Panneaux de température en mode automatique - Thermostat virtuel multiple - Soutien aux différents switchs - Plusieurs capteurs de température - Capteur virtuel de la température - PID Des liens: http://www.domoticadomestica.com/termostatos-inteligentes-control-pid/ http://www.domoticadomestica.com/foro/index.php?topic=1155.0 Merci.
  2. Suite à l'installation d'une tablette avec imperihome, je souhaitai mettre en place une solution simple pour gérer notre chauffage,j'ai vu pas mal de Tuto mais il concernait pas directement la HCL. L'objectif, gérer trois modes de chauffage tout en conservant le panneau de chauffage: - Normal, gestion par le planning du panneau - Vacance, - Forcé pendant une durée prédéfinie de 2h Pour le mode vacance j'utilise le champs du panneau de chauffage, mais également pour le mode forcé car je n'ai pas réussi à gérer la génération d'une valeur de timestamp demandé sans passer par une source extérieure. Finalement, j'ai contourné le problème avec une scène qui repasse en mode normal au bout des 2 heures. Fonctionnement: Un panneau de chauffage, dans mon cas il se nomme Sejour et porte l'ID26 Une variable avec 3 valeurs (NOR,VAC,FOR) Un module virtuel pour mettre à jours le panneau de chauffage: Mode normal: PUT /api/panels/heating HTTP/1.10x0D0x0AHost:192.168.1.10 0x0D0x0AAuthorization: Basic YWRtaW46NXXXXXXXXXX 0x0D0x0A0x0D0x0A {"id":26,"name":"Sejour","properties":{"handTemperature":0,"handTimestamp":0,"vacationTemperature":0}} Mode vacance: PUT /api/panels/heating HTTP/1.10x0D0x0AHost:192.168.1.10 0x0D0x0AAuthorization: Basic YWRtaXXXXXXXXXXXXX 0x0D0x0A0x0D0x0A {"id":26,"name":"Sejour","properties":{"handTemperature":0,"handTimestamp":0,"vacationTemperature":10}} Mode forcé: PUT /api/panels/heating HTTP/1.10x0D0x0AHost:192.168.1.10 0x0D0x0AAuthorization: Basic YWRtXXXXXXXXXXXX 0x0D0x0A0x0D0x0A {"id":26,"name":"Sejour","properties":{"handTemperature":0,"handTimestamp":0,"vacationTemperature":23}} Au final je ne fais varier que la valeur vacationTemperature et à ce stade cela fonctionne déjà très bien dans le module virtuel mais je n'ai pas de temporisation pour le mode forcé. Pour cela j'ai un module virtuel (Mode chauffage) qui exécute trois scènes, une pour chaque mode, qui déclenche le module (MAJ chauffage) et met à jours la variable: Exemple de déclenchement: GET /api/sceneControl?id=XX&action=start HTTP/1.10x0D0x0AHost:192.168.1.10 0x0D0x0AAuthorization: Basic YWRtaWXXXXXXXXXX= 0x0D0x0A0x0D0x0A Scène normal: Scène Vacance: Scène Forcé: Au bout de 2 heures, je repasse en mode normal avec le VD mode chauffage pour que ce dernier reprenne l’icône du mode normal. Optionnel: Dans les scènes Normal et Vacance, je fait appel à un bouton Bstop01 qui correspond au bouton Stop Timer du module virtuel MAJ chauffage. Cela me permet de stopper la scène du mode forcé, et d'éviter d'avoir une scène qui tourne pendant X temps pour rien. Le code pour stopper la scène: GET /api/sceneControl?id=XX&action=start HTTP/1.10x0D0x0AHost:192.168.1.10 0x0D0x0AAuthorization: Basic YWRXXXXXXXX 0x0D0x0A0x0D0x0A La variable n'est pas exploité directement, mais est prévu dans le futur, pour vérifier si le chauffage n'est pas déjà éteint avant d'envoyer des notifications à madame quand elle ouvre les fenêtres Pour l'écriture des requêtes HTTP dans le module virtuel, n'hésitez pas à lire le tuto :http://www.domotique-fibaro.fr/index.php/topic/2675-requ%C3%AAtes-http-get-sur-hcl/
  3. Installation du Secure SCS317 et SSR303 Présentation : Le SCS317 est un thermostat programmable Z-Wave avec un design plutôt esthétique comparé à son prédécesseur le SRT321 (anciennement HRT4). Niveau fonctionnalité, le SCS317 se diffère du SRT321 par son programmateur horaire intégré permettant de programmer jusqu’à 6 périodes de chauffage par jour pendant une semaine. Il est doté d’un écran rétroéclairé et fonctionne avec 2 piles AA (autonomie annoncée : 2 ans) Le SCS317 est couplé avec l’actionneur SSR303 Les 2 modules communique sans fil sur la fréquence 868,42 Mhz avec une portée de 30 mètres en champ libre. Le SSR303 doit être branché sur le 220V et il est possible de le commander directement avec les boutons ON / OFF. La fonction programmation est assez poussée puisqu'elle nous permet de programmer par jour 6 plages horaires. Les plages horaires sont entièrement paramétrables via les boutons " + " et " - " du SCS317. Mais il est possible d’intervenir directement sur la température de consigne. Un autre avantage pour ce thermostat est qu’il dispose d’un algorithme proportionnel-intégral en fonction du temps c’est-à -dire qu’il offre un contrôle précis de la température et il est capable d’anticiper les temps de chauffe pour atteindre la prochaine température de consigne. Son seul point négatif est sa précision de température de consigne. Il incrémente au degré près. Impossible de lui demander une température de consigne à 21,5°C. Mais il est possible de le contourner en envoyant la température de consigne depuis la HC2. Conclusion : Ce SCS317 constitue donc un excellent thermostat parfaitement utilisable de manière autonome ( en dehors d’un réseau Z-Wave). Mais comme vous le savez, le but n’est pas de la piloter en local mais à partir de la Home Center 2. Voyons ci-dessous la procédure à suivre pour l’inclure dans le HC2. Ce kit est disponible chez notre partenaire DOMADOO à l'adresse suivante : http://www.domadoo.fr/produit,3694,1,SECURE--Pack-thermostat-%C3%A9lectronique-programmable-r%C3%A9cepteur-Z-Wave-(SCS317-+-SSR303).htm ****************************************************************************************************** Mise en service du SSR303 : Dans cet exemple, je vais m'appuyer sur une chaudière au gaz qui pilote un circulateur indépendant. 3 cas se présentent : Brancher le SSR303 sur le circulateur externe. Je n'ai pas retenu cette solution car elle me semble dangereuse pour la chaudière. Celle-ci risque de prendre un coup de chaud si l'eau ne circule pas dans le corps de chauffe. Brancher le SSR303 sur la carte de la chaudière qui coupera à la fois la chaudière et le circulateur. Cette option est valable uniquement si votre chaudière pilote votre circulateur. Dans mon cas, elle ne le pilote pas mais se charge juste de lui fournir du 220V. On pourra y remédier en ajoutant un relais tempo que nous verrons plus tard... Brancher le SSR303 sur la carte de la chaudière et laisser le circulateur tourner continuellement. C'est ce dernier cas qui sera retenu dans ce tutoriel. Schéma de principe : Alimentation réseau 220V Raccorder votre chaudière à votre tableau électrique en respectant la notice d'installation de votrz chaudière Alimentation circulateur Brancher votre circulateur sur la carte électronique (comme ci dessus) en veillant à ne pas inverser la phase et le neutre. Sur la majorité des cartes électronique, le branchement du circulateur est repéré par un triangle dans un rond. Sur ma chaudière, la borne 4 correspond à la phase et la borne 5 au neutre. Pour le savoir, munissez vous d'un multimètre et mesurez le Voltage entre les bornes [1;4] puis les bornes [1;5]. Si vous obtenez 230V sur l'une des 2, alors c'est que vous avez trouvé le neutre car la borne 1 correspond à la phase du tableau électrique. Dans ce cas précis, le Neutre est la borne 5 car le mutlimètre affichait 230V entre les bornes [1;5]. Sous le SSR303, il y a 2 vis à desserrer pour l'ouvrir et accéder à la platine murale : Ci-dessous un zoom sur la platine et ses connexions. On s’aperçoit qu'il s'agit bien d'un contact sec entre la borne 2 et 3. A partir du tableau électrique, alimenter la borne N avec le Neutre et la Borne L avec la Phase. Sur la carte électronique de la chaudière, brancher la borne 6 du TA à la borne 2 du SSR303 ainsi que la borne 7 du TA à la borne 4 du SSR303 comme indiqué ci-dessous : 1ère étape terminée !! Il vous reste à fixer la platine murale où bon vous semble perso je l'ai fixé sur la chaudière directement. ****************************************************************************************************** Notice d'installation : SSR303 Notice d'installation.pdf
  4. Voici ce que j'ai fait pour gérer le chauffage de ma maison. Remarques : "un tuto de plus sur le sujet", "c'est pas la saison", ... Le besoin : Ne pas chauffer la maison inutilement lorsque je suis en vacances Lorsque je reviens de vacances avoir une maison à bonne température Gérer différents modes de chauffage quand je suis présent en fonction de la saison Que cela se fasse avec un minimum d'effort (je suis fainéant …) Les outils : Création des panneaux de chauffage en fonction de vos besoins (que vous pourrez backuper et copier avec l'outils dans la signature) Utilisation de l'outil de pinou pour définir les périodes de vacances et de retour de vacance. Création d'une variable prédéfinie "Vacances" : "Oui"/"Non" Création d'une variable prédéfinie "Chauffage" : "0"/"1"/"2" Importation du VD Avec GEA ou un scène faire appuyer sur le bouton "Update" du VD lors d'une modification d'une des 2 variables. Perso comme je mets à jour mes variables avec des VD, ils appuient également sur le bouton. Fonctionnement : Variable "Vacances" : pas besoins d'expliquer … Variable "Chauffage" : j'ai créé 3 modes de chauffage "0" : le chauffage est arrêté (sauf l'Eau Chaude Sanitaire) "1" : le chauffage ne fonctionne que dans les Salle de Bain (entre saison) "2" : le chauffage fonctionne dans toute la maison Si vous souhaitez plus de modes de chauffage, libre à vous d'adapter la variable et le code du VD Lorsque "Vacances" passe à "Oui", tous les panneaux de chauffage passent en manuel à la température (tmpOff) définie dans les paramètres du VD Lorsque "Vacances" passe à "Non", les panneaux de chauffage repassent en mode automatique, en fonction du mode de chauffage Lorsque le mode de chauffage (= variable "Chauffage") est modifié, adaptation automatique des panneaux de chauffages qui sont en manuel ou en auto Paramétrage du VD : varChauffage et varVacances : nom des variables créées Table hpID : nom et iD des panneaux de chauffage Tables hp0 / hp1 / hp2 : nom des panneaux de chauffage qui doivent fonctionner en auto en fonction du mode de chauffage 0 / 1 / 2 tmpOff : température manuelle HP_Update_v1.0.vfib P.S. : il y a des optimisations à faire dans le code, je l'ai fait en vitesse avant de partir cet hiver en vacances, puis comme ça fonctionnait, je n'ai rien changé … Je joins également quelques icônes pour illustrer le mode vacances et les modes de chauffage.
  5. J'ai fait de très nombreux tests sur le panneau de chauffage, en combinaison avec des vannes Danfoss et des panneaux liés. Je vais ici résumer ce qu'il est possible (et n'est pas possible) de faire. Ceci fonctionne sur HCL & HC2 V3.600 Scénario Habitation avec : 1 circulateur pour l'étage (pièce Chaufferie, Section Sous-Sol) 1 circulateur pour le RdC (pièce Chaufferie, Section Sous-Sol) 1 chaudière classique (pièce Chaufferie, Section Sous-Sol) A l'étage, imaginons : 1 salle de bains (SeB) avec 2 radiateurs (pièce SdB, Section Etage) 1 bureau avec 1 radiateur (pièce Bureau, Section Etage) 1 salle de jeux (SdJ) avec 1 radiateur (pièce SdJ, Section Etage) Matériel 1 FGS-221 (relais 2x1,5kW) pour piloter le circulateur étage (O1) et le circulateur RdC (O2) 1 FGS-221 (relais 2x1,5kW) pour piloter la chaudière (O1), l'autre sortie (O2) étant disponible 2 vannes Danfoss LC-13 pour les radiateurs de la SdB 1 vanne Danfoss LC-13 pour le radiateur Bureau 1 FGMS-001 (Oeuil Fibaro) pour mesurer la température dans la SdJ Configuration des pièces Chaque device est associé à la pièce où il se trouve Vannes Danfoss Chaque vanne est associée à la pièce où elle se trouve. Elle reçoit sa consigne depuis celle qui est entrée dans le panneau de chauffage (voir plus bas), et puis elle "fait sa vie". N.B. les vannes ne sont pas capables de remonter à la box la température actuelle, ni leur % d'ouverture, ni même si elles sont en demande ou pas. Circulateurs Pour que les radiateurs chauffent, il faut que les circulateurs tournent. Ici on va se baser sur la température de la SdJ (fournie par le FGMS), où il n'y a pas de vanne Danfoss. Pourquoi ? Car si chaque pièce de l'étage peut commander le circulateur, il risque d'y avoir des ordres contradictoires : une pièce est en demande (=> circ_étage = ON) et l'autre est à la bonne température (=> circ_étage = OFF). Dans la réalité, votre circulateur ne va faire que des ON / OFF. On crée un panneau lié (de type chauffage) par circulateur : Lheat_CircEtage (sonde tmp : le FGMS de la SdJ et la controled device : le Circ_Etage) Lheat_Circ_RdC Ces panneaux liés sont évidemment associés aux pièces où se trouve la sonde de tmp Scènes chaudière Si les circulateurs fonctionnent, il faut évidemment que la chaudière puisse tourner. Scène Chaudière_On : SI circ_étage = ON OU cir_RdC = ON ALORS chaudière = TurnOn Scène Chaudière_Off : SI cir_étage = OFF ET cir_RdC = OFF ALORS chaudière = TurnOff Panneaux de chauffage On crée un panneau de chauffage par pièce En cliquant sur le crayon à côté du nom du panneau de chauffage correspondant, on peut lui assigner 1 ou plusieurs pièces Le panneau de chauffage va envoyer ses consignes à toutes devices connectées à la (aux) pièce(s) sélectionnée(s) La pièce qui contrôle le circulateur ne devrait théoriquement jamais atteindre sa température, car il faut que le circulateur tourne tout le temps que les autres picces sont en demande de chauffage. Ceci ne couvre évidemment pas tous les cas de figure, vous devrez évidemment continuer de faire preuve d'imagination (sinon ce ne serait pas drôle). Mon prochain objectif est de créer une variable définissant le type de chauffage désiré (aucun, SdB, toute la maison) et de modifier automatiquement les panneaux de chauffage en fonction. Mais là , ce ne sera plus compatible avec l'HCL. J'ai déjà ma petite idée, dès que j'ai le courage, je m'y met et vous en fait part.
  6. Voici un tuto qui vous permettra de donner un peu plus de flexibilité et de paramétrage pour votre chaudière sur la partie sanitaire. En règle normal une bonne vielle chaudière fonctionne sur le type On/Off, avec souvent pas de possibilité d’intégrer des plages horaires, ou son fonctionnement est réalisé à l’aide d’un thermostat réglable pour la mise en chauffe de l’eau sanitaire. Grace à la box HC2 et 2 modules Fibaro vous pourrez enfin donner une seconde vie à votre chaudière: Réglage des températures eau sanitaire en paramétrant des températures mini et maxi (hystérésis). Coups de chauffes sur demande si besoin Arrêt de celle-ci si l’on part en vacances, avec la possibilité de la remettre dans son mode normal avant notre retour de vacances … En plus le module virtuel proposée vous apportera une vision globale de vos températures de chauffe-eau sanitaire, mais aussi la température de l’échangeur ou plus particulièrement du foyer de chauffe et cela en temps réel. · En premier : Il vous faudra un peu de confiance en vous, et mettre les mains dans le 220V de la chaudière. Il faudra avant de commencer bien repérer les câbles et connecteur de la chaudière afin de réaliser si besoin un retour en arrière. J’ai testé avec Madame la problématique de l’absence de l’eau chaude, et bien elle n’est pas faite pour ! Blague mis à part, le repérage est important car si l’on doit intervenir plus tard mais vraiment plus tard, c’est mieux que de passer ½ journée à tout retrouver … · En deuxième : Il faut comme matériel deux modules Fibaro : - Un module universel FGBS-001 (récupération des températures) et deux sondes 18B20 (10 pièces étanches pour moins de 15 euros sur eBay, Amazon) Concernant ce module il peut recevoir jusqu’à 4 sondes, nous en aurons besoin que de deux à vous de savoir où vous voulez mettre les deux autres pour prendre la température. - Un module FGS-221 Switch 2x1.5kW (permettra de commander la mise en chauffe et la gestion du circulateur eau sanitaire). · En troisième : Il faut repérer le thermostat réglable de la chaudière. Il y a si tout va bien connecter sur celui-ci deux fils (arrivé du 220V – et la sortie qui est commandée par la sonde elle-même plongée dans le cÅ“ur de votre ballon d’eau chaude) en un mot il s’agit d’un interrupteur commandée par la sonde de chauffe, si l’eau est chaude on coupe, si elle est froide on allume. Le tout est réglé par un bouton rotatif de façade qui permet de choisir la température de coupure. Rappel : La norme électrique impose que la phase (rouge ou autre) soit coupée dans un contacteur, jamais le neutre qui lui est obligatoirement bleu. Normalement votre chaudière est câblée de la sorte, donc dans le thermostat il ne devrait y avoir que la phase de coupée. Il est important de profiter de cette action pour valider à l’aide d’un tournevis testeur s’il s’agit bien de la phase. Pour valider, chaudière allumé, mais pas en marche de chauffe vous devez avoir sur l’une des cosses du thermostat le 220V qui arrive et donc en posant le tournevis testeur le petit voyant doit s’allumer. L’autre cosse sera alimentée lorsque la chauffe sera demandée par la baisse de température, ou en tournant la valeur tmp du thermostat à la hausse. Ici l’idée finale sera de shunter ce thermostat électromécanique et de laisser cette tache au module FGS-221. Voilà pour la partie texte. Présentation globale de l’installation: Chaudière et PC vont faire bon ménage !!! Installation du module FGS-221 Switch 2x1.5kW : La cosse 01 est mon arrivée phase 220V, si l’on prend un testeur multimètre, en testant la cosse 1 et le neutre de l’arrivé 220v de la chaudière on a du 220v au multimètre. Si l’on réalise cette action sur l’autre cosse, il ne doit pas y avoir du 220 v sauf si la chaudière est en cours de chauffe sanitaire. Mettre de coté ce second fil (cosse 2), il devra être connecté directement au module FGS-221. Vu d’ensemble : Installation du FGS-221 Switch 2x1.5kW, dans l’ordre de gauche à droite : - fil bleu (neutre) - Fil rouge 1 (phase) alimentation du module FGS-221 (220 volts à prendre directement sur la chaudière connecteur Wago). - Fil suivant rouge 2 (phase) pour l’alimentation des relais du module FGS-221 à prendre aussi directement sur le connecteur Wago. - Fil rouge 3 (phase) retour vers le câble de la chaudière qui se trouvait sur le thermostat en cosse 2 (celui qui est en fonctionnement uniquement si la chaudière est en cours de chauffe de l’eau sanitaire. La phase est installée sur une cosse de domino, elle-même connectée au FGS-221 Switch (IDxxx01). - Fil rouge 4 (phase), celui-ci sert a alimenter le circulateur sanitaire qui sera lui aussi connecté au FGS-221 Switch (IDxxx02). On utilisera uniquement la phase du circulateur sanitaire (ici fils marron). Pour bien voir l’ensemble: Et pour les températures, installation du module FGBS-001 avec ces sondes : J’ai installé un coffret électrique dans le salon, caché des regards, à l’intérieur on peut installer plusieurs petits modules afin de regrouper ceux-ci. La connexion des sondes DS18B20 a été réalisée en rallongent les fils avec du câble réseau, Il me reste donc de la place dans ce câble si je veux étendre mon installation domotique vers la cave. Les sondes sont couplées au module FGBS-001 une est installée à la place de la sonde sanitaire Sonde N°01 à l’intérieur du ballon d’eau chaude, et l’autre dans l’échangeur sonde N°02 (foyer de chauffe) de la chaudière … Mon réseau 12v à découpage : Pour une raison purement pratique j’ai aussi instalé un gros transformateur à découpage dans mon sous sol, le câblage en 12v est réalisé dans l’ensemble de la maison, de ce fait je peux utiliser pour les alimentations des modules Fibaro 12v. Mais aussi très pratique pour les éclairages led ou ruban led, et autre alimentations demandant du 12v bien régulé. Et qui sait un jour je serais branché sur une batterie à décharge lente avec un petit panneau solaire ! Rapidement je vais dupliquer ce transformateur (redondance de l’alimentation) car si il n’y a plus de 12v, le module FGBS-001 sera coupé donc plus de sonde, donc plus d’eau chaude et plus de lumière LED dans beaucoup de pièces … Coté code : J’ai travaillé principalement sur la base de variable globale plus facile à metre en place pour un autre utillisateur, pour faire fonctionner directement l’application. J’ai aussi sorti les IDs de mes modules Fibaro afin aussi de simplifier encore une fois la mise en place. - Le mode normal fonctionne suivant deux plages horaires possibles matin et soir. On peut régler aussi hystérésis afin de ne pas solliciter la chaudière à tout va. Il y a aussi un paramétrage possible dans le début du code si l’on veut avoir systématiquement une mise en chauffe lorsque l’on rentre dans la plage horaire de chauffe (local OnChauffeHoraire = "no" -- yes or no). - Un mode coup de chauffe, si l’on rentre en dehors de la plage de fonctionnement et que l’eau sanitaire est un peu froide ce coup de chauffe sera bien utile. Noté que lorsque la consigne de température est atteinte, le système repasse en mode normal est reprend son état dans lequel il se trouvait initialement. - Un mode Off x minutes, j’ai créé ce mode car il peut servir pour plusieurs choses. Initialement je trouvais dommage que lorsque tout le monde avait pris sa douche, que ma chaudière poursuivre sa chauffe si elle se trouvait dans la plage horaire et dans sa phase montante de chauffe. D’ou ce mode « Off x minutes » pendant une durée déterminée (180 minutes chez moi). Se mode est pas mal aussi si l’on a des enfants qui restent un peu trop longtemps sous la douche !!! Noté que lorsque le timer et terminé, le système repasse en mode normal est reprend son état dans lequel il se trouvait initialement. - Un mode vacances. Et bien on coupe tout, à glagla. Remarque : quelque soit le mode dans lequel on se trouve, le switch de chauffe sanitaire FGS-221 Switch (IDxxx01) se coupe lorsque la température de consigne maxi et atteinte. Par contre pour des raisons optimisations, je laisse tourner le circulateur sanitaire FGS-221 Switch (IDxxx02) jusqu'à se que la température soit à l’équilibre entre l’échangeur (foyer de chauffe) et la température de mon eau chaude. Donc je récupère un maximum de calorie, je ne perds rien.- Le mode « Saison » (été ou hiver) me permets de gérer le paramètre ci-dessus, en effet, en été je peux me permettre de vider l’échangeur (foyer de chauffe) de ces calories. Par contre en hiver c’est problématique, car j’ai besoin des calories de l’échangeur pour mon chauffage central !!! - Et pour finir, un mode de températures prédéfinies entre les températures de consignes maxi et consignes mini. Voila à quoi ressemble le nodule virtuel : Variables globales à créer et a alimenter : Variables prédéfinies : ModeSanitaire (Normal, CoupChauffe, OffXmin, Vacances) PhaseUpOrDown (PhaseDown, PhaseUp) ValeurTmpSaniBas (36,40,45) ValeurTmpSaniHaut (50,53,55) Et pour les icônes voilou: Comme promis... Le câblage: --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Je me suis éclaté a réaliser ce premier travail, aussi bien cérébrale que manuel, une grande histoire d’amour renaît avec ma chaudière. Et c’est avec plaisir que je partage. Bruno Module virtuel: Chaudière.vfib
  7. Voici un petit tuto sans prétention qui permet de gérer le chauffage (avec une chaudière au gaz). Merci à ceux qui m'ont aidé et particulièrement à Lazer et Steven. J'ai créé un module virtuel avec 4 boutons : Normal : 20,5°C de 6h30 à 8h00 / 18,5°C 8h00 à 15h30 / 20,5°C de 15h30 à 00h00 / 18,5°C de 00h00 à 6h30 Invité : 20,5°C de 6h30 à 00h00 et 18,5°C la nuit Vacances : 10°C tout le temps Retour : remise en chauffe à 20,5°C Bouton "Normal" Ce bouton modifie "reprogramme" le panneau de chauffage (20,5°C de 6h30 à 8h00 / 18,5°C 8h00 à 15h30 / 20,5°C de 15h30 à 00h00 / 18,5°C de 00h00 à 6h30) par le json et dans un second temps demande tout de suite une température de 20,5°C ou 18,5°c en fonction de l'heure (ça permet de se remettre en mode normal n'importe quand). Pour info : J'ai obtenu le contenu du json en réglant mon panneau de chauffage en validant puis en ouvrant le lien http://adresseIPdevotreHC2/api/panels/heating?id=5 (id=5 est l'id de mon panneau de chauffage). Puis copier/coller HC2 = Net.FHttp("192.168.0.47",80) HC2:setBasicAuthentication("admin", "votreMotDePasse") local strefa = 5 local NouveauPanel = ('{"id":5,"name":"Général","properties":{"monday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":18.5},"evening":{"hour":15,"minute":30,"temperature":20.5},"night":{"hour":0,"minute":0,"temperature":18.5}},"tuesday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":18.5},"evening":{"hour":15,"minute":30,"temperature":20.5},"night":{"hour":0,"minute":0,"temperature":18.5}},"wednesday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":0},"evening":{"hour":15,"minute":30,"temperature":0},"night":{"hour":0,"minute":0,"temperature":18.5}},"thursday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":18.5},"evening":{"hour":15,"minute":30,"temperature":20.5},"night":{"hour":0,"minute":0,"temperature":18.5}},"friday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":18.5},"evening":{"hour":15,"minute":30,"temperature":20.5},"night":{"hour":0,"minute":0,"temperature":18.5}},"saturday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":0},"evening":{"hour":15,"minute":30,"temperature":0},"night":{"hour":0,"minute":0,"temperature":18.5}},"sunday":{"morning":{"hour":6,"minute":30,"temperature":20.5},"day":{"hour":8,"minute":0,"temperature":0},"evening":{"hour":15,"minute":30,"temperature":0},"night":{"hour":0,"minute":0,"temperature":18.5}},"handTemperature":0,"handTimestamp":1396385930,"vacationTemperature":0,"rooms":[1]},"created":1396359399,"modified":1396359399}') json = json.encode(NouveauPanel); HC2:PUT("/api/panels/heating?id="..strefa, NouveauPanel) --Attention !!! Il semblerait qu'en V4.021 la commande HC2:PUT ait changé : --la ligne devra être remplacée par -> --HC2:PUT("/api/panels/heating/"..strefa, NouveauPanel) fibaro:call(73, "setProperty", "ui.Label1.value", "Normal"); --reglage de la T° de consigne en focntion de l'heure local currentDate = os.date("*t"); local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min); if currentTime < "23:59" and currentTime > "06:30" then fibaro:call(100, "setTargetLevel", 20.5) else fibaro:call(100, "setTargetLevel", 18.5) end Bouton "Invité" Reprogramme tableau de chauffage (20,5°C de 6h30 à 00h00 et 18,5°C la nuit) par le json puis dans un second temps on demande tout de suite une température de 20,5°C ou 18,5°c en fonction de l'heure (ça permet de passer en mode "invité" n'importe quand). Rappel : J'ai obtenu le contenu du json en réglant mon panneau de chauffage en validant puis en ouvrant le lien http://adresseIPdevotreHC2/api/panels/heating?id=5 (id=5 est l'id de mon panneau de chauffage). Puis copier/coller Bouton "Vacances" Passe en mode vacances avec une température de consigne à 10°C --passe le panel en mode voyage HC2 = Net.FHttp("192.168.0.47",80) HC2:setBasicAuthentication("admin", "votreMotDePasse") local strefa = 5 response ,status, errorCode = HC2:GET("/api/panels/heating?id="..strefa) jsonTable = json.decode(response) --je passe en mode vacances avec 10°C jsonTable.properties.vacationTemperature =10; json = json.encode(jsonTable); HC2:PUT("/api/panels/heating?id="..strefa, json) fibaro:call(73, "setProperty", "ui.Label1.value", "Voyage"); Bouton "Retour" Passe en mode normal (CF bouton normal) et demande tout de suite 20,5°C sans tenir compte de l'heure. Même code lua que le mode "Normal" avec une modification à partir de la ligne 13 par les lignes qui suivent : --je force la température de consigne à 20,5°C tout de suite ! --le panneau de chauffage reprendra la main au prochain événement fibaro:call(100, "setTargetLevel", tempJour); Voilà J'utilise un autre module virtuel qui gère les différents modes de la maison et qui utilise ces 4 boutons pour gérer le chauffage. Dernière astuce : J'ai une petite scène que je déclenche avant d'aller me coucher. Elle vérifie l'état de mes portes (et me prévient par un message sur le karotz si l'une d'elles est ouverte), elle éteint les lumières, et elle passe le chauffage à 18,5°C avec fibaro:call(100, "setTargetLevel", 18.5) même si il n'est pas encore 00h00...
  8. Steven

    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
  9. La gestion du chauffage sur la HC2 nécessite au minimum : Une sonde de température Des plages horaires et température souhaitées Un ou plusieurs modules déclencheurs pour activer/désactiver l'appareil de chauffe. Malheureusement, pas tout le monde est équipé de sonde de température et dans ce cas là , il est impossible de chauffer son habitat à travers sa HC2. Pour remédier à ce soucis, il est possible d'utiliser un module virtuel qui va piloter vos déclencheurs selon une autre source de température* tout en tenant compte de vos souhaits en terme de températures/pages horaires. Vous pouvez aussi utiliser ce module pour utiliser comme référence une moyenne de vos sondes ou tout autre calcul. Exemple, je pilote ma chaudière en fonction de la température intérieur ET extérieur. Une seul condition à l'usage de ce module ... vous allez devoir programmer vous même la fonction qui va renvoyer la température que vous souhaiter exploiter. Mais la bonne nouvelle est que vous êtes sur un site communautaire et qu'il y a plein de personne pour vous aider si besoin. * sonde Orégon connecté à une box RFXCom, une sonde renvoyant du json comme la Netatmo. Voici la démarche à suivre : 1) Règler votre panneau de chauffage selon vosdésires (notez son ID) : 2) Importer le module virtuel "Chauffage_-_Salon.vfib 3) Modifier les premières lignes de codes qui sont dans le bouton rafraîchir Heating.hysteresis = 0.7 --- +/- de chauffage Heating.holidays = 8 -- température souhaitée du mode vacances Heating.stefa = 1 -- id du panneau de chauffage Heating.admin = "admin" Heating.password = "admin" -- Retourne la température courante Heating.getActualTemp = function() -- Ici vous pouvez mettre votre code qui doit renvoyer un nombre -- correspondant à la température en cours -- Dans mon cas, je reprend la valeur contenu dans le slider "tempSalon" du module 43 return tonumber(fibaro:getValue(43, "ui.tempSalon.value"))/10 end Heating.switch = function(choice) -- Choice est soit "turnOn", soit "turnOff" -- cela permet d'activer/désactiver plusieurs modules en même temps ou de faire -- divers traitement que le système allume/éteint les modules fibaro:call(33, choice) --fibaro:call(34, choice) --fibaro:call(35, choice) end ... L’hystérésis est utilisée pour temporiser l'allumage/extinction du système. Exemple, j'ai défini 21° dans le panneau de chauffage pour le mardi matin. Le système va prendre 21°, soustraire l’hystérésis (0.7°) et va donc ce mettre en chauffe à 20.3°. De même dans l'autre sens, ou il va attendre qu'il fasse 21° + 0.7° pour s'éteindre soit 21.7°. Cela permet d'éviter que le système s'active à 20.9 et se désactive à 21. Ce qui peut être très dérangeant pour un poêle à pellet comme le mien. 4) Variable globale : Il faut créer un variable globale "Chauffage" qui peux prendre les valeurs : ON, OFF et VACANCES 5) Scénario qui temporise tous cela : Créer un scénario qui "appuie" sur le bouton "Rafraichir" toutes les X minutes (5 minutes dans mon cas). Usage : Etat : Indique [Température actuel] / [Température souhaitée] [[hystérésis]] (correction appliquée) Rafraichir : rafraichi manuellement les calculs Automatic : met le système en mode automatique (allumé) Eteindre : stoppe le système jusqu'au prochain appuie sur "Automatic" Vacances : Bascule en mode vacances (Utilise Heating.holidays comme température souhaitée) -1, -0.5, +0.5, +1 : Permet d'ajouter une "correction" de température souhaitée. Cette correction est annulée dès le prochain changement de mode. Exemple mardi matin, je ne souhaite plus 21° mais 22°. J'appuie donc sur +1. Quand le panneau de chauffage m'indiquera que nous somme en "mardi après-midi" la correction de +1 sera automatiquement annulée. Cela correspond au mode Jour ou Nuit temp. Correction : indique la différence de correction souhaitée Mode : indique le mode en cours En Chauffe : indique si le système est en chauffe (actif) ou non En gras sont les éléments nécessaires au module pour fonctionner, si tu les enlèves, il va planter. En prime, dans le code, il y a une méthode Heating.keepOn = function(). Je l'utilise pour ralentir le chauffage de mon poêle lorsque la température souhaitée est presque atteinte. Je l'ai mise en commentaire mais tu peux l'utiliser. Dans me cas, cela donne de 20.3° à 20.7° .. On chauffe à fond de 20.8° à 21.7° .. On chauffe en douceur en ralentissant la chauffe à 21.8° on coupe tout Conclusion. Voici un module virtuel qui accepte comme température de référence n'importe quoi : la température d'un module z-wave un code json (Netamo) ... et qui va piloter vos modules selon les températures indiquées dans votre panneau de chauffage. Ce module est testé chez moi depuis plus d'un mois avec succès sur un poêle à pellet qui, par définition, est bien plus pénible que des radiateurs P.S. Joint les icônes que j'utilise pour l'affichage. Chauffage_-_Salon.vfib
  10. Bonjour à tous, En préambule, merci à Krikroff, Steven, JossAlf car j'ai piqué des morceaux de code chez eux pour créer mon module virtuel. Mais aussi à Jojo qui fait évoluer aussi le VD en permanence V1 (PITP2) => Création du Virtual Device ... V2 (Jojo) => Ajout de la date et l'heure de fin du programme, ajout de boutons pour modifier la durée (jours , mois , année), nettoyage du code et ajout de controles. V2.1 (Jojo) => optimisation du code : il n'est plus répété 13 fois ! compatible v3.x et v4.x V2.2 (Jojo) => optimisation des tests dans la main loop, le script est plus performant instructions sur les 3 premières lignes du main loop V2.3 (jojo) => affichage des minutes dans le temps restant de chauffe V3 (PITP2) => Gestion de plusieurs panneaux avec le même VD Encore un module pour gérer son Chauffage nous direz vous ... La gestion du panneau de chauffage est uniquement accessible depuis le navigateur ... je trouve cela dommage car il n'est pas possible depuis l'application Smartphone ou tablette de modifier pour une zone complète la consigne manuelle de température pour une durée déterminée. Ce module Virtuel permet donc de réaliser les mêmes actions de modification temporaire de consigne de température que dans le panneau de chauffage mais sur vos Droids et Ibidules :-) Ainsi on ne crée pas une surcouche à la gestion du chauffage déjà bien compliquée dans nos installations mais on inclue une interface de pilotage. Pas de variable globale à créer pas de mot de passe admin à changer (hein Steven ;-) ) .... Procédure d'installation / config Importer le fichier .vib (compatible V3 et V4) Chauffage.v3.vfib Indiquer les Id des panneaux de Chauffage dans le champ "IP Adresse" du Virtual Device séparés par un espace ligne 7 du code du main loop, mettre l'ID de l'icône à afficher créer une variable globale GETvirtualDevices Aucun autre paramétrage n'est nécessaire. Fonctionnement du device Le nom du panneau de chauffage sur lequel vous influez s'affiche automatiquement en haut à droite (récupération du nom indiqué lors de sa création) L'état de la commande manuelle actuelle du panneau de chauffage est affichée après "Prog manuel" (il se met à jour toutes les 5 minutes en cas de modification depuis le panneau de l'interface de votre navigateur) La Ligne "Fin Prog Manuel" indique la date et l'heure de fin du programme Température Bouton : Aut => Arrête la commande manuelle du panneau de chauffage (retour à la programmation normale déterminée dans le panneau) -1 => Retire 1 degré à la consigne de température 18 et 20 => modifie la consigne de température à 18 ou 20 .. pendant 1 heure. Si on appuie une nouvelle fois sur le meme bouton la durée s'incrémente d'1 heure +1 => Ajoute 1 degré à la consigne de température Durée -1 => Retire 1 heure à la durée de modification de consigne de température +5 => Ajoute 5 heures à la durée de modification de consigne de température +1 => Ajoute 1 heure à la durée de modification de consigne de température Fonctionnement identique pour les autres boutons Jours , Mois , Années Si vous avez plusieurs panneaux vous n'avez qu'à créer autant de Virtual Device que de panneaux C'est tout ! L'icone utilisée prise dans les galeries (auteur Moicphil) Ps : le code peut surement etre simplifié alors si les pros du code peuvent me donner des pistes pour améliorer le code je me ferai un plaisir de le modifier Chauffage.vfib Chauffage.(3.600)v2.0.vfib Chauffage.(4.x)v2.0.vfib Chauffage.v2.2.vfib
  11. Bonjour, Suite à mes précédentes expériences que j'ai déjà partagées sur le forum officiel Fibaro, j'ai revu mes modules virtuels pour la gestion du chauffage. Evidemment ce serait tellement mieux de pouvoir utiliser le panneau de chauffage du HC2 mais ce n'est pas possible avec la gestion de notre fil pilote, et je ne suis pas pour le ON/OFF pur et dur du radiateur qui risquerait d'endommager la partie électronique. La solution présentée ici est également possible sans avoir une sonde de température dans chaque pièce chauffée. Le premier module virtuel est un thermostat programmeur de zone. C'est à dire qu'il permet de piloter l'ensemble des radiateurs qui vont suivre ses consignes. Le programmateur de zone permet: - de définir les modes des radiateurs de la zone en: Confort, Eco, Hors-gel, Arrêt. - de définir 2 programmes différents suivants les horaires de la journée - de définir un mode automatique, qui définit les modes voulus suivant les jours de la semaine. Le second module virtuel permet de piloter les radiateurs grâce au FGBS-221 et sa gestion des 4 ordres du fil pilote (avec les bonnes diodes de redressement): Le module de pilotage de radiateur permet de: - piloter directement le radiateur avec les modes Confort, Eco, Hors-gel, Arrêt indépendamment des consignes données par le programmateur de zone - suivre les consignes données par le programmateur de zone - mettre le radiateur à l'arrêt dès qu'une fenêtre ou porte est ouverte. Une vérification est faite 5 min après l'ouverture, si la fenêtre est toujours ouverte on attend de nouveau 5min. Sinon, on remet le chauffage à son état initial. Voilà une synthèse du fonctionnement: Voici comment mettre tout cela en oeuvre: Module programmateur de zone: Tout d'abord, il faut créer les variables globales prédéfinie avec les valeurs suivantes: z1_heat_engine = Auto, Prog1, Prog2, Confort, Eco, Hors-gel, Arret --> ça, c'est ce que le programmateur demande z1_heat_mode = Confort, Eco, Hors-gel, Arret -->ça, c'est les valeurs que devront suivre chacun des radiateurs qui suivront le programmateur. Vous remarquerez dans les variables globales et dans l'ensemble des codes suivants le "z1". Cela correspond en fait à une zone N°1. Si vous souhaiter faire une deuxième zone, il vous faudra faire du remplacer "z1" par "z2" dans l'ensemble des parties des codes et recréer d'autres variables globales, ça devrait fonctionner. Ensuite, il faut créer un module virtuel avec les boutons suivants, attention à bien reporter votre N° de module virtuel dans les boutons et veiller à la cohérence des ID des boutons et le code lua de chaque bouton: Les labels: Bouton auto: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Auto"); fibaro:debug("Mode Auto"); fibaro:log("Mode Auto"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Auto"); Bouton Prog1: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Prog1"); fibaro:debug("Mode Prog1"); fibaro:log("Mode Prog1"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Prog1"); Bouton Prog2: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Prog2"); fibaro:debug("Mode Prog2"); fibaro:log("Mode Prog2"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Prog2"); Bouton Confort: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Confort"); fibaro:setGlobal("z1_heat_mode", "Confort"); fibaro:debug("Mode Confort"); fibaro:log("Mode Confort"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Confort"); Bouton Eco: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Eco"); fibaro:setGlobal("z1_heat_mode", "Eco"); fibaro:debug("Mode Eco"); fibaro:log("Mode Eco"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Eco"); Bouton Hors-gel: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Hors-gel"); fibaro:setGlobal("z1_heat_mode", "Hors-gel"); fibaro:debug("Mode Hors-gel"); fibaro:log("Mode Hors-gel"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Hors-gel"); Bouton Arret: --[[ %% properties %% globals --]] fibaro:setGlobal("z1_heat_engine", "Arret"); fibaro:setGlobal("z1_heat_mode", "Arret"); fibaro:debug("Mode Arret"); fibaro:log("Mode Arret"); fibaro:call(31, "setProperty", "ui.label_0_0.value", " Arret"); Et enfin copier le main loop suivant, en y indiquant vos paramètres utilisateurs. Pour paramétrer les programmes, il faut choisir les modes que vous souhaitez entre 2 horaires de votre choix. --[[ %% properties %% globals --]] -- LUA - heat Engine V2.0.0 -- -- --variables globales à déclarer: z1_heat_engine = Auto, Prog1, Prog2, Confort, Eco, Hors-gel, Arret. --variables globales à déclarer: z1_heat_mode = Confort, Eco, Hors-gel, Arret. ------------------------------------------------------------------------------------------------------------- -- USER SETTINGS : -- ------------------------------------------------------------------------------------------------------------- --------------------- -- Paramètres généraux: --------------------- local debug = true; --activer le mode debug local ID_virtual_module = "31"; ----------------------------------- -- Definir les différents programmes: ----------------------------------- local z1_time_1 = "06:00"; local z1_heat_mode_1_2_prog1 = "Confort"; local z1_heat_mode_1_2_prog2 = "Eco"; local z1_time_2 = "08:00"; local z1_heat_mode_2_3_prog1 = "Eco"; local z1_heat_mode_2_3_prog2 = "Confort"; local z1_time_3 = "13:00"; local z1_heat_mode_3_4_prog1 = "Eco"; local z1_heat_mode_3_4_prog2 = "Confort"; local z1_time_4 = "18:00"; local z1_heat_mode_4_5_prog1 = "Confort"; local z1_heat_mode_4_5_prog2 = "Confort"; local z1_time_5 = "21:00"; local z1_heat_mode_5_6_prog1 = "Eco"; local z1_heat_mode_5_6_prog2 = "Eco"; local z1_time_6 = "23:59"; local z1_heat_mode_6_1_prog1 = "Eco"; local z1_heat_mode_6_1_prog2 = "Eco"; ----------------------------------------------------------------------------------------- --Définition du programme automatique de la semaine: un mode au choix pour chaque jour (Prog1, Prog2, Confort, Eco, Hors-gel, Arret): ----------------------------------------------------------------------------------------- local z1_Monday_auto = "Prog1"; local z1_Tuesday_auto = "Prog1"; local z1_Wednesday_auto = "Prog1"; local z1_Thursday_auto = "Prog1"; local z1_Friday_auto = "Prog1"; local z1_Saturday_auto = "Prog2"; local z1_Sunday_auto = "Prog2"; ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- heatEngine = { version = "1.0.0" }; local z1_heat_engine = fibaro:getGlobal("z1_heat_engine"); local minute = 60000 --in milliseconds local currentDate = os.date("*t"); local currentTime = string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min); local z1_heat_mode = fibaro:getGlobal("z1_heat_mode"); --wday=1 is Sunday --wday=2 is Monday --wday=3 is Tuesday --wday=4 is Wednesday --wday=5 is Thursday --wday=6 is Friday --wday=7 is Saturday if (z1_heat_engine == "Confort") then z1_heat_mode= "Confort"; end if (z1_heat_engine == "Eco") then z1_heat_mode= "Eco"; end if (z1_heat_engine == "Hors-gel") then z1_heat_mode= "Hors-gel"; end if (z1_heat_engine == "Arret") then z1_heat_mode= "Arret"; end if (z1_heat_engine == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_heat_engine == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end if (z1_heat_engine == "Auto") then if (currentDate.wday == 1 ) then if z1_Sunday_auto == "Confort" or z1_Sunday_auto == "Eco" or z1_Sunday_auto == "Hors-gel" or z1_Sunday_auto == "Arret" then z1_heat_mode = z1_Sunday_auto; end if (z1_Sunday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Sunday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 2 ) then if z1_Monday_auto == "Confort" or z1_Monday_auto == "Eco" or z1_Monday_auto == "Hors-gel" or z1_Monday_auto == "Arret" then z1_heat_mode = z1_Monday_auto; end if (z1_Monday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Monday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 3 ) then if z1_Tuesday_auto == "Confort" or z1_Tuesday_auto == "Eco" or z1_Tuesday_auto == "Hors-gel" or z1_Tuesday_auto == "Arret" then z1_heat_mode = z1_Tuesday_auto; end if (z1_Tuesday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Tuesday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 4 ) then if z1_Wednesday_auto == "Confort" or z1_Wednesday_auto == "Eco" or z1_Wednesday_auto == "Hors-gel" or z1_Wednesday_auto == "Arret" then z1_heat_mode = z1_Wednesday_auto; end if (z1_Wednesday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Wednesday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 5 ) then if z1_Thursday_auto == "Confort" or z1_Thursday_auto == "Eco" or z1_Thursday_auto == "Hors-gel" or z1_Thursday_auto == "Arret" then z1_heat_mode = z1_Thursday_auto; end if (z1_Thursday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Thursday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 6 ) then if z1_Friday_auto == "Confort" or z1_Friday_auto == "Eco" or z1_Friday_auto == "Hors-gel" or z1_Friday_auto == "Arret" then z1_heat_mode = z1_Friday_auto; end if (z1_Friday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Friday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end if (currentDate.wday == 7 ) then if z1_Saturday_auto == "Confort" or z1_Saturday_auto == "Eco" or z1_Saturday_auto == "Hors-gel" or z1_Saturday_auto == "Arret" then z1_heat_mode = z1_Saturday_auto; end if (z1_Saturday_auto == "Prog1") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog1; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog1; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog1; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog1; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog1; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog1; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog1; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog1; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog1; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog1; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog1; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog1; end end end if (z1_Saturday_auto == "Prog2") then if z1_time_1 <= z1_time_2 then if z1_time_1 <= currentTime and currentTime <= z1_time_2 then z1_heat_mode= z1_heat_mode_1_2_prog2; end else if not (z1_time_2 < currentTime and currentTime < z1_time_1) then z1_heat_mode= z1_heat_mode_1_2_prog2; end end if z1_time_2 <= z1_time_3 then if z1_time_2 <= currentTime and currentTime <= z1_time_3 then z1_heat_mode= z1_heat_mode_2_3_prog2; end else if not (z1_time_3 < currentTime and currentTime < z1_time_2) then z1_heat_mode= z1_heat_mode_2_3_prog2; end end if z1_time_3 <= z1_time_4 then if z1_time_3 <= currentTime and currentTime <= z1_time_4 then z1_heat_mode= z1_heat_mode_3_4_prog2; end else if not (z1_time_4 < currentTime and currentTime < z1_time_3) then z1_heat_mode= z1_heat_mode_3_4_prog2; end end if z1_time_4 <= z1_time_5 then if z1_time_4 <= currentTime and currentTime <= z1_time_5 then z1_heat_mode= z1_heat_mode_4_5_prog2; end else if not (z1_time_5 < currentTime and currentTime < z1_time_4) then z1_heat_mode= z1_heat_mode_4_5_prog2; end end if z1_time_5 <= z1_time_6 then if z1_time_5 <= currentTime and currentTime <= z1_time_6 then z1_heat_mode= z1_heat_mode_5_6_prog2; end else if not (z1_time_6 < currentTime and currentTime < z1_time_5) then z1_heat_mode= z1_heat_mode_5_6_prog2; end end if z1_time_6 <= z1_time_1 then if z1_time_6 <= currentTime and currentTime <= z1_time_1 then z1_heat_mode= z1_heat_mode_6_1_prog2; end else if not (z1_time_1 < currentTime and currentTime < z1_time_6) then z1_heat_mode= z1_heat_mode_6_1_prog2; end end end end end fibaro:sleep(1000); fibaro:setGlobal("z1_heat_mode", z1_heat_mode); if (debug) then local mode = "init"; if (currentDate.wday == 1 ) then mode = z1_Sunday_auto; end if (currentDate.wday == 2 ) then mode = z1_Monday_auto; end if (currentDate.wday == 3 ) then mode = z1_Tuesday_auto; end if (currentDate.wday == 4 ) then mode = z1_Wednesday_auto; end if (currentDate.wday == 5 ) then mode = z1_Thursday_auto; end if (currentDate.wday == 6 ) then mode = z1_Friday_auto; end if (currentDate.wday == 7 ) then mode = z1_Saturday_auto; end if (z1_heat_engine == "Auto") then fibaro:debug("Le mode du thermostat est réglé sur: " ..z1_heat_engine.." . Le mode auto est réglé sur "..mode); end if (z1_heat_engine ~= "Auto") then fibaro:debug("Le mode du thermostat est réglé sur:" ..z1_heat_engine); end fibaro:debug("Le mode de chauffage est: " ..z1_heat_mode); fibaro:call(ID_virtual_module, "setProperty", "ui.Label3.value", z1_heat_mode) fibaro:sleep(15000) end Mise en oeuvre du module virtuel pour le radiateur: Tout d'abord, il faut créer deux variables globales prédéfinies avec les valeurs suivantes: rad_ch_1_mode = Auto, Manuel rad_ch_1_status = Confort, Eco, Hors-gel, Arret Ensuite, il faut créer un module virtuel avec les boutons suivants, attention à bien reporter votre N° de module virtuel dans les boutons et veiller à la cohérence des ID des boutons et le code lua de chaque bouton: Le label: Bouton Auto: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies local status_auto = fibaro:getGlobal("z1_heat_mode"); fibaro:setGlobal("rad_ch_1_mode", "Auto"); fibaro:setGlobal("rad_ch_1_status", status_auto); --affichage des logs et debug fibaro:debug("Mode Auto"); fibaro:log("Mode Auto"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Auto -> " ..status_auto); Bouton Confort: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Confort"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Confort"); fibaro:log("Mode Confort"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Confort"); Bouton Eco: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Eco"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Eco"); fibaro:log("Mode Eco"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Eco"); Bouton Hors-gel: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Hors-gel"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Hors-gel"); fibaro:log("Mode Hors-gel"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Hors-gel"); Bouton Arret: --[[ %% properties %% globals --]] --mise à jour des variables prédéfinies fibaro:setGlobal("rad_ch_1_status", "Arret"); fibaro:setGlobal("rad_ch_1_mode", "Manuel"); --affichage des logs et debug fibaro:debug("Mode Arret"); fibaro:log("Mode Arret"); --mise à jour de l'affichage du module virtuel fibaro:call(40, "setProperty", "ui.label_0_0.value", "Manuel -> Arret"); Et enfin copier le main loop suivant, en y indiquant vos paramètres utilisateurs. --[[ %% properties %% globals --]] -- LUA - heat Radiator V2.0.0 -- -- ------------------------------------------------------------------------------------------------------------- -- USER SETTINGS : -- ------------------------------------------------------------------------------------------------------------- --------------------- -- General settings: --------------------- local debug = true; --activater le debug mode local radiator_mode = "rad_ch_1_mode" -- variable globale à déclarer avec les valeurs Auto et Manuel local radiator_status = "rad_ch_1_status" -- variable globale à déclarer avec les valeurs Confort, Eco, Hors-gel et Arret local ID_virtual_module = "40" --------------------- -- Relay FGBS-221 settings: --------------------- local ID_relay_1 = 200; -- diode - connectée sur O1 local ID_relay_2 = 201; -- diode + connectée sur O2 ----------------------------------------------------------------------------------------- --Window sensor: Stopper le radiateur quand une fenêtre qui y est associée est ouverture ----------------------------------------------------------------------------------------- local active_mode_sensor = true; --ou false --activater ou désactiver le mode. True = stopper le chauffage quand la fenêtre est ouverte local ID_window_sensor = {10}; --ID device du capteur d'ouverture associé au radiateur (il peut y en avoir plusieurs) ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- -- -- DO NOT EDIT THE CODE BELOW (except to suit your needs) -- -- ------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------- local mode = fibaro:getGlobal(radiator_mode); local status = fibaro:getGlobal(radiator_status); local status_auto = fibaro:getGlobal("z1_heat_mode"); local id; local window_status = 0; local temp; if active_mode_sensor then for i=1, #ID_window_sensor do id = tonumber(ID_window_sensor[i]); temp = fibaro:getValue(id, "value"); fibaro:debug(id.. " et " ..temp); if temp == "1" then window_status = 1; end end end if debug then fibaro:debug(window_status.. "Etat actuel = "..mode.. " --> " ..status); if active_mode_sensor then if window_status == 1 then fibaro:debug("Une fenêtre est ouverte"); end if window_status == 0 then fibaro:debug("Les fenêtres associées au radiateur sont fermées"); end end end if window_status == 1 then if debug then fibaro:debug("Une des fenêtres associées au radiateur est ouverte, le radiateur est à l'arrêt"); end fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", "Fenêtre ouverte, Arrêt"); fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); -- temporisation de 5 minutes, ensuite le script check de nouveau et remet l'état de chauffage précédent si la fenêtre est fermée fibaro:sleep(300000); if mode == "Auto" then status = status_auto; end if status == "Confort" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Confort" ); end if status == "Eco" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Eco" ); end if status == "Hors-gel" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Hors-gel" ); end if status == "Arret" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Arret" ); end end if mode == "Auto" then fibaro:setGlobal("rad_ch_1_status", status_auto); if status == "Confort" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Confort" ); end if status == "Eco" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Eco" ); end if status == "Hors-gel" then fibaro:call(ID_relay_1, 'turnOn'); fibaro:call(ID_relay_2, 'turnOff'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Hors-gel" ); end if status == "Arret" then fibaro:call(ID_relay_1, 'turnOff'); fibaro:call(ID_relay_2, 'turnOn'); fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> Arret" ); end end --mise a jour de l'affichage du module virtuel fibaro:call(ID_virtual_module, "setProperty", "ui.label_0_0.value", mode.. " -> " ..status); --temporisation pour ne pas solliciter trop souvent le HC2 fibaro:sleep(3000) ATTENTION: il peut être observé un décalage de quelques secondes entre le mode demandé et le mode en cours, c'est normal cela est dà» aux temps d'attente dans les main loop. Idem, attention également à la tempo dans la partie ouverture de fenêtre qui peut dérouter... Vous pouvez trouver un exemple de câblage du fgs-221 ici: http://domotique-info.fr/...lote-et-fibaro/ Une partie des icônes est disponible ici: http://www.touteladomotique.com/forum/viewtopic.php?f=89&t=11666 Merci à benjynet! J'espère ne pas avoir laissé traîner de bug je suis preneur de tout retour!
  12. L'objectif ici est double : Couper la PAC s'il n'y a pas assez de courant disponible pour alimenter la maison (matériel : Pinces Aeon HEM3 + 1 Fibaro 2*1,5kW FGS-211 (= Auth_PAC)) Réguler ma PAC à partir du panneau de chauffage(matériel : 1 Fibaro 2*1,5 kW FGS-211 (= Thermo_PAC) + 1 Fibaro Universal Sensor FGBS-311 + 1 sonde tmp) Installation de chauffage : La PAC Daà¯kin basse température alimente le chauffage par le sol du rez-de-chaussée (=> grande inertie). En standard, le panneau de commande de la PAC la gère complètement (loi d'eau, sonde de température d'ambiance, programme de fonctionnement de la PAC en fonction de la température ambiante). Pour info, l'eau chaude et les radiateurs de l'étage sont gérés de manière indépendantes par des panneaux solaires et une chaudière au mazout. Mon installation électrique est du 3x220V, c'est pourquoi j'ai pris un Aeon HEM3. En 2x220V (comme dans la majorité des maisons), un Aeon HEM2 est suffisant. Configuration du panneau de commande Daikin : L'objectif ici est de remplacer le thermostat interne de la commande Daikin par une sonde de température externe (Fibaro Universal Sensor). Il faut faire les réglages suivants : Menu Installateur -> Configuration système -> Standard -> Méthode ctrl [A.2.1.7] = Contrôle TA ext Menu Installateur -> Configuration système -> Options -> Type contact princ [A.2.2.3] = Thermo ON/OFF Menu Installateur -> Configuration système -> Options -> Type contact sec[A.2.2.4] = Thermo ON/OFF Connections électriques unité intérieure Daikin : Sur grand bornier X2M, lorsque le contact entre les bornes 1 et 4 est fermé, la PAC se met en route. Auth_PAC le I du module est raccordé sur la borne 1 de l'unité intérieure Daikin. le O1 du module est raccordé sur le I du module Thermo_PAC Thermo_PAC le I du module est raccordé sur le O1 du module Auth_PAC le O1 du module est raccordé sur la brone 4 de l'unité intérieure Daikin Ainsi la PAC ne démarrera que si Auth_PAC et Thermo_PAC sont fermés. Régulation de la température ambiante via le panneau de chauffage : N.B. : le panneau de commande Daikin continue de travailler en fonction de la loi d'eau et de tout le reste, mais il n'affiche plus la température ambiante. On crée d'abord une heating linked device avec le Universal Sensor et sa sonde température La sortie 1 du module Thermo_PAC On l'associe à la pièce désirée On crée un panneau de chauffage et on y associe la pièce Rem : la PAC n'aime pas les démarrages et arrêts trop réguliers. 10 min en chaque changement d'état est recommandé. Pour cela, il faut simplement configurer la sonde de température pour qu'elle remonte la température toutes les 10 min au moins. Coupure de la PAC si pas assez de courant : N.B. je n'ai pas encore installé le matos Aeon reçu aujourd'hui, mais ça DOIT fonctionner. Je positionne les pinces sur chacune des phases de l'alimentation générale de la maison. Chez moi, j'ai du 3x25A, soit du 3x5500 W. Comme ma PAC consomme max 4000W (soit 2000W par phase), dès qu'une des phases utilisée par la PAC a une consommation supérieure à 5500 - 2000 - 500 (= marge de sécurité que je veux garder) = 3000 W, j'ouvre le contact Auth_PAC. Comme ça, même si je suis en demande de chauffage, je ne chauffe pas. Et comme le chauffage par le sol a une grande inertie, un arrêt de 15-30 min n'est pas dramatique. C'est en tout cas beaucoup mieux que d'avoir une coupure générale au niveau du compteur pour surconsommation. Et dès que j'ai une consommation < 2800W; je referme le contact Auth_PAC avec un délais de 10 min, histoire d'éviter des arrêts et démarrage intempestifs de la PAC. Et pour faire joli (et montrer à Madame que le domotique ce n'est pas que pour s'amuser) mon HC2/L lui envoie un mail et /ou un SMS à chaque arrêt de la PAC pour éviter une coupure de courant. Bon amusement
  13. Bonjour à tous, Ce message pour partager avec vous un script qui me permet de gérer simplement la programmation de mon chauffage électrique équipé de fil pilote par zones. Ne possédant actuellement qu'un FGS-221 et pas encore de module Qubino Fil Pilote, je me suis contenté de gérer la programmation pour mes propres besoins de mes 2 zones de chauffage (Séjour et Chambres) en mode ECO ou CONFORT avec gestion de dérogation sur présence en semaine. Pourquoi ce script ? 1) Parce que je ne suis pas fan des scenes en blocs qui génèrent un code pas terrible et nécessite de créer autant de scènes que de zones et de modes. En plus c'est pas super fiable car avant ce script j'ai fait des essais et parfois la bascule ne se faisait pas et comme il n'y avait pas de vérification permanente, il fallait attendre la prochaine plage horaire pour que ça passe... 2) Parce que j'aime bien maitriser/comprendre ce que je fais et faire des choses générique et évolutives 3) Parce que j'aime que tout soit centralisé au niveau d'un seul script pour une fonction bien précise en l'occurence la gestion de mon chauffage Que fait le script ? 1) Toutes les minutes, il va s'exécuter et parcourir toutes les zones définies et toutes les plages horaires définies pour le mode ECO 2) Si il voit qu'une zone doit basculer d'un mode à l'autre, il le fera systématiquement, même si quelqu'un s'amuse à modifier l'état du module à la main En ce qui me concerne ce script est temporaire car j'envisage quand j'aurais les moyens de changer mes radiateurs et d'acheter des Qunbino Fil Pilote pour chaque radiateur mais en attendant il me rend bien service donc peut-être qu'il pourra servir à d'autres. Comment l'utiliser ? Il suffit de se rendre à la fin du script, ligne 107 pour la paramètrage de vos zones comme l'exemple ci-dessous : -- Initialisation des zones -- La syntaxe est simple, il suffit d'ajouter une zone avec -- - l'id du FGS -- - le nom de la zone -- - les X timeSlots ECO de la semaine -- - les X timeSlots ECO du weekend -- Le troisième paramètre optionnel tu timeSlot correspond à une autorisation de dérogation -- Il faudra pour l'autoriser le définir à true et positienner une variable globale nommée "presence" à 1 ou 0 -- Dans mon cas ci-dessous, seul le séjour a une possibilité de dérogation en cas de présence dans l'appartement en journée, dans ce cas, le chauffage restera en CONFORT zones.add(176, "Sejour", {newTimeSlot("23:35", "06:00"), newTimeSlot("08:00", "16:30", true)}, -- semaine {newTimeSlot("23:35", "08:00"), newTimeSlot("12:00", "13:00")}) -- weekend zones.add(178, "Chambres", {newTimeSlot("23:50", "06:15"), newTimeSlot("08:15", "18:30")}, -- semaine {newTimeSlot("23:50", "07:00"), newTimeSlot("9:00", "18:00")}) -- weekend -- Recurence de verification zones.checkEvery = 60 checkZones() Voici le script complet : Chauffage v0.1.lua Il tourne bien depuis quelque temps dans mon cas d'usage. Je n'ai pas encore utiliser la dérogation de présence in situ car je viens de l'implémenter et pas encore eu besoin mais les tests ont fonctionné.
  14. MISE A JOUR (04/04/15) > Module virtuel v1.1 : Affichage de l'état de chaque zone de chauffage en temps réel ou presque (refresh toutes les minutes via la boucle principale) GESTION_CHAUFFAGE v1.1.vfib Bonjour a tous, Après installation de 3 modules QUBINO ZMNHJA2 sans sonde de température (1 module par Zone), ce module virtuel sert à gerer les radiateurs électriques (fil pilote) zone par zone suivant mes horaires et ceux de mon amie en utilisant les fonctions CONFORT, ECO et HORS GEL (pas de sonde donc pas de gestion suivant la température des pièces). Le module comprends 8 boutons : - 1x Bouton "JE PARS" (de la maison) - 1x Bouton "JE RENTRE" (chez moi) - 4x Boutons "BONNE NUIT" (je vais dormir) : il y a 4 boutons différents car mon amie (Cécile) est infirmière avec les horaires qui vont avec (de matin ou d'après midi) dont des scénarios différents en fonction de ses horaires et des miens. - 1x Bouton "DOUCHE" (confort pendant 2H00) - 1x Bouton "VACANCES" (tout en hors-gel) J'ai volontairement détaillé les étapes (qui pourront paraître inutiles pour certains) car ne connaissant rien à la domotique et encore moins celui du language informatique (LUA / GEA), j'aurais aimé trouver çà . ---------------------------------- Un grand Merci à Steven et Pepite (forum support GEA) pour leur aide. Pour ceux que çà intéresse, voici le contenu de ma scène et de mes boutons : (Gestion de 3 zones distinctes très utile quand Monsieur et Madame ont des horaires décalés) PROGRAMATION CHAUFFAGE : (3 zones > Z1 : JOUR / Z2 : NUIT / Z3 : Salle de Bain) 1/ Création d'une variable (non prédéfinie) : "Chauffage" avec la valeur par défaut. 2/ Création d'une variable (non prédéfinie) : "GEA_Tasks" avec la valeur par défaut. 3/ Récupérer le GEA 5.31 ici : https://github.com/sjauquet et y insérer la scène ci-dessous en adaptant les horaires suivant vos besoins. Remplacer les ID 46 (zone 1), 52 (zone 2) et 58 (zone 3) par ceux de vos modules. SCENE GEA : --[[ %% autostart %% properties 46 value 52 value 58 value 24 value 76 value %% globals Chauffage --]] -- [FR] Tableau d'identifiant (facultatif) local id = { --Z1, Z2 & Z3 MV_CHAUFFAGE = 32, Z1 = 46, Z3 = 58, Z2 = 52, } function yourcode() -- ================================================== -- =========================================================================== -- PROGRAMMATION CHAUFFAGE -- -- =========================================================================== -- ------------------------------------------------------------ -- Pour information : -- Confort : valeur = 99 -- Eco : valeur = 30 -- Hors Gel: valeur = 20 -- La dernière personne à partir de la maison appuyera sur le bouton "JE PARS" -- ------------------------------------------------------------ local Jepars = {"Global", "Chauffage", "Je_pars"} local Jerentre = {"Global", "Chauffage", "Je_rentre"} local Bonnenuit1 = {"Global", "Chauffage", "Bonne_nuit_1"} local Bonnenuit2 = {"Global", "Chauffage", "Bonne_nuit_2"} local Bonnenuit3 = {"Global", "Chauffage", "Bonne_nuit_3"} local Bonnenuit4 = {"Global", "Chauffage", "Bonne_nuit_4"} local Douche = {"Global", "Chauffage", "Douche"} local Vacances = {"Global", "Chauffage", "Vacances"} -- ----------------------- -- BOUTON JE PARS -- ----------------------- -- Passage de la zone jour en éco GEA.add({Jepars}, 60, "", {{"Value", 46, 30}, {"Repeat"}}) -- Passage de la zone nuit en éco GEA.add({Jepars}, 60, "", {{"Value", 52, 30}, {"Repeat"}}) -- Passage de la zone salle de bain en éco GEA.add({Jepars}, 60, "", {{"Value", 58, 30}, {"Repeat"}}) -- ----------------------- -- BOUTON JE RENTRE -- ----------------------- -- Passage de la zone jour en confort GEA.add({Jerentre}, 60, "", {{"Value", 46, 99}}, {"Repeat"}) -- Passage de la zone nuit en éco entre 10H00 et 21H29 GEA.add({Jerentre}, 30, "", {{"Time", "10:00", "21:29"}, {"Value", 52, 30}}) -- Passage de la zone nuit en confort entre 21H30 et 09H59 GEA.add({Jerentre}, 30, "", {{"Time", "21:30", "09:59"}, {"Value", 52, 99}}) -- Passage de la zone salle de bain en éco GEA.add({Jerentre}, -1, "", {{"Value", 58, 30}}) -- ----------------------- -- BOUTON BONNE NUIT 1 : Céc & Ol =1 (Cécile & Olivier travaillent le lendemain matin) -- ----------------------- -- Passage de la zone jour en éco, puis en confort à partir de 4H30 GEA.add({Bonnenuit1}, -1, "", {{"Value", 46, 30}}) GEA.add({Bonnenuit1}, 30, "", {{"Time", "04:30", "04:31"}, {"Value", 46, 99}}) -- Passage de la zone nuit en éco entre 10H00 et 21H29 GEA.add({Bonnenuit1}, 30, "", {{"Time", "10:00", "21:29"}, {"Value", 52, 30}}) -- Passage de la zone nuit en confort entre 21H30 et 09H59 GEA.add({Bonnenuit1}, 30, "", {{"Time", "21:30", "09:59"}, {"Value", 52, 99}}) -- Passage de la zone salle de bain en confort à partir de 4H30 GEA.add({Bonnenuit1}, 30, "", {{"Time", "04:30", "04:31"}, {"Value", 58, 99}}) -- ----------------------- -- BOUTON BONNE NUIT 2 : Céc =1 & Ol =0 (Cécile travaille le lendemain matin mais pas Olivier) -- ----------------------- -- Passage de la zone jour en éco, puis en confort à partir de 4H30 GEA.add({Bonnenuit2}, -1, "", {{"Value", 46, 30}}) GEA.add({Bonnenuit2}, 30, "", {{"Time", "04:30", "04:31"}, {"Value", 46, 99}}) -- Passage de la zone nuit en éco entre 10H00 et 21H29 GEA.add({Bonnenuit2}, 30, "", {{"Time", "10:00", "21:29"}, {"Value", 52, 30}}) -- Passage de la zone nuit en confort entre 21H30 et 09H59 GEA.add({Bonnenuit2}, 30, "", {{"Time", "21:30", "09:59"}, {"Value", 52, 99}}) -- Passage de la zone salle de bain en confort de 04H30 à 6H00, puis éco GEA.add({Bonnenuit2}, 30, "", {{"Time", "04:30", "04:31"}, {"Value", 58, 99}}) GEA.add({Bonnenuit2}, 30, "", {{"Time", "06:00", "06:01"}, {"Value", 58, 30}}) -- ----------------------- -- BOUTON BONNE NUIT 3 : Céc =0 & Ol =1 (Olivier travaille le lendemain matin mais pas Cécile) -- ----------------------- -- Passage de la zone jour en éco, puis en confort à partir de 6H00 GEA.add({Bonnenuit3}, -1, "", {{"Value", 46, 30}}) GEA.add({Bonnenuit3}, 30, "", {{"Time", "06:00", "06:01"}, {"Value", 46, 99}}) -- Passage de la zone nuit en éco entre 10H00 et 21H29 GEA.add({Bonnenuit3}, 30, "", {{"Time", "10:00", "21:29"}, {"Value", 52, 30}}) -- Passage de la zone nuit en confort entre 21H30 et 09H59 GEA.add({Bonnenuit3}, 30, "", {{"Time", "21:30", "09:59"}, {"Value", 52, 99}}) -- Passage de la zone salle de bain en confort de 06H00 à 8H00, puis éco GEA.add({Bonnenuit3}, 30, "", {{"Time", "06:00", "06:01"}, {"Value", 58, 99}}) GEA.add({Bonnenuit3}, 30, "", {{"Time", "08:00", "08:01"}, {"Value", 58, 30}}) -- ----------------------- -- BOUTON BONNE NUIT 4 : Céc & Ol =0 (pas de travail demain pour Cécile et Olivier) -- ----------------------- -- Passage de la zone jour en éco, puis en confort à partir de 7H00 GEA.add({Bonnenuit4}, -1, "", {{"Value", 46, 30}}) GEA.add({Bonnenuit4}, 30, "", {{"Time", "07:00", "07:01"}, {"Value", 46, 99}}) -- Passage de la zone nuit en éco entre 10H00 et 21H29 GEA.add({Bonnenuit4}, 30, "", {{"Time", "10:00", "21:29"}, {"Value", 52, 30}}) -- Passage de la zone nuit en confort entre 21H30 et 09H59 GEA.add({Bonnenuit4}, 30, "", {{"Time", "21:30", "09:59"}, {"Value", 52, 99}}) -- Passage de la zone salle de bain en éco GEA.add({Bonnenuit4}, -1, "", {{"Value", 58, 30}}) -- ----------------------- -- BOUTON DOUCHE -- ----------------------- -- Zone jour : pas de changements. -- Zone nuit : pas de changements. -- Passage de la zone salle de bain en confort pendant 2H00 puis retour en eco GEA.add({Douche}, -1, "", {{"Value", 58, 99}}) GEA.add({Douche}, 120*60, "", {{"Value", 58, 30}}) -- ----------------------- -- BOUTON VACANCES -- ----------------------- -- Passage de la zone jour en hors-gel GEA.add({Vacances}, 5*60, "", {{"Value", 46, 20}, {"Repeat"}}) -- Passage de la zone nuit en hors-gel GEA.add({Vacances}, 5*60, "", {{"Value", 52, 20}, {"Repeat"}}) -- Passage de la zone salle de bain en hors-gel GEA.add({Vacances}, 5*60, "", {{"Value", 58, 20}, {"Repeat"}}) -- ================================================== GEA.isVersionFour = true --- On est en version 4.017 Beta ou suppérieur -- [FR] Votre langue : FR (default) -- [EN] Your language : EN GEA.language = "FR"; -- [FR] On vérifie toutes les X secondes (default : 30) -- [EN] Check every X seconds GEA.checkEvery = 30 -- [FR] Liste des portables devant recevoir une notification {70, 71} -- [EN] Smarphones you want to be notified {XX, XX} for more than one GEA.portables = {} -- [FR] Affichage des traces dans la console (default : false) -- [EN] Show trace in the debug window GEA.debug = false --GEA.catchError=false -------------------------------------------------------------------- -- Démarrage du scénario GEA.run() * Afin de personnaliser les icônes de chacun de vos modules, je vous conseille d'aller les chercher dans la bibliothèque de COUILLEROT (vous y trouverez sà»rement votre bonheur !) Zone jour et zone nuit : http://www.domotique-fibaro.fr/index.php/gallery/image/2900-radiateur-2/ Zone salle de bain : http://www.domotique-fibaro.fr/index.php/gallery/image/3206-hg/ ----------------------------------------------------------------- 4/ Créer un MODULE VIRTUEL : GESTION_CHAUFFAGE v1.0.vfib "Télécommande" : Vignettes 1 & 2 : Dans les boutons suivants, l'ID 32 est à changer suivant l'ID de votre module virtuel : Bouton JE PARS & JE RENTRE : Icônes : Bouton BONNE NUIT 1 & BONNE NUIT 2 : Icônes : Bouton BONNE NUIT 3 & BONNE NUIT 4 : Icônes : Bouton DOUCHE & VACANCES : Icônes :
  15. Le matériel: 1x Déshumidificateur Zibro D510 1x Everspring ST814 Temperature / Humidity Detector 1x Wallplug Fibaro La scène en LUA (le code n'est pas optimisé, ce n'est pas un Best Pratictice mais utilisable sans risque ) Le paramétrage: humidityTargetValue : Représente l'humidité relative désirée. Le node 18 est ici le ST814 Le node 35 est le Wall plug Le script est en fonction tous les jours de 11h à 19h --[[ %% autostart %% globals --]] -- Regulating humidity in a room with a dehumidifier. -- Copyright © 2013 Jean-christophe Vermandé fibaro:debug("HC2 start script at " .. os.date()); -- check script instance count in memory if (fibaro:countScenes() > 1) then fibaro:debug("Script already running."); fibaro:abort(); end local sourceTrigger = fibaro:getSourceTrigger(); local hysteresis = 2; local sensorValueCorrection = -8; local humidityTargetValue = 60; local _dtLastIgnition; function deviceControl(targetValue) local humidityValue = tonumber(fibaro:getValue(18, "value")) + sensorValueCorrection; local deviceState = tonumber(fibaro:getValue(35, "value")); --fibaro:debug("device state: " .. deviceState .. " relative humidity: " .. humidityValue); if (humidityValue > targetValue) then -- TURN ON if (deviceState==0) then fibaro:call(35, "turnOn"); fibaro:debug("Date of the last ignition is " .. (_dtLastIgnition or "unknown.")); _dtLastIgnition = os.date(); fibaro:debug(_dtLastIgnition .. " - device state: " .. deviceState .. " relative humidity: " .. humidityValue .. " -> device turned On"); end elseif (humidityValue < targetValue) then -- TURN OFF if (deviceState==1) then fibaro:call(35, "turnOff"); fibaro:debug(os.date() .. " - device state: " .. deviceState .. " relative humidity: " .. humidityValue .. " -> device turned Off"); end end end if (sourceTrigger["type"] == "autostart") then while true do local currentTime = tonumber(os.date("%H%M")); if ((currentTime >= tonumber(string.format("%02d%02d", "11", "00"))) and (currentTime <= tonumber(string.format("%02d%02d", "19", "00")))) then deviceControl(humidityTargetValue); else if (tonumber(fibaro:getValue(35, "value"))==1) then fibaro:call(35, "turnOff"); --fibaro:debug("force turnOff"); end end fibaro:sleep(5*60*1000); end else local currentTime = tonumber(os.date("%H%M")); local startSource = fibaro:getSourceTrigger(); if ( ((currentTime >= tonumber(string.format("%02d%02d", "11", "00"))) and (currentTime <= tonumber(string.format("%02d%02d", "19", "00")))) or startSource["type"] == "other") then deviceControl(humidityTargetValue); end end Une autre scène nous préviens grâce à la mesure de consommation du wall plug lorsque le déshumidificateur est plein
  16. Moicphil

    Thermostat Greenmomit Et Hc2

    Piloter le Thermostat GreenMomit avec la HC2 Présentation et Spécificités Fabriqué par une société Espagnole, le GreenMomit est un thermostat "intelligent" Dimensions : 9.4 cm X 9.4 cm X 3.2 cm Alimentation : 230 V / 50 htz Connectivité : Wi-Fi Fonctionnement : En Local via pavé tactile ou via Smartphone / Tablette / PC Capteurs intégrés : Présence, Luminosité, Température, Hydrométrie Pour ceux qui ne connaissent pas le produit, je vous invite à consulter l'article de Laurent sur le Blog Domadoo >> http://blog.domadoo.fr/2014/01/03/momit-st-le-thermostat-intelligent/ Présentation de l'interface et installation en vidéo: Application téléchargeable ici : Pilotage avec la HC2 Depuis mes débuts avec la Home Center 2, je pilote ma pompe à chaleur Air / Eau avec ma box HC2 et un "module lié" ( FGS221 et ST814 ) Même si cela à très bien fonctionné avec un module virtuel et scènes , j'étais à la recherche d'une solution plus rapide et facile pour changer les consignes Chaud / Froid sans passer par l'interface Fibaro sur tablette ou smartphone. C'est chose faite, puisque le Greenmomit est désormais raccordé à ma PAC. Une installation on ne peut plus rapide, passant d'un FGS211 au GreenMomit, je n'ai eu qu'une alimentation 230v à ajouter. Ci-dessous, mon ancien câblage avec le FGS221: Ci-dessous, mon nouveau câblage avec le GreenMomit: Voici le Schéma de principe extrait de la notice : Thermostat raccordé et opérationnel, tout est expliqué sur la notice produit pour enregistrer le thermostat et créer un compte. >> guide_utilisation.pdf ------------------------------------------------------------------------- Concernant les différentes fonctions disponibles et sur le fonctionnement de l'application, Je vous invite à lire la notice ci-dessous : >> guide application.pdf Piloter le Thermostat avec la HC2 grâce à son API : Important : Le thermostat GreenMomit dispose bien d'une API complète permettant de récupérer différentes valeurs ainsi que d'envoyer divers ordres, néanmoins l'API n'est pas "officiellement" publique, et il faudra faire la demande au support qui vous donnera rapidement vos identifiants: "Clef d'authentification" et "ClientiD" . Afin d'obtenir la documentation API ainsi que vos identifiants, envoyer un e-mail au support selon ce model : Procédure : Important : ce module ne fonctionne qu'avec le Firmware V4.XXX Créer 2 variables Globales : "name" "Value" Importer le module Virtuel ci-dessous : Relever son numéro (id) Module Virtuel : >> Thermostat_GreenMomit V2.vfib Icone : >> Créer une scène et copier le code ci-dessous: >> V1.2 du 16/10/2014 : Ajout d'une fonction afin de connaitre en temps réel l'etat ON ou OFF des relais - Info retransmis sur un label supplémentaire V1.1 du 10/10/2014 : Prise en compte et visualisation sur labels en cas de changement manuel de consignes / mode Renseigner le numéro du Module Virtuel précédemment créé dans la ligne "11" du code. Puis : à partir de la ligne 28 , renseigner les champs suivants avec vos identifiants : email = 'xxxxxxxx@gmail.com', clientId = '8GI8FdCMFyCxxxxxxxxxxxxxxENG6nYzyTsXJ9lMxxxxxxxxxxxxxxxxz6b4dWdt', secretKey = '1xm70ixxxxxxxxxxxxxxxxxQ85XtsEKMU4Nxxxxxxxxxxxxxxxx7SSLZxd', thermostatId = '27xxxxxxxxx3', password = '2xxxxxx0' . --+++++++++++++++++++++++++++++++++++++++++-- --+++++++++++++++++++++++++++++++++++++++++-- local id_vd = "25" -- id virtual device --+++++++++++++++++++++++++++++++++++++++++-- --+++++++++++++++++++++++++++++++++++++++++-- GreenMomit = { loginToken = nil, sessionToken = nil, isConnected = false, isLogged = false, host = 'https://apist.greenmomit.com', port = 8443, root = '/momitst/webserviceapi' } --+++++++++++++++++++++++++++++++++++++++++-- --+++++++++++++++++++++++++++++++++++++++++-- GreenMomit.settings = { email = 'xxxxxxxx@gmail.com', clientId = '8GI8FdCMFyCxxxxxxxxxxxxxxENG6nYzyTsXJ9lMxxxxxxxxxxxxxxxxz6b4dWdt', secretKey = '1xm70ixxxxxxxxxxxxxxxxxQ85XtsEKMU4Nxxxxxxxxxxxxxxxx7SSLZxd', thermostatId = '27xxxxxxxxx3', password = '2xxxxxx0' } --+++++++++++++++++++++++++++++++++++++++++-- --+++++++++++++++++++++++++++++++++++++++++-- Merci à Jean-Christophe Akka Krikroff pour son aide. ------------------------------------------------------------- Les principales fonctions sont présentes dans ce module Virtuel. Il devient facile de gérer son thermostat via ce module et d'autres scènes par exemple. Pour info, dans le "mainLoop" du Module, le lance la scène toutes les 10 sec ce qui est largement suffisant. Un Plugin verra sans doute le jour . La Thermostat GreenMomit est disponible chez notre partenaire Domadoo >> ici
×