ramses-rf 0.52.3__tar.gz → 0.52.4__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.
- ramses_rf-0.52.4/.github/workflows/check-cov.yml +131 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/workflows/check-lint.yml +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/workflows/check-test.yml +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/workflows/check-type.yml +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/workflows/publish-hatch.yml +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/PKG-INFO +2 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/README.md +1 -0
- ramses_rf-0.52.3/docs/source/binding_process_diagram.md → ramses_rf-0.52.4/docs/source/binding_process.md +3 -3
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/index.rst +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/pyproject.toml +38 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/database.py +7 -3
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/device/heat.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/entity_base.py +67 -26
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/gateway.py +9 -9
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/system/heat.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/version.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/const.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/parsers.py +57 -12
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/protocol.py +2 -2
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/ramses.py +9 -5
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/transport.py +1 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/version.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/requirements/requirements.txt +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/requirements/requirements_dev.txt +6 -6
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/requirements/requirements_docs.txt +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/helpers.py +4 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_01ff_wip.log +2 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22d0.log +2 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_4e04.log +1 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/device/test_hvac_ventilator.py +54 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_binding_fsm.py +1 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_database.py +4 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_dispatcher.py +2 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_entity_base.py +6 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_virt_network.py +7 -2
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/virtual_rf/__init__.py +3 -1
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.github/dependabot.yml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.gitignore +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/.pre-commit-config.yaml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/LICENSE +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/README-developers.md +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/client.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/Makefile +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/make.bat +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/_static/ramses_rf_logo.png +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/conf.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/glossary.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/modules.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/ramses_cli.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/ramses_rf.device.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/ramses_rf.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/ramses_rf.system.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/ramses_tx.rst +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/docs/source/usage.md +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/misc/2411_parser.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/misc/fingerprints.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/misc/ser2net.yaml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/misc/ti_3410/notes.sh +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/misc/ti_3410/ti_3410.fw +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/client.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/debug.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/discovery.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/utils/cat_slow.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_cli/utils/convert.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/binding_fsm.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/const.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/device/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/device/base.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/device/hvac.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/dispatcher.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/exceptions.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/helpers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/py.typed +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/schemas.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/system/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/system/faultlog.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/system/schedule.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_rf/system/zones.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/address.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/command.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/exceptions.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/fingerprints.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/frame.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/gateway.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/helpers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/logger.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/message.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/opentherm.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/packet.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/protocol_fsm.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/py.typed +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/schemas.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/typed_dicts.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/ramses_tx/typing.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_apis_mock.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_mock_faultlog.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_mock_schedule.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_packets_bad.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_performance_WIP.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/_test_state_mgt.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/common.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/command.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/const.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/device_heat.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/device_hvac.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/deprecated/mocked_devices/transport.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/ctl_bdr_91t.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/dts_ctl_sensor.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/hcw_ctl_sensor.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/rnd_ctl_sensor.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/rnd_ctl_sensor.yaml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/heat/trv_ctl.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/co2_fan_itho.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/co2_fan_itho.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/co2_fan_itho.yaml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/dis_fan_orcon.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/dis_fan_orcon.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_climarad.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_nuaire.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_nuaire.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_nuaire.yaml +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_vasco.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/bindings/hvac/rem_fan_ventura.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/devices/device_02.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/devices/device_04.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/devices/device_10.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/devices/device_13.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/devices/device_22.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_dev_class/hvac/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_long/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_ufh_circuits/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/app_cntrl/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/trv_actuators/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_000/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_001/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_002/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_003/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_004/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/10e0_xxxx.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/_gather.sh +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/01_EvoTouch_Colour.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/01_Evo_Color.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/01_IONA_RAI_Prototype.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/02_HCE80_V3.10_061117..log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/04_HR92 Radiator Ctrl_.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/08_Jasper_EIM.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/10_R8810A_Bridge.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/10_R8820.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/30_Internet_Gateway.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/31_Jasper_Stat_TXXX.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/heat/34_T87RF2025.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/18_BRDG-02A55.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/18_HRA82.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/20.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/21_CCU-12T20.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMC-07RP01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMC-15RP01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMC-17RP01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMN-07LM01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMN-15LF01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMN-17LMP01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMS-15C16.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/29_VMS-17HB01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/30_BRDG-02EM23.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/30_BRDG-02JAS01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMC-15RPS34.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMD-15RMS64.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMD-15RMS86.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMD-17RPS01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMN-23LM33.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMN-23LMH23.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMS-15CM17.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMS-23C33.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMS-23HB33.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/32_VMZ-15V13.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/37_VMD-07RPS13.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/37_VMI-15MC01log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/37_VMI-15WSJ53.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/37_VMS-02J52.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/37_VMS-12C39.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/99_CVE-RF.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/fingerprints/hvac/99_VMS-17C01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/logger/packet_in.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/logger/packet_out.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/logs/pkts_bad_000.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/logs/pkts_tba_000.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/logs/system_cache.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parser_helpers/pkt_addr_set.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parser_helpers/pkt_dev_class.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0001_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0002.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0004_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0005.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0006.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0008.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0009.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_000a.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_000c.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_000e.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_0418.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_042f.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1030.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1060.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_10d0.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_10e0.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1260.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1298.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_12a0.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_12c0.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1300.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1f09.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1fc9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_1fd4.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2210.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22c9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22d9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22e0.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22e5.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22e9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22f1.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22f2.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22f3.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22f4.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_22f7.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2309.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2349.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2411_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2e04.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_2e10_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_30c9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3110_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3120.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_313e_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3150.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_31d9.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_31da.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3200.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3210.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3220.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3222.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3ef0_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_3ef1_wip.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_4e01.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_4e02.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/parsers/code_4e15.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/_sched_002/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/_sched_002/schedule.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/sched_001/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/sched_001/schedule.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/sched_dhw/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schedules/sched_dhw/schedule.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_100.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_101.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_102.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_103.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_104.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_105.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/jsn_files/schema_108.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_000.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_000.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_001.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_001.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_002.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_002.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_010.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_010.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_011.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_011.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_012.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_012.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_013.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_013.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_014.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_014.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_300.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_300.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_301.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_301.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_302.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_302.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_303.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_303.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_304.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_304.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_310.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/schemas/log_files/schema_310.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_heat_trv_00/config.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_heat_trv_00/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_heat_trv_00/schema.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_hvac_nuaire/config.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_hvac_nuaire/known_list.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_hvac_nuaire/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_hvac_nuaire/schema.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/_hvac_nuaire/status.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_otb_00/config.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_otb_00/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_otb_00/schema.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_simple/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_simple/schema.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_ufc_00/config.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_ufc_00/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_ufc_01/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_zxdavb/config.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_zxdavb/known_list.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_zxdavb/packet.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/systems/heat_zxdavb/schema.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_api_faultlog.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_api_schedule.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_apis_binding.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_apis_common.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_apis_heat.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_apis_hvac.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_cli_utility.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_devices.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_eavesdrop_dev_class.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_eavesdrop_schema.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_helpers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_parser_helpers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_parsers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_ramses_schema.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_schema_bits.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_schemas.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_systems.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests/test_vol_schemas.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/configs/config_heat.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/configs/config_hvac.json +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/conftest.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/device/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/logs/test_api_faultlog.log +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_api_faultlog.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_api_schedule.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_create_stack.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_hgi_behaviors.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_protocol_fsm.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/test_use_regex.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/virtual_rf/const.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/virtual_rf/helpers.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_rf/virtual_rf/virtual_rf.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_tx/__init__.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/tests_tx/test_command.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/_test_eavesdrop_dhw_sensor.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/_test_eavesdrop_htg_control.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/_test_eavesdrop_ufc_circuits.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/_test_eavesdrop_zone_sensors.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/_test_eavesdrop_zone_type.py +0 -0
- {ramses_rf-0.52.3 → ramses_rf-0.52.4}/tests/wip/test_wip_cli.sh +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
name: Coverage
|
|
2
|
+
# based on: https://github.com/marketplace/actions/code-coverage-summary
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [ "master" ]
|
|
7
|
+
paths: [
|
|
8
|
+
".github/workflows/check-cov.yml",
|
|
9
|
+
"pyproject.toml",
|
|
10
|
+
"requirements/**",
|
|
11
|
+
"src/**.py",
|
|
12
|
+
"tests/**",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
pull_request:
|
|
16
|
+
branches: [ "master" ]
|
|
17
|
+
paths: [
|
|
18
|
+
".github/workflows/check-cov.yml",
|
|
19
|
+
"pyproject.toml",
|
|
20
|
+
"requirements/**",
|
|
21
|
+
"src/**.py",
|
|
22
|
+
"tests/**",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
pull_request_target:
|
|
26
|
+
branches: [ "master" ]
|
|
27
|
+
paths: [
|
|
28
|
+
".github/workflows/check-cov.yml",
|
|
29
|
+
"pyproject.toml",
|
|
30
|
+
"requirements/**",
|
|
31
|
+
"src/**.py",
|
|
32
|
+
"tests/**",
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
schedule:
|
|
36
|
+
- cron: "0 7 * * 5"
|
|
37
|
+
|
|
38
|
+
workflow_dispatch:
|
|
39
|
+
|
|
40
|
+
permissions:
|
|
41
|
+
pull-requests: write
|
|
42
|
+
|
|
43
|
+
jobs:
|
|
44
|
+
coverage:
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
|
|
47
|
+
strategy:
|
|
48
|
+
fail-fast: false
|
|
49
|
+
matrix:
|
|
50
|
+
python-version: ["3.14"]
|
|
51
|
+
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v6
|
|
54
|
+
|
|
55
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
56
|
+
uses: actions/setup-python@v6
|
|
57
|
+
with:
|
|
58
|
+
python-version: ${{ matrix.python-version }}
|
|
59
|
+
|
|
60
|
+
- name: Install dependencies
|
|
61
|
+
run: |
|
|
62
|
+
python -m pip install --upgrade pip
|
|
63
|
+
pip install -r requirements/requirements_dev.txt
|
|
64
|
+
|
|
65
|
+
- name: Install the package (and its dependencies)
|
|
66
|
+
run: pip install -e .
|
|
67
|
+
|
|
68
|
+
- name: Run coverage with pytest
|
|
69
|
+
run: coverage run -m pytest
|
|
70
|
+
|
|
71
|
+
- name: Debug - Check if .coverage exists
|
|
72
|
+
run: test -f .coverage && echo ".coverage exists" || echo ".coverage does NOT exist"
|
|
73
|
+
|
|
74
|
+
- name: Display coverage report
|
|
75
|
+
run: coverage report
|
|
76
|
+
|
|
77
|
+
- name: Create coverage xml
|
|
78
|
+
run: coverage xml
|
|
79
|
+
|
|
80
|
+
- name: Create Code Coverage Report
|
|
81
|
+
# from: https://github.com/marketplace/actions/code-coverage-summary
|
|
82
|
+
uses: irongut/CodeCoverageSummary@v1.3.0
|
|
83
|
+
with:
|
|
84
|
+
filename: coverage.xml
|
|
85
|
+
badge: true
|
|
86
|
+
fail_below_min: true
|
|
87
|
+
format: markdown
|
|
88
|
+
hide_branch_rate: false
|
|
89
|
+
hide_complexity: true
|
|
90
|
+
indicators: true
|
|
91
|
+
output: both
|
|
92
|
+
thresholds: '60 80'
|
|
93
|
+
|
|
94
|
+
- name: Add Coverage PR Comment
|
|
95
|
+
# from: https://github.com/marketplace/actions/comment-pull-request
|
|
96
|
+
if: github.event_name == 'pull_request_target'
|
|
97
|
+
uses: thollander/actions-comment-pull-request@v3
|
|
98
|
+
with:
|
|
99
|
+
file-path: code-coverage-results.md
|
|
100
|
+
comment-tag: code-coverage-results.md # replaces existing by this name
|
|
101
|
+
mode: recreate
|
|
102
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
103
|
+
# or: https://github.com/marketplace/actions/sticky-pull-request-comment
|
|
104
|
+
# if: github.event_name == 'pull_request'
|
|
105
|
+
# with:
|
|
106
|
+
# recreate: true
|
|
107
|
+
# path: code-coverage-results.md
|
|
108
|
+
# GITHUB_TOKEN is implicitly passed in
|
|
109
|
+
|
|
110
|
+
# - name: Create Coverage Badge
|
|
111
|
+
# # from: https://github.com/marketplace/actions/coverage-py-badge
|
|
112
|
+
# uses: tj-actions/coverage-badge-py@v2
|
|
113
|
+
# id: coverage-badge-py
|
|
114
|
+
# with:
|
|
115
|
+
# # Output path to write the
|
|
116
|
+
# # coverage badge.
|
|
117
|
+
# # Type: string
|
|
118
|
+
# # Default: "coverage.svg"
|
|
119
|
+
# output: 'misc/coverage-badge.svg'
|
|
120
|
+
#
|
|
121
|
+
# # Overwrite an existing coverage badge.
|
|
122
|
+
# # Type: boolean
|
|
123
|
+
# # Default: "true"
|
|
124
|
+
# overwrite: ''
|
|
125
|
+
#
|
|
126
|
+
# # Current working directory
|
|
127
|
+
# # Type: string
|
|
128
|
+
# # Default: "."
|
|
129
|
+
# working-directory: ''
|
|
130
|
+
|
|
131
|
+
- run: echo "🍏 This job's status is ${{ job.status }}."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ramses_rf
|
|
3
|
-
Version: 0.52.
|
|
3
|
+
Version: 0.52.4
|
|
4
4
|
Summary: A stateful RAMSES-II protocol decoder & analyser.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ramses-rf/ramses_rf
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/ramses-rf/ramses_rf/issues
|
|
@@ -22,6 +22,7 @@ Description-Content-Type: text/markdown
|
|
|
22
22
|

|
|
23
23
|

|
|
24
24
|

|
|
25
|
+
[](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-cov.yml)
|
|
25
26
|
|
|
26
27
|
## Overview
|
|
27
28
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|

|
|
2
2
|

|
|
3
3
|

|
|
4
|
+
[](https://github.com/ramses-rf/ramses_rf/actions/workflows/check-cov.yml)
|
|
4
5
|
|
|
5
6
|
## Overview
|
|
6
7
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# RAMSES RF Binding Process
|
|
1
|
+
# RAMSES RF Binding Process
|
|
2
2
|
|
|
3
3
|
## Overview
|
|
4
4
|
This diagram shows the binding finite state machine (FSM) for RAMSES RF devices, illustrating the complete process from initial state to binding completion.
|
|
@@ -38,8 +38,8 @@ stateDiagram-v2
|
|
|
38
38
|
RespHasBoundAsRespondent
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
classDef supplicant fill:#
|
|
42
|
-
classDef respondent fill:#
|
|
41
|
+
classDef supplicant fill:#ff64dd,stroke:#ffffff,stroke-width:2px
|
|
42
|
+
classDef respondent fill:#55bb8B,stroke:#ffffff,stroke-width:2px
|
|
43
43
|
|
|
44
44
|
class SuppSendOfferWaitForAccept,OfferSent,SuppIsReadyToSendConfirm,SuppHasBoundAsSupplicant supplicant
|
|
45
45
|
class RespIsWaitingForOffer,OfferReceived,RespSendAcceptWaitForConfirm,RespHasBoundAsRespondent respondent
|
|
@@ -81,8 +81,46 @@
|
|
|
81
81
|
asyncio_default_fixture_loop_scope = "function"
|
|
82
82
|
asyncio_mode = "auto"
|
|
83
83
|
|
|
84
|
+
testpaths = [
|
|
85
|
+
"tests/"
|
|
86
|
+
]
|
|
84
87
|
norecursedirs = "deprecated/*"
|
|
85
88
|
|
|
89
|
+
# pytest-cov slows down our tests to 10 mins, so leave off.
|
|
90
|
+
# We run coverage in a separate workflow on python 3.13 only (fastest)
|
|
91
|
+
# pytest-cov coverage reporting. open htmlcov/index.html in a browser for details
|
|
92
|
+
# addopts = ["--cov=src", "--cov-fail-under=50", "--cov-report=xml", "--cov-report=term"]
|
|
93
|
+
# to create an interactive local HTML report, add: --cov-report=html
|
|
94
|
+
# to report missed lines during test writing, add: --cov-report=term-missing
|
|
95
|
+
# PyCharm might not hit a breakpoint. For debugging, disable -cov by adding:
|
|
96
|
+
# –no-cov"
|
|
97
|
+
# cov_report_term = "term-missing:skip-covered"
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
### coverage #########################################################################
|
|
101
|
+
|
|
102
|
+
[tool.coverage.run]
|
|
103
|
+
core = "sysmon" # essential setting for speed on GitHub < 11 secs instead of >12 mins
|
|
104
|
+
branch = false # true takes a lot longer and can't be combined with sysmon
|
|
105
|
+
# patch = ["subprocess"]
|
|
106
|
+
source = [
|
|
107
|
+
"src",
|
|
108
|
+
"tests"
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
[tool.coverage.report]
|
|
112
|
+
# Regexes for lines to exclude from consideration
|
|
113
|
+
exclude_also = [
|
|
114
|
+
# Don't complain if tests don't hit defensive assertion code:
|
|
115
|
+
"raise AssertionError",
|
|
116
|
+
"raise NotImplementedError",
|
|
117
|
+
]
|
|
118
|
+
format = "text"
|
|
119
|
+
fail_under = 75
|
|
120
|
+
ignore_errors = true
|
|
121
|
+
|
|
122
|
+
[tool.coverage.html]
|
|
123
|
+
directory = "coverage_html"
|
|
86
124
|
|
|
87
125
|
#
|
|
88
126
|
### mypy #############################################################################
|
|
@@ -130,11 +130,15 @@ class MessageIndex:
|
|
|
130
130
|
def stop(self) -> None:
|
|
131
131
|
"""Stop the housekeeper loop."""
|
|
132
132
|
|
|
133
|
-
if
|
|
133
|
+
if (
|
|
134
|
+
self.maintain
|
|
135
|
+
and self._housekeeping_task
|
|
136
|
+
and (not self._housekeeping_task.done())
|
|
137
|
+
):
|
|
134
138
|
self._housekeeping_task.cancel() # stop the housekeeper
|
|
135
139
|
|
|
136
140
|
self._cx.commit() # just in case
|
|
137
|
-
|
|
141
|
+
self._cx.close() # may still need to do queries after engine has stopped?
|
|
138
142
|
|
|
139
143
|
@property
|
|
140
144
|
def msgs(self) -> MsgDdT:
|
|
@@ -193,7 +197,7 @@ class MessageIndex:
|
|
|
193
197
|
"""
|
|
194
198
|
dtm = dt_now - _cutoff # .isoformat(timespec="microseconds") < needed?
|
|
195
199
|
|
|
196
|
-
self._cu.execute("SELECT dtm FROM messages WHERE dtm
|
|
200
|
+
self._cu.execute("SELECT dtm FROM messages WHERE dtm >= ?", (dtm,))
|
|
197
201
|
rows = self._cu.fetchall() # fetch dtm of current messages to retain
|
|
198
202
|
|
|
199
203
|
try: # make this operation atomic, i.e. update self._msgs only on success
|
|
@@ -450,7 +450,7 @@ class UfhController(Parent, DeviceHeat): # UFC (02):
|
|
|
450
450
|
# )
|
|
451
451
|
# self._send_cmd(cmd)
|
|
452
452
|
|
|
453
|
-
elif msg.code == Code._0008: # relay_demand
|
|
453
|
+
elif msg.code == Code._0008: # relay_demand
|
|
454
454
|
if msg.payload.get(SZ_DOMAIN_ID) == FC:
|
|
455
455
|
self._relay_demand = msg
|
|
456
456
|
else: # FA
|
|
@@ -224,7 +224,10 @@ class _MessageDB(_Entity):
|
|
|
224
224
|
|
|
225
225
|
# As of 0.52.1 we use SQLite MessageIndex, see ramses_rf/database.py
|
|
226
226
|
# _msgz_ (nested) was only used in this module. Note:
|
|
227
|
-
# _msgz (now rebuilt from _msgs) also used in:
|
|
227
|
+
# _msgz (now rebuilt from _msgs) is also used in:
|
|
228
|
+
# - client.py: for code in device._msgz.values()
|
|
229
|
+
# - base.py: Code._1060 in self._msgz
|
|
230
|
+
# [x] device.heat (no longer used)
|
|
228
231
|
|
|
229
232
|
def _handle_msg(self, msg: Message) -> None:
|
|
230
233
|
"""Store a msg in the DBs.
|
|
@@ -244,14 +247,14 @@ class _MessageDB(_Entity):
|
|
|
244
247
|
|
|
245
248
|
if self._gwy.msg_db: # central SQLite MessageIndex
|
|
246
249
|
_LOGGER.debug(
|
|
247
|
-
"For %s (
|
|
250
|
+
"For %s (_z_id %s) add msg %s, src %s, dst %s to msg_db.",
|
|
248
251
|
self.id,
|
|
249
252
|
self._z_id,
|
|
250
253
|
msg,
|
|
251
254
|
msg.src,
|
|
252
255
|
msg.dst,
|
|
253
256
|
)
|
|
254
|
-
debug_code: Code = Code._3150
|
|
257
|
+
debug_code: Code = Code._3150 # for debugging only log these, pick your own
|
|
255
258
|
if msg.code == debug_code and msg.src.id.startswith("01:"):
|
|
256
259
|
_LOGGER.debug(
|
|
257
260
|
"Added msg from %s with code %s to _gwy.msg_db. hdr=%s",
|
|
@@ -293,6 +296,7 @@ class _MessageDB(_Entity):
|
|
|
293
296
|
def _msg_list(self) -> list[Message]:
|
|
294
297
|
"""Return a flattened list of all messages logged on this device."""
|
|
295
298
|
# (only) used in gateway.py#get_state() and in tests/tests/test_eavesdrop_schema.py
|
|
299
|
+
# TODO remove _msg_list Q1 2026
|
|
296
300
|
if self._gwy.msg_db:
|
|
297
301
|
msg_list_qry: list[Message] = []
|
|
298
302
|
code_list = self._msg_dev_qry()
|
|
@@ -303,16 +307,21 @@ class _MessageDB(_Entity):
|
|
|
303
307
|
msg_list_qry.append(self._msgs[c])
|
|
304
308
|
else:
|
|
305
309
|
# evohome has these errors
|
|
306
|
-
# _msg_list could not fetch self._msgs[7FFF] for 18:072981 (
|
|
310
|
+
# _msg_list could not fetch self._msgs[7FFF] for 18:072981 (_z_id 18:072981)
|
|
307
311
|
_LOGGER.debug(
|
|
308
|
-
"_msg_list could not fetch self._msgs[%s] for %s (
|
|
312
|
+
"_msg_list could not fetch self._msgs[%s] for %s (_z_id %s)",
|
|
309
313
|
c,
|
|
310
314
|
self.id,
|
|
311
315
|
self._z_id,
|
|
312
316
|
)
|
|
313
317
|
return msg_list_qry
|
|
314
318
|
# else create from legacy nested dict
|
|
315
|
-
return [
|
|
319
|
+
return [
|
|
320
|
+
msg
|
|
321
|
+
for code in self._msgz.values()
|
|
322
|
+
for ctx in code.values()
|
|
323
|
+
for msg in ctx.values()
|
|
324
|
+
]
|
|
316
325
|
|
|
317
326
|
def _add_record(
|
|
318
327
|
self, address: Address, code: Code | None = None, verb: str = " I"
|
|
@@ -424,7 +433,7 @@ class _MessageDB(_Entity):
|
|
|
424
433
|
**kwargs: Any,
|
|
425
434
|
) -> dict | list | None:
|
|
426
435
|
"""
|
|
427
|
-
Query the message dict or the SQLite
|
|
436
|
+
Query the _msgz message dict or the SQLite MessageIndex for the most recent
|
|
428
437
|
key: value pairs(s) for a given code.
|
|
429
438
|
|
|
430
439
|
:param code: filter messages by Code or a tuple of Codes, optional
|
|
@@ -517,7 +526,7 @@ class _MessageDB(_Entity):
|
|
|
517
526
|
or (idx == SZ_DOMAIN_ID)
|
|
518
527
|
), (
|
|
519
528
|
f"full dict:{msg_dict}, payload:{msg.payload} < Coding error: key='{idx}', val='{val}'"
|
|
520
|
-
) # should not be there
|
|
529
|
+
) # should not be there
|
|
521
530
|
|
|
522
531
|
if (
|
|
523
532
|
key == "*" or not key
|
|
@@ -535,21 +544,35 @@ class _MessageDB(_Entity):
|
|
|
535
544
|
"""
|
|
536
545
|
Retrieve from the MessageIndex a list of Code keys involving this device.
|
|
537
546
|
|
|
538
|
-
:return: list of Codes or empty list when query returned empty
|
|
547
|
+
:return: list of Codes or an empty list when the query returned empty
|
|
539
548
|
"""
|
|
540
549
|
|
|
541
550
|
if self._gwy.msg_db:
|
|
542
551
|
# SQLite query on MessageIndex
|
|
543
552
|
res: list[Code] = []
|
|
544
|
-
|
|
553
|
+
|
|
554
|
+
if len(self.id) == 9:
|
|
555
|
+
# fetch a ctl's message codes (add all its children?)
|
|
556
|
+
sql = """
|
|
557
|
+
SELECT code from messages WHERE
|
|
558
|
+
verb in (' I', 'RP')
|
|
559
|
+
AND (src = ? OR dst = ?)
|
|
560
|
+
AND ctx LIKE ?
|
|
561
|
+
"""
|
|
562
|
+
_ctx_qry = "%"
|
|
563
|
+
|
|
564
|
+
elif self.id[_ID_SLICE:] == "_HW":
|
|
565
|
+
# fetch a DHW entity's message codes
|
|
545
566
|
sql = """
|
|
546
567
|
SELECT code from messages WHERE
|
|
547
568
|
verb in (' I', 'RP')
|
|
548
569
|
AND (src = ? OR dst = ?)
|
|
549
570
|
AND (ctx IN ('FC', 'FA', 'F9', 'FA') OR plk LIKE ?)
|
|
550
571
|
"""
|
|
551
|
-
_ctx_qry = "%dhw_idx%"
|
|
572
|
+
_ctx_qry = "%dhw_idx%"
|
|
573
|
+
|
|
552
574
|
else:
|
|
575
|
+
# fetch a zone's message codes
|
|
553
576
|
sql = """
|
|
554
577
|
SELECT code from messages WHERE
|
|
555
578
|
verb in (' I', 'RP')
|
|
@@ -562,12 +585,12 @@ class _MessageDB(_Entity):
|
|
|
562
585
|
sql, (self.id[:_ID_SLICE], self.id[:_ID_SLICE], _ctx_qry)
|
|
563
586
|
):
|
|
564
587
|
_LOGGER.debug(
|
|
565
|
-
"Fetched from index: %s for %s (
|
|
588
|
+
"Fetched from index: %s for %s (_z_id %s)",
|
|
566
589
|
rec[0],
|
|
567
590
|
self.id,
|
|
568
591
|
self._z_id,
|
|
569
592
|
)
|
|
570
|
-
# Example: "Fetched from index: code 1FD4 for 01:123456 (
|
|
593
|
+
# Example: "Fetched from index: code 1FD4 for 01:123456 (_z_id 01)"
|
|
571
594
|
res.append(Code(str(rec[0])))
|
|
572
595
|
return res
|
|
573
596
|
else:
|
|
@@ -743,7 +766,18 @@ class _MessageDB(_Entity):
|
|
|
743
766
|
# for r in results:
|
|
744
767
|
# print(r)
|
|
745
768
|
|
|
746
|
-
if self.id
|
|
769
|
+
if len(self.id) == 9:
|
|
770
|
+
# fetch a ctl's message dtms (add all its children?)
|
|
771
|
+
sql = """
|
|
772
|
+
SELECT dtm from messages WHERE
|
|
773
|
+
verb in (' I', 'RP')
|
|
774
|
+
AND (src = ? OR dst = ?)
|
|
775
|
+
AND ctx LIKE ?
|
|
776
|
+
"""
|
|
777
|
+
_ctx_qry = "%"
|
|
778
|
+
|
|
779
|
+
elif self.id[_ID_SLICE:] == "_HW":
|
|
780
|
+
# fetch a DHW entity's message dtms
|
|
747
781
|
sql = """
|
|
748
782
|
SELECT dtm from messages WHERE
|
|
749
783
|
verb in (' I', 'RP')
|
|
@@ -753,6 +787,7 @@ class _MessageDB(_Entity):
|
|
|
753
787
|
_ctx_qry = "%dhw_idx%"
|
|
754
788
|
# TODO add Children messages? self.ctl.dhw
|
|
755
789
|
else:
|
|
790
|
+
# fetch a zone's message dtms
|
|
756
791
|
sql = """
|
|
757
792
|
SELECT dtm from messages WHERE
|
|
758
793
|
verb in (' I', 'RP')
|
|
@@ -769,14 +804,14 @@ class _MessageDB(_Entity):
|
|
|
769
804
|
}
|
|
770
805
|
# if CTL, remove 3150, 3220 heat_demand, both are only stored on children
|
|
771
806
|
# HACK
|
|
772
|
-
if self.id[:3] == "01:" and self._SLUG == "CTL":
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
807
|
+
# if self.id[:3] == "01:" and self._SLUG == "CTL":
|
|
808
|
+
# with next ON: 2 errors , both 1x UFC, 1x CTR
|
|
809
|
+
# with next OFF: 4 errors, all CTR
|
|
810
|
+
# if Code._3150 in _msg_dict: # Note: CTL can send a 3150 (see heat_ufc_00)
|
|
811
|
+
# _msg_dict.pop(Code._3150) # keep, prefer to have 2 extra instead of missing 1
|
|
812
|
+
# if Code._3220 in _msg_dict:
|
|
813
|
+
# _msg_dict.pop(Code._3220)
|
|
814
|
+
# _LOGGER.debug(f"Removed 3150/3220 from %s._msgs dict", self.id)
|
|
780
815
|
return _msg_dict
|
|
781
816
|
|
|
782
817
|
@property
|
|
@@ -862,7 +897,6 @@ class _Discovery(_MessageDB):
|
|
|
862
897
|
# return f"{data_id:02X}" # type: ignore[return-value]
|
|
863
898
|
|
|
864
899
|
res: list[str] = []
|
|
865
|
-
# look for the "sim" OT 3220 record initially added in OtbGateway.init
|
|
866
900
|
if self._gwy.msg_db:
|
|
867
901
|
# SQLite query for ctx field on MessageIndex
|
|
868
902
|
sql = """
|
|
@@ -995,18 +1029,24 @@ class _Discovery(_MessageDB):
|
|
|
995
1029
|
sql = """
|
|
996
1030
|
SELECT dtm from messages WHERE
|
|
997
1031
|
code = ?
|
|
998
|
-
verb = ' I'
|
|
1032
|
+
AND verb = ' I'
|
|
999
1033
|
AND ctx = 'True'
|
|
1000
1034
|
AND (src = ? OR dst = ?)
|
|
1001
1035
|
"""
|
|
1002
|
-
|
|
1036
|
+
res = self._gwy.msg_db.qry(
|
|
1003
1037
|
sql,
|
|
1004
1038
|
(
|
|
1005
1039
|
task[_SZ_COMMAND].code,
|
|
1006
1040
|
self.tcs.id[:_ID_SLICE],
|
|
1007
1041
|
self.tcs.id[:_ID_SLICE],
|
|
1008
1042
|
),
|
|
1009
|
-
)
|
|
1043
|
+
)
|
|
1044
|
+
if len(res) > 0:
|
|
1045
|
+
msgs += res[0] # expect 1 Message in returned tuple
|
|
1046
|
+
else:
|
|
1047
|
+
_LOGGER.debug(
|
|
1048
|
+
f"No msg found for hdr {hdr}, tesk code {task[_SZ_COMMAND].code}"
|
|
1049
|
+
)
|
|
1010
1050
|
else: # TODO(eb) remove next Q1 2026
|
|
1011
1051
|
msgs += [self.tcs._msgz[task[_SZ_COMMAND].code][I_][True]]
|
|
1012
1052
|
# raise NotImplementedError
|
|
@@ -1145,6 +1185,7 @@ class Parent(Entity): # A System, Zone, DhwZone or a UfhController
|
|
|
1145
1185
|
(incl. the DHW Zone), and also any UFH controllers.
|
|
1146
1186
|
|
|
1147
1187
|
For a heating Zone, children are limited to a sensor, and a number of actuators.
|
|
1188
|
+
|
|
1148
1189
|
For the DHW Zone, the children are limited to a sensor, a DHW valve, and/or a
|
|
1149
1190
|
heating valve.
|
|
1150
1191
|
|
|
@@ -258,14 +258,6 @@ class Gateway(Engine):
|
|
|
258
258
|
# return True
|
|
259
259
|
return include_expired or not msg._expired
|
|
260
260
|
|
|
261
|
-
msgs = [m for device in self.devices for m in device._msg_list]
|
|
262
|
-
|
|
263
|
-
for system in self.systems:
|
|
264
|
-
msgs.extend(list(system._msgs.values()))
|
|
265
|
-
msgs.extend([m for z in system.zones for m in z._msgs.values()])
|
|
266
|
-
# msgs.extend([m for z in system.dhw for m in z._msgs.values()]) # TODO: DHW
|
|
267
|
-
# Related to/Fixes ramses_cc Issue 249 non-existing via-device _HW ?
|
|
268
|
-
|
|
269
261
|
if self.msg_db:
|
|
270
262
|
pkts = {
|
|
271
263
|
f"{repr(msg._pkt)[:26]}": f"{repr(msg._pkt)[27:]}"
|
|
@@ -273,12 +265,20 @@ class Gateway(Engine):
|
|
|
273
265
|
if wanted_msg(msg, include_expired=include_expired)
|
|
274
266
|
}
|
|
275
267
|
else: # deprecated, to be removed in Q1 2026
|
|
276
|
-
|
|
268
|
+
msgs = [m for device in self.devices for m in device._msg_list]
|
|
269
|
+
# add systems._msgs and zones._msgs
|
|
270
|
+
for system in self.systems:
|
|
271
|
+
msgs.extend(list(system._msgs.values()))
|
|
272
|
+
msgs.extend([m for z in system.zones for m in z._msgs.values()])
|
|
273
|
+
# msgs.extend([m for z in system.dhw for m in z._msgs.values()]) # TODO: DHW
|
|
274
|
+
# Related to/Fixes ramses_cc Issue 249 non-existing via-device _HW ?
|
|
275
|
+
|
|
277
276
|
pkts = { # BUG: assumes pkts have unique dtms: may be untrue for contrived logs
|
|
278
277
|
f"{repr(msg._pkt)[:26]}": f"{repr(msg._pkt)[27:]}"
|
|
279
278
|
for msg in msgs
|
|
280
279
|
if wanted_msg(msg, include_expired=include_expired)
|
|
281
280
|
}
|
|
281
|
+
# _LOGGER.warning("Missing MessageIndex")
|
|
282
282
|
|
|
283
283
|
self._resume()
|
|
284
284
|
|
|
@@ -532,7 +532,7 @@ class MultiZone(SystemBase): # 0005 (+/- 000C?)
|
|
|
532
532
|
schema = shrink(SCH_TCS_ZONES_ZON(schema))
|
|
533
533
|
|
|
534
534
|
zon: Zone = self.zone_by_idx.get(zone_idx) # type: ignore[assignment]
|
|
535
|
-
if zon is None:
|
|
535
|
+
if zon is None: # not found in tcs, create it
|
|
536
536
|
zon = zone_factory(self, zone_idx, msg=msg, **schema) # type: ignore[unreachable]
|
|
537
537
|
self.zone_by_idx[zon.idx] = zon
|
|
538
538
|
self.zones.append(zon)
|
|
@@ -440,7 +440,7 @@ DEV_TYPE_MAP = attr_dict_factory(
|
|
|
440
440
|
), # CH/DHW devices instead of HVAC/other
|
|
441
441
|
"HEAT_ZONE_SENSORS": ("00", "01", "03", "04", "12", "22", "34"),
|
|
442
442
|
"HEAT_ZONE_ACTUATORS": ("00", "02", "04", "13"),
|
|
443
|
-
"THM_DEVICES": ("03", "12", "22", "34"),
|
|
443
|
+
"THM_DEVICES": ("03", "12", "21", "22", "34"),
|
|
444
444
|
"TRV_DEVICES": ("00", "04"),
|
|
445
445
|
"CONTROLLERS": ("01", "02", "12", "22", "23", "34"), # potentially controllers
|
|
446
446
|
"PROMOTABLE_SLUGS": (DevType.DEV, DevType.HEA, DevType.HVC),
|