ramses-rf 0.51.3__tar.gz → 0.51.5__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.51.3 → ramses_rf-0.51.5}/PKG-INFO +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/const.py +2 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/device/hvac.py +14 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/dispatcher.py +6 -6
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/entity_base.py +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/system/heat.py +3 -3
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/system/zones.py +3 -3
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/version.py +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/const.py +2 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/helpers.py +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/parsers.py +28 -14
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/ramses.py +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/transport.py +87 -20
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/version.py +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_ventura.log +19 -4
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/10e0_xxxx.log +2 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/34_T87RF2025.log +2 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMC-15RP01.log +4 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMD-15RMS86.log +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMN-23LMH23.log +1 -1
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_042f.log +3 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_10e0.log +9 -5
- ramses_rf-0.51.5/tests/tests/parsers/code_1f09.log +4 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1fc9.log +2 -0
- ramses_rf-0.51.5/tests/tests/parsers/code_2210.log +26 -0
- ramses_rf-0.51.3/tests/tests/parsers/code_2210.log +0 -17
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/dependabot.yml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/workflows/check-lint.yml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/workflows/check-test.yml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/workflows/check-type.yml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.github/workflows/publish-hatch.yml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.gitignore +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/.pre-commit-config.yaml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/LICENSE +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/README-developers.md +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/README.md +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/client.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/misc/fingerprints.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/misc/ser2net.yaml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/misc/ti_3410/notes.sh +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/misc/ti_3410/ti_3410.fw +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/pyproject.toml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/client.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/debug.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/discovery.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/utils/cat_slow.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_cli/utils/convert.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/binding_fsm.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/database.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/device/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/device/base.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/device/heat.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/exceptions.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/gateway.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/helpers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/py.typed +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/schemas.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/system/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/system/faultlog.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_rf/system/schedule.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/address.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/command.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/exceptions.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/fingerprints.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/frame.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/gateway.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/logger.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/message.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/opentherm.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/packet.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/protocol.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/protocol_fsm.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/py.typed +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/schemas.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/typed_dicts.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/ramses_tx/typing.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/requirements.txt +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/requirements_dev.txt +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_apis_mock.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_mock_faultlog.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_mock_schedule.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_packets_bad.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_performance_WIP.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/_test_state_mgt.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/common.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/command.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/const.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/device_heat.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/device_hvac.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/deprecated/mocked_devices/transport.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/ctl_bdr_91t.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/dts_ctl_sensor.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/hcw_ctl_sensor.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/rnd_ctl_sensor.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/rnd_ctl_sensor.yaml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/heat/trv_ctl.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/co2_fan_itho.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/co2_fan_itho.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/co2_fan_itho.yaml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/dis_fan_orcon.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/dis_fan_orcon.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_climarad.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_nuaire.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_nuaire.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_nuaire.yaml +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/bindings/hvac/rem_fan_vasco.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/devices/device_02.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/devices/device_04.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/devices/device_10.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/devices/device_13.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/devices/device_22.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_dev_class/hvac/known_list_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_dev_class/hvac/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_long/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_long/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_trv_actuator_mixed/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_ufh_circuits/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/_ufh_circuits/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/app_cntrl/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/app_cntrl/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/trv_actuators/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/trv_actuators/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_000/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_000/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_001/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_001/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_002/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_002/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_003/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_003/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_004/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_off.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/eavesdrop_schema/zone_sensors_004/schema_eavesdrop_on.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/_gather.sh +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/01_EvoTouch_Colour.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/01_Evo_Color.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/01_IONA_RAI_Prototype.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/02_HCE80_V3.10_061117..log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/04_HR92 Radiator Ctrl_.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/08_Jasper_EIM.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/10_R8810A_Bridge.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/10_R8820.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/30_Internet_Gateway.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/heat/31_Jasper_Stat_TXXX.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/18_BRDG-02A55.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/18_HRA82.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/20.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/21_CCU-12T20.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMC-07RP01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMC-17RP01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMN-07LM01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMN-15LF01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMN-17LMP01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMS-15C16.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/29_VMS-17HB01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/30_BRDG-02EM23.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/30_BRDG-02JAS01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMC-15RPS34.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMD-15RMS64.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMD-17RPS01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMN-23LM33.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMS-15CM17.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMS-23C33.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMS-23HB33.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/32_VMZ-15V13.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/37_VMD-07RPS13.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/37_VMI-15MC01log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/37_VMI-15WSJ53.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/37_VMS-02J52.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/37_VMS-12C39.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/99_CVE-RF.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/fingerprints/hvac/99_VMS-17C01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/helpers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/logger/packet_in.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/logger/packet_out.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/logs/pkts_bad_000.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/logs/pkts_tba_000.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/logs/system_cache.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parser_helpers/pkt_addr_set.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parser_helpers/pkt_dev_class.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0001_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0002.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0004_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0005.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0006.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0009.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_000a.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_000c.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_000e.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_01ff_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_0418.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1030.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1060.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_10d0.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1260.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1298.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_12a0.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_12c0.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_1300.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22c9.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22d0.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22d9.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22e0.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22e5.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22e9.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22f1.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22f2.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22f3.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22f4.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_22f7.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_2309.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_2349.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_2411_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_2e04.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_2e10_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_30c9.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3110_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3120.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_313e_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3150.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_31d9.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_31da.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3200.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3210.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3220.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3222.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3ef0_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_3ef1_wip.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_4e01.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_4e02.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_4e04.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/parsers/code_4e15.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/_sched_002/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/_sched_002/schedule.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/sched_001/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/sched_001/schedule.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/sched_dhw/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schedules/sched_dhw/schedule.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_100.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_101.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_102.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_103.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_104.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_105.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/jsn_files/schema_108.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_000.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_000.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_001.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_001.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_002.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_002.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_010.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_010.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_011.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_011.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_012.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_012.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_013.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_013.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_014.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_014.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_300.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_300.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_301.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_301.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_302.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_302.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_303.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_303.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_304.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_304.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_310.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/schemas/log_files/schema_310.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_heat_trv_00/config.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_heat_trv_00/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_heat_trv_00/schema.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_hvac_nuaire/config.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_hvac_nuaire/known_list.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_hvac_nuaire/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_hvac_nuaire/schema.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/_hvac_nuaire/status.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_otb_00/config.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_otb_00/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_otb_00/schema.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_simple/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_simple/schema.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_ufc_00/config.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_ufc_00/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_ufc_01/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_zxdavb/config.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_zxdavb/known_list.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_zxdavb/packet.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/systems/heat_zxdavb/schema.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_api_faultlog.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_api_schedule.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_apis_binding.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_apis_common.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_apis_heat.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_apis_hvac.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_cli_utility.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_devices.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_eavesdrop_dev_class.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_eavesdrop_schema.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_helpers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_parser_helpers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_parsers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_ramses_schema.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_schema_bits.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_schemas.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_systems.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests/test_vol_schemas.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/configs/config_heat.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/configs/config_hvac.json +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/conftest.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/logs/test_api_faultlog.log +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_api_faultlog.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_api_schedule.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_binding_fsm.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_create_stack.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_hgi_behaviors.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_protocol_fsm.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_use_regex.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/test_virt_network.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/virtual_rf/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/virtual_rf/const.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/virtual_rf/helpers.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_rf/virtual_rf/virtual_rf.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_tx/__init__.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/tests_tx/test_command.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/_test_eavesdrop_dhw_sensor.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/_test_eavesdrop_htg_control.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/_test_eavesdrop_ufc_circuits.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/_test_eavesdrop_zone_sensors.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/_test_eavesdrop_zone_type.py +0 -0
- {ramses_rf-0.51.3 → ramses_rf-0.51.5}/tests/wip/test_wip_cli.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ramses_rf
|
|
3
|
-
Version: 0.51.
|
|
3
|
+
Version: 0.51.5
|
|
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
|
|
@@ -61,6 +61,8 @@ from ramses_tx.const import ( # noqa: F401
|
|
|
61
61
|
SZ_REMAINING_DAYS as SZ_REMAINING_DAYS,
|
|
62
62
|
SZ_REMAINING_MINS as SZ_REMAINING_MINS,
|
|
63
63
|
SZ_REMAINING_PERCENT as SZ_REMAINING_PERCENT,
|
|
64
|
+
SZ_REQ_REASON as SZ_REQ_REASON,
|
|
65
|
+
SZ_REQ_SPEED as SZ_REQ_SPEED,
|
|
64
66
|
SZ_SCHEDULE as SZ_SCHEDULE,
|
|
65
67
|
SZ_SENSOR as SZ_SENSOR,
|
|
66
68
|
SZ_SETPOINT as SZ_SETPOINT,
|
|
@@ -31,6 +31,8 @@ from ramses_rf.const import (
|
|
|
31
31
|
SZ_REMAINING_DAYS,
|
|
32
32
|
SZ_REMAINING_MINS,
|
|
33
33
|
SZ_REMAINING_PERCENT,
|
|
34
|
+
SZ_REQ_REASON,
|
|
35
|
+
SZ_REQ_SPEED,
|
|
34
36
|
SZ_SPEED_CAPABILITIES,
|
|
35
37
|
SZ_SUPPLY_FAN_SPEED,
|
|
36
38
|
SZ_SUPPLY_FLOW,
|
|
@@ -506,6 +508,18 @@ class HvacVentilator(FilterChange): # FAN: RP/31DA, I/31D[9A]
|
|
|
506
508
|
def remaining_mins(self) -> int | None:
|
|
507
509
|
return self._msg_value(Code._31DA, key=SZ_REMAINING_MINS)
|
|
508
510
|
|
|
511
|
+
@property
|
|
512
|
+
def request_fan_speed(self) -> float | None:
|
|
513
|
+
return self._msg_value(Code._2210, key=SZ_REQ_SPEED)
|
|
514
|
+
|
|
515
|
+
@property
|
|
516
|
+
def request_src(self) -> str | None:
|
|
517
|
+
"""
|
|
518
|
+
Orcon, others?
|
|
519
|
+
:return: source sensor of auto speed request: IDL, CO2 or HUM
|
|
520
|
+
"""
|
|
521
|
+
return self._msg_value(Code._2210, key=SZ_REQ_REASON)
|
|
522
|
+
|
|
509
523
|
@property
|
|
510
524
|
def speed_cap(self) -> int | None:
|
|
511
525
|
return self._msg_value(Code._31DA, key=SZ_SPEED_CAPABILITIES)
|
|
@@ -91,7 +91,7 @@ def _create_devices_from_addrs(gwy: Gateway, this: Message) -> None:
|
|
|
91
91
|
if not gwy.config.enable_eavesdrop:
|
|
92
92
|
return
|
|
93
93
|
|
|
94
|
-
if not isinstance(this.dst, Device) and this.src
|
|
94
|
+
if not isinstance(this.dst, Device) and this.src != gwy.hgi: # type: ignore[unreachable]
|
|
95
95
|
with contextlib.suppress(LookupError):
|
|
96
96
|
this.dst = gwy.get_device(this.dst.id) # type: ignore[assignment]
|
|
97
97
|
|
|
@@ -188,9 +188,9 @@ def process_msg(gwy: Gateway, msg: Message) -> None:
|
|
|
188
188
|
def logger_xxxx(msg: Message) -> None:
|
|
189
189
|
if _DBG_FORCE_LOG_MESSAGES:
|
|
190
190
|
_LOGGER.warning(msg)
|
|
191
|
-
elif msg.src
|
|
191
|
+
elif msg.src != gwy.hgi or (msg.code != Code._PUZZ and msg.verb != RQ):
|
|
192
192
|
_LOGGER.info(msg)
|
|
193
|
-
elif msg.src
|
|
193
|
+
elif msg.src != gwy.hgi or msg.verb != RQ:
|
|
194
194
|
_LOGGER.info(msg)
|
|
195
195
|
elif _LOGGER.getEffectiveLevel() == logging.DEBUG:
|
|
196
196
|
_LOGGER.info(msg)
|
|
@@ -215,7 +215,7 @@ def process_msg(gwy: Gateway, msg: Message) -> None:
|
|
|
215
215
|
if (
|
|
216
216
|
msg.src._SLUG != DevType.HGI # avoid: msg.src.id != gwy.hgi.id
|
|
217
217
|
and msg.verb != I_
|
|
218
|
-
and msg.dst
|
|
218
|
+
and msg.dst != msg.src
|
|
219
219
|
):
|
|
220
220
|
# HGI80 can do what it likes
|
|
221
221
|
# receiving an I isn't currently in the schema & so can't yet be tested
|
|
@@ -234,10 +234,10 @@ def process_msg(gwy: Gateway, msg: Message) -> None:
|
|
|
234
234
|
# TODO: only be for fully-faked (not Fakable) dst (it picks up via RF if not)
|
|
235
235
|
|
|
236
236
|
if msg.code == Code._1FC9 and msg.payload[SZ_PHASE] == SZ_OFFER:
|
|
237
|
-
devices = [d for d in gwy.devices if d
|
|
237
|
+
devices = [d for d in gwy.devices if d != msg.src and d._is_binding]
|
|
238
238
|
|
|
239
239
|
elif msg.dst == ALL_DEV_ADDR: # some offers use dst=63:, so after 1FC9 offer
|
|
240
|
-
devices = [d for d in gwy.devices if d
|
|
240
|
+
devices = [d for d in gwy.devices if d != msg.src and d.is_faked]
|
|
241
241
|
|
|
242
242
|
elif msg.dst is not msg.src and isinstance(msg.dst, Fakeable): # type: ignore[unreachable]
|
|
243
243
|
# to eavesdrop pkts from other devices, but relevant to this device
|
|
@@ -387,7 +387,7 @@ class _MessageDB(_Entity):
|
|
|
387
387
|
codes = {
|
|
388
388
|
k: (CODES_SCHEMA[k][SZ_NAME] if k in CODES_SCHEMA else None)
|
|
389
389
|
for k in sorted(self._msgs)
|
|
390
|
-
if self._msgs[k].src
|
|
390
|
+
if self._msgs[k].src == (self if hasattr(self, "addr") else self.ctl)
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
return {"_sent": list(codes.keys())}
|
|
@@ -193,19 +193,19 @@ class SystemBase(Parent, Entity): # 3B00 (multi-relay)
|
|
|
193
193
|
this.code in (Code._22D9, Code._3220) and this.verb == RQ
|
|
194
194
|
): # TODO: RPs too?
|
|
195
195
|
# dst could be an Address...
|
|
196
|
-
if this.src
|
|
196
|
+
if this.src == self.ctl and isinstance(this.dst, OtbGateway): # type: ignore[unreachable]
|
|
197
197
|
app_cntrl = this.dst # type: ignore[unreachable]
|
|
198
198
|
|
|
199
199
|
elif this.code == Code._3EF0 and this.verb == RQ:
|
|
200
200
|
# dst could be an Address...
|
|
201
|
-
if this.src
|
|
201
|
+
if this.src == self.ctl and isinstance(
|
|
202
202
|
this.dst, # type: ignore[unreachable]
|
|
203
203
|
BdrSwitch | OtbGateway,
|
|
204
204
|
):
|
|
205
205
|
app_cntrl = this.dst # type: ignore[unreachable]
|
|
206
206
|
|
|
207
207
|
elif this.code == Code._3B00 and this.verb == I_ and prev is not None:
|
|
208
|
-
if this.src
|
|
208
|
+
if this.src == self.ctl and isinstance(prev.src, BdrSwitch): # type: ignore[unreachable]
|
|
209
209
|
if prev.code == this.code and prev.verb == this.verb: # type: ignore[unreachable]
|
|
210
210
|
app_cntrl = prev.src
|
|
211
211
|
|
|
@@ -266,7 +266,7 @@ class DhwZone(ZoneSchedule): # CS92A
|
|
|
266
266
|
# self._get_dhw(sensor=this.dst)
|
|
267
267
|
|
|
268
268
|
assert (
|
|
269
|
-
msg.src
|
|
269
|
+
msg.src == self.ctl
|
|
270
270
|
and msg.code in (Code._0005, Code._000C, Code._10A0, Code._1260, Code._1F41)
|
|
271
271
|
or msg.payload.get(SZ_DOMAIN_ID) in (F9, FA)
|
|
272
272
|
or msg.payload.get(SZ_ZONE_IDX) == "HW"
|
|
@@ -633,13 +633,13 @@ class Zone(ZoneSchedule):
|
|
|
633
633
|
self._update_schema(**{SZ_CLASS: ZON_ROLE_MAP[ZoneRole.UFH]})
|
|
634
634
|
|
|
635
635
|
assert (
|
|
636
|
-
msg.src
|
|
636
|
+
msg.src == self.ctl or msg.src.type == DEV_TYPE_MAP.UFC
|
|
637
637
|
) and ( # DEX
|
|
638
638
|
isinstance(msg.payload, dict)
|
|
639
639
|
or [d for d in msg.payload if d.get(SZ_ZONE_IDX) == self.idx]
|
|
640
640
|
), f"msg inappropriately routed to {self}"
|
|
641
641
|
|
|
642
|
-
assert (msg.src
|
|
642
|
+
assert (msg.src == self.ctl or msg.src.type == DEV_TYPE_MAP.UFC) and ( # DEX
|
|
643
643
|
isinstance(msg.payload, list)
|
|
644
644
|
or msg.code == Code._0005
|
|
645
645
|
or msg.payload.get(SZ_ZONE_IDX) == self.idx
|
|
@@ -88,6 +88,8 @@ SZ_REL_HUMIDITY: Final = "rel_humidity"
|
|
|
88
88
|
SZ_REMAINING_DAYS: Final = "days_remaining"
|
|
89
89
|
SZ_REMAINING_MINS: Final = "remaining_mins"
|
|
90
90
|
SZ_REMAINING_PERCENT: Final = "percent_remaining"
|
|
91
|
+
SZ_REQ_REASON: Final = "req_reason"
|
|
92
|
+
SZ_REQ_SPEED: Final = "req_speed"
|
|
91
93
|
SZ_SUPPLY_FAN_SPEED: Final = "supply_fan_speed"
|
|
92
94
|
SZ_SUPPLY_FLOW: Final = "supply_flow"
|
|
93
95
|
SZ_SUPPLY_TEMP: Final = "supply_temp"
|
|
@@ -757,7 +757,7 @@ def parse_fan_info(value: HexStr2) -> PayDictT.FAN_INFO:
|
|
|
757
757
|
}
|
|
758
758
|
|
|
759
759
|
|
|
760
|
-
# 31DA[38:40]
|
|
760
|
+
# 31DA[38:40], also 2210
|
|
761
761
|
def parse_exhaust_fan_speed(value: HexStr2) -> PayDictT.EXHAUST_FAN_SPEED:
|
|
762
762
|
"""Return the exhaust fan speed (% of max speed)."""
|
|
763
763
|
return _parse_fan_speed(SZ_EXHAUST_FAN_SPEED, value) # type: ignore[return-value]
|
|
@@ -72,6 +72,7 @@ from .const import (
|
|
|
72
72
|
SZ_RELAY_DEMAND,
|
|
73
73
|
SZ_REMAINING_DAYS,
|
|
74
74
|
SZ_REMAINING_PERCENT,
|
|
75
|
+
SZ_REQ_REASON,
|
|
75
76
|
SZ_SETPOINT,
|
|
76
77
|
SZ_SETPOINT_BOUNDS,
|
|
77
78
|
SZ_SYSTEM_MODE,
|
|
@@ -1378,29 +1379,42 @@ def parser_1fd4(payload: str, msg: Message) -> PayDictT._1FD4:
|
|
|
1378
1379
|
return {"ticker": int(payload[2:], 16)}
|
|
1379
1380
|
|
|
1380
1381
|
|
|
1381
|
-
# WIP:
|
|
1382
|
+
# WIP: HVAC auto requests (confirmed for Orcon, others?)
|
|
1382
1383
|
def parser_2210(payload: str, msg: Message) -> dict[str, Any]:
|
|
1383
1384
|
try:
|
|
1384
1385
|
assert msg.verb in (RP, I_) or payload == "00"
|
|
1385
|
-
assert payload[10:12] == payload[38:40]
|
|
1386
|
-
"
|
|
1387
|
-
|
|
1388
|
-
"FF",
|
|
1389
|
-
), f"expected (58|96|FF), not {payload[10:12]}"
|
|
1386
|
+
assert payload[10:12] == payload[38:40], (
|
|
1387
|
+
f"expected byte 19 {payload[10:12]}, not {payload[38:40]}"
|
|
1388
|
+
) # auto requested fan speed %. Identical [38:40] is for supply?
|
|
1390
1389
|
assert payload[20:22] == payload[48:50] and payload[20:22] in (
|
|
1391
|
-
"00",
|
|
1392
|
-
"
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
assert payload[80
|
|
1396
|
-
|
|
1390
|
+
"00", # idle
|
|
1391
|
+
"02", # requested by CO2 level/sensor
|
|
1392
|
+
"03", # requested by humidity level/sensor
|
|
1393
|
+
), f"expected req_reason (00|02|03), not {payload[20:22]}"
|
|
1394
|
+
assert payload[78:80] in ("00", "02"), (
|
|
1395
|
+
f"expected byte 39 (00|02), not {payload[78:80]}"
|
|
1396
|
+
)
|
|
1397
|
+
assert payload[80:82] in ("01", "08"), (
|
|
1398
|
+
f"expected byte 40 (01|08), not {payload[80:82]}"
|
|
1399
|
+
)
|
|
1400
|
+
assert payload[82:] in ("00", "40"), (
|
|
1401
|
+
f"expected byte 41- (00|40), not {payload[82:]}"
|
|
1402
|
+
)
|
|
1397
1403
|
|
|
1398
1404
|
except AssertionError as err:
|
|
1399
1405
|
_LOGGER.warning(f"{msg!r} < {_INFORM_DEV_MSG} ({err})")
|
|
1400
1406
|
|
|
1407
|
+
_req = "IDL"
|
|
1408
|
+
if payload[20:22] == "02":
|
|
1409
|
+
_req = "CO2"
|
|
1410
|
+
elif payload[20:22] == "03":
|
|
1411
|
+
_req = "HUM"
|
|
1412
|
+
|
|
1401
1413
|
return {
|
|
1402
|
-
|
|
1403
|
-
|
|
1414
|
+
**parse_exhaust_fan_speed(
|
|
1415
|
+
payload[10:12]
|
|
1416
|
+
), # for Orcon: 29 hex == 41 decimal divided by 2 gives 20.5 (%)
|
|
1417
|
+
SZ_REQ_REASON: _req,
|
|
1404
1418
|
"unknown_78": payload[78:80],
|
|
1405
1419
|
"unknown_80": payload[80:82],
|
|
1406
1420
|
"unknown_82": payload[82:],
|
|
@@ -1059,7 +1059,7 @@ _DEV_KLASSES_HVAC: dict[str, dict[Code, dict[VerbT, Any]]] = {
|
|
|
1059
1059
|
Code._12C8: {I_: {}},
|
|
1060
1060
|
Code._1470: {RP: {}},
|
|
1061
1061
|
Code._1F09: {I_: {}, RP: {}},
|
|
1062
|
-
Code._1FC9: {W_: {}},
|
|
1062
|
+
Code._1FC9: {I_: {}, W_: {}},
|
|
1063
1063
|
Code._2210: {I_: {}, RP: {}},
|
|
1064
1064
|
Code._22E0: {RP: {}},
|
|
1065
1065
|
Code._22E5: {RP: {}},
|
|
@@ -778,7 +778,8 @@ class FileTransport(_ReadTransport, _FileTransportAbstractor):
|
|
|
778
778
|
while not self._reading:
|
|
779
779
|
await asyncio.sleep(0.001)
|
|
780
780
|
self._frame_read(dtm_str, pkt_line)
|
|
781
|
-
|
|
781
|
+
await asyncio.sleep(0)
|
|
782
|
+
# NOTE: instable without, big performance penalty if delay >0
|
|
782
783
|
|
|
783
784
|
elif isinstance(self._pkt_source, str): # file_name, used in client parse
|
|
784
785
|
# open file file_name before reading
|
|
@@ -794,7 +795,8 @@ class FileTransport(_ReadTransport, _FileTransportAbstractor):
|
|
|
794
795
|
] != "#":
|
|
795
796
|
self._frame_read(dtm_pkt_line[:26], dtm_pkt_line[27:])
|
|
796
797
|
# this is where the parsing magic happens!
|
|
797
|
-
|
|
798
|
+
await asyncio.sleep(0)
|
|
799
|
+
# NOTE: instable without, big performance penalty if delay >0
|
|
798
800
|
except FileNotFoundError as err:
|
|
799
801
|
_LOGGER.warning(f"Correct the packet file name; {err}")
|
|
800
802
|
elif isinstance(self._pkt_source, TextIOWrapper): # used by client monitor
|
|
@@ -804,7 +806,8 @@ class FileTransport(_ReadTransport, _FileTransportAbstractor):
|
|
|
804
806
|
# can be blank lines in annotated log files
|
|
805
807
|
if (dtm_pkt_line := dtm_pkt_line.strip()) and dtm_pkt_line[:1] != "#":
|
|
806
808
|
self._frame_read(dtm_pkt_line[:26], dtm_pkt_line[27:])
|
|
807
|
-
await asyncio.sleep(0)
|
|
809
|
+
await asyncio.sleep(0)
|
|
810
|
+
# NOTE: instable without, big performance penalty if delay >0
|
|
808
811
|
else:
|
|
809
812
|
raise exc.TransportSourceInvalid(
|
|
810
813
|
f"Packet source is not dict, TextIOWrapper or str: {self._pkt_source:!r}"
|
|
@@ -1035,6 +1038,7 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1035
1038
|
|
|
1036
1039
|
self._connected = False
|
|
1037
1040
|
self._connecting = False
|
|
1041
|
+
self._connection_established = False # Track if initial connection was made
|
|
1038
1042
|
self._extra[SZ_IS_EVOFW3] = True
|
|
1039
1043
|
|
|
1040
1044
|
# Reconnection settings
|
|
@@ -1069,7 +1073,7 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1069
1073
|
self._connecting = True
|
|
1070
1074
|
try:
|
|
1071
1075
|
self.client.connect_async(
|
|
1072
|
-
self._broker_url.hostname
|
|
1076
|
+
str(self._broker_url.hostname or "localhost"),
|
|
1073
1077
|
self._broker_url.port or 1883,
|
|
1074
1078
|
60,
|
|
1075
1079
|
)
|
|
@@ -1136,8 +1140,21 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1136
1140
|
self._reconnect_task.cancel()
|
|
1137
1141
|
self._reconnect_task = None
|
|
1138
1142
|
|
|
1143
|
+
# Subscribe to base topic to see 'online' messages
|
|
1139
1144
|
self.client.subscribe(self._topic_base) # hope to see 'online' message
|
|
1140
1145
|
|
|
1146
|
+
# Also subscribe to data topics with wildcard for reliability after reconnect
|
|
1147
|
+
# This ensures we get data even if we miss the 'online' message
|
|
1148
|
+
if self._topic_base.endswith("/+"):
|
|
1149
|
+
data_wildcard = self._topic_base.replace("/+", "/+/rx")
|
|
1150
|
+
self.client.subscribe(data_wildcard, qos=self._mqtt_qos)
|
|
1151
|
+
_LOGGER.debug(f"Subscribed to data wildcard: {data_wildcard}")
|
|
1152
|
+
|
|
1153
|
+
# If we already have specific topics, re-subscribe to them
|
|
1154
|
+
if hasattr(self, "_topic_sub") and self._topic_sub:
|
|
1155
|
+
self.client.subscribe(self._topic_sub, qos=self._mqtt_qos)
|
|
1156
|
+
_LOGGER.debug(f"Re-subscribed to specific topic: {self._topic_sub}")
|
|
1157
|
+
|
|
1141
1158
|
def _on_connect_fail(
|
|
1142
1159
|
self,
|
|
1143
1160
|
client: mqtt.Client,
|
|
@@ -1155,19 +1172,36 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1155
1172
|
self,
|
|
1156
1173
|
client: mqtt.Client,
|
|
1157
1174
|
userdata: Any,
|
|
1158
|
-
|
|
1159
|
-
|
|
1175
|
+
*args: Any,
|
|
1176
|
+
**kwargs: Any,
|
|
1160
1177
|
) -> None:
|
|
1161
|
-
|
|
1178
|
+
# Handle different paho-mqtt callback signatures
|
|
1179
|
+
reason_code = args[0] if len(args) >= 1 else None
|
|
1180
|
+
|
|
1181
|
+
reason_name = (
|
|
1182
|
+
reason_code.getName()
|
|
1183
|
+
if reason_code is not None and hasattr(reason_code, "getName")
|
|
1184
|
+
else str(reason_code)
|
|
1185
|
+
)
|
|
1186
|
+
_LOGGER.warning(f"MQTT disconnected: {reason_name}")
|
|
1162
1187
|
|
|
1188
|
+
was_connected = self._connected
|
|
1163
1189
|
self._connected = False
|
|
1164
1190
|
|
|
1191
|
+
# If we were previously connected and had established communication,
|
|
1192
|
+
# notify that the device is now offline
|
|
1193
|
+
if was_connected and hasattr(self, "_topic_sub") and self._topic_sub:
|
|
1194
|
+
device_topic = self._topic_sub[:-3] # Remove "/rx" suffix
|
|
1195
|
+
_LOGGER.warning(f"{self}: the MQTT device is offline: {device_topic}")
|
|
1196
|
+
|
|
1197
|
+
# Pause writing since device is offline
|
|
1198
|
+
if hasattr(self, "_protocol"):
|
|
1199
|
+
self._protocol.pause_writing()
|
|
1200
|
+
|
|
1165
1201
|
# Only attempt reconnection if we didn't deliberately disconnect
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
elif reason_code.is_failure and not self._closing:
|
|
1170
|
-
# Connection failed, also schedule reconnection
|
|
1202
|
+
|
|
1203
|
+
if not self._closing:
|
|
1204
|
+
# Schedule reconnection for any disconnect (unexpected or failure)
|
|
1171
1205
|
self._schedule_reconnect()
|
|
1172
1206
|
|
|
1173
1207
|
def _create_connection(self, msg: mqtt.MQTTMessage) -> None:
|
|
@@ -1191,7 +1225,12 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1191
1225
|
|
|
1192
1226
|
self.client.subscribe(self._topic_sub, qos=self._mqtt_qos)
|
|
1193
1227
|
|
|
1194
|
-
|
|
1228
|
+
# Only call connection_made on first connection, not reconnections
|
|
1229
|
+
if not self._connection_established:
|
|
1230
|
+
self._connection_established = True
|
|
1231
|
+
self._make_connection(gwy_id=msg.topic[-9:]) # type: ignore[arg-type]
|
|
1232
|
+
else:
|
|
1233
|
+
_LOGGER.info("MQTT reconnected - protocol connection already established")
|
|
1195
1234
|
|
|
1196
1235
|
# NOTE: self._frame_read() invoked from here
|
|
1197
1236
|
def _on_message(
|
|
@@ -1211,23 +1250,51 @@ class MqttTransport(_FullTransport, _MqttTransportAbstractor):
|
|
|
1211
1250
|
_LOGGER.info("Rx: %s", msg.payload)
|
|
1212
1251
|
|
|
1213
1252
|
if msg.topic[-3:] != "/rx": # then, e.g. 'RAMSES/GATEWAY/18:017804'
|
|
1214
|
-
if msg.payload == b"offline"
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1253
|
+
if msg.payload == b"offline":
|
|
1254
|
+
# Check if this offline message is for our current device
|
|
1255
|
+
if (
|
|
1256
|
+
hasattr(self, "_topic_sub")
|
|
1257
|
+
and self._topic_sub
|
|
1258
|
+
and msg.topic == self._topic_sub[:-3]
|
|
1259
|
+
) or not hasattr(self, "_topic_sub"):
|
|
1260
|
+
_LOGGER.warning(
|
|
1261
|
+
f"{self}: the ESP device is offline (via LWT): {msg.topic}"
|
|
1262
|
+
)
|
|
1263
|
+
# Don't set _connected = False here - that's for MQTT connection, not ESP device
|
|
1264
|
+
if hasattr(self, "_protocol"):
|
|
1265
|
+
self._protocol.pause_writing()
|
|
1220
1266
|
|
|
1221
1267
|
# BUG: using create task (self._loop.ct() & asyncio.ct()) causes the
|
|
1222
1268
|
# BUG: event look to close early
|
|
1223
1269
|
elif msg.payload == b"online":
|
|
1224
1270
|
_LOGGER.info(
|
|
1225
|
-
f"{self}: the
|
|
1271
|
+
f"{self}: the ESP device is online (via status): {msg.topic}"
|
|
1226
1272
|
)
|
|
1227
1273
|
self._create_connection(msg)
|
|
1228
1274
|
|
|
1229
1275
|
return
|
|
1230
1276
|
|
|
1277
|
+
# Handle data messages - if we don't have connection established yet but get data,
|
|
1278
|
+
# we can infer the gateway from the topic
|
|
1279
|
+
if not self._connection_established and msg.topic.endswith("/rx"):
|
|
1280
|
+
# Extract gateway ID from topic like "RAMSES/GATEWAY/18:123456/rx"
|
|
1281
|
+
topic_parts = msg.topic.split("/")
|
|
1282
|
+
if len(topic_parts) >= 3 and topic_parts[-2] not in ("+", "*"):
|
|
1283
|
+
gateway_id = topic_parts[-2] # Should be something like "18:123456"
|
|
1284
|
+
_LOGGER.info(
|
|
1285
|
+
f"Inferring gateway connection from data topic: {gateway_id}"
|
|
1286
|
+
)
|
|
1287
|
+
|
|
1288
|
+
# Set up topics and connection
|
|
1289
|
+
self._topic_pub = f"{'/'.join(topic_parts[:-1])}/tx"
|
|
1290
|
+
self._topic_sub = msg.topic
|
|
1291
|
+
self._extra[SZ_ACTIVE_HGI] = gateway_id
|
|
1292
|
+
|
|
1293
|
+
# Mark as connected and establish protocol connection
|
|
1294
|
+
self._connected = True
|
|
1295
|
+
self._connection_established = True
|
|
1296
|
+
self._make_connection(gwy_id=gateway_id) # type: ignore[arg-type]
|
|
1297
|
+
|
|
1231
1298
|
try:
|
|
1232
1299
|
payload = json.loads(msg.payload)
|
|
1233
1300
|
except json.JSONDecodeError:
|
|
@@ -6,15 +6,30 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
####################################################################################################
|
|
9
|
-
#
|
|
9
|
+
# 1A. For reference, 10E0s (if any), oem_code='65' (Note: REM/FAN won't RP|10E0):
|
|
10
10
|
2024-10-16T21:32:07.084793 073 I --- 29:123150 63:262142 --:------ 10E0 029 000001C8410D0165FFFFFFFFFFFF0D0407DF564D4E2D30374C4D303100 # {'description': 'VMN-07LM01', 'manufacturer_sub_id': 'C8', 'product_id': '41', 'date_1': '2015-04-13', 'date_2': '0000-00-00', 'oem_code': '65'} # ClimaRad 4-button remote
|
|
11
11
|
2024-10-09T11:50:24.287879 123 I --- 37:153226 63:262142 --:------ 10E0 038 000001C8830C0A65FEFFFFFFFFFF110C07E4564D442D30375250533133000000000000000000 # {'description': 'VMD-07RPS13', 'manufacturer_sub_id': 'C8', 'product_id': '83', 'date_1': '2020-12-17', 'date_2': '0000-00-00', 'oem_code': '65'} # ClimaRad VenturaV1x
|
|
12
|
-
|
|
12
|
+
2025-08-22T01:24:57.945961 058 I --- 18:154951 63:262142 --:------ 10E0 038 000001C8490F0065FEFEFFFFFFFF120607E4425244472D303252313300000000000000000000 # {'description': 'BRDG-02R13', 'manufacturer_sub_id': 'C8', 'product_id': '49', 'date_1': '2020-06-18', 'date_2': '0000-00-00', 'oem_code': '65'} # Airios RF Bridge, set for ClimaRad oem 65
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
####################################################################################################
|
|
16
|
-
#
|
|
17
|
-
#
|
|
16
|
+
# 2A. The handshake - Ventura/slave to RF Bridge (oem 65)
|
|
17
|
+
# Ventura in binding mode: press 2 buttons above Auto for 4 secs > flashing red symbol
|
|
18
|
+
# RF Bridge only active after 15 minutes power on (firmware update period)
|
|
19
|
+
2025-08-17T15:43:38.086338 064 I --- 18:154951 --:------ 18:154951 1FC9 018 0022F44A5D476510E04A5D47001FC94A5D47 # {'phase': 'offer', 'bindings': [['00', '22F4', '18:154951'], ['65', '10E0', '18:154951'], ['00', '1FC9', '18:154951']]}
|
|
20
|
+
|
|
21
|
+
2025-08-17T15:43:39.118990 061 W --- 37:153226 18:154951 --:------ 1FC9 012 0031D996568A00230996568A # {'phase': 'accept', 'bindings': [['00', '31D9', '37:153226'], ['00', '2309', '37:153226']]}
|
|
22
|
+
# system sync from bridge, unrelated?:
|
|
23
|
+
2025-08-17T15:44:55.418472 061 I --- 18:154951 --:------ 18:154951 1F09 003 0006B3 # {}
|
|
24
|
+
# second 1FC9 from slave
|
|
25
|
+
2025-08-17T15:46:04.045829 060 I --- 37:153226 --:------ 37:153226 1FC9 030 0031D996568A0031E096568A002E1096568A6510E096568A001FC996568A # {}
|
|
26
|
+
|
|
27
|
+
# A subsequent slave|I|10E0 *is required* for a successful bind???:
|
|
28
|
+
2025-08-17T15:46:40.363292 059 I --- 37:153226 63:262142 --:------ 10E0 038 000001C8830C0A65FEFFFFFFFFFF110C07E4564D442D30375250533133000000000000000000 # {'oem_code': '65', 'manufacturer_sub_id': 'C8', 'product_id': '83', 'date_1': '2020-12-17', 'date_2': '0000-00-00', 'description': 'VMD-07RPS13'}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# 2B. The handshake - REM faked in ramses_rf to Ventura (NB: FAN|W|1FC9|00):
|
|
32
|
+
# actual REM 1FC9 packet gets no response. Ventura is known to only bind to a CO2 sensor or an RF Bridge (oem 65)
|
|
18
33
|
2024-11-09T18:33:29.744238 ... I --- 29:123160 --:------ 29:123160 1FC9 018 0022F175E1180010E075E118001FC975E118
|
|
19
34
|
# extended 1FC9. Added 1298 and 22F4, got response from HRU
|
|
20
35
|
2024-11-09T18:32:41.837359 000 I --- 29:123160 --:------ 29:123160 1FC9 024 00129875E1180022F175E1180022F475E118001FC975E118 # {}
|
|
@@ -193,8 +193,9 @@
|
|
|
193
193
|
2021-07-10T10:47:13.404100 ... RP --- 32:168090 18:000730 --:------ 10E0 038 000001C85802016CFFFFFFFFFFFF0C0707E0564D532D32334842333300000000000000000000
|
|
194
194
|
2021-10-11T14:21:14.518500 ... I --- 32:168240 63:262142 --:------ 10E0 038 000001C85803016CFFFFFFFFFFFF0C0907E0564D532D32334842333300000000000000000000
|
|
195
195
|
2022-01-01T00:00:00.000000 000 I --- 32:172522 63:262142 --:------ 10E0 029 000001C85901016CFFFFFFFFFFFF1F0507E0564D4E2D32334C4D333300 # {'description': 'VMN-23LM33', 'date_2': '0000-00-00', 'date_1': '2016-05-31', 'manufacturer_sub_id': 'C8', 'product_id': '59', 'oem_code': '6C'} # '_signature': '0001C85901016CFFFF',
|
|
196
|
-
2022-02-19T18:00:35.234656 062 I --- 32:206250 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300 # VMN-23LMH23
|
|
196
|
+
2022-02-19T18:00:35.234656 062 I --- 32:206250 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300 # {'description': 'VMN-23LMH23', 'manufacturer_sub_id': 'C8', 'product_id': '5A', 'oem_code': '6C', 'date_1': '2016-06-01', 'date_2': '0000-00-00'}
|
|
197
197
|
2022-11-10T20:43:45.452809 060 I --- 32:236773 63:262142 --:------ 10E0 030 000001C85F0E0267FFFFFFFFFFFFFFFFFFFF564D432D3135525053333400 # {'description': 'VMC-15RPS34', 'date_2': '0000-00-00', 'date_1': '0000-00-00', 'manufacturer_sub_id': 'C8', 'product_id': '5F', 'oem_code': '67'} # Orcon MVS-15?
|
|
198
|
+
2024-03-04T16:54:24.502000 ... I --- 29:206851 63:262142 --:------ 10E0 029 000001C826090367FFFFFFFFFFFFFFFFFFFF564D432D31355250303100 # {'description': 'VMC-15RP01', 'manufacturer_sub_id': 'C8', 'oem_code': '67', 'product_id': '26', 'date_1': '0000-00-00', 'date_2': '0000-00-00'} # Orcon MVS-15RHB fan
|
|
198
199
|
2021-12-20T08:24:09.117900 ... I --- 34:021943 63:262142 --:------ 10E0 038 000001C8380A0100F1FF0C0107E1030B07DE5438375246323032350000000000000000000000
|
|
199
200
|
2021-11-08T15:26:00.654600 ... I --- 34:041323 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1E0407E4030507E15438375246323032350000000000000000000000
|
|
200
201
|
2019-12-22T14:26:07.736118 045 I --- 34:044201 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1D0807E2030507E15438375246323032350000000000000000000000
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
# Honeywell Round thermostat, oem_code '00' / sub-id 'C8' - heat
|
|
1
2
|
|
|
2
3
|
2022-08-20T12:03:31.051414 ... I --- 34:018143 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1B0107E4030507E15438375246323032350000000000000000000000
|
|
3
|
-
2021-12-20T08:24:09.117900 ... I --- 34:021943 63:262142 --:------ 10E0 038 000001C8380A0100F1FF0C0107E1030B07DE5438375246323032350000000000000000000000
|
|
4
|
+
2021-12-20T08:24:09.117900 ... I --- 34:021943 63:262142 --:------ 10E0 038 000001C8380A0100F1FF0C0107E1030B07DE5438375246323032350000000000000000000000 # {'description': 'T87RF2025', 'manufacturer_sub_id': 'C8', 'product_id': '38', 'oem_code': '00', 'date_1': '2014-11-03', 'date_2': '2017-01-12'}
|
|
4
5
|
2021-11-08T15:26:00.654600 ... I --- 34:041323 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1E0407E4030507E15438375246323032350000000000000000000000
|
|
5
6
|
2019-12-22T14:26:07.736118 045 I --- 34:044201 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1D0807E2030507E15438375246323032350000000000000000000000
|
|
6
7
|
2019-12-22T13:26:13.854200 ... I --- 34:044203 63:262142 --:------ 10E0 038 000001C8380F0100F1FF1D0807E2030507E15438375246323032350000000000000000000000
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
2023-01-26T08:47:34.307872 ... I --- 29:207706 63:262142 --:------ 10E0 029 000001C8260D0467FFFFFFFFFFFFFFFFFFFF564D432D31355250303100
|
|
2
|
+
2023-01-26T08:47:34.307872 ... I --- 29:207706 63:262142 --:------ 10E0 029 000001C8260D0467FFFFFFFFFFFFFFFFFFFF564D432D31355250303100 # 10E0| I|29:207706
|
|
3
3
|
2022-02-05T08:05:56.604400 ... I --- 29:215374 63:262142 --:------ 10E0 029 000001C8260A0367FFFFFFFFFFFFFFFFFFFF564D432D31355250303100
|
|
4
4
|
2022-08-16T20:07:50.411731 080 I --- 29:226075 63:262142 --:------ 10E0 029 000001C8260D0467FFFFFFFFFFFFFFFFFFFF564D432D31355250303100
|
|
5
5
|
2021-07-01T13:00:09.215900 ... I --- 29:237552 63:262142 --:------ 10E0 029 000001C8260D0467FFFFFFFFFFFFFFFFFFFF564D432D31355250303100
|
|
6
|
+
|
|
7
|
+
# Orcon MVS-15RHB fan from Hans-Mep
|
|
8
|
+
2024-03-04T16:54:24.502000 ... I --- 29:206851 63:262142 --:------ 10E0 029 000001C826090367FFFFFFFFFFFFFFFFFFFF564D432D31355250303100 # {'description': 'VMC-15RP01', 'manufacturer_sub_id': 'C8', 'oem_code': '67', 'product_id': '26', 'date_1': '0000-00-00', 'date_2': '0000-00-00'} # Orcon MVS-15RHB fan
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# Orcon HRU VMD-15RMS86
|
|
2
2
|
2021-10-26T21:51:43.143100 ... I --- 32:132125 63:262142 --:------ 10E0 038 000001C8950B0A67FEFFFFFFFFFF150107E5564D442D3135524D533836000000000000000000
|
|
3
3
|
2022-08-21T10:23:55.127583 076 RP --- 32:134446 37:171685 --:------ 10E0 038 000001C8950B0A67FEFFFFFFFFFF150107E5564D442D3135524D533836000000000000000000
|
|
4
4
|
2022-08-18T23:09:54.528026 ... I --- 32:143293 63:262142 --:------ 10E0 038 000001C8950B0A67FEFFFFFFFFFF150107E5564D442D3135524D533836000000000000000000 # 10E0| I|32:143293
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
# Confirmed:
|
|
6
|
-
2022-02-19T18:00:35.234656 062 I --- 32:206250 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300
|
|
6
|
+
2022-02-19T18:00:35.234656 062 I --- 32:206250 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300 # {'description': 'VMN-23LMH23', 'manufacturer_sub_id': 'C8', 'product_id': '5A', 'oem_code': '6C', 'date_1': '2016-06-01', 'date_2': '0000-00-00'}
|
|
7
7
|
2023-04-27T16:21:21.263244 ... I --- 32:208628 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300
|
|
8
8
|
|
|
9
9
|
|
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
2024-01-01T12:00:00.000000 --- I --- 32:168090 --:------ 32:168090 042F 009 000000100F00105050
|
|
10
10
|
2024-01-01T12:00:00.000000 --- I --- 32:166025 --:------ 32:166025 042F 009 00050E0B0C00111470
|
|
11
11
|
|
|
12
|
+
# Airios RF Bridge BRDG-02R13
|
|
13
|
+
2025-08-22T01:24:57.744252 058 I --- 18:154951 --:------ 18:154951 042F 009 0003020B0B000F0000 # {'counter_1': '0x0302', 'counter_3': '0x0B0B', 'counter_5': '0x000F', 'unknown_7': '0x0000'}
|
|
14
|
+
|
|
12
15
|
|
|
13
16
|
### HVAC, see: https://github.com/ramses-rf/ramses_rf/pull/135
|
|
14
17
|
|
|
@@ -8,10 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
# The payload changes as the firmware is updated & date_2 is updated
|
|
11
|
-
2019-12-21T18:29:44.104610 057 RP --- 01:145038 18:056026 --:------ 10E0 038 000002FF0163FFFFFFFF140B07E1010807DD45766F20436F6C6F720000000000000000000000 # {'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2017-11-20'
|
|
12
|
-
2020-05-14T15:41:48.743111 045 RP --- 01:145038 18:013393 --:------ 10E0 038 000002FF0163FFFFFFFF640307E4010807DD45766F20436F6C6F720000000000000000000000 # {'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2020-03-04'
|
|
13
|
-
2021-01-25T23:23:00.520205 051 RP --- 01:145038 18:140805 --:------ 10E0 038 000002FF0163FFFFFFFF0B0807E4010807DD45766F20436F6C6F720000000000000000000000 # {'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2020-08-11'
|
|
14
|
-
|
|
11
|
+
2019-12-21T18:29:44.104610 057 RP --- 01:145038 18:056026 --:------ 10E0 038 000002FF0163FFFFFFFF140B07E1010807DD45766F20436F6C6F720000000000000000000000 # {'description': 'Evo Color', 'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2017-11-20'}
|
|
12
|
+
2020-05-14T15:41:48.743111 045 RP --- 01:145038 18:013393 --:------ 10E0 038 000002FF0163FFFFFFFF640307E4010807DD45766F20436F6C6F720000000000000000000000 # {'description': 'Evo Color', 'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2020-03-04'}
|
|
13
|
+
2021-01-25T23:23:00.520205 051 RP --- 01:145038 18:140805 --:------ 10E0 038 000002FF0163FFFFFFFF0B0807E4010807DD45766F20436F6C6F720000000000000000000000 # {'description': 'Evo Color', 'oem_code': 'FF', 'manufacturer_sub_id': 'FF', 'product_id': '01', 'date_1': '2013-08-01', 'date_2': '2020-08-11'}
|
|
15
14
|
|
|
16
15
|
#
|
|
17
16
|
# oem_code 'FF' - Honeywell/Resideo CH/DHW
|
|
@@ -82,6 +81,8 @@
|
|
|
82
81
|
|
|
83
82
|
|
|
84
83
|
#
|
|
84
|
+
# oem_code '00' / sub-id 'C8' - heat
|
|
85
|
+
2021-12-20T08:24:09.117900 ... I --- 34:021943 63:262142 --:------ 10E0 038 000001C8380A0100F1FF0C0107E1030B07DE5438375246323032350000000000000000000000 # {'description': 'T87RF2025', 'manufacturer_sub_id': 'C8', 'product_id': '38', 'oem_code': '00', 'date_1': '2014-11-03', 'date_2': '2017-01-12'}
|
|
85
86
|
# oem_code '00' / sub-id 'C9', 30:069468 is a BUVA Boxstream
|
|
86
87
|
2023-11-04T12:34:14.007611 062 I --- 30:068457 63:262142 --:------ 10E0 038 000001C9001B0000FEFEFFFFFFFF0E0507E2425244472D30324A415330310000000000000000 # {'description': 'BRDG-02JAS01', 'manufacturer_sub_id': 'C9', 'product_id': '00', 'date_2': '0000-00-00', 'date_1': '2018-05-14', 'oem_code': '00'}
|
|
87
88
|
2022-01-01T00:00:00.000000 000 I --- 30:069468 63:262142 --:------ 10E0 038 000001C9001B0000FEFEFFFFFFFF0E0507E2425244472D30324A415330310000000000000000 # {'description': 'BRDG-02JAS01', 'manufacturer_sub_id': 'C9', 'product_id': '00', 'date_1': '2018-05-14', 'date_2': '0000-00-00', 'oem_code': '00'} # BUVA Boxstrea,
|
|
@@ -100,6 +101,7 @@
|
|
|
100
101
|
2022-11-03T22:50:34.060486 ... I --- 37:255297 63:262142 --:------ 10E0 038 00000100290A0201FFFFFFFFFFFF140407E5564D532D31324842313600000000000000000000 # {'description': 'VMS-12HB16', 'manufacturer_sub_id': '00', 'product_id': '29', 'date_2': '0000-00-00', 'date_1': '2021-04-20', 'oem_code': '01'} #
|
|
101
102
|
|
|
102
103
|
# oem_code '65' - ClimaRad HVAC
|
|
104
|
+
2025-08-22T01:24:57.945961 058 I --- 18:154951 63:262142 --:------ 10E0 038 000001C8490F0065FEFEFFFFFFFF120607E4425244472D303252313300000000000000000000 # {'description': 'BRDG-02R13', 'manufacturer_sub_id': 'C8', 'product_id': '49', 'date_1': '2020-06-18', 'date_2': '0000-00-00', 'oem_code': '65'} # Airios RF Bridge, set for ClimaRad oem 65
|
|
103
105
|
2024-10-09T11:50:24.287879 123 I --- 37:153226 63:262142 --:------ 10E0 038 000001C8830C0A65FEFFFFFFFFFF110C07E4564D442D30375250533133000000000000000000 # {'description': 'VMD-07RPS13', 'manufacturer_sub_id': 'C8', 'product_id': '83', 'date_1': '2020-12-17', 'date_2': '0000-00-00', 'oem_code': '65'} # ClimaRad VenturaV1x
|
|
104
106
|
2024-10-16T18:43:52.761437 087 I --- 29:099029 63:262142 --:------ 10E0 029 000001C81D150765FFFFFFFFFFFFFFFFFFFF564D432D30375250303100 # {'description': 'VMC-07RP01', 'manufacturer_sub_id': 'C8', 'product_id': '1D', 'date_1': '0000-00-00', 'date_2': '0000-00-00', 'oem_code': '65'} # ClimaRad MiniBox Fan
|
|
105
107
|
2024-10-16T21:32:07.084793 073 I --- 29:123150 63:262142 --:------ 10E0 029 000001C8410D0165FFFFFFFFFFFF0D0407DF564D4E2D30374C4D303100 # {'description': 'VMN-07LM01', 'manufacturer_sub_id': 'C8', 'product_id': '41', 'date_1': '2015-04-13', 'date_2': '0000-00-00', 'oem_code': '65'} # ClimaRad 4-button remote
|
|
@@ -121,12 +123,14 @@
|
|
|
121
123
|
2019-11-27T22:39:00.000000 ... I --- 32:139773 63:262142 --:------ 10E0 038 000001C8A2050367FEFFFFFFFFFF1D0807E6564D442D3135524D5338362D3200000000000000 # {'description': 'VMD-15RMS86-2', 'manufacturer_sub_id': 'C8', 'product_id': 'A2', 'oem_code': '67', 'date_1': '2022-08-29', 'date_2': '0000-00-00'} # {"_SLUG": "HRU", "make": "Orcon", "model": "HRC 425"}
|
|
122
124
|
2019-11-27T22:39:00.000000 ... I --- 32:137102 63:262142 --:------ 10E0 030 000001C85E0B0567FFFFFFFFFFFFFFFFFFFF564D442D3135525053373500 # {'description': 'VMD-15RPS75', 'manufacturer_sub_id': 'C8', 'product_id': '5E', 'oem_code': '67', 'date_1': '0000-00-00', 'date_2': '0000-00-00'} # {"_SLUG": "HRU", "make": "Orcon", "model": "HRC 235"}
|
|
123
125
|
|
|
126
|
+
2024-03-04T16:54:24.502000 ... I --- 29:206851 63:262142 --:------ 10E0 029 000001C826090367FFFFFFFFFFFFFFFFFFFF564D432D31355250303100 # {'description': 'VMC-15RP01', 'manufacturer_sub_id': 'C8', 'oem_code': '67', 'product_id': '26', 'date_1': '0000-00-00', 'date_2': '0000-00-00'} # Orcon MVS-15RHB fan
|
|
127
|
+
|
|
124
128
|
# oem_code '6C' - Nuaire HVAC
|
|
125
129
|
2019-11-27T22:39:12.877929 061 RP --- 30:082155 18:013393 --:------ 10E0 038 000001C90011006CFEFFFFFFFFFF090907E0425244472D30324A415330310000000000000000 # {'description': 'BRDG-02JAS01', 'manufacturer_sub_id': 'C9', 'product_id': '00', 'oem_code': '6C', 'date_2': '0000-00-00', 'date_1': '2016-09-09'} # {"_SLUG": "PIV", "make": "Nuaire", "model": "Drimaster Eco-Heat-HC"}
|
|
126
130
|
2023-04-13T10:43:39.077524 073 I --- 30:098165 63:262142 --:------ 10E0 038 000001C9001D006CFEFEFFFFFFFF120707E3425244472D30324A415330310000000000000000 # {'description': 'BRDG-02JAS01', 'manufacturer_sub_id': 'C9', 'product_id': '00', 'oem_code': '6C', 'date_2': '0000-00-00', 'date_1': '2019-07-18'} # {"_SLUG": "PIV", "make": "Nuaire", "model": "Drimaster Eco-Heat-HC"}
|
|
127
131
|
2021-10-24T15:45:16.525879 055 I --- 32:168090 63:262142 --:------ 10E0 038 000001C85802016CFFFFFFFFFFFF0C0707E0564D532D32334842333300000000000000000000 # {'description': 'VMS-23HB33', 'manufacturer_sub_id': 'C8', 'product_id': '58', 'oem_code': '6C', 'date_2': '0000-00-00', 'date_1': '2016-07-12'} # {"_SLUG": "HUM", "make": "Nuaire", "model": "Drimaster RelHum Sensor"}
|
|
128
132
|
2022-01-01T00:00:00.000000 000 I --- 32:172522 63:262142 --:------ 10E0 029 000001C85901016CFFFFFFFFFFFF1F0507E0564D4E2D32334C4D333300 # {'description': 'VMN-23LM33', 'manufacturer_sub_id': 'C8', 'product_id': '59', 'oem_code': '6C', 'date_2': '0000-00-00', 'date_1': '2016-05-31'} # {"_SLUG": "???", "make": "Nuaire", "model": None}
|
|
129
|
-
|
|
133
|
+
2022-02-19T18:00:35.234656 062 I --- 32:206250 63:262142 --:------ 10E0 030 000001C85A01016CFFFFFFFFFFFF010607E0564D4E2D32334C4D48323300 # {'description': 'VMN-23LMH23', 'manufacturer_sub_id': 'C8', 'product_id': '5A', 'oem_code': '6C', 'date_1': '2016-06-01', 'date_2': '0000-00-00'}
|
|
130
134
|
|
|
131
135
|
#
|
|
132
136
|
# WIP
|
|
@@ -123,3 +123,5 @@
|
|
|
123
123
|
2024-11-09T18:33:29.759645 ... W --- 37:153226 29:123160 --:------ 1FC9 012 0031D996568A00230996568A # {'phase': 'accept', 'bindings': [['00', '31D9', '37:153226'], ['00', '2309', '37:153226']]} # 2309 reports a constant , set?
|
|
124
124
|
2024-11-09T18:33:29.763814 ... I --- 29:123160 37:153226 --:------ 1FC9 001 00 # {'phase': 'confirm', 'bindings': [['00']]}
|
|
125
125
|
2024-11-11T14:36:41.745628 ... I --- 29:123160 37:153226 --:------ 1FC9 006 001FC975E118 # {'phase': 'confirm', 'bindings': [['00', '1FC9', '29:123160']]} # made up by ramses_rf, config was "21"
|
|
126
|
+
# ClimaRad Ventura V1x reply binding to RF Bridge
|
|
127
|
+
2025-08-17T14:36:00.000000 ... I --- 37:153226 --:------ 37:153226 1FC9 030 0031D996568A0031E096568A002E1096568A6510E096568A001FC996568A # {'phase': 'offer', 'bindings': [['00', '31D9', '37:153226'], ['00', '31E0', '37:153226'], ['00', '2E10', '37:153226'], ['65', '10E0', '37:153226'], ['00', '1FC9', '37:153226']]}
|