velbus-aio 2024.7.5__py3-none-any.whl → 2024.10.0__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.

Potentially problematic release.


This version of velbus-aio might be problematic. Click here for more details.

Files changed (96) hide show
  1. {velbus_aio-2024.7.5.dist-info → velbus_aio-2024.10.0.dist-info}/METADATA +8 -5
  2. {velbus_aio-2024.7.5.dist-info → velbus_aio-2024.10.0.dist-info}/RECORD +95 -15
  3. {velbus_aio-2024.7.5.dist-info → velbus_aio-2024.10.0.dist-info}/WHEEL +1 -1
  4. velbusaio/channels.py +2 -2
  5. velbusaio/command_registry.py +6 -5
  6. velbusaio/const.py +1 -1
  7. velbusaio/controller.py +8 -5
  8. velbusaio/handler.py +73 -59
  9. velbusaio/messages/__init__.py +2 -2
  10. velbusaio/messages/edge_set_color.py +1 -0
  11. velbusaio/module.py +47 -29
  12. velbusaio/module_spec/01.json +50 -0
  13. velbusaio/module_spec/02.json +11 -0
  14. velbusaio/module_spec/03.json +18 -0
  15. velbusaio/module_spec/05.json +36 -0
  16. velbusaio/module_spec/06.json +101 -0
  17. velbusaio/module_spec/07.json +11 -0
  18. velbusaio/module_spec/08.json +26 -0
  19. velbusaio/module_spec/09.json +24 -0
  20. velbusaio/module_spec/0A.json +46 -0
  21. velbusaio/module_spec/0B.json +46 -0
  22. velbusaio/module_spec/0C.json +13 -0
  23. velbusaio/module_spec/0E.json +25 -0
  24. velbusaio/module_spec/0F.json +11 -0
  25. velbusaio/module_spec/10.json +100 -0
  26. velbusaio/module_spec/11.json +100 -0
  27. velbusaio/module_spec/12.json +63 -0
  28. velbusaio/module_spec/13.json +4 -0
  29. velbusaio/module_spec/14.json +11 -0
  30. velbusaio/module_spec/15.json +80 -0
  31. velbusaio/module_spec/16.json +119 -0
  32. velbusaio/module_spec/17.json +119 -0
  33. velbusaio/module_spec/18.json +119 -0
  34. velbusaio/module_spec/1A.json +73 -0
  35. velbusaio/module_spec/1B.json +100 -0
  36. velbusaio/module_spec/1D.json +83 -0
  37. velbusaio/module_spec/1E.json +295 -0
  38. velbusaio/module_spec/1F.json +167 -0
  39. velbusaio/module_spec/20.json +167 -0
  40. velbusaio/module_spec/21.json +291 -0
  41. velbusaio/module_spec/22.json +323 -0
  42. velbusaio/module_spec/23.json +129 -0
  43. velbusaio/module_spec/25.json +3 -0
  44. velbusaio/module_spec/28.json +419 -0
  45. velbusaio/module_spec/29.json +228 -0
  46. velbusaio/module_spec/2A.json +239 -0
  47. velbusaio/module_spec/2B.json +239 -0
  48. velbusaio/module_spec/2C.json +257 -0
  49. velbusaio/module_spec/2D.json +295 -0
  50. velbusaio/module_spec/2E.json +212 -0
  51. velbusaio/module_spec/2F.json +208 -0
  52. velbusaio/module_spec/30.json +46 -0
  53. velbusaio/module_spec/31.json +465 -0
  54. velbusaio/module_spec/32.json +357 -0
  55. velbusaio/module_spec/33.json +239 -0
  56. velbusaio/module_spec/34.json +157 -0
  57. velbusaio/module_spec/35.json +157 -0
  58. velbusaio/module_spec/36.json +157 -0
  59. velbusaio/module_spec/37.json +297 -0
  60. velbusaio/module_spec/38.json +102 -0
  61. velbusaio/module_spec/39.json +4 -0
  62. velbusaio/module_spec/3A.json +295 -0
  63. velbusaio/module_spec/3B.json +295 -0
  64. velbusaio/module_spec/3C.json +295 -0
  65. velbusaio/module_spec/3D.json +419 -0
  66. velbusaio/module_spec/3E.json +295 -0
  67. velbusaio/module_spec/3F.json +4 -0
  68. velbusaio/module_spec/40.json +4 -0
  69. velbusaio/module_spec/41.json +233 -0
  70. velbusaio/module_spec/42.json +4 -0
  71. velbusaio/module_spec/43.json +11 -0
  72. velbusaio/module_spec/44.json +26 -0
  73. velbusaio/module_spec/45.json +4 -0
  74. velbusaio/module_spec/48.json +100 -0
  75. velbusaio/module_spec/49.json +100 -0
  76. velbusaio/module_spec/4A.json +4 -0
  77. velbusaio/module_spec/4B.json +118 -0
  78. velbusaio/module_spec/4C.json +119 -0
  79. velbusaio/module_spec/4D.json +108 -0
  80. velbusaio/module_spec/4E.json +443 -0
  81. velbusaio/module_spec/4F.json +89 -0
  82. velbusaio/module_spec/50.json +89 -0
  83. velbusaio/module_spec/51.json +89 -0
  84. velbusaio/module_spec/52.json +189 -0
  85. velbusaio/module_spec/54.json +4 -0
  86. velbusaio/module_spec/55.json +4 -0
  87. velbusaio/module_spec/56.json +4 -0
  88. velbusaio/module_spec/57.json +222 -0
  89. velbusaio/module_spec/5A.json +4 -0
  90. velbusaio/module_spec/5C.json +87 -0
  91. velbusaio/module_spec/5F.json +66 -0
  92. velbusaio/module_spec/broadcast.json +67 -0
  93. velbusaio/protocol.py +1 -1
  94. velbusaio/protocol.json +0 -10194
  95. {velbus_aio-2024.7.5.dist-info → velbus_aio-2024.10.0.dist-info}/LICENSE +0 -0
  96. {velbus_aio-2024.7.5.dist-info → velbus_aio-2024.10.0.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: velbus-aio
3
- Version: 2024.7.5
3
+ Version: 2024.10.0
4
4
  Summary: Open-source home automation platform running on Python 3.
5
5
  Author-email: Maikel Punie <maikel.punie@gmail.com>
6
6
  License: MIT
@@ -14,7 +14,6 @@ Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Natural Language :: English
15
15
  Classifier: Operating System :: OS Independent
16
16
  Classifier: Programming Language :: Python
17
- Classifier: Programming Language :: Python :: 3.8
18
17
  Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
@@ -25,14 +24,18 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
25
24
  Requires-Python: >=3.8.0
26
25
  Description-Content-Type: text/markdown
27
26
  License-File: LICENSE
28
- Requires-Dist: pyserial >=3.5.0
29
- Requires-Dist: pyserial-asyncio-fast >=0.11
30
- Requires-Dist: backoff >=1.10.0
27
+ Requires-Dist: pyserial>=3.5.0
28
+ Requires-Dist: pyserial-asyncio-fast>=0.11
29
+ Requires-Dist: backoff>=1.10.0
31
30
  Requires-Dist: aiofile
32
31
 
33
32
  ![CI](https://github.com/Cereal2nd/velbus-aio/actions/workflows/main.yml/badge.svg)
34
33
  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/Cereal2nd/velbus-aio/master.svg)](https://results.pre-commit.ci/latest/github/Cereal2nd/velbus-aio/master)
35
34
 
35
+ > This project requires financial support, but it is free for you to use. You can join those helping to keep the lights on at:
36
+ >
37
+ > [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/bmc-button.svg" width=150 height=40 style="margin: 5px"/>](https://buymeacoffee.com/cereal2nd) [<img src="https://raw.githubusercontent.com/Cereal2nd/hassio-velbusd/refs/heads/main/images/github-sponsors-button.svg" width=150 height=40 style="margin: 5px"/>](https://github.com/sponsors/Cereal2nd/)
38
+
36
39
  # velbus-aio
37
40
 
38
41
  Velbus Asyncio, a library to support the [Velbus](https://www.velbus.eu/) home automation system.
@@ -1,20 +1,19 @@
1
1
  velbusaio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- velbusaio/channels.py,sha256=YdIMneLYj_zTa8e2dHmhZvGKcD3iyv5jMeZpfuORcTU,22910
3
- velbusaio/command_registry.py,sha256=j9KuLmada41PMEdtfPvLmXVOAZOkBM9zi-3kluwYffk,5140
4
- velbusaio/const.py,sha256=HyBLMJkzZ0ApJRjCffcWlSGr2c3Qgt6kFpdhLQwl--c,1862
5
- velbusaio/controller.py,sha256=GkYYf_JRWA5iKDdvO5cUJhKO5GZTlTeApcyilrjwxCA,7437
2
+ velbusaio/channels.py,sha256=DRA06Qn3mOPzLoXPkV0-mRONTBza0ooE8ERqK98fxGA,22911
3
+ velbusaio/command_registry.py,sha256=arn5x2Don1xKKiLxRAhQlD9bpYbr8UbfO0bi-43DpEM,5163
4
+ velbusaio/const.py,sha256=aHClMaMS6NINTCrjeRwLbVzdvS91VgFKM8j61ks5tn0,1862
5
+ velbusaio/controller.py,sha256=vKoDfEDlQF_L0ZrXU0L4yD61Adxr_qDma-e-dgWYz1w,7607
6
6
  velbusaio/discovery.py,sha256=Px6qoZl4QhF17aMz6JxstCORBpLzZGWEK9h4Vyvg57o,1649
7
7
  velbusaio/exceptions.py,sha256=FHkXaM3dK5Gkk-QGAf9dLE3FPlCU2FRZWUyY-4KRNnA,515
8
- velbusaio/handler.py,sha256=XDdr6snW5__0Q7EDrwLHv2O0SvXRtH_eKiWaLQuDka0,10862
8
+ velbusaio/handler.py,sha256=OqMagEnNhxnn7ttA4Ob9dkSDEcNMTkd4zQDc6mn_E-M,11445
9
9
  velbusaio/helpers.py,sha256=iqpoereRH4JY5WAkozIqWvXWyRmhko-J-UGXDylFyEM,2537
10
10
  velbusaio/message.py,sha256=_MRuI4XnMcqeduCDJ3AwhAPL1B8VMstFDnjjLo8QuxM,5018
11
- velbusaio/module.py,sha256=OMFIa8VhJR-G_rg2PcGUdpmubLD6gDwVruN4ZCmwpMY,35215
12
- velbusaio/protocol.json,sha256=cQ2RsXomOjB-sd4fIu53QthOlkcfJSa7M0oGkzi9fJQ,253142
13
- velbusaio/protocol.py,sha256=3XhSFYe2GS-3fis5uClJV4tJxI_XO0x-JKZW0cD5cKs,8004
11
+ velbusaio/module.py,sha256=SrPU91eqkfxThRH-cds-lC_8ZMb975Inw7lkvBfEmNE,36021
12
+ velbusaio/protocol.py,sha256=RIpdL0vPlL4qE4bC8sEZSD0SRS4tWtR9MdzjTPSd2zs,8002
14
13
  velbusaio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
14
  velbusaio/raw_message.py,sha256=ODoTPVAvyXXQSMXxtQO1U5OxcoQ4W8JJN5fotEDGSTo,4690
16
15
  velbusaio/util.py,sha256=FW6YCiPYWOCgqHDs8-LbzME0h81mqftYVG0qqZ-oo7Y,1568
17
- velbusaio/messages/__init__.py,sha256=hLkLhsJ5hcgRnhaoyFWz1g2vphdnjrXURxgwezkDBwU,5893
16
+ velbusaio/messages/__init__.py,sha256=ZiApo-9boa5fcxzuaTH3dQ2m8nfTVjrG84pL5V6rFbg,5893
18
17
  velbusaio/messages/blind_status.py,sha256=yzjoYLBxH85tBjihiGzLqebRg1urz0obBA-3q1pqSCE,3418
19
18
  velbusaio/messages/bus_active.py,sha256=AB1mEvbMXRuOaC2CQ7hzKSLmbaJnyFqqXrARi-aSdtg,749
20
19
  velbusaio/messages/bus_error_counter_status.py,sha256=x0RIzil6IcXWq6GHEFYDkSAergNF51JQYyetDXjvvzY,1178
@@ -36,7 +35,7 @@ velbusaio/messages/dali_device_settings_request.py,sha256=InTnrwLD7l9gCHXKlJ69FH
36
35
  velbusaio/messages/dali_dim_value_status.py,sha256=Kgtfb65HCku4OBm6uaxKFpK3VtlYaTemSjMhZqngqkY,1059
37
36
  velbusaio/messages/dimmer_channel_status.py,sha256=uk0SqV3EMJcDGZjoJDA_iHEpgk57qaa7xg1CQkSlIvc,2484
38
37
  velbusaio/messages/dimmer_status.py,sha256=pWsWXJGWmYGio4FyUktI9aYnIBQkGCQ5ZwaeqnenYsU,2938
39
- velbusaio/messages/edge_set_color.py,sha256=enwPshhNrleAQQwc3RobPt5foZ1ynE_74SlBEuzd86w,3305
38
+ velbusaio/messages/edge_set_color.py,sha256=YhxTv-WtDrZ_O67Ro6V-bcHrxj3tyBI1GuzTI5LkIVw,3306
40
39
  velbusaio/messages/edge_set_custom_color.py,sha256=Lz-7prBveqPwuDWv2Mn13X9TAXGBEquw8xz2_y9NtTk,1338
41
40
  velbusaio/messages/fast_blinking_led.py,sha256=_AaG6NcjzG_cBNARogzu56l7DNpGU11XGrDHIkMuKss,909
42
41
  velbusaio/messages/forced_off.py,sha256=RhYRkd7bbq4Nvg2mOp8Vmg3zvhyGeXYeAYJC8iQ_Bzw,591
@@ -96,8 +95,89 @@ velbusaio/messages/very_fast_blinking_led.py,sha256=vlMEern8PoOvtO5JaAk9erMR4IKJ
96
95
  velbusaio/messages/write_data_to_memory.py,sha256=gr6bi4SzK8Mw8fnp8yV-STq5jts7NoeV7zZgdptH5Vs,1039
97
96
  velbusaio/messages/write_memory_block.py,sha256=zGnNxx_M66HpBQ8S7kagtNw8_qSRHsOLk1MuiS0uygM,1032
98
97
  velbusaio/messages/write_module_address_and_serial_number.py,sha256=6y57j-md3btNtQddX5CUREtSs1Dzgkd953sQPZ3Pioo,1597
99
- velbus_aio-2024.7.5.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
100
- velbus_aio-2024.7.5.dist-info/METADATA,sha256=18h6EjobeKywNvcN1lFJlkecK06lokdJnzOrvnbM0uQ,3282
101
- velbus_aio-2024.7.5.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
102
- velbus_aio-2024.7.5.dist-info/top_level.txt,sha256=W0-lSOwD23mm8FqaIe9vY20fKicBMIdUVjF-zmfxRnY,15
103
- velbus_aio-2024.7.5.dist-info/RECORD,,
98
+ velbusaio/module_spec/01.json,sha256=HgE7mouKohbnMbT_bPl1yo59py36daqyhyG5ZVVluzA,953
99
+ velbusaio/module_spec/02.json,sha256=f5xCxEGlqu1lVdMBRu8IDXV1RMXNRgi0cDk_e24UhFc,158
100
+ velbusaio/module_spec/03.json,sha256=a-nJbRjNfXpJsOAwGPkbQjJpF4QDBjj5N1HZezCWgnU,255
101
+ velbusaio/module_spec/05.json,sha256=vhMw5m-9dlUSR6tbBFW9g7vYZHZytElDakPXL_ASubY,667
102
+ velbusaio/module_spec/06.json,sha256=CA2ytfVrICIeIP2AWsYBThylN4hW5x5ez8578Ddaqrk,3138
103
+ velbusaio/module_spec/07.json,sha256=YLR1SAcSM4PBdghWxKAhGGLomtB5tMWls7JNH7vVNzQ,161
104
+ velbusaio/module_spec/08.json,sha256=d4-yNJtjwxyDJHrKzvxgEQt7Y0VyBQqL18Dz6FcglCg,443
105
+ velbusaio/module_spec/09.json,sha256=RDzASLWiILU7vNU5sBonI9DhHhiPGC-4NrWH6hp52qg,378
106
+ velbusaio/module_spec/0A.json,sha256=N7eN0ovOGyWkmm1jkGli_0a1fVRN1cWmIFclHG_JzCU,880
107
+ velbusaio/module_spec/0B.json,sha256=DDGF-3jGLRcsCgjBwbZdrHO9mUwTFJzLBdlA5bszsmY,868
108
+ velbusaio/module_spec/0C.json,sha256=lohrBMeic48nV5sbLO8KuJpj2Yz1xUDDtIlYLA0PcEA,236
109
+ velbusaio/module_spec/0E.json,sha256=Avb1lYqFZvCjWbrQpV9AmrOnrMquYiqIcE7y8SwDxMw,744
110
+ velbusaio/module_spec/0F.json,sha256=589CrCMqI-8oJScbOX-PzXwQmpeZk9Ugv2RY6UQkM6M,176
111
+ velbusaio/module_spec/10.json,sha256=7cjhUlMrJNugZViuG0GT06krB-m0jtlHVvAAn33ACjI,3116
112
+ velbusaio/module_spec/11.json,sha256=cCTs3wHrSY4DzHcWTWJFGlf9Wpie37633T5YOScyvKE,3113
113
+ velbusaio/module_spec/12.json,sha256=RvNW9OC50EETMznnqSJBFrEoGlU1dG18NhEGY2IVrKU,1763
114
+ velbusaio/module_spec/13.json,sha256=reXGXbaTfVVmLekrXHlfzjsV424bb0ozG7q-PxDv27U,68
115
+ velbusaio/module_spec/14.json,sha256=ym2T2jCds-lC7QBZr7mqb0L9PlSmQflwpFnlEDxByjk,161
116
+ velbusaio/module_spec/15.json,sha256=VDkI3bJRZgpfAsCiEzRJls7Hj7spmaKZ6XR8TjyymAQ,2698
117
+ velbusaio/module_spec/16.json,sha256=9sdbNwyQQRkGsd477Oyu279tRcSydQC0bGwSQrhnVTU,3459
118
+ velbusaio/module_spec/17.json,sha256=WeWeIV6euBGkPq7jBv5rbSykZwhDP6nPzrfk7rrYz-w,3490
119
+ velbusaio/module_spec/18.json,sha256=ylZ7_86DYCkHxk40ZqsGYEkLeUslZ_-b_ftUihfJ2bQ,3484
120
+ velbusaio/module_spec/1A.json,sha256=dvIxgufmgIhZhsBuVEa27KmukJyvnFciorqpxwRNWFM,2581
121
+ velbusaio/module_spec/1B.json,sha256=JbHvdmoRnsqyqhCItsTOP-UK_Yz_ha1Km9CXDe68YVc,3159
122
+ velbusaio/module_spec/1D.json,sha256=flql_3BEJxN49hCuyY7rPpt1oSrbWsXurjnivOFd3vo,2717
123
+ velbusaio/module_spec/1E.json,sha256=tLisdUarUyS8Fk9oDsQy7TjmlkGs-vHrA8QbU6F7Pz4,5298
124
+ velbusaio/module_spec/1F.json,sha256=oFb-HIrLBhIr_sPX8ZsIzOtpi_nHyfLkfoP1P0Ewg88,4386
125
+ velbusaio/module_spec/20.json,sha256=ysngPSzynugxFZGd5bZD76nN1ZbjyiHiA1-HReJYm-Y,4393
126
+ velbusaio/module_spec/21.json,sha256=Sj-oc76Oi_KAEuwnaLHL8GsbR_ClZHW0yPiD0D7vIOA,6815
127
+ velbusaio/module_spec/22.json,sha256=u09uXlE65VIx4iALJo5SUF1hK3fgaOhuw4J1ighFXDM,6150
128
+ velbusaio/module_spec/23.json,sha256=3jCtHfqaqHNVZ6QyG499ZKaIQyTqmTxqqLujmgTW4RY,3593
129
+ velbusaio/module_spec/25.json,sha256=H87YnDGlgnEJzokWZkrfDtGGE-3JRJEYDRnKTlL69eE,24
130
+ velbusaio/module_spec/28.json,sha256=FHyi0Ax7ve6k-e6vE8oTXsfLT7OqIMTXBtkhU3C7304,7712
131
+ velbusaio/module_spec/29.json,sha256=S_L0wHyhtqeyh4dxd_6tX179rhb5OoCzD2zl3GqcQOI,4008
132
+ velbusaio/module_spec/2A.json,sha256=RJIqQh-aqvtB4DifBe8oiaaC47tf_r8mAMX1iJ_O3yc,4170
133
+ velbusaio/module_spec/2B.json,sha256=lxzrmcWLz9KHMLVbiMSfzqH7rS8Ww3De11k5pJErUlo,4173
134
+ velbusaio/module_spec/2C.json,sha256=84VjlZ9j5DREO72wAhdDAF9hXRBvntGCZWbwXxVWkQk,4486
135
+ velbusaio/module_spec/2D.json,sha256=jmOmVnjHjozr6Cu345hPPQWpgCI7kuF_VVVGDEB4QV8,5276
136
+ velbusaio/module_spec/2E.json,sha256=VA1J1Sevkgnv-OA1T-mFSeWEg4hTq1LMydryq9S7Dq0,3654
137
+ velbusaio/module_spec/2F.json,sha256=95h-w7HA_xQpMCZRyFvPjVQP3mCa9AZM4zFNzTSi7vY,3595
138
+ velbusaio/module_spec/30.json,sha256=WJsy2Uw4oANze8h4eMJilIy5JDoy8yzsm2MJtUMiH9k,871
139
+ velbusaio/module_spec/31.json,sha256=o9AqfLTdjQkSd77t97A-ttQxWLEJVyKG22Ie50vsRIY,8291
140
+ velbusaio/module_spec/32.json,sha256=kZXAfVBSwYf6w9fUfo17-68lpQkM6toYTx6P_aKD7-g,6102
141
+ velbusaio/module_spec/33.json,sha256=7uEWgRW9_MOEtbJKxA6GPR-sWR-OMYp6snLoTgVzeyQ,4119
142
+ velbusaio/module_spec/34.json,sha256=h7jjGfZboTC3awV-RhCNggsZn-pz9ZB-lE9Z0SBPsJE,2897
143
+ velbusaio/module_spec/35.json,sha256=evnYDd_jX2CsvrLtCDrE1Dml5eO7zCaYauoYMAarED0,2894
144
+ velbusaio/module_spec/36.json,sha256=aQhIjfu2rSINQXP5ijmrmLKPk00XaLxJThbofjtKP9c,2888
145
+ velbusaio/module_spec/37.json,sha256=Ks3d_aq3aLdG4EnUrtz2o1JPtRp-DVLPYYO2zvxkmdo,6942
146
+ velbusaio/module_spec/38.json,sha256=fW5hUjUNF_6oJ1oREHDVEzhvqBPHHz-WUSFNuMmbwUw,1947
147
+ velbusaio/module_spec/39.json,sha256=o9p-zOhyyAgOrZT8JYok4qKsIDmYQS62v1HsqI_-SMU,70
148
+ velbusaio/module_spec/3A.json,sha256=mifj-U7M-55rTAo9L1DBSMbpBUOMwrhBuuvDG90loDQ,5307
149
+ velbusaio/module_spec/3B.json,sha256=npHo1SGnY9RT1jgKsBjcwLQRUCOByvzGvVMmR7bZabY,5304
150
+ velbusaio/module_spec/3C.json,sha256=uvJjyxp7mmY3ohBfNvRGk1FtVt6rWtlIqwLl6zIawkw,5298
151
+ velbusaio/module_spec/3D.json,sha256=PQN562OodAmwmhKfOqk2Grt4w-kFxj00ApYH3x_xqOs,7721
152
+ velbusaio/module_spec/3E.json,sha256=eu0pecAOfc7G3I3YCeUpCVXbKcaIOw2f0wGnEw6AKJY,5285
153
+ velbusaio/module_spec/3F.json,sha256=F_zC4QIDqkyT9kM0fGsusKYIqqMtOhmlYbQ0DFKqeas,73
154
+ velbusaio/module_spec/40.json,sha256=JkSmbb9uQ43VB0Aacif-lnHYj9-P-oFsOeGblu3sHRQ,71
155
+ velbusaio/module_spec/41.json,sha256=d5KBfGAUSht8Fl4WXiJg6QIQHu0mAP2e9oT4t25lldU,4103
156
+ velbusaio/module_spec/42.json,sha256=0zSbvyG6I2O3XAhv28R_v0IQvd_h4xLQIJDXVInYR6g,59
157
+ velbusaio/module_spec/43.json,sha256=y_e_hGjiUlnNj_Dnw_2pKvrutSlp-mU6OTym9KVPTLQ,178
158
+ velbusaio/module_spec/44.json,sha256=tYq0Y_dju2VztBX63LdorK3TEmMv0HlfYO_s9cZYJQ8,474
159
+ velbusaio/module_spec/45.json,sha256=aAlc4ANbdDXJs7YhXm06te-gN43uaL80DS9qoinS2cQ,71
160
+ velbusaio/module_spec/48.json,sha256=ejmocqJuZgGg5KWAIKD5m8Msaz3hfdrN2Iy5_mHAXF4,3119
161
+ velbusaio/module_spec/49.json,sha256=BBjSLnQ8sFeGgfuUVbigFAZX7wvh5dxRVdZnwvU2doQ,3116
162
+ velbusaio/module_spec/4A.json,sha256=1E2BqC7aOC7sC22g9Ep3XPC8Lmc6__JD8yKPhESzRuk,63
163
+ velbusaio/module_spec/4B.json,sha256=ZDpirjZS8teOrfV1mYIyG-_9PMeeHr_736hz-P_EO2U,3403
164
+ velbusaio/module_spec/4C.json,sha256=l1oMv_JnUEpEIFY1GZMUeXDWPjbUz98tZZ-4VsGxhsM,3464
165
+ velbusaio/module_spec/4D.json,sha256=9Lho_3m4H5SBhx363zCDN3HnA8zLlygIi0EgXyOolF8,3213
166
+ velbusaio/module_spec/4E.json,sha256=5OfV91FVLz6FHwLN34FvkGtBbg5cGeUdXxTdddB2RF0,8675
167
+ velbusaio/module_spec/4F.json,sha256=ePImVotWcTbCvJ5xYN3hBqwZkGoRFEgFJV4AwXg474A,1631
168
+ velbusaio/module_spec/50.json,sha256=xmchRD1S_Z4j3aLEafYsAZtW7bOWpWCWvUk-8SU3Zww,1628
169
+ velbusaio/module_spec/51.json,sha256=8xrdwniKVokfLK9k44JIBr_xJ4H0yh8pN1SuX1-fOc0,1622
170
+ velbusaio/module_spec/52.json,sha256=NcDjyS_j86oobJmENaRsbmELxEp79iBFn05zlzSvw5Q,3452
171
+ velbusaio/module_spec/54.json,sha256=kvSx4rKnpU10h4DZtPk_RZxej7zltx4hjWEstOPiNE8,60
172
+ velbusaio/module_spec/55.json,sha256=CZArOlcjtP-Dd57KXIcOFcTVj4UEkQmJtiERWZ02V44,60
173
+ velbusaio/module_spec/56.json,sha256=3EFab88JQrLrRwoiA_qlaL7t6tlfPo_gwCei2XIM5E0,60
174
+ velbusaio/module_spec/57.json,sha256=E_Ftam1UP57p6uQtmFe1gOOA_11_AIQMb8_Khf6XNTM,4313
175
+ velbusaio/module_spec/5A.json,sha256=V_yhMdGrNxFE7J_CXJmngN-yYBz2V_tqXkKCCwI7HCE,52
176
+ velbusaio/module_spec/5C.json,sha256=yw_XlccuFp-buRL_NXThwQLwblVRa0diLpUDm9Exrg0,1586
177
+ velbusaio/module_spec/5F.json,sha256=ebSwLMUW5A4LCRGOrF-vwxSVvrWZMNUWz10Xrmz7SwM,1259
178
+ velbusaio/module_spec/broadcast.json,sha256=L2Sc9FhZ7NOuu7K5g5jAhvUQGDP6a2CKrg-uWh_v-sA,2250
179
+ velbus_aio-2024.10.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
180
+ velbus_aio-2024.10.0.dist-info/METADATA,sha256=OXylu4UVsk3uUjo0d5zmOUnAOWlo_lkDy-OCVLuDRqw,3754
181
+ velbus_aio-2024.10.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
182
+ velbus_aio-2024.10.0.dist-info/top_level.txt,sha256=W0-lSOwD23mm8FqaIe9vY20fKicBMIdUVjF-zmfxRnY,15
183
+ velbus_aio-2024.10.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.2.0)
2
+ Generator: setuptools (75.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
velbusaio/channels.py CHANGED
@@ -19,7 +19,7 @@ from velbusaio.const import (
19
19
  VOLUME_LITERS_HOUR,
20
20
  )
21
21
  from velbusaio.message import Message
22
- from velbusaio.messages.edge_set_color import SetEdgeColorMessage, CustomColorPriority
22
+ from velbusaio.messages.edge_set_color import CustomColorPriority, SetEdgeColorMessage
23
23
  from velbusaio.messages.module_status import PROGRAM_SELECTION
24
24
 
25
25
  if TYPE_CHECKING:
@@ -508,7 +508,7 @@ class Temperature(Channel):
508
508
  _min = None
509
509
  _target = 0
510
510
  _cmode = None
511
- _coolmode = None
511
+ _cool_mode = None
512
512
  _cstatus = None
513
513
  _thermostat = False
514
514
  _sleep_timer = 0
@@ -9,8 +9,8 @@ MODULE_DIRECTORY = {
9
9
  0x01: "VMB8PB",
10
10
  0x02: "VMB1RY",
11
11
  0x03: "VMB1BL",
12
- 0x04: "VMB4LEDPWM-20",
13
12
  0x05: "VMB6IN",
13
+ 0x06: "VMB4LEDPWM-20",
14
14
  0x07: "VMB1DM",
15
15
  0x08: "VMB4RY",
16
16
  0x09: "VMB2BL",
@@ -73,14 +73,15 @@ MODULE_DIRECTORY = {
73
73
  0x4A: "VMB2BLE-10",
74
74
  0x4B: "VMB8DC-20",
75
75
  0x4C: "VMB6PB-20",
76
+ 0x4D: "VMBPIR-20",
76
77
  0x4F: "VMBEL1-20",
77
78
  0x50: "VMBEL2-20",
78
79
  0x51: "VMBEL4-20",
79
80
  0x52: "VMBELO-20",
80
- 0x53: "VMBGP1-20",
81
- 0x54: "VMBGP2-20",
82
- 0x55: "VMBGP4-20",
83
- 0x56: "VMBGPO-20",
81
+ 0x54: "VMBGP1-20",
82
+ 0x55: "VMBGP2-20",
83
+ 0x56: "VMBGP4-20",
84
+ 0x57: "VMBGPO-20",
84
85
  0x5A: "VMBDALI-20",
85
86
  0x5C: "VMBEL4PIR-20",
86
87
  0x5F: "VMBGP4PIR-20",
velbusaio/const.py CHANGED
@@ -40,7 +40,7 @@ NO_RTR: Final = 0x00
40
40
  CACHEDIR: Final = ".velbuscache"
41
41
 
42
42
  # Module scan timeout values (in mSec)
43
- SCAN_MODULETYPE_TIMEOUT: Final = 2000 # time to wait for ModuleTypeRequest
43
+ SCAN_MODULETYPE_TIMEOUT: Final = 3000 # time to wait for ModuleTypeRequest
44
44
  SCAN_MODULEINFO_TIMEOUT_INITIAL: Final = 1000 # time to wait for first info (status)
45
45
  SCAN_MODULEINFO_TIMEOUT_INTERVAL: Final = (
46
46
  150 # time to wait for info interval (between next message)
velbusaio/controller.py CHANGED
@@ -34,6 +34,7 @@ class Velbus:
34
34
  self,
35
35
  dsn: str,
36
36
  cache_dir: str = get_cache_dir(),
37
+ one_address: int | None = None,
37
38
  ) -> None:
38
39
  """Init the Velbus controller."""
39
40
  self._log = logging.getLogger("velbus")
@@ -46,7 +47,7 @@ class Velbus:
46
47
  self._auto_reconnect = True
47
48
 
48
49
  self._dsn = dsn
49
- self._handler = PacketHandler(self)
50
+ self._handler = PacketHandler(self, one_address)
50
51
  self._modules: dict[int, Module] = {}
51
52
  self._submodules: list[int] = []
52
53
  self._send_queue: asyncio.Queue = asyncio.Queue()
@@ -67,11 +68,10 @@ class Velbus:
67
68
  self._log.debug("Reconnecting to transport")
68
69
  asyncio.ensure_future(self.connect())
69
70
 
70
- def add_module(
71
+ async def add_module(
71
72
  self,
72
73
  addr: int,
73
74
  typ: int,
74
- data: dict,
75
75
  serial: int | None = None,
76
76
  memorymap: int | None = None,
77
77
  build_year: int | None = None,
@@ -81,14 +81,13 @@ class Velbus:
81
81
  module = Module.factory(
82
82
  addr,
83
83
  typ,
84
- data,
85
84
  serial=serial,
86
85
  build_year=build_year,
87
86
  build_week=build_week,
88
87
  memorymap=memorymap,
89
88
  cache_dir=self._cache_dir,
90
89
  )
91
- module.initialize(self.send)
90
+ await module.initialize(self.send)
92
91
  self._modules[addr] = module
93
92
  self._log.info(f"Found module {addr}: {module}")
94
93
 
@@ -102,6 +101,10 @@ class Velbus:
102
101
  self._modules[sub_addr] = module
103
102
  module.cleanupSubChannels()
104
103
 
104
+ def addr_is_submodule(self, addr: int) -> bool:
105
+ """Check if an address is a submodule."""
106
+ return addr in self._submodules
107
+
105
108
  def get_modules(self) -> dict:
106
109
  """Return the module cache."""
107
110
  return self._modules
velbusaio/handler.py CHANGED
@@ -5,30 +5,29 @@ Velbus packet handler
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from velbusaio.const import SCAN_MODULETYPE_TIMEOUT
9
- from velbusaio.const import SCAN_MODULEINFO_TIMEOUT_INITIAL
10
- from velbusaio.const import SCAN_MODULEINFO_TIMEOUT_INTERVAL
11
-
12
8
  import asyncio
13
9
  import json
14
10
  import logging
15
- import threading
16
11
  import os
17
12
  import pathlib
18
-
19
- from aiofile import async_open
20
-
13
+ import pprint
21
14
  from typing import TYPE_CHECKING, Awaitable, Callable
15
+
22
16
  import pkg_resources
17
+ from aiofile import async_open
23
18
 
24
19
  from velbusaio.command_registry import commandRegistry
20
+ from velbusaio.const import (
21
+ SCAN_MODULEINFO_TIMEOUT_INITIAL,
22
+ SCAN_MODULEINFO_TIMEOUT_INTERVAL,
23
+ SCAN_MODULETYPE_TIMEOUT,
24
+ )
25
25
  from velbusaio.helpers import h2, keys_exists
26
26
  from velbusaio.message import Message
27
27
  from velbusaio.messages.module_subtype import ModuleSubTypeMessage
28
- from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
28
+ from velbusaio.messages.module_type import ModuleType2Message, ModuleTypeMessage
29
29
  from velbusaio.raw_message import RawMessage
30
30
 
31
-
32
31
  if TYPE_CHECKING:
33
32
  from velbusaio.controller import Velbus
34
33
 
@@ -41,21 +40,23 @@ class PacketHandler:
41
40
  def __init__(
42
41
  self,
43
42
  velbus: Velbus,
43
+ one_address: int | None = None,
44
44
  ) -> None:
45
45
  self._log = logging.getLogger("velbus-handler")
46
46
  self._log.setLevel(logging.DEBUG)
47
47
  self._velbus = velbus
48
+ self._one_address = one_address
48
49
  self._typeResponseReceived = asyncio.Event()
49
- self._scanLock = threading.Lock()
50
+ self._scanLock = asyncio.Lock()
50
51
  self._modulescan_address = 0
51
52
  self._scan_complete = False
52
53
  self._scan_delay_msec = 0
53
54
 
54
55
  async def read_protocol_data(self):
55
56
  async with async_open(
56
- pkg_resources.resource_filename(__name__, "protocol.json")
57
+ pkg_resources.resource_filename(__name__, "module_spec/broadcast.json")
57
58
  ) as protocol_file:
58
- self.pdata = json.loads(await protocol_file.read())
59
+ self.broadcast = json.loads(await protocol_file.read())
59
60
 
60
61
  def empty_cache(self) -> bool:
61
62
  if (
@@ -84,12 +85,22 @@ class PacketHandler:
84
85
  while self._modulescan_address < 254:
85
86
  address = 0
86
87
  module = None
87
- with self._scanLock:
88
+ async with self._scanLock:
88
89
  self._modulescan_address = self._modulescan_address + 1
89
90
  address = self._modulescan_address
91
+ if self._velbus.addr_is_submodule(address):
92
+ self._log.info(
93
+ f"Skipping submodule address {address}, already handled"
94
+ )
95
+ continue
96
+ self._log.info(f"Starting handling scan {address}")
90
97
  module = self._velbus.get_module(address)
91
98
 
92
- self._log.info(f"Starting handling scan {address}")
99
+ if self._one_address is not None and address != int(self._one_address):
100
+ self._log.info(
101
+ f"Skipping address {address} as we requested to only scan one address {self._one_address}"
102
+ )
103
+ continue
93
104
 
94
105
  cfile = pathlib.Path(f"{self._velbus.get_cache_dir()}/{address}.json")
95
106
  # cleanup the old module cache if needed
@@ -107,7 +118,7 @@ class PacketHandler:
107
118
  self._typeResponseReceived.wait(),
108
119
  SCAN_MODULETYPE_TIMEOUT / 1000.0,
109
120
  )
110
- with self._scanLock:
121
+ async with self._scanLock:
111
122
  module = self._velbus.get_module(address)
112
123
  except asyncio.TimeoutError:
113
124
  self._log.info(
@@ -115,20 +126,24 @@ class PacketHandler:
115
126
  )
116
127
  if module is not None:
117
128
  try:
118
- self._log.debug(f"Module {address} detected: start loading")
129
+ self._log.debug(
130
+ f"Module {module._address} detected: start loading"
131
+ )
119
132
  await asyncio.wait_for(
120
133
  module.load(from_cache=True),
121
134
  SCAN_MODULEINFO_TIMEOUT_INITIAL / 1000.0,
122
135
  )
123
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INITIAL
124
- while self._scan_delay_msec > 50 and not module.is_loaded():
136
+ self._scan_delay_msec = module.get_initial_timeout()
137
+ while (
138
+ self._scan_delay_msec > 50 and not await module.is_loaded()
139
+ ):
125
140
  # self._log.debug(
126
- # f"\t... waiting {self._scan_delay_msec} is_loaded={module.is_loaded()}"
141
+ # f"\t... waiting {self._scan_delay_msec} is_loaded={await module.is_loaded()}"
127
142
  # )
128
143
  self._scan_delay_msec = self._scan_delay_msec - 50
129
144
  await asyncio.sleep(0.05)
130
145
  self._log.info(
131
- f"Scan module {address} completed, module loaded={module.is_loaded()}"
146
+ f"Scan module {address} completed, module loaded={await module.is_loaded()}"
132
147
  )
133
148
  except asyncio.TimeoutError:
134
149
  self._log.error(
@@ -153,49 +168,47 @@ class PacketHandler:
153
168
  data = rawmsg.data_only
154
169
 
155
170
  # handle module type response message
156
- if command_value == 0xFF:
157
- if not self._scan_complete:
158
- tmsg: ModuleTypeMessage = ModuleTypeMessage()
159
- tmsg.populate(priority, address, rtr, data)
160
- with self._scanLock:
161
- self._handle_module_type(tmsg)
162
- if address == self._modulescan_address:
163
- self._typeResponseReceived.set()
164
- else:
165
- self._log.debug(
166
- f"Unexpected module type message module address {address}, Velbuslink scan?"
167
- )
168
- self._modulescan_address = address - 1
171
+ if command_value == 0xFF and not self._scan_complete:
172
+ tmsg: ModuleTypeMessage = ModuleTypeMessage()
173
+ tmsg.populate(priority, address, rtr, data)
174
+ async with self._scanLock:
175
+ await self._handle_module_type(tmsg)
176
+ if address == self._modulescan_address:
177
+ self._typeResponseReceived.set()
178
+ else:
179
+ self._log.debug(
180
+ f"Unexpected module type message module address {address}, Velbuslink scan?"
181
+ )
182
+ self._modulescan_address = address - 1
169
183
 
170
- self._typeResponseReceived.set()
184
+ self._typeResponseReceived.set()
171
185
 
172
186
  # handle module subtype response message
173
- elif command_value in (0xB0, 0xA7, 0xA6):
174
- if not self._scan_complete:
175
- msg: ModuleSubTypeMessage = ModuleSubTypeMessage()
176
- msg.populate(priority, address, rtr, data)
177
- if command_value == 0xB0:
178
- msg.sub_address_offset = 0
179
- elif command_value == 0xA7:
180
- msg.sub_address_offset = 4
181
- elif command_value == 0xA6:
182
- msg.sub_address_offset = 8
183
- with self._scanLock:
184
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INITIAL
185
- self._handle_module_subtype(msg)
187
+ elif command_value in (0xB0, 0xA7, 0xA6) and not self._scan_complete:
188
+ msg: ModuleSubTypeMessage = ModuleSubTypeMessage()
189
+ msg.populate(priority, address, rtr, data)
190
+ if command_value == 0xB0:
191
+ msg.sub_address_offset = 0
192
+ elif command_value == 0xA7:
193
+ msg.sub_address_offset = 4
194
+ elif command_value == 0xA6:
195
+ msg.sub_address_offset = 8
196
+ async with self._scanLock:
197
+ self._scan_delay_msec += SCAN_MODULEINFO_TIMEOUT_INTERVAL
198
+ self._handle_module_subtype(msg)
186
199
 
187
200
  # ignore broadcast
188
- elif command_value in self.pdata["MessagesBroadCast"]:
201
+ elif command_value in self.broadcast:
189
202
  self._log.debug(
190
203
  "Received broadcast message {} from {}, ignoring".format(
191
- self.pdata["MessageBroadCast"][str(command_value).upper()], address
204
+ self.broadcast[str(command_value).upper()], address
192
205
  )
193
206
  )
194
207
 
195
208
  # handle other messages for modules that are already scanned
196
209
  else:
197
210
  module = None
198
- with self._scanLock:
211
+ async with self._scanLock:
199
212
  module = self._velbus.get_module(address)
200
213
  if module is not None:
201
214
  module_type = module.get_type()
@@ -214,28 +227,29 @@ class PacketHandler:
214
227
  0xFE,
215
228
  0xCC,
216
229
  ): # names, memory data, memory block
217
- self._scan_delay_msec = SCAN_MODULEINFO_TIMEOUT_INTERVAL
230
+ self._scan_delay_msec += SCAN_MODULEINFO_TIMEOUT_INTERVAL
218
231
  # self._log.debug(f"Restart timeout {msg}")
219
232
  # send the message to the modules
220
233
  await module.on_message(msg)
221
234
  else:
222
235
  self._log.warning(f"NOT FOUND IN command_registry: {rawmsg}")
223
236
 
224
- def _handle_module_type(self, msg: ModuleTypeMessage | ModuleType2Message) -> None:
237
+ async def _handle_module_type(
238
+ self, msg: ModuleTypeMessage | ModuleType2Message
239
+ ) -> None:
225
240
  """
226
241
  load the module data
227
242
  """
228
243
  if msg is not None:
229
244
  module = self._velbus.get_module(msg.address)
230
245
  if module is None:
231
- data = keys_exists(self.pdata, "ModuleTypes", h2(msg.module_type))
232
- if not data:
233
- self._log.warning(f"Module not recognized: {msg.module_type}")
234
- return
235
- self._velbus.add_module(
246
+ # data = keys_exists(self.pdata, "ModuleTypes", h2(msg.module_type))
247
+ # if not data:
248
+ # self._log.warning(f"Module not recognized: {msg.module_type}")
249
+ # return
250
+ await self._velbus.add_module(
236
251
  msg.address,
237
252
  msg.module_type,
238
- data,
239
253
  memorymap=msg.memory_map_version,
240
254
  build_year=msg.build_year,
241
255
  build_week=msg.build_week,
@@ -51,13 +51,13 @@ from velbusaio.messages.memo_text import MemoTextMessage
51
51
  from velbusaio.messages.memory_data import MemoryDataMessage
52
52
  from velbusaio.messages.memory_data_block import MemoryDataBlockMessage
53
53
  from velbusaio.messages.memory_dump_request import MemoryDumpRequestMessage
54
- from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
55
54
  from velbusaio.messages.module_status import ModuleStatusMessage, ModuleStatusMessage2
56
55
  from velbusaio.messages.module_status_request import ModuleStatusRequestMessage
57
56
  from velbusaio.messages.module_subtype import ModuleSubTypeMessage
58
- from velbusaio.messages.module_type import ModuleTypeMessage, ModuleType2Message
57
+ from velbusaio.messages.module_type import ModuleType2Message, ModuleTypeMessage
59
58
  from velbusaio.messages.module_type_request import ModuleTypeRequestMessage
60
59
  from velbusaio.messages.push_button_status import PushButtonStatusMessage
60
+ from velbusaio.messages.raw import MeteoRawMessage, SensorRawMessage
61
61
  from velbusaio.messages.read_data_block_from_memory import (
62
62
  ReadDataBlockFromMemoryMessage,
63
63
  )
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from enum import IntEnum
4
+
4
5
  from velbusaio.command_registry import register
5
6
  from velbusaio.message import Message
6
7