Aller au contenu

Fredmas

Membres confirmés
  • Compteur de contenus

    906
  • Inscription

  • Dernière visite

  • Jours gagnés

    17

Tout ce qui a été posté par Fredmas

  1. Hi and welcome here, a very good place to share 
  2. Bon après des essais simples avec un 'print' pour voir le résultat, je me réponds tout seul Pas la peine d'ajouter l'appel à la fonction fun() avant le 'end' de la fonction loop(). Parce que, et je n'ai toujours pas compris pourquoi, la fonction intervalRunner lance bien (et uniquement) la fonction appelée dans le onInit (alors que je croyais quelle tournerait en boucle sur elle-même), et appeler la fonction fun() dans la fonction loop() d'intervalRunner double tout simplement le lancement de la fonction checkGlobalVariables() dans mon exemple Voilà mon essai, qui fonctionne (merci @jang pour la proposition de code), qui donne : function checkGlobalVariables() print("this function will check global variables") -- hereafter the function I want to launch regularly thanks to the loop in the function IntervalRunner end function trial() print("trial to check if this function is also concerned by the loop from intervalRunner") end function intervalRunner(seconds,fun) local nxt,ref=nil,{} local function loop() if fun()==':EXIT' or ref[1]==nil then return end nxt=nxt+seconds ref[1] = setTimeout(loop,1000*(nxt-os.time())) end local t = (os.time() // seconds) * seconds nxt=t+seconds ref[1] = setTimeout(loop,1000*(nxt-os.time()-(seconds > 3600 and 3600 or 0))) return ref end function stopIntervalRunner(ref) if ref[1] then clearTimeout(ref[1]) ref[1]=nil end end function QuickApp:onInit() intervalRunner(60,checkGlobalVariables) end Et toutes les minutes la console affiche bien : "this function will check global variables". Si j'ajoute return ":EXIT" ou que j'appelle stopIntervalRunner() à la fin de la fonction checkGlobalVariables, ça marche une seule fois puis s'arrête Si je remplace checkGlobalVariables par trial dans le onInit, ça change de fonction dans la loop intervalleRunner. Donc grâce à la fonction intervaleRunner(), la fonction checkGlobalVariables (et uniquement celle-ci) dans le QA fonctionne en loop avec le délai prescrit dans onInit(). A+ Fred
  3. Je les avais d'abord installées sur mon HCL en V4, donc j'ai envie de te dire oui pour la HC2 @Nico Et là tout fonctionne sur mon HC3L
  4. Histoire de partager mon expérience, après la moitié de mes LC13 tombées en panne les unes après les autres au bout de 5/6 ans, j'ai décidé de passer de 100% de Danfoss LC13 à 100% d'Eurotronic SPIRIT dans ma maison (ce sont les mêmes que les Aeotec ZWA021). Comme j'ai cru comprendre que l'inventeur/fabricant de ces têtes est à l'origine Eurotronic, qui ensuite les revend à Aeotec, et considérant qu'il faut rendre à César ce qui est à César d'un point de vue hardware et software, j'ai préféré partir sur les Eurotronic plutôt que les Aeotec qui "d'après ce que mon store m'a dit" ne fait que changer le packaging. Comparé aux LC13 la taille est différente, pas plus petite ça c'est sûr, mais pas si grosse que ça non plus en situation sur le radiateur. La remontée de la température, même si on pourrait critiquer sa justesse vu la position dans la pièce, est un plus comparé aux LC13. D'autant qu'on peut régler des offset dans les paramètres si besoin. Je ne les trouve pas plus bruyantes que les LC13, pareil voire moins mais c'est dans la précision du dB à mon avis, ou du tier d'octave pour les plus pointus de l'acoustique. Elles sont parfaitement intégrées à la Home Center en tout cas, et de manière très simple et rapide. En résumé, aucun regret concernant ce changement, à voir dans le temps si elle dure plus longtemps que les LC13 qui sont pas mal au début mais qui montrent vite des signes de fatigues de connexion avec les années Et depuis, pour ceux que ça intéresse, j'ai remplacé les adapteurs plastiques fournis, par des adapteurs laiton plus sympa selon moi Fred
  5. Aeotec ZWA021 / Eurotronic SPIRIT Tête thermostatique Z-Wave Plus Communication sans-fil Z-Wave Plus Prise en compte en temps réel des changements de consigne depuis la box domotique (FLiRS) Transmet la température mesurée à la box domotique Fonctionnement très silencieux Boutons pour le réglage manuel de la température de consigne et mode "Boost" Protection enfants (blocage des boutons via séquence ou via box domotique*) Ecran LCD pour l'affichage de la température de consigne Protection de la vanne contre le gel et le dépôt de calcaire Détection intelligente de fenêtre ouverte (par détection d'une baisse brutale de température) Possibilité de connaitre et/ou commander l'ouverture de la vanne en %* Economie de piles par mise en veille intelligente Cryptage des communications en AES128 (sécurité "S0" et "S2")* 3 adaptateurs (RA Danfoss, Danfoss RAV, Danfoss RAVL) inclus Specifications : https://aeotec.freshdesk.com/support/solutions/articles/6000224136-radiator-thermostat-technical-specification Page officielle Aeotec : https://aeotec.com/z-wave-home-automation/thermostat-radiator-valve-trv/ Page officielle Eurotronic : https://eurotronic.org/produkte/z-wave-heizkoerperthermostat/spirit-z-wave-plus/ Manuel Aeotec : https://aeotec.freshdesk.com/support/solutions/articles/6000224131-radiator-thermostat-user-guide Manuel Eurotronic : https://eurotronic.org/wp-content/uploads/2021/07/Spirit_Z-Wave_Plus_Installation-and-Operation-Guide_web.pdf
  6. Après avoir de nouveau passé pas mal de temps à relire (Manuals Fibrao LUA, std:exception: 'Timeout', Settimeout, example-of-settimeout) et re-re-réfléchir je pense avoir mieux compris le fonctionnement de timeout avec ses deux paramètres, et la majorité des lignes de code de l'exemple de @jang de la fonction intervalRunner. Je pense avoir mieux compris le fonctionnement de la fonction local loop() avec le setTimeout, nxt et ref, après avoir fait plusieurs essais avec 'print' dans une petite scène en regardant les résultats dans la console. Le principal point que je n'arrive toujours pas à comprendre et à intégrer dans ma petite tête, c'est quand la fonction loop() va appeler la fonction fun() ou test() ou checkGlobals() Faut-il ajouter une ligne avant le 'end' de la fonction loop() pour qu'à chaque boucle elle lance l'exécution de la fonction fun() ou test() ou checkGlobals() ? Dans ce cas cela ressemblerait-il à l'exemple ci-dessous, avec l'appel de fun() à la fin de loop(), avec seconds remplacé par 60 et fun remplacé par checkGlobals lors du démarrage du QA : function checkGlobals() ... end function intervalRunner(seconds,fun) ... local function loop() ... fun() end ... end function stopIntervalRunner(ref) ... end function QuickApp:onInit() intervalRunner(60,checkGlobals) end Ou alors je n'ai définitivement rien compris ?
  7. Hi and welcome here, a very good place to share
  8. Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire 
  9. Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire 
  10. Hi and welcome here, a very good place to share In English or French, it will be nice to read you later 
  11. Effectivement après quelques lectures d'articles, sans être tombé sur l'explication du "pourquoi", il semblerait que Synology ait annoncé que la Maj ne serait pas automatique. Je trouve cela surprenant et pas super rassurant tout de même. Pourquoi ne pas déployer cette Maj automatique chez tous ceux qui sont compatibles ? Du coup je pense que je vais patienter quelques semaines cet été
  12. Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire
  13. Dans le doute pour bien comprendre leur produit, j'ai contacté l'entreprise. Discussion ci-dessous : @Fredmas @Flipr @Fredmas @Flipr
  14. De mon côté mon 218 ne me propose toujours pas la v7
  15. Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire
  16. After having read several times since yesterday, even if I don't understand at 100% yet the way to work of both setTimeout, I think I understood roughly the way to loop from the function intervalRunner. But in the code I don't understand when or how (which line) intervalRunner is asking to run the function "fun" each time? Probably a lack of knowledge from my side about function and QA... When we start the QA in onInit method we call the function intervalRunner with 2 parameters (60 and fun), received by intervalRunner as 2 arguments to be used. But I don't see where intervalRunner is running the function "fun" in this example
  17. Oui tu as raison @Lazer, je m'étais fait la remarque d'ailleurs. Mais comme tu as compris que j'aime bien comprendre ce que je fais, tu as raison c'est aussi un peu par plaisir d'apprendre et de coder mon truc que j'essaie de faire des QA. J'ai bien pensé prendre ta version HC3 de GEA, mais bon dans un premier temps voir ma phrase précédente Alors j'essaie d'évoluer petits bouts par petits bouts de temps en temps le week-end, et en partageant mes questions/réponses dans ce topic au cas où cela aiderait d'autres membres (évidemment ce n'est pas toi ou @jang que ça va aider vu votre niveau élevé en QA )
  18. Thanks a lot @jang for your quick answer If I understand in the good way the philosophy of your explanation: the function fun is the one I want to run every time in onInit() I define the time loop I want and the function to run for each loop the function intervalRunner is the loop function which will run the function fun each time it is defined in onInit() if the function fun returns :EXIT it will stop the function intervalRunner, so the loop if I call the function stopIntervalRunner, ref[1] will take nil, and if ref[1]==nil the function intervalRunner will stop the function intervalRunner, so the loop Is my newbie understanding good?
  19. #2 Question 2 : faire tourner un QA en boucle pour vérifier l'heure et déclencher des actions Dans la continuité d'apprendre la philosophie des QA et leurs possibilités afin de remplacer les scènes petit à petit, je n'ai pas trouvé comment faire tourner un QA en boucle. Je raisonne probablement encore trop en mode scène LUA, mais bon pas facile de changer du jour au lendemain. Alors je vais prendre un exemple pour illustrer la question et aider les autres débutants comme moi à se projeter en situation pour mieux comprendre. Un exemple pour un cas concret : J'ai une scène "temps" qui sert qu'à vérifier toutes les 60s (avec un trigger "date/matchInterval/cron") la nécessité d'agir sur des variables globales ou d'autres actions (oui pour le moment j'utilise encore les variables globales ). Dans cette scène "temps" je vérifie les variables, les horaires, coucher de soleil, vacances, les modes marche/auto, etc. Et dans une autre scène "volets" pour mon exemple je gère toutes les actions nécessaires à l'automatisation des volets, et fonction de ce que lui dit la scène "temps". Même si j'ai des idées et possibilités d'optimisation, pour l'instant tout fonctionne bien en toute autonomie sans que je m'en occupe, en dehors de cas de vie exceptionnels non encore implémentés. Mais dans l'apprentissage des QA, j'essaie de réfléchir à une autre alternative. Si je savais obtenir dans un QA le même résultat que ce que fait ce trigger de type "date/matchInterval/cron" dans une scène, ce que j'appelle faire tourner en boucle, dans mon exemple cela permettrait d'avoir un QA qui surveillerait quand il faut faire quoi, exécuterait les actions, avec des boutons de paramétrage d'horaires exceptionnels, et moins de variables globales Evidemment j'ai pris cet exemple simple pour nous mettre en situation et apprendre cette possibilité de boucle temporelle d'un QA, mais le but est bien de comprendre les possibilités pour davantage d'applications potentielles. Avant toute chose j'ai commencé par lire les 2 topics Tests d'utilisation de /api/refreshStates et Quick App - Evénements, mais je ne suis pas sûr que cela corresponde. Déjà ils ont l'air complexes, et surtout ils servent à vérifier plus de chose que simplement faire tourner le QA toutes les 60s comme décrit ici.
  20. De rien. Cool si j’ai pu t’aider à résoudre ton problème Un truc donc je me sers également comme vérification après avoir correctement réglé les favoris, puis fermé « complètement les app » : je check les scènes qui sont visibles dans le widget Yubii, dans l’écran widget tout à gauche de l’iPhone (mais pense que tu as compris de quel page d’accueil je parle) Ce sont les mêmes qui sont normalement dispo dans raccourcis.
  21. Je ne sais pas si ce que je vais te répondre va t'aider, mais voilà ce que je peux te dire Sachant que je ne suis pas en HC2 de mon côté Quand tu crées un raccourci Yubii dans l'app Raccourcis IOS, tu ne peux le faire qu'avec les scènes déjà sélectionnées comme étant favorites (avec la petite étoile allumée à côté). Et ce réglage se fait dans l'app Yubii évidemment, section favoris en bas à gauche de l'accueil, puis scènes Donc si ta scène "Garage action" n'a pas l'étoile favorite, tu ne la verras pas dans l'app Raccourcis. Pour l'histoire de ta "nouvelle scène", là je ne sais pas dire, à part vérifier si elle existe bien dans ta HC2 et ses paramètres, masquée, visible, active, etc.
  22. Oui c’est un bon comportement de leur part
  23. Bonjour, et bienvenu sur ce très bon forum Bonne ambiance, grosse expertise pour certains, et partage du savoir pour la plupart Au plaisir de te lire Je sens que nous allons bientôt te lire dans la rubrique Sécurité
  24. J’aime beaucoup ton orientation Je trouve que ce style respire un coup de modernité et tech à la fois, même si habituellement je préfère le nuance bleue au rouge Hate de voir terminé
  25. Fredmas

    Site Domotique

    C'est triste à lire, et même si je n'étais pas un de ses clients et que je ne le connais pas. Ses mots ne laissent pas indifférent Alors comme nous sommes dans la section "Bistrot" justement, je me permets de parler du sujet. Absolument pas pour donner une leçon de morale (j'ai autre chose à faire en ce dimanche ), mais pour simplement en discuter entre potes A titre d'exemple, je suis client d'un store français justement (qui, si ma mémoire ne me fait pas défaut, a été partenaire de notre forum il y a quelques années) et je n'ai pas encore eu besoin d'acheter de produits domotiques sur des grosses boutiques mondiales (comme Ama par exemple). Cette boutique, comme probablement pas mal d'autres, répond et conseille autant qu'on lui demande pour aider dans les choix techniques pas toujours évidents. Et comme pour nous-mêmes, je considère que tout travail mérite salaire. Alors pourrais-je trouver toujours moins cher ailleurs, probablement en fouinant. Mais ai-je envie de ne pouvoir acheter un jour qu'uniquement chez 2 ou 3 store comme Ama ou Eb, sans conseil ni suivi, absolument pas. Du coup désormais de base j'essaie d'acheter chez eux plutôt qu'ailleurs quand ils vendent le produit dont j'ai besoin. Et si je ne suis pas pressé et que je veux réellement moins cher, et bien je sais que quelques fois dans l'année ils font des promos. Comme tout le monde je surveille mon porte-monnaie et je ne suis évidemment pas contre faire des bonnes affaires. Mais ils faut faire des choix. Ca me fait penser à une discussion que j'ai eu avec des amis il y a quelques temps. Eux me répondaient qu'ils achetaient au moins cher sur internet peu importe où, et nous n'étions pas d'accord avec cette manière de faire. Comme je leur ai dit, on ne peut pas se plaindre de perdre nos magasins de proximité et en même temps de ne pas acheter chez eux. Et c'est pour ça que ça me tue quand je vais dans un magasin et que je connais mieux leur produit que les vendeurs. Je n’arrête pas de leur dire que c'est une force qui pourraient aider à les différencier des énormes boutiques internet qui vendent pour vendre. Bref, on ne refera pas le monde, mais il est toujours intéressant d'en discuter, c'est le notre après tout Tout comme le Colibri du dicton connu, certes nous n'éteindrons pas l'incendie seul avec notre bec, mais nous pouvons faire notre part.
×
×
  • Créer...