Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ergonome
    Inscrit en
    janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : janvier 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Synchroniser une valeur séparée d'une couleur RGBW (Only R, G, B, or W)

    Bonjour,

    je suis nouveau sur le forum et commence un peu a toucher au code LUA pour mon système FIBARO qui pilote mes éléments Z-WAVE.

    Ce que je cherche à faire, c'est de prendre comme trigger une seule valeur d'une couleur RBGW d'un module pour définir une action (en l'occurence changement d'une autre valeur RGBW sur un autre module )

    Ce qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    local startSource = fibaro:getSourceTrigger();
    if (
    ( fibaro:getValue(447, "color") == "0,255,0,0" )
    or
    startSource["type"] == "other"
    )
     
    then
    	fibaro:call(425, "setR", "255");
    end
    Ce qui implique que le module 447 doit précisement être sur la valeur 0 pour R(red), 255 pour G(green), 0 pour B(blue) et 0 pour W(white).
    Ce que j'aimerais faire, c'est lancer l'action sur le deuxième module que si une des valeurs ne change ( ici, le G), peut-importe la valeur des autres couleurs de ce même module,.
    Voila en code ce que j'essaye de faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    local startSource = fibaro:getSourceTrigger();
    if (
    ( fibaro:getValue(447, "G") == "255" )
    or
    startSource["type"] == "other"
    )
     
    then
    	fibaro:call(425, "setR", "255");
    end
    Mais ça ne marche pas, bien entendu ;-)

    Quelqu'un aurait-il une idée ?
    Merci bcp.
    ++

    John

  2. #2
    Membre régulier
    Homme Profil pro
    Ing. Hydraulicien
    Inscrit en
    août 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ing. Hydraulicien
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2012
    Messages : 26
    Points : 71
    Points
    71

    Par défaut

    Bonjour,

    Déjà, pour désigner le language, il faudrait écrire "Lua" et non pas "LUA", en lettres capitales.

    Concernant de manière spécifique le problème posé, je peux faire la suggestion suivante. L'idéal, à mon sens, serait de réparer les valeurs de R, G, B et W de manières distincte et ensuite d'utiliser la valeur spécifique qui nous intéresse.

    On sait que la couleur retournée est encodée sous la forme de quatre valeurs entières, comprises entre 0 et 255, séparées par une virgule.
    Donc quelque chose comme ça: "valeur1,valeur2,valeur3,valeur4".

    Si l'on souhaite récupérer distinctement ces valeurs, un moyen élégant et court à écrire serait de s'appuyer sur les expressions régulières (pattern matching).

    Cela me permet de produire l'exemple suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    local color = "25,14,255,0"
    local r, g, b, w = string.match(color, "(%d+),(%d+),(%d+),(%d+)")
    print(r, g, b, a)
    Le symbole %d me permet de capturer un chiffre (valeur comprise entre 0 et 9). Le symbole "+" qui le suit permet de préciser qu'il s'agit d'une suite d'au moins 1 caractère que je cherche. Donc par exemple, une suite continue de 1, 2, 3 ou n chiffres compris entre 0 et 9.
    Les parenthèses me permettent de capturer toutes les occurrences désignées et de les retourner vers les variables locales r, g, b et w.

    Par la suite, tu peux maintenant t'intéresser à l'unique variable g, qui représente le canal Green (vert). Attention, les valeurs sont retournées sous forme de chaine de caractère (type string).

    Je te laisse implémenter la suite.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ergonome
    Inscrit en
    janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : janvier 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Hello,

    merci bcp pour ton retour, je pense comprendre ce que tu as fait...

    Je vais essayer d'implémenter cela dès ce soir, mais ça me semble très clair.
    Je reviens vers toi avec le résultat ;-)

    Encore un grand merci !
    ++

    John

  4. #4
    Membre régulier
    Homme Profil pro
    Ing. Hydraulicien
    Inscrit en
    août 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ing. Hydraulicien
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2012
    Messages : 26
    Points : 71
    Points
    71

    Par défaut

    Ces liens pourraient faciliter la compréhension:


  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ergonome
    Inscrit en
    janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : janvier 2017
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Hello Roland,

    je me suis enfin décidé à implémenter ta solution...

    Cela marche partiellement ;-) En gros pour une certaine valeur, ça fonctionne ( valeur 0 ) mais pour l'autre ( valeur 255 ) ça ne se synchronise pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    --[[
    %% properties
    447 color
    %% events
    %% globals
    --]]
     
    local color = "255,255,255,255"
    local r, g, b, w = string.match(color, "(%d+),(%d+),(%d+),(%d+)")
    print(r, g, b, a)
    local startSource = fibaro:getSourceTrigger();
    if (
     ( fibaro:getValue(447, "g") == "0" )
    or
    startSource["type"] == "other"
    )
     
     
    then
    	fibaro:call(425, "setR", "0");
    end
    Ceci fonctionne. Dès que la valeur g 447 passe à 0, la valeur R du 425 passe bien à 0, et ce automatiquement. Super !!!!
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    --[[
    %% properties
    447 color
    %% events
    %% globals
    --]]
     
    local color = "255,255,255,255"
    local r, g, b, w = string.match(color, "(%d+),(%d+),(%d+),(%d+)")
    print(r, g, b, a)
    local startSource = fibaro:getSourceTrigger();
    if (
     ( fibaro:getValue(447, "g") == "255" )
    or
    startSource["type"] == "other"
    )
     
     
    then
    	fibaro:call(425, "setR", "255");
    end
    Cela ne fonctionne pas vraiment. Enfin, cela fonctionne lorsque je lance la scène manuellement, mais elle ne fonctionne pas automatiquement. Et ça, ça reste un mystère pour moi ;-)
    J'essaye de comprendre également comment ne pas spécifier une valeur précise pour le G de 447 et le R de 425, et plutôt essayer de dire que si G de 447 est sur un chiffre (%d+), alors le R de 425 prend exactement la même valeur que le G du 447, mais ça non plus, malgré mes recherches, je n'arrive pas à mettre en place...

    Décidément, le Lua et moi, ça fait 2 ;-)...

  6. #6
    Membre régulier
    Homme Profil pro
    Ing. Hydraulicien
    Inscrit en
    août 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ing. Hydraulicien
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2012
    Messages : 26
    Points : 71
    Points
    71

    Par défaut

    Ton implémentation n'est pas correcte.
    La variable color dans ton contexte ne veut rien dire. Je l'ai définie juste pour l'exemple.
    Dans ton cas, cette variable doit plutôt récuperer le contenu de fibaro:getValue(). Ceci devrait plus traduire ta situation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    --[[
    %% properties
    447 color
    %% events
    %% globals
    --]]
     
    local startSource = fibaro:getSourceTrigger();
    local color = fibaro:getValue(447, "color")
    local r, g, b, w = string.match(color, "(%d+),(%d+),(%d+),(%d+)")
    if g == "255" or startSource["type"] == "other" then
      fibaro:call(425, "setR", "255")
    end

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2015, 14h47
  2. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  3. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  4. tester une valeur et affecter une valeur
    Par Elise0251 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 29/07/2009, 16h31
  5. Réponses: 10
    Dernier message: 30/11/2006, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo