1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

SOLVED WS2812B + Adruino - Hyperion has no valid config?

Discussion in 'Hardware Support' started by Zeze21, 19 February 2019.

  1. Zeze21

    Zeze21 New Member

    Messages:
    7
    Hardware:
    RPi3
    Hi @ all!

    I have made a Setup with an Raspberry Pi 3 B+ (will probably be replaced later by an Odroid C2) and an Androinu Uno (clone)
    When I boot up the Raspberry the LEDs turn on for about a second (bright white) and then turn off again. Unfortunately nothing else works. :(

    When I check the status via ssh I get "No valid config found"

    Code:
    hyperiond /storage/.kodi/userdata/service.hyperion/hyperion.config.jsonHyperion Ambilight Deamon (714)Version : 22f7be8df010fe8f0a51e3677fe0c8e709042622Build Time: Jan 28 2019 10:12:58ERROR: No valid config found


    My hyperion.config.json
    Code:
    [LIST=1]
    [*]// Automatically generated configuration file for Hyperion ambilight daemon
    [*]// Notice: All values are explained with comments at our wiki: wiki.hyperion-project.org (config area)
    [*]// Generated by: HyperCon (The Hyperion deamon configuration file builder)
    [*]// Created with HyperCon V1.03.3 (22.10.2017)
    [*]{
    [*]// DEVICE CONFIGURATION
    [*]"device" :
    [*]{
    [*]"name" : "MyHyperionConfig",
    [*]"type" : "adalight",
    [*]"output" : "/dev/ttyAMA0",
    [*]"rate" : 500000,
    [*]"delayAfterConnect" : 0,
    [*]"colorOrder" : "grb"
    [*]},
    [*]// COLOR CALIBRATION CONFIG
    [*]"color" :
    [*]{
    [*]"channelAdjustment" :
    [*][
    [*]{
    [*]"id" : "default",
    [*]"leds" : "*",
    [*]"pureRed" :
    [*]{
    [*]"redChannel": 255,
    [*]"greenChannel": 0,
    [*]"blueChannel": 0
    [*]},
    [*]"pureGreen" :
    [*]{
    [*]"redChannel": 0,
    [*]"greenChannel": 255,
    [*]"blueChannel": 0
    [*]},
    [*]"pureBlue" :
    [*]{
    [*]"redChannel": 0,
    [*]"greenChannel": 0,
    [*]"blueChannel": 255
    [*]}
    [*]}
    [*]],
    [*]"temperature" :
    [*][
    [*]{
    [*]"id" : "default",
    [*]"leds" : "*",
    [*]"correctionValues" :
    [*]{
    [*]"red" : 255,
    [*]"green" : 255,
    [*]"blue" : 255
    [*]}
    [*]}
    [*]],
    [*]"transform" :
    [*][
    [*]{
    [*]"id" : "default",
    [*]"leds" : "*",
    [*]"hsl" :
    [*]{
    [*]"saturationGain" : 1.0000,
    [*]"luminanceGain": 1.0000,
    [*]"luminanceMinimum": 0.1400
    [*]},
    [*]"red" :
    [*]{
    [*]"threshold" : 0.0000,
    [*]"gamma" : 2.5000
    [*]},
    [*]"green" :
    [*]{
    [*]"threshold" : 0.0000,
    [*]"gamma" : 2.5000
    [*]},
    [*]"blue" :
    [*]{
    [*]"threshold" : 0.0000,
    [*]"gamma" : 2.5000
    [*]}
    [*]}
    [*]],
    [*]// SMOOTHING CONFIG
    [*]"smoothing" :
    [*]{
    [*]"type" : "linear",
    [*]"time_ms" : 200,
    [*]"updateFrequency" : 20.0000,
    [*]"updateDelay" : 0
    [*]}
    [*]},
    [*]// NO V4L2 GRABBER CONFIG
    [*]// FRAME GRABBER CONFIG
    [*]"framegrabber" :
    [*]{
    [*]"width" : 64,
    [*]"height" : 64,
    [*]"frequency_Hz" : 10.0,
    [*]"priority" : 890
    [*]},
    [*]// BLACKBORDER CONFIG
    [*]"blackborderdetector" :
    [*]{
    [*]"enable" : true,
    [*]"threshold" : 0.03,
    [*]"unknownFrameCnt" : 600,
    [*]"borderFrameCnt" : 50,
    [*]"maxInconsistentCnt" : 10,
    [*]"blurRemoveCnt" : 1,
    [*]"mode" : "default"
    [*]},
    [*]// BOOTEFFECT CONFIG
    [*]"bootsequence" :
    [*]{
    [*]"color" : [0,0,0],
    [*]"effect" : "Random",
    [*]"duration_ms" : 3000,
    [*]"priority" : 700
    [*]},
    [*]// JSON SERVER CONFIG
    [*]"jsonServer" :
    [*]{
    [*]"port" : 19444
    [*]},
    [*]// PROTO SERVER CONFIG
    [*]"protoServer" :
    [*]{
    [*]"port" : 19445
    [*]},
    [*]// EFFECT PATH
    [*]"effects" :
    [*]{
    [*]"paths" :
    [*][
    [*]"/storage/hyperion/effects",
    [*]"/usr/share/hyperion/effects"
    [*]]
    [*]},
    [*]// NO KODI CHECK CONFIG
    [*]// NO BOBLIGHT SERVER CONFIG
    [*]// NO JSON/PROTO FORWARD CONFIG
    [*]// LED CONFIGURATION
    [*]"leds" :
    [*][
    [*]{
    [*]"index" : 0,
    [*]"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
    [*]"vscan" : { "minimum" : 0.9600, "maximum" : 1.0000 }
    [*]}...
    [*]],
    [*]"endOfJson" : "endOfJson"
    [*]}
    [/LIST]
    

    The Code on the Andruino
    Code:
    #include "FastLED.h"
    
    #define ANALOG_MODE_AVERAGE  0
    #define ANALOG_MODE_LAST_LED 1
    
    /**************************************
       S E T U P
       set following values to your needs
    **************************************/
    
    #define INITIAL_LED_TEST_ENABLED true
    #define INITIAL_LED_TEST_BRIGHTNESS 155//0..255
    #define INITIAL_LED_TEST_TIME_MS 500  // 10..
    
    // Number of leds in your strip. set to "1" and ANALOG_OUTPUT_ENABLED to "true" to activate analog only
    // As of 26/1/2017:
    // 582 leaves ZERO bytes free and this
    // 410 is ok
    // tested with 500 leds and is fine (despite the warning)
    #define MAX_LEDS 136 // Hier wird die LED Anzahl definiert, bitte am Anfang zählen und dementsprechend ändern!
    
    // type of your led controller, possible values, see below
    #define LED_TYPE WS2812B //Nichts ändern, da wird WS2812B LEDs nutzen
    
    // 3 wire (pwm): NEOPIXEL BTM1829 TM1812 TM1809 TM1804 TM1803 UCS1903 UCS1903B UCS1904 UCS2903 WS2812 WS2852
    //               S2812B SK6812 SK6822 APA106 PL9823 WS2811 WS2813 APA104 WS2811_40 GW6205 GW6205_40 LPD1886 LPD1886_8BIT
    // 4 wire (spi): LPD8806 WS2801 WS2803 SM16716 P9813 APA102 SK9822 DOTSTAR
    
    // For 3 wire led stripes line Neopixel/Ws2812, which have a data line, ground, and power, you just need to define DATA_PIN.
    // For led chipsets that are SPI based (four wires - data, clock, ground, and power), both defines DATA_PIN and CLOCK_PIN are needed
    
    // DATA_PIN, or DATA_PIN, CLOCK_PIN
    #define LED_PINS 6        // 3 wire leds Dort wird der PIN angegeben, wo das Daten Signal der LEDs angeschlossen wird!
    //#define LED_PINS 6, 13  // 4 wire leds (Nicht benötigt, da wir WS2812B LEDs nutzen!
    
    #define COLOR_ORDER GRB  // colororder of the stripe, set RGB in hyperion // Nichts Ändern!
    
    #define OFF_TIMEOUT 15000    // ms to switch off after no data was received, set 0 to deactivate. Nichts Ändern!
    
    // analog rgb uni color led stripe - using of hyperion smoothing is recommended
    // ATTENTION  this pin config is default for atmega328 based arduinos, others might work to
    //            if you have flickering analog leds this might be caused by unsynced pwm signals
    //            try other pins is more or less the only thing that helps
    #define ANALOG_OUTPUT_ENABLED false
    #define ANALOG_MODE           ANALOG_MODE_LAST_LED  // use ANALOG_MODE_AVERAGE or ANALOG_MODE_LAST_LED
    #define ANALOG_GROUND_PIN     8                     // additional ground pin to make wiring a bit easier
    #define ANALOG_RED_PIN        9
    #define ANALOG_GREEN_PIN      10
    #define ANALOG_BLUE_PIN       11
    
    // overall color adjustments
    #define ANALOG_BRIGHTNESS_RED   255              // maximum brightness for analog 0-255
    #define ANALOG_BRIGHTNESS_GREEN 255              // maximum brightness for analog 0-255
    #define ANALOG_BRIGHTNESS_BLUE  255              // maximum brightness for analog 0-255
    
    #define BRIGHTNESS 255                      // maximum brightness 0-255
    #define DITHER_MODE BINARY_DITHER           // BINARY_DITHER or DISABLE_DITHER
    #define COLOR_TEMPERATURE CRGB(255,255,255) // RGB value describing the color temperature
    #define COLOR_CORRECTION  TypicalLEDStrip   // predefined fastled color correction
    //#define COLOR_CORRECTION  CRGB(255,255,255) // or RGB value describing the color correction
    
    // Baudrate, higher rate allows faster refresh rate and more LEDs
    //#define serialRate 460800      // use 115200 for ftdi based boards
    //#define serialRate 115200      // use 115200 for ftdi based boards
    #define serialRate 500000         // use 115200 for ftdi based boards
    
    
    /**************************************
       A D A L I G H T   C O D E
       no user changes needed
    **************************************/
    
    // Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
    uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
    
    unsigned long endTime;
    
    // Define the array of leds
    CRGB leds[MAX_LEDS];
    
    // set rgb to analog led stripe
    void showAnalogRGB(const CRGB& led) {
      if (ANALOG_OUTPUT_ENABLED) {
        byte r = map(led.r, 0,255,0,ANALOG_BRIGHTNESS_RED);
        byte g = map(led.g, 0,255,0,ANALOG_BRIGHTNESS_GREEN);
        byte b = map(led.b, 0,255,0,ANALOG_BRIGHTNESS_BLUE);
        analogWrite(ANALOG_RED_PIN  , r);
        analogWrite(ANALOG_GREEN_PIN, g);
        analogWrite(ANALOG_BLUE_PIN , b);
      }
    }
    
    // set color to all leds
    void showColor(const CRGB& led) {
      #if MAX_LEDS > 1 || ANALOG_OUTPUT_ENABLED == false
      LEDS.showColor(led);
      #endif
      showAnalogRGB(led);
    }
    
    // switch of digital and analog leds
    void switchOff() {
      #if MAX_LEDS > 1 || ANALOG_OUTPUT_ENABLED == false
      memset(leds, 0, MAX_LEDS * sizeof(struct CRGB));
      FastLED.show();
      #endif
      showAnalogRGB(leds[0]);
    }
    
    // function to check if serial data is available
    // if timeout occured leds switch of, if configured
    bool checkIncommingData() {
      boolean dataAvailable = true;
      while (!Serial.available()) {
        if ( OFF_TIMEOUT > 0 && endTime < millis()) {
          switchOff();
          dataAvailable = false;
          endTime = millis() + OFF_TIMEOUT;
        }
      }
    
      return dataAvailable;
    }
    
    // main function that setups and runs the code
    void setup() {
      Serial.begin(serialRate);
    
      // analog output
      if (ANALOG_OUTPUT_ENABLED) {
        // additional ground pin to make wiring a bit easier
        pinMode(ANALOG_GROUND_PIN, OUTPUT);
        digitalWrite(ANALOG_GROUND_PIN, LOW);
        pinMode(ANALOG_BLUE_PIN , OUTPUT);
        pinMode(ANALOG_RED_PIN  , OUTPUT);
        pinMode(ANALOG_GREEN_PIN, OUTPUT);
      }
    
      int ledCount = MAX_LEDS;
      if (ANALOG_MODE == ANALOG_MODE_LAST_LED) {
        ledCount--;
      }
    
      #if MAX_LEDS > 1 || ANALOG_OUTPUT_ENABLED == false
        FastLED.addLeds<LED_TYPE, LED_PINS, COLOR_ORDER>(leds, ledCount);
      #endif
      // color adjustments
      FastLED.setBrightness ( BRIGHTNESS );
      FastLED.setTemperature( COLOR_TEMPERATURE );
      FastLED.setCorrection ( COLOR_CORRECTION );
      FastLED.setDither     ( DITHER_MODE );
    
      // initial RGB flash
      #if INITIAL_LED_TEST_ENABLED == true
      for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
      {
        showColor(CRGB(v,v,v));
        delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
      }
      for (int v=0;v<INITIAL_LED_TEST_BRIGHTNESS;v++)
      {
        showColor(CRGB(v,v,v));
        delay(INITIAL_LED_TEST_TIME_MS/2/INITIAL_LED_TEST_BRIGHTNESS);
      }
      #endif
      showColor(CRGB(0, 0, 0));
    
      Serial.print("Ada\n"); // Send "Magic Word" string to host
    
    
      boolean transmissionSuccess;
      unsigned long sum_r, sum_g, sum_b;
    
      // loop() is avoided as even that small bit of function overhead
      // has a measurable impact on this code's overall throughput.
      for(;;) {
        // wait for first byte of Magic Word
        for (i = 0; i < sizeof prefix; ++i) {
          // If next byte is not in Magic Word, the start over
          if (!checkIncommingData() || prefix[i] != Serial.read()) {
            i = 0;
          }
        }
    
        // Hi, Lo, Checksum
        if (!checkIncommingData()) continue;
        hi = Serial.read();
        if (!checkIncommingData()) continue;
        lo = Serial.read();
        if (!checkIncommingData()) continue;
        chk = Serial.read();
    
        // if checksum does not match go back to wait
        if (chk != (hi ^ lo ^ 0x55)) continue;
    
        memset(leds, 0, MAX_LEDS * sizeof(struct CRGB));
        transmissionSuccess = true;
        sum_r = 0;
        sum_g = 0;
        sum_b = 0;
    
        int num_leds = min ( MAX_LEDS, (hi<<8) + lo + 1 );
    
        // read the transmission data and set LED values
        for (int idx = 0; idx < num_leds; idx++) {
          byte r, g, b;
          if (!checkIncommingData()) {
            transmissionSuccess = false;
            break;
          }
          r = Serial.read();
          if (!checkIncommingData()) {
            transmissionSuccess = false;
            break;
          }
          g = Serial.read();
          if (!checkIncommingData()) {
            transmissionSuccess = false;
            break;
          }
          b = Serial.read();
          leds[idx].r = r;
          leds[idx].g = g;
          leds[idx].b = b;
          #if ANALOG_OUTPUT_ENABLED == true && ANALOG_MODE == ANALOG_MODE_AVERAGE
              sum_r += r;
              sum_g += g;
              sum_b += b;
          #endif
        }
    
        // shows new values
        if (transmissionSuccess) {
          endTime = millis() + OFF_TIMEOUT;
          #if MAX_LEDS > 1 || ANALOG_OUTPUT_ENABLED == false
          FastLED.show();
          #endif
    
          #if ANALOG_OUTPUT_ENABLED == true
            #if ANALOG_MODE == ANALOG_MODE_LAST_LED
              showAnalogRGB(leds[MAX_LEDS-1]);
            #else
              showAnalogRGB(CRGB(sum_r/MAX_LEDS, sum_g/MAX_LEDS, sum_b/MAX_LEDS));
             #endif
          #endif
        }
      }
    } // end of setup
    
    void loop() {
      // Not used. See note in setup() function.
    }
    
    I don't know where my mistake is?

    Any help is greatly appreciated! 20190219_102636.jpg 20190219_102642.jpg 20190219_102648.jpg 20190219_102700.jpg 20190219_102713.jpg
     
  2. TPmodding

    TPmodding Administrator Staff Member Administrator

    Messages:
    1,303
    Hardware:
    RPi1/Zero, RPi2, RPi3, +Arduino, +nodeMCU/ESP8266
    /storage/.kodi/userdata/service.hyperion/hyperion.config.json

    you are sure your config is there?
     
  3. Zeze21

    Zeze21 New Member

    Messages:
    7
    Hardware:
    RPi3
    The hyperion.config.json exists in the following folders:
    /storage/.kodi/userdata/addon_data/service.hyperion/
    aswell as:
    /storage/.kodi/addons/service.hyperion/config/
    a folder
    storage/.kodi/userdata/service.hyperion/ does not exist on my system
     
  4. TPmodding

    TPmodding Administrator Staff Member Administrator

    Messages:
    1,303
    Hardware:
    RPi1/Zero, RPi2, RPi3, +Arduino, +nodeMCU/ESP8266
    your hyperion is searching there for the config, thats the reasen why there is "no valid config"
     
  5. Zeze21

    Zeze21 New Member

    Messages:
    7
    Hardware:
    RPi3
    I reinstalled libreelec from scratch. Only added the addon Hyperion. There still is no directory "storage/.kodi/userdata/service.hyperion/"

    I created the Folder - put the hyperion.config.json there
    still when i enter hyperiond status in ssh i get no valid config found....
     
  6. TPmodding

    TPmodding Administrator Staff Member Administrator

    Messages:
    1,303
    Hardware:
    RPi1/Zero, RPi2, RPi3, +Arduino, +nodeMCU/ESP8266
  7. Zeze21

    Zeze21 New Member

    Messages:
    7
    Hardware:
    RPi3
    That worked after some tries... thank you