diff --git a/homeassistant/__init__.py b/homeassistant/__init__.py index 760252ff479..66044697dc7 100644 --- a/homeassistant/__init__.py +++ b/homeassistant/__init__.py @@ -15,7 +15,8 @@ from datetime import datetime logging.basicConfig(level=logging.INFO) ALL_EVENTS = '*' -EVENT_START = "start" +EVENT_HOMEASSISTANT_START = "homeassistant.start" +EVENT_HOMEASSISTANT_STOP = "homeassistant.stop" EVENT_STATE_CHANGED = "state_changed" EVENT_TIME_CHANGED = "time_changed" @@ -31,14 +32,27 @@ DATE_STR_FORMAT = "%H:%M:%S %d-%m-%Y" def start_home_assistant(eventbus): """ Start home assistant. """ + request_shutdown = threading.Event() + + def forge_shutdown_listener(request_shutdown): + """ Creates a listener for shutdowns. + Local variables cannot be referenced but parameters can. """ + return lambda event: request_shutdown.set() + + eventbus.listen_once(EVENT_HOMEASSISTANT_STOP, + forge_shutdown_listener(request_shutdown)) + Timer(eventbus) - eventbus.fire(EVENT_START) + eventbus.fire(EVENT_HOMEASSISTANT_START) while True: try: time.sleep(1) + if request_shutdown.isSet(): + break + except KeyboardInterrupt: break @@ -284,7 +298,8 @@ class Timer(threading.Thread): self.daemon = True self.eventbus = eventbus - eventbus.listen_once(EVENT_START, lambda event: self.start()) + eventbus.listen_once(EVENT_HOMEASSISTANT_START, + lambda event: self.start()) def run(self): """ Start the timer. """ diff --git a/homeassistant/httpinterface.py b/homeassistant/httpinterface.py index b9fe0b90b01..0a233f9c97a 100644 --- a/homeassistant/httpinterface.py +++ b/homeassistant/httpinterface.py @@ -126,7 +126,8 @@ class HTTPInterface(threading.Thread): self.server.statemachine = statemachine self.server.api_password = api_password - eventbus.listen_once(ha.EVENT_START, lambda event: self.start()) + eventbus.listen_once(ha.EVENT_HOMEASSISTANT_START, + lambda event: self.start()) def run(self): """ Start the HTTP interface. """ diff --git a/homeassistant/test.py b/homeassistant/test.py index 0549830827f..f6c937d1156 100644 --- a/homeassistant/test.py +++ b/homeassistant/test.py @@ -43,7 +43,7 @@ def ensure_homeassistant_started(): hah.HTTPInterface(core['eventbus'], core['statemachine'], API_PASSWORD) - core['eventbus'].fire(ha.EVENT_START) + core['eventbus'].fire(ha.EVENT_HOMEASSISTANT_START) # Give objects time to startup time.sleep(1)