コード例 #1
0
 def test_fast_change(self):
     if core.DETECT_FASTCHANGE:
         device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
         device.set_attribute(1, 0x0006, {
             'attribute': 0x0000,
             'lqi': 255,
             'data': True
         })
         self.assertEqual(device.get_property_value('onoff'), True)
         device.set_attribute(1, 0x0006, {
             'attribute': 0x0000,
             'lqi': 255,
             'data': False
         })
         self.assertEqual(device.get_property_value('onoff'), True)
         time.sleep(core.DELAY_FASTCHANGE + 1)
         self.assertEqual(device.get_property_value('onoff'), False)
コード例 #2
0
 def test_device_dump(self):
     device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
     device.set_attribute(1, 0, {
         'attribute': 5,
         'rssi': 255,
         'data': 'test'
     })
     last_seen = device.info['last_seen']
     data = json.dumps(device, cls=core.DeviceEncoder, sort_keys=True)
     self.maxDiff = None
     self.assertEqual(data, (
         '{"addr": "1234", "discovery": "", "endpoints": [{"clusters": [{"attributes": '
         '[{"attribute": 5, "data": '
         '"test", "name": "type", "type": "str", "value": "test"}], "cluster": 0}], "device": 0, '
         '"endpoint": 1, "in_clusters": [], "out_clusters": [], "profile": 0}], "generictype": "", '
         '"info": {"addr": "1234", "ieee": "0123456789abcdef", "last_seen": "'
         + last_seen + '", '
         '"rssi": 255}}'))
コード例 #3
0
 def test_reset_attribute(self):
     device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
     device.set_attribute(1, 0x0101, {
         'attribute': 0x0503,
         'rssi': 255,
         'data': 12.0
     })
     self.assertEqual(device.get_property_value('rotation'), 12.0)
     device._reset_attribute(1, 0x0101, 0x0503)
     self.assertEqual(device.get_property_value('rotation'), 0.0)
     device.set_attribute(1, 0x0101, {
         'attribute': 0x0503,
         'rssi': 255,
         'data': 'test'
     })
     self.assertEqual(device.get_property_value('rotation'), 0.0)
     device._reset_attribute(1, 0x0101, 0x0503)
     self.assertEqual(device.get_property_value('rotation'), 0.0)
コード例 #4
0
 def test_assumed_state(self):
     device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
     device.set_attribute(3, 6, {'attribute': 0, 'lqi': 255, 'data': False})
     self.zigate._devices['1234'] = device
     self.zigate.connection.add_auto_response(0x0120, 0x8120, unhexlify(b'01123403000600'))
     r = self.zigate.reporting_request('1234', 3, 6, (0x0000, 0x20))
     self.assertEqual(r.status, 0)
     self.assertFalse(device.assumed_state)
     self.assertDictEqual(device.get_attribute(3, 6, 0),
                          {'attribute': 0, 'data': False, 'name': 'onoff', 'value': False, 'type': bool})
     self.zigate.action_onoff('1234', 3, True)
     self.assertDictEqual(device.get_attribute(3, 6, 0),
                          {'attribute': 0, 'data': False, 'name': 'onoff', 'value': False, 'type': bool})
     self.assertFalse(device.assumed_state)
     self.zigate.connection.add_auto_response(0x0120, 0x8120, unhexlify(b'0112340300068c'))
     r = self.zigate.reporting_request('1234', 3, 6, (0x0000, 0x20))
     self.assertEqual(r.status, 0x8c)
     self.assertTrue(device.assumed_state)
コード例 #5
0
 def test_templates(self):
     path = os.path.join(core.BASE_PATH, 'templates')
     files = os.listdir(path)
     for f in files:
         success = False
         try:
             print('Test template', f)
             with open(os.path.join(path, f)) as fp:
                 json.load(fp)
             device = core.Device(
                 {
                     'addr': '1234',
                     'ieee': '0123456789abcdef'
                 }, self.zigate)
             device.set_attribute(1, 0, {
                 'attribute': 5,
                 'rssi': 255,
                 'data': f[:-5]
             })
             self.assertTrue(device.load_template())
             success = True
         except Exception as e:
             print(e)
         self.assertTrue(success)
コード例 #6
0
 def test_refresh(self):
     device = core.Device({'addr': '1234'},
                          self.zigate)
     device.endpoints[0x0001] = {'in_clusters': [0x0006],
                                 'clusters': {0x0006: clusters.C0006()}}
     device.set_attribute(1, 0x0006, {'attribute': 0, 'lqi': 255, 'data': '0'})
     device.set_attribute(1, 0x0006, {'attribute': 2, 'lqi': 255, 'data': '0'})
     self.zigate._devices['1234'] = device
     device.refresh_device(force=True)
     self.assertEqual(hexlify(self.zigate.connection.get_last_cmd()),
                      b'0212340101000600000000010000'
                      )
     device.refresh_device(full=True, force=True)
     self.assertEqual(hexlify(self.zigate.connection.get_last_cmd()),
                      b'02123401010006000000000200000002'
                      )
     self.zigate.connection.sent = []
     device.refresh_device()
     self.assertIsNone(self.zigate.connection.get_last_cmd())
     device.info['last_seen'] = datetime.datetime(2020, 1 , 1).strftime('%Y-%m-%d %H:%M:%S')
     device.refresh_device()
     self.assertEqual(hexlify(self.zigate.connection.get_last_cmd()),
                      b'0212340101000600000000010000'
                      )
コード例 #7
0
 def test_remove_device_without_ieee(self):
     device = core.Device({'addr': '1234'}, self.zigate)
     self.zigate._devices['1234'] = device
     self.zigate.remove_device('1234')
     self.assertFalse('1234' in self.zigate._devices)
コード例 #8
0
    def test_template(self):
        device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
        device.set_attribute(1, 0, {
            'attribute': 5,
            'rssi': 255,
            'data': 'lumi.test'
        })
        self.assertFalse(device.load_template())

        device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
        self.assertFalse(device.load_template())
        device.set_attribute(1, 0, {
            'attribute': 5,
            'rssi': 255,
            'data': 'lumi.weather'
        })

        self.assertCountEqual(device.properties, [{
            'attribute': 5,
            'data': 'lumi.weather',
            'name': 'type',
            'value': 'lumi.weather',
            'type': str
        }])
        device.set_attribute(1, 0x0402, {
            'attribute': 0,
            'rssi': 255,
            'data': 1200
        })
        self.assertEqual(device.get_property_value('temperature'), 12.0)
        device.set_attribute(1, 0, {
            'attribute': 1,
            'rssi': 255,
            'data': 'test'
        })
        self.assertEqual(device.genericType, '')
        self.assertTrue(device.load_template())
        self.assertEqual(device.discovery, 'templated')
        self.assertEqual(device.genericType, 'sensor')
        self.assertCountEqual(device.properties, [{
            'attribute': 1,
            'data': 'test',
            'name': 'application_version',
            'value': 'test'
        }, {
            'attribute': 4,
            'data': 'LUMI',
            'name': 'manufacturer',
            'value': 'LUMI'
        }, {
            'attribute': 5,
            'data': 'lumi.weather',
            'name': 'type',
            'value': 'lumi.weather',
            'type': str
        }, {
            'attribute': 7,
            'data': 3,
            'name': 'power_source',
            'value': 3
        }, {
            'attribute': 0,
            'data': 1200,
            'name': 'temperature',
            'value': 12.0,
            'unit': '°C',
            'type': float
        }, {
            'attribute': 0,
            'name': 'pressure',
            'unit': 'mb',
            'value': 0,
            'type': int
        }, {
            'attribute': 16,
            'name': 'pressure2',
            'unit': 'mb',
            'value': 0.0,
            'type': float
        }, {
            'attribute': 0,
            'name': 'humidity',
            'unit': '%',
            'value': 0.0,
            'type': float
        }])

        device.set_attribute(1, 6, {
            'attribute': 0,
            'rssi': 255,
            'data': False,
            'inverse': True
        })
        device.set_attribute(1, 0, {
            'attribute': 1,
            'rssi': 255,
            'data': 'test'
        })

        device.generate_template(self.test_dir)
        with open(os.path.join(self.test_dir, 'lumi.weather.json')) as fp:
            jdata = json.load(fp)
        self.assertCountEqual(
            jdata, {
                'endpoints': [{
                    'clusters': [{
                        'attributes': [{
                            'attribute': 4,
                            'data': 'LUMI'
                        }, {
                            'attribute': 5,
                            'data': 'lumi.weather'
                        }, {
                            'attribute': 7,
                            'data': 3
                        }],
                        'cluster':
                        0
                    }, {
                        'attributes': [{
                            'attribute': 0
                        }],
                        'cluster': 1026
                    }, {
                        'attributes': [{
                            'attribute': 0
                        }, {
                            'attribute': 16
                        }, {
                            'attribute': 20
                        }],
                        'cluster':
                        1027
                    }, {
                        'attributes': [{
                            'attribute': 0
                        }],
                        'cluster': 1029
                    }, {
                        'attributes': [{
                            'attribute': 0,
                            'inverse': True
                        }],
                        'cluster':
                        6
                    }],
                    'device':
                    24321,
                    'endpoint':
                    1,
                    'in_clusters': [0, 3, 65535, 1026, 1027, 1029],
                    'out_clusters': [0, 4, 65535],
                    'profile':
                    260
                }],
                'generictype':
                'sensor',
                'info': {
                    'bit_field': '0100000000000010',
                    'descriptor_capability': '00000000',
                    'mac_capability': '10000000',
                    'manufacturer_code': '1037',
                    'power_type': 0,
                    'server_mask': 0
                }
            })
        # another test
        device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
        self.assertFalse(device.load_template())
        device.set_attribute(1, 0, {
            'attribute': 5,
            'rssi': 255,
            'data': 'lumi.sensor_wleak.aq1'
        })
        self.assertTrue(device.load_template())
        self.assertEqual(device.discovery, 'templated')
        self.assertEqual(device.genericType, 'sensor')
        self.assertDictEqual(
            device.get_property_value('zone_status'), {
                'alarm1': False,
                'alarm2': False,
                'tamper': False,
                'low_battery': False,
                'supervision': False,
                'restore': False,
                'trouble': False,
                'ac_fault': False,
                'test_mode': False,
                'battery_defect': False
            })
コード例 #9
0
    def test_cluster_C0012(self):
        # xiaomi cube status
        device = core.Device({'addr': '1234', 'ieee': '0123456789abcdef'})
        device.set_attribute(1, 0, {
            'attribute': 5,
            'lqi': 255,
            'data': 'lumi.sensor_cube'
        })
        endpoint = {'device': 24322}
        data = {
            "attributes": [{
                "attribute": 85,
                "data": 4,
                "expire": 2,
                "expire_value": "",
                "name": "movement",
                "value": ""
            }],
            "cluster":
            18
        }
        c = clusters.C0012.from_json(data, endpoint, device)
        self.assertEqual(
            c.attributes, {
                85: {
                    'attribute': 85,
                    'data': 4,
                    'expire': 2,
                    'expire_value': '',
                    'name': 'movement',
                    'value': 'flip90_84',
                    'type': str
                }
            })

        # xiaomi lumi.remote.b1acn01
        endpoint = {'device': 259}
        data = {
            "attributes": [{
                "attribute": 85,
                "data": 4,
                "expire": 2,
                "expire_value": "",
                "name": "movement",
                "value": ""
            }],
            "cluster":
            18
        }
        c = clusters.C0012.from_json(data, endpoint)
        self.assertEqual(
            c.attributes, {
                85: {
                    'attribute': 85,
                    'data': 4,
                    'expire': 2,
                    'name': 'multiclick',
                    'value': '4',
                    'type': str
                }
            })

        # xiaomi lumi.remote.b286acn01
        endpoint = {'device': 24321}
        data = {
            "attributes": [{
                "attribute": 85,
                "data": 1,
                "expire": 2,
                "name": "multiclick",
                "value": ""
            }],
            "cluster":
            18
        }
        c = clusters.C0012.from_json(data, endpoint)
        self.assertEqual(
            c.attributes, {
                85: {
                    'attribute': 85,
                    'data': 1,
                    'expire': 2,
                    'name': 'multiclick',
                    'value': '1',
                    'type': str
                }
            })