【发布时间】:2020-10-26 20:51:00
【问题描述】:
我想创建一个 pyhton 脚本,为连接到 Home Assistant 的一些飞利浦 Hue 灯模拟日出。
我想要实现的是遵循亮度和开尔文值的 sigmoid / s 形曲线。
我希望亮度从 1 变为 100 (%),开尔文值从 2500 变为 4000。
我当前的脚本以线性方式执行此操作:
#import time
def sunrise(entity_id, minutes, updatesecs=10, startbrightness=1, endbrightness=100, startkelvin=2500, endkelvin=4000):
# Set current brightness and kelvin to the staring values
currentbrightness=startbrightness
currentkelvin=startkelvin
# Calculate the needed iterations for the while loop
numberofiterations=minutes*60/updatesecs
kelvinincreasebyiteration=(endkelvin-startkelvin)/numberofiterations
i=0
while(i<=numberofiterations):
# Set new brightness value
currentbrightness = currentbrightness+endbrightness/numberofiterations
currentkelvin = currentkelvin+kelvinincreasebyiteration
if currentbrightness <= endbrightness:
#print(round(currentbrightness)) # This value will be used for setting the brightness
#print(round(currentkelvin))
service_data = {"entity_id": entity_id, "kelvin": currentkelvin, "brightness_pct": currentbrightness, "transition": updatesecs-1}
hass.services.call("light", "turn_on", service_data, False)
time.sleep(updatesecs)
else:
break
entity_id = data.get("entity_id")
minutes = data.get("minutes")
updatesecs = data.get("updatesecs")
sunrise(entity_id,minutes,updatesecs)
任何用 s 形值而不是线性值设置亮度/开尔文的想法都值得赞赏。
【问题讨论】:
-
hyperbolic tangent 函数具有类似的形状。
math.tanh -
另一个经典是 1/(1 + exp(- x))。
标签: python math home-assistant