def cancel_commands(addr): try: if devices.is_remote_device(addr): RemoteController.redirect_command(request, addr) else: device = devices.get_device(addr) device.cancel_commands() mqtt.publish_availability(device) ws.send_device_stats(device) except KeyError: pass print(' < HTTP: {} cancel_commands'.format(addr)) sys.stdout.flush()
def set_settings(addr): try: if devices.is_remote_device(addr): RemoteController.redirect_command(request, addr) else: device = devices.get_device(addr) for idx, value in device.settings.items(): new = request.json.get(idx) if new != value: device.send_setting(idx, new) mqtt.publish_availability(device) ws.send_device_stats(device) except KeyError: pass print(' < HTTP: {} set_settings'.format(addr)) sys.stdout.flush()
def set_timers(addr): try: if devices.is_remote_device(addr): RemoteController.redirect_command(request, addr) else: device = devices.get_device(addr) timers = device.timers for day, value in request.json['timers'].items(): if timers[int(day[0])][int(day[1])] != value: device.send_timer(day, value) new_mode = int(request.json['mode']) if new_mode != (0 if int(device.settings['22'], 16) == 0 else 1): device.send_setting('22', '{:02x}'.format(new_mode)) mqtt.publish_availability(device) ws.send_device_stats(device) except KeyError: pass print(' < HTTP: {} set_timers'.format(addr)) sys.stdout.flush()
def set_mode(addr): mode = request.json.get('mode') try: if devices.is_remote_device(addr): RemoteController.redirect_command(request, addr) else: device = devices.get_device(addr) device.set_mode(mode) if device.group is not None: for dev in device.group.devices: mqtt.publish_availability(dev) ws.send_device_stats(dev) else: mqtt.publish_availability(device) ws.send_device_stats(device) except KeyError: pass except ValueError: pass print(' < HTTP: {} mode {}'.format(addr, mode)) sys.stdout.flush()
def set_temp(addr): temp = float(request.json.get('temp')) try: if devices.is_remote_device(addr): RemoteController.redirect_command(request, addr) else: device = devices.get_device(addr) device.set_temperature(temp) if device.group is not None: for dev in device.group.devices: mqtt.publish_availability(dev) ws.send_device_stats(dev) else: mqtt.publish_availability(device) ws.send_device_stats(device) except KeyError: pass except ValueError: pass print(' < HTTP: {} temp {}'.format(addr, temp)) sys.stdout.flush()
self.options['handler_class'] = QuietHandler self.server = make_server(self.host, self.port, handler, **self.options) self.server.serve_forever() def stop(self): # self.server.server_close() <--- alternative but causes bad fd exception self.server.shutdown() class Httpd(threading.Thread): server = None def run(self): host = os.getenv("HTTP_LISTEN_ADDRESS") port = int(os.getenv("HTTP_PORT")) self.server = MyWSGIRefServer(port=port, host=host) bottle.run(server=self.server, reloader=False) print('HTTP Server stopped...') sys.stdout.flush() def shutdown(self): self.server.stop() httpd = Httpd() pageController = PageController(httpd_path) commandsController = CommandsController() remoteController = RemoteController() deviceController = DeviceController()