def _evaluate(self, unknown_devices, init):
     missing_devices, new_devices, changed_devices = self._diff(__class__._known_devices, unknown_devices)
     if missing_devices:
         for missing_device_id in missing_devices:
             logger.info("can't find '{}' with id '{}'".format(__class__._known_devices[missing_device_id].get('name'), missing_device_id))
             del __class__.bridge_map[missing_device_id]
             if init:
                 DevicePool.remove(missing_device_id)
             else:
                 Client.disconnect(missing_device_id)
     if new_devices:
         for new_device_id in new_devices:
             name = unknown_devices[new_device_id].get('name')
             logger.info("found '{}' with id '{}'".format(name, new_device_id))
             __class__.bridge_map[new_device_id] = (unknown_devices[new_device_id].get('LIGHT_KEY'), Converter(get_light_gamut(unknown_devices[new_device_id].get('modelid'))))
             device = Device(new_device_id, SEPL_DEVICE_TYPE, name)
             device.addTag('type', unknown_devices[new_device_id].get('type'))
             device.addTag('manufacturer', unknown_devices[new_device_id].get('manufacturername'))
             if init:
                 DevicePool.add(device)
             else:
                 Client.add(device)
     if changed_devices:
         for changed_device_id in changed_devices:
             device = DevicePool.get(changed_device_id)
             name = unknown_devices[changed_device_id].get('name')
             if not name == device.name:
                 device.name = name
                 if init:
                     DevicePool.update(device)
                 else:
                     Client.update(device)
                 logger.info("name of '{}' changed to {}".format(changed_device_id, name))
     __class__._known_devices = unknown_devices
Ejemplo n.º 2
0
 def render_POST(self, request):
     res = UpdateResource()
     print("POST to /rd/[id] from {host}:{port}".format(
         host=request.source[0], port=request.source[1]))
     informations = {
         'query_parameters':
         request_helper.get_query_parameter(request),
         'links':
         core_link_format_helper.parse_links(
             request.payload.decode('utf-8')),
     }
     id = request.uri_path.split("/")[-1]
     device = self.db.get(id)
     Client.update(device)
     return res
Ejemplo n.º 3
0
 def setSettings(self, rpkwh, kwh, name):
     if type(kwh) is str:
         kwh = kwh.replace(',', '.')
     if devices_db.updateDevice(self._id,
                                rpkwh=int(rpkwh),
                                kwh=float(kwh),
                                name=str(name)):
         self._rpkwh = int(rpkwh)
         self._kwh = float(kwh)
         self._meter_name = str(name)
         if not self._device.name == self._meter_name:
             self._device.name = self._meter_name
             try:
                 Client.update(self._device)
             except AttributeError:
                 DevicePool.update(self._device)
Ejemplo n.º 4
0
 def _evaluate(self, unknown_devices):
     missing_devices, new_devices, changed_devices = self._diff(__class__._known_devices, unknown_devices)
     if missing_devices:
         for missing_device_id in missing_devices:
             logger.info("can't find '{}' with id '{}'".format(__class__._known_devices[missing_device_id].get('label'), missing_device_id))
             try:
                 Client.delete(missing_device_id)
             except AttributeError:
                 DevicePool.remove(missing_device_id)
     if new_devices:
         for new_device_id in new_devices:
             name = unknown_devices[new_device_id].get('label')
             logger.info("found '{}' with id '{}'".format(name, new_device_id))
             device = Device(new_device_id, SEPL_DEVICE_TYPE, name)
             product = unknown_devices[new_device_id].get('product')
             device.addTag('type', 'Extended color light')
             device.addTag('product', product.get('name'))
             device.addTag('manufacturer', product.get('company'))
             try:
                 Client.add(device)
             except AttributeError:
                 DevicePool.add(device)
     if changed_devices:
         for changed_device_id in changed_devices:
             seconds_since_seen = unknown_devices[changed_device_id].get('seconds_since_seen')
             if seconds_since_seen >= 60:
                 try:
                     Client.disconnect(changed_device_id)
                 except AttributeError:
                     DevicePool.remove(changed_device_id)
                 del unknown_devices[changed_device_id]
             else:
                 device = DevicePool.get(changed_device_id)
                 name = unknown_devices[changed_device_id].get('label')
                 if not name == device.name:
                     device.name = name
                     try:
                         Client.update(device)
                     except AttributeError:
                         DevicePool.update(device)
                     logger.info("name of '{}' changed to {}".format(changed_device_id, name))
     __class__._known_devices = unknown_devices
Ejemplo n.º 5
0
 def _evaluate(self, unknown_devices, init):
     missing_devices, new_devices, changed_devices = self._diff(
         __class__._known_devices, unknown_devices)
     if missing_devices:
         for missing_device_id in missing_devices:
             logger.info("can't find '{}' with id '{}'".format(
                 __class__._known_devices[missing_device_id].get(
                     'deviceName'), missing_device_id))
             if init:
                 DevicePool.remove(missing_device_id)
             else:
                 Client.disconnect(missing_device_id)
     if new_devices:
         for new_device_id in new_devices:
             name = unknown_devices[new_device_id].get('deviceName')
             logger.info("found '{}' with id '{}'".format(
                 name, new_device_id))
             device = BleboxDevice(new_device_id, SEPL_DEVICE_TYPE, name,
                                   unknown_devices[new_device_id].get('ip'))
             device.addTag('type',
                           unknown_devices[new_device_id].get('type'))
             if init:
                 DevicePool.add(device)
             else:
                 Client.add(device)
     if changed_devices:
         for changed_device_id in changed_devices:
             device = DevicePool.get(changed_device_id)
             name = unknown_devices[changed_device_id].get('deviceName')
             if not name == device.name:
                 device.name = name
                 if init:
                     DevicePool.update(device)
                 else:
                     Client.update(device)
                 logger.info("name of '{}' changed to {}".format(
                     changed_device_id, name))
     __class__._known_devices = unknown_devices
    device_manager.add(device_2)
    device_manager.add(
        Device(id_3, 'iot#d66ec9bc-e37f-4f35-a788-027301aad6c2',
               'Dummy Device 3'))

if __name__ == '__main__':
    connector_client = Client(device_manager)

    logger.info('###### runtime phase ######')

    if 1 in tests:
        time.sleep(0.5)
        logger.info('------ add tag to existing device ------')
        device = device_manager.get(id_1)
        device.addTag('type', 'Dummy')
        Client.update(device)

    if 2 in tests:
        time.sleep(0.5)
        logger.info('------ change tag on existing device ------')
        device = device_manager.get(id_1)
        device.changeTag('type', 'dummy device')
        Client.update(device)

    if 3 in tests:
        time.sleep(0.5)
        logger.info('------ remove tag on existing device ------')
        device = device_manager.get(id_2)
        device.removeTag('type')
        Client.update(device)