class Server: def __init__(self): Log.info("Server.init()") self.webServer = WebServer() def start(self): Log.info("Server.start()") self.webServer.start() def stop(self): Log.info("Server.stop()") self.webServer.stop()
class MicroWifi: def __init__(self, ap_name='MicroWifi', ap_password=''): self.web_server = WebServer() self.wifi_man = WifiManager(ap_name=ap_name, ap_password=ap_password) # setup web server routes self.setup_routes(self.web_server, self.wifi_man) def start(self): # try to auto connect self.wifi_man.auto_connect() if self.wifi_man.is_access_point_mode(): # start our web server to allow the user to configure the device self.web_server.start() def stop(self): try: self.web_server.stop() except Exception as exc: print('Error stopping {}'.format(exc)) def setup_routes(self, server, wifi_manager): @server.route("/") def home(client, request): try: html = "" try: with open('www/index.html') as f: html = f.read() except OSError: pass server.send_response(client, html) except Exception as exc: print('Error in home route {}'.format(exc)) @server.route("/scan") def scan(client, request): try: network_ssids = [ network[0] for network in wifi_manager.access_point_scan() ] payload = {'networks': network_ssids} server.send_response(client, json.dumps(payload), content_type='application/json') except Exception as exc: print('Error in scan route {}'.format(exc)) @server.route("/connect", 'POST') def connect(client, request): params = server.get_form_data(request) ssid = params.get('ssid') password = params.get('password') # try to connect to the network status = wifi_manager.connect(ssid, password) payload = { 'status': status, 'msg': 'Successfully connected to {}'.format(ssid) if status else 'Error connecting to {}'.format(ssid) } server.send_response(client, json.dumps(payload), content_type='application/json')
class SecuritySystem: SENSOR = 'sensor' GLASS_BREAK = 'glass_break' CONTROLLER = 'controller' SYSTEM = 'system' SIREN = 'SIREN' ALARM_ON_FILE = './alarm_on' node_ids = {1 : {"name": "Controller", "type": CONTROLLER}, 255 : {'name': "OpenZWave System", 'type': SYSTEM}, 3 : {'name': "Living Room Right Window", 'type': SENSOR}, 4 : {'name': "Living Room Middle Window", 'type': SENSOR}, 5 : {'name': "Front Door", 'type': SENSOR}, 7 : {'name': '2nd Bedroom Window', 'type': SENSOR}, 12 : {'name': '2nd Bedroom Glass Break', 'type': GLASS_BREAK}, 13 : {'name': 'Bedroom Glass Break', 'type': GLASS_BREAK}, 14 : {'name': 'Living Room Glass Break', 'type': GLASS_BREAK}, 15 : {'name': 'Living Room Siren', 'type': SIREN}, 17 : {'name': 'Hallway Siren', 'type': SIREN}, 18 : {'name': 'Bedroom Siren', 'type': SIREN}, 19 : {'name': 'Bedroom Window', 'type': SENSOR} } nodes_in_alarm = set() def __init__(self, network): self.done = False self.network = network self.in_alarm_state = False self.alarm_on = open(self.ALARM_ON_FILE).readline().rstrip() == 'true' if self.alarm_on: self.turn_alarm_on() self.web_server = WebServer(self) def run(self): self.web_server_thread = Thread(target=self.web_server.start) self.web_server_thread.start() try: while not self.done: time.sleep(1) except KeyboardInterrupt as e: self.stop() raise e def stop(self): self.done = True self.web_server.stop() #self.web_server_thread.join() def turn_alarm_on(self): print "Turning alarm on" self.in_alarm_state = False self.alarm_on = True self.turn_sirens_off() open(self.ALARM_ON_FILE, 'w').write('true') self.nodes_in_alarm.clear() for node_id, node_info in self.node_ids.iteritems(): if node_info['type'] == self.SENSOR: if not self.network.nodes[node_id].get_values_by_command_classes()[48].values()[0].data: self.nodes_in_alarm.add(node_id) elif node_info['type'] == self.GLASS_BREAK: self.nodes_in_alarm.add(node_id) print "Nodes in alarm: " + str(self.nodes_in_alarm) def turn_alarm_off(self): print "Turning alarm off" self.turn_sirens_off() self.in_alarm_state = False self.alarm_on = False open(self.ALARM_ON_FILE, 'w').write('false') def turn_sirens_on(self): print "Turning sirens on" self.network.nodes[15].set_switch(72057594294386688, True) self.network.nodes[17].set_switch(72057594327941120, True) self.network.nodes[18].set_switch(72057594344718336, True) Timer(30.0, self.turn_sirens_off).start() def turn_sirens_off(self): print "Turning sirens off" self.network.nodes[15].set_switch(72057594294386688, False) self.network.nodes[17].set_switch(72057594327941120, False) self.network.nodes[18].set_switch(72057594344718336, False) def handle_node_event(self, network, node, value): if self.alarm_on and not self.in_alarm_state and node.node_id in self.nodes_in_alarm and self.node_ids[node.node_id]['type'] == self.SENSOR and value > 0: self.in_alarm_state = True self.turn_sirens_on() send_mail(self.node_ids[node.node_id]['name']) elif self.node_ids[node.node_id]['type'] != self.SENSOR: print('Louie signal : Node event : {0}. value: {1}'.format(node, value)) def handle_scene_event(self, network, node, scene_id): if scene_id == 1: self.turn_alarm_on() elif scene_id == 3: self.turn_alarm_off() ############################################################################################################################################### def louie_node_update(self, network, node): print('Louie signal : Node update : %s.' % node) def louie_value_update(self, network, node, value): if self.alarm_on and not self.in_alarm_state and node.node_id in self.nodes_in_alarm and self.node_ids[node.node_id]['type'] == self.GLASS_BREAK and value.label=='General' and value.data == 255: self.in_alarm_state = True self.turn_sirens_on() send_mail(self.node_ids[node.node_id]['name']) print('Louie signal : Value update : %s.' % value) def louie_ctrl_message(self, state, message, network, controller): print('Louie signal : Controller message : %s.' % message)