<reponame>Starbix/hyperion.ng<gh_stars>0
import hyperion
import time
from datetime import datetime

def myRange(index, margin):
	return [i % hyperion.ledCount for i in range(index-margin, index+margin+1)]

""" Define some variables """
sleepTime = 1
ledCount = hyperion.ledCount

offset = hyperion.args.get('offset', 0)
direction = bool(hyperion.args.get('direction', False))

hourMargin = hyperion.args.get('hour-margin', 2)
minuteMargin = hyperion.args.get('minute-margin', 1)
secondMargin = hyperion.args.get('second-margin', 0)

hourColor = hyperion.args.get('hour-color', (255,0,0))
minuteColor = hyperion.args.get('minute-color', (0,255,0))
secondColor = hyperion.args.get('second-color', (0,0,255))

markerColor = hyperion.args.get('marker-color', (255,255,255))

marker = ledCount/4
markers = (0+offset, int(marker + offset) % ledCount, int(2*marker + offset) % ledCount, int(3*marker + offset) % ledCount)

""" The effect loop """
while not hyperion.abort():

	""" The algorithm to calculate the change in color """
	led_data = bytearray()

	now = datetime.now()
	h = now.hour
	m = now.minute
	s = now.second

	hmin = float(h+(1/60*m))
	
	if hmin > 12:
		hmin -= 12
	
	hour = float(hmin/12 * ledCount)
	led_hour = int(hour + offset) % ledCount

	minute = m/60. * ledCount
	led_minute = int(minute + offset) % ledCount

	second = s/60. * ledCount
	led_second = int(second + offset) % ledCount

	hourRange =  myRange(led_hour, hourMargin)
	minuteRange = myRange(led_minute, minuteMargin)
	secondRange = myRange(led_second, secondMargin)

	for i in range(ledCount):
		blend = [0, 0, 0]

		if i in markers:
			blend = markerColor

		if i in hourRange:
			blend = hourColor

		if i in minuteRange:
			blend = minuteColor

		if i in secondRange:
			blend = secondColor

		led_data += bytearray((int(blend[0]), int(blend[1]), int(blend[2])))

	""" send the data to hyperion """
	hyperion.setColor(led_data)

	""" sleep for a while """
	timediff = (datetime.now()-now).microseconds/1000000.
	time.sleep(sleepTime-timediff)


import hyperion
import time
from datetime import datetime

def myRange(index, margin):
	return [i % hyperion.ledCount for i in range(index-margin, index+margin+1)]

""" Define some variables """
sleepTime = 1
ledCount = hyperion.ledCount

offset = hyperion.args.get('offset', 0)
direction = bool(hyperion.args.get('direction', False))

hourMargin = hyperion.args.get('hour-margin', 2)
minuteMargin = hyperion.args.get('minute-margin', 1)
secondMargin = hyperion.args.get('second-margin', 0)

hourColor = hyperion.args.get('hour-color', (255,0,0))
minuteColor = hyperion.args.get('minute-color', (0,255,0))
secondColor = hyperion.args.get('second-color', (0,0,255))

markerColor = hyperion.args.get('marker-color', (255,255,255))

marker = ledCount/4
markers = (0+offset, int(marker + offset) % ledCount, int(2*marker + offset) % ledCount, int(3*marker + offset) % ledCount)

""" The effect loop """
while not hyperion.abort():

	""" The algorithm to calculate the change in color """
	led_data = bytearray()

	now = datetime.now()
	h = now.hour
	m = now.minute
	s = now.second

	hmin = float(h+(1/60*m))
	
	if hmin > 12:
		hmin -= 12
	
	hour = float(hmin/12 * ledCount)
	led_hour = int(hour + offset) % ledCount

	minute = m/60. * ledCount
	led_minute = int(minute + offset) % ledCount

	second = s/60. * ledCount
	led_second = int(second + offset) % ledCount

	hourRange =  myRange(led_hour, hourMargin)
	minuteRange = myRange(led_minute, minuteMargin)
	secondRange = myRange(led_second, secondMargin)

	for i in range(ledCount):
		blend = [0, 0, 0]

		if i in markers:
			blend = markerColor

		if i in hourRange:
			blend = hourColor

		if i in minuteRange:
			blend = minuteColor

		if i in secondRange:
			blend = secondColor

		led_data += bytearray((int(blend[0]), int(blend[1]), int(blend[2])))

	""" send the data to hyperion """
	hyperion.setColor(led_data)

	""" sleep for a while """
	timediff = (datetime.now()-now).microseconds/1000000.
	time.sleep(sleepTime-timediff)
Define some variables The effect loop The algorithm to calculate the change in color send the data to hyperion sleep for a while