.coveragerc
.gitignore
.pre-commit-config.yaml
.readthedocs.yml
AUTHORS.rst
CHANGELOG.rst
CONTRIBUTING.rst
LICENSE.txt
Makefile
README.rst
RELEASE.md
pyproject.toml
setup.cfg
setup.py
tox.ini
uv.lock
.github/RESOLVING_PR_COMMENTS.md
.github/copilot-instructions.md
.github/workflows/ci.yml
.github/workflows/release.yml
docs/Makefile
docs/conf.py
docs/index.rst
docs/openapi.yaml
docs/requirements.txt
docs/_static/.gitignore
docs/explanation/architecture.rst
docs/explanation/draws.rst
docs/explanation/heating-elements.rst
docs/explanation/index.rst
docs/explanation/recovery-speed.rst
docs/explanation/simulator.rst
docs/explanation/standby-loss.rst
docs/explanation/tank-energy.rst
docs/explanation/tou-recovery-cap.rst
docs/explanation/unknown-values.rst
docs/explanation/what-starts-a-recovery.rst
docs/how-to/authenticate.rst
docs/how-to/auto-recovery.rst
docs/how-to/bluetooth.rst
docs/how-to/calibrate-simulator.rst
docs/how-to/diagnose-mqtt.rst
docs/how-to/home-assistant.rst
docs/how-to/index.rst
docs/how-to/maintenance.rst
docs/how-to/manage-units.rst
docs/how-to/monitor-status.rst
docs/how-to/optimize-tou.rst
docs/how-to/queue-commands.rst
docs/how-to/schedule-operation.rst
docs/how-to/simulate-heater.rst
docs/how-to/track-energy.rst
docs/project/authors.rst
docs/project/changelog.rst
docs/project/contributing.rst
docs/project/history.rst
docs/project/license.rst
docs/reference/configuration.rst
docs/reference/enumerations.rst
docs/reference/index.rst
docs/reference/installation.rst
docs/reference/simulator-inputs.rst
docs/reference/protocol/data_conversions.rst
docs/reference/protocol/device_features.rst
docs/reference/protocol/device_status.rst
docs/reference/protocol/error_codes.rst
docs/reference/protocol/mqtt_protocol.rst
docs/reference/protocol/quick_reference.rst
docs/reference/protocol/rest_api.rst
docs/reference/python_api/api_client.rst
docs/reference/python_api/auth_client.rst
docs/reference/python_api/cli.rst
docs/reference/python_api/events.rst
docs/reference/python_api/exceptions.rst
docs/reference/python_api/models.rst
docs/reference/python_api/mqtt_client.rst
docs/reference/python_api/sim.rst
docs/tutorials/getting-started.rst
examples/.ruff.toml
examples/README.md
examples/mask.py
examples/advanced/air_filter_reset.py
examples/advanced/anti_legionella.py
examples/advanced/auto_recovery.py
examples/advanced/combined_callbacks.py
examples/advanced/demand_response.py
examples/advanced/device_capabilities.py
examples/advanced/device_status_debug.py
examples/advanced/energy_analytics.py
examples/advanced/error_code_demo.py
examples/advanced/firmware_payload_capture.py
examples/advanced/mqtt_diagnostics.py
examples/advanced/power_control.py
examples/advanced/recirculation_control.py
examples/advanced/reconnection_demo.py
examples/advanced/reservation_schedule.py
examples/advanced/simple_auto_recovery.py
examples/advanced/token_restoration.py
examples/advanced/tou_openei.py
examples/advanced/tou_schedule.py
examples/advanced/water_reservation.py
examples/beginner/01_authentication.py
examples/beginner/02_list_devices.py
examples/beginner/03_get_status.py
examples/beginner/04_set_temperature.py
examples/intermediate/advanced_auth_patterns.py
examples/intermediate/command_queue.py
examples/intermediate/device_status_callback.py
examples/intermediate/error_handling.py
examples/intermediate/event_driven_control.py
examples/intermediate/improved_auth.py
examples/intermediate/legacy_auth_constructor.py
examples/intermediate/mqtt_realtime_monitoring.py
examples/intermediate/periodic_requests.py
examples/intermediate/set_mode.py
examples/intermediate/vacation_mode.py
examples/simulator/lower-setpoint.json
examples/simulator/plan.json
examples/simulator/scenario.json
examples/testing/periodic_device_info.py
examples/testing/simple_periodic_info.py
examples/testing/test_api_client.py
examples/testing/test_mqtt_connection.py
examples/testing/test_mqtt_messaging.py
examples/testing/test_periodic_minimal.py
scripts/README.md
scripts/bump_version.py
scripts/diagnose_mqtt_connection.py
scripts/extract_changelog.py
scripts/format.py
scripts/lint.py
scripts/setup-dev.py
scripts/validate_version.py
src/nwp500/__init__.py
src/nwp500/_base.py
src/nwp500/api_client.py
src/nwp500/auth.py
src/nwp500/command_decorators.py
src/nwp500/config.py
src/nwp500/converters.py
src/nwp500/device_capabilities.py
src/nwp500/device_info_cache.py
src/nwp500/encoding.py
src/nwp500/enums.py
src/nwp500/events.py
src/nwp500/exceptions.py
src/nwp500/factory.py
src/nwp500/field_factory.py
src/nwp500/mqtt_events.py
src/nwp500/openei.py
src/nwp500/py.typed
src/nwp500/reservations.py
src/nwp500/sim_adapters.py
src/nwp500/sim_calibrate.py
src/nwp500/sim_home_assistant.py
src/nwp500/sim_live.py
src/nwp500/status_history.py
src/nwp500/temperature.py
src/nwp500/topic_builder.py
src/nwp500/tou_schedule.py
src/nwp500/unit_system.py
src/nwp500/utils.py
src/nwp500/ble/__init__.py
src/nwp500/ble/__main__.py
src/nwp500/ble/client.py
src/nwp500/ble/mqtt_adapter.py
src/nwp500/ble/protocol.py
src/nwp500/cli/__init__.py
src/nwp500/cli/__main__.py
src/nwp500/cli/ble_backend.py
src/nwp500/cli/calibration.py
src/nwp500/cli/handlers.py
src/nwp500/cli/monitoring.py
src/nwp500/cli/output_formatters.py
src/nwp500/cli/presentation.py
src/nwp500/cli/recording.py
src/nwp500/cli/rich_output.py
src/nwp500/cli/simulate.py
src/nwp500/cli/token_storage.py
src/nwp500/models/__init__.py
src/nwp500/models/_converters.py
src/nwp500/models/account.py
src/nwp500/models/device.py
src/nwp500/models/diagnostics.py
src/nwp500/models/energy.py
src/nwp500/models/feature.py
src/nwp500/models/firmware.py
src/nwp500/models/maintenance.py
src/nwp500/models/mqtt_models.py
src/nwp500/models/schedule.py
src/nwp500/models/status.py
src/nwp500/models/tou.py
src/nwp500/mqtt/__init__.py
src/nwp500/mqtt/_control_commands.py
src/nwp500/mqtt/_device_subscriptions.py
src/nwp500/mqtt/client.py
src/nwp500/mqtt/command_queue.py
src/nwp500/mqtt/connection.py
src/nwp500/mqtt/control.py
src/nwp500/mqtt/diagnostics.py
src/nwp500/mqtt/periodic.py
src/nwp500/mqtt/reconnection.py
src/nwp500/mqtt/state_tracker.py
src/nwp500/mqtt/subscriptions.py
src/nwp500/mqtt/types.py
src/nwp500/mqtt/utils.py
src/nwp500/sim/__init__.py
src/nwp500/sim/api.py
src/nwp500/sim/attribution.py
src/nwp500/sim/book.py
src/nwp500/sim/calibration.py
src/nwp500/sim/circulation.py
src/nwp500/sim/codec.py
src/nwp500/sim/cold_supply.py
src/nwp500/sim/controller.py
src/nwp500/sim/decay.py
src/nwp500/sim/defaults.py
src/nwp500/sim/delivery.py
src/nwp500/sim/draw_forecast.py
src/nwp500/sim/engine.py
src/nwp500/sim/extensions.py
src/nwp500/sim/heat_pump_recovery.py
src/nwp500/sim/heating_trajectory.py
src/nwp500/sim/inputs.py
src/nwp500/sim/location_air.py
src/nwp500/sim/meter.py
src/nwp500/sim/observed.py
src/nwp500/sim/params.py
src/nwp500/sim/profile.py
src/nwp500/sim/ready.py
src/nwp500/sim/record.py
src/nwp500/sim/result.py
src/nwp500/sim/schedules.py
src/nwp500/sim/tank_physics.py
src/nwp500/sim/tou_triggers.py
src/nwp500/sim/units.py
src/nwp500/sim/physics/__init__.py
src/nwp500/sim/physics/compressor.py
src/nwp500/sim/physics/draw.py
src/nwp500/sim/physics/element.py
src/nwp500/sim/physics/refrigerant.py
src/nwp500/sim/physics/tank.py
src/nwp500_python.egg-info/PKG-INFO
src/nwp500_python.egg-info/SOURCES.txt
src/nwp500_python.egg-info/dependency_links.txt
src/nwp500_python.egg-info/entry_points.txt
src/nwp500_python.egg-info/not-zip-safe
src/nwp500_python.egg-info/requires.txt
src/nwp500_python.egg-info/scm_file_list.json
src/nwp500_python.egg-info/scm_version.json
src/nwp500_python.egg-info/top_level.txt
tests/_sim_site.py
tests/conftest.py
tests/test_api_endpoints_201.py
tests/test_api_helpers.py
tests/test_app_queries.py
tests/test_auth.py
tests/test_auth_session_lifecycle.py
tests/test_auth_session_refresh.py
tests/test_ble_mqtt_adapter.py
tests/test_ble_protocol.py
tests/test_bug_fixes.py
tests/test_canonical_schedule.py
tests/test_cli_basic.py
tests/test_cli_calibrate.py
tests/test_cli_commands.py
tests/test_cli_simulate.py
tests/test_cli_tristate_presentation.py
tests/test_command_decorators.py
tests/test_command_queue.py
tests/test_device_capabilities.py
tests/test_device_info_cache.py
tests/test_device_rest_models.py
tests/test_events.py
tests/test_exceptions.py
tests/test_model_converters.py
tests/test_models.py
tests/test_mqtt_clean_session_resume.py
tests/test_mqtt_client_init.py
tests/test_mqtt_control_fail.py
tests/test_mqtt_events.py
tests/test_mqtt_hypothesis.py
tests/test_mqtt_last_will.py
tests/test_mqtt_reconnection.py
tests/test_mqtt_reconnection_storm.py
tests/test_mqtt_reliability.py
tests/test_multi_device.py
tests/test_navilink_201_enums.py
tests/test_openei.py
tests/test_protocol_correctness.py
tests/test_public_api.py
tests/test_reservation_validation.py
tests/test_reservations.py
tests/test_sim_adapters.py
tests/test_sim_api.py
tests/test_sim_book.py
tests/test_sim_book_history.py
tests/test_sim_calibrate.py
tests/test_sim_calibration.py
tests/test_sim_change_history.py
tests/test_sim_circulation.py
tests/test_sim_codec.py
tests/test_sim_cold_supply.py
tests/test_sim_controller.py
tests/test_sim_defaults.py
tests/test_sim_draw_forecast.py
tests/test_sim_draw_loss.py
tests/test_sim_element.py
tests/test_sim_element_fit.py
tests/test_sim_forecast.py
tests/test_sim_golden.py
tests/test_sim_home_assistant.py
tests/test_sim_hot_water.py
tests/test_sim_import_contract.py
tests/test_sim_live.py
tests/test_sim_location_air.py
tests/test_sim_meter.py
tests/test_sim_no_clock_no_state.py
tests/test_sim_observed.py
tests/test_sim_profile.py
tests/test_sim_readiness.py
tests/test_sim_readiness_fit.py
tests/test_sim_ready.py
tests/test_sim_ready_api.py
tests/test_sim_replay.py
tests/test_sim_schedules.py
tests/test_sim_tank_physics.py
tests/test_status_history.py
tests/test_temperature_converters.py
tests/test_threading_model.py
tests/test_token_storage.py
tests/test_tou_api.py
tests/test_tou_schedule.py
tests/test_unit_switching.py
tests/test_unit_system_process_wide.py
tests/test_utility_modules.py
tests/test_utils.py
tests/fixtures/sim/engine_golden.json
tests/fixtures/sim/heater_params.json
tests/fixtures/sim/heater_params_fitted.json