ramses-rf 0.22.40__tar.gz → 0.51.2__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 (382) hide show
  1. ramses_rf-0.51.2/.github/ISSUE_TEMPLATE/bug_report.md +34 -0
  2. ramses_rf-0.51.2/.github/dependabot.yml +15 -0
  3. ramses_rf-0.51.2/.github/workflows/check-lint.yml +52 -0
  4. ramses_rf-0.51.2/.github/workflows/check-test.yml +54 -0
  5. ramses_rf-0.51.2/.github/workflows/check-type.yml +52 -0
  6. ramses_rf-0.51.2/.github/workflows/publish-hatch.yml +51 -0
  7. ramses_rf-0.51.2/.gitignore +185 -0
  8. ramses_rf-0.51.2/.pre-commit-config.yaml +99 -0
  9. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/LICENSE +1 -1
  10. ramses_rf-0.51.2/PKG-INFO +72 -0
  11. ramses_rf-0.51.2/README-developers.md +60 -0
  12. ramses_rf-0.51.2/README.md +51 -0
  13. ramses_rf-0.51.2/client.py +19 -0
  14. ramses_rf-0.51.2/misc/fingerprints.log +16 -0
  15. ramses_rf-0.51.2/misc/ser2net.yaml +15 -0
  16. ramses_rf-0.51.2/misc/ti_3410/notes.sh +16 -0
  17. ramses_rf-0.51.2/misc/ti_3410/ti_3410.fw +0 -0
  18. ramses_rf-0.51.2/pyproject.toml +274 -0
  19. ramses_rf-0.51.2/ramses_cli/__init__.py +18 -0
  20. ramses_rf-0.51.2/ramses_cli/client.py +597 -0
  21. ramses_rf-0.51.2/ramses_cli/debug.py +20 -0
  22. ramses_rf-0.51.2/ramses_cli/discovery.py +405 -0
  23. ramses_rf-0.51.2/ramses_cli/utils/cat_slow.py +17 -0
  24. ramses_rf-0.51.2/ramses_cli/utils/convert.py +60 -0
  25. ramses_rf-0.51.2/ramses_rf/__init__.py +59 -0
  26. ramses_rf-0.51.2/ramses_rf/binding_fsm.py +787 -0
  27. ramses_rf-0.51.2/ramses_rf/const.py +154 -0
  28. ramses_rf-0.51.2/ramses_rf/database.py +297 -0
  29. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/device/__init__.py +69 -39
  30. ramses_rf-0.51.2/ramses_rf/device/base.py +516 -0
  31. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/device/heat.py +540 -552
  32. ramses_rf-0.51.2/ramses_rf/device/hvac.py +691 -0
  33. ramses_rf-0.51.2/ramses_rf/dispatcher.py +289 -0
  34. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/entity_base.py +478 -361
  35. ramses_rf-0.51.2/ramses_rf/exceptions.py +82 -0
  36. ramses_rf-0.51.2/ramses_rf/gateway.py +633 -0
  37. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/helpers.py +57 -19
  38. ramses_rf-0.51.2/ramses_rf/py.typed +0 -0
  39. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/schemas.py +148 -194
  40. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/system/__init__.py +16 -23
  41. ramses_rf-0.51.2/ramses_rf/system/faultlog.py +363 -0
  42. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/system/heat.py +295 -302
  43. ramses_rf-0.51.2/ramses_rf/system/schedule.py +548 -0
  44. {ramses-rf-0.22.40 → ramses_rf-0.51.2}/ramses_rf/system/zones.py +318 -238
  45. ramses_rf-0.51.2/ramses_rf/version.py +4 -0
  46. ramses_rf-0.51.2/ramses_tx/__init__.py +160 -0
  47. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/address.py +65 -59
  48. ramses_rf-0.51.2/ramses_tx/command.py +1454 -0
  49. ramses_rf-0.51.2/ramses_tx/const.py +903 -0
  50. ramses_rf-0.51.2/ramses_tx/exceptions.py +92 -0
  51. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/fingerprints.py +56 -15
  52. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/frame.py +132 -131
  53. ramses_rf-0.51.2/ramses_tx/gateway.py +338 -0
  54. ramses_rf-0.51.2/ramses_tx/helpers.py +883 -0
  55. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/logger.py +67 -53
  56. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/message.py +155 -191
  57. ramses_rf-0.51.2/ramses_tx/opentherm.py +1260 -0
  58. ramses_rf-0.51.2/ramses_tx/packet.py +210 -0
  59. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/parsers.py +1266 -1003
  60. ramses_rf-0.51.2/ramses_tx/protocol.py +801 -0
  61. ramses_rf-0.51.2/ramses_tx/protocol_fsm.py +672 -0
  62. ramses_rf-0.51.2/ramses_tx/py.typed +0 -0
  63. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/ramses.py +262 -185
  64. {ramses-rf-0.22.40/ramses_rf/protocol → ramses_rf-0.51.2/ramses_tx}/schemas.py +150 -133
  65. ramses_rf-0.51.2/ramses_tx/transport.py +1471 -0
  66. ramses_rf-0.51.2/ramses_tx/typed_dicts.py +492 -0
  67. ramses_rf-0.51.2/ramses_tx/typing.py +181 -0
  68. ramses_rf-0.51.2/ramses_tx/version.py +4 -0
  69. ramses_rf-0.51.2/requirements.txt +16 -0
  70. ramses_rf-0.51.2/requirements_dev.txt +32 -0
  71. ramses_rf-0.51.2/tests/deprecated/_test_apis_mock.py +56 -0
  72. ramses_rf-0.51.2/tests/deprecated/_test_mock_faultlog.py +2 -0
  73. ramses_rf-0.51.2/tests/deprecated/_test_mock_schedule.py +382 -0
  74. ramses_rf-0.51.2/tests/deprecated/_test_packets_bad.py +31 -0
  75. ramses_rf-0.51.2/tests/deprecated/_test_performance_WIP.py +69 -0
  76. ramses_rf-0.51.2/tests/deprecated/_test_state_mgt.py +6 -0
  77. ramses_rf-0.51.2/tests/deprecated/common.py +93 -0
  78. ramses_rf-0.51.2/tests/deprecated/mocked_devices/__init__.py +33 -0
  79. ramses_rf-0.51.2/tests/deprecated/mocked_devices/command.py +57 -0
  80. ramses_rf-0.51.2/tests/deprecated/mocked_devices/const.py +11 -0
  81. ramses_rf-0.51.2/tests/deprecated/mocked_devices/device_heat.py +871 -0
  82. ramses_rf-0.51.2/tests/deprecated/mocked_devices/device_hvac.py +99 -0
  83. ramses_rf-0.51.2/tests/deprecated/mocked_devices/transport.py +253 -0
  84. ramses_rf-0.51.2/tests/tests/__init__.py +2 -0
  85. ramses_rf-0.51.2/tests/tests/bindings/heat/ctl_bdr_91t.log +25 -0
  86. ramses_rf-0.51.2/tests/tests/bindings/heat/dts_ctl_sensor.log +29 -0
  87. ramses_rf-0.51.2/tests/tests/bindings/heat/hcw_ctl_sensor.log +37 -0
  88. ramses_rf-0.51.2/tests/tests/bindings/heat/rnd_ctl_sensor.log +35 -0
  89. ramses_rf-0.51.2/tests/tests/bindings/heat/rnd_ctl_sensor.yaml +38 -0
  90. ramses_rf-0.51.2/tests/tests/bindings/heat/trv_ctl.log +30 -0
  91. ramses_rf-0.51.2/tests/tests/bindings/hvac/co2_fan_itho.json +12 -0
  92. ramses_rf-0.51.2/tests/tests/bindings/hvac/co2_fan_itho.log +26 -0
  93. ramses_rf-0.51.2/tests/tests/bindings/hvac/co2_fan_itho.yaml +9 -0
  94. ramses_rf-0.51.2/tests/tests/bindings/hvac/dis_fan_orcon.json +12 -0
  95. ramses_rf-0.51.2/tests/tests/bindings/hvac/dis_fan_orcon.log +59 -0
  96. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_climarad.log +32 -0
  97. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_nuaire.json +12 -0
  98. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_nuaire.log +52 -0
  99. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_nuaire.yaml +9 -0
  100. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_vasco.log +32 -0
  101. ramses_rf-0.51.2/tests/tests/bindings/hvac/rem_fan_ventura.log +52 -0
  102. ramses_rf-0.51.2/tests/tests/devices/device_02.log +7 -0
  103. ramses_rf-0.51.2/tests/tests/devices/device_04.log +53 -0
  104. ramses_rf-0.51.2/tests/tests/devices/device_10.log +120 -0
  105. ramses_rf-0.51.2/tests/tests/devices/device_13.log +49 -0
  106. ramses_rf-0.51.2/tests/tests/devices/device_22.log +5 -0
  107. ramses_rf-0.51.2/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_off.json +13 -0
  108. ramses_rf-0.51.2/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_on.json +13 -0
  109. ramses_rf-0.51.2/tests/tests/eavesdrop_dev_class/hvac/packet.log +41 -0
  110. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_long/packet.log +67 -0
  111. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_off.json +74 -0
  112. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_on.json +73 -0
  113. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_mixed/packet.log +5 -0
  114. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_off.json +21 -0
  115. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_on.json +21 -0
  116. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_ufh_circuits/packet.log +10 -0
  117. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_off.json +0 -0
  118. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_on.json +0 -0
  119. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/app_cntrl/packet.log +19 -0
  120. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_off.json +13 -0
  121. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_on.json +12 -0
  122. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/trv_actuators/packet.log +16 -0
  123. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_off.json +18 -0
  124. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_on.json +23 -0
  125. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_000/packet.log +54 -0
  126. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_off.json +24 -0
  127. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_on.json +25 -0
  128. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_001/packet.log +54 -0
  129. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_off.json +24 -0
  130. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_on.json +26 -0
  131. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_002/packet.log +54 -0
  132. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_off.json +23 -0
  133. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_on.json +25 -0
  134. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_003/packet.log +87 -0
  135. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_off.json +44 -0
  136. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_on.json +44 -0
  137. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_004/packet.log +112 -0
  138. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_off.json +39 -0
  139. ramses_rf-0.51.2/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_on.json +39 -0
  140. ramses_rf-0.51.2/tests/tests/fingerprints/10e0_xxxx.log +287 -0
  141. ramses_rf-0.51.2/tests/tests/fingerprints/_gather.sh +15 -0
  142. ramses_rf-0.51.2/tests/tests/fingerprints/heat/01_EvoTouch_Colour.log +13 -0
  143. ramses_rf-0.51.2/tests/tests/fingerprints/heat/01_Evo_Color.log +29 -0
  144. ramses_rf-0.51.2/tests/tests/fingerprints/heat/01_IONA_RAI_Prototype.log +2 -0
  145. ramses_rf-0.51.2/tests/tests/fingerprints/heat/02_HCE80_V3.10_061117..log +13 -0
  146. ramses_rf-0.51.2/tests/tests/fingerprints/heat/04_HR92 Radiator Ctrl_.log +67 -0
  147. ramses_rf-0.51.2/tests/tests/fingerprints/heat/08_Jasper_EIM.log +19 -0
  148. ramses_rf-0.51.2/tests/tests/fingerprints/heat/10_R8810A_Bridge.log +12 -0
  149. ramses_rf-0.51.2/tests/tests/fingerprints/heat/10_R8820.log +13 -0
  150. ramses_rf-0.51.2/tests/tests/fingerprints/heat/30_Internet_Gateway.log +11 -0
  151. ramses_rf-0.51.2/tests/tests/fingerprints/heat/31_Jasper_Stat_TXXX.log +18 -0
  152. ramses_rf-0.51.2/tests/tests/fingerprints/heat/34_T87RF2025.log +64 -0
  153. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/18_BRDG-02A55.log +4 -0
  154. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/18_HRA82.log +4 -0
  155. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/20.log +6 -0
  156. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/21_CCU-12T20.log +26 -0
  157. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMC-07RP01.log +2 -0
  158. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMC-15RP01.log +5 -0
  159. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMC-17RP01.log +12 -0
  160. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMN-07LM01.log +2 -0
  161. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMN-15LF01.log +5 -0
  162. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMN-17LMP01.log +2 -0
  163. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMS-15C16.log +6 -0
  164. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/29_VMS-17HB01.log +2 -0
  165. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/30_BRDG-02EM23.log +12 -0
  166. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/30_BRDG-02JAS01.log +17 -0
  167. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMC-15RPS34.log +3 -0
  168. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMD-15RMS64.log +2 -0
  169. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMD-15RMS86.log +7 -0
  170. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMD-17RPS01.log +3 -0
  171. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMN-23LM33.log +2 -0
  172. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMN-23LMH23.log +13 -0
  173. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMS-15CM17.log +3 -0
  174. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMS-23C33.log +2 -0
  175. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMS-23HB33.log +14 -0
  176. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/32_VMZ-15V13.log +4 -0
  177. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/37_VMD-07RPS13.log +3 -0
  178. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/37_VMI-15MC01log +10 -0
  179. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/37_VMI-15WSJ53.log +2 -0
  180. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/37_VMS-02J52.log +7 -0
  181. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/37_VMS-12C39.log +11 -0
  182. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/99_CVE-RF.log +29 -0
  183. ramses_rf-0.51.2/tests/tests/fingerprints/hvac/99_VMS-17C01.log +16 -0
  184. ramses_rf-0.51.2/tests/tests/helpers.py +146 -0
  185. ramses_rf-0.51.2/tests/tests/logger/packet_in.log +31 -0
  186. ramses_rf-0.51.2/tests/tests/logger/packet_out.log +24 -0
  187. ramses_rf-0.51.2/tests/tests/logs/pkts_bad_000.log +2 -0
  188. ramses_rf-0.51.2/tests/tests/logs/pkts_tba_000.log +102 -0
  189. ramses_rf-0.51.2/tests/tests/logs/system_cache.json +117 -0
  190. ramses_rf-0.51.2/tests/tests/parser_helpers/pkt_addr_set.log +62 -0
  191. ramses_rf-0.51.2/tests/tests/parser_helpers/pkt_dev_class.log +4 -0
  192. ramses_rf-0.51.2/tests/tests/parsers/code_0001_wip.log +43 -0
  193. ramses_rf-0.51.2/tests/tests/parsers/code_0002.log +8 -0
  194. ramses_rf-0.51.2/tests/tests/parsers/code_0004_wip.log +15 -0
  195. ramses_rf-0.51.2/tests/tests/parsers/code_0005.log +8 -0
  196. ramses_rf-0.51.2/tests/tests/parsers/code_0006.log +36 -0
  197. ramses_rf-0.51.2/tests/tests/parsers/code_0009.log +4 -0
  198. ramses_rf-0.51.2/tests/tests/parsers/code_000a.log +74 -0
  199. ramses_rf-0.51.2/tests/tests/parsers/code_000c.log +32 -0
  200. ramses_rf-0.51.2/tests/tests/parsers/code_000e.log +7 -0
  201. ramses_rf-0.51.2/tests/tests/parsers/code_01ff_wip.log +103 -0
  202. ramses_rf-0.51.2/tests/tests/parsers/code_0418.log +42 -0
  203. ramses_rf-0.51.2/tests/tests/parsers/code_042f.log +37 -0
  204. ramses_rf-0.51.2/tests/tests/parsers/code_1030.log +10 -0
  205. ramses_rf-0.51.2/tests/tests/parsers/code_1060.log +13 -0
  206. ramses_rf-0.51.2/tests/tests/parsers/code_10d0.log +45 -0
  207. ramses_rf-0.51.2/tests/tests/parsers/code_10e0.log +132 -0
  208. ramses_rf-0.51.2/tests/tests/parsers/code_1260.log +18 -0
  209. ramses_rf-0.51.2/tests/tests/parsers/code_1298.log +10 -0
  210. ramses_rf-0.51.2/tests/tests/parsers/code_12a0.log +27 -0
  211. ramses_rf-0.51.2/tests/tests/parsers/code_12c0.log +14 -0
  212. ramses_rf-0.51.2/tests/tests/parsers/code_1300.log +6 -0
  213. ramses_rf-0.51.2/tests/tests/parsers/code_1fc9.log +125 -0
  214. ramses_rf-0.51.2/tests/tests/parsers/code_2210.log +17 -0
  215. ramses_rf-0.51.2/tests/tests/parsers/code_22c9.log +62 -0
  216. ramses_rf-0.51.2/tests/tests/parsers/code_22d0.log +6 -0
  217. ramses_rf-0.51.2/tests/tests/parsers/code_22d9.log +15 -0
  218. ramses_rf-0.51.2/tests/tests/parsers/code_22e0.log +5 -0
  219. ramses_rf-0.51.2/tests/tests/parsers/code_22e5.log +5 -0
  220. ramses_rf-0.51.2/tests/tests/parsers/code_22e9.log +17 -0
  221. ramses_rf-0.51.2/tests/tests/parsers/code_22f1.log +45 -0
  222. ramses_rf-0.51.2/tests/tests/parsers/code_22f2.log +54 -0
  223. ramses_rf-0.51.2/tests/tests/parsers/code_22f3.log +17 -0
  224. ramses_rf-0.51.2/tests/tests/parsers/code_22f4.log +26 -0
  225. ramses_rf-0.51.2/tests/tests/parsers/code_22f7.log +14 -0
  226. ramses_rf-0.51.2/tests/tests/parsers/code_2309.log +25 -0
  227. ramses_rf-0.51.2/tests/tests/parsers/code_2349.log +18 -0
  228. ramses_rf-0.51.2/tests/tests/parsers/code_2411_wip.log +263 -0
  229. ramses_rf-0.51.2/tests/tests/parsers/code_2e04.log +19 -0
  230. ramses_rf-0.51.2/tests/tests/parsers/code_2e10_wip.log +14 -0
  231. ramses_rf-0.51.2/tests/tests/parsers/code_30c9.log +14 -0
  232. ramses_rf-0.51.2/tests/tests/parsers/code_3110_wip.log +60 -0
  233. ramses_rf-0.51.2/tests/tests/parsers/code_3120.log +16 -0
  234. ramses_rf-0.51.2/tests/tests/parsers/code_313e_wip.log +29 -0
  235. ramses_rf-0.51.2/tests/tests/parsers/code_3150.log +29 -0
  236. ramses_rf-0.51.2/tests/tests/parsers/code_31d9.log +60 -0
  237. ramses_rf-0.51.2/tests/tests/parsers/code_31da.log +370 -0
  238. ramses_rf-0.51.2/tests/tests/parsers/code_3200.log +9 -0
  239. ramses_rf-0.51.2/tests/tests/parsers/code_3210.log +6 -0
  240. ramses_rf-0.51.2/tests/tests/parsers/code_3220.log +195 -0
  241. ramses_rf-0.51.2/tests/tests/parsers/code_3222.log +39 -0
  242. ramses_rf-0.51.2/tests/tests/parsers/code_3ef0_wip.log +143 -0
  243. ramses_rf-0.51.2/tests/tests/parsers/code_3ef1_wip.log +17 -0
  244. ramses_rf-0.51.2/tests/tests/parsers/code_4e01.log +18 -0
  245. ramses_rf-0.51.2/tests/tests/parsers/code_4e02.log +23 -0
  246. ramses_rf-0.51.2/tests/tests/parsers/code_4e04.log +88 -0
  247. ramses_rf-0.51.2/tests/tests/parsers/code_4e15.log +133 -0
  248. ramses_rf-0.51.2/tests/tests/schedules/_sched_002/packet.log +47 -0
  249. ramses_rf-0.51.2/tests/tests/schedules/_sched_002/schedule.json +4 -0
  250. ramses_rf-0.51.2/tests/tests/schedules/sched_001/packet.log +10 -0
  251. ramses_rf-0.51.2/tests/tests/schedules/sched_001/schedule.json +47 -0
  252. ramses_rf-0.51.2/tests/tests/schedules/sched_dhw/packet.log +5 -0
  253. ramses_rf-0.51.2/tests/tests/schedules/sched_dhw/schedule.json +61 -0
  254. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_100.json +6 -0
  255. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_101.json +9 -0
  256. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_102.json +18 -0
  257. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_103.json +36 -0
  258. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_104.json +33 -0
  259. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_105.json +27 -0
  260. ramses_rf-0.51.2/tests/tests/schemas/jsn_files/schema_108.json +60 -0
  261. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_000.json +8 -0
  262. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_000.log +3 -0
  263. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_001.json +8 -0
  264. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_001.log +3 -0
  265. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_002.json +16 -0
  266. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_002.log +6 -0
  267. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_010.json +35 -0
  268. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_010.log +3 -0
  269. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_011.json +41 -0
  270. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_011.log +8 -0
  271. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_012.json +32 -0
  272. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_012.log +13 -0
  273. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_013.json +31 -0
  274. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_013.log +3 -0
  275. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_014.json +31 -0
  276. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_014.log +3 -0
  277. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_300.json +59 -0
  278. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_300.log +54 -0
  279. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_301.json +83 -0
  280. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_301.log +54 -0
  281. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_302.json +83 -0
  282. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_302.log +54 -0
  283. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_303.json +83 -0
  284. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_303.log +54 -0
  285. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_304.json +83 -0
  286. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_304.log +54 -0
  287. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_310.json +71 -0
  288. ramses_rf-0.51.2/tests/tests/schemas/log_files/schema_310.log +153 -0
  289. ramses_rf-0.51.2/tests/tests/systems/_heat_trv_00/config.json +19 -0
  290. ramses_rf-0.51.2/tests/tests/systems/_heat_trv_00/packet.log +880 -0
  291. ramses_rf-0.51.2/tests/tests/systems/_heat_trv_00/schema.json +77 -0
  292. ramses_rf-0.51.2/tests/tests/systems/_hvac_nuaire/config.json +10 -0
  293. ramses_rf-0.51.2/tests/tests/systems/_hvac_nuaire/known_list.json +8 -0
  294. ramses_rf-0.51.2/tests/tests/systems/_hvac_nuaire/packet.log +33 -0
  295. ramses_rf-0.51.2/tests/tests/systems/_hvac_nuaire/schema.json +9 -0
  296. ramses_rf-0.51.2/tests/tests/systems/_hvac_nuaire/status.json +27 -0
  297. ramses_rf-0.51.2/tests/tests/systems/heat_otb_00/config.json +19 -0
  298. ramses_rf-0.51.2/tests/tests/systems/heat_otb_00/packet.log +172 -0
  299. ramses_rf-0.51.2/tests/tests/systems/heat_otb_00/schema.json +12 -0
  300. ramses_rf-0.51.2/tests/tests/systems/heat_simple/packet.log +36 -0
  301. ramses_rf-0.51.2/tests/tests/systems/heat_simple/schema.json +14 -0
  302. ramses_rf-0.51.2/tests/tests/systems/heat_ufc_00/config.json +37 -0
  303. ramses_rf-0.51.2/tests/tests/systems/heat_ufc_00/packet.log +558 -0
  304. ramses_rf-0.51.2/tests/tests/systems/heat_ufc_01/packet.log +142 -0
  305. ramses_rf-0.51.2/tests/tests/systems/heat_zxdavb/config.json +29 -0
  306. ramses_rf-0.51.2/tests/tests/systems/heat_zxdavb/known_list.json +216 -0
  307. ramses_rf-0.51.2/tests/tests/systems/heat_zxdavb/packet.log +270 -0
  308. ramses_rf-0.51.2/tests/tests/systems/heat_zxdavb/schema.json +20 -0
  309. ramses_rf-0.51.2/tests/tests/test_api_faultlog.py +323 -0
  310. ramses_rf-0.51.2/tests/tests/test_api_schedule.py +83 -0
  311. ramses_rf-0.51.2/tests/tests/test_apis_binding.py +88 -0
  312. ramses_rf-0.51.2/tests/tests/test_apis_common.py +111 -0
  313. ramses_rf-0.51.2/tests/tests/test_apis_heat.py +369 -0
  314. ramses_rf-0.51.2/tests/tests/test_apis_hvac.py +110 -0
  315. ramses_rf-0.51.2/tests/tests/test_cli_utility.py +125 -0
  316. ramses_rf-0.51.2/tests/tests/test_devices.py +58 -0
  317. ramses_rf-0.51.2/tests/tests/test_eavesdrop_dev_class.py +82 -0
  318. ramses_rf-0.51.2/tests/tests/test_eavesdrop_schema.py +73 -0
  319. ramses_rf-0.51.2/tests/tests/test_helpers.py +129 -0
  320. ramses_rf-0.51.2/tests/tests/test_parser_helpers.py +175 -0
  321. ramses_rf-0.51.2/tests/tests/test_parsers.py +124 -0
  322. ramses_rf-0.51.2/tests/tests/test_ramses_schema.py +107 -0
  323. ramses_rf-0.51.2/tests/tests/test_schema_bits.py +96 -0
  324. ramses_rf-0.51.2/tests/tests/test_schemas.py +56 -0
  325. ramses_rf-0.51.2/tests/tests/test_systems.py +153 -0
  326. ramses_rf-0.51.2/tests/tests/test_vol_schemas.py +878 -0
  327. ramses_rf-0.51.2/tests/tests_rf/__init__.py +2 -0
  328. ramses_rf-0.51.2/tests/tests_rf/configs/config_heat.json +150 -0
  329. ramses_rf-0.51.2/tests/tests_rf/configs/config_hvac.json +28 -0
  330. ramses_rf-0.51.2/tests/tests_rf/conftest.py +331 -0
  331. ramses_rf-0.51.2/tests/tests_rf/logs/test_api_faultlog.log +108 -0
  332. ramses_rf-0.51.2/tests/tests_rf/test_api_faultlog.py +167 -0
  333. ramses_rf-0.51.2/tests/tests_rf/test_api_schedule.py +111 -0
  334. ramses_rf-0.51.2/tests/tests_rf/test_binding_fsm.py +436 -0
  335. ramses_rf-0.51.2/tests/tests_rf/test_create_stack.py +225 -0
  336. ramses_rf-0.51.2/tests/tests_rf/test_hgi_behaviors.py +176 -0
  337. ramses_rf-0.51.2/tests/tests_rf/test_protocol_fsm.py +403 -0
  338. ramses_rf-0.51.2/tests/tests_rf/test_use_regex.py +154 -0
  339. ramses_rf-0.51.2/tests/tests_rf/test_virt_network.py +223 -0
  340. ramses_rf-0.51.2/tests/tests_rf/virtual_rf/__init__.py +109 -0
  341. ramses_rf-0.51.2/tests/tests_rf/virtual_rf/const.py +91 -0
  342. ramses_rf-0.51.2/tests/tests_rf/virtual_rf/helpers.py +24 -0
  343. ramses_rf-0.51.2/tests/tests_rf/virtual_rf/virtual_rf.py +481 -0
  344. ramses_rf-0.51.2/tests/tests_tx/__init__.py +2 -0
  345. ramses_rf-0.51.2/tests/tests_tx/test_command.py +183 -0
  346. ramses_rf-0.51.2/tests/wip/_test_eavesdrop_dhw_sensor.py +2 -0
  347. ramses_rf-0.51.2/tests/wip/_test_eavesdrop_htg_control.py +2 -0
  348. ramses_rf-0.51.2/tests/wip/_test_eavesdrop_ufc_circuits.py +2 -0
  349. ramses_rf-0.51.2/tests/wip/_test_eavesdrop_zone_sensors.py +2 -0
  350. ramses_rf-0.51.2/tests/wip/_test_eavesdrop_zone_type.py +2 -0
  351. ramses_rf-0.51.2/tests/wip/test_wip_cli.sh +16 -0
  352. ramses-rf-0.22.40/PKG-INFO +0 -61
  353. ramses-rf-0.22.40/README.md +0 -39
  354. ramses-rf-0.22.40/pyproject.toml +0 -18
  355. ramses-rf-0.22.40/ramses_rf/__init__.py +0 -38
  356. ramses-rf-0.22.40/ramses_rf/const.py +0 -135
  357. ramses-rf-0.22.40/ramses_rf/device/base.py +0 -705
  358. ramses-rf-0.22.40/ramses_rf/device/hvac.py +0 -583
  359. ramses-rf-0.22.40/ramses_rf/discovery.py +0 -398
  360. ramses-rf-0.22.40/ramses_rf/dispatcher.py +0 -313
  361. ramses-rf-0.22.40/ramses_rf/gateway.py +0 -769
  362. ramses-rf-0.22.40/ramses_rf/protocol/__init__.py +0 -59
  363. ramses-rf-0.22.40/ramses_rf/protocol/backports.py +0 -42
  364. ramses-rf-0.22.40/ramses_rf/protocol/command.py +0 -1576
  365. ramses-rf-0.22.40/ramses_rf/protocol/const.py +0 -697
  366. ramses-rf-0.22.40/ramses_rf/protocol/exceptions.py +0 -111
  367. ramses-rf-0.22.40/ramses_rf/protocol/helpers.py +0 -390
  368. ramses-rf-0.22.40/ramses_rf/protocol/opentherm.py +0 -1170
  369. ramses-rf-0.22.40/ramses_rf/protocol/packet.py +0 -235
  370. ramses-rf-0.22.40/ramses_rf/protocol/protocol.py +0 -613
  371. ramses-rf-0.22.40/ramses_rf/protocol/transport.py +0 -1011
  372. ramses-rf-0.22.40/ramses_rf/protocol/version.py +0 -10
  373. ramses-rf-0.22.40/ramses_rf/system/hvac.py +0 -82
  374. ramses-rf-0.22.40/ramses_rf/system/schedule.py +0 -434
  375. ramses-rf-0.22.40/ramses_rf/version.py +0 -10
  376. ramses-rf-0.22.40/ramses_rf.egg-info/PKG-INFO +0 -61
  377. ramses-rf-0.22.40/ramses_rf.egg-info/SOURCES.txt +0 -46
  378. ramses-rf-0.22.40/ramses_rf.egg-info/dependency_links.txt +0 -1
  379. ramses-rf-0.22.40/ramses_rf.egg-info/requires.txt +0 -3
  380. ramses-rf-0.22.40/ramses_rf.egg-info/top_level.txt +0 -1
  381. ramses-rf-0.22.40/setup.cfg +0 -4
  382. ramses-rf-0.22.40/setup.py +0 -64
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a useful report to help us improve ramses_rf
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of the bug.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behaviour (for example):
15
+ 1. Go to '...'
16
+ 2. Click on '....'
17
+ 3. Scroll down to '....'
18
+ 4. See error
19
+
20
+ Please provide enough details. For example, if you are having an issue with a device, provide details of the model and specs
21
+
22
+ **Expected behaviour**
23
+ A clear and concise description of what you expected to happen.
24
+
25
+ **Please include the following information:**
26
+ - your **RF Gateway** hardware type, firmware and connection (USB, MQTT)
27
+ - output from the **Serial Console**, if applicable
28
+ - contemporaneous portion of the **packet.log**, preferably for several hours
29
+
30
+ **Screenshots**
31
+ Only if applicable, add screenshots to help explain your problem. Do not provide a screenshot as an alternative to providing the above information.
32
+
33
+ **Additional context**
34
+ Add any other context about the problem here, such as the make/model of the device etc.
@@ -0,0 +1,15 @@
1
+ # Please see the documentation for all configuration options:
2
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
3
+
4
+ version: 2
5
+
6
+ updates:
7
+ - package-ecosystem: "pip"
8
+ directory: "/"
9
+ schedule:
10
+ interval: "weekly"
11
+
12
+ - package-ecosystem: "github-actions"
13
+ directory: ".github/workflows"
14
+ schedule:
15
+ interval: "weekly"
@@ -0,0 +1,52 @@
1
+ name: Linting
2
+
3
+
4
+ on:
5
+ push:
6
+ branches: [ "master", "stable" ]
7
+ paths: [
8
+ ".github/workflows/check-lint.yml",
9
+ "src/**.py",
10
+ "tests/**",
11
+ ]
12
+
13
+ pull_request:
14
+ branches: [ "master", "stable" ]
15
+ paths: [
16
+ ".github/workflows/check-lint.yml",
17
+ "src/**.py",
18
+ "tests/**",
19
+ ]
20
+
21
+ workflow_dispatch:
22
+
23
+
24
+ jobs:
25
+ lint:
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ python-version: ["3.13"]
32
+
33
+ steps:
34
+ - uses: actions/checkout@v5
35
+
36
+ - name: Set up Python ${{ matrix.python-version }}
37
+ uses: actions/setup-python@v5
38
+ with:
39
+ python-version: ${{ matrix.python-version }}
40
+
41
+ - name: Install dependencies
42
+ run: |
43
+ python -m pip install --upgrade pip
44
+ pip install ruff # pip install -r requirements_dev.txt
45
+
46
+ - name: Check with ruff
47
+ run: ruff check --output-format=github .
48
+
49
+ - name: Check with ruff (format)
50
+ run: ruff format --check .
51
+
52
+ - run: echo "🍏 This job's status is ${{ job.status }}."
@@ -0,0 +1,54 @@
1
+ name: Testing
2
+
3
+
4
+ on:
5
+ push:
6
+ branches: [ "master", "stable" ]
7
+ paths: [
8
+ ".github/workflows/check-test.yml",
9
+ "src/**.py",
10
+ "tests/**",
11
+ ]
12
+
13
+ pull_request:
14
+ branches: [ "master", "stable" ]
15
+ paths: [
16
+ ".github/workflows/check-test.yml",
17
+ "src/**.py",
18
+ "tests/**",
19
+ ]
20
+
21
+ workflow_dispatch:
22
+
23
+
24
+ jobs:
25
+ test:
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ python-version: ["3.11", "3.12", "3.13"]
32
+
33
+ steps:
34
+ - uses: actions/checkout@v5
35
+
36
+ - name: Set up Python ${{ matrix.python-version }}
37
+ uses: actions/setup-python@v5
38
+ with:
39
+ python-version: ${{ matrix.python-version }}
40
+
41
+ - name: Install dependencies
42
+ run: |
43
+ python -m pip install --upgrade pip
44
+ pip install -r requirements_dev.txt
45
+
46
+ - name: Install the package (and its dependencies)
47
+ run: pip install -e .
48
+
49
+ - name: Test with pytest
50
+ env:
51
+ PYTEST_ADDOPTS: "--color=yes"
52
+ run: pytest -v
53
+
54
+ - run: echo "🍏 This job's status is ${{ job.status }}."
@@ -0,0 +1,52 @@
1
+ name: Typing
2
+
3
+
4
+ on:
5
+ push:
6
+ branches: [ "master", "stable" ]
7
+ paths: [
8
+ ".github/workflows/check-type.yml",
9
+ "src/**.py", "src/**/py.typed",
10
+ "tests/**.py",
11
+ ]
12
+
13
+ pull_request:
14
+ branches: [ "master", "stable" ]
15
+ paths: [
16
+ ".github/workflows/check-type.yml",
17
+ "src/**.py", "src/**/py.typed",
18
+ "tests/**.py",
19
+ ]
20
+
21
+ workflow_dispatch:
22
+
23
+
24
+ jobs:
25
+ type:
26
+ runs-on: ubuntu-latest
27
+
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ python-version: ["3.13"]
32
+
33
+ steps:
34
+ - uses: actions/checkout@v5
35
+
36
+ - name: Set up Python ${{ matrix.python-version }}
37
+ uses: actions/setup-python@v5
38
+ with:
39
+ python-version: ${{ matrix.python-version }}
40
+
41
+ - name: Install dependencies
42
+ run: |
43
+ python -m pip install --upgrade pip
44
+ pip install -r requirements_dev.txt
45
+
46
+ - name: Install the package (its dependencies are needed for typing)
47
+ run: pip install -e .
48
+
49
+ - name: Check with mypy
50
+ run: mypy
51
+
52
+ - run: echo "🍏 This job's status is ${{ job.status }}."
@@ -0,0 +1,51 @@
1
+ # This workflow will build a Python Package using Hatch and upload it to PyPi when a release is published
2
+ # No action on a release still in draft
3
+ # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries
4
+ # and: https://github.com/pypa/hatch/issues/669 and https://github.com/marketplace/actions/pypi-publish
5
+
6
+ name: Publish via Hatch
7
+
8
+ on:
9
+ release:
10
+ types: [published]
11
+
12
+ permissions:
13
+ contents: read
14
+
15
+ jobs:
16
+ build-dist:
17
+ name: Build release to /dist
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@v5
21
+
22
+ - name: Install hatch
23
+ run: pipx install hatch
24
+
25
+ - name: Build dist
26
+ run: hatch build
27
+
28
+ - name: Upload dist
29
+ uses: actions/upload-artifact@v4
30
+ with:
31
+ name: dist
32
+ path: dist/
33
+
34
+ pypi-publish:
35
+ name: Upload release to PyPI
36
+ runs-on: ubuntu-latest
37
+ needs: build-dist
38
+ environment:
39
+ name: pypi
40
+ url: https://pypi.org/project/ramses_rf
41
+ steps:
42
+ - name: Download dist
43
+ uses: actions/download-artifact@v5
44
+ with:
45
+ name: dist
46
+ path: dist/
47
+ - name: Publish package distributions to PyPI
48
+ uses: pypa/gh-action-pypi-publish@release/v1
49
+ with:
50
+ password: ${{ secrets.RF_PYPI_API_TOKEN }}
51
+ - run: echo "🍏 This job's status is ${{ job.status }}."
@@ -0,0 +1,185 @@
1
+ ### local .gitignore used by this repo
2
+ /*.json
3
+ /*.log
4
+ /*.log.*
5
+ /*.old
6
+ /*.out
7
+ /*.txt
8
+ /*.yaml
9
+
10
+
11
+ ### generic .gitignore used by https://github.com/ramses-rf
12
+
13
+ !.gitignore
14
+ !.pre-commit-config.yaml
15
+ !pyproject.toml
16
+ !requirements*.txt
17
+
18
+ # beware the *.log in github's default .gitignore
19
+ !tests/
20
+ !tests/**/*.ambr
21
+ !tests/**/*.json
22
+ !tests/**/*.log
23
+ !tests/**/*.yaml
24
+
25
+ .secrets*/
26
+ .ruff_cache/
27
+ .vscode/
28
+
29
+
30
+ ### github's default .gitignore for Python - copied 2023/11/02
31
+ # https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore
32
+
33
+ # Byte-compiled / optimized / DLL files
34
+ __pycache__/
35
+ *.py[cod]
36
+ *$py.class
37
+
38
+ # C extensions
39
+ *.so
40
+
41
+ # Distribution / packaging
42
+ .Python
43
+ build/
44
+ develop-eggs/
45
+ dist/
46
+ downloads/
47
+ eggs/
48
+ .eggs/
49
+ lib/
50
+ lib64/
51
+ parts/
52
+ sdist/
53
+ var/
54
+ wheels/
55
+ share/python-wheels/
56
+ *.egg-info/
57
+ .installed.cfg
58
+ *.egg
59
+ MANIFEST
60
+
61
+ # PyInstaller
62
+ # Usually these files are written by a python script from a template
63
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
64
+ *.manifest
65
+ *.spec
66
+
67
+ # Installer logs
68
+ pip-log.txt
69
+ pip-delete-this-directory.txt
70
+
71
+ # Unit test / coverage reports
72
+ htmlcov/
73
+ .tox/
74
+ .nox/
75
+ .coverage
76
+ .coverage.*
77
+ .cache
78
+ nosetests.xml
79
+ coverage.xml
80
+ *.cover
81
+ *.py,cover
82
+ .hypothesis/
83
+ .pytest_cache/
84
+ cover/
85
+
86
+ # Translations
87
+ *.mo
88
+ *.pot
89
+
90
+ # Django stuff:
91
+ # *.log
92
+ local_settings.py
93
+ db.sqlite3
94
+ db.sqlite3-journal
95
+
96
+ # Flask stuff:
97
+ instance/
98
+ .webassets-cache
99
+
100
+ # Scrapy stuff:
101
+ .scrapy
102
+
103
+ # Sphinx documentation
104
+ docs/_build/
105
+
106
+ # PyBuilder
107
+ .pybuilder/
108
+ target/
109
+
110
+ # Jupyter Notebook
111
+ .ipynb_checkpoints
112
+
113
+ # IPython
114
+ profile_default/
115
+ ipython_config.py
116
+
117
+ # pyenv
118
+ # For a library or package, you might want to ignore these files since the code is
119
+ # intended to run in multiple environments; otherwise, check them in:
120
+ # .python-version
121
+
122
+ # pipenv
123
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
124
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
125
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
126
+ # install all needed dependencies.
127
+ #Pipfile.lock
128
+
129
+ # poetry
130
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
131
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
132
+ # commonly ignored for libraries.
133
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
134
+ #poetry.lock
135
+
136
+ # pdm
137
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
138
+ #pdm.lock
139
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
140
+ # in version control.
141
+ # https://pdm.fming.dev/#use-with-ide
142
+ .pdm.toml
143
+
144
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
145
+ __pypackages__/
146
+
147
+ # Celery stuff
148
+ celerybeat-schedule
149
+ celerybeat.pid
150
+
151
+ # SageMath parsed files
152
+ *.sage.py
153
+
154
+ # Environments
155
+ .env
156
+ .venv
157
+ env/
158
+ venv/
159
+ ENV/
160
+ env.bak/
161
+ venv.bak/
162
+
163
+ # Spyder project settings
164
+ .spyderproject
165
+ .spyproject
166
+
167
+ # Rope project settings
168
+ .ropeproject
169
+
170
+ # mkdocs documentation
171
+ /site
172
+
173
+ # mypy
174
+ .mypy_cache/
175
+ .dmypy.json
176
+ dmypy.json
177
+
178
+ # Pyre type checker
179
+ .pyre/
180
+
181
+ # pytype static type analyzer
182
+ .pytype/
183
+
184
+ # Cython debug symbols
185
+ cython_debug/
@@ -0,0 +1,99 @@
1
+
2
+ exclude: ^(.secrets|docs|misc|tests/deprecated)/
3
+
4
+ repos:
5
+ - repo: https://github.com/astral-sh/ruff-pre-commit
6
+ rev: v0.8.1
7
+ hooks:
8
+ - id: ruff # linter
9
+ - id: ruff-format # formatter
10
+
11
+ - repo: https://github.com/cdce8p/python-typing-update
12
+ rev: v0.7.0
13
+ hooks:
14
+ # Run `python-typing-update` hook manually from time to time
15
+ # to update python typing syntax.
16
+ # Will require manual work, before submitting changes!
17
+ # pre-commit run --hook-stage manual python-typing-update --all-files
18
+ - id: python-typing-update
19
+ stages: [manual]
20
+ args:
21
+ - --py311-plus
22
+ - --force
23
+ - --keep-updates
24
+ files: ^(src|tests)/.+\.py$
25
+
26
+ - repo: https://github.com/codespell-project/codespell
27
+ rev: v2.3.0
28
+ hooks:
29
+ - id: codespell
30
+ args:
31
+ - --ignore-words-list=childs,IndexT,OT,ser
32
+ - --skip="./.*,*.csv,*.json,*.ambr"
33
+ - --quiet-level=2
34
+ exclude_types: [csv, json, html]
35
+ exclude: ^(tests/.+/fixtures|tests/.+/snapshots)/
36
+
37
+ - repo: https://github.com/pre-commit/pre-commit-hooks
38
+ rev: v5.0.0
39
+ hooks:
40
+ - id: check-executables-have-shebangs
41
+ # id: check-json # don't enable this one
42
+ - id: check-toml
43
+ - id: check-yaml
44
+ - id: debug-statements
45
+ - id: end-of-file-fixer
46
+ - id: mixed-line-ending
47
+ - id: trailing-whitespace
48
+
49
+ - repo: https://github.com/pre-commit/pygrep-hooks
50
+ rev: v1.10.0
51
+ hooks:
52
+ - id: python-check-blanket-noqa
53
+ - id: python-check-blanket-type-ignore
54
+ # id: python-no-eval
55
+ - id: python-no-log-warn
56
+
57
+ - repo: local
58
+ hooks:
59
+ # entry: '[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' # email address
60
+
61
+ - id: debugs
62
+ name: check for DEBUG flags
63
+ entry: '_DBG_.*=.*True'
64
+ language: pygrep
65
+ args: [-i]
66
+ exclude: (.pre-commit-config.yaml|^tests/.*\.py$) # avoid false +ve
67
+
68
+ - id: secrets
69
+ name: check for secrets
70
+ entry: '#.*(secret|password|pwd)'
71
+ language: pygrep
72
+ args: [-i]
73
+ exclude: .pre-commit-config.yaml # avoid false +ve
74
+
75
+ - id: style_1
76
+ name: check for 'as exc:' (should be 'as err:')
77
+ entry: ' as exc:'
78
+ language: pygrep
79
+ args: [-i]
80
+ exclude: .pre-commit-config.yaml # avoid false +ve
81
+
82
+ # - id: private imports
83
+ # name: check for private imports
84
+ # entry: 'from .* import _.*'
85
+ # language: pygrep
86
+ # args: [-i]
87
+ # exclude: .pre-commit-config.yaml # avoid false +ve
88
+
89
+
90
+ # We do not use pre-commit/mirrors-mypy, as it comes with opinionated defaults
91
+ # (like --ignore-missing-imports) and is difficult to configure to run
92
+ # with the dependencies correctly installed.
93
+
94
+ # - repo: https://github.com/pre-commit/mirrors-mypy
95
+ # rev: v1.8.0
96
+ # hooks:
97
+ # - id: mypy
98
+ # additional_dependencies: [voluptuous==0.14.1]
99
+ # args: ["--config-file", "./pyproject.toml"]
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 David Bonnes
3
+ Copyright (c) 2021-2025 David Bonnes
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,72 @@
1
+ Metadata-Version: 2.4
2
+ Name: ramses_rf
3
+ Version: 0.51.2
4
+ Summary: A stateful RAMSES-II protocol decoder & analyser.
5
+ Project-URL: Homepage, https://github.com/ramses-rf/ramses_rf
6
+ Project-URL: Bug Tracker, https://github.com/ramses-rf/ramses_rf/issues
7
+ Project-URL: Wiki, https://github.com/ramses-rf/ramses_rf/wiki
8
+ Author-email: David Bonnes <zxdavb@bonnes.me>, Egbert Broerse <dcc2@ebroerse.nl>
9
+ Maintainer-email: Egbert Broerse <dcc2@ebroerse.nl>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: airios,chronotherm,climarad,evohome,hometronics,honeywell,itho,nuaire,orcon,ramses,resideo,round thermostat,sundial,vasco
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Topic :: Home Automation
15
+ Requires-Python: >=3.11
16
+ Requires-Dist: colorlog>=6.9.0
17
+ Requires-Dist: paho-mqtt>=2.1.0
18
+ Requires-Dist: pyserial-asyncio-fast>=0.16
19
+ Requires-Dist: voluptuous>=0.15.2
20
+ Description-Content-Type: text/markdown
21
+
22
+ ![Linting](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-lint.yml/badge.svg)
23
+ ![Typing](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-type.yml/badge.svg)
24
+ ![Testing](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-test.yml/badge.svg)
25
+
26
+ ## Overview
27
+
28
+ **ramses_rf** is a Python client library/CLI utility used to interface with some Honeywell-compatible HVAC & CH/DHW systems that use 868MHz RF, such as:
29
+ - (Heat) **evohome**, **Sundial**, **Hometronic**, **Chronotherm**
30
+ - (HVAC) **Itho**, **Orcon**, **Nuaire**, **Vasco**, **ClimaRad**
31
+
32
+ It requires a USB-to-RF device, either a Honeywell HGI80 (somewhat rare, expensive) or something running the [evofw3](https://github.com/ghoti57/evofw3) firmware, such as the one from [here](https://indalo-tech.onlineweb.shop/) or your own ESP32-S3-WROOM-1 N16R8 with a CC1100 transponder.
33
+
34
+ It does four things:
35
+ - decodes RAMSES II-compatible packets and converts them into useful JSON
36
+ - builds a picture (schema, config & state) of evohome-compatible CH/DHW systems - either passively (by eavesdropping), or actively (probing)
37
+ - allows you to send commands to CH/DHW and HVAC systems, or monitor for state changes
38
+ - allows you to emulate some hardware devices
39
+
40
+ > [!WARNING]
41
+ > This library is not affiliated with Honeywell, Airios nor any final manufacturer. The developers take no responsibility for anything that may happen to your devices because of this library.
42
+
43
+ For CH/DHW, the simplest way to know if it will work with your system is to identify the box connected to your boiler/HVAC appliance as one of:
44
+ - **R8810A**: OpenTherm Bridge
45
+ - **BDR91A**: Wireless Relay (also BDR91T)
46
+ - **HC60NG**: Wireless Relay (older hardware)
47
+
48
+ Other systems may well work, such as some Itho Daalderop HVAC systems, use this protocol, YMMV.
49
+
50
+ It includes a CLI and can be used as a standalone tool, but also is used as a client library by:
51
+ - [ramses_cc](https://github.com/ramses-rf/ramses_cc), a Home Assistant integration
52
+ - [evohome-Listener](https://github.com/smar000/evohome-Listener), an MQTT gateway
53
+
54
+ ## Installation
55
+
56
+ To use the `ramses_cc` Integration in Home Assistant, just install `Ramses RF` from HACS. It will take care of installing this library. See the [`Ramses_cc wiki`](https://github.com/ramses-rf/ramses_cc/wiki/1.-Installation) for details.
57
+
58
+ ### Ramses_rf CLI
59
+
60
+ To install the `ramses_rf` command line client:
61
+ ```
62
+ git clone https://github.com/ramses-rf/ramses_rf
63
+ cd ramses_rf
64
+ pip install -r requirements.txt
65
+ pip install -e .
66
+ ```
67
+
68
+ The CLI is called ``client.py`` and is included in the code root.
69
+ It has options to monitor and parse Ramses-II traffic to screen or a log file, and to parse a file containing Ramses-II messages to the screen.
70
+ See the [client.py CLI wiki page](https://github.com/ramses-rf/ramses_rf/wiki/The-client.py-command-line) for instructions.
71
+
72
+ For code development, some more setup is required. Please follow the steps in our [Developer's Resource](README-developers.md)
@@ -0,0 +1,60 @@
1
+ ![Linting](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-lint.yml/badge.svg)
2
+ ![Typing](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-type.yml/badge.svg)
3
+ ![Testing](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-test.yml/badge.svg)
4
+
5
+ # Ramses_rf developer's resource
6
+
7
+ ## Installation
8
+
9
+ Confirm you have Python 3.13.x installed by running:
10
+ ```
11
+ python3 --version
12
+ ```
13
+
14
+ ### Virtual environment
15
+
16
+ Create a `venv` virtual environment, for example on macOS or Linux:
17
+ ```
18
+ mkdir /your-path-to/virtual-envs
19
+ mkdir /your-path-to/virtual-envs/ramses_rf
20
+ cd /your-path-to/virtual-envs/ramses_rf
21
+ Python3.13 -m venv ~/your-path-to/virtual-envs/ramses_rf
22
+ ```
23
+ where `Python3.13` is the python version to set for the `venv`.
24
+
25
+ ### Clone this repo
26
+
27
+ Clone this repo and install the requirements.
28
+ Using `pip`, in a location where your IDE has access:
29
+ ```
30
+ git clone https://github.com/ramses-rf/ramses_rf
31
+ ```
32
+
33
+ Activate the venv (repeat every new session):
34
+ ```
35
+ cd /your-path-to/ramses_rf
36
+ source /your-path-to/virtual-envs/ramses_rf/bin/activate
37
+ ```
38
+ and confirm your Terminal prompt looks like:
39
+ `(ramses_rf) user:ramses_rf`
40
+
41
+ ### Install dependencies:
42
+ ```
43
+ cd /your-path-to/ramses_rf
44
+ pip install -r requirements.txt
45
+ pip install -r requirements_dev.txt
46
+ ```
47
+
48
+ Repeat this after a release update and also when dev_requirements change in master.
49
+
50
+ ### Install pre-commit hook
51
+ Install the repo's pre-commit hook
52
+ ```
53
+ pre-commit install
54
+ ```
55
+
56
+ Running `pre-commit run` will only check staged files before a commit, while
57
+ `pre-commit run -a` will check all files.
58
+
59
+ ## More
60
+ For more hints, see the [How to submit a PR wiki page](https://github.com/ramses-rf/ramses_rf/wiki/How-to-submit-a-PR)