mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 | |
| markers = [0, 13, 25, 38]
 | |
| 
 | |
| ledCount = hyperion.ledCount
 | |
| 
 | |
| offset = hyperion.args.get('offset', 0)
 | |
| 
 | |
| 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))
 | |
| 
 | |
| """ 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
 | |
| 
 | |
| 	led_hour = ((h*4 + h//3%2 + h//6) + offset) % ledCount
 | |
| 	led_minute = ((m*ledCount)/60 + offset) % ledCount
 | |
| 
 | |
| 	minute = m/60. * ledCount
 | |
| 	minute_low = int(minute)
 | |
| 	g1 = round((1-(minute-minute_low))*255)
 | |
| 	led_minute = int(minute + offset) % ledCount
 | |
| 
 | |
| 	second = s/60. * ledCount
 | |
| 	second_low = int(second)
 | |
| 	b1 = round((1-(second-second_low))*255)
 | |
| 	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 = [255, 255, 255]
 | |
| 
 | |
| 		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)
 | |
| 
 |