Aller au contenu

J3R3M

Membres confirmés
  • Compteur de contenus

    593
  • Inscription

  • Dernière visite

Messages posté(e)s par J3R3M


  1. Bonjour,

    Il est possible de faire un script qui fait ce que tu souhaites relativement simplement. Je t'indique un principe simple ci-dessous pour que tu puisses creuser les différents points si besoin.

    Aussi, pour t'aider davantage, n'hésite pas à nous en dire un poil plus... Quel est ton capteur de mouvement? Quel type d'éclairage souhaites-tu contrôler?

     

    1. Créer une nouvelle scène LUA qui peut démarrer automatiquement et qui peut avoir plusieurs instances simultanées
    2. Le trigger de cette scène doit être la valeur de ton détecteur de mouvement
    3. Envoie la valeur 100% à ton éclairage
      • À ce stade, la lumière s'allumera automatiquement dès qu'un mouvement sera détecté
    4. Il faut ensuite que des actions se passent après cet allumage. Pour délayer ces actions, deux fonctions possibles : setTimeout() et fibaro:sleep()
      • Il est préférable d'utiliser setTimeout(), mais elle est légèrement plus complexe à mettre en place. Néanmoins, des sujets expliquent bien comment l'utiliser sur le forum.
    5. Tu crées donc une temporisation de cinq minutes
    6. À l'issue de celle-ci, tu comptes le nombre d'instances en cours de ta scène :
      • S'il n'y en a plus qu'une, tu peux simplement tuer cette instance de scène puisqu'un nouveau mouvement a été détecté. L'autre instance s'occupe de refaire les vérifications.
      • S'il n'y en a qu'une, aucun nouveau mouvement n'a été détecté. Tu peux diminuer l'intensité de ton éclairage à 50%, puis :
        • Tu crées une nouvelle temporisation de cinq minutes
        • À l'issue de celle-ci, tu comptes à nouveau le nombre d'instances en cours de ta scène :
          1. S'il n'y en a plus qu'une, tu peux simplement tuer cette instance de scène puisqu'un nouveau mouvement a été détecté. L'autre instance s'occupe de refaire les vérifications.
          2. S'il n'y en a qu'une, aucun nouveau mouvement n'a été détecté. Tu peux éteindre ton éclairage.
    7. Ta scène est finie. Rassure-toi, l'écrire toi-même prendra certainement moins de caractères que mon explication!

     

    Si tu es plus à l'aise, il est possible de faire quelque chose de bien plus optimisé, en créant une fonction LUA qui vérifiera chaque minute depuis combien de temps le capteur de mouvement n'a pas détecté de mouvement et fera les actions en conséquence.

     


  2. il y a 4 minutes, papaced a dit :

    tout d'abord merci pour le temps que tu m'accorde et pour toutes ces précisions...

    Avec grand plaisir! C'est un forum d'entraide ;)

    il y a 5 minutes, papaced a dit :

    alors whaou, je ne voyais pas sa comme ça même après avoir lu et relu des "cours" sur les tables...

    Effectivement, il y a beaucoup de notions sur les tables.

    Il y a encore quelques mois, je ne savais pas les utiliser.

    il y a 6 minutes, papaced a dit :

    même si les tables et toutes ces variables pour 2 portes et 1 lampe ça me perturbe toujours, je ne sait pas sur une page blanche comment j'arriverais a sa!

    En tous cas, tu as en tête le principe de la feuille blanche et c'est un excellent début!

    Aussi, tu peux programmer en testant au fur-et-à-mesure, en ajoutant tes blocs petits à petits, ce qui te permettra de voir l'évolution de ton code et constater qu'il fait bien ce que tu souhaites.

    il y a 8 minutes, papaced a dit :

    perso je pense que j'ai encore beaucoup de chemin pour y arriver...mon problème est je pense ma façon de penser et de voir le cahier des charge de base (peut être la déformation professionnelle je suis électricien en industrie...)

    il faut je pense que je reprenne des cours de base et que je me formate a cette façon de penser...(tiens une idée pour utiliser mon DIF :))

    Sois positif et aie confiance en toi!

    Très sincèrement, je n'y connaissais rien du tout en arrivant sur ce forum. J'ai d'ailleurs posé de nombreuses questions quand je n'arrivais pas à mettre en application certaines notions de LUA.

    Voici un de mes premiers posts. Tu constateras que je ne comprenais vraiment pas grand chose malgré ma volonté. On a pris le temps de me trouver des solutions et de m'expliquer.

    Un peu plus tard, j'ai voulu creuser du côté des tables, mais je galérais un peu pour mon application, alors j'ai posté une autre question.

    Ensuite, j'ai voulu faire fonctionner ma Welcome de Netatmo, j'ai alors cherché sur la toile et suis tombé sur un script que j'ai voulu adapter et partager.

    Il y a toujours beaucoup à apprendre et il y aura toujours des personnes pour t'aider à comprendre si besoin.

    De mon côté, je me suis contenté de glaner les informations qui m'intéressaient sur quelques sites d'apprentissage du LUA en essayant de les mettre en application avec la domotique.

    il y a 34 minutes, papaced a dit :

    je vais essayer de "jouer" avec ton code maintenant que c'est un peux plus clair (en rajoutant, modifiant d'autres notifications même inutile histoire de voir...)

    je te solliciterais surement encore si tu le permet.

    En jouant, ça va certainement t'aider à comprendre ;)

    Dans tous les cas, tu as déjà la bonne procédure en tête puisque tu avais fait un script quasi fonctionnel ;)

    Pour tes questions sur le LUA lié à la domotique, tu peux créer de nouveaux sujets directement dans le forum HC2, en précisant dans le sujet qu'il s'agit d'une question de LUA :)

    Il y a de nombreuses personnes qui pourront t'aider ici, même à comprendre le fonctionnement d'un code si besoin ;)


  3. Bonjour @papaced!

    Le 20/06/2020 à 10:49, papaced a dit :

    a la première ligne:

    RetourBtn = #t, 0, "", "";

    La première ligne déclare toutes les variables qui vont être utiles par la suite pour l'exécution du script.

    Ainsi, on commence par déclarer TotalTable en y stockant combien d'entrées il y a dans le tableau t.

    Ensuite, on crée simplement des variables avec une valeur nulle à chaque fois, que le script mettra à jour par la suite si nécessaire.

    Il faut effectivement déclarer ces variables avant de les utiliser. Dans le cas contraire, il y a aura une erreur puisqu'on essaiera de mettre à jour une variable qui n'existe pas.

     

    Le 20/06/2020 à 10:49, papaced a dit :

    a la deuxième ligne le i=1 ? 

    On est dans une boucle for numérique classique. Dans ces boucles, on utilise et déclare une variable au début de celles-ci.

    Cette ligne signifie :

    Citation

    Considère que i=1. Pour chaque valeur de i entre 1 et la valeur de TotalTable, fais les actions suivantes.

    Cela permet de parcourir le contenu de la table en faisant évoluer la valeur de i, puisqu'on va utiliser i comme clé.

    Le 20/06/2020 à 10:49, papaced a dit :

    de ce fait si je met d'autres "couleurs" il faudra mettre ensuite: if RetourNombreCapteur==2        if RetourNombreCapteur==3     ....?

    Alors non :lol: Enfin, tout dépend de ce que tu souhaites faire.

    Tel quel, pour rajouter un élément à surveiller, il te faut simplement déclarer une nouvelle entrée dans la table t, comme au début du script :

    table.insert(t, {nom="Porte Sectionnelle", id=76, valeur=1, couleur="rouge", btn=16});

    La partie du script dont tu parles effectue juste une analyse de la valeur de la variable RetourNombreCapteurs.

    Si la valeur de cette variable est égale à 1, la couleur de tes lampes sera celle précisée lors de la déclaration de ton entrée du tableau t.

    Si la valeur de cette variable est supérieure à 1, la couleur de tes lampes sera systématiquement rouge, t'informant visuellement que plusieurs portes sont ouvertes.

    Si la valeur de cette variable n'est ni égale à 1, ni supérieure à 1, on éteindra tes lampes.


  4. Le 24/05/2020 à 23:07, Lazer a dit :

    J'avoue ça fait peur, je ne me suis pas encore lancé non plus.

    Je sors de nul part pour dire que j'ai abandonné.

    Je n'ai rien réussi à faire... Ça m'a tellement saoulé que j'ai failli commander une HC3 juste pour avoir l'impression de perdre moins de temps.

    J'ai ensuite eu la présence d'esprit de me dire que 500-600€ pour quelque chose que je n'utiliserai pas, c'était pas top. Le jour où il y en aura à 200€, prévenez-moi :60:

    Débuguez bien ça s'il-vous-plaît, que je ne sois pas trop emm**** quand je débarquerai... En attendant, je reste avec une HC2 totalement fonctionnelle :P

     

    NB: Si vous avez un tuyau sans trop de prise de tête pour la simulation, promis, je m'y mettrai :D

    • Like 1

  5. il y a 59 minutes, papaced a dit :

    a sa je ne savais pas du tout! je vais y prêter attention du coup lors de mes prochaines expériences de codes

    C'est écrit nul part, c'est quelque chose dont je me suis rendu compte à force de faire des essais.

    Et cela se vérifie régulièrement :)

    J'oubliais, mais pour faire une pause au sein d'un script LUA, il faudrait que tu utilises la fonction fibaro:sleep(1000). Le temps est en millisecondes, donc 1000 pour 1 seconde ;)

    Attention, il s'agit bien d'une pause. Le programme lit le code et se met en pause sur cette ligne. La suite du code sera exécutée après cette pause.


  6. il y a 8 minutes, papaced a dit :

    ok c'est bien sa le problème c'est que dans mon debug les valeurs capteur sont bien de 0 et 0 il met bien "eteint" et la lampe  est bleue!:15:

    donc je viens de supprimer l’appui systématique sur btON car ce bouton a pour effet d’allumer sur le dernier réglage de la lampe. donc certainement que cette lampe interprète les commandes plus lentement que ne l'envoie le HC2 et du coup ne les fait pas dans l'ordre...

    je laisse vivre comme sa pour voir car les essais "fonctionnent" mais bon...

    De manière générale, la HC2 ne gère pas bien du tout un enchaînement de deux mêmes actions telles que des fibaro:call.

    Un temps d'une seconde est nécessaire entre deux actions. C'est pour cela qu'il faut se passer des commandes qui ne sont pas utiles.

    Sans ce temps, certaines actions ne sont pas effectuées, zappées.


  7. il y a 9 minutes, papaced a dit :

    bon ma femme est rentrée et la lampe est bleue!! donc mon code bof bof!!!

    je vais étudier le tiens plus rapidement !!!

    mais j'aimerais le comprendre avant de faire un simple copier coller

    Le code que j'ai fait se base sur le tien, donc le résultat sera le même. Il faut comprendre où se situe le problème dans ta configuration.

    En cherchant des pannes, il faudrait que tu ailles sur la scène en question et que tu regardes le DEBUG.

    Tu devrais voir les messages valeur capteur = avec une valeur différente en fonction de l'ouverture de la porte, 1 puis 0 ensuite.


  8. il y a 1 minute, papaced a dit :

    encore merci d'avoir pris le temps d'écrire ceci

    là tu me donne a manger pour 15jours! je vais en effet étudier celui ci de prêt, sa me serviras de cours sur un sujet qui me parles.

    a ce jour les tables je ne sais pas encore ce que c'est! donc c'est l'occasion pou moi de prendre des cours (en solo c'est compliqué;))

    qu'entend tu par entretenable? 

     

    Il y a de nombreux site, dont beaucoup en français, qui traitent du LUA.

    Par exemple, rien que pour aborder la chose plus sereinement, recherche directement "Tables LUA" et les "Boucles FOR LUA", tu verras que tu comprendras très aisément ce code.

    Le code que j'ai fait rapidement se compose ainsi :

     

    - Création de la table t

    - Insertion dans cette table les valeurs que tu souhaites surveiller en y précisant le nom, l'ID du module, la valeur qui validera une action, le numéro du bouton et la couleur qui y est associée.

    - Une boucle FOR vérifie, pour chaque ligne du tableau si la valeur du module correspond à celle précisée lors de la création de cette ligne

    - Cette boucle incrémente la variable RetourNombreCapteurs de +1 dès que la condition ValeurActu == ValeurDef est remplie

    - Ainsi, lorsque la boucle aura terminé d'analyser toutes les entrées de la table t, la suite du code appuie sur le bouton du VD défini, en fonction de s'il y a une ou plusieurs conditions vérifiées.

     

    C'est plus simple à maintenir, car imagine que tu veuilles monitorer 50 devices. Avec ton code actuel, tu auras 50*5=250 lignes de code à écrire (même s'il s'agit de copier/coller).

    Avec le code que j'ai fait, tu auras simplement à rajouter une entrée dans la table t pour chaque nouveau module, donc 50 lignes au total, le restant du code restant le même, que tu aies un seul module ou 1000 :)

    En cas de modification, tu retrouveras très rapidement tes petits!


  9. il y a 2 minutes, papaced a dit :

    merci pour tes réponses, je viens de corriger la fin de mon code avec le simple else et en plein "bug" et cela m'a directement éteint ma lampe. 

    Je ne suis pas sûr de bien comprendre. Cela fait ce que tu souhaitais si la lampe s'est éteinte?

    il y a 3 minutes, papaced a dit :

    pour le VD HueManager, non le bouton ON n'est pas nécessaire lors des changement de couleurs mais c'est le moyen que j'ai trouver pour allumer a chaque conditions.

    Donc, tu devrais pouvoir simplement "appuyer" sur les boutons des couleurs, sans avoir à allumer la lampe à chaque fois. Donc directement :

    --[[
    %% properties
    148 value
    76 value
    %% globals
    --]]
    
    local PorteEntree = fibaro:getValue(148, "value") -- valeur du capteur de porte entree
    fibaro:debug("valeur capteur porte entree="..PorteEntree) --affiche la valeur de ma variable1
    local PorteSectionelle = fibaro:getValue(76, "value") --valeur du capteur porte sectionnelle
    fibaro:debug("valeur capteur porte sectionelle="..PorteSectionelle) --affiche la valeur de ma variable2
    
    if (PorteEntree == "1") and (PorteSectionelle == "0") then
      fibaro:debug("alumage en bleu")
      fibaro:call(142, "pressButton", "20")--hue manager press Bt en bleu
      fibaro:debug("ok en bleu")
    elseif (PorteEntree == "0") and (PorteSectionelle == "1") then 
      fibaro:debug("alumage en rouge")
      fibaro:call(142, "pressButton", "16")--hue manager press Bt en rouge
      fibaro:debug("ok en rouge")
    elseif (PorteEntree == "1") and (PorteSectionelle == "1") then
      fibaro:debug("alumage en rouge")
      fibaro:call(142, "pressButton", "16")--hue manager press Bt en rouge
      fibaro:debug("ok en rouge")
    else
      fibaro:call(142, "pressButton", "2"); -- hue manager Bt Off
      fibaro:debug("eteint")
    end

     

    il y a 4 minutes, papaced a dit :

    pour l'insertion de code entre balises c'est bien ce que j'ai fait mais avec beaucoup de bug pour moi j'aurais certainement du utiliser un autre navigateur que "edge"! car la fenetre ne s'afiche pas tout le temps et après avoir valider soit j'ai un trait bleu soit ce que j'ai poster! 

    Etrange, effectivement, il y a un problème chez toi alors?

    Jamais rencontré de problème avec Firefox, Opera et Chrome pour info ;)


  10. Puisque tu es dans l'apprentissage du LUA, je te fournis le code suivant, qui fera exactement la même chose que ton code actuel, mais qui aura l'avantage de pouvoir être rapidement entretenu.

    Je te laisse l'étudier et pourra répondre à tes interrogations si besoin ;)

     

    --[[
    %% properties
    148 value
    76 value
    --]]
    
    local t = {}; -- On crée une table qui contiendra les données à vérifier
    -- On insert les données
    table.insert(t, {nom="Porte Entrée", id=148, valeur=1, couleur="bleu", btn=20});
    table.insert(t, {nom="Porte Sectionnelle", id=76, valeur=1, couleur="rouge", btn=16});
    
    -- On vérifie les valeurs
    local TotalTable, RetourNombreCapteurs, RetourCouleur, RetourBtn = #t, 0, "", "";
    for i=1,TotalTable do
      local Nom, ID, ValeurDef, Couleur, Btn = t[i].nom, t[i].id, tostring(t[i].valeur), t[i].couleur, tostring(t[i].btn);
      local ValeurActu = fibaro:getValue(ID, "value");
      fibaro:debug("Valeur Capteur "..Nom.." : "..ValeurActu);
      if ValeurActu == ValeurDef then
        RetourNombreCapteurs = RetourNombreCapteurs+1;
        RetourCouleur = Couleur;
        RetourBtn = Btn;
      end
    end
    
    -- Actions en fonction des vérifications précédentes
    if RetourNombreCapteurs == 1 then
      fibaro:debug("Allumage en "..RetourCouleur);
      fibaro:call(142, "pressButton", "1"); --hue manager press Bt On
      fibaro:call(142, "pressButton", RetourBtn); --hue manager press Bt
      fibaro:debug("OK en "..RetourCouleur);
    elseif RetourNombreCapteurs > 1 then
      fibaro:debug("Allumage en rouge");
      fibaro:call(142, "pressButton", "1"); --hue manager press Bt On
      fibaro:call(142, "pressButton", "16"); --hue manager press Bt en rouge
      fibaro:debug("OK en rouge");
    else
      fibaro:call(142, "pressButton", "2"); -- hue manager Bt Off
      fibaro:debug("Eteint")
    end

     


  11. Bonjour,

     

    ll faut utiliser les balises <code> qui se trouvent dans l'éditeur de message. Il est marérialisé par ces icones : </>

    Tu peux cliquer dessus et une fenêtre te demandera d'y insérer ton code. Dans la liste déroulante, il te suffit de sélectionner le langage utilité : LUA.

    De cette manière, la coloration syntaxique se fera automatiquement par rapport au langage de programmation sélectionné.

     

    Pour ton problème, je pense qu'il pourrait facilement être réglé en réduisant ton dernier pavé par un simple else :

    --[[
    %% properties
    148 value
    76 value
    %% globals
    --]]
    
    local PorteEntree = fibaro:getValue(148, "value") -- valeur du capteur de porte entree
    fibaro:debug("valeur capteur porte entree="..PorteEntree) --affiche la valeur de ma variable1
    local PorteSectionelle = fibaro:getValue(76, "value") --valeur du capteur porte sectionnelle
    fibaro:debug("valeur capteur porte sectionelle="..PorteSectionelle) --affiche la valeur de ma variable2
    
    if (PorteEntree == "1") and (PorteSectionelle == "0") then
      fibaro:debug("alumage en bleu")
      fibaro:call(142, "pressButton", "1")--hue manager press Bt On
      fibaro:call(142, "pressButton", "20")--hue manager press Bt en bleu
      fibaro:debug("ok en bleu")
    elseif (PorteEntree == "0") and (PorteSectionelle == "1") then 
      fibaro:debug("alumage en rouge")
      fibaro:call(142, "pressButton", "1")--hue manager press Bt On
      fibaro:call(142, "pressButton", "16")--hue manager press Bt en rouge
      fibaro:debug("ok en rouge")
    elseif (PorteEntree == "1") and (PorteSectionelle == "1") then
      fibaro:debug("alumage en rouge")
      fibaro:call(142, "pressButton", "1")--hue manager press Bt On
      fibaro:call(142, "pressButton", "16")--hue manager press Bt en rouge
      fibaro:debug("ok en rouge")
    else
      fibaro:call(142, "pressButton", "2"); -- hue manager Bt Off
      fibaro:debug("eteint")
    end

    Avec cette modification, la lumière sera systématiquement éteinte si aucune condition n'est respectée lors du lancement de la scène.

    Néanmoins, rien ne se passera si la scène n'est pas exécutée. Donc, dans la situation actuelle, si les valeurs des modules 76 et 148 n'est pas modifiée.

     

    NB : Je ne connais pas le VD Hue Manager, mais l'appui sur le bouton ON '1' est-il réellement nécessaire avant l'envoi de chaque couleur?

     


  12. Bonjour @papaced,

    Est-il possible que tu fasses simplement un copier/coller de ton code et que tu le colles entre balises <code> ?

    Nos yeux te remercient d'avance ;)

    Aussi, qu'est-ce qui fonctionne et ne fonctionne pas à l'heure actuelle sur ton code ?


  13. 30mn plus tard :

    5461396_Capturedecran2020-05-24a23_17_53.thumb.png.18a899dbf56fb924fc0f8dd6479aa5b6.png

    Mais rien de plus.

    Je ne me rends pas compte de la charge de travail, mais ça ne serait pas mieux de faire une VM de HC3 qu'on pourrait importer dans VMWare? :rolleyes:

    J'abandonne pour ce soir, je m'autoriserai un nouvel essai demain. S'il n'est pas concluant, désolé, mais je laisserai tomber ce simulateur qui fait carrément flipper oui! :lol:

    Pas le choix, il faudra m'envoyer une HC3! :60:

    • Haha 1

  14. Il y a 3 heures, Lazer a dit :

    Pour le "simulateur", c'est par ici : https://forum.fibaro.com/topic/49488-sdk-for-remote-and-offline-hc3-development/

     

    Perso je n'ai pas testé, mais ça a l'air puissant :)

     

     

    Merci! Après une première lecture, je ne pige pas tellement le fonctionnement, ni même la mise en place.

    Je vais essayer de creuser et voir si j'arrive à le mettre en place :rolleyes:


  15. Il y a 18 heures, Lazer a dit :

    Top :)

     

    Et si tu es super motivé, dansa la liste de course je pense qu'il pourrait être intéressant de migrer le VD Réveil avancé de @J3R3M car j'aimerais bien profiter de la migration sur HC3 pour l'utiliser, et il ne me semble pas que J3R3M soit motivé par la HC3 pour l'instant.

     

     

    Effectivement, je ne pense pas acheter de HC3 que je considère bien trop chère pour une évolution minime...

    Enfin, avoir plus de ressources quand la HC2 en disposait déjà de bien trop pour son utilisation...

     

    J’aimerais bien pouvoir proposer une version de ce VD pour HC3, mais la philosophie a visiblement complètement changé... S’il ne s’agissait que de remplacer des : par des ., ce serait top :D

    Je peux m’y mettre si un simulateur HC3 voit le jour, ou si on m’offre une HC3 :17:

    • Like 1
    • Upvote 1

  16. Essaie avec ce code dans la Main Loop :

    local ID = 11
    local Etat = fibaro:getValue(ID, "value");
    
    if Etat == "0" then
      fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1002);
      fibaro:debug("["..fibaro:getName(ID).."] Etat = "..Etat.." - Icone 1002");
    else
      fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1001);
      fibaro:debug("["..fibaro:getName(ID).."] Etat = "..Etat.." - Icone 1001");
    end

     


  17. Bonsoir,

    Alors oui, cela nécessite un peu d'adaptation du code, essaie plutôt comme cela (en remplaçant 999 par l'ID de ton Smart Implant)

    local Etat = fibaro:getValue(999, "value");
    
    if Etat == "0" then 
      fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1037)
    else
      fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1036)
    end

     


  18. Il y a 7 heures, Bloug a dit :

    Dans mon idée ...sorties SFP = liaison ET " Communication/échange " avec l'autre switch d'où ma question sur l'utilité d'avoir la même marque  !

    Le port SFP permet l'échange et la communication comme un port RJ45, avec un plus grand débit.

    En théorie, ce qu'il est possible de faire au niveau d'une interface éventuellement commune pour deux périphériques connectés en SFP, il est normalement possible de le faire également en RJ45 :)

    Mais effectivement, sans aucun doute, s'il s'agit de la même marque, ça sera plus simple à gérer dans tous les cas, sans le moindre doute, si besoin de gérer il y a.

×