def handle_n_line(line): devices.flush() commands.send_sync_package(line) for device in devices.devices.values(): mqtt.publish_stats(device) mqtt.publish_availability(device) ws.send_device_stats(device)
def handle_success(self, line): print('') if line[2] != '!' and line[1] != ' ': pending = commands.remove_from_buffer(self.device) if pending == 0 and self.data[0] in ['A', 'M', 'D']: self.update_device_stats(Stats.create(self.device, self.data)) else: if pending == 0: mqtt.publish_stats(self.device) ws.send_device_stats(self.device)
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()
def update_device_stats(self, stats): self.device.set_stats(stats) mqtt.publish_stats(self.device) mqtt.publish_availability(self.device) ws.send_device_stats(self.device)
def publish_availability(self, device): topic = self.availability_topic.strip('/') + '/{}'.format(device.addr) payload = 'offline' if device.available == device.AVAILABLE_OFFLINE or device.synced is False else 'online' mqtt.publish(topic, payload) ws.send_device_stats(device)