DLMS-SPODES-client 0.19.28__tar.gz → 0.19.29__tar.gz

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 (80) hide show
  1. dlms_spodes_client-0.19.29/.vscode/launch.json +24 -0
  2. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/PKG-INFO +1 -1
  3. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/pyproject.toml +1 -1
  4. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/task.py +37 -0
  5. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/PKG-INFO +1 -1
  6. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/SOURCES.txt +2 -0
  7. dlms_spodes_client-0.19.29/test/__init__.py +0 -0
  8. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/test_Client.py +12 -2
  9. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/.github/workflows/publish.yaml +0 -0
  10. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/.gitignore +0 -0
  11. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/README.md +0 -0
  12. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/setup.cfg +0 -0
  13. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/FCS16.py +0 -0
  14. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/__init__.py +0 -0
  15. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/client.py +0 -0
  16. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_common/enums/TraceLevel.py +0 -0
  17. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_common/enums/__init__.py +0 -0
  18. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/AesGcmParameter.py +0 -0
  19. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/CountType.py +0 -0
  20. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXByteBuffer.py +0 -0
  21. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXCiphering.py +0 -0
  22. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMS.py +0 -0
  23. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChippering.py +0 -0
  24. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChipperingStream.py +0 -0
  25. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSConfirmedServiceError.py +0 -0
  26. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSException.py +0 -0
  27. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSLNParameters.py +0 -0
  28. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSNParameters.py +0 -0
  29. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSettings.py +0 -0
  30. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/GXReplyData.py +0 -0
  31. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/HdlcControlFrame.py +0 -0
  32. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/MBusCommand.py +0 -0
  33. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/MBusEncryptionMode.py +0 -0
  34. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/ResponseType.py +0 -0
  35. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/SetResponseType.py +0 -0
  36. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/_HDLCInfo.py +0 -0
  37. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/__init__.py +0 -0
  38. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Access.py +0 -0
  39. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ApplicationReference.py +0 -0
  40. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Authentication.py +0 -0
  41. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/BerType.py +0 -0
  42. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Command.py +0 -0
  43. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Definition.py +0 -0
  44. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ErrorCode.py +0 -0
  45. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ExceptionServiceError.py +0 -0
  46. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/HardwareResource.py +0 -0
  47. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/HdlcFrameType.py +0 -0
  48. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Initiate.py +0 -0
  49. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/LoadDataSet.py +0 -0
  50. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ObjectType.py +0 -0
  51. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Priority.py +0 -0
  52. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/RequestTypes.py +0 -0
  53. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Security.py +0 -0
  54. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Service.py +0 -0
  55. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceClass.py +0 -0
  56. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceError.py +0 -0
  57. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Standard.py +0 -0
  58. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/StateError.py +0 -0
  59. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/Task.py +0 -0
  60. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py +0 -0
  61. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/enums/__init__.py +0 -0
  62. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py +0 -0
  63. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/logger.py +0 -0
  64. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/py.typed +0 -0
  65. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/services.py +0 -0
  66. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/session.py +0 -0
  67. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client/settings.py +0 -0
  68. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/dependency_links.txt +0 -0
  69. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/entry_points.txt +0 -0
  70. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/requires.txt +0 -0
  71. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/src/DLMS_SPODES_client.egg-info/top_level.txt +0 -0
  72. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/Firmwares/firmwares.dat +0 -0
  73. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/Firmwares/firmwares_1_2_11.dat +0 -0
  74. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/Firmwares/firmwares_1_7_2.dat +0 -0
  75. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/client_log.txt +0 -0
  76. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/config.toml +0 -0
  77. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/name2.csv +0 -0
  78. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/test_logger.py +0 -0
  79. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test/test_services.py +0 -0
  80. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.29}/test//320/272/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/321/217 GSM.csv" +0 -0
@@ -0,0 +1,24 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "Debug test_SetBits",
9
+ "type": "debugpy",
10
+ "request": "launch",
11
+ "program": "-m",
12
+ "args": [
13
+ "unittest",
14
+ "test.test_Client.TestType.test_Session",
15
+ "-v"
16
+ ],
17
+ "console": "integratedTerminal",
18
+ "justMyCode": false,
19
+ "env": {
20
+ "PYTHONPATH": "${workspaceFolder}"
21
+ }
22
+ },
23
+ ]
24
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES_client
3
- Version: 0.19.28
3
+ Version: 0.19.29
4
4
  Summary: dlms-spodes
5
5
  Author-email: Serj Kotilevski <youserj@outlook.com>
6
6
  Project-URL: Source, https://github.com/youserj/SPODESclient_prj
@@ -15,7 +15,7 @@ exclude = ["Types"]
15
15
 
16
16
  [project]
17
17
  name = "DLMS_SPODES_client"
18
- version = "0.19.28"
18
+ version = "0.19.29"
19
19
  requires-python = ">= 3.12"
20
20
  authors = [
21
21
  {name="Serj Kotilevski", email="youserj@outlook.com"}
@@ -1240,6 +1240,43 @@ class Write2(SimpleCopy, OK):
1240
1240
  return result.OK
1241
1241
 
1242
1242
 
1243
+ @dataclass(frozen=True)
1244
+ class SetBits(SimpleCopy, OK):
1245
+ """set bits by pattern"""
1246
+ par: Parameter
1247
+ pattern: dict[int, int]
1248
+ msg: str = "set bits"
1249
+
1250
+ async def exchange(self, c: Client) -> result.Ok | result.Error:
1251
+ if isinstance(res_obj := c.objects.par2obj(self.par), result.Error):
1252
+ return res_obj
1253
+ if isinstance(res_read := await Par2Data[cdt.Digital | cdt.BitString](self.par.attr).exchange(c), result.Error):
1254
+ return res_read
1255
+ data = res_read.value
1256
+ for el in self.par.elements():
1257
+ data = data[el]
1258
+ if isinstance(data, cdt.Digital):
1259
+ data_int = int(data)
1260
+ for pos, val in self.pattern.items():
1261
+ data_int = (data_int | (1 << pos)) if val else (data_int & ~(1 << pos))
1262
+ data.set(data_int)
1263
+ elif isinstance(data, cdt.BitString):
1264
+ for pos, val in self.pattern.items():
1265
+ try:
1266
+ data[pos] = val
1267
+ except IndexError as e:
1268
+ return result.Error.from_e(ValueError(f"can't set bit {pos} in {self.par}"))
1269
+ else:
1270
+ return result.Error.from_e(TypeError(f"{self.par} not available SetBits"))
1271
+ c.get_set_request_normal(
1272
+ obj=res_obj.value,
1273
+ attr_index=self.par.i,
1274
+ value=res_read.value.encoding)
1275
+ if isinstance(res_pdu := await c.read_data_block(), result.Error):
1276
+ return res_pdu
1277
+ return result.OK
1278
+
1279
+
1243
1280
  @dataclass
1244
1281
  @deprecated("use <WriteTranscript>")
1245
1282
  class WriteParValue(SimpleCopy, OK):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES_client
3
- Version: 0.19.28
3
+ Version: 0.19.29
4
4
  Summary: dlms-spodes
5
5
  Author-email: Serj Kotilevski <youserj@outlook.com>
6
6
  Project-URL: Source, https://github.com/youserj/SPODESclient_prj
@@ -2,6 +2,7 @@
2
2
  README.md
3
3
  pyproject.toml
4
4
  .github/workflows/publish.yaml
5
+ .vscode/launch.json
5
6
  src/DLMS_SPODES_client/FCS16.py
6
7
  src/DLMS_SPODES_client/__init__.py
7
8
  src/DLMS_SPODES_client/client.py
@@ -64,6 +65,7 @@ src/DLMS_SPODES_client/gurux_dlms/enums/Task.py
64
65
  src/DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py
65
66
  src/DLMS_SPODES_client/gurux_dlms/enums/__init__.py
66
67
  src/DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py
68
+ test/__init__.py
67
69
  test/client_log.txt
68
70
  test/config.toml
69
71
  test/name2.csv
File without changes
@@ -20,8 +20,8 @@ from src.DLMS_SPODES_client import task
20
20
  task.get_adapter(adapter := xml50)
21
21
 
22
22
 
23
- port1 = "COM6"
24
- port2 = "COM5"
23
+ port1 = "COM5"
24
+ port2 = "COM6"
25
25
  # mac = "A0:6C:65:53:7D:86"
26
26
  mac = "5C:53:10:5A:E2:4B"
27
27
 
@@ -132,6 +132,16 @@ class TestType(unittest.TestCase):
132
132
  ))
133
133
  print(sess)
134
134
 
135
+ def test_SetBits(self):
136
+ self.start_coro(sess := Session(
137
+ c=c_Serial_HIGH,
138
+ tsk=task.SetBits(
139
+ par=Parameter.parse("0.0.96.3.20.255:3").append(0),
140
+ pattern={1: 1, 0: 0}
141
+ )
142
+ ))
143
+ print(sess)
144
+
135
145
  def test_WriteTime(self):
136
146
  self.start_coro(sess := Session(
137
147
  c=c_Serial_HIGH,