Aller au contenu

Nico882

Membres confirmés
  • Compteur de contenus

    6
  • Inscription

  • Dernière visite

Réputation sur la communauté

0 Neutral

À propos de Nico882

  • Rang
    Nouveau

Profile Information

  • Box
    Home Center 2
  • Version
    4

Visiteurs récents du profil

604 visualisations du profil
  1. Bonjour PITP2, merci pour ton retour rapide et mes excuses pour cette réponse tardive (15 jours de déplacement). je ne connaissais pas la solution IPX800. Elle me semble très intéressante en effet mais après quelques recherches je ne vois pas de solution de communication sans fil de type wifi entre l'IPX800 et le réseau (puis vers le HC2). cela me pose un véritable problème car je n'ai pas de moyen de tirer de câble Ethernet jusqu'à mon local piscine. du coup, sauf si une solution sans fil IPX800 existe, je serai vraiment intéressé pour solution mon problème initiale à savoir l'interface entre arduino et HC2. merci d'avance pour ton retour.
  2. Bonjour à tous, depuis quelques temps et petit à petit je tente de domotiser la gestion de ma piscine grâce à la HC2 de fibaro. malheureusement le chemin est semé d'embuche... j'en suis à l'étape de gestion de la désinfection et du niveau de PH du bassin. l'été dernier j'ai tenté une solution simple que je vais tenté de vous décrire ci-dessous (mais je vous le dis tout de suite à ça ne fonctionne pas) : 1) partie physique : - une chambre de mesure en parallèle du système de pompe avec un capteur de température (DS18B20), une sonde PH et une sonde REDOX. - un module FGBS001 de fibaro connecté au capteur de température DS18B20 - un adaptateur Adaptateur pH/ORP 1130 (https://www.gotronic.fr/art-adaptateur-ph-orp-1130-12112.htm) connecté à la sonde PH - un adaptateur Adaptateur pH/ORP 1130 (https://www.gotronic.fr/art-adaptateur-ph-orp-1130-12112.htm) connecté à la sonde REDOX - un module FGRGB-101 configuré en capteur 0-10V sur 4 entrées. 2 entrées sont connectées aux adaptateurs PH/ORP 1130. - un module FGS-222 connecté (sur chaque sortie) à 2 pompes doseuses (circuit de dosage du PH- et circuit de dosage du chlore) - un module FGS-222 connecté à la pompe de filtration 2) partie logiciel : j'ai développé plusieurs petits programmes sous forme de scène qui gère les fonctions suivantes : - Fonctionnement de la filtration liée à la température du bassin. 4 cycles par jour; temps de filtration = température /2 / 4 - Mesure des niveaux de PH et de REDOX du bassin. Mesure du voltage en entrée du FGRGB-101 puis transformation à l'aide des formules adéquates en valeur de PH et de REDOX (affichées dans des modules labels) - Gestion de la désinfection du bassin : + la première fonction traite du niveau de REDOX dans le bassin. je simule un comportement de régulateur PI pour commander une injection de chlore liquide à chaque cycle de filtration en fonction de la mesure de REDOX du bassin. + la seconde fonction traite du niveau de PH dans le bassin. je simule un comportement de régulateur PI pour commander une injection de PH moins à chaque cycle (en différé du chlore pour ne pas perturber les éléments chimiques) en fonction du niveau de PH du bassin. ça ne vous aura pas échappé que je ne gère pas l'injection de PH+ mais dans ma région c'est quasi inutile. alors me direz-vous pourquoi ça ne fonctionne pas??? tout simplement parce que le module FGRGB-101 possède une résolution catastrophique de 0,1V. ce n'est pas suffisant pour capter efficacement les variations des sondes (plus exactement les niveaux de potentiel en sortie des adaptateur PH/ORP 1130). Pour vous donner une idée, on capte la variation de PH avec une résolution de 0,4PH et le redox avec 70mV. il faudrait à minima 0,1PH et 10mV pour une réelle efficacité. Donc j'en suis arrivé à la conclusion qu'il me faut remplacer le module FGRGB-101 par un élément plus efficace et capable de remonter les mesures au HC2. je me suis tourné vers arduino (plus exactement un Arduino MEGA 2560 R3 et un shield wifi RN171). La résolution de lecture des entrées analogiques est bien meilleure et parfaitement adaptée à mon besoin. c'est maintenant que les choses se compliquent! j'essaye de pousser une requete HTTP du module arduino vers un module virtuel dans le HC2 pour transférer les mesures des 2 sondes. malheureusement, je n'y arrive pas. dans un premier temps, je tente une requette test qui modifie l'état d'une lampe dans un module fibaro. du coté de l'arduino cela semble fonctionner sans problème mais côté HC2 ça ne fonctionne pas. je vous mets ci-dessous le code pour la requette que je tente de construire dans l'arduino : if (wifly.open(server, 80)) { Serial.println(F("Making HTTP Request to HC2...")); // Make a HTTP GET Request to HC2: wifly.print(F("POST /api/callAction?deviceID=39&name=turnOn")); wifly.println(F(" HTTP/1.1")); wifly.println(F("Host: 192.168.1.20")); wifly.println(F("Authorization: Basic XXXXXXXXXXXX")); // Authorization: Basic test:test wifly.println(F("Content-Type: text/html")); wifly.println(F("Connection: close")); wifly.println(); Serial.println(F("HTTP Request Send to HC2")); /*wifly.stop (); */ } else { Serial.println(F("Connection Failed.")); } (nota : j'ai volontairement modifié le login et mdp en base 64 par "XXXXXXXXXXXX". bien évidemment, j'utilise mon login et mdp correctement transcodé en base 64 pour la vraie requette) si ce sujet trouve une solution, cela donnera peut-être quelques idées à certain heureux possesseur d'une piscine... en tout cas merci d'avance de votre aide
  3. Nico882

    Impossible De Faire Tourner Une Scène Plus De 2 Cycles

    Bonjour à tous, @jojo : oui c'est exactement cela. bonne synthèse c'est tout de suite beaucoup plus clair ^^ du coup, je me retrouve avec 2 solutions : - @pépite propose une variable en trigger déclencheur. ce la nécessite que je modifie une variable dédiée tous les x temps de rafraîchissement souhaité. j'ai essayé ça fonctionne mais je galère à faire modifier une variable global régulièrement - @Indyana propose une version du code initial qui intègre une fonction sleep au lieu du timeout et une simplification sérieuse des conditions imbriquées. j'ai essayé ça fonctionne parfaitement. du coup, je vais partir sur cette version. cela donne cela au final : --[[ %% autostart %% properties %% events %% globals Filtration_Piscine --]] local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); local Temps_cycle = 6*60 --6h*60min/h=>360min fibaro:debug('Temps de cycle :'..Temps_cycle..'min') local Temp_eau = fibaro:getValue(178, "value") --récupération de la température de l'eau de piscine fibaro:debug('Température de l\'eau :'..Temp_eau..'°C') local Quart_Temps_Filtration = Temp_eau/4/2*60*60*1000 --évaluation du temps de filtration pour les 6 heures à venir en ms fibaro:debug('Temps de filtration sur les '..(Temps_cycle/60)..'h en cours : '..(Quart_Temps_Filtration/1000/60) ..'min') -- traitement des différents cas de gestion de la filtration local Etat_Commande_Filtration = fibaro:getGlobalValue('Filtration_Piscine') fibaro:debug('Etat de la commande de filtration : '..Etat_Commande_Filtration) if(Etat_Commande_Filtration == "Arrêt") then fibaro:call(107, "turnOff"); fibaro:debug('Etat de la pompe (boucle arrêt) : '..fibaro:getValue(107, "value")) end -- cas de la marche forcée if (Etat_Commande_Filtration == "Marche Forcée") then fibaro:call(107, "turnOn"); fibaro:debug('Etat de la pompe (boucle marche forcée): '..fibaro:getValue(107, "value")) end -- cas du programme de filtration if (Etat_Commande_Filtration == "Programme") then fibaro:debug('écart modulo temps de cycle :'..(math.floor(os.time()/60)-math.floor(1460955600/60))%Temps_cycle) if ((math.floor(os.time()/60)-math.floor(1460955600/60))%Temps_cycle == 0 ) then --démarrage de la pompe fibaro:call(107, "turnOn"); fibaro:debug('Etat de la pompe (boucle programme1): '..fibaro:getValue(107, "value")) local temp_Etat_Pompe, temp_derniere_modif_pompe = fibaro:get(107, "value"); fibaro:sleep(Quart_Temps_Filtration); fibaro:debug('heure courante : '..os.time()) fibaro:debug('heure dernier changement état pompe : '..temp_derniere_modif_pompe) fibaro:debug('temps écart : '..(os.time() - temp_derniere_modif_pompe)) fibaro:debug('temps de filtration : '..(Quart_Temps_Filtration/1000)) fibaro:call(107, "turnOff"); end fibaro:debug('Etat de la pompe (boucle programme): '..fibaro:getValue(107, "value")) end setTimeout(tempFunc, 5*60*1000) end -- fin de la fonction if (sourceTrigger["type"] == "autostart") then fibaro:debug(sourceTrigger["type"]) tempFunc() end ça fonctionne sur les temps très court et forcé, je vais le laisser une journée pour vérifier le comportement normal maintenant. je vous remercie de m'avoir aider sur ce sujet. je m'attaque maintenant la gestion de la désinfection et j'espère bien pouvoir poster un petit tuto complet sur la gestion global piscine avec HC2 d'ici un petit mois. encore merci
  4. Nico882

    Impossible De Faire Tourner Une Scène Plus De 2 Cycles

    tout d'abord merci beaucoup de prendre du temps pour me lire et me répondre. alors l'idée : la filtration (pompe) est possède 3 états : Arrêt (total) ; Marche forcée (h24 en marche) ; Programme (temps de filtration en fonction de la température de l'eau) donc dans la première partie de mon programme je récupère les différentes valeurs de device et de variable : (j'ai ajouté des commentaires dans le code) local sourceTrigger = fibaro:getSourceTrigger(); function tempFunc() local currentDate = os.date("*t"); -- je récupère l'heure du système local startSource = fibaro:getSourceTrigger(); --je récupère l'heure de démarrage de la scène qui devient mon point de départ du cycle local Temps_cycle = 5 --pour l'essai mon temps de cycle est fixé à 5min. en définitive 360min (6h) fibaro:debug('Temps de cycle :'..Temps_cycle..'min') --récupération de la température de l'eau de piscine local Temp_eau = fibaro:getValue(178, "value") fibaro:debug('Température de l\'eau :'..Temp_eau..'°C') --évaluation du temps de filtration pour les 6 heures à venir -- température divisée par 2 local Quart_Temps_Filtration = 1*60*1000 -- pour l'essai j'ai mis 1 min de filtration --local Quart_Temps_Filtration = Temp_eau/4/2*60*60*1000 --le vrai calcul du temps de filtration quand les essais seront concluant est ici fibaro:debug('Temps de filtration sur les '..(Temps_cycle/60)..'h en cours : '..(Quart_Temps_Filtration/1000/60) ..'min') local Etat_Commande_Filtration = fibaro:getGlobalValue('Filtration_Piscine') -- je récupère l'état de la variable global ("Arrêt";"Marche forcée","Programme) fibaro:debug('Etat de la commande de filtration : '..Etat_Commande_Filtration) une fois que j'ai tous les éléments, je programme 3 conditions imbriquées pour gérer les 3 états possibles de filtration. enfin dans la 3ème condition (qui correspond à mon choix "Programme"), j'y insère une nouvelle condition qui permet de démarrer la pompe à l'instant exact d'un début de cycle (soit tous les 6 heures). j'utilise alors la fonction settimeout pour l'arrêt de la pompe à l'issu d'un certain temps de fonctionnement (le temps calculé en début de programme). enfin j'utilise la fonction settimeout une nouvelle fois pour permettre l'exécution de toute la fonction "tempFunc()" en arrière plan. est-ce que c'est suffisamment clair?
  5. Bonsoir à tous, voici 3 jours que je me débats avec la création d'une scène chargée de gérer la filtration de ma piscine. l'objectif est le suivant : toutes les 6 heures, je mets en route ma pompe de piscine pour un temps donné. ce dernier est calculé en fonction de la température de piscine. --[[ %% autostart %% properties %% events %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); local Temps_cycle = 5 --6h*60min/h=>360min function tempFunc() local currentDate = os.date("*t"); local startSource = fibaro:getSourceTrigger(); local Temps_cycle = 5 --5min fibaro:debug('Temps de cycle :'..Temps_cycle..'min') --récupération de la température de l'eau de piscine local Temp_eau = fibaro:getValue(178, "value") fibaro:debug('Température de l\'eau :'..Temp_eau..'°C') --évaluation du temps de filtration pour les 6 heures à venir -- température divisée par 2 local Quart_Temps_Filtration = 1*60*1000 --1 min --local Quart_Temps_Filtration = Temp_eau/4/2*60*60*1000 --en ms fibaro:debug('Temps de filtration sur les '..(Temps_cycle/60)..'h en cours : '..(Quart_Temps_Filtration/1000/60) ..'min') -- traitement des différents cas de gestion de la filtration local Etat_Commande_Filtration = fibaro:getGlobalValue('Filtration_Piscine') fibaro:debug('Etat de la commande de filtration : '..Etat_Commande_Filtration) fibaro:debug('démarrage de la fonction') if(Etat_Commande_Filtration == "Arrêt") then fibaro:call(107, "turnOff"); fibaro:debug('Etat de la pompe (boucle arrêt) : '..fibaro:getValue(107, "value")) else -- cas de la marche forcée if (Etat_Commande_Filtration == "Marche Forcée") then fibaro:call(107, "turnOn"); fibaro:debug('Etat de la pompe (boucle marche forcée): '..fibaro:getValue(107, "value")) else -- cas du programme de filtration if (Etat_Commande_Filtration == "Programme") then fibaro:debug('écart modulo temps de cycle :'..(math.floor(os.time()/60)-math.floor(1460955600/60))%Temps_cycle) if ( (math.floor(os.time()/60)-math.floor(1460955600/60))%Temps_cycle == 0 ) then --démarrage de la pompe fibaro:call(107, "turnOn"); fibaro:debug('Etat de la pompe (boucle programme1): '..fibaro:getValue(107, "value")) setTimeout(function() local temp_Etat_Pompe, temp_derniere_modif_pompe = fibaro:get(107, "value"); -- condition pour arrêt de la pompe if (os.time() - temp_derniere_modif_pompe >= (Quart_Temps_Filtration/1000)) then fibaro:debug('heure courante : '..os.time()) fibaro:debug('heure dernier changement état pompe : '..temp_derniere_modif_pompe) fibaro:debug('temps écart :'..(os.time() - temp_derniere_modif_pompe)) fibaro:debug('temps de filtration : '..(Quart_Temps_Filtration/1000)) fibaro:call(107, "turnOff"); end end, Quart_Temps_Filtration) end fibaro:debug('Etat de la pompe (boucle programme): '..fibaro:getValue(107, "value")) end --fin if Programme end --fin if marche forcée end --fin if arrêt end -- fin de la fonction tempfunc() setTimeout(tempFunc, 1*60*1000) if (sourceTrigger["type"] == "autostart") then fibaro:debug(sourceTrigger["type"]) tempFunc() end mon problème c'est que la scène que je voudrais bien évidemment récurrente ne s'exécute que 2 fois et... plus rien! j'ai bidouillé pas mal de chose mais rien y fait. je pense que ça doit venir du double "settimeout" imbriqué dans mes fonctions qui génère ce problème. si c'est le cas, j'ai un autre problème qui se profile... je ne vois pas comment faire autrement ^^ si un expert à l’Å“il plus acéré que le mien, je suis preneur d'un peu d'aide. merci d'avance.
  6. Bonjour à tous, je suis devenu propriétaire d'une maison il y a un an. j'ai tout de suite voulu installer un peu de domotique en vue d'améliorer le confort. de fil en aiguille, je commence à en installer partout! je suis chef de projet dans le secteur de la sectorisation coupe-feu à destination spécifique du nucléaire. j'ai remarqué ce forum lors de mes recherches pour mon dernier projet en date => automatisation de la piscine. j'espère bien pouvoir présenter quelque chose sur ce forum sur ce sujet. voilà pour ma présentation. j'ai hâte d'échanger avec vous. Nicolas.
×