Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

Noeud DIY Led Strip WS2812B et intégration dans Jeedom

Retrouvez ici des sujets concernant le protocole mySensors et les modules domotiques de type mySensors utilisés avec JEEDOM
/!\ Plugin mySensors non officiel
Fred31
Timide
Messages : 1
Inscription : 05 févr. 2018, 17:45

Noeud DIY Led Strip WS2812B et intégration dans Jeedom

Message par Fred31 » 05 févr. 2018, 18:52

Bonjour,

J'ai intégré la gateway Mysensors sur ma rapsberry PI hébergeant Jeedom.
Je me suis crée un nœud Mysensors 2.2.0 pour contrôler un bandeau LED WS2812B que j'ai intégré dans mon meuble TV.
Sur ce nœud, je désirerais contrôler les fonction suivante:
- L'allumage et l'extinction du bandeau LED
- La luminosité
- La couleur RVB
- La couleur HSV
- Le mode (différent effet Fastled)
- La vitesse des effets

J'utilise le type de noeud S_RGB_LIGHT et S_DIMMER.
Pour la l'allumage/extinction et la luminosité, j'utilise le type de message V_STATUS et V_PERCENTAGE.
Pour la couleur RVB, j'utilise le message V_RGB.
Pour la couleur HSV (Pour l'instant, j'ai simplifier en ne gérant que le HUE), j'utilise le type de message V_VAR1
Pour le mode, j'utilise le type de message V_VAR2.
Pour la vitesse, j'utilise le type de message V_VAR3.

Après quelques recherches sur le net et le recoupage de plusieurs sketch Mysensors, voici le code Arduino que j'utilise actuellement pour ce noeud:

Code : Tout sélectionner

// Enable debug prints to serial monitor
#define MY_DEBUG 

// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
//#define MY_RF24_PA_LEVEL RF24_PA_MAX
// Enabled repeater feature for this node
//#define MY_REPEATER_FEATURE
#define MY_NODE_ID 9

#include <MySensors.h>

#include "FastLED.h"
FASTLED_USING_NAMESPACE

#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000)
#warning "Requires FastLED 3.1 or later; check github for latest code."
#endif

#define DATA_PIN    6
//#define CLK_PIN   4
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS    112
CRGB leds[NUM_LEDS];

const int RGB_LightChild = 0 ;                // Child Id's, standard light child on/off/ dim
const int Dimmer_LightChild = 1 ;                // Child Id's, standard light child on/off/ dim

uint8_t gHue = 0;
unsigned int currentSpeed = 0 ;
int brightness = 0;
unsigned int requestedMode = 0 ;
int messageType = 0 ;
int previousMessageType = -1;
int state=0;
int lstate=0;

String hexColor = "000000" ;

unsigned long previousTime = 0 ;

MyMessage statuslightRGBMsg(Dimmer_LightChild,  V_STATUS);        // standard messages, light
MyMessage lightRGBMsg(RGB_LightChild,  V_RGB);        // standard messages, light
MyMessage lightHueMsg(Dimmer_LightChild,  V_VAR2);        // standard messages, light
MyMessage lightRGBdimmerMsG(Dimmer_LightChild ,V_PERCENTAGE); 
MyMessage lightRGBModeMsG(Dimmer_LightChild ,V_VAR3); 
MyMessage lightRGBModeSpeedMsG(Dimmer_LightChild ,V_VAR4); 

void setup() {
  delay(1000);
  Serial.begin(115200);
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(brightness);
  FastLED.show();
}

void presentation() {
  sendSketchInfo("Meuble TV", "1.0");
  present(RGB_LightChild, S_RGB_LIGHT, "RGB Color", true);
  present(Dimmer_LightChild, S_DIMMER, "RGB Dimmer", true);
}

void loop() {
  switch (messageType) {

    //************** CASE 1 **************
    case (1):
      Serial.print("RGB color override: "); Serial.println(hexColor);
      colorWipe();
      messageType = 0 ;
      break;

    //************** CASE 2 **************
    case (2):
      Serial.print("Hue color override: "); Serial.println(gHue);
      colorWipeHue();
      messageType = 0 ;
      break;

    //************** CASE 3 **************
    case (3):
      if ( (previousTime + (long) currentSpeed ) < millis() ) {
        if (requestedMode == 2) {rainbow(); FastLED.show(); }
        if (requestedMode == 3) {rainbowWithGlitter();FastLED.show(); }
        if (requestedMode == 4) {addGlitter(80);FastLED.show(); }
        if (requestedMode == 5) {confetti();FastLED.show(); }
        if (requestedMode == 6) {sinelon();FastLED.show(); }
        if (requestedMode == 7) {bpm();FastLED.show(); }
        if (requestedMode == 8) {juggle();FastLED.show(); }
        previousTime = millis();
      }
      break;

    //************** CASE 4 **************
    case (4):   // Adjust timing of case 2 using non-blocking code (no DELAYs)
      Serial.print("Case 3 received. Speed set to: "); Serial.print(currentSpeed); Serial.println(" ms.");
      messageType = 0; 
      break;

    //************** CASE 5 **************
    case (5):   // Adjust brightness of whole strip of case 2 using non-blocking code (no DELAYs)
      Serial.print("Case 4 received. Brightness set to: "); Serial.println(brightness);
      FastLED.setBrightness(brightness); FastLED.show();
      messageType = previousMessageType ; // We get off type 4 ASAP
      break;

  }
}

void receive(const MyMessage &message) {
  Serial.println("Message received: ");

  if (message.type == V_STATUS ) {
    Serial.println("V_STATUS command received...");
    int state = message.getInt();
    if (lstate != state) {
      if (state == 0) {
        brightness = map(0, 0, 100, 0, 255);
        lstate = state;
      }
      if (state == 1){
        brightness = map(100, 0, 100, 0, 255);
        lstate = state;
      }
    }
    Serial.println(brightness);
    previousMessageType = messageType;
    messageType = 5 ;
    Serial.print("RGB brightness: "); Serial.println(brightness);
  }
  
  if (message.type == V_RGB) { 
    messageType = 1 ;
    hexColor = message.getString();
    Serial.print("RGB color: "); Serial.println(hexColor);
  }
  
  if (message.type == V_VAR1) { 
    messageType = 2 ;
    gHue = message.getInt();
    Serial.print("Hue color: "); Serial.println(gHue);
  }
  
  if (message.type == V_VAR2) { 
    requestedMode = message.getInt();
    Serial.println(requestedMode);
    messageType = 3 ;
    Serial.print("Neo mode: "); Serial.println(requestedMode);
  }

  if (message.type == V_VAR3) { // This line is for the speed of said mode
    currentSpeed = message.getInt() ;
    Serial.println(currentSpeed);
    messageType = 4 ;
    Serial.print("Neo speed: "); Serial.println(currentSpeed);
  }

  if (message.type == V_PERCENTAGE) { // This line is for the brightness of said mode
    brightness = map(message.getInt(), 0, 100, 0, 255);
    //if(brightness > 255) {brightness = 255;}
    //if(brightness < 0) {brightness = 0;}
    Serial.println(brightness);
    previousMessageType = messageType;
    messageType = 5 ;
    Serial.print("RGB brightness: "); Serial.println(brightness);
  }
}


//********************** FastLED FUNCTIONS ***********************


void colorWipe() {
  for (int i = 0; i < NUM_LEDS ; i++) {
    leds[i] = strtol( &hexColor[0], NULL, 16);
    FastLED.show();
  }
}

void colorWipeHue() {
  for (int i = 0; i < NUM_LEDS ; i++) {
    leds[i] = CHSV( gHue, 200, 255);
    FastLED.show();
  }
}

void rainbow()
{
  // FastLED's built-in rainbow generator
  fill_rainbow( leds, NUM_LEDS, gHue++, 2);
}

void rainbowWithGlitter()
{
  // built-in FastLED rainbow, plus some random sparkly glitter
  fill_rainbow( leds, NUM_LEDS, gHue++, 2);
  FastLED.show();
  addGlitter(80);
}

void addGlitter( fract8 chanceOfGlitter)
{
  if ( random8() < chanceOfGlitter) {
    leds[ random16(NUM_LEDS) ] += CRGB::White;
  }
  
}

void confetti()
{
  // random colored speckles that blink in and fade smoothly
  fadeToBlackBy( leds, NUM_LEDS, 10);
  int pos = random16(NUM_LEDS);
  leds[pos] += CHSV( gHue + random8(64), 200, 255);
}

void sinelon()
{
  // a colored dot sweeping back and forth, with fading trails
  fadeToBlackBy( leds, NUM_LEDS, 20);
  int pos = beatsin16(13, 0, NUM_LEDS);
  leds[pos] += CHSV( gHue, 255, 192);
}

void bpm()
{
  // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
  uint8_t BeatsPerMinute = 62;
  CRGBPalette16 palette = PartyColors_p;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  for ( int i = 0; i < NUM_LEDS; i++) { //9948
    leds[i] = ColorFromPalette(palette, gHue + (i * 2), beat - gHue + (i * 10));
  }
}

void juggle() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds, NUM_LEDS, 20);
  byte dothue = 0;
  for ( int i = 0; i < 8; i++) {
    leds[beatsin16(i + 7, 0, NUM_LEDS)] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}
Ma gateway Mysensors sur le Raspberry pi détecte bien le noeud:

Code : Tout sélectionner

Feb  5 15:19:19 jeedom mysgw: TSF:MSG:READ,9-9-255,s=255,c=3,t=7,pt=0,l=0,sg=0:
Feb  5 15:19:19 jeedom mysgw: TSF:MSG:BC
Feb  5 15:19:19 jeedom mysgw: TSF:MSG:FPAR REQ,ID=9
Feb  5 15:19:19 jeedom mysgw: TSF:PNG:SEND,TO=0
Feb  5 15:19:19 jeedom mysgw: TSF:CKU:OK
Feb  5 15:19:19 jeedom mysgw: TSF:MSG:GWL OK
Feb  5 15:19:19 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=8,pt=1,l=1,sg=0,ft=0,st=OK:0
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=3,t=24,pt=1,l=1,sg=0:1
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:PINGED,ID=9,HP=1
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=25,pt=1,l=1,sg=0,ft=0,st=OK:1
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=0,t=17,pt=0,l=5,sg=0:2.2.0
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=3,t=6,pt=1,l=1,sg=0:0
Feb  5 15:19:21 jeedom mysgw: GWT:RFC:C=1,MSG=9;255;3;0;6;M
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=OK:M
Feb  5 15:19:21 jeedom mysgw: GWT:RFC:C=0,MSG=9;255;3;0;6;M
Feb  5 15:19:21 jeedom mysgw: !TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=6,pt=0,l=1,sg=0,ft=0,st=NACK:M
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=3,t=11,pt=0,l=9,sg=0:Meuble TV
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=0,c=0,t=26,pt=0,l=9,sg=0:RGB Color
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:ACK REQ
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=0,c=0,t=26,pt=0,l=9,sg=0,ft=0,st=OK:RGB Colo
r
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=1,c=0,t=4,pt=0,l=10,sg=0:RGB Dimmer
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:ACK REQ
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=1,c=0,t=4,pt=0,l=10,sg=0,ft=0,st=OK:RGB Dimm
er
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:READ,9-9-0,s=255,c=3,t=26,pt=1,l=1,sg=0:2
Feb  5 15:19:21 jeedom mysgw: TSF:MSG:SEND,0-0-9-9,s=255,c=3,t=27,pt=1,l=1,sg=0,ft=0,st=OK:1
Feb  5 15:19:52 jeedom mysgw: TSF:SAN:OK
Dans MYSController, le noeud se comporte à peu près comme je le désire.

Par contre, j'ai quelque soucis avec l'intégration dans Jeedom.
Lors de la découverte de mon noeud dans Jeedom, les informations sur les 2 type de Noeud sont bien découvert (S_RGB_LIGHT et S_DIMMER) mais par contre seules les actions DIMMER remontent:
Image

Je me dis que pour les autres ce n'est pas trop grave, je les intègre manuellement:
Image

AInsi fait mon Widget se présente de la manière suivante:
Image

Voici les problématique que je rencontre avec la configuration décrite ci-dessus:
  1. Lorsque je sélectionne une couleur dans le widget couleur, un message est bien envoyé mais il est vide
  2. Lorsque j'utilise le curseur sur la partie DIMMER, cela fait bouger tous les autres mais cela m'envoie bien un message V_DIMMER qui est bien pris en compte par le noeud
  3. Lorsque j'utilise le curseur sur la partie HSV ou vitesse, en plus de faire bouger tous les curseurs du widget, cela m'envoie un message sur l'objet demandé mais ce message est vide (pas de valuers)
  4. Et pour terminer, je n'arrive pas à trouver ou je dis renseigner les #listvalue# de l'action liste pour pouvoir choisir les effets Fastled via une liste déroulante
Merci d'avance pour votre aide

Bonne fin de journée

Fred
Pièces jointes
Jeedom - Mysensors - Meuble - Widget.png
Jeedom - Mysensors - Meuble - Widget.png (9.51 Kio) Consulté 536 fois
Jeedom - Mysensors - Meuble Découverte Défaut.png
Jeedom - Mysensors - Meuble Découverte Défaut.png (48.49 Kio) Consulté 536 fois
Jeedom - Mysensors - Meuble - Full.png
Jeedom - Mysensors - Meuble - Full.png (70.94 Kio) Consulté 536 fois

Fifut
Timide
Messages : 14
Inscription : 26 avr. 2017, 18:49

Re: Noeud DIY Led Strip WS2812B et intégration dans Jeedom

Message par Fifut » 09 mars 2018, 19:31

Salut.

Je réponds tard a ton poste mais en ce moment je suis plus trop sur ma domotique.

Tout ne remonte pas dans jeedom. C'est normale d'avoir à les intégrer manuellement certaine chose, notamment les V_VAR.

1.et 3. Normale, il y a rien dans tes cases "valeur"

2. Et 3. Je pense que ton problème et le même que moi et que la plupart des personnes qui utilise mysensors avec jeedom.
Jeedom ou le plugin jeedom ne supporte pas un ChildId pour plusieurs message.

Donc tu dois déclarer autant de childId différents que de message.
Sinon quand tu vas envoyer une commande depuis jeedom a ton noeud, l'acquittement qui reviens en retour sera interprété pour la première action dans jeedom. Donc modifiera la 1er action déclarer avec le même id.

C'est un problème que tout le monde rencontre mais qui n'est malheureusement pas mis en avant sur le forum.
viewtopic.php?f=35&t=33062
viewtopic.php?f=35&t=26867

Mathieu
Timide
Messages : 33
Inscription : 10 févr. 2016, 12:15

Re: Noeud DIY Led Strip WS2812B et intégration dans Jeedom

Message par Mathieu » 13 mai 2018, 10:31

Bonjour a tous,
Je galère un peu à essayer de parameter mon contrôleur LED RGB mysensors dans Jeedom pour avoir un visuel sympa et pratique.
Grace à ton post @Fifut je vais modifier mon sketch pour dissocier les ID-CHILD des différentes commandes (RGB, Dimmer, Programme, etc...).
Puis je vais bosser sur l'intégration du widget Circle.

A ce stade, je voulais paramétrer une liste box pour la selection du programme d'eclairage.
Savez vous ou il faut paramétrer les valeurs de la listbox (j'ai vu un tuto pour le faire avec un virtuel mais visiblement l'option est disponible dans les commandes du plugin mysensor). Pas contre, je ne vois pas où. Du coup j'ai bien une liste box mais vide !
Jeedom 2.4.6 sous Debian 8 (jessie) sur Serveur ESXi 5.5
Domotique sur 2 protocoles MySensor (Arduino) et KNX
Plugin Mobile avec Homebridge

Avatar de l’utilisateur
dough29
Actif
Messages : 676
Inscription : 30 nov. 2014, 12:55

Re: Noeud DIY Led Strip WS2812B et intégration dans Jeedom

Message par dough29 » 16 juil. 2018, 21:59

Fifut a écrit :
09 mars 2018, 19:31
1.et 3. Normale, il y a rien dans tes cases "valeur"
Je fais face au même problème, je sélectionne une couleur mais le message qui part est vide...

Si je mets une donnée dans "valeur" elle part bien.

Comment récupérer le code couleur sélectionné dans le champs "Valeur" ? :?

Merci.
Jeedom maître (Docker sur Synology DSM6 + téléinfo)
Jeedom esclave (Raspberry Pi 2 B + Z-Wave + MySensors)
récit

Répondre

Revenir vers « [Plugin Tiers] MySensors »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité