DLMS-SPODES 0.87.12__py3-none-any.whl → 0.87.15__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.
Files changed (100) hide show
  1. DLMS_SPODES/Values/EN/__init__.py +1 -1
  2. DLMS_SPODES/Values/EN/actors.py +8 -8
  3. DLMS_SPODES/Values/EN/relation_to_obis_names.py +387 -387
  4. DLMS_SPODES/Values/RU/__init__.py +1 -1
  5. DLMS_SPODES/Values/RU/actors.py +8 -8
  6. DLMS_SPODES/Values/RU/relation_to_obis_names.py +396 -396
  7. DLMS_SPODES/__init__.py +6 -6
  8. DLMS_SPODES/configEN.ini +126 -126
  9. DLMS_SPODES/config_parser.py +53 -53
  10. DLMS_SPODES/cosem_interface_classes/__class_init__.py +3 -3
  11. DLMS_SPODES/cosem_interface_classes/__init__.py +1 -1
  12. DLMS_SPODES/cosem_interface_classes/a_parameter.py +20 -20
  13. DLMS_SPODES/cosem_interface_classes/activity_calendar.py +254 -254
  14. DLMS_SPODES/cosem_interface_classes/arbitrator.py +105 -105
  15. DLMS_SPODES/cosem_interface_classes/association_ln/abstract.py +34 -34
  16. DLMS_SPODES/cosem_interface_classes/association_ln/authentication_mechanism_name.py +25 -25
  17. DLMS_SPODES/cosem_interface_classes/association_ln/mechanism_id.py +25 -25
  18. DLMS_SPODES/cosem_interface_classes/association_ln/method.py +5 -5
  19. DLMS_SPODES/cosem_interface_classes/association_ln/ver0.py +485 -485
  20. DLMS_SPODES/cosem_interface_classes/association_ln/ver1.py +133 -133
  21. DLMS_SPODES/cosem_interface_classes/association_ln/ver2.py +36 -36
  22. DLMS_SPODES/cosem_interface_classes/association_ln/ver3.py +4 -4
  23. DLMS_SPODES/cosem_interface_classes/association_sn/ver0.py +12 -12
  24. DLMS_SPODES/cosem_interface_classes/attr_indexes.py +12 -12
  25. DLMS_SPODES/cosem_interface_classes/clock.py +131 -131
  26. DLMS_SPODES/cosem_interface_classes/collection.py +2122 -2122
  27. DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py +583 -583
  28. DLMS_SPODES/cosem_interface_classes/data.py +21 -21
  29. DLMS_SPODES/cosem_interface_classes/demand_register/ver0.py +59 -59
  30. DLMS_SPODES/cosem_interface_classes/disconnect_control.py +74 -74
  31. DLMS_SPODES/cosem_interface_classes/extended_register.py +27 -27
  32. DLMS_SPODES/cosem_interface_classes/gprs_modem_setup.py +43 -43
  33. DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver0.py +103 -103
  34. DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver1.py +40 -40
  35. DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver2.py +9 -9
  36. DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver0.py +11 -11
  37. DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver1.py +53 -53
  38. DLMS_SPODES/cosem_interface_classes/iec_local_port_setup.py +11 -11
  39. DLMS_SPODES/cosem_interface_classes/image_transfer/image_transfer_status.py +15 -15
  40. DLMS_SPODES/cosem_interface_classes/image_transfer/ver0.py +126 -126
  41. DLMS_SPODES/cosem_interface_classes/implementations/__init__.py +3 -3
  42. DLMS_SPODES/cosem_interface_classes/implementations/arbitrator.py +19 -19
  43. DLMS_SPODES/cosem_interface_classes/implementations/data.py +487 -487
  44. DLMS_SPODES/cosem_interface_classes/implementations/profile_generic.py +83 -83
  45. DLMS_SPODES/cosem_interface_classes/ipv4_setup.py +72 -72
  46. DLMS_SPODES/cosem_interface_classes/limiter.py +111 -111
  47. DLMS_SPODES/cosem_interface_classes/ln_pattern.py +333 -333
  48. DLMS_SPODES/cosem_interface_classes/modem_configuration/ver0.py +65 -65
  49. DLMS_SPODES/cosem_interface_classes/modem_configuration/ver1.py +39 -39
  50. DLMS_SPODES/cosem_interface_classes/ntp_setup/ver0.py +67 -67
  51. DLMS_SPODES/cosem_interface_classes/obis.py +23 -23
  52. DLMS_SPODES/cosem_interface_classes/overview.py +197 -197
  53. DLMS_SPODES/cosem_interface_classes/parameter.py +547 -547
  54. DLMS_SPODES/cosem_interface_classes/parameters.py +172 -172
  55. DLMS_SPODES/cosem_interface_classes/profile_generic/ver0.py +122 -122
  56. DLMS_SPODES/cosem_interface_classes/profile_generic/ver1.py +277 -277
  57. DLMS_SPODES/cosem_interface_classes/push_setup/ver0.py +12 -12
  58. DLMS_SPODES/cosem_interface_classes/push_setup/ver1.py +10 -10
  59. DLMS_SPODES/cosem_interface_classes/push_setup/ver2.py +166 -166
  60. DLMS_SPODES/cosem_interface_classes/register.py +45 -45
  61. DLMS_SPODES/cosem_interface_classes/register_activation/ver0.py +80 -80
  62. DLMS_SPODES/cosem_interface_classes/register_monitor.py +46 -46
  63. DLMS_SPODES/cosem_interface_classes/reports.py +70 -70
  64. DLMS_SPODES/cosem_interface_classes/schedule.py +176 -176
  65. DLMS_SPODES/cosem_interface_classes/script_table.py +87 -87
  66. DLMS_SPODES/cosem_interface_classes/security_setup/ver0.py +68 -68
  67. DLMS_SPODES/cosem_interface_classes/security_setup/ver1.py +158 -158
  68. DLMS_SPODES/cosem_interface_classes/single_action_schedule.py +50 -50
  69. DLMS_SPODES/cosem_interface_classes/special_days_table.py +84 -84
  70. DLMS_SPODES/cosem_interface_classes/tcp_udp_setup.py +42 -42
  71. DLMS_SPODES/cosem_pdu.py +93 -93
  72. DLMS_SPODES/enums.py +625 -625
  73. DLMS_SPODES/exceptions.py +106 -106
  74. DLMS_SPODES/firmwares.py +99 -99
  75. DLMS_SPODES/hdlc/frame.py +875 -875
  76. DLMS_SPODES/hdlc/sub_layer.py +54 -54
  77. DLMS_SPODES/literals.py +17 -17
  78. DLMS_SPODES/obis/__init__.py +1 -1
  79. DLMS_SPODES/obis/media_id.py +931 -931
  80. DLMS_SPODES/pardata.py +22 -22
  81. DLMS_SPODES/pdu_enums.py +98 -98
  82. DLMS_SPODES/relation_to_OBIS.py +465 -463
  83. DLMS_SPODES/settings.py +551 -551
  84. DLMS_SPODES/types/choices.py +142 -142
  85. DLMS_SPODES/types/common_data_types.py +2401 -2399
  86. DLMS_SPODES/types/cosem_service_types.py +109 -109
  87. DLMS_SPODES/types/implementations/arrays.py +25 -25
  88. DLMS_SPODES/types/implementations/bitstrings.py +97 -97
  89. DLMS_SPODES/types/implementations/double_long_usingneds.py +35 -35
  90. DLMS_SPODES/types/implementations/enums.py +57 -57
  91. DLMS_SPODES/types/implementations/integers.py +11 -11
  92. DLMS_SPODES/types/implementations/long_unsigneds.py +127 -127
  93. DLMS_SPODES/types/implementations/octet_string.py +11 -11
  94. DLMS_SPODES/types/implementations/structs.py +64 -64
  95. DLMS_SPODES/types/useful_types.py +677 -677
  96. {dlms_spodes-0.87.12.dist-info → dlms_spodes-0.87.15.dist-info}/METADATA +30 -30
  97. dlms_spodes-0.87.15.dist-info/RECORD +117 -0
  98. {dlms_spodes-0.87.12.dist-info → dlms_spodes-0.87.15.dist-info}/WHEEL +1 -1
  99. dlms_spodes-0.87.12.dist-info/RECORD +0 -117
  100. {dlms_spodes-0.87.12.dist-info → dlms_spodes-0.87.15.dist-info}/top_level.txt +0 -0
@@ -1,463 +1,465 @@
1
- """ The OBIS identification system serves as a basis for the COSEM logical names. The system of naming COSEM objects is defined in the basic
2
- principles (see Clause 4 EN 62056-62:2007), the identification of real data items is specified in IEC 62056-61. The following clauses define the
3
- usage of those definitions in the COSEM environment. All codes, which are not explicitly listed, but outside the manufacturer specific range are
4
- reserved for future use."""
5
- from functools import lru_cache
6
- from dataclasses import dataclass
7
- from . import settings
8
- from .types import cosem_service_types as cst
9
- from .cosem_interface_classes import overview
10
- from .obis import media_id
11
-
12
-
13
- match settings.get_current_language():
14
- case settings.Language.ENGLISH: from .Values.EN import relation_to_obis_names as rn
15
- case settings.Language.RUSSIAN: from .Values.RU import relation_to_obis_names as rn
16
-
17
-
18
- def get_energy_names(electric_obj: int) -> str:
19
- """ corresponding with Сподэс """
20
- match electric_obj:
21
- case 1 | 21 | 41 | 61: return "Активная энергия, импорт"
22
- case 2 | 22 | 42 | 62: return "Активная энергия, экспорт"
23
- case 3 | 23 | 43 | 63: return "Реактивная энергия, импорт"
24
- case 4 | 24 | 44 | 64: return "Реактивная энергия, экспорт"
25
-
26
-
27
- def get_obj_names(electric_obj: int) -> str:
28
- """ corresponding with DLMS UA 1000-1 Ed. 14 7.5.1 Table 65. Value group C codes – Electricity. Range: 1..80, RU: 124..126 """
29
- match electric_obj:
30
- case 1 | 21 | 41 | 61: return str(media_id.ACTIVE_POWER_PLUS)
31
- case 2 | 22 | 42 | 62: return str(media_id.ACTIVE_POWER_MINUS)
32
- case 3 | 23 | 43 | 63: return str(media_id.REACTIVE_POWER_PLUS)
33
- case 4 | 24 | 44 | 64: return str(media_id.REACTIVE_POWER_MINUS)
34
- case 5 | 25 | 45 | 65: return str(media_id.REACTIVE_POWER_QI)
35
- case 6 | 26 | 46 | 66: return str(media_id.REACTIVE_POWER_QII)
36
- case 7 | 27 | 47 | 67: return str(media_id.REACTIVE_POWER_QIII)
37
- case 8 | 28 | 48 | 68: return str(media_id.REACTIVE_POWER_QIV)
38
- case 9 | 29 | 49 | 69: return str(media_id.APPARENT_POWER_PLUS)
39
- case 10 | 30 | 50 | 70: return str(media_id.APPARENT_POWER_MINUS)
40
- case 11 | 31 | 51 | 71: return str(media_id.CURRENT)
41
- case 12 | 32 | 52 | 72: return str(media_id.VOLTAGE)
42
- case 13 | 33 | 53 | 73: return str(media_id.POWER_FACTOR)
43
- case 14 | 34 | 54 | 74: return str(media_id.SUPPLY_FREQUENCY)
44
- case 15 | 35 | 55 | 75: return str(media_id.ACTIVE_POWER_SUM)
45
- case 16 | 36 | 56 | 76: return str(media_id.ACTIVE_POWER_DIFF)
46
- case 17 | 37 | 57 | 77: return str(media_id.ACTIVE_POWER_QI)
47
- case 18 | 38 | 58 | 78: return str(media_id.ACTIVE_POWER_QII)
48
- case 19 | 39 | 59 | 79: return str(media_id.ACTIVE_POWER_QIII)
49
- case 20 | 40 | 60 | 80: return str(media_id.ACTIVE_POWER_QIV)
50
- case 88: return rn.CUMULATIVE_AMPERE_SQUARED_HOURS
51
- case 89: return rn.CUMULATIVE_VOLT_SQUARED_HOURS
52
- case 124: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L1_L2}"
53
- case 125: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L2_L3}"
54
- case 126: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L3_L1}"
55
- case 128: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L1}"
56
- case 129: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L2}"
57
- case 130: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L3}"
58
- case 131: return F"{rn.POWER_REACTIVE_FACTOR} {rn.ALL_PHASE}"
59
- case 133: return F"{rn.VOLTAGE_ASYMMETRY_COEFFICIENT}"
60
- case 147: return F"{rn.RU_TOTAL_DEVIATION_TIME} {rn.FOR} {rn.VOLTAGE}"
61
- case _: raise ValueError(F"getting electrical name by C group with unknown: C={electric_obj}")
62
-
63
-
64
- def get_harmonics_name(classification: int) -> str:
65
- """ See DLMS UA 1000-1 Ed.13 7.5.3.3 Harmonics """
66
- match classification:
67
- case 0: return rn.TOTAL_FUND_ALL
68
- case 124: return rn.THD
69
- case 125: return rn.TDD
70
- case 126: return rn.ALL_HARMONICS
71
- case 127: return rn.ALL_HARMONICS_TO_NOMINAL_VALUE_RATIO
72
- case _ if 120 >= classification >= 1: return F"{rn.HARMONIC} {classification}"
73
- case man:
74
- return F"Manufacture specific {man}"
75
-
76
-
77
- def get_processing_names(d: int) -> str:
78
- match d:
79
- case 0: return rn.BILLING_PERIOD_AVERAGE_SINCE_LAST_RESET
80
- case 1: return rn.CUMULATIVE_MINIMUM_1
81
- case 2: return rn.CUMULATIVE_MAXIMUM_1
82
- case 3: return rn.MINIMUM_1
83
- case 4: return rn.CURRENT_AVERAGE_1
84
- case 5: return rn.LAST_AVERAGE_1
85
- case 6: return rn.MAXIMUM_1
86
- case 7: return rn.INSTANTANEOUS_VALUE
87
- case 8: return rn.TIME_INTEGRAL_1
88
- case 9: return rn.TIME_INTEGRAL_2
89
- case 10: return rn.TIME_INTEGRAL_3
90
- case 11: return rn.CUMULATIVE_MINIMUM_2
91
- case 12: return rn.CUMULATIVE_MAXIMUM_2
92
- case 13: return rn.MINIMUM_2
93
- case 14: return rn.CURRENT_AVERAGE_2
94
- case 15: return rn.LAST_AVERAGE_2
95
- case 16: return rn.MAXIMUM_2
96
- case 17: return rn.TIME_INTEGRAL_7
97
- case 18: return rn.TIME_INTEGRAL_8
98
- case 19: return rn.TIME_INTEGRAL_9
99
- case 20: return rn.TIME_INTEGRAL_10
100
- case 21: return rn.CUMULATIVE_MINIMUM_3
101
- case 22: return rn.CUMULATIVE_MAXIMUM_3
102
- case 23: return rn.MINIMUM_3
103
- case 24: return rn.CURRENT_AVERAGE_3
104
- case 25: return rn.LAST_AVERAGE_3
105
- case 26: return rn.MAXIMUM_3
106
- case 27: return rn.CURRENT_AVERAGE_5
107
- case 28: return rn.CURRENT_AVERAGE_6
108
- case 29: return rn.TIME_INTEGRAL_5
109
- case 30: return rn.TIME_INTEGRAL_6
110
- case 31: return rn.UNDER_LIMIT_THRESHOLD
111
- case 32: return rn.UNDER_LIMIT_OCCURRENCE_COUNTER
112
- case 33: return rn.UNDER_LIMIT_DURATION
113
- case 34: return rn.UNDER_LIMIT_MAGNITUDE
114
- case 35: return rn.OVER_LIMIT_THRESHOLD
115
- case 36: return rn.OVER_LIMIT_OCCURRENCE_COUNTER
116
- case 37: return rn.OVER_LIMIT_DURATION
117
- case 38: return rn.OVER_LIMIT_MAGNITUDE
118
- case 39: return rn.MISSING_THRESHOLD
119
- case 40: return rn.MISSING_OCCURRENCE_COUNTER
120
- case 41: return rn.MISSING_DURATION
121
- case 42: return rn.MISSING_MAGNITUDE
122
- case 43: return rn.TIME_THRESHOLD_FOR_UNDER_LIMIT
123
- case 44: return rn.TIME_THRESHOLD_FOR_OVER_LIMIT
124
- case 45: return rn.TIME_THRESHOLD_FOR_MISSING_MAGNITUDE
125
- case 46: return rn.CONTRACTED_VALUE
126
- case 49: return rn.AVERAGE_VALUE_FOR_RECORDING_INTERVAL_1
127
- case 50: return rn.AVERAGE_VALUE_FOR_RECORDING_INTERVAL_2
128
- case 51: return rn.MINIMUM_FOR_RECORDING_INTERVAL_1
129
- case 52: return rn.MINIMUM_FOR_RECORDING_INTERVAL_2
130
- case 53: return rn.MAXIMUM_FOR_RECORDING_INTERVAL_1
131
- case 54: return rn.MAXIMUM_FOR_RECORDING_INTERVAL_2
132
- case 55: return rn.TEST_AVERAGE
133
- case 56: return rn.CURRENT_AVERAGE_4_FOR_HARMONICS_MEASUREMENT
134
- case 58: return rn.TIME_INTEGRAL_4
135
- case 128: return rn.RU_POSITIVE_DEVIATION
136
- case 129: return rn.RU_NEGATIVE_DEVIATION
137
- case 133: return F"{rn.RU_TOTAL_DEVIATION_TIME} {rn.BILLING_PERIOD}"
138
- case 134: return rn.RU_CHANGE_LIMIT_LEVEL
139
- case _: raise ValueError(F'Unknown Processing of measurement values {d}')
140
-
141
-
142
- def get_rate(value: int) -> str:
143
- if value == 0:
144
- return rn.TOTAL
145
- elif value <= 63:
146
- return F", {rn.RATE} {value}"
147
- elif value <= 254:
148
- return F", {rn.MANUFACTURER_SPECIFIC} {value}"
149
- elif value == 255:
150
- return F", {rn.RESERVED}"
151
- else:
152
- raise ValueError(F"got group E: {value}, expect 0..255")
153
-
154
-
155
- def handle_B(value: int) -> str:
156
- if value == 0:
157
- return ""
158
- elif value <= 64:
159
- return F", {rn.CHANNEL} {value}"
160
- elif value <= 127:
161
- return F", {rn.UTILITY_SPECIFIC} {value}"
162
- elif value <= 199:
163
- return F", {rn.MANUFACTURER_SPECIFIC} {value}"
164
- elif value <= 255:
165
- return F", {rn.RESERVED} {value}"
166
- else:
167
- raise ValueError(F"got group B: {value}, expect 0..255")
168
-
169
-
170
- def handle_E(value: int) -> str:
171
- if value == 0:
172
- return ""
173
- elif value <= 127:
174
- return F", {rn.INSTANCE} {value}"
175
- elif value <= 255:
176
- return F", {rn.MANUFACTURER_SPECIFIC} {value}"
177
- else:
178
- raise ValueError(F"got group E: {value}, expect 0..255")
179
-
180
-
181
- @lru_cache(maxsize=512)
182
- def get_name(logical_name: cst.LogicalName) -> str:
183
- match logical_name.a, logical_name.b, logical_name.c, logical_name.d, logical_name.e:
184
- case 0, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
185
- case 0, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
186
- case 0, b, 0, 2, 1: return F"{rn.ACTIVE_FIRMWARE_VERSION}{handle_B(b)}"
187
- case 0, b, 0, 2, 8: return F"{rn.ACTIVE_FIRMWARE_SIGNATURE}{handle_B(b)}"
188
- case 0, b, 1, 0, e: return F"{overview.ClassID.CLOCK}{handle_B(b)}{handle_E(e)}"
189
- case 0, b, 2, 0, e: return F"{overview.ClassID.MODEM_CONFIGURATION}{handle_B(b)}{handle_E(e)}"
190
- case 0, b, 10, 0, 0: return F"{rn.GLOBAL_METER_RESET_SCRIPT_TABLE}{handle_B(b)}"
191
- case 0, b, 10, 0, 1: return F"{rn.MDI_RESET_END_OF_BILLING_PERIOD_SCRIPT_TABLE}{handle_B(b)}"
192
- case 0, b, 10, 0, 100: return F"{rn.TARIFFICATION_SCRIPT_TABLE}{handle_B(b)}"
193
- case 0, b, 10, 0, 103: return F"{rn.SET_OUTPUT_SIGNALS_SCRIPT_TABLE}{handle_B(b)}"
194
- case 0, b, 10, 0, 106: return F"{rn.DISCONNECT_CONTROL_SCRIPT_TABLE}{handle_B(b)}"
195
- case 0, b, 10, 0, 107: return F"{rn.IMAGE_ACTIVATION_SCRIPT_TABLE}{handle_B(b)}"
196
- case 0, b, 10, 0, 108: return F"{rn.PUSH_SCRIPT_TABLE}{handle_B(b)}"
197
- case 0, b, 10, 0, 128: return F"{rn.RU_STOP_FRAME_SCRIPT_TABLE}{handle_B(b)}"
198
- case 0, b, 11, 0, e: return F"{overview.ClassID.SPECIAL_DAYS_TABLE}{handle_B(b)}{handle_E(e)}"
199
- case 0, b, 12, 0, e: return F"{overview.ClassID.SCHEDULE}{handle_B(b)}{handle_E(e)}"
200
- case 0, b, 13, 0, e: return F"{overview.ClassID.ACTIVITY_CALENDAR}{handle_B(b)}{handle_E(e)}"
201
- case 0, b, 14, 0, e: return F"{overview.ClassID.REGISTER_ACTIVATION}{handle_B(b)}{handle_E(e)}"
202
- case 0, b, 15, 0, 0: return F"{rn.END_OF_BILLING_PERIOD_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
203
- case 0, b, 15, 0, 1: return F"{rn.DISCONNECT_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
204
- case 0, b, 15, 0, 2: return F"{rn.IMAGE_ACTIVATION_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
205
- case 0, b, 15, 0, 3: return F"{rn.OUTPUT_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
206
- case 0, b, 15, 0, 4: return F"{rn.PUSH_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
207
- case 0, b, 15, 0, 5: return F"{rn.LOAD_PROFILE_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
208
- case 0, b, 15, 0, 6: return F"{rn.M_BUS_PROFILE_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
209
- case 0, b, 15, 0, 7: return F"{rn.FUNCTION_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
210
- case 0, b, 16, 1, 1: return F"{rn.RU_ALARM_MONITOR_1}{handle_B(b)}"
211
- case 0, b, 17, 0, 0: return F"{rn.RU_LIMITER_BY_POWER}{handle_B(b)}"
212
- case 0, b, 17, 0, 1: return F"{rn.RU_LIMITER_BY_CURRENT}{handle_B(b)}"
213
- case 0, b, 17, 0, 2: return F"{rn.RU_LIMITER_BY_VOLTAGE}{handle_B(b)}"
214
- case 0, b, 17, 0, 3: return F"{rn.RU_LIMITER_BY_MAGNETIC}{handle_B(b)}"
215
- case 0, b, 17, 0, 4: return F"{rn.RU_LIMITER_BY_DIFFERENCE_CURRENT}{handle_B(b)}"
216
- case 0, b, 17, 0, 5: return F"{rn.RU_LIMITER_BY_TEMPERATURE}{handle_B(b)}"
217
- case 0, b, 17, 0, e: return F"{overview.ClassID.LIMITER}{handle_B(b)}{handle_E(e)}"
218
- case 0, 0, 21, 0, 1: return rn.GENERAL_DISPLAY_READOUT
219
- case 0, 0, 21, 0, 2: return rn.ALTERNATE_DISPLAY_READOUT
220
- case 0, 0, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_OPTO
221
- case 0, 1, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_RS_485
222
- case 0, 2, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_GSM
223
- case 0, b, 22, 0, 0: return F"{overview.ClassID.IEC_HDLC_SETUP}{handle_B(b)}"
224
- case 0, b, 25, 0, 0: return F"{overview.ClassID.TCP_UDP_SETUP}{handle_B(b)}"
225
- case 0, b, 25, 1, 0: return F"{overview.ClassID.IPV4_SETUP}{handle_B(b)}"
226
- case 0, b, 25, 4, 0: return F"{overview.ClassID.GPRS_MODEM_SETUP}{handle_B(b)}"
227
- case 0, b, 25, 6, 0: return F"{overview.ClassID.GSM_DIAGNOSTIC}{handle_B(b)}"
228
- case 0, b, 25, 9, 0: return F"{overview.ClassID.PUSH_SETUP}{handle_B(b)}"
229
- case 0, b, 25, 10, 0: return F"{overview.ClassID.NTP_SETUP}{handle_B(b)}"
230
- case 0, 0, 40, 0, 0: return rn.CURRENT_ASSOCIATION
231
- case 0, 0, 40, 0, 1: return rn.RU_PUBLIC_CLIENT_ASSOCIATION
232
- case 0, 0, 40, 0, 2: return rn.RU_METER_READER_ASSOCIATION
233
- case 0, 0, 40, 0, 3: return rn.RU_UTILITY_SETTING_ASSOCIATION
234
- case 0, 0, 40, 0, 4: return rn.RU_PUBLIC_CLIENT_ASSOCIATION
235
- case 0, 0, 40, 0, e: return F"{overview.ClassID.ASSOCIATION_LN}{handle_E(e)}"
236
- case 0, 0, 42, 0, 0: return rn.COSEM_LOGICAL_DEVICE_NAME
237
- case 0, 0, 43, 0, e: return F"{overview.ClassID.SECURITY_SETUP}{handle_E(e)}"
238
- case 0, b, 43, 1, e: return F"{rn.INVOCATION_COUNTER}{handle_B(b)}{handle_E(e)}"
239
- case 0, 0, 44, 0, e: return F"{overview.ClassID.IMAGE_TRANSFER}{handle_E(e)}"
240
- case 0, 0, 94, 7, 1: return rn.RU_SPECIFIC_PASSPORT_DATA_PROFILE
241
- case 0, b, 96, 1, 0: return F"{rn.RU_DEVICE_FACTORY_NUMBER}{handle_B(b)}"
242
- case 0, b, 96, 1, 1: return F"{rn.RU_DEVICE_TYPE}{handle_B(b)}"
243
- case 0, b, 96, 1, 2: return F"{rn.RU_DEVICE_METROLOGICAL_VERSION}{handle_B(b)}"
244
- case 0, b, 96, 1, 3: return F"{rn.RU_PRODUCER_NAME}{handle_B(b)}"
245
- case 0, b, 96, 1, 4: return F"{rn.RU_DEVICE_RELEASE_DATE}{handle_B(b)}"
246
- case 0, b, 96, 1, 5: return F"{rn.RU_REMOTE_CONSOLE_SERIAL_NUMBER}{handle_B(b)}"
247
- case 0, b, 96, 1, 6: return F"{rn.RU_SPODES_VERSION}{handle_B(b)}"
248
- case 0, b, 96, 1, 7: return F"{rn.RU_DEVICE_CONNECTION_SCHEME}{handle_B(b)}"
249
- case 0, b, 96, 1, 8: return F"{rn.SPODES3_NOT_METROLOGICAL_FIRMWARE_ID}{handle_B(b)}"
250
- case 0, b, 96, 1, 9: return F"{rn.RU_DEVICE_ID}{handle_B(b)}"
251
- case 0, b, 96, 1, 10: return F"{rn.RU_COUNTER_POINT_DATA}{handle_B(b)}"
252
- case 0, b, 96, 2, 0: return F"{rn.NUMBER_OF_CONFIGURATION_PROGRAM_CHANGES}{handle_B(b)}"
253
- case 0, b, 96, 2, 1: return F"{rn.DATE_A_OF_LAST_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
254
- case 0, b, 96, 2, 2: return F"{rn.DATE_A_OF_LAST_TIME_SWITCH_PROGRAM_CHANGE}{handle_B(b)}"
255
- case 0, b, 96, 2, 3: return F"{rn.DATE_A_OF_LAST_RIPPLE_CONTROL_RECEIVER_PROGRAM_CHANGE}{handle_B(b)}"
256
- case 0, b, 96, 2, 4: return F"{rn.STATUS_OF_SECURITY_SWITCHES}{handle_B(b)}"
257
- case 0, b, 96, 2, 5: return F"{rn.DATE_A_OF_LAST_CALIBRATION}{handle_B(b)}"
258
- case 0, b, 96, 2, 6: return F"{rn.DATE_A_OF_NEXT_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
259
- case 0, b, 96, 2, 7: return F"{rn.DATE_A_OF_ACTIVATION_OF_THE_PASSIVE_CALENDAR}{handle_B(b)}"
260
- case 0, b, 96, 2, 10: return F"{rn.NUMBER_OF_PROTECTED_CONFIGURATION_PROGRAM_CHANGES}{handle_B(b)}"
261
- case 0, b, 96, 2, 11: return F"{rn.DATE_A_OF_LAST_PROTECTED_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
262
- case 0, b, 96, 2, 12: return F"{rn.DATE_A_CORRECTED_OF_LAST_CLOCK_SYNCHRONIZATION_SETTING}{handle_B(b)}"
263
- case 0, b, 96, 2, 13: return F"{rn.DATE_OF_LAST_FIRMWARE_ACTIVATION}{handle_B(b)}"
264
- case 0, b, 96, 3, 0: return F"{rn.I_O_CONTROL_SIGNAL_OBJECTS_GLOBAL}{handle_B(b)}"
265
- case 0, b, 96, 3, 10: return F"{overview.ClassID.DISCONNECT_CONTROL}{handle_B(b)}"
266
- case 0, b, 96, 3, 20: return F"{rn.RU_RELAY_LOAD_ARBITRATOR}{handle_B(b)}"
267
- case 0, 0, 96, 4, 1: return rn.RU_LCD_BACKLIGHT_MODE
268
- case 0, 0, 96, 4, 3: return rn.RU_LOAD_LOCK_STATUS
269
- case 0, 0, 96, 5, 0: return rn.INTERNAL_OPERATING_STATUS_GLOBAL
270
- case 0, 0, 96, 5, 1: return rn.INTERNAL_OPERATING_STATUS_1
271
- case 0, 0, 96, 5, 2: return rn.INTERNAL_OPERATING_STATUS_2
272
- case 0, 0, 96, 5, 3: return rn.INTERNAL_OPERATING_STATUS_3
273
- case 0, 0, 96, 5, 4: return rn.INTERNAL_OPERATING_STATUS_4
274
- case 0, 0, 96, 5, 132: return rn.SPODES3_PHASE_ALTERNATING_CONTROL
275
- case 0, b, 96, 8, 0: return F"{rn.TIME_OF_OPERATION}{handle_B(b)}"
276
- case 0, b, 96, 8, 10: return F"{rn.RU_DURATION_OF_FAILURE_OVERSTRAIN}{handle_B(b)}"
277
- case 0, b, 96, 9, 0: return F"{rn.RU_AMBIENT_TEMPERATURE}{handle_B(b)}"
278
- case 0, b, 96, 11, 0: return F"{rn.EVENTS_RELATED_TO_VOLTAGE}{handle_B(b)}"
279
- case 0, b, 96, 11, 1: return F"{rn.RU_EVENTS_RELATED_TO_CURRENT}{handle_B(b)}"
280
- case 0, b, 96, 11, 2: return F"{rn.RU_EVENTS_RELATED_TO_LOAD_RELAY}{handle_B(b)}"
281
- case 0, b, 96, 11, 3: return F"{rn.RU_EVENTS_FOR_PROGRAMMING_DEVICE_PARAMETERS}{handle_B(b)}"
282
- case 0, b, 96, 11, 4: return F"{rn.RU_EXTERNAL_IMPACT_EVENTS}{handle_B(b)}"
283
- case 0, b, 96, 11, 5: return F"{rn.RU_COMMUNICATION_EVENTS}{handle_B(b)}"
284
- case 0, b, 96, 11, 6: return F"{rn.RU_ACCESS_CONTROL_EVENTS}{handle_B(b)}"
285
- case 0, b, 96, 11, 7: return F"{rn.RU_EVENT_CODES_FOR_THE_SELF_DIAGNOSIS_LOG}{handle_B(b)}"
286
- case 0, b, 96, 11, 8: return F"{rn.RU_EVENTS_FOR_EXCEEDING_THE_REACTIVE_POWER}{handle_B(b)}"
287
- case 0, b, 96, 12, 4: return F"{rn.RU_CHANNEL_NUMBER_INTERFACE}{handle_B(b)}"
288
- case 0, b, 96, 12, 6: return F"{rn.COMMUNICATION_ADDRESS}{handle_B(b)}"
289
- case 0, 128, 96, 12, 0: return F"{rn.KPZ_INTERFACE_LIST}"
290
- case 0, b, 96, 13, 0: return F"{rn.LOCAL_CONSUMER_MESSAGE}{handle_B(b)}"
291
- case 0, b, 96, 13, 1: return F"{rn.DISPLAY_CONSUMER_MESSAGE}{handle_B(b)}"
292
- case 0, b, 96, 15, 0: return F"{rn.RU_RELAY_TRIGGERING_METER_FOR_OPENING}{handle_B(b)}"
293
- case 0, b, 96, 20, 0: return F"{rn.METER_OPEN_EVENT_COUNTER}{handle_B(b)}"
294
- case 0, b, 96, 20, 1: return F"{rn.METER_OPEN_EVENT_TIME_STAMP}{handle_B(b)}"
295
- case 0, b, 96, 20, 2: return F"{rn.METER_OPEN_EVENT_DURATION}{handle_B(b)}"
296
- case 0, b, 96, 20, 3: return F"{rn.METER_OPEN_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
297
- case 0, b, 96, 20, 5: return F"{rn.TERMINAL_COVER_OPEN_EVENT_COUNTER}{handle_B(b)}"
298
- case 0, b, 96, 20, 6: return F"{rn.TERMINAL_COVER_OPEN_EVENT_TIME_STAMP}{handle_B(b)}"
299
- case 0, b, 96, 20, 7: return F"{rn.TERMINAL_COVER_OPEN_EVENT_DURATION}{handle_B(b)}"
300
- case 0, b, 96, 20, 8: return F"{rn.TERMINAL_COVER_OPEN_EVENT_CUMULATIVE}{handle_B(b)}"
301
- case 0, b, 96, 20, 10: return F"{rn.TILT_EVENT_COUNTER}{handle_B(b)}"
302
- case 0, b, 96, 20, 11: return F"{rn.TILT_EVENT_TIME_STAMP}{handle_B(b)}"
303
- case 0, b, 96, 20, 12: return F"{rn.TILT_EVENT_DURATION}{handle_B(b)}"
304
- case 0, b, 96, 20, 13: return F"{rn.TILT_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
305
- case 0, b, 96, 20, 15: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_COUNTER}{handle_B(b)}"
306
- case 0, b, 96, 20, 16: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_TIME_STAMP}{handle_B(b)}"
307
- case 0, b, 96, 20, 17: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_DURATION}{handle_B(b)}"
308
- case 0, b, 96, 20, 18: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
309
- case 0, b, 96, 20, 20: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_COUNTER}{handle_B(b)}"
310
- case 0, b, 96, 20, 21: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
311
- case 0, b, 96, 20, 22: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_DURATION}{handle_B(b)}"
312
- case 0, b, 96, 20, 23: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
313
- case 0, b, 96, 20, 25: return F"{rn.METROLOGY_TAMPER_EVENT_COUNTER}{handle_B(b)}"
314
- case 0, b, 96, 20, 26: return F"{rn.METROLOGY_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
315
- case 0, b, 96, 20, 27: return F"{rn.METROLOGY_TAMPER_EVENT_DURATION}{handle_B(b)}"
316
- case 0, b, 96, 20, 28: return F"{rn.METROLOGY_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
317
- case 0, b, 96, 20, 30: return F"{rn.COMMUNICATION_TAMPER_EVENT_COUNTER}{handle_B(b)}"
318
- case 0, b, 96, 20, 31: return F"{rn.COMMUNICATION_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
319
- case 0, b, 96, 20, 32: return F"{rn.COMMUNICATION_TAMPER_EVENT_DURATION}{handle_B(b)}"
320
- case 0, b, 96, 20, 33: return F"{rn.COMMUNICATION_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
321
- case 0, 0, 96, 51, 0: return rn.RU_BODY_OPENING_STATE
322
- case 0, 0, 96, 51, 1: return rn.RU_TERMINALS_COVER_OPENING_STATE
323
- case 0, 0, 96, 51, 3: return rn.RU_MAGNETIC_FIELD_STATE
324
- case 0, 0, 96, 51, 4: return rn.RU_HF_FIELD_STATE
325
- case 0, 0, 96, 51, 5: return rn.RU_ELECTRONIC_SEALS_FIXED_STATE_OF_EVENTS
326
- case 0, 0, 96, 51, 6: return rn.RU_PRESSING_ELECTRONIC_SEALS
327
- case 0, 0, 96, 51, 7: return rn.RU_CLEAR_OF_ELECTRONIC_SEALS_FIXED_STATE
328
- case 0, 0, 96, 51, 8: return rn.RU_FIRST_OPENING_TIME_OF_BODY
329
- case 0, 0, 96, 51, 9: return rn.RU_FIRST_OPENING_TIME_OF_TERMINALS_COVER
330
- case 0, 0, 97, 98, 0: return rn.RU_ALARM_REGISTER_1
331
- case 0, 0, 97, 98, 1: return rn.RU_ALARM_REGISTER_2
332
- case 0, 0, 97, 98, 10: return rn.RU_ALARM_FILTER_1
333
- case 0, 0, 97, 98, 11: return rn.RU_ALARM_FILTER_2
334
- case 0, 0, 97, 98, 20: return rn.ALARM_DESCRIPTOR
335
- case 0, b, 99, 1, e: return F"{rn.LOAD_PARAMETERS_PROFILE}{handle_B(b)}{handle_E(e)}"
336
- case 0, b, 99, 13, e: return F"{rn.GSM_DIAGNOSTIC_PROFILE}{handle_B(b)}{handle_E(e)}"
337
- case 0, b, 99, 98, 0: return F"{rn.RU_VOLTAGE_LOG}{handle_B(b)}"
338
- case 0, b, 99, 98, 1: return F"{rn.RU_CURRENT_LOG}{handle_B(b)}"
339
- case 0, b, 99, 98, 2: return F"{rn.RU_COMMUTATION_LOG}{handle_B(b)}"
340
- case 0, b, 99, 98, 3: return F"{rn.RU_DATA_CORRECTION_LOG}{handle_B(b)}"
341
- case 0, b, 99, 98, 4: return F"{rn.RU_EXTERNAL_IMPACT_LOG}{handle_B(b)}"
342
- case 0, b, 99, 98, 5: return F"{rn.RU_COMMUNICATION_LOG}{handle_B(b)}"
343
- case 0, b, 99, 98, 6: return F"{rn.RU_ACCESS_LOG}{handle_B(b)}"
344
- case 0, b, 99, 98, 7: return F"{rn.RU_SELF_DIAGNOSTIC_LOG}{handle_B(b)}"
345
- case 0, b, 99, 98, 8: return F"{rn.RU_REACTIVE_POWER_LOG}{handle_B(b)}"
346
- case 0, b, 99, 98, 9: return F"{rn.RU_QUALITY_POWER_LOG}{handle_B(b)}"
347
- case 0, b, 99, 98, 10: return F"{rn.RU_STATUS_I_O_LOG}{handle_B(b)}"
348
- case 0, b, 99, 98, 12: return F"{rn.RU_REACTIVE_POWER_LIMIT_LOG}{handle_B(b)}"
349
- case 0, b, 99, 98, 13: return F"{rn.RU_TIME_CORRECTION_LOG}{handle_B(b)}"
350
- case 0, b, 99, 98, 14: return F"{rn.RU_START_YEAR_LOG}{handle_B(b)}"
351
- case 0, b, 99, 98, 15: return F"{rn.RU_QUALITY_FOR_CALCULATION_PERIOD_LOG}{handle_B(b)}"
352
- case 0, b, 99, 98, 16: return F"{rn.RU_CONTROL_POWER_LOG}{handle_B(b)}"
353
- case 0, b, 99, 98, 17: return F"{rn.RU_BATTERY_LOG}{handle_B(b)}"
354
- case 0, b, 99, 98, 18: return F"{rn.RU_CONTROL_OF_LOAD_RELAY_BLOCKER_LOG}{handle_B(b)}"
355
- case 0, b, 99, 98, 19: return F"{rn.RU_TEMPERATURE_CONTROL_LOG}{handle_B(b)}"
356
- case 0, b, 99, 98, 20: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L1}{handle_B(b)}"
357
- case 0, b, 99, 98, 21: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L2}{handle_B(b)}"
358
- case 0, b, 99, 98, 22: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L3}{handle_B(b)}"
359
- case 0, b, 99, 98, 23: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L1_L2}{handle_B(b)}"
360
- case 0, b, 99, 98, 24: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L2_L3}{handle_B(b)}"
361
- case 0, b, 99, 98, 25: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L3_L1}{handle_B(b)}"
362
- case 0, b, 99, 98, 26: return F"{rn.RU_OVER_VOLTAGE_LOG}{handle_B(b)}"
363
- case 0, b, 99, 98, 27: return F"{rn.RU_VOLTAGE_INTERRUPTION_LOG}{handle_B(b)}"
364
- case 0, b, 99, 98, 28: return F"{rn.RU_ABNORMAL_NETWORK_SITUATION_LOG}{handle_B(b)}"
365
- case 0, b, 99, 98, e: return F"{overview.ClassID.PROFILE_GENERIC}{handle_B(b)}{handle_E(e)}"
366
- case 0, 0, 128, 99, 0: return rn.KPZ_RELAY_TURN_COUNTER
367
- case 0, 0, 128, 100, 0: return rn.ITE_FIRMWARE_DESCRIPTOR
368
- case 0, 0, 128, 100, 0: return rn.ITE_FIRMWARE_DESCRIPTOR
369
- case 0, 0, 128, 101, 0: return rn.ITE_MAGNETIC_SENSOR_STATUS
370
- case 0, 0, 128, 102, 0: return rn.ITE_DISCRETE_OUTPUTS
371
- case 0, 0, 128, 103, 0: return rn.ITE_SETTING_OF_RELAY_INCLUSION_PER_DAY
372
- case 0, 0, 128, 150, 0: return rn.ITE_SETTINGS_MESSAGES
373
- case 0, 0, 128, 151, 0: return rn.ITE_CORE_REGISTERS
374
- case 0, 0, 128, 152, 0: return rn.ITE_BLE_ID
375
- case 0, 0, 128, 170, 0: return rn.ITE_ICCID
376
- case 0, 0, 128, 171, 0: return rn.KPZ_IMSI
377
- case 0, 128, 154, 0, 0: return F"KPZPingTestSetup"
378
- case 0, 128, 25, 6, 0: return F"(KPZ) ICCID"
379
- case 1, b, 0, 0, e: return F"{F'{rn.COMPLETE_COMBINED_ELECTRICITY_ID} {e+1}'}{handle_B(b)}"
380
- case 1, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
381
- case 1, b, 0, 2, 8: return F"{rn.ACTIVE_FIRMWARE_SIGNATURE}{handle_B(b)}"
382
- case 1, b, 0, 3, 3: return F"{rn.ACTIVE_ENERGY_OUTPUT_PULSE}{handle_B(b)}"
383
- case 1, b, 0, 3, 4: return F"{rn.REACTIVE_ENERGY_OUTPUT_PULSE}{handle_B(b)}"
384
- case 1, b, 0, 4, 2: return F"{rn.TRANSFORMER_RATIO_CURRENT}{handle_B(b)}"
385
- case 1, b, 0, 4, 3: return F"{rn.TRANSFORMER_RATIO_VOLTAGE}{handle_B(b)}"
386
- # Nominal values
387
- case 1, b, 0, 6, 0: return F"{rn.NOMINAL_VOLTAGE}{handle_B(b)}"
388
- case 1, b, 0, 6, 1: return F"{rn.NOMINAL_CURRENT}{handle_B(b)}"
389
- case 1, b, 0, 6, 2: return F"{rn.NOMINAL_FREQUENCY}{handle_B(b)}"
390
- case 1, b, 0, 6, 3: return F"{rn.MAXIMUM_CURRENT}{handle_B(b)}"
391
- case 1, b, 0, 6, 4: return rn.REFERENCE_VOLTAGE_FOR_POWER_QUALITY_MEASUREMENT
392
- case 1, b, 0, 6, 5: return F"{rn.REFERENCED_VOLTAGE_FOR_AUX_POWER_SUPPLY}{handle_B(b)}"
393
- case 1, b, 0, 8, 4: return F"{rn.RECORDING_INTERVAL_1_FOR_LOAD_PROFILE}{handle_B(b)}"
394
- case 1, b, 0, 8, 5: return F"{rn.RECORDING_INTERVAL_2_FOR_LOAD_PROFILE}{handle_B(b)}"
395
- # Coefficients
396
- case 1, b, 0, 10, 0: return F"{rn.TRANSFORMER_MAGNETIC_LOSSES}{handle_B(b)}"
397
- case 1, b, 0, 10, 1: return F"{rn.TRANSFORMER_IRON_LOSSES}{handle_B(b)}"
398
- case 1, b, 0, 10, 2: return F"{rn.LINE_RESISTANCE_LOSSES}{handle_B(b)}"
399
- case 1, b, 0, 10, 3: return F"{rn.LINE_REACTANCE_LOSSES}{handle_B(b)}"
400
- case 1, b, 1 | 2 | 3 | 4 as c, 8, e:
401
- return F"{handle_B(b)}{get_energy_names(c)} {get_rate(e)}"
402
- case 1, b, 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 as c, d, e:
403
- return F"{handle_B(b)}{rn.CUMULATIVE} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
404
- case 1, b, 11 | 12 as c, 7, e:
405
- return F"{handle_B(b)}{get_obj_names(c)} {get_harmonics_name(e)}"
406
- case 1, b, 11 | 12 as c, 134, 0:
407
- return F"{handle_B(b)}{get_obj_names(c)} {rn.RU_CHANGE_LIMIT_LEVEL}"
408
- case 1, b, 11 | 12 as c, d, e:
409
- return F"{handle_B(b)}{rn.ANY_PHASE} {get_obj_names(c)} {get_processing_names(d)} {get_harmonics_name(e)}"
410
- case 1, b, c, d, e if c in range(21, 41):
411
- return F"{handle_B(b)}{rn.L1} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
412
- case 1, b, c, d, e if c in range(41, 61):
413
- return F"{handle_B(b)}{rn.L2} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
414
- case 1, b, c, d, e if c in range(61, 81):
415
- return F"{handle_B(b)}{rn.L3} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
416
- case 1, b, 88 | 89 | 124 | 125 | 126 | 128 | 129 | 130 | 131 | 133 as c, d, e:
417
- return F"{handle_B(b)}{get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
418
- case 1, b, 91, 7, 131: return F"{rn.RU_DIFFERENTIAL_CURRENT}. {rn.INSTANTANEOUS_VALUE}{handle_B(b)}"
419
- case 1, b, 91, 7, 132: return F"{rn.RU_DIFFERENTIAL_CURRENT}. {rn.PERCENT}. {rn.INSTANTANEOUS_VALUE}{handle_B(b)}"
420
- case 1, b, 91, d, e if d <= 127:
421
- return F"{handle_B(b)}{rn.L0_CURRENT_NEUTRAL} {get_processing_names(d)} {get_harmonics_name(e)}"
422
- case 1, b, 137, d, 128:
423
- return F"{handle_B(b)}{rn.REACTIVE_FACTOR} {get_processing_names(d)}"
424
- case 1, 0, 147 as c, 133, 0: return F"{get_obj_names(c)} {rn.BILLING_PERIOD}"
425
- case 1, 0, 148, 36, 0: return F"{rn.OVER_VOLTAGE_COUNTER} {rn.BILLING_PERIOD}"
426
- case 1, b, 81, 7, e if e < 78:
427
- angel_values = (rn.U_L1, rn.U_L2, rn.U_L3, rn.ERROR, rn.I_L1, rn.I_L2, rn.I_L3, rn.I_L0)
428
- to_, from_ = divmod(logical_name.e, 10)
429
- return F"{F'{rn.ANGLE_FROM} {angel_values[from_]} {rn.TO} {angel_values[to_]}'}{handle_B(b)}"
430
- case 1, b, 94, 7, 0: return F"{rn.RU_PROFILE_OF_CURRENT_VALUES}{handle_B(b)}"
431
- case 1, b, 94, 7, 1: return F"{rn.RU_SCALE_PROFILE_FOR_THE_MAGAZINE_OF_MONTHLY_INDICATIONS}{handle_B(b)}"
432
- case 1, b, 94, 7, 2: return F"{rn.RU_SCALE_PROFILE_FOR_A_JOURNAL_OF_DAILY_INDICATION}{handle_B(b)}"
433
- case 1, b, 94, 7, 3: return F"{rn.RU_SCALE_PROFILE_FOR_CURRENT_FRAMES_OF_CURRENT_VALUES}{handle_B(b)}"
434
- case 1, b, 94, 7, 4: return F"{rn.RU_SCALE_PROFILE_FOR_LOAD_PROFILES}{handle_B(b)}"
435
- case 1, b, 94, 7, 5: return F"{rn.RU_TELEMECHANICS_PROFILE_FOR_TELEVISION_MEASUREMENTS}{handle_B(b)}"
436
- case 1, b, 94, 7, 6: return F"{rn.RU_TELEMECHANICS_PROFILE_OF_TELEVISION_SIGNALING}{handle_B(b)}"
437
- case 1, b, 94, 7, e: return F"{F'{rn.COUNTRY_SPECIFIC_IDENTIFIER} #{e+1}'}{handle_B(b)}"
438
- case 1, b, 98, 1, e: return F"{rn.RU_MONTHLY_PROFILE}{handle_B(b)}{handle_E(e)}"
439
- case 1, b, 98, 2, e: return F"{rn.RU_DAILY_PROFILE}{handle_B(b)}{handle_E(e)}"
440
- case 1, b, 99, 1, e: return F"{rn.RU_LOAD_PROFILE}{handle_B(b)}{handle_E(e)}"
441
- case 1, b, 99, 2, e: return F"{rn.RU_LOAD_PROFILE} #2{handle_B(b)}{handle_E(e)}"
442
- case 128, 0, 0, 0, 0: return rn.ITE_CALIBRATION_STATUS
443
- case 128, 0, 1, 0, 0: return rn.ITE_CALIBRATION_APPARENT_POWER
444
- case 128, 0, 2, 0, 0: return rn.ITE_CALIBRATION_ACTIVE_POWER
445
- case 128, 0, 3, 0, 0: return rn.ITE_CALIBRATION_REACTIVE_POWER
446
- case 128, 0, 4, 0, 0: return rn.ITE_CALIBRATION_VOLTAGE
447
- case 128, 0, 5, 0, 0: return rn.ITE_CALIBRATION_CURRENT
448
- case 128, 0, 6, 0, 0: return rn.ITE_CALIBRATION_ANGLE
449
- case 128, 0, 7, 0, 0: return rn.ITE_DISPLAY_SETTING_1
450
- case 128, 0, 8, 0, 0: return rn.ITE_DISPLAY_SETTING_2
451
- case 128, 0, 9, 0, 0: return rn.ITE_CLOCK_OFFSET_SETTING
452
- case 128, 0, 10, 0, 0: return rn.ITE_FACTORY_SETTING_10
453
- case 128, 0, 11, 0, 0: return rn.ITE_FACTORY_SETTING_11
454
- case 128, 0, 12, 0, 0: return rn.ITE_FACTORY_SETTING_12
455
- case 128, 0, 13, 0, 0: return rn.ITE_FACTORY_SETTING_13
456
- case 128, 0, 14, 0, 0: return rn.ITE_FACTORY_SETTING_14
457
- case 128, 0, 15, 0, 0: return rn.ITE_FACTORY_SETTING_15
458
- case 128, 0, 16, 0, 0: return rn.ITE_FACTORY_SETTING_16
459
- case 128, 0, 17, 0, 0: return rn.ITE_FACTORY_SETTING_17
460
- case 128, 0, 18, 0, 0: return rn.ITE_FACTORY_SETTING_18
461
- case 128, 0, 19, 0, 0: return rn.ITE_FACTORY_SETTING_19
462
- case _: return rn.UNKNOWN
463
- """ return name by according logical name """
1
+ """ The OBIS identification system serves as a basis for the COSEM logical names. The system of naming COSEM objects is defined in the basic
2
+ principles (see Clause 4 EN 62056-62:2007), the identification of real data items is specified in IEC 62056-61. The following clauses define the
3
+ usage of those definitions in the COSEM environment. All codes, which are not explicitly listed, but outside the manufacturer specific range are
4
+ reserved for future use."""
5
+ from functools import lru_cache
6
+ from dataclasses import dataclass
7
+ from . import settings
8
+ from .types import cosem_service_types as cst
9
+ from .cosem_interface_classes import overview
10
+ from .obis import media_id
11
+
12
+
13
+ match settings.get_current_language():
14
+ case settings.Language.ENGLISH: from .Values.EN import relation_to_obis_names as rn
15
+ case settings.Language.RUSSIAN: from .Values.RU import relation_to_obis_names as rn
16
+
17
+
18
+ def get_energy_names(electric_obj: int) -> str:
19
+ """ corresponding with Сподэс """
20
+ match electric_obj:
21
+ case 1 | 21 | 41 | 61: return "Активная энергия, импорт"
22
+ case 2 | 22 | 42 | 62: return "Активная энергия, экспорт"
23
+ case 3 | 23 | 43 | 63: return "Реактивная энергия, импорт"
24
+ case 4 | 24 | 44 | 64: return "Реактивная энергия, экспорт"
25
+
26
+
27
+ def get_obj_names(electric_obj: int) -> str:
28
+ """ corresponding with DLMS UA 1000-1 Ed. 14 7.5.1 Table 65. Value group C codes – Electricity. Range: 1..80, RU: 124..126 """
29
+ match electric_obj:
30
+ case 1 | 21 | 41 | 61: return str(media_id.ACTIVE_POWER_PLUS)
31
+ case 2 | 22 | 42 | 62: return str(media_id.ACTIVE_POWER_MINUS)
32
+ case 3 | 23 | 43 | 63: return str(media_id.REACTIVE_POWER_PLUS)
33
+ case 4 | 24 | 44 | 64: return str(media_id.REACTIVE_POWER_MINUS)
34
+ case 5 | 25 | 45 | 65: return str(media_id.REACTIVE_POWER_QI)
35
+ case 6 | 26 | 46 | 66: return str(media_id.REACTIVE_POWER_QII)
36
+ case 7 | 27 | 47 | 67: return str(media_id.REACTIVE_POWER_QIII)
37
+ case 8 | 28 | 48 | 68: return str(media_id.REACTIVE_POWER_QIV)
38
+ case 9 | 29 | 49 | 69: return str(media_id.APPARENT_POWER_PLUS)
39
+ case 10 | 30 | 50 | 70: return str(media_id.APPARENT_POWER_MINUS)
40
+ case 11 | 31 | 51 | 71: return str(media_id.CURRENT)
41
+ case 12 | 32 | 52 | 72: return str(media_id.VOLTAGE)
42
+ case 13 | 33 | 53 | 73: return str(media_id.POWER_FACTOR)
43
+ case 14 | 34 | 54 | 74: return str(media_id.SUPPLY_FREQUENCY)
44
+ case 15 | 35 | 55 | 75: return str(media_id.ACTIVE_POWER_SUM)
45
+ case 16 | 36 | 56 | 76: return str(media_id.ACTIVE_POWER_DIFF)
46
+ case 17 | 37 | 57 | 77: return str(media_id.ACTIVE_POWER_QI)
47
+ case 18 | 38 | 58 | 78: return str(media_id.ACTIVE_POWER_QII)
48
+ case 19 | 39 | 59 | 79: return str(media_id.ACTIVE_POWER_QIII)
49
+ case 20 | 40 | 60 | 80: return str(media_id.ACTIVE_POWER_QIV)
50
+ case 88: return rn.CUMULATIVE_AMPERE_SQUARED_HOURS
51
+ case 89: return rn.CUMULATIVE_VOLT_SQUARED_HOURS
52
+ case 124: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L1_L2}"
53
+ case 125: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L2_L3}"
54
+ case 126: return F"{rn.RU_LINEAR_VOLTAGE} {rn.L3_L1}"
55
+ case 128: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L1}"
56
+ case 129: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L2}"
57
+ case 130: return F"{rn.POWER_REACTIVE_FACTOR} {rn.L3}"
58
+ case 131: return F"{rn.POWER_REACTIVE_FACTOR} {rn.ALL_PHASE}"
59
+ case 133: return F"{rn.VOLTAGE_ASYMMETRY_COEFFICIENT}"
60
+ case 147: return F"{rn.RU_TOTAL_DEVIATION_TIME} {rn.FOR} {rn.VOLTAGE}"
61
+ case _: raise ValueError(F"getting electrical name by C group with unknown: C={electric_obj}")
62
+
63
+
64
+ def get_harmonics_name(classification: int) -> str:
65
+ """ See DLMS UA 1000-1 Ed.13 7.5.3.3 Harmonics """
66
+ match classification:
67
+ case 0: return rn.TOTAL_FUND_ALL
68
+ case 124: return rn.THD
69
+ case 125: return rn.TDD
70
+ case 126: return rn.ALL_HARMONICS
71
+ case 127: return rn.ALL_HARMONICS_TO_NOMINAL_VALUE_RATIO
72
+ case _ if 120 >= classification >= 1: return F"{rn.HARMONIC} {classification}"
73
+ case man:
74
+ return F"Manufacture specific {man}"
75
+
76
+
77
+ def get_processing_names(d: int) -> str:
78
+ match d:
79
+ case 0: return rn.BILLING_PERIOD_AVERAGE_SINCE_LAST_RESET
80
+ case 1: return rn.CUMULATIVE_MINIMUM_1
81
+ case 2: return rn.CUMULATIVE_MAXIMUM_1
82
+ case 3: return rn.MINIMUM_1
83
+ case 4: return rn.CURRENT_AVERAGE_1
84
+ case 5: return rn.LAST_AVERAGE_1
85
+ case 6: return rn.MAXIMUM_1
86
+ case 7: return rn.INSTANTANEOUS_VALUE
87
+ case 8: return rn.TIME_INTEGRAL_1
88
+ case 9: return rn.TIME_INTEGRAL_2
89
+ case 10: return rn.TIME_INTEGRAL_3
90
+ case 11: return rn.CUMULATIVE_MINIMUM_2
91
+ case 12: return rn.CUMULATIVE_MAXIMUM_2
92
+ case 13: return rn.MINIMUM_2
93
+ case 14: return rn.CURRENT_AVERAGE_2
94
+ case 15: return rn.LAST_AVERAGE_2
95
+ case 16: return rn.MAXIMUM_2
96
+ case 17: return rn.TIME_INTEGRAL_7
97
+ case 18: return rn.TIME_INTEGRAL_8
98
+ case 19: return rn.TIME_INTEGRAL_9
99
+ case 20: return rn.TIME_INTEGRAL_10
100
+ case 21: return rn.CUMULATIVE_MINIMUM_3
101
+ case 22: return rn.CUMULATIVE_MAXIMUM_3
102
+ case 23: return rn.MINIMUM_3
103
+ case 24: return rn.CURRENT_AVERAGE_3
104
+ case 25: return rn.LAST_AVERAGE_3
105
+ case 26: return rn.MAXIMUM_3
106
+ case 27: return rn.CURRENT_AVERAGE_5
107
+ case 28: return rn.CURRENT_AVERAGE_6
108
+ case 29: return rn.TIME_INTEGRAL_5
109
+ case 30: return rn.TIME_INTEGRAL_6
110
+ case 31: return rn.UNDER_LIMIT_THRESHOLD
111
+ case 32: return rn.UNDER_LIMIT_OCCURRENCE_COUNTER
112
+ case 33: return rn.UNDER_LIMIT_DURATION
113
+ case 34: return rn.UNDER_LIMIT_MAGNITUDE
114
+ case 35: return rn.OVER_LIMIT_THRESHOLD
115
+ case 36: return rn.OVER_LIMIT_OCCURRENCE_COUNTER
116
+ case 37: return rn.OVER_LIMIT_DURATION
117
+ case 38: return rn.OVER_LIMIT_MAGNITUDE
118
+ case 39: return rn.MISSING_THRESHOLD
119
+ case 40: return rn.MISSING_OCCURRENCE_COUNTER
120
+ case 41: return rn.MISSING_DURATION
121
+ case 42: return rn.MISSING_MAGNITUDE
122
+ case 43: return rn.TIME_THRESHOLD_FOR_UNDER_LIMIT
123
+ case 44: return rn.TIME_THRESHOLD_FOR_OVER_LIMIT
124
+ case 45: return rn.TIME_THRESHOLD_FOR_MISSING_MAGNITUDE
125
+ case 46: return rn.CONTRACTED_VALUE
126
+ case 49: return rn.AVERAGE_VALUE_FOR_RECORDING_INTERVAL_1
127
+ case 50: return rn.AVERAGE_VALUE_FOR_RECORDING_INTERVAL_2
128
+ case 51: return rn.MINIMUM_FOR_RECORDING_INTERVAL_1
129
+ case 52: return rn.MINIMUM_FOR_RECORDING_INTERVAL_2
130
+ case 53: return rn.MAXIMUM_FOR_RECORDING_INTERVAL_1
131
+ case 54: return rn.MAXIMUM_FOR_RECORDING_INTERVAL_2
132
+ case 55: return rn.TEST_AVERAGE
133
+ case 56: return rn.CURRENT_AVERAGE_4_FOR_HARMONICS_MEASUREMENT
134
+ case 58: return rn.TIME_INTEGRAL_4
135
+ case 128: return rn.RU_POSITIVE_DEVIATION
136
+ case 129: return rn.RU_NEGATIVE_DEVIATION
137
+ case 133: return F"{rn.RU_TOTAL_DEVIATION_TIME} {rn.BILLING_PERIOD}"
138
+ case 134: return rn.RU_CHANGE_LIMIT_LEVEL
139
+ case _: raise ValueError(F'Unknown Processing of measurement values {d}')
140
+
141
+
142
+ def get_rate(value: int) -> str:
143
+ if value == 0:
144
+ return rn.TOTAL
145
+ elif value <= 63:
146
+ return F", {rn.RATE} {value}"
147
+ elif value <= 254:
148
+ return F", {rn.MANUFACTURER_SPECIFIC} {value}"
149
+ elif value == 255:
150
+ return F", {rn.RESERVED}"
151
+ else:
152
+ raise ValueError(F"got group E: {value}, expect 0..255")
153
+
154
+
155
+ def handle_B(value: int) -> str:
156
+ if value == 0:
157
+ return ""
158
+ elif value <= 64:
159
+ return F", {rn.CHANNEL} {value}"
160
+ elif value <= 127:
161
+ return F", {rn.UTILITY_SPECIFIC} {value}"
162
+ elif value <= 199:
163
+ return F", {rn.MANUFACTURER_SPECIFIC} {value}"
164
+ elif value <= 255:
165
+ return F", {rn.RESERVED} {value}"
166
+ else:
167
+ raise ValueError(F"got group B: {value}, expect 0..255")
168
+
169
+
170
+ def handle_E(value: int) -> str:
171
+ if value == 0:
172
+ return ""
173
+ elif value <= 127:
174
+ return F", {rn.INSTANCE} {value}"
175
+ elif value <= 255:
176
+ return F", {rn.MANUFACTURER_SPECIFIC} {value}"
177
+ else:
178
+ raise ValueError(F"got group E: {value}, expect 0..255")
179
+
180
+
181
+ @lru_cache(maxsize=512)
182
+ def get_name(logical_name: cst.LogicalName, spec_map: str = "DLMS_6") -> str:
183
+ match logical_name.a, logical_name.b, logical_name.c, logical_name.d, logical_name.e:
184
+ case 0, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
185
+ case 0, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
186
+ case 0, b, 0, 2, 1: return F"{rn.ACTIVE_FIRMWARE_VERSION}{handle_B(b)}"
187
+ case 0, b, 0, 2, 8: return F"{rn.ACTIVE_FIRMWARE_SIGNATURE}{handle_B(b)}"
188
+ case 0, b, 1, 0, e: return F"{overview.ClassID.CLOCK}{handle_B(b)}{handle_E(e)}"
189
+ case 0, b, 2, 0, e: return F"{overview.ClassID.MODEM_CONFIGURATION}{handle_B(b)}{handle_E(e)}"
190
+ case 0, b, 10, 0, 0: return F"{rn.GLOBAL_METER_RESET_SCRIPT_TABLE}{handle_B(b)}"
191
+ case 0, b, 10, 0, 1: return F"{rn.MDI_RESET_END_OF_BILLING_PERIOD_SCRIPT_TABLE}{handle_B(b)}"
192
+ case 0, b, 10, 0, 100: return F"{rn.TARIFFICATION_SCRIPT_TABLE}{handle_B(b)}"
193
+ case 0, b, 10, 0, 103: return F"{rn.SET_OUTPUT_SIGNALS_SCRIPT_TABLE}{handle_B(b)}"
194
+ case 0, b, 10, 0, 106: return F"{rn.DISCONNECT_CONTROL_SCRIPT_TABLE}{handle_B(b)}"
195
+ case 0, b, 10, 0, 107: return F"{rn.IMAGE_ACTIVATION_SCRIPT_TABLE}{handle_B(b)}"
196
+ case 0, b, 10, 0, 108: return F"{rn.PUSH_SCRIPT_TABLE}{handle_B(b)}"
197
+ case 0, b, 10, 0, 128: return F"{rn.RU_STOP_FRAME_SCRIPT_TABLE}{handle_B(b)}"
198
+ case 0, b, 11, 0, e: return F"{overview.ClassID.SPECIAL_DAYS_TABLE}{handle_B(b)}{handle_E(e)}"
199
+ case 0, b, 12, 0, e: return F"{overview.ClassID.SCHEDULE}{handle_B(b)}{handle_E(e)}"
200
+ case 0, b, 13, 0, e: return F"{overview.ClassID.ACTIVITY_CALENDAR}{handle_B(b)}{handle_E(e)}"
201
+ case 0, b, 14, 0, e: return F"{overview.ClassID.REGISTER_ACTIVATION}{handle_B(b)}{handle_E(e)}"
202
+ case 0, b, 15, 0, 0: return F"{rn.END_OF_BILLING_PERIOD_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
203
+ case 0, b, 15, 0, 1: return F"{rn.DISCONNECT_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
204
+ case 0, b, 15, 0, 2: return F"{rn.IMAGE_ACTIVATION_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
205
+ case 0, b, 15, 0, 3: return F"{rn.OUTPUT_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
206
+ case 0, b, 15, 0, 4: return F"{rn.PUSH_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
207
+ case 0, b, 15, 0, 5: return F"{rn.LOAD_PROFILE_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
208
+ case 0, b, 15, 0, 6: return F"{rn.M_BUS_PROFILE_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
209
+ case 0, b, 15, 0, 7: return F"{rn.FUNCTION_CONTROL_SINGLE_ACTION_SCHEDULE}{handle_B(b)}"
210
+ case 0, b, 16, 1, 1: return F"{rn.RU_ALARM_MONITOR_1}{handle_B(b)}"
211
+ case 0, b, 17, 0, 0: return F"{rn.RU_LIMITER_BY_POWER}{handle_B(b)}"
212
+ case 0, b, 17, 0, 1: return F"{rn.RU_LIMITER_BY_CURRENT}{handle_B(b)}"
213
+ case 0, b, 17, 0, 2: return F"{rn.RU_LIMITER_BY_VOLTAGE}{handle_B(b)}"
214
+ case 0, b, 17, 0, 3: return F"{rn.RU_LIMITER_BY_MAGNETIC}{handle_B(b)}"
215
+ case 0, b, 17, 0, 4: return F"{rn.RU_LIMITER_BY_DIFFERENCE_CURRENT}{handle_B(b)}"
216
+ case 0, b, 17, 0, 5: return F"{rn.RU_LIMITER_BY_TEMPERATURE}{handle_B(b)}"
217
+ case 0, b, 17, 0, e: return F"{overview.ClassID.LIMITER}{handle_B(b)}{handle_E(e)}"
218
+ case 0, 0, 21, 0, 1: return rn.GENERAL_DISPLAY_READOUT
219
+ case 0, 0, 21, 0, 2: return rn.ALTERNATE_DISPLAY_READOUT
220
+ case 0, 0, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_OPTO
221
+ case 0, 1, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_RS_485
222
+ case 0, 2, 22, 0, 0: return rn.RU_IEC_HDLC_SETUP_GSM
223
+ case 0, b, 22, 0, 0: return F"{overview.ClassID.IEC_HDLC_SETUP}{handle_B(b)}"
224
+ case 0, b, 25, 0, 0: return F"{overview.ClassID.TCP_UDP_SETUP}{handle_B(b)}"
225
+ case 0, b, 25, 1, 0: return F"{overview.ClassID.IPV4_SETUP}{handle_B(b)}"
226
+ case 0, b, 25, 4, 0: return F"{overview.ClassID.GPRS_MODEM_SETUP}{handle_B(b)}"
227
+ case 0, b, 25, 6, 0: return F"{overview.ClassID.GSM_DIAGNOSTIC}{handle_B(b)}"
228
+ case 0, b, 25, 9, 0: return F"{overview.ClassID.PUSH_SETUP}{handle_B(b)}"
229
+ case 0, b, 25, 10, 0: return F"{overview.ClassID.NTP_SETUP}{handle_B(b)}"
230
+ case 0, 0, 40, 0, 0: return rn.CURRENT_ASSOCIATION
231
+ case 0, 0, 40, 0, 1: return rn.RU_PUBLIC_CLIENT_ASSOCIATION
232
+ case 0, 0, 40, 0, 2: return rn.RU_METER_READER_ASSOCIATION
233
+ case 0, 0, 40, 0, 3: return rn.RU_UTILITY_SETTING_ASSOCIATION
234
+ case 0, 0, 40, 0, 4: return rn.RU_PUBLIC_CLIENT_ASSOCIATION
235
+ case 0, 0, 40, 0, e: return F"{overview.ClassID.ASSOCIATION_LN}{handle_E(e)}"
236
+ case 0, 0, 42, 0, 0: return rn.COSEM_LOGICAL_DEVICE_NAME
237
+ case 0, 0, 43, 0, e: return F"{overview.ClassID.SECURITY_SETUP}{handle_E(e)}"
238
+ case 0, b, 43, 1, e: return F"{rn.INVOCATION_COUNTER}{handle_B(b)}{handle_E(e)}"
239
+ case 0, 0, 44, 0, e: return F"{overview.ClassID.IMAGE_TRANSFER}{handle_E(e)}"
240
+ case 0, 0, 94, 7, 1: return rn.RU_SPECIFIC_PASSPORT_DATA_PROFILE
241
+ case 0, b, 96, 1, 0: return F"{rn.RU_DEVICE_FACTORY_NUMBER}{handle_B(b)}"
242
+ case 0, b, 96, 1, 1: return F"{rn.RU_DEVICE_TYPE}{handle_B(b)}"
243
+ case 0, b, 96, 1, 2: return F"{rn.RU_DEVICE_METROLOGICAL_VERSION}{handle_B(b)}"
244
+ case 0, b, 96, 1, 3: return F"{rn.RU_PRODUCER_NAME}{handle_B(b)}"
245
+ case 0, b, 96, 1, 4: return F"{rn.RU_DEVICE_RELEASE_DATE}{handle_B(b)}"
246
+ case 0, b, 96, 1, 5: return F"{rn.RU_REMOTE_CONSOLE_SERIAL_NUMBER}{handle_B(b)}"
247
+ case 0, b, 96, 1, 6: return F"{rn.RU_SPODES_VERSION}{handle_B(b)}"
248
+ case 0, b, 96, 1, 7: return F"{rn.RU_DEVICE_CONNECTION_SCHEME}{handle_B(b)}"
249
+ case 0, b, 96, 1, 8: return F"{rn.SPODES3_NOT_METROLOGICAL_FIRMWARE_ID}{handle_B(b)}"
250
+ case 0, b, 96, 1, 9: return F"{rn.RU_DEVICE_ID}{handle_B(b)}"
251
+ case 0, b, 96, 1, 10: return F"{rn.RU_COUNTER_POINT_DATA}{handle_B(b)}"
252
+ case 0, b, 96, 2, 0: return F"{rn.NUMBER_OF_CONFIGURATION_PROGRAM_CHANGES}{handle_B(b)}"
253
+ case 0, b, 96, 2, 1: return F"{rn.DATE_A_OF_LAST_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
254
+ case 0, b, 96, 2, 2: return F"{rn.DATE_A_OF_LAST_TIME_SWITCH_PROGRAM_CHANGE}{handle_B(b)}"
255
+ case 0, b, 96, 2, 3: return F"{rn.DATE_A_OF_LAST_RIPPLE_CONTROL_RECEIVER_PROGRAM_CHANGE}{handle_B(b)}"
256
+ case 0, b, 96, 2, 4: return F"{rn.STATUS_OF_SECURITY_SWITCHES}{handle_B(b)}"
257
+ case 0, b, 96, 2, 5: return F"{rn.DATE_A_OF_LAST_CALIBRATION}{handle_B(b)}"
258
+ case 0, b, 96, 2, 6: return F"{rn.DATE_A_OF_NEXT_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
259
+ case 0, b, 96, 2, 7: return F"{rn.DATE_A_OF_ACTIVATION_OF_THE_PASSIVE_CALENDAR}{handle_B(b)}"
260
+ case 0, b, 96, 2, 10: return F"{rn.NUMBER_OF_PROTECTED_CONFIGURATION_PROGRAM_CHANGES}{handle_B(b)}"
261
+ case 0, b, 96, 2, 11: return F"{rn.DATE_A_OF_LAST_PROTECTED_CONFIGURATION_PROGRAM_CHANGE}{handle_B(b)}"
262
+ case 0, b, 96, 2, 12: return F"{rn.DATE_A_CORRECTED_OF_LAST_CLOCK_SYNCHRONIZATION_SETTING}{handle_B(b)}"
263
+ case 0, b, 96, 2, 13: return F"{rn.DATE_OF_LAST_FIRMWARE_ACTIVATION}{handle_B(b)}"
264
+ case 0, b, 96, 3, 0: return F"{rn.I_O_CONTROL_SIGNAL_OBJECTS_GLOBAL}{handle_B(b)}"
265
+ case 0, b, 96, 3, 10: return F"{overview.ClassID.DISCONNECT_CONTROL}{handle_B(b)}"
266
+ case 0, b, 96, 3, 20: return F"{rn.RU_RELAY_LOAD_ARBITRATOR}{handle_B(b)}"
267
+ case 0, 0, 96, 4, 1: return rn.RU_LCD_BACKLIGHT_MODE
268
+ case 0, 0, 96, 4, 3: return rn.RU_LOAD_LOCK_STATUS
269
+ case 0, 0, 96, 5, 0: return rn.INTERNAL_OPERATING_STATUS_GLOBAL
270
+ case 0, 0, 96, 5, 1: return rn.INTERNAL_OPERATING_STATUS_1
271
+ case 0, 0, 96, 5, 2: return rn.INTERNAL_OPERATING_STATUS_2
272
+ case 0, 0, 96, 5, 3: return rn.INTERNAL_OPERATING_STATUS_3
273
+ case 0, 0, 96, 5, 4: return rn.INTERNAL_OPERATING_STATUS_4
274
+ case 0, 0, 96, 5, 132: return rn.SPODES3_PHASE_ALTERNATING_CONTROL
275
+ case 0, b, 96, 8, 0: return F"{rn.TIME_OF_OPERATION}{handle_B(b)}"
276
+ case 0, b, 96, 8, 10: return F"{rn.RU_DURATION_OF_FAILURE_OVERSTRAIN}{handle_B(b)}"
277
+ case 0, b, 96, 9, 0: return F"{rn.RU_AMBIENT_TEMPERATURE}{handle_B(b)}"
278
+ case 0, b, 96, 11, 0: return F"{rn.EVENTS_RELATED_TO_VOLTAGE}{handle_B(b)}"
279
+ case 0, b, 96, 11, 1: return F"{rn.RU_EVENTS_RELATED_TO_CURRENT}{handle_B(b)}"
280
+ case 0, b, 96, 11, 2: return F"{rn.RU_EVENTS_RELATED_TO_LOAD_RELAY}{handle_B(b)}"
281
+ case 0, b, 96, 11, 3: return F"{rn.RU_EVENTS_FOR_PROGRAMMING_DEVICE_PARAMETERS}{handle_B(b)}"
282
+ case 0, b, 96, 11, 4: return F"{rn.RU_EXTERNAL_IMPACT_EVENTS}{handle_B(b)}"
283
+ case 0, b, 96, 11, 5: return F"{rn.RU_COMMUNICATION_EVENTS}{handle_B(b)}"
284
+ case 0, b, 96, 11, 6: return F"{rn.RU_ACCESS_CONTROL_EVENTS}{handle_B(b)}"
285
+ case 0, b, 96, 11, 7: return F"{rn.RU_EVENT_CODES_FOR_THE_SELF_DIAGNOSIS_LOG}{handle_B(b)}"
286
+ case 0, b, 96, 11, 8: return F"{rn.RU_EVENTS_FOR_EXCEEDING_THE_REACTIVE_POWER}{handle_B(b)}"
287
+ case 0, b, 96, 12, 4: return F"{rn.RU_CHANNEL_NUMBER_INTERFACE}{handle_B(b)}"
288
+ case 0, b, 96, 12, 6: return F"{rn.COMMUNICATION_ADDRESS}{handle_B(b)}"
289
+ case 0, 128, 96, 12, 0: return F"{rn.KPZ_INTERFACE_LIST}"
290
+ case 0, b, 96, 13, 0: return F"{rn.LOCAL_CONSUMER_MESSAGE}{handle_B(b)}"
291
+ case 0, b, 96, 13, 1: return F"{rn.DISPLAY_CONSUMER_MESSAGE}{handle_B(b)}"
292
+ case 0, b, 96, 15, 0: return F"{rn.RU_RELAY_TRIGGERING_METER_FOR_OPENING}{handle_B(b)}"
293
+ case 0, b, 96, 20, 0: return F"{rn.METER_OPEN_EVENT_COUNTER}{handle_B(b)}"
294
+ case 0, b, 96, 20, 1: return F"{rn.METER_OPEN_EVENT_TIME_STAMP}{handle_B(b)}"
295
+ case 0, b, 96, 20, 2: return F"{rn.METER_OPEN_EVENT_DURATION}{handle_B(b)}"
296
+ case 0, b, 96, 20, 3: return F"{rn.METER_OPEN_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
297
+ case 0, b, 96, 20, 5: return F"{rn.TERMINAL_COVER_OPEN_EVENT_COUNTER}{handle_B(b)}"
298
+ case 0, b, 96, 20, 6: return F"{rn.TERMINAL_COVER_OPEN_EVENT_TIME_STAMP}{handle_B(b)}"
299
+ case 0, b, 96, 20, 7: return F"{rn.TERMINAL_COVER_OPEN_EVENT_DURATION}{handle_B(b)}"
300
+ case 0, b, 96, 20, 8: return F"{rn.TERMINAL_COVER_OPEN_EVENT_CUMULATIVE}{handle_B(b)}"
301
+ case 0, b, 96, 20, 10: return F"{rn.TILT_EVENT_COUNTER}{handle_B(b)}"
302
+ case 0, b, 96, 20, 11: return F"{rn.TILT_EVENT_TIME_STAMP}{handle_B(b)}"
303
+ case 0, b, 96, 20, 12: return F"{rn.TILT_EVENT_DURATION}{handle_B(b)}"
304
+ case 0, b, 96, 20, 13: return F"{rn.TILT_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
305
+ case 0, b, 96, 20, 15: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_COUNTER}{handle_B(b)}"
306
+ case 0, b, 96, 20, 16: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_TIME_STAMP}{handle_B(b)}"
307
+ case 0, b, 96, 20, 17: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_DURATION}{handle_B(b)}"
308
+ case 0, b, 96, 20, 18: return F"{rn.STRONG_DC_MAGNETIC_FIELD_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
309
+ case 0, b, 96, 20, 20: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_COUNTER}{handle_B(b)}"
310
+ case 0, b, 96, 20, 21: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
311
+ case 0, b, 96, 20, 22: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_DURATION}{handle_B(b)}"
312
+ case 0, b, 96, 20, 23: return F"{rn.SUPPLY_CONTROL_SWITCH_VALVE_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
313
+ case 0, b, 96, 20, 25: return F"{rn.METROLOGY_TAMPER_EVENT_COUNTER}{handle_B(b)}"
314
+ case 0, b, 96, 20, 26: return F"{rn.METROLOGY_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
315
+ case 0, b, 96, 20, 27: return F"{rn.METROLOGY_TAMPER_EVENT_DURATION}{handle_B(b)}"
316
+ case 0, b, 96, 20, 28: return F"{rn.METROLOGY_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
317
+ case 0, b, 96, 20, 30: return F"{rn.COMMUNICATION_TAMPER_EVENT_COUNTER}{handle_B(b)}"
318
+ case 0, b, 96, 20, 31: return F"{rn.COMMUNICATION_TAMPER_EVENT_TIME_STAMP}{handle_B(b)}"
319
+ case 0, b, 96, 20, 32: return F"{rn.COMMUNICATION_TAMPER_EVENT_DURATION}{handle_B(b)}"
320
+ case 0, b, 96, 20, 33: return F"{rn.COMMUNICATION_TAMPER_EVENT_CUMULATIVE_DURATION}{handle_B(b)}"
321
+ case 0, 0, 96, 51, 0: return rn.RU_BODY_OPENING_STATE
322
+ case 0, 0, 96, 51, 1: return rn.RU_TERMINALS_COVER_OPENING_STATE
323
+ case 0, 0, 96, 51, 3: return rn.RU_MAGNETIC_FIELD_STATE
324
+ case 0, 0, 96, 51, 4: return rn.RU_HF_FIELD_STATE
325
+ case 0, 0, 96, 51, 5: return rn.RU_ELECTRONIC_SEALS_FIXED_STATE_OF_EVENTS
326
+ case 0, 0, 96, 51, 6: return rn.RU_PRESSING_ELECTRONIC_SEALS
327
+ case 0, 0, 96, 51, 7: return rn.RU_CLEAR_OF_ELECTRONIC_SEALS_FIXED_STATE
328
+ case 0, 0, 96, 51, 8: return rn.RU_FIRST_OPENING_TIME_OF_BODY
329
+ case 0, 0, 96, 51, 9: return rn.RU_FIRST_OPENING_TIME_OF_TERMINALS_COVER
330
+ case 0, 0, 97, 98, 0: return rn.RU_ALARM_REGISTER_1
331
+ case 0, 0, 97, 98, 1: return rn.RU_ALARM_REGISTER_2
332
+ case 0, 0, 97, 98, 10: return rn.RU_ALARM_FILTER_1
333
+ case 0, 0, 97, 98, 11: return rn.RU_ALARM_FILTER_2
334
+ case 0, 0, 97, 98, 20: return rn.ALARM_DESCRIPTOR
335
+ case 0, b, 99, 1, e: return F"{rn.LOAD_PARAMETERS_PROFILE}{handle_B(b)}{handle_E(e)}"
336
+ case 0, b, 99, 13, e: return F"{rn.GSM_DIAGNOSTIC_PROFILE}{handle_B(b)}{handle_E(e)}"
337
+ case 0, b, 99, 98, 0: return F"{rn.RU_VOLTAGE_LOG}{handle_B(b)}"
338
+ case 0, b, 99, 98, 1: return F"{rn.RU_CURRENT_LOG}{handle_B(b)}"
339
+ case 0, b, 99, 98, 2: return F"{rn.RU_COMMUTATION_LOG}{handle_B(b)}"
340
+ case 0, b, 99, 98, 3: return F"{rn.RU_DATA_CORRECTION_LOG}{handle_B(b)}"
341
+ case 0, b, 99, 98, 4: return F"{rn.RU_EXTERNAL_IMPACT_LOG}{handle_B(b)}"
342
+ case 0, b, 99, 98, 5: return F"{rn.RU_COMMUNICATION_LOG}{handle_B(b)}"
343
+ case 0, b, 99, 98, 6: return F"{rn.RU_ACCESS_LOG}{handle_B(b)}"
344
+ case 0, b, 99, 98, 7: return F"{rn.RU_SELF_DIAGNOSTIC_LOG}{handle_B(b)}"
345
+ case 0, b, 99, 98, 8: return F"{rn.RU_REACTIVE_POWER_LOG}{handle_B(b)}"
346
+ case 0, b, 99, 98, 9: return F"{rn.RU_QUALITY_POWER_LOG}{handle_B(b)}"
347
+ case 0, b, 99, 98, 10: return F"{rn.RU_STATUS_I_O_LOG}{handle_B(b)}"
348
+ case 0, b, 99, 98, 12: return F"{rn.RU_REACTIVE_POWER_LIMIT_LOG}{handle_B(b)}"
349
+ case 0, b, 99, 98, 13: return F"{rn.RU_TIME_CORRECTION_LOG}{handle_B(b)}"
350
+ case 0, b, 99, 98, 14: return F"{rn.RU_START_YEAR_LOG}{handle_B(b)}"
351
+ case 0, b, 99, 98, 15: return F"{rn.RU_QUALITY_FOR_CALCULATION_PERIOD_LOG}{handle_B(b)}"
352
+ case 0, b, 99, 98, 16: return F"{rn.RU_CONTROL_POWER_LOG}{handle_B(b)}"
353
+ case 0, b, 99, 98, 17: return F"{rn.RU_BATTERY_LOG}{handle_B(b)}"
354
+ case 0, b, 99, 98, 18: return F"{rn.RU_CONTROL_OF_LOAD_RELAY_BLOCKER_LOG}{handle_B(b)}"
355
+ case 0, b, 99, 98, 19: return F"{rn.RU_TEMPERATURE_CONTROL_LOG}{handle_B(b)}"
356
+ case 0, b, 99, 98, 20: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L1}{handle_B(b)}"
357
+ case 0, b, 99, 98, 21: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L2}{handle_B(b)}"
358
+ case 0, b, 99, 98, 22: return F"{rn.RU_VOLTAGE_DEVIATION_LOG} {rn.L3}{handle_B(b)}"
359
+ case 0, b, 99, 98, 23: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L1_L2}{handle_B(b)}"
360
+ case 0, b, 99, 98, 24: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L2_L3}{handle_B(b)}"
361
+ case 0, b, 99, 98, 25: return F"{rn.RU_LINEAR_VOLTAGE_DEVIATION_LOG} {rn.L3_L1}{handle_B(b)}"
362
+ case 0, b, 99, 98, 26: return F"{rn.RU_OVER_VOLTAGE_LOG}{handle_B(b)}"
363
+ case 0, b, 99, 98, 27: return F"{rn.RU_VOLTAGE_INTERRUPTION_LOG}{handle_B(b)}"
364
+ case 0, b, 99, 98, 28: return F"{rn.RU_ABNORMAL_NETWORK_SITUATION_LOG}{handle_B(b)}"
365
+ case 0, b, 99, 98, e: return F"{overview.ClassID.PROFILE_GENERIC}{handle_B(b)}{handle_E(e)}"
366
+ case 0, 0, 128, 99, 0: return rn.KPZ_RELAY_TURN_COUNTER
367
+ case 0, 0, 128, 100, 0: return rn.ITE_FIRMWARE_DESCRIPTOR
368
+ case 0, 0, 128, 100, 0: return rn.ITE_FIRMWARE_DESCRIPTOR
369
+ case 0, 0, 128, 101, 0: return rn.ITE_MAGNETIC_SENSOR_STATUS
370
+ case 0, 0, 128, 102, 0: return rn.ITE_DISCRETE_OUTPUTS
371
+ case 0, 0, 128, 103, 0: return rn.ITE_SETTING_OF_RELAY_INCLUSION_PER_DAY
372
+ case 0, 0, 128, 150, 0: return rn.ITE_SETTINGS_MESSAGES
373
+ case 0, 0, 128, 151, 0: return rn.ITE_CORE_REGISTERS
374
+ case 0, 0, 128, 152, 0: return rn.ITE_BLE_ID
375
+ case 0, 0, 128, 170, 0: return rn.ITE_ICCID
376
+ case 0, 0, 128, 171, 0: return rn.KPZ_IMSI
377
+ case 0, 128, 154, 0, 0: return F"KPZPingTestSetup"
378
+ case 0, 128, 25, 6, 0: return F"(KPZ) ICCID"
379
+ case 1, b, 0, 0, e: return F"{F'{rn.COMPLETE_COMBINED_ELECTRICITY_ID} {e+1}'}{handle_B(b)}"
380
+ case 1, b, 0, 2, 0: return F"{rn.ACTIVE_FIRMWARE_IDENTIFIER}{handle_B(b)}"
381
+ case 1, b, 0, 2, 8: return F"{rn.ACTIVE_FIRMWARE_SIGNATURE}{handle_B(b)}"
382
+ case 1, b, 0, 3, 3: return F"{rn.ACTIVE_ENERGY_OUTPUT_PULSE}{handle_B(b)}"
383
+ case 1, b, 0, 3, 4: return F"{rn.REACTIVE_ENERGY_OUTPUT_PULSE}{handle_B(b)}"
384
+ case 1, b, 0, 4, 2: return F"{rn.TRANSFORMER_RATIO_CURRENT}{handle_B(b)}"
385
+ case 1, b, 0, 4, 3: return F"{rn.TRANSFORMER_RATIO_VOLTAGE}{handle_B(b)}"
386
+ # Nominal values
387
+ case 1, b, 0, 6, 0: return F"{rn.NOMINAL_VOLTAGE}{handle_B(b)}"
388
+ case 1, b, 0, 6, 1: return F"{rn.NOMINAL_CURRENT}{handle_B(b)}"
389
+ case 1, b, 0, 6, 2: return F"{rn.NOMINAL_FREQUENCY}{handle_B(b)}"
390
+ case 1, b, 0, 6, 3: return F"{rn.MAXIMUM_CURRENT}{handle_B(b)}"
391
+ case 1, b, 0, 6, 4: return rn.REFERENCE_VOLTAGE_FOR_POWER_QUALITY_MEASUREMENT
392
+ case 1, b, 0, 6, 5: return F"{rn.REFERENCED_VOLTAGE_FOR_AUX_POWER_SUPPLY}{handle_B(b)}"
393
+ case 1, b, 0, 8, 4: return F"{rn.RECORDING_INTERVAL_1_FOR_LOAD_PROFILE}{handle_B(b)}"
394
+ case 1, b, 0, 8, 5: return F"{rn.RECORDING_INTERVAL_2_FOR_LOAD_PROFILE}{handle_B(b)}"
395
+ # Coefficients
396
+ case 1, b, 0, 10, 0: return F"{rn.TRANSFORMER_MAGNETIC_LOSSES}{handle_B(b)}"
397
+ case 1, b, 0, 10, 1: return F"{rn.TRANSFORMER_IRON_LOSSES}{handle_B(b)}"
398
+ case 1, b, 0, 10, 2: return F"{rn.LINE_RESISTANCE_LOSSES}{handle_B(b)}"
399
+ case 1, b, 0, 10, 3: return F"{rn.LINE_REACTANCE_LOSSES}{handle_B(b)}"
400
+ case 1, b, 1 | 2 | 3 | 4 as c, 8, e:
401
+ return F"{handle_B(b)}{get_energy_names(c)} {get_rate(e)}"
402
+ case 1, b, 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 as c, d, e:
403
+ return F"{handle_B(b)}{rn.CUMULATIVE} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
404
+ case 1, 0, 12, 7, 4 if spec_map in ("KPZ", "SPODES_3"):
405
+ return "Глубина провала/перенапряжения"
406
+ case 1, b, 11 | 12 as c, 7, e:
407
+ return F"{handle_B(b)}{get_obj_names(c)} {get_harmonics_name(e)}"
408
+ case 1, b, 11 | 12 as c, 134, 0:
409
+ return F"{handle_B(b)}{get_obj_names(c)} {rn.RU_CHANGE_LIMIT_LEVEL}"
410
+ case 1, b, 11 | 12 as c, d, e:
411
+ return F"{handle_B(b)}{rn.ANY_PHASE} {get_obj_names(c)} {get_processing_names(d)} {get_harmonics_name(e)}"
412
+ case 1, b, c, d, e if c in range(21, 41):
413
+ return F"{handle_B(b)}{rn.L1} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
414
+ case 1, b, c, d, e if c in range(41, 61):
415
+ return F"{handle_B(b)}{rn.L2} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
416
+ case 1, b, c, d, e if c in range(61, 81):
417
+ return F"{handle_B(b)}{rn.L3} {get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
418
+ case 1, b, 88 | 89 | 124 | 125 | 126 | 128 | 129 | 130 | 131 | 133 as c, d, e:
419
+ return F"{handle_B(b)}{get_obj_names(c)} {get_processing_names(d)} {get_rate(e)}"
420
+ case 1, b, 91, 7, 131: return F"{rn.RU_DIFFERENTIAL_CURRENT}. {rn.INSTANTANEOUS_VALUE}{handle_B(b)}"
421
+ case 1, b, 91, 7, 132: return F"{rn.RU_DIFFERENTIAL_CURRENT}. {rn.PERCENT}. {rn.INSTANTANEOUS_VALUE}{handle_B(b)}"
422
+ case 1, b, 91, d, e if d <= 127:
423
+ return F"{handle_B(b)}{rn.L0_CURRENT_NEUTRAL} {get_processing_names(d)} {get_harmonics_name(e)}"
424
+ case 1, b, 137, d, 128:
425
+ return F"{handle_B(b)}{rn.REACTIVE_FACTOR} {get_processing_names(d)}"
426
+ case 1, 0, 147 as c, 133, 0: return F"{get_obj_names(c)} {rn.BILLING_PERIOD}"
427
+ case 1, 0, 148, 36, 0: return F"{rn.OVER_VOLTAGE_COUNTER} {rn.BILLING_PERIOD}"
428
+ case 1, b, 81, 7, e if e < 78:
429
+ angel_values = (rn.U_L1, rn.U_L2, rn.U_L3, rn.ERROR, rn.I_L1, rn.I_L2, rn.I_L3, rn.I_L0)
430
+ to_, from_ = divmod(logical_name.e, 10)
431
+ return F"{F'{rn.ANGLE_FROM} {angel_values[from_]} {rn.TO} {angel_values[to_]}'}{handle_B(b)}"
432
+ case 1, b, 94, 7, 0: return F"{rn.RU_PROFILE_OF_CURRENT_VALUES}{handle_B(b)}"
433
+ case 1, b, 94, 7, 1: return F"{rn.RU_SCALE_PROFILE_FOR_THE_MAGAZINE_OF_MONTHLY_INDICATIONS}{handle_B(b)}"
434
+ case 1, b, 94, 7, 2: return F"{rn.RU_SCALE_PROFILE_FOR_A_JOURNAL_OF_DAILY_INDICATION}{handle_B(b)}"
435
+ case 1, b, 94, 7, 3: return F"{rn.RU_SCALE_PROFILE_FOR_CURRENT_FRAMES_OF_CURRENT_VALUES}{handle_B(b)}"
436
+ case 1, b, 94, 7, 4: return F"{rn.RU_SCALE_PROFILE_FOR_LOAD_PROFILES}{handle_B(b)}"
437
+ case 1, b, 94, 7, 5: return F"{rn.RU_TELEMECHANICS_PROFILE_FOR_TELEVISION_MEASUREMENTS}{handle_B(b)}"
438
+ case 1, b, 94, 7, 6: return F"{rn.RU_TELEMECHANICS_PROFILE_OF_TELEVISION_SIGNALING}{handle_B(b)}"
439
+ case 1, b, 94, 7, e: return F"{F'{rn.COUNTRY_SPECIFIC_IDENTIFIER} #{e+1}'}{handle_B(b)}"
440
+ case 1, b, 98, 1, e: return F"{rn.RU_MONTHLY_PROFILE}{handle_B(b)}{handle_E(e)}"
441
+ case 1, b, 98, 2, e: return F"{rn.RU_DAILY_PROFILE}{handle_B(b)}{handle_E(e)}"
442
+ case 1, b, 99, 1, e: return F"{rn.RU_LOAD_PROFILE}{handle_B(b)}{handle_E(e)}"
443
+ case 1, b, 99, 2, e: return F"{rn.RU_LOAD_PROFILE} #2{handle_B(b)}{handle_E(e)}"
444
+ case 128, 0, 0, 0, 0: return rn.ITE_CALIBRATION_STATUS
445
+ case 128, 0, 1, 0, 0: return rn.ITE_CALIBRATION_APPARENT_POWER
446
+ case 128, 0, 2, 0, 0: return rn.ITE_CALIBRATION_ACTIVE_POWER
447
+ case 128, 0, 3, 0, 0: return rn.ITE_CALIBRATION_REACTIVE_POWER
448
+ case 128, 0, 4, 0, 0: return rn.ITE_CALIBRATION_VOLTAGE
449
+ case 128, 0, 5, 0, 0: return rn.ITE_CALIBRATION_CURRENT
450
+ case 128, 0, 6, 0, 0: return rn.ITE_CALIBRATION_ANGLE
451
+ case 128, 0, 7, 0, 0: return rn.ITE_DISPLAY_SETTING_1
452
+ case 128, 0, 8, 0, 0: return rn.ITE_DISPLAY_SETTING_2
453
+ case 128, 0, 9, 0, 0: return rn.ITE_CLOCK_OFFSET_SETTING
454
+ case 128, 0, 10, 0, 0: return rn.ITE_FACTORY_SETTING_10
455
+ case 128, 0, 11, 0, 0: return rn.ITE_FACTORY_SETTING_11
456
+ case 128, 0, 12, 0, 0: return rn.ITE_FACTORY_SETTING_12
457
+ case 128, 0, 13, 0, 0: return rn.ITE_FACTORY_SETTING_13
458
+ case 128, 0, 14, 0, 0: return rn.ITE_FACTORY_SETTING_14
459
+ case 128, 0, 15, 0, 0: return rn.ITE_FACTORY_SETTING_15
460
+ case 128, 0, 16, 0, 0: return rn.ITE_FACTORY_SETTING_16
461
+ case 128, 0, 17, 0, 0: return rn.ITE_FACTORY_SETTING_17
462
+ case 128, 0, 18, 0, 0: return rn.ITE_FACTORY_SETTING_18
463
+ case 128, 0, 19, 0, 0: return rn.ITE_FACTORY_SETTING_19
464
+ case _: return rn.UNKNOWN
465
+ """ return name by according logical name """