DLMS-SPODES 0.87.2__py3-none-any.whl → 0.87.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- DLMS_SPODES/cosem_interface_classes/collection.py +389 -367
- DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py +1 -0
- DLMS_SPODES/cosem_interface_classes/implementations/data.py +9 -0
- DLMS_SPODES/cosem_interface_classes/parameters.py +73 -2
- DLMS_SPODES/cosem_interface_classes/reports.py +42 -44
- DLMS_SPODES/pardata.py +1 -9
- {dlms_spodes-0.87.2.dist-info → dlms_spodes-0.87.5.dist-info}/METADATA +1 -1
- {dlms_spodes-0.87.2.dist-info → dlms_spodes-0.87.5.dist-info}/RECORD +10 -11
- DLMS_SPODES/obis/abstract_objects.py +0 -17
- {dlms_spodes-0.87.2.dist-info → dlms_spodes-0.87.5.dist-info}/WHEEL +0 -0
- {dlms_spodes-0.87.2.dist-info → dlms_spodes-0.87.5.dist-info}/top_level.txt +0 -0
|
@@ -330,6 +330,7 @@ class COSEMInterfaceClasses(Protocol):
|
|
|
330
330
|
__specific_methods: tuple[cdt.CommonDataType, ...] = None
|
|
331
331
|
_cbs_attr_post_init: dict[int, Callable]
|
|
332
332
|
collection: Any | None # Collection. todo: remove in future
|
|
333
|
+
hash_: int
|
|
333
334
|
|
|
334
335
|
def __init__(self, logical_name: cst.LogicalName | bytes | str):
|
|
335
336
|
self.collection = None
|
|
@@ -302,6 +302,15 @@ class KPZAlarm1(DataStatic):
|
|
|
302
302
|
A_ELEMENTS = DataStatic.get_attr_element(2).get_change(data_type=KPZAlarm1Values),
|
|
303
303
|
|
|
304
304
|
|
|
305
|
+
class SPODES3ControlAlarm1Values(cdt.IntegerFlag, cdt.DoubleLongUnsigned):
|
|
306
|
+
...
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
class SPODES3ControlAlarm1(DataDynamic):
|
|
310
|
+
"""СТО 34.01-5.1-006-2023v4 Таблица 13.5 Распределение событий отключения реле нагрузки по битам"""
|
|
311
|
+
A_ELEMENTS = DataNotSpecific.get_attr_element(2).get_change(data_type=SPODES3ControlAlarm1Values),
|
|
312
|
+
|
|
313
|
+
|
|
305
314
|
class SPODES3PowerQuality1Event(DataNotSpecific):
|
|
306
315
|
"""СТО_34.01-5.1-006-2019v3 E.1 Статус качества сети (журнал качества сети)"""
|
|
307
316
|
A_ELEMENTS = DataNotSpecific.get_attr_element(2).get_change(data_type=SPODES3PowerQuality1EventValues),
|
|
@@ -14,11 +14,11 @@ class Data(Parameter):
|
|
|
14
14
|
class ActiveFirmwareIdentifier(Data):
|
|
15
15
|
|
|
16
16
|
@classmethod
|
|
17
|
-
def from_b(cls, b: int) -> "ActiveFirmwareIdentifier":
|
|
17
|
+
def from_b(cls, b: int = 0) -> "ActiveFirmwareIdentifier":
|
|
18
18
|
return cls.parse(f"0.{b}.0.2.0.255")
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
ACTIVE_FIRMWARE_IDENTIFIER_0 = ActiveFirmwareIdentifier.from_b(
|
|
21
|
+
ACTIVE_FIRMWARE_IDENTIFIER_0 = ActiveFirmwareIdentifier.from_b()
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@dataclass(frozen=True)
|
|
@@ -28,6 +28,77 @@ class Register(Data):
|
|
|
28
28
|
return self.get_attr(3)
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
@dataclass(frozen=True)
|
|
32
|
+
class Clock(Parameter):
|
|
33
|
+
@classmethod
|
|
34
|
+
def from_be(cls, b: int = 0, e: int = 0) -> "Clock":
|
|
35
|
+
return cls.parse(f"0.{b}.1.0.{e}.255")
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def time(self) -> "Clock":
|
|
39
|
+
return self.get_attr(2)
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def time_zone(self) -> "Clock":
|
|
43
|
+
return self.get_attr(3)
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def status(self) -> "Clock":
|
|
47
|
+
return self.get_attr(4)
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def time_zone(self) -> "Clock":
|
|
51
|
+
return self.get_attr(3)
|
|
52
|
+
|
|
53
|
+
@property
|
|
54
|
+
def status(self) -> "Clock":
|
|
55
|
+
return self.get_attr(4)
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def daylight_savings_begin(self) -> "Clock":
|
|
59
|
+
return self.get_attr(5)
|
|
60
|
+
|
|
61
|
+
@property
|
|
62
|
+
def daylight_savings_end(self) -> "Clock":
|
|
63
|
+
return self.get_attr(6)
|
|
64
|
+
|
|
65
|
+
@property
|
|
66
|
+
def daylight_savings_deviation(self) -> "Clock":
|
|
67
|
+
return self.get_attr(7)
|
|
68
|
+
|
|
69
|
+
@property
|
|
70
|
+
def daylight_savings_enabled(self) -> "Clock":
|
|
71
|
+
return self.get_attr(8)
|
|
72
|
+
|
|
73
|
+
@property
|
|
74
|
+
def clock_base(self) -> "Clock":
|
|
75
|
+
return self.get_attr(9)
|
|
76
|
+
|
|
77
|
+
@property
|
|
78
|
+
def adjust_to_quarter(self) -> "Clock":
|
|
79
|
+
return self.get_meth(1)
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def adjust_to_measuring_period(self) -> "Clock":
|
|
83
|
+
return self.get_meth(2)
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def adjust_to_minute(self) -> "Clock":
|
|
87
|
+
return self.get_meth(3)
|
|
88
|
+
|
|
89
|
+
@property
|
|
90
|
+
def adjust_to_preset_time(self) -> "Clock":
|
|
91
|
+
return self.get_meth(4)
|
|
92
|
+
|
|
93
|
+
@property
|
|
94
|
+
def preset_adjusting_time(self) -> "Clock":
|
|
95
|
+
return self.get_meth(5)
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def shift_time(self) -> "Clock":
|
|
99
|
+
return self.get_meth(6)
|
|
100
|
+
|
|
101
|
+
|
|
31
102
|
@dataclass(frozen=True)
|
|
32
103
|
class DisconnectControl(Parameter):
|
|
33
104
|
|
|
@@ -1,72 +1,70 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
from
|
|
1
|
+
from typing import Any, Iterable
|
|
2
|
+
from StructResult import result
|
|
3
|
+
from . import cosem_interface_class as ic
|
|
4
|
+
from ..types import cdt
|
|
5
|
+
from .parameter import Parameter
|
|
3
6
|
from ..cosem_interface_classes import collection
|
|
4
7
|
from ..config_parser import get_values
|
|
8
|
+
from ..settings import settings
|
|
5
9
|
|
|
6
10
|
|
|
7
|
-
def
|
|
11
|
+
def from_obj(
|
|
12
|
+
col: collection.Collection,
|
|
8
13
|
obj: ic.COSEMInterfaceClasses,
|
|
9
|
-
attr_index_par: tuple[int
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
attr_index_par: tuple[int, ...]
|
|
15
|
+
) -> result.SimpleOrError[str]:
|
|
16
|
+
if not hasattr(from_obj, "struct_pattern"):
|
|
17
|
+
from_obj.struct_pattern = dict(settings.report.struct)
|
|
18
|
+
ret: str = F"[{collection.get_name(obj.logical_name)}]\n"
|
|
13
19
|
for i in attr_index_par:
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
case _: pass
|
|
23
|
-
if isinstance(value, cdt.OctetString):
|
|
24
|
-
pass
|
|
25
|
-
if hasattr(value, "report"):
|
|
26
|
-
value = value.report
|
|
27
|
-
ret += F" {obj.get_attr_element(i)}: {value}\n"
|
|
28
|
-
elif isinstance(value, cdt.ComplexDataType):
|
|
20
|
+
par = Parameter(obj.logical_name.contents).set_i(i)
|
|
21
|
+
if isinstance(res_data := col.par2data(par), result.Error):
|
|
22
|
+
return res_data
|
|
23
|
+
a_data = res_data.value
|
|
24
|
+
if isinstance(a_data, cdt.SimpleDataType):
|
|
25
|
+
rep = col.par2rep(par, a_data)
|
|
26
|
+
ret += F" {obj.get_attr_element(i)}: {rep.msg}{f" {rep.unit}" if rep.unit else ""}\n"
|
|
27
|
+
elif isinstance(a_data, cdt.ComplexDataType):
|
|
29
28
|
ret += F" [{obj.get_attr_element(i)}]\n"
|
|
30
|
-
stack: list = [("", iter(
|
|
29
|
+
stack: list[tuple[Any, Any]] = [("", iter(a_data))]
|
|
31
30
|
while stack:
|
|
32
31
|
name, value_it = stack[-1]
|
|
33
|
-
indent = F"{' '*(len(stack) + 1)}"
|
|
34
|
-
|
|
35
|
-
if
|
|
32
|
+
indent = F"{' ' * (len(stack) + 1)}"
|
|
33
|
+
data = next(value_it, None)
|
|
34
|
+
if data:
|
|
36
35
|
if not isinstance(name, str):
|
|
37
|
-
name = next(name)
|
|
38
|
-
if isinstance(
|
|
36
|
+
name = str(next(name))
|
|
37
|
+
if isinstance(data, cdt.Array):
|
|
39
38
|
ret += F"{indent}[{name}]\n"
|
|
40
|
-
stack.append(("*", iter(
|
|
41
|
-
elif isinstance(
|
|
42
|
-
if
|
|
39
|
+
stack.append(("*", iter(data)))
|
|
40
|
+
elif isinstance(data, cdt.Structure):
|
|
41
|
+
if (pattern := from_obj.struct_pattern.get(data.__class__.__name__)):
|
|
43
42
|
val = list(pattern)
|
|
44
43
|
val.reverse()
|
|
45
|
-
|
|
44
|
+
result_ = str()
|
|
46
45
|
while val:
|
|
47
|
-
|
|
48
|
-
match i:
|
|
46
|
+
match val.pop():
|
|
49
47
|
case "%":
|
|
50
|
-
|
|
48
|
+
par_ = val.pop()
|
|
51
49
|
index = int(val.pop() + val.pop())
|
|
52
|
-
match
|
|
50
|
+
match par_:
|
|
53
51
|
case "n":
|
|
54
|
-
|
|
52
|
+
result_ += str(data.ELEMENTS[index])
|
|
55
53
|
case "v":
|
|
56
|
-
|
|
54
|
+
result_ += str(data[index])
|
|
57
55
|
case err:
|
|
58
56
|
raise ValueError(F"unknown macros &{err}{index}")
|
|
59
57
|
case symbol:
|
|
60
|
-
|
|
61
|
-
ret += F"{indent}{
|
|
58
|
+
result_ += symbol
|
|
59
|
+
ret += F"{indent}{result_}\n"
|
|
62
60
|
else:
|
|
63
|
-
if name
|
|
61
|
+
if name=="":
|
|
64
62
|
ret += "\n"
|
|
65
63
|
else:
|
|
66
64
|
ret += F"{indent}[{name}]\n"
|
|
67
|
-
stack.append((iter(
|
|
65
|
+
stack.append((iter(data.ELEMENTS), iter(data)))
|
|
68
66
|
else:
|
|
69
|
-
ret += F"{indent}{name}: {
|
|
67
|
+
ret += F"{indent}{name}: {data}\n"
|
|
70
68
|
else:
|
|
71
69
|
stack.pop()
|
|
72
|
-
return ret
|
|
70
|
+
return result.Simple(ret)
|
DLMS_SPODES/pardata.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
-
from .cosem_interface_classes import Parameter
|
|
2
|
+
from .cosem_interface_classes.parameter import Parameter
|
|
3
3
|
from typing import Optional, Iterator
|
|
4
4
|
from .types import cdt
|
|
5
5
|
|
|
@@ -9,14 +9,6 @@ class ParValues[T]:
|
|
|
9
9
|
par: Parameter
|
|
10
10
|
data: T
|
|
11
11
|
|
|
12
|
-
def __getitem__(self, item):
|
|
13
|
-
if item == 0:
|
|
14
|
-
return self.par
|
|
15
|
-
elif item == 1:
|
|
16
|
-
return self.data
|
|
17
|
-
else:
|
|
18
|
-
raise StopIteration
|
|
19
|
-
|
|
20
12
|
def __iter__(self) -> Iterator[Parameter | T]:
|
|
21
13
|
yield self.par
|
|
22
14
|
yield self.data
|
|
@@ -6,7 +6,7 @@ DLMS_SPODES/enums.py,sha256=13BE0owOyJBNlOI4NY1d-kpqVoHF7JPR9brkPKHLERE,17789
|
|
|
6
6
|
DLMS_SPODES/exceptions.py,sha256=UBZRQlQIRi1CzRxWTeqX5PVNuFS770f77BAizQ99IDU,3006
|
|
7
7
|
DLMS_SPODES/firmwares.py,sha256=lFRnxtq4joYhpZPxHD8Pv30-GvgcEfZCDZUYo_pIeQU,3850
|
|
8
8
|
DLMS_SPODES/literals.py,sha256=5u6hreLSXgmN7Z_5pXchyBKsuPYJ5deqxKHqewQEFoI,1632
|
|
9
|
-
DLMS_SPODES/pardata.py,sha256=
|
|
9
|
+
DLMS_SPODES/pardata.py,sha256=_VluNrP4R7PLVXa9xmqD7fiqEXQqyVXp48NieTct5jY,519
|
|
10
10
|
DLMS_SPODES/pdu_enums.py,sha256=5xiV-tZTPXOcHT8XQcHWrwAMKTOmCH09Sk4iL1N7I3c,2276
|
|
11
11
|
DLMS_SPODES/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
DLMS_SPODES/relation_to_OBIS.py,sha256=KcSMIQ_5amjeT0Lya3HbYoaDdz_BjZC2JLVhl2nffwo,32761
|
|
@@ -25,8 +25,8 @@ DLMS_SPODES/cosem_interface_classes/activity_calendar.py,sha256=VWSiKn2LNBA1VLAA
|
|
|
25
25
|
DLMS_SPODES/cosem_interface_classes/arbitrator.py,sha256=S9TguoMG6O5DpMBp6mpcJpw6PHanvh4SEAN3M_v6qts,3240
|
|
26
26
|
DLMS_SPODES/cosem_interface_classes/attr_indexes.py,sha256=aUSnT-dKoBsDbwLhlgtLIHGRl7PZrT-ld2ThCEUjUeA,328
|
|
27
27
|
DLMS_SPODES/cosem_interface_classes/clock.py,sha256=9OJwRGrbFPws_VZPayHv-hzFJegIcjgoJoenIqofd5w,4525
|
|
28
|
-
DLMS_SPODES/cosem_interface_classes/collection.py,sha256=
|
|
29
|
-
DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py,sha256=
|
|
28
|
+
DLMS_SPODES/cosem_interface_classes/collection.py,sha256=4zafwek9zuWPLlpOZqZ0-uC7z2X-IhsVC5kCUaxhEmY,98545
|
|
29
|
+
DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py,sha256=pY3UoW7XVV2TJ5cjphKsQZnngA8Q9S6TsjjZnMDLKb4,23363
|
|
30
30
|
DLMS_SPODES/cosem_interface_classes/data.py,sha256=YSjA3Y0M5NMcfYzWPEuZw6ojIqr2UghgW_ck8dXySMU,809
|
|
31
31
|
DLMS_SPODES/cosem_interface_classes/disconnect_control.py,sha256=CIx7I4QRpPxAC5iYxpbhCIuv6U2P3s6ELam8eD-kD5w,2926
|
|
32
32
|
DLMS_SPODES/cosem_interface_classes/extended_register.py,sha256=xULCS11YVWjFMoaRUrm4whvH39Gx0Cu6breUos_oLCs,1153
|
|
@@ -38,10 +38,10 @@ DLMS_SPODES/cosem_interface_classes/ln_pattern.py,sha256=IPluhyGWJQLBEUjOjdfEMct
|
|
|
38
38
|
DLMS_SPODES/cosem_interface_classes/obis.py,sha256=yEwYm5CshJx8X8uSy3QH8XIbdVPg8Tt6zPUjFgkAB0M,575
|
|
39
39
|
DLMS_SPODES/cosem_interface_classes/overview.py,sha256=0eko1CW0eH397J5kM20G7RSQUzCGV6lGCMPbLsKPEqQ,7146
|
|
40
40
|
DLMS_SPODES/cosem_interface_classes/parameter.py,sha256=esTD-1VzvX0rnazsHSVIR8mLuVxpdqwdjzppxj5Zz7s,18961
|
|
41
|
-
DLMS_SPODES/cosem_interface_classes/parameters.py,sha256=
|
|
41
|
+
DLMS_SPODES/cosem_interface_classes/parameters.py,sha256=VZDBm9H25VIGxUGGJ-OcVu0pAO8VJhFF2XdZTQMnmoM,4354
|
|
42
42
|
DLMS_SPODES/cosem_interface_classes/register.py,sha256=Cfikftpo1Nzg_B2drOmJDwoGkbS2wXlqQpxVgXL1w2U,1886
|
|
43
43
|
DLMS_SPODES/cosem_interface_classes/register_monitor.py,sha256=fNM-JrjHxQB8b5DgUOtDcnkO_hxu5bFICiuKEoZa37g,1792
|
|
44
|
-
DLMS_SPODES/cosem_interface_classes/reports.py,sha256=
|
|
44
|
+
DLMS_SPODES/cosem_interface_classes/reports.py,sha256=zsWmKGqdP6uiZrH8hR5aqHJPMsyHwyrSCRf6khhFoSg,3365
|
|
45
45
|
DLMS_SPODES/cosem_interface_classes/schedule.py,sha256=IT9sVrkOCdWV4uuTt8Kbu5bL6jchiVTgUqA15x1fq5s,8041
|
|
46
46
|
DLMS_SPODES/cosem_interface_classes/script_table.py,sha256=aPDXwjCkrvT-yGkCOOZXWjiOZViRy6N-Tb_Gl1aTIik,3455
|
|
47
47
|
DLMS_SPODES/cosem_interface_classes/single_action_schedule.py,sha256=UGRO-x2q1du3CupfB4KQtUyyUAcbJGqph_apIe0QfFY,1708
|
|
@@ -72,7 +72,7 @@ DLMS_SPODES/cosem_interface_classes/image_transfer/image_transfer_status.py,sha2
|
|
|
72
72
|
DLMS_SPODES/cosem_interface_classes/image_transfer/ver0.py,sha256=rnHj2XnK1Zr4CvPG_MrPSoBBcdh883rwqdIus1RxKMw,5371
|
|
73
73
|
DLMS_SPODES/cosem_interface_classes/implementations/__init__.py,sha256=z4OfnPPyYr6f94rj-PU3---Wk05ddduf9MkmWxhczXA,77
|
|
74
74
|
DLMS_SPODES/cosem_interface_classes/implementations/arbitrator.py,sha256=cMhYLi9ZFqfJ0yxjONHq9JZZJ3QuzrF0jtPjk4nf0eo,573
|
|
75
|
-
DLMS_SPODES/cosem_interface_classes/implementations/data.py,sha256=
|
|
75
|
+
DLMS_SPODES/cosem_interface_classes/implementations/data.py,sha256=PCa_exj-y0WFt5gVTZQvIpI1wNTqTFc6ZoUSmLKz1Ys,19001
|
|
76
76
|
DLMS_SPODES/cosem_interface_classes/implementations/profile_generic.py,sha256=oibO3EV9fRHxxaBdMQqz436GrMMqo1BlT6lgVtzUKU0,4318
|
|
77
77
|
DLMS_SPODES/cosem_interface_classes/modem_configuration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
78
|
DLMS_SPODES/cosem_interface_classes/modem_configuration/ver0.py,sha256=nFU3Y0fFhsOKfSl21TmA1CaWJo-N9Iqm7XlcGuSSjoQ,3071
|
|
@@ -96,7 +96,6 @@ DLMS_SPODES/hdlc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
|
|
|
96
96
|
DLMS_SPODES/hdlc/frame.py,sha256=ar5DvkPK5tUGSZcQYCpeku1Ansx7QecugvmcV-xekqI,34784
|
|
97
97
|
DLMS_SPODES/hdlc/sub_layer.py,sha256=zTxe5ddTt8tliFSY145HhluLwIh57gvOG19Mc8-vnEM,2147
|
|
98
98
|
DLMS_SPODES/obis/__init__.py,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
|
99
|
-
DLMS_SPODES/obis/abstract_objects.py,sha256=0ZoJKRQ_7FoChC2rNSgNV573hso8JYZQKdLF3Wgaoqw,443
|
|
100
99
|
DLMS_SPODES/obis/media_id.py,sha256=GRiwHPe9-3iCg4u_J6qf2rMc3Wjw0aJHKiSnBtNYD3o,22339
|
|
101
100
|
DLMS_SPODES/types/__init__.py,sha256=UFiP4suA72o_kvaqUnHLGK-cedDXLl8kVHYsjXHYUDw,116
|
|
102
101
|
DLMS_SPODES/types/choices.py,sha256=z7IasrlRaagOYNfRvgbpojDxf1jgYUc9cz59PH2PMi0,6350
|
|
@@ -112,7 +111,7 @@ DLMS_SPODES/types/implementations/integers.py,sha256=Asy4X260t1Fzw_V5iw0uiDOxtfB
|
|
|
112
111
|
DLMS_SPODES/types/implementations/long_unsigneds.py,sha256=SxmFvD2moQ03p-KZSBYK1Rv7bQSaywlHVXBfkTZG1OQ,8761
|
|
113
112
|
DLMS_SPODES/types/implementations/octet_string.py,sha256=Jo_sfWcsfstiP4O6mXfBOOQlksx1c2qJMI-vbAOV-yM,294
|
|
114
113
|
DLMS_SPODES/types/implementations/structs.py,sha256=GMOo6Jy8jA9d6KTLs0D-j5t0oSRvxUIwtBr_4UePwbA,2059
|
|
115
|
-
dlms_spodes-0.87.
|
|
116
|
-
dlms_spodes-0.87.
|
|
117
|
-
dlms_spodes-0.87.
|
|
118
|
-
dlms_spodes-0.87.
|
|
114
|
+
dlms_spodes-0.87.5.dist-info/METADATA,sha256=dqBhrE-dP748FIQpNtLEBN5seqiaVed7N6t-x44BfVU,1027
|
|
115
|
+
dlms_spodes-0.87.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
116
|
+
dlms_spodes-0.87.5.dist-info/top_level.txt,sha256=k26SRuRdwBZrSM3NgNZECAUNIDZREbJuLCnPbWtTNak,12
|
|
117
|
+
dlms_spodes-0.87.5.dist-info/RECORD,,
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"""DLMS UA 1000-1 Ed. 14. 7.4 Abstract objects (Value group A = 0)"""
|
|
2
|
-
from struct import pack_into
|
|
3
|
-
from ..types import cst
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
_buf = bytearray(6)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
def BILLING_PERIOD_COUNTER(b: int = 0, f: int = 255):
|
|
10
|
-
return cst.LogicalName(bytes((0, b, 0, 1, 0, f)))
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def SPODES3_DISPLAY_MODE():
|
|
14
|
-
return cst.LogicalName(pack_into(">6B", _buf, 0, 0, 96, 4, 1, 255))
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
LDN = cst.LogicalName(pack_into(">6B", _buf, 0, 0, 42, 0, 0, 255))
|
|
File without changes
|
|
File without changes
|