Skip to content

Feature Request: access to sunset/sunrise in function #46

@dlashua

Description

@dlashua

This works, but it's complicated to write and follow:

@state_trigger('binary_sensor.dark == "on"')
@time_active("range(sunrise - 120min, sunset + 120min)")
def turn_on_dark():
    turn_on()

@state_trigger('binary_sensor.downstairs_occupied == "on" and binary_sensor.dark == "on"')
def turn_on_occupied():
    turn_on()

@state_trigger('binary_sensor.downstairs_occupied == "off"')
@time_active("range(sunset + 120min, sunrise - 120min)")
def turn_off_notoccupied():
    turn_off()

@state_trigger('binary_sensor.dark == "off"')
def turn_off_notdark():
    turn_off()

@time_trigger('startup')
@state_active('binary_sensor.dark == "on"')
@time_active("range(sunrise - 120min, sunset + 120min)")
def turn_on_startup_dark():
    turn_on()

@time_trigger('startup')
@state_active('binary_sensor.downstairs_occupied == "on" and binary_sensor.dark == "on"')
def turn_on_startup_occupied():
    turn_on()

@time_trigger('startup')
@state_active('binary_sensor.downstairs_occupied == "off"')
@time_active("range(sunset + 120min, sunrise - 120min)")
def turn_off_startup_notoccupied():
    turn_off()

@time_trigger('startup')
@state_active('binary_sensor.dark == "off"')
def turn_off_startup_notdark():
    turn_off()

I would prefer this:

import datetime

@time_trigger('startup')
@state_trigger('True or binary_sensor.dark or binary_sensor.downstairs_occupied')
def set_lights():
    today = datetime.datetime.today()
    start_time = today.replace(hour=5, minute=0) # would like sunrise - 120min
    end_time = today.replace(hour=22, minute=0) # would like sunset + 120min

    if binary_sensor.dark == "off":
        turn_off()
        return

    if start_time < datetime.datetime.now() < end_time:
        turn_on()
        return

    if binary_sensor.downstairs_occupied == "on":
        turn_on()
        return

    turn_off()

However, as you can see in the code comments, there's not an easy way to get to sunrise/sunset offsets.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions