In dem Beitrag Ambilight mit Boblight habe ich gezeigt, wie man ein Ambilight mit der Philips HUE Bridge erzeugen kann.

Heute habe ich mein System auf das neue EnigmaLight umgestellt und möchte euch zeigen, wie dies gelingt.

Wer Boblight bereits installiert hat, sollte dies deinstallieren. Das gute ist, dass die Conf-Datei erhalten bleibt.

Da es EnigmaLight seit Ende 2015 nicht mehr gibt, könnt ihr die Datei hier laden:
enigma2-plugin-extensions-enigmalight_0.1r5-b12_all.ipk

enigma2-plugin-extensions-enigmalight_0.2-rc1_all.ipk (bisher noch nicht getestet)

Die Zip-Datei entpacken und in das TMP-Verzeichnis auf die Box kopieren und installieren.

Wer Boblight vorher installiert hatte, kann sich etwas Arbeit ersparen und die boblight.conf in enigmalight.conf umbenennen. Bitte noch darauf achten, dass bei jedem light das Attribut position gesetzt wurde.

Alle anderen legen die Datei wie folgt an:



[global]

[device]
name            ambilight
output          python /usr/dk/dkhue.py
channels        6
type            popen
interval        200000
debug           off

[color]
name	red
rgb		FF0000

[color]
name	green
rgb		00FF00

[color]
name	blue
rgb		0000FF

[light]
position      left
name          AL1
color         red     ambilight 1
color         green   ambilight 2
color         blue    ambilight 3
hscan         0 50
vscan         0 100

[light]
position      right
name          AL2
color         red     ambilight 4
color         green   ambilight 5
color         blue    ambilight 6
hscan         50 100
vscan         0 100

Hier noch einmal die dkhue.py für alle, die noch kein Boblight installiert haben. Diese Datei in den Ordner /usr/dk kopieren. Bitte noch Key und IP entsprechend setzen. Eine ausführlichere Anleitung findet ihr in dem alten Beitrag Ambilight mit Boblight.



import sys
import time
import json
import math
import httplib

def popen():
	spidev = file('/usr/dk/aufruf.log', "wb")
	key = "DEIN KEY"
	ip = "IP-ADRESSE"
	url = '/api/' + key + '/lights/'
	lurl = url + '1/state'
	rurl = url + '2/state'

	while True:
		eingabe = sys.stdin.readline()

		if len(eingabe)>0:

			lr,lg,lb,rr,rg,rb,x = eingabe.split(' ')

			lr = float(lr)
			lg = float(lg)
			lb = float(lb)
			rr = float(rr)
			rg = float(rg)
			rb = float(rb)


			# Make red more vivid
			if lr > 0.04045:
				lr = float( math.pow((lr + 0.055) / (1.0 + 0.055), 2.4) )
			else:
				lr = float(lr / 12.92)

			if rr > 0.04045:
				rr = float( math.pow((rr + 0.055) / (1.0 + 0.055), 2.4))
			else:
				rr = float(rr / 12.92)


			# Make green more vivid
			if lg > 0.04045:
				lg = float( math.pow((lg + 0.055) / (1.0 + 0.055), 2.4) )
			else:
				lg = float(lr / 12.92)

			if rg > 0.04045:
				rg = float( math.pow((rg + 0.055) / (1.0 + 0.055), 2.4))
			else:
				rg = float(rg / 12.92)


			# Make blue more vivid
			if lb > 0.04045:
				lb = float( math.pow((lb + 0.055) / (1.0 + 0.055), 2.4) )
			else:
				lb = float(lb / 12.92)

			if rb > 0.04045:
				rb = float( math.pow((rb + 0.055) / (1.0 + 0.055), 2.4))
			else:
				rb = float(rb / 12.92)


			lxx = lr * 0.649926 + lg * 0.103455 + lb * 0.197109
			lyy = lr * 0.234327 + lg * 0.743075 + lb * 0.022598
			lzz = lr * 0.0000000 + lg * 0.053077 + lb * 1.035763
			lsum = lxx + lyy + lzz

			if lsum > 0:
				lx = lxx / lsum
				ly = lyy / lsum
			else:
				lx = 0
				ly = 0

			rxx = rr * 0.649926 + rg * 0.103455 + rb * 0.197109
			ryy = rr * 0.234327 + rg * 0.743075 + rb * 0.022598
			rzz = rr * 0.0000000 + rg * 0.053077 + rb * 1.035763
			rsum = rxx+ryy+rzz

			if rsum > 0:
				rx = rxx / rsum
				ry = ryy / rsum
			else:
				rx = 0
				ry = 0

			lparams = {'xy': [lx, ly], 'colormode': 'xy'}
			rparams = {'xy': [rx, ry], 'colormode': 'xy'}

			connection = httplib.HTTPConnection(ip, timeout=10)

			connection.request('PUT', lurl, json.dumps(lparams))
			response = connection.getresponse()

			connection.request('PUT', rurl, json.dumps(rparams))
			response = connection.getresponse()

			#data = response.read()

			connection.close()

   			#spidev.write("RGB left: " + str(lr*255) + ":" + str(lg*255) + ":" + str(lb*255) + "\n")
			#spidev.write("RGB right: " + str(rr*255) + ":" + str(rg*255) + ":" + str(rb*255) + "\n")

			#spidev.write("XY left: " + str(lx) + ":" + str(ly) + "\n")
			#spidev.write("XY right: " + str(rx) + ":" + str(ry) + "\n")

			#spidev.write("put: " + str(json.dumps(lparams)) + "\n")
			#spidev.write("data: " + str(data) + "\n")

			#spidev.write("-----------" + "\n")
			#spidev.flush()

		else:
			break

import time
time.sleep(7)
popen()