Skip to content

Philips Hue Support

ntim edited this page Apr 5, 2016 · 9 revisions

Hyperion supports Philips Hue by using the official RESTful API.

Lights

The lights and their position should be configured using the HyperCon tool.

User account creation

New apps have to be authenticated before control is granted. For this, create a new user account on your bridge as described here:

http://www.developers.meethue.com/documentation/getting-started

The returned username will be put into the device configuration.

Device configuration

To enable the support, set "type" to "philipshue" and as output the IP adress of your bridge in the device section of your Hyperion config file:

"device" :
         {
                 "name"       : "MyPi",
                 "type"       : "philipshue",
                 "output"     : "192.168.178.33",
                 "username"   : "your-username-goes-here",
                 "colorOrder" : "rgb",
                 "switchOffOnBlack" : false,
                 "lightIds"   : [...]
         }

The default behaviour is to read all available light ids from the bridge. By supplying an array of integers, this default can be overridden in the case that the order of lights on the bridge does not match the ordering of the lights in the configuration file.

The light ids can be obtained from your bridge under the following url: http://ip-of-your-bridge/api/username/lights/

Switch lights off on black color

Not all colors can be displayed by the Philips Hue devices and black will result in a bluish, dark color. Therefore, you can let Hyperion switch off your lights when the light should be black:

                  "switchOffOnBlack" : true

It should be noted, that switching on / off takes more time than a color change due to a fading animation of the device.

Rate limitation

The performance of the Philips Hue system is limited. The bridge can handle up to 10-30 requests / second. Due to this limitation, the framegrabber frequency should be set to 10 / number-of-lights Hz. This is an example for two lights

"framegrabber" :
         {
                  "width" : 64,
                  "height" : 64,
                  "frequency_Hz" : 5.0
         },
         ...

Smoothing

Should be turned off since it results in too frequent requests to the bridge.

"smoothing" :
         {
                  "type"            : "none",
                  ...
         }

Example configuration file

The following part shows a configuration file for two lights positioned left / right of the TV:

// Automatically generated configuration file for 'Hyperion daemon'
// Generated by: HyperCon (The Hyperion deamon configuration file builder

{
	/// 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', 'ldp8806',
	///                  'lpd6803', 'sedu', 'adalight', 'lightpack', 'test' and 'none')
	/// * 'output'     : The output specification depends on selected device. This can for example be the
	///                  device specifier, device serial number, or the output file name
	/// * 'rate'       : The baudrate of the output to the device
	/// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.).
	"device" :
	{
		"name"       : "MyPi",
		"type"       : "philipshue",
		"output"     : "192.168.178.33",
		"colorOrder" : "rgb",
		"switchOffOnBlack" : false
	},

	/// Color manipulation configuration used to tune the output colors to specific surroundings. 
	/// The configuration contains a list of color-transforms. Each transform contains the 
	/// following fields:
	///  * 'id'   : The unique identifier of the color transformation (eg 'device_1')	///  * 'leds' : The indices (or index ranges) of the leds to which this color transform applies
	///             (eg '0-5, 9, 11, 12-17'). The indices are zero based.	///  * '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)
	///
	/// Next to the list with color transforms there is also a smoothing option.
	///  * '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" :
	{
		"transform" :
		[
			{
				"id"   : "default",
				"leds" : "*",
				"hsv" :
				{
					"saturationGain" : 1.0000,
					"valueGain"      : 1.0000
				},
				"red" :
				{
					"threshold"  : 0.0000,
					"gamma"      : 1.0000,
					"blacklevel" : 0.0000,
					"whitelevel" : 1.0000
				},
				"green" :
				{
					"threshold"  : 0.0000,
					"gamma"      : 1.0000,
					"blacklevel" : 0.0000,
					"whitelevel" : 1.0000
				},
				"blue" :
				{
					"threshold"  : 0.0000,
					"gamma"      : 1.0000,
					"blacklevel" : 0.0000,
					"whitelevel" : 1.0000
				}
			}
		],
		"smoothing" :
		{
			"type"            : "none",
			"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" : 0.0000, "maximum" : 0.1000 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
		},
		{
			"index" : 1,
			"hscan" : { "minimum" : 0.9000, "maximum" : 1.0000 },
			"vscan" : { "minimum" : 0.0000, "maximum" : 1.0000 }
		}
	],

	/// The black border configuration, contains the following items: 
	///  * enable    : true if the detector should be activated
	///  * threshold : Value below which a pixel is regarded as black (value between 0.0 and 1.0)
	"blackborderdetector" : 
	{
		"enable" : true,
		"threshold" : 0.01
	},

	/// The configuration of the effect engine, contains the following items: 
	///  * paths        : An array with absolute location(s) of directories with effects 
	///  * bootsequence : The effect selected as 'boot sequence'
	"effects" : 
	{
		"paths" : 
		[
			"/opt/hyperion/effects"
		]
	},

	"bootsequence" : 
	{
		"effect" : "Rainbow swirl fast",
		"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" : 5.0
	},

	/// 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
	///  * grabScreensaver   : Flag indicating that the frame-grabber is on(true) when XBMC is on screensaver
	///  * enable3DDetection : Flag indicating that the frame-grabber should switch to a 3D compatible modus if a 3D video is playing
	"xbmcVideoChecker" : 
	{
		"xbmcAddress" : "127.0.0.1",
		"xbmcTcpPort" : 9090,
		"grabVideo" : true,
		"grabPictures" : true,
		"grabAudio" : false,
		"grabMenu" : false,
		"grabScreensaver" : false,
		"enable3DDetection" : true
	},

	/// 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
	},

	/// The configuration of the boblight server which enables the boblight remote interface
	///  * port : Port at which the boblight server is started
// 	"boblightServer" : 
// 	{
// 		"port" : 19333
// 	},

	"endOfJson" : "endOfJson"
}