diff --git a/app/DeviceTracker.py b/app/DeviceTracker.py index 1e1514e8b0f..615acf0a934 100644 --- a/app/DeviceTracker.py +++ b/app/DeviceTracker.py @@ -24,14 +24,12 @@ class DeviceTracker: self.device_scanner = device_scanner default_last_seen = datetime(1990, 1, 1) - now = datetime.now() temp_devices_to_track = device_scanner.get_devices_to_track() self.devices_to_track = { device: { 'name': temp_devices_to_track[device], - 'state': STATE_DEVICE_DEFAULT, 'last_seen': default_last_seen, - 'state_changed': now } + 'category': STATE_CATEGORY_DEVICE_FORMAT.format(temp_devices_to_track[device]) } for device in temp_devices_to_track } self.all_devices_state = STATE_DEVICE_DEFAULT @@ -40,30 +38,21 @@ class DeviceTracker: statemachine.add_category(STATE_CATEGORY_ALL_DEVICES, STATE_DEVICE_DEFAULT) for device in self.devices_to_track: - self.statemachine.add_category(STATE_CATEGORY_DEVICE_FORMAT.format(self.devices_to_track[device]['name']), STATE_DEVICE_DEFAULT) - - + self.statemachine.add_category(self.devices_to_track[device]['category'], STATE_DEVICE_DEFAULT) track_time_change(eventbus, lambda time: self.update_devices(device_scanner.scan_devices())) - def device_state_categories(self): for device in self.devices_to_track: - yield STATE_CATEGORY_DEVICE_FORMAT.format(self.devices_to_track[device]['name']) + yield self.devices_to_track[device]['category'] def set_state(self, device, state): - now = datetime.now() - if state == STATE_DEVICE_HOME: - self.devices_to_track[device]['last_seen'] = now + self.devices_to_track[device]['last_seen'] = datetime.now() - if self.devices_to_track[device]['state'] != state: - self.devices_to_track[device]['state'] = state - self.devices_to_track[device]['state_changed'] = now - - self.statemachine.set_state(STATE_CATEGORY_DEVICE_FORMAT.format(self.devices_to_track[device]['name']), state) + self.statemachine.set_state(self.devices_to_track[device]['category'], state) def update_devices(self, found_devices): @@ -89,7 +78,7 @@ class DeviceTracker: # Get the set of currently used statuses - states_of_devices = [self.devices_to_track[device]['state'] for device in self.devices_to_track] + states_of_devices = [self.statemachine.get_state(self.devices_to_track[device]['category']).state for device in self.devices_to_track] self.all_devices_state = STATE_DEVICE_HOME if STATE_DEVICE_HOME in states_of_devices else STATE_DEVICE_NOT_HOME diff --git a/app/HomeAssistant.py b/app/HomeAssistant.py index f34a245d114..5a9f3ad0ed2 100644 --- a/app/HomeAssistant.py +++ b/app/HomeAssistant.py @@ -4,6 +4,7 @@ import time from app.StateMachine import StateMachine from app.EventBus import EventBus from app.DeviceTracker import DeviceTracker +from HttpInterface import HttpInterface from app.observer.WeatherWatcher import WeatherWatcher from app.observer.TomatoDeviceScanner import TomatoDeviceScanner @@ -23,7 +24,7 @@ class HomeAssistant: self.devicetracker = None self.huetrigger = None - + self.httpinterface = None def get_config(self): if self.config is None: @@ -76,6 +77,12 @@ class HomeAssistant: return self.huetrigger + def setup_http_interface(self): + self.httpinterface = HttpInterface(self.get_event_bus(), self.get_state_machine()) + self.httpinterface.start() + + return self.httpinterface + def start(self): self.setup_timer().start() @@ -87,6 +94,10 @@ class HomeAssistant: print "" print "Interrupt received. Wrapping up and quiting.." self.timer.stop() + + if self.httpinterface is not None: + self.httpinterface.stop() + break diff --git a/app/HttpInterface.py b/app/HttpInterface.py new file mode 100644 index 00000000000..36bc34f269e --- /dev/null +++ b/app/HttpInterface.py @@ -0,0 +1,89 @@ +import threading +import urlparse + +import requests + +from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer + +SERVER_HOST= '127.0.0.1' +SERVER_PORT = 8080 + +class RequestHandler(BaseHTTPRequestHandler): + + #Handler for the GET requests + def do_GET(self): + if self.path == "/": + self.send_response(200) + self.send_header('Content-type','text/html') + self.end_headers() + + write = self.wfile.write + + # Describe state machine: + categories = [] + + write("
Name | State | Last Changed |
---|---|---|
{} | {} | {} |