Aller au contenu

Steven

Membres confirmés
  • Compteur de contenus

    3 617
  • Inscription

  • Dernière visite

Réputation sur la communauté

1 732 Excellent

À propos de Steven

  • Rang
    Maitre Yoda du forum
  • Date de naissance 18/04/1971

Profile Information

  • Sexe :
    Homme
  • Ville :
    Valleiry, Haute-Savoie
  • Intéret :
    Domotique, Fitness et programmation
  • Box
    Home Center 2
  • Version
    4.140

Visiteurs récents du profil

1 609 visualisations du profil
  1. Support Gea

    Alors le soucis principale est que tu as {"Global!", "EtatPortail", "close"} avec le petit ! cela signifie "PAS" ... dans ce cas, la variable global EtatPortail ne doit PAS être "close". Il te suffit d'enlever les 2 "!" qui traînent et cela devrait le faire.
  2. Support Gea

    Ca devrait le faire comme cela : GEA.add( true, 30, "", {{"Time", "Sunrise+60", "Sunrise+60"}, {"Close", 96, 100}})
  3. Support Gea

    GEA.add({id["NEONS_GARAGE"],Lum_auto_on, {"Global!","EtatPortail","close"},{"Global!","EtatGarage","close"}}, 30, "", {{"turnOff", id["NEONS_GARAGE"]},{"turnOff", id["LUMIERE_JARDIN"]}}) Quand je regarde cette ligne, voici ce que je comprends : - Il faut que les néons du garage soient allumés - ET que nous soyons en mode auto - ET que le portail soit ouvert - ET que le garage soit ouvert Uniquement si toutes ces conditions sont remplient plus de 30s (ou 3*60s) alors j'éteins les lumières du garage et du jardin. Est-ce vraiment ce que tu souhaite faire ?
  4. Causes possibles d'une saturation mémoire ?

    @Krikroff Normal, je les ai cumulées dans un tableau que j'écrit en une seule fois, d’où l'heure du debug Là, on parle d'un GEA beta, brut de coffre sans aucune optimisation et avec plus de 70 contrôles/actions qui ne seront probablement jamais utilisés. J'optimiserais tout cela aisément avant la version définitive. Mais les chiffres me semblent rassurant pour l'instant.
  5. @Sakkhho On en est à la beta 8 de GEA et @pepite (et tous les contributeurs) ne fait(font) que de me trouver des bugs ou améliorations possible. On aimerait vous sortir une version fiable avec le moins de bugs possible alors malheureusement, avec nos moyens, cela prend du temps. En ce qui est des nouveautés, c'est simple, c'est un peu prêt tout ce qui n'a jamais été demandé sur GEA + des trucs en plus - Possibilité de manipuler plusieurs modules facilement : {"turnOn", {100, 102, 103}} -- allume les modules 100, 101 et 102 - Possibilité de l'éteindre automatiquement après x seconde : {"turnOn", 100, 60} -- 60 secondes - Possibilité d'avoir un niveau d'imbrication : {"turnOn", 100, {"Global", "AutoExtinction}} -- va cherche la valeur dans la variable global - Les tant attendus {"Sleep"...}, {"Or"...}, {"Thermostatlevel"...}, {"Info"...}, {"setArmed"} ... etc etc - Vos scénarios qui peuvent devenir des plugins de GEA - La possibilité d'écrire vos propres contrôle/action aisément sans les perdre lors de mise à jour et de les partager si vous le souhaiter - Plein d'actions et contrôles supplémentaires .. bref ... 2 ou 3 petits trucs en plus
  6. Causes possibles d'une saturation mémoire ?

    Bravo ... votre post à fait sauter @pepite et il m'a demandé de rajouter du code dans GEA .. merci les gars Pour info, voici ce que j'ai sur mon GEA 6.x (en 4.140) [DEBUG] 17:01:46: Mémoire utilisée : 2283.59 KB [DEBUG] 17:01:46: Mémoire utilisée : 2283.59 KB [DEBUG] 17:01:46: Mémoire utilisée : 1810.07 KB [DEBUG] 17:01:46: Mémoire utilisée : 1619.52 KB [DEBUG] 17:01:46: Mémoire utilisée : 1974.85 KB [DEBUG] 17:01:46: Mémoire utilisée : 1075.86 KB [DEBUG] 17:01:46: Mémoire utilisée : 2285.73 KB [DEBUG] 17:01:46: Mémoire utilisée : 1076.38 KB [DEBUG] 17:01:46: Mémoire utilisée : 2286.72 KB [DEBUG] 17:01:46: Mémoire utilisée : 1911.08 KB Les valeurs sont prises toutes les 30secs, on y voit un écart du simple au double ... ces valeurs vous semble-t-elle correcte au vu du script GEA et de mon environnement de production (une cinquantaine de règles). Perso, ce qui me plaît c'est qu'il n'y a pas d'augmentation linéaire.
  7. Oui c'est bien cela. Tu crées une nouvelle scène, y colle le code, change les ID (1 et 2 dans l'exemple) et cela devrait le faire.
  8. local response = "\"status\":200\n{\"token\":\"ABCD|E FG==\",\"result\"=true, data={}}" local key = "token" local token = response:match("\""..key.."\":\"(([A-Za-z0-9|=%.%+%s]+))\"") print(token) EDIT : Oublie il y a aussi des / dans ton token
  9. En effet. C'est vraiment un pattern des plus basique juste pour répondre à la question qui est de récupéré le token ... mais comme je viens de voir qu'il y a des "==" dans le token, cela ne fonctionne pas Voici donc une autre proposition : print(response:match("\""..key.."\":\"([A-Za-z0-9|=%.%+%s]+)\"")) Soit tout les caractères entre A et Z (A-Z), entre a et z (a-z), entre 0 et 9 (0-9), le pipe (|), le égale (=) , le point (.), le (+) et l'espace (%s)
  10. De manière très simpliste. Si on prend un retour en json : local response = json.encode({token="ABCDEFG", result=true, deviceStatus="IDLE", data={}}) Et qu'on veux chercher simplement la valeur (un string) d'un élément, il suffit de faire ainsi : local key = "token" print(response:match("\""..key.."\":.(%w+).")) Il ne faut pas d'espace dans la valeur mais pour un token, il n'y en a jamais :-)
  11. Si tu appuie sur "Démarrer" tu auras automatiquement une erreur car il cherche l'ID du déclencheur de la scène et il n'y en a pas quand tu cliques sur "Démarrer"
  12. HC2 : Envoi de Logs vers un serveur Syslog (Synology)

    Je ne faisais que de répondre à une question sans même regarder le contexte de cette dernière. Au lieu de jouer sur le VD, ce qui ne semble pas fonctionner correctement, voici une proposition qui me semble plus propre. Si j'ai plusieurs instances d'une même scène qui sont appelées trop fréquemment, je les mettrais en attente le temps que la précédente se termine. Je garanti ainsi un traitement séquentiel. Le code est des plus basique : while fibaro:countScenes() > 1 do fibaro:sleep(100) end Cela devrait empiler les instances de scène et les libérer une par une. Fini ta scène par un petit fibaro:sleep(200) pour t'assurer que ton VD a bien eu le temps de transmettre les données.
  13. Fibaro Marketplace

    Tout le monde pompe tout le monde ... le 1er à avoir mis de la couleur dans le debug est @Krikroff à ma connaissance. Perso, j'ai pompé l'idée sur lui pour GEA. Après je n'ai pas recopié son code mais j'ai copié le principe.
  14. Heating Manager

    Je ne doute pas de l'utilité de cela pour des radiateurs mais pour un poêle c'est moins transcendent. On arrête pas un poêle à l'ouverture d'une fenêtre, le temps de chauffe d'un poêle est trop long pour utiliser la gestion de présence (il doit chauffer avant qu'on arrive). Perso, mon poêle est le seul moyen de chauffage de toute la maison, je n'ai qu'une seule zone. Je modifie le mode de chauffe (éco/normal) (en pilotant les turnOn/turnOff*) selon l'état de la TV ou autre. Donc dans mon cas bien précis, mes besoins ne correspond malheureusement pas à ce développement. Par contre, je plussoie à 1000% pour un usage électrique à 90% pour du poêle. * Si mon poêle détecte un "ON" constant, il est en mode NORMAL ... un "ON" de 2-3 secondes toutes les 5 minutes il passe en mode ECO

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

Footer title

This is an example of a list.

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

Footer title

This content can be configured within your theme settings in your ACP. You can add any HTML including images, paragraphs and lists.

×
/* Navigation */ function ipsfocusNavigation() { var navwidth = 0; var morewidth = $('.ipsNavBar_primary .focus-nav-more').outerWidth(true); $('.ipsNavBar_primary > ul > li:not(.focus-nav-more)').each(function() { navwidth += $(this).outerWidth( true ) + 2; }); var availablespace = $('.ipsNavBar_primary').outerWidth(true) - morewidth; if (availablespace > 0 && navwidth > availablespace) { var lastItem = $('.ipsNavBar_primary > ul > li:not(.focus-nav-more)').last(); lastItem.attr('data-width', lastItem.outerWidth(true)); lastItem.prependTo($('.ipsNavBar_primary .focus-nav-more > ul')); ipsfocusNavigation(); } else { var firstMoreElement = $('.ipsNavBar_primary li.focus-nav-more li').first(); if (navwidth + firstMoreElement.data('width') < availablespace) { firstMoreElement.insertBefore($('.ipsNavBar_primary .focus-nav-more')); } } if ($('.focus-nav-more li').length > 0) { $('.focus-nav-more').removeClass('focus-nav-hidden'); } else { $('.focus-nav-more').addClass('focus-nav-hidden'); } } $(window).on('load',function(){ $(".ipsNavBar_primary").removeClass("focus-nav-loading"); ipsfocusNavigation(); }); $(window).on('resize',function(){ ipsfocusNavigation(); }); // Make hover navigation work with touch devices // http://osvaldas.info/drop-down-navigation-responsive-and-touch-friendly ;(function(e,t,n,r){e.fn.doubleTapToGo=function(r){if(!("ontouchstart"in t)&&!navigator.msMaxTouchPoints&&!navigator.userAgent.toLowerCase().match(/windows phone os 7/i))return false;this.each(function(){var t=false;e(this).on("click",function(n){var r=e(this);if(r[0]!=t[0]){n.preventDefault();t=r}});e(n).on("click touchstart MSPointerDown",function(n){var r=true,i=e(n.target).parents();for(var s=0;s ul > li:has(ul)').doubleTapToGo(); var browserResponsiveWidth = 980; var defaultBrowserWidth = $(window).width(); var headerHeight = $("#header").height(); var headerWrap = $(".headerWrap"); var headerBackgrounds = $(".headerBackgrounds"); var headerBlur = $(".headerBlur"); var blurEnd = 110; var headerEffects = function(){ var amountScrolled = $(window).scrollTop(); // Make navigation fixed if( amountScrolled >= headerHeight ){ headerWrap.addClass("fixedBlur"); } else { headerWrap.removeClass("fixedBlur"); } // Blur header if( (amountScrolled <= blurEnd) ){ headerWrap.removeClass("blurred"); } else { headerWrap.addClass("blurred"); } // Parallax effect var translateHeader = amountScrolled / 2; if( amountScrolled <= headerHeight ){ headerBackgrounds.css( "margin-top", translateHeader + "px" ); } else { headerBackgrounds.css( "margin-top", (headerHeight / 2) + "px" ); } } if( $('body').hasClass('wDesktop') ){ $(window).scroll(function(){ headerEffects(); }); }; });