#!/usr/bin/env python3

import colorsys
import time
from sense_emu import SenseHat

TEMP_LO = -10.0
TEMP_HI = 40.0
T_BIAS = 1.0 / 3.0
HUMI_LO = 0.0
HUMI_HI = 100.0
PRES_LO = 950.0
PRES_HI = 1030.0
P_BIAS = 0.5

def temp2hue(t):
	if t < TEMP_LO:
		t = TEMP_LO
	elif TEMP_HI < t:
		t = TEMP_HI
	return (
		  1.0
		- ( (1.0 - T_BIAS) * (t - TEMP_LO)
	          / (TEMP_HI - TEMP_LO)
		+ T_BIAS)
	)

def humi2sat(h):
	return 1.0 - (h - HUMI_LO) / (HUMI_HI - HUMI_LO)

def pres2val(p):
	if p < PRES_LO:
		p = PRES_LO
	elif PRES_HI < p:
		p = PRES_HI
	return (
		  (1.0 - P_BIAS) * (p - PRES_LO)
		/ (PRES_HI - PRES_LO)
		+ P_BIAS
	)

def text_colour(sense):
	(r, g, b) = colorsys.hsv_to_rgb(
		temp2hue(sense.get_temperature() ),
		humi2sat(sense.get_humidity() ),
		pres2val(sense.get_pressure() )
	)
	return int(255 * r), int(255 * g), int(255 * b)

sense = SenseHat()
while True:
	tm = time.localtime()
	sense.show_message(
		'%02d:%02d' % (tm.tm_hour, tm.tm_min),
		text_colour = text_colour(sense)
	)
