Skip to content
poljvd edited this page Oct 27, 2013 · 41 revisions

The Hyperion daemon uses a JSON based configuration file. Hyperion uses a library for parsing JSON, this library allows the use of C-style comments.

HyperCon, config builder

Hyperion comes with a tool, _HyperCon_, for easy building of configuration files.

The tool simplifies the process of defining a correct basic configuration file. Fine tuning of device and setup specific configuration should be completed by 'hand'. On the left-side of the application-window the configuration of the led's around the TV can be configured. On the right-side an example is rendered of the TV setup. The image used can be selected by clicking on the TV with the right-mouse button.

HyperCon.jar

Main screen

Settings to specify the led layout:

  • Direction: the direction in which the led are layout.
  • Led in top corner: true if you have a led in the top corners.
  • Led in bottom corner: true if you have a led in the bottom corners.
  • Horizontal #: The number of leds you have horizontally on the top and bottom. This excludes any corner leds. If you have less leds on the bottom then take note of the bottom gap setting.
  • Vertical #: The number of leds you have vertically on the sides. This excludes any corner leds.
  • bottom gap #: The number of leds missing in the bottom row. The amount of leds you specify here are taken from the middle of the bottom row with leds.
  • 1st LED offset: This specifies where you start counting the leds. The offset is an offset from the led on the top left.

Settings to specify the integration area of the leds:

  • horizontal depth: The percentage of the screen height which is used for determining the color of the leds on the top and the bottom. For example 5% means that the top 5% and the bottom 5% is used.
  • vertical depth: The percentage of the screen width which is used for determining the color of the leds on the sides.
  • horizontal gap: The percentage of the screen height which is skipped for the top and the bottom leds before the integration area begins.
  • vertical gap: The percentage of the screen width which is skipped for the side leds before the integration area begins.
  • overlap: The overlap between integration areas. For example 100% overlap means that a led its entire integration area with the neighboring leds (Half with each neighbor)

Example configuration file

The following part shows an example of a configuration similar to the ones created by HyperCon. For convenience not all led's are included. ```javascript // Hyperion configuration { /// Device configuration contains the following fields: /// * 'name' : The user friendly name of the device (only used for display purposes) /// * 'type' : The type of the device or leds (known types for now are 'ws2801', 'test' and /// 'none') /// * 'output' : The output specification depends on selected device /// - 'ws2801' this is the device (eg '/dev/spidev0.0') /// - 'test' this is the file used to write test output (eg /// '/home/pi/hyperion.out') /// * 'rate' : The baudrate of the output to the device (only applicable for 'ws2801') /// * 'bgr-output' : Use BGR output instead of RGB (reverse red and blue). "device" : { "name" : "MyPi", "type" : "ws2801", "output" : "/dev/spidev0.0", "rate" : 1000000, "bgr-output" : false },
/// Color manipulation configuration used to tune the output colors to specific surroundings. Contains the following fields:
///  * 'hsv' : The manipulation in the Hue-Saturation-Value color domain with the following tuning parameters:
///            - 'saturationGain'  The gain adjustement of the saturation
///            - 'valueGain'       The gain adjustement of the value
///  * 'red'/'green'/'blue' : The manipulation in the Red-Green-Blue color domain with the following tuning parameters for each channel:
///            - 'threshold'       The minimum required input value for the channel to be on (else zero)
///            - 'gamma'           The gamma-curve correction factor
///            - 'blacklevel'      The lowest possible value (when the channel is black)
///            - 'whitelevel'      The highest possible value (when the channel is white)
///  * 'smoothing' : Smoothing of the colors in the time-domain with the following tuning parameters:
///            - 'type'            The type of smoothing algorithm ('linear' or 'none')
///            - 'time_ms'         The time constant for smoothing algorithm in milliseconds
///            - 'updateFrequency' The update frequency of the leds in Hz
"color" :
{
    "hsv" : {
        "saturationGain" : 1.0,
        "valueGain"      : 1.5
    },
    "red" :
    {
        "threshold"  : 0.1,
        "gamma"      : 2.0,
        "blacklevel" : 0.0,
        "whitelevel" : 0.8
    },
    "green" :
    {
        "threshold"  : 0.1,
        "gamma"      : 2.0,
        "blacklevel" : 0.0,
        "whitelevel" : 1.0
    },
    "blue" :
    {
        "threshold"  : 0.1,
        "gamma"      : 2.0,
        "blacklevel" : 0.0,
        "whitelevel" : 1.0
    },
    "smoothing" :
    {
        "type"            : "linear",
        "time_ms"         : 200,
        "updateFrequency" : 20.0000
    }
},

/// The configuration for each individual led. This contains the specification of the area
/// averaged of an input image for each led to determine its color. Each item in the list
/// contains the following fields:
/// * index: The index of the led. This determines its location in the string of leds; zero
///          being the first led.
/// * hscan: The fractional part of the image along the horizontal used for the averaging
///          (minimum and maximum inclusive)
/// * vscan: The fractional part of the image along the vertical used for the averaging
///          (minimum and maximum inclusive)
"leds" :
[
    {
        "index" : 0,
        "hscan" : { "minimum" : 47.0588, "maximum" : 52.9412 },
        "vscan" : { "minimum" : 0, "maximum" : 10 }
    },
    {
        "index" : 1,
        "hscan" : { "minimum" : 41.1765, "maximum" : 47.0588 },
        "vscan" : { "minimum" : 0, "maximum" : 10 }
    },
	
    ... For convenience not all led configurations are shown ...
	
    {
        "index" : 48,
        "hscan" : { "minimum" : 58.8235, "maximum" : 64.7059 },
        "vscan" : { "minimum" : 0, "maximum" : 10 }
    },
    {
        "index" : 49,
        "hscan" : { "minimum" : 52.9412, "maximum" : 58.8235 },
        "vscan" : { "minimum" : 0, "maximum" : 10 }
    }
],

/// The black border configuration, contains the following items: 
///  * enable : true if the detector should be activated
"blackborderdetector" :
{
    "enable" : true
},

/// The boot-sequence configuration, contains the following items:
///  * type        : The type of the boot-sequence ('rainbow', 'knightrider', 'none')
///  * duration_ms : The length of the boot-sequence [ms]
"bootsequence" :
{
    "type"        : "rainbow",
    "duration_ms" : 3000
},

/// The configuration for the frame-grabber, contains the following items:
///  * width        : The width of the grabbed frames [pixels]
///  * height       : The height of the grabbed frames [pixels]
///  * frequency_Hz : The frequency of the frame grab [Hz]
"framegrabber" :
{
    "width"        : 64,
    "height"       : 64,
    "frequency_Hz" : 10
},

/// The configuration of the XBMC connection used to enable and disable the frame-grabber.
/// Contains the following fields:
///  * xbmcAddress  : The IP address of the XBMC-host
///  * xbmcTcpPort  : The TCP-port of the XBMC-server
///  * grabVideo    : Flag indicating that the frame-grabber is on(true) during video playback
///  * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show
///  * grabAudio    : Flag indicating that the frame-grabber is on(true) during audio playback
///  * grabMenu     : Flag indicating that the frame-grabber is on(true) in the XBMC menu
"xbmcVideoChecker" : {
    "xbmcAddress" : "127.0.0.1",
    "xbmcTcpPort" : 9090,
    "grabVideo" : true,
    "grabPictures" : true,
    "grabAudio" : true,
    "grabMenu" : false
},

/// The configuration of the Json server which enables the json remote interface
///  * port : Port at which the json server is started
"jsonServer" :
{
    "port" : 19444
},

/// The configuration of the Proto server which enables the protobuffer remote interface
///  * port : Port at which the protobuffer server is started
"protoServer" :
{
    "port" : 19445
}

}


<h4>Replacing the default configuration</h4>
After creating your own configuration file you can copy the new configuration file to the Pi and overwrite the default file:

sudo cp my_config.json /etc/hyperion.config.json initctl restart hyperion