Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _mk_rar(attrid, value, status=0):
r = zcl.foundation.ReadAttributeRecord()
r.attrid = attrid
r.status = status
r.value = zcl.foundation.TypeValue()
r.value.value = value
return r
def _mk_rar(attrid, value, status=0):
r = zcl.foundation.ReadAttributeRecord()
r.attrid = attrid
r.status = status
r.value = zcl.foundation.TypeValue()
r.value.value = value
return r
def _mk_rar(attrid, value, status=0):
r = zcl.foundation.ReadAttributeRecord()
r.attrid = attrid
r.status = status
r.value = zcl.foundation.TypeValue()
r.value.value = value
return r
def test_ptype_to_datatype_lvlist():
"""Test pytype for Structure."""
lst1 = t.LVList(foundation.TypeValue, 2)
lst2 = t.LVList(t.uint8_t, 2)
assert foundation.DATA_TYPES.pytype_to_datatype_id(lst1) == 0x4C
assert foundation.DATA_TYPES.pytype_to_datatype_id(lst2) == 0xFF
async def read_attributes_raw(self, attributes, manufacturer=None):
if not self._CONSTANT_ATTRIBUTES:
return await super().read_attributes_raw(
attributes, manufacturer=manufacturer
)
succeeded = [
foundation.ReadAttributeRecord(
attr, foundation.Status.SUCCESS, foundation.TypeValue()
)
for attr in attributes
if attr in self._CONSTANT_ATTRIBUTES
]
for record in succeeded:
record.value.value = self._CONSTANT_ATTRIBUTES[record.attrid]
attrs_to_read = [
attr for attr in attributes if attr not in self._CONSTANT_ATTRIBUTES
]
if not attrs_to_read:
return [succeeded]
results = await super().read_attributes_raw(
attrs_to_read, manufacturer=manufacturer
def _write_attr_records(
self, attributes: Dict[Union[str, int], Any]
) -> List[foundation.Attribute]:
args = []
for attrid, value in attributes.items():
if isinstance(attrid, str):
attrid = self.attridx[attrid]
if attrid not in self.attributes:
self.error("%d is not a valid attribute id", attrid)
continue
a = foundation.Attribute(attrid, foundation.TypeValue())
try:
python_type = self.attributes[attrid][1]
a.value.type = foundation.DATA_TYPES.pytype_to_datatype_id(python_type)
a.value.value = python_type(value)
args.append(a)
except ValueError as e:
self.error(str(e))
return args
def __init__(self, python_type=None, value=None):
# Copy constructor
if isinstance(python_type, TypeValue):
other = python_type
python_type = other.type
value = other.value
self.type = python_type
self.value = value
0x2B: ("Signed Integer", t.int32s, Analog),
0x2C: ("Signed Integer", t.int40s, Analog),
0x2D: ("Signed Integer", t.int48s, Analog),
0x2E: ("Signed Integer", t.int56s, Analog),
0x2F: ("Signed Integer", t.int64s, Analog),
0x30: ("Enumeration", t.enum8, Discrete),
0x31: ("Enumeration", t.enum16, Discrete),
0x38: ("Floating point", t.Half, Analog),
0x39: ("Floating point", t.Single, Analog),
0x3A: ("Floating point", t.Double, Analog),
0x41: ("Octet string", t.LVBytes, Discrete),
0x42: ("Character string", t.CharacterString, Discrete),
0x43: ("Long octet string", t.LongOctetString, Discrete),
0x44: ("Long character string", t.LongCharacterString, Discrete),
0x48: ("Array", Array, Discrete),
0x4C: ("Structure", t.LVList(TypeValue, 2), Discrete),
0x50: ("Set", Set, Discrete),
0x51: ("Bag", Bag, Discrete),
0xE0: ("Time of day", t.TimeOfDay, Analog),
0xE1: ("Date", t.Date, Analog),
0xE2: ("UTCTime", t.UTCTime, Analog),
0xE8: ("Cluster ID", t.ClusterId, Discrete),
0xE9: ("Attribute ID", t.AttributeId, Discrete),
0xEA: ("BACNet OID", t.BACNetOid, Discrete),
0xF0: ("IEEE address", t.EUI64, Discrete),
0xF1: ("128-bit security key", t.KeyData, Discrete),
0xFF: ("Unknown", Unknown, None),
}
)
class ReadAttributeRecord(t.Struct):
def deserialize(cls, data):
r = cls()
r.attrid, data = t.uint16_t.deserialize(data)
r.status, data = Status.deserialize(data)
if r.status == Status.SUCCESS:
r.value, data = TypeValue.deserialize(data)
return r, data