From f4457a9d41ca9f91593d535193743cc9f31a879b Mon Sep 17 00:00:00 2001 From: Muriel2Horak <137921218+Muriel2Horak@users.noreply.github.com> Date: Tue, 13 Jan 2026 19:56:37 +0100 Subject: [PATCH 1/4] E2E fallback coverage + FE timeline refresh (#2) * Sync temp snapshot onto main * Fix CI analysis findings * Configure CodeFactor exclusions * Fix SonarCloud bugs and hotspots * Fix duplicate display in pricing overlay * Reduce CodeFactor findings * Fix CodeFactor issues * Address remaining CodeFactor issues * Fix remaining CodeFactor warnings * Add battery forecast helper modules * Move battery forecast HA sensor to module * Extract mode guard logic * Refactor charging plan helpers * Extract mode recommendation logic * Remove unused charging helper methods * Drop unused charging wrapper methods * Remove unused night target helper * Remove unused balancing helper block * Remove legacy forecast orchestrator * Remove unused timeline simulator * Remove unused forecast service * Remove unused forecast bridge and utils * Remove unused legacy files * Remove legacy battery forecast shim * Extract detail tab aggregation helpers * Extract unified cost tile helpers * Extract extended timeline builders * Extract plan storage helpers * Extract pricing and state helpers * Extract scenario analysis helpers * Extract interval grouping helpers * Split lifecycle and update helpers * Extract forecast sensor helpers * Extract forecast sensor setup * Split detail tab builders * Split hybrid strategy helpers * Split charging plan helpers * Split extended timeline summaries * Split unified cost tile helpers * Split plan storage helpers * Split spot price sensor modules * Remove legacy balancing module * Move balancing under battery_forecast * Move balancing helpers into package * Move plan storage into storage package * Move presentation helpers into package * Move battery forecast sensors into package * refactor(battery_forecast): group data and planning modules * refactor: split shield, config flow, and sensor runtime * Refactor modules and fix fixed pricing * Add local hassfest runner * Refactor forecast helpers and expand tests * Add coverage tests for timeline, shield, and sensors * test: expand planning and presentation coverage * test: expand coverage for helpers and storage * test: expand coverage for sensors, shield, and cost tile * test: expand shield core coverage * test: cover async_setup_entry cloud path * test: cover coordinator init branches * test: cover config distribution, options flow, api, profiles * test: cover config flow summary and yaml import * test: extend pricing flow and api balancing coverage * test: add wizard path and api error cases * test: cover solar forecast async_added_to_hass * test: close solar forecast async tasks * test: fix coordinator/shield setup and add services coverage * test: expand balancing manager coverage * test: cover shield queue, coordinator, setup entry * test: cover forecast update flow * test: cover precompute, detail blocks, ha sensor * test: cover init cleanup and mode tracker * test: cover balancing core and solar forecast sensor * test: cover shield validation paths * test: extend async_setup_entry coverage * test: cover coordinator spot price paths * test: cover config wizard steps and ha rest api views * test: add data source sensor coverage * test: expand coverage for stats, adaptive, data source, OTE * Improve coverage for coordinator, sensors, and analytics * Stub opentelemetry in tests * Reach 100% coverage for planner and storage * Expand coverage for planning and presentation * Increase coverage for history, CHMU, pricing, and OTE * Expand coverage for grid, recommended, and battery health sensors * Add test coverage for efficiency, OTE, recommended, and pricing * Improve test coverage for init and pricing sensors * Increase coordinator and data source coverage * Add tests to reach full coverage for core, API, sensors, services * Add coverage tests for adaptive profiles, notifications, config, and data sensor * Add HA REST API coverage tests * Add computed and statistics sensor coverage tests * Add analytics sensor coverage tests * Add pricing helper coverage tests * Add input helper coverage tests * Add solar forecast sensor coverage tests * Add coverage tests for shield, forecast, and config helpers * Add additional coverage tests for steps and sensors * Add coverage tests for config steps boiler and pricing migration * Add coverage tests for steps, sensors, unified cost helpers, and shield * Add battery forecast coverage tests * Expand coverage and stabilize tests * Add local checks and lock hashed requirements * Expand unit test coverage for sensors and helpers * Improve coverage for adaptive, shield, statistics, and solar sensors * Fix test isolation for box id resolution * Expand tests for config, telemetry, and physics helpers * Cover additional physics branches * Allow tracking config schema under custom_components * Achieve full unit test coverage * Add config module files * Improve planner guards and BE stability * Expand config flow runtime coverage * Fix balancing setup test for battery prediction flag * Add E2E test suite * Add solcast provider support and update security checks * Increase unit test coverage to 100% * Update coverage, sonar tooling, and tests * Finish coverage and remove duplicate blocks * Refactor solar wizard and forecast logic * Refine charging plan APIs and clean unused params * Refactor CHMU filtering helpers * Refactor setup helpers and logging * Fix setup helper return and balancing logging * Enable and implement E2E smoke tests * Refactor setup helpers and include E2E tests * Refactor detail tab block helpers * Refactor computed sensor helpers * Refactor data source helpers * Refactor analytics and statistics sensors * Refactor shield queue, dispatch, and timeline helpers * Refactor shield core, config steps, history, and pricing * Refactor balancing config, tariff validation, and summary helpers * Refactor detail tab, state attribute, and cost tile helpers * Fix tariff hour overlap validation * Refactor setup, coordinator, services, and sensors * Refactor OTE init helper * Refactor config flow option mapping * Refactor shield entity state matching * Refactor spot price fallback checks * Refactor computed sensor energy accumulation * Refactor statistics sensor restore helpers * Refactor HTML notification parsing * Refactor init helpers for Sonar cleanup * Fix device cleanup keep rules * Raise coverage to 100% and fix async warning * Fix async helper flagged by Sonar * Refactor service helpers and extend tests * Normalize logging in core modules * Refactor init and services smells * Fix coverage gaps and stabilize planners * Refactor sensors, queue, and API helpers * Refactor core planning and sensor helpers * Fix coverage gaps after refactor * Refactor sonar fixes * Fix refactor regressions and restore tests * Finalize coverage and isolate Sonar/E2E compose * Exclude FE tests from Sonar to silence baseline warning * Re-enable FE analysis in Sonar * Stabilize FE E2E and coverage checks * Stabilize E2E forecast updates and cookie handling * Add data-source fallback E2E and FE refresh test * Remove SonarQube artifacts from repo * Remove SonarQube files from repo * Fix CI deps, tighten API auth, and address review comments * Align dev deps with Python 3.12 CI * Regenerate dev requirements for Linux CI * Fix recommended sensor callbacks and coverage --- .codeclimate.yml | 5 + .codefactor.yml | 4 + .coveragerc | 8 + .eslintrc.json | 21 + .flake8 | 23 + .github/copilot-instructions.md | 2 - .github/workflows/hacs.yml | 5 +- .github/workflows/hassfest.yml | 5 +- .github/workflows/quality.yml | 46 + .github/workflows/release.yml | 63 +- .github/workflows/test.yml | 65 +- .gitignore | 93 + .htmlhintrc.json | 9 + .safety-project.ini | 5 + .scannerwork/.sonar_lock | 0 .stylelintrc.json | 17 + .vscode/settings.json | 27 +- CHANGELOG.md | 227 + PR112_IMPROVEMENT_SUGGESTIONS.md | 155 + README.md | 318 +- TESTING.md | 184 + coverage.txt | 1986 +++++ custom_components/oig_cloud/__init__.py | 1830 +++- custom_components/oig_cloud/api/__init__.py | 5 + custom_components/oig_cloud/api/api_chmu.py | 765 ++ .../oig_cloud/api/ha_rest_api.py | 1108 +++ .../oig_cloud/api/oig_cloud_api.py | 425 - .../api/oig_cloud_session_manager.py | 468 + custom_components/oig_cloud/api/ote_api.py | 745 ++ .../oig_cloud/api/planning_api.py | 345 + .../oig_cloud/battery_forecast/__init__.py | 83 + .../battery_forecast/balancing/__init__.py | 29 + .../battery_forecast/balancing/core.py | 1462 +++ .../battery_forecast/balancing/executor.py | 484 + .../battery_forecast/balancing/helpers.py | 103 + .../battery_forecast/balancing/plan.py | 224 + .../oig_cloud/battery_forecast/config.py | 158 + .../battery_forecast/data/__init__.py | 1 + .../data/adaptive_consumption.py | 644 ++ .../battery_forecast/data/battery_state.py | 324 + .../battery_forecast/data/history.py | 581 ++ .../oig_cloud/battery_forecast/data/input.py | 197 + .../battery_forecast/data/load_profiles.py | 63 + .../battery_forecast/data/pricing.py | 309 + .../battery_forecast/data/solar_forecast.py | 129 + .../battery_forecast/physics/__init__.py | 13 + .../physics/interval_simulator.py | 212 + .../battery_forecast/planning/__init__.py | 1 + .../battery_forecast/planning/auto_switch.py | 574 ++ .../planning/charging_helpers.py | 84 + .../planning/charging_plan.py | 601 ++ .../planning/charging_plan_adjustments.py | 219 + .../planning/charging_plan_utils.py | 281 + .../planning/forecast_update.py | 746 ++ .../planning/interval_grouping.py | 166 + .../battery_forecast/planning/mode_guard.py | 417 + .../planning/mode_recommendations.py | 383 + .../planning/scenario_analysis.py | 665 ++ .../battery_forecast/presentation/__init__.py | 1 + .../presentation/detail_tabs.py | 106 + .../presentation/detail_tabs_blocks.py | 835 ++ .../presentation/detail_tabs_summary.py | 256 + .../presentation/plan_tabs.py | 71 + .../presentation/precompute.py | 139 + .../presentation/state_attributes.py | 170 + .../presentation/unified_cost_tile.py | 97 + .../presentation/unified_cost_tile_helpers.py | 983 +++ .../battery_forecast/sensors/__init__.py | 1 + .../sensors/efficiency_sensor.py | 655 ++ .../sensors/grid_charging_sensor.py | 576 ++ .../battery_forecast/sensors/ha_sensor.py | 777 ++ .../sensors/recommended_sensor.py | 671 ++ .../sensors/sensor_lifecycle.py | 271 + .../sensors/sensor_runtime.py | 77 + .../battery_forecast/sensors/sensor_setup.py | 152 + .../battery_forecast/storage/__init__.py | 33 + .../storage/plan_storage_aggregate.py | 322 + .../storage/plan_storage_baseline.py | 367 + .../storage/plan_storage_daily.py | 233 + .../storage/plan_storage_io.py | 179 + .../battery_forecast/strategy/__init__.py | 10 + .../battery_forecast/strategy/balancing.py | 19 + .../battery_forecast/strategy/hybrid.py | 700 ++ .../strategy/hybrid_planning.py | 674 ++ .../strategy/hybrid_scoring.py | 388 + .../oig_cloud/battery_forecast/task_utils.py | 55 + .../battery_forecast/timeline/__init__.py | 3 + .../battery_forecast/timeline/extended.py | 883 ++ .../timeline/extended_summary.py | 290 + .../battery_forecast/timeline/planner.py | 373 + .../oig_cloud/battery_forecast/types.py | 418 + .../battery_forecast/utils_common.py | 96 + custom_components/oig_cloud/binary_sensor.py | 181 +- .../oig_cloud/binary_sensor_types.py | 14 +- .../oig_cloud/boiler/__init__.py | 12 + .../oig_cloud/boiler/api_views.py | 165 + custom_components/oig_cloud/boiler/const.py | 58 + .../oig_cloud/boiler/coordinator.py | 387 + custom_components/oig_cloud/boiler/models.py | 67 + custom_components/oig_cloud/boiler/planner.py | 291 + .../oig_cloud/boiler/profiler.py | 247 + custom_components/oig_cloud/boiler/sensors.py | 393 + custom_components/oig_cloud/boiler/utils.py | 141 + .../oig_cloud/config/__init__.py | 1 + custom_components/oig_cloud/config/schema.py | 185 + custom_components/oig_cloud/config/steps.py | 2649 ++++++ .../oig_cloud/config/validation.py | 104 + custom_components/oig_cloud/config_flow.py | 114 +- custom_components/oig_cloud/const.py | 108 +- custom_components/oig_cloud/coordinator.py | 57 - custom_components/oig_cloud/core/__init__.py | 1 + .../oig_cloud/core/coordinator.py | 1109 +++ .../oig_cloud/core/data_source.py | 695 ++ .../oig_cloud/core/local_mapper.py | 366 + .../oig_cloud/core/oig_cloud_notification.py | 1077 +++ .../oig_cloud/core/telemetry_store.py | 92 + .../oig_cloud/entities/__init__.py | 1 + .../entities/adaptive_load_profiles_sensor.py | 1344 +++ .../oig_cloud/entities/analytics_sensor.py | 913 ++ .../oig_cloud/entities/base_sensor.py | 64 + .../entities/battery_balancing_sensor.py | 351 + .../entities/battery_health_sensor.py | 574 ++ .../oig_cloud/entities/chmu_sensor.py | 491 ++ .../oig_cloud/entities/computed_sensor.py | 893 ++ .../oig_cloud/entities/data_sensor.py | 739 ++ .../oig_cloud/entities/data_source_sensor.py | 110 + .../oig_cloud/entities/sensor_runtime.py | 147 + .../oig_cloud/entities/sensor_setup.py | 141 + .../oig_cloud/entities/shield_sensor.py | 457 + .../entities/solar_forecast_sensor.py | 1029 +++ .../oig_cloud/entities/statistics_sensor.py | 1302 +++ .../oig_cloud/lib/oig_cloud_client/LICENSE | 21 + .../lib/oig_cloud_client/__init__.py | 0 .../lib/oig_cloud_client/api/__init__.py | 0 .../lib/oig_cloud_client/api/oig_cloud_api.py | 828 ++ .../lib/oig_cloud_client/api/ote_api.py | 451 + .../{ => lib/oig_cloud_client}/models.py | 80 +- custom_components/oig_cloud/manifest.json | 13 +- .../oig_cloud/oig_cloud_computed_sensor.py | 215 - .../oig_cloud/oig_cloud_data_sensor.py | 146 - .../oig_cloud/oig_cloud_sensor.py | 126 - custom_components/oig_cloud/physics.py | 348 + .../oig_cloud/pricing/__init__.py | 1 + .../oig_cloud/pricing/spot_price_15min.py | 163 + .../pricing/spot_price_15min_base.py | 357 + .../pricing/spot_price_export_15min.py | 120 + .../oig_cloud/pricing/spot_price_hourly.py | 463 + .../oig_cloud/pricing/spot_price_sensor.py | 13 + .../oig_cloud/pricing/spot_price_shared.py | 76 + custom_components/oig_cloud/release_const.py | 2 - custom_components/oig_cloud/sensor.py | 1761 +++- custom_components/oig_cloud/sensor_types.py | 240 +- custom_components/oig_cloud/sensors/README.md | 245 + .../oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py | 63 +- .../oig_cloud/sensors/SENSOR_TYPES_AC_IN.py | 67 +- .../oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py | 40 +- .../oig_cloud/sensors/SENSOR_TYPES_BATT.py | 190 +- .../oig_cloud/sensors/SENSOR_TYPES_BOILER.py | 78 +- .../oig_cloud/sensors/SENSOR_TYPES_BOX.py | 26 +- .../oig_cloud/sensors/SENSOR_TYPES_CHMU.py | 35 + .../sensors/SENSOR_TYPES_COMPUTED.py | 202 + .../oig_cloud/sensors/SENSOR_TYPES_DC_IN.py | 35 +- .../sensors/SENSOR_TYPES_EXTENDED_BATT.py | 118 + .../sensors/SENSOR_TYPES_EXTENDED_FVE.py | 83 + .../sensors/SENSOR_TYPES_EXTENDED_GRID.py | 53 + .../sensors/SENSOR_TYPES_EXTENDED_LOAD.py | 43 + .../oig_cloud/sensors/SENSOR_TYPES_MISC.py | 138 +- .../oig_cloud/sensors/SENSOR_TYPES_SHIELD.py | 56 + .../sensors/SENSOR_TYPES_SOLAR_FORECAST.py | 45 + .../oig_cloud/sensors/SENSOR_TYPES_SPOT.py | 165 + .../sensors/SENSOR_TYPES_STATISTICS.py | 356 + custom_components/oig_cloud/services.py | 248 - custom_components/oig_cloud/services.yaml | 210 +- .../oig_cloud/services/__init__.py | 916 ++ custom_components/oig_cloud/shared/logging.py | 126 +- custom_components/oig_cloud/shared/shared.py | 27 - custom_components/oig_cloud/shared/tracing.py | 46 - .../oig_cloud/shield/__init__.py | 1 + custom_components/oig_cloud/shield/core.py | 733 ++ .../oig_cloud/shield/dispatch.py | 763 ++ custom_components/oig_cloud/shield/queue.py | 657 ++ .../oig_cloud/shield/validation.py | 469 + custom_components/oig_cloud/strings.json | 520 +- .../oig_cloud/translations/cs.json | 752 +- .../oig_cloud/translations/en.json | 944 +- custom_components/oig_cloud/www/.htmlhintrc | 3 + custom_components/oig_cloud/www/.stylelintrc | 6 + .../oig_cloud/www/boiler-tab.html | 348 + .../oig_cloud/www/css/02-layout.css | 71 + .../oig_cloud/www/css/03-typography.css | 113 + .../oig_cloud/www/css/components/buttons.css | 392 + .../oig_cloud/www/css/components/cards.css | 263 + .../oig_cloud/www/css/components/modals.css | 224 + .../oig_cloud/www/css/components/tiles.css | 15 + .../www/css/features/balancing-card.css | 38 + .../www/css/features/battery-health.css | 358 + .../www/css/features/custom-tiles.css | 1042 +++ .../www/css/features/detail-tabs.css | 832 ++ .../www/css/features/today-plan-tile.css | 351 + .../oig_cloud/www/css/utils/animations.css | 316 + .../oig_cloud/www/css/variables.css | 1031 +++ .../oig_cloud/www/dashboard-styles.css | 7843 +++++++++++++++++ .../oig_cloud/www/dashboard.html | 1092 +++ .../oig_cloud/www/js/components/dialog.js | 1263 +++ .../www/js/components/grid-charging.js | 934 ++ .../oig_cloud/www/js/components/shield.js | 1902 ++++ .../oig_cloud/www/js/components/tiles.js | 740 ++ .../oig_cloud/www/js/core/api.js | 537 ++ .../oig_cloud/www/js/core/core.js | 1179 +++ .../oig_cloud/www/js/core/state-watcher.js | 151 + .../oig_cloud/www/js/core/utils.js | 571 ++ .../oig_cloud/www/js/features/analytics.js | 861 ++ .../www/js/features/battery-health.js | 414 + .../oig_cloud/www/js/features/boiler.js | 935 ++ .../oig_cloud/www/js/features/chmu.js | 330 + .../oig_cloud/www/js/features/detail-tabs.js | 833 ++ .../oig_cloud/www/js/features/flow.js | 2149 +++++ .../oig_cloud/www/js/features/pricing.js | 2319 +++++ .../oig_cloud/www/js/features/timeline.js | 3820 ++++++++ .../oig_cloud/www/js/layout/layout-manager.js | 466 + .../oig_cloud/www/modules/boiler-chart.js | 417 + .../www/modules/cost-comparison-tile.js | 151 + .../oig_cloud/www/modules/today-plan-tile.js | 301 + .../www/oig-battery-forecast-card.js | 836 ++ docker-compose.e2e.yml | 19 + docker-compose.yml | 31 + docs/grid_delivery_script_sample.yaml | 32 - docs/images/dlazdice.png | Bin 0 -> 779430 bytes docs/{ => images}/energy.png | Bin docs/images/flow.png | Bin 0 -> 1598355 bytes docs/{ => images}/login.png | Bin docs/images/nastaveni.png | Bin 0 -> 94209 bytes docs/images/planovac.png | Bin 0 -> 1518760 bytes docs/images/predikce.png | Bin 0 -> 1808941 bytes docs/user/AUTOMATIONS.md | 799 ++ docs/user/CHMU_WARNINGS.md | 31 + docs/user/CONFIGURATION.md | 509 ++ docs/user/DASHBOARD.md | 657 ++ docs/user/DATA_SOURCE.md | 68 + docs/user/ENTITIES.md | 508 ++ docs/user/FAQ.md | 677 ++ docs/user/LIVE_DATA_REQUIREMENT.md | 20 + docs/user/PLANNER.md | 60 + docs/user/SERVICES.md | 681 ++ docs/user/SHIELD.md | 763 ++ docs/user/STATISTICS.md | 72 + docs/user/TROUBLESHOOTING.md | 1069 +++ eslint.config.js | 46 + hacs.json | 5 +- package-lock.json | 5372 +++++++++++ package.json | 39 + playwright.config.js | 36 + pyrightconfig.json | 30 + pytest.ini | 11 + requirements-dev.in | 18 + requirements-dev.txt | 2595 +++++- requirements.in | 18 + requirements.txt | 475 +- scripts/fe_mock_down.sh | 4 + scripts/fe_mock_up.sh | 4 + scripts/run_fe_e2e.sh | 23 + scripts/run_hassfest.sh | 26 + scripts/run_local_checks.sh | 51 + settings.json | 15 + tests/__init__.py | 0 tests/conftest.py | 118 + tests/e2e/conftest.py | 231 + tests/e2e/test_auto_mode_switch_e2e.py | 25 + tests/e2e/test_config_flow_modules_e2e.py | 175 + tests/e2e/test_config_flow_runtime_e2e.py | 308 + tests/e2e/test_critical_sensors_e2e.py | 42 + tests/e2e/test_data_refresh_fallback_e2e.py | 210 + .../test_forecast_provider_recompute_e2e.py | 72 + tests/e2e/test_frontend_flow_e2e.py | 51 + tests/e2e/test_pricing_timeline_e2e.py | 146 + tests/e2e/test_runtime_history_e2e.py | 162 + tests/e2e/test_services_e2e.py | 107 + tests/fe/mock/Dockerfile | 13 + tests/fe/mock/fixtures/cloud.json | 318 + tests/fe/mock/fixtures/cloud_fixed.json | 416 + tests/fe/mock/fixtures/local.json | 281 + tests/fe/mock/fixtures/proxy.json | 281 + tests/fe/mock/server.js | 211 + tests/fe/specs/dashboard.spec.js | 536 ++ tests/fe/unit/helpers/load_script.js | 9 + tests/fe/unit/utils.test.js | 45 + tests/planner_utils.py | 205 + tests/simulate_interval_standalone.py | 232 + tests/test_adaptive_consumption.py | 115 + tests/test_adaptive_consumption_more.py | 395 + ...test_adaptive_load_profiles_sensor_more.py | 408 + ...est_adaptive_load_profiles_sensor_more2.py | 757 ++ tests/test_api_chmu.py | 148 + tests/test_api_chmu_more.py | 269 + tests/test_balancing_core_additional.py | 932 ++ tests/test_balancing_core_extra.py | 269 + tests/test_balancing_core_more.py | 215 + tests/test_balancing_executor_more.py | 113 + tests/test_balancing_executor_more2.py | 62 + tests/test_balancing_helpers.py | 112 + tests/test_balancing_manager_core.py | 296 + tests/test_balancing_plan_more.py | 40 + tests/test_balancing_simulation.py | 447 + tests/test_base_sensor.py | 57 + tests/test_battery_efficiency_sensor.py | 528 ++ tests/test_battery_forecast_config_more.py | 18 + tests/test_battery_forecast_ha_sensor_more.py | 151 + .../test_battery_forecast_ha_sensor_more2.py | 232 + tests/test_battery_forecast_module.py | 324 + ...est_battery_forecast_remaining_coverage.py | 420 + ...st_battery_forecast_sensor_runtime_more.py | 104 + ...test_battery_forecast_sensor_setup_more.py | 80 + tests/test_battery_forecast_types_more.py | 21 + tests/test_battery_forecast_utils_common.py | 63 + tests/test_battery_state_helpers.py | 240 + tests/test_binary_sensor.py | 240 + tests/test_boiler_coordinator_more.py | 310 + tests/test_boiler_module.py | 550 ++ tests/test_boiler_sensors_more.py | 113 + tests/test_charging_plan_adjustments_more.py | 166 + tests/test_charging_plan_more.py | 156 + tests/test_charging_plan_more2.py | 176 + tests/test_charging_plan_more3.py | 71 + tests/test_config_flow_entry.py | 400 + tests/test_config_flow_module.py | 7 + tests/test_config_flow_quick_setup.py | 98 + tests/test_config_flow_wizard_steps.py | 155 + tests/test_config_helpers.py | 255 + tests/test_config_options_flow.py | 318 + .../test_config_steps_boiler_and_migration.py | 211 + tests/test_config_steps_distribution.py | 245 + tests/test_config_steps_flow.py | 117 + tests/test_config_steps_helpers_more.py | 69 + tests/test_config_steps_helpers_more2.py | 49 + tests/test_config_steps_more.py | 108 + tests/test_config_steps_more3.py | 83 + tests/test_config_steps_more4.py | 634 ++ tests/test_config_steps_payload.py | 54 + tests/test_config_steps_pricing.py | 393 + tests/test_config_steps_wizard_extra.py | 326 + tests/test_config_validation.py | 165 + tests/test_coordinator.py | 2244 ++++- tests/test_coverage_block_more.py | 723 ++ tests/test_coverage_block_more2.py | 430 + tests/test_coverage_block_more3.py | 184 + tests/test_coverage_block_more4.py | 402 + tests/test_data_sensor_extra.py | 176 + tests/test_data_sensor_grid_mode.py | 78 + tests/test_data_sensor_more.py | 474 + tests/test_data_source_controller.py | 902 ++ tests/test_data_source_helpers.py | 137 + tests/test_detail_tabs_blocks.py | 560 ++ tests/test_detail_tabs_summary.py | 74 + tests/test_dual_price_simulation.py | 629 ++ tests/test_entities_adaptive_load_profiles.py | 398 + tests/test_entities_analytics_sensor.py | 406 + tests/test_entities_analytics_sensor_edge.py | 29 + tests/test_entities_analytics_sensor_more.py | 153 + tests/test_entities_analytics_sensor_more2.py | 29 + tests/test_entities_analytics_sensor_more3.py | 114 + tests/test_entities_analytics_sensor_more4.py | 68 + tests/test_entities_analytics_sensor_more5.py | 148 + tests/test_entities_analytics_sensor_more6.py | 373 + .../test_entities_battery_balancing_sensor.py | 429 + ..._entities_battery_balancing_sensor_more.py | 173 + tests/test_entities_battery_health_sensor.py | 550 ++ tests/test_entities_chmu_sensor.py | 698 ++ tests/test_entities_computed_sensor.py | 330 + tests/test_entities_computed_sensor_edge.py | 16 + tests/test_entities_computed_sensor_more.py | 432 + tests/test_entities_computed_sensor_more2.py | 50 + tests/test_entities_computed_sensor_more3.py | 541 ++ tests/test_entities_data_sensor.py | 185 + tests/test_entities_data_sensor_more.py | 37 + tests/test_entities_data_sensor_more2.py | 11 + tests/test_entities_data_sensor_more3.py | 371 + tests/test_entities_data_source_sensor.py | 181 + tests/test_entities_runtime.py | 230 + tests/test_entities_shield_sensor.py | 420 + tests/test_entities_solar_forecast_sensor.py | 556 ++ ...est_entities_solar_forecast_sensor_more.py | 230 + ...st_entities_solar_forecast_sensor_more2.py | 282 + ...st_entities_solar_forecast_sensor_more3.py | 278 + ...st_entities_solar_forecast_sensor_more4.py | 447 + tests/test_entities_statistics_sensor.py | 434 + tests/test_entities_statistics_sensor_edge.py | 29 + tests/test_entities_statistics_sensor_more.py | 267 + .../test_entities_statistics_sensor_more2.py | 28 + .../test_entities_statistics_sensor_more3.py | 110 + .../test_entities_statistics_sensor_more4.py | 257 + .../test_entities_statistics_sensor_more5.py | 113 + .../test_entities_statistics_sensor_more6.py | 323 + .../test_entities_statistics_sensor_more7.py | 171 + .../test_entities_statistics_sensor_more8.py | 373 + tests/test_etag_caching.py | 274 + tests/test_extended_summary.py | 195 + tests/test_forecast_update.py | 361 + tests/test_forecast_update_more2.py | 770 ++ tests/test_grid_charging_plan_sensor.py | 701 ++ tests/test_ha_rest_api_helpers.py | 57 + tests/test_ha_rest_api_more.py | 471 + tests/test_ha_rest_api_views.py | 849 ++ tests/test_ha_sensor.py | 135 + tests/test_ha_sensor_proxy.py | 500 ++ tests/test_history_helpers.py | 496 ++ tests/test_home_ii_deficit_critical_bug.py | 94 + tests/test_hybrid_more2.py | 141 + tests/test_hybrid_planning_more2.py | 155 + tests/test_hybrid_scoring_helpers.py | 137 + tests/test_hybrid_scoring_more2.py | 198 + tests/test_init_cleanup.py | 430 + tests/test_init_extra.py | 476 + tests/test_init_frontend.py | 274 + tests/test_init_helpers.py | 324 + tests/test_init_setup_entry.py | 2721 ++++++ tests/test_input_helpers.py | 31 + tests/test_input_helpers_more.py | 103 + tests/test_interval_simulator.py | 151 + tests/test_load_and_solar_profiles.py | 135 + tests/test_load_profiles_more.py | 122 + tests/test_local_mapper.py | 56 + tests/test_local_mapper_more.py | 141 + tests/test_missing_coverage_helpers.py | 376 + tests/test_mode_recommendations.py | 317 + tests/test_mode_transition_tracker.py | 153 + tests/test_models.py | 317 +- tests/test_new_architecture.py | 571 ++ tests/test_oig_cloud_api.py | 1039 ++- tests/test_oig_cloud_notification.py | 90 + ...st_oig_cloud_notification_manager_more2.py | 405 + tests/test_oig_cloud_notification_more.py | 330 + tests/test_oig_cloud_session_manager.py | 258 + tests/test_ote_api.py | 905 ++ tests/test_physics.py | 101 + tests/test_plan_storage_aggregate.py | 242 + tests/test_plan_storage_baseline.py | 155 + tests/test_plan_storage_baseline_more.py | 63 + tests/test_plan_storage_baseline_more2.py | 143 + tests/test_plan_storage_daily.py | 280 + tests/test_planner_min_recovery.py | 69 + tests/test_planner_recommended_sensor.py | 652 ++ tests/test_planner_timeline.py | 270 + tests/test_planning_api.py | 294 + tests/test_planning_auto_switch.py | 730 ++ tests/test_planning_helpers.py | 1048 +++ tests/test_precompute.py | 108 + tests/test_precompute_unified_tile.py | 163 + tests/test_presentation_detail_tabs_more.py | 53 + tests/test_presentation_helpers.py | 190 + tests/test_presentation_precompute_more.py | 71 + tests/test_pricing_fixed_prices.py | 75 + tests/test_pricing_helpers.py | 347 + tests/test_pricing_more.py | 157 + tests/test_pricing_shared_helpers.py | 58 + tests/test_pricing_spot_price_15min.py | 539 ++ tests/test_pricing_spot_price_15min_base.py | 74 + tests/test_pricing_spot_price_export_15min.py | 466 + tests/test_pricing_spot_price_hourly.py | 550 ++ tests/test_pricing_spot_price_sensor.py | 12 + tests/test_scenario_analysis.py | 378 + tests/test_scenario_analysis_inputs.py | 50 + tests/test_sensor_cleanup_extra.py | 138 + tests/test_sensor_full_coverage.py | 1325 +++ tests/test_sensor_lifecycle.py | 352 + tests/test_sensor_registry_cleanup.py | 72 + tests/test_sensor_setup_entry.py | 225 + tests/test_sensor_setup_helpers.py | 149 + tests/test_sensor_setup_runtime.py | 95 + tests/test_services_box_id.py | 140 + tests/test_services_full_coverage.py | 487 + tests/test_services_module.py | 144 + tests/test_services_setup.py | 312 + tests/test_shared_logging.py | 140 + tests/test_shield_core.py | 797 ++ tests/test_shield_core_more.py | 122 + tests/test_shield_core_more2.py | 40 + tests/test_shield_core_more3.py | 35 + tests/test_shield_core_more4.py | 201 + tests/test_shield_core_more5.py | 348 + tests/test_shield_dispatch.py | 244 + tests/test_shield_dispatch_more.py | 162 + tests/test_shield_dispatch_more2.py | 78 + tests/test_shield_dispatch_more3.py | 93 + tests/test_shield_dispatch_more4.py | 29 + tests/test_shield_dispatch_more5.py | 154 + tests/test_shield_dispatch_more6.py | 407 + tests/test_shield_queue.py | 321 + tests/test_shield_queue_more.py | 88 + tests/test_shield_queue_more2.py | 57 + tests/test_shield_queue_more3.py | 313 + tests/test_shield_queue_more4.py | 48 + tests/test_shield_queue_more5.py | 154 + tests/test_shield_queue_more6.py | 333 + tests/test_shield_validation.py | 91 + tests/test_shield_validation_more.py | 77 + tests/test_shield_validation_more2.py | 155 + tests/test_shield_validation_more3.py | 177 + tests/test_simulate_interval_new.py | 633 ++ tests/test_solar_forecast_more.py | 91 + tests/test_task_and_storage.py | 267 + tests/test_telemetry_store.py | 146 + tests/test_timeline_extended.py | 175 + tests/test_timeline_extended_more.py | 150 + tests/test_timeline_extended_more2.py | 384 + tests/test_unified_cost_tile_helpers.py | 237 + tests/test_unified_cost_tile_helpers_more.py | 46 + tests/test_unified_cost_tile_helpers_more2.py | 60 + tests/test_unified_cost_tile_helpers_more3.py | 58 + tests/test_unified_cost_tile_helpers_more4.py | 127 + tests/test_unified_cost_tile_helpers_more6.py | 321 + tests/test_unified_cost_tile_more5.py | 31 + vitest.config.js | 12 + 512 files changed, 174525 insertions(+), 2823 deletions(-) create mode 100644 .codeclimate.yml create mode 100644 .codefactor.yml create mode 100644 .coveragerc create mode 100644 .eslintrc.json create mode 100644 .flake8 delete mode 100644 .github/copilot-instructions.md create mode 100644 .github/workflows/quality.yml create mode 100644 .htmlhintrc.json create mode 100644 .safety-project.ini create mode 100644 .scannerwork/.sonar_lock create mode 100644 .stylelintrc.json create mode 100644 CHANGELOG.md create mode 100644 PR112_IMPROVEMENT_SUGGESTIONS.md create mode 100644 TESTING.md create mode 100644 coverage.txt create mode 100644 custom_components/oig_cloud/api/__init__.py create mode 100644 custom_components/oig_cloud/api/api_chmu.py create mode 100644 custom_components/oig_cloud/api/ha_rest_api.py delete mode 100644 custom_components/oig_cloud/api/oig_cloud_api.py create mode 100644 custom_components/oig_cloud/api/oig_cloud_session_manager.py create mode 100644 custom_components/oig_cloud/api/ote_api.py create mode 100644 custom_components/oig_cloud/api/planning_api.py create mode 100644 custom_components/oig_cloud/battery_forecast/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/balancing/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/balancing/core.py create mode 100644 custom_components/oig_cloud/battery_forecast/balancing/executor.py create mode 100644 custom_components/oig_cloud/battery_forecast/balancing/helpers.py create mode 100644 custom_components/oig_cloud/battery_forecast/balancing/plan.py create mode 100644 custom_components/oig_cloud/battery_forecast/config.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/adaptive_consumption.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/battery_state.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/history.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/input.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/load_profiles.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/pricing.py create mode 100644 custom_components/oig_cloud/battery_forecast/data/solar_forecast.py create mode 100644 custom_components/oig_cloud/battery_forecast/physics/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/physics/interval_simulator.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/auto_switch.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/charging_helpers.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/charging_plan.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/charging_plan_adjustments.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/charging_plan_utils.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/forecast_update.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/interval_grouping.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/mode_guard.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/mode_recommendations.py create mode 100644 custom_components/oig_cloud/battery_forecast/planning/scenario_analysis.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/detail_tabs.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_blocks.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_summary.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/plan_tabs.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/precompute.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/state_attributes.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile.py create mode 100644 custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile_helpers.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/efficiency_sensor.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/grid_charging_sensor.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/ha_sensor.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/recommended_sensor.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/sensor_lifecycle.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/sensor_runtime.py create mode 100644 custom_components/oig_cloud/battery_forecast/sensors/sensor_setup.py create mode 100644 custom_components/oig_cloud/battery_forecast/storage/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/storage/plan_storage_aggregate.py create mode 100644 custom_components/oig_cloud/battery_forecast/storage/plan_storage_baseline.py create mode 100644 custom_components/oig_cloud/battery_forecast/storage/plan_storage_daily.py create mode 100644 custom_components/oig_cloud/battery_forecast/storage/plan_storage_io.py create mode 100644 custom_components/oig_cloud/battery_forecast/strategy/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/strategy/balancing.py create mode 100644 custom_components/oig_cloud/battery_forecast/strategy/hybrid.py create mode 100644 custom_components/oig_cloud/battery_forecast/strategy/hybrid_planning.py create mode 100644 custom_components/oig_cloud/battery_forecast/strategy/hybrid_scoring.py create mode 100644 custom_components/oig_cloud/battery_forecast/task_utils.py create mode 100644 custom_components/oig_cloud/battery_forecast/timeline/__init__.py create mode 100644 custom_components/oig_cloud/battery_forecast/timeline/extended.py create mode 100644 custom_components/oig_cloud/battery_forecast/timeline/extended_summary.py create mode 100644 custom_components/oig_cloud/battery_forecast/timeline/planner.py create mode 100644 custom_components/oig_cloud/battery_forecast/types.py create mode 100644 custom_components/oig_cloud/battery_forecast/utils_common.py create mode 100644 custom_components/oig_cloud/boiler/__init__.py create mode 100644 custom_components/oig_cloud/boiler/api_views.py create mode 100644 custom_components/oig_cloud/boiler/const.py create mode 100644 custom_components/oig_cloud/boiler/coordinator.py create mode 100644 custom_components/oig_cloud/boiler/models.py create mode 100644 custom_components/oig_cloud/boiler/planner.py create mode 100644 custom_components/oig_cloud/boiler/profiler.py create mode 100644 custom_components/oig_cloud/boiler/sensors.py create mode 100644 custom_components/oig_cloud/boiler/utils.py create mode 100644 custom_components/oig_cloud/config/__init__.py create mode 100644 custom_components/oig_cloud/config/schema.py create mode 100644 custom_components/oig_cloud/config/steps.py create mode 100644 custom_components/oig_cloud/config/validation.py delete mode 100644 custom_components/oig_cloud/coordinator.py create mode 100644 custom_components/oig_cloud/core/__init__.py create mode 100644 custom_components/oig_cloud/core/coordinator.py create mode 100644 custom_components/oig_cloud/core/data_source.py create mode 100644 custom_components/oig_cloud/core/local_mapper.py create mode 100644 custom_components/oig_cloud/core/oig_cloud_notification.py create mode 100644 custom_components/oig_cloud/core/telemetry_store.py create mode 100644 custom_components/oig_cloud/entities/__init__.py create mode 100644 custom_components/oig_cloud/entities/adaptive_load_profiles_sensor.py create mode 100644 custom_components/oig_cloud/entities/analytics_sensor.py create mode 100644 custom_components/oig_cloud/entities/base_sensor.py create mode 100644 custom_components/oig_cloud/entities/battery_balancing_sensor.py create mode 100644 custom_components/oig_cloud/entities/battery_health_sensor.py create mode 100644 custom_components/oig_cloud/entities/chmu_sensor.py create mode 100755 custom_components/oig_cloud/entities/computed_sensor.py create mode 100755 custom_components/oig_cloud/entities/data_sensor.py create mode 100644 custom_components/oig_cloud/entities/data_source_sensor.py create mode 100644 custom_components/oig_cloud/entities/sensor_runtime.py create mode 100644 custom_components/oig_cloud/entities/sensor_setup.py create mode 100644 custom_components/oig_cloud/entities/shield_sensor.py create mode 100755 custom_components/oig_cloud/entities/solar_forecast_sensor.py create mode 100755 custom_components/oig_cloud/entities/statistics_sensor.py create mode 100644 custom_components/oig_cloud/lib/oig_cloud_client/LICENSE create mode 100644 custom_components/oig_cloud/lib/oig_cloud_client/__init__.py create mode 100644 custom_components/oig_cloud/lib/oig_cloud_client/api/__init__.py create mode 100644 custom_components/oig_cloud/lib/oig_cloud_client/api/oig_cloud_api.py create mode 100644 custom_components/oig_cloud/lib/oig_cloud_client/api/ote_api.py rename custom_components/oig_cloud/{ => lib/oig_cloud_client}/models.py (91%) delete mode 100644 custom_components/oig_cloud/oig_cloud_computed_sensor.py delete mode 100644 custom_components/oig_cloud/oig_cloud_data_sensor.py delete mode 100644 custom_components/oig_cloud/oig_cloud_sensor.py create mode 100644 custom_components/oig_cloud/physics.py create mode 100644 custom_components/oig_cloud/pricing/__init__.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_15min.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_15min_base.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_export_15min.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_hourly.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_sensor.py create mode 100644 custom_components/oig_cloud/pricing/spot_price_shared.py delete mode 100644 custom_components/oig_cloud/release_const.py mode change 100644 => 100755 custom_components/oig_cloud/sensor.py mode change 100644 => 100755 custom_components/oig_cloud/sensor_types.py create mode 100644 custom_components/oig_cloud/sensors/README.md mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_IN.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_BATT.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_BOILER.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_BOX.py create mode 100644 custom_components/oig_cloud/sensors/SENSOR_TYPES_CHMU.py create mode 100644 custom_components/oig_cloud/sensors/SENSOR_TYPES_COMPUTED.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_DC_IN.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_BATT.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_FVE.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_GRID.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_LOAD.py mode change 100644 => 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_MISC.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_SHIELD.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_SOLAR_FORECAST.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_SPOT.py create mode 100755 custom_components/oig_cloud/sensors/SENSOR_TYPES_STATISTICS.py delete mode 100644 custom_components/oig_cloud/services.py create mode 100755 custom_components/oig_cloud/services/__init__.py delete mode 100644 custom_components/oig_cloud/shared/shared.py delete mode 100644 custom_components/oig_cloud/shared/tracing.py create mode 100644 custom_components/oig_cloud/shield/__init__.py create mode 100755 custom_components/oig_cloud/shield/core.py create mode 100644 custom_components/oig_cloud/shield/dispatch.py create mode 100644 custom_components/oig_cloud/shield/queue.py create mode 100644 custom_components/oig_cloud/shield/validation.py create mode 100644 custom_components/oig_cloud/www/.htmlhintrc create mode 100644 custom_components/oig_cloud/www/.stylelintrc create mode 100644 custom_components/oig_cloud/www/boiler-tab.html create mode 100644 custom_components/oig_cloud/www/css/02-layout.css create mode 100644 custom_components/oig_cloud/www/css/03-typography.css create mode 100644 custom_components/oig_cloud/www/css/components/buttons.css create mode 100644 custom_components/oig_cloud/www/css/components/cards.css create mode 100644 custom_components/oig_cloud/www/css/components/modals.css create mode 100644 custom_components/oig_cloud/www/css/components/tiles.css create mode 100644 custom_components/oig_cloud/www/css/features/balancing-card.css create mode 100644 custom_components/oig_cloud/www/css/features/battery-health.css create mode 100644 custom_components/oig_cloud/www/css/features/custom-tiles.css create mode 100644 custom_components/oig_cloud/www/css/features/detail-tabs.css create mode 100644 custom_components/oig_cloud/www/css/features/today-plan-tile.css create mode 100644 custom_components/oig_cloud/www/css/utils/animations.css create mode 100644 custom_components/oig_cloud/www/css/variables.css create mode 100644 custom_components/oig_cloud/www/dashboard-styles.css create mode 100644 custom_components/oig_cloud/www/dashboard.html create mode 100644 custom_components/oig_cloud/www/js/components/dialog.js create mode 100644 custom_components/oig_cloud/www/js/components/grid-charging.js create mode 100644 custom_components/oig_cloud/www/js/components/shield.js create mode 100644 custom_components/oig_cloud/www/js/components/tiles.js create mode 100644 custom_components/oig_cloud/www/js/core/api.js create mode 100644 custom_components/oig_cloud/www/js/core/core.js create mode 100644 custom_components/oig_cloud/www/js/core/state-watcher.js create mode 100644 custom_components/oig_cloud/www/js/core/utils.js create mode 100644 custom_components/oig_cloud/www/js/features/analytics.js create mode 100644 custom_components/oig_cloud/www/js/features/battery-health.js create mode 100644 custom_components/oig_cloud/www/js/features/boiler.js create mode 100644 custom_components/oig_cloud/www/js/features/chmu.js create mode 100644 custom_components/oig_cloud/www/js/features/detail-tabs.js create mode 100644 custom_components/oig_cloud/www/js/features/flow.js create mode 100644 custom_components/oig_cloud/www/js/features/pricing.js create mode 100644 custom_components/oig_cloud/www/js/features/timeline.js create mode 100644 custom_components/oig_cloud/www/js/layout/layout-manager.js create mode 100644 custom_components/oig_cloud/www/modules/boiler-chart.js create mode 100644 custom_components/oig_cloud/www/modules/cost-comparison-tile.js create mode 100644 custom_components/oig_cloud/www/modules/today-plan-tile.js create mode 100644 custom_components/oig_cloud/www/oig-battery-forecast-card.js create mode 100644 docker-compose.e2e.yml create mode 100644 docker-compose.yml delete mode 100644 docs/grid_delivery_script_sample.yaml create mode 100644 docs/images/dlazdice.png rename docs/{ => images}/energy.png (100%) create mode 100644 docs/images/flow.png rename docs/{ => images}/login.png (100%) create mode 100644 docs/images/nastaveni.png create mode 100644 docs/images/planovac.png create mode 100644 docs/images/predikce.png create mode 100644 docs/user/AUTOMATIONS.md create mode 100644 docs/user/CHMU_WARNINGS.md create mode 100644 docs/user/CONFIGURATION.md create mode 100644 docs/user/DASHBOARD.md create mode 100644 docs/user/DATA_SOURCE.md create mode 100644 docs/user/ENTITIES.md create mode 100644 docs/user/FAQ.md create mode 100644 docs/user/LIVE_DATA_REQUIREMENT.md create mode 100644 docs/user/PLANNER.md create mode 100644 docs/user/SERVICES.md create mode 100644 docs/user/SHIELD.md create mode 100644 docs/user/STATISTICS.md create mode 100644 docs/user/TROUBLESHOOTING.md create mode 100644 eslint.config.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 playwright.config.js create mode 100644 pyrightconfig.json create mode 100644 pytest.ini create mode 100644 requirements-dev.in create mode 100644 requirements.in create mode 100755 scripts/fe_mock_down.sh create mode 100755 scripts/fe_mock_up.sh create mode 100755 scripts/run_fe_e2e.sh create mode 100755 scripts/run_hassfest.sh create mode 100755 scripts/run_local_checks.sh create mode 100644 settings.json create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/e2e/conftest.py create mode 100644 tests/e2e/test_auto_mode_switch_e2e.py create mode 100644 tests/e2e/test_config_flow_modules_e2e.py create mode 100644 tests/e2e/test_config_flow_runtime_e2e.py create mode 100644 tests/e2e/test_critical_sensors_e2e.py create mode 100644 tests/e2e/test_data_refresh_fallback_e2e.py create mode 100644 tests/e2e/test_forecast_provider_recompute_e2e.py create mode 100644 tests/e2e/test_frontend_flow_e2e.py create mode 100644 tests/e2e/test_pricing_timeline_e2e.py create mode 100644 tests/e2e/test_runtime_history_e2e.py create mode 100644 tests/e2e/test_services_e2e.py create mode 100644 tests/fe/mock/Dockerfile create mode 100644 tests/fe/mock/fixtures/cloud.json create mode 100644 tests/fe/mock/fixtures/cloud_fixed.json create mode 100644 tests/fe/mock/fixtures/local.json create mode 100644 tests/fe/mock/fixtures/proxy.json create mode 100644 tests/fe/mock/server.js create mode 100644 tests/fe/specs/dashboard.spec.js create mode 100644 tests/fe/unit/helpers/load_script.js create mode 100644 tests/fe/unit/utils.test.js create mode 100644 tests/planner_utils.py create mode 100644 tests/simulate_interval_standalone.py create mode 100644 tests/test_adaptive_consumption.py create mode 100644 tests/test_adaptive_consumption_more.py create mode 100644 tests/test_adaptive_load_profiles_sensor_more.py create mode 100644 tests/test_adaptive_load_profiles_sensor_more2.py create mode 100644 tests/test_api_chmu.py create mode 100644 tests/test_api_chmu_more.py create mode 100644 tests/test_balancing_core_additional.py create mode 100644 tests/test_balancing_core_extra.py create mode 100644 tests/test_balancing_core_more.py create mode 100644 tests/test_balancing_executor_more.py create mode 100644 tests/test_balancing_executor_more2.py create mode 100644 tests/test_balancing_helpers.py create mode 100644 tests/test_balancing_manager_core.py create mode 100644 tests/test_balancing_plan_more.py create mode 100644 tests/test_balancing_simulation.py create mode 100644 tests/test_base_sensor.py create mode 100644 tests/test_battery_efficiency_sensor.py create mode 100644 tests/test_battery_forecast_config_more.py create mode 100644 tests/test_battery_forecast_ha_sensor_more.py create mode 100644 tests/test_battery_forecast_ha_sensor_more2.py create mode 100644 tests/test_battery_forecast_module.py create mode 100644 tests/test_battery_forecast_remaining_coverage.py create mode 100644 tests/test_battery_forecast_sensor_runtime_more.py create mode 100644 tests/test_battery_forecast_sensor_setup_more.py create mode 100644 tests/test_battery_forecast_types_more.py create mode 100644 tests/test_battery_forecast_utils_common.py create mode 100644 tests/test_battery_state_helpers.py create mode 100644 tests/test_binary_sensor.py create mode 100644 tests/test_boiler_coordinator_more.py create mode 100644 tests/test_boiler_module.py create mode 100644 tests/test_boiler_sensors_more.py create mode 100644 tests/test_charging_plan_adjustments_more.py create mode 100644 tests/test_charging_plan_more.py create mode 100644 tests/test_charging_plan_more2.py create mode 100644 tests/test_charging_plan_more3.py create mode 100644 tests/test_config_flow_entry.py create mode 100644 tests/test_config_flow_module.py create mode 100644 tests/test_config_flow_quick_setup.py create mode 100644 tests/test_config_flow_wizard_steps.py create mode 100644 tests/test_config_helpers.py create mode 100644 tests/test_config_options_flow.py create mode 100644 tests/test_config_steps_boiler_and_migration.py create mode 100644 tests/test_config_steps_distribution.py create mode 100644 tests/test_config_steps_flow.py create mode 100644 tests/test_config_steps_helpers_more.py create mode 100644 tests/test_config_steps_helpers_more2.py create mode 100644 tests/test_config_steps_more.py create mode 100644 tests/test_config_steps_more3.py create mode 100644 tests/test_config_steps_more4.py create mode 100644 tests/test_config_steps_payload.py create mode 100644 tests/test_config_steps_pricing.py create mode 100644 tests/test_config_steps_wizard_extra.py create mode 100644 tests/test_config_validation.py create mode 100644 tests/test_coverage_block_more.py create mode 100644 tests/test_coverage_block_more2.py create mode 100644 tests/test_coverage_block_more3.py create mode 100644 tests/test_coverage_block_more4.py create mode 100644 tests/test_data_sensor_extra.py create mode 100644 tests/test_data_sensor_grid_mode.py create mode 100644 tests/test_data_sensor_more.py create mode 100644 tests/test_data_source_controller.py create mode 100644 tests/test_data_source_helpers.py create mode 100644 tests/test_detail_tabs_blocks.py create mode 100644 tests/test_detail_tabs_summary.py create mode 100644 tests/test_dual_price_simulation.py create mode 100644 tests/test_entities_adaptive_load_profiles.py create mode 100644 tests/test_entities_analytics_sensor.py create mode 100644 tests/test_entities_analytics_sensor_edge.py create mode 100644 tests/test_entities_analytics_sensor_more.py create mode 100644 tests/test_entities_analytics_sensor_more2.py create mode 100644 tests/test_entities_analytics_sensor_more3.py create mode 100644 tests/test_entities_analytics_sensor_more4.py create mode 100644 tests/test_entities_analytics_sensor_more5.py create mode 100644 tests/test_entities_analytics_sensor_more6.py create mode 100644 tests/test_entities_battery_balancing_sensor.py create mode 100644 tests/test_entities_battery_balancing_sensor_more.py create mode 100644 tests/test_entities_battery_health_sensor.py create mode 100644 tests/test_entities_chmu_sensor.py create mode 100644 tests/test_entities_computed_sensor.py create mode 100644 tests/test_entities_computed_sensor_edge.py create mode 100644 tests/test_entities_computed_sensor_more.py create mode 100644 tests/test_entities_computed_sensor_more2.py create mode 100644 tests/test_entities_computed_sensor_more3.py create mode 100644 tests/test_entities_data_sensor.py create mode 100644 tests/test_entities_data_sensor_more.py create mode 100644 tests/test_entities_data_sensor_more2.py create mode 100644 tests/test_entities_data_sensor_more3.py create mode 100644 tests/test_entities_data_source_sensor.py create mode 100644 tests/test_entities_runtime.py create mode 100644 tests/test_entities_shield_sensor.py create mode 100644 tests/test_entities_solar_forecast_sensor.py create mode 100644 tests/test_entities_solar_forecast_sensor_more.py create mode 100644 tests/test_entities_solar_forecast_sensor_more2.py create mode 100644 tests/test_entities_solar_forecast_sensor_more3.py create mode 100644 tests/test_entities_solar_forecast_sensor_more4.py create mode 100644 tests/test_entities_statistics_sensor.py create mode 100644 tests/test_entities_statistics_sensor_edge.py create mode 100644 tests/test_entities_statistics_sensor_more.py create mode 100644 tests/test_entities_statistics_sensor_more2.py create mode 100644 tests/test_entities_statistics_sensor_more3.py create mode 100644 tests/test_entities_statistics_sensor_more4.py create mode 100644 tests/test_entities_statistics_sensor_more5.py create mode 100644 tests/test_entities_statistics_sensor_more6.py create mode 100644 tests/test_entities_statistics_sensor_more7.py create mode 100644 tests/test_entities_statistics_sensor_more8.py create mode 100644 tests/test_etag_caching.py create mode 100644 tests/test_extended_summary.py create mode 100644 tests/test_forecast_update.py create mode 100644 tests/test_forecast_update_more2.py create mode 100644 tests/test_grid_charging_plan_sensor.py create mode 100644 tests/test_ha_rest_api_helpers.py create mode 100644 tests/test_ha_rest_api_more.py create mode 100644 tests/test_ha_rest_api_views.py create mode 100644 tests/test_ha_sensor.py create mode 100644 tests/test_ha_sensor_proxy.py create mode 100644 tests/test_history_helpers.py create mode 100644 tests/test_home_ii_deficit_critical_bug.py create mode 100644 tests/test_hybrid_more2.py create mode 100644 tests/test_hybrid_planning_more2.py create mode 100644 tests/test_hybrid_scoring_helpers.py create mode 100644 tests/test_hybrid_scoring_more2.py create mode 100644 tests/test_init_cleanup.py create mode 100644 tests/test_init_extra.py create mode 100644 tests/test_init_frontend.py create mode 100644 tests/test_init_helpers.py create mode 100644 tests/test_init_setup_entry.py create mode 100644 tests/test_input_helpers.py create mode 100644 tests/test_input_helpers_more.py create mode 100644 tests/test_interval_simulator.py create mode 100644 tests/test_load_and_solar_profiles.py create mode 100644 tests/test_load_profiles_more.py create mode 100644 tests/test_local_mapper.py create mode 100644 tests/test_local_mapper_more.py create mode 100644 tests/test_missing_coverage_helpers.py create mode 100644 tests/test_mode_recommendations.py create mode 100644 tests/test_mode_transition_tracker.py create mode 100644 tests/test_new_architecture.py create mode 100644 tests/test_oig_cloud_notification.py create mode 100644 tests/test_oig_cloud_notification_manager_more2.py create mode 100644 tests/test_oig_cloud_notification_more.py create mode 100644 tests/test_oig_cloud_session_manager.py create mode 100644 tests/test_ote_api.py create mode 100644 tests/test_physics.py create mode 100644 tests/test_plan_storage_aggregate.py create mode 100644 tests/test_plan_storage_baseline.py create mode 100644 tests/test_plan_storage_baseline_more.py create mode 100644 tests/test_plan_storage_baseline_more2.py create mode 100644 tests/test_plan_storage_daily.py create mode 100644 tests/test_planner_min_recovery.py create mode 100644 tests/test_planner_recommended_sensor.py create mode 100644 tests/test_planner_timeline.py create mode 100644 tests/test_planning_api.py create mode 100644 tests/test_planning_auto_switch.py create mode 100644 tests/test_planning_helpers.py create mode 100644 tests/test_precompute.py create mode 100644 tests/test_precompute_unified_tile.py create mode 100644 tests/test_presentation_detail_tabs_more.py create mode 100644 tests/test_presentation_helpers.py create mode 100644 tests/test_presentation_precompute_more.py create mode 100644 tests/test_pricing_fixed_prices.py create mode 100644 tests/test_pricing_helpers.py create mode 100644 tests/test_pricing_more.py create mode 100644 tests/test_pricing_shared_helpers.py create mode 100644 tests/test_pricing_spot_price_15min.py create mode 100644 tests/test_pricing_spot_price_15min_base.py create mode 100644 tests/test_pricing_spot_price_export_15min.py create mode 100644 tests/test_pricing_spot_price_hourly.py create mode 100644 tests/test_pricing_spot_price_sensor.py create mode 100644 tests/test_scenario_analysis.py create mode 100644 tests/test_scenario_analysis_inputs.py create mode 100644 tests/test_sensor_cleanup_extra.py create mode 100644 tests/test_sensor_full_coverage.py create mode 100644 tests/test_sensor_lifecycle.py create mode 100644 tests/test_sensor_registry_cleanup.py create mode 100644 tests/test_sensor_setup_entry.py create mode 100644 tests/test_sensor_setup_helpers.py create mode 100644 tests/test_sensor_setup_runtime.py create mode 100644 tests/test_services_box_id.py create mode 100644 tests/test_services_full_coverage.py create mode 100644 tests/test_services_module.py create mode 100644 tests/test_services_setup.py create mode 100644 tests/test_shared_logging.py create mode 100644 tests/test_shield_core.py create mode 100644 tests/test_shield_core_more.py create mode 100644 tests/test_shield_core_more2.py create mode 100644 tests/test_shield_core_more3.py create mode 100644 tests/test_shield_core_more4.py create mode 100644 tests/test_shield_core_more5.py create mode 100644 tests/test_shield_dispatch.py create mode 100644 tests/test_shield_dispatch_more.py create mode 100644 tests/test_shield_dispatch_more2.py create mode 100644 tests/test_shield_dispatch_more3.py create mode 100644 tests/test_shield_dispatch_more4.py create mode 100644 tests/test_shield_dispatch_more5.py create mode 100644 tests/test_shield_dispatch_more6.py create mode 100644 tests/test_shield_queue.py create mode 100644 tests/test_shield_queue_more.py create mode 100644 tests/test_shield_queue_more2.py create mode 100644 tests/test_shield_queue_more3.py create mode 100644 tests/test_shield_queue_more4.py create mode 100644 tests/test_shield_queue_more5.py create mode 100644 tests/test_shield_queue_more6.py create mode 100644 tests/test_shield_validation.py create mode 100644 tests/test_shield_validation_more.py create mode 100644 tests/test_shield_validation_more2.py create mode 100644 tests/test_shield_validation_more3.py create mode 100644 tests/test_simulate_interval_new.py create mode 100644 tests/test_solar_forecast_more.py create mode 100644 tests/test_task_and_storage.py create mode 100644 tests/test_telemetry_store.py create mode 100644 tests/test_timeline_extended.py create mode 100644 tests/test_timeline_extended_more.py create mode 100644 tests/test_timeline_extended_more2.py create mode 100644 tests/test_unified_cost_tile_helpers.py create mode 100644 tests/test_unified_cost_tile_helpers_more.py create mode 100644 tests/test_unified_cost_tile_helpers_more2.py create mode 100644 tests/test_unified_cost_tile_helpers_more3.py create mode 100644 tests/test_unified_cost_tile_helpers_more4.py create mode 100644 tests/test_unified_cost_tile_helpers_more6.py create mode 100644 tests/test_unified_cost_tile_more5.py create mode 100644 vitest.config.js diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..c5c36f5d --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,5 @@ +version: "2" +exclude_patterns: + - "custom_components/oig_cloud/www/**" + - "custom_components/oig_cloud/lib/**" + - "custom_components/oig_cloud/oig_cloud_battery_forecast.py" diff --git a/.codefactor.yml b/.codefactor.yml new file mode 100644 index 00000000..63ce9a64 --- /dev/null +++ b/.codefactor.yml @@ -0,0 +1,4 @@ +exclude_patterns: + - "custom_components/oig_cloud/www/**" + - "custom_components/oig_cloud/lib/**" + - "custom_components/oig_cloud/oig_cloud_battery_forecast.py" diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 00000000..2b130a27 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,8 @@ +[run] +source = custom_components/oig_cloud +relative_files = True + +[report] +skip_covered = True +show_missing = False + diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..20d188a5 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,21 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "parserOptions": { + "ecmaVersion": 2021, + "sourceType": "script" + }, + "rules": { + "eqeqeq": "off", + "max-depth": "off", + "max-lines-per-function": "off", + "max-params": "off", + "no-alert": "off", + "no-undef": "off", + "no-unused-vars": "off", + "no-var": "off", + "prefer-const": "off" + } +} diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..0223cd11 --- /dev/null +++ b/.flake8 @@ -0,0 +1,23 @@ +[flake8] +max-line-length = 88 +max-complexity = 100 +extend-ignore = E203,E501 +exclude = + .git, + __pycache__, + .venv, + venv, + .mypy_cache, + .pytest_cache, + .ruff_cache, + .dev_docs, + .ha-env, + .ha-env-313, + .ha-env-*, + .pyenv, + local_dev, + node_modules, + tests, + htmlcov, + build, + dist diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index 7439835b..00000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,2 +0,0 @@ -All code should use types in function calls and signatures. Untyped parameters and return values are not allowed. - diff --git a/.github/workflows/hacs.yml b/.github/workflows/hacs.yml index ea6cf6f7..b5e68ab7 100644 --- a/.github/workflows/hacs.yml +++ b/.github/workflows/hacs.yml @@ -6,12 +6,15 @@ on: schedule: - cron: "0 0 * * *" +permissions: + contents: read + jobs: hacs: name: HACS Action runs-on: "ubuntu-latest" steps: - name: HACS Action - uses: "hacs/action@main" + uses: "hacs/action@6f81caf1dd4cc0f615444dba4d4a3ceaa22db99c" with: category: "integration" diff --git a/.github/workflows/hassfest.yml b/.github/workflows/hassfest.yml index 2f754234..8e0ca90c 100644 --- a/.github/workflows/hassfest.yml +++ b/.github/workflows/hassfest.yml @@ -6,9 +6,12 @@ on: schedule: - cron: '0 0 * * *' +permissions: + contents: read + jobs: validate: runs-on: "ubuntu-latest" steps: - uses: "actions/checkout@v4" - - uses: "home-assistant/actions/hassfest@master" \ No newline at end of file + - uses: "home-assistant/actions/hassfest@87c064c607f3c5cc673a24258d0c98d23033bfc3" diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 00000000..494976eb --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,46 @@ +name: Quality Checks + +on: + push: + branches: + - main + - temp-into-main + pull_request: + +jobs: + python-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install Python dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-dev.txt + + - name: Run flake8 + run: | + python -m flake8 + + frontend-lint: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Install frontend dependencies + run: npm ci + + - name: Run frontend lint + run: npm test diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f3bc4944..aca5c8f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,6 +11,9 @@ on: required: true default: 'false' +permissions: + contents: write + jobs: release: runs-on: ubuntu-latest @@ -19,6 +22,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 + - name: Validate version input + id: validate_version + run: | + VERSION="${{ github.event.inputs.version }}" + if [ "$VERSION" != "dev" ] && ! [[ "$VERSION" =~ ^[0-9]+(\.[0-9]+)*(-[0-9A-Za-z.-]+)?$ ]]; then + echo "Invalid version: $VERSION" + exit 1 + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + - name: Set up Node.js uses: actions/setup-node@v4 with: @@ -27,8 +40,9 @@ jobs: - name: Replace version and service in release_const.py working-directory: ./custom_components/oig_cloud run: | - echo 'COMPONENT_VERSION = "${{ github.event.inputs.version }}"' > release_const.py - if [ "${{ github.event.inputs.version }}" == "dev" ]; then + VERSION="${{ steps.validate_version.outputs.version }}" + echo "COMPONENT_VERSION = \"$VERSION\"" > release_const.py + if [ "$VERSION" == "dev" ]; then echo 'SERVICE_NAME = "oig_cloud_dev"' >> release_const.py else echo 'SERVICE_NAME = "oig_cloud"' >> release_const.py @@ -37,10 +51,11 @@ jobs: - name: Update version property in manifest.json working-directory: ./custom_components/oig_cloud run: | - if [ "${{ github.event.inputs.version }}" == "dev" ]; then + VERSION="${{ steps.validate_version.outputs.version }}" + if [ "$VERSION" == "dev" ]; then jq --arg version '0.0.0' '.version = $version' manifest.json > manifest.tmp && mv manifest.tmp manifest.json else - jq --arg version ${{ github.event.inputs.version }} '.version = $version' manifest.json > manifest.tmp && mv manifest.tmp manifest.json + jq --arg version "$VERSION" '.version = $version' manifest.json > manifest.tmp && mv manifest.tmp manifest.json fi @@ -50,7 +65,7 @@ jobs: git config --global user.name "Pavel Simsa" git config --global user.email "pavel@simsa.cz" git add release_const.py manifest.json - git commit -m "Setting release variables to ${{ github.event.inputs.version }}" + git commit -m "Setting release variables to ${{ steps.validate_version.outputs.version }}" - name: Push changes working-directory: ./custom_components/oig_cloud @@ -62,16 +77,46 @@ jobs: if: ${{ github.event.inputs.create-tag == 'true' }} working-directory: ./custom_components/oig_cloud run: | - git tag -a v${{ github.event.inputs.version }} -m "Version ${{ github.event.inputs.version }}" + git tag -a v${{ steps.validate_version.outputs.version }} -m "Version ${{ steps.validate_version.outputs.version }}" git push --tags + - name: Extract release notes from CHANGELOG.md + id: changelog + if: ${{ github.event.inputs.create-tag == 'true' }} + run: | + VERSION="${{ steps.validate_version.outputs.version }}" + if [ ! -f CHANGELOG.md ]; then + { + echo "notes<> "$GITHUB_OUTPUT" + exit 0 + fi + + NOTES="$(awk -v ver="$VERSION" ' + $0 ~ "^## \\[" ver "\\]" { in_section=1 } + in_section && $0 ~ "^## \\[" && $0 !~ "^## \\[" ver "\\]" { exit } + in_section { print } + ' CHANGELOG.md)" + + if [ -z "$NOTES" ]; then + NOTES="Release ${VERSION}" + fi + + { + echo "notes<> "$GITHUB_OUTPUT" + - name: Create draft release uses: actions/create-release@v1 if: ${{ github.event.inputs.create-tag == 'true' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: v${{ github.event.inputs.version }} - release_name: Release ${{ github.event.inputs.version }} + tag_name: v${{ steps.validate_version.outputs.version }} + release_name: Release ${{ steps.validate_version.outputs.version }} + body: ${{ steps.changelog.outputs.notes }} draft: true - diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 951e48c6..039350aa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,40 +4,49 @@ on: pull_request: branches: - main + - temp push: branches: - main + - temp + +permissions: + contents: read jobs: test: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Cache dependencies - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Set up Python - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - pip install -r requirements-dev.txt || true - - - name: Set PYTHONPATH - run: echo "PYTHONPATH=$(pwd)" >> $GITHUB_ENV - - - name: Run tests - run: | - pytest + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements-dev.txt + + - name: Run tests (with coverage) + env: + PYTHONPATH: ${{ github.workspace }} + run: | + pytest -v --tb=short --cov=custom_components/oig_cloud --cov-report=xml --cov-report=term-missing:skip-covered + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-xml + path: coverage.xml diff --git a/.gitignore b/.gitignore index 897569fa..29aec141 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,9 @@ pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ +.playwright/ +playwright-report/ +test-results/ .tox/ .nox/ .coverage @@ -50,6 +53,12 @@ coverage.xml .hypothesis/ .pytest_cache/ cover/ +.scannerwork/ +sonar-project.properties +sonar-project.properties.template +docker-compose.sonarqube.yml +scripts/sonar_local.sh +.github/workflows/sonarqube.yml # Translations *.mo @@ -86,6 +95,7 @@ ipython_config.py # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version +.pyenv/ # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. @@ -121,6 +131,8 @@ celerybeat.pid # Environments .env +.ha-env/ +.ha-env-313/ .venv env/ venv/ @@ -178,3 +190,84 @@ blueprints/ /.vs /wslvenv custom_components/oig_cloud/sensor_dump.json +.DS_Store +.npmrc +node_modules/ + +# Development and deployment scripts (local only) +backup_from_ha.sh +backup_ha_simple.sh +create_backup.sh +simple_backup.sh +restore_to_ha.sh +deploy_to_ha.sh +deploy_single_ssh.sh +deploy_dashboard_switcher.sh +analyze_*.sh +debug_*.sh +quick_*.sh +test_*.py +!tests/test_*.py +!tests/e2e/test_*.py +scripts/cleanup_oig_cloud_devices.py +scripts/cleanup_oig_cloud.sh +backups/ +*.tar.gz +*.zip +*BACKUP*.txt + +# Old/backup files +*_OLD.md +*_old.md +*.bak +*.backup + +# Development documentation (local only) +.dev_docs/ +local_dev/ + +# Keep only user docs in git; everything else under docs is local-only +docs/** +!docs/user/ +!docs/user/** +!docs/images/ +!docs/images/** + +# Docker volumes +config/ +!custom_components/oig_cloud/config/ +!custom_components/oig_cloud/config/** +custom_components/oig_cloud/config/**/__pycache__/ + +# Legacy config flow (backup) +custom_components/oig_cloud/config_flow_legacy.py +.ha_config + +# Local data dumps / personal exports (must not be committed) +/battery_*_data.json +/device.json +/entries.json +/entry_detail.json +/latest_timeline*.json +/mode_history*.json +/timeline*.json + +# Local scripts and scratch files (must not be committed) +/check_*.sh +/check_*.py +/diagnose_*.py +/diagnose_*.js +/draft_*.py +/fix_logging.py + +# Local-only helpers / scratch (do not commit) +/run_tests_docker.sh +/temp_header_replacement.js +/data/ +/tests/data/ + +# Copilot instructions are user-local +.github/copilot-instructions.md + +# Frontend internal notes (keep repo clean) +custom_components/oig_cloud/www/**/*.md diff --git a/.htmlhintrc.json b/.htmlhintrc.json new file mode 100644 index 00000000..b7204f96 --- /dev/null +++ b/.htmlhintrc.json @@ -0,0 +1,9 @@ +{ + "attr-no-duplication": true, + "doctype-first": false, + "id-unique": true, + "spec-char-escape": false, + "src-not-empty": true, + "tag-pair": true, + "tagname-lowercase": true +} diff --git a/.safety-project.ini b/.safety-project.ini new file mode 100644 index 00000000..b0245608 --- /dev/null +++ b/.safety-project.ini @@ -0,0 +1,5 @@ +[project] +id = oig_cloud +url = /codebases/oig_cloud/findings +name = oig_cloud + diff --git a/.scannerwork/.sonar_lock b/.scannerwork/.sonar_lock new file mode 100644 index 00000000..e69de29b diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 00000000..cf71b127 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,17 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "indentation": 2, + "string-quotes": "single", + "color-hex-case": "lower", + "color-hex-length": "short", + "declaration-block-trailing-semicolon": "always", + "selector-class-pattern": null, + "selector-id-pattern": null, + "custom-property-pattern": null, + "no-descending-specificity": null, + "font-family-no-missing-generic-family-keyword": null, + "alpha-value-notation": "number", + "color-function-notation": "legacy" + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 49867c48..c77ea1db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,22 @@ { - "[python]": { - "editor.defaultFormatter": "ms-python.black-formatter" + "python.analysis.diagnosticSeverityOverrides": { + "reportMissingImports": "none", + "reportMissingModuleSource": "none", + "reportReturnType": "none", + "reportArgumentType": "none", + "reportOptionalOperand": "none" }, - "python.formatting.provider": "none", - "python.testing.pytestArgs": [ - "tests" + "python.analysis.ignore": [ + "**/lib/**" ], - "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true -} \ No newline at end of file + "editor.formatOnSave": true, + "editor.tabSize": 4, + "editor.insertSpaces": true, + "files.trimTrailingWhitespace": true, + "python.linting.enabled": true, + "python.linting.pylintEnabled": true, + "python.linting.flake8Enabled": false, + "python.linting.mypyEnabled": true, + "python.formatting.provider": "black", + "chatgpt.openOnStartup": true + } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..4f4a4566 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,227 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +- Battery planner wizard options: selector for Hybrid / Hybrid+Autonomy preview profiles + cheap-window and DP tuning fields (EN/CZ translations). +- Autonomy QA coverage: regression tests for the cheap-window helper and DP optimizer. + +### Changed + +- Timeline dialog: plan toggle switches between live Hybrid control and Autonomy preview dataset. +- Analytics tile action: “Autonomní plán” opens the timeline dialog pre-filtered to the Autonomy plan. + +## [2.0.6-pre.5] - 2025-12-17 + +### Fixed + +- Local mode: discharge-today uses proxy counter (`tbl_batt_bat_and`) to match OIG Proxy totals. +- Energy sensors: restore fallback uses entity state if attributes are missing (prevents `computed_batt_charge_energy_today` showing `0` after restart). + +## [2.0.6-pre.6] - 2025-12-17 + +### Fixed + +- Local mode: charge-today maps 1:1 to proxy counter (`tbl_batt_bat_apd`) to match OIG Proxy totals. + +## [2.0.6-pre.7] - 2025-12-17 + +### Fixed + +- OTE cache: load/persist moved off the event loop (prevents HA warning “Detected blocking call to open … oig_cloud/api/ote_api.py”). + +## [2.0.6-pre.4] - 2025-12-17 + +### Changed + +- CI: test workflow runs on `temp` and Sonar workflow validation fixed. +- Hassfest: manifest/services/translations adjusted to pass validation. +- Logging: reduced noisy debug output in runtime. +- Dashboard: mobile load/render stabilized (non-blocking chart scripts, CSS loaded without chained `@import`). +- Balancing: `battery_balancing` sensor state/attributes normalized (no `unknown` during planned balancing). + +### Documentation + +- User docs expanded (data source, planner, statistics) and README updated (Cloud/Local data sources + screenshots). + +## [2.0.6-pre.3] - 2025-12-16 + +### Changed + +- Repository hygiene: removed local-only helper scripts and test data; extended `.gitignore` rules to prevent re-adding. + +## [2.0.6-pre.2] - 2025-12-16 + +### Changed + +- Repository hygiene: ignore local data exports, dev-only documentation, and environment artifacts to keep the repository clean. + +## [2.0.6-pre.1] - 2025-12-16 + +### Added + +- Local datasource mode: mirror values from local HA entities into cloud OIG sensors (event-driven) with UI/dashboard support. +- Local SonarQube tooling: `docker-compose.sonarqube.yml`, `scripts/sonar_local.sh`, and coverage config to run scans locally. + +### Changed + +- Dashboard value updates: split-flap/flip-style animations + alignment fixes for tiles and configurable side tiles. +- Hybrid optimizer refactor: extracted helper functions to reduce cognitive complexity (no behavior change intended). + +### Fixed + +- Options flow (HA 2025.12): hardening around handler-based entry id/protected attrs and initialization issues. +- Frontend HYBRID key mapping: consistent key mapping across dashboard JS modules. + +## [2.0.5] - 2025-10-29 + +### Added + +- Extended Timeline API (“Historie vs Plán”): 3-day view (yesterday/today/tomorrow), actual vs planned comparison, daily plan fixation, and accuracy metrics. +- New dashboard tab “HISTORIE vs PLÁN” for visualization of historical vs planned bars and deltas. + +### Changed + +- Mode recommendations filtering switched from `today_start` to `NOW` for future-only data. + +### Fixed + +- DP optimization: ensure optimal interval modes are applied before battery calculations; fix timeline starting point to `NOW`. + +### Documentation + +- Added/updated docs for `timeline_extended` and `daily_plan_state` response structures. + +## [2.0.4] - 2025-10-24 + +### Added + +- ČHMÚ weather warnings integration (CAP XML client + sensors for local/global warnings, severity mapping, dashboard badge + modal). + +### Changed + +- Grid charging sensor refactor: numeric → binary sensor; energy/cost moved to attributes; count only actual battery charging. + +### Fixed + +- Dashboard chart: default zoom now shows current time; improved initialization after hard refresh; fixed timezone handling. + +### Removed + +- Experimental automatic battery charging based on weather conditions. + +## [2.0.3-preview] - 2025-10-20 + +### Added + +- Energy Flow dashboard (real-time visualization of grid/solar/battery/home/boiler flows). +- ServiceShield improvements (event-based monitoring, better queue UX, retries, safer serialization of operations). +- Wizard config flow (guided setup, improved validation, and Czech localization). +- Light/Dark theme support across the frontend. +- Docker-based test infrastructure + CI wiring for consistent testing. +- Documentation expansion under `docs/user/` and `docs/dev/`. + +### Changed + +- Minimum supported Home Assistant version raised (internal APIs modernized). +- API client vendored into the repository (self-contained installation). + +### Fixed + +- Grid delivery mode/limit mapping and service ordering. +- Boiler mode stability (no UI blinking on changes). + +### Notes + +This is a preview release intended for testers. Some UI elements may be present but disabled (waiting for upstream OIG documentation); `formating_mode` uses a fixed timeout. + +## [2.0.0-beta] - 2025-10-19 + +### Added + +- Multi-device support for multiple battery boxes on one OIG Cloud account (`device_id` selector in services). +- Vendored OIG Cloud client under `custom_components/oig_cloud/lib/oig_cloud_client/` (self-contained installation). +- Wizard configuration flow (new install UX with guided steps and localization). +- ServiceShield improvements (configurable timeout, better monitoring, and diagnostics). +- API update optimizations (ETag support and polling jitter). +- Documentation restructure under `docs/user/` and `docs/dev/`. +- Tests + CI wiring (pytest, coverage, basic linting checks). + +### Changed + +- Configuration flow redesigned (existing installs should migrate automatically; new installs go through the wizard). +- Internal imports updated to use the vendored API client. +- Device handling generalized to support multiple devices per config entry. + +### Fixed + +- Jitter and caching behavior in the coordinator. +- Service schema validation for `device_id`. +- Device identifier parsing (`_shield` / `_analytics` suffixes). +- Orphaned device cleanup when a battery box disappears from the account. + +### Removed + +- External dependency on the `oig-cloud-client` PyPI package. + +### Migration + +If you use multiple devices, update automations/service calls to include `device_id` as needed; see `docs/user/SERVICES.md`. + +## [1.0.6] - 2024-12-15 + +### Added + +- Extended sensors for battery charging/discharging tracking. +- Separate measurement of battery charging from PV vs. grid. +- Configurable update intervals for standard and extended statistics. +- More accurate energy measurements using custom integration. +- Improved boiler power calculation. + +### Changed + +- Statistics reset at end of day/month/year. +- Code structure improvements for reliability. +- Enhanced logging for debugging. + +### Fixed + +- Various bug fixes and stability improvements. + +## [1.0.5] - 2024-11-01 + +### Added + +- ServiceShield™ protection against unwanted mode changes. +- Basic multi-language support. + +### Fixed + +- Stability improvements. +- API communication fixes. + +## [1.0.0] - 2024-09-01 + +### Added + +- Initial release. +- Basic ČEZ Battery Box integration. +- Energy dashboard support. +- Service calls for mode control. +- Statistics tracking. + +[Unreleased]: https://github.com/psimsa/oig_cloud/compare/v2.0.6-pre.3...HEAD +[2.0.6-pre.3]: https://github.com/psimsa/oig_cloud/compare/v2.0.6-pre.2...v2.0.6-pre.3 +[2.0.6-pre.2]: https://github.com/psimsa/oig_cloud/compare/v2.0.4...v2.0.6-pre.2 +[2.0.4]: https://github.com/psimsa/oig_cloud/compare/v2.0.3-preview...v2.0.4 +[2.0.3-preview]: https://github.com/psimsa/oig_cloud/compare/v2.0.2-preview...v2.0.3-preview +[2.0.0-beta]: https://github.com/psimsa/oig_cloud/compare/v1.0.6...v2.0.0-beta +[1.0.6]: https://github.com/psimsa/oig_cloud/compare/v1.0.5...v1.0.6 +[1.0.5]: https://github.com/psimsa/oig_cloud/compare/v1.0.0...v1.0.5 +[1.0.0]: https://github.com/psimsa/oig_cloud/releases/tag/v1.0.0 diff --git a/PR112_IMPROVEMENT_SUGGESTIONS.md b/PR112_IMPROVEMENT_SUGGESTIONS.md new file mode 100644 index 00000000..576511e6 --- /dev/null +++ b/PR112_IMPROVEMENT_SUGGESTIONS.md @@ -0,0 +1,155 @@ + +# PR112 Improvement Suggestions + +## Overview +PR112 introduces significant enhancements to the OIG Cloud integration, including ServiceShield 2.0, new energy features, and various technical improvements. Below are suggestions to further enhance the implementation: + +## 1. Code Structure and Organization + +### 1.1. Modularize API Clients +**Current**: The API clients are in separate files but could be better organized. +**Suggestion**: Create a dedicated `api/` directory with submodules for different API services: +- `api/client/` - Base client classes +- `api/services/` - Specific service implementations (spot prices, solar forecast, etc.) + +### 1.2. Sensor Organization +**Current**: Sensor types are spread across multiple files in the `sensors/` directory. +**Suggestion**: Group related sensor types into logical categories: +- `sensors/battery/` - Battery-related sensors +- `sensors/energy/` - Energy and power sensors +- `sensors/forecast/` - Forecast and prediction sensors +- `sensors/system/` - System and status sensors + +## 2. Performance and Efficiency + +### 2.1. Optimize Data Updates +**Current**: Separate intervals for standard and extended data updates. +**Suggestion**: Implement a more granular update strategy: +- Use exponential backoff for failed API calls +- Implement caching for rarely changing data +- Add rate limiting to prevent API abuse + +### 2.2. Memory Management +**Current**: Data is stored in coordinator instances. +**Suggestion**: Implement memory-efficient data structures: +- Use `__slots__` in data classes to reduce memory overhead +- Implement data pruning for old/historical data +- Add memory usage monitoring + +## 3. Error Handling and Resilience + +### 3.1. Enhanced Error Recovery +**Current**: Basic error handling exists. +**Suggestion**: Implement comprehensive error recovery: +- Automatic retry with jitter for transient failures +- Circuit breaker pattern for API calls +- Graceful degradation when services are unavailable + +### 3.2. Telemetry and Monitoring +**Current**: Telemetry is implemented but could be enhanced. +**Suggestion**: Add more detailed monitoring: +- Track API response times and success rates +- Monitor sensor update frequencies +- Add health check endpoints + +## 4. Internationalization and Localization + +### 4.1. Translation Improvements +**Current**: Czech and English translations exist. +**Suggestion**: Enhance translation system: +- Implement a translation validation tool +- Add support for more languages +- Use translation keys consistently across the codebase + +### 4.2. Localization of Units +**Current**: Units are hardcoded. +**Suggestion**: Make units configurable: +- Support different unit systems (metric/imperial) +- Allow user configuration of preferred units +- Localize unit display based on system language + +## 5. Configuration and Customization + +### 5.1. Advanced Configuration Options +**Current**: Basic configuration options are available. +**Suggestion**: Add more granular configuration: +- Per-sensor update intervals +- Configurable API timeouts +- Optional feature toggles + +### 5.2. Configuration Validation +**Current**: Basic validation exists. +**Suggestion**: Implement comprehensive validation: +- Schema-based validation for all configuration options +- Real-time validation feedback in the UI +- Default value fallback for missing configurations + +## 6. Documentation and Developer Experience + +### 6.1. API Documentation +**Current**: Limited API documentation. +**Suggestion**: Generate comprehensive API docs: +- Use Sphinx or similar to document API classes +- Add docstrings to all public methods +- Create API usage examples + +### 6.2. Development Tools +**Current**: Basic development setup. +**Suggestion**: Enhance development environment: +- Add pre-commit hooks for code quality +- Implement automated code formatting +- Add comprehensive test coverage + +## 7. Security Enhancements + +### 7.1. Secure API Communication +**Current**: Basic HTTPS usage. +**Suggestion**: Implement advanced security measures: +- Certificate pinning for API calls +- Request signing for critical operations +- Rate limiting and anomaly detection + +### 7.2. Data Privacy +**Current**: Basic data handling. +**Suggestion**: Enhance data privacy: +- Implement data anonymization options +- Add user consent mechanisms for telemetry +- Provide clear data usage policies + +## 8. Specific Code Improvements + +### 8.1. Remove Debug Prints +**File**: `custom_components/oig_cloud/__init__.py` +**Issue**: Debug print statements should be removed or replaced with proper logging. +**Suggestion**: Replace `print()` calls with `_LOGGER.debug()` calls. + +### 8.2. Improve Telemetry Initialization +**File**: `custom_components/oig_cloud/__init__.py` +**Issue**: Telemetry initialization is commented out. +**Suggestion**: Implement proper telemetry initialization with error handling. + +### 8.3. Optimize Coordinator Initialization +**File**: `custom_components/oig_cloud/oig_cloud_coordinator.py` +**Issue**: Configuration options are accessed during initialization. +**Suggestion**: Move configuration access to a separate method to handle cases where config_entry might be None. + +### 8.4. Enhance API Error Handling +**File**: `custom_components/oig_cloud/api/oig_cloud_api.py` +**Issue**: Error handling could be more comprehensive. +**Suggestion**: Add specific error handling for different HTTP status codes and implement retry logic. + +### 8.5. Sensor Type Loading +**File**: `custom_components/oig_cloud/oig_cloud_computed_sensor.py` +**Issue**: Sensor types are imported inside the class. +**Suggestion**: Import sensor types at the module level to avoid repeated imports. + +## Implementation Priority + +1. **Critical**: Error handling, security enhancements, and memory management +2. **High**: Performance optimizations and configuration improvements +3. **Medium**: Code organization and documentation enhancements +4. **Low**: Additional localization and developer experience improvements + +## Conclusion + +These suggestions aim to enhance the robustness, performance, and maintainability of the OIG Cloud integration. The improvements focus on making the system more resilient, configurable, and developer-friendly while maintaining backward compatibility. diff --git a/README.md b/README.md index 0f4fe2c1..d2291f9a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# ČEZ Battery Box - OIG Cloud Integrace pro Home Assistant + [![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://github.com/hacs/integration) ![GitHub manifest version (path)](https://img.shields.io/github/manifest-json/v/psimsa/oig_cloud?filename=custom_components%2Foig_cloud%2Fmanifest.json) ![GitHub Release Date - Published_At](https://img.shields.io/github/release-date/psimsa/oig_cloud) @@ -5,27 +7,309 @@ [![HACS Action](https://github.com/psimsa/oig_cloud/actions/workflows/hacs.yml/badge.svg)](https://github.com/psimsa/oig_cloud/actions/workflows/hacs.yml) [![CodeFactor](https://www.codefactor.io/repository/github/psimsa/oig_cloud/badge)](https://www.codefactor.io/repository/github/psimsa/oig_cloud) +Kompletní Home Assistant integrace pro ČEZ Battery Box přes OIG Cloud API. Monitorování, řízení a automatizace vašeho domácího úložiště energie. + +Integrace umí čerpat telemetrii buď přímo z OIG Cloud, nebo z lokálního zdroje (OIG Proxy) pro rychlejší aktualizace a odolnější chod při krátkých výpadcích cloudu. + +--- + +## 🚀 Hlavní Funkce + +### 🗂️ **Zdroje dat (Cloud / Local)** +- **Cloud**: oficiální OIG Cloud API (standardní režim) +- **Local (OIG Proxy)**: lokální zdroj telemetrie pro rychlejší refresh a fallback (typicky v LAN) + +📖 Podrobnosti: [Zdroj telemetrie](./docs/user/DATA_SOURCE.md) +🔗 OIG Proxy repo: https://github.com/Muriel2Horak/oig-proxy + +### 📊 **Monitorování v reálném čase** +- Aktuální výkon a stav baterie (SOC, napětí, teplota) +- FVE výroba a domácí spotřeba +- Import/export elektrické sítě +- Sledování bojleru a dalších zařízení + +### ⚡ **Integrace s Home Assistant Energy** +- Přímá podpora pro Energy Dashboard +- Statistiky výroby, spotřeby a toků energie +- Dlouhodobé ukládání dat + +### 🎛️ **Pokročilé Řízení** +- Změna pracovního režimu (Home, Home+, Grid, UPS) +- Nastavení přetoků do sítě +- Řízení bojleru +- Podpora více Battery Boxů na jednom účtu + +### 🛡️ **ServiceShield™ Ochrana** +- Automatická ochrana proti nechtěným změnám +- Configurable timeout protection (5-60 minut) +- Detekce externích změn režimu +- Live monitoring změn + +### 🧙‍♂️ **Moderní Průvodce Nastavením** +- Wizard s postupnými kroky +- Kontextová nápověda +- Rychlé nastavení za 30 sekund +- Pokročilá konfigurace pro power-usery + +### 📈 **Rozšířené Statistiky** +- Denní, měsíční a roční přehledy +- Nabíjení baterie z FVE vs. ze sítě +- Přesné výpočty pomocí Riemannovy integrace +- Automatické resety statistik + +### 🗓️ **Plánovač nabíjení + predikce** +Plánovač kombinuje spotové ceny, predikci FVE/spotřeby a cíle pro baterii. Výsledkem je plán režimů (typicky v 15min blocích) a možnost automatického přepínání režimu. Detailně včetně parametrů a chování: [Plánovač nabíjení](./docs/user/PLANNER.md). + +### ⚖️ **Balancování baterie** +Podpora a vizualizace balancování baterie včetně přehledu stavu a doporučení, aby bylo jasné kdy a proč balancování probíhá. Viz: [Statistiky a metriky](./docs/user/STATISTICS.md). + +### 📉 **Efektivita nabíjení, profiling spotřeby, kvalita baterie (SoH)** +Integrace počítá metriky z dlouhodobých statistik (HA recorder), aby bylo vidět jak efektivně se baterie nabíjí/vybíjí, jaký je profil spotřeby a odhad kvality baterie (SoH) z relevantních nabíjecích intervalů. Viz: [Statistiky a metriky](./docs/user/STATISTICS.md). + +### 🔋 **Battery Health Monitoring** +- Denní výpočet SoH% z historie v recorderu (na základě čistých nabíjecích intervalů) +- Ukládání výsledků do HA Storage a zobrazení v dashboardu + +### 🌦️ **ČHMÚ Meteorologická Varování** +- Integrace s Českým hydrometeorologickým ústavem +- Lokální varování filtrovaná podle GPS (z Solar Forecast nebo HA nastavení) +- Celostátní varování pro celou Českou republiku +- 5 úrovní závažnosti (0-4): None, Minor/Žluté, Moderate/Oranžové, Severe/Červené, Extreme/Fialové +- Dashboard badge v hlavičce s barevným indikátorem +- Detailní modal s informacemi o všech aktivních varováních +- Automatické aktualizace každou hodinu +- WebSocket real-time updates + --- -# OIG Cloud Integrace pro Home Assistant -Tato integrace umožňuje propojení Čez Battery Box s Home Assistantem skrze OIG Cloud. Poskytuje základní informace o stavu baterie, výroby, spotřeby a historických dat. Obsahuje také potřebné entity pro použití stránky Energie a umožňuje také nastavit pracovní režim boxu a regulovat přetoky do distribuční sítě. -## Instalace -Nejjednodušší způsob instalace je přes [HACS](https://hacs.xyz/). V nastavení HACS zvolte "Integrations" a vyhledejte "OIG Cloud". Po instalaci je nutné restartovat Home Assistant. +## 📋 Požadavky + +### ✅ Povinné +- **Home Assistant** 2024.1.0 nebo novější +- **ČEZ Battery Box** s přístupem k OIG Cloud +- **Aktivní "Živá data"** v mobilní aplikaci OIG Cloud + - ⚠️ **Bez živých dat integrace nefunguje!** + - 📖 [Jak zapnout živá data](./docs/user/LIVE_DATA_REQUIREMENT.md) + +### 🔧 Doporučené +- HACS pro snadnou instalaci a aktualizace + +--- + +## 📥 Instalace + +### Pomocí HACS (Doporučeno) + +1. Otevřete **HACS** → **Integrations** +2. Klikněte na **⋮** (tři tečky) → **Custom repositories** +3. Přidejte: `https://github.com/psimsa/oig_cloud` +4. Kategorie: **Integration** +5. Vyhledejte **"OIG Cloud"** a klikněte na **Download** +6. **Restartujte Home Assistant** + +### Manuálně + +1. Stáhněte nejnovější release +2. Rozbalte do `custom_components/oig_cloud/` +3. Restartujte Home Assistant + +--- + +## ⚙️ Konfigurace + +### 🧙‍♂️ Průvodce nastavením (Doporučeno) + +1. **Nastavení** → **Zařízení a služby** → **+ Přidat integraci** +2. Vyhledejte **"OIG Cloud"** +3. Zvolte **"🧙‍♂️ Průvodce nastavením"** +4. Postupujte podle kroků: + - ✅ Přihlášení a ověření + - 🎯 Výběr modulů (Energy, Bojler, Shield...) + - ⏱️ Nastavení intervalů aktualizace + - 🎨 Detailní konfigurace funkcí + - 📋 Souhrn a dokončení + +⏱️ **Trvání:** 2-10 minut (podle zvolených funkcí) + +### ⚡ Rychlé nastavení + +1. Stejný postup jako u wizardu +2. Zvolte **"⚡ Rychlé nastavení"** +3. Zadejte pouze přihlašovací údaje +4. Vše ostatní se nastaví automaticky + +⏱️ **Trvání:** 30 sekund + +📖 **Detailní dokumentace:** [Konfigurace](./docs/user/CONFIGURATION.md) + +--- + +## 📚 Dokumentace + +### 👤 Pro Uživatele +- **[Konfigurace](./docs/user/CONFIGURATION.md)** - Detailní nastavení integrace +- **[Zdroj telemetrie](./docs/user/DATA_SOURCE.md)** - Cloud vs. lokální data (fallback, proxy) +- **[Dashboard](./docs/user/DASHBOARD.md)** - Použití energetického dashboardu +- **[Plánovač nabíjení](./docs/user/PLANNER.md)** - Battery forecast + automatický režim +- **[Entity](./docs/user/ENTITIES.md)** - Seznam všech senzorů a ovladačů +- **[Služby](./docs/user/SERVICES.md)** - Volání služeb pro řízení Battery Boxu +- **[Statistiky a metriky](./docs/user/STATISTICS.md)** - Efektivita, SoH, profiling, balancování +- **[ServiceShield™](./docs/user/SHIELD.md)** - Ochrana před nechtěnými změnami +- **[Automatizace](./docs/user/AUTOMATIONS.md)** - Příklady automatizací +- **[FAQ](./docs/user/FAQ.md)** - Časté dotazy +- **[Troubleshooting](./docs/user/TROUBLESHOOTING.md)** - Řešení problémů +- **[Živá data](./docs/user/LIVE_DATA_REQUIREMENT.md)** - Povinné nastavení v OIG Cloud aplikaci +- **[ČHMÚ varování](./docs/user/CHMU_WARNINGS.md)** - Meteorologická varování (volitelný modul) + +--- + +## 🖼️ Ukázky dashboardu + +### Energetické toky +![Energetické toky](./docs/images/flow.png) + +### Predikce a statistiky +![Predikce a statistiky](./docs/images/predikce.png) + +--- + +## 🎯 Klíčové Moduly + +### 🔋 Battery (Základní modul) +Vždy aktivní - poskytuje data o baterii, FVE, spotřebě a síti. -## Konfigurace -Při konfiguraci je třeba zadat přihlašovací údaje do OIG Cloudu (stejné jako pro mobilní aplikaci). Volitelně lze také zakázat odesílání anonymní telemetrie. +### ⚡ Energy Dashboard +Statistické entity pro Energy Dashboard v Home Assistant. -![Konfigurace](./docs/login.png) +### 🔥 Boiler (Bojler) +Monitoring a řízení elektrického bojleru. -## Použití -Po instalaci a konfiguraci se vytvoří nové zařízení a entity. Všechny entity jsou dostupné v entitním registru a lze je tak přidat do UI. K aktualizaci dat dochází každou minutu. +### 🛡️ ServiceShield™ +Ochrana proti nechtěným změnám pracovního režimu. -## Energie -Integrace obsahuje statistické entity, které lze přímo využít v panelu Energie. Jde o položky: -- Dnešní odběr ze sítě -- Dnešní dodávka do sítě -- Dnešní výroba -- Dnešní nabíjení baterie -- Dnešní vybíjení baterie +### 📊 Extended Stats +Rozšířené statistiky (denní, měsíční, roční). + +### 🌦️ ČHMÚ Warnings +Meteorologická varování pro váš region a celou ČR. +📖 **Dokumentace:** [ČHMÚ Warnings Guide](./docs/user/CHMU_WARNINGS.md) + +--- + +## 🔧 Služby (Services) + +### `oig_cloud.set_box_mode` +Nastavení pracovního režimu Battery Boxu. + +**Režimy:** +- `home` - Domácí režim +- `home1` - Home+ (priorita bojler) +- `home2` - Home+ (priorita baterie) +- `grid` - Síťový režim +- `ups` - UPS režim +- `homeups` - Domácí + UPS + +### `oig_cloud.set_grid_delivery` +Nastavení maximálního přetoku do sítě (0-10000 W). + +### `oig_cloud.set_boiler_mode` +Zapnutí/vypnutí bojleru. + +### `oig_cloud.set_formating_mode` +Formátování baterie (⚠️ Vymaže data!). + +📖 **Detailní dokumentace služeb:** [Services Documentation](./docs/user/SERVICES.md) + +--- + +## 🆕 Co je nového (aktuálně implementováno) + +### 🔄 **Multi-Device Support** +- Podpora více Battery Boxů na jednom OIG účtu (volitelný `device_id` ve službách) + +### 📥 **Telemetry data source (cloud / local)** +- Volba zdroje telemetrie: cloud-only nebo lokální proxy režim (pro rychlejší aktualizace a fallback) + +### 🧙‍♂️ **Wizard a planner** +- Průvodce nastavením s modulárním výběrem funkcí +- Hybrid/Autonomy preview planner: levná okna + DP tuning parametry pro simulaci + +### 🛡️ **ServiceShield™** +- Configurable timeout (5-60 minut) a monitoring externích změn + +### 🌦️ **ČHMÚ varování** +- Volitelný modul s lokálními i celostátními výstrahami a senzory do HA + +📖 **Kompletní changelog:** [CHANGELOG.md](./CHANGELOG.md) + +--- + +## 🐛 Známé Problémy + +### API vrací chybu 500 +✅ **Řešení:** Zapněte "Živá data" v mobilní aplikaci OIG Cloud + +### Entity jsou nedostupné +✅ **Řešení:** Zkontrolujte, že je integrace správně nakonfigurována a OIG Cloud je dostupný + +### ServiceShield blokuje změny +✅ **Řešení:** Počkejte na vypršení timeout nebo upravte timeout v Options + +📖 **Více problémů:** [Troubleshooting](./docs/user/TROUBLESHOOTING.md) + +--- + +## 🤝 Přispívání + +Příspěvky jsou vítány! Prosím: + +1. Fork repozitář +2. Vytvořte feature branch (`git checkout -b feature/amazing-feature`) +3. Commit změny (`git commit -m 'feat: Add amazing feature'`) +4. Push do branch (`git push origin feature/amazing-feature`) +5. Otevřete Pull Request + +### Development Setup + +```bash +# Clone repo +git clone https://github.com/psimsa/oig_cloud.git +cd oig_cloud + +# Create virtual environment +python3 -m venv .venv +source .venv/bin/activate # Linux/Mac +# .venv\Scripts\activate # Windows + +# Install dependencies +pip install -r requirements-dev.txt + +# Run tests +pytest tests/ +``` + +--- + +## 📜 Licence + +Tento projekt je licencován pod [MIT License](./LICENSE). + +--- + +## 🙏 Poděkování + +- **ČEZ** za Battery Box a OIG Cloud API +- **Home Assistant** komunita +- Všem přispěvatelům a testerům + +--- + +## 📞 Podpora + +- **🐛 Bug Reports:** [GitHub Issues](https://github.com/psimsa/oig_cloud/issues) +- **💡 Feature Requests:** [GitHub Discussions](https://github.com/psimsa/oig_cloud/discussions) +- **📖 Dokumentace:** [docs/user/](./docs/user/) + +--- -![Energie](./docs/energy.png) \ No newline at end of file +**Vyrobeno s ❤️ pro Home Assistant a ČEZ Battery Box komunitu** diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 00000000..2b6c154a --- /dev/null +++ b/TESTING.md @@ -0,0 +1,184 @@ +# Testing Guide - OIG Cloud Integration + +## 🧪 Testovací Prostředí + +Integrace podporuje více způsobů testování: + +### 1. 🐳 Docker (Doporučeno) + +Použití Home Assistant kontejneru pro testy: + +```bash +# Spustit testy v HA kontejneru +./run_tests_docker.sh +``` + +Nebo manuálně: + +```bash +docker run --rm \ + -v "$(pwd):/workspace" \ + -w /workspace \ + homeassistant/home-assistant:2025.1.4 \ + sh -c "pip install pytest pytest-homeassistant-custom-component && pytest tests/ -v" +``` + +### 2. 📦 Lokální Python Environment + +```bash +# Vytvořit virtual environment +python3 -m venv .venv +source .venv/bin/activate # Linux/Mac +# .venv\Scripts\activate # Windows + +# Instalovat dependencies +pip install -r requirements-dev.txt + +# Spustit testy +pytest tests/ -v +``` + +### 3. 🔄 GitHub Actions + +Testy se automaticky spustí při push/PR do `main` branch. + +### 4. ✅ Hassfest (lokálně) + +Hassfest je součást Home Assistant Core. Nejjednodušší je použít náš skript: + +```bash +./scripts/run_hassfest.sh +``` + +Skript si stáhne HA Core do `local_dev/ha-core`, vytvoří venv a spustí: +`python -m script.hassfest --integration-path custom_components/oig_cloud`. + +Volitelné proměnné: + +- `HA_CORE_DIR=/cesta/k/ha-core` (přesměruje umístění core) +- `INTEGRATION_PATH=/cesta/k/custom_components/oig_cloud` + +## 📋 Test Struktura + +``` +tests/ +├── test_coordinator.py # DataUpdateCoordinator testy +├── test_models.py # Data model testy +├── test_oig_cloud_api.py # API client testy +├── test_etag_caching.py # ETag caching testy +└── sample-response.json # Sample API data +``` + +## 🔧 pytest-homeassistant-custom-component + +Používáme `pytest-homeassistant-custom-component` package, který poskytuje: + +- ✅ Home Assistant fixtures +- ✅ Mock `hass` object +- ✅ Mock config entries +- ✅ Async test support +- ✅ Time travel utilities + +## 📊 Test Coverage + +```bash +# Spustit s coverage reportem +pytest tests/ --cov=custom_components.oig_cloud --cov-report=html + +# Otevřít HTML report +open htmlcov/index.html # Mac +xdg-open htmlcov/index.html # Linux +start htmlcov/index.html # Windows +``` + +## 🐛 Debugging Tests + +```bash +# Verbose output +pytest tests/ -v -s + +# Specific test file +pytest tests/test_coordinator.py -v + +# Specific test +pytest tests/test_coordinator.py::TestOigCloudDataUpdateCoordinator::test_update -v + +# Stop on first failure +pytest tests/ -x + +# Show local variables on failure +pytest tests/ -l +``` + +## 🔍 Docker Compose Pro Development + +Pro lokální development s živým HA: + +```bash +# Spustit HA s integrací +docker-compose up -d homeassistant + +# Zobrazit logy +docker-compose logs -f homeassistant + +# Zastavit +docker-compose down +``` + +HA dostupný na: http://localhost:8123 + +## 🚀 CI/CD + +GitHub Actions automaticky: + +1. Spustí `hassfest` - validace integrace +2. Spustí `HACS` - HACS kompatibilita +3. Spustí `pytest` - unit testy +4. Generuje test report + +## 📝 Psaní Testů + +### Example Test + +```python +import pytest +from homeassistant.core import HomeAssistant +from custom_components.oig_cloud.coordinator import OigCloudDataUpdateCoordinator + +@pytest.mark.asyncio +async def test_coordinator_update(hass: HomeAssistant): + """Test coordinator data update.""" + coordinator = OigCloudDataUpdateCoordinator( + hass, + api_client, + update_interval=30 + ) + + await coordinator.async_refresh() + + assert coordinator.data is not None + assert "box_id" in coordinator.data +``` + +### Fixtures + +```python +@pytest.fixture +def mock_api(): + """Mock OIG Cloud API.""" + with patch("custom_components.oig_cloud.api.OigCloudApi") as mock: + mock.return_value.get_stats.return_value = {...} + yield mock +``` + +## 🔗 Užitečné Odkazy + +- [pytest-homeassistant-custom-component](https://github.com/MatthewFlamm/pytest-homeassistant-custom-component) +- [Home Assistant Testing](https://developers.home-assistant.io/docs/development_testing) +- [pytest Documentation](https://docs.pytest.org/) + +## ⚠️ Poznámky + +- Testy používají mock data z `sample-response.json` +- API volání jsou mockovaná - nevyžadují skutečný OIG Cloud účet +- Docker testy jsou izolované - nemění lokální prostředí diff --git a/coverage.txt b/coverage.txt new file mode 100644 index 00000000..54bdc558 --- /dev/null +++ b/coverage.txt @@ -0,0 +1,1986 @@ +============================= test session starts ============================== +platform darwin -- Python 3.13.4, pytest-8.4.2, pluggy-1.6.0 -- /Users/martinhorak/Downloads/oig_cloud/venv/bin/python3.13 +cachedir: .pytest_cache +rootdir: /Users/martinhorak/Downloads/oig_cloud +configfile: pytest.ini +plugins: respx-0.22.0, pytest_freezer-0.4.9, unordered-0.7.0, asyncio-1.2.0, anyio-4.11.0, sugar-1.0.0, socket-0.7.0, xdist-3.8.0, timeout-2.4.0, homeassistant-custom-component-0.13.295, github-actions-annotate-failures-0.3.0, aiohttp-1.1.0, picked-0.5.1, requests-mock-1.12.1, cov-7.0.0, syrupy-5.0.0 +asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function +collecting ... collected 1889 items + +tests/test_adaptive_consumption.py::test_format_profile_description_strips_similarity PASSED [ 0%] +tests/test_adaptive_consumption.py::test_format_profile_description_empty PASSED [ 0%] +tests/test_adaptive_consumption.py::test_calculate_consumption_summary_list_and_dict PASSED [ 0%] +tests/test_adaptive_consumption.py::test_process_adaptive_consumption_for_dashboard PASSED [ 0%] +tests/test_adaptive_consumption.py::test_select_tomorrow_profile_transition PASSED [ 0%] +tests/test_adaptive_consumption.py::test_select_tomorrow_profile_standard PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_normalize_profile_name_empty PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_normalize_profile_name_fallback PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_build_profile_suffix_invalid_values PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_build_dashboard_profile_details_no_score PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_calculate_charging_cost_today_invalid_rows PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_season_and_transition_helpers PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_select_profile_by_prefix PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_process_adaptive_consumption_invalid_profiles PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_calculate_consumption_summary_invalid_type PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_get_adaptive_load_prediction_variants PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_get_profiles_from_sensor_variants PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_get_today_hourly_consumption_variants PASSED [ 0%] +tests/test_adaptive_consumption_more.py::test_calculate_recent_consumption_ratio_variants PASSED [ 1%] +tests/test_adaptive_consumption_more.py::test_apply_consumption_boost_and_similarity PASSED [ 1%] +tests/test_adaptive_consumption_more.py::test_select_tomorrow_profile_error PASSED [ 1%] +tests/test_adaptive_consumption_more.py::test_get_consumption_today_variants PASSED [ 1%] +tests/test_adaptive_consumption_more.py::test_get_load_avg_fallback_variants PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_get_season PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_generate_profile_name_variants PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_fill_missing_values PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_build_daily_profiles_and_72h PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_build_current_match PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_apply_floor_to_prediction PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_calculate_profile_similarity PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_extra_state_attributes_prediction PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_async_added_and_removed_starts_task PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_profiling_loop_cancel PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_wait_for_next_profile_window PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_create_and_update_profile_success PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_create_and_update_profile_warming_up PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_get_energy_unit_factor PASSED [ 1%] +tests/test_adaptive_load_profiles_sensor_more.py::test_load_hourly_series_and_earliest_start PASSED [ 2%] +tests/test_adaptive_load_profiles_sensor_more.py::test_find_best_matching_profile_paths PASSED [ 2%] +tests/test_adaptive_load_profiles_sensor_more.py::test_find_best_matching_profile_fallback PASSED [ 2%] +tests/test_api_chmu.py::test_cache_validation_and_invalidate PASSED [ 2%] +tests/test_api_chmu.py::test_parse_polygon_and_circle PASSED [ 2%] +tests/test_api_chmu.py::test_geometry_helpers PASSED [ 2%] +tests/test_api_chmu.py::test_parse_cap_xml_minimal PASSED [ 2%] +tests/test_api_chmu.py::test_filter_select_and_prefer_language PASSED [ 2%] +tests/test_api_chmu_more.py::test_fetch_cap_xml_http_errors PASSED [ 2%] +tests/test_api_chmu_more.py::test_fetch_cap_xml_success PASSED [ 2%] +tests/test_api_chmu_more.py::test_fetch_cap_xml_timeout_and_client_error PASSED [ 2%] +tests/test_api_chmu_more.py::test_resolve_latest_cap_url_variants PASSED [ 2%] +tests/test_api_chmu_more.py::test_parse_cap_xml_error_and_info_exception PASSED [ 2%] +tests/test_api_chmu_more.py::test_parse_info_block_language_event_and_awareness PASSED [ 2%] +tests/test_api_chmu_more.py::test_get_text_with_xpath_default PASSED [ 2%] +tests/test_api_chmu_more.py::test_determine_status_and_eta_and_parse_iso PASSED [ 2%] +tests/test_api_chmu_more.py::test_filter_by_location_geocode_fallback PASSED [ 2%] +tests/test_api_chmu_more.py::test_select_top_alert_and_prefer_language_empty PASSED [ 2%] +tests/test_api_chmu_more.py::test_get_warnings_cache_and_session_close PASSED [ 2%] +tests/test_api_chmu_more.py::test_parse_circle_invalid_value PASSED [ 3%] +tests/test_balancing_core_additional.py::test_async_setup_and_load_errors PASSED [ 3%] +tests/test_balancing_core_additional.py::test_get_cooldown_hours_invalid_config PASSED [ 3%] +tests/test_balancing_core_additional.py::test_set_coordinator PASSED [ 3%] +tests/test_balancing_core_additional.py::test_async_setup_success PASSED [ 3%] +tests/test_balancing_core_additional.py::test_save_state_coordinator_error PASSED [ 3%] +tests/test_balancing_core_additional.py::test_save_state_coordinator_success PASSED [ 3%] +tests/test_balancing_core_additional.py::test_load_state_with_data PASSED [ 3%] +tests/test_balancing_core_additional.py::test_get_cheap_window_percentile_exception PASSED [ 3%] +tests/test_balancing_core_additional.py::test_load_state_safe_error PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_no_forecast_sensor PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_detects_completion PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_active_plan_paths PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_active_plan_future_deadline PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_cycle_forced PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_force_and_natural PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_balancing_opportunistic PASSED [ 3%] +tests/test_balancing_core_additional.py::test_force_plan_failure PASSED [ 3%] +tests/test_balancing_core_additional.py::test_get_days_and_hours_since_last PASSED [ 3%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_stats_paths PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_varied_starts PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_recent_and_invalid_type PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_runtime_error PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_runtime_error_other PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_exception PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_if_balancing_occurred_no_stats PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_natural_balancing_paths PASSED [ 4%] +tests/test_balancing_core_additional.py::test_check_natural_balancing_resets_window PASSED [ 4%] +tests/test_balancing_core_additional.py::test_create_opportunistic_plan_paths PASSED [ 4%] +tests/test_balancing_core_additional.py::test_create_opportunistic_plan_with_prices_immediate PASSED [ 4%] +tests/test_balancing_core_additional.py::test_create_opportunistic_plan_with_prices_delayed PASSED [ 4%] +tests/test_balancing_core_additional.py::test_create_opportunistic_plan_skips_past_and_expensive PASSED [ 4%] +tests/test_balancing_core_additional.py::test_create_forced_plan PASSED [ 4%] +tests/test_balancing_core_additional.py::test_plan_helpers PASSED [ 4%] +tests/test_balancing_core_additional.py::test_cost_helpers PASSED [ 4%] +tests/test_balancing_core_additional.py::test_calculate_immediate_cost_missing_price PASSED [ 4%] +tests/test_balancing_core_additional.py::test_calculate_immediate_cost_missing_capacity PASSED [ 4%] +tests/test_balancing_core_additional.py::test_calculate_total_cost_missing_capacity PASSED [ 4%] +tests/test_balancing_core_additional.py::test_calculate_total_cost_timeline_branches PASSED [ 5%] +tests/test_balancing_core_additional.py::test_cost_helpers_no_prices PASSED [ 5%] +tests/test_balancing_core_additional.py::test_find_cheap_holding_window_no_prices PASSED [ 5%] +tests/test_balancing_core_additional.py::test_find_cheap_holding_window_insufficient_intervals PASSED [ 5%] +tests/test_balancing_core_additional.py::test_find_cheap_holding_window PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_hybrid_timeline_no_sensor PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_current_soc_percent_invalid PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_battery_capacity_conversions PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_battery_capacity_invalid PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_spot_prices_no_forecast_sensor PASSED [ 5%] +tests/test_balancing_core_additional.py::test_sensor_state_and_attributes PASSED [ 5%] +tests/test_balancing_core_additional.py::test_get_active_plan_and_sensor_states PASSED [ 5%] +tests/test_balancing_core_extra.py::test_config_helpers_default_and_overrides PASSED [ 5%] +tests/test_balancing_core_extra.py::test_plan_ups_charging_and_holding_intervals PASSED [ 5%] +tests/test_balancing_core_extra.py::test_get_battery_capacity_kwh_handles_units PASSED [ 5%] +tests/test_balancing_core_extra.py::test_get_spot_prices_48h_parses_timeline PASSED [ 5%] +tests/test_balancing_core_extra.py::test_calculate_immediate_balancing_cost PASSED [ 5%] +tests/test_balancing_core_extra.py::test_calculate_total_balancing_cost PASSED [ 5%] +tests/test_balancing_core_extra.py::test_find_cheap_holding_window PASSED [ 5%] +tests/test_balancing_core_extra.py::test_get_current_soc_percent_and_sensor_state PASSED [ 6%] +tests/test_balancing_core_more.py::test_days_and_hours_since_last_balancing PASSED [ 6%] +tests/test_balancing_core_more.py::test_check_if_balancing_occurred_detects_completion PASSED [ 6%] +tests/test_balancing_core_more.py::test_check_natural_balancing_creates_plan PASSED [ 6%] +tests/test_balancing_core_more.py::test_get_battery_capacity_kwh_wh_units PASSED [ 6%] +tests/test_balancing_core_more.py::test_get_spot_prices_48h PASSED [ 6%] +tests/test_balancing_core_more.py::test_find_cheap_holding_window PASSED [ 6%] +tests/test_balancing_executor_more.py::test_parse_plan_missing_fields PASSED [ 6%] +tests/test_balancing_executor_more.py::test_parse_plan_preferred_intervals_variants PASSED [ 6%] +tests/test_balancing_executor_more.py::test_apply_balancing_infeasible_warning PASSED [ 6%] +tests/test_balancing_executor_more.py::test_get_balancing_indices_and_costs PASSED [ 6%] +tests/test_balancing_helpers.py::test_update_balancing_plan_snapshot_sets_active PASSED [ 6%] +tests/test_balancing_helpers.py::test_update_balancing_plan_snapshot_clears_on_balancing PASSED [ 6%] +tests/test_balancing_helpers.py::test_get_balancing_plan PASSED [ 6%] +tests/test_balancing_helpers.py::test_get_balancing_plan_no_hass PASSED [ 6%] +tests/test_balancing_helpers.py::test_get_balancing_plan_no_state PASSED [ 6%] +tests/test_balancing_helpers.py::test_get_balancing_plan_no_planned PASSED [ 6%] +tests/test_balancing_helpers.py::test_get_balancing_plan_empty_planned PASSED [ 6%] +tests/test_balancing_helpers.py::test_update_balancing_plan_snapshot_empty_requester PASSED [ 6%] +tests/test_balancing_helpers.py::test_plan_balancing_success PASSED [ 7%] +tests/test_balancing_helpers.py::test_plan_balancing_error PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_requires_forecast_sensor PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_active_plan_holding PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_force_creates_plan PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_natural_plan PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_forced_by_cycle PASSED [ 7%] +tests/test_balancing_manager_core.py::test_check_balancing_opportunistic PASSED [ 7%] +tests/test_balancing_manager_core.py::test_balancing_config_helpers PASSED [ 7%] +tests/test_balancing_manager_core.py::test_load_and_save_state PASSED [ 7%] +tests/test_balancing_manager_core.py::test_get_sensor_state_and_attributes PASSED [ 7%] +tests/test_balancing_simulation.py::TestBalancingSimulation::test_interval_balancing_7th_day PASSED [ 7%] +tests/test_balancing_simulation.py::TestBalancingSimulation::test_opportunistic_balancing PASSED [ 7%] +tests/test_balancing_simulation.py::TestBalancingSimulation::test_normal_operation_no_balancing PASSED [ 7%] +tests/test_balancing_simulation.py::TestBalancingSimulation::test_compare_balancing_vs_normal PASSED [ 7%] +tests/test_balancing_simulation.py::TestBalancingSimulation::test_balancing_deadline_reached PASSED [ 7%] +tests/test_battery_efficiency_sensor.py::test_daily_update_computes_partial_efficiency PASSED [ 7%] +tests/test_battery_efficiency_sensor.py::test_monthly_calculation_sets_last_month PASSED [ 7%] +tests/test_battery_efficiency_sensor.py::test_daily_update_without_month_start PASSED [ 7%] +tests/test_battery_efficiency_sensor.py::test_monthly_calculation_insufficient_data PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_monthly_calculation_invalid_effective PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_monthly_calculation_invalid_effective_discharge PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_update_extra_state_attributes_triggers_history PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_get_sensor_handles_missing PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_init_resolve_box_id_error PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_import_error PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_success PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_invalid_data PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_bad_values PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_error PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_async_added_to_hass_restores_state PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_async_added_to_hass_invalid_state PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_async_added_to_hass_initializes_mid_month PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_update_extra_state_attributes_without_efficiency PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_async_added_to_hass_no_last_state_beginning_month PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_async_will_remove_from_hass PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_monthly_calculation_wrong_day PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_get_sensor_invalid_state PASSED [ 8%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_no_history PASSED [ 9%] +tests/test_battery_efficiency_sensor.py::test_try_load_last_month_from_history_incomplete PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_async_added_and_removed PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_create_mode_recommendations PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_update_balancing_plan_snapshot PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_group_intervals_by_mode PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_build_strategy_balancing_plan_branches PASSED [ 9%] +tests/test_battery_forecast_ha_sensor_more.py::test_build_strategy_balancing_plan_legacy PASSED [ 9%] +tests/test_battery_forecast_module.py::test_types_import PASSED [ 9%] +tests/test_battery_forecast_module.py::test_simulator_basic PASSED [ 9%] +tests/test_battery_forecast_module.py::test_simulator_timeline PASSED [ 9%] +tests/test_battery_forecast_module.py::test_mode_selector PASSED [ 9%] +tests/test_battery_forecast_module.py::test_hybrid_optimizer_basic PASSED [ 9%] +tests/test_battery_forecast_module.py::test_balancing_executor PASSED [ 9%] +tests/test_battery_forecast_module.py::test_timeline_builder PASSED [ 9%] +tests/test_battery_forecast_module.py::test_strategy_to_timeline PASSED [ 9%] +tests/test_battery_state_helpers.py::test_get_total_battery_capacity_installed PASSED [ 9%] +tests/test_battery_state_helpers.py::test_get_total_battery_capacity_pv_data PASSED [ 9%] +tests/test_battery_state_helpers.py::test_get_current_battery_capacity PASSED [ 10%] +tests/test_battery_state_helpers.py::test_total_capacity_fallbacks PASSED [ 10%] +tests/test_battery_state_helpers.py::test_read_state_float_branches PASSED [ 10%] +tests/test_battery_state_helpers.py::test_capacity_from_pv_data_error PASSED [ 10%] +tests/test_battery_state_helpers.py::test_current_soc_percent PASSED [ 10%] +tests/test_battery_state_helpers.py::test_min_target_capacity PASSED [ 10%] +tests/test_battery_state_helpers.py::test_current_capacity_missing PASSED [ 10%] +tests/test_battery_state_helpers.py::test_get_max_capacity PASSED [ 10%] +tests/test_battery_state_helpers.py::test_battery_efficiency PASSED [ 10%] +tests/test_battery_state_helpers.py::test_ac_charging_limit PASSED [ 10%] +tests/test_battery_state_helpers.py::test_get_current_mode PASSED [ 10%] +tests/test_battery_state_helpers.py::test_get_boiler_available_capacity PASSED [ 10%] +tests/test_binary_sensor.py::test_binary_sensor_types_present PASSED [ 10%] +tests/test_binary_sensor.py::test_binary_sensor_basic PASSED [ 10%] +tests/test_binary_sensor.py::test_async_setup_entry_creates_entities PASSED [ 10%] +tests/test_boiler_module.py::test_boiler_utils_stratified_temp_simple_avg PASSED [ 10%] +tests/test_boiler_module.py::test_boiler_utils_stratified_temp_two_zone PASSED [ 10%] +tests/test_boiler_module.py::test_boiler_utils_energy_and_residual PASSED [ 10%] +tests/test_boiler_module.py::test_boiler_utils_validate_temperature_sensor PASSED [ 10%] +tests/test_boiler_module.py::test_boiler_models_profile_and_plan PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_profiler_update_profiles PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_profiler_get_profile_for_datetime_low_confidence PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_profiler_fetch_history_handles_instance PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_planner_spot_price_and_recommendations PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_planner_create_plan_and_overflow_windows PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_coordinator_helpers PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_coordinator_spot_prices_and_overflow PASSED [ 11%] +tests/test_boiler_module.py::test_boiler_sensors_and_api_views PASSED [ 11%] +tests/test_config_flow_entry.py::test_step_user_form PASSED [ 11%] +tests/test_config_flow_entry.py::test_step_user_quick_setup PASSED [ 11%] +tests/test_config_flow_entry.py::test_step_user_wizard PASSED [ 11%] +tests/test_config_flow_entry.py::test_quick_setup_requires_live_data PASSED [ 11%] +tests/test_config_flow_entry.py::test_quick_setup_success PASSED [ 11%] +tests/test_config_flow_entry.py::test_import_yaml_not_implemented PASSED [ 11%] +tests/test_config_flow_entry.py::test_wizard_summary_creates_entry PASSED [ 11%] +tests/test_config_flow_module.py::test_config_flow_exports PASSED [ 11%] +tests/test_config_flow_quick_setup.py::test_async_step_user_routes PASSED [ 11%] +tests/test_config_flow_quick_setup.py::test_quick_setup_live_data_required PASSED [ 11%] +tests/test_config_flow_quick_setup.py::test_quick_setup_validate_input_error PASSED [ 12%] +tests/test_config_flow_quick_setup.py::test_quick_setup_success PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_get_total_steps_with_modules PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_get_total_steps_options_flow PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_get_step_placeholders_progress PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_get_next_step_skips_disabled PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_wizard_modules_requires_dependencies PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_wizard_modules_dashboard_requires_all PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_wizard_intervals_validation_errors PASSED [ 12%] +tests/test_config_flow_wizard_steps.py::test_wizard_credentials_back_button PASSED [ 12%] +tests/test_config_helpers.py::test_sanitize_data_source_mode PASSED [ 12%] +tests/test_config_helpers.py::test_migrate_old_pricing_data_percentage PASSED [ 12%] +tests/test_config_helpers.py::test_map_pricing_to_backend_fixed_price PASSED [ 12%] +tests/test_config_helpers.py::test_validate_tariff_hours PASSED [ 12%] +tests/test_config_helpers.py::test_validate_input_ok PASSED [ 12%] +tests/test_config_helpers.py::test_validate_input_live_data_missing PASSED [ 12%] +tests/test_config_helpers.py::test_validate_solar_forecast_api_key_status PASSED [ 12%] +tests/test_config_options_flow.py::test_options_flow_welcome_reconfigure PASSED [ 12%] +tests/test_config_options_flow.py::test_options_flow_summary_updates_entry PASSED [ 12%] +tests/test_config_options_flow.py::test_options_flow_summary_form PASSED [ 13%] +tests/test_config_options_flow.py::test_options_flow_summary_exception PASSED [ 13%] +tests/test_config_options_flow.py::test_options_flow_summary_flags PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_get_defaults_migrates_legacy_pricing PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_pricing_distribution_schema_defaults_weekend_same PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_wizard_boiler_back_button_uses_history PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_wizard_boiler_form_and_submit PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_migrate_old_pricing_data_percentage_dual PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_migrate_old_pricing_data_fixed_single PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_migrate_old_pricing_data_fixed_prices_dual PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_migrate_old_pricing_data_noop_for_new PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_map_pricing_to_backend_spot_fixed_and_percentage_export PASSED [ 13%] +tests/test_config_steps_boiler_and_migration.py::test_map_pricing_to_backend_fix_price_import_and_export PASSED [ 13%] +tests/test_config_steps_distribution.py::test_pricing_distribution_schema_weekend_fields PASSED [ 13%] +tests/test_config_steps_distribution.py::test_pricing_distribution_weekend_toggle_rerender PASSED [ 13%] +tests/test_config_steps_distribution.py::test_pricing_distribution_invalid_hours PASSED [ 13%] +tests/test_config_steps_distribution.py::test_pricing_distribution_success_weekend_custom PASSED [ 13%] +tests/test_config_steps_flow.py::test_total_steps_with_modules_and_summary PASSED [ 13%] +tests/test_config_steps_flow.py::test_total_steps_options_flow_reconfigure PASSED [ 13%] +tests/test_config_steps_flow.py::test_current_step_number_pricing_flow PASSED [ 14%] +tests/test_config_steps_flow.py::test_step_placeholders_progress_bar PASSED [ 14%] +tests/test_config_steps_flow.py::test_get_next_step_skips_disabled_modules PASSED [ 14%] +tests/test_config_steps_flow.py::test_wizard_intervals_validation_errors PASSED [ 14%] +tests/test_config_steps_flow.py::test_wizard_intervals_success_path PASSED [ 14%] +tests/test_config_steps_helpers_more.py::test_sanitize_data_source_mode PASSED [ 14%] +tests/test_config_steps_helpers_more.py::test_migrate_old_pricing_data_fixed_prices_dual PASSED [ 14%] +tests/test_config_steps_helpers_more.py::test_map_pricing_to_backend_dual_weekend_custom PASSED [ 14%] +tests/test_config_steps_helpers_more.py::test_map_backend_to_frontend_fixed_prices_dual PASSED [ 14%] +tests/test_config_steps_helpers_more2.py::test_handle_back_button_history PASSED [ 14%] +tests/test_config_steps_helpers_more2.py::test_generate_summary_variants PASSED [ 14%] +tests/test_config_steps_more.py::test_migrate_old_pricing_data_empty_and_passthrough PASSED [ 14%] +tests/test_config_steps_more.py::test_migrate_old_pricing_data_fixed_models PASSED [ 14%] +tests/test_config_steps_more.py::test_map_backend_to_frontend_weekend_same_defaults PASSED [ 14%] +tests/test_config_steps_more.py::test_get_defaults_reconfiguration PASSED [ 14%] +tests/test_config_steps_more.py::test_handle_back_button_returns_previous PASSED [ 14%] +tests/test_config_steps_more.py::test_handle_back_button_no_history_returns_welcome PASSED [ 14%] +tests/test_config_steps_more.py::test_generate_summary_all_sections PASSED [ 14%] +tests/test_config_steps_more3.py::test_sanitize_data_source_mode_variants PASSED [ 14%] +tests/test_config_steps_more3.py::test_config_flow_sanitize_mode_override PASSED [ 15%] +tests/test_config_steps_more3.py::test_pricing_distribution_tariff_change_rerender PASSED [ 15%] +tests/test_config_steps_more3.py::test_pricing_distribution_invalid_fees_and_vat PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_intervals_local_proxy_missing PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_solar_validation_errors PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_solar_string_param_errors PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_solar_initial_form PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_welcome_routes PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_credentials_live_data_not_enabled PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_credentials_invalid_auth PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_credentials_cannot_connect PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_credentials_unknown_error PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_credentials_initial_form PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_modules_go_back PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_modules_dashboard_requires_all PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_solar_invalid_coordinates_format PASSED [ 15%] +tests/test_config_steps_more4.py::test_wizard_solar_invalid_string_params_format PASSED [ 15%] +tests/test_config_steps_more4.py::test_migrate_old_pricing_data_fixed_dual PASSED [ 15%] +tests/test_config_steps_more4.py::test_map_backend_to_frontend_weekend_same_inferred PASSED [ 15%] +tests/test_config_steps_more4.py::test_map_backend_to_frontend_weekend_same_computed_false PASSED [ 16%] +tests/test_config_steps_more4.py::test_get_defaults_non_reconfiguration PASSED [ 16%] +tests/test_config_steps_more4.py::test_get_planner_mode_value PASSED [ 16%] +tests/test_config_steps_more4.py::test_get_step_placeholders_fallback PASSED [ 16%] +tests/test_config_steps_more4.py::test_get_current_step_number_options_flow PASSED [ 16%] +tests/test_config_steps_more4.py::test_get_next_step_unknown PASSED [ 16%] +tests/test_config_steps_more4.py::test_quick_setup_ote_api_warning PASSED [ 16%] +tests/test_config_steps_more4.py::test_quick_setup_live_data_not_enabled PASSED [ 16%] +tests/test_config_steps_more4.py::test_quick_setup_invalid_auth PASSED [ 16%] +tests/test_config_steps_more4.py::test_quick_setup_unknown_error PASSED [ 16%] +tests/test_config_steps_pricing.py::test_sanitize_data_source_mode PASSED [ 16%] +tests/test_config_steps_pricing.py::test_migrate_old_pricing_data_percentage_dual PASSED [ 16%] +tests/test_config_steps_pricing.py::test_migrate_old_pricing_data_fixed_prices_single PASSED [ 16%] +tests/test_config_steps_pricing.py::test_map_pricing_to_backend PASSED [ 16%] +tests/test_config_steps_pricing.py::test_map_backend_to_frontend PASSED [ 16%] +tests/test_config_steps_pricing.py::test_pricing_import_scenario_switch PASSED [ 16%] +tests/test_config_steps_pricing.py::test_pricing_import_invalid_fee PASSED [ 16%] +tests/test_config_steps_pricing.py::test_pricing_export_invalid_price PASSED [ 16%] +tests/test_config_steps_pricing.py::test_pricing_import_success PASSED [ 16%] +tests/test_config_steps_wizard_extra.py::test_wizard_credentials_missing_fields PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_credentials_go_back PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_credentials_validate_errors PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_credentials_success PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_modules_requires_solar_and_extended PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_modules_dashboard_requires_modules PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_modules_success_moves_forward PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_solar_toggle_expands_form PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_solar_validation_errors PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_solar_success PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_battery_validation_errors PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_battery_success PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_pricing_import_scenario_change PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_pricing_import_validation_error PASSED [ 17%] +tests/test_config_steps_wizard_extra.py::test_wizard_pricing_distribution_validation PASSED [ 17%] +tests/test_config_validation.py::test_validate_input_invalid_auth PASSED [ 17%] +tests/test_config_validation.py::test_validate_input_live_data_missing PASSED [ 17%] +tests/test_config_validation.py::test_validate_input_success PASSED [ 17%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_ok PASSED [ 17%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_unauthorized PASSED [ 18%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_rate_limited PASSED [ 18%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_other_error PASSED [ 18%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_empty PASSED [ 18%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_client_error PASSED [ 18%] +tests/test_config_validation.py::test_validate_solar_forecast_api_key_timeout PASSED [ 18%] +tests/test_coordinator.py::test_coordinator_init_pricing_enables_ote PASSED [ 18%] +tests/test_coordinator.py::test_coordinator_init_chmu_enabled PASSED [ 18%] +tests/test_coordinator.py::test_coordinator_initialization PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_success PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_empty_response PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_api_error PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_jitter_positive PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_data_source_state_exception PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_telemetry_snapshot_exception PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_local_mode_no_telemetry_store PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_fill_config_nodes_exception PASSED [ 18%] +tests/test_coordinator.py::test_extended_data_enabled PASSED [ 18%] +tests/test_coordinator.py::test_async_update_data_startup_grace_includes_cache PASSED [ 19%] +tests/test_coordinator.py::test_async_update_data_initial_spot_fetch PASSED [ 19%] +tests/test_coordinator.py::test_schedule_spot_price_update_before_13 PASSED [ 19%] +tests/test_coordinator.py::test_schedule_spot_price_update_after_13 PASSED [ 19%] +tests/test_coordinator.py::test_schedule_spot_price_update_callback PASSED [ 19%] +tests/test_coordinator.py::test_schedule_hourly_fallback_schedules PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_updates_cache PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_no_data_and_exception PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_no_need PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_no_ote_api PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_after_13_missing_tomorrow PASSED [ 19%] +tests/test_coordinator.py::test_hourly_fallback_warning_on_empty PASSED [ 19%] +tests/test_coordinator.py::test_update_spot_prices_success PASSED [ 19%] +tests/test_coordinator.py::test_update_spot_prices_updates_listeners PASSED [ 19%] +tests/test_coordinator.py::test_update_spot_prices_no_ote_api PASSED [ 19%] +tests/test_coordinator.py::test_update_spot_prices_exception_calls_retry PASSED [ 19%] +tests/test_coordinator.py::test_update_spot_prices_failure_calls_retry PASSED [ 19%] +tests/test_coordinator.py::test_handle_spot_retry_outside_important PASSED [ 19%] +tests/test_coordinator.py::test_handle_spot_retry_inside_important PASSED [ 19%] +tests/test_coordinator.py::test_handle_spot_retry_cancels_existing PASSED [ 20%] +tests/test_coordinator.py::test_handle_spot_retry_resets_after_max PASSED [ 20%] +tests/test_coordinator.py::test_handle_spot_retry_executes_retry_callback PASSED [ 20%] +tests/test_coordinator.py::test_prune_for_cache_limits_payload PASSED [ 20%] +tests/test_coordinator.py::test_prune_for_cache_fallback_str_failure PASSED [ 20%] +tests/test_coordinator.py::test_prune_for_cache_depth_limit PASSED [ 20%] +tests/test_coordinator.py::test_prune_for_cache_datetime_isoformat_error PASSED [ 20%] +tests/test_coordinator.py::test_maybe_schedule_cache_save PASSED [ 20%] +tests/test_coordinator.py::test_maybe_schedule_cache_save_no_store PASSED [ 20%] +tests/test_coordinator.py::test_maybe_schedule_cache_save_errors PASSED [ 20%] +tests/test_coordinator.py::test_maybe_schedule_cache_save_async_save_error PASSED [ 20%] +tests/test_coordinator.py::test_update_intervals_triggers_refresh PASSED [ 20%] +tests/test_coordinator.py::test_fill_config_nodes_from_cloud PASSED [ 20%] +tests/test_coordinator.py::test_fill_config_nodes_from_cloud_missing_box PASSED [ 20%] +tests/test_coordinator.py::test_should_update_extended_handles_timezone PASSED [ 20%] +tests/test_coordinator.py::test_async_update_data_local_mode_uses_snapshot PASSED [ 20%] +tests/test_coordinator.py::test_async_update_data_standalone_notifications PASSED [ 20%] +tests/test_coordinator.py::test_async_update_data_notification_init_failure PASSED [ 20%] +tests/test_coordinator.py::test_async_update_data_notification_init_success PASSED [ 20%] +tests/test_coordinator.py::test_async_update_data_notification_status_no_attr PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_config_entry_options_exception PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_no_config_entry PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_extended_notifications_success PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_extended_notifications_no_device PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_extended_notifications_failure PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_extended_stats_failure PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_standalone_notification_failure PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_battery_forecast_task_running PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_includes_spot_prices_cache PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_includes_battery_forecast_data PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_initial_spot_fetch_empty PASSED [ 21%] +tests/test_coordinator.py::test_async_update_data_initial_spot_fetch_exception PASSED [ 21%] +tests/test_coordinator.py::test_update_battery_forecast_skips_without_data PASSED [ 21%] +tests/test_coordinator.py::test_update_battery_forecast_no_inverter PASSED [ 21%] +tests/test_coordinator.py::test_update_battery_forecast_with_timeline PASSED [ 21%] +tests/test_coordinator.py::test_update_battery_forecast_no_timeline PASSED [ 21%] +tests/test_coordinator.py::test_create_simple_battery_forecast_no_data PASSED [ 21%] +tests/test_coordinator.py::test_create_simple_battery_forecast_with_data PASSED [ 21%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_throttled PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_option_error PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_stats_keys_error PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_box_not_dict PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_no_missing_nodes PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_cloud_fetch_error PASSED [ 22%] +tests/test_coordinator.py::test_maybe_fill_config_nodes_cloud_invalid PASSED [ 22%] +tests/test_coordinator.py::test_should_update_extended_naive_last_update PASSED [ 22%] +tests/test_coordinator.py::test_update_battery_forecast_config_entry_options_error PASSED [ 22%] +tests/test_coordinator.py::test_update_battery_forecast_exception PASSED [ 22%] +tests/test_coordinator.py::test_utcnow_fallback PASSED [ 22%] +tests/test_coordinator.py::test_init_pricing_cache_load_error_next_day PASSED [ 22%] +tests/test_coordinator.py::test_init_pricing_ote_api_error PASSED [ 22%] +tests/test_coordinator.py::test_init_chmu_api_error PASSED [ 22%] +tests/test_coordinator.py::test_async_config_entry_first_refresh_cache_load PASSED [ 22%] +tests/test_coordinator.py::test_async_config_entry_first_refresh_cache_load_error PASSED [ 22%] +tests/test_coordinator.py::test_async_config_entry_first_refresh_failure_with_cache PASSED [ 22%] +tests/test_coordinator.py::test_async_config_entry_first_refresh_failure_no_cache PASSED [ 22%] +tests/test_data_sensor_extra.py::test_notification_state_and_attributes PASSED [ 22%] +tests/test_data_sensor_extra.py::test_extended_values_and_fve_current PASSED [ 23%] +tests/test_data_sensor_extra.py::test_grid_mode_king_and_queen PASSED [ 23%] +tests/test_data_sensor_extra.py::test_local_entity_value_mapping PASSED [ 23%] +tests/test_data_sensor_extra.py::test_handle_coordinator_update PASSED [ 23%] +tests/test_data_sensor_grid_mode.py::test_grid_mode_limited_king PASSED [ 23%] +tests/test_data_sensor_grid_mode.py::test_grid_mode_off_when_disabled PASSED [ 23%] +tests/test_data_sensor_grid_mode.py::test_grid_mode_queen_branch PASSED [ 23%] +tests/test_data_sensor_more.py::test_fallback_value_uses_last_state PASSED [ 23%] +tests/test_data_sensor_more.py::test_fallback_value_restored_state PASSED [ 23%] +tests/test_data_sensor_more.py::test_fallback_value_energy_default PASSED [ 23%] +tests/test_data_sensor_more.py::test_get_local_entity_id_for_config_prefers_existing_state PASSED [ 23%] +tests/test_data_sensor_more.py::test_get_local_entity_id_for_config_default_domain PASSED [ 23%] +tests/test_data_sensor_more.py::test_apply_local_value_map_and_coerce PASSED [ 23%] +tests/test_data_sensor_more.py::test_get_extended_value_out_of_range PASSED [ 23%] +tests/test_data_sensor_more.py::test_compute_fve_current_voltage_zero PASSED [ 23%] +tests/test_data_sensor_more.py::test_local_grid_mode_uses_local_values PASSED [ 23%] +tests/test_data_sensor_more.py::test_grid_mode_fallbacks_to_local PASSED [ 23%] +tests/test_data_sensor_more.py::test_handle_coordinator_update_no_data PASSED [ 23%] +tests/test_data_sensor_more.py::test_handle_coordinator_update_unchanged PASSED [ 23%] +tests/test_data_sensor_more.py::test_notification_manager_missing PASSED [ 24%] +tests/test_data_sensor_more.py::test_bypass_status_missing_manager PASSED [ 24%] +tests/test_data_sensor_more.py::test_notification_counts_and_attributes PASSED [ 24%] +tests/test_data_sensor_more.py::test_latest_notification_attributes PASSED [ 24%] +tests/test_data_sensor_more.py::test_bypass_status_attributes PASSED [ 24%] +tests/test_data_sensor_more.py::test_special_state_mappings PASSED [ 24%] +tests/test_data_sensor_more.py::test_grid_mode_queen_changing PASSED [ 24%] +tests/test_data_sensor_more.py::test_grid_mode_king_changing PASSED [ 24%] +tests/test_data_sensor_more.py::test_grid_mode_missing_data PASSED [ 24%] +tests/test_data_sensor_more.py::test_get_local_value_unknown_state PASSED [ 24%] +tests/test_data_sensor_more.py::test_get_node_value_missing PASSED [ 24%] +tests/test_data_sensor_more.py::test_get_extended_value_for_sensor_types PASSED [ 24%] +tests/test_data_sensor_more.py::test_compute_fve_current_second_channel PASSED [ 24%] +tests/test_data_sensor_more.py::test_get_extended_value_handles_missing PASSED [ 24%] +tests/test_data_sensor_more.py::test_async_added_and_removed PASSED [ 24%] +tests/test_data_sensor_more.py::test_state_handles_invalid_grid_value PASSED [ 24%] +tests/test_data_sensor_more.py::test_state_extended_import_error PASSED [ 24%] +tests/test_data_sensor_more.py::test_resolve_box_id_fallback PASSED [ 24%] +tests/test_data_source_controller.py::test_init_data_source_state_local_ok PASSED [ 24%] +tests/test_data_source_controller.py::test_init_data_source_state_proxy_mismatch PASSED [ 25%] +tests/test_data_source_controller.py::test_update_state_cloud_only_forces_cloud PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_tracks_pending PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_ignored_cloud_only PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_wrong_entity PASSED [ 25%] +tests/test_data_source_controller.py::test_schedule_debounced_poke_failure PASSED [ 25%] +tests/test_data_source_controller.py::test_update_state_proxy_missing PASSED [ 25%] +tests/test_data_source_controller.py::test_on_effective_mode_changed_handles_errors PASSED [ 25%] +tests/test_data_source_controller.py::test_poke_coordinator_handles_error PASSED [ 25%] +tests/test_data_source_controller.py::test_handle_local_event_updates_coordinator PASSED [ 25%] +tests/test_data_source_controller.py::test_async_start_fallback_listeners PASSED [ 25%] +tests/test_data_source_controller.py::test_init_data_source_state_entry_options_error PASSED [ 25%] +tests/test_data_source_controller.py::test_init_data_source_state_local_stale_reason PASSED [ 25%] +tests/test_data_source_controller.py::test_init_data_source_state_proxy_box_missing PASSED [ 25%] +tests/test_data_source_controller.py::test_init_data_source_state_cloud_only_effective PASSED [ 25%] +tests/test_data_source_controller.py::test_async_start_seed_error PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_state_read_error PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_entity_id_not_str PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_box_id_mismatch PASSED [ 25%] +tests/test_data_source_controller.py::test_on_any_state_change_proxy_box_mismatch PASSED [ 26%] +tests/test_data_source_controller.py::test_async_start_with_event_helpers PASSED [ 26%] +tests/test_data_source_controller.py::test_on_proxy_change_triggers_mode_change PASSED [ 26%] +tests/test_data_source_controller.py::test_on_periodic_triggers_mode_change PASSED [ 26%] +tests/test_data_source_controller.py::test_async_stop_unsub_errors PASSED [ 26%] +tests/test_data_source_controller.py::test_init_data_source_state_proxy_entity_dt_error PASSED [ 26%] +tests/test_data_source_controller.py::test_async_start_fallback_listener_invokes_proxy_change PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_entity_id_not_str_local PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_wrong_prefix_local PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_expected_box_id_error PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_regex_no_match PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_coerce_box_id_exception PASSED [ 26%] +tests/test_data_source_controller.py::test_on_any_state_change_time_fired_error PASSED [ 26%] +tests/test_data_source_controller.py::test_handle_local_event_mode_changed PASSED [ 26%] +tests/test_data_source_controller.py::test_handle_local_event_exception PASSED [ 26%] +tests/test_data_source_controller.py::test_update_state_proxy_parse_failed PASSED [ 26%] +tests/test_data_source_controller.py::test_update_state_proxy_entity_dt_exception PASSED [ 26%] +tests/test_data_source_controller.py::test_update_state_expected_box_error PASSED [ 26%] +tests/test_data_source_controller.py::test_update_state_local_entities_candidate PASSED [ 26%] +tests/test_data_source_controller.py::test_update_state_local_stale_reason PASSED [ 27%] +tests/test_data_source_controller.py::test_update_state_proxy_box_mismatch_reason PASSED [ 27%] +tests/test_data_source_helpers.py::test_parse_dt_variants PASSED [ 27%] +tests/test_data_source_helpers.py::test_coerce_box_id_variants PASSED [ 27%] +tests/test_data_source_helpers.py::test_coerce_box_id_regex_error PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_configured_mode_mapping PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_proxy_stale_minutes_default PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_local_event_debounce_ms_default PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_data_source_state_default PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_effective_mode PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_latest_local_entity_update PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_latest_local_entity_update_skips_unknown PASSED [ 27%] +tests/test_data_source_helpers.py::test_get_latest_local_entity_update_exception PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_determine_block_status_fixed_tabs PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_determine_block_status_current_and_planned PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_determine_block_status_invalid_time PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_determine_block_status_missing_time PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_get_mode_from_intervals PASSED [ 27%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_guard_exception PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_price_band_hold PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_price_band_hold_no_future PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_price_band_hold_no_price PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_ups_charge PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_guard_forced_mode PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_guard_no_time PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_dominant_other PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_ups_price_limit PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_ups_high_price_no_charge PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_no_entries PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_modes PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_summarize_block_reason_actual_only PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab_empty PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab_skips_empty_group PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab_planned_only PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab_non_dict_payload PASSED [ 28%] +tests/test_detail_tabs_blocks.py::test_build_mode_blocks_for_tab_completed_mismatch PASSED [ 28%] +tests/test_detail_tabs_summary.py::test_default_metrics_summary PASSED [ 29%] +tests/test_detail_tabs_summary.py::test_aggregate_interval_metrics PASSED [ 29%] +tests/test_detail_tabs_summary.py::test_calculate_tab_summary_empty PASSED [ 29%] +tests/test_detail_tabs_summary.py::test_calculate_tab_summary_with_blocks PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_positive_export_price_generates_revenue PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_negative_export_price_costs_money PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_summer_scenario_home_iii_loses_money PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_summer_scenario_smart_saves_money PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_export_price_calculation_percentage_model PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_export_price_calculation_fixed_model PASSED [ 29%] +tests/test_dual_price_simulation.py::TestDualPriceSystem::test_negative_spot_creates_negative_export PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_ups_absorbs_solar PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_iii_all_solar_to_battery PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_iii_exports_only_when_full PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_iii_no_export_when_battery_has_space PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_ii_fve_covers_load_first PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_ii_deficit_from_grid_not_battery PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_home_i_deficit_from_battery PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_night_all_modes_discharge_battery PASSED [ 29%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_battery_discharge_with_efficiency PASSED [ 30%] +tests/test_dual_price_simulation.py::TestSimulatorPhysics::test_hw_minimum_stops_discharge PASSED [ 30%] +tests/test_dual_price_simulation.py::TestFullDaySimulation::test_summer_day_comparison PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_get_season PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_generate_profile_name_winter_heating PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_generate_profile_name_weekend_morning_spike PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_generate_profile_name_invalid_length PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_fill_missing_values_linear PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_build_daily_profiles_interpolates PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_build_72h_profiles PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_build_current_match PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_apply_floor_to_prediction PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_calculate_profile_similarity PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_extra_state_attributes_with_prediction PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_fill_missing_values_hour_median_fallback PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_fill_missing_values_global_fallback PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_build_daily_profiles_skips_missing_days PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_find_best_matching_profile_no_hourly_data PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_find_best_matching_profile_not_enough_days PASSED [ 30%] +tests/test_entities_adaptive_load_profiles.py::test_find_best_matching_profile_success PASSED [ 31%] +tests/test_entities_adaptive_load_profiles.py::test_native_value_no_data_and_with_prediction PASSED [ 31%] +tests/test_entities_adaptive_load_profiles.py::test_get_energy_unit_factor PASSED [ 31%] +tests/test_entities_adaptive_load_profiles.py::test_create_and_update_profile_warming_up PASSED [ 31%] +tests/test_entities_adaptive_load_profiles.py::test_create_and_update_profile_sends_signal PASSED [ 31%] +tests/test_entities_adaptive_load_profiles.py::test_wait_for_next_profile_window PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_parse_tariff_times PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_calculate_current_tariff_single PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_calculate_current_tariff_weekday PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_calculate_current_tariff_weekend PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_get_next_tariff_change PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_calculate_tariff_intervals_single_tariff PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_get_tariff_for_datetime_weekend PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_final_price_with_fees_percentage PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_final_price_with_fees_fixed PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_get_today_extreme_price PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_dynamic_spot_exchange_rate PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_calculate_fixed_final_price_for_datetime PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_get_spot_price_value_empty_data PASSED [ 31%] +tests/test_entities_analytics_sensor.py::test_get_fixed_price_value_min_max PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_calculate_fixed_daily_average_dual_tariff PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_get_next_tariff_change_single_tariff PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_calculate_tariff_intervals_dual_tariff_weekend PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_available_pricing_disabled PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_state_current_tariff_and_spot_price PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_extra_state_attributes_current_tariff PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_extra_state_attributes_hourly_fixed_prices PASSED [ 32%] +tests/test_entities_analytics_sensor.py::test_extra_state_attributes_hourly_dynamic PASSED [ 32%] +tests/test_entities_analytics_sensor_edge.py::test_fixed_prices_hourly_all_current_value PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_native_value_unavailable PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_native_value_no_spot_prices PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_calculate_current_tariff_fallback_yesterday PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_next_tariff_change_no_changes PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_calculate_tariff_intervals_no_changes PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_current_spot_price_eur_missing PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_today_average_price_missing PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_today_extreme_price_invalid_key PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_tomorrow_average_price_missing PASSED [ 32%] +tests/test_entities_analytics_sensor_more.py::test_get_spot_price_value_fixed_prices_eur PASSED [ 33%] +tests/test_entities_analytics_sensor_more.py::test_extra_state_attributes_no_spot_prices PASSED [ 33%] +tests/test_entities_analytics_sensor_more.py::test_available_pricing_enabled_success PASSED [ 33%] +tests/test_entities_analytics_sensor_more.py::test_state_error_path PASSED [ 33%] +tests/test_entities_analytics_sensor_more2.py::test_get_current_spot_price_missing_returns_none PASSED [ 33%] +tests/test_entities_analytics_sensor_more2.py::test_get_tariff_for_datetime_single PASSED [ 33%] +tests/test_entities_analytics_sensor_more3.py::test_dynamic_spot_price_paths PASSED [ 33%] +tests/test_entities_analytics_sensor_more3.py::test_fixed_price_paths_dual_tariff PASSED [ 33%] +tests/test_entities_analytics_sensor_more3.py::test_current_tariff_and_extra_attributes PASSED [ 33%] +tests/test_entities_analytics_sensor_more3.py::test_next_tariff_change_weekend PASSED [ 33%] +tests/test_entities_battery_balancing_sensor.py::test_format_hhmm PASSED [ 33%] +tests/test_entities_battery_balancing_sensor.py::test_parse_dt_local PASSED [ 33%] +tests/test_entities_battery_balancing_sensor.py::test_balancing_sensor_update_from_manager PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_format_hhmm PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_parse_dt_local_invalid PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_update_from_manager_disabled PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_update_from_manager_active_plan_balancing PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_update_from_manager_overdue PASSED [ 33%] +tests/test_entities_battery_balancing_sensor_more.py::test_async_added_to_hass_restores PASSED [ 33%] +tests/test_entities_battery_health_sensor.py::test_find_monotonic_charging_intervals PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_get_value_at_time_invalid_state PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_current_soh_and_capacity PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_storage_load_and_save PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_storage_load_and_save_errors PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_analyze_last_10_days_no_history PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_analyze_last_10_days_missing_sensors PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_analyze_last_10_days_happy_path PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_find_monotonic_intervals_ignores_unknown PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity_rejects_invalid PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity_missing_charge_values PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity_efficiency_invalid PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity_soh_limits PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_calculate_capacity_soh_too_low PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_get_value_at_time_empty PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_current_soh_and_capacity_empty PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_battery_health_sensor_lifecycle PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_battery_health_sensor_resolve_box_id_error PASSED [ 34%] +tests/test_entities_battery_health_sensor.py::test_battery_health_sensor_remove_and_initial_analysis PASSED [ 35%] +tests/test_entities_battery_health_sensor.py::test_battery_health_sensor_native_value_and_attrs PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_gps_coordinates_priority PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_gps_coordinates_fallback_to_ha PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_compute_severity_global_and_local PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_global_truncates_description PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_global_short_description PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_available_fallback_to_super PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_compute_severity_no_data PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_gps_coordinates_default PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_warning_data_from_coordinator PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_async_added_to_hass_sets_attribute_when_missing PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_available_with_cached_data PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_no_data PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_local_no_top_warning PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_local_with_details PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_local_regions_limit PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_extra_state_attributes_local_regions_exception PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_severity_distribution PASSED [ 35%] +tests/test_entities_chmu_sensor.py::test_get_severity_distribution_no_data PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_icon_thresholds PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_device_info_passthrough PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_load_and_save_persistent_data PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_load_persistent_data_no_warning PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_load_persistent_data_none PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_load_persistent_data_error PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_save_persistent_data_error PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_async_added_to_hass_fetches_immediately PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_async_added_to_hass_loads_cached PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_should_fetch_data PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_delayed_initial_fetch PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_periodic_update_triggers_fetch PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_fetch_warning_data_no_gps PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_fetch_warning_data_no_api PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_fetch_warning_data_success PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_fetch_warning_data_api_error_cached PASSED [ 36%] +tests/test_entities_chmu_sensor.py::test_fetch_warning_data_api_error_no_cache PASSED [ 36%] +tests/test_entities_computed_sensor.py::test_get_entity_number_and_oig_number PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_get_oig_last_updated PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_energy_store_load_and_save PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_format_time_variants PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_check_for_real_data_changes PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_batt_power_charge_discharge PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_extended_fve_current PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_get_energy_value_from_cache PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_accumulate_energy_charging PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_state_totals_from_entities PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_boiler_current_manual_and_auto_modes PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_reset_daily_resets_periods PASSED [ 37%] +tests/test_entities_computed_sensor.py::test_async_added_to_hass_restores_from_state PASSED [ 37%] +tests/test_entities_computed_sensor_edge.py::test_get_oig_number_invalid_box PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_get_entity_number_invalid_inputs PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_get_oig_number_invalid_box PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_get_oig_last_updated_naive_time PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_load_energy_from_storage_non_numeric PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_save_energy_to_storage_throttled PASSED [ 37%] +tests/test_entities_computed_sensor_more.py::test_state_real_data_update PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_state_various_aggregations PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_state_batt_comp_charge_discharge PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_state_capacity_variants_and_time PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_state_time_edge_strings PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_format_time_plural_variants PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_get_energy_value_missing_key PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_accumulate_energy_discharge PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_boiler_consumption_error PASSED [ 38%] +tests/test_entities_computed_sensor_more.py::test_cancel_reset_unsub_error PASSED [ 38%] +tests/test_entities_computed_sensor_more2.py::test_get_oig_last_updated_missing PASSED [ 38%] +tests/test_entities_computed_sensor_more2.py::test_accumulate_energy_missing_power PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_get_entity_number_variants PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_get_oig_number_invalid_box PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_get_oig_last_updated_missing_hass PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_get_oig_last_updated_invalid_box PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_get_oig_last_updated_handles_timezone PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_load_energy_from_storage_populates_defaults PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_load_energy_from_storage_cache PASSED [ 38%] +tests/test_entities_computed_sensor_more3.py::test_load_energy_from_storage_error PASSED [ 39%] +tests/test_entities_computed_sensor_more3.py::test_save_energy_to_storage_forced PASSED [ 39%] +tests/test_entities_computed_sensor_more3.py::test_save_energy_to_storage_error PASSED [ 39%] +tests/test_entities_data_sensor.py::test_get_mode_name_and_unknown PASSED [ 39%] +tests/test_entities_data_sensor.py::test_grid_mode_king_and_queen PASSED [ 39%] +tests/test_entities_data_sensor.py::test_apply_local_value_map_and_coerce PASSED [ 39%] +tests/test_entities_data_sensor.py::test_state_box_mode PASSED [ 39%] +tests/test_entities_data_sensor.py::test_state_grid_mode_missing_data_uses_local PASSED [ 39%] +tests/test_entities_data_sensor.py::test_state_latest_notification_without_manager PASSED [ 39%] +tests/test_entities_data_sensor.py::test_extra_state_attributes_notification_manager PASSED [ 39%] +tests/test_entities_data_sensor.py::test_get_extended_value_and_compute_current PASSED [ 39%] +tests/test_entities_data_sensor_more.py::test_extended_value_lookup_and_mode_name PASSED [ 39%] +tests/test_entities_data_sensor_more.py::test_extended_value_missing_data PASSED [ 39%] +tests/test_entities_data_sensor_more2.py::test_extended_value_out_of_range PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_fallback_value_prefers_last_state PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_local_entity_id_suffix_and_domains PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_apply_local_value_map_numeric_conversion PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_get_local_grid_mode_failure PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_get_node_value_missing_node_key PASSED [ 39%] +tests/test_entities_data_sensor_more3.py::test_init_handles_sensor_types_import_error PASSED [ 40%] +tests/test_entities_data_sensor_more3.py::test_get_extended_value_unknown_mapping PASSED [ 40%] +tests/test_entities_data_sensor_more3.py::test_get_extended_value_index_out_of_range PASSED [ 40%] +tests/test_entities_data_source_sensor.py::test_state_local_vs_cloud PASSED [ 40%] +tests/test_entities_data_source_sensor.py::test_extra_state_attributes PASSED [ 40%] +tests/test_entities_data_source_sensor.py::test_async_added_and_removed PASSED [ 40%] +tests/test_entities_runtime.py::test_available_with_missing_node PASSED [ 40%] +tests/test_entities_runtime.py::test_available_when_data_present PASSED [ 40%] +tests/test_entities_runtime.py::test_device_info_categories PASSED [ 40%] +tests/test_entities_runtime.py::test_name_uses_language PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_extract_param_type PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_translate_shield_state PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_queue_and_status PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_unavailable PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_mode_reaction_time PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_activity_and_idle PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_activity_fallback PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_state_changed_callback PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_registers_callback PASSED [ 40%] +tests/test_entities_shield_sensor.py::test_shield_sensor_extra_state_attributes PASSED [ 41%] +tests/test_entities_shield_sensor.py::test_shield_sensor_unique_id_device_info_available PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_parse_forecast_hour PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_should_fetch_data_daily_optimized PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_should_fetch_data_manual PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_get_update_interval PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_load_persistent_data PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_save_persistent_data PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_should_fetch_data_modes PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_convert_to_hourly_keeps_max PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_process_forecast_data_combines_strings PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_periodic_update_daily_optimized_triggers PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_periodic_update_daily_optimized_skips_recent PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_periodic_update_daily_calls PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_async_fetch_forecast_data_rate_limit PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_async_fetch_forecast_data_string1_only PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_broadcast_forecast_data_triggers_updates PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_async_added_to_hass_schedules_fetch PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_async_added_to_hass_uses_cached_data PASSED [ 41%] +tests/test_entities_solar_forecast_sensor.py::test_state_uses_coordinator_and_availability PASSED [ 42%] +tests/test_entities_solar_forecast_sensor.py::test_state_and_attributes_all_sensors PASSED [ 42%] +tests/test_entities_solar_forecast_sensor.py::test_periodic_update_every_4h_and_hourly PASSED [ 42%] +tests/test_entities_solar_forecast_sensor.py::test_manual_update_handles_failure PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_parse_forecast_hour_invalid PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_should_fetch_data_modes PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_get_update_interval PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_periodic_update_daily_optimized_skips PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_periodic_update_daily_only_at_six PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_async_fetch_forecast_rate_limit PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_async_fetch_forecast_string1_422 PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_async_fetch_forecast_no_strings PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_async_fetch_forecast_success PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_process_forecast_data_string2_only PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_convert_to_hourly_invalid_timestamp PASSED [ 42%] +tests/test_entities_solar_forecast_sensor_more.py::test_extra_state_attributes_string1_and_string2 PASSED [ 42%] +tests/test_entities_statistics_sensor.py::test_ensure_timezone_aware PASSED [ 42%] +tests/test_entities_statistics_sensor.py::test_safe_datetime_compare PASSED [ 42%] +tests/test_entities_statistics_sensor.py::test_create_hourly_attributes PASSED [ 42%] +tests/test_entities_statistics_sensor.py::test_statistics_processor_process_hourly_data PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_load_statistics_data PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_save_statistics_data PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_cleanup_old_data PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_update_sampling_data_triggers_save PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_check_hourly_end_updates PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_available_disabled_statistics PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_available_hourly_with_source_entity PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_hourly_energy_diff_kwh PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_hourly_energy_diff_wh PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_hourly_energy_power_integral_w PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_statistics_value_interval_median PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_statistics_value_uses_all_samples_when_stale PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_extra_state_attributes_hourly_totals PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_get_actual_load_value PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_daily_statistics_update_saves PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_calculate_interval_statistics_from_history_cross_midnight PASSED [ 43%] +tests/test_entities_statistics_sensor.py::test_state_hourly_without_coordinator_data PASSED [ 43%] +tests/test_entities_statistics_sensor_edge.py::test_available_hourly_missing_entity PASSED [ 43%] +tests/test_entities_statistics_sensor_more.py::test_load_statistics_data_invalid_records PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_save_statistics_data_store_failure PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_update_sampling_data_no_value PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_check_hourly_end_skips_outside_window PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_check_hourly_end_skip_same_hour PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_calculate_hourly_energy_unknown_unit_energy_diff PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_calculate_hourly_energy_power_integral_kw PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_calculate_hourly_energy_initial_none PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_calculate_statistics_value_interval_empty PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_extra_state_attributes_battery_load_median PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_extra_state_attributes_interval PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_available_hourly_unavailable_state PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_create_hourly_attributes_error PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_safe_datetime_compare_error PASSED [ 44%] +tests/test_entities_statistics_sensor_more.py::test_calculate_interval_statistics_from_history_no_data PASSED [ 44%] +tests/test_entities_statistics_sensor_more2.py::test_get_actual_load_value_invalid PASSED [ 44%] +tests/test_entities_statistics_sensor_more3.py::test_is_correct_day_type PASSED [ 44%] +tests/test_entities_statistics_sensor_more3.py::test_calculate_interval_statistics_without_range PASSED [ 44%] +tests/test_entities_statistics_sensor_more3.py::test_calculate_interval_statistics_no_history PASSED [ 44%] +tests/test_entities_statistics_sensor_more3.py::test_calculate_interval_statistics_with_data PASSED [ 45%] +tests/test_etag_caching.py::TestETagCaching::test_first_request_without_etag PASSED [ 45%] +tests/test_etag_caching.py::TestETagCaching::test_second_request_with_304 PASSED [ 45%] +tests/test_etag_caching.py::TestETagCaching::test_etag_change_updates_cache PASSED [ 45%] +tests/test_etag_caching.py::TestETagCaching::test_no_etag_support PASSED [ 45%] +tests/test_etag_caching.py::TestETagCaching::test_extended_stats_etag PASSED [ 45%] +tests/test_etag_caching.py::TestJitter::test_jitter_range PASSED [ 45%] +tests/test_etag_caching.py::TestJitter::test_jitter_stored PASSED [ 45%] +tests/test_extended_summary.py::test_aggregate_cost_by_day PASSED [ 45%] +tests/test_extended_summary.py::test_get_day_cost_from_timeline PASSED [ 45%] +tests/test_extended_summary.py::test_format_planned_data PASSED [ 45%] +tests/test_extended_summary.py::test_format_actual_data PASSED [ 45%] +tests/test_extended_summary.py::test_calculate_day_summary PASSED [ 45%] +tests/test_extended_summary.py::test_build_today_tile_summary PASSED [ 45%] +tests/test_extended_summary.py::test_build_today_tile_summary_handles_missing_time_and_costs PASSED [ 45%] +tests/test_extended_summary.py::test_build_today_tile_summary_confidence_low PASSED [ 45%] +tests/test_extended_summary.py::test_build_today_tile_summary_confidence_high PASSED [ 45%] +tests/test_extended_summary.py::test_get_empty_tile_summary PASSED [ 45%] +tests/test_extended_summary.py::test_build_today_tile_summary_empty PASSED [ 46%] +tests/test_forecast_update.py::test_async_update_skips_when_in_progress PASSED [ 46%] +tests/test_forecast_update.py::test_async_update_skips_same_bucket PASSED [ 46%] +tests/test_forecast_update.py::test_async_update_missing_capacity_schedules_retry PASSED [ 46%] +tests/test_forecast_update.py::test_async_update_happy_path PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_calculate_charging_intervals PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_fallback PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_log_rate_limited PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_init_resolve_box_id_fallback PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_get_active_plan_key PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_missing_entry_data PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_missing_config_entry PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_missing_service_shield PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_missing_tracker PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_missing_tracker_attribute PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_tracker_exception PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_dynamic_offset_with_tracker PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_from_detail_tabs PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_without_detail_tabs PASSED [ 46%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_tomorrow_non_ups PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_load_ups_blocks_updates_cache PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_empty_sources PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_skips_completed PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_get_home_ups_blocks_handles_exception PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_parse_time_to_datetime_invalid PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_get_next_mode_after_ups PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_native_value_on_and_off PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_native_value_tomorrow_block_off PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_native_value_invalid_time_format PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_native_value_next_mode_offset PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_native_value_wraps_midnight PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_async_added_to_hass_loads_blocks PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_handle_coordinator_update PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_extra_state_attributes PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_constructor_with_config PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_extra_state_attributes_empty PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_current_mode_fallback PASSED [ 47%] +tests/test_grid_charging_plan_sensor.py::test_parse_time_to_datetime_tomorrow PASSED [ 47%] +tests/test_ha_rest_api_helpers.py::test_transform_timeline_for_api PASSED [ 48%] +tests/test_ha_rest_api_helpers.py::test_find_entry_for_box PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_transform_timeline_for_api PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_find_entry_for_box PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_battery_timeline_store_error_and_missing_entity PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_battery_timeline_timeline_hybrid PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_battery_timeline_entity_precomputed_error PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_spot_prices_view_spot_ok PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_spot_prices_view_exception PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_analytics_view_missing_component PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_analytics_view_exception PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_consumption_profiles_view_exception PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_balancing_decisions_warning_path PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_balancing_decisions_exception PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_unified_cost_tile_legacy_key PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_unified_cost_tile_store_error_component_missing PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_unified_cost_tile_build_error PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_detail_tabs_precomputed_hybrid_tab_all PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_detail_tabs_entity_components_fallback PASSED [ 48%] +tests/test_ha_rest_api_more.py::test_detail_tabs_precomputed_store_on_entity PASSED [ 49%] +tests/test_ha_rest_api_more.py::test_planner_settings_post_no_change PASSED [ 49%] +tests/test_ha_rest_api_more.py::test_planner_settings_entry_missing PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_battery_timeline_view_precomputed PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_battery_timeline_view_missing_sensor_component PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_battery_timeline_view_entity_precomputed PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_spot_prices_view_invalid_type PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_spot_prices_view_valid PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_spot_prices_view_missing_component PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_spot_prices_view_missing_entity PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_unified_cost_tile_view_precomputed PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_detail_tabs_view_precomputed PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_consumption_profiles_view_missing_component PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_consumption_profiles_view_missing_entity PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_consumption_profiles_view_ok PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_balancing_decisions_view_missing_component PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_balancing_decisions_view_missing_entity PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_balancing_decisions_view_ok PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_planner_settings_view_get_and_post PASSED [ 49%] +tests/test_ha_rest_api_views.py::test_planner_settings_view_invalid_payload PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_dashboard_modules_view PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_dashboard_modules_view_missing PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_setup_api_endpoints_registers_views PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_analytics_view_ok PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_analytics_view_missing_entity PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_planner_settings_view_invalid_json PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_planner_settings_view_no_change PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_dashboard_modules_view_ok PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_dashboard_modules_view_missing_entry PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_detail_tabs_view_fallback PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_battery_timeline_view_entity_fallback PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_unified_cost_tile_view_build_from_entity PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_unified_cost_tile_view_missing_build_method PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_planner_settings_view_missing_entry PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_dashboard_modules_view_wrong_domain PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_detail_tabs_view_missing_component PASSED [ 50%] +tests/test_ha_rest_api_views.py::test_detail_tabs_view_missing_build_method PASSED [ 50%] +tests/test_ha_sensor.py::test_sensor_proxy_properties PASSED [ 50%] +tests/test_ha_sensor.py::test_sensor_async_update_proxy PASSED [ 51%] +tests/test_ha_sensor.py::test_sensor_analysis_proxies PASSED [ 51%] +tests/test_ha_sensor.py::test_sensor_battery_state_proxies PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_state_and_availability_proxies PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_extra_state_attributes_proxy PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_calculate_data_hash_proxy PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_async_update_calls_forecast PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_build_detail_tabs_passes_mode_names PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_build_timeline_extended PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_schedule_precompute_proxy PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_simulate_interval_proxy PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_scenario_analysis_proxies PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_storage_and_task_proxies PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_precompute_and_cost_tile_proxy PASSED [ 51%] +tests/test_ha_sensor_proxy.py::test_additional_proxy_helpers PASSED [ 51%] +tests/test_history_helpers.py::test_safe_float_and_build_ids PASSED [ 51%] +tests/test_history_helpers.py::test_select_interval_states_in_range_and_neighbors PASSED [ 51%] +tests/test_history_helpers.py::test_calc_delta_kwh_handles_edge_cases PASSED [ 51%] +tests/test_history_helpers.py::test_get_values_and_parse_start PASSED [ 51%] +tests/test_history_helpers.py::test_build_actual_interval_entry_rounding PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_interval_from_history_basic PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_interval_from_history_no_hass PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_interval_from_history_no_states PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_interval_from_history_exception PASSED [ 52%] +tests/test_history_helpers.py::test_patch_existing_actual PASSED [ 52%] +tests/test_history_helpers.py::test_build_new_actual_intervals PASSED [ 52%] +tests/test_history_helpers.py::test_normalize_mode_history PASSED [ 52%] +tests/test_history_helpers.py::test_expand_modes_to_intervals PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_no_hass PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_empty PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_import_error PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_empty_states PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_exception PASSED [ 52%] +tests/test_history_helpers.py::test_fetch_mode_history_from_recorder_filters_states PASSED [ 52%] +tests/test_history_helpers.py::test_map_mode_name_to_id_unknown PASSED [ 52%] +tests/test_history_helpers.py::test_map_mode_name_to_id_fallbacks PASSED [ 52%] +tests/test_history_helpers.py::test_build_historical_modes_lookup PASSED [ 52%] +tests/test_history_helpers.py::test_build_historical_modes_lookup_no_hass PASSED [ 52%] +tests/test_history_helpers.py::test_update_actual_from_history_no_plan PASSED [ 53%] +tests/test_history_helpers.py::test_update_actual_from_history_updates PASSED [ 53%] +tests/test_history_helpers.py::test_update_actual_from_history_existing_state PASSED [ 53%] +tests/test_home_ii_deficit_critical_bug.py::TestHOMEIIDeficitBehavior::test_home_ii_surplus_charges_battery PASSED [ 53%] +tests/test_home_ii_deficit_critical_bug.py::TestHOMEIIDeficitBehavior::test_home_ii_deficit_uses_grid_NOT_battery PASSED [ 53%] +tests/test_home_ii_deficit_critical_bug.py::TestHOMEIIDeficitBehavior::test_home_ii_night_discharges_normally PASSED [ 53%] +tests/test_home_ii_deficit_critical_bug.py::TestHOMEIIDeficitBehavior::test_home_ii_vs_home_i_deficit_difference PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_extract_prices PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_analyze_future_prices_negative PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_handle_negative_price_variants PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_apply_smoothing_merges_short_runs PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_score_mode_ups_penalized_when_disabled PASSED [ 53%] +tests/test_hybrid_scoring_helpers.py::test_calculate_baseline_cost PASSED [ 53%] +tests/test_init_cleanup.py::test_cleanup_invalid_empty_devices PASSED [ 53%] +tests/test_init_cleanup.py::test_cleanup_invalid_empty_devices_with_entities PASSED [ 53%] +tests/test_init_cleanup.py::test_cleanup_invalid_empty_devices_skips_invalid_sets PASSED [ 53%] +tests/test_init_cleanup.py::test_cleanup_invalid_empty_devices_exception PASSED [ 53%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids_exceptions PASSED [ 53%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids_enable_and_remove_failures PASSED [ 53%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids_first_update_failure PASSED [ 54%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids_second_update_failure PASSED [ 54%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids_startswith_flip PASSED [ 54%] +tests/test_init_cleanup.py::test_migrate_entity_unique_ids PASSED [ 54%] +tests/test_init_cleanup.py::test_cleanup_unused_devices_removes_or_keeps PASSED [ 54%] +tests/test_init_extra.py::test_setup_telemetry_success PASSED [ 54%] +tests/test_init_extra.py::test_setup_telemetry_no_handler PASSED [ 54%] +tests/test_init_extra.py::test_setup_telemetry_exception PASSED [ 54%] +tests/test_init_extra.py::test_async_setup PASSED [ 54%] +tests/test_init_extra.py::test_cleanup_unused_devices PASSED [ 54%] +tests/test_init_extra.py::test_cleanup_unused_devices_regex_and_remove_error PASSED [ 54%] +tests/test_init_extra.py::test_cleanup_unused_devices_none_removed PASSED [ 54%] +tests/test_init_extra.py::test_async_remove_config_entry_device PASSED [ 54%] +tests/test_init_extra.py::test_async_remove_config_entry_device_exception PASSED [ 54%] +tests/test_init_extra.py::test_async_unload_entry PASSED [ 54%] +tests/test_init_extra.py::test_async_unload_entry_handles_stop_error PASSED [ 54%] +tests/test_init_extra.py::test_async_reload_entry PASSED [ 54%] +tests/test_init_extra.py::test_async_update_options_disabled PASSED [ 54%] +tests/test_init_extra.py::test_async_update_options_enable_dashboard PASSED [ 55%] +tests/test_init_extra.py::test_async_update_options_needs_reload PASSED [ 55%] +tests/test_init_extra.py::test_async_update_options_disable_dashboard_change PASSED [ 55%] +tests/test_init_extra.py::test_cleanup_unused_devices_exception PASSED [ 55%] +tests/test_init_frontend.py::test_register_static_paths PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_registers PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_resolves_box_id_and_handles_errors PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_missing_register PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_noncallable_register PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_resolve_box_id_error PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_entity_checks PASSED [ 55%] +tests/test_init_frontend.py::test_setup_frontend_panel_options_get_raises PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_no_method PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_success PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_exception PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_outer_exception PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_value_error PASSED [ 55%] +tests/test_init_frontend.py::test_remove_frontend_panel_unknown PASSED [ 55%] +tests/test_init_helpers.py::test_read_manifest_file PASSED [ 55%] +tests/test_init_helpers.py::test_ensure_data_source_option_defaults PASSED [ 56%] +tests/test_init_helpers.py::test_ensure_data_source_option_defaults_no_update PASSED [ 56%] +tests/test_init_helpers.py::test_ensure_planner_option_defaults_removes_obsolete PASSED [ 56%] +tests/test_init_helpers.py::test_ensure_planner_option_defaults_invalid_max_price PASSED [ 56%] +tests/test_init_helpers.py::test_balancing_manager_import_error PASSED [ 56%] +tests/test_init_helpers.py::test_infer_box_id_from_local_entities PASSED [ 56%] +tests/test_init_helpers.py::test_infer_box_id_from_local_entities_exception PASSED [ 56%] +tests/test_init_helpers.py::test_register_static_paths PASSED [ 56%] +tests/test_init_helpers.py::test_setup_frontend_panel_registers PASSED [ 56%] +tests/test_init_helpers.py::test_remove_frontend_panel_handles_unknown PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_missing_credentials PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_success_local PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_success_cloud PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_migrates_spot_prices_flag PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_infers_box_id_from_proxy PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_infers_box_id_from_registry PASSED [ 56%] +tests/test_init_setup_entry.py::test_infer_box_id_from_local_entities PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_cloud_empty_stats PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_service_shield_failure PASSED [ 56%] +tests/test_init_setup_entry.py::test_async_setup_entry_cloud_missing_live_data PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_infer_box_id_exception PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_live_data_check_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_no_coordinator_data PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_notification_manager_fetch_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_pricing_init_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_optional_modules PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_disabled_and_missing_manager PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_boiler_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_telemetry_store_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_shield_device_info_resolve_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_notification_manager_no_device PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_notification_manager_init_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_notification_manager_box_id_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_persist_box_id_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_solar_forecast_error PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_manager_paths PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_manager_no_box_id PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_manager_executes PASSED [ 57%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_manager_callbacks PASSED [ 58%] +tests/test_init_setup_entry.py::test_async_setup_entry_balancing_manager_initial_plan PASSED [ 58%] +tests/test_init_setup_entry.py::test_async_setup_entry_shield_monitoring_no_telemetry PASSED [ 58%] +tests/test_input_helpers.py::test_get_solar_for_timestamp_today PASSED [ 58%] +tests/test_input_helpers.py::test_get_load_avg_for_timestamp_match PASSED [ 58%] +tests/test_input_helpers.py::test_get_load_avg_for_timestamp_empty PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_solar_for_timestamp_tomorrow_and_missing PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_solar_for_timestamp_invalid_value PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_solar_for_timestamp_timezone_aware_key PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_load_avg_for_timestamp_no_match PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_load_avg_for_timestamp_zero_value_fallback PASSED [ 58%] +tests/test_input_helpers_more.py::test_get_load_avg_for_timestamp_invalid_range PASSED [ 58%] +tests/test_input_helpers_more.py::test_empty_load_avg_state_flag PASSED [ 58%] +tests/test_interval_simulator.py::test_interval_result_properties PASSED [ 58%] +tests/test_interval_simulator.py::test_simulate_uses_shared_simulator PASSED [ 58%] +tests/test_interval_simulator.py::test_discharge_for_load PASSED [ 58%] +tests/test_interval_simulator.py::test_simulate_home_i_day_and_night PASSED [ 58%] +tests/test_interval_simulator.py::test_simulate_home_ii PASSED [ 58%] +tests/test_interval_simulator.py::test_simulate_home_iii PASSED [ 58%] +tests/test_interval_simulator.py::test_simulate_home_ups PASSED [ 59%] +tests/test_interval_simulator.py::test_calculate_cost PASSED [ 59%] +tests/test_interval_simulator.py::test_simulate_home_i_and_ii_curtailed PASSED [ 59%] +tests/test_interval_simulator.py::test_create_simulator PASSED [ 59%] +tests/test_load_and_solar_profiles.py::test_get_load_avg_sensors PASSED [ 59%] +tests/test_load_and_solar_profiles.py::test_get_solar_forecast_from_attributes PASSED [ 59%] +tests/test_load_and_solar_profiles.py::test_get_solar_forecast_from_cache PASSED [ 59%] +tests/test_load_and_solar_profiles.py::test_get_solar_forecast_strings PASSED [ 59%] +tests/test_load_profiles_more.py::test_get_load_avg_sensors_no_hass PASSED [ 59%] +tests/test_load_profiles_more.py::test_get_load_avg_sensors_invalid_state PASSED [ 59%] +tests/test_load_profiles_more.py::test_get_load_avg_sensors_unavailable_and_bad PASSED [ 59%] +tests/test_local_mapper.py::test_coerce_and_normalize_box_mode PASSED [ 59%] +tests/test_local_mapper.py::test_normalize_domains_and_value_map PASSED [ 59%] +tests/test_local_mapper.py::test_as_utc PASSED [ 59%] +tests/test_local_mapper_more.py::test_apply_state_unknown_entity PASSED [ 59%] +tests/test_local_mapper_more.py::test_apply_state_node_update_box_mode PASSED [ 59%] +tests/test_local_mapper_more.py::test_apply_state_extended_update PASSED [ 59%] +tests/test_local_mapper_more.py::test_apply_state_unknown_suffix PASSED [ 59%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_empty PASSED [ 59%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_invalid_time PASSED [ 60%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_no_future_intervals PASSED [ 60%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_block_changes_and_split PASSED [ 60%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_bad_end_time PASSED [ 60%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_final_block_parse_error PASSED [ 60%] +tests/test_mode_recommendations.py::test_create_mode_recommendations_block_parse_error PASSED [ 60%] +tests/test_mode_recommendations.py::test_add_block_details_modes PASSED [ 60%] +tests/test_mode_recommendations.py::test_add_block_details_home_iii_solar PASSED [ 60%] +tests/test_mode_recommendations.py::test_add_block_details_ups_low_price PASSED [ 60%] +tests/test_mode_recommendations.py::test_add_block_details_fallbacks PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_async_setup_tracks_listener PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_track_request_skips_same_mode PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_async_mode_changed_updates_history PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_get_offset_for_scenario_uses_p95 PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_async_load_historical_data_handles_missing PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_async_load_historical_data_parses_transitions PASSED [ 60%] +tests/test_mode_transition_tracker.py::test_async_cleanup_unsubscribes PASSED [ 60%] +tests/test_models.py::TestModels::test_ac_in_b_data PASSED [ 60%] +tests/test_models.py::TestModels::test_ac_in_b_data_defaults PASSED [ 60%] +tests/test_models.py::TestModels::test_ac_in_data PASSED [ 61%] +tests/test_models.py::TestModels::test_ac_out_data PASSED [ 61%] +tests/test_models.py::TestModels::test_ac_out_data_optional_fields PASSED [ 61%] +tests/test_models.py::TestModels::test_actual_data PASSED [ 61%] +tests/test_models.py::TestModels::test_battery_data PASSED [ 61%] +tests/test_models.py::TestModels::test_battery_data_partial PASSED [ 61%] +tests/test_models.py::TestModels::test_battery_params PASSED [ 61%] +tests/test_models.py::TestModels::test_boiler_data PASSED [ 61%] +tests/test_models.py::TestModels::test_boiler_data_empty PASSED [ 61%] +tests/test_models.py::TestModels::test_boiler_params PASSED [ 61%] +tests/test_models.py::TestModels::test_boiler_params_defaults PASSED [ 61%] +tests/test_models.py::TestModels::test_box_data PASSED [ 61%] +tests/test_models.py::TestModels::test_box_params PASSED [ 61%] +tests/test_models.py::TestModels::test_box_params2 PASSED [ 61%] +tests/test_models.py::TestModels::test_box_params2_defaults PASSED [ 61%] +tests/test_models.py::TestModels::test_box_params_no_sw PASSED [ 61%] +tests/test_models.py::TestModels::test_dc_in_data PASSED [ 61%] +tests/test_models.py::TestModels::test_dc_in_data_defaults PASSED [ 61%] +tests/test_models.py::TestModels::test_device_data PASSED [ 61%] +tests/test_models.py::TestModels::test_invertor_params PASSED [ 62%] +tests/test_models.py::TestModels::test_invertor_params1 PASSED [ 62%] +tests/test_models.py::TestModels::test_oig_cloud_data_from_dict PASSED [ 62%] +tests/test_models.py::TestModels::test_oig_cloud_device_data_from_dict PASSED [ 62%] +tests/test_models.py::TestModels::test_oig_cloud_device_data_special_bat_c_case PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_i_solar_covers_load PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_i_battery_covers_deficit PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_ii_preserves_battery_during_day PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_ii_discharges_at_night PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_iii_all_solar_to_battery PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_iii_export_only_when_full PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_home_ups_charges_from_grid PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_hw_minimum_stops_discharge PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_efficiency_applied_correctly PASSED [ 62%] +tests/test_new_architecture.py::TestIntervalSimulator::test_calculate_cost PASSED [ 62%] +tests/test_new_architecture.py::TestBalancingPlanFactories::test_create_natural_plan PASSED [ 62%] +tests/test_new_architecture.py::TestBalancingPlanFactories::test_create_opportunistic_plan PASSED [ 62%] +tests/test_new_architecture.py::TestBalancingPlanFactories::test_create_forced_plan PASSED [ 62%] +tests/test_new_architecture.py::TestHybridStrategy::test_optimize_returns_modes_for_all_intervals PASSED [ 62%] +tests/test_new_architecture.py::TestHybridStrategy::test_optimize_prefers_cheap_charging PASSED [ 63%] +tests/test_new_architecture.py::TestHybridStrategy::test_optimize_handles_negative_prices PASSED [ 63%] +tests/test_new_architecture.py::TestHybridStrategy::test_optimize_respects_balancing_plan PASSED [ 63%] +tests/test_new_architecture.py::TestHybridStrategy::test_optimize_calculates_savings PASSED [ 63%] +tests/test_new_architecture.py::TestFactoryFunctions::test_create_simulator PASSED [ 63%] +tests/test_new_architecture.py::TestIntegration::test_full_day_optimization PASSED [ 63%] +tests/test_oig_cloud_api.py::test_opentelemetry_import PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_ssl_context_cached PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_connector_modes PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_etag_cache PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_success PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_failure_wrong_response PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_failure_http_error PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_timeout PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_ssl_fallback_success PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_ssl_fallback_exhausted PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_unexpected_error PASSED [ 63%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_authenticate_no_ssl_modes_left PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_session_not_authenticated PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_session_headers PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_auth_retry PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_update_cache_with_etag PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_timeout_cached PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_timeout_raises PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_connection_cached PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_connection_raises PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_unexpected_cached PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_stats_internal_unexpected_raises PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_304_retry_failure PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_304_retry_success PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_http_error PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_timeout PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_try_get_stats_connection_error PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_box_mode PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_limit PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_boiler_mode PASSED [ 64%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_box_mode_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_limit_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_boiler_mode_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_ssr_rele_errors PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_box_params_internal PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_box_params_internal_not_authenticated PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_box_params_internal_failure PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_no_telemetry PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_no_box_id PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_http_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_grid_delivery_exception PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_battery_formating_success PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_battery_formating_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_formating_mode PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_formating_mode_http_error PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_set_formating_mode_exception PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_cached PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_retry_success PASSED [ 65%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_json_error PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_auth_retry PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_auth_retry_failed PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_http_error PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_retry_failure PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_extended_stats_exception PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_no_device PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_empty_content PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_success PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_auth_retry_success PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_auth_retry_failed PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_http_error PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_timeout PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_connection_error PASSED [ 66%] +tests/test_oig_cloud_api.py::TestOigCloudApi::test_get_notifications_exception PASSED [ 66%] +tests/test_oig_cloud_notification.py::test_parse_html_notifications PASSED [ 66%] +tests/test_oig_cloud_notification.py::test_parse_json_notifications_and_bypass_status PASSED [ 66%] +tests/test_oig_cloud_notification.py::test_parse_notification_fallback PASSED [ 66%] +tests/test_oig_cloud_notification.py::test_notification_manager_update_from_api PASSED [ 66%] +tests/test_oig_cloud_notification_more.py::test_parse_html_and_deduplicate PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_extract_html_from_json_wrapper PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_extract_show_notifications_payloads_and_json_objects PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_parse_single_notification_invalid_json PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_html_parser_row2_without_dash PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_extract_html_from_json_wrapper_invalid PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_detect_bypass_status_compact_indicators PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_parse_czech_datetime_invalid PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_detect_bypass_status_tokens PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_determine_notification_type_keywords PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_clean_json_string_fixes_formatting PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_create_notification_from_json_parses_timestamp PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_get_priority_name PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_parse_notification_fallback PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_manager_save_and_load_storage PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_manager_refresh_data PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_update_from_api_success PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_update_from_api_missing_device_id PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_update_from_api_missing_method_uses_cache PASSED [ 67%] +tests/test_oig_cloud_notification_more.py::test_update_from_api_error_uses_cache PASSED [ 68%] +tests/test_oig_cloud_notification_more.py::test_manager_counts_and_latest PASSED [ 68%] +tests/test_oig_cloud_notification_more.py::test_load_notifications_handles_error PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_log_api_session_info_variants PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_is_session_expired PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_api_property PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_rate_limit PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_call_with_retry_success PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_call_with_retry_auth_error PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_call_with_retry_unexpected_error PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_get_statistics_populates_rates PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_log_api_session_info_with_errors PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_ensure_auth_failure PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_wrapper_methods_cover_args PASSED [ 68%] +tests/test_oig_cloud_session_manager.py::test_close_resets_state PASSED [ 68%] +tests/test_ote_api.py::test_get_current_15min_interval PASSED [ 68%] +tests/test_ote_api.py::test_get_15min_price_for_interval PASSED [ 68%] +tests/test_ote_api.py::test_ote_api_close_noop PASSED [ 68%] +tests/test_ote_api.py::test_soap_headers PASSED [ 68%] +tests/test_ote_api.py::test_parse_period_interval_dst_suffix PASSED [ 69%] +tests/test_ote_api.py::test_parse_period_interval_first_occurrence PASSED [ 69%] +tests/test_ote_api.py::test_parse_period_interval_overflow PASSED [ 69%] +tests/test_ote_api.py::test_aggregate_quarter_to_hour PASSED [ 69%] +tests/test_ote_api.py::test_is_cache_valid_requires_tomorrow_after_13 PASSED [ 69%] +tests/test_ote_api.py::test_is_cache_valid_missing_today PASSED [ 69%] +tests/test_ote_api.py::test_cache_helpers PASSED [ 69%] +tests/test_ote_api.py::test_cache_helpers_no_path PASSED [ 69%] +tests/test_ote_api.py::test_cache_helpers_bad_cache PASSED [ 69%] +tests/test_ote_api.py::test_async_cache_load_failure PASSED [ 69%] +tests/test_ote_api.py::test_persist_cache_creates_dir PASSED [ 69%] +tests/test_ote_api.py::test_persist_cache_sync_error PASSED [ 69%] +tests/test_ote_api.py::test_async_persist_cache_failure PASSED [ 69%] +tests/test_ote_api.py::test_format_spot_data_includes_15m_prices PASSED [ 69%] +tests/test_ote_api.py::test_dam_period_query PASSED [ 69%] +tests/test_ote_api.py::test_parse_soap_response_fault PASSED [ 69%] +tests/test_ote_api.py::test_parse_soap_response_invalid PASSED [ 69%] +tests/test_ote_api.py::test_parse_soap_response_portal_unavailable PASSED [ 69%] +tests/test_ote_api.py::test_download_rates_validation_error PASSED [ 69%] +tests/test_ote_api.py::test_download_rates_http_error PASSED [ 70%] +tests/test_ote_api.py::test_download_rates_success PASSED [ 70%] +tests/test_ote_api.py::test_get_dam_period_prices_parses PASSED [ 70%] +tests/test_ote_api.py::test_get_dam_period_prices_skips_invalid PASSED [ 70%] +tests/test_ote_api.py::test_get_dam_period_prices_missing_elements PASSED [ 70%] +tests/test_ote_api.py::test_cnb_rate_get_day_rates PASSED [ 70%] +tests/test_ote_api.py::test_cnb_rate_get_day_rates_failure PASSED [ 70%] +tests/test_ote_api.py::test_cnb_rate_get_current_rates_cache PASSED [ 70%] +tests/test_ote_api.py::test_cnb_rate_get_current_rates_updates PASSED [ 70%] +tests/test_ote_api.py::test_get_cnb_exchange_rate PASSED [ 70%] +tests/test_ote_api.py::test_get_cnb_exchange_rate_cached PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_uses_cache PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_fetch_and_fallback PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_force_today PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_after_13 PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_full_success PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_fallback_to_cache_on_error PASSED [ 70%] +tests/test_ote_api.py::test_get_spot_prices_error_no_cache PASSED [ 70%] +tests/test_ote_api.py::test_cnb_rate_retries PASSED [ 70%] +tests/test_ote_api.py::test_format_spot_data_empty PASSED [ 71%] +tests/test_ote_api.py::test_has_data_for_date_helpers PASSED [ 71%] +tests/test_ote_api.py::test_should_fetch_new_data PASSED [ 71%] +tests/test_ote_api.py::test_download_soap_success PASSED [ 71%] +tests/test_ote_api.py::test_download_soap_error PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_daily_saves_and_cleans PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_success PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_no_days PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_daily_no_store PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_daily_empty_plan PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_daily_missing_plan PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_daily_save_error PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_no_store PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_cleanup PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_invalid_week_key PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_aggregate_weekly_save_error PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_backfill_daily_archive_from_storage PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_backfill_daily_archive_no_store PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_backfill_daily_archive_no_detailed PASSED [ 71%] +tests/test_plan_storage_aggregate.py::test_backfill_daily_archive_error PASSED [ 72%] +tests/test_plan_storage_aggregate.py::test_backfill_daily_archive_skip_existing PASSED [ 72%] +tests/test_plan_storage_baseline.py::test_is_baseline_plan_invalid PASSED [ 72%] +tests/test_plan_storage_baseline.py::test_create_baseline_plan_with_hybrid_timeline PASSED [ 72%] +tests/test_plan_storage_baseline.py::test_create_baseline_plan_from_storage_fallback PASSED [ 72%] +tests/test_plan_storage_baseline.py::test_ensure_plan_exists PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_keeps_existing PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_archives_and_builds PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_baseline_creation PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_baseline_failure PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_baseline_exists PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_missing_mode_result PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_archive_save_error PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_invalid_times PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_missing_attr PASSED [ 72%] +tests/test_plan_storage_daily.py::test_maybe_fix_daily_plan_preserves_actual PASSED [ 72%] +tests/test_planner_min_recovery.py::test_recover_from_below_planning_min_schedules_earliest_ups PASSED [ 72%] +tests/test_planner_min_recovery.py::test_recover_from_below_planning_min_respects_max_ups_price PASSED [ 72%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_with_detail_tabs PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_init_with_entity_category_and_resolve_error PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_normalize_mode_label PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_parse_local_start_none PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_parse_interval_time PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_get_auto_switch_lead_seconds PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_get_auto_switch_lead_seconds_exception PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_no_payload PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_timeline_only PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_detail_tabs_timeline_current PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_detail_tabs_skips_and_breaks PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_detail_tabs_fallback_to_timeline PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_timeline_skips_invalid PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_next_mode_invalid_time PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_next_mode_invalid_time_timeline PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_compute_state_and_attrs_lead_seconds_zero PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_get_forecast_payload_from_coordinator PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_async_refresh_precomputed_payload PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_async_recompute_sets_state PASSED [ 73%] +tests/test_planner_recommended_sensor.py::test_async_recompute_writes_state PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_recompute_no_change PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_recompute_handles_exception PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_available_and_extra_attrs PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_added_to_hass_setup_and_recompute PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_added_to_hass_triggers_callbacks PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_added_to_hass_handles_errors PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_async_will_remove_from_hass PASSED [ 74%] +tests/test_planner_recommended_sensor.py::test_handle_coordinator_update PASSED [ 74%] +tests/test_planner_timeline.py::test_build_planner_timeline PASSED [ 74%] +tests/test_planner_timeline.py::test_build_planner_timeline_breaks PASSED [ 74%] +tests/test_planner_timeline.py::test_format_planner_reason PASSED [ 74%] +tests/test_planner_timeline.py::test_attach_planner_reasons PASSED [ 74%] +tests/test_planner_timeline.py::test_add_decision_reasons_to_timeline PASSED [ 74%] +tests/test_planner_timeline.py::test_add_decision_reasons_to_timeline_branches PASSED [ 74%] +tests/test_planner_timeline.py::test_add_decision_reasons_empty_timeline PASSED [ 74%] +tests/test_planning_api.py::test_active_plan_missing_system PASSED [ 74%] +tests/test_planning_api.py::test_active_plan_none PASSED [ 74%] +tests/test_planning_api.py::test_active_plan_success PASSED [ 74%] +tests/test_planning_api.py::test_active_plan_error PASSED [ 75%] +tests/test_planning_api.py::test_plan_list_success PASSED [ 75%] +tests/test_planning_api.py::test_plan_list_invalid_filter PASSED [ 75%] +tests/test_planning_api.py::test_plan_list_missing_system PASSED [ 75%] +tests/test_planning_api.py::test_plan_detail_not_found PASSED [ 75%] +tests/test_planning_api.py::test_plan_detail_missing_system PASSED [ 75%] +tests/test_planning_api.py::test_plan_detail_error PASSED [ 75%] +tests/test_planning_api.py::test_plan_detail_success PASSED [ 75%] +tests/test_planning_api.py::test_create_manual_plan_missing_fields PASSED [ 75%] +tests/test_planning_api.py::test_create_manual_plan_missing_system PASSED [ 75%] +tests/test_planning_api.py::test_create_manual_plan_success PASSED [ 75%] +tests/test_planning_api.py::test_create_manual_plan_error PASSED [ 75%] +tests/test_planning_api.py::test_activate_plan_missing_system PASSED [ 75%] +tests/test_planning_api.py::test_deactivate_plan_missing_system PASSED [ 75%] +tests/test_planning_api.py::test_activate_deactivate_plan PASSED [ 75%] +tests/test_planning_api.py::test_activate_deactivate_plan_error PASSED [ 75%] +tests/test_planning_api.py::test_setup_planning_api_views PASSED [ 75%] +tests/test_planning_auto_switch.py::test_auto_mode_switch_enabled PASSED [ 75%] +tests/test_planning_auto_switch.py::test_normalize_service_mode PASSED [ 75%] +tests/test_planning_auto_switch.py::test_get_planned_mode_for_time PASSED [ 76%] +tests/test_planning_auto_switch.py::test_cancel_auto_switch_schedule_clears_handles PASSED [ 76%] +tests/test_planning_auto_switch.py::test_schedule_auto_switch_retry_sets_unsub PASSED [ 76%] +tests/test_planning_auto_switch.py::test_get_current_box_mode PASSED [ 76%] +tests/test_planning_auto_switch.py::test_cancel_auto_switch_schedule_handles_errors PASSED [ 76%] +tests/test_planning_auto_switch.py::test_clear_auto_switch_retry_handles_error PASSED [ 76%] +tests/test_planning_auto_switch.py::test_start_stop_watchdog PASSED [ 76%] +tests/test_planning_auto_switch.py::test_auto_switch_watchdog_tick PASSED [ 76%] +tests/test_planning_auto_switch.py::test_get_planned_mode_for_time_invalid PASSED [ 76%] +tests/test_planning_auto_switch.py::test_schedule_auto_switch_retry_skip PASSED [ 76%] +tests/test_planning_auto_switch.py::test_get_mode_switch_offset PASSED [ 76%] +tests/test_planning_auto_switch.py::test_get_service_shield PASSED [ 76%] +tests/test_planning_auto_switch.py::test_execute_mode_change_branches PASSED [ 76%] +tests/test_planning_auto_switch.py::test_ensure_current_mode PASSED [ 76%] +tests/test_planning_auto_switch.py::test_get_mode_switch_timeline PASSED [ 76%] +tests/test_planning_auto_switch.py::test_update_auto_switch_schedule PASSED [ 76%] +tests/test_planning_auto_switch.py::test_start_watchdog_ticks PASSED [ 76%] +tests/test_planning_auto_switch.py::test_update_auto_switch_schedule_adjusts_past PASSED [ 76%] +tests/test_planning_auto_switch.py::test_calculate_interval_cost_opportunity PASSED [ 76%] +tests/test_planning_auto_switch.py::test_calculate_fixed_mode_cost_basic PASSED [ 77%] +tests/test_planning_auto_switch.py::test_calculate_mode_baselines PASSED [ 77%] +tests/test_planning_helpers.py::test_enforce_min_mode_duration_replaces_short_block PASSED [ 77%] +tests/test_planning_helpers.py::test_get_mode_guard_context_active PASSED [ 77%] +tests/test_planning_helpers.py::test_build_plan_lock PASSED [ 77%] +tests/test_planning_helpers.py::test_apply_mode_guard_lock_and_exception PASSED [ 77%] +tests/test_planning_helpers.py::test_apply_guard_reasons_to_timeline PASSED [ 77%] +tests/test_planning_helpers.py::test_get_candidate_intervals_filters_and_sorts PASSED [ 77%] +tests/test_planning_helpers.py::test_simulate_forward_death_valley PASSED [ 77%] +tests/test_planning_helpers.py::test_calculate_minimum_charge_and_protection PASSED [ 77%] +tests/test_planning_helpers.py::test_recalculate_timeline_from_index_updates_soc_and_mode PASSED [ 77%] +tests/test_planning_helpers.py::test_fix_minimum_capacity_violations_and_target_capacity PASSED [ 77%] +tests/test_planning_helpers.py::test_group_intervals_by_mode_completed_and_planned PASSED [ 77%] +tests/test_planning_helpers.py::test_create_mode_recommendations_split_midnight PASSED [ 77%] +tests/test_planning_helpers.py::test_charging_helpers_store_metrics PASSED [ 77%] +tests/test_planning_helpers.py::test_economic_charging_plan_death_valley PASSED [ 77%] +tests/test_planning_helpers.py::test_smart_charging_plan_adds_charge PASSED [ 77%] +tests/test_precompute.py::test_precompute_ui_data_missing_store PASSED [ 77%] +tests/test_precompute.py::test_precompute_ui_data_success PASSED [ 77%] +tests/test_precompute.py::test_schedule_precompute_throttle PASSED [ 78%] +tests/test_precompute.py::test_schedule_precompute_creates_task PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_precompute_ui_data_saves_payload PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_precompute_ui_data_skips_without_store PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_precompute_ui_data_handles_detail_tabs_error PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_schedule_precompute_skips_recent PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_schedule_precompute_skips_running PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_schedule_precompute_creates_task PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_build_unified_cost_tile_success PASSED [ 78%] +tests/test_precompute_unified_tile.py::test_build_unified_cost_tile_handles_error PASSED [ 78%] +tests/test_presentation_helpers.py::test_build_extra_state_attributes PASSED [ 78%] +tests/test_presentation_helpers.py::test_calculate_data_hash PASSED [ 78%] +tests/test_presentation_helpers.py::test_build_baseline_comparison PASSED [ 78%] +tests/test_presentation_helpers.py::test_analyze_today_variance_text PASSED [ 78%] +tests/test_presentation_helpers.py::test_analyze_yesterday_performance PASSED [ 78%] +tests/test_presentation_helpers.py::test_decorate_plan_tabs_adds_metadata_and_comparison PASSED [ 78%] +tests/test_presentation_helpers.py::test_build_hybrid_detail_tabs_empty PASSED [ 78%] +tests/test_pricing_fixed_prices.py::test_calculate_final_spot_price_fixed_prices PASSED [ 78%] +tests/test_pricing_fixed_prices.py::test_get_spot_price_timeline_fixed_prices PASSED [ 78%] +tests/test_pricing_helpers.py::test_round_czk PASSED [ 79%] +tests/test_pricing_helpers.py::test_calculate_commercial_price_percentage PASSED [ 79%] +tests/test_pricing_helpers.py::test_calculate_commercial_price_fixed_prices PASSED [ 79%] +tests/test_pricing_helpers.py::test_calculate_commercial_price_fixed_fee PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_distribution_fee PASSED [ 79%] +tests/test_pricing_helpers.py::test_resolve_spot_data_fallbacks PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_prices_dict_and_resolve PASSED [ 79%] +tests/test_pricing_helpers.py::test_resolve_prices_dict_uses_cache PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_export_config PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_sensor_component_and_find_entity PASSED [ 79%] +tests/test_pricing_helpers.py::test_derive_export_prices PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_spot_price_timeline_invalid_timestamp PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_spot_price_timeline_missing_data PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_spot_price_timeline_missing_prices PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_export_price_timeline_derives PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_export_price_timeline_no_spot PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_export_price_timeline_missing_prices PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_export_price_timeline_invalid_timestamp PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_spot_data_from_price_sensor PASSED [ 79%] +tests/test_pricing_helpers.py::test_get_spot_data_from_price_sensor_exception PASSED [ 80%] +tests/test_pricing_helpers.py::test_get_spot_data_from_ote_cache PASSED [ 80%] +tests/test_pricing_helpers.py::test_get_spot_data_from_ote_cache_no_hass PASSED [ 80%] +tests/test_pricing_helpers.py::test_get_spot_data_from_ote_cache_exception PASSED [ 80%] +tests/test_pricing_more.py::test_round_czk_half_up PASSED [ 80%] +tests/test_pricing_more.py::test_calculate_commercial_price_percentage_and_fixed PASSED [ 80%] +tests/test_pricing_more.py::test_get_distribution_fee_vt_nt PASSED [ 80%] +tests/test_pricing_more.py::test_get_spot_price_timeline_invalid_timestamp PASSED [ 80%] +tests/test_pricing_more.py::test_get_export_price_timeline_direct_and_derived PASSED [ 80%] +tests/test_pricing_more.py::test_get_spot_data_from_price_sensor_component_entity PASSED [ 80%] +tests/test_pricing_more.py::test_get_spot_data_from_price_sensor_component_entities_list PASSED [ 80%] +tests/test_pricing_more.py::test_get_spot_data_from_price_sensor_missing PASSED [ 80%] +tests/test_pricing_more.py::test_get_spot_data_from_ote_cache_error PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_tariff_parsing_and_calculation_percentage PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_tariff_fixed_prices_and_fee PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_calculate_attributes_and_state PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_handle_coordinator_update PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_handle_coordinator_update_error PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_async_added_to_hass_initial_fetch PASSED [ 80%] +tests/test_pricing_spot_price_15min.py::test_async_added_to_hass_initial_fetch_error PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_restore_data_valid PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_restore_data_invalid PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_setup_daily_tracking PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_setup_15min_tracking PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_async_will_remove_cleans_tracking PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_update_current_interval_triggers_refresh PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_do_fetch_15min_spot_data PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_do_fetch_15min_spot_data_error PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_current_state_no_data PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_current_state_no_price PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_current_state_exception PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_attributes_no_data PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_attributes_invalid_interval PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_attributes_rollover PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_calculate_attributes_error PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_get_tariff_for_datetime_weekend PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_parse_tariff_times_invalid PASSED [ 81%] +tests/test_pricing_spot_price_15min.py::test_fetch_with_retry_schedules PASSED [ 82%] +tests/test_pricing_spot_price_15min.py::test_fetch_with_retry_success PASSED [ 82%] +tests/test_pricing_spot_price_15min.py::test_cancel_retry_timer PASSED [ 82%] +tests/test_pricing_spot_price_15min.py::test_schedule_retry_executes PASSED [ 82%] +tests/test_pricing_spot_price_15min.py::test_properties PASSED [ 82%] +tests/test_pricing_spot_price_15min.py::test_properties_compute_without_cache PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_export_price_calculation PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_export_attributes_and_state PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_handle_coordinator_update PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_handle_coordinator_update_error PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_async_added_to_hass_initial_fetch PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_async_added_to_hass_initial_fetch_error PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_restore_data_valid PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_setup_daily_tracking PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_setup_15min_tracking PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_update_current_interval_triggers_refresh PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_do_fetch_15min_data PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_do_fetch_15min_data_error PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_current_state_no_data PASSED [ 82%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_current_state_no_price PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_current_state_exception PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_attributes_empty PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_attributes_invalid_interval PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_attributes_rollover PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_calculate_attributes_error PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_fetch_with_retry_schedules PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_fetch_with_retry_success PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_restore_data_invalid PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_async_will_remove_from_hass PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_cancel_retry_timer PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_schedule_retry_executes PASSED [ 83%] +tests/test_pricing_spot_price_export_15min.py::test_properties PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_validate_spot_data PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_current_price_and_attributes PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_all_hourly_prices PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_handle_coordinator_update PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_handle_coordinator_update_no_data PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_async_added_to_hass_initial_fetch PASSED [ 83%] +tests/test_pricing_spot_price_hourly.py::test_async_added_to_hass_fetch_error PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_restore_data_invalid_timestamp PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_restore_data_valid_timestamp PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_do_fetch_spot_data_paths PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_do_fetch_spot_data_invalid PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_do_fetch_spot_data_error PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_state_branches PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_hourly_prices_empty PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_validate_spot_data_empty PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_validate_spot_data_missing_prices PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_validate_spot_data_too_few_hours PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_validate_spot_data_invalid_prices PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_setup_time_tracking_after_daily PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_get_helpers_missing_data PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_fetch_spot_data_legacy PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_retry_timer_cancel PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_schedule_retry_executes PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_restore_data_invalid PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_fetch_with_retry_schedules PASSED [ 84%] +tests/test_pricing_spot_price_hourly.py::test_fetch_with_retry_success PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_async_will_remove_from_hass PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_properties PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_get_hourly_prices_rollover PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_get_all_hourly_prices_empty_prices PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_async_update PASSED [ 85%] +tests/test_pricing_spot_price_hourly.py::test_spot_price_shared_helpers PASSED [ 85%] +tests/test_pricing_spot_price_sensor.py::test_spot_price_sensor_exports PASSED [ 85%] +tests/test_scenario_analysis.py::test_simulate_interval_uses_planning_min PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_interval_cost_opportunity PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_fixed_mode_cost_with_penalty PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_fixed_mode_cost_bad_timestamp PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_mode_baselines PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_mode_baselines_with_penalty PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_do_nothing_cost PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_do_nothing_cost_bad_timestamp PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_full_ups_cost PASSED [ 85%] +tests/test_scenario_analysis.py::test_calculate_full_ups_cost_bad_timestamp PASSED [ 85%] +tests/test_scenario_analysis.py::test_generate_alternatives PASSED [ 85%] +tests/test_scenario_analysis.py::test_generate_alternatives_bad_timestamp PASSED [ 86%] +tests/test_scenario_analysis.py::test_generate_alternatives_branches PASSED [ 86%] +tests/test_sensor_cleanup_extra.py::test_get_device_info_for_sensor PASSED [ 86%] +tests/test_sensor_cleanup_extra.py::test_cleanup_removed_devices PASSED [ 86%] +tests/test_sensor_cleanup_extra.py::test_cleanup_empty_devices_internal PASSED [ 86%] +tests/test_sensor_cleanup_extra.py::test_cleanup_all_orphaned_entities PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_import_errors_cover_branches PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_get_expected_sensor_types PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_cleanup_helpers PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_cleanup_renamed_sensors_parts_after_empty PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_cover_unreachable_line_152 PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_cleanup_all_orphaned_entities PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_get_device_info_for_sensor PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_full PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_disabled_branches PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_len_exception PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_title_parsing PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_setattr_failure PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_data_source_error PASSED [ 86%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_basic_sensor_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_data_none_branches PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_extended_errors PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_statistics_empty PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_solar_import_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_battery_exceptions PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_pricing_errors PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_pricing_import_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_chmu_import_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_boiler_import_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_extended_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_statistics_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_solar_exception PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_battery_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_battery_no_sensors PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_pricing_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_chmu_empty_and_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_chmu_init_error PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_boiler_exception PASSED [ 87%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_misc_branches PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_battery_import_error PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_solar_no_sensors PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_boiler_empty PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_async_setup_entry_boiler_missing_coordinator PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_async_unload_entry_and_cleanup PASSED [ 88%] +tests/test_sensor_full_coverage.py::test_cleanup_empty_devices PASSED [ 88%] +tests/test_sensor_lifecycle.py::test_async_added_to_hass_restores_and_schedules PASSED [ 88%] +tests/test_sensor_lifecycle.py::test_async_added_to_hass_restore_state_failures PASSED [ 88%] +tests/test_sensor_lifecycle.py::test_async_added_to_hass_callbacks PASSED [ 88%] +tests/test_sensor_lifecycle.py::test_async_added_to_hass_store_failures PASSED [ 88%] +tests/test_sensor_lifecycle.py::test_async_added_to_hass_initial_refresh_error PASSED [ 88%] +tests/test_sensor_registry_cleanup.py::test_get_expected_sensor_types PASSED [ 88%] +tests/test_sensor_registry_cleanup.py::test_cleanup_renamed_sensors PASSED [ 88%] +tests/test_sensor_setup_entry.py::test_sensor_async_setup_entry PASSED [ 88%] +tests/test_sensor_setup_entry.py::test_sensor_async_setup_entry_from_title PASSED [ 88%] +tests/test_sensor_setup_entry.py::test_sensor_async_setup_entry_no_box_id PASSED [ 88%] +tests/test_sensor_setup_runtime.py::test_initialize_sensor_sets_defaults PASSED [ 88%] +tests/test_sensor_setup_runtime.py::test_log_rate_limited PASSED [ 88%] +tests/test_sensor_setup_runtime.py::test_get_state_and_availability PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_from_entry_option PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_from_coordinator_data PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_from_device_identifier PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_device_missing PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_from_entry_data_inverter_sn PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_from_device_identifier_missing_domain PASSED [ 89%] +tests/test_services_box_id.py::test_get_box_id_none_when_unavailable PASSED [ 89%] +tests/test_services_full_coverage.py::test_get_box_id_from_device_entry_and_coordinator PASSED [ 89%] +tests/test_services_full_coverage.py::test_get_box_id_from_device_exceptions PASSED [ 89%] +tests/test_services_full_coverage.py::test_get_box_id_from_device_registry PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_services_extra_paths PASSED [ 89%] +tests/test_services_full_coverage.py::test_check_balancing_paths PASSED [ 89%] +tests/test_services_full_coverage.py::test_check_balancing_requested_box_skip PASSED [ 89%] +tests/test_services_full_coverage.py::test_check_balancing_no_plan PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_with_shield PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_with_shield_none PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_with_shield_errors PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_with_shield_boiler_error PASSED [ 89%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_fallback PASSED [ 90%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_fallback_registration_error PASSED [ 90%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_fallback_missing_box_id PASSED [ 90%] +tests/test_services_full_coverage.py::test_async_setup_entry_services_switch_paths PASSED [ 90%] +tests/test_services_full_coverage.py::test_async_unload_services PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_dashboard_tiles PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_update_solar PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_check_balancing_no_entries PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_save_tiles_invalid_json PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_save_tiles_missing_keys PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_get_tiles_none PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_services_check_balancing_success_and_error PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_entry_services_fallback_calls_api PASSED [ 90%] +tests/test_services_setup.py::test_async_setup_entry_services_with_shield_calls_intercept PASSED [ 90%] +tests/test_shared_logging.py::test_send_event_success PASSED [ 90%] +tests/test_shared_logging.py::test_send_event_failure PASSED [ 90%] +tests/test_shared_logging.py::test_send_event_exception PASSED [ 90%] +tests/test_shared_logging.py::test_get_session_reuses_connector PASSED [ 90%] +tests/test_shared_logging.py::test_get_session_recreates_when_closed PASSED [ 91%] +tests/test_shared_logging.py::test_close_session PASSED [ 91%] +tests/test_shared_logging.py::test_setup_simple_telemetry PASSED [ 91%] +tests/test_shared_logging.py::test_setup_simple_telemetry_error PASSED [ 91%] +tests/test_shield_core.py::test_start_resets_and_schedules PASSED [ 91%] +tests/test_shield_core.py::test_setup_state_listener_empty_pending PASSED [ 91%] +tests/test_shield_core.py::test_setup_state_listener_with_pending PASSED [ 91%] +tests/test_shield_core.py::test_on_entity_state_changed_triggers_check PASSED [ 91%] +tests/test_shield_core.py::test_notify_state_change_handles_callbacks PASSED [ 91%] +tests/test_shield_core.py::test_wrapper_methods PASSED [ 91%] +tests/test_shield_core.py::test_setup_telemetry_initializes_handler PASSED [ 91%] +tests/test_shield_core.py::test_extract_expected_entities_formating_mode_fake_entity PASSED [ 91%] +tests/test_shield_core.py::test_extract_expected_entities_box_mode_mismatch PASSED [ 91%] +tests/test_shield_core.py::test_extract_expected_entities_boiler_mode_mapping PASSED [ 91%] +tests/test_shield_core.py::test_extract_expected_entities_grid_delivery_limit_only PASSED [ 91%] +tests/test_shield_core.py::test_extract_expected_entities_grid_delivery_mode_only PASSED [ 91%] +tests/test_shield_core.py::test_check_entity_state_change_variants PASSED [ 91%] +tests/test_shield_core.py::test_log_event_uses_main_entity_for_limit PASSED [ 91%] +tests/test_shield_core.py::test_log_telemetry_sends_event PASSED [ 91%] +tests/test_shield_core.py::test_register_services PASSED [ 92%] +tests/test_shield_core.py::test_handle_remove_from_queue PASSED [ 92%] +tests/test_shield_core.py::test_shield_status_and_queue_info PASSED [ 92%] +tests/test_shield_core.py::test_check_loop_timeout_formating_mode PASSED [ 92%] +tests/test_shield_core.py::test_check_loop_clears_listener_when_idle PASSED [ 92%] +tests/test_shield_core.py::test_extract_expected_entities_box_mode_changes PASSED [ 92%] +tests/test_shield_core.py::test_extract_expected_entities_box_mode_no_change PASSED [ 92%] +tests/test_shield_core.py::test_extract_expected_entities_boiler_mode PASSED [ 92%] +tests/test_shield_core.py::test_extract_expected_entities_grid_delivery_mode_limit_rejected PASSED [ 92%] +tests/test_shield_core.py::test_extract_expected_entities_formating_mode PASSED [ 92%] +tests/test_shield_core.py::test_check_entity_state_change_boiler_and_ssr PASSED [ 92%] +tests/test_shield_core.py::test_check_entity_state_change_grid_mode_binary_sensor PASSED [ 92%] +tests/test_shield_core.py::test_check_entity_state_change_box_mode_numeric PASSED [ 92%] +tests/test_shield_core.py::test_check_entity_state_change_grid_limit_numeric PASSED [ 92%] +tests/test_shield_core.py::test_check_loop_completes_and_starts_queue PASSED [ 92%] +tests/test_shield_core.py::test_check_loop_power_monitor_completion PASSED [ 92%] +tests/test_shield_core.py::test_safe_call_service_boiler_mode PASSED [ 92%] +tests/test_shield_core.py::test_safe_call_service_entity_mode PASSED [ 92%] +tests/test_shield_core.py::test_check_entities_periodically_success PASSED [ 92%] +tests/test_shield_core.py::test_mode_transition_tracker_records_transition PASSED [ 93%] +tests/test_shield_core.py::test_mode_transition_tracker_offset_fallback PASSED [ 93%] +tests/test_shield_core_more.py::test_notify_state_change_with_coroutine PASSED [ 93%] +tests/test_shield_core_more.py::test_setup_state_listener_collects_entities PASSED [ 93%] +tests/test_shield_core_more.py::test_on_entity_state_changed_schedules PASSED [ 93%] +tests/test_shield_core_more.py::test_mode_tracker_stats_and_offset PASSED [ 93%] +tests/test_shield_core_more.py::test_mode_tracker_load_history PASSED [ 93%] +tests/test_shield_core_more2.py::test_setup_telemetry_failure PASSED [ 93%] +tests/test_shield_core_more2.py::test_setup_state_listener_without_pending PASSED [ 93%] +tests/test_shield_core_more3.py::test_log_security_event_with_handler PASSED [ 93%] +tests/test_shield_core_more3.py::test_notify_state_change_handles_exception PASSED [ 93%] +tests/test_shield_dispatch.py::test_intercept_splits_grid_delivery PASSED [ 93%] +tests/test_shield_dispatch.py::test_intercept_skips_when_no_expected PASSED [ 93%] +tests/test_shield_dispatch.py::test_intercept_dedup_queue PASSED [ 93%] +tests/test_shield_dispatch.py::test_intercept_already_matching_entities PASSED [ 93%] +tests/test_shield_dispatch.py::test_intercept_queue_when_running PASSED [ 93%] +tests/test_shield_dispatch.py::test_start_call_records_pending PASSED [ 93%] +tests/test_shield_dispatch.py::test_safe_call_service_boiler_mode PASSED [ 93%] +tests/test_shield_dispatch_more.py::test_intercept_service_call_skips_when_no_expected PASSED [ 93%] +tests/test_shield_dispatch_more.py::test_intercept_service_call_dedup_queue PASSED [ 94%] +tests/test_shield_dispatch_more.py::test_start_call_records_pending PASSED [ 94%] +tests/test_shield_dispatch_more.py::test_log_event_branches PASSED [ 94%] +tests/test_shield_dispatch_more2.py::test_intercept_service_skips_when_no_expected PASSED [ 94%] +tests/test_shield_dispatch_more2.py::test_intercept_service_duplicate_in_queue PASSED [ 94%] +tests/test_shield_dispatch_more2.py::test_intercept_service_all_ok_skips PASSED [ 94%] +tests/test_shield_dispatch_more3.py::test_start_call_power_monitor PASSED [ 94%] +tests/test_shield_dispatch_more3.py::test_safe_call_service_boiler_mode PASSED [ 94%] +tests/test_shield_dispatch_more4.py::test_safe_call_service_error PASSED [ 94%] +tests/test_shield_queue.py::test_handle_remove_from_queue PASSED [ 94%] +tests/test_shield_queue.py::test_has_pending_mode_change PASSED [ 94%] +tests/test_shield_queue.py::test_check_loop_empty_cleans_listener PASSED [ 94%] +tests/test_shield_queue.py::test_handle_remove_from_queue_invalid_position PASSED [ 94%] +tests/test_shield_queue.py::test_handle_remove_from_queue_running_position PASSED [ 94%] +tests/test_shield_queue.py::test_handle_remove_from_queue_queue_index_error PASSED [ 94%] +tests/test_shield_queue.py::test_check_loop_skips_when_already_running PASSED [ 94%] +tests/test_shield_queue.py::test_check_loop_power_monitor_completion PASSED [ 94%] +tests/test_shield_queue.py::test_check_loop_all_ok_starts_next_call PASSED [ 94%] +tests/test_shield_queue.py::test_start_monitoring_creates_task PASSED [ 94%] +tests/test_shield_queue.py::test_start_monitoring_skips_when_running PASSED [ 95%] +tests/test_shield_queue.py::test_check_entities_periodically_success PASSED [ 95%] +tests/test_shield_queue.py::test_check_entities_periodically_timeout PASSED [ 95%] +tests/test_shield_queue.py::test_async_check_loop_error_path PASSED [ 95%] +tests/test_shield_queue_more.py::test_get_shield_status_and_queue_info PASSED [ 95%] +tests/test_shield_queue_more.py::test_has_pending_mode_change PASSED [ 95%] +tests/test_shield_queue_more.py::test_handle_remove_from_queue_invalid_position PASSED [ 95%] +tests/test_shield_queue_more.py::test_check_loop_timeout_completion PASSED [ 95%] +tests/test_shield_queue_more2.py::test_handle_remove_from_queue_invalid_position PASSED [ 95%] +tests/test_shield_queue_more2.py::test_get_shield_status_and_queue_info PASSED [ 95%] +tests/test_shield_queue_more2.py::test_has_pending_mode_change_target PASSED [ 95%] +tests/test_shield_queue_more3.py::test_check_loop_clears_listener_when_empty PASSED [ 95%] +tests/test_shield_queue_more3.py::test_check_loop_timeout_formating_mode PASSED [ 95%] +tests/test_shield_queue_more4.py::test_handle_remove_from_queue_running_position PASSED [ 95%] +tests/test_shield_queue_more4.py::test_handle_remove_from_queue_index_error PASSED [ 95%] +tests/test_shield_queue_more4.py::test_has_pending_mode_change_running PASSED [ 95%] +tests/test_shield_validation.py::test_normalize_value_and_values_match PASSED [ 95%] +tests/test_shield_validation.py::test_extract_api_info PASSED [ 95%] +tests/test_shield_validation.py::test_extract_expected_entities_box_mode PASSED [ 95%] +tests/test_shield_validation.py::test_extract_expected_entities_formating PASSED [ 96%] +tests/test_shield_validation_more.py::test_extract_api_info_grid_delivery PASSED [ 96%] +tests/test_shield_validation_more.py::test_extract_expected_entities_box_mode_resolve PASSED [ 96%] +tests/test_shield_validation_more.py::test_extract_expected_entities_formating_mode PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEI::test_day_surplus_charges_battery PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEI::test_day_surplus_battery_full_exports PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEI::test_day_deficit_discharges_battery PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEI::test_day_deficit_battery_at_hw_min_uses_grid PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEI::test_night_discharges_to_hw_min PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEII::test_day_surplus_charges_battery PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEII::test_day_deficit_NETOUCHED_uses_grid PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEII::test_night_identical_to_home_i PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEIII::test_day_all_solar_to_battery PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEIII::test_day_battery_full_exports_surplus PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEIII::test_day_no_solar_grid_only PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEIII::test_night_identical_to_home_i PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEUPS::test_charges_from_solar_unlimited PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEUPS::test_charges_from_grid_limited_2_8kw PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEUPS::test_charges_from_solar_and_grid PASSED [ 96%] +tests/test_simulate_interval_new.py::TestHOMEUPS::test_battery_full_exports_solar PASSED [ 97%] +tests/test_simulate_interval_new.py::TestNightOptimization::test_all_modes_identical_at_night PASSED [ 97%] +tests/test_simulate_interval_new.py::TestNightOptimization::test_night_optimization_respects_hw_min PASSED [ 97%] +tests/test_simulate_interval_new.py::TestEdgeCases::test_invalid_mode_raises_error PASSED [ 97%] +tests/test_simulate_interval_new.py::TestEdgeCases::test_zero_solar_zero_load PASSED [ 97%] +tests/test_simulate_interval_new.py::TestEdgeCases::test_efficiency_applied_correctly PASSED [ 97%] +tests/test_simulate_interval_new.py::TestEdgeCases::test_net_cost_calculation PASSED [ 97%] +tests/test_simulate_interval_new.py::TestRealWorldScenarios::test_sunny_day_home_i PASSED [ 97%] +tests/test_simulate_interval_new.py::TestRealWorldScenarios::test_cloudy_day_home_ii_saves_battery PASSED [ 97%] +tests/test_simulate_interval_new.py::TestRealWorldScenarios::test_home_iii_aggressive_charging PASSED [ 97%] +tests/test_simulate_interval_new.py::TestRealWorldScenarios::test_home_ups_charges_to_100_percent PASSED [ 97%] +tests/test_solar_forecast_more.py::test_get_solar_forecast_no_hass PASSED [ 97%] +tests/test_solar_forecast_more.py::test_get_solar_forecast_disabled PASSED [ 97%] +tests/test_solar_forecast_more.py::test_get_solar_forecast_missing_state_with_cache PASSED [ 97%] +tests/test_solar_forecast_more.py::test_get_solar_forecast_no_attrs PASSED [ 97%] +tests/test_solar_forecast_more.py::test_get_solar_forecast_strings_missing PASSED [ 97%] +tests/test_task_and_storage.py::test_create_task_threadsafe_same_loop PASSED [ 97%] +tests/test_task_and_storage.py::test_create_task_threadsafe_other_loop PASSED [ 97%] +tests/test_task_and_storage.py::test_schedule_forecast_retry PASSED [ 97%] +tests/test_task_and_storage.py::test_save_and_load_plan_storage PASSED [ 98%] +tests/test_task_and_storage.py::test_save_plan_storage_failure_creates_cache PASSED [ 98%] +tests/test_task_and_storage.py::test_save_plan_storage_creates_cache_attr PASSED [ 98%] +tests/test_task_and_storage.py::test_save_plan_storage_no_store PASSED [ 98%] +tests/test_task_and_storage.py::test_save_plan_storage_failure_with_retry PASSED [ 98%] +tests/test_task_and_storage.py::test_load_plan_storage_empty_and_missing_plan PASSED [ 98%] +tests/test_task_and_storage.py::test_load_plan_storage_error_fallback PASSED [ 98%] +tests/test_task_and_storage.py::test_plan_exists_in_storage PASSED [ 98%] +tests/test_task_and_storage.py::test_load_plan_storage_fallback_cache PASSED [ 98%] +tests/test_task_and_storage.py::test_load_plan_storage_no_cache PASSED [ 98%] +tests/test_telemetry_store.py::test_set_cloud_payload_adds_box_id PASSED [ 98%] +tests/test_telemetry_store.py::test_apply_local_events_updates_payload PASSED [ 98%] +tests/test_telemetry_store.py::test_seed_from_existing_local_states PASSED [ 98%] +tests/test_timeline_extended.py::test_build_day_timeline_historical_with_storage PASSED [ 98%] +tests/test_timeline_extended.py::test_build_day_timeline_mixed_rebuild PASSED [ 98%] +tests/test_timeline_extended.py::test_build_day_timeline_planned_only PASSED [ 98%] +tests/test_timeline_extended_more.py::test_build_timeline_extended_storage_error PASSED [ 98%] +tests/test_timeline_extended_more.py::test_build_day_timeline_historical_only PASSED [ 98%] +tests/test_timeline_extended_more.py::test_build_day_timeline_mixed_with_repair PASSED [ 98%] +tests/test_timeline_extended_more.py::test_build_day_timeline_planned_only PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_build_baseline_comparison_selects_best PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_analyze_today_variance_no_completed PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_analyze_today_variance_with_diffs PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_analyze_yesterday_performance_and_tomorrow_plan PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_build_today_cost_data PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_resolve_interval_cost_uses_net_cost PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_resolve_interval_cost_fallback_computation PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_build_tomorrow_cost_data PASSED [ 99%] +tests/test_unified_cost_tile_helpers.py::test_get_yesterday_cost_from_archive PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more.py::test_analyze_today_variance_no_completed PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more.py::test_analyze_today_variance_diffs PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more.py::test_analyze_yesterday_performance_no_data PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more.py::test_analyze_yesterday_performance_empty_intervals PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more2.py::test_resolve_interval_cost_fallback_computed PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more2.py::test_resolve_interval_cost_invalid_payload PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more2.py::test_get_yesterday_cost_from_archive_empty PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more2.py::test_get_yesterday_cost_from_archive_with_data PASSED [ 99%] +tests/test_unified_cost_tile_helpers_more3.py::test_build_today_cost_data_active_interval PASSED [100%] + +=============================== warnings summary =============================== +tests/test_adaptive_load_profiles_sensor_more.py::test_find_best_matching_profile_paths + /Users/martinhorak/Downloads/oig_cloud/venv/lib/python3.13/site-packages/numpy/lib/_function_base_impl.py:3065: RuntimeWarning: invalid value encountered in divide + c /= stddev[:, None] + +tests/test_entities_computed_sensor.py::test_energy_store_load_and_save +tests/test_entities_computed_sensor_more3.py::test_save_energy_to_storage_forced +tests/test_entities_computed_sensor_more3.py::test_save_energy_to_storage_error + /Users/martinhorak/Downloads/oig_cloud/custom_components/oig_cloud/entities/computed_sensor.py:174: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). + now = datetime.utcnow() + +tests/test_entities_computed_sensor_more2.py::test_accumulate_energy_missing_power + /Users/martinhorak/Downloads/oig_cloud/custom_components/oig_cloud/entities/computed_sensor.py:428: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). + now = datetime.utcnow() + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +================================ tests coverage ================================ +_______________ coverage: platform darwin, python 3.13.4-final-0 _______________ + +Name Stmts Miss Cover Missing +---------------------------------------------------------------------------------------------------------------------- +custom_components/oig_cloud/api/ha_rest_api.py 401 24 94% 250-252, 721, 765-766, 775-777, 854-855, 898, 914-917, 922, 941-947, 957-962, 979-981 +custom_components/oig_cloud/battery_forecast/balancing/executor.py 166 15 91% 131, 136, 153, 170-172, 195, 228-229, 247-251, 334 +custom_components/oig_cloud/battery_forecast/balancing/plan.py 56 5 91% 44, 49, 102, 113, 137 +custom_components/oig_cloud/battery_forecast/config.py 74 4 95% 69, 125, 157-158 +custom_components/oig_cloud/battery_forecast/data/adaptive_consumption.py 365 1 99% 605 +custom_components/oig_cloud/battery_forecast/data/input.py 82 8 90% 36-40, 61, 86, 171 +custom_components/oig_cloud/battery_forecast/data/load_profiles.py 35 6 83% 25, 34-35, 39-43 +custom_components/oig_cloud/battery_forecast/data/solar_forecast.py 50 3 94% 55-62, 93 +custom_components/oig_cloud/battery_forecast/planning/charging_plan.py 168 39 77% 77, 85, 125-129, 165-204, 209-224, 339, 342, 400, 406-412, 423, 426, 434, 453-481, 484 +custom_components/oig_cloud/battery_forecast/planning/charging_plan_adjustments.py 92 23 75% 45-49, 76, 96, 104-109, 124-145, 148, 176, 178, 182, 187, 207, 213, 218-219 +custom_components/oig_cloud/battery_forecast/planning/charging_plan_utils.py 129 10 92% 23, 35-36, 65, 84, 137, 202-203, 232, 266 +custom_components/oig_cloud/battery_forecast/planning/forecast_update.py 200 46 77% 123, 172, 212-242, 252-254, 257-261, 272-281, 299-300, 305-308, 340, 424-429, 446, 455, 490, 506, 511-512, 540-541, 555-556 +custom_components/oig_cloud/battery_forecast/planning/interval_grouping.py 84 20 76% 19, 26, 38, 51-61, 70-71, 74, 137-138, 145-146 +custom_components/oig_cloud/battery_forecast/planning/mode_guard.py 145 24 83% 27, 49, 51, 85, 90, 95, 98, 102, 118, 123, 129, 133, 160, 170, 175, 178, 237, 265, 275, 286, 298-300, 305, 308 +custom_components/oig_cloud/battery_forecast/presentation/detail_tabs.py 34 7 79% 47, 51-52, 56, 78-82 +custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_blocks.py 305 1 99% 307 +custom_components/oig_cloud/battery_forecast/presentation/precompute.py 49 6 88% 75-76, 86, 110-115 +custom_components/oig_cloud/battery_forecast/presentation/state_attributes.py 49 1 98% 65 +custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile.py 31 3 90% 53-55 +custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile_helpers.py 407 55 86% 29, 42, 99, 119, 174, 213, 217, 250-251, 257-263, 287-289, 298-299, 315, 319, 334, 361, 363, 367, 371, 374, 405, 430-435, 452-455, 489, 513, 545-546, 642-643, 648-653, 659, 662, 772, 794-795, 813, 824, 828, 832, 844-846 +custom_components/oig_cloud/battery_forecast/sensors/ha_sensor.py 235 27 89% 138, 143, 552, 556, 560, 564, 568, 574, 580, 584, 590, 596, 600, 604, 608, 629, 636-637, 677, 680, 699-701, 711, 717, 738, 769 +custom_components/oig_cloud/battery_forecast/sensors/sensor_runtime.py 46 14 70% 39-44, 49, 60, 68-71, 76-77 +custom_components/oig_cloud/battery_forecast/sensors/sensor_setup.py 80 4 95% 43-44, 128, 150 +custom_components/oig_cloud/battery_forecast/storage/plan_storage_baseline.py 136 37 73% 38, 46-47, 66-72, 83, 102-105, 125, 128-131, 140-141, 166-189, 244, 248-255, 262-263, 271-272, 281-304 +custom_components/oig_cloud/battery_forecast/strategy/hybrid.py 152 19 88% 87-89, 258, 262, 365, 375, 390, 409, 429, 455, 495, 553-572 +custom_components/oig_cloud/battery_forecast/strategy/hybrid_planning.py 185 21 89% 52-54, 58, 62, 103, 107, 200-202, 228-229, 232, 260, 281-284, 289-291 +custom_components/oig_cloud/battery_forecast/strategy/hybrid_scoring.py 160 48 70% 90-91, 93-94, 98-103, 134-183, 214, 217, 220-221, 226-229, 232, 234, 259, 265, 283 +custom_components/oig_cloud/battery_forecast/task_utils.py 31 4 87% 17, 22-23, 32 +custom_components/oig_cloud/battery_forecast/timeline/extended.py 251 44 82% 40, 110-116, 126-158, 175-176, 199, 275-282, 292-293, 300-301, 319-322, 328-335, 351, 396-398, 411-414, 479, 541 +custom_components/oig_cloud/battery_forecast/types.py 137 15 89% 366, 376-394, 413-418 +custom_components/oig_cloud/battery_forecast/utils_common.py 68 11 84% 24, 32, 43, 50-51, 57, 60-61, 68, 73-74 +custom_components/oig_cloud/binary_sensor.py 75 20 73% 34-35, 42, 48, 52, 57, 62-64, 68, 72-86 +custom_components/oig_cloud/boiler/api_views.py 66 11 83% 31, 35, 92-94, 114, 118, 125, 156-158 +custom_components/oig_cloud/boiler/coordinator.py 169 65 62% 94-142, 146-150, 154-166, 188-189, 206-209, 266-272, 279-280, 298-299, 303, 315-339, 345, 349, 375-376 +custom_components/oig_cloud/boiler/planner.py 103 7 93% 133, 153, 223, 229-232 +custom_components/oig_cloud/boiler/profiler.py 106 15 86% 75-77, 99-100, 136-137, 154, 174, 179, 195, 230-231, 249, 253 +custom_components/oig_cloud/boiler/sensors.py 181 33 82% 86-87, 105-106, 127-128, 146-147, 165-166, 184-185, 203-204, 222-231, 248, 277-281, 308, 314-318, 348, 356-360 +custom_components/oig_cloud/config/schema.py 84 14 83% 127-129, 136, 147-149, 154, 158, 168-169, 174, 178, 181 +custom_components/oig_cloud/config/steps.py 822 44 95% 833-834, 860, 869, 894, 899, 904, 1026, 1246, 1278, 1289, 1373, 1402, 1412, 1430, 1443, 1497, 1506-1507, 1521-1523, 1526-1528, 1545-1551, 1564, 1580, 1587, 1612, 1685, 1708, 1736, 2067, 2226, 2410-2413, 2438, 2496, 2519 +custom_components/oig_cloud/config/validation.py 57 4 93% 44, 55-57 +custom_components/oig_cloud/core/local_mapper.py 199 23 88% 17, 20-21, 35, 46-47, 52, 55, 71-72, 86, 102, 240, 258, 266-267, 273-274, 280, 295-296, 298, 307 +custom_components/oig_cloud/core/oig_cloud_notification.py 575 84 85% 77, 124, 180-184, 192-193, 208-210, 234, 239-241, 249, 266-271, 282, 293-294, 311, 315, 332, 334, 350, 363, 365, 397-399, 503-505, 619-621, 631-632, 638, 655, 662-665, 700-701, 705-706, 723-725, 769-771, 806-807, 816, 834-836, 910-913, 934, 949-964, 968-969, 984-985, 990, 1011-1013 +custom_components/oig_cloud/core/telemetry_store.py 59 9 85% 20, 49, 65, 70-72, 90-92 +custom_components/oig_cloud/entities/adaptive_load_profiles_sensor.py 549 79 86% 128, 130, 165-166, 234-235, 238-244, 249-250, 259, 305-307, 327, 354, 362-363, 400, 411-412, 417-419, 423, 427, 433-435, 442, 450-451, 471, 479-483, 492, 504, 531, 606, 611, 631, 648, 655, 662, 666, 674, 678, 684, 688, 692, 710, 772, 786-788, 825, 847-848, 898-905, 909-911, 917, 923-925, 969-972, 1155, 1160 +custom_components/oig_cloud/entities/analytics_sensor.py 491 59 88% 53, 146-149, 378-381, 440-463, 467-468, 476, 490, 507-521, 530-535, 591, 622, 630, 678, 847-852, 874-875, 901-951, 987, 1006, 1011 +custom_components/oig_cloud/entities/base_sensor.py 36 4 89% 32-34, 49 +custom_components/oig_cloud/entities/battery_balancing_sensor.py 203 38 81% 47-48, 88, 95-97, 104-105, 110-115, 120-121, 124-125, 128-129, 141-142, 167-168, 193-196, 200-203, 231-232, 273, 277-278, 282, 302-303, 312-313 +custom_components/oig_cloud/entities/computed_sensor.py 438 58 87% 111, 113-114, 144, 184, 225-226, 231-253, 272-273, 280, 315, 330, 338, 345, 352, 361, 367, 371, 398, 408, 413-416, 458-459, 496-498, 532, 578-580, 584, 588, 593, 603-606, 613, 616-618, 621, 651, 703-705 +custom_components/oig_cloud/entities/data_sensor.py 417 57 86% 97-98, 140, 163, 168, 173, 211, 219, 227, 231, 252, 277-281, 347, 353, 365, 369, 407-409, 415, 432, 442-444, 453, 457, 459, 482-492, 504-506, 534, 537, 541, 544, 548, 551, 564, 570, 576, 580, 588, 609, 624, 627, 629-630, 651, 672-675 +custom_components/oig_cloud/entities/data_source_sensor.py 57 5 91% 49, 53, 87, 107-108 +custom_components/oig_cloud/entities/sensor_runtime.py 75 20 73% 28, 42, 47, 91, 96, 111, 116, 121, 125-143, 147 +custom_components/oig_cloud/entities/sensor_setup.py 73 12 84% 16, 36, 38-40, 43, 64-66, 68, 93-94 +custom_components/oig_cloud/entities/shield_sensor.py 212 33 84% 22, 100, 139-145, 151-152, 158-159, 165-166, 196, 221-225, 277, 297, 362, 383-384, 396, 425-430, 434-436, 476-478 +custom_components/oig_cloud/entities/solar_forecast_sensor.py 459 83 82% 101, 137-144, 165-166, 171, 176, 225-232, 244-247, 282-285, 296, 306, 319, 328-331, 387, 419-427, 433-481, 521-540, 583-584, 698-700, 735, 761, 776-779, 785, 843, 856, 869, 921, 983-985 +custom_components/oig_cloud/entities/statistics_sensor.py 573 99 83% 50-51, 76-77, 86-87, 106, 138, 142-172, 190, 242, 272-278, 377-381, 388, 404, 429-430, 435, 501-502, 519-520, 525, 562-567, 578, 582, 651, 669, 673, 681-682, 701-711, 810-811, 818, 827, 849, 893-894, 900-904, 918, 968-971, 982-986, 1001, 1010-1011, 1071-1075, 1124-1126, 1158, 1229-1232, 1236-1245, 1262-1264 +custom_components/oig_cloud/lib/oig_cloud_client/models.py 210 2 99% 269, 282 +custom_components/oig_cloud/physics.py 103 12 88% 102, 119-128, 200 +custom_components/oig_cloud/shield/core.py 289 46 84% 159-162, 172-174, 193, 241-242, 260, 305-309, 313, 317, 333, 356, 377, 392-432, 519, 525, 545, 576, 593-594, 705, 722-723 +custom_components/oig_cloud/shield/dispatch.py 227 35 85% 112, 147-162, 259-262, 274-282, 324-325, 335, 340, 366-367, 444-445, 538, 548, 554-559 +custom_components/oig_cloud/shield/queue.py 214 38 82% 22-25, 33-36, 136, 138, 153-154, 219-229, 244, 249, 281-289, 338-344, 350-355, 357-363, 379-386, 543, 563 +custom_components/oig_cloud/shield/validation.py 208 51 75% 49-50, 55-56, 74-75, 126, 128, 135-136, 139-143, 157-158, 172, 212-213, 229, 235-236, 246-247, 258-261, 281-282, 300-301, 309-314, 321, 347-348, 355, 357, 359-361, 365-366, 373-383 +---------------------------------------------------------------------------------------------------------------------- +TOTAL 20904 1605 92% + +84 files skipped due to complete coverage. +====================== 1889 passed, 5 warnings in 22.85s ======================= diff --git a/custom_components/oig_cloud/__init__.py b/custom_components/oig_cloud/__init__.py index 81540fb2..a998e902 100644 --- a/custom_components/oig_cloud/__init__.py +++ b/custom_components/oig_cloud/__init__.py @@ -1,170 +1,1764 @@ -"""OIG Cloud integration for Home Assistant.""" +"""The OIG Cloud integration.""" + +from __future__ import annotations + import asyncio -import logging import hashlib -from datetime import timedelta -from typing import Any, Dict, Optional +import logging +import re +from typing import Any, Dict -from opentelemetry import trace +try: + from homeassistant import config_entries, core + from homeassistant.config_entries import ConfigEntry + from homeassistant.const import Platform + from homeassistant.core import HomeAssistant + from homeassistant.exceptions import ConfigEntryNotReady + from homeassistant.helpers import config_validation as cv +except ModuleNotFoundError: # pragma: no cover + # Allow importing submodules (e.g., planner) outside a Home Assistant runtime. + config_entries = None # type: ignore[assignment] + core = None # type: ignore[assignment] + ConfigEntry = Any # type: ignore[misc,assignment] + Platform = Any # type: ignore[misc,assignment] + HomeAssistant = Any # type: ignore[misc,assignment] + ConfigEntryNotReady = Exception # type: ignore[assignment] -from .api import oig_cloud_api + class _CvStub: # pragma: no cover - only used outside HA + @staticmethod + def config_entry_only_config_schema(_domain: str) -> object: + return object() -from homeassistant.config_entries import ConfigEntry -from homeassistant.core import HomeAssistant -from homeassistant.exceptions import ConfigEntryNotReady -from homeassistant.helpers.typing import ConfigType + cv = _CvStub() # type: ignore[assignment] -from .api.oig_cloud_api import OigCloudApi, OigCloudApiError, OigCloudAuthError +try: + from .lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi +except ModuleNotFoundError: # pragma: no cover + # Allow importing submodules outside HA / without runtime deps. + OigCloudApi = Any # type: ignore[misc,assignment] from .const import ( - CONF_LOG_LEVEL, + CONF_AUTO_MODE_SWITCH, + CONF_EXTENDED_SCAN_INTERVAL, CONF_NO_TELEMETRY, - CONF_UPDATE_INTERVAL, - DOMAIN, - CONF_USERNAME, CONF_PASSWORD, - DEFAULT_UPDATE_INTERVAL, + CONF_STANDARD_SCAN_INTERVAL, + CONF_USERNAME, + DOMAIN, ) -from .coordinator import OigCloudDataUpdateCoordinator -from .services import async_setup_entry_services -from .shared.tracing import setup_tracing -from .shared.logging import setup_otel_logging -PLATFORMS = ["sensor", "binary_sensor"] +try: + from .core.coordinator import OigCloudCoordinator + from .core.data_source import ( + DATA_SOURCE_CLOUD_ONLY, + DEFAULT_DATA_SOURCE_MODE, + DEFAULT_LOCAL_EVENT_DEBOUNCE_MS, + DEFAULT_PROXY_STALE_MINUTES, + DataSourceController, + get_data_source_state, + init_data_source_state, + ) +except ModuleNotFoundError: # pragma: no cover + OigCloudCoordinator = Any # type: ignore[misc,assignment] + DataSourceController = Any # type: ignore[misc,assignment] + DATA_SOURCE_CLOUD_ONLY = "cloud_only" + DEFAULT_DATA_SOURCE_MODE = "cloud_only" + DEFAULT_PROXY_STALE_MINUTES = 15 + DEFAULT_LOCAL_EVENT_DEBOUNCE_MS = 250 + + def get_data_source_state(*_args: Any, **_kwargs: Any) -> Any: # type: ignore[misc] + return None + + def init_data_source_state(*_args: Any, **_kwargs: Any) -> Any: # type: ignore[misc] + return None + + +# OPRAVA: Bezpečný import BalancingManager s try/except +try: + from .battery_forecast.balancing import BalancingManager + + _LOGGER_TEMP = logging.getLogger(__name__) + _LOGGER_TEMP.debug("oig_cloud: BalancingManager import OK") +except Exception as err: + BalancingManager = None + _LOGGER_TEMP = logging.getLogger(__name__) + _LOGGER_TEMP.error( + "oig_cloud: Failed to import BalancingManager: %s", err, exc_info=True + ) -tracer = trace.get_tracer(__name__) _LOGGER = logging.getLogger(__name__) -_LOGGER.setLevel(logging.INFO) -async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: - """Set up the OIG Cloud integration.""" +if config_entries is None: # pragma: no cover + PLATFORMS = [] +else: + PLATFORMS = [Platform.SENSOR] + +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) + +# OPRAVA: Definujeme všechny možné box modes pro konzistenci +ALL_BOX_MODES = ["Home 1", "Home 2", "Home 3", "Home UPS", "Home 5", "Home 6"] + + +def _read_manifest_file(path: str) -> str: + with open(path, "r", encoding="utf-8") as handle: + return handle.read() + + +def _ensure_data_source_option_defaults( + hass: HomeAssistant, entry: ConfigEntry +) -> None: + defaults = { + "data_source_mode": DEFAULT_DATA_SOURCE_MODE, + "local_proxy_stale_minutes": DEFAULT_PROXY_STALE_MINUTES, + "local_event_debounce_ms": DEFAULT_LOCAL_EVENT_DEBOUNCE_MS, + } + + options = dict(entry.options) + updated = False + for key, default in defaults.items(): + if options.get(key) is None: + options[key] = default + updated = True + + if updated: + hass.config_entries.async_update_entry(entry, options=options) + + +def _infer_box_id_from_local_entities(hass: HomeAssistant) -> str | None: + """Best-effort inference of box_id from existing oig_local entity_ids. + + Expected local entity_id pattern: sensor.oig_local__ + """ + try: + from homeassistant.helpers import entity_registry as er + + reg = er.async_get(hass) + ids: set[str] = set() + pat = re.compile(r"^sensor\\.oig_local_(\\d+)_") + for ent in reg.entities.values(): + m = pat.match(ent.entity_id) + if m: + ids.add(m.group(1)) + if len(ids) == 1: + return next(iter(ids)) + return None + except Exception as err: + _LOGGER.debug("Failed to infer local box_id: %s", err, exc_info=True) + return None + + +def _ensure_planner_option_defaults(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Ensure planner-related options exist on legacy config entries. + + Legacy multi-planner options were removed; only the single planner is supported. + """ + + defaults = { + CONF_AUTO_MODE_SWITCH: False, + # Planner parameters (percentages are of max capacity). + "min_capacity_percent": 33.0, + "target_capacity_percent": 80.0, + # Allow disabling planning-min guard if the user wants more aggressive optimization. + "disable_planning_min_guard": False, + # Hard cap for UPS charging (CZK/kWh). + "max_ups_price_czk": 10.0, + # AC charging power (kW) used for UPS mode simulation. + "home_charge_rate": 2.8, + # Used by balancer window selection. + "cheap_window_percentile": 30, + } + + options = dict(entry.options) + # Migrate and purge removed/obsolete planner options. + obsolete_keys = { + "enable_cheap_window_ups", + "cheap_window_max_intervals", + "cheap_window_soc_guard_kwh", + "enable_economic_charging", + "min_savings_margin", + "safety_margin_percent", + "percentile_conf", + } + + if "max_price_conf" in options and "max_ups_price_czk" not in options: + try: + options["max_ups_price_czk"] = float(options.get("max_price_conf", 10.0)) + except (TypeError, ValueError) as err: + _LOGGER.debug("Planner option conversion failed: %s", err, exc_info=True) + options["max_ups_price_czk"] = defaults["max_ups_price_czk"] + options.pop("max_price_conf", None) + + removed = [k for k in options if k in obsolete_keys] + for k in removed: + options.pop(k, None) + + missing_keys = [key for key in defaults.keys() if entry.options.get(key) is None] + updated = False + + for key, default in defaults.items(): + if options.get(key) is None: + options[key] = default + updated = True + + if updated or removed: + _LOGGER.info( + "🔧 Injecting missing planner options for entry %s: %s", + entry.entry_id, + ", ".join(missing_keys) if missing_keys else "none", + ) + hass.config_entries.async_update_entry(entry, options=options) + + +async def async_setup(hass: HomeAssistant, config: Dict[str, Any]) -> bool: + """Set up OIG Cloud integration.""" + _ = config + _LOGGER.debug("OIG Cloud setup: starting") + + # OPRAVA: Odstraníme neexistující import setup_telemetry + # Initialize telemetry - telemetrie se inicializuje přímo v ServiceShield + _LOGGER.debug("OIG Cloud setup: telemetry will be initialized in ServiceShield") + + # OPRAVA: ServiceShield se inicializuje pouze v async_setup_entry, ne zde + # V async_setup pouze připravíme globální strukturu hass.data.setdefault(DOMAIN, {}) + _LOGGER.debug("OIG Cloud setup: global data structure prepared") + + # OPRAVA: Univerzální registrace statických cest pro všechny verze HA + await _register_static_paths(hass) + + # OPRAVA: Odstranění volání _setup_frontend_panel z async_setup + # Panel se registruje až v async_setup_entry kde máme přístup k entry + # await _setup_frontend_panel(hass) # ODSTRANĚNO + + _LOGGER.debug("OIG Cloud setup: completed") return True -async def async_setup_entry( - hass: HomeAssistant, entry: ConfigEntry +async def _register_static_paths(hass: HomeAssistant) -> None: + """Registrace statických cest pro HA 2024.5+.""" + static_path = "/oig_cloud_static" + directory = hass.config.path("custom_components/oig_cloud/www") + + _LOGGER.info("Registering static path: %s -> %s", static_path, directory) + + # OPRAVA: Pouze moderní metoda + from homeassistant.components.http import StaticPathConfig + + static_config = StaticPathConfig(static_path, directory, cache_headers=False) + await hass.http.async_register_static_paths([static_config]) + _LOGGER.info("✅ Static paths registered successfully") + + +def _resolve_inverter_sn(hass: HomeAssistant, entry: ConfigEntry) -> str | None: + inverter_sn = None + opt_box = entry.options.get("box_id") + if isinstance(opt_box, str) and opt_box.isdigit(): + return opt_box + + coordinator_data = ( + hass.data.get(DOMAIN, {}).get(entry.entry_id, {}).get("coordinator") + ) + if not coordinator_data: + return None + + try: + from .entities.base_sensor import resolve_box_id + + resolved = resolve_box_id(coordinator_data) + if isinstance(resolved, str) and resolved.isdigit(): + inverter_sn = resolved + except Exception as err: + _LOGGER.debug("Failed to resolve inverter_sn: %s", err, exc_info=True) + return None + return inverter_sn + + +def _panel_title_for_inverter(inverter_sn: str) -> str: + return ( + f"OIG Dashboard ({inverter_sn})" + if inverter_sn != "unknown" + else "OIG Cloud Dashboard" + ) + + +async def _load_manifest_version(hass: HomeAssistant) -> str: + import json + import os + + manifest_path = os.path.join(os.path.dirname(__file__), "manifest.json") + try: + manifest_data = await hass.async_add_executor_job( + _read_manifest_file, manifest_path + ) + manifest = json.loads(manifest_data) + return manifest.get("version", "unknown") + except Exception as exc: + _LOGGER.warning("Could not load version from manifest: %s", exc) + return "unknown" + + +def _build_dashboard_url( + entry_id: str, inverter_sn: str, version: str, cache_bust: int +) -> str: + return ( + "/oig_cloud_static/dashboard.html" + f"?entry_id={entry_id}&inverter_sn={inverter_sn}&v={version}&t={cache_bust}" + ) + + +def _remove_existing_panel(hass: HomeAssistant, panel_id: str) -> None: + from homeassistant.components import frontend + + if not hasattr(frontend, "async_remove_panel") or not callable( + getattr(frontend, "async_remove_panel") + ): + return + + try: + frontend.async_remove_panel(hass, panel_id, warn_if_unknown=False) + except Exception as err: + try: + frontend.async_remove_panel(hass, panel_id) + except Exception as fallback_err: + _LOGGER.debug( + "Failed to remove panel %s: %s (fallback: %s)", + panel_id, + err, + fallback_err, + ) + + +def _register_frontend_panel( + hass: HomeAssistant, panel_id: str, panel_title: str, dashboard_url: str +) -> None: + from homeassistant.components import frontend + + if not hasattr(frontend, "async_register_built_in_panel"): + _LOGGER.warning("Frontend async_register_built_in_panel not available") + return + + register_func = getattr(frontend, "async_register_built_in_panel") + if not callable(register_func): + _LOGGER.warning("async_register_built_in_panel is not callable") + return + + result = register_func( + hass, + "iframe", + sidebar_title=panel_title, + sidebar_icon="mdi:solar-power", + frontend_url_path=panel_id, + config={"url": dashboard_url}, + require_admin=False, + ) + + if hasattr(result, "__await__"): + hass.async_create_task(result) + + _LOGGER.info("✅ Panel '%s' registered successfully", panel_title) + + +def _log_dashboard_entities( + hass: HomeAssistant, entry: ConfigEntry, inverter_sn: str +) -> None: + coordinator = hass.data[DOMAIN][entry.entry_id].get("coordinator") + if not coordinator or not coordinator.data: + _LOGGER.warning("Dashboard: No coordinator data for entity checking") + return + + entity_count = len( + [ + k + for k in hass.states.async_entity_ids() + if k.startswith(f"sensor.oig_{inverter_sn}") + ] + ) + _LOGGER.info( + "Dashboard: Found %s OIG entities for inverter %s", + entity_count, + inverter_sn, + ) + + key_entities = [ + f"sensor.oig_{inverter_sn}_remaining_usable_capacity", + ] + if entry.options.get("enable_solar_forecast", False): + key_entities.append(f"sensor.oig_{inverter_sn}_solar_forecast") + if entry.options.get("enable_battery_prediction", False): + key_entities.append(f"sensor.oig_{inverter_sn}_battery_forecast") + + for entity_id in key_entities: + entity_state = hass.states.get(entity_id) + if entity_state: + _LOGGER.debug( + "Dashboard entity check: %s = %s", entity_id, entity_state.state + ) + else: + _LOGGER.debug("Dashboard entity not yet available: %s", entity_id) + + +async def _setup_frontend_panel(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Nastavení frontend panelu (pouze když je povolen).""" + try: + # Unikátní ID panelu pro tuto instanci + panel_id = f"oig_cloud_dashboard_{entry.entry_id}" + + # OPRAVA: inverter_sn musí být numerické box_id (nikdy ne helper klíče jako "spot_prices") + inverter_sn = _resolve_inverter_sn(hass, entry) + + if inverter_sn is None: + inverter_sn = "unknown" + _LOGGER.warning( + "Dashboard setup: Unable to resolve numeric inverter_sn/box_id, using 'unknown'" + ) + else: + _LOGGER.info("Dashboard setup: Using inverter_sn = %s", inverter_sn) + + panel_title = _panel_title_for_inverter(inverter_sn) + + # Cache-busting: Přidat verzi + timestamp k URL pro vymazání browseru cache + import time + + version = await _load_manifest_version(hass) + + # Přidat timestamp pro cache-busting při každém restartu + cache_bust = int(time.time()) + + # OPRAVA: Přidat parametry včetně v= a t= pro cache-busting + dashboard_url = _build_dashboard_url( + entry.entry_id, inverter_sn, version, cache_bust + ) + + _LOGGER.info("Dashboard URL: %s", dashboard_url) + + # Prevent reload errors ("Overwriting panel ...") by removing any existing panel first. + _remove_existing_panel(hass, panel_id) + _register_frontend_panel(hass, panel_id, panel_title, dashboard_url) + _log_dashboard_entities(hass, entry, inverter_sn) + + except Exception as e: + _LOGGER.error("Failed to setup frontend panel: %s", e) + + +async def _remove_frontend_panel(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Odebrání frontend panelu.""" + await asyncio.sleep(0) + try: + panel_id = f"oig_cloud_dashboard_{entry.entry_id}" + + from homeassistant.components import frontend + + # Pokus o odebrání panelu + if hasattr(frontend, "async_remove_panel") and callable( + getattr(frontend, "async_remove_panel") + ): + try: + frontend.async_remove_panel(hass, panel_id, warn_if_unknown=False) + _LOGGER.info("✅ Panel removed: %s", panel_id) + except ValueError as ve: + if "unknown panel" in str(ve).lower(): + _LOGGER.debug( + "Panel %s was already removed or never existed", panel_id + ) + else: + _LOGGER.warning("Error removing panel %s: %s", panel_id, ve) + except Exception as remove_err: + try: + frontend.async_remove_panel(hass, panel_id) + except Exception: + _LOGGER.debug( + "Panel removal handled (panel may not exist): %s", remove_err + ) + else: + _LOGGER.debug("async_remove_panel not available") + + except Exception as e: + # OPRAVA: Všechny chyby logujeme jako debug, protože jsou očekávané + _LOGGER.debug("Panel removal handled gracefully: %s", e) + + +def _is_boiler_unique_id(unique_id: str) -> bool: + return "_boiler_" in unique_id + + +def _maybe_rename_entity_id( + entity_registry: Any, + entity_id: str, + unique_id: str, + duplicate_pattern: re.Pattern[str], +) -> tuple[str, bool]: + entity_id_match = duplicate_pattern.match(entity_id) + if not entity_id_match: + return entity_id, False + + suffix = entity_id_match.group(2) + base_entity_id = entity_id_match.group(1) + + if unique_id.endswith(suffix): + return entity_id, False + + try: + entity_registry.async_update_entity(entity_id, new_entity_id=base_entity_id) + _LOGGER.info("🔄 Renamed entity: %s -> %s", entity_id, base_entity_id) + return base_entity_id, True + except Exception as err: + _LOGGER.warning("⚠️ Failed to rename %s: %s", entity_id, err) + return entity_id, False + + +def _maybe_enable_entity(entity_registry: Any, entity_id: str, entity: Any) -> bool: + from homeassistant.helpers import entity_registry as er + + if entity.disabled_by != er.RegistryEntryDisabler.INTEGRATION: + return False + + try: + entity_registry.async_update_entity(entity_id, disabled_by=None) + _LOGGER.info("✅ Re-enabled correct entity: %s", entity_id) + return True + except Exception as err: + _LOGGER.warning("⚠️ Failed to enable %s: %s", entity_id, err) + return False + + +def _is_duplicate_entity( + entity_id: str, unique_id: str, duplicate_pattern: re.Pattern[str] ) -> bool: - """Set up OIG Cloud from a config entry.""" + entity_id_match = duplicate_pattern.match(entity_id) + if not entity_id_match: + return False + + suffix = entity_id_match.group(2) + return not unique_id.endswith(suffix) + + +def _build_new_unique_id(old_unique_id: str) -> str: + if old_unique_id.startswith("oig_") and not old_unique_id.startswith( + "oig_cloud_" + ): + return f"oig_cloud_{old_unique_id[4:]}" + return f"oig_cloud_{old_unique_id}" + + +def _process_entity_unique_id( + entity_registry: Any, + entity: Any, + duplicate_pattern: re.Pattern[str], +) -> dict[str, int]: + old_unique_id = entity.unique_id + entity_id = entity.entity_id + + if _is_boiler_unique_id(old_unique_id): + _LOGGER.debug("Skipping boiler sensor (correct format): %s", entity_id) + return {"skipped": 1} + + if old_unique_id.startswith("oig_cloud_"): + updated_entity_id, renamed = _maybe_rename_entity_id( + entity_registry, entity_id, old_unique_id, duplicate_pattern + ) + enabled = _maybe_enable_entity(entity_registry, updated_entity_id, entity) + return { + "skipped": 1, + "renamed": int(renamed), + "enabled": int(enabled), + } + + if _is_duplicate_entity(entity_id, old_unique_id, duplicate_pattern): + try: + entity_registry.async_remove(entity_id) + _LOGGER.info( + "🗑️ Removed duplicate entity: %s (unique_id=%s doesn't match entity_id suffix)", + entity_id, + old_unique_id, + ) + return {"removed": 1} + except Exception as err: + _LOGGER.warning("⚠️ Failed to remove %s: %s", entity_id, err) + return {} + + new_unique_id = _build_new_unique_id(old_unique_id) try: - username: str = entry.data[CONF_USERNAME] - password: str = entry.data[CONF_PASSWORD] + entity_registry.async_update_entity(entity_id, new_unique_id=new_unique_id) + _LOGGER.info( + "✅ Migrated entity %s: %s -> %s", + entity_id, + old_unique_id, + new_unique_id, + ) + return {"migrated": 1} + except Exception as err: + _LOGGER.warning("⚠️ Failed to migrate %s: %s", entity_id, err) + return {} + + +def _apply_migration_deltas(counts: dict[str, int], deltas: dict[str, int]) -> None: + for key, value in deltas.items(): + counts[key] = counts.get(key, 0) + value + + +def _build_migration_notification( + renamed_count: int, + removed_count: int, + migrated_count: int, + enabled_count: int, +) -> str: + message_parts: list[str] = [] + + if renamed_count > 0: + message_parts.append( + f"**Přejmenováno {renamed_count} entit**\n" + "Entity s příponami (_2, _3) byly přejmenovány na správné názvy.\n\n" + ) + + if removed_count > 0: + message_parts.append( + f"**Odstraněno {removed_count} duplicitních entit**\n" + "Byly to staré kolize s nesprávným unique_id.\n\n" + ) + + if migrated_count > 0: + message_parts.append( + f"**Migrováno {migrated_count} entit na nový formát unique_id**\n" + "Všechny OIG entity nyní používají standardní formát `oig_cloud_*`.\n\n" + ) + + if enabled_count > 0: + message_parts.append( + f"**Povoleno {enabled_count} správných entit**\n" + "Entity s novým formátem byly znovu aktivovány.\n\n" + ) - # Get settings from options or data with fallbacks - no_telemetry: bool = entry.options.get( - CONF_NO_TELEMETRY, - entry.data.get(CONF_NO_TELEMETRY, False) + message_parts.append( + "**Co se stalo:**\n" + "- Staré entity se přeregistrovaly s novým unique_id\n" + "- Duplicity byly odstraněny\n" + "- Všechny entity by měly fungovat normálně\n\n" + "**Pokud něco nefunguje:**\n" + "Reload integrace v Nastavení → Zařízení & Služby → OIG Cloud\n\n" + "Toto je jednorázová migrace po aktualizaci integrace." + ) + + return "".join(message_parts) + + +def _strip_known_suffixes(value: str) -> str: + for suffix in ("_analytics", "_shield"): + if value.endswith(suffix): + return value[: -len(suffix)] + return value + + +def _extract_device_bases(device: Any) -> set[str]: + id_values = [ + identifier[1] + for identifier in device.identifiers + if identifier and identifier[0] == DOMAIN and len(identifier) > 1 + ] + return { + _strip_known_suffixes(v) for v in id_values if isinstance(v, str) and v + } + + +def _device_has_entities(entity_registry: Any, device_id: str) -> bool: + from homeassistant.helpers import entity_registry as er + + return bool(er.async_entries_for_device(entity_registry, device_id)) + + +def _is_valid_device_base(bases: set[str], allowlisted_bases: set[str]) -> bool: + if not bases: + return True + if any(base in allowlisted_bases for base in bases): + return True + return all(base.isdigit() for base in bases) + + +async def _migrate_entity_unique_ids( + hass: HomeAssistant, entry: ConfigEntry +) -> None: # noqa: C901 + """Migrace unique_id a cleanup duplicitních entit s _2, _3, atd.""" + _LOGGER.info("🔍 Starting _migrate_entity_unique_ids function...") + from homeassistant.helpers import entity_registry as er + + entity_registry = er.async_get(hass) + + # Najdeme všechny OIG entity pro tento config entry + entities = er.async_entries_for_config_entry(entity_registry, entry.entry_id) + _LOGGER.info("📊 Found %s entities for config entry", len(entities)) + + counts: dict[str, int] = { + "migrated": 0, + "skipped": 0, + "removed": 0, + "enabled": 0, + "renamed": 0, + } + duplicate_pattern = re.compile(r"^(.+?)(_\d+)$") + + # Projdeme všechny entity a upravíme je + for entity in entities: + deltas = _process_entity_unique_id(entity_registry, entity, duplicate_pattern) + _apply_migration_deltas(counts, deltas) + + # Summary + _LOGGER.info( + "📊 Migration summary: migrated=%s, removed=%s, renamed=%s, enabled=%s, skipped=%s", + counts["migrated"], + counts["removed"], + counts["renamed"], + counts["enabled"], + counts["skipped"], + ) + + if counts["removed"] > 0 or counts["migrated"] > 0 or counts["renamed"] > 0: + await hass.services.async_call( + "persistent_notification", + "create", + { + "title": "OIG Cloud: Migrace entit dokončena", + "message": _build_migration_notification( + counts["renamed"], + counts["removed"], + counts["migrated"], + counts["enabled"], + ), + "notification_id": "oig_cloud_migration_complete", + }, + ) + + if counts["renamed"] > 0: + _LOGGER.info("🔄 Renamed %s entities to correct entity_id", counts["renamed"]) + if counts["migrated"] > 0: + _LOGGER.info( + "🔄 Migrated %s entities to new unique_id format", counts["migrated"] ) - - update_interval: int = entry.options.get( - CONF_UPDATE_INTERVAL, - DEFAULT_UPDATE_INTERVAL + if counts["removed"] > 0: + _LOGGER.warning("🗑️ Removed %s duplicate entities", counts["removed"]) + if counts["enabled"] > 0: + _LOGGER.info("✅ Re-enabled %s correct entities", counts["enabled"]) + if counts["skipped"] > 0: + _LOGGER.debug( + "⏭️ Skipped %s entities (already in correct format)", counts["skipped"] + ) + + +async def _cleanup_invalid_empty_devices( + hass: HomeAssistant, entry: ConfigEntry +) -> None: + """Remove clearly-invalid devices (e.g., 'spot_prices', 'unknown') with no entities. + + This is a targeted/safe cleanup to get rid of stale registry entries created by + older versions when box_id resolution was unstable. + """ + await asyncio.sleep(0) + try: + from homeassistant.helpers import device_registry as dr + + device_registry = dr.async_get(hass) + from homeassistant.helpers import entity_registry as er + + entity_registry = er.async_get(hass) + + # Non-numeric identifiers used by this integration that are still valid. + allowlisted_bases = {"oig_bojler"} + + devices = dr.async_entries_for_config_entry(device_registry, entry.entry_id) + removed: list[str] = [] + + for device in devices: + # Never remove devices that still have entities. + if _device_has_entities(entity_registry, device.id): + continue + + bases = _extract_device_bases(device) + if _is_valid_device_base(bases, allowlisted_bases): + continue + + device_registry.async_remove_device(device.id) + removed.append(device.name or device.id) + + if removed: + _LOGGER.info( + "Removed %d stale OIG devices without entities: %s", + len(removed), + ", ".join(removed), + ) + except Exception as err: + _LOGGER.debug("Device registry cleanup failed (non-critical): %s", err) + + +def _migrate_enable_spot_prices_option(hass: HomeAssistant, entry: ConfigEntry) -> None: + if "enable_spot_prices" not in entry.options: + return + + _LOGGER.info("🔄 Migrating enable_spot_prices to enable_pricing") + new_options = dict(entry.options) + if new_options.get("enable_spot_prices", False): + new_options["enable_pricing"] = True + _LOGGER.info("✅ Migrated: enable_spot_prices=True -> enable_pricing=True") + new_options.pop("enable_spot_prices", None) + hass.config_entries.async_update_entry(entry, options=new_options) + _LOGGER.info("✅ Migration completed - enable_spot_prices removed from config") + + +def _init_entry_storage(hass: HomeAssistant, entry: ConfigEntry) -> None: + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN].setdefault(entry.entry_id, {}) + + +def _maybe_persist_box_id_from_proxy_or_local( + hass: HomeAssistant, entry: ConfigEntry +) -> None: + try: + options = dict(entry.options) + if options.get("box_id"): + return + + proxy_box = hass.states.get( + "sensor.oig_local_oig_proxy_proxy_status_box_device_id" ) + if proxy_box and isinstance(proxy_box.state, str) and proxy_box.state.isdigit(): + options["box_id"] = proxy_box.state + hass.config_entries.async_update_entry(entry, options=options) + _LOGGER.info("Inferred box_id=%s from proxy sensor", proxy_box.state) + return - log_level: str = entry.options.get( - CONF_LOG_LEVEL, - entry.data.get(CONF_LOG_LEVEL, "INFO") + inferred = _infer_box_id_from_local_entities(hass) + if inferred: + options["box_id"] = inferred + hass.config_entries.async_update_entry(entry, options=options) + _LOGGER.info("Inferred box_id=%s from local entities", inferred) + except Exception as err: + _LOGGER.debug( + "Inferring box_id from local entities failed (non-critical): %s", err ) - _LOGGER.setLevel(log_level.upper()) - # Setup telemetry if enabled - if not no_telemetry: - email_hash: str = hashlib.sha256(username.encode("utf-8")).hexdigest() - hass_id: str = hashlib.sha256(hass.data["core.uuid"].encode("utf-8")).hexdigest() +async def _start_service_shield( + hass: HomeAssistant, entry: ConfigEntry +) -> Any | None: + service_shield = None + try: + from .shield.core import ServiceShield + + service_shield = ServiceShield(hass, entry) + await service_shield.start() + _LOGGER.info("ServiceShield inicializován a spuštěn") + except Exception as err: + _LOGGER.error("ServiceShield není dostupný - obecná chyba: %s", err) + service_shield = None + + hass.data[DOMAIN][entry.entry_id]["service_shield"] = service_shield + return service_shield + - # Set up tracing and logging in a non-blocking way - loop = asyncio.get_running_loop() - await loop.run_in_executor(None, setup_tracing, email_hash, hass_id) +def _load_entry_auth_config( + entry: ConfigEntry, +) -> tuple[str | None, str | None, bool, int, int]: + username = entry.data.get(CONF_USERNAME) or entry.options.get(CONF_USERNAME) + password = entry.data.get(CONF_PASSWORD) or entry.options.get(CONF_PASSWORD) - api_logger: logging.Logger = logging.getLogger(oig_cloud_api.__name__) - otel_logging_handler = await loop.run_in_executor(None, setup_otel_logging, email_hash, hass_id) - api_logger.addHandler(otel_logging_handler) + _LOGGER.debug("Username: %s", "***" if username else "MISSING") + _LOGGER.debug("Password: %s", "***" if password else "MISSING") - _LOGGER.info(f"Telemetry enabled with account hash {email_hash}") - _LOGGER.info(f"Home Assistant ID hash is {hass_id}") + no_telemetry = entry.data.get(CONF_NO_TELEMETRY, False) or entry.options.get( + CONF_NO_TELEMETRY, False + ) + standard_scan_interval = entry.options.get("standard_scan_interval") or entry.data.get( + CONF_STANDARD_SCAN_INTERVAL, 30 + ) + extended_scan_interval = entry.options.get("extended_scan_interval") or entry.data.get( + CONF_EXTENDED_SCAN_INTERVAL, 300 + ) + _LOGGER.debug( + "Using intervals: standard=%ss, extended=%ss", + standard_scan_interval, + extended_scan_interval, + ) + return ( + username, + password, + no_telemetry, + standard_scan_interval, + extended_scan_interval, + ) + + +async def _ensure_live_data_enabled( + oig_api: OigCloudApi, +) -> None: + _LOGGER.debug("Kontrola, zda jsou v aplikaci OIG Cloud zapnutá 'Živá data'...") + try: + test_stats = await oig_api.get_stats() + if test_stats: + first_device = next(iter(test_stats.values())) if test_stats else None + if not first_device or "actual" not in first_device: + _LOGGER.error( + "❌ KRITICKÁ CHYBA: V aplikaci OIG Cloud nejsou zapnutá 'Živá data'! " + "API odpověď neobsahuje element 'actual'. " + "Uživatel musí v mobilní aplikaci zapnout: Nastavení → Přístup k datům → Živá data" + ) + raise ConfigEntryNotReady( + "V aplikaci OIG Cloud nejsou zapnutá 'Živá data'. " + "Zapněte je v mobilní aplikaci OIG Cloud (Nastavení → Přístup k datům → Živá data) " + "a restartujte Home Assistant." + ) + _LOGGER.info( + "✅ Kontrola živých dat úspěšná - element 'actual' nalezen v API odpovědi" + ) else: - _LOGGER.info("Telemetry disabled by user configuration") + _LOGGER.warning( + "API vrátilo prázdnou odpověď, přeskakuji kontrolu živých dat" + ) + except ConfigEntryNotReady: + raise + except Exception as err: + _LOGGER.warning("Nelze ověřit stav živých dat: %s", err) + + +async def _init_session_manager_and_coordinator( + hass: HomeAssistant, + entry: ConfigEntry, + username: str, + password: str, + no_telemetry: bool, + standard_scan_interval: int, + extended_scan_interval: int, +) -> tuple[OigCloudCoordinator, Any]: + oig_api = OigCloudApi(username, password, no_telemetry) + + from .api.oig_cloud_session_manager import OigCloudSessionManager + + session_manager = OigCloudSessionManager(oig_api) + + state = get_data_source_state(hass, entry.entry_id) + should_check_cloud_now = state.effective_mode == DATA_SOURCE_CLOUD_ONLY + if should_check_cloud_now: + _LOGGER.debug("Initial authentication via session manager") + await session_manager._ensure_auth() + await _ensure_live_data_enabled(oig_api) + else: + _LOGGER.info( + "Local telemetry mode active (configured=%s, local_ok=%s) – skipping initial cloud authentication and live-data check", + state.configured_mode, + state.local_available, + ) + + coordinator = OigCloudCoordinator( + hass, session_manager, standard_scan_interval, extended_scan_interval, entry + ) + _LOGGER.debug("Waiting for initial coordinator data...") + await coordinator.async_config_entry_first_refresh() + if coordinator.data is None: + _LOGGER.error("Failed to get initial data from coordinator") + raise ConfigEntryNotReady("No data received from OIG Cloud API") + _LOGGER.debug("Coordinator data received: %s devices", len(coordinator.data)) + + try: + options = dict(entry.options) + if not options.get("box_id") and coordinator.data: + box_id = next( + (str(k) for k in coordinator.data.keys() if str(k).isdigit()), + None, + ) + if box_id: + options["box_id"] = box_id + hass.config_entries.async_update_entry(entry, options=options) + _LOGGER.info("Persisted box_id=%s into config entry options", box_id) + except Exception as err: + _LOGGER.debug("Persisting box_id failed (non-critical): %s", err) + + return coordinator, session_manager + + +def _resolve_entry_box_id(entry: ConfigEntry, coordinator: OigCloudCoordinator | None) -> str | None: + try: + opt_box = entry.options.get("box_id") + if isinstance(opt_box, str) and opt_box.isdigit(): + return opt_box + except Exception: + pass + + if coordinator and coordinator.data and isinstance(coordinator.data, dict): + return next( + (str(k) for k in coordinator.data.keys() if str(k).isdigit()), + None, + ) + return None + + +async def _init_notification_manager( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: OigCloudCoordinator, + session_manager: Any, + service_shield: Any, +) -> Any | None: + enable_cloud_notifications = entry.options.get("enable_cloud_notifications", True) + cloud_active = ( + get_data_source_state(hass, entry.entry_id).effective_mode + == DATA_SOURCE_CLOUD_ONLY + ) + if not enable_cloud_notifications or not cloud_active: + _LOGGER.debug( + "Cloud notifications disabled or cloud not active - skipping notification manager" + ) + return None + + try: + _LOGGER.debug("Initializing notification manager...") + from .core.oig_cloud_notification import OigNotificationManager + + _LOGGER.debug("Using API object: %s", type(session_manager.api)) + _LOGGER.debug( + "API has get_notifications: %s", + hasattr(session_manager.api, "get_notifications"), + ) + + manager = OigNotificationManager( + hass, session_manager.api, "https://www.oigpower.cz/cez/" + ) - # Create the API client - _LOGGER.debug("Creating OIG Cloud API client") - oig_api: OigCloudApi = OigCloudApi(username, password, no_telemetry, hass) + device_id = _resolve_entry_box_id(entry, coordinator) + if not device_id: + _LOGGER.warning( + "No device data available, notification manager not initialized" + ) + return None + + manager.set_device_id(device_id) + _LOGGER.debug("Set notification manager device_id to: %s", device_id) + + if service_shield: + try: + from .shield.core import ModeTransitionTracker + + service_shield.mode_tracker = ModeTransitionTracker(hass, device_id) + await service_shield.mode_tracker.async_setup() + _LOGGER.info( + "Mode Transition Tracker inicializován pro box %s", device_id + ) + except Exception as tracker_error: + _LOGGER.warning( + "Failed to initialize Mode Transition Tracker: %s", tracker_error + ) try: - # Try authentication - _LOGGER.debug("Authenticating with OIG Cloud API") - await oig_api.authenticate() - except OigCloudAuthError as err: - _LOGGER.error("Authentication failed with OIG Cloud API") - raise ConfigEntryNotReady("Authentication failed with OIG Cloud API") from err - except Exception as err: - _LOGGER.exception("Unexpected error during authentication") - raise ConfigEntryNotReady("Unexpected error during OIG Cloud setup") from err + await manager.update_from_api() + _LOGGER.debug("Initial notification data loaded successfully") + except Exception as fetch_error: + _LOGGER.warning( + "Failed to fetch initial notifications (API endpoint may not exist): %s", + fetch_error, + ) - # Create the coordinator - _LOGGER.debug(f"Creating OIG Cloud data coordinator with update interval of {update_interval} seconds") - coordinator = OigCloudDataUpdateCoordinator( - hass, - oig_api, - config_entry=entry, - update_interval=timedelta(seconds=update_interval), + coordinator.notification_manager = manager + _LOGGER.info( + "Notification manager created and attached to coordinator (may not have data yet)" + ) + return manager + except Exception as err: + _LOGGER.warning( + "Failed to setup notification manager (API may not be available): %s", err ) + return None + + +def _init_solar_forecast(entry: ConfigEntry) -> Any | None: + if not entry.options.get("enable_solar_forecast", False): + return None + + try: + _LOGGER.debug("Initializing solar forecast functionality") + return {"enabled": True, "config": entry.options} + except Exception as err: + _LOGGER.error("Chyba při inicializaci solární předpovědi: %s", err) + return {"enabled": False, "error": str(err)} + + +def _build_analytics_device_info( + entry: ConfigEntry, coordinator: OigCloudCoordinator +) -> Dict[str, Any]: + try: + from .entities.base_sensor import resolve_box_id + + box_id_for_devices = resolve_box_id(coordinator) + except Exception: + box_id_for_devices = entry.options.get("box_id") + if not (isinstance(box_id_for_devices, str) and box_id_for_devices.isdigit()): + box_id_for_devices = "unknown" + + return { + "identifiers": {(DOMAIN, f"{box_id_for_devices}_analytics")}, + "name": f"Analytics & Predictions {box_id_for_devices}", + "manufacturer": "OIG", + "model": "Analytics Module", + "via_device": (DOMAIN, box_id_for_devices), + "entry_type": "service", + } + + +def _init_ote_api(entry: ConfigEntry) -> Any | None: + if not entry.options.get("enable_pricing", False): + _LOGGER.debug("Pricing disabled - skipping OTE API initialization") + return None - # Fetch initial data - _LOGGER.debug("Fetching initial data from OIG Cloud API") + try: + _LOGGER.debug("Initializing OTE API for spot prices") + from .api.ote_api import OteApi + + ote_api = OteApi() + _LOGGER.info("OTE API successfully initialized") + return ote_api + except Exception as err: + _LOGGER.error("Failed to initialize OTE API: %s", err) + return None + + +async def _init_boiler_coordinator( + hass: HomeAssistant, entry: ConfigEntry +) -> Any | None: + if not entry.options.get("enable_boiler", False): + _LOGGER.debug("Boiler module disabled") + return None + + try: + _LOGGER.debug("Initializing Boiler module") + from .boiler.coordinator import BoilerCoordinator + + boiler_config = {**entry.data, **entry.options} + coordinator = BoilerCoordinator(hass, boiler_config) await coordinator.async_config_entry_first_refresh() + _LOGGER.info("Boiler coordinator successfully initialized") + return coordinator + except Exception as err: + _LOGGER.error("Failed to initialize Boiler coordinator: %s", err) + return None + + +async def _init_balancing_manager( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: OigCloudCoordinator, + battery_prediction_enabled: bool, +) -> Any | None: + balancing_enabled = entry.options.get("balancing_enabled", True) + if balancing_enabled and not battery_prediction_enabled: + _LOGGER.info("oig_cloud: balancing disabled because battery prediction is off") + balancing_enabled = False + _LOGGER.info("oig_cloud: balancing_enabled=%s", balancing_enabled) + + if not balancing_enabled: + _LOGGER.info("oig_cloud: BalancingManager disabled via config options") + return None + if BalancingManager is None: + _LOGGER.warning("oig_cloud: BalancingManager not available (import failed)") + return None + + try: + _LOGGER.info("oig_cloud: Initializing BalancingManager") + box_id = _resolve_entry_box_id(entry, coordinator) + if not box_id: + _LOGGER.warning("oig_cloud: No box_id available for BalancingManager") + + storage_path = hass.config.path(".storage") + balancing_manager = BalancingManager(hass, box_id, storage_path, entry) + await balancing_manager.async_setup() + _LOGGER.info("oig_cloud: BalancingManager successfully initialized") + + from datetime import timedelta + from homeassistant.helpers.event import async_call_later, async_track_time_interval + + async def update_balancing(_now: Any) -> None: + _LOGGER.debug("BalancingManager: periodic check_balancing()") + try: + await balancing_manager.check_balancing() + except Exception as err: + _LOGGER.error("Error checking balancing: %s", err, exc_info=True) + + entry.async_on_unload( + async_track_time_interval( + hass, update_balancing, timedelta(minutes=30) + ) + ) + + async def initial_balancing_check(_now: Any) -> None: + _LOGGER.debug("BalancingManager: initial check_balancing()") + try: + result = await balancing_manager.check_balancing() + if result: + _LOGGER.info("✅ Initial check created plan: %s", result.mode.name) + else: + _LOGGER.debug("Initial check: no plan needed yet") + except Exception as err: + _LOGGER.error( + "Error in initial balancing check: %s", err, exc_info=True + ) + + async_call_later(hass, 120, initial_balancing_check) + return balancing_manager + except Exception as err: + _LOGGER.error( + "oig_cloud: Failed to initialize BalancingManager: %s", + err, + exc_info=True, + ) + return None + + +def _init_telemetry_store( + hass: HomeAssistant, entry: ConfigEntry, coordinator: OigCloudCoordinator +) -> Any | None: + try: + from .core.telemetry_store import TelemetryStore + from .entities.base_sensor import resolve_box_id + + store_box_id = entry.options.get("box_id") or entry.data.get("box_id") + if not (isinstance(store_box_id, str) and store_box_id.isdigit()): + store_box_id = resolve_box_id(coordinator) + if isinstance(store_box_id, str) and store_box_id.isdigit(): + telemetry_store = TelemetryStore(hass, box_id=store_box_id) + setattr(coordinator, "telemetry_store", telemetry_store) + return telemetry_store + except Exception: + return None + return None + + +async def _start_data_source_controller( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: OigCloudCoordinator, + telemetry_store: Any | None, +) -> Any | None: + try: + data_source_controller = DataSourceController( + hass, + entry, + coordinator, + telemetry_store=telemetry_store, + ) + await data_source_controller.async_start() + return data_source_controller + except Exception as err: + _LOGGER.warning("DataSourceController start failed (non-critical): %s", err) + return None + + +async def async_setup_entry( + hass: HomeAssistant, entry: ConfigEntry +) -> bool: # noqa: C901 + """Set up OIG Cloud from a config entry.""" + _LOGGER.info("oig_cloud: async_setup_entry started for entry_id=%s", entry.entry_id) + _LOGGER.info("Setting up OIG Cloud entry: %s", entry.title) + _LOGGER.debug("Config data keys: %s", list(entry.data.keys())) + _LOGGER.debug("Config options keys: %s", list(entry.options.keys())) + + # Inject defaults for new planner/autonomy options so legacy setups keep working + _ensure_planner_option_defaults(hass, entry) + _ensure_data_source_option_defaults(hass, entry) + _migrate_enable_spot_prices_option(hass, entry) + + # POZN: Automatická migrace entity/device registry při startu je riziková (může mazat/rozbíjet entity). + # Pokud je potřeba cleanup/migrace, dělejme ji explicitně (script / servis), ne automaticky v setupu. + + # Initialize data source state early so coordinator setup can respect local/hybrid modes. + # Also try to infer box_id from local entities so local mapping works without cloud. + _init_entry_storage(hass, entry) + init_data_source_state(hass, entry) + _maybe_persist_box_id_from_proxy_or_local(hass, entry) + + service_shield = await _start_service_shield(hass, entry) + + try: + ( + username, + password, + no_telemetry, + standard_scan_interval, + extended_scan_interval, + ) = _load_entry_auth_config(entry) + + if not username or not password: + _LOGGER.error("Username or password is missing from configuration") + return False + + # DEBUG: DOČASNĚ ZAKÁZAT telemetrii kvůli problémům s výkonem + # OPRAVA: Telemetrie způsobovala nekonečnou smyčku + # if not no_telemetry: + # _LOGGER.debug("Telemetry enabled, setting up...") + # await _setup_telemetry(hass, username) + # else: + # _LOGGER.debug("Telemetry disabled by configuration") + + _LOGGER.debug("Telemetry handled only by ServiceShield, not main module") + + coordinator, session_manager = await _init_session_manager_and_coordinator( + hass, + entry, + username, + password, + no_telemetry, + standard_scan_interval, + extended_scan_interval, + ) + + notification_manager = await _init_notification_manager( + hass, entry, coordinator, session_manager, service_shield + ) + + solar_forecast = _init_solar_forecast(entry) + + # **OPRAVA: Správné nastavení statistics pro reload** + statistics_enabled = entry.options.get("enable_statistics", True) + _LOGGER.debug("Statistics enabled: %s", statistics_enabled) + + analytics_device_info = _build_analytics_device_info(entry, coordinator) - if not coordinator.last_update_success: - _LOGGER.error("Failed to retrieve initial data from OIG Cloud API") - raise ConfigEntryNotReady("Initial data fetch failed") + ote_api = _init_ote_api(entry) + boiler_coordinator = await _init_boiler_coordinator(hass, entry) - _LOGGER.debug("Successfully fetched initial data from OIG Cloud API") + # NOVÉ: Podmíněné nastavení dashboard podle konfigurace + dashboard_enabled = entry.options.get( + "enable_dashboard", False + ) # OPRAVA: default False místo True + # OPRAVA: Dashboard registrujeme AŽ PO vytvoření senzorů + + battery_prediction_enabled = entry.options.get( + "enable_battery_prediction", False + ) + balancing_manager = await _init_balancing_manager( + hass, entry, coordinator, battery_prediction_enabled + ) + + telemetry_store = _init_telemetry_store(hass, entry, coordinator) - # Store coordinator and API client in hass.data hass.data[DOMAIN][entry.entry_id] = { "coordinator": coordinator, - "api": oig_api, + "session_manager": session_manager, # NOVÉ: Uložit session manager + "notification_manager": notification_manager, + "data_source_controller": None, + "data_source_state": get_data_source_state(hass, entry.entry_id), + "telemetry_store": telemetry_store, + "solar_forecast": solar_forecast, + "statistics_enabled": statistics_enabled, + "analytics_device_info": analytics_device_info, + "service_shield": service_shield, + "ote_api": ote_api, + "boiler_coordinator": boiler_coordinator, # NOVÉ: Boiler coordinator + "balancing_manager": balancing_manager, # PHASE 3: Refactored Balancing Manager + "dashboard_enabled": dashboard_enabled, # NOVÉ: stav dashboard + "config": { + "enable_statistics": statistics_enabled, + "enable_pricing": entry.options.get("enable_pricing", False), + "enable_boiler": entry.options.get("enable_boiler", False), # NOVÉ + "enable_dashboard": dashboard_enabled, # NOVÉ + }, } - # Set up platforms - await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) + data_source_controller = await _start_data_source_controller( + hass, entry, coordinator, telemetry_store + ) + if data_source_controller: + hass.data[DOMAIN][entry.entry_id][ + "data_source_controller" + ] = data_source_controller + + _setup_service_shield_data(hass, entry, coordinator, service_shield) + + # POZN: Plná migrace/cleanup device registry je riziková (může rozbít entity). + # Děláme jen bezpečný úklid prázdných zařízení s neplatným box_id (např. spot_prices/unknown). + + # Vždy registrovat sensor platform + await hass.config_entries.async_forward_entry_setups(entry, ["sensor"]) + + # Targeted cleanup for stale/invalid devices (e.g., 'spot_prices', 'unknown') + # that can be left behind after unique_id/device_id stabilization. + await _cleanup_invalid_empty_devices(hass, entry) - # Setup services - _LOGGER.debug("Setting up OIG Cloud services") - await async_setup_entry_services(hass, entry) - - # Register update listener for option changes - entry.async_on_unload(entry.add_update_listener(async_reload_entry)) + await _sync_dashboard_panel(hass, entry, dashboard_enabled) - _LOGGER.info("OIG Cloud setup completed successfully") + # Přidáme listener pro změny konfigurace - OPRAVEN callback na async funkci + entry.async_on_unload(entry.add_update_listener(async_update_options)) + + await _register_entry_services(hass, entry, service_shield) + _register_api_endpoints(hass, boiler_coordinator) + + _setup_service_shield_monitoring(hass, entry, service_shield) + + # OPRAVA: ODSTRANĚNÍ duplicitní registrace služeb - způsobovala přepsání správného schématu + # Služby se už registrovaly výše v async_setup_entry_services_with_shield + # await services.async_setup_services(hass) # ODSTRANĚNO + # await services.async_setup_entry_services(hass, entry) # ODSTRANĚNO + + _LOGGER.debug("OIG Cloud integration setup complete") return True - except OigCloudAuthError as err: - _LOGGER.error(f"Authentication error with OIG Cloud: {err}") - raise ConfigEntryNotReady("Authentication failed with OIG Cloud API") from err - except OigCloudApiError as err: - _LOGGER.error(f"API error with OIG Cloud: {err}") - raise ConfigEntryNotReady(f"Error communicating with OIG Cloud API: {err}") from err - except Exception as err: - _LOGGER.exception(f"Unexpected error setting up OIG Cloud: {err}") - raise ConfigEntryNotReady(f"Unexpected error during OIG Cloud setup: {err}") from err - - -async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: - """Unload the OIG Cloud config entry.""" - _LOGGER.debug(f"Unloading OIG Cloud integration for {entry.entry_id}") - - # Unload platforms - unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS) - + + except Exception as e: + _LOGGER.error("Error initializing OIG Cloud: %s", e, exc_info=True) + raise ConfigEntryNotReady(f"Error initializing OIG Cloud: {e}") from e + + +def _setup_service_shield_data( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: OigCloudCoordinator, + service_shield: Any | None, +) -> None: + if not service_shield: + return + # Vytvoříme globální odkaz na ServiceShield pro senzory + hass.data[DOMAIN]["shield"] = service_shield + + # Vytvoříme device info pro ServiceShield (per-box service device) + try: + from .entities.base_sensor import resolve_box_id + + shield_box_id = resolve_box_id(coordinator) + except Exception: + shield_box_id = entry.options.get("box_id") + if not (isinstance(shield_box_id, str) and shield_box_id.isdigit()): + shield_box_id = "unknown" + shield_device_info = { + "identifiers": {(DOMAIN, f"{shield_box_id}_shield")}, + "name": f"ServiceShield {shield_box_id}", + "manufacturer": "OIG", + "model": "Shield", + "via_device": (DOMAIN, shield_box_id), + "entry_type": "service", + } + hass.data[DOMAIN][entry.entry_id]["shield_device_info"] = shield_device_info + + _LOGGER.debug("ServiceShield data prepared for sensors") + _LOGGER.info("ServiceShield status: %s", service_shield.get_shield_status()) + _LOGGER.info("ServiceShield queue info: %s", service_shield.get_queue_info()) + + +async def _sync_dashboard_panel( + hass: HomeAssistant, entry: ConfigEntry, enabled: bool +) -> None: + if enabled: + await _setup_frontend_panel(hass, entry) + _LOGGER.info("OIG Cloud Dashboard panel enabled and registered") + else: + await _remove_frontend_panel(hass, entry) + _LOGGER.info("OIG Cloud Dashboard panel disabled - panel not registered") + + +async def _register_entry_services( + hass: HomeAssistant, entry: ConfigEntry, service_shield: Any | None +) -> None: + # Async importy pro vyhnání se blokování event loopu + from .services import ( + async_setup_entry_services_with_shield, + async_setup_services, + ) + + # Setup základních služeb (pouze jednou pro celou integraci) + if len([k for k in hass.data[DOMAIN].keys() if k != "shield"]) == 1: + await async_setup_services(hass) + + # Setup entry-specific služeb s shield ochranou + await async_setup_entry_services_with_shield(hass, entry, service_shield) + + +def _register_api_endpoints(hass: HomeAssistant, boiler_coordinator: Any | None) -> None: + # NOVÉ: Registrace HTTP API endpointů pro boiler + if boiler_coordinator: + from .boiler.api_views import register_boiler_api_views + + register_boiler_api_views(hass) + _LOGGER.info("Boiler API endpoints registered") + + # NOVÉ: Registrace Planning API endpointů + from .api.planning_api import setup_planning_api_views + + setup_planning_api_views(hass) + _LOGGER.info("Planning API endpoints registered") + + # NOVÉ: Registrace OIG Cloud REST API endpointů pro heavy data + # (timeline, spot prices, analytics) + try: + from .api.ha_rest_api import setup_api_endpoints + + setup_api_endpoints(hass) + _LOGGER.info("✅ OIG Cloud REST API endpoints registered successfully") + except Exception as e: + _LOGGER.error( + "Failed to register OIG Cloud REST API endpoints: %s", + e, + exc_info=True, + ) + # Pokračujeme i bez API - senzory budou fungovat s attributes + + +def _setup_service_shield_monitoring( + hass: HomeAssistant, entry: ConfigEntry, service_shield: Any | None +) -> None: + if not service_shield: + _LOGGER.warning("ServiceShield není dostupný - služby nebudou chráněny") + return + + _LOGGER.info("ServiceShield je aktivní a připravený na interceptování služeb") + _LOGGER.debug("ServiceShield pending: %s", len(service_shield.pending)) + _LOGGER.debug("ServiceShield queue: %s", len(service_shield.queue)) + _LOGGER.debug("ServiceShield running: %s", service_shield.running) + _LOGGER.debug("Ověřuji, že ServiceShield monitoring běží...") + + async def test_shield_monitoring(_now: Any) -> None: + await asyncio.sleep(0) + status = service_shield.get_shield_status() + queue_info = service_shield.get_queue_info() + _LOGGER.debug( + "[OIG Shield] Test monitoring tick - pending: %s, queue: %s, running: %s", + len(service_shield.pending), + len(service_shield.queue), + service_shield.running, + ) + _LOGGER.debug("[OIG Shield] Status: %s", status) + _LOGGER.debug("[OIG Shield] Queue info: %s", queue_info) + + if service_shield.telemetry_handler: + _LOGGER.debug("[OIG Shield] Telemetry handler je aktivní") + if hasattr(service_shield, "_log_telemetry"): + _LOGGER.debug("[OIG Shield] Telemetry logging metoda je dostupná") + else: + _LOGGER.debug("[OIG Shield] Telemetry handler není aktivní") + + from datetime import timedelta + + from homeassistant.helpers.event import async_track_time_interval + + entry.async_on_unload( + async_track_time_interval(hass, test_shield_monitoring, timedelta(seconds=30)) + ) + + +async def _setup_telemetry(hass: core.HomeAssistant, username: str) -> None: + """Setup telemetry if enabled.""" + await asyncio.sleep(0) + try: + _LOGGER.debug("Starting telemetry setup...") + + email_hash = hashlib.sha256(username.encode("utf-8")).hexdigest() + hass_id = hashlib.sha256(hass.data["core.uuid"].encode("utf-8")).hexdigest() + + _LOGGER.debug( + "Telemetry identifiers - Email hash: %s..., HASS ID: %s...", + email_hash[:16], + hass_id[:16], + ) + + from .shared.logging import setup_simple_telemetry + + telemetry = setup_simple_telemetry(email_hash, hass_id) + if telemetry: + hass.data.setdefault(DOMAIN, {})["telemetry"] = telemetry + _LOGGER.info("Telemetry initialized (simple mode)") + else: + _LOGGER.debug("Telemetry initialization skipped (no handler)") + + except Exception as e: + _LOGGER.warning("Failed to setup telemetry: %s", e, exc_info=True) + # Pokračujeme bez telemetrie + + +async def async_unload_entry( + hass: HomeAssistant, entry: config_entries.ConfigEntry +) -> bool: + """Unload a config entry.""" + # Odebrání dashboard panelu při unload + await _remove_frontend_panel(hass, entry) + + # PHASE 3: Cleanup Balancing Manager (no async_shutdown needed - just storage) + + # NOVÉ: Cleanup session manageru + if DOMAIN in hass.data and entry.entry_id in hass.data[DOMAIN]: + data_source_controller = hass.data[DOMAIN][entry.entry_id].get( + "data_source_controller" + ) + if data_source_controller: + try: + await data_source_controller.async_stop() + except Exception as err: + _LOGGER.debug("DataSourceController stop failed: %s", err) + + session_manager = hass.data[DOMAIN][entry.entry_id].get("session_manager") + if session_manager: + _LOGGER.debug("Closing session manager") + await session_manager.close() + + unload_ok = await hass.config_entries.async_unload_platforms(entry, ["sensor"]) if unload_ok: - _LOGGER.debug(f"Successfully unloaded platforms for {entry.entry_id}") - hass.data[DOMAIN].pop(entry.entry_id) - + hass.data[DOMAIN].pop(entry.entry_id, None) return unload_ok -async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: - """Reload OIG Cloud config entry.""" - _LOGGER.debug(f"Reloading OIG Cloud integration for {entry.entry_id}") - - await async_unload_entry(hass, entry) - await async_setup_entry(hass, entry) +async def async_remove_config_entry_device( + hass: HomeAssistant, config_entry: ConfigEntry, device_entry: Any +) -> bool: + """Allow removing stale devices created by this integration. + + Home Assistant calls this when the user tries to delete a device from the UI. + We only allow removing devices that have no entities. + """ + _ = config_entry + await asyncio.sleep(0) + try: + from homeassistant.helpers import entity_registry as er + + entity_registry = er.async_get(hass) + if er.async_entries_for_device(entity_registry, device_entry.id): + return False + # Allow removal for both current and legacy identifier domains. + # Legacy versions used separate identifier domains: + # - "oig_cloud_analytics" + # - "oig_cloud_shield" + allowed_domains = {DOMAIN, f"{DOMAIN}_analytics", f"{DOMAIN}_shield"} + return any( + identifier[0] in allowed_domains for identifier in device_entry.identifiers + ) + except Exception as err: + _LOGGER.debug("Failed to evaluate device removal: %s", err, exc_info=True) + return False + + +async def async_reload_entry(config_entry: config_entries.ConfigEntry) -> None: + """Reload config entry.""" + hass = config_entry.hass + await async_unload_entry(hass, config_entry) + await async_setup_entry(hass, config_entry) + + +async def async_update_options( + hass: HomeAssistant, config_entry: config_entries.ConfigEntry +) -> None: + """Update options with dashboard management.""" + hass_data = hass.data.get(DOMAIN, {}).get(config_entry.entry_id, {}) + old_options = hass_data.get("config", {}) or config_entry.options + new_options = dict(config_entry.options) + + # Kontrola změny dashboard nastavení + old_dashboard_enabled = old_options.get("enable_dashboard", False) + new_dashboard_enabled = new_options.get("enable_dashboard", False) + + _LOGGER.debug( + "Dashboard options update: old=%s, new=%s", + old_dashboard_enabled, + new_dashboard_enabled, + ) + + if old_dashboard_enabled != new_dashboard_enabled: + _LOGGER.info( + "Dashboard setting changed: %s -> %s", + old_dashboard_enabled, + new_dashboard_enabled, + ) + + if new_dashboard_enabled: + # Zapnutí dashboard + await _setup_frontend_panel(hass, config_entry) + _LOGGER.info("Dashboard panel enabled") + else: + # Vypnutí dashboard + await _remove_frontend_panel(hass, config_entry) + _LOGGER.info("Dashboard panel disabled") + + # Aktualizace dat v hass.data + if DOMAIN in hass.data and config_entry.entry_id in hass.data[DOMAIN]: + hass.data[DOMAIN][config_entry.entry_id][ + "dashboard_enabled" + ] = new_dashboard_enabled + hass.data[DOMAIN][config_entry.entry_id]["config"][ + "enable_dashboard" + ] = new_dashboard_enabled + else: + # PŘIDÁNO: I když se hodnota nezměnila, ujistíme se že panel není registrován pokud je disabled + if not new_dashboard_enabled: + await _remove_frontend_panel(hass, config_entry) + _LOGGER.debug("Ensuring dashboard panel is not registered (disabled)") + + # Pokud byla označena potřeba reload, proveď ho + if new_options.get("_needs_reload"): + new_options.pop("_needs_reload", None) + hass.config_entries.async_update_entry(config_entry, options=new_options) + hass.async_create_task(hass.config_entries.async_reload(config_entry.entry_id)) + else: + hass.config_entries.async_update_entry(config_entry, options=new_options) + + +def _keep_device_patterns() -> list[str]: + return [ + "OIG.*Statistics", + "ČEZ Battery Box", + "OIG Cloud Home", + "Analytics & Predictions", + "ServiceShield", + ] + + +def _device_matches_keep_patterns(device_name: str, keep_patterns: list[str]) -> bool: + if not device_name: + return False + return any(pattern in device_name for pattern in keep_patterns) + + +def _device_matches_remove_regex(device_name: str, keep_patterns: list[str]) -> bool: + if not device_name: + return False + return any(re.search(pattern, device_name) for pattern in keep_patterns) + + +def _should_keep_device(device: Any, entity_registry: Any, keep_patterns: list[str]) -> bool: + if _device_matches_keep_patterns(device.name or "", keep_patterns): + return True + if _device_matches_remove_regex(device.name or "", keep_patterns): + return False + return _device_has_entities(entity_registry, device.id) + + +async def _cleanup_unused_devices(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Vyčištění nepoužívaných zařízení.""" + await asyncio.sleep(0) + try: + from homeassistant.helpers import device_registry as dr + from homeassistant.helpers import entity_registry as er + + device_registry = dr.async_get(hass) + entity_registry = er.async_get(hass) + + # Najdeme všechna zařízení pro tuto integraci + devices = dr.async_entries_for_config_entry(device_registry, entry.entry_id) + + devices_to_remove = [] + keep_patterns = _keep_device_patterns() + for device in devices: + should_keep = _should_keep_device(device, entity_registry, keep_patterns) + + if not should_keep: + devices_to_remove.append(device) + _LOGGER.info( + "Marking device for removal: %s (ID: %s)", + device.name, + device.id, + ) + else: + _LOGGER.debug( + "Keeping device: %s (ID: %s)", device.name, device.id + ) + + # Smažeme nepoužívaná zařízení + for device in devices_to_remove: + try: + _LOGGER.info( + "Removing unused device: %s (ID: %s)", device.name, device.id + ) + device_registry.async_remove_device(device.id) + except Exception as e: + _LOGGER.warning("Error removing device %s: %s", device.id, e) + + if devices_to_remove: + _LOGGER.info("Removed %s unused devices", len(devices_to_remove)) + else: + _LOGGER.debug("No unused devices found to remove") + except Exception as e: + _LOGGER.warning("Error cleaning up devices: %s", e) diff --git a/custom_components/oig_cloud/api/__init__.py b/custom_components/oig_cloud/api/__init__.py new file mode 100644 index 00000000..6e68ac17 --- /dev/null +++ b/custom_components/oig_cloud/api/__init__.py @@ -0,0 +1,5 @@ +"""OIG Cloud API module.""" + +from .oig_cloud_session_manager import OigCloudSessionManager + +__all__ = ["OigCloudSessionManager"] diff --git a/custom_components/oig_cloud/api/api_chmu.py b/custom_components/oig_cloud/api/api_chmu.py new file mode 100644 index 00000000..058ec17e --- /dev/null +++ b/custom_components/oig_cloud/api/api_chmu.py @@ -0,0 +1,765 @@ +""" +ČHMÚ (Český hydrometeorologický ústav) CAP XML API klient. + +Stahuje a parsuje CAP (Common Alerting Protocol) XML bulletiny s meteorologickými varováními. +Filtruje varování podle GPS souřadnic (point-in-polygon/circle). +""" + +import asyncio +import logging +import re +import xml.etree.ElementTree as ET +from datetime import datetime, timedelta, timezone +from math import asin, cos, radians, sin, sqrt +from typing import Any, Dict, List, Optional, Tuple +from zoneinfo import ZoneInfo + +import aiohttp +import async_timeout + +_LOGGER = logging.getLogger(__name__) + +# --- CAP 1.2 Namespace --- +CAP_NS = "{urn:oasis:names:tc:emergency:cap:1.2}" + +# ČHMÚ CAP XML feed: +# Původní URL (www.chmi.cz/.../XOCZ50_OKPR.xml) je nově 404; ČHMÚ přesunulo CAP do open data. +# Autoindex obsahuje historické soubory + timestampy, vybereme nejnovější. +CHMU_CAP_BASE_URL = "https://opendata.chmi.cz/meteorology/weather/alerts/cap/" + +# Severity mapping podle CAP 1.2 standardu +SEVERITY_MAP: Dict[str, int] = { + "Minor": 1, # Žluté varování + "Moderate": 2, # Oranžové varování + "Severe": 3, # Červené varování + "Extreme": 4, # Fialové varování +} + +# Fallback: ČHMÚ awareness level (pokud severity chybí) +AWARENESS_LEVEL_MAP: Dict[str, int] = { + "2; yellow": 1, + "3; orange": 2, + "4; red": 3, +} + + +class ChmuApiError(Exception): + """Chyba při komunikaci s ČHMÚ API.""" + + pass + + +class ChmuApi: + """API klient pro ČHMÚ CAP XML bulletiny.""" + + _AUTO_INDEX_RE = re.compile( + r'href="(?Palert_cap_(?P\d+)_\d+\.xml)".*?\s(?P
\d{2}-[A-Z]{3}-\d{4} \d{2}:\d{2})\s+\d+', + re.IGNORECASE, + ) + + def __init__(self) -> None: + self._last_data: Dict[str, Any] = {} + self._cache_time: Optional[datetime] = None + self.timezone = ZoneInfo("Europe/Prague") + self._session: Optional[aiohttp.ClientSession] = None + + # ---------- Cache management ---------- + + def _is_cache_valid(self) -> bool: + """Kontrola validity cache (1 hodina).""" + if not self._cache_time or not self._last_data: + return False + now = datetime.now(timezone.utc) + return (now - self._cache_time) < timedelta(hours=1) + + def _invalidate_cache(self) -> None: + """Invalidace cache.""" + self._cache_time = None + self._last_data = {} + + # ---------- HTTP fetch ---------- + + async def _fetch_cap_xml(self, session: aiohttp.ClientSession) -> str: + """ + Stažení CAP XML z ČHMÚ. + + Args: + session: aiohttp session + + Returns: + XML string + + Raises: + ChmuApiError: Při chybě HTTP requestu + """ + try: + async with async_timeout.timeout(30): + cap_url = await self._resolve_latest_cap_url(session) + async with session.get(cap_url) as response: + if response.status != 200: + raise ChmuApiError( + f"HTTP {response.status} při stahování CAP XML ({cap_url})" + ) + + text = await response.text() + + if not text or len(text) < 100: + raise ChmuApiError("Prázdný nebo neplatný CAP XML response") + + _LOGGER.debug(f"CAP XML úspěšně staženo ({len(text)} znaků)") + return text + + except asyncio.TimeoutError: + raise ChmuApiError("Timeout při stahování CAP XML (30s)") + except aiohttp.ClientError as e: + raise ChmuApiError(f"HTTP chyba při stahování CAP XML: {e}") + + async def _resolve_latest_cap_url(self, session: aiohttp.ClientSession) -> str: + """Resolve the most recent CAP XML URL from ČHMÚ open data directory listing.""" + try: + async with async_timeout.timeout(15): + async with session.get(CHMU_CAP_BASE_URL) as response: + if response.status != 200: + raise ChmuApiError( + f"HTTP {response.status} při načítání indexu CAP ({CHMU_CAP_BASE_URL})" + ) + index_html = await response.text() + + def _parse_index_dt(value: str) -> Optional[datetime]: + try: + return datetime.strptime(value, "%d-%b-%Y %H:%M") + except Exception as err: + _LOGGER.debug("Skipping CAP index entry '%s': %s", value, err) + return None + + items: list[tuple[datetime, str, str]] = [] + for m in self._AUTO_INDEX_RE.finditer(index_html): + dt = _parse_index_dt(m.group("dt")) + if dt is None: + continue + items.append((dt, m.group("series"), m.group("file"))) + + if not items: + raise ChmuApiError("CAP index neobsahuje žádné alert_cap_*.xml soubory") + + preferred = [it for it in items if it[1] == "50"] + dt, series, fname = max(preferred or items, key=lambda x: x[0]) + url = f"{CHMU_CAP_BASE_URL}{fname}" + _LOGGER.debug( + "ČHMÚ CAP resolved: series=%s file=%s ts=%s", + series, + fname, + dt.isoformat(), + ) + return url + except ChmuApiError: + raise + except Exception as e: + raise ChmuApiError(f"Chyba při výběru nejnovějšího CAP souboru: {e}") + + # ---------- XML parsing ---------- + + def _parse_cap_xml(self, xml_text: str) -> List[Dict[str, Any]]: + """ + Parsování CAP XML do seznamu varování. + + Args: + xml_text: XML string + + Returns: + Seznam varování (raw data z XML) + """ + try: + root = ET.fromstring(xml_text) # nosec B314 + except ET.ParseError as e: + _LOGGER.error(f"Chyba parsování CAP XML: {e}") + return [] + + alerts = [] + + # Root je přímo element (ne document s více alerts) + # CAP 1.2 má strukturu: ... + + # Pokud root je alert element + if root.tag == f"{CAP_NS}alert": + # Každý alert může mít více bloků (různé jazyky a události) + for info_elem in root.findall(f"{CAP_NS}info"): + try: + alert_data = self._parse_info_block(root, info_elem) + if alert_data: + alerts.append(alert_data) + except Exception as e: + _LOGGER.warning(f"Chyba při parsování info bloku: {e}") + continue + + _LOGGER.info(f"Naparsováno {len(alerts)} varování z CAP XML") + return alerts + + def _parse_info_block( + self, alert_elem: ET.Element, info_elem: ET.Element + ) -> Optional[Dict[str, Any]]: + """ + Parsování jednoho bloku. + + Args: + alert_elem: element (pro sent, identifier, atd.) + info_elem: element + + Returns: + Dict s daty varování nebo None + """ + # Jazyk + language = self._get_text(info_elem, "language", "cs") + + # Pouze cs nebo en + if language not in ["cs", "en"]: + return None + + # Event (typ varování) + event = self._get_text(info_elem, "event") + if not event: + return None + + # Severity + severity_text = self._get_text(info_elem, "severity", "Minor") + severity_level = SEVERITY_MAP.get(severity_text, 0) + + # Fallback: awareness level (ČHMÚ specifické) + if severity_level == 0: + awareness_level = self._get_text( + info_elem, "parameter[valueName='awareness_level']/value", "" + ) + severity_level = AWARENESS_LEVEL_MAP.get(awareness_level, 0) + + # Urgency & Certainty + urgency = self._get_text(info_elem, "urgency", "Unknown") + certainty = self._get_text(info_elem, "certainty", "Unknown") + + # Časové údaje + sent = self._get_text(alert_elem, "sent") + effective = self._get_text(info_elem, "effective") + onset = self._get_text(info_elem, "onset") + expires = self._get_text(info_elem, "expires") + + # Popis a instrukce + description = self._get_text(info_elem, "description", "") + instruction = self._get_text(info_elem, "instruction", "") + + # Oblasti a geometrie + areas = self._parse_areas(info_elem) + + # Status (active/upcoming/expired) + status = self._determine_status(effective, onset, expires) + + # ETA (estimated time to arrival) v hodinách + eta_hours = self._calculate_eta(onset) + + return { + "language": language, + "event": event, + "severity": severity_text, + "severity_level": severity_level, + "urgency": urgency, + "certainty": certainty, + "sent": sent, + "effective": effective, + "onset": onset, + "expires": expires, + "description": description, + "instruction": instruction, + "areas": areas, + "status": status, + "eta_hours": eta_hours, + } + + def _parse_areas(self, info_elem: ET.Element) -> List[Dict[str, Any]]: + """ + Parsování elementů s geometrií. + + Returns: + Seznam oblastí s geometrií + """ + areas = [] + + for area_elem in info_elem.findall(f"{CAP_NS}area"): + area_desc = self._get_text(area_elem, "areaDesc", "") + + # Polygon (seznam souřadnic lat,lon) + polygon_text = self._get_text(area_elem, "polygon", "") + polygon = self._parse_polygon(polygon_text) if polygon_text else None + + # Circle (lat,lon radius_km) + circle_text = self._get_text(area_elem, "circle", "") + circle = self._parse_circle(circle_text) if circle_text else None + + # Geocode (ORP/NUTS kódy) + geocodes = [] + for geocode_elem in area_elem.findall(f"{CAP_NS}geocode"): + value_name = self._get_text(geocode_elem, "valueName", "") + value = self._get_text(geocode_elem, "value", "") + if value_name and value: + geocodes.append({"name": value_name, "value": value}) + + areas.append( + { + "description": area_desc, + "polygon": polygon, + "circle": circle, + "geocodes": geocodes, + } + ) + + return areas + + def _parse_polygon(self, polygon_text: str) -> Optional[List[Tuple[float, float]]]: + """ + Parsování polygon stringu (CAP formát: "lat1,lon1 lat2,lon2 ..."). + + Returns: + Seznam (lat, lon) tuple nebo None + """ + try: + points = [] + for pair in polygon_text.strip().split(): + lat_str, lon_str = pair.split(",") + lat = float(lat_str) + lon = float(lon_str) + points.append((lat, lon)) + + return points if len(points) >= 3 else None + except (ValueError, IndexError): + _LOGGER.warning(f"Neplatný polygon formát: {polygon_text}") + return None + + def _parse_circle(self, circle_text: str) -> Optional[Dict[str, float]]: + """ + Parsování circle stringu (CAP formát: "lat,lon radius_km"). + + Returns: + Dict s center (lat, lon) a radius nebo None + """ + try: + parts = circle_text.strip().split() + if len(parts) != 2: + return None + + lat_str, lon_str = parts[0].split(",") + lat = float(lat_str) + lon = float(lon_str) + radius_km = float(parts[1]) + + return { + "center_lat": lat, + "center_lon": lon, + "radius_km": radius_km, + } + except (ValueError, IndexError): + _LOGGER.warning(f"Neplatný circle formát: {circle_text}") + return None + + def _get_text(self, elem: ET.Element, tag: str, default: str = "") -> str: + """ + Získání textu z XML elementu (s namespace). + + Args: + elem: Parent element + tag: Tag name (bez namespace) + default: Default hodnota + + Returns: + Text nebo default + """ + # Pokud tag obsahuje XPath (např. "parameter[valueName='...']/value") + if "[" in tag or "/" in tag: + # Složitější XPath - použijeme find s plným namespace + # Pro jednoduchost to neimplementujeme, vrátíme default + return default + + child = elem.find(f"{CAP_NS}{tag}") + if child is not None and child.text: + return child.text.strip() + + return default + + def _determine_status( + self, effective: Optional[str], onset: Optional[str], expires: Optional[str] + ) -> str: + """ + Určení statusu varování (active/upcoming/expired). + + Args: + effective: Effective datetime + onset: Onset datetime + expires: Expires datetime + + Returns: + "active", "upcoming", nebo "expired" + """ + now = datetime.now(timezone.utc) + + # Parse datetimes + expires_dt = self._parse_iso_datetime(expires) + if expires_dt and expires_dt < now: + return "expired" + + onset_dt = self._parse_iso_datetime(onset) + if onset_dt and onset_dt > now: + return "upcoming" + + effective_dt = self._parse_iso_datetime(effective) + if effective_dt and effective_dt > now: + return "upcoming" + + return "active" + + def _calculate_eta(self, onset: Optional[str]) -> float: + """ + Výpočet ETA (estimated time to arrival) v hodinách. + + Args: + onset: Onset datetime string + + Returns: + Počet hodin do onset (0 pokud už nastal nebo chybí) + """ + if not onset: + return 0.0 + + onset_dt = self._parse_iso_datetime(onset) + if not onset_dt: + return 0.0 + + now = datetime.now(timezone.utc) + delta = onset_dt - now + + hours = delta.total_seconds() / 3600 + return max(0.0, hours) + + def _parse_iso_datetime(self, dt_string: Optional[str]) -> Optional[datetime]: + """ + Parsování ISO datetime stringu. + + Args: + dt_string: ISO datetime (např. "2025-10-24T14:00:00+02:00") + + Returns: + datetime objekt (UTC) nebo None + """ + if not dt_string: + return None + + try: + # Python 3.11+ podporuje fromisoformat přímo + dt = datetime.fromisoformat(dt_string) + # Konverze na UTC + return dt.astimezone(timezone.utc) + except (ValueError, AttributeError): + return None + + # ---------- Geometrické filtrování ---------- + + def _filter_by_location( + self, alerts: List[Dict[str, Any]], latitude: float, longitude: float + ) -> Tuple[List[Dict[str, Any]], str]: + """ + Filtrování varování podle GPS souřadnic. + + Args: + alerts: Seznam všech varování + latitude: GPS latitude + longitude: GPS longitude + + Returns: + (filtered_alerts, filter_method) + filter_method: "polygon_match", "circle_match", "geocode_fallback", nebo "no_filter" + """ + local_alerts = [] + filter_method = "no_filter" + + point = (latitude, longitude) + for alert in alerts: + for area in alert.get("areas", []): + matched, method = self._match_area(area, point) + if matched: + local_alerts.append(alert) + filter_method = method + break + + # Pokračujeme dále - chceme projít VŠECHNY výstrahy, ne jen první match + + return local_alerts, filter_method + + def _match_area( + self, area: Dict[str, Any], point: Tuple[float, float] + ) -> Tuple[bool, str]: + if area.get("polygon"): + if self._point_in_polygon(point, area["polygon"]): + return True, "polygon_match" + + circle = area.get("circle") + if circle and self._point_in_circle( + point, + (circle["center_lat"], circle["center_lon"]), + circle["radius_km"], + ): + return True, "circle_match" + + if area.get("geocodes"): + return True, "geocode_fallback" + + return False, "no_filter" + + def _point_in_polygon( + self, point: Tuple[float, float], polygon: List[Tuple[float, float]] + ) -> bool: + """ + Ray casting algoritmus pro point-in-polygon test. + + Args: + point: (latitude, longitude) + polygon: Seznam (latitude, longitude) bodů + + Returns: + True pokud bod je uvnitř polygonu + """ + lat, lon = point + n = len(polygon) + inside = False + + p1_lat, p1_lon = polygon[0] + for i in range(1, n + 1): + p2_lat, p2_lon = polygon[i % n] + if self._ray_intersects(lat, lon, p1_lat, p1_lon, p2_lat, p2_lon): + inside = not inside + p1_lat, p1_lon = p2_lat, p2_lon + + return inside + + @staticmethod + def _ray_intersects( + lat: float, + lon: float, + p1_lat: float, + p1_lon: float, + p2_lat: float, + p2_lon: float, + ) -> bool: + if lon <= min(p1_lon, p2_lon) or lon > max(p1_lon, p2_lon): + return False + if lat > max(p1_lat, p2_lat): + return False + if p1_lon == p2_lon: + x_intersection = p1_lat + else: + x_intersection = (lon - p1_lon) * (p2_lat - p1_lat) / ( + p2_lon - p1_lon + ) + p1_lat + return p1_lat == p2_lat or lat <= x_intersection + + def _point_in_circle( + self, point: Tuple[float, float], center: Tuple[float, float], radius_km: float + ) -> bool: + """ + Point-in-circle test pomocí Haversine vzdálenosti. + + Args: + point: (latitude, longitude) + center: (latitude, longitude) + radius_km: Poloměr v kilometrech + + Returns: + True pokud bod je uvnitř kruhu + """ + distance_km = self._haversine_distance(point, center) + return distance_km <= radius_km + + def _haversine_distance( + self, point1: Tuple[float, float], point2: Tuple[float, float] + ) -> float: + """ + Haversine formule pro výpočet vzdálenosti mezi dvěma GPS body. + + Args: + point1: (latitude, longitude) + point2: (latitude, longitude) + + Returns: + Vzdálenost v kilometrech + """ + lat1, lon1 = point1 + lat2, lon2 = point2 + + # Převod na radiány + lat1, lon1, lat2, lon2 = map(radians, [lat1, lon1, lat2, lon2]) + + # Haversine formule + dlat = lat2 - lat1 + dlon = lon2 - lon1 + a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2 + c = 2 * asin(sqrt(a)) + + # Poloměr Země v km + radius_earth_km = 6371.0 + + return radius_earth_km * c + + # ---------- Alert selection ---------- + + def _select_top_alert( + self, alerts: List[Dict[str, Any]] + ) -> Optional[Dict[str, Any]]: + """ + Výběr "top" varování podle severity a ETA. + + Args: + alerts: Seznam varování + + Returns: + Top varování nebo None + """ + if not alerts: + return None + + # Filtr: pouze active nebo upcoming + relevant = [a for a in alerts if a.get("status") in ["active", "upcoming"]] + + if not relevant: + return None + + # Sort: 1) severity DESC, 2) ETA ASC + sorted_alerts = sorted( + relevant, + key=lambda x: (-x.get("severity_level", 0), x.get("eta_hours", 999)), + ) + + return sorted_alerts[0] + + def _prefer_czech_language( + self, alerts: List[Dict[str, Any]] + ) -> List[Dict[str, Any]]: + """ + Preferování českých varování, fallback na anglické. + + Pokud existuje stejné varování v cs i en, ponechat pouze cs. + """ + # Grupování podle event + onset (unikátní varování) + seen = {} + result = [] + + for alert in alerts: + key = f"{alert.get('event', '')}_{alert.get('onset', '')}" + lang = alert.get("language", "en") + + if key not in seen: + seen[key] = alert + result.append(alert) + elif lang == "cs" and seen[key].get("language") == "en": + # Nahradit anglické českým + result.remove(seen[key]) + seen[key] = alert + result.append(alert) + + return result + + # ---------- Public API ---------- + + async def get_warnings( + self, + latitude: float, + longitude: float, + session: Optional[aiohttp.ClientSession] = None, + ) -> Dict[str, Any]: + """ + Stažení a zpracování ČHMÚ varování. + + Args: + latitude: GPS latitude + longitude: GPS longitude + session: aiohttp session (pokud None, vytvoří se nový) + + Returns: + Dict s daty: + { + "all_warnings": [...], # Všechna varování v ČR + "local_warnings": [...], # Varování pro vaši lokalitu + "top_local_warning": {...}, # Top lokální varování + "severity_level": 0-4, # Max severity pro lokalitu + "all_warnings_count": 15, + "local_warnings_count": 2, + "highest_severity_cz": 3, + "gps_location": {"latitude": ..., "longitude": ...}, + "filter_method": "polygon_match", + "last_update": "2025-10-24T10:15:23+02:00", + "source": "ČHMÚ CAP Feed", + } + """ + # Cache check + if self._is_cache_valid(): + _LOGGER.debug("Používám cachovaná data") + return self._last_data + + # HTTP session + close_session = False + if session is None: + session = aiohttp.ClientSession() + close_session = True + + try: + # 1. Fetch CAP XML + xml_text = await self._fetch_cap_xml(session) + + # 2. Parse XML + all_alerts = self._parse_cap_xml(xml_text) + + # 3. Preferovat české jazykové verze + all_alerts = self._prefer_czech_language(all_alerts) + + # 4. Filtrovat podle lokality + local_alerts, filter_method = self._filter_by_location( + all_alerts, latitude, longitude + ) + + # 5. Vybrat top lokální varování + top_local = self._select_top_alert(local_alerts) + + all_warnings_count = len(all_alerts) + local_warnings_count = len(local_alerts) + severity_level = top_local.get("severity_level", 0) if top_local else 0 + highest_severity = max( + (a.get("severity_level", 0) for a in all_alerts), default=0 + ) + + # 6. Sestavit výsledek + result = { + "all_warnings": all_alerts, + "local_warnings": local_alerts, + "top_local_warning": top_local, + "severity_level": severity_level, + "all_warnings_count": all_warnings_count, + "local_warnings_count": local_warnings_count, + "highest_severity_cz": highest_severity, + "gps_location": { + "latitude": latitude, + "longitude": longitude, + }, + "filter_method": filter_method, + "last_update": datetime.now(self.timezone).isoformat(), + "source": "ČHMÚ CAP Feed", + } + + # Cache update + self._last_data = result + self._cache_time = datetime.now(timezone.utc) + + _LOGGER.info( + "ČHMÚ data aktualizována: %s celkem, %s lokálních, severity=%s", + all_warnings_count, + local_warnings_count, + severity_level, + ) + + return result + + finally: + if close_session: + await session.close() diff --git a/custom_components/oig_cloud/api/ha_rest_api.py b/custom_components/oig_cloud/api/ha_rest_api.py new file mode 100644 index 00000000..c3d7ac35 --- /dev/null +++ b/custom_components/oig_cloud/api/ha_rest_api.py @@ -0,0 +1,1108 @@ +""" +OIG Cloud - Home Assistant REST API Endpoints. + +This module provides REST API endpoints for accessing large sensor data +that would otherwise bloat sensor attributes and cause memory issues. + +Architecture: +- Sensors store ONLY summary data in attributes (< 2 KB) +- Full data stored in internal variables or via event profiling +- API endpoints expose full data on-demand via HTTP GET +- Dashboard/frontend fetches via /api/oig_cloud/ + +Endpoints: +- /api/oig_cloud/battery_forecast//timeline - Full timeline data (280 KB) +- /api/oig_cloud/battery_forecast//baseline - Baseline timeline (280 KB) +- /api/oig_cloud/spot_prices//intervals - 15min price intervals (155 KB) +- /api/oig_cloud/analytics//hourly - Hourly analytics (6.5 KB) +- /api/oig_cloud/consumption_profiles/ - 72h consumption prediction (~2 KB) +- /api/oig_cloud/balancing_decisions/ - 7d balancing pattern prediction (~15 KB) + +Total API payload: ~739 KB +Total sensor attributes: ~17 KB (97% reduction!) + +Author: OIG Cloud Integration +Date: 2025-10-28 +""" + +from __future__ import annotations + +import logging +import sys +from typing import Any, Dict, Optional + +from aiohttp import web +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity_component import EntityComponent +from homeassistant.helpers.http import HomeAssistantView +from homeassistant.util import dt as dt_util + +from ..const import CONF_AUTO_MODE_SWITCH, DOMAIN + +_LOGGER = logging.getLogger(__name__) + +# API routes base +API_BASE = "/api/oig_cloud" +SENSOR_COMPONENT_NOT_FOUND = "Sensor component not found" + + +def _transform_timeline_for_api(timeline: list[dict[str, Any]]) -> list[dict[str, Any]]: + """ + Transform timeline from internal format to API format. + + Internal format uses long descriptive keys: + - solar_production_kwh → solar_kwh + - consumption_kwh → load_kwh + - grid_charge_kwh → stays same + + API format uses short keys expected by frontend. + """ + transformed = [] + for point in timeline: + new_point = point.copy() + + # Rename long keys to short keys + if "solar_production_kwh" in new_point: + new_point["solar_kwh"] = new_point.pop("solar_production_kwh") + if "consumption_kwh" in new_point: + new_point["load_kwh"] = new_point.pop("consumption_kwh") + + transformed.append(new_point) + + return transformed + + +def _find_entry_for_box(hass: HomeAssistant, box_id: str) -> Optional[ConfigEntry]: + """Locate config entry that owns a given box_id.""" + entries = hass.config_entries.async_entries(DOMAIN) + if not entries: + return None + + domain_data = hass.data.get(DOMAIN, {}) + for entry in entries: + entry_data = domain_data.get(entry.entry_id, {}) + coordinator = entry_data.get("coordinator") + if not coordinator or not hasattr(coordinator, "data"): + continue + box_map = getattr(coordinator, "data", {}) + if isinstance(box_map, dict) and box_id in box_map: + return entry + + return None + + +async def _load_precomputed_timeline( + hass: HomeAssistant, box_id: str +) -> Optional[Dict[str, Any]]: + from homeassistant.helpers.storage import Store + + store: Store = Store(hass, 1, f"oig_cloud.precomputed_data_{box_id}") + try: + loaded: Optional[Dict[str, Any]] = await store.async_load() + return loaded if isinstance(loaded, dict) else None + except Exception as storage_error: + _LOGGER.warning( + "Failed to read precomputed timeline data (fast path): %s", + storage_error, + ) + return None + + +def _build_precomputed_response( + precomputed_data: Dict[str, Any], timeline_type: str, box_id: str +) -> Optional[web.Response]: + last_update: Optional[str] = (precomputed_data or {}).get("last_update") + stored_hybrid: Optional[list[Any]] = (precomputed_data or {}).get("timeline") + if not stored_hybrid: + stored_hybrid = (precomputed_data or {}).get("timeline_hybrid") + if not stored_hybrid: + return None # pragma: no cover + metadata = { + "box_id": box_id, + "last_update": last_update, + "points_count": len(stored_hybrid), + "size_kb": round(sys.getsizeof(str(stored_hybrid)) / 1024, 1), + } + response_data = { + "plan": "hybrid", + "active": stored_hybrid, + "timeline": stored_hybrid, + "metadata": metadata, + } + if timeline_type in ("baseline", "both"): + response_data["baseline"] = [] + return web.json_response(response_data) + + +def _find_entity(component: EntityComponent, entity_id: str) -> Optional[Any]: + for entity in component.entities: + if entity.entity_id == entity_id: + return entity + return None + + +def _get_sensor_component(hass: HomeAssistant) -> Optional[EntityComponent]: + entity_components = hass.data.get("entity_components") + if isinstance(entity_components, dict): + component = entity_components.get("sensor") + if component: + return component + return hass.data.get("sensor") + + +async def _load_entity_precomputed(entity_obj: Any) -> Optional[Dict[str, Any]]: + if not getattr(entity_obj, "_precomputed_store", None): + return None + try: + return await entity_obj._precomputed_store.async_load() or {} + except Exception as storage_error: + _LOGGER.warning( + "Failed to read precomputed timeline data: %s", storage_error + ) + return None + + +def _build_timeline_response( + *, + timeline_type: str, + box_id: str, + active_timeline: list[Any], + last_update: Any, +) -> web.Response: + response_data: Dict[str, Any] = {} + if timeline_type in ("active", "both"): + response_data["active"] = active_timeline + if timeline_type in ("baseline", "both"): + response_data["baseline"] = [] + response_data["metadata"] = { + "box_id": box_id, + "last_update": str(last_update) if last_update else None, + "points_count": len(active_timeline), + "size_kb": round(sys.getsizeof(str(response_data)) / 1024, 1), + } + return web.json_response(response_data) + + +class OIGCloudBatteryTimelineView(HomeAssistantView): + """API endpoint for battery forecast timeline data.""" + + url = f"{API_BASE}/battery_forecast/{{box_id}}/timeline" + name = "api:oig_cloud:battery_timeline" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get full battery forecast timeline data. + + Args: + box_id: OIG box ID (e.g., "2206237016") + + Query params: + ?type=active - Active timeline (with applied charging plan) + ?type=baseline - Baseline timeline (no charging plan) + ?type=both - Both timelines (default) + + Returns: + JSON with timeline data: + { + "active": [...], # 192 timeline points + "baseline": [...], # 192 timeline points + "metadata": { + "box_id": "2206237016", + "last_update": "2025-10-28T12:00:00+01:00", + "points_count": 192, + "size_kb": 280 + } + } + """ + hass: HomeAssistant = request.app["hass"] + request.query.get("mode", "hybrid").lower() + timeline_type = request.query.get("type", "both") + _ = request.query.get("plan", "hybrid").lower() # legacy (single-planner) + + try: + precomputed_data = await _load_precomputed_timeline(hass, box_id) + if precomputed_data: + response = _build_precomputed_response( + precomputed_data, timeline_type, box_id + ) + if response is not None: + return response + + sensor_id = f"sensor.oig_{box_id}_battery_forecast" + component: EntityComponent = hass.data.get("sensor") # type: ignore + + if not component: + return web.json_response( + {"error": "Sensor component not found and no precomputed data"}, + status=503, + ) + + entity_obj = _find_entity(component, sensor_id) + if not entity_obj: + return web.json_response( + {"error": f"Sensor {sensor_id} not found and no precomputed data"}, + status=503, + ) + + entity_precomputed = await _load_entity_precomputed(entity_obj) + stored_active = None + if entity_precomputed: + stored_active = entity_precomputed.get( + "timeline" + ) or entity_precomputed.get("timeline_hybrid") + if stored_active: + _LOGGER.debug( + "API: Serving hybrid timeline from precomputed storage for %s", + box_id, + ) + + active_timeline = stored_active or getattr(entity_obj, "_timeline_data", []) + last_update = getattr(entity_obj, "_last_update", None) + if stored_active and entity_precomputed: + last_update = entity_precomputed.get("last_update", last_update) + + _LOGGER.debug( + "API: Serving battery timeline for %s, type=%s, points=%s", + box_id, + timeline_type, + len(active_timeline), + ) + return _build_timeline_response( + timeline_type=timeline_type, + box_id=box_id, + active_timeline=active_timeline, + last_update=last_update, + ) + + except Exception as err: + _LOGGER.error("Error serving battery timeline API: %s", err) + return web.json_response({"error": str(err)}, status=500) + + +class OIGCloudSpotPricesView(HomeAssistantView): + """API endpoint for spot price intervals (Phase 1.5).""" + + url = f"{API_BASE}/spot_prices/{{box_id}}/intervals" + name = "api:oig_cloud:spot_prices" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get 15-minute spot price intervals. + + Args: + box_id: OIG box ID (e.g., "2206237016") + + Query params: + ?type=export - Export prices (without VAT/distribution) + ?type=spot - Spot prices (with VAT/distribution) + ?currency=czk - CZK prices only (default) + ?currency=eur - EUR prices only + ?currency=both - Both currencies + + Returns: + JSON with price intervals: + { + "intervals": [ + {"time": "2025-10-28T00:00:00", "price": 1.234}, + ... + ], + "metadata": { + "box_id": "2206237016", + "type": "export", + "intervals_count": 192, + "last_update": "2025-10-28T12:00:00+01:00", + "currency": "czk", + "size_kb": 12 + } + } + """ + hass: HomeAssistant = request.app["hass"] + price_type = request.query.get("type", "export") # export or spot + currency = request.query.get("currency", "czk") + + try: + # Determine sensor ID based on type + if price_type == "export": + sensor_id = f"sensor.oig_{box_id}_export_price_current_15min" + elif price_type == "spot": + sensor_id = f"sensor.oig_{box_id}_spot_price_current_15min" + else: + return web.json_response( + {"error": f"Invalid type: {price_type}. Use 'export' or 'spot'."}, + status=400, + ) + + component = _get_sensor_component(hass) + + if not component: + return web.json_response( + {"error": SENSOR_COMPONENT_NOT_FOUND}, status=500 + ) + + entity_obj = _find_entity(component, sensor_id) + + if not entity_obj: + return web.json_response( + {"error": f"Sensor {sensor_id} not found"}, status=404 + ) + + # Get spot data from sensor's internal variables + spot_data = getattr(entity_obj, "_spot_data_15min", {}) + last_update = getattr(entity_obj, "_last_update", None) + + # Extract intervals + prices_15m = spot_data.get("prices15m_czk_kwh", {}) + intervals = [ + {"time": time_key, "price": price} + for time_key, price in sorted(prices_15m.items()) + ] + + # Build response + response_data = { + "intervals": intervals, + "metadata": { + "box_id": box_id, + "type": price_type, + "intervals_count": len(intervals), + "last_update": last_update.isoformat() if last_update else None, + "currency": currency, + }, + } + + # Add size info + import sys + + response_data["metadata"]["size_kb"] = round( + sys.getsizeof(str(response_data)) / 1024, 1 + ) + + _LOGGER.debug( + f"API: Serving {price_type} prices for {box_id}, " + f"currency={currency}, intervals={len(intervals)}" + ) + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error(f"Error serving spot prices API: {e}") + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudAnalyticsView(HomeAssistantView): + """API endpoint for hourly analytics data.""" + + url = f"{API_BASE}/analytics/{{box_id}}/hourly" + name = "api:oig_cloud:analytics" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get hourly analytics data. + + Args: + box_id: OIG box ID (e.g., "2206237016") + + Returns: + JSON with hourly analytics: + { + "hourly_prices": [...], # 48 hours of data + "metadata": { + "box_id": "2206237016", + "hours_count": 48, + "last_update": "2025-10-28T12:00:00+01:00", + "size_kb": 6.5 + } + } + """ + hass: HomeAssistant = request.app["hass"] + + try: + # Find analytics sensor + sensor_id = f"sensor.oig_{box_id}_hourly_analytics" + component = _get_sensor_component(hass) + + if not component: + return web.json_response( + {"error": SENSOR_COMPONENT_NOT_FOUND}, status=500 + ) + + entity_obj = _find_entity(component, sensor_id) + + if not entity_obj: + return web.json_response( + {"error": f"Sensor {sensor_id} not found"}, status=404 + ) + + # Get hourly data + hourly_prices = getattr(entity_obj, "_hourly_prices", []) + last_update = getattr(entity_obj, "_last_update", None) + + # Build response + import sys + + response_data = { + "hourly_prices": hourly_prices, + "metadata": { + "box_id": box_id, + "hours_count": len(hourly_prices), + "last_update": str(last_update) if last_update else None, + "size_kb": round(sys.getsizeof(str(hourly_prices)) / 1024, 1), + }, + } + + _LOGGER.debug( + "API: Serving analytics for %s, hours=%s", + box_id, + len(hourly_prices), + ) + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error(f"Error serving analytics API: {e}") + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudConsumptionProfilesView(HomeAssistantView): + """API endpoint for 72h consumption profiles data.""" + + url = f"{API_BASE}/consumption_profiles/{{box_id}}" + name = "api:oig_cloud:consumption_profiles" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get current 72h consumption profile and prediction. + + Args: + box_id: OIG box ID (e.g., "2206237016") + + Returns: + JSON with profile data: + { + "current_prediction": { + "matched_profile_created": "2025-10-20T00:30:00+01:00", + "similarity_score": 0.856, + "predicted_consumption_24h": [...], # 24 hourly values + "predicted_total_kwh": 28.45, + "predicted_avg_kwh": 1.185 + }, + "metadata": { + "box_id": "2206237016", + "last_profile_created": "2025-10-28T00:30:00+01:00", + "profiling_status": "ok", + "data_hash": "a3f2b1c4" + } + } + """ + hass: HomeAssistant = request.app["hass"] + + try: + # Find sensor entity + sensor_id = f"sensor.oig_{box_id}_adaptive_load_profiles" + component = _get_sensor_component(hass) + + if not component: + return web.json_response( + {"error": SENSOR_COMPONENT_NOT_FOUND}, status=500 + ) + + entity_obj = _find_entity(component, sensor_id) + + if not entity_obj: + return web.json_response( + {"error": f"Sensor {sensor_id} not found"}, status=404 + ) + + # Get prediction from sensor + current_prediction = entity_obj.get_current_prediction() + + response_data = { + "current_prediction": current_prediction, + "metadata": { + "box_id": box_id, + "last_profile_created": getattr( + entity_obj, "_last_profile_created", None + ), + "profiling_status": getattr( + entity_obj, "_profiling_status", "unknown" + ), + "data_hash": getattr(entity_obj, "_data_hash", None), + }, + } + + _LOGGER.debug(f"API: Serving consumption profiles for {box_id}") + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error(f"Error serving consumption profiles API: {e}") + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudBalancingDecisionsView(HomeAssistantView): + """API endpoint for balancing decision pattern data.""" + + url = f"{API_BASE}/balancing_decisions/{{box_id}}" + name = "api:oig_cloud:balancing_decisions" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + GET /api/oig_cloud/balancing_decisions/{box_id} + + Returns balancing decision pattern prediction based on 7d profiling. + + Response structure: + { + "current_prediction": { + "matched_profile_created": "2025-10-27T00:30:00", + "similarity_score": 0.87, + "predicted_120h_data": [...], # 120 hours of predicted data + "predicted_balancing_hours": 18, + "predicted_balancing_percentage": 15.0, + "predicted_avg_spot_price": 2.35, + "matched_profile_balancing_hours": 22 + }, + "metadata": { + "box_id": "CBB00000123", + "last_profile_created": "2025-10-28T00:30:00", + "profiling_status": "ok", + "data_source": "7d_balancing_profiling" + } + } + """ + try: + # Find battery_balancing sensor entity + entity_id = f"sensor.oig_{box_id}_battery_balancing" + entity_component = _get_sensor_component(self.hass) + + if not entity_component: + return web.json_response( + {"error": SENSOR_COMPONENT_NOT_FOUND}, status=404 + ) + + entity_obj = _find_entity(entity_component, entity_id) + + if not entity_obj: + return web.json_response( + {"error": f"Battery balancing sensor {entity_id} not found"}, + status=404, + ) + + # Get current prediction from sensor + current_prediction = None + if hasattr(entity_obj, "_find_best_matching_balancing_pattern"): + try: + current_prediction = await entity_obj._find_best_matching_balancing_pattern() # type: ignore + except Exception as e: + _LOGGER.warning(f"Failed to get balancing pattern: {e}") + + # Prepare response + metadata = { + "box_id": box_id, + "last_profile_created": ( + entity_obj._last_balancing_profile_created.isoformat() # type: ignore + if hasattr(entity_obj, "_last_balancing_profile_created") + and entity_obj._last_balancing_profile_created # type: ignore + else None + ), + "profiling_status": ( + entity_obj._balancing_profiling_status # type: ignore + if hasattr(entity_obj, "_balancing_profiling_status") + else "unknown" + ), + "data_source": "7d_balancing_profiling", + } + + response_data = { + "current_prediction": current_prediction, + "metadata": metadata, + } + + _LOGGER.debug(f"API: Serving balancing decisions for {box_id}") + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error(f"Error serving balancing decisions API: {e}") + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudUnifiedCostTileView(HomeAssistantView): + """ + API endpoint for Unified Cost Tile data. + + Phase V2: PLAN_VS_ACTUAL_UX_REDESIGN_V2.md - Fáze 1 + Consolidates 2 cost tiles into one with today/yesterday/tomorrow context. + """ + + url = f"{API_BASE}/battery_forecast/{{box_id}}/unified_cost_tile" + name = "api:oig_cloud:unified_cost_tile" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get unified cost tile data. + + Returns: + JSON with today/yesterday/tomorrow cost data: + { + "today": { + "plan_total_cost": 45.50, + "actual_total_cost": 42.30, + "delta": -3.20, + "performance": "better", + "completed_intervals": 32, + "total_intervals": 96, + "progress_pct": 33, + "eod_prediction": { + "predicted_total": 128.50, + "vs_plan": -4.50, + "confidence": "medium" + } + }, + "yesterday": { + "plan_total_cost": 125.00, + "actual_total_cost": 118.50, + "delta": -6.50, + "performance": "better" + }, + "tomorrow": { + "plan_total_cost": 135.00 + } + } + """ + hass: HomeAssistant = request.app["hass"] + _ = request.query.get("plan") or request.query.get("mode") or "hybrid" # legacy + mode = "hybrid" + + try: + precomputed_data = await _load_precomputed_data(hass, box_id) + response_payload = _build_precomputed_tile_payload( + precomputed_data, mode + ) + if response_payload is not None: + return web.json_response(response_payload) + + entity_obj = _resolve_battery_forecast_entity(hass, box_id) + if entity_obj is None: + return _json_error( + "Sensor component not found, and no precomputed data available", + status=503, + ) + + comparison_summary = ( + precomputed_data.get("cost_comparison") if precomputed_data else None + ) + tile_data = await _build_unified_cost_tile_on_demand( + entity_obj, box_id + ) + if tile_data is None: + return _json_error("Failed to build unified cost tile data", status=500) + + if comparison_summary and isinstance(tile_data, dict): + tile_data = dict(tile_data) + tile_data["comparison"] = comparison_summary + + _LOGGER.debug( + "API: Serving unified cost tile for %s, today_delta=%.2f Kč", + box_id, + tile_data.get("today", {}).get("delta", 0), + ) + + return web.json_response(tile_data) + + except Exception as e: + _LOGGER.error(f"Error serving unified cost tile API: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +async def _load_precomputed_data( + hass: HomeAssistant, box_id: str +) -> Optional[Dict[str, Any]]: + from homeassistant.helpers.storage import Store + + store = Store(hass, 1, f"oig_cloud.precomputed_data_{box_id}") + try: + return await store.async_load() + except Exception: + return None + + +def _build_precomputed_tile_payload( + precomputed_data: Optional[Dict[str, Any]], mode: str +) -> Optional[Dict[str, Any]]: + if not precomputed_data: + return None + tile_key = _pick_unified_cost_tile_key(precomputed_data) + tile_payload = precomputed_data.get(tile_key) + if not tile_payload: + return None + response_payload = dict(tile_payload) + comparison_summary = precomputed_data.get("cost_comparison") + if comparison_summary and isinstance(response_payload, dict): + response_payload["comparison"] = comparison_summary + _LOGGER.debug( + "API: Serving %s unified cost tile from precomputed storage", + mode, + ) + return response_payload + + +def _pick_unified_cost_tile_key(precomputed_data: Dict[str, Any]) -> str: + if precomputed_data.get("unified_cost_tile"): + return "unified_cost_tile" + return "unified_cost_tile_hybrid" + + +def _resolve_battery_forecast_entity( + hass: HomeAssistant, box_id: str +) -> Optional[Any]: + sensor_id = f"sensor.oig_{box_id}_battery_forecast" + component = _get_sensor_component(hass) + if not component: + return None + return _find_entity(component, sensor_id) + + +async def _build_unified_cost_tile_on_demand( + entity_obj: Any, box_id: str +) -> Optional[Dict[str, Any]]: + if not hasattr(entity_obj, "build_unified_cost_tile"): + _LOGGER.error("API: build_unified_cost_tile method not found for %s", box_id) + raise AttributeError( + f"build_unified_cost_tile method not found for {box_id}" + ) + try: + _LOGGER.info("API: Building unified cost tile for %s...", box_id) + tile_data = await entity_obj.build_unified_cost_tile() + _LOGGER.info( + "API: Unified cost tile built successfully: %s", + list(tile_data.keys()) if isinstance(tile_data, dict) else type(tile_data), + ) + return tile_data + except Exception as build_error: + _LOGGER.error( + "API: Error in build_unified_cost_tile() for %s: %s", + box_id, + build_error, + exc_info=True, + ) + return None + + +def _json_error(message: str, *, status: int) -> web.Response: + return web.json_response({"error": message}, status=status) + + +def _filter_detail_tabs(detail_tabs: Dict[str, Any], tab: Optional[str]) -> Dict[str, Any]: + if tab and tab in ["yesterday", "today", "tomorrow"]: + return {tab: detail_tabs.get(tab, {})} + return { + "yesterday": detail_tabs.get("yesterday", {}), + "today": detail_tabs.get("today", {}), + "tomorrow": detail_tabs.get("tomorrow", {}), + } + + +async def _load_detail_tabs_from_store( + hass: HomeAssistant, box_id: str +) -> Optional[Dict[str, Any]]: + from homeassistant.helpers.storage import Store + + store: Store = Store(hass, 1, f"oig_cloud.precomputed_data_{box_id}") + try: + loaded: Optional[Dict[str, Any]] = await store.async_load() + if not isinstance(loaded, dict): + return None + return loaded.get("detail_tabs") or loaded.get("detail_tabs_hybrid") + except Exception as storage_error: + _LOGGER.warning( + "Failed to read precomputed detail tabs data (fast path): %s", + storage_error, + ) + return None + + +async def _load_detail_tabs_from_entity_store( + entity_obj: Any, + box_id: str, + tab: Optional[str], + plan_key: str, +) -> Optional[Dict[str, Any]]: + if not (hasattr(entity_obj, "_precomputed_store") and entity_obj._precomputed_store): + return None + try: + precomputed_data = await entity_obj._precomputed_store.async_load() + if not precomputed_data: + return None + detail_tabs = precomputed_data.get("detail_tabs") or precomputed_data.get( + "detail_tabs_hybrid" + ) + if not detail_tabs: + _LOGGER.debug("API: detail_tabs missing in precomputed store") + return None + _LOGGER.debug( + f"API: Serving detail tabs ({plan_key}) from precomputed storage for {box_id}, " + f"tab_filter={tab}, " + f"age={(dt_util.now() - dt_util.parse_datetime(precomputed_data.get('last_update', ''))).total_seconds():.0f}s" + if precomputed_data.get("last_update") + else "unknown age" + ) + return detail_tabs + except Exception as storage_error: + _LOGGER.warning( + f"Failed to read precomputed data ({plan_key}): {storage_error}, falling back to live build" + ) + return None + + +async def _load_detail_tabs_on_demand( + entity_obj: Any, box_id: str, tab: Optional[str], plan_key: str +) -> Dict[str, Any]: + if not hasattr(entity_obj, "build_detail_tabs"): + raise AttributeError("build_detail_tabs method not found") + try: + return await entity_obj.build_detail_tabs(tab=tab, plan=plan_key) + except Exception as build_error: + _LOGGER.error( + f"API: Error in build_detail_tabs() for {box_id}: {build_error}", + exc_info=True, + ) + raise + + +class OIGCloudDetailTabsView(HomeAssistantView): + """ + API endpoint for Detail Tabs - mode-aggregated battery forecast data. + + Phase 3.0: Detail Tabs API + Provides aggregated data by CBB modes instead of 15min intervals. + """ + + url = f"{API_BASE}/battery_forecast/{{box_id}}/detail_tabs" + name = "api:oig_cloud:detail_tabs" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get Detail Tabs data - aggregated by CBB modes. + + Args: + box_id: OIG box ID (e.g., "2206237016") + + Query params: + ?tab=yesterday|today|tomorrow - Filter specific tab (optional) + + Returns: + JSON with mode-aggregated data: + { + "yesterday": { + "date": "2025-11-05", + "mode_blocks": [ + { + "mode_historical": "HOME I", + "mode_planned": "HOME I", + "mode_match": true, + "status": "completed", + "start_time": "00:00", + "end_time": "02:30", + "interval_count": 10, + "duration_hours": 2.5, + "cost_historical": 12.50, + "cost_planned": 12.00, + "cost_delta": 0.50, + "battery_soc_start": 50.0, + "battery_soc_end": 45.2, + "solar_total_kwh": 0.0, + "consumption_total_kwh": 1.8, + "grid_import_total_kwh": 1.8, + "grid_export_total_kwh": 0.0, + "adherence_pct": 100 + } + ], + "summary": { + "total_cost": 28.50, + "overall_adherence": 65, + "mode_switches": 8 + } + }, + "today": {...}, + "tomorrow": {...} + } + """ + hass: HomeAssistant = request.app["hass"] + tab = request.query.get("tab", None) + # Always use hybrid plan (autonomy removed) + plan_key = "hybrid" + + try: + detail_tabs = await _load_detail_tabs_from_store(hass, box_id) + if detail_tabs: + return web.json_response(_filter_detail_tabs(detail_tabs, tab)) + + sensor_id = f"sensor.oig_{box_id}_battery_forecast" + component = _get_sensor_component(hass) + if not component: + return web.json_response( + {"error": SENSOR_COMPONENT_NOT_FOUND}, status=503 + ) + entity_obj = _find_entity(component, sensor_id) + if not entity_obj: + return web.json_response( + {"error": f"Sensor {sensor_id} not found"}, status=404 + ) + + detail_tabs = await _load_detail_tabs_from_entity_store( + entity_obj, box_id, tab, plan_key + ) + if detail_tabs: + return web.json_response(_filter_detail_tabs(detail_tabs, tab)) + + detail_tabs = await _load_detail_tabs_on_demand( + entity_obj, box_id, tab, plan_key + ) + + _LOGGER.debug( + f"API: Serving detail tabs for {box_id}, " + f"tab_filter={tab}, " + f"tabs_count={len(detail_tabs)}" + ) + + return web.json_response(detail_tabs) + + except Exception as e: + _LOGGER.error(f"Error serving detail tabs API: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudPlannerSettingsView(HomeAssistantView): + """API endpoint to read/update planner settings.""" + + url = f"{API_BASE}/battery_forecast/{{box_id}}/planner_settings" + name = "api:oig_cloud:planner_settings" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + hass: HomeAssistant = request.app["hass"] + entry = _find_entry_for_box(hass, box_id) + if not entry: + return web.json_response({"error": "Box not found"}, status=404) + + value = entry.options.get(CONF_AUTO_MODE_SWITCH, False) + # Always use hybrid plan (autonomy removed) + return web.json_response( + { + "auto_mode_switch_enabled": value, + "planner_mode": "hybrid", + } + ) + + async def post(self, request: web.Request, box_id: str) -> web.Response: + hass: HomeAssistant = request.app["hass"] + entry = _find_entry_for_box(hass, box_id) + if not entry: + return web.json_response({"error": "Box not found"}, status=404) + + try: + payload = await request.json() + except Exception: + return web.json_response({"error": "Invalid JSON payload"}, status=400) + + if not isinstance(payload, dict): + return web.json_response({"error": "Invalid payload"}, status=400) + + current_enabled = entry.options.get(CONF_AUTO_MODE_SWITCH, False) + + desired_enabled = current_enabled + + if "auto_mode_switch_enabled" in payload: + desired_enabled = bool(payload.get("auto_mode_switch_enabled")) + + # Always use hybrid plan (autonomy removed) + if desired_enabled == current_enabled: + return web.json_response( + { + "auto_mode_switch_enabled": current_enabled, + "planner_mode": "hybrid", + "updated": False, + } + ) + + new_options = dict(entry.options) + new_options[CONF_AUTO_MODE_SWITCH] = desired_enabled + hass.config_entries.async_update_entry(entry, options=new_options) + _LOGGER.info( + "Planner settings updated for %s: auto_mode_switch_enabled=%s", + box_id, + desired_enabled, + ) + + return web.json_response( + { + "auto_mode_switch_enabled": desired_enabled, + "planner_mode": "hybrid", + "updated": True, + } + ) + + +class OIGCloudDashboardModulesView(HomeAssistantView): + """API endpoint to read enabled dashboard modules for an entry.""" + + url = f"{API_BASE}/{{entry_id}}/modules" + name = "api:oig_cloud:dashboard_modules" + requires_auth = True + + async def get(self, request: web.Request, entry_id: str) -> web.Response: + hass: HomeAssistant = request.app["hass"] + entry = hass.config_entries.async_get_entry(entry_id) + if not entry or entry.domain != DOMAIN: + return web.json_response({"error": "Entry not found"}, status=404) + + opts = entry.options or {} + return web.json_response( + { + "enable_boiler": bool(opts.get("enable_boiler", False)), + "enable_auto": bool(opts.get("enable_auto", False)), + } + ) + + +@callback +def setup_api_endpoints(hass: HomeAssistant) -> None: + """ + Register all REST API endpoints for OIG Cloud integration. + + Args: + hass: Home Assistant instance + """ + _LOGGER.info("🚀 Registering OIG Cloud REST API endpoints") + + # Register views + hass.http.register_view(OIGCloudBatteryTimelineView()) + hass.http.register_view(OIGCloudUnifiedCostTileView()) + hass.http.register_view(OIGCloudDetailTabsView()) + hass.http.register_view(OIGCloudPlannerSettingsView()) + hass.http.register_view(OIGCloudDashboardModulesView()) + hass.http.register_view(OIGCloudSpotPricesView()) + hass.http.register_view(OIGCloudAnalyticsView()) + hass.http.register_view(OIGCloudConsumptionProfilesView()) + hass.http.register_view(OIGCloudBalancingDecisionsView()) + + _LOGGER.info( + "✅ OIG Cloud REST API endpoints registered:\n" + f" - {API_BASE}/battery_forecast//timeline\n" + f" - {API_BASE}/battery_forecast//unified_cost_tile\n" + f" - {API_BASE}/battery_forecast//detail_tabs\n" + f" - {API_BASE}/battery_forecast//planner_settings\n" + f" - {API_BASE}//modules\n" + f" - {API_BASE}/spot_prices//intervals\n" + f" - {API_BASE}/analytics//hourly\n" + f" - {API_BASE}/consumption_profiles/\n" + f" - {API_BASE}/balancing_decisions/" + ) diff --git a/custom_components/oig_cloud/api/oig_cloud_api.py b/custom_components/oig_cloud/api/oig_cloud_api.py deleted file mode 100644 index 056210fb..00000000 --- a/custom_components/oig_cloud/api/oig_cloud_api.py +++ /dev/null @@ -1,425 +0,0 @@ -import asyncio -import datetime -import json -import logging -import time -from typing import Any, Dict, Optional, Union, cast - -import aiohttp -from opentelemetry import trace -from opentelemetry.trace import SpanKind - -from homeassistant import core - -from ..models import OigCloudData, OigCloudDeviceData - -tracer = trace.get_tracer(__name__) - -# Using a lock to prevent multiple simultaneous API calls -lock = asyncio.Lock() - - -class OigCloudApiError(Exception): - """Exception for OIG Cloud API errors.""" - - -class OigCloudAuthError(OigCloudApiError): - """Exception for authentication errors.""" - - -class OigCloudApi: - """API client for OIG Cloud.""" - - # API endpoints - _base_url: str = "https://www.oigpower.cz/cez/" - _login_url: str = "inc/php/scripts/Login.php" - _get_stats_url: str = "json.php" - _set_mode_url: str = "inc/php/scripts/Device.Set.Value.php" - _set_grid_delivery_url: str = "inc/php/scripts/ToGrid.Toggle.php" - _set_batt_formating_url: str = "inc/php/scripts/Battery.Format.Save.php" - - def __init__( - self, username: str, password: str, no_telemetry: bool, hass: core.HomeAssistant - ) -> None: - """Initialize the API client.""" - with tracer.start_as_current_span("initialize") as span: - self._no_telemetry: bool = no_telemetry - self._logger: logging.Logger = logging.getLogger(__name__) - self._username: str = username - self._password: str = password - self._phpsessid: Optional[str] = None - self._last_update: datetime.datetime = datetime.datetime(1, 1, 1, 0, 0) - - # Track the state - self.box_id: Optional[str] = None - self.last_state: Optional[Dict[str, Any]] = None - self.last_parsed_state: Optional[OigCloudData] = None - - self._logger.debug("OigCloud API client initialized") - - async def authenticate(self) -> bool: - """Authenticate with the OIG Cloud API.""" - with tracer.start_as_current_span("authenticate") as span: - try: - login_command: Dict[str, str] = {"email": self._username, "password": self._password} - self._logger.debug("Authenticating with OIG Cloud") - - async with aiohttp.ClientSession() as session: - url: str = self._base_url + self._login_url - data: str = json.dumps(login_command) - headers: Dict[str, str] = {"Content-Type": "application/json"} - - with tracer.start_as_current_span( - "authenticate.post", - kind=SpanKind.SERVER, - attributes={"http.url": url, "http.method": "POST"}, - ): - async with session.post( - url, - data=data, - headers=headers, - ) as response: - response_content: str = await response.text() - span.add_event( - "Received auth response", - { - "response": response_content, - "status": response.status, - }, - ) - - if response.status == 200: - if response_content == '[[2,"",false]]': - self._phpsessid = ( - session.cookie_jar.filter_cookies( - self._base_url - ) - .get("PHPSESSID") - .value - ) - return True - - raise OigCloudAuthError("Authentication failed") - except OigCloudAuthError as e: - self._logger.error(f"Authentication error: {e}", stack_info=True) - raise - except Exception as e: - self._logger.error(f"Unexpected error during authentication: {e}", stack_info=True) - raise OigCloudAuthError(f"Authentication failed: {e}") from e - - def get_session(self) -> aiohttp.ClientSession: - """Get a session with authentication cookies.""" - if not self._phpsessid: - raise OigCloudAuthError("Not authenticated, call authenticate() first") - - return aiohttp.ClientSession(headers={"Cookie": f"PHPSESSID={self._phpsessid}"}) - - async def get_stats(self) -> Dict[str, Any]: - """Get stats from the OIG Cloud API with caching.""" - async with lock: - current_time = datetime.datetime.now() - - # Use cache if data is less than 30 seconds old - if (current_time - self._last_update).total_seconds() < 30 and self.last_state: - self._logger.debug("Using cached stats (< 30s old)") - return cast(Dict[str, Any], self.last_state) - - with tracer.start_as_current_span("get_stats") as span: - try: - data: Optional[Dict[str, Any]] = None - - try: - data = await self.get_stats_internal() - except OigCloudAuthError: - self._logger.debug("Authentication failed, retrying...") - if await self.authenticate(): - data = await self.get_stats_internal() - else: - raise OigCloudAuthError("Failed to authenticate after retry") - - self._logger.debug("Successfully retrieved stats") - - if data and self.box_id is None and data: - self.box_id = list(data.keys())[0] - - # Parse the data into our model - if data: - try: - self.last_parsed_state = OigCloudData.from_dict(data) - except (ValueError, KeyError) as e: - self._logger.warning(f"Error parsing API data: {e}") - - # Update last_update timestamp - self._last_update = datetime.datetime.now() - self._logger.debug(f"Updated stats timestamp: {self._last_update}") - - return data - - except OigCloudApiError as e: - self._logger.error(f"API error: {e}", stack_info=True) - raise - except Exception as e: - self._logger.error(f"Unexpected error: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to get stats: {e}") from e - - async def get_stats_internal(self, dependent: bool = False) -> Dict[str, Any]: - """Internal method to fetch stats from API without caching.""" - with tracer.start_as_current_span("get_stats_internal"): - self._logger.debug("Starting API session") - - async with self.get_session() as session: - url: str = self._base_url + self._get_stats_url - self._logger.debug(f"Fetching stats from {url}") - - with tracer.start_as_current_span( - "get_stats_internal.get", - kind=SpanKind.SERVER, - attributes={"http.url": url, "http.method": "GET"}, - ): - async with session.get(url) as response: - if response.status == 200: - json_response: Any = await response.json() - - # The response should be a JSON dictionary, otherwise it's an error - if not isinstance(json_response, dict) and not dependent: - self._logger.info("Invalid response, retrying authentication") - - if await self.authenticate(): - second_try = await self.get_stats_internal(True) - if not isinstance(second_try, dict): - self._logger.warning(f"Error after retry: {second_try}") - return {} - else: - self.last_state = second_try - return second_try - else: - return {} - else: - self.last_state = json_response - else: - raise OigCloudApiError(f"API returned status {response.status}") - - self._logger.debug("Retrieved stats successfully") - return cast(Dict[str, Any], self.last_state) - - async def set_box_mode(self, mode: str) -> bool: - """Set box mode (Home 1, Home 2, etc.).""" - with tracer.start_as_current_span("set_mode") as span: - try: - self._logger.debug(f"Setting box mode to {mode}") - return await self.set_box_params_internal("box_prms", "mode", mode) - except Exception as e: - self._logger.error(f"Error setting box mode: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to set box mode: {e}") from e - - async def set_grid_delivery_limit(self, limit: int) -> bool: - """Set grid delivery power limit.""" - with tracer.start_as_current_span("set_grid_delivery_limit") as span: - try: - self._logger.debug(f"Setting grid delivery limit to {limit}W") - return await self.set_box_params_internal( - "invertor_prm1", "p_max_feed_grid", limit - ) - except Exception as e: - self._logger.error(f"Error setting grid delivery limit: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to set grid delivery limit: {e}") from e - - async def set_boiler_mode(self, mode: str) -> bool: - """Set boiler mode (manual or automatic).""" - with tracer.start_as_current_span("set_boiler_mode") as span: - try: - self._logger.debug(f"Setting boiler mode to {mode}") - return await self.set_box_params_internal("boiler_prms", "manual", mode) - except Exception as e: - self._logger.error(f"Error setting boiler mode: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to set boiler mode: {e}") from e - - async def set_box_params_internal( - self, table: str, column: str, value: Union[str, int] - ) -> bool: - """Set a specific box parameter.""" - with tracer.start_as_current_span("set_box_params_internal") as span: - if not self.box_id: - raise OigCloudApiError("Box ID not available, fetch stats first") - - async with self.get_session() as session: - data: str = json.dumps( - { - "id_device": self.box_id, - "table": table, - "column": column, - "value": value, - } - ) - _nonce: int = int(time.time() * 1000) - target_url: str = f"{self._base_url}{self._set_mode_url}?_nonce={_nonce}" - - # Log with redacted box_id for security - self._logger.debug( - f"Sending parameter update to {target_url} with {data.replace(str(self.box_id), 'xxxxxx')}" - ) - - with tracer.start_as_current_span( - "set_box_params_internal.post", - kind=SpanKind.SERVER, - attributes={"http.url": target_url, "http.method": "POST"}, - ): - async with session.post( - target_url, - data=data, - headers={"Content-Type": "application/json"}, - ) as response: - response_content: str = await response.text() - - if response.status == 200: - response_json = json.loads(response_content) - message = response_json[0][2] - self._logger.info(f"API response: {message}") - return True - else: - raise OigCloudApiError( - f"Error setting parameter: {response.status} - {response_content}" - ) - - async def set_grid_delivery(self, mode: int) -> bool: - """Set grid delivery mode.""" - with tracer.start_as_current_span("set_grid_delivery") as span: - try: - if self._no_telemetry: - raise OigCloudApiError( - "Tato funkce je ve vývoji a proto je momentálně dostupná pouze pro systémy s aktivní telemetrií." - ) - - self._logger.debug(f"Setting grid delivery to mode {mode}") - - if not self.box_id: - raise OigCloudApiError("Box ID not available, fetch stats first") - - async with self.get_session() as session: - data: str = json.dumps( - { - "id_device": self.box_id, - "value": mode, - } - ) - - _nonce: int = int(time.time() * 1000) - target_url: str = ( - f"{self._base_url}{self._set_grid_delivery_url}?_nonce={_nonce}" - ) - - # Log with redacted box_id for security - self._logger.info( - f"Sending grid delivery request to {target_url} for {data.replace(str(self.box_id), 'xxxxxx')}" - ) - - with tracer.start_as_current_span( - "set_grid_delivery.post", - kind=SpanKind.SERVER, - attributes={"http.url": target_url, "http.method": "POST"}, - ): - async with session.post( - target_url, - data=data, - headers={"Content-Type": "application/json"}, - ) as response: - response_content: str = await response.text() - - if response.status == 200: - response_json = json.loads(response_content) - self._logger.debug(f"API response: {response_json}") - return True - else: - raise OigCloudApiError( - f"Error setting grid delivery: {response.status} - {response_content}" - ) - except OigCloudApiError: - raise - except Exception as e: - self._logger.error(f"Error setting grid delivery: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to set grid delivery: {e}") from e - - async def set_formating_mode(self, mode: str) -> bool: - """Set battery formatting mode.""" - with tracer.start_as_current_span("set_formating_battery") as span: - try: - self._logger.debug(f"Setting battery formatting mode to {mode}") - - async with self.get_session() as session: - data: str = json.dumps( - { - "bat_ac": mode, - } - ) - - _nonce: int = int(time.time() * 1000) - target_url: str = f"{self._base_url}{self._set_batt_formating_url}?_nonce={_nonce}" - - # Log with redacted box_id for security - self._logger.info( - f"Sending battery formatting request to {target_url}" - ) - - with tracer.start_as_current_span( - "set_formating_battery.post", - kind=SpanKind.SERVER, - attributes={"http.url": target_url, "http.method": "POST"}, - ): - async with session.post( - target_url, - data=data, - headers={"Content-Type": "application/json"}, - ) as response: - response_content: str = await response.text() - - if response.status == 200: - response_json = json.loads(response_content) - self._logger.debug(f"API response: {response_json}") - return True - else: - raise OigCloudApiError( - f"Error setting battery formatting mode: {response.status} - {response_content}" - ) - except OigCloudApiError: - raise - except Exception as e: - self._logger.error(f"Error setting battery formatting mode: {e}", stack_info=True) - raise OigCloudApiError(f"Failed to set battery formatting mode: {e}") from e - - async def get_data(self) -> Dict[str, Any]: - """Get the latest data as a Dictionary. - - This is the preferred method for getting data from the API. - It returns the raw dictionary for compatibility with existing code. - """ - with tracer.start_as_current_span("get_data") as span: - try: - # Get the raw data - data = await self.get_stats() - if not data: - self._logger.warning("No data received from API") - return {} - - return data - except Exception as e: - self._logger.error(f"Failed to get data: {e}") - raise - - async def get_typed_data(self) -> Optional[OigCloudData]: - """Get the latest data as a typed OigCloudData object. - - This returns the structured data model version of the API response. - """ - with tracer.start_as_current_span("get_typed_data") as span: - try: - # Get the raw data - data = await self.get_stats() - if not data: - self._logger.warning("No data received from API") - return None - - # Convert to typed model - return OigCloudData.from_dict(data) - except Exception as e: - self._logger.error(f"Failed to get typed data: {e}") - raise diff --git a/custom_components/oig_cloud/api/oig_cloud_session_manager.py b/custom_components/oig_cloud/api/oig_cloud_session_manager.py new file mode 100644 index 00000000..0878d34f --- /dev/null +++ b/custom_components/oig_cloud/api/oig_cloud_session_manager.py @@ -0,0 +1,468 @@ +"""Session manager wrapper for OigCloudApi with TTL tracking and retry logic. + +This wrapper does NOT inject sessions into OigCloudApi (which manages its own sessions). +Instead, it wraps API calls to provide: +- Session TTL tracking and automatic re-authentication +- 401 retry logic with exponential backoff +- Rate limiting protection +- Detailed logging for debugging +""" + +import asyncio +import logging +from datetime import datetime, timedelta +from typing import Any, Awaitable, Callable, Dict, Optional + +from ..lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi, OigCloudAuthError + +_LOGGER = logging.getLogger(__name__) + +# Session TTL: 30 minut (bezpečná rezerva) +SESSION_TTL = timedelta(minutes=30) + +# Rate limiting: max 1 request per second +MIN_REQUEST_INTERVAL = timedelta(seconds=1) + + +class OigCloudSessionManager: + """Wrapper around OigCloudApi for session management without session injection.""" + + def __init__(self, api: OigCloudApi) -> None: + """Initialize session manager. + + Args: + api: OigCloudApi instance (already configured with credentials) + """ + self._api = api + self._last_auth_time: Optional[datetime] = None + self._last_request_time: Optional[datetime] = None + self._auth_lock = asyncio.Lock() + self._request_lock = asyncio.Lock() + + # Statistics tracking + self._stats = { + "total_requests": 0, + "successful_requests": 0, + "failed_requests": 0, + "auth_count": 0, + "retry_count": 0, + "rate_limited_count": 0, + "session_created": datetime.now(), + } + + _LOGGER.info( + "🔧 SessionManager initialized (wrapper mode, no session injection)" + ) + _LOGGER.info(f"📊 Session TTL: {SESSION_TTL.total_seconds() / 60:.0f} minutes") + _LOGGER.info( + f"⏱️ Rate limit: {MIN_REQUEST_INTERVAL.total_seconds():.1f}s between requests" + ) + + @property + def api(self) -> OigCloudApi: + """Get underlying API instance.""" + return self._api + + async def _log_api_session_info(self) -> None: + """Log information about API session configuration and headers.""" + try: + base_url = getattr(self._api, "_base_url", "https://www.oigpower.cz/cez") + _LOGGER.info(f"🌐 Base URL: {base_url}") + + session = self._open_debug_session() + if session: + try: + self._log_session_headers(session) + finally: + await session.close() + else: + _LOGGER.debug("No session object available from get_session()") + + # Log known API endpoints + _LOGGER.info("Known API endpoints:") + _LOGGER.info(f" Login: {base_url}/login") + _LOGGER.info(f" Stats: {base_url}/api/get_stats") + _LOGGER.info(f" Extended: {base_url}/api/get_extended_stats") + + except Exception as e: + _LOGGER.debug(f"Error logging API session info: {e}") + + def _open_debug_session(self) -> Optional[Any]: + try: + return self._api.get_session() + except Exception as e: + _LOGGER.warning(f"Could not inspect session headers: {e}", exc_info=True) + return None + + def _log_session_headers(self, session: Any) -> None: + _LOGGER.info("📋 HTTP HEADERS sent by OigCloudApi:") + + headers = self._extract_session_headers(session) + if headers: + for key, value in headers.items(): + _LOGGER.info(f" {key}: {value}") + return + + _LOGGER.debug( + "Could not find headers in session object, checking attributes..." + ) + _LOGGER.debug( + "Session attributes: %s", + [attr for attr in dir(session) if "header" in attr.lower()], + ) + + @staticmethod + def _extract_session_headers(session: Any) -> Optional[Dict[str, str]]: + if hasattr(session, "_default_headers") and session._default_headers: + return dict(session._default_headers) + if hasattr(session, "_connector") and hasattr(session._connector, "_default_headers"): + return dict(session._connector._default_headers) + return None + + def _is_session_expired(self) -> bool: + """Check if session TTL has expired.""" + if self._last_auth_time is None: + return True + + elapsed = datetime.now() - self._last_auth_time + is_expired = elapsed > SESSION_TTL + + if is_expired: + _LOGGER.debug( + f"⏰ Session expired (age: {elapsed.total_seconds() / 60:.1f}min)" + ) + + return is_expired + + async def _ensure_auth(self) -> None: + """Ensure API is authenticated, re-authenticate if session expired.""" + async with self._auth_lock: + if self._is_session_expired(): + self._stats["auth_count"] += 1 + auth_num = self._stats["auth_count"] + + _LOGGER.info( + f"🔐 Authentication #{auth_num} starting (session expired or first auth)" + ) + + try: + # Log PHPSESSID before auth + old_session = getattr(self._api, "_phpsessid", None) + if old_session: + _LOGGER.debug(f"📝 Old PHPSESSID: {old_session[:16]}...") + + # Log authentication URL + base_url = getattr(self._api, "_base_url", None) + if base_url: + _LOGGER.info(f"🌐 Auth URL: {base_url}/login") + + await self._api.authenticate() + self._last_auth_time = datetime.now() + + # Log PHPSESSID after auth + new_session = getattr(self._api, "_phpsessid", None) + if new_session: + _LOGGER.info( + f"🍪 New PHPSESSID: {new_session[:16]}... (length: {len(new_session)})" + ) + + # Try to inspect session headers (if API creates session) + await self._log_api_session_info() + + _LOGGER.info( + f"✅ Authentication #{auth_num} successful, session valid until {(datetime.now() + SESSION_TTL).strftime('%H:%M:%S')}" + ) + except Exception as e: + _LOGGER.error(f"❌ Authentication #{auth_num} failed: {e}") + raise + else: + elapsed = datetime.now() - self._last_auth_time + remaining = SESSION_TTL - elapsed + _LOGGER.debug( + f"✓ Session still valid (age: {elapsed.total_seconds() / 60:.1f}min, " + f"remaining: {remaining.total_seconds() / 60:.1f}min)" + ) + + async def _rate_limit(self) -> None: + """Enforce rate limiting between requests.""" + async with self._request_lock: + if self._last_request_time is not None: + elapsed = datetime.now() - self._last_request_time + if elapsed < MIN_REQUEST_INTERVAL: + self._stats["rate_limited_count"] += 1 + sleep_time = (MIN_REQUEST_INTERVAL - elapsed).total_seconds() + _LOGGER.debug( + f"⏸️ Rate limiting: sleeping {sleep_time:.2f}s (total rate-limited: {self._stats['rate_limited_count']})" + ) + await asyncio.sleep(sleep_time) + + self._last_request_time = datetime.now() + + async def _call_with_retry( + self, method: Callable[..., Awaitable[Any]], *args: Any, **kwargs: Any + ) -> Any: + """Call API method with automatic retry on 401 errors. + + Args: + method: API method to call + *args: Positional arguments for method + **kwargs: Keyword arguments for method + + Returns: + Result from API method + + Raises: + Exception: If all retry attempts fail + """ + max_retries = 2 + self._stats["total_requests"] += 1 + request_num = self._stats["total_requests"] + + for attempt in range(max_retries): + try: + # Ensure authenticated before request + await self._ensure_auth() + + # Rate limiting + await self._rate_limit() + + # Call actual API method + method_name = method.__name__ + + # Log URL endpoint based on method name + endpoint_map = { + "get_stats": "/api/get_stats", + "get_extended_stats": "/api/get_extended_stats", + "set_battery_working_mode": "/api/set_battery_working_mode", + "set_grid_delivery": "/api/set_grid_delivery", + "set_boiler_mode": "/api/set_boiler_mode", + "format_battery": "/api/format_battery", + "set_battery_capacity": "/api/set_battery_capacity", + "set_box_mode": "/api/set_box_mode", + "set_grid_delivery_limit": "/api/set_grid_delivery_limit", + "set_formating_mode": "/api/set_formating_mode", + } + endpoint = endpoint_map.get(method_name, "/api/unknown") + + _LOGGER.debug( + f"📡 Request #{request_num}: {method_name}() → {endpoint} (attempt {attempt + 1}/{max_retries})" + ) + + # Log request parameters if any + if args: + _LOGGER.debug(f" 📝 Args: {args}") + + result = await method(*args, **kwargs) + + self._stats["successful_requests"] += 1 + _LOGGER.debug( + f"✅ Request #{request_num}: {method_name}() successful " + f"(success rate: {self._stats['successful_requests']}/{self._stats['total_requests']})" + ) + return result + + except OigCloudAuthError as e: + self._stats["retry_count"] += 1 + _LOGGER.warning( + f"⚠️ Request #{request_num}: Auth error on attempt {attempt + 1}/{max_retries}: {e}" + ) + + if attempt < max_retries - 1: + # Force re-authentication on next attempt + self._last_auth_time = None + backoff = 2**attempt + _LOGGER.info( + f"🔄 Retrying in {backoff}s (retry #{self._stats['retry_count']})" + ) + await asyncio.sleep(backoff) + else: + self._stats["failed_requests"] += 1 + _LOGGER.error( + f"❌ Request #{request_num}: All {max_retries} attempts failed " + f"(fail rate: {self._stats['failed_requests']}/{self._stats['total_requests']})" + ) + raise + + except Exception as e: + self._stats["failed_requests"] += 1 + _LOGGER.error( + f"❌ Request #{request_num}: Unexpected error in {method.__name__}: {e}" + ) + raise + + # Wrapped API methods - delegate to underlying API with retry logic + + async def get_stats(self) -> Dict[str, Any]: + """Get current statistics with retry logic.""" + return await self._call_with_retry(self._api.get_stats) + + async def get_extended_stats( + self, + data_type: str, + from_date: str, + to_date: str, + ) -> Dict[str, Any]: + """Get extended statistics with retry logic. + + Args: + data_type: Type of data (e.g., 'batt', 'fve', 'grid', 'load') + from_date: Start date in format YYYY-MM-DD + to_date: End date in format YYYY-MM-DD + """ + return await self._call_with_retry( + self._api.get_extended_stats, + data_type, + from_date, + to_date, + ) + + async def set_battery_working_mode( + self, + box_sn: str, + mode: str, + start_time: Optional[str] = None, + end_time: Optional[str] = None, + ) -> Dict[str, Any]: + """Set battery working mode with retry logic.""" + return await self._call_with_retry( + self._api.set_battery_working_mode, + box_sn, + mode, + start_time, + end_time, + ) + + async def set_grid_delivery( + self, + delivery_mode: int, + ) -> Dict[str, Any]: + """Set grid delivery mode with retry logic.""" + return await self._call_with_retry( + self._api.set_grid_delivery, + delivery_mode, + ) + + async def set_boiler_mode( + self, + mode: int, + ) -> Dict[str, Any]: + """Set boiler mode with retry logic.""" + return await self._call_with_retry( + self._api.set_boiler_mode, + mode, + ) + + async def format_battery( + self, + command: int, + ) -> Dict[str, Any]: + """Format battery with retry logic.""" + return await self._call_with_retry( + self._api.format_battery, + command, + ) + + async def set_battery_capacity( + self, + capacity_ah: float, + ) -> Dict[str, Any]: + """Set battery capacity with retry logic.""" + return await self._call_with_retry( + self._api.set_battery_capacity, + capacity_ah, + ) + + async def set_box_mode( + self, + mode_value: str, + ) -> Dict[str, Any]: + """Set box mode with retry logic.""" + return await self._call_with_retry( + self._api.set_box_mode, + mode_value, + ) + + async def set_grid_delivery_limit( + self, + limit: int, + ) -> bool: + """Set grid delivery limit with retry logic.""" + return await self._call_with_retry( + self._api.set_grid_delivery_limit, + limit, + ) + + async def set_formating_mode( + self, + mode: str, + ) -> Dict[str, Any]: + """Set formatting mode with retry logic.""" + return await self._call_with_retry( + self._api.set_formating_mode, + mode, + ) + + async def close(self) -> None: + """Cleanup resources and log final statistics.""" + await asyncio.sleep(0) + uptime = datetime.now() - self._stats["session_created"] + + _LOGGER.info("=" * 60) + _LOGGER.info("📊 SESSION MANAGER FINAL STATISTICS") + _LOGGER.info("=" * 60) + _LOGGER.info(f"⏱️ Session uptime: {uptime}") + _LOGGER.info(f"🔐 Total authentications: {self._stats['auth_count']}") + _LOGGER.info(f"📡 Total requests: {self._stats['total_requests']}") + _LOGGER.info(f"✅ Successful requests: {self._stats['successful_requests']}") + _LOGGER.info(f"❌ Failed requests: {self._stats['failed_requests']}") + _LOGGER.info(f"🔄 Retry count: {self._stats['retry_count']}") + _LOGGER.info(f"⏸️ Rate limited: {self._stats['rate_limited_count']}") + + if self._stats["total_requests"] > 0: + success_rate = ( + self._stats["successful_requests"] / self._stats["total_requests"] + ) * 100 + _LOGGER.info(f"📈 Success rate: {success_rate:.1f}%") + + if uptime.total_seconds() > 0: + req_per_min = ( + self._stats["total_requests"] / uptime.total_seconds() + ) * 60 + _LOGGER.info(f"⚡ Request rate: {req_per_min:.2f} req/min") + + _LOGGER.info("=" * 60) + _LOGGER.debug("SessionManager closing") + + # OigCloudApi handles its own session cleanup + self._last_auth_time = None + self._last_request_time = None + + def get_statistics(self) -> Dict[str, Any]: + """Get current session statistics. + + Returns: + Dictionary with session statistics + """ + uptime = datetime.now() - self._stats["session_created"] + + stats = dict(self._stats) + stats["uptime_seconds"] = uptime.total_seconds() + stats["uptime_str"] = str(uptime) + + if self._last_auth_time: + session_age = datetime.now() - self._last_auth_time + stats["current_session_age_seconds"] = session_age.total_seconds() + stats["current_session_age_minutes"] = session_age.total_seconds() / 60 + stats["session_expires_in_minutes"] = ( + SESSION_TTL - session_age + ).total_seconds() / 60 + + if self._stats["total_requests"] > 0: + stats["success_rate_percent"] = ( + self._stats["successful_requests"] / self._stats["total_requests"] + ) * 100 + stats["requests_per_minute"] = ( + self._stats["total_requests"] / uptime.total_seconds() + ) * 60 + + return stats diff --git a/custom_components/oig_cloud/api/ote_api.py b/custom_components/oig_cloud/api/ote_api.py new file mode 100644 index 00000000..b833ee49 --- /dev/null +++ b/custom_components/oig_cloud/api/ote_api.py @@ -0,0 +1,745 @@ +# OTE (Operator trhu s elektřinou) – zjednodušené API: +# Pouze DAM Period (PT15M) + agregace na hodiny průměrem. +# Důležité: OTE SOAP endpoint je HTTP a vyžaduje správnou SOAPAction. + +import asyncio +import json +import logging +import os +import xml.etree.ElementTree as ET # nosec B314 +from datetime import date, datetime, time, timedelta, timezone +from decimal import Decimal +from typing import Any, Dict, List, Optional, TypedDict, cast +from zoneinfo import ZoneInfo + +import aiohttp +from homeassistant.helpers.update_coordinator import UpdateFailed + +_LOGGER = logging.getLogger(__name__) + +# --- NAMESPACE & SOAP --- +NAMESPACE = ( + "http://www.ote-cr.cz/schema/service/public" # NOSONAR - XML namespace identifier +) +SOAPENV = ( + "http://schemas.xmlsoap.org/soap/envelope/" # NOSONAR - XML namespace identifier +) + +# OTE endpoint podporuje HTTPS (viz WSDL soap:address) - preferujeme zabezpečenou variantu +OTE_PUBLIC_URL = "https://www.ote-cr.cz/services/PublicDataService" + +SOAP_ACTIONS = { + "GetDamPricePeriodE": f"{NAMESPACE}/GetDamPricePeriodE", +} + + +def _soap_headers(action: str) -> Dict[str, str]: + return { + "Content-Type": "text/xml; charset=utf-8", + "SOAPAction": f'"{SOAP_ACTIONS[action]}"', + } + + +QUERY_DAM_PERIOD_E = """ + + + + + {start} + {end} + PT15M + {range_parts} + + + +""" + +# ---------- ČNB kurzy ---------- + + +class OTEFault(Exception): + pass + + +class InvalidDateError(Exception): + pass + + +class Rate(TypedDict): + validFor: str + order: int + country: str + currency: str + amount: int + currencyCode: str + rate: float + + +class Rates(TypedDict): + rates: List[Rate] + + +class RateError(TypedDict): + description: str + errorCode: str + happenedAt: str + endPoint: str + messageId: str + + +class CnbRate: + RATES_URL: str = "https://api.cnb.cz/cnbapi/exrates/daily" + + def __init__(self) -> None: + self._timezone: ZoneInfo = ZoneInfo("Europe/Prague") + self._rates: Dict[str, Decimal] = {} + self._last_checked_date: Optional[date] = None + + async def download_rates(self, day: date) -> Rates: + params = {"date": day.isoformat()} + async with aiohttp.ClientSession() as session: + async with session.get(self.RATES_URL, params=params) as response: + if response.status > 299: + if response.status == 400: + error = cast(RateError, await response.json()) + if error.get("errorCode") == "VALIDATION_ERROR": + raise InvalidDateError(f"Invalid date format: {day}") + raise RuntimeError( + f"Error {response.status} while downloading rates" + ) + text = cast(Rates, await response.json()) + return text + + async def get_day_rates(self, day: date) -> Dict[str, Decimal]: + rates: Dict[str, Decimal] = {"CZK": Decimal(1)} + cnb_rates: Optional[Rates] = None + for previous_day in range(0, 7): + try: + cnb_rates = await self.download_rates( + day - timedelta(days=previous_day) + ) + break + except InvalidDateError: + continue + if not cnb_rates: + raise RuntimeError("Could not download CNB rates for last 7 days") + for rate in cnb_rates["rates"]: + rates[rate["currencyCode"]] = Decimal(rate["rate"]) + return rates + + async def get_current_rates(self) -> Dict[str, Decimal]: + now = datetime.now(timezone.utc) + day = now.astimezone(self._timezone).date() + if self._last_checked_date is None or day != self._last_checked_date: + self._rates = await self.get_day_rates(day) + self._last_checked_date = day + return self._rates + + +# ---------- OTE API ---------- + + +class OteApi: + """Pouze DAM Period (PT15M) + agregace na hodiny průměrem.""" + + def __init__(self, cache_path: Optional[str] = None) -> None: + self._last_data: Dict[str, Any] = {} + self._cache_time: Optional[datetime] = None + self._eur_czk_rate: Optional[float] = None + self._rate_cache_time: Optional[datetime] = None + self.timezone = ZoneInfo("Europe/Prague") + self.utc = ZoneInfo("UTC") + self._cnb_rate = CnbRate() + self._cache_path: Optional[str] = cache_path + + async def close(self) -> None: + """Compatibility no-op for sensors calling close() on removal. + + OteApi does not keep a persistent aiohttp session, so there is nothing to close. + """ + await self.async_persist_cache() + + def _load_cached_spot_prices_sync(self) -> None: + if not self._cache_path: + return + try: + with open(self._cache_path, "r", encoding="utf-8") as cache_file: + payload = json.load(cache_file) + data = payload.get("last_data") + cache_time = payload.get("cache_time") + if data: + self._last_data = data + if cache_time: + self._cache_time = datetime.fromisoformat(cache_time) + _LOGGER.info("Loaded cached OTE spot prices (%s)", self._cache_path) + except FileNotFoundError: + return + except Exception as err: + _LOGGER.warning("Failed to load cached OTE spot prices: %s", err) + + async def async_load_cached_spot_prices(self) -> None: + """Load cache from disk without blocking the event loop.""" + try: + await asyncio.to_thread(self._load_cached_spot_prices_sync) + except Exception as err: + _LOGGER.debug("Async cache load failed: %s", err) + + def _persist_cache_sync(self) -> None: + if not self._cache_path or not self._last_data: + return + try: + directory = os.path.dirname(self._cache_path) + if directory and not os.path.exists(directory): + os.makedirs(directory, exist_ok=True) + payload = { + "last_data": self._last_data, + "cache_time": ( + self._cache_time.isoformat() if self._cache_time else None + ), + } + with open(self._cache_path, "w", encoding="utf-8") as cache_file: + json.dump(payload, cache_file) + except Exception as err: + _LOGGER.warning("Failed to persist OTE cache: %s", err) + + async def async_persist_cache(self) -> None: + """Persist cache to disk without blocking the event loop.""" + try: + await asyncio.to_thread(self._persist_cache_sync) + except Exception as err: + _LOGGER.debug("Async cache persist failed: %s", err) + + # ---------- interní utilitky ---------- + + def _has_data_for_date(self, target_date: date) -> bool: + """Kontroluje, zda cache obsahuje data pro daný den.""" + if not self._last_data: + return False + + prices = self._last_data.get("prices_czk_kwh", {}) + if not prices: + return False + + date_prefix = target_date.strftime("%Y-%m-%d") + return any(key.startswith(date_prefix) for key in prices.keys()) + + def _is_cache_valid(self) -> bool: + """Cache je validní pokud obsahuje požadovaná data. + + - Před 13h: musí mít data pro dnešek + - Po 13h: musí mít data pro dnešek A zítřek + """ + if not self._cache_time or not self._last_data: + return False + + now = datetime.now(self.timezone) + today = now.date() + + # Vždy musíme mít data pro dnešek + if not self._has_data_for_date(today): + return False + + # Po 13h musíme mít i data pro zítřek + if now.hour >= 13: + tomorrow = today + timedelta(days=1) + if not self._has_data_for_date(tomorrow): + return False + + return True + + def _should_fetch_new_data(self) -> bool: + """Rozhodne, jestli máme stahovat nová data z OTE. + + Stahujeme pokud cache není validní: + - Nemáme cache nebo nemá dnešní data + - Po 13h a nemáme zítřejší data + - Po půlnoci a nemáme data pro nový dnešek + """ + return not self._is_cache_valid() + + def _dam_period_query( + self, + start: date, + end: date, + start_period: Optional[int] = None, + end_period: Optional[int] = None, + ) -> str: + parts: List[str] = [] + if start_period is not None: + parts.append(f"{start_period}") + if end_period is not None: + parts.append(f"{end_period}") + return QUERY_DAM_PERIOD_E.format( + start=start.isoformat(), + end=end.isoformat(), + range_parts="".join(parts), + ) + + async def _download_soap(self, body_xml: str, action: str) -> str: + _LOGGER.debug(f"Sending SOAP request to {OTE_PUBLIC_URL} action={action}") + try: + timeout = aiohttp.ClientTimeout(total=30) + async with aiohttp.ClientSession(timeout=timeout) as session: + async with session.post( + OTE_PUBLIC_URL, data=body_xml, headers=_soap_headers(action) + ) as response: + text = await response.text() + _LOGGER.debug(f"SOAP Response status: {response.status}") + if response.status != 200: + raise aiohttp.ClientError( + f"HTTP {response.status}: {text[:500]}" + ) + return text + except aiohttp.ClientError as e: + raise OTEFault(f"Unable to download OTE data: {e}") + + def _parse_soap_response(self, soap_response: str) -> ET.Element: + try: + root = ET.fromstring(soap_response) # nosec B314 + except Exception as e: + if "Application is not available" in soap_response: + raise UpdateFailed("OTE Portal is currently not available!") from e + raise UpdateFailed("Failed to parse query response.") from e + + fault = root.find(f".//{{{SOAPENV}}}Fault") + if fault is not None: + faultstring = fault.find("faultstring") + error = faultstring.text if faultstring is not None else "Unknown error" + raise OTEFault(error) + + return root + + def _parse_period_interval(self, date_obj: date, period_interval: str) -> datetime: + """ + Parsuje PeriodInterval text (např. "23:45-24:00" nebo "02a:00-02a:15"). + + DST handling: + - "02a:00" = první výskyt hodiny 02:00 (před posunem času) + - "02b:00" = druhý výskyt hodiny 02:00 (po posunu času) + - Druhý výskyt posuneme o +1 minutu pro vizuální rozlišení v grafech + """ + # Formát: "HH:MM-HH:MM" nebo "HHa:MM-HHa:MM" nebo "HHb:MM-HHb:MM" + start_time = period_interval.split("-")[0].strip() + + # Detekce DST suffixu (a/b) + is_second_occurrence = "b" in start_time + + # Odstranění suffixu a parsování času + clean_time = start_time.replace("a", "").replace("b", "") + hour, minute = map(int, clean_time.split(":")) + + # Pro druhý výskyt (b) přidáme +1 minutu + if is_second_occurrence: + minute += 1 + # Overflow check (pokud je 59+1 = 60) + if minute >= 60: + minute = 0 + hour += 1 + + local_dt = datetime.combine(date_obj, time(hour, minute), tzinfo=self.timezone) + return local_dt.astimezone(self.utc) + + def _aggregate_quarter_to_hour( + self, qh_map: Dict[datetime, Decimal] + ) -> Dict[datetime, Decimal]: + buckets: Dict[datetime, List[Decimal]] = {} + for dt_utc, val in qh_map.items(): + hkey = dt_utc.replace(minute=0, second=0, microsecond=0) + buckets.setdefault(hkey, []).append(val) + # prostý průměr ze 4 kvartálů (nebo 3/5 v DST dnech) + return {k: (sum(v) / Decimal(len(v))) for k, v in buckets.items() if v} + + async def _get_dam_period_prices( + self, start_day: date, end_day: date + ) -> Dict[datetime, Decimal]: + """Stáhne DAM PT15M (EUR/kWh interně).""" + query = self._dam_period_query(start_day, end_day) + xml = await self._download_soap(query, action="GetDamPricePeriodE") + root = self._parse_soap_response(xml) + + result: Dict[datetime, Decimal] = {} + for item in root.findall(".//{http://www.ote-cr.cz/schema/service/public}Item"): + d_el = item.find("{http://www.ote-cr.cz/schema/service/public}Date") + pinterval_el = item.find( + "{http://www.ote-cr.cz/schema/service/public}PeriodInterval" + ) + pres_el = item.find( + "{http://www.ote-cr.cz/schema/service/public}PeriodResolution" + ) + price_el = item.find("{http://www.ote-cr.cz/schema/service/public}Price") + if not ( + d_el is not None + and pinterval_el is not None + and pres_el is not None + and price_el is not None + ): + continue + if not (d_el.text and pinterval_el.text and pres_el.text and price_el.text): + continue + if pres_el.text != "PT15M": + # bezpečnostně ignorujeme jiné periody + continue + + d = date.fromisoformat(d_el.text) + price_eur_mwh = Decimal(price_el.text) # EUR/MWh + + dt_utc = self._parse_period_interval(d, pinterval_el.text) + result[dt_utc] = price_eur_mwh / Decimal(1000) # EUR/kWh + + return result + + async def get_cnb_exchange_rate(self) -> Optional[float]: + if self._rate_cache_time and self._eur_czk_rate: + now = datetime.now() + if self._rate_cache_time.date() == now.date(): + return self._eur_czk_rate + + try: + _LOGGER.debug("Fetching CNB exchange rate from API") + rates = await self._cnb_rate.get_current_rates() + eur_rate = rates.get("EUR") + if eur_rate: + rate_float = float(eur_rate) + self._eur_czk_rate = rate_float + self._rate_cache_time = datetime.now() + _LOGGER.info(f"Successfully fetched CNB rate: {rate_float}") + return rate_float + _LOGGER.warning("EUR rate not found in CNB response") + except Exception as e: + _LOGGER.warning(f"Error fetching CNB rate: {e}") + + return None + + # ---------- veřejné API ---------- + + @staticmethod + def get_current_15min_interval(now: datetime) -> int: + """ + Vrátí index 15min intervalu (0-95) pro daný čas. + + Interval 0 = 00:00-00:15 + Interval 1 = 00:15-00:30 + ... + Interval 95 = 23:45-24:00 + """ + hour: int = now.hour + minute: int = now.minute + + # Zaokrouhlit dolů na nejbližších 15 min + quarter: int = minute // 15 + + return (hour * 4) + quarter + + @staticmethod + def get_15min_price_for_interval( + interval_index: int, + spot_data: Dict[str, Any], + target_date: Optional[date] = None, + ) -> Optional[float]: + """ + Vrátí spotovou cenu pro daný 15min interval z dat. + + Args: + interval_index: Index intervalu 0-95 + spot_data: Data z get_spot_prices() + target_date: Datum pro které hledat cenu (default = dnes) + + Returns: + Cena v CZK/kWh nebo None pokud není dostupná + """ + if not spot_data or "prices15m_czk_kwh" not in spot_data: + return None + + if target_date is None: + target_date = datetime.now().date() + + # Vypočítat hodinu a minutu z indexu + hour: int = interval_index // 4 + minute: int = (interval_index % 4) * 15 + + # Sestavit klíč pro vyhledání v datech + time_key: str = f"{target_date.strftime('%Y-%m-%d')}T{hour:02d}:{minute:02d}:00" + + prices_15m: Dict[str, float] = spot_data["prices15m_czk_kwh"] + return prices_15m.get(time_key) + + async def get_spot_prices( + self, date: Optional[datetime] = None, force_today_only: bool = False + ) -> Dict[str, Any]: + """ + Stáhne DAM PT15M, agreguje na hodiny průměrem. + - Před 13:00 (nebo force_today_only) bere jen dnešek. + - Po 13:00 bere včera/dnes/zítra. + """ + now = datetime.now(tz=self.timezone) + date = date or now + + cached = self._get_cached_spot_prices(now) + if cached is not None: + return cached + + _LOGGER.info( + "Cache missing required data - fetching from OTE (hour=%d)", + now.hour, + ) + + try: + data = await self._fetch_spot_data( + date=date, now=now, force_today_only=force_today_only + ) + if data: + await self._persist_spot_cache(data) + return data + except Exception as err: + _LOGGER.error( + "Error fetching spot prices from OTE: %s", err, exc_info=True + ) + return self._fallback_cached_prices() + + return {} + + def _get_cached_spot_prices(self, now: datetime) -> Optional[Dict[str, Any]]: + if not self._is_cache_valid(): + return None + _LOGGER.debug( + "Using cached spot prices (valid for today%s)", + " and tomorrow" if now.hour >= 13 else "", + ) + return self._last_data + + async def _fetch_spot_data( + self, + *, + date: datetime, + now: datetime, + force_today_only: bool, + ) -> Optional[Dict[str, Any]]: + eur_czk_rate = await self._resolve_eur_czk_rate() + start_date, end_date = self._resolve_date_range( + date, now, force_today_only + ) + qh_eur_kwh = await self._get_dam_period_prices(start_date, end_date) + if not qh_eur_kwh: + return self._fallback_cached_prices() + + data = await self._build_spot_data( + qh_eur_kwh, + eur_czk_rate, + date, + ) + if not data: + return self._fallback_cached_prices() + + if not force_today_only and now.hour >= 13: + data = await self._ensure_tomorrow_data( + data, date, qh_eur_kwh, eur_czk_rate + ) + return data + + async def _resolve_eur_czk_rate(self) -> float: + eur_czk_rate = await self.get_cnb_exchange_rate() + if not eur_czk_rate: + _LOGGER.warning("No CNB rate available, using default 25.0") + eur_czk_rate = 25.0 + return float(eur_czk_rate) + + def _resolve_date_range( + self, date_value: datetime, now: datetime, force_today_only: bool + ) -> tuple[date, date]: + if force_today_only or now.hour < 13: + start_date = date_value.date() + end_date = date_value.date() + _LOGGER.info( + "Fetching PT15M prices for today only: %s", start_date + ) + else: + start_date = date_value.date() - timedelta(days=1) + end_date = date_value.date() + timedelta(days=1) + _LOGGER.info( + "Fetching PT15M prices for %s to %s", start_date, end_date + ) + return start_date, end_date + + async def _build_spot_data( + self, + qh_eur_kwh: Dict[datetime, Decimal], + eur_czk_rate: float, + date_value: datetime, + ) -> Dict[str, Any]: + hourly_eur_kwh = self._aggregate_quarter_to_hour(qh_eur_kwh) + qh_czk_kwh: Dict[datetime, float] = { + dt: float(val) * eur_czk_rate for dt, val in qh_eur_kwh.items() + } + hourly_czk_kwh: Dict[datetime, float] = { + dt: float(val) * eur_czk_rate for dt, val in hourly_eur_kwh.items() + } + return await self._format_spot_data( + hourly_czk_kwh, + hourly_eur_kwh, + eur_czk_rate, + date_value, + qh_rates_czk=qh_czk_kwh, + qh_rates_eur=qh_eur_kwh, + ) + + def _fallback_cached_prices(self) -> Dict[str, Any]: + _LOGGER.warning("No DAM PT15M data found.") + if self._last_data: + _LOGGER.warning( + "OTE returned no data - using cached prices from %s", + self._cache_time.isoformat() if self._cache_time else "unknown", + ) + return self._last_data + return {} + + async def _ensure_tomorrow_data( + self, + data: Dict[str, Any], + date_value: datetime, + qh_eur_kwh: Dict[datetime, Decimal], + eur_czk_rate: float, + ) -> Dict[str, Any]: + tomorrow = date_value.date() + timedelta(days=1) + tomorrow_prefix = tomorrow.strftime("%Y-%m-%d") + prices = data.get("prices_czk_kwh", {}) + has_tomorrow = any(key.startswith(tomorrow_prefix) for key in prices.keys()) + if has_tomorrow: + return data + _LOGGER.warning( + "OTE data missing tomorrow after 13:00; retrying tomorrow-only fetch" + ) + try: + qh_eur_kwh_tomorrow = await self._get_dam_period_prices( + tomorrow, tomorrow + ) + if not qh_eur_kwh_tomorrow: + return data + qh_eur_kwh.update(qh_eur_kwh_tomorrow) + return await self._build_spot_data(qh_eur_kwh, eur_czk_rate, date_value) + except Exception as err: + _LOGGER.warning("Retry for tomorrow data failed: %s", err) + return data + + async def _persist_spot_cache(self, data: Dict[str, Any]) -> None: + self._last_data = data + self._cache_time = datetime.now(self.timezone) + await self.async_persist_cache() + + def _split_hourly_prices( + self, + hourly_czk: Dict[datetime, float], + hourly_eur_kwh: Dict[datetime, Decimal], + today: date, + tomorrow: date, + ) -> tuple[ + Dict[str, float], + Dict[str, float], + List[float], + List[float], + ]: + prices_czk_kwh: Dict[str, float] = {} + prices_eur_mwh: Dict[str, float] = {} + today_prices_czk: List[float] = [] + tomorrow_prices_czk: List[float] = [] + + for dt, price_czk in hourly_czk.items(): + local_dt = dt.astimezone(self.timezone) + price_date = local_dt.date() + time_key = f"{price_date.strftime('%Y-%m-%d')}T{local_dt.hour:02d}:00:00" + + prices_czk_kwh[time_key] = round(price_czk, 4) + prices_eur_mwh[time_key] = round(float(hourly_eur_kwh[dt]) * 1000.0, 2) + + if price_date == today: + today_prices_czk.append(price_czk) + elif price_date == tomorrow: + tomorrow_prices_czk.append(price_czk) + + return prices_czk_kwh, prices_eur_mwh, today_prices_czk, tomorrow_prices_czk + + @staticmethod + def _build_daily_stats(prices: List[float]) -> Optional[Dict[str, float]]: + if not prices: + return None + return { + "avg_czk": round(sum(prices) / len(prices), 4), + "min_czk": round(min(prices), 4), + "max_czk": round(max(prices), 4), + } + + def _add_quarter_hour_prices( + self, + result: Dict[str, Any], + qh_rates_czk: Dict[datetime, float], + qh_rates_eur: Dict[datetime, Decimal], + ) -> None: + qh_prices_czk_kwh: Dict[str, float] = {} + qh_prices_eur_mwh: Dict[str, float] = {} + + for dt, price_czk in qh_rates_czk.items(): + local_dt = dt.astimezone(self.timezone) + price_date = local_dt.date() + time_key = ( + f"{price_date.strftime('%Y-%m-%d')}T{local_dt.hour:02d}:{local_dt.minute:02d}:00" + ) + qh_prices_czk_kwh[time_key] = round(price_czk, 4) + qh_prices_eur_mwh[time_key] = round(float(qh_rates_eur[dt]) * 1000.0, 2) + + result["prices15m_czk_kwh"] = qh_prices_czk_kwh + result["prices15m_eur_mwh"] = qh_prices_eur_mwh + + async def _format_spot_data( + self, + hourly_czk: Dict[datetime, float], + hourly_eur_kwh: Dict[datetime, Decimal], + eur_czk_rate: float, + reference_date: datetime, + qh_rates_czk: Optional[Dict[datetime, float]] = None, + qh_rates_eur: Optional[Dict[datetime, Decimal]] = None, + ) -> Dict[str, Any]: + """Sestaví výsledek – hlavní výstup jsou hodinové ceny; 15m jsou přiloženy aditivně.""" + await asyncio.sleep(0) + today = reference_date.date() + tomorrow = today + timedelta(days=1) + + ( + prices_czk_kwh, + prices_eur_mwh, + today_prices_czk, + tomorrow_prices_czk, + ) = self._split_hourly_prices(hourly_czk, hourly_eur_kwh, today, tomorrow) + + if not prices_czk_kwh: + return {} + + all_prices_czk = today_prices_czk + tomorrow_prices_czk + + result: Dict[str, Any] = { + "date": today.strftime("%Y-%m-%d"), + "prices_czk_kwh": prices_czk_kwh, # agregované hodiny v CZK/kWh + "prices_eur_mwh": prices_eur_mwh, # agregované hodiny v EUR/MWh + "eur_czk_rate": eur_czk_rate, + "rate_source": "ČNB", + "average_price_czk": ( + round(sum(all_prices_czk) / len(all_prices_czk), 4) + if all_prices_czk + else None + ), + "min_price_czk": round(min(all_prices_czk), 4) if all_prices_czk else None, + "max_price_czk": round(max(all_prices_czk), 4) if all_prices_czk else None, + "source": "OTE SOAP API (DAM PT15M) + ČNB kurz", + "updated": datetime.now().isoformat(), + "hours_count": len(prices_czk_kwh), + "date_range": { + "from": (min(prices_czk_kwh.keys()) if prices_czk_kwh else None), + "to": (max(prices_czk_kwh.keys()) if prices_czk_kwh else None), + }, + "today_stats": self._build_daily_stats(today_prices_czk), + "tomorrow_stats": self._build_daily_stats(tomorrow_prices_czk), + } + + # aditivně přidáme 15m (můžeš klidně smazat, pokud nechceš) + if qh_rates_czk and qh_rates_eur: + self._add_quarter_hour_prices(result, qh_rates_czk, qh_rates_eur) + + return result diff --git a/custom_components/oig_cloud/api/planning_api.py b/custom_components/oig_cloud/api/planning_api.py new file mode 100644 index 00000000..5ff9951b --- /dev/null +++ b/custom_components/oig_cloud/api/planning_api.py @@ -0,0 +1,345 @@ +""" +OIG Cloud - Planning System REST API Endpoints. + +Provides API endpoints for accessing battery planning system data. + +Endpoints: +- /api/oig_cloud/plans//active - Get active plan +- /api/oig_cloud/plans//list - List all plans +- /api/oig_cloud/plans// - Get specific plan +- /api/oig_cloud/plans//create/manual - Create manual plan +- /api/oig_cloud/plans///activate - Activate plan +- /api/oig_cloud/plans///deactivate - Deactivate plan + +Author: OIG Cloud Integration +Date: 2025-11-02 +""" + +from __future__ import annotations + +import logging +from datetime import datetime + +from aiohttp import web +from homeassistant.core import HomeAssistant +from homeassistant.helpers.http import KEY_HASS, HomeAssistantView + +_LOGGER = logging.getLogger(__name__) + +PLANNING_SYSTEM_NOT_INITIALIZED = "Planning system not initialized" + +# API routes base +API_BASE = "/api/oig_cloud" + + +class OIGCloudActivePlanView(HomeAssistantView): + """API endpoint for active plan data.""" + + url = f"{API_BASE}/plans/{{box_id}}/active" + name = "api:oig_cloud:active_plan" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + Get currently active plan. + + Returns: + JSON with plan data or null if no active plan + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Get planning system from hass.data + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # Get active plan + plan_manager = planning_system.plan_manager + active_plan = plan_manager.get_active_plan() + + if not active_plan: + return web.json_response(None) + + return web.json_response(active_plan.to_dict()) + + except Exception as e: + _LOGGER.error(f"Error getting active plan: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudPlanListView(HomeAssistantView): + """API endpoint for listing plans.""" + + url = f"{API_BASE}/plans/{{box_id}}/list" + name = "api:oig_cloud:plan_list" + requires_auth = True + + async def get(self, request: web.Request, box_id: str) -> web.Response: + """ + List plans with optional filters. + + Query params: + ?type=automatic|manual|balancing|weather - Filter by type + ?status=simulated|active|deactivated - Filter by status + ?limit=N - Limit number of results (default: 100) + + Returns: + JSON array of plan objects + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Get query params + plan_type = request.query.get("type") + status = request.query.get("status") + limit = int(request.query.get("limit", 100)) + + # Get planning system + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # List plans + from ..planning.plan_manager import PlanStatus, PlanType + + plan_type_enum = None + if plan_type: + plan_type_enum = PlanType(plan_type) + + status_enum = None + if status: + status_enum = PlanStatus(status) + + plans = planning_system.plan_manager.list_plans( + plan_type=plan_type_enum, + status=status_enum, + limit=limit, + ) + + # Convert to dicts + plans_data = [plan.to_dict() for plan in plans] + + return web.json_response( + { + "plans": plans_data, + "count": len(plans_data), + "filters": { + "type": plan_type, + "status": status, + "limit": limit, + }, + } + ) + + except Exception as e: + _LOGGER.error(f"Error listing plans: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudPlanDetailView(HomeAssistantView): + """API endpoint for specific plan details.""" + + url = f"{API_BASE}/plans/{{box_id}}/{{plan_id}}" + name = "api:oig_cloud:plan_detail" + requires_auth = True + + async def get( + self, request: web.Request, box_id: str, plan_id: str + ) -> web.Response: + """ + Get specific plan by ID. + + Returns: + JSON with plan data or 404 if not found + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Get planning system + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # Get plan + plan = planning_system.plan_manager.get_plan(plan_id) + if not plan: + return web.json_response( + {"error": f"Plan {plan_id} not found"}, status=404 + ) + + return web.json_response(plan.to_dict()) + + except Exception as e: + _LOGGER.error(f"Error getting plan {plan_id}: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudCreateManualPlanView(HomeAssistantView): + """API endpoint for creating manual plan.""" + + url = f"{API_BASE}/plans/{{box_id}}/create/manual" + name = "api:oig_cloud:create_manual_plan" + requires_auth = True + + async def post(self, request: web.Request, box_id: str) -> web.Response: + """ + Create manual plan. + + POST body: + { + "target_soc_percent": 100.0, + "target_time": "2024-11-02T18:00:00", + "holding_hours": 6, // optional + "holding_mode": 2 // optional (HOME_III) + } + + Returns: + JSON with created plan + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Parse request body + data = await request.json() + + # Validate required fields + if "target_soc_percent" not in data or "target_time" not in data: + return web.json_response( + {"error": "target_soc_percent and target_time required"}, status=400 + ) + + # Get planning system + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # Parse parameters + target_soc = float(data["target_soc_percent"]) + target_time = datetime.fromisoformat(data["target_time"]) + holding_hours = data.get("holding_hours") + holding_mode = data.get("holding_mode") + + # Create plan + plan = planning_system.plan_manager.create_manual_plan( + target_soc_percent=target_soc, + target_time=target_time, + holding_hours=holding_hours, + holding_mode=holding_mode, + ) + + return web.json_response( + { + "success": True, + "plan": plan.to_dict(), + } + ) + + except Exception as e: + _LOGGER.error(f"Error creating manual plan: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudActivatePlanView(HomeAssistantView): + """API endpoint for activating plan.""" + + url = f"{API_BASE}/plans/{{box_id}}/{{plan_id}}/activate" + name = "api:oig_cloud:activate_plan" + requires_auth = True + + async def post( + self, request: web.Request, box_id: str, plan_id: str + ) -> web.Response: + """ + Activate plan. + + Returns: + JSON with activated plan + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Get planning system + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # Activate plan + plan = planning_system.plan_manager.activate_plan(plan_id) + + return web.json_response( + { + "success": True, + "plan": plan.to_dict(), + } + ) + + except Exception as e: + _LOGGER.error(f"Error activating plan {plan_id}: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class OIGCloudDeactivatePlanView(HomeAssistantView): + """API endpoint for deactivating plan.""" + + url = f"{API_BASE}/plans/{{box_id}}/{{plan_id}}/deactivate" + name = "api:oig_cloud:deactivate_plan" + requires_auth = True + + async def post( + self, request: web.Request, box_id: str, plan_id: str + ) -> web.Response: + """ + Deactivate plan. + + Returns: + JSON with deactivated plan + """ + hass: HomeAssistant = request.app[KEY_HASS] + + try: + # Get planning system + planning_system = hass.data.get("oig_cloud", {}).get("planning_system") + if not planning_system: + return web.json_response( + {"error": PLANNING_SYSTEM_NOT_INITIALIZED}, status=503 + ) + + # Deactivate plan + plan = planning_system.plan_manager.deactivate_plan(plan_id) + + return web.json_response( + { + "success": True, + "plan": plan.to_dict(), + } + ) + + except Exception as e: + _LOGGER.error(f"Error deactivating plan {plan_id}: {e}", exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +def setup_planning_api_views(hass: HomeAssistant) -> None: + """Register all planning API views. + + Call this from __init__.py during setup. + """ + hass.http.register_view(OIGCloudActivePlanView()) + hass.http.register_view(OIGCloudPlanListView()) + hass.http.register_view(OIGCloudPlanDetailView()) + hass.http.register_view(OIGCloudCreateManualPlanView()) + hass.http.register_view(OIGCloudActivatePlanView()) + hass.http.register_view(OIGCloudDeactivatePlanView()) + + _LOGGER.info("Planning API endpoints registered") diff --git a/custom_components/oig_cloud/battery_forecast/__init__.py b/custom_components/oig_cloud/battery_forecast/__init__.py new file mode 100644 index 00000000..577c196a --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/__init__.py @@ -0,0 +1,83 @@ +"""Battery forecast module - modular architecture for battery optimization. + +This module provides: +- Timeline building and SoC simulation +- HYBRID multi-mode optimization algorithm +- Balancing plan execution +- Mode management (HOME I/II/III/UPS) + +Architecture (modular layout): + battery_forecast/ + ├── __init__.py # This file - exports + ├── types.py # TypedDicts, Enums, Constants + ├── config.py # Planner configuration + ├── utils_common.py # Shared helpers + ├── task_utils.py # Async/task helpers + ├── data/ # Inputs (history, pricing, solar, profiles) + ├── planning/ # Planning + guard logic + ├── presentation/ # Detail tabs + UI payloads + ├── storage/ # Storage helpers for plans + ├── sensors/ # HA entity adapters + ├── physics/ # Physics simulation + ├── strategy/ # Optimization strategies + ├── timeline/ + ├── balancing/ # Balancing logic +""" + +from .physics import IntervalResult, IntervalSimulator +from .strategy import HybridResult, HybridStrategy +from .types import ( # Mode constants; TypedDicts; Constants; Helper functions + AC_CHARGING_DISABLED_MODES, + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, + CBB_MODE_SERVICE_MAP, + DEFAULT_CHARGE_RATE_KW, + DEFAULT_EFFICIENCY, + INTERVAL_MINUTES, + MIN_MODE_DURATION, + TRANSITION_COSTS, + BalancingPlan, + CBBMode, + ModeRecommendation, + OptimizationResult, + SpotPrice, + TimelineInterval, + get_mode_name, + is_charging_mode, +) + +__all__ = [ + # Mode constants + "CBBMode", + "CBB_MODE_HOME_I", + "CBB_MODE_HOME_II", + "CBB_MODE_HOME_III", + "CBB_MODE_HOME_UPS", + "CBB_MODE_NAMES", + "CBB_MODE_SERVICE_MAP", + "AC_CHARGING_DISABLED_MODES", + # TypedDicts + "TimelineInterval", + "SpotPrice", + "BalancingPlan", + "OptimizationResult", + "ModeRecommendation", + # Constants + "TRANSITION_COSTS", + "MIN_MODE_DURATION", + "DEFAULT_EFFICIENCY", + "DEFAULT_CHARGE_RATE_KW", + "INTERVAL_MINUTES", + # Helper functions + "get_mode_name", + "is_charging_mode", + # NEW: Physics layer + "IntervalSimulator", + "IntervalResult", + # NEW: Strategy layer + "HybridStrategy", + "HybridResult", +] diff --git a/custom_components/oig_cloud/battery_forecast/balancing/__init__.py b/custom_components/oig_cloud/battery_forecast/balancing/__init__.py new file mode 100644 index 00000000..c6fa7314 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/balancing/__init__.py @@ -0,0 +1,29 @@ +"""Balancing module - planning and execution.""" + +from .core import BalancingManager +from .executor import BalancingExecutor +from .helpers import get_balancing_plan, plan_balancing, update_balancing_plan_snapshot +from .plan import ( + BalancingInterval, + BalancingMode, + BalancingPlan, + BalancingPriority, + create_forced_plan, + create_natural_plan, + create_opportunistic_plan, +) + +__all__ = [ + "BalancingManager", + "BalancingExecutor", + "get_balancing_plan", + "plan_balancing", + "update_balancing_plan_snapshot", + "BalancingPlan", + "BalancingInterval", + "BalancingMode", + "BalancingPriority", + "create_natural_plan", + "create_opportunistic_plan", + "create_forced_plan", +] diff --git a/custom_components/oig_cloud/battery_forecast/balancing/core.py b/custom_components/oig_cloud/battery_forecast/balancing/core.py new file mode 100644 index 00000000..4b334f03 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/balancing/core.py @@ -0,0 +1,1462 @@ +"""Balancing Manager - Pure Planning Layer (NO PHYSICS). + +TODO 5: Implement Natural/Opportunistic/Forced balancing as mode planner. + +This module is ONLY responsible for: +1. Detecting when balancing is needed (7-day cycle) +2. Finding suitable charging windows +3. Creating BalancingPlan with mode overrides + +It does NOT: +- Simulate battery physics (that's in forecast._simulate_interval) +- Calculate costs (that's in HYBRID) +- Apply modes (that's in HYBRID reading this plan) +""" + +from __future__ import annotations + +import asyncio +import logging +import math +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Tuple + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +from ...const import HOME_UPS +from .plan import ( + BalancingInterval, + BalancingPlan, + create_forced_plan, + create_natural_plan, + create_opportunistic_plan, +) + +_LOGGER = logging.getLogger(__name__) + +# Constants per refactoring requirements +# These are now loaded from config_entry.options, keeping defaults here for reference: +# - balancing_holding_time: 3 hours (how long to hold at 100%) +# - balancing_cycle_days: 7 days (max days between forced balancing) +# - balancing_cooldown_hours: 24 hours (min time between opportunistic attempts) +# - balancing_soc_threshold: 80% (min SoC for opportunistic balancing) + +MIN_MODE_DURATION = 4 # Minimum 4 intervals (1 hour) per mode + + +class BalancingManager: + """Balancing manager - pure planning layer. + + Implements TODO 5: Natural/Opportunistic/Forced balancing logic. + + This is NOT a simulation engine - it only creates plans (mode schedules). + Forecast applies these plans during HYBRID calculation. + """ + + def __init__( + self, + hass: HomeAssistant, + box_id: str, + storage_path: str, + config_entry: Any, + ): + """Initialize balancing manager. + + Args: + hass: Home Assistant instance + box_id: Box ID for sensor access + storage_path: Path for storing balancing state + config_entry: Config entry for accessing balancing options + """ + self.hass = hass + self.box_id = box_id + self._config_entry = config_entry + self._logger = _LOGGER + + # Storage for balancing state + self._store = Store( + hass, + version=1, + key=f"oig_cloud_balancing_{box_id}", + private=True, + ) + + # Current state + self._last_balancing_ts: Optional[datetime] = None + self._active_plan: Optional[BalancingPlan] = None + self._last_plan_ts: Optional[datetime] = None + self._last_plan_mode: Optional[str] = None + self._forecast_sensor = None # Reference to forecast sensor for timeline access + self._coordinator = None # Reference to coordinator for refresh triggers + + # Cost tracking for frontend display + self._last_immediate_cost: Optional[float] = None + self._last_selected_cost: Optional[float] = None + self._last_cost_savings: Optional[float] = None + + # Configuration parameter helpers + def _get_int_option(self, primary_key: str, legacy_key: str, default: int) -> int: + opts = self._config_entry.options + if primary_key in opts: + return int(opts.get(primary_key) or default) + if legacy_key in opts: + return int(opts.get(legacy_key) or default) + return int(default) + + def _get_holding_time_hours(self) -> int: + """Get balancing holding time from config (default 3 hours).""" + return self._get_int_option( + "balancing_hold_hours", "balancing_holding_time", 3 + ) + + def _get_cycle_days(self) -> int: + """Get balancing cycle days from config (default 7 days).""" + return self._get_int_option( + "balancing_interval_days", "balancing_cycle_days", 7 + ) + + def _get_cooldown_hours(self) -> int: + """Get balancing cooldown hours from config (default ~70% of cycle, min 24h).""" + configured = self._config_entry.options.get("balancing_cooldown_hours") + if configured is not None: + try: + configured_val = float(configured) + except (TypeError, ValueError): + configured_val = None + if configured_val and configured_val > 0: + return int(configured_val) + + cycle_days = float(self._get_cycle_days()) + cooldown_hours = int(math.ceil(cycle_days * 24 * 0.7)) + return max(24, cooldown_hours) + + def _get_soc_threshold(self) -> int: + """Get SoC threshold for opportunistic balancing from config (default 80%).""" + return self._config_entry.options.get("balancing_soc_threshold", 80) + + def _get_cheap_window_percentile(self) -> int: + """Percentile threshold for 'cheap' windows (default 30%). + + Reuses the general cheap-window option so balancing aligns with planner behavior. + """ + try: + return int(self._config_entry.options.get("cheap_window_percentile", 30)) + except Exception: + return 30 + + def _get_opportunistic_price_threshold(self) -> float: + """Absolute price threshold for opportunistic balancing (CZK/kWh).""" + try: + value = float( + self._config_entry.options.get("balancing_opportunistic_threshold", 1.1) + ) + except (TypeError, ValueError): + return 1.1 + return value if value > 0 else 1.1 + + def _get_economic_price_threshold(self) -> float: + """Absolute price threshold for economic balancing (CZK/kWh).""" + try: + value = float( + self._config_entry.options.get("balancing_economic_threshold", 2.5) + ) + except (TypeError, ValueError): + return 2.5 + return value if value > 0 else 2.5 + + def _get_price_threshold_for_opportunistic(self) -> float: + """Select price threshold based on proximity to the cycle deadline.""" + cycle_days = self._get_cycle_days() + days_since_last = self._get_days_since_last_balancing() + economic_window_start = max(1, cycle_days - 2) + if days_since_last >= economic_window_start: + return self._get_economic_price_threshold() + return self._get_opportunistic_price_threshold() + + def _is_plan_cooldown_active(self, cooldown_hours: float) -> bool: + """Return True if we recently created a balancing plan.""" + if not self._last_plan_ts or cooldown_hours <= 0: + return False + delta = dt_util.now() - self._last_plan_ts + return delta.total_seconds() < (cooldown_hours * 3600.0) + + async def async_setup(self) -> None: + """Load balancing state from storage - MUST be fast and safe.""" + _LOGGER.info("BalancingManager: async_setup() start") + try: + # 1) Load state from storage (already async) + await self._load_state_safe() + + # 2) No periodic task registration here - done in __init__.py + # 3) No initial check here - done in __init__.py via async_call_later + + _LOGGER.info("BalancingManager: async_setup() done") + except Exception as err: + _LOGGER.error( + "BalancingManager: async_setup() failed: %s", err, exc_info=True + ) + raise + + async def _load_state_safe(self) -> None: + """Safely load state from storage.""" + try: + data = await self._store.async_load() + if data: + if data.get("last_balancing_ts"): + self._last_balancing_ts = datetime.fromisoformat( + data["last_balancing_ts"] + ) + if data.get("active_plan"): + self._active_plan = BalancingPlan.from_dict(data["active_plan"]) + if data.get("last_plan_ts"): + self._last_plan_ts = datetime.fromisoformat(data["last_plan_ts"]) + self._last_plan_mode = data.get("last_plan_mode") + + _LOGGER.info( + f"BalancingManager: State loaded. Last balancing: {self._last_balancing_ts}" + ) + except Exception as err: + _LOGGER.warning( + "BalancingManager: Failed to load state: %s (starting fresh)", err + ) + # Start with clean state if load fails + self._last_balancing_ts = None + self._active_plan = None + + async def _save_state(self) -> None: + """Save balancing state to storage.""" + data = { + "last_balancing_ts": ( + self._last_balancing_ts.isoformat() if self._last_balancing_ts else None + ), + "active_plan": self._active_plan.to_dict() if self._active_plan else None, + "last_plan_ts": self._last_plan_ts.isoformat() + if self._last_plan_ts + else None, + "last_plan_mode": self._last_plan_mode, + } + await self._store.async_save(data) + + # CRITICAL: Trigger coordinator refresh to recalculate timeline with new plan + # This ensures UI (detail tabs) shows updated HOME_UPS blocks for balancing + # Use coordinator instead of direct call to avoid blocking/deadlock + if self._coordinator: + _LOGGER.info( + "🔄 Requesting coordinator refresh after balancing state change" + ) + try: + # Schedule async refresh - non-blocking + await self._coordinator.async_request_refresh() + _LOGGER.info("✅ Coordinator refresh scheduled successfully") + except Exception as e: + _LOGGER.error(f"Failed to request coordinator refresh: {e}") + _LOGGER.info( + "✅ Forecast sensor and storage updated with balancing plan" + ) + + def set_forecast_sensor(self, forecast_sensor: Any) -> None: + """Set reference to forecast sensor for timeline access. + + Args: + forecast_sensor: OigCloudBatteryForecastSensor instance + """ + self._forecast_sensor = forecast_sensor + + def set_coordinator(self, coordinator: Any) -> None: + """Set reference to coordinator for refresh triggers. + + Args: + coordinator: DataUpdateCoordinator instance + """ + self._coordinator = coordinator + + async def check_balancing(self, force: bool = False) -> Optional[BalancingPlan]: + """Check if balancing is needed and create plan. + + Called periodically (e.g., every 30 minutes) by coordinator. + + Args: + force: If True, forces creation of balancing plan regardless of cooldown/cycle + + Returns: + BalancingPlan if created, None otherwise + """ + _LOGGER.debug(f"BalancingManager: check_balancing() CALLED (force={force})") + + if not self._forecast_sensor: + _LOGGER.warning("Forecast sensor not set, cannot check balancing") + return None + + if await self._handle_recent_balancing(): + return None + + active_plan = await self._handle_active_plan() + if active_plan is not None: + return active_plan + + if force: + _LOGGER.warning("🔴 FORCE MODE enabled - creating forced balancing plan!") + return await self._handle_forced_plan(manual_trigger=True) + + days_since_last = self._get_days_since_last_balancing() + cycle_days = self._get_cycle_days() + cooldown_hours = self._get_cooldown_hours() + + _LOGGER.info(f"📊 Balancing check: {days_since_last:.1f} days since last") + + natural_plan = await self._maybe_apply_natural_plan() + if natural_plan: + return natural_plan + + forced_plan = await self._maybe_force_plan(days_since_last, cycle_days) + if forced_plan: + return forced_plan + + opportunistic_plan = await self._maybe_opportunistic_plan(cooldown_hours) + if opportunistic_plan: + return opportunistic_plan + + _LOGGER.info("No balancing needed yet (%.1f days)", days_since_last) + return None + + async def _maybe_apply_natural_plan(self) -> Optional[BalancingPlan]: + _LOGGER.debug("Checking Natural balancing...") + natural_plan = await self._check_natural_balancing() + if not natural_plan: + return None + _LOGGER.info("✓ Natural balancing detected in HYBRID forecast") + completion_time = self._normalize_plan_datetime(natural_plan.holding_end) + await self._activate_plan(natural_plan, last_balancing_ts=completion_time) + return natural_plan + + async def _maybe_force_plan( + self, days_since_last: float, cycle_days: int + ) -> Optional[BalancingPlan]: + if days_since_last < cycle_days: + return None + forced_plan = await self._handle_forced_plan(manual_trigger=False) + if forced_plan: + _LOGGER.warning( + "🔴 FORCED balancing after %.1f days! Health priority over cost.", + days_since_last, + ) + return forced_plan + + async def _maybe_opportunistic_plan( + self, cooldown_hours: float + ) -> Optional[BalancingPlan]: + hours_since_last = self._get_hours_since_last_balancing() + if hours_since_last < cooldown_hours: + return None + _LOGGER.debug( + "Checking Opportunistic balancing (hours=%.1f)...", + hours_since_last, + ) + if self._is_plan_cooldown_active(cooldown_hours): + _LOGGER.info( + "Opportunistic balancing cooldown active (last_plan=%s, %sh)", + self._last_plan_mode or "unknown", + cooldown_hours, + ) + return None + + opportunistic_plan = await self._create_opportunistic_plan() + if opportunistic_plan: + _LOGGER.info( + "⚡ Opportunistic balancing planned after %.1f hours", + hours_since_last, + ) + await self._activate_plan(opportunistic_plan) + return opportunistic_plan + + async def _handle_recent_balancing(self) -> bool: + balancing_occurred, completion_time = await self._check_if_balancing_occurred() + if not balancing_occurred: + return False + _LOGGER.info( + "✅ Balancing completed at %s! Battery held at ≥99%% for %sh", + completion_time.strftime("%Y-%m-%d %H:%M") if completion_time else "n/a", + self._get_holding_time_hours(), + ) + self._last_balancing_ts = completion_time + self._active_plan = None + await self._save_state() + return True + + async def _handle_active_plan(self) -> Optional[BalancingPlan]: + if self._active_plan is None: + return None + + now = dt_util.now() + holding_start = self._normalize_plan_datetime( + self._active_plan.holding_start + ) + holding_end = self._normalize_plan_datetime(self._active_plan.holding_end) + if not holding_start or not holding_end: + return self._active_plan + + if holding_start <= now <= holding_end: + _LOGGER.info( + "🔋 Currently IN holding period (%s-%s). Keeping active plan.", + holding_start.strftime("%H:%M"), + holding_end.strftime("%H:%M"), + ) + return self._active_plan + + if holding_end < now: + _LOGGER.warning( + "⏰ Holding period ended at %s. Clearing expired plan.", + holding_end.strftime("%H:%M"), + ) + self._active_plan = None + await self._save_state() + return None + + _LOGGER.debug( + "🔒 Active plan already exists (%s), deadline at %s. Skipping new plan creation.", + self._active_plan.mode.name, + holding_start.strftime("%H:%M"), + ) + return self._active_plan + + async def _handle_forced_plan( + self, *, manual_trigger: bool + ) -> Optional[BalancingPlan]: + forced_plan = await self._create_forced_plan() + if not forced_plan: + _LOGGER.error("Failed to create forced balancing plan!") + return None + if manual_trigger: + _LOGGER.warning("🔴 FORCED balancing plan created (manual trigger)!") + await self._activate_plan(forced_plan) + return forced_plan + + async def _activate_plan( + self, + plan: BalancingPlan, + *, + last_balancing_ts: Optional[datetime] = None, + ) -> None: + self._active_plan = plan + self._last_plan_ts = dt_util.now() + self._last_plan_mode = plan.mode.value + if last_balancing_ts: + self._last_balancing_ts = last_balancing_ts + await self._save_state() + + def _normalize_plan_datetime(self, value: Any) -> Optional[datetime]: + if value is None: + return None + if isinstance(value, str): + value = datetime.fromisoformat(value) + if not isinstance(value, datetime): + return None + if value.tzinfo is None: + return dt_util.as_local(value) + return value + + def _get_days_since_last_balancing(self) -> int: + """Calculate days since last balancing.""" + if self._last_balancing_ts is None: + return 99 # Unknown + + delta = dt_util.now() - self._last_balancing_ts + return delta.days + + def _get_hours_since_last_balancing(self) -> float: + """Calculate hours since last successful balancing. + + Returns: + Hours as float (e.g., 25.5 hours) + """ + if not self._last_balancing_ts: + # Never balanced - assume cooldown passed + return float(self._get_cooldown_hours()) + + delta = dt_util.now() - self._last_balancing_ts + return delta.total_seconds() / 3600.0 + + async def _check_if_balancing_occurred(self) -> Tuple[bool, Optional[datetime]]: + """Check if battery balancing just completed. + + Scans battery SoC sensor history to detect continuous period at ≥99% + lasting for holding_time hours. + + Returns: + (balancing_occurred, completion_time) + - balancing_occurred: True if balancing detected + - completion_time: End of holding period (when to update last_balancing) + """ + holding_time_hours = self._get_holding_time_hours() + + # Get battery SoC sensor + battery_sensor_id = f"sensor.oig_{self.box_id}_batt_bat_c" + + # Determine how far back to scan + end_time = dt_util.now() + history_hours = self._resolve_history_hours(holding_time_hours) + start_time = end_time - timedelta(hours=history_hours) + + # Query HA statistics (longer retention than state history) + try: + hourly_stats = await self._load_soc_stats( + battery_sensor_id, start_time, end_time + ) + if not hourly_stats: + _LOGGER.debug( + "No battery SoC statistics available for balancing detection" + ) + return (False, None) + + completion_time = self._detect_balancing_completion( + hourly_stats, holding_time_hours, end_time + ) + if completion_time: + return (True, completion_time) + + except RuntimeError as e: + # Recorder DB nemusí být hned po startu připravená + if "database connection has not been established" in str(e).lower(): + _LOGGER.warning( + "Error checking balancing completion: Recorder not ready yet; skipping" + ) + return (False, None) + _LOGGER.error(f"Error checking balancing completion: {e}", exc_info=True) + except Exception as e: + _LOGGER.error(f"Error checking balancing completion: {e}", exc_info=True) + + return (False, None) + + def _resolve_history_hours(self, holding_time_hours: float) -> int: + if self._last_balancing_ts is None: + _LOGGER.info( + "No last balancing timestamp - scanning last 30 days for completion" + ) + return 30 * 24 + return int(holding_time_hours + 1) + + async def _load_soc_stats( + self, + battery_sensor_id: str, + start_time: datetime, + end_time: datetime, + ) -> Optional[List[Dict[str, Any]]]: + from homeassistant.components.recorder.statistics import ( + statistics_during_period, + ) + + stats = await self.hass.async_add_executor_job( + statistics_during_period, + self.hass, + start_time, + end_time, + {battery_sensor_id}, + "hour", + None, + {"mean", "max"}, + ) + if not stats or battery_sensor_id not in stats: + return None + return stats[battery_sensor_id] + + def _detect_balancing_completion( + self, + hourly_stats: List[Dict[str, Any]], + holding_time_hours: float, + now: datetime, + ) -> Optional[datetime]: + now_utc = dt_util.as_utc(now) if now.tzinfo else now.replace(tzinfo=dt_util.UTC) + state = self._init_completion_state() + + for stat in hourly_stats: + soc = stat.get("max") or stat.get("mean") + stat_time = self._normalize_stat_time(stat) + if stat_time is None: + continue + + if self._is_holding_soc(soc): + self._extend_holding_window(state, stat_time) + continue + + self._flush_holding_window(state, holding_time_hours) + + return self._finalize_completion_state(state, now_utc, holding_time_hours) + + @staticmethod + def _init_completion_state() -> Dict[str, Any]: + return { + "holding_start": None, + "last_hold_time": None, + "latest_completion": None, + "latest_completion_time": None, + } + + @staticmethod + def _is_holding_soc(soc: Any) -> bool: + return bool(soc and soc >= 99.0) + + @staticmethod + def _extend_holding_window(state: Dict[str, Any], stat_time: datetime) -> None: + if state["holding_start"] is None: + state["holding_start"] = stat_time + state["last_hold_time"] = stat_time + + def _flush_holding_window( + self, state: Dict[str, Any], holding_time_hours: float + ) -> None: + ( + state["holding_start"], + state["last_hold_time"], + state["latest_completion"], + state["latest_completion_time"], + ) = self._finalize_holding_window( + state["holding_start"], + state["last_hold_time"], + holding_time_hours, + state["latest_completion"], + state["latest_completion_time"], + ) + + def _finalize_completion_state( + self, + state: Dict[str, Any], + now_utc: datetime, + holding_time_hours: float, + ) -> Optional[datetime]: + holding_start = state["holding_start"] + last_hold_time = state["last_hold_time"] + latest_completion = state["latest_completion"] + + if holding_start is not None and last_hold_time is not None: + completion_time = max(now_utc, last_hold_time + timedelta(hours=1)) + holding_duration = completion_time - holding_start + if holding_duration >= timedelta(hours=holding_time_hours): + _LOGGER.info( + f"Detected ongoing balancing completion: " + f"SoC ≥99% since {holding_start.strftime('%Y-%m-%d %H:%M')} " + f"({holding_duration.total_seconds() / 3600:.1f}h)" + ) + return completion_time + + if latest_completion is not None: + start, completion_time, holding_duration = latest_completion + _LOGGER.info( + f"Detected last balancing completion: " + f"SoC ≥99% from {start.strftime('%Y-%m-%d %H:%M')} " + f"to {completion_time.strftime('%Y-%m-%d %H:%M')} " + f"({holding_duration.total_seconds() / 3600:.1f}h)" + ) + return completion_time + return None + + @staticmethod + def _normalize_stat_time(stat: Dict[str, Any]) -> Optional[datetime]: + stat_time = BalancingManager._parse_stat_time(stat.get("start")) + if stat_time is None: + return None + if stat_time.tzinfo: + return dt_util.as_utc(stat_time) + return stat_time.replace(tzinfo=dt_util.UTC) + + @staticmethod + def _finalize_holding_window( + holding_start: Optional[datetime], + last_hold_time: Optional[datetime], + holding_time_hours: float, + latest_completion: Optional[tuple[datetime, datetime, timedelta]], + latest_completion_time: Optional[datetime], + ) -> tuple[ + Optional[datetime], + Optional[datetime], + Optional[tuple[datetime, datetime, timedelta]], + Optional[datetime], + ]: + if holding_start is None or last_hold_time is None: + return None, None, latest_completion, latest_completion_time + + completion_time = last_hold_time + timedelta(hours=1) + holding_duration = completion_time - holding_start + if holding_duration >= timedelta(hours=holding_time_hours) and ( + latest_completion_time is None + or completion_time > latest_completion_time + ): + latest_completion = (holding_start, completion_time, holding_duration) + latest_completion_time = completion_time + + return None, None, latest_completion, latest_completion_time + + @staticmethod + def _parse_stat_time(value: Any) -> Optional[datetime]: + if value is None: + return None + if isinstance(value, datetime): + return value + if isinstance(value, (int, float)): + return datetime.fromtimestamp(value, tz=dt_util.UTC) + if isinstance(value, str): + return dt_util.parse_datetime(value) + return None + + async def _check_natural_balancing(self) -> Optional[BalancingPlan]: + """Check if HYBRID forecast naturally reaches 100% for 3h. + + TODO 5.1: Natural balancing detection. + + Scans HYBRID timeline to find 3-hour window at 100% SoC. + If found, creates natural plan (no mode overrides needed). + + Returns: + Natural BalancingPlan if 100% window found, None otherwise + """ + await asyncio.sleep(0) + _LOGGER.debug("_check_natural_balancing: Getting HYBRID timeline...") + timeline = self._get_hybrid_timeline() + if not timeline: + _LOGGER.warning("No HYBRID timeline available for natural balancing check") + return None + + _LOGGER.debug(f"Timeline has {len(timeline)} intervals") + + # Look for 12 consecutive intervals (3 hours) at >= 99% SoC + battery_capacity_kwh = self._get_battery_capacity_kwh() + if not battery_capacity_kwh: + return None + + threshold_kwh = battery_capacity_kwh * 0.99 # 99% = close enough to 100% + + window_start = None + window_count = 0 + + for interval in timeline: + soc_kwh = interval.get("battery_soc_kwh", 0) + + if soc_kwh >= threshold_kwh: + if window_start is None: + window_start = interval.get("timestamp") + window_count += 1 + + # Found 3-hour window? + if window_count >= 12: # 12 intervals = 3 hours + window_end_ts = interval.get("timestamp") + window_end = datetime.fromisoformat(window_end_ts) + + return create_natural_plan( + holding_start=datetime.fromisoformat(window_start), + holding_end=window_end, + last_balancing_ts=window_end, + ) + else: + # Reset window + window_start = None + window_count = 0 + + return None + + async def _create_opportunistic_plan(self) -> Optional[BalancingPlan]: + """Create opportunistic balancing plan. + + TODO 5.2: Opportunistic balancing. + + Checks if current SoC ≥ threshold, then calculates total cost for: + 1. Immediate balancing (charge NOW to 100%) + 2. Delayed balancing (wait for cheap window + charge then) + + Selects option with minimum total cost. + + Returns: + Opportunistic BalancingPlan or None if SoC below threshold + """ + # Check if SoC meets threshold + current_soc_percent = await self._get_current_soc_percent() + if current_soc_percent is None: + _LOGGER.warning("Cannot get current SoC for opportunistic balancing") + return None + + soc_threshold = self._get_soc_threshold() + if current_soc_percent < soc_threshold: + _LOGGER.debug( + f"SoC {current_soc_percent:.1f}% below threshold {soc_threshold}%, " + "no opportunistic balancing" + ) + return None + + # Cost optimization: evaluate immediate vs. all delayed windows + _LOGGER.info( + f"Evaluating balancing costs (SoC={current_soc_percent:.1f}%, " + f"threshold={soc_threshold}%)" + ) + + # 1. Calculate immediate balancing cost + immediate_cost = await self._calculate_immediate_balancing_cost( + current_soc_percent + ) + _LOGGER.info(f"Immediate balancing cost: {immediate_cost:.2f} CZK") + + # 2. Find all possible holding windows in next 48h + prices = await self._get_spot_prices_48h() + if not prices: + _LOGGER.warning("No spot prices available for cost optimization") + # Fall back to immediate + holding_start = datetime.now() + timedelta(hours=1) + holding_end = holding_start + timedelta( + hours=self._get_holding_time_hours() + ) + else: + holding_time_hours = self._get_holding_time_hours() + best_window_start, min_cost = await self._select_best_window( + prices=prices, + immediate_cost=immediate_cost, + holding_time_hours=holding_time_hours, + current_soc_percent=current_soc_percent, + ) + holding_start, holding_end = self._apply_opportunistic_costs( + best_window_start=best_window_start, + min_cost=min_cost, + immediate_cost=immediate_cost, + holding_time_hours=holding_time_hours, + ) + + # Plan UPS intervals before holding window + charging_intervals = self._plan_ups_charging( + target_time=holding_start, + current_soc_percent=current_soc_percent, + target_soc_percent=100.0, + ) + + # Add holding intervals (HOME_UPS during holding window to maintain 100%) + holding_intervals = self._create_holding_intervals( + holding_start, holding_end, mode=HOME_UPS + ) + + all_intervals = charging_intervals + holding_intervals + + return create_opportunistic_plan( + holding_start=holding_start, + holding_end=holding_end, + charging_intervals=all_intervals, + days_since_last=int(self._get_days_since_last_balancing()), + ) + + async def _select_best_window( + self, + *, + prices: Dict[datetime, float], + immediate_cost: float, + holding_time_hours: int, + current_soc_percent: float, + ) -> tuple[Optional[datetime], float]: + timestamps = sorted(prices.keys()) + intervals_needed = holding_time_hours * 4 + cheap_price_threshold = self._get_cheap_price_threshold(prices) + min_cost = immediate_cost + best_window_start: Optional[datetime] = None + now = datetime.now() + + for i in range(len(timestamps) - intervals_needed + 1): + window_start = timestamps[i] + if window_start <= now: + continue + + window_prices = [ + float(prices[timestamps[j]]) for j in range(i, i + intervals_needed) + ] + window_avg_price = sum(window_prices) / len(window_prices) + if window_avg_price > cheap_price_threshold: + continue + + delayed_cost = await self._calculate_total_balancing_cost( + window_start, current_soc_percent + ) + if delayed_cost < min_cost: + min_cost = delayed_cost + best_window_start = window_start + + return best_window_start, min_cost + + def _get_cheap_price_threshold(self, prices: Dict[datetime, float]) -> float: + all_price_values = [float(p) for p in prices.values()] + all_price_values.sort() + cheap_pct = self._get_cheap_window_percentile() + cheap_idx = int(len(all_price_values) * cheap_pct / 100) + if all_price_values and cheap_idx >= len(all_price_values): + cheap_idx = len(all_price_values) - 1 + cheap_price_threshold = ( + all_price_values[cheap_idx] if all_price_values else float("inf") + ) + price_threshold = self._get_price_threshold_for_opportunistic() + if price_threshold > 0: + cheap_price_threshold = min(cheap_price_threshold, price_threshold) + return cheap_price_threshold + + def _apply_opportunistic_costs( + self, + *, + best_window_start: Optional[datetime], + min_cost: float, + immediate_cost: float, + holding_time_hours: int, + ) -> tuple[datetime, datetime]: + if best_window_start is None: + _LOGGER.info( + f"✅ Immediate balancing selected: {immediate_cost:.2f} CZK " + f"(cheapest option)" + ) + holding_start = datetime.now() + timedelta(hours=1) + holding_end = holding_start + timedelta(hours=holding_time_hours) + self._last_immediate_cost = immediate_cost + self._last_selected_cost = immediate_cost + self._last_cost_savings = 0.0 + return holding_start, holding_end + + holding_start = best_window_start + holding_end = holding_start + timedelta(hours=holding_time_hours) + savings = immediate_cost - min_cost + _LOGGER.info( + f"⏰ Delayed balancing selected: {min_cost:.2f} CZK at " + f"{holding_start.strftime('%H:%M')} " + f"(vs immediate {immediate_cost:.2f} CZK, saving {savings:.2f} CZK)" + ) + self._last_immediate_cost = immediate_cost + self._last_selected_cost = min_cost + self._last_cost_savings = savings + return holding_start, holding_end + + async def _create_forced_plan(self) -> Optional[BalancingPlan]: + """Create forced balancing plan. + + TODO 5.3: Forced balancing. + + Emergency balancing after cycle_days. Charges ASAP regardless of cost. + Still calculates and logs costs for monitoring purposes. + + Returns: + Forced BalancingPlan (locked, critical priority) + """ + # Get current SoC + current_soc_percent = await self._get_current_soc_percent() + if current_soc_percent is None: + current_soc_percent = 50.0 # Assume worst case + + # Calculate costs for monitoring (even though we ignore them) + immediate_cost = await self._calculate_immediate_balancing_cost( + current_soc_percent + ) + + _LOGGER.warning( + f"🔴 FORCED balancing: Health priority! " + f"Cost={immediate_cost:.2f} CZK (not optimized)" + ) + + # Store costs for sensor + self._last_immediate_cost = immediate_cost + self._last_selected_cost = immediate_cost + self._last_cost_savings = 0.0 # No optimization in forced mode + + # Find next available holding window (ASAP) + now = datetime.now() + holding_time_hours = self._get_holding_time_hours() + + # Calculate required charging time based on current SoC + # Conservative estimate: 5% per 15min interval, round up + soc_needed = 100.0 - current_soc_percent + intervals_needed = max(1, int(soc_needed / 5.0) + 1) # +1 for safety margin + charging_hours = intervals_needed * 0.25 # 15min = 0.25h + + # Start holding when charging completes + # Round to next 15-min interval + minutes_from_now = int(charging_hours * 60) + minutes_rounded = ( + (minutes_from_now + 14) // 15 + ) * 15 # Round up to nearest 15min + holding_start = now + timedelta(minutes=minutes_rounded) + holding_end = holding_start + timedelta(hours=holding_time_hours) + + _LOGGER.info( + f"⚡ Forced balancing schedule: SoC {current_soc_percent:.1f}% → 100%, " + f"charging ~{charging_hours:.1f}h ({intervals_needed} intervals), " + f"holding {holding_start.strftime('%H:%M')}-{holding_end.strftime('%H:%M')}" + ) + + # Plan aggressive UPS charging NOW + charging_intervals = self._plan_ups_charging( + target_time=holding_start, + current_soc_percent=current_soc_percent, + target_soc_percent=100.0, + ) + + # Add holding intervals + holding_intervals = self._create_holding_intervals( + holding_start, holding_end, mode=HOME_UPS + ) + + all_intervals = charging_intervals + holding_intervals + + return create_forced_plan( + holding_start=holding_start, + holding_end=holding_end, + charging_intervals=all_intervals, + ) + + def _plan_ups_charging( + self, + target_time: datetime, + current_soc_percent: float, + target_soc_percent: float, + ) -> List[BalancingInterval]: + """Plan UPS charging intervals to reach target SoC. + + Simple heuristic: Assume ~3kW charging power (HOME_UPS limit). + Battery capacity ~15 kWh, so 5% ≈ 0.75 kWh, takes 15 min. + + Args: + target_time: When to reach target SoC + current_soc_percent: Current battery SoC (%) + target_soc_percent: Target SoC (typically 100%) + + Returns: + List of BalancingInterval with HOME_UPS mode + """ + soc_needed = target_soc_percent - current_soc_percent + if soc_needed <= 0: + return [] # Already at target + + # Conservative estimate: 5% per 15min interval + intervals_needed = max(1, int(soc_needed / 5.0)) + + # Respect MIN_MODE_DURATION + intervals_needed = max(intervals_needed, MIN_MODE_DURATION) + + # Start charging before target time + charging_start = target_time - timedelta(minutes=15 * intervals_needed) + + # Create UPS intervals + intervals = [] + current_ts = charging_start + for _ in range(intervals_needed): + intervals.append( + BalancingInterval( + ts=current_ts.isoformat(), + mode=HOME_UPS, + ) + ) + current_ts += timedelta(minutes=15) + + _LOGGER.debug( + f"Planned {intervals_needed} UPS intervals " + f"from {charging_start.strftime('%H:%M')} to {target_time.strftime('%H:%M')}" + ) + + return intervals + + def _create_holding_intervals( + self, start: datetime, end: datetime, mode: int = HOME_UPS + ) -> List[BalancingInterval]: + """Create intervals for holding window. + + Args: + start: Window start + end: Window end + mode: CBB mode to use (default HOME_UPS) + + Returns: + List of BalancingInterval + """ + intervals = [] + current_ts = start + + while current_ts < end: + intervals.append( + BalancingInterval( + ts=current_ts.isoformat(), + mode=mode, + ) + ) + current_ts += timedelta(minutes=15) + + return intervals + + async def _calculate_immediate_balancing_cost( + self, current_soc_percent: float + ) -> float: + """Calculate cost to balance immediately. + + Args: + current_soc_percent: Current battery SoC % + + Returns: + Cost in CZK to charge from current SoC to 100% + """ + # Get current spot price + prices = await self._get_spot_prices_48h() + if not prices: + _LOGGER.warning("No spot prices available for immediate cost calculation") + return 999.0 # High cost to prevent selection + + now = datetime.now() + # Find closest timestamp + current_price = None + min_delta = timedelta(hours=1) + for ts, price in prices.items(): + delta = abs(ts - now) + if delta < min_delta: + min_delta = delta + current_price = price + + if current_price is None: + _LOGGER.warning("Could not find current spot price") + return 999.0 + + # Calculate charge needed + battery_capacity_kwh = self._get_battery_capacity_kwh() + if not battery_capacity_kwh: + return 999.0 + + charge_needed_kwh = (100 - current_soc_percent) / 100 * battery_capacity_kwh + + # Price is already in CZK/kWh (includes all fees) + immediate_cost = charge_needed_kwh * current_price + + _LOGGER.debug( + f"Immediate cost: {charge_needed_kwh:.2f} kWh * {current_price:.4f} CZK/kWh " + f"= {immediate_cost:.2f} CZK" + ) + + return immediate_cost + + async def _calculate_total_balancing_cost( + self, window_start: datetime, current_soc_percent: float + ) -> float: + """Calculate total cost for delayed balancing. + + Total cost = waiting_cost + charging_cost + + Waiting cost includes: + - Battery discharge during wait (self-discharge rate ~0.05 kWh/h) + - Grid consumption during wait (from forecast timeline) + + Charging cost: + - Energy needed to reach 100% at window start + - Multiplied by average spot price during charging window + + Args: + window_start: When to start holding window + current_soc_percent: Current battery SoC % + + Returns: + Total cost in CZK (waiting + charging) + """ + now = datetime.now() + wait_duration = (window_start - now).total_seconds() / 3600.0 + if wait_duration <= 0: + return await self._calculate_immediate_balancing_cost(current_soc_percent) + + battery_capacity_kwh = self._get_battery_capacity_kwh() + if not battery_capacity_kwh: + return 999.0 + + battery_loss_kwh = self._estimate_battery_loss(wait_duration) + grid_consumption_kwh = self._estimate_grid_consumption(now, window_start) + + prices = await self._get_spot_prices_48h() + avg_wait_price = self._average_price_for_window(prices, now, window_start) + + total_wait_energy = battery_loss_kwh + grid_consumption_kwh + waiting_cost = total_wait_energy * avg_wait_price + + soc_at_window = self._estimate_soc_at_window( + current_soc_percent, battery_loss_kwh, battery_capacity_kwh + ) + charge_needed_kwh = (100 - soc_at_window) / 100 * battery_capacity_kwh + + holding_time_hours = self._get_holding_time_hours() + window_end = window_start + timedelta(hours=holding_time_hours) + avg_charging_price = self._average_price_for_window( + prices, window_start, window_end + ) + charging_cost = charge_needed_kwh * avg_charging_price + + total_cost = waiting_cost + charging_cost + + _LOGGER.debug( + f"Delayed cost for window {window_start.strftime('%H:%M')}: " + f"waiting={waiting_cost:.2f} CZK ({battery_loss_kwh:.2f} + {grid_consumption_kwh:.2f} kWh @ {avg_wait_price:.4f}), " + f"charging={charging_cost:.2f} CZK ({charge_needed_kwh:.2f} kWh @ {avg_charging_price:.4f}), " + f"total={total_cost:.2f} CZK" + ) + + return total_cost + + @staticmethod + def _estimate_battery_loss(wait_duration: float) -> float: + discharge_rate_kwh_per_hour = 0.05 + return wait_duration * discharge_rate_kwh_per_hour + + def _estimate_grid_consumption( + self, now: datetime, window_start: datetime + ) -> float: + if not (self._forecast_sensor and hasattr(self._forecast_sensor, "_timeline_data")): + return 0.0 + timeline = self._forecast_sensor._timeline_data + if not timeline: + return 0.0 + grid_consumption_kwh = 0.0 + for interval in timeline: + ts_str = ( + interval.get("timestamp") + if isinstance(interval, dict) + else getattr(interval, "ts", None) + ) + if not ts_str: + continue + try: + interval_time = datetime.fromisoformat(ts_str) + if now <= interval_time < window_start: + grid_consumption_kwh += self._extract_grid_kwh(interval) + except (ValueError, TypeError): + continue + return grid_consumption_kwh + + @staticmethod + def _extract_grid_kwh(interval: Any) -> float: + if isinstance(interval, dict): + return float( + interval.get( + "grid_consumption_kwh", + interval.get("grid_import", interval.get("grid_net", 0.0)), + ) + or 0.0 + ) + return float( + getattr( + interval, + "grid_consumption_kwh", + getattr(interval, "grid_import", getattr(interval, "grid_net", 0.0)), + ) + or 0.0 + ) + + @staticmethod + def _average_price_for_window( + prices: Dict[datetime, float], + start: datetime, + end: datetime, + fallback: float = 5.0, + ) -> float: + window_prices = [price for ts, price in prices.items() if start <= ts < end] + return sum(window_prices) / len(window_prices) if window_prices else fallback + + @staticmethod + def _estimate_soc_at_window( + current_soc_percent: float, + battery_loss_kwh: float, + battery_capacity_kwh: float, + ) -> float: + soc_loss_percent = (battery_loss_kwh / battery_capacity_kwh) * 100 + return max(0, current_soc_percent - soc_loss_percent) + + async def _find_cheap_holding_window( + self, + ) -> Optional[Tuple[datetime, datetime]]: + """Find cheapest 3-hour window in next 48 hours. + + Returns: + (holding_start, holding_end) or None + """ + # Get spot prices for next 48h + prices = await self._get_spot_prices_48h() + if not prices: + return None + + # Find 3-hour window with lowest average price + # Use 12 consecutive 15min intervals + min_avg_price = float("inf") + best_start = None + + timestamps = sorted(prices.keys()) + holding_time_hours = self._get_holding_time_hours() + intervals_needed = holding_time_hours * 4 # 4 intervals per hour (15min each) + + for i in range(len(timestamps) - intervals_needed + 1): + window_prices = [ + prices[timestamps[j]] for j in range(i, i + intervals_needed) + ] + avg_price = sum(window_prices) / len(window_prices) + + if avg_price < min_avg_price: + min_avg_price = avg_price + best_start = timestamps[i] + + if best_start: + best_end = best_start + timedelta(hours=holding_time_hours) + _LOGGER.debug( + f"Found cheap window: {best_start.strftime('%H:%M')} - " + f"{best_end.strftime('%H:%M')}, avg price {min_avg_price:.2f} CZK/kWh" + ) + return best_start, best_end + + return None + + def _get_hybrid_timeline(self) -> Optional[List[Dict[str, Any]]]: + """Get HYBRID timeline from forecast sensor. + + Returns: + Timeline list or None + """ + if not self._forecast_sensor: + return None + + # Access forecast sensor's HYBRID timeline + # This is the source of truth for what will actually happen + timeline = getattr(self._forecast_sensor, "_hybrid_timeline", None) + return timeline + + async def _get_current_soc_percent(self) -> Optional[float]: + """Get current battery SoC percentage. + + Returns: + SoC as percentage (0-100) or None + """ + await asyncio.sleep(0) + sensor_id = f"sensor.oig_{self.box_id}_batt_bat_c" + state = self.hass.states.get(sensor_id) + + if not state or state.state in ["unknown", "unavailable"]: + return None + + try: + return float(state.state) + except (ValueError, TypeError): + return None + + def _get_battery_capacity_kwh(self) -> Optional[float]: + """Get battery capacity in kWh. + + Returns: + Capacity in kWh or None + """ + sensor_id = f"sensor.oig_{self.box_id}_installed_battery_capacity_kwh" + state = self.hass.states.get(sensor_id) + + if not state or state.state in ["unknown", "unavailable"]: + _LOGGER.warning( + f"Battery capacity sensor {sensor_id} not available or unknown" + ) + return None + + try: + capacity_raw = float(state.state) + unit = (state.attributes or {}).get("unit_of_measurement") + capacity = capacity_raw + + # Some installations expose this sensor in Wh, not kWh. + if (unit and unit.lower() == "wh") or capacity_raw > 1000: + # Treat Wh inputs (explicit or obvious large values) as kWh. + capacity = capacity_raw / 1000.0 + + _LOGGER.debug( + f"Battery capacity: {capacity:.2f} kWh from {sensor_id} (raw={capacity_raw}, unit={unit})" + ) + return capacity + except (ValueError, TypeError): + return None + + async def _get_spot_prices_48h(self) -> Dict[datetime, float]: + """Get spot prices for next 48 hours from forecast sensor. + + Returns: + Dict mapping datetime to price (CZK/kWh) + """ + await asyncio.sleep(0) + if not self._forecast_sensor: + _LOGGER.warning("Forecast sensor not set, cannot get spot prices") + return {} + + # Get active timeline from forecast sensor (_timeline_data attribute) + timeline = getattr(self._forecast_sensor, "_timeline_data", None) + if not timeline: + _LOGGER.warning("No active timeline available for spot prices") + return {} + + prices = {} + for interval in timeline: + timestamp_str = interval.get("timestamp") or interval.get("time") + if not timestamp_str: + continue + + try: + ts = datetime.fromisoformat(timestamp_str) + spot_price = interval.get("spot_price_czk") or interval.get( + "spot_price" + ) + if spot_price is not None: + prices[ts] = float(spot_price) + except (ValueError, TypeError) as e: + _LOGGER.debug(f"Failed to parse interval timestamp/price: {e}") + continue + + _LOGGER.debug(f"Loaded {len(prices)} spot price intervals from forecast") + return prices + + def get_active_plan(self) -> Optional[BalancingPlan]: + """Get currently active balancing plan. + + Returns: + Active BalancingPlan or None + """ + return self._active_plan + + def get_sensor_state(self) -> str: + """Get sensor state string for HA balancing sensor. + + Returns: + State: idle | natural | opportunistic | forced | overdue | error + """ + if not self._active_plan: + days_since = self._get_days_since_last_balancing() + cycle_days = self._get_cycle_days() + if days_since >= cycle_days: + return "overdue" + return "idle" + + return self._active_plan.mode.value + + def get_sensor_attributes(self) -> Dict[str, Any]: + """Get sensor attributes for HA balancing sensor. + + Returns: + Attributes dict + """ + days_since = self._get_days_since_last_balancing() + + attrs = { + "last_balancing_ts": ( + self._last_balancing_ts.isoformat() if self._last_balancing_ts else None + ), + "days_since_last": round(days_since, 1), + "active_plan": None, + "holding_start": None, + "holding_end": None, + "reason": None, + "priority": None, + "locked": False, + # Cost information + "immediate_cost_czk": self._last_immediate_cost, + "selected_cost_czk": self._last_selected_cost, + "cost_savings_czk": self._last_cost_savings, + } + + if self._active_plan: + attrs.update( + { + "active_plan": self._active_plan.mode.value, + "holding_start": self._active_plan.holding_start, + "holding_end": self._active_plan.holding_end, + "reason": self._active_plan.reason, + "priority": self._active_plan.priority.value, + "locked": self._active_plan.locked, + } + ) + + return attrs diff --git a/custom_components/oig_cloud/battery_forecast/balancing/executor.py b/custom_components/oig_cloud/battery_forecast/balancing/executor.py new file mode 100644 index 00000000..4308b005 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/balancing/executor.py @@ -0,0 +1,484 @@ +"""Balancing executor - applies balancing plan to modes. + +This module handles the application of balancing plans to the +timeline modes, ensuring proper charging and holding periods. +""" + +import logging +from dataclasses import dataclass, field +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Set, Tuple + +from homeassistant.util import dt as dt_util + +from ..types import CBB_MODE_HOME_UPS, INTERVAL_MINUTES + +_LOGGER = logging.getLogger(__name__) + + +@dataclass +class BalancingResult: + """Result of balancing execution.""" + + modes: List[int] + charging_intervals: List[int] + holding_intervals: List[int] + total_ups_added: int + feasible: bool + expected_charging_kwh: float + required_charging_kwh: float + warning: Optional[str] = None + + +@dataclass +class BalancingPlanData: + """Parsed balancing plan data.""" + + holding_start: datetime + holding_end: datetime + preferred_intervals: Set[datetime] = field(default_factory=set) + reason: str = "unknown" + mode: str = "opportunistic" + target_soc_percent: float = 100.0 + + @property + def deadline(self) -> datetime: + """Charging deadline is the same as holding start.""" + return self.holding_start + + +class BalancingExecutor: + """Executes balancing plan by modifying modes list. + + Balancing has three phases: + 1. CHARGING: Before deadline, charge to 100% + 2. HOLDING: From holding_start to holding_end, maintain 100% + 3. NORMAL: After holding_end, return to normal optimization + + Example: + executor = BalancingExecutor( + max_capacity=15.36, + charge_rate_kw=2.8, + interval_minutes=15, + ) + + result = executor.apply_balancing( + modes=[0, 0, 0, ...], # Initial modes + spot_prices=[...], + current_battery=10.0, + balancing_plan={ + "holding_start": "2025-12-09T21:00:00", + "holding_end": "2025-12-10T00:00:00", + "charging_intervals": [...], + }, + ) + + if result.feasible: + modes = result.modes # Use modified modes + else: + print(f"Warning: {result.warning}") + """ + + def __init__( + self, + max_capacity: float, + charge_rate_kw: float = 2.8, + efficiency: float = 0.95, + interval_minutes: int = INTERVAL_MINUTES, + ) -> None: + """Initialize executor. + + Args: + max_capacity: Maximum battery capacity (kWh) + charge_rate_kw: AC charging rate (kW) + efficiency: AC/DC charging efficiency + interval_minutes: Interval length in minutes + """ + self.max_capacity = max_capacity + self.charge_rate_kw = charge_rate_kw + self.efficiency = efficiency + self.interval_minutes = interval_minutes + + # Derived values + self.interval_hours = interval_minutes / 60.0 + self.max_charge_per_interval = charge_rate_kw * self.interval_hours * efficiency + + def parse_plan( + self, + plan: Dict[str, Any], + ) -> Optional[BalancingPlanData]: + """Parse raw balancing plan dict into data object. + + Args: + plan: Raw balancing plan dict + + Returns: + BalancingPlanData or None if parsing fails + """ + try: + holding_start = _parse_datetime(plan.get("holding_start")) + holding_end = _parse_datetime(plan.get("holding_end")) + if not holding_start or not holding_end: + _LOGGER.warning("Balancing plan missing holding_start or holding_end") + return None + + preferred = _parse_preferred_intervals( + plan.get("charging_intervals", []) + ) + + return BalancingPlanData( + holding_start=holding_start, + holding_end=holding_end, + preferred_intervals=preferred, + reason=plan.get("reason", "unknown"), + mode=plan.get("mode", "opportunistic"), + target_soc_percent=plan.get("target_soc_percent", 100.0), + ) + + except (ValueError, TypeError, KeyError) as e: + _LOGGER.error(f"Failed to parse balancing plan: {e}") + return None + + def apply_balancing( + self, + modes: List[int], + spot_prices: List[Dict[str, Any]], + current_battery: float, + balancing_plan: Dict[str, Any], + ) -> BalancingResult: + """Apply balancing plan to modes list. + + Args: + modes: List of modes to modify (will be modified in place) + spot_prices: List of spot price dicts with 'time' and 'price' + current_battery: Current battery level (kWh) + balancing_plan: Balancing plan dict + + Returns: + BalancingResult with modified modes and metrics + """ + plan = self.parse_plan(balancing_plan) + + if not plan: + return BalancingResult( + modes=modes, + charging_intervals=[], + holding_intervals=[], + total_ups_added=0, + feasible=True, + expected_charging_kwh=0, + required_charging_kwh=0, + warning="Could not parse balancing plan", + ) + + n = len(modes) + charging_indices: List[int] = [] + holding_indices: List[int] = [] + + deadline_idx, holding_start_idx, holding_end_idx = _find_holding_indices( + spot_prices, plan.holding_start, plan.holding_end, n + ) + + _LOGGER.info( + "🔋 Balancing executor: deadline_idx=%s, holding=%s-%s", + deadline_idx, + holding_start_idx, + holding_end_idx, + ) + + preferred_used = _apply_preferred_intervals( + modes, + spot_prices, + plan.preferred_intervals, + deadline_idx, + charging_indices, + ) + + required_kwh = max(0, self.max_capacity - current_battery) + remaining_kwh = _remaining_charge_kwh( + required_kwh, preferred_used, self.max_charge_per_interval + ) + + if remaining_kwh > 0.1: + _apply_cheapest_intervals( + modes, + spot_prices, + deadline_idx, + remaining_kwh, + self.max_charge_per_interval, + charging_indices, + ) + + _apply_holding_period( + modes, + holding_start_idx, + holding_end_idx, + n, + holding_indices, + ) + + result = _build_balancing_result( + modes=modes, + charging_indices=charging_indices, + holding_indices=holding_indices, + max_charge_per_interval=self.max_charge_per_interval, + required_kwh=required_kwh, + preferred_used=preferred_used, + ) + + return result + + def get_balancing_indices( + self, + spot_prices: List[Dict[str, Any]], + balancing_plan: Dict[str, Any], + ) -> Tuple[Set[int], Set[int]]: + """Get indices for balancing (charging + holding). + + Args: + spot_prices: List of spot price dicts + balancing_plan: Balancing plan dict + + Returns: + Tuple of (charging_indices, holding_indices) + """ + plan = self.parse_plan(balancing_plan) + + if not plan: + return set(), set() + + charging = set() + holding = set() + + for i, sp in enumerate(spot_prices): + try: + ts = datetime.fromisoformat(sp["time"]) + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + ts_end = ts + timedelta(minutes=self.interval_minutes) + + # Charging: before deadline + if ts < plan.deadline: + charging.add(i) + + # Holding: overlaps holding period + if ts < plan.holding_end and ts_end > plan.holding_start: + holding.add(i) + except (ValueError, TypeError): + continue + + return charging, holding + + def estimate_balancing_cost( + self, + spot_prices: List[Dict[str, Any]], + charging_indices: List[int], + holding_indices: List[int], + consumption_per_interval: float = 0.125, + ) -> Tuple[float, float]: + """Estimate cost of balancing. + + Args: + spot_prices: List of spot price dicts + charging_indices: Indices where charging happens + holding_indices: Indices in holding period + consumption_per_interval: Average consumption kWh + + Returns: + Tuple of (charging_cost_czk, holding_cost_czk) + """ + charging_cost = 0.0 + holding_cost = 0.0 + + for idx in charging_indices: + if idx < len(spot_prices): + price = spot_prices[idx].get("price", 0) + charging_cost += self.max_charge_per_interval * price + + for idx in holding_indices: + if idx < len(spot_prices): + price = spot_prices[idx].get("price", 0) + # During holding, consumption comes from grid + holding_cost += consumption_per_interval * price + + return round(charging_cost, 2), round(holding_cost, 2) + + +def _parse_datetime(value: Any) -> Optional[datetime]: + if not value: + return None + if isinstance(value, str): + dt_val = datetime.fromisoformat(value) + else: + dt_val = value + if not isinstance(dt_val, datetime): + return None + if dt_val.tzinfo is None: + dt_val = dt_util.as_local(dt_val) + return dt_val + + +def _parse_preferred_intervals( + intervals: List[Any], +) -> Set[datetime]: + preferred: Set[datetime] = set() + for iv in intervals: + try: + if isinstance(iv, str): + ts = datetime.fromisoformat(iv) + elif isinstance(iv, dict): + ts = datetime.fromisoformat(iv.get("timestamp", "")) + else: + continue + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + preferred.add(ts) + except (ValueError, TypeError): + continue + return preferred + + +def _find_holding_indices( + spot_prices: List[Dict[str, Any]], + holding_start: datetime, + holding_end: datetime, + n: int, +) -> tuple[int, int, int]: + deadline_idx = n + holding_start_idx = n + holding_end_idx = n + for i, sp in enumerate(spot_prices): + try: + ts = datetime.fromisoformat(sp["time"]) + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + if ts >= holding_start and holding_start_idx == n: + holding_start_idx = i + deadline_idx = i + if ts >= holding_end and holding_end_idx == n: + holding_end_idx = i + break + except (ValueError, TypeError): + continue + return deadline_idx, holding_start_idx, holding_end_idx + + +def _apply_preferred_intervals( + modes: List[int], + spot_prices: List[Dict[str, Any]], + preferred: Set[datetime], + deadline_idx: int, + charging_indices: List[int], +) -> int: + preferred_used = 0 + for i, sp in enumerate(spot_prices): + if i >= deadline_idx: + break + ts = _safe_timestamp(sp.get("time")) + if not ts: + continue + if ts in preferred: + modes[i] = CBB_MODE_HOME_UPS + charging_indices.append(i) + preferred_used += 1 + return preferred_used + + +def _safe_timestamp(value: Any) -> Optional[datetime]: + try: + if not value: + return None + ts = datetime.fromisoformat(value) + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + return ts + except (ValueError, TypeError): + return None + + +def _remaining_charge_kwh( + required_kwh: float, preferred_used: int, max_charge_per_interval: float +) -> float: + charging_from_preferred = preferred_used * max_charge_per_interval + return required_kwh - charging_from_preferred + + +def _apply_cheapest_intervals( + modes: List[int], + spot_prices: List[Dict[str, Any]], + deadline_idx: int, + remaining_kwh: float, + max_charge_per_interval: float, + charging_indices: List[int], +) -> None: + candidates = _collect_cheapest_candidates(modes, spot_prices, deadline_idx) + candidates.sort(key=lambda x: x["price"]) + intervals_needed = int(remaining_kwh / max_charge_per_interval) + 1 + for cand in candidates[:intervals_needed]: + idx = cand["index"] + modes[idx] = CBB_MODE_HOME_UPS + charging_indices.append(idx) + + +def _collect_cheapest_candidates( + modes: List[int], spot_prices: List[Dict[str, Any]], deadline_idx: int +) -> List[Dict[str, Any]]: + candidates = [] + for i in range(deadline_idx): + if modes[i] == CBB_MODE_HOME_UPS: + continue + candidates.append({"index": i, "price": spot_prices[i].get("price", 0)}) + return candidates + + +def _apply_holding_period( + modes: List[int], + holding_start_idx: int, + holding_end_idx: int, + n: int, + holding_indices: List[int], +) -> None: + for i in range(holding_start_idx, min(holding_end_idx, n)): + modes[i] = CBB_MODE_HOME_UPS + holding_indices.append(i) + + +def _build_balancing_result( + *, + modes: List[int], + charging_indices: List[int], + holding_indices: List[int], + max_charge_per_interval: float, + required_kwh: float, + preferred_used: int, +) -> BalancingResult: + total_charging_intervals = len(set(charging_indices)) + expected_kwh = total_charging_intervals * max_charge_per_interval + feasible = expected_kwh >= required_kwh * 0.95 + warning = None + if not feasible: + warning = ( + f"May not reach 100% by deadline! " + f"Can charge {expected_kwh:.1f} kWh, need {required_kwh:.1f} kWh" + ) + _LOGGER.warning("⚠️ BALANCING WARNING: %s", warning) + + total_ups = len(set(charging_indices + holding_indices)) + _LOGGER.info( + "⚡ BALANCING applied: preferred=%s, additional=%s, holding=%s, total_UPS=%s", + preferred_used, + len(charging_indices) - preferred_used, + len(holding_indices), + total_ups, + ) + + return BalancingResult( + modes=modes, + charging_intervals=sorted(set(charging_indices)), + holding_intervals=sorted(set(holding_indices)), + total_ups_added=total_ups, + feasible=feasible, + expected_charging_kwh=expected_kwh, + required_charging_kwh=required_kwh, + warning=warning, + ) diff --git a/custom_components/oig_cloud/battery_forecast/balancing/helpers.py b/custom_components/oig_cloud/battery_forecast/balancing/helpers.py new file mode 100644 index 00000000..59a05906 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/balancing/helpers.py @@ -0,0 +1,103 @@ +"""Balancing helpers for battery forecast sensor.""" + +from __future__ import annotations + +import asyncio +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +_LOGGER = logging.getLogger(__name__) + + +def update_balancing_plan_snapshot(sensor: Any, plan: Optional[Dict[str, Any]]) -> None: + """Keep BalancingManager plan snapshot in sync with legacy plan handling.""" + + def _is_balancing_requester(requester: Optional[str]) -> bool: + if not requester: + return False + return requester.lower() in {"balancingmanager", "balancing_manager"} + + sensor._balancing_plan_snapshot = plan + + if plan: + if not sensor._active_charging_plan or _is_balancing_requester( + sensor._active_charging_plan.get("requester") + ): + sensor._active_charging_plan = plan + else: + if sensor._active_charging_plan and _is_balancing_requester( + sensor._active_charging_plan.get("requester") + ): + sensor._active_charging_plan = None + + +def get_balancing_plan(sensor: Any) -> Optional[Dict[str, Any]]: + """Get balancing plan from battery_balancing sensor.""" + if not sensor._hass: + return None + + sensor_id = f"sensor.oig_{sensor._box_id}_battery_balancing" + state = sensor._hass.states.get(sensor_id) + + if not state or not state.attributes: + _LOGGER.debug("Battery balancing sensor %s not available", sensor_id) + return None + + planned = state.attributes.get("planned") + if not planned: + _LOGGER.debug("No balancing window planned") + return None + + _LOGGER.info( + "Balancing plan: %s from %s to %s", + planned.get("reason"), + planned.get("holding_start"), + planned.get("holding_end"), + ) + + return planned + + +async def plan_balancing( + sensor: Any, + requested_start: datetime, + requested_end: datetime, + target_soc: float, + mode: str, +) -> Dict[str, Any]: + """Compute balancing plan for requested window.""" + await asyncio.sleep(0) + _ = sensor + try: + _LOGGER.info( + "Balancing request: %s window=%s-%s target=%s%%", + mode, + requested_start.strftime("%H:%M"), + requested_end.strftime("%H:%M"), + target_soc, + ) + + charging_intervals = [] + current = requested_start + while current < requested_end: + charging_intervals.append(current.isoformat()) + current += timedelta(minutes=15) + + return { + "can_do": True, + "charging_intervals": charging_intervals, + "actual_holding_start": requested_start.isoformat(), + "actual_holding_end": requested_end.isoformat(), + "reason": "Temporary implementation - always accepts", + } + + except Exception as err: + _LOGGER.error("Failed to plan balancing: %s", err, exc_info=True) + return { + "can_do": False, + "charging_intervals": [], + "actual_holding_start": None, + "actual_holding_end": None, + "reason": f"Error: {err}", + } diff --git a/custom_components/oig_cloud/battery_forecast/balancing/plan.py b/custom_components/oig_cloud/battery_forecast/balancing/plan.py new file mode 100644 index 00000000..dc7c3b0b --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/balancing/plan.py @@ -0,0 +1,224 @@ +"""Balancing Plan Structure - unified format for balancing plans. + +TODO 2: Define balancing plan structure per refactoring requirements. +""" + +from __future__ import annotations + +import json +from dataclasses import asdict, dataclass, field +from datetime import datetime +from enum import Enum +from typing import Dict, List, Optional + + +class BalancingMode(str, Enum): + """Balancing plan mode.""" + + NATURAL = "natural" # 100% reached naturally via HYBRID + OPPORTUNISTIC = "opportunistic" # Planned charging to reach 100% (5-6 days) + FORCED = "forced" # Emergency charging to 100% (7+ days) + + +class BalancingPriority(str, Enum): + """Balancing plan priority.""" + + NORMAL = "normal" # Natural or opportunistic + HIGH = "high" # Opportunistic nearing deadline + CRITICAL = "critical" # Forced balancing + + +@dataclass +class BalancingInterval: + """Single interval with explicit mode in balancing plan. + + This is applied to HYBRID timeline to override automatic mode selection. + Typically used to insert HOME_UPS intervals for charging to 100%. + """ + + ts: str # ISO datetime + mode: int # CBB mode: 0=HOME_I, 1=HOME_II, 2=HOME_III, 3=HOME_UPS + + def to_dict(self) -> Dict: + """Convert to dict.""" + return asdict(self) + + @classmethod + def from_dict(cls, data: Dict) -> BalancingInterval: + """Create from dict.""" + return cls(ts=data["ts"], mode=data["mode"]) + + +@dataclass +class BalancingPlan: + """Unified balancing plan format per TODO 2. + + This structure is: + - Generated by balancing logic (balancing_manager.py) + - Read by forecast during HYBRID calculation + - Displayed in HA sensor attributes + + The plan defines which CBB modes to use in specific time intervals + to achieve battery balancing (100% SoC for 3 hours every 7 days). + """ + + # Plan metadata + mode: BalancingMode # natural | opportunistic | forced + created_at: str # ISO datetime when plan was created + reason: str # Human-readable explanation + + # Holding window (3h @ 100%) + holding_start: str # ISO datetime when 100% should be reached + holding_end: str # ISO datetime when 100% holding ends (start + 3h) + + # Mode override intervals (typically UPS charging before holding) + intervals: List[BalancingInterval] = field(default_factory=list) + + # Plan status + locked: bool = False # True for forced balancing (cannot be overridden) + priority: BalancingPriority = BalancingPriority.NORMAL + active: bool = True # False if plan is cancelled/superseded + + # Tracking + last_balancing_ts: Optional[str] = None # ISO datetime of last successful balancing + + def to_dict(self) -> Dict: + """Convert to dict for JSON serialization.""" + return { + "mode": self.mode.value, + "created_at": self.created_at, + "reason": self.reason, + "holding_start": self.holding_start, + "holding_end": self.holding_end, + "intervals": [i.to_dict() for i in self.intervals], + "locked": self.locked, + "priority": self.priority.value, + "active": self.active, + "last_balancing_ts": self.last_balancing_ts, + } + + def to_json(self) -> str: + """Serialize to JSON string.""" + return json.dumps(self.to_dict(), indent=2) + + @classmethod + def from_dict(cls, data: Dict) -> BalancingPlan: + """Create from dict.""" + from datetime import datetime + + # Convert ISO strings to datetime objects + def parse_datetime(value): + if isinstance(value, str): + return datetime.fromisoformat(value) + return value + + return cls( + mode=BalancingMode(data["mode"]), + created_at=parse_datetime(data["created_at"]), + reason=data["reason"], + holding_start=parse_datetime(data["holding_start"]), + holding_end=parse_datetime(data["holding_end"]), + intervals=[ + BalancingInterval.from_dict(i) for i in data.get("intervals", []) + ], + locked=data.get("locked", False), + priority=BalancingPriority(data.get("priority", "normal")), + active=data.get("active", True), + last_balancing_ts=( + parse_datetime(data.get("last_balancing_ts")) + if data.get("last_balancing_ts") + else None + ), + ) + + @classmethod + def from_json(cls, json_str: str) -> BalancingPlan: + """Deserialize from JSON string.""" + return cls.from_dict(json.loads(json_str)) + + +def create_natural_plan( + holding_start: datetime, holding_end: datetime, last_balancing_ts: datetime +) -> BalancingPlan: + """Create natural balancing plan (no intervention needed). + + Args: + holding_start: When 100% will be reached naturally + holding_end: When 100% holding ends (start + 3h) + last_balancing_ts: Timestamp to record successful balancing + + Returns: + BalancingPlan with mode=natural, no override intervals + """ + return BalancingPlan( + mode=BalancingMode.NATURAL, + created_at=datetime.now().isoformat(), + reason="100% SoC reached naturally via HYBRID forecast", + holding_start=holding_start.isoformat(), + holding_end=holding_end.isoformat(), + intervals=[], # No overrides needed + locked=False, + priority=BalancingPriority.NORMAL, + active=True, + last_balancing_ts=last_balancing_ts.isoformat(), + ) + + +def create_opportunistic_plan( + holding_start: datetime, + holding_end: datetime, + charging_intervals: List[BalancingInterval], + days_since_last: int, +) -> BalancingPlan: + """Create opportunistic balancing plan (proactive charging). + + Args: + holding_start: When 100% should be reached + holding_end: When 100% holding ends (start + 3h) + charging_intervals: UPS intervals to charge before holding + days_since_last: Days since last balancing (typically 5-6) + + Returns: + BalancingPlan with mode=opportunistic, UPS override intervals + """ + return BalancingPlan( + mode=BalancingMode.OPPORTUNISTIC, + created_at=datetime.now().isoformat(), + reason=f"Proactive balancing after {days_since_last} days, using cheap hours", + holding_start=holding_start.isoformat(), + holding_end=holding_end.isoformat(), + intervals=charging_intervals, + locked=False, + priority=( + BalancingPriority.HIGH if days_since_last >= 6 else BalancingPriority.NORMAL + ), + active=True, + ) + + +def create_forced_plan( + holding_start: datetime, + holding_end: datetime, + charging_intervals: List[BalancingInterval], +) -> BalancingPlan: + """Create forced balancing plan (emergency, 7+ days). + + Args: + holding_start: When 100% MUST be reached + holding_end: When 100% holding ends (start + 3h) + charging_intervals: UPS intervals to charge ASAP + + Returns: + BalancingPlan with mode=forced, locked=True, priority=critical + """ + return BalancingPlan( + mode=BalancingMode.FORCED, + created_at=datetime.now().isoformat(), + reason="CRITICAL: 7+ days since last balancing, health priority over cost", + holding_start=holding_start.isoformat(), + holding_end=holding_end.isoformat(), + intervals=charging_intervals, + locked=True, # Cannot be overridden + priority=BalancingPriority.CRITICAL, + active=True, + ) diff --git a/custom_components/oig_cloud/battery_forecast/config.py b/custom_components/oig_cloud/battery_forecast/config.py new file mode 100644 index 00000000..0cb5b7ea --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/config.py @@ -0,0 +1,158 @@ +"""Configuration dataclasses for battery forecast module. + +This module provides typed configuration objects for: +- SimulatorConfig: Physics layer configuration +- HybridConfig: Hybrid optimization strategy parameters +- BalancingConfig: Balancing strategy parameters +""" + +from dataclasses import dataclass, field +from datetime import time +from enum import Enum + + +class NegativePriceStrategy(Enum): + """Strategy for handling negative spot prices.""" + + CURTAIL = "curtail" # Reduce solar export (HOME III) + CONSUME = "consume" # Maximize self-consumption (HOME I) + CHARGE_GRID = "charge_grid" # Charge from grid at negative prices (HOME UPS) + AUTO = "auto" # Automatically select best strategy + + +class ChargingStrategy(Enum): + """When to use UPS mode for grid charging.""" + + CHEAPEST_ONLY = "cheapest_only" # Only at lowest price intervals + BELOW_THRESHOLD = "below_threshold" # When price < threshold + OPPORTUNISTIC = "opportunistic" # Charge whenever economically beneficial + DISABLED = "disabled" # Never use UPS mode + + +@dataclass +class SimulatorConfig: + """Configuration for physics simulation layer. + + Contains physical parameters that don't change during optimization. + These are typically derived from hardware specs or sensor readings. + """ + + # Battery capacity bounds + max_capacity_kwh: float = 15.36 + min_capacity_kwh: float = 3.07 # HW minimum (~20% SoC) + + # Charging parameters + charge_rate_kw: float = 2.8 + max_discharge_rate_kw: float = 5.0 + + # Efficiency factors (CBB 3F Home Plus Premium specs) + dc_dc_efficiency: float = 0.95 # Solar to battery + dc_ac_efficiency: float = 0.882 # Battery to load + ac_dc_efficiency: float = 0.95 # Grid to battery + + # Simulation interval + interval_minutes: int = 15 + + @property + def interval_hours(self) -> float: + """Interval duration in hours.""" + return self.interval_minutes / 60.0 + + @property + def max_charge_per_interval_kwh(self) -> float: + """Maximum kWh that can be charged in one interval.""" + return self.charge_rate_kw * self.interval_hours + + @property + def usable_capacity_kwh(self) -> float: + """Usable capacity above HW minimum.""" + return self.max_capacity_kwh - self.min_capacity_kwh + + +@dataclass +class HybridConfig: + """Configuration for hybrid optimization strategy. + + Contains tunable parameters for the optimizer. + These can be adjusted based on user preferences or seasonal patterns. + """ + + # SoC targets (as percentage 0-100) + planning_min_percent: float = 20.0 # Don't plan below this + target_percent: float = 80.0 # Target SoC at end of period + emergency_reserve_percent: float = 33.0 # Reserve for grid outage + + # Price thresholds (relative to average, in %) + cheap_threshold_percent: float = 75.0 # Below this = cheap + expensive_threshold_percent: float = 125.0 # Above this = expensive + very_cheap_threshold_percent: float = 50.0 # Very cheap = force charge + + # Absolute price limits (CZK/kWh) + max_ups_price_czk: float = 2.0 # Max price for grid charging + min_export_price_czk: float = -0.5 # Min price to allow export + + # Negative price handling + negative_price_strategy: NegativePriceStrategy = NegativePriceStrategy.AUTO + negative_price_min_solar_kwh: float = 0.5 # Min solar to trigger strategy + + # Mode selection weights (for scoring) + weight_cost: float = 1.0 # Weight for cost savings + weight_battery_preservation: float = 0.3 # Weight for keeping battery charged + weight_self_consumption: float = 0.5 # Weight for using own solar + + # UPS mode parameters + charging_strategy: ChargingStrategy = ChargingStrategy.BELOW_THRESHOLD + min_ups_duration_intervals: int = 2 # Minimum 30 min UPS + max_ups_duration_intervals: int = 8 # Maximum 2h UPS + + # Smoothing to avoid oscillation + min_mode_duration_intervals: int = 2 # Minimum time in any mode + transition_penalty_czk: float = 0.1 # Penalty for mode switch + + # Look-ahead for optimization + look_ahead_hours: int = 24 # How far to optimize + + def planning_min_kwh(self, max_capacity: float) -> float: + """Calculate planning minimum in kWh.""" + return max_capacity * (self.planning_min_percent / 100.0) + + def target_kwh(self, max_capacity: float) -> float: + """Calculate target capacity in kWh.""" + return max_capacity * (self.target_percent / 100.0) + + def emergency_reserve_kwh(self, max_capacity: float) -> float: + """Calculate emergency reserve in kWh.""" + return max_capacity * (self.emergency_reserve_percent / 100.0) + + +@dataclass +class BalancingConfig: + """Configuration for balancing strategy. + + Balancing ensures battery reaches 100% periodically for cell calibration. + """ + + # Enable/disable balancing + enabled: bool = True + + # Balancing schedule + interval_days: int = 7 # Days between balancing cycles + holding_hours: int = 3 # Hours to hold at 100% + deadline_time: time = field(default_factory=lambda: time(6, 0)) # Default 06:00 + + # Charging parameters + max_charge_price_czk: float = 3.0 # Max price to pay for balancing charge + prefer_solar: bool = True # Prefer solar charging over grid + + # Emergency balancing + force_after_days: int = 14 # Force balancing after this many days + min_soc_for_skip_percent: float = 95.0 # Can skip if above this SoC + + # Holding period behavior + allow_discharge_during_holding: bool = False # Allow small discharge + max_discharge_during_holding_kwh: float = 0.5 # If allowed, max amount + + def deadline_datetime(self, day_offset: int = 0) -> time: + """Get deadline time (for compatibility).""" + _ = day_offset + return self.deadline_time diff --git a/custom_components/oig_cloud/battery_forecast/data/__init__.py b/custom_components/oig_cloud/battery_forecast/data/__init__.py new file mode 100644 index 00000000..59b1b160 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/__init__.py @@ -0,0 +1 @@ +"""Data-source helpers for battery forecast.""" diff --git a/custom_components/oig_cloud/battery_forecast/data/adaptive_consumption.py b/custom_components/oig_cloud/battery_forecast/data/adaptive_consumption.py new file mode 100644 index 00000000..d59b8ea0 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/adaptive_consumption.py @@ -0,0 +1,644 @@ +"""Adaptive consumption helpers extracted from legacy battery forecast.""" + +from __future__ import annotations + +import asyncio +import logging +import math +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.core import HomeAssistant +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + +UNKNOWN_PROFILE_LABEL = "Neznámý profil" +NO_PROFILE_LABEL = "Žádný profil" +SEASON_NAMES = { + "winter": "zimní", + "spring": "jarní", + "summer": "letní", + "autumn": "podzimní", +} + + +class AdaptiveConsumptionHelper: + """Helper for adaptive consumption profiling and summaries.""" + + def __init__( + self, + hass: Optional[HomeAssistant], + box_id: str, + iso_tz_offset: str = "+00:00", + ) -> None: + self._hass = hass + self._box_id = box_id + self._iso_tz_offset = iso_tz_offset + + @staticmethod + def _strip_similarity_parens(value: str) -> str: + if "(" not in value: + return value + lowered = value.lower() + out: List[str] = [] + idx = 0 + while idx < len(value): + if value[idx] == "(": + end = value.find(")", idx + 1) + if end == -1: + out.append(value[idx:]) + break + segment = lowered[idx + 1 : end] + if "podobn" in segment or "shoda" in segment: + idx = end + 1 + continue + out.append(value[idx : end + 1]) + idx = end + 1 + else: + out.append(value[idx]) + idx += 1 + return "".join(out) + + @classmethod + def _normalize_profile_name(cls, raw_name: Any) -> str: + cleaned = cls._strip_similarity_parens(str(raw_name)).strip() + if not cleaned: + cleaned = str(raw_name).strip() + return " ".join(cleaned.split()) + + @staticmethod + def _get_season_label(season: str) -> str: + return SEASON_NAMES.get(season, season) + + @staticmethod + def _sum_profile_hours(hourly: Any, start_hour: int, start: int, end: int) -> float: + total = 0.0 + if isinstance(hourly, list): + for hour in range(start, end): + index = hour - start_hour + if 0 <= index < len(hourly): + total += hourly[index] + elif isinstance(hourly, dict): + for hour in range(start, end): + total += hourly.get(hour, 0.0) + return total + + @classmethod + def _build_profile_suffix( + cls, profile: Dict[str, Any], ui: Dict[str, Any] + ) -> List[str]: + characteristics = profile.get("characteristics", {}) + season_cz = cls._get_season_label(characteristics.get("season", "")) + + day_count = ui.get("sample_count", profile.get("sample_count", 0)) + try: + day_count_val = int(day_count) if day_count is not None else 0 + except (TypeError, ValueError): + day_count_val = 0 + + similarity_score = ui.get("similarity_score") + try: + similarity_val = ( + float(similarity_score) if similarity_score is not None else None + ) + except (TypeError, ValueError): + similarity_val = None + + suffix_parts: List[str] = [] + if season_cz: + suffix_parts.append(str(season_cz)) + if day_count_val > 0: + suffix_parts.append(f"{day_count_val} dnů") + if similarity_val is not None: + suffix_parts.append(f"shoda {similarity_val:.2f}") + return suffix_parts + + @classmethod + def _build_dashboard_profile_details( + cls, today_profile: Dict[str, Any], match_score: float + ) -> str: + season_cz = cls._get_season_label(today_profile.get("season", "")) + day_count = today_profile.get("day_count", 0) + + parts: List[str] = [] + if season_cz: + parts.append(season_cz) + if day_count: + parts.append(f"{day_count} podobných dnů") + + details = ", ".join(parts) + if match_score > 0: + score_text = f"{int(match_score)}% shoda" + return f"{details} • {score_text}" if details else score_text + return details + + @staticmethod + def _calculate_charging_cost_today( + timeline_data: List[Dict[str, Any]], + today_date: datetime.date, + iso_tz_offset: str, + ) -> float: + total = 0.0 + for entry in timeline_data: + timestamp_str = entry.get("timestamp") + if not timestamp_str: + continue + try: + entry_dt = datetime.fromisoformat( + timestamp_str.replace("Z", iso_tz_offset) + ) + except (ValueError, AttributeError): + continue + if entry_dt.date() != today_date: + continue + charging_kwh = entry.get("charging_kwh", 0) + spot_price = entry.get("spot_price_czk_per_kwh", 0) + if charging_kwh > 0 and spot_price > 0: + total += charging_kwh * spot_price + return total + + @staticmethod + def _season_for_month(month: int) -> str: + if month in {12, 1, 2}: + return "winter" + if month in {3, 4, 5}: + return "spring" + if month in {6, 7, 8}: + return "summer" + return "autumn" + + @staticmethod + def _transition_type(today_weekday: int, tomorrow_weekday: int) -> Optional[str]: + if today_weekday == 4 and tomorrow_weekday == 5: + return "friday_to_saturday" + if today_weekday == 6 and tomorrow_weekday == 0: + return "sunday_to_monday" + return None + + @staticmethod + def _select_profile_by_prefix( + profiles: Dict[str, Any], prefix: str, *, prefer_typical: bool + ) -> Optional[Dict[str, Any]]: + best_match = None + for profile_id, profile in profiles.items(): + if not profile_id.startswith(prefix): + continue + if not prefer_typical: + return profile + if ( + not best_match + or "_typical" in profile_id + or len(profile_id.split("_")) == 2 + ): + best_match = profile + return best_match + + def calculate_consumption_summary( + self, adaptive_profiles: Dict[str, Any] + ) -> Dict[str, Any]: + """Vypočítá sumarizační hodnoty spotřeby pro dashboard.""" + if not adaptive_profiles or not isinstance(adaptive_profiles, dict): + return {} + + today_profile = adaptive_profiles.get("today_profile") + current_hour = datetime.now().hour + planned_today = 0.0 + if today_profile and isinstance(today_profile, dict): + hourly = today_profile.get("hourly_consumption", []) + start_hour = today_profile.get("start_hour", 0) + planned_today = self._sum_profile_hours( + hourly, start_hour, current_hour, 24 + ) + + tomorrow_profile = adaptive_profiles.get("tomorrow_profile") + planned_tomorrow = 0.0 + if tomorrow_profile and isinstance(tomorrow_profile, dict): + hourly = tomorrow_profile.get("hourly_consumption", []) + start_hour = tomorrow_profile.get("start_hour", 0) + planned_tomorrow = self._sum_profile_hours(hourly, start_hour, 0, 24) + + profile_today_text = self.format_profile_description(today_profile) + profile_tomorrow_text = self.format_profile_description(tomorrow_profile) + + _LOGGER.debug( + "Consumption summary: today=%.1fkWh, tomorrow=%.1fkWh", + planned_today, + planned_tomorrow, + ) + + return { + "planned_consumption_today": round(planned_today, 1), + "planned_consumption_tomorrow": round(planned_tomorrow, 1), + "profile_today": profile_today_text, + "profile_tomorrow": profile_tomorrow_text, + } + + @staticmethod + def format_profile_description(profile: Optional[Dict[str, Any]]) -> str: + """Vrátí lidsky čitelný popis profilu.""" + if not profile or not isinstance(profile, dict): + return NO_PROFILE_LABEL + + ui = profile.get("ui", {}) + raw_name = ui.get("name", UNKNOWN_PROFILE_LABEL) or UNKNOWN_PROFILE_LABEL + cleaned_name = AdaptiveConsumptionHelper._normalize_profile_name(raw_name) + + suffix_parts = AdaptiveConsumptionHelper._build_profile_suffix(profile, ui) + if suffix_parts: + return f"{cleaned_name} ({', '.join(suffix_parts)})" + return cleaned_name + + def process_adaptive_consumption_for_dashboard( + self, + adaptive_profiles: Optional[Dict[str, Any]], + timeline_data: List[Dict[str, Any]], + ) -> Dict[str, Any]: + """Zpracuj adaptive data pro dashboard (do attributes).""" + if not adaptive_profiles or not isinstance(adaptive_profiles, dict): + _LOGGER.debug( + "No adaptive profiles for dashboard: type=%s", type(adaptive_profiles) + ) + return {} + + now = datetime.now() + current_hour = now.hour + + today_profile = adaptive_profiles.get("today_profile") + remaining_kwh = 0.0 + if today_profile and "hourly_consumption" in today_profile: + hourly = today_profile["hourly_consumption"] + start_hour = today_profile.get("start_hour", 0) + remaining_kwh = self._sum_profile_hours( + hourly, start_hour, current_hour, 24 + ) + + profile_name = adaptive_profiles.get("profile_name", UNKNOWN_PROFILE_LABEL) + match_score = adaptive_profiles.get("match_score", 0) + + profile_details = "" + if today_profile: + profile_details = self._build_dashboard_profile_details( + today_profile, match_score + ) + + today_date = now.date() + charging_cost_today = self._calculate_charging_cost_today( + timeline_data, today_date, self._iso_tz_offset + ) + + return { + "remaining_kwh": round(remaining_kwh, 1), + "profile_name": profile_name, + "profile_details": profile_details, + "charging_cost_today": round(charging_cost_today, 0), + } + + async def get_adaptive_load_prediction(self) -> Optional[Dict[str, Any]]: + """Načte adaptive load prediction přímo z adaptive_load_profiles sensoru.""" + await asyncio.sleep(0) + try: + profiles_sensor = f"sensor.oig_{self._box_id}_adaptive_load_profiles" + + if not self._hass: + return None + + profiles_state = self._hass.states.get(profiles_sensor) + if not profiles_state: + _LOGGER.debug("Adaptive profiles sensor not found: %s", profiles_sensor) + return None + + attrs = profiles_state.attributes + + if "today_profile" not in attrs or "tomorrow_profile" not in attrs: + _LOGGER.debug( + "Adaptive sensor missing today_profile or tomorrow_profile" + ) + return None + + result = { + "today_profile": attrs["today_profile"], + "tomorrow_profile": attrs["tomorrow_profile"], + "match_score": attrs.get("prediction_summary", {}).get( + "similarity_score", 0.0 + ), + "prediction_summary": attrs.get("prediction_summary", {}), + } + + _LOGGER.debug( + "✅ Adaptive prediction loaded: today=%.2f kWh, match_score=%.3f", + result["today_profile"].get("total_kwh", 0), + result["match_score"], + ) + + return result + + except Exception as e: + _LOGGER.error("Error in adaptive load prediction: %s", e, exc_info=True) + return None + + def get_profiles_from_sensor(self) -> Dict[str, Any]: + """Načte profily z adaptive sensor a převede list na dict.""" + try: + profiles_sensor = f"sensor.oig_{self._box_id}_adaptive_load_profiles" + + if not self._hass: + return {} + + profiles_state = self._hass.states.get(profiles_sensor) + if not profiles_state: + return {} + + profiles_list = profiles_state.attributes.get("profiles", []) + + if isinstance(profiles_list, list): + return { + p.get("profile_id", f"profile_{i}"): p + for i, p in enumerate(profiles_list) + } + if isinstance(profiles_list, dict): + return profiles_list + + _LOGGER.warning("Unexpected profiles type: %s", type(profiles_list)) + return {} + + except Exception as e: + _LOGGER.debug("Error getting profiles: %s", e) + return {} + + async def get_today_hourly_consumption(self) -> List[float]: + """Načte dnešní spotřebu po hodinách (od půlnoci do teď).""" + try: + consumption_sensor = f"sensor.oig_{self._box_id}_actual_aco_p" + + if self._hass is None: + return [] + + from homeassistant.components.recorder.statistics import ( + statistics_during_period, + ) + + start_time = dt_util.now().replace( + hour=0, minute=0, second=0, microsecond=0 + ) + end_time = dt_util.now() + + stats = await self._hass.async_add_executor_job( + statistics_during_period, + self._hass, + start_time, + end_time, + {consumption_sensor}, + "hour", + None, + {"mean"}, + ) + + if not stats or consumption_sensor not in stats: + return [] + + hourly_values = [] + for stat in stats[consumption_sensor]: + if stat.get("mean") is not None: + hourly_values.append(stat["mean"] / 1000) + + return hourly_values + + except Exception as e: + _LOGGER.debug("Error getting today hourly consumption: %s", e) + return [] + + async def calculate_recent_consumption_ratio( + self, adaptive_profiles: Optional[Dict[str, Any]], hours: int = 3 + ) -> Optional[float]: + """Porovná reálnou spotřebu vs plán za posledních N hodin.""" + if ( + not adaptive_profiles + or not isinstance(adaptive_profiles, dict) + or "today_profile" not in adaptive_profiles + ): + return None + + actual_hourly = await self.get_today_hourly_consumption() + if not actual_hourly: + return None + + total_hours = len(actual_hourly) + if total_hours == 0: + return None + + lookback = min(hours, total_hours) + actual_total = sum(actual_hourly[-lookback:]) + + today_profile = adaptive_profiles.get("today_profile") or {} + hourly_plan = today_profile.get("hourly_consumption") + if not isinstance(hourly_plan, list): + return None + + start_hour = today_profile.get("start_hour", 0) + planned_total = 0.0 + start_index = total_hours - lookback + avg_fallback = today_profile.get("avg_kwh_h", 0.5) + + for idx in range(lookback): + hour = start_index + idx + plan_idx = hour - start_hour + if 0 <= plan_idx < len(hourly_plan): + planned_total += hourly_plan[plan_idx] + else: + planned_total += avg_fallback + + if planned_total <= 0: + return None + + ratio = actual_total / planned_total + _LOGGER.debug( + "[LoadForecast] Recent consumption ratio (last %dh): actual=%.2f kWh, " + "planned=%.2f kWh → %.2fx", + lookback, + actual_total, + planned_total, + ratio, + ) + return ratio + + @staticmethod + def apply_consumption_boost_to_forecast( + load_forecast: List[float], ratio: float, hours: int = 3 + ) -> None: + """Navýší krátkodobý load forecast podle zjištěné odchylky.""" + if not load_forecast: + return + + capped_ratio = min(ratio, 3.0) + intervals = min( + len(load_forecast), + max(4, int(math.ceil(hours * 4 * min(capped_ratio, 2.5)))), + ) + + for idx in range(intervals): + load_forecast[idx] = round(load_forecast[idx] * capped_ratio, 4) + + _LOGGER.info( + "[LoadForecast] Boosted first %d intervals by %.0f%% due to high " + "consumption drift (ratio %.2fx, capped %.2fx)", + intervals, + (capped_ratio - 1) * 100, + ratio, + capped_ratio, + ) + + @staticmethod + def calculate_profile_similarity( + today_hourly: List[float], profile_hourly: List[float] + ) -> float: + """Vypočítá podobnost dnešní křivky s profilem (MAPE scoring).""" + if not today_hourly: + return 0 + + compare_length = min(len(today_hourly), len(profile_hourly)) + + total_error = 0.0 + valid_hours = 0 + + for i in range(compare_length): + actual = today_hourly[i] + expected = profile_hourly[i] + + if actual > 0: + total_error += abs(actual - expected) / actual + valid_hours += 1 + + if valid_hours == 0: + return 0 + + avg_error = total_error / valid_hours + return max(0.0, 100 - (avg_error * 100)) + + @staticmethod + def select_tomorrow_profile( + profiles: Dict[str, Any], current_time: datetime + ) -> Optional[Dict[str, Any]]: + """Vybere profil pro zítřek podle day_type a transition.""" + try: + tomorrow = current_time + timedelta(days=1) + tomorrow_weekday = tomorrow.weekday() + today_weekday = current_time.weekday() + + season = AdaptiveConsumptionHelper._season_for_month(tomorrow.month) + transition_type = AdaptiveConsumptionHelper._transition_type( + today_weekday, tomorrow_weekday + ) + if transition_type: + transition_profile_id = f"{transition_type}_{season}" + transition_profile = ( + AdaptiveConsumptionHelper._select_profile_by_prefix( + profiles, transition_profile_id, prefer_typical=False + ) + ) + if transition_profile: + _LOGGER.debug( + "Using transition profile for tomorrow: %s", + transition_profile_id, + ) + return transition_profile + + tomorrow_is_weekend = tomorrow_weekday >= 5 + day_type = "weekend" if tomorrow_is_weekend else "weekday" + standard_profile_id = f"{day_type}_{season}" + + best_match = AdaptiveConsumptionHelper._select_profile_by_prefix( + profiles, standard_profile_id, prefer_typical=True + ) + if best_match: + _LOGGER.debug( + "Using standard profile for tomorrow: %s_%s", day_type, season + ) + return best_match + + except Exception as e: + _LOGGER.debug("Error selecting tomorrow profile: %s", e) + return None + + async def get_consumption_today(self) -> Optional[float]: + """Získat celkovou spotřebu dnes od půlnoci do teď.""" + try: + consumption_sensor = f"sensor.oig_{self._box_id}_actual_aco_p" + + if self._hass is None: + return None + + start_time = dt_util.now().replace( + hour=0, minute=0, second=0, microsecond=0 + ) + end_time = dt_util.now() + + from homeassistant.components.recorder import history + + states = await self._hass.async_add_executor_job( + history.get_significant_states, + self._hass, + start_time, + end_time, + [consumption_sensor], + ) + + if not states or consumption_sensor not in states: + return None + + consumption_states = states[consumption_sensor] + if not consumption_states: + return None + + import statistics + + valid_values = [] + for state in consumption_states: + try: + value = float(state.state) + if 0 <= value <= 20000: + valid_values.append(value) + except (ValueError, AttributeError): + continue + + if not valid_values: + return None + + avg_watts = statistics.mean(valid_values) + hours_elapsed = (end_time - start_time).total_seconds() / 3600 + return (avg_watts / 1000) * hours_elapsed + + except Exception as e: + _LOGGER.debug("Error getting consumption today: %s", e) + return None + + def get_load_avg_fallback(self) -> float: + """Fallback: Získá průměr z load_avg senzorů pro aktuální čas.""" + current_time = dt_util.now() + is_weekend = current_time.weekday() >= 5 + day_type = "weekend" if is_weekend else "weekday" + + hour = current_time.hour + if 6 <= hour < 8: + time_block = "6_8" + elif 8 <= hour < 12: + time_block = "8_12" + elif 12 <= hour < 16: + time_block = "12_16" + elif 16 <= hour < 22: + time_block = "16_22" + else: + time_block = "22_6" + + sensor_id = f"sensor.oig_{self._box_id}_load_avg_{time_block}_{day_type}" + + if self._hass: + sensor_state = self._hass.states.get(sensor_id) + if sensor_state and sensor_state.state not in ["unknown", "unavailable"]: + try: + watt = float(sensor_state.state) + return watt / 1000 + except (ValueError, TypeError): + pass + + return 0.48 diff --git a/custom_components/oig_cloud/battery_forecast/data/battery_state.py b/custom_components/oig_cloud/battery_forecast/data/battery_state.py new file mode 100644 index 00000000..398f7362 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/battery_state.py @@ -0,0 +1,324 @@ +"""Battery state helpers extracted from the forecast sensor.""" + +from __future__ import annotations + +import logging +from typing import Any, Optional + +from ..types import ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, + MODE_LABEL_HOME_I, + MODE_LABEL_HOME_II, + MODE_LABEL_HOME_III, + MODE_LABEL_HOME_UPS, + SERVICE_MODE_HOME_1, + SERVICE_MODE_HOME_2, + SERVICE_MODE_HOME_3, + SERVICE_MODE_HOME_5, + SERVICE_MODE_HOME_6, +) + +_LOGGER = logging.getLogger(__name__) + +INVALID_STATES = {"unknown", "unavailable", None, ""} + + +def _read_state_float( + sensor: Any, entity_id: str, *, scale: float = 1.0 +) -> Optional[float]: + if not sensor._hass: + return None + state = sensor._hass.states.get(entity_id) + if not state or state.state in INVALID_STATES: + return None + try: + return float(state.state) / scale + except (ValueError, TypeError): + return None + + +def _get_capacity_from_pv_data(sensor: Any) -> Optional[float]: + pv_data_sensor = f"sensor.oig_{sensor._box_id}_pv_data" + state = sensor._hass.states.get(pv_data_sensor) if sensor._hass else None + if not state or not hasattr(state, "attributes"): + return None + try: + pv_data = state.attributes.get("data", {}) + if isinstance(pv_data, dict): + p_bat_wp = pv_data.get("box_prms", {}).get("p_bat") + if p_bat_wp: + total_kwh = float(p_bat_wp) / 1000.0 + _LOGGER.debug( + "Total battery capacity from API: %s Wp = %.2f kWh", + p_bat_wp, + total_kwh, + ) + return total_kwh + except (KeyError, ValueError, TypeError) as err: + _LOGGER.debug("Error reading p_bat from pv_data: %s", err) + return None + + +def _get_capacity_from_usable(sensor: Any) -> Optional[float]: + usable_sensor = f"sensor.oig_{sensor._box_id}_usable_battery_capacity" + usable_kwh = _read_state_float(sensor, usable_sensor, scale=1.0) + if usable_kwh is None: + return None + total_kwh = usable_kwh / 0.8 + _LOGGER.debug( + "Total battery capacity from usable: %.2f kWh -> %.2f kWh", + usable_kwh, + total_kwh, + ) + return total_kwh + + +def get_total_battery_capacity(sensor: Any) -> Optional[float]: + """Return total battery capacity in kWh.""" + if not sensor._hass: + return None + + installed_sensor = f"sensor.oig_{sensor._box_id}_installed_battery_capacity_kwh" + total_kwh = _read_state_float(sensor, installed_sensor, scale=1000.0) + if total_kwh and total_kwh > 0: + return total_kwh + + total_kwh = _get_capacity_from_pv_data(sensor) + if total_kwh is not None: + return total_kwh + + total_kwh = _get_capacity_from_usable(sensor) + if total_kwh is not None: + return total_kwh + + sensor._log_rate_limited( + "battery_capacity_missing", + "debug", + "Battery total capacity not available yet; waiting for sensors", + cooldown_s=600.0, + ) + return None + + +def get_current_battery_soc_percent(sensor: Any) -> Optional[float]: + """Return current battery SOC percentage.""" + if not sensor._hass: + return None + + soc_sensor = f"sensor.oig_{sensor._box_id}_batt_bat_c" + soc_percent = _read_state_float(sensor, soc_sensor, scale=1.0) + if soc_percent is not None: + _LOGGER.debug("Battery SOC from API: %.1f%%", soc_percent) + return soc_percent + + sensor._log_rate_limited( + "battery_soc_missing", + "debug", + "Battery SOC percent not available yet; waiting for sensors", + cooldown_s=600.0, + ) + return None + + +def get_current_battery_capacity(sensor: Any) -> Optional[float]: + """Return current battery capacity in kWh (total * SOC%).""" + total = get_total_battery_capacity(sensor) + soc_percent = get_current_battery_soc_percent(sensor) + if total is None or soc_percent is None: + return None + current_kwh = total * soc_percent / 100.0 + _LOGGER.debug( + "Current battery capacity: %.2f kWh x %.1f%% = %.2f kWh", + total, + soc_percent, + current_kwh, + ) + return current_kwh + + +def get_max_battery_capacity(sensor: Any) -> Optional[float]: + """Return max battery capacity (same as total).""" + return get_total_battery_capacity(sensor) + + +def get_min_battery_capacity(sensor: Any) -> Optional[float]: + """Return configured minimum capacity in kWh.""" + total = get_total_battery_capacity(sensor) + if total is None: + return None + + if sensor._config_entry: + min_percent = ( + sensor._config_entry.options.get("min_capacity_percent") + if sensor._config_entry.options + else sensor._config_entry.data.get("min_capacity_percent", 33.0) + ) + if min_percent is None: + min_percent = 33.0 + min_kwh = total * float(min_percent) / 100.0 + _LOGGER.debug( + "Min battery capacity: %.0f%% x %.2f kWh = %.2f kWh", + min_percent, + total, + min_kwh, + ) + return min_kwh + + return total * 0.33 + + +def get_target_battery_capacity(sensor: Any) -> Optional[float]: + """Return configured target capacity in kWh.""" + total = get_total_battery_capacity(sensor) + if total is None: + return None + + if sensor._config_entry: + target_percent = ( + sensor._config_entry.options.get("target_capacity_percent") + if sensor._config_entry.options + else sensor._config_entry.data.get("target_capacity_percent", 80.0) + ) + if target_percent is None: + target_percent = 80.0 + target_kwh = total * float(target_percent) / 100.0 + _LOGGER.debug( + "Target battery capacity: %.0f%% x %.2f kWh = %.2f kWh", + target_percent, + total, + target_kwh, + ) + return target_kwh + + return total * 0.80 + + +def get_battery_efficiency(sensor: Any) -> float: + """Return battery efficiency as a fraction.""" + if not sensor._hass: + _LOGGER.debug("HASS not available, using fallback efficiency 0.882") + return 0.882 + + sensor_id = f"sensor.oig_{sensor._box_id}_battery_efficiency" + state = sensor._hass.states.get(sensor_id) + + if not state or state.state in ["unknown", "unavailable"]: + return 0.882 + + try: + efficiency_pct = float(state.state) + efficiency = efficiency_pct / 100.0 + if efficiency < 0.70 or efficiency > 1.0: + _LOGGER.warning( + "Unrealistic efficiency %.3f (%.1f%%), using fallback 0.882", + efficiency, + efficiency_pct, + ) + return 0.882 + return efficiency + except (ValueError, TypeError) as err: + _LOGGER.error("Error parsing battery efficiency: %s", err) + return 0.882 + + +def get_ac_charging_limit_kwh_15min(sensor: Any) -> float: + """Return AC charging limit per 15 min interval in kWh.""" + config = sensor._config_entry.options if sensor._config_entry else {} + charging_power_kw = config.get("home_charge_rate", 2.8) + return charging_power_kw / 4.0 + + +def get_current_mode(sensor: Any) -> int: + """Return current CBB mode (0-3) based on sensor state.""" + if not sensor._hass: + _LOGGER.debug("HASS not available, using fallback mode HOME III") + return CBB_MODE_HOME_III + + sensor_id = f"sensor.oig_{sensor._box_id}_box_prms_mode" + state = sensor._hass.states.get(sensor_id) + + if not state or state.state in ["unknown", "unavailable"]: + _LOGGER.debug( + "Mode sensor %s not available, using fallback HOME III", sensor_id + ) + return CBB_MODE_HOME_III + + try: + mode_value = state.state + if isinstance(mode_value, str): + mode_map = { + MODE_LABEL_HOME_I: CBB_MODE_HOME_I, + MODE_LABEL_HOME_II: CBB_MODE_HOME_II, + MODE_LABEL_HOME_III: CBB_MODE_HOME_III, + MODE_LABEL_HOME_UPS: CBB_MODE_HOME_UPS, + SERVICE_MODE_HOME_1: CBB_MODE_HOME_I, + SERVICE_MODE_HOME_2: CBB_MODE_HOME_II, + SERVICE_MODE_HOME_3: CBB_MODE_HOME_III, + SERVICE_MODE_HOME_5: CBB_MODE_HOME_I, + SERVICE_MODE_HOME_6: CBB_MODE_HOME_I, + } + if mode_value in mode_map: + mode = mode_map[mode_value] + else: + mode = int(mode_value) + else: + mode = int(mode_value) + + if mode in (4, 5): + return CBB_MODE_HOME_I + if mode not in ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + ): + _LOGGER.warning("Invalid mode %s, using fallback HOME III", mode) + return CBB_MODE_HOME_III + + mode_name = CBB_MODE_NAMES.get(mode, f"UNKNOWN_{mode}") + _LOGGER.debug("Current CBB mode: %s (%s)", mode_name, mode) + return mode + + except (ValueError, TypeError) as err: + _LOGGER.error("Error parsing CBB mode from '%s': %s", state.state, err) + return CBB_MODE_HOME_III + + +def get_boiler_available_capacity(sensor: Any) -> float: + """Return boiler capacity per 15 min interval in kWh.""" + if not sensor._hass: + return 0.0 + + boiler_use_sensor = f"sensor.oig_{sensor._box_id}_boiler_is_use" + state = sensor._hass.states.get(boiler_use_sensor) + + if not state or state.state not in ["on", "1", "true"]: + return 0.0 + + boiler_power_sensor = f"sensor.oig_{sensor._box_id}_boiler_install_power" + power_state = sensor._hass.states.get(boiler_power_sensor) + + if not power_state: + _LOGGER.warning( + "Boiler is enabled but %s not found, using default 2.8 kW", + boiler_power_sensor, + ) + return 0.7 + + try: + power_kw = float(power_state.state) + capacity_kwh_15min = power_kw / 4.0 + _LOGGER.debug( + "Boiler available: %.2f kW -> %.2f kWh/15min", + power_kw, + capacity_kwh_15min, + ) + return capacity_kwh_15min + + except (ValueError, TypeError) as err: + _LOGGER.warning("Error parsing boiler power: %s, using default 0.7 kWh", err) + return 0.7 diff --git a/custom_components/oig_cloud/battery_forecast/data/history.py b/custom_components/oig_cloud/battery_forecast/data/history.py new file mode 100644 index 00000000..31e82f11 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/history.py @@ -0,0 +1,581 @@ +"""History helpers extracted from legacy battery forecast.""" + +from __future__ import annotations + +import copy +import logging +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + +from ..types import ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, + SERVICE_MODE_HOME_1, + SERVICE_MODE_HOME_2, + SERVICE_MODE_HOME_3, + SERVICE_MODE_HOME_UPS, +) + +DATETIME_FMT = "%Y-%m-%dT%H:%M:%S" +DATE_FMT = "%Y-%m-%d" +LOG_DATETIME_FMT = "%Y-%m-%d %H:%M" + +_LOGGER = logging.getLogger(__name__) + + +def _as_utc(dt_value: datetime) -> datetime: + return dt_value.astimezone(timezone.utc) if dt_value.tzinfo else dt_value + + +def _state_last_updated_utc(state: Any) -> datetime: + dt_value = state.last_updated + return dt_value.astimezone(timezone.utc) if dt_value.tzinfo else dt_value + + +def _safe_float(value: Any) -> Optional[float]: + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _build_history_entity_ids(box_id: str) -> list[str]: + return [ + f"sensor.oig_{box_id}_ac_out_en_day", + f"sensor.oig_{box_id}_ac_in_ac_ad", + f"sensor.oig_{box_id}_ac_in_ac_pd", + f"sensor.oig_{box_id}_dc_in_fv_ad", + f"sensor.oig_{box_id}_batt_bat_c", + f"sensor.oig_{box_id}_box_prms_mode", + f"sensor.oig_{box_id}_spot_price_current_15min", + f"sensor.oig_{box_id}_export_price_current_15min", + ] + + +def _select_interval_states( + entity_states: list[Any], start_time: datetime, end_time: datetime +) -> list[Any]: + if not entity_states: + return [] + + start_utc = _as_utc(start_time) + end_utc = _as_utc(end_time) + + interval_states = [ + s + for s in entity_states + if start_utc <= _state_last_updated_utc(s) <= end_utc + ] + if interval_states: + return interval_states + + before_states = [ + s for s in entity_states if _state_last_updated_utc(s) < start_utc + ] + after_states = [ + s for s in entity_states if _state_last_updated_utc(s) > end_utc + ] + if before_states and after_states: + return [before_states[-1], after_states[0]] + return [] + + +def _calc_delta_kwh( + entity_states: list[Any], start_time: datetime, end_time: datetime +) -> float: + interval_states = _select_interval_states(entity_states, start_time, end_time) + if len(interval_states) < 2: + return 0.0 + + start_val = _safe_float(interval_states[0].state) + end_val = _safe_float(interval_states[-1].state) + if start_val is None or end_val is None: + return 0.0 + + delta_wh = end_val - start_val + if delta_wh < 0: + delta_wh = end_val + return delta_wh / 1000.0 + + +def _get_value_at_end(entity_states: list[Any], end_time: datetime) -> Any: + if not entity_states: + return None + + end_utc = _as_utc(end_time) + closest_state = min( + entity_states, + key=lambda s: abs( + (_state_last_updated_utc(s) - end_utc).total_seconds() + ), + ) + return closest_state.state + + +def _get_last_value(entity_states: list[Any]) -> Any: + if not entity_states: + return None + return entity_states[-1].state + + +def _parse_interval_start(ts: Optional[str]) -> Optional[datetime]: + if not ts: + return None + start_dt = dt_util.parse_datetime(ts) + if start_dt is None: + try: + start_dt = datetime.fromisoformat(ts) + except Exception: + return None + if start_dt.tzinfo is None: + start_dt = dt_util.as_local(start_dt) + return start_dt + + +def _build_actual_interval_entry( + interval_time: datetime, actual_data: Dict[str, Any] +) -> Dict[str, Any]: + return { + "time": interval_time.isoformat(), + "solar_kwh": round(actual_data.get("solar_kwh", 0), 4), + "consumption_kwh": round(actual_data.get("consumption_kwh", 0), 4), + "battery_soc": round(actual_data.get("battery_soc", 0), 2), + "battery_capacity_kwh": round(actual_data.get("battery_capacity_kwh", 0), 2), + "grid_import_kwh": round(actual_data.get("grid_import", 0), 4), + "grid_export_kwh": round(actual_data.get("grid_export", 0), 4), + "net_cost": round(actual_data.get("net_cost", 0), 2), + "spot_price": round(actual_data.get("spot_price", 0), 2), + "export_price": round(actual_data.get("export_price", 0), 2), + "mode": actual_data.get("mode", 0), + "mode_name": actual_data.get("mode_name", "N/A"), + } + + +async def _patch_existing_actual( + sensor: Any, existing_actual: List[Dict[str, Any]] +) -> List[Dict[str, Any]]: + patched_existing: List[Dict[str, Any]] = [] + for interval in existing_actual: + if interval.get("net_cost") is not None: + patched_existing.append(interval) + continue + start_dt = _parse_interval_start(interval.get("time")) + if start_dt is None: + patched_existing.append(interval) + continue + interval_end = start_dt + timedelta(minutes=15) + historical_patch = await fetch_interval_from_history( + sensor, start_dt, interval_end + ) + if historical_patch: + interval = { + **interval, + "net_cost": round(historical_patch.get("net_cost", 0), 2), + "spot_price": round(historical_patch.get("spot_price", 0), 2), + "export_price": round(historical_patch.get("export_price", 0), 2), + } + patched_existing.append(interval) + return patched_existing + + +async def _build_new_actual_intervals( + sensor: Any, + start_time: datetime, + now: datetime, + existing_times: set[str], +) -> List[Dict[str, Any]]: + current_time = start_time + new_intervals: List[Dict[str, Any]] = [] + + while current_time <= now: + interval_time_str = current_time.isoformat() + if interval_time_str in existing_times: + current_time += timedelta(minutes=15) + continue + + actual_data = await fetch_interval_from_history( + sensor, current_time, current_time + timedelta(minutes=15) + ) + if actual_data: + new_intervals.append( + _build_actual_interval_entry(current_time, actual_data) + ) + + current_time += timedelta(minutes=15) + return new_intervals + + +def _normalize_mode_history(mode_history: List[Dict[str, Any]]) -> list[dict[str, Any]]: + mode_changes: list[dict[str, Any]] = [] + for mode_entry in mode_history: + time_key = mode_entry.get("time", "") + if not time_key: + continue + try: + dt_value = datetime.fromisoformat(time_key) + if dt_value.tzinfo is None: + dt_value = dt_util.as_local(dt_value) + except Exception: # nosec B112 + continue + mode_changes.append( + { + "time": dt_value, + "mode": mode_entry.get("mode"), + "mode_name": mode_entry.get("mode_name"), + } + ) + mode_changes.sort(key=lambda x: x["time"]) + return mode_changes + + +def _expand_modes_to_intervals( + mode_changes: list[dict[str, Any]], + day_start: datetime, + fetch_end: datetime, +) -> Dict[str, Dict[str, Any]]: + historical_modes_lookup: Dict[str, Dict[str, Any]] = {} + interval_time = day_start + while interval_time <= fetch_end: + active_mode = None + for change in mode_changes: + if change["time"] <= interval_time: + active_mode = change + else: + break + + if active_mode: + interval_time_str = interval_time.strftime(DATETIME_FMT) + historical_modes_lookup[interval_time_str] = { + "time": interval_time_str, + "mode": active_mode["mode"], + "mode_name": active_mode["mode_name"], + } + + interval_time += timedelta(minutes=15) + return historical_modes_lookup + + +async def fetch_interval_from_history( # noqa: C901 + sensor: Any, start_time: datetime, end_time: datetime +) -> Optional[Dict[str, Any]]: + """Load actual data for a 15-min interval from HA history.""" + if not sensor._hass: # pylint: disable=protected-access + _LOGGER.debug("[fetch_interval_from_history] No _hass instance") + return None + + log_rl = getattr(sensor, "_log_rate_limited", None) + if log_rl: + log_rl( + "fetch_interval_range", + "debug", + "[fetch_interval_from_history] Fetching sample interval %s - %s", + start_time, + end_time, + cooldown_s=900.0, + ) + + try: + from homeassistant.components.recorder.history import get_significant_states + + box_id = sensor._box_id # pylint: disable=protected-access + entity_ids = _build_history_entity_ids(box_id) + + states = await sensor._hass.async_add_executor_job( # pylint: disable=protected-access + get_significant_states, + sensor._hass, + start_time, + end_time, + entity_ids, + None, + True, + ) + + if not states: + return None + + def _states(entity_id: str) -> list[Any]: + return states.get(entity_id, []) + + consumption_kwh = _calc_delta_kwh( + _states(f"sensor.oig_{box_id}_ac_out_en_day"), start_time, end_time + ) + grid_import_kwh = _calc_delta_kwh( + _states(f"sensor.oig_{box_id}_ac_in_ac_ad"), start_time, end_time + ) + grid_export_kwh = _calc_delta_kwh( + _states(f"sensor.oig_{box_id}_ac_in_ac_pd"), start_time, end_time + ) + solar_kwh = _calc_delta_kwh( + _states(f"sensor.oig_{box_id}_dc_in_fv_ad"), start_time, end_time + ) + + battery_soc = _safe_float( + _get_value_at_end(_states(f"sensor.oig_{box_id}_batt_bat_c"), end_time) + ) + mode_raw = _get_value_at_end( + _states(f"sensor.oig_{box_id}_box_prms_mode"), end_time + ) + + battery_kwh = 0.0 + if battery_soc is not None: + total_capacity = ( + sensor._get_total_battery_capacity() or 0.0 + ) # pylint: disable=protected-access + if total_capacity > 0: + battery_kwh = (battery_soc / 100.0) * total_capacity + + spot_price = ( + _safe_float( + _get_last_value( + _states(f"sensor.oig_{box_id}_spot_price_current_15min") + ) + ) + or 0.0 + ) + export_price = ( + _safe_float( + _get_last_value( + _states(f"sensor.oig_{box_id}_export_price_current_15min") + ) + ) + or 0.0 + ) + + import_cost = grid_import_kwh * spot_price + export_revenue = grid_export_kwh * export_price + net_cost = import_cost - export_revenue + + mode = ( + map_mode_name_to_id(str(mode_raw)) + if mode_raw is not None + else CBB_MODE_HOME_I + ) + + mode_name = CBB_MODE_NAMES.get(mode, "HOME I") + + result = { + "battery_kwh": round(battery_kwh, 2), + "battery_soc": round(battery_soc, 1) if battery_soc is not None else 0.0, + "mode": mode, + "mode_name": mode_name, + "solar_kwh": round(solar_kwh, 3), + "consumption_kwh": round(consumption_kwh, 3), + "grid_import": round(grid_import_kwh, 3), + "grid_export": round(grid_export_kwh, 3), + "spot_price": round(spot_price, 2), + "export_price": round(export_price, 2), + "net_cost": round(net_cost, 2), + } + + if log_rl: + log_rl( + "fetch_interval_sample", + "debug", + "[fetch_interval_from_history] sample %s -> soc=%s kwh=%.2f cons=%.3f net=%.2f", + start_time.strftime(LOG_DATETIME_FMT), + battery_soc, + battery_kwh, + result["consumption_kwh"], + result["net_cost"], + cooldown_s=900.0, + ) + + return result + + except Exception as err: + _LOGGER.warning("Failed to fetch history for %s: %s", start_time, err) + return None + + +async def update_actual_from_history(sensor: Any) -> None: + """Load actual values from HA history for today.""" + now = dt_util.now() + today_str = now.strftime(DATE_FMT) + + plan_storage = await sensor._load_plan_from_storage( + today_str + ) # pylint: disable=protected-access + if not plan_storage: + _LOGGER.debug("No plan in Storage for %s, skipping history update", today_str) + return + + locked = False + if sensor._daily_plan_state and sensor._daily_plan_state.get("date") == today_str: + locked = bool(sensor._daily_plan_state.get("locked", False)) + + plan_data = { + "date": today_str, + "plan": plan_storage.get("intervals", []), + "actual": [], + "locked": locked, + } + + if ( + sensor._daily_plan_state and sensor._daily_plan_state.get("date") == today_str + ): # pylint: disable=protected-access + existing_actual = copy.deepcopy( + sensor._daily_plan_state.get("actual", []) + ) # pylint: disable=protected-access + plan_data["actual"] = existing_actual + else: + existing_actual = plan_data.get("actual", []) + + _LOGGER.info("📊 Updating actual values from history for %s...", today_str) + + existing_actual = await _patch_existing_actual(sensor, existing_actual) + plan_data["actual"] = existing_actual + + existing_times = {interval.get("time") for interval in existing_actual} + + _LOGGER.debug("Found %s existing actual intervals", len(existing_actual)) + + start_time = dt_util.start_of_local_day(now) + new_intervals = await _build_new_actual_intervals( + sensor, start_time, now, existing_times + ) + + if new_intervals: + plan_data["actual"] = existing_actual + new_intervals + _LOGGER.info( + "✅ Added %s new actual intervals (total: %s)", + len(new_intervals), + len(plan_data["actual"]), + ) + else: + _LOGGER.debug("No new actual intervals to add") + + if new_intervals: + sensor._daily_plan_state = plan_data # pylint: disable=protected-access + else: + _LOGGER.debug("No changes, skipping storage update") + + +async def fetch_mode_history_from_recorder( + sensor: Any, start_time: datetime, end_time: datetime +) -> List[Dict[str, Any]]: + """Load historical modes from HA Recorder.""" + if not sensor._hass: # pylint: disable=protected-access + _LOGGER.warning("HASS not available, cannot fetch mode history") + return [] + + sensor_id = ( + f"sensor.oig_{sensor._box_id}_box_prms_mode" # pylint: disable=protected-access + ) + + try: + from homeassistant.components.recorder import history + + history_data = await sensor._hass.async_add_executor_job( # pylint: disable=protected-access + history.state_changes_during_period, + sensor._hass, + start_time, + end_time, + sensor_id, + ) + + if not history_data or sensor_id not in history_data: + _LOGGER.debug( + "No mode history found for %s between %s - %s", + sensor_id, + start_time, + end_time, + ) + return [] + + states = history_data[sensor_id] + if not states: + return [] + + mode_intervals = [] + for state in states: + mode_name = state.state + if mode_name in ["unavailable", "unknown", None]: + continue + + mode_id = map_mode_name_to_id(mode_name) + + mode_intervals.append( + { + "time": state.last_changed.isoformat(), + "mode_name": mode_name, + "mode": mode_id, + } + ) + + _LOGGER.debug( + "📊 Fetched %s mode changes from Recorder for %s (%s - %s)", + len(mode_intervals), + sensor_id, + start_time.strftime(LOG_DATETIME_FMT), + end_time.strftime(LOG_DATETIME_FMT), + ) + + return mode_intervals + + except ImportError: + _LOGGER.error("Recorder component not available") + return [] + except Exception as err: + _LOGGER.error("Error fetching mode history from Recorder: %s", err) + return [] + + +def map_mode_name_to_id(mode_name: str) -> int: + """Map mode name (from sensor state) to mode ID.""" + mode_mapping = { + SERVICE_MODE_HOME_1: CBB_MODE_HOME_I, + SERVICE_MODE_HOME_2: CBB_MODE_HOME_II, + SERVICE_MODE_HOME_3: CBB_MODE_HOME_III, + SERVICE_MODE_HOME_UPS: CBB_MODE_HOME_UPS, + "Home 5": CBB_MODE_HOME_I, + "Home 6": CBB_MODE_HOME_I, + } + + normalized = str(mode_name or "").strip() + if not normalized: + return CBB_MODE_HOME_I + if normalized.lower() in {"unknown", "neznámý", "neznamy"}: + return CBB_MODE_HOME_I + + mode_id = mode_mapping.get(normalized) + if mode_id is None: + _LOGGER.warning( + "Unknown mode name '%s', using fallback mode ID 0 (HOME I)", mode_name + ) + return CBB_MODE_HOME_I + + return mode_id + + +async def build_historical_modes_lookup( + sensor: Any, + *, + day_start: datetime, + fetch_end: datetime, + date_str: str, + source: str, +) -> Dict[str, Dict[str, Any]]: + """Load historical mode changes from Recorder and expand to 15-min intervals.""" + if not sensor._hass: # pylint: disable=protected-access + return {} + + mode_history = await fetch_mode_history_from_recorder(sensor, day_start, fetch_end) + mode_changes = _normalize_mode_history(mode_history) + historical_modes_lookup = _expand_modes_to_intervals( + mode_changes, day_start, fetch_end + ) + + _LOGGER.debug( + "📊 Loaded %s historical mode intervals from Recorder for %s (%s) " + "(expanded from %s changes)", + len(historical_modes_lookup), + date_str, + source, + len(mode_changes), + ) + return historical_modes_lookup diff --git a/custom_components/oig_cloud/battery_forecast/data/input.py b/custom_components/oig_cloud/battery_forecast/data/input.py new file mode 100644 index 00000000..f2b74224 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/input.py @@ -0,0 +1,197 @@ +"""Input helpers for battery forecast (solar/load lookup).""" + +from __future__ import annotations + +import logging +from datetime import datetime +from typing import Any, Dict, Optional + +_LOGGER = logging.getLogger(__name__) + + +def _hour_key(timestamp: datetime) -> str: + hour_ts = timestamp.replace(minute=0, second=0, microsecond=0) + if hour_ts.tzinfo is not None: + return hour_ts.replace(tzinfo=None).isoformat() + return hour_ts.isoformat() + + +def _safe_float(value: Any) -> Optional[float]: + try: + return float(value) + except (TypeError, ValueError): + return None + + +def _log_solar_lookup( + *, + timestamp: datetime, + hour_key: str, + data: Dict[str, Any], + hourly_kw: Any, + log_rate_limited: Optional[Any], +) -> None: + if timestamp.hour not in (7, 8, 9, 10) or not log_rate_limited: + return + try: + keys_count = len(data) + except Exception: + keys_count = -1 + log_rate_limited( + "solar_lookup_debug", + "debug", + "🔍 SOLAR LOOKUP: ts=%s hour_key=%s keys=%s value=%s", + timestamp.isoformat(), + hour_key, + keys_count, + hourly_kw, + cooldown_s=3600.0, + ) + + +def _log_solar_value( + *, + timestamp: datetime, + hour_key: str, + hourly_kw: float, + log_rate_limited: Optional[Any], +) -> None: + if timestamp.hour not in (14, 15, 16) or not log_rate_limited: + return + log_rate_limited( + "solar_values_debug", + "debug", + "Solar sample for %s: key=%s kW=%.3f 15min_kWh=%.3f", + timestamp.strftime("%H:%M"), + hour_key, + hourly_kw, + hourly_kw / 4.0, + cooldown_s=3600.0, + ) + + +def _log_empty_load_avg(state: Optional[Any]) -> None: + if state is None or getattr(state, "_empty_load_sensors_logged", False): + return + _LOGGER.debug( + "load_avg_sensors dictionary is empty - using fallback 500W " + "(statistics sensors may not be available yet)" + ) + setattr(state, "_empty_load_sensors_logged", True) + + +def _is_in_time_range(current_hour: int, start_hour: int, end_hour: int) -> bool: + if start_hour <= end_hour: + return start_hour <= current_hour < end_hour + return current_hour >= start_hour or current_hour < end_hour + + +def _valid_time_range(time_range: Any) -> Optional[tuple[int, int]]: + if not time_range or not isinstance(time_range, tuple) or len(time_range) != 2: + return None + return time_range + + +def _watts_to_kwh_per_15min( + watts: float, *, entity_id: str, timestamp: datetime +) -> float: + kwh_per_hour = watts / 1000.0 + kwh_per_15min = kwh_per_hour / 4.0 + _LOGGER.debug( + "Matched %s for %s: %sW → %.5f kWh/15min", + entity_id, + timestamp.strftime("%H:%M"), + watts, + kwh_per_15min, + ) + return kwh_per_15min + + +def get_solar_for_timestamp( + timestamp: datetime, + solar_forecast: Dict[str, Any], + *, + log_rate_limited: Optional[Any] = None, +) -> float: + """Get solar production for a timestamp (kWh per 15min).""" + today = datetime.now().date() + is_today = timestamp.date() == today + + data = solar_forecast.get("today" if is_today else "tomorrow", {}) + + if not data: + return 0.0 + + hour_key = _hour_key(timestamp) + hourly_kw = data.get(hour_key, 0.0) + _log_solar_lookup( + timestamp=timestamp, + hour_key=hour_key, + data=data, + hourly_kw=hourly_kw, + log_rate_limited=log_rate_limited, + ) + + hourly_kw_value = _safe_float(hourly_kw) + if hourly_kw_value is None: + _LOGGER.warning( + "Invalid solar value for %s: %s (type=%s), key=%s", + timestamp.strftime("%H:%M"), + hourly_kw, + type(hourly_kw), + hour_key, + ) + return 0.0 + + _log_solar_value( + timestamp=timestamp, + hour_key=hour_key, + hourly_kw=hourly_kw_value, + log_rate_limited=log_rate_limited, + ) + return hourly_kw_value / 4.0 + + +def get_load_avg_for_timestamp( + timestamp: datetime, + load_avg_sensors: Dict[str, Any], + *, + state: Optional[Any] = None, +) -> float: + """Get load average for a timestamp (kWh per 15min).""" + if not load_avg_sensors: + _log_empty_load_avg(state) + return 0.125 + + day_type = "weekend" if timestamp.weekday() >= 5 else "weekday" + current_hour = timestamp.hour + + for entity_id, sensor_data in load_avg_sensors.items(): + if sensor_data.get("day_type", "") != day_type: + continue + + time_range = _valid_time_range(sensor_data.get("time_range")) + if not time_range: + continue + + start_hour, end_hour = time_range + + if not _is_in_time_range(current_hour, start_hour, end_hour): + continue + + watts = sensor_data.get("value", 0.0) + if watts == 0: + watts = 500.0 + _LOGGER.debug( + "No consumption data yet for %s, using fallback: 500W", + timestamp.strftime("%H:%M"), + ) + return _watts_to_kwh_per_15min(watts, entity_id=entity_id, timestamp=timestamp) + + _LOGGER.debug( + "No load_avg sensor found for %s (%s), searched %s sensors - using fallback 500W", + timestamp.strftime("%H:%M"), + day_type, + len(load_avg_sensors), + ) + return 0.125 diff --git a/custom_components/oig_cloud/battery_forecast/data/load_profiles.py b/custom_components/oig_cloud/battery_forecast/data/load_profiles.py new file mode 100644 index 00000000..d65f1483 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/load_profiles.py @@ -0,0 +1,63 @@ +"""Load profile helpers for battery forecast.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict + +_LOGGER = logging.getLogger(__name__) + + +def get_load_avg_sensors(sensor: Any) -> Dict[str, Any]: + """Collect load_avg sensors mapped with time ranges and day types.""" + if not sensor._hass: + _LOGGER.warning("get_load_avg_sensors: hass not available") + return {} + + from ...sensors.SENSOR_TYPES_STATISTICS import SENSOR_TYPES_STATISTICS + + load_sensors: Dict[str, Any] = {} + + for sensor_type, config in SENSOR_TYPES_STATISTICS.items(): + if not sensor_type.startswith("load_avg_"): + continue + if "time_range" not in config or "day_type" not in config: + continue + + entity_id = f"sensor.oig_{sensor._box_id}_{sensor_type}" + state = sensor._hass.states.get(entity_id) + if not state: + _LOGGER.debug("Sensor %s not found in HA", entity_id) + continue + + if state.state in ["unknown", "unavailable"]: + _LOGGER.debug("Sensor %s is %s", entity_id, state.state) + continue + + try: + value = float(state.state) + except (ValueError, TypeError) as err: + _LOGGER.warning( + "Failed to parse %s value '%s': %s", entity_id, state.state, err + ) + continue + + load_sensors[entity_id] = { + "value": value, + "time_range": config["time_range"], + "day_type": config["day_type"], + } + + _LOGGER.info("Found %s valid load_avg sensors", len(load_sensors)) + if load_sensors: + first_id = next(iter(load_sensors)) + first = load_sensors[first_id] + _LOGGER.info( + "Example: %s, value=%sW, range=%s, day=%s", + first_id, + first["value"], + first["time_range"], + first["day_type"], + ) + + return load_sensors diff --git a/custom_components/oig_cloud/battery_forecast/data/pricing.py b/custom_components/oig_cloud/battery_forecast/data/pricing.py new file mode 100644 index 00000000..b1334747 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/pricing.py @@ -0,0 +1,309 @@ +"""Spot/export price helpers for battery forecast.""" + +from __future__ import annotations + +import logging +from datetime import datetime +from decimal import ROUND_HALF_UP, Decimal +from typing import Any, Dict, List, Optional + +from ...api.ote_api import OteApi +from ...const import OTE_SPOT_PRICE_CACHE_FILE +from ..utils_common import get_tariff_for_datetime + +_LOGGER = logging.getLogger(__name__) + + +def _round_czk(value: Decimal | float) -> float: + """Round CZK values to 2 decimals (half-up).""" + if not isinstance(value, Decimal): + value = Decimal(str(value)) + return float(value.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)) + + +def _get_pricing_config(sensor: Any) -> Dict[str, Any]: + return ( + sensor._config_entry.options + if sensor._config_entry.options + else sensor._config_entry.data + ) + + +def _calculate_commercial_price( + raw_spot_price: float, target_datetime: datetime, config: Dict[str, Any] +) -> float: + pricing_model = config.get("spot_pricing_model", "percentage") + positive_fee_percent = config.get("spot_positive_fee_percent", 15.0) + negative_fee_percent = config.get("spot_negative_fee_percent", 9.0) + fixed_fee_mwh = config.get("spot_fixed_fee_mwh", 0.0) + + if pricing_model == "percentage": + if raw_spot_price >= 0: + return raw_spot_price * (1 + positive_fee_percent / 100.0) + return raw_spot_price * (1 - negative_fee_percent / 100.0) + if pricing_model == "fixed_prices": + fixed_price_vt = config.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = config.get("fixed_commercial_price_nt", fixed_price_vt) + current_tariff = get_tariff_for_datetime(target_datetime, config) + return fixed_price_vt if current_tariff == "VT" else fixed_price_nt + + fixed_fee_kwh = fixed_fee_mwh / 1000.0 + return raw_spot_price + fixed_fee_kwh + + +def _get_distribution_fee(target_datetime: datetime, config: Dict[str, Any]) -> float: + distribution_fee_vt_kwh = config.get("distribution_fee_vt_kwh", 1.50) + distribution_fee_nt_kwh = config.get("distribution_fee_nt_kwh", 1.20) + current_tariff = get_tariff_for_datetime(target_datetime, config) + return ( + distribution_fee_vt_kwh if current_tariff == "VT" else distribution_fee_nt_kwh + ) + + +async def _resolve_spot_data( + sensor: Any, *, price_type: str, fallback_to_spot: bool = False +) -> Dict[str, Any]: + spot_data: Dict[str, Any] = {} + if not sensor.coordinator: + _LOGGER.warning("Coordinator not available in get_spot_price_timeline") + else: + spot_data = sensor.coordinator.data.get("spot_prices", {}) + + if not spot_data: + spot_data = get_spot_data_from_price_sensor(sensor, price_type=price_type) or {} + + if not spot_data and fallback_to_spot: + spot_data = get_spot_data_from_price_sensor(sensor, price_type="spot") or {} + + if not spot_data and sensor._hass: + spot_data = await get_spot_data_from_ote_cache(sensor) or {} + + return spot_data or {} + + +def _get_prices_dict( + spot_data: Dict[str, Any], + *, + key: str, + sensor: Any, + fallback_type: str, +) -> Dict[str, Any]: + prices = spot_data.get(key, {}) + if prices: + return prices + + fallback = get_spot_data_from_price_sensor(sensor, price_type=fallback_type) or {} + prices = fallback.get(key, {}) if isinstance(fallback, dict) else {} + return prices or {} + + +async def _resolve_prices_dict( + sensor: Any, + spot_data: Dict[str, Any], + *, + key: str, + fallback_type: str, +) -> Dict[str, Any]: + prices = _get_prices_dict( + spot_data, key=key, sensor=sensor, fallback_type=fallback_type + ) + if prices: + return prices + if sensor._hass: + cache_data = await get_spot_data_from_ote_cache(sensor) or {} + if isinstance(cache_data, dict): + prices = cache_data.get(key, {}) + return prices or {} + + +def _get_export_config(sensor: Any) -> Dict[str, Any]: + config_entry = sensor.coordinator.config_entry if sensor.coordinator else None + return config_entry.options if config_entry else {} + + +def _get_sensor_component(hass: Any) -> Optional[Any]: + if not hass or not isinstance(hass.data, dict): + return None + entity_components = hass.data.get("entity_components") + if isinstance(entity_components, dict) and entity_components.get("sensor"): + return entity_components.get("sensor") + return hass.data.get("sensor") + + +def _find_entity(component: Any, sensor_id: str) -> Optional[Any]: + if component is None: + return None + get_entity = getattr(component, "get_entity", None) + if callable(get_entity): + entity_obj = get_entity(sensor_id) + if entity_obj is not None: + return entity_obj + entities = getattr(component, "entities", None) + if isinstance(entities, list): + for ent in entities: + if getattr(ent, "entity_id", None) == sensor_id: + return ent + return None + + +def _derive_export_prices( + spot_prices_dict: Dict[str, Any], config: Dict[str, Any] +) -> Dict[str, Any]: + export_model = config.get("export_pricing_model", "percentage") + export_fee = config.get("export_fee_percent", 15.0) + export_fixed_price = config.get("export_fixed_price", 2.50) + + export_prices: Dict[str, Any] = {} + for timestamp_str, spot_price in spot_prices_dict.items(): + if export_model == "percentage": + export_price = spot_price * (1 - export_fee / 100) + elif export_model == "fixed_prices": + export_price = export_fixed_price + else: + export_price = max(0, spot_price - export_fee) + export_prices[timestamp_str] = export_price + return export_prices + + +def calculate_final_spot_price( + sensor: Any, raw_spot_price: float, target_datetime: datetime +) -> float: + """Return final spot price including fees, distribution, and VAT.""" + config = _get_pricing_config(sensor) + vat_rate = config.get("vat_rate", 21.0) + commercial_price = _calculate_commercial_price( + raw_spot_price, target_datetime, config + ) + distribution_fee = _get_distribution_fee(target_datetime, config) + + price_without_vat = Decimal(str(commercial_price)) + Decimal(str(distribution_fee)) + vat_multiplier = Decimal("1") + (Decimal(str(vat_rate)) / Decimal("100")) + final_price = price_without_vat * vat_multiplier + return _round_czk(final_price) + + +def _build_price_timeline( + price_dict: Dict[str, Any], *, label: str +) -> List[Dict[str, Any]]: + timeline: List[Dict[str, Any]] = [] + for timestamp_str, price in sorted(price_dict.items()): + try: + datetime.fromisoformat(timestamp_str) + timeline.append({"time": timestamp_str, "price": price}) + except ValueError: + _LOGGER.warning("Invalid timestamp in %s prices: %s", label, timestamp_str) + continue + return timeline + + +async def get_spot_price_timeline(sensor: Any) -> List[Dict[str, Any]]: + """Return 15-minute spot prices with fees applied.""" + spot_data = await _resolve_spot_data(sensor, price_type="spot") + if not spot_data: + _LOGGER.warning("No spot price data available for forecast") + return [] + + raw_prices_dict = await _resolve_prices_dict( + sensor, spot_data, key="prices15m_czk_kwh", fallback_type="spot" + ) + if not raw_prices_dict: + _LOGGER.warning("No prices15m_czk_kwh in spot price data") + return [] + + computed_prices: Dict[str, Any] = {} + for timestamp_str, raw_spot_price in raw_prices_dict.items(): + try: + target_datetime = datetime.fromisoformat(timestamp_str) + computed_prices[timestamp_str] = calculate_final_spot_price( + sensor, raw_spot_price, target_datetime + ) + except ValueError: + _LOGGER.warning("Invalid timestamp in spot prices: %s", timestamp_str) + continue + + timeline = _build_price_timeline(computed_prices, label="spot") + + _LOGGER.info( + "Loaded %s spot price points from coordinator (final price with fees)", + len(timeline), + ) + return timeline + + +async def get_export_price_timeline(sensor: Any) -> List[Dict[str, Any]]: + """Return 15-minute export prices.""" + spot_data = await _resolve_spot_data( + sensor, price_type="export", fallback_to_spot=True + ) + if not spot_data: + _LOGGER.warning("No spot price data available for export timeline") + return [] + + export_prices_dict = await _resolve_prices_dict( + sensor, spot_data, key="export_prices15m_czk_kwh", fallback_type="export" + ) + if not export_prices_dict: + _LOGGER.info("No direct export prices, calculating from spot prices") + spot_prices_dict = await _resolve_prices_dict( + sensor, spot_data, key="prices15m_czk_kwh", fallback_type="spot" + ) + if not spot_prices_dict: + _LOGGER.warning("No prices15m_czk_kwh for export price calculation") + return [] + + export_prices_dict = _derive_export_prices( + spot_prices_dict, _get_export_config(sensor) + ) + + timeline = _build_price_timeline(export_prices_dict, label="export") + + _LOGGER.info("Loaded %s export price points from coordinator", len(timeline)) + return timeline + + +def get_spot_data_from_price_sensor( + sensor: Any, *, price_type: str +) -> Optional[Dict[str, Any]]: + """Read spot price data from the price sensor entity.""" + hass = sensor._hass + if not hass: + return None + + if price_type == "export": + sensor_id = f"sensor.oig_{sensor._box_id}_export_price_current_15min" + else: + sensor_id = f"sensor.oig_{sensor._box_id}_spot_price_current_15min" + + try: + component = _get_sensor_component(hass) + entity_obj = _find_entity(component, sensor_id) + + if entity_obj is None: + return None + + spot_data = getattr(entity_obj, "_spot_data_15min", None) + if isinstance(spot_data, dict) and spot_data: + return spot_data + except Exception as err: + _LOGGER.debug("Failed to read spot data from %s: %s", sensor_id, err) + + return None + + +async def get_spot_data_from_ote_cache(sensor: Any) -> Optional[Dict[str, Any]]: + """Load spot prices via OTE cache storage.""" + hass = sensor._hass + if not hass: + return None + try: + cache_path = hass.config.path(".storage", OTE_SPOT_PRICE_CACHE_FILE) + ote = OteApi(cache_path=cache_path) + try: + await ote.async_load_cached_spot_prices() + data = await ote.get_spot_prices() + return data if isinstance(data, dict) and data else None + finally: + await ote.close() + except Exception as err: + _LOGGER.debug("Failed to load OTE spot prices from cache: %s", err) + return None diff --git a/custom_components/oig_cloud/battery_forecast/data/solar_forecast.py b/custom_components/oig_cloud/battery_forecast/data/solar_forecast.py new file mode 100644 index 00000000..142b05c0 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/data/solar_forecast.py @@ -0,0 +1,129 @@ +"""Solar forecast helpers for battery forecast.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + + +def get_solar_forecast(sensor: Any) -> Dict[str, Any]: + """Return solar forecast data grouped by day.""" + if not _solar_forecast_enabled(sensor): + return {} + + sensor_id = f"sensor.oig_{sensor._box_id}_solar_forecast" + state = sensor._hass.states.get(sensor_id) + + if not state: + fallback = _forecast_from_cached(sensor, sensor_id) + if fallback is not None: + return fallback + _log_forecast_missing(sensor, sensor_id) + return {} + + if not state.attributes: + _log_forecast_no_attrs(sensor, sensor_id) + return {} + + return _forecast_from_state(sensor, sensor_id, state.attributes) + + +def _solar_forecast_enabled(sensor: Any) -> bool: + if not sensor._hass: + return False + return bool( + sensor._config_entry + and sensor._config_entry.options.get("enable_solar_forecast", False) + ) + + +def _forecast_from_cached(sensor: Any, sensor_id: str) -> Optional[Dict[str, Any]]: + cached = getattr(sensor.coordinator, "solar_forecast_data", None) + total_hourly = cached.get("total_hourly") if isinstance(cached, dict) else None + if not isinstance(total_hourly, dict) or not total_hourly: + return None + + today = dt_util.now().date() + tomorrow = today + timedelta(days=1) + today_total: Dict[str, float] = {} + tomorrow_total: Dict[str, float] = {} + for hour_str, watts in total_hourly.items(): + try: + hour_dt = datetime.fromisoformat(hour_str) + kw = round(float(watts) / 1000.0, 2) + if hour_dt.date() == today: + today_total[hour_str] = kw + elif hour_dt.date() == tomorrow: + tomorrow_total[hour_str] = kw + except Exception: # nosec B112 + continue + + sensor._log_rate_limited( + "solar_forecast_fallback", + "debug", + "Solar forecast entity missing; using coordinator cached data (%s)", + sensor_id, + cooldown_s=900.0, + ) + return {"today": today_total, "tomorrow": tomorrow_total} + + +def _log_forecast_missing(sensor: Any, sensor_id: str) -> None: + sensor._log_rate_limited( + "solar_forecast_missing", + "debug", + "Solar forecast sensor not found yet: %s", + sensor_id, + cooldown_s=900.0, + ) + + +def _log_forecast_no_attrs(sensor: Any, sensor_id: str) -> None: + sensor._log_rate_limited( + "solar_forecast_no_attrs", + "debug", + "Solar forecast sensor has no attributes yet: %s", + sensor_id, + cooldown_s=900.0, + ) + + +def _forecast_from_state( + sensor: Any, sensor_id: str, attributes: Dict[str, Any] +) -> Dict[str, Any]: + today = attributes.get("today_hourly_total_kw", {}) + tomorrow = attributes.get("tomorrow_hourly_total_kw", {}) + sensor._log_rate_limited( + "solar_forecast_loaded", + "debug", + "Solar forecast loaded: today=%d tomorrow=%d (%s)", + len(today) if isinstance(today, dict) else 0, + len(tomorrow) if isinstance(tomorrow, dict) else 0, + sensor_id, + cooldown_s=1800.0, + ) + return {"today": today, "tomorrow": tomorrow} + + +def get_solar_forecast_strings(sensor: Any) -> Dict[str, Any]: + """Return per-string solar forecast data.""" + if not sensor._hass: + return {} + + sensor_id = f"sensor.oig_{sensor._box_id}_solar_forecast" + state = sensor._hass.states.get(sensor_id) + + if not state or not state.attributes: + return {} + + return { + "today_string1_kw": state.attributes.get("today_hourly_string1_kw", {}), + "today_string2_kw": state.attributes.get("today_hourly_string2_kw", {}), + "tomorrow_string1_kw": state.attributes.get("tomorrow_hourly_string1_kw", {}), + "tomorrow_string2_kw": state.attributes.get("tomorrow_hourly_string2_kw", {}), + } diff --git a/custom_components/oig_cloud/battery_forecast/physics/__init__.py b/custom_components/oig_cloud/battery_forecast/physics/__init__.py new file mode 100644 index 00000000..0113c204 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/physics/__init__.py @@ -0,0 +1,13 @@ +"""Physics layer for battery simulation. + +This package contains the core physics simulation for CBB battery modes. +""" + +from ...physics import simulate_interval +from .interval_simulator import IntervalResult, IntervalSimulator + +__all__ = [ + "IntervalSimulator", + "IntervalResult", + "simulate_interval", +] diff --git a/custom_components/oig_cloud/battery_forecast/physics/interval_simulator.py b/custom_components/oig_cloud/battery_forecast/physics/interval_simulator.py new file mode 100644 index 00000000..a9933bd2 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/physics/interval_simulator.py @@ -0,0 +1,212 @@ +"""Interval Simulator - core physics for battery simulation. + +This module provides a stateless simulator for single interval calculations. +All CBB modes are implemented according to CBB_MODES_DEFINITIVE.md: + +HOME I (mode=0): + - During day: Solar → Load → Battery, deficit from Battery + - At night: Battery discharges to cover load (same as II, III) + - Export: Only when battery is 100% full + +HOME II (mode=1): + - During day: Solar → Load → Battery, deficit from GRID (battery untouched) + - At night: Battery discharges (same as I, III) + - Export: Only when battery is 100% full + +HOME III (mode=2): + - During day: ALL solar → Battery, load from GRID + - At night: Battery discharges (same as I, II) + - Export: Only when battery is 100% full + +HOME UPS (mode=3): + - Solar → Battery (DC/DC) + - Load from GRID + - Grid → Battery (AC/DC) charging enabled + - Export: Only when battery is 100% full +""" + +from dataclasses import dataclass +from ...physics import simulate_interval +from ..config import SimulatorConfig +from ..types import CBB_MODE_HOME_I, CBB_MODE_HOME_II + + +@dataclass(frozen=True) +class IntervalResult: + """Result of simulating a single interval. + + All energy values are in kWh for the interval duration. + """ + + battery_end: float # Battery SoC at end of interval (kWh) + grid_import: float # Energy imported from grid (kWh) + grid_export: float # Energy exported to grid (kWh) + battery_charge: float # Energy charged to battery (kWh) + battery_discharge: float # Energy discharged from battery (kWh) + solar_used_direct: float # Solar used directly for load (kWh) + solar_to_battery: float # Solar charged to battery (kWh) + solar_exported: float # Solar exported to grid (kWh) + solar_curtailed: float # Solar that couldn't be used (kWh) + + @property + def net_battery_change(self) -> float: + """Net change in battery (positive = charge, negative = discharge).""" + return self.battery_charge - self.battery_discharge + + @property + def net_grid_flow(self) -> float: + """Net grid flow (positive = import, negative = export).""" + return self.grid_import - self.grid_export + + +class IntervalSimulator: + """Stateless physics simulator for single intervals. + + This class implements the core physics for all CBB modes. + It is designed to be: + - Stateless: All state passed as arguments + - Pure: Same inputs always produce same outputs + - Efficient: No logging or side effects + + Example: + config = SimulatorConfig(max_capacity_kwh=15.36, min_capacity_kwh=3.07) + simulator = IntervalSimulator(config) + + result = simulator.simulate( + battery_start=10.0, + mode=CBB_MODE_HOME_I, + solar_kwh=2.0, + load_kwh=0.5, + ) + print(f"Battery: {result.battery_end:.2f} kWh") + """ + + def __init__(self, config: SimulatorConfig) -> None: + """Initialize simulator with configuration. + + Args: + config: SimulatorConfig with battery parameters + """ + self.config = config + + # Cache commonly used values + self._max = config.max_capacity_kwh + self._min = config.min_capacity_kwh + self._dc_dc = config.dc_dc_efficiency + self._dc_ac = config.dc_ac_efficiency + self._ac_dc = config.ac_dc_efficiency + self._max_charge = config.max_charge_per_interval_kwh + + def simulate( + self, + battery_start: float, + mode: int, + solar_kwh: float, + load_kwh: float, + force_charge: bool = False, + ) -> IntervalResult: + """Simulate a single interval. + + Args: + battery_start: Battery level at interval start (kWh) + mode: CBB mode (0=HOME_I, 1=HOME_II, 2=HOME_III, 3=HOME_UPS) + solar_kwh: Solar production this interval (kWh) + load_kwh: Load consumption this interval (kWh) + force_charge: Force grid charging (for balancing) + + Returns: + IntervalResult with all energy flows + """ + # Clamp inputs to valid range + battery_start = max(0, min(battery_start, self._max)) + solar_kwh = max(0, solar_kwh) + load_kwh = max(0, load_kwh) + + # Canonical physics lives in shared simulate_interval(). + # Note: force_charge is currently ignored because UPS physics always charges. + charge_efficiency = self._ac_dc + discharge_efficiency = self._dc_ac + + flows = simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_start, + capacity_kwh=self._max, + hw_min_capacity_kwh=self._min, + charge_efficiency=charge_efficiency, + discharge_efficiency=discharge_efficiency, + home_charge_rate_kwh_15min=self._max_charge, + ) + + if mode in (CBB_MODE_HOME_I, CBB_MODE_HOME_II): + solar_used_direct = min(solar_kwh, load_kwh) + else: + solar_used_direct = 0.0 + + solar_to_battery = flows.solar_charge_kwh + solar_exported = flows.grid_export_kwh + solar_curtailed = max( + 0.0, + solar_kwh - solar_used_direct - solar_to_battery - solar_exported, + ) + + return IntervalResult( + battery_end=flows.new_soc_kwh, + grid_import=flows.grid_import_kwh, + grid_export=flows.grid_export_kwh, + battery_charge=flows.battery_charge_kwh * charge_efficiency, + battery_discharge=flows.battery_discharge_kwh, + solar_used_direct=solar_used_direct, + solar_to_battery=solar_to_battery, + solar_exported=solar_exported, + solar_curtailed=solar_curtailed, + ) + + def calculate_cost( + self, + result: IntervalResult, + spot_price: float, + export_price: float, + ) -> float: + """Calculate net cost for an interval result. + + Args: + result: IntervalResult from simulation + spot_price: Buy price (CZK/kWh) + export_price: Sell price (CZK/kWh) + + Returns: + Net cost in CZK (positive = cost, negative = revenue) + """ + import_cost = result.grid_import * spot_price + export_revenue = result.grid_export * export_price + return import_cost - export_revenue + + +# ============================================================================= +# Convenience factory function +# ============================================================================= + + +def create_simulator( + max_capacity: float = 15.36, + min_capacity: float = 3.07, + **kwargs: float, +) -> IntervalSimulator: + """Create an IntervalSimulator with given parameters. + + Args: + max_capacity: Maximum battery capacity (kWh) + min_capacity: HW minimum battery capacity (kWh) + **kwargs: Additional SimulatorConfig parameters + + Returns: + Configured IntervalSimulator + """ + config = SimulatorConfig( + max_capacity_kwh=max_capacity, + min_capacity_kwh=min_capacity, + **kwargs, + ) + return IntervalSimulator(config) diff --git a/custom_components/oig_cloud/battery_forecast/planning/__init__.py b/custom_components/oig_cloud/battery_forecast/planning/__init__.py new file mode 100644 index 00000000..cd28b701 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/__init__.py @@ -0,0 +1 @@ +"""Planning helpers for battery forecast.""" diff --git a/custom_components/oig_cloud/battery_forecast/planning/auto_switch.py b/custom_components/oig_cloud/battery_forecast/planning/auto_switch.py new file mode 100644 index 00000000..34083789 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/auto_switch.py @@ -0,0 +1,574 @@ +"""Auto-switch helpers extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Tuple, Union + +from homeassistant.helpers.event import async_call_later, async_track_point_in_time +from homeassistant.util import dt as dt_util + +try: + from homeassistant.helpers.event import ( + async_track_time_interval as _async_track_time_interval, + ) # type: ignore +except Exception: # pragma: no cover + _async_track_time_interval = None + +from ...const import CONF_AUTO_MODE_SWITCH, DOMAIN +from ..types import ( + CBB_MODE_SERVICE_MAP, + SERVICE_MODE_HOME_1, + SERVICE_MODE_HOME_2, + SERVICE_MODE_HOME_3, + SERVICE_MODE_HOME_UPS, +) +from ..utils_common import parse_timeline_timestamp + +_LOGGER = logging.getLogger(__name__) +MIN_AUTO_SWITCH_INTERVAL_MINUTES = 30 + + +def _get_last_mode_change_time(sensor: Any) -> Optional[datetime]: + if not sensor._hass: # pylint: disable=protected-access + return None + if not hasattr(sensor._hass, "states"): # pylint: disable=protected-access + return None + entity_id = ( + f"sensor.oig_{sensor._box_id}_box_prms_mode" # pylint: disable=protected-access + ) + state = sensor._hass.states.get(entity_id) # pylint: disable=protected-access + if not state: + return None + try: + dt = state.last_changed or state.last_updated + if not isinstance(dt, datetime): + return None + if dt.tzinfo is None: + dt = dt.replace(tzinfo=dt_util.UTC) + return dt_util.as_local(dt) + except Exception: + return None + + +def auto_mode_switch_enabled(sensor: Any) -> bool: + options = ( + (sensor._config_entry.options or {}) if sensor._config_entry else {} + ) # pylint: disable=protected-access + return bool(options.get(CONF_AUTO_MODE_SWITCH, False)) + + +def normalize_service_mode( + sensor: Any, mode_value: Optional[Union[str, int]] +) -> Optional[str]: + _ = sensor + if mode_value is None: + return None + if isinstance(mode_value, int): + return CBB_MODE_SERVICE_MAP.get(mode_value) + + mode_str = str(mode_value).strip() + if not mode_str: + return None + upper = mode_str.upper() + legacy_map = { + "HOME I": SERVICE_MODE_HOME_1, + "HOME 1": SERVICE_MODE_HOME_1, + "HOME II": SERVICE_MODE_HOME_2, + "HOME 2": SERVICE_MODE_HOME_2, + "HOME III": SERVICE_MODE_HOME_3, + "HOME 3": SERVICE_MODE_HOME_3, + "HOME UPS": SERVICE_MODE_HOME_UPS, + } + if upper in legacy_map: + return legacy_map[upper] + + title = mode_str.title() + if title in legacy_map.values(): # pragma: no cover - unreachable with current map + return title + + return None + + +def get_current_box_mode(sensor: Any) -> Optional[str]: + if not sensor._hass: # pylint: disable=protected-access + return None + entity_id = ( + f"sensor.oig_{sensor._box_id}_box_prms_mode" # pylint: disable=protected-access + ) + state = sensor._hass.states.get(entity_id) # pylint: disable=protected-access + if not state or not state.state: + return None + return normalize_service_mode(sensor, state.state) + + +def cancel_auto_switch_schedule(sensor: Any) -> None: + if sensor._auto_switch_handles: # pylint: disable=protected-access + for unsub in sensor._auto_switch_handles: # pylint: disable=protected-access + try: + unsub() + except Exception as err: + _LOGGER.debug("Failed to cancel scheduled auto switch: %s", err) + sensor._auto_switch_handles = [] # pylint: disable=protected-access + clear_auto_switch_retry(sensor) + + +def clear_auto_switch_retry(sensor: Any) -> None: + if not sensor._auto_switch_retry_unsub: # pylint: disable=protected-access + return + try: + sensor._auto_switch_retry_unsub() # pylint: disable=protected-access + except Exception as err: + _LOGGER.debug("Failed to cancel delayed auto switch sync: %s", err) + finally: + sensor._auto_switch_retry_unsub = None # pylint: disable=protected-access + + +def start_auto_switch_watchdog(sensor: Any) -> None: + """Ensure periodic enforcement of planned modes is running.""" + if ( + not sensor._hass # pylint: disable=protected-access + or sensor._auto_switch_watchdog_unsub # pylint: disable=protected-access + or not auto_mode_switch_enabled(sensor) + ): + return + + if _async_track_time_interval is None: + _LOGGER.debug( + "[AutoModeSwitch] async_track_time_interval unavailable; watchdog disabled" + ) + return + + async def _tick(now: datetime) -> None: + await auto_switch_watchdog_tick(sensor, now) + + sensor._auto_switch_watchdog_unsub = ( + _async_track_time_interval( # pylint: disable=protected-access + sensor._hass, # pylint: disable=protected-access + _tick, + sensor._auto_switch_watchdog_interval, # pylint: disable=protected-access + ) + ) + _LOGGER.debug( + "[AutoModeSwitch] Watchdog started (interval=%ss)", + int( + sensor._auto_switch_watchdog_interval.total_seconds() + ), # pylint: disable=protected-access + ) + + +def stop_auto_switch_watchdog(sensor: Any) -> None: + """Stop watchdog if running.""" + if sensor._auto_switch_watchdog_unsub: # pylint: disable=protected-access + sensor._auto_switch_watchdog_unsub() # pylint: disable=protected-access + sensor._auto_switch_watchdog_unsub = None # pylint: disable=protected-access + _LOGGER.debug("[AutoModeSwitch] Watchdog stopped") + + +async def auto_switch_watchdog_tick(sensor: Any, now: datetime) -> None: + """Periodic check that correct mode is applied.""" + if not auto_mode_switch_enabled(sensor): + stop_auto_switch_watchdog(sensor) + return + + timeline, _ = get_mode_switch_timeline(sensor) + if not timeline: + return + + desired_mode = get_planned_mode_for_time(sensor, now, timeline) + if not desired_mode: + return + + current_mode = get_current_box_mode(sensor) + if current_mode == desired_mode: + return + + _LOGGER.warning( + "[AutoModeSwitch] Watchdog correcting mode from %s -> %s", + current_mode or "unknown", + desired_mode, + ) + await ensure_current_mode(sensor, desired_mode, "watchdog enforcement") + + +def get_planned_mode_for_time( + sensor: Any, reference_time: datetime, timeline: List[Dict[str, Any]] +) -> Optional[str]: + """Return planned mode for the interval covering reference_time.""" + planned_mode: Optional[str] = None + + for interval in timeline: + timestamp = interval.get("time") or interval.get("timestamp") + mode_label = normalize_service_mode( + sensor, interval.get("mode_name") + ) or normalize_service_mode(sensor, interval.get("mode")) + if not timestamp or not mode_label: + continue + + start_dt = parse_timeline_timestamp(timestamp) + if not start_dt: + continue + + if start_dt <= reference_time: + planned_mode = mode_label + continue + + break + + return planned_mode + + +def schedule_auto_switch_retry(sensor: Any, delay_seconds: float) -> None: + if not sensor._hass or delay_seconds <= 0: # pylint: disable=protected-access + return + if sensor._auto_switch_retry_unsub: # pylint: disable=protected-access + return + + def _retry(now: datetime) -> None: + sensor._auto_switch_retry_unsub = None # pylint: disable=protected-access + sensor._create_task_threadsafe( + update_auto_switch_schedule, sensor + ) # pylint: disable=protected-access + + sensor._auto_switch_retry_unsub = ( + async_call_later( # pylint: disable=protected-access + sensor._hass, delay_seconds, _retry # pylint: disable=protected-access + ) + ) + log_rl = getattr(sensor, "_log_rate_limited", None) + if log_rl: + log_rl( + "auto_mode_switch_delay_sync", + "debug", + "[AutoModeSwitch] Delaying auto-switch sync by %.0f seconds", + delay_seconds, + cooldown_s=60.0, + ) + + +def get_mode_switch_offset( + sensor: Any, from_mode: Optional[str], to_mode: str +) -> float: + """Return reaction-time offset based on shield tracker statistics.""" + fallback = 180.0 + if ( + sensor._config_entry and sensor._config_entry.options + ): # pylint: disable=protected-access + fallback = float( + sensor._config_entry.options.get( # pylint: disable=protected-access + "auto_mode_switch_lead_seconds", + sensor._config_entry.options.get( # pylint: disable=protected-access + "autonomy_switch_lead_seconds", 180.0 + ), + ) + ) + if ( + not from_mode or not sensor._hass or not sensor._config_entry + ): # pylint: disable=protected-access + return fallback + + try: + entry = sensor._hass.data.get(DOMAIN, {}).get( + sensor._config_entry.entry_id, {} + ) # pylint: disable=protected-access + service_shield = entry.get("service_shield") + mode_tracker = getattr(service_shield, "mode_tracker", None) + if not mode_tracker: + return fallback + + offset_seconds = mode_tracker.get_offset_for_scenario(from_mode, to_mode) + if offset_seconds is None or offset_seconds <= 0: + return fallback + + return float(offset_seconds) + except Exception as err: # pragma: no cover - defensive + _LOGGER.warning( + "[AutoModeSwitch] Failed to read mode switch offset %s→%s: %s", + from_mode, + to_mode, + err, + ) + return fallback + + +def get_service_shield(sensor: Any) -> Optional[Any]: + """Safe helper to get ServiceShield instance.""" + if not sensor._hass or not sensor._config_entry: # pylint: disable=protected-access + return None + + entry = sensor._hass.data.get(DOMAIN, {}).get( + sensor._config_entry.entry_id, {} + ) # pylint: disable=protected-access + return entry.get("service_shield") + + +async def execute_mode_change(sensor: Any, target_mode: str, reason: str) -> None: + if ( + not sensor._hass or not sensor._side_effects_enabled + ): # pylint: disable=protected-access + return + + now = dt_util.now() + service_shield = get_service_shield(sensor) + if service_shield and hasattr(service_shield, "has_pending_mode_change"): + if service_shield.has_pending_mode_change(target_mode): + _LOGGER.debug( + "[AutoModeSwitch] Skipping %s (%s) - shield already processing mode change", + target_mode, + reason, + ) + return + + if ( + sensor._last_auto_switch_request # pylint: disable=protected-access + and sensor._last_auto_switch_request[0] + == target_mode # pylint: disable=protected-access + and (now - sensor._last_auto_switch_request[1]).total_seconds() + < 90 # pylint: disable=protected-access + ): + _LOGGER.debug( + "[AutoModeSwitch] Skipping duplicate request for %s (%s)", + target_mode, + reason, + ) + return + + try: + await sensor._hass.services.async_call( # pylint: disable=protected-access + DOMAIN, + "set_box_mode", + { + "mode": target_mode, + "acknowledgement": True, + }, + blocking=False, + ) + sensor._last_auto_switch_request = ( + target_mode, + now, + ) # pylint: disable=protected-access + _LOGGER.info("[AutoModeSwitch] Requested mode '%s' (%s)", target_mode, reason) + except Exception as err: + _LOGGER.error( + "[AutoModeSwitch] Failed to switch to %s: %s", + target_mode, + err, + exc_info=True, + ) + + +async def ensure_current_mode(sensor: Any, desired_mode: str, reason: str) -> None: + current_mode = get_current_box_mode(sensor) + if current_mode == desired_mode: + _LOGGER.debug( + "[AutoModeSwitch] Mode already %s (%s), no action", desired_mode, reason + ) + return + last_changed = _get_last_mode_change_time(sensor) + if last_changed: + now = dt_util.now() + if (now - last_changed) < timedelta(minutes=MIN_AUTO_SWITCH_INTERVAL_MINUTES): + _LOGGER.info( + "[AutoModeSwitch] Skipping mode change to %s (%s) - min interval not met", + desired_mode, + reason, + ) + return + await execute_mode_change(sensor, desired_mode, reason) + + +def get_mode_switch_timeline(sensor: Any) -> Tuple[List[Dict[str, Any]], str]: + """Return the best available timeline for automatic mode switching.""" + timeline = getattr(sensor, "_timeline_data", None) or [] + if timeline: + return timeline, "hybrid" + return [], "none" + + +def _iter_timeline_entries( + sensor: Any, timeline: List[Dict[str, Any]] +) -> List[Tuple[datetime, str]]: + entries: List[Tuple[datetime, str]] = [] + for interval in timeline: + timestamp = interval.get("time") or interval.get("timestamp") + mode_label = normalize_service_mode( + sensor, interval.get("mode_name") + ) or normalize_service_mode(sensor, interval.get("mode")) + if not timestamp or not mode_label: + continue + + start_dt = parse_timeline_timestamp(timestamp) + if not start_dt: + continue + entries.append((start_dt, mode_label)) + return entries + + +def _build_schedule_events( + sensor: Any, + *, + timeline: List[Dict[str, Any]], + now: datetime, + last_mode_change: Optional[datetime], +) -> Tuple[Optional[str], List[Tuple[datetime, str, Optional[str]]]]: + current_mode: Optional[str] = None + last_mode: Optional[str] = None + scheduled_events: List[Tuple[datetime, str, Optional[str]]] = [] + last_switch_time = last_mode_change or now + min_interval = timedelta(minutes=MIN_AUTO_SWITCH_INTERVAL_MINUTES) + + for start_dt, mode_label in _iter_timeline_entries(sensor, timeline): + if start_dt <= now: + current_mode = mode_label + last_mode = mode_label + continue + + if last_mode_change and start_dt < (last_mode_change + min_interval): + current_mode = mode_label + last_mode = mode_label + continue + + if mode_label == last_mode: + continue + + previous_mode = last_mode + if not _is_min_interval_elapsed(start_dt, last_switch_time, min_interval): + continue + + last_mode = mode_label + last_switch_time = start_dt + scheduled_events.append((start_dt, mode_label, previous_mode)) + + return current_mode, scheduled_events + + +def _is_min_interval_elapsed( + start_dt: datetime, last_switch_time: datetime, min_interval: timedelta +) -> bool: + try: + return (start_dt - last_switch_time) >= min_interval + except Exception: + return True + + +def _startup_delay_seconds(sensor: Any, now: datetime) -> Optional[float]: + ready_at = getattr(sensor, "_auto_switch_ready_at", None) + if not ready_at: + return None + if now >= ready_at: + return None + return (ready_at - now).total_seconds() + + +async def update_auto_switch_schedule(sensor: Any) -> None: + """Sync scheduled set_box_mode calls with planned timeline.""" + cancel_auto_switch_schedule(sensor) + + if not _auto_switch_is_ready(sensor): + stop_auto_switch_watchdog(sensor) + return + + now = dt_util.now() + last_mode_change = _get_last_mode_change_time(sensor) + if last_mode_change: + _LOGGER.debug( + "[AutoModeSwitch] Last mode change at %s", + last_mode_change.isoformat(), + ) + + if _handle_startup_delay(sensor, now): + return + + timeline, timeline_source = get_mode_switch_timeline(sensor) + if not timeline: + _LOGGER.debug( + "[AutoModeSwitch] No timeline available for auto switching (source=%s)", + timeline_source, + ) + return + + current_mode, scheduled_events = _build_schedule_events( + sensor, timeline=timeline, now=now, last_mode_change=last_mode_change + ) + + if current_mode: + await ensure_current_mode(sensor, current_mode, "current planned block") + + if not scheduled_events: + _LOGGER.debug("[AutoModeSwitch] No upcoming mode changes to schedule") + start_auto_switch_watchdog(sensor) + return + + _schedule_auto_switch_events(sensor, scheduled_events, now) + start_auto_switch_watchdog(sensor) + + +def _auto_switch_is_ready(sensor: Any) -> bool: + if not sensor._hass or not auto_mode_switch_enabled(sensor): + _LOGGER.debug("[AutoModeSwitch] Auto mode switching disabled") + return False + return True + + +def _handle_startup_delay(sensor: Any, now: datetime) -> bool: + wait_seconds = _startup_delay_seconds(sensor, now) + if wait_seconds is None: + sensor._auto_switch_ready_at = None # pylint: disable=protected-access + clear_auto_switch_retry(sensor) + return False + + log_rl = getattr(sensor, "_log_rate_limited", None) + if log_rl: + log_rl( + "auto_mode_switch_startup_delay", + "debug", + "[AutoModeSwitch] Startup delay active (%.0fs remaining)", + wait_seconds, + cooldown_s=60.0, + ) + schedule_auto_switch_retry(sensor, wait_seconds) + return True + + +def _schedule_auto_switch_events( + sensor: Any, + scheduled_events: list[tuple[datetime, str, Optional[str]]], + now: datetime, +) -> None: + now_dt = _coerce_datetime(now) + for when, mode, _prev_mode in scheduled_events: + when_dt = _coerce_datetime(when) + adjusted_when = ( + when_dt + if _timestamp(when) > _timestamp(now) + else now_dt + timedelta(seconds=1) + ) + + async def _callback(event_time: datetime, desired_mode: str = mode) -> None: + await execute_mode_change( + sensor, desired_mode, f"scheduled {event_time.isoformat()}" + ) + + unsub = async_track_point_in_time( + sensor._hass, _callback, adjusted_when + ) # pylint: disable=protected-access + sensor._auto_switch_handles.append(unsub) # pylint: disable=protected-access + _LOGGER.info( + "[AutoModeSwitch] Scheduled switch to %s at %s", + mode, + adjusted_when.isoformat(), + ) + + +def _coerce_datetime(value: datetime) -> datetime: + """Normalize datetime-like values to real datetime for comparisons.""" + if isinstance(value, datetime): + return datetime.fromtimestamp(value.timestamp(), tz=value.tzinfo) + return value + + +def _timestamp(value: datetime) -> float: + if isinstance(value, datetime): + return value.timestamp() + return 0.0 diff --git a/custom_components/oig_cloud/battery_forecast/planning/charging_helpers.py b/custom_components/oig_cloud/battery_forecast/planning/charging_helpers.py new file mode 100644 index 00000000..dcbe557a --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/charging_helpers.py @@ -0,0 +1,84 @@ +"""Charging plan helpers for battery forecast.""" + +from __future__ import annotations + +from typing import Any, Dict, List + +from ..types import MODE_LABEL_HOME_I, MODE_LABEL_HOME_UPS +from . import charging_plan as charging_plan_module +from .charging_plan import EconomicChargingPlanConfig + + +def economic_charging_plan( + sensor: Any, + *, + timeline_data: List[Dict[str, Any]], + min_capacity_kwh: float, + effective_minimum_kwh: float, + target_capacity_kwh: float, + max_charging_price: float, + min_savings_margin: float, + charging_power_kw: float, + max_capacity: float, + iso_tz_offset: str, + target_reason: str = "default", +) -> List[Dict[str, Any]]: + """Build economic charging plan and store metrics.""" + config = sensor._config_entry.options or sensor._config_entry.data + min_capacity_percent = config.get("min_capacity_percent", 20.0) + min_capacity_floor = (min_capacity_percent / 100.0) * max_capacity + efficiency = sensor._get_battery_efficiency() + + plan = EconomicChargingPlanConfig( + min_capacity_kwh=min_capacity_kwh, + min_capacity_floor=min_capacity_floor, + effective_minimum_kwh=effective_minimum_kwh, + target_capacity_kwh=target_capacity_kwh, + max_charging_price=max_charging_price, + min_savings_margin=min_savings_margin, + charging_power_kw=charging_power_kw, + max_capacity=max_capacity, + battery_efficiency=efficiency, + config=config, + iso_tz_offset=iso_tz_offset, + mode_label_home_ups=MODE_LABEL_HOME_UPS, + mode_label_home_i=MODE_LABEL_HOME_I, + target_reason=target_reason, + ) + + timeline, metrics = charging_plan_module.economic_charging_plan( + timeline_data=timeline_data, + plan=plan, + ) + if metrics: + sensor._charging_metrics = metrics + + return timeline + + +def smart_charging_plan( + sensor: Any, + *, + timeline: List[Dict[str, Any]], + min_capacity: float, + target_capacity: float, + max_price: float, + charging_power_kw: float, + max_capacity: float, +) -> List[Dict[str, Any]]: + """Build smart charging plan and store metrics.""" + timeline_result, metrics = charging_plan_module.smart_charging_plan( + timeline=timeline, + min_capacity=min_capacity, + target_capacity=target_capacity, + max_price=max_price, + charging_power_kw=charging_power_kw, + max_capacity=max_capacity, + efficiency=sensor._get_battery_efficiency(), + mode_label_home_ups=MODE_LABEL_HOME_UPS, + mode_label_home_i=MODE_LABEL_HOME_I, + ) + if metrics: + sensor._charging_metrics = metrics + + return timeline_result diff --git a/custom_components/oig_cloud/battery_forecast/planning/charging_plan.py b/custom_components/oig_cloud/battery_forecast/planning/charging_plan.py new file mode 100644 index 00000000..e6c0d1cc --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/charging_plan.py @@ -0,0 +1,601 @@ +"""Charging plan helpers extracted from the battery forecast sensor.""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple + +from .charging_plan_utils import ( + calculate_minimum_charge, + calculate_protection_requirement, + get_candidate_intervals, + recalculate_timeline_from_index, + simulate_forward, +) + +_LOGGER = logging.getLogger(__name__) + + +@dataclass(slots=True) +class EconomicChargingPlanConfig: + min_capacity_kwh: float + min_capacity_floor: float + effective_minimum_kwh: float + target_capacity_kwh: float + max_charging_price: float + min_savings_margin: float + charging_power_kw: float + max_capacity: float + battery_efficiency: float + config: Dict[str, Any] + iso_tz_offset: str + mode_label_home_ups: str + mode_label_home_i: str + target_reason: str = "default" + + +def economic_charging_plan( + *, + timeline_data: List[Dict[str, Any]], + plan: EconomicChargingPlanConfig, +) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]: + """Economic charging plan with forward simulation.""" + timeline = [dict(point) for point in timeline_data] + + charge_per_interval = plan.charging_power_kw / 4.0 + current_time = datetime.now() + + protection_soc_kwh = _apply_protection_override( + timeline, + plan, + current_time=current_time, + charge_per_interval=charge_per_interval, + ) + + candidates = get_candidate_intervals( + timeline, + plan.max_charging_price, + current_time=current_time, + iso_tz_offset=plan.iso_tz_offset, + ) + + if not candidates: + _LOGGER.warning( + "No economic charging candidates under max_price=%sCZK", + plan.max_charging_price, + ) + return timeline, {} + + _LOGGER.info("Found %s economic charging candidates", len(candidates)) + + for candidate in candidates: + _apply_economic_candidate( + timeline, + plan, + candidate=candidate, + charge_per_interval=charge_per_interval, + ) + + final_capacity = timeline[-1].get("battery_capacity_kwh", 0) + target_achieved = final_capacity >= plan.target_capacity_kwh + min_achieved = final_capacity >= plan.min_capacity_kwh + + metrics = { + "algorithm": "economic", + "target_capacity_kwh": plan.target_capacity_kwh, + "effective_minimum_kwh": plan.effective_minimum_kwh, + "final_capacity_kwh": final_capacity, + "min_capacity_kwh": plan.min_capacity_kwh, + "target_achieved": target_achieved, + "min_achieved": min_achieved, + "shortage_kwh": ( + max(0, plan.target_capacity_kwh - final_capacity) if not target_achieved else 0 + ), + "protection_enabled": plan.config.get("enable_blackout_protection", False) + or plan.config.get("enable_weather_risk", False), + "protection_soc_kwh": protection_soc_kwh, + "optimal_target_info": { + "target_kwh": plan.target_capacity_kwh, + "target_percent": (plan.target_capacity_kwh / plan.max_capacity * 100), + "reason": plan.target_reason, + }, + } + + _LOGGER.info( + "Economic charging complete: final=%.2fkWh, target=%.2fkWh, achieved=%s", + final_capacity, + plan.target_capacity_kwh, + target_achieved, + ) + + return timeline, metrics + + +def smart_charging_plan( + *, + timeline: List[Dict[str, Any]], + min_capacity: float, + target_capacity: float, + max_price: float, + charging_power_kw: float, + max_capacity: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]: + """Smart charging plan using cheapest intervals.""" + charge_per_interval = charging_power_kw / 4.0 + + critical_intervals, min_capacity_in_timeline, min_capacity_timestamp = ( + _collect_critical_intervals(timeline, min_capacity) + ) + + final_capacity = timeline[-1].get("battery_capacity_kwh", 0) + energy_needed_for_target = max(0, target_capacity - final_capacity) + + _LOGGER.info( + "Smart charging: %s critical intervals, min_capacity_in_timeline: %.2fkWh @ %s, min_threshold: %.2fkWh, need %.2fkWh for target", + len(critical_intervals), + min_capacity_in_timeline, + min_capacity_timestamp, + min_capacity, + energy_needed_for_target, + ) + + if critical_intervals: + _apply_critical_fix( + timeline, + first_critical=critical_intervals[0], + min_capacity=min_capacity, + max_price=max_price, + max_capacity=max_capacity, + charge_per_interval=charge_per_interval, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + + effective_target = target_capacity + if target_capacity >= max_capacity * 0.99: + effective_target = max_capacity * 0.99 + iteration = _apply_target_charging( + timeline, + effective_target=effective_target, + max_price=max_price, + max_capacity=max_capacity, + min_capacity=min_capacity, + charge_per_interval=charge_per_interval, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + + if iteration >= 100: + _LOGGER.warning("Reached max iterations in smart charging plan") + + final_capacity = timeline[-1].get("battery_capacity_kwh", 0) + target_achieved = final_capacity >= effective_target + min_achieved = final_capacity >= min_capacity + + metrics = { + "target_capacity_kwh": target_capacity, + "effective_target_kwh": effective_target, + "final_capacity_kwh": final_capacity, + "min_capacity_kwh": min_capacity, + "target_achieved": target_achieved, + "min_achieved": min_achieved, + "shortage_kwh": ( + max(0, effective_target - final_capacity) if not target_achieved else 0 + ), + } + + return timeline, metrics + + +def _apply_protection_override( + timeline: List[Dict[str, Any]], + plan: EconomicChargingPlanConfig, + *, + current_time: datetime, + charge_per_interval: float, +) -> Optional[float]: + protection_soc_kwh = calculate_protection_requirement( + timeline, + plan.max_capacity, + config=plan.config, + iso_tz_offset=plan.iso_tz_offset, + ) + if protection_soc_kwh is None: + return None + + current_soc = timeline[0].get("battery_capacity_kwh", 0) + protection_shortage = protection_soc_kwh - current_soc + if protection_shortage <= 0: + return protection_soc_kwh # pragma: no cover + + _LOGGER.warning( + "PROTECTION OVERRIDE: Need %.2fkWh to reach protection target %.2fkWh (current: %.2fkWh)", + protection_shortage, + protection_soc_kwh, + current_soc, + ) + + candidates = get_candidate_intervals( + timeline, + plan.max_charging_price, + current_time=current_time, + iso_tz_offset=plan.iso_tz_offset, + ) + if not candidates: + _LOGGER.error( + "PROTECTION FAILED: No charging candidates under max_price=%sCZK", + plan.max_charging_price, + ) + return protection_soc_kwh + + charged = 0.0 + for candidate in candidates: + if charged >= protection_shortage: + break + + idx = candidate["index"] + old_charge = timeline[idx].get("grid_charge_kwh", 0) + timeline[idx]["grid_charge_kwh"] = old_charge + charge_per_interval + if timeline[idx].get("reason") == "normal": + timeline[idx]["reason"] = "protection_charge" + charged += charge_per_interval + + _LOGGER.info( + "PROTECTION: Adding %.2fkWh at %s (price %.2fCZK)", + charge_per_interval, + candidate["timestamp"], + candidate["price"], + ) + + recalculate_timeline_from_index( + timeline, + idx, + max_capacity=plan.max_capacity, + min_capacity=plan.min_capacity_floor, + efficiency=plan.battery_efficiency, + mode_label_home_ups=plan.mode_label_home_ups, + mode_label_home_i=plan.mode_label_home_i, + ) + + _LOGGER.info( + "PROTECTION: Charged %.2fkWh / %.2fkWh needed", + charged, + protection_shortage, + ) + return protection_soc_kwh + + +def _apply_economic_candidate( + timeline: List[Dict[str, Any]], + plan: EconomicChargingPlanConfig, + *, + candidate: Dict[str, Any], + charge_per_interval: float, +) -> None: + idx = candidate["index"] + price = candidate["price"] + timestamp = candidate["timestamp"] + + horizon_hours = min(48, len(timeline) - idx) + + result_charge = simulate_forward( + timeline=timeline, + start_index=idx, + charge_now=True, + charge_amount_kwh=charge_per_interval, + horizon_hours=horizon_hours, + effective_minimum_kwh=plan.effective_minimum_kwh, + efficiency=plan.battery_efficiency, + ) + cost_charge = result_charge["total_charging_cost"] + + result_wait = simulate_forward( + timeline=timeline, + start_index=idx, + charge_now=False, + charge_amount_kwh=0, + horizon_hours=horizon_hours, + effective_minimum_kwh=plan.effective_minimum_kwh, + efficiency=plan.battery_efficiency, + ) + cost_wait = result_wait["total_charging_cost"] + min_soc_wait = result_wait["min_soc"] + death_valley_wait = result_wait["death_valley_reached"] + + if death_valley_wait: + shortage = plan.effective_minimum_kwh - min_soc_wait + if shortage > 0: + min_charge = calculate_minimum_charge( + scenario_wait_min_soc=min_soc_wait, + effective_minimum_kwh=plan.effective_minimum_kwh, + max_charge_per_interval=charge_per_interval, + ) + _LOGGER.warning( + "DEATH VALLEY at %s: Need %.2fkWh (min_soc_wait=%.2fkWh, effective_min=%.2fkWh)", + timestamp, + min_charge, + min_soc_wait, + plan.effective_minimum_kwh, + ) + old_charge = timeline[idx].get("grid_charge_kwh", 0) + timeline[idx]["grid_charge_kwh"] = old_charge + min_charge + if timeline[idx].get("reason") == "normal": + timeline[idx]["reason"] = "death_valley_fix" + + recalculate_timeline_from_index( + timeline, + idx, + max_capacity=plan.max_capacity, + min_capacity=plan.min_capacity_floor, + efficiency=plan.battery_efficiency, + mode_label_home_ups=plan.mode_label_home_ups, + mode_label_home_i=plan.mode_label_home_i, + ) + + _LOGGER.info( + "DEATH VALLEY FIX: Added %.2fkWh at %s (price %.2fCZK)", + min_charge, + timestamp, + price, + ) + return + + savings_per_kwh = (cost_wait - cost_charge) / charge_per_interval + if savings_per_kwh >= plan.min_savings_margin: + old_charge = timeline[idx].get("grid_charge_kwh", 0) + timeline[idx]["grid_charge_kwh"] = old_charge + charge_per_interval + if timeline[idx].get("reason") == "normal": + timeline[idx]["reason"] = "economic_charge" + + recalculate_timeline_from_index( + timeline, + idx, + max_capacity=plan.max_capacity, + min_capacity=plan.min_capacity_floor, + efficiency=plan.battery_efficiency, + mode_label_home_ups=plan.mode_label_home_ups, + mode_label_home_i=plan.mode_label_home_i, + ) + + _LOGGER.info( + "ECONOMIC: Added %.2fkWh at %s (price %.2fCZK, savings %.3fCZK/kWh > %.3fCZK/kWh)", + charge_per_interval, + timestamp, + price, + savings_per_kwh, + plan.min_savings_margin, + ) + return + + _LOGGER.debug( + "ECONOMIC: Skipping %s (price %.2fCZK, savings %.3fCZK/kWh < %.3fCZK/kWh)", + timestamp, + price, + savings_per_kwh, + plan.min_savings_margin, + ) + + +def _collect_critical_intervals( + timeline: List[Dict[str, Any]], min_capacity: float +) -> tuple[list[int], float, Optional[str]]: + critical_intervals: list[int] = [] + min_capacity_in_timeline = float("inf") + min_capacity_timestamp: Optional[str] = None + for i, point in enumerate(timeline): + capacity = point.get("battery_capacity_kwh", 0) + if capacity < min_capacity: + critical_intervals.append(i) + if capacity < min_capacity_in_timeline: + min_capacity_in_timeline = capacity + min_capacity_timestamp = point.get("timestamp", "unknown") + return critical_intervals, min_capacity_in_timeline, min_capacity_timestamp + + +def _apply_critical_fix( + timeline: List[Dict[str, Any]], + *, + first_critical: int, + min_capacity: float, + max_price: float, + max_capacity: float, + charge_per_interval: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> None: + _LOGGER.info( + "First critical interval at index %s, capacity: %.2fkWh", + first_critical, + timeline[first_critical].get("battery_capacity_kwh", 0), + ) + + critical_capacity = timeline[first_critical].get("battery_capacity_kwh", 0) + energy_needed = min_capacity - critical_capacity + if energy_needed <= 0: + return # pragma: no cover + + _LOGGER.info("Need %.2fkWh to reach minimum at critical point", energy_needed) + charging_candidates = _collect_critical_candidates( + timeline, + first_critical=first_critical, + max_price=max_price, + max_capacity=max_capacity, + ) + + added_energy = 0.0 + while added_energy < energy_needed and charging_candidates: + best = charging_candidates.pop(0) + idx = best["index"] + + old_charge = timeline[idx].get("grid_charge_kwh", 0) + timeline[idx]["grid_charge_kwh"] = old_charge + charge_per_interval + if timeline[idx].get("reason") == "normal": + timeline[idx]["reason"] = "legacy_critical" + added_energy += charge_per_interval + + _LOGGER.debug( + "Critical fix: Adding %.2fkWh at index %s (price %.2fCZK), total added: %.2fkWh", + charge_per_interval, + idx, + best["price"], + added_energy, + ) + + recalculate_timeline_from_index( + timeline, + idx, + max_capacity=max_capacity, + min_capacity=min_capacity, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + + new_critical_capacity = timeline[first_critical].get("battery_capacity_kwh", 0) + if new_critical_capacity >= min_capacity: + _LOGGER.info( + "Critical interval fixed: capacity now %.2fkWh >= %.2fkWh", + new_critical_capacity, + min_capacity, + ) + break + + +def _collect_critical_candidates( + timeline: List[Dict[str, Any]], + *, + first_critical: int, + max_price: float, + max_capacity: float, +) -> List[Dict[str, Any]]: + charging_candidates = [] + for i in range(first_critical): + point = timeline[i] + price = point.get("spot_price_czk", float("inf")) + capacity = point.get("battery_capacity_kwh", 0) + if price > max_price: + continue + if capacity >= max_capacity * 0.99: + continue + charging_candidates.append( + { + "index": i, + "price": price, + "capacity": capacity, + "timestamp": point.get("timestamp", ""), + } + ) + charging_candidates.sort(key=lambda x: x["price"]) + return charging_candidates + + +def _apply_target_charging( + timeline: List[Dict[str, Any]], + *, + effective_target: float, + max_price: float, + max_capacity: float, + min_capacity: float, + charge_per_interval: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> int: + max_iterations = 100 + iteration = 0 + while iteration < max_iterations: + current_final_capacity = timeline[-1].get("battery_capacity_kwh", 0) + if current_final_capacity >= effective_target: + _LOGGER.info( + "Target capacity achieved: %.2fkWh >= %.2fkWh", + current_final_capacity, + effective_target, + ) + break + + shortage = effective_target - current_final_capacity + charging_candidates = _collect_target_candidates( + timeline, + max_price=max_price, + max_capacity=max_capacity, + charge_per_interval=charge_per_interval, + ) + if not charging_candidates: + _LOGGER.warning( + "No more charging candidates available, shortage: %.2fkWh", + shortage, + ) + break + + best_candidate = charging_candidates[0] + idx = best_candidate["index"] + + old_charge = timeline[idx].get("grid_charge_kwh", 0) + timeline[idx]["grid_charge_kwh"] = old_charge + charge_per_interval + if timeline[idx].get("reason") == "normal": + timeline[idx]["reason"] = "legacy_target" + + _LOGGER.debug( + "Target charging: Adding %.2fkWh at index %s (price %.2fCZK, timestamp %s), shortage: %.2fkWh, capacity before: %.2fkWh", + charge_per_interval, + idx, + best_candidate["price"], + best_candidate["timestamp"], + shortage, + best_candidate["capacity"], + ) + + recalculate_timeline_from_index( + timeline, + idx, + max_capacity=max_capacity, + min_capacity=min_capacity, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + + iteration += 1 + + return iteration + + +def _collect_target_candidates( + timeline: List[Dict[str, Any]], + *, + max_price: float, + max_capacity: float, + charge_per_interval: float, +) -> List[Dict[str, Any]]: + charging_candidates = [] + for i, point in enumerate(timeline): + price = point.get("spot_price_czk", float("inf")) + capacity = point.get("battery_capacity_kwh", 0) + existing_charge = point.get("grid_charge_kwh", 0) + if price > max_price: + continue + if capacity >= max_capacity * 0.99: + continue + if i >= len(timeline) - 1: + continue + if existing_charge >= charge_per_interval * 0.99: + continue + charging_candidates.append( + { + "index": i, + "price": price, + "capacity": capacity, + "timestamp": point.get("timestamp", ""), + "existing_charge": existing_charge, + } + ) + charging_candidates.sort(key=lambda x: x["price"]) + return charging_candidates diff --git a/custom_components/oig_cloud/battery_forecast/planning/charging_plan_adjustments.py b/custom_components/oig_cloud/battery_forecast/planning/charging_plan_adjustments.py new file mode 100644 index 00000000..b80c5aaa --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/charging_plan_adjustments.py @@ -0,0 +1,219 @@ +"""Charging plan adjustment helpers.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional + +from .charging_plan_utils import recalculate_timeline_from_index + +_LOGGER = logging.getLogger(__name__) + + +def fix_minimum_capacity_violations( + *, + timeline: List[Dict[str, Any]], + min_capacity: float, + max_price: float, + price_threshold: float, + charging_power_kw: float, + max_capacity: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> List[Dict[str, Any]]: + """Fix any minimum capacity violations by adding charging.""" + max_iterations = 50 + iteration = 0 + + while iteration < max_iterations: + violation_index = find_first_minimum_violation(timeline, min_capacity) + if violation_index is None: + break + + _LOGGER.debug( + "Found minimum violation at index %s, capacity=%.2fkWh", + violation_index, + timeline[violation_index]["battery_capacity_kwh"], + ) + + charging_index = find_cheapest_hour_before( + timeline, violation_index, max_price, price_threshold + ) + + if charging_index is None: + _LOGGER.warning( + "Cannot fix minimum violation at index %s - no suitable charging time found", + violation_index, + ) + break + + charge_kwh = charging_power_kw / 4.0 + old_charge = timeline[charging_index].get("grid_charge_kwh", 0) + timeline[charging_index]["grid_charge_kwh"] = old_charge + charge_kwh + if timeline[charging_index].get("reason") == "normal": + timeline[charging_index]["reason"] = "legacy_violation_fix" + + _LOGGER.debug( + "Adding %.2fkWh charging at index %s, price=%.2fCZK", + charge_kwh, + charging_index, + timeline[charging_index]["spot_price_czk"], + ) + + recalculate_timeline_from_index( + timeline, + charging_index, + max_capacity=max_capacity, + min_capacity=min_capacity, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + iteration += 1 + + if iteration >= max_iterations: + _LOGGER.warning("Reached max iterations in minimum capacity fixing") + + return timeline + + +def ensure_target_capacity_at_end( + *, + timeline: List[Dict[str, Any]], + target_capacity: float, + max_price: float, + price_threshold: float, + charging_power_kw: float, + max_capacity: float, + min_capacity: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> List[Dict[str, Any]]: + """Ensure target capacity at end of timeline.""" + if not timeline: + return timeline + + max_iterations = 50 + iteration = 0 + + while iteration < max_iterations: + final_capacity = timeline[-1].get("battery_capacity_kwh", 0) + if final_capacity >= target_capacity: + _LOGGER.debug( + "Target capacity achieved: %.2fkWh >= %.2fkWh", + final_capacity, + target_capacity, + ) + break + + shortage = target_capacity - final_capacity + _LOGGER.debug("Target capacity shortage: %.2fkWh", shortage) + + charging_index = find_cheapest_suitable_hour( + timeline, max_price, price_threshold + ) + + if charging_index is None: + _LOGGER.warning( + "Cannot achieve target capacity - no suitable charging time found" + ) + break + + charge_kwh = charging_power_kw / 4.0 + old_charge = timeline[charging_index].get("grid_charge_kwh", 0) + timeline[charging_index]["grid_charge_kwh"] = old_charge + charge_kwh + if timeline[charging_index].get("reason") == "normal": + timeline[charging_index]["reason"] = "legacy_target_ensure" + + _LOGGER.debug( + "Adding %.2fkWh charging at index %s for target capacity", + charge_kwh, + charging_index, + ) + + recalculate_timeline_from_index( + timeline, + charging_index, + max_capacity=max_capacity, + min_capacity=min_capacity, + efficiency=efficiency, + mode_label_home_ups=mode_label_home_ups, + mode_label_home_i=mode_label_home_i, + ) + iteration += 1 + + if iteration >= max_iterations: + _LOGGER.warning("Reached max iterations in target capacity ensuring") + + return timeline + + +def find_first_minimum_violation( + timeline: List[Dict[str, Any]], min_capacity: float +) -> Optional[int]: + """Find the first interval where capacity drops below minimum.""" + for i, point in enumerate(timeline): + if point.get("battery_capacity_kwh", 0) < min_capacity: + return i + return None + + +def find_cheapest_hour_before( + timeline: List[Dict[str, Any]], + violation_index: int, + max_price: float, + price_threshold: float, +) -> Optional[int]: + """Find cheapest suitable interval before a violation.""" + candidates = [] + + for i in range(violation_index): + price = timeline[i].get("spot_price_czk", float("inf")) + + if price > max_price: + continue + if price > price_threshold: + continue + + existing_charge = timeline[i].get("grid_charge_kwh", 0) + if existing_charge > 0: + continue + + candidates.append((i, price)) + + if not candidates: + return None + + candidates.sort(key=lambda x: x[1]) + return candidates[0][0] + + +def find_cheapest_suitable_hour( + timeline: List[Dict[str, Any]], + max_price: float, + price_threshold: float, +) -> Optional[int]: + """Find cheapest suitable interval in entire timeline.""" + candidates = [] + + for i, point in enumerate(timeline): + price = point.get("spot_price_czk", float("inf")) + + if price > max_price: + continue + if price > price_threshold: + continue + + existing_charge = point.get("grid_charge_kwh", 0) + if existing_charge > 0: + continue + + candidates.append((i, price)) + + if not candidates: + return None + + candidates.sort(key=lambda x: x[1]) + return candidates[0][0] diff --git a/custom_components/oig_cloud/battery_forecast/planning/charging_plan_utils.py b/custom_components/oig_cloud/battery_forecast/planning/charging_plan_utils.py new file mode 100644 index 00000000..a0253057 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/charging_plan_utils.py @@ -0,0 +1,281 @@ +"""Charging plan utility helpers.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + + +def get_candidate_intervals( + timeline: List[Dict[str, Any]], + max_charging_price: float, + *, + current_time: Optional[datetime] = None, + iso_tz_offset: str = "+00:00", +) -> List[Dict[str, Any]]: + """Get candidate intervals for charging.""" + if current_time is None: + current_time = dt_util.now() + + candidates = [] + + for i, interval in enumerate(timeline): + price = interval.get("spot_price_czk", float("inf")) + timestamp_str = interval.get("timestamp", "") + + try: + interval_time = datetime.fromisoformat( + timestamp_str.replace("Z", iso_tz_offset) + ) + except Exception: # nosec B112 + continue + + if price >= max_charging_price: + continue + + interval_time_naive = ( + interval_time.replace(tzinfo=None) + if interval_time.tzinfo + else interval_time + ) + current_time_naive = ( + current_time.replace(tzinfo=None) if current_time.tzinfo else current_time + ) + + if interval_time_naive <= current_time_naive: + continue + + candidates.append( + { + "index": i, + "price": price, + "timestamp": timestamp_str, + "interval_time": interval_time, + } + ) + + candidates.sort(key=lambda x: x["price"]) + + if not candidates: + _LOGGER.warning( + "No charging intervals available - all prices above max_charging_price (%.2f Kč/kWh)", + max_charging_price, + ) + + return candidates + + +def simulate_forward( + timeline: List[Dict[str, Any]], + start_index: int, + charge_now: bool, + charge_amount_kwh: float, + horizon_hours: int, + effective_minimum_kwh: float, + efficiency: float, +) -> Dict[str, Any]: + """Forward simulate SoC over a horizon.""" + if start_index >= len(timeline): + return { + "total_charging_cost": 0, + "min_soc": 0, + "final_soc": 0, + "death_valley_reached": True, + "charging_events": [], + } + + sim_timeline = [dict(point) for point in timeline] + + soc = sim_timeline[start_index].get("battery_capacity_kwh", 0) + total_cost = 0 + charging_events = [] + + if charge_now and charge_amount_kwh > 0: + soc += charge_amount_kwh + price = sim_timeline[start_index].get("spot_price_czk", 0) + cost = charge_amount_kwh * price + total_cost += cost + + charging_events.append( + { + "index": start_index, + "kwh": charge_amount_kwh, + "price": price, + "cost": cost, + "reason": "scenario_test", + } + ) + + sim_timeline[start_index]["battery_capacity_kwh"] = soc + sim_timeline[start_index]["grid_charge_kwh"] = charge_amount_kwh + + min_soc = soc + horizon_intervals = horizon_hours * 4 + + for i in range( + start_index + 1, min(start_index + horizon_intervals, len(sim_timeline)) + ): + prev_soc = sim_timeline[i - 1].get("battery_capacity_kwh", 0) + + solar_kwh = sim_timeline[i].get("solar_production_kwh", 0) + load_kwh = sim_timeline[i].get("consumption_kwh", 0) + grid_kwh = sim_timeline[i].get("grid_charge_kwh", 0) + reason = sim_timeline[i].get("reason", "") + + is_balancing = reason.startswith("balancing_") + is_ups_mode = grid_kwh > 0 or is_balancing + + if is_ups_mode: + net_energy = solar_kwh + grid_kwh + else: + if solar_kwh >= load_kwh: + net_energy = (solar_kwh - load_kwh) + grid_kwh + else: + load_from_battery = load_kwh - solar_kwh + battery_drain = load_from_battery / efficiency + net_energy = -battery_drain + grid_kwh + + soc = prev_soc + net_energy + sim_timeline[i]["battery_capacity_kwh"] = soc + + min_soc = min(min_soc, soc) + + final_soc = sim_timeline[ + min(start_index + horizon_intervals - 1, len(sim_timeline) - 1) + ].get("battery_capacity_kwh", 0) + death_valley_reached = min_soc < effective_minimum_kwh + + return { + "total_charging_cost": total_cost, + "min_soc": min_soc, + "final_soc": final_soc, + "death_valley_reached": death_valley_reached, + "charging_events": charging_events, + } + + +def calculate_minimum_charge( + scenario_wait_min_soc: float, + effective_minimum_kwh: float, + max_charge_per_interval: float, +) -> float: + """Calculate minimum charge required to avoid minimum violation.""" + shortage = effective_minimum_kwh - scenario_wait_min_soc + + if shortage <= 0: + return 0 + + charge_needed = shortage * 1.1 + return min(charge_needed, max_charge_per_interval) + + +def calculate_protection_requirement( + timeline: List[Dict[str, Any]], + max_capacity: float, + *, + config: Dict[str, Any], + iso_tz_offset: str = "+00:00", +) -> Optional[float]: + """Calculate required SoC for blackout/weather protection.""" + required_soc = 0.0 + + enable_blackout = config.get("enable_blackout_protection", False) + if enable_blackout: + blackout_hours = config.get("blackout_protection_hours", 12) + blackout_target_percent = config.get("blackout_target_soc_percent", 60.0) + + current_time = dt_util.now() + blackout_end = current_time + timedelta(hours=blackout_hours) + + blackout_consumption = 0.0 + for point in timeline: + try: + timestamp_str = point.get("timestamp", "") + point_time = datetime.fromisoformat( + timestamp_str.replace("Z", iso_tz_offset) + ) + except Exception: # nosec B112 + continue + + if point_time <= blackout_end: + blackout_consumption += point.get("consumption_kwh", 0) + + required_soc_blackout = max( + blackout_consumption, + (blackout_target_percent / 100.0) * max_capacity, + ) + + required_soc = max(required_soc, required_soc_blackout) + + enable_weather = config.get("enable_weather_risk", False) + if enable_weather: + weather_risk_level = config.get("weather_risk_level", "low") + weather_target_percent = config.get("weather_target_soc_percent", 50.0) + + weather_multiplier = { + "low": 0.5, + "medium": 0.75, + "high": 1.0, + }.get(weather_risk_level, 0.5) + + weather_target = (weather_target_percent / 100.0) * max_capacity + required_soc = max(required_soc, weather_target * weather_multiplier) + + if required_soc > 0: + return required_soc + + return None + + +def recalculate_timeline_from_index( + timeline: List[Dict[str, Any]], + start_index: int, + *, + max_capacity: float, + min_capacity: float, + efficiency: float, + mode_label_home_ups: str, + mode_label_home_i: str, +) -> None: + """Recalculate battery trajectory from a given index.""" + for i in range(start_index, len(timeline)): + if i == 0: + continue + + prev_point = timeline[i - 1] + curr_point = timeline[i] + + prev_capacity = prev_point.get("battery_capacity_kwh", 0) + solar_kwh = curr_point.get("solar_production_kwh", 0) + grid_kwh = curr_point.get("grid_charge_kwh", 0) + load_kwh = curr_point.get("consumption_kwh", 0) + reason = curr_point.get("reason", "") + + is_balancing = reason.startswith("balancing_") + is_ups_mode = grid_kwh > 0 or is_balancing + + if is_ups_mode: + net_energy = solar_kwh + grid_kwh + else: + if solar_kwh >= load_kwh: + net_energy = (solar_kwh - load_kwh) + grid_kwh + else: + load_from_battery = load_kwh - solar_kwh + battery_drain = load_from_battery / efficiency + net_energy = -battery_drain + grid_kwh + + curr_point["solar_charge_kwh"] = round(max(0, solar_kwh - load_kwh), 2) + + new_capacity = prev_capacity + net_energy + new_capacity = min(new_capacity, max_capacity) + if new_capacity < min_capacity: + new_capacity = min_capacity + new_capacity = max(0.0, new_capacity) + + curr_point["battery_capacity_kwh"] = round(new_capacity, 2) + curr_point["mode"] = mode_label_home_ups if is_ups_mode else mode_label_home_i diff --git a/custom_components/oig_cloud/battery_forecast/planning/forecast_update.py b/custom_components/oig_cloud/battery_forecast/planning/forecast_update.py new file mode 100644 index 00000000..e7f1bc2a --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/forecast_update.py @@ -0,0 +1,746 @@ +"""Forecast update routine extracted from ha_sensor.""" + +from __future__ import annotations + +import logging +from datetime import datetime +from typing import Any, List, Optional + +from homeassistant.util import dt as dt_util + +from ...const import DOMAIN +from ..config import HybridConfig, SimulatorConfig +from ..data.adaptive_consumption import AdaptiveConsumptionHelper +from ..data.input import get_load_avg_for_timestamp, get_solar_for_timestamp +from ..strategy import HybridStrategy +from ..timeline.planner import ( + add_decision_reasons_to_timeline, + attach_planner_reasons, + build_planner_timeline, +) +from ..types import CBB_MODE_NAMES +from . import auto_switch as auto_switch_module +from . import mode_guard as mode_guard_module + +_LOGGER = logging.getLogger(__name__) +ISO_TZ_OFFSET = "+00:00" +MODE_GUARD_MINUTES = 60 + + +def _bucket_start(now_aware: datetime) -> datetime: + bucket_minute = (now_aware.minute // 15) * 15 + return now_aware.replace(minute=bucket_minute, second=0, microsecond=0) + + +def _should_skip_bucket(sensor: Any, bucket_start: datetime) -> bool: + if sensor._forecast_in_progress: + sensor._log_rate_limited( + "forecast_in_progress", + "debug", + "Forecast computation already in progress - skipping", + cooldown_s=60.0, + ) + return True + if sensor._last_forecast_bucket == bucket_start: + return True + return False + + +def _ensure_capacity(sensor: Any) -> tuple[float, float, float] | None: + current_capacity = sensor._get_current_battery_capacity() + max_capacity = sensor._get_max_battery_capacity() + min_capacity = sensor._get_min_battery_capacity() + if current_capacity is None or max_capacity is None or min_capacity is None: + sensor._log_rate_limited( + "forecast_missing_capacity", + "debug", + "Forecast prerequisites not ready (current=%s max=%s min=%s); retrying shortly", + current_capacity, + max_capacity, + min_capacity, + cooldown_s=120.0, + ) + sensor._schedule_forecast_retry(10.0) + return None + return current_capacity, max_capacity, min_capacity + + +def _filter_price_timeline( + prices: list[dict[str, Any]], current_interval_naive: datetime, label: str, sensor: Any +) -> list[dict[str, Any]]: + filtered = [ + item + for item in prices + if datetime.fromisoformat(item["time"]) >= current_interval_naive + ] + if len(filtered) < len(prices): + sensor._log_rate_limited( + f"forecast_{label}_filtered", + "debug", + "Filtered %s prices: %s -> %s (removed %s past intervals)", + label, + len(prices), + len(filtered), + len(prices) - len(filtered), + cooldown_s=600.0, + ) + return filtered + + +async def _fetch_prices( + sensor: Any, current_interval_naive: datetime +) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]: + sensor._log_rate_limited( + "forecast_spot_fetch", + "debug", + "Calling _get_spot_price_timeline()", + cooldown_s=600.0, + ) + spot_prices = await sensor._get_spot_price_timeline() + sensor._log_rate_limited( + "forecast_spot_fetch_done", + "debug", + "_get_spot_price_timeline() returned %s prices", + len(spot_prices), + cooldown_s=600.0, + ) + sensor._log_rate_limited( + "forecast_spot_filter", + "debug", + "Filtering timeline from current interval: %s", + current_interval_naive.isoformat(), + cooldown_s=600.0, + ) + spot_prices = _filter_price_timeline(spot_prices, current_interval_naive, "spot", sensor) + + sensor._log_rate_limited( + "forecast_export_fetch", + "debug", + "Calling _get_export_price_timeline()", + cooldown_s=600.0, + ) + export_prices = await sensor._get_export_price_timeline() + sensor._log_rate_limited( + "forecast_export_fetch_done", + "debug", + "_get_export_price_timeline() returned %s prices", + len(export_prices), + cooldown_s=600.0, + ) + export_prices = _filter_price_timeline( + export_prices, current_interval_naive, "export", sensor + ) + return spot_prices, export_prices + + +async def _build_load_forecast( + sensor: Any, + spot_prices: list[dict[str, Any]], + adaptive_helper: AdaptiveConsumptionHelper, + adaptive_profiles: dict[str, Any] | None, + load_avg_sensors: Any, +) -> list[float]: + load_forecast: list[float] = [] + today = dt_util.now().date() + for sp in spot_prices: + _append_load_for_price( + sensor, + sp, + adaptive_profiles=adaptive_profiles, + load_avg_sensors=load_avg_sensors, + today=today, + load_forecast=load_forecast, + ) + + await _maybe_apply_consumption_boost( + adaptive_helper, adaptive_profiles, load_forecast + ) + return load_forecast + + +def _append_load_for_price( + sensor: Any, + spot_price: dict[str, Any], + *, + adaptive_profiles: dict[str, Any] | None, + load_avg_sensors: Any, + today: datetime.date, + load_forecast: list[float], +) -> None: + try: + timestamp = datetime.fromisoformat(spot_price["time"]) + if timestamp.tzinfo is None: + timestamp = dt_util.as_local(timestamp) + + load_kwh = _resolve_load_kwh( + sensor, + timestamp, + adaptive_profiles, + load_avg_sensors, + today=today, + ) + + load_forecast.append(load_kwh) + except Exception as exc: # pragma: no cover + _LOGGER.warning( + "Failed to get load for %s: %s", spot_price.get("time"), exc + ) # pragma: no cover + load_forecast.append(0.125) # pragma: no cover + + +async def _maybe_apply_consumption_boost( + adaptive_helper: AdaptiveConsumptionHelper, + adaptive_profiles: dict[str, Any] | None, + load_forecast: list[float], +) -> None: + if not adaptive_profiles: + return + recent_ratio = await adaptive_helper.calculate_recent_consumption_ratio( + adaptive_profiles + ) + if recent_ratio and recent_ratio > 1.1: + adaptive_helper.apply_consumption_boost_to_forecast(load_forecast, recent_ratio) + + +def _resolve_load_kwh( + sensor: Any, + timestamp: datetime, + adaptive_profiles: dict[str, Any] | None, + load_avg_sensors: Any, + *, + today: datetime.date, +) -> float: + if not adaptive_profiles: + return get_load_avg_for_timestamp( + timestamp, + load_avg_sensors, + state=sensor, + ) + + profile = _select_adaptive_profile(adaptive_profiles, timestamp, today) + hourly_kwh = _hourly_kwh_from_profile(sensor, profile, timestamp) + return hourly_kwh / 4.0 + + +def _select_adaptive_profile( + adaptive_profiles: dict[str, Any], + timestamp: datetime, + today: datetime.date, +) -> dict[str, Any]: + if timestamp.date() == today: + return adaptive_profiles["today_profile"] + return adaptive_profiles.get("tomorrow_profile", adaptive_profiles["today_profile"]) + + +def _hourly_kwh_from_profile( + sensor: Any, profile: dict[str, Any], timestamp: datetime +) -> float: + hour = timestamp.hour + start_hour = profile.get("start_hour", 0) + index = hour - start_hour + hourly_consumption = profile.get("hourly_consumption", []) or [] + if 0 <= index < len(hourly_consumption): + return hourly_consumption[index] + + sensor._log_rate_limited( + "adaptive_profile_oob", + "debug", + "Adaptive profile hour out of range: hour=%s start=%s len=%s (using avg)", + hour, + start_hour, + len(hourly_consumption), + cooldown_s=900.0, + ) + return profile.get("avg_kwh_h", 0.5) + + +def _build_solar_kwh_list( + sensor: Any, spot_prices: list[dict[str, Any]], solar_forecast: Any +) -> list[float]: + solar_kwh_list: List[float] = [] + for sp in spot_prices: + try: + ts = datetime.fromisoformat(sp.get("time", "")) + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + solar_kwh_list.append( + get_solar_for_timestamp( + ts, + solar_forecast, + log_rate_limited=sensor._log_rate_limited, + ) + ) + except Exception: + solar_kwh_list.append(0.0) + return solar_kwh_list + + +def _get_active_balancing_plan(sensor: Any) -> Any: + try: + entry_id = sensor._config_entry.entry_id if sensor._config_entry else None + if ( + entry_id + and DOMAIN in sensor._hass.data + and entry_id in sensor._hass.data[DOMAIN] + ): + balancing_manager = sensor._hass.data[DOMAIN][entry_id].get( + "balancing_manager" + ) + if balancing_manager: + return balancing_manager.get_active_plan() + except Exception as err: + _LOGGER.debug("Could not load BalancingManager plan: %s", err) + return None + + +def _build_export_price_values( + spot_prices: list[dict[str, Any]], + export_prices: list[dict[str, Any]], +) -> list[float]: + export_price_values: List[float] = [] + for i in range(len(spot_prices)): + if i < len(export_prices): + export_price_values.append( + float(export_prices[i].get("price", 0.0) or 0.0) + ) + else: + export_price_values.append(0.0) + return export_price_values + + +def _run_planner( + sensor: Any, + spot_prices: list[dict[str, Any]], + export_prices: list[dict[str, Any]], + load_forecast: list[float], + solar_kwh_list: list[float], + current_capacity: float, + max_capacity: float, +) -> tuple[list[dict[str, Any]], dict[str, Any] | None, list[dict[str, Any]]]: + try: + active_balancing_plan = _get_active_balancing_plan(sensor) + max_intervals = 36 * 4 + if len(spot_prices) > max_intervals: + spot_prices = spot_prices[:max_intervals] + export_prices = export_prices[:max_intervals] + load_forecast = load_forecast[:max_intervals] + solar_kwh_list = solar_kwh_list[:max_intervals] + + balancing_plan = sensor._build_strategy_balancing_plan( + spot_prices, active_balancing_plan + ) + opts = sensor._config_entry.options if sensor._config_entry else {} + max_ups_price_czk = float(opts.get("max_ups_price_czk", 10.0)) + efficiency = float(sensor._get_battery_efficiency()) + home_charge_rate_kw = float(opts.get("home_charge_rate", 2.8)) + sim_config = SimulatorConfig( + max_capacity_kwh=max_capacity, + min_capacity_kwh=max_capacity * 0.20, + charge_rate_kw=home_charge_rate_kw, + dc_dc_efficiency=efficiency, + dc_ac_efficiency=efficiency, + ac_dc_efficiency=efficiency, + ) + disable_planning_min_guard = bool( + opts.get("disable_planning_min_guard", False) + ) + planning_min_percent = float(opts.get("min_capacity_percent", 33.0)) + if disable_planning_min_guard: + planning_min_percent = 0.0 + hybrid_config = HybridConfig( + planning_min_percent=planning_min_percent, + target_percent=float(opts.get("target_capacity_percent", 80.0)), + max_ups_price_czk=max_ups_price_czk, + ) + export_price_values = _build_export_price_values(spot_prices, export_prices) + + strategy = HybridStrategy(hybrid_config, sim_config) + result = strategy.optimize( + initial_battery_kwh=current_capacity, + spot_prices=spot_prices, + solar_forecast=solar_kwh_list, + consumption_forecast=load_forecast, + balancing_plan=balancing_plan, + export_prices=export_price_values, + ) + + hw_min_kwh = max_capacity * 0.20 + planning_min_kwh = hybrid_config.planning_min_kwh(max_capacity) + lock_until, lock_modes = mode_guard_module.build_plan_lock( + now=dt_util.now(), + spot_prices=spot_prices, + modes=result.modes, + mode_guard_minutes=MODE_GUARD_MINUTES, + plan_lock_until=sensor._plan_lock_until, + plan_lock_modes=sensor._plan_lock_modes, + ) + sensor._plan_lock_until = lock_until + sensor._plan_lock_modes = lock_modes + guarded_modes, guard_overrides, guard_until = ( + mode_guard_module.apply_mode_guard( + modes=result.modes, + spot_prices=spot_prices, + solar_kwh_list=solar_kwh_list, + load_forecast=load_forecast, + current_capacity=current_capacity, + max_capacity=max_capacity, + hw_min_capacity=hw_min_kwh, + efficiency=efficiency, + home_charge_rate_kw=home_charge_rate_kw, + planning_min_kwh=planning_min_kwh, + lock_modes=lock_modes, + guard_until=lock_until, + log_rate_limited=sensor._log_rate_limited, + ) + ) + timeline = build_planner_timeline( + modes=guarded_modes, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=sensor._get_solar_forecast(), + load_forecast=load_forecast, + current_capacity=current_capacity, + max_capacity=max_capacity, + hw_min_capacity=hw_min_kwh, + efficiency=efficiency, + home_charge_rate_kw=home_charge_rate_kw, + log_rate_limited=sensor._log_rate_limited, + ) + attach_planner_reasons(timeline, result.decisions) + add_decision_reasons_to_timeline( + timeline, + current_capacity=current_capacity, + max_capacity=max_capacity, + min_capacity=planning_min_kwh, + efficiency=float(efficiency), + ) + mode_guard_module.apply_guard_reasons_to_timeline( + timeline, + guard_overrides, + guard_until, + None, + mode_names=CBB_MODE_NAMES, + ) + mode_recommendations = sensor._create_mode_recommendations(timeline, hours_ahead=48) + mode_result = { + "optimal_timeline": timeline, + "optimal_modes": guarded_modes, + "planner": "planner", + "planning_min_kwh": planning_min_kwh, + "target_kwh": hybrid_config.target_kwh(max_capacity), + "infeasible": result.infeasible, + "infeasible_reason": result.infeasible_reason, + } + return timeline, mode_result, mode_recommendations + except Exception as err: + _LOGGER.error("Planner failed: %s", err, exc_info=True) + return [], None, [] + + +def _update_timeline_hash(sensor: Any, timeline: list[dict[str, Any]]) -> None: + new_hash = sensor._calculate_data_hash(timeline) + if new_hash != sensor._data_hash: + _LOGGER.debug( + "Timeline data changed: %s -> %s", + sensor._data_hash[:8] if sensor._data_hash else "none", + new_hash[:8], + ) + sensor._data_hash = new_hash + else: + _LOGGER.debug("Timeline data unchanged (same hash)") + + +def _save_forecast_to_coordinator(sensor: Any) -> None: + if hasattr(sensor.coordinator, "battery_forecast_data"): + sensor.coordinator.battery_forecast_data = { + "timeline_data": sensor._timeline_data, + "calculation_time": sensor._last_update.isoformat(), + "data_source": "simplified_calculation", + "current_battery_kwh": ( + sensor._timeline_data[0].get("battery_capacity_kwh", 0) + if sensor._timeline_data + else 0 + ), + "mode_recommendations": sensor._mode_recommendations or [], + } + _LOGGER.info( + " Battery forecast data saved to coordinator - grid_charging_planned will update" + ) + + +def _dispatch_forecast_updated(sensor: Any) -> None: + from homeassistant.helpers.dispatcher import async_dispatcher_send + + if not sensor.hass: + _LOGGER.debug("Forecast updated signal skipped (sensor not in HA yet)") + return + + signal_name = f"oig_cloud_{sensor._box_id}_forecast_updated" + _LOGGER.debug(" Sending signal: %s", signal_name) + async_dispatcher_send(sensor.hass, signal_name) + + +def _resolve_target_and_soc( + sensor: Any, + current_capacity: float, + max_capacity: float, + min_capacity: float, +) -> tuple[float, Optional[float]]: + target_capacity = sensor._get_target_battery_capacity() + current_soc_percent = sensor._get_current_battery_soc_percent() + + if target_capacity is None: + target_capacity = max_capacity + if current_soc_percent is None and max_capacity > 0: + current_soc_percent = (current_capacity / max_capacity) * 100.0 + + sensor._log_rate_limited( + "battery_state_summary", + "debug", + "Battery state: current=%.2f kWh (%.1f%%), total=%.2f kWh, min=%.2f kWh, target=%.2f kWh", + current_capacity, + float(current_soc_percent or 0.0), + max_capacity, + min_capacity, + target_capacity, + cooldown_s=600.0, + ) + return target_capacity, current_soc_percent + + +def _update_consumption_summary( + sensor: Any, adaptive_profiles: Any, adaptive_helper: AdaptiveConsumptionHelper +) -> None: + if adaptive_profiles and isinstance(adaptive_profiles, dict): + sensor._consumption_summary = adaptive_helper.calculate_consumption_summary( + adaptive_profiles + ) + else: + sensor._consumption_summary = {} + + +def _schedule_auto_switch(sensor: Any) -> None: + if sensor._side_effects_enabled: + sensor._create_task_threadsafe( + auto_switch_module.update_auto_switch_schedule, sensor + ) + + +def _maybe_write_state(sensor: Any) -> None: + if not sensor.hass: + _LOGGER.debug("Sensor not yet added to HA, skipping state write") + return + sensor._log_rate_limited( + "write_state_consumption_summary", + "debug", + " Writing HA state with consumption_summary: %s", + sensor._consumption_summary, + cooldown_s=900.0, + ) + sensor.async_write_ha_state() + + +def _schedule_precompute(sensor: Any) -> None: + if not sensor.hass: + _LOGGER.debug("Precompute skipped (sensor not in HA yet)") + return + hash_changed = sensor._data_hash != sensor._last_precompute_hash + sensor._schedule_precompute( + force=sensor._last_precompute_at is None or hash_changed + ) + + +def _apply_planner_results( + sensor: Any, + timeline: list[dict[str, Any]], + mode_result: Any, + recommendations: Any, +) -> None: + sensor._timeline_data = timeline + sensor._hybrid_timeline = timeline + sensor._mode_optimization_result = mode_result + sensor._mode_recommendations = recommendations + sensor._baseline_timeline = [] + _update_timeline_hash(sensor, sensor._timeline_data) + sensor._last_update = datetime.now() + _LOGGER.debug( + "Battery forecast updated: %s timeline points", + len(sensor._timeline_data), + ) + + +def _maybe_mark_first_update(sensor: Any) -> None: + if sensor._first_update: + sensor._first_update = False + + +def _maybe_update_history_stub() -> None: + # Placeholder for historical updates (kept for future re-enable). + return + + +def _post_update_housekeeping( + sensor: Any, adaptive_profiles: Any, adaptive_helper: AdaptiveConsumptionHelper +) -> None: + _update_consumption_summary(sensor, adaptive_profiles, adaptive_helper) + _maybe_mark_first_update(sensor) + _save_forecast_to_coordinator(sensor) + _schedule_auto_switch(sensor) + + now = dt_util.now() + if now.minute in [0, 15, 30, 45]: + _maybe_update_history_stub() + + _maybe_write_state(sensor) + _schedule_precompute(sensor) + + +async def _prepare_forecast_inputs( + sensor: Any, bucket_start: datetime +) -> Optional[ + tuple[ + float, + float, + float, + list[dict[str, Any]], + list[dict[str, Any]], + Any, + Any, + AdaptiveConsumptionHelper, + Any, + list[float], + ] +]: + capacity = _ensure_capacity(sensor) + if not capacity: + return None + current_capacity, max_capacity, min_capacity = capacity + + _LOGGER.debug( + "Battery capacities: current=%.2f kWh, max=%.2f kWh, min=%.2f kWh", + current_capacity, + max_capacity, + min_capacity, + ) + + current_interval_naive = bucket_start.replace(tzinfo=None) + spot_prices, export_prices = await _fetch_prices(sensor, current_interval_naive) + + solar_forecast = sensor._get_solar_forecast() + load_avg_sensors = sensor._get_load_avg_sensors() + + adaptive_helper = AdaptiveConsumptionHelper( + sensor.hass or sensor._hass, + sensor._box_id, + ISO_TZ_OFFSET, + ) + adaptive_profiles = await adaptive_helper.get_adaptive_load_prediction() + + if not spot_prices: + _LOGGER.warning("No spot prices available - forecast will use fallback prices") + + load_forecast = await _build_load_forecast( + sensor, + spot_prices, + adaptive_helper, + adaptive_profiles, + load_avg_sensors, + ) + + return ( + current_capacity, + max_capacity, + min_capacity, + spot_prices, + export_prices, + solar_forecast, + adaptive_profiles, + adaptive_helper, + load_forecast, + ) + + +async def async_update(sensor: Any) -> None: # noqa: C901 + """Update sensor data.""" + + try: + mark_bucket_done = False + now_aware = dt_util.now() + bucket_start = _bucket_start(now_aware) + + # Enforce single in-flight computation. + if _should_skip_bucket(sensor, bucket_start): + return + + sensor._forecast_in_progress = True + + # Ziskat vsechna potrebna data + sensor._log_rate_limited( + "forecast_update_tick", + "debug", + "Battery forecast async_update() tick", + cooldown_s=300.0, + ) + prepared = await _prepare_forecast_inputs(sensor, bucket_start) + if not prepared: + return + ( + current_capacity, + max_capacity, + min_capacity, + spot_prices, + export_prices, + solar_forecast, + adaptive_profiles, + adaptive_helper, + load_forecast, + ) = prepared + mark_bucket_done = True + + # ONE PLANNER: single planning pipeline. + + # PHASE 2.8 + REFACTORING: Get target from new getter + _resolve_target_and_soc( + sensor, current_capacity, max_capacity, min_capacity + ) + + # Build load forecast list (kWh/15min for each interval) + # PLANNER: build plan timeline with HybridStrategy. + solar_kwh_list = _build_solar_kwh_list(sensor, spot_prices, solar_forecast) + timeline, mode_result, recommendations = _run_planner( + sensor, + spot_prices, + export_prices, + load_forecast, + solar_kwh_list, + current_capacity, + max_capacity, + ) + _apply_planner_results(sensor, timeline, mode_result, recommendations) + + # PHASE 2.9: Fix daily plan at midnight for tracking (AFTER _timeline_data is set) + await sensor._maybe_fix_daily_plan() + + _post_update_housekeeping(sensor, adaptive_profiles, adaptive_helper) + + # Notify dependent sensors (BatteryBalancing) that forecast is ready + _dispatch_forecast_updated(sensor) + + except Exception as err: + _LOGGER.error("Error updating battery forecast: %s", err, exc_info=True) + finally: + # Mark bucket complete only if prerequisites were ready. + try: + if mark_bucket_done: + now_done = dt_util.now() + done_bucket_minute = (now_done.minute // 15) * 15 + sensor._last_forecast_bucket = now_done.replace( + minute=done_bucket_minute, second=0, microsecond=0 + ) + # We intentionally keep profiles dirty until a successful compute; if async_update + # failed, the next tick will retry. + if sensor._timeline_data: + sensor._profiles_dirty = False + except Exception: # pragma: no cover + pass # nosec B110 pragma: no cover + sensor._forecast_in_progress = False diff --git a/custom_components/oig_cloud/battery_forecast/planning/interval_grouping.py b/custom_components/oig_cloud/battery_forecast/planning/interval_grouping.py new file mode 100644 index 00000000..08509921 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/interval_grouping.py @@ -0,0 +1,166 @@ +"""Interval grouping helpers for detail tabs.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +_LOGGER = logging.getLogger(__name__) + + +def group_intervals_by_mode( + intervals: List[Dict[str, Any]], + data_type: str, + mode_names: Dict[int, str], +) -> List[Dict[str, Any]]: + """Group consecutive intervals by mode and aggregate costs.""" + if not intervals: + return [] + + groups: List[Dict[str, Any]] = [] + current_group = None + + for interval in intervals: + if interval is None: + continue + + mode = _resolve_interval_mode(interval, data_type, mode_names, len(groups)) + current_group = _append_interval_group( + groups, + current_group, + mode, + interval, + ) + + for group in groups: + group["interval_count"] = len(group["intervals"]) + _apply_group_costs(group, data_type) + _format_group_times(group) + + return groups + + +def _resolve_interval_mode( + interval: Dict[str, Any], + data_type: str, + mode_names: Dict[int, str], + group_count: int, +) -> str: + actual = interval.get("actual") or {} + planned = interval.get("planned") or {} + actual_mode = actual.get("mode") + planned_mode = planned.get("mode") + + if data_type == "planned": + mode = planned.get("mode", "Unknown") + else: + mode = actual_mode if actual_mode is not None else planned_mode + if mode is None: + mode = "Unknown" + + if data_type == "completed" and group_count < 3: + _LOGGER.info( + "[group_intervals_by_mode] completed: time=%s actual_mode=%s planned_mode=%s final_mode=%s", + interval.get("time", "?")[:16], + actual_mode, + planned_mode, + mode, + ) + elif data_type not in ("completed", "planned"): + _LOGGER.debug( + "[group_intervals_by_mode] data_type=both: actual_mode=%s planned_mode=%s final_mode=%s", + actual_mode, + planned_mode, + mode, + ) + + return _normalize_mode_label(mode, mode_names) + + +def _normalize_mode_label(mode: Any, mode_names: Dict[int, str]) -> str: + if isinstance(mode, int): + label = mode_names.get(mode, f"Mode {mode}") + elif mode != "Unknown": + label = str(mode).strip() + else: + label = mode + return label or "Unknown" + + +def _append_interval_group( + groups: List[Dict[str, Any]], + current_group: Optional[Dict[str, Any]], + mode: str, + interval: Dict[str, Any], +) -> Dict[str, Any]: + if not current_group or current_group["mode"] != mode: + current_group = { + "mode": mode, + "start_time": interval.get("time", ""), + "end_time": interval.get("time", ""), + "intervals": [interval], + } + groups.append(current_group) + else: + current_group["intervals"].append(interval) + current_group["end_time"] = interval.get("time", "") + return current_group + + +def _apply_group_costs(group: Dict[str, Any], data_type: str) -> None: + if data_type in ("completed", "both"): + actual_cost = sum( + iv.get("actual", {}).get("net_cost", 0) + for iv in group["intervals"] + if iv.get("actual") is not None + ) + planned_cost = sum( + (iv.get("planned") or {}).get("net_cost", 0) for iv in group["intervals"] + ) + actual_savings = sum( + iv.get("actual", {}).get("savings_vs_home_i", 0) + for iv in group["intervals"] + if iv.get("actual") is not None + ) + planned_savings = sum( + (iv.get("planned") or {}).get("savings_vs_home_i", 0) + for iv in group["intervals"] + ) + delta = actual_cost - planned_cost + delta_pct = (delta / planned_cost * 100) if planned_cost > 0 else 0.0 + + group["actual_cost"] = round(actual_cost, 2) + group["planned_cost"] = round(planned_cost, 2) + group["actual_savings"] = round(actual_savings, 2) + group["planned_savings"] = round(planned_savings, 2) + group["delta"] = round(delta, 2) + group["delta_pct"] = round(delta_pct, 1) + + if data_type == "planned": + planned_cost = sum( + (iv.get("planned") or {}).get("net_cost", 0) for iv in group["intervals"] + ) + planned_savings = sum( + (iv.get("planned") or {}).get("savings_vs_home_i", 0) + for iv in group["intervals"] + ) + group["planned_cost"] = round(planned_cost, 2) + group["planned_savings"] = round(planned_savings, 2) + + +def _format_group_times(group: Dict[str, Any]) -> None: + if group.get("start_time"): + try: + start_dt = datetime.fromisoformat(group["start_time"]) + group["start_time"] = start_dt.strftime("%H:%M") + except Exception: # nosec B110 + pass + + if group.get("end_time"): + try: + end_dt = datetime.fromisoformat(group["end_time"]) + end_dt = end_dt + timedelta(minutes=15) + group["end_time"] = end_dt.strftime("%H:%M") + except Exception: # nosec B110 + pass diff --git a/custom_components/oig_cloud/battery_forecast/planning/mode_guard.py b/custom_components/oig_cloud/battery_forecast/planning/mode_guard.py new file mode 100644 index 00000000..01b54370 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/mode_guard.py @@ -0,0 +1,417 @@ +"""Mode guard helpers extracted from the battery forecast sensor.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Callable, Dict, List, Optional, Tuple + +from homeassistant.core import HomeAssistant +from homeassistant.util import dt as dt_util + +from ..physics import simulate_interval +from ..utils_common import format_time_label, parse_timeline_timestamp + +_LOGGER = logging.getLogger(__name__) + +GetCurrentMode = Callable[[], int] + + +def enforce_min_mode_duration( + modes: List[int], + *, + mode_names: Dict[int, str], + min_mode_duration: Dict[str, int], + logger: logging.Logger = _LOGGER, +) -> List[int]: + """Enforce minimum duration of each mode in the plan.""" + if not modes: + return modes + + result = modes.copy() + n = len(result) + i = 0 + violations_fixed = 0 + + while i < n: + current_mode = result[i] + mode_name = mode_names.get(current_mode, f"Mode {current_mode}") + + block_start = i + block_end = _find_block_end(result, block_start, current_mode) + block_length = block_end - block_start + + min_duration = min_mode_duration.get(mode_name, 1) + + if block_length < min_duration: + violations_fixed += 1 + replacement_mode = _pick_replacement_mode(result, block_start, block_end) + _apply_replacement(result, block_start, block_end, replacement_mode) + logger.debug( + "[MIN_DURATION] Fixed violation: %s block @ %s " + "(length %s < min %s) → %s", + mode_name, + block_start, + block_length, + min_duration, + mode_names.get(replacement_mode, "unknown"), + ) + i = block_start + else: + i = block_end + + if violations_fixed > 0: + logger.info("✅ MIN_MODE_DURATION: Fixed %s violations", violations_fixed) + + return result + + +def _find_block_end(modes: List[int], start: int, mode: int) -> int: + end = start + while end < len(modes) and modes[end] == mode: + end += 1 + return end + + +def _pick_replacement_mode(modes: List[int], start: int, end: int) -> int: + if start == 0: + return modes[end] if end < len(modes) else modes[start] + return modes[start - 1] + + +def _apply_replacement( + modes: List[int], start: int, end: int, replacement_mode: int +) -> None: + for idx in range(start, min(end, len(modes))): + modes[idx] = replacement_mode + + +def get_mode_guard_context( + *, + hass: Optional[HomeAssistant], + box_id: str, + mode_guard_minutes: int, + get_current_mode: GetCurrentMode, +) -> Tuple[Optional[int], Optional[datetime]]: + """Get current mode and guard window end timestamp.""" + if not hass or mode_guard_minutes <= 0: + return None, None + + sensor_id = f"sensor.oig_{box_id}_box_prms_mode" + state = hass.states.get(sensor_id) + if not state or state.state in ["unknown", "unavailable", None]: + return None, None + + current_mode = get_current_mode() + last_changed = getattr(state, "last_changed", None) + if not isinstance(last_changed, datetime): + return current_mode, None + + if last_changed.tzinfo is None: + last_changed = dt_util.as_local(last_changed) + + guard_until = last_changed + timedelta(minutes=mode_guard_minutes) + if guard_until <= dt_util.now(): + return current_mode, None + + return current_mode, guard_until + + +def build_plan_lock( + *, + now: datetime, + spot_prices: List[Dict[str, Any]], + modes: List[int], + mode_guard_minutes: int, + plan_lock_until: Optional[datetime], + plan_lock_modes: Optional[Dict[str, int]], +) -> Tuple[Optional[datetime], Dict[str, int]]: + """Build or reuse lock map for the guard window.""" + if mode_guard_minutes <= 0: + return None, {} + + lock_until = plan_lock_until + lock_modes = plan_lock_modes or {} + if isinstance(lock_until, datetime) and now < lock_until and lock_modes: + return lock_until, lock_modes + + lock_until = now + timedelta(minutes=mode_guard_minutes) + lock_modes = {} + for i, sp in enumerate(spot_prices): + if i >= len(modes): + break + ts_value = sp.get("time") + start_dt = parse_timeline_timestamp(str(ts_value or "")) + if not start_dt: + start_dt = now + timedelta(minutes=15 * i) + if start_dt >= lock_until: + break + if ts_value: + lock_modes[str(ts_value)] = modes[i] + + return lock_until, lock_modes + + +def apply_mode_guard( + *, + modes: List[int], + spot_prices: List[Dict[str, Any]], + solar_kwh_list: List[float], + load_forecast: List[float], + current_capacity: float, + max_capacity: float, + hw_min_capacity: float, + efficiency: float, + home_charge_rate_kw: float, + planning_min_kwh: float, + lock_modes: Dict[str, int], + guard_until: Optional[datetime], + log_rate_limited: Optional[Callable[..., None]] = None, +) -> Tuple[List[int], List[Dict[str, Any]], Optional[datetime]]: + """Apply guard window lock to the planned modes.""" + if not modes or not guard_until or not lock_modes: + return modes, [], None + + now = dt_util.now() + guarded_modes = list(modes) + overrides: List[Dict[str, Any]] = [] + soc = current_capacity + charge_rate_kwh_15min = home_charge_rate_kw / 4.0 + + for i, planned_mode in enumerate(modes): + if i >= len(spot_prices): + break + guard_ctx = _resolve_guard_context(spot_prices, i, now, guard_until, lock_modes) + if guard_ctx is None: + break + _, locked_mode = guard_ctx + + forced_mode, next_soc, override = _apply_guard_interval( + idx=i, + planned_mode=planned_mode, + locked_mode=locked_mode, + soc=soc, + solar_kwh_list=solar_kwh_list, + load_forecast=load_forecast, + max_capacity=max_capacity, + hw_min_capacity=hw_min_capacity, + efficiency=efficiency, + charge_rate_kwh_15min=charge_rate_kwh_15min, + planning_min_kwh=planning_min_kwh, + ) + if override: + overrides.append(override) + if planned_mode != forced_mode: + guarded_modes[i] = forced_mode + + soc = next_soc + + _log_guard_summary(overrides, guard_until, log_rate_limited) + + return guarded_modes, overrides, guard_until + + +def _apply_guard_interval( + *, + idx: int, + planned_mode: int, + locked_mode: Optional[int], + soc: float, + solar_kwh_list: List[float], + load_forecast: List[float], + max_capacity: float, + hw_min_capacity: float, + efficiency: float, + charge_rate_kwh_15min: float, + planning_min_kwh: float, +) -> tuple[int, float, Optional[Dict[str, Any]]]: + solar_kwh, load_kwh = _resolve_interval_loads( + idx, solar_kwh_list, load_forecast + ) + forced_mode = locked_mode if locked_mode is not None else planned_mode + next_soc = _simulate_guard_interval( + forced_mode, + solar_kwh, + load_kwh, + soc, + max_capacity, + hw_min_capacity, + efficiency, + charge_rate_kwh_15min, + ) + + if next_soc < planning_min_kwh: + forced_mode = planned_mode + next_soc = _simulate_guard_interval( + forced_mode, + solar_kwh, + load_kwh, + soc, + max_capacity, + hw_min_capacity, + efficiency, + charge_rate_kwh_15min, + ) + return forced_mode, next_soc, { + "idx": idx, + "type": "guard_exception_soc", + "planned_mode": planned_mode, + "forced_mode": planned_mode, + } + + if planned_mode != forced_mode: + return forced_mode, next_soc, { + "idx": idx, + "type": "guard_locked_plan", + "planned_mode": planned_mode, + "forced_mode": forced_mode, + } + return forced_mode, next_soc, None + + +def _log_guard_summary( + overrides: List[Dict[str, Any]], + guard_until: Optional[datetime], + log_rate_limited: Optional[Callable[..., None]], +) -> None: + if not overrides or not guard_until: + return + if log_rate_limited: + log_rate_limited( + "mode_guard_applied", + "info", + "🛡️ Guard aktivní: zamknuto %s intervalů (do %s)", + len(overrides), + guard_until.isoformat(), + cooldown_s=900.0, + ) + else: + _LOGGER.info( + "🛡️ Guard aktivní: zamknuto %s intervalů (do %s)", + len(overrides), + guard_until.isoformat(), + ) + + +def _resolve_guard_context( + spot_prices: List[Dict[str, Any]], + idx: int, + now: datetime, + guard_until: datetime, + lock_modes: Dict[str, int], +) -> Optional[tuple[Any, Optional[int]]]: + ts_value = spot_prices[idx].get("time") + start_dt = parse_timeline_timestamp(str(ts_value or "")) + if not start_dt: + start_dt = now + timedelta(minutes=15 * idx) + if start_dt >= guard_until: + return None + return ts_value, lock_modes.get(str(ts_value or "")) + + +def _resolve_interval_loads( + idx: int, solar_kwh_list: List[float], load_forecast: List[float] +) -> tuple[float, float]: + solar_kwh = solar_kwh_list[idx] if idx < len(solar_kwh_list) else 0.0 + load_kwh = load_forecast[idx] if idx < len(load_forecast) else 0.125 + return solar_kwh, load_kwh + + +def _simulate_guard_interval( + mode: int, + solar_kwh: float, + load_kwh: float, + soc: float, + max_capacity: float, + hw_min_capacity: float, + efficiency: float, + charge_rate_kwh_15min: float, +) -> float: + res = simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=soc, + capacity_kwh=max_capacity, + hw_min_capacity_kwh=hw_min_capacity, + charge_efficiency=efficiency, + discharge_efficiency=efficiency, + home_charge_rate_kwh_15min=charge_rate_kwh_15min, + ) + return res.new_soc_kwh + + +def apply_guard_reasons_to_timeline( + timeline: List[Dict[str, Any]], + overrides: List[Dict[str, Any]], + guard_until: Optional[datetime], + current_mode: Optional[int], + *, + mode_names: Dict[int, str], +) -> None: + """Inject guard reasons into timeline entries.""" + if not timeline or not overrides: + return + + current_mode_name = ( + mode_names.get(current_mode, "HOME I") if current_mode is not None else "" + ) + guard_until_str = guard_until.isoformat() if guard_until else None + + for override in overrides: + idx = override.get("idx") + if idx is None or idx >= len(timeline): + continue + + entry = timeline[idx] + planned_mode = override.get("planned_mode") + forced_mode = override.get("forced_mode") + override_type = override.get("type") + + planned_name = mode_names.get(planned_mode, "HOME I") + forced_name = mode_names.get(forced_mode, planned_name) + reason = _build_guard_reason( + override_type, + planned_name, + forced_name, + guard_until_str, + ) + + _append_guard_reason(entry, reason) + + if current_mode_name: + entry["guard_current_mode"] = current_mode_name + + +def _build_guard_reason( + override_type: Optional[str], + planned_name: str, + forced_name: str, + guard_until_str: Optional[str], +) -> str: + if override_type == "guard_exception_soc": + return ( + "Výjimka guardu: SoC pod plánovacím minimem – " + f"povolujeme změnu na {planned_name}." + ) + if override_type == "guard_locked_plan": + guard_until_label = format_time_label(guard_until_str) + if guard_until_label != "--:--": + return ( + "Stabilizace: držíme potvrzený plán " + f"{forced_name} do {guard_until_label}." + ) + return f"Stabilizace: držíme potvrzený plán {forced_name}." + return "Stabilizace: držíme potvrzený plán." + + +def _append_guard_reason(entry: Dict[str, Any], reason: str) -> None: + if entry.get("planner_reason"): + entry["planner_reason"] += f"\n{reason}" + else: + entry["planner_reason"] = reason + + if entry.get("reason"): + entry["reason"] = reason + + entry["guard_reason"] = reason diff --git a/custom_components/oig_cloud/battery_forecast/planning/mode_recommendations.py b/custom_components/oig_cloud/battery_forecast/planning/mode_recommendations.py new file mode 100644 index 00000000..abba14b6 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/mode_recommendations.py @@ -0,0 +1,383 @@ +"""Mode recommendation helpers extracted from battery forecast sensor.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +_LOGGER = logging.getLogger(__name__) + + +def create_mode_recommendations( + optimal_timeline: List[Dict[str, Any]], + *, + hours_ahead: int = 48, + now: Optional[datetime] = None, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> List[Dict[str, Any]]: + """Create user-friendly recommendations from the optimized timeline.""" + if not optimal_timeline: + return [] + + try: + current_time = now or datetime.now() + future_intervals = _filter_future_intervals( + optimal_timeline, current_time=current_time, hours_ahead=hours_ahead + ) + if not future_intervals: + return [] + + recommendations = _build_recommendation_blocks( + future_intervals, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + return _split_blocks_by_midnight( + recommendations, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + except Exception as exc: + _LOGGER.error("Failed to create mode recommendations: %s", exc) + return [] + + +def _filter_future_intervals( + optimal_timeline: List[Dict[str, Any]], + *, + current_time: datetime, + hours_ahead: int, +) -> List[Dict[str, Any]]: + tomorrow_end = datetime.combine( + current_time.date() + timedelta(days=1), datetime.max.time() + ) + if hours_ahead > 0: + end_time = min( + tomorrow_end, current_time + timedelta(hours=hours_ahead) + ) + else: + end_time = tomorrow_end # pragma: no cover + + return [ + interval + for interval in optimal_timeline + if interval.get("time") + and current_time <= datetime.fromisoformat(interval["time"]) <= end_time + ] + + +def _build_recommendation_blocks( + future_intervals: List[Dict[str, Any]], + *, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> List[Dict[str, Any]]: + recommendations: List[Dict[str, Any]] = [] + current_block: Optional[Dict[str, Any]] = None + block_intervals: List[Dict[str, Any]] = [] + + for interval in future_intervals: + mode = interval.get("mode") + mode_name = interval.get("mode_name", f"MODE_{mode}") + time_str = interval.get("time", "") + + if current_block is None: + current_block = _new_block(mode, mode_name, time_str) + block_intervals = [interval] + continue + + if current_block["mode"] == mode: + current_block["intervals_count"] += 1 + block_intervals.append(interval) + continue + + _finalize_block( + current_block, + block_intervals, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + recommendations.append(current_block) + current_block = _new_block(mode, mode_name, time_str) + block_intervals = [interval] + + if current_block and block_intervals: + _finalize_block( + current_block, + block_intervals, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + recommendations.append(current_block) + + return recommendations + + +def _new_block(mode: Any, mode_name: str, time_str: str) -> Dict[str, Any]: + return { + "mode": mode, + "mode_name": mode_name, + "from_time": time_str, + "to_time": None, + "intervals_count": 1, + } + + +def _finalize_block( + block: Dict[str, Any], + block_intervals: List[Dict[str, Any]], + *, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> None: + last_interval_time = block_intervals[-1].get("time", "") + try: + last_dt = datetime.fromisoformat(last_interval_time) + end_dt = last_dt + timedelta(minutes=15) + block["to_time"] = end_dt.isoformat() + except Exception: + block["to_time"] = last_interval_time + + add_block_details( + block, + block_intervals, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + block["_intervals"] = block_intervals + + +def _split_blocks_by_midnight( + recommendations: List[Dict[str, Any]], + *, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> List[Dict[str, Any]]: + split_recommendations: List[Dict[str, Any]] = [] + for block in recommendations: + from_dt = datetime.fromisoformat(block["from_time"]) + to_dt = datetime.fromisoformat(block["to_time"]) + + if from_dt.date() == to_dt.date(): + block.pop("_intervals", None) + split_recommendations.append(block) + continue + + midnight = datetime.combine( + from_dt.date() + timedelta(days=1), datetime.min.time() + ) + + intervals = block.get("_intervals", []) + intervals1 = [ + i + for i in intervals + if datetime.fromisoformat(i.get("time", "")) < midnight + ] + intervals2 = [ + i + for i in intervals + if datetime.fromisoformat(i.get("time", "")) >= midnight + ] + + block1 = { + "mode": block["mode"], + "mode_name": block["mode_name"], + "from_time": block["from_time"], + "to_time": midnight.isoformat(), + "intervals_count": len(intervals1), + } + duration1 = (midnight - from_dt).total_seconds() / 3600 + block1["duration_hours"] = round(duration1, 2) + if intervals1: + add_block_details( + block1, + intervals1, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + split_recommendations.append(block1) + + block2 = { + "mode": block["mode"], + "mode_name": block["mode_name"], + "from_time": midnight.isoformat(), + "to_time": block["to_time"], + "intervals_count": len(intervals2), + } + duration2 = (to_dt - midnight).total_seconds() / 3600 + block2["duration_hours"] = round(duration2, 2) + if intervals2: + add_block_details( + block2, + intervals2, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + split_recommendations.append(block2) + + return split_recommendations + + +def add_block_details( + block: Dict[str, Any], + intervals: List[Dict[str, Any]], + *, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> None: + """Add metrics and rationale to a recommendation block.""" + try: + from_dt = datetime.fromisoformat(block["from_time"]) + to_dt = datetime.fromisoformat(block["to_time"]) + duration = (to_dt - from_dt).total_seconds() / 3600 + 0.25 + block["duration_hours"] = round(duration, 2) + except Exception: + block["duration_hours"] = block["intervals_count"] * 0.25 + + if not intervals: + return + + total_cost = sum(i.get("net_cost", 0) for i in intervals) + block["total_cost"] = round(total_cost, 2) + block["savings_vs_home_i"] = 0.0 + + solar_vals = [i.get("solar_kwh", 0) * 4 for i in intervals] + load_vals = [i.get("load_kwh", 0) * 4 for i in intervals] + spot_prices = [i.get("spot_price", 0) for i in intervals] + + block["avg_solar_kw"] = ( + round(sum(solar_vals) / len(solar_vals), 2) + if solar_vals and any(v > 0 for v in solar_vals) + else 0.0 + ) + block["avg_load_kw"] = ( + round(sum(load_vals) / len(load_vals), 2) if load_vals else 0.0 + ) + block["avg_spot_price"] = ( + round(sum(spot_prices) / len(spot_prices), 2) if spot_prices else 0.0 + ) + + mode = block["mode"] + solar_kw = block["avg_solar_kw"] + load_kw = block["avg_load_kw"] + spot_price = block["avg_spot_price"] + + block["rationale"] = _build_mode_rationale( + mode=mode, + solar_kw=solar_kw, + load_kw=load_kw, + spot_price=spot_price, + mode_home_i=mode_home_i, + mode_home_ii=mode_home_ii, + mode_home_iii=mode_home_iii, + mode_home_ups=mode_home_ups, + ) + + +def _build_mode_rationale( + *, + mode: int, + solar_kw: float, + load_kw: float, + spot_price: float, + mode_home_i: int, + mode_home_ii: int, + mode_home_iii: int, + mode_home_ups: int, +) -> str: + if mode == mode_home_i: + return _rationale_home_i(solar_kw=solar_kw, load_kw=load_kw, spot_price=spot_price) + if mode == mode_home_ii: + return _rationale_home_ii(solar_kw=solar_kw, load_kw=load_kw, spot_price=spot_price) + if mode == mode_home_iii: + return _rationale_home_iii(solar_kw=solar_kw, spot_price=spot_price) + if mode == mode_home_ups: + return _rationale_home_ups(spot_price=spot_price) + return "Optimalizovaný režim podle aktuálních podmínek" + + +def _rationale_home_i(*, solar_kw: float, load_kw: float, spot_price: float) -> str: + if solar_kw > load_kw + 0.1: + surplus_kw = solar_kw - load_kw + return ( + "Nabíjíme baterii z FVE přebytku " + f"({surplus_kw:.1f} kW) - ukládáme levnou energii na později" + ) + if solar_kw > 0.2: + deficit_kw = load_kw - solar_kw + return ( + f"FVE pokrývá část spotřeby ({solar_kw:.1f} kW), " + f"baterie doplňuje {deficit_kw:.1f} kW" + ) + return ( + "Vybíjíme baterii pro pokrytí spotřeby - šetříme " + f"{spot_price:.1f} Kč/kWh ze sítě" + ) + + +def _rationale_home_ii(*, solar_kw: float, load_kw: float, spot_price: float) -> str: + if solar_kw > load_kw + 0.1: + surplus_kw = solar_kw - load_kw + return ( + "Nabíjíme baterii z FVE přebytku " + f"({surplus_kw:.1f} kW) - připravujeme na večerní špičku" + ) + if spot_price > 4.0: + return ( + f"Grid pokrývá spotřebu ({spot_price:.1f} Kč/kWh) - " + "ale ještě ne vrcholová cena" + ) + return ( + f"Levný proud ze sítě ({spot_price:.1f} Kč/kWh) - " + "šetříme baterii na dražší období" + ) + + +def _rationale_home_iii(*, solar_kw: float, spot_price: float) -> str: + if solar_kw > 0.2: + return ( + "Maximální nabíjení baterie - veškeré FVE " + f"({solar_kw:.1f} kW) jde do baterie, spotřeba ze sítě" + ) + return ( + "Vybíjíme baterii pro pokrytí spotřeby - šetříme " + f"{spot_price:.1f} Kč/kWh ze sítě" + ) + + +def _rationale_home_ups(*, spot_price: float) -> str: + if spot_price < 3.0: + return ( + "Nabíjíme ze sítě - velmi levný proud " + f"({spot_price:.1f} Kč/kWh), připravujeme plnou baterii" + ) + return ( + f"Nabíjíme ze sítě ({spot_price:.1f} Kč/kWh) - " + "připravujeme na dražší špičku" + ) diff --git a/custom_components/oig_cloud/battery_forecast/planning/scenario_analysis.py b/custom_components/oig_cloud/battery_forecast/planning/scenario_analysis.py new file mode 100644 index 00000000..dbcb7e84 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/planning/scenario_analysis.py @@ -0,0 +1,665 @@ +"""Scenario and cost analysis helpers for battery forecast.""" + +from __future__ import annotations + +import logging +import math +from datetime import datetime, timedelta +from typing import Any, Dict, List + +from homeassistant.util import dt as dt_util + +from ..data.input import get_solar_for_timestamp +from ..physics import simulate_interval as physics_simulate_interval +from ..types import ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, +) + +_LOGGER = logging.getLogger(__name__) + + +def _iter_interval_inputs( + sensor: Any, + *, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], +): + """Yield normalized interval inputs for simulation loops.""" + for idx in range(len(spot_prices)): + timestamp_str = spot_prices[idx].get("time", "") + spot_price = spot_prices[idx].get("price", 0.0) + export_price = ( + export_prices[idx].get("price", 0.0) if idx < len(export_prices) else 0.0 + ) + load_kwh = load_forecast[idx] if idx < len(load_forecast) else 0.0 + + solar_kwh = 0.0 + try: + timestamp = datetime.fromisoformat(timestamp_str) + solar_kwh = get_solar_for_timestamp( + timestamp, + solar_forecast, + log_rate_limited=sensor._log_rate_limited, + ) + except Exception: + solar_kwh = 0.0 + + yield idx, timestamp_str, spot_price, export_price, load_kwh, solar_kwh + + +def simulate_interval( + *, + mode: int, + solar_kwh: float, + load_kwh: float, + battery_soc_kwh: float, + capacity_kwh: float, + hw_min_capacity_kwh: float, + spot_price_czk: float, + export_price_czk: float, + charge_efficiency: float = 0.95, + discharge_efficiency: float = 0.95, + home_charge_rate_kwh_15min: float = 0.7, + planning_min_capacity_kwh: float | None = None, +) -> dict: + """Simulate one 15-minute interval and return costs.""" + effective_min = ( + planning_min_capacity_kwh + if planning_min_capacity_kwh is not None + else hw_min_capacity_kwh + ) + + flows = physics_simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_soc_kwh, + capacity_kwh=capacity_kwh, + hw_min_capacity_kwh=effective_min, + charge_efficiency=charge_efficiency, + discharge_efficiency=discharge_efficiency, + home_charge_rate_kwh_15min=home_charge_rate_kwh_15min, + ) + + grid_cost_czk = flows.grid_import_kwh * spot_price_czk + export_revenue_czk = flows.grid_export_kwh * export_price_czk + net_cost_czk = grid_cost_czk - export_revenue_czk + + return { + "new_soc_kwh": flows.new_soc_kwh, + "grid_import_kwh": flows.grid_import_kwh, + "grid_export_kwh": flows.grid_export_kwh, + "battery_charge_kwh": flows.battery_charge_kwh, + "battery_discharge_kwh": flows.battery_discharge_kwh, + "grid_cost_czk": grid_cost_czk, + "export_revenue_czk": export_revenue_czk, + "net_cost_czk": net_cost_czk, + } + + +def calculate_interval_cost( + simulation_result: Dict[str, Any], + spot_price: float, + export_price: float, + time_of_day: str, +) -> Dict[str, Any]: + """Calculate direct and opportunity cost for one interval.""" + _ = export_price + direct_cost = simulation_result["net_cost"] + + battery_discharge = simulation_result.get("battery_discharge", 0.0) + evening_peak_price = 6.0 + + opportunity_cost = 0.0 + if battery_discharge > 0.001 and time_of_day in ["night", "midday"]: + opportunity_cost = (evening_peak_price - spot_price) * battery_discharge + + total_cost = direct_cost + opportunity_cost + + return { + "direct_cost": direct_cost, + "opportunity_cost": opportunity_cost, + "total_cost": total_cost, + } + + +def calculate_fixed_mode_cost( + sensor: Any, + *, + fixed_mode: int, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + physical_min_capacity: float | None = None, +) -> Dict[str, Any]: + """Calculate cost for staying in a single mode for all intervals.""" + effective_min = ( + physical_min_capacity if physical_min_capacity is not None else min_capacity + ) + + planning_minimum = min_capacity + penalty_cost = 0.0 + planning_violations = 0 + efficiency = sensor._get_battery_efficiency() + + total_cost = 0.0 + total_grid_import = 0.0 + battery_soc = current_capacity + timeline_cache = [] + + for _, timestamp_str, spot_price, export_price, load_kwh, solar_kwh in _iter_interval_inputs( + sensor, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ): + sim_result = simulate_interval( + mode=fixed_mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_soc, + capacity_kwh=max_capacity, + hw_min_capacity_kwh=effective_min, + spot_price_czk=spot_price, + export_price_czk=export_price, + charge_efficiency=efficiency, + discharge_efficiency=efficiency, + ) + + total_cost += sim_result["net_cost_czk"] + total_grid_import += sim_result.get("grid_import_kwh", 0.0) + battery_soc = sim_result["new_soc_kwh"] + + if battery_soc < planning_minimum: + deficit = planning_minimum - battery_soc + interval_penalty = (deficit * spot_price) / efficiency + penalty_cost += interval_penalty + planning_violations += 1 + + if fixed_mode == CBB_MODE_HOME_I: + timeline_cache.append( + { + "time": timestamp_str, + "net_cost": sim_result["net_cost_czk"], + } + ) + + adjusted_total_cost = total_cost + penalty_cost + + return { + "total_cost": round(total_cost, 2), + "grid_import_kwh": round(total_grid_import, 2), + "final_battery_kwh": round(battery_soc, 2), + "penalty_cost": round(penalty_cost, 2), + "planning_violations": planning_violations, + "adjusted_total_cost": round(adjusted_total_cost, 2), + } + + +def calculate_mode_baselines( + sensor: Any, + *, + current_capacity: float, + max_capacity: float, + physical_min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], +) -> Dict[str, Dict[str, Any]]: + """Calculate baseline costs for all modes.""" + baselines: Dict[str, Dict[str, Any]] = {} + + mode_mapping = [ + (CBB_MODE_HOME_I, "HOME_I"), + (CBB_MODE_HOME_II, "HOME_II"), + (CBB_MODE_HOME_III, "HOME_III"), + (CBB_MODE_HOME_UPS, "HOME_UPS"), + ] + + _LOGGER.debug( + "Calculating baselines: physical_min=%.2f kWh (%.0f%%)", + physical_min_capacity, + physical_min_capacity / max_capacity * 100, + ) + + for mode_id, mode_name in mode_mapping: + result = calculate_fixed_mode_cost( + sensor, + fixed_mode=mode_id, + current_capacity=current_capacity, + max_capacity=max_capacity, + min_capacity=physical_min_capacity, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + physical_min_capacity=physical_min_capacity, + ) + + baselines[mode_name] = result + + penalty_info = "" + if result["planning_violations"] > 0: + penalty_info = ( + f", penalty={result['penalty_cost']:.2f} CZK " + f"({result['planning_violations']} violations)" + ) + + _LOGGER.debug( + " %s: cost=%.2f CZK%s, grid_import=%.2f kWh, final_battery=%.2f kWh, " + "adjusted_cost=%.2f CZK", + mode_name, + result["total_cost"], + penalty_info, + result["grid_import_kwh"], + result["final_battery_kwh"], + result["adjusted_total_cost"], + ) + + return baselines + + +def calculate_do_nothing_cost( + sensor: Any, + *, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], +) -> float: + """Calculate costs if current mode stays unchanged.""" + current_mode = sensor._get_current_mode() + efficiency = sensor._get_battery_efficiency() + + _LOGGER.debug( + "[DO NOTHING] Calculating cost for current mode: %s", + current_mode, + ) + + total_cost = 0.0 + battery_soc = current_capacity + + for _, _timestamp_str, spot_price, export_price, load_kwh, solar_kwh in _iter_interval_inputs( + sensor, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ): + sim_result = simulate_interval( + mode=current_mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_soc, + capacity_kwh=max_capacity, + hw_min_capacity_kwh=min_capacity, + spot_price_czk=spot_price, + export_price_czk=export_price, + charge_efficiency=efficiency, + discharge_efficiency=efficiency, + ) + + total_cost += sim_result["net_cost_czk"] + battery_soc = sim_result["new_soc_kwh"] + + return total_cost + + +def calculate_full_ups_cost( + sensor: Any, + *, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], +) -> float: + """Calculate cost for charging to full at cheapest night intervals.""" + efficiency = sensor._get_battery_efficiency() + needed_kwh = max_capacity - current_capacity + ac_charging_limit = 0.7 + intervals_needed = ( + int(math.ceil(needed_kwh / ac_charging_limit)) if needed_kwh > 0.001 else 0 + ) + + _LOGGER.debug( + "[FULL UPS] Need %.2f kWh to reach %.2f kWh, requires %s intervals", + needed_kwh, + max_capacity, + intervals_needed, + ) + + night_intervals = [] + for t, price_data in enumerate(spot_prices): + timestamp_str = price_data.get("time", "") + try: + timestamp = datetime.fromisoformat(timestamp_str) + hour = timestamp.hour + if 22 <= hour or hour < 6: + night_intervals.append((t, price_data.get("price", 0.0))) + except Exception: # nosec B112 + continue + + night_sorted = sorted(night_intervals, key=lambda x: x[1]) + cheapest_intervals = {idx for idx, _price in night_sorted[:intervals_needed]} + + if cheapest_intervals: + _LOGGER.debug( + "[FULL UPS] Selected %s cheapest night intervals from %s total", + len(cheapest_intervals), + len(night_intervals), + ) + + total_cost = 0.0 + battery_soc = current_capacity + + for idx, _timestamp_str, spot_price, export_price, load_kwh, solar_kwh in _iter_interval_inputs( + sensor, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ): + if idx in cheapest_intervals and battery_soc < max_capacity: + mode = CBB_MODE_HOME_UPS + else: + mode = CBB_MODE_HOME_I + + sim_result = simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_soc, + capacity_kwh=max_capacity, + hw_min_capacity_kwh=min_capacity, + spot_price_czk=spot_price, + export_price_czk=export_price, + charge_efficiency=efficiency, + discharge_efficiency=efficiency, + ) + + total_cost += sim_result["net_cost_czk"] + battery_soc = sim_result["new_soc_kwh"] + + return total_cost + + +def generate_alternatives( # noqa: C901 + sensor: Any, + *, + spot_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + optimal_cost_48h: float, + current_capacity: float, + max_capacity: float, + efficiency: float, +) -> Dict[str, Dict[str, Any]]: + """Generate what-if alternatives for all fixed modes.""" + now = dt_util.now() + today_start = datetime.combine(now.date(), datetime.min.time()) + today_start = dt_util.as_local(today_start) + tomorrow_end = today_start + timedelta(hours=48) + + home_i_timeline_cache = [] + + def simulate_mode(mode: int) -> float: + return _simulate_mode_cost( + sensor, + mode=mode, + spot_prices=spot_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + today_start=today_start, + tomorrow_end=tomorrow_end, + current_capacity=current_capacity, + max_capacity=max_capacity, + efficiency=efficiency, + home_i_timeline_cache=home_i_timeline_cache, + ) + + alternatives: Dict[str, Dict[str, Any]] = {} + mode_names = { + 0: "HOME I", + 1: "HOME II", + 2: "HOME III", + 3: "HOME UPS", + } + + for mode, name in mode_names.items(): + cost = simulate_mode(mode) + delta = cost - optimal_cost_48h + alternatives[name] = { + "cost_czk": round(cost, 2), + "delta_czk": round(delta, 2), + } + + alternatives["DO NOTHING"] = { + "cost_czk": round(optimal_cost_48h, 2), + "delta_czk": 0.0, + "current_mode": "Optimized", + } + + return alternatives + + +def _simulate_mode_cost( + sensor: Any, + *, + mode: int, + spot_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + today_start: datetime, + tomorrow_end: datetime, + current_capacity: float, + max_capacity: float, + efficiency: float, + home_i_timeline_cache: List[Dict[str, Any]], +) -> float: + battery = current_capacity + total_cost = 0.0 + + for i, price_data, timestamp, timestamp_str in _iter_price_window( + spot_prices, today_start, tomorrow_end + ): + solar_kwh = _safe_solar_for_timestamp( + sensor, timestamp, solar_forecast + ) + load_kwh = load_forecast[i] if i < len(load_forecast) else 0.125 + price = price_data.get("price", 0) + + if mode == 0: + net_cost, battery = _simulate_home_i( + battery, + load_kwh=load_kwh, + solar_kwh=solar_kwh, + price=price, + max_capacity=max_capacity, + efficiency=efficiency, + ) + total_cost += net_cost + home_i_timeline_cache.append( + {"time": timestamp_str, "net_cost": net_cost} + ) + elif mode == 1: + total_cost, battery = _simulate_home_ii( + total_cost, + battery=battery, + load_kwh=load_kwh, + solar_kwh=solar_kwh, + price=price, + max_capacity=max_capacity, + ) + elif mode == 2: + total_cost, battery = _simulate_home_iii( + total_cost, + battery=battery, + load_kwh=load_kwh, + solar_kwh=solar_kwh, + price=price, + max_capacity=max_capacity, + ) + elif mode == 3: + total_cost, battery = _simulate_home_ups( + total_cost, + battery=battery, + load_kwh=load_kwh, + solar_kwh=solar_kwh, + price=price, + max_capacity=max_capacity, + efficiency=efficiency, + ) + + battery = max(0, min(battery, max_capacity)) + + return total_cost + + +def _iter_price_window( + spot_prices: List[Dict[str, Any]], + today_start: datetime, + tomorrow_end: datetime, +) -> Any: + for i, price_data in enumerate(spot_prices): + timestamp_str = price_data.get("time", "") + if not timestamp_str: + continue + try: + timestamp = datetime.fromisoformat(timestamp_str) + if timestamp.tzinfo is None: + timestamp = dt_util.as_local(timestamp) + if not (today_start <= timestamp < tomorrow_end): + continue + except Exception: # nosec B112 + continue + yield i, price_data, timestamp, timestamp_str + + +def _safe_solar_for_timestamp( + sensor: Any, timestamp: datetime, solar_forecast: Dict[str, Any] +) -> float: + try: + return get_solar_for_timestamp( + timestamp, + solar_forecast, + log_rate_limited=sensor._log_rate_limited, + ) + except Exception: + return 0.0 + + +def _simulate_home_i( + battery: float, + *, + load_kwh: float, + solar_kwh: float, + price: float, + max_capacity: float, + efficiency: float, +) -> tuple[float, float]: + net_cost = 0.0 + if solar_kwh >= load_kwh: + surplus = solar_kwh - load_kwh + battery += surplus + if battery > max_capacity: + grid_export = battery - max_capacity + battery = max_capacity + net_cost = -grid_export * price + else: + deficit = load_kwh - solar_kwh + battery -= deficit / efficiency + if battery < 0: + grid_import = -battery * efficiency + battery = 0 + net_cost = grid_import * price + return net_cost, battery + + +def _simulate_home_ii( + total_cost: float, + *, + battery: float, + load_kwh: float, + solar_kwh: float, + price: float, + max_capacity: float, +) -> tuple[float, float]: + if solar_kwh >= load_kwh: + surplus = solar_kwh - load_kwh + battery += surplus + if battery > max_capacity: + grid_export = battery - max_capacity + battery = max_capacity + total_cost -= grid_export * price + else: + grid_import = load_kwh - solar_kwh + total_cost += grid_import * price + return total_cost, battery + + +def _simulate_home_iii( + total_cost: float, + *, + battery: float, + load_kwh: float, + solar_kwh: float, + price: float, + max_capacity: float, +) -> tuple[float, float]: + battery += solar_kwh + if battery > max_capacity: + grid_export = battery - max_capacity + battery = max_capacity + total_cost -= grid_export * price + total_cost += load_kwh * price + return total_cost, battery + + +def _simulate_home_ups( + total_cost: float, + *, + battery: float, + load_kwh: float, + solar_kwh: float, + price: float, + max_capacity: float, + efficiency: float, +) -> tuple[float, float]: + if price < 1.5: + charge_amount = min(2.8 / 4.0, max_capacity - battery) + if charge_amount > 0: + total_cost += charge_amount * price + battery += charge_amount * efficiency + + if solar_kwh >= load_kwh: + surplus = solar_kwh - load_kwh + battery += surplus + if battery > max_capacity: + grid_export = battery - max_capacity + battery = max_capacity + total_cost -= grid_export * price + else: + deficit = load_kwh - solar_kwh + battery -= deficit / efficiency + if battery < 0: + extra_import = -battery * efficiency + battery = 0 + total_cost += extra_import * price + return total_cost, battery diff --git a/custom_components/oig_cloud/battery_forecast/presentation/__init__.py b/custom_components/oig_cloud/battery_forecast/presentation/__init__.py new file mode 100644 index 00000000..8982d71a --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/__init__.py @@ -0,0 +1 @@ +"""Presentation helpers for battery forecast UI/data.""" diff --git a/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs.py b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs.py new file mode 100644 index 00000000..81a1051a --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs.py @@ -0,0 +1,106 @@ +"""Detail tabs builders extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional + +from .detail_tabs_blocks import build_mode_blocks_for_tab +from .detail_tabs_summary import calculate_tab_summary, default_metrics_summary + +_LOGGER = logging.getLogger(__name__) + + +async def build_detail_tabs( + sensor: Any, + *, + tab: Optional[str] = None, + plan: str = "hybrid", + mode_names: Optional[Dict[int, str]] = None, +) -> Dict[str, Any]: + """Build Detail Tabs data (aggregated mode blocks).""" + _ = plan + mode_names = mode_names or {} + + timeline_extended = await sensor.build_timeline_extended() + hybrid_tabs = await build_hybrid_detail_tabs( + sensor, tab=tab, timeline_extended=timeline_extended, mode_names=mode_names + ) + + return sensor._decorate_plan_tabs( # pylint: disable=protected-access + primary_tabs=hybrid_tabs, + secondary_tabs={}, + primary_plan="hybrid", + secondary_plan="none", + ) + + +async def build_hybrid_detail_tabs( + sensor: Any, + *, + tab: Optional[str] = None, + timeline_extended: Optional[Dict[str, Any]] = None, + mode_names: Optional[Dict[int, str]] = None, +) -> Dict[str, Any]: + """Internal helper that builds hybrid detail tabs.""" + result: Dict[str, Any] = {} + if timeline_extended is None: + timeline_extended = await sensor.build_timeline_extended() + + mode_names = mode_names or {} + tabs_to_process = _resolve_tabs(tab) + + for tab_name in tabs_to_process: + tab_data = timeline_extended.get(tab_name, {}) + intervals = tab_data.get("intervals", []) + date_str = tab_data.get("date", "") + + tab_result = _build_tab_result( + sensor, tab_name, date_str, intervals, mode_names=mode_names + ) + + result[tab_name] = tab_result + + return result + + +def _resolve_tabs(tab: Optional[str]) -> List[str]: + if tab is None: + return ["yesterday", "today", "tomorrow"] + if tab in ["yesterday", "today", "tomorrow"]: + return [tab] + _LOGGER.warning("Invalid tab requested: %s, returning all tabs", tab) + return ["yesterday", "today", "tomorrow"] + + +def _build_tab_result( + sensor: Any, + tab_name: str, + date_str: str, + intervals: List[Dict[str, Any]], + *, + mode_names: Dict[int, str], +) -> Dict[str, Any]: + if not intervals: + return { + "date": date_str, + "mode_blocks": [], + "summary": { + "total_cost": 0.0, + "overall_adherence": 100, + "mode_switches": 0, + "metrics": default_metrics_summary(), + }, + "intervals": [], + } + + mode_blocks = build_mode_blocks_for_tab( + sensor, intervals, tab_name, mode_names=mode_names + ) + summary = calculate_tab_summary(sensor, mode_blocks, intervals) + return { + "date": date_str, + "mode_blocks": mode_blocks, + "summary": summary, + "intervals": intervals, + } diff --git a/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_blocks.py b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_blocks.py new file mode 100644 index 00000000..2ff512c9 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_blocks.py @@ -0,0 +1,835 @@ +"""Detail tab block helpers for battery forecast.""" + +from __future__ import annotations + +import logging +import math +from collections import Counter +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Tuple + +from homeassistant.util import dt as dt_util + +from ..timeline.planner import format_planner_reason +from ..utils_common import format_time_label, safe_nested_get + +_LOGGER = logging.getLogger(__name__) + + +def determine_block_status( + first_interval: Dict[str, Any], + last_interval: Dict[str, Any], + tab_name: str, + now: datetime, +) -> str: + """Determine block status: completed | current | planned.""" + if tab_name == "yesterday": + return "completed" + if tab_name == "tomorrow": + return "planned" + + start_time_str = first_interval.get("time", "") + end_time_str = last_interval.get("time", "") + + if not start_time_str or not end_time_str: + return "planned" + + try: + start_time = datetime.fromisoformat(start_time_str) + end_time = datetime.fromisoformat(end_time_str) + + if start_time.tzinfo is None: + start_time = dt_util.as_local(start_time) + if end_time.tzinfo is None: + end_time = dt_util.as_local(end_time) + + end_time = end_time + timedelta(minutes=15) + + current_minute = (now.minute // 15) * 15 + current_interval_time = now.replace( + minute=current_minute, second=0, microsecond=0 + ) + + start_time_naive = ( + start_time.replace(tzinfo=None) if start_time.tzinfo else start_time + ) + end_time_naive = end_time.replace(tzinfo=None) if end_time.tzinfo else end_time + current_interval_naive = current_interval_time.replace(tzinfo=None) + + if end_time_naive <= current_interval_naive: + return "completed" + if start_time_naive <= current_interval_naive < end_time_naive: + return "current" + return "planned" + except Exception as err: + _LOGGER.warning("[determine_block_status] Error parsing times: %s", err) + return "planned" + + +def get_mode_from_intervals( + intervals: List[Dict[str, Any]], + key: str, + mode_names: Dict[int, str], +) -> Optional[str]: + """Get mode name from intervals (actual or planned).""" + for interval in intervals: + data = interval.get(key) + if data and isinstance(data, dict): + mode = data.get("mode") + if isinstance(mode, int): + return mode_names.get(mode, f"Mode {mode}") + if mode: + return str(mode) + return None + + +def _summarize_guard_reason( + guard_metrics: Dict[str, Any], block: Dict[str, Any] +) -> Optional[str]: + guard_type = guard_metrics.get("guard_type") + if guard_type == "guard_exception_soc": + planned_mode = guard_metrics.get("guard_planned_mode") or block.get( + "mode_planned" + ) + return ( + "Výjimka guardu: SoC pod plánovacím minimem – " + f"povolujeme {planned_mode}." + ) + + forced_mode = guard_metrics.get("guard_forced_mode") or block.get("mode_planned") + guard_until = guard_metrics.get("guard_until") + guard_until_label = format_time_label(guard_until) + if guard_until_label != "--:--": + return f"Stabilizace: držíme režim {forced_mode} do {guard_until_label}." + return f"Stabilizace: držíme režim {forced_mode} 60 min po poslední změně." + + +def _summarize_dominant_code( + dominant_code: str, + avg_price: Optional[float], + avg_future_ups: Optional[float], + band_pct: float, +) -> Optional[str]: + if dominant_code == "price_band_hold": + if avg_price is not None: + if avg_future_ups is not None and avg_price <= avg_future_ups - 0.01: + return ( + "UPS držíme v cenovém pásmu ±" + f"{band_pct * 100:.0f}% " + f"(průměr {avg_price:.2f} Kč/kWh, " + f"levnější než další okna {avg_future_ups:.2f} Kč/kWh)." + ) + return ( + "UPS držíme v cenovém pásmu ±" + f"{band_pct * 100:.0f}% " + f"(průměr {avg_price:.2f} Kč/kWh)." + ) + return "UPS držíme v cenovém pásmu dle účinnosti." + + reason_text = format_planner_reason(dominant_code, spot_price=avg_price) + if reason_text: + if avg_price is not None and "Kč/kWh" not in reason_text: + reason_text = f"{reason_text} (průměr {avg_price:.2f} Kč/kWh)." + return reason_text + return None + + +def _resolve_charge_kwh( + avg_grid_charge: Optional[float], delta_kwh: Optional[float] +) -> Optional[float]: + if avg_grid_charge is not None and avg_grid_charge > 0.01: + return avg_grid_charge + if delta_kwh is not None and delta_kwh > 0.05: + return delta_kwh + return None + + +def _summarize_ups_mode( + avg_price: Optional[float], + max_ups_price: float, + charge_kwh: Optional[float], + avg_future_ups: Optional[float], +) -> Optional[str]: + if avg_price is None: + return "UPS režim (plánované nabíjení)." + + if avg_price <= max_ups_price + 0.0001: + detail = ( + "Nabíjíme ze sítě" + + (f" (+{charge_kwh:.2f} kWh)" if charge_kwh else "") + + f": {avg_price:.2f} Kč/kWh ≤ limit {max_ups_price:.2f}." + ) + if avg_future_ups is not None and avg_price <= avg_future_ups - 0.01: + detail += ( + " Je levnější než další UPS okna " + f"({avg_future_ups:.2f} Kč/kWh)." + ) + return detail + + detail = ( + f"UPS režim i přes vyšší cenu {avg_price:.2f} Kč/kWh " + f"(limit {max_ups_price:.2f})" + ) + if charge_kwh: + detail += f", nabíjení +{charge_kwh:.2f} kWh." + else: + detail += "." + return detail + + +def _summarize_home2_mode( + avg_home1_saving: Optional[float], avg_recharge_cost: Optional[float] +) -> Optional[str]: + if avg_home1_saving is not None and avg_recharge_cost is not None: + return ( + "Držíme baterii (HOME II): HOME I by ušetřil ~" + f"{avg_home1_saving:.2f} Kč, dobíjení v UPS ~{avg_recharge_cost:.2f} Kč." + ) + return "Držíme baterii (HOME II), bez vybíjení do zátěže." + + +def _summarize_home3_mode( + avg_solar: Optional[float], avg_load: Optional[float] +) -> Optional[str]: + if avg_solar is not None and avg_load is not None and avg_solar > avg_load: + return ( + "HOME III: FVE pokrývá spotřebu " + f"({avg_solar:.2f} kWh > {avg_load:.2f} kWh), " + "maximalizujeme nabíjení." + ) + return "Maximalizujeme nabíjení z FVE, spotřeba jde ze sítě." + + +def _summarize_home1_mode( + delta_kwh: Optional[float], + avg_price: Optional[float], + avg_future_ups: Optional[float], + max_ups_price: float, + avg_solar: Optional[float], + avg_load: Optional[float], +) -> Optional[str]: + if delta_kwh is not None and delta_kwh < -0.05: + if avg_price is not None and avg_future_ups is not None: + delta_price = avg_price - avg_future_ups + if delta_price > 0.01: + return ( + "Vybíjíme baterii (-" + f"{abs(delta_kwh):.2f} kWh), protože UPS by byl " + f"o {delta_price:.2f} Kč/kWh dražší " + f"(nyní {avg_price:.2f}, UPS okna {avg_future_ups:.2f})." + ) + if avg_price is not None and avg_price > max_ups_price + 0.0001: + return ( + "Vybíjíme baterii (-" + f"{abs(delta_kwh):.2f} kWh), cena {avg_price:.2f} Kč/kWh " + f"je nad limitem UPS {max_ups_price:.2f} Kč/kWh." + ) + return ( + "Vybíjíme baterii (-" f"{abs(delta_kwh):.2f} kWh) místo odběru ze sítě." + ) + if delta_kwh is not None and delta_kwh > 0.05: + return ( + "Solár pokrývá spotřebu, přebytky ukládáme do baterie " + f"(+{delta_kwh:.2f} kWh)." + ) + if avg_solar is not None and avg_load is not None and avg_solar >= avg_load: + return ( + "Solár pokrývá spotřebu " + f"({avg_solar:.2f} kWh ≥ {avg_load:.2f} kWh), " + "baterie se výrazně nemění." + ) + return "Solár pokrývá spotřebu, baterie se výrazně nemění." + + +def _select_data_type(tab_name: str) -> str: + if tab_name == "yesterday": + return "completed" + if tab_name == "today": + return "both" + return "planned" + + +def _extract_soc_payload( + interval_entry: Dict[str, Any], + branch: str, + total_capacity: float, +) -> Tuple[float, float]: + source = interval_entry.get(branch) if isinstance(interval_entry, dict) else None + if not isinstance(source, dict): + return (0.0, 0.0) + + raw_soc = source.get("battery_soc") + raw_kwh = source.get("battery_kwh") + if raw_kwh is None: + raw_kwh = source.get("battery_capacity_kwh") + + soc_percent, kwh_value = _resolve_soc_and_kwh(raw_soc, raw_kwh, total_capacity) + return (round(soc_percent, 1), round(kwh_value, 2)) + + +def _resolve_soc_and_kwh( + raw_soc: Optional[float], + raw_kwh: Optional[float], + total_capacity: float, +) -> Tuple[float, float]: + soc_percent: Optional[float] = None + kwh_value: Optional[float] = raw_kwh + + if raw_soc is not None: + if total_capacity > 0 and raw_soc <= total_capacity + 0.01: + if kwh_value is None: + kwh_value = raw_soc + else: + soc_percent = raw_soc + + if soc_percent is None and kwh_value is not None and total_capacity > 0: + soc_percent = (kwh_value / total_capacity) * 100.0 + + if soc_percent is not None and kwh_value is None and total_capacity > 0: + kwh_value = (soc_percent / 100.0) * total_capacity + + return (soc_percent or 0.0, kwh_value or 0.0) + + +def _interval_net(interval_entry: Dict[str, Any], branch: str) -> Optional[float]: + if not isinstance(interval_entry.get(branch), dict): + return None + import_val = safe_nested_get(interval_entry, branch, "grid_import", default=None) + if import_val is None: + import_val = safe_nested_get( + interval_entry, branch, "grid_import_kwh", default=None + ) + export_val = safe_nested_get(interval_entry, branch, "grid_export", default=None) + if export_val is None: + export_val = safe_nested_get( + interval_entry, branch, "grid_export_kwh", default=None + ) + if import_val is None and export_val is None: + return None + return (import_val or 0.0) - (export_val or 0.0) + + +def _round_or_none(value: float, samples: int) -> Optional[float]: + return round(value, 2) if samples > 0 else None + + +def _calc_delta(actual_val: Optional[float], planned_val: float) -> Optional[float]: + if actual_val is None: + return None + return round(actual_val - planned_val, 2) + + +def summarize_block_reason( + sensor: Any, group_intervals: List[Dict[str, Any]], block: Dict[str, Any] +) -> Optional[str]: + planned_entries, _, entries_source = _select_block_entries(group_intervals) + if not entries_source: + return None + + metrics_list = _extract_metrics(planned_entries) + guard_reason = _resolve_guard_reason(metrics_list, block) + if guard_reason: + return guard_reason + + ( + dominant_code, + avg_data, + delta_kwh, + max_ups_price, + band_pct, + mode_upper, + ) = _prepare_block_reason_inputs(sensor, entries_source, metrics_list, block) + + return _resolve_block_reason( + dominant_code, + avg_data, + delta_kwh, + max_ups_price, + band_pct, + mode_upper, + entries_source, + ) + + +def _resolve_block_reason( + dominant_code: str, + avg_data: Dict[str, Any], + delta_kwh: Optional[float], + max_ups_price: Optional[float], + band_pct: Optional[float], + mode_upper: str, + entries_source: List[Dict[str, Any]], +) -> Optional[str]: + reason_text = _resolve_reason_from_code( + dominant_code, avg_data["avg_price"], avg_data["avg_future_ups"], band_pct + ) + if reason_text: + return reason_text + + reason_text = _resolve_reason_from_mode( + mode_upper, + avg_data, + delta_kwh, + max_ups_price, + ) + if reason_text: + return reason_text + + return _resolve_fallback_reason(entries_source) + + +def _prepare_block_reason_inputs( + sensor: Any, + entries_source: List[Dict[str, Any]], + metrics_list: List[Dict[str, Any]], + block: Dict[str, Any], +) -> tuple[ + Optional[str], + Dict[str, Optional[float]], + Optional[float], + float, + float, + str, +]: + dominant_code = _dominant_reason_code(metrics_list) + avg_data = _compute_block_averages(entries_source, metrics_list) + delta_kwh = _delta_kwh(block) + max_ups_price, band_pct = _resolve_price_band(sensor) + mode_upper = _resolve_mode_upper(block) + return dominant_code, avg_data, delta_kwh, max_ups_price, band_pct, mode_upper + + +def _resolve_reason_from_code( + dominant_code: Optional[str], + avg_price: Optional[float], + avg_future_ups: Optional[float], + band_pct: float, +) -> Optional[str]: + if not dominant_code: + return None + return _summarize_dominant_code(dominant_code, avg_price, avg_future_ups, band_pct) + + +def _resolve_reason_from_mode( + mode_upper: str, + avg_data: Dict[str, Optional[float]], + delta_kwh: Optional[float], + max_ups_price: float, +) -> Optional[str]: + if "UPS" in mode_upper: + charge_kwh = _resolve_charge_kwh(avg_data["avg_grid_charge"], delta_kwh) + return _summarize_ups_mode( + avg_data["avg_price"], + max_ups_price, + charge_kwh, + avg_data["avg_future_ups"], + ) + if "HOME II" in mode_upper or "HOME 2" in mode_upper: + return _summarize_home2_mode( + avg_data["avg_home1_saving"], avg_data["avg_recharge_cost"] + ) + if "HOME III" in mode_upper or "HOME 3" in mode_upper: + return _summarize_home3_mode(avg_data["avg_solar"], avg_data["avg_load"]) + if "HOME I" in mode_upper or "HOME 1" in mode_upper: + return _summarize_home1_mode( + delta_kwh, + avg_data["avg_price"], + avg_data["avg_future_ups"], + max_ups_price, + avg_data["avg_solar"], + avg_data["avg_load"], + ) + return None + + +def _resolve_fallback_reason(entries_source: List[Dict[str, Any]]) -> Optional[str]: + reasons = [ + p.get("decision_reason") for p in entries_source if p.get("decision_reason") + ] + if reasons: + return Counter(reasons).most_common(1)[0][0] + return None + + +def _select_block_entries( + group_intervals: List[Dict[str, Any]] +) -> tuple[list[Dict[str, Any]], list[Dict[str, Any]], list[Dict[str, Any]]]: + planned_entries = [ + iv.get("planned") + for iv in group_intervals + if isinstance(iv.get("planned"), dict) + ] + actual_entries = [ + iv.get("actual") for iv in group_intervals if isinstance(iv.get("actual"), dict) + ] + entries_source = planned_entries if planned_entries else actual_entries + return planned_entries, actual_entries, entries_source + + +def _extract_metrics(planned_entries: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + return [p.get("decision_metrics") or {} for p in planned_entries] if planned_entries else [] + + +def _resolve_guard_reason( + metrics_list: List[Dict[str, Any]], block: Dict[str, Any] +) -> Optional[str]: + if not metrics_list: + return None + guard_metrics = next((m for m in metrics_list if m.get("guard_active")), None) + if guard_metrics: + return _summarize_guard_reason(guard_metrics, block) + return None + + +def _dominant_reason_code(metrics_list: List[Dict[str, Any]]) -> Optional[str]: + reason_codes = [ + m.get("planner_reason_code") + for m in metrics_list + if m.get("planner_reason_code") + ] + return Counter(reason_codes).most_common(1)[0][0] if reason_codes else None + + +def _mean_values(values: List[Optional[float]]) -> Optional[float]: + vals = [v for v in values if isinstance(v, (int, float)) and not math.isnan(v)] + if not vals: + return None + return sum(vals) / len(vals) + + +def _compute_block_averages( + entries_source: List[Dict[str, Any]], + metrics_list: List[Dict[str, Any]], +) -> Dict[str, Optional[float]]: + def _avg_from_metrics(key: str) -> Optional[float]: + if not metrics_list: + return None + return _mean_values([m.get(key) for m in metrics_list if m.get(key) is not None]) + + def _avg_from_entries(key: str) -> Optional[float]: + return _mean_values( + [ + entry.get(key) + for entry in entries_source + if isinstance(entry.get(key), (int, float)) + ] + ) + + prices: List[Optional[float]] = [] + for entry in entries_source: + price = entry.get("spot_price") + if price is None: + price = entry.get("spot_price_czk") + if price is None: + price = (entry.get("decision_metrics") or {}).get("spot_price_czk") + prices.append(price) + + return { + "avg_price": _mean_values(prices), + "avg_future_ups": _avg_from_metrics("future_ups_avg_price_czk"), + "avg_grid_charge": _avg_from_metrics("grid_charge_kwh"), + "avg_home1_saving": _avg_from_metrics("home1_saving_czk"), + "avg_recharge_cost": _avg_from_metrics("recharge_cost_czk"), + "avg_solar": _avg_from_entries("solar_kwh"), + "avg_load": _avg_from_entries("consumption_kwh"), + } + + +def _delta_kwh(block: Dict[str, Any]) -> Optional[float]: + start_kwh = block.get("battery_kwh_start") + end_kwh = block.get("battery_kwh_end") + if isinstance(start_kwh, (int, float)) and isinstance(end_kwh, (int, float)): + return end_kwh - start_kwh + return None + + +def _resolve_price_band(sensor: Any) -> tuple[float, float]: + opts = ( + sensor._config_entry.options if getattr(sensor, "_config_entry", None) else {} + ) + max_ups_price = float(opts.get("max_ups_price_czk", 10.0)) + efficiency = float(sensor._get_battery_efficiency() or 0.0) + if 0 < efficiency <= 1.0: + band_pct = max(0.08, (1.0 / efficiency) - 1.0) + else: + band_pct = 0.08 + return max_ups_price, band_pct + + +def _resolve_mode_upper(block: Dict[str, Any]) -> str: + mode_label = block.get("mode_planned") or block.get("mode_historical") or "" + return str(mode_label).upper() + + +def build_mode_blocks_for_tab( # noqa: C901 + sensor: Any, + intervals: List[Dict[str, Any]], + tab_name: str, + *, + mode_names: Dict[int, str], +) -> List[Dict[str, Any]]: + """Build mode blocks for a detail tab.""" + if not intervals: + return [] + + now = dt_util.now() + + data_type = _select_data_type(tab_name) + + mode_groups = sensor._group_intervals_by_mode( + intervals, data_type + ) # pylint: disable=protected-access + + _LOGGER.info( + "[build_mode_blocks_for_tab] tab=%s, data_type=%s, intervals_count=%s, mode_groups_count=%s", + tab_name, + data_type, + len(intervals), + len(mode_groups), + ) + + total_capacity = ( + sensor._get_total_battery_capacity() or 0.0 + ) # pylint: disable=protected-access + + mode_blocks = [] + for group in mode_groups: + block = _build_mode_block( + sensor=sensor, + group=group, + tab_name=tab_name, + now=now, + data_type=data_type, + mode_names=mode_names, + total_capacity=total_capacity, + ) + if block: + mode_blocks.append(block) + + return mode_blocks + + +def _build_mode_block( + *, + sensor: Any, + group: Dict[str, Any], + tab_name: str, + now: datetime, + data_type: str, + mode_names: Dict[int, str], + total_capacity: float, +) -> Optional[Dict[str, Any]]: + group_intervals = group.get("intervals", []) + if not group_intervals: + return None + + block = _init_mode_block(group, group_intervals, tab_name, now) + _populate_mode_costs(block, group, group_intervals, data_type, mode_names) + _populate_soc_fields( + block, group_intervals, data_type, total_capacity + ) + stats = _accumulate_energy_stats(group_intervals) + _apply_energy_stats(block, stats) + _apply_block_reason(sensor, group_intervals, block) + _apply_adherence(block, data_type) + return block + + +def _init_mode_block( + group: Dict[str, Any], + group_intervals: List[Dict[str, Any]], + tab_name: str, + now: datetime, +) -> Dict[str, Any]: + block = { + "mode_historical": group.get("mode", "Unknown"), + "mode_planned": group.get("mode", "Unknown"), + "mode_match": True, + "status": determine_block_status( + group_intervals[0], group_intervals[-1], tab_name, now + ), + "start_time": group.get("start_time", ""), + "end_time": group.get("end_time", ""), + "interval_count": group.get("interval_count", 0), + } + duration_hours = block["interval_count"] * 0.25 + block["duration_hours"] = round(duration_hours, 2) + return block + + +def _populate_mode_costs( + block: Dict[str, Any], + group: Dict[str, Any], + group_intervals: List[Dict[str, Any]], + data_type: str, + mode_names: Dict[int, str], +) -> None: + if data_type in ["completed", "both"]: + block["cost_historical"] = group.get("actual_cost", 0.0) + block["cost_planned"] = group.get("planned_cost", 0.0) + block["cost_delta"] = group.get("delta", 0.0) + + historical_mode = get_mode_from_intervals(group_intervals, "actual", mode_names) + planned_mode = get_mode_from_intervals(group_intervals, "planned", mode_names) + block["mode_historical"] = historical_mode or "Unknown" + block["mode_planned"] = planned_mode or "Unknown" + block["mode_match"] = historical_mode == planned_mode + else: + block["cost_planned"] = group.get("planned_cost", 0.0) + block["cost_historical"] = None + block["cost_delta"] = None + + +def _populate_soc_fields( + block: Dict[str, Any], + group_intervals: List[Dict[str, Any]], + data_type: str, + total_capacity: float, +) -> None: + first_interval = group_intervals[0] + last_interval = group_intervals[-1] + branch = "actual" if data_type in ["completed", "both"] else "planned" + start_soc_pct, start_soc_kwh = _extract_soc_payload( + first_interval, branch, total_capacity + ) + end_soc_pct, end_soc_kwh = _extract_soc_payload( + last_interval, branch, total_capacity + ) + block["battery_soc_start"] = start_soc_pct + block["battery_soc_end"] = end_soc_pct + block["battery_kwh_start"] = start_soc_kwh + block["battery_kwh_end"] = end_soc_kwh + + +def _accumulate_energy_stats(group_intervals: List[Dict[str, Any]]) -> Dict[str, Any]: + stats = { + "solar_plan_total": 0.0, + "solar_actual_total": 0.0, + "solar_actual_samples": 0, + "consumption_plan_total": 0.0, + "consumption_actual_total": 0.0, + "consumption_actual_samples": 0, + "grid_plan_net_total": 0.0, + "grid_actual_net_total": 0.0, + "grid_actual_samples": 0, + "grid_plan_export_total": 0.0, + "grid_actual_export_total": 0.0, + "grid_export_actual_samples": 0, + } + for iv in group_intervals: + stats["solar_plan_total"] += safe_nested_get( + iv, "planned", "solar_kwh", default=0 + ) + stats["consumption_plan_total"] += safe_nested_get( + iv, "planned", "consumption_kwh", default=0 + ) + stats["grid_plan_net_total"] += _interval_net(iv, "planned") or 0.0 + stats["grid_plan_export_total"] += safe_nested_get( + iv, "planned", "grid_export", default=0 + ) or safe_nested_get(iv, "planned", "grid_export_kwh", default=0) + + actual_solar = safe_nested_get(iv, "actual", "solar_kwh", default=None) + if actual_solar is not None: + stats["solar_actual_total"] += actual_solar + stats["solar_actual_samples"] += 1 + + actual_consumption = safe_nested_get( + iv, "actual", "consumption_kwh", default=None + ) + if actual_consumption is not None: + stats["consumption_actual_total"] += actual_consumption + stats["consumption_actual_samples"] += 1 + + actual_net = _interval_net(iv, "actual") + if actual_net is not None: + stats["grid_actual_net_total"] += actual_net + stats["grid_actual_samples"] += 1 + + actual_export = safe_nested_get(iv, "actual", "grid_export", default=None) + if actual_export is None: + actual_export = safe_nested_get( + iv, "actual", "grid_export_kwh", default=None + ) + if actual_export is not None: + stats["grid_actual_export_total"] += actual_export + stats["grid_export_actual_samples"] += 1 + + return stats + + +def _apply_energy_stats(block: Dict[str, Any], stats: Dict[str, Any]) -> None: + block["solar_planned_kwh"] = round(stats["solar_plan_total"], 2) + block["solar_actual_kwh"] = _round_or_none( + stats["solar_actual_total"], stats["solar_actual_samples"] + ) + + block["consumption_planned_kwh"] = round(stats["consumption_plan_total"], 2) + block["consumption_actual_kwh"] = _round_or_none( + stats["consumption_actual_total"], stats["consumption_actual_samples"] + ) + + block["grid_import_planned_kwh"] = round(stats["grid_plan_net_total"], 2) + block["grid_import_actual_kwh"] = _round_or_none( + stats["grid_actual_net_total"], stats["grid_actual_samples"] + ) + + block["grid_export_planned_kwh"] = round(stats["grid_plan_export_total"], 2) + block["grid_export_actual_kwh"] = _round_or_none( + stats["grid_actual_export_total"], stats["grid_export_actual_samples"] + ) + + block["solar_total_kwh"] = ( + block["solar_actual_kwh"] + if block["solar_actual_kwh"] is not None + else block["solar_planned_kwh"] + ) + block["consumption_total_kwh"] = ( + block["consumption_actual_kwh"] + if block["consumption_actual_kwh"] is not None + else block["consumption_planned_kwh"] + ) + block["grid_import_total_kwh"] = ( + block["grid_import_actual_kwh"] + if block["grid_import_actual_kwh"] is not None + else block["grid_import_planned_kwh"] + ) + block["grid_export_total_kwh"] = ( + block["grid_export_actual_kwh"] + if block["grid_export_actual_kwh"] is not None + else block["grid_export_planned_kwh"] + ) + + block["solar_delta_kwh"] = _calc_delta( + block["solar_actual_kwh"], block["solar_planned_kwh"] + ) + block["consumption_delta_kwh"] = _calc_delta( + block["consumption_actual_kwh"], block["consumption_planned_kwh"] + ) + block["grid_import_delta_kwh"] = _calc_delta( + block["grid_import_actual_kwh"], block["grid_import_planned_kwh"] + ) + block["grid_export_delta_kwh"] = _calc_delta( + block["grid_export_actual_kwh"], block["grid_export_planned_kwh"] + ) + + +def _apply_block_reason( + sensor: Any, group_intervals: List[Dict[str, Any]], block: Dict[str, Any] +) -> None: + block_reason = summarize_block_reason(sensor, group_intervals, block) + if block_reason: + block["interval_reasons"] = [ + { + "time": block.get("start_time", ""), + "reason": block_reason, + } + ] + + +def _apply_adherence(block: Dict[str, Any], data_type: str) -> None: + if data_type in ["completed", "both"] and block["mode_match"]: + block["adherence_pct"] = 100 + elif data_type in ["completed", "both"]: + block["adherence_pct"] = 0 + else: + block["adherence_pct"] = None diff --git a/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_summary.py b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_summary.py new file mode 100644 index 00000000..cb37a686 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/detail_tabs_summary.py @@ -0,0 +1,256 @@ +"""Detail tab summary helpers for battery forecast.""" + +from __future__ import annotations + +from typing import Any, Dict, List, Optional + +from ..utils_common import safe_nested_get + + +def default_metrics_summary() -> Dict[str, Dict[str, Any]]: + """Return default summary metrics payload.""" + return { + "cost": {"plan": 0.0, "actual": 0.0, "unit": "Kč", "has_actual": False}, + "solar": {"plan": 0.0, "actual": 0.0, "unit": "kWh", "has_actual": False}, + "consumption": { + "plan": 0.0, + "actual": 0.0, + "unit": "kWh", + "has_actual": False, + }, + "grid": {"plan": 0.0, "actual": 0.0, "unit": "kWh", "has_actual": False}, + } + + +def aggregate_interval_metrics( + intervals: List[Dict[str, Any]], +) -> Dict[str, Dict[str, Any]]: + """Aggregate plan vs actual metrics for summary tiles.""" + + metrics_template = { + "plan": 0.0, + "actual": 0.0, + "actual_samples": 0, + } + + metrics = { + "cost": dict(metrics_template), + "solar": dict(metrics_template), + "consumption": dict(metrics_template), + "grid": dict(metrics_template), + } + + for interval in intervals or []: + plan_cost = _get_plan_value(interval, "net_cost") + actual_cost = _get_actual_value(interval, "net_cost") + _accumulate_metric(metrics, "cost", plan_cost, actual_cost) + + plan_solar = _get_plan_value(interval, "solar_kwh") + actual_solar = _get_actual_value(interval, "solar_kwh") + _accumulate_metric(metrics, "solar", plan_solar, actual_solar) + + plan_consumption = _get_plan_value(interval, "consumption_kwh") + actual_consumption = _get_actual_value(interval, "consumption_kwh") + _accumulate_metric(metrics, "consumption", plan_consumption, actual_consumption) + + plan_grid = _get_grid_net(interval, "planned") + actual_grid = _get_actual_grid(interval) + _accumulate_metric(metrics, "grid", plan_grid, actual_grid) + + formatted_metrics: Dict[str, Dict[str, Any]] = {} + metric_units = { + "cost": "Kč", + "solar": "kWh", + "consumption": "kWh", + "grid": "kWh", + } + + for key, value in metrics.items(): + formatted_metrics[key] = { + "plan": round(value["plan"], 2), + "actual": round(value["actual"], 2), + "unit": metric_units.get(key, ""), + "has_actual": value["actual_samples"] > 0, + } + + return formatted_metrics + + +def _get_plan_value(interval: Dict[str, Any], key: str) -> float: + return safe_nested_get(interval, "planned", key, default=0.0) + + +def _get_actual_value(interval: Dict[str, Any], key: str) -> Optional[float]: + actual = interval.get("actual") + if not actual: + return None + value = actual.get(key) + if value is None: + return actual.get(f"{key}_kwh") + return value + + +def _get_grid_net(payload: Dict[str, Any], prefix: str) -> float: + import_key = "grid_import" + export_key = "grid_export" + import_val = safe_nested_get(payload, prefix, import_key, default=None) + if import_val is None: + import_val = safe_nested_get(payload, prefix, f"{import_key}_kwh", default=0.0) + export_val = safe_nested_get(payload, prefix, export_key, default=None) + if export_val is None: + export_val = safe_nested_get(payload, prefix, f"{export_key}_kwh", default=0.0) + return (import_val or 0.0) - (export_val or 0.0) + + +def _accumulate_metric( + metrics_map: Dict[str, Dict[str, Any]], + metric_key: str, + plan_value: float, + actual_value: Optional[float], +) -> None: + metrics_map[metric_key]["plan"] += plan_value + if actual_value is not None: + metrics_map[metric_key]["actual"] += actual_value + metrics_map[metric_key]["actual_samples"] += 1 + else: + metrics_map[metric_key]["actual"] += plan_value + + +def _get_actual_grid(interval: Dict[str, Any]) -> Optional[float]: + actual_payload = interval.get("actual") + if not actual_payload: + return None + return ( + actual_payload.get("grid_import") + or actual_payload.get("grid_import_kwh") + or 0.0 + ) - ( + actual_payload.get("grid_export") + or actual_payload.get("grid_export_kwh") + or 0.0 + ) + + +def calculate_tab_summary( + sensor: Any, mode_blocks: List[Dict[str, Any]], intervals: List[Dict[str, Any]] +) -> Dict[str, Any]: + """Calculate summary for a tab.""" + _ = sensor + if not mode_blocks: + return _default_tab_summary() + + totals, completed_blocks, planned_blocks = _summarize_blocks(mode_blocks) + overall_adherence = _calculate_overall_adherence( + totals["adherent_blocks"], totals["total_blocks"] + ) + summary = _build_base_summary( + total_cost=totals["total_cost"], + overall_adherence=overall_adherence, + total_blocks=totals["total_blocks"], + intervals=intervals, + ) + _attach_completed_planned_summary(summary, completed_blocks, planned_blocks) + return summary + + +def _default_tab_summary() -> Dict[str, Any]: + return { + "total_cost": 0.0, + "overall_adherence": 100, + "mode_switches": 0, + "metrics": default_metrics_summary(), + } + + +def _summarize_blocks( + mode_blocks: List[Dict[str, Any]] +) -> tuple[Dict[str, Any], List[Dict[str, Any]], List[Dict[str, Any]]]: + total_cost = 0.0 + adherent_blocks = 0 + completed_blocks: List[Dict[str, Any]] = [] + planned_blocks: List[Dict[str, Any]] = [] + + for block in mode_blocks: + total_cost += _resolve_block_cost(block) + if block.get("adherence_pct") == 100: + adherent_blocks += 1 + status = block.get("status") + if status == "completed": + completed_blocks.append(block) + elif status in ("current", "planned"): + planned_blocks.append(block) + + return ( + { + "total_cost": total_cost, + "adherent_blocks": adherent_blocks, + "total_blocks": len(mode_blocks), + }, + completed_blocks, + planned_blocks, + ) + + +def _resolve_block_cost(block: Dict[str, Any]) -> float: + cost = block.get("cost_historical") + if cost is not None: + return float(cost) + return float(block.get("cost_planned", 0.0)) + + +def _calculate_overall_adherence(adherent_blocks: int, total_blocks: int) -> float: + if total_blocks <= 0: + return 100 + return round((adherent_blocks / total_blocks) * 100, 1) + + +def _build_base_summary( + *, + total_cost: float, + overall_adherence: float, + total_blocks: int, + intervals: List[Dict[str, Any]], +) -> Dict[str, Any]: + metrics = aggregate_interval_metrics(intervals) + return { + "total_cost": round(total_cost, 2), + "overall_adherence": overall_adherence, + "mode_switches": max(0, total_blocks - 1), + "metrics": metrics, + } + + +def _attach_completed_planned_summary( + summary: Dict[str, Any], + completed_blocks: List[Dict[str, Any]], + planned_blocks: List[Dict[str, Any]], +) -> None: + if not completed_blocks or not planned_blocks: + return + summary["completed_summary"] = _build_completed_summary(completed_blocks) + summary["planned_summary"] = _build_planned_summary(planned_blocks) + + +def _build_completed_summary(completed_blocks: List[Dict[str, Any]]) -> Dict[str, Any]: + completed_cost = sum(b.get("cost_historical", 0) for b in completed_blocks) + completed_adherent = sum( + 1 for b in completed_blocks if b.get("adherence_pct") == 100 + ) + adherence_pct = ( + round((completed_adherent / len(completed_blocks)) * 100, 1) + if completed_blocks + else 100 + ) + return { + "count": len(completed_blocks), + "total_cost": round(completed_cost, 2), + "adherence_pct": adherence_pct, + } + + +def _build_planned_summary(planned_blocks: List[Dict[str, Any]]) -> Dict[str, Any]: + planned_cost = sum(b.get("cost_planned", 0) for b in planned_blocks) + return { + "count": len(planned_blocks), + "total_cost": round(planned_cost, 2), + } diff --git a/custom_components/oig_cloud/battery_forecast/presentation/plan_tabs.py b/custom_components/oig_cloud/battery_forecast/presentation/plan_tabs.py new file mode 100644 index 00000000..48ea8f84 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/plan_tabs.py @@ -0,0 +1,71 @@ +"""Plan tab helpers for detail tabs.""" + +from __future__ import annotations + +import copy +from typing import Any, Dict + + +def decorate_plan_tabs( + primary_tabs: Dict[str, Any], + secondary_tabs: Dict[str, Any], + primary_plan: str, + secondary_plan: str, +) -> Dict[str, Any]: + """Attach metadata and optional comparison blocks to plan tabs.""" + result: Dict[str, Any] = {} + + for key, tab_data in primary_tabs.items(): + tab_copy = _build_tab_copy(tab_data, primary_plan, secondary_tabs, key, secondary_plan) + _attach_comparison(tab_copy, secondary_tabs.get(key), secondary_plan) + + result[key] = tab_copy + + return result + + +def _build_tab_copy( + tab_data: Dict[str, Any], + primary_plan: str, + secondary_tabs: Dict[str, Any], + key: str, + secondary_plan: str, +) -> Dict[str, Any]: + tab_copy = { + "date": tab_data.get("date"), + "mode_blocks": copy.deepcopy(tab_data.get("mode_blocks", [])), + "summary": copy.deepcopy(tab_data.get("summary", {})), + "intervals": copy.deepcopy(tab_data.get("intervals", [])), + } + + metadata = tab_data.get("metadata", {}).copy() + metadata["active_plan"] = primary_plan + metadata["comparison_plan_available"] = ( + secondary_plan if secondary_tabs.get(key) else None + ) + tab_copy["metadata"] = metadata + return tab_copy + + +def _attach_comparison( + tab_copy: Dict[str, Any], + comparison_source: Dict[str, Any] | None, + secondary_plan: str, +) -> None: + if not comparison_source: + return + has_current = any( + block.get("status") == "current" for block in tab_copy.get("mode_blocks", []) + ) + if has_current: + return + comparison_blocks = [ + block + for block in comparison_source.get("mode_blocks", []) + if block.get("status") in ("current", "planned") + ] + if comparison_blocks: + tab_copy["comparison"] = { + "plan": secondary_plan, + "mode_blocks": comparison_blocks, + } diff --git a/custom_components/oig_cloud/battery_forecast/presentation/precompute.py b/custom_components/oig_cloud/battery_forecast/presentation/precompute.py new file mode 100644 index 00000000..1f23b5f8 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/precompute.py @@ -0,0 +1,139 @@ +"""Precompute helpers extracted from legacy battery forecast.""" + +from __future__ import annotations + +import copy +import logging +from typing import Any, Dict + +from homeassistant.util import dt as dt_util + +from . import detail_tabs as detail_tabs_module + +_LOGGER = logging.getLogger(__name__) + + +async def precompute_ui_data(sensor: Any) -> None: + """Precompute UI data (detail_tabs + unified_cost_tile) and save to storage.""" + if not _has_precomputed_store(sensor): + _LOGGER.warning("⚠️ Precomputed storage not initialized, skipping") + return + + try: + _LOGGER.info("📊 Precomputing UI data for instant API responses...") + start_time = dt_util.now() + + detail_tabs = await _build_detail_tabs(sensor) + unified_cost_tile = await sensor.build_unified_cost_tile() + timeline = copy.deepcopy(sensor._timeline_data or []) + precomputed_data = _build_precomputed_payload( + detail_tabs, unified_cost_tile, timeline + ) + + await sensor._precomputed_store.async_save(precomputed_data) # pylint: disable=protected-access + sensor._last_precompute_hash = ( + sensor._data_hash + ) # pylint: disable=protected-access + + _dispatch_precompute_update(sensor) + + duration = (dt_util.now() - start_time).total_seconds() + plan_cost = unified_cost_tile.get("today", {}).get("plan_total_cost") or 0.0 + _LOGGER.info( + "✅ Precomputed UI data saved in %.2fs (blocks=%s, cost=%.2f Kč)", + duration, + len(detail_tabs.get("today", {}).get("mode_blocks", [])), + float(plan_cost), + ) + + except Exception as err: + _LOGGER.error("Failed to precompute UI data: %s", err, exc_info=True) + finally: + sensor._last_precompute_at = dt_util.now() # pylint: disable=protected-access + + +def schedule_precompute(sensor: Any, *, force: bool = False) -> None: + """Schedule precompute job with throttling.""" + if not sensor.hass or not _has_precomputed_store(sensor): + return + + now = dt_util.now() + if _should_skip_precompute(sensor, now, force): + return + + if ( + sensor._precompute_task and not sensor._precompute_task.done() + ): # pylint: disable=protected-access + _LOGGER.debug("[Precompute] Job already running, skipping") + return + + async def _runner(): + await _run_precompute_task(sensor) + + sensor._precompute_task = sensor.hass.async_create_task( + _runner() + ) # pylint: disable=protected-access + + +def _has_precomputed_store(sensor: Any) -> bool: + return bool(sensor._precomputed_store) # pylint: disable=protected-access + + +async def _build_detail_tabs(sensor: Any) -> Dict[str, Any]: + try: + return await detail_tabs_module.build_detail_tabs(sensor, plan="active") + except Exception as err: + _LOGGER.error("Failed to build detail_tabs: %s", err, exc_info=True) + return {} + + +def _build_precomputed_payload( + detail_tabs: Dict[str, Any], + unified_cost_tile: Dict[str, Any], + timeline: list[Dict[str, Any]], +) -> Dict[str, Any]: + return { + "detail_tabs": detail_tabs, + "detail_tabs_hybrid": detail_tabs, # legacy alias + "active_planner": "planner", + "unified_cost_tile": unified_cost_tile, + "unified_cost_tile_hybrid": unified_cost_tile, # legacy alias + "timeline": timeline, + "timeline_hybrid": timeline, # legacy alias + "cost_comparison": {}, # legacy key (dual-planner removed) + "last_update": dt_util.now().isoformat(), + "version": 3, # Single-planner architecture + } + + +def _dispatch_precompute_update(sensor: Any) -> None: + if not sensor.hass: + return + from homeassistant.helpers.dispatcher import async_dispatcher_send + + signal_name = f"oig_cloud_{sensor._box_id}_forecast_updated" # pylint: disable=protected-access + async_dispatcher_send(sensor.hass, signal_name) + + +def _should_skip_precompute(sensor: Any, now: Any, force: bool) -> bool: + if force: + return False + if not sensor._last_precompute_at: # pylint: disable=protected-access + return False + last_precompute = sensor._last_precompute_at # pylint: disable=protected-access + if now - last_precompute < sensor._precompute_interval: # pylint: disable=protected-access + _LOGGER.debug( + "[Precompute] Skipping (last run %ss ago)", + (now - last_precompute).total_seconds(), + ) + return True + return False + + +async def _run_precompute_task(sensor: Any) -> None: + try: + await precompute_ui_data(sensor) + except Exception as err: # pragma: no cover - logged inside + _LOGGER.error("[Precompute] Job failed: %s", err, exc_info=True) + finally: + sensor._precompute_task = None # pylint: disable=protected-access diff --git a/custom_components/oig_cloud/battery_forecast/presentation/state_attributes.py b/custom_components/oig_cloud/battery_forecast/presentation/state_attributes.py new file mode 100644 index 00000000..d9c89838 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/state_attributes.py @@ -0,0 +1,170 @@ +"""State attribute helpers for battery forecast sensor.""" + +from __future__ import annotations + +import hashlib +import json +import logging +from typing import Any, Dict, List, Optional + +_LOGGER = logging.getLogger(__name__) + + +def build_extra_state_attributes( + sensor: Any, *, debug_expose_baseline_timeline: bool +) -> Dict[str, Any]: + """Build lean extra_state_attributes payload.""" + attrs = { + "last_update": sensor._last_update.isoformat() if sensor._last_update else None, + "data_source": "simplified_calculation", + "current_battery_kwh": _get_current_battery_kwh(sensor), + "current_timestamp": _get_current_timestamp(sensor), + "max_capacity_kwh": sensor._get_max_battery_capacity(), + "min_capacity_kwh": sensor._get_min_battery_capacity(), + "timeline_points_count": ( + len(sensor._timeline_data) if sensor._timeline_data else 0 + ), + "timeline_horizon_hours": ( + round((len(sensor._timeline_data) * 15 / 60), 1) + if sensor._timeline_data + else 0 + ), + "data_hash": sensor._data_hash if sensor._data_hash else "unknown", + "api_endpoint": f"/api/oig_cloud/battery_forecast/{sensor._box_id}/timeline", + "api_query_params": "?type=active (default) | baseline | both", + "api_note": "Full timeline data available via REST API (reduces memory by 96%)", + } + + if hasattr(sensor, "_charging_metrics") and sensor._charging_metrics: + attrs.update(sensor._charging_metrics) + + if hasattr(sensor, "_consumption_summary") and sensor._consumption_summary: + attrs.update(sensor._consumption_summary) + + if hasattr(sensor, "_balancing_cost") and sensor._balancing_cost: + attrs["balancing_cost"] = sensor._balancing_cost + + _attach_plan_snapshot(attrs, sensor) + + attrs["plan_status"] = getattr(sensor, "_plan_status", "none") + + _attach_mode_optimization(attrs, sensor) + + if debug_expose_baseline_timeline: + _LOGGER.warning( + "DEBUG MODE: Full timeline in attributes (280 KB)! " + "Set DEBUG_EXPOSE_BASELINE_TIMELINE=False for production." + ) + attrs["timeline_data"] = sensor._timeline_data + if hasattr(sensor, "_baseline_timeline"): + attrs["baseline_timeline_data"] = sensor._baseline_timeline + + return attrs + + +def calculate_data_hash(timeline_data: List[Dict[str, Any]]) -> str: + """Return SHA-256 hash of timeline data.""" + if not timeline_data: + return "empty" + + data_str = json.dumps(timeline_data, sort_keys=True) + return hashlib.sha256(data_str.encode()).hexdigest() + + +def _get_current_battery_kwh(sensor: Any) -> float: + if not sensor._timeline_data: + return 0 + first = sensor._timeline_data[0] + return round(first.get("battery_soc", first.get("battery_capacity_kwh", 0)), 2) + + +def _get_current_timestamp(sensor: Any) -> Optional[str]: + if not sensor._timeline_data: + return None + first = sensor._timeline_data[0] + return first.get("time", first.get("timestamp")) + + +def _attach_plan_snapshot(attrs: Dict[str, Any], sensor: Any) -> None: + plan_snapshot: Optional[Dict[str, Any]] = None + if getattr(sensor, "_balancing_plan_snapshot", None): + plan_snapshot = sensor._balancing_plan_snapshot + elif hasattr(sensor, "_active_charging_plan") and sensor._active_charging_plan: + plan_snapshot = sensor._active_charging_plan + + if plan_snapshot: + attrs["active_plan_data"] = json.dumps(plan_snapshot) + + +def _attach_mode_optimization(attrs: Dict[str, Any], sensor: Any) -> None: + if not ( + hasattr(sensor, "_mode_optimization_result") + and sensor._mode_optimization_result + ): + return + + mo = sensor._mode_optimization_result + attrs["mode_optimization"] = _build_mode_optimization(mo) + + if mo.get("baselines"): + attrs["mode_optimization"].update(_build_mode_optimization_baselines(mo)) + + if mo.get("alternatives"): + attrs["mode_optimization"]["alternatives"] = mo["alternatives"] + + boiler_summary = _build_boiler_summary(mo.get("optimal_timeline", [])) + if boiler_summary: + attrs["boiler_summary"] = boiler_summary + + +def _build_mode_optimization(mo: Dict[str, Any]) -> Dict[str, Any]: + optimal_modes = mo.get("optimal_modes", []) + return { + "total_cost_czk": round(mo.get("total_cost_48h", 0), 2), + "total_savings_vs_home_i_czk": round(mo.get("total_savings_48h", 0), 2), + "total_cost_72h_czk": round(mo.get("total_cost", 0), 2), + "modes_distribution": { + "HOME_I": optimal_modes.count(0), + "HOME_II": optimal_modes.count(1), + "HOME_III": optimal_modes.count(2), + "HOME_UPS": optimal_modes.count(3), + }, + "home_i_intervals": optimal_modes.count(0), + "home_ii_intervals": optimal_modes.count(1), + "home_iii_intervals": optimal_modes.count(2), + "home_ups_intervals": optimal_modes.count(3), + "timeline_length": len(mo.get("optimal_timeline", [])), + } + + +def _build_mode_optimization_baselines(mo: Dict[str, Any]) -> Dict[str, Any]: + return { + "baselines": mo["baselines"], + "best_baseline": mo.get("best_baseline"), + "hybrid_cost": round(mo.get("hybrid_cost", 0), 2), + "best_baseline_cost": round(mo.get("best_baseline_cost", 0), 2), + "savings_vs_best": round(mo.get("savings_vs_best", 0), 2), + "savings_percentage": round(mo.get("savings_percentage", 0), 1), + } + + +def _build_boiler_summary( + optimal_timeline: List[Dict[str, Any]], +) -> Optional[Dict[str, Any]]: + boiler_total = sum( + interval.get("boiler_charge", 0) for interval in optimal_timeline + ) + curtailed_total = sum( + interval.get("curtailed_loss", 0) for interval in optimal_timeline + ) + if boiler_total <= 0.001 and curtailed_total <= 0.001: + return None + return { + "total_energy_kwh": round(boiler_total, 2), + "intervals_used": sum( + 1 + for interval in optimal_timeline + if interval.get("boiler_charge", 0) > 0.001 + ), + "avoided_export_loss_czk": round(curtailed_total, 2), + } diff --git a/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile.py b/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile.py new file mode 100644 index 00000000..3f0cfba8 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile.py @@ -0,0 +1,97 @@ +"""Unified cost tile builders extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, Optional + +from homeassistant.util import dt as dt_util + +from .unified_cost_tile_helpers import ( + build_today_cost_data, + build_tomorrow_cost_data, + get_yesterday_cost_from_archive, +) + +_LOGGER = logging.getLogger(__name__) + + +async def build_unified_cost_tile( + sensor: Any, *, mode_names: Optional[Dict[int, str]] = None +) -> Dict[str, Any]: + """Build Unified Cost Tile data.""" + self = sensor + mode_names = mode_names or {} + + now = dt_util.now() + + _LOGGER.info("Unified Cost Tile: Building fresh data...") + build_start = dt_util.now() + + try: + today_data = await build_today_cost_data(self) + except Exception as e: + _LOGGER.error("Failed to build today cost data: %s", e, exc_info=True) + today_data = _build_today_fallback(e) + + try: + yesterday_data = get_yesterday_cost_from_archive(self, mode_names=mode_names) + except Exception as e: + _LOGGER.error("Failed to get yesterday cost data: %s", e, exc_info=True) + yesterday_data = _build_yesterday_fallback(e) + + try: + tomorrow_data = await build_tomorrow_cost_data(self, mode_names=mode_names) + except Exception as e: + _LOGGER.error("Failed to build tomorrow cost data: %s", e, exc_info=True) + tomorrow_data = _build_tomorrow_fallback(e) + + result = { + "today": today_data, + "yesterday": yesterday_data, + "tomorrow": tomorrow_data, + "metadata": { + "last_update": str(now), + "timezone": str(now.tzinfo), + }, + } + + build_duration = (dt_util.now() - build_start).total_seconds() + _LOGGER.info("Unified Cost Tile: Built in %.2fs", build_duration) + + return result + + +def _build_today_fallback(error: Exception) -> Dict[str, Any]: + return { + "plan_total_cost": 0.0, + "actual_total_cost": 0.0, + "delta": 0.0, + "performance": "on_plan", + "completed_intervals": 0, + "total_intervals": 0, + "progress_pct": 0, + "eod_prediction": { + "predicted_total": 0.0, + "vs_plan": 0.0, + "confidence": "low", + }, + "error": str(error), + } + + +def _build_yesterday_fallback(error: Exception) -> Dict[str, Any]: + return { + "plan_total_cost": 0.0, + "actual_total_cost": 0.0, + "delta": 0.0, + "performance": "on_plan", + "error": str(error), + } + + +def _build_tomorrow_fallback(error: Exception) -> Dict[str, Any]: + return { + "plan_total_cost": 0.0, + "error": str(error), + } diff --git a/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile_helpers.py b/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile_helpers.py new file mode 100644 index 00000000..926de5a7 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/presentation/unified_cost_tile_helpers.py @@ -0,0 +1,983 @@ +"""Helpers for unified cost tile calculations.""" + +from __future__ import annotations + +import logging +from datetime import date, datetime, timedelta +from typing import Any, Dict, List, Optional, Protocol + +from homeassistant.util import dt as dt_util + +from ..data.history import DATE_FMT +from ..utils_common import safe_nested_get + +_LOGGER = logging.getLogger(__name__) + + +class _BaselineSensor(Protocol): + _mode_optimization_result: Optional[Dict[str, Any]] + + +def build_baseline_comparison( + sensor: _BaselineSensor, hybrid_cost: float +) -> Dict[str, Any]: + """Build baseline comparison data for cost tile.""" + self = sensor + + if ( + not hasattr(self, "_mode_optimization_result") + or not self._mode_optimization_result + ): + return {} + + baselines = self._mode_optimization_result.get("baselines", {}) + if not baselines: + return {} + + best_baseline = None + best_cost = float("inf") + + for mode_name in ["HOME_I", "HOME_II", "HOME_III"]: + if mode_name in baselines: + cost = baselines[mode_name].get("adjusted_total_cost", float("inf")) + if cost < best_cost: + best_cost = cost + best_baseline = mode_name + + if not best_baseline: + return {} + + savings = best_cost - hybrid_cost + savings_pct = (savings / best_cost * 100) if best_cost > 0 else 0 + + all_baselines = {} + for mode_name in ["HOME_I", "HOME_II", "HOME_III"]: + if mode_name in baselines: + all_baselines[mode_name] = round( + baselines[mode_name].get("adjusted_total_cost", 0), 2 + ) + + return { + "hybrid_cost": round(hybrid_cost, 2), + "best_baseline": best_baseline, + "best_baseline_cost": round(best_cost, 2), + "savings": round(savings, 2), + "savings_pct": round(savings_pct, 1), + "all_baselines": all_baselines, + } + + +def analyze_today_variance( + sensor: Any, + intervals: List[Dict[str, Any]], + plan_total: float, + predicted_total: float, +) -> str: + """Analyze today's variance from plan and generate explanation.""" + _ = sensor + + completed = [i for i in intervals if i.get("actual")] + if not completed: + return ( + f"Dnes plánujeme utratit {plan_total:.0f} Kč. " + "Den právě začal, zatím žádná data." + ) + + totals = _summarize_plan_actual_totals(completed) + text = _format_variance_header(plan_total, predicted_total) + text += _format_solar_variance(totals) + text += _format_load_variance(totals) + text += _format_largest_impact(totals) + return text + + +def _summarize_plan_actual_totals( + completed: List[Dict[str, Any]], +) -> Dict[str, float]: + total_plan_solar = sum(i.get("planned", {}).get("solar_kwh", 0) for i in completed) + total_actual_solar = sum(i.get("actual", {}).get("solar_kwh", 0) for i in completed) + total_plan_load = sum(i.get("planned", {}).get("load_kwh", 0) for i in completed) + total_actual_load = sum(i.get("actual", {}).get("load_kwh", 0) for i in completed) + return { + "plan_solar": total_plan_solar, + "actual_solar": total_actual_solar, + "plan_load": total_plan_load, + "actual_load": total_actual_load, + "solar_diff": total_actual_solar - total_plan_solar, + "load_diff": total_actual_load - total_plan_load, + } + + +def _format_variance_header(plan_total: float, predicted_total: float) -> str: + cost_diff = predicted_total - plan_total + text = ( + f"Měli jsme naplánováno {plan_total:.0f} Kč, " + f"ale vypadá to na {predicted_total:.0f} Kč" + ) + if abs(cost_diff) >= 1: + return text + f" ({cost_diff:+.0f} Kč).\n" + return text + " (přesně dle plánu).\n" + + +def _format_solar_variance(totals: Dict[str, float]) -> str: + solar_diff = totals["solar_diff"] + if abs(solar_diff) < 0.5: + return "" + return ( + f"Slunce svítilo o {abs(solar_diff):.1f} kWh " + f"{'VÍC' if solar_diff > 0 else 'MÉNĚ'} než odhad " + f"(plán: {totals['plan_solar']:.1f} kWh, " + f"real: {totals['actual_solar']:.1f} kWh).\n" + ) + + +def _format_load_variance(totals: Dict[str, float]) -> str: + load_diff = totals["load_diff"] + if abs(load_diff) < 0.5: + return "" + return ( + f"Spotřeba byla o {abs(load_diff):.1f} kWh " + f"{'VĚTŠÍ' if load_diff > 0 else 'MENŠÍ'} " + f"(plán: {totals['plan_load']:.1f} kWh, " + f"real: {totals['actual_load']:.1f} kWh).\n" + ) + + +def _format_largest_impact(totals: Dict[str, float]) -> str: + solar_diff = totals["solar_diff"] + load_diff = totals["load_diff"] + solar_cost_impact = abs(solar_diff) * 4.0 + load_cost_impact = abs(load_diff) * 4.0 + if solar_cost_impact > load_cost_impact and abs(solar_diff) >= 0.5: + return ( + f"Největší dopad: {'menší' if solar_diff < 0 else 'větší'} " + f"solární výroba ({solar_cost_impact:+.0f} Kč)." + ) + if abs(load_diff) >= 0.5: + return ( + f"Největší dopad: {'vyšší' if load_diff > 0 else 'nižší'} " + f"spotřeba ({load_cost_impact:+.0f} Kč)." + ) + return "" + + +async def analyze_yesterday_performance(sensor: Any) -> str: + """Analyze yesterday's performance - post-mortem of plan vs actual.""" + self = sensor + + now = dt_util.now() + yesterday = (now - timedelta(days=1)).date() + + yesterday_timeline = await self._build_day_timeline(yesterday) + if not yesterday_timeline: + return "Včera: Žádná data k dispozici." + + intervals = yesterday_timeline.get("intervals", []) + if not intervals: + return "Včera: Žádné intervaly." + + total_plan_solar = sum(i.get("planned", {}).get("solar_kwh", 0) for i in intervals) + total_actual_solar = sum( + i.get("actual", {}).get("solar_kwh", 0) for i in intervals if i.get("actual") + ) + + total_plan_load = sum(i.get("planned", {}).get("load_kwh", 0) for i in intervals) + total_actual_load = sum( + i.get("actual", {}).get("load_kwh", 0) for i in intervals if i.get("actual") + ) + + total_plan_cost = sum(i.get("planned", {}).get("net_cost", 0) for i in intervals) + total_actual_cost = sum( + i.get("actual", {}).get("net_cost", 0) for i in intervals if i.get("actual") + ) + + cost_diff = total_actual_cost - total_plan_cost + solar_diff = total_actual_solar - total_plan_solar + load_diff = total_actual_load - total_plan_load + + text = ( + f"Včera jsme plánovali {total_plan_cost:.0f} Kč, " + f"utratili jsme {total_actual_cost:.0f} Kč" + ) + + if abs(cost_diff) >= 1: + text += f" ({cost_diff:+.0f} Kč).\n" + else: + text += " (přesně dle plánu).\n" + + if abs(solar_diff) >= 0.5: + text += ( + f"Solární výroba: plán {total_plan_solar:.1f} kWh, " + f"real {total_actual_solar:.1f} kWh ({solar_diff:+.1f} kWh).\n" + ) + + if abs(load_diff) >= 0.5: + text += ( + f"Spotřeba: plán {total_plan_load:.1f} kWh, " + f"real {total_actual_load:.1f} kWh ({load_diff:+.1f} kWh).\n" + ) + + impacts = [] + if abs(solar_diff) >= 0.5: + impacts.append( + f"{'menší' if solar_diff < 0 else 'větší'} solár ({abs(solar_diff) * 4:.0f} Kč)" + ) + if abs(load_diff) >= 0.5: + impacts.append( + f"{'vyšší' if load_diff > 0 else 'nižší'} spotřeba ({abs(load_diff) * 4:.0f} Kč)" + ) + + if impacts: + text += f"Největší dopad: {', '.join(impacts)}." + + return text + + +async def analyze_tomorrow_plan(sensor: Any) -> str: + """Analyze tomorrow's plan - expected production, consumption, charging, battery state.""" + self = sensor + + now = dt_util.now() + tomorrow = (now + timedelta(days=1)).date() + + tomorrow_timeline = await self._build_day_timeline(tomorrow) + if not tomorrow_timeline: + return "Zítra: Žádný plán k dispozici." + + intervals = tomorrow_timeline.get("intervals", []) + if not intervals: + return "Zítra: Žádné intervaly naplánované." + + total_solar = sum( + safe_nested_get(i, "planned", "solar_kwh", default=0) for i in intervals + ) + total_load = sum( + safe_nested_get(i, "planned", "load_kwh", default=0) for i in intervals + ) + total_cost = sum( + safe_nested_get(i, "planned", "net_cost", default=0) for i in intervals + ) + + charging_intervals = [ + i for i in intervals if safe_nested_get(i, "planned", "mode") == "HOME_UPS" + ] + total_charging = sum( + safe_nested_get(i, "planned", "grid_charge_kwh", default=0) + for i in charging_intervals + ) + + last_interval = intervals[-1] if intervals else None + final_battery = ( + safe_nested_get(last_interval, "planned", "battery_kwh", default=0) + if last_interval + else 0 + ) + final_battery_pct = (final_battery / 10.0 * 100) if final_battery else 0 + + text = f"Zítra plánujeme {total_cost:.0f} Kč.\n" + text += f"Očekávaná solární výroba: {total_solar:.1f} kWh" + + if total_solar < 5: + text += " (zataženo)" + elif total_solar > 15: + text += " (slunečno)" + text += ".\n" + + text += f"Očekávaná spotřeba: {total_load:.1f} kWh.\n" + + if total_charging >= 0.5: + avg_charging_price = ( + sum(i.get("planned", {}).get("spot_price", 0) for i in charging_intervals) + / len(charging_intervals) + if charging_intervals + else 0 + ) + text += ( + f"Plánované nabíjení: {total_charging:.1f} kWh v noci " + f"(průměr {avg_charging_price:.1f} Kč/kWh).\n" + ) + + text += ( + f"Stav baterie na konci dne: {final_battery:.1f} kWh " + f"({final_battery_pct:.0f}%)." + ) + + return text + + +async def build_today_cost_data(sensor: Any) -> Dict[str, Any]: # noqa: C901 + """Build today's cost data with actual vs plan tracking.""" + self = sensor + + now = dt_util.now() + today = now.date() + + storage_plans = await _load_storage_plans(self) + intervals = await _load_today_intervals(self, today, storage_plans) + spot_prices_today = _extract_spot_prices_today(self, now) + + if not intervals: + return _empty_today_cost(spot_prices_today) + + completed, future, active = _partition_intervals(intervals, now) + plan_completed, actual_completed, plan_total, actual_total, plan_future = ( + _compute_cost_totals(intervals, completed, future, active) + ) + + _LOGGER.debug( + "💰 Cost calculation: plan_completed=%.2f, actual_completed=%.2f, completed_count=%s", + plan_completed, + actual_completed, + len(completed), + ) + + delta = actual_total - plan_total + performance, delta_pct = _compute_performance(plan_completed, delta) + progress_pct = _compute_progress(now) + + total_intervals = len(intervals) + completed_count = len(completed) + + eod_predicted = actual_completed + plan_future + eod_vs_plan = eod_predicted - plan_total + confidence = _confidence_level(completed_count) + + ( + plan_savings_completed, + actual_savings_completed, + plan_savings_future, + ) = _compute_savings(completed, future, active) + plan_savings_total = plan_savings_completed + plan_savings_future + predicted_savings = actual_savings_completed + plan_savings_future + + mode_switches, total_blocks = _count_mode_switches(intervals) + active_interval_data = _build_active_interval_data(active, now) + + remaining_to_eod = plan_future + vs_plan_pct = (eod_vs_plan / plan_total * 100) if plan_total > 0 else 0.0 + performance_class, performance_icon = _performance_class(vs_plan_pct) + + completed_groups = self._group_intervals_by_mode(completed, "completed") + future_groups = self._group_intervals_by_mode(future, "planned") + + active_group = None + if active is not None: + active_groups = self._group_intervals_by_mode([active], "both") + if active_groups: + active_group = active_groups[0] + + baseline_comparison = build_baseline_comparison(self, plan_total) + + today_tooltip = analyze_today_variance(self, intervals, plan_total, eod_predicted) + yesterday_tooltip = await analyze_yesterday_performance(self) + tomorrow_tooltip = await analyze_tomorrow_plan(self) + + return { + "plan_total_cost": round(plan_total, 2), + "actual_total_cost": round(actual_total, 2), + "delta": round(delta, 2), + "blended_total_cost": round(actual_completed + plan_future, 2), + "actual_cost_so_far": round(actual_completed, 2), + "performance": performance, + "completed_intervals": completed_count, + "total_intervals": total_intervals, + "progress_pct": round(progress_pct, 1), + "eod_prediction": { + "predicted_total": round(eod_predicted, 2), + "vs_plan": round(eod_vs_plan, 2), + "confidence": confidence, + "predicted_savings": round(predicted_savings, 2), + "planned_savings": round(plan_savings_total, 2), + }, + "remaining_to_eod": round(remaining_to_eod, 2), + "future_plan_cost": round(plan_future, 2), + "future_plan_savings": round(plan_savings_future, 2), + "vs_plan_pct": round(vs_plan_pct, 1), + "performance_class": performance_class, + "performance_icon": performance_icon, + "baseline_comparison": baseline_comparison, + "spot_prices_today": spot_prices_today, + "tooltips": { + "today": today_tooltip, + "yesterday": yesterday_tooltip, + "tomorrow": tomorrow_tooltip, + }, + "completed_groups": completed_groups, + "active_group": active_group, + "future_groups": future_groups, + "completed_so_far": { + "actual_cost": round(actual_completed, 2), + "planned_cost": round(plan_completed, 2), + "delta_cost": round(delta, 2), + "delta_pct": round(delta_pct if plan_completed > 0 else 0, 1), + "actual_savings": round(actual_savings_completed, 2), + "planned_savings": round(plan_savings_completed, 2), + "performance": performance, + }, + "active_interval": active_interval_data, + "metadata": { + "mode_switches": mode_switches, + "total_blocks": total_blocks, + "completed_intervals": completed_count, + "active_intervals": 1 if active else 0, + "future_intervals": len(future), + }, + } + + +async def _load_storage_plans(sensor: Any) -> Dict[str, Any]: + if not sensor._plans_store: + return {} + try: + return await sensor._plans_store.async_load() or {} + except Exception as e: + _LOGGER.warning(f"Failed to load storage plans: {e}") + return {} + + +async def _load_today_intervals( + sensor: Any, today: date, storage_plans: Dict[str, Any] +) -> List[Dict[str, Any]]: + today_timeline = await sensor._build_day_timeline(today, storage_plans) + _LOGGER.info( + "[UCT] _build_day_timeline returned: type=%s, value=%s", + type(today_timeline), + today_timeline is not None, + ) + if not today_timeline: + _LOGGER.warning("_build_day_timeline returned None for today") + return [] + intervals = today_timeline.get("intervals", []) + _LOGGER.info("[UCT] Intervals count: %s", len(intervals)) + return intervals + + +def _extract_spot_prices_today(sensor: Any, now: datetime) -> List[Dict[str, Any]]: + spot_prices_today = [] + if not (sensor.coordinator and sensor.coordinator.data): + return spot_prices_today + + spot_data = sensor.coordinator.data.get("spot_prices", {}) + timeline = spot_data.get("timeline", []) + if not timeline: + return spot_prices_today + + today_start = now.replace(hour=0, minute=0, second=0, microsecond=0) + today_end = now.replace(hour=23, minute=59, second=59, microsecond=999999) + + for sp in timeline: + sp_time_str = sp.get("time", "") + if not sp_time_str: + continue + + sp_time = datetime.fromisoformat(sp_time_str) + if sp_time.tzinfo is None: + sp_time = dt_util.as_local(sp_time) + + if today_start <= sp_time <= today_end: + spot_prices_today.append( + {"time": sp_time_str, "price": sp.get("spot_price_czk", 0.0)} + ) + + _LOGGER.info("[UCT] Extracted %s spot prices for today", len(spot_prices_today)) + return spot_prices_today + + +def _empty_today_cost(spot_prices_today: List[Dict[str, Any]]) -> Dict[str, Any]: + return { + "plan_total_cost": 0.0, + "actual_total_cost": 0.0, + "delta": 0.0, + "performance": "on_plan", + "completed_intervals": 0, + "total_intervals": 0, + "progress_pct": 0, + "eod_prediction": { + "predicted_total": 0.0, + "vs_plan": 0.0, + "confidence": "low", + }, + "spot_prices_today": spot_prices_today, + } + + +def _partition_intervals( + intervals: List[Dict[str, Any]], now: datetime +) -> tuple[List[Dict[str, Any]], List[Dict[str, Any]], Optional[Dict[str, Any]]]: + completed: List[Dict[str, Any]] = [] + future: List[Dict[str, Any]] = [] + active: Optional[Dict[str, Any]] = None + + current_interval_time, end_of_today = _current_interval_bounds(now) + + for interval in intervals: + interval_time = _parse_interval_time(interval) + if not interval_time: + continue + + status = _classify_interval_time( + interval_time, current_interval_time, end_of_today + ) + if status == "completed" and interval.get("actual"): + completed.append(interval) + elif status == "active": + active = interval + elif status == "future": + future.append(interval) + + return [c for c in completed if c is not None], [f for f in future if f is not None], active + + +def _current_interval_bounds(now: datetime) -> tuple[datetime, datetime]: + current_minute = (now.minute // 15) * 15 + current_interval_time = now.replace(minute=current_minute, second=0, microsecond=0) + end_of_today = now.replace(hour=23, minute=59, second=59, microsecond=999999) + return current_interval_time, end_of_today + + +def _parse_interval_time(interval: Optional[Dict[str, Any]]) -> Optional[datetime]: + if interval is None or not isinstance(interval, dict): + return None + interval_time_str = interval.get("time", "") + if not interval_time_str: + return None + interval_time = datetime.fromisoformat(interval_time_str) + if interval_time.tzinfo is None: + interval_time = dt_util.as_local(interval_time) + return interval_time + + +def _strip_tz(timestamp: datetime) -> datetime: + return timestamp.replace(tzinfo=None) if timestamp.tzinfo else timestamp + + +def _classify_interval_time( + interval_time: datetime, current_interval_time: datetime, end_of_today: datetime +) -> Optional[str]: + if interval_time > end_of_today: + return None + interval_time_naive = _strip_tz(interval_time) + current_interval_naive = _strip_tz(current_interval_time) + if interval_time_naive < current_interval_naive: + return "completed" + if interval_time_naive == current_interval_naive: + return "active" + return "future" + + +def _safe_get_cost(interval: Dict[str, Any], key: str) -> float: + data = interval.get(key) + if data is None: + return 0.0 + if isinstance(data, dict): + return float(data.get("net_cost", 0)) + return 0.0 + + +def _compute_cost_totals( + intervals: List[Dict[str, Any]], + completed: List[Dict[str, Any]], + future: List[Dict[str, Any]], + active: Optional[Dict[str, Any]], +) -> tuple[float, float, float, float, float]: + plan_completed = sum(_safe_get_cost(c, "planned") for c in completed) + actual_completed = sum(_safe_get_cost(c, "actual") for c in completed) + plan_total = sum(_safe_get_cost(interval, "planned") for interval in intervals) + actual_total = sum(_safe_get_cost(interval, "actual") for interval in intervals) + plan_future = sum(_safe_get_cost(f, "planned") for f in future) + if active: + plan_future += _safe_get_cost(active, "planned") + return plan_completed, actual_completed, plan_total, actual_total, plan_future + + +def _compute_performance(plan_completed: float, delta: float) -> tuple[str, float]: + if plan_completed > 0: + delta_pct = (delta / plan_completed) * 100 + if delta_pct < -2: + return "better", delta_pct + if delta_pct > 2: + return "worse", delta_pct + return "on_plan", delta_pct + return "on_plan", 0.0 + + +def _compute_progress(now: datetime) -> float: + now_time = now.time() + seconds_since_midnight = ( + now_time.hour * 3600 + now_time.minute * 60 + now_time.second + ) + total_seconds_in_day = 24 * 3600 + return seconds_since_midnight / total_seconds_in_day * 100 + + +def _confidence_level(completed_count: int) -> str: + if completed_count < 10: + return "low" + if completed_count < 48: + return "medium" + return "high" + + +def _compute_savings( + completed: List[Dict[str, Any]], + future: List[Dict[str, Any]], + active: Optional[Dict[str, Any]], +) -> tuple[float, float, float]: + plan_savings_completed = sum( + c.get("planned", {}).get("savings_vs_home_i", 0) for c in completed + ) + actual_savings_completed = sum( + c.get("actual", {}).get("savings_vs_home_i", 0) for c in completed + ) + plan_savings_future = sum( + f.get("planned", {}).get("savings_vs_home_i", 0) for f in future + ) + if active: + plan_savings_future += active.get("planned", {}).get("savings_vs_home_i", 0) + return plan_savings_completed, actual_savings_completed, plan_savings_future + + +def _count_mode_switches(intervals: List[Dict[str, Any]]) -> tuple[int, int]: + mode_switches = 0 + total_blocks = 0 + last_mode = None + for interval in intervals: + current_mode = interval.get("planned", {}).get("mode", "") + if current_mode != last_mode: + if last_mode is not None: + mode_switches += 1 + total_blocks += 1 + last_mode = current_mode + return mode_switches, total_blocks + + +def _build_active_interval_data( + active: Optional[Dict[str, Any]], now: datetime +) -> Optional[Dict[str, Any]]: + if not active: + return None + interval_time_str = active.get("time", "") + if not interval_time_str: + return None # pragma: no cover + + interval_time = datetime.fromisoformat(interval_time_str) + if interval_time.tzinfo is None: + interval_time = dt_util.as_local(interval_time) + + duration_minutes = active.get("duration_minutes", 120) + elapsed_minutes = int((now - interval_time).total_seconds() / 60) + interval_progress_pct = min( + 100, max(0, (elapsed_minutes / duration_minutes) * 100) + ) + + planned_cost = active.get("planned", {}).get("net_cost", 0) + planned_savings = active.get("planned", {}).get("savings", 0) + + expected_cost = planned_cost * (interval_progress_pct / 100) + expected_savings = planned_savings * (interval_progress_pct / 100) + + actual_data = active.get("actual") or {} + actual_cost_so_far = actual_data.get("net_cost", expected_cost) + actual_savings_so_far = actual_data.get("savings", expected_savings) + + cost_delta = actual_cost_so_far - expected_cost + cost_delta_pct = (cost_delta / expected_cost * 100) if expected_cost > 0 else 0 + + if cost_delta < -0.5: + active_interval_performance = "better" + elif cost_delta > 0.5: + active_interval_performance = "worse" + else: + active_interval_performance = "on_plan" + + return { + "time": interval_time_str, + "duration_minutes": duration_minutes, + "elapsed_minutes": elapsed_minutes, + "progress_pct": round(interval_progress_pct, 1), + "planned_cost": round(planned_cost, 2), + "planned_savings": round(planned_savings, 2), + "expected_cost_at_progress": round(expected_cost, 2), + "expected_savings_at_progress": round(expected_savings, 2), + "actual_cost_so_far": round(actual_cost_so_far, 2), + "actual_savings_so_far": round(actual_savings_so_far, 2), + "cost_delta": round(cost_delta, 2), + "cost_delta_pct": round(cost_delta_pct, 1), + "performance": active_interval_performance, + } + + +def _performance_class(vs_plan_pct: float) -> tuple[str, str]: + if vs_plan_pct <= -2: + return "better", "✅" + if vs_plan_pct >= 2: + return "worse", "❌" + return "on_plan", "⚪" + + +def get_yesterday_cost_from_archive( + sensor: Any, *, mode_names: Optional[Dict[int, str]] = None +) -> Dict[str, Any]: + """Get yesterday's cost data from archive.""" + self = sensor + mode_names = mode_names or {} + + yesterday = (dt_util.now().date() - timedelta(days=1)).strftime(DATE_FMT) + + archive_data = self._daily_plans_archive.get(yesterday) + if archive_data: + actual_intervals = archive_data.get("actual", []) + plan_total, actual_total, delta = _compute_archive_costs( + archive_data, actual_intervals + ) + performance, performance_icon, delta_pct = _performance_from_delta( + plan_total, delta + ) + + normalize_mode = _build_mode_normalizer(mode_names) + mode_groups = self._group_intervals_by_mode(actual_intervals, "completed") + _annotate_mode_groups(mode_groups, actual_intervals, normalize_mode) + mode_adherence_pct = _compute_mode_adherence(actual_intervals, normalize_mode) + top_variances = _top_variances(actual_intervals) + + return { + "plan_total_cost": round(plan_total, 2), + "actual_total_cost": round(actual_total, 2), + "delta": round(delta, 2), + "performance": performance, + "performance_icon": performance_icon, + "vs_plan_pct": round(delta_pct, 1), + "mode_groups": mode_groups, + "mode_adherence_pct": round(mode_adherence_pct, 1), + "top_variances": top_variances, + } + + return { + "plan_total_cost": 0.0, + "actual_total_cost": 0.0, + "delta": 0.0, + "performance": "on_plan", + "note": "No archive data available", + } + + +def _compute_archive_costs( + archive_data: Dict[str, Any], actual_intervals: List[Dict[str, Any]] +) -> tuple[float, float, float]: + plan_total = sum( + resolve_interval_cost(interval, prefer_actual=False) + for interval in archive_data.get("plan", []) + ) + actual_total = sum( + resolve_interval_cost(interval, prefer_actual=True) for interval in actual_intervals + ) + return plan_total, actual_total, actual_total - plan_total + + +def _performance_from_delta(plan_total: float, delta: float) -> tuple[str, str, float]: + if plan_total <= 0: + return "on_plan", "⚪", 0.0 + delta_pct = (delta / plan_total) * 100 + if delta_pct < -2: + return "better", "✅", delta_pct + if delta_pct > 2: + return "worse", "❌", delta_pct + return "on_plan", "⚪", delta_pct + + +def _build_mode_normalizer(mode_names: Dict[int, str]): + def normalize_mode(mode_raw): + if isinstance(mode_raw, int): + return mode_names.get(mode_raw, f"Mode {mode_raw}") + if mode_raw: + return str(mode_raw).strip() + return "Unknown" + + return normalize_mode + + +def _annotate_mode_groups( + mode_groups: List[Dict[str, Any]], + actual_intervals: List[Dict[str, Any]], + normalize_mode, +) -> None: + for group in mode_groups: + group_intervals = [ + iv + for iv in actual_intervals + if iv is not None + and ( + normalize_mode((iv.get("actual") or {}).get("mode")) == group["mode"] + or normalize_mode((iv.get("planned") or {}).get("mode")) == group["mode"] + ) + ] + mode_matches = sum( + 1 + for iv in group_intervals + if normalize_mode((iv.get("actual") or {}).get("mode")) + == normalize_mode((iv.get("planned") or {}).get("mode")) + ) + mode_mismatches = len(group_intervals) - mode_matches + adherence_pct = ( + (mode_matches / len(group_intervals) * 100) + if len(group_intervals) > 0 + else 0.0 + ) + group["mode_matches"] = mode_matches + group["mode_mismatches"] = mode_mismatches + group["adherence_pct"] = round(adherence_pct, 1) + + +def _compute_mode_adherence( + actual_intervals: List[Dict[str, Any]], normalize_mode +) -> float: + total_matches = sum( + 1 + for iv in actual_intervals + if iv is not None + and normalize_mode((iv.get("actual") or {}).get("mode")) + == normalize_mode((iv.get("planned") or {}).get("mode")) + ) + if not actual_intervals: + return 0.0 + return total_matches / len(actual_intervals) * 100 + + +def _top_variances(actual_intervals: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + variances = [] + for iv in actual_intervals: + planned_cost = iv.get("planned", {}).get("net_cost", 0) + actual_cost = iv.get("actual", {}).get("net_cost", 0) + variance = actual_cost - planned_cost + if abs(variance) > 0.5: + variances.append( + { + "time": iv.get("time", ""), + "planned": round(planned_cost, 2), + "actual": round(actual_cost, 2), + "variance": round(variance, 2), + "variance_pct": round( + (variance / planned_cost * 100) if planned_cost > 0 else 0, 1 + ), + } + ) + variances.sort(key=lambda x: abs(x["variance"]), reverse=True) + return variances[:3] + + +def resolve_interval_cost( + interval: Optional[Dict[str, Any]], prefer_actual: bool = True +) -> float: + """Extract or derive interval cost from archived payload.""" + if not interval: + return 0.0 + + for payload in _payload_candidates(interval, prefer_actual): + cost = _payload_cost(payload) + if cost is not None: + return cost + + return 0.0 + + +def _payload_candidates( + interval: Dict[str, Any], prefer_actual: bool +) -> List[Optional[Dict[str, Any]]]: + if not isinstance(interval, dict): + return [interval] # type: ignore[list-item] + if prefer_actual: + return [ + interval.get("actual"), + interval if not interval.get("actual") else None, + interval.get("planned"), + ] + return [ + interval.get("planned"), + interval if not interval.get("planned") else None, + interval.get("actual"), + ] + + +def _payload_cost(payload: Optional[Dict[str, Any]]) -> Optional[float]: + if not payload or not isinstance(payload, dict): + return None + value = payload.get("net_cost") + if value is not None: + try: + return float(value) + except (TypeError, ValueError): + return None + + grid_import = payload.get("grid_import_kwh", payload.get("grid_import")) + grid_export = payload.get("grid_export_kwh", payload.get("grid_export")) + spot_price = payload.get("spot_price_czk", payload.get("spot_price")) + export_price = payload.get("export_price_czk", payload.get("export_price")) + + if grid_import is None or spot_price is None: + return None # pragma: no cover + try: + import_cost = float(grid_import) * float(spot_price) + export_cost = float(grid_export or 0) * float(export_price or 0) + return round(import_cost - export_cost, 2) + except (TypeError, ValueError): + return None + + +async def build_tomorrow_cost_data( + sensor: Any, *, mode_names: Optional[Dict[int, str]] = None +) -> Dict[str, Any]: + """Build tomorrow's cost data (plan only).""" + self = sensor + mode_names = mode_names or {} + + tomorrow = dt_util.now().date() + timedelta(days=1) + + tomorrow_timeline = await self._build_day_timeline(tomorrow) + intervals = tomorrow_timeline.get("intervals", []) + + if not intervals: + return { + "plan_total_cost": 0.0, + } + + plan_total = sum( + interval.get("planned", {}).get("net_cost", 0) for interval in intervals + ) + + mode_distribution = {} + for interval in intervals: + if interval is None: + continue + mode_raw = (interval.get("planned") or {}).get("mode", "Unknown") + + if isinstance(mode_raw, int): + mode = mode_names.get(mode_raw, f"Mode {mode_raw}") + elif mode_raw and mode_raw != "Unknown": + mode = str(mode_raw).strip() + else: + mode = "Unknown" + + mode_distribution[mode] = mode_distribution.get(mode, 0) + 1 + + if mode_distribution: + dominant_mode = max(mode_distribution.items(), key=lambda x: x[1]) + dominant_mode_name = dominant_mode[0] + dominant_mode_count = dominant_mode[1] + dominant_mode_pct = ( + (dominant_mode_count / len(intervals) * 100) if len(intervals) > 0 else 0.0 + ) + else: + dominant_mode_name = "Unknown" + dominant_mode_count = 0 + dominant_mode_pct = 0.0 + + planned_groups = self._group_intervals_by_mode(intervals, "planned") + + return { + "plan_total_cost": round(plan_total, 2), + "mode_distribution": mode_distribution, + "dominant_mode_name": dominant_mode_name, + "dominant_mode_count": dominant_mode_count, + "dominant_mode_pct": round(dominant_mode_pct, 1), + "planned_groups": planned_groups, + } diff --git a/custom_components/oig_cloud/battery_forecast/sensors/__init__.py b/custom_components/oig_cloud/battery_forecast/sensors/__init__.py new file mode 100644 index 00000000..ae4b848f --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/__init__.py @@ -0,0 +1 @@ +"""Sensor modules for battery forecast.""" diff --git a/custom_components/oig_cloud/battery_forecast/sensors/efficiency_sensor.py b/custom_components/oig_cloud/battery_forecast/sensors/efficiency_sensor.py new file mode 100644 index 00000000..06e6f5fb --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/efficiency_sensor.py @@ -0,0 +1,655 @@ +"""Battery efficiency sensor extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional, TYPE_CHECKING + +from homeassistant.components.sensor import SensorEntity, SensorStateClass +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +_LOGGER = logging.getLogger(__name__) + +if TYPE_CHECKING: # pragma: no cover + from ...core.coordinator import OigCloudCoordinator + + +class OigCloudBatteryEfficiencySensor(RestoreEntity, CoordinatorEntity, SensorEntity): + """ + Battery round-trip efficiency calculator. + + Calculates battery efficiency using existing monthly sensors: + - sensor.computed_batt_charge_energy_month + - sensor.computed_batt_discharge_energy_month + - sensor.remaining_usable_capacity + + State = Last COMPLETE month efficiency (%) + Attributes = Current month (partial) efficiency and metrics + + Updates: + - Daily at 23:55: Update current month partial data + - Monthly on 1st at 00:10: Calculate last month and save to state + + Formula: + efficiency = (effective_discharge / charge) * 100 + where: effective_discharge = discharge - (battery_end - battery_start) + + NOTE: RestoreEntity není třeba - všechna data jsou v extra_state_attributes + které HA automaticky ukládá. + """ + + def __init__( + self, + coordinator: OigCloudCoordinator, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + ) -> None: + """Initialize the battery efficiency sensor.""" + CoordinatorEntity.__init__(self, coordinator) + + self._sensor_type = sensor_type + self._config_entry = config_entry + self._hass: Optional[HomeAssistant] = hass or getattr(coordinator, "hass", None) + + # Stabilní box_id resolution (config entry → proxy → coordinator numeric keys) + try: + from ...entities.base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + + # Set device info early - type: ignore because DeviceInfo is a TypedDict + self._attr_device_info = device_info # type: ignore[assignment] + + # Entity setup + self._attr_unique_id = f"oig_cloud_{self._box_id}_battery_efficiency" + self.entity_id = f"sensor.oig_{self._box_id}_battery_efficiency" + self._attr_icon = "mdi:battery-sync" + self._attr_native_unit_of_measurement = "%" + self._attr_device_class = None + self._attr_state_class = SensorStateClass.MEASUREMENT + + # Načíst název ze sensor types + from ...sensors.SENSOR_TYPES_STATISTICS import SENSOR_TYPES_STATISTICS + + sensor_config = SENSOR_TYPES_STATISTICS.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + self._attr_name = name_cs or name_en or "Efektivita baterie (měsíc)" + + # State tracking + self._efficiency_last_month: Optional[float] = None # State = minulý měsíc + self._battery_kwh_month_start: Optional[float] = None + self._current_month_partial: Dict[str, Any] = {} + self._last_month_data: Dict[str, Any] = {} # Kompletní data minulého měsíce + self._loading_history: bool = False # Flag aby se načítání neopakovalo + + # Initialize extra state attributes + self._attr_extra_state_attributes = {} + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - restore state from attributes.""" + await CoordinatorEntity.async_added_to_hass(self) + self._hass = self.hass + + # Try to restore from last state (HA automatically stores extra_state_attributes) + last_state = await self.async_get_last_state() + if last_state: + # Restore efficiency minulého měsíce (state) + try: + if last_state.state not in ["unknown", "unavailable"]: + self._efficiency_last_month = float(last_state.state) + except (ValueError, TypeError): + self._efficiency_last_month = None + + # Restore tracking data from attributes + if last_state.attributes: + self._battery_kwh_month_start = last_state.attributes.get( + "_battery_kwh_month_start" + ) + self._current_month_partial = last_state.attributes.get( + "_current_month_partial", {} + ) + self._last_month_data = last_state.attributes.get( + "_last_month_data", {} + ) + _LOGGER.info( + "🔋 Restored battery efficiency state: " + "last_month=%s%%, month_start=%s kWh", + self._efficiency_last_month, + self._battery_kwh_month_start, + ) + + # Initialize if None + # Pro první deployment: inicializuj i uprostřed měsíce (data nebudou přesná) + # Po 1. listopadu to můžeme změnit aby čekalo na začátek měsíce + now = datetime.now() + if self._battery_kwh_month_start is None: + battery_now = self._get_sensor("remaining_usable_capacity") or 0 + self._battery_kwh_month_start = battery_now + + if now.day <= 2: + _LOGGER.info( + "🔋 Battery efficiency sensor initialized (beginning of month): " + "month_start=%.2f kWh", + battery_now, + ) + else: + _LOGGER.warning( + "🔋 Battery efficiency sensor initialized mid-month (day %s): " + "month_start=%.2f kWh. Current month data will be PARTIAL and may " + "be inaccurate. Full accuracy starts from 1st November.", + now.day, + battery_now, + ) + + # Schedule monthly calculation on 1st day at 00:10 + from homeassistant.helpers.event import async_track_utc_time_change + + # Monthly: 1. den v měsíci v 00:10 UTC + async_track_utc_time_change( + self.hass, self._monthly_calculation, hour=0, minute=10, second=0 + ) + + # Daily: každý den v 23:55 UTC + async_track_utc_time_change( + self.hass, self._daily_update, hour=23, minute=55, second=0 + ) + + # Initial update + await self._daily_update() + + async def async_will_remove_from_hass(self) -> None: + """Při odebrání z HA.""" + await CoordinatorEntity.async_will_remove_from_hass(self) + + async def _monthly_calculation(self, now: datetime) -> None: + """ + 1. den měsíce - spočítat efficiency MINULÉHO měsíce. + + Vezme data uložená včera večer v _daily_update a uloží jako state. + """ + # Kontrola zda je to opravdu 1. den + if now.day != 1: + return + + _LOGGER.info("🔋 Monthly calculation: Computing last month efficiency") + + # Použít data z včerejška (uložená v _daily_update) + charge_last_month = self._current_month_partial.get("charge", 0) + discharge_last_month = self._current_month_partial.get("discharge", 0) + battery_month_end = self._current_month_partial.get("battery_end", 0) + battery_month_start = self._current_month_partial.get("battery_start", 0) + + # Snížený limit z 20 na 5 kWh - umožní výpočet i pro částečná data + if charge_last_month < 5.0 or discharge_last_month < 5.0: + _LOGGER.warning( + "🔋 Insufficient data for last month: charge=%.2f, discharge=%.2f", + charge_last_month, + discharge_last_month, + ) + self._efficiency_last_month = None + else: + # Výpočet + delta = battery_month_end - battery_month_start + effective_discharge = discharge_last_month - delta + + if ( + effective_discharge > 0 + and effective_discharge <= charge_last_month * 1.1 + ): + efficiency = (effective_discharge / charge_last_month) * 100 + losses_kwh = charge_last_month - effective_discharge + losses_pct = (losses_kwh / charge_last_month) * 100 + + self._efficiency_last_month = round(efficiency, 1) + + # Uložit kompletní data minulého měsíce + self._last_month_data = { + "efficiency_pct": round(efficiency, 1), + "losses_kwh": round(losses_kwh, 2), + "losses_pct": round(losses_pct, 1), + "charge_kwh": round(charge_last_month, 2), + "discharge_kwh": round(discharge_last_month, 2), + "effective_discharge_kwh": round(effective_discharge, 2), + "delta_kwh": round(delta, 2), + "battery_start_kwh": round(battery_month_start, 2), + "battery_end_kwh": round(battery_month_end, 2), + } + + _LOGGER.info( + "🔋 Last month: efficiency=%s%%, losses=%.2f kWh (%.1f%%), " + "charge=%.2f, discharge=%.2f, delta=%.2f", + self._efficiency_last_month, + losses_kwh, + losses_pct, + charge_last_month, + discharge_last_month, + delta, + ) + else: + _LOGGER.warning( + "🔋 Invalid effective discharge: %.2f kWh", effective_discharge + ) + self._efficiency_last_month = None + + # Reset pro nový měsíc + battery_now = self._get_sensor("remaining_usable_capacity") or 0 + self._battery_kwh_month_start = battery_now + self._current_month_partial = {} + + _LOGGER.info("🔋 New month started with %.2f kWh", battery_now) + + # Update state + self._attr_native_value = self._efficiency_last_month + self.async_write_ha_state() + + async def _daily_update(self, now: Optional[datetime] = None) -> None: + """ + Denně v 23:55 - aktualizovat průběžná data TOHOTO měsíce. + """ + _LOGGER.debug("🔋 Daily update: Computing current month (partial) efficiency") + + # Pokud nemáme month_start, nemůžeme počítat efektivitu + if self._battery_kwh_month_start is None: + _LOGGER.warning( + "🔋 Cannot compute efficiency - battery_kwh_month_start not initialized. " + "Waiting for next month to start." + ) + self._attr_native_value = self._efficiency_last_month + self._update_extra_state_attributes() + self.async_write_ha_state() + return + + # Číst aktuální měsíční data + charge_month_wh = self._get_sensor("computed_batt_charge_energy_month") or 0 + discharge_month_wh = ( + self._get_sensor("computed_batt_discharge_energy_month") or 0 + ) + battery_now = self._get_sensor("remaining_usable_capacity") or 0 + + charge_month = charge_month_wh / 1000 + discharge_month = discharge_month_wh / 1000 + + # Uložit snapshot pro monthly calculation + self._current_month_partial = { + "charge": round(charge_month, 2), + "discharge": round(discharge_month, 2), + "battery_start": round(self._battery_kwh_month_start, 2), + "battery_end": round(battery_now, 2), + "timestamp": datetime.now().isoformat(), + } + + # Vypočítat průběžnou efficiency (jen pro atributy) + if charge_month >= 1.0 and discharge_month >= 1.0: + delta = battery_now - self._battery_kwh_month_start + effective_discharge = discharge_month - delta + + if effective_discharge > 0 and effective_discharge <= charge_month * 1.2: + efficiency_current = (effective_discharge / charge_month) * 100 + self._current_month_partial["efficiency"] = round(efficiency_current, 1) + self._current_month_partial["delta"] = round(delta, 2) + self._current_month_partial["effective_discharge"] = round( + effective_discharge, 2 + ) + + # Update extra state attributes + self._update_extra_state_attributes() + + # State: Zobraz minulý měsíc pokud máme, jinak aktuální měsíc (partial) + if self._efficiency_last_month is not None: + self._attr_native_value = self._efficiency_last_month + else: + # Fallback na current month pouze pokud je v realistickém pásmu. + current_eff = self._current_month_partial.get("efficiency") + if current_eff is not None and current_eff >= 70.0: + self._attr_native_value = current_eff + else: + self._attr_native_value = None + + self.async_write_ha_state() + + def _get_sensor(self, sensor_type: str) -> Optional[float]: + """Získat hodnotu z existujícího sensoru.""" + if not self._hass: + return None + + sensor_id = f"sensor.oig_{self._box_id}_{sensor_type}" + state = self._hass.states.get(sensor_id) + + if not state or state.state in ["unknown", "unavailable"]: + return None + + try: + return float(state.state) + except (ValueError, TypeError): + return None + + def _update_extra_state_attributes(self) -> None: + """Update extra state attributes with current data.""" + now = datetime.now() + self._ensure_history_task() + + current_metrics = self._current_month_metrics() + last_month_losses_kwh, last_month_losses_pct = self._last_month_losses() + current_month_status = self._current_month_status(now) + + self._attr_extra_state_attributes = { + # Minulý měsíc (kompletní) - to je STATE + "efficiency_last_month_pct": self._efficiency_last_month, + "losses_last_month_kwh": last_month_losses_kwh, + "losses_last_month_pct": last_month_losses_pct, + "last_month_charge_kwh": self._last_month_data.get("charge_kwh"), + "last_month_discharge_kwh": self._last_month_data.get("discharge_kwh"), + "last_month_status": "complete", + # Tento měsíc (průběžné) + "efficiency_current_month_pct": current_metrics["efficiency"], + "losses_current_month_kwh": current_metrics["losses_kwh"], + "losses_current_month_pct": current_metrics["losses_pct"], + "current_month_charge_kwh": current_metrics["charge"], + "current_month_discharge_kwh": current_metrics["discharge"], + "current_month_delta_kwh": current_metrics["delta"], + "current_month_days": now.day, + "current_month_status": current_month_status, + # Battery tracking + "battery_kwh_month_start": ( + round(self._battery_kwh_month_start, 2) + if self._battery_kwh_month_start + else None + ), + "battery_kwh_now": round( + self._get_sensor("remaining_usable_capacity") or 0, 2 + ), + # Metadata + "last_daily_update": self._current_month_partial.get("timestamp"), + "next_monthly_calculation": "1st day of next month at 00:10", + "calculation_method": "Energy balance with SoC correction", + "data_source": "computed_batt_charge/discharge_energy_month", + "formula": "(discharge - ΔE_battery) / charge * 100", + "formula_losses": "charge - (discharge - ΔE_battery)", + # Internal (for restore) + "_battery_kwh_month_start": self._battery_kwh_month_start, + "_current_month_partial": self._current_month_partial, + "_last_month_data": self._last_month_data, + } + + def _ensure_history_task(self) -> None: + if ( + not self._last_month_data or not self._last_month_data.get("charge_kwh") + ) and not self._loading_history: + self._loading_history = True + self.hass.async_create_task(self._try_load_last_month_from_history()) + + def _current_month_metrics(self) -> Dict[str, Optional[float]]: + current_efficiency = self._current_month_partial.get("efficiency") + current_charge = self._current_month_partial.get("charge") + current_discharge = self._current_month_partial.get("discharge") + current_delta = self._current_month_partial.get("delta") + current_effective_discharge = self._current_month_partial.get( + "effective_discharge" + ) + + losses_kwh = None + losses_pct = None + if current_charge and current_effective_discharge: + losses_kwh = round(current_charge - current_effective_discharge, 2) + losses_pct = round((losses_kwh / current_charge) * 100, 1) + + return { + "efficiency": current_efficiency, + "charge": current_charge, + "discharge": current_discharge, + "delta": current_delta, + "losses_kwh": losses_kwh, + "losses_pct": losses_pct, + } + + def _last_month_losses(self) -> tuple[Optional[float], Optional[float]]: + losses_kwh = self._last_month_data.get("losses_kwh") + losses_pct = self._last_month_data.get("losses_pct") + if losses_pct is None and self._efficiency_last_month is not None: + losses_pct = round(100 - self._efficiency_last_month, 1) + return losses_kwh, losses_pct + + def _current_month_status(self, now: datetime) -> str: + if self._battery_kwh_month_start is None: + return f"not initialized (day {now.day}) - waiting for next month" + return f"partial ({now.day} days)" + + async def _try_load_last_month_from_history(self) -> None: # noqa: C901 + """ + Pokus o načtení dat za minulý měsíc z historie HA. + Použije monthly sensors k vypočtení efficiency za minulý měsíc. + """ + try: + from homeassistant.components.recorder.history import get_significant_states + except ImportError: + _LOGGER.warning("🔋 Recorder component not available") + return + + _LOGGER.info("🔋 Attempting to load last month efficiency from history...") + + try: + last_month_year, last_month, start_time, end_time = _last_month_range() + _LOGGER.debug( + "🔋 Looking for history between %s and %s", start_time, end_time + ) + + charge_sensor, discharge_sensor, battery_sensor = _monthly_sensor_ids( + self._box_id + ) + history = await _load_history_states( + self.hass, + get_significant_states, + end_time - timedelta(hours=1), + end_time, + [charge_sensor, discharge_sensor, battery_sensor], + ) + _log_history_debug(history) + if not history: + _LOGGER.warning( + "🔋 No history found for %s/%s", last_month, last_month_year + ) + return + + charge_wh = _extract_latest_numeric(history, charge_sensor) + discharge_wh = _extract_latest_numeric(history, discharge_sensor) + battery_end = _extract_latest_numeric(history, battery_sensor) + + battery_start = await _load_battery_start( + self.hass, get_significant_states, battery_sensor, start_time + ) + + metrics = _compute_last_month_metrics( + charge_wh, discharge_wh, battery_start, battery_end + ) + if metrics: + self._efficiency_last_month = metrics["efficiency_pct"] + self._last_month_data = metrics + _log_last_month_success( + last_month, + last_month_year, + metrics, + ) + self._update_extra_state_attributes() + self.async_write_ha_state() + _LOGGER.info("🔋 Last month data saved to state storage") + else: + _log_last_month_failure( + last_month, + last_month_year, + charge_wh, + discharge_wh, + battery_start, + battery_end, + ) + + except Exception as e: + _LOGGER.error("🔋 Error loading history: %s", e, exc_info=True) + finally: + # Vždy resetovat flag aby se mohl zkusit loading znovu při dalším update + self._loading_history = False + + +def _last_month_range() -> tuple[int, int, datetime, datetime]: + now = datetime.now() + if now.month == 1: + last_month_year = now.year - 1 + last_month = 12 + else: + last_month_year = now.year + last_month = now.month - 1 + + import calendar + from datetime import timezone + + last_day = calendar.monthrange(last_month_year, last_month)[1] + end_time = datetime( + last_month_year, last_month, last_day, 23, 59, 59, tzinfo=timezone.utc + ) + start_time = datetime( + last_month_year, last_month, 1, 0, 0, 0, tzinfo=timezone.utc + ) + return last_month_year, last_month, start_time, end_time + + +def _monthly_sensor_ids(box_id: str) -> tuple[str, str, str]: + charge_sensor = f"sensor.oig_{box_id}_computed_batt_charge_energy_month" + discharge_sensor = f"sensor.oig_{box_id}_computed_batt_discharge_energy_month" + battery_sensor = f"sensor.oig_{box_id}_remaining_usable_capacity" + return charge_sensor, discharge_sensor, battery_sensor + + +async def _load_history_states( + hass: Any, + history_fn: Any, + start_time: datetime, + end_time: datetime, + entity_ids: list[str], +) -> Optional[Dict[str, Any]]: + return await hass.async_add_executor_job( + history_fn, + hass, + start_time, + end_time, + entity_ids, + ) + + +def _log_history_debug(history: Optional[Dict[str, Any]]) -> None: + _LOGGER.debug( + "🔋 History result type: %s, keys: %s", + type(history), + history.keys() if history else "None", + ) + if history: + for key, values in history.items(): + _LOGGER.debug("🔋 History[%s]: %s entries", key, len(values)) + + +def _extract_latest_numeric( + history: Optional[Dict[str, Any]], entity_id: str +) -> Optional[float]: + if not history or entity_id not in history or not history[entity_id]: + return None + for item in reversed(history[entity_id]): + state_value = item.get("state") if isinstance(item, dict) else item.state + if state_value in ["unknown", "unavailable", None]: + continue + try: + return float(state_value) + except (ValueError, TypeError): + continue + return None + + +async def _load_battery_start( + hass: Any, history_fn: Any, battery_sensor: str, start_time: datetime +) -> Optional[float]: + history_start = await hass.async_add_executor_job( + history_fn, + hass, + start_time, + start_time + timedelta(hours=1), + [battery_sensor], + ) + return _extract_latest_numeric(history_start, battery_sensor) + + +def _compute_last_month_metrics( + charge_wh: Optional[float], + discharge_wh: Optional[float], + battery_start: Optional[float], + battery_end: Optional[float], +) -> Optional[Dict[str, float]]: + if ( + charge_wh is None + or discharge_wh is None + or battery_start is None + or battery_end is None + ): + return None + + charge_kwh = charge_wh / 1000 + discharge_kwh = discharge_wh / 1000 + delta_kwh = battery_end - battery_start + effective_discharge = discharge_kwh - delta_kwh + if effective_discharge <= 0 or charge_kwh <= 0: + return None + + efficiency = (effective_discharge / charge_kwh) * 100 + losses_kwh = charge_kwh - effective_discharge + losses_pct = (losses_kwh / charge_kwh) * 100 + return { + "efficiency_pct": round(efficiency, 1), + "losses_kwh": round(losses_kwh, 2), + "losses_pct": round(losses_pct, 1), + "charge_kwh": round(charge_kwh, 2), + "discharge_kwh": round(discharge_kwh, 2), + "effective_discharge_kwh": round(effective_discharge, 2), + "delta_kwh": round(delta_kwh, 2), + "battery_start_kwh": round(battery_start, 2), + "battery_end_kwh": round(battery_end, 2), + } + + +def _log_last_month_success( + last_month: int, last_month_year: int, metrics: Dict[str, float] +) -> None: + _LOGGER.info( + "🔋 Loaded %s/%s from history: efficiency=%.1f%%, charge=%.2f kWh, " + "discharge=%.2f kWh, delta=%.2f kWh", + last_month, + last_month_year, + metrics["efficiency_pct"], + metrics["charge_kwh"], + metrics["discharge_kwh"], + metrics["delta_kwh"], + ) + + +def _log_last_month_failure( + last_month: int, + last_month_year: int, + charge_wh: Optional[float], + discharge_wh: Optional[float], + battery_start: Optional[float], + battery_end: Optional[float], +) -> None: + _LOGGER.warning( + "🔋 Incomplete data for %s/%s: charge=%s, discharge=%s, " + "battery_start=%s, battery_end=%s", + last_month, + last_month_year, + charge_wh, + discharge_wh, + battery_start, + battery_end, + ) diff --git a/custom_components/oig_cloud/battery_forecast/sensors/grid_charging_sensor.py b/custom_components/oig_cloud/battery_forecast/sensors/grid_charging_sensor.py new file mode 100644 index 00000000..8c94e88c --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/grid_charging_sensor.py @@ -0,0 +1,576 @@ +"""Grid charging plan sensor extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +import time +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorStateClass, +) +from homeassistant.const import EntityCategory +from homeassistant.core import callback +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +from ...const import DOMAIN + +MODE_LABEL_HOME_UPS = "Home UPS" +MODE_LABEL_HOME_I = "HOME I" + +_LOGGER = logging.getLogger(__name__) +HOME_UPS_LABEL = "HOME UPS" + + +class OigCloudGridChargingPlanSensor(CoordinatorEntity, SensorEntity): + """Sensor pro plánované nabíjení ze sítě - odvozený z battery_forecast.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + device_info: Dict[str, Any], + ) -> None: + """Initialize sensor.""" + super().__init__(coordinator) + self._sensor_type = sensor_type + self._attr_device_info = device_info + + from ...sensor_types import SENSOR_TYPES + + self._config = SENSOR_TYPES.get(sensor_type, {}) + + try: + from ...entities.base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + self._attr_unique_id = f"oig_cloud_{self._box_id}_{sensor_type}" + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + name_cs = self._config.get("name_cs") + name_en = self._config.get("name") + self._attr_name = name_cs or name_en or sensor_type + + self._attr_native_unit_of_measurement = self._config.get("unit") + self._attr_icon = self._config.get("icon", "mdi:battery-charging") + + device_class = self._config.get("device_class") + if device_class: + self._attr_device_class = SensorDeviceClass(device_class) + + entity_category = self._config.get("entity_category") + if entity_category: + self._attr_entity_category = EntityCategory(entity_category) + + state_class = self._config.get("state_class") + if state_class: + self._attr_state_class = SensorStateClass(state_class) + + self._last_offset_start = None + self._last_offset_end = None + self._cached_ups_blocks: List[Dict[str, Any]] = [] + self._log_rl_last: Dict[str, float] = {} + + def _log_rate_limited( + self, + key: str, + level: str, + msg: str, + *args: Any, + cooldown_s: float = 3600.0, + ) -> None: + """Log at most once per cooldown for the given key.""" + now = time.monotonic() + last = self._log_rl_last.get(key, 0.0) + if now - last < cooldown_s: + return + self._log_rl_last[key] = now + log_fn = getattr(_LOGGER, level, _LOGGER.debug) + log_fn(msg, *args) + + async def async_added_to_hass(self) -> None: + """When entity is added to hass.""" + await super().async_added_to_hass() + await self._load_ups_blocks() + + @callback + def _handle_coordinator_update(self) -> None: + """Handle updated data from coordinator.""" + if self.hass: + self.hass.async_create_task(self._load_ups_blocks()) + super()._handle_coordinator_update() + + async def _load_ups_blocks(self) -> None: + """Load UPS blocks from precomputed storage (async).""" + plan_key = self._get_active_plan_key() + self._cached_ups_blocks = await self._get_home_ups_blocks_from_detail_tabs( + plan=plan_key + ) + _LOGGER.debug( + "[GridChargingPlan] Loaded %s UPS blocks into cache", + len(self._cached_ups_blocks), + ) + self.async_write_ha_state() + + async def _get_home_ups_blocks_from_detail_tabs( + self, plan: str = "hybrid" + ) -> List[Dict[str, Any]]: + """Načte UPS bloky z precomputed storage.""" + try: + if not self.hass: + return [] + + battery_sensor = _find_battery_forecast_sensor(self.hass, self._box_id) + + if not battery_sensor: + _LOGGER.warning("[GridChargingPlan] BatteryForecastSensor not found") + return [] + + precomputed = await battery_sensor._precomputed_store.async_load() + if not precomputed: + _LOGGER.debug("[GridChargingPlan] No precomputed data yet") + return [] + + _ = plan # legacy parameter (dual-planner removed) + detail_tabs = _get_detail_tabs(precomputed) + if not detail_tabs: + _LOGGER.debug("[GridChargingPlan] No detail tabs data available") + return [] + + current_time = dt_util.now().strftime("%H:%M") + ups_blocks = _collect_today_blocks( + detail_tabs.get("today", {}), + current_time, + ) + ups_blocks.extend( + _collect_tomorrow_blocks(detail_tabs.get("tomorrow", {})) + ) + + _LOGGER.debug( + "[GridChargingPlan] Found %s active/future UPS blocks (today + tomorrow)", + len(ups_blocks), + ) + return ups_blocks + + except Exception as err: + _LOGGER.error("[GridChargingPlan] Error: %s", err, exc_info=True) + return [] + + def _get_active_plan_key(self) -> str: + """Return active plan key (single-planner).""" + return "hybrid" + + def _calculate_charging_intervals( + self, + ) -> tuple[List[Dict[str, Any]], float, float]: + """Vypočítá intervaly nabíjení ze sítě z CACHED detail_tabs dat.""" + charging_intervals = self._cached_ups_blocks + + if not charging_intervals: + return [], 0.0, 0.0 + + total_energy = sum(block["grid_charge_kwh"] for block in charging_intervals) + total_cost = sum(block["cost_czk"] for block in charging_intervals) + + return charging_intervals, total_energy, total_cost + + def _get_dynamic_offset(self, from_mode: str, to_mode: str) -> float: + """Získá dynamický offset z ModeTransitionTracker.""" + try: + if not self.hass: + self._log_rate_limited( + f"grid_offset_missing_hass_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] hass not available for offset %s→%s, using fallback 300s", + from_mode, + to_mode, + cooldown_s=3600.0, + ) + return 300.0 + + config_entry = self.coordinator.config_entry + if not config_entry: + self._log_rate_limited( + f"grid_offset_missing_entry_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] No config_entry for offset %s→%s, using fallback 300s", + from_mode, + to_mode, + cooldown_s=3600.0, + ) + return 300.0 + + entry_data = self.hass.data.get(DOMAIN, {}).get(config_entry.entry_id) + if not entry_data: + self._log_rate_limited( + f"grid_offset_missing_entry_data_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] No entry data for offset %s→%s, using fallback 300s", + from_mode, + to_mode, + cooldown_s=3600.0, + ) + return 300.0 + + service_shield = entry_data.get("service_shield") + if not service_shield or not hasattr(service_shield, "mode_tracker"): + self._log_rate_limited( + f"grid_offset_missing_tracker_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] ServiceShield/mode_tracker not available for offset %s→%s, using fallback 300s", + from_mode, + to_mode, + cooldown_s=3600.0, + ) + return 300.0 + + mode_tracker = service_shield.mode_tracker + if not mode_tracker: + self._log_rate_limited( + f"grid_offset_tracker_uninit_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] Mode tracker not initialized for offset %s→%s, using fallback 300s", + from_mode, + to_mode, + cooldown_s=3600.0, + ) + return 300.0 + + offset_seconds = mode_tracker.get_offset_for_scenario(from_mode, to_mode) + + self._log_rate_limited( + f"grid_offset_ok_{from_mode}_{to_mode}", + "debug", + "[GridChargingPlan] Dynamic offset %s→%s: %ss (from tracker)", + from_mode, + to_mode, + offset_seconds, + cooldown_s=3600.0, + ) + + return offset_seconds + + except Exception as err: + _LOGGER.warning( + "[GridChargingPlan] ❌ Error getting offset %s→%s, using fallback 300s: %s", + from_mode, + to_mode, + err, + exc_info=True, + ) + return 300.0 + + @property + def native_value(self) -> str: + """Vrátí ON pokud právě běží nebo brzy začne UPS (s offsetem).""" + charging_intervals, _, _ = self._calculate_charging_intervals() + + if not charging_intervals: + return "off" + + now = dt_util.now() + current_mode = self._get_current_mode() + + sorted_blocks = self._get_sorted_charging_blocks(charging_intervals) + + for i, block in enumerate(sorted_blocks): + window = self._build_block_window(block, now) + if not window: + continue + start_time, end_time, start_time_str, end_time_str = window + + offset_on, offset_off = self._resolve_block_offsets( + sorted_blocks, + i, + block, + current_mode, + end_time, + ) + + if self._is_now_in_block(now, start_time, end_time, offset_on, offset_off): + _LOGGER.debug( + "[GridChargingPlan] Sensor ON: now=%s, block=%s-%s, " + "offset_on=%ss, offset_off=%ss", + now.strftime("%H:%M:%S"), + start_time_str, + end_time_str, + offset_on, + offset_off, + ) + return "on" + + return "off" + + @staticmethod + def _get_sorted_charging_blocks(charging_intervals: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + return sorted( + charging_intervals, + key=lambda b: (0 if b.get("day") == "today" else 1, b.get("time_from", "")), + ) + + def _build_block_window( + self, block: Dict[str, Any], now: datetime + ) -> Optional[tuple[datetime, datetime, str, str]]: + start_time_str = block.get("time_from", "00:00") + end_time_str = block.get("time_to", "23:59") + day = block.get("day", "today") + + try: + start_hour, start_min = map(int, start_time_str.split(":")) + end_hour, end_min = map(int, end_time_str.split(":")) + + start_time = now.replace( + hour=start_hour, minute=start_min, second=0, microsecond=0 + ) + end_time = now.replace( + hour=end_hour, minute=end_min, second=0, microsecond=0 + ) + + if day == "tomorrow": + start_time = start_time + timedelta(days=1) + end_time = end_time + timedelta(days=1) + + if end_time <= start_time: + end_time = end_time + timedelta(days=1) + + return start_time, end_time, start_time_str, end_time_str + except (ValueError, AttributeError): + _LOGGER.warning( + "[GridChargingPlan] Invalid time format: %s - %s", + start_time_str, + end_time_str, + ) + return None + + def _resolve_block_offsets( + self, + blocks: List[Dict[str, Any]], + idx: int, + block: Dict[str, Any], + current_mode: str, + end_time: datetime, + ) -> tuple[float, float]: + offset_on = self._get_dynamic_offset(current_mode, HOME_UPS_LABEL) + if self._next_block_is_ups(blocks, idx, end_time): + return offset_on, 0.0 + next_mode = self._get_next_mode_after_ups(block, blocks, idx) + offset_off = self._get_dynamic_offset(HOME_UPS_LABEL, next_mode) + return offset_on, offset_off + + def _next_block_is_ups( + self, blocks: List[Dict[str, Any]], idx: int, end_time: datetime + ) -> bool: + if idx + 1 >= len(blocks): + return False + next_block = blocks[idx + 1] + next_start = next_block.get("time_from", "") + if next_start == blocks[idx].get("time_to", ""): + return True + return ( + abs( + ( + self._parse_time_to_datetime(next_start, next_block.get("day")) + - end_time + ).total_seconds() + ) + <= 60 + ) + + @staticmethod + def _is_now_in_block( + now: datetime, + start_time: datetime, + end_time: datetime, + offset_on: float, + offset_off: float, + ) -> bool: + start_time_with_offset = start_time - timedelta(seconds=offset_on) + end_time_with_offset = end_time - timedelta(seconds=offset_off) + return start_time_with_offset <= now <= end_time_with_offset + + def _get_current_mode(self) -> str: + """Získá aktuální režim z coordinator data.""" + if not self.coordinator or not self.coordinator.data: + return MODE_LABEL_HOME_I + + box_data = self.coordinator.data.get(self._box_id, {}) + current_mode = box_data.get("current_mode", MODE_LABEL_HOME_I) + return current_mode + + def _get_next_mode_after_ups( + self, current_block: Dict, all_blocks: List[Dict], current_idx: int + ) -> str: + """Získá režim následující po UPS bloku.""" + if current_idx + 1 < len(all_blocks): + next_block = all_blocks[current_idx + 1] + next_mode = next_block.get("mode_planned", MODE_LABEL_HOME_I) + if HOME_UPS_LABEL not in next_mode: + return next_mode + + return MODE_LABEL_HOME_I + + def _parse_time_to_datetime(self, time_str: str, day: str) -> datetime: + """Parse time string to datetime.""" + now = dt_util.now() + try: + hour, minute = map(int, time_str.split(":")) + dt = now.replace(hour=hour, minute=minute, second=0, microsecond=0) + if day == "tomorrow": + dt = dt + timedelta(days=1) + return dt + except (ValueError, AttributeError): + return now + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Vrátí atributy senzoru - nabíjecí bloky z detail_tabs API.""" + charging_intervals, total_energy, total_cost = ( + self._calculate_charging_intervals() + ) + + if not charging_intervals: + return { + "charging_blocks": [], + "total_energy_kwh": 0.0, + "total_cost_czk": 0.0, + "next_charging_time_range": None, + "next_charging_duration": None, + "is_charging_planned": False, + } + + next_charging_block = None + for interval in charging_intervals: + if interval.get("status") == "planned": + next_charging_block = interval + break + + next_charging_time_range = None + next_charging_duration = None + if next_charging_block: + day_label = ( + "zítra" if next_charging_block.get("day") == "tomorrow" else "dnes" + ) + next_charging_time_range = ( + f"{day_label} {next_charging_block['time_from']} - " + f"{next_charging_block['time_to']}" + ) + duration_hours = next_charging_block.get("duration_hours", 0) + duration_minutes = int(duration_hours * 60) + next_charging_duration = f"{duration_minutes} min" + + charging_blocks = [] + for interval in charging_intervals: + block = { + "time_from": interval["time_from"], + "time_to": interval["time_to"], + "day": interval["day"], + "mode": interval["mode"], + "status": interval["status"], + "grid_charge_kwh": interval["grid_charge_kwh"], + "total_cost_czk": interval["cost_czk"], + "battery_start_kwh": interval["battery_start_kwh"], + "battery_end_kwh": interval["battery_end_kwh"], + "interval_count": interval["interval_count"], + "is_charging_battery": True, + "avg_spot_price_czk": ( + round(interval["cost_czk"] / interval["grid_charge_kwh"], 2) + if interval["grid_charge_kwh"] > 0 + else 0.0 + ), + } + charging_blocks.append(block) + + return { + "charging_blocks": charging_blocks, + "total_energy_kwh": round(total_energy, 2), + "total_cost_czk": round(total_cost, 2), + "next_charging_time_range": next_charging_time_range, + "next_charging_duration": next_charging_duration, + "is_charging_planned": len(charging_blocks) > 0, + } + + +def _find_battery_forecast_sensor(hass: Any, box_id: str) -> Optional[Any]: + component = hass.data.get("entity_components", {}).get("sensor") + if not component: + return None + for entity in component.entities: + if ( + hasattr(entity, "_precomputed_store") + and box_id in entity.entity_id + and "battery_forecast" in entity.entity_id + ): + return entity + return None + + +def _get_detail_tabs(precomputed: Dict[str, Any]) -> Dict[str, Any]: + return precomputed.get("detail_tabs", {}) or precomputed.get( + "detail_tabs_hybrid", {} + ) + + +def _collect_today_blocks( + today: Dict[str, Any], current_time: str +) -> List[Dict[str, Any]]: + ups_blocks = [] + for block in today.get("mode_blocks", []): + if not _is_home_ups_mode( + block.get("mode_historical", ""), + block.get("mode_planned", ""), + ): + continue + + status = block.get("status", "") + end_time = block.get("end_time", "") + if status == "completed" and end_time < current_time: + continue + + cost_key = "cost_historical" if status == "completed" else "cost_planned" + ups_blocks.append( + _build_ups_block(block, "today", status, cost_key, end_time) + ) + return ups_blocks + + +def _collect_tomorrow_blocks(tomorrow: Dict[str, Any]) -> List[Dict[str, Any]]: + ups_blocks = [] + for block in tomorrow.get("mode_blocks", []): + if not _is_home_ups_mode(block.get("mode_planned", "")): + continue + ups_blocks.append( + _build_ups_block(block, "tomorrow", "planned", "cost_planned") + ) + return ups_blocks + + +def _is_home_ups_mode(*modes: str) -> bool: + return any(HOME_UPS_LABEL in (mode or "") for mode in modes) + + +def _build_ups_block( + block: Dict[str, Any], + day: str, + status: str, + cost_key: str, + end_time_override: Optional[str] = None, +) -> Dict[str, Any]: + return { + "time_from": block.get("start_time", ""), + "time_to": end_time_override or block.get("end_time", ""), + "day": day, + "mode": MODE_LABEL_HOME_UPS, + "status": status, + "grid_charge_kwh": block.get("grid_import_total_kwh", 0.0), + "cost_czk": block.get(cost_key, 0.0), + "battery_start_kwh": block.get("battery_soc_start", 0.0), + "battery_end_kwh": block.get("battery_soc_end", 0.0), + "interval_count": block.get("interval_count", 0), + "duration_hours": block.get("duration_hours", 0.0), + } diff --git a/custom_components/oig_cloud/battery_forecast/sensors/ha_sensor.py b/custom_components/oig_cloud/battery_forecast/sensors/ha_sensor.py new file mode 100644 index 00000000..b58a67de --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/ha_sensor.py @@ -0,0 +1,777 @@ +"""Zjednodušený senzor pro predikci nabití baterie v průběhu dne.""" + +import logging +from datetime import date, datetime, timedelta +from typing import Any, ClassVar, Dict, List, Optional, Union + +from homeassistant.components.sensor import SensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +from .. import storage as plan_storage_module +from .. import task_utils as task_utils_module +from ..balancing import helpers as balancing_helpers_module +from ..data import battery_state as battery_state_module +from ..data import load_profiles as load_profiles_module +from ..data import pricing as pricing_module +from ..data import solar_forecast as solar_forecast_module +from ..planning import charging_helpers as charging_helpers_module +from ..planning import forecast_update as forecast_update_module +from ..planning import interval_grouping as interval_grouping_module +from ..planning import mode_recommendations as mode_recommendations_module +from ..planning import scenario_analysis as scenario_analysis_module +from ..presentation import detail_tabs as detail_tabs_module +from ..presentation import plan_tabs as plan_tabs_module +from ..presentation import precompute as precompute_module +from ..presentation import state_attributes as state_attributes_module +from ..presentation import unified_cost_tile as unified_cost_tile_module +from ..timeline import extended as timeline_extended_module +from ..types import ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, +) +from . import sensor_lifecycle as sensor_lifecycle_module +from . import sensor_runtime as sensor_runtime_module +from . import sensor_setup as sensor_setup_module + +_LOGGER = logging.getLogger(__name__) + +AUTO_SWITCH_STARTUP_DELAY = timedelta(seconds=0) + +# CBB 3F Home Plus Premium - Mode Constants (Phase 2) +# NOTE: Mode constants moved to battery_forecast.types. + +DATE_FMT = "%Y-%m-%d" +DATETIME_FMT = "%Y-%m-%dT%H:%M:%S" +ISO_TZ_OFFSET = "+00:00" + +# Stabilizační guard po změně režimu (v minutách) +MODE_GUARD_MINUTES = 60 + +# NOTE: AC charging limit and efficiency are now read from: +# - Config: home_charge_rate (kW) - user configured max charging power +# - Sensor: sensor.oig_{box_id}_battery_efficiency (%) - real-time measured efficiency +# +# Example: home_charge_rate = 2.8 kW → 0.7 kWh per 15min interval +# Fallback efficiency if sensor unavailable: 88.2% + +# Debug options - Phase 1.5: API Optimization +# Set to False for LEAN attributes (96% memory reduction) +DEBUG_EXPOSE_BASELINE_TIMELINE = False # Expose baseline timeline in sensor attributes + + +def _plan_get_value(obj: Any, key: str, default: Any = None) -> Any: + if isinstance(obj, dict): + return obj.get(key, default) + return getattr(obj, key, default) + + +def _parse_plan_ts(value: Any) -> Optional[datetime]: + if not value: + return None + try: + ts = datetime.fromisoformat(str(value)) + except Exception: + return None + return dt_util.as_local(ts) + + +def _build_spot_index( + spot_prices: List[Dict[str, Any]] +) -> tuple[List[Optional[datetime]], Dict[int, int]]: + spot_times: List[Optional[datetime]] = [] + index_by_minute: Dict[int, int] = {} + for idx, sp in enumerate(spot_prices): + ts = _parse_plan_ts(sp.get("time")) + spot_times.append(ts) + if ts: + index_by_minute[int(ts.timestamp() // 60)] = idx + return spot_times, index_by_minute + + +def _normalize_plan_intervals(plan: Any) -> List[Dict[str, Any]]: + intervals = _plan_get_value(plan, "intervals", None) + if intervals: + return intervals + legacy = _plan_get_value(plan, "charging_intervals", []) or [] + return [{"ts": ts, "mode": CBB_MODE_HOME_UPS} for ts in legacy] + + +def _collect_mode_overrides( + intervals: List[Any], index_by_minute: Dict[int, int] +) -> tuple[set[int], Dict[int, int]]: + charging_intervals: set[int] = set() + mode_overrides: Dict[int, int] = {} + for interval in intervals: + ts_raw = interval.get("ts") if isinstance(interval, dict) else getattr(interval, "ts", None) + mode_raw = interval.get("mode") if isinstance(interval, dict) else getattr(interval, "mode", None) + ts = _parse_plan_ts(ts_raw) + if ts is None or mode_raw is None: + continue + idx = index_by_minute.get(int(ts.timestamp() // 60)) + if idx is None: + continue + mode = int(mode_raw) + mode_overrides[idx] = mode + if mode == CBB_MODE_HOME_UPS: + charging_intervals.add(idx) + return charging_intervals, mode_overrides + + +def _collect_holding_intervals( + plan: Any, spot_times: List[Optional[datetime]] +) -> set[int]: + holding_intervals: set[int] = set() + holding_start = _parse_plan_ts(_plan_get_value(plan, "holding_start")) + holding_end = _parse_plan_ts(_plan_get_value(plan, "holding_end")) + if not (holding_start and holding_end): + return holding_intervals + for idx, ts in enumerate(spot_times): + if ts and holding_start <= ts < holding_end: + holding_intervals.add(idx) + return holding_intervals + + +class OigCloudBatteryForecastSensor(RestoreEntity, CoordinatorEntity, SensorEntity): + """Zjednodušený senzor pro predikci nabití baterie.""" + + # Shared log throttling across instances (dashboard/API can trigger multiple computations). + _GLOBAL_LOG_LAST_TS: ClassVar[Dict[str, float]] = {} + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + *, + side_effects_enabled: bool = True, + ) -> None: + """Initialize the battery forecast sensor.""" + super().__init__(coordinator) + + sensor_setup_module.initialize_sensor( + self, + coordinator, + sensor_type, + config_entry, + device_info, + hass, + side_effects_enabled=side_effects_enabled, + auto_switch_startup_delay=AUTO_SWITCH_STARTUP_DELAY, + ) + + # Legacy attributes kept for backward compatibility (single planner only). + # NOTE: Single planner only. + + def _log_rate_limited( + self, + key: str, + level: str, + message: str, + *args: Any, + cooldown_s: float = 300.0, + ) -> None: + """Proxy to runtime helpers.""" + sensor_runtime_module.log_rate_limited( + self, _LOGGER, key, level, message, *args, cooldown_s=cooldown_s + ) + + async def async_added_to_hass(self) -> None: # noqa: C901 + """Proxy to lifecycle helpers.""" + await super().async_added_to_hass() + self._hass = self.hass + await sensor_lifecycle_module.async_added_to_hass(self) + + async def async_will_remove_from_hass(self) -> None: + """Při odebrání z HA.""" + sensor_runtime_module.handle_will_remove(self) + await super().async_will_remove_from_hass() + + def _get_config(self) -> Dict[str, Any]: + """Proxy to runtime helpers.""" + return sensor_runtime_module.get_config(self) + + def _handle_coordinator_update(self) -> None: + """Handle coordinator update. + + NEDĚLÁ ŽÁDNÉ VÝPOČTY - forecast se přepočítá: + - Každých 15 min (time scheduler) + - Při startu (delayed 3s initial refresh) + - Manuálně přes service call + """ + # Jen zavolat parent pro refresh HA state (rychlé) + sensor_runtime_module.handle_coordinator_update(self) + + @property + def device_info(self) -> Optional[Dict[str, Any]]: + """Return device info - Analytics Module.""" + return self._device_info + + @property + def state(self) -> Optional[Union[float, str]]: + """ + State = current battery capacity in kWh. + + Dashboard graph needs numeric value to display battery timeline. + + Returns: + Current battery capacity (kWh) or 0 if no data + """ + return sensor_runtime_module.get_state(self) + + @property + def available(self) -> bool: + """Return if sensor is available. + + CRITICAL FIX: Override CoordinatorEntity.available to prevent 'unavailable' state. + Sensor should always be available if it has run at least once (has timeline data). + """ + # If we have timeline data from successful calculation, sensor is available + return sensor_runtime_module.is_available(self) + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Proxy to state attribute helpers.""" + return state_attributes_module.build_extra_state_attributes( + self, debug_expose_baseline_timeline=DEBUG_EXPOSE_BASELINE_TIMELINE + ) + + def _calculate_data_hash(self, timeline_data: List[Dict[str, Any]]) -> str: + """Proxy to state attribute helpers.""" + return state_attributes_module.calculate_data_hash(timeline_data) + + async def async_update(self) -> None: # noqa: C901 + """Proxy to forecast update helpers.""" + await super().async_update() + await forecast_update_module.async_update(self) + + def _simulate_interval( + self, + mode: int, + solar_kwh: float, + load_kwh: float, + battery_soc_kwh: float, + capacity_kwh: float, + hw_min_capacity_kwh: float, + spot_price_czk: float, + export_price_czk: float, + charge_efficiency: float = 0.95, + discharge_efficiency: float = 0.95, + home_charge_rate_kwh_15min: float = 0.7, + planning_min_capacity_kwh: float = None, + ) -> dict: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=battery_soc_kwh, + capacity_kwh=capacity_kwh, + hw_min_capacity_kwh=hw_min_capacity_kwh, + spot_price_czk=spot_price_czk, + export_price_czk=export_price_czk, + charge_efficiency=charge_efficiency, + discharge_efficiency=discharge_efficiency, + home_charge_rate_kwh_15min=home_charge_rate_kwh_15min, + planning_min_capacity_kwh=planning_min_capacity_kwh, + ) + + def _calculate_interval_cost( + self, + simulation_result: Dict[str, Any], + spot_price: float, + export_price: float, + time_of_day: str, + ) -> Dict[str, Any]: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.calculate_interval_cost( + simulation_result, + spot_price, + export_price, + time_of_day, + ) + + def _calculate_fixed_mode_cost( + self, + fixed_mode: int, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + physical_min_capacity: float | None = None, + ) -> float: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.calculate_fixed_mode_cost( + self, + fixed_mode=fixed_mode, + current_capacity=current_capacity, + max_capacity=max_capacity, + min_capacity=min_capacity, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + physical_min_capacity=physical_min_capacity, + ) + + def _calculate_mode_baselines( + self, + current_capacity: float, + max_capacity: float, + physical_min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + ) -> Dict[str, Dict[str, Any]]: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.calculate_mode_baselines( + self, + current_capacity=current_capacity, + max_capacity=max_capacity, + physical_min_capacity=physical_min_capacity, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ) + + def _calculate_do_nothing_cost( + self, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + ) -> float: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.calculate_do_nothing_cost( + self, + current_capacity=current_capacity, + max_capacity=max_capacity, + min_capacity=min_capacity, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ) + + def _calculate_full_ups_cost( + self, + current_capacity: float, + max_capacity: float, + min_capacity: float, + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + ) -> float: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.calculate_full_ups_cost( + self, + current_capacity=current_capacity, + max_capacity=max_capacity, + min_capacity=min_capacity, + spot_prices=spot_prices, + export_prices=export_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + ) + + def _create_mode_recommendations( + self, optimal_timeline: List[Dict[str, Any]], hours_ahead: int = 48 + ) -> List[Dict[str, Any]]: + """Vytvořit user-friendly doporučení režimů pro DNES a ZÍTRA.""" + return mode_recommendations_module.create_mode_recommendations( + optimal_timeline, + hours_ahead=hours_ahead, + mode_home_i=CBB_MODE_HOME_I, + mode_home_ii=CBB_MODE_HOME_II, + mode_home_iii=CBB_MODE_HOME_III, + mode_home_ups=CBB_MODE_HOME_UPS, + ) + + def _generate_alternatives( # noqa: C901 + self, + spot_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + optimal_cost_48h: float, + current_capacity: float, + max_capacity: float, + efficiency: float, + ) -> Dict[str, Dict[str, Any]]: + """Proxy to scenario analysis helpers.""" + return scenario_analysis_module.generate_alternatives( + self, + spot_prices=spot_prices, + solar_forecast=solar_forecast, + load_forecast=load_forecast, + optimal_cost_48h=optimal_cost_48h, + current_capacity=current_capacity, + max_capacity=max_capacity, + efficiency=efficiency, + ) + + def _update_balancing_plan_snapshot(self, plan: Optional[Dict[str, Any]]) -> None: + """Proxy to balancing helpers.""" + balancing_helpers_module.update_balancing_plan_snapshot(self, plan) + + def _get_total_battery_capacity(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_total_battery_capacity(self) + + def _get_current_battery_soc_percent(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_current_battery_soc_percent(self) + + def _get_current_battery_capacity(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_current_battery_capacity(self) + + def _get_max_battery_capacity(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_max_battery_capacity(self) + + def _get_min_battery_capacity(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_min_battery_capacity(self) + + def _get_target_battery_capacity(self) -> Optional[float]: + """Proxy to battery state helpers.""" + return battery_state_module.get_target_battery_capacity(self) + + async def _maybe_fix_daily_plan(self) -> None: # noqa: C901 + """Proxy to plan storage helpers.""" + await plan_storage_module.maybe_fix_daily_plan(self) + + async def _load_plan_from_storage(self, date_str: str) -> Optional[Dict[str, Any]]: + """Proxy to plan storage helpers.""" + return await plan_storage_module.load_plan_from_storage(self, date_str) + + async def _save_plan_to_storage( + self, + date_str: str, + intervals: List[Dict[str, Any]], + metadata: Optional[Dict[str, Any]] = None, + ) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.save_plan_to_storage( + self, date_str, intervals, metadata + ) + + async def _plan_exists_in_storage(self, date_str: str) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.plan_exists_in_storage(self, date_str) + + def _is_baseline_plan_invalid(self, plan: Optional[Dict[str, Any]]) -> bool: + """Proxy to plan storage helpers.""" + return plan_storage_module.is_baseline_plan_invalid(plan) + + async def _create_baseline_plan(self, date_str: str) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.create_baseline_plan(self, date_str) + + async def ensure_plan_exists(self, date_str: str) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.ensure_plan_exists(self, date_str) + + async def _aggregate_daily(self, date_str: str) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.aggregate_daily(self, date_str) + + async def _aggregate_weekly( + self, week_str: str, start_date: str, end_date: str + ) -> bool: + """Proxy to plan storage helpers.""" + return await plan_storage_module.aggregate_weekly( + self, week_str, start_date, end_date + ) + + async def _precompute_ui_data(self) -> None: + """ + Precompute UI data (detail_tabs + unified_cost_tile) and save to storage. + + PHASE 3.5: Performance Optimization + - Called every 15 min after forecast update + - Saves precomputed data to ~/.storage/oig_cloud_precomputed_data_{box_id}.json + - API endpoints read from storage → instant response (< 100ms) + - Eliminates 4s wait time for build_detail_tabs() + build_unified_cost_tile() + """ + await precompute_module.precompute_ui_data(self) + + def _schedule_precompute(self, force: bool = False) -> None: + """Schedule precompute job with throttling.""" + precompute_module.schedule_precompute(self, force=force) + + async def build_timeline_extended(self) -> Dict[str, Any]: + """ + Postavit rozšířenou timeline strukturu pro API. + + Phase 2.9: Timeline Extended Builder + - Kombinuje historická data (včera) + mixed (dnes) + plánovaná (zítra) + - Používá daily_plan_state pro historical tracking + - Používá plánovač pro planned data + - PHASE 3.0: Načítá Storage Helper data pro včerejší baseline plan + + Returns: + Dict s yesterday/today/tomorrow sekcemi + today_tile_summary + """ + return await timeline_extended_module.build_timeline_extended( + self, mode_names=CBB_MODE_NAMES + ) + + async def _build_day_timeline( + self, day: date, storage_plans: Optional[Dict[str, Any]] = None + ) -> Dict[str, Any]: + return await timeline_extended_module.build_day_timeline( + self, day, storage_plans, mode_names=CBB_MODE_NAMES + ) + + async def build_detail_tabs( + self, tab: Optional[str] = None, plan: str = "hybrid" + ) -> Dict[str, Any]: + """ + Build Detail Tabs data (aggregated mode blocks). + """ + return await detail_tabs_module.build_detail_tabs( + self, tab=tab, plan=plan, mode_names=CBB_MODE_NAMES + ) + + def _decorate_plan_tabs( + self, + primary_tabs: Dict[str, Any], + secondary_tabs: Dict[str, Any], + primary_plan: str, + secondary_plan: str, + ) -> Dict[str, Any]: + """Proxy to plan tab helpers.""" + return plan_tabs_module.decorate_plan_tabs( + primary_tabs, secondary_tabs, primary_plan, secondary_plan + ) + + def _schedule_forecast_retry(self, delay_seconds: float) -> None: + """Proxy to task helpers.""" + task_utils_module.schedule_forecast_retry(self, delay_seconds) + + def _create_task_threadsafe(self, coro_func, *args) -> None: + """Proxy to task helpers.""" + task_utils_module.create_task_threadsafe(self, coro_func, *args) + + async def build_unified_cost_tile(self) -> Dict[str, Any]: + """ + Build Unified Cost Tile data. + + Phase V2: PLAN_VS_ACTUAL_UX_REDESIGN_V2.md - Fáze 1 (UCT-BE-001 až UCT-BE-004) + Consolidates 2 cost tiles into one with today/yesterday/tomorrow context. + + Cache: 60s TTL - prevents repeated slow API calls on page refresh. + + Returns: + Dict with today/yesterday/tomorrow cost data: + { + "today": { + "plan_total_cost": 45.50, + "actual_total_cost": 42.30, + "delta": -3.20, + "performance": "better", # better/worse/on_plan + "completed_intervals": 32, + "total_intervals": 96, + "progress_pct": 33, + "eod_prediction": { + "predicted_total": 128.50, + "vs_plan": -4.50, + "confidence": "medium" + } + }, + "yesterday": { + "plan_total_cost": 125.00, + "actual_total_cost": 118.50, + "delta": -6.50, + "performance": "better" + }, + "tomorrow": { + "plan_total_cost": 135.00 + } + } + """ + return await unified_cost_tile_module.build_unified_cost_tile( + self, mode_names=CBB_MODE_NAMES + ) + + def _group_intervals_by_mode( + self, intervals: List[Dict[str, Any]], data_type: str = "both" + ) -> List[Dict[str, Any]]: + """Proxy to interval grouping helpers.""" + return interval_grouping_module.group_intervals_by_mode( + intervals, data_type=data_type, mode_names=CBB_MODE_NAMES + ) + + async def _backfill_daily_archive_from_storage(self) -> None: + """Proxy to plan storage helpers.""" + await plan_storage_module.backfill_daily_archive_from_storage(self) + + def _get_battery_efficiency(self) -> float: + """Proxy to battery state helpers.""" + return battery_state_module.get_battery_efficiency(self) + + def _get_ac_charging_limit_kwh_15min(self) -> float: + """Proxy to battery state helpers.""" + return battery_state_module.get_ac_charging_limit_kwh_15min(self) + + def _get_current_mode(self) -> int: + """Proxy to battery state helpers.""" + return battery_state_module.get_current_mode(self) + + def _get_boiler_available_capacity(self) -> float: + """Proxy to battery state helpers.""" + return battery_state_module.get_boiler_available_capacity(self) + + def _calculate_final_spot_price( + self, raw_spot_price: float, target_datetime: datetime + ) -> float: + """Proxy to pricing helpers.""" + return pricing_module.calculate_final_spot_price( + self, raw_spot_price, target_datetime + ) + + async def _get_spot_price_timeline(self) -> List[Dict[str, Any]]: + """Proxy to pricing helpers.""" + return await pricing_module.get_spot_price_timeline(self) + + async def _get_export_price_timeline(self) -> List[Dict[str, Any]]: + """Proxy to pricing helpers.""" + return await pricing_module.get_export_price_timeline(self) + + def _get_spot_data_from_price_sensor( + self, *, price_type: str + ) -> Optional[Dict[str, Any]]: + """Proxy to pricing helpers.""" + return pricing_module.get_spot_data_from_price_sensor( + self, price_type=price_type + ) + + async def _get_spot_data_from_ote_cache(self) -> Optional[Dict[str, Any]]: + """Proxy to pricing helpers.""" + return await pricing_module.get_spot_data_from_ote_cache(self) + + def _get_solar_forecast(self) -> Dict[str, Any]: + """Proxy to solar forecast helpers.""" + return solar_forecast_module.get_solar_forecast(self) + + def _get_solar_forecast_strings(self) -> Dict[str, Any]: + """Proxy to solar forecast helpers.""" + return solar_forecast_module.get_solar_forecast_strings(self) + + def _get_balancing_plan(self) -> Optional[Dict[str, Any]]: + """Proxy to balancing helpers.""" + return balancing_helpers_module.get_balancing_plan(self) + + def _build_strategy_balancing_plan( + self, + spot_prices: List[Dict[str, Any]], + plan: Optional[Any], + ) -> Optional[Any]: + """Build strategy-layer balancing plan from BalancingManager output.""" + if not plan: + return None + + try: + from ..strategy.balancing import StrategyBalancingPlan + + is_active = bool(_plan_get_value(plan, "active", True)) + if not is_active: + return None + + spot_times, index_by_minute = _build_spot_index(spot_prices) + intervals = _normalize_plan_intervals(plan) + charging_intervals, mode_overrides = _collect_mode_overrides( + intervals, index_by_minute + ) + holding_intervals = _collect_holding_intervals(plan, spot_times) + + return StrategyBalancingPlan( + charging_intervals=charging_intervals, + holding_intervals=holding_intervals, + mode_overrides=mode_overrides, + is_active=is_active, + ) + except Exception as err: + _LOGGER.debug("Failed to build strategy balancing plan: %s", err) + return None + + async def plan_balancing( + self, + requested_start: datetime, + requested_end: datetime, + target_soc: float, + mode: str, + ) -> Dict[str, Any]: + """Proxy to balancing helpers.""" + return await balancing_helpers_module.plan_balancing( + self, requested_start, requested_end, target_soc, mode + ) + + def _get_load_avg_sensors(self) -> Dict[str, Any]: + """Proxy to load profile helpers.""" + return load_profiles_module.get_load_avg_sensors(self) + + def _economic_charging_plan( + self, + timeline_data: List[Dict[str, Any]], + min_capacity_kwh: float, + effective_minimum_kwh: float, + target_capacity_kwh: float, + max_charging_price: float, + min_savings_margin: float, + charging_power_kw: float, + max_capacity: float, + target_reason: str = "default", + ) -> List[Dict[str, Any]]: + """Proxy to charging helpers.""" + return charging_helpers_module.economic_charging_plan( + self, + timeline_data=timeline_data, + min_capacity_kwh=min_capacity_kwh, + effective_minimum_kwh=effective_minimum_kwh, + target_capacity_kwh=target_capacity_kwh, + max_charging_price=max_charging_price, + min_savings_margin=min_savings_margin, + charging_power_kw=charging_power_kw, + max_capacity=max_capacity, + iso_tz_offset=ISO_TZ_OFFSET, + target_reason=target_reason, + ) + + def _smart_charging_plan( + self, + timeline: List[Dict[str, Any]], + min_capacity: float, + target_capacity: float, + max_price: float, + charging_power_kw: float, + max_capacity: float, + ) -> List[Dict[str, Any]]: + """Proxy to charging helpers.""" + return charging_helpers_module.smart_charging_plan( + self, + timeline=timeline, + min_capacity=min_capacity, + target_capacity=target_capacity, + max_price=max_price, + charging_power_kw=charging_power_kw, + max_capacity=max_capacity, + ) diff --git a/custom_components/oig_cloud/battery_forecast/sensors/recommended_sensor.py b/custom_components/oig_cloud/battery_forecast/sensors/recommended_sensor.py new file mode 100644 index 00000000..26604054 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/recommended_sensor.py @@ -0,0 +1,671 @@ +"""Planner recommended mode sensor extracted from legacy battery forecast.""" + +from __future__ import annotations + +import asyncio +import json +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +from homeassistant.components.sensor import SensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import EntityCategory +from homeassistant.core import HomeAssistant +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.storage import Store +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +from ...const import DOMAIN + +_LOGGER = logging.getLogger(__name__) +HOME_1_LABEL = "Home 1" +HOME_2_LABEL = "Home 2" +HOME_3_LABEL = "Home 3" +MIN_RECOMMENDED_INTERVAL_MINUTES = 30 +MODE_LABEL_HOME_UPS = "Home UPS" + + +def _normalize_mode_from_name(mode_name: Optional[str]) -> Optional[str]: + if not mode_name: + return None + stripped = str(mode_name).strip() + upper = stripped.upper() + label_map = { + "HOME I": HOME_1_LABEL, + "HOME II": HOME_2_LABEL, + "HOME III": HOME_3_LABEL, + "HOME UPS": MODE_LABEL_HOME_UPS, + } + if stripped in label_map.values(): + return stripped + if upper in label_map: + return label_map[upper] + if upper.startswith("HOME "): + suffix = upper.replace("HOME ", "").strip() + digit_map = { + "1": HOME_1_LABEL, + "2": HOME_2_LABEL, + "3": HOME_3_LABEL, + } + if suffix in digit_map: + return digit_map[suffix] + for key, label in label_map.items(): + if key in upper: + return label # pragma: no cover + if "UPS" in upper: + return MODE_LABEL_HOME_UPS # pragma: no cover + return None + + +def _normalize_mode_from_code(mode_code: Optional[int]) -> Optional[str]: + if not isinstance(mode_code, int): + return None + code_map = { + 0: HOME_1_LABEL, + 1: HOME_2_LABEL, + 2: HOME_3_LABEL, + 3: MODE_LABEL_HOME_UPS, + } + return code_map.get(mode_code) + + +def _build_precomputed_payload(precomputed: Dict[str, Any]) -> Optional[Dict[str, Any]]: + timeline = precomputed.get("timeline") or precomputed.get("timeline_hybrid") + if not isinstance(timeline, list) or not timeline: + return None + detail_tabs = precomputed.get("detail_tabs") or precomputed.get("detail_tabs_hybrid") + return { + "timeline_data": timeline, + "calculation_time": precomputed.get("last_update"), + "detail_tabs": detail_tabs if isinstance(detail_tabs, dict) else None, + } + + +class OigCloudPlannerRecommendedModeSensor( + RestoreEntity, CoordinatorEntity, SensorEntity +): + """Text sensor exposing the planner's recommended mode for the current interval.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + ) -> None: + super().__init__(coordinator) + self._sensor_type = sensor_type + self._config_entry = config_entry + self._hass: Optional[HomeAssistant] = hass or getattr(coordinator, "hass", None) + self._attr_device_info = device_info + + from ...sensor_types import SENSOR_TYPES + + self._config = SENSOR_TYPES.get(sensor_type, {}) + + try: + from ...entities.base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + + self._precomputed_store: Optional[Store] = None + self._precomputed_payload: Optional[Dict[str, Any]] = None + if self._hass: + self._precomputed_store = Store( + self._hass, + version=1, + key=f"oig_cloud.precomputed_data_{self._box_id}", + ) + + self._attr_unique_id = f"oig_cloud_{self._box_id}_{sensor_type}" + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + name_cs = self._config.get("name_cs") + name_en = self._config.get("name") + self._attr_name = name_cs or name_en or sensor_type + self._attr_icon = self._config.get("icon", "mdi:robot") + self._attr_native_unit_of_measurement = None + self._attr_device_class = None + self._attr_state_class = None + + entity_category = self._config.get("entity_category") + if entity_category: + self._attr_entity_category = EntityCategory(entity_category) + + self._attr_native_value: Optional[str] = None + self._attr_extra_state_attributes: Dict[str, Any] = {} + self._last_signature: Optional[str] = None + self._unsubs: list[callable] = [] + + async def _async_refresh_precomputed_payload(self) -> None: + precomputed = await self._load_precomputed() + if not precomputed: + return + payload = _build_precomputed_payload(precomputed) + if payload: + self._precomputed_payload = payload + + async def _load_precomputed(self) -> Optional[Dict[str, Any]]: + if not self._precomputed_store: + return None + try: + precomputed = await self._precomputed_store.async_load() + except Exception: + return None + if not isinstance(precomputed, dict): + return None + return precomputed + + def _get_forecast_payload(self) -> Optional[Dict[str, Any]]: + # Prefer precomputed payload to stay aligned with detail_tabs output. + if isinstance(self._precomputed_payload, dict): + return self._precomputed_payload + data = getattr(self.coordinator, "battery_forecast_data", None) + if isinstance(data, dict) and isinstance(data.get("timeline_data"), list): + return data + return None + + def _parse_local_start(self, ts: Any) -> Optional[datetime]: + if not ts: + return None + try: + dt_obj = dt_util.parse_datetime(str(ts)) or datetime.fromisoformat(str(ts)) + except Exception: + return None + if dt_obj.tzinfo is None: + return dt_obj.replace(tzinfo=dt_util.DEFAULT_TIME_ZONE) + return dt_util.as_local(dt_obj) + + def _parse_interval_time( + self, ts: Any, date_hint: Optional[str] = None + ) -> Optional[datetime]: + if not ts: + return None + ts_str = str(ts) + if "T" not in ts_str and date_hint: + ts_str = f"{date_hint}T{ts_str}:00" + return self._parse_local_start(ts_str) + + def _normalize_mode_label( + self, mode_name: Optional[str], mode_code: Optional[int] + ) -> Optional[str]: + label = _normalize_mode_from_name(mode_name) + if label: + return label + return _normalize_mode_from_code(mode_code) + + def _planned_mode_from_interval( + self, interval: Dict[str, Any] + ) -> tuple[Optional[str], Optional[int]]: + planned = interval.get("planned") or {} + mode_label = self._normalize_mode_label( + planned.get("mode_name"), planned.get("mode") + ) + mode_code = planned.get("mode") if isinstance(planned.get("mode"), int) else None + return mode_label, mode_code + + def _mode_from_interval( + self, interval: Dict[str, Any] + ) -> tuple[Optional[str], Optional[int]]: + mode_label = self._normalize_mode_label( + interval.get("mode_name"), interval.get("mode") + ) + mode_code = interval.get("mode") if isinstance(interval.get("mode"), int) else None + return mode_label, mode_code + + def _parse_interval_start( + self, item: Dict[str, Any], date_hint: Optional[str], *, planned: bool + ) -> Optional[datetime]: + time_value = item.get("time") or item.get("timestamp") + if planned: + return self._parse_interval_time(time_value, date_hint) + return self._parse_local_start(time_value) + + def _find_current_interval( + self, + intervals: list[Dict[str, Any]], + now: datetime, + date_hint: Optional[str], + *, + planned: bool, + ) -> tuple[Optional[int], Optional[datetime], Optional[str], Optional[int]]: + current_idx: Optional[int] = None + current_mode: Optional[str] = None + current_mode_code: Optional[int] = None + current_start: Optional[datetime] = None + + for i, item in enumerate(intervals): + start = self._parse_interval_start(item, date_hint, planned=planned) + if not start: + continue + + mode_label, mode_code = self._interval_mode(item, planned=planned) + if planned and not mode_label: + continue + + match, current_idx, current_start, current_mode, current_mode_code = ( + self._update_current_candidate( + now=now, + index=i, + start=start, + mode_label=mode_label, + mode_code=mode_code, + current_idx=current_idx, + current_start=current_start, + current_mode=current_mode, + current_mode_code=current_mode_code, + ) + ) + if match: + return current_idx, current_start, current_mode, current_mode_code + if start > now and current_idx is not None: + break + + return current_idx, current_start, current_mode, current_mode_code + + def _interval_mode( + self, item: Dict[str, Any], *, planned: bool + ) -> tuple[Optional[str], Optional[int]]: + return ( + self._planned_mode_from_interval(item) + if planned + else self._mode_from_interval(item) + ) + + def _update_current_candidate( + self, + *, + now: datetime, + index: int, + start: datetime, + mode_label: Optional[str], + mode_code: Optional[int], + current_idx: Optional[int], + current_start: Optional[datetime], + current_mode: Optional[str], + current_mode_code: Optional[int], + ) -> tuple[ + bool, + Optional[int], + Optional[datetime], + Optional[str], + Optional[int], + ]: + end = start + timedelta(minutes=15) + if start <= now < end: + return True, index, start, mode_label, mode_code + if start <= now: + return False, index, start, mode_label, mode_code + return False, current_idx, current_start, current_mode, current_mode_code + + def _find_next_change( + self, + intervals: list[Dict[str, Any]], + current_idx: int, + current_mode: str, + current_start: datetime, + date_hint: Optional[str], + *, + planned: bool, + ) -> tuple[Optional[datetime], Optional[str], Optional[int]]: + for item in intervals[current_idx + 1 :]: + start = self._parse_interval_start(item, date_hint, planned=planned) + if not start: + continue + if not self._interval_after_min_gap(start, current_start): + continue + mode_label, mode_code = ( + self._planned_mode_from_interval(item) + if planned + else self._mode_from_interval(item) + ) + if mode_label and mode_label != current_mode: + return start, mode_label, mode_code + return None, None, None + + @staticmethod + def _interval_after_min_gap(start: datetime, current_start: datetime) -> bool: + return start >= current_start + timedelta(minutes=MIN_RECOMMENDED_INTERVAL_MINUTES) + + def _get_auto_switch_lead_seconds( + self, from_mode: Optional[str], to_mode: Optional[str] + ) -> float: + fallback = 180.0 + if self._config_entry and self._config_entry.options: + fallback = float( + self._config_entry.options.get( + "auto_mode_switch_lead_seconds", + self._config_entry.options.get( + "autonomy_switch_lead_seconds", 180.0 + ), + ) + ) + if not from_mode or not to_mode or not self._hass or not self._config_entry: + return fallback + try: + entry = self._hass.data.get(DOMAIN, {}).get(self._config_entry.entry_id, {}) + service_shield = entry.get("service_shield") + mode_tracker = getattr(service_shield, "mode_tracker", None) + if not mode_tracker: + return fallback + offset_seconds = mode_tracker.get_offset_for_scenario(from_mode, to_mode) + if offset_seconds is None or offset_seconds <= 0: + return fallback + return float(offset_seconds) + except Exception: + return fallback + + def _compute_state_and_attrs(self) -> tuple[Optional[str], Dict[str, Any], str]: + """Compute recommended mode + attributes and return signature for change detection.""" + attrs: Dict[str, Any] = {} + payload = self._get_forecast_payload() or {} + detail_intervals, detail_date, timeline = self._extract_payload_intervals(payload) + attrs["last_update"] = payload.get("calculation_time") + + source_intervals, planned_detail = self._resolve_source_intervals( + detail_intervals, timeline + ) + attrs["points_count"] = ( + len(source_intervals) if isinstance(source_intervals, list) else 0 + ) + + if not isinstance(source_intervals, list) or not source_intervals: + sig = json.dumps({"v": None, "a": attrs}, sort_keys=True, default=str) + return None, attrs, sig + + now = dt_util.now() + current_idx, current_start, current_mode, current_mode_code = ( + self._resolve_current_interval( + source_intervals=source_intervals, + detail_intervals=detail_intervals or [], + detail_date=detail_date, + now=now, + planned_detail=planned_detail, + timeline=timeline, + ) + ) + + attrs["recommended_interval_start"] = ( + current_start.isoformat() if isinstance(current_start, datetime) else None + ) + + next_change_at, next_mode, next_mode_code = self._compute_next_change( + source_intervals=source_intervals, + detail_intervals=detail_intervals or [], + detail_date=detail_date, + planned_detail=planned_detail, + current_idx=current_idx, + current_mode=current_mode, + current_start=current_start, + ) + + attrs["next_mode_change_at"] = ( + next_change_at.isoformat() if next_change_at else None + ) + attrs["next_mode"] = next_mode + attrs["next_mode_code"] = next_mode_code + + effective_mode = current_mode + effective_mode_code = current_mode_code + lead_seconds: Optional[float] = 0.0 + effective_from: Optional[datetime] = None + if next_change_at and next_mode and current_mode: + lead_seconds = self._get_auto_switch_lead_seconds(current_mode, next_mode) + if lead_seconds and lead_seconds > 0: + effective_from = next_change_at - timedelta(seconds=lead_seconds) + else: + lead_seconds = 0.0 + + attrs["planned_interval_mode"] = current_mode + attrs["planned_interval_mode_code"] = current_mode_code + attrs["recommended_mode"] = effective_mode + attrs["recommended_mode_code"] = effective_mode_code + attrs["recommended_effective_from"] = ( + effective_from.isoformat() if effective_from else None + ) + attrs["auto_switch_lead_seconds"] = lead_seconds + + sig = self._build_signature( + effective_mode, + effective_mode_code, + current_mode, + current_mode_code, + attrs, + next_mode, + next_mode_code, + lead_seconds, + ) + return effective_mode, attrs, sig + + def _compute_next_change( + self, + *, + source_intervals: list[Dict[str, Any]], + detail_intervals: list[Dict[str, Any]], + detail_date: Optional[str], + planned_detail: bool, + current_idx: Optional[int], + current_mode: Optional[str], + current_start: Optional[datetime], + ) -> tuple[Optional[datetime], Optional[str], Optional[int]]: + if ( + current_idx is None + or not current_mode + or not isinstance(current_start, datetime) + ): + return None, None, None # pragma: no cover + + return self._resolve_next_change( + source_intervals=source_intervals, + detail_intervals=detail_intervals, + detail_date=detail_date, + planned_detail=planned_detail, + current_idx=current_idx, + current_mode=current_mode, + current_start=current_start, + ) + + def _build_signature( + self, + effective_mode: Optional[str], + effective_mode_code: Optional[int], + current_mode: Optional[str], + current_mode_code: Optional[int], + attrs: Dict[str, Any], + next_mode: Optional[str], + next_mode_code: Optional[int], + lead_seconds: Optional[float], + ) -> str: + payload = { + "v": effective_mode, + "c": effective_mode_code, + "cv": current_mode, + "cc": current_mode_code, + "s": attrs.get("recommended_interval_start"), + "n": attrs.get("next_mode_change_at"), + "nv": next_mode, + "nc": next_mode_code, + "ef": attrs.get("recommended_effective_from"), + "ls": lead_seconds, + "lu": attrs.get("last_update"), + "pc": attrs.get("points_count"), + } + return json.dumps(payload, sort_keys=True, default=str) + + def _extract_payload_intervals( + self, payload: Dict[str, Any] + ) -> tuple[Optional[list[Dict[str, Any]]], Optional[str], Any]: + detail_tabs = ( + payload.get("detail_tabs") + if isinstance(payload.get("detail_tabs"), dict) + else None + ) + timeline = payload.get("timeline_data") + detail_intervals: Optional[list[Dict[str, Any]]] = None + detail_date: Optional[str] = None + if isinstance(detail_tabs, dict): + today_tab = detail_tabs.get("today") or {} + if isinstance(today_tab, dict): + detail_intervals = today_tab.get("intervals") + detail_date = today_tab.get("date") + return detail_intervals, detail_date, timeline + + def _resolve_source_intervals( + self, + detail_intervals: Optional[list[Dict[str, Any]]], + timeline: Any, + ) -> tuple[Any, bool]: + planned_detail = bool(detail_intervals and isinstance(detail_intervals, list)) + if planned_detail: + return detail_intervals, True + return timeline, False + + def _resolve_current_interval( + self, + *, + source_intervals: list[Dict[str, Any]], + detail_intervals: list[Dict[str, Any]], + detail_date: Optional[str], + now: datetime, + planned_detail: bool, + timeline: Any, + ) -> tuple[Optional[int], Optional[datetime], Optional[str], Optional[int]]: + if planned_detail: + current_idx, current_start, current_mode, current_mode_code = ( + self._find_current_interval( + detail_intervals, + now, + detail_date, + planned=True, + ) + ) + if current_mode is None and isinstance(timeline, list): + return self._find_current_interval( + timeline, + now, + detail_date, + planned=False, + ) + return current_idx, current_start, current_mode, current_mode_code + + return self._find_current_interval( + source_intervals, + now, + None, + planned=False, + ) + + def _resolve_next_change( + self, + *, + source_intervals: list[Dict[str, Any]], + detail_intervals: list[Dict[str, Any]], + detail_date: Optional[str], + planned_detail: bool, + current_idx: int, + current_mode: str, + current_start: datetime, + ) -> tuple[Optional[datetime], Optional[str], Optional[int]]: + if planned_detail: + return self._find_next_change( + detail_intervals, + current_idx, + current_mode, + current_start, + detail_date, + planned=True, + ) + + return self._find_next_change( + source_intervals, + current_idx, + current_mode, + current_start, + None, + planned=False, + ) + + async def _async_recompute(self) -> None: + try: + await self._async_refresh_precomputed_payload() + value, attrs, sig = self._compute_state_and_attrs() + if sig == self._last_signature: + return + self._last_signature = sig + self._attr_native_value = value + self._attr_extra_state_attributes = attrs + if self.hass: + self.async_write_ha_state() + except Exception: + return + + async def async_added_to_hass(self) -> None: + await super().async_added_to_hass() + if not self._precomputed_store and self.hass: + self._precomputed_store = Store( + self.hass, + version=1, + key=f"oig_cloud.precomputed_data_{self._box_id}", + ) + + from homeassistant.helpers.dispatcher import async_dispatcher_connect + from homeassistant.helpers.event import async_track_time_change + + signal_name = f"oig_cloud_{self._box_id}_forecast_updated" + + async def _on_forecast_updated() -> None: + await asyncio.sleep(0) + if self.hass: + self.hass.async_create_task(self._async_recompute()) + + try: + self._unsubs.append( + async_dispatcher_connect(self.hass, signal_name, _on_forecast_updated) + ) + except Exception: # nosec B110 + pass + + async def _on_tick(_now: datetime) -> None: + await asyncio.sleep(0) + self.hass.async_create_task(self._async_recompute()) + + try: + for minute in [0, 15, 30, 45]: + self._unsubs.append( + async_track_time_change( + self.hass, _on_tick, minute=minute, second=2 + ) + ) + except Exception: # nosec B110 + pass + + await self._async_recompute() + + async def async_will_remove_from_hass(self) -> None: + for unsub in getattr(self, "_unsubs", []) or []: + try: + unsub() + except Exception: # nosec B110 + pass + self._unsubs = [] + await super().async_will_remove_from_hass() + + @property + def available(self) -> bool: + return bool(self._attr_extra_state_attributes.get("points_count")) + + @property + def native_value(self) -> Optional[str]: + return self._attr_native_value + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + return dict(self._attr_extra_state_attributes) + + def _handle_coordinator_update(self) -> None: + return diff --git a/custom_components/oig_cloud/battery_forecast/sensors/sensor_lifecycle.py b/custom_components/oig_cloud/battery_forecast/sensors/sensor_lifecycle.py new file mode 100644 index 00000000..ac978779 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/sensor_lifecycle.py @@ -0,0 +1,271 @@ +"""Lifecycle helpers for battery forecast sensor.""" + +from __future__ import annotations + +import asyncio +import copy +import json +import logging +from datetime import timedelta + +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +from ..planning import auto_switch as auto_switch_module + +_LOGGER = logging.getLogger(__name__) +DATE_FMT = "%Y-%m-%d" + + +async def async_added_to_hass(sensor) -> None: + """Pri pridani do HA - restore persistent data.""" + _ensure_storage_helpers(sensor) + _maybe_start_auto_switch(sensor) + await _restore_precomputed(sensor) + + last_state = await sensor.async_get_last_state() + _restore_active_plan(sensor, last_state) + _LOGGER.debug("Sensor initialized - storage plans will load on-demand via API") + + await _load_daily_archive(sensor) + await _backfill_daily_archive(sensor) + _restore_daily_plan_state(sensor, last_state) + _LOGGER.debug("Historical data will load on-demand via API (not at startup)") + + _schedule_forecast_refresh(sensor) + _subscribe_profiles(sensor) + _schedule_initial_refresh(sensor) + _schedule_aggregations(sensor) + + +def _ensure_storage_helpers(sensor) -> None: + if not sensor._plans_store and sensor._hass: + sensor._plans_store = Store( + sensor._hass, + version=1, + key=f"oig_cloud.battery_plans_{sensor._box_id}", + ) + _LOGGER.info( + " Retry: Initialized Storage Helper: oig_cloud.battery_plans_%s", + sensor._box_id, + ) + + if not sensor._precomputed_store and sensor._hass: + sensor._precomputed_store = Store( + sensor._hass, + version=1, + key=f"oig_cloud.precomputed_data_{sensor._box_id}", + ) + _LOGGER.info( + " Retry: Initialized Precomputed Data Storage: oig_cloud.precomputed_data_%s", + sensor._box_id, + ) + + +def _maybe_start_auto_switch(sensor) -> None: + if not auto_switch_module.auto_mode_switch_enabled(sensor): + return + auto_switch_module.start_auto_switch_watchdog(sensor) + if sensor._side_effects_enabled: + sensor._create_task_threadsafe( + auto_switch_module.update_auto_switch_schedule, sensor + ) + + +async def _restore_precomputed(sensor) -> None: + if not sensor._precomputed_store: + return # pragma: no cover + try: + precomputed = await sensor._precomputed_store.async_load() or {} + timeline = precomputed.get("timeline_hybrid") + last_update = precomputed.get("last_update") + if isinstance(timeline, list) and timeline: + sensor._timeline_data = timeline + setattr(sensor, "_hybrid_timeline", copy.deepcopy(timeline)) + sensor._last_update = _parse_last_update(last_update) + sensor._data_hash = sensor._calculate_data_hash(sensor._timeline_data) + sensor.async_write_ha_state() + _LOGGER.debug( + "[BatteryForecast] Restored timeline from storage (%d points)", + len(sensor._timeline_data), + ) + except Exception as err: + _LOGGER.debug("[BatteryForecast] Failed to restore precomputed data: %s", err) + + +def _parse_last_update(last_update: str | None): + if isinstance(last_update, str) and last_update: + try: + parsed = dt_util.parse_datetime(last_update) + return parsed or dt_util.dt.datetime.fromisoformat(last_update) + except Exception: + return dt_util.now() + return dt_util.now() # pragma: no cover + + +def _restore_active_plan(sensor, last_state) -> None: + if not last_state or not last_state.attributes: + return # pragma: no cover + if "active_plan_data" not in last_state.attributes: + return # pragma: no cover + try: + plan_json = last_state.attributes.get("active_plan_data") + if plan_json: + sensor._active_charging_plan = json.loads(plan_json) + sensor._plan_status = last_state.attributes.get("plan_status", "pending") + if sensor._active_charging_plan: + _LOGGER.info( + " Restored charging plan: requester=%s, status=%s", + sensor._active_charging_plan.get("requester", "unknown"), + sensor._plan_status, + ) + except (json.decoder.JSONDecodeError, TypeError) as err: + _LOGGER.warning("Failed to restore charging plan: %s", err) + + +async def _load_daily_archive(sensor) -> None: + if not sensor._plans_store: + return # pragma: no cover + try: + storage_data = await sensor._plans_store.async_load() or {} + if "daily_archive" in storage_data: + sensor._daily_plans_archive = storage_data["daily_archive"] + _LOGGER.info( + " Restored daily plans archive from storage: %s days", + len(sensor._daily_plans_archive), + ) + else: + _LOGGER.info("No daily archive in storage - will backfill from history") + except Exception as err: + _LOGGER.warning("Failed to load daily plans archive from storage: %s", err) + + +async def _backfill_daily_archive(sensor) -> None: + if not sensor._plans_store or len(sensor._daily_plans_archive) >= 3: + return # pragma: no cover + try: + _LOGGER.info(" Backfilling daily plans archive from storage...") + await sensor._backfill_daily_archive_from_storage() + except Exception as err: + _LOGGER.warning("Failed to backfill daily archive: %s", err) + + +def _restore_daily_plan_state(sensor, last_state) -> None: + if not last_state or not last_state.attributes: + return # pragma: no cover + if "daily_plan_state" not in last_state.attributes: + return # pragma: no cover + try: + daily_plan_json = last_state.attributes.get("daily_plan_state") + if daily_plan_json: + sensor._daily_plan_state = json.loads(daily_plan_json) + actual_count = len(sensor._daily_plan_state.get("actual", [])) + _LOGGER.info( + " Restored daily plan state: date=%s, actual=%s", + sensor._daily_plan_state.get("date"), + actual_count, + ) + except (json.decoder.JSONDecodeError, TypeError) as err: + _LOGGER.warning("Failed to restore daily plan state: %s", err) + + +def _schedule_forecast_refresh(sensor) -> None: + from homeassistant.helpers.event import async_track_time_change + + async def _forecast_refresh_job(now): + _LOGGER.info(" Forecast refresh triggered at %s", now.strftime("%H:%M")) + try: + await sensor.async_update() + except Exception as err: + _LOGGER.error("Forecast refresh failed: %s", err, exc_info=True) + + for minute in [0, 15, 30, 45]: + async_track_time_change( + sensor.hass, + _forecast_refresh_job, + minute=minute, + second=30, + ) + _LOGGER.info(" Scheduled forecast refresh every 15 minutes") + + +def _subscribe_profiles(sensor) -> None: + from homeassistant.helpers.dispatcher import async_dispatcher_connect + + async def _on_profiles_updated(): + await asyncio.sleep(0) + sensor._profiles_dirty = True + sensor._log_rate_limited( + "profiles_updated_deferred", + "info", + " profiles_updated received - deferring forecast refresh to next 15-min tick", + cooldown_s=300.0, + ) + + signal_name = f"oig_cloud_{sensor._box_id}_profiles_updated" + _LOGGER.debug(" Subscribing to signal: %s", signal_name) + async_dispatcher_connect(sensor.hass, signal_name, _on_profiles_updated) + + +def _schedule_initial_refresh(sensor) -> None: + from homeassistant.helpers.dispatcher import async_dispatcher_connect + + async def _delayed_initial_refresh(): + _LOGGER.info(" Waiting for AdaptiveLoadProfiles to complete (max 60s)...") + profiles_ready = False + + async def _mark_ready(): + nonlocal profiles_ready + await asyncio.sleep(0) + profiles_ready = True + + temp_unsub = async_dispatcher_connect( + sensor.hass, f"oig_cloud_{sensor._box_id}_profiles_updated", _mark_ready + ) + + try: + for _ in range(60): + if profiles_ready: + _LOGGER.info(" Profiles ready - starting initial forecast") + break + await asyncio.sleep(1) + else: + _LOGGER.info("Profiles not ready after 60s - starting forecast anyway") + + await sensor.async_update() + _LOGGER.info(" Initial forecast completed") + except Exception as err: + _LOGGER.error("Initial forecast failed: %s", err, exc_info=True) + finally: + temp_unsub() + + sensor.hass.async_create_task(_delayed_initial_refresh()) + + +def _schedule_aggregations(sensor) -> None: + from homeassistant.helpers.event import async_track_time_change + + async def _daily_aggregation_job(now): + yesterday = (now.date() - timedelta(days=1)).strftime(DATE_FMT) + _LOGGER.info(" Daily aggregation job triggered for %s", yesterday) + await sensor._aggregate_daily(yesterday) + + async def _weekly_aggregation_job(now): + if now.weekday() != 6: + return + year, week_num, _ = now.isocalendar() + week_str = f"{year}-W{week_num:02d}" + end_date = now.date().strftime(DATE_FMT) + start_date = (now.date() - timedelta(days=6)).strftime(DATE_FMT) + _LOGGER.info(" Weekly aggregation job triggered for %s", week_str) + await sensor._aggregate_weekly(week_str, start_date, end_date) + + async_track_time_change( + sensor.hass, _daily_aggregation_job, hour=0, minute=5, second=0 + ) + _LOGGER.debug(" Scheduled daily aggregation at 00:05") + + async_track_time_change( + sensor.hass, _weekly_aggregation_job, hour=23, minute=55, second=0 + ) + _LOGGER.debug(" Scheduled weekly aggregation at Sunday 23:55") diff --git a/custom_components/oig_cloud/battery_forecast/sensors/sensor_runtime.py b/custom_components/oig_cloud/battery_forecast/sensors/sensor_runtime.py new file mode 100644 index 00000000..c5d12147 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/sensor_runtime.py @@ -0,0 +1,77 @@ +"""Runtime helpers for battery forecast sensor.""" + +from __future__ import annotations + +import time +from typing import Any, Dict, Optional, Union + +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +from ..planning import auto_switch as auto_switch_module + + +def log_rate_limited( + sensor, + logger, + key: str, + level: str, + message: str, + *args: Any, + cooldown_s: float = 300.0, +) -> None: + """Log at most once per cooldown_s for a given key.""" + now_ts = time.time() + log_cache = getattr(sensor, "_log_last_ts", None) + if log_cache is None: + log_cache = {} + setattr(sensor, "_log_last_ts", log_cache) + last = log_cache.get(key, 0.0) + if now_ts - last < cooldown_s: + return + log_cache[key] = now_ts + log_fn = getattr(logger, level, None) + if callable(log_fn): + log_fn(message, *args) + + +def get_config(sensor) -> Dict[str, Any]: + """Return config dict from config entry (options preferred, then data).""" + if not getattr(sensor, "_config_entry", None): + return {} + options = getattr(sensor._config_entry, "options", None) + if options: + return options + return sensor._config_entry.data or {} + + +def handle_coordinator_update(sensor) -> None: + """Delegate coordinator update handling.""" + CoordinatorEntity._handle_coordinator_update(sensor) + + +def get_state(sensor) -> Optional[Union[float, str]]: + """Return battery capacity value for sensor state.""" + timeline = getattr(sensor, "_timeline_data", None) + if timeline: + capacity = timeline[0].get("battery_soc") + if capacity is None: + capacity = timeline[0].get("battery_capacity_kwh", 0) + return round(capacity, 2) + return 0 + + +def is_available(sensor) -> bool: + """Return if the sensor is available.""" + timeline = getattr(sensor, "_timeline_data", None) + if timeline: + return True + available_prop = getattr(CoordinatorEntity, "available", None) + if available_prop and getattr(available_prop, "fget", None): + return available_prop.fget(sensor) + return True + + +def handle_will_remove(sensor) -> None: + """Cleanup auto switch resources before removal.""" + auto_switch_module.cancel_auto_switch_schedule(sensor) + auto_switch_module.stop_auto_switch_watchdog(sensor) diff --git a/custom_components/oig_cloud/battery_forecast/sensors/sensor_setup.py b/custom_components/oig_cloud/battery_forecast/sensors/sensor_setup.py new file mode 100644 index 00000000..c24748d5 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/sensors/sensor_setup.py @@ -0,0 +1,152 @@ +"""Initialization helpers for the battery forecast sensor.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Callable, Dict, List, Optional, Tuple + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + + +def initialize_sensor( + sensor: Any, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant], + *, + side_effects_enabled: bool, + auto_switch_startup_delay: timedelta, +) -> None: + """Populate sensor state and caches.""" + sensor._sensor_type = sensor_type + sensor._config_entry = config_entry + sensor._device_info = device_info + + # Prefer injected hass, fallback to coordinator.hass + sensor._hass = hass or getattr(coordinator, "hass", None) + sensor._side_effects_enabled = bool(side_effects_enabled) + + # Resolve box id for stable entity identifiers. + try: + from ...entities.base_sensor import resolve_box_id + + sensor._box_id = resolve_box_id(coordinator) + except Exception: + sensor._box_id = "unknown" + + if sensor._box_id == "unknown": + _LOGGER.warning( + "Battery forecast sensor: unable to resolve box_id, using 'unknown' (sensor will be unstable)" + ) + + # Entity attributes aligned with statistics sensors. + sensor._attr_unique_id = f"oig_cloud_{sensor._box_id}_{sensor_type}" + sensor.entity_id = f"sensor.oig_{sensor._box_id}_{sensor_type}" + sensor._attr_icon = "mdi:battery-charging-60" + sensor._attr_native_unit_of_measurement = "kWh" + sensor._attr_device_class = SensorDeviceClass.ENERGY_STORAGE + sensor._attr_state_class = SensorStateClass.MEASUREMENT + sensor._attr_entity_category = None + + from ...sensors.SENSOR_TYPES_STATISTICS import SENSOR_TYPES_STATISTICS + + sensor_config = SENSOR_TYPES_STATISTICS.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + sensor._attr_name = name_cs or name_en or sensor_type + + # Timeline data cache and throttling state. + sensor._last_forecast_bucket: Optional[datetime] = None + sensor._forecast_in_progress = False + sensor._profiles_dirty = False + sensor._plan_lock_until: Optional[datetime] = None + sensor._plan_lock_modes: Dict[str, int] = {} + sensor._timeline_data: List[Dict[str, Any]] = [] + sensor._baseline_timeline: List[Dict[str, Any]] = [] + sensor._last_update: Optional[datetime] = None + sensor._charging_metrics: Dict[str, Any] = {} + sensor._adaptive_consumption_data: Dict[str, Any] = {} + sensor._consumption_summary: Dict[str, Any] = {} + sensor._first_update = True + sensor._auto_switch_handles: List[Any] = [] + sensor._last_auto_switch_request: Optional[Tuple[str, datetime]] = None + sensor._auto_switch_ready_at = dt_util.now() + auto_switch_startup_delay + sensor._auto_switch_retry_unsub: Optional[Callable[[], None]] = None + sensor._auto_switch_watchdog_unsub: Optional[Callable[[], None]] = None + sensor._auto_switch_watchdog_interval = timedelta(seconds=30) + sensor._forecast_retry_unsub: Optional[Callable[[], None]] = None + + # Log throttling to prevent HA "logging too frequently" warnings. + sensor._log_last_ts = sensor._GLOBAL_LOG_LAST_TS + + # Planner result snapshot (legacy attribute schema name: mode_optimization). + sensor._mode_optimization_result: Optional[Dict[str, Any]] = None + + # Mode recommendations (today + tomorrow). + sensor._mode_recommendations: List[Dict[str, Any]] = [] + + # Daily plans archive (yesterday, earlier). + sensor._daily_plans_archive: Dict[str, Dict[str, Any]] = {} + + # Current daily plan state (restored from storage). + sensor._daily_plan_state: Optional[Dict[str, Any]] = None + sensor._baseline_repair_attempts: set[str] = set() + + # Hash-based change detection. + sensor._data_hash: Optional[str] = None + + # Unified charging planner. + sensor._active_charging_plan: Optional[Dict[str, Any]] = None + sensor._plan_status = "none" + sensor._balancing_plan_snapshot: Optional[Dict[str, Any]] = None + + # Hourly history update tracking. + sensor._last_history_update_hour: Optional[int] = None + sensor._initial_history_update_done = False + + # Storage helper for persistent battery plans. + sensor._plans_store: Optional[Store] = None + if sensor._hass: + sensor._plans_store = Store( + sensor._hass, + version=1, + key=f"oig_cloud.battery_plans_{sensor._box_id}", + ) + _LOGGER.debug( + "Initialized storage helper: oig_cloud.battery_plans_%s", sensor._box_id + ) + else: + _LOGGER.warning( + "Cannot initialize storage helper - hass not available yet. " + "Will retry in async_added_to_hass()." + ) + + # Storage helper for precomputed UI data. + sensor._precomputed_store: Optional[Store] = None + sensor._precompute_interval = timedelta(minutes=15) + sensor._last_precompute_at: Optional[datetime] = None + sensor._last_precompute_hash: Optional[str] = None + sensor._precompute_task = None + if sensor._hass: + sensor._precomputed_store = Store( + sensor._hass, + version=1, + key=f"oig_cloud.precomputed_data_{sensor._box_id}", + ) + _LOGGER.debug( + "Initialized precomputed storage: oig_cloud.precomputed_data_%s", + sensor._box_id, + ) + else: + _LOGGER.debug( + "Precomputed storage will be initialized in async_added_to_hass()" + ) diff --git a/custom_components/oig_cloud/battery_forecast/storage/__init__.py b/custom_components/oig_cloud/battery_forecast/storage/__init__.py new file mode 100644 index 00000000..25af9a4b --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/storage/__init__.py @@ -0,0 +1,33 @@ +"""Storage helpers for battery forecast plans.""" + +from __future__ import annotations + +from .plan_storage_aggregate import ( + aggregate_daily, + aggregate_weekly, + backfill_daily_archive_from_storage, +) +from .plan_storage_baseline import ( + create_baseline_plan, + ensure_plan_exists, + is_baseline_plan_invalid, +) +from .plan_storage_daily import maybe_fix_daily_plan +from .plan_storage_io import ( + load_plan_from_storage, + plan_exists_in_storage, + save_plan_to_storage, +) + +__all__ = [ + "aggregate_daily", + "aggregate_weekly", + "backfill_daily_archive_from_storage", + "create_baseline_plan", + "ensure_plan_exists", + "is_baseline_plan_invalid", + "load_plan_from_storage", + "maybe_fix_daily_plan", + "plan_exists_in_storage", + "save_plan_to_storage", +] diff --git a/custom_components/oig_cloud/battery_forecast/storage/plan_storage_aggregate.py b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_aggregate.py new file mode 100644 index 00000000..0352b26f --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_aggregate.py @@ -0,0 +1,322 @@ +"""Aggregation helpers for battery forecast plans.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List + +from homeassistant.util import dt as dt_util + +from .plan_storage_io import load_plan_from_storage +from ..utils_common import safe_nested_get + +DATE_FMT = "%Y-%m-%d" + +_LOGGER = logging.getLogger(__name__) + + +async def aggregate_daily(sensor: Any, date_str: str) -> bool: + """Aggregate daily plan into a summary.""" + if not sensor._plans_store: + _LOGGER.error("Cannot aggregate - Storage Helper not initialized") + return False + + _LOGGER.info("Aggregating daily plan for %s", date_str) + + try: + plan = await load_plan_from_storage(sensor, date_str) + if not plan: + _LOGGER.warning( + "No detailed plan found for %s, skipping aggregation", date_str + ) + return False + + intervals = plan.get("intervals", []) + if not intervals: + _LOGGER.warning("Empty intervals for %s, skipping aggregation", date_str) + return False + + total_cost = sum(iv.get("net_cost", 0) for iv in intervals) + total_solar = sum(iv.get("solar_kwh", 0) for iv in intervals) + total_consumption = sum(iv.get("consumption_kwh", 0) for iv in intervals) + total_grid_import = sum(iv.get("grid_import_kwh", 0) for iv in intervals) + total_grid_export = sum(iv.get("grid_export_kwh", 0) for iv in intervals) + + soc_values = [ + iv.get("battery_soc", 0) + for iv in intervals + if iv.get("battery_soc") is not None + ] + avg_battery_soc = sum(soc_values) / len(soc_values) if soc_values else 0 + min_battery_soc = min(soc_values) if soc_values else 0 + max_battery_soc = max(soc_values) if soc_values else 0 + + daily_aggregate = { + "planned": { + "total_cost": round(total_cost, 2), + "total_solar": round(total_solar, 2), + "total_consumption": round(total_consumption, 2), + "total_grid_import": round(total_grid_import, 2), + "total_grid_export": round(total_grid_export, 2), + "avg_battery_soc": round(avg_battery_soc, 1), + "min_battery_soc": round(min_battery_soc, 1), + "max_battery_soc": round(max_battery_soc, 1), + } + } + + data = await sensor._plans_store.async_load() or {} + if "daily" not in data: + data["daily"] = {} + + data["daily"][date_str] = daily_aggregate + await sensor._plans_store.async_save(data) + + _LOGGER.info( + "Daily aggregate saved for %s: cost=%.2f CZK, solar=%.2f kWh, consumption=%.2f kWh", + date_str, + total_cost, + total_solar, + total_consumption, + ) + + cutoff_date = ( + datetime.strptime(date_str, DATE_FMT).date() - timedelta(days=7) + ).strftime(DATE_FMT) + + detailed = data.get("detailed", {}) + dates_to_delete = [d for d in detailed.keys() if d < cutoff_date] + + if dates_to_delete: + for old_date in dates_to_delete: + del data["detailed"][old_date] + _LOGGER.debug("Deleted detailed plan for %s (>7 days old)", old_date) + + await sensor._plans_store.async_save(data) + _LOGGER.info("Cleaned up %s old detailed plans", len(dates_to_delete)) + + return True + + except Exception as err: + _LOGGER.error( + "Error aggregating daily plan for %s: %s", + date_str, + err, + exc_info=True, + ) + return False + + +async def aggregate_weekly( + sensor: Any, week_str: str, start_date: str, end_date: str +) -> bool: + """Aggregate weekly plan summary.""" + if not sensor._plans_store: + _LOGGER.error("Cannot aggregate - Storage Helper not initialized") + return False + + _LOGGER.info( + "Aggregating weekly plan for %s (%s to %s)", + week_str, + start_date, + end_date, + ) + + try: + data = await sensor._plans_store.async_load() or {} + daily_plans = data.get("daily", {}) + + week_days = _collect_week_days(daily_plans, start_date, end_date) + + if not week_days: + _LOGGER.warning( + "No daily plans found for %s, skipping aggregation", week_str + ) + return False + + totals = _sum_weekly_totals(week_days) + weekly_aggregate = _build_weekly_aggregate( + start_date, end_date, week_days, totals + ) + + if "weekly" not in data: + data["weekly"] = {} + + data["weekly"][week_str] = weekly_aggregate + await sensor._plans_store.async_save(data) + + _LOGGER.info( + "Weekly aggregate saved for %s: cost=%.2f CZK, solar=%.2f kWh, %s days", + week_str, + totals["total_cost"], + totals["total_solar"], + len(week_days), + ) + + daily_to_delete = _cleanup_old_daily(data, end_date) + weekly_to_delete = _cleanup_old_weekly(data) + + if daily_to_delete or weekly_to_delete: + await sensor._plans_store.async_save(data) + + return True + + except Exception as err: + _LOGGER.error( + "Error aggregating weekly plan for %s: %s", + week_str, + err, + exc_info=True, + ) + return False + + +def _collect_week_days( + daily_plans: Dict[str, Any], start_date: str, end_date: str +) -> List[Dict[str, Any]]: + start = datetime.strptime(start_date, DATE_FMT).date() + end = datetime.strptime(end_date, DATE_FMT).date() + week_days = [] + current = start + while current <= end: + day_str = current.strftime(DATE_FMT) + if day_str in daily_plans: + week_days.append(daily_plans[day_str]) + current += timedelta(days=1) + return week_days + + +def _sum_weekly_totals(week_days: List[Dict[str, Any]]) -> Dict[str, float]: + return { + "total_cost": sum( + safe_nested_get(day, "planned", "total_cost", default=0) + for day in week_days + ), + "total_solar": sum( + safe_nested_get(day, "planned", "total_solar", default=0) + for day in week_days + ), + "total_consumption": sum( + safe_nested_get(day, "planned", "total_consumption", default=0) + for day in week_days + ), + "total_grid_import": sum( + safe_nested_get(day, "planned", "total_grid_import", default=0) + for day in week_days + ), + "total_grid_export": sum( + safe_nested_get(day, "planned", "total_grid_export", default=0) + for day in week_days + ), + } + + +def _build_weekly_aggregate( + start_date: str, + end_date: str, + week_days: List[Dict[str, Any]], + totals: Dict[str, float], +) -> Dict[str, Any]: + return { + "start_date": start_date, + "end_date": end_date, + "days_count": len(week_days), + "planned": { + "total_cost": round(totals["total_cost"], 2), + "total_solar": round(totals["total_solar"], 2), + "total_consumption": round(totals["total_consumption"], 2), + "total_grid_import": round(totals["total_grid_import"], 2), + "total_grid_export": round(totals["total_grid_export"], 2), + }, + } + + +def _cleanup_old_daily(data: Dict[str, Any], end_date: str) -> List[str]: + daily_plans = data.get("daily", {}) + cutoff_daily = ( + datetime.strptime(end_date, DATE_FMT).date() - timedelta(days=30) + ).strftime(DATE_FMT) + daily_to_delete = [d for d in daily_plans.keys() if d < cutoff_daily] + if daily_to_delete: + for old_date in daily_to_delete: + del data["daily"][old_date] + _LOGGER.debug("Deleted daily plan for %s (>30 days old)", old_date) + _LOGGER.info("Cleaned up %s old daily plans", len(daily_to_delete)) + return daily_to_delete + + +def _cleanup_old_weekly(data: Dict[str, Any]) -> List[str]: + weekly_plans = data.get("weekly", {}) + current_year_week = datetime.now().isocalendar()[:2] + cutoff_week_number = current_year_week[1] - 52 + cutoff_year = ( + current_year_week[0] if cutoff_week_number > 0 else current_year_week[0] - 1 + ) + + weekly_to_delete = [] + for week_key in weekly_plans: + try: + year, week = week_key.split("-W") + year, week = int(year), int(week) + if year < cutoff_year or (year == cutoff_year and week < cutoff_week_number): + weekly_to_delete.append(week_key) + except Exception: # nosec B112 + continue + + if weekly_to_delete: + for old_week in weekly_to_delete: + del data["weekly"][old_week] + _LOGGER.debug("Deleted weekly plan for %s (>52 weeks old)", old_week) + _LOGGER.info("Cleaned up %s old weekly plans", len(weekly_to_delete)) + + return weekly_to_delete + + +async def backfill_daily_archive_from_storage(sensor: Any) -> None: + """Backfill daily plans archive from stored detailed plans.""" + if not sensor._plans_store: + _LOGGER.warning("Cannot backfill - no storage helper") + return + + try: + storage_data = await sensor._plans_store.async_load() or {} + detailed_plans = storage_data.get("detailed", {}) + + if not detailed_plans: + _LOGGER.info("No detailed plans in storage - nothing to backfill") + return + + now = dt_util.now() + backfilled_count = 0 + for days_ago in range(1, 8): + date_str = (now.date() - timedelta(days=days_ago)).strftime(DATE_FMT) + + if date_str in sensor._daily_plans_archive: + continue + + if date_str in detailed_plans: + plan_data = detailed_plans[date_str] + intervals = plan_data.get("intervals", []) + sensor._daily_plans_archive[date_str] = { + "date": date_str, + "plan": intervals, + "actual": intervals, + "created_at": plan_data.get("created_at"), + } + backfilled_count += 1 + _LOGGER.debug( + "Backfilled archive for %s from storage (%s intervals)", + date_str, + len(intervals), + ) + + if backfilled_count > 0: + _LOGGER.info("Backfilled %s days into archive", backfilled_count) + storage_data["daily_archive"] = sensor._daily_plans_archive + await sensor._plans_store.async_save(storage_data) + _LOGGER.info("Saved backfilled archive to storage") + else: + _LOGGER.debug("No days needed backfilling") + + except Exception as err: + _LOGGER.error("Failed to backfill daily archive: %s", err, exc_info=True) diff --git a/custom_components/oig_cloud/battery_forecast/storage/plan_storage_baseline.py b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_baseline.py new file mode 100644 index 00000000..1debca23 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_baseline.py @@ -0,0 +1,367 @@ +"""Baseline helpers for battery forecast plans.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + +from ..data import history as history_module +from .plan_storage_io import plan_exists_in_storage, save_plan_to_storage + +DATE_FMT = "%Y-%m-%d" +MODE_HOME_III = "HOME III" + +_LOGGER = logging.getLogger(__name__) + + +def is_baseline_plan_invalid(plan: Optional[Dict[str, Any]]) -> bool: + """Validate baseline plan.""" + if not plan: + return True + + intervals = plan.get("intervals") or [] + if len(intervals) < 90: + return True + + filled_intervals = str(plan.get("filled_intervals") or "").strip() + if filled_intervals in ("00:00-23:45", "00:00-23:59"): + return True + + nonzero_consumption = sum( + 1 + for interval in intervals + if abs(float(interval.get("consumption_kwh", 0) or 0)) > 1e-6 + ) + if nonzero_consumption < max(4, len(intervals) // 24): + return True + + return False + + +async def create_baseline_plan(sensor: Any, date_str: str) -> bool: + """Create baseline plan for a given date.""" + if not sensor._plans_store: + _LOGGER.error("Cannot create baseline - Storage Helper not initialized") + return False + + _LOGGER.info("Creating baseline plan for %s", date_str) + + try: + hybrid_timeline = getattr(sensor, "_timeline_data", []) + if not hybrid_timeline: + return await _create_baseline_from_fallback(sensor, date_str) + + _LOGGER.debug("Using HYBRID timeline with %s intervals", len(hybrid_timeline)) + intervals, filled_count, first_hybrid_time = await _build_baseline_intervals( + sensor, date_str, hybrid_timeline + ) + filled_intervals_str = _format_filled_intervals( + filled_count, first_hybrid_time + ) + + _LOGGER.info( + "Baseline plan built: %s intervals, %s from HYBRID, %s filled", + len(intervals), + len(intervals) - filled_count, + filled_count, + ) + + return await _save_baseline_plan( + sensor, date_str, intervals, filled_intervals_str + ) + + except Exception as err: + _LOGGER.error( + "Error creating baseline plan for %s: %s", + date_str, + err, + exc_info=True, + ) + return False + + +async def _create_baseline_from_fallback(sensor: Any, date_str: str) -> bool: + fallback_intervals = await _load_fallback_intervals(sensor, date_str) + if fallback_intervals: + fallback_plan = {"intervals": fallback_intervals, "filled_intervals": None} + if not is_baseline_plan_invalid(fallback_plan): + _LOGGER.info("Using fallback plan to create baseline for %s", date_str) + return await save_plan_to_storage( + sensor, + date_str, + fallback_intervals, + {"baseline": True, "filled_intervals": None}, + ) + + _LOGGER.warning("No HYBRID timeline available - cannot create baseline plan") + return False + + +async def _load_fallback_intervals(sensor: Any, date_str: str) -> List[Dict[str, Any]]: + fallback_intervals: List[Dict[str, Any]] = [] + if sensor._plans_store: + fallback_intervals = await _fallback_from_storage(sensor, date_str) + if not fallback_intervals: + fallback_intervals = _fallback_from_daily_state(sensor, date_str) + return fallback_intervals + + +async def _fallback_from_storage( + sensor: Any, date_str: str +) -> List[Dict[str, Any]]: + try: + storage_plans = await sensor._plans_store.async_load() or {} + archive_plan = _extract_archive_plan(storage_plans, date_str) + if archive_plan: + return archive_plan + detailed_plan = _extract_detailed_plan(storage_plans, date_str) + if detailed_plan: + return detailed_plan + except Exception as err: + _LOGGER.debug( + "Failed to load fallback plans for %s: %s", + date_str, + err, + ) + return [] + + +def _extract_archive_plan( + storage_plans: Dict[str, Any], date_str: str +) -> List[Dict[str, Any]]: + archive_day = storage_plans.get("daily_archive", {}).get(date_str, {}) or {} + return archive_day.get("plan") or [] + + +def _extract_detailed_plan( + storage_plans: Dict[str, Any], date_str: str +) -> List[Dict[str, Any]]: + detailed_day = storage_plans.get("detailed", {}).get(date_str, {}) + return detailed_day.get("intervals") or [] + + +def _fallback_from_daily_state(sensor: Any, date_str: str) -> List[Dict[str, Any]]: + daily_state = getattr(sensor, "_daily_plan_state", None) + if daily_state and daily_state.get("date") == date_str: + return daily_state.get("plan") or [] + return [] + + +async def _build_baseline_intervals( + sensor: Any, date_str: str, hybrid_timeline: List[Dict[str, Any]] +) -> tuple[List[Dict[str, Any]], int, Optional[str]]: + date_obj = datetime.strptime(date_str, DATE_FMT).date() + day_start = dt_util.as_local(datetime.combine(date_obj, datetime.min.time())) + + intervals: List[Dict[str, Any]] = [] + filled_count = 0 + first_hybrid_time: Optional[str] = None + + for i in range(96): + interval_start = day_start + timedelta(minutes=i * 15) + interval_time_str = interval_start.strftime("%H:%M") + hybrid_interval = _find_hybrid_interval(hybrid_timeline, interval_time_str) + + if hybrid_interval: + if first_hybrid_time is None: + first_hybrid_time = interval_time_str + interval = _build_interval_from_hybrid(interval_time_str, hybrid_interval) + else: + interval, was_filled = await _build_interval_from_history_or_default( + sensor, hybrid_timeline, interval_start, interval_time_str + ) + if was_filled: + filled_count += 1 + intervals.append(interval) + + return intervals, filled_count, first_hybrid_time + + +def _find_hybrid_interval( + hybrid_timeline: List[Dict[str, Any]], interval_time_str: str +) -> Optional[Dict[str, Any]]: + for hi in hybrid_timeline: + hi_time_str = hi.get("time") or hi.get("timestamp", "") + if not hi_time_str: + continue + try: + if "T" in hi_time_str: + hi_dt = datetime.fromisoformat(hi_time_str) + if hi_dt.tzinfo is None: + hi_dt = dt_util.as_local(hi_dt) + hi_time_only = hi_dt.strftime("%H:%M") + else: + hi_time_only = hi_time_str + + if hi_time_only == interval_time_str: + return hi + except Exception: # nosec B112 + continue + return None + + +def _build_interval_from_hybrid( + interval_time_str: str, hybrid_interval: Dict[str, Any] +) -> Dict[str, Any]: + return { + "time": interval_time_str, + "solar_kwh": round(hybrid_interval.get("solar_kwh", 0), 4), + "consumption_kwh": round(hybrid_interval.get("load_kwh", 0), 4), + "battery_soc": round(hybrid_interval.get("battery_soc", 50.0), 2), + "battery_kwh": round(hybrid_interval.get("battery_capacity_kwh", 7.68), 2), + "grid_import_kwh": round(hybrid_interval.get("grid_import", 0), 4), + "grid_export_kwh": round(hybrid_interval.get("grid_export", 0), 4), + "mode": hybrid_interval.get("mode", 2), + "mode_name": hybrid_interval.get("mode_name", MODE_HOME_III), + "spot_price": round(hybrid_interval.get("spot_price", 3.45), 2), + "net_cost": round(hybrid_interval.get("net_cost", 0), 2), + } + + +async def _build_interval_from_history_or_default( + sensor: Any, + hybrid_timeline: List[Dict[str, Any]], + interval_start: datetime, + interval_time_str: str, +) -> tuple[Dict[str, Any], bool]: + interval_end = interval_start + timedelta(minutes=15) + historical_data = await history_module.fetch_interval_from_history( + sensor, interval_start, interval_end + ) + if historical_data: + return ( + _build_interval_from_history(interval_time_str, historical_data), + True, + ) + return _build_default_interval(interval_time_str, hybrid_timeline), True + + +def _build_interval_from_history( + interval_time_str: str, historical_data: Dict[str, Any] +) -> Dict[str, Any]: + return { + "time": interval_time_str, + "solar_kwh": round(historical_data.get("solar_kwh", 0), 4), + "consumption_kwh": round( + historical_data.get("consumption_kwh", 0.065), 4 + ), + "battery_soc": round(historical_data.get("battery_soc", 50.0), 2), + "battery_kwh": round(historical_data.get("battery_kwh", 7.68), 2), + "grid_import_kwh": round(historical_data.get("grid_import_kwh", 0), 4), + "grid_export_kwh": round(historical_data.get("grid_export_kwh", 0), 4), + "mode": historical_data.get("mode", 2), + "mode_name": historical_data.get("mode_name", MODE_HOME_III), + "spot_price": round(historical_data.get("spot_price", 3.45), 2), + "net_cost": round(historical_data.get("net_cost", 0), 2), + } + + +def _build_default_interval( + interval_time_str: str, hybrid_timeline: List[Dict[str, Any]] +) -> Dict[str, Any]: + first_soc = 50.0 + first_mode = 2 + first_mode_name = MODE_HOME_III + if hybrid_timeline: + first_hi = hybrid_timeline[0] + first_soc = first_hi.get("battery_soc", 50.0) + first_mode = first_hi.get("mode", 2) + first_mode_name = first_hi.get("mode_name", MODE_HOME_III) + + return { + "time": interval_time_str, + "solar_kwh": 0.0, + "consumption_kwh": 0.065, + "battery_soc": round(first_soc, 2), + "battery_kwh": round((first_soc / 100.0) * 15.36, 2), + "grid_import_kwh": 0.065, + "grid_export_kwh": 0.0, + "mode": first_mode, + "mode_name": first_mode_name, + "spot_price": 3.45, + "net_cost": 0.22, + } + + +def _format_filled_intervals( + filled_count: int, first_hybrid_time: Optional[str] +) -> Optional[str]: + if filled_count > 0 and first_hybrid_time: + return f"00:00-{first_hybrid_time}" + return None # pragma: no cover + + +async def _save_baseline_plan( + sensor: Any, + date_str: str, + intervals: List[Dict[str, Any]], + filled_intervals_str: Optional[str], +) -> bool: + success = await save_plan_to_storage( + sensor, + date_str, + intervals, + {"baseline": True, "filled_intervals": filled_intervals_str}, + ) + if success: + _LOGGER.info( + "Baseline plan created: date=%s, intervals=%s, filled=%s", + date_str, + len(intervals), + filled_intervals_str, + ) + else: + _LOGGER.error("Failed to save baseline plan for %s", date_str) + return success + + +async def ensure_plan_exists(sensor: Any, date_str: str) -> bool: + """Guarantee plan existence for a date, creating it if needed.""" + exists = await plan_exists_in_storage(sensor, date_str) + if exists: + _LOGGER.debug("Plan exists for %s", date_str) + return True + + _LOGGER.warning("Plan missing for %s, attempting to create...", date_str) + + now = dt_util.now() + today_str = now.strftime(DATE_FMT) + + if date_str != today_str: + _LOGGER.warning("Cannot create plan for %s (not today %s)", date_str, today_str) + return False + + current_hour = now.hour + current_minute = now.minute + + if current_hour == 0 and 10 <= current_minute < 60: + _LOGGER.info("Midnight baseline window - creating plan for %s", date_str) + return await create_baseline_plan(sensor, date_str) + + if (current_hour == 6 and current_minute < 10) or ( + current_hour == 12 and current_minute < 10 + ): + _LOGGER.info( + "Retry window (%02d:%02d) - creating plan for %s", + current_hour, + current_minute, + date_str, + ) + return await create_baseline_plan(sensor, date_str) + + _LOGGER.warning( + "Emergency baseline creation at %s for %s", + now.strftime("%H:%M"), + date_str, + ) + success = await create_baseline_plan(sensor, date_str) + + if success: + _LOGGER.info("Emergency baseline created for %s", date_str) + else: + _LOGGER.error("Failed to create emergency baseline for %s", date_str) + + return success diff --git a/custom_components/oig_cloud/battery_forecast/storage/plan_storage_daily.py b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_daily.py new file mode 100644 index 00000000..c49be9cd --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_daily.py @@ -0,0 +1,233 @@ +"""Daily plan helpers for battery forecast plans.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Optional + +from homeassistant.util import dt as dt_util + +from .plan_storage_baseline import create_baseline_plan +from .plan_storage_io import plan_exists_in_storage + +DATE_FMT = "%Y-%m-%d" + +_LOGGER = logging.getLogger(__name__) + + +def _within_midnight_window(now: datetime) -> bool: + return now.hour == 0 and 10 <= now.minute < 60 + + +async def _ensure_baseline(sensor: Any, today_str: str, now: datetime) -> None: + if not _within_midnight_window(now): + return + plan_exists = await plan_exists_in_storage(sensor, today_str) + if plan_exists: + _LOGGER.debug("Baseline plan already exists for %s", today_str) + return + _LOGGER.info( + "Post-midnight baseline creation window: %s", + now.strftime("%H:%M"), + ) + baseline_created = await create_baseline_plan(sensor, today_str) + if baseline_created: + _LOGGER.info("Baseline plan created in Storage Helper for %s", today_str) + else: + _LOGGER.warning("Failed to create baseline plan for %s", today_str) + + +async def _archive_daily_plan(sensor: Any, now: datetime) -> None: + if not sensor._daily_plan_state: + return + yesterday_date = sensor._daily_plan_state.get("date") + sensor._daily_plans_archive[yesterday_date] = sensor._daily_plan_state.copy() + + cutoff_date = (now.date() - timedelta(days=7)).strftime(DATE_FMT) + sensor._daily_plans_archive = { + date: plan + for date, plan in sensor._daily_plans_archive.items() + if date >= cutoff_date + } + + _LOGGER.info( + "Archived daily plan for %s (archive size: %s days)", + yesterday_date, + len(sensor._daily_plans_archive), + ) + + if sensor._plans_store: + try: + storage_data = await sensor._plans_store.async_load() or {} + storage_data["daily_archive"] = sensor._daily_plans_archive + await sensor._plans_store.async_save(storage_data) + _LOGGER.info( + "Saved daily plans archive to storage (%s days)", + len(sensor._daily_plans_archive), + ) + except Exception as err: + _LOGGER.error( + "Failed to save daily plans archive: %s", + err, + exc_info=True, + ) + + +def _collect_today_timeline( + optimal_timeline: list[dict[str, Any]], + today_start: datetime, + today_end: datetime, +) -> list[dict[str, Any]]: + today_timeline = [] + for interval in optimal_timeline: + if not interval.get("time"): + continue + try: + interval_time = datetime.fromisoformat(interval["time"]) + if interval_time.tzinfo is None: + interval_time = dt_util.as_local(interval_time) + if today_start <= interval_time <= today_end: + today_timeline.append(interval) + except Exception: # nosec B112 + continue + return today_timeline + + +def _build_plan_intervals( + today_timeline: list[dict[str, Any]], +) -> list[dict[str, Any]]: + plan_intervals = [] + for interval in today_timeline: + plan_intervals.append( + { + "time": interval.get("timestamp"), + "solar_kwh": round(interval.get("solar_kwh", 0), 4), + "consumption_kwh": round(interval.get("load_kwh", 0), 4), + "battery_soc": round(interval.get("battery_soc", 0), 2), + "battery_capacity_kwh": round( + interval.get("battery_capacity_kwh", 0), 2 + ), + "grid_import_kwh": round(interval.get("grid_import", 0), 4), + "grid_export_kwh": round(interval.get("grid_export", 0), 4), + "mode": interval.get("mode", 0), + "mode_name": interval.get("mode_name", "N/A"), + "spot_price": round(interval.get("spot_price", 0), 2), + "net_cost": round(interval.get("net_cost", 0), 2), + } + ) + return plan_intervals + + +async def maybe_fix_daily_plan(sensor: Any) -> None: # noqa: C901 + """Fix daily plan state and create baseline after midnight.""" + now = dt_util.now() + today_str = now.strftime(DATE_FMT) + + if not hasattr(sensor, "_daily_plan_state"): + sensor._daily_plan_state = None + + await _ensure_baseline(sensor, today_str, now) + + if _should_keep_locked_plan(sensor._daily_plan_state, today_str): + _LOGGER.debug( + "Daily plan for %s already locked with %s intervals, keeping it", + today_str, + len(sensor._daily_plan_state.get("plan", [])), + ) + return + + if _should_rebuild_plan(sensor._daily_plan_state, today_str): + if sensor._daily_plan_state: + await _archive_daily_plan(sensor, now) + + if not _has_optimization_result(sensor): + _LOGGER.warning( + "No HYBRID optimization result available to fix daily plan for %s", + today_str, + ) + sensor._daily_plan_state = _empty_daily_plan(today_str, now) + return + + plan_intervals, expected_total_cost = _build_daily_plan(sensor, now) + existing_actual = _get_existing_actual(sensor._daily_plan_state, today_str) + + sensor._daily_plan_state = { + "date": today_str, + "created_at": now.isoformat(), + "plan": plan_intervals, + "actual": existing_actual, + "locked": True, + } + + _LOGGER.info( + "Fixed daily plan for %s: %s plan intervals, %s existing actual, " + "expected_cost=%.2f CZK", + today_str, + len(plan_intervals), + len(existing_actual), + expected_total_cost, + ) + + +def _should_keep_locked_plan( + plan_state: Optional[dict[str, Any]], today_str: str +) -> bool: + return bool( + plan_state + and plan_state.get("date") == today_str + and len(plan_state.get("plan", [])) > 0 + and plan_state.get("locked", False) + ) + + +def _should_rebuild_plan( + plan_state: Optional[dict[str, Any]], today_str: str +) -> bool: + return bool( + plan_state is None + or plan_state.get("date") != today_str + or not plan_state.get("plan", []) + ) + + +def _has_optimization_result(sensor: Any) -> bool: + return bool( + hasattr(sensor, "_mode_optimization_result") and sensor._mode_optimization_result + ) + + +def _build_daily_plan(sensor: Any, now: datetime) -> tuple[list[dict[str, Any]], float]: + optimal_timeline = getattr(sensor, "_timeline_data", []) + if not optimal_timeline: + optimal_timeline = sensor._mode_optimization_result.get("optimal_timeline", []) + + today_start = dt_util.as_local(datetime.combine(now.date(), datetime.min.time())) + today_end = dt_util.as_local(datetime.combine(now.date(), datetime.max.time())) + + today_timeline = _collect_today_timeline(optimal_timeline, today_start, today_end) + expected_total_cost = sum(i.get("net_cost", 0) for i in today_timeline) + plan_intervals = _build_plan_intervals(today_timeline) + return plan_intervals, expected_total_cost + + +def _get_existing_actual( + plan_state: Optional[dict[str, Any]], today_str: str +) -> list[dict[str, Any]]: + if plan_state and plan_state.get("date") == today_str: + existing_actual = plan_state.get("actual", []) + _LOGGER.debug( + "[Fix Plan] Preserving %s existing actual intervals", + len(existing_actual), + ) + return existing_actual + return [] + + +def _empty_daily_plan(today_str: str, now: datetime) -> dict[str, Any]: + return { + "date": today_str, + "created_at": now.isoformat(), + "plan": [], + "actual": [], + } diff --git a/custom_components/oig_cloud/battery_forecast/storage/plan_storage_io.py b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_io.py new file mode 100644 index 00000000..30238212 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/storage/plan_storage_io.py @@ -0,0 +1,179 @@ +"""Storage IO helpers for battery forecast plans.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional + +from homeassistant.helpers.event import async_call_later +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) +STORAGE_HELPER_NOT_INITIALIZED = "Storage Helper not initialized" + + +async def load_plan_from_storage( + sensor: Any, date_str: str +) -> Optional[Dict[str, Any]]: + """Load a plan from Storage Helper for a given date.""" + if not sensor._plans_store: + _LOGGER.error(STORAGE_HELPER_NOT_INITIALIZED) + return _get_cached_plan(sensor, date_str, STORAGE_HELPER_NOT_INITIALIZED) + + try: + data = await sensor._plans_store.async_load() + if not data: + _LOGGER.debug("No storage data found") + return _get_cached_plan(sensor, date_str, "Storage empty") + + detailed = data.get("detailed", {}) + plan = detailed.get(date_str) + + if plan: + interval_count = len(plan.get("intervals", [])) + _LOGGER.debug( + "Loaded plan from Storage: date=%s, intervals=%s, baseline=%s", + date_str, + interval_count, + plan.get("baseline"), + ) + else: + _LOGGER.debug("No plan found in Storage for %s", date_str) + return _get_cached_plan(sensor, date_str, "not in Storage") + + return plan + + except Exception as err: + _LOGGER.error("Error loading plan from Storage: %s", err, exc_info=True) + return _get_cached_plan(sensor, date_str, "Storage error") + + +async def save_plan_to_storage( + sensor: Any, + date_str: str, + intervals: List[Dict[str, Any]], + metadata: Optional[Dict[str, Any]] = None, +) -> bool: + """Save a plan to Storage Helper.""" + if not sensor._plans_store: + _LOGGER.error(STORAGE_HELPER_NOT_INITIALIZED) + return False + + try: + data = await sensor._plans_store.async_load() or {} + _ensure_storage_sections(data) + plan = _build_plan_payload(intervals, metadata) + data["detailed"][date_str] = plan + await sensor._plans_store.async_save(data) + + _LOGGER.info( + "Saved plan to Storage: date=%s, intervals=%s, baseline=%s", + date_str, + len(intervals), + plan["baseline"], + ) + return True + + except Exception as err: + _LOGGER.error("Error saving plan to Storage: %s", err, exc_info=True) + _cache_plan_in_memory(sensor, date_str, intervals, metadata) + _schedule_retry_save(sensor, date_str) + + if sensor._hass: + sensor._hass.components.persistent_notification.create( + ( + f"Battery plan storage failed for {date_str}. " + "Data is cached in memory only (will be lost on restart). " + "Check disk space and permissions." + ), + title="OIG Cloud Storage Warning", + notification_id=f"oig_storage_fail_{date_str}", + ) + + return False + + +def _get_cached_plan(sensor: Any, date_str: str, reason: str) -> Optional[Dict[str, Any]]: + cached = getattr(sensor, "_in_memory_plan_cache", {}).get(date_str) + if cached: + _LOGGER.warning("Using in-memory cached plan for %s (%s)", date_str, reason) + return cached + return None + + +def _ensure_storage_sections(data: Dict[str, Any]) -> None: + for key in ("detailed", "daily", "weekly"): + data.setdefault(key, {}) + + +def _build_plan_payload( + intervals: List[Dict[str, Any]], metadata: Optional[Dict[str, Any]] +) -> Dict[str, Any]: + return { + "created_at": dt_util.now().isoformat(), + "baseline": metadata.get("baseline", False) if metadata else False, + "filled_intervals": metadata.get("filled_intervals") if metadata else None, + "intervals": intervals, + } + + +def _cache_plan_in_memory( + sensor: Any, + date_str: str, + intervals: List[Dict[str, Any]], + metadata: Optional[Dict[str, Any]], +) -> None: + if not hasattr(sensor, "_in_memory_plan_cache"): + sensor._in_memory_plan_cache = {} + + sensor._in_memory_plan_cache[date_str] = _build_plan_payload(intervals, metadata) + _LOGGER.warning( + "Stored plan in memory cache (Storage failed): date=%s, intervals=%s", + date_str, + len(intervals), + ) + + +def _schedule_retry_save(sensor: Any, date_str: str) -> None: + if not sensor._hass: + return + + async def retry_save(_now): + _LOGGER.info("Retrying Storage save for %s...", date_str) + cached_plan = sensor._in_memory_plan_cache.get(date_str, {}) + success = await save_plan_to_storage( + sensor, + date_str, + cached_plan.get("intervals", []), + { + "baseline": cached_plan.get("baseline", False), + "filled_intervals": cached_plan.get("filled_intervals"), + }, + ) + if success: + _LOGGER.info("Retry successful for %s", date_str) + del sensor._in_memory_plan_cache[date_str] + else: + _LOGGER.warning("Retry failed for %s", date_str) + + async_call_later(sensor._hass, 300, retry_save) + + +async def plan_exists_in_storage(sensor: Any, date_str: str) -> bool: + """Check if a plan exists in Storage for a given date.""" + if not sensor._plans_store: + return False + + try: + data = await sensor._plans_store.async_load() + if not data: + return False + + detailed = data.get("detailed", {}) + exists = date_str in detailed + _LOGGER.debug("Plan existence check: date=%s, exists=%s", date_str, exists) + return exists + + except Exception as err: + _LOGGER.error("Error checking plan existence: %s", err, exc_info=True) + return False diff --git a/custom_components/oig_cloud/battery_forecast/strategy/__init__.py b/custom_components/oig_cloud/battery_forecast/strategy/__init__.py new file mode 100644 index 00000000..323435b4 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/strategy/__init__.py @@ -0,0 +1,10 @@ +"""Strategy layer for battery optimization.""" + +from .balancing import StrategyBalancingPlan +from .hybrid import HybridResult, HybridStrategy + +__all__ = [ + "StrategyBalancingPlan", + "HybridStrategy", + "HybridResult", +] diff --git a/custom_components/oig_cloud/battery_forecast/strategy/balancing.py b/custom_components/oig_cloud/battery_forecast/strategy/balancing.py new file mode 100644 index 00000000..ec4cf0c6 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/strategy/balancing.py @@ -0,0 +1,19 @@ +"""Strategy-layer balancing plan helper.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Dict, Set + + +@dataclass(slots=True) +class StrategyBalancingPlan: + """Balancing plan normalized for strategy layer. + + Uses interval indices (0..n-1) for the current planning horizon. + """ + + charging_intervals: Set[int] = field(default_factory=set) + holding_intervals: Set[int] = field(default_factory=set) + mode_overrides: Dict[int, int] = field(default_factory=dict) + is_active: bool = True diff --git a/custom_components/oig_cloud/battery_forecast/strategy/hybrid.py b/custom_components/oig_cloud/battery_forecast/strategy/hybrid.py new file mode 100644 index 00000000..f85e1db8 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/strategy/hybrid.py @@ -0,0 +1,700 @@ +"""Hybrid Strategy - optimizes mode selection for cost/efficiency. + +This strategy selects the optimal CBB mode for each interval based on: +- Spot prices (buy and export) +- Solar forecast +- Consumption forecast +- Battery state +- Balancing constraints + +The optimizer uses a forward simulation approach with scoring. +""" + +import logging +from dataclasses import dataclass, field +from typing import Dict, List, Optional, Tuple + +from ..config import HybridConfig, SimulatorConfig +from ..physics import IntervalSimulator +from ..types import CBB_MODE_HOME_I, CBB_MODE_HOME_UPS, CBB_MODE_NAMES, SpotPrice +from . import hybrid_planning as hybrid_planning_module +from . import hybrid_scoring as hybrid_scoring_module +from .balancing import StrategyBalancingPlan + +_LOGGER = logging.getLogger(__name__) + +HOME_III_LABEL = "HOME III" +HOME_UPS_LABEL = "HOME UPS" + + +@dataclass +class IntervalDecision: + """Decision for a single interval.""" + + mode: int # Selected mode (0-3) + mode_name: str # Human readable name + reason: str # Why this mode was selected + + # Simulation result for this mode + battery_end: float # Battery at end of interval + grid_import: float # kWh imported + grid_export: float # kWh exported + cost_czk: float # Net cost + + # Alternatives considered + scores: Dict[int, float] = field(default_factory=dict) # mode -> score + + # Flags + is_balancing: bool = False + is_holding: bool = False + is_negative_price: bool = False + + +@dataclass +class HybridResult: + """Result of hybrid optimization.""" + + # Decisions for each interval + decisions: List[IntervalDecision] + + # Aggregated metrics + total_cost_czk: float + baseline_cost_czk: float # Cost with HOME I only + savings_czk: float + + total_grid_import_kwh: float + total_grid_export_kwh: float + final_battery_kwh: float + + # Mode distribution + mode_counts: Dict[str, int] + ups_intervals: int + + # Timing + calculation_time_ms: float + + # Flags + negative_prices_detected: bool + balancing_applied: bool + infeasible: bool = False + infeasible_reason: Optional[str] = None + + @property + def modes(self) -> List[int]: + """List of modes for each interval.""" + return [d.mode for d in self.decisions] + + @property + def savings_percent(self) -> float: + """Savings as percentage of baseline.""" + if self.baseline_cost_czk <= 0: + return 0.0 + return (self.savings_czk / self.baseline_cost_czk) * 100.0 + + +class HybridStrategy: + """Strategy for optimizing mode selection across intervals. + + This is the main optimization layer that decides which CBB mode + to use for each 15-minute interval. + + Algorithm (Backward Propagation): + 1. First pass: Simulate with HOME I only to find where battery drops below planning_min + 2. Backward propagation: For each problem interval, find cheapest unused interval BEFORE it + 3. Mark that interval for charging (HOME UPS) + 4. Repeat until no interval drops below planning_min + 5. Final pass: Generate decisions with marked charging intervals + + This ensures: + - Battery never drops below planning_min + - Charging happens at cheapest possible times + - Forward-looking optimization without complex ROI calculations + + Example: + config = HybridConfig(planning_min_percent=20.0, target_percent=80.0) + simulator_config = SimulatorConfig(max_capacity_kwh=15.36) + + strategy = HybridStrategy(config, simulator_config) + + result = strategy.optimize( + initial_battery_kwh=10.0, + spot_prices=[...], + solar_forecast=[...], + consumption_forecast=[...], + balancing_plan=None, + ) + + print(f"Modes: {result.modes}") + print(f"Savings: {result.savings_czk:.2f} CZK") + """ + + # Max iterations for backward propagation to prevent infinite loops + MAX_ITERATIONS = 100 + + # Charge rate per interval (kWh) - how much we can charge in 15 min + CHARGE_PER_INTERVAL = 1.25 # ~5kW * 0.25h + + # Legacy constants for compatibility + LOOKAHEAD_INTERVALS = 24 # Look 6 hours ahead (24 * 15min) + MIN_PRICE_SPREAD_PERCENT = 15.0 # Min price spread to justify charging (%) + MIN_UPS_PRICE_BAND_PCT = 0.08 # Minimum price band for UPS continuity (8%) + + def __init__( + self, + config: HybridConfig, + simulator_config: SimulatorConfig, + ) -> None: + """Initialize strategy. + + Args: + config: Hybrid optimization configuration + simulator_config: Simulator configuration + """ + self.config = config + self.sim_config = simulator_config + self.simulator = IntervalSimulator(simulator_config) + + # Cache derived values + self._planning_min = config.planning_min_kwh(simulator_config.max_capacity_kwh) + self._target = config.target_kwh(simulator_config.max_capacity_kwh) + self._max = simulator_config.max_capacity_kwh + + def optimize( + self, + initial_battery_kwh: float, + spot_prices: List[SpotPrice], + solar_forecast: List[float], + consumption_forecast: List[float], + balancing_plan: Optional[StrategyBalancingPlan] = None, + export_prices: Optional[List[float]] = None, + ) -> HybridResult: + """Optimize mode selection using backward propagation algorithm. + + Algorithm: + 1. First pass: Simulate with HOME I to find intervals where battery < planning_min + 2. Backward propagation: For each problem, find cheapest unused interval BEFORE it + 3. Mark that interval for charging (HOME UPS) + 4. Repeat until no interval drops below planning_min + 5. Final pass: Generate decisions with marked charging intervals + + Args: + initial_battery_kwh: Starting battery level + spot_prices: Spot price for each interval + solar_forecast: Solar production per interval (kWh) + consumption_forecast: Load per interval (kWh) + balancing_plan: Optional balancing constraints + export_prices: Optional explicit export prices (default: 85% of spot) + + Returns: + HybridResult with optimized modes and metrics + """ + import time + + start_time = time.time() + + n_intervals = len(spot_prices) + + # Extract prices + prices = self._extract_prices(spot_prices) + exports = export_prices or [p * 0.85 for p in prices] + + # Detect negative prices + negative_prices = [i for i, p in enumerate(prices) if p < 0] + has_negative = len(negative_prices) > 0 + + # Step 1: Plan charging intervals using backward propagation + ( + charging_intervals, + infeasible_reason, + price_band_intervals, + ) = self._plan_charging_intervals( + initial_battery_kwh=initial_battery_kwh, + prices=prices, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + balancing_plan=balancing_plan, + negative_price_intervals=negative_prices, + ) + infeasible = infeasible_reason is not None + + _LOGGER.debug( + "Backward propagation planned %d charging intervals: %s", + len(charging_intervals), + sorted(charging_intervals)[:10], + ) + + # Step 2: Final pass - generate decisions with planned charging. + decisions = self._build_decisions( + n_intervals=n_intervals, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + exports=exports, + charging_intervals=charging_intervals, + price_band_intervals=price_band_intervals, + balancing_plan=balancing_plan, + ) + + # Apply smoothing to avoid rapid mode changes (recompute outputs after changes). + smoothed = self._apply_smoothing( + decisions=decisions, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + export_prices=exports, + ) + + if smoothed is not decisions: + decisions = smoothed + + battery, totals, mode_counts = self._recompute_totals( + decisions=decisions, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + exports=exports, + ) + + # Calculate baseline (HOME I only) + baseline_cost = self._calculate_baseline_cost( + initial_battery_kwh, solar_forecast, consumption_forecast, prices, exports + ) + + calc_time = (time.time() - start_time) * 1000 + + return HybridResult( + decisions=decisions, + total_cost_czk=totals["cost"], + baseline_cost_czk=baseline_cost, + savings_czk=baseline_cost - totals["cost"], + total_grid_import_kwh=totals["import"], + total_grid_export_kwh=totals["export"], + final_battery_kwh=battery, + mode_counts=mode_counts, + ups_intervals=mode_counts[HOME_UPS_LABEL], + calculation_time_ms=calc_time, + negative_prices_detected=has_negative, + balancing_applied=balancing_plan is not None and balancing_plan.is_active, + infeasible=infeasible, + infeasible_reason=infeasible_reason, + ) + + def _build_decisions( + self, + *, + n_intervals: int, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + exports: List[float], + charging_intervals: set[int], + price_band_intervals: set[int], + balancing_plan: Optional[StrategyBalancingPlan], + ) -> List[IntervalDecision]: + decisions: List[IntervalDecision] = [] + battery = initial_battery_kwh + for i in range(n_intervals): + solar = solar_forecast[i] if i < len(solar_forecast) else 0.0 + load = consumption_forecast[i] if i < len(consumption_forecast) else 0.125 + price = prices[i] + export_price = exports[i] + + is_balancing = balancing_plan and i in balancing_plan.charging_intervals + is_holding = balancing_plan and i in balancing_plan.holding_intervals + is_charging = i in charging_intervals + is_price_band = i in price_band_intervals + is_negative = price < 0 + override_mode = ( + balancing_plan.mode_overrides.get(i) + if balancing_plan and balancing_plan.mode_overrides + else None + ) + + mode, reason = self._determine_mode( + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + is_balancing=bool(is_balancing), + is_holding=bool(is_holding), + is_charging=is_charging, + is_price_band=is_price_band, + is_negative=is_negative, + override_mode=override_mode, + ) + + result = self.simulator.simulate( + battery_start=battery, + mode=mode, + solar_kwh=solar, + load_kwh=load, + force_charge=(mode == CBB_MODE_HOME_UPS) + and (is_balancing or is_charging), + ) + cost = self.simulator.calculate_cost(result, price, export_price) + + decisions.append( + IntervalDecision( + mode=mode, + mode_name=CBB_MODE_NAMES.get(mode, "UNKNOWN"), + reason=reason, + battery_end=result.battery_end, + grid_import=result.grid_import, + grid_export=result.grid_export, + cost_czk=cost, + is_balancing=is_balancing, + is_holding=is_holding, + is_negative_price=is_negative, + ) + ) + + battery = result.battery_end + + return decisions + + def _recompute_totals( + self, + *, + decisions: List[IntervalDecision], + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + exports: List[float], + ) -> tuple[float, Dict[str, float], Dict[str, int]]: + totals = {"cost": 0.0, "import": 0.0, "export": 0.0} + mode_counts = { + "HOME I": 0, + "HOME II": 0, + HOME_III_LABEL: 0, + HOME_UPS_LABEL: 0, + } + battery = initial_battery_kwh + for i, decision in enumerate(decisions): + battery = self._recompute_decision_metrics( + decision, + index=i, + battery=battery, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + exports=exports, + totals=totals, + mode_counts=mode_counts, + ) + return battery, totals, mode_counts + + def _determine_mode( + self, + *, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + is_balancing: bool, + is_holding: bool, + is_charging: bool, + is_price_band: bool, + is_negative: bool, + override_mode: Optional[int], + ) -> tuple[int, str]: + if override_mode is not None: + if is_holding: + return override_mode, "holding_period" + if is_balancing: + return override_mode, "balancing_charge" + return override_mode, "balancing_override" + + if is_holding: + return CBB_MODE_HOME_UPS, "holding_period" + if is_balancing: + return CBB_MODE_HOME_UPS, "balancing_charge" + if is_negative: + return self._handle_negative_price( + battery, solar, load, price, export_price + ) + if is_charging: + if is_price_band: + return CBB_MODE_HOME_UPS, "price_band_hold" + return CBB_MODE_HOME_UPS, f"planned_charge_{price:.2f}CZK" + return CBB_MODE_HOME_I, "default_discharge" + + def _recompute_decision_metrics( + self, + decision: IntervalDecision, + *, + index: int, + battery: float, + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + exports: List[float], + totals: Dict[str, float], + mode_counts: Dict[str, int], + ) -> float: + solar = solar_forecast[index] if index < len(solar_forecast) else 0.0 + load = ( + consumption_forecast[index] + if index < len(consumption_forecast) + else 0.125 + ) + price = prices[index] + export_price = exports[index] + + result = self.simulator.simulate( + battery_start=battery, + mode=decision.mode, + solar_kwh=solar, + load_kwh=load, + force_charge=(decision.mode == CBB_MODE_HOME_UPS) + and (decision.is_balancing or decision.is_holding), + ) + cost = self.simulator.calculate_cost(result, price, export_price) + + decision.battery_end = result.battery_end + decision.grid_import = result.grid_import + decision.grid_export = result.grid_export + decision.cost_czk = cost + + totals["cost"] += cost + totals["import"] += result.grid_import + totals["export"] += result.grid_export + mode_counts[CBB_MODE_NAMES.get(decision.mode, HOME_III_LABEL)] += 1 + + return result.battery_end + + def _plan_charging_intervals( + self, + initial_battery_kwh: float, + prices: List[float], + solar_forecast: List[float], + consumption_forecast: List[float], + balancing_plan: Optional[StrategyBalancingPlan] = None, + negative_price_intervals: Optional[List[int]] = None, + ) -> Tuple[set[int], Optional[str], set[int]]: + """Proxy to planning helpers.""" + return hybrid_planning_module.plan_charging_intervals( + self, + initial_battery_kwh=initial_battery_kwh, + prices=prices, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + balancing_plan=balancing_plan, + negative_price_intervals=negative_price_intervals, + ) + + def _get_price_band_delta_pct(self) -> float: + """Proxy to planning helpers.""" + return hybrid_planning_module.get_price_band_delta_pct(self) + + def _extend_ups_blocks_by_price_band( + self, + *, + charging_intervals: set[int], + prices: List[float], + blocked_indices: set[int], + ) -> set[int]: + """Proxy to planning helpers.""" + return hybrid_planning_module.extend_ups_blocks_by_price_band( + self, + charging_intervals=charging_intervals, + prices=prices, + blocked_indices=blocked_indices, + ) + + def _simulate_trajectory( + self, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + ) -> List[float]: + """Proxy to planning helpers.""" + return hybrid_planning_module.simulate_trajectory( + self, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + ) + + def _extract_prices(self, spot_prices: List[SpotPrice]) -> List[float]: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.extract_prices(spot_prices) + + def _analyze_future_prices( + self, + prices: List[float], + export_prices: List[float], + consumption_forecast: List[float], + ) -> Dict[int, Dict[str, float]]: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.analyze_future_prices( + self, + prices=prices, + export_prices=export_prices, + consumption_forecast=consumption_forecast, + ) + + def _select_best_mode( + self, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + cheap_threshold: float, + expensive_threshold: float, + very_cheap: float, + future_info: Optional[Dict[str, float]] = None, + ) -> Tuple[int, str, Dict[int, float]]: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.select_best_mode( + self, + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + cheap_threshold=cheap_threshold, + expensive_threshold=expensive_threshold, + very_cheap=very_cheap, + future_info=future_info, + ) + + def _score_mode( + self, + mode: int, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + cheap_threshold: float, + expected_saving: float = 0.0, + is_relatively_cheap: bool = False, + ) -> float: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.score_mode( + self, + mode=mode, + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + cheap_threshold=cheap_threshold, + expected_saving=expected_saving, + is_relatively_cheap=is_relatively_cheap, + ) + + def _handle_negative_price( + self, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + ) -> Tuple[int, str]: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.handle_negative_price( + self, + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + ) + + def _apply_smoothing( + self, + decisions: List[IntervalDecision], + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + export_prices: List[float], + ) -> List[IntervalDecision]: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.apply_smoothing( + self, + decisions=decisions, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + export_prices=export_prices, + ) + + def _calculate_baseline_cost( + self, + initial_battery: float, + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + export_prices: List[float], + ) -> float: + """Proxy to scoring helpers.""" + return hybrid_scoring_module.calculate_baseline_cost( + self, + initial_battery=initial_battery, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + prices=prices, + export_prices=export_prices, + ) + + +# ============================================================================= +# Utility functions +# ============================================================================= + + +def calculate_optimal_mode( + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + config: HybridConfig, + sim_config: SimulatorConfig, +) -> Tuple[int, str]: + """Quick calculation of optimal mode for a single interval. + + Useful for real-time decisions without full optimization. + + Args: + battery: Current battery level (kWh) + solar: Solar production (kWh) + load: Consumption (kWh) + price: Spot price (CZK/kWh) + export_price: Export price (CZK/kWh) + config: Hybrid configuration + sim_config: Simulator configuration + + Returns: + Tuple of (mode, reason) + """ + strategy = HybridStrategy(config, sim_config) + + # Use simplified scoring + avg_price = 2.0 # Assume average + cheap = avg_price * 0.75 + expensive = avg_price * 1.25 + very_cheap = avg_price * 0.5 + + mode, reason, _ = strategy._select_best_mode( + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + cheap_threshold=cheap, + expensive_threshold=expensive, + very_cheap=very_cheap, + ) + + return mode, reason diff --git a/custom_components/oig_cloud/battery_forecast/strategy/hybrid_planning.py b/custom_components/oig_cloud/battery_forecast/strategy/hybrid_planning.py new file mode 100644 index 00000000..51870981 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/strategy/hybrid_planning.py @@ -0,0 +1,674 @@ +"""Hybrid strategy planning helpers.""" + +from __future__ import annotations + +import logging +from typing import List, Optional, Tuple + +from ..config import NegativePriceStrategy +from ..types import CBB_MODE_HOME_I, CBB_MODE_HOME_UPS +from .balancing import StrategyBalancingPlan + +_LOGGER = logging.getLogger(__name__) + + +def plan_charging_intervals( + strategy, + *, + initial_battery_kwh: float, + prices: List[float], + solar_forecast: List[float], + consumption_forecast: List[float], + balancing_plan: Optional[StrategyBalancingPlan] = None, + negative_price_intervals: Optional[List[int]] = None, +) -> Tuple[set[int], Optional[str], set[int]]: + """Plan charging intervals with planning-min enforcement and price guard.""" + n = len(prices) + charging_intervals: set[int] = set() + price_band_intervals: set[int] = set() + infeasible_reason: Optional[str] = None + eps_kwh = 0.01 + recovery_mode = initial_battery_kwh < strategy._planning_min - eps_kwh + blocked_indices = _build_blocked_indices(balancing_plan, n) + _seed_charging_intervals( + strategy, + charging_intervals=charging_intervals, + balancing_plan=balancing_plan, + negative_price_intervals=negative_price_intervals, + blocked_indices=blocked_indices, + n=n, + ) + add_ups_interval = _build_add_ups_interval( + strategy, + charging_intervals=charging_intervals, + prices=prices, + blocked_indices=blocked_indices, + n=n, + ) + + recovery_index = 0 + if recovery_mode: + recovery_index, infeasible_reason, recovered = _run_recovery( + strategy, + initial_battery_kwh=initial_battery_kwh, + prices=prices, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + add_ups_interval=add_ups_interval, + eps_kwh=eps_kwh, + ) + if not recovered: + return charging_intervals, infeasible_reason, price_band_intervals + + infeasible_reason = _apply_repair_and_target( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + prices=prices, + recovery_index=recovery_index, + add_ups_interval=add_ups_interval, + infeasible_reason=infeasible_reason, + n=n, + eps_kwh=eps_kwh, + ) + + infeasible_reason = _finalize_infeasible_reason( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + recovery_index=recovery_index, + eps_kwh=eps_kwh, + infeasible_reason=infeasible_reason, + ) + + if not recovery_mode: + price_band_intervals = _apply_price_band_extension( + strategy, + charging_intervals=charging_intervals, + prices=prices, + blocked_indices=blocked_indices, + ) + + return charging_intervals, infeasible_reason, price_band_intervals + + +def _build_add_ups_interval( + strategy, + *, + charging_intervals: set[int], + prices: List[float], + blocked_indices: set[int], + n: int, +): + def add_ups_interval(idx: int, *, allow_expensive: bool = False) -> None: + if idx in blocked_indices: + return + charging_intervals.add(idx) + min_len = max(1, strategy.config.min_ups_duration_intervals) + if min_len <= 1: + return + max_price = strategy.config.max_ups_price_czk + for offset in range(1, min_len): + next_idx = idx + offset + if next_idx >= n: + break + if next_idx in blocked_indices or next_idx in charging_intervals: + continue + if allow_expensive or prices[next_idx] <= max_price: + charging_intervals.add(next_idx) + + return add_ups_interval + + +def _apply_repair_and_target( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + prices: List[float], + recovery_index: int, + add_ups_interval, + infeasible_reason: Optional[str], + n: int, + eps_kwh: float, +) -> Optional[str]: + buffer = 0.5 + infeasible_reason = _repair_plan_before_min( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + prices=prices, + recovery_index=recovery_index, + buffer=buffer, + add_ups_interval=add_ups_interval, + infeasible_reason=infeasible_reason, + n=n, + ) + + _reach_target_soc( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + prices=prices, + add_ups_interval=add_ups_interval, + eps_kwh=eps_kwh, + ) + return infeasible_reason + + +def _build_blocked_indices( + balancing_plan: Optional[StrategyBalancingPlan], n: int +) -> set[int]: + if not balancing_plan or not balancing_plan.mode_overrides: + return set() + return { + idx + for idx, mode in balancing_plan.mode_overrides.items() + if mode != CBB_MODE_HOME_UPS and 0 <= idx < n + } + + +def _seed_charging_intervals( + strategy, + *, + charging_intervals: set[int], + balancing_plan: Optional[StrategyBalancingPlan], + negative_price_intervals: Optional[List[int]], + blocked_indices: set[int], + n: int, +) -> None: + if balancing_plan: + for idx in balancing_plan.charging_intervals: + if 0 <= idx < n and idx not in blocked_indices: + charging_intervals.add(idx) + + if ( + negative_price_intervals + and strategy.config.negative_price_strategy == NegativePriceStrategy.CHARGE_GRID + ): + for idx in negative_price_intervals: + if 0 <= idx < n and idx not in blocked_indices: + charging_intervals.add(idx) + + +def _run_recovery( + strategy, + *, + initial_battery_kwh: float, + prices: List[float], + solar_forecast: List[float], + consumption_forecast: List[float], + add_ups_interval, + eps_kwh: float, +) -> Tuple[int, Optional[str], bool]: + recovery_index = 0 + infeasible_reason: Optional[str] = None + soc = initial_battery_kwh + n = len(prices) + + for i in range(n): + if soc >= strategy._planning_min - eps_kwh: + recovery_index = max(0, i - 1) + break + + price = prices[i] + if price > strategy.config.max_ups_price_czk and infeasible_reason is None: + infeasible_reason = ( + "Battery below planning minimum at start; " + f"interval {i} exceeds max_ups_price_czk={strategy.config.max_ups_price_czk}" + ) + add_ups_interval(i, allow_expensive=price > strategy.config.max_ups_price_czk) + + solar = solar_forecast[i] if i < len(solar_forecast) else 0.0 + load = consumption_forecast[i] if i < len(consumption_forecast) else 0.125 + res = strategy.simulator.simulate( + battery_start=soc, + mode=CBB_MODE_HOME_UPS, + solar_kwh=solar, + load_kwh=load, + force_charge=True, + ) + soc = res.battery_end + + if recovery_index == 0 and soc >= strategy._planning_min - eps_kwh: + recovery_index = n - 1 + + if soc < strategy._planning_min - eps_kwh: + if infeasible_reason is None: + infeasible_reason = ( + "Battery below planning minimum at start and could not recover within planning horizon" + ) + return recovery_index, infeasible_reason, False + + return recovery_index, infeasible_reason, True + + +def _repair_plan_before_min( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + prices: List[float], + recovery_index: int, + buffer: float, + add_ups_interval, + infeasible_reason: Optional[str], + n: int, +) -> Optional[str]: + for _ in range(strategy.MAX_ITERATIONS): + infeasible_reason, should_stop = _repair_iteration( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + prices=prices, + recovery_index=recovery_index, + buffer=buffer, + add_ups_interval=add_ups_interval, + infeasible_reason=infeasible_reason, + n=n, + ) + if should_stop: + break + + return infeasible_reason + + +def _repair_iteration( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + prices: List[float], + recovery_index: int, + buffer: float, + add_ups_interval, + infeasible_reason: Optional[str], + n: int, +) -> tuple[Optional[str], bool]: + battery_trajectory = simulate_trajectory( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + ) + + violation_idx = _find_violation_idx( + battery_trajectory, + recovery_index=recovery_index, + min_level=strategy._planning_min + buffer, + ) + if violation_idx is None: + return infeasible_reason, True + + candidate = _pick_repair_candidate( + strategy, + prices=prices, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + violation_idx=violation_idx, + ) + if candidate is None: + infeasible_reason = _mark_infeasible_before_violation( + strategy, + infeasible_reason=infeasible_reason, + violation_idx=violation_idx, + add_ups_interval=add_ups_interval, + n=n, + ) + return infeasible_reason, True + + add_ups_interval(candidate) + return infeasible_reason, False + + +def _find_violation_idx( + battery_trajectory: List[float], + *, + recovery_index: int, + min_level: float, +) -> Optional[int]: + for i in range(recovery_index + 1, len(battery_trajectory)): + if battery_trajectory[i] < min_level: + return i + return None + + +def _mark_infeasible_before_violation( + strategy, + *, + infeasible_reason: Optional[str], + violation_idx: int, + add_ups_interval, + n: int, +) -> Optional[str]: + if infeasible_reason is None: + infeasible_reason = ( + f"No UPS interval <= max_ups_price_czk={strategy.config.max_ups_price_czk} " + f"available before violation index {violation_idx}" + ) + for idx in range(0, min(n, violation_idx + 1)): + add_ups_interval(idx, allow_expensive=True) + return infeasible_reason + + +def _pick_repair_candidate( + strategy, + *, + prices: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + violation_idx: int, +) -> Optional[int]: + return _find_cheapest_candidate( + prices=prices, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + max_price=strategy.config.max_ups_price_czk, + limit=violation_idx + 1, + ) + + +def _reach_target_soc( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + prices: List[float], + add_ups_interval, + eps_kwh: float, +) -> None: + if strategy._target <= strategy._planning_min + eps_kwh: + return + + for _ in range(strategy.MAX_ITERATIONS): + battery_trajectory = simulate_trajectory( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + ) + max_soc = max(battery_trajectory) if battery_trajectory else initial_battery_kwh + if max_soc >= strategy._target - eps_kwh: + break + + candidate = _find_cheapest_candidate( + prices=prices, + charging_intervals=charging_intervals, + blocked_indices=blocked_indices, + max_price=strategy.config.max_ups_price_czk, + limit=len(prices), + ) + if candidate is None: + break + + add_ups_interval(candidate) + + +def _finalize_infeasible_reason( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], + recovery_index: int, + eps_kwh: float, + infeasible_reason: Optional[str], +) -> Optional[str]: + final_trajectory = simulate_trajectory( + strategy, + initial_battery_kwh=initial_battery_kwh, + solar_forecast=solar_forecast, + consumption_forecast=consumption_forecast, + charging_intervals=charging_intervals, + ) + start_idx = recovery_index + 1 if recovery_index is not None else 0 + for i in range(start_idx, len(final_trajectory)): + if final_trajectory[i] < strategy._planning_min - eps_kwh: + if infeasible_reason is None: + infeasible_reason = ( + "Planner could not satisfy planning minimum " + f"(first violation at index {i})" + ) + break + return infeasible_reason + + +def _apply_price_band_extension( + strategy, + *, + charging_intervals: set[int], + prices: List[float], + blocked_indices: set[int], +) -> set[int]: + original_charging = set(charging_intervals) + price_band_intervals = extend_ups_blocks_by_price_band( + strategy, + charging_intervals=original_charging, + prices=prices, + blocked_indices=blocked_indices, + ) + if price_band_intervals: + charging_intervals |= price_band_intervals + _LOGGER.debug( + "Price-band UPS extension added %d intervals (delta=%.1f%%)", + len(price_band_intervals), + get_price_band_delta_pct(strategy) * 100, + ) + return price_band_intervals + + +def _find_cheapest_candidate( + *, + prices: List[float], + charging_intervals: set[int], + blocked_indices: set[int], + max_price: float, + limit: int, +) -> Optional[int]: + candidate = None + candidate_price = None + for idx in range(0, min(len(prices), limit)): + if idx in charging_intervals or idx in blocked_indices: + continue + price = prices[idx] + if price > max_price: + continue + if candidate is None or price < candidate_price: + candidate = idx + candidate_price = price + return candidate + + +def get_price_band_delta_pct(strategy) -> float: + """Compute price band delta from battery efficiency (min 8%).""" + eff = getattr(strategy.sim_config, "ac_dc_efficiency", None) + try: + eff_val = float(eff) + except (TypeError, ValueError): + eff_val = 0.0 + + if eff_val <= 0 or eff_val > 1.0: + return strategy.MIN_UPS_PRICE_BAND_PCT + + derived = (1.0 / eff_val) - 1.0 + return max(strategy.MIN_UPS_PRICE_BAND_PCT, derived) + + +def extend_ups_blocks_by_price_band( + strategy, + *, + charging_intervals: set[int], + prices: List[float], + blocked_indices: set[int], +) -> set[int]: + """Extend UPS blocks forward when prices stay within efficiency-based band.""" + if not charging_intervals or not prices: + return set() + + max_price = float(strategy.config.max_ups_price_czk) + delta_pct = get_price_band_delta_pct(strategy) + n = len(prices) + + ups_flags = [False] * n + for idx in charging_intervals: + if 0 <= idx < n: + ups_flags[idx] = True + + lookahead = 4 # 1h window (4x 15min) to avoid holding through a price drop. + can_extend = _build_can_extend( + prices=prices, + blocked_indices=blocked_indices, + max_price=max_price, + delta_pct=delta_pct, + lookahead=lookahead, + n=n, + ) + + extended: set[int] = set() + + _extend_forward( + ups_flags, + charging_intervals=charging_intervals, + extended=extended, + can_extend=can_extend, + ) + _fill_single_gaps( + ups_flags, + charging_intervals=charging_intervals, + extended=extended, + can_extend=can_extend, + ) + _extend_forward( + ups_flags, + charging_intervals=charging_intervals, + extended=extended, + can_extend=can_extend, + ) + + return extended + + +def _build_can_extend( + *, + prices: List[float], + blocked_indices: set[int], + max_price: float, + delta_pct: float, + lookahead: int, + n: int, +): + def _has_cheaper_ahead(current_idx: int) -> bool: + current_price = prices[current_idx] + limit = min(n, current_idx + lookahead + 1) + for future_idx in range(current_idx + 1, limit): + if prices[future_idx] < current_price * (1.0 - delta_pct): + return True + return False + + def _can_extend(prev_idx: int, idx: int) -> bool: + if idx in blocked_indices: + return False + prev_price = prices[prev_idx] + if prev_price > max_price: + return False + price = prices[idx] + if price > max_price: + return False + if _has_cheaper_ahead(idx): + return False + return price <= prev_price * (1.0 + delta_pct) + + return _can_extend + + +def _extend_forward( + ups_flags: list[bool], + *, + charging_intervals: set[int], + extended: set[int], + can_extend, +) -> None: + for i in range(1, len(ups_flags)): + if ups_flags[i - 1] and not ups_flags[i] and can_extend(i - 1, i): + ups_flags[i] = True + if i not in charging_intervals: + extended.add(i) + + +def _fill_single_gaps( + ups_flags: list[bool], + *, + charging_intervals: set[int], + extended: set[int], + can_extend, +) -> None: + for i in range(1, len(ups_flags) - 1): + if ups_flags[i - 1] and (not ups_flags[i]) and ups_flags[i + 1]: + if can_extend(i - 1, i): + ups_flags[i] = True + if i not in charging_intervals: + extended.add(i) + + +def simulate_trajectory( + strategy, + *, + initial_battery_kwh: float, + solar_forecast: List[float], + consumption_forecast: List[float], + charging_intervals: set[int], +) -> List[float]: + """Simulate battery trajectory with given charging plan.""" + n = len(solar_forecast) + trajectory: List[float] = [] + battery = initial_battery_kwh + + for i in range(n): + solar = solar_forecast[i] if i < len(solar_forecast) else 0.0 + load = consumption_forecast[i] if i < len(consumption_forecast) else 0.125 + + # Use HOME UPS if charging, otherwise HOME I. + mode = CBB_MODE_HOME_UPS if i in charging_intervals else CBB_MODE_HOME_I + force_charge = i in charging_intervals + + result = strategy.simulator.simulate( + battery_start=battery, + mode=mode, + solar_kwh=solar, + load_kwh=load, + force_charge=force_charge, + ) + + battery = result.battery_end + trajectory.append(battery) + + return trajectory diff --git a/custom_components/oig_cloud/battery_forecast/strategy/hybrid_scoring.py b/custom_components/oig_cloud/battery_forecast/strategy/hybrid_scoring.py new file mode 100644 index 00000000..dfaf003f --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/strategy/hybrid_scoring.py @@ -0,0 +1,388 @@ +"""Hybrid strategy scoring helpers.""" + +from __future__ import annotations + +from typing import Any, Dict, List, Optional, Tuple + +from ..config import ChargingStrategy, NegativePriceStrategy +from ..types import ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, + SpotPrice, +) + + +def extract_prices(spot_prices: List[SpotPrice]) -> List[float]: + """Extract price values from SpotPrice objects.""" + prices: List[float] = [] + for sp in spot_prices: + if isinstance(sp, dict): + prices.append(float(sp.get("price", 0.0))) + else: + prices.append(float(sp)) + return prices + + +def analyze_future_prices( + strategy, + prices: List[float], + export_prices: List[float], + consumption_forecast: List[float], +) -> Dict[int, Dict[str, float]]: + """Analyze future prices for forward-looking optimization.""" + _ = export_prices + analysis: Dict[int, Dict[str, float]] = {} + n = len(prices) + + # Efficiency constants + ac_dc_eff = strategy.sim_config.ac_dc_efficiency + dc_ac_eff = strategy.sim_config.dc_ac_efficiency + + # Calculate night consumption (intervals 56-96 = 20:00-00:00) + night_start_idx = 56 + night_consumption = sum( + consumption_forecast[i] + for i in range(night_start_idx, min(n, night_start_idx + 20)) + if i < len(consumption_forecast) + ) + + for i in range(n): + current_price = prices[i] + + lookahead_end = min(i + strategy.LOOKAHEAD_INTERVALS, n) + future_prices = prices[i + 1 : lookahead_end] if i + 1 < n else [] + + if not future_prices: + analysis[i] = { + "max_future_price": current_price, + "avg_future_price": current_price, + "expected_saving": 0.0, + "should_charge": False, + "charge_reason": "no_future_data", + "night_deficit": 0.0, + } + continue + + max_future = max(future_prices) + avg_future = sum(future_prices) / len(future_prices) + min_future = min(future_prices) + + charge_cost = current_price / ac_dc_eff + discharge_value = max_future * dc_ac_eff + expected_saving = discharge_value - charge_cost + + min_spread = current_price * (strategy.MIN_PRICE_SPREAD_PERCENT / 100.0) + profitable = expected_saving > min_spread + + price_percentile = sum(1 for p in future_prices if p > current_price) + is_relatively_cheap = price_percentile >= len(future_prices) * 0.7 + + intervals_to_night = max(0, night_start_idx - i) + preparing_for_night = intervals_to_night < 20 and intervals_to_night > 0 + + should_charge = False + charge_reason = "not_profitable" + + if profitable and is_relatively_cheap: + should_charge = True + charge_reason = f"arbitrage_{expected_saving:.2f}CZK" + elif preparing_for_night and is_relatively_cheap: + should_charge = True + charge_reason = "night_preparation" + elif current_price < 0: + should_charge = True + charge_reason = "negative_price" + elif current_price < avg_future * 0.85: + should_charge = True + charge_reason = f"below_avg_{current_price:.2f}<{avg_future:.2f}" + elif is_relatively_cheap and current_price < min_future * 1.05: + should_charge = True + charge_reason = f"relative_cheap_{current_price:.2f}" + + analysis[i] = { + "max_future_price": max_future, + "avg_future_price": avg_future, + "min_future_price": min_future, + "expected_saving": expected_saving, + "should_charge": should_charge, + "charge_reason": charge_reason, + "is_relatively_cheap": is_relatively_cheap, + "preparing_for_night": preparing_for_night, + "night_deficit": night_consumption, + } + + return analysis + + +def select_best_mode( + strategy, + *, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + cheap_threshold: float, + expensive_threshold: float, + very_cheap: float, + future_info: Optional[Dict[str, float]] = None, +) -> Tuple[int, str, Dict[int, float]]: + """Select best mode based on scoring.""" + future_info = future_info or {} + scores = _score_modes( + strategy, + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + cheap_threshold=cheap_threshold, + future_info=future_info, + ) + best_mode = max(scores, key=lambda m: scores[m]) + reason = _select_mode_reason( + strategy, + best_mode=best_mode, + battery=battery, + solar=solar, + load=load, + price=price, + expensive_threshold=expensive_threshold, + very_cheap=very_cheap, + ) + return best_mode, reason, scores + + +def _score_modes( + strategy, + *, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + cheap_threshold: float, + future_info: Dict[str, float], +) -> Dict[int, float]: + scores: Dict[int, float] = {} + is_relatively_cheap = future_info.get("is_relatively_cheap", False) + expected_saving = future_info.get("expected_saving", 0.0) + + for mode in ( + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + ): + scores[mode] = score_mode( + strategy, + mode=mode, + battery=battery, + solar=solar, + load=load, + price=price, + export_price=export_price, + cheap_threshold=cheap_threshold, + expected_saving=expected_saving, + is_relatively_cheap=is_relatively_cheap, + ) + return scores + + +def _select_mode_reason( + strategy, + *, + best_mode: int, + battery: float, + solar: float, + load: float, + price: float, + expensive_threshold: float, + very_cheap: float, +) -> str: + if best_mode == CBB_MODE_HOME_UPS: + if price <= very_cheap: + return "very_cheap_grid_charge" + if battery < strategy._planning_min: + return "low_battery_charge" + return "opportunistic_charge" + if best_mode == CBB_MODE_HOME_III: + return "maximize_solar_storage" if solar > load else "preserve_battery_high_solar" + if best_mode == CBB_MODE_HOME_II: + return "preserve_battery_day" + return "expensive_use_battery" if price >= expensive_threshold else "normal_operation" + + +def score_mode( + strategy, + *, + mode: int, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, + cheap_threshold: float, + expected_saving: float = 0.0, + is_relatively_cheap: bool = False, +) -> float: + """Calculate score for a mode.""" + result = strategy.simulator.simulate( + battery_start=battery, + mode=mode, + solar_kwh=solar, + load_kwh=load, + ) + + cost = strategy.simulator.calculate_cost(result, price, export_price) + + score = -cost * strategy.config.weight_cost + + if result.battery_end >= strategy._planning_min: + score += 0.5 * strategy.config.weight_battery_preservation + if result.battery_end >= strategy._target: + score += 0.3 * strategy.config.weight_battery_preservation + + if result.solar_used_direct > 0: + score += result.solar_used_direct * strategy.config.weight_self_consumption + + if result.battery_end < strategy._planning_min: + deficit = strategy._planning_min - result.battery_end + score -= deficit * 2.0 + + if mode == CBB_MODE_HOME_UPS: + if strategy.config.charging_strategy == ChargingStrategy.DISABLED: + score -= 100.0 + elif price > strategy.config.max_ups_price_czk: + score -= 10.0 + elif price <= cheap_threshold: + score += 1.0 + + if expected_saving > 0 and is_relatively_cheap: + score += expected_saving * 0.5 + if is_relatively_cheap and battery < strategy._target: + score += 0.5 + + return score + + +def handle_negative_price( + strategy, + *, + battery: float, + solar: float, + load: float, + price: float, + export_price: float, +) -> Tuple[int, str]: + """Handle negative price intervals.""" + _ = load + _ = price + _ = export_price + strategy_mode = strategy.config.negative_price_strategy + + if strategy_mode == NegativePriceStrategy.CHARGE_GRID: + return CBB_MODE_HOME_UPS, "negative_price_charge" + if strategy_mode == NegativePriceStrategy.CURTAIL: + return CBB_MODE_HOME_III, "negative_price_curtail" + if strategy_mode == NegativePriceStrategy.CONSUME: + return CBB_MODE_HOME_I, "negative_price_consume" + + if battery < strategy._max - 1.0: + return CBB_MODE_HOME_UPS, "auto_negative_charge" + if solar > 0.5: + return CBB_MODE_HOME_III, "auto_negative_curtail" + return CBB_MODE_HOME_I, "auto_negative_consume" + + +def apply_smoothing( + strategy, + *, + decisions: List[Any], + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + export_prices: List[float], +) -> List[Any]: + """Apply smoothing to avoid rapid mode changes.""" + _ = solar_forecast + _ = consumption_forecast + _ = prices + _ = export_prices + if len(decisions) < 2: + return decisions + + min_duration = strategy.config.min_mode_duration_intervals + + for run_start, run_end, _mode in _iter_mode_runs(decisions): + run_length = run_end - run_start + if run_length >= min_duration: + continue + if _run_is_protected(decisions, run_start, run_end): + continue + _merge_run_with_previous(decisions, run_start, run_end) + + return decisions + + +def _iter_mode_runs(decisions: List[Any]): + i = 0 + while i < len(decisions): + mode = decisions[i].mode + run_start = i + while i < len(decisions) and decisions[i].mode == mode: + i += 1 + yield run_start, i, mode + + +def _run_is_protected(decisions: List[Any], run_start: int, run_end: int) -> bool: + return any( + decisions[j].is_balancing or decisions[j].is_holding + for j in range(run_start, run_end) + ) + + +def _merge_run_with_previous( + decisions: List[Any], run_start: int, run_end: int +) -> None: + if run_start <= 0: + return + prev_mode = decisions[run_start - 1].mode + for j in range(run_start, run_end): + decisions[j].mode = prev_mode + decisions[j].mode_name = CBB_MODE_NAMES.get(prev_mode, "UNKNOWN") + decisions[j].reason = "smoothing_merged" + + +def calculate_baseline_cost( + strategy, + *, + initial_battery: float, + solar_forecast: List[float], + consumption_forecast: List[float], + prices: List[float], + export_prices: List[float], +) -> float: + """Calculate cost with HOME I only (baseline).""" + battery = initial_battery + total_cost = 0.0 + + for i in range(len(prices)): + solar = solar_forecast[i] if i < len(solar_forecast) else 0.0 + load = consumption_forecast[i] if i < len(consumption_forecast) else 0.125 + + result = strategy.simulator.simulate( + battery_start=battery, + mode=CBB_MODE_HOME_I, + solar_kwh=solar, + load_kwh=load, + ) + + cost = strategy.simulator.calculate_cost(result, prices[i], export_prices[i]) + total_cost += cost + battery = result.battery_end + + return total_cost diff --git a/custom_components/oig_cloud/battery_forecast/task_utils.py b/custom_components/oig_cloud/battery_forecast/task_utils.py new file mode 100644 index 00000000..9dde2c34 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/task_utils.py @@ -0,0 +1,55 @@ +"""Async task helpers for battery forecast.""" + +from __future__ import annotations + +import asyncio +import logging +from datetime import datetime + +from homeassistant.helpers.event import async_call_later + +_LOGGER = logging.getLogger(__name__) + + +def schedule_forecast_retry(sensor, delay_seconds: float) -> None: + """Schedule a forecast retry with throttling.""" + if not sensor._hass or delay_seconds <= 0: + return + if sensor._forecast_retry_unsub: + return + + def _retry(now: datetime) -> None: + sensor._forecast_retry_unsub = None + create_task_threadsafe(sensor, sensor.async_update) + + sensor._forecast_retry_unsub = async_call_later(sensor._hass, delay_seconds, _retry) + + +def create_task_threadsafe(sensor, coro_func, *args) -> None: + """Create an HA task safely from any thread.""" + hass = getattr(sensor, "_hass", None) or getattr(sensor, "hass", None) + if not hass: + return + + def _runner() -> None: + try: + hass.async_create_task(coro_func(*args)) + except Exception as err: # pragma: no cover - defensive + _LOGGER.debug( + "Failed to schedule task %s: %s", + getattr(coro_func, "__name__", str(coro_func)), + err, + ) + + try: + loop = hass.loop + try: + running = asyncio.get_running_loop() + except RuntimeError: + running = None + if running is loop: + _runner() + else: + loop.call_soon_threadsafe(_runner) + except Exception: # pragma: no cover - defensive + _runner() diff --git a/custom_components/oig_cloud/battery_forecast/timeline/__init__.py b/custom_components/oig_cloud/battery_forecast/timeline/__init__.py new file mode 100644 index 00000000..1906e285 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/timeline/__init__.py @@ -0,0 +1,3 @@ +"""Timeline helpers for planner output.""" + +__all__: list[str] = [] diff --git a/custom_components/oig_cloud/battery_forecast/timeline/extended.py b/custom_components/oig_cloud/battery_forecast/timeline/extended.py new file mode 100644 index 00000000..1a29b597 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/timeline/extended.py @@ -0,0 +1,883 @@ +"""Extended timeline builders extracted from legacy battery forecast.""" + +from __future__ import annotations + +import logging +from datetime import date, datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + +from ..data import history as history_module +from .extended_summary import ( + build_today_tile_summary, + calculate_day_summary, + format_planned_data, +) + +_LOGGER = logging.getLogger(__name__) + +DATE_FMT = "%Y-%m-%d" +DATETIME_FMT = "%Y-%m-%dT%H:%M:%S" +UTC_OFFSET = "+00:00" + + +async def _load_storage_plans(sensor: Any) -> Dict[str, Any]: + if not getattr(sensor, "_plans_store", None): + return {} + try: + storage_plans = await sensor._plans_store.async_load() or {} + _LOGGER.debug( + "📦 Loaded Storage Helper data for timeline building: %s days", + len(storage_plans.get("detailed", {})), + ) + return storage_plans + except Exception as err: + _LOGGER.error("Failed to load Storage Helper data: %s", err) + return {} + + +def _get_day_source(day: date, today: date) -> str: + if day < today: + return "historical_only" + if day == today: + return "mixed" + return "planned_only" + + +async def _build_planned_intervals_map( + sensor: Any, + storage_plans: Dict[str, Any], + day: date, + date_str: str, +) -> Dict[str, Dict[str, Any]]: + planned_intervals_map: Dict[str, Dict[str, Any]] = {} + if not storage_plans: + return planned_intervals_map + + planned_intervals_list = await _load_planned_intervals_list( + sensor, storage_plans, date_str + ) + + for planned_entry in planned_intervals_list: + _add_planned_interval( + planned_intervals_map, + planned_entry, + day, + ) + + _LOGGER.debug( + "📊 Loaded %s planned intervals from Storage for %s", + len(planned_intervals_map), + date_str, + ) + return planned_intervals_map + + +def _add_planned_interval( + planned_intervals_map: Dict[str, Dict[str, Any]], + planned_entry: Dict[str, Any], + day: date, +) -> None: + time_key = planned_entry.get("time", "") + if not time_key: + return + try: + planned_dt = _parse_planned_time(time_key, day) + if not planned_dt: + return + planned_dt = dt_util.as_local(planned_dt) + time_str = planned_dt.strftime(DATETIME_FMT) + planned_intervals_map[time_str] = planned_entry + except Exception: # nosec B112 + return + + +async def _load_planned_intervals_list( + sensor: Any, storage_plans: Dict[str, Any], date_str: str +) -> List[Dict[str, Any]]: + planned_intervals_list: List[Dict[str, Any]] = [] + yesterday_plan = storage_plans.get("detailed", {}).get(date_str, {}) + if yesterday_plan and not sensor._is_baseline_plan_invalid(yesterday_plan): + return yesterday_plan.get("intervals", []) + + archive_day = storage_plans.get("daily_archive", {}).get(date_str, {}) + if archive_day and archive_day.get("plan"): + planned_intervals_list = archive_day.get("plan", []) + await _maybe_persist_archive_plan(sensor, date_str, planned_intervals_list) + return planned_intervals_list + + return yesterday_plan.get("intervals", []) + + +async def _maybe_persist_archive_plan( + sensor: Any, date_str: str, planned_intervals_list: List[Dict[str, Any]] +) -> None: + archive_plan = { + "intervals": planned_intervals_list, + "filled_intervals": None, + } + if sensor._plans_store and not sensor._is_baseline_plan_invalid(archive_plan): + try: + await sensor._save_plan_to_storage( + date_str, + planned_intervals_list, + {"baseline": True, "filled_intervals": None}, + ) + _LOGGER.info( + "Rebuilt baseline plan for %s from daily archive", + date_str, + ) + except Exception as err: + _LOGGER.debug( + "Failed to persist archive baseline for %s: %s", + date_str, + err, + ) + return + + _LOGGER.info( + "Using daily archive plan for %s (baseline invalid)", + date_str, + ) + + +async def _build_historical_actual_data( + sensor: Any, + interval_time: datetime, + mode_from_recorder: Dict[str, Any], +) -> Dict[str, Any]: + interval_end = interval_time + timedelta(minutes=15) + historical_metrics = await history_module.fetch_interval_from_history( + sensor, interval_time, interval_end + ) + + if historical_metrics: + return { + "mode": mode_from_recorder.get("mode", 0), + "mode_name": mode_from_recorder.get("mode_name", "Unknown"), + "consumption_kwh": historical_metrics.get("consumption_kwh", 0), + "solar_kwh": historical_metrics.get("solar_kwh", 0), + "battery_soc": historical_metrics.get("battery_soc", 0), + "battery_kwh": historical_metrics.get("battery_kwh", 0), + "grid_import_kwh": historical_metrics.get("grid_import", 0), + "grid_export_kwh": historical_metrics.get("grid_export", 0), + "net_cost": historical_metrics.get("net_cost", 0), + "savings": 0, + } + return { + "mode": mode_from_recorder.get("mode", 0), + "mode_name": mode_from_recorder.get("mode_name", "Unknown"), + "consumption_kwh": 0, + "solar_kwh": 0, + "battery_soc": 0, + "battery_kwh": 0, + "grid_import_kwh": 0, + "grid_export_kwh": 0, + "net_cost": 0, + "savings": 0, + } + + +def _parse_iso_datetime(time_str: str) -> Optional[datetime]: + try: + return datetime.fromisoformat(time_str.replace("Z", UTC_OFFSET)) + except (ValueError, TypeError): + return None + + +def _parse_planned_time( + time_str: str, day: date, _date_str: Optional[str] = None +) -> Optional[datetime]: + if not time_str: + return None + if "T" in time_str: + return _parse_iso_datetime(time_str) + try: + return datetime.combine(day, datetime.strptime(time_str, "%H:%M").time()) + except (ValueError, TypeError): + return None + + +def _planned_data_from_storage(planned_entry: Dict[str, Any]) -> Dict[str, Any]: + return { + "mode": planned_entry.get("mode", 0), + "mode_name": planned_entry.get("mode_name", "Unknown"), + "consumption_kwh": planned_entry.get("consumption_kwh", 0), + "solar_kwh": planned_entry.get("solar_kwh", 0), + "battery_soc": planned_entry.get("battery_soc", 0), + "net_cost": planned_entry.get("net_cost", 0), + } + + +async def _load_historical_modes( + sensor: Any, + source: str, + day_start: datetime, + day_end: datetime, + now: datetime, + date_str: str, +) -> Dict[str, Any]: + if source not in ("historical_only", "mixed") or not sensor._hass: + return {} + try: + fetch_end = day_end if source == "historical_only" else now + return await history_module.build_historical_modes_lookup( + sensor, + day_start=day_start, + fetch_end=fetch_end, + date_str=date_str, + source=source, + ) + except Exception as err: + _LOGGER.error( + "Failed to fetch historical modes from Recorder for %s: %s", + date_str, + err, + ) + return {} + + +async def _build_historical_only_intervals( + sensor: Any, + day: date, + day_start: datetime, + storage_plans: Dict[str, Any], + date_str: str, + historical_modes_lookup: Dict[str, Any], +) -> List[Dict[str, Any]]: + planned_intervals_map = await _build_planned_intervals_map( + sensor, storage_plans, day, date_str + ) + intervals: List[Dict[str, Any]] = [] + interval_time = day_start + while interval_time.date() == day: + interval_time_str = interval_time.strftime(DATETIME_FMT) + + mode_from_recorder = historical_modes_lookup.get(interval_time_str) + planned_from_storage = planned_intervals_map.get(interval_time_str, {}) + + actual_data = {} + if mode_from_recorder: + actual_data = await _build_historical_actual_data( + sensor, interval_time, mode_from_recorder + ) + + planned_data = ( + _planned_data_from_storage(planned_from_storage) + if planned_from_storage + else {} + ) + + mode_match = None + if actual_data and planned_data: + mode_match = actual_data.get("mode") == planned_data.get("mode") + + intervals.append( + { + "time": interval_time_str, + "status": "historical", + "planned": planned_data, + "actual": actual_data, + "delta": None, + "mode_match": mode_match, + } + ) + + interval_time += timedelta(minutes=15) + return intervals + + +def _load_past_planned_from_storage( + sensor: Any, + storage_plans: Dict[str, Any], + date_str: str, + day: date, +) -> tuple[List[Dict[str, Any]], bool, bool]: + past_planned: List[Dict[str, Any]] = [] + storage_day = storage_plans.get("detailed", {}).get(date_str) + storage_invalid = sensor._is_baseline_plan_invalid(storage_day) if storage_day else True + storage_missing = not storage_day or not storage_day.get("intervals") + if storage_day and storage_day.get("intervals") and not storage_invalid: + past_planned = storage_day["intervals"] + _LOGGER.debug( + "📦 Loaded %s planned intervals from Storage Helper for %s", + len(past_planned), + day, + ) + return past_planned, storage_missing, storage_invalid + + +async def _maybe_repair_baseline( + sensor: Any, + storage_plans: Dict[str, Any], + date_str: str, +) -> Dict[str, Any]: + if date_str in sensor._baseline_repair_attempts: + return storage_plans + sensor._baseline_repair_attempts.add(date_str) + _LOGGER.info("Baseline plan missing/invalid for %s, attempting rebuild", date_str) + try: + repaired = await sensor._create_baseline_plan(date_str) + except Exception as err: + _LOGGER.error( + "Baseline rebuild failed for %s: %s", + date_str, + err, + exc_info=True, + ) + repaired = False + if repaired: + return await _refresh_storage_after_repair(sensor, storage_plans, date_str) + return storage_plans + + +async def _refresh_storage_after_repair( + sensor: Any, storage_plans: Dict[str, Any], date_str: str +) -> Dict[str, Any]: + try: + refreshed_plans = await sensor._plans_store.async_load() or {} + storage_day = refreshed_plans.get("detailed", {}).get(date_str) + storage_invalid = ( + sensor._is_baseline_plan_invalid(storage_day) if storage_day else True + ) + if not storage_invalid and storage_day and storage_day.get("intervals"): + return refreshed_plans + except Exception as err: + _LOGGER.error( + "Failed to reload baseline plan after rebuild for %s: %s", + date_str, + err, + exc_info=True, + ) + return storage_plans + + +def _load_past_planned_from_daily_state( + sensor: Any, date_str: str, day: date +) -> List[Dict[str, Any]]: + if not getattr(sensor, "_daily_plan_state", None): + return [] + if sensor._daily_plan_state.get("date") != date_str: + return [] + past_planned: List[Dict[str, Any]] = [] + plan_intervals = sensor._daily_plan_state.get("plan", []) + plan_locked = bool(sensor._daily_plan_state.get("locked", False)) + if plan_intervals: + past_planned = plan_intervals + _LOGGER.info("Using in-memory daily plan for %s (baseline invalid)", date_str) + elif not plan_locked: + actual_intervals = sensor._daily_plan_state.get("actual", []) + for interval in actual_intervals: + if interval.get("time"): + past_planned.append(interval) + _LOGGER.debug( + "📋 Loaded %s intervals from _daily_plan_state for %s", + len(past_planned), + day, + ) + return past_planned + + +def _collect_future_planned( + all_timeline: List[Dict[str, Any]], + day: date, +) -> List[Dict[str, Any]]: + future_planned: List[Dict[str, Any]] = [] + parse_errors = 0 + wrong_date = 0 + for interval in all_timeline: + time_str = interval.get("time") + if time_str: + interval_dt = _parse_iso_datetime(time_str) + if not interval_dt: + parse_errors += 1 + continue + if interval_dt.date() == day: + future_planned.append(interval) + else: + wrong_date += 1 + _LOGGER.debug( + "📋 Future filter: %s kept, %s wrong_date, %s parse_errors (from %s total)", + len(future_planned), + wrong_date, + parse_errors, + len(all_timeline), + ) + return future_planned + + +def _build_planned_lookup( + past_planned: List[Dict[str, Any]], + future_planned: List[Dict[str, Any]], + date_str: str, + current_interval_naive: datetime, +) -> Dict[str, Dict[str, Any]]: + planned_lookup: Dict[str, Dict[str, Any]] = {} + _add_past_planned_entries( + planned_lookup, past_planned, date_str, current_interval_naive + ) + added_future, skipped_future = _add_future_planned_entries( + planned_lookup, future_planned, current_interval_naive + ) + + _LOGGER.debug( + "📋 Merge stats: added_future=%s, skipped_future=%s, current_interval=%s", + added_future, + skipped_future, + current_interval_naive, + ) + return planned_lookup + + +def _add_past_planned_entries( + planned_lookup: Dict[str, Dict[str, Any]], + past_planned: List[Dict[str, Any]], + date_str: str, + current_interval_naive: datetime, +) -> None: + for planned in past_planned: + time_str = planned.get("time") + if not time_str: + continue + if "T" not in time_str: + time_str = f"{date_str}T{time_str}:00" + interval_dt = _parse_iso_datetime(time_str) + if not interval_dt: + _LOGGER.warning("Failed to parse time_str: %s", time_str) + continue + interval_dt_naive = ( + interval_dt.replace(tzinfo=None) if interval_dt.tzinfo else interval_dt + ) + if interval_dt_naive < current_interval_naive: + planned_lookup[interval_dt.strftime(DATETIME_FMT)] = planned + + +def _add_future_planned_entries( + planned_lookup: Dict[str, Dict[str, Any]], + future_planned: List[Dict[str, Any]], + current_interval_naive: datetime, +) -> tuple[int, int]: + added_future = 0 + skipped_future = 0 + for planned in future_planned: + time_str = planned.get("time") + if not time_str: + continue + interval_dt = _parse_iso_datetime(time_str) + if not interval_dt: + _LOGGER.debug("Failed to parse time: %s", time_str) + continue + interval_dt_naive = ( + interval_dt.replace(tzinfo=None) if interval_dt.tzinfo else interval_dt + ) + if interval_dt_naive >= current_interval_naive: + planned_lookup[time_str] = planned + added_future += 1 + else: + skipped_future += 1 + return added_future, skipped_future + + +def _interval_status( + interval_time: datetime, current_interval_naive: datetime +) -> str: + interval_time_naive = ( + interval_time.replace(tzinfo=None) if interval_time.tzinfo else interval_time + ) + if interval_time_naive < current_interval_naive: + return "historical" + if interval_time_naive == current_interval_naive: + return "current" + return "planned" + + +async def _build_actual_data( + sensor: Any, + interval_time: datetime, + interval_time_str: str, + status: str, + planned_data: Dict[str, Any], + historical_modes_lookup: Dict[str, Any], +) -> Optional[Dict[str, Any]]: + if status not in ("historical", "current"): + return None + mode_from_recorder = historical_modes_lookup.get(interval_time_str) + if not mode_from_recorder: + return None + interval_end = interval_time + timedelta(minutes=15) + historical_metrics = await history_module.fetch_interval_from_history( + sensor, interval_time, interval_end + ) + if historical_metrics: + return { + "mode": mode_from_recorder.get("mode", 0), + "mode_name": mode_from_recorder.get("mode_name", "Unknown"), + "consumption_kwh": historical_metrics.get("consumption_kwh", 0), + "solar_kwh": historical_metrics.get("solar_kwh", 0), + "battery_soc": historical_metrics.get("battery_soc", 0), + "grid_import_kwh": historical_metrics.get("grid_import", 0), + "grid_export_kwh": historical_metrics.get("grid_export", 0), + "net_cost": historical_metrics.get("net_cost", 0), + "savings": 0, + } + return { + "mode": mode_from_recorder.get("mode", 0), + "mode_name": mode_from_recorder.get("mode_name", "Unknown"), + "consumption_kwh": 0, + "solar_kwh": 0, + "battery_soc": 0, + "grid_import_kwh": 0, + "grid_export_kwh": 0, + "net_cost": planned_data.get("net_cost", 0) if planned_data else 0, + "savings": 0, + } + + +def _apply_current_interval_data( + sensor: Any, + actual_data: Optional[Dict[str, Any]], + mode_names: Dict[int, str], +) -> Dict[str, Any]: + current_mode = sensor._get_current_mode() + current_mode_name = mode_names.get(current_mode, "HOME I") + current_soc = sensor._get_current_battery_soc_percent() + current_kwh = sensor._get_current_battery_capacity() + if actual_data is None: + actual_data = { + "consumption_kwh": 0, + "solar_kwh": 0, + "grid_import_kwh": 0, + "grid_export_kwh": 0, + "net_cost": 0, + "savings": 0, + } + actual_data["mode"] = current_mode + actual_data["mode_name"] = current_mode_name + if current_soc is not None: + actual_data["battery_soc"] = round(current_soc, 1) + if current_kwh is not None: + actual_data["battery_kwh"] = round(current_kwh, 2) + return actual_data + + +async def _build_mixed_intervals( + sensor: Any, + day: date, + day_start: datetime, + storage_plans: Dict[str, Any], + date_str: str, + now: datetime, + mode_names: Dict[int, str], + historical_modes_lookup: Dict[str, Any], +) -> List[Dict[str, Any]]: + past_planned, future_planned = await _resolve_mixed_planned( + sensor, storage_plans, date_str, day + ) + + current_minute = (now.minute // 15) * 15 + current_interval = now.replace(minute=current_minute, second=0, microsecond=0) + current_interval_naive = current_interval.replace(tzinfo=None) + + planned_lookup = _build_planned_lookup( + past_planned, future_planned, date_str, current_interval_naive + ) + _LOGGER.debug( + "📋 Combined planned lookup: %s total intervals for %s", + len(planned_lookup), + day, + ) + + return await _build_mixed_interval_entries( + sensor, + day, + day_start, + current_interval_naive, + planned_lookup, + historical_modes_lookup, + mode_names, + ) + + +async def _resolve_mixed_planned( + sensor: Any, + storage_plans: Dict[str, Any], + date_str: str, + day: date, +) -> tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: + past_planned, storage_missing, storage_invalid = _load_past_planned_from_storage( + sensor, storage_plans, date_str, day + ) + storage_day = storage_plans.get("detailed", {}).get(date_str) + if sensor._plans_store and (storage_missing or storage_invalid): + storage_plans = await _maybe_repair_baseline(sensor, storage_plans, date_str) + storage_day = storage_plans.get("detailed", {}).get(date_str) + storage_invalid = ( + sensor._is_baseline_plan_invalid(storage_day) if storage_day else True + ) + if storage_day and storage_day.get("intervals") and not storage_invalid: + past_planned = storage_day["intervals"] + if not past_planned: + past_planned = _load_past_planned_from_daily_state(sensor, date_str, day) + if not past_planned and storage_day and storage_day.get("intervals"): + past_planned = storage_day["intervals"] + _LOGGER.warning( + "Using baseline plan for %s despite invalid data (no fallback)", + date_str, + ) + if not past_planned: + _LOGGER.debug("⚠️ No past planned data available for %s", day) + + future_planned = _collect_future_planned(getattr(sensor, "_timeline_data", []), day) + + _LOGGER.debug( + "📋 Planned data sources for %s: past=%s intervals from daily_plan, future=%s intervals from active timeline", + day, + len(past_planned), + len(future_planned), + ) + return past_planned, future_planned + + +async def _build_mixed_interval_entries( + sensor: Any, + day: date, + day_start: datetime, + current_interval_naive: datetime, + planned_lookup: Dict[str, Dict[str, Any]], + historical_modes_lookup: Dict[str, Any], + mode_names: Dict[int, str], +) -> List[Dict[str, Any]]: + intervals: List[Dict[str, Any]] = [] + interval_time = day_start + while interval_time.date() == day: + interval_entry = await _build_interval_entry( + sensor, + interval_time, + current_interval_naive, + planned_lookup, + historical_modes_lookup, + mode_names, + ) + if interval_entry: + intervals.append(interval_entry) + + interval_time += timedelta(minutes=15) + + return intervals + + +async def _build_interval_entry( + sensor: Any, + interval_time: datetime, + current_interval_naive: datetime, + planned_lookup: Dict[str, Dict[str, Any]], + historical_modes_lookup: Dict[str, Any], + mode_names: Dict[int, str], +) -> Optional[Dict[str, Any]]: + interval_time_str = interval_time.strftime(DATETIME_FMT) + status = _interval_status(interval_time, current_interval_naive) + + planned_entry = planned_lookup.get(interval_time_str) + planned_data = format_planned_data(planned_entry) if planned_entry else {} + + actual_data = await _build_actual_data( + sensor, + interval_time, + interval_time_str, + status, + planned_data, + historical_modes_lookup, + ) + + if status == "current": + actual_data = _apply_current_interval_data(sensor, actual_data, mode_names) + + if not actual_data and not planned_data: + return None + + return { + "time": interval_time_str, + "status": status, + "planned": planned_data, + "actual": actual_data, + "delta": None, + } + + +def _build_planned_only_intervals( + sensor: Any, day_start: datetime, day_end: datetime +) -> List[Dict[str, Any]]: + intervals: List[Dict[str, Any]] = [] + if not (getattr(sensor, "_mode_optimization_result", None)): + return intervals + optimal_timeline = sensor._mode_optimization_result.get("optimal_timeline", []) + for interval in optimal_timeline: + planned_entry = _build_planned_only_entry(interval, day_start, day_end) + if planned_entry: + intervals.append(planned_entry) + return intervals + + +def _build_planned_only_entry( + interval: Dict[str, Any], day_start: datetime, day_end: datetime +) -> Optional[Dict[str, Any]]: + interval_time_str = interval.get("time", "") + if not interval_time_str: + return None + interval_time = _parse_iso_datetime(interval_time_str) + if not interval_time: + return None + if interval_time.tzinfo is None: + interval_time = dt_util.as_local(interval_time) + if not (day_start <= interval_time <= day_end): + return None # pragma: no cover + return { + "time": interval_time_str, + "status": "planned", + "planned": format_planned_data(interval), + "actual": None, + "delta": None, + } + + +async def build_timeline_extended( + sensor: Any, *, mode_names: Optional[Dict[int, str]] = None +) -> Dict[str, Any]: + """Build extended timeline structure for API.""" + self = sensor + mode_names = mode_names or {} + + now, yesterday, today, tomorrow = _timeline_dates() + storage_plans = await _load_storage_plans(self) + + yesterday_data, today_data, tomorrow_data = await _build_day_summaries( + self, + yesterday=yesterday, + today=today, + tomorrow=tomorrow, + storage_plans=storage_plans, + mode_names=mode_names, + ) + + today_tile_summary = build_today_tile_summary( + self, today_data.get("intervals", []), now + ) + + return { + "yesterday": yesterday_data, + "today": today_data, + "tomorrow": tomorrow_data, + "today_tile_summary": today_tile_summary, + } + + +def _timeline_dates() -> tuple[datetime, date, date, date]: + now = dt_util.now() + today = now.date() + return now, today - timedelta(days=1), today, today + timedelta(days=1) + + +async def _build_day_summaries( + sensor: Any, + *, + yesterday: date, + today: date, + tomorrow: date, + storage_plans: Dict[str, Any], + mode_names: Dict[int, str], +) -> tuple[Dict[str, Any], Dict[str, Any], Dict[str, Any]]: + yesterday_data = await build_day_timeline( + sensor, yesterday, storage_plans, mode_names=mode_names + ) + today_data = await build_day_timeline( + sensor, today, storage_plans, mode_names=mode_names + ) + tomorrow_data = await build_day_timeline( + sensor, tomorrow, storage_plans, mode_names=mode_names + ) + return yesterday_data, today_data, tomorrow_data + + +async def build_day_timeline( # noqa: C901 + sensor: Any, + day: date, + storage_plans: Optional[Dict[str, Any]] = None, + *, + mode_names: Optional[Dict[int, str]] = None, +) -> Dict[str, Any]: + """Build timeline for a single day.""" + self = sensor + mode_names = mode_names or {} + + now, day_start, day_end, date_str, source = _build_day_context(day) + + historical_modes_lookup = await _load_historical_modes( + self, source, day_start, day_end, now, date_str + ) + + intervals = await _select_day_intervals( + sensor=self, + source=source, + day=day, + day_start=day_start, + day_end=day_end, + storage_plans=storage_plans, + date_str=date_str, + now=now, + mode_names=mode_names, + historical_modes_lookup=historical_modes_lookup, + ) + + return _build_day_result(day, intervals) + + +def _build_day_context( + day: date, +) -> tuple[datetime, datetime, datetime, str, str]: + now = dt_util.now() + today = now.date() + day_start = dt_util.as_local(datetime.combine(day, datetime.min.time())) + day_end = dt_util.as_local(datetime.combine(day, datetime.max.time())) + date_str = day.strftime(DATE_FMT) + source = _get_day_source(day, today) + return now, day_start, day_end, date_str, source + + +def _build_day_result(day: date, intervals: List[Dict[str, Any]]) -> Dict[str, Any]: + return { + "date": day.strftime(DATE_FMT), + "intervals": intervals, + "summary": calculate_day_summary(intervals), + } + + +async def _select_day_intervals( + *, + sensor: Any, + source: str, + day: date, + day_start: datetime, + day_end: datetime, + storage_plans: Optional[Dict[str, Any]], + date_str: str, + now: datetime, + mode_names: Dict[int, str], + historical_modes_lookup: Dict[str, Any], +) -> List[Dict[str, Any]]: + if source == "historical_only": + return await _build_historical_only_intervals( + sensor, day, day_start, storage_plans, date_str, historical_modes_lookup + ) + if source == "mixed": + return await _build_mixed_intervals( + sensor, + day, + day_start, + storage_plans, + date_str, + now, + mode_names, + historical_modes_lookup, + ) + return _build_planned_only_intervals(sensor, day_start, day_end) diff --git a/custom_components/oig_cloud/battery_forecast/timeline/extended_summary.py b/custom_components/oig_cloud/battery_forecast/timeline/extended_summary.py new file mode 100644 index 00000000..ea2b28bc --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/timeline/extended_summary.py @@ -0,0 +1,290 @@ +"""Extended timeline summary helpers.""" + +from __future__ import annotations + +from datetime import date, datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + + +def aggregate_cost_by_day(timeline: List[Dict[str, Any]]) -> Dict[str, float]: + """Aggregate planned cost by day.""" + day_costs: Dict[str, float] = {} + for interval in timeline: + ts = interval.get("time") + if not ts: + continue + try: + day = datetime.fromisoformat(ts).date().isoformat() + except Exception: # nosec B112 + continue + day_costs.setdefault(day, 0.0) + day_costs[day] += interval.get("net_cost", 0.0) + return day_costs + + +def get_day_cost_from_timeline( + timeline: List[Dict[str, Any]], target_day: date +) -> Optional[float]: + """Sum net_cost for specific date.""" + if not timeline: + return None + + total = 0.0 + found = False + for interval in timeline: + ts = interval.get("time") + if not ts: + continue + try: + interval_day = datetime.fromisoformat(ts).date() + except Exception: # nosec B112 + continue + if interval_day == target_day: + total += interval.get("net_cost", 0.0) + found = True + return total if found else None + + +def format_planned_data(planned: Dict[str, Any]) -> Dict[str, Any]: + """Format planned data for API.""" + + def _pick(keys, default=0.0): + for key in keys: + if key in planned and planned.get(key) is not None: + return planned.get(key) + return default + + battery_kwh = _pick(["battery_kwh", "battery_capacity_kwh", "battery_soc"], 0.0) + consumption_kwh = _pick(["load_kwh", "consumption_kwh"], 0.0) + grid_import = _pick(["grid_import", "grid_import_kwh"], 0.0) + grid_export = _pick(["grid_export", "grid_export_kwh"], 0.0) + spot_price = _pick(["spot_price", "spot_price_czk"], 0.0) + + return { + "mode": planned.get("mode", 0), + "mode_name": planned.get("mode_name", "HOME I"), + "battery_kwh": round(battery_kwh, 2), + "solar_kwh": round(_pick(["solar_kwh"], 0.0), 3), + "consumption_kwh": round(consumption_kwh, 3), + "grid_import": round(grid_import, 3), + "grid_export": round(grid_export, 3), + "spot_price": round(spot_price, 2), + "net_cost": round(planned.get("net_cost", 0), 2), + "savings_vs_home_i": round(planned.get("savings_vs_home_i", 0), 2), + "decision_reason": planned.get("decision_reason"), + "decision_metrics": planned.get("decision_metrics"), + } + + +def format_actual_data( + actual: Dict[str, Any], planned: Optional[Dict[str, Any]] = None +) -> Optional[Dict[str, Any]]: + """Format actual data for API.""" + if not actual: + return None + + result = { + "mode": actual.get("mode", 0), + "mode_name": actual.get("mode_name", "HOME I"), + "battery_kwh": round(actual.get("battery_kwh", 0), 2), + "grid_import": round(actual.get("grid_import", 0), 3), + "grid_export": round(actual.get("grid_export", 0), 3), + "net_cost": round(actual.get("net_cost", 0), 2), + "solar_kwh": round(actual.get("solar_kwh", 0), 3), + "consumption_kwh": round(actual.get("consumption_kwh", 0), 3), + "spot_price": round(actual.get("spot_price", 0), 2), + "export_price": round(actual.get("export_price", 0), 2), + } + + if "savings_vs_home_i" in actual: + result["savings_vs_home_i"] = round(actual.get("savings_vs_home_i", 0), 2) + elif planned: + result["savings_vs_home_i"] = round(planned.get("savings_vs_home_i", 0), 2) + else: + result["savings_vs_home_i"] = 0 + + return result + + +def calculate_day_summary(intervals: List[Dict[str, Any]]) -> Dict[str, Any]: + """Calculate summary for a day.""" + planned_cost = sum( + i.get("planned", {}).get("net_cost", 0) for i in intervals if i.get("planned") + ) + actual_cost = sum( + i.get("actual", {}).get("net_cost", 0) for i in intervals if i.get("actual") + ) + + historical_count = sum(1 for i in intervals if i.get("status") == "historical") + + delta_cost = actual_cost - planned_cost if historical_count > 0 else None + accuracy_pct = ( + round((1 - abs(delta_cost) / planned_cost) * 100, 1) + if planned_cost > 0 and delta_cost is not None + else None + ) + + return { + "planned_total_cost": round(planned_cost, 2) if planned_cost > 0 else None, + "actual_total_cost": round(actual_cost, 2) if actual_cost > 0 else None, + "delta_cost": round(delta_cost, 2) if delta_cost is not None else None, + "accuracy_pct": accuracy_pct, + "intervals_count": len(intervals), + "historical_count": historical_count, + } + + +def build_today_tile_summary( + sensor: Any, intervals: List[Dict[str, Any]], now: datetime +) -> Dict[str, Any]: + """Build summary for the today tile.""" + _ = sensor + if not intervals: + return get_empty_tile_summary(now) + + current_minute = (now.minute // 15) * 15 + current_interval_time = now.replace(minute=current_minute, second=0, microsecond=0) + + historical, future = _split_intervals(intervals, current_interval_time) + + planned_so_far = sum(_safe_get_cost(h, "planned") for h in historical) + actual_so_far = sum(_safe_get_cost(h, "actual") for h in historical) + delta = actual_so_far - planned_so_far + delta_pct = (delta / planned_so_far * 100) if planned_so_far > 0 else 0.0 + + planned_future = sum(_safe_get_cost(f, "planned") for f in future) + eod_plan = planned_so_far + planned_future + + eod_prediction = actual_so_far + planned_future + eod_delta = eod_prediction - eod_plan + eod_delta_pct = (eod_delta / eod_plan * 100) if eod_plan > 0 else 0.0 + + total_intervals = len(intervals) + historical_count = len(historical) + progress_pct = ( + (historical_count / total_intervals * 100) if total_intervals > 0 else 0.0 + ) + + confidence = _confidence_for_progress(progress_pct) + mini_chart_data = _build_mini_chart_data(intervals, current_interval_time) + + return { + "progress_pct": round(progress_pct, 1), + "planned_so_far": round(planned_so_far, 2), + "actual_so_far": round(actual_so_far, 2), + "delta": round(delta, 2), + "delta_pct": round(delta_pct, 1), + "eod_prediction": round(eod_prediction, 2), + "eod_plan": round(eod_plan, 2), + "eod_delta": round(eod_delta, 2), + "eod_delta_pct": round(eod_delta_pct, 1), + "confidence": confidence, + "mini_chart_data": mini_chart_data, + "current_time": now.strftime("%H:%M"), + "last_updated": now.isoformat(), + "intervals_total": total_intervals, + "intervals_historical": historical_count, + "intervals_future": len(future), + } + + +def _parse_interval_time(interval_time_str: str) -> Optional[datetime]: + if not interval_time_str: + return None + try: + interval_time = datetime.fromisoformat(interval_time_str) + except Exception: # nosec B112 + return None + if interval_time.tzinfo is None: + interval_time = dt_util.as_local(interval_time) + return interval_time + + +def _split_intervals( + intervals: List[Dict[str, Any]], current_interval_time: datetime +) -> tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: + historical = [] + future = [] + for interval in intervals: + interval_time = _parse_interval_time(interval.get("time", "")) + if not interval_time: + continue + if interval_time < current_interval_time and interval.get("actual"): + historical.append(interval) + else: + future.append(interval) + return historical, future + + +def _safe_get_cost(interval: Dict[str, Any], key: str) -> float: + data = interval.get(key) + if data is None: + return 0.0 + if isinstance(data, dict): + return float(data.get("net_cost", 0)) + return 0.0 + + +def _confidence_for_progress(progress_pct: float) -> str: + if progress_pct < 25: + return "low" + if progress_pct < 50: + return "medium" + if progress_pct < 75: + return "good" + return "high" + + +def _build_mini_chart_data( + intervals: List[Dict[str, Any]], current_interval_time: datetime +) -> List[Dict[str, Any]]: + mini_chart_data = [] + for interval in intervals: + interval_time_str = interval.get("time", "") + interval_time = _parse_interval_time(interval_time_str) + if not interval_time: + continue + + is_current = ( + current_interval_time + <= interval_time + < current_interval_time + timedelta(minutes=15) + ) + + delta_value = None + if interval.get("actual") and interval.get("delta"): + delta_value = interval["delta"].get("net_cost") + + mini_chart_data.append( + { + "time": interval_time_str, + "delta": delta_value, + "is_historical": bool(interval.get("actual")), + "is_current": is_current, + } + ) + return mini_chart_data + + +def get_empty_tile_summary(now: datetime) -> Dict[str, Any]: + """Empty tile summary when no data is available.""" + return { + "progress_pct": 0.0, + "planned_so_far": 0.0, + "actual_so_far": 0.0, + "delta": 0.0, + "delta_pct": 0.0, + "eod_prediction": 0.0, + "eod_plan": 0.0, + "eod_delta": 0.0, + "eod_delta_pct": 0.0, + "confidence": "none", + "mini_chart_data": [], + "current_time": now.strftime("%H:%M"), + "last_updated": now.isoformat(), + "intervals_total": 0, + "intervals_historical": 0, + "intervals_future": 0, + } diff --git a/custom_components/oig_cloud/battery_forecast/timeline/planner.py b/custom_components/oig_cloud/battery_forecast/timeline/planner.py new file mode 100644 index 00000000..1f4a3235 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/timeline/planner.py @@ -0,0 +1,373 @@ +"""Planner timeline helpers extracted from legacy battery forecast.""" + +from __future__ import annotations + +from datetime import datetime +from typing import Any, Dict, List, Optional + +from homeassistant.util import dt as dt_util + +from ...physics import simulate_interval +from ..data.input import get_solar_for_timestamp +from ..types import ( + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, + CBB_MODE_HOME_UPS, + CBB_MODE_NAMES, +) + + +def build_planner_timeline( + *, + modes: List[int], + spot_prices: List[Dict[str, Any]], + export_prices: List[Dict[str, Any]], + solar_forecast: Dict[str, Any], + load_forecast: List[float], + current_capacity: float, + max_capacity: float, + hw_min_capacity: float, + efficiency: float, + home_charge_rate_kw: float, + log_rate_limited: Optional[Any] = None, +) -> List[Dict[str, Any]]: + """Build timeline in legacy format from planner modes.""" + timeline: List[Dict[str, Any]] = [] + soc = current_capacity + charge_rate_kwh_15min = home_charge_rate_kw / 4.0 + + for i, mode in enumerate(modes): + if i >= len(spot_prices): + break + ts_str = str(spot_prices[i].get("time", "")) + spot_price = float(spot_prices[i].get("price", 0.0) or 0.0) + export_price = ( + float(export_prices[i].get("price", 0.0) or 0.0) + if i < len(export_prices) + else 0.0 + ) + + solar_kwh = 0.0 + try: + ts = datetime.fromisoformat(ts_str) + if ts.tzinfo is None: + ts = dt_util.as_local(ts) + solar_kwh = get_solar_for_timestamp( + ts, solar_forecast, log_rate_limited=log_rate_limited + ) + except Exception: + solar_kwh = 0.0 + + load_kwh = load_forecast[i] if i < len(load_forecast) else 0.125 + + res = simulate_interval( + mode=mode, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=soc, + capacity_kwh=max_capacity, + hw_min_capacity_kwh=hw_min_capacity, + charge_efficiency=efficiency, + discharge_efficiency=efficiency, + home_charge_rate_kwh_15min=charge_rate_kwh_15min, + ) + soc = res.new_soc_kwh + + net_cost = (res.grid_import_kwh * spot_price) - ( + res.grid_export_kwh * export_price + ) + + timeline.append( + { + "time": ts_str, + "timestamp": ts_str, + "battery_soc": round(soc, 6), + "battery_capacity_kwh": round(soc, 6), + "mode": int(mode), + "mode_name": CBB_MODE_NAMES.get(int(mode), "HOME I"), + "solar_kwh": round(solar_kwh, 6), + "load_kwh": round(load_kwh, 6), + "grid_import": round(res.grid_import_kwh, 6), + "grid_export": round(res.grid_export_kwh, 6), + "grid_net": round(res.grid_import_kwh - res.grid_export_kwh, 6), + "spot_price": round(spot_price, 6), + "spot_price_czk": round(spot_price, 6), + "export_price_czk": round(export_price, 6), + "net_cost": round(net_cost, 6), + "solar_charge_kwh": round(max(0.0, res.solar_charge_kwh), 6), + "grid_charge_kwh": round(max(0.0, res.grid_charge_kwh), 6), + } + ) + + return timeline + + +def format_planner_reason( + reason_code: Optional[str], + *, + spot_price: Optional[float] = None, +) -> Optional[str]: + """Map planner reason codes to user-facing text.""" + if not reason_code: + return None + + if reason_code.startswith("planned_charge"): + if spot_price is not None: + return f"Plánované nabíjení ze sítě ({spot_price:.2f} Kč/kWh)" + return "Plánované nabíjení ze sítě" + + if reason_code == "price_band_hold": + if spot_price is not None: + return ( + f"UPS držíme v cenovém pásmu dle účinnosti " + f"({spot_price:.2f} Kč/kWh)" + ) + return "UPS držíme v cenovém pásmu dle účinnosti" + + if reason_code in {"balancing_charge", "balancing_override"}: + return "Balancování: nabíjení na 100 %" + if reason_code == "holding_period": + return "Balancování: držení 100 %" + + if reason_code in {"negative_price_charge", "auto_negative_charge"}: + return "Negativní cena: nabíjení ze sítě" + if reason_code in {"negative_price_curtail", "auto_negative_curtail"}: + return "Negativní cena: omezení exportu (HOME III)" + if reason_code in {"negative_price_consume", "auto_negative_consume"}: + return "Negativní cena: maximalizace spotřeby" + + return None + + +def attach_planner_reasons( + timeline: List[Dict[str, Any]], + decisions: List[Any], +) -> None: + """Attach planner reasons and decision metrics to timeline entries.""" + for idx, decision in enumerate(decisions): + if idx >= len(timeline): + break + reason_code = getattr(decision, "reason", None) + metrics = timeline[idx].get("decision_metrics") or {} + if reason_code: + metrics.setdefault("planner_reason_code", reason_code) + metrics.setdefault("planner_reason", reason_code) + metrics.setdefault( + "planner_is_balancing", bool(getattr(decision, "is_balancing", False)) + ) + metrics.setdefault( + "planner_is_holding", bool(getattr(decision, "is_holding", False)) + ) + metrics.setdefault( + "planner_is_negative_price", + bool(getattr(decision, "is_negative_price", False)), + ) + timeline[idx]["decision_metrics"] = metrics + + reason_text = format_planner_reason( + reason_code, spot_price=timeline[idx].get("spot_price") + ) + if reason_text: + timeline[idx]["decision_reason"] = reason_text + + +def add_decision_reasons_to_timeline( + timeline: List[Dict[str, Any]], + *, + current_capacity: float, + max_capacity: float, + min_capacity: float, + efficiency: float, +) -> None: + """Attach decision reason strings and metrics to each timeline interval.""" + if not timeline: + return + + battery = current_capacity + future_ups_avg_price = _compute_future_ups_avg_price(timeline) + + for idx, entry in enumerate(timeline): + entry["battery_soc_start"] = battery + + decision_reason, decision_metrics = _build_decision_for_entry( + entry, + battery=battery, + min_capacity=min_capacity, + efficiency=efficiency, + future_ups_avg_price=future_ups_avg_price[idx], + ) + + existing_reason = entry.get("decision_reason") + existing_metrics = entry.get("decision_metrics") or {} + if existing_reason: + decision_reason = existing_reason + if existing_metrics: + decision_metrics = {**decision_metrics, **existing_metrics} + + _apply_decision_metrics( + entry, + decision_metrics, + battery=battery, + future_ups_avg_price=future_ups_avg_price[idx], + ) + entry["decision_reason"] = decision_reason + entry["decision_metrics"] = decision_metrics + + # Advance battery for next interval (end-of-interval stored in timeline) + try: + battery = float(entry.get("battery_soc", battery)) + except (TypeError, ValueError): + pass + + _ = max_capacity + + +def _compute_future_ups_avg_price( + timeline: List[Dict[str, Any]], +) -> List[Optional[float]]: + future_ups_avg_price: List[Optional[float]] = [None] * len(timeline) + cumulative_charge = 0.0 + cumulative_cost = 0.0 + + for idx in range(len(timeline) - 1, -1, -1): + entry = timeline[idx] + if entry.get("mode") == CBB_MODE_HOME_UPS: + charge_kwh = entry.get("grid_charge_kwh", 0.0) or 0.0 + if charge_kwh > 0: + cumulative_charge += charge_kwh + cumulative_cost += charge_kwh * (entry.get("spot_price", 0) or 0) + + if cumulative_charge > 0: + future_ups_avg_price[idx] = cumulative_cost / cumulative_charge + return future_ups_avg_price + + +def _build_decision_for_entry( + entry: Dict[str, Any], + *, + battery: float, + min_capacity: float, + efficiency: float, + future_ups_avg_price: Optional[float], +) -> tuple[Optional[str], Dict[str, Any]]: + mode = entry.get("mode") + load_kwh = entry.get("load_kwh", 0.0) or 0.0 + solar_kwh = entry.get("solar_kwh", 0.0) or 0.0 + price = entry.get("spot_price", 0.0) or 0.0 + deficit = max(0.0, load_kwh - solar_kwh) + + if mode == CBB_MODE_HOME_II: + return _decision_home_ii( + deficit, + battery=battery, + min_capacity=min_capacity, + efficiency=efficiency, + price=price, + avg_price=future_ups_avg_price, + ) + if mode == CBB_MODE_HOME_UPS: + return _decision_home_ups(entry, price) + if mode == CBB_MODE_HOME_III: + return "Max nabijeni z FVE, spotreba ze site", {} + return _decision_default(deficit) + + +def _decision_home_ii( + deficit: float, + *, + battery: float, + min_capacity: float, + efficiency: float, + price: float, + avg_price: Optional[float], +) -> tuple[Optional[str], Dict[str, Any]]: + if deficit <= 0: + return "Prebytky ze solaru do baterie (bez vybijeni)", {} + + available_battery = max(0.0, battery - min_capacity) + discharge_kwh = ( + min(deficit / efficiency, available_battery) if efficiency > 0 else 0.0 + ) + covered_kwh = discharge_kwh * efficiency + interval_saving = covered_kwh * price + recharge_cost = ( + (discharge_kwh / efficiency) * avg_price + if avg_price is not None and efficiency > 0 + else None + ) + + metrics = { + "home1_saving_czk": round(interval_saving, 2), + "soc_drop_kwh": round(discharge_kwh, 2), + "recharge_avg_price_czk": ( + round(avg_price, 2) if avg_price is not None else None + ), + "recharge_cost_czk": ( + round(recharge_cost, 2) if recharge_cost is not None else None + ), + } + + if recharge_cost is not None: + reason = ( + f"Drzeni baterie: HOME I by usetril {interval_saving:.2f} Kc, " + f"dobiti ~{recharge_cost:.2f} Kc" + ) + else: + reason = ( + f"Drzeni baterie: HOME I by usetril {interval_saving:.2f} Kc, " + "chybi UPS okno pro dobiti" + ) + return reason, metrics + + +def _decision_home_ups( + entry: Dict[str, Any], price: float +) -> tuple[Optional[str], Dict[str, Any]]: + charge_kwh = entry.get("grid_charge_kwh", 0.0) or 0.0 + if charge_kwh > 0: + reason = ( + f"Nabijeni ze site: +{charge_kwh:.2f} kWh pri {price:.2f} Kc/kWh" + ) + else: + reason = "UPS rezim (ochrana/udrzovani)" + return reason, {} + + +def _decision_default(deficit: float) -> tuple[Optional[str], Dict[str, Any]]: + if deficit > 0: + return "Vybijeni baterie misto odberu ze site", {} + return "Solar pokryva spotrebu, prebytky do baterie", {} + + +def _apply_decision_metrics( + entry: Dict[str, Any], + decision_metrics: Dict[str, Any], + *, + battery: float, + future_ups_avg_price: Optional[float], +) -> None: + price = entry.get("spot_price", 0.0) or 0.0 + load_kwh = entry.get("load_kwh", 0.0) or 0.0 + solar_kwh = entry.get("solar_kwh", 0.0) or 0.0 + deficit = max(0.0, load_kwh - solar_kwh) + + decision_metrics.setdefault("spot_price_czk", round(price, 2)) + decision_metrics.setdefault( + "future_ups_avg_price_czk", + round(future_ups_avg_price, 2) if future_ups_avg_price is not None else None, + ) + decision_metrics.setdefault("load_kwh", round(load_kwh, 3)) + decision_metrics.setdefault("solar_kwh", round(solar_kwh, 3)) + decision_metrics.setdefault("deficit_kwh", round(deficit, 3)) + decision_metrics.setdefault( + "grid_charge_kwh", + round(entry.get("grid_charge_kwh", 0.0) or 0.0, 3), + ) + decision_metrics.setdefault( + "battery_start_kwh", + round(entry.get("battery_soc_start", battery), 2), + ) + decision_metrics.setdefault( + "battery_end_kwh", + round(entry.get("battery_soc", entry.get("battery_soc_start", battery)), 2), + ) diff --git a/custom_components/oig_cloud/battery_forecast/types.py b/custom_components/oig_cloud/battery_forecast/types.py new file mode 100644 index 00000000..8fc2632d --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/types.py @@ -0,0 +1,418 @@ +"""Type definitions and constants for battery forecast module. + +This module contains: +- CBB Mode constants and mappings +- TypedDicts for type safety +- Physical and operational constants +- Transition costs and constraints + +All types are designed for static type checking with mypy/pyright. +""" + +from enum import IntEnum +from typing import Any, Dict, List, Optional, TypedDict + +# ============================================================================= +# CBB Mode Constants +# ============================================================================= + + +class CBBMode(IntEnum): + """CBB 3F Home Plus Premium operating modes. + + These correspond to the inverter's actual mode values from + sensor.oig_{box_id}_box_prms_mode + """ + + HOME_I = 0 # Grid priority - cheap mode, minimal battery usage + HOME_II = 1 # Battery priority - preserve battery, grid covers deficit + HOME_III = 2 # Solar priority - default, FVE → consumption → battery + HOME_UPS = 3 # UPS mode - AC charging enabled from grid + + +# Legacy constants for backward compatibility +CBB_MODE_HOME_I: int = CBBMode.HOME_I.value # 0 +CBB_MODE_HOME_II: int = CBBMode.HOME_II.value # 1 +CBB_MODE_HOME_III: int = CBBMode.HOME_III.value # 2 +CBB_MODE_HOME_UPS: int = CBBMode.HOME_UPS.value # 3 + +# Mode display names +CBB_MODE_NAMES: Dict[int, str] = { + CBB_MODE_HOME_I: "HOME I", + CBB_MODE_HOME_II: "HOME II", + CBB_MODE_HOME_III: "HOME III", + CBB_MODE_HOME_UPS: "HOME UPS", +} + +MODE_LABEL_HOME_I = "Home I" +MODE_LABEL_HOME_II = "Home II" +MODE_LABEL_HOME_III = "Home III" +MODE_LABEL_HOME_UPS = "Home UPS" + +SERVICE_MODE_HOME_1 = "Home 1" +SERVICE_MODE_HOME_2 = "Home 2" +SERVICE_MODE_HOME_3 = "Home 3" +SERVICE_MODE_HOME_UPS = "Home UPS" +SERVICE_MODE_HOME_5 = "Home 5" +SERVICE_MODE_HOME_6 = "Home 6" + +# Mapping to Home Assistant service names +CBB_MODE_SERVICE_MAP: Dict[int, str] = { + CBB_MODE_HOME_I: SERVICE_MODE_HOME_1, + CBB_MODE_HOME_II: SERVICE_MODE_HOME_2, + CBB_MODE_HOME_III: SERVICE_MODE_HOME_3, + CBB_MODE_HOME_UPS: SERVICE_MODE_HOME_UPS, +} + +# Modes where AC charging is DISABLED (only solar DC/DC charging allowed) +AC_CHARGING_DISABLED_MODES: List[int] = [ + CBB_MODE_HOME_I, + CBB_MODE_HOME_II, + CBB_MODE_HOME_III, +] + + +# ============================================================================= +# Physical Constants +# ============================================================================= + +# Time interval for planning (15 minutes) +INTERVAL_MINUTES: int = 15 +INTERVALS_PER_HOUR: int = 4 +INTERVALS_PER_DAY: int = 96 + +# Default battery efficiency if sensor unavailable +# Based on CBB 3F Home Plus Premium specs: DC/AC 88.2%, AC/DC 95%, DC/DC 95% +DEFAULT_EFFICIENCY: float = 0.882 + +# Default AC charging rate if not configured +# CBB 3F: ~2.8 kW max → 0.7 kWh per 15min interval +DEFAULT_CHARGE_RATE_KW: float = 2.8 +DEFAULT_CHARGE_RATE_PER_INTERVAL: float = DEFAULT_CHARGE_RATE_KW * ( + INTERVAL_MINUTES / 60 +) + +# Battery capacity bounds (CBB 3F Home Plus Premium) +# Physical minimum: 20% SOC (inverter protection) +# User minimum: configurable (typically 33% for emergency reserve) +PHYSICAL_SOC_MIN: float = 0.20 +DEFAULT_USER_SOC_MIN: float = 0.33 +DEFAULT_TARGET_SOC: float = 0.80 + + +# ============================================================================= +# Transition Costs +# ============================================================================= + +# Mode transition costs (energy loss + time delay) +# Key: (from_mode, to_mode) tuple with service names +TRANSITION_COSTS: Dict[tuple, Dict[str, Any]] = { + (MODE_LABEL_HOME_I, MODE_LABEL_HOME_UPS): { + "energy_loss_kwh": 0.05, # Energy loss when switching to UPS + "time_delay_intervals": 1, # Delay in 15-min intervals + }, + (MODE_LABEL_HOME_UPS, MODE_LABEL_HOME_I): { + "energy_loss_kwh": 0.02, # Energy loss when switching from UPS + "time_delay_intervals": 0, + }, + (MODE_LABEL_HOME_I, MODE_LABEL_HOME_II): { + "energy_loss_kwh": 0.0, # No loss between Home modes + "time_delay_intervals": 0, + }, + (MODE_LABEL_HOME_II, MODE_LABEL_HOME_I): { + "energy_loss_kwh": 0.0, + "time_delay_intervals": 0, + }, + # All other transitions default to zero cost +} + +# Minimum mode duration (in 15-min intervals) +MIN_MODE_DURATION: Dict[str, int] = { + MODE_LABEL_HOME_UPS: 2, # UPS must run at least 30 minutes (2×15min) + MODE_LABEL_HOME_I: 1, + MODE_LABEL_HOME_II: 1, + MODE_LABEL_HOME_III: 1, +} + + +# ============================================================================= +# TypedDicts for Type Safety +# ============================================================================= + + +class SpotPrice(TypedDict, total=False): + """Spot price data for a single interval. + + Attributes: + time: ISO timestamp of interval start + price: Price in CZK/kWh (buy price) + export_price: Export/sell price in CZK/kWh + level: Price level category (low/medium/high) + """ + + time: str + price: float + export_price: float + level: str + + +class SolarForecast(TypedDict, total=False): + """Solar forecast data. + + Attributes: + today: Dict mapping ISO timestamp to kWh production + tomorrow: Dict mapping ISO timestamp to kWh production + total_today: Total expected production today (kWh) + total_tomorrow: Total expected production tomorrow (kWh) + """ + + today: Dict[str, float] + tomorrow: Dict[str, float] + total_today: float + total_tomorrow: float + + +class TimelineInterval(TypedDict, total=False): + """Single interval in the battery timeline. + + Attributes: + timestamp: ISO timestamp of interval start + battery_kwh: Battery state of charge at interval START (kWh) + battery_pct: Battery state of charge as percentage (0-100) + mode: Recommended mode (0=HOME I, 1=HOME II, 2=HOME III, 3=HOME UPS) + mode_name: Human-readable mode name + solar_kwh: Expected solar production this interval (kWh) + consumption_kwh: Expected consumption this interval (kWh) + grid_import_kwh: Expected grid import this interval (kWh) + grid_export_kwh: Expected grid export this interval (kWh) + spot_price: Spot price this interval (CZK/kWh) + cost_czk: Cost of this interval (CZK) + reason: Reason for mode selection + is_mode_change: True if mode changed from previous interval + is_charging: True if battery is charging (from grid or solar) + is_balancing: True if this interval is part of balancing plan + is_holding: True if in holding period (maintain 100%) + """ + + timestamp: str + battery_kwh: float + battery_pct: float + mode: int + mode_name: str + solar_kwh: float + consumption_kwh: float + grid_import_kwh: float + grid_export_kwh: float + spot_price: float + cost_czk: float + reason: str + is_mode_change: bool + is_charging: bool + is_balancing: bool + is_holding: bool + + +class ChargingInterval(TypedDict, total=False): + """Charging interval from balancing plan. + + Attributes: + timestamp: ISO timestamp when to charge + price: Spot price at this interval + expected_kwh: Expected charging amount + """ + + timestamp: str + price: float + expected_kwh: float + + +class BalancingPlan(TypedDict, total=False): + """Balancing plan from BalancingManager. + + Attributes: + reason: Why balancing is needed (opportunistic/interval/emergency) + mode: Balancing mode type + holding_start: ISO timestamp when holding period starts (deadline) + holding_end: ISO timestamp when holding period ends + charging_intervals: List of preferred charging intervals + target_soc_percent: Target SOC (always 100 for balancing) + total_cost_czk: Estimated total cost + deadline: Same as holding_start (when battery must be at 100%) + """ + + reason: str + mode: str + holding_start: str + holding_end: str + charging_intervals: List[ChargingInterval] + target_soc_percent: float + total_cost_czk: float + deadline: str + + +class ModeRecommendation(TypedDict, total=False): + """Mode recommendation for a time block. + + Used for dashboard display - groups consecutive intervals with same mode. + + Attributes: + mode: Mode number (0-3) + mode_name: Human-readable mode name + start: ISO timestamp of block start + end: ISO timestamp of block end + duration_hours: Block duration in hours + avg_battery_pct: Average battery percentage during block + cost_czk: Total cost of this block + savings_vs_home_i: Savings compared to pure HOME I strategy + rationale: Human-readable explanation why this mode + """ + + mode: int + mode_name: str + start: str + end: str + duration_hours: float + avg_battery_pct: float + cost_czk: float + savings_vs_home_i: float + rationale: str + + +class OptimizationResult(TypedDict, total=False): + """Result of HYBRID optimization algorithm. + + Attributes: + modes: List of mode values for each interval (0-3) + modes_distribution: Count of each mode type + total_cost_czk: Total estimated cost + baseline_cost_czk: Cost without optimization (HOME I only) + total_grid_import_kwh: Total expected grid import + total_grid_export_kwh: Total expected grid export + total_solar_kwh: Total expected solar production + ups_intervals_count: Number of HOME UPS intervals + charging_kwh: Total expected charging amount + final_battery_kwh: Expected battery at end of timeline + is_balancing_mode: True if optimizing for balancing + balancing_deadline: ISO timestamp of balancing deadline (if applicable) + balancing_holding_start: ISO timestamp of holding start + balancing_holding_end: ISO timestamp of holding end + calculation_time_ms: Time taken for optimization + negative_price_detected: True if negative prices were detected + negative_price_start_idx: Index of first negative price interval + negative_price_end_idx: Index of last negative price interval + negative_price_excess_solar_kwh: Solar excess during negative prices + negative_price_curtailment_kwh: Expected curtailment during negative prices + negative_price_actions: List of recommended actions for negative prices + """ + + modes: List[int] + modes_distribution: Dict[str, int] + total_cost_czk: float + baseline_cost_czk: float + total_grid_import_kwh: float + total_grid_export_kwh: float + total_solar_kwh: float + ups_intervals_count: int + charging_kwh: float + final_battery_kwh: float + is_balancing_mode: bool + balancing_deadline: Optional[str] + balancing_holding_start: Optional[str] + balancing_holding_end: Optional[str] + calculation_time_ms: float + # Negative price strategy fields + negative_price_detected: bool + negative_price_start_idx: int + negative_price_end_idx: int + negative_price_excess_solar_kwh: float + negative_price_curtailment_kwh: float + negative_price_actions: List[str] + + +class BatteryConfig(TypedDict, total=False): + """Battery configuration parameters. + + Attributes: + max_capacity_kwh: Maximum battery capacity (kWh) + min_capacity_kwh: Minimum usable capacity / user reserve (kWh) + physical_min_kwh: Physical minimum (20% SOC protection) + target_capacity_kwh: Target SOC for optimization + charge_rate_kw: AC charging rate (kW) + efficiency: Round-trip efficiency (0-1) + box_id: Device identifier + """ + + max_capacity_kwh: float + min_capacity_kwh: float + physical_min_kwh: float + target_capacity_kwh: float + charge_rate_kw: float + efficiency: float + box_id: str + + +# ============================================================================= +# Helper Functions +# ============================================================================= + + +def get_mode_name(mode: int) -> str: + """Get human-readable mode name from mode number.""" + return CBB_MODE_NAMES.get(mode, f"UNKNOWN ({mode})") + + +def get_service_name(mode: int) -> str: + """Get HA service name from mode number.""" + return CBB_MODE_SERVICE_MAP.get(mode, "Home 3") # Default to HOME III + + +def is_charging_mode(mode: int) -> bool: + """Check if mode allows AC charging from grid.""" + return mode == CBB_MODE_HOME_UPS + + +def mode_from_name(name: str) -> int: + """Get mode number from name (case insensitive).""" + name_upper = name.upper().replace(" ", "_").replace("_", " ") + for mode_num, mode_name in CBB_MODE_NAMES.items(): + if mode_name.upper() == name_upper or mode_name.upper().replace( + " ", "" + ) == name_upper.replace(" ", ""): + return mode_num + # Legacy aliases (older UI / logs) + legacy = { + "HOME I": CBB_MODE_HOME_I, + "HOME 1": CBB_MODE_HOME_I, + "HOME II": CBB_MODE_HOME_II, + "HOME 2": CBB_MODE_HOME_II, + "HOME III": CBB_MODE_HOME_III, + "HOME 3": CBB_MODE_HOME_III, + "HOME UPS": CBB_MODE_HOME_UPS, + } + if name_upper in legacy: + return legacy[name_upper] + return CBB_MODE_HOME_III # Default + + +def safe_nested_get(obj: Optional[Dict[str, Any]], *keys: str, default: Any = 0) -> Any: + """Safely get nested dict values, handling None at any level. + + Args: + obj: Dict or None + keys: Sequence of keys to traverse (e.g., "planned", "net_cost") + default: Default value if any key is missing or value is None + + Returns: + Value if found, default otherwise + + Example: + safe_nested_get(interval, "planned", "net_cost", default=0) + # Same as: interval.get("planned", {}).get("net_cost", 0) + # But handles: interval.get("planned") = None ✓ + """ + current = obj + for key in keys: + if current is None or not isinstance(current, dict): + return default + current = current.get(key) + return current if current is not None else default diff --git a/custom_components/oig_cloud/battery_forecast/utils_common.py b/custom_components/oig_cloud/battery_forecast/utils_common.py new file mode 100644 index 00000000..115f4836 --- /dev/null +++ b/custom_components/oig_cloud/battery_forecast/utils_common.py @@ -0,0 +1,96 @@ +"""Common helpers for battery forecast logic.""" + +from __future__ import annotations + +from datetime import datetime +from typing import Any, Dict, Optional + +from homeassistant.util import dt as dt_util + + +def safe_nested_get(obj: Optional[Dict[str, Any]], *keys: str, default: Any = 0) -> Any: + """Safely get nested dict values, handling None at any level.""" + current = obj + for key in keys: + if current is None or not isinstance(current, dict): + return default + current = current.get(key) + return current if current is not None else default + + +def parse_timeline_timestamp(value: Optional[str]) -> Optional[datetime]: + """Parse timeline timestamp into local datetime.""" + if not value: + return None + dt_obj = dt_util.parse_datetime(value) + if dt_obj is None: + try: + dt_obj = datetime.fromisoformat(value) + except ValueError: + return None + if dt_obj.tzinfo is None: + dt_obj = dt_util.as_local(dt_obj) + return dt_obj + + +def format_time_label(iso_ts: Optional[str]) -> str: + """Format ISO timestamp to local HH:MM string.""" + if not iso_ts: + return "--:--" + try: + ts = iso_ts + if iso_ts.endswith("Z"): + ts = iso_ts.replace("Z", "+00:00") + dt_obj = datetime.fromisoformat(ts) + if dt_obj.tzinfo is None: + dt_obj = dt_util.as_local(dt_obj) + else: + dt_obj = dt_obj.astimezone(dt_util.DEFAULT_TIME_ZONE) + return dt_obj.strftime("%H:%M") + except Exception: + return iso_ts + + +def parse_tariff_times(time_str: str) -> list[int]: + """Parse tariff times string to list of hours.""" + if not time_str: + return [] + try: + return [int(x.strip()) for x in time_str.split(",") if x.strip()] + except ValueError: + return [] + + +def get_tariff_for_datetime(target_datetime: datetime, config: Dict[str, Any]) -> str: + """Get tariff (VT/NT) for a given datetime using config values.""" + dual_tariff_enabled = config.get("dual_tariff_enabled", True) + if not dual_tariff_enabled: + return "VT" + + is_weekend = target_datetime.weekday() >= 5 + + if is_weekend: + nt_times = parse_tariff_times(config.get("tariff_nt_start_weekend", "0")) + vt_times = parse_tariff_times(config.get("tariff_vt_start_weekend", "")) + else: + nt_times = parse_tariff_times(config.get("tariff_nt_start_weekday", "22,2")) + vt_times = parse_tariff_times(config.get("tariff_vt_start_weekday", "6")) + + current_hour = target_datetime.hour + last_tariff = "NT" + last_hour = -1 + + all_changes: list[tuple[int, str]] = [] + for hour in nt_times: + all_changes.append((hour, "NT")) + for hour in vt_times: + all_changes.append((hour, "VT")) + + all_changes.sort(reverse=True) + + for hour, tariff in all_changes: + if hour <= current_hour and hour > last_hour: + last_tariff = tariff + last_hour = hour + + return last_tariff diff --git a/custom_components/oig_cloud/binary_sensor.py b/custom_components/oig_cloud/binary_sensor.py index e8ad8e48..6d17b863 100644 --- a/custom_components/oig_cloud/binary_sensor.py +++ b/custom_components/oig_cloud/binary_sensor.py @@ -1,138 +1,117 @@ -"""Binary sensor platform for OIG Cloud integration.""" import logging from datetime import timedelta -from typing import Any, Dict, List, Optional from homeassistant.components.binary_sensor import BinarySensorEntity -from homeassistant.config_entries import ConfigEntry -from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import DeviceInfo -from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, DataUpdateCoordinator, ) -from .const import ( - DEFAULT_NAME, - DOMAIN, -) -from .coordinator import OigCloudDataUpdateCoordinator + from .binary_sensor_types import BINARY_SENSOR_TYPES +from .const import DEFAULT_NAME, DOMAIN +from .lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi _LOGGER = logging.getLogger(__name__) + class OigCloudBinarySensor(CoordinatorEntity, BinarySensorEntity): - """Binary sensor for OIG Cloud data.""" - - def __init__(self, coordinator: DataUpdateCoordinator, sensor_type: str) -> None: - """Initialize binary sensor.""" + def __init__(self, coordinator, sensor_type): super().__init__(coordinator) - self.coordinator: DataUpdateCoordinator = coordinator - self._sensor_type: str = sensor_type - self._node_id: str = BINARY_SENSOR_TYPES[sensor_type]["node_id"] - self._node_key: str = BINARY_SENSOR_TYPES[sensor_type]["node_key"] - self._box_id: str = list(self.coordinator.data.keys())[0] - self.entity_id = f"binary_sensor.oig_{self._box_id}_{sensor_type}" - _LOGGER.debug(f"Created binary sensor {self.entity_id}") + self._sensor_type = sensor_type + self._node_id = BINARY_SENSOR_TYPES[sensor_type]["node_id"] + self._node_key = BINARY_SENSOR_TYPES[sensor_type]["node_key"] + self._box_id = None # Box ID načteme později bezpečně + + async def async_added_to_hass(self): + await super().async_added_to_hass() + try: + from .entities.base_sensor import resolve_box_id + + self._box_id = resolve_box_id(self.coordinator) + _LOGGER.debug( + "Created binary sensor %s with box_id %s", self.name, self._box_id + ) + except Exception: + return @property - def name(self) -> str: - """Return the name of the sensor.""" - language: str = self.hass.config.language + def name(self): + language = getattr(self.hass.config, "language", "en") if language == "cs": return BINARY_SENSOR_TYPES[self._sensor_type]["name_cs"] return BINARY_SENSOR_TYPES[self._sensor_type]["name"] @property - def device_class(self) -> Optional[str]: - """Return the device class.""" + def unique_id(self): + if self._box_id: + return f"oig_cloud_{self._box_id}_{self._sensor_type}" + return None + + @property + def device_class(self): return BINARY_SENSOR_TYPES[self._sensor_type]["device_class"] @property - def is_on(self) -> Optional[bool]: - """Return true if the binary sensor is on.""" - _LOGGER.debug(f"Getting state for {self.entity_id}") - if not self.coordinator.data: - _LOGGER.debug(f"Data is None for {self.entity_id}") + def is_on(self): + if not self.coordinator.data or not self._box_id: return None - - data: Dict[str, Any] = self.coordinator.data - vals = data.values() - pv_data: Dict[str, Any] = list(vals)[0] - try: - node_value: Any = pv_data[self._node_id][self._node_key] - return bool(node_value) - except (KeyError, TypeError): - _LOGGER.warning(f"Could not find data for {self._node_id}.{self._node_key}") + pv_data = self.coordinator.data[self._box_id] + value = pv_data[self._node_id][self._node_key] + return bool(value) + except Exception as e: + _LOGGER.error(f"Error reading state for {self.unique_id}: {e}") return None @property - def unique_id(self) -> str: - """Return unique ID for sensor.""" - return f"oig_cloud_{self._box_id}_{self._sensor_type}" + def should_poll(self): + return False @property - def device_info(self) -> DeviceInfo: - """Return device information.""" - data: Dict[str, Any] = self.coordinator.data - vals = data.values() - pv_data: Dict[str, Any] = list(vals)[0] - is_queen: bool = pv_data.get("queen", False) - - model_name: str = f"{DEFAULT_NAME} {'Queen' if is_queen else 'Home'}" - - return DeviceInfo( - identifiers={(DOMAIN, self._box_id)}, - name=f"{model_name} {self._box_id}", - manufacturer="OIG", - model=model_name, - ) + def device_info(self): + if not self._box_id: + return None + try: + model_name = f"{DEFAULT_NAME} Home" + is_queen = self.coordinator.data[self._box_id].get("queen", False) + if is_queen: + model_name = f"{DEFAULT_NAME} Queen" + return { + "identifiers": {(DOMAIN, self._box_id)}, + "name": f"{model_name} {self._box_id}", + "manufacturer": "OIG", + "model": model_name, + } + except Exception: + return None - @property - def available(self) -> bool: - """Return if entity is available.""" - # First, check if coordinator is available at all - if not self.coordinator.last_update_success: - return False - - # Then check if we have the necessary data - if not self.coordinator.data: - return False - - # If we have data, check if we have the required node - box_id = list(self.coordinator.data.keys())[0] - if self._node_id not in self.coordinator.data[box_id]: - return False - - return True - - -async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry, async_add_entities: AddEntitiesCallback) -> None: - """Set up OIG Cloud binary sensors from a config entry.""" - _LOGGER.debug("Setting up OIG Cloud binary sensors") - - # Get coordinator from hass.data - entry_data = hass.data[DOMAIN][config_entry.entry_id] - coordinator: OigCloudDataUpdateCoordinator = entry_data["coordinator"] - - if not coordinator.data: - _LOGGER.error("No data available from coordinator") - return - - if not BINARY_SENSOR_TYPES: - _LOGGER.info("No binary sensor types defined, skipping binary sensor setup") - return - - # Create sensor entities + +async def async_setup_entry(hass, config_entry, async_add_entities): + _LOGGER.debug("Setting up OIG Cloud Binary Sensors") + + oig_data = hass.data[DOMAIN][config_entry.entry_id] + api: OigCloudApi = oig_data["api"] + standard_scan_interval = oig_data.get("standard_scan_interval", 30) + + async def update_data(): + return await api.get_stats() + + coordinator = DataUpdateCoordinator( + hass, + _LOGGER, + name="OIG Cloud Binary Sensor Coordinator", + update_method=update_data, + update_interval=timedelta(seconds=standard_scan_interval), + ) + + await coordinator.async_config_entry_first_refresh() + + # Standardní binary sensory z coordinator entities = [ OigCloudBinarySensor(coordinator, sensor_type) for sensor_type in BINARY_SENSOR_TYPES ] - - if not entities: - _LOGGER.debug("No binary sensor entities to add") - return - + async_add_entities(entities) - _LOGGER.debug("Binary sensor setup completed") + + _LOGGER.debug("Finished setting up OIG Cloud Binary Sensors") diff --git a/custom_components/oig_cloud/binary_sensor_types.py b/custom_components/oig_cloud/binary_sensor_types.py index 8ded337d..aad48e5d 100644 --- a/custom_components/oig_cloud/binary_sensor_types.py +++ b/custom_components/oig_cloud/binary_sensor_types.py @@ -1,6 +1,16 @@ -from typing import Dict, Any, Optional +from typing import Any, Dict + from homeassistant.components.binary_sensor import BinarySensorDeviceClass BINARY_SENSOR_TYPES: Dict[str, Dict[str, Any]] = { - + "chmu_warning_active": { + "name": "ČHMÚ Warning Active", + "name_cs": "Aktivní varování ČHMÚ", + "icon": "mdi:alert", + "device_class": BinarySensorDeviceClass.SAFETY, + "sensor_type_category": "chmu_warnings", + "device_mapping": "analytics", + "description": "Indikátor aktivního meteorologického varování (ON pokud severity >= 2 / Moderate)", + "enabled_by_default": False, + }, } diff --git a/custom_components/oig_cloud/boiler/__init__.py b/custom_components/oig_cloud/boiler/__init__.py new file mode 100644 index 00000000..1a4dbc1c --- /dev/null +++ b/custom_components/oig_cloud/boiler/__init__.py @@ -0,0 +1,12 @@ +"""OIG Cloud - Bojler modul.""" + +from .coordinator import BoilerCoordinator +from .models import BoilerPlan, BoilerProfile, BoilerSlot, EnergySource + +__all__ = [ + "BoilerCoordinator", + "BoilerProfile", + "BoilerPlan", + "BoilerSlot", + "EnergySource", +] diff --git a/custom_components/oig_cloud/boiler/api_views.py b/custom_components/oig_cloud/boiler/api_views.py new file mode 100644 index 00000000..caaebe0b --- /dev/null +++ b/custom_components/oig_cloud/boiler/api_views.py @@ -0,0 +1,165 @@ +"""API views pro bojlerový modul.""" + +import logging + +from aiohttp import web +from homeassistant.components.http import HomeAssistantView +from homeassistant.core import HomeAssistant + +from ..const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +class BoilerProfileView(HomeAssistantView): + """API endpoint pro data profilu.""" + + url = "/api/oig_cloud/{entry_id}/boiler_profile" + name = "api:oig_cloud:boiler_profile" + requires_auth = True + + def __init__(self, hass: HomeAssistant) -> None: + """Initialize view.""" + self.hass = hass + + async def get(self, request: web.Request, entry_id: str) -> web.Response: + """Vrátí profilová data ve formátu pro heatmapu.""" + try: + # Získat boiler coordinator + entry_data = self.hass.data.get(DOMAIN, {}).get(entry_id) + if not entry_data: + return web.json_response({"error": "Entry not found"}, status=404) + + boiler_coordinator = entry_data.get("boiler_coordinator") + if not boiler_coordinator: + return web.json_response( + {"error": "Boiler module not enabled"}, status=404 + ) + + # Získat všechny profily + profiles = boiler_coordinator.profiler.get_all_profiles() + + # Formátovat data pro frontend + response_data = { + "profiles": {}, + "current_category": None, + } + + # Aktuální profil + if boiler_coordinator._current_profile: + response_data["current_category"] = ( + boiler_coordinator._current_profile.category + ) + + # Všechny profily + for category, profile in profiles.items(): + # Heatmap data: 7 dní × 24 hodin + heatmap_data = [] + for _ in range(7): + day_data = [] + for hour in range(24): + consumption, confidence = profile.get_consumption(hour) + day_data.append( + { + "hour": hour, + "consumption": round(consumption, 3), + "confidence": round(confidence, 2), + } + ) + heatmap_data.append(day_data) + + response_data["profiles"][category] = { + "category": category, + "heatmap": heatmap_data, + "hourly_avg": { + str(h): round(v, 3) for h, v in profile.hourly_avg.items() + }, + "confidence": { + str(h): round(v, 2) for h, v in profile.confidence.items() + }, + "sample_count": { + str(h): c for h, c in profile.sample_count.items() + }, + "last_updated": ( + profile.last_updated.isoformat() + if profile.last_updated + else None + ), + } + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error("Error in boiler profile API: %s", e, exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +class BoilerPlanView(HomeAssistantView): + """API endpoint pro plán ohřevu.""" + + url = "/api/oig_cloud/{entry_id}/boiler_plan" + name = "api:oig_cloud:boiler_plan" + requires_auth = True + + def __init__(self, hass: HomeAssistant) -> None: + """Initialize view.""" + self.hass = hass + + async def get(self, request: web.Request, entry_id: str) -> web.Response: + """Vrátí plán ohřevu.""" + try: + # Získat boiler coordinator + entry_data = self.hass.data.get(DOMAIN, {}).get(entry_id) + if not entry_data: + return web.json_response({"error": "Entry not found"}, status=404) + + boiler_coordinator = entry_data.get("boiler_coordinator") + if not boiler_coordinator: + return web.json_response( + {"error": "Boiler module not enabled"}, status=404 + ) + + # Získat plán + plan = boiler_coordinator._current_plan + if not plan: + return web.json_response({"error": "No plan available yet"}, status=404) + + # Formátovat sloty + slots_data = [] + for slot in plan.slots: + slots_data.append( + { + "start": slot.start.isoformat(), + "end": slot.end.isoformat(), + "consumption_kwh": round(slot.avg_consumption_kwh, 3), + "confidence": round(slot.confidence, 2), + "recommended_source": slot.recommended_source.value, + "spot_price": slot.spot_price_kwh, + "alt_price": slot.alt_price_kwh, + "overflow_available": slot.overflow_available, + } + ) + + response_data = { + "created_at": plan.created_at.isoformat(), + "valid_until": plan.valid_until.isoformat(), + "total_consumption_kwh": round(plan.total_consumption_kwh, 2), + "estimated_cost_czk": round(plan.estimated_cost_czk, 2), + "fve_kwh": round(plan.fve_kwh, 2), + "grid_kwh": round(plan.grid_kwh, 2), + "alt_kwh": round(plan.alt_kwh, 2), + "slots": slots_data, + } + + return web.json_response(response_data) + + except Exception as e: + _LOGGER.error("Error in boiler plan API: %s", e, exc_info=True) + return web.json_response({"error": str(e)}, status=500) + + +def register_boiler_api_views(hass: HomeAssistant) -> None: + """Registruje API views pro bojlerový modul.""" + hass.http.register_view(BoilerProfileView(hass)) + hass.http.register_view(BoilerPlanView(hass)) + _LOGGER.info("Boiler API views registered") diff --git a/custom_components/oig_cloud/boiler/const.py b/custom_components/oig_cloud/boiler/const.py new file mode 100644 index 00000000..105885b4 --- /dev/null +++ b/custom_components/oig_cloud/boiler/const.py @@ -0,0 +1,58 @@ +"""Konstanty pro bojlerový modul.""" + +from typing import Final + +# Fyzikální konstanty +WATER_SPECIFIC_HEAT: Final[float] = 4186.0 # J/(kg·K) +WATER_DENSITY: Final[float] = 1000.0 # kg/m³ +JOULES_TO_KWH: Final[float] = 1 / 3_600_000 # 1 kWh = 3.6 MJ + +# Stratifikace +TEMP_GRADIENT_PER_10CM: Final[float] = 0.8 # °C/10cm výška +BOILER_HEIGHT_DEFAULT: Final[float] = 1.5 # m + +# Pozice senzoru (% výšky od spodu) +SENSOR_POSITION_MAP: Final[dict[str, float]] = { + "top": 1.0, # 100% + "upper_quarter": 0.75, # 75% + "middle": 0.5, # 50% + "lower_quarter": 0.25, # 25% +} + +# Profiling - adaptivní kategorie +PROFILE_CATEGORIES: Final[list[str]] = [ + "workday_spring", + "workday_summer", + "workday_autumn", + "workday_winter", + "weekend_spring", + "weekend_summer", + "weekend_autumn", + "weekend_winter", +] + +# Sezóny (měsíc → sezóna) +SEASON_MAP: Final[dict[int, str]] = { + 3: "spring", + 4: "spring", + 5: "spring", + 6: "summer", + 7: "summer", + 8: "summer", + 9: "autumn", + 10: "autumn", + 11: "autumn", + 12: "winter", + 1: "winter", + 2: "winter", +} + +# Minimální confidence pro použití profilu +MIN_CONFIDENCE: Final[float] = 0.3 + +# FVE overflow detekce +BATTERY_SOC_OVERFLOW_THRESHOLD: Final[float] = 100.0 # % + +# Planning +DEFAULT_HYSTERESIS_TEMP: Final[float] = 5.0 # °C +MIN_SLOT_DURATION: Final[int] = 15 # minut diff --git a/custom_components/oig_cloud/boiler/coordinator.py b/custom_components/oig_cloud/boiler/coordinator.py new file mode 100644 index 00000000..a81ccaf3 --- /dev/null +++ b/custom_components/oig_cloud/boiler/coordinator.py @@ -0,0 +1,387 @@ +"""Coordinator pro bojlerový modul.""" + +import logging +from datetime import datetime, timedelta +from typing import Any, Optional + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed +from homeassistant.util import dt as dt_util + +from ..const import ( + CONF_BOILER_ALT_COST_KWH, + CONF_BOILER_ALT_ENERGY_SENSOR, + CONF_BOILER_DEADLINE_TIME, + CONF_BOILER_HAS_ALTERNATIVE_HEATING, + CONF_BOILER_PLAN_SLOT_MINUTES, + CONF_BOILER_SPOT_PRICE_SENSOR, + CONF_BOILER_TEMP_SENSOR_BOTTOM, + CONF_BOILER_TEMP_SENSOR_POSITION, + CONF_BOILER_TEMP_SENSOR_TOP, + CONF_BOILER_TWO_ZONE_SPLIT_RATIO, + CONF_BOILER_VOLUME_L, + DEFAULT_BOILER_DEADLINE_TIME, + DEFAULT_BOILER_PLAN_SLOT_MINUTES, + DEFAULT_BOILER_TEMP_SENSOR_POSITION, + DEFAULT_BOILER_TWO_ZONE_SPLIT_RATIO, +) +from .models import BoilerPlan, BoilerProfile, EnergySource +from .planner import BoilerPlanner +from .profiler import BoilerProfiler +from .utils import ( + calculate_energy_to_heat, + calculate_stratified_temp, + estimate_residual_energy, + validate_temperature_sensor, +) + +_LOGGER = logging.getLogger(__name__) + +UPDATE_INTERVAL = timedelta(minutes=5) +PROFILE_UPDATE_INTERVAL = timedelta(hours=24) + + +class BoilerCoordinator(DataUpdateCoordinator[dict[str, Any]]): + """Coordinator pro bojlerový modul - update každých 5 minut.""" + + def __init__( + self, + hass: HomeAssistant, + config: dict[str, Any], + ) -> None: + """ + Inicializace coordinatoru. + + Args: + hass: Home Assistant instance + config: Konfigurace z config_flow + """ + super().__init__( + hass, + _LOGGER, + name="OIG Boiler", + update_interval=UPDATE_INTERVAL, + ) + + self.config = config + self._last_profile_update: Optional[datetime] = None + self._current_profile: Optional[BoilerProfile] = None + self._current_plan: Optional[BoilerPlan] = None + + # Inicializace komponent + self.profiler = BoilerProfiler( + hass=hass, + energy_sensor="sensor.oig_2206237016_boiler_day_w", # OIG energy sensor (Wh) + lookback_days=60, + ) + + self.planner = BoilerPlanner( + hass=hass, + slot_minutes=config.get( + CONF_BOILER_PLAN_SLOT_MINUTES, DEFAULT_BOILER_PLAN_SLOT_MINUTES + ), + alt_cost_kwh=config.get(CONF_BOILER_ALT_COST_KWH, 0.0), + has_alternative=config.get(CONF_BOILER_HAS_ALTERNATIVE_HEATING, False), + ) + + async def _async_update_data(self) -> dict[str, Any]: + """ + Update každých 5 minut. + + Returns: + Data pro senzory + """ + try: + now = dt_util.now() + + # 1. Update profilu (1× denně) + if self._should_update_profile(now): + await self._update_profile() + + # 2. Načíst aktuální teploty + temperatures = await self._read_temperatures() + + # 3. Vypočítat energetický stav + energy_state = self._calculate_energy_state(temperatures) + + # 4. Trackování energie + energy_tracking = await self._track_energy_sources() + + # 5. Update plánu (pokud je profil dostupný) + if self._current_profile: + await self._update_plan() + + # 6. Aktuální slot a doporučení + current_slot = None + charging_recommended = False + recommended_source = None + + if self._current_plan: + current_slot = self._current_plan.get_current_slot(now) + if current_slot: + charging_recommended = True + recommended_source = current_slot.recommended_source.value + + # Sestavit data + data = { + "temperatures": temperatures, + "energy_state": energy_state, + "energy_tracking": energy_tracking, + "profile": self._current_profile, + "plan": self._current_plan, + "current_slot": current_slot, + "charging_recommended": charging_recommended, + "recommended_source": recommended_source, + "last_update": now, + } + + return data + + except Exception as err: + _LOGGER.error("Chyba při update bojleru: %s", err, exc_info=True) + raise UpdateFailed(f"Update selhal: {err}") from err + + def _should_update_profile(self, now: datetime) -> bool: + """Kontrola, zda je potřeba aktualizovat profil.""" + if self._last_profile_update is None: + return True + + time_since_update = now - self._last_profile_update + return time_since_update >= PROFILE_UPDATE_INTERVAL + + async def _update_profile(self) -> None: + """Aktualizuje profilování z SQL historie.""" + _LOGGER.info("Aktualizace profilů bojleru...") + try: + profiles = await self.profiler.async_update_profiles() + + # Vybrat profil pro aktuální čas + now = dt_util.now() + self._current_profile = self.profiler.get_profile_for_datetime(now) + + self._last_profile_update = now + _LOGGER.info("Profily aktualizovány, celkem kategorií: %s", len(profiles)) + + except Exception as err: + _LOGGER.error("Chyba při aktualizaci profilů: %s", err) + + async def _read_temperatures(self) -> dict[str, Optional[float]]: + """Načte teploty z teploměrů.""" + config = self.config + + top_sensor = config.get(CONF_BOILER_TEMP_SENSOR_TOP) + bottom_sensor = config.get(CONF_BOILER_TEMP_SENSOR_BOTTOM) + sensor_position = config.get( + CONF_BOILER_TEMP_SENSOR_POSITION, DEFAULT_BOILER_TEMP_SENSOR_POSITION + ) + + temp_top = None + temp_bottom = None + + # Horní senzor + if top_sensor: + state = self.hass.states.get(top_sensor) + temp_top = validate_temperature_sensor(state, top_sensor) + + # Dolní senzor + if bottom_sensor: + state = self.hass.states.get(bottom_sensor) + temp_bottom = validate_temperature_sensor(state, bottom_sensor) + + # Stratifikace pokud jen jeden senzor + temp_upper_zone = None + temp_lower_zone = None + + if temp_top is not None and temp_bottom is None: + # Extrapolace z horního + split_ratio = config.get( + CONF_BOILER_TWO_ZONE_SPLIT_RATIO, DEFAULT_BOILER_TWO_ZONE_SPLIT_RATIO + ) + temp_upper_zone, temp_lower_zone = calculate_stratified_temp( + measured_temp=temp_top, + sensor_position=sensor_position, + mode="two_zone", + split_ratio=split_ratio, + ) + elif temp_top is not None and temp_bottom is not None: + # Dva senzory - použít přímo + temp_upper_zone = temp_top + temp_lower_zone = temp_bottom + + return { + "top": temp_top, + "bottom": temp_bottom, + "upper_zone": temp_upper_zone, + "lower_zone": temp_lower_zone, + } + + def _calculate_energy_state( + self, temperatures: dict[str, Optional[float]] + ) -> dict[str, float]: + """Vypočítá energetický stav bojleru.""" + volume_l = self.config.get(CONF_BOILER_VOLUME_L, 200.0) + target_temp = self.config.get("boiler_target_temp_c", 60.0) + + temp_upper = temperatures.get("upper_zone") + temp_lower = temperatures.get("lower_zone") + + energy_needed_kwh = 0.0 + avg_temp = None + + if temp_upper is not None and temp_lower is not None: + avg_temp = (temp_upper + temp_lower) / 2.0 + + # Energie potřebná k ohřevu + energy_needed_kwh = calculate_energy_to_heat( + volume_liters=volume_l, + temp_current=avg_temp, + temp_target=target_temp, + ) + + return { + "avg_temp": avg_temp or 0.0, + "energy_needed_kwh": energy_needed_kwh, + } + + async def _track_energy_sources(self) -> dict[str, float]: + """Trackuje energii z jednotlivých zdrojů.""" + # OIG senzory + manual_mode_entity = "sensor.oig_2206237016_boiler_manual_mode" + current_cbb_entity = "sensor.oig_2206237016_boiler_current_cbb_w" + day_energy_entity = "sensor.oig_2206237016_boiler_day_w" + + # User alternativní senzor + alt_energy_sensor = self.config.get(CONF_BOILER_ALT_ENERGY_SENSOR) + + manual_mode_state, current_cbb_state, day_energy_state = self._get_energy_states( + manual_mode_entity, current_cbb_entity, day_energy_entity + ) + current_source = self._detect_energy_source( + manual_mode_state, current_cbb_state + ) + total_energy_kwh = self._read_total_energy_kwh(day_energy_state) + + # FVE a Grid energie (placeholder - potřeba trackování v čase) + fve_kwh = 0.0 + grid_kwh = 0.0 + + alt_kwh = self._read_alt_energy_kwh(alt_energy_sensor) + if alt_kwh is None: + alt_kwh = estimate_residual_energy(total_energy_kwh, fve_kwh, grid_kwh) + + return { + "current_source": current_source.value, + "total_kwh": total_energy_kwh, + "fve_kwh": fve_kwh, + "grid_kwh": grid_kwh, + "alt_kwh": alt_kwh, + } + + def _get_energy_states( + self, manual_mode_entity: str, current_cbb_entity: str, day_energy_entity: str + ): + manual_mode_state = self.hass.states.get(manual_mode_entity) + current_cbb_state = self.hass.states.get(current_cbb_entity) + day_energy_state = self.hass.states.get(day_energy_entity) + return manual_mode_state, current_cbb_state, day_energy_state + + def _detect_energy_source(self, manual_mode_state, current_cbb_state) -> EnergySource: + if manual_mode_state and manual_mode_state.state == "Zapnuto": + return EnergySource.FVE + if current_cbb_state: + try: + if float(current_cbb_state.state) > 0: + return EnergySource.FVE + except ValueError: + pass + return EnergySource.GRID + + def _read_total_energy_kwh(self, day_energy_state) -> float: + if not day_energy_state: + return 0.0 + try: + return float(day_energy_state.state) / 1000.0 + except ValueError: + return 0.0 + + def _read_alt_energy_kwh(self, alt_energy_sensor: Optional[str]) -> Optional[float]: + if not alt_energy_sensor: + return None + alt_state = self.hass.states.get(alt_energy_sensor) + if not alt_state: + return None # pragma: no cover + try: + alt_kwh = float(alt_state.state) + if alt_state.attributes.get("unit_of_measurement") == "Wh": + alt_kwh /= 1000.0 + return alt_kwh + except ValueError: + return None + + async def _update_plan(self) -> None: + """Aktualizuje plán ohřevu.""" + if not self._current_profile: + return + + try: + # Načíst spotové ceny + spot_prices = await self._get_spot_prices() + + # Načíst overflow okna z battery_forecast + overflow_windows = await self._get_overflow_windows() + + # Deadline + deadline_time = self.config.get( + CONF_BOILER_DEADLINE_TIME, DEFAULT_BOILER_DEADLINE_TIME + ) + + # Vytvořit plán + self._current_plan = await self.planner.async_create_plan( + profile=self._current_profile, + spot_prices=spot_prices, + overflow_windows=overflow_windows, + deadline_time=deadline_time, + ) + + except Exception as err: + _LOGGER.error("Chyba při tvorbě plánu: %s", err) + + async def _get_spot_prices(self) -> dict[datetime, float]: + """Načte spotové ceny ze senzoru.""" + spot_sensor = self.config.get(CONF_BOILER_SPOT_PRICE_SENSOR) + if not spot_sensor: + return {} + + state = self.hass.states.get(spot_sensor) + if not state: + return {} + + # Očekáváme atribut 'prices' jako list [{datetime, price}, ...] + prices_attr = state.attributes.get("prices", []) + + result = {} + for entry in prices_attr: + if isinstance(entry, dict): + dt_str = entry.get("datetime") + price = entry.get("price") + + if dt_str and price is not None: + dt_obj = dt_util.parse_datetime(dt_str) + if dt_obj: + result[dt_obj] = float(price) + + return result + + async def _get_overflow_windows(self) -> list[tuple[datetime, datetime]]: + """Načte overflow okna z battery_forecast coordinatoru.""" + # Pokus o získání dat z battery_forecast coordinatoru + battery_coordinator = self.hass.data.get("oig_cloud", {}).get( + "battery_forecast_coordinator" + ) + + if not battery_coordinator: + _LOGGER.debug("Battery forecast coordinator není dostupný") + return [] + + battery_data = battery_coordinator.data + return await self.planner.async_get_overflow_windows(battery_data) diff --git a/custom_components/oig_cloud/boiler/models.py b/custom_components/oig_cloud/boiler/models.py new file mode 100644 index 00000000..42cfef50 --- /dev/null +++ b/custom_components/oig_cloud/boiler/models.py @@ -0,0 +1,67 @@ +"""Datové modely pro bojlerový modul.""" + +from dataclasses import dataclass, field +from datetime import datetime +from enum import Enum +from typing import Optional + + +class EnergySource(str, Enum): + """Zdroj energie pro ohřev.""" + + FVE = "fve" # Fotovoltaika (režim CBB - "Zapnuto") + GRID = "grid" # Síť (normální režim - "Vypnuto") + ALTERNATIVE = "alternative" # Alternativní zdroj (např. tepelné čerpadlo) + + +@dataclass +class BoilerSlot: + """15minutový slot v plánu.""" + + start: datetime + end: datetime + avg_consumption_kwh: float # Průměrná spotřeba z profilu + confidence: float # 0-1, kvalita predikce + recommended_source: EnergySource # Doporučený zdroj + spot_price_kwh: Optional[float] = None # Cena ze sítě (Kč/kWh) + alt_price_kwh: Optional[float] = None # Cena z alternativy (Kč/kWh) + overflow_available: bool = False # Je k dispozici FVE overflow + + +@dataclass +class BoilerPlan: + """Plán ohřevu na 24 hodin.""" + + created_at: datetime + valid_until: datetime + slots: list[BoilerSlot] = field(default_factory=list) + total_consumption_kwh: float = 0.0 + estimated_cost_czk: float = 0.0 + fve_kwh: float = 0.0 # Kolik z FVE (zdarma) + grid_kwh: float = 0.0 # Kolik ze sítě + alt_kwh: float = 0.0 # Kolik z alternativy + + def get_current_slot(self, now: datetime) -> Optional[BoilerSlot]: + """Vrátí aktuální slot podle času.""" + for slot in self.slots: + if slot.start <= now < slot.end: + return slot + return None + + +@dataclass +class BoilerProfile: + """Profilování spotřeby (adaptivní - 8 kategorií).""" + + category: str # "workday_spring", "weekend_winter" atd. + hourly_avg: dict[int, float] = field(default_factory=dict) # Hodina → průměr kWh + confidence: dict[int, float] = field(default_factory=dict) # Hodina → confidence + sample_count: dict[int, int] = field(default_factory=dict) # Hodina → počet vzorků + last_updated: Optional[datetime] = None + + def get_consumption(self, hour: int) -> tuple[float, float]: + """Vrátí (spotřeba_kWh, confidence) pro danou hodinu.""" + return ( + self.hourly_avg.get(hour, 0.0), + self.confidence.get(hour, 0.0), + ) diff --git a/custom_components/oig_cloud/boiler/planner.py b/custom_components/oig_cloud/boiler/planner.py new file mode 100644 index 00000000..fdcd5953 --- /dev/null +++ b/custom_components/oig_cloud/boiler/planner.py @@ -0,0 +1,291 @@ +"""Plánovač ohřevu bojleru s optimalizací nákladů.""" + +import asyncio +import logging +from datetime import datetime, timedelta +from typing import Any, Optional + +from homeassistant.core import HomeAssistant +from homeassistant.util import dt as dt_util + +from .const import BATTERY_SOC_OVERFLOW_THRESHOLD +from .models import BoilerPlan, BoilerProfile, BoilerSlot, EnergySource + +_LOGGER = logging.getLogger(__name__) + + +class BoilerPlanner: + """Plánovač ohřevu s optimalizací nákladů.""" + + def __init__( + self, + hass: HomeAssistant, + slot_minutes: int = 15, + alt_cost_kwh: float = 0.0, + has_alternative: bool = False, + ) -> None: + """ + Inicializace plánovače. + + Args: + hass: Home Assistant instance + slot_minutes: Délka slotu v minutách (15) + alt_cost_kwh: Cena alternativního zdroje [Kč/kWh] + has_alternative: Je k dispozici alternativní zdroj? + """ + self.hass = hass + self.slot_minutes = slot_minutes + self.alt_cost_kwh = alt_cost_kwh + self.has_alternative = has_alternative + + async def async_create_plan( + self, + profile: BoilerProfile, + spot_prices: dict[datetime, float], + overflow_windows: list[tuple[datetime, datetime]], + deadline_time: str = "06:00", + ) -> BoilerPlan: + """ + Vytvoří plán na 24 hodin s optimalizací nákladů. + + Args: + profile: Profil spotřeby + spot_prices: Spotové ceny {datetime: Kč/kWh} + overflow_windows: FVE overflow okna [(start, end), ...] + deadline_time: Čas do kdy má být ohřev hotový (HH:MM) + + Returns: + BoilerPlan s doporučenými zdroji + """ + await asyncio.sleep(0) + _ = deadline_time + now = dt_util.now() + plan_start = now.replace(hour=0, minute=0, second=0, microsecond=0) + plan_end = plan_start + timedelta(days=1) + + plan = BoilerPlan( + created_at=now, + valid_until=plan_end, + slots=[], + ) + + # Generovat sloty po 15 minutách + current_time = plan_start + while current_time < plan_end: + slot_end = current_time + timedelta(minutes=self.slot_minutes) + + # Průměrná spotřeba za hodinu z profilu + hour = current_time.hour + hourly_consumption, confidence = profile.get_consumption(hour) + + # Přepočítat na 15min slot + slot_consumption = hourly_consumption * (self.slot_minutes / 60.0) + + # Kontrola FVE overflow + overflow_available = self._is_in_overflow_window( + current_time, slot_end, overflow_windows + ) + + # Spotová cena (interpolace pokud chybí) + spot_price = self._get_spot_price(current_time, spot_prices) + + # Doporučený zdroj (priorita: FVE → Grid → Alt) + recommended_source = self._recommend_source( + overflow_available=overflow_available, + spot_price=spot_price, + alt_price=self.alt_cost_kwh, + ) + + slot = BoilerSlot( + start=current_time, + end=slot_end, + avg_consumption_kwh=slot_consumption, + confidence=confidence, + recommended_source=recommended_source, + spot_price_kwh=spot_price, + alt_price_kwh=self.alt_cost_kwh if self.has_alternative else None, + overflow_available=overflow_available, + ) + + plan.slots.append(slot) + current_time = slot_end + + # Vypočítat agregované hodnoty + self._calculate_plan_totals(plan) + + _LOGGER.info( + "Plán vytvořen: %s slotů, %.2f kWh celkem, %.2f Kč odhadovaná cena", + len(plan.slots), + plan.total_consumption_kwh, + plan.estimated_cost_czk, + ) + + return plan + + def _is_in_overflow_window( + self, + start: datetime, + end: datetime, + overflow_windows: list[tuple[datetime, datetime]], + ) -> bool: + """Kontrola, zda je slot v overflow okně.""" + for window_start, window_end in overflow_windows: + # Překryv: slot začíná před koncem okna a končí po začátku okna + if start < window_end and end > window_start: + return True + return False + + def _get_spot_price( + self, + time: datetime, + spot_prices: dict[datetime, float], + ) -> Optional[float]: + """ + Získá spotovou cenu pro daný čas (s interpolací). + + Args: + time: Časový okamžik + spot_prices: Dostupné ceny {datetime: Kč/kWh} + + Returns: + Cena nebo None + """ + # Přímý match + if time in spot_prices: + return spot_prices[time] + + # Interpolace - najít nejbližší záznam + hour_start = time.replace(minute=0, second=0, microsecond=0) + if hour_start in spot_prices: + return spot_prices[hour_start] + + # Fallback - průměr za den + if spot_prices: + return sum(spot_prices.values()) / len(spot_prices) + + return None + + def _recommend_source( + self, + overflow_available: bool, + spot_price: Optional[float], + alt_price: float, + ) -> EnergySource: + """ + Doporučí zdroj podle priority a ceny. + + Priorita: + 1. FVE overflow (zdarma) - pokud dostupné + 2. Grid vs Alternative - podle ceny + + Args: + overflow_available: Je FVE overflow k dispozici? + spot_price: Spotová cena ze sítě [Kč/kWh] + alt_price: Cena alternativního zdroje [Kč/kWh] + + Returns: + Doporučený zdroj + """ + # Priorita 1: FVE overflow (0 Kč) + if overflow_available: + return EnergySource.FVE + + # Priorita 2: Porovnat Grid vs Alternative + if not self.has_alternative: + return EnergySource.GRID + + if spot_price is None: + # Bez spotové ceny - použít alternativu pokud dostupná + return EnergySource.ALTERNATIVE if alt_price > 0 else EnergySource.GRID + + # Porovnat ceny + if alt_price > 0 and alt_price < spot_price: + return EnergySource.ALTERNATIVE + + return EnergySource.GRID + + def _calculate_plan_totals(self, plan: BoilerPlan) -> None: + """ + Vypočítá agregované hodnoty plánu. + + Args: + plan: Plán k aktualizaci (in-place) + """ + total_consumption = 0.0 + total_cost = 0.0 + fve_kwh = 0.0 + grid_kwh = 0.0 + alt_kwh = 0.0 + + for slot in plan.slots: + consumption = slot.avg_consumption_kwh + total_consumption += consumption + + if slot.recommended_source == EnergySource.FVE: + fve_kwh += consumption + # FVE je zdarma + elif slot.recommended_source == EnergySource.GRID: + grid_kwh += consumption + if slot.spot_price_kwh is not None: + total_cost += consumption * slot.spot_price_kwh + elif slot.recommended_source == EnergySource.ALTERNATIVE: + alt_kwh += consumption + if slot.alt_price_kwh is not None: + total_cost += consumption * slot.alt_price_kwh + + plan.total_consumption_kwh = total_consumption + plan.estimated_cost_czk = total_cost + plan.fve_kwh = fve_kwh + plan.grid_kwh = grid_kwh + plan.alt_kwh = alt_kwh + + async def async_get_overflow_windows( + self, + battery_forecast_data: Optional[dict], + ) -> list[tuple[datetime, datetime]]: + """ + Extrahuje overflow okna z battery_forecast. + + Args: + battery_forecast_data: Data z battery_forecast coordinatoru + + Returns: + List [(start, end)] datetime dvojic + """ + await asyncio.sleep(0) + if not battery_forecast_data: + _LOGGER.debug("Battery forecast data nejsou dostupná") + return [] + + overflow_windows = battery_forecast_data.get("overflow_windows", []) + + # Filtrovat okna s SOC >= 100% + filtered_windows: list[tuple[datetime, datetime]] = [] + for window in overflow_windows: + parsed = self._parse_overflow_window(window) + if parsed: + filtered_windows.append(parsed) + + _LOGGER.debug("Nalezeno %s overflow oken (SOC >= 100%%)", len(filtered_windows)) + return filtered_windows + + @staticmethod + def _parse_overflow_window( + window: dict[str, Any] + ) -> Optional[tuple[datetime, datetime]]: + soc = window.get("soc", 0.0) + if soc < BATTERY_SOC_OVERFLOW_THRESHOLD: + return None + start = _parse_window_datetime(window.get("start")) + end = _parse_window_datetime(window.get("end")) + if start and end: + return start, end + return None + + +def _parse_window_datetime(value: Any) -> Optional[datetime]: + if isinstance(value, datetime): + return value + if isinstance(value, str): + return dt_util.parse_datetime(value) + return None diff --git a/custom_components/oig_cloud/boiler/profiler.py b/custom_components/oig_cloud/boiler/profiler.py new file mode 100644 index 00000000..a6b155ca --- /dev/null +++ b/custom_components/oig_cloud/boiler/profiler.py @@ -0,0 +1,247 @@ +"""Profilovací engine - učení z historických dat.""" + +import logging +from collections import defaultdict +from datetime import datetime, timedelta +from typing import Optional + +from homeassistant.components.recorder.history import state_changes_during_period +from homeassistant.core import HomeAssistant +from homeassistant.helpers.recorder import get_instance +from homeassistant.util import dt as dt_util + +from .const import MIN_CONFIDENCE, PROFILE_CATEGORIES, SEASON_MAP +from .models import BoilerProfile + +_LOGGER = logging.getLogger(__name__) + + +def _get_profile_category(dt: datetime) -> str: + """Určí kategorii profilu podle data.""" + is_weekend = dt.weekday() >= 5 + season = SEASON_MAP.get(dt.month, "spring") + + day_type = "weekend" if is_weekend else "workday" + return f"{day_type}_{season}" + + +class BoilerProfiler: + """Profilování spotřeby bojleru z SQL historie.""" + + def __init__( + self, + hass: HomeAssistant, + energy_sensor: str, + lookback_days: int = 60, + ) -> None: + """ + Inicializace profileru. + + Args: + hass: Home Assistant instance + energy_sensor: entity_id senzoru celkové energie (sensor.oig_bojler_day_w → Wh) + lookback_days: Počet dní historie k analýze + """ + self.hass = hass + self.energy_sensor = energy_sensor + self.lookback_days = lookback_days + self._profiles: dict[str, BoilerProfile] = {} + + async def async_update_profiles(self) -> dict[str, BoilerProfile]: + """ + Aktualizuje všechny 8 profilů z SQL historie. + + Returns: + Dictionary {kategorie: profil} + """ + _LOGGER.info("Začíná profilování z SQL historie (%s dní)", self.lookback_days) + + # Inicializace prázdných profilů + for category in PROFILE_CATEGORIES: + self._profiles[category] = BoilerProfile( + category=category, + hourly_avg={}, + confidence={}, + sample_count={}, + last_updated=None, + ) + + # Získat historii z recorderu + end_time = dt_util.now() + start_time = end_time - timedelta(days=self.lookback_days) + + try: + history_data = await self._fetch_history(start_time, end_time) + except Exception as err: + _LOGGER.error("Chyba při čtení historie: %s", err) + return self._profiles + + # Zpracovat data + self._process_history_data(history_data) + + _LOGGER.info("Profilování dokončeno. Celkem kategorií: %s", len(self._profiles)) + return self._profiles + + async def _fetch_history( + self, + start_time: datetime, + end_time: datetime, + ) -> list[dict]: + """ + Načte historii ze SQL pomocí recorder. + + Returns: + List slovníků {timestamp, state} + """ + instance = get_instance(self.hass) + + if instance is None: + _LOGGER.error("Recorder není dostupný") + return [] + + # Recorder returns dict[entity_id, list[State]]. + history_states = await instance.async_add_executor_job( + state_changes_during_period, + self.hass, + start_time, + end_time, + self.energy_sensor, + ) + + states = history_states.get(self.energy_sensor, []) + _LOGGER.debug( + "Načteno %s záznamů z SQL pro %s", len(states), self.energy_sensor + ) + + # Konverze na jednoduchou strukturu + result = [] + for state in states: + try: + timestamp = state.last_updated + value_wh = float(state.state) + result.append({"timestamp": timestamp, "value_wh": value_wh}) + except (ValueError, AttributeError): + continue + + return result + + def _process_history_data(self, history_data: list[dict]) -> None: + """ + Zpracuje historická data a naplní profily. + + Args: + history_data: List slovníků {timestamp, value_wh} + """ + if len(history_data) < 2: + _LOGGER.warning("Nedostatek dat pro profilování") + return + + daily_data = _group_history_by_day(history_data) + categorized_hourly = _build_categorized_hourly(daily_data) + _update_profiles(self._profiles, categorized_hourly) + + def get_profile_for_datetime(self, dt: datetime) -> Optional[BoilerProfile]: + """ + Vrátí profil pro daný čas. + + Args: + dt: Časový okamžik + + Returns: + Profil nebo None pokud není dostupný + """ + category = _get_profile_category(dt) + profile = self._profiles.get(category) + + if profile is None: + _LOGGER.debug("Profil pro kategorii %s neexistuje", category) + return None + + # Kontrola minimální confidence + avg_confidence = ( + sum(profile.confidence.values()) / max(len(profile.confidence), 1) + if profile.confidence + else 0.0 + ) + + if avg_confidence < MIN_CONFIDENCE: + _LOGGER.debug( + "Profil %s má nízkou confidence (%.2f < %.2f)", + category, + avg_confidence, + MIN_CONFIDENCE, + ) + return None + + return profile + + def get_all_profiles(self) -> dict[str, BoilerProfile]: + """Vrátí všechny profily.""" + return self._profiles + + +def _group_history_by_day(history_data: list[dict]) -> dict[str, list[dict]]: + daily_data: dict[str, list[dict]] = defaultdict(list) + for entry in history_data: + day_key = entry["timestamp"].strftime("%Y-%m-%d") + daily_data[day_key].append(entry) + return daily_data + + +def _build_categorized_hourly( + daily_data: dict[str, list[dict]] +) -> dict[str, dict[int, list[float]]]: + categorized_hourly: dict[str, dict[int, list[float]]] = defaultdict( + lambda: defaultdict(list) + ) + for _day_key, day_entries in daily_data.items(): + if len(day_entries) < 2: + continue + day_entries.sort(key=lambda x: x["timestamp"]) + category = _get_profile_category(day_entries[0]["timestamp"]) + for hour, consumption_kwh in _iter_hourly_consumptions(day_entries): + categorized_hourly[category][hour].append(consumption_kwh) + return categorized_hourly + + +def _iter_hourly_consumptions(day_entries: list[dict]) -> list[tuple[int, float]]: + results: list[tuple[int, float]] = [] + for i in range(1, len(day_entries)): + prev_entry = day_entries[i - 1] + curr_entry = day_entries[i] + time_diff_hours = ( + curr_entry["timestamp"] - prev_entry["timestamp"] + ).total_seconds() / 3600.0 + if time_diff_hours <= 0 or time_diff_hours > 2: + continue + energy_diff_wh = curr_entry["value_wh"] - prev_entry["value_wh"] + if energy_diff_wh < 0: + energy_diff_wh = curr_entry["value_wh"] + consumption_kwh = (energy_diff_wh / 1000.0) / time_diff_hours + hour = curr_entry["timestamp"].hour + results.append((hour, consumption_kwh)) + return results + + +def _update_profiles( + profiles: dict[str, BoilerProfile], + categorized_hourly: dict[str, dict[int, list[float]]], +) -> None: + for category, hourly_data in categorized_hourly.items(): + profile = profiles[category] + for hour, consumptions in hourly_data.items(): + if not consumptions: + continue + avg_kwh = sum(consumptions) / len(consumptions) + count = len(consumptions) + confidence = min(1.0, count / 10.0) + profile.hourly_avg[hour] = avg_kwh + profile.confidence[hour] = confidence + profile.sample_count[hour] = count + profile.last_updated = dt_util.now() + _LOGGER.debug( + "Profil %s: %s hodin s daty, průměrná confidence %.2f", + category, + len(profile.hourly_avg), + sum(profile.confidence.values()) / max(len(profile.confidence), 1), + ) diff --git a/custom_components/oig_cloud/boiler/sensors.py b/custom_components/oig_cloud/boiler/sensors.py new file mode 100644 index 00000000..438ddd76 --- /dev/null +++ b/custom_components/oig_cloud/boiler/sensors.py @@ -0,0 +1,393 @@ +"""Senzory pro bojlerový modul.""" + +import logging +from typing import Any, Optional + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorStateClass, +) +from homeassistant.const import ( + PERCENTAGE, + EntityCategory, + UnitOfEnergy, + UnitOfTemperature, +) +from homeassistant.helpers.device_registry import DeviceInfo +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +from ..const import DOMAIN +from .coordinator import BoilerCoordinator + +_LOGGER = logging.getLogger(__name__) + + +class BoilerSensorBase(CoordinatorEntity[BoilerCoordinator], SensorEntity): + """Základní třída pro bojlerové senzory.""" + + _attr_has_entity_name = True + + def __init__( + self, + coordinator: BoilerCoordinator, + unique_id_suffix: str, + name: str, + ) -> None: + """Inicializace senzoru.""" + super().__init__(coordinator) + self._attr_unique_id = f"oig_bojler_{unique_id_suffix}" + self._attr_name = name + self._attr_device_info = DeviceInfo( + identifiers={(DOMAIN, "oig_bojler")}, + name="OIG Bojler", + manufacturer="OIG", + model="Boiler Control", + ) + + +# ========== TEPLOTNÍ SENZORY ========== + + +class BoilerUpperZoneTempSensor(BoilerSensorBase): + """Teplota horní zóny.""" + + _attr_device_class = SensorDeviceClass.TEMPERATURE + _attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:thermometer-high" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "upper_zone_temp", "Horní zóna teplota") + + @property + def native_value(self) -> Optional[float]: + """Vrátí teplotu horní zóny.""" + temps = self.coordinator.data.get("temperatures", {}) + return temps.get("upper_zone") + + +class BoilerLowerZoneTempSensor(BoilerSensorBase): + """Teplota dolní zóny.""" + + _attr_device_class = SensorDeviceClass.TEMPERATURE + _attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:thermometer-low" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "lower_zone_temp", "Dolní zóna teplota") + + @property + def native_value(self) -> Optional[float]: + """Vrátí teplotu dolní zóny.""" + temps = self.coordinator.data.get("temperatures", {}) + return temps.get("lower_zone") + + +class BoilerAvgTempSensor(BoilerSensorBase): + """Průměrná teplota bojleru.""" + + _attr_device_class = SensorDeviceClass.TEMPERATURE + _attr_native_unit_of_measurement = UnitOfTemperature.CELSIUS + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:thermometer" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "avg_temp", "Průměrná teplota") + + @property + def native_value(self) -> Optional[float]: + """Vrátí průměrnou teplotu.""" + energy_state = self.coordinator.data.get("energy_state", {}) + return energy_state.get("avg_temp") + + +# ========== ENERGETICKÉ SENZORY ========== + + +class BoilerEnergyNeededSensor(BoilerSensorBase): + """Energie potřebná k cílové teplotě.""" + + _attr_device_class = SensorDeviceClass.ENERGY + _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:flash" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "energy_needed", "Energie potřebná") + + @property + def native_value(self) -> Optional[float]: + """Vrátí energii potřebnou k ohřevu.""" + energy_state = self.coordinator.data.get("energy_state", {}) + return energy_state.get("energy_needed_kwh") + + +class BoilerTotalEnergySensor(BoilerSensorBase): + """Celková energie dnes.""" + + _attr_device_class = SensorDeviceClass.ENERGY + _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR + _attr_state_class = SensorStateClass.TOTAL_INCREASING + _attr_icon = "mdi:lightning-bolt" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "total_energy", "Celková energie dnes") + + @property + def native_value(self) -> Optional[float]: + """Vrátí celkovou energii.""" + tracking = self.coordinator.data.get("energy_tracking", {}) + return tracking.get("total_kwh") + + +class BoilerFVEEnergySensor(BoilerSensorBase): + """Energie z FVE dnes.""" + + _attr_device_class = SensorDeviceClass.ENERGY + _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR + _attr_state_class = SensorStateClass.TOTAL_INCREASING + _attr_icon = "mdi:solar-power" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "fve_energy", "Energie z FVE dnes") + + @property + def native_value(self) -> Optional[float]: + """Vrátí energii z FVE.""" + tracking = self.coordinator.data.get("energy_tracking", {}) + return tracking.get("fve_kwh") + + +class BoilerGridEnergySensor(BoilerSensorBase): + """Energie ze sítě dnes.""" + + _attr_device_class = SensorDeviceClass.ENERGY + _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR + _attr_state_class = SensorStateClass.TOTAL_INCREASING + _attr_icon = "mdi:transmission-tower" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "grid_energy", "Energie ze sítě dnes") + + @property + def native_value(self) -> Optional[float]: + """Vrátí energii ze sítě.""" + tracking = self.coordinator.data.get("energy_tracking", {}) + return tracking.get("grid_kwh") + + +class BoilerAltEnergySensor(BoilerSensorBase): + """Energie z alternativy dnes.""" + + _attr_device_class = SensorDeviceClass.ENERGY + _attr_native_unit_of_measurement = UnitOfEnergy.KILO_WATT_HOUR + _attr_state_class = SensorStateClass.TOTAL_INCREASING + _attr_icon = "mdi:fire" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "alt_energy", "Energie z alternativy dnes") + + @property + def native_value(self) -> Optional[float]: + """Vrátí alternativní energii.""" + tracking = self.coordinator.data.get("energy_tracking", {}) + return tracking.get("alt_kwh") + + +# ========== PLÁNOVACÍ SENZORY ========== + + +class BoilerCurrentSourceSensor(BoilerSensorBase): + """Aktuální zdroj energie.""" + + _attr_icon = "mdi:power-plug" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "current_source", "Aktuální zdroj") + + @property + def native_value(self) -> Optional[str]: + """Vrátí aktuální zdroj.""" + tracking = self.coordinator.data.get("energy_tracking", {}) + source = tracking.get("current_source", "grid") + + # Překlad do češtiny + source_map = { + "fve": "FVE", + "grid": "Síť", + "alternative": "Alternativa", + } + return source_map.get(source, source) + + +class BoilerRecommendedSourceSensor(BoilerSensorBase): + """Doporučený zdroj energie.""" + + _attr_icon = "mdi:lightbulb-on" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "recommended_source", "Doporučený zdroj") + + @property + def native_value(self) -> Optional[str]: + """Vrátí doporučený zdroj.""" + recommended = self.coordinator.data.get("recommended_source") + if not recommended: + return None + + source_map = { + "fve": "FVE", + "grid": "Síť", + "alternative": "Alternativa", + } + return source_map.get(recommended, recommended) + + +class BoilerChargingRecommendedSensor(BoilerSensorBase): + """Je doporučeno ohřívat?""" + + _attr_icon = "mdi:fire-circle" + _attr_device_class = None + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "charging_recommended", "Ohřev doporučen") + + @property + def native_value(self) -> str: + """Vrátí ano/ne.""" + recommended = self.coordinator.data.get("charging_recommended", False) + return "ano" if recommended else "ne" + + @property + def extra_state_attributes(self) -> dict[str, Any]: + """Atributy s detaily aktuálního slotu.""" + current_slot = self.coordinator.data.get("current_slot") + if not current_slot: + return {} + + return { + "start": current_slot.start.isoformat(), + "end": current_slot.end.isoformat(), + "consumption_kwh": round(current_slot.avg_consumption_kwh, 3), + "confidence": round(current_slot.confidence, 2), + "spot_price": current_slot.spot_price_kwh, + "overflow_available": current_slot.overflow_available, + } + + +class BoilerPlanEstimatedCostSensor(BoilerSensorBase): + """Odhadovaná cena ohřevu dnes.""" + + _attr_device_class = SensorDeviceClass.MONETARY + _attr_native_unit_of_measurement = "CZK" + _attr_state_class = SensorStateClass.TOTAL + _attr_icon = "mdi:cash" + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "estimated_cost", "Odhadovaná cena dnes") + + @property + def native_value(self) -> Optional[float]: + """Vrátí odhadovanou cenu.""" + plan = self.coordinator.data.get("plan") + if not plan: + return None + return round(plan.estimated_cost_czk, 2) + + @property + def extra_state_attributes(self) -> dict[str, Any]: + """Atributy s rozpisem plánu.""" + plan = self.coordinator.data.get("plan") + if not plan: + return {} + + return { + "total_consumption_kwh": round(plan.total_consumption_kwh, 2), + "fve_kwh": round(plan.fve_kwh, 2), + "grid_kwh": round(plan.grid_kwh, 2), + "alt_kwh": round(plan.alt_kwh, 2), + "created_at": plan.created_at.isoformat(), + "valid_until": plan.valid_until.isoformat(), + } + + +# ========== PROFILE SENSOR ========== + + +class BoilerProfileConfidenceSensor(BoilerSensorBase): + """Kvalita profilu.""" + + _attr_native_unit_of_measurement = PERCENTAGE + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:chart-line" + _attr_entity_category = EntityCategory.DIAGNOSTIC + + def __init__(self, coordinator: BoilerCoordinator) -> None: + """Inicializace.""" + super().__init__(coordinator, "profile_confidence", "Kvalita profilu") + + @property + def native_value(self) -> Optional[float]: + """Vrátí průměrnou confidence profilu.""" + profile = self.coordinator.data.get("profile") + if not profile or not profile.confidence: + return None + + avg_conf = sum(profile.confidence.values()) / len(profile.confidence) + return round(avg_conf * 100, 1) # 0-100% + + @property + def extra_state_attributes(self) -> dict[str, Any]: + """Atributy profilu.""" + profile = self.coordinator.data.get("profile") + if not profile: + return {} + + return { + "category": profile.category, + "hours_with_data": len(profile.hourly_avg), + "total_samples": sum(profile.sample_count.values()), + "last_updated": ( + profile.last_updated.isoformat() if profile.last_updated else None + ), + } + + +# ========== REGISTRACE SENZORŮ ========== + + +def get_boiler_sensors(coordinator: BoilerCoordinator) -> list[SensorEntity]: + """Vrátí všechny bojlerové senzory.""" + return [ + # Teploty + BoilerUpperZoneTempSensor(coordinator), + BoilerLowerZoneTempSensor(coordinator), + BoilerAvgTempSensor(coordinator), + # Energie + BoilerEnergyNeededSensor(coordinator), + BoilerTotalEnergySensor(coordinator), + BoilerFVEEnergySensor(coordinator), + BoilerGridEnergySensor(coordinator), + BoilerAltEnergySensor(coordinator), + # Plánování + BoilerCurrentSourceSensor(coordinator), + BoilerRecommendedSourceSensor(coordinator), + BoilerChargingRecommendedSensor(coordinator), + BoilerPlanEstimatedCostSensor(coordinator), + # Diagnostika + BoilerProfileConfidenceSensor(coordinator), + ] diff --git a/custom_components/oig_cloud/boiler/utils.py b/custom_components/oig_cloud/boiler/utils.py new file mode 100644 index 00000000..acb789b9 --- /dev/null +++ b/custom_components/oig_cloud/boiler/utils.py @@ -0,0 +1,141 @@ +"""Utility funkce pro bojlerový modul.""" + +import logging +from typing import Optional + +from .const import ( + BOILER_HEIGHT_DEFAULT, + JOULES_TO_KWH, + SENSOR_POSITION_MAP, + TEMP_GRADIENT_PER_10CM, + WATER_SPECIFIC_HEAT, +) + +_LOGGER = logging.getLogger(__name__) + + +def calculate_stratified_temp( + measured_temp: float, + sensor_position: str, + mode: str = "two_zone", + split_ratio: float = 0.5, + boiler_height_m: float = BOILER_HEIGHT_DEFAULT, +) -> tuple[float, float]: + """ + Vypočítá (horní_zóna_temp, dolní_zóna_temp) z jednoho teploměru. + + Args: + measured_temp: Naměřená teplota [°C] + sensor_position: "top", "upper_quarter", "middle", "lower_quarter" + mode: "two_zone" nebo "simple_avg" + split_ratio: Poměr horní zóny (0.5 = polovina) + boiler_height_m: Výška bojleru [m] + + Returns: + (T_horní, T_dolní) v °C + """ + if mode == "simple_avg": + # Jednoduchý režim - obě zóny = měřená hodnota + return (measured_temp, measured_temp) + + # Pozice senzoru (0.0 = spodek, 1.0 = vršek) + sensor_height_ratio = SENSOR_POSITION_MAP.get(sensor_position, 1.0) + + # Gradient: °C/m + gradient_per_meter = TEMP_GRADIENT_PER_10CM * 10.0 + + # Střed horní zóny + upper_zone_center = 1.0 - (1.0 - split_ratio) / 2.0 + # Střed dolní zóny + lower_zone_center = split_ratio / 2.0 + + # Výpočet teplot zón + height_diff_upper = (upper_zone_center - sensor_height_ratio) * boiler_height_m + temp_upper = measured_temp + (gradient_per_meter * height_diff_upper) + + height_diff_lower = (lower_zone_center - sensor_height_ratio) * boiler_height_m + temp_lower = measured_temp + (gradient_per_meter * height_diff_lower) + + return (temp_upper, temp_lower) + + +def calculate_energy_to_heat( + volume_liters: float, + temp_current: float, + temp_target: float, +) -> float: + """ + Vypočítá energii potřebnou k ohřevu vody. + + Args: + volume_liters: Objem vody [l] + temp_current: Současná teplota [°C] + temp_target: Cílová teplota [°C] + + Returns: + Energie [kWh] + """ + if temp_target <= temp_current: + return 0.0 + + mass_kg = volume_liters # 1l vody = 1kg + temp_delta = temp_target - temp_current + + # Q = m × c × ΔT + energy_joules = mass_kg * WATER_SPECIFIC_HEAT * temp_delta + energy_kwh = energy_joules * JOULES_TO_KWH + + return energy_kwh + + +def estimate_residual_energy( + total_consumption_kwh: float, + fve_contribution_kwh: float, + grid_contribution_kwh: float, +) -> float: + """ + Vypočítá residuální energii (alternativní zdroj) jako rozdíl. + + Args: + total_consumption_kwh: Celková spotřeba bojleru + fve_contribution_kwh: Energie z FVE + grid_contribution_kwh: Energie ze sítě + + Returns: + Residuální energie [kWh] (≥ 0) + """ + residual = total_consumption_kwh - fve_contribution_kwh - grid_contribution_kwh + return max(0.0, residual) + + +def validate_temperature_sensor( + state: Optional[object], + sensor_name: str, +) -> Optional[float]: + """ + Validuje a vrací teplotu ze senzoru. + + Args: + state: Stav entity z Home Assistant + sensor_name: Název senzoru (pro logging) + + Returns: + Teplota v °C nebo None pokud neplatná + """ + if state is None: + _LOGGER.debug("Senzor %s není dostupný", sensor_name) + return None + + try: + temp = float(state.state) # type: ignore[attr-defined] + if not (-50 <= temp <= 150): + _LOGGER.warning( + "Senzor %s má neplatnou teplotu: %s°C (rozsah -50 až 150°C)", + sensor_name, + temp, + ) + return None + return temp + except (ValueError, AttributeError) as err: + _LOGGER.warning("Nelze přečíst teplotu ze senzoru %s: %s", sensor_name, err) + return None diff --git a/custom_components/oig_cloud/config/__init__.py b/custom_components/oig_cloud/config/__init__.py new file mode 100644 index 00000000..2644a33c --- /dev/null +++ b/custom_components/oig_cloud/config/__init__.py @@ -0,0 +1 @@ +"""Config flow schema and steps.""" diff --git a/custom_components/oig_cloud/config/schema.py b/custom_components/oig_cloud/config/schema.py new file mode 100644 index 00000000..b6991035 --- /dev/null +++ b/custom_components/oig_cloud/config/schema.py @@ -0,0 +1,185 @@ +"""Schema and constants for config flow.""" + +from __future__ import annotations + +from typing import Dict, List, Optional + +import voluptuous as vol + +from ..const import CONF_PASSWORD, CONF_USERNAME + +# Scan intervals +CONF_STANDARD_SCAN_INTERVAL = "standard_scan_interval" +CONF_EXTENDED_SCAN_INTERVAL = "extended_scan_interval" + +# Solar Forecast constants +CONF_SOLAR_FORECAST_ENABLED = "solar_forecast_enabled" +CONF_SOLAR_FORECAST_PROVIDER = "solar_forecast_provider" +CONF_SOLAR_FORECAST_API_KEY = "solar_forecast_api_key" +CONF_SOLCAST_API_KEY = "solcast_api_key" +CONF_SOLAR_FORECAST_LATITUDE = "solar_forecast_latitude" +CONF_SOLAR_FORECAST_LONGITUDE = "solar_forecast_longitude" +CONF_SOLAR_FORECAST_INTERVAL = "solar_forecast_interval" + +# String 1 +CONF_SOLAR_FORECAST_STRING1_ENABLED = "solar_forecast_string1_enabled" +CONF_SOLAR_FORECAST_STRING1_DECLINATION = "solar_forecast_string1_declination" +CONF_SOLAR_FORECAST_STRING1_AZIMUTH = "solar_forecast_string1_azimuth" +CONF_SOLAR_FORECAST_STRING1_KWP = "solar_forecast_string1_kwp" + +# String 2 +CONF_SOLAR_FORECAST_STRING2_ENABLED = "solar_forecast_string2_enabled" +CONF_SOLAR_FORECAST_STRING2_DECLINATION = "solar_forecast_string2_declination" +CONF_SOLAR_FORECAST_STRING2_AZIMUTH = "solar_forecast_string2_azimuth" +CONF_SOLAR_FORECAST_STRING2_KWP = "solar_forecast_string2_kwp" + +# Statistics +CONF_STATISTICS_ENABLED = "statistics_enabled" +CONF_STATISTICS_SAMPLING_SIZE = "statistics_sampling_size" +CONF_STATISTICS_MAX_AGE_DAYS = "statistics_max_age_days" +CONF_STATISTICS_RESTORE_DATA = "statistics_restore_data" +CONF_STATISTICS_MEDIAN_MINUTES = "statistics_median_minutes" + +SPOT_PRICING_SCHEMA = vol.Schema( + { + vol.Optional("spot_trading_enabled", default=False): bool, + vol.Optional("distribution_area", default="PRE"): vol.In(["PRE", "CEZ", "EGD"]), + vol.Optional("fixed_price_enabled", default=True): bool, + vol.Optional("fixed_price_vt", default=4.50): vol.Coerce(float), + vol.Optional("fixed_price_nt", default=3.20): vol.Coerce(float), + vol.Optional("fixed_price_single", default=4.00): vol.Coerce(float), + vol.Optional("tariff_type", default="dual"): vol.In(["single", "dual"]), + vol.Optional("spot_buy_fixed_fee", default=0.0): vol.Coerce(float), + vol.Optional("spot_buy_percent_positive", default=110.0): vol.Coerce(float), + vol.Optional("spot_buy_percent_negative", default=90.0): vol.Coerce(float), + vol.Optional("spot_sell_fixed_fee", default=0.0): vol.Coerce(float), + vol.Optional("spot_sell_percent_positive", default=85.0): vol.Coerce(float), + vol.Optional("spot_sell_percent_negative", default=100.0): vol.Coerce(float), + vol.Optional("spot_buy_combined_enabled", default=False): bool, + vol.Optional("spot_sell_combined_enabled", default=False): bool, + } +) + +DISTRIBUTION_SCHEMA = vol.Schema( + { + vol.Optional("breaker_size", default=25): vol.In( + [16, 20, 25, 32, 40, 50, 63, 80, 100] + ), + vol.Optional("consumption_category", default="C02d"): vol.In( + ["C01d", "C02d", "C25d", "C26d"] + ), + vol.Optional("monthly_consumption_kwh", default=300): vol.Coerce(int), + vol.Optional("yearly_consumption_kwh", default=3600): vol.Coerce(int), + vol.Optional("auto_load_distribution_fees", default=True): bool, + } +) + +STEP_USER_DATA_SCHEMA = vol.Schema( + { + vol.Required(CONF_USERNAME, description={"suggested_value": ""}): str, + vol.Required(CONF_PASSWORD): str, + vol.Required( + "live_data_enabled", + default=False, + description="✅ POTVRZUJI: Mám v aplikaci OIG Cloud zapnutá 'Živá data'", + ): bool, + vol.Optional( + "enable_solar_forecast", + default=False, + description="Povolit solární předpověď", + ): bool, + vol.Optional( + "enable_statistics", + default=True, + description="Povolit statistiky a analýzy", + ): bool, + vol.Optional( + "enable_pricing", + default=False, + description="Povolit cenové senzory a spotové ceny z OTE", + ): bool, + vol.Optional( + "enable_extended_sensors", + default=True, + description="Povolit rozšířené senzory (napětí, proudy, teploty)", + ): bool, + vol.Optional( + "enable_dashboard", + default=False, + description="Povolit webový dashboard s grafy", + ): bool, + } +) + + +def validate_tariff_hours( + vt_starts_str: str, nt_starts_str: str, allow_single_tariff: bool = False +) -> tuple[bool, Optional[str]]: + """Validate VT/NT tariff hour starts for gaps and overlaps.""" + vt_starts, error = _parse_hour_starts(vt_starts_str) + if error: + return False, error + + nt_starts, error = _parse_hour_starts(nt_starts_str) + if error: + return False, error + + if not vt_starts and not nt_starts: + return False, "tariff_gaps" + if allow_single_tariff and (not vt_starts or not nt_starts): + return True, None + if not vt_starts or not nt_starts: + return False, "tariff_gaps" + + hour_map: Dict[int, str] = {} + + if not _fill_tariff_hours(hour_map, vt_starts, vt_starts, nt_starts, "VT"): + return False, "overlapping_tariffs" + if not _fill_tariff_hours(hour_map, nt_starts, vt_starts, nt_starts, "NT"): + return False, "overlapping_tariffs" + + if len(hour_map) != 24: + return False, "tariff_gaps" + + return True, None + + +def _parse_hour_starts(value: str) -> tuple[List[int], Optional[str]]: + try: + hours = [int(x.strip()) for x in value.split(",") if x.strip()] + except ValueError: + return [], "invalid_hour_format" + if not all(0 <= h <= 23 for h in hours): + return [], "invalid_hour_range" + return hours, None + + +def _next_tariff_start(all_starts: List[int], start: int) -> int: + try: + next_start_idx = all_starts.index(start) + 1 + if next_start_idx < len(all_starts): + return all_starts[next_start_idx] + return all_starts[0] + except (ValueError, IndexError): + return (start + 1) % 24 + + +def _fill_tariff_hours( + hour_map: Dict[int, str], + starts: List[int], + vt_starts: List[int], + nt_starts: List[int], + label: str, +) -> bool: + for start in sorted(starts): + all_starts = sorted(vt_starts + nt_starts) + next_start = _next_tariff_start(all_starts, start) + h = start + while h != next_start: + if h in hour_map: + return False + hour_map[h] = label + h = (h + 1) % 24 + if len(hour_map) > 24: # pragma: no cover + break + return True diff --git a/custom_components/oig_cloud/config/steps.py b/custom_components/oig_cloud/config/steps.py new file mode 100644 index 00000000..9c29148b --- /dev/null +++ b/custom_components/oig_cloud/config/steps.py @@ -0,0 +1,2649 @@ +import logging +from typing import TYPE_CHECKING, Any, Dict, Optional + +import voluptuous as vol +from homeassistant import config_entries +from homeassistant.const import STATE_UNAVAILABLE, STATE_UNKNOWN +from homeassistant.core import callback +from homeassistant.data_entry_flow import FlowResult +from homeassistant.helpers import selector + +from ..const import (CONF_AUTO_MODE_SWITCH, CONF_PASSWORD, CONF_USERNAME, + DEFAULT_NAME, DOMAIN) +from ..core.data_source import (PROXY_BOX_ID_ENTITY_ID, + PROXY_LAST_DATA_ENTITY_ID) +from .schema import (CONF_SOLAR_FORECAST_API_KEY, + CONF_SOLAR_FORECAST_LATITUDE, + CONF_SOLAR_FORECAST_LONGITUDE, + CONF_SOLAR_FORECAST_PROVIDER, CONF_SOLCAST_API_KEY, + CONF_SOLAR_FORECAST_STRING1_AZIMUTH, + CONF_SOLAR_FORECAST_STRING1_DECLINATION, + CONF_SOLAR_FORECAST_STRING1_ENABLED, + CONF_SOLAR_FORECAST_STRING1_KWP, validate_tariff_hours) +from .validation import (CannotConnect, InvalidAuth, LiveDataNotEnabled, + validate_input) + +if TYPE_CHECKING: # pragma: no cover + pass + +_LOGGER = logging.getLogger(__name__) + + +class WizardMixin: + """Mixin třída obsahující všechny wizard kroky. + + Sdílená mezi ConfigFlow (nová instalace) a OptionsFlow (rekonfigurace). + Poskytuje konzistentní UX pro oba případy. + """ + + @staticmethod + def _sanitize_data_source_mode(mode: Optional[str]) -> str: + """Map legacy/alias values to supported ones.""" + if mode == "hybrid": + return "local_only" + return mode or "cloud_only" + + @staticmethod + def _migrate_old_pricing_data(data: Dict[str, Any]) -> Dict[str, Any]: + """Migrate old pricing configuration to new format. + + Converts old single-step pricing data to new 3-step format. + This ensures backward compatibility with existing configurations. + """ + if not data: + return data + + # Pokud už má nová data, nic nedělej + if "import_pricing_scenario" in data: + return data + + migrated = dict(data) + dual_tariff = data.get("dual_tariff_enabled", False) + WizardMixin._migrate_import_pricing(data, migrated, dual_tariff) + WizardMixin._migrate_export_pricing(data, migrated, dual_tariff) + if dual_tariff: + WizardMixin._apply_dual_tariff_defaults(migrated, data) + + return migrated + + @staticmethod + def _migrate_import_pricing( + data: Dict[str, Any], migrated: Dict[str, Any], dual_tariff: bool + ) -> None: + old_model = data.get("spot_pricing_model", "percentage") + migration_map = { + "percentage": WizardMixin._migrate_import_percentage, + "fixed": WizardMixin._migrate_import_fixed, + "fixed_prices": WizardMixin._migrate_import_fixed_prices, + } + handler = migration_map.get(old_model) + if handler: + handler(data, migrated, dual_tariff) + + @staticmethod + def _migrate_import_percentage( + data: Dict[str, Any], migrated: Dict[str, Any], dual_tariff: bool + ) -> None: + scenario = ( + "spot_percentage_2tariff" if dual_tariff else "spot_percentage_1tariff" + ) + migrated["import_pricing_scenario"] = scenario + if dual_tariff: + migrated["import_spot_positive_fee_percent_vt"] = data.get( + "spot_positive_fee_percent", 15.0 + ) + migrated["import_spot_negative_fee_percent_vt"] = data.get( + "spot_negative_fee_percent", 9.0 + ) + migrated["import_spot_positive_fee_percent_nt"] = data.get( + "spot_positive_fee_percent", 13.0 + ) + migrated["import_spot_negative_fee_percent_nt"] = data.get( + "spot_negative_fee_percent", 7.0 + ) + else: + migrated["import_spot_positive_fee_percent"] = data.get( + "spot_positive_fee_percent", 15.0 + ) + migrated["import_spot_negative_fee_percent"] = data.get( + "spot_negative_fee_percent", 9.0 + ) + + @staticmethod + def _migrate_import_fixed( + data: Dict[str, Any], migrated: Dict[str, Any], dual_tariff: bool + ) -> None: + scenario = "spot_fixed_2tariff" if dual_tariff else "spot_fixed_1tariff" + migrated["import_pricing_scenario"] = scenario + if dual_tariff: + migrated["import_spot_fixed_fee_mwh_vt"] = data.get( + "spot_fixed_fee_mwh", 500.0 + ) + migrated["import_spot_fixed_fee_mwh_nt"] = data.get( + "spot_fixed_fee_mwh", 400.0 + ) + else: + migrated["import_spot_fixed_fee_mwh"] = data.get( + "spot_fixed_fee_mwh", 500.0 + ) + + @staticmethod + def _migrate_import_fixed_prices( + data: Dict[str, Any], migrated: Dict[str, Any], dual_tariff: bool + ) -> None: + scenario = "fix_2tariff" if dual_tariff else "fix_1tariff" + migrated["import_pricing_scenario"] = scenario + if dual_tariff: + migrated["import_fixed_price_vt"] = data.get( + "fixed_commercial_price_vt", 4.50 + ) + migrated["import_fixed_price_nt"] = data.get( + "fixed_commercial_price_nt", 3.20 + ) + else: + migrated["import_fixed_price"] = data.get( + "fixed_commercial_price_vt", 4.50 + ) + + @staticmethod + def _migrate_export_pricing( + data: Dict[str, Any], migrated: Dict[str, Any], dual_tariff: bool + ) -> None: + old_export_model = data.get("export_pricing_model", "percentage") + if old_export_model == "percentage": + scenario = ( + "spot_percentage_2tariff" if dual_tariff else "spot_percentage_1tariff" + ) + migrated["export_pricing_scenario"] = scenario + if dual_tariff: + migrated["export_spot_fee_percent_vt"] = data.get( + "export_fee_percent", 15.0 + ) + migrated["export_spot_fee_percent_nt"] = data.get( + "export_fee_percent", 13.0 + ) + else: + migrated["export_spot_fee_percent"] = data.get( + "export_fee_percent", 15.0 + ) + return + scenario = "spot_fixed_2tariff" if dual_tariff else "spot_fixed_1tariff" + migrated["export_pricing_scenario"] = scenario + if dual_tariff: + migrated["export_spot_fixed_fee_czk_vt"] = data.get( + "export_fixed_fee_czk", 0.20 + ) + migrated["export_spot_fixed_fee_czk_nt"] = data.get( + "export_fixed_fee_czk", 0.15 + ) + else: + migrated["export_spot_fixed_fee_czk"] = data.get( + "export_fixed_fee_czk", 0.20 + ) + + @staticmethod + def _apply_dual_tariff_defaults( + migrated: Dict[str, Any], source: Dict[str, Any] + ) -> None: + migrated["vt_hours_start"] = source.get("vt_hours_start", "6:00") + migrated["vt_hours_end"] = source.get("vt_hours_end", "22:00") + weekday_vt = source.get( + "tariff_vt_start_weekday", source.get("vt_hours_start", "6") + ) + weekday_nt = source.get("tariff_nt_start_weekday", "22,2") + migrated.setdefault("tariff_vt_start_weekday", weekday_vt) + migrated.setdefault("tariff_nt_start_weekday", weekday_nt) + migrated.setdefault("tariff_vt_start_weekend", weekday_vt) + migrated.setdefault("tariff_nt_start_weekend", weekday_nt) + migrated.setdefault("tariff_weekend_same_as_weekday", True) + + @staticmethod + def _map_pricing_to_backend(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + """Map UI pricing scenarios to backend attribute names. + + This function converts user-friendly UI selections to the exact + attribute names that backend (spot_price_sensor.py) expects. + + Returns dict with backend-compatible attribute names. + """ + backend_data: Dict[str, Any] = {} + backend_data.update(WizardMixin._map_import_pricing(wizard_data)) + backend_data.update(WizardMixin._map_export_pricing(wizard_data)) + backend_data.update(WizardMixin._map_distribution_fees(wizard_data)) + backend_data["vat_rate"] = wizard_data.get("vat_rate", 21.0) + return backend_data + + @staticmethod + def _map_import_pricing(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + backend_data: Dict[str, Any] = {} + import_scenario = wizard_data.get("import_pricing_scenario", "spot_percentage") + + if import_scenario == "spot_percentage": + backend_data["spot_pricing_model"] = "percentage" + backend_data["spot_positive_fee_percent"] = wizard_data.get( + "spot_positive_fee_percent", 15.0 + ) + backend_data["spot_negative_fee_percent"] = wizard_data.get( + "spot_negative_fee_percent", 9.0 + ) + elif import_scenario == "spot_fixed": + backend_data["spot_pricing_model"] = "fixed" + fee_kwh = wizard_data.get("spot_fixed_fee_kwh", 0.50) + backend_data["spot_fixed_fee_mwh"] = fee_kwh * 1000.0 + elif import_scenario == "fix_price": + backend_data["spot_pricing_model"] = "fixed_prices" + fixed_price_vt = wizard_data.get( + "fixed_price_vt_kwh", wizard_data.get("fixed_price_kwh", 4.50) + ) + fixed_price_nt = wizard_data.get("fixed_price_nt_kwh", fixed_price_vt) + backend_data["fixed_commercial_price_vt"] = fixed_price_vt + backend_data["fixed_commercial_price_nt"] = fixed_price_nt + + return backend_data + + @staticmethod + def _map_export_pricing(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + backend_data: Dict[str, Any] = {} + export_scenario = wizard_data.get("export_pricing_scenario", "spot_percentage") + + if export_scenario == "spot_percentage": + backend_data["export_pricing_model"] = "percentage" + backend_data["export_fee_percent"] = wizard_data.get( + "export_fee_percent", 15.0 + ) + elif export_scenario == "spot_fixed": + backend_data["export_pricing_model"] = "fixed" + backend_data["export_fixed_fee_czk"] = wizard_data.get( + "export_fixed_fee_czk", 0.20 + ) + elif export_scenario == "fix_price": + backend_data["export_pricing_model"] = "fixed_prices" + backend_data["export_fixed_price"] = wizard_data.get( + "export_fixed_price_kwh", 2.50 + ) + + return backend_data + + @staticmethod + def _map_distribution_fees(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + backend_data: Dict[str, Any] = {} + tariff_count = wizard_data.get("tariff_count", "single") + backend_data["dual_tariff_enabled"] = tariff_count == "dual" + backend_data["distribution_fee_vt_kwh"] = wizard_data.get( + "distribution_fee_vt_kwh", 1.42 + ) + if tariff_count == "dual": + backend_data["distribution_fee_nt_kwh"] = wizard_data.get( + "distribution_fee_nt_kwh", 0.91 + ) + backend_data["tariff_vt_start_weekday"] = wizard_data.get( + "tariff_vt_start_weekday", "6" + ) + backend_data["tariff_nt_start_weekday"] = wizard_data.get( + "tariff_nt_start_weekday", "22,2" + ) + weekend_same = wizard_data.get("tariff_weekend_same_as_weekday", True) + backend_data["tariff_weekend_same_as_weekday"] = bool(weekend_same) + if weekend_same: + backend_data["tariff_vt_start_weekend"] = backend_data[ + "tariff_vt_start_weekday" + ] + backend_data["tariff_nt_start_weekend"] = backend_data[ + "tariff_nt_start_weekday" + ] + else: + backend_data["tariff_vt_start_weekend"] = wizard_data.get( + "tariff_vt_start_weekend", + backend_data["tariff_vt_start_weekday"], + ) + backend_data["tariff_nt_start_weekend"] = wizard_data.get( + "tariff_nt_start_weekend", + backend_data["tariff_nt_start_weekday"], + ) + return backend_data + + def _build_options_payload(self, wizard_data: Dict[str, Any]) -> Dict[str, Any]: + """Build shared options payload for config and options flows.""" + payload: Dict[str, Any] = {} + payload.update(self._build_base_options(wizard_data)) + payload.update(self._build_solar_options(wizard_data)) + payload.update(self._build_battery_options(wizard_data)) + payload.update(self._map_pricing_to_backend(wizard_data)) + payload.update(self._build_boiler_options(wizard_data)) + payload.update(self._build_auto_options(wizard_data)) + return payload + + @staticmethod + def _build_base_options(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + return { + "standard_scan_interval": wizard_data.get("standard_scan_interval", 30), + "extended_scan_interval": wizard_data.get("extended_scan_interval", 300), + "data_source_mode": WizardMixin._sanitize_data_source_mode( + wizard_data.get("data_source_mode", "cloud_only") + ), + "local_proxy_stale_minutes": wizard_data.get("local_proxy_stale_minutes", 10), + "local_event_debounce_ms": wizard_data.get("local_event_debounce_ms", 300), + "enable_statistics": wizard_data.get("enable_statistics", True), + "enable_solar_forecast": wizard_data.get("enable_solar_forecast", False), + "enable_battery_prediction": wizard_data.get( + "enable_battery_prediction", False + ), + "enable_pricing": wizard_data.get("enable_pricing", False), + "enable_extended_sensors": wizard_data.get("enable_extended_sensors", True), + "enable_chmu_warnings": wizard_data.get("enable_chmu_warnings", False), + "enable_dashboard": wizard_data.get("enable_dashboard", False), + } + + @staticmethod + def _build_solar_options(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + return { + CONF_SOLAR_FORECAST_PROVIDER: wizard_data.get( + CONF_SOLAR_FORECAST_PROVIDER, "forecast_solar" + ), + "solar_forecast_mode": wizard_data.get( + "solar_forecast_mode", "daily_optimized" + ), + CONF_SOLAR_FORECAST_API_KEY: wizard_data.get( + CONF_SOLAR_FORECAST_API_KEY, "" + ), + CONF_SOLCAST_API_KEY: wizard_data.get(CONF_SOLCAST_API_KEY, ""), + CONF_SOLAR_FORECAST_LATITUDE: wizard_data.get( + CONF_SOLAR_FORECAST_LATITUDE, 50.0 + ), + CONF_SOLAR_FORECAST_LONGITUDE: wizard_data.get( + CONF_SOLAR_FORECAST_LONGITUDE, 14.0 + ), + CONF_SOLAR_FORECAST_STRING1_ENABLED: wizard_data.get( + CONF_SOLAR_FORECAST_STRING1_ENABLED, True + ), + CONF_SOLAR_FORECAST_STRING1_DECLINATION: wizard_data.get( + CONF_SOLAR_FORECAST_STRING1_DECLINATION, 35 + ), + CONF_SOLAR_FORECAST_STRING1_AZIMUTH: wizard_data.get( + CONF_SOLAR_FORECAST_STRING1_AZIMUTH, 0 + ), + CONF_SOLAR_FORECAST_STRING1_KWP: wizard_data.get( + CONF_SOLAR_FORECAST_STRING1_KWP, 5.0 + ), + "solar_forecast_string2_enabled": wizard_data.get( + "solar_forecast_string2_enabled", False + ), + "solar_forecast_string2_declination": wizard_data.get( + "solar_forecast_string2_declination", 35 + ), + "solar_forecast_string2_azimuth": wizard_data.get( + "solar_forecast_string2_azimuth", 180 + ), + "solar_forecast_string2_kwp": wizard_data.get( + "solar_forecast_string2_kwp", 5.0 + ), + } + + @staticmethod + def _build_battery_options(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + return { + "min_capacity_percent": wizard_data.get("min_capacity_percent", 20.0), + "target_capacity_percent": wizard_data.get("target_capacity_percent", 80.0), + "home_charge_rate": wizard_data.get("home_charge_rate", 2.8), + CONF_AUTO_MODE_SWITCH: wizard_data.get(CONF_AUTO_MODE_SWITCH, False), + "disable_planning_min_guard": wizard_data.get( + "disable_planning_min_guard", False + ), + "max_ups_price_czk": wizard_data.get("max_ups_price_czk", 10.0), + "balancing_enabled": wizard_data.get("balancing_enabled", True), + "balancing_interval_days": wizard_data.get("balancing_interval_days", 7), + "balancing_hold_hours": wizard_data.get("balancing_hold_hours", 3), + "balancing_opportunistic_threshold": wizard_data.get( + "balancing_opportunistic_threshold", 1.1 + ), + "balancing_economic_threshold": wizard_data.get( + "balancing_economic_threshold", 2.5 + ), + "cheap_window_percentile": wizard_data.get("cheap_window_percentile", 30), + } + + @staticmethod + def _build_boiler_options(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + return { + "enable_boiler": wizard_data.get("enable_boiler", False), + "boiler_volume_l": wizard_data.get("boiler_volume_l", 120), + "boiler_target_temp_c": wizard_data.get("boiler_target_temp_c", 60.0), + "boiler_cold_inlet_temp_c": wizard_data.get( + "boiler_cold_inlet_temp_c", 10.0 + ), + "boiler_temp_sensor_top": wizard_data.get("boiler_temp_sensor_top", ""), + "boiler_temp_sensor_bottom": wizard_data.get( + "boiler_temp_sensor_bottom", "" + ), + "boiler_temp_sensor_position": wizard_data.get( + "boiler_temp_sensor_position", "top" + ), + "boiler_stratification_mode": wizard_data.get( + "boiler_stratification_mode", "simple_avg" + ), + "boiler_two_zone_split_ratio": wizard_data.get( + "boiler_two_zone_split_ratio", 0.5 + ), + "boiler_heater_power_kw_entity": wizard_data.get( + "boiler_heater_power_kw_entity", + "sensor.oig_2206237016_boiler_install_power", + ), + "boiler_heater_switch_entity": wizard_data.get( + "boiler_heater_switch_entity", "" + ), + "boiler_alt_heater_switch_entity": wizard_data.get( + "boiler_alt_heater_switch_entity", "" + ), + "boiler_has_alternative_heating": wizard_data.get( + "boiler_has_alternative_heating", False + ), + "boiler_alt_cost_kwh": wizard_data.get("boiler_alt_cost_kwh", 0.0), + "boiler_alt_energy_sensor": wizard_data.get( + "boiler_alt_energy_sensor", "" + ), + "boiler_spot_price_sensor": wizard_data.get( + "boiler_spot_price_sensor", "" + ), + "boiler_deadline_time": wizard_data.get("boiler_deadline_time", "20:00"), + "boiler_planning_horizon_hours": wizard_data.get( + "boiler_planning_horizon_hours", 36 + ), + "boiler_plan_slot_minutes": wizard_data.get( + "boiler_plan_slot_minutes", 30 + ), + } + + @staticmethod + def _build_auto_options(wizard_data: Dict[str, Any]) -> Dict[str, Any]: + return {"enable_auto": wizard_data.get("enable_auto", False)} + + @staticmethod + def _map_backend_to_frontend(backend_data: Dict[str, Any]) -> Dict[str, Any]: + """Map backend attribute names back to UI-friendly frontend names. + + This is the reverse of _map_pricing_to_backend - used when loading + existing configuration in OptionsFlow. + """ + frontend_data: Dict[str, Any] = {} + frontend_data.update(WizardMixin._map_import_frontend(backend_data)) + frontend_data.update(WizardMixin._map_export_frontend(backend_data)) + frontend_data.update(WizardMixin._map_distribution_frontend(backend_data)) + frontend_data["vat_rate"] = backend_data.get("vat_rate", 21.0) + return frontend_data + + @staticmethod + def _map_import_frontend(backend_data: Dict[str, Any]) -> Dict[str, Any]: + frontend_data: Dict[str, Any] = {} + spot_model = backend_data.get("spot_pricing_model", "percentage") + if spot_model == "percentage": + frontend_data["import_pricing_scenario"] = "spot_percentage" + frontend_data["spot_positive_fee_percent"] = backend_data.get( + "spot_positive_fee_percent", 15.0 + ) + frontend_data["spot_negative_fee_percent"] = backend_data.get( + "spot_negative_fee_percent", 9.0 + ) + elif spot_model == "fixed": + frontend_data["import_pricing_scenario"] = "spot_fixed" + fee_mwh = backend_data.get("spot_fixed_fee_mwh", 500.0) + frontend_data["spot_fixed_fee_kwh"] = fee_mwh / 1000.0 + elif spot_model == "fixed_prices": + frontend_data["import_pricing_scenario"] = "fix_price" + frontend_data["fixed_price_kwh"] = backend_data.get( + "fixed_commercial_price_vt", 4.50 + ) + frontend_data["fixed_price_vt_kwh"] = backend_data.get( + "fixed_commercial_price_vt", frontend_data["fixed_price_kwh"] + ) + frontend_data["fixed_price_nt_kwh"] = backend_data.get( + "fixed_commercial_price_nt", frontend_data["fixed_price_kwh"] + ) + return frontend_data + + @staticmethod + def _map_export_frontend(backend_data: Dict[str, Any]) -> Dict[str, Any]: + frontend_data: Dict[str, Any] = {} + export_model = backend_data.get("export_pricing_model", "percentage") + if export_model == "percentage": + frontend_data["export_pricing_scenario"] = "spot_percentage" + frontend_data["export_fee_percent"] = backend_data.get( + "export_fee_percent", 15.0 + ) + elif export_model == "fixed": + frontend_data["export_pricing_scenario"] = "spot_fixed" + frontend_data["export_fixed_fee_czk"] = backend_data.get( + "export_fixed_fee_czk", 0.20 + ) + elif export_model == "fixed_prices": + frontend_data["export_pricing_scenario"] = "fix_price" + frontend_data["export_fixed_price_kwh"] = backend_data.get( + "export_fixed_price", 2.50 + ) + return frontend_data + + @staticmethod + def _map_distribution_frontend(backend_data: Dict[str, Any]) -> Dict[str, Any]: + frontend_data: Dict[str, Any] = {} + dual_tariff = backend_data.get("dual_tariff_enabled", False) + frontend_data["tariff_count"] = "dual" if dual_tariff else "single" + frontend_data["distribution_fee_vt_kwh"] = backend_data.get( + "distribution_fee_vt_kwh", 1.42 + ) + if dual_tariff: + frontend_data["distribution_fee_nt_kwh"] = backend_data.get( + "distribution_fee_nt_kwh", 0.91 + ) + weekday_vt = backend_data.get("tariff_vt_start_weekday", "6") + weekday_nt = backend_data.get("tariff_nt_start_weekday", "22,2") + weekend_vt = backend_data.get("tariff_vt_start_weekend") + weekend_nt = backend_data.get("tariff_nt_start_weekend") + weekend_same = backend_data.get("tariff_weekend_same_as_weekday") + if weekend_same is None: + if weekend_vt is None and weekend_nt is None: + weekend_same = True + else: + weekend_same = str(weekend_vt) == str(weekday_vt) and str( + weekend_nt + ) == str(weekday_nt) + frontend_data["tariff_vt_start_weekday"] = weekday_vt + frontend_data["tariff_nt_start_weekday"] = weekday_nt + frontend_data["tariff_weekend_same_as_weekday"] = bool(weekend_same) + frontend_data["tariff_vt_start_weekend"] = ( + weekend_vt if weekend_vt is not None else weekday_vt + ) + frontend_data["tariff_nt_start_weekend"] = ( + weekend_nt if weekend_nt is not None else weekday_nt + ) + return frontend_data + + def __init__(self) -> None: + """Initialize wizard data.""" + super().__init__() + self._wizard_data: Dict[str, Any] = {} + self._step_history: list[str] = [] + + def _is_reconfiguration(self) -> bool: + """Check if this is a reconfiguration (Options Flow).""" + return hasattr(self, "config_entry") and self.config_entry is not None + + def _get_defaults(self) -> Dict[str, Any]: + """Get default values from existing config (for reconfiguration).""" + if self._is_reconfiguration(): + # Migrovat stará data při načítání + old_data = dict(self.config_entry.options) + return self._migrate_old_pricing_data(old_data) + return {} + + def _get_planner_mode_value(self, data: Optional[Dict[str, Any]] = None) -> str: + """Return normalized planner mode name - always hybrid.""" + _ = data + return "hybrid" + + async def _handle_back_button(self, current_step: str) -> FlowResult: + """Handle back button - return to previous step.""" + if len(self._step_history) > 0: + # Odebrat současný krok z historie + if self._step_history[-1] == current_step: + self._step_history.pop() + + # Vrátit se o krok zpět + if len(self._step_history) > 0: + previous_step = self._step_history.pop() + return await getattr(self, f"async_step_{previous_step}")() + + # Pokud není historie, vrátit se na začátek + return await self.async_step_wizard_welcome() + + def _generate_summary(self) -> str: + """Generate configuration summary for review.""" + summary_parts = [] + + # Přihlášení + summary_parts.append("👤 **Přihlášení:**") + summary_parts.append( + f" • Uživatel: {self._wizard_data.get(CONF_USERNAME, 'N/A')}" + ) + summary_parts.append("") + + # Intervaly + summary_parts.append("⏱️ **Intervaly načítání:**") + summary_parts.append( + f" • Základní data: {self._wizard_data.get('standard_scan_interval', 30)}s" + ) + summary_parts.append( + f" • Rozšířená data: {self._wizard_data.get('extended_scan_interval', 300)}s" + ) + summary_parts.append("") + + # Zapnuté moduly + summary_parts.append("📦 **Zapnuté moduly:**") + if self._wizard_data.get("enable_statistics", True): + summary_parts.append(" ✅ Statistiky a analýzy") + if self._wizard_data.get("enable_solar_forecast", False): + summary_parts.append(" ✅ Solární předpověď") + mode = self._wizard_data.get("solar_forecast_mode", "daily_optimized") + mode_names = { + "daily_optimized": "Denní optimalizovaný", + "every_4h": "Každé 4 hodiny", + "hourly": "Každou hodinu", + } + summary_parts.append(f" → Režim: {mode_names.get(mode, mode)}") + if self._wizard_data.get(CONF_SOLAR_FORECAST_STRING1_ENABLED, False): + kwp1 = self._wizard_data.get(CONF_SOLAR_FORECAST_STRING1_KWP, 0) + summary_parts.append(f" → String 1: {kwp1} kWp") + if self._wizard_data.get("solar_forecast_string2_enabled", False): + kwp2 = self._wizard_data.get("solar_forecast_string2_kwp", 0) + summary_parts.append(f" → String 2: {kwp2} kWp") + + if self._wizard_data.get("enable_battery_prediction", False): + summary_parts.append(" ✅ Predikce baterie") + min_cap = self._wizard_data.get("min_capacity_percent", 20) + target_cap = self._wizard_data.get("target_capacity_percent", 80) + max_price = self._wizard_data.get("max_ups_price_czk", 10.0) + summary_parts.append(f" → Kapacita: {min_cap}% - {target_cap}%") + summary_parts.append(f" → Max. cena: {max_price} CZK/kWh") + + if self._wizard_data.get("enable_pricing", False): + summary_parts.append(" ✅ Cenové senzory a spotové ceny") + model = self._wizard_data.get("spot_pricing_model", "percentage") + model_names = { + "percentage": "Procentní přirážka", + "fixed": "Fixní poplatek", + "fixed_prices": "Fixní ceny", + } + summary_parts.append(f" → Model: {model_names.get(model, model)}") + vat = self._wizard_data.get("vat_rate", 21.0) + summary_parts.append(f" → DPH: {vat}%") + + if self._wizard_data.get("enable_extended_sensors", True): + summary_parts.append(" ✅ Rozšířené senzory") + + if self._wizard_data.get("enable_dashboard", False): + summary_parts.append(" ✅ Interaktivní dashboard") + + summary_parts.append("") + summary_parts.append( + "💡 **Tip:** Můžete se vrátit zpět a změnit jakékoli nastavení." + ) + + return "\n".join(summary_parts) + + # === WIZARD METHODS - Shared by ConfigFlow and OptionsFlow === + + async def async_step_wizard_welcome( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard: Welcome screen with overview.""" + if user_input is not None: + return await self.async_step_wizard_credentials() + + return self.async_show_form( + step_id="wizard_welcome", + data_schema=vol.Schema({}), + description_placeholders={ + "info": """ +🎯 Vítejte v průvodci nastavením OIG Cloud! + +Tento průvodce vás krok za krokem provede nastavením integrace. +Můžete se kdykoli vrátit zpět a změnit předchozí nastavení. + +**Co budeme konfigurovat:** +1. Přihlašovací údaje +2. Výběr funkcí a modulů +3. Podrobné nastavení vybraných modulů +4. Kontrola a dokončení + +Kliknutím na "Odeslat" spustíte průvodce. + """.strip() + }, + ) + + async def async_step_wizard_credentials( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 1: Credentials.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" - musí být PRVNÍ, bez validace + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_credentials") + + errors = self._validate_credentials_input(user_input) + if errors: + return self._show_credentials_form(errors) + + try: + await validate_input(self.hass, user_input) + self._wizard_data.update(user_input) + self._step_history.append("wizard_credentials") + return await self.async_step_wizard_modules() + + except LiveDataNotEnabled: + errors["base"] = "live_data_not_enabled" + except CannotConnect: + errors["base"] = "cannot_connect" + except InvalidAuth: + errors["base"] = "invalid_auth" + except Exception: + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + + return self._show_credentials_form(errors) + + return self._show_credentials_form() + + def _show_credentials_form(self, errors: Optional[Dict[str, str]] = None) -> FlowResult: + return self.async_show_form( + step_id="wizard_credentials", + data_schema=self._get_credentials_schema(), + errors=errors, + description_placeholders=self._get_step_placeholders("wizard_credentials"), + ) + + @staticmethod + def _validate_credentials_input(user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + if not user_input.get(CONF_USERNAME, "").strip(): + errors[CONF_USERNAME] = "required" + if not user_input.get(CONF_PASSWORD, ""): + errors[CONF_PASSWORD] = "required" + if not user_input.get("live_data_enabled", False): + errors["live_data_enabled"] = "live_data_not_confirmed" + return errors + + async def async_step_wizard_modules( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 2: Select modules to enable.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_modules") + + errors = self._validate_modules_selection(user_input) + if errors: + return self._show_modules_form(user_input, errors) + + self._wizard_data.update(user_input) + self._step_history.append("wizard_modules") + + # Debug log + _LOGGER.info( + f"🔧 Wizard modules: Updated data with {len(user_input)} fields" + ) + _LOGGER.debug( + f"🔧 Wizard modules: Current _wizard_data keys: {list(self._wizard_data.keys())}" + ) + + next_step = self._get_next_step("wizard_modules") + return await getattr(self, f"async_step_{next_step}")() + + return self._show_modules_form() + + def _show_modules_form( + self, + defaults: Optional[Dict[str, Any]] = None, + errors: Optional[Dict[str, str]] = None, + ) -> FlowResult: + return self.async_show_form( + step_id="wizard_modules", + data_schema=self._get_modules_schema(defaults), + errors=errors, + description_placeholders=self._get_step_placeholders("wizard_modules"), + ) + + def _validate_modules_selection(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + if user_input.get("enable_battery_prediction"): + if not user_input.get("enable_solar_forecast"): + errors["enable_battery_prediction"] = "requires_solar_forecast" + if not user_input.get("enable_extended_sensors"): + errors["enable_extended_sensors"] = "required_for_battery" + + if user_input.get("enable_dashboard"): + missing = self._missing_dashboard_requirements(user_input) + if missing: + errors["enable_dashboard"] = "dashboard_requires_all" + self._wizard_data["_missing_for_dashboard"] = missing + + return errors + + @staticmethod + def _missing_dashboard_requirements(user_input: Dict[str, Any]) -> list[str]: + missing = [] + if not user_input.get("enable_statistics"): + missing.append("Statistiky") + if not user_input.get("enable_solar_forecast"): + missing.append("Solární předpověď") + if not user_input.get("enable_battery_prediction"): + missing.append("Predikce baterie") + if not user_input.get("enable_pricing"): + missing.append("Cenové senzory a spotové ceny") + if not user_input.get("enable_extended_sensors"): + missing.append("Rozšířené senzory") + return missing + + def _get_modules_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for modules selection with defaults.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + return vol.Schema( + { + vol.Optional( + "enable_statistics", default=defaults.get("enable_statistics", True) + ): bool, + vol.Optional( + "enable_solar_forecast", + default=defaults.get("enable_solar_forecast", False), + ): bool, + vol.Optional( + "enable_battery_prediction", + default=defaults.get("enable_battery_prediction", False), + ): bool, + vol.Optional( + "enable_pricing", default=defaults.get("enable_pricing", False) + ): bool, + vol.Optional( + "enable_extended_sensors", + default=defaults.get("enable_extended_sensors", True), + ): bool, + vol.Optional( + "enable_chmu_warnings", + default=defaults.get("enable_chmu_warnings", False), + ): bool, + vol.Optional( + "enable_dashboard", default=defaults.get("enable_dashboard", False) + ): bool, + vol.Optional( + "enable_boiler", default=defaults.get("enable_boiler", False) + ): bool, + vol.Optional( + "enable_auto", default=defaults.get("enable_auto", False) + ): bool, + vol.Optional("go_back", default=False): bool, + } + ) + + def _get_credentials_schema(self) -> vol.Schema: + """Get schema for credentials step.""" + return vol.Schema( + { + vol.Optional( + CONF_USERNAME, + default=self._wizard_data.get(CONF_USERNAME, ""), + description={ + "suggested_value": self._wizard_data.get(CONF_USERNAME, "") + }, + ): str, + vol.Optional( + CONF_PASSWORD, default="", description={"suggested_value": ""} + ): str, + vol.Optional( + "live_data_enabled", + default=False, + ): bool, + vol.Optional("go_back", default=False): bool, + } + ) + + def _get_total_steps(self) -> int: + """Calculate total number of steps based on enabled modules.""" + # Detekce, zda běžíme v Options Flow + is_options_flow = "wizard_welcome_reconfigure" in self._step_history + + # Základní kroky: + # Config Flow: welcome, credentials, modules, intervals = 4 + # Options Flow: welcome_reconfigure, modules, intervals = 3 + total = 3 if is_options_flow else 4 + + # Volitelné kroky podle zapnutých modulů: + if self._wizard_data.get("enable_solar_forecast", False): + total += 1 # wizard_solar + if self._wizard_data.get("enable_battery_prediction", False): + total += 1 # wizard_battery + if self._wizard_data.get("enable_pricing", False): + total += 3 # wizard_pricing (3 kroky: import, export, distribution) + if self._wizard_data.get("enable_boiler", False): + total += 1 # wizard_boiler + + # Summary krok (vždy na konci): + total += 1 + + return total + + def _get_current_step_number(self, step_id: str) -> int: + """Get current step number based on step_id and enabled modules.""" + is_options_flow = self._is_options_flow(step_id) + steps = self._build_step_sequence(is_options_flow) + if step_id in steps: + return steps.index(step_id) + 1 + + return self._base_step_map(is_options_flow).get(step_id, 1) + + def _is_options_flow(self, step_id: str) -> bool: + """Return True when running inside Options Flow.""" + return ( + "wizard_welcome_reconfigure" in self._step_history + or step_id == "wizard_welcome_reconfigure" + ) + + def _base_step_map(self, is_options_flow: bool) -> dict[str, int]: + """Return step mapping for base flow.""" + if is_options_flow: + return { # pragma: no cover + "wizard_welcome_reconfigure": 1, + "wizard_modules": 2, + "wizard_intervals": 3, + } + return { + "wizard_welcome": 1, + "wizard_credentials": 2, + "wizard_modules": 3, + "wizard_intervals": 4, + } + + def _build_step_sequence(self, is_options_flow: bool) -> list[str]: + """Build ordered list of steps for progress calculation.""" + if is_options_flow: + steps = [ + "wizard_welcome_reconfigure", + "wizard_modules", + "wizard_intervals", + ] + else: + steps = [ + "wizard_welcome", + "wizard_credentials", + "wizard_modules", + "wizard_intervals", + ] + + if self._wizard_data.get("enable_solar_forecast", False): + steps.append("wizard_solar") + if self._wizard_data.get("enable_battery_prediction", False): + steps.append("wizard_battery") + if self._wizard_data.get("enable_pricing", False): + steps.extend( + [ + "wizard_pricing_import", + "wizard_pricing_export", + "wizard_pricing_distribution", + ] + ) + if self._wizard_data.get("enable_boiler", False): + steps.append("wizard_boiler") + + steps.append("wizard_summary") + return steps + + def _get_step_placeholders(self, step_id: str = None, **kwargs) -> dict[str, str]: + """Get placeholders for step description. + + Args: + step_id: ID of current step (e.g. 'wizard_solar') + **kwargs: Additional placeholders + """ + if step_id: + current = self._get_current_step_number(step_id) + total = self._get_total_steps() + else: + # Fallback pro staré volání + current = kwargs.pop("current", 1) + total = kwargs.pop("total", 5) + + progress_bar = "▓" * current + "░" * (total - current) + placeholders = { + "step": f"Krok {current} z {total}", + "progress": progress_bar, + # Some translations use "{info}" in step descriptions. Provide a safe default. + "info": "", + } + + # Přidat další placeholders podle potřeby + placeholders.update(kwargs) + return placeholders + + def _get_next_step(self, current_step: str) -> str: + """Determine next step based on enabled modules.""" + all_steps = [ + "wizard_welcome", + "wizard_credentials", + "wizard_modules", + "wizard_intervals", + "wizard_solar", + "wizard_battery", + "wizard_pricing_import", + "wizard_pricing_export", + "wizard_pricing_distribution", + "wizard_boiler", + "wizard_summary", + ] + + try: + current_idx = all_steps.index(current_step) + except ValueError: + return "wizard_summary" + + for step in all_steps[current_idx + 1 :]: + if step == "wizard_summary": + return step + if self._should_skip_step(step): + continue + + return step + + return "wizard_summary" + + def _should_skip_step(self, step: str) -> bool: + if step == "wizard_solar": + return not self._wizard_data.get("enable_solar_forecast") + if step == "wizard_battery": + return not self._wizard_data.get("enable_battery_prediction") + if step in { + "wizard_pricing_import", + "wizard_pricing_export", + "wizard_pricing_distribution", + }: + return not self._wizard_data.get("enable_pricing") + if step == "wizard_boiler": + return not self._wizard_data.get("enable_boiler") + return False + + async def async_step_wizard_intervals( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 3: Configure scan intervals.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_intervals") + + values = self._collect_interval_values(user_input) + errors = self._validate_interval_values(values) + if errors: + return self._show_intervals_form(values, errors) + + self._wizard_data.update(user_input) + self._step_history.append("wizard_intervals") + + next_step = self._get_next_step("wizard_intervals") + return await getattr(self, f"async_step_{next_step}")() + + return self._show_intervals_form() + + def _collect_interval_values(self, user_input: Dict[str, Any]) -> Dict[str, Any]: + return { + "standard": user_input.get("standard_scan_interval", 30), + "extended": user_input.get("extended_scan_interval", 300), + "data_source_mode": self._sanitize_data_source_mode( + user_input.get( + "data_source_mode", + self._wizard_data.get("data_source_mode", "cloud_only"), + ) + ), + "proxy_stale": user_input.get( + "local_proxy_stale_minutes", + self._wizard_data.get("local_proxy_stale_minutes", 10), + ), + "debounce_ms": user_input.get( + "local_event_debounce_ms", + self._wizard_data.get("local_event_debounce_ms", 300), + ), + } + + def _validate_interval_values(self, values: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + standard = values["standard"] + extended = values["extended"] + proxy_stale = values["proxy_stale"] + debounce_ms = values["debounce_ms"] + data_source_mode = values["data_source_mode"] + + if standard < 30: + errors["standard_scan_interval"] = "interval_too_short" + elif standard > 300: + errors["standard_scan_interval"] = "interval_too_long" + + if extended < 300: + errors["extended_scan_interval"] = "extended_interval_too_short" + elif extended > 3600: + errors["extended_scan_interval"] = "extended_interval_too_long" + + if proxy_stale < 1: + errors["local_proxy_stale_minutes"] = "interval_too_short" + elif proxy_stale > 120: + errors["local_proxy_stale_minutes"] = "interval_too_long" + + if debounce_ms < 0: + errors["local_event_debounce_ms"] = "interval_too_short" + elif debounce_ms > 5000: + errors["local_event_debounce_ms"] = "interval_too_long" + + if data_source_mode == "local_only" and not self._proxy_ready(): + errors["data_source_mode"] = "local_proxy_missing" + + return errors + + def _proxy_ready(self) -> bool: + if not self.hass: + return False # pragma: no cover + proxy_state = self.hass.states.get(PROXY_LAST_DATA_ENTITY_ID) + if proxy_state is None or proxy_state.state in ( + STATE_UNAVAILABLE, + STATE_UNKNOWN, + ): + return False + proxy_box = self.hass.states.get(PROXY_BOX_ID_ENTITY_ID) + return bool( + proxy_box is not None + and isinstance(proxy_box.state, str) + and proxy_box.state.isdigit() + ) + + def _show_intervals_form( + self, + values: Optional[Dict[str, Any]] = None, + errors: Optional[Dict[str, str]] = None, + ) -> FlowResult: + if values is None: + data_source_mode = self._sanitize_data_source_mode( + self._wizard_data.get("data_source_mode", "cloud_only") + ) + data_schema = vol.Schema( + { + vol.Optional("standard_scan_interval", default=30): int, + vol.Optional("extended_scan_interval", default=300): int, + vol.Optional( + "data_source_mode", default=data_source_mode + ): selector.SelectSelector( + selector.SelectSelectorConfig( + options=[ + {"value": "cloud_only", "label": "☁️ Cloud only"}, + { + "value": "local_only", + "label": "🏠 Local only (fallback na cloud při výpadku)", + }, + ], + mode=selector.SelectSelectorMode.DROPDOWN, + ) + ), + vol.Optional( + "local_proxy_stale_minutes", + default=self._wizard_data.get("local_proxy_stale_minutes", 10), + ): int, + vol.Optional( + "local_event_debounce_ms", + default=self._wizard_data.get("local_event_debounce_ms", 300), + ): int, + vol.Optional("go_back", default=False): bool, + } + ) + else: + data_schema = vol.Schema( + { + vol.Optional( + "standard_scan_interval", default=values["standard"] + ): int, + vol.Optional( + "extended_scan_interval", default=values["extended"] + ): int, + vol.Optional( + "data_source_mode", default=values["data_source_mode"] + ): selector.SelectSelector( + selector.SelectSelectorConfig( + options=[ + {"value": "cloud_only", "label": "☁️ Cloud only"}, + { + "value": "local_only", + "label": "🏠 Local only (fallback na cloud při výpadku)", + }, + ], + mode=selector.SelectSelectorMode.DROPDOWN, + ) + ), + vol.Optional( + "local_proxy_stale_minutes", + default=values["proxy_stale"], + ): int, + vol.Optional( + "local_event_debounce_ms", + default=values["debounce_ms"], + ): int, + vol.Optional("go_back", default=False): bool, + } + ) + return self.async_show_form( + step_id="wizard_intervals", + data_schema=data_schema, + errors=errors, + description_placeholders=self._get_step_placeholders("wizard_intervals"), + ) + + async def async_step_wizard_solar( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 4: Solar forecast configuration.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_solar") + + if self._should_refresh_solar_form(user_input): + return self._show_solar_form(user_input) + + errors = {} + errors.update(self._validate_solar_provider(user_input)) + errors.update(self._validate_solar_coordinates(user_input)) + errors.update(self._validate_solar_strings(user_input)) + + if errors: + return self._show_solar_form(user_input, errors=errors) + + self._wizard_data.update(user_input) + self._step_history.append("wizard_solar") + + next_step = self._get_next_step("wizard_solar") + return await getattr(self, f"async_step_{next_step}")() + + return self.async_show_form( + step_id="wizard_solar", + data_schema=self._get_solar_schema(), + description_placeholders=self._get_step_placeholders("wizard_solar"), + ) + + def _show_solar_form( + self, + user_input: Optional[Dict[str, Any]] = None, + *, + errors: Optional[Dict[str, str]] = None, + ) -> FlowResult: + return self.async_show_form( + step_id="wizard_solar", + data_schema=self._get_solar_schema(user_input), + errors=errors, + description_placeholders=self._get_step_placeholders("wizard_solar"), + ) + + def _should_refresh_solar_form(self, user_input: Dict[str, Any]) -> bool: + old_string1_enabled = self._wizard_data.get( + CONF_SOLAR_FORECAST_STRING1_ENABLED, True + ) + old_string2_enabled = self._wizard_data.get( + "solar_forecast_string2_enabled", False + ) + new_string1_enabled = user_input.get(CONF_SOLAR_FORECAST_STRING1_ENABLED, False) + new_string2_enabled = user_input.get("solar_forecast_string2_enabled", False) + + if ( + old_string1_enabled != new_string1_enabled + or old_string2_enabled != new_string2_enabled + ): + self._wizard_data.update(user_input) + return True + return False + + def _validate_solar_provider(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + provider = user_input.get(CONF_SOLAR_FORECAST_PROVIDER, "forecast_solar") + api_key = user_input.get(CONF_SOLAR_FORECAST_API_KEY, "").strip() + mode = user_input.get("solar_forecast_mode", "daily_optimized") + + if provider == "forecast_solar": + if mode in ["every_4h", "hourly"] and not api_key: + errors["solar_forecast_mode"] = "api_key_required_for_frequent_updates" + else: + solcast_api_key = user_input.get(CONF_SOLCAST_API_KEY, "").strip() + if not solcast_api_key: + errors[CONF_SOLCAST_API_KEY] = "solcast_api_key_required" + return errors + + def _validate_solar_coordinates( + self, user_input: Dict[str, Any] + ) -> Dict[str, str]: + errors: Dict[str, str] = {} + try: + lat = float(user_input.get(CONF_SOLAR_FORECAST_LATITUDE, 50.0)) + lon = float(user_input.get(CONF_SOLAR_FORECAST_LONGITUDE, 14.0)) + if not (-90 <= lat <= 90): + errors[CONF_SOLAR_FORECAST_LATITUDE] = "invalid_latitude" + if not (-180 <= lon <= 180): + errors[CONF_SOLAR_FORECAST_LONGITUDE] = "invalid_longitude" + except (ValueError, TypeError): + errors["base"] = "invalid_coordinates" + return errors + + def _validate_solar_strings(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + string1_enabled = user_input.get(CONF_SOLAR_FORECAST_STRING1_ENABLED, False) + string2_enabled = user_input.get("solar_forecast_string2_enabled", False) + + if not string1_enabled and not string2_enabled: + errors["base"] = "no_strings_enabled" + + if string1_enabled: + errors.update(self._validate_solar_string1(user_input)) + if string2_enabled: + errors.update(self._validate_solar_string2(user_input)) + return errors + + def _validate_solar_string1(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + try: + kwp1 = float(user_input.get(CONF_SOLAR_FORECAST_STRING1_KWP, 5.0)) + decl1 = int(user_input.get(CONF_SOLAR_FORECAST_STRING1_DECLINATION, 35)) + azim1 = int(user_input.get(CONF_SOLAR_FORECAST_STRING1_AZIMUTH, 0)) + + if not (0 < kwp1 <= 15): + errors[CONF_SOLAR_FORECAST_STRING1_KWP] = "invalid_kwp" + if not (0 <= decl1 <= 90): + errors[CONF_SOLAR_FORECAST_STRING1_DECLINATION] = "invalid_declination" + if not (0 <= azim1 <= 360): + errors[CONF_SOLAR_FORECAST_STRING1_AZIMUTH] = "invalid_azimuth" + except (ValueError, TypeError): + errors["base"] = "invalid_string1_params" + return errors + + def _validate_solar_string2(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + try: + kwp2 = float(user_input.get("solar_forecast_string2_kwp", 5.0)) + decl2 = int(user_input.get("solar_forecast_string2_declination", 35)) + azim2 = int(user_input.get("solar_forecast_string2_azimuth", 180)) + + if not (0 < kwp2 <= 15): + errors["solar_forecast_string2_kwp"] = "invalid_kwp" + if not (0 <= decl2 <= 90): + errors["solar_forecast_string2_declination"] = "invalid_declination" + if not (0 <= azim2 <= 360): + errors["solar_forecast_string2_azimuth"] = "invalid_azimuth" + except (ValueError, TypeError): + errors["base"] = "invalid_string2_params" + return errors + + def _get_solar_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for solar forecast step.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + # Získat GPS souřadnice z Home Assistant konfigurace jako default + ha_latitude = self.hass.config.latitude if self.hass else 50.0 + ha_longitude = self.hass.config.longitude if self.hass else 14.0 + + provider = defaults.get(CONF_SOLAR_FORECAST_PROVIDER, "forecast_solar") + + schema_fields = { + vol.Optional( + CONF_SOLAR_FORECAST_PROVIDER, + default=provider, + ): vol.In( + { + "forecast_solar": "Forecast.Solar", + "solcast": "Solcast", + } + ), + vol.Optional( + "solar_forecast_mode", + default=defaults.get("solar_forecast_mode", "daily_optimized"), + ): vol.In( + { + "daily_optimized": "🎯 Optimalizovaný (3× denně, ZDARMA)", + "daily": "🌅 Denní (1× denně, ZDARMA)", + "every_4h": "🕐 Každé 4 hodiny (vyžaduje API klíč)", + "hourly": "⚡ Každou hodinu (vyžaduje API klíč)", + } + ), + vol.Optional( + CONF_SOLAR_FORECAST_LATITUDE, + default=defaults.get(CONF_SOLAR_FORECAST_LATITUDE, ha_latitude), + ): vol.Coerce(float), + vol.Optional( + CONF_SOLAR_FORECAST_LONGITUDE, + default=defaults.get(CONF_SOLAR_FORECAST_LONGITUDE, ha_longitude), + ): vol.Coerce(float), + vol.Optional( + CONF_SOLAR_FORECAST_STRING1_ENABLED, + default=defaults.get(CONF_SOLAR_FORECAST_STRING1_ENABLED, True), + ): bool, + } + + if provider == "forecast_solar": + schema_fields[vol.Optional( + CONF_SOLAR_FORECAST_API_KEY, + default=defaults.get(CONF_SOLAR_FORECAST_API_KEY, ""), + )] = str + else: + schema_fields[vol.Optional( + CONF_SOLCAST_API_KEY, + default=defaults.get(CONF_SOLCAST_API_KEY, ""), + )] = str + + # String 1 parametry - zobrazit jen když je povolen + if defaults.get(CONF_SOLAR_FORECAST_STRING1_ENABLED, True): + schema_fields.update( + { + vol.Optional( + CONF_SOLAR_FORECAST_STRING1_KWP, + default=defaults.get(CONF_SOLAR_FORECAST_STRING1_KWP, 5.0), + ): vol.Coerce(float), + vol.Optional( + CONF_SOLAR_FORECAST_STRING1_DECLINATION, + default=defaults.get( + CONF_SOLAR_FORECAST_STRING1_DECLINATION, 35 + ), + ): vol.Coerce(int), + vol.Optional( + CONF_SOLAR_FORECAST_STRING1_AZIMUTH, + default=defaults.get(CONF_SOLAR_FORECAST_STRING1_AZIMUTH, 0), + ): vol.Coerce(int), + } + ) + + # String 2 checkbox + schema_fields[ + vol.Optional( + "solar_forecast_string2_enabled", + default=defaults.get("solar_forecast_string2_enabled", False), + ) + ] = bool + + # String 2 parametry - zobrazit jen když je povolen + if defaults.get("solar_forecast_string2_enabled", False): + schema_fields.update( + { + vol.Optional( + "solar_forecast_string2_kwp", + default=defaults.get("solar_forecast_string2_kwp", 5.0), + ): vol.Coerce(float), + vol.Optional( + "solar_forecast_string2_declination", + default=defaults.get("solar_forecast_string2_declination", 35), + ): vol.Coerce(int), + vol.Optional( + "solar_forecast_string2_azimuth", + default=defaults.get("solar_forecast_string2_azimuth", 180), + ): vol.Coerce(int), + } + ) + + # Přidat go_back na konec + schema_fields[vol.Optional("go_back", default=False)] = bool + + return vol.Schema(schema_fields) + + async def async_step_wizard_battery( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 5: Battery prediction configuration.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_battery") + + errors = {} + + # Validace min < target + min_cap = user_input.get("min_capacity_percent", 20.0) + target_cap = user_input.get("target_capacity_percent", 80.0) + + if min_cap >= target_cap: + errors["min_capacity_percent"] = "min_must_be_less_than_target" + + # Validace max price + max_price = user_input.get("max_ups_price_czk", 10.0) + if max_price < 1.0 or max_price > 50.0: + errors["max_ups_price_czk"] = "invalid_price" + + if errors: + return self.async_show_form( + step_id="wizard_battery", + data_schema=self._get_battery_schema(user_input), + errors=errors, + description_placeholders=self._get_step_placeholders( + "wizard_battery" + ), + ) + + self._wizard_data.update(user_input) + self._step_history.append("wizard_battery") + + next_step = self._get_next_step("wizard_battery") + return await getattr(self, f"async_step_{next_step}")() + + return self.async_show_form( + step_id="wizard_battery", + data_schema=self._get_battery_schema(), + description_placeholders=self._get_step_placeholders("wizard_battery"), + ) + + def _get_battery_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for battery prediction step.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + schema_fields = { + vol.Optional( + CONF_AUTO_MODE_SWITCH, + default=defaults.get(CONF_AUTO_MODE_SWITCH, False), + ): bool, + vol.Optional( + "min_capacity_percent", + default=defaults.get("min_capacity_percent", 20.0), + ): vol.All(vol.Coerce(float), vol.Range(min=5.0, max=95.0)), + vol.Optional( + "disable_planning_min_guard", + default=defaults.get("disable_planning_min_guard", False), + ): selector.BooleanSelector(), + vol.Optional( + "target_capacity_percent", + default=defaults.get("target_capacity_percent", 80.0), + ): vol.All(vol.Coerce(float), vol.Range(min=10.0, max=100.0)), + vol.Optional( + "home_charge_rate", default=defaults.get("home_charge_rate", 2.8) + ): vol.All(vol.Coerce(float), vol.Range(min=0.5, max=10.0)), + # SAFETY LIMIT (applies to planner) + vol.Optional( + "max_ups_price_czk", default=defaults.get("max_ups_price_czk", 10.0) + ): vol.All(vol.Coerce(float), vol.Range(min=1.0, max=50.0)), + # BATTERY BALANCING PARAMETERS + vol.Optional( + "balancing_enabled", + default=defaults.get("balancing_enabled", True), + ): selector.BooleanSelector(), + vol.Optional( + "balancing_interval_days", + default=defaults.get("balancing_interval_days", 7), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=3, max=30, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + vol.Optional( + "balancing_hold_hours", + default=defaults.get("balancing_hold_hours", 3), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=1, max=12, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + vol.Optional( + "balancing_opportunistic_threshold", + default=defaults.get("balancing_opportunistic_threshold", 1.1), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=0.5, max=5.0, step=0.1, mode=selector.NumberSelectorMode.BOX + ) + ), + vol.Optional( + "balancing_economic_threshold", + default=defaults.get("balancing_economic_threshold", 2.5), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=0.5, max=10.0, step=0.1, mode=selector.NumberSelectorMode.BOX + ) + ), + # Used by balancer window selection + vol.Optional( + "cheap_window_percentile", + default=defaults.get("cheap_window_percentile", 30), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=5, max=80, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + } + + # Přidat go_back na konec + schema_fields[vol.Optional("go_back", default=False)] = ( + selector.BooleanSelector() + ) + + return vol.Schema(schema_fields) + + async def async_step_wizard_pricing_import( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 6a: Import (purchase) pricing configuration.""" + if user_input is not None: + return await self._handle_pricing_flow( + user_input, + step_id="wizard_pricing_import", + scenario_key="import_pricing_scenario", + schema_builder=self._get_pricing_import_schema, + validator=self._validate_import_pricing, + default_scenario="spot_percentage", + ) + + return self.async_show_form( + step_id="wizard_pricing_import", + data_schema=self._get_pricing_import_schema(), + description_placeholders=self._get_step_placeholders( + "wizard_pricing_import" + ), + ) + + def _get_pricing_import_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for import pricing step.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + scenario = defaults.get("import_pricing_scenario", "spot_percentage") + + schema_fields = { + vol.Optional("import_pricing_scenario", default=scenario): vol.In( + { + "spot_percentage": "💰 SPOT + procento", + "spot_fixed": "💵 SPOT + fixní poplatek", + "fix_price": "🔒 FIX cena", + } + ), + } + + # Conditional fields based on scenario + if scenario == "spot_percentage": + schema_fields[ + vol.Optional( + "spot_positive_fee_percent", + default=defaults.get("spot_positive_fee_percent", 15.0), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.1, max=100.0)) + schema_fields[ + vol.Optional( + "spot_negative_fee_percent", + default=defaults.get("spot_negative_fee_percent", 9.0), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.1, max=100.0)) + elif scenario == "spot_fixed": + schema_fields[ + vol.Optional( + "spot_fixed_fee_kwh", + default=defaults.get("spot_fixed_fee_kwh", 0.50), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.01, max=10.0)) + elif scenario == "fix_price": + schema_fields[ + vol.Optional( + "fixed_price_kwh", + default=defaults.get("fixed_price_kwh", 4.50), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.1, max=20.0)) + + schema_fields[vol.Optional("go_back", default=False)] = bool + + return vol.Schema(schema_fields) + + async def async_step_wizard_pricing_export( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 6b: Export (sell) pricing configuration.""" + if user_input is not None: + return await self._handle_pricing_flow( + user_input, + step_id="wizard_pricing_export", + scenario_key="export_pricing_scenario", + schema_builder=self._get_pricing_export_schema, + validator=self._validate_export_pricing, + default_scenario="spot_percentage", + ) + + return self.async_show_form( + step_id="wizard_pricing_export", + data_schema=self._get_pricing_export_schema(), + description_placeholders=self._get_step_placeholders( + "wizard_pricing_export" + ), + ) + + def _get_pricing_export_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for export pricing step.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + scenario = defaults.get("export_pricing_scenario", "spot_percentage") + + schema_fields = { + vol.Optional("export_pricing_scenario", default=scenario): vol.In( + { + "spot_percentage": "💰 SPOT - procento", + "spot_fixed": "💵 SPOT - fixní srážka", + "fix_price": "🔒 FIX cena", + } + ), + } + + # Conditional fields based on scenario + if scenario == "spot_percentage": + schema_fields[ + vol.Optional( + "export_fee_percent", + default=defaults.get("export_fee_percent", 15.0), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.0, max=50.0)) + elif scenario == "spot_fixed": + schema_fields[ + vol.Optional( + "export_fixed_fee_czk", + default=defaults.get("export_fixed_fee_czk", 0.20), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.0, max=5.0)) + elif scenario == "fix_price": + schema_fields[ + vol.Optional( + "export_fixed_price_kwh", + default=defaults.get("export_fixed_price_kwh", 2.50), + ) + ] = vol.All(vol.Coerce(float), vol.Range(min=0.0, max=10.0)) + + schema_fields[vol.Optional("go_back", default=False)] = bool + + return vol.Schema(schema_fields) + + async def _handle_pricing_flow( + self, + user_input: Dict[str, Any], + *, + step_id: str, + scenario_key: str, + schema_builder, + validator, + default_scenario: str, + ) -> FlowResult: + if user_input.get("go_back", False): + return await self._handle_back_button(step_id) + + old_scenario = self._wizard_data.get(scenario_key, default_scenario) + new_scenario = user_input.get(scenario_key, default_scenario) + + if old_scenario != new_scenario: + self._wizard_data.update(user_input) + return self.async_show_form( + step_id=step_id, + data_schema=schema_builder(user_input), + description_placeholders=self._get_step_placeholders(step_id), + ) + + errors = validator(user_input) + if errors: + return self.async_show_form( + step_id=step_id, + data_schema=schema_builder(user_input), + errors=errors, + description_placeholders=self._get_step_placeholders(step_id), + ) + + self._wizard_data.update(user_input) + self._step_history.append(step_id) + next_step = self._get_next_step(step_id) + return await getattr(self, f"async_step_{next_step}")() + + @staticmethod + def _validate_import_pricing(user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + scenario = user_input.get("import_pricing_scenario", "spot_percentage") + + if scenario == "spot_percentage": + pos_fee = user_input.get("spot_positive_fee_percent", 15.0) + neg_fee = user_input.get("spot_negative_fee_percent", 9.0) + if pos_fee < 0.1 or pos_fee > 100: + errors["spot_positive_fee_percent"] = "invalid_percentage" + if neg_fee < 0.1 or neg_fee > 100: + errors["spot_negative_fee_percent"] = "invalid_percentage" + elif scenario == "spot_fixed": + fee = user_input.get("spot_fixed_fee_kwh", 0.50) + if fee < 0.01 or fee > 10: + errors["spot_fixed_fee_kwh"] = "invalid_fee" + elif scenario == "fix_price": + price = user_input.get("fixed_price_kwh", 4.50) + if price < 0.1 or price > 20: + errors["fixed_price_kwh"] = "invalid_price" + + return errors + + @staticmethod + def _validate_export_pricing(user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + scenario = user_input.get("export_pricing_scenario", "spot_percentage") + + if scenario == "spot_percentage": + fee = user_input.get("export_fee_percent", 15.0) + if fee < 0 or fee > 50: + errors["export_fee_percent"] = "invalid_percentage" + elif scenario == "spot_fixed": + fee = user_input.get("export_fixed_fee_czk", 0.20) + if fee < 0 or fee > 5: + errors["export_fixed_fee_czk"] = "invalid_fee" + elif scenario == "fix_price": + price = user_input.get("export_fixed_price_kwh", 2.50) + if price < 0 or price > 10: + errors["export_fixed_price_kwh"] = "invalid_price" + + return errors + + async def async_step_wizard_pricing_distribution( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 6c: Distribution fees, VT/NT hours, and VAT.""" + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_pricing_distribution") + + if self._should_refresh_distribution_form(user_input): + self._wizard_data.update(user_input) + return self.async_show_form( + step_id="wizard_pricing_distribution", + data_schema=self._get_pricing_distribution_schema(user_input), + description_placeholders=self._get_step_placeholders( + "wizard_pricing_distribution" + ), + ) + + errors = self._validate_pricing_distribution(user_input) + if errors: + return self.async_show_form( + step_id="wizard_pricing_distribution", + data_schema=self._get_pricing_distribution_schema(user_input), + errors=errors, + description_placeholders=self._get_step_placeholders( + "wizard_pricing_distribution" + ), + ) + + self._wizard_data.update(user_input) + self._step_history.append("wizard_pricing_distribution") + + next_step = self._get_next_step("wizard_pricing_distribution") + return await getattr(self, f"async_step_{next_step}")() + + return self.async_show_form( + step_id="wizard_pricing_distribution", + data_schema=self._get_pricing_distribution_schema(), + description_placeholders=self._get_step_placeholders( + "wizard_pricing_distribution" + ), + ) + + def _should_refresh_distribution_form(self, user_input: Dict[str, Any]) -> bool: + old_tariff_count = self._wizard_data.get("tariff_count", "single") + new_tariff_count = user_input.get("tariff_count", "single") + if old_tariff_count != new_tariff_count: + return True + + old_weekend_same = self._wizard_data.get( + "tariff_weekend_same_as_weekday", True + ) + new_weekend_same = user_input.get("tariff_weekend_same_as_weekday", True) + return new_tariff_count == "dual" and old_weekend_same != new_weekend_same + + def _validate_pricing_distribution(self, user_input: Dict[str, Any]) -> Dict[str, str]: + errors: Dict[str, str] = {} + + dist_vt = user_input.get("distribution_fee_vt_kwh", 1.42) + if dist_vt < 0 or dist_vt > 10: + errors["distribution_fee_vt_kwh"] = "invalid_distribution_fee" + + tariff_count = user_input.get("tariff_count", "single") + if tariff_count == "dual": + self._validate_dual_tariff_distribution(user_input, errors) + + vat = user_input.get("vat_rate", 21.0) + if vat < 0 or vat > 30: + errors["vat_rate"] = "invalid_vat" + + return errors + + def _validate_dual_tariff_distribution( + self, user_input: Dict[str, Any], errors: Dict[str, str] + ) -> None: + dist_nt = user_input.get("distribution_fee_nt_kwh", 0.91) + if dist_nt < 0 or dist_nt > 10: + errors["distribution_fee_nt_kwh"] = "invalid_distribution_fee" + + if self._wizard_data.get("import_pricing_scenario") == "fix_price": + fixed_vt = user_input.get( + "fixed_price_vt_kwh", self._wizard_data.get("fixed_price_kwh") + ) + fixed_nt = user_input.get( + "fixed_price_nt_kwh", self._wizard_data.get("fixed_price_kwh") + ) + if fixed_vt is None or fixed_vt < 0.1 or fixed_vt > 20: + errors["fixed_price_vt_kwh"] = "invalid_price" + if fixed_nt is None or fixed_nt < 0.1 or fixed_nt > 20: + errors["fixed_price_nt_kwh"] = "invalid_price" + + vt_starts = user_input.get("tariff_vt_start_weekday", "6") + nt_starts = user_input.get("tariff_nt_start_weekday", "22,2") + is_valid, error_key = validate_tariff_hours(vt_starts, nt_starts) + if not is_valid: + errors["tariff_vt_start_weekday"] = error_key + + weekend_same = user_input.get("tariff_weekend_same_as_weekday", True) + if not weekend_same: + vt_weekend = user_input.get("tariff_vt_start_weekend", "") + nt_weekend = user_input.get("tariff_nt_start_weekend", "0") + is_valid, error_key = validate_tariff_hours( + vt_weekend, nt_weekend, allow_single_tariff=True + ) + if not is_valid: + errors["tariff_vt_start_weekend"] = error_key + + def _get_pricing_distribution_schema( + self, defaults: Optional[Dict[str, Any]] = None + ) -> vol.Schema: + """Get schema for distribution/VAT step.""" + if defaults is None: + defaults = self._wizard_data if self._wizard_data else {} + + tariff_count = defaults.get("tariff_count", "single") + weekday_vt_default = defaults.get("tariff_vt_start_weekday", "6") + weekday_nt_default = defaults.get("tariff_nt_start_weekday", "22,2") + weekend_vt_default = defaults.get("tariff_vt_start_weekend", weekday_vt_default) + weekend_nt_default = defaults.get("tariff_nt_start_weekend", weekday_nt_default) + weekend_same_default = defaults.get("tariff_weekend_same_as_weekday") + if weekend_same_default is None: + if ( + "tariff_vt_start_weekend" not in defaults + and "tariff_nt_start_weekend" not in defaults + ): + weekend_same_default = True + else: + weekend_same_default = str(weekend_vt_default) == str( + weekday_vt_default + ) and str(weekend_nt_default) == str(weekday_nt_default) + + schema_fields = { + vol.Optional("tariff_count", default=tariff_count): vol.In( + { + "single": "📊 Jeden tarif (VT)", + "dual": "📊 Dva tarify (VT + NT)", + } + ), + vol.Optional( + "distribution_fee_vt_kwh", + default=defaults.get("distribution_fee_vt_kwh", 1.42), + ): vol.All(vol.Coerce(float), vol.Range(min=0.0, max=10.0)), + } + + # Pokud dual tariff, přidat NT poplatek a hodiny + if tariff_count == "dual": + schema_fields.update( + { + vol.Optional( + "distribution_fee_nt_kwh", + default=defaults.get("distribution_fee_nt_kwh", 0.91), + ): vol.All(vol.Coerce(float), vol.Range(min=0.0, max=10.0)), + vol.Optional( + "tariff_vt_start_weekday", + default=weekday_vt_default, + ): str, + vol.Optional( + "tariff_nt_start_weekday", + default=weekday_nt_default, + ): str, + vol.Optional( + "tariff_weekend_same_as_weekday", + default=bool(weekend_same_default), + ): bool, + } + ) + if not weekend_same_default: + schema_fields.update( + { + vol.Optional( + "tariff_vt_start_weekend", + default=weekend_vt_default, + ): str, + vol.Optional( + "tariff_nt_start_weekend", + default=weekend_nt_default, + ): str, + } + ) + if defaults.get("import_pricing_scenario") == "fix_price": + default_fixed_price = defaults.get("fixed_price_kwh", 4.50) + schema_fields.update( + { + vol.Optional( + "fixed_price_vt_kwh", + default=defaults.get( + "fixed_price_vt_kwh", default_fixed_price + ), + ): vol.All(vol.Coerce(float), vol.Range(min=0.1, max=20.0)), + vol.Optional( + "fixed_price_nt_kwh", + default=defaults.get( + "fixed_price_nt_kwh", default_fixed_price + ), + ): vol.All(vol.Coerce(float), vol.Range(min=0.1, max=20.0)), + } + ) + + schema_fields.update( + { + vol.Optional( + "vat_rate", default=defaults.get("vat_rate", 21.0) + ): vol.All(vol.Coerce(float), vol.Range(min=0.0, max=30.0)), + vol.Optional("go_back", default=False): bool, + } + ) + + return vol.Schema(schema_fields) + + async def async_step_wizard_boiler( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step: Boiler module configuration.""" + from .const import (CONF_BOILER_ALT_COST_KWH, + CONF_BOILER_ALT_ENERGY_SENSOR, + CONF_BOILER_ALT_HEATER_SWITCH_ENTITY, + CONF_BOILER_COLD_INLET_TEMP_C, + CONF_BOILER_DEADLINE_TIME, + CONF_BOILER_HAS_ALTERNATIVE_HEATING, + CONF_BOILER_HEATER_POWER_KW_ENTITY, + CONF_BOILER_HEATER_SWITCH_ENTITY, + CONF_BOILER_PLAN_SLOT_MINUTES, + CONF_BOILER_PLANNING_HORIZON_HOURS, + CONF_BOILER_SPOT_PRICE_SENSOR, + CONF_BOILER_STRATIFICATION_MODE, + CONF_BOILER_TARGET_TEMP_C, + CONF_BOILER_TEMP_SENSOR_BOTTOM, + CONF_BOILER_TEMP_SENSOR_POSITION, + CONF_BOILER_TEMP_SENSOR_TOP, + CONF_BOILER_TWO_ZONE_SPLIT_RATIO, + CONF_BOILER_VOLUME_L, + DEFAULT_BOILER_COLD_INLET_TEMP_C, + DEFAULT_BOILER_DEADLINE_TIME, + DEFAULT_BOILER_HEATER_POWER_KW_ENTITY, + DEFAULT_BOILER_PLAN_SLOT_MINUTES, + DEFAULT_BOILER_PLANNING_HORIZON_HOURS, + DEFAULT_BOILER_STRATIFICATION_MODE, + DEFAULT_BOILER_TARGET_TEMP_C, + DEFAULT_BOILER_TEMP_SENSOR_POSITION, + DEFAULT_BOILER_TWO_ZONE_SPLIT_RATIO) + + if user_input is not None: + # Kontrola tlačítka "Zpět" + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_boiler") + + self._wizard_data.update(user_input) + self._step_history.append("wizard_boiler") + + next_step = self._get_next_step("wizard_boiler") + return await getattr(self, f"async_step_{next_step}")() + + # Defaults from wizard_data or constants + defaults = self._wizard_data if self._wizard_data else {} + + return self.async_show_form( + step_id="wizard_boiler", + data_schema=vol.Schema( + { + # Nádrž - number inputy místo sliderů + vol.Required( + CONF_BOILER_VOLUME_L, + default=defaults.get(CONF_BOILER_VOLUME_L, 120), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=10, + max=500, + step=1, + mode=selector.NumberSelectorMode.BOX, + ) + ), + vol.Optional( + CONF_BOILER_TARGET_TEMP_C, + default=defaults.get( + CONF_BOILER_TARGET_TEMP_C, DEFAULT_BOILER_TARGET_TEMP_C + ), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=30, max=90, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + vol.Optional( + CONF_BOILER_COLD_INLET_TEMP_C, + default=defaults.get( + CONF_BOILER_COLD_INLET_TEMP_C, + DEFAULT_BOILER_COLD_INLET_TEMP_C, + ), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=0, max=30, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + # Teplotní senzory - entity selector s filtrem pro temperature + vol.Optional( + CONF_BOILER_TEMP_SENSOR_TOP, + default=defaults.get(CONF_BOILER_TEMP_SENSOR_TOP, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig( + domain="sensor", device_class="temperature" + ) + ), + vol.Optional( + CONF_BOILER_TEMP_SENSOR_BOTTOM, + default=defaults.get(CONF_BOILER_TEMP_SENSOR_BOTTOM, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig( + domain="sensor", device_class="temperature" + ) + ), + # NEW: Pozice senzoru (jen když nemá dolní senzor) + vol.Optional( + CONF_BOILER_TEMP_SENSOR_POSITION, + default=defaults.get( + CONF_BOILER_TEMP_SENSOR_POSITION, + DEFAULT_BOILER_TEMP_SENSOR_POSITION, + ), + ): selector.SelectSelector( + selector.SelectSelectorConfig( + options=[ + {"value": "top", "label": "Přímo nahoře (100%)"}, + { + "value": "upper_quarter", + "label": "Horní čtvrtina (75%)", + }, + {"value": "middle", "label": "Polovina (50%)"}, + { + "value": "lower_quarter", + "label": "Dolní čtvrtina (25%)", + }, + ], + mode=selector.SelectSelectorMode.DROPDOWN, + ) + ), + vol.Optional( + CONF_BOILER_STRATIFICATION_MODE, + default=defaults.get( + CONF_BOILER_STRATIFICATION_MODE, + DEFAULT_BOILER_STRATIFICATION_MODE, + ), + ): selector.SelectSelector( + selector.SelectSelectorConfig( + options=["simple_avg", "two_zone"], + mode=selector.SelectSelectorMode.DROPDOWN, + ) + ), + vol.Optional( + CONF_BOILER_TWO_ZONE_SPLIT_RATIO, + default=defaults.get( + CONF_BOILER_TWO_ZONE_SPLIT_RATIO, + DEFAULT_BOILER_TWO_ZONE_SPLIT_RATIO, + ), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=0.1, + max=0.9, + step=0.1, + mode=selector.NumberSelectorMode.BOX, + ) + ), + # Výkon a řízení - entity selektory + vol.Optional( + CONF_BOILER_HEATER_POWER_KW_ENTITY, + default=defaults.get( + CONF_BOILER_HEATER_POWER_KW_ENTITY, + DEFAULT_BOILER_HEATER_POWER_KW_ENTITY, + ), + ): selector.EntitySelector( + selector.EntitySelectorConfig(domain="sensor") + ), + vol.Optional( + CONF_BOILER_HEATER_SWITCH_ENTITY, + default=defaults.get(CONF_BOILER_HEATER_SWITCH_ENTITY, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig(domain="switch") + ), + vol.Optional( + CONF_BOILER_ALT_HEATER_SWITCH_ENTITY, + default=defaults.get(CONF_BOILER_ALT_HEATER_SWITCH_ENTITY, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig(domain="switch") + ), + # Alternativa + vol.Optional( + CONF_BOILER_HAS_ALTERNATIVE_HEATING, + default=defaults.get( + CONF_BOILER_HAS_ALTERNATIVE_HEATING, False + ), + ): selector.BooleanSelector(), + vol.Optional( + CONF_BOILER_ALT_COST_KWH, + default=defaults.get(CONF_BOILER_ALT_COST_KWH, 0.0), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=0, + max=50, + step=0.1, + mode=selector.NumberSelectorMode.BOX, + ) + ), + # NEW: Senzor pro měření alternativní energie + vol.Optional( + CONF_BOILER_ALT_ENERGY_SENSOR, + default=defaults.get(CONF_BOILER_ALT_ENERGY_SENSOR, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig( + domain="sensor", device_class="energy" + ) + ), + # Cenový senzor - auto-discovery pro OIG spot price + vol.Optional( + CONF_BOILER_SPOT_PRICE_SENSOR, + default=defaults.get(CONF_BOILER_SPOT_PRICE_SENSOR, ""), + ): selector.EntitySelector( + selector.EntitySelectorConfig(domain="sensor") + ), + vol.Optional( + CONF_BOILER_DEADLINE_TIME, + default=defaults.get( + CONF_BOILER_DEADLINE_TIME, DEFAULT_BOILER_DEADLINE_TIME + ), + ): selector.TimeSelector(), + # Number inputy místo sliderů + vol.Optional( + CONF_BOILER_PLANNING_HORIZON_HOURS, + default=defaults.get( + CONF_BOILER_PLANNING_HORIZON_HOURS, + DEFAULT_BOILER_PLANNING_HORIZON_HOURS, + ), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=12, max=72, step=1, mode=selector.NumberSelectorMode.BOX + ) + ), + vol.Optional( + CONF_BOILER_PLAN_SLOT_MINUTES, + default=defaults.get( + CONF_BOILER_PLAN_SLOT_MINUTES, + DEFAULT_BOILER_PLAN_SLOT_MINUTES, + ), + ): selector.NumberSelector( + selector.NumberSelectorConfig( + min=15, + max=120, + step=15, + mode=selector.NumberSelectorMode.BOX, + ) + ), + vol.Optional("go_back", default=False): selector.BooleanSelector(), + } + ), + description_placeholders=self._get_step_placeholders("wizard_boiler"), + ) + + async def async_step_wizard_summary( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 9: Summary and confirmation.""" + # This will be overridden in ConfigFlow and OptionsFlow + raise NotImplementedError("Must be implemented in subclass") + + +class ConfigFlow(WizardMixin, config_entries.ConfigFlow, domain=DOMAIN): + """Handle a config flow for OIG Cloud.""" + + VERSION = 1 + + def __init__(self) -> None: + """Initialize the config flow.""" + super().__init__() + + @staticmethod + def _sanitize_data_source_mode(mode: Optional[str]) -> str: + """Map legacy values to supported ones.""" + if mode == "hybrid": + return "local_only" + return mode or "cloud_only" + + async def async_step_user( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Handle the initial step - choose setup type.""" + if user_input is not None: + setup_type = user_input.get("setup_type", "wizard") + + if setup_type == "wizard": + return await self.async_step_wizard_welcome() + elif setup_type == "quick": + return await self.async_step_quick_setup() + else: # import + return await self.async_step_import_yaml() + + return self.async_show_form( + step_id="user", + data_schema=vol.Schema( + { + vol.Required("setup_type", default="wizard"): vol.In( + { + "wizard": "wizard", + "quick": "quick", + "import": "import", + } + ) + } + ), + description_placeholders=self._get_step_placeholders("user"), + ) + + async def async_step_quick_setup( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Quick setup - just credentials and defaults.""" + if user_input is None: + return self.async_show_form( + step_id="quick_setup", + data_schema=vol.Schema( + { + vol.Required(CONF_USERNAME): str, + vol.Required(CONF_PASSWORD): str, + vol.Required("live_data_enabled", default=False): bool, + } + ), + ) + + errors = {} + + # Check if user confirmed live data is enabled + if not user_input.get("live_data_enabled", False): + errors["live_data_enabled"] = "live_data_not_confirmed" + return self.async_show_form( + step_id="quick_setup", + data_schema=vol.Schema( + { + vol.Required( + CONF_USERNAME, default=user_input.get(CONF_USERNAME, "") + ): str, + vol.Required(CONF_PASSWORD): str, + vol.Required("live_data_enabled", default=False): bool, + } + ), + errors=errors, + ) + + try: + info = await validate_input(self.hass, user_input) + + # Test OTE API + try: + from .api.ote_api import OteApi + + ote_api = OteApi() + test_data = await ote_api.get_spot_prices() + if not test_data: + _LOGGER.warning("OTE API test failed, but continuing") + except Exception as e: + _LOGGER.warning(f"OTE API test failed: {e}") + + except LiveDataNotEnabled: + errors["base"] = "live_data_not_enabled" + except CannotConnect: + errors["base"] = "cannot_connect" + except InvalidAuth: + errors["base"] = "invalid_auth" + except Exception: + _LOGGER.exception("Unexpected exception") + errors["base"] = "unknown" + else: + return self.async_create_entry( + title=info["title"], + data={ + CONF_USERNAME: user_input[CONF_USERNAME], + CONF_PASSWORD: user_input[CONF_PASSWORD], + }, + options={ + "standard_scan_interval": 30, + "extended_scan_interval": 300, + "enable_cloud_notifications": True, + "notifications_scan_interval": 300, + "data_source_mode": "cloud_only", + "local_proxy_stale_minutes": 10, + "local_event_debounce_ms": 300, + "enable_solar_forecast": False, + "enable_statistics": True, + "enable_extended_sensors": True, + "enable_pricing": False, + "enable_battery_prediction": False, + "enable_dashboard": False, + }, + ) + + return self.async_show_form( + step_id="quick_setup", + data_schema=vol.Schema( + { + vol.Required( + CONF_USERNAME, default=user_input.get(CONF_USERNAME, "") + ): str, + vol.Required(CONF_PASSWORD): str, + vol.Required("live_data_enabled", default=False): bool, + } + ), + errors=errors, + ) + + async def async_step_import_yaml( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Import from YAML configuration.""" + # NOTE: YAML import is not implemented yet. + return self.async_abort(reason="not_implemented") + + async def async_step_wizard_summary( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Wizard Step 9: Summary and confirmation - ConfigFlow implementation.""" + if user_input is not None: + # Zkontrolovat, jestli uživatel chce jít zpět + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_summary") + + # Vytvořit entry s nakonfigurovanými daty + return self.async_create_entry( + title=DEFAULT_NAME, + data={ + CONF_USERNAME: self._wizard_data[CONF_USERNAME], + CONF_PASSWORD: self._wizard_data[CONF_PASSWORD], + }, + options=self._build_options_payload(self._wizard_data), + ) + + # Vygenerovat detailní shrnutí konfigurace + summary_text = self._generate_summary() + + # Přidat tlačítko zpět pomocí boolean pole + return self.async_show_form( + step_id="wizard_summary", + data_schema=vol.Schema( + { + vol.Optional("go_back", default=False): bool, + } + ), + description_placeholders={ + "step": f"Krok {self._get_current_step_number('wizard_summary')} z {self._get_total_steps()} - Souhrn", + "progress": "▓" * self._get_current_step_number("wizard_summary") + + "░" + * ( + self._get_total_steps() + - self._get_current_step_number("wizard_summary") + ), + "summary": summary_text, + }, + ) + + @staticmethod + @callback + def async_get_options_flow( + config_entry: config_entries.ConfigEntry, + ) -> "OigCloudOptionsFlowHandler": + """Get options flow handler.""" + return OigCloudOptionsFlowHandler(config_entry) + + +class OigCloudOptionsFlowHandler(WizardMixin, config_entries.OptionsFlow): + """Handle options flow for OIG Cloud - uses wizard for better UX.""" + + @property + def config_entry(self) -> config_entries.ConfigEntry: + """Return config entry, even if hass isn't attached yet.""" + try: + # Try native property (works after HA attaches hass) + return super().config_entry # type: ignore[attr-defined] + except Exception: + return getattr(self, "_config_entry_cache", None) + + def __init__(self, config_entry: config_entries.ConfigEntry) -> None: + """Initialize options flow.""" + # IMPORTANT (HA 2025.12+): + # - `config_entries.OptionsFlow` does NOT implement `__init__`. + # - `config_entry` property is read-only and only available after HA sets `hass`. + # - In HA 2025.12, the config entry id is derived from `self.handler` (set by HA). + super().__init__() + self._config_entry_cache = config_entry + + # Předvyplnit wizard_data z existující konfigurace – robustně proti chybějícím/poškozeným datům + try: + backend_options = dict(config_entry.options) + except Exception: # pragma: no cover - defensivní logika + _LOGGER.exception( + "OptionsFlow init: failed to read existing options, using empty defaults" + ) + backend_options = {} + + frontend_pricing = {} + try: + frontend_pricing = self._map_backend_to_frontend(backend_options) + except Exception: # pragma: no cover - defensivní logika + _LOGGER.exception("OptionsFlow init: pricing mapping failed, keeping raw") + + self._wizard_data = backend_options | frontend_pricing + + # Přidat přihlašovací údaje z data (bez hesla) + self._wizard_data[CONF_USERNAME] = config_entry.data.get(CONF_USERNAME) + + _LOGGER.info( + "🔧 OptionsFlow: Initialized with %s existing options", + len(self._wizard_data), + ) + _LOGGER.debug( + "🔧 OptionsFlow: Existing options keys: %s", + list(self._wizard_data.keys()), + ) + _LOGGER.debug("🔧 OptionsFlow: Frontend pricing data: %s", frontend_pricing) + + async def async_step_init( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Entry point for options flow - redirect to wizard welcome.""" + return await self.async_step_wizard_welcome_reconfigure() + + async def async_step_wizard_welcome_reconfigure( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Welcome screen for reconfiguration - replaces wizard_welcome.""" + if user_input is not None: + # Přeskočit credentials a jít přímo na moduly + self._step_history.append("wizard_welcome_reconfigure") + return await self.async_step_wizard_modules() + + return self.async_show_form( + step_id="wizard_welcome_reconfigure", + data_schema=vol.Schema({}), + ) + + async def async_step_wizard_summary( + self, user_input: Optional[Dict[str, Any]] = None + ) -> FlowResult: + """Override summary step for options flow - update entry instead of creating new.""" + if user_input is not None: + # Zkontrolovat, jestli uživatel chce jít zpět + if user_input.get("go_back", False): + return await self._handle_back_button("wizard_summary") + + # Aktualizovat existující entry se všemi daty (stejně jako v ConfigFlow) + new_options = self._build_options_payload(self._wizard_data) + + # Přidat debug log + _LOGGER.warning( + f"🔧 OptionsFlow wizard_summary: Updating config entry with {len(new_options)} options" + ) + _LOGGER.debug( + f"🔧 OptionsFlow: New options keys: {list(new_options.keys())}" + ) + + try: + # Aktualizovat entry + _LOGGER.warning("🔍 About to call async_update_entry") + self.hass.config_entries.async_update_entry( + self.config_entry, options=new_options + ) + _LOGGER.warning("🔍 async_update_entry completed") + + # Automaticky reloadnout integraci pro aplikování změn + _LOGGER.warning("🔍 About to reload integration") + await self.hass.config_entries.async_reload(self.config_entry.entry_id) + _LOGGER.warning("🔍 Integration reload completed") + + # CRITICAL: V OptionsFlow NESMÍME volat async_create_entry, + # protože by to přepsalo options! Místo toho ukončit flow. + _LOGGER.warning( + "🔍 OptionsFlow wizard completed - showing success message" + ) + return self.async_abort(reason="reconfigure_successful") + except Exception as e: + _LOGGER.exception("❌ OptionsFlow wizard_summary FAILED: %s", e) + raise + + # Zobrazit summary se stejnou logikou jako v ConfigFlow + summary_lines = [ + "**Přihlášení:**", + f"- Uživatel: {self.config_entry.data.get(CONF_USERNAME, 'N/A')}", + "", + "**Zapnuté moduly:**", + ] + + if self._wizard_data.get("enable_statistics"): + summary_lines.append("✅ Statistiky a analýzy") + if self._wizard_data.get("enable_solar_forecast"): + summary_lines.append("✅ Solární předpověď") + if self._wizard_data.get("enable_battery_prediction"): + summary_lines.append("✅ Predikce baterie") + if self._wizard_data.get("enable_pricing"): + summary_lines.append("✅ Cenové senzory a spotové ceny") + if self._wizard_data.get("enable_extended_sensors"): + summary_lines.append("✅ Rozšířené senzory") + if self._wizard_data.get("enable_dashboard"): + summary_lines.append("✅ Webový dashboard") + + summary_lines.extend( + [ + "", + "**Intervaly načítání:**", + f"- Základní data: {self._wizard_data.get('standard_scan_interval', 30)}s", + f"- Rozšířená data: {self._wizard_data.get('extended_scan_interval', 300)}s", + "", + "✅ **Po uložení se integrace automaticky znovu načte.**", + "", + "Kliknutím na 'Odeslat' uložíte změny.", + ] + ) + + return self.async_show_form( + step_id="wizard_summary", + data_schema=vol.Schema({}), + description_placeholders={ + "step": "Rekonfigurace - Souhrn změn", + "progress": "▓▓▓▓▓", + "summary": "\n".join(summary_lines), + }, + ) diff --git a/custom_components/oig_cloud/config/validation.py b/custom_components/oig_cloud/config/validation.py new file mode 100644 index 00000000..676bfdd5 --- /dev/null +++ b/custom_components/oig_cloud/config/validation.py @@ -0,0 +1,104 @@ +"""Validation helpers for config flow.""" + +from __future__ import annotations + +import asyncio +import logging +from typing import Any, Dict + +import aiohttp + +from ..const import CONF_PASSWORD, CONF_USERNAME, DEFAULT_NAME +from ..lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi + +_LOGGER = logging.getLogger(__name__) + + +class CannotConnect(Exception): + """Error to indicate we cannot connect.""" + + +class InvalidAuth(Exception): + """Error to indicate invalid authentication.""" + + +class LiveDataNotEnabled(Exception): + """Error to indicate live data are not enabled in OIG Cloud app.""" + + +class InvalidSolarForecastApiKey(Exception): + """Error to indicate invalid Solar Forecast API key.""" + + +async def validate_input(hass: Any, data: Dict[str, Any]) -> Dict[str, Any]: + """Validate the user input allows us to connect.""" + _ = hass + api = OigCloudApi(data[CONF_USERNAME], data[CONF_PASSWORD], False) + + if not await api.authenticate(): + raise InvalidAuth + + try: + stats = await api.get_stats() + if not stats: + raise CannotConnect + + first_device = next(iter(stats.values())) if stats else None + if not first_device or "actual" not in first_device: + _LOGGER.error( + "Live data not found in API response. User must enable 'Živá data' in OIG Cloud mobile app." + ) + raise LiveDataNotEnabled + + except LiveDataNotEnabled: + raise + except Exception as err: + _LOGGER.error("Connection test failed: %s", err) + raise CannotConnect + + return {"title": DEFAULT_NAME} + + +async def validate_solar_forecast_api_key( + api_key: str, lat: float = 50.1219800, lon: float = 13.9373742 +) -> bool: + """Validate Solar Forecast API key by making a test request.""" + if not api_key or not api_key.strip(): + return True + + test_url = ( + f"https://api.forecast.solar/{api_key.strip()}/estimate/{lat}/{lon}/35/0/1" + ) + + _LOGGER.debug("🔑 Validating Solar Forecast API key: %s...", test_url[:50]) + + try: + async with aiohttp.ClientSession() as session: + async with session.get(test_url, timeout=10) as response: + if response.status == 200: + _LOGGER.info("🔑 Solar Forecast API key validation: SUCCESS") + return True + if response.status == 401: + _LOGGER.warning( + "🔑 Solar Forecast API key validation: UNAUTHORIZED (401)" + ) + return False + if response.status == 429: + _LOGGER.warning( + "🔑 Solar Forecast API key validation: RATE LIMITED (429) - but key seems valid" + ) + return True + + error_text = await response.text() + _LOGGER.error( + "🔑 Solar Forecast API validation failed with status %s: %s", + response.status, + error_text, + ) + return False + except aiohttp.ClientError as err: + _LOGGER.error("🔑 Solar Forecast API validation network error: %s", err) + return False + except asyncio.TimeoutError: + _LOGGER.error("🔑 Solar Forecast API validation timeout") + return False diff --git a/custom_components/oig_cloud/config_flow.py b/custom_components/oig_cloud/config_flow.py index 06c11030..0409f70b 100644 --- a/custom_components/oig_cloud/config_flow.py +++ b/custom_components/oig_cloud/config_flow.py @@ -1,113 +1,5 @@ -import voluptuous as vol -from typing import Any, Dict, Optional +"""Config flow entrypoint.""" -from homeassistant import config_entries -from homeassistant.core import HomeAssistant, callback -from homeassistant.data_entry_flow import FlowResult -from homeassistant.helpers import selector +from .config.steps import ConfigFlow, OigCloudOptionsFlowHandler -from .const import ( - CONF_LOG_LEVEL, - CONF_NO_TELEMETRY, - CONF_UPDATE_INTERVAL, - DEFAULT_NAME, - DEFAULT_UPDATE_INTERVAL, - DOMAIN, - CONF_USERNAME, - CONF_PASSWORD, -) -from .api.oig_cloud_api import OigCloudApi - - -class OigCloudConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): - """Handle a config flow for OIG Cloud.""" - - VERSION = 1 - - async def async_step_user( - self, user_input: Optional[Dict[str, Any]] = None - ) -> FlowResult: - """Handle the initial step.""" - if user_input is not None: - oig: OigCloudApi = OigCloudApi( - user_input[CONF_USERNAME], - user_input[CONF_PASSWORD], - user_input[CONF_NO_TELEMETRY], - self.hass, - ) - valid: bool = await oig.authenticate() - if valid: - state: Dict[str, Any] = await oig.get_stats() - box_id: str = list(state.keys())[0] - full_name: str = f"{DEFAULT_NAME}" - - return self.async_create_entry(title=full_name, data=user_input) - - return self.async_show_form( - step_id="user", - data_schema=vol.Schema( - { - vol.Required(CONF_USERNAME): str, - vol.Required(CONF_PASSWORD): str, - vol.Required(CONF_NO_TELEMETRY, default=False): bool, - } - ), - ) - - @staticmethod - @callback - def async_get_options_flow(config_entry): - """Get the options flow for this handler.""" - return OigCloudOptionsFlow(config_entry) - - -class OigCloudOptionsFlow(config_entries.OptionsFlow): - """Handle options for the OIG Cloud integration.""" - - def __init__(self, config_entry): - """Initialize options flow.""" - super().__init__() - self._config_entry = config_entry - - async def async_step_init(self, user_input=None): - """Manage the options.""" - if user_input is not None: - return self.async_create_entry(title="", data=user_input) - - options = { - vol.Required( - CONF_UPDATE_INTERVAL, - default=self._config_entry.options.get( - CONF_UPDATE_INTERVAL, DEFAULT_UPDATE_INTERVAL - ), - ): selector.NumberSelector( - selector.NumberSelectorConfig( - min=30, - max=180, - step=10, - mode=selector.NumberSelectorMode.SLIDER, - ) - ), - vol.Required( - CONF_NO_TELEMETRY, - default=self._config_entry.options.get( - CONF_NO_TELEMETRY, - self._config_entry.data.get(CONF_NO_TELEMETRY, False), - ), - ): selector.BooleanSelector(), - vol.Required( - CONF_LOG_LEVEL, - default=self._config_entry.options.get(CONF_LOG_LEVEL, "info"), - ): selector.SelectSelector( - selector.SelectSelectorConfig( - options=[ - {"value": "debug", "label": "Debug"}, - {"value": "info", "label": "Info"}, - {"value": "warning", "label": "Warning"}, - {"value": "error", "label": "Error"}, - ] - ) - ), - } - - return self.async_show_form(step_id="init", data_schema=vol.Schema(options)) +__all__ = ["ConfigFlow", "OigCloudOptionsFlowHandler"] diff --git a/custom_components/oig_cloud/const.py b/custom_components/oig_cloud/const.py index fafae074..ec8a142f 100644 --- a/custom_components/oig_cloud/const.py +++ b/custom_components/oig_cloud/const.py @@ -1,22 +1,118 @@ -from .release_const import COMPONENT_VERSION, SERVICE_NAME +"""Constants for the OIG Cloud integration.""" DOMAIN = "oig_cloud" +# Configuration constants +CONF_ENABLE_STATISTICS = "enable_statistics" +CONF_ENABLE_PRICING = "enable_pricing" # Sjednoceno: pricing + spotové ceny +CONF_ENABLE_CHMU_WARNINGS = "enable_chmu_warnings" # ČHMÚ meteorologická varování +CONF_SPOT_PRICES_UPDATE_INTERVAL = "spot_prices_update_interval" +OTE_SPOT_PRICE_CACHE_FILE = "oig_ote_spot_prices.json" +CONF_UPDATE_INTERVAL = "update_interval" CONF_USERNAME = "username" CONF_PASSWORD = "password" CONF_NO_TELEMETRY = "no_telemetry" -CONF_UPDATE_INTERVAL = "update_interval" +CONF_STANDARD_SCAN_INTERVAL = "standard_scan_interval" +CONF_EXTENDED_SCAN_INTERVAL = "extended_scan_interval" CONF_LOG_LEVEL = "log_level" +CONF_TIMEOUT = "timeout" + +# Boiler Module constants +CONF_ENABLE_BOILER = "enable_boiler" +CONF_BOILER_VOLUME_L = "boiler_volume_l" +CONF_BOILER_TARGET_TEMP_C = "boiler_target_temp_c" +CONF_BOILER_COLD_INLET_TEMP_C = "boiler_cold_inlet_temp_c" +CONF_BOILER_TEMP_SENSOR_TOP = "boiler_temp_sensor_top" +CONF_BOILER_TEMP_SENSOR_BOTTOM = "boiler_temp_sensor_bottom" +CONF_BOILER_TEMP_SENSOR_POSITION = ( + "boiler_temp_sensor_position" # NEW: Pozice při 1 teploměru +) +CONF_BOILER_STRATIFICATION_MODE = "boiler_stratification_mode" +CONF_BOILER_TWO_ZONE_SPLIT_RATIO = "boiler_two_zone_split_ratio" +CONF_BOILER_HEATER_POWER_KW_ENTITY = "boiler_heater_power_kw_entity" +CONF_BOILER_HEATER_SWITCH_ENTITY = "boiler_heater_switch_entity" +CONF_BOILER_ALT_HEATER_SWITCH_ENTITY = "boiler_alt_heater_switch_entity" +CONF_BOILER_HAS_ALTERNATIVE_HEATING = "boiler_has_alternative_heating" +CONF_BOILER_ALT_COST_KWH = "boiler_alt_cost_kwh" +CONF_BOILER_ALT_ENERGY_SENSOR = "boiler_alt_energy_sensor" # NEW: Měřič alternativy +CONF_BOILER_SPOT_PRICE_SENSOR = "boiler_spot_price_sensor" +CONF_BOILER_DEADLINE_TIME = "boiler_deadline_time" +CONF_BOILER_PLANNING_HORIZON_HOURS = "boiler_planning_horizon_hours" +CONF_BOILER_PLAN_SLOT_MINUTES = "boiler_plan_slot_minutes" + +# Auto Module constants +CONF_ENABLE_AUTO = "enable_auto" +CONF_AUTO_MODE_SWITCH = "auto_mode_switch_enabled" +# Backward-compatible option key used by older config flows/tests. +CONF_AUTO_MODE_PLAN = "auto_mode_plan" +# Battery Planning constants (BR-0.2) +CONF_THRESHOLD_CHEAP_CZK = "threshold_cheap_czk" # Threshold for "cheap" electricity + +# Default values +DEFAULT_UPDATE_INTERVAL = 20 DEFAULT_NAME = "ČEZ Battery Box" -DEFAULT_UPDATE_INTERVAL = 60 # Update interval in seconds +DEFAULT_STANDARD_SCAN_INTERVAL = 30 +DEFAULT_EXTENDED_SCAN_INTERVAL = 300 +DEFAULT_THRESHOLD_CHEAP_CZK = 1.5 # Default 1.5 CZK/kWh +# Boiler defaults +DEFAULT_BOILER_TARGET_TEMP_C = 60.0 +DEFAULT_BOILER_COLD_INLET_TEMP_C = 10.0 +DEFAULT_BOILER_TEMP_SENSOR_POSITION = ( + "top" # top | upper_quarter | middle | lower_quarter +) +DEFAULT_BOILER_STRATIFICATION_MODE = "two_zone" # Changed from simple_avg +DEFAULT_BOILER_TWO_ZONE_SPLIT_RATIO = 0.5 +DEFAULT_BOILER_HEATER_POWER_KW_ENTITY = "sensor.oig_2206237016_boiler_install_power" +DEFAULT_BOILER_DEADLINE_TIME = "20:00" +DEFAULT_BOILER_PLANNING_HORIZON_HOURS = 36 +DEFAULT_BOILER_PLAN_SLOT_MINUTES = 15 # Changed from 30 to 15min intervals -OT_ENDPOINT = "https://otlp.eu01.nr-data.net" -OT_INSECURE = False +# Energetic constant for water heating (kWh per liter per °C) +BOILER_ENERGY_CONSTANT_KWH_L_C = 0.001163 # ≈ 4.186 kJ/kg/°C / 3600 + +# Performance settings - VYPNUTÍ STATISTICKÝCH SENSORŮ +DISABLE_STATISTICS_SENSORS = True # Vypnout statistické senzory kvůli výkonu + +# Platforms +PLATFORMS = ["sensor"] + +# Device info +MANUFACTURER = "OIG" +MODEL = "Battery Box" + +# Error messages +ERROR_AUTH_FAILED = "Authentication failed" +ERROR_CANNOT_CONNECT = "Cannot connect" +ERROR_UNKNOWN = "Unknown error" + +# Service names +SERVICE_FORCE_UPDATE = "force_update" +SERVICE_RESET_STATISTICS = "reset_statistics" +SERVICE_PLAN_BOILER_HEATING = "plan_boiler_heating" +SERVICE_APPLY_BOILER_PLAN = "apply_boiler_plan" +SERVICE_CANCEL_BOILER_PLAN = "cancel_boiler_plan" + +# OpenTelemetry constants +OT_ENDPOINT = "https://log-api.eu.newrelic.com" OT_HEADERS = [ ( - "api-key", + "Api-Key", # OPRAVA: Správný header pro New Relic "eu01xxefc1a87820b35d1becb5efd5c5FFFFNRAL", ) ] +OT_INSECURE = False + +# CBB Modes (Battery Box Control Modes) per BR-1 +HOME_I = 0 # Grid priority (normal operation) +HOME_II = 1 # Battery savings (grid import, no battery discharge) +HOME_III = 2 # Solar priority (FVE to battery first) +HOME_UPS = 3 # UPS mode (grid charging enabled) + +CBB_MODE_NAMES = { + HOME_I: "HOME I", + HOME_II: "HOME II", + HOME_III: "HOME III", + HOME_UPS: "UPS", +} diff --git a/custom_components/oig_cloud/coordinator.py b/custom_components/oig_cloud/coordinator.py deleted file mode 100644 index 7803adbb..00000000 --- a/custom_components/oig_cloud/coordinator.py +++ /dev/null @@ -1,57 +0,0 @@ -"""OIG Cloud Data Update Coordinator.""" -import asyncio -import logging -from datetime import timedelta -from typing import Any, Awaitable, Callable, Dict, Optional - -from homeassistant.config_entries import ConfigEntry -from homeassistant.core import HomeAssistant -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed - -from .api.oig_cloud_api import OigCloudApi, OigCloudApiError -from .const import DEFAULT_UPDATE_INTERVAL, DOMAIN -from .shared.tracing import setup_tracer - -_LOGGER = logging.getLogger(__name__) -tracer = setup_tracer(__name__) - - -class OigCloudDataUpdateCoordinator(DataUpdateCoordinator): - """Class to manage fetching OIG Cloud data.""" - - def __init__( - self, - hass: HomeAssistant, - api: OigCloudApi, - config_entry: ConfigEntry, - update_interval: Optional[timedelta] = None, - ) -> None: - """Initialize the coordinator.""" - super().__init__( - hass, - _LOGGER, - name=DOMAIN, - update_interval=update_interval or timedelta(seconds=DEFAULT_UPDATE_INTERVAL), - config_entry=config_entry, - ) - self.api = api - - async def _async_update_data(self) -> Dict[str, Any]: - """Fetch data from API.""" - with tracer.start_as_current_span("_async_update_data"): - try: - _LOGGER.debug("Fetching OIG Cloud data") - data = await self.api.get_data() - if not data: - _LOGGER.warning("No data received from OIG Cloud API") - raise UpdateFailed("No data received from OIG Cloud API") - return data - except OigCloudApiError as err: - _LOGGER.error("Error fetching OIG Cloud data: %s", err) - raise UpdateFailed(f"Error fetching OIG Cloud data: {err}") - except asyncio.TimeoutError: - _LOGGER.error("Timeout error fetching OIG Cloud data") - raise UpdateFailed("Timeout error fetching OIG Cloud data") - except Exception as err: # pylint: disable=broad-except - _LOGGER.exception("Unexpected error fetching OIG Cloud data: %s", err) - raise UpdateFailed(f"Unexpected error fetching OIG Cloud data: {err}") \ No newline at end of file diff --git a/custom_components/oig_cloud/core/__init__.py b/custom_components/oig_cloud/core/__init__.py new file mode 100644 index 00000000..848fd2c4 --- /dev/null +++ b/custom_components/oig_cloud/core/__init__.py @@ -0,0 +1 @@ +"""Core coordination and data source helpers.""" diff --git a/custom_components/oig_cloud/core/coordinator.py b/custom_components/oig_cloud/core/coordinator.py new file mode 100644 index 00000000..d06f8e4d --- /dev/null +++ b/custom_components/oig_cloud/core/coordinator.py @@ -0,0 +1,1109 @@ +import asyncio +import logging +import random +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, List, Optional, Tuple +from zoneinfo import ZoneInfo # Nahradit pytz import + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.event import async_track_point_in_time +from homeassistant.helpers.storage import Store +from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed +from homeassistant.util import dt as dt_util + +from ..lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi +from .data_source import DATA_SOURCE_CLOUD_ONLY, get_data_source_state + +_LOGGER = logging.getLogger(__name__) + +# Jitter configuration: ±5 seconds around base interval +JITTER_SECONDS = 5.0 + +# HA storage snapshot (retain last-known values across restart) +COORDINATOR_CACHE_VERSION = 1 +COORDINATOR_CACHE_SAVE_COOLDOWN_S = 30.0 +COORDINATOR_CACHE_MAX_LIST_ITEMS = 1500 +COORDINATOR_CACHE_MAX_STR_LEN = 5000 + + +class OigCloudCoordinator(DataUpdateCoordinator): + @staticmethod + def _utcnow() -> datetime: + """Return utcnow compatible with HA test stubs.""" + utcnow = getattr(dt_util, "utcnow", None) + if callable(utcnow): + return utcnow() + return datetime.now(timezone.utc) + + def __init__( + self, + hass: HomeAssistant, + api: OigCloudApi, + standard_interval_seconds: int = 30, + extended_interval_seconds: int = 300, + config_entry: Optional[Any] = None, + ) -> None: + super().__init__( + hass, + _LOGGER, + name="OIG Cloud Coordinator", + update_interval=timedelta(seconds=standard_interval_seconds), + ) + + self.api = api + self.standard_interval = standard_interval_seconds + self.extended_interval = extended_interval_seconds + self.config_entry = config_entry # NOVÉ: Uložit config_entry + + self.extended_data: Dict[str, Any] = {} + self._last_extended_update: Optional[datetime] = None + + # NOVÉ: Přidání notification manager support + self.notification_manager: Optional[Any] = None + + # Battery forecast data + self.battery_forecast_data: Optional[Dict[str, Any]] = None + self._battery_forecast_task: Optional[asyncio.Task] = None + + # Spot price cache shared between scheduler/fallback and coordinator updates + self._spot_prices_cache: Optional[Dict[str, Any]] = None + + # NOVÉ: OTE API inicializace - OPRAVA logiky + pricing_enabled = self.config_entry and self.config_entry.options.get( + "enable_pricing", False + ) + + if pricing_enabled: + self._setup_pricing_ote(hass) + else: + _LOGGER.debug("Spot prices disabled - not initializing OTE API") + self.ote_api = None + + # NOVÉ: Sledování posledního stažení spotových cen + self._last_spot_fetch: Optional[datetime] = None + self._spot_retry_count: int = 0 + self._spot_retry_task: Optional[asyncio.Task] = None + self._max_spot_retries: int = 20 # 20 * 15min = 5 hodin retry + self._hourly_fallback_active: bool = False # NOVÉ: flag pro hodinový fallback + + # NOVÉ: ČHMÚ API inicializace + self._setup_chmu_warnings() + + # Last jitter value (for diagnostics/tests). + self._next_jitter: Optional[float] = None + + # Startup grace period to avoid loading-heavy work during HA bootstrap + self._startup_ts: datetime = self._utcnow() + self._startup_grace_seconds: int = ( + int(self.config_entry.options.get("startup_grace_seconds", 30)) + if self.config_entry and hasattr(self.config_entry, "options") + else 30 + ) + + # Retain last-known coordinator payload to avoid "unknown" after HA restart. + self._cache_store: Optional[Store] = None + self._last_cache_save_ts: Optional[datetime] = None + try: + if self.config_entry and getattr(self.config_entry, "entry_id", None): + self._cache_store = Store( + hass, + COORDINATOR_CACHE_VERSION, + f"oig_cloud.coordinator_cache_{self.config_entry.entry_id}", + ) + except Exception: + self._cache_store = None + + _LOGGER.info( + "Coordinator initialized with intervals: standard=%ss, extended=%ss, jitter=±%ss", + standard_interval_seconds, + extended_interval_seconds, + JITTER_SECONDS, + ) + + def _setup_chmu_warnings(self) -> None: + chmu_enabled = self.config_entry and self.config_entry.options.get( + "enable_chmu_warnings", False + ) + if not chmu_enabled: + _LOGGER.debug("ČHMÚ warnings disabled - not initializing ČHMÚ API") + self.chmu_api = None + self.chmu_warning_data = None + return + try: + _LOGGER.debug("ČHMÚ warnings enabled - initializing ČHMÚ API") + from ..api.api_chmu import ChmuApi + + self.chmu_api = ChmuApi() + self.chmu_warning_data = None + _LOGGER.debug("ČHMÚ API initialized successfully") + except Exception as e: + _LOGGER.error(f"Failed to initialize ČHMÚ API: {e}") + self.chmu_api = None + self.chmu_warning_data = None + + def _setup_pricing_ote(self, hass: HomeAssistant) -> None: + try: + _LOGGER.debug("Pricing enabled - initializing OTE API") + from ..api.ote_api import OteApi + + # OPRAVA: Předat cache_path pro načtení uložených spotových cen + cache_path = hass.config.path(".storage", "oig_ote_spot_prices.json") + self.ote_api = OteApi(cache_path=cache_path) + + # Load cached spot prices asynchronously (avoid blocking file I/O in event loop) + async def _async_load_ote_cache() -> None: + try: + await self.ote_api.async_load_cached_spot_prices() + if self.ote_api._last_data: + self._spot_prices_cache = self.ote_api._last_data + _LOGGER.info( + "Loaded %d hours of cached spot prices from disk", + self.ote_api._last_data.get("hours_count", 0), + ) + except Exception as err: + _LOGGER.debug("Failed to load OTE cache asynchronously: %s", err) + + self.hass.async_create_task(_async_load_ote_cache()) + + # Naplánovat aktualizaci na příští den ve 13:05 (OTE zveřejňuje kolem 13:00) + # OPRAVA: Použít zoneinfo místo pytz + now = datetime.now(ZoneInfo("Europe/Prague")) + next_update = now.replace(hour=13, minute=5, second=0, microsecond=0) + if next_update <= now: + next_update += timedelta(days=1) + + _LOGGER.debug("Next spot price update scheduled for: %s", next_update) + + # NOVÉ: Naplánovat fallback hodinové kontroly + self._schedule_hourly_fallback() + + # NOVĚ: Aktivovat i hlavní plánovač a provést první fetch asynchronně + self._schedule_spot_price_update() + self.hass.async_create_task(self._update_spot_prices()) + + except Exception as e: + _LOGGER.error(f"Failed to initialize OTE API: {e}") + self.ote_api = None + + async def async_config_entry_first_refresh(self) -> None: + """Load cached payload before the first refresh. + + This makes entities render immediately with last-known values (retain-like behavior), + while the coordinator is still doing the first network/local refresh. + """ + if self._cache_store is not None: + try: + cached = await self._cache_store.async_load() + cached_data = cached.get("data") if isinstance(cached, dict) else None + if isinstance(cached_data, dict) and cached_data: + self.data = cached_data + self.last_update_success = True + _LOGGER.debug( + "Loaded cached coordinator data (%d keys) before first refresh", + len(cached_data), + ) + except Exception as err: + _LOGGER.debug("Failed to load coordinator cache: %s", err) + + try: + await super().async_config_entry_first_refresh() + except Exception as err: + # Keep cached values if refresh fails during startup (e.g. cloud unreachable). + if self.data: + self.last_update_success = True + _LOGGER.warning( + "First refresh failed, continuing with cached coordinator data: %s", + err, + ) + return + raise + + def _prune_for_cache(self, value: Any, *, _depth: int = 0) -> Any: + """Reduce payload size before saving to HA storage.""" + if _depth > 6: + return None + + if value is None or isinstance(value, (bool, int, float)): + return value + + if isinstance(value, str): + return self._prune_string(value) + + if isinstance(value, datetime): + return self._prune_datetime(value) + + if isinstance(value, list): + return self._prune_sequence(value, _depth=_depth) + + if isinstance(value, tuple): + return self._prune_sequence(list(value), _depth=_depth) + + if isinstance(value, dict): + return self._prune_mapping(value, _depth=_depth) + + # Fallback: keep a readable representation + try: + return str(value) + except Exception: + return None + + @staticmethod + def _prune_string(value: str) -> str: + return ( + value + if len(value) <= COORDINATOR_CACHE_MAX_STR_LEN + else value[:COORDINATOR_CACHE_MAX_STR_LEN] + ) + + @staticmethod + def _prune_datetime(value: datetime) -> str: + try: + return value.isoformat() + except Exception: + return str(value) + + def _prune_sequence(self, value: List[Any], *, _depth: int) -> List[Any]: + trimmed = value[:COORDINATOR_CACHE_MAX_LIST_ITEMS] + return [self._prune_for_cache(v, _depth=_depth + 1) for v in trimmed] + + def _prune_mapping(self, value: Dict[Any, Any], *, _depth: int) -> Dict[str, Any]: + out: Dict[str, Any] = {} + for k, v in value.items(): + key = str(k) + if key in {"timeline_data", "timeline", "latest_timeline"}: + continue + out[key] = self._prune_for_cache(v, _depth=_depth + 1) + return out + + def _maybe_schedule_cache_save(self, data: Dict[str, Any]) -> None: + if self._cache_store is None: + return + now = self._utcnow() + if self._last_cache_save_ts is not None: + age = (now - self._last_cache_save_ts).total_seconds() + if age < COORDINATOR_CACHE_SAVE_COOLDOWN_S: + return + + self._last_cache_save_ts = now + + snapshot = { + "saved_at": now.isoformat(), + "data": self._prune_for_cache(data), + } + + async def _save() -> None: + try: + await self._cache_store.async_save(snapshot) + except Exception as err: + _LOGGER.debug("Failed to save coordinator cache: %s", err) + + try: + self.hass.async_create_task(_save()) + except Exception as err: + _LOGGER.debug("Failed to schedule coordinator cache save: %s", err) + + def update_intervals(self, standard_interval: int, extended_interval: int) -> None: + """Dynamicky aktualizuje intervaly coordinatoru.""" + # Uložíme původní hodnoty pro logování + old_standard = self.update_interval.total_seconds() + old_extended = self.extended_interval + + self.standard_interval = standard_interval + self.extended_interval = extended_interval + + # Aktualizujeme update_interval coordinatoru + self.update_interval = timedelta(seconds=standard_interval) + + _LOGGER.info( + f"Coordinator intervals updated: standard {old_standard}s→{standard_interval}s, " + f"extended {old_extended}s→{extended_interval}s" + ) + + # Vynutíme okamžitou aktualizaci s novým intervalem + self.hass.async_create_task(self.async_request_refresh()) + + def _schedule_spot_price_update(self) -> None: + """Naplánuje aktualizaci spotových cen.""" + now = dt_util.now() + today_13 = now.replace(hour=13, minute=5, second=0, microsecond=0) + + # Pokud je už po 13:05 dnes, naplánujeme na zítra + if now >= today_13: + next_update = today_13 + timedelta(days=1) + else: + next_update = today_13 + + _LOGGER.debug(f"Next spot price update scheduled for: {next_update}") + + # Naplánujeme callback + async def spot_price_callback(now: datetime) -> None: + await self._update_spot_prices() + + async_track_point_in_time(self.hass, spot_price_callback, next_update) + + def _schedule_hourly_fallback(self) -> None: + """Naplánuje hodinové fallback stahování OTE dat.""" + + # Spustit každou hodinu + self.hass.loop.call_later( + 3600, # 1 hodina + lambda: self.hass.async_create_task(self._hourly_fallback_check()), + ) + + async def _hourly_fallback_check(self) -> None: + """Hodinová kontrola a případné stahování OTE dat.""" + if not self.ote_api: + return + + now = dt_util.now() + + needs_data = self._needs_spot_data(now) + + if needs_data: + self._hourly_fallback_active = True + try: + _LOGGER.info( + "Hourly fallback: Attempting to fetch spot prices from OTE" + ) + + spot_data = await self._fetch_spot_prices_for_fallback(now) + self._apply_spot_fallback_result(spot_data) + + except Exception as e: + _LOGGER.warning(f"Hourly fallback: Failed to update spot prices: {e}") + finally: + self._hourly_fallback_active = False + + # Naplánuj další hodinovou kontrolu + self._schedule_hourly_fallback() + + def _needs_spot_data(self, now: datetime) -> bool: + if hasattr(self, "data") and self.data and "spot_prices" in self.data: + spot_data = self.data["spot_prices"] + return self._is_spot_data_missing(now, spot_data) + + _LOGGER.debug("No spot price data available, triggering fallback") + return True + + def _is_spot_data_missing(self, now: datetime, spot_data: Dict[str, Any]) -> bool: + if now.hour < 13: + today_key = f"{now.strftime('%Y-%m-%d')}T{now.hour:02d}:00:00" + if today_key not in spot_data.get("prices_czk_kwh", {}): + _LOGGER.debug( + "Missing today's data for hour %s, triggering fallback", now.hour + ) + return True + else: + tomorrow = now + timedelta(days=1) + tomorrow_key = f"{tomorrow.strftime('%Y-%m-%d')}T00:00:00" + if tomorrow_key not in spot_data.get("prices_czk_kwh", {}): + _LOGGER.debug( + "Missing tomorrow's data after 13:00, triggering fallback" + ) + return True + return False + + async def _fetch_spot_prices_for_fallback(self, now: datetime) -> Optional[Dict[str, Any]]: + if now.hour < 13: + _LOGGER.debug("Before 13:00 - fetching today's data only") + else: + _LOGGER.debug("After 13:00 - fetching today + tomorrow data") + return await self.ote_api.get_spot_prices() + + def _apply_spot_fallback_result(self, spot_data: Optional[Dict[str, Any]]) -> None: + if spot_data and spot_data.get("prices_czk_kwh"): + self._spot_prices_cache = spot_data + if hasattr(self, "data") and self.data: + self.data["spot_prices"] = spot_data + self.async_update_listeners() + + _LOGGER.info( + "Hourly fallback: Successfully updated spot prices: %s hours", + spot_data.get("hours_count", 0), + ) + self._last_spot_fetch = dt_util.now() + self._hourly_fallback_active = False + else: + _LOGGER.warning("Hourly fallback: No valid spot price data received") + + async def _update_spot_prices(self) -> None: + """Aktualizace spotových cen s lepším error handling.""" + if not self.ote_api: + return + + try: + _LOGGER.info( + "Attempting to update spot prices from OTE (scheduled 13:05 update)" + ) + spot_data = await self.ote_api.get_spot_prices() + + if spot_data and spot_data.get("prices_czk_kwh"): + _LOGGER.info( + f"Successfully updated spot prices: {spot_data.get('hours_count', 0)} hours" + ) + self._spot_prices_cache = spot_data + self._last_spot_fetch = dt_util.now() + self._spot_retry_count = 0 + self._hourly_fallback_active = ( + False # NOVÉ: vypnout fallback po úspěšném stažení + ) + + # Uložíme data do coordinator dat + if hasattr(self, "data") and self.data: + self.data["spot_prices"] = spot_data + self.async_update_listeners() + + # Naplánujeme další aktualizaci na zítra ve 13:05 + self._schedule_spot_price_update() + + else: + _LOGGER.warning("No valid spot price data received from OTE API") + self._handle_spot_retry() + + except Exception as e: + _LOGGER.warning(f"Failed to update spot prices: {e}") + self._handle_spot_retry() + + def _handle_spot_retry(self) -> None: + """Handle spot price retry logic - pouze pro scheduled updates.""" + self._spot_retry_count += 1 + + # Omezit retry pouze na důležité časy (kolem 13:05) + now = dt_util.now() + is_important_time = 12 <= now.hour <= 15 # Retry pouze 12-15h + + if self._spot_retry_count < 3 and is_important_time: # Snížit max retries + # Zkusíme znovu za 30 minut místo 15 + _LOGGER.info( + f"Retrying spot price update in 30 minutes (attempt {self._spot_retry_count + 1}/3)" + ) + + async def retry_callback() -> None: + await asyncio.sleep(30 * 60) # 30 minutes + await self._update_spot_prices() + + if self._spot_retry_task and not self._spot_retry_task.done(): + self._spot_retry_task.cancel() + self._spot_retry_task = asyncio.create_task(retry_callback()) + else: + if not is_important_time: + _LOGGER.info( + "OTE API error outside important hours (12-15h), skipping retries until tomorrow" + ) + else: + _LOGGER.error( + "Failed to update spot prices after 3 attempts, giving up until tomorrow" + ) + + self._spot_retry_count = 0 + if self._spot_retry_task and not self._spot_retry_task.done(): + self._spot_retry_task.cancel() + self._spot_retry_task = None + # Naplánujeme další pokus na zítra + self._schedule_spot_price_update() + + def _calculate_jitter(self) -> float: + """Return jitter in seconds and store it for diagnostics.""" + jitter = random.uniform(-JITTER_SECONDS, JITTER_SECONDS) + self._next_jitter = jitter + return jitter + + async def _async_update_data(self) -> Dict[str, Any]: # noqa: C901 + """Aktualizace základních dat.""" + _LOGGER.debug("🔄 _async_update_data called - starting update cycle") + + # Apply jitter - random delay at start of update + jitter = self._calculate_jitter() + + # Only sleep for positive jitter (negative means update sooner, handled by next cycle) + if jitter > 0: + _LOGGER.debug(f"⏱️ Applying jitter: +{jitter:.1f}s delay before update") + await asyncio.sleep(jitter) + else: + _LOGGER.debug(f"⏱️ Jitter: {jitter:.1f}s (no delay, update now)") + + try: + use_cloud = self._resolve_use_cloud() + stats = await self._get_stats_for_mode(use_cloud) + + cloud_notifications_enabled = bool( + self.config_entry + and self.config_entry.options.get("enable_cloud_notifications", True) + ) + self._configure_notification_manager(use_cloud, cloud_notifications_enabled) + + extended_enabled = self._resolve_extended_enabled() + if self._is_startup_grace_active(stats): + return self._build_startup_result(stats) + + await self._maybe_update_extended_data( + use_cloud=use_cloud, + extended_enabled=extended_enabled, + cloud_notifications_enabled=cloud_notifications_enabled, + ) + + self._maybe_update_battery_forecast() + await self._maybe_include_spot_prices(stats) + + # Sloučíme standardní a extended data + result = stats.copy() if stats else {} + result.update(self.extended_data) + + # Přidáme battery forecast data pokud jsou k dispozici + if self.battery_forecast_data: + result["battery_forecast"] = self.battery_forecast_data + _LOGGER.debug("🔋 Including battery forecast data in coordinator data") + + # Persist last-known payload for retain-like startup behavior. + if isinstance(result, dict) and result: + self._maybe_schedule_cache_save(result) + + return result + + except Exception as exception: + _LOGGER.error(f"Error updating data: {exception}") + raise UpdateFailed( + f"Error communicating with OIG API: {exception}" + ) from exception + + def _resolve_use_cloud(self) -> bool: + use_cloud = True + try: + if self.config_entry: + state = get_data_source_state(self.hass, self.config_entry.entry_id) + _LOGGER.debug( + "Data source state: configured=%s effective=%s local_ok=%s reason=%s", + state.configured_mode, + state.effective_mode, + state.local_available, + state.reason, + ) + use_cloud = state.effective_mode == DATA_SOURCE_CLOUD_ONLY + except Exception: + use_cloud = True + return use_cloud + + async def _get_stats_for_mode(self, use_cloud: bool) -> Dict[str, Any]: + if use_cloud: + return await self._try_get_stats() + + telemetry_store = getattr(self, "telemetry_store", None) + if telemetry_store is not None: + try: + snap = telemetry_store.get_snapshot() + stats = snap.payload + except Exception: + stats = self.data or {} + else: + stats = self.data or {} + + try: + if isinstance(stats, dict): + await self._maybe_fill_config_nodes_from_cloud(stats) + except Exception as err: + _LOGGER.debug("Failed to fill config nodes from cloud: %s", err) + + return stats + + def _configure_notification_manager( + self, use_cloud: bool, cloud_notifications_enabled: bool + ) -> None: + if use_cloud and cloud_notifications_enabled: + if ( + not hasattr(self, "notification_manager") + or self.notification_manager is None + ): + _LOGGER.debug("Initializing notification manager") + try: + from .oig_cloud_notification import OigNotificationManager + + self.notification_manager = OigNotificationManager( + self.hass, self.api, "https://www.oigpower.cz" + ) + _LOGGER.debug("Notification manager initialized with API session") + except Exception as e: + _LOGGER.error(f"Failed to initialize notification manager: {e}") + self.notification_manager = None + else: + self.notification_manager = None + + _LOGGER.debug( + "Notification manager status: %s", hasattr(self, "notification_manager") + ) + if hasattr(self, "notification_manager"): + _LOGGER.debug("Notification manager value: %s", self.notification_manager) + _LOGGER.debug( + "Notification manager is None: %s", self.notification_manager is None + ) + if self.notification_manager is not None: + _LOGGER.debug( + "Notification manager ready: device_id=%s", + getattr(self.notification_manager, "_device_id", None), + ) + else: + _LOGGER.debug("Coordinator does not have notification_manager attribute") + + def _resolve_extended_enabled(self) -> bool: + config_entry = self.config_entry + if config_entry: + extended_enabled = config_entry.options.get("enable_extended_sensors", False) + _LOGGER.debug("Config entry found: True") + try: + _LOGGER.debug( + "Config entry option keys: %s", + sorted(getattr(config_entry, "options", {}).keys()), + ) + except Exception: + _LOGGER.debug("Config entry option keys: ") + _LOGGER.debug("Extended sensors enabled from options: %s", extended_enabled) + return extended_enabled + + _LOGGER.warning("No config entry available for this coordinator") + return False + + def _is_startup_grace_active(self, stats: Dict[str, Any]) -> bool: + elapsed = (self._utcnow() - self._startup_ts).total_seconds() + if elapsed >= self._startup_grace_seconds: + return False + remaining = self._startup_grace_seconds - int(elapsed) + _LOGGER.debug( + "Startup grace active (%ss left) – skipping extended stats, spot fetch, and forecast", + remaining, + ) + return True + + def _build_startup_result(self, stats: Dict[str, Any]) -> Dict[str, Any]: + result = stats.copy() if stats else {} + if self._spot_prices_cache: + result["spot_prices"] = self._spot_prices_cache + _LOGGER.debug("Including cached spot prices during startup grace") + return result + + async def _maybe_update_extended_data( + self, + *, + use_cloud: bool, + extended_enabled: bool, + cloud_notifications_enabled: bool, + ) -> None: + should_update_extended = self._should_update_extended() + _LOGGER.debug("Should update extended: %s", should_update_extended) + _LOGGER.debug("Last extended update: %s", self._last_extended_update) + _LOGGER.debug("Extended interval: %ss", self.extended_interval) + + if use_cloud and extended_enabled and should_update_extended: + await self._refresh_extended_stats(cloud_notifications_enabled) + return + + if not extended_enabled: + _LOGGER.debug("Extended sensors disabled in configuration") + await self._maybe_refresh_notifications_standalone( + cloud_notifications_enabled + ) + + async def _refresh_extended_stats(self, cloud_notifications_enabled: bool) -> None: + _LOGGER.info("Fetching extended stats (FVE, LOAD, BATT, GRID)") + try: + today_from, today_to = self._today_range() + _LOGGER.debug("Date range for extended stats: %s to %s", today_from, today_to) + + extended_batt = await self.api.get_extended_stats( + "batt", today_from, today_to + ) + extended_fve = await self.api.get_extended_stats( + "fve", today_from, today_to + ) + extended_grid = await self.api.get_extended_stats( + "grid", today_from, today_to + ) + extended_load = await self.api.get_extended_stats( + "load", today_from, today_to + ) + + self.extended_data = { + "extended_batt": extended_batt, + "extended_fve": extended_fve, + "extended_grid": extended_grid, + "extended_load": extended_load, + } + self._last_extended_update = dt_util.now() + _LOGGER.debug("Extended stats updated successfully") + + await self._maybe_refresh_notifications_with_extended( + cloud_notifications_enabled + ) + + except Exception as e: + _LOGGER.warning(f"Failed to fetch extended stats: {e}") + self.extended_data = {} + + async def _maybe_refresh_notifications_with_extended( + self, cloud_notifications_enabled: bool + ) -> None: + if not cloud_notifications_enabled: + return + if not ( + hasattr(self, "notification_manager") + and self.notification_manager + and hasattr(self.notification_manager, "_device_id") + and self.notification_manager._device_id is not None + ): + _LOGGER.debug( + "Notification manager not ready for extended data refresh - device_id not set yet" + ) + return + try: + _LOGGER.debug("Refreshing notification data with extended stats") + await self.notification_manager.update_from_api() + _LOGGER.debug("Notification data updated successfully") + except Exception as e: + _LOGGER.debug(f"Notification data fetch failed: {e}") + + async def _maybe_refresh_notifications_standalone( + self, cloud_notifications_enabled: bool + ) -> None: + if not cloud_notifications_enabled: + return + if not ( + hasattr(self, "notification_manager") + and self.notification_manager + and hasattr(self.notification_manager, "_device_id") + and self.notification_manager._device_id is not None + ): + _LOGGER.debug( + "Notification manager not available for standalone refresh - device_id not set yet" + ) + return + + if not hasattr(self, "_last_notification_update"): + self._last_notification_update = None + + now = dt_util.now() + if self._last_notification_update is None: + should_refresh_notifications = True + else: + time_since_notification = ( + now - self._last_notification_update + ).total_seconds() + should_refresh_notifications = time_since_notification >= 300 + + if not should_refresh_notifications: + return + try: + _LOGGER.debug("Refreshing notification data (standalone)") + await self.notification_manager.update_from_api() + self._last_notification_update = now + _LOGGER.debug("Standalone notification data updated successfully") + except Exception as e: + _LOGGER.debug(f"Standalone notification data fetch failed: {e}") + + def _maybe_update_battery_forecast(self) -> None: + if not ( + self.config_entry + and self.config_entry.options.get("enable_battery_prediction", False) + ): + return + if not self._battery_forecast_task or self._battery_forecast_task.done(): + self._battery_forecast_task = self.hass.async_create_task( + self._update_battery_forecast() + ) + else: + _LOGGER.debug("Battery forecast task already running, skipping") + + async def _maybe_include_spot_prices(self, stats: Dict[str, Any]) -> None: + if self._spot_prices_cache: + stats["spot_prices"] = self._spot_prices_cache + _LOGGER.debug("Including cached spot prices in coordinator data") + return + if self.ote_api and not hasattr(self, "_initial_spot_attempted"): + self._initial_spot_attempted = True + try: + _LOGGER.debug("Attempting initial spot price fetch") + spot_data = await self.ote_api.get_spot_prices() + if spot_data and spot_data.get("hours_count", 0) > 0: + stats["spot_prices"] = spot_data + self._spot_prices_cache = spot_data + _LOGGER.info("Initial spot price data loaded successfully") + else: + _LOGGER.warning("Initial spot price fetch returned empty data") + except Exception as e: + _LOGGER.warning(f"Initial spot price fetch failed: {e}") + + async def _try_get_stats(self) -> Optional[Dict[str, Any]]: + """Wrapper na načítání standardních statistik s ošetřením chyb.""" + try: + return await self.api.get_stats() + except Exception as e: + _LOGGER.error(f"Error fetching standard stats: {e}", exc_info=True) + raise e + + async def _maybe_fill_config_nodes_from_cloud(self, stats: Dict[str, Any]) -> None: + """In local effective mode, backfill missing configuration nodes from cloud (throttled).""" + now = self._utcnow() + if _should_skip_cloud_fill(now, getattr(self, "_last_cloud_config_fill_ts", None)): + return + + box_id = _resolve_box_id(self.config_entry, stats) + if not box_id: + return + + box = _get_box_stats(stats, box_id) + if box is None: + return + + missing_nodes = _get_missing_config_nodes(box) + if not missing_nodes: + return + + cloud_box = await _fetch_cloud_box(self.api, box_id) + if cloud_box is None: + return + + if _backfill_missing_nodes(box, cloud_box, missing_nodes): + self._last_cloud_config_fill_ts = now + _LOGGER.info( + "Local mode: backfilled config nodes from cloud: %s", + ",".join(missing_nodes), + ) + + def _today_range(self) -> Tuple[str, str]: + """Vrátí dnešní datum jako string tuple pro API.""" + today = dt_util.now().date() + today_str = today.strftime("%Y-%m-%d") + return today_str, today_str + + def _should_update_extended(self) -> bool: + """Určí, zda je čas aktualizovat extended data.""" + if self._last_extended_update is None: + return True + # OPRAVA: Používat lokální čas místo UTC pro konzistenci + now = dt_util.now() + # Pokud _last_extended_update je v UTC, převést na lokální čas + if self._last_extended_update.tzinfo is not None: + # Převést UTC na lokální čas + last_update_local = self._last_extended_update.astimezone(now.tzinfo) + delta = now - last_update_local + else: + # Předpokládat že je už v lokálním čase + delta = now - self._last_extended_update + + time_diff = delta.total_seconds() + _LOGGER.debug( + f"Extended time check: now={now.strftime('%H:%M:%S')}, last_update={self._last_extended_update.strftime('%H:%M:%S')}, diff={time_diff:.1f}s, interval={self.extended_interval}s" + ) + + return time_diff > self.extended_interval + + async def _update_battery_forecast(self) -> None: + """Aktualizuje battery forecast data přímo v coordinatoru.""" + try: + _LOGGER.debug("🔋 Starting battery forecast calculation in coordinator") + + # KRITICKÁ KONTROLA: Coordinator MUSÍ mít data před vytvořením battery forecast sensoru + if not self.data or not isinstance(self.data, dict) or not self.data: + _LOGGER.debug( + "🔋 Coordinator has no data yet, skipping battery forecast calculation" + ) + return + + # Získat inverter_sn deterministicky (config entry → numerické klíče v self.data) + inverter_sn = self._resolve_forecast_box_id() + if not inverter_sn: + _LOGGER.debug( + "🔋 No numeric inverter_sn available, skipping forecast update" + ) + return + + _LOGGER.debug("🔍 Inverter SN resolved for forecast: %s", inverter_sn) + + temp_sensor = self._create_forecast_sensor(inverter_sn) + _LOGGER.debug( + f"🔍 Temp sensor created, _hass set: {temp_sensor._hass is not None}" + ) + + # Spustíme výpočet - nová metoda async_update() + await temp_sensor.async_update() + + forecast_payload = self._build_forecast_payload(temp_sensor) + if forecast_payload is None: + self.battery_forecast_data = None + _LOGGER.warning("🔋 Battery forecast returned no timeline data") + return + + self.battery_forecast_data = forecast_payload + _LOGGER.debug( + "🔋 Battery forecast data updated in coordinator: %s points", + len(temp_sensor._timeline_data or []), + ) + + except Exception as e: + _LOGGER.error( + f"🔋 Failed to update battery forecast in coordinator: {e}", + exc_info=True, + ) + self.battery_forecast_data = None + + def _resolve_forecast_box_id(self) -> Optional[str]: + inverter_sn: Optional[str] = None + try: + if self.config_entry: + opt_box = self.config_entry.options.get("box_id") + if isinstance(opt_box, str) and opt_box.isdigit(): + inverter_sn = opt_box + except Exception: + inverter_sn = None + + if inverter_sn is None and isinstance(self.data, dict) and self.data: + inverter_sn = next( + (str(k) for k in self.data.keys() if str(k).isdigit()), + None, + ) + + return inverter_sn + + def _build_forecast_device_info(self, inverter_sn: str) -> Dict[str, Any]: + from ..const import DOMAIN + + return { + "identifiers": {(DOMAIN, f"{inverter_sn}_analytics")}, + "name": "Analytics & Predictions", + "manufacturer": "ČEZ", + "model": "Battery Box Analytics Module", + "sw_version": "1.0.0", + } + + def _create_forecast_sensor(self, inverter_sn: str) -> Any: + from ..battery_forecast.sensors.ha_sensor import OigCloudBatteryForecastSensor + + device_info = self._build_forecast_device_info(inverter_sn) + _LOGGER.debug( + "🔍 Creating temp sensor with config_entry: %s", + self.config_entry is not None, + ) + return OigCloudBatteryForecastSensor( + self, + "battery_forecast", + self.config_entry, + device_info, + self.hass, + side_effects_enabled=False, + ) + + def _build_forecast_payload(self, sensor: Any) -> Optional[Dict[str, Any]]: + if not sensor._timeline_data: + return None + return { + "timeline_data": sensor._timeline_data, + "calculation_time": ( + sensor._last_update.isoformat() if sensor._last_update else None + ), + "data_source": "simplified_calculation", + "current_battery_kwh": ( + sensor._timeline_data[0].get("battery_capacity_kwh", 0) + if sensor._timeline_data + else 0 + ), + "mode_recommendations": sensor._mode_recommendations or [], + } + + def _create_simple_battery_forecast(self) -> Dict[str, Any]: + """Vytvoří jednoduchá forecast data když senzor není dostupný.""" + current_time = dt_util.now() + + # Základní data z koordinátoru + if self.data: + device_id = next( + (str(k) for k in self.data.keys() if str(k).isdigit()), None + ) + device_data = self.data.get(device_id, {}) if device_id else {} + battery_level = device_data.get("batt_bat_c", 0) + else: + battery_level = 0 + + return { + "calculation_time": current_time.isoformat(), + "current_battery_level": battery_level, + "forecast_available": False, + "simple_forecast": True, + } + + +def _should_skip_cloud_fill(now: datetime, last: Optional[datetime]) -> bool: + if isinstance(last, datetime) and (now - last).total_seconds() < 900: + return True + return False + + +def _resolve_box_id(entry: Optional[ConfigEntry], stats: Dict[str, Any]) -> Optional[str]: + box_id = _box_id_from_entry(entry) + if box_id: + return box_id + try: + return next((str(k) for k in stats.keys() if str(k).isdigit()), None) + except Exception: + return None + + +def _box_id_from_entry(entry: Optional[ConfigEntry]) -> Optional[str]: + if not entry: + return None + opt = getattr(entry, "options", {}) or {} + for key in ("box_id", "inverter_sn"): + try: + val = opt.get(key) + except Exception: + continue + if isinstance(val, str) and val.isdigit(): + return val + return None + + +def _get_box_stats(stats: Dict[str, Any], box_id: str) -> Optional[Dict[str, Any]]: + box = stats.get(box_id) + if isinstance(box, dict): + return box + return None + + +def _get_missing_config_nodes(box: Dict[str, Any]) -> List[str]: + config_nodes = ( + "box_prms", + "batt_prms", + "invertor_prm1", + "invertor_prms", + "boiler_prms", + ) + return [ + node_id + for node_id in config_nodes + if not isinstance(box.get(node_id), dict) or not box.get(node_id) + ] + + +async def _fetch_cloud_box(api: Any, box_id: str) -> Optional[Dict[str, Any]]: + try: + cloud = await api.get_stats() + except Exception as err: + _LOGGER.debug("Local mode: config backfill cloud fetch failed: %s", err) + return None + if not isinstance(cloud, dict): + return None + cloud_box = cloud.get(box_id) + if isinstance(cloud_box, dict): + return cloud_box + return None + + +def _backfill_missing_nodes( + box: Dict[str, Any], + cloud_box: Dict[str, Any], + missing_nodes: List[str], +) -> bool: + did = False + for node_id in missing_nodes: + node = cloud_box.get(node_id) + if isinstance(node, dict) and node: + box[node_id] = node + did = True + return did diff --git a/custom_components/oig_cloud/core/data_source.py b/custom_components/oig_cloud/core/data_source.py new file mode 100644 index 00000000..6a0dd8c4 --- /dev/null +++ b/custom_components/oig_cloud/core/data_source.py @@ -0,0 +1,695 @@ +from __future__ import annotations + +import asyncio +import logging +import re +from dataclasses import dataclass +from datetime import datetime, timedelta +from typing import Any, Optional + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.debounce import Debouncer +from homeassistant.util import dt as dt_util + +from ..const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + +DATA_SOURCE_CLOUD_ONLY = "cloud_only" +DATA_SOURCE_HYBRID = "hybrid" +DATA_SOURCE_LOCAL_ONLY = "local_only" + +DEFAULT_DATA_SOURCE_MODE = DATA_SOURCE_CLOUD_ONLY +DEFAULT_PROXY_STALE_MINUTES = 10 +DEFAULT_LOCAL_EVENT_DEBOUNCE_MS = 300 + +# Fired on hass.bus when effective data source changes for a config entry. +# Payload: {"entry_id": str, "configured_mode": str, "effective_mode": str, "local_available": bool, "reason": str} +EVENT_DATA_SOURCE_CHANGED = "oig_cloud_data_source_changed" + +PROXY_LAST_DATA_ENTITY_ID = "sensor.oig_local_oig_proxy_proxy_status_last_data" +PROXY_BOX_ID_ENTITY_ID = "sensor.oig_local_oig_proxy_proxy_status_box_device_id" + +try: + from homeassistant.helpers.event import ( + async_track_state_change_event as _async_track_state_change_event, + ) # type: ignore +except Exception: # pragma: no cover + _async_track_state_change_event = None + +try: + from homeassistant.helpers.event import ( + async_track_time_interval as _async_track_time_interval, + ) # type: ignore +except Exception: # pragma: no cover + _async_track_time_interval = None + + +@dataclass(slots=True) +class DataSourceState: + configured_mode: str + effective_mode: str + local_available: bool + last_local_data: Optional[datetime] + reason: str + + +def get_data_source_state(hass: HomeAssistant, entry_id: str) -> DataSourceState: + entry_data = hass.data.get(DOMAIN, {}).get(entry_id, {}) + state = entry_data.get("data_source_state") + if isinstance(state, DataSourceState): + return state + # Fallback for early startup + return DataSourceState( + configured_mode=DEFAULT_DATA_SOURCE_MODE, + effective_mode=DEFAULT_DATA_SOURCE_MODE, + local_available=False, + last_local_data=None, + reason="not_initialized", + ) + + +def get_effective_mode(hass: HomeAssistant, entry_id: str) -> str: + return get_data_source_state(hass, entry_id).effective_mode + + +def get_configured_mode(entry: ConfigEntry) -> str: + mode = entry.options.get("data_source_mode", DEFAULT_DATA_SOURCE_MODE) + if mode == DATA_SOURCE_HYBRID: + _LOGGER.debug( + "Data source mode 'hybrid' mapped to 'local_only' for compatibility" + ) + return DATA_SOURCE_LOCAL_ONLY + return mode + + +def get_proxy_stale_minutes(entry: ConfigEntry) -> int: + try: + return int( + entry.options.get("local_proxy_stale_minutes", DEFAULT_PROXY_STALE_MINUTES) + ) + except Exception: + return DEFAULT_PROXY_STALE_MINUTES + + +def get_local_event_debounce_ms(entry: ConfigEntry) -> int: + try: + return int( + entry.options.get( + "local_event_debounce_ms", DEFAULT_LOCAL_EVENT_DEBOUNCE_MS + ) + ) + except Exception: + return DEFAULT_LOCAL_EVENT_DEBOUNCE_MS + + +def _get_proxy_state(hass: HomeAssistant) -> tuple[Any, Optional[dt_util.dt.datetime]]: + proxy_state = hass.states.get(PROXY_LAST_DATA_ENTITY_ID) + proxy_last_dt = _parse_dt(proxy_state.state if proxy_state else None) + if proxy_state and proxy_last_dt is None: + _LOGGER.debug( + "Proxy health parse failed for value=%s, attributes=%s", + proxy_state.state, + proxy_state.attributes, + ) + return proxy_state, proxy_last_dt + + +def _get_proxy_entity_timestamp(proxy_state: Any) -> Optional[dt_util.dt.datetime]: + if proxy_state is None: + return None + try: + dt = proxy_state.last_updated or proxy_state.last_changed + if dt is None: + return None + return dt_util.as_utc(dt) if dt.tzinfo else dt.replace(tzinfo=dt_util.UTC) + except Exception: + return None + + +def _get_expected_box_id(entry: ConfigEntry) -> Optional[str]: + try: + return _coerce_box_id(entry.options.get("box_id")) + except Exception: + return None + + +def _get_proxy_box_id(hass: HomeAssistant) -> Optional[str]: + proxy_box_state = hass.states.get(PROXY_BOX_ID_ENTITY_ID) + return _coerce_box_id(proxy_box_state.state if proxy_box_state else None) + + +def _determine_local_entities_dt( + hass: HomeAssistant, + box_id_for_scan: Optional[str], + last_local_entity_update: Optional[dt_util.dt.datetime] = None, +) -> Optional[dt_util.dt.datetime]: + if last_local_entity_update is not None: + return last_local_entity_update + if not box_id_for_scan: + return None + return _get_latest_local_entity_update(hass, box_id_for_scan) + + +def _parse_dt(value: Any) -> Optional[dt_util.dt.datetime]: + if value in (None, "", "unknown", "unavailable"): + return None + if isinstance(value, (int, float)): + return _parse_timestamp(value) + if isinstance(value, dt_util.dt.datetime): + return _normalize_datetime(value) + if isinstance(value, str): + return _parse_datetime_str(value) + return None + + +def _parse_timestamp(value: float | int) -> Optional[dt_util.dt.datetime]: + try: + ts = float(value) + except (TypeError, ValueError): # pragma: no cover + return None # pragma: no cover + if ts > 1_000_000_000_000: # ms epoch + ts = ts / 1000.0 + try: + return dt_util.dt.datetime.fromtimestamp(ts, tz=dt_util.UTC) + except Exception: + return None + + +def _normalize_datetime(value: dt_util.dt.datetime) -> dt_util.dt.datetime: + return dt_util.as_utc(value) if value.tzinfo else value.replace(tzinfo=dt_util.UTC) + + +def _parse_datetime_str(value: str) -> Optional[dt_util.dt.datetime]: + value = value.strip() + if value.isdigit(): + try: + return _parse_timestamp(float(value)) + except Exception as err: # pragma: no cover + _LOGGER.debug( + "Failed to parse numeric timestamp '%s': %s", value, err + ) # pragma: no cover + return None # pragma: no cover + dt = dt_util.parse_datetime(value) + if dt is None: + try: + dt = dt_util.dt.datetime.fromisoformat(value) + except Exception: + return None + if dt.tzinfo is None: + # Proxy často posílá lokální čas bez timezone → interpretuj jako lokální TZ HA, ne UTC. + dt = dt.replace(tzinfo=dt_util.DEFAULT_TIME_ZONE) + return dt_util.as_utc(dt) + + +def _coerce_box_id(value: Any) -> Optional[str]: + if value in (None, "", "unknown", "unavailable"): + return None + if isinstance(value, int): + return _coerce_box_id_int(value) + if isinstance(value, float): + return _coerce_box_id_float(value) + if isinstance(value, str): + return _coerce_box_id_str(value) + return None + + +def _coerce_box_id_int(value: int) -> Optional[str]: + return str(value) if value > 0 else None + + +def _coerce_box_id_float(value: float) -> Optional[str]: + try: + as_int = int(value) + return str(as_int) if as_int > 0 else None + except Exception: + return None + + +def _coerce_box_id_str(value: str) -> Optional[str]: + s = value.strip() + if s.isdigit(): + return s + try: + m = re.search(r"(\d{6,})", s) + except Exception: + return None + return m.group(1) if m else None + + +def _get_latest_local_entity_update( + hass: HomeAssistant, box_id: str +) -> Optional[dt_util.dt.datetime]: + """Return the most recent update timestamp among local telemetry entities for a box.""" + if not (isinstance(box_id, str) and box_id.isdigit()): + return None + try: + latest: Optional[dt_util.dt.datetime] = None + for st in _iter_local_entities(hass, box_id): + dt_utc = _extract_state_timestamp(st) + if dt_utc is None: + continue + latest = dt_utc if latest is None else max(latest, dt_utc) + return latest + except Exception: + return None + + +def _iter_local_entities(hass: HomeAssistant, box_id: str): + for domain in ("sensor", "binary_sensor"): + prefix = f"{domain}.oig_local_{box_id}_" + for st in hass.states.async_all(domain): + if st.entity_id.startswith(prefix): + yield st + + +def _extract_state_timestamp(state: Any) -> Optional[dt_util.dt.datetime]: + if state.state in (None, "", "unknown", "unavailable"): + return None + dt = state.last_updated or state.last_changed + if dt is None: + return None + return dt_util.as_utc(dt) if dt.tzinfo else dt.replace(tzinfo=dt_util.UTC) + + +def _pick_latest_source( + proxy_last_dt: Optional[dt_util.dt.datetime], + proxy_entity_dt: Optional[dt_util.dt.datetime], + local_entities_dt: Optional[dt_util.dt.datetime], +) -> tuple[str, Optional[dt_util.dt.datetime]]: + candidates: list[tuple[str, dt_util.dt.datetime]] = [] + if proxy_last_dt: + candidates.append(("proxy_last_data", proxy_last_dt)) + if proxy_entity_dt: + candidates.append(("proxy_entity_updated", proxy_entity_dt)) + if local_entities_dt: + candidates.append(("local_entities", local_entities_dt)) + if not candidates: + return "none", None + source, last_dt = max(candidates, key=lambda item: item[1]) + return source, last_dt + + +def _evaluate_local_freshness( + *, + last_dt: Optional[dt_util.dt.datetime], + now: dt_util.dt.datetime, + stale_minutes: int, + source: str, +) -> tuple[bool, str]: + if not last_dt: + return False, "local_missing" + age = (now - last_dt).total_seconds() + if age <= stale_minutes * 60: + return True, f"local_ok_{source}" + return False, f"local_stale_{int(age)}s_{source}" + + +def _validate_expected_box_id( + *, + local_available: bool, + expected_box_id: Optional[str], + proxy_box_id: Optional[str], + local_entities_dt: Optional[dt_util.dt.datetime], +) -> tuple[bool, Optional[str]]: + if not local_available or not expected_box_id: + return local_available, None + # Extra safety: if proxy reports a box_id, it must match the configured one. + if proxy_box_id is None: + # Proxy box id sensor missing/unparseable; allow only if we can confirm local entities + # exist for the configured box id. + if local_entities_dt is None: + return False, "proxy_box_id_missing" + return True, None + if proxy_box_id != expected_box_id: + return False, "proxy_box_id_mismatch" + return True, None + + +def _effective_mode(configured: str, local_available: bool) -> str: + if configured == DATA_SOURCE_CLOUD_ONLY: + return DATA_SOURCE_CLOUD_ONLY + return configured if local_available else DATA_SOURCE_CLOUD_ONLY + + +def _evaluate_local_state( + *, + configured: str, + expected_box_id: Optional[str], + proxy_box_id: Optional[str], + proxy_last_dt: Optional[dt_util.dt.datetime], + proxy_entity_dt: Optional[dt_util.dt.datetime], + local_entities_dt: Optional[dt_util.dt.datetime], + now: dt_util.dt.datetime, + stale_minutes: int, +) -> tuple[bool, Optional[dt_util.dt.datetime], str, str]: + source, last_dt = _pick_latest_source( + proxy_last_dt, proxy_entity_dt, local_entities_dt + ) + local_available, reason = _evaluate_local_freshness( + last_dt=last_dt, + now=now, + stale_minutes=stale_minutes, + source=source, + ) + local_available, override_reason = _validate_expected_box_id( + local_available=local_available, + expected_box_id=expected_box_id, + proxy_box_id=proxy_box_id, + local_entities_dt=local_entities_dt, + ) + if override_reason: + reason = override_reason + effective = _effective_mode(configured, local_available) + return local_available, last_dt, reason, effective + + +def init_data_source_state(hass: HomeAssistant, entry: ConfigEntry) -> DataSourceState: + """Initialize (or refresh) data source state early during setup. + + This allows coordinators to respect local/hybrid mode before the controller is started. + """ + configured = get_configured_mode(entry) + stale_minutes = get_proxy_stale_minutes(entry) + expected_box_id = _get_expected_box_id(entry) + + proxy_state, proxy_last_dt = _get_proxy_state(hass) + proxy_entity_dt = _get_proxy_entity_timestamp(proxy_state) + proxy_box_id = _get_proxy_box_id(hass) + + box_id_for_scan = expected_box_id or proxy_box_id + local_entities_dt = _determine_local_entities_dt(hass, box_id_for_scan) + + now = dt_util.utcnow() + local_available, last_dt, reason, effective = _evaluate_local_state( + configured=configured, + expected_box_id=expected_box_id, + proxy_box_id=proxy_box_id, + proxy_last_dt=proxy_last_dt, + proxy_entity_dt=proxy_entity_dt, + local_entities_dt=local_entities_dt, + now=now, + stale_minutes=stale_minutes, + ) + + state = DataSourceState( + configured_mode=configured, + effective_mode=effective, + local_available=local_available, + last_local_data=last_dt, + reason=reason, + ) + hass.data.setdefault(DOMAIN, {}).setdefault(entry.entry_id, {})[ + "data_source_state" + ] = state + return state + + +class DataSourceController: + """Controls effective data source mode based on local proxy health.""" + + _LOCAL_ENTITY_RE = re.compile(r"^(?:sensor|binary_sensor)\.oig_local_(\d+)_") + + def __init__( + self, + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: Any, + telemetry_store: Optional[Any] = None, + ) -> None: + self.hass = hass + self.entry = entry + self.coordinator = coordinator + self.telemetry_store = telemetry_store + + self._unsubs: list[callable] = [] + self._last_local_entity_update: Optional[dt_util.dt.datetime] = None + self._pending_local_entities: set[str] = set() + self._debouncer = Debouncer( + hass, + _LOGGER, + cooldown=get_local_event_debounce_ms(entry) / 1000, + immediate=False, + function=self._handle_local_event, + ) + + async def async_start(self) -> None: + await asyncio.sleep(0) + self._update_state(force=True) + + # Seed coordinator payload from existing local states (only in configured local/hybrid mode). + try: + if ( + get_configured_mode(self.entry) != DATA_SOURCE_CLOUD_ONLY + and self.telemetry_store + ): + did_seed = self.telemetry_store.seed_from_existing_local_states() + if did_seed and getattr( + self.coordinator, "async_set_updated_data", None + ): + snap = self.telemetry_store.get_snapshot() + self.coordinator.async_set_updated_data(snap.payload) + except Exception as err: + _LOGGER.debug("Failed to seed local telemetry snapshot: %s", err) + + # Watch proxy last_data changes + if _async_track_state_change_event is not None: + self._unsubs.append( + _async_track_state_change_event( + self.hass, [PROXY_LAST_DATA_ENTITY_ID], self._on_proxy_change + ) + ) + else: + # Compatibility for older/stubbed HA helpers used in unit tests. + @callback + def _on_state_changed(event: Any) -> None: + if event.data.get("entity_id") == PROXY_LAST_DATA_ENTITY_ID: + self._on_proxy_change(event) + + self._unsubs.append( + self.hass.bus.async_listen("state_changed", _on_state_changed) + ) + + # Periodic HC: detect stale even without state changes + if _async_track_time_interval is not None: + self._unsubs.append( + _async_track_time_interval( + self.hass, self._on_periodic, timedelta(minutes=1) + ) + ) + + # Local telemetry events (5s updates) – just poke coordinator listeners + self._unsubs.append( + self.hass.bus.async_listen("state_changed", self._on_any_state_change) + ) + + _LOGGER.info( + "DataSourceController started: mode=%s stale=%smin", + get_configured_mode(self.entry), + get_proxy_stale_minutes(self.entry), + ) + + async def async_stop(self) -> None: + await asyncio.sleep(0) + for unsub in self._unsubs: + try: + unsub() + except Exception as err: + _LOGGER.debug("Failed to unsubscribe data source listener: %s", err) + self._unsubs.clear() + + @callback + def _on_proxy_change(self, _event: Any) -> None: + self._refresh_mode() + + @callback + def _on_periodic(self, _now: Any) -> None: + self._refresh_mode() + + @callback + def _refresh_mode(self) -> None: + _, mode_changed = self._update_state() + if mode_changed: + self._on_effective_mode_changed() + + @callback + def _on_any_state_change(self, event: Any) -> None: + # Ignore local events unless user configured local/hybrid mode. + if get_configured_mode(self.entry) == DATA_SOURCE_CLOUD_ONLY: + return + + # Ignore local events while effective mode is cloud fallback (no mixing). + try: + state = get_data_source_state(self.hass, self.entry.entry_id) + if state.effective_mode == DATA_SOURCE_CLOUD_ONLY: + return + except Exception as err: + _LOGGER.debug("Failed to read data source state: %s", err) + + entity_id = event.data.get("entity_id") + if not isinstance(entity_id, str): + return + if not ( + entity_id.startswith("sensor.oig_local_") + or entity_id.startswith("binary_sensor.oig_local_") + ): + return + + # Ensure the local update belongs to this entry's box_id (prevents cross-device wiring). + m = self._LOCAL_ENTITY_RE.match(entity_id) + if not m: + return + event_box_id = m.group(1) + + expected_box_id = _get_expected_box_id(self.entry) + + if expected_box_id and event_box_id != expected_box_id: + return + + # If box_id isn't configured yet, fall back to proxy-reported box_id (if available). + if expected_box_id is None: + proxy_box_id = _get_proxy_box_id(self.hass) + if proxy_box_id and event_box_id != proxy_box_id: + return + + # Remember the latest local telemetry activity timestamp. + try: + self._last_local_entity_update = dt_util.as_utc(event.time_fired) + except Exception: + self._last_local_entity_update = dt_util.utcnow() + + # Track changed entities and apply mapping to coordinator payload (debounced). + self._pending_local_entities.add(entity_id) + self._schedule_debounced_poke() + + @callback + def _schedule_debounced_poke(self) -> None: + try: + self.hass.async_create_task(self._debouncer.async_call()) + except Exception as err: + _LOGGER.debug("Failed to schedule local telemetry debounce: %s", err) + + async def _handle_local_event(self) -> None: + """Debounced handler for local telemetry changes. + + - Updates DataSourceState (may switch effective mode) + - Applies local mapping into coordinator.data (cloud-shaped payload) + """ + await asyncio.sleep(0) + try: + _, mode_changed = self._update_state() + if mode_changed: + self._on_effective_mode_changed() + # Only apply local mapping when effective mode is local. + state = get_data_source_state(self.hass, self.entry.entry_id) + if state.effective_mode != DATA_SOURCE_CLOUD_ONLY and self.telemetry_store: + pending = list(self._pending_local_entities) + self._pending_local_entities.clear() + if pending: + changed = self.telemetry_store.apply_local_events(pending) + if changed and getattr( + self.coordinator, "async_set_updated_data", None + ): + snap = self.telemetry_store.get_snapshot() + self.coordinator.async_set_updated_data(snap.payload) + except Exception as err: + _LOGGER.debug("Failed to handle local telemetry event: %s", err) + + @callback + def _update_state(self, force: bool = False) -> tuple[bool, bool]: + entry_id = self.entry.entry_id + configured = get_configured_mode(self.entry) + stale_minutes = get_proxy_stale_minutes(self.entry) + + proxy_state, proxy_last_dt = _get_proxy_state(self.hass) + if proxy_state is None: + _LOGGER.debug("Proxy health entity not found") + proxy_entity_dt = _get_proxy_entity_timestamp(proxy_state) + now = dt_util.utcnow() + + expected_box_id = _get_expected_box_id(self.entry) + proxy_box_id = _get_proxy_box_id(self.hass) + + box_id_for_scan = expected_box_id or proxy_box_id + local_entities_dt = _determine_local_entities_dt( + self.hass, box_id_for_scan, self._last_local_entity_update + ) + + local_available, last_dt, reason, effective = _evaluate_local_state( + configured=configured, + expected_box_id=expected_box_id, + proxy_box_id=proxy_box_id, + proxy_last_dt=proxy_last_dt, + proxy_entity_dt=proxy_entity_dt, + local_entities_dt=local_entities_dt, + now=now, + stale_minutes=stale_minutes, + ) + + prev = get_data_source_state(self.hass, entry_id) + changed = force or ( + prev.configured_mode != configured + or prev.effective_mode != effective + or prev.local_available != local_available + or prev.last_local_data != last_dt + ) + mode_changed = force or ( + prev.configured_mode != configured + or prev.effective_mode != effective + or prev.local_available != local_available + ) + + if changed: + new_state = DataSourceState( + configured_mode=configured, + effective_mode=effective, + local_available=local_available, + last_local_data=last_dt, + reason=reason, + ) + self.hass.data.setdefault(DOMAIN, {}).setdefault(entry_id, {})[ + "data_source_state" + ] = new_state + return changed, mode_changed + + @callback + def _on_effective_mode_changed(self) -> None: + state = get_data_source_state(self.hass, self.entry.entry_id) + _LOGGER.info( + "Data source mode switch: configured=%s effective=%s local_ok=%s (%s)", + state.configured_mode, + state.effective_mode, + state.local_available, + state.reason, + ) + + # Notify entities so UI can re-render immediately (per-entity listeners). + try: + self.hass.bus.async_fire( + EVENT_DATA_SOURCE_CHANGED, + { + "entry_id": self.entry.entry_id, + "configured_mode": state.configured_mode, + "effective_mode": state.effective_mode, + "local_available": state.local_available, + "reason": state.reason, + }, + ) + except Exception as err: + _LOGGER.debug("Failed to fire data source change event: %s", err) + + if state.effective_mode == DATA_SOURCE_CLOUD_ONLY: + # Ensure cloud data is fresh when falling back + try: + self.hass.async_create_task(self.coordinator.async_request_refresh()) + except Exception as err: + _LOGGER.debug("Failed to schedule coordinator refresh: %s", err) + + async def _poke_coordinator(self) -> None: + await asyncio.sleep(0) + try: + if self.coordinator and getattr(self.coordinator, "data", None) is not None: + self.coordinator.async_set_updated_data(self.coordinator.data) + except Exception as err: + _LOGGER.debug("Failed to poke coordinator: %s", err) diff --git a/custom_components/oig_cloud/core/local_mapper.py b/custom_components/oig_cloud/core/local_mapper.py new file mode 100644 index 00000000..a9ee843f --- /dev/null +++ b/custom_components/oig_cloud/core/local_mapper.py @@ -0,0 +1,366 @@ +from __future__ import annotations + +import logging +from dataclasses import dataclass +from datetime import datetime +from typing import Any, Dict, List, Optional, Tuple + +from homeassistant.util import dt as dt_util + +from ..sensor_types import SENSOR_TYPES + +_LOGGER = logging.getLogger(__name__) + + +def _as_utc(dt: Optional[datetime]) -> Optional[datetime]: + if dt is None: + return None + try: + return dt_util.as_utc(dt) if dt.tzinfo else dt.replace(tzinfo=dt_util.UTC) + except Exception: + return None + + +def _coerce_number(value: Any) -> Any: + if value in (None, "", "unknown", "unavailable"): + return None + if isinstance(value, (int, float)): + return value + if isinstance(value, str): + s = value.strip() + try: + return float(s) if "." in s else int(s) + except Exception: + return value + return value + + +def _normalize_box_mode(value: Any) -> Optional[int]: + """Normalize local box mode to the cloud numeric ID (0..5).""" + coerced = _coerce_number(value) + if coerced is None: + return None + if isinstance(coerced, (int, float)): + return _normalize_box_mode_number(coerced) + if isinstance(coerced, str): + return _normalize_box_mode_string(coerced) + return None + + +def _normalize_box_mode_number(value: float) -> Optional[int]: + try: + as_int = int(value) + except Exception: + return None + return as_int if 0 <= as_int <= 5 else None + + +def _normalize_box_mode_string(value: str) -> Optional[int]: + s = value.strip().lower() + if not s: + return None + if s in {"neznámý", "neznamy", "unknown"}: + return None + if s.startswith("home"): + if "ups" in s: + return 3 + for num, mode_id in ( + ("1", 0), + ("2", 1), + ("3", 2), + ("4", 3), + ("5", 4), + ("6", 5), + ): + if num in s: + return mode_id + return None + + +def _normalize_domains(value: Any) -> Tuple[str, ...]: + if isinstance(value, str): + raw = [value] + elif isinstance(value, (list, tuple, set)): + raw = list(value) + else: + raw = [] + + domains: List[str] = [] + for item in raw: + if not isinstance(item, str): + continue + domain = item.strip() + if domain in {"sensor", "binary_sensor"} and domain not in domains: + domains.append(domain) + + if not domains: + domains = ["sensor"] + return tuple(domains) + + +def _normalize_value_map(value: Any) -> Optional[Dict[str, Any]]: + if not isinstance(value, dict): + return None + out: Dict[str, Any] = {} + for key, mapped in value.items(): + if not isinstance(key, str): + continue + out[key.strip().lower()] = mapped + return out or None + + +def _apply_value_map(value: Any, value_map: Optional[Dict[str, Any]]) -> Any: + if isinstance(value, str) and value_map: + key = value.strip().lower() + if key in value_map: + return value_map[key] + return _coerce_number(value) + + +# Extended "values" layout used by OigCloudDataSensor._get_extended_value() +_EXTENDED_INDEX_BY_SENSOR_TYPE: Dict[str, Tuple[str, int]] = { + # battery -> extended_batt + "extended_battery_voltage": ("extended_batt", 0), + "extended_battery_current": ("extended_batt", 1), + "extended_battery_capacity": ("extended_batt", 2), + "extended_battery_temperature": ("extended_batt", 3), + # fve -> extended_fve + "extended_fve_voltage_1": ("extended_fve", 0), + "extended_fve_voltage_2": ("extended_fve", 1), + "extended_fve_power_1": ("extended_fve", 3), + "extended_fve_power_2": ("extended_fve", 4), + # grid -> extended_grid + "extended_grid_voltage": ("extended_grid", 0), + "extended_grid_power": ("extended_grid", 1), + "extended_grid_consumption": ("extended_grid", 2), + "extended_grid_delivery": ("extended_grid", 3), + # load -> extended_load + "extended_load_l1_power": ("extended_load", 0), + "extended_load_l2_power": ("extended_load", 1), + "extended_load_l3_power": ("extended_load", 2), +} + +_EXTENDED_GROUP_SIZES: Dict[str, int] = { + "extended_batt": 4, + "extended_fve": 5, + "extended_grid": 4, + "extended_load": 3, +} + + +@dataclass(frozen=True, slots=True) +class _NodeUpdate: + node_id: str + node_key: str + + +@dataclass(frozen=True, slots=True) +class _ExtendedUpdate: + group: str + index: int + + +LocalUpdate = _NodeUpdate | _ExtendedUpdate + + +@dataclass(frozen=True, slots=True) +class _SuffixConfig: + updates: Tuple[LocalUpdate, ...] + domains: Tuple[str, ...] + value_map: Optional[Dict[str, Any]] + + +def _build_suffix_updates() -> Dict[str, _SuffixConfig]: + raw: Dict[str, Dict[str, Any]] = {} + for sensor_type, cfg in SENSOR_TYPES.items(): + suffix = cfg.get("local_entity_suffix") + if not isinstance(suffix, str) or not suffix: + continue + entry = _get_suffix_entry(raw, suffix) + _merge_domains(entry, cfg.get("local_entity_domains")) + _merge_value_map(entry, cfg.get("local_value_map")) + _append_updates(entry, cfg, sensor_type) + + out: Dict[str, _SuffixConfig] = {} + for suffix, entry in raw.items(): + domains = tuple(entry["domains"]) if entry["domains"] else ("sensor",) + out[suffix] = _SuffixConfig( + updates=tuple(entry["updates"]), + domains=domains, + value_map=entry["value_map"], + ) + return out + + +def _get_suffix_entry(raw: Dict[str, Dict[str, Any]], suffix: str) -> Dict[str, Any]: + return raw.setdefault( + suffix, + { + "updates": [], + "domains": [], + "value_map": None, + }, + ) + + +def _merge_domains(entry: Dict[str, Any], raw_domains: Any) -> None: + domains = _normalize_domains(raw_domains) + for domain in domains: + if domain not in entry["domains"]: + entry["domains"].append(domain) + + +def _merge_value_map(entry: Dict[str, Any], raw_value_map: Any) -> None: + value_map = _normalize_value_map(raw_value_map) + if not value_map: + return + if entry["value_map"] is None: + entry["value_map"] = {} + entry["value_map"].update(value_map) + + +def _append_updates( + entry: Dict[str, Any], cfg: Dict[str, Any], sensor_type: str +) -> None: + updates: List[LocalUpdate] = entry["updates"] + node_id = cfg.get("node_id") + node_key = cfg.get("node_key") + if _is_valid_node_pair(node_id, node_key): + updates.append(_NodeUpdate(node_id=node_id, node_key=node_key)) + + ext = _EXTENDED_INDEX_BY_SENSOR_TYPE.get(sensor_type) + if ext is not None: + group, index = ext + updates.append(_ExtendedUpdate(group=group, index=index)) + + +def _is_valid_node_pair(node_id: Any, node_key: Any) -> bool: + return ( + isinstance(node_id, str) + and isinstance(node_key, str) + and node_id + and node_key + ) + + +_SUFFIX_UPDATES: Dict[str, _SuffixConfig] = _build_suffix_updates() + + +class LocalUpdateApplier: + """Apply local proxy state updates into the cloud-shaped coordinator payload.""" + + def __init__(self, box_id: str) -> None: + self.box_id = box_id + + def apply_state( + self, + payload: Dict[str, Any], + entity_id: str, + state: Any, + last_updated: Optional[datetime], + ) -> bool: + """Return True if payload changed.""" + parsed = _parse_local_entity_id(entity_id, self.box_id) + if parsed is None: + return False + domain, suffix = parsed + + suffix_cfg = _SUFFIX_UPDATES.get(suffix) + if not suffix_cfg or domain not in suffix_cfg.domains: + return False + + value = _apply_value_map(state, suffix_cfg.value_map) + if value is None: + return False + + changed = False + ts = _as_utc(last_updated) or dt_util.utcnow() + + box = _ensure_box_payload(payload, self.box_id) + + for upd in suffix_cfg.updates: + if isinstance(upd, _NodeUpdate): + if _apply_node_update(box, upd, value, state): + changed = True + elif isinstance(upd, _ExtendedUpdate): + if _apply_extended_update(payload, upd, value, ts): + changed = True + + return changed + + +def _parse_local_entity_id( + entity_id: Any, box_id: str +) -> Optional[Tuple[str, str]]: + if not isinstance(entity_id, str): + return None + for candidate_domain in ("sensor", "binary_sensor"): + prefix = f"{candidate_domain}.oig_local_{box_id}_" + if entity_id.startswith(prefix): + return candidate_domain, entity_id[len(prefix) :] + return None + + +def _ensure_box_payload(payload: Dict[str, Any], box_id: str) -> Dict[str, Any]: + box = payload.setdefault(box_id, {}) + if not isinstance(box, dict): + payload[box_id] = {} + box = payload[box_id] + return box + + +def _apply_node_update( + box: Dict[str, Any], + upd: _NodeUpdate, + value: Any, + raw_state: Any, +) -> bool: + node = box.setdefault(upd.node_id, {}) + if not isinstance(node, dict): + box[upd.node_id] = {} + node = box[upd.node_id] + new_value: Any = value + if upd.node_id == "box_prms" and upd.node_key == "mode": + normalized = _normalize_box_mode(raw_state) + if normalized is None: + return False + new_value = normalized + + if node.get(upd.node_key) != new_value: + node[upd.node_key] = new_value + return True + return False + + +def _apply_extended_update( + payload: Dict[str, Any], + upd: _ExtendedUpdate, + value: Any, + ts: datetime, +) -> bool: + group_size = _EXTENDED_GROUP_SIZES.get(upd.group, upd.index + 1) + ext_obj = payload.get(upd.group) + if not isinstance(ext_obj, dict): + ext_obj = {"items": []} + payload[upd.group] = ext_obj + items = ext_obj.get("items") + if not isinstance(items, list): + items = [] + ext_obj["items"] = items + if items: + last = items[-1] + else: + last = {} + items.append(last) + values = last.get("values") + if not isinstance(values, list): + values = [None] * group_size + last["values"] = values + if len(values) < group_size: + values.extend([None] * (group_size - len(values))) + prev = values[upd.index] if upd.index < len(values) else None + if prev != value: + values[upd.index] = value + last["ts"] = ts.isoformat() + return True + return False diff --git a/custom_components/oig_cloud/core/oig_cloud_notification.py b/custom_components/oig_cloud/core/oig_cloud_notification.py new file mode 100644 index 00000000..b132a209 --- /dev/null +++ b/custom_components/oig_cloud/core/oig_cloud_notification.py @@ -0,0 +1,1077 @@ +"""Notification management for OIG Cloud integration.""" + +from __future__ import annotations + +import json +import logging +import re +from dataclasses import dataclass +from datetime import datetime +from html.parser import HTMLParser +from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union + +import aiohttp +from homeassistant.core import HomeAssistant + +if TYPE_CHECKING: # pragma: no cover + from ..lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi + +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + + +@dataclass +class OigNotification: + """Representation of OIG Cloud notification.""" + + id: str + type: str # error, warning, info, debug + message: str + timestamp: datetime + device_id: Optional[str] = None + severity: int = 0 + read: bool = False + raw_data: Optional[Dict[str, Any]] = None + + +class _NotificationHtmlParser(HTMLParser): + """Lightweight HTML parser for OIG notification blocks.""" + + def __init__(self) -> None: + super().__init__() + self.items: List[Tuple[str, str, str, str, str]] = [] + self._current: Optional[Dict[str, str]] = None + self._folder_depth = 0 + self._capture: Optional[str] = None + self._row2_parts: List[str] = [] + self._body_parts: List[str] = [] + self._in_strong = False + + def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None: + if tag != "div": + self._handle_non_div_tag(tag) + return + + attrs_map = dict(attrs) + class_attr = attrs_map.get("class") or "" + classes = class_attr.split() + + if "folder" in classes: + self._start_new_folder() + return + + if not self._current: + return + + self._folder_depth += 1 + self._update_capture_target(classes) + + def _handle_non_div_tag(self, tag: str) -> None: + if tag == "strong" and self._capture == "row-2": + self._in_strong = True + elif tag == "br" and self._capture == "body": + self._body_parts.append("\n") + + def _start_new_folder(self) -> None: + self._finalize_current() + self._current = { + "severity_level": "", + "date_str": "", + "device_id": "", + "short_message": "", + "full_message": "", + } + self._folder_depth = 1 + + def _update_capture_target(self, classes: List[str]) -> None: + if "point" in classes: + for cls in classes: + if cls.startswith("level-"): + self._current["severity_level"] = cls.split("-", 1)[1] + break + return + if "date" in classes: + self._capture = "date" + return + if "row-2" in classes: + self._capture = "row-2" + self._row2_parts = [] + return + if "body" in classes: + self._capture = "body" + self._body_parts = [] + + def handle_endtag(self, tag: str) -> None: + if tag == "strong": + self._in_strong = False + return + + if tag != "div" or not self._current: + return + + if self._capture == "row-2": + row2_text = "".join(self._row2_parts).strip() + if row2_text: + if "-" in row2_text: + _, _, short_message = row2_text.partition("-") + self._current["short_message"] = short_message.strip() + else: + self._current["short_message"] = row2_text + self._capture = None + elif self._capture == "body": + self._current["full_message"] = "".join(self._body_parts).strip() + self._capture = None + elif self._capture == "date": + self._capture = None + + self._folder_depth -= 1 + if self._folder_depth <= 0: + self._finalize_current() + + def handle_data(self, data: str) -> None: + if not self._current or not self._capture or not data: + return + + if self._capture == "date": + self._current["date_str"] += data.strip() + return + + if self._capture == "row-2": + if self._in_strong: + self._current["device_id"] += data.strip() + else: + self._row2_parts.append(data) + return + + if self._capture == "body": + self._body_parts.append(data) + + def _finalize_current(self) -> None: + if not self._current: + return + + if any(self._current.values()): + self.items.append( + ( + self._current.get("severity_level", ""), + self._current.get("date_str", ""), + self._current.get("device_id", ""), + self._current.get("short_message", ""), + self._current.get("full_message", ""), + ) + ) + + self._current = None + self._folder_depth = 0 + self._capture = None + self._row2_parts = [] + self._body_parts = [] + self._in_strong = False + + +class OigNotificationParser: + """Parser for OIG Cloud notifications from JavaScript/JSON.""" + + def __init__(self) -> None: + """Initialize notification parser.""" + self._max_parse_chars = 200000 + + def parse_from_controller_call(self, content: str) -> List[OigNotification]: + """Parse notifications from Controller.Call.php content.""" + try: + _LOGGER.debug(f"Parsing notification content preview: {content[:500]}...") + + notifications = self._parse_notifications_from_content(content) + _LOGGER.debug( + "Parsed %d unique notifications from controller", + len(notifications), + ) + return notifications + + except Exception as e: + _LOGGER.error(f"Error parsing notifications: {e}") + return [] + + def _parse_notifications_from_content( + self, content: str + ) -> List[OigNotification]: + html_content = self._extract_html_from_json_response(content) + if html_content: + _LOGGER.debug( + "Extracted HTML from JSON wrapper, length: %s", len(html_content) + ) + _LOGGER.debug("HTML content preview: %s...", html_content[:300]) + content = html_content + + notifications = [] + html_notifications = self._parse_html_notifications(content) + notifications.extend(html_notifications) + + if not html_notifications: + notifications.extend(self._parse_json_notifications(content)) + + return self._dedupe_notifications(notifications) + + def _dedupe_notifications( + self, notifications: List[OigNotification] + ) -> List[OigNotification]: + unique_notifications = [] + seen_ids = set() + for notification in notifications: + if notification.id not in seen_ids: + unique_notifications.append(notification) + seen_ids.add(notification.id) + return unique_notifications + + def _extract_html_from_json_response(self, content: str) -> Optional[str]: + """Extract HTML content from JSON wrapper response.""" + try: + # Zkusit parsovat jako JSON array: [[11,"ctrl-notifs"," HTML ",null]] + import json + + data = json.loads(content) + if isinstance(data, list) and len(data) > 0: + first_item = data[0] + if isinstance(first_item, list) and len(first_item) >= 3: + # Třetí element by měl být HTML obsah + html_content = first_item[2] + if isinstance(html_content, str) and len(html_content) > 10: + # NOVÉ: Unescape HTML entity pro správné parsování + import html + + html_content = html.unescape(html_content) + _LOGGER.debug( + "Successfully extracted and unescaped HTML from JSON wrapper" + ) + return html_content + + return None + + except (json.JSONDecodeError, IndexError, TypeError) as e: + _LOGGER.debug(f"Content is not JSON wrapper format: {e}") + return None + except Exception as e: + _LOGGER.warning(f"Error extracting HTML from JSON: {e}") + return None + + def _parse_html_notifications(self, content: str) -> List[OigNotification]: + """Parse HTML structured notifications.""" + notifications = [] + + try: + if len(content) > self._max_parse_chars: + content = content[: self._max_parse_chars] + + parser = _NotificationHtmlParser() + parser.feed(content) + parser.close() + + _LOGGER.debug(f"Found {len(parser.items)} HTML notification matches") + + for match in parser.items: + severity_level, date_str, device_id, short_message, full_message = match + + try: + notification = self._create_notification_from_html( + severity_level, date_str, device_id, short_message, full_message + ) + if notification: + notifications.append(notification) + except Exception as e: + _LOGGER.warning(f"Error creating notification from HTML match: {e}") + continue + + except Exception as e: + _LOGGER.error(f"Error parsing HTML notifications: {e}") + + return notifications + + def _parse_json_notifications(self, content: str) -> List[OigNotification]: + """Parse JSON structured notifications (fallback).""" + notifications = [] + + try: + payloads = self._extract_show_notifications_payloads(content) + if not payloads: + payloads = [content] + + _LOGGER.debug(f"Found {len(payloads)} JS function matches") + + for payload in payloads: + json_matches = self._extract_json_objects(payload) + for json_str in json_matches: + notification = self._parse_single_notification(json_str) + if notification: + notifications.append(notification) + + except Exception as e: + _LOGGER.error(f"Error parsing JSON notifications: {e}") + + return notifications + + def _extract_show_notifications_payloads(self, content: str) -> List[str]: + """Extract payloads passed to showNotifications(...) without regex.""" + payloads: List[str] = [] + marker = "showNotifications" + search_index = 0 + + while True: + start = content.find(marker, search_index) + if start == -1: + break + + open_paren = content.find("(", start + len(marker)) + if open_paren == -1: + break + + close_paren = self._find_matching_paren(content, open_paren) + if close_paren == -1: + break + + payloads.append(content[open_paren + 1 : close_paren]) + search_index = close_paren + 1 + + return payloads + + def _find_matching_paren(self, text: str, open_index: int) -> int: + """Find matching closing parenthesis for the opening one.""" + depth = 0 + string_quote: Optional[str] = None + escape = False + + for idx in range(open_index, len(text)): + ch = text[idx] + string_quote, escape, should_continue = _update_string_state( + ch, string_quote, escape + ) + if should_continue: + continue + + if ch == "(": + depth += 1 + elif ch == ")": + depth -= 1 + if depth == 0: + return idx + + return -1 + + def _extract_json_objects(self, payload: str) -> List[str]: + """Extract JSON objects from a string payload without regex.""" + objects: List[str] = [] + depth = 0 + start: Optional[int] = None + string_quote: Optional[str] = None + escape = False + + for idx, ch in enumerate(payload): + string_quote, escape, should_continue = _update_string_state( + ch, string_quote, escape + ) + if should_continue: + continue + + if ch == "{": + depth, start = _open_brace(depth, start, idx) + elif ch == "}": + depth, start = _close_brace(depth, start, idx, payload, objects) + + return objects + + def _parse_single_notification(self, json_str: str) -> Optional[OigNotification]: + """Parse single notification from JSON string.""" + try: + # Clean and parse JSON + clean_json = self._clean_json_string(json_str) + data = json.loads(clean_json) + return self._create_notification_from_json(data) + except ValueError as e: + _LOGGER.debug(f"Failed to parse JSON notification: {e}") + return None + except Exception as e: + _LOGGER.warning(f"Error parsing single notification: {e}") + return None + + def parse_notification(self, notif_data: Dict[str, Any]) -> OigNotification: + """Parse notification from API response data.""" + try: + return self._create_notification_from_json(notif_data) + except Exception as e: + _LOGGER.warning(f"Error parsing notification from API data: {e}") + # Return fallback notification + return OigNotification( + id=f"fallback_{int(datetime.now().timestamp())}", + type="info", + message="Failed to parse notification", + timestamp=datetime.now(), + device_id=notif_data.get("device_id"), + severity=1, + read=False, + raw_data=notif_data, + ) + + def _determine_notification_type( + self, message: str, severity_level: str = "1" + ) -> str: + """Determine notification type from message content and CSS severity level.""" + message_lower = message.lower() + + try: + css_level = int(severity_level) + except (ValueError, TypeError): + css_level = 1 + + # Nejdřív kontrola podle CSS level + if css_level >= 3: + return "error" + elif css_level == 2: + return "warning" + + # Pak kontrola podle obsahu zprávy + error_keywords = ["chyba", "error", "failed", "neúspěšný", "problém"] + warning_keywords = ["varování", "warning", "pozor", "upozornění", "bypass"] + info_keywords = ["stav", "info", "baterii", "nabití", "dobrý den"] + + # Bypass notifikace považujeme za warning + if "bypass" in message_lower: + return "warning" + + for keyword in error_keywords: + if keyword in message_lower: + return "error" + + for keyword in warning_keywords: + if keyword in message_lower: + return "warning" + + for keyword in info_keywords: + if keyword in message_lower: + return "info" + + # Fallback podle CSS level + if css_level == 1: + return "info" + else: + return "warning" + + def _clean_json_string(self, json_str: str) -> str: + """Clean and fix common JSON formatting issues.""" + # Odstranit JavaScript komentáře + json_str = re.sub(r"//.*$", "", json_str, flags=re.MULTILINE) + + # Opravit apostrofy na uvozovky + json_str = re.sub(r"'([^']*)':", r'"\1":', json_str) + json_str = re.sub(r":\s*'([^']*)'", r': "\1"', json_str) + + # Odstranit trailing commas + json_str = re.sub(r",\s*}", "}", json_str) + json_str = re.sub(r",\s*]", "]", json_str) + + return json_str.strip() + + def _create_notification_from_json( + self, data: Dict[str, Any] + ) -> Optional[OigNotification]: + """Create notification object from JSON data.""" + try: + notification_type = data.get("type", "info") + message = data.get("message", data.get("text", "Unknown notification")) + + # Generovat ID z obsahu nebo použít timestamp + notification_id = data.get("id") + if not notification_id: + notification_id = f"{notification_type}_{hash(message)}_{int(datetime.now().timestamp())}" + + # Parsovat timestamp + timestamp = datetime.now() + if "timestamp" in data: + try: + timestamp = datetime.fromisoformat(str(data["timestamp"])) + except (ValueError, TypeError): + pass + elif "time" in data: + try: + timestamp = datetime.fromisoformat(str(data["time"])) + except (ValueError, TypeError): + pass + + # Určit závažnost + severity_map = {"error": 3, "warning": 2, "info": 1, "debug": 0} + severity = severity_map.get(notification_type.lower(), 1) + + return OigNotification( + id=str(notification_id), + type=notification_type.lower(), + message=str(message), + timestamp=timestamp, + device_id=data.get("device_id"), + severity=severity, + read=data.get("read", False), + raw_data=data, + ) + + except Exception as e: + _LOGGER.warning(f"Error creating notification from data {data}: {e}") + return None + + def _get_priority_name(self, priority: int) -> str: + """Get priority name from level number.""" + priority_names = {1: "info", 2: "warning", 3: "error", 4: "critical"} + return priority_names.get(priority, "info") + + def _get_notification_severity(self, css_level: str) -> Tuple[str, int]: + """Parse severity level from CSS class and return type and numeric severity.""" + # Rozšířené mapování všech možných úrovní + severity_map = { + "1": ("info", 1), # Informační zprávy (stav baterie, denní výroba) + "2": ("warning", 2), # Varování + "3": ("notice", 2), # Upozornění (zapnutí/vypnutí) - považujeme za warning + "4": ("error", 3), # Chyby nebo důležité akce + "5": ("critical", 4), # Kritické stavy (pokud existují) + } + + result = severity_map.get(css_level, ("info", 1)) + _LOGGER.debug( + f"Mapped CSS level-{css_level} to severity: {result[0]} (numeric: {result[1]})" + ) + return result + + def _create_notification_from_html( + self, + severity_level: str, + date_str: str, + device_id: str, + short_message: str, + full_message: str, + ) -> Optional[OigNotification]: + """Create notification object from HTML data.""" + try: + clean_message = self._clean_html_message(full_message) + extracted_device_id = self._extract_device_id(device_id) + + # Parsovat datum - formát "28. 6. 2025 | 13:05" + timestamp = self._parse_czech_datetime(date_str) + + notification_id = self._build_html_notification_id( + extracted_device_id, clean_message, date_str, timestamp + ) + + # Určit typ notifikace a severitu podle CSS level + notification_type, severity = self._get_notification_severity( + severity_level + ) + + # Pokud obsah zprávy obsahuje bypass, přednostně to označíme jako warning + if "bypass" in clean_message.lower(): + notification_type = "warning" + severity = 2 + + return OigNotification( + id=notification_id, + type=notification_type, + message=clean_message, + timestamp=timestamp, + device_id=extracted_device_id, + severity=severity, + read=False, + raw_data={ + "date_str": date_str, + "device_id": extracted_device_id, + "short_message": short_message, + "full_message": full_message, + "css_level": severity_level, + "source": "html", + }, + ) + + except Exception as e: + _LOGGER.warning(f"Error creating HTML notification: {e}") + return None + + def _clean_html_message(self, full_message: str) -> str: + import html + + clean_message = html.unescape(full_message) + clean_message = ( + clean_message.replace("
", "\n") + .replace("
", "\n") + .replace("
", "\n") + ) + return "\n".join( + part.strip() for part in clean_message.replace("\r", "").split("\n") + ).strip() + + def _extract_device_id(self, device_id: str) -> str: + extracted_device_id = device_id.strip() + marker = "Box #" + if marker in device_id: + extracted_device_id = ( + device_id.split(marker, 1)[1].strip().split()[0].strip() + ) + return extracted_device_id + + def _build_html_notification_id( + self, + device_id: str, + clean_message: str, + date_str: str, + timestamp: datetime, + ) -> str: + content_hash = hash(f"{device_id}_{clean_message}_{date_str}") + return f"html_{abs(content_hash)}_{int(timestamp.timestamp())}" + + def _parse_czech_datetime(self, date_str: str) -> datetime: + """Parse Czech datetime format '25. 6. 2025 | 8:13'.""" + try: + # Rozdělit datum a čas + date_part, time_part = date_str.split(" | ") + + # Parsovat datum "25. 6. 2025" + day, month, year = date_part.split(". ") + day = int(day) + month = int(month) + year = int(year) + + # Parsovat čas "8:13" + hour, minute = time_part.split(":") + hour = int(hour) + minute = int(minute) + + return datetime(year, month, day, hour, minute) + + except Exception as e: + _LOGGER.warning(f"Error parsing datetime '{date_str}': {e}") + return datetime.now() + + def detect_bypass_status(self, content: str) -> bool: + """Detect bypass status from content.""" + try: + normalized = " ".join(content.lower().split()) + compact = normalized.replace(" ", "") + matches = _collect_bypass_matches(normalized, compact) + if matches: + last_status = _latest_bypass_status(matches) + _LOGGER.info( + "Bypass status from LATEST message: %s (found %s total bypass messages)", + "ON" if last_status else "OFF", + len(matches), + ) + return last_status + + indicator_status = _indicator_status(compact) + if indicator_status is not None: + _LOGGER.debug( + "Bypass detected as %s from indicators", + "ON" if indicator_status else "OFF", + ) + return indicator_status + + _LOGGER.debug("No bypass indicators found, assuming OFF") + return False + + except Exception as e: + _LOGGER.error(f"Error detecting bypass status: {e}") + return False + + +def _collect_bypass_matches( + normalized: str, compact: str +) -> List[Tuple[int, bool]]: + matches: List[Tuple[int, bool]] = [] + matches.extend(_phrase_matches(normalized)) + matches.extend(_window_matches(normalized)) + matches.extend(_compact_matches(compact)) + return matches + + +def _phrase_matches(text: str) -> List[Tuple[int, bool]]: + on_phrases = [ + "automatický bypass - zapnut", + "automatic bypass - on", + ] + off_phrases = [ + "automatický bypass - vypnut", + "automatic bypass - off", + ] + matches: List[Tuple[int, bool]] = [] + for phrase in on_phrases: + matches.extend((pos, True) for pos in _find_positions(text, phrase)) + for phrase in off_phrases: + matches.extend((pos, False) for pos in _find_positions(text, phrase)) + return matches + + +def _window_matches(text: str) -> List[Tuple[int, bool]]: + on_tokens = ["zapnut", "enabled", "active", "on"] + off_tokens = ["vypnut", "disabled", "inactive", "off"] + matches: List[Tuple[int, bool]] = [] + search_index = 0 + while True: + pos = text.find("bypass", search_index) + if pos == -1: + break + window = text[pos : pos + 80] + if any(token in window for token in on_tokens): + matches.append((pos, True)) + elif any(token in window for token in off_tokens): + matches.append((pos, False)) + search_index = pos + len("bypass") + return matches + + +def _compact_matches(text: str) -> List[Tuple[int, bool]]: + matches: List[Tuple[int, bool]] = [] + if "bypasson" in text: + matches.append((text.find("bypasson"), True)) + if "bypassoff" in text: + matches.append((text.find("bypassoff"), False)) + return matches + + +def _latest_bypass_status(matches: List[Tuple[int, bool]]) -> bool: + return max(matches, key=lambda item: item[0])[1] + + +def _indicator_status(compact: str) -> Optional[bool]: + positive_indicators = [ + '"bypass":true', + '"bypass":1', + '"bypass":"on"', + '"bypass":"active"', + '"manual_mode":true', + '"manual_mode":"on"', + "bypassenabledtrue", + "bypass_activetrue", + "ismanualmodetrue", + ] + if any(indicator in compact for indicator in positive_indicators): + return True + + negative_indicators = [ + '"bypass":false', + '"bypass":0', + '"bypass":"off"', + '"bypass":"inactive"', + '"manual_mode":false', + "bypassenabledfalse", + "bypass_activefalse", + "ismanualmodefalse", + ] + if any(indicator in compact for indicator in negative_indicators): + return False + return None + + +def _find_positions(text: str, phrase: str) -> List[int]: + positions: List[int] = [] + start = text.find(phrase) + while start != -1: + positions.append(start) + start = text.find(phrase, start + 1) + return positions + + +def _update_string_state( + ch: str, string_quote: Optional[str], escape: bool +) -> tuple[Optional[str], bool, bool]: + if string_quote: + if escape: + return string_quote, False, True + if ch == "\\": + return string_quote, True, True + if ch == string_quote: + return None, False, True + return string_quote, False, True + if ch in ('"', "'"): + return ch, False, True + return string_quote, escape, False + + +def _open_brace( + depth: int, start: Optional[int], idx: int +) -> tuple[int, Optional[int]]: + if depth == 0: + start = idx + return depth + 1, start + + +def _close_brace( + depth: int, + start: Optional[int], + idx: int, + payload: str, + objects: List[str], +) -> tuple[int, Optional[int]]: + if not depth: + return depth, start + depth -= 1 + if depth == 0 and start is not None: + objects.append(payload[start : idx + 1]) + start = None + return depth, start + + +class OigNotificationManager: + """Manager for OIG Cloud notifications.""" + + def __init__( + self, + hass: HomeAssistant, + api: Union["OigCloudApi", aiohttp.ClientSession], + base_url: str, + ) -> None: + """Initialize notification manager.""" + self.hass = hass + self._api = api + self._base_url = base_url + self._parser = OigNotificationParser() + self._notifications: List[OigNotification] = [] + self._bypass_status: bool = False + self._storage_key = "oig_notifications" + self._max_notifications = 100 + self._device_id: Optional[str] = None + _LOGGER.debug( + f"NotificationManager initialized: base_url={base_url}, api_type={type(api)}" + ) + + def set_device_id(self, device_id: str) -> None: + """Set device ID for notification requests.""" + self._device_id = device_id + # Aktualizovat storage key s device_id + self._storage_key = f"oig_notifications_{device_id}" + _LOGGER.debug(f"Set device_id to {device_id} for notification manager") + + def get_device_id(self) -> Optional[str]: + """Get current device ID.""" + return self._device_id + + def _generate_nonce(self) -> str: + """Generate nonce for request.""" + import time + + return str(int(time.time() * 1000)) + + async def _save_notifications_to_storage( + self, notifications: List[OigNotification] + ) -> None: + """Save notifications to storage.""" + try: + store = Store(self.hass, 1, self._storage_key) + + # Převést notifikace na dict pro storage + notifications_data = [] + for notif in notifications[: self._max_notifications]: # Omezit počet + notifications_data.append( + { + "id": notif.id, + "type": notif.type, + "message": notif.message, + "timestamp": notif.timestamp.isoformat(), + "device_id": notif.device_id, + "severity": notif.severity, + "read": notif.read, + "raw_data": notif.raw_data, + } + ) + + await store.async_save( + { + "notifications": notifications_data, + "bypass_status": self._bypass_status, + "last_update": dt_util.now().isoformat(), + } + ) + + _LOGGER.debug(f"Saved {len(notifications_data)} notifications to storage") + + except Exception as e: + _LOGGER.error(f"Error saving notifications to storage: {e}") + + async def _load_notifications_from_storage(self) -> List[OigNotification]: + """Load notifications from storage.""" + try: + store = Store(self.hass, 1, self._storage_key) + data = await store.async_load() + + if not data or "notifications" not in data: + return [] + + notifications = [] + for notif_data in data["notifications"]: + try: + # Převést zpět na OigNotification objekt + timestamp = datetime.fromisoformat(notif_data["timestamp"]) + notification = OigNotification( + id=notif_data["id"], + type=notif_data["type"], + message=notif_data["message"], + timestamp=timestamp, + device_id=notif_data.get("device_id"), + severity=notif_data.get("severity", 1), + read=notif_data.get("read", False), + raw_data=notif_data.get("raw_data"), + ) + notifications.append(notification) + except Exception as e: + _LOGGER.warning(f"Error loading notification from storage: {e}") + continue + + # Obnovit bypass status pokud je k dispozici + if "bypass_status" in data: + self._bypass_status = data["bypass_status"] + + _LOGGER.debug(f"Loaded {len(notifications)} notifications from storage") + return notifications + + except Exception as e: + _LOGGER.warning(f"Error loading notifications from storage: {e}") + return [] + + async def refresh_data(self) -> bool: + """Alias for update_from_api to maintain compatibility with coordinator.""" + _LOGGER.debug("refresh_data called - redirecting to update_from_api") + return await self.update_from_api() + + async def update_from_api(self) -> bool: + """Update notifications directly from API - simplified method.""" + if not self._device_id: + _LOGGER.warning("Device ID not set for notification fetching, skipping") + return False + + try: + _LOGGER.debug(f"Updating notifications for device: {self._device_id}") + _LOGGER.debug(f"API object type: {type(self._api)}") + _LOGGER.debug( + f"API object methods: {[method for method in dir(self._api) if not method.startswith('_')]}" + ) + + # OPRAVA: Použít API metodu přímo + if hasattr(self._api, "get_notifications"): + return await self._update_from_notification_api() + + return await self._handle_missing_notification_api() + + except Exception as e: + _LOGGER.error(f"Error in update_from_api: {e}") + return await self._use_cached_notifications_on_error("exception") + + async def _update_from_notification_api(self) -> bool: + _LOGGER.debug("API object has get_notifications method, calling...") + result = await self._api.get_notifications(self._device_id) + + if result.get("status") == "success" and "content" in result: + content = result["content"] + _LOGGER.debug("Fetched notification content length: %s", len(content)) + + notifications = self._parser.parse_from_controller_call(content) + filtered_notifications = [ + notif + for notif in notifications + if notif.device_id == self._device_id or notif.device_id is None + ] + + bypass_status = self._parser.detect_bypass_status(content) + await self._update_notifications(filtered_notifications) + self._bypass_status = bypass_status + + _LOGGER.info( + "Successfully updated %d notifications, bypass: %s", + len(self._notifications), + bypass_status, + ) + return True + + if result.get("error"): + error = result["error"] + _LOGGER.warning("API returned error: %s", error) + return await self._use_cached_notifications_on_error(error) + + _LOGGER.warning("API returned unexpected response format") + return False + + async def _handle_missing_notification_api(self) -> bool: + available_methods = [ + method + for method in dir(self._api) + if callable(getattr(self._api, method)) and not method.startswith("_") + ] + _LOGGER.error( + "API object %s doesn't have get_notifications method", type(self._api) + ) + _LOGGER.error("Available callable methods: %s", available_methods) + + notification_methods = [ + method for method in available_methods if "notification" in method.lower() + ] + if notification_methods: + _LOGGER.info( + "Found notification-related methods: %s", notification_methods + ) + + return await self._use_cached_notifications_on_error("missing_api") + + async def _use_cached_notifications_on_error(self, error: str) -> bool: + try: + cached_notifications = await self._load_notifications_from_storage() + if cached_notifications: + _LOGGER.info( + "Using %d cached notifications due to API error: %s", + len(cached_notifications), + error, + ) + self._notifications = cached_notifications + return True + except Exception as cache_error: + _LOGGER.warning(f"Error loading cached notifications: {cache_error}") + return False + + async def get_notifications_and_status(self) -> Tuple[List[OigNotification], bool]: + """Get current notifications and bypass status.""" + await self.update_from_api() + return self._notifications, self._bypass_status + + async def _update_notifications(self, notifications: List[OigNotification]) -> None: + """Update internal notification list and handle storage.""" + try: + # Uložit notifikace do storage + await self._save_notifications_to_storage(notifications) + + # Aktualizovat interní seznam notifikací + self._notifications = notifications + + _LOGGER.info( + f"Updated notifications: {len(notifications)} loaded, {self._bypass_status=}" + ) + + except Exception as e: + _LOGGER.error(f"Error updating notifications: {e}") + + def get_latest_notification_message(self) -> str: + """Get latest notification message.""" + if not self._notifications: + return "No notifications" + return self._notifications[0].message + + def get_bypass_status(self) -> str: + """Get bypass status.""" + return "on" if self._bypass_status else "off" + + def get_notification_count(self, notification_type: str) -> int: + """Get count of notifications by type.""" + if notification_type == "error": + return len([n for n in self._notifications if n.type == "error"]) + elif notification_type == "warning": + return len([n for n in self._notifications if n.type == "warning"]) + return 0 + + def get_unread_count(self) -> int: + """Get count of unread notifications.""" + return len([n for n in self._notifications if not n.read]) + + def get_latest_notification(self) -> Optional[OigNotification]: + """Get latest notification object.""" + if not self._notifications: + return None + return self._notifications[0] diff --git a/custom_components/oig_cloud/core/telemetry_store.py b/custom_components/oig_cloud/core/telemetry_store.py new file mode 100644 index 00000000..29fadff5 --- /dev/null +++ b/custom_components/oig_cloud/core/telemetry_store.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +import logging +from dataclasses import dataclass +from datetime import datetime, timezone +from typing import Any, Dict, Iterable, Optional + +from homeassistant.core import HomeAssistant +from homeassistant.util import dt as dt_util + +from .local_mapper import LocalUpdateApplier + +_LOGGER = logging.getLogger(__name__) + + +def _utcnow() -> datetime: + utcnow = getattr(dt_util, "utcnow", None) + if callable(utcnow): + return utcnow() + return datetime.now(timezone.utc) + + +@dataclass(slots=True) +class TelemetrySnapshot: + """Cloud-shaped payload for coordinator.data.""" + + payload: Dict[str, Any] + updated_at: datetime + + +class TelemetryStore: + """Maintain a normalized (cloud-shaped) telemetry payload. + + - In cloud mode: coordinator writes full payload from the cloud API. + - In local mode: DataSourceController applies local entity updates into the same + cloud-shaped structure so *all* entities (including computed) can stay transparent. + """ + + def __init__(self, hass: HomeAssistant, *, box_id: str) -> None: + self.hass = hass + self.box_id = box_id + self._applier = LocalUpdateApplier(box_id) + self._payload: Dict[str, Any] = {box_id: {}} + self._updated_at: Optional[datetime] = None + + def set_cloud_payload(self, payload: Dict[str, Any]) -> None: + """Replace store content with a cloud payload (already normalized).""" + if not isinstance(payload, dict): + return + # Keep only dict payloads and ensure box_id key exists. + if self.box_id not in payload: + payload = {**payload, self.box_id: payload.get(self.box_id, {})} + self._payload = payload + self._updated_at = _utcnow() + + def apply_local_events(self, entity_ids: Iterable[str]) -> bool: + """Apply current HA states for given local entity_ids into the normalized payload. + + Returns True if anything changed. + """ + changed = False + for entity_id in entity_ids: + st = self.hass.states.get(entity_id) + if st is None: + continue + try: + did = self._applier.apply_state( + self._payload, entity_id, st.state, st.last_updated + ) + except Exception as err: + _LOGGER.debug("Local apply failed for %s: %s", entity_id, err) + did = False + changed = changed or did + if changed: + self._updated_at = _utcnow() + return changed + + def seed_from_existing_local_states(self) -> bool: + """Seed payload from all currently-known local entity states for this box.""" + entity_ids = [] + for domain in ("sensor", "binary_sensor"): + prefix = f"{domain}.oig_local_{self.box_id}_" + for st in self.hass.states.async_all(domain): + if st.entity_id.startswith(prefix): + entity_ids.append(st.entity_id) + return self.apply_local_events(entity_ids) + + def get_snapshot(self) -> TelemetrySnapshot: + """Return a (mutable) snapshot suitable for coordinator.data.""" + if self._updated_at is None: + self._updated_at = _utcnow() + return TelemetrySnapshot(payload=self._payload, updated_at=self._updated_at) diff --git a/custom_components/oig_cloud/entities/__init__.py b/custom_components/oig_cloud/entities/__init__.py new file mode 100644 index 00000000..3a308097 --- /dev/null +++ b/custom_components/oig_cloud/entities/__init__.py @@ -0,0 +1 @@ +"""Sensor entity implementations for OIG Cloud.""" diff --git a/custom_components/oig_cloud/entities/adaptive_load_profiles_sensor.py b/custom_components/oig_cloud/entities/adaptive_load_profiles_sensor.py new file mode 100644 index 00000000..83f3e975 --- /dev/null +++ b/custom_components/oig_cloud/entities/adaptive_load_profiles_sensor.py @@ -0,0 +1,1344 @@ +"""Sensor pro automatickou tvorbu adaptivních profilů spotřeby z historických dat.""" + +import asyncio +import logging +from collections import defaultdict +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional, Tuple + +import numpy as np +from homeassistant.components.sensor import SensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import EntityCategory +from homeassistant.core import HomeAssistant +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + +# 72h Consumption Profiling Constants +PROFILE_HOURS = 72 # Délka profilu v hodinách (3 dny) +# Plovoucí okno: matching + predikce = vždy 72h celkem +# Před půlnocí: matching až do předchozí půlnoci (max 48h), predikce až do další půlnoci (min 24h) +# Po půlnoci: matching jen 24h zpět, predikce 48h dopředu + +# Similarity scoring weights +WEIGHT_CORRELATION = 0.50 # Correlation coefficient weight +WEIGHT_RMSE = 0.30 # RMSE weight (inverted) +WEIGHT_TOTAL = 0.20 # Total consumption difference weight (inverted) + +# Profiling tuning +MAX_REASONABLE_KWH_H = 20.0 # 20 kWh/h (~20 kW) sanity limit +MAX_MISSING_HOURS_PER_DAY = 6 # Maximum hours to interpolate within a day +TOP_MATCHES = 7 # Average top-N profiles for stability +FLOOR_RATIO = 0.35 # Min floor as % of reference consumption +DEFAULT_DAYS_BACK = 90 # Fallback when history start can't be resolved + + +def _get_season(dt: datetime) -> str: + """Určit roční období z data.""" + month = dt.month + if month in [12, 1, 2]: + return "winter" + elif month in [3, 4, 5]: + return "spring" + elif month in [6, 7, 8]: + return "summer" + else: + return "autumn" + + +def _generate_profile_name( + hourly_consumption: List[float], season: str, is_weekend: bool +) -> str: + """ + Generuje lidsky čitelný název profilu na základě charakteristik spotřeby. + + Args: + hourly_consumption: 24h profil hodinové spotřeby [kWh] + season: roční období ('winter', 'spring', 'summer', 'autumn') + is_weekend: True pokud jde o víkend + + Returns: + Lidsky čitelný název (např. "Pracovní den s topením", "Víkend s praním") + """ + if not hourly_consumption or len(hourly_consumption) != 24: + return "Neznámý profil" + + day_name = "Víkend" if is_weekend else "Pracovní den" + + stats = _profile_consumption_stats(hourly_consumption) + special_tags = _profile_special_tags(season, is_weekend, stats) + if special_tags: + special_name = _profile_special_name(day_name, special_tags[0]) + if special_name: + return special_name + + return _profile_spike_name(day_name, stats) + + +def _profile_consumption_stats(hourly_consumption: List[float]) -> Dict[str, float]: + """Compute basic averages and spike markers for a daily profile.""" + total = sum(hourly_consumption) + daily_avg = total / 24 + morning_avg = float(np.mean(hourly_consumption[6:12])) + afternoon_avg = float(np.mean(hourly_consumption[12:18])) + evening_avg = float(np.mean(hourly_consumption[18:24])) + night_avg = float(np.mean(hourly_consumption[0:6])) + return { + "daily_avg": daily_avg, + "morning_avg": morning_avg, + "afternoon_avg": afternoon_avg, + "evening_avg": evening_avg, + "night_avg": night_avg, + "has_morning_spike": morning_avg > daily_avg * 1.3, + "has_evening_spike": evening_avg > daily_avg * 1.3, + "has_afternoon_spike": afternoon_avg > daily_avg * 1.3, + } + + +def _profile_special_tags( + season: str, is_weekend: bool, stats: Dict[str, float] +) -> List[str]: + """Return ordered list of special tags detected from consumption.""" + special_tags: List[str] = [] + if season == "winter" and stats["evening_avg"] > 1.2: + special_tags.append("topení") + if season == "summer" and stats["afternoon_avg"] > 1.0: + special_tags.append("klimatizace") + if is_weekend and stats["has_morning_spike"]: + special_tags.append("praní") + if not is_weekend and stats["afternoon_avg"] > 0.8: + special_tags.append("home office") + if stats["night_avg"] > 0.5: + special_tags.append("noční ohřev") + return special_tags + + +def _profile_special_name(day_name: str, tag: str) -> Optional[str]: + """Return a profile name for a special tag, if known.""" + if tag == "topení": + return f"{day_name} s topením" + if tag == "klimatizace": + return f"{day_name} s klimatizací" + if tag == "praní": + return f"{day_name} s praním" + if tag == "home office": + return "Home office" + if tag == "noční ohřev": + return f"{day_name} s nočním ohřevem" + return None + + +def _profile_spike_name(day_name: str, stats: Dict[str, float]) -> str: + """Return a fallback name based on dominant spikes.""" + if stats["has_evening_spike"]: + return f"{day_name} - večerní špička" + if stats["has_morning_spike"]: + return f"{day_name} - ranní špička" + if stats["has_afternoon_spike"]: + return f"{day_name} - polední špička" + return f"{day_name} - běžný" + + +class OigCloudAdaptiveLoadProfilesSensor(CoordinatorEntity, SensorEntity): + """ + Sensor pro automatickou analýzu a tvorbu profilů spotřeby. + + - Noční analýza historických dat (02:00) + - Persistence profilů v attributes + - UI-friendly zobrazení + """ + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + ) -> None: + """Initialize the adaptive profiles sensor.""" + super().__init__(coordinator) + + self._sensor_type = sensor_type + self._config_entry = config_entry + self._device_info = device_info + self._hass: Optional[HomeAssistant] = hass or getattr(coordinator, "hass", None) + + # Stabilní box_id resolution (config entry → proxy → coordinator numeric keys) + try: + from .base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + + self._attr_unique_id = f"oig_cloud_{self._box_id}_{sensor_type}" + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + self._attr_icon = "mdi:chart-timeline-variant-shimmer" + self._attr_native_unit_of_measurement = None # State = počet profilů + self._attr_device_class = None + self._attr_state_class = None + self._attr_entity_category = EntityCategory.DIAGNOSTIC + + # Načíst název ze sensor types + from ..sensors.SENSOR_TYPES_STATISTICS import SENSOR_TYPES_STATISTICS + + sensor_config = SENSOR_TYPES_STATISTICS.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + self._attr_name = name_cs or name_en or sensor_type + + # 72h Profiling storage + self._last_profile_created: Optional[datetime] = None + self._profiling_status: str = "idle" # idle/creating/ok/error + self._profiling_error: Optional[str] = None + self._profiling_task: Optional[Any] = None # Background task + self._last_profile_reason: Optional[str] = None + + # Current consumption prediction (from coordinator) + self._current_prediction: Optional[Dict[str, Any]] = None + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - spustit profiling loop.""" + await super().async_added_to_hass() + self._hass = self.hass + + # START: Profiling loop jako background task + _LOGGER.info("Starting consumption profiling loop") + self._profiling_task = self.hass.async_create_background_task( + self._profiling_loop(), name="oig_cloud_consumption_profiling_loop" + ) + + async def async_will_remove_from_hass(self) -> None: + """Při odebrání z HA - zrušit profiling task.""" + if self._profiling_task and not self._profiling_task.done(): + self._profiling_task.cancel() + await super().async_will_remove_from_hass() + + async def _profiling_loop(self) -> None: + """ + Profiling loop - vytváření adaptivní predikce spotřeby. + + První běh okamžitě (s delay 10s), pak každých 15 minut. + Historické profily se loadují jednou denně v 00:30. + """ + try: + # První běh s delay aby HA dostal čas + await asyncio.sleep(10) + + _LOGGER.info( + "📊 Adaptive profiling loop starting - matching every 15 minutes" + ) + + # První běh okamžitě + await self._create_and_update_profile() + + while True: + try: + # Čekat 15 minut + await asyncio.sleep(15 * 60) + + _LOGGER.debug("📊 Running adaptive matching (15min update)") + await self._create_and_update_profile() + + except Exception as e: + _LOGGER.error(f"❌ Profiling loop error: {e}", exc_info=True) + self._profiling_status = "error" + self._profiling_error = str(e) + self.async_schedule_update_ha_state(force_refresh=True) + + # Počkat 5 minut před retry po chybě + await asyncio.sleep(5 * 60) + + except asyncio.CancelledError: + _LOGGER.info("Profiling loop cancelled") + raise + except Exception as e: + _LOGGER.error(f"Fatal profiling loop error: {e}", exc_info=True) + + async def _wait_for_next_profile_window(self) -> None: + """Počkat do dalšího profiling okna (00:30).""" + now = dt_util.now() + target_time = now.replace(hour=0, minute=30, second=0, microsecond=0) + + # Pokud už je po 00:30 dnes, čekat na zítra + if now >= target_time: + target_time += timedelta(days=1) + + wait_seconds = (target_time - now).total_seconds() + _LOGGER.info( + f"⏱️ Waiting {wait_seconds / 3600:.1f} hours until next profile window at {target_time}" + ) + + await asyncio.sleep(wait_seconds) + + async def _create_and_update_profile(self) -> None: + """Vytvořit profil a updateovat state.""" + self._profiling_status = "creating" + self._profiling_error = None + if self._hass: + self.async_write_ha_state() + + energy_sensor = f"sensor.oig_{self._box_id}_ac_out_en_day" + power_sensor = f"sensor.oig_{self._box_id}_actual_aco_p" + + previous_reason = self._last_profile_reason + self._last_profile_reason = None + + # Najít best matching profile přímo z aktuálních dat + # (nepotřebujeme ukládat do events - profily jsou on-the-fly) + prediction = await self._find_best_matching_profile( + energy_sensor, fallback_sensor=power_sensor + ) + + if prediction: + self._last_profile_created = dt_util.now() + self._profiling_status = "ok" + self._profiling_error = None + self._current_prediction = prediction + self._last_profile_reason = None + + _LOGGER.info( + f"✅ Profile updated: predicted {prediction.get('predicted_total_kwh', 0):.2f} kWh for next 24h" + ) + else: + reason = self._last_profile_reason or "unknown" + if reason.startswith("not_enough_") or reason.startswith("no_"): + self._profiling_status = "warming_up" + self._profiling_error = reason + if reason != previous_reason: + _LOGGER.info("Profiling zatím nemá dost dat (%s).", reason) + else: + self._profiling_status = "error" + self._profiling_error = "Failed to create profile" + _LOGGER.warning("❌ Failed to update consumption profile") + + if self._hass: + self.async_write_ha_state() + + # Notify dependent sensors (BatteryForecast) that profiles are ready + if prediction: # Only signal if we have valid data + from homeassistant.helpers.dispatcher import async_dispatcher_send + + signal_name = f"oig_cloud_{self._box_id}_profiles_updated" + _LOGGER.debug(f"📡 Sending signal: {signal_name}") + async_dispatcher_send(self._hass, signal_name) + + # ============================================================================ + # 72h Consumption Profiling System + # ============================================================================ + + def _get_energy_unit_factor(self, sensor_entity_id: str) -> float: + """Return conversion factor to kWh for energy sensors.""" + if not self._hass: + return 0.001 + state = self._hass.states.get(sensor_entity_id) + unit = None + if state: + unit = state.attributes.get("unit_of_measurement") + if unit and unit.lower() == "kwh": + return 1.0 + return 0.001 # Wh → kWh + + def _get_recorder_instance(self): + """Return recorder instance when available.""" + if not self._hass: + return None + from homeassistant.helpers.recorder import get_instance + + recorder_instance = get_instance(self._hass) + if not recorder_instance: + _LOGGER.error("Recorder instance not available") + return None + return recorder_instance + + def _query_hourly_statistics( + self, sensor_entity_id: str, start_ts: int, end_ts: int + ): + """Query statistics rows for hourly values.""" + from homeassistant.helpers.recorder import get_instance, session_scope + from sqlalchemy import text + + instance = get_instance(self._hass) + with session_scope(hass=self._hass, session=instance.get_session()) as session: + query = text( + """ + SELECT s.sum, s.mean, s.state, s.start_ts + FROM statistics s + INNER JOIN statistics_meta sm ON s.metadata_id = sm.id + WHERE sm.statistic_id = :statistic_id + AND s.start_ts >= :start_ts + AND s.start_ts < :end_ts + ORDER BY s.start_ts + """ + ) + result = session.execute( + query, + { + "statistic_id": sensor_entity_id, + "start_ts": start_ts, + "end_ts": end_ts, + }, + ) + return result.fetchall() + + def _parse_hourly_row( + self, row: Tuple[Any, ...], value_field: str, unit_factor: float + ) -> Optional[Tuple[datetime, float]]: + """Normalize a statistics row into a local timestamp and value.""" + try: + sum_val = row[0] + mean_val = row[1] + state_val = row[2] + timestamp_ts = float(row[3]) + except (ValueError, AttributeError, IndexError, TypeError): + return None + + timestamp = datetime.fromtimestamp(timestamp_ts, tz=dt_util.UTC) + if value_field == "mean": + if mean_val is None: + return None + value = float(mean_val) / 1000.0 # W → kWh/h + else: + raw = sum_val if sum_val is not None else state_val + if raw is None: + return None + value = float(raw) * unit_factor # Wh → kWh (if needed) + + if value < 0 or value > MAX_REASONABLE_KWH_H: + return None + + return dt_util.as_local(timestamp), value + + async def _load_hourly_series( + self, + sensor_entity_id: str, + start_time: datetime, + end_time: datetime, + *, + value_field: str, + ) -> List[Tuple[datetime, float]]: + """ + Načíst hodinovou řadu ze statistics tabulky. + + Args: + sensor_entity_id: Entity ID senzoru + start_time: začátek rozsahu (local) + end_time: konec rozsahu (local) + value_field: "sum" (energy) nebo "mean" (power) + """ + try: + recorder_instance = self._get_recorder_instance() + if not recorder_instance: + return [] + start_ts = int(dt_util.as_utc(start_time).timestamp()) + end_ts = int(dt_util.as_utc(end_time).timestamp()) + + stats_rows = await recorder_instance.async_add_executor_job( + lambda: self._query_hourly_statistics( + sensor_entity_id, start_ts, end_ts + ) + ) + if not stats_rows: + return [] + + unit_factor = self._get_energy_unit_factor(sensor_entity_id) + series: List[Tuple[datetime, float]] = [] + + for row in stats_rows: + parsed = self._parse_hourly_row(row, value_field, unit_factor) + if parsed: + series.append(parsed) + + return series + + except Exception as e: + _LOGGER.error(f"Failed to load hourly series: {e}", exc_info=True) + return [] + + async def _get_earliest_statistics_start( + self, sensor_entity_id: str + ) -> Optional[datetime]: + """Najít nejstarší dostupný hodinový záznam pro senzor.""" + if not self._hass: + return None + + try: + from homeassistant.helpers.recorder import get_instance, session_scope + from sqlalchemy import text + + recorder_instance = get_instance(self._hass) + if not recorder_instance: + _LOGGER.error("Recorder instance not available") + return None + + def get_min_start_ts() -> Optional[float]: + instance = get_instance(self._hass) + with session_scope( + hass=self._hass, session=instance.get_session() + ) as session: + query = text( + """ + SELECT MIN(s.start_ts) + FROM statistics s + INNER JOIN statistics_meta sm ON s.metadata_id = sm.id + WHERE sm.statistic_id = :statistic_id + """ + ) + result = session.execute(query, {"statistic_id": sensor_entity_id}) + return result.scalar() + + min_ts = await recorder_instance.async_add_executor_job(get_min_start_ts) + if min_ts is None: + return None + + earliest = datetime.fromtimestamp(float(min_ts), tz=dt_util.UTC) + local = dt_util.as_local(earliest) + return datetime.combine( + local.date(), datetime.min.time(), tzinfo=local.tzinfo + ) + + except Exception as e: + _LOGGER.error( + f"Failed to resolve earliest statistics start: {e}", exc_info=True + ) + return None + + def _build_daily_profiles( + self, hourly_series: List[Tuple[datetime, float]] + ) -> Tuple[ + Dict[datetime.date, List[float]], Dict[int, float], Dict[datetime.date, int] + ]: + """Zarovnat hodinová data na kalendářní dny a dopočítat chybějící hodiny.""" + if not hourly_series: + return {}, {}, {} + + day_map: Dict[datetime.date, Dict[int, float]] = defaultdict(dict) + all_values: List[float] = [] + + for ts, value in hourly_series: + day = ts.date() + hour = ts.hour + day_map[day][hour] = float(value) + all_values.append(float(value)) + + hour_medians: Dict[int, float] = {} + for hour in range(24): + values = [v.get(hour) for v in day_map.values() if hour in v] + if values: + hour_medians[hour] = float(np.median(values)) + + global_median = float(np.median(all_values)) if all_values else 0.0 + + daily_profiles: Dict[datetime.date, List[float]] = {} + interpolated_counts: Dict[datetime.date, int] = {} + + for day, hours in day_map.items(): + day_values: List[Optional[float]] = [ + hours.get(h) if h in hours else None for h in range(24) + ] + missing = sum(1 for v in day_values if v is None) + + if missing > MAX_MISSING_HOURS_PER_DAY: + _LOGGER.debug( + "Skipping day %s (missing %s hours)", day.isoformat(), missing + ) + continue + + available = [v for v in day_values if v is not None] + + day_avg = float(np.mean(available)) if available else global_median + filled, interpolated = self._fill_missing_hours( + day_values, hour_medians, day_avg, global_median + ) + daily_profiles[day] = filled + interpolated_counts[day] = interpolated + + return daily_profiles, hour_medians, interpolated_counts + + def _fill_missing_hours( + self, + day_values: List[Optional[float]], + hour_medians: Dict[int, float], + day_avg: float, + global_median: float, + ) -> Tuple[List[float], int]: + """Dopočítat chybějící hodiny (lineárně uvnitř dne, fallback na medián).""" + return self._fill_missing_values( + day_values, hour_medians, day_avg, global_median, hour_offset=0 + ) + + def _fill_missing_values( + self, + values: List[Optional[float]], + hour_medians: Dict[int, float], + day_avg: float, + global_median: float, + *, + hour_offset: int = 0, + ) -> Tuple[List[float], int]: + """Dopočítat chybějící hodnoty v libovolně dlouhém seznamu.""" + filled = list(values) + interpolated = 0 + length = len(values) + + for idx, value in enumerate(values): + if value is not None: + continue + + prev_idx = next( + (i for i in range(idx - 1, -1, -1) if values[i] is not None), + None, + ) + next_idx = next( + (i for i in range(idx + 1, length) if values[i] is not None), + None, + ) + + if prev_idx is not None and next_idx is not None: + prev_val = float(values[prev_idx]) # type: ignore[arg-type] + next_val = float(values[next_idx]) # type: ignore[arg-type] + ratio = (idx - prev_idx) / (next_idx - prev_idx) + fill_value = prev_val + (next_val - prev_val) * ratio + else: + fill_value = hour_medians.get(idx + hour_offset) + if fill_value is None: + fill_value = day_avg if day_avg is not None else global_median + + filled[idx] = float(fill_value) + interpolated += 1 + + return filled, interpolated + + def _build_72h_profiles( + self, daily_profiles: Dict[datetime.date, List[float]] + ) -> List[Dict[str, Any]]: + """Sestavit historické 72h profily z po sobě jdoucích dnů.""" + profiles: List[Dict[str, Any]] = [] + days = sorted(daily_profiles.keys()) + + for i in range(len(days) - 2): + d0, d1, d2 = days[i], days[i + 1], days[i + 2] + if d1 != d0 + timedelta(days=1) or d2 != d1 + timedelta(days=1): + continue + + profile_data = daily_profiles[d0] + daily_profiles[d1] + daily_profiles[d2] + + if len(profile_data) != PROFILE_HOURS: + continue + + profiles.append( + { + "consumption_kwh": profile_data, + "total_consumption": float(np.sum(profile_data)), + "avg_consumption": float(np.mean(profile_data)), + "start_date": d0.isoformat(), + } + ) + + return profiles + + def _build_current_match( + self, + hourly_series: List[Tuple[datetime, float]], + hour_medians: Dict[int, float], + ) -> Optional[List[float]]: + """Sestavit aktuální match okno z včerejška a dneška (dnešek může být neúplný).""" + if not hourly_series: + return None + + now = dt_util.now() + current_hour = now.hour + today = now.date() + yesterday = today - timedelta(days=1) + + day_map: Dict[datetime.date, Dict[int, float]] = defaultdict(dict) + all_values: List[float] = [] + + for ts, value in hourly_series: + day = ts.date() + hour = ts.hour + day_map[day][hour] = float(value) + all_values.append(float(value)) + + global_median = float(np.median(all_values)) if all_values else 0.0 + match: List[float] = [] + + yesterday_hours = day_map.get(yesterday) + if not yesterday_hours: + return None + + yesterday_values: List[Optional[float]] = [ + yesterday_hours.get(h) for h in range(24) + ] + missing_y = sum(1 for v in yesterday_values if v is None) + if missing_y > MAX_MISSING_HOURS_PER_DAY: + return None + + y_available = [v for v in yesterday_values if v is not None] + y_avg = float(np.mean(y_available)) + y_filled, _ = self._fill_missing_values( + yesterday_values, hour_medians, y_avg, global_median, hour_offset=0 + ) + match.extend(y_filled) + + if current_hour == 0: + return match + + today_hours = day_map.get(today) + if not today_hours: + return None + + today_values: List[Optional[float]] = [ + today_hours.get(h) for h in range(current_hour) + ] + missing_t = sum(1 for v in today_values if v is None) + if missing_t > MAX_MISSING_HOURS_PER_DAY: + return None + + t_available = [v for v in today_values if v is not None] + if not t_available: + return None + t_avg = float(np.mean(t_available)) + t_filled, _ = self._fill_missing_values( + today_values, hour_medians, t_avg, global_median, hour_offset=0 + ) + match.extend(t_filled) + + return match + + def _apply_floor_to_prediction( + self, + predicted: List[float], + start_hour: int, + hour_medians: Dict[int, float], + recent_match: List[float], + ) -> Tuple[List[float], int]: + """Aplikovat minimální floor podle historické spotřeby.""" + if not predicted: + return predicted, 0 + + recent_window = recent_match[-24:] if recent_match else [] + recent_avg = float(np.mean(recent_window)) if recent_window else 0.0 + + applied = 0 + for idx, value in enumerate(predicted): + hour = (start_hour + idx) % 24 + base = hour_medians.get(hour, recent_avg) + floor = base * FLOOR_RATIO if base else 0.0 + if floor > 0 and value < floor: + predicted[idx] = floor + applied += 1 + + return predicted, applied + + def _calculate_profile_similarity( + self, current_data: List[float], profile_data: List[float] + ) -> float: + """ + Spočítat similarity score mezi aktuálními daty a historickým profilem. + + Scoring: + - 50% correlation coefficient (Pearsonův korelační koeficient) + - 30% RMSE (root mean square error - inverted) + - 20% total consumption difference (inverted) + + Args: + current_data: Aktuální spotřeba (plovoucí počet hodin) + profile_data: Historický profil (stejný počet hodin) + + Returns: + Similarity score 0.0 - 1.0 (1.0 = perfektní match) + """ + if len(current_data) != len(profile_data): + _LOGGER.warning( + f"Invalid data length for similarity: {len(current_data)} != {len(profile_data)}" + ) + return 0.0 + + try: + # Convert to numpy arrays + current = np.array(current_data) + profile = np.array(profile_data) + + # 1. Correlation coefficient (50%) + if np.std(current) == 0 or np.std(profile) == 0: + correlation_score = 0.0 + else: + correlation = np.corrcoef(current, profile)[0, 1] + # Normalize to 0-1 (correlation je -1 až 1, chceme jen pozitivní podobnost) + correlation_score = max(0.0, correlation) + + # 2. RMSE (30%) - lower is better, normalize to 0-1 + rmse = np.sqrt(np.mean((current - profile) ** 2)) + # Normalize: exponenciální decay, RMSE=0 → score=1, RMSE roste → score klesá + max_reasonable_rmse = 5.0 # kWh + rmse_score = np.exp(-rmse / max_reasonable_rmse) + + # 3. Total consumption difference (20%) - lower is better + total_current = np.sum(current) + total_profile = np.sum(profile) + if total_profile > 0: + total_diff = abs(total_current - total_profile) / total_profile + else: + total_diff = 1.0 if total_current > 0 else 0.0 + + # Normalize: 0% diff → score=1, 100%+ diff → score≈0 + total_score = np.exp(-total_diff) + + # Weighted sum + similarity = ( + WEIGHT_CORRELATION * correlation_score + + WEIGHT_RMSE * rmse_score + + WEIGHT_TOTAL * total_score + ) + + return float(similarity) + + except Exception as e: + _LOGGER.error(f"Failed to calculate similarity: {e}", exc_info=True) + return 0.0 + + async def _find_best_matching_profile( + self, current_consumption_sensor: str, fallback_sensor: Optional[str] = None + ) -> Optional[Dict[str, Any]]: + """Najít matching profil s preferencí energy senzoru.""" + prediction = await self._find_best_matching_profile_for_sensor( + current_consumption_sensor, value_field="sum" + ) + if prediction or not fallback_sensor: + return prediction + + _LOGGER.info( + "Energy profiling unavailable for %s, falling back to %s", + current_consumption_sensor, + fallback_sensor, + ) + return await self._find_best_matching_profile_for_sensor( + fallback_sensor, value_field="mean" + ) + + def _log_profile_window(self, window: Dict[str, int]) -> None: + _LOGGER.debug( + "Profiling window: time=%02d:00, matching=%sh, prediction=%sh", + window["current_hour"], + window["match_hours"], + window["predict_hours"], + ) + + async def _resolve_profile_history_window( + self, + sensor_entity_id: str, + now: datetime, + days_back: Optional[int], + ) -> Tuple[datetime, datetime]: + start_time, end_time, history_label = await _resolve_history_window( + self, sensor_entity_id, now, days_back + ) + _LOGGER.debug( + "Profiling history window: %s → %s (%s)", + start_time.date().isoformat(), + end_time.date().isoformat(), + history_label, + ) + return start_time, end_time + + async def _load_profile_hourly_series( + self, + sensor_entity_id: str, + start_time: datetime, + end_time: datetime, + *, + value_field: str, + ) -> Optional[List[Tuple[datetime, float]]]: + hourly_series = await self._load_hourly_series( + sensor_entity_id, + start_time, + end_time, + value_field=value_field, + ) + if not hourly_series: + self._last_profile_reason = "no_hourly_stats" + _LOGGER.debug("No hourly statistics data for %s", sensor_entity_id) + return None + return hourly_series + + def _prepare_profile_candidates( + self, + hourly_series: List[Tuple[datetime, float]], + window: Dict[str, int], + ) -> Optional[ + Tuple[List[Dict[str, Any]], Dict[int, float], Dict[datetime.date, int], List[float]] + ]: + daily_profiles, hour_medians, interpolated = self._build_daily_profiles( + hourly_series + ) + if not _has_enough_daily_profiles(self, daily_profiles): + return None + + current_match = self._build_current_match(hourly_series, hour_medians) + if not _has_enough_current_match( + self, current_match, window["match_hours"] + ): + return None + + profiles = self._build_72h_profiles(daily_profiles) + if not profiles: + self._last_profile_reason = "no_historical_profiles" + _LOGGER.debug("No historical 72h profiles available for matching") + return None + + selected = _select_top_matches( + self, profiles, current_match, window["match_hours"] + ) + if not selected: + self._last_profile_reason = "no_matching_profiles" + _LOGGER.debug("No matching profile found") + return None + + return selected, hour_medians, interpolated, current_match + + def _log_profile_match( + self, result: Dict[str, Any], window: Dict[str, int] + ) -> None: + _LOGGER.info( + "🎯 Profile match: score=%.3f, samples=%s, predicted_%sh=%.2f kWh", + result["similarity_score"], + result["sample_count"], + window["predict_hours"], + result["predicted_total_kwh"], + ) + + async def _find_best_matching_profile_for_sensor( + self, + sensor_entity_id: str, + *, + value_field: str, + days_back: Optional[int] = None, + ) -> Optional[Dict[str, Any]]: + """ + Najít nejlepší matching 72h profil pro aktuální spotřebu. + + Plovoucí okno: + - Před půlnocí (např. 20:00): matching 44h zpět, predikce 28h dopředu + - Po půlnoci (např. 01:00): matching 24h zpět, predikce 48h dopředu + - Vždy celkem 72h + """ + if not self._hass: + return None + + try: + self._last_profile_reason = None + now = dt_util.now() + window = _resolve_profile_window(now) + self._log_profile_window(window) + start_time, end_time = await self._resolve_profile_history_window( + sensor_entity_id, now, days_back + ) + hourly_series = await self._load_profile_hourly_series( + sensor_entity_id, + start_time, + end_time, + value_field=value_field, + ) + if not hourly_series: + return None + + prepared = self._prepare_profile_candidates(hourly_series, window) + if not prepared: + return None + + selected, hour_medians, interpolated, current_match = prepared + + result = _build_profile_prediction( + selected, + window=window, + hour_medians=hour_medians, + current_match=current_match, + sensor_entity_id=sensor_entity_id, + interpolated=interpolated, + apply_floor=self._apply_floor_to_prediction, + ) + self._log_profile_match(result, window) + + return result + + except Exception as e: + _LOGGER.error(f"Failed to find matching profile: {e}", exc_info=True) + self._last_profile_reason = "error" + return None + + @property + def native_value(self) -> Optional[str]: + """Return profiling status.""" + if self._current_prediction: + total = self._current_prediction.get("predicted_total_kwh", 0) + return f"{total:.1f} kWh" + return "no_data" + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Return attributes.""" + attrs = { + "profiling_status": self._profiling_status, + "profiling_error": self._profiling_error, + "profiling_reason": self._last_profile_reason, + "last_profile_created": ( + self._last_profile_created.isoformat() + if self._last_profile_created + else None + ), + } + + attrs.update(self._build_prediction_attributes()) + + return attrs + + def _build_prediction_attributes(self) -> Dict[str, Any]: + prediction = self._current_prediction + if not prediction: + return {} + attrs = {"prediction_summary": self._build_prediction_summary(prediction)} + attrs.update(self._build_profile_attributes(prediction)) + return attrs + + @staticmethod + def _build_prediction_summary(prediction: Dict[str, Any]) -> Dict[str, Any]: + return { + "similarity_score": prediction.get("similarity_score"), + "predicted_total_kwh": prediction.get("predicted_total_kwh"), + "predicted_avg_kwh": prediction.get("predicted_avg_kwh"), + "sample_count": prediction.get("sample_count"), + "match_hours": prediction.get("match_hours"), + "data_source": prediction.get("data_source"), + "floor_applied": prediction.get("floor_applied"), + "interpolated_hours": prediction.get("interpolated_hours"), + } + + def _build_profile_attributes(self, prediction: Dict[str, Any]) -> Dict[str, Any]: + predicted = prediction.get("predicted_consumption", []) + predict_hours = prediction.get("predict_hours", 0) + if not predicted or predict_hours <= 0: + return {} + + now = dt_util.now() + current_hour = now.hour + today_hours, tomorrow_hours = self._split_predicted_hours( + predicted, predict_hours, current_hour + ) + tomorrow_hours = self._pad_profile_hours(tomorrow_hours, 24, 0.5) + + similarity_score = prediction.get("similarity_score", 0) + sample_count = prediction.get("sample_count", 1) + season = _get_season(now) + is_weekend_today = now.weekday() >= 5 + is_weekend_tomorrow = (now.weekday() + 1) % 7 >= 5 + + name_suffix = self._build_profile_name_suffix( + sample_count, similarity_score + ) + today_name_source, tomorrow_name_source = self._resolve_name_sources( + prediction.get("matched_profile_full", []), + today_hours, + tomorrow_hours, + current_hour, + ) + today_profile_name, tomorrow_profile_name = self._build_profile_names( + today_name_source, + tomorrow_name_source, + season, + is_weekend_today, + is_weekend_tomorrow, + name_suffix, + ) + + attrs: Dict[str, Any] = {} + attrs["today_profile"] = self._build_profile_data( + today_hours, + current_hour, + season, + sample_count, + today_profile_name, + similarity_score, + is_weekend_today, + ) + attrs["tomorrow_profile"] = self._build_profile_data( + tomorrow_hours[:24], + 0, + season, + sample_count, + tomorrow_profile_name, + similarity_score, + is_weekend_tomorrow, + ) + attrs["profile_name"] = today_profile_name + attrs["match_score"] = round(similarity_score * 100, 1) + attrs["sample_count"] = sample_count + return attrs + + @staticmethod + def _split_predicted_hours( + predicted: List[float], predict_hours: int, current_hour: int + ) -> Tuple[List[float], List[float]]: + hours_until_midnight = 24 - current_hour + today_count = min(hours_until_midnight, predict_hours) + today_hours = predicted[:today_count] + tomorrow_hours = predicted[today_count:] if today_count < predict_hours else [] + return today_hours, tomorrow_hours + + @staticmethod + def _pad_profile_hours( + hours: List[float], target: int, fallback: float + ) -> List[float]: + if len(hours) >= target: + return list(hours) + avg_hour = float(np.mean(hours)) if hours else fallback + return list(hours) + [avg_hour] * (target - len(hours)) + + @staticmethod + def _build_profile_name_suffix(sample_count: int, similarity_score: float) -> str: + if sample_count > 1: + return f" ({sample_count} podobných dnů, shoda {similarity_score:.2f})" + return f" (shoda {similarity_score:.2f})" + + def _resolve_name_sources( + self, + matched_profile_full: List[float], + today_hours: List[float], + tomorrow_hours: List[float], + current_hour: int, + ) -> Tuple[List[float], List[float]]: + today_full: List[float] = [] + if len(matched_profile_full) >= 72: + today_full = matched_profile_full[24:48] + tomorrow_from_matched = matched_profile_full[48:72] + today_from_matched = today_full[current_hour:] + else: + tomorrow_from_matched = tomorrow_hours[:24] + today_from_matched = today_hours + + if len(matched_profile_full) >= 72 and len(today_full) == 24: + today_name_source = today_full + elif len(today_from_matched) == 24: + today_name_source = today_from_matched + else: + padding = [0.0] * (24 - len(today_from_matched)) + today_name_source = today_from_matched + padding + + return today_name_source, tomorrow_from_matched + + @staticmethod + def _build_profile_names( + today_name_source: List[float], + tomorrow_name_source: List[float], + season: str, + is_weekend_today: bool, + is_weekend_tomorrow: bool, + name_suffix: str, + ) -> Tuple[str, str]: + today_profile_name = _generate_profile_name( + hourly_consumption=today_name_source, + season=season, + is_weekend=is_weekend_today, + ) + today_profile_name = f"{today_profile_name}{name_suffix}" + + tomorrow_profile_name = _generate_profile_name( + hourly_consumption=tomorrow_name_source, + season=season, + is_weekend=is_weekend_tomorrow, + ) + tomorrow_profile_name = f"{tomorrow_profile_name}{name_suffix}" + return today_profile_name, tomorrow_profile_name + + @staticmethod + def _build_profile_data( + hours: List[float], + start_hour: int, + season: str, + sample_count: int, + profile_name: str, + similarity_score: float, + is_weekend: bool, + ) -> Dict[str, Any]: + return { + "hourly_consumption": hours, + "start_hour": start_hour, + "total_kwh": float(np.sum(hours)), + "avg_kwh_h": float(np.mean(hours)) if hours else 0.0, + "season": season, + "day_count": sample_count, + "ui": { + "name": profile_name, + "similarity_score": similarity_score, + "sample_count": sample_count, + }, + "characteristics": { + "season": season, + "is_weekend": is_weekend, + }, + "sample_count": sample_count, + } + + def get_current_prediction(self) -> Optional[Dict[str, Any]]: + """Get current consumption prediction for use by other components.""" + return self._current_prediction + + @property + def device_info(self) -> Dict[str, Any]: + """Return device info.""" + return self._device_info + + +def _resolve_profile_window(now: datetime) -> Dict[str, int]: + """Resolve matching/prediction window sizes based on current hour.""" + current_hour = now.hour + match_hours = 24 + current_hour + predict_hours = PROFILE_HOURS - match_hours + return { + "current_hour": current_hour, + "match_hours": match_hours, + "predict_hours": predict_hours, + } + + +async def _resolve_history_window( + sensor: OigCloudAdaptiveLoadProfilesSensor, + sensor_entity_id: str, + now: datetime, + days_back: Optional[int], +) -> Tuple[datetime, datetime, str]: + """Resolve history window boundaries for profiling.""" + if days_back is not None: + start_time = now - timedelta(days=days_back) + label = f"{days_back}d" + return start_time, now, label + + earliest = await sensor._get_earliest_statistics_start(sensor_entity_id) + if earliest: + return earliest, now, "earliest_stats" + + fallback = now - timedelta(days=DEFAULT_DAYS_BACK) + return fallback, now, f"fallback_{DEFAULT_DAYS_BACK}d" + + +def _has_enough_daily_profiles( + sensor: OigCloudAdaptiveLoadProfilesSensor, + daily_profiles: Dict[datetime.date, List[float]], +) -> bool: + """Verify we have at least three days of daily profiles.""" + if len(daily_profiles) >= 3: + return True + sensor._last_profile_reason = f"not_enough_daily_profiles_{len(daily_profiles)}" + _LOGGER.debug( + "Not enough daily profiles (%s) for 72h matching", len(daily_profiles) + ) + return False + + +def _has_enough_current_match( + sensor: OigCloudAdaptiveLoadProfilesSensor, + current_match: Optional[List[float]], + match_hours: int, +) -> bool: + """Check if we have enough current data for matching.""" + if current_match and len(current_match) >= match_hours: + return True + current_len = len(current_match) if current_match else 0 + sensor._last_profile_reason = f"not_enough_current_data_{current_len}" + _LOGGER.debug( + "Not enough current match data (%s/%s)", current_len, match_hours + ) + return False + + +def _select_top_matches( + sensor: OigCloudAdaptiveLoadProfilesSensor, + profiles: List[Dict[str, Any]], + current_match: List[float], + match_hours: int, +) -> List[Dict[str, Any]]: + """Score profiles and select top matches.""" + scored: List[Dict[str, Any]] = [] + for profile in profiles: + data = profile.get("consumption_kwh") or [] + if len(data) < match_hours: + continue + segment = data[:match_hours] + score = sensor._calculate_profile_similarity(current_match, segment) + profile_with_score = dict(profile) + profile_with_score["similarity_score"] = score + scored.append(profile_with_score) + + if not scored: + sensor._last_profile_reason = "no_matching_profiles" + _LOGGER.debug("No matching profiles after scoring") + return [] + + scored.sort(key=lambda item: item.get("similarity_score", 0.0), reverse=True) + return scored[:TOP_MATCHES] + + +def _average_profiles(profiles: List[Dict[str, Any]]) -> List[float]: + """Average consumption profiles element-wise.""" + if not profiles: + return [] + lengths = [len(profile.get("consumption_kwh") or []) for profile in profiles] + length = min(lengths) if lengths else 0 + if length == 0: + return [] + + total = np.zeros(length, dtype=float) + for profile in profiles: + data = profile.get("consumption_kwh") or [] + total += np.array(data[:length], dtype=float) + avg = total / len(profiles) + return [float(value) for value in avg.tolist()] + + +def _build_profile_prediction( + selected: List[Dict[str, Any]], + *, + window: Dict[str, int], + hour_medians: Dict[int, float], + current_match: List[float], + sensor_entity_id: str, + interpolated: Dict[datetime.date, int], + apply_floor, +) -> Dict[str, Any]: + """Build prediction payload from selected profiles.""" + averaged = _average_profiles(selected) + match_hours = window["match_hours"] + predict_hours = window["predict_hours"] + predicted = averaged[match_hours : match_hours + predict_hours] if averaged else [] + + floor_applied = 0 + if predicted: + predicted, floor_applied = apply_floor( + predicted, window["current_hour"], hour_medians, current_match + ) + + predicted_total = float(np.sum(predicted)) if predicted else 0.0 + predicted_avg = float(np.mean(predicted)) if predicted else 0.0 + + scores = [profile.get("similarity_score", 0.0) for profile in selected] + similarity_score = float(np.mean(scores)) if scores else 0.0 + best_profile = max( + selected, key=lambda item: item.get("similarity_score", 0.0), default={} + ) + + return { + "predicted_consumption": predicted, + "predicted_total_kwh": predicted_total, + "predicted_avg_kwh": predicted_avg, + "sample_count": len(selected), + "match_hours": match_hours, + "predict_hours": predict_hours, + "similarity_score": similarity_score, + "data_source": sensor_entity_id, + "floor_applied": floor_applied, + "interpolated_hours": int(sum(interpolated.values())) if interpolated else 0, + "matched_profile_full": best_profile.get("consumption_kwh", []), + } diff --git a/custom_components/oig_cloud/entities/analytics_sensor.py b/custom_components/oig_cloud/entities/analytics_sensor.py new file mode 100644 index 00000000..64463f3c --- /dev/null +++ b/custom_components/oig_cloud/entities/analytics_sensor.py @@ -0,0 +1,913 @@ +"""Analytics senzor pro spotové ceny a další analytické funkce.""" + +import logging +from datetime import datetime, time, timedelta +from typing import Any, Callable, Dict, List, Optional, Tuple, Union # PŘIDÁNO: Union + +from homeassistant.config_entries import ConfigEntry +from homeassistant.util import dt as dt_util + +from .base_sensor import OigCloudSensor, resolve_box_id + +_LOGGER = logging.getLogger(__name__) + +ISO_TZ_OFFSET = "+00:00" + + +class OigCloudAnalyticsSensor(OigCloudSensor): + """Analytics senzor pro spotové ceny a analytické funkce.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + entry: ConfigEntry, + device_info: Dict[str, Any], # PŘIDÁNO: přebíráme device_info jako parametr + ) -> None: + """Initialize the analytics sensor.""" + super().__init__(coordinator, sensor_type) + self._entry = entry + self._device_info = device_info # OPRAVA: použijeme předané device_info + + # Debug logování při inicializaci + _LOGGER.debug(f"💰 Initializing analytics sensor: {sensor_type}") + + # OPRAVA: Nastavit _box_id a entity_id podle vzoru z computed sensors + self._box_id = resolve_box_id(coordinator) + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + # OPRAVA: Přímý import SENSOR_TYPES_SPOT (ale používáme SENSOR_TYPES pattern) + from ..sensors.SENSOR_TYPES_SPOT import SENSOR_TYPES_SPOT + + sensor_config = SENSOR_TYPES_SPOT.get(sensor_type, {}) + + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + self._attr_name = name_cs or name_en or sensor_type + + @property + def device_info(self) -> Optional[Dict[str, Any]]: + """Return device info.""" + return self._device_info + + @property + def native_value(self) -> Any: + """Return the state of the sensor.""" + # OPRAVA: Kontrola dostupnosti na začátku + if not self.available: + _LOGGER.debug(f"💰 [{self.entity_id}] Not available, returning None") + return None + + # Debug - zkontrolujme coordinator data + _LOGGER.debug( + f"💰 [{self.entity_id}] Coordinator data keys: {list(self.coordinator.data.keys()) if self.coordinator.data else 'None'}" + ) + + # Pro tarifní senzor + if self._sensor_type == "current_tariff": + return self._calculate_current_tariff() + + # OPRAVA: Načíst spotové ceny z coordinator.data místo ote_api.spot_data + if self.coordinator.data and "spot_prices" in self.coordinator.data: + spot_data = self.coordinator.data["spot_prices"] + _LOGGER.debug( + f"💰 [{self.entity_id}] Spot data keys: {list(spot_data.keys()) if spot_data else 'None'}" + ) + return self._get_spot_price_value(spot_data) + else: + _LOGGER.debug(f"💰 [{self.entity_id}] No spot_prices in coordinator data") + + return None + + def _parse_tariff_times(self, time_str: str) -> List[int]: + """Parse tariff time string into list of hours.""" + if not time_str.strip(): + return [] + try: + return [int(h.strip()) for h in time_str.split(",") if h.strip()] + except (ValueError, AttributeError): + return [] + + def _calculate_current_tariff(self) -> str: + """Calculate current tariff based on time and day.""" + return self._get_tariff_for_datetime(dt_util.now()) + + def _get_tariff_change_hours( + self, is_weekend: bool + ) -> Tuple[List[int], List[int]]: + options = self._entry.options + if is_weekend: + nt_times = self._parse_tariff_times( + options.get("tariff_nt_start_weekend", "0") + ) + vt_times = self._parse_tariff_times( + options.get("tariff_vt_start_weekend", "") + ) + else: + nt_times = self._parse_tariff_times( + options.get("tariff_nt_start_weekday", "22,2") + ) + vt_times = self._parse_tariff_times( + options.get("tariff_vt_start_weekday", "6") + ) + return nt_times, vt_times + + def _build_tariff_changes(self, nt_times: List[int], vt_times: List[int]) -> List[Tuple[int, str]]: + changes: List[Tuple[int, str]] = [] + for hour in nt_times: + changes.append((hour, "NT")) + for hour in vt_times: + changes.append((hour, "VT")) + return changes + + def _get_next_change_for_day( + self, change_hours: List[Tuple[int, str]], current_hour: int, day_date: datetime.date + ) -> Optional[Tuple[str, datetime]]: + for hour, tariff in sorted(change_hours): + if hour > current_hour: + next_change = datetime.combine(day_date, time(hour, 0)) + return tariff, next_change + return None + + def _get_first_change_for_day( + self, change_hours: List[Tuple[int, str]], day_date: datetime.date + ) -> Optional[Tuple[str, datetime]]: + if not change_hours: + return None + hour, tariff = sorted(change_hours)[0] + next_change = datetime.combine(day_date, time(hour, 0)) + return tariff, next_change + + def _get_next_tariff_change( + self, current_time: datetime, is_weekend: bool + ) -> Tuple[str, datetime]: + """Get next tariff change time and type.""" + # Pokud není dvoutarifní sazba povolena, žádné změny + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + if not dual_tariff_enabled: + return "VT", current_time + timedelta( + days=365 + ) # Žádná změna v dohledné době + + nt_times, vt_times = self._get_tariff_change_hours(is_weekend) + + current_hour = current_time.hour + today = current_time.date() + + # Kombinuj všechny změny tarifu pro dnes + changes_today = self._build_tariff_changes(nt_times, vt_times) + next_today = self._get_next_change_for_day(changes_today, current_hour, today) + if next_today: + return next_today + + # Žádná změna dnes, hledej zítra + tomorrow = today + timedelta(days=1) + is_tomorrow_weekend = tomorrow.weekday() >= 5 + + nt_times_tomorrow, vt_times_tomorrow = self._get_tariff_change_hours( + is_tomorrow_weekend + ) + changes_tomorrow = self._build_tariff_changes( + nt_times_tomorrow, vt_times_tomorrow + ) + next_tomorrow = self._get_first_change_for_day(changes_tomorrow, tomorrow) + if next_tomorrow: + return next_tomorrow + + # Fallback - žádné změny + return "NT", current_time + timedelta(hours=1) + + def _calculate_tariff_intervals( + self, current_time: datetime + ) -> Dict[str, List[str]]: + """Calculate NT and VT intervals for today and tomorrow.""" + intervals: Dict[str, List[str]] = {"NT": [], "VT": []} + + # Pokud není dvoutarifní sazba povolena, celý den je VT + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + if not dual_tariff_enabled: + for day_offset in [0, 1]: # Dnes a zítra + check_date = current_time.date() + timedelta(days=day_offset) + interval_str = f"{check_date.strftime('%d.%m')} 00:00-24:00" + intervals["VT"].append(interval_str) + return intervals + + for day_offset in [0, 1]: # Dnes a zítra + check_date = current_time.date() + timedelta(days=day_offset) + is_weekend = check_date.weekday() >= 5 + nt_times, vt_times = self._get_tariff_times_for_day(is_weekend) + self._append_day_intervals(intervals, check_date, nt_times, vt_times) + + return intervals + + def _get_tariff_times_for_day(self, is_weekend: bool) -> Tuple[List[int], List[int]]: + return self._get_tariff_change_hours(is_weekend) + + def _append_day_intervals( + self, + intervals: Dict[str, List[str]], + check_date: datetime.date, + nt_times: List[int], + vt_times: List[int], + ) -> None: + all_changes = self._build_tariff_changes(nt_times, vt_times) + all_changes.sort() + if not all_changes: + interval_str = f"{check_date.strftime('%d.%m')} 00:00-24:00" + intervals["NT"].append(interval_str) + return + + for start_hour, end_hour, tariff in self._iter_change_intervals(all_changes): + start_time = f"{start_hour:02d}:00" + end_time = f"{end_hour:02d}:00" if end_hour < 24 else "24:00" + interval_str = f"{check_date.strftime('%d.%m')} {start_time}-{end_time}" + intervals[tariff].append(interval_str) + + @staticmethod + def _iter_change_intervals( + changes: List[Tuple[int, str]] + ) -> List[Tuple[int, int, str]]: + result: List[Tuple[int, int, str]] = [] + for idx, (start_hour, tariff) in enumerate(changes): + end_hour = changes[idx + 1][0] if idx < len(changes) - 1 else 24 + result.append((start_hour, end_hour, tariff)) + return result + + def _get_tariff_for_datetime(self, target_datetime: datetime) -> str: + """Get tariff (VT/NT) for specific datetime.""" + # Pokud není dvoutarifní sazba povolena, vždy vracíme VT + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + if not dual_tariff_enabled: + return "VT" + + is_weekend = target_datetime.weekday() >= 5 + nt_times, vt_times = self._get_tariff_change_hours(is_weekend) + + current_hour = target_datetime.hour + + # Najdi poslední platnou změnu tarifu + last_tariff = "NT" # Default + last_hour = -1 + + # Zkontroluj změny dnes + all_changes = self._build_tariff_changes(nt_times, vt_times) + + all_changes.sort(reverse=True) # Od největší hodiny + + for hour, tariff in all_changes: + if hour <= current_hour and hour > last_hour: + last_tariff = tariff + last_hour = hour + + # Pokud žádná změna dnes, zkontroluj včerejšek + if last_hour == -1: + yesterday = target_datetime.date() - timedelta(days=1) + is_yesterday_weekend = yesterday.weekday() >= 5 + + nt_times_yesterday, vt_times_yesterday = self._get_tariff_change_hours( + is_yesterday_weekend + ) + yesterday_changes = self._build_tariff_changes( + nt_times_yesterday, vt_times_yesterday + ) + + yesterday_changes.sort(reverse=True) + + for hour, tariff in yesterday_changes: + last_tariff = tariff + break + + return last_tariff + + def _get_spot_price_value(self, spot_data: Dict[str, Any]) -> Optional[float]: + """Získat hodnotu podle typu spotového senzoru s finálním přepočtem.""" + if not spot_data: + return None + + # Kontrola, zda jsou povoleny fixní obchodní ceny + pricing_model = self._entry.options.get("spot_pricing_model", "percentage") + + if pricing_model == "fixed_prices": + return self._get_fixed_price_value() + else: + return self._get_dynamic_spot_price_value(spot_data) + + def _get_fixed_price_value(self) -> Optional[float]: + """Získat hodnotu pro fixní obchodní ceny.""" + # PŘIDÁNO: Pro spot_price_hourly_all vrátit aktuální cenu + if self._sensor_type == "spot_price_hourly_all": + now = datetime.now() + return self._calculate_fixed_final_price_for_datetime(now) + + fixed_price_vt = self._entry.options.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = self._entry.options.get("fixed_commercial_price_nt", 3.20) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + vat_rate = self._entry.options.get("vat_rate", 21.0) + + def calculate_fixed_final_price(target_datetime: datetime = None) -> float: + return self._calculate_fixed_final_price( + target_datetime, + dual_tariff_enabled=dual_tariff_enabled, + fixed_price_vt=fixed_price_vt, + fixed_price_nt=fixed_price_nt, + distribution_fee_vt_kwh=distribution_fee_vt_kwh, + distribution_fee_nt_kwh=distribution_fee_nt_kwh, + vat_rate=vat_rate, + ) + + return self._resolve_fixed_sensor_value( + calculate_fixed_final_price, + dual_tariff_enabled=dual_tariff_enabled, + fixed_price_vt=fixed_price_vt, + fixed_price_nt=fixed_price_nt, + distribution_fee_vt_kwh=distribution_fee_vt_kwh, + distribution_fee_nt_kwh=distribution_fee_nt_kwh, + vat_rate=vat_rate, + ) + + def _calculate_fixed_final_price( + self, + target_datetime: Optional[datetime], + *, + dual_tariff_enabled: bool, + fixed_price_vt: float, + fixed_price_nt: float, + distribution_fee_vt_kwh: float, + distribution_fee_nt_kwh: float, + vat_rate: float, + ) -> float: + if target_datetime: + current_tariff = self._get_tariff_for_datetime(target_datetime) + elif dual_tariff_enabled: + current_tariff = self._calculate_current_tariff() + else: + current_tariff = "VT" + + commercial_price = ( + fixed_price_vt if current_tariff == "VT" else fixed_price_nt + ) + distribution_fee = ( + distribution_fee_vt_kwh + if current_tariff == "VT" + else distribution_fee_nt_kwh + ) + price_without_vat = commercial_price + distribution_fee + return round(price_without_vat * (1 + vat_rate / 100.0), 2) + + def _resolve_fixed_sensor_value( + self, + calculate_fixed_final_price: Callable[[Optional[datetime]], float], + *, + dual_tariff_enabled: bool, + fixed_price_vt: float, + fixed_price_nt: float, + distribution_fee_vt_kwh: float, + distribution_fee_nt_kwh: float, + vat_rate: float, + ) -> Optional[float]: + if self._sensor_type == "spot_price_current_czk_kwh": + return calculate_fixed_final_price(datetime.now()) + if self._sensor_type == "spot_price_current_eur_mwh": + return None + if self._sensor_type == "spot_price_today_avg": + return self._calculate_fixed_daily_average(datetime.now().date()) + if self._sensor_type == "spot_price_today_min": + return self._fixed_daily_extreme( + dual_tariff_enabled, + fixed_price_vt, + fixed_price_nt, + distribution_fee_vt_kwh, + distribution_fee_nt_kwh, + vat_rate, + use_min=True, + ) + if self._sensor_type == "spot_price_today_max": + return self._fixed_daily_extreme( + dual_tariff_enabled, + fixed_price_vt, + fixed_price_nt, + distribution_fee_vt_kwh, + distribution_fee_nt_kwh, + vat_rate, + use_min=False, + ) + if self._sensor_type == "spot_price_tomorrow_avg": + tomorrow = datetime.now().date() + timedelta(days=1) + return self._calculate_fixed_daily_average(tomorrow) + if self._sensor_type == "eur_czk_exchange_rate": + return None + return None + + @staticmethod + def _fixed_daily_extreme( + dual_tariff_enabled: bool, + fixed_price_vt: float, + fixed_price_nt: float, + distribution_fee_vt_kwh: float, + distribution_fee_nt_kwh: float, + vat_rate: float, + *, + use_min: bool, + ) -> float: + if dual_tariff_enabled: + candidate = ( + min if use_min else max + )( + fixed_price_vt + distribution_fee_vt_kwh, + fixed_price_nt + distribution_fee_nt_kwh, + ) + else: + candidate = fixed_price_vt + distribution_fee_vt_kwh + return round(candidate * (1 + vat_rate / 100.0), 2) + + def _calculate_fixed_daily_average(self, target_date: datetime.date) -> float: + """Vypočítat vážený průměr fixních cen pro daný den podle tarifních pásem.""" + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + vat_rate = self._entry.options.get("vat_rate", 21.0) + + if not dual_tariff_enabled: + # Jednotarifní sazba - celý den VT + fixed_price_vt = self._entry.options.get("fixed_commercial_price_vt", 4.50) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + price_without_vat = fixed_price_vt + distribution_fee_vt_kwh + return round(price_without_vat * (1 + vat_rate / 100.0), 2) + + # Dvoutarifní sazba - počítáme vážený průměr podle hodin + fixed_price_vt = self._entry.options.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = self._entry.options.get("fixed_commercial_price_nt", 3.20) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + + total_price = 0.0 + + # Projdeme všechny hodiny dne + for hour in range(24): + hour_datetime = datetime.combine(target_date, time(hour, 0)) + tariff = self._get_tariff_for_datetime(hour_datetime) + + if tariff == "VT": + hour_price_without_vat = fixed_price_vt + distribution_fee_vt_kwh + else: + hour_price_without_vat = fixed_price_nt + distribution_fee_nt_kwh + + # Přidání DPH + hour_price_with_vat = hour_price_without_vat * (1 + vat_rate / 100.0) + total_price += hour_price_with_vat + + return round(total_price / 24.0, 2) + + def _get_dynamic_spot_price_value( + self, spot_data: Dict[str, Any] + ) -> Optional[float]: + """Původní logika pro spotové ceny.""" + if self._sensor_type in ("spot_price_hourly_all", "spot_price_current_czk_kwh"): + return self._get_current_spot_price_czk(spot_data) + + if self._sensor_type == "spot_price_current_eur_mwh": + return self._get_current_spot_price_eur(spot_data) + + if self._sensor_type == "spot_price_today_avg": + return self._get_today_average_price(spot_data) + + if self._sensor_type == "spot_price_today_min": + return self._get_today_extreme_price(spot_data, find_min=True) + + if self._sensor_type == "spot_price_today_max": + return self._get_today_extreme_price(spot_data, find_min=False) + + if self._sensor_type == "spot_price_tomorrow_avg": + return self._get_tomorrow_average_price(spot_data) + + if self._sensor_type == "eur_czk_exchange_rate": + exchange_rate = spot_data.get("eur_czk_rate") + return round(exchange_rate, 4) if exchange_rate is not None else None + + return None + + # Helpers to keep complexity low + def _final_price_with_fees( + self, + spot_price_czk: Optional[float], + target_datetime: Optional[datetime] = None, + ) -> Optional[float]: + """Vypočítat finální cenu včetně obchodních a distribučních poplatků a DPH.""" + if spot_price_czk is None: + return None + + pricing_model = self._entry.options.get("spot_pricing_model", "percentage") + positive_fee_percent = self._entry.options.get( + "spot_positive_fee_percent", 15.0 + ) + negative_fee_percent = self._entry.options.get("spot_negative_fee_percent", 9.0) + fixed_fee_mwh = self._entry.options.get("spot_fixed_fee_mwh", 500.0) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + vat_rate = self._entry.options.get("vat_rate", 21.0) + + if pricing_model == "percentage": + if spot_price_czk >= 0: + commercial_price = spot_price_czk * (1 + positive_fee_percent / 100.0) + else: + commercial_price = spot_price_czk * (1 - negative_fee_percent / 100.0) + else: # fixed + fixed_fee_kwh = fixed_fee_mwh / 1000.0 # MWh -> kWh + commercial_price = spot_price_czk + fixed_fee_kwh + + if target_datetime: + current_tariff = self._get_tariff_for_datetime(target_datetime) + elif dual_tariff_enabled: + current_tariff = self._calculate_current_tariff() + else: + current_tariff = "VT" + + distribution_fee = ( + distribution_fee_vt_kwh + if current_tariff == "VT" + else distribution_fee_nt_kwh + ) + + price_without_vat = commercial_price + distribution_fee + return round(price_without_vat * (1 + vat_rate / 100.0), 2) + + def _get_current_spot_price_czk(self, spot_data: Dict[str, Any]) -> Optional[float]: + now = datetime.now() + current_hour_key = f"{now.strftime('%Y-%m-%d')}T{now.hour:02d}:00:00" + prices_czk = spot_data.get("prices_czk_kwh", {}) + spot_price = prices_czk.get(current_hour_key) + return self._final_price_with_fees(spot_price, now) + + def _get_current_spot_price_eur(self, spot_data: Dict[str, Any]) -> Optional[float]: + now = datetime.now() + current_hour_key = f"{now.strftime('%Y-%m-%d')}T{now.hour:02d}:00:00" + prices_eur = spot_data.get("prices_eur_mwh", {}) + eur_price = prices_eur.get(current_hour_key) + return round(eur_price, 2) if eur_price is not None else None + + def _get_today_average_price(self, spot_data: Dict[str, Any]) -> Optional[float]: + today_stats = spot_data.get("today_stats", {}) + spot_avg = today_stats.get("avg_czk") + return self._final_price_with_fees(spot_avg) if spot_avg is not None else None + + def _get_today_extreme_price( + self, spot_data: Dict[str, Any], find_min: bool + ) -> Optional[float]: + prices_czk = spot_data.get("prices_czk_kwh", {}) + today = datetime.now().date() + best_final_price: Optional[float] = None + + for time_key, spot_price in prices_czk.items(): + try: + price_datetime = datetime.fromisoformat( + time_key.replace("Z", ISO_TZ_OFFSET) + ) + if price_datetime.date() != today: + continue + final_price = self._final_price_with_fees(spot_price, price_datetime) + if final_price is None: + continue + if ( + best_final_price is None + or (find_min and final_price < best_final_price) + or (not find_min and final_price > best_final_price) + ): + best_final_price = final_price + except (ValueError, AttributeError): + continue + + return best_final_price + + def _get_tomorrow_average_price(self, spot_data: Dict[str, Any]) -> Optional[float]: + tomorrow_stats = spot_data.get("tomorrow_stats") + if not tomorrow_stats: + return None + spot_avg = tomorrow_stats.get("avg_czk") + return self._final_price_with_fees(spot_avg) if spot_avg is not None else None + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Return extra state attributes.""" + attrs = {} + + # Pro tarifní senzor přidat speciální atributy + if self._sensor_type == "current_tariff": + attrs.update(self._build_tariff_attributes()) + + if self.coordinator.data and "spot_prices" in self.coordinator.data: + spot_data = self.coordinator.data["spot_prices"] + + # OPRAVA: Přidat atributy pro spot_price_hourly_all - pouze finální ceny + if spot_data and self._sensor_type == "spot_price_hourly_all": + attrs.update(self._build_spot_hourly_attributes(spot_data)) + + return attrs + + def _build_tariff_attributes(self) -> Dict[str, Any]: + current_time = dt_util.now() + is_weekend = current_time.weekday() >= 5 + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + + next_tariff, next_change_time = self._get_next_tariff_change( + current_time, is_weekend + ) + intervals = self._calculate_tariff_intervals(current_time) + + attrs = { + "current_tariff": self.native_value, + "dual_tariff_enabled": dual_tariff_enabled, + "tariff_type": "Dvoutarifní" if dual_tariff_enabled else "Jednotarifní", + "next_tariff": next_tariff if dual_tariff_enabled else "VT", + "next_change": ( + next_change_time.strftime("%d.%m %H:%M") + if dual_tariff_enabled + else "Žádná změna" + ), + "is_weekend": is_weekend, + "nt_intervals": intervals["NT"], + "vt_intervals": intervals["VT"], + "update_time": current_time.strftime("%d.%m.%Y %H:%M:%S"), + "distribution_fee_vt": self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ), + } + if dual_tariff_enabled: + attrs["distribution_fee_nt"] = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + return attrs + + def _build_spot_hourly_attributes(self, spot_data: Dict[str, Any]) -> Dict[str, Any]: + pricing_model = self._entry.options.get("spot_pricing_model", "percentage") + attrs: Dict[str, Any] = {} + if pricing_model == "fixed_prices": + final_prices = self._build_fixed_hourly_prices() + attrs["date_range"] = { + "start": datetime.now().strftime("%Y-%m-%d"), + "end": (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d"), + } + else: + raw_prices = spot_data.get("prices_czk_kwh", {}) + final_prices = self._build_dynamic_hourly_prices(raw_prices) + date_range = self._build_date_range_from_prices(final_prices) + if date_range: + attrs["date_range"] = date_range + + attrs["hourly_final_prices"] = final_prices + attrs["hours_count"] = len(final_prices) + attrs.update(self._build_pricing_metadata(pricing_model)) + attrs["vat_rate"] = self._entry.options.get("vat_rate", 21.0) + return attrs + + def _build_pricing_metadata(self, pricing_model: str) -> Dict[str, Any]: + if "czk" not in self._sensor_type or self._sensor_type == "eur_czk_exchange_rate": + return {} + + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + attrs: Dict[str, Any] = { + "pricing_type": ( + "Fixní obchodní ceny" + if pricing_model == "fixed_prices" + else "Spotové ceny" + ), + "pricing_model": { + "percentage": "Procentní model", + "fixed": "Fixní poplatek", + "fixed_prices": "Fixní ceny", + }.get(pricing_model, "Neznámý"), + "tariff_type": "Dvoutarifní" if dual_tariff_enabled else "Jednotarifní", + "distribution_fee_vt_kwh": self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ), + } + + if dual_tariff_enabled: + attrs["distribution_fee_nt_kwh"] = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + + if pricing_model == "fixed_prices": + attrs["fixed_commercial_price_vt"] = self._entry.options.get( + "fixed_commercial_price_vt", 4.50 + ) + if dual_tariff_enabled: + attrs["fixed_commercial_price_nt"] = self._entry.options.get( + "fixed_commercial_price_nt", 3.20 + ) + elif pricing_model == "percentage": + attrs["positive_fee_percent"] = self._entry.options.get( + "spot_positive_fee_percent", 15.0 + ) + attrs["negative_fee_percent"] = self._entry.options.get( + "spot_negative_fee_percent", 9.0 + ) + elif pricing_model == "fixed": + fixed_fee_mwh = self._entry.options.get("spot_fixed_fee_mwh", 500.0) + attrs["fixed_fee_mwh"] = fixed_fee_mwh + attrs["fixed_fee_kwh"] = fixed_fee_mwh / 1000.0 + return attrs + + @property + def available(self) -> bool: + """Return True if entity is available.""" + # OPRAVA: Kontrola zda jsou cenové senzory povoleny + pricing_enabled = self._entry.options.get("enable_pricing", False) + + if not pricing_enabled: + _LOGGER.debug(f"💰 [{self.entity_id}] Unavailable - pricing disabled") + return False # Cenové senzory jsou vypnuté - senzor není dostupný + + is_available = self.coordinator.last_update_success + _LOGGER.debug( + f"💰 [{self.entity_id}] Available check: coordinator_success={is_available}, pricing_enabled={pricing_enabled}" + ) + + return is_available + + def _build_fixed_hourly_prices(self) -> Dict[str, Dict[str, Union[str, float]]]: + final_prices: Dict[str, Dict[str, Union[str, float]]] = {} + vat_rate = self._entry.options.get("vat_rate", 21.0) + + fixed_price_vt = self._entry.options.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = self._entry.options.get("fixed_commercial_price_nt", 3.20) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + + for day_offset in [0, 1]: + target_date = datetime.now().date() + timedelta(days=day_offset) + for hour in range(24): + hour_datetime = datetime.combine(target_date, time(hour, 0)) + time_key = hour_datetime.strftime("%Y-%m-%dT%H:00:00") + tariff = self._get_tariff_for_datetime(hour_datetime) + + commercial_price = ( + fixed_price_vt if tariff == "VT" else fixed_price_nt + ) + distribution_fee = ( + distribution_fee_vt_kwh + if tariff == "VT" + else distribution_fee_nt_kwh + ) + + price_without_vat = commercial_price + distribution_fee + final_price = round(price_without_vat * (1 + vat_rate / 100.0), 2) + + final_prices[time_key] = { + "tariff": tariff, + "distribution_fee": round(distribution_fee, 2), + "price_without_vat": round(price_without_vat, 2), + "vat_rate": vat_rate, + "final_price": final_price, + } + + return final_prices + + def _build_dynamic_hourly_prices( + self, raw_prices: Dict[str, Any] + ) -> Dict[str, Dict[str, Union[str, float]]]: + final_prices: Dict[str, Dict[str, Union[str, float]]] = {} + vat_rate = self._entry.options.get("vat_rate", 21.0) + + positive_fee_percent = self._entry.options.get( + "spot_positive_fee_percent", 15.0 + ) + negative_fee_percent = self._entry.options.get("spot_negative_fee_percent", 9.0) + fixed_fee_mwh = self._entry.options.get("spot_fixed_fee_mwh", 500.0) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + pricing_model = self._entry.options.get("spot_pricing_model", "percentage") + + for time_key, spot_price in raw_prices.items(): + try: + price_datetime = datetime.fromisoformat( + time_key.replace("Z", ISO_TZ_OFFSET) + ) + tariff = self._get_tariff_for_datetime(price_datetime) + + if pricing_model == "percentage": + if spot_price >= 0: + commercial_price = spot_price * ( + 1 + positive_fee_percent / 100.0 + ) + else: + commercial_price = spot_price * ( + 1 - negative_fee_percent / 100.0 + ) + else: + fixed_fee_kwh = fixed_fee_mwh / 1000.0 + commercial_price = spot_price + fixed_fee_kwh + + distribution_fee = ( + distribution_fee_vt_kwh + if tariff == "VT" + else distribution_fee_nt_kwh + ) + + price_without_vat = commercial_price + distribution_fee + final_price = round(price_without_vat * (1 + vat_rate / 100.0), 2) + + final_prices[time_key] = { + "spot_price": round(spot_price, 2), + "commercial_price": round(commercial_price, 2), + "tariff": tariff, + "distribution_fee": round(distribution_fee, 2), + "price_without_vat": round(price_without_vat, 2), + "vat_rate": vat_rate, + "final_price": final_price, + } + except (ValueError, AttributeError): + continue + + return final_prices + + def _build_date_range_from_prices( + self, final_prices: Dict[str, Any] + ) -> Optional[Dict[str, str]]: + if not final_prices: + return None + timestamps = list(final_prices.keys()) + timestamps.sort() + start_date = datetime.fromisoformat( + timestamps[0].replace("Z", ISO_TZ_OFFSET) + ).strftime("%Y-%m-%d") + end_date = datetime.fromisoformat( + timestamps[-1].replace("Z", ISO_TZ_OFFSET) + ).strftime("%Y-%m-%d") + return {"start": start_date, "end": end_date} + + @property + def state(self) -> Optional[Union[str, float]]: + """Return the state of the sensor.""" + try: + _LOGGER.debug( + f"💰 [{self.entity_id}] Getting state for sensor: {self._sensor_type}" + ) + return self.native_value + except Exception as err: + _LOGGER.error( + f"💰 [{self.entity_id}] Error getting state: {err}", exc_info=True + ) + return None + + @property + def sensor_type(self) -> str: + """Return sensor type for compatibility.""" + return self._sensor_type + + def _calculate_fixed_final_price_for_datetime( + self, target_datetime: datetime + ) -> float: + """Vypočítat finální cenu s fixními obchodními cenami pro konkrétní datum/čas.""" + fixed_price_vt = self._entry.options.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = self._entry.options.get("fixed_commercial_price_nt", 3.20) + distribution_fee_vt_kwh = self._entry.options.get( + "distribution_fee_vt_kwh", 1.35 + ) + distribution_fee_nt_kwh = self._entry.options.get( + "distribution_fee_nt_kwh", 1.05 + ) + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + vat_rate = self._entry.options.get("vat_rate", 21.0) + + # Určení tarifu + if dual_tariff_enabled: + current_tariff = self._get_tariff_for_datetime(target_datetime) + else: + current_tariff = "VT" + + # Výběr ceny podle tarifu + commercial_price = fixed_price_vt if current_tariff == "VT" else fixed_price_nt + distribution_fee = ( + distribution_fee_vt_kwh + if current_tariff == "VT" + else distribution_fee_nt_kwh + ) + + # Finální cena + price_without_vat = commercial_price + distribution_fee + return round(price_without_vat * (1 + vat_rate / 100.0), 2) diff --git a/custom_components/oig_cloud/entities/base_sensor.py b/custom_components/oig_cloud/entities/base_sensor.py new file mode 100644 index 00000000..3fb1849d --- /dev/null +++ b/custom_components/oig_cloud/entities/base_sensor.py @@ -0,0 +1,64 @@ +"""Base sensor for OIG Cloud integration.""" + +import logging +from typing import Optional + +from homeassistant.components.sensor import SensorEntity +from homeassistant.helpers.update_coordinator import CoordinatorEntity + +from ..core.coordinator import OigCloudCoordinator +from .sensor_runtime import OigCloudSensorRuntimeMixin +from .sensor_setup import get_sensor_definition, resolve_box_id + +# Backwards-compatible alias for modules that still import _get_sensor_definition. +_get_sensor_definition = get_sensor_definition + +_LOGGER = logging.getLogger(__name__) + + +class OigCloudSensor(OigCloudSensorRuntimeMixin, CoordinatorEntity, SensorEntity): + """Base implementation of OIG Cloud sensor.""" + + def __init__(self, coordinator: OigCloudCoordinator, sensor_type: str) -> None: + """Initialize the sensor.""" + super().__init__(coordinator) + self._coordinator = coordinator + self._sensor_type = sensor_type + + try: + from ..sensor_types import SENSOR_TYPES + + self._sensor_config = SENSOR_TYPES.get(sensor_type, {}) + except ImportError: + _LOGGER.warning("Could not import SENSOR_TYPES for %s", sensor_type) + self._sensor_config = {} + + self._box_id = resolve_box_id(coordinator) + if self._box_id == "unknown": + _LOGGER.warning( + "No valid box_id found for %s, using fallback 'unknown'", sensor_type + ) + + _LOGGER.debug( + "Initialized sensor %s with box_id: %s", sensor_type, self._box_id + ) + + sensor_def = get_sensor_definition(sensor_type) + + if sensor_type.startswith("service_shield"): + _LOGGER.warning( + "🔍 ServiceShield %s definition: %s", sensor_type, sensor_def + ) + + self._attr_name = sensor_def.get("name", sensor_type) + self._attr_native_unit_of_measurement = sensor_def.get( + "unit" + ) or sensor_def.get("unit_of_measurement") + self._attr_icon = sensor_def.get("icon") + self._attr_device_class = sensor_def.get("device_class") + self._attr_state_class = sensor_def.get("state_class") + self._node_id: Optional[str] = sensor_def.get("node_id") + self._node_key: Optional[str] = sensor_def.get("node_key") + + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + _LOGGER.debug("Created sensor %s", self.entity_id) diff --git a/custom_components/oig_cloud/entities/battery_balancing_sensor.py b/custom_components/oig_cloud/entities/battery_balancing_sensor.py new file mode 100644 index 00000000..53abbb3b --- /dev/null +++ b/custom_components/oig_cloud/entities/battery_balancing_sensor.py @@ -0,0 +1,351 @@ +"""Simplified Battery Balancing Sensor - reads data from BalancingManager. + +This sensor only displays information, all planning logic is in BalancingManager. +""" + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.components.sensor import SensorEntity +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import EntityCategory +from homeassistant.core import HomeAssistant +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +from ..const import DOMAIN + +_LOGGER = logging.getLogger(__name__) + + +class OigCloudBatteryBalancingSensor(RestoreEntity, CoordinatorEntity, SensorEntity): + """Battery balancing status sensor - displays BalancingManager state.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + ) -> None: + """Initialize the battery balancing sensor.""" + super().__init__(coordinator) + + self._sensor_type = sensor_type + self._config_entry = config_entry + self._device_info = device_info + self._hass: Optional[HomeAssistant] = hass or getattr(coordinator, "hass", None) + + # Box ID (stabilní: config entry → proxy → coordinator numeric keys) + try: + from .base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + + # Entity setup + self._attr_unique_id = f"oig_cloud_{self._box_id}_{sensor_type}" + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + self._attr_icon = "mdi:battery-heart-variant" + self._attr_native_unit_of_measurement = None + self._attr_device_class = None + self._attr_state_class = None + self._attr_entity_category = EntityCategory.DIAGNOSTIC + + # Název senzoru + from ..sensors.SENSOR_TYPES_STATISTICS import SENSOR_TYPES_STATISTICS + + sensor_config = SENSOR_TYPES_STATISTICS.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + self._attr_name = name_cs or name_en or sensor_type + + # Cached state + self._last_balancing: Optional[datetime] = None + self._days_since_last: int = 99 + self._status: str = "unknown" + self._current_state: str = "standby" + self._planned_window: Optional[Dict[str, Any]] = None + self._last_planning_check: Optional[datetime] = None + + # Cost tracking + self._cost_immediate: Optional[float] = None + self._cost_selected: Optional[float] = None + self._cost_savings: Optional[float] = None + + # Configuration parameters + self._cycle_days: int = 7 + self._holding_hours: int = 3 + self._soc_threshold: int = 80 + + def _get_balancing_manager(self) -> Optional[Any]: + """Get BalancingManager from hass.data.""" + if not self._hass: + return None + + try: + entry_data = self._hass.data.get(DOMAIN, {}).get( + self._config_entry.entry_id, {} + ) + return entry_data.get("balancing_manager") + except Exception as e: + _LOGGER.debug(f"Could not get BalancingManager: {e}") + return None + + def _update_from_manager(self) -> None: + """Update sensor state from BalancingManager.""" + manager = self._get_balancing_manager() + if not manager: + # Keep last known state (RestoreEntity) if available. + self._status = self._status or "unknown" + return + + # Pull canonical state/attrs from manager API (avoids poking private fields). + try: + manager_attrs = manager.get_sensor_attributes() + except Exception as err: + _LOGGER.debug( + "Balancing sensor: manager state read failed: %s", err, exc_info=True + ) + self._status = "unknown" + return + + self._apply_config_params(manager) + self._apply_last_balancing(manager_attrs) + self._apply_costs(manager_attrs) + + active_plan = getattr(manager, "get_active_plan", lambda: None)() + self._planned_window = self._build_planned_window(active_plan) + + self._status = self._resolve_status(active_plan) + self._apply_current_state(active_plan) + + # Last planning check + self._last_planning_check = dt_util.now() + + def _apply_config_params(self, manager: Any) -> None: + self._cycle_days = self._safe_get_int(manager, "_get_cycle_days", 7) + self._holding_hours = self._safe_get_int(manager, "_get_holding_time_hours", 3) + self._soc_threshold = self._safe_get_int(manager, "_get_soc_threshold", 80) + + @staticmethod + def _safe_get_int(manager: Any, attr: str, fallback: int) -> int: + try: + return int(getattr(manager, attr)()) + except Exception: + return fallback + + def _apply_last_balancing(self, manager_attrs: Dict[str, Any]) -> None: + last_ts = manager_attrs.get("last_balancing_ts") + self._last_balancing = ( + _parse_dt_local(last_ts) if isinstance(last_ts, str) else None + ) + try: + days_since_val = manager_attrs.get("days_since_last") + self._days_since_last = ( + int(float(days_since_val)) if days_since_val is not None else 99 + ) + except Exception: + self._days_since_last = 99 + + def _apply_costs(self, manager_attrs: Dict[str, Any]) -> None: + self._cost_immediate = manager_attrs.get("immediate_cost_czk") + self._cost_selected = manager_attrs.get("selected_cost_czk") + self._cost_savings = manager_attrs.get("cost_savings_czk") + + def _build_planned_window(self, active_plan: Any) -> Optional[Dict[str, Any]]: + if not active_plan: + return None + holding_start = active_plan.holding_start + holding_end = active_plan.holding_end + intervals = [ + {"ts": i.ts, "mode": i.mode} for i in (active_plan.intervals or []) + ] + + charging_intervals = self._collect_charging_intervals( + intervals, holding_start + ) + + return { + "mode": getattr(active_plan.mode, "value", str(active_plan.mode)).lower(), + "priority": getattr( + active_plan.priority, "value", str(active_plan.priority) + ).lower(), + "holding_start": holding_start, + "holding_end": holding_end, + "reason": active_plan.reason, + "charging_intervals": charging_intervals, + "intervals": intervals, + } + + @staticmethod + def _collect_charging_intervals( + intervals: List[Dict[str, Any]], holding_start: Any + ) -> List[Any]: + charging_intervals: List[Any] = [] + try: + holding_start_dt = _parse_dt_local(holding_start) + if holding_start_dt: + for it in intervals: + ts = _parse_dt_local(it["ts"]) + if ts and ts < holding_start_dt: + charging_intervals.append(it["ts"]) + except Exception: + return [] + return charging_intervals + + def _resolve_status(self, active_plan: Any) -> str: + enabled = bool(self._config_entry.options.get("balancing_enabled", True)) + if not enabled: + return "disabled" + if active_plan: + prio = (getattr(active_plan.priority, "value", "") or "").lower() + mode = (getattr(active_plan.mode, "value", "") or "").lower() + if prio == "critical" or mode == "forced": + return "critical" + if prio == "high": + return "due_soon" + return "ok" + if self._days_since_last >= self._cycle_days: + return "overdue" + if self._days_since_last >= max(0, self._cycle_days - 2): + return "due_soon" + return "ok" + + def _apply_current_state(self, active_plan: Any) -> None: + self._current_state = "standby" + self._time_remaining = None + if not active_plan: + return + now = dt_util.now() + try: + hs = _parse_dt_local(active_plan.holding_start) + he = _parse_dt_local(active_plan.holding_end) + if hs and he: + if hs <= now < he: + self._current_state = "balancing" + remaining = he - now + self._time_remaining = _format_hhmm(remaining) + elif now < hs: + in_interval = self._is_now_in_intervals( + now, active_plan.intervals or [] + ) + self._current_state = "charging" if in_interval else "planned" + remaining = hs - now + self._time_remaining = _format_hhmm(remaining) + else: + self._current_state = "completed" + except Exception: + self._current_state = "standby" + + @staticmethod + def _is_now_in_intervals(now: datetime, intervals: List[Any]) -> bool: + for it in intervals: + ts = _parse_dt_local(it.ts) + if ts and ts <= now < (ts + timedelta(minutes=15)): + return True + return False + + @property + def native_value(self) -> str: + """Return the state of the sensor.""" + return self._status + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Return sensor attributes.""" + attrs = { + "last_balancing": ( + self._last_balancing.isoformat() if self._last_balancing else None + ), + "days_since_last": self._days_since_last, + "status": self._status, + "current_state": self._current_state, + "time_remaining": getattr(self, "_time_remaining", None), + "planned": self._planned_window, + "last_planning_check": ( + self._last_planning_check.isoformat() + if self._last_planning_check + else None + ), + # Configuration + "cycle_days": getattr(self, "_cycle_days", 7), + "holding_hours": getattr(self, "_holding_hours", 3), + "soc_threshold": getattr(self, "_soc_threshold", 80), + # Cost tracking + "cost_immediate_czk": getattr(self, "_cost_immediate", None), + "cost_selected_czk": getattr(self, "_cost_selected", None), + "cost_savings_czk": getattr(self, "_cost_savings", None), + } + return attrs + + @property + def device_info(self) -> Dict[str, Any]: + """Return device info.""" + return self._device_info + + def _handle_coordinator_update(self) -> None: + """Handle updated data from the coordinator.""" + self._update_from_manager() + super()._handle_coordinator_update() + + async def async_update(self) -> None: + """Update sensor state.""" + self._update_from_manager() + + async def async_added_to_hass(self) -> None: + """When entity is added to hass.""" + await super().async_added_to_hass() + self._hass = self.hass + + # Restore previous attributes/state if available (helps during startup). + try: + old_state = await self.async_get_last_state() + if old_state: + self._status = old_state.state or self._status + attrs = old_state.attributes or {} + last = attrs.get("last_balancing") + if isinstance(last, str): + dt = _parse_dt_local(last) + self._last_balancing = dt if dt else self._last_balancing + if attrs.get("days_since_last") is not None: + try: + self._days_since_last = int(attrs.get("days_since_last")) + except Exception as err: + _LOGGER.debug("Failed to restore days_since_last: %s", err) + self._planned_window = attrs.get("planned") or self._planned_window + self._cost_immediate = attrs.get( + "cost_immediate_czk", self._cost_immediate + ) + self._cost_selected = attrs.get( + "cost_selected_czk", self._cost_selected + ) + self._cost_savings = attrs.get("cost_savings_czk", self._cost_savings) + except Exception as err: + _LOGGER.debug("Failed to restore balancing state: %s", err) + + # Initial update + self._update_from_manager() + + +def _format_hhmm(delta: timedelta) -> str: + total = int(max(0, delta.total_seconds())) + h = total // 3600 + m = (total % 3600) // 60 + return f"{h:02d}:{m:02d}" + + +def _parse_dt_local(value: str) -> Optional[datetime]: + dt = dt_util.parse_datetime(value) + if dt is None: + try: + dt = datetime.fromisoformat(value) + except Exception: + return None + if dt.tzinfo is None: + dt = dt.replace(tzinfo=dt_util.DEFAULT_TIME_ZONE) + return dt_util.as_local(dt) diff --git a/custom_components/oig_cloud/entities/battery_health_sensor.py b/custom_components/oig_cloud/entities/battery_health_sensor.py new file mode 100644 index 00000000..ef022c4f --- /dev/null +++ b/custom_components/oig_cloud/entities/battery_health_sensor.py @@ -0,0 +1,574 @@ +"""Battery Health Monitoring - ZJEDNODUŠENÁ VERZE. + +Algoritmus: +1. Jednou denně (v 01:00) analyzuje posledních 10 dní z recorder states +2. Najde intervaly kde SoC MONOTÓNNĚ ROSTE (nikdy neklesne) o ≥50% +3. Kapacita = (charge_month[konec] - charge_month[začátek]) / delta_soc +4. Výsledky ukládá do HA Storage + +Žádné online sledování, žádné SoH limity, žádná kontrola discharge. +""" + +import asyncio +import logging +from dataclasses import asdict, dataclass +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorStateClass, +) +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant +from homeassistant.helpers.event import async_track_time_change +from homeassistant.helpers.storage import Store +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) + +# Storage version +STORAGE_VERSION = 1 +STORAGE_KEY_PREFIX = "oig_cloud.battery_health" + + +@dataclass +class CapacityMeasurement: + """Jedno měření kapacity baterie.""" + + timestamp: str # ISO format + start_soc: float + end_soc: float + delta_soc: float + charge_energy_wh: float + capacity_kwh: float + soh_percent: float + duration_hours: float + + +class BatteryHealthTracker: + """Tracker pro měření kapacity baterie z historie.""" + + def __init__( + self, + hass: HomeAssistant, + box_id: str, + nominal_capacity_kwh: float = 15.3, # kWh - skutečná kapacita baterie + ) -> None: + self._hass = hass + self._box_id = box_id + self._nominal_capacity_kwh = nominal_capacity_kwh + + # HA Storage + self._store = Store(hass, STORAGE_VERSION, f"{STORAGE_KEY_PREFIX}_{box_id}") + self._measurements: List[CapacityMeasurement] = [] + self._last_analysis: Optional[datetime] = None + + _LOGGER.info( + f"BatteryHealthTracker initialized, nominal capacity: {nominal_capacity_kwh:.2f} kWh" + ) + + async def async_load_from_storage(self) -> None: + """Načíst uložená měření ze storage.""" + try: + data = await self._store.async_load() + if data: + self._measurements = [ + CapacityMeasurement(**m) for m in data.get("measurements", []) + ] + if data.get("last_analysis"): + self._last_analysis = datetime.fromisoformat(data["last_analysis"]) + _LOGGER.info( + f"Loaded {len(self._measurements)} measurements from storage" + ) + except Exception as e: + _LOGGER.error(f"Error loading from storage: {e}") + + async def async_save_to_storage(self) -> None: + """Uložit měření do storage.""" + try: + data = { + "measurements": [ + asdict(m) for m in self._measurements[-100:] + ], # Max 100 + "last_analysis": ( + self._last_analysis.isoformat() if self._last_analysis else None + ), + "nominal_capacity_kwh": self._nominal_capacity_kwh, + } + await self._store.async_save(data) + _LOGGER.debug(f"Saved {len(self._measurements)} measurements to storage") + except Exception as e: + _LOGGER.error(f"Error saving to storage: {e}") + + async def analyze_last_10_days(self) -> List[CapacityMeasurement]: + """ + Analyzovat posledních 10 dní a najít čisté nabíjecí cykly. + + Returns: + List nových měření + """ + from homeassistant.components.recorder import get_instance + from homeassistant.components.recorder.history import get_significant_states + + end_time = dt_util.now() + start_time = end_time - timedelta(days=10) + + _LOGGER.info(f"Analyzing {start_time} to {end_time} for clean charging cycles") + + # Entity IDs - batt_bat_c je správný název (ne bat_c) + soc_sensor = f"sensor.oig_{self._box_id}_batt_bat_c" + charge_sensor = f"sensor.oig_{self._box_id}_computed_batt_charge_energy_month" + + try: + # Načíst historii z recorder + history = await get_instance(self._hass).async_add_executor_job( + get_significant_states, + self._hass, + start_time, + end_time, + [soc_sensor, charge_sensor], + None, # filters + True, # include_start_time_state + ) + + if not history: + _LOGGER.warning("No history data found") + return [] + + soc_states = history.get(soc_sensor, []) + charge_states = history.get(charge_sensor, []) + + if not soc_states or not charge_states: + _LOGGER.warning("Missing sensor data in history") + return [] + + _LOGGER.info( + f"Found {len(soc_states)} SoC states, {len(charge_states)} charge states" + ) + + # Najít monotónní nabíjecí intervaly + cycles = self._find_monotonic_charging_intervals(soc_states) + _LOGGER.info( + f"Found {len(cycles)} monotonic charging intervals (ΔSoC ≥50%)" + ) + + # Pro každý interval spočítat kapacitu + new_measurements = [] + for start_time_cycle, end_time_cycle, start_soc, end_soc in cycles: + measurement = self._calculate_capacity( + start_time_cycle, + end_time_cycle, + start_soc, + end_soc, + charge_states, + ) + if measurement: + # Zkontrolovat duplicity + is_duplicate = any( + m.timestamp == measurement.timestamp for m in self._measurements + ) + if not is_duplicate: + self._measurements.append(measurement) + new_measurements.append(measurement) + + self._last_analysis = dt_util.now() + + if new_measurements: + await self.async_save_to_storage() + _LOGGER.info(f"Found {len(new_measurements)} new clean charging cycles") + + return new_measurements + + except Exception as e: + _LOGGER.error(f"Error analyzing history: {e}", exc_info=True) + return [] + + def _find_monotonic_charging_intervals(self, soc_states: List) -> List[tuple]: + """ + Najít intervaly kde SoC MONOTÓNNĚ ROSTE (nikdy neklesne) o ≥50%. + + Returns: + List of (start_time, end_time, start_soc, end_soc) + """ + intervals: List[tuple] = [] + + interval_start_time = None + interval_start_soc = None + interval_max_soc = None + last_soc = None + prev_timestamp = None + + for state in soc_states: + if state.state in ["unknown", "unavailable"]: + continue + + try: + soc = float(state.state) + timestamp = state.last_changed + except (ValueError, TypeError): + continue + + if last_soc is None: + interval_start_time = timestamp + interval_start_soc = soc + interval_max_soc = soc + elif soc >= last_soc: + interval_max_soc = soc + else: + self._maybe_add_interval( + intervals, + interval_start_time, + prev_timestamp, + interval_start_soc, + interval_max_soc, + ) + interval_start_time = timestamp + interval_start_soc = soc + interval_max_soc = soc + + prev_timestamp = timestamp + last_soc = soc + + self._maybe_add_interval( + intervals, + interval_start_time, + prev_timestamp, + interval_start_soc, + interval_max_soc, + ) + + return intervals + + @staticmethod + def _maybe_add_interval( + intervals: List[tuple], + start_time: Optional[datetime], + end_time: Optional[datetime], + start_soc: Optional[float], + end_soc: Optional[float], + ) -> None: + if start_soc is None or end_soc is None or start_time is None: + return + delta_soc = end_soc - start_soc + if delta_soc < 50 or end_time is None: + return + intervals.append((start_time, end_time, start_soc, end_soc)) + _LOGGER.debug( + "Found interval: %.0f%%→%.0f%% (Δ%.0f%%)", + start_soc, + end_soc, + delta_soc, + ) + + def _calculate_capacity( + self, + start_time: datetime, + end_time: datetime, + start_soc: float, + end_soc: float, + charge_states: List, + ) -> Optional[CapacityMeasurement]: + """ + Spočítat kapacitu pro monotónní nabíjecí interval. + + capacity = charge_energy / delta_soc + """ + # Získat hodnoty charge_month na začátku a konci + charge_start = self._get_value_at_time(charge_states, start_time) + charge_end = self._get_value_at_time(charge_states, end_time) + + if charge_start is None or charge_end is None: + _LOGGER.debug( + f"Missing charge values for interval {start_time} → {end_time}" + ) + return None + + charge_energy = charge_end - charge_start + + # Kontrola resetu měsíce (záporná hodnota = reset) + if charge_energy < 0: + _LOGGER.debug("Interval rejected: charge_month reset detected") + return None + + # Kontrola minimální energie (filtr šumu) + if charge_energy < 1000: # Méně než 1 kWh + _LOGGER.debug( + f"Interval rejected: too little energy ({charge_energy:.0f} Wh)" + ) + return None + + # charge_energy z computed_batt_charge_energy_month je měřena na AC straně střídače + # Pro výpočet kapacity potřebujeme DC energii uloženou v baterii + # Použijeme odmocninu z round-trip účinnosti jako přibližnou nabíjecí účinnost + # (round-trip = nabíjecí × vybíjecí, obě jsou podobné) + efficiency_sensor = f"sensor.oig_{self._box_id}_battery_efficiency" + efficiency_state = self._hass.states.get(efficiency_sensor) + if efficiency_state and efficiency_state.state not in [ + "unknown", + "unavailable", + ]: + try: + round_trip_eff = float(efficiency_state.state) / 100.0 + # Nabíjecí účinnost ≈ √(round_trip) - obě směry mají podobnou účinnost + charging_efficiency = round_trip_eff**0.5 + except (ValueError, TypeError): + charging_efficiency = 0.97 # Fallback (~√0.94) + else: + charging_efficiency = 0.97 # Fallback pokud senzor neexistuje + + # Reálně uložená energie = nabíjená energie × nabíjecí účinnost + stored_energy = charge_energy * charging_efficiency + + # Výpočet kapacity: energie / delta_soc + delta_soc = end_soc - start_soc + capacity_kwh = (stored_energy / 1000.0) / (delta_soc / 100.0) + soh_percent = (capacity_kwh / self._nominal_capacity_kwh) * 100.0 + + # Sanity check: odmítnout nereálné hodnoty + # Integrální senzor energie může mít chyby (vzorkování, zaokrouhlování, drift) + # Proto tolerujeme SoH až do 105% (5% tolerance pro měřicí chyby) + # Pod 70% je extrémní degradace - pravděpodobně chyba měření + if soh_percent > 105.0: + _LOGGER.warning( + f"Interval rejected: SoH {soh_percent:.1f}% > 105%% (measurement error), " + f"capacity={capacity_kwh:.2f} kWh, ΔSoC={delta_soc:.0f}%, " + f"charge={charge_energy:.0f} Wh, eff={charging_efficiency:.1%}" + ) + return None + if soh_percent < 70.0: + _LOGGER.warning( + f"Interval rejected: SoH {soh_percent:.1f}% < 70%% (extreme degradation or error), " + f"capacity={capacity_kwh:.2f} kWh, ΔSoC={delta_soc:.0f}%, " + f"charge={charge_energy:.0f} Wh, eff={charging_efficiency:.1%}" + ) + return None + + # Omezit SoH na max 100% pro zobrazení (i když měření ukazuje víc kvůli chybám) + soh_percent = min(soh_percent, 100.0) + + duration = end_time - start_time + duration_hours = duration.total_seconds() / 3600 + + measurement = CapacityMeasurement( + timestamp=end_time.isoformat(), + start_soc=start_soc, + end_soc=end_soc, + delta_soc=delta_soc, + charge_energy_wh=charge_energy, + capacity_kwh=round(capacity_kwh, 3), + soh_percent=round(soh_percent, 1), + duration_hours=round(duration_hours, 2), + ) + + _LOGGER.info( + f"✅ Valid interval: {start_soc:.0f}%→{end_soc:.0f}% (Δ{delta_soc:.0f}%), " + f"charge={charge_energy:.0f} Wh (stored={stored_energy:.0f} Wh @{charging_efficiency:.1%}), " + f"capacity={capacity_kwh:.2f} kWh, SoH={soh_percent:.1f}%" + ) + + return measurement + + def _get_value_at_time( + self, states: List, target_time: datetime + ) -> Optional[float]: + """Získat hodnotu sensoru nejblíže k target_time.""" + if not states: + return None + + closest_state = min( + states, + key=lambda s: abs((s.last_changed - target_time).total_seconds()), + ) + + try: + return float(closest_state.state) + except (ValueError, TypeError): + return None + + def get_current_soh(self) -> Optional[float]: + """Získat aktuální SoH (průměr z posledních měření).""" + if not self._measurements: + return None + + # Průměr z posledních 5 měření s jednoduchým filtrem odlehlých hodnot. + recent = self._measurements[-5:] + if len(recent) < 2: + return None + values = [m.soh_percent for m in recent] + sorted_values = sorted(values) + mid = len(sorted_values) // 2 + if len(sorted_values) % 2 == 0: + median = (sorted_values[mid - 1] + sorted_values[mid]) / 2 + else: + median = sorted_values[mid] + filtered = [v for v in values if abs(v - median) <= 5.0] + if not filtered: + filtered = values + return sum(filtered) / len(filtered) + + def get_current_capacity(self) -> Optional[float]: + """Získat aktuální kapacitu (průměr z posledních měření).""" + if not self._measurements: + return None + + recent = self._measurements[-5:] + if len(recent) < 2: + return None + values = [m.capacity_kwh for m in recent] + sorted_values = sorted(values) + mid = len(sorted_values) // 2 + if len(sorted_values) % 2 == 0: + median = (sorted_values[mid - 1] + sorted_values[mid]) / 2 + else: + median = sorted_values[mid] + filtered = [v for v in values if abs(v - median) <= 1.0] + if not filtered: + filtered = values + return sum(filtered) / len(filtered) + + +class BatteryHealthSensor(CoordinatorEntity, SensorEntity): + """Sensor pro zobrazení zdraví baterie.""" + + _attr_has_entity_name = True + _attr_native_unit_of_measurement = "%" + _attr_device_class = SensorDeviceClass.BATTERY + _attr_state_class = SensorStateClass.MEASUREMENT + _attr_icon = "mdi:battery-heart-variant" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + hass: Optional[HomeAssistant] = None, + ) -> None: + """Initialize battery health sensor.""" + super().__init__(coordinator) + + self._sensor_type = sensor_type + self._config_entry = config_entry + self._device_info_dict = device_info + self._hass_ref: Optional[HomeAssistant] = hass or getattr( + coordinator, "hass", None + ) + + # Stabilní box_id resolution (config entry → proxy → coordinator numeric keys) + try: + from .base_sensor import resolve_box_id + + self._box_id = resolve_box_id(coordinator) + except Exception: + self._box_id = "unknown" + + self._attr_unique_id = f"oig_cloud_{self._box_id}_{sensor_type}" + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + self._attr_name = "Battery Health (SoH)" + + # Nominální kapacita + self._nominal_capacity_kwh: float = 15.3 # kWh - skutečná kapacita baterie + + # Tracker - bude inicializován v async_added_to_hass + self._tracker: Optional[BatteryHealthTracker] = None + + # Denní analýza + self._daily_unsub = None + + _LOGGER.info(f"Battery Health sensor initialized for box {self._box_id}") + + async def async_added_to_hass(self) -> None: + """Při přidání do HA.""" + await super().async_added_to_hass() + + # Inicializovat tracker + self._tracker = BatteryHealthTracker( + hass=self.hass, + box_id=self._box_id, + nominal_capacity_kwh=self._nominal_capacity_kwh, + ) + + # Načíst ze storage + await self._tracker.async_load_from_storage() + + # Naplánovat denní analýzu v 01:00 + self._daily_unsub = async_track_time_change( + self.hass, self._daily_analysis, hour=1, minute=0, second=0 + ) + _LOGGER.info("Scheduled daily battery health analysis at 01:00") + + # Spustit analýzu na pozadí (po startu HA) + self.hass.async_create_task(self._initial_analysis()) + + async def async_will_remove_from_hass(self) -> None: + """Při odstranění z HA.""" + if self._daily_unsub: + self._daily_unsub() + + async def _initial_analysis(self) -> None: + """Počáteční analýza po startu.""" + # Počkat 60 sekund na stabilizaci HA + await asyncio.sleep(60) + await self._tracker.analyze_last_10_days() + self.async_write_ha_state() + + async def _daily_analysis(self, _now: datetime) -> None: + """Denní analýza v 01:00.""" + _LOGGER.info("Starting daily battery health analysis") + if self._tracker: + await self._tracker.analyze_last_10_days() + self.async_write_ha_state() + + @property + def device_info(self) -> Dict[str, Any]: + """Device info.""" + return self._device_info_dict + + @property + def native_value(self) -> Optional[float]: + """Vrátit aktuální SoH.""" + if not self._tracker: + return None + soh = self._tracker.get_current_soh() + return round(soh, 1) if soh else None + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Extra atributy.""" + if not self._tracker: + return {"nominal_capacity_kwh": self._nominal_capacity_kwh} + + attrs = { + "nominal_capacity_kwh": self._nominal_capacity_kwh, + "measurement_count": len(self._tracker._measurements), + "last_analysis": ( + self._tracker._last_analysis.isoformat() + if self._tracker._last_analysis + else None + ), + } + + # Aktuální kapacita + capacity = self._tracker.get_current_capacity() + if capacity: + attrs["current_capacity_kwh"] = round(capacity, 2) + attrs["capacity_loss_kwh"] = round(self._nominal_capacity_kwh - capacity, 2) + + # Poslední měření + if self._tracker._measurements: + recent = self._tracker._measurements[-5:] + attrs["recent_measurements"] = [ + { + "timestamp": m.timestamp, + "capacity_kwh": m.capacity_kwh, + "soh_percent": m.soh_percent, + "delta_soc": m.delta_soc, + "charge_wh": m.charge_energy_wh, + } + for m in recent + ] + + return attrs diff --git a/custom_components/oig_cloud/entities/chmu_sensor.py b/custom_components/oig_cloud/entities/chmu_sensor.py new file mode 100644 index 00000000..95f78f10 --- /dev/null +++ b/custom_components/oig_cloud/entities/chmu_sensor.py @@ -0,0 +1,491 @@ +"""ČHMÚ weather warning sensors pro OIG Cloud integraci.""" + +import asyncio +import logging +import time +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +from homeassistant.config_entries import ConfigEntry +from homeassistant.helpers import aiohttp_client +from homeassistant.helpers.event import async_track_time_interval +from homeassistant.helpers.storage import Store + +from .base_sensor import OigCloudSensor + +_LOGGER = logging.getLogger(__name__) + +CHMU_CAP_FEED_SOURCE = "ČHMÚ CAP Feed" +CHMU_NONE_LABEL = "Žádné" + + +class OigCloudChmuSensor(OigCloudSensor): + """Senzor pro ČHMÚ meteorologická varování.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], + ) -> None: + super().__init__(coordinator, sensor_type) + self._config_entry = config_entry + self._device_info = device_info + + # Nastavit název podle name_cs + from ..sensors.SENSOR_TYPES_CHMU import SENSOR_TYPES_CHMU + + sensor_config = SENSOR_TYPES_CHMU.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + + self._attr_name = name_cs or name_en or sensor_type + + self._last_warning_data: Optional[Dict[str, Any]] = None + self._last_api_call: float = 0 + self._update_interval_remover: Optional[Any] = None + + # Storage key pro persistentní uložení + self._storage_key = f"oig_chmu_warnings_{self._box_id}" + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - nastavit periodické aktualizace.""" + await super().async_added_to_hass() + + # Načtení dat z persistentního úložiště + await self._load_persistent_data() + + # Nastavit hodinové aktualizace (60 minut) + interval = timedelta(hours=1) + self._update_interval_remover = async_track_time_interval( + self.hass, self._periodic_update, interval + ) + _LOGGER.debug("🌦️ ČHMÚ warnings periodic updates enabled (60 min)") + + # Okamžitá inicializace dat při startu - pouze pro hlavní senzor + if self._sensor_type == "chmu_warning_level" and self._should_fetch_data(): + _LOGGER.debug( + f"🌦️ Data is outdated (last call: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S') if self._last_api_call else 'never'}), triggering immediate fetch" + ) + # Spustíme úlohu na pozadí s malým zpožděním + self.hass.async_create_task(self._delayed_initial_fetch()) + else: + # Pokud máme načtená data z úložiště, sdílíme je s koordinátorem + if self._last_warning_data: + if hasattr(self.coordinator, "chmu_warning_data"): + self.coordinator.chmu_warning_data = self._last_warning_data + else: + setattr( + self.coordinator, + "chmu_warning_data", + self._last_warning_data, + ) + _LOGGER.debug( + f"🌦️ Loaded warning data from storage (last call: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}), skipping immediate fetch" + ) + + async def _load_persistent_data(self) -> None: + """Načte data z persistentního úložiště.""" + try: + store = Store( + self.hass, + version=1, + key=self._storage_key, + ) + data = await store.async_load() + + if data: + # Načtení času posledního API volání + if isinstance(data.get("last_api_call"), (int, float)): + self._last_api_call = float(data["last_api_call"]) + _LOGGER.debug( + f"🌦️ Loaded last API call time: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}" + ) + + # Načtení warning dat + if isinstance(data.get("warning_data"), dict): + self._last_warning_data = data["warning_data"] + _LOGGER.debug("🌦️ Loaded warning data from storage") + else: + _LOGGER.debug("🌦️ No warning data found in storage") + else: + _LOGGER.debug("🌦️ No previous data found in storage") + + except Exception as e: + _LOGGER.warning(f"🌦️ Failed to load persistent data: {e}") + self._last_api_call = 0 + self._last_warning_data = None + + async def _save_persistent_data(self) -> None: + """Uloží data do persistentního úložiště.""" + try: + store = Store( + self.hass, + version=1, + key=self._storage_key, + ) + + save_data = { + "last_api_call": self._last_api_call, + "warning_data": self._last_warning_data, + "saved_at": datetime.now().isoformat(), + } + + await store.async_save(save_data) + _LOGGER.debug( + f"🌦️ Saved persistent data: API call time {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}" + ) + except Exception as e: + _LOGGER.warning(f"🌦️ Failed to save persistent data: {e}") + + def _should_fetch_data(self) -> bool: + """Rozhodne zda je potřeba načíst nová data.""" + current_time = time.time() + + # Pokud nemáme žádná data + if not self._last_api_call: + return True + + time_since_last = current_time - self._last_api_call + + # Fetch pokud už uplynula hodina (3600 sekund) + return time_since_last >= 3600 + + async def _delayed_initial_fetch(self) -> None: + """Zpožděné počáteční stažení dat.""" + # Počkat 5 sekund na inicializaci HA + await asyncio.sleep(5) + await self._fetch_warning_data() + + async def _periodic_update(self, now: datetime) -> None: + """Periodická aktualizace dat.""" + if self._sensor_type == "chmu_warning_level": + await self._fetch_warning_data() + + async def _fetch_warning_data(self) -> None: + """Stažení dat z ČHMÚ API.""" + try: + _LOGGER.debug("🌦️ Fetching ČHMÚ warning data") + + # Získat GPS souřadnice + latitude, longitude = self._get_gps_coordinates() + + if latitude is None or longitude is None: + _LOGGER.error("🌦️ No GPS coordinates available, cannot fetch warnings") + self._attr_available = False + return + + # Získat ČHMÚ API klienta z coordinatoru + if ( + not hasattr(self.coordinator, "chmu_api") + or not self.coordinator.chmu_api + ): + _LOGGER.error("🌦️ ČHMÚ API not initialized in coordinator") + self._attr_available = False + return + + # Fetch data pomocí aiohttp session z HA + session = aiohttp_client.async_get_clientsession(self.hass) + + warning_data = await self.coordinator.chmu_api.get_warnings( + latitude, longitude, session + ) + + # Uložit data + self._last_warning_data = warning_data + self._last_api_call = time.time() + + # Sdílet data s koordinátorem + self.coordinator.chmu_warning_data = warning_data + + # Uložit do persistentního úložiště + await self._save_persistent_data() + + # Označit jako dostupný + self._attr_available = True + + _LOGGER.debug( + f"🌦️ ČHMÚ warnings updated: " + f"{warning_data['all_warnings_count']} total, " + f"{warning_data['local_warnings_count']} local, " + f"severity={warning_data['severity_level']}" + ) + + except Exception as e: + # ChmuApiError (including HTTP 404) is expected when endpoint changes; don't spam tracebacks. + try: + from ..api.api_chmu import ChmuApiError + + if isinstance(e, ChmuApiError): + _LOGGER.warning("🌦️ ČHMÚ API error: %s", e) + else: + raise + except Exception: + _LOGGER.error(f"🌦️ Error fetching ČHMÚ warning data: {e}", exc_info=True) + # DŮLEŽITÉ: Při chybě API zachováváme stará data místo jejich mazání! + if self._last_warning_data: + _LOGGER.warning( + f"🌦️ ČHMÚ API nedostupné - používám cached data z {self._last_warning_data.get('last_update', 'unknown')}" + ) + # Ponecháváme self._attr_available = True, protože máme stará platná data + else: + # Nemáme žádná data - označíme jako nedostupný + self._attr_available = False + + def _get_gps_coordinates(self) -> tuple[Optional[float], Optional[float]]: + """ + Získá GPS souřadnice v pořadí priority: + 1. Solar Forecast config + 2. HA General Settings + 3. Praha default + """ + # 1. Solar Forecast config + if self._config_entry.options.get("enable_solar_forecast", False): + lat = self._config_entry.options.get("solar_forecast_latitude") + lon = self._config_entry.options.get("solar_forecast_longitude") + if lat is not None and lon is not None: + _LOGGER.debug(f"🌦️ Using GPS from Solar Forecast: {lat}, {lon}") + return (float(lat), float(lon)) + + # 2. HA General Settings + if hasattr(self.hass.config, "latitude") and hasattr( + self.hass.config, "longitude" + ): + lat = self.hass.config.latitude + lon = self.hass.config.longitude + if lat is not None and lon is not None: + _LOGGER.debug(f"🌦️ Using GPS from HA config: {lat}, {lon}") + return (float(lat), float(lon)) + + # 3. Praha default + _LOGGER.warning("🌦️ No GPS configured, using Praha default") + return (50.0875, 14.4213) + + def _get_warning_data(self) -> Optional[Dict[str, Any]]: + if self._last_warning_data: + return self._last_warning_data + if hasattr(self.coordinator, "chmu_warning_data"): + data = getattr(self.coordinator, "chmu_warning_data", None) + if isinstance(data, dict): + self._last_warning_data = data + return data + return None + + @property + def available(self) -> bool: + """ČHMÚ warnings are available when we have cached data (even if coordinator isn't ready yet).""" + if self._get_warning_data(): + return True + return super().available + + def _compute_severity(self) -> int: + """Compute severity level (0-4).""" + data = self._get_warning_data() + if not data: + return 0 + + if self._sensor_type == "chmu_warning_level_global": + return int(data.get("highest_severity_cz", 0) or 0) + + # Local sensor - only treat as warning if there is at least 1 real alert + top = data.get("top_local_warning") or {} + event = (top.get("event") or "").strip() + if not event or event.startswith("Žádná") or event.startswith("Žádný"): + return 0 + return int(data.get("severity_level", 0) or 0) + + @property + def native_value(self) -> int: + return self._compute_severity() + + # Backward-compat for older dashboards/HA versions + @property + def state(self) -> int: # pragma: no cover - HA compatibility + return self._compute_severity() + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Vrátí atributy senzoru.""" + if not self._get_warning_data(): + return _empty_warning_attrs() + + severity_distribution = self._get_severity_distribution() + + if self._sensor_type == "chmu_warning_level_global": + return _build_global_warning_attrs( + self._last_warning_data, severity_distribution + ) + + return _build_local_warning_attrs( + self._last_warning_data, severity_distribution + ) + + def _get_severity_distribution(self) -> Dict[str, int]: + """Vrátí rozdělení severity pro všechna varování.""" + if not self._last_warning_data: + return {"Minor": 0, "Moderate": 0, "Severe": 0, "Extreme": 0} + + all_warnings = self._last_warning_data.get("all_warnings", []) + distribution = {"Minor": 0, "Moderate": 0, "Severe": 0, "Extreme": 0} + + for warning in all_warnings: + severity = warning.get("severity", "Unknown") + if severity in distribution: + distribution[severity] += 1 + + return distribution + + @property + def icon(self) -> str: + """Vrátí ikonu podle severity.""" + severity = self.state + + if severity >= 4: + return "mdi:alert-octagon" # Extreme - červená osmihran + elif severity >= 3: + return "mdi:alert" # Severe - výkřičník + elif severity >= 2: + return "mdi:alert-circle" # Moderate - kolečko + elif severity >= 1: + return "mdi:alert-circle-outline" # Minor - outline + else: + return "mdi:check-circle-outline" # Žádné varování - check + + @property + def device_info(self) -> Dict[str, Any]: + """Vrátí device info.""" + return self._device_info + + +def _empty_warning_attrs() -> Dict[str, Any]: + return { + "warnings_count": 0, + "last_update": None, + "source": CHMU_CAP_FEED_SOURCE, + "all_warnings_details": [], + } + + +def _build_global_warning_attrs( + data: Dict[str, Any], severity_distribution: Dict[str, int] +) -> Dict[str, Any]: + all_warnings_raw = data.get("all_warnings", []) + all_warnings_limited = [_short_warning(w) for w in all_warnings_raw[:5]] + return { + "warnings_count": data.get("all_warnings_count", 0), + "all_warnings": all_warnings_limited, + "all_warnings_details": all_warnings_limited, + "warnings_truncated": len(all_warnings_raw) > 5, + "highest_severity": data.get("highest_severity_cz", 0), + "severity_distribution": severity_distribution, + "last_update": data.get("last_update"), + "source": data.get("source", CHMU_CAP_FEED_SOURCE), + } + + +def _short_warning(warning: Dict[str, Any]) -> Dict[str, Any]: + desc = warning.get("description", "") + return { + "event": warning.get("event", ""), + "severity": warning.get("severity", 0), + "onset": warning.get("onset", ""), + "expires": warning.get("expires", ""), + "description": desc[:117] + "..." if len(desc) > 120 else desc, + } + + +def _build_local_warning_attrs( + data: Dict[str, Any], severity_distribution: Dict[str, int] +) -> Dict[str, Any]: + top_warning = data.get("top_local_warning") + if not top_warning: + return _no_local_warning_attrs(data) + + all_local_events, all_warnings_details = _collect_local_warning_details(data) + desc = _trim_text(top_warning.get("description", ""), limit=300) + instr = _trim_text(top_warning.get("instruction", ""), limit=300) + + return { + "event_type": top_warning.get("event", CHMU_NONE_LABEL), + "severity": top_warning.get("severity", CHMU_NONE_LABEL), + "onset": top_warning.get("onset"), + "expires": top_warning.get("expires"), + "eta_hours": top_warning.get("eta_hours", 0), + "description": desc, + "instruction": instr, + "warnings_count": len(all_local_events), + "all_warnings": all_local_events[:5], + "all_warnings_details": all_warnings_details, + "last_update": data.get("last_update"), + "severity_distribution": severity_distribution, + "source": data.get("source", CHMU_CAP_FEED_SOURCE), + } + + +def _no_local_warning_attrs(data: Dict[str, Any]) -> Dict[str, Any]: + return { + "event_type": CHMU_NONE_LABEL, + "severity": CHMU_NONE_LABEL, + "onset": None, + "expires": None, + "eta_hours": 0, + "description": "", + "instruction": "", + "warnings_count": 0, + "all_warnings": [], + "all_warnings_details": [], + "last_update": data.get("last_update"), + "source": data.get("source", CHMU_CAP_FEED_SOURCE), + } + + +def _collect_local_warning_details( + data: Dict[str, Any], +) -> tuple[list[str], list[dict[str, Any]]]: + all_local_events: list[str] = [] + all_warnings_details: list[dict[str, Any]] = [] + for warning in data.get("local_warnings", []): + event = warning.get("event", "") + if event.startswith("Žádná") or event.startswith("Žádný"): + continue + all_local_events.append(event) + if len(all_warnings_details) < 5: + all_warnings_details.append( + { + "event": event, + "severity": warning.get("severity", ""), + "onset": warning.get("onset"), + "expires": warning.get("expires"), + "regions": _regions_from_warning(warning), + "description": _trim_text(warning.get("description", "")), + "instruction": _trim_text(warning.get("instruction", "")), + } + ) + return all_local_events, all_warnings_details + + +def _regions_from_warning(warning: Dict[str, Any]) -> list[str]: + regions: list[str] = [] + try: + for area in warning.get("areas") or []: + desc = (area or {}).get("description") + if isinstance(desc, str) and desc.strip(): + regions.append(desc.strip()) + except Exception: + regions = [] + out: list[str] = [] + for region in regions: + if region not in out: + out.append(region) + if len(out) >= 8: + break + return out + + +def _trim_text(value: Any, limit: int = 220) -> str: + text = value if isinstance(value, str) else "" + text = text.strip() + if len(text) > limit: + return text[: limit - 3] + "..." + return text diff --git a/custom_components/oig_cloud/entities/computed_sensor.py b/custom_components/oig_cloud/entities/computed_sensor.py new file mode 100755 index 00000000..b7999e42 --- /dev/null +++ b/custom_components/oig_cloud/entities/computed_sensor.py @@ -0,0 +1,893 @@ +"""Computed sensor implementation for OIG Cloud integration.""" + +import asyncio +import logging +from datetime import datetime, timedelta, timezone +from typing import Any, Dict, Optional, Union + +from homeassistant.helpers.event import async_track_time_change +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +from ..sensor_types import SENSOR_TYPES +from .base_sensor import OigCloudSensor + +_LOGGER = logging.getLogger(__name__) + +# Shared storage for all energy sensors per box +# Key: oig_cloud.energy_data_{box_id} +# Structure: {"energy": {...}, "last_save": "ISO timestamp", "version": 1} +ENERGY_STORAGE_VERSION = 1 +_energy_stores: Dict[str, Store] = {} +_energy_data_cache: Dict[str, Dict[str, float]] = {} +_energy_last_update_cache: Dict[str, datetime] = {} +_energy_cache_loaded: Dict[str, bool] = {} +PROXY_LAST_DATA_ENTITY_ID = "sensor.oig_local_oig_proxy_proxy_status_last_data" + +_LANGS: Dict[str, Dict[str, str]] = { + "on": {"en": "On", "cs": "Zapnuto"}, + "off": {"en": "Vypnuto", "cs": "Vypnuto"}, + "unknown": {"en": "Unknown", "cs": "Neznámý"}, + "changing": {"en": "Changing in progress", "cs": "Probíhá změna"}, +} + + +class OigCloudComputedSensor(OigCloudSensor, RestoreEntity): + def __init__(self, coordinator: Any, sensor_type: str) -> None: + super().__init__(coordinator, sensor_type) + + sensor_config = SENSOR_TYPES.get(sensor_type, {}) + + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + self._attr_name = name_cs or name_en or sensor_type + + self._last_update: Optional[datetime] = None + self._attr_extra_state_attributes: Dict[str, Any] = {} + + self._energy: Dict[str, float] = { + "charge_today": 0.0, + "charge_month": 0.0, + "charge_year": 0.0, + "discharge_today": 0.0, + "discharge_month": 0.0, + "discharge_year": 0.0, + "charge_fve_today": 0.0, + "charge_fve_month": 0.0, + "charge_fve_year": 0.0, + "charge_grid_today": 0.0, + "charge_grid_month": 0.0, + "charge_grid_year": 0.0, + } + + self._last_update_time: Optional[datetime] = None + self._monitored_sensors: Dict[str, Any] = {} + + # Persistent storage flag - will save periodically + self._last_storage_save: Optional[datetime] = None + self._storage_save_interval = timedelta(minutes=5) + + # Speciální handling pro real_data_update senzor + if sensor_type == "real_data_update": + self._is_real_update_sensor = True + self._initialize_monitored_sensors() + else: + self._is_real_update_sensor = False + + # Unsubscribe handle for daily reset callback + self._daily_reset_unsub = None + + def _get_entity_number(self, entity_id: str) -> Optional[float]: + """Read numeric value from HA state.""" + if not getattr(self, "hass", None): + return None + st = self.hass.states.get(entity_id) + if not st or st.state in (None, "unknown", "unavailable", ""): + return None + try: + return float(st.state) + except (ValueError, TypeError): + return None + + def _get_oig_number(self, sensor_type: str) -> Optional[float]: + box = self._box_id + if not (isinstance(box, str) and box.isdigit()): + return None + return self._get_entity_number(f"sensor.oig_{box}_{sensor_type}") + + def _get_oig_last_updated(self, sensor_type: str) -> Optional[datetime]: + if not getattr(self, "hass", None): + return None + box = self._box_id + if not (isinstance(box, str) and box.isdigit()): + return None + st = self.hass.states.get(f"sensor.oig_{box}_{sensor_type}") + if not st: + return None + try: + dt = st.last_changed + if dt is None: + return None + return self._normalize_timestamp(dt) + except Exception: + return None + + @staticmethod + def _normalize_timestamp(dt: datetime) -> datetime: + return dt_util.as_utc(dt) if dt.tzinfo else dt.replace(tzinfo=dt_util.UTC) + + def _parse_state_timestamp(self, state_value: str) -> Optional[datetime]: + try: + parsed = dt_util.parse_datetime(state_value) or datetime.fromisoformat( + state_value + ) + except Exception: + return None + if parsed is None: + return None # pragma: no cover + return self._normalize_timestamp(parsed) + + def _get_entity_timestamp(self, entity_id: str) -> Optional[datetime]: + if not getattr(self, "hass", None): + return None + st = self.hass.states.get(entity_id) + if not st or st.state in (None, "unknown", "unavailable", ""): + return None + if isinstance(st.state, str): + parsed = self._parse_state_timestamp(st.state) + if parsed is not None: + return parsed + try: + dt = st.last_updated or st.last_changed + if dt is None: + return None + return self._normalize_timestamp(dt) + except Exception: + return None + + def _iter_oig_states(self, domain: str, box: str): + states_obj = getattr(self.hass, "states", None) + async_all = getattr(states_obj, "async_all", None) + if not callable(async_all): + return [] + prefix = f"{domain}.oig_{box}_" + return [ + st + for st in async_all(domain) + if getattr(st, "entity_id", "").startswith(prefix) + and st.state not in (None, "unknown", "unavailable", "") + ] + + def _get_latest_oig_entity_update(self) -> Optional[datetime]: + if not getattr(self, "hass", None): + return None + box = self._box_id + if not (isinstance(box, str) and box.isdigit()): + return None + latest: Optional[datetime] = None + for domain in ("sensor", "binary_sensor"): + for st in self._iter_oig_states(domain, box): + dt = st.last_changed + if dt is None: + continue + dt_utc = self._normalize_timestamp(dt) + latest = dt_utc if latest is None else max(latest, dt_utc) + return latest + + def _get_energy_store(self) -> Optional[Store]: + """Get or create the shared energy store for this box.""" + if self._box_id not in _energy_stores and hasattr(self, "hass") and self.hass: + _energy_stores[self._box_id] = Store( + self.hass, + version=ENERGY_STORAGE_VERSION, + key=f"oig_cloud.energy_data_{self._box_id}", + ) + _LOGGER.debug( + f"✅ Initialized Energy Storage: oig_cloud.energy_data_{self._box_id}" + ) + return _energy_stores.get(self._box_id) + + def _has_numeric_box(self) -> bool: + return isinstance(self._box_id, str) and self._box_id.isdigit() + + def _state_real_data_update(self) -> Optional[str]: + candidates = [ + self._get_oig_last_updated("batt_batt_comp_p"), + self._get_oig_last_updated("batt_bat_c"), + self._get_oig_last_updated("device_lastcall"), + self._get_entity_timestamp(PROXY_LAST_DATA_ENTITY_ID), + self._get_latest_oig_entity_update(), + ] + latest = max((dt for dt in candidates if dt), default=None) + return dt_util.as_local(latest).isoformat() if latest else None + + def _sum_three_phase(self, base: str) -> Optional[float]: + wr = self._get_oig_number(f"{base}_wr") + ws = self._get_oig_number(f"{base}_ws") + wt = self._get_oig_number(f"{base}_wt") + if wr is None or ws is None or wt is None: + return None + return float(wr + ws + wt) + + def _sum_two_phase(self, base: str) -> Optional[float]: + p1 = self._get_oig_number(f"{base}_p1") + p2 = self._get_oig_number(f"{base}_p2") + if p1 is None or p2 is None: + return None + return float(p1 + p2) + + def _get_battery_params(self) -> Optional[Dict[str, float]]: + try: + bat_p_wh = float( + self._get_oig_number("installed_battery_capacity_kwh") or 0.0 + ) + bat_min_percent = float(self._get_oig_number("batt_bat_min") or 20.0) + bat_c = float(self._get_oig_number("batt_bat_c") or 0.0) + bat_power = float(self._get_oig_number("batt_batt_comp_p") or 0.0) + return { + "bat_p_wh": bat_p_wh, + "bat_min_percent": bat_min_percent, + "bat_c": bat_c, + "bat_power": bat_power, + } + except Exception as err: + _LOGGER.debug("[%s] Error computing value: %s", self.entity_id, err) + return None + + def _state_battery_metrics(self) -> Optional[Union[float, str]]: + params = self._get_battery_params() + if not params: + return None + + bat_p_wh = params["bat_p_wh"] + usable_percent = (100 - params["bat_min_percent"]) / 100 + bat_c = params["bat_c"] + bat_power = params["bat_power"] + remaining = self._remaining_capacity(bat_p_wh, usable_percent, bat_c) + missing = self._missing_capacity(bat_p_wh, bat_c) + + if self._sensor_type == "usable_battery_capacity": + return round((bat_p_wh * usable_percent) / 1000, 2) + if self._sensor_type == "missing_battery_kwh": + return round(missing / 1000, 2) + if self._sensor_type == "remaining_usable_capacity": + usable = bat_p_wh * usable_percent + return round((usable - missing) / 1000, 2) + if self._sensor_type == "time_to_full": + return self._time_to_full(missing, bat_power) + if self._sensor_type == "time_to_empty": + return self._time_to_empty(remaining, bat_c, bat_power) + return None + + @staticmethod + def _missing_capacity(bat_p_wh: float, bat_c: float) -> float: + return bat_p_wh * (1 - bat_c / 100) + + @staticmethod + def _remaining_capacity( + bat_p_wh: float, usable_percent: float, bat_c: float + ) -> float: + usable = bat_p_wh * usable_percent + missing = bat_p_wh * (1 - bat_c / 100) + return usable - missing + + def _time_to_full(self, missing: float, bat_power: float) -> str: + if bat_power > 0: + return self._format_time(missing / bat_power) + if missing == 0: + return "Nabito" + return "Vybíjí se" + + def _time_to_empty(self, remaining: float, bat_c: float, bat_power: float) -> str: + if bat_c >= 100: + return "Nabito" + if bat_power < 0: + return self._format_time(remaining / abs(bat_power)) + if remaining == 0: + return "Vybito" + return "Nabíjí se" + + def _get_energy_value_key(self) -> Optional[str]: + sensor_map = { + "computed_batt_charge_energy_today": "charge_today", + "computed_batt_discharge_energy_today": "discharge_today", + "computed_batt_charge_energy_month": "charge_month", + "computed_batt_discharge_energy_month": "discharge_month", + "computed_batt_charge_energy_year": "charge_year", + "computed_batt_discharge_energy_year": "discharge_year", + "computed_batt_charge_fve_energy_today": "charge_fve_today", + "computed_batt_charge_fve_energy_month": "charge_fve_month", + "computed_batt_charge_fve_energy_year": "charge_fve_year", + "computed_batt_charge_grid_energy_today": "charge_grid_today", + "computed_batt_charge_grid_energy_month": "charge_grid_month", + "computed_batt_charge_grid_energy_year": "charge_grid_year", + } + return sensor_map.get(self._sensor_type) + + def _update_shared_energy_cache(self) -> None: + if self._box_id and self._box_id != "unknown": + cached = _energy_data_cache.get(self._box_id) + if cached is not None: + self._energy = cached + else: + _energy_data_cache[self._box_id] = self._energy + + def _get_last_energy_update(self) -> Optional[datetime]: + if self._box_id and self._box_id != "unknown": + return _energy_last_update_cache.get(self._box_id) + return self._last_update + + def _set_last_energy_update(self, now: datetime) -> None: + if self._box_id and self._box_id != "unknown": + _energy_last_update_cache[self._box_id] = now + self._last_update = now + + def _apply_charge_delta( + self, wh_increment: float, delta_seconds: float, bat_power: float, fv_power: float + ) -> None: + self._energy["charge_today"] += wh_increment + self._energy["charge_month"] += wh_increment + self._energy["charge_year"] += wh_increment + + if fv_power > 50: + from_fve = min(bat_power, fv_power) + from_grid = bat_power - from_fve + else: + from_fve = 0 + from_grid = bat_power + + wh_increment_fve = (from_fve * delta_seconds) / 3600.0 + wh_increment_grid = (from_grid * delta_seconds) / 3600.0 + + self._energy["charge_fve_today"] += wh_increment_fve + self._energy["charge_fve_month"] += wh_increment_fve + self._energy["charge_fve_year"] += wh_increment_fve + + self._energy["charge_grid_today"] += wh_increment_grid + self._energy["charge_grid_month"] += wh_increment_grid + self._energy["charge_grid_year"] += wh_increment_grid + + def _apply_discharge_delta(self, wh_increment: float) -> None: + self._energy["discharge_today"] += wh_increment + self._energy["discharge_month"] += wh_increment + self._energy["discharge_year"] += wh_increment + + def _maybe_schedule_energy_save(self) -> None: + if not hasattr(self, "hass") or not self.hass: + return + coro = self._save_energy_to_storage() + task = self.hass.async_create_task(coro) + if task is None or asyncio.iscoroutine(task) or not asyncio.isfuture(task): + coro.close() + + async def _load_energy_from_storage(self) -> bool: + """Load energy data from persistent storage. Returns True if data was loaded.""" + # Already loaded for this box? + if self._box_id in _energy_data_cache and _energy_cache_loaded.get( + self._box_id + ): + cached = _energy_data_cache[self._box_id] + for key in self._energy: + cached.setdefault(key, 0.0) + self._energy = cached + _LOGGER.debug(f"[{self.entity_id}] ✅ Loaded energy from cache") + return True + + store = self._get_energy_store() + if not store: + return False + + try: + data = await store.async_load() + if data and "energy" in data: + raw = data["energy"] or {} + stored_energy: Dict[str, float] = {} + for key in self._energy: + try: + stored_energy[key] = float(raw.get(key, 0.0)) + except (TypeError, ValueError): + stored_energy[key] = 0.0 + + # Cache for other sensors (shared dict instance) + _energy_data_cache[self._box_id] = stored_energy + self._energy = stored_energy + _energy_cache_loaded[self._box_id] = True + + last_save = data.get("last_save", "unknown") + _LOGGER.info( + f"[{self.entity_id}] ✅ Loaded energy from storage (saved: {last_save}): " + f"charge_month={stored_energy.get('charge_month', 0):.0f} Wh" + ) + return True + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error loading energy from storage: {e}") + return False + + async def _save_energy_to_storage(self, force: bool = False) -> None: + """Save energy data to persistent storage (throttled to every 5 min unless forced).""" + now = datetime.now(timezone.utc) + + # Throttle saves unless forced + if not force and self._last_storage_save: + elapsed = now - self._last_storage_save + if elapsed < self._storage_save_interval: + return + + store = self._get_energy_store() + if not store: + return + + try: + # Ensure cache points to the current shared dict + _energy_data_cache[self._box_id] = self._energy + + data = { + "version": ENERGY_STORAGE_VERSION, + "energy": self._energy.copy(), + "last_save": now.isoformat(), + } + await store.async_save(data) + self._last_storage_save = now + _LOGGER.debug( + f"[{self.entity_id}] 💾 Saved energy to storage: " + f"charge_month={self._energy.get('charge_month', 0):.0f} Wh" + ) + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error saving energy to storage: {e}") + + async def async_added_to_hass(self) -> None: + await super().async_added_to_hass() + # Keep unsubscribe handle so we can cleanly remove the entity during reloads. + self._daily_reset_unsub = async_track_time_change( + self.hass, self._reset_daily, hour=0, minute=0, second=0 + ) + + # Priority 1: Load from persistent storage (more reliable than restore_state) + loaded_from_storage = await self._load_energy_from_storage() + + # Priority 2: Fallback to restore_state if storage was empty + if not loaded_from_storage: + await self._restore_energy_from_state() + + # Po inicializaci (load/restore + dependency listeners) hned přepiš stav, + # aby se uživatelům neukazovala dočasná nula po restartu. + self.async_write_ha_state() + + async def _restore_energy_from_state(self) -> None: + old_state = await self.async_get_last_state() + if not old_state or not old_state.attributes: + return # pragma: no cover + + max_val = self._max_energy_attribute(old_state.attributes) + if max_val <= 0.0: + max_val = self._restore_from_entity_state(old_state) + + if max_val <= 0.0: + _LOGGER.warning( + "[%s] ⚠️ Restore state has zeroed/invalid data (max=%s), keeping defaults", + self.entity_id, + max_val, + ) + return + + _LOGGER.info( + "[%s] 📥 Restoring from HA state (storage empty): max=%s", + self.entity_id, + max_val, + ) + self._apply_restored_energy(old_state.attributes) + if self._box_id and self._box_id != "unknown": + _energy_cache_loaded[self._box_id] = True + await self._save_energy_to_storage(force=True) + + def _max_energy_attribute(self, attributes: Dict[str, Any]) -> float: + max_val = 0.0 + for key in self._energy: + try: + value = float(attributes.get(key, 0.0)) + except (TypeError, ValueError): + continue + if value > max_val: + max_val = value + return max_val + + def _restore_from_entity_state(self, old_state: Any) -> float: + key = self._get_energy_value_key() + if not key: + return 0.0 # pragma: no cover + try: + value = float(old_state.state) + except (TypeError, ValueError): + return 0.0 + if value <= 0.0: + return 0.0 # pragma: no cover + self._energy[key] = value + return value + + def _apply_restored_energy(self, attributes: Dict[str, Any]) -> None: + if self._box_id and self._box_id != "unknown": + energy = _energy_data_cache.get(self._box_id) + if not isinstance(energy, dict): + _energy_data_cache[self._box_id] = self._energy + energy = self._energy + self._energy = energy + + for key in self._energy: + try: + if key in attributes: + self._energy[key] = float(attributes[key]) + except (TypeError, ValueError): + continue + + async def _reset_daily(self, now: Optional[datetime] = None, *_: Any) -> None: + if now is None: + now = dt_util.now() + _LOGGER.debug(f"[{self.entity_id}] Resetting daily energy") + self._reset_energy_by_suffix("today") + + if now.day == 1: + _LOGGER.debug(f"[{self.entity_id}] Resetting monthly energy") + self._reset_energy_by_suffix("month") + + if now.month == 1 and now.day == 1: + _LOGGER.debug(f"[{self.entity_id}] Resetting yearly energy") + self._reset_energy_by_suffix("year") + + # Force save after reset + await self._save_energy_to_storage(force=True) + + def _reset_energy_by_suffix(self, suffix: str) -> None: + for key in self._energy: + if key.endswith(suffix): + self._energy[key] = 0.0 + + @property + def state(self) -> Optional[Union[float, str]]: # noqa: C901 + if not self._has_numeric_box(): + return None + + state = self._state_from_mapping() + if state is not None: + return state + + battery_state = self._state_battery_metrics() + if battery_state is not None: + return battery_state + + return None + + def _state_from_mapping(self) -> Optional[Union[float, str]]: + if self._sensor_type == "real_data_update": + return self._state_real_data_update() + handler = self._sensor_mapping().get(self._sensor_type) + if handler: + return handler() + if self._sensor_type.startswith("computed_batt_"): + return self._accumulate_energy() + return None + + def _sensor_mapping(self) -> Dict[str, Any]: + return { + "ac_in_aci_wtotal": lambda: self._sum_three_phase("ac_in_aci"), + "actual_aci_wtotal": lambda: self._sum_three_phase("actual_aci"), + "dc_in_fv_total": lambda: self._sum_two_phase("dc_in_fv"), + "actual_fv_total": lambda: self._sum_two_phase("actual_fv"), + "boiler_current_w": self._get_boiler_consumption_from_entities, + "batt_batt_comp_p_charge": self._state_batt_comp_charge, + "batt_batt_comp_p_discharge": self._state_batt_comp_discharge, + } + + def _state_batt_comp_charge(self) -> Optional[float]: + bat_p = self._get_oig_number("batt_batt_comp_p") + if bat_p is None: + return None + return float(bat_p) if bat_p > 0 else 0.0 + + def _state_batt_comp_discharge(self) -> Optional[float]: + bat_p = self._get_oig_number("batt_batt_comp_p") + if bat_p is None: + return None + return float(-bat_p) if bat_p < 0 else 0.0 + + def _accumulate_energy(self) -> Optional[float]: + self._update_shared_energy_cache() + try: + now = datetime.now(timezone.utc) + + power_values = self._get_power_values() + if power_values is None: + return None + bat_power, fv_power = power_values + last_update = self._get_last_energy_update() + + if last_update is not None: + self._apply_energy_accumulation(now, last_update, bat_power, fv_power) + + self._set_last_energy_update(now) + self._attr_extra_state_attributes = { + k: round(v, 3) for k, v in self._energy.items() + } + if self._box_id and self._box_id != "unknown": + _energy_data_cache[self._box_id] = self._energy + + # Periodic save to persistent storage (throttled) + self._maybe_schedule_energy_save() + + return self._get_energy_value() + + except Exception as err: + _LOGGER.error("Error calculating energy: %s", err, exc_info=True) + return None + + def _get_power_values(self) -> Optional[tuple[float, float]]: + bat_power_val = self._get_oig_number("batt_batt_comp_p") + if bat_power_val is None: + return None + bat_power = float(bat_power_val) + + fv_p1 = float(self._get_oig_number("actual_fv_p1") or 0.0) + fv_p2 = float(self._get_oig_number("actual_fv_p2") or 0.0) + fv_power = fv_p1 + fv_p2 + return bat_power, fv_power + + def _apply_energy_accumulation( + self, + now: datetime, + last_update: datetime, + bat_power: float, + fv_power: float, + ) -> None: + delta_seconds = (now - last_update).total_seconds() + wh_increment = (abs(bat_power) * delta_seconds) / 3600.0 + + if bat_power > 0: + self._apply_charge_delta(wh_increment, delta_seconds, bat_power, fv_power) + elif bat_power < 0: + self._apply_discharge_delta(wh_increment) + + _LOGGER.debug( + f"[{self.entity_id}] Δt={delta_seconds:.1f}s bat={bat_power:.1f}W fv={fv_power:.1f}W -> ΔWh={wh_increment:.4f}" + ) + + def _get_energy_value(self) -> Optional[float]: + # Always read from the shared cache when available (multiple sensors per box). + energy = ( + _energy_data_cache.get(self._box_id) + if self._box_id and self._box_id != "unknown" + else None + ) + if isinstance(energy, dict): + self._energy = energy + + energy_key = self._get_energy_value_key() + if energy_key: + return round(self._energy[energy_key], 3) + return None + + def _get_boiler_consumption_from_entities(self) -> Optional[float]: + """Estimate boiler power using only `sensor.oig_{box}_*` entities.""" + if self._sensor_type != "boiler_current_w": + return None + try: + fv_power = float(self._get_oig_number("actual_fv_p1") or 0.0) + float( + self._get_oig_number("actual_fv_p2") or 0.0 + ) + load_power = float(self._get_oig_number("actual_aco_p") or 0.0) + export_power = self._grid_export_power() + boiler_p_set = float(self._get_oig_number("boiler_install_power") or 0.0) + bat_power = float(self._get_oig_number("batt_batt_comp_p") or 0.0) + + boiler_power = self._compute_boiler_power( + boiler_p_set=boiler_p_set, + fv_power=fv_power, + load_power=load_power, + export_power=export_power, + bat_power=bat_power, + ) + + return round(float(max(boiler_power, 0.0)), 2) + except Exception as e: + _LOGGER.debug("Error calculating boiler consumption: %s", e) + return None + + def _grid_export_power(self) -> float: + grid_p1 = float(self._get_oig_number("actual_aci_wr") or 0.0) + grid_p2 = float(self._get_oig_number("actual_aci_ws") or 0.0) + grid_p3 = float(self._get_oig_number("actual_aci_wt") or 0.0) + return grid_p1 + grid_p2 + grid_p3 + + def _compute_boiler_power( + self, + *, + boiler_p_set: float, + fv_power: float, + load_power: float, + export_power: float, + bat_power: float, + ) -> float: + if self._is_boiler_manual(): + return boiler_p_set + + if bat_power <= 0: + available_power = fv_power - load_power - export_power + return min(max(available_power, 0), boiler_p_set) + + return 0.0 + + def _is_boiler_manual(self) -> bool: + if ( + not getattr(self, "hass", None) + or not self._box_id + or self._box_id == "unknown" + ): + return False # pragma: no cover + + st = self.hass.states.get(f"sensor.oig_{self._box_id}_boiler_manual_mode") + manual_state = st.state if st else None + manual_s = str(manual_state).strip().lower() if manual_state is not None else "" + return manual_s in { + "1", + "on", + "zapnuto", + "manual", + "manuální", + "manualni", + } or manual_s.startswith("manu") + + def _get_boiler_consumption(self, pv_data: Dict[str, Any]) -> Optional[float]: + """Backward-compatible wrapper (legacy call sites).""" + return self._get_boiler_consumption_from_entities() + + def _get_batt_power_charge(self, pv_data: Dict[str, Any]) -> float: + if "actual" not in pv_data: + return 0.0 + return max(float(pv_data["actual"]["bat_p"]), 0) + + def _get_batt_power_discharge(self, pv_data: Dict[str, Any]) -> float: + if "actual" not in pv_data: + return 0.0 + return max(-float(pv_data["actual"]["bat_p"]), 0) + + def _get_extended_fve_current_1(self, coordinator: Any) -> Optional[float]: + try: + power = float(coordinator.data["extended_fve_power_1"]) + voltage = float(coordinator.data["extended_fve_voltage_1"]) + if voltage != 0: + return power / voltage + else: + return 0.0 + except (KeyError, TypeError, ZeroDivisionError) as e: + _LOGGER.error(f"Error getting extended_fve_current_1: {e}", exc_info=True) + return None + + def _get_extended_fve_current_2(self, coordinator: Any) -> Optional[float]: + try: + power = float(coordinator.data["extended_fve_power_2"]) + voltage = float(coordinator.data["extended_fve_voltage_2"]) + if voltage != 0: + return power / voltage + else: + return 0.0 + except (KeyError, TypeError, ZeroDivisionError) as e: + _LOGGER.error(f"Error getting extended_fve_current_2: {e}", exc_info=True) + return None + + async def async_update(self) -> None: + await self.coordinator.async_request_refresh() + + def _format_time(self, hours: float) -> str: + if hours <= 0: + return "N/A" + + minutes = int(hours * 60) + days, remainder = divmod(minutes, 1440) + hrs, mins = divmod(remainder, 60) + + self._attr_extra_state_attributes = { + "days": days, + "hours": hrs, + "minutes": mins, + } + + if days >= 1: + if days == 1: + return f"{days} den {hrs} hodin {mins} minut" + elif days in [2, 3, 4]: + return f"{days} dny {hrs} hodin {mins} minut" + else: + return f"{days} dnů {hrs} hodin {mins} minut" + elif hrs >= 1: + return f"{hrs} hodin {mins} minut" + else: + return f"{mins} minut" + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + return getattr(self, "_attr_extra_state_attributes", {}) + + def _initialize_monitored_sensors(self) -> None: + """Inicializuje sledované senzory pro real data update.""" + # Klíčové senzory pro sledování změn + self._key_sensors = [ + "bat_p", + "bat_c", + "fv_p1", + "fv_p2", + "aco_p", + "aci_wr", + "aci_ws", + "aci_wt", + ] + + def _check_for_real_data_changes(self, pv_data: Dict[str, Any]) -> bool: + """Zkontroluje, zda došlo ke skutečné změně v datech.""" + try: + current_values = self._extract_real_data_values(pv_data) + if current_values is None: + return False + + has_changes = self._detect_real_data_changes(current_values) + self._monitored_sensors = current_values.copy() + return has_changes + + except Exception as err: + _LOGGER.error( + "[%s] Error checking data changes: %s", self.entity_id, err + ) + return False + + def _extract_real_data_values( + self, pv_data: Dict[str, Any] + ) -> Optional[Dict[str, Any]]: + if "actual" not in pv_data: + _LOGGER.warning( + "[%s] Live Data nejsou zapnutá - real data update nefunguje. " + "Zapněte Live Data v OIG aplikaci.", + self.entity_id, + ) + return None + + actual = pv_data["actual"] + current_values = {} + for sensor_key in self._key_sensors: + if sensor_key.startswith(("bat_", "fv_", "aco_", "aci_")): + current_values[sensor_key] = actual.get(sensor_key, 0) + return current_values + + def _detect_real_data_changes(self, current_values: Dict[str, Any]) -> bool: + has_changes = False + for key, current_value in current_values.items(): + previous_value = self._monitored_sensors.get(key) + if ( + previous_value is None + or abs(float(current_value) - float(previous_value)) > 0.1 + ): + has_changes = True + _LOGGER.debug( + "[%s] Real data change detected: %s %s -> %s", + self.entity_id, + key, + previous_value, + current_value, + ) + return has_changes + + async def async_will_remove_from_hass(self) -> None: + await super().async_will_remove_from_hass() + self._cancel_reset() + + def _cancel_reset(self) -> None: + unsub = getattr(self, "_daily_reset_unsub", None) + if unsub: + try: + unsub() + except Exception as err: + _LOGGER.debug( + "[%s] Failed to cancel daily reset listener: %s", + self.entity_id, + err, + ) + self._daily_reset_unsub = None diff --git a/custom_components/oig_cloud/entities/data_sensor.py b/custom_components/oig_cloud/entities/data_sensor.py new file mode 100755 index 00000000..9a3427bb --- /dev/null +++ b/custom_components/oig_cloud/entities/data_sensor.py @@ -0,0 +1,739 @@ +import logging +from datetime import datetime +from typing import Any, Callable, Dict, Optional, Tuple, Union + +from homeassistant.components.sensor import SensorDeviceClass, SensorEntity +from homeassistant.core import callback +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.update_coordinator import CoordinatorEntity + + +# Importujeme pouze GridMode bez zbytku shared modulu +class GridMode: + """Grid mode constants to avoid import issues.""" + + ON = "Zapnuto" + OFF = "Vypnuto" + LIMITED = "Omezeno" + + +_LOGGER = logging.getLogger(__name__) + +_LANGS: Dict[str, Dict[str, str]] = { + "on": {"en": "On", "cs": "Zapnuto"}, + "off": {"en": "Off", "cs": "Vypnuto"}, + "unknown": {"en": "Unknown", "cs": "Neznámý"}, + "changing": {"en": "Changing in progress", "cs": "Probíhá změna"}, + "Zapnuto/On": {"en": "On", "cs": "Zapnuto"}, + "Vypnuto/Off": {"en": "Off", "cs": "Vypnuto"}, +} + +_STATE_NOT_HANDLED = object() + + +class OigCloudDataSensor(CoordinatorEntity, SensorEntity, RestoreEntity): + """Representation of an OIG Cloud sensor.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + extended: bool = False, + notification: bool = False, + ) -> None: + """Initialize the sensor.""" + super().__init__(coordinator) + self._sensor_type = sensor_type + self._extended = extended + self._notification = notification + self._last_state: Optional[Union[float, str]] = None # Uložíme si poslední stav + self._local_state_unsub: Optional[Callable[[], None]] = None + self._data_source_unsub: Optional[Callable[[], None]] = None + self._entry_id: Optional[str] = None + self._restored_state: Optional[Any] = None + + # Načteme sensor config + try: + from ..sensor_types import SENSOR_TYPES + + self._sensor_config = SENSOR_TYPES.get(sensor_type, {}) + except ImportError: + self._sensor_config = {} + + # Správná lokalizace názvů - preferujeme český název + name_cs = self._sensor_config.get("name_cs") + name_en = self._sensor_config.get("name") + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + self._attr_name = name_cs or name_en or sensor_type + + # Základní atributy + self._attr_native_unit_of_measurement = self._sensor_config.get( + "unit_of_measurement" + ) + self._attr_icon = self._sensor_config.get("icon") + self._attr_device_class = self._sensor_config.get("device_class") + self._attr_state_class = self._sensor_config.get("state_class") + + # Přidání entity_category z konfigurace + self._attr_entity_category = self._sensor_config.get("entity_category") + + # Entity ID - KLÍČOVÉ: Tady se vytváří entity ID z sensor_type! + self._box_id = self._resolve_box_id(coordinator) + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + async def async_added_to_hass(self) -> None: + """Register per-entity listener for local telemetry.""" + await super().async_added_to_hass() + + # Retain last-known value across HA restarts (acts like "retain" for sensors). + try: + last_state = await self.async_get_last_state() + if last_state and last_state.state not in ( + None, + "", + "unknown", + "unavailable", + ): + self._restored_state = self._coerce_number(last_state.state) + except Exception: + self._restored_state = None + + # Local telemetry mapping is handled centrally by DataSourceController + # which keeps coordinator.data in a cloud-shaped format even in local mode. + # Data sensors therefore never subscribe to `sensor.oig_local_*` directly. + + async def async_will_remove_from_hass(self) -> None: + if self._local_state_unsub: + try: + self._local_state_unsub() + except Exception as err: + _LOGGER.debug( + "[%s] Failed to unsubscribe local state listener: %s", + self.entity_id, + err, + ) + self._local_state_unsub = None + if self._data_source_unsub: + try: + self._data_source_unsub() + except Exception as err: + _LOGGER.debug( + "[%s] Failed to unsubscribe data source listener: %s", + self.entity_id, + err, + ) + self._data_source_unsub = None + await super().async_will_remove_from_hass() + + def _resolve_box_id(self, coordinator: Any) -> str: + # Centralized resolution (config entry → proxy sensor → coordinator numeric keys) + try: + from .base_sensor import resolve_box_id + + return resolve_box_id(coordinator) + except Exception: + return "unknown" + + @property + def unique_id(self) -> str: + """Return a unique ID for this entity.""" + return f"oig_cloud_{self._box_id}_{self._sensor_type}" + + @property + def device_info(self) -> Any: + """Return device info.""" + from homeassistant.helpers.entity import DeviceInfo + + from ..const import DEFAULT_NAME, DOMAIN + + box_id = self._box_id + if not box_id or box_id == "unknown": + return None + + return DeviceInfo( + identifiers={(DOMAIN, box_id)}, + name=f"{DEFAULT_NAME} {box_id}", + manufacturer="OIG", + model=DEFAULT_NAME, + ) + + @property + def available(self) -> bool: + """Return whether entity is available.""" + return super().available + + @property + def should_poll(self) -> bool: + # Všechny senzory používají coordinator - NEPOTŘEBUJEME polling + return False + + async def async_update(self) -> None: + # ODSTRANÍME - coordinator se stará o všechny aktualizace + # Extended i běžné senzory se aktualizují automaticky přes coordinator + pass + + @property + def state(self) -> Any: # noqa: C901 + """Return the state of the sensor.""" + try: + notification_state = self._get_notification_state() + if notification_state is not _STATE_NOT_HANDLED: + return notification_state + + if self.coordinator.data is None: + return self._fallback_value() + + data = self.coordinator.data + if not data: + return self._fallback_value() + + pv_data = data.get(self._box_id, {}) + + # Extended logika + try: + from ..sensor_types import SENSOR_TYPES + + sensor_config = SENSOR_TYPES.get(self._sensor_type, {}) + if sensor_config.get("sensor_type_category") == "extended": + return self._get_extended_value_for_sensor() + except ImportError: + pass + + # Získáme raw hodnotu z parent + raw_value = self.get_node_value() + if raw_value is None: + return self._fallback_value() + + special_state = self._get_special_state(raw_value, pv_data) + if special_state is not _STATE_NOT_HANDLED: + return special_state + + # Pro ostatní senzory vrátíme raw hodnotu přímo + return raw_value + + except Exception as e: + _LOGGER.error( + f"Error getting state for {self.entity_id}: {e}", exc_info=True + ) + return self._fallback_value() + + def _get_notification_state(self) -> Any: + notification_manager = getattr(self.coordinator, "notification_manager", None) + if self._sensor_type == "latest_notification": + return self._get_latest_notification_state(notification_manager) + + handler = self._notification_handler() + if handler is None: + return _STATE_NOT_HANDLED + + method_name, args, missing_value = handler + if notification_manager is None: + self._log_missing_notification_manager(method_name) + return missing_value + + return getattr(notification_manager, method_name)(*args) + + def _get_latest_notification_state(self, notification_manager: Any) -> Any: + if notification_manager is None: + if not getattr(self, "_warned_notification_manager_missing", False): + self._warned_notification_manager_missing = True + _LOGGER.debug( + "[%s] Notification manager not initialized yet", + self.entity_id, + ) + return None + return notification_manager.get_latest_notification_message() + + def _notification_handler( + self, + ) -> Optional[Tuple[str, Tuple[Any, ...], Any]]: + if self._sensor_type == "bypass_status": + return ("get_bypass_status", (), self._fallback_value()) + if self._sensor_type == "notification_count_error": + return ("get_notification_count", ("error",), None) + if self._sensor_type == "notification_count_warning": + return ("get_notification_count", ("warning",), None) + if self._sensor_type == "notification_count_unread": + return ("get_unread_count", (), None) + return None + + def _log_missing_notification_manager(self, method_name: str) -> None: + if method_name == "get_bypass_status": + _LOGGER.debug( + "[%s] Notification manager is None for bypass status", + self.entity_id, + ) + + def _get_special_state(self, raw_value: Any, pv_data: Dict[str, Any]) -> Any: + if self._sensor_type == "box_prms_mode": + return self._get_mode_name(raw_value, "cs") + if self._sensor_type == "invertor_prms_to_grid": + if isinstance(raw_value, (int, float, str)): + return self._grid_mode(pv_data, raw_value, "cs") + _LOGGER.warning( + "[%s] Invalid raw_value type for grid mode: %s", + self.entity_id, + type(raw_value), + ) + return None + if "ssr" in self._sensor_type: + return self._get_ssrmode_name(raw_value, "cs") + if self._sensor_type == "boiler_manual_mode": + return self._get_boiler_mode_name(raw_value, "cs") + if self._sensor_type in {"boiler_is_use", "box_prms_crct"}: + return self._get_on_off_name(raw_value, "cs") + return _STATE_NOT_HANDLED + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Return extra state attributes.""" + attributes = {} + + # Notification sensors - OPRAVA: Kontrola existence notification_manager + if self._sensor_type == "latest_notification": + notification_manager = getattr( + self.coordinator, "notification_manager", None + ) + if notification_manager is not None: + latest = notification_manager.get_latest_notification() + if latest: + attributes.update( + { + "notification_id": latest.id, + "notification_type": latest.type, + "timestamp": latest.timestamp.isoformat(), + "device_id": latest.device_id, + "severity": latest.severity, + "read": latest.read, + } + ) + + elif self._sensor_type == "bypass_status": + notification_manager = getattr( + self.coordinator, "notification_manager", None + ) + if notification_manager is not None: + attributes["last_check"] = datetime.now().isoformat() + + elif self._sensor_type.startswith("notification_count_"): + notification_manager = getattr( + self.coordinator, "notification_manager", None + ) + if notification_manager is not None: + attributes.update( + { + "total_notifications": len(notification_manager._notifications), + "last_update": datetime.now().isoformat(), + } + ) + + # Společné atributy pro notifikační senzory + attributes.update( + { + "sensor_category": "notification", + "integration": "oig_cloud", + } + ) + + return attributes + + def _get_extended_value_for_sensor(self) -> Optional[float]: + """Získá hodnotu pro extended senzor podle typu.""" + sensor_type = self._sensor_type + + # Mapování sensor_type na extended_key + if "battery" in sensor_type: + return self._get_extended_value("extended_batt", sensor_type) + elif "fve" in sensor_type: + if "current" in sensor_type: + return self._compute_fve_current(sensor_type) + else: + return self._get_extended_value("extended_fve", sensor_type) + elif "grid" in sensor_type: + return self._get_extended_value("extended_grid", sensor_type) + elif "load" in sensor_type: + return self._get_extended_value("extended_load", sensor_type) + + return None + + def _get_extended_value( + self, extended_key: str, sensor_type: str + ) -> Optional[float]: + """Extended data jsou na top level coordinator.data.""" + try: + if not self.coordinator.data: + return None + + extended_data = self.coordinator.data.get(extended_key) + if not extended_data: + return None + + items = extended_data.get("items", []) + if not items: + return None + + last_values = items[-1]["values"] + + mapping = { + # battery + "extended_battery_voltage": 0, + "extended_battery_current": 1, + "extended_battery_capacity": 2, + "extended_battery_temperature": 3, + # fve + "extended_fve_voltage_1": 0, + "extended_fve_voltage_2": 1, + "extended_fve_current": 2, + "extended_fve_power_1": 3, + "extended_fve_power_2": 4, + # grid + "extended_grid_voltage": 0, + "extended_grid_power": 1, + "extended_grid_consumption": 2, + "extended_grid_delivery": 3, + # load + "extended_load_l1_power": 0, + "extended_load_l2_power": 1, + "extended_load_l3_power": 2, + } + + index = mapping.get(sensor_type) + if index is None: + _LOGGER.warning(f"Unknown extended sensor mapping for {sensor_type}") + return None + + if index >= len(last_values): + _LOGGER.warning(f"Index {index} out of range for extended values") + return None + + return last_values[index] + + except (KeyError, IndexError, TypeError) as e: + _LOGGER.error(f"Error getting extended value for {sensor_type}: {e}") + return None + + def _compute_fve_current(self, sensor_type: str) -> Optional[float]: + """Extended data jsou na top level coordinator.data.""" + try: + if not self.coordinator.data: + return None + + extended_fve = self.coordinator.data.get("extended_fve") + if not extended_fve or not extended_fve.get("items"): + return 0.0 + + last_values = extended_fve["items"][-1]["values"] + + if sensor_type == "extended_fve_current_1": + # Index 3 = power_1, Index 0 = voltage_1 + power = float(last_values[3]) # extended_fve_power_1 + voltage = float(last_values[0]) # extended_fve_voltage_1 + elif sensor_type == "extended_fve_current_2": + # Index 4 = power_2, Index 1 = voltage_2 + power = float(last_values[4]) # extended_fve_power_2 + voltage = float(last_values[1]) # extended_fve_voltage_2 + else: + return None + + if voltage != 0: + current = power / voltage + _LOGGER.debug( + f"{sensor_type}: {current:.3f}A (P={power}W, U={voltage}V)" + ) + return round(current, 3) + else: + return 0.0 + except (KeyError, TypeError, ZeroDivisionError, IndexError) as e: + _LOGGER.error(f"Error computing {sensor_type}: {e}", exc_info=True) + return None + + def _get_mode_name(self, node_value: int, language: str) -> str: + """Convert box mode number to human-readable name.""" + modes = { + 0: "Home 1", + 1: "Home 2", + 2: "Home 3", + 3: "Home UPS", + 4: "Home 5", + 5: "Home 6", + } + return modes.get(node_value, _LANGS["unknown"][language]) + + def _grid_mode( + self, pv_data: Dict[str, Any], node_value: Any, language: str + ) -> str: + try: + grid_enabled_raw, max_grid_feed_raw = self._extract_grid_inputs(pv_data) + if grid_enabled_raw is None or max_grid_feed_raw is None: + local_mode = self._get_local_grid_mode(node_value, language) + if local_mode != _LANGS["unknown"][language]: + return local_mode + self._log_missing_grid_inputs(grid_enabled_raw, max_grid_feed_raw) + return _LANGS["unknown"][language] + + grid_enabled, to_grid, max_grid_feed = self._normalize_grid_inputs( + grid_enabled_raw, node_value, max_grid_feed_raw + ) + if self._is_queen_mode(pv_data): + return self._grid_mode_queen( + grid_enabled, to_grid, max_grid_feed, language + ) + return self._grid_mode_king(grid_enabled, to_grid, max_grid_feed, language) + + except (KeyError, ValueError, TypeError) as e: + _LOGGER.error(f"[{self.entity_id}] Error determining grid mode: {e}") + return _LANGS["unknown"][language] + + def _extract_grid_inputs( + self, pv_data: Dict[str, Any] + ) -> Tuple[Optional[Any], Optional[Any]]: + box_prms = pv_data.get("box_prms", {}) or {} + grid_enabled_raw = ( + box_prms.get("crcte", box_prms.get("crct")) + if isinstance(box_prms, dict) + else None + ) + invertor_prm1 = pv_data.get("invertor_prm1", {}) or {} + max_grid_feed_raw = ( + invertor_prm1.get("p_max_feed_grid") + if isinstance(invertor_prm1, dict) + else None + ) + return grid_enabled_raw, max_grid_feed_raw + + def _log_missing_grid_inputs( + self, grid_enabled_raw: Optional[Any], max_grid_feed_raw: Optional[Any] + ) -> None: + if grid_enabled_raw is None: + _LOGGER.debug( + "[%s] Missing box_prms.crcte/crct in data", + self.entity_id, + ) + if max_grid_feed_raw is None: + _LOGGER.debug( + "[%s] Missing invertor_prm1.p_max_feed_grid in data", + self.entity_id, + ) + + @staticmethod + def _normalize_grid_inputs( + grid_enabled_raw: Any, node_value: Any, max_grid_feed_raw: Any + ) -> Tuple[int, int, int]: + grid_enabled = int(grid_enabled_raw) + to_grid = int(node_value) if node_value is not None else 0 + max_grid_feed = int(max_grid_feed_raw) + return grid_enabled, to_grid, max_grid_feed + + @staticmethod + def _is_queen_mode(pv_data: Dict[str, Any]) -> bool: + return "queen" in pv_data and bool(pv_data["queen"]) + + def _grid_mode_queen( + self, grid_enabled: int, to_grid: int, max_grid_feed: int, language: str + ) -> str: + if 0 == to_grid and 0 == max_grid_feed: + return GridMode.OFF + elif 0 == to_grid and 0 < max_grid_feed: + return GridMode.LIMITED + elif 1 == to_grid: + return GridMode.ON + return _LANGS["changing"][language] + + def _grid_mode_king( + self, grid_enabled: int, to_grid: int, max_grid_feed: int, language: str + ) -> str: + if grid_enabled == 0: + return GridMode.OFF + if to_grid == 0: + return GridMode.OFF + if to_grid == 1 and max_grid_feed >= 10000: + return GridMode.ON + if to_grid == 1 and max_grid_feed <= 9999: + return GridMode.LIMITED + return _LANGS["changing"][language] + + def _get_ssrmode_name(self, node_value: Any, language: str) -> str: + if node_value == 0: + return "Vypnuto/Off" + elif node_value == 1: + return "Zapnuto/On" + return _LANGS["unknown"][language] + + def _get_boiler_mode_name(self, node_value: Any, language: str) -> str: + if node_value == 0: + return "CBB" + elif node_value == 1: + return "Manuální" + return _LANGS["unknown"][language] + + def _get_on_off_name(self, node_value: Any, language: str) -> str: + if node_value == 0: + return _LANGS["off"][language] + elif node_value == 1: + return _LANGS["on"][language] + return _LANGS["unknown"][language] + + def _get_local_entity_id_for_config( + self, sensor_config: Dict[str, Any] + ) -> Optional[str]: + entity_id = sensor_config.get("local_entity_id") + if entity_id: + return entity_id + + suffix = sensor_config.get("local_entity_suffix") + if suffix and self._box_id and self._box_id != "unknown": + domains = sensor_config.get("local_entity_domains") + if isinstance(domains, str): + domain_list = [domains] + elif isinstance(domains, (list, tuple, set)): + domain_list = [d for d in domains if isinstance(d, str)] + else: + domain_list = ["sensor"] + if not domain_list: + domain_list = ["sensor"] + for domain in domain_list: + candidate = f"{domain}.oig_local_{self._box_id}_{suffix}" + if self.hass.states.get(candidate): + return candidate + return f"{domain_list[0]}.oig_local_{self._box_id}_{suffix}" + return None + + def _coerce_number(self, value: Any) -> Any: + if not isinstance(value, str): + return value + try: + return float(value) if "." in value else int(value) + except ValueError: + return value + + def _apply_local_value_map(self, value: Any, sensor_config: Dict[str, Any]) -> Any: + if value is None: + return None + value_map = sensor_config.get("local_value_map") + if isinstance(value, str) and isinstance(value_map, dict): + key = value.strip().lower() + if key in value_map: + return value_map[key] + return self._coerce_number(value) + + def _fallback_value(self) -> Optional[Any]: + if self._last_state is not None: + return self._last_state + if self._restored_state is not None: + return self._restored_state + if self._sensor_config: + if self._sensor_config.get("device_class") == SensorDeviceClass.ENERGY: + return 0.0 + return None + + def _get_local_value(self) -> Optional[Any]: + local_entity_id = self._get_local_entity_id_for_config(self._sensor_config) + if not local_entity_id: + return None + st = self.hass.states.get(local_entity_id) + if not st or st.state in (None, "unknown", "unavailable"): + return None + return self._apply_local_value_map(st.state, self._sensor_config) + + def _get_local_value_for_sensor_type(self, sensor_type: str) -> Optional[Any]: + try: + from ..sensor_types import SENSOR_TYPES + + cfg = SENSOR_TYPES.get(sensor_type) + if not cfg: + return None + local_entity_id = self._get_local_entity_id_for_config(cfg) + if not local_entity_id: + return None + st = self.hass.states.get(local_entity_id) + if not st or st.state in (None, "unknown", "unavailable"): + return None + return self._apply_local_value_map(st.state, cfg) + except Exception: + return None + + def _get_local_grid_mode(self, node_value: Any, language: str) -> str: + try: + to_grid = int(node_value) if node_value is not None else 0 + grid_enabled = int( + self._get_local_value_for_sensor_type("box_prms_crct") or 0 + ) + max_grid_feed = int( + self._get_local_value_for_sensor_type("invertor_prm1_p_max_feed_grid") + or 0 + ) + # Queen mode not reliably available locally; default to king logic. + return self._grid_mode_king(grid_enabled, to_grid, max_grid_feed, language) + except Exception: + return _LANGS["unknown"][language] + + def get_node_value(self) -> Optional[Any]: + """Get value from coordinator data using node_id and node_key.""" + try: + if not self.coordinator.data: + return None + + data = self.coordinator.data + box_data = data.get(self._box_id) if isinstance(data, dict) else None + + if not box_data: + return None + + node_id = self._sensor_config.get("node_id") + node_key = self._sensor_config.get("node_key") + + if not node_id or not node_key: + return None + + if node_id in box_data: + node_data = box_data[node_id] + if node_key in node_data: + value = node_data[node_key] + # ODSTRANIT zbytečný debug + return value + + return None + + except (KeyError, TypeError, IndexError): + return None + + @callback + def _handle_coordinator_update(self) -> None: + """Handle updated data from the coordinator.""" + if self.coordinator.data: + # Uložíme si starou hodnotu PŘED aktualizací + old_value = self._last_state + + # Aktualizujeme available status + self._attr_available = True + + # Získáme novou hodnotu pomocí state property + new_value = self.state + + # Uložíme si novou hodnotu pro příští porovnání + self._last_state = new_value + + # Log value updates for debugging - vždy vypisuj obě hodnoty + if old_value != new_value: + _LOGGER.debug( + "[%s] Data updated: %s -> %s (sensor_type: %s)", + self.entity_id, + old_value, + new_value, + self._sensor_type, + ) + else: + _LOGGER.debug( + "[%s] Data unchanged, previous: %s, current: %s (sensor_type: %s)", + self.entity_id, + old_value, + new_value, + self._sensor_type, + ) + + else: + self._attr_available = False + _LOGGER.debug("[%s] No coordinator data available", self.entity_id) + + self.async_write_ha_state() diff --git a/custom_components/oig_cloud/entities/data_source_sensor.py b/custom_components/oig_cloud/entities/data_source_sensor.py new file mode 100644 index 00000000..2a8786ab --- /dev/null +++ b/custom_components/oig_cloud/entities/data_source_sensor.py @@ -0,0 +1,110 @@ +"""Sensor indicating whether OIG Cloud is currently using Local or Cloud data.""" + +from __future__ import annotations + +import logging +from datetime import timedelta +from typing import Any, Dict, Optional + +from homeassistant.components.sensor import SensorEntity +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.entity import DeviceInfo +from homeassistant.helpers.event import ( + async_track_state_change_event, + async_track_time_interval, +) + +from ..const import DEFAULT_NAME, DOMAIN +from ..core.data_source import ( + DATA_SOURCE_HYBRID, + DATA_SOURCE_LOCAL_ONLY, + PROXY_LAST_DATA_ENTITY_ID, + get_data_source_state, +) +from .base_sensor import resolve_box_id + +_LOGGER = logging.getLogger(__name__) + + +class OigCloudDataSourceSensor(SensorEntity): + """Show whether integration is currently sourcing data from Local or Cloud.""" + + _attr_has_entity_name = True + _attr_native_unit_of_measurement = None + _attr_icon = "mdi:database-sync" + _attr_translation_key = "data_source" + + def __init__(self, hass: HomeAssistant, coordinator: Any, entry: Any) -> None: + self.hass = hass + self.coordinator = coordinator + self.entry = entry + # Použij stejnou autodetekci jako ostatní senzory + self._box_id = resolve_box_id(coordinator) + self._attr_name = "Data source" + self.entity_id = f"sensor.oig_{self._box_id}_data_source" + self._unsubs: list[callable] = [] + + @property + def unique_id(self) -> str: + return f"oig_cloud_{self._box_id}_data_source" + + @property + def device_info(self) -> DeviceInfo: + return DeviceInfo( + identifiers={(DOMAIN, self._box_id)}, + name=f"{DEFAULT_NAME} {self._box_id}", + manufacturer="OIG", + model=DEFAULT_NAME, + ) + + @property + def state(self) -> str: + ds = get_data_source_state(self.hass, self.entry.entry_id) + if ( + ds.effective_mode in (DATA_SOURCE_LOCAL_ONLY, DATA_SOURCE_HYBRID) + and ds.local_available + ): + return "local" + return "cloud" + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + ds = get_data_source_state(self.hass, self.entry.entry_id) + last_dt: Optional[str] = ( + ds.last_local_data.isoformat() if ds.last_local_data else None + ) + return { + "configured_mode": ds.configured_mode, + "effective_mode": ds.effective_mode, + "local_available": ds.local_available, + "last_local_data": last_dt, + "reason": ds.reason, + } + + async def async_added_to_hass(self) -> None: + @callback + def _refresh(*_: Any) -> None: + self.async_write_ha_state() + + # refresh on proxy sensor changes + self._unsubs.append( + async_track_state_change_event( + self.hass, + PROXY_LAST_DATA_ENTITY_ID, + _refresh, + ) + ) + # periodic refresh to catch controller changes + self._unsubs.append( + async_track_time_interval(self.hass, _refresh, timedelta(seconds=30)) + ) + await super().async_added_to_hass() + + async def async_will_remove_from_hass(self) -> None: + for unsub in self._unsubs: + try: + unsub() + except Exception as err: + _LOGGER.debug("Failed to unsubscribe data source listener: %s", err) + self._unsubs.clear() + await super().async_will_remove_from_hass() diff --git a/custom_components/oig_cloud/entities/sensor_runtime.py b/custom_components/oig_cloud/entities/sensor_runtime.py new file mode 100644 index 00000000..03887ca8 --- /dev/null +++ b/custom_components/oig_cloud/entities/sensor_runtime.py @@ -0,0 +1,147 @@ +"""Runtime helpers for OIG Cloud sensors.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, List, Optional + +from homeassistant.helpers.entity import DeviceInfo + +from ..const import DEFAULT_NAME, DOMAIN +from .sensor_setup import get_sensor_definition + +_LOGGER = logging.getLogger(__name__) + + +class OigCloudSensorRuntimeMixin: + """Runtime properties for OIG Cloud sensors.""" + + @property + def available(self) -> bool: + """Return if entity is available.""" + if not self.coordinator.last_update_success or not self.coordinator.data: + return False + + if self._node_id is not None: + box_id = self._box_id + if not box_id or box_id == "unknown": + return False + box_data = ( + self.coordinator.data.get(box_id, {}) + if isinstance(self.coordinator.data, dict) + else {} + ) + if self._node_id not in box_data: + return False + + return True + + @property + def entity_category(self) -> Optional[str]: + """Return the entity category of the sensor.""" + return get_sensor_definition(self._sensor_type).get("entity_category") + + @property + def unique_id(self) -> str: + """Return a unique ID for this entity.""" + return f"oig_cloud_{self._box_id}_{self._sensor_type}" + + @property + def device_info(self) -> DeviceInfo: + """Return information about the device.""" + box_id = self._box_id + data: Dict[str, Any] = self.coordinator.data or {} + pv_data: Dict[str, Any] = data.get(box_id, {}) if isinstance(data, dict) else {} + + is_queen: bool = bool(pv_data.get("queen", False)) + model_name: str = f"{DEFAULT_NAME} {'Queen' if is_queen else 'Home'}" + + sensor_def = get_sensor_definition(self._sensor_type) + sensor_category = sensor_def.get("sensor_type_category") + + if sensor_category == "shield": + return DeviceInfo( + identifiers={(DOMAIN, f"{self._box_id}_shield")}, + name=f"ServiceShield {self._box_id}", + manufacturer="OIG", + model="Shield", + via_device=(DOMAIN, self._box_id), + ) + + if sensor_category in ["statistics", "solar_forecast", "pricing"]: + return DeviceInfo( + identifiers={(DOMAIN, f"{self._box_id}_analytics")}, + name=f"Analytics & Predictions {self._box_id}", + manufacturer="OIG", + model="Analytics Module", + via_device=(DOMAIN, self._box_id), + ) + + return DeviceInfo( + identifiers={(DOMAIN, self._box_id)}, + name=f"{model_name} {self._box_id}", + manufacturer="OIG", + model=model_name, + sw_version=pv_data.get("box_prms", {}).get("sw", None), + ) + + @property + def should_poll(self) -> bool: + """Return False as entity should not poll on its own.""" + return False + + @property + def options(self) -> Optional[List[str]]: + """Return the options for this sensor if applicable.""" + return get_sensor_definition(self._sensor_type).get("options") + + @property + def name(self) -> str: + """Return the name of the sensor.""" + language: str = self.hass.config.language + if language == "cs": + return get_sensor_definition(self._sensor_type).get( + "name_cs", get_sensor_definition(self._sensor_type)["name"] + ) + return get_sensor_definition(self._sensor_type)["name"] + + @property + def icon(self) -> Optional[str]: + """Return the icon for the sensor.""" + return get_sensor_definition(self._sensor_type).get("icon") + + @property + def device_class(self) -> Optional[str]: + """Return the device class.""" + return get_sensor_definition(self._sensor_type).get("device_class") + + @property + def state_class(self) -> Optional[str]: + """Return the state class of the sensor.""" + return get_sensor_definition(self._sensor_type).get("state_class") + + def get_node_value(self) -> Any: + """Safely extract node value from coordinator data.""" + if not self.coordinator.data or not self._node_id or not self._node_key: + return None + + box_id = self._box_id + if not box_id or box_id == "unknown": + return None + try: + data: Dict[str, Any] = ( + self.coordinator.data if isinstance(self.coordinator.data, dict) else {} + ) + return data[box_id][self._node_id][self._node_key] + except (KeyError, TypeError): + _LOGGER.debug( + "Could not find %s.%s in data for sensor %s", + self._node_id, + self._node_key, + self.entity_id, + ) + return None + + async def async_update(self) -> None: + """Update the sensor.""" + await super().async_update() diff --git a/custom_components/oig_cloud/entities/sensor_setup.py b/custom_components/oig_cloud/entities/sensor_setup.py new file mode 100644 index 00000000..04eae8d0 --- /dev/null +++ b/custom_components/oig_cloud/entities/sensor_setup.py @@ -0,0 +1,141 @@ +"""Setup helpers for OIG Cloud sensors.""" + +from __future__ import annotations + +import logging +from typing import Any, Dict, Optional + +_LOGGER = logging.getLogger(__name__) + + +def resolve_box_id(coordinator: Any) -> str: + """Resolve the real box_id/inverter_sn and ignore helper keys.""" + try: + forced = _resolve_forced_box_id(coordinator) + if forced: + return forced + + entry = getattr(coordinator, "config_entry", None) + entry_box = _resolve_from_entry(entry) + if entry_box: + return entry_box + + hass = getattr(coordinator, "hass", None) + proxy_box = _resolve_from_proxy_sensor(hass) + if proxy_box: + return proxy_box + + registry_box = _resolve_from_registry(hass) + if registry_box: + return registry_box + + data_box = _resolve_from_data(coordinator) + if data_box: + return data_box + except Exception as err: + _LOGGER.debug("Failed to resolve box_id from coordinator data: %s", err) + + return "unknown" + + +def _extract_digits(text: Any) -> Optional[str]: + if not isinstance(text, str): + return None + import re + + m = re.search(r"(\\d{6,})", text) + return m.group(1) if m else None + + +def _is_valid_box_id(val: Any) -> bool: + return isinstance(val, str) and val.isdigit() + + +def _resolve_forced_box_id(coordinator: Any) -> Optional[str]: + forced = getattr(coordinator, "forced_box_id", None) + return forced if _is_valid_box_id(forced) else None + + +def _resolve_from_entry(entry: Any) -> Optional[str]: + if not entry: + return None + for key in ("box_id", "inverter_sn"): + if hasattr(entry, "options"): + val = entry.options.get(key) + if _is_valid_box_id(val): + return val + if hasattr(entry, "data"): + val = entry.data.get(key) + if _is_valid_box_id(val): + return val + from_title = _extract_digits(getattr(entry, "title", "")) + return from_title if _is_valid_box_id(from_title) else None + + +def _resolve_from_proxy_sensor(hass: Any) -> Optional[str]: + if not hass: + return None + try: + state = hass.states.get( + "sensor.oig_local_oig_proxy_proxy_status_box_device_id" + ) + if state and _is_valid_box_id(state.state): + return state.state + except Exception as err: + _LOGGER.debug("Failed to resolve box_id from proxy sensor: %s", err) + return None + + +def _resolve_from_registry(hass: Any) -> Optional[str]: + if not hass: + return None + try: + import re + + from homeassistant.helpers import entity_registry as er + + reg = er.async_get(hass) + ids: set[str] = set() + pat = re.compile(r"^sensor\\.oig_local_(\\d+)_") + for ent in reg.entities.values(): + m = pat.match(ent.entity_id) + if m: + ids.add(m.group(1)) + if len(ids) == 1: + return next(iter(ids)) + except Exception as err: + _LOGGER.debug("Failed to resolve box_id from entity registry: %s", err) + return None + + +def _resolve_from_data(coordinator: Any) -> Optional[str]: + data = getattr(coordinator, "data", None) + if isinstance(data, dict) and data: + numeric = next((str(k) for k in data.keys() if str(k).isdigit()), None) + if numeric: + return numeric + return None + + +def get_sensor_definition(sensor_type: str) -> Dict[str, Any]: + """Load sensor definition from SENSOR_TYPES.""" + try: + from ..sensor_types import SENSOR_TYPES + + if sensor_type in SENSOR_TYPES: + definition = SENSOR_TYPES[sensor_type] + if "unit_of_measurement" in definition and "unit" not in definition: + definition["unit"] = definition["unit_of_measurement"] + return definition + except ImportError: + pass + + _LOGGER.error("Sensor type '%s' not found in SENSOR_TYPES!", sensor_type) + return { + "name": sensor_type, + "unit": None, + "icon": "mdi:help", + "device_class": None, + "state_class": None, + "sensor_type_category": "unknown", + } diff --git a/custom_components/oig_cloud/entities/shield_sensor.py b/custom_components/oig_cloud/entities/shield_sensor.py new file mode 100644 index 00000000..8597be93 --- /dev/null +++ b/custom_components/oig_cloud/entities/shield_sensor.py @@ -0,0 +1,457 @@ +"""ServiceShield senzory pro OIG Cloud integraci.""" + +import logging +from datetime import datetime +from typing import Any, Dict, List, Optional, Union + +from ..const import DOMAIN +from .base_sensor import OigCloudSensor, _get_sensor_definition, resolve_box_id + +_LOGGER = logging.getLogger(__name__) +SERVICE_PREFIX = f"{DOMAIN}." + + +def _extract_param_type(entity_id: str) -> str: + """Extrahuje typ parametru z entity_id pro strukturovaný targets output.""" + if "p_max_feed_grid" in entity_id: + return "limit" + elif "prms_to_grid" in entity_id: + return "mode" + elif "box_prms_mode" in entity_id: + return "mode" + elif "boiler_manual_mode" in entity_id: + return "mode" + elif "formating_mode" in entity_id: + return "level" + else: + return "value" # Fallback + + +# OPRAVA: České překlady pro ServiceShield stavy +SERVICESHIELD_STATE_TRANSLATIONS: Dict[str, str] = { + "active": "aktivní", + "idle": "nečinný", + "monitoring": "monitoruje", + "protecting": "chrání", + "disabled": "zakázán", + "error": "chyba", + "starting": "spouští se", + "stopping": "zastavuje se", + "unknown": "neznámý", + "unavailable": "nedostupný", +} + + +def translate_shield_state(state: str) -> str: + """Přeloží ServiceShield stav do češtiny.""" + return SERVICESHIELD_STATE_TRANSLATIONS.get(state.lower(), state) + + +class OigCloudShieldSensor(OigCloudSensor): + """Senzor pro ServiceShield monitoring - REAL-TIME bez coordinator delay.""" + + def __init__(self, coordinator: Any, sensor_type: str) -> None: + # KRITICKÁ OPRAVA: Shield senzory NESMÍ dědit z CoordinatorEntity! + # CoordinatorEntity má built-in debounce (30s interval), který zpozdí updates. + # Shield senzory potřebují OKAMŽITÉ updaty (<100ms), proto používáme jen SensorEntity. + from homeassistant.components.sensor import SensorEntity + + SensorEntity.__init__(self) + + self.coordinator = coordinator # Uložíme pro přístup k box_id + self._sensor_type = sensor_type + self._shield_callback_registered = False + + # Nastavíme potřebné atributy pro entity + sensor_def = _get_sensor_definition(sensor_type) + + # OPRAVA: Zjednodušit na stejnou logiku jako ostatní senzory + name_cs = sensor_def.get("name_cs") + name_en = sensor_def.get("name") + + self._attr_name = name_cs or name_en or sensor_type + + self._attr_native_unit_of_measurement = sensor_def.get("unit_of_measurement") + self._attr_icon = sensor_def.get("icon") + self._attr_device_class = sensor_def.get("device_class") + self._attr_state_class = sensor_def.get("state_class") + + # OPRAVA: Bezpečné získání box_id s fallback (stejně jako v OigCloudSensor) + self._box_id: str = resolve_box_id(coordinator) + if self._box_id == "unknown": + _LOGGER.warning( + f"No coordinator data available for {sensor_type}, using fallback box_id" + ) + + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + _LOGGER.debug( + f"✅ Properly initialized ServiceShield sensor: {sensor_type} with entity_id: {self.entity_id}" + ) + + @property + def should_poll(self) -> bool: + """Shield senzor je čistě event-driven. + + Updates přicházejí: + - Okamžitě přes callback když se změní fronta/pending + - Automaticky při coordinator refresh (30-120s) + - Ihned po API volání díky coordinator.async_request_refresh() + """ + return False + + async def async_added_to_hass(self) -> None: + """Když je senzor přidán do Home Assistant.""" + # OPRAVA: Nevoláme super() protože už nejsme CoordinatorEntity + # Shield senzory jsou event-driven a nepotřebují coordinator updates + + # Registrujeme callback pro okamžitou aktualizaci při změně shield stavu + shield = self.hass.data.get(DOMAIN, {}).get("shield") + if shield and not self._shield_callback_registered: + shield.register_state_change_callback(self._on_shield_state_changed) + self._shield_callback_registered = True + _LOGGER.info(f"[Shield Sensor] Registrován callback pro {self.entity_id}") + + async def async_will_remove_from_hass(self) -> None: + """Když je senzor odstraněn z Home Assistant.""" + # Odregistrujeme callback + shield = self.hass.data.get(DOMAIN, {}).get("shield") + if shield and self._shield_callback_registered: + shield.unregister_state_change_callback(self._on_shield_state_changed) + self._shield_callback_registered = False + _LOGGER.info(f"[Shield Sensor] Odregistrován callback pro {self.entity_id}") + + # OPRAVA: Nevoláme super() protože už nejsme CoordinatorEntity + + def _on_shield_state_changed(self) -> None: + """Callback volaný při změně shield stavu - THREAD-SAFE verze.""" + _LOGGER.debug( + f"[Shield Sensor] Shield stav změněn - aktualizuji {self.entity_id}" + ) + # KRITICKÁ OPRAVA: Callback může být volán z jiného vlákna + # async_write_ha_state() NESMÍ být voláno z jiného vlákna - crashuje HA + # schedule_update_ha_state() je thread-safe a naplánuje update v event loop + self.schedule_update_ha_state() + + @property + def name(self) -> str: + """Jméno senzoru.""" + # OPRAVA: Zjednodušit na stejnou logiku jako ostatní senzory + sensor_def = _get_sensor_definition(self._sensor_type) + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + name_cs = sensor_def.get("name_cs") + name_en = sensor_def.get("name") + + return name_cs or name_en or self._sensor_type + + @property + def icon(self) -> str: + """Ikona senzoru.""" + # Použijeme definice z SENSOR_TYPES místo hardcodovaných ikon + sensor_def = _get_sensor_definition(self._sensor_type) + return sensor_def.get("icon", "mdi:shield") + + @property + def unit_of_measurement(self) -> Optional[str]: + """Jednotka měření.""" + # Použijeme definice z SENSOR_TYPES + sensor_def = _get_sensor_definition(self._sensor_type) + return sensor_def.get("unit_of_measurement") + + @property + def device_class(self) -> Optional[str]: + """Třída zařízení.""" + # Použijeme definice z SENSOR_TYPES + sensor_def = _get_sensor_definition(self._sensor_type) + return sensor_def.get("device_class") + + @property + def state(self) -> Optional[Union[str, int, datetime]]: + """Stav senzoru.""" + try: + shield = self.hass.data[DOMAIN].get("shield") + if not shield: + return translate_shield_state("unavailable") + return _get_shield_state(self._sensor_type, shield) + + except Exception as e: + _LOGGER.error(f"Error getting shield sensor state: {e}") + return translate_shield_state("error") + + return translate_shield_state("unknown") + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Dodatečné atributy.""" + attrs = {} + + try: + shield = self.hass.data[DOMAIN].get("shield") + if shield: + attrs.update( + _build_shield_attrs( + self.hass, shield, sensor_type=self._sensor_type + ) + ) + + except Exception as e: + _LOGGER.error(f"Error getting shield attributes: {e}") + attrs["error"] = str(e) + + return attrs + + @property + def unique_id(self) -> str: + """Jedinečné ID senzoru.""" + box_id = self._resolve_box_id() + # Přidáme verzi do unique_id pro vyřešení unit problému + return f"oig_cloud_shield_{box_id}_{self._sensor_type}_v2" + + @property + def device_info(self) -> Dict[str, Any]: + """Informace o zařízení - ServiceShield bude v separátním Shield zařízení.""" + box_id = self._resolve_box_id() + return { + "identifiers": {(DOMAIN, f"{box_id}_shield")}, + "name": f"ServiceShield {box_id}", + "manufacturer": "OIG", + "model": "Shield", + "via_device": (DOMAIN, box_id), + } + + def _resolve_box_id(self) -> str: + """Return stable box_id/inverter_sn (avoid spot_prices/unknown).""" + from .base_sensor import resolve_box_id + + box_id = resolve_box_id(self.coordinator) + if not box_id or box_id == "unknown": + try: + import re + + title = ( + getattr( + getattr(self.coordinator, "config_entry", None), "title", "" + ) + or "" + ) + m = re.search(r"(\\d{6,})", title) + if m: + box_id = m.group(1) + except Exception: + box_id = None + return box_id or "unknown" + + @property + def available(self) -> bool: + """Return if entity is available.""" + # ServiceShield senzory jsou dostupné pokud existuje shield objekt + shield = self.hass.data[DOMAIN].get("shield") + return shield is not None + + +def _get_shield_state(sensor_type: str, shield: Any) -> Optional[Union[str, int, datetime]]: + if sensor_type == "service_shield_status": + return translate_shield_state("active") + if sensor_type == "service_shield_queue": + queue = getattr(shield, "queue", []) + pending = getattr(shield, "pending", {}) + return len(queue) + len(pending) + if sensor_type == "mode_reaction_time": + return _compute_mode_reaction_time(shield) + if sensor_type == "service_shield_activity": + return _compute_shield_activity(shield) + return translate_shield_state("unknown") + + +def _compute_mode_reaction_time(shield: Any) -> Optional[float]: + if not shield.mode_tracker: + return None + stats = shield.mode_tracker.get_statistics() + if not stats: + return None + medians = [s["median_seconds"] for s in stats.values() if "median_seconds" in s] + if not medians: + return None + return round(sum(medians) / len(medians), 1) + + +def _compute_shield_activity(shield: Any) -> str: + running = getattr(shield, "running", None) + if not running: + return translate_shield_state("idle") + + service_short = running.replace(SERVICE_PREFIX, "") + pending = getattr(shield, "pending", {}) + pending_info = pending.get(running) + if pending_info: + entities = pending_info.get("entities", {}) + target_value = next(iter(entities.values()), None) if entities else None + if target_value: + return f"{service_short}: {target_value}" + return service_short + + +def _build_shield_attrs( + hass: Any, shield: Any, *, sensor_type: str +) -> Dict[str, Any]: + queue = getattr(shield, "queue", []) + running = getattr(shield, "running", None) + pending = getattr(shield, "pending", {}) + + running_requests = _build_running_requests(hass, pending, running) + queue_items = _build_queue_items(hass, queue, getattr(shield, "queue_metadata", {})) + + base_attrs = { + "total_requests": len(queue) + len(pending), + "running_requests": running_requests, + "primary_running": running.replace(SERVICE_PREFIX, "") if running else None, + "queued_requests": queue_items, + "queue_length": len(queue), + "running_count": len(pending), + } + + if sensor_type == "mode_reaction_time" and shield.mode_tracker: + stats = shield.mode_tracker.get_statistics() + base_attrs["scenarios"] = stats + base_attrs["total_samples"] = sum( + s.get("samples", 0) for s in stats.values() + ) + base_attrs["tracked_scenarios"] = len(stats) + + return base_attrs + + +def _build_running_requests( + hass: Any, pending: Dict[str, Any], running: Optional[str] +) -> List[Dict[str, Any]]: + running_requests = [] + for svc_name, svc_info in pending.items(): + targets = _build_targets( + hass, + svc_info.get("entities", {}), + original_states=svc_info.get("original_states", {}), + ) + changes = _build_changes(targets, include_current=True) + service_short = svc_name.replace("oig_cloud.", "") + description = _build_description(service_short, targets) + + running_requests.append( + { + "service": service_short, + "description": description, + "targets": targets, + "changes": changes, + "started_at": ( + svc_info.get("called_at").isoformat() + if svc_info.get("called_at") + else None + ), + "duration_seconds": ( + (datetime.now() - svc_info.get("called_at")).total_seconds() + if svc_info.get("called_at") + else None + ), + "is_primary": svc_name == running, + } + ) + return running_requests + + +def _build_queue_items( + hass: Any, queue: List[Any], queue_metadata: Dict[Any, Any] +) -> List[Dict[str, Any]]: + queue_items = [] + for i, q in enumerate(queue): + service_name = q[0].replace("oig_cloud.", "") + params = q[1] + expected_entities = q[2] + targets = _build_targets(hass, expected_entities, original_states=None) + changes = _build_changes(targets, include_current=False) + + queued_at, trace_id = _resolve_queue_meta(queue_metadata, q[0], params) + duration_seconds = ( + (datetime.now() - queued_at).total_seconds() if queued_at else None + ) + description = _build_description(service_name, targets) + + queue_items.append( + { + "position": i + 1, + "service": service_name, + "description": description, + "targets": targets, + "changes": changes, + "queued_at": queued_at.isoformat() if queued_at else None, + "duration_seconds": duration_seconds, + "trace_id": trace_id, + "params": params, + } + ) + return queue_items + + +def _build_targets( + hass: Any, + entities: Dict[str, Any], + *, + original_states: Optional[Dict[str, Any]], +) -> List[Dict[str, Any]]: + targets = [] + for entity_id, expected_value in entities.items(): + current_state = hass.states.get(entity_id) + current_value = current_state.state if current_state else "unknown" + original_value = ( + original_states.get(entity_id, "unknown") if original_states else current_value + ) + targets.append( + { + "param": _extract_param_type(entity_id), + "value": expected_value, + "entity_id": entity_id, + "from": original_value, + "to": expected_value, + "current": current_value, + } + ) + return targets + + +def _build_changes(targets: List[Dict[str, Any]], *, include_current: bool) -> List[str]: + changes = [] + for target in targets: + entity_display = _format_entity_display(target["entity_id"]) + if include_current: + changes.append( + f"{entity_display}: '{target['from']}' → '{target['to']}' (nyní: '{target['current']}')" + ) + else: + changes.append( + f"{entity_display}: '{target['current']}' → '{target['to']}'" + ) + return changes + + +def _format_entity_display(entity_id: str) -> str: + entity_parts = entity_id.split("_") + if "p_max_feed_grid" in entity_id: + return "_".join(entity_parts[-5:]) + if "_" in entity_id: + return "_".join(entity_parts[-2:]) + return entity_id + + +def _build_description(service_short: str, targets: List[Dict[str, Any]]) -> str: + target_value = targets[0]["value"] if targets else None + if target_value: + return f"{service_short}: {target_value}" + return f"Změna {service_short.replace('_', ' ')}" + + +def _resolve_queue_meta( + queue_metadata: Dict[Any, Any], service_name: str, params: Any +) -> tuple[Optional[datetime], Optional[str]]: + queue_meta = queue_metadata.get((service_name, str(params))) + if isinstance(queue_meta, dict): + return queue_meta.get("queued_at"), queue_meta.get("trace_id") + return None, queue_meta diff --git a/custom_components/oig_cloud/entities/solar_forecast_sensor.py b/custom_components/oig_cloud/entities/solar_forecast_sensor.py new file mode 100755 index 00000000..1a32fb91 --- /dev/null +++ b/custom_components/oig_cloud/entities/solar_forecast_sensor.py @@ -0,0 +1,1029 @@ +"""Solar forecast senzory pro OIG Cloud integraci.""" + +import asyncio +import logging +import time +from datetime import datetime, timedelta +from typing import Any, Callable, Dict, Optional, Union + +import aiohttp +from homeassistant.config_entries import ConfigEntry +from homeassistant.helpers import device_registry as dr +from homeassistant.helpers import entity_registry as er +from homeassistant.helpers.event import async_track_time_interval +from homeassistant.helpers.storage import Store + +from .base_sensor import OigCloudSensor + +_LOGGER = logging.getLogger(__name__) + +# URL pro forecast.solar API +FORECAST_SOLAR_API_URL = ( + "https://api.forecast.solar/estimate/{lat}/{lon}/{declination}/{azimuth}/{kwp}" +) +FORECAST_SOLAR_API_URL_WITH_KEY = "https://api.forecast.solar/{api_key}/estimate/{lat}/{lon}/{declination}/{azimuth}/{kwp}" +SOLCAST_API_URL = "https://api.solcast.com.au/world_radiation/forecasts" + + +def _parse_forecast_hour(hour_str: str) -> Optional[datetime]: + try: + return datetime.fromisoformat(hour_str) + except Exception as err: + _LOGGER.debug("Invalid forecast hour '%s': %s", hour_str, err) + return None + + +class OigCloudSolarForecastSensor(OigCloudSensor): + """Senzor pro solar forecast data.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + config_entry: ConfigEntry, + device_info: Dict[str, Any], # PŘIDÁNO: přebíráme device_info jako parametr + ) -> None: + super().__init__(coordinator, sensor_type) + self._config_entry = config_entry + self._device_info = device_info # OPRAVA: použijeme předané device_info + + # OPRAVA: Přepsat název podle name_cs logiky (pokud OigCloudSensor nemá správnou logiku) + from ..sensors.SENSOR_TYPES_SOLAR_FORECAST import SENSOR_TYPES_SOLAR_FORECAST + + sensor_config = SENSOR_TYPES_SOLAR_FORECAST.get(sensor_type, {}) + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + self._attr_name = name_cs or name_en or sensor_type + + self._last_forecast_data: Optional[Dict[str, Any]] = None + self._last_api_call: float = 0 + self._min_api_interval: float = 300 # 5 minut mezi voláními + self._retry_count: int = 0 + self._max_retries: int = 3 + self._update_interval_remover: Optional[Any] = None + + # Storage key pro persistentní uložení posledního API volání a dat + self._storage_key = f"oig_solar_forecast_{self._box_id}" + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - nastavit periodické aktualizace podle konfigurace.""" + await super().async_added_to_hass() + + # Načtení posledního času API volání a dat z persistentního úložiště + await self._load_persistent_data() + + forecast_mode = self._config_entry.options.get( + "solar_forecast_mode", "daily_optimized" + ) + + if forecast_mode != "manual": + interval = self._get_update_interval(forecast_mode) + if interval: + self._update_interval_remover = async_track_time_interval( + self.hass, self._periodic_update, interval + ) + _LOGGER.info( + f"🌞 Solar forecast periodic updates enabled: {forecast_mode}" + ) + + # OKAMŽITÁ inicializace dat při startu - pouze pro hlavní senzor a pouze pokud jsou data zastaralá + if self._sensor_type == "solar_forecast" and self._should_fetch_data(): + _LOGGER.info( + f"🌞 Data is outdated (last call: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S') if self._last_api_call else 'never'}), triggering immediate fetch" + ) + # Spustíme úlohu na pozadí s malým zpožděním + self.hass.async_create_task(self._delayed_initial_fetch()) + else: + # Pokud máme načtená data z úložiště, sdílíme je s koordinátorem + if self._last_forecast_data: + if hasattr(self.coordinator, "solar_forecast_data"): + self.coordinator.solar_forecast_data = self._last_forecast_data + else: + setattr( + self.coordinator, + "solar_forecast_data", + self._last_forecast_data, + ) + _LOGGER.info( + f"🌞 Loaded forecast data from storage (last call: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}), skipping immediate fetch" + ) + + async def _load_persistent_data(self) -> None: + """Načte čas posledního API volání a forecast data z persistentního úložiště.""" + try: + store = Store( + self.hass, + version=1, + key=self._storage_key, + ) + data = await store.async_load() + + if data: + # Načtení času posledního API volání + if isinstance(data.get("last_api_call"), (int, float)): + self._last_api_call = float(data["last_api_call"]) + _LOGGER.debug( + f"🌞 Loaded last API call time: {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}" + ) + + # Načtení forecast dat + if isinstance(data.get("forecast_data"), dict): + self._last_forecast_data = data["forecast_data"] + _LOGGER.debug( + f"🌞 Loaded forecast data from storage with {len(self._last_forecast_data)} keys" + ) + else: + _LOGGER.debug("🌞 No forecast data found in storage") + else: + _LOGGER.debug("🌞 No previous data found in storage") + + except Exception as e: + _LOGGER.warning(f"🌞 Failed to load persistent data: {e}") + self._last_api_call = 0 + self._last_forecast_data = None + + async def _save_persistent_data(self) -> None: + """Uloží čas posledního API volání a forecast data do persistentního úložiště.""" + try: + store = Store( + self.hass, + version=1, + key=self._storage_key, + ) + + save_data = { + "last_api_call": self._last_api_call, + "forecast_data": self._last_forecast_data, + "saved_at": datetime.now().isoformat(), + } + + await store.async_save(save_data) + _LOGGER.debug( + f"🌞 Saved persistent data: API call time {datetime.fromtimestamp(self._last_api_call).strftime('%Y-%m-%d %H:%M:%S')}" + ) + except Exception as e: + _LOGGER.warning(f"🌞 Failed to save persistent data: {e}") + + async def _load_last_api_call(self) -> None: + """Načte čas posledního API volání z persistentního úložiště.""" + # Tato metoda je teď nahrazena _load_persistent_data + pass + + async def _save_last_api_call(self) -> None: + """Uloží čas posledního API volání do persistentního úložiště.""" + # Tato metoda je teď nahrazena _save_persistent_data + pass + + def _should_fetch_data(self) -> bool: + """Rozhodne zda je potřeba načíst nová data na základě módu a posledního volání.""" + current_time = time.time() + + # Pokud nemáme žádná data + if not self._last_api_call: + return True + + forecast_mode = self._config_entry.options.get( + "solar_forecast_mode", "daily_optimized" + ) + + time_since_last = current_time - self._last_api_call + + # Pro různé módy různé intervaly + if forecast_mode == "daily_optimized": + # Data starší než 4 hodiny vyžadují aktualizaci + return time_since_last > 14400 # 4 hodiny + elif forecast_mode == "daily": + # Data starší než 20 hodin vyžadují aktualizaci + return time_since_last > 72000 # 20 hodin + elif forecast_mode == "every_4h": + # Data starší než 4 hodiny + return time_since_last > 14400 # 4 hodiny + elif forecast_mode == "hourly": + # Data starší než 1 hodinu + return time_since_last > 3600 # 1 hodina + + # Pro manual mode nikdy neaktualizujeme automaticky + return False + + def _get_update_interval(self, mode: str) -> Optional[timedelta]: + """Získá interval aktualizace podle módu.""" + intervals = { + "hourly": timedelta(hours=1), # Pro testing - vysoká frekvence + "every_4h": timedelta(hours=4), # Klasický 4-hodinový + "daily": timedelta(hours=24), # Jednou denně + "daily_optimized": timedelta( + minutes=30 + ), # Každých 30 minut, ale update jen 3x denně + "manual": None, # Pouze manuální + } + return intervals.get(mode) + + async def _delayed_initial_fetch(self) -> None: + """Spustí okamžitou aktualizaci s malým zpožděním.""" + # Počkáme 5 sekund na dokončení inicializace + await asyncio.sleep(5) + + try: + _LOGGER.info("🌞 Starting immediate solar forecast data fetch") + await self.async_fetch_forecast_data() + _LOGGER.info("🌞 Initial solar forecast data fetch completed") + except Exception as e: + _LOGGER.error(f"🌞 Initial solar forecast fetch failed: {e}") + + async def _periodic_update(self, now: datetime) -> None: + """Periodická aktualizace - optimalizovaná pro 3x denně.""" + forecast_mode = self._config_entry.options.get( + "solar_forecast_mode", "daily_optimized" + ) + + current_time = time.time() + + # Kontrola rate limiting - nikdy neaktualizujeme častěji než každých 5 minut + if current_time - self._last_api_call < self._min_api_interval: + _LOGGER.debug( + f"🌞 Rate limiting: {(current_time - self._last_api_call) / 60:.1f} minutes since last call" + ) + return + + should_fetch = False + if forecast_mode == "daily_optimized": + should_fetch = self._should_fetch_daily_optimized(now, current_time) + elif forecast_mode == "daily": + should_fetch = self._should_fetch_daily(now) + elif forecast_mode == "every_4h": + should_fetch = self._should_fetch_every_4h(current_time) + elif forecast_mode == "hourly": + should_fetch = self._should_fetch_hourly(current_time) + + if should_fetch and self._is_primary_sensor(): + await self.async_fetch_forecast_data() + + def _is_primary_sensor(self) -> bool: + return self._sensor_type == "solar_forecast" + + def _should_fetch_daily_optimized(self, now: datetime, current_time: float) -> bool: + target_hours = [6, 12, 16] + if now.hour not in target_hours or now.minute > 5: + return False + if self._last_api_call: + time_since_last = current_time - self._last_api_call + if time_since_last < 10800: # 3 hodiny + _LOGGER.debug( + f"🌞 Skipping update - last call was {time_since_last / 60:.1f} minutes ago" + ) + return False + _LOGGER.info(f"🌞 Scheduled solar forecast update at {now.hour}:00") + return True + + def _should_fetch_daily(self, now: datetime) -> bool: + if now.hour != 6: + return False + if self._last_api_call: + last_call_date = datetime.fromtimestamp(self._last_api_call).date() + if last_call_date == now.date(): + _LOGGER.debug("🌞 Already updated today, skipping") + return False + return True + + def _should_fetch_every_4h(self, current_time: float) -> bool: + if self._last_api_call: + time_since_last = current_time - self._last_api_call + if time_since_last < 14400: # 4 hodiny + return False + return True + + def _should_fetch_hourly(self, current_time: float) -> bool: + if self._last_api_call: + time_since_last = current_time - self._last_api_call + if time_since_last < 3600: # 1 hodina + return False + return True + + # Přidání metody pro okamžitou aktualizaci + async def async_manual_update(self) -> bool: + """Manuální aktualizace forecast dat - pro službu.""" + try: + _LOGGER.info( + f"🌞 Manual solar forecast update requested for {self.entity_id}" + ) + await self.async_fetch_forecast_data() + return True + except Exception as e: + _LOGGER.error( + f"Manual solar forecast update failed for {self.entity_id}: {e}" + ) + return False + + async def async_will_remove_from_hass(self) -> None: + """Při odebrání z HA - zrušit periodické aktualizace.""" + if self._update_interval_remover: + self._update_interval_remover() + self._update_interval_remover = None + await super().async_will_remove_from_hass() + + def _is_rate_limited(self, current_time: float) -> bool: + if current_time - self._last_api_call >= self._min_api_interval: + return False + remaining_time = self._min_api_interval - (current_time - self._last_api_call) + _LOGGER.warning( + "🌞 Rate limiting: waiting %.1f seconds before next API call", + remaining_time, + ) + return True + + def _build_forecast_url( + self, + *, + api_key: str, + lat: float, + lon: float, + declination: float, + azimuth: float, + kwp: float, + ) -> str: + if api_key: + return FORECAST_SOLAR_API_URL_WITH_KEY.format( + api_key=api_key, + lat=lat, + lon=lon, + declination=declination, + azimuth=azimuth, + kwp=kwp, + ) + return FORECAST_SOLAR_API_URL.format( + lat=lat, + lon=lon, + declination=declination, + azimuth=azimuth, + kwp=kwp, + ) + + async def _fetch_forecast_solar_strings( + self, + *, + lat: float, + lon: float, + api_key: str, + string1_enabled: bool, + string2_enabled: bool, + ) -> tuple[Optional[dict], Optional[dict]]: + data_string1: Optional[dict] = None + data_string2: Optional[dict] = None + + async with aiohttp.ClientSession() as session: + if string1_enabled: + data_string1, fatal = await self._fetch_forecast_string( + session=session, + label="string 1", + lat=lat, + lon=lon, + api_key=api_key, + declination=self._config_entry.options.get( + "solar_forecast_string1_declination", 10 + ), + azimuth=self._config_entry.options.get( + "solar_forecast_string1_azimuth", 138 + ), + kwp=self._config_entry.options.get( + "solar_forecast_string1_kwp", 5.4 + ), + fatal_on_error=True, + ) + if fatal: + return None, None + else: + _LOGGER.debug("🌞 String 1 disabled") + + if string2_enabled: + data_string2, _fatal = await self._fetch_forecast_string( + session=session, + label="string 2", + lat=lat, + lon=lon, + api_key=api_key, + declination=self._config_entry.options.get( + "solar_forecast_string2_declination", 10 + ), + azimuth=self._config_entry.options.get( + "solar_forecast_string2_azimuth", 138 + ), + kwp=self._config_entry.options.get("solar_forecast_string2_kwp", 0), + fatal_on_error=False, + ) + else: + _LOGGER.debug("🌞 String 2 disabled") + + return data_string1, data_string2 + + async def _fetch_forecast_string( + self, + *, + session: aiohttp.ClientSession, + label: str, + lat: float, + lon: float, + api_key: str, + declination: float, + azimuth: float, + kwp: float, + fatal_on_error: bool, + ) -> tuple[Optional[dict], bool]: + url = self._build_forecast_url( + api_key=api_key, + lat=lat, + lon=lon, + declination=declination, + azimuth=azimuth, + kwp=kwp, + ) + _LOGGER.info("🌞 Calling forecast.solar API for %s: %s", label, url) + async with session.get(url, timeout=30) as response: + if response.status == 200: + data = await response.json() + _LOGGER.debug("🌞 %s data received successfully", label) + return data, False + if response.status == 422: + error_text = await response.text() + _LOGGER.warning("🌞 %s API error 422: %s", label, error_text) + return None, fatal_on_error + if response.status == 429: + _LOGGER.warning("🌞 %s rate limited", label) + return None, fatal_on_error + error_text = await response.text() + _LOGGER.error("🌞 %s API error %s: %s", label, response.status, error_text) + return None, fatal_on_error + + async def async_fetch_forecast_data(self) -> None: + """Získání forecast dat z API pro oba stringy.""" + try: + _LOGGER.debug(f"[{self.entity_id}] Starting solar forecast API call") + + current_time = time.time() + + if self._is_rate_limited(current_time): + return + + provider = self._config_entry.options.get( + "solar_forecast_provider", "forecast_solar" + ) + if provider == "solcast": + await self._fetch_solcast_data(current_time) + return + + # Konfigurační parametry + lat = self._config_entry.options.get("solar_forecast_latitude", 50.1219800) + lon = self._config_entry.options.get("solar_forecast_longitude", 13.9373742) + api_key = self._config_entry.options.get("solar_forecast_api_key", "") + + # String 1 - zapnutý podle checkboxu + string1_enabled = self._config_entry.options.get( + "solar_forecast_string1_enabled", True + ) + + # String 2 - zapnutý podle checkboxu + string2_enabled = self._config_entry.options.get( + "solar_forecast_string2_enabled", False + ) + + _LOGGER.debug("🌞 String 1: enabled=%s", string1_enabled) + _LOGGER.debug("🌞 String 2: enabled=%s", string2_enabled) + + data_string1, data_string2 = await self._fetch_forecast_solar_strings( + lat=lat, + lon=lon, + api_key=api_key, + string1_enabled=string1_enabled, + string2_enabled=string2_enabled, + ) + + # Kontrola, zda máme alespoň jeden string s daty + if not data_string1 and not data_string2: + _LOGGER.error( + "🌞 No data received - at least one string must be enabled" + ) + return + + # Zpracování dat + self._last_forecast_data = self._process_forecast_data( + data_string1, data_string2 + ) + self._last_api_call = current_time + + # Uložení času posledního API volání a dat do persistentního úložiště + await self._save_persistent_data() + + # Uložení dat do koordinátoru pro sdílení mezi senzory + if hasattr(self.coordinator, "solar_forecast_data"): + self.coordinator.solar_forecast_data = self._last_forecast_data + else: + setattr( + self.coordinator, "solar_forecast_data", self._last_forecast_data + ) + + _LOGGER.info( + f"🌞 Solar forecast data updated successfully - last API call: {datetime.fromtimestamp(current_time).strftime('%Y-%m-%d %H:%M:%S')}" + ) + + # Aktualizuj stav tohoto senzoru + self.async_write_ha_state() + + # NOVÉ: Pošli signál ostatním solar forecast sensorům, že jsou dostupná nová data + await self._broadcast_forecast_data() + + except asyncio.TimeoutError: + _LOGGER.warning( + f"[{self.entity_id}] Timeout fetching solar forecast data - preserving cached data" + ) + # DŮLEŽITÉ: Při chybě NEZAPISOVAT do _last_forecast_data! + # Zachováváme stará platná data místo jejich přepsání chybovým objektem. + if self._last_forecast_data: + _LOGGER.info( + f"[{self.entity_id}] Using cached solar forecast data from previous successful fetch" + ) + # else: necháváme _last_forecast_data = None, ale to je OK - nemáme žádná data + + except Exception as e: + _LOGGER.error( + f"[{self.entity_id}] Error fetching solar forecast data: {e} - preserving cached data" + ) + # DŮLEŽITÉ: Při chybě NEZAPISOVAT do _last_forecast_data! + # Zachováváme stará platná data místo jejich přepsání chybovým objektem. + if self._last_forecast_data: + _LOGGER.info( + f"[{self.entity_id}] Using cached solar forecast data from previous successful fetch" + ) + # else: necháváme _last_forecast_data = None + + async def _fetch_solcast_data(self, current_time: float) -> None: + """Fetch forecast data from Solcast API and map to unified structure.""" + lat = self._config_entry.options.get("solar_forecast_latitude", 50.1219800) + lon = self._config_entry.options.get("solar_forecast_longitude", 13.9373742) + api_key = self._config_entry.options.get("solcast_api_key", "").strip() + + if not api_key: + _LOGGER.error("🌞 Solcast API key missing") + return + + string1_enabled = self._config_entry.options.get( + "solar_forecast_string1_enabled", True + ) + string2_enabled = self._config_entry.options.get( + "solar_forecast_string2_enabled", False + ) + + kwp1 = ( + float(self._config_entry.options.get("solar_forecast_string1_kwp", 0)) + if string1_enabled + else 0.0 + ) + kwp2 = ( + float(self._config_entry.options.get("solar_forecast_string2_kwp", 0)) + if string2_enabled + else 0.0 + ) + total_kwp = kwp1 + kwp2 + if total_kwp <= 0: + _LOGGER.error("🌞 Solcast requires at least one enabled string with kWp") + return + + url = ( + f"{SOLCAST_API_URL}?latitude={lat}&longitude={lon}" + f"&format=json&api_key={api_key}" + ) + _LOGGER.info(f"🌞 Calling Solcast API: {url}") + + async with aiohttp.ClientSession() as session: + async with session.get(url, timeout=30) as response: + if response.status == 200: + data = await response.json() + elif response.status in (401, 403): + _LOGGER.error("🌞 Solcast authorization failed") + return + elif response.status == 429: + _LOGGER.warning("🌞 Solcast rate limited") + return + else: + error_text = await response.text() + _LOGGER.error( + f"🌞 Solcast API error {response.status}: {error_text}" + ) + return + + forecasts = data.get("forecasts", []) + if not forecasts: + _LOGGER.error("🌞 Solcast response has no forecasts") + return + + self._last_forecast_data = self._process_solcast_data( + forecasts, kwp1, kwp2 + ) + self._last_api_call = current_time + + await self._save_persistent_data() + + if hasattr(self.coordinator, "solar_forecast_data"): + self.coordinator.solar_forecast_data = self._last_forecast_data + else: + setattr(self.coordinator, "solar_forecast_data", self._last_forecast_data) + + _LOGGER.info( + f"🌞 Solcast forecast data updated - last API call: {datetime.fromtimestamp(current_time).strftime('%Y-%m-%d %H:%M:%S')}" + ) + self.async_write_ha_state() + await self._broadcast_forecast_data() + + def _process_solcast_data( + self, forecasts: list[Dict[str, Any]], kwp1: float, kwp2: float + ) -> Dict[str, Any]: + """Transform Solcast forecasts into unified solar forecast structure.""" + total_kwp = kwp1 + kwp2 + ratio1 = (kwp1 / total_kwp) if total_kwp else 0.0 + ratio2 = (kwp2 / total_kwp) if total_kwp else 0.0 + + watts_data: Dict[str, float] = {} + daily_kwh: Dict[str, float] = {} + + for entry in forecasts: + period_end = entry.get("period_end") + ghi = entry.get("ghi") + if not period_end or ghi is None: + continue + + period_hours = self._parse_solcast_period_hours(entry.get("period")) + try: + ghi_value = float(ghi) + except (TypeError, ValueError): + continue + + pv_estimate_kw = total_kwp * (ghi_value / 1000.0) + watts_data[period_end] = pv_estimate_kw * 1000.0 + + day_key = period_end.split("T")[0] + daily_kwh[day_key] = daily_kwh.get(day_key, 0.0) + ( + pv_estimate_kw * period_hours + ) + + total_hourly = self._convert_to_hourly(watts_data) + total_daily = daily_kwh + + string1_hourly = {k: v * ratio1 for k, v in total_hourly.items()} + string2_hourly = {k: v * ratio2 for k, v in total_hourly.items()} + string1_daily = {k: v * ratio1 for k, v in total_daily.items()} + string2_daily = {k: v * ratio2 for k, v in total_daily.items()} + + return { + "response_time": datetime.now().isoformat(), + "provider": "solcast", + "string1_hourly": string1_hourly, + "string1_daily": string1_daily, + "string1_today_kwh": next(iter(string1_daily.values()), 0), + "string2_hourly": string2_hourly, + "string2_daily": string2_daily, + "string2_today_kwh": next(iter(string2_daily.values()), 0), + "total_hourly": total_hourly, + "total_daily": total_daily, + "total_today_kwh": next(iter(total_daily.values()), 0), + "solcast_raw_data": forecasts, + } + + @staticmethod + def _parse_solcast_period_hours(period: Optional[str]) -> float: + """Parse Solcast period into hours. Defaults to 0.5h.""" + if not period: + return 0.5 + if period.startswith("PT") and period.endswith("M"): + try: + minutes = float(period[2:-1]) + return minutes / 60.0 + except ValueError: + return 0.5 + if period.startswith("PT") and period.endswith("H"): + try: + hours = float(period[2:-1]) + return hours + except ValueError: + return 0.5 + return 0.5 + + async def _broadcast_forecast_data(self) -> None: + """Pošle signál ostatním solar forecast sensorům o nových datech.""" + try: + # Získáme registry správným způsobem + dr.async_get(self.hass) + entity_registry = er.async_get(self.hass) + + # Najdeme naše zařízení + device_id = None + entity_entry = entity_registry.async_get(self.entity_id) + if entity_entry: + device_id = entity_entry.device_id + + if device_id: + # Najdeme všechny entity tohoto zařízení + device_entities = er.async_entries_for_device( + entity_registry, device_id + ) + + # Aktualizujeme všechny solar forecast senzory + for device_entity in device_entities: + if device_entity.entity_id.endswith( + "_solar_forecast_string1" + ) or device_entity.entity_id.endswith("_solar_forecast_string2"): + + entity = self.hass.states.get(device_entity.entity_id) + if entity: + # Spustíme aktualizaci entity + self.hass.async_create_task( + self.hass.services.async_call( + "homeassistant", + "update_entity", + {"entity_id": device_entity.entity_id}, + ) + ) + _LOGGER.debug( + f"🌞 Triggered update for {device_entity.entity_id}" + ) + except Exception as e: + _LOGGER.error(f"Error broadcasting forecast data: {e}") + + def _process_forecast_data( + self, + data_string1: Optional[Dict[str, Any]], + data_string2: Optional[Dict[str, Any]] = None, + ) -> Dict[str, Any]: + """Zpracuje data z forecast.solar API.""" + result = {"response_time": datetime.now().isoformat()} + + _LOGGER.info("🌞 PROCESS DEBUG: String1 has data: %s", data_string1 is not None) + _LOGGER.info("🌞 PROCESS DEBUG: String2 has data: %s", data_string2 is not None) + + try: + string1_data = _extract_string_data( + data_string1, self._convert_to_hourly, label="String1" + ) + string2_data = _extract_string_data( + data_string2, self._convert_to_hourly, label="String2" + ) + + result.update(_build_string_payload("string1", data_string1, string1_data)) + result.update(_build_string_payload("string2", data_string2, string2_data)) + + total_hourly, total_daily = _merge_totals( + string1_data, string2_data + ) + result.update( + { + "total_hourly": total_hourly, + "total_daily": total_daily, + "total_today_kwh": next(iter(total_daily.values()), 0), + } + ) + + _LOGGER.debug( + "Processed forecast data: String1 today: %.1fkWh, String2 today: %.1fkWh, Total today: %.1fkWh", + result.get("string1_today_kwh", 0.0), + result.get("string2_today_kwh", 0.0), + result.get("total_today_kwh", 0.0), + ) + + except Exception as e: + _LOGGER.error("Error processing forecast data: %s", e, exc_info=True) + result["error"] = str(e) + + return result + + def _convert_to_hourly(self, watts_data: Dict[str, float]) -> Dict[str, float]: + """Převede forecast data na hodinová data.""" + hourly_data = {} + + _LOGGER.info( + f"🌞 CONVERT DEBUG: Input watts_data has {len(watts_data)} timestamps" + ) + + for timestamp_str, power in watts_data.items(): + try: + # Parsování timestamp (forecast.solar používá UTC čas) + dt = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00")) + # Zaokrouhlení na celou hodinu + hour_key = dt.replace(minute=0, second=0, microsecond=0).isoformat() + # Uchování nejvyšší hodnoty pro danou hodinu + hourly_data[hour_key] = max(hourly_data.get(hour_key, 0), power) + except Exception as e: + _LOGGER.debug(f"Error parsing timestamp {timestamp_str}: {e}") + + _LOGGER.info( + f"🌞 CONVERT DEBUG: Output hourly_data has {len(hourly_data)} hours" + ) + if hourly_data: + sample = list(hourly_data.items())[:3] + _LOGGER.info(f"🌞 CONVERT DEBUG: Sample output: {sample}") + + return hourly_data + + @property + def device_info(self) -> Optional[Dict[str, Any]]: + """Return device info - Analytics Module.""" + return self._device_info + + @property + def available(self) -> bool: + """Return True if entity is available.""" + # ZJEDNODUŠENÍ: Pouze kontrola zda je solar forecast zapnutý + solar_enabled = self._config_entry.options.get("enable_solar_forecast", False) + return solar_enabled + + @property + def state(self) -> Optional[Union[float, str]]: + """Stav senzoru - celková denní prognóza výroby v kWh.""" + # OPRAVA: Pokud není dostupný, vrátit None + if not self.available: + return None + + # Zkusíme načíst data z koordinátoru pokud nemáme vlastní + if not self._last_forecast_data and hasattr( + self.coordinator, "solar_forecast_data" + ): + self._last_forecast_data = self.coordinator.solar_forecast_data + _LOGGER.debug( + f"🌞 {self._sensor_type}: loaded shared data from coordinator" + ) + + if not self._last_forecast_data: + return None + + try: + if self._sensor_type == "solar_forecast": + # Celková denní výroba z obou stringů v kWh + return round(self._last_forecast_data.get("total_today_kwh", 0), 2) + + elif self._sensor_type == "solar_forecast_string1": + # Denní výroba jen z string1 v kWh + return round(self._last_forecast_data.get("string1_today_kwh", 0), 2) + + elif self._sensor_type == "solar_forecast_string2": + # Denní výroba jen z string2 v kWh + return round(self._last_forecast_data.get("string2_today_kwh", 0), 2) + + except Exception as e: + _LOGGER.error(f"Error getting solar forecast state: {e}") + + return None + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Dodatečné atributy s hodinovými výkony a aktuální hodinovou prognózou.""" + if not self._last_forecast_data: + return {} + + attrs: Dict[str, Any] = {} + + try: + attrs["response_time"] = self._last_forecast_data.get("response_time") + + if self._sensor_type == "solar_forecast": + attrs.update(self._build_main_attrs()) + elif self._sensor_type == "solar_forecast_string1": + attrs.update(self._build_string_attrs("string1")) + elif self._sensor_type == "solar_forecast_string2": + attrs.update(self._build_string_attrs("string2")) + + except Exception as e: + _LOGGER.error(f"Error creating solar forecast attributes: {e}") + attrs["error"] = str(e) + + return attrs + + def _build_main_attrs(self) -> Dict[str, Any]: + current_hour = datetime.now().replace(minute=0, second=0, microsecond=0) + total_hourly = self._last_forecast_data.get("total_hourly", {}) + string1_hourly = self._last_forecast_data.get("string1_hourly", {}) + string2_hourly = self._last_forecast_data.get("string2_hourly", {}) + + today = datetime.now().date() + tomorrow = today + timedelta(days=1) + + today_total, tomorrow_total, today_total_sum, tomorrow_total_sum = ( + self._split_hourly(total_hourly, today, tomorrow) + ) + today_string1, tomorrow_string1, today_string1_sum, tomorrow_string1_sum = ( + self._split_hourly(string1_hourly, today, tomorrow) + ) + today_string2, tomorrow_string2, today_string2_sum, tomorrow_string2_sum = ( + self._split_hourly(string2_hourly, today, tomorrow) + ) + + return { + "today_total_kwh": self._last_forecast_data.get("total_today_kwh", 0), + "string1_today_kwh": self._last_forecast_data.get("string1_today_kwh", 0), + "string2_today_kwh": self._last_forecast_data.get("string2_today_kwh", 0), + "current_hour_kw": self._current_hour_kw(total_hourly, current_hour), + "today_hourly_total_kw": today_total, + "tomorrow_hourly_total_kw": tomorrow_total, + "today_hourly_string1_kw": today_string1, + "tomorrow_hourly_string1_kw": tomorrow_string1, + "today_hourly_string2_kw": today_string2, + "tomorrow_hourly_string2_kw": tomorrow_string2, + "today_total_sum_kw": round(today_total_sum, 2), + "tomorrow_total_sum_kw": round(tomorrow_total_sum, 2), + "today_string1_sum_kw": round(today_string1_sum, 2), + "tomorrow_string1_sum_kw": round(tomorrow_string1_sum, 2), + "today_string2_sum_kw": round(today_string2_sum, 2), + "tomorrow_string2_sum_kw": round(tomorrow_string2_sum, 2), + } + + def _build_string_attrs(self, key: str) -> Dict[str, Any]: + current_hour = datetime.now().replace(minute=0, second=0, microsecond=0) + hourly = self._last_forecast_data.get(f"{key}_hourly", {}) + today = datetime.now().date() + tomorrow = today + timedelta(days=1) + + today_hours, tomorrow_hours, today_sum, tomorrow_sum = self._split_hourly( + hourly, today, tomorrow + ) + + return { + "today_kwh": self._last_forecast_data.get(f"{key}_today_kwh", 0), + "current_hour_kw": self._current_hour_kw(hourly, current_hour), + "today_hourly_kw": today_hours, + "tomorrow_hourly_kw": tomorrow_hours, + "today_sum_kw": round(today_sum, 2), + "tomorrow_sum_kw": round(tomorrow_sum, 2), + } + + @staticmethod + def _current_hour_kw(hourly: Dict[str, Any], current_hour: datetime) -> float: + current_hour_watts = hourly.get(current_hour.isoformat(), 0) + return round(current_hour_watts / 1000, 2) + + @staticmethod + def _split_hourly( + hourly: Dict[str, Any], today: datetime.date, tomorrow: datetime.date + ) -> tuple[Dict[str, float], Dict[str, float], float, float]: + today_hours: Dict[str, float] = {} + tomorrow_hours: Dict[str, float] = {} + today_sum = 0.0 + tomorrow_sum = 0.0 + + for hour_str, power in hourly.items(): + hour_dt = _parse_forecast_hour(hour_str) + if hour_dt is None: + continue + power_kw = round(power / 1000, 2) + + if hour_dt.date() == today: + today_hours[hour_str] = power_kw + today_sum += power_kw + elif hour_dt.date() == tomorrow: + tomorrow_hours[hour_str] = power_kw + tomorrow_sum += power_kw + + return today_hours, tomorrow_hours, today_sum, tomorrow_sum + + +def _extract_string_data( + data: Optional[Dict[str, Any]], + convert_to_hourly: Callable[[Dict[str, float]], Dict[str, float]], + *, + label: str, +) -> Dict[str, Dict[str, float]]: + if not data or "result" not in data: + return {"hourly": {}, "daily": {}} + result = data.get("result", {}) + watts = result.get("watts", {}) or {} + wh_day = result.get("watt_hours_day", {}) or {} + _LOGGER.info("🌞 PROCESS DEBUG: %s watts has %s timestamps", label, len(watts)) + hourly = convert_to_hourly(watts) + daily = {k: v / 1000 for k, v in wh_day.items()} + return {"hourly": hourly, "daily": daily} + + +def _build_string_payload( + prefix: str, + raw_data: Optional[Dict[str, Any]], + string_data: Dict[str, Dict[str, float]], +) -> Dict[str, Any]: + hourly = string_data["hourly"] + daily = string_data["daily"] + payload = { + f"{prefix}_hourly": hourly, + f"{prefix}_daily": daily, + f"{prefix}_today_kwh": next(iter(daily.values()), 0), + } + if raw_data is not None: + payload[f"{prefix}_raw_data"] = raw_data + return payload + + +def _merge_totals( + string1_data: Dict[str, Dict[str, float]], + string2_data: Dict[str, Dict[str, float]], +) -> tuple[Dict[str, float], Dict[str, float]]: + total_hourly = string1_data["hourly"].copy() + total_daily = string1_data["daily"].copy() + for hour, power in string2_data["hourly"].items(): + total_hourly[hour] = total_hourly.get(hour, 0) + power + for day, energy in string2_data["daily"].items(): + total_daily[day] = total_daily.get(day, 0) + energy + return total_hourly, total_daily diff --git a/custom_components/oig_cloud/entities/statistics_sensor.py b/custom_components/oig_cloud/entities/statistics_sensor.py new file mode 100755 index 00000000..fc9677bf --- /dev/null +++ b/custom_components/oig_cloud/entities/statistics_sensor.py @@ -0,0 +1,1302 @@ +"""Statistics sensor implementation for OIG Cloud integration.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from statistics import median +from typing import Any, Dict, List, Optional, Tuple, Union + +from homeassistant.components.sensor import ( + SensorDeviceClass, + SensorEntity, + SensorStateClass, +) +from homeassistant.core import HomeAssistant +from homeassistant.helpers.event import async_track_time_interval +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.helpers.storage import Store +from homeassistant.util import dt as dt_util + +_LOGGER = logging.getLogger(__name__) +MAX_HOURLY_DATA_POINTS = 168 + + +class OigCloudStatisticsSensor(SensorEntity, RestoreEntity): + """Statistics sensor for OIG Cloud data.""" + + def __init__( + self, + coordinator: Any, + sensor_type: str, + device_info: Dict[str, Any], + ) -> None: + """Initialize the statistics sensor.""" + super().__init__() + self._coordinator = coordinator + self._sensor_type = sensor_type + self._device_info = device_info + + # Získáme konfiguraci senzoru + from ..sensor_types import SENSOR_TYPES + + sensor_config = SENSOR_TYPES.get(sensor_type, {}) + self._sensor_config = sensor_config + + # Stabilní box_id resolution (config entry → proxy → coordinator numeric keys) + try: + from .base_sensor import resolve_box_id + + self._data_key = resolve_box_id(coordinator) + except Exception: + self._data_key = "unknown" + + # OPRAVA: Konzistentní logika pro názvy jako u ostatních senzorů + name_cs = sensor_config.get("name_cs") + name_en = sensor_config.get("name") + + # Preferujeme český název, fallback na anglický, fallback na sensor_type + self._attr_name = name_cs or name_en or sensor_type + + # OPRAVA: Entity ID používá sensor_type (anglický klíč) a _box_id podle vzoru + # Unique ID má formát oig_cloud_{boxId}_{sensor} pro konzistenci + self._attr_unique_id = f"oig_cloud_{self._data_key}_{sensor_type}" + self._box_id = self._data_key + self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" + + self._attr_icon = sensor_config.get("icon") + self._attr_native_unit_of_measurement = sensor_config.get("unit") + + # Správné nastavení device_class - buď enum nebo None + device_class = sensor_config.get("device_class") + if isinstance(device_class, str): + try: + self._attr_device_class = getattr( + SensorDeviceClass, device_class.upper() + ) + except AttributeError: + self._attr_device_class = device_class + else: + self._attr_device_class = device_class + + # Správné nastavení state_class - buď enum nebo None + state_class = sensor_config.get("state_class") + if isinstance(state_class, str): + try: + self._attr_state_class = getattr(SensorStateClass, state_class.upper()) + except AttributeError: + self._attr_state_class = state_class + else: + self._attr_state_class = state_class + + # Správné nastavení entity_category - už je to enum z config + self._attr_entity_category = sensor_config.get("entity_category") + + # Inicializace datových struktur pro hodinové senzory + self._hourly_data: List[Dict[str, Any]] = [] + self._last_hour_reset: Optional[datetime] = None + self._last_source_value: Optional[float] = None + self._hourly_accumulated_energy: float = 0.0 + self._current_hourly_value: Optional[float] = None + + # Inicializace source_entity_id pro hodinové senzory + self._source_entity_id: Optional[str] = None + if self._sensor_type.startswith("hourly_"): + source_sensor = sensor_config.get("source_sensor") + if source_sensor: + self._source_entity_id = f"sensor.oig_{self._data_key}_{source_sensor}" + + # Statistická data pro základní mediánový senzor + self._sampling_data: List[Tuple[datetime, float]] = [] + self._max_sampling_size: int = 1000 + self._sampling_minutes: int = 10 + + # Data pro intervalové statistiky + self._interval_data: Dict[str, List[float]] = {} + self._last_interval_check: Optional[datetime] = None + self._current_interval_data: List[float] = [] + + # Storage pro persistentní data + self._storage_key = f"oig_stats_{self._data_key}_{sensor_type}" + + # Načtení konfigurace senzoru + if hasattr(self, "_sensor_config"): + config = self._sensor_config + self._sampling_minutes = config.get("sampling_minutes", 10) + self._max_sampling_size = config.get("sampling_size", 1000) + self._time_range = config.get("time_range") + self._day_type = config.get("day_type") + self._statistic = config.get("statistic", "median") + self._max_age_days = config.get("max_age_days", 30) + + _LOGGER.debug( + f"[{self.entity_id}] Initialized statistics sensor: {sensor_type}" + ) + + @property + def device_info(self) -> Optional[Dict[str, Any]]: + """Return device info - use same as other sensors.""" + return self._device_info + + async def async_added_to_hass(self) -> None: + """Handle entity which will be added.""" + await super().async_added_to_hass() + + # Načtení persistentních dat + await self._load_statistics_data() + + # Nastavení pravidelných aktualizací + if self._sensor_type == "battery_load_median": + # Základní mediánový senzor - aktualizace každou minutu + async_track_time_interval( + self.hass, self._update_sampling_data, timedelta(minutes=1) + ) + elif self._sensor_type.startswith("hourly_"): + # Hodinové senzory - kontrola konce hodiny každých 5 minut + async_track_time_interval( + self.hass, self._check_hourly_end, timedelta(minutes=5) + ) + _LOGGER.debug( + f"[{self.entity_id}] Set up hourly tracking for sensor: {self._sensor_type}" + ) + elif hasattr(self, "_time_range") and self._time_range is not None: + # Intervalové senzory - výpočet statistik jednou denně ve 2:00 + from homeassistant.helpers.event import async_track_time_change + + async_track_time_change( + self.hass, self._daily_statistics_update, hour=2, minute=0, second=0 + ) + _LOGGER.debug( + f"[{self.entity_id}] Set up daily statistics calculation at 2:00 for time range: {self._time_range}" + ) + # První výpočet po startu (neblokuj setup – může to trvat dlouho kvůli recorder historii) + self.hass.async_create_task(self._daily_statistics_update(None)) + + async def _load_statistics_data(self) -> None: + """Načte statistická data z persistentního úložiště.""" + try: + store = Store(self.hass, version=1, key=self._storage_key) + data = await store.async_load() + + if data: + self._restore_sampling_data(data) + self._restore_interval_data(data) + self._restore_hourly_data(data) + self._restore_hourly_state(data) + self._restore_last_hour_reset(data) + + # Vyčištění starých dat po načtení + await self._cleanup_old_data() + + _LOGGER.debug( + f"[{self.entity_id}] Loaded data - sampling: {len(self._sampling_data)}, " + f"hourly: {len(self._hourly_data)}, current_hourly: {self._current_hourly_value}" + ) + + # Okamžitý výpočet stavu po načtení dat + if self._sampling_data and self._sensor_type == "battery_load_median": + initial_state = self._calculate_statistics_value() + if initial_state is not None: + _LOGGER.debug( + f"[{self.entity_id}] Restored median state: {initial_state}W" + ) + self.async_write_ha_state() + + elif ( + self._sensor_type.startswith("hourly_") + and self._current_hourly_value is not None + ): + _LOGGER.debug( + f"[{self.entity_id}] Restored hourly state: {self._current_hourly_value} kWh" + ) + self.async_write_ha_state() + + except Exception as e: + _LOGGER.warning(f"[{self.entity_id}] Failed to load statistics data: {e}") + + def _restore_sampling_data(self, data: Dict[str, Any]) -> None: + if "sampling_data" in data: + sampling_list = data["sampling_data"] + self._sampling_data = self._load_sampling_data( + sampling_list, self._max_sampling_size + ) + + def _restore_interval_data(self, data: Dict[str, Any]) -> None: + if "interval_data" in data: + self._interval_data = data["interval_data"] + + def _restore_hourly_data(self, data: Dict[str, Any]) -> None: + if "hourly_data" in data: + self._hourly_data = self._load_hourly_data(data["hourly_data"]) + + def _restore_hourly_state(self, data: Dict[str, Any]) -> None: + if "current_hourly_value" in data: + self._current_hourly_value = data["current_hourly_value"] + if "last_source_value" in data: + self._last_source_value = data["last_source_value"] + + def _restore_last_hour_reset(self, data: Dict[str, Any]) -> None: + if not data.get("last_hour_reset"): + return + try: + self._last_hour_reset = datetime.fromisoformat(data["last_hour_reset"]) + if self._last_hour_reset.tzinfo is not None: + self._last_hour_reset = self._last_hour_reset.replace(tzinfo=None) + except (ValueError, TypeError) as e: + _LOGGER.warning( + f"[{self.entity_id}] Invalid last_hour_reset format: {e}" + ) + self._last_hour_reset = None + + async def _save_statistics_data(self) -> None: + """Uloží statistická data do persistentního úložiště.""" + try: + store = Store(self.hass, version=1, key=self._storage_key) + + sampling_data_serializable = self._serialize_sampling_data() + safe_hourly_data = self._serialize_hourly_data() + + save_data = { + "sampling_data": sampling_data_serializable, + "interval_data": self._interval_data, + "hourly_data": safe_hourly_data, + "current_hourly_value": self._current_hourly_value, + "last_source_value": self._last_source_value, + "last_hour_reset": ( + self._last_hour_reset.isoformat() if self._last_hour_reset else None + ), + "last_update": datetime.now().isoformat(), + } + + await store.async_save(save_data) + _LOGGER.debug(f"[{self.entity_id}] Saved statistics data") + + except Exception as e: + _LOGGER.warning(f"[{self.entity_id}] Failed to save statistics data: {e}") + + async def _cleanup_old_data(self) -> None: + """Vyčistí stará data podle konfigurace.""" + now = datetime.now() + + # Vyčištění sampling dat - ponechat jen posledních N minut + if self._sampling_data: + cutoff_time = now - timedelta(minutes=self._sampling_minutes * 2) + self._sampling_data = self._filter_sampling_data(cutoff_time) + + # Vyčištění intervalových dat - ponechat jen posledních N dní + if hasattr(self, "_max_age_days") and self._interval_data: + cutoff_date = (now - timedelta(days=self._max_age_days)).strftime( + "%Y-%m-%d" + ) + keys_to_remove = [ + key for key in self._interval_data.keys() if key < cutoff_date + ] + for key in keys_to_remove: + del self._interval_data[key] + + # Vyčištění hodinových dat - ponechat jen posledních 48 hodin + if self._hourly_data: + cutoff_time = now - timedelta(hours=48) + self._hourly_data = self._filter_hourly_data(cutoff_time) + + async def _update_sampling_data(self, now: datetime) -> None: + """Aktualizuje sampling data pro základní mediánový senzor.""" + if self._sensor_type != "battery_load_median": + return + + try: + # Získání aktuální hodnoty z source senzoru + source_value = self._get_actual_load_value() + if source_value is None: + return + + # Použití aktuálního lokálního času místo parametru + now_local = datetime.now() + + # Přidání nového vzorku + self._sampling_data.append((now_local, source_value)) + + # Omezení velikosti dat + if len(self._sampling_data) > self._max_sampling_size: + self._sampling_data = self._sampling_data[-self._max_sampling_size :] + + # Vyčištění starých dat - zajistit naive datetime pro porovnání + cutoff_time = now_local - timedelta(minutes=self._sampling_minutes) + cleaned_data = [] + for dt, value in self._sampling_data: + # Převod na naive datetime pokud je timezone-aware + dt_naive = dt.replace(tzinfo=None) if dt.tzinfo is not None else dt + if dt_naive > cutoff_time: + cleaned_data.append((dt_naive, value)) + + self._sampling_data = cleaned_data + + # Aktualizace stavu senzoru + self.async_write_ha_state() + + # Uložení dat každých 10 vzorků + if len(self._sampling_data) % 10 == 0: + await self._save_statistics_data() + + _LOGGER.debug( + f"[{self.entity_id}] Updated sampling data: {len(self._sampling_data)} points, " + f"current value: {source_value}W, time: {now_local.strftime('%H:%M:%S')}" + ) + + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error updating sampling data: {e}") + + async def _check_hourly_end(self, now: datetime) -> None: + """Kontroluje konec hodiny a aktualizuje hodinové senzory.""" + if not self._sensor_type.startswith("hourly_"): + return + + try: + if not _should_update_hourly(now, self._last_hour_reset): + return + + current_hour_naive = _current_hour_naive(now) + hourly_value = await self._calculate_hourly_energy() + if hourly_value is None: + return + + self._current_hourly_value = hourly_value + previous_hour_naive = _previous_hour_naive(current_hour_naive) + _append_hourly_record( + self._hourly_data, previous_hour_naive, hourly_value + ) + + cutoff_time = now - timedelta(hours=48) + cutoff_naive = cutoff_time.replace(tzinfo=None) if cutoff_time.tzinfo else cutoff_time + self._hourly_data = self._filter_hourly_data(cutoff_naive) + + self._last_hour_reset = current_hour_naive + + await self._save_statistics_data() + self.async_write_ha_state() + + _LOGGER.debug( + "[%s] Hourly update: %.3f kWh for hour ending at %s", + self.entity_id, + hourly_value, + previous_hour_naive.strftime("%H:%M"), + ) + + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error in hourly check: {e}") + + async def _daily_statistics_update(self, now: Optional[datetime]) -> None: + """Denní aktualizace intervalových statistik z recorder dat.""" + if not hasattr(self, "_time_range") or not self._time_range: + return + + try: + _LOGGER.debug(f"[{self.entity_id}] Starting daily statistics calculation") + + # Spočítat medián z posledních 30 dní + new_value = await self._calculate_interval_statistics_from_history() + + if new_value is not None: + # Uložit vypočítanou hodnotu + date_key = datetime.now().strftime("%Y-%m-%d") + if date_key not in self._interval_data: + self._interval_data[date_key] = [] + + # Přidat novou hodnotu + self._interval_data[date_key] = [new_value] + + # Vyčistit staré záznamy (starší než max_age_days + 1 den buffer) + max_days = getattr(self, "_max_age_days", 14) + cutoff_date = (datetime.now() - timedelta(days=max_days + 1)).strftime( + "%Y-%m-%d" + ) + self._interval_data = { + k: v for k, v in self._interval_data.items() if k >= cutoff_date + } + + # Uložit data + await self._save_statistics_data() + + # Aktualizovat stav senzoru + self.async_write_ha_state() + + _LOGGER.debug( + f"[{self.entity_id}] Daily statistics updated: {new_value:.1f}W " + f"for interval {self._time_range}" + ) + else: + _LOGGER.warning( + f"[{self.entity_id}] Daily statistics calculation returned None" + ) + + except Exception as e: + _LOGGER.error( + f"[{self.entity_id}] Error in daily statistics update: {e}", + exc_info=True, + ) + + def _is_correct_day_type(self, dt: datetime) -> bool: + """Kontroluje zda je správný typ dne (weekday/weekend).""" + is_weekend = dt.weekday() >= 5 + + if hasattr(self, "_day_type"): + if self._day_type == "weekend": + return is_weekend + elif self._day_type == "weekday": + return not is_weekend + + return True + + async def _calculate_interval_statistics_from_history( # noqa: C901 + self, + ) -> Optional[float]: + """ + Vypočítá statistiku intervalu z historických dat recorder. + + Algoritmus: + 1. Načte data z recorder za posledních 30 dní + 2. Pro každý den vypočítá průměr/medián v daném časovém intervalu + 3. Z těchto 30 denních hodnot spočítá celkový medián + + Returns: + Medián spotřeby v W pro daný interval, nebo None + """ + if not hasattr(self, "_time_range") or not self._time_range: + return None + + try: + from homeassistant.components.recorder import history + + start_hour, end_hour = self._time_range + # Zajistit že jsou to int hodnoty + start_hour = int(start_hour) + end_hour = int(end_hour) + source_entity_id = f"sensor.oig_{self._data_key}_actual_aco_p" + + # Časový rozsah - použít max_age_days z konfigurace + max_days = getattr(self, "_max_age_days", 14) + end_time = datetime.now() + start_time = end_time - timedelta(days=max_days) + + _LOGGER.debug( + f"[{self.entity_id}] Loading history for {source_entity_id} " + f"from {start_time.date()} to {end_time.date()}" + ) + + # Načíst všechna historická data + states = await self.hass.async_add_executor_job( + history.state_changes_during_period, + self.hass, + start_time, + end_time, + source_entity_id, + ) + + if source_entity_id not in states or not states[source_entity_id]: + _LOGGER.warning( + f"[{self.entity_id}] No historical data found for {source_entity_id}" + ) + return None + + daily_medians = self._calculate_daily_medians( + states[source_entity_id], + start_hour, + end_hour, + end_time, + max_days, + ) + + # Spočítat celkový medián z denních mediánů + if daily_medians: + result = median(daily_medians) + _LOGGER.debug( + f"[{self.entity_id}] Calculated interval median: {result:.1f}W " + f"from {len(daily_medians)} days (out of {max_days})" + ) + return round(result, 1) + else: + _LOGGER.warning( + f"[{self.entity_id}] No valid data found for calculation" + ) + return None + + except Exception as e: + _LOGGER.error( + f"[{self.entity_id}] Error calculating interval statistics: {e}", + exc_info=True, + ) + return None + + def _calculate_daily_medians( + self, + state_list: List[Any], + start_hour: int, + end_hour: int, + end_time: datetime, + max_days: int, + ) -> List[float]: + daily_medians: List[float] = [] + for days_ago in range(max_days): + day_date = (end_time - timedelta(days=days_ago)).date() + if not self._should_include_day(day_date): + continue + day_values = self._extract_day_values( + state_list, day_date, start_hour, end_hour + ) + if day_values: + day_median = median(day_values) + daily_medians.append(day_median) + _LOGGER.debug( + "[%s] Day %s: %s values, median=%.1fW", + self.entity_id, + day_date, + len(day_values), + day_median, + ) + return daily_medians + + def _should_include_day(self, day_date: datetime.date) -> bool: + day_datetime = datetime.combine(day_date, datetime.min.time()) + is_weekend = day_datetime.weekday() >= 5 + + if hasattr(self, "_day_type") and ( + (self._day_type == "weekend" and not is_weekend) + or (self._day_type == "weekday" and is_weekend) + ): + return False + return True + + def _extract_day_values( + self, + state_list: List[Any], + day_date: datetime.date, + start_hour: int, + end_hour: int, + ) -> List[float]: + day_values: List[float] = [] + for state in state_list: + state_time = state.last_updated.replace(tzinfo=None) + if state_time.date() != day_date: + continue + if not self._is_in_interval(state_time.hour, start_hour, end_hour): + continue + value = self._safe_state_value(state.state) + if value is not None: + day_values.append(value) + return day_values + + def _is_in_interval(self, hour: int, start_hour: int, end_hour: int) -> bool: + if end_hour > start_hour: + return start_hour <= hour < end_hour + return hour >= start_hour or hour < end_hour + + def _safe_state_value(self, value: Any) -> Optional[float]: + if value in ("unavailable", "unknown", None): + return None + try: + parsed = float(value) + return parsed if parsed >= 0 else None + except (ValueError, TypeError): + return None + + def _get_actual_load_value(self) -> Optional[float]: + """Získá aktuální hodnotu odběru ze source senzoru.""" + try: + # Source sensor pro odběr + source_entity_id = f"sensor.oig_{self._data_key}_actual_aco_p" + source_entity = self.hass.states.get(source_entity_id) + + if source_entity and source_entity.state not in ( + "unavailable", + "unknown", + None, + ): + return float(source_entity.state) + + except (ValueError, TypeError) as e: + _LOGGER.warning(f"[{self.entity_id}] Error getting load value: {e}") + + return None + + async def _calculate_hourly_energy(self) -> Optional[float]: + """Vypočítá energii za uplynulou hodinu.""" + if not self._sensor_config or not self._source_entity_id: + return None + + try: + source_entity = self.hass.states.get(self._source_entity_id) + if not source_entity or source_entity.state in ( + "unavailable", + "unknown", + None, + ): + return None + + current_value = float(source_entity.state) + + # Získání jednotky ze source senzoru + source_unit = source_entity.attributes.get("unit_of_measurement", "") + + hourly_data_type = self._sensor_config.get( + "hourly_data_type", "energy_diff" + ) + + if hourly_data_type == "energy_diff": + energy_diff = _calculate_energy_diff( + current_value, self._last_source_value + ) + self._last_source_value = current_value + if energy_diff is None: + return None + return _convert_energy_by_unit( + self.entity_id, energy_diff, source_unit + ) + + if hourly_data_type == "power_integral": + return _convert_power_integral( + self.entity_id, current_value, source_unit + ) + + return None + + except (ValueError, TypeError) as e: + _LOGGER.warning(f"[{self.entity_id}] Error calculating hourly energy: {e}") + return None + + def _calculate_hourly_value(self) -> Optional[float]: + """Calculate hourly value - vrací uloženou hodnotu z posledního výpočtu.""" + # Pro hodinové senzory vracíme pouze uloženou hodnotu + # Výpočet se provádí jen na konci hodiny v _calculate_hourly_energy + return getattr(self, "_current_hourly_value", None) + + def _calculate_statistics_value(self) -> Optional[float]: + """Calculate statistics value for non-hourly sensors.""" + try: + if self._sensor_type == "battery_load_median": + return _calculate_sampling_median( + self.entity_id, + self._sampling_data, + self._sampling_minutes, + ) + + if hasattr(self, "_time_range") and self._time_range: + return _calculate_interval_median( + self.entity_id, + self._interval_data, + ) + + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error calculating statistics: {e}") + + return None + + @property + def state(self) -> Optional[Union[float, str]]: + """Return the state of the sensor.""" + # Odstraníme závislost na coordinator.data pro statistické senzory + if self._sensor_type.startswith("hourly_") and self._coordinator.data is None: + # Pro hodinové senzory zkusíme výpočet i bez coordinator dat + return self._calculate_hourly_value() + + # Hodinové senzory + if self._sensor_type.startswith("hourly_"): + return self._calculate_hourly_value() + + # Ostatní statistické senzory (včetně mediánových) + return self._calculate_statistics_value() + + @property + def available(self) -> bool: + """Return True if sensor is available.""" + # OPRAVA: Kontrola zda jsou statistics povoleny + entry = getattr(self._coordinator, "config_entry", None) + options = entry.options if entry else {} + if isinstance(options, dict): + statistics_enabled = options.get("enable_statistics", True) + else: + statistics_enabled = getattr(options, "enable_statistics", True) + + if not statistics_enabled: + return False # Statistics jsou vypnuté - senzor není dostupný + + # Senzor je dostupný pokud má data nebo koordinátor funguje + if self._sensor_type == "battery_load_median": + return len(self._sampling_data) > 0 or self._coordinator.data is not None + elif self._sensor_type.startswith("hourly_"): + # Hodinové senzory jsou dostupné pokud existuje source entity + if self._source_entity_id: + source_entity = self.hass.states.get(self._source_entity_id) + return source_entity is not None and source_entity.state not in ( + "unavailable", + "unknown", + ) + return False + return self._coordinator.data is not None + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Return extra state attributes.""" + attributes = {} + + try: + if self._sensor_type == "battery_load_median": + attributes.update( + _build_sampling_attrs( + self._sampling_data, + self._sampling_minutes, + self._max_sampling_size, + ) + ) + elif self._sensor_type.startswith("hourly_"): + attributes.update( + _build_hourly_attrs( + self.entity_id, + self._hourly_data, + self._sensor_config, + ) + ) + elif hasattr(self, "_time_range") and self._time_range: + attributes.update( + _build_interval_attrs( + self._time_range, + getattr(self, "_day_type", "unknown"), + getattr(self, "_statistic", "median"), + getattr(self, "_max_age_days", 30), + self._interval_data, + ) + ) + + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error creating attributes: {e}") + attributes["error"] = str(e) + + return attributes + + def _load_sampling_data( + self, sampling_list: List[Tuple[Any, Any]], max_size: int + ) -> List[Tuple[datetime, float]]: + samples: List[Tuple[datetime, float]] = [] + for item in sampling_list[-max_size:]: + try: + dt = datetime.fromisoformat(item[0]) + if dt.tzinfo is not None: + dt = dt.replace(tzinfo=None) + samples.append((dt, item[1])) + except (ValueError, TypeError) as err: + _LOGGER.warning( + f"[{self.entity_id}] Skipping invalid sample: {item[0]} - {err}" + ) + return samples + + def _load_hourly_data(self, raw_data: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + safe_hourly_data = [] + for record in raw_data: + try: + if ( + isinstance(record, dict) + and "datetime" in record + and "value" in record + ): + datetime.fromisoformat(record["datetime"]) + safe_hourly_data.append(record) + else: + _LOGGER.warning( + f"[{self.entity_id}] Invalid hourly record structure: {record}" + ) + except (ValueError, TypeError, KeyError) as err: + _LOGGER.warning( + f"[{self.entity_id}] Skipping invalid hourly record: {record} - {err}" + ) + return safe_hourly_data + + def _serialize_sampling_data(self) -> List[Tuple[str, float]]: + data: List[Tuple[str, float]] = [] + for dt, value in self._sampling_data: + if dt.tzinfo is not None: + dt = dt.replace(tzinfo=None) + data.append((dt.isoformat(), value)) + return data + + def _serialize_hourly_data(self) -> List[Dict[str, Any]]: + safe_hourly_data: List[Dict[str, Any]] = [] + for record in self._hourly_data: + safe_record = {"datetime": "", "value": 0.0} + try: + if "datetime" in record: + dt = datetime.fromisoformat(record["datetime"]) + if dt.tzinfo is not None: + dt = dt.replace(tzinfo=None) + safe_record["datetime"] = dt.isoformat() + if "value" in record: + safe_record["value"] = float(record["value"]) + except (ValueError, TypeError): + continue + safe_hourly_data.append(safe_record) + return safe_hourly_data + + def _filter_sampling_data(self, cutoff_time: datetime) -> List[Tuple[datetime, float]]: + cleaned: List[Tuple[datetime, float]] = [] + for dt, value in self._sampling_data: + dt_naive = dt.replace(tzinfo=None) if dt.tzinfo is not None else dt + if dt_naive > cutoff_time: + cleaned.append((dt_naive, value)) + return cleaned + + def _filter_hourly_data(self, cutoff_time: datetime) -> List[Dict[str, Any]]: + cleaned_hourly_data: List[Dict[str, Any]] = [] + for record in self._hourly_data: + try: + record_dt = datetime.fromisoformat(record["datetime"]) + record_dt_naive = ( + record_dt.replace(tzinfo=None) + if record_dt.tzinfo is not None + else record_dt + ) + if record_dt_naive > cutoff_time: + cleaned_hourly_data.append(record) + except (ValueError, TypeError, KeyError) as err: + _LOGGER.warning( + f"[{self.entity_id}] Invalid hourly record format: {record} - {err}" + ) + return cleaned_hourly_data + + +def _should_update_hourly(now: datetime, last_reset: Optional[datetime]) -> bool: + if now.minute > 5: + return False + current_hour_naive = _current_hour_naive(now) + last_reset_naive = _naive_dt(last_reset) if last_reset else None + return last_reset_naive != current_hour_naive + + +def _current_hour_naive(now: datetime) -> datetime: + current_hour = now.replace(minute=0, second=0, microsecond=0) + return _naive_dt(current_hour) + + +def _previous_hour_naive(current_hour: datetime) -> datetime: + previous_hour = current_hour - timedelta(hours=1) + return _naive_dt(previous_hour) + + +def _naive_dt(value: Optional[datetime]) -> Optional[datetime]: + if value is None: + return None + return value.replace(tzinfo=None) if value.tzinfo is not None else value + + +def _append_hourly_record( + hourly_data: List[Dict[str, Any]], + current_hour: datetime, + hourly_value: float, +) -> None: + hourly_data.append( + { + "datetime": current_hour.isoformat(), + "value": hourly_value, + } + ) + if len(hourly_data) > MAX_HOURLY_DATA_POINTS: + del hourly_data[:-MAX_HOURLY_DATA_POINTS] + + +def _calculate_energy_diff( + current_value: float, last_value: Optional[float] +) -> Optional[float]: + if last_value is None: + return None + if current_value >= last_value: + return current_value - last_value + return current_value + + +def _convert_energy_by_unit( + entity_id: str, energy_diff: float, source_unit: str +) -> float: + unit = source_unit.lower() + if unit in ["kwh", "kwh"]: + result = round(energy_diff, 3) + _LOGGER.debug( + "[%s] Energy diff: %.3f kWh (source: %s)", + entity_id, + energy_diff, + source_unit, + ) + return result + if unit in ["wh", "wh"]: + result = round(energy_diff / 1000, 3) + _LOGGER.debug( + "[%s] Energy diff: %.3f Wh -> %.3f kWh (source: %s)", + entity_id, + energy_diff, + result, + source_unit, + ) + return result + result = round(energy_diff / 1000, 3) + _LOGGER.warning( + "[%s] Unknown source unit '%s', assuming Wh. Value: %.3f -> %.3f kWh", + entity_id, + source_unit, + energy_diff, + result, + ) + return result + + +def _convert_power_integral( + entity_id: str, current_value: float, source_unit: str +) -> float: + unit = source_unit.lower() + if unit in ["w", "w", "watt"]: + result = round(current_value / 1000, 3) + _LOGGER.debug( + "[%s] Power integral: %sW -> %s kWh (source: %s)", + entity_id, + current_value, + result, + source_unit, + ) + return result + if unit in ["kw", "kw", "kilowatt"]: + result = round(current_value, 3) + _LOGGER.debug( + "[%s] Power integral: %skW -> %s kWh (source: %s)", + entity_id, + current_value, + result, + source_unit, + ) + return result + result = round(current_value / 1000, 3) + _LOGGER.warning( + "[%s] Unknown power unit '%s', assuming W. Value: %sW -> %.3f kWh", + entity_id, + source_unit, + current_value, + result, + ) + return result + + +def _calculate_sampling_median( + entity_id: str, + sampling_data: List[Tuple[datetime, float]], + sampling_minutes: int, +) -> Optional[float]: + if not sampling_data: + return None + + now = datetime.now() + cutoff_time = now - timedelta(minutes=sampling_minutes) + recent_data = [ + value for dt, value in sampling_data if dt > cutoff_time and value is not None + ] + + _LOGGER.debug( + "[%s] Time check: now=%s, cutoff=%s, total_samples=%s, recent_samples=%s", + entity_id, + now.strftime("%H:%M:%S"), + cutoff_time.strftime("%H:%M:%S"), + len(sampling_data), + len(recent_data), + ) + + data = ( + recent_data + if recent_data + else [value for _, value in sampling_data if value is not None] + ) + if not data: + return None + result = median(data) + _LOGGER.debug( + "[%s] Calculated median: %.1fW from %s samples", + entity_id, + result, + len(data), + ) + return round(result, 1) + + +def _calculate_interval_median( + entity_id: str, interval_data: Dict[str, List[float]] +) -> Optional[float]: + if not interval_data: + return None + all_values: List[float] = [] + for date_values in interval_data.values(): + all_values.extend(date_values) + if not all_values: + return None + result = median(all_values) + _LOGGER.debug( + "[%s] Calculated interval median: %.1fW from %s historical values", + entity_id, + result, + len(all_values), + ) + return round(result, 1) + + +def _build_sampling_attrs( + sampling_data: List[Tuple[datetime, float]], + sampling_minutes: int, + max_sampling_size: int, +) -> Dict[str, Any]: + attributes = { + "sampling_points": len(sampling_data), + "sampling_minutes": sampling_minutes, + "max_sampling_size": max_sampling_size, + } + if sampling_data: + last_update = max(dt for dt, _ in sampling_data) + attributes["last_sample"] = last_update.isoformat() + return attributes + + +def _build_hourly_attrs( + entity_id: str, + hourly_data: List[Dict[str, Any]], + sensor_config: Dict[str, Any], +) -> Dict[str, Any]: + attributes = { + "hourly_data_points": len(hourly_data), + "source_sensor": sensor_config.get("source_sensor", "unknown"), + "hourly_data_type": sensor_config.get("hourly_data_type", "unknown"), + } + if not hourly_data: + return attributes + + today_data, yesterday_data = _split_hourly_records(entity_id, hourly_data) + if today_data: + attributes["today_hourly"] = today_data + if yesterday_data: + attributes["yesterday_hourly"] = yesterday_data + + attributes["today_total"] = round(_sum_hourly_values(today_data), 3) + attributes["yesterday_total"] = round(_sum_hourly_values(yesterday_data), 3) + return attributes + + +def _split_hourly_records( + entity_id: str, hourly_data: List[Dict[str, Any]] +) -> tuple[List[Dict[str, Any]], List[Dict[str, Any]]]: + now = datetime.now() + today_start = now.replace(hour=0, minute=0, second=0, microsecond=0) + yesterday_start = today_start - timedelta(days=1) + + today_data: List[Dict[str, Any]] = [] + yesterday_data: List[Dict[str, Any]] = [] + + for record in hourly_data: + record_time = _parse_record_time(entity_id, record) + if record_time is None: + continue + record_time_naive = ( + record_time.replace(tzinfo=None) + if record_time.tzinfo is not None + else record_time + ) + if record_time_naive >= today_start: + today_data.append(record) + elif record_time_naive >= yesterday_start: + yesterday_data.append(record) + + return today_data, yesterday_data + + +def _parse_record_time( + entity_id: str, record: Dict[str, Any] +) -> Optional[datetime]: + try: + return datetime.fromisoformat(record["datetime"]) + except (ValueError, TypeError, KeyError) as e: + _LOGGER.warning( + "[%s] Invalid record datetime format: %s - %s", + entity_id, + record, + e, + ) + return None + + +def _sum_hourly_values(records: List[Dict[str, Any]]) -> float: + return sum( + record.get("value", 0.0) + for record in records + if isinstance(record.get("value"), (int, float)) + ) + + +def _build_interval_attrs( + time_range: Tuple[int, int], + day_type: str, + statistic: str, + max_age_days: int, + interval_data: Dict[str, List[float]], +) -> Dict[str, Any]: + start_hour, end_hour = time_range + total_values = sum(len(values) for values in interval_data.values()) + attributes = { + "time_range": f"{start_hour:02d}:00-{end_hour:02d}:00", + "day_type": day_type, + "statistic": statistic, + "max_age_days": max_age_days, + "total_days": len(interval_data), + "total_values": total_values, + } + if interval_data: + attributes["latest_data"] = max(interval_data.keys()) + return attributes + + +def ensure_timezone_aware(dt: datetime) -> datetime: + """Ensure datetime object is timezone aware.""" + if dt.tzinfo is None: + # If naive, assume it's in the local timezone + return dt_util.as_local(dt) + return dt + + +def safe_datetime_compare(dt1: datetime, dt2: datetime) -> bool: + """Safely compare two datetime objects by ensuring both are timezone aware.""" + try: + dt1_aware = ensure_timezone_aware(dt1) + dt2_aware = ensure_timezone_aware(dt2) + return dt1_aware < dt2_aware + except Exception as e: + _LOGGER.warning(f"Error comparing datetimes: {e}") + return False + + +def create_hourly_attributes( + sensor_name: str, + data_points: List[Dict[str, Any]], + current_time: Optional[datetime] = None, +) -> Dict[str, Any]: + """Create attributes for hourly sensors with proper timezone handling.""" + try: + if current_time is None: + current_time = dt_util.now() + + # Ensure current_time is timezone aware + current_time = ensure_timezone_aware(current_time) + + attributes = {} + + # Process data points with timezone-aware datetime handling + filtered_data = [] + for point in data_points: + if isinstance(point.get("timestamp"), datetime): + point_time = ensure_timezone_aware(point["timestamp"]) + point["timestamp"] = point_time + filtered_data.append(point) + elif isinstance(point.get("time"), datetime): + point_time = ensure_timezone_aware(point["time"]) + point["time"] = point_time + filtered_data.append(point) + + # Add processed data to attributes + attributes["data_points"] = len(filtered_data) + attributes["last_updated"] = current_time.isoformat() + + if filtered_data: + # Find latest data point safely + latest_point = max( + filtered_data, + key=lambda x: x.get("timestamp") or x.get("time") or current_time, + ) + latest_time = latest_point.get("timestamp") or latest_point.get("time") + if latest_time: + attributes["latest_data_time"] = ensure_timezone_aware( + latest_time + ).isoformat() + + return attributes + + except Exception as e: + _LOGGER.error(f"[{sensor_name}] Error creating attributes: {e}") + return { + "error": str(e), + "last_updated": dt_util.now().isoformat(), + "data_points": 0, + } + + +class StatisticsProcessor: + """Process statistics with proper timezone handling.""" + + def __init__(self, hass: HomeAssistant) -> None: + """Initialize statistics processor.""" + self.hass = hass + + def process_hourly_data( + self, sensor_name: str, raw_data: List[Dict[str, Any]], value_key: str = "value" + ) -> Dict[str, Any]: + """Process hourly data with timezone-aware datetime handling.""" + try: + current_time = dt_util.now() + + # Filter and process data points + processed_data = [ + processed + for point in raw_data + if (processed := self._normalize_point(point)) is not None + ] + + # Create attributes safely + attributes = create_hourly_attributes( + sensor_name, processed_data, current_time + ) + + # Calculate current value + current_value = self._extract_current_value(processed_data, value_key) + + return {"value": current_value, "attributes": attributes} + + except Exception as e: + _LOGGER.error(f"[{sensor_name}] Error processing hourly data: {e}") + return { + "value": 0.0, + "attributes": { + "error": str(e), + "last_updated": dt_util.now().isoformat(), + }, + } + + def _normalize_point(self, point: Dict[str, Any]) -> Optional[Dict[str, Any]]: + processed_point = dict(point) + ts = self._normalize_time_field(processed_point, "timestamp") + if ts is False: + return None + if ts is None: + ts = self._normalize_time_field(processed_point, "time") + if ts is False: + return None + return processed_point + + def _normalize_time_field( + self, processed_point: Dict[str, Any], key: str + ) -> Optional[bool]: + if key not in processed_point: + return None + ts = processed_point[key] + if isinstance(ts, str): + try: + ts = dt_util.parse_datetime(ts) + except ValueError: + return False + elif isinstance(ts, datetime): + ts = ensure_timezone_aware(ts) + processed_point[key] = ts + return True + + @staticmethod + def _extract_current_value( + processed_data: List[Dict[str, Any]], value_key: str + ) -> float: + if not processed_data: + return 0.0 + latest_point = processed_data[-1] + return float(latest_point.get(value_key, 0.0)) diff --git a/custom_components/oig_cloud/lib/oig_cloud_client/LICENSE b/custom_components/oig_cloud/lib/oig_cloud_client/LICENSE new file mode 100644 index 00000000..e13f6e0c --- /dev/null +++ b/custom_components/oig_cloud/lib/oig_cloud_client/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Pavel Simsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/custom_components/oig_cloud/lib/oig_cloud_client/__init__.py b/custom_components/oig_cloud/lib/oig_cloud_client/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/custom_components/oig_cloud/lib/oig_cloud_client/api/__init__.py b/custom_components/oig_cloud/lib/oig_cloud_client/api/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/custom_components/oig_cloud/lib/oig_cloud_client/api/oig_cloud_api.py b/custom_components/oig_cloud/lib/oig_cloud_client/api/oig_cloud_api.py new file mode 100644 index 00000000..63db174f --- /dev/null +++ b/custom_components/oig_cloud/lib/oig_cloud_client/api/oig_cloud_api.py @@ -0,0 +1,828 @@ +import asyncio +import datetime +import json +import logging +import ssl +import time +from typing import Any, Dict, Optional + +import aiohttp +import certifi +from aiohttp import ( + ClientConnectorError, + ClientResponseError, + ClientTimeout, + ServerTimeoutError, + TCPConnector, +) +from yarl import URL + +from ..models import OigCloudData + +# Conditional import of opentelemetry +_logger = logging.getLogger(__name__) + +try: + from opentelemetry import trace + from opentelemetry.trace import SpanKind + + tracer = trace.get_tracer(__name__) + _has_opentelemetry = True +except ImportError: + _logger.debug("OpenTelemetry not available - using ServiceShield telemetry instead") + tracer = None # type: ignore + SpanKind = None # type: ignore + _has_opentelemetry = False + +# Using a lock to prevent multiple simultaneous API calls +lock: asyncio.Lock = asyncio.Lock() + + +class OigCloudApiError(Exception): + """Exception for OIG Cloud API errors.""" + + +class OigCloudAuthError(OigCloudApiError): + """Exception for authentication errors.""" + + +class OigCloudConnectionError(OigCloudApiError): + """Exception for connection errors.""" + + +class OigCloudTimeoutError(OigCloudApiError): + """Exception for timeout errors.""" + + +class OigCloudApi: + """API client for OIG Cloud.""" + + # API endpoints + _base_url: str = "https://www.oigpower.cz/cez/" + _login_url: str = "inc/php/scripts/Login.php" + _get_stats_url: str = "json.php" + _set_mode_url: str = "inc/php/scripts/Device.Set.Value.php" + _set_grid_delivery_url: str = "inc/php/scripts/ToGrid.Toggle.php" + _set_batt_formating_url: str = "inc/php/scripts/Battery.Format.Save.php" + + def __init__( + self, + username: str, + password: str, + no_telemetry: bool, + timeout: int = 30, + ) -> None: + """Initialize the API client. + + Args: + username: OIG Cloud username + password: OIG Cloud password + no_telemetry: Disable telemetry + timeout: Request timeout in seconds + """ + self._no_telemetry: bool = no_telemetry + self._logger: logging.Logger = logging.getLogger(__name__) + self._username: str = username + self._password: str = password + self._phpsessid: Optional[str] = None + self._timeout: ClientTimeout = ClientTimeout(total=timeout) + + self._last_update: datetime.datetime = datetime.datetime(1, 1, 1, 0, 0) + self.box_id: Optional[str] = None + self.last_state: Optional[Dict[str, Any]] = None + self.last_parsed_state: Optional[OigCloudData] = None + + # ETag cache: per-endpoint storage + # Structure: {endpoint: {"etag": str|None, "data": Any|None, "ts": float}} + self._cache: Dict[str, Dict[str, Any]] = {} + + # SSL handling modes: + # 0 = normal SSL (default) + # 1 = SSL with cached intermediate cert (for broken chain) + # 2 = SSL disabled (last resort) + self._ssl_mode: int = 0 + self._ssl_context_with_intermediate: Optional[ssl.SSLContext] = None + + self._logger.debug( + "OigCloudApi initialized (ETag support enabled, timing controlled by coordinator)" + ) + + # Certum DV TLS G2 R39 CA - intermediate certificate for oigpower.cz + # Downloaded from: http://certumdvtlsg2r39ca.repository.certum.pl/certumdvtlsg2r39ca.cer + # This is needed because OIG server doesn't send the intermediate cert in TLS handshake + _CERTUM_INTERMEDIATE_CERT: str = """-----BEGIN CERTIFICATE----- +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 +8FpPkganuCwy++7umTkM7+Q= +-----END CERTIFICATE-----""" + + def _get_ssl_context_with_intermediate(self) -> ssl.SSLContext: + """Create SSL context with cached intermediate certificate.""" + if self._ssl_context_with_intermediate is None: + self._logger.info( + "🔐 Creating SSL context with Certum intermediate certificate" + ) + ctx = ssl.create_default_context(cafile=certifi.where()) + # Add the intermediate certificate + ctx.load_verify_locations(cadata=self._CERTUM_INTERMEDIATE_CERT) + self._ssl_context_with_intermediate = ctx + return self._ssl_context_with_intermediate + + def _get_connector(self) -> TCPConnector: + """Get TCP connector based on current SSL mode. + + SSL modes: + 0 = normal SSL (default) + 1 = SSL with cached intermediate cert (for broken chain) + 2 = SSL disabled (last resort) + """ + if self._ssl_mode == 0: + # Normal SSL verification + return TCPConnector() + elif self._ssl_mode == 1: + # SSL with intermediate cert + return TCPConnector(ssl=self._get_ssl_context_with_intermediate()) + else: + # SSL disabled + return TCPConnector(ssl=False) + + async def authenticate(self) -> bool: + """Authenticate with the OIG Cloud API.""" + return await self._authenticate_internal() + + async def _authenticate_internal(self) -> bool: + """Internal authentication method with SSL fallback. + + Tries 3 SSL modes in order: + 1. Normal SSL verification + 2. SSL with cached intermediate certificate (fixes broken chain) + 3. SSL disabled (last resort) + """ + login_command: Dict[str, str] = { + "email": self._username, + "password": self._password, + } + self._logger.debug("Authenticating with OIG Cloud") + + # Try up to 3 SSL modes + max_ssl_mode = 2 + start_mode = self._ssl_mode + + for mode in range(start_mode, max_ssl_mode + 1): + self._ssl_mode = mode + try: + connector = self._get_connector() + async with aiohttp.ClientSession( + timeout=self._timeout, connector=connector + ) as session: + url: str = self._base_url + self._login_url + data: str = json.dumps(login_command) + headers: Dict[str, str] = {"Content-Type": "application/json"} + + async with session.post( + url, data=data, headers=headers + ) as response: + responsecontent: str = await response.text() + if response.status == 200: + if responsecontent == '[[2,"",false]]': + base_url = URL(self._base_url) + self._phpsessid = ( + session.cookie_jar.filter_cookies(base_url) + .get("PHPSESSID") + .value + ) + if mode > 0: + mode_names = [ + "normal", + "intermediate cert", + "disabled", + ] + self._logger.info( + f"✅ Authentication successful with SSL mode: {mode_names[mode]}" + ) + return True + raise OigCloudAuthError("Authentication failed") + + except (asyncio.TimeoutError, ServerTimeoutError) as e: + self._logger.error(f"Authentication timeout: {e}") + raise OigCloudTimeoutError(f"Authentication timeout: {e}") from e + except ClientConnectorError as e: + # Check if this is an SSL certificate error + error_str = str(e) + if "SSL" in error_str or "certificate" in error_str.lower(): + if mode < max_ssl_mode: + mode_names = ["normal", "intermediate cert", "disabled"] + self._logger.warning( + f"🔓 SSL error with mode '{mode_names[mode]}', " + f"trying '{mode_names[mode + 1]}'" + ) + continue # Try next SSL mode + self._logger.error(f"Connection error during authentication: {e}") + raise OigCloudConnectionError(f"Connection error: {e}") from e + except OigCloudAuthError: + raise + except Exception as e: + self._logger.error(f"Unexpected error during authentication: {e}") + raise OigCloudAuthError(f"Authentication failed: {e}") from e + + # Should not reach here, but just in case + raise OigCloudAuthError("Authentication failed after all SSL fallbacks") + + def get_session(self) -> aiohttp.ClientSession: + """Get a session with authentication cookies and browser-like headers.""" + if not self._phpsessid: + raise OigCloudAuthError("Not authenticated, call authenticate() first") + + # Browser-like headers to simulate real Chrome browser on Android + headers = { + "Cookie": f"PHPSESSID={self._phpsessid}", + "User-Agent": ( + "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) " + "AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/141.0.0.0 Mobile Safari/537.36" + ), + "Accept": "application/json, text/plain, */*", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Accept-Language": "cs-CZ,cs;q=0.9,en;q=0.8", + "Connection": "keep-alive", + "Referer": "https://www.oigpower.cz/cez/", + "Origin": "https://www.oigpower.cz", + "Sec-Ch-Ua": '"Not)A;Brand";v="99", "Google Chrome";v="141", "Chromium";v="141"', + "Sec-Ch-Ua-Mobile": "?1", + "Sec-Ch-Ua-Platform": '"Android"', + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + } + + # Use SSL mode determined during authentication + connector = self._get_connector() + return aiohttp.ClientSession( + headers=headers, timeout=self._timeout, connector=connector + ) + + def _update_cache( + self, endpoint: str, response: aiohttp.ClientResponse, data: Any + ) -> None: + """Update ETag cache for endpoint. + + Args: + endpoint: API endpoint path (e.g., 'json.php') + response: aiohttp response object + data: Parsed response data + """ + etag = response.headers.get("ETag") + if etag: + self._logger.debug(f"💾 Caching ETag for {endpoint}: {etag[:20]}...") + + self._cache[endpoint] = { + "etag": etag, + "data": data, + "ts": time.time(), + } + + async def get_stats(self) -> Optional[Dict[str, Any]]: + """Get stats from the OIG Cloud API. + + Note: No internal caching - coordinator controls timing. + last_state is only used for timeout fallback. + """ + async with lock: + return await self._get_stats_internal() + + async def _get_stats_internal(self) -> Optional[Dict[str, Any]]: + """Internal get stats method with proper error handling.""" + try: + to_return = await self._try_get_stats() + self._logger.debug("Stats retrieved successfully") + if self.box_id is None and to_return: + self.box_id = list(to_return.keys())[0] + self._last_update = datetime.datetime.now() + self.last_state = to_return + return to_return + except (asyncio.TimeoutError, ServerTimeoutError) as e: + self._logger.warning(f"Timeout while getting stats: {e}") + # Return cached data if available + if self.last_state is not None: + self._logger.info("Returning cached data due to timeout") + return self.last_state + raise OigCloudTimeoutError(f"API timeout: {e}") from e + except ClientConnectorError as e: + self._logger.warning(f"Connection error while getting stats: {e}") + if self.last_state is not None: + self._logger.info("Returning cached data due to connection error") + return self.last_state + raise OigCloudConnectionError(f"Connection error: {e}") from e + except Exception as e: + self._logger.error(f"Unexpected error: {e}") + if self.last_state is not None: + self._logger.info("Returning cached data due to unexpected error") + return self.last_state + raise OigCloudApiError(f"Failed to get stats: {e}") from e + + async def _try_get_stats(self, dependent: bool = False) -> Optional[Dict[str, Any]]: + """Try to get stats with proper error handling and ETag support.""" + endpoint = "json.php" + + try: + async with self.get_session() as session: + url: str = self._base_url + self._get_stats_url + + # Prepare headers with If-None-Match if we have cached ETag + extra_headers: Dict[str, str] = {} + cached = self._cache.get(endpoint) + if cached and cached.get("etag"): + extra_headers["If-None-Match"] = cached["etag"] + self._logger.debug( + f"📋 ETag hit → If-None-Match={cached['etag'][:20]}..." + ) + + self._logger.debug(f"Getting stats from {url}") + async with session.get(url, headers=extra_headers) as response: + # Debug: log response headers + etag_header = response.headers.get("ETag") + self._logger.debug( + f"Response status: {response.status}, ETag header: {etag_header}" + ) + + # Handle 304 Not Modified - return cached data + if response.status == 304: + if cached and cached.get("data") is not None: + self._logger.debug( + "✅ 304 Not Modified → using cached data" + ) + return cached["data"] + else: + self._logger.warning( + "⚠️ 304 received but no cached data available" + ) + # Fallback: retry without If-None-Match + async with session.get(url) as retry_response: + if retry_response.status == 200: + result = await retry_response.json() + self._update_cache(endpoint, retry_response, result) + return result + else: + raise ClientResponseError( + request_info=retry_response.request_info, + history=retry_response.history, + status=retry_response.status, + message=f"Failed to fetch stats, status {retry_response.status}", + ) + + if response.status == 200: + result: Dict[str, Any] = await response.json() + + # Update cache with new data and ETag + self._update_cache(endpoint, response, result) + + if not isinstance(result, dict) and not dependent: + self._logger.info("Retrying authentication") + if await self.authenticate(): + return await self._try_get_stats(True) + return result + else: + raise ClientResponseError( + request_info=response.request_info, + history=response.history, + status=response.status, + message=f"Failed to fetch stats, status {response.status}", + ) + except (asyncio.TimeoutError, ServerTimeoutError) as e: + self._logger.warning(f"Timeout getting stats from {url}: {e}") + raise + except ClientConnectorError as e: + self._logger.warning(f"Connection error getting stats from {url}: {e}") + raise + + async def set_box_mode(self, mode: str) -> bool: + """Set box mode (Home 1, Home 2, etc.).""" + try: + self._logger.debug(f"Setting box mode to {mode}") + return await self.set_box_params_internal("box_prms", "mode", mode) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_grid_delivery_limit(self, limit: int) -> bool: + """Set grid delivery limit.""" + try: + self._logger.debug(f"Setting grid delivery limit to {limit}") + return await self.set_box_params_internal( + "invertor_prm1", "p_max_feed_grid", str(limit) + ) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_boiler_mode(self, mode: str) -> bool: + """Set boiler mode.""" + try: + self._logger.debug(f"Setting boiler mode to {mode}") + return await self.set_box_params_internal("boiler_prms", "manual", mode) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_ssr_rele_1(self, mode: str) -> bool: + """Set SSR relay 1 mode.""" + try: + self._logger.debug(f"Setting SSR 1 to {mode}") + return await self.set_box_params_internal("boiler_prms", "ssr0", mode) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_ssr_rele_2(self, mode: str) -> bool: + """Set SSR relay 2 mode.""" + try: + self._logger.debug(f"Setting SSR 2 to {mode}") + return await self.set_box_params_internal("boiler_prms", "ssr1", mode) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_ssr_rele_3(self, mode: str) -> bool: + """Set SSR relay 3 mode.""" + try: + self._logger.debug(f"Setting SSR 3 to {mode}") + return await self.set_box_params_internal("boiler_prms", "ssr2", mode) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_box_params_internal( + self, table: str, column: str, value: str + ) -> bool: + """Internal method to set box parameters.""" + async with self.get_session() as session: + data: str = json.dumps( + { + "id_device": self.box_id, + "table": table, + "column": column, + "value": value, + } + ) + _nonce: int = int(time.time() * 1000) + target_url: str = f"{self._base_url}{self._set_mode_url}?_nonce={_nonce}" + + self._logger.debug( + f"Sending mode request to {target_url} with {data.replace(str(self.box_id), 'xxxxxx')}" + ) + + async with session.post( + target_url, + data=data, + headers={"Content-Type": "application/json"}, + ) as response: + response_content: str = await response.text() + if response.status == 200: + response_json: Dict[str, Any] = json.loads(response_content) + message: str = response_json[0][2] + self._logger.info(f"Response: {message}") + return True + else: + raise Exception( + f"Error setting mode: {response.status}", + response_content, + ) + + async def set_grid_delivery(self, mode: int) -> bool: + """Set grid delivery mode.""" + try: + if self._no_telemetry: + raise OigCloudApiError( + "Tato funkce je ve vývoji a proto je momentálně dostupná pouze pro systémy s aktivní telemetrií." + ) + + self._logger.debug(f"Setting grid delivery to mode {mode}") + + if not self.box_id: + raise OigCloudApiError("Box ID not available, fetch stats first") + + async with self.get_session() as session: + data: str = json.dumps( + { + "id_device": self.box_id, + "value": mode, + } + ) + + _nonce: int = int(time.time() * 1000) + target_url: str = ( + f"{self._base_url}{self._set_grid_delivery_url}?_nonce={_nonce}" + ) + + self._logger.info( + f"Sending grid delivery request to {target_url} for {data.replace(str(self.box_id), 'xxxxxx')}" + ) + + async with session.post( + target_url, + data=data, + headers={"Content-Type": "application/json"}, + ) as response: + response_content: str = await response.text() + + if response.status == 200: + response_json = json.loads(response_content) + self._logger.debug(f"API response: {response_json}") + return True + else: + raise OigCloudApiError( + f"Error setting grid delivery: {response.status} - {response_content}" + ) + except OigCloudApiError: + raise + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise e + + async def set_battery_formating(self, mode: str, limit: int) -> bool: + """Set battery formatting parameters.""" + try: + self._logger.debug(f"Setting formatting battery to {limit} percent") + async with self.get_session() as session: + data: str = json.dumps( + { + "id_device": self.box_id, + "column": "bat_ac", + "value": limit, + } + ) + + _nonce: int = int(time.time() * 1000) + target_url: str = ( + f"{self._base_url}{self._set_batt_formating_url}?_nonce={_nonce}" + ) + + self._logger.debug( + f"Sending formatting battery request to {target_url} with {data.replace(str(self.box_id), 'xxxxxx')}" + ) + + async with session.post( + target_url, + data=data, + headers={"Content-Type": "application/json"}, + ) as response: + response_content: str = await response.text() + if response.status == 200: + response_json: Dict[str, Any] = json.loads(response_content) + message: str = response_json[0][2] + self._logger.info(f"Response: {message}") + return True + else: + raise Exception( + f"Error setting mode: {response.status}", + response_content, + ) + except Exception as e: + self._logger.error(f"Error: {e}", stack_info=True) + raise + + async def set_formating_mode(self, mode: str) -> bool: + """Set battery formatting mode.""" + try: + self._logger.debug(f"Setting battery formatting mode to {mode}") + + async with self.get_session() as session: + data: str = json.dumps( + { + "bat_ac": mode, + } + ) + + _nonce: int = int(time.time() * 1000) + target_url: str = ( + f"{self._base_url}{self._set_batt_formating_url}?_nonce={_nonce}" + ) + + self._logger.info(f"Sending battery formatting request to {target_url}") + + async with session.post( + target_url, + data=data, + headers={"Content-Type": "application/json"}, + ) as response: + response_content: str = await response.text() + + if response.status == 200: + response_json = json.loads(response_content) + self._logger.debug(f"API response: {response_json}") + return True + else: + raise OigCloudApiError( + f"Error setting battery formatting mode: {response.status} - {response_content}" + ) + except OigCloudApiError: + raise + except Exception as e: + self._logger.error( + f"Error setting battery formatting mode: {e}", stack_info=True + ) + raise OigCloudApiError(f"Failed to set battery formatting mode: {e}") from e + + async def get_extended_stats( + self, name: str, from_date: str, to_date: str + ) -> Dict[str, Any]: + """Get extended statistics with ETag support.""" + endpoint = f"json2.php:{name}" # Per-name caching + + try: + self._logger.debug( + f"Getting extended stats '{name}' from {from_date} to {to_date}" + ) + + async with self.get_session() as session: + url: str = self._base_url + "json2.php" + + # Prepare headers with If-None-Match if we have cached ETag + extra_headers: Dict[str, str] = {"Content-Type": "application/json"} + cached = self._cache.get(endpoint) + if cached and cached.get("etag"): + extra_headers["If-None-Match"] = cached["etag"] + self._logger.debug( + f"📋 ETag hit for '{name}' → If-None-Match={cached['etag'][:20]}..." + ) + + # Původní payload formát + payload: Dict[str, str] = { + "name": name, + "range": f"{from_date},{to_date},0", + } + + async with session.post( + url, json=payload, headers=extra_headers + ) as response: + # Handle 304 Not Modified + if response.status == 304: + if cached and cached.get("data") is not None: + self._logger.debug( + f"✅ 304 Not Modified for '{name}' → using cached data" + ) + return cached["data"] + else: + self._logger.warning( + f"⚠️ 304 received for '{name}' but no cached data available" + ) + # Fallback without If-None-Match + async with session.post( + url, + json=payload, + headers={"Content-Type": "application/json"}, + ) as retry_response: + if retry_response.status == 200: + result = await retry_response.json() + self._update_cache(endpoint, retry_response, result) + return result + return {} + + if response.status == 200: + try: + result: Dict[str, Any] = await response.json() + + # Update cache with new data and ETag + self._update_cache(endpoint, response, result) + + self._logger.debug( + f"Extended stats '{name}' retrieved successfully, data size: {len(str(result))}" + ) + return result + except Exception as e: + self._logger.error( + f"Failed to parse JSON response for {name}: {e}" + ) + return {} + elif response.status == 401: + self._logger.warning( + f"Authentication failed for extended stats '{name}', retrying authentication" + ) + if await self.authenticate(): + return await self.get_extended_stats( + name, from_date, to_date + ) + return {} + else: + self._logger.warning( + f"HTTP {response.status} error fetching extended stats for {name}" + ) + return {} + + except Exception as e: + self._logger.error(f"Error in get_extended_stats for '{name}': {e}") + return {} + + async def get_notifications( + self, device_id: Optional[str] = None + ) -> Dict[str, Any]: + """Get notifications from OIG Cloud - similar to get_extended_stats.""" + try: + if device_id is None: + device_id = self.box_id + + if not device_id: + self._logger.warning("No device ID available for notifications") + return {"notifications": [], "bypass_status": False} + + self._logger.debug(f"Getting notifications for device {device_id}") + + async with self.get_session() as session: + nonce = int(time.time() * 1000) + url = f"{self._base_url}inc/php/scripts/Controller.Call.php?id=2&selector_id=ctrl-notifs&_nonce={nonce}" + + headers = { + "User-Agent": "Mozilla/5.0 (compatible; OIG-HA-Integration)", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept-Language": "cs,en;q=0.5", + "Referer": f"{self._base_url}", + "X-Requested-With": "XMLHttpRequest", + } + + async with session.get(url, headers=headers) as response: + if response.status == 200: + content = await response.text() + self._logger.debug( + f"Notifications content length: {len(content)}" + ) + + # Check for empty response (authentication failed) + if ( + '"folder-list"> ' in content + or '
' in content + ): + self._logger.warning( + "Empty notification list - authentication may have failed" + ) + return {"notifications": [], "bypass_status": False} + + # Return raw content for parsing by notification manager + return { + "content": content, + "status": "success", + "device_id": device_id, + } + + elif response.status == 401: + self._logger.warning( + "Authentication failed for notifications, retrying authentication" + ) + if await self.authenticate(): + return await self.get_notifications(device_id) + return { + "notifications": [], + "bypass_status": False, + "error": "auth_failed", + } + else: + self._logger.warning( + f"HTTP {response.status} error fetching notifications" + ) + return { + "notifications": [], + "bypass_status": False, + "error": f"http_{response.status}", + } + + except (asyncio.TimeoutError, ServerTimeoutError) as e: + self._logger.warning(f"Timeout while getting notifications: {e}") + return {"notifications": [], "bypass_status": False, "error": "timeout"} + except ClientConnectorError as e: + self._logger.warning(f"Connection error while getting notifications: {e}") + return {"notifications": [], "bypass_status": False, "error": "connection"} + except Exception as e: + self._logger.error(f"Error in get_notifications: {e}") + return {"notifications": [], "bypass_status": False, "error": str(e)} diff --git a/custom_components/oig_cloud/lib/oig_cloud_client/api/ote_api.py b/custom_components/oig_cloud/lib/oig_cloud_client/api/ote_api.py new file mode 100644 index 00000000..5630904b --- /dev/null +++ b/custom_components/oig_cloud/lib/oig_cloud_client/api/ote_api.py @@ -0,0 +1,451 @@ +"""OTE (Operator trhu s elektřinou) API pro stahování spotových cen elektřiny.""" + +import logging +from datetime import date, datetime, time, timedelta, timezone +from decimal import Decimal +from typing import Any, Dict, Literal, Optional, TypedDict, cast +from zoneinfo import ZoneInfo + +import aiohttp +import defusedxml.ElementTree as ET +from homeassistant.helpers.update_coordinator import UpdateFailed + +_LOGGER = logging.getLogger(__name__) + +# SOAP query template pro elektřinu - zjednodušený +QUERY_ELECTRICITY = """ + + + + + {start} + {end} + {in_eur} + + + +""" + + +class OTEFault(Exception): + """Výjimka pro chyby OTE API.""" + + pass + + +class InvalidDateError(Exception): + """Exception raised for invalid date format in CNB API response.""" + + pass + + +class Rate(TypedDict): + validFor: str + order: int + country: str + currency: str + amount: int + currencyCode: str + rate: float + + +class Rates(TypedDict): + rates: list[Rate] + + +class RateError(TypedDict): + description: str + errorCode: str + happenedAt: str + endPoint: str + messageId: str + + +class CnbRate: + """Třída pro získávání kurzů z ČNB API.""" + + RATES_URL: str = "https://api.cnb.cz/cnbapi/exrates/daily" + + def __init__(self) -> None: + self._timezone: ZoneInfo = ZoneInfo("Europe/Prague") + self._rates: Dict[str, Decimal] = {} + self._last_checked_date: Optional[date] = None + + async def download_rates(self, day: date) -> Rates: + """Stažení kurzů pro daný den.""" + params = {"date": day.isoformat()} + + async with aiohttp.ClientSession() as session: + async with session.get(self.RATES_URL, params=params) as response: + if response.status > 299: + if response.status == 400: + error = cast(RateError, await response.json()) + if error.get("errorCode") == "VALIDATION_ERROR": + raise InvalidDateError(f"Invalid date format: {day}") + + raise Exception(f"Error {response.status} while downloading rates") + text = cast(Rates, await response.json()) + return text + + async def get_day_rates(self, day: date) -> Dict[str, Decimal]: + """Získání kurzů pro daný den.""" + rates: Dict[str, Decimal] = { + "CZK": Decimal(1), + } + + cnb_rates: Optional[Rates] = None + for previous_day in range(0, 7): + try: + cnb_rates = await self.download_rates( + day - timedelta(days=previous_day) + ) + break + except InvalidDateError: + continue + + if not cnb_rates: + raise Exception("Could not download CNB rates for last 7 days") + + for rate in cnb_rates["rates"]: + rates[rate["currencyCode"]] = Decimal(rate["rate"]) + + return rates + + async def get_current_rates(self) -> Dict[str, Decimal]: + """Získání aktuálních kurzů.""" + now = datetime.now(timezone.utc) + day = now.astimezone(self._timezone).date() + + # Update if needed + if self._last_checked_date is None or day != self._last_checked_date: + self._rates = await self.get_day_rates(day) + self._last_checked_date = day + + return self._rates + + +class OteApi: + """API pro stahování dat z OTE - zjednodušeno podle fungujícího příkladu.""" + + OTE_PUBLIC_URL = "https://www.ote-cr.cz/services/PublicDataService" + + def __init__(self) -> None: + """Inicializace OTE API.""" + self._last_data: Dict[str, Any] = {} + self._cache_time: Optional[datetime] = None + self._eur_czk_rate: Optional[float] = None + self._rate_cache_time: Optional[datetime] = None + self.timezone = ZoneInfo("Europe/Prague") + self.utc = ZoneInfo("UTC") + self._cnb_rate = CnbRate() + + def _is_cache_valid(self) -> bool: + """Kontrola platnosti cache - data jsou platná do večera.""" + if not self._cache_time or not self._last_data: + return False + + now = datetime.now() + cache_date = self._cache_time.date() + current_date = now.date() + + # Cache je platný celý den + if cache_date == current_date: + # Po 13:00 zkontrolujeme, jestli máme zítřejší data + if now.hour >= 13: + tomorrow_available = bool(self._last_data.get("tomorrow_stats")) + if not tomorrow_available: + _LOGGER.debug("Cache invalid - no tomorrow data after 13:00") + return False + return True + + return False + + def _get_electricity_query(self, start: date, end: date, in_eur: bool) -> str: + """Vytvoření SOAP query pro elektřinu.""" + return QUERY_ELECTRICITY.format( + start=start.isoformat(), + end=end.isoformat(), + in_eur="true" if in_eur else "false", + ) + + async def _download_soap(self, query: str) -> str: + """Download SOAP response - zjednodušeno podle fungujícího příkladu.""" + _LOGGER.debug(f"Sending SOAP request to {self.OTE_PUBLIC_URL}") + _LOGGER.debug(f"SOAP Query:\n{query}") + + try: + async with aiohttp.ClientSession() as session: + async with session.post(self.OTE_PUBLIC_URL, data=query) as response: + response_text = await response.text() + _LOGGER.debug(f"SOAP Response status: {response.status}") + + if response.status != 200: + _LOGGER.error( + f"SOAP request failed with status {response.status}" + ) + _LOGGER.debug(f"Error response: {response_text}") + raise aiohttp.ClientError(f"HTTP {response.status}") + + return response_text + except aiohttp.ClientError as e: + raise OTEFault(f"Unable to download rates: {e}") + + def _parse_soap_response(self, soap_response: str) -> ET.Element: + """Parse SOAP response podle fungujícího příkladu.""" + try: + root = ET.fromstring(soap_response) + except Exception as e: + if "Application is not available" in soap_response: + raise UpdateFailed("OTE Portal is currently not available!") from e + raise UpdateFailed("Failed to parse query response.") from e + + # Check for SOAP fault + fault = root.find(".//{http://schemas.xmlsoap.org/soap/envelope/}Fault") + if fault: + faultstring = fault.find("faultstring") + error = "Unknown error" + if faultstring is not None: + error = faultstring.text + else: + error = soap_response + raise OTEFault(error) + + return root + + async def _get_electricity_rates( + self, start: datetime, in_eur: bool, unit: Literal["kWh", "MWh"] + ) -> Dict[datetime, Decimal]: + """Získání elektrických cen podle fungujícího příkladu.""" + assert start.tzinfo, "Timezone must be set" + start_tz = start.astimezone(self.timezone) + first_day = start_tz.date() + + # Od včerejška do zítřka + query = self._get_electricity_query( + first_day - timedelta(days=1), + first_day + timedelta(days=1), + in_eur=in_eur, + ) + + text = await self._download_soap(query) + root = self._parse_soap_response(text) + + result: Dict[datetime, Decimal] = {} + for item in root.findall(".//{http://www.ote-cr.cz/schema/service/public}Item"): + date_el = item.find("{http://www.ote-cr.cz/schema/service/public}Date") + if date_el is None or date_el.text is None: + continue + + current_date = date.fromisoformat(date_el.text) + + hour_el = item.find("{http://www.ote-cr.cz/schema/service/public}Hour") + if hour_el is None or hour_el.text is None: + current_hour = 0 + _LOGGER.warning(f'Item has no "Hour" child or is empty: {current_date}') + else: + current_hour = ( + int(hour_el.text) - 1 + ) # OTE používá 1-24, my potřebujeme 0-23 + + price_el = item.find("{http://www.ote-cr.cz/schema/service/public}Price") + if price_el is None or price_el.text is None: + _LOGGER.info( + f'Item has no "Price" child or is empty: {current_date} {current_hour}' + ) + continue + + current_price = Decimal(price_el.text) + + if unit == "kWh": + # API vrací cenu za MWh, převedeme na kWh + current_price /= Decimal(1000) + elif unit != "MWh": + raise ValueError(f"Invalid unit {unit}") + + # Převedeme na datetime s timezone + start_of_day = datetime.combine(current_date, time(0), tzinfo=self.timezone) + dt = start_of_day.astimezone(self.utc) + timedelta(hours=current_hour) + + result[dt] = current_price + + return result + + async def get_cnb_exchange_rate(self) -> Optional[float]: + """Získání kurzu EUR/CZK z ČNB API.""" + if self._rate_cache_time and self._eur_czk_rate: + now = datetime.now() + if self._rate_cache_time.date() == now.date(): + return self._eur_czk_rate + + try: + _LOGGER.debug("Fetching CNB exchange rate from API") + rates = await self._cnb_rate.get_current_rates() + eur_rate = rates.get("EUR") + + if eur_rate: + rate_float = float(eur_rate) + self._eur_czk_rate = rate_float + self._rate_cache_time = datetime.now() + _LOGGER.info(f"Successfully fetched CNB rate: {rate_float}") + return rate_float + else: + _LOGGER.warning("EUR rate not found in CNB response") + + except Exception as e: + _LOGGER.warning(f"Error fetching CNB rate: {e}") + + return None + + async def get_spot_prices( + self, date: Optional[datetime] = None, force_today_only: bool = False + ) -> Dict[str, Any]: + """Stažení spotových cen - zjednodušeno podle fungujícího příkladu.""" + if date is None: + date = datetime.now(tz=self.timezone) + + # Cache kontrola + if self._is_cache_valid(): + _LOGGER.debug("Using cached spot prices from OTE SOAP API") + return self._last_data + + try: + # Získáme kurz EUR/CZK + eur_czk_rate = await self.get_cnb_exchange_rate() + if not eur_czk_rate: + _LOGGER.warning("No CNB rate available, using default 25.0") + eur_czk_rate = 25.0 + + # NOVÉ: Rozhodnout o rozsahu dat podle času a parametru + now = datetime.now(tz=self.timezone) + + if force_today_only or now.hour < 13: + # Před 13:00 nebo force_today_only - stahujeme pouze dnešek + start_date = date.date() + end_date = date.date() + _LOGGER.info( + f"Fetching spot prices from OTE SOAP API for today only: {start_date}" + ) + else: + # Po 13:00 - standardní rozsah (včera, dnes, zítra) + start_date = date.date() - timedelta(days=1) + end_date = date.date() + timedelta(days=1) + _LOGGER.info( + f"Fetching spot prices from OTE SOAP API for {start_date} to {end_date}" + ) + + # Získáme data v EUR + rates_eur = await self._get_electricity_rates(date, in_eur=True, unit="kWh") + + # Převedeme EUR na CZK + rates_czk = {} + for dt, price_eur in rates_eur.items(): + rates_czk[dt] = float(price_eur) * eur_czk_rate + + _LOGGER.debug(f"Parsed {len(rates_eur)} hourly rates from OTE API") + + if not rates_eur: + _LOGGER.warning("No hourly rates found in OTE response") + return {} + + # Zpracujeme data do našeho formátu + data = await self._format_spot_data( + rates_czk, rates_eur, eur_czk_rate, date + ) + + if data: + self._last_data = data + self._cache_time = datetime.now() + hours_count = data.get("hours_count", 0) + tomorrow_available = bool(data.get("tomorrow_stats")) + _LOGGER.info( + f"Successfully fetched spot prices: {hours_count} hours, tomorrow data: {'yes' if tomorrow_available else 'no'}" + ) + return data + + except Exception as e: + _LOGGER.error(f"Error fetching spot prices: {e}", exc_info=True) + + return {} + + async def _format_spot_data( + self, + rates_czk: Dict[datetime, float], + rates_eur: Dict[datetime, Decimal], + eur_czk_rate: float, + reference_date: datetime, + ) -> Dict[str, Any]: + """Formátování dat do našeho standardního formátu.""" + today = reference_date.date() + tomorrow = today + timedelta(days=1) + + hourly_prices_czk_kwh = {} + hourly_prices_eur_mwh = {} + + today_prices_czk = [] + tomorrow_prices_czk = [] + + for dt, price_czk in rates_czk.items(): + # Převedeme UTC datetime na lokální čas pro klíč + local_dt = dt.astimezone(self.timezone) + price_date = local_dt.date() + + time_key = f"{price_date.strftime('%Y-%m-%d')}T{local_dt.hour:02d}:00:00" + + # Cena v CZK/kWh + hourly_prices_czk_kwh[time_key] = round(price_czk, 4) + + # Cena v EUR/MWh (zpětný převod) + price_eur_mwh = float(rates_eur[dt]) * 1000.0 # EUR/kWh -> EUR/MWh + hourly_prices_eur_mwh[time_key] = round(price_eur_mwh, 2) + + # Statistiky podle dnů + if price_date == today: + today_prices_czk.append(price_czk) + elif price_date == tomorrow: + tomorrow_prices_czk.append(price_czk) + + if not today_prices_czk: + return {} + + # Sestavíme výsledek + all_prices_czk = today_prices_czk + tomorrow_prices_czk + + result = { + "date": today.strftime("%Y-%m-%d"), + "prices_czk_kwh": hourly_prices_czk_kwh, + "prices_eur_mwh": hourly_prices_eur_mwh, + "eur_czk_rate": eur_czk_rate, + "rate_source": "ČNB", + "average_price_czk": round(sum(all_prices_czk) / len(all_prices_czk), 4), + "min_price_czk": round(min(all_prices_czk), 4), + "max_price_czk": round(max(all_prices_czk), 4), + "source": "OTE SOAP API + ČNB kurz", + "updated": datetime.now().isoformat(), + "hours_count": len(hourly_prices_czk_kwh), + "date_range": { + "from": ( + min(hourly_prices_czk_kwh.keys()) if hourly_prices_czk_kwh else None + ), + "to": ( + max(hourly_prices_czk_kwh.keys()) if hourly_prices_czk_kwh else None + ), + }, + "today_stats": { + "avg_czk": round(sum(today_prices_czk) / len(today_prices_czk), 4), + "min_czk": round(min(today_prices_czk), 4), + "max_czk": round(max(today_prices_czk), 4), + }, + "tomorrow_stats": ( + { + "avg_czk": round( + sum(tomorrow_prices_czk) / len(tomorrow_prices_czk), 4 + ), + "min_czk": round(min(tomorrow_prices_czk), 4), + "max_czk": round(max(tomorrow_prices_czk), 4), + } + if tomorrow_prices_czk + else None + ), + } + + return result diff --git a/custom_components/oig_cloud/models.py b/custom_components/oig_cloud/lib/oig_cloud_client/models.py similarity index 91% rename from custom_components/oig_cloud/models.py rename to custom_components/oig_cloud/lib/oig_cloud_client/models.py index 71e55406..c7db59a0 100644 --- a/custom_components/oig_cloud/models.py +++ b/custom_components/oig_cloud/lib/oig_cloud_client/models.py @@ -1,13 +1,13 @@ """Data models for OIG Cloud integration.""" + from dataclasses import dataclass, field -from datetime import datetime -from typing import Any, Dict, List, Optional, Union, cast +from typing import Any, Dict, Optional @dataclass class AcInData: """Model for AC input data.""" - + aci_vr: float aci_vs: float aci_vt: float @@ -21,7 +21,7 @@ class AcInData: ac_pd: Optional[float] = None ac_pm: Optional[float] = None ac_py: Optional[float] = None - + @property def total_load(self) -> float: """Calculate total grid load across all phases.""" @@ -31,11 +31,11 @@ def total_load(self) -> float: @dataclass class AcInBData: """Model for secondary AC input data.""" - + aci_wr: float = 0 aci_ws: float = 0 aci_wt: float = 0 - + @property def total_load(self) -> float: """Calculate total grid load across all phases.""" @@ -45,7 +45,7 @@ def total_load(self) -> float: @dataclass class AcOutData: """Model for AC output data.""" - + aco_p: float aco_pr: Optional[float] = None aco_ps: Optional[float] = None @@ -59,7 +59,7 @@ class AcOutData: @dataclass class BatteryData: """Model for battery data.""" - + bat_i: Optional[float] = None bat_v: Optional[float] = None bat_t: Optional[float] = None @@ -69,7 +69,7 @@ class BatteryData: bat_apd: Optional[float] = None bat_am: Optional[float] = None bat_ay: Optional[float] = None - + @property def power(self) -> Optional[float]: """Calculate battery power.""" @@ -81,7 +81,7 @@ def power(self) -> Optional[float]: @dataclass class BatteryParams: """Model for battery parameters.""" - + bat_min: float bat_gl_min: float bat_hdo: int @@ -95,7 +95,7 @@ class BatteryParams: @dataclass class BoilerData: """Model for boiler data.""" - + p: Optional[float] = None ssr1: Optional[int] = None ssr2: Optional[int] = None @@ -105,7 +105,7 @@ class BoilerData: @dataclass class BoilerParams: """Model for boiler parameters.""" - + ison: int = 0 prrty: int = 0 p_set: float = 0 @@ -138,7 +138,7 @@ class BoilerParams: @dataclass class BoxData: """Model for box environment data.""" - + temp: float humid: float @@ -146,7 +146,7 @@ class BoxData: @dataclass class BoxParams: """Model for box parameters.""" - + bat_ac: int p_fve: float p_bat: float @@ -160,7 +160,7 @@ class BoxParams: @dataclass class BoxParams2: """Model for secondary box parameters.""" - + app: int = 0 wdogx: int = 0 @@ -168,7 +168,7 @@ class BoxParams2: @dataclass class DcInData: """Model for DC input (solar) data.""" - + fv_proc: float = 0 fv_p1: float = 0 fv_p2: float = 0 @@ -179,7 +179,7 @@ class DcInData: fv_ad: Optional[float] = None fv_am: Optional[float] = None fv_ay: Optional[float] = None - + @property def total_power(self) -> float: """Calculate total solar power.""" @@ -189,7 +189,7 @@ def total_power(self) -> float: @dataclass class DeviceData: """Model for device metadata.""" - + id_type: int lastcall: str @@ -197,21 +197,21 @@ class DeviceData: @dataclass class InvertorParams: """Model for invertor parameters.""" - + to_grid: int @dataclass class InvertorParams1: """Model for secondary invertor parameters.""" - + p_max_feed_grid: int @dataclass class ActualData: """Model for actual/current data.""" - + aci_wr: float aci_ws: float aci_wt: float @@ -221,12 +221,12 @@ class ActualData: bat_p: float bat_c: float viz: int - + @property def grid_total(self) -> float: """Calculate total grid power.""" return self.aci_wr + self.aci_ws + self.aci_wt - + @property def solar_total(self) -> float: """Calculate total solar power.""" @@ -236,7 +236,7 @@ def solar_total(self) -> float: @dataclass class OigCloudDeviceData: """Model for a single OIG Cloud device.""" - + ac_in: AcInData ac_out: AcOutData actual: ActualData @@ -253,9 +253,9 @@ class OigCloudDeviceData: box: Optional[BoxData] = None box_prm2: Optional[BoxParams2] = None ac_in_b: Optional[AcInBData] = None - + @classmethod - def from_dict(cls, data: Dict[str, Any]) -> 'OigCloudDeviceData': + def from_dict(cls, data: Dict[str, Any]) -> "OigCloudDeviceData": """Create a device data instance from a dictionary.""" # Required fields ac_in = AcInData(**data.get("ac_in", {})) @@ -264,34 +264,32 @@ def from_dict(cls, data: Dict[str, Any]) -> 'OigCloudDeviceData': batt_data = data.get("batt", {}) # Handle the case where bat_c might be the only field in batt if len(batt_data) == 1 and "bat_c" in batt_data: - batt = BatteryData( - bat_c=batt_data["bat_c"], - bat_i=0, - bat_v=0 - ) + batt = BatteryData(bat_c=batt_data["bat_c"], bat_i=0, bat_v=0) else: batt = BatteryData(**batt_data) dc_in = DcInData(**data.get("dc_in", {})) box_prms = BoxParams(**data.get("box_prms", {})) invertor_prms = InvertorParams(**data.get("invertor_prms", {})) invertor_prm1 = InvertorParams1(**data.get("invertor_prm1", {})) - + # Optional fields device = DeviceData(**data["device"]) if "device" in data else None queen = bool(data.get("queen", False)) - + # Handle boiler data which could be empty list or dict boiler = None if "boiler" in data and isinstance(data["boiler"], dict) and data["boiler"]: boiler = BoilerData(**data["boiler"]) - + # Other optional components - boiler_prms = BoilerParams(**data["boiler_prms"]) if "boiler_prms" in data else None + boiler_prms = ( + BoilerParams(**data["boiler_prms"]) if "boiler_prms" in data else None + ) batt_prms = BatteryParams(**data["batt_prms"]) if "batt_prms" in data else None box = BoxData(**data["box"]) if "box" in data else None box_prm2 = BoxParams2(**data["box_prm2"]) if "box_prm2" in data else None ac_in_b = AcInBData(**data["ac_in_b"]) if "ac_in_b" in data else None - + return cls( ac_in=ac_in, ac_out=ac_out, @@ -315,14 +313,14 @@ def from_dict(cls, data: Dict[str, Any]) -> 'OigCloudDeviceData': @dataclass class OigCloudData: """Model for complete OIG Cloud API data.""" - + devices: Dict[str, OigCloudDeviceData] = field(default_factory=dict) - + @classmethod - def from_dict(cls, data: Dict[str, Dict[str, Any]]) -> 'OigCloudData': + def from_dict(cls, data: Dict[str, Dict[str, Any]]) -> "OigCloudData": """Create an instance from a dictionary.""" devices = {} for device_id, device_data in data.items(): devices[device_id] = OigCloudDeviceData.from_dict(device_data) - - return cls(devices=devices) \ No newline at end of file + + return cls(devices=devices) diff --git a/custom_components/oig_cloud/manifest.json b/custom_components/oig_cloud/manifest.json index e3ca1fc5..204e711f 100644 --- a/custom_components/oig_cloud/manifest.json +++ b/custom_components/oig_cloud/manifest.json @@ -1,19 +1,16 @@ { "domain": "oig_cloud", "name": "OIG Cloud (Čez Battery Box)", - "codeowners": [ - "@psimsa" - ], + "after_dependencies": ["recorder", "history"], + "codeowners": ["@psimsa", "@Muriel2Horak"], "config_flow": true, - "dependencies": [], + "dependencies": ["http"], "documentation": "https://github.com/psimsa/oig_cloud", "homekit": {}, "iot_class": "cloud_polling", "issue_tracker": "https://github.com/psimsa/oig_cloud/issues", - "requirements": [ - "opentelemetry-exporter-otlp-proto-grpc==1.28.0" - ], + "requirements": ["numpy>=1.24.0"], "ssdp": [], - "version": "1.0.5-live-data2", + "version": "2.0.6-pre.10", "zeroconf": [] } diff --git a/custom_components/oig_cloud/oig_cloud_computed_sensor.py b/custom_components/oig_cloud/oig_cloud_computed_sensor.py deleted file mode 100644 index 64ce3fc4..00000000 --- a/custom_components/oig_cloud/oig_cloud_computed_sensor.py +++ /dev/null @@ -1,215 +0,0 @@ -"""Computed sensor implementation for OIG Cloud integration.""" -import logging -from typing import Any, Dict, Final, Optional, Union, cast - -from .coordinator import OigCloudDataUpdateCoordinator -from .oig_cloud_sensor import OigCloudSensor - -_LOGGER = logging.getLogger(__name__) - -# Language translations -_LANGS: Final[Dict[str, Dict[str, str]]] = { - "on": { - "en": "On", - "cs": "Zapnuto", - }, - "off": { - "en": "Off", - "cs": "Vypnuto", - }, - "unknown": { - "en": "Unknown", - "cs": "Neznámý", - }, - "changing": { - "en": "Changing in progress", - "cs": "Probíhá změna", - }, -} - - -class OigCloudComputedSensor(OigCloudSensor): - """Sensor that computes its value from multiple data points in the OIG Cloud API data.""" - - @property - def state(self) -> Optional[Union[float, str]]: - """Return the state of the sensor.""" - _LOGGER.debug(f"Getting state for computed sensor {self.entity_id}") - - # Check if we have data - if not self.coordinator.data: - _LOGGER.debug(f"No data available for {self.entity_id}") - return None - - # Get the box data - box_id = list(self.coordinator.data.keys())[0] - pv_data = self.coordinator.data[box_id] - - # Handle each computed sensor type - try: - # Total grid consumption (sum of all lines) - if self._sensor_type == "ac_in_aci_wtotal": - return self._compute_ac_in_total(pv_data) - - # Total actual grid consumption - if self._sensor_type == "actual_aci_wtotal": - return self._compute_actual_ac_in_total(pv_data) - - # Total solar production - if self._sensor_type == "dc_in_fv_total": - return self._compute_dc_in_total(pv_data) - - # Total actual solar production - if self._sensor_type == "actual_fv_total": - return self._compute_actual_fv_total(pv_data) - - # Boiler consumption - if self._node_id == "boiler" or self._sensor_type == "boiler_current_w": - return self._get_boiler_consumption(pv_data) - - # Battery charging power - if self._sensor_type == "batt_batt_comp_p_charge": - return self._get_batt_power_charge(pv_data) - - # Battery discharging power - if self._sensor_type == "batt_batt_comp_p_discharge": - return self._get_batt_power_discharge(pv_data) - - # CBB consumption (system consumption) - # if self._sensor_type == "cbb_consumption_w": - # return self._get_cbb_consumption(pv_data) - - return None - - except (KeyError, TypeError, ValueError) as e: - _LOGGER.warning(f"Error computing value for {self.entity_id}: {e}") - return None - - def _compute_ac_in_total(self, pv_data: Dict[str, Any]) -> float: - """Compute the total grid power from all three lines.""" - if "ac_in" not in pv_data or not isinstance(pv_data["ac_in"], dict): - raise KeyError("ac_in data not available") - - return float( - pv_data["ac_in"]["aci_wr"] - + pv_data["ac_in"]["aci_ws"] - + pv_data["ac_in"]["aci_wt"] - ) - - def _compute_actual_ac_in_total(self, pv_data: Dict[str, Any]) -> float: - """Compute the actual total grid power from all three lines.""" - if "actual" not in pv_data or not isinstance(pv_data["actual"], dict): - raise KeyError("actual data not available") - - return float( - pv_data["actual"]["aci_wr"] - + pv_data["actual"]["aci_ws"] - + pv_data["actual"]["aci_wt"] - ) - - def _compute_dc_in_total(self, pv_data: Dict[str, Any]) -> float: - """Compute the total solar power production.""" - if "dc_in" not in pv_data or not isinstance(pv_data["dc_in"], dict): - raise KeyError("dc_in data not available") - - return float(pv_data["dc_in"]["fv_p1"] + pv_data["dc_in"]["fv_p2"]) - - def _compute_actual_fv_total(self, pv_data: Dict[str, Any]) -> float: - """Compute the actual total solar power production.""" - if "actual" not in pv_data or not isinstance(pv_data["actual"], dict): - raise KeyError("actual data not available") - - return float(pv_data["actual"]["fv_p1"] + pv_data["actual"]["fv_p2"]) - - def _get_cbb_consumption(self, pv_data: Dict[str, Any]) -> float: - """Compute the CBB (system) consumption based on power flow.""" - # Check required data is available - if ("dc_in" not in pv_data or "ac_out" not in pv_data or - "ac_in" not in pv_data or "batt" not in pv_data): - raise KeyError("Required data for CBB consumption calculation not available") - - # Get boiler power if available - boiler_p: float = 0 - if "boiler" in pv_data and isinstance(pv_data["boiler"], dict) and "p" in pv_data["boiler"]: - boiler_power = pv_data["boiler"]["p"] - if boiler_power is not None and boiler_power > 0: - boiler_p = float(boiler_power) - - # Calculate system consumption using power flow equation - return float( - # Solar production - (pv_data["dc_in"]["fv_p1"] + pv_data["dc_in"]["fv_p2"]) - - - # Boiler consumption - boiler_p - - - # Load consumption - pv_data["ac_out"]["aco_p"] - + - # Grid import/export - ( - pv_data["ac_in"]["aci_wr"] - + pv_data["ac_in"]["aci_ws"] - + pv_data["ac_in"]["aci_wt"] - ) - + - # Battery charging/discharging - (pv_data["batt"]["bat_i"] * pv_data["batt"]["bat_v"] * -1) - ) - - def _get_batt_power_charge(self, pv_data: Dict[str, Any]) -> float: - """Get the battery charging power (positive values only).""" - if "actual" not in pv_data or "bat_p" not in pv_data["actual"]: - raise KeyError("Battery power data not available") - - battery_power = float(pv_data["actual"]["bat_p"]) - - # Return only positive values (charging), otherwise return 0 - return battery_power if battery_power > 0 else 0 - - def _get_batt_power_discharge(self, pv_data: Dict[str, Any]) -> float: - """Get the battery discharging power (converted to positive value).""" - if "actual" not in pv_data or "bat_p" not in pv_data["actual"]: - raise KeyError("Battery power data not available") - - battery_power = float(pv_data["actual"]["bat_p"]) - - # Return absolute value of negative power (discharging), otherwise return 0 - return abs(battery_power) if battery_power < 0 else 0 - - def _get_boiler_consumption(self, pv_data: Dict[str, Any]) -> Optional[float]: - """Calculate the boiler consumption.""" - # Check if boiler data is available - if "boiler" not in pv_data or not pv_data["boiler"]: - return None - - if not isinstance(pv_data["boiler"], dict) or "p" not in pv_data["boiler"]: - return None - - boiler_power = pv_data["boiler"]["p"] - if boiler_power is None: - return None - - # Calculation for boiler_current_w - if self._sensor_type == "boiler_current_w": - # Calculate grid power - if "ac_in" in pv_data and isinstance(pv_data["ac_in"], dict): - grid_power = ( - pv_data["ac_in"]["aci_wr"] - + pv_data["ac_in"]["aci_ws"] - + pv_data["ac_in"]["aci_wt"] - ) - - # If we're exporting to grid (negative grid value) and boiler is active - if boiler_power > 0 and grid_power < 0: - # Adjust boiler consumption by grid export - return float(boiler_power + grid_power) - - # Default case - just return the boiler power - return float(boiler_power) - - return None - - async def async_update(self) -> None: - # Request the coordinator to fetch new data and update the entity's state - await self.coordinator.async_request_refresh() diff --git a/custom_components/oig_cloud/oig_cloud_data_sensor.py b/custom_components/oig_cloud/oig_cloud_data_sensor.py deleted file mode 100644 index e3b4c9cc..00000000 --- a/custom_components/oig_cloud/oig_cloud_data_sensor.py +++ /dev/null @@ -1,146 +0,0 @@ -"""Data sensor implementation for OIG Cloud integration.""" -import logging -from typing import Any, Dict, Final, Optional, Union, cast - -from .coordinator import OigCloudDataUpdateCoordinator -from .models import OigCloudDeviceData -from .oig_cloud_sensor import OigCloudSensor -from .shared.shared import GridMode - -_LOGGER = logging.getLogger(__name__) - -# Language translations for different states -_LANGS: Final[Dict[str, Dict[str, str]]] = { - "on": { - "en": "On", - "cs": "Zapnuto", - }, - "off": { - "en": "Off", - "cs": "Vypnuto", - }, - "unknown": { - "en": "Unknown", - "cs": "Neznámý", - }, - "changing": { - "en": "Changing in progress", - "cs": "Probíhá změna", - }, - "Zapnuto/On": { - "en": "On", - "cs": "Zapnuto", - }, - "Vypnuto/Off": { - "en": "Off", - "cs": "Vypnuto", - }, -} - - -class OigCloudDataSensor(OigCloudSensor): - """Sensor that reads a value directly from the OIG Cloud API data.""" - - @property - def state(self) -> Optional[Union[float, str]]: - """Return the state of the sensor.""" - _LOGGER.debug(f"Getting state for {self.entity_id}") - - # Use the helper method from the parent class to get the node value - node_value = self.get_node_value() - if node_value is None: - return None - - language: str = self.hass.config.language - - # Process special cases - if self._sensor_type == "box_prms_mode": - return self._get_mode_name(node_value, language) - - if self._sensor_type == "invertor_prms_to_grid": - try: - box_id = list(self.coordinator.data.keys())[0] - pv_data = self.coordinator.data[box_id] - return self._grid_mode(pv_data, node_value, language) - except (KeyError, IndexError) as e: - _LOGGER.warning(f"Error processing grid mode: {e}") - return _LANGS["unknown"][language] - - if self._sensor_type in ["boiler_ssr1", "boiler_ssr2", "boiler_ssr3", "boiler_manual_mode"]: - return self._get_ssrmode_name(node_value, language) - - # Try to convert to float for numeric values - try: - return float(node_value) - except (ValueError, TypeError): - return node_value - - def _get_mode_name(self, node_value: int, language: str) -> str: - """Convert box mode number to human-readable name.""" - if node_value == 0: - return "Home 1" - elif node_value == 1: - return "Home 2" - elif node_value == 2: - return "Home 3" - elif node_value == 3: - return "Home UPS" - return _LANGS["unknown"][language] - - def _grid_mode(self, pv_data: Dict[str, Any], node_value: Any, language: str) -> str: - """Determine grid delivery mode based on multiple parameters.""" - try: - # Get required parameters with safe fallbacks - grid_enabled: int = pv_data.get("box_prms", {}).get("crcte", 0) - to_grid: int = int(node_value) if node_value is not None else 0 - max_grid_feed: int = pv_data.get("invertor_prm1", {}).get("p_max_feed_grid", 0) - - # For typed data model (future usage) - if isinstance(pv_data, OigCloudDeviceData): - grid_enabled = pv_data.box_prms.crcte - to_grid = pv_data.invertor_prms.to_grid - max_grid_feed = pv_data.invertor_prm1.p_max_feed_grid - - # Different logic for queen/non-queen models - if pv_data.get("queen", False): - return self._grid_mode_queen(grid_enabled, to_grid, max_grid_feed, language) - return self._grid_mode_king(grid_enabled, to_grid, max_grid_feed, language) - except (KeyError, ValueError, TypeError, AttributeError) as e: - _LOGGER.warning(f"Error calculating grid mode: {e}") - return _LANGS["unknown"][language] - - def _grid_mode_queen(self, grid_enabled: int, to_grid: int, max_grid_feed: int, language: str) -> str: - """Determine grid mode for Queen models.""" - vypnuto = 0 == to_grid and 0 == max_grid_feed - zapnuto = 1 == to_grid - limited = 0 == to_grid and 0 < max_grid_feed - - if vypnuto: - return GridMode.OFF.value - elif limited: - return GridMode.LIMITED.value - elif zapnuto: - return GridMode.ON.value - return _LANGS["changing"][language] - - def _grid_mode_king(self, grid_enabled: int, to_grid: int, max_grid_feed: int, language: str) -> str: - """Determine grid mode for King/regular models.""" - vypnuto = 0 == grid_enabled and 0 == to_grid - zapnuto = 1 == grid_enabled and 1 == to_grid and 10000 == max_grid_feed - limited = 1 == grid_enabled and 1 == to_grid and 9999 >= max_grid_feed - - if vypnuto: - return GridMode.OFF.value - elif limited: - return GridMode.LIMITED.value - elif zapnuto: - return GridMode.ON.value - return _LANGS["changing"][language] - - def _get_ssrmode_name(self, node_value: int, language: str) -> str: - """Convert SSR mode number to human-readable name.""" - if node_value == 0: - return "Vypnuto/Off" - elif node_value == 1: - return "Zapnuto/On" - return _LANGS["unknown"][language] \ No newline at end of file diff --git a/custom_components/oig_cloud/oig_cloud_sensor.py b/custom_components/oig_cloud/oig_cloud_sensor.py deleted file mode 100644 index 8a057f7f..00000000 --- a/custom_components/oig_cloud/oig_cloud_sensor.py +++ /dev/null @@ -1,126 +0,0 @@ -"""Base sensor for OIG Cloud integration.""" -import logging -from typing import Any, Dict, List, Optional, Union, cast - -from homeassistant.components.sensor import SensorEntity -from homeassistant.const import EntityCategory -from homeassistant.helpers.entity import DeviceInfo -from homeassistant.helpers.update_coordinator import CoordinatorEntity - -from .const import DEFAULT_NAME, DOMAIN -from .coordinator import OigCloudDataUpdateCoordinator -from .models import OigCloudData -from .sensor_types import SENSOR_TYPES - -_LOGGER = logging.getLogger(__name__) - - -class OigCloudSensor(CoordinatorEntity, SensorEntity): - """Base implementation of OIG Cloud sensor.""" - - def __init__(self, coordinator: OigCloudDataUpdateCoordinator, sensor_type: str) -> None: - """Initialize the sensor.""" - if not isinstance(sensor_type, str): - raise TypeError("sensor_type must be a string") - - super().__init__(coordinator) - self.coordinator: OigCloudDataUpdateCoordinator = coordinator - self._sensor_type: str = sensor_type - self._attr_state_class = SENSOR_TYPES[sensor_type].get("state_class") - self._node_id: Optional[str] = SENSOR_TYPES[sensor_type].get("node_id") - self._node_key: Optional[str] = SENSOR_TYPES[sensor_type].get("node_key") - self._box_id: str = list(self.coordinator.data.keys())[0] - self.entity_id = f"sensor.oig_{self._box_id}_{sensor_type}" - _LOGGER.debug(f"Created sensor {self.entity_id}") - - @property - def available(self) -> bool: - """Return if entity is available.""" - # First check if coordinator has data and last update was successful - if not self.coordinator.last_update_success or not self.coordinator.data: - return False - - # For sensors that need to access nodes - if self._node_id is not None: - # Check if the node exists in the data - box_id = list(self.coordinator.data.keys())[0] - if self._node_id not in self.coordinator.data[box_id]: - return False - - return True - - @property - def entity_category(self) -> Optional[str]: - """Return the entity category of the sensor.""" - return SENSOR_TYPES[self._sensor_type].get("entity_category") - - @property - def unit_of_measurement(self) -> Optional[str]: - """Return the unit of measurement.""" - return SENSOR_TYPES[self._sensor_type].get("unit_of_measurement") - - @property - def unique_id(self) -> str: - """Return a unique ID for this entity.""" - return f"oig_cloud_{self._box_id}_{self._sensor_type}" - - @property - def device_info(self) -> DeviceInfo: - """Return information about the device.""" - data: Dict[str, Any] = self.coordinator.data - box_id = list(data.keys())[0] - pv_data: Dict[str, Any] = data[box_id] - - # Check if this is a Queen model - is_queen: bool = bool(pv_data.get("queen", False)) - model_name: str = f"{DEFAULT_NAME} {'Queen' if is_queen else 'Home'}" - - return DeviceInfo( - identifiers={(DOMAIN, self._box_id)}, - name=f"{model_name} {self._box_id}", - manufacturer="OIG", - model=model_name, - sw_version=pv_data.get("box_prms", {}).get("sw", None), - ) - - @property - def should_poll(self) -> bool: - """Return False as entity should not poll on its own.""" - return False - - @property - def options(self) -> Optional[List[str]]: - """Return the options for this sensor if applicable.""" - return SENSOR_TYPES[self._sensor_type].get("options") - - @property - def name(self) -> str: - """Return the name of the sensor.""" - language: str = self.hass.config.language - if language == "cs": - return SENSOR_TYPES[self._sensor_type].get("name_cs", SENSOR_TYPES[self._sensor_type]["name"]) - return SENSOR_TYPES[self._sensor_type]["name"] - - @property - def device_class(self) -> Optional[str]: - """Return the device class.""" - return SENSOR_TYPES[self._sensor_type].get("device_class") - - @property - def state_class(self) -> Optional[str]: - """Return the state class of the sensor.""" - return SENSOR_TYPES[self._sensor_type].get("state_class") - - def get_node_value(self) -> Any: - """Safely extract node value from coordinator data.""" - if not self.coordinator.data or not self._node_id or not self._node_key: - return None - - box_id = list(self.coordinator.data.keys())[0] - try: - return self.coordinator.data[box_id][self._node_id][self._node_key] - except (KeyError, TypeError): - _LOGGER.debug( - f"Could not find {self._node_id}.{self._node_key} in data for sensor {self.entity_id}" - ) - return None diff --git a/custom_components/oig_cloud/physics.py b/custom_components/oig_cloud/physics.py new file mode 100644 index 00000000..7455d558 --- /dev/null +++ b/custom_components/oig_cloud/physics.py @@ -0,0 +1,348 @@ +"""Shared physics for CBB mode simulation (15-minute interval).""" + +from __future__ import annotations + +from dataclasses import dataclass + +from .const import HOME_I, HOME_II, HOME_III, HOME_UPS + + +@dataclass(frozen=True) +class IntervalPhysicsResult: + """Result of simulating a single interval.""" + + new_soc_kwh: float + grid_import_kwh: float + grid_export_kwh: float + battery_charge_kwh: float + battery_discharge_kwh: float + grid_charge_kwh: float = 0.0 + solar_charge_kwh: float = 0.0 + + +def simulate_interval( + *, + mode: int, + solar_kwh: float, + load_kwh: float, + battery_soc_kwh: float, + capacity_kwh: float, + hw_min_capacity_kwh: float, + charge_efficiency: float, + discharge_efficiency: float, + home_charge_rate_kwh_15min: float, +) -> IntervalPhysicsResult: + """Simulate one 15-minute interval for a given CBB mode. + + This function implements the canonical mode physics (HW minimum only). + """ + solar_kwh = max(0.0, float(solar_kwh)) + load_kwh = max(0.0, float(load_kwh)) + capacity_kwh = max(0.0, float(capacity_kwh)) + hw_min_capacity_kwh = max(0.0, float(hw_min_capacity_kwh)) + + soc = max(0.0, min(capacity_kwh, float(battery_soc_kwh))) + + # Night optimization: HOME I/II/III behave identically when solar is zero. + if solar_kwh < 0.001 and mode in (HOME_I, HOME_II, HOME_III): + return _simulate_night_interval( + soc=soc, + load_kwh=load_kwh, + capacity_kwh=capacity_kwh, + hw_min_capacity_kwh=hw_min_capacity_kwh, + discharge_efficiency=discharge_efficiency, + ) + + # HOME I (0): Solar -> Load, surplus -> Battery, deficit -> Battery. + if mode == HOME_I: + return _simulate_home_i( + soc=soc, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + capacity_kwh=capacity_kwh, + hw_min_capacity_kwh=hw_min_capacity_kwh, + charge_efficiency=charge_efficiency, + discharge_efficiency=discharge_efficiency, + ) + + # HOME II (1): Solar -> Load, surplus -> Battery, deficit -> Grid (battery untouched). + if mode == HOME_II: + return _simulate_home_ii( + soc=soc, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + capacity_kwh=capacity_kwh, + charge_efficiency=charge_efficiency, + ) + + # HOME III (2): All solar -> Battery, load -> Grid. + if mode == HOME_III: + return _simulate_home_iii( + soc=soc, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + capacity_kwh=capacity_kwh, + charge_efficiency=charge_efficiency, + ) + + # HOME UPS (3): solar + grid -> battery, load -> grid. + if mode == HOME_UPS: + return _simulate_home_ups( + soc=soc, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + capacity_kwh=capacity_kwh, + charge_efficiency=charge_efficiency, + home_charge_rate_kwh_15min=home_charge_rate_kwh_15min, + ) + + # Unknown mode -> fall back to HOME I + return simulate_interval( + mode=HOME_I, + solar_kwh=solar_kwh, + load_kwh=load_kwh, + battery_soc_kwh=soc, + capacity_kwh=capacity_kwh, + hw_min_capacity_kwh=hw_min_capacity_kwh, + charge_efficiency=charge_efficiency, + discharge_efficiency=discharge_efficiency, + home_charge_rate_kwh_15min=home_charge_rate_kwh_15min, + ) + + +def _build_result( + *, + soc: float, + capacity_kwh: float, + grid_import: float, + grid_export: float, + battery_charge: float, + battery_discharge: float, + grid_charge_raw: float, + solar_charge_raw: float, +) -> IntervalPhysicsResult: + return IntervalPhysicsResult( + new_soc_kwh=min(capacity_kwh, soc), + grid_import_kwh=grid_import, + grid_export_kwh=grid_export, + battery_charge_kwh=battery_charge, + battery_discharge_kwh=battery_discharge, + grid_charge_kwh=grid_charge_raw, + solar_charge_kwh=solar_charge_raw, + ) + + +def _simulate_night_interval( + *, + soc: float, + load_kwh: float, + capacity_kwh: float, + hw_min_capacity_kwh: float, + discharge_efficiency: float, +) -> IntervalPhysicsResult: + grid_import = 0.0 + battery_discharge = 0.0 + available_battery = max(0.0, soc - hw_min_capacity_kwh) + usable_from_battery = available_battery * discharge_efficiency + + covered_by_battery = min(load_kwh, usable_from_battery) + if covered_by_battery > 0.001: + battery_discharge = covered_by_battery / discharge_efficiency + soc -= battery_discharge + + remaining = load_kwh - covered_by_battery + if remaining > 0.001: + grid_import += remaining + + soc = max(hw_min_capacity_kwh, soc) + return _build_result( + soc=soc, + capacity_kwh=capacity_kwh, + grid_import=grid_import, + grid_export=0.0, + battery_charge=0.0, + battery_discharge=battery_discharge, + grid_charge_raw=0.0, + solar_charge_raw=0.0, + ) + + +def _simulate_home_i( + *, + soc: float, + solar_kwh: float, + load_kwh: float, + capacity_kwh: float, + hw_min_capacity_kwh: float, + charge_efficiency: float, + discharge_efficiency: float, +) -> IntervalPhysicsResult: + grid_import = 0.0 + grid_export = 0.0 + battery_charge = 0.0 + battery_discharge = 0.0 + grid_charge_raw = 0.0 + solar_charge_raw = 0.0 + + if solar_kwh >= load_kwh: + surplus = solar_kwh - load_kwh + battery_space = max(0.0, capacity_kwh - soc) + charge_amount = min(surplus, battery_space) + if charge_amount > 0.001: + battery_charge = charge_amount + solar_charge_raw = charge_amount + soc = min(capacity_kwh, soc + charge_amount * charge_efficiency) + remaining_surplus = surplus - charge_amount + if remaining_surplus > 0.001: + grid_export += remaining_surplus + else: + deficit = load_kwh - solar_kwh + available_battery = max(0.0, soc - hw_min_capacity_kwh) + usable_from_battery = available_battery * discharge_efficiency + + covered_by_battery = min(deficit, usable_from_battery) + if covered_by_battery > 0.001: + battery_discharge = covered_by_battery / discharge_efficiency + soc -= battery_discharge + + remaining_deficit = deficit - covered_by_battery + if remaining_deficit > 0.001: + grid_import += remaining_deficit + + soc = max(hw_min_capacity_kwh, soc) + + return _build_result( + soc=soc, + capacity_kwh=capacity_kwh, + grid_import=grid_import, + grid_export=grid_export, + battery_charge=battery_charge, + battery_discharge=battery_discharge, + grid_charge_raw=grid_charge_raw, + solar_charge_raw=solar_charge_raw, + ) + + +def _simulate_home_ii( + *, + soc: float, + solar_kwh: float, + load_kwh: float, + capacity_kwh: float, + charge_efficiency: float, +) -> IntervalPhysicsResult: + grid_import = 0.0 + grid_export = 0.0 + battery_charge = 0.0 + grid_charge_raw = 0.0 + solar_charge_raw = 0.0 + + if solar_kwh >= load_kwh: + surplus = solar_kwh - load_kwh + battery_space = max(0.0, capacity_kwh - soc) + charge_amount = min(surplus, battery_space) + if charge_amount > 0.001: + battery_charge = charge_amount + solar_charge_raw = charge_amount + soc = min(capacity_kwh, soc + charge_amount * charge_efficiency) + remaining_surplus = surplus - charge_amount + if remaining_surplus > 0.001: + grid_export += remaining_surplus + else: + grid_import += load_kwh - solar_kwh + + return _build_result( + soc=soc, + capacity_kwh=capacity_kwh, + grid_import=grid_import, + grid_export=grid_export, + battery_charge=battery_charge, + battery_discharge=0.0, + grid_charge_raw=grid_charge_raw, + solar_charge_raw=solar_charge_raw, + ) + + +def _simulate_home_iii( + *, + soc: float, + solar_kwh: float, + load_kwh: float, + capacity_kwh: float, + charge_efficiency: float, +) -> IntervalPhysicsResult: + grid_import = load_kwh + grid_export = 0.0 + battery_charge = 0.0 + grid_charge_raw = 0.0 + solar_charge_raw = 0.0 + + battery_space = max(0.0, capacity_kwh - soc) + charge_amount = min(solar_kwh, battery_space) + if charge_amount > 0.001: + battery_charge = charge_amount + solar_charge_raw = charge_amount + soc = min(capacity_kwh, soc + charge_amount * charge_efficiency) + remaining_solar = solar_kwh - charge_amount + if remaining_solar > 0.001: + grid_export += remaining_solar + + return _build_result( + soc=soc, + capacity_kwh=capacity_kwh, + grid_import=grid_import, + grid_export=grid_export, + battery_charge=battery_charge, + battery_discharge=0.0, + grid_charge_raw=grid_charge_raw, + solar_charge_raw=solar_charge_raw, + ) + + +def _simulate_home_ups( + *, + soc: float, + solar_kwh: float, + load_kwh: float, + capacity_kwh: float, + charge_efficiency: float, + home_charge_rate_kwh_15min: float, +) -> IntervalPhysicsResult: + grid_import = 0.0 + grid_export = 0.0 + battery_charge = 0.0 + grid_charge_raw = 0.0 + solar_charge_raw = 0.0 + + battery_space = max(0.0, capacity_kwh - soc) + + # Solar -> battery (no rate limit) + solar_to_battery = min(solar_kwh, battery_space) + + # Grid -> battery (rate-limited) + remaining_space = battery_space - solar_to_battery + grid_to_battery = min(home_charge_rate_kwh_15min, remaining_space) + + total_charge = solar_to_battery + grid_to_battery + if total_charge > 0.001: + battery_charge = total_charge + grid_charge_raw = grid_to_battery + solar_charge_raw = solar_to_battery + soc = min(capacity_kwh, soc + total_charge * charge_efficiency) + + grid_import += load_kwh + grid_to_battery + + remaining_solar = solar_kwh - solar_to_battery + if remaining_solar > 0.001: + grid_export += remaining_solar + + return _build_result( + soc=soc, + capacity_kwh=capacity_kwh, + grid_import=grid_import, + grid_export=grid_export, + battery_charge=battery_charge, + battery_discharge=0.0, + grid_charge_raw=grid_charge_raw, + solar_charge_raw=solar_charge_raw, + ) diff --git a/custom_components/oig_cloud/pricing/__init__.py b/custom_components/oig_cloud/pricing/__init__.py new file mode 100644 index 00000000..e8a4b592 --- /dev/null +++ b/custom_components/oig_cloud/pricing/__init__.py @@ -0,0 +1 @@ +"""Spot and fixed pricing sensors and helpers.""" diff --git a/custom_components/oig_cloud/pricing/spot_price_15min.py b/custom_components/oig_cloud/pricing/spot_price_15min.py new file mode 100644 index 00000000..68deab86 --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_15min.py @@ -0,0 +1,163 @@ +"""Senzory pro spotové ceny elektřiny z OTE (spot 15min).""" + +import logging +from datetime import datetime +from typing import Any, Dict, Optional + +from homeassistant.config_entries import ConfigEntry + +from ..pricing.spot_price_15min_base import BasePrice15MinSensor + +_LOGGER = logging.getLogger(__name__) + + +class SpotPrice15MinSensor(BasePrice15MinSensor): + """Senzor pro aktuální spotovou cenu s 15minutovým intervalem včetně finální ceny.""" + + _log_label = "15min spot price" + + def __init__( + self, + coordinator: Any, + entry: ConfigEntry, + sensor_type: str, + device_info: Dict[str, Any], + ) -> None: + super().__init__(coordinator, entry, sensor_type, device_info) + self._data_hash: Optional[str] = None + + def _calculate_interval_price( + self, spot_price_czk: float, target_datetime: datetime + ) -> float: + return self._calculate_final_price_15min(spot_price_czk, target_datetime) + + def _build_attributes( + self, + *, + now: datetime, + current_interval: int, + current_price: Optional[float], + next_price: Optional[float], + next_update: datetime, + future_prices: list[float], + ) -> Dict[str, Any]: + return { + "current_datetime": now.strftime("%Y-%m-%d %H:%M"), + "source": "OTE_WSDL_API_QUARTER_HOUR", + "interval_type": "QUARTER_HOUR", + "current_interval": current_interval, + "current_price": current_price, + "next_price": next_price, + "next_update": next_update.isoformat(), + "current_tariff": self._get_tariff_for_datetime(now), + "intervals_count": len(future_prices), + "last_update": ( + self._last_update.isoformat() if self._last_update else None + ), + "price_min": round(min(future_prices), 2) if future_prices else None, + "price_max": round(max(future_prices), 2) if future_prices else None, + "price_avg": ( + round(sum(future_prices) / len(future_prices), 2) + if future_prices + else None + ), + "currency": "CZK/kWh", + "api_endpoint": ( + f"/api/oig_cloud/spot_prices/{self._resolve_box_id()}/intervals?type=spot" + ), + "api_note": "Full intervals data available via API endpoint (reduces sensor size by 95%)", + } + + def _get_tariff_for_datetime(self, target_datetime: datetime) -> str: + """Získat tarif (VT/NT) pro daný datetime - kopie z analytics sensoru.""" + dual_tariff_enabled = self._entry.options.get("dual_tariff_enabled", True) + if not dual_tariff_enabled: + return "VT" + + vt_hours = self._parse_tariff_times( + self._entry.options.get("vt_hours", "") + ) + if not vt_hours: + return "VT" + + hour = target_datetime.hour + return "VT" if hour in vt_hours else "NT" + + def _parse_tariff_times(self, time_str: str) -> list[int]: + """Parse tariff times string to list of hours.""" + if not time_str: + return [] + try: + return [int(x.strip()) for x in time_str.split(",") if x.strip()] + except ValueError: + return [] + + def _calculate_final_price_15min( + self, spot_price_czk: float, target_datetime: datetime + ) -> float: + """Vypočítat finální cenu včetně obchodních a distribučních poplatků a DPH.""" + options = self._entry.options + + pricing_model = options.get("spot_pricing_model", "percentage") + positive_fee_percent = options.get("spot_positive_fee_percent", 15.0) + negative_fee_percent = options.get("spot_negative_fee_percent", 9.0) + fixed_fee_mwh = options.get("spot_fixed_fee_mwh", 0.0) + distribution_fee_vt_kwh = options.get("distribution_fee_vt_kwh", 1.50) + distribution_fee_nt_kwh = options.get("distribution_fee_nt_kwh", 1.20) + vat_rate = options.get("vat_rate", 21.0) + + if pricing_model == "percentage": + if spot_price_czk >= 0: + commercial_price = spot_price_czk * (1 + positive_fee_percent / 100.0) + else: + commercial_price = spot_price_czk * (1 - negative_fee_percent / 100.0) + elif pricing_model == "fixed_prices": + fixed_price_vt = options.get("fixed_commercial_price_vt", 4.50) + fixed_price_nt = options.get("fixed_commercial_price_nt", fixed_price_vt) + current_tariff = self._get_tariff_for_datetime(target_datetime) + commercial_price = ( + fixed_price_vt if current_tariff == "VT" else fixed_price_nt + ) + else: + fixed_fee_kwh = fixed_fee_mwh / 1000.0 + commercial_price = spot_price_czk + fixed_fee_kwh + + current_tariff = self._get_tariff_for_datetime(target_datetime) + distribution_fee = ( + distribution_fee_vt_kwh + if current_tariff == "VT" + else distribution_fee_nt_kwh + ) + + price_without_vat = commercial_price + distribution_fee + return round(price_without_vat * (1 + vat_rate / 100.0), 2) + + @property + def state(self) -> Optional[float]: + """Aktuální finální cena pro 15min interval včetně distribuce a DPH.""" + if self._cached_state is not None or self._cached_attributes: + return self._cached_state + return self._calculate_current_state() + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Cached attributes to avoid expensive work on every state update.""" + if self._cached_attributes: + return self._cached_attributes + return self._calculate_attributes() + + @property + def unique_id(self) -> str: + """Jedinečné ID senzoru.""" + box_id = self._resolve_box_id() + return f"oig_cloud_{box_id}_{self._sensor_type}" + + @property + def device_info(self) -> Dict[str, Any]: + """Vrátit analytics device info.""" + return self._analytics_device_info + + @property + def should_poll(self) -> bool: + """Nepoužívat polling - máme vlastní scheduler.""" + return False diff --git a/custom_components/oig_cloud/pricing/spot_price_15min_base.py b/custom_components/oig_cloud/pricing/spot_price_15min_base.py new file mode 100644 index 00000000..f2781053 --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_15min_base.py @@ -0,0 +1,357 @@ +"""Shared base for 15-minute spot price sensors.""" + +from __future__ import annotations + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import callback +from homeassistant.helpers.event import async_track_time_change +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.util.dt import now as dt_now + +from ..api.ote_api import OteApi +from ..entities.base_sensor import OigCloudSensor +from ..sensors.SENSOR_TYPES_SPOT import SENSOR_TYPES_SPOT +from .spot_price_shared import ( + DAILY_FETCH_HOUR, + DAILY_FETCH_MINUTE, + _ote_cache_path, + _resolve_box_id_from_coordinator, + get_retry_delay_seconds, + schedule_daily_fetch, + schedule_retry_task, +) + +_LOGGER = logging.getLogger(__name__) + + +class BasePrice15MinSensor(OigCloudSensor, RestoreEntity): + """Base sensor for 15-minute spot/export pricing sensors.""" + + _log_label: str = "15min price" + + def __init__( + self, + coordinator: Any, + entry: ConfigEntry, + sensor_type: str, + device_info: Dict[str, Any], + ) -> None: + super().__init__(coordinator, sensor_type) + + self._sensor_type: str = sensor_type + self._sensor_config: Dict[str, Any] = SENSOR_TYPES_SPOT.get(sensor_type, {}) + self._entry: ConfigEntry = entry + self._analytics_device_info: Dict[str, Any] = device_info + cache_path = _ote_cache_path(coordinator.hass) + self._ote_api: OteApi = OteApi(cache_path=cache_path) + + self._spot_data_15min: Dict[str, Any] = {} + self._last_update: Optional[datetime] = None + self._track_time_interval_remove: Optional[Any] = None + self._track_15min_remove: Optional[Any] = None + self._retry_remove: Optional[Any] = None + self._retry_attempt: int = 0 + self._cached_state: Optional[float] = None + self._cached_attributes: Dict[str, Any] = {} + + def _resolve_box_id(self) -> str: + return _resolve_box_id_from_coordinator(self.coordinator) + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - nastavit tracking a stáhnout data.""" + await super().async_added_to_hass() + await self._ote_api.async_load_cached_spot_prices() + + _LOGGER.info( + "[%s] %s sensor added to HA - starting data fetch", + self.entity_id, + self._log_label, + ) + + await self._restore_data() + self._setup_daily_tracking() + self._setup_15min_tracking() + + now = dt_now() + current_minutes = now.hour * 60 + now.minute + daily_update_time = DAILY_FETCH_HOUR * 60 + DAILY_FETCH_MINUTE + + if current_minutes < daily_update_time: + try: + await self._fetch_spot_data_with_retry() + except Exception as e: # pragma: no cover - safety net + _LOGGER.error("[%s] Error in initial data fetch: %s", self.entity_id, e) + + async def _restore_data(self) -> None: + """Obnovení dat z uloženého stavu.""" + old_state = await self.async_get_last_state() + if old_state and old_state.attributes: + try: + if "last_update" in old_state.attributes: + self._last_update = datetime.fromisoformat( + old_state.attributes["last_update"] + ) + _LOGGER.info("[%s] Restored %s data", self.entity_id, self._log_label) + except Exception as e: + _LOGGER.error("[%s] Error restoring data: %s", self.entity_id, e) + + @callback + def _handle_coordinator_update(self) -> None: + """Sync 15min spot data z coordinatoru.""" + try: + if self.coordinator.data and "spot_prices" in self.coordinator.data: + spot_data = self.coordinator.data["spot_prices"] + if spot_data: + self._spot_data_15min = spot_data + self._last_update = dt_now() + self._refresh_cached_state_and_attributes() + intervals = len(spot_data.get("prices15m_czk_kwh", {})) + _LOGGER.debug( + "[%s] Synced %s from coordinator (%s intervals)", + self.entity_id, + self._log_label, + intervals, + ) + except Exception as err: + _LOGGER.debug( + "[%s] Failed to sync %s from coordinator: %s", + self.entity_id, + self._log_label, + err, + ) + + super()._handle_coordinator_update() + + def _setup_daily_tracking(self) -> None: + """Nastavení denního stahování dat ve 13:00 s retry.""" + self._track_time_interval_remove = schedule_daily_fetch( + self.hass, self._fetch_spot_data_with_retry + ) + + def _setup_15min_tracking(self) -> None: + """Nastavení aktualizace každých 15 minut (00, 15, 30, 45).""" + self._track_15min_remove = async_track_time_change( + self.hass, + self._update_current_interval, + minute=[0, 15, 30, 45], + second=5, + ) + + async def _update_current_interval(self, *_: Any) -> None: + """Aktualizace stavu senzoru při změně 15min intervalu.""" + _LOGGER.debug("[%s] Updating current 15min interval", self.entity_id) + self._refresh_cached_state_and_attributes() + self.async_write_ha_state() + if self.hass and self.coordinator: + self.hass.async_create_task(self.coordinator.async_request_refresh()) + + async def async_will_remove_from_hass(self) -> None: + """Cleanup při odstranění senzoru.""" + await super().async_will_remove_from_hass() + if self._track_time_interval_remove: + self._track_time_interval_remove() + if self._track_15min_remove: + self._track_15min_remove() + self._cancel_retry_timer() + await self._on_remove_hook() + + async def _on_remove_hook(self) -> None: + """Optional hook for subclasses.""" + + async def _fetch_spot_data_with_retry(self, *_: Any) -> None: + """Jednorázový fetch + plánování dalších pokusů až do úspěchu.""" + success = await self._do_fetch_15min_data() + if success: + self._retry_attempt = 0 + self._cancel_retry_timer() + else: + self._schedule_retry(self._do_fetch_15min_data) + + async def _do_fetch_15min_data(self) -> bool: + """Stáhne data, vrátí True při úspěchu, jinak False.""" + try: + _LOGGER.info( + "[%s] Fetching %s - attempt %s", + self.entity_id, + self._log_label, + self._retry_attempt + 1, + ) + + spot_data = await self._ote_api.get_spot_prices() + + if spot_data and "prices15m_czk_kwh" in spot_data: + self._spot_data_15min = spot_data + self._last_update = dt_now() + self._refresh_cached_state_and_attributes() + + intervals_count = len(spot_data.get("prices15m_czk_kwh", {})) + _LOGGER.info( + "[%s] %s successful - %s intervals", + self.entity_id, + self._log_label, + intervals_count, + ) + + self.async_write_ha_state() + await self.coordinator.async_request_refresh() + + if self._ote_api._is_cache_valid(): + return True + _LOGGER.info( + "[%s] Data received but incomplete, will retry", + self.entity_id, + ) + return False + + _LOGGER.warning( + "[%s] No %s on attempt %s", + self.entity_id, + self._log_label, + self._retry_attempt + 1, + ) + except Exception as e: # pragma: no cover - safety net + _LOGGER.error( + "[%s] Error fetching %s on attempt %s: %s", + self.entity_id, + self._log_label, + self._retry_attempt + 1, + e, + ) + + return False + + def _schedule_retry(self, fetch_coro) -> None: + """Naplánuje další pokus podle retry schématu.""" + delay = get_retry_delay_seconds(self._retry_attempt) + self._retry_attempt += 1 + _LOGGER.info( + "[%s] Retrying in %s minutes (attempt %s)", + self.entity_id, + delay // 60, + self._retry_attempt, + ) + + self._cancel_retry_timer() + self._retry_remove = schedule_retry_task( + self.hass, fetch_coro, delay, _LOGGER, self.entity_id + ) + + def _cancel_retry_timer(self) -> None: + """Zruší naplánovaný retry task, pokud existuje.""" + if self._retry_remove: + if not self._retry_remove.done(): + self._retry_remove.cancel() + self._retry_remove = None + + def _get_current_interval_index(self, now: datetime) -> int: + """Vrátí index 15min intervalu (0-95) pro daný čas.""" + return OteApi.get_current_15min_interval(now) + + def _refresh_cached_state_and_attributes(self) -> None: + """Recompute cached state/attributes to avoid heavy work in properties.""" + self._cached_state = self._calculate_current_state() + self._cached_attributes = self._calculate_attributes() + self._attr_native_value = self._cached_state + self._attr_extra_state_attributes = self._cached_attributes + + def _calculate_current_state(self) -> Optional[float]: + """Compute current price for the active 15min interval.""" + try: + if not self._spot_data_15min: + return None + + now = dt_now() + interval_index = self._get_current_interval_index(now) + + spot_price_czk = OteApi.get_15min_price_for_interval( + interval_index, self._spot_data_15min, now.date() + ) + if spot_price_czk is None: + return None + + return self._calculate_interval_price(spot_price_czk, now) + + except Exception as e: # pragma: no cover - safety net + _LOGGER.error("[%s] Error computing state: %s", self.entity_id, e) + return None + + def _calculate_attributes(self) -> Dict[str, Any]: + """Compute attributes summary for 15min prices.""" + attrs: Dict[str, Any] = {} + + try: + if ( + not self._spot_data_15min + or "prices15m_czk_kwh" not in self._spot_data_15min + ): + return attrs + + now = dt_now() + current_interval_index = self._get_current_interval_index(now) + prices_15m = self._spot_data_15min["prices15m_czk_kwh"] + + future_prices = [] + current_price: Optional[float] = None + next_price: Optional[float] = None + + for time_key, spot_price_czk in sorted(prices_15m.items()): + dt_naive = datetime.fromisoformat(time_key) + dt = ( + dt_naive.replace(tzinfo=now.tzinfo) + if dt_naive.tzinfo is None + else dt_naive + ) + interval_end = dt + timedelta(minutes=15) + if interval_end <= now: + continue + + price_value = self._calculate_interval_price(spot_price_czk, dt) + future_prices.append(price_value) + + if current_price is None: + current_price = price_value + elif next_price is None: + next_price = price_value + + next_interval = (current_interval_index + 1) % 96 + next_hour = next_interval // 4 + next_minute = (next_interval % 4) * 15 + next_update = now.replace( + hour=next_hour, minute=next_minute, second=0, microsecond=0 + ) + if next_interval == 0: + next_update = next_update + timedelta(days=1) + + attrs = self._build_attributes( + now=now, + current_interval=current_interval_index, + current_price=current_price, + next_price=next_price, + next_update=next_update, + future_prices=future_prices, + ) + except Exception as e: # pragma: no cover - safety net + _LOGGER.error("[%s] Error building attributes: %s", self.entity_id, e) + + return attrs + + def _build_attributes( + self, + *, + now: datetime, + current_interval: int, + current_price: Optional[float], + next_price: Optional[float], + next_update: datetime, + future_prices: list[float], + ) -> Dict[str, Any]: + """Subclasses provide their attribute payload.""" + return {} + + def _calculate_interval_price(self, spot_price_czk: float, target_datetime: datetime) -> float: + """Subclasses provide pricing calculation.""" + raise NotImplementedError diff --git a/custom_components/oig_cloud/pricing/spot_price_export_15min.py b/custom_components/oig_cloud/pricing/spot_price_export_15min.py new file mode 100644 index 00000000..a6635eeb --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_export_15min.py @@ -0,0 +1,120 @@ +"""Senzory pro spotové ceny elektřiny z OTE (export 15min).""" + +import logging +from datetime import datetime +from typing import Any, Dict, Optional + +from homeassistant.config_entries import ConfigEntry + +from ..pricing.spot_price_15min_base import BasePrice15MinSensor + +_LOGGER = logging.getLogger(__name__) + + +class ExportPrice15MinSensor(BasePrice15MinSensor): + """Senzor pro výkupní cenu elektřiny s 15minutovým intervalem (BEZ DPH, BEZ distribuce).""" + + _log_label = "15min export price" + + def __init__( + self, + coordinator: Any, + entry: ConfigEntry, + sensor_type: str, + device_info: Dict[str, Any], + ) -> None: + super().__init__(coordinator, entry, sensor_type, device_info) + + async def _on_remove_hook(self) -> None: + await self._ote_api.close() + + def _calculate_interval_price( + self, spot_price_czk: float, target_datetime: datetime + ) -> float: + return self._calculate_export_price_15min(spot_price_czk, target_datetime) + + def _build_attributes( + self, + *, + now: datetime, + current_interval: int, + current_price: Optional[float], + next_price: Optional[float], + next_update: datetime, + future_prices: list[float], + ) -> Dict[str, Any]: + return { + "current_datetime": now.strftime("%Y-%m-%d %H:%M"), + "source": "OTE_WSDL_API_QUARTER_HOUR", + "interval_type": "QUARTER_HOUR", + "current_interval": current_interval, + "current_price": current_price, + "next_price": next_price, + "next_update": next_update.isoformat(), + "intervals_count": len(future_prices), + "last_update": ( + self._last_update.isoformat() if self._last_update else None + ), + "note": "Export prices WITHOUT VAT and WITHOUT distribution fees", + "price_min": round(min(future_prices), 2) if future_prices else None, + "price_max": round(max(future_prices), 2) if future_prices else None, + "price_avg": ( + round(sum(future_prices) / len(future_prices), 2) + if future_prices + else None + ), + "currency": "CZK/kWh", + "api_endpoint": ( + f"/api/oig_cloud/spot_prices/{self._resolve_box_id()}/intervals?type=export" + ), + "api_note": "Full intervals data available via API endpoint (reduces sensor size by 95%)", + } + + def _calculate_export_price_15min( + self, spot_price_czk: float, target_datetime: datetime + ) -> float: + """Vypočítat výkupní cenu BEZ distribuce a BEZ DPH. + + Výkupní cena = Spotová cena - Poplatek za prodej (% nebo fixní) + """ + options = self._entry.options + + pricing_model: str = options.get("export_pricing_model", "percentage") + export_fee_percent: float = options.get("export_fee_percent", 15.0) + export_fixed_fee_czk: float = options.get("export_fixed_fee_czk", 0.20) + export_fixed_price: float = options.get("export_fixed_price", 2.50) + + if pricing_model == "percentage": + export_price = spot_price_czk * (1 - export_fee_percent / 100.0) + elif pricing_model == "fixed_prices": + export_price = export_fixed_price + else: + export_price = spot_price_czk - export_fixed_fee_czk + + return round(export_price, 2) + + @property + def state(self) -> Optional[float]: + """Aktuální výkupní cena pro 15min interval (BEZ DPH, BEZ distribuce).""" + return self._cached_state + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Cached attributes to avoid expensive work on every state update.""" + return self._cached_attributes + + @property + def unique_id(self) -> str: + """Jedinečné ID senzoru.""" + box_id = self._resolve_box_id() + return f"oig_cloud_{box_id}_{self._sensor_type}" + + @property + def device_info(self) -> Dict[str, Any]: + """Vrátit analytics device info.""" + return self._analytics_device_info + + @property + def should_poll(self) -> bool: + """Nepoužívat polling - máme vlastní scheduler.""" + return False diff --git a/custom_components/oig_cloud/pricing/spot_price_hourly.py b/custom_components/oig_cloud/pricing/spot_price_hourly.py new file mode 100644 index 00000000..6b89e5c9 --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_hourly.py @@ -0,0 +1,463 @@ +"""Senzory pro spotové ceny elektřiny z OTE (spot hourly).""" + +import logging +from datetime import datetime, timedelta +from typing import Any, Dict, Optional, Union + +from homeassistant.core import callback +from homeassistant.helpers.restore_state import RestoreEntity +from homeassistant.util.dt import now as dt_now + +from ..api.ote_api import OteApi +from ..entities.base_sensor import OigCloudSensor +from ..sensors.SENSOR_TYPES_SPOT import SENSOR_TYPES_SPOT +from .spot_price_shared import ( + DAILY_FETCH_HOUR, + DAILY_FETCH_MINUTE, + _ote_cache_path, + _resolve_box_id_from_coordinator, + get_retry_delay_seconds, + schedule_daily_fetch, + schedule_retry_task, +) + +_LOGGER = logging.getLogger(__name__) + + +class SpotPriceSensor(OigCloudSensor, RestoreEntity): + """Senzor pro spotové ceny elektřiny.""" + + def __init__(self, coordinator: Any, sensor_type: str) -> None: + super().__init__(coordinator, sensor_type) + + self._sensor_type = sensor_type + self._sensor_config = SENSOR_TYPES_SPOT.get(sensor_type, {}) + cache_path = _ote_cache_path(coordinator.hass) + self._ote_api = OteApi(cache_path=cache_path) + + self._spot_data: Dict[str, Any] = {} + self._last_update: Optional[datetime] = None + self._track_time_interval_remove = None + self._retry_remove: Optional[Any] = None + self._retry_attempt: int = 0 + + @callback + def _handle_coordinator_update(self) -> None: + """Handle updated data from the coordinator.""" + # OPRAVA: Číst spot price data z coordinatoru + if self.coordinator.data and "spot_prices" in self.coordinator.data: + self._spot_data = self.coordinator.data["spot_prices"] + self._last_update = dt_now() + _LOGGER.debug( + f"[{self.entity_id}] Updated spot price data from coordinator: " + f"{self._spot_data.get('hours_count', 0)} hours" + ) + super()._handle_coordinator_update() + + async def async_added_to_hass(self) -> None: + """Při přidání do HA - nastavit tracking a stáhnout data.""" + await super().async_added_to_hass() + + # Load cached OTE spot prices without blocking the event loop + await self._ote_api.async_load_cached_spot_prices() + + _LOGGER.info( + f"[{self.entity_id}] Spot price sensor {self._sensor_type} added to HA - starting data fetch" + ) + + # Obnovit data ze stavu + await self._restore_data() + + # Nastavit pravidelné stahování + self._setup_time_tracking() + + # Okamžitě stáhnout aktuální data, pokud _setup_time_tracking už nespustil fetch + now = dt_now() + current_minutes = now.hour * 60 + now.minute + daily_update_time = DAILY_FETCH_HOUR * 60 + DAILY_FETCH_MINUTE + + # Pokud je >= 13:00, _setup_time_tracking už spustil fetch, nevoláme druhý + if current_minutes < daily_update_time: + try: + await self._fetch_spot_data_with_retry() + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error in initial data fetch: {e}") + + async def _restore_data(self) -> None: + """Obnovení dat z uloženého stavu.""" + old_state = await self.async_get_last_state() + if old_state and old_state.attributes: + try: + if "last_update" in old_state.attributes: + self._last_update = datetime.fromisoformat( + old_state.attributes["last_update"] + ) + _LOGGER.info(f"[{self.entity_id}] Restored spot price data") + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error restoring data: {e}") + + def _setup_time_tracking(self) -> None: + """Nastavení pravidelného stahování dat - jednou denně po 13:00 s retry logikou.""" + self._track_time_interval_remove = schedule_daily_fetch( + self.hass, self._fetch_spot_data_with_retry + ) + + async def async_will_remove_from_hass(self) -> None: + """Cleanup při odstranění senzoru.""" + await super().async_will_remove_from_hass() + + if self._track_time_interval_remove: + self._track_time_interval_remove() + + self._cancel_retry_timer() + await self._ote_api.close() + + async def _fetch_spot_data_with_retry(self, *_: Any) -> None: + """Jednorázový fetch + plánování dalších pokusů až do úspěchu.""" + success = await self._do_fetch_spot_data() + if success: + self._retry_attempt = 0 + self._cancel_retry_timer() + else: + self._schedule_retry(self._do_fetch_spot_data) + + async def _do_fetch_spot_data(self) -> bool: + """Stáhne data, vrátí True při úspěchu, jinak False.""" + try: + _LOGGER.info( + f"[{self.entity_id}] Fetching spot data - attempt {self._retry_attempt + 1}" + ) + + spot_data = await self._ote_api.get_spot_prices() + + if spot_data and self._validate_spot_data(spot_data): + self._spot_data = spot_data + self._last_update = dt_now() + + hours_count = spot_data.get("hours_count", 0) + tomorrow_available = bool(spot_data.get("tomorrow_stats")) + _LOGGER.info( + f"[{self.entity_id}] Spot data successful - {hours_count} hours, tomorrow: {'yes' if tomorrow_available else 'no'}" + ) + + # Aktualizovat stav senzoru + self.async_write_ha_state() + + # Úspěch jen pokud máme všechna potřebná data (cache je validní) + if self._ote_api._is_cache_valid(): + return True + else: + _LOGGER.info( + f"[{self.entity_id}] Data received but incomplete (missing tomorrow after 13:00), will retry" + ) + return False + + _LOGGER.warning( + f"[{self.entity_id}] Incomplete spot data received on attempt {self._retry_attempt + 1}" + ) + + except Exception as e: + _LOGGER.error( + f"[{self.entity_id}] Error fetching spot data on attempt {self._retry_attempt + 1}: {e}" + ) + + return False + + def _schedule_retry(self, fetch_coro) -> None: + """Naplánuje další pokus podle retry schématu.""" + delay = get_retry_delay_seconds(self._retry_attempt) + self._retry_attempt += 1 + _LOGGER.info( + f"[{self.entity_id}] Retrying spot data in {delay // 60} minutes (attempt {self._retry_attempt})" + ) + + self._cancel_retry_timer() + self._retry_remove = schedule_retry_task( + self.hass, + fetch_coro, + delay, + _LOGGER, + self.entity_id, + ) + + def _cancel_retry_timer(self) -> None: + """Zruší naplánovaný retry task, pokud existuje.""" + if self._retry_remove: + if not self._retry_remove.done(): + self._retry_remove.cancel() + self._retry_remove = None + + def _validate_spot_data(self, data: Dict[str, Any]) -> bool: + """Validace že data jsou kompletní a použitelná.""" + if not data: + return False + + prices = data.get("prices_czk_kwh", {}) + if not prices: + return False + + # Kontrola že máme alespoň nějaká data pro dnes + today = dt_now().date() + today_str = today.strftime("%Y-%m-%d") + + today_hours = [k for k in prices.keys() if k.startswith(today_str)] + + # Měli bychom mít alespoň 12 hodin dat (polovina dne) + if len(today_hours) < 12: + _LOGGER.debug( + f"[{self.entity_id}] Insufficient data - only {len(today_hours)} hours for today" + ) + return False + + # Kontrola že ceny nejsou nulové + valid_prices = [v for v in prices.values() if v is not None and v > 0] + if len(valid_prices) < len(today_hours) * 0.8: # 80% cen musí být validních + _LOGGER.debug(f"[{self.entity_id}] Too many invalid prices") + return False + + return True + + # Legacy metoda - přesměrování na novou retry logiku + async def _fetch_spot_data(self, *_: Any) -> None: + """Legacy metoda - přesměrování na novou retry logiku.""" + await self._fetch_spot_data_with_retry() + + @property + def name(self) -> str: + """Jméno senzoru.""" + box_id = _resolve_box_id_from_coordinator(self.coordinator) + base = self._sensor_config.get("name", self._sensor_type) + return f"OIG {box_id} {base}" if box_id != "unknown" else f"OIG {base}" + + @property + def icon(self) -> str: + """Ikona senzoru.""" + return self._sensor_config.get("icon", "mdi:flash") + + @property + def unit_of_measurement(self) -> Optional[str]: + """Jednotka měření.""" + return self._sensor_config.get("unit_of_measurement") + + @property + def device_class(self) -> Optional[str]: + """Třída zařízení.""" + return self._sensor_config.get("device_class") + + @property + def state_class(self) -> Optional[str]: + """Třída stavu.""" + return self._sensor_config.get("state_class") + + @property + def state(self) -> Optional[Union[float, int]]: + """Hlavní stav senzoru - aktuální spotová cena.""" + try: + if self._sensor_type == "spot_price_current_czk_kwh": + return self._get_current_price_czk_kwh() + elif self._sensor_type == "spot_price_current_eur_mwh": + return self._get_current_price_eur_mwh() + elif self._sensor_type == "spot_price_tomorrow_avg": + return self._get_tomorrow_average() + elif self._sensor_type == "spot_price_today_min": + return self._get_today_min() + elif self._sensor_type == "spot_price_today_max": + return self._get_today_max() + elif self._sensor_type == "spot_price_today_avg": + return self._get_today_average() + elif self._sensor_type == "spot_price_hourly_all": + return self._get_current_price_czk_kwh() + except Exception as e: + _LOGGER.error(f"[{self.entity_id}] Error getting state: {e}") + return None + + return None + + def _get_current_price_czk_kwh(self) -> Optional[float]: + """Získání aktuální ceny v CZK/kWh.""" + if not self._spot_data or "prices_czk_kwh" not in self._spot_data: + return None + + now = dt_now() + current_hour_key = f"{now.strftime('%Y-%m-%d')}T{now.hour:02d}:00:00" + + return self._spot_data["prices_czk_kwh"].get(current_hour_key) + + def _get_current_price_eur_mwh(self) -> Optional[float]: + """Získání aktuální ceny v EUR/MWh.""" + if not self._spot_data or "prices_eur_mwh" not in self._spot_data: + return None + + now = dt_now() + current_hour_key = f"{now.strftime('%Y-%m-%d')}T{now.hour:02d}:00:00" + + return self._spot_data["prices_eur_mwh"].get(current_hour_key) + + def _get_tomorrow_average(self) -> Optional[float]: + """Získání průměrné ceny pro zítřek.""" + if ( + self._spot_data + and "tomorrow_stats" in self._spot_data + and self._spot_data["tomorrow_stats"] + ): + return self._spot_data["tomorrow_stats"].get("avg_czk") + return None + + def _get_today_average(self) -> Optional[float]: + """Průměrná cena dnes.""" + if self._spot_data and "today_stats" in self._spot_data: + return self._spot_data["today_stats"].get("avg_czk") + return None + + def _get_today_min(self) -> Optional[float]: + """Minimální cena dnes.""" + if self._spot_data and "today_stats" in self._spot_data: + return self._spot_data["today_stats"].get("min_czk") + return None + + def _get_today_max(self) -> Optional[float]: + """Maximální cena dnes.""" + if self._spot_data and "today_stats" in self._spot_data: + return self._spot_data["today_stats"].get("max_czk") + return None + + @property + def extra_state_attributes(self) -> Dict[str, Any]: + """Dodatečné atributy senzoru.""" + attrs = {} + + if self._sensor_type == "spot_price_current_czk_kwh": + # Aktuální cena + denní přehled + if self._spot_data: + attrs.update( + { + "today_avg_czk_kwh": self._get_today_average(), + "today_min_czk_kwh": self._get_today_min(), + "today_max_czk_kwh": self._get_today_max(), + "tomorrow_avg_czk_kwh": self._get_tomorrow_average(), + } + ) + + # Hodinové ceny pro dnes a zítřek + attrs.update(self._get_hourly_prices()) + + elif self._sensor_type == "spot_price_hourly_all": + # Všechny dostupné hodinové ceny + if self._spot_data: + attrs.update( + { + "today_avg_czk_kwh": self._get_today_average(), + "today_min_czk_kwh": self._get_today_min(), + "today_max_czk_kwh": self._get_today_max(), + "tomorrow_avg_czk_kwh": self._get_tomorrow_average(), + "total_hours_available": len( + self._spot_data.get("prices_czk_kwh", {}) + ), + } + ) + + # Všechny hodinové ceny zaokrouhlené na 2 desetinná místa + attrs.update(self._get_all_hourly_prices()) + + # Společné atributy + attrs.update( + { + "last_update": ( + self._last_update.isoformat() if self._last_update else None + ), + "source": "spotovaelektrina.cz", + } + ) + + return attrs + + def _get_hourly_prices(self) -> Dict[str, Any]: + """Hodinové ceny - jen dnes/zítřek pro UI.""" + if not self._spot_data or "prices_czk_kwh" not in self._spot_data: + return {} + + # Jen základní data pro UI grafy + now = dt_now() + today_str = now.strftime("%Y-%m-%d") + tomorrow_str = (now + timedelta(days=1)).strftime("%Y-%m-%d") + + today_prices = {} + tomorrow_prices = {} + + for time_key, price in self._spot_data["prices_czk_kwh"].items(): + if time_key.startswith(today_str): + hour = time_key[11:16] # HH:MM + today_prices[hour] = round(price, 3) + elif time_key.startswith(tomorrow_str) and len(tomorrow_prices) < 24: + hour = time_key[11:16] # HH:MM + tomorrow_prices[hour] = round(price, 3) + + return { + "today_prices": today_prices, + "tomorrow_prices": tomorrow_prices, + "next_hour_price": self._get_next_hour_price(), + } + + def _get_next_hour_price(self) -> Optional[float]: + """Cena v příští hodině pro rychlé rozhodování.""" + if not self._spot_data or "prices_czk_kwh" not in self._spot_data: + return None + + now = dt_now() + next_hour = now.replace(minute=0, second=0, microsecond=0) + timedelta(hours=1) + next_hour_key = next_hour.strftime("%Y-%m-%dT%H:00:00") + + return self._spot_data["prices_czk_kwh"].get(next_hour_key) + + def _get_all_hourly_prices(self) -> Dict[str, Any]: + """Pouze základní statistiky - necháme historii na recorder.""" + if not self._spot_data or "prices_czk_kwh" not in self._spot_data: + return {} + + prices = list(self._spot_data["prices_czk_kwh"].values()) + + if not prices: + return {} + + return { + "price_summary": { + "min": round(min(prices), 3), + "max": round(max(prices), 3), + "avg": round(sum(prices) / len(prices), 3), + "current": self._get_current_price_czk_kwh(), + "next": self._get_next_hour_price(), + }, + "data_info": { + "hours_available": len(prices), + "last_update": ( + self._last_update.isoformat() if self._last_update else None + ), + "coverage": "today + tomorrow" if len(prices) > 24 else "today only", + }, + } + + @property + def unique_id(self) -> str: + """Jedinečné ID senzoru.""" + box_id = _resolve_box_id_from_coordinator(self.coordinator) + return f"oig_cloud_{box_id}_{self._sensor_type}" + + @property + def device_info(self) -> Dict[str, Any]: + """Informace o zařízení.""" + box_id = _resolve_box_id_from_coordinator(self.coordinator) + return { + "identifiers": {("oig_cloud", box_id)}, + "name": f"ČEZ Battery Box {box_id}", + "manufacturer": "OIG", + "model": "Spot Price Analytics", + } + + @property + def should_poll(self) -> bool: + """Nepoužívat polling - máme vlastní scheduler.""" + return False + + async def async_update(self) -> None: + """Update senzoru.""" + self.async_write_ha_state() diff --git a/custom_components/oig_cloud/pricing/spot_price_sensor.py b/custom_components/oig_cloud/pricing/spot_price_sensor.py new file mode 100644 index 00000000..764923e3 --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_sensor.py @@ -0,0 +1,13 @@ +"""Senzory pro spotové ceny elektřiny z OTE.""" + +from __future__ import annotations + +from .spot_price_15min import SpotPrice15MinSensor +from .spot_price_export_15min import ExportPrice15MinSensor +from .spot_price_hourly import SpotPriceSensor + +__all__ = [ + "ExportPrice15MinSensor", + "SpotPrice15MinSensor", + "SpotPriceSensor", +] diff --git a/custom_components/oig_cloud/pricing/spot_price_shared.py b/custom_components/oig_cloud/pricing/spot_price_shared.py new file mode 100644 index 00000000..c2f84b07 --- /dev/null +++ b/custom_components/oig_cloud/pricing/spot_price_shared.py @@ -0,0 +1,76 @@ +"""Shared helpers for spot price sensors.""" + +from __future__ import annotations + +import asyncio +from typing import Any, Callable + +from homeassistant.helpers.event import async_track_time_change +from homeassistant.util.dt import now as dt_now + +from ..const import OTE_SPOT_PRICE_CACHE_FILE + + +def _ote_cache_path(hass) -> str: + return hass.config.path(".storage", OTE_SPOT_PRICE_CACHE_FILE) + + +def _resolve_box_id_from_coordinator(coordinator: Any) -> str: + """Resolve numeric box_id (never use helper keys like 'spot_prices').""" + try: + from ..entities.base_sensor import resolve_box_id + + return resolve_box_id(coordinator) + except Exception: + return "unknown" + + +# Retry plán: 5, 10, 15, 30 minut a pak každou hodinu +RETRY_DELAYS_SECONDS = [300, 600, 900, 1800] +HOURLY_RETRY_SECONDS = 3600 +# Denní stahování ve 13:00 +DAILY_FETCH_HOUR = 13 +DAILY_FETCH_MINUTE = 0 + + +def schedule_daily_fetch(hass, fetch_coro: Callable[[], Any]) -> Any: + """Schedule daily fetch and run immediately if past the daily publish time.""" + now = dt_now() + current_minutes = now.hour * 60 + now.minute + daily_update_time = DAILY_FETCH_HOUR * 60 + DAILY_FETCH_MINUTE + + if current_minutes >= daily_update_time: + hass.async_create_task(fetch_coro()) + + return async_track_time_change( + hass, + fetch_coro, + hour=DAILY_FETCH_HOUR, + minute=DAILY_FETCH_MINUTE, + second=0, + ) + + +def get_retry_delay_seconds(attempt: int) -> int: + """Get retry delay based on attempt number.""" + if attempt < len(RETRY_DELAYS_SECONDS): + return RETRY_DELAYS_SECONDS[attempt] + return HOURLY_RETRY_SECONDS + + +def schedule_retry_task( + hass, + fetch_coro: Callable[[], Any], + delay: int, + logger, + entity_id: str, +) -> Any: + """Schedule a delayed retry task.""" + + async def _retry_after_delay(): + logger.info("[%s] Retry task waiting %ss...", entity_id, delay) + await asyncio.sleep(delay) + logger.info("[%s] Retry timer fired!", entity_id) + await fetch_coro() + + return hass.async_create_task(_retry_after_delay()) diff --git a/custom_components/oig_cloud/release_const.py b/custom_components/oig_cloud/release_const.py deleted file mode 100644 index 774c0f63..00000000 --- a/custom_components/oig_cloud/release_const.py +++ /dev/null @@ -1,2 +0,0 @@ -COMPONENT_VERSION = "1.0.5-live-data2" -SERVICE_NAME = "oig_cloud" diff --git a/custom_components/oig_cloud/sensor.py b/custom_components/oig_cloud/sensor.py old mode 100644 new mode 100755 index a47fb7f6..4acc221f --- a/custom_components/oig_cloud/sensor.py +++ b/custom_components/oig_cloud/sensor.py @@ -1,92 +1,1699 @@ -"""Sensor platform for OIG Cloud integration.""" +"""Platform pro OIG Cloud senzory.""" + +import asyncio import logging -from typing import Any, Callable, Dict, List, Optional, cast +from typing import Any, Dict, List, Optional from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_platform import AddEntitiesCallback -from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from .const import DOMAIN -from .coordinator import OigCloudDataUpdateCoordinator -from .oig_cloud_computed_sensor import OigCloudComputedSensor -from .oig_cloud_data_sensor import OigCloudDataSensor -from .sensor_types import SENSOR_TYPES +from .entities.base_sensor import resolve_box_id +from .entities.data_source_sensor import OigCloudDataSourceSensor _LOGGER = logging.getLogger(__name__) +try: + _LOGGER.debug("Attempting to import SENSOR_TYPES from sensor_types.py") + from .sensor_types import SENSOR_TYPES + + _LOGGER.debug( + f"Successfully imported SENSOR_TYPES with {len(SENSOR_TYPES)} sensor types" + ) + + # Debug informace o obsahu + for sensor_type, config in SENSOR_TYPES.items(): + _LOGGER.debug( + f"Sensor type: {sensor_type}, category: {config.get('sensor_type_category', 'unknown')}" + ) + +except ImportError as e: + _LOGGER.error(f"Failed to import sensor_types.py: {e}") + _LOGGER.error("This is a critical error - sensor_types.py must exist and be valid") + raise +except AttributeError as e: + _LOGGER.error(f"SENSOR_TYPES not found in sensor_types.py: {e}") + raise +except Exception as e: + _LOGGER.error(f"Unexpected error importing sensor_types.py: {e}") + raise + + +# ============================================================================ +# HELPER FUNCTIONS - Sensor Registry +# ============================================================================ + + +def _get_expected_sensor_types(hass: HomeAssistant, entry: ConfigEntry) -> set[str]: + """ + Vrátí set všech sensor_types které by měly být registrované + podle aktuální konfigurace entry. + + Používá se pro cleanup - senzory které nejsou v tomto setu jsou osiřelé. + """ + expected = set() + + # Získáme statistics_enabled z hass.data + statistics_enabled = hass.data[DOMAIN][entry.entry_id].get( + "statistics_enabled", False + ) + + always_enabled_categories = {"data", "computed", "shield", "notification"} + category_to_option_key: dict[str, str] = { + "extended": "enable_extended_sensors", + "solar_forecast": "enable_solar_forecast", + "pricing": "enable_pricing", + "chmu_warnings": "enable_chmu_warnings", + } + + for sensor_type, config in SENSOR_TYPES.items(): + category = config.get("sensor_type_category") + + # Základní kategorie (vždy aktivní) + if category in always_enabled_categories: + expected.add(sensor_type) + continue + + # Statistics sensors (volitelné) + if category == "statistics" and statistics_enabled: + expected.add(sensor_type) + continue + + # Battery-related sensors (volitelné, společně s battery_prediction) + if category in { + "battery_prediction", + "grid_charging_plan", + "battery_efficiency", + "planner_status", + } and entry.options.get("enable_battery_prediction", False): + expected.add(sensor_type) + continue + + option_key = category_to_option_key.get(str(category)) + if option_key and entry.options.get(option_key, False): + expected.add(sensor_type) + + _LOGGER.debug(f"Expected {len(expected)} sensor types based on configuration") + return expected + + +async def _cleanup_renamed_sensors( + entity_reg, entry: ConfigEntry, expected_sensor_types: set[str] +) -> int: + """ + Smaže senzory které už nejsou v konfiguraci (přejmenované/odstraněné). + + Args: + entity_reg: Entity registry z HA + entry: Config entry + expected_sensor_types: Set očekávaných sensor_types + + Returns: + Počet odstraněných senzorů + """ + await asyncio.sleep(0) + removed = 0 + + deprecated_patterns = [ + "_battery_prediction_", # nahrazeno battery_forecast + "_old_", # obecný pattern pro staré + ] + + from homeassistant.helpers import entity_registry as er + + entries = er.async_entries_for_config_entry(entity_reg, entry.entry_id) + + for entity_entry in entries: + entity_id = entity_entry.entity_id + if not _is_oig_sensor_entity(entity_id): + continue + if _is_boiler_entity(entity_id): + _LOGGER.debug(f"Skipping boiler sensor cleanup: {entity_entry.entity_id}") + continue + + sensor_type = _extract_sensor_type(entity_id) + if not sensor_type: + continue + + if _should_remove_sensor( + entity_id, sensor_type, expected_sensor_types, deprecated_patterns + ): + removed += _remove_entity_entry(entity_reg, entity_entry, sensor_type) + + return removed + + +def _is_oig_sensor_entity(entity_id: str) -> bool: + return entity_id.startswith("sensor.oig_") and len(entity_id.split("_")) >= 3 + + +def _is_boiler_entity(entity_id: str) -> bool: + return "_bojler_" in entity_id or entity_id.startswith("sensor.oig_bojler") + + +def _extract_sensor_type(entity_id: str) -> Optional[str]: + prefix = "sensor.oig_" + if not entity_id.startswith(prefix): + return None + after_prefix = entity_id[len(prefix) :] + parts_after = after_prefix.split("_", 1) + if len(parts_after) > 1: + return parts_after[1] + return None + + +def _should_remove_sensor( + entity_id: str, + sensor_type: str, + expected_sensor_types: set[str], + deprecated_patterns: List[str], +) -> bool: + is_deprecated = any(pattern in entity_id for pattern in deprecated_patterns) + is_expected = sensor_type in expected_sensor_types + return is_deprecated or not is_expected + + +def _remove_entity_entry(entity_reg, entity_entry, sensor_type: str) -> int: + try: + _LOGGER.info( + "🗑️ Removing deprecated/renamed sensor: %s (type: %s)", + entity_entry.entity_id, + sensor_type, + ) + entity_reg.async_remove(entity_entry.entity_id) + return 1 + except Exception as e: + _LOGGER.error("Failed to remove sensor %s: %s", entity_entry.entity_id, e) + return 0 + + +async def _cleanup_removed_devices( + device_reg, entity_reg, entry: ConfigEntry, coordinator +) -> int: + """ + Smaže zařízení pro Battery Boxy které už neexistují v coordinator.data. + + Args: + device_reg: Device registry z HA + entity_reg: Entity registry z HA + entry: Config entry + coordinator: Data coordinator + + Returns: + Počet odstraněných zařízení + """ + await asyncio.sleep(0) + if not coordinator or not coordinator.data: + return 0 + + removed = 0 + current_box_ids = set(coordinator.data.keys()) + + from homeassistant.helpers import device_registry as dr + + devices = dr.async_entries_for_config_entry(device_reg, entry.entry_id) + + for device in devices: + device_box_id = _extract_device_box_id(device) + if not device_box_id or device_box_id in current_box_ids: + continue + if _remove_device_and_entities(device_reg, entity_reg, device, device_box_id): + removed += 1 + + return removed + + +def _extract_device_box_id(device) -> Optional[str]: + for identifier in device.identifiers: + if identifier[0] not in [DOMAIN, "oig_cloud_analytics", "oig_cloud_shield"]: + continue + identifier_value = identifier[1] + if _is_special_device_identifier(identifier_value): + return None + return ( + identifier_value.replace("_shield", "") + .replace("_analytics", "") + .replace("_boiler", "") + ) + return None + + +def _is_special_device_identifier(identifier_value: str) -> bool: + return any( + marker in identifier_value for marker in ("_analytics", "_shield", "_boiler") + ) + + +def _remove_device_and_entities( + device_reg, entity_reg, device, device_box_id: str +) -> bool: + try: + _LOGGER.warning( + "🗑️ Removing device for non-existent box: %s (box_id: %s)", + device.name, + device_box_id, + ) + + from homeassistant.helpers import entity_registry as er + + entities = er.async_entries_for_device(entity_reg, device.id) + for entity in entities: + entity_reg.async_remove(entity.entity_id) + _LOGGER.debug(" Removed entity: %s", entity.entity_id) + + device_reg.async_remove_device(device.id) + return True + except Exception as e: + _LOGGER.error("Failed to remove device %s: %s", device.name, e) + return False + + +async def _cleanup_empty_devices_internal( + device_reg, entity_reg, entry: ConfigEntry +) -> int: + """ + Smaže zařízení která nemají žádné entity. + + Args: + device_reg: Device registry z HA + entity_reg: Entity registry z HA + entry: Config entry + + Returns: + Počet odstraněných zařízení + """ + await asyncio.sleep(0) + removed = 0 + + from homeassistant.helpers import device_registry as dr + from homeassistant.helpers import entity_registry as er + + devices = dr.async_entries_for_config_entry(device_reg, entry.entry_id) + + for device in devices: + entities = er.async_entries_for_device(entity_reg, device.id) + + if not entities: + try: + _LOGGER.info(f"🗑️ Removing empty device: {device.name}") + device_reg.async_remove_device(device.id) + removed += 1 + except Exception as e: + _LOGGER.error(f"Failed to remove empty device {device.name}: {e}") + + return removed + + +async def _cleanup_all_orphaned_entities( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator, + expected_sensor_types: set[str], +) -> int: + """ + Univerzální cleanup pro všechny typy osiřelých entit. + Sjednocuje 3 stávající cleanup funkce. + + Args: + hass: Home Assistant instance + entry: Config entry + coordinator: Data coordinator + expected_sensor_types: Set očekávaných sensor_types podle konfigurace + + Returns: + Celkový počet odstraněných položek (sensors + devices) + """ + from homeassistant.helpers import device_registry as dr + from homeassistant.helpers import entity_registry as er + + _LOGGER.info("🧹 Starting comprehensive cleanup of orphaned entities") + + entity_reg = er.async_get(hass) + device_reg = dr.async_get(hass) + + # 1. Cleanup starých/přejmenovaných senzorů + removed_sensors = await _cleanup_renamed_sensors( + entity_reg, entry, expected_sensor_types + ) + + # 2. Cleanup osiřelých zařízení (neexistující Battery Boxy) + removed_devices = await _cleanup_removed_devices( + device_reg, entity_reg, entry, coordinator + ) + + # 3. Cleanup prázdných zařízení (bez entit) + removed_empty = await _cleanup_empty_devices_internal(device_reg, entity_reg, entry) -async def async_setup_entry( - hass: HomeAssistant, - config_entry: ConfigEntry, - async_add_entities: AddEntitiesCallback + total_removed = removed_sensors + removed_devices + removed_empty + + _LOGGER.info( + f"✅ Cleanup completed: {removed_sensors} deprecated sensors, " + f"{removed_devices} orphaned devices, {removed_empty} empty devices " + f"(total: {total_removed} items removed)" + ) + + return total_removed + + +def get_device_info_for_sensor( + sensor_config: Dict[str, Any], + box_id: str, + main_device_info: Dict[str, Any], + analytics_device_info: Dict[str, Any], + shield_device_info: Dict[str, Any], +) -> Dict[str, Any]: + """ + Vrací správný device_info pro senzor podle device_mapping. + + Args: + sensor_config: Konfigurace senzoru obsahující device_mapping + box_id: ID Battery Boxu + main_device_info: Device info pro hlavní OIG zařízení + analytics_device_info: Device info pro Analytics & Predictions + shield_device_info: Device info pro ServiceShield + + Returns: + Device info dictionary pro senzor + """ + _ = box_id + device_mapping = sensor_config.get("device_mapping", "main") + + if device_mapping == "analytics": + return analytics_device_info + elif device_mapping == "shield": + return shield_device_info + else: # "main" nebo jiná hodnota (fallback na main) + return main_device_info + + +def _log_coordinator_data_status(coordinator: Any) -> None: + # Do not block platform setup waiting for coordinator refresh. + # HA will warn if setup exceeds 10s; sensors can be registered immediately and will + # populate when coordinator/local entities become available. + if coordinator.data is None: + _LOGGER.debug( + "Coordinator data not ready during sensor setup; registering entities anyway" + ) + return + try: + _LOGGER.debug( + "Setting up sensors with coordinator data: %s devices", + len(coordinator.data), + ) + except Exception: + _LOGGER.debug( + "Setting up sensors with coordinator data (device count unavailable)" + ) + + +def _resolve_box_id_and_store( + hass: HomeAssistant, entry: ConfigEntry, coordinator: Any +) -> Optional[str]: + inverter_sn = resolve_box_id(coordinator) + + if inverter_sn == "unknown": + from_title = None + try: + import re + + m = re.search(r"(\\d{6,})", entry.title or "") + if m: + from_title = m.group(1) + except Exception: + from_title = None + + if from_title: + inverter_sn = from_title + new_opts = dict(entry.options) + if new_opts.get("box_id") != inverter_sn: + new_opts["box_id"] = inverter_sn + hass.config_entries.async_update_entry(entry, options=new_opts) + _LOGGER.info("Stored box_id=%s from title into entry options", inverter_sn) + + if inverter_sn == "unknown": + _LOGGER.error("No valid box_id/inverter_sn resolved, skipping sensor setup") + return None + + if entry.options.get("box_id") != inverter_sn: + new_opts = dict(entry.options) + new_opts["box_id"] = inverter_sn + hass.config_entries.async_update_entry(entry, options=new_opts) + _LOGGER.info("Stored box_id=%s into entry options", inverter_sn) + + try: + setattr(coordinator, "forced_box_id", inverter_sn) + except Exception: + _LOGGER.debug("Could not set forced_box_id on coordinator") + + return inverter_sn + + +def _get_analytics_device_info( + hass: HomeAssistant, entry: ConfigEntry, inverter_sn: str +) -> Dict[str, Any]: + return hass.data.get(DOMAIN, {}).get(entry.entry_id, {}).get( + "analytics_device_info" + ) or { + "identifiers": {(DOMAIN, f"{inverter_sn}_analytics")}, + "name": f"Analytics & Predictions {inverter_sn}", + "manufacturer": "OIG", + "model": "Analytics Module", + "via_device": (DOMAIN, inverter_sn), + "entry_type": "service", + } + + +def _register_data_source_sensor( + hass: HomeAssistant, coordinator: Any, entry: ConfigEntry +) -> List[Any]: + sensors: List[Any] = [] + try: + data_source_sensor = OigCloudDataSourceSensor(hass, coordinator, entry) + sensors.append(data_source_sensor) + _LOGGER.info("Registered data source state sensor") + except Exception as e: + _LOGGER.error(f"Error creating data source sensor: {e}", exc_info=True) + return sensors + + +def _create_basic_sensors(coordinator: Any) -> List[Any]: + basic_sensors: List[Any] = [] + try: + data_sensors = { + k: v + for k, v in SENSOR_TYPES.items() + if v.get("sensor_type_category") == "data" + } + _LOGGER.debug(f"Found {len(data_sensors)} data sensors to create") + + for sensor_type, config in data_sensors.items(): + try: + from .entities.data_sensor import OigCloudDataSensor + + sensor = OigCloudDataSensor(coordinator, sensor_type) + + if hasattr(sensor, "device_info") and sensor.device_info is not None: + if not isinstance(sensor.device_info, dict): + _LOGGER.error( + f"Sensor {sensor_type} has invalid device_info type: {type(sensor.device_info)}" + ) + continue + + basic_sensors.append(sensor) + _LOGGER.debug(f"Created data sensor: {sensor_type}") + except ImportError as e: + _LOGGER.error( + f"OigCloudDataSensor not available for {sensor_type}: {e}" + ) + continue + except Exception as e: + _LOGGER.error(f"Error creating data sensor {sensor_type}: {e}") + continue + + if basic_sensors: + _LOGGER.info(f"Registering {len(basic_sensors)} basic sensors") + else: + _LOGGER.warning("No basic sensors could be created") + except Exception as e: + _LOGGER.error(f"Error initializing basic sensors: {e}", exc_info=True) + return basic_sensors + + +def _create_computed_sensors(coordinator: Any) -> List[Any]: + computed_sensors: List[Any] = [] + try: + if coordinator.data is None: + _LOGGER.debug("Coordinator data is None, skipping computed sensors") + return computed_sensors + + computed_sensor_types = { + k: v + for k, v in SENSOR_TYPES.items() + if v.get("sensor_type_category") == "computed" + } + _LOGGER.debug( + f"Found {len(computed_sensor_types)} computed sensors to create" + ) + + for sensor_type, config in computed_sensor_types.items(): + try: + from .entities.computed_sensor import OigCloudComputedSensor + + sensor = OigCloudComputedSensor(coordinator, sensor_type) + + if hasattr(sensor, "device_info") and sensor.device_info is not None: + if not isinstance(sensor.device_info, dict): + _LOGGER.error( + f"Computed sensor {sensor_type} has invalid device_info type: {type(sensor.device_info)}" + ) + continue + + computed_sensors.append(sensor) + _LOGGER.debug(f"Created computed sensor: {sensor_type}") + except ImportError as e: + _LOGGER.error( + f"OigCloudComputedSensor not available for {sensor_type}: {e}" + ) + continue + except Exception as e: + _LOGGER.error(f"Error creating computed sensor {sensor_type}: {e}") + continue + + if computed_sensors: + _LOGGER.info(f"Registering {len(computed_sensors)} computed sensors") + else: + _LOGGER.debug("No computed sensors found") + except Exception as e: + _LOGGER.error(f"Error initializing computed sensors: {e}", exc_info=True) + return computed_sensors + + +def _create_extended_sensors(coordinator: Any, entry: ConfigEntry) -> List[Any]: + extended_sensors: List[Any] = [] + extended_sensors_enabled = entry.options.get("enable_extended_sensors", False) + _LOGGER.debug(f"Extended sensors enabled from options: {extended_sensors_enabled}") + + if extended_sensors_enabled is not True: + _LOGGER.info("Extended sensors disabled - skipping creation") + return extended_sensors + + try: + if coordinator.data is None: + _LOGGER.debug("Coordinator data is None, skipping extended sensors") + return extended_sensors + + extended_sensor_types = { + k: v + for k, v in SENSOR_TYPES.items() + if v.get("sensor_type_category") == "extended" + } + _LOGGER.debug( + f"Found {len(extended_sensor_types)} extended sensors to create" + ) + + for sensor_type, config in extended_sensor_types.items(): + try: + from .entities.data_sensor import OigCloudDataSensor + + extended_sensor = OigCloudDataSensor( + coordinator, sensor_type, extended=True + ) + extended_sensors.append(extended_sensor) + _LOGGER.debug(f"Created extended sensor: {sensor_type}") + except ImportError as e: + _LOGGER.error( + f"OigCloudDataSensor not available for {sensor_type}: {e}" + ) + continue + except Exception as e: + _LOGGER.error(f"Error creating extended sensor {sensor_type}: {e}") + continue + + if extended_sensors: + _LOGGER.info( + f"Registering {len(extended_sensors)} extended sensors" + ) + else: + _LOGGER.debug("No extended sensors found") + except Exception as e: + _LOGGER.error(f"Error initializing extended sensors: {e}", exc_info=True) + return extended_sensors + + +def _create_statistics_sensors( + hass: HomeAssistant, + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + statistics_sensors: List[Any] = [] + statistics_enabled = hass.data[DOMAIN][entry.entry_id].get( + "statistics_enabled", False + ) + statistics_option = entry.options.get("enable_statistics", True) + _LOGGER.info( + f"Statistics check: option={statistics_option}, hass.data={statistics_enabled}" + ) + + if not statistics_enabled: + _LOGGER.info("Statistics sensors disabled - skipping creation") + return statistics_sensors + + try: + if coordinator.data is None or not SENSOR_TYPES: + _LOGGER.debug( + "Coordinator data is None or SENSOR_TYPES empty, skipping statistics sensors" + ) + return statistics_sensors + + from .entities.statistics_sensor import OigCloudStatisticsSensor + + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "statistics": + continue + try: + _LOGGER.debug(f"Creating statistics sensor: {sensor_type}") + sensor = OigCloudStatisticsSensor( + coordinator, sensor_type, analytics_device_info + ) + statistics_sensors.append(sensor) + _LOGGER.debug( + f"Successfully created statistics sensor: {sensor_type}" + ) + except Exception as e: + _LOGGER.error( + f"Error creating statistics sensor {sensor_type}: {e}", + exc_info=True, + ) + continue + + if statistics_sensors: + _LOGGER.info( + f"Registering {len(statistics_sensors)} statistics sensors" + ) + else: + _LOGGER.debug("No statistics sensors found") + except Exception as e: + _LOGGER.error(f"Error initializing statistics sensors: {e}", exc_info=True) + return statistics_sensors + + +def _create_solar_forecast_sensors( + hass: HomeAssistant, + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + if not entry.options.get("enable_solar_forecast", False): + return [] + solar_sensors: List[Any] = [] + try: + from .entities.solar_forecast_sensor import OigCloudSolarForecastSensor + + solar_sensors = _build_solar_forecast_sensors( + coordinator, + entry, + analytics_device_info, + OigCloudSolarForecastSensor, + ) + _register_solar_forecast_sensors(hass, entry, solar_sensors) + except ImportError as e: + _LOGGER.warning(f"Solar forecast sensors not available: {e}") + return [] + except Exception as e: + _LOGGER.error(f"Error initializing solar forecast sensors: {e}") + return [] + return solar_sensors + + +def _build_solar_forecast_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + sensor_cls: Any, +) -> List[Any]: + solar_sensors: List[Any] = [] + if not SENSOR_TYPES: + return solar_sensors + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "solar_forecast": + continue + solar_sensors.append( + sensor_cls(coordinator, sensor_type, entry, analytics_device_info) + ) + return solar_sensors + + +def _register_solar_forecast_sensors( + hass: HomeAssistant, entry: ConfigEntry, solar_sensors: List[Any] ) -> None: - """Set up OIG Cloud sensors from a config entry.""" - _LOGGER.debug("Setting up OIG Cloud sensors") - - # Get coordinator from hass.data - entry_data = hass.data[DOMAIN][config_entry.entry_id] - coordinator: OigCloudDataUpdateCoordinator = entry_data["coordinator"] - - # Check if we have data before proceeding - if not coordinator.data: - _LOGGER.error("No data available from coordinator") + if solar_sensors: + _LOGGER.debug("Registering %d solar forecast sensors", len(solar_sensors)) + hass.data[DOMAIN][entry.entry_id]["solar_forecast_sensors"] = solar_sensors + _LOGGER.debug("Solar forecast sensors stored for service access") return - - _LOGGER.debug("First coordinator refresh successful, adding entities") - - # Add common entities - _register_common_entities(async_add_entities, coordinator) - - # Get the box ID from the coordinator data - box_id = list(coordinator.data.keys())[0] - - # Add entities that require 'boiler' if available - if "boiler" in coordinator.data[box_id] and len(coordinator.data[box_id]["boiler"]) > 0: - _LOGGER.debug("Registering boiler entities") - _register_boiler_entities(async_add_entities, coordinator) + _LOGGER.debug("No solar forecast sensors found - this is normal if not configured") + + +def _create_shield_sensors(coordinator: Any) -> List[Any]: + try: + from .entities.shield_sensor import OigCloudShieldSensor + + return _create_category_sensors( + coordinator=coordinator, + category="shield", + sensor_cls=OigCloudShieldSensor, + log_label="ServiceShield", + ) + except Exception as e: + _LOGGER.error(f"Error initializing ServiceShield sensors: {e}") + return [] + + +def _create_notification_sensors(coordinator: Any) -> List[Any]: + try: + from .entities.data_sensor import OigCloudDataSensor + + return _create_category_sensors( + coordinator=coordinator, + category="notification", + sensor_cls=lambda coord, sensor_type: OigCloudDataSensor( + coord, sensor_type, notification=True + ), + log_label="notification", + log_info=True, + ) + except Exception as e: + _LOGGER.error(f"Error initializing notification sensors: {e}") + return [] + + +def _create_category_sensors( + *, + coordinator: Any, + category: str, + sensor_cls: Any, + log_label: str, + log_info: bool = False, +) -> List[Any]: + if coordinator.data is None or not SENSOR_TYPES: + _LOGGER.debug( + "Coordinator data is None or SENSOR_TYPES empty, skipping %s sensors", + log_label, + ) + return [] + + sensors = _build_category_sensors( + coordinator=coordinator, + category=category, + sensor_cls=sensor_cls, + log_label=log_label, + ) + _log_category_sensor_registration(sensors, log_label, log_info) + return sensors + + +def _build_category_sensors( + *, + coordinator: Any, + category: str, + sensor_cls: Any, + log_label: str, +) -> List[Any]: + sensors: List[Any] = [] + for sensor_type in _iter_category_sensor_types(category): + sensor = _try_create_category_sensor( + coordinator=coordinator, + sensor_type=sensor_type, + sensor_cls=sensor_cls, + log_label=log_label, + ) + if sensor is not None: + sensors.append(sensor) + return sensors + + +def _iter_category_sensor_types(category: str): + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") == category: + yield sensor_type + + +def _try_create_category_sensor( + *, + coordinator: Any, + sensor_type: str, + sensor_cls: Any, + log_label: str, +) -> Optional[Any]: + try: + sensor = sensor_cls(coordinator, sensor_type) + except Exception as e: + _LOGGER.error("Error creating %s sensor %s: %s", log_label, sensor_type, e) + return None + if not _is_sensor_device_info_valid(sensor, log_label, sensor_type): + return None + _LOGGER.debug("Created %s sensor: %s", log_label, sensor_type) + return sensor + + +def _is_sensor_device_info_valid( + sensor: Any, log_label: str, sensor_type: str +) -> bool: + if not hasattr(sensor, "device_info") or sensor.device_info is None: + return True + if isinstance(sensor.device_info, dict): + return True + _LOGGER.error( + "%s sensor %s has invalid device_info type: %s", + log_label, + sensor_type, + type(sensor.device_info), + ) + return False + + +def _log_category_sensor_registration( + sensors: List[Any], log_label: str, log_info: bool +) -> None: + if sensors: + log = _LOGGER.info if log_info else _LOGGER.debug + log("Registering %d %s sensors", len(sensors), log_label) else: - _LOGGER.debug("No boiler data available, skipping boiler entities") - - _LOGGER.debug("Sensor setup completed") - - -def _register_boiler_entities(async_add_entities: AddEntitiesCallback, coordinator: DataUpdateCoordinator) -> None: - """Register boiler-specific sensor entities.""" - # Add data sensors that require boiler data - async_add_entities( - OigCloudDataSensor(coordinator, sensor_type) - for sensor_type in SENSOR_TYPES - if "requires" in SENSOR_TYPES[sensor_type] - and "boiler" in SENSOR_TYPES[sensor_type]["requires"] - and SENSOR_TYPES[sensor_type]["node_id"] is not None - ) - - # Add computed sensors that require boiler data - async_add_entities( - OigCloudComputedSensor(coordinator, sensor_type) - for sensor_type in SENSOR_TYPES - if "requires" in SENSOR_TYPES[sensor_type] - and "boiler" in SENSOR_TYPES[sensor_type]["requires"] - and SENSOR_TYPES[sensor_type]["node_id"] is None - ) - - -def _register_common_entities(async_add_entities: AddEntitiesCallback, coordinator: DataUpdateCoordinator) -> None: - """Register common sensor entities that don't require specific components.""" - # Add standard data sensors - async_add_entities( - OigCloudDataSensor(coordinator, sensor_type) - for sensor_type in SENSOR_TYPES - if "requires" not in SENSOR_TYPES[sensor_type] - and SENSOR_TYPES[sensor_type]["node_id"] is not None - ) - - # Add computed sensors - async_add_entities( - OigCloudComputedSensor(coordinator, sensor_type) - for sensor_type in SENSOR_TYPES - if "requires" not in SENSOR_TYPES[sensor_type] - and SENSOR_TYPES[sensor_type]["node_id"] is None + _LOGGER.debug("No %s sensors found", log_label) + + +def _create_battery_prediction_sensors( + hass: HomeAssistant, + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + battery_prediction_enabled = entry.options.get("enable_battery_prediction", False) + _LOGGER.info(f"Battery prediction enabled: {battery_prediction_enabled}") + if not battery_prediction_enabled: + _LOGGER.info("Battery prediction sensors disabled - skipping creation") + return [] + + try: + from .battery_forecast.sensors.ha_sensor import OigCloudBatteryForecastSensor + except ImportError as e: + _LOGGER.warning(f"Battery prediction sensors not available: {e}") + return [] + + try: + return _init_battery_prediction_sensors( + hass, + coordinator, + entry, + analytics_device_info, + OigCloudBatteryForecastSensor, + ) + except Exception as e: + _LOGGER.error(f"Error initializing battery prediction sensors: {e}") + return [] + + +def _init_battery_prediction_sensors( + hass: HomeAssistant, + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + sensor_cls: Any, +) -> List[Any]: + battery_forecast_sensors = _build_battery_prediction_sensors( + coordinator, + entry, + analytics_device_info, + hass, + sensor_cls, + ) + if not battery_forecast_sensors: + _LOGGER.debug("No battery prediction sensors found") + return [] + + _LOGGER.info( + "Registering %d battery prediction sensors", + len(battery_forecast_sensors), + ) + _connect_balancing_manager(hass, entry, coordinator, battery_forecast_sensors) + extra_sensors = _create_battery_support_sensors( + hass, coordinator, entry, analytics_device_info + ) + return battery_forecast_sensors + extra_sensors + + +def _build_battery_prediction_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, + sensor_cls: Any, +) -> List[Any]: + sensors: List[Any] = [] + if not SENSOR_TYPES: + return sensors + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "battery_prediction": + continue + try: + sensor = sensor_cls( + coordinator, + sensor_type, + entry, + analytics_device_info, + hass, + ) + sensors.append(sensor) + _LOGGER.debug("Created battery prediction sensor: %s", sensor_type) + except ValueError as e: + _LOGGER.warning("Skipping battery prediction sensor %s: %s", sensor_type, e) + except Exception as e: + _LOGGER.error( + "Error creating battery prediction sensor %s: %s", sensor_type, e + ) + return sensors + + +def _connect_balancing_manager( + hass: HomeAssistant, + entry: ConfigEntry, + coordinator: Any, + battery_forecast_sensors: List[Any], +) -> None: + if DOMAIN not in hass.data or entry.entry_id not in hass.data[DOMAIN]: + return + if not battery_forecast_sensors: + return + try: + balancing_manager = hass.data[DOMAIN][entry.entry_id].get("balancing_manager") + if balancing_manager: + forecast_sensor = battery_forecast_sensors[0] + balancing_manager.set_forecast_sensor(forecast_sensor) + balancing_manager.set_coordinator(coordinator) + _LOGGER.info( + "✅ Connected BalancingManager to forecast sensor and coordinator" + ) + except Exception as e: + _LOGGER.debug("Could not set forecast sensor in BalancingManager: %s", e) + + +def _create_battery_support_sensors( + hass: HomeAssistant, + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + sensors: List[Any] = [] + + sensors.extend( + _create_battery_health_sensor( + coordinator, entry, analytics_device_info, hass + ) + ) + sensors.extend( + _create_battery_balancing_sensors( + coordinator, entry, analytics_device_info, hass + ) + ) + + sensors.extend( + _create_grid_charging_plan_sensors( + coordinator, analytics_device_info + ) ) + sensors.extend( + _create_battery_efficiency_sensors( + coordinator, entry, analytics_device_info, hass + ) + ) + sensors.extend( + _create_planner_status_sensors( + coordinator, entry, analytics_device_info, hass + ) + ) + sensors.extend( + _create_adaptive_profiles_sensors( + coordinator, entry, analytics_device_info, hass + ) + ) + + return sensors + + +def _create_battery_health_sensor( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, +) -> List[Any]: + try: + from .entities.battery_health_sensor import BatteryHealthSensor + + health_sensor = BatteryHealthSensor( + coordinator, + "battery_health", + entry, + analytics_device_info, + hass, + ) + _LOGGER.info("✅ Registered Battery Health sensor") + return [health_sensor] + except Exception as e: + _LOGGER.error(f"Failed to create Battery Health sensor: {e}") + return [] + + +def _create_battery_balancing_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, +) -> List[Any]: + try: + from .entities.battery_balancing_sensor import OigCloudBatteryBalancingSensor + except Exception as e: + _LOGGER.error(f"Error creating battery balancing sensors: {e}") + return [] + + balancing_sensors: List[Any] = [] + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "battery_balancing": + continue + sensor = OigCloudBatteryBalancingSensor( + coordinator, + sensor_type, + entry, + analytics_device_info, + hass, + ) + balancing_sensors.append(sensor) + _LOGGER.debug("Created battery balancing sensor: %s", sensor_type) + + if balancing_sensors: + _LOGGER.info( + "Registering %d battery balancing sensors", len(balancing_sensors) + ) + return balancing_sensors + + +def _create_grid_charging_plan_sensors( + coordinator: Any, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + try: + from .battery_forecast.sensors.grid_charging_sensor import ( + OigCloudGridChargingPlanSensor, + ) + except Exception as e: + _LOGGER.error(f"Error creating grid charging plan sensors: {e}") + return [] + + grid_charging_sensors: List[Any] = [] + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "grid_charging_plan": + continue + sensor = OigCloudGridChargingPlanSensor( + coordinator, sensor_type, analytics_device_info + ) + grid_charging_sensors.append(sensor) + _LOGGER.debug("Created grid charging plan sensor: %s", sensor_type) + + if grid_charging_sensors: + _LOGGER.info( + "Registering %d grid charging plan sensors", + len(grid_charging_sensors), + ) + return grid_charging_sensors + + +def _create_battery_efficiency_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, +) -> List[Any]: + try: + from .battery_forecast.sensors.efficiency_sensor import ( + OigCloudBatteryEfficiencySensor, + ) + except Exception as e: + _LOGGER.error(f"Error creating battery efficiency sensors: {e}") + return [] + + efficiency_sensors: List[Any] = [] + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "battery_efficiency": + continue + sensor = OigCloudBatteryEfficiencySensor( + coordinator, + sensor_type, + entry, + analytics_device_info, + hass, + ) + efficiency_sensors.append(sensor) + _LOGGER.debug("Created battery efficiency sensor: %s", sensor_type) + + if efficiency_sensors: + _LOGGER.info( + "Registering %d battery efficiency sensors", len(efficiency_sensors) + ) + return efficiency_sensors + + +def _create_planner_status_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, +) -> List[Any]: + try: + from .battery_forecast.sensors.recommended_sensor import ( + OigCloudPlannerRecommendedModeSensor, + ) + except Exception as e: + _LOGGER.error(f"Error creating planner status sensors: {e}") + return [] + + planner_status_sensors: List[Any] = [] + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "planner_status": + continue + sensor = OigCloudPlannerRecommendedModeSensor( + coordinator, + sensor_type, + entry, + analytics_device_info, + hass, + ) + planner_status_sensors.append(sensor) + _LOGGER.debug("Created planner status sensor: %s", sensor_type) + + if planner_status_sensors: + _LOGGER.info( + "Registering %d planner status sensors", len(planner_status_sensors) + ) + return planner_status_sensors + + +def _create_adaptive_profiles_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], + hass: HomeAssistant, +) -> List[Any]: + try: + from .entities.adaptive_load_profiles_sensor import ( + OigCloudAdaptiveLoadProfilesSensor, + ) + except Exception as e: + _LOGGER.error(f"Error creating adaptive load profiles sensors: {e}") + return [] + + adaptive_sensors: List[Any] = [] + for sensor_type, config in SENSOR_TYPES.items(): + if config.get("sensor_type_category") != "adaptive_profiles": + continue + sensor = OigCloudAdaptiveLoadProfilesSensor( + coordinator, + sensor_type, + entry, + analytics_device_info, + hass, + ) + adaptive_sensors.append(sensor) + _LOGGER.debug("Created adaptive load profiles sensor: %s", sensor_type) + + if adaptive_sensors: + _LOGGER.info( + "Registering %d adaptive load profiles sensors", len(adaptive_sensors) + ) + return adaptive_sensors + + +def _create_pricing_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + pricing_enabled = entry.options.get("enable_pricing", False) + _LOGGER.info(f"Pricing and spot prices enabled: {pricing_enabled}") + if not pricing_enabled: + _LOGGER.info("💰 Pricing disabled - skipping pricing and spot price sensors") + return [] + + try: + _LOGGER.info("💰 Creating analytics sensors for pricing and spot prices") + + from .entities.analytics_sensor import OigCloudAnalyticsSensor + from .pricing.spot_price_sensor import ( + ExportPrice15MinSensor, + SpotPrice15MinSensor, + ) + from .sensors.SENSOR_TYPES_SPOT import SENSOR_TYPES_SPOT + + analytics_sensors: List[Any] = [] + + pricing_sensors = { + k: v + for k, v in SENSOR_TYPES_SPOT.items() + if v.get("sensor_type_category") == "pricing" + } + + _LOGGER.debug(f"Found {len(pricing_sensors)} pricing sensors to create") + + for sensor_type, config in pricing_sensors.items(): + try: + _LOGGER.debug(f"Creating analytics sensor: {sensor_type}") + + if sensor_type == "spot_price_current_15min": + sensor = SpotPrice15MinSensor( + coordinator, entry, sensor_type, analytics_device_info + ) + _LOGGER.debug( + f"Created 15min spot price sensor: {sensor_type}" + ) + elif sensor_type == "export_price_current_15min": + sensor = ExportPrice15MinSensor( + coordinator, entry, sensor_type, analytics_device_info + ) + _LOGGER.debug( + f"Created 15min export price sensor: {sensor_type}" + ) + else: + sensor = OigCloudAnalyticsSensor( + coordinator, sensor_type, entry, analytics_device_info + ) + _LOGGER.debug(f"Created analytics sensor: {sensor_type}") + + analytics_sensors.append(sensor) + _LOGGER.debug( + f"Successfully created analytics sensor: {sensor_type}" + ) + except Exception as e: + _LOGGER.error( + f"Failed to create analytics sensor {sensor_type}: {e}", + exc_info=True, + ) + continue + + if analytics_sensors: + _LOGGER.info(f"Registering {len(analytics_sensors)} analytics sensors") + _LOGGER.info( + f"Successfully registered {len(analytics_sensors)} analytics sensors" + ) + + for sensor in analytics_sensors: + _LOGGER.debug( + f"💰 Registered analytics sensor: {sensor.entity_id} (unique_id: {sensor.unique_id})" + ) + else: + _LOGGER.warning("No analytics sensors could be created") + + return analytics_sensors + except ImportError as e: + _LOGGER.error(f"OigCloudAnalyticsSensor not available: {e}") + except Exception as e: + _LOGGER.error(f"Error initializing analytics sensors: {e}", exc_info=True) + return [] + + +def _create_chmu_sensors( + coordinator: Any, + entry: ConfigEntry, + analytics_device_info: Dict[str, Any], +) -> List[Any]: + chmu_enabled = entry.options.get("enable_chmu_warnings", False) + _LOGGER.info(f"ČHMÚ weather warnings enabled: {chmu_enabled}") + if not chmu_enabled: + _LOGGER.info("🌦️ ČHMÚ warnings disabled - skipping weather warning sensors") + return [] + + try: + _LOGGER.info("🌦️ Creating ČHMÚ weather warning sensors") + + from .entities.chmu_sensor import OigCloudChmuSensor + from .sensors.SENSOR_TYPES_CHMU import SENSOR_TYPES_CHMU + + chmu_sensors: List[Any] = [] + + chmu_sensor_types = { + k: v + for k, v in SENSOR_TYPES_CHMU.items() + if v.get("sensor_type_category") == "chmu_warnings" + } + + _LOGGER.debug(f"Found {len(chmu_sensor_types)} ČHMÚ sensors to create") + + for sensor_type, config in chmu_sensor_types.items(): + try: + _LOGGER.debug(f"Creating ČHMÚ sensor: {sensor_type}") + + sensor = OigCloudChmuSensor( + coordinator, sensor_type, entry, analytics_device_info + ) + chmu_sensors.append(sensor) + _LOGGER.debug(f"Created ČHMÚ sensor: {sensor_type}") + + except Exception as e: + _LOGGER.error( + f"Failed to create ČHMÚ sensor {sensor_type}: {e}", + exc_info=True, + ) + continue + + if chmu_sensors: + _LOGGER.info(f"Registering {len(chmu_sensors)} ČHMÚ sensors") + _LOGGER.info( + f"Successfully registered {len(chmu_sensors)} ČHMÚ sensors" + ) + + for sensor in chmu_sensors: + _LOGGER.debug( + f"🌦️ Registered ČHMÚ sensor: {sensor.entity_id} (unique_id: {sensor.unique_id})" + ) + else: + _LOGGER.warning("No ČHMÚ sensors could be created") + + return chmu_sensors + + except ImportError as e: + _LOGGER.error(f"OigCloudChmuSensor not available: {e}") + except Exception as e: + _LOGGER.error(f"Error initializing ČHMÚ sensors: {e}", exc_info=True) + return [] + + +def _create_boiler_sensors(hass: HomeAssistant, entry: ConfigEntry) -> List[Any]: + boiler_enabled = entry.options.get("enable_boiler", False) + _LOGGER.info(f"Boiler module enabled: {boiler_enabled}") + if not boiler_enabled: + _LOGGER.info("🔥 Boiler module disabled - skipping boiler sensors") + return [] + + try: + boiler_coordinator = hass.data[DOMAIN][entry.entry_id].get( + "boiler_coordinator" + ) + + if boiler_coordinator is None: + _LOGGER.warning( + "Boiler coordinator not found in hass.data - skipping boiler sensors" + ) + return [] + + _LOGGER.info("🔥 Creating boiler sensors") + + from .boiler.sensors import get_boiler_sensors + + boiler_sensors = get_boiler_sensors(boiler_coordinator) + + if boiler_sensors: + _LOGGER.info(f"Registering {len(boiler_sensors)} boiler sensors") + _LOGGER.info( + f"Successfully registered {len(boiler_sensors)} boiler sensors" + ) + + for sensor in boiler_sensors: + _LOGGER.debug( + f"🔥 Registered boiler sensor: {sensor.entity_id} (unique_id: {sensor.unique_id})" + ) + else: + _LOGGER.warning("No boiler sensors could be created") + + return boiler_sensors + + except ImportError as e: + _LOGGER.error(f"Boiler sensors not available: {e}") + except Exception as e: + _LOGGER.error(f"Error initializing boiler sensors: {e}", exc_info=True) + return [] + + +def _register_all_sensors( + async_add_entities: AddEntitiesCallback, all_sensors: List[Any] +) -> None: + if all_sensors: + _LOGGER.info( + f"🚀 Registering {len(all_sensors)} sensors in one batch (PERFORMANCE OPTIMIZATION)" + ) + async_add_entities(all_sensors, False) + _LOGGER.info(f"✅ All {len(all_sensors)} sensors registered successfully") + else: + _LOGGER.warning("⚠️ No sensors were created during setup") + + +async def async_setup_entry( # noqa: C901 + hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback +) -> None: + """Set up OIG Cloud sensors from a config entry.""" + await asyncio.sleep(0) + _LOGGER.debug("Starting sensor setup with coordinator data") + + coordinator = hass.data[DOMAIN][entry.entry_id]["coordinator"] + + # PERFORMANCE FIX: Collect all sensors in one list instead of calling async_add_entities 17 times + all_sensors: List[Any] = [] + + _log_coordinator_data_status(coordinator) + + # === CLEANUP PŘED REGISTRACÍ === + # POZN: Cleanup je vypnutý kvůli pomalému setupu (>10s) + # Cleanup běží pouze při první instalaci nebo pokud je explicitně vyžádán + # expected_sensor_types = _get_expected_sensor_types(hass, entry) + # await _cleanup_all_orphaned_entities( + # hass, entry, coordinator, expected_sensor_types + # ) + + inverter_sn = _resolve_box_id_and_store(hass, entry, coordinator) + if inverter_sn is None: + return + + # Main OIG Device + + # Analytics & Predictions Device (prefer definition from __init__.py for consistency) + analytics_device_info = _get_analytics_device_info(hass, entry, inverter_sn) + + # ServiceShield Device + + _LOGGER.debug(f"Created device_info objects for box_id: {inverter_sn}") + + # ================================================================ + # SECTION 0: DATA SOURCE STATE SENSOR (always on) + # ================================================================ + all_sensors.extend(_register_data_source_sensor(hass, coordinator, entry)) + + # ================================================================ + # SECTION 1: BASIC DATA SENSORS (kategorie: "data") + # ================================================================ + # Základní senzory s daty z API - vždy aktivní + # Device: main_device_info (OIG Cloud {box_id}) + # Třída: OigCloudDataSensor + # ================================================================ + all_sensors.extend(_create_basic_sensors(coordinator)) + + # ================================================================ + # SECTION 2: COMPUTED SENSORS (kategorie: "computed") + # ================================================================ + # Vypočítané hodnoty z existujících dat - vždy aktivní + # Device: main_device_info (OIG Cloud {box_id}) + # Třída: OigCloudComputedSensor + # ================================================================ + all_sensors.extend(_create_computed_sensors(coordinator)) + + # ================================================================ + # SECTION 3: EXTENDED SENSORS (kategorie: "extended") + # ================================================================ + # Rozšířené metriky - volitelné (enable_extended_sensors flag) + # Device: main_device_info (OIG Cloud {box_id}) + # Třída: OigCloudDataSensor (s extended=True) + # ================================================================ + all_sensors.extend(_create_extended_sensors(coordinator, entry)) + + # ================================================================ + # SECTION 4: STATISTICS SENSORS (kategorie: "statistics") + # ================================================================ + # Historická statistika - volitelné (enable_statistics flag) + # Device: analytics_device_info (Analytics & Predictions {box_id}) + # Třída: OigCloudStatisticsSensor + # ================================================================ + all_sensors.extend( + _create_statistics_sensors(hass, coordinator, entry, analytics_device_info) + ) + + # ================================================================ + # SECTION 5: SOLAR FORECAST SENSORS (kategorie: "solar_forecast") + # ================================================================ + # Solární předpovědi - volitelné (enable_solar_forecast flag) + # Device: analytics_device_info (Analytics & Predictions {box_id}) + # Třída: OigCloudSolarForecastSensor + # ================================================================ + all_sensors.extend( + _create_solar_forecast_sensors( + hass, coordinator, entry, analytics_device_info + ) + ) + + # ================================================================ + # SECTION 6: SERVICESHIELD SENSORS (kategorie: "shield") + # ================================================================ + # ServiceShield monitoring - vždy aktivní (nativní součást) + # Device: shield_device_info (ServiceShield {box_id}) + # Třída: OigCloudShieldSensor + # ================================================================ + all_sensors.extend(_create_shield_sensors(coordinator)) + + # ================================================================ + # SECTION 7: NOTIFICATION SENSORS (kategorie: "notification") + # ================================================================ + # Systémové notifikace - vždy aktivní + # Device: main_device_info (OIG Cloud {box_id}) + # Třída: OigCloudDataSensor (s notification=True) + # ================================================================ + all_sensors.extend(_create_notification_sensors(coordinator)) + + # ================================================================ + # SECTION 8: BATTERY PREDICTION SENSORS (kategorie: "battery_prediction") + # ================================================================ + # Predikce baterie - volitelné (enable_battery_prediction flag) + # Device: analytics_device_info (Analytics & Predictions {box_id}) + # Třída: OigCloudBatteryForecastSensor + # ================================================================ + all_sensors.extend( + _create_battery_prediction_sensors( + hass, coordinator, entry, analytics_device_info + ) + ) + + # ================================================================ + # SECTION 9: PRICING & SPOT PRICE SENSORS (kategorie: "pricing") + # ================================================================ + # Spotové ceny elektřiny - volitelné (enable_pricing flag) + # Device: analytics_device_info (Analytics & Predictions {box_id}) + # Třídy: OigCloudAnalyticsSensor, SpotPrice15MinSensor, ExportPrice15MinSensor + # ================================================================ + all_sensors.extend( + _create_pricing_sensors(coordinator, entry, analytics_device_info) + ) + + # ================================================================ + # SECTION 10: ČHMÚ WEATHER WARNINGS (kategorie: "chmu_warnings") + # ================================================================ + # Meteorologická varování ČHMÚ - volitelné (enable_chmu_warnings flag) + # Device: analytics_device_info (Analytics & Predictions {box_id}) + # Třída: OigCloudChmuSensor + # ================================================================ + all_sensors.extend( + _create_chmu_sensors(coordinator, entry, analytics_device_info) + ) + + # ================================================================ + # SECTION 11: BOILER SENSORS (kategorie: "boiler") + # ================================================================ + # Bojlerové senzory - volitelné (enable_boiler flag) + # Device: OIG Bojler (samostatné zařízení) + # Třída: BoilerSensor* (13 senzorů) + # ================================================================ + all_sensors.extend(_create_boiler_sensors(hass, entry)) + + # ================================================================ + # PERFORMANCE FIX: Register all sensors at once instead of 17 separate calls + # ================================================================ + _register_all_sensors(async_add_entities, all_sensors) + + _LOGGER.info("OIG Cloud sensor setup completed") + + +async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool: + """Unload a config entry and clean up empty devices.""" + try: + # Zkontrolujeme, zda máme data pro tuto config entry + if DOMAIN not in hass.data: + _LOGGER.debug(f"Domain {DOMAIN} not found in hass.data during unload") + return True + + if config_entry.entry_id not in hass.data[DOMAIN]: + _LOGGER.debug( + f"Config entry {config_entry.entry_id} not found in domain data during unload" + ) + return True + + domain_data = hass.data[DOMAIN][config_entry.entry_id] + + # Pokud máme coordinator, zastavíme ho + if "coordinator" in domain_data: + coordinator = domain_data["coordinator"] + if hasattr(coordinator, "async_shutdown"): + await coordinator.async_shutdown() + _LOGGER.debug(f"Coordinator shut down for entry {config_entry.entry_id}") + + # Vyčistíme prázdná zařízení (použijeme novou interní funkci) + from homeassistant.helpers import device_registry as dr + from homeassistant.helpers import entity_registry as er + + device_reg = dr.async_get(hass) + entity_reg = er.async_get(hass) + await _cleanup_empty_devices_internal(device_reg, entity_reg, config_entry) + + # Vyčistíme data pro tuto config entry + del hass.data[DOMAIN][config_entry.entry_id] + + # Pokud to byla poslední config entry, vyčistíme i domain + if not hass.data[DOMAIN]: + del hass.data[DOMAIN] + + _LOGGER.debug(f"Successfully unloaded config entry {config_entry.entry_id}") + return True + except Exception as e: + _LOGGER.error(f"Error unloading config entry {config_entry.entry_id}: {e}") + return False + + +async def _cleanup_empty_devices( + hass: HomeAssistant, config_entry: ConfigEntry +) -> None: + """Clean up devices that have no entities, including service devices.""" + await asyncio.sleep(0) + from homeassistant.helpers import device_registry as dr + from homeassistant.helpers import entity_registry as er + from homeassistant.helpers.device_registry import DeviceEntryType + + _LOGGER.info( + f"Starting cleanup of empty devices for config entry {config_entry.entry_id}" + ) + + device_reg = dr.async_get(hass) + entity_reg = er.async_get(hass) + + # Najdeme všechna zařízení pro tuto config entry + devices = dr.async_entries_for_config_entry(device_reg, config_entry.entry_id) + _LOGGER.debug(f"Found {len(devices)} devices for config entry") + + removed_count = 0 + kept_count = 0 + + for device in devices: + # Najdeme všechny entity pro toto zařízení + entities = er.async_entries_for_device(entity_reg, device.id) + device_type = ( + "service" if device.entry_type == DeviceEntryType.SERVICE else "device" + ) + + _LOGGER.debug( + f"Checking {device_type}: {device.name} (ID: {device.id}) - {len(entities)} entities" + ) + + # Pokud zařízení nemá žádné entity, smažeme ho + if not entities: + _LOGGER.warning( + f"Removing empty {device_type}: {device.name} ({device.id})" + ) + try: + device_reg.async_remove_device(device.id) + removed_count += 1 + _LOGGER.info(f"Successfully removed empty {device_type}: {device.name}") + except Exception as e: + _LOGGER.error(f"Failed to remove {device_type} {device.name}: {e}") + else: + entity_names = [entity.entity_id for entity in entities] + _LOGGER.debug( + f"Keeping {device_type} {device.name} with entities: {entity_names}" + ) + kept_count += 1 + + _LOGGER.info( + f"Device cleanup completed: removed {removed_count}, kept {kept_count} devices" + ) + + +# ============================================================================ +# DEPRECATED CLEANUP FUNCTIONS - Kept for reference, replaced by new system +# ============================================================================ +# The following 3 functions have been replaced by: +# - _cleanup_all_orphaned_entities() +# - _cleanup_renamed_sensors() +# - _cleanup_removed_devices() +# - _cleanup_empty_devices_internal() +# ============================================================================ diff --git a/custom_components/oig_cloud/sensor_types.py b/custom_components/oig_cloud/sensor_types.py old mode 100644 new mode 100755 index 312b6909..8b343216 --- a/custom_components/oig_cloud/sensor_types.py +++ b/custom_components/oig_cloud/sensor_types.py @@ -1,178 +1,62 @@ -from typing import Dict -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - -from custom_components.oig_cloud.sensors.SENSOR_TYPES_ACTUAL import SENSOR_TYPES_ACTUAL -from custom_components.oig_cloud.sensors.SENSOR_TYPES_AC_OUT import SENSOR_TYPES_AC_OUT -from custom_components.oig_cloud.sensors.SENSOR_TYPES_BATT import SENSOR_TYPES_BATT -from custom_components.oig_cloud.sensors.SENSOR_TYPES_BOILER import SENSOR_TYPES_BOILER -from custom_components.oig_cloud.sensors.SENSOR_TYPES_BOX import SENSOR_TYPES_BOX -from custom_components.oig_cloud.sensors.SENSOR_TYPES_MISC import SENSOR_TYPES_MISC -from custom_components.oig_cloud.sensors.SENSOR_TYPES_DC_IN import SENSOR_TYPES_DC_IN -from custom_components.oig_cloud.sensors.SENSOR_TYPES_AC_IN import SENSOR_TYPES_AC_IN - -SENSOR_TYPES: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = {} -SENSOR_TYPES.update(SENSOR_TYPES_AC_IN) -SENSOR_TYPES.update(SENSOR_TYPES_DC_IN) -SENSOR_TYPES.update(SENSOR_TYPES_BOX) -SENSOR_TYPES.update(SENSOR_TYPES_BOILER) -SENSOR_TYPES.update(SENSOR_TYPES_BATT) -SENSOR_TYPES.update(SENSOR_TYPES_ACTUAL) -SENSOR_TYPES.update(SENSOR_TYPES_AC_OUT) -SENSOR_TYPES.update(SENSOR_TYPES_MISC) - -# "ac_out_aco_vr": { -# "name": "Voltage Line 1", -# "name_cs": "Napětí fáze 1", -# "device_class": SensorDeviceClass.VOLTAGE, -# "unit_of_measurement": "V", -# "node_id": "ac_out", -# "node_key": "aco_vr", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "ac_out_aco_vs": { -# "name": "Voltage Line 2", -# "name_cs": "Napětí fáze 2", -# "device_class": SensorDeviceClass.VOLTAGE, -# "unit_of_measurement": "V", -# "node_id": "ac_out", -# "node_key": "aco_vs", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "ac_out_aco_vt": { -# "name": "Voltage Line 3", -# "name_cs": "Napětí fáze 3", -# "device_class": SensorDeviceClass.VOLTAGE, -# "unit_of_measurement": "V", -# "node_id": "ac_out", -# "node_key": "aco_vt", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "batt_bat_and": { -# "name": "Battery Discharge Today", -# "name_cs": "Dnešní vybíjení baterie", -# "device_class": SensorDeviceClass.ENERGY, -# "unit_of_measurement": "Wh", -# "node_id": "batt", -# "node_key": "bat_and", -# "state_class": SensorStateClass.TOTAL_INCREASING, -# }, -# "batt_bat_apd": { -# "name": "Battery Charge Today", -# "name_cs": "Dnešní nabíjení baterie", -# "device_class": SensorDeviceClass.ENERGY, -# "unit_of_measurement": "Wh", -# "node_id": "batt", -# "node_key": "bat_apd", -# "state_class": SensorStateClass.TOTAL_INCREASING, -# }, -# "battery_add_month": { -# "name": "Battery - Month add", -# "name_cs": "Nabíjení baterie za měsíc", -# "device_class": SensorDeviceClass.ENERGY, -# "unit_of_measurement": "kW", -# "node_id": "batt", -# "node_key": "bat_am", -# "state_class": SensorStateClass.TOTAL_INCREASING, -# }, -# "battery_add_year": { -# "name": "Battery - Year add", -# "name_cs": "Nabíjení baterie za rok", -# "device_class": SensorDeviceClass.ENERGY, -# "unit_of_measurement": "kW", -# "node_id": "batt", -# "node_key": "bat_ay", -# "state_class": SensorStateClass.TOTAL_INCREASING, -# }, -# "battery_current": { -# "name": "Battery - current", -# "name_cs": "Proud v baterii", -# "device_class": SensorDeviceClass.POWER, -# "unit_of_measurement": "A", -# "node_id": "batt", -# "node_key": "bat_i", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "battery_quality": { -# "name": "Quality of battery", -# "name_cs": "Kvalita baterie", -# "device_class": SensorDeviceClass.POWER_FACTOR, -# "unit_of_measurement": "%", -# "node_id": "batt", -# "node_key": "bat_q", -# "state_class": SensorStateClass.MEASUREMENT, -# "entity_category": EntityCategory.DIAGNOSTIC, -# }, -# "battery_temp": { -# "name": "Battery - temp", -# "name_cs": "Teplota baterie", -# "device_class": SensorDeviceClass.TEMPERATURE, -# "unit_of_measurement": "°C", -# "node_id": "batt", -# "node_key": "bat_t", -# "entity_category": EntityCategory.DIAGNOSTIC, -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "battery_volt": { -# "name": "Battery - volt", -# "name_cs": "Napětí v baterii", -# "device_class": SensorDeviceClass.POWER, -# "unit_of_measurement": "V", -# "node_id": "batt", -# "node_key": "bat_v", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "box_prms_sw": { -# "name": "Software Version", -# "name_cs": "Verze firmware", -# "device_class": None, -# "unit_of_measurement": None, -# "node_id": "box_prms", -# "node_key": "sw", -# "state_class": None, -# "entity_category": EntityCategory.DIAGNOSTIC, -# }, -# "cbb_consumption_w": { -# "name": "CBB - Consumption Energy (Computed)", -# "name_cs": "CBB - Spotřeba (Vypočítaná)", -# "device_class": SensorDeviceClass.POWER, -# "unit_of_measurement": "W", -# "node_id": None, -# "node_key": None, -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "dc_in_fv_i1": { -# "name": "Panels Current String 1", -# "name_cs": "Proud panelů string 1", -# "device_class": SensorDeviceClass.CURRENT, -# "unit_of_measurement": "A", -# "node_id": "dc_in", -# "node_key": "fv_i1", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "dc_in_fv_i2": { -# "name": "Panels Current String 2", -# "name_cs": "Proud panelů string 2", -# "device_class": SensorDeviceClass.CURRENT, -# "unit_of_measurement": "A", -# "node_id": "dc_in", -# "node_key": "fv_i2", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "dc_in_fv_v1": { -# "name": "Panels Voltage String 1", -# "name_cs": "Napětí panelů string 1", -# "device_class": SensorDeviceClass.VOLTAGE, -# "unit_of_measurement": "V", -# "node_id": "dc_in", -# "node_key": "fv_v1", -# "state_class": SensorStateClass.MEASUREMENT, -# }, -# "dc_in_fv_v2": { -# "name": "Panels Voltage String 2", -# "name_cs": "Napětí panelů string 2", -# "device_class": SensorDeviceClass.VOLTAGE, -# "unit_of_measurement": "V", -# "node_id": "dc_in", -# "node_key": "fv_v2", -# "state_class": SensorStateClass.MEASUREMENT, -# }, +import logging +from typing import Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass + +from custom_components.oig_cloud.sensors.SENSOR_TYPES_AC_IN import SENSOR_TYPES_AC_IN +from custom_components.oig_cloud.sensors.SENSOR_TYPES_AC_OUT import SENSOR_TYPES_AC_OUT +from custom_components.oig_cloud.sensors.SENSOR_TYPES_ACTUAL import SENSOR_TYPES_ACTUAL +from custom_components.oig_cloud.sensors.SENSOR_TYPES_BATT import SENSOR_TYPES_BATT +from custom_components.oig_cloud.sensors.SENSOR_TYPES_BOILER import SENSOR_TYPES_BOILER +from custom_components.oig_cloud.sensors.SENSOR_TYPES_BOX import SENSOR_TYPES_BOX +from custom_components.oig_cloud.sensors.SENSOR_TYPES_CHMU import SENSOR_TYPES_CHMU +from custom_components.oig_cloud.sensors.SENSOR_TYPES_COMPUTED import ( + SENSOR_TYPES_COMPUTED, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_DC_IN import SENSOR_TYPES_DC_IN +from custom_components.oig_cloud.sensors.SENSOR_TYPES_EXTENDED_BATT import ( + SENSOR_TYPES_EXTENDED_BATT, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_EXTENDED_FVE import ( + SENSOR_TYPES_EXTENDED_FVE, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_EXTENDED_GRID import ( + SENSOR_TYPES_EXTENDED_GRID, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_EXTENDED_LOAD import ( + SENSOR_TYPES_EXTENDED_LOAD, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_MISC import SENSOR_TYPES_MISC +from custom_components.oig_cloud.sensors.SENSOR_TYPES_SHIELD import SENSOR_TYPES_SHIELD +from custom_components.oig_cloud.sensors.SENSOR_TYPES_SOLAR_FORECAST import ( + SENSOR_TYPES_SOLAR_FORECAST, +) +from custom_components.oig_cloud.sensors.SENSOR_TYPES_SPOT import SENSOR_TYPES_SPOT +from custom_components.oig_cloud.sensors.SENSOR_TYPES_STATISTICS import ( + SENSOR_TYPES_STATISTICS, +) + +_LOGGER = logging.getLogger(__name__) + +SENSOR_TYPES: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = {} +SENSOR_TYPES.update(SENSOR_TYPES_COMPUTED) +SENSOR_TYPES.update(SENSOR_TYPES_AC_IN) +SENSOR_TYPES.update(SENSOR_TYPES_DC_IN) +SENSOR_TYPES.update(SENSOR_TYPES_BOX) +SENSOR_TYPES.update(SENSOR_TYPES_BOILER) +SENSOR_TYPES.update(SENSOR_TYPES_BATT) +SENSOR_TYPES.update(SENSOR_TYPES_ACTUAL) +SENSOR_TYPES.update(SENSOR_TYPES_AC_OUT) +SENSOR_TYPES.update(SENSOR_TYPES_MISC) +SENSOR_TYPES.update(SENSOR_TYPES_EXTENDED_BATT) +SENSOR_TYPES.update(SENSOR_TYPES_EXTENDED_FVE) +SENSOR_TYPES.update(SENSOR_TYPES_EXTENDED_GRID) +SENSOR_TYPES.update(SENSOR_TYPES_EXTENDED_LOAD) +SENSOR_TYPES.update(SENSOR_TYPES_SOLAR_FORECAST) +SENSOR_TYPES.update(SENSOR_TYPES_STATISTICS) +SENSOR_TYPES.update(SENSOR_TYPES_SPOT) +SENSOR_TYPES.update(SENSOR_TYPES_CHMU) +SENSOR_TYPES.update(SENSOR_TYPES_SHIELD) +STATISTICS_SENSOR_TYPES = SENSOR_TYPES_STATISTICS + +_LOGGER.debug("Loaded %s sensor types total", len(SENSOR_TYPES)) diff --git a/custom_components/oig_cloud/sensors/README.md b/custom_components/oig_cloud/sensors/README.md new file mode 100644 index 00000000..75be9b19 --- /dev/null +++ b/custom_components/oig_cloud/sensors/README.md @@ -0,0 +1,245 @@ +# OIG Cloud Sensors - Dokumentace + +## Přehled + +Senzory jsou rozděleny do 17 SENSOR_TYPES souborů podle funkční oblasti. + +## Device Mapping + +Každý senzor má field `device_mapping`, který určuje, ke kterému zařízení bude přiřazen v Home Assistantu. + +### Dostupné zařízení + +1. **`"main"`** - Hlavní OIG zařízení + - Identifier: `("oig_cloud", box_id)` + - Název: `OIG Cloud {box_id}` + - Pro základní data a computed senzory + +2. **`"analytics"`** - Analytics & Predictions + - Identifier: `("oig_cloud_analytics", box_id)` + - Název: `Analytics & Predictions {box_id}` + - Pro statistics, forecasts, predictions, pricing + +3. **`"shield"`** - ServiceShield + - Identifier: `("oig_cloud_shield", box_id)` + - Název: `ServiceShield {box_id}` + - Pro shield monitoring senzory + +### Mapování kategorií + +| Kategorie | Device Mapping | Popis | +|-----------|---------------|-------| +| `data` | `main` | Základní data z API | +| `computed` | `main` | Vypočítané hodnoty | +| `extended` | `main` | Rozšířené metriky | +| `notification` | `main` | Systémové notifikace | +| `statistics` | `analytics` | Historická statistika | +| `solar_forecast` | `analytics` | Solární předpovědi | +| `battery_prediction` | `analytics` | Predikce baterie | +| `grid_charging_plan` | `analytics` | Plán nabíjení ze sítě | +| `pricing` | `analytics` | Spotové ceny | +| `shield` | `shield` | ServiceShield monitoring | + +## Struktura SENSOR_TYPES souboru + +```python +SENSOR_TYPES_EXAMPLE: Dict[str, Dict[str, Any]] = { + "sensor_name": { + "name": "Sensor Name (EN)", + "name_cs": "Název senzoru (CZ)", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "node_id": "actual", # nebo None pro computed + "node_key": "value_key", # nebo None pro computed + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", # kategorie senzoru + "device_mapping": "main", # NOVÉ: určuje device přiřazení + }, +} +``` + +### Povinná pole + +- `name`: Anglický název senzoru +- `name_cs`: Český název senzoru +- `sensor_type_category`: Kategorie senzoru (data, computed, extended, atd.) +- **`device_mapping`**: Mapování na zařízení (`"main"`, `"analytics"`, nebo `"shield"`) + +### Volitelná pole + +- `device_class`: Home Assistant device class (POWER, ENERGY, atd.) +- `unit_of_measurement`: Jednotka měření +- `node_id`: ID uzlu v API datech (None pro computed) +- `node_key`: Klíč hodnoty v uzlu (None pro computed) +- `state_class`: State class (MEASUREMENT, TOTAL, atd.) +- `entity_category`: Entity kategorie (CONFIG, DIAGNOSTIC, None) +- `icon`: Custom ikona (pokud není device_class) + +## Helper funkce + +### `get_device_info_for_sensor()` + +```python +def get_device_info_for_sensor( + sensor_config: Dict[str, Any], + box_id: str, + main_device_info: Dict[str, Any], + analytics_device_info: Dict[str, Any], + shield_device_info: Dict[str, Any], +) -> Dict[str, Any]: + """Vrací správný device_info pro senzor podle device_mapping.""" +``` + +**Použití:** + +```python +device_info = get_device_info_for_sensor( + sensor_config=config, + box_id="2206237016", + main_device_info=main_device_info, + analytics_device_info=analytics_device_info, + shield_device_info=shield_device_info, +) +``` + +## Příklady + +### Data senzor (main device) + +```python +"actual_aci_wr": { + "name": "Grid Load Line 1 (live)", + "name_cs": "Síť - zátěž fáze 1 (live)", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "node_id": "actual", + "node_key": "aci_wr", + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", # ← na hlavní zařízení +}, +``` + +### Statistics senzor (analytics device) + +```python +"daily_fve_production": { + "name": "Daily FVE Production", + "name_cs": "Denní výroba FVE", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "statistics", + "device_mapping": "analytics", # ← na analytics zařízení +}, +``` + +### Shield senzor (shield device) + +```python +"shield_last_communication": { + "name": "Last Communication", + "name_cs": "Poslední komunikace", + "device_class": SensorDeviceClass.TIMESTAMP, + "node_id": None, + "node_key": None, + "sensor_type_category": "shield", + "device_mapping": "shield", # ← na shield zařízení +}, +``` + +## Pravidla + +1. **Každý senzor MUSÍ mít `device_mapping`** - bez tohoto pole nebude senzor správně přiřazen +2. **Device mapping MUSÍ odpovídat kategorii** - viz tabulka mapování výše +3. **Entity ID se NIKDY NEMĚNÍ** - formát `sensor.oig_{box_id}_{sensor_type}` je IMMUTABLE +4. **Fallback na "main"** - pokud device_mapping chybí, použije se "main" + +## Změny v refaktoru (Fáze 2) + +### Co bylo přidáno: +- ✅ Field `device_mapping` do všech 17 SENSOR_TYPES souborů +- ✅ Helper funkce `get_device_info_for_sensor()` v sensor.py +- ✅ Automatické mapování podle kategorie +- ✅ Dokumentace v tomto README.md + +### Co se NEZMĚNILO: +- ✅ Entity ID formát - pořád `sensor.oig_{box_id}_{sensor_type}` +- ✅ Device identifiers - pořád stejné +- ✅ Sensor konfigurace - pouze přidáno 1 nové pole +- ✅ API compatibility - 100% zachováno + +## Testing + +### Validace device_mapping + +```python +# V pytest testu +def test_all_sensors_have_device_mapping(): + """Všechny senzory musí mít device_mapping.""" + from custom_components.oig_cloud.sensors.sensor_types import SENSOR_TYPES + + for sensor_type, config in SENSOR_TYPES.items(): + assert "device_mapping" in config, f"{sensor_type} nemá device_mapping" + assert config["device_mapping"] in ["main", "analytics", "shield"] +``` + +### Validace mapování podle kategorie + +```python +CATEGORY_TO_DEVICE = { + "data": "main", + "computed": "main", + "extended": "main", + "notification": "main", + "statistics": "analytics", + "solar_forecast": "analytics", + "battery_prediction": "analytics", + "grid_charging_plan": "analytics", + "pricing": "analytics", + "shield": "shield", +} + +def test_device_mapping_matches_category(): + """Device mapping musí odpovídat kategorii.""" + from custom_components.oig_cloud.sensors.sensor_types import SENSOR_TYPES + + for sensor_type, config in SENSOR_TYPES.items(): + category = config.get("sensor_type_category") + expected = CATEGORY_TO_DEVICE[category] + actual = config.get("device_mapping") + + assert actual == expected, ( + f"{sensor_type}: expected device_mapping='{expected}' " + f"for category='{category}', got '{actual}'" + ) +``` + +## FAQ + +### Proč device_mapping? + +Před refaktorem bylo device přiřazení rozházené v sensor.py. Nyní je explicitně v konfiguraci senzoru, což je přehlednější a testovatelné. + +### Co když přidám nový senzor? + +Přidej `device_mapping` podle kategorie: +- Basic data → `"main"` +- Analytics/stats → `"analytics"` +- Shield monitoring → `"shield"` + +### Můžu změnit device_mapping existujícího senzoru? + +**NE!** To by změnilo entity_id a uživatelé by přišli o historická data. Device mapping je IMMUTABLE po prvním nasazení. + +### Co když zapomenu device_mapping? + +Helper funkce použije fallback na `"main"`. Ale doporuč ujeme vždy explicitně zadat. + +--- + +**Verze:** Fáze 2 Device Mapping Refactor +**Datum:** 23. října 2025 +**Autor:** OIG Cloud Integration Team diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py old mode 100644 new mode 100755 index cbd7c138..19fcda2a --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_ACTUAL.py @@ -1,82 +1,113 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import UnitOfPower -SENSOR_TYPES_ACTUAL: Dict[ - str, Dict[str, str | SensorDeviceClass | SensorStateClass] -] = { +SENSOR_TYPES_ACTUAL: Dict[str, Dict[str, Any]] = { "actual_aci_wr": { "name": "Grid Load Line 1 (live)", "name_cs": "Síť - zátěž fáze 1 (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "aci_wr", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_aci_wr", }, "actual_aci_ws": { "name": "Grid Load Line 2 (live)", "name_cs": "Síť - zátěž fáze 2 (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "aci_ws", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_aci_ws", }, "actual_aci_wt": { "name": "Grid Load Line 3 (live)", "name_cs": "Síť - zátěž fáze 3 (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "aci_wt", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_aci_wt", }, "actual_aci_wtotal": { "name": "Grid Load Total (live)", "name_cs": "Síť - Zátěž celkem (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", }, "actual_aco_p": { "name": "Load Total (live)", "name_cs": "Zátěž celkem (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "aco_p", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_aco_p", }, "actual_fv_p1": { "name": "Panels Output String 1 (live)", "name_cs": "Výkon panelů string 1 (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "fv_p1", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_fv_p1", }, "actual_fv_p2": { "name": "Panels Output String 2 (live)", "name_cs": "Výkon panelů string 2 (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "fv_p2", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_fv_p2", }, "actual_fv_total": { "name": "Panels Output Total (live)", "name_cs": "Výkon panelů celkem (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "actual_viz": { + "name": "viz", + "name_cs": "viz", + "device_class": None, + "unit_of_measurement": None, + "node_id": "actual", + "node_key": "viz", + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_actual_viz", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_IN.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_IN.py old mode 100644 new mode 100755 index 3337a3e1..6f09725e --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_IN.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_IN.py @@ -1,98 +1,131 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import ( + UnitOfElectricPotential, + UnitOfEnergy, + UnitOfFrequency, + UnitOfPower, +) -SENSOR_TYPES_AC_IN: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = { +SENSOR_TYPES_AC_IN: Dict[str, Dict[str, Any]] = { "ac_in_ac_ad": { "name": "Grid Consumption Today", "name_cs": "Dnešní odběr ze sítě", "device_class": SensorDeviceClass.ENERGY, - "unit_of_measurement": "Wh", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, "node_id": "ac_in", "node_key": "ac_ad", + "local_entity_suffix": "tbl_ac_in_ac_ad", "state_class": SensorStateClass.TOTAL_INCREASING, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_ac_pd": { "name": "Grid Delivery Today", "name_cs": "Dnešní dodávka do sítě", "device_class": SensorDeviceClass.ENERGY, - "unit_of_measurement": "Wh", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, "node_id": "ac_in", "node_key": "ac_pd", + "local_entity_suffix": "tbl_ac_in_ac_pd", "state_class": SensorStateClass.TOTAL_INCREASING, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_f": { "name": "Frequency", "name_cs": "Frekvence sítě", "device_class": SensorDeviceClass.FREQUENCY, - "unit_of_measurement": "Hz", + "unit_of_measurement": UnitOfFrequency.HERTZ, "node_id": "ac_in", "node_key": "aci_f", + "local_entity_suffix": "tbl_ac_in_aci_f", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_vr": { "name": "Grid Voltage Line 1", "name_cs": "Síť - Napětí fáze 1", "device_class": SensorDeviceClass.VOLTAGE, - "unit_of_measurement": "V", + "unit_of_measurement": UnitOfElectricPotential.VOLT, "node_id": "ac_in", "node_key": "aci_vr", + "local_entity_suffix": "tbl_ac_in_aci_vr", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_vs": { "name": "Grid Voltage Line 2", "name_cs": "Síť - Napětí fáze 2", "device_class": SensorDeviceClass.VOLTAGE, - "unit_of_measurement": "V", + "unit_of_measurement": UnitOfElectricPotential.VOLT, "node_id": "ac_in", "node_key": "aci_vs", + "local_entity_suffix": "tbl_ac_in_aci_vs", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_vt": { "name": "Grid Voltage Line 3", "name_cs": "Síť - Napětí fáze 3", "device_class": SensorDeviceClass.VOLTAGE, - "unit_of_measurement": "V", + "unit_of_measurement": UnitOfElectricPotential.VOLT, "node_id": "ac_in", "node_key": "aci_vt", + "local_entity_suffix": "tbl_ac_in_aci_vt", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_wr": { "name": "Grid Load Line 1", "name_cs": "Síť - zátěž fáze 1", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "ac_in", "node_key": "aci_wr", + "local_entity_suffix": "tbl_ac_in_aci_wr", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_ws": { "name": "Grid Load Line 2", "name_cs": "Síť - zátěž fáze 2", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "ac_in", "node_key": "aci_ws", + "local_entity_suffix": "tbl_ac_in_aci_ws", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_wt": { "name": "Grid Load Line 3", "name_cs": "Síť - zátěž fáze 3", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "ac_in", "node_key": "aci_wt", + "local_entity_suffix": "tbl_ac_in_aci_wt", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_in_aci_wtotal": { "name": "Grid Load Total", "name_cs": "Síť - Zátěž celkem", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, - } -} \ No newline at end of file + "sensor_type_category": "computed", + "device_mapping": "main", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py old mode 100644 new mode 100755 index 5126e552..39d5b062 --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_AC_OUT.py @@ -1,55 +1,67 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import UnitOfEnergy, UnitOfPower -SENSOR_TYPES_AC_OUT: Dict[ - str, Dict[str, str | SensorDeviceClass | SensorStateClass] -] = { +SENSOR_TYPES_AC_OUT: Dict[str, Dict[str, Any]] = { # Oprava: Any místo union type "ac_out_aco_p": { "name": "Load Total", "name_cs": "Zátěž celkem", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, # Konstanta místo stringu "node_id": "ac_out", "node_key": "aco_p", + "local_entity_suffix": "tbl_ac_out_aco_p", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_out_aco_pr": { "name": "Load Line 1", "name_cs": "Zátěž fáze 1", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, # Konstanta místo stringu "node_id": "ac_out", "node_key": "aco_pr", + "local_entity_suffix": "tbl_ac_out_aco_pr", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_out_aco_ps": { "name": "Load Line 2", "name_cs": "Zátěž fáze 2", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, # Konstanta místo stringu "node_id": "ac_out", "node_key": "aco_ps", + "local_entity_suffix": "tbl_ac_out_aco_ps", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "ac_out_aco_pt": { "name": "Load Line 3", "name_cs": "Zátěž fáze 3", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, # Konstanta místo stringu "node_id": "ac_out", "node_key": "aco_pt", + "local_entity_suffix": "tbl_ac_out_aco_pt", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, - "ac_out_en_day": { + "ac_out_en_day": { "name": "Consumption Today", "name_cs": "Dnešní spotřeba", "device_class": SensorDeviceClass.ENERGY, - "unit_of_measurement": "Wh", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, "node_id": "ac_out", "node_key": "en_day", + "local_entity_suffix": "tbl_ac_out_en_day", "state_class": SensorStateClass.TOTAL_INCREASING, + "sensor_type_category": "data", + "device_mapping": "main", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BATT.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BATT.py old mode 100644 new mode 100755 index e2b35357..ad8e89c4 --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BATT.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BATT.py @@ -1,44 +1,214 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import PERCENTAGE, UnitOfEnergy, UnitOfPower +from homeassistant.helpers.entity import EntityCategory -SENSOR_TYPES_BATT: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = { +SENSOR_TYPES_BATT: Dict[str, Dict[str, Any]] = { + # Live hodnoty "batt_bat_c": { "name": "Battery Percent", "name_cs": "Nabití baterie (procenta, live)", "device_class": SensorDeviceClass.BATTERY, - "unit_of_measurement": "%", + "unit_of_measurement": PERCENTAGE, "node_id": "actual", "node_key": "bat_c", + "local_entity_suffix": "tbl_actual_bat_c", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, "batt_batt_comp_p": { "name": "Battery Power", "name_cs": "Výkon baterie (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "actual", "node_key": "bat_p", + "local_entity_suffix": "tbl_actual_bat_p", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", }, + "batt_bat_min": { + "name": "Battery Minimum SOC", + "name_cs": "Minimální nabití baterie (nastavení)", + "device_class": SensorDeviceClass.BATTERY, + "unit_of_measurement": PERCENTAGE, + "node_id": "batt_prms", + "node_key": "bat_min", + "local_entity_suffix": "tbl_batt_prms_bat_min", + "state_class": SensorStateClass.MEASUREMENT, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", + }, + # Výkon oddělený na nabíjení a vybíjení "batt_batt_comp_p_charge": { "name": "Battery Charge Power", "name_cs": "Výkon baterie - nabíjení (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", }, "batt_batt_comp_p_discharge": { "name": "Battery Discharge Power", "name_cs": "Výkon baterie - vybíjení (live)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, - }, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + # Energie nabíjení/vybíjení CELKEM + "computed_batt_charge_energy_today": { + "name": "Battery Charge Energy Today", + "name_cs": "Energie nabíjení baterie dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_apd", + }, + "computed_batt_discharge_energy_today": { + "name": "Battery Discharge Energy Today", + "name_cs": "Energie vybíjení baterie dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_and", + }, + "computed_batt_charge_energy_month": { + "name": "Battery Charge Energy This Month", + "name_cs": "Energie nabíjení baterie tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "computed_batt_discharge_energy_month": { + "name": "Battery Discharge Energy This Month", + "name_cs": "Energie vybíjení baterie tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "computed_batt_charge_energy_year": { + "name": "Battery Charge Energy This Year", + "name_cs": "Energie nabíjení baterie tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_discharge_energy_year": { + "name": "Battery Discharge Energy This Year", + "name_cs": "Energie vybíjení baterie tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_am", + }, + # Energie nabíjení Z FVE + "computed_batt_charge_fve_energy_today": { + "name": "Battery Charge Energy from Solar Today", + "name_cs": "Energie nabíjení baterie ze slunce dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_fve_energy_month": { + "name": "Battery Charge Energy from Solar This Month", + "name_cs": "Energie nabíjení baterie ze slunce tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_fve_energy_year": { + "name": "Battery Charge Energy from Solar This Year", + "name_cs": "Energie nabíjení baterie ze slunce tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_am", + }, + # Energie nabíjení ZE SÍTĚ + "computed_batt_charge_grid_energy_today": { + "name": "Battery Charge Energy from Grid Today", + "name_cs": "Energie nabíjení baterie ze sítě dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_grid_energy_month": { + "name": "Battery Charge Energy from Grid This Month", + "name_cs": "Energie nabíjení baterie ze sítě tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_am", + }, + "computed_batt_charge_grid_energy_year": { + "name": "Battery Charge Energy from Grid This Year", + "name_cs": "Energie nabíjení baterie ze sítě tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ay", + }, } diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOILER.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOILER.py old mode 100644 new mode 100755 index 6c5efdad..12d07eab --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOILER.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOILER.py @@ -1,42 +1,47 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass -from homeassistant.const import EntityCategory - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import EntityCategory, UnitOfEnergy, UnitOfPower -SENSOR_TYPES_BOILER: Dict[ - str, Dict[str, str | SensorDeviceClass | SensorStateClass] -] = { +SENSOR_TYPES_BOILER: Dict[str, Dict[str, Any]] = { "boiler_current_cbb_w": { "name": "Boiler - Current Energy (CBB)", "name_cs": "Bojler - Aktuální výkon (CBB)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "boiler", "node_key": "p", + "local_entity_suffix": "tbl_boiler_p", "state_class": SensorStateClass.MEASUREMENT, "requires": ["boiler"], + "sensor_type_category": "data", + "device_mapping": "main", }, "boiler_current_w": { "name": "Boiler - Current Energy (Computed)", "name_cs": "Bojler - Aktuální výkon (Vypočítaná)", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, "requires": ["boiler"], + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_boiler_p", }, "boiler_day_w": { "name": "Boiler - Today Energy", "name_cs": "Bojler - Dnešní uložení", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, "node_id": "boiler", "node_key": "w", + "local_entity_suffix": "tbl_boiler_w", "state_class": SensorStateClass.TOTAL_INCREASING, "requires": ["boiler"], + "sensor_type_category": "data", + "device_mapping": "main", }, "boiler_manual_mode": { "name": "Boiler - Manual mode", @@ -45,9 +50,14 @@ "unit_of_measurement": None, "node_id": "boiler_prms", "node_key": "manual", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_boiler_prms_manual", "entity_category": EntityCategory.DIAGNOSTIC, "state_class": None, "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", }, "boiler_ssr1": { "name": "Boiler - SSR Rele 1", @@ -56,9 +66,14 @@ "unit_of_measurement": None, "node_id": "boiler_prms", "node_key": "ssr0", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_boiler_prms_ssr0", "entity_category": EntityCategory.DIAGNOSTIC, "state_class": None, "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", }, "boiler_ssr2": { "name": "Boiler - SSR Rele 2", @@ -67,9 +82,14 @@ "unit_of_measurement": None, "node_id": "boiler_prms", "node_key": "ssr1", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_boiler_prms_ssr1", "entity_category": EntityCategory.DIAGNOSTIC, "state_class": None, "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", }, "boiler_ssr3": { "name": "Boiler - SSR Rele 3", @@ -78,8 +98,42 @@ "unit_of_measurement": None, "node_id": "boiler_prms", "node_key": "ssr2", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_boiler_prms_ssr2", + "entity_category": EntityCategory.DIAGNOSTIC, + "state_class": None, + "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", + }, + "boiler_is_use": { + "name": "Boiler - is use", + "name_cs": "Bojler - K dispozici", + "device_class": SensorDeviceClass.ENUM, + "unit_of_measurement": None, + "node_id": "boiler_prms", + "node_key": "ison", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_boiler_prms_ison", "entity_category": EntityCategory.DIAGNOSTIC, "state_class": None, "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", + }, + "boiler_install_power": { + "name": "Boiler - install power", + "name_cs": "Bojler - instalovaný výkon", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": "boiler_prms", + "node_key": "p_set", + "local_entity_suffix": "tbl_boiler_prms_p_set", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOX.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOX.py old mode 100644 new mode 100755 index 6c98f256..36bab4b8 --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOX.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_BOX.py @@ -1,20 +1,21 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass -from homeassistant.const import EntityCategory - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfTemperature -SENSOR_TYPES_BOX: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = { +SENSOR_TYPES_BOX: Dict[str, Dict[str, Any]] = { "box_humid": { "name": "Humidity", "name_cs": "Vlhkost v boxu", "device_class": SensorDeviceClass.HUMIDITY, - "unit_of_measurement": "%", + "unit_of_measurement": PERCENTAGE, "node_id": "box", "node_key": "humid", + "local_entity_suffix": "tbl_box_humid", "state_class": SensorStateClass.MEASUREMENT, "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", }, "box_prms_mode": { "name": "Operation Mode", @@ -23,16 +24,23 @@ "unit_of_measurement": None, "node_id": "box_prms", "node_key": "mode", + "local_entity_suffix": "tbl_box_prms_mode", "state_class": None, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", }, "box_temp": { "name": "Temperature", "name_cs": "Teplota v boxu", "device_class": SensorDeviceClass.TEMPERATURE, - "unit_of_measurement": "°C", + "unit_of_measurement": UnitOfTemperature.CELSIUS, "node_id": "box", "node_key": "temp", + "local_entity_suffix": "tbl_box_temp", "state_class": SensorStateClass.MEASUREMENT, "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_CHMU.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_CHMU.py new file mode 100644 index 00000000..2180474e --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_CHMU.py @@ -0,0 +1,35 @@ +"""Definice typů senzorů pro ČHMÚ meteorologická varování.""" + +from typing import Any, Dict + +from homeassistant.components.sensor import SensorStateClass + +# Typy senzorů pro ČHMÚ varování +SENSOR_TYPES_CHMU: Dict[str, Dict[str, Any]] = { + "chmu_warning_level": { + "name": "ČHMÚ Warning Level (Local)", + "name_cs": "Úroveň varování ČHMÚ (lokální)", + "icon": "mdi:alert-octagon", + "unit_of_measurement": None, + "device_class": None, + "state_class": SensorStateClass.MEASUREMENT, + "category": "chmu_warnings", + "sensor_type_category": "chmu_warnings", + "device_mapping": "analytics", + "description": "Úroveň meteorologického varování pro vaši lokalitu (0=žádné, 1=Minor/žluté, 2=Moderate/oranžové, 3=Severe/červené, 4=Extreme/fialové)", + "enabled_by_default": False, + }, + "chmu_warning_level_global": { + "name": "ČHMÚ Warning Level (Czech Republic)", + "name_cs": "Úroveň varování ČHMÚ (celá ČR)", + "icon": "mdi:alert-octagon-outline", + "unit_of_measurement": None, + "device_class": None, + "state_class": SensorStateClass.MEASUREMENT, + "category": "chmu_warnings", + "sensor_type_category": "chmu_warnings", + "device_mapping": "analytics", + "description": "Nejvyšší úroveň meteorologického varování v celé České republice (0=žádné, 1=Minor/žluté, 2=Moderate/oranžové, 3=Severe/červené, 4=Extreme/fialové)", + "enabled_by_default": False, + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_COMPUTED.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_COMPUTED.py new file mode 100644 index 00000000..9dfa2187 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_COMPUTED.py @@ -0,0 +1,202 @@ +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import PERCENTAGE, UnitOfEnergy, UnitOfPower + +SENSOR_TYPES_COMPUTED: Dict[str, Dict[str, Any]] = { + # Live hodnoty + "batt_bat_c": { + "name": "Battery Percent", + "name_cs": "Nabití baterie (procenta, live)", + "device_class": SensorDeviceClass.BATTERY, + "unit_of_measurement": PERCENTAGE, + "node_id": "actual", + "node_key": "bat_c", + "local_entity_suffix": "tbl_actual_bat_c", + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + }, + "batt_batt_comp_p": { + "name": "Battery Power", + "name_cs": "Výkon baterie (live)", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "node_id": "actual", + "node_key": "bat_p", + "local_entity_suffix": "tbl_actual_bat_p", + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + }, + # Výkon oddělený na nabíjení a vybíjení + "batt_batt_comp_p_charge": { + "name": "Battery Charge Power", + "name_cs": "Výkon baterie - nabíjení (live)", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "batt_batt_comp_p_discharge": { + "name": "Battery Discharge Power", + "name_cs": "Výkon baterie - vybíjení (live)", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": UnitOfPower.WATT, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + # Energie nabíjení/vybíjení CELKEM + "computed_batt_charge_energy_today": { + "name": "Battery Charge Energy Today", + "name_cs": "Energie nabíjení baterie dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_apd", + }, + "computed_batt_discharge_energy_today": { + "name": "Battery Discharge Energy Today", + "name_cs": "Energie vybíjení baterie dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_and", + }, + "computed_batt_charge_energy_month": { + "name": "Battery Charge Energy This Month", + "name_cs": "Energie nabíjení baterie tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_discharge_energy_month": { + "name": "Battery Discharge Energy This Month", + "name_cs": "Energie vybíjení baterie tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_energy_year": { + "name": "Battery Charge Energy This Year", + "name_cs": "Energie nabíjení baterie tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_discharge_energy_year": { + "name": "Battery Discharge Energy This Year", + "name_cs": "Energie vybíjení baterie tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + # Energie nabíjení Z FVE + "computed_batt_charge_fve_energy_today": { + "name": "Battery Charge Energy from Solar Today", + "name_cs": "Energie nabíjení baterie ze slunce dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_fve_energy_month": { + "name": "Battery Charge Energy from Solar This Month", + "name_cs": "Energie nabíjení baterie ze slunce tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_fve_energy_year": { + "name": "Battery Charge Energy from Solar This Year", + "name_cs": "Energie nabíjení baterie ze slunce tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + # Energie nabíjení ZE SÍTĚ + "computed_batt_charge_grid_energy_today": { + "name": "Battery Charge Energy from Grid Today", + "name_cs": "Energie nabíjení baterie ze sítě dnes", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ad", + }, + "computed_batt_charge_grid_energy_month": { + "name": "Battery Charge Energy from Grid This Month", + "name_cs": "Energie nabíjení baterie ze sítě tento měsíc", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_am", + }, + "computed_batt_charge_grid_energy_year": { + "name": "Battery Charge Energy from Grid This Year", + "name_cs": "Energie nabíjení baterie ze sítě tento rok", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "node_id": None, + "node_key": None, + "state_class": SensorStateClass.TOTAL, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_ay", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_DC_IN.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_DC_IN.py old mode 100644 new mode 100755 index 306257fc..2b6e25a0 --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_DC_IN.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_DC_IN.py @@ -1,53 +1,66 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import PERCENTAGE, UnitOfEnergy, UnitOfPower -SENSOR_TYPES_DC_IN: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = { +SENSOR_TYPES_DC_IN: Dict[str, Dict[str, Any]] = { "dc_in_fv_ad": { "name": "PV Output Today", "name_cs": "Dnešní výroba", "device_class": SensorDeviceClass.ENERGY, - "unit_of_measurement": "Wh", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, "node_id": "dc_in", "node_key": "fv_ad", "state_class": SensorStateClass.TOTAL_INCREASING, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_ad", }, "dc_in_fv_p1": { "name": "Panels Output String 1", "name_cs": "Výkon panelů string 1", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "dc_in", "node_key": "fv_p1", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_p1", }, "dc_in_fv_p2": { "name": "Panels Output String 2", "name_cs": "Výkon panelů string 2", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "dc_in", "node_key": "fv_p2", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_p2", }, "dc_in_fv_proc": { "name": "Panels Output Percent", "name_cs": "Výkon panelů (procenta)", "device_class": SensorDeviceClass.POWER_FACTOR, - "unit_of_measurement": "%", + "unit_of_measurement": PERCENTAGE, "node_id": "dc_in", "node_key": "fv_proc", "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_proc", }, "dc_in_fv_total": { "name": "Panels Output Total", "name_cs": "Výkon panelů celkem", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": None, "node_key": None, "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "computed", + "device_mapping": "main", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_BATT.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_BATT.py new file mode 100755 index 00000000..a9fdcfc2 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_BATT.py @@ -0,0 +1,118 @@ +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import ( + PERCENTAGE, + UnitOfElectricCurrent, + UnitOfElectricPotential, + UnitOfEnergy, + UnitOfTemperature, +) +from homeassistant.helpers.entity import EntityCategory + +SENSOR_TYPES_EXTENDED_BATT: Dict[str, Dict[str, Any]] = { + "extended_battery_voltage": { + "name": "Extended Battery Voltage", + "name_cs": "Napětí baterie", + "unit_of_measurement": UnitOfElectricPotential.VOLT, + "device_class": SensorDeviceClass.VOLTAGE, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_v", + }, + "extended_battery_current": { + "name": "Extended Battery Current", + "name_cs": "Proud baterie", + "unit_of_measurement": UnitOfElectricCurrent.AMPERE, + "device_class": SensorDeviceClass.CURRENT, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_i", + }, + "extended_battery_capacity": { + "name": "Extended Battery Capacity", + "name_cs": "Rozšířená kapacita baterie", + "unit_of_measurement": PERCENTAGE, + "device_class": SensorDeviceClass.BATTERY, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_c", + }, + "extended_battery_temperature": { + "name": "Extended Battery Temperature", + "name_cs": "Teplota baterie", + "unit_of_measurement": UnitOfTemperature.CELSIUS, + "device_class": SensorDeviceClass.TEMPERATURE, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_batt_bat_t", + }, + "usable_battery_capacity": { + "name": "Usable Battery Capacity", + "name_cs": "Baterie - využitelná kapacita", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "missing_battery_kwh": { + "name": "Missing Energy to 100%", + "name_cs": "Baterie - k nabití", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "remaining_usable_capacity": { + "name": "Remaining Usable Capacity", + "name_cs": "Baterie - zbývající kapacita", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "time_to_full": { + "name": "Time to Full", + "name_cs": "Baterie - plné nabití", + "unit_of_measurement": None, + "device_class": None, + "state_class": None, + "node_id": None, + "node_key": None, + "sensor_type_category": "computed", + "device_mapping": "main", + }, + "time_to_empty": { + "name": "Time to Empty", + "name_cs": "Baterie - do vybití", + "unit_of_measurement": None, + "device_class": None, + "state_class": None, + "node_id": None, + "node_key": None, + "sensor_type_category": "computed", + "device_mapping": "main", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_FVE.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_FVE.py new file mode 100755 index 00000000..04045b02 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_FVE.py @@ -0,0 +1,83 @@ +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import ( + UnitOfElectricCurrent, + UnitOfElectricPotential, + UnitOfPower, +) + +SENSOR_TYPES_EXTENDED_FVE: Dict[str, Dict[str, Any]] = { + "extended_fve_voltage_1": { + "name": "Extended FVE Voltage 1", + "name_cs": "Napětí FV1", + "unit_of_measurement": UnitOfElectricPotential.VOLT, + "device_class": SensorDeviceClass.VOLTAGE, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_v1", + }, + "extended_fve_voltage_2": { + "name": "Extended FVE Voltage 2", + "name_cs": "Napětí FV2", + "unit_of_measurement": UnitOfElectricPotential.VOLT, + "device_class": SensorDeviceClass.VOLTAGE, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_v2", + }, + "extended_fve_power_1": { + "name": "Extended FVE Power 1", + "name_cs": "Rozšířený výkon FV1", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_p1", + }, + "extended_fve_power_2": { + "name": "Extended FVE Power 2", + "name_cs": "Rozšířený výkon FV2", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_p2", + }, + "extended_fve_current_1": { + "name": "Extended FVE Curren FV 1", + "name_cs": "Proud String 1", + "unit_of_measurement": UnitOfElectricCurrent.AMPERE, + "device_class": SensorDeviceClass.CURRENT, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_i1", + }, + "extended_fve_current_2": { + "name": "Extended FVE Curren FV 2", + "name_cs": "Proud String 2", + "unit_of_measurement": UnitOfElectricCurrent.AMPERE, + "device_class": SensorDeviceClass.CURRENT, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_dc_in_fv_i2", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_GRID.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_GRID.py new file mode 100755 index 00000000..38676624 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_GRID.py @@ -0,0 +1,53 @@ +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import UnitOfElectricPotential, UnitOfEnergy, UnitOfPower + +SENSOR_TYPES_EXTENDED_GRID: Dict[str, Dict[str, Any]] = { + "extended_grid_voltage": { + "name": "Extended Grid Voltage", + "name_cs": "Rozšířené napětí sítě", + "unit_of_measurement": UnitOfElectricPotential.VOLT, + "device_class": SensorDeviceClass.VOLTAGE, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + }, + "extended_grid_power": { + "name": "Extended Grid Power", + "name_cs": "Rozšířený výkon sítě", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + }, + "extended_grid_consumption": { + "name": "Extended Grid Consumption", + "name_cs": "Rozšířená spotřeba ze sítě", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL_INCREASING, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_ac_in_ac_ad", + }, + "extended_grid_delivery": { + "name": "Extended Grid Delivery", + "name_cs": "Rozšířená dodávka do sítě", + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_ac_in_ac_pd", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_LOAD.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_LOAD.py new file mode 100755 index 00000000..338bc0d3 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_EXTENDED_LOAD.py @@ -0,0 +1,43 @@ +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import UnitOfPower + +SENSOR_TYPES_EXTENDED_LOAD: Dict[str, Dict[str, Any]] = { + "extended_load_l1_power": { + "name": "Extended Load L1 Power", + "name_cs": "Rozšířený odběr fáze L1", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_ac_out_aco_pr", + }, + "extended_load_l2_power": { + "name": "Extended Load L2 Power", + "name_cs": "Rozšířený odběr fáze L2", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_ac_out_aco_ps", + }, + "extended_load_l3_power": { + "name": "Extended Load L3 Power", + "name_cs": "Rozšířený odběr fáze L3", + "unit_of_measurement": UnitOfPower.WATT, + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": None, + "node_key": None, + "sensor_type_category": "extended", + "device_mapping": "main", + "local_entity_suffix": "tbl_ac_out_aco_pt", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_MISC.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_MISC.py old mode 100644 new mode 100755 index 93d120e8..69586f44 --- a/custom_components/oig_cloud/sensors/SENSOR_TYPES_MISC.py +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_MISC.py @@ -1,12 +1,10 @@ -from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass -from homeassistant.const import EntityCategory - - -from typing import Dict +from typing import Any, Dict +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import EntityCategory, UnitOfEnergy, UnitOfPower -SENSOR_TYPES_MISC: Dict[str, Dict[str, str | SensorDeviceClass | SensorStateClass]] = { - "device_lastcall": { +SENSOR_TYPES_MISC: Dict[str, Dict[str, Any]] = { + "device_lastcall": { "name": "Last Call", "name_cs": "Poslední komunikace", "device_class": SensorDeviceClass.TIMESTAMP, @@ -15,16 +13,33 @@ "node_key": "lastcall", "state_class": None, "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_device_lastcall", + }, + "real_data_update": { + "name": "Real Data Update", + "name_cs": "Skutečná aktualizace dat", + "device_class": SensorDeviceClass.TIMESTAMP, + "unit_of_measurement": None, + "state_class": None, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "computed", + "device_mapping": "main", + "local_entity_id": "sensor.oig_local_oig_proxy_proxy_status_last_data", }, "invertor_prm1_p_max_feed_grid": { "name": "Max Feed to Grid", "name_cs": "Maximální přetoky", "device_class": SensorDeviceClass.POWER, - "unit_of_measurement": "W", + "unit_of_measurement": UnitOfPower.WATT, "node_id": "invertor_prm1", "node_key": "p_max_feed_grid", "state_class": SensorStateClass.MEASUREMENT, "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_invertor_prm1_p_max_feed_grid", }, "invertor_prms_to_grid": { "name": "Grid Delivery", @@ -34,6 +49,111 @@ "node_id": "invertor_prms", "node_key": "to_grid", "state_class": None, + "entity_category": EntityCategory.DIAGNOSTIC, "options": ["Vypnuto / Off", "Zapnuto / On", "S omezením / Limited"], + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_domains": ["sensor", "binary_sensor"], + "local_value_map": {"on": 1, "off": 0}, + "local_entity_suffix": "tbl_invertor_prms_to_grid", + }, + "installed_battery_capacity_kwh": { + "name": "Installed Battery Capacity", + "name_cs": "Baterie - instalovaná kapacita", + "device_class": SensorDeviceClass.ENERGY, + "unit_of_measurement": UnitOfEnergy.WATT_HOUR, + "state_class": SensorStateClass.MEASUREMENT, + "node_id": "box_prms", + "node_key": "p_bat", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_box_prms_p_bat", + }, + "installed_fve_power_wp": { + "name": "Installed FVE Power", + "name_cs": "FVE - Instalovaný výkon", + "device_class": SensorDeviceClass.POWER, + "unit_of_measurement": "Wp", + "state_class": SensorStateClass.MEASUREMENT, + "node_id": "box_prms", + "node_key": "p_fve", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_box_prms_p_fve", + }, + "box_prms_crct": { + "name": "Distribution Emergency Control", + "name_cs": "Krizové ovládání distribuce", + "device_class": SensorDeviceClass.ENUM, + "unit_of_measurement": None, + "state_class": None, + "node_id": "box_prms", + "node_key": "crct", + "entity_category": EntityCategory.DIAGNOSTIC, + "options": ["Vypnuto / Off", "Zapnuto / On"], + "sensor_type_category": "data", + "device_mapping": "main", + "local_entity_suffix": "tbl_box_prms_crct", + }, + # Notification sensors - nová kategorie + "latest_notification": { + "name": "Latest Notification", + "name_cs": "Poslední notifikace", + "device_class": None, + "unit_of_measurement": None, + "state_class": None, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "notification", + "device_mapping": "main", + "icon": "mdi:bell", + }, + "bypass_status": { + "name": "Bypass Status", + "name_cs": "Stav bypassu", + "device_class": SensorDeviceClass.ENUM, + "unit_of_measurement": None, + "state_class": None, + "entity_category": EntityCategory.DIAGNOSTIC, + # Dashboard/UI expects "on"/"off" strings (also used by cloud notifications parser) + "options": ["off", "on"], + "sensor_type_category": "notification", + "device_mapping": "main", + "icon": "mdi:power-settings", + "local_entity_suffix": "tbl_box_prms_bypass", + }, + "notification_count_error": { + "name": "Error Notifications Count", + "name_cs": "Počet chybových notifikací", + "device_class": None, + "unit_of_measurement": "notifications", + "state_class": SensorStateClass.MEASUREMENT, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "notification", + "device_mapping": "main", + "icon": "mdi:alert-circle", + }, + "notification_count_warning": { + "name": "Warning Notifications Count", + "name_cs": "Počet varovných notifikací", + "device_class": None, + "unit_of_measurement": "notifications", + "state_class": SensorStateClass.MEASUREMENT, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "notification", + "device_mapping": "main", + "icon": "mdi:alert", + }, + "notification_count_unread": { + "name": "Unread Notifications Count", + "name_cs": "Počet nepřečtených notifikací", + "device_class": None, + "unit_of_measurement": "notifications", + "state_class": SensorStateClass.MEASUREMENT, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "notification", + "device_mapping": "main", + "icon": "mdi:bell-badge", }, -} \ No newline at end of file +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_SHIELD.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SHIELD.py new file mode 100755 index 00000000..d30cf183 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SHIELD.py @@ -0,0 +1,56 @@ +"""Definice typů senzorů pro ServiceShield.""" + +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import EntityCategory + +# Typy senzorů pro ServiceShield monitoring +SENSOR_TYPES_SHIELD: Dict[str, Dict[str, Any]] = { + "service_shield_status": { + "name": "ServiceShield Status", + "name_cs": "Stav ServiceShield", + "unit_of_measurement": None, + "device_class": None, + "state_class": None, + "icon": "mdi:shield-check", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "shield", + "device_mapping": "shield", + }, + "service_shield_queue": { + "name": "ServiceShield Queue", + "name_cs": "Fronta ServiceShield", + "unit_of_measurement": None, + "device_class": None, + "state_class": SensorStateClass.MEASUREMENT, + "icon": "mdi:format-list-numbered", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "shield", + "device_mapping": "shield", + }, + "service_shield_activity": { + "name": "ServiceShield Activity", + "name_cs": "Aktivita ServiceShield", + "unit_of_measurement": None, + "device_class": None, + "state_class": None, + "icon": "mdi:cog", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "shield", + "device_mapping": "shield", + }, + "mode_reaction_time": { + "name": "Box Mode Reaction Time", + "name_cs": "Doba reakce změny režimu", + "unit_of_measurement": "s", + "device_class": SensorDeviceClass.DURATION, + "state_class": SensorStateClass.MEASUREMENT, + "icon": "mdi:timer-outline", + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "shield", + "device_mapping": "shield", + "description": "Průměrná doba reakce střídače na změnu režimu", + "description_cs": "Měří jak dlouho trvá změna režimu (např. Home 1 → Home UPS). Používá se pro dynamické offsety při plánovaném nabíjení.", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_SOLAR_FORECAST.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SOLAR_FORECAST.py new file mode 100755 index 00000000..1e4ba4d0 --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SOLAR_FORECAST.py @@ -0,0 +1,45 @@ +"""Definice typů senzorů pro solar forecast.""" + +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import UnitOfEnergy + +SENSOR_TYPES_SOLAR_FORECAST: Dict[str, Dict[str, Any]] = { + "solar_forecast": { + "name": "Solar Forecast Total", + "name_cs": "Solární předpověď celkem", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "icon": "mdi:solar-power", + "entity_category": None, + "suggested_display_precision": 2, + "sensor_type_category": "solar_forecast", + "device_mapping": "analytics", + }, + "solar_forecast_string1": { + "name": "Solar Forecast String 1", + "name_cs": "Solární předpověď String 1", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "icon": "mdi:solar-panel", + "entity_category": None, + "suggested_display_precision": 2, + "sensor_type_category": "solar_forecast", + "device_mapping": "analytics", + }, + "solar_forecast_string2": { + "name": "Solar Forecast String 2", + "name_cs": "Solární předpověď String 2", + "unit_of_measurement": UnitOfEnergy.KILO_WATT_HOUR, + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "icon": "mdi:solar-panel", + "entity_category": None, + "suggested_display_precision": 2, + "sensor_type_category": "solar_forecast", + "device_mapping": "analytics", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_SPOT.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SPOT.py new file mode 100755 index 00000000..dd33110f --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_SPOT.py @@ -0,0 +1,165 @@ +"""Definice typů senzorů pro spotové ceny elektřiny z OTE a ČNB.""" + +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass + +# Typy senzorů pro spotové ceny elektřiny +SENSOR_TYPES_SPOT: Dict[str, Dict[str, Any]] = { + "spot_price_current_czk_kwh": { + "name": "Current Spot Price", + "name_cs": "Aktuální spotová cena", + "icon": "mdi:flash", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální spotová cena elektřiny v CZK/kWh", + }, + "spot_price_current_eur_mwh": { + "name": "Current Spot Price EUR", + "name_cs": "Aktuální spotová cena EUR/MWh", + "icon": "mdi:flash", + "unit_of_measurement": "EUR/MWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální spotová cena elektřiny v EUR/MWh", + }, + "spot_price_today_avg": { + "name": "Today Average Price", + "name_cs": "Průměrná cena dnes", + "icon": "mdi:chart-line", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Průměrná spotová cena elektřiny pro dnešní den", + }, + "spot_price_today_min": { + "name": "Today Minimum Price", + "name_cs": "Minimální cena dnes", + "icon": "mdi:arrow-down", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Minimální spotová cena elektřiny pro dnešní den", + }, + "spot_price_today_max": { + "name": "Today Maximum Price", + "name_cs": "Maximální cena dnes", + "icon": "mdi:arrow-up", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Maximální spotová cena elektřiny pro dnešní den", + }, + "spot_price_tomorrow_avg": { + "name": "Tomorrow Average Price", + "name_cs": "Průměrná cena zítřek", + "icon": "mdi:chart-bar", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Průměrná spotová cena elektřiny pro zítřejší den", + }, + "spot_price_hourly_all": { + "name": "Hourly Prices All", + "name_cs": "Všechny hodinové ceny", + "icon": "mdi:clock-time-eight-outline", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, # OPRAVA: Monetary sensors nesmí mít measurement state_class + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Všechny dostupné hodinové spotové ceny", + }, + "eur_czk_exchange_rate": { + "name": "EUR CZK Exchange Rate", + "name_cs": "Kurz EUR/CZK", + "icon": "mdi:currency-eur", + "unit_of_measurement": "CZK/EUR", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, + "category": "spot_price", + "pricing_type": "exchange_rate", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální kurz EUR/CZK z ČNB pro přepočet spotových cen", + }, + "current_tariff": { + "name": "Current Tariff", + "name_cs": "Aktuální tarif", + "icon": "mdi:clock-time-four-outline", + "unit_of_measurement": None, + "device_class": None, + "state_class": None, + "category": "tariff", + "pricing_type": "tariff", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální tarifní pásmo NT/VT podle času a dne v týdnu", + }, + "spot_price_current_15min": { + "name": "Current Spot Price (15min)", + "name_cs": "Aktuální spotová cena (15min interval)", + "icon": "mdi:flash-outline", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, + "category": "spot_price", + "pricing_type": "spot_price_15min", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální finální cena elektřiny s 15minutovým intervalem včetně distribuce a DPH", + }, + "export_price_current_15min": { + "name": "Current Export Price (15min)", + "name_cs": "Aktuální výkupní cena (15min interval)", + "icon": "mdi:transmission-tower-export", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, + "category": "export_price", + "pricing_type": "export_price_15min", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Aktuální výkupní cena elektřiny s 15minutovým intervalem BEZ distribuce a BEZ DPH", + }, + "adjusted_spot_electricity_prices": { + "name": "Adjusted Spot Electricity Prices", + "name_cs": "Upravené spotové ceny elektřiny", + "icon": "mdi:chart-line-variant", + "unit_of_measurement": "CZK/kWh", + "device_class": SensorDeviceClass.MONETARY, + "state_class": None, + "category": "spot_price", + "pricing_type": "spot_price", + "sensor_type_category": "pricing", + "device_mapping": "analytics", + "description": "Spotové ceny s peak/off-peak označením pro optimalizaci nabíjení", + }, +} diff --git a/custom_components/oig_cloud/sensors/SENSOR_TYPES_STATISTICS.py b/custom_components/oig_cloud/sensors/SENSOR_TYPES_STATISTICS.py new file mode 100755 index 00000000..bda010fe --- /dev/null +++ b/custom_components/oig_cloud/sensors/SENSOR_TYPES_STATISTICS.py @@ -0,0 +1,356 @@ +"""Definice statistických senzorů pro OIG Cloud.""" + +from typing import Any, Dict + +from homeassistant.components.sensor import SensorDeviceClass, SensorStateClass +from homeassistant.const import PERCENTAGE, EntityCategory, UnitOfEnergy, UnitOfPower + +# Seznam statistických senzorů s jejich konfigurací +SENSOR_TYPES_STATISTICS: Dict[str, Dict[str, Any]] = { + # Základní odběr - medián za posledních 10 minut + "battery_load_median": { + "name": "Load Median 10 Minutes", + "name_cs": "Medián odběru za 10 minut", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-line", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "sampling_minutes": 10, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "description": "Medián celkového odběru domácnosti za posledních 10 minut", + }, + # Víkend vs všední den odběr po časových úsecích + "load_avg_6_8_weekday": { + "name": "Average Load 6-8h Weekday", + "name_cs": "Průměrný odběr 6-8h (všední dny)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (6, 8), + "day_type": "weekday", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_8_12_weekday": { + "name": "Average Load 8-12h Weekday", + "name_cs": "Průměrný odběr 8-12h (všední dny)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (8, 12), + "day_type": "weekday", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_12_16_weekday": { + "name": "Average Load 12-16h Weekday", + "name_cs": "Průměrný odběr 12-16h (všední dny)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (12, 16), + "day_type": "weekday", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_16_22_weekday": { + "name": "Average Load 16-22h Weekday", + "name_cs": "Průměrný odběr 16-22h (všední dny)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (16, 22), + "day_type": "weekday", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_22_6_weekday": { + "name": "Average Load 22-6h Weekday", + "name_cs": "Průměrný odběr 22-6h (všední dny)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (22, 6), # přes půlnoc + "day_type": "weekday", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + # Víkendové varianty + "load_avg_6_8_weekend": { + "name": "Average Load 6-8h Weekend", + "name_cs": "Průměrný odběr 6-8h (víkendy)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (6, 8), + "day_type": "weekend", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_8_12_weekend": { + "name": "Average Load 8-12h Weekend", + "name_cs": "Průměrný odběr 8-12h (víkendy)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (8, 12), + "day_type": "weekend", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_12_16_weekend": { + "name": "Average Load 12-16h Weekend", + "name_cs": "Průměrný odběr 12-16h (víkendy)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (12, 16), + "day_type": "weekend", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 500, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_16_22_weekend": { + "name": "Average Load 16-22h Weekend", + "name_cs": "Průměrný odběr 16-22h (víkendy)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (16, 22), + "day_type": "weekend", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + "load_avg_22_6_weekend": { + "name": "Average Load 22-6h Weekend", + "name_cs": "Průměrný odběr 22-6h (víkendy)", + "unit": UnitOfPower.WATT, + "icon": "mdi:chart-timeline-variant", + "device_class": SensorDeviceClass.POWER, + "state_class": SensorStateClass.MEASUREMENT, + "time_range": (22, 6), + "day_type": "weekend", + "statistic": "median", + "max_age_days": 14, + "sampling_size": 1000, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + }, + # Predikční senzory - ODSTRANĚNO: battery_prediction_discharge_time, battery_prediction_needed_capacity, battery_prediction_morning_soc + # Tyto senzory byly nahrazeny battery_forecast sensorem + # Hodinové reálné senzory - používají existující computed energy senzory + "hourly_real_battery_charge_kwh": { + "name": "Hourly Battery Charge", + "name_cs": "Hodinové nabíjení baterie", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:battery-plus", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "energy_diff", + "source_sensor": "computed_batt_charge_energy_today", + "description": "Reálné nabíjení baterie za poslední hodinu", + }, + "hourly_real_battery_discharge_kwh": { + "name": "Hourly Battery Discharge", + "name_cs": "Hodinové vybíjení baterie", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:battery-minus", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "energy_diff", + "source_sensor": "computed_batt_discharge_energy_today", + "description": "Reálné vybíjení baterie za poslední hodinu", + }, + "hourly_real_fve_total_kwh": { + "name": "Hourly FVE Production", + "name_cs": "Hodinová výroba FVE", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:solar-power", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "power_integral", + "source_sensor": "actual_fv_total", + "description": "Reálná celková výroba FVE za poslední hodinu", + }, + "hourly_real_load_kwh": { + "name": "Hourly Load Consumption", + "name_cs": "Hodinová spotřeba zátěže", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:home-lightning-bolt", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "power_integral", + "source_sensor": "actual_aco_p", + "description": "Reálná spotřeba za poslední hodinu", + }, + "hourly_real_boiler_kwh": { + "name": "Hourly Boiler Consumption", + "name_cs": "Hodinová spotřeba bojleru", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:water-boiler", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "energy_diff", + "source_sensor": "boiler_day_w", + "description": "Reálná spotřeba bojleru za poslední hodinu", + }, + # Hodinové FVE stringy + "hourly_real_fve_string_1_kwh": { + "name": "Hourly FVE String 1 Production", + "name_cs": "Hodinová výroba FVE string 1", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:solar-panel", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "power_integral", + "source_sensor": "actual_fv_p1", + "description": "Reálná výroba FVE string 1 za poslední hodinu", + }, + "hourly_real_fve_string_2_kwh": { + "name": "Hourly FVE String 2 Production", + "name_cs": "Hodinová výroba FVE string 2", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:solar-panel", + "device_class": SensorDeviceClass.ENERGY, + "state_class": SensorStateClass.TOTAL, + "entity_category": EntityCategory.DIAGNOSTIC, + "sensor_type_category": "statistics", + "device_mapping": "analytics", + "hourly_data_type": "power_integral", + "source_sensor": "actual_fv_p2", + "description": "Reálná výroba FVE string 2 za poslední hodinu", + }, + # ==================================================================================== + # OPTIMALIZACE NABÍJENÍ BATERIE - Rozděleno podle 3 hlavních cílů + # ==================================================================================== + # 🎯 CÍL 1: AUTOMATIZACE NABÍJENÍ - Senzory pro automatizační pravidla + # ==================================================================================== + # Hlavní predikční senzor - KAPACITA BATERIE V PRŮBĚHU DNE + "battery_forecast": { + "name": "Battery Capacity Forecast", + "name_cs": "Predikce kapacity baterie", + "unit": UnitOfEnergy.KILO_WATT_HOUR, + "icon": "mdi:battery-charging-80", + "device_class": SensorDeviceClass.ENERGY_STORAGE, + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "battery_prediction", + "device_mapping": "analytics", # Hlavní senzor - vytváří OigCloudBatteryForecastSensor + "entity_category": EntityCategory.DIAGNOSTIC, + "description": "Aktuální predikovaná kapacita baterie (kWh). Atributy obsahují kompletní timeline predikce.", + }, + "planner_recommended_mode": { + "name": "Planner Recommended Mode", + "name_cs": "Doporučený režim (plánovač)", + "unit": None, + "icon": "mdi:robot", + "device_class": None, + "state_class": None, + "sensor_type_category": "planner_status", + "device_mapping": "analytics", + "entity_category": EntityCategory.DIAGNOSTIC, + "description": "Doporučený režim pro aktuální interval z hybrid plánovače (např. Home 1/Home UPS) + informace o příští změně.", + }, + "battery_balancing": { + "name": "Battery Balancing Status", + "name_cs": "Stav vyrovnání baterie", + "unit": None, + "icon": "mdi:battery-heart-variant", + "device_class": None, + "state_class": None, + "sensor_type_category": "battery_balancing", + "device_mapping": "analytics", # Specializovaný senzor pro battery balancing + "entity_category": EntityCategory.DIAGNOSTIC, + "description": "Stav vyrovnání článků baterie. Zobrazuje kdy bylo poslední vyrovnání, kolik dní uplynulo, zda je naplánováno další a předpokládané náklady.", + }, + "grid_charging_planned": { + "name": "Grid Charging Planned", + "name_cs": "Plánované nabíjení ze sítě", + "unit": None, # Binary sensor (on/off) + "icon": "mdi:battery-charging", + "device_class": None, # Binary sensor bez device class + "state_class": None, # Binary sensor nemá state class + "sensor_type_category": "grid_charging_plan", + "device_mapping": "analytics", # Specializovaný senzor + "entity_category": None, # Hlavní senzor, ne diagnostic + "description": "Indikátor plánovaného nabíjení baterie ze sítě (on/off). Atributy obsahují intervaly nabíjení, celkovou energii (kWh) a cenu (Kč).", + }, + "battery_efficiency": { + "name": "Battery Efficiency", + "name_cs": "Efektivita baterie (měsíc)", + "unit": PERCENTAGE, + "icon": "mdi:battery-sync", + "device_class": None, + "state_class": SensorStateClass.MEASUREMENT, + "sensor_type_category": "battery_efficiency", + "device_mapping": "analytics", + "entity_category": None, + "description": "Round-trip efektivita baterie za minulý kompletní měsíc (%). Atributy obsahují průběžná data aktuálního měsíce a detailní metriky.", + }, + "adaptive_load_profiles": { + "name": "Adaptive Load Profiles", + "name_cs": "Adaptivní profily spotřeby", + "unit": None, # State = počet profilů + "icon": "mdi:chart-timeline-variant-shimmer", + "device_class": None, + "state_class": None, + "sensor_type_category": "adaptive_profiles", + "device_mapping": "analytics", + "entity_category": EntityCategory.DIAGNOSTIC, + "description": "Automaticky generované profily spotřeby založené na historických datech. State = počet profilů, attributes = detaily jednotlivých profilů.", + }, +} diff --git a/custom_components/oig_cloud/services.py b/custom_components/oig_cloud/services.py deleted file mode 100644 index 894bfcf7..00000000 --- a/custom_components/oig_cloud/services.py +++ /dev/null @@ -1,248 +0,0 @@ -"""Services for OIG Cloud integration.""" -import logging -import voluptuous as vol -from typing import Any, Dict, Mapping, Optional, Union, Final - -from opentelemetry import trace - -from homeassistant.config_entries import ConfigEntry -from homeassistant.core import HomeAssistant, ServiceCall -from homeassistant.exceptions import HomeAssistantError - -from .const import DOMAIN -from .api.oig_cloud_api import OigCloudApi, OigCloudApiError - -_LOGGER = logging.getLogger(__name__) - -# Define mode constants -MODES: Final[Dict[str, str]] = { - "Home 1": "0", - "Home 2": "1", - "Home 3": "2", - "Home UPS": "3", -} - -GRID_DELIVERY: Final[Dict[str, int]] = { - "Vypnuto / Off": 0, - "Zapnuto / On": 1, - "S omezením / Limited": 2 -} - -BOILER_MODE: Final[Dict[str, int]] = { - "CBB": 0, - "Manual": 1 -} - -FORMAT_BATTERY: Final[Dict[str, int]] = { - "Nenabíjet": 0, - "Nabíjet": 1 -} - -# Service schemas -SCHEMA_BOX_MODE = vol.Schema({ - vol.Required("Mode"): vol.In([ - "Home 1", - "Home 2", - "Home 3", - "Home UPS", - ]), - vol.Required("Acknowledgement"): vol.Boolean(True), -}) - -SCHEMA_GRID_DELIVERY = vol.Schema({ - vol.Exclusive("Mode", "mode_or_limit"): vol.In([ - "Vypnuto / Off", - "Zapnuto / On", - "S omezením / Limited", - ]), - vol.Exclusive("Limit", "mode_or_limit"): vol.All( - vol.Coerce(int), - vol.Range(min=1, max=9999) - ), - vol.Required("Acknowledgement"): vol.Boolean(True), - vol.Required("Upozornění"): vol.Boolean(True), -}) - -SCHEMA_BOILER_MODE = vol.Schema({ - vol.Required("Mode"): vol.In([ - "CBB", - "Manual", - ]), - vol.Required("Acknowledgement"): vol.Boolean(True), -}) - -SCHEMA_FORMATTING_MODE = vol.Schema({ - vol.Required("Mode"): vol.In([ - "Nenabíjet", - "Nabíjet", - ]), - vol.Optional("Limit"): vol.All( - vol.Coerce(int), - vol.Range(min=20, max=100) - ), - vol.Required("Acknowledgement"): vol.Boolean(True), -}) - -tracer = trace.get_tracer(__name__) - - -async def async_setup_entry_services(hass: HomeAssistant, entry: ConfigEntry) -> None: - """Set up OIG Cloud services.""" - - async def async_set_box_mode(call: ServiceCall) -> None: - """Set OIG Cloud box mode.""" - acknowledged: bool = call.data.get("Acknowledgement", False) - if not acknowledged: - raise HomeAssistantError("Acknowledgement is required") - - with tracer.start_as_current_span("async_set_box_mode"): - try: - entry_data = hass.data[DOMAIN][entry.entry_id] - client: OigCloudApi = entry_data["api"] - mode: str = call.data.get("Mode") - mode_value: str = MODES.get(mode) - - _LOGGER.info(f"Setting box mode to {mode} (value: {mode_value})") - success: bool = await client.set_box_mode(mode_value) - - if success: - _LOGGER.info(f"Successfully set box mode to {mode}") - # Refresh coordinator data - await entry_data["coordinator"].async_refresh() - else: - raise HomeAssistantError(f"Failed to set box mode to {mode}") - except OigCloudApiError as err: - raise HomeAssistantError(f"API error: {err}") from err - except Exception as err: - raise HomeAssistantError(f"Unexpected error: {err}") from err - - async def async_set_grid_delivery(call: ServiceCall) -> None: - """Set OIG Cloud grid delivery mode or limit.""" - acknowledged: bool = call.data.get("Acknowledgement", False) - if not acknowledged: - raise HomeAssistantError("Acknowledgement is required") - - accepted: bool = call.data.get("Upozornění", False) - if not accepted: - raise HomeAssistantError("Upozornění je třeba odsouhlasit") - - grid_mode: Optional[str] = call.data.get("Mode") - limit: Optional[int] = call.data.get("Limit") - - with tracer.start_as_current_span("async_set_grid_delivery"): - try: - entry_data = hass.data[DOMAIN][entry.entry_id] - client: OigCloudApi = entry_data["api"] - - if grid_mode is not None: - mode: int = GRID_DELIVERY.get(grid_mode) - _LOGGER.info(f"Setting grid delivery mode to {grid_mode} (value: {mode})") - success = await client.set_grid_delivery(mode) - if success: - _LOGGER.info(f"Successfully set grid delivery mode to {grid_mode}") - else: - raise HomeAssistantError(f"Failed to set grid delivery mode to {grid_mode}") - - if limit is not None: - _LOGGER.info(f"Setting grid delivery limit to {limit}W") - success: bool = await client.set_grid_delivery_limit(int(limit)) - if success: - _LOGGER.info(f"Successfully set grid delivery limit to {limit}W") - else: - raise HomeAssistantError("Failed to set grid delivery limit") - - # Refresh coordinator data - await entry_data["coordinator"].async_refresh() - - except OigCloudApiError as err: - raise HomeAssistantError(f"API error: {err}") from err - except Exception as err: - raise HomeAssistantError(f"Unexpected error: {err}") from err - - async def async_set_boiler_mode(call: ServiceCall) -> None: - """Set OIG Cloud boiler mode.""" - acknowledged: bool = call.data.get("Acknowledgement", False) - if not acknowledged: - raise HomeAssistantError("Acknowledgement is required") - - with tracer.start_as_current_span("async_set_boiler_mode"): - try: - entry_data = hass.data[DOMAIN][entry.entry_id] - client: OigCloudApi = entry_data["api"] - mode: str = call.data.get("Mode") - mode_value: int = BOILER_MODE.get(mode) - - _LOGGER.info(f"Setting boiler mode to {mode} (value: {mode_value})") - success: bool = await client.set_boiler_mode(mode_value) - - if success: - _LOGGER.info(f"Successfully set boiler mode to {mode}") - # Refresh coordinator data - await entry_data["coordinator"].async_refresh() - else: - raise HomeAssistantError(f"Failed to set boiler mode to {mode}") - except OigCloudApiError as err: - raise HomeAssistantError(f"API error: {err}") from err - except Exception as err: - raise HomeAssistantError(f"Unexpected error: {err}") from err - - async def async_set_formating_mode(call: ServiceCall) -> None: - """Set OIG Cloud battery formatting mode.""" - acknowledged: bool = call.data.get("Acknowledgement", False) - if not acknowledged: - raise HomeAssistantError("Acknowledgement is required") - - with tracer.start_as_current_span("async_set_formating_mode"): - try: - entry_data = hass.data[DOMAIN][entry.entry_id] - client: OigCloudApi = entry_data["api"] - mode: str = call.data.get("Mode") - limit: Optional[int] = call.data.get("Limit") - mode_value: int = FORMAT_BATTERY.get(mode) - - _LOGGER.info(f"Setting battery formatting mode to {mode} (value: {mode_value}) with limit {limit}") - success: bool = await client.set_formating_mode(limit if limit is not None else mode_value) - - if success: - _LOGGER.info(f"Successfully set battery formatting mode to {mode}") - # Refresh coordinator data - await entry_data["coordinator"].async_refresh() - else: - raise HomeAssistantError(f"Failed to set battery formatting mode to {mode}") - except OigCloudApiError as err: - raise HomeAssistantError(f"API error: {err}") from err - except Exception as err: - raise HomeAssistantError(f"Unexpected error: {err}") from err - - # Register services - _LOGGER.debug("Registering OIG Cloud services") - - hass.services.async_register( - DOMAIN, - "set_box_mode", - async_set_box_mode, - schema=SCHEMA_BOX_MODE, - ) - - hass.services.async_register( - DOMAIN, - "set_grid_delivery", - async_set_grid_delivery, - schema=SCHEMA_GRID_DELIVERY, - ) - - hass.services.async_register( - DOMAIN, - "set_boiler_mode", - async_set_boiler_mode, - schema=SCHEMA_BOILER_MODE, - ) - - hass.services.async_register( - DOMAIN, - "set_formating_mode", - async_set_formating_mode, - schema=SCHEMA_FORMATTING_MODE, - ) - - _LOGGER.info("OIG Cloud services registered") diff --git a/custom_components/oig_cloud/services.yaml b/custom_components/oig_cloud/services.yaml index 28bfedd0..082e14ce 100644 --- a/custom_components/oig_cloud/services.yaml +++ b/custom_components/oig_cloud/services.yaml @@ -2,67 +2,95 @@ set_box_mode: name: Set BatteryBox Mode description: | Set the mode of the device. - Please note upon successfully calling the service, it usually takes up to 10 minutes for the changes to be reflected + Please note upon successfully calling the service, it usually takes up to 10 minutes for the changes to be reflected in the BBox and the UI, but occasionally may take up to an hour. You can check whether the call was successful in the OIG web or mobile app in the Notifications section. fields: - Mode: + device_id: + description: The ČEZ Battery Box device to control (required only if you have multiple devices) + required: false + selector: + device: + filter: + - integration: oig_cloud + manufacturer: OIG + model: ČEZ Battery Box Home + mode: description: The mode to set - example: "Home 1" selector: select: + translation_key: box_mode options: - - "Home 1" - - "Home 2" - - "Home 3" - - "Home UPS" - Acknowledgement: + - home_1 + - home_2 + - home_3 + - home_ups + acknowledgement: description: | I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise. - Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. + Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přebírám plnou odpovědnost za změny a jakýkoli jejich účinek, očekávaný nebo neočekávaný a to i v případě chyby. + required: true selector: boolean: set_grid_delivery: name: Nastavení přetoků description: | - Povolení nebo zakázání přetoků do distribuční sítě. Přetoky je možné zcela vypnout, zapnout, nebo zapnout s limitem. + Povolení nebo zakázání přetoků do distribuční sítě. Přetoky je možné zcela vypnout, zapnout, nebo zapnut s limitem. K použití této funkce musí být nainstalován odpovídající firmware a může trvat delší dobu, než se nastavení projeví. - V případě nastavení limitu je třeba provést 2 změny - nastavení boxu do režimu omezení přetoků a následně nastavení - limitu přetoků. V aktuální verzi (omezení oig) je třeba, aby proběhly postupně. Musí proběhnout ve výše uvedeném - pořadí a před nastavením limitu přetoků je třeba, aby byla již akceptována změna režimu přetoků. Nastavení je tedy - třeba provést ve dvou krocích: Nejprve nastavit režim přetoků na "S omezením," poté skrze automatizaci počkat na změnu - režimu přetoků (viz. příslušný senzor) a následně opakovaným voláním služby nastavit limit přetoků. - Berte prosím v úvahu, že v mezičase může dojít k nadměrnému exportu do sítě. Příklad nastavení lze nalézt na - https://raw.githubusercontent.com/psimsa/oig_cloud/main/docs/grid_delivery_script_sample.yaml + + NOVÁ VERZE (automatická serializace): + Můžete nyní nastavit režim a limit v JEDNOM volání služby. Shield automaticky serializuje změny: + 1. Nejdřív se změní režim (pokud je potřeba) + 2. Pak se změní limit (pokud je potřeba) + 3. Každá změna má vlastní záznam v logbooku + + Příklad: {mode: "S omezením / Limited", limit: 5000} - nastaví OBĚ parametry postupně. + + ZPĚTNÁ KOMPATIBILITA: + Stále můžete volat službu 2× samostatně: + 1. Nejprve {mode: "S omezením / Limited"} + 2. Pak {limit: 5000} + + Více informací: https://raw.githubusercontent.com/psimsa/oig_cloud/main/docs/grid_delivery_script_sample.yaml fields: - Mode: + device_id: + description: The ČEZ Battery Box device to control (required only if you have multiple devices) + required: false + selector: + device: + filter: + - integration: oig_cloud + manufacturer: OIG + model: ČEZ Battery Box Home + mode: description: Režim přetoků selector: select: + translation_key: grid_delivery_mode options: - - Vypnuto / Off - - Zapnuto / On - - S omezením / Limited - Limit: - description: Omezení přetoků - example: 1000 + - "off" + - "on" + - "limited" + limit: + description: Nastavení limitu výkonu přetoků (W) selector: number: min: 1 max: 9999 - unit_of_measurement: W - Acknowledgement: + unit_of_measurement: "W" + acknowledgement: description: | I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise. Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přebírám plnou odpovědnost za změny a jakýkoli jejich účinek, očekávaný nebo neočekávaný a to i v případě chyby. + required: true selector: boolean: - Upozornění: + warning: description: | Před použitím této funkce se seznamte s omezeními dostupnými v aplikaci OIG Power / ČEZ Battery Box. AKTIVACÍ PŘETOKŮ NA ZAŘÍZENÍ BATTERY BOX BERETE NA VĚDOMÍ NÍŽE UVEDENÉ A PŘEBÍRÁTE NA SEBE @@ -76,34 +104,46 @@ set_grid_delivery: Jako majitel zařízení BATTERY BOX máte možnost sám aktivovat nebo deaktivovat povolení přetoků. Pokud byste provedli povolení přetoků dříve, než povolují PPDS, hrozí Vám ze strany provozovatele DS udělení pokuty dle platného ceníku. Data o aktivaci přetoků zařízení samo automaticky archivuje, je proto možné vždy doložit, - kdy byl na zařízení takový příkaz zadán. V případě, že již máte platné povolení pro dodávky přetoků do DS - a rozhodli jste se navýšit dodatečně výkon Vaší FVE, jste povinni zajistit si od provozovatele DS nové SoP - a PPP, odpovídající navýšenému výkonu. Do té doby nejste oprávněni posílat přebytek z navýšeného výkonu do DS - s rizikem pokuty od provozovatele DS. Plné znění tohoto upozornění naleznete na + kdy byl na zařízení takový příkaz zadán. V případě, že již máte platné povolení pro dodávky přetoků do DS + a rozhodli jste se navýšit dodatečně výkon Vaší FVE, jste povinni zajistit si od provozovatele DS nové SoP + a PPP, odpovídající navýšenému výkonu. Do té doby nejste oprávněni posílat přebytek z navýšeného výkonu do DS + s rizikem pokuty od provozovatele DS. Plné znění tohoto upozornění naleznete na https://drive.google.com/viewerng/viewer?embedded=true&url=https://www.oigpower.cz/cez/pretoky-sankce.pdf + required: true selector: boolean: set_boiler_mode: name: Nastavení manuálního nabíjení bojleru description: | - Tímto parametrem obejdete nastavení CBB ohledně řízení přetoků do bojleru a výkon patrony je v plném režimu - bez ohledu na HDO a nebo výrobu FVE. Defaultně je SSR, kdy si plně CBB řídí nabíjení bojleru podle HDO a přetoků. + Tímto parametrem obejdete nastavení CBB ohledně řízení přetoků do bojleru a výkon patrony je v plném režimu + bez ohledu na HDO a nebo výrobu FVE. Defaultně je SSR, kdy si plně CBB řídí nabíjení bojleru podle HDO a přetoků. Nastavení Manual všechno toto obchází. fields: - Mode: + device_id: + description: The ČEZ Battery Box device to control (required only if you have multiple devices) + required: false + selector: + device: + filter: + - integration: oig_cloud + manufacturer: OIG + model: ČEZ Battery Box Home + mode: description: Režim bojleru selector: select: + translation_key: boiler_mode options: - - CBB - - Manual - Acknowledgement: + - cbb + - manual + acknowledgement: description: | I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise. Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přebírám plnou odpovědnost za změny a jakýkoli jejich účinek, očekávaný nebo neočekávaný a to i v případě chyby. + required: true selector: boolean: @@ -112,26 +152,106 @@ set_formating_mode: description: | Tímto parametrem nastavujete okamžité spuštění nabíjení baterige ze sítě na stanovenou hodnotu limitu. fields: - Mode: - description: Nabíjení baterie z GRIDU + device_id: + description: The ČEZ Battery Box device to control (required only if you have multiple devices) + required: false + selector: + device: + filter: + - integration: oig_cloud + manufacturer: OIG + model: ČEZ Battery Box Home + mode: + description: Režim nabíjení selector: select: + translation_key: battery_charge_mode options: - - Nenabíjet - - Nabíjet - Limit: - description: Cílové procento nabití baterie - example: 100 + - no_charge + - charge + limit: + description: Cílové procento nabití selector: number: min: 25 max: 100 unit_of_measurement: "%" - Acknowledgement: + acknowledgement: description: | I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise. Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přebírám plnou odpovědnost za změny a jakýkoli jejich účinek, očekávaný nebo neočekávaný a to i v případě chyby. + required: true + selector: + boolean: + +# Solar forecast služby pro ladění +update_solar_forecast: + name: "🌞 Aktualizovat Solar Forecast" + description: "Manuálně aktualizuje data solární předpovědi z forecast.solar API. Lze použít kdykoliv bez ohledu na nastavený interval." + fields: + entity_id: + name: "Solar Forecast Entity" + description: "Konkrétní solar forecast senzor k aktualizaci (volitelné - pokud neuvedete, aktualizují se všechny)" + required: false + example: "sensor.oig_2206237016_solar_forecast" + selector: + entity: + filter: + integration: oig_cloud + domain: sensor + +# Dashboard tiles persistence +save_dashboard_tiles: + name: "💾 Uložit konfiguraci dlaždic" + description: | + Uloží konfiguraci vlastních dlaždic z OIG Dashboard do integrace. + Používá se automaticky dashboardem pro synchronizaci mezi prohlížeči/zařízeními. + Můžete volat i manuálně pro zálohu konfigurace. + fields: + config: + name: "Konfigurace dlaždic" + description: "JSON string s konfigurací dlaždic (tiles_left, tiles_right, counts, visibility)" + required: true + example: '{"tiles_left": [], "tiles_right": [], "left_count": 6, "right_count": 6, "visible": true, "version": 1}' + selector: + text: + multiline: true + +get_dashboard_tiles: + name: "📥 Načíst konfiguraci dlaždic" + description: | + Načte uloženou konfiguraci vlastních dlaždic z integrace. + Používá se automaticky dashboardem při inicializaci pro synchronizaci mezi prohlížeči/zařízeními. + # Poznámka: služba vrací odpověď (supports_response=True), ale services.yaml nepopisuje response schema. + +plan_boiler_heating: + name: "🔥 Naplánovat ohřev bojleru" + description: | + Vytvoří plán optimálního ohřevu bojleru na základě spotových cen elektřiny. + Vybere nejlevnější časové sloty před deadlinem. + fields: + force: + description: "Vynutit přepočet plánu i když existuje platný plán" + required: false + default: false selector: boolean: + deadline: + description: "Přepsat deadline (formát HH:MM, např. 20:00)" + required: false + example: "20:00" + selector: + text: + +apply_boiler_plan: + name: "🔥 Aplikovat plán ohřevu" + description: | + Aplikuje naplánovaný ohřev bojleru. + Vytvoří automatizace pro zapínání topného tělesa v naplánovaných slotech. + +cancel_boiler_plan: + name: "🔥 Zrušit plán ohřevu" + description: | + Zruší aktivní plán ohřevu bojleru a odstraní naplánované automatizace. diff --git a/custom_components/oig_cloud/services/__init__.py b/custom_components/oig_cloud/services/__init__.py new file mode 100755 index 00000000..6a0009d9 --- /dev/null +++ b/custom_components/oig_cloud/services/__init__.py @@ -0,0 +1,916 @@ +"""Služby pro integraci OIG Cloud.""" + +import asyncio +import logging +from typing import Any, Awaitable, Callable, Dict, Iterable, List, Optional + +import voluptuous as vol +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import Context, HomeAssistant, ServiceCall, callback +from homeassistant.helpers import config_validation as cv +from homeassistant.helpers import device_registry as dr +from opentelemetry import trace + +from ..const import DOMAIN +from ..lib.oig_cloud_client.api.oig_cloud_api import OigCloudApi + +_LOGGER = logging.getLogger(__name__) + +HOME_1 = "Home 1" +HOME_2 = "Home 2" +HOME_3 = "Home 3" +HOME_UPS = "Home UPS" +HOME_5 = "Home 5" +HOME_6 = "Home 6" +HOME_MODE_LABELS = (HOME_1, HOME_2, HOME_3, HOME_UPS, HOME_5, HOME_6) + +GRID_OFF_LABEL = "Vypnuto / Off" +GRID_ON_LABEL = "Zapnuto / On" +GRID_LIMITED_LABEL = "S omezením / Limited" +GRID_DELIVERY_LABELS = (GRID_OFF_LABEL, GRID_ON_LABEL, GRID_LIMITED_LABEL) + +BOILER_CBB_LABEL = "CBB" +BOILER_MANUAL_LABEL = "Manual" +BOILER_MODE_LABELS = (BOILER_CBB_LABEL, BOILER_MANUAL_LABEL) + +FORMAT_NO_CHARGE_LABEL = "Nenabíjet" +FORMAT_CHARGE_LABEL = "Nabíjet" +FORMAT_BATTERY_LABELS = (FORMAT_NO_CHARGE_LABEL, FORMAT_CHARGE_LABEL) +SHIELD_LOG_PREFIX = "[SHIELD]" + +SET_BOX_MODE_SCHEMA = vol.Schema( + { + vol.Optional("device_id"): cv.string, + vol.Required("mode"): vol.In(HOME_MODE_LABELS), + vol.Required("acknowledgement"): vol.In([True]), + } +) +SET_GRID_DELIVERY_SCHEMA = vol.Schema( + { + vol.Optional("device_id"): cv.string, + "mode": vol.Any(None, vol.In(GRID_DELIVERY_LABELS)), + "limit": vol.Any(None, vol.Coerce(int)), + vol.Required("acknowledgement"): vol.In([True]), + vol.Required("warning"): vol.In([True]), + } +) +SET_BOILER_MODE_SCHEMA = vol.Schema( + { + vol.Optional("device_id"): cv.string, + vol.Required("mode"): vol.In(BOILER_MODE_LABELS), + vol.Required("acknowledgement"): vol.In([True]), + } +) +SET_FORMATING_MODE_SCHEMA = vol.Schema( + { + vol.Optional("device_id"): cv.string, + vol.Required("mode"): vol.In(FORMAT_BATTERY_LABELS), + vol.Required("acknowledgement"): vol.In([True]), + "limit": vol.Any(None, vol.Coerce(int)), + } +) + + +def _box_id_from_entry( + hass: HomeAssistant, coordinator: Any, entry_id: str +) -> Optional[str]: + try: + entry = getattr(coordinator, "config_entry", None) or hass.config_entries.async_get_entry( + entry_id + ) + if not entry: + return None + val = ( + entry.options.get("box_id") + or entry.data.get("box_id") + or entry.data.get("inverter_sn") + ) + if isinstance(val, str) and val.isdigit(): + return val + except Exception: + return None + return None + + +def _box_id_from_coordinator(coordinator: Any) -> Optional[str]: + try: + data = getattr(coordinator, "data", None) + if isinstance(data, dict) and data: + return next((str(k) for k in data.keys() if str(k).isdigit()), None) + except Exception: + return None + return None + + +def _strip_identifier_suffix(identifier_value: str) -> str: + return identifier_value.replace("_shield", "").replace("_analytics", "") + + +def _extract_box_id_from_device(device: dr.DeviceEntry, device_id: str) -> Optional[str]: + for identifier in device.identifiers: + if identifier[0] != DOMAIN: + continue + identifier_value = identifier[1] + box_id = _strip_identifier_suffix(identifier_value) + if isinstance(box_id, str) and box_id.isdigit(): + _LOGGER.debug( + "Found box_id %s from device %s (identifier: %s)", + box_id, + device_id, + identifier_value, + ) + return box_id + return None + + +def _register_service_if_missing( + hass: HomeAssistant, + name: str, + handler: Callable[[ServiceCall], Awaitable[Any]], + schema: vol.Schema, + supports_response: bool = False, +) -> bool: + if hass.services.has_service(DOMAIN, name): + return False + hass.services.async_register( + DOMAIN, name, handler, schema=schema, supports_response=supports_response + ) + return True + + +def _get_entry_client(hass: HomeAssistant, entry: ConfigEntry) -> OigCloudApi: + coordinator = hass.data[DOMAIN][entry.entry_id]["coordinator"] + return coordinator.api + + +def _resolve_box_id_from_service( + hass: HomeAssistant, + entry: ConfigEntry, + service_data: Dict[str, Any], + service_name: str, +) -> Optional[str]: + device_id: Optional[str] = service_data.get("device_id") + box_id = get_box_id_from_device(hass, device_id, entry.entry_id) + if not box_id: + _LOGGER.error("Cannot determine box_id for %s", service_name) + return None + return box_id + + +def _validate_grid_delivery_inputs(grid_mode: Optional[str], limit: Optional[int]) -> None: + if (grid_mode is None and limit is None) or ( + grid_mode is not None and limit is not None + ): + raise vol.Invalid("Musí být nastaven právě jeden parametr (Režim nebo Limit)") + if limit is not None and (limit > 9999 or limit < 1): + raise vol.Invalid("Limit musí být v rozmezí 1–9999") + + +def _acknowledged(service_data: Dict[str, Any], service_name: str) -> bool: + if service_data.get("acknowledgement", False): + return True + _LOGGER.error("Služba %s vyžaduje potvrzení (acknowledgement)", service_name) + return False + + +def get_box_id_from_device( + hass: HomeAssistant, device_id: Optional[str], entry_id: str +) -> Optional[str]: + """ + Extrahuje box_id z device_id nebo vrátí první dostupný box_id. + + Args: + hass: HomeAssistant instance + device_id: ID zařízení z service call (může být None) + entry_id: Config entry ID + + Returns: + box_id (str) nebo None pokud nenalezen + """ + coordinator = hass.data[DOMAIN][entry_id]["coordinator"] + + # Pokud není device_id, použij první dostupný box_id + if not device_id: + # Preferovat persistované box_id z config entry (funguje i v local_only režimu) + if entry_box_id := _box_id_from_entry(hass, coordinator, entry_id): + return entry_box_id + + # Fallback: numerický klíč v coordinator.data (cloud režim) + if coord_box_id := _box_id_from_coordinator(coordinator): + return coord_box_id + + _LOGGER.warning("No device_id provided and no box_id could be resolved") + return None + + # Máme device_id, najdi odpovídající box_id + device_registry = dr.async_get(hass) + device = device_registry.async_get(device_id) + + if not device: + _LOGGER.warning("Device %s not found in registry", device_id) + return _box_id_from_entry(hass, coordinator, entry_id) or _box_id_from_coordinator( + coordinator + ) + + # Extrahuj box_id z device identifiers + # Identifiers mají formát: {(DOMAIN, identifier_value), ...} + # identifier_value může být: + # - "2206237016" (hlavní zařízení) + # - "2206237016_shield" (shield) + # - "2206237016_analytics" (analytics) + if device_box_id := _extract_box_id_from_device(device, device_id): + return device_box_id + + _LOGGER.warning("Could not extract box_id from device %s", device_id) + return _box_id_from_entry(hass, coordinator, entry_id) or _box_id_from_coordinator( + coordinator + ) + + +# Schema pro update solární předpovědi +SOLAR_FORECAST_UPDATE_SCHEMA = vol.Schema({}) +CHECK_BALANCING_SCHEMA = vol.Schema( + { + vol.Optional("box_id"): cv.string, + vol.Optional("force"): cv.boolean, + } +) + +# Konstanty pro služby +MODES: Dict[str, str] = { + "home_1": "0", + "home_2": "1", + "home_3": "2", + "home_ups": "3", + "home_5": "4", + "home_6": "5", + # Alternate slug variants (legacy docs) + "home1": "0", + "home2": "1", + "home3": "2", + "homeups": "3", + "home5": "4", + "home6": "5", + # Backward-compatible labels (legacy automations) + HOME_1: "0", + HOME_2: "1", + HOME_3: "2", + HOME_UPS: "3", + HOME_5: "4", + HOME_6: "5", +} + +GRID_DELIVERY = { + "off": 0, + "on": 1, + "limited": 1, + # Backward-compatible labels + GRID_OFF_LABEL: 0, + GRID_ON_LABEL: 1, + GRID_LIMITED_LABEL: 1, +} +BOILER_MODE = { + "cbb": 0, + "manual": 1, + # Backward-compatible labels + BOILER_CBB_LABEL: 0, + BOILER_MANUAL_LABEL: 1, +} +FORMAT_BATTERY = { + "no_charge": 0, + "charge": 1, + # Backward-compatible labels + FORMAT_NO_CHARGE_LABEL: 0, + FORMAT_CHARGE_LABEL: 1, +} + +tracer = trace.get_tracer(__name__) + +# Storage key pro dashboard tiles +STORAGE_KEY_DASHBOARD_TILES = "oig_dashboard_tiles" + + +def _iter_entry_data(hass: HomeAssistant) -> Iterable[tuple[str, dict[str, Any]]]: + for entry_id, entry_data in hass.data.get(DOMAIN, {}).items(): + if isinstance(entry_data, dict): + yield entry_id, entry_data + + +def _get_solar_forecast(entry_data: dict[str, Any]) -> Optional[Any]: + coordinator = entry_data.get("coordinator") + if coordinator and hasattr(coordinator, "solar_forecast"): + return coordinator.solar_forecast + return None + + +async def _update_solar_forecast_for_entry(entry_id: str, entry_data: dict[str, Any]) -> None: + solar_forecast = _get_solar_forecast(entry_data) + if not solar_forecast: + _LOGGER.debug("Config entry %s nemá solární předpověď", entry_id) + return + try: + await solar_forecast.async_update() + _LOGGER.info("Manuálně aktualizována solární předpověď pro %s", entry_id) + except Exception as exc: + _LOGGER.error("Chyba při aktualizaci solární předpovědi: %s", exc) + + +def _register_service_definitions( + hass: HomeAssistant, + service_definitions: Iterable[ + tuple[str, Callable[[ServiceCall], Awaitable[Any]], vol.Schema, bool, str] + ], +) -> None: + for name, handler, schema, supports_response, log_message in service_definitions: + if _register_service_if_missing( + hass, name, handler, schema, supports_response=supports_response + ): + _LOGGER.debug(log_message) + + +def _log_prefix(prefix: str) -> str: + return f"{prefix} " if prefix else "" + + +async def _action_set_box_mode( + hass: HomeAssistant, + entry: ConfigEntry, + service_data: Dict[str, Any], + log_prefix: str, +) -> None: + client = _get_entry_client(hass, entry) + box_id = _resolve_box_id_from_service(hass, entry, service_data, "set_box_mode") + if not box_id: + return + + mode: Optional[str] = service_data.get("mode") + mode_value: Optional[str] = MODES.get(mode) if mode else None + _LOGGER.info( + "%sSetting box mode for device %s to %s (value: %s)", + log_prefix, + box_id, + mode, + mode_value, + ) + await client.set_box_mode(mode_value) + + +async def _action_set_boiler_mode( + hass: HomeAssistant, + entry: ConfigEntry, + service_data: Dict[str, Any], + log_prefix: str, +) -> None: + client = _get_entry_client(hass, entry) + box_id = _resolve_box_id_from_service(hass, entry, service_data, "set_boiler_mode") + if not box_id: + return + + mode: Optional[str] = service_data.get("mode") + mode_value: Optional[int] = BOILER_MODE.get(mode) if mode else None + _LOGGER.info( + "%sSetting boiler mode for device %s to %s (value: %s)", + log_prefix, + box_id, + mode, + mode_value, + ) + await client.set_boiler_mode(mode_value) + + +async def _action_set_grid_delivery( + hass: HomeAssistant, + entry: ConfigEntry, + service_data: Dict[str, Any], + log_prefix: str, + enforce_limit_success: bool, +) -> None: + grid_mode: Optional[str] = service_data.get("mode") + limit: Optional[int] = service_data.get("limit") + _validate_grid_delivery_inputs(grid_mode, limit) + + client = _get_entry_client(hass, entry) + box_id = _resolve_box_id_from_service(hass, entry, service_data, "set_grid_delivery") + if not box_id: + return + + _LOGGER.info( + "%sSetting grid delivery for device %s: mode=%s, limit=%s", + log_prefix, + box_id, + grid_mode, + limit, + ) + + if grid_mode is not None: + mode_value: Optional[int] = GRID_DELIVERY.get(grid_mode) + await client.set_grid_delivery(mode_value) + if limit is not None: + success = await client.set_grid_delivery_limit(int(limit)) + if enforce_limit_success and not success: + raise vol.Invalid("Limit se nepodařilo nastavit.") + + +async def _action_set_formating_mode( + hass: HomeAssistant, + entry: ConfigEntry, + service_data: Dict[str, Any], + log_prefix: str, +) -> None: + client = _get_entry_client(hass, entry) + box_id = _resolve_box_id_from_service(hass, entry, service_data, "set_formating_mode") + if not box_id: + return + + mode: Optional[str] = service_data.get("mode") + limit: Optional[int] = service_data.get("limit") + _LOGGER.info( + "%sSetting formating mode for device %s: mode=%s, limit=%s", + log_prefix, + box_id, + mode, + limit, + ) + + if not _acknowledged(service_data, "set_formating_mode"): + return + + if limit is not None: + await client.set_formating_mode(str(limit)) + else: + mode_value: Optional[int] = FORMAT_BATTERY.get(mode) if mode else None + if mode_value is not None: + await client.set_formating_mode(str(mode_value)) + + +async def _shield_set_box_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + with tracer.start_as_current_span("async_set_box_mode"): + await _action_set_box_mode( + hass, entry, service_data, _log_prefix(SHIELD_LOG_PREFIX) + ) + + +async def _shield_set_grid_delivery( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + with tracer.start_as_current_span("async_set_grid_delivery"): + await _action_set_grid_delivery( + hass, entry, service_data, _log_prefix(SHIELD_LOG_PREFIX), True + ) + + +async def _shield_set_boiler_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + with tracer.start_as_current_span("async_set_boiler_mode"): + await _action_set_boiler_mode( + hass, entry, service_data, _log_prefix(SHIELD_LOG_PREFIX) + ) + + +async def _shield_set_formating_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + with tracer.start_as_current_span("async_set_formating_mode"): + await _action_set_formating_mode( + hass, entry, service_data, _log_prefix(SHIELD_LOG_PREFIX) + ) + + +async def _fallback_set_box_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + await _action_set_box_mode(hass, entry, service_data, "") + + +async def _fallback_set_grid_delivery( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + await _action_set_grid_delivery(hass, entry, service_data, "", False) + + +async def _fallback_set_boiler_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + await _action_set_boiler_mode(hass, entry, service_data, "") + + +async def _fallback_set_formating_mode( + hass: HomeAssistant, entry: ConfigEntry, service_data: Dict[str, Any] +) -> None: + await _action_set_formating_mode(hass, entry, service_data, "") + + +def _make_shield_action( + hass: HomeAssistant, + entry: ConfigEntry, + action: Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]], +) -> Callable[[str, str, Dict[str, Any], bool, Optional[Context]], Awaitable[None]]: + @callback + async def handler( + domain: str, + service: str, + service_data: Dict[str, Any], + blocking: bool, + context: Optional[Context], + ) -> None: + _ = domain, service, blocking, context + await action(hass, entry, service_data) + + return handler + + +def _wrap_with_shield( + hass: HomeAssistant, + entry: ConfigEntry, + shield: Any, + service_name: str, + action: Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]], +) -> Callable[[ServiceCall], Awaitable[None]]: + shield_handler = _make_shield_action(hass, entry, action) + + async def wrapper(call: ServiceCall) -> None: + data: Dict[str, Any] = dict(call.data) + await shield.intercept_service_call( + DOMAIN, + service_name, + {"params": data}, + shield_handler, + blocking=False, + context=call.context, + ) + + return wrapper + + +def _make_fallback_handler( + hass: HomeAssistant, + entry: ConfigEntry, + action: Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]], +) -> Callable[[ServiceCall], Awaitable[None]]: + async def handler(call: ServiceCall) -> None: + data: Dict[str, Any] = dict(call.data) + await action(hass, entry, data) + + return handler + + +async def async_setup_services(hass: HomeAssistant) -> None: + """Nastavení základních služeb pro OIG Cloud.""" + await asyncio.sleep(0) + + async def handle_update_solar_forecast(call: ServiceCall) -> None: + """Zpracování služby pro manuální aktualizaci solární předpovědi.""" + _ = call + for entry_id, entry_data in _iter_entry_data(hass): + await _update_solar_forecast_for_entry(entry_id, entry_data) + + async def handle_save_dashboard_tiles(call: ServiceCall) -> None: + """Zpracování služby pro uložení konfigurace dashboard tiles.""" + await _save_dashboard_tiles_config(hass, call.data.get("config")) + + async def handle_get_dashboard_tiles(call: ServiceCall) -> dict: + """Služba pro načtení konfigurace dashboard tiles.""" + return await _load_dashboard_tiles_config(hass) + + async def handle_check_balancing(call: ServiceCall) -> dict: + """Manuálně spustí balancing kontrolu přes BalancingManager.""" + return await _run_manual_balancing_checks(hass, call) + + service_definitions = [ + ( + "update_solar_forecast", + handle_update_solar_forecast, + SOLAR_FORECAST_UPDATE_SCHEMA, + False, + f"Zaregistrovány základní služby pro {DOMAIN}", + ), + ( + "save_dashboard_tiles", + handle_save_dashboard_tiles, + vol.Schema({vol.Required("config"): cv.string}), + False, + "Registered save_dashboard_tiles service", + ), + ( + "get_dashboard_tiles", + handle_get_dashboard_tiles, + vol.Schema({}), + True, + "Registered get_dashboard_tiles service", + ), + ( + "check_balancing", + handle_check_balancing, + CHECK_BALANCING_SCHEMA, + True, + "Registered check_balancing service", + ), + ] + _register_service_definitions(hass, service_definitions) + + +async def async_setup_entry_services_with_shield( + hass: HomeAssistant, entry: ConfigEntry, shield: Any +) -> None: + """Setup entry-specific services with shield protection - direct shield parameter.""" + _LOGGER.debug("Setting up entry services for %s with shield", entry.entry_id) + _LOGGER.debug("Shield object: %s", shield) + _LOGGER.debug("Shield type: %s", type(shield)) + + if not shield: + _LOGGER.debug("ServiceShield not provided, falling back to regular setup") + await async_setup_entry_services_fallback(hass, entry) + return + + if hass.services.has_service(DOMAIN, "set_box_mode"): + _LOGGER.debug("Entry services already registered, skipping") + return + + _LOGGER.debug("Registering all entry services with shield protection") + service_actions = _entry_service_actions(shielded=True) + _register_entry_services( + hass, + entry, + service_actions, + lambda service_name, action: _wrap_with_shield( + hass, entry, shield, service_name, action + ), + ) + _register_boiler_services(hass, entry) + + _LOGGER.info("All entry services registered with shield protection") + + +async def async_setup_entry_services(hass: HomeAssistant, entry: ConfigEntry) -> None: + """Setup entry-specific services with optional shield protection.""" + _LOGGER.debug("Setting up entry services for %s", entry.entry_id) + shield = hass.data[DOMAIN].get("shield") + + if shield: + _LOGGER.debug("Using shield protection for services") + await async_setup_entry_services_with_shield(hass, entry, shield) + else: + _LOGGER.debug("Shield not available, using fallback services") + await async_setup_entry_services_fallback(hass, entry) + + +async def async_setup_entry_services_fallback( + hass: HomeAssistant, entry: ConfigEntry +) -> None: + """Setup entry-specific services WITHOUT shield protection as fallback.""" + await asyncio.sleep(0) + _LOGGER.info("Registering fallback services for entry %s", entry.entry_id) + if hass.services.has_service(DOMAIN, "set_box_mode"): + _LOGGER.info("Services already registered, skipping fallback registration") + return + + _LOGGER.info("No existing services found, registering all fallback services") + services_to_register = _entry_service_actions(shielded=False) + _register_entry_services( + hass, + entry, + services_to_register, + lambda _service_name, action: _make_fallback_handler(hass, entry, action), + ) + + _LOGGER.info("All fallback services registration completed") + + +def _entry_service_actions( + *, shielded: bool +) -> list[tuple[str, Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]], vol.Schema]]: + if shielded: + return [ + ("set_box_mode", _shield_set_box_mode, SET_BOX_MODE_SCHEMA), + ("set_grid_delivery", _shield_set_grid_delivery, SET_GRID_DELIVERY_SCHEMA), + ("set_boiler_mode", _shield_set_boiler_mode, SET_BOILER_MODE_SCHEMA), + ("set_formating_mode", _shield_set_formating_mode, SET_FORMATING_MODE_SCHEMA), + ] + return [ + ("set_box_mode", _fallback_set_box_mode, SET_BOX_MODE_SCHEMA), + ("set_boiler_mode", _fallback_set_boiler_mode, SET_BOILER_MODE_SCHEMA), + ("set_grid_delivery", _fallback_set_grid_delivery, SET_GRID_DELIVERY_SCHEMA), + ("set_formating_mode", _fallback_set_formating_mode, SET_FORMATING_MODE_SCHEMA), + ] + + +def _register_entry_services( + hass: HomeAssistant, + entry: ConfigEntry, + services: Iterable[ + tuple[str, Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]], vol.Schema] + ], + handler_factory: Callable[ + [str, Callable[[HomeAssistant, ConfigEntry, Dict[str, Any]], Awaitable[None]]], + Callable[[ServiceCall], Awaitable[Any]], + ], +) -> None: + for service_name, action, schema in services: + handler = handler_factory(service_name, action) + try: + hass.services.async_register(DOMAIN, service_name, handler, schema=schema) + _LOGGER.info("Successfully registered %s service: %s", entry.entry_id, service_name) + except Exception as exc: + _LOGGER.error("Failed to register service %s: %s", service_name, exc) + + +def _register_boiler_services(hass: HomeAssistant, entry: ConfigEntry) -> None: + boiler_coordinator = hass.data[DOMAIN].get(entry.entry_id, {}).get("boiler_coordinator") + if not boiler_coordinator: + return + try: + from .boiler import setup_boiler_services + + setup_boiler_services(hass, boiler_coordinator) + _LOGGER.info("Boiler services registered") + except Exception as exc: + _LOGGER.error("Failed to register boiler services: %s", exc, exc_info=True) + + +async def _save_dashboard_tiles_config( + hass: HomeAssistant, config_str: Optional[str] +) -> None: + import json + + if not config_str: + _LOGGER.error("Dashboard tiles config is empty") + return + + try: + config = json.loads(config_str) + _validate_dashboard_tiles_config(config) + + from homeassistant.helpers.storage import Store + + store = Store(hass, version=1, key=STORAGE_KEY_DASHBOARD_TILES) + await store.async_save(config) + + _LOGGER.info( + "Dashboard tiles config saved successfully: %s left, %s right", + len(config.get("tiles_left", [])), + len(config.get("tiles_right", [])), + ) + + except json.JSONDecodeError as e: + _LOGGER.error("Invalid JSON in dashboard tiles config: %s", e) + except ValueError as e: + _LOGGER.error("Invalid dashboard tiles config structure: %s", e) + except Exception as e: + _LOGGER.error("Failed to save dashboard tiles config: %s", e) + + +async def _load_dashboard_tiles_config(hass: HomeAssistant) -> dict: + try: + from homeassistant.helpers.storage import Store + + store = Store(hass, version=1, key=STORAGE_KEY_DASHBOARD_TILES) + config = await store.async_load() + if config: + _LOGGER.info("Dashboard tiles config loaded from storage") + return {"config": config} + _LOGGER.info("No dashboard tiles config found in storage") + return {"config": None} + + except Exception as e: + _LOGGER.error("Failed to load dashboard tiles config: %s", e) + return {"config": None} + + +def _validate_dashboard_tiles_config(config: Any) -> None: + if not isinstance(config, dict): + raise ValueError("Config must be a JSON object") + required_keys = ["tiles_left", "tiles_right", "version"] + for key in required_keys: + if key not in config: + raise ValueError(f"Missing required key: {key}") + + +def _serialize_dt(value: Any) -> Optional[str]: + if value is None: + return None + if isinstance(value, str): + return value + if hasattr(value, "isoformat"): + return value.isoformat() + return str(value) + + +def _iter_balancing_managers( + hass: HomeAssistant, requested_box: Optional[str] +) -> List[tuple[str, Any, Optional[str]]]: + managers: List[tuple[str, Any, Optional[str]]] = [] + domain_data = hass.data.get(DOMAIN, {}) + + for entry_id, entry_data in domain_data.items(): + if not isinstance(entry_data, dict) or entry_id == "shield": + continue + balancing_manager = entry_data.get("balancing_manager") + if not balancing_manager: + continue + manager_box_id = getattr(balancing_manager, "box_id", None) + if requested_box and manager_box_id != requested_box: + continue + managers.append((entry_id, balancing_manager, manager_box_id)) + return managers + + +def _build_balancing_plan_result( + entry_id: str, manager_box_id: Optional[str], plan: Any +) -> Dict[str, Any]: + return { + "entry_id": entry_id, + "box_id": manager_box_id, + "plan_mode": plan.mode.value, + "reason": plan.reason, + "holding_start": _serialize_dt(plan.holding_start), + "holding_end": _serialize_dt(plan.holding_end), + "priority": plan.priority.value, + } + + +def _build_no_plan_result(entry_id: str, manager_box_id: Optional[str]) -> Dict[str, Any]: + return { + "entry_id": entry_id, + "box_id": manager_box_id, + "plan_mode": None, + "reason": "no_plan_needed", + } + + +def _build_error_result( + entry_id: str, manager_box_id: Optional[str], err: Exception +) -> Dict[str, Any]: + return { + "entry_id": entry_id, + "box_id": manager_box_id, + "error": str(err), + } + + +async def _run_manual_balancing_checks( + hass: HomeAssistant, call: ServiceCall +) -> dict: + requested_box = call.data.get("box_id") + force_balancing = call.data.get("force", False) + results: List[Dict[str, Any]] = [] + + for entry_id, balancing_manager, manager_box_id in _iter_balancing_managers( + hass, requested_box + ): + try: + plan = await balancing_manager.check_balancing(force=force_balancing) + if plan: + results.append(_build_balancing_plan_result(entry_id, manager_box_id, plan)) + _LOGGER.info( + "Manual balancing check created %s plan for box %s (%s)", + plan.mode.value, + manager_box_id, + plan.reason, + ) + else: + results.append(_build_no_plan_result(entry_id, manager_box_id)) + _LOGGER.info( + "Manual balancing check executed for box %s - no plan needed", + manager_box_id, + ) + except Exception as err: + _LOGGER.error( + "Manual balancing check failed for box %s: %s", + manager_box_id or "unknown", + err, + exc_info=True, + ) + results.append(_build_error_result(entry_id, manager_box_id, err)) + + if not results: + _LOGGER.warning( + "Manual balancing check: no BalancingManager instances matched box_id=%s", + requested_box or "any", + ) + + return { + "requested_box_id": requested_box, + "processed_entries": len(results), + "results": results, + } + + +async def async_unload_services(hass: HomeAssistant) -> None: + """Odregistrace služeb při unload integrace.""" + await asyncio.sleep(0) + services_to_remove = [ + "update_solar_forecast", + "save_dashboard_tiles", + "set_box_mode", + "set_grid_delivery", + "set_boiler_mode", + "set_formating_mode", + ] + + for service in services_to_remove: + if hass.services.has_service(DOMAIN, service): + hass.services.async_remove(DOMAIN, service) + _LOGGER.debug("All services unloaded") diff --git a/custom_components/oig_cloud/shared/logging.py b/custom_components/oig_cloud/shared/logging.py index 60aafe61..0a4feafe 100644 --- a/custom_components/oig_cloud/shared/logging.py +++ b/custom_components/oig_cloud/shared/logging.py @@ -1,34 +1,110 @@ -from grpc import Compression -import logging -from typing import Dict +"""Shared logging utilities for OIG Cloud.""" -from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler -from opentelemetry.sdk._logs.export import BatchLogRecordProcessor -from opentelemetry.exporter.otlp.proto.grpc._log_exporter import ( - OTLPLogExporter, -) +import asyncio +import json +import logging +import time +from typing import Any, Dict, Optional -from opentelemetry._logs import set_logger_provider +import aiohttp from ..const import OT_ENDPOINT, OT_HEADERS, OT_INSECURE -from .shared import get_resource + +_LOGGER = logging.getLogger(__name__) + + +class SimpleTelemetry: + """Jednoduchá telemetrie bez logging handleru.""" + + def __init__(self, url: str, headers: Dict[str, str]) -> None: + self.url = url + self.headers = headers + self.session: Optional[aiohttp.ClientSession] = None + + async def _get_session(self) -> aiohttp.ClientSession: + """Získá nebo vytvoří aiohttp session.""" + await asyncio.sleep(0) + if self.session is None or self.session.closed: + connector = aiohttp.TCPConnector(ssl=not OT_INSECURE) + self.session = aiohttp.ClientSession(connector=connector) + return self.session + + async def send_event( + self, event_type: str, service_name: str, data: Dict[str, Any] + ) -> bool: + """Pošle telemetrickou událost přímo do New Relic.""" + try: + payload = { + "timestamp": int(time.time() * 1000), + "message": f"ServiceShield {event_type}: {service_name}", + "level": "INFO", + "logger": "custom_components.oig_cloud.telemetry", + "event_type": event_type, + "service_name": service_name, + "component": "service_shield", + **data, + } + + # LOGOVÁNÍ: Co odesíláme a kam + _LOGGER.debug( + f"[TELEMETRY] Sending {event_type} for {service_name} to {self.url}" + ) + _LOGGER.debug(f"[TELEMETRY] Payload size: {len(json.dumps(payload))} bytes") + _LOGGER.debug( + f"[TELEMETRY] Payload preview: {payload.get('message', 'N/A')}" + ) + + session = await self._get_session() + + async with session.post( + self.url, + json=payload, + headers=self.headers, + timeout=aiohttp.ClientTimeout(total=10), + ) as response: + response_text = await response.text() + + # LOGOVÁNÍ: Co se vrátilo + _LOGGER.debug(f"[TELEMETRY] Response: HTTP {response.status}") + _LOGGER.debug(f"[TELEMETRY] Response body: {response_text[:200]}...") + + if response.status in [200, 202]: + _LOGGER.debug( + f"[TELEMETRY] Successfully sent {event_type} for {service_name}" + ) + return True + else: + _LOGGER.warning( + f"[TELEMETRY] Failed to send {event_type}: HTTP {response.status} - {response_text[:100]}" + ) + return False + + except Exception as e: + _LOGGER.error( + f"[TELEMETRY] Exception while sending {event_type} for {service_name}: {e}", + exc_info=True, + ) + return False + + async def close(self) -> None: + """Uzavře HTTP session.""" + if self.session and not self.session.closed: + await self.session.close() -def setup_otel_logging(email_hash: str, hass_id: str) -> LoggingHandler: - resource = get_resource(email_hash, hass_id) +def setup_simple_telemetry(email_hash: str, hass_id: str) -> Optional[SimpleTelemetry]: + """Setup jednoduché telemetrie.""" + _ = email_hash + _ = hass_id + try: + url = f"{OT_ENDPOINT}/log/v1" + headers = {"Content-Type": "application/json", "X-Event-Source": "logs"} - logger_provider: LoggerProvider = LoggerProvider(resource=resource) - set_logger_provider(logger_provider) + for header_name, header_value in OT_HEADERS: + headers[header_name] = header_value - exporter: OTLPLogExporter = OTLPLogExporter( - endpoint=OT_ENDPOINT, - insecure=OT_INSECURE, - headers=OT_HEADERS, - compression=Compression(2), - ) + return SimpleTelemetry(url, headers) - logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter)) - logging_handler: LoggingHandler = LoggingHandler( - level=logging.NOTSET, logger_provider=logger_provider - ) - return logging_handler + except Exception as e: + _LOGGER.error(f"Failed to setup telemetry: {e}") + return None diff --git a/custom_components/oig_cloud/shared/shared.py b/custom_components/oig_cloud/shared/shared.py deleted file mode 100644 index 07452d04..00000000 --- a/custom_components/oig_cloud/shared/shared.py +++ /dev/null @@ -1,27 +0,0 @@ -from enum import StrEnum -from typing import Dict, Any - -from opentelemetry.sdk.resources import Resource - - -from ..release_const import COMPONENT_VERSION, SERVICE_NAME - - -def get_resource(email_hash: str, hass_id: str) -> Resource: - resource: Resource = Resource.create( - { - "service.name": SERVICE_NAME, - "service.version": COMPONENT_VERSION, - "service.namespace": "oig_cloud", - "service.instance.id": hass_id, - "service.instance.user": email_hash, - } - ) - - return resource - - -class GridMode(StrEnum): - OFF = "Vypnuto / Off" - ON = "Zapnuto / On" - LIMITED = "S omezením / Limited" diff --git a/custom_components/oig_cloud/shared/tracing.py b/custom_components/oig_cloud/shared/tracing.py deleted file mode 100644 index e2c3c2f9..00000000 --- a/custom_components/oig_cloud/shared/tracing.py +++ /dev/null @@ -1,46 +0,0 @@ -from grpc import Compression -from typing import Dict, Any - -from opentelemetry import trace -from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter -from opentelemetry.sdk.trace import TracerProvider -from opentelemetry.sdk.trace.export import BatchSpanProcessor -from opentelemetry.sdk.resources import Resource - -from ..const import OT_ENDPOINT, OT_HEADERS, OT_INSECURE -from .shared import get_resource - -def setup_tracer(module_name: str) -> trace.Tracer: - """Set up and return a tracer for the given module. - - Args: - module_name: The name of the module to trace - - Returns: - A tracer instance for the module - """ - return trace.get_tracer(module_name) - -def setup_tracing(email_hash: str, hass_id: str) -> None: - """Set up tracing with the OpenTelemetry exporter. - - Args: - email_hash: Hash of the user's email address - hass_id: Home Assistant instance ID - """ - resource: Resource = get_resource(email_hash, hass_id) - - trace_provider: TracerProvider = TracerProvider(resource=resource) - - trace_processor: BatchSpanProcessor = BatchSpanProcessor( - OTLPSpanExporter( - endpoint=OT_ENDPOINT, - insecure=OT_INSECURE, - headers=OT_HEADERS, - compression=Compression(2), - ) - ) - - trace.set_tracer_provider(trace_provider) - trace_provider.add_span_processor(trace_processor) - diff --git a/custom_components/oig_cloud/shield/__init__.py b/custom_components/oig_cloud/shield/__init__.py new file mode 100644 index 00000000..0c81c659 --- /dev/null +++ b/custom_components/oig_cloud/shield/__init__.py @@ -0,0 +1 @@ +"""Service shield orchestration.""" diff --git a/custom_components/oig_cloud/shield/core.py b/custom_components/oig_cloud/shield/core.py new file mode 100755 index 00000000..8cef1de0 --- /dev/null +++ b/custom_components/oig_cloud/shield/core.py @@ -0,0 +1,733 @@ +import asyncio +import logging +from datetime import datetime, timedelta +from typing import Any, Callable, Dict, List, Optional, Tuple + +import voluptuous as vol +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import Context, Event, HomeAssistant, callback +from homeassistant.helpers.event import ( + async_track_state_change_event, + async_track_time_interval, +) +from homeassistant.util.dt import now as dt_now + +from ..shared.logging import setup_simple_telemetry +from . import dispatch as shield_dispatch +from . import queue as shield_queue +from . import validation as shield_validation + +_LOGGER = logging.getLogger(__name__) + +TIMEOUT_MINUTES = 15 +CHECK_INTERVAL_SECONDS = 30 # Zvýšeno z 15 na 30 sekund - slouží jen jako backup +SERVICE_SET_BOX_MODE = "oig_cloud.set_box_mode" + + +class ServiceShield: + """OIG Cloud Service Shield - ochrana před neočekávanými změnami.""" + + def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None: + self.hass: HomeAssistant = hass + self.entry: ConfigEntry = entry + self._logger: logging.Logger = logging.getLogger(__name__) + self._active_tasks: Dict[str, Dict[str, Any]] = {} + self._telemetry_handler: Optional[Any] = None + + # Inicializace základních atributů + self.pending: Dict[str, Dict[str, Any]] = {} + self.queue: List[ + Tuple[ + str, # service_name + Dict[str, Any], # params + Dict[str, str], # expected_entities + Callable, # original_call + str, # domain + str, # service + bool, # blocking + Optional[Context], # context + ] + ] = [] + # OPRAVA: queue_metadata nyní ukládá slovník s trace_id a queued_at pro live duration + self.queue_metadata: Dict[Tuple[str, str], Dict[str, Any]] = {} + self.running: Optional[str] = None + self.last_checked_entity_id: Optional[str] = None + + # Event-based monitoring + self._state_listener_unsub: Optional[Callable] = None + self._is_checking: bool = False # Lock pro prevenci concurrent execution + + # Callbacks pro okamžitou aktualizaci senzorů + self._state_change_callbacks: List[Callable[[], None]] = [] + + # Atributy pro telemetrii (pro zpětnou kompatibilitu) + self.telemetry_handler: Optional[Any] = None + self.telemetry_logger: Optional[Any] = None + + # Mode Transition Tracker (bude inicializován později s box_id) + self.mode_tracker: Optional[Any] = None + + # Setup telemetrie pouze pro ServiceShield + if not entry.options.get("no_telemetry", False): + self._setup_telemetry() + + def _setup_telemetry(self) -> None: + """Nastavit telemetrii pouze pro ServiceShield.""" + try: + import hashlib + + username = self.entry.data.get("username", "") + email_hash = hashlib.sha256(username.encode("utf-8")).hexdigest() + hass_id = hashlib.sha256( + self.hass.data["core.uuid"].encode("utf-8") + ).hexdigest() + + # Použijeme setup_simple_telemetry místo setup_otel_logging + self._telemetry_handler = setup_simple_telemetry(email_hash, hass_id) + + # Nastavit i pro zpětnou kompatibilitu + self.telemetry_handler = self._telemetry_handler + + self._logger.info("ServiceShield telemetry initialized successfully") + + except Exception as e: + self._logger.debug(f"Failed to setup ServiceShield telemetry: {e}") + # Pokud telemetrie selže, pokračujeme bez ní + self.telemetry_handler = None + self.telemetry_logger = None + + def _log_security_event(self, event_type: str, details: Dict[str, Any]) -> None: + """Zalogovat bezpečnostní událost do telemetrie.""" + if self._telemetry_handler: + security_logger = logging.getLogger( + "custom_components.oig_cloud.service_shield.security" + ) + security_logger.info( + f"SHIELD_SECURITY: {event_type}", + extra={ + "shield_event_type": event_type, + "task_id": details.get("task_id"), + "service": details.get("service"), + "entity": details.get("entity"), + "expected_value": details.get("expected_value"), + "actual_value": details.get("actual_value"), + "status": details.get("status"), + "timestamp": dt_now().isoformat(), + }, + ) + + async def _log_telemetry( + self, event_type: str, service_name: str, data: Optional[Dict[str, Any]] = None + ) -> None: + """Log telemetry event using SimpleTelemetry.""" + try: + _LOGGER.debug( + "Telemetry log start: event_type=%s service=%s", + event_type, + service_name, + ) + _LOGGER.debug( + "Telemetry handler available: %s", self._telemetry_handler is not None + ) + + if self._telemetry_handler: + # Připravíme telemetrii data + telemetry_data: Dict[str, Any] = { + "timestamp": dt_now().isoformat(), + "component": "service_shield", + } + + if data: + telemetry_data.update(data) + + _LOGGER.debug( + "Telemetry data prepared: %s", + telemetry_data, + ) + + # Odešleme do SimpleTelemetry + await self._telemetry_handler.send_event( + event_type=event_type, + service_name=service_name, + data=telemetry_data, + ) + + _LOGGER.debug("Telemetry sent successfully") + else: + _LOGGER.debug("Telemetry handler missing; skipping send") + + except Exception as e: + _LOGGER.error("Failed to log telemetry: %s", e, exc_info=True) + + def register_state_change_callback(self, callback: Callable[[], None]) -> None: + """Registruje callback, který se zavolá při změně shield stavu.""" + if callback not in self._state_change_callbacks: + self._state_change_callbacks.append(callback) + _LOGGER.debug("[OIG Shield] Registrován callback pro aktualizaci senzoru") + + def unregister_state_change_callback(self, callback: Callable[[], None]) -> None: + """Odregistruje callback.""" + if callback in self._state_change_callbacks: + self._state_change_callbacks.remove(callback) + _LOGGER.debug("[OIG Shield] Odregistrován callback") + + def _notify_state_change(self) -> None: + """Zavolá všechny registrované callbacky při změně stavu.""" + _LOGGER.debug( + f"[OIG Shield] Notifikuji {len(self._state_change_callbacks)} callbacků o změně stavu" + ) + for cb in self._state_change_callbacks: + try: + result = cb() + # Pokud callback vrátí coroutine, naplánuj ji + if result is not None and hasattr(result, "__await__"): + self.hass.async_create_task(result) + # Pokud vrátí None (synchronní callback), nic nedělej + except Exception as e: + _LOGGER.error(f"[OIG Shield] Chyba při volání callback: {e}") + + def _values_match(self, current_value: Any, expected_value: Any) -> bool: + """Porovná dvě hodnoty s normalizací.""" + return shield_validation.values_match(current_value, expected_value) + + async def start(self) -> None: + _LOGGER.debug("[OIG Shield] Inicializace – čištění fronty") + self.pending.clear() + self.queue.clear() + self.queue_metadata.clear() + self.running = None + + # Registrace shield services + await self.register_services() + + # Časový backup interval - slouží jako fallback, event-based monitoring je primární + _LOGGER.info( + f"[OIG Shield] Spouštím backup check_loop každých {CHECK_INTERVAL_SECONDS} sekund (primárně event-based)" + ) + + async_track_time_interval( + self.hass, self._check_loop, timedelta(seconds=CHECK_INTERVAL_SECONDS) + ) + + def _setup_state_listener(self) -> None: + """Nastaví posluchač změn stavů pro entity v pending.""" + # Zrušíme starý listener, pokud existuje + if self._state_listener_unsub: + self._state_listener_unsub() + self._state_listener_unsub = None + + # Pokud nejsou žádné pending služby, nemusíme poslouchat + if not self.pending: + _LOGGER.debug( + "[OIG Shield] Žádné pending služby, state listener nepotřebný" + ) + return + + # Získáme všechny entity, které sledujeme + entity_ids = self._collect_pending_entity_ids() + + if not entity_ids: + _LOGGER.debug("[OIG Shield] Žádné entity ke sledování") + return + + _LOGGER.info( + f"[OIG Shield] Nastavuji state listener pro {len(entity_ids)} entit: {entity_ids}" + ) + + # Nastavíme posluchač pro všechny sledované entity + self._state_listener_unsub = async_track_state_change_event( + self.hass, entity_ids, self._on_entity_state_changed + ) + + def _collect_pending_entity_ids(self) -> list[str]: + entity_ids: list[str] = [] + for service_info in self.pending.values(): + entity_ids.extend(service_info.get("entities", {}).keys()) + + power_monitor = service_info.get("power_monitor") + if power_monitor: + power_entity = power_monitor.get("entity_id") + if power_entity and power_entity not in entity_ids: + entity_ids.append(power_entity) + return entity_ids + + @callback + def _on_entity_state_changed(self, event: Event) -> None: + """Callback když se změní stav sledované entity - SYNC verze.""" + entity_id = event.data.get("entity_id") + new_state = event.data.get("new_state") + + if not new_state: + return + + _LOGGER.debug( + f"[OIG Shield] Detekována změna entity {entity_id} na '{new_state.state}' - spouštím kontrolu" + ) + + # KRITICKÁ OPRAVA: @callback NESMÍ být async! + # Naplánujeme _check_loop() jako async job v event loop + self.hass.async_create_task(self._check_loop(datetime.now())) + + async def register_services(self) -> None: + """Registruje služby ServiceShield.""" + await asyncio.sleep(0) + _LOGGER.info("[OIG Shield] Registering ServiceShield services") + + try: + # Registrace služby pro status ServiceShield + self.hass.services.async_register( + "oig_cloud", + "shield_status", + self._handle_shield_status, + schema=vol.Schema({}), + ) + + # Registrace služby pro queue info + self.hass.services.async_register( + "oig_cloud", + "shield_queue_info", + self._handle_queue_info, + schema=vol.Schema({}), + ) + + # Registrace služby pro smazání z fronty + self.hass.services.async_register( + "oig_cloud", + "shield_remove_from_queue", + self._handle_remove_from_queue, + schema=vol.Schema( + { + vol.Required("position"): int, + } + ), + ) + + _LOGGER.info("[OIG Shield] ServiceShield services registered successfully") + + except Exception as e: + _LOGGER.error( + f"[OIG Shield] Failed to register services: {e}", exc_info=True + ) + raise + + async def _handle_shield_status(self, call: Any) -> None: + """Handle shield status service call.""" + await shield_queue.handle_shield_status(self, call) + + async def _handle_queue_info(self, call: Any) -> None: + """Handle queue info service call.""" + await shield_queue.handle_queue_info(self, call) + + async def _handle_remove_from_queue(self, call: Any) -> None: + """Handle remove from queue service call.""" + await shield_queue.handle_remove_from_queue(self, call) + + def get_shield_status(self) -> str: + """Vrací aktuální stav ServiceShield.""" + return shield_queue.get_shield_status(self) + + def get_queue_info(self) -> Dict[str, Any]: + """Vrací informace o frontě.""" + return shield_queue.get_queue_info(self) + + def has_pending_mode_change(self, target_mode: Optional[str] = None) -> bool: + """Zjistí, jestli už probíhá nebo čeká service set_box_mode.""" + return shield_queue.has_pending_mode_change(self, target_mode) + + def _normalize_value(self, val: Any) -> str: + return shield_validation.normalize_value(val) + + def _get_entity_state(self, entity_id: str) -> Optional[str]: + return shield_validation.get_entity_state(self.hass, entity_id) + + def _extract_api_info( + self, service_name: str, params: Dict[str, Any] + ) -> Dict[str, Any]: + """Extract API call information from service parameters.""" + return shield_validation.extract_api_info(service_name, params) + + async def intercept_service_call( + self, + domain: str, + service: str, + data: Dict[str, Any], + original_call: Callable, + blocking: bool, + context: Optional[Context], + ) -> None: + await shield_dispatch.intercept_service_call( + self, + domain, + service, + data, + original_call, + blocking, + context, + ) + + async def _start_call( + self, + service_name: str, + data: Dict[str, Any], + expected_entities: Dict[str, str], + original_call: Callable, + domain: str, + service: str, + blocking: bool, + context: Optional[Context], + ) -> None: + await shield_dispatch.start_call( + self, + service_name, + data, + expected_entities, + original_call, + domain, + service, + blocking, + context, + ) + + async def cleanup(self) -> None: + """Vyčistí ServiceShield při ukončení.""" + # Cleanup mode tracker + if self.mode_tracker: + await self.mode_tracker.cleanup() + self._logger.info("[OIG Shield] Mode tracker cleaned up") + + # Zrušíme state listener + if self._state_listener_unsub: + self._state_listener_unsub() + self._state_listener_unsub = None + _LOGGER.info("[OIG Shield] State listener zrušen při cleanup") + + if self._telemetry_handler: + try: + # Odeslat závěrečnou telemetrii + if self.telemetry_logger: + self.telemetry_logger.info( + "ServiceShield cleanup initiated", + extra={ + "shield_data": { + "event": "cleanup", + "final_queue_length": len(self.queue), + "final_pending_count": len(self.pending), + "timestamp": dt_now().isoformat(), + } + }, + ) + + # Zavřít handler + if hasattr(self._telemetry_handler, "close"): + await self._telemetry_handler.close() + + # Odstranit handler z loggerů + shield_logger = logging.getLogger( + "custom_components.oig_cloud.service_shield" + ) + if self._telemetry_handler in shield_logger.handlers: + shield_logger.removeHandler(self._telemetry_handler) + + except Exception as e: + self._logger.debug(f"Error cleaning up telemetry: {e}") + + self._logger.debug("[OIG Shield] ServiceShield cleaned up") + + +# Delegated methods (queue/validation/dispatch) +ServiceShield.extract_expected_entities = shield_validation.extract_expected_entities +ServiceShield._check_entity_state_change = shield_validation.check_entity_state_change +ServiceShield._log_event = shield_dispatch.log_event +ServiceShield._safe_call_service = shield_dispatch.safe_call_service +ServiceShield._start_monitoring_task = shield_queue.start_monitoring_task +ServiceShield._check_entities_periodically = shield_queue.check_entities_periodically +ServiceShield._check_loop = shield_queue.check_loop +ServiceShield.start_monitoring = shield_queue.start_monitoring +ServiceShield._async_check_loop = shield_queue.async_check_loop + + +class ModeTransitionTracker: + """Sleduje dobu reakce střídače na změny režimu (box_prms_mode).""" + + def __init__(self, hass: HomeAssistant, box_id: str): + """Initialize the tracker. + + Args: + hass: Home Assistant instance + box_id: Box ID pro identifikaci senzoru + """ + self.hass = hass + self.box_id = box_id + self._logger = logging.getLogger(__name__) + + # Tracking aktivních transakcí: key = trace_id, value = {from_mode, to_mode, start_time} + self._active_transitions: Dict[str, Dict[str, Any]] = {} + + # Statistiky přechodů: key = "from_mode→to_mode", value = list of durations (seconds) + self._transition_history: Dict[str, List[float]] = {} + + # Max samples per scenario (limitovat memory) + self._max_samples = 100 + + # Listener pro změny stavu box_prms_mode + self._state_listener_unsub: Optional[Callable] = None + + self._logger.info(f"[ModeTracker] Initialized for box {box_id}") + + async def async_setup(self) -> None: + """Setup state change listener and load historical data.""" + sensor_id = f"sensor.oig_{self.box_id}_box_prms_mode" + + # Poslouchat změny stavu senzoru + self._state_listener_unsub = async_track_state_change_event( + self.hass, sensor_id, self._async_mode_changed + ) + + self._logger.info(f"[ModeTracker] Listening to {sensor_id}") + + # Načíst historická data z recorderu (async) + await self._async_load_historical_data(sensor_id) + + def track_request(self, trace_id: str, from_mode: str, to_mode: str) -> None: + """Track začátek transakce (když ServiceShield přidá do fronty). + + Args: + trace_id: Unique ID transakce + from_mode: Počáteční režim + to_mode: Cílový režim + """ + if from_mode == to_mode: + # Ignorovat same→same transakce + return + + self._active_transitions[trace_id] = { + "from_mode": from_mode, + "to_mode": to_mode, + "start_time": dt_now(), + } + + self._logger.debug( + f"[ModeTracker] Tracking {trace_id}: {from_mode} → {to_mode}" + ) + + @callback + def _async_mode_changed(self, event: Event) -> None: + """Callback when box_prms_mode state changes.""" + new_state = event.data.get("new_state") + old_state = event.data.get("old_state") + + if not new_state or not old_state: + return + + new_mode = new_state.state + old_mode = old_state.state + + if new_mode == old_mode: + return + + # Najít aktivní transakci která odpovídá této změně + for trace_id, transition in self._active_transitions.items(): + if ( + transition["from_mode"] == old_mode + and transition["to_mode"] == new_mode + ): + + # Spočítat dobu trvání + duration = (dt_now() - transition["start_time"]).total_seconds() + + # Uložit do historie + scenario_key = f"{old_mode}→{new_mode}" + if scenario_key not in self._transition_history: + self._transition_history[scenario_key] = [] + + # Přidat vzorek (limitovat na max_samples) + self._transition_history[scenario_key].append(duration) + if len(self._transition_history[scenario_key]) > self._max_samples: + self._transition_history[scenario_key].pop(0) # Remove oldest + + self._logger.info( + f"[ModeTracker] ✅ Completed {scenario_key} in {duration:.1f}s" + ) + + # Odstranit z aktivních + del self._active_transitions[trace_id] + break + + def get_statistics(self) -> Dict[str, Any]: + """Získat statistiky všech scénářů. + + Returns: + Dict with scenario statistics: + { + "Home 1→Home UPS": { + "median_seconds": 5.2, + "p95_seconds": 8.1, + "samples": 45, + "min": 3.1, + "max": 12.5 + } + } + """ + import statistics + + result = {} + + for scenario, durations in self._transition_history.items(): + if not durations: + continue + + try: + result[scenario] = { + "median_seconds": round(statistics.median(durations), 1), + "p95_seconds": ( + round( + statistics.quantiles(durations, n=20)[18], + 1, # 95th percentile + ) + if len(durations) >= 20 + else round(max(durations), 1) + ), + "samples": len(durations), + "min": round(min(durations), 1), + "max": round(max(durations), 1), + } + except Exception as e: + self._logger.error( + f"[ModeTracker] Error calculating stats for {scenario}: {e}" + ) + + return result + + def get_offset_for_scenario(self, from_mode: str, to_mode: str) -> float: + """Získat doporučený offset (v sekundách) pro daný scénář. + + Args: + from_mode: Počáteční režim + to_mode: Cílový režim + + Returns: + Doporučený offset v sekundách (95. percentil, nebo fallback 10s) + """ + scenario_key = f"{from_mode}→{to_mode}" + stats = self.get_statistics() + + if scenario_key in stats and stats[scenario_key]["samples"] >= 2: + # Použít 95. percentil pokud máme alespoň 2 vzorky + offset = stats[scenario_key]["p95_seconds"] + self._logger.debug( + f"[ModeTracker] Using offset for {scenario_key}: {offset}s " + f"(samples={stats[scenario_key]['samples']})" + ) + return offset + + # Fallback: 10 sekund + self._logger.debug( + f"[ModeTracker] No data for {scenario_key}, using fallback 10s" + ) + return 10.0 + + async def _async_load_historical_data(self, sensor_id: str) -> None: + """Načte historická data z recorderu a analyzuje přechody mezi režimy. + + Args: + sensor_id: ID senzoru (sensor.oig__box_prms_mode) + """ + try: + self._logger.info( + f"[ModeTracker] Loading historical data for {sensor_id}..." + ) + + state_list = await self._load_historical_states(sensor_id) + if not state_list: + self._logger.warning( + f"[ModeTracker] No historical data found for {sensor_id}" + ) + return + + self._logger.info( + f"[ModeTracker] Found {len(state_list)} historical states" + ) + + transitions_found = self._track_transitions(state_list) + self._trim_transition_history() + + self._logger.info( + f"[ModeTracker] Loaded {transitions_found} transitions from history, " + f"scenarios: {len(self._transition_history)}" + ) + + self._log_transition_stats() + + except Exception as e: + self._logger.error( + f"[ModeTracker] Error loading historical data: {e}", exc_info=True + ) + + async def _load_historical_states(self, sensor_id: str) -> Optional[list[Any]]: + end_time = dt_now() + start_time = end_time - timedelta(days=30) + + from homeassistant.components import recorder + + states = await self.hass.async_add_executor_job( + recorder.history.state_changes_during_period, + self.hass, + start_time, + end_time, + sensor_id, + ) + if not states or sensor_id not in states: + return None + return states[sensor_id] + + def _track_transitions(self, state_list: list[Any]) -> int: + transitions_found = 0 + for i in range(1, len(state_list)): + prev_state = state_list[i - 1] + curr_state = state_list[i] + + prev_mode = prev_state.state + curr_mode = curr_state.state + + if not self._is_valid_transition(prev_mode, curr_mode): + continue + + duration = (curr_state.last_changed - prev_state.last_changed).total_seconds() + if 0.1 < duration < 300: + self._record_transition(prev_mode, curr_mode, duration) + transitions_found += 1 + return transitions_found + + @staticmethod + def _is_valid_transition(prev_mode: str, curr_mode: str) -> bool: + return ( + prev_mode != curr_mode + and prev_mode != "unknown" + and curr_mode != "unknown" + ) + + def _record_transition(self, prev_mode: str, curr_mode: str, duration: float) -> None: + scenario_key = f"{prev_mode}→{curr_mode}" + self._transition_history.setdefault(scenario_key, []).append(duration) + + def _trim_transition_history(self) -> None: + for scenario_key in self._transition_history: + if len(self._transition_history[scenario_key]) > self._max_samples: + self._transition_history[scenario_key] = self._transition_history[ + scenario_key + ][-self._max_samples :] + + def _log_transition_stats(self) -> None: + stats = self.get_statistics() + for scenario, data in stats.items(): + self._logger.debug( + f"[ModeTracker] {scenario}: median={data['median_seconds']}s, " + f"p95={data['p95_seconds']}s, samples={data['samples']}" + ) + + async def async_cleanup(self) -> None: + """Cleanup listeners.""" + await asyncio.sleep(0) + if self._state_listener_unsub: + self._state_listener_unsub() + self._state_listener_unsub = None diff --git a/custom_components/oig_cloud/shield/dispatch.py b/custom_components/oig_cloud/shield/dispatch.py new file mode 100644 index 00000000..eff1b37a --- /dev/null +++ b/custom_components/oig_cloud/shield/dispatch.py @@ -0,0 +1,763 @@ +"""Service shield dispatch helpers.""" + +from __future__ import annotations + +import asyncio +import logging +import uuid +from datetime import datetime +from typing import Any, Dict, Optional + +from homeassistant.core import Context +from homeassistant.util.dt import now as dt_now + +_LOGGER = logging.getLogger(__name__) + +SERVICE_SET_BOX_MODE = "oig_cloud.set_box_mode" + + +def _split_grid_delivery_params(params: Dict[str, Any]) -> Optional[list[Dict[str, Any]]]: + if "mode" in params and "limit" in params: + mode_params = {k: v for k, v in params.items() if k != "limit"} + limit_params = {k: v for k, v in params.items() if k != "mode"} + return [mode_params, limit_params] + return None + + +def _is_duplicate( + shield: Any, + service_name: str, + params: Dict[str, Any], + expected_entities: Dict[str, str], +) -> Optional[str]: + new_expected_set = frozenset(expected_entities.items()) + new_params_set = frozenset(params.items()) if params else frozenset() + + for q in shield.queue: + queue_service = q[0] + queue_params = q[1] + queue_expected = q[2] + + queue_params_set = ( + frozenset(queue_params.items()) if queue_params else frozenset() + ) + queue_expected_set = frozenset(queue_expected.items()) + + if ( + queue_service == service_name + and queue_params_set == new_params_set + and queue_expected_set == new_expected_set + ): + return "queue" + + for pending_service_key, pending_info in shield.pending.items(): + pending_entities = pending_info.get("entities", {}) + pending_expected_set = frozenset(pending_entities.items()) + + if ( + pending_service_key == service_name + and pending_expected_set == new_expected_set + ): + return "pending" + + return None + + +def _entities_already_match( + shield: Any, expected_entities: Dict[str, str] +) -> bool: + for entity_id, expected_value in expected_entities.items(): + state = shield.hass.states.get(entity_id) + current = shield._normalize_value(state.state if state else None) + expected = shield._normalize_value(expected_value) + _LOGGER.debug( + "Intercept: entity=%s current=%r expected=%r", + entity_id, + current, + expected, + ) + if current != expected: + return False + return True + + +async def _handle_split_grid_delivery( + shield: Any, + domain: str, + service: str, + params: Dict[str, Any], + original_call: Any, + blocking: bool, + context: Optional[Context], +) -> bool: + split_params = _split_grid_delivery_params(params) + if not split_params: + return False + _LOGGER.info( + "[Grid Delivery] Detected mode + limit together, splitting into 2 calls" + ) + _LOGGER.info("[Grid Delivery] Step 1/2: Processing mode change") + await intercept_service_call( + shield, + domain, + service, + {"params": split_params[0]}, + original_call, + blocking, + context, + ) + _LOGGER.info("[Grid Delivery] Step 2/2: Processing limit change") + await intercept_service_call( + shield, + domain, + service, + {"params": split_params[1]}, + original_call, + blocking, + context, + ) + _LOGGER.info("[Grid Delivery] Both calls queued successfully") + return True + + +async def _handle_missing_expected( + shield: Any, + domain: str, + service: str, + service_name: str, + params: Dict[str, Any], + original_call: Any, + blocking: bool, + context: Optional[Context], +) -> bool: + if not getattr(shield, "_expected_entity_missing", False): + return False + _LOGGER.debug( + "Intercept: expected entities missing; calling original service without state verification" + ) + await original_call( + domain, service, service_data=params, blocking=blocking, context=context + ) + await shield._log_event( + "change_requested", + service_name, + {"params": params, "entities": {}}, + reason="Entita nenalezena – volám službu bez state validace", + context=context, + ) + return True + + +async def _handle_duplicate( + shield: Any, + duplicate_location: str, + service_name: str, + params: Dict[str, Any], + expected_entities: Dict[str, str], + context: Optional[Context], +) -> None: + _LOGGER.debug( + "Intercept: service already in %s; returning early", duplicate_location + ) + await shield._log_event( + "ignored", + service_name, + {"params": params, "entities": expected_entities}, + reason=( + "Ignorováno – služba se stejným efektem je již " + f"{'ve frontě' if duplicate_location == 'queue' else 'spuštěna'}" + ), + context=context, + ) + await shield._log_telemetry( + "ignored", + service_name, + { + "params": params, + "entities": expected_entities, + "reason": f"duplicate_in_{duplicate_location}", + }, + ) + + +def _log_dedup_state(shield: Any, service_name: str, params: Dict[str, Any], expected: Dict[str, str]) -> None: + _LOGGER.debug("Dedup: checking for duplicates") + _LOGGER.debug("Dedup: new service=%s", service_name) + _LOGGER.debug("Dedup: new params=%s", params) + _LOGGER.debug("Dedup: new expected=%s", expected) + _LOGGER.debug("Dedup: queue length=%s", len(shield.queue)) + _LOGGER.debug("Dedup: pending length=%s", len(shield.pending)) + for i, q in enumerate(shield.queue): + _LOGGER.debug( + "Dedup: queue[%s] service=%s params=%s expected=%s", i, q[0], q[1], q[2] + ) + for service_key, pending_info in shield.pending.items(): + _LOGGER.debug( + "Dedup: pending service=%s entities=%s", + service_key, + pending_info.get("entities", {}), + ) + + +async def _enqueue_or_run( + shield: Any, + service_name: str, + params: Dict[str, Any], + expected_entities: Dict[str, str], + original_call: Any, + domain: str, + service: str, + blocking: bool, + context: Optional[Context], + trace_id: str, +) -> None: + if shield.running is not None: + _LOGGER.info( + "[OIG Shield] Služba %s přidána do fronty (běží: %s)", + service_name, + shield.running, + ) + shield.queue.append( + ( + service_name, + params, + expected_entities, + original_call, + domain, + service, + blocking, + context, + ) + ) + shield.queue_metadata[(service_name, str(params))] = { + "trace_id": trace_id, + "queued_at": datetime.now(), + } + + if service_name == SERVICE_SET_BOX_MODE and shield.mode_tracker: + from_mode = params.get("current_value") + to_mode = params.get("value") + if from_mode and to_mode: + shield.mode_tracker.track_request(trace_id, from_mode, to_mode) + + shield._notify_state_change() + + await shield._log_event( + "queued", + service_name, + {"params": params, "entities": expected_entities}, + reason=f"Přidáno do fronty (běží: {shield.running})", + context=context, + ) + return + + _LOGGER.info("[OIG Shield] Spouštím službu %s (fronta prázdná)", service_name) + + if service_name == SERVICE_SET_BOX_MODE and shield.mode_tracker: + from_mode = params.get("current_value") + to_mode = params.get("value") + if from_mode and to_mode: + shield.mode_tracker.track_request(trace_id, from_mode, to_mode) + + await start_call( + shield, + service_name, + params, + expected_entities, + original_call, + domain, + service, + blocking, + context, + ) + + +async def intercept_service_call( + shield: Any, + domain: str, + service: str, + data: Dict[str, Any], + original_call: Any, + blocking: bool, + context: Optional[Context], +) -> None: + """Intercept service calls and queue/execute in shield.""" + service_name = f"{domain}.{service}" + params = data["params"] + trace_id = str(uuid.uuid4())[:8] + + if service_name == "oig_cloud.set_grid_delivery" and await _handle_split_grid_delivery( + shield, domain, service, params, original_call, blocking, context + ): + return + + expected_entities = shield.extract_expected_entities(service_name, params) + api_info = shield._extract_api_info(service_name, params) + + _LOGGER.debug("Intercept service: %s", service_name) + _LOGGER.debug("Intercept expected entities: %s", expected_entities) + _LOGGER.debug("Intercept queue length: %s", len(shield.queue)) + _LOGGER.debug("Intercept running: %s", shield.running) + + shield._log_security_event( + "SERVICE_INTERCEPTED", + { + "task_id": trace_id, + "service": service_name, + "params": str(params), + "expected_entities": str(expected_entities), + }, + ) + + if not expected_entities: + handled = await _handle_missing_expected( + shield, + domain, + service, + service_name, + params, + original_call, + blocking, + context, + ) + if handled: + return + + _log_dedup_state(shield, service_name, params, expected_entities) + + duplicate_location = _is_duplicate( + shield, service_name, params, expected_entities + ) + + if duplicate_location: + await _handle_duplicate( + shield, duplicate_location, service_name, params, expected_entities, context + ) + return + + if _entities_already_match(shield, expected_entities): + _LOGGER.debug("Intercept: all entities already match; returning early") + await shield._log_telemetry( + "skipped", + service_name, + { + "trace_id": trace_id, + "params": params, + "entities": expected_entities, + "reason": "already_completed", + **api_info, + }, + ) + await shield._log_event( + "skipped", + service_name, + {"params": params, "entities": expected_entities}, + reason="Změna již provedena – není co volat", + context=context, + ) + return + + _LOGGER.debug("Intercept: will execute service; logging telemetry") + await shield._log_telemetry( + "change_requested", + service_name, + { + "trace_id": trace_id, + "params": params, + "entities": expected_entities, + **api_info, + }, + ) + + await _enqueue_or_run( + shield, + service_name, + params, + expected_entities, + original_call, + domain, + service, + blocking, + context, + trace_id, + ) + + +async def start_call( + shield: Any, + service_name: str, + data: Dict[str, Any], + expected_entities: Dict[str, str], + original_call: Any, + domain: str, + service: str, + blocking: bool, + context: Optional[Context], +) -> None: + """Start a call and register pending state.""" + original_states = _capture_original_states(shield, expected_entities) + power_monitor = _init_power_monitor(shield, service_name, data) + + shield.pending[service_name] = { + "entities": expected_entities, + "original_states": original_states, + "params": data, + "called_at": datetime.now(), + "power_monitor": power_monitor, + } + + shield.running = service_name + shield.queue_metadata.pop((service_name, str(data)), None) + + _fire_queue_info_event(shield) + + shield._notify_state_change() + + await _log_start_events( + shield, + service_name, + data=data, + expected_entities=expected_entities, + original_states=original_states, + context=context, + ) + + await original_call( + domain, service, service_data=data, blocking=blocking, context=context + ) + + await _refresh_coordinator_after_call(shield, service_name) + + shield._setup_state_listener() + + +async def safe_call_service( + shield: Any, service_name: str, service_data: Dict[str, Any] +) -> bool: + """Safely call service with state verification.""" + try: + await shield.hass.services.async_call("oig_cloud", service_name, service_data) + + await asyncio.sleep(2) + + entity_id = service_data.get("entity_id") + if not entity_id: + return True + + if service_name == "set_boiler_mode": + mode_value = service_data.get("mode", "CBB") + expected_value = 1 if mode_value == "Manual" else 0 + + boiler_entities = [ + entity_id + for entity_id in shield.hass.states.async_entity_ids() + if "boiler_manual_mode" in entity_id + ] + + for boiler_entity in boiler_entities: + if shield._check_entity_state_change(boiler_entity, expected_value): + shield._logger.info("✅ Boiler mode změněn na %s", mode_value) + return True + return False # pragma: no cover + + if "mode" in service_data: + expected_value = service_data["mode"] + if shield._check_entity_state_change(entity_id, expected_value): + shield._logger.info( + "✅ Entita %s změněna na %s", entity_id, expected_value + ) + return True + return False # pragma: no cover + + return True # pragma: no cover + + except Exception as err: + shield._logger.error("❌ Chyba při volání služby %s: %s", service_name, err) + return False + + +async def log_event( + shield: Any, + event_type: str, + service: str, + data: Dict[str, Any], + reason: Optional[str] = None, + context: Optional[Context] = None, +) -> None: + """Log an event to logbook + fire event.""" + await asyncio.sleep(0) + params = data.get("params", {}) if data else {} + entities = data.get("entities", {}) if data else {} + + entity_id = list(entities.keys())[0] if entities else None + expected_value = list(entities.values())[0] if entities else None + + display_entity_id = ( + shield.last_checked_entity_id if shield.last_checked_entity_id else entity_id + ) + + from_value = None + if entity_id: + state = shield.hass.states.get(entity_id) + from_value = state.state if state else None + + friendly_name = entity_id + if entity_id: + state = shield.hass.states.get(entity_id) + if state and state.attributes.get("friendly_name"): + friendly_name = state.attributes.get("friendly_name") + + is_limit_change = entity_id and entity_id.endswith("_invertor_prm1_p_max_feed_grid") + message = _build_log_message( + event_type, + service, + friendly_name, + expected_value, + from_value, + is_limit_change, + ) + + shield.hass.bus.async_fire( + "logbook_entry", + { + "name": "OIG Shield", + "message": message, + "domain": "oig_cloud", + "entity_id": display_entity_id, + "when": dt_now(), + "source": "OIG Cloud Shield", + "source_type": "system", + }, + context=context, + ) + + shield.hass.bus.async_fire( + "oig_cloud_service_shield_event", + { + "event_type": event_type, + "service": service, + "entity_id": entity_id, + "from": from_value, + "to": expected_value, + "friendly_name": friendly_name, + "reason": reason, + "params": params, + }, + context=context, + ) + + +def _capture_original_states( + shield: Any, expected_entities: Dict[str, str] +) -> Dict[str, Optional[str]]: + original_states: Dict[str, Optional[str]] = {} + for entity_id in expected_entities.keys(): + state = shield.hass.states.get(entity_id) + original_states[entity_id] = state.state if state else None + return original_states + + +def _init_power_monitor( + shield: Any, service_name: str, data: Dict[str, Any] +) -> Optional[Dict[str, Any]]: + if service_name != SERVICE_SET_BOX_MODE: + return None + box_id = _resolve_box_id_for_power_monitor(shield) + if not box_id: + _LOGGER.warning("[OIG Shield] Power monitor: box_id nenalezen!") + return None + + power_entity = _build_power_entity(box_id) + current_power = _read_power_state(shield, power_entity) + if current_power is None: + return None + + target_mode = _normalize_target_mode(data) + if target_mode is None: + return None # pragma: no cover + + power_monitor = _build_power_monitor(power_entity, current_power, target_mode) + _LOGGER.info( + "[OIG Shield] Power monitor aktivní pro %s: baseline=%sW, target=%s, going_to_ups=%s", + service_name, + current_power, + target_mode, + power_monitor["is_going_to_home_ups"], + ) + return power_monitor + + +def _build_power_entity(box_id: str) -> str: + return f"sensor.oig_{box_id}_actual_aci_wtotal" + + +def _read_power_state(shield: Any, power_entity: str) -> Optional[float]: + power_state = shield.hass.states.get(power_entity) + if not power_state: + _LOGGER.warning( + "[OIG Shield] Power monitor: entita %s neexistuje!", + power_entity, + ) + return None + if power_state.state in ["unknown", "unavailable"]: + _LOGGER.warning( + "[OIG Shield] Power monitor: entita %s je %s", + power_entity, + power_state.state, + ) + return None + try: + return float(power_state.state) + except (ValueError, TypeError) as err: + _LOGGER.warning("[OIG Shield] Nelze inicializovat power monitor: %s", err) + return None + + +def _normalize_target_mode(data: Dict[str, Any]) -> Optional[str]: + target_mode = data.get("value", "") + if not isinstance(target_mode, str): + return None # pragma: no cover + return target_mode.upper() + + +def _build_power_monitor( + power_entity: str, current_power: float, target_mode: str +) -> Dict[str, Any]: + return { + "entity_id": power_entity, + "baseline_power": current_power, + "last_power": current_power, + "target_mode": target_mode, + "is_going_to_home_ups": "HOME UPS" in target_mode, + "threshold_kw": 2.5, + "started_at": datetime.now(), + } + + +def _resolve_box_id_for_power_monitor(shield: Any) -> Optional[str]: + if not shield.hass.data.get("oig_cloud"): + return None # pragma: no cover + for _entry_id, entry_data in shield.hass.data["oig_cloud"].items(): + if entry_data.get("service_shield") != shield: + continue # pragma: no cover + coordinator = entry_data.get("coordinator") + if coordinator: + try: + from ..entities.base_sensor import resolve_box_id + + return resolve_box_id(coordinator) + except Exception: + return None + return None + + +def _fire_queue_info_event(shield: Any) -> None: + shield.hass.bus.async_fire( + "oig_cloud_shield_queue_info", + { + "running": shield.running, + "queue_length": len(shield.queue), + "pending_count": len(shield.pending), + "queue_services": [item[0] for item in shield.queue], + "timestamp": dt_now().isoformat(), + }, + ) + + +async def _log_start_events( + shield: Any, + service_name: str, + *, + data: Dict[str, Any], + expected_entities: Dict[str, str], + original_states: Dict[str, Optional[str]], + context: Optional[Context], +) -> None: + await shield._log_event( + "change_requested", + service_name, + { + "params": data, + "entities": expected_entities, + "original_states": original_states, + }, + reason="Požadavek odeslán do API", + context=context, + ) + + await shield._log_event( + "started", + service_name, + { + "params": data, + "entities": expected_entities, + "original_states": original_states, + }, + context=context, + ) + + +async def _refresh_coordinator_after_call(shield: Any, service_name: str) -> None: + try: + from ..const import DOMAIN + + coordinator = ( + shield.hass.data.get(DOMAIN, {}) + .get(shield.entry.entry_id, {}) + .get("coordinator") + ) + if coordinator: + _LOGGER.debug( + "[OIG Shield] Vynucuji okamžitou aktualizaci coordinatoru po API volání pro %s", + service_name, + ) + await coordinator.async_request_refresh() + _LOGGER.debug( + "[OIG Shield] Coordinator refreshnut - entity by měly být aktuální" + ) + else: + _LOGGER.warning( + "[OIG Shield] Coordinator nenalezen - entity se aktualizují až při příštím scheduled update!" + ) + except Exception as err: + _LOGGER.error( + "[OIG Shield] Chyba při refreshu coordinatoru: %s", + err, + exc_info=True, + ) + + +def _build_log_message( + event_type: str, + service: str, + friendly_name: Optional[str], + expected_value: Optional[str], + from_value: Optional[str], + is_limit_change: bool, +) -> str: + if event_type == "queued": + return f"Zařazeno do fronty – {friendly_name}: čeká na změnu" + if event_type == "started": + return f"Spuštěno – {friendly_name}: zahajuji změnu" + if event_type == "completed": + if is_limit_change: + return ( + f"Dokončeno – {friendly_name}: limit nastaven na {expected_value}W" + ) + return f"Dokončeno – {friendly_name}: změna na '{expected_value}'" + if event_type == "timeout": + if is_limit_change: + return ( + f"Časový limit vypršel – {friendly_name}: limit stále není {expected_value}W" + ) + return ( + f"Časový limit vypršel – {friendly_name} stále není '{expected_value}' " + f"(aktuální: '{from_value}')" + ) + if event_type == "released": + return f"Semafor uvolněn – služba {service} dokončena" + if event_type == "cancelled": + return ( + f"Zrušeno uživatelem – {friendly_name}: očekávaná změna na '{expected_value}' nebyla provedena" + ) + return f"{event_type} – {service}" diff --git a/custom_components/oig_cloud/shield/queue.py b/custom_components/oig_cloud/shield/queue.py new file mode 100644 index 00000000..2f225bed --- /dev/null +++ b/custom_components/oig_cloud/shield/queue.py @@ -0,0 +1,657 @@ +"""Service shield queue helpers.""" + +from __future__ import annotations + +import asyncio +import logging +import time +from datetime import datetime, timedelta +from typing import Any, Dict, Optional + +from homeassistant.core import callback +from homeassistant.util.dt import now as dt_now + +TIMEOUT_MINUTES = 15 +SERVICE_SET_BOX_MODE = "oig_cloud.set_box_mode" + +_LOGGER = logging.getLogger(__name__) + + +async def handle_shield_status(shield: Any, call: Any) -> None: + """Handle shield status service call.""" + await asyncio.sleep(0) + _ = call + status = get_shield_status(shield) + _LOGGER.info("[OIG Shield] Current status: %s", status) + + shield.hass.bus.async_fire( + "oig_cloud_shield_status", + {"status": status, "timestamp": dt_now().isoformat()}, + ) + + +async def handle_queue_info(shield: Any, call: Any) -> None: + """Handle queue info service call.""" + await asyncio.sleep(0) + _ = call + queue_info = get_queue_info(shield) + _LOGGER.info("[OIG Shield] Queue info: %s", queue_info) + + shield.hass.bus.async_fire( + "oig_cloud_shield_queue_info", + {**queue_info, "timestamp": dt_now().isoformat()}, + ) + + +async def handle_remove_from_queue(shield: Any, call: Any) -> None: + """Handle remove from queue service call.""" + position = call.data.get("position") + total_items = len(shield.pending) + len(shield.queue) + + if position < 1 or position > total_items: + _LOGGER.error( + "[OIG Shield] Neplatná pozice: %s (pending: %s, queue: %s)", + position, + len(shield.pending), + len(shield.queue), + ) + return + + if position == 1 and len(shield.pending) > 0: + _LOGGER.warning( + "[OIG Shield] Nelze smazat běžící službu na pozici 1 (running: %s)", + shield.running, + ) + return + + queue_index = position - 1 - len(shield.pending) + + if queue_index < 0 or queue_index >= len(shield.queue): + _LOGGER.error( + "[OIG Shield] Chyba výpočtu indexu: position=%s, queue_index=%s, queue_len=%s", + position, + queue_index, + len(shield.queue), + ) + return + + removed_item = shield.queue[queue_index] + service_name = removed_item[0] + params = removed_item[1] + expected_entities = removed_item[2] + + del shield.queue[queue_index] + shield.queue_metadata.pop((service_name, str(params)), None) + + _LOGGER.info( + "[OIG Shield] Odstraněna položka z fronty na pozici %s: %s", + position, + service_name, + ) + + await shield._log_event( + "cancelled", + service_name, + { + "params": params, + "entities": expected_entities, + }, + reason=f"Uživatel zrušil požadavek z fronty (pozice {position})", + context=call.context, + ) + + shield._notify_state_change() + + shield.hass.bus.async_fire( + "oig_cloud_shield_queue_removed", + { + "position": position, + "service": service_name, + "remaining": len(shield.queue), + "timestamp": dt_now().isoformat(), + }, + ) + + +def _clear_state_listener(shield: Any) -> None: + if shield._state_listener_unsub: + shield._state_listener_unsub() + shield._state_listener_unsub = None + + +def _get_timeout_minutes(service_name: str) -> int: + return 2 if service_name == "oig_cloud.set_formating_mode" else TIMEOUT_MINUTES + + +async def _handle_timeout(shield: Any, service_name: str, info: Dict[str, Any]) -> None: + if service_name == "oig_cloud.set_formating_mode": + _LOGGER.info( + "[OIG Shield] Formating mode dokončeno po 2 minutách (automaticky)" + ) + await shield._log_event( + "completed", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + reason="Formátování dokončeno (automaticky po 2 min)", + ) + await shield._log_telemetry( + "completed", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "reason": "auto_timeout", + }, + ) + return + + _LOGGER.warning("[OIG Shield] Timeout pro službu %s", service_name) + await shield._log_event( + "timeout", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + ) + await shield._log_telemetry( + "timeout", + service_name, + {"params": info["params"], "entities": info["entities"]}, + ) + + +def _get_power_monitor_state( + shield: Any, power_monitor: Dict[str, Any] +) -> Optional[float]: + power_entity = power_monitor["entity_id"] + power_state = shield.hass.states.get(power_entity) + + if not power_state: + _LOGGER.warning( + "[OIG Shield] Power monitor: entita %s neexistuje", + power_entity, + ) + return None + if power_state.state in ["unknown", "unavailable"]: + _LOGGER.debug( + "[OIG Shield] Power monitor: entita %s je %s", + power_entity, + power_state.state, + ) + return None + try: + return float(power_state.state) + except (ValueError, TypeError): + return None + + +def get_shield_status(shield: Any) -> str: + """Return shield status.""" + if shield.running: + return f"Běží: {shield.running}" + if shield.queue: + return f"Ve frontě: {len(shield.queue)} služeb" + return "Neaktivní" + + +def get_queue_info(shield: Any) -> Dict[str, Any]: + """Return queue info.""" + return { + "running": shield.running, + "queue_length": len(shield.queue), + "pending_count": len(shield.pending), + "queue_services": [item[0] for item in shield.queue], + } + + +def has_pending_mode_change(shield: Any, target_mode: Optional[str] = None) -> bool: + """Return True if pending/queued mode change already exists.""" + if _pending_has_box_mode(shield, target_mode): + return True + if _queue_has_box_mode(shield, target_mode): + return True + return shield.running == SERVICE_SET_BOX_MODE + + +def _matches_target_mode( + shield: Any, entities: Dict[str, str], target_mode: Optional[str] +) -> bool: + if not entities: + return False + if not target_mode: + return True + + normalized_target = shield._normalize_value(target_mode) + return any( + shield._normalize_value(value) == normalized_target for value in entities.values() + ) + + +def _pending_has_box_mode(shield: Any, target_mode: Optional[str]) -> bool: + return any( + _matches_target_mode(shield, info.get("entities", {}), target_mode) + for service_name, info in shield.pending.items() + if service_name == SERVICE_SET_BOX_MODE + ) + + +def _queue_has_box_mode(shield: Any, target_mode: Optional[str]) -> bool: + return any( + _matches_target_mode(shield, expected_entities, target_mode) + for service_name, _params, expected_entities, *_ in shield.queue + if service_name == SERVICE_SET_BOX_MODE + ) + + +@callback +async def check_loop(shield: Any, _now: datetime) -> None: # noqa: C901 + """Check pending operations and advance queue.""" + if shield._is_checking: + _LOGGER.debug("[OIG Shield] Check loop již běží, přeskakuji") + return + + shield._is_checking = True + try: + _log_check_loop_state(shield) + if _is_queue_idle(shield): + _LOGGER.debug("[OIG Shield] Check loop - vše prázdné, žádná akce") + _clear_state_listener(shield) + return + + finished = await _collect_finished_pending(shield) + _clear_finished_pending(shield, finished) + await _maybe_start_next_call(shield) + + if finished: + shield._notify_state_change() + + finally: + shield._is_checking = False + + +def _log_check_loop_state(shield: Any) -> None: + _LOGGER.debug( + "[OIG Shield] Check loop tick - pending: %s, queue: %s, running: %s", + len(shield.pending), + len(shield.queue), + shield.running, + ) + + +def _is_queue_idle(shield: Any) -> bool: + return not shield.pending and not shield.queue and not shield.running + + +async def _collect_finished_pending(shield: Any) -> list[str]: + finished = [] + for service_name, info in shield.pending.items(): + _LOGGER.debug("[OIG Shield] Kontroluji pending službu: %s", service_name) + if await _process_pending_service(shield, service_name, info): + finished.append(service_name) + return finished + + +def _clear_finished_pending(shield: Any, finished: list[str]) -> None: + for service_name in finished: + shield.pending.pop(service_name, None) + if shield.running == service_name: + shield.running = None + + +async def _maybe_start_next_call(shield: Any) -> None: + if shield.running or not shield.queue: + return + ( + service_name, + params, + expected_entities, + original_call, + domain, + service, + blocking, + context, + ) = shield.queue.pop(0) + await shield._start_call( + service_name, + params, + expected_entities, + original_call, + domain, + service, + blocking, + context, + ) + + +async def _process_pending_service( + shield: Any, service_name: str, info: Dict[str, Any] +) -> bool: + timeout_minutes = _get_timeout_minutes(service_name) + + if datetime.now() - info["called_at"] > timedelta(minutes=timeout_minutes): + await _handle_timeout(shield, service_name, info) + return True + + if _check_power_monitor(shield, info): + await _handle_power_monitor_completion(shield, service_name, info) + return True + + if _entities_match(shield, service_name, info, timeout_minutes): + await _handle_entity_completion(shield, service_name, info) + return True + + return False + + +def _check_power_monitor(shield: Any, info: Dict[str, Any]) -> bool: + power_monitor = info.get("power_monitor") + if not power_monitor: + return False + + current_power = _get_power_monitor_state(shield, power_monitor) + if current_power is None: + return False + + try: + last_power = power_monitor["last_power"] + is_going_to_home_ups = power_monitor["is_going_to_home_ups"] + threshold_w = power_monitor["threshold_kw"] * 1000 + power_delta = current_power - last_power + + _LOGGER.info( + "[OIG Shield] Power monitor check: current=%sW, last=%sW, delta=%sW, threshold=±%sW, going_to_ups=%s", + current_power, + last_power, + power_delta, + threshold_w, + is_going_to_home_ups, + ) + + power_monitor["last_power"] = current_power + + if is_going_to_home_ups and power_delta >= threshold_w: + _LOGGER.info( + "[OIG Shield] ✅ POWER JUMP DETECTED! Nárůst %sW (>= %sW) → HOME UPS aktivní", + power_delta, + threshold_w, + ) + return True + + if not is_going_to_home_ups and power_delta <= -threshold_w: + _LOGGER.info( + "[OIG Shield] ✅ POWER DROP DETECTED! Pokles %sW (<= -%sW) → HOME UPS vypnutý", + power_delta, + threshold_w, + ) + return True + + except (ValueError, TypeError) as err: + _LOGGER.warning("[OIG Shield] Chyba při parsování power hodnoty: %s", err) + + return False + + +async def _handle_power_monitor_completion( + shield: Any, service_name: str, info: Dict[str, Any] +) -> None: + _LOGGER.info( + "[SHIELD CHECK] ✅✅✅ Služba %s dokončena pomocí POWER MONITOR!", service_name + ) + await shield._log_event( + "completed", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + reason="Detekován skok výkonu (power monitor)", + ) + await shield._log_telemetry( + "completed", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "completion_method": "power_monitor", + }, + ) + await shield._log_event( + "released", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + reason="Semafor uvolněn – služba dokončena (power monitor)", + ) + + +def _entities_match( + shield: Any, service_name: str, info: Dict[str, Any], timeout_minutes: int +) -> bool: + _LOGGER.info( + "[SHIELD CHECK] Služba: %s, entities: %s", + service_name, + info["entities"], + ) + + for entity_id, expected_value in info["entities"].items(): + if entity_id.startswith("fake_formating_mode_"): + _LOGGER.debug( + "[OIG Shield] Formating mode - čekám na timeout (zbývá %.1f min)", + timeout_minutes + - (datetime.now() - info["called_at"]).total_seconds() / 60, + ) + return False + + state = shield.hass.states.get(entity_id) + current_value = state.state if state else None + + norm_expected, norm_current = _normalize_entity_values( + shield, entity_id, expected_value, current_value + ) + + _LOGGER.info( + "[SHIELD CHECK] Kontrola %s: aktuální='%s', očekávaná='%s' (normalizace: '%s' vs '%s') → MATCH: %s", + entity_id, + current_value, + expected_value, + norm_current, + norm_expected, + norm_current == norm_expected, + ) + + if norm_current != norm_expected: + _LOGGER.debug( + "[SHIELD CHECK] ❌ Entity %s NENÍ v požadovaném stavu! Očekáváno '%s', je '%s'", + entity_id, + norm_expected, + norm_current, + ) + return False + + return True + + +def _normalize_entity_values( + shield: Any, + entity_id: str, + expected_value: Any, + current_value: Any, +) -> tuple[str, str]: + if entity_id and entity_id.endswith("_invertor_prm1_p_max_feed_grid"): + try: + return ( + str(round(float(expected_value))), + str(round(float(current_value))), + ) + except (ValueError, TypeError): + return (str(expected_value), str(current_value or "")) + + norm_expected = shield._normalize_value(expected_value) + norm_current = shield._normalize_value(current_value) + + if entity_id and entity_id.endswith("_invertor_prms_to_grid"): + if entity_id.startswith("binary_sensor.") and norm_expected == "omezeno": + norm_expected = "zapnuto" + + return norm_expected, norm_current + + +async def _handle_entity_completion( + shield: Any, service_name: str, info: Dict[str, Any] +) -> None: + _LOGGER.info( + "[SHIELD CHECK] ✅ Service %s completed - all entities match", service_name + ) + await shield._log_event( + "completed", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + reason="Všechny entity mají očekávané hodnoty", + ) + await shield._log_telemetry( + "completed", + service_name, + {"params": info["params"], "entities": info["entities"]}, + ) + await shield._log_event( + "released", + service_name, + { + "params": info["params"], + "entities": info["entities"], + "original_states": info.get("original_states", {}), + }, + reason="Semafor uvolněn – služba dokončena", + ) + + +def start_monitoring_task( + shield: Any, task_id: str, expected_entities: Dict[str, str], timeout: int +) -> None: + """Start monitoring task.""" + shield._active_tasks[task_id] = { + "expected_entities": expected_entities, + "timeout": timeout, + "start_time": time.time(), + "status": "monitoring", + } + + shield._log_security_event( + "MONITORING_STARTED", + { + "task_id": task_id, + "expected_entities": str(expected_entities), + "timeout": timeout, + "status": "started", + }, + ) + + +async def check_entities_periodically(shield: Any, task_id: str) -> None: + """Periodically check entities for a task.""" + await asyncio.sleep(0) + while task_id in shield._active_tasks: + task_info = shield._active_tasks[task_id] + expected_entities = task_info["expected_entities"] + + all_conditions_met = True + for entity_id, expected_value in expected_entities.items(): + current_value = shield._get_entity_state(entity_id) + if not shield._values_match(current_value, expected_value): + all_conditions_met = False + shield._log_security_event( + "VERIFICATION_FAILED", + { + "task_id": task_id, + "entity": entity_id, + "expected_value": expected_value, + "actual_value": current_value, + "status": "mismatch", + }, + ) + + if all_conditions_met: + shield._log_security_event( + "MONITORING_SUCCESS", + { + "task_id": task_id, + "status": "completed", + "duration": time.time() - task_info["start_time"], + }, + ) + shield._log_security_event( + "MONITORING_SUCCESS", + { + "task_id": task_id, + "status": "completed", + "duration": time.time() - task_info["start_time"], + }, + ) + break + + if time.time() - task_info["start_time"] > task_info["timeout"]: + shield._log_security_event( + "MONITORING_TIMEOUT", + { + "task_id": task_id, + "status": "timeout", + "duration": task_info["timeout"], + }, + ) + shield._log_security_event( + "MONITORING_TIMEOUT", + { + "task_id": task_id, + "status": "timeout", + "duration": task_info["timeout"], + }, + ) + break + + +def start_monitoring(shield: Any) -> None: + """Start monitoring task.""" + if shield.check_task is None or shield.check_task.done(): + _LOGGER.info("[OIG Shield] Spouštím monitoring task") + + if shield.check_task and shield.check_task.done(): + _LOGGER.warning( + "[OIG Shield] Předchozí task byl dokončen: %s", shield.check_task + ) + + shield.check_task = asyncio.create_task(async_check_loop(shield)) + + _LOGGER.info("[OIG Shield] Task vytvořen: %s", shield.check_task) + _LOGGER.info("[OIG Shield] Task done: %s", shield.check_task.done()) + _LOGGER.info("[OIG Shield] Task cancelled: %s", shield.check_task.cancelled()) + else: + _LOGGER.debug("[OIG Shield] Monitoring task již běží") + + +async def async_check_loop(shield: Any) -> None: + """Async loop for processing services.""" + _LOGGER.debug("[OIG Shield] Monitoring loop spuštěn") + + while True: + try: + await check_loop(shield, datetime.now()) + await asyncio.sleep(1) + except Exception as err: + _LOGGER.error( + "[OIG Shield] Chyba v monitoring smyčce: %s", err, exc_info=True + ) + await asyncio.sleep(5) diff --git a/custom_components/oig_cloud/shield/validation.py b/custom_components/oig_cloud/shield/validation.py new file mode 100644 index 00000000..934a470e --- /dev/null +++ b/custom_components/oig_cloud/shield/validation.py @@ -0,0 +1,469 @@ +"""Service shield validation helpers.""" + +from __future__ import annotations + +import logging +from datetime import datetime +from typing import Any, Callable, Dict, Optional + +from ..const import DOMAIN + +_LOGGER = logging.getLogger(__name__) +HOME_5_LABEL = "Home 5" +HOME_1_LABEL = "Home 1" +HOME_2_LABEL = "Home 2" +HOME_3_LABEL = "Home 3" +HOME_UPS_LABEL = "Home UPS" +HOME_6_LABEL = "Home 6" +MANUAL_LABEL = "Manuální" +API_ENDPOINT_SET_VALUE = "Device.Set.Value.php" + +SERVICE_SET_BOX_MODE = "oig_cloud.set_box_mode" + + +def normalize_value(val: Any) -> str: + """Normalize string values for shield comparisons.""" + normalized = ( + str(val or "") + .strip() + .lower() + .replace(" ", "") + .replace("/", "") + .replace("_", "") + ) + mapping = { + "vypnutoon": "vypnuto", + "vypnuto": "vypnuto", + "off": "vypnuto", + "zapnutoon": "zapnuto", + "zapnuto": "zapnuto", + "on": "zapnuto", + "somezenimlimited": "omezeno", + "limited": "omezeno", + "omezeno": "omezeno", + "manuální": "manualni", + "manual": "manualni", + "cbb": "cbb", + } + return mapping.get(normalized, normalized) + + +def values_match(current_value: Any, expected_value: Any) -> bool: + """Compare values with normalization.""" + try: + if str(expected_value).replace(".", "").replace("-", "").isdigit(): + return float(current_value or 0) == float(expected_value) + return normalize_value(current_value) == normalize_value(expected_value) + except (ValueError, TypeError): + return str(current_value) == str(expected_value) + + +def get_entity_state(hass: Any, entity_id: str) -> Optional[str]: + """Return state for entity id.""" + state = hass.states.get(entity_id) + return state.state if state else None + + +def extract_api_info(service_name: str, params: Dict[str, Any]) -> Dict[str, Any]: + """Extract API call information from service parameters.""" + api_info: Dict[str, Any] = {} + + if service_name == "oig_cloud.set_boiler_mode": + mode = params.get("mode") + mode_key = str(mode or "").strip().lower() + api_info = { + "api_endpoint": API_ENDPOINT_SET_VALUE, + "api_table": "boiler_prms", + "api_column": "manual", + "api_value": 1 if mode_key in {"manual", "manuální"} else 0, + "api_description": f"Set boiler mode to {mode}", + } + elif service_name == SERVICE_SET_BOX_MODE: + mode = params.get("mode") + api_info = { + "api_endpoint": API_ENDPOINT_SET_VALUE, + "api_table": "box_prms", + "api_column": "mode", + "api_value": mode, + "api_description": f"Set box mode to {mode}", + } + elif service_name == "oig_cloud.set_grid_delivery": + if "limit" in params: + api_info = { + "api_endpoint": API_ENDPOINT_SET_VALUE, + "api_table": "invertor_prm1", + "api_column": "p_max_feed_grid", + "api_value": params["limit"], + "api_description": f"Set grid delivery limit to {params['limit']}W", + } + elif "mode" in params: + api_info = { + "api_endpoint": API_ENDPOINT_SET_VALUE, + "api_table": "invertor_prms", + "api_column": "to_grid", + "api_value": params["mode"], + "api_description": f"Set grid delivery mode to {params['mode']}", + } + + return api_info + + +def extract_expected_entities( + shield: Any, service_name: str, data: Dict[str, Any] +) -> Dict[str, str]: + """Extract expected entities and target values.""" + shield.last_checked_entity_id = None + shield._expected_entity_missing = False + + def find_entity(suffix: str) -> str | None: + _LOGGER.info("[FIND ENTITY] Hledám cloud entitu se suffixem: %s", suffix) + box_id = _resolve_box_id_for_shield(shield) + if not box_id: + _LOGGER.warning( + "[FIND ENTITY] box_id nelze určit, cloud entitu pro suffix '%s' nelze vybrat", + suffix, + ) + shield._expected_entity_missing = True + return None + + entity_id = _find_entity_by_suffix(shield, box_id, suffix) + if entity_id: + _LOGGER.info("[FIND ENTITY] Vybrána cloud entita: %s", entity_id) + return entity_id + + _LOGGER.warning( + "[FIND ENTITY] NENALEZENA cloud entita sensor.oig_%s_*%s", + box_id, + suffix, + ) + shield._expected_entity_missing = True + return None + + if service_name == "oig_cloud.set_formating_mode": + return _expected_formating_mode() + if service_name == SERVICE_SET_BOX_MODE: + return _expected_box_mode(shield, data, find_entity) + if service_name == "oig_cloud.set_boiler_mode": + return _expected_boiler_mode(shield, data, find_entity) + if service_name == "oig_cloud.set_grid_delivery": + return _expected_grid_delivery(shield, data, find_entity) + + return {} + + +def _expected_formating_mode() -> Dict[str, str]: + fake_entity_id = f"fake_formating_mode_{int(datetime.now().timestamp())}" + _LOGGER.info( + "[OIG Shield] Formating mode - vytváří fiktivní entitu pro 2min sledování: %s", + fake_entity_id, + ) + return {fake_entity_id: "completed_after_timeout"} + + +def _expected_box_mode( + shield: Any, data: Dict[str, Any], find_entity: Callable[[str], Optional[str]] +) -> Dict[str, str]: + mode_raw = str(data.get("mode") or "").strip() + if not mode_raw or mode_raw.lower() == "none": + return {} + mode_key = normalize_value(mode_raw) + mode_mapping = { + "home1": HOME_1_LABEL, + "home2": HOME_2_LABEL, + "home3": HOME_3_LABEL, + "homeups": HOME_UPS_LABEL, + "home5": HOME_5_LABEL, + "home6": HOME_6_LABEL, + "0": HOME_1_LABEL, + "1": HOME_2_LABEL, + "2": HOME_3_LABEL, + "3": HOME_UPS_LABEL, + "4": HOME_5_LABEL, + "5": HOME_6_LABEL, + } + expected_value = mode_mapping.get(mode_key, mode_raw) + entity_id = find_entity("_box_prms_mode") + if entity_id: + shield.last_checked_entity_id = entity_id + state = shield.hass.states.get(entity_id) + current = normalize_value(state.state if state else None) + expected = normalize_value(expected_value) + _LOGGER.debug("[extract] box_mode | current='%s' expected='%s'", current, expected) + if current != expected: + return {entity_id: expected_value} + return {} + + +def _expected_boiler_mode( + shield: Any, data: Dict[str, Any], find_entity: Callable[[str], Optional[str]] +) -> Dict[str, str]: + mode = str(data.get("mode") or "").strip() + boiler_mode_mapping = { + "CBB": "CBB", + "Manual": MANUAL_LABEL, + "cbb": "CBB", + "manual": MANUAL_LABEL, + } + expected_value = boiler_mode_mapping.get(mode) + if not expected_value: + _LOGGER.warning("[extract] Unknown boiler mode: %s", mode) + return {} + + entity_id = find_entity("_boiler_manual_mode") + if entity_id: + shield.last_checked_entity_id = entity_id + state = shield.hass.states.get(entity_id) + current = normalize_value(state.state if state else None) + expected = normalize_value(expected_value) + _LOGGER.debug( + "[extract] boiler_mode | current='%s' expected='%s' (input='%s')", + current, + expected, + mode, + ) + if current != expected: + return {entity_id: expected_value} + return {} + + +def _expected_grid_delivery( + shield: Any, data: Dict[str, Any], find_entity: Callable[[str], Optional[str]] +) -> Dict[str, str]: + if "limit" in data and "mode" not in data: + return _expected_grid_delivery_limit(shield, data, find_entity) + if "mode" in data and "limit" not in data: + return _expected_grid_delivery_mode(shield, data, find_entity) + if "mode" in data and "limit" in data: + _LOGGER.error( + "[extract] CHYBA: grid_delivery dostalo mode + limit současně! Wrapper měl rozdělit!" + ) + return {} + + +def _expected_grid_delivery_limit( + shield: Any, data: Dict[str, Any], find_entity: Callable[[str], Optional[str]] +) -> Dict[str, str]: + try: + expected_value = round(float(data["limit"])) + except (ValueError, TypeError): + expected_value = None + + if expected_value is None: + return {} + + entity_id = find_entity("_invertor_prm1_p_max_feed_grid") + if entity_id: + shield.last_checked_entity_id = entity_id + state = shield.hass.states.get(entity_id) + try: + current_value = round(float(state.state)) + except (ValueError, TypeError, AttributeError): + current_value = None + + _LOGGER.debug( + "[extract] grid_delivery.limit ONLY | current=%s expected=%s", + current_value, + expected_value, + ) + + if current_value != expected_value: + return {entity_id: str(expected_value)} + + _LOGGER.info("[extract] Limit již je %sW - přeskakuji", expected_value) + return {} + + +def _expected_grid_delivery_mode( + shield: Any, data: Dict[str, Any], find_entity: Callable[[str], Optional[str]] +) -> Dict[str, str]: + mode_string = str(data["mode"]).strip() + mode_mapping = { + "Vypnuto / Off": "Vypnuto", + "Zapnuto / On": "Zapnuto", + "S omezením / Limited": "Omezeno", + "vypnuto / off": "Vypnuto", + "zapnuto / on": "Zapnuto", + "s omezením / limited": "Omezeno", + "off": "Vypnuto", + "on": "Zapnuto", + "limited": "Omezeno", + } + + expected_text = mode_mapping.get(mode_string) or mode_mapping.get( + mode_string.lower() + ) + if not expected_text: + _LOGGER.warning("[extract] Unknown grid delivery mode: %s", mode_string) + return {} + + entity_id = find_entity("_invertor_prms_to_grid") + if entity_id: + shield.last_checked_entity_id = entity_id + state = shield.hass.states.get(entity_id) + current_text = state.state if state else None + + _LOGGER.debug( + "[extract] grid_delivery.mode ONLY | current='%s' expected='%s' (mode_string='%s')", + current_text, + expected_text, + mode_string, + ) + + if current_text != expected_text: + return {entity_id: expected_text} + + _LOGGER.info("[extract] Mode již je %s - přeskakuji", current_text) + return {} + + +def _resolve_box_id_for_shield(shield: Any) -> Optional[str]: + box_id = _resolve_box_id_from_entry(shield.entry) + if box_id: + return box_id + return _resolve_box_id_from_coordinator(shield) + + +def _resolve_box_id_from_entry(entry: Any) -> Optional[str]: + for key in ("box_id", "inverter_sn"): + val = entry.options.get(key) or entry.data.get(key) + if isinstance(val, str) and val.isdigit(): + return val + return None + + +def _resolve_box_id_from_coordinator(shield: Any) -> Optional[str]: + try: + from ..entities.base_sensor import resolve_box_id + + coordinator = _find_shield_coordinator(shield) + if coordinator: + resolved = resolve_box_id(coordinator) + if isinstance(resolved, str) and resolved.isdigit(): + return resolved + except Exception: + return None + return None + + +def _find_shield_coordinator(shield: Any) -> Optional[Any]: + for entry_data in shield.hass.data.get(DOMAIN, {}).values(): + if not isinstance(entry_data, dict): + continue + if entry_data.get("service_shield") != shield: + continue + return entry_data.get("coordinator") + return None + + +def _find_entity_by_suffix(shield: Any, box_id: str, suffix: str) -> Optional[str]: + prefix = f"sensor.oig_{box_id}_" + matching_entities = [ + entity.entity_id + for entity in shield.hass.states.async_all() + if entity.entity_id.startswith(prefix) and entity.entity_id.endswith(suffix) + ] + return matching_entities[0] if matching_entities else None + + +def check_entity_state_change(shield: Any, entity_id: str, expected_value: Any) -> bool: + """Check if entity changed to expected value.""" + current_state = shield.hass.states.get(entity_id) + if not current_state: + return False + + current_value = current_state.state + + matcher = _select_entity_matcher(entity_id) + return matcher(entity_id, expected_value, current_value) + + +def _select_entity_matcher( + entity_id: str, +) -> Callable[[str, Any, Any], bool]: + patterns: list[tuple[str, Callable[[str, Any, Any], bool]]] = [ + ("boiler_manual_mode", _wrap_matcher(_matches_boiler_mode)), + ("ssr", _wrap_matcher(_matches_ssr_mode)), + ("box_prms_mode", _wrap_matcher(_matches_box_mode)), + ("invertor_prms_to_grid", _matches_inverter_mode), + ("p_max_feed_grid", _wrap_matcher(_matches_numeric)), + ] + for marker, matcher in patterns: + if marker in entity_id: + return matcher + return _wrap_matcher(_matches_generic) + + +def _wrap_matcher( + matcher: Callable[[Any, Any], bool], +) -> Callable[[str, Any, Any], bool]: + def wrapped(_entity_id: str, expected_value: Any, current_value: Any) -> bool: + return matcher(expected_value, current_value) + + return wrapped + + +def _matches_boiler_mode(expected_value: Any, current_value: Any) -> bool: + return (expected_value == 0 and current_value == "CBB") or ( + expected_value == 1 and current_value == MANUAL_LABEL + ) + + +def _matches_ssr_mode(expected_value: Any, current_value: Any) -> bool: + off_values = {"Vypnuto/Off", "Vypnuto", "Off"} + on_values = {"Zapnuto/On", "Zapnuto", "On"} + return (expected_value == 0 and current_value in off_values) or ( + expected_value == 1 and current_value in on_values + ) + + +def _matches_box_mode(expected_value: Any, current_value: Any) -> bool: + mode_mapping = { + 0: HOME_1_LABEL, + 1: HOME_2_LABEL, + 2: HOME_3_LABEL, + 3: HOME_UPS_LABEL, + 4: HOME_5_LABEL, + 5: HOME_6_LABEL, + } + if isinstance(expected_value, str): + if normalize_value(current_value) == normalize_value(expected_value): + return True + if expected_value.isdigit(): + expected_value = int(expected_value) + if isinstance(expected_value, int): + return current_value == mode_mapping.get(expected_value) + return False + + +def _matches_inverter_mode( + entity_id: str, expected_value: Any, current_value: Any +) -> bool: + norm_expected = normalize_value(expected_value) + norm_current = normalize_value(current_value) + if isinstance(expected_value, int) or str(expected_value).isdigit(): + norm_expected = "zapnuto" if int(expected_value) == 1 else "vypnuto" + if norm_expected == "vypnuto": + return norm_current in {"vypnuto"} + if norm_expected == "zapnuto": + if entity_id.startswith("binary_sensor."): + return norm_current in {"zapnuto", "omezeno"} + return norm_current == "zapnuto" + if norm_expected == "omezeno": + if entity_id.startswith("binary_sensor."): + return norm_current in {"zapnuto", "omezeno"} + return norm_current == "omezeno" + return False + + +def _matches_numeric(expected_value: Any, current_value: Any) -> bool: + try: + return round(float(current_value)) == round(float(expected_value)) + except (ValueError, TypeError): + return False + + +def _matches_generic(expected_value: Any, current_value: Any) -> bool: + try: + return float(current_value) == float(expected_value) + except (ValueError, TypeError): + return str(current_value) == str(expected_value) diff --git a/custom_components/oig_cloud/strings.json b/custom_components/oig_cloud/strings.json index 88266852..1ac67ccb 100644 --- a/custom_components/oig_cloud/strings.json +++ b/custom_components/oig_cloud/strings.json @@ -2,35 +2,525 @@ "config": { "step": { "user": { - "title": "[%key:common::config_flow::title%]", - "description": "[%key:common::config_flow::description%]", + "title": "OIG Cloud - Výběr typu nastavení", + "description": "Vyberte způsob nastavení integrace OIG Cloud", "data": { - "username": "[%key:common::config_flow::data::username%]", - "password": "[%key:common::config_flow::data::password%]", - "no_telemetry": "[%key:common::config_flow::data::no_telemetry%]" + "setup_type": "Způsob nastavení" + }, + "data_description": { + "setup_type": "🧙‍♂️ Průvodce = postupné nastavení krok za krokem\n⚡ Rychlé = jen přihlášení, vše ostatní na výchozí hodnoty" } + }, + "wizard_welcome": { + "title": "🎯 Vítejte v průvodci OIG Cloud", + "description": "Vítejte v průvodci nastavením OIG Cloud! Tento průvodce vás krok za krokem provede nastavením integrace. Můžete se kdykoli vrátit zpět a změnit předchozí nastavení.\n\n**Co budeme konfigurovat:**\n1. Přihlašovací údaje\n2. Výběr funkcí a modulů\n3. Podrobné nastavení vybraných modulů\n4. Kontrola a dokončení\n\nKliknutím na \"Odeslat\" spustíte průvodce." + }, + "wizard_welcome_reconfigure": { + "title": "🔧 Změna nastavení OIG Cloud", + "description": "Vítejte ve změně nastavení OIG Cloud! Můžete upravit existující nastavení integrace. Použijte tlačítko \"Zpět\" pro návrat k předchozím krokům.\n\nKliknutím na \"Odeslat\" zahájíte úpravy nastavení." + }, + "wizard_credentials": { + "title": "🔐 Přihlašovací údaje", + "description": "{step}\n{progress}\n\nZadejte své přihlašovací údaje do OIG Cloud aplikace.\n\n⚠️ **DŮLEŽITÉ:** V mobilní aplikaci OIG Cloud musíte mít zapnutou funkci 'Živá data' v nastavení!", + "data": { + "username": "E-mail nebo uživatelské jméno", + "password": "Heslo", + "live_data_enabled": "✅ Potvrzuji, že mám zapnutá 'Živá data' v aplikaci", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "live_data_enabled": "Bez zapnutých živých dat integrace nebude fungovat!", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se na úvodní obrazovku" + } + }, + "wizard_modules": { + "title": "📦 Výběr modulů a funkcí", + "description": "{step}\n{progress}\n\nVyberte, které funkce chcete používat. Každý modul můžete později podrobně nastavit.", + "data": { + "enable_statistics": "📊 Statistiky a analýzy spotřeby", + "enable_solar_forecast": "☀️ Solární předpověď výroby FVE", + "enable_battery_prediction": "🔋 Inteligentní predikce a optimalizace baterie", + "enable_pricing": "💰 Cenové senzory a spotové ceny z OTE", + "enable_extended_sensors": "⚡ Rozšířené senzory (napětí, proudy, teploty)", + "enable_chmu_warnings": "🌦️ Varování ČHMÚ (meteorologická výstraha)", + "enable_dashboard": "📊 Webový dashboard s grafy", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_statistics": "Doporučeno - medián spotřeby, predikce", + "enable_pricing": "Doporučeno - spotové ceny z OTE + kalkulace nákladů", + "enable_extended_sensors": "Doporučeno - detailní monitoring", + "enable_solar_forecast": "Vyžaduje API klíč od Forecast.Solar", + "enable_battery_prediction": "Experimentální - chytré nabíjení podle cen", + "enable_chmu_warnings": "Meteorologická varování pro vaši lokalitu (CAP XML)", + "enable_dashboard": "Webové rozhraní s grafy přístupné v HA", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_intervals": { + "title": "⏱️ Intervaly načítání dat", + "description": "{step}\n{progress}\n\nNastavte, jak často se mají načítat data z OIG Cloud.\n\n💡 **Tip:** Kratší interval = aktuálnější data, ale vyšší zátěž na API servery.", + "data": { + "standard_scan_interval": "Základní data (sekund)", + "extended_scan_interval": "Rozšířená data (sekund)", + "enable_cloud_notifications": "🔔 Cloud notifikace", + "notifications_scan_interval": "Notifikace interval (sekund)", + "data_source_mode": "Zdroj telemetrie (cloud vs. lokální)", + "local_proxy_stale_minutes": "Fallback na cloud po (minut)", + "local_event_debounce_ms": "Local event debounce (ms)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "standard_scan_interval": "Jak často načítat spotřebu, výrobu, stav baterie a další základní údaje (minimálně 30 sekund, doporučeno 30-60 sekund)", + "extended_scan_interval": "Jak často načítat napětí článků, teploty, proudy a další detailní údaje (minimálně 300 sekund, doporučeno 300-600 sekund)", + "enable_cloud_notifications": "Povolit stahování cloud notifikací (typicky stačí 1× za několik minut)", + "notifications_scan_interval": "Jak často kontrolovat cloud notifikace (doporučeno 300-900 sekund)", + "data_source_mode": "☁️ Cloud only = jen OIG Cloud; 🏠 Local only = lokální senzory, při výpadku proxy automaticky fallback na cloud a po obnovení se vrátí", + "local_proxy_stale_minutes": "Fallback na cloud, pokud lokální proxy neposlala data déle než tento limit (platí pro Local only)", + "local_event_debounce_ms": "Debounce pro event-driven refresh z local entit (nižší = rychlejší reakce, vyšší = méně aktualizací)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_solar": { + "title": "☀️ Konfigurace solární předpovědi", + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nPoskytuje předpověď výroby elektřiny z fotovoltaických panelů na následujících 24-72 hodin. Využívá službu Forecast.Solar s přesnými meteorologickými daty.\n\n🔧 **Co je potřeba:**\n• Bezplatný nebo placený API klíč z https://forecast.solar\n• GPS souřadnice instalace FVE\n• Parametry panelů (sklon, azimut, výkon)\n\n⚠️ **Tento modul je vyžadován pro:**\n• 🔋 Predikce baterie (inteligentní nabíjení)\n\n🔑 API klíč získáte registrací na https://forecast.solar", + "data": { + "solar_forecast_api_key": "Forecast.Solar API klíč", + "solar_forecast_mode": "Režim aktualizace předpovědi", + "solar_forecast_latitude": "GPS šířka instalace", + "solar_forecast_longitude": "GPS délka instalace", + "solar_forecast_string1_enabled": "✅ Zapnout String 1", + "solar_forecast_string1_kwp": "String 1 - Instalovaný výkon (kWp)", + "solar_forecast_string1_declination": "String 1 - Sklon panelů (°)", + "solar_forecast_string1_azimuth": "String 1 - Azimut / Orientace (°)", + "solar_forecast_string2_enabled": "✅ Zapnout String 2", + "solar_forecast_string2_kwp": "String 2 - Instalovaný výkon (kWp)", + "solar_forecast_string2_declination": "String 2 - Sklon panelů (°)", + "solar_forecast_string2_azimuth": "String 2 - Azimut / Orientace (°)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "solar_forecast_api_key": "Nepovinné pro ZDARMA režimy. Povinné pro časté aktualizace (4h, 1h)", + "solar_forecast_mode": "🎯 Optimalizovaný = 3× denně v 6:00, 12:00, 16:00 (DOPORUČENO)\n🌅 Denní = 1× denně v 6:00\n🕐 4h/⚡1h = vyžaduje API klíč", + "solar_forecast_latitude": "Rozsah: -90° až 90° (Střední Evropa cca 48-51°)", + "solar_forecast_longitude": "Rozsah: -180° až 180° (Střední Evropa cca 12-19°)", + "solar_forecast_string1_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Pokud máte panely pouze na jedné orientaci, stačí String 1", + "solar_forecast_string1_kwp": "Celkový výkon String 1 v kWp (např. 5.0 kWp)", + "solar_forecast_string1_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string1_azimuth": "0° = jih, -90° = východ, 90° = západ. Rozsah: 0-360°", + "solar_forecast_string2_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Zapněte, pokud máte panely na dvou různých orientacích (např. východ + západ)", + "solar_forecast_string2_kwp": "Celkový výkon String 2 v kWp (např. 3.5 kWp)", + "solar_forecast_string2_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string2_azimuth": "0° = jih, -90° = východ, 90° = západ. Rozsah: 0-360°", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_battery": { + "title": "🔋 Konfigurace predikce baterie", + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně optimalizuje nabíjení domácí baterie podle spotových cen elektřiny a předpovědi solární výroby. Automaticky se nabíjí v nejlevnějších hodinách.\n\n🔧 **Co je potřeba:**\n• ☀️ Solární předpověď (musí být zapnutá)\n• ⚡ Rozšířené senzory (musí být zapnuté)\n• 📈 Spotové ceny elektřiny\n\n⚠️ **Experimentální funkce** - může vyžadovat jemné doladění parametrů\n\n⚠️ **Tento modul je vyžadován pro:**\n• 📊 Dashboard (webové rozhraní)", + "data": { + "min_capacity_percent": "Minimální kapacita baterie (%)", + "disable_planning_min_guard": "Vypnout ochranu plánovacího minima", + "target_capacity_percent": "Cílová kapacita baterie (%)", + "home_charge_rate": "Nabíjecí výkon ze sítě (kW)", + "max_ups_price_czk": "Maximální cena pro nabíjení UPS (CZK/kWh)", + "charge_on_bad_weather": "Nabíjet preventivně při špatném počasí", + "weather_entity": "Weather entita pro předpověď počasí", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "min_capacity_percent": "Pokud kapacita klesne pod tuto hodnotu, zahájí se nabíjení", + "disable_planning_min_guard": "Povolí plánovači jít níž než plánovací minimum (agresivnější optimalizace)", + "target_capacity_percent": "Optimální kapacita, na kterou se nabíjí", + "home_charge_rate": "Maximální výkon nabíjení ze sítě (typicky 2-3 kW)", + "max_ups_price_czk": "Tvrdý bezpečnostní limit: ze sítě se nikdy nenabíjí, pokud je cena vyšší", + "charge_on_bad_weather": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Při předpovědi deštivého počasí se baterie přednabije na cílovou kapacitu", + "weather_entity": "Výběr konkrétní weather entity pro předpověď (prázdné = automaticky)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_extended": { + "title": "⚡ Rozšířené senzory", + "description": "{step}\n{progress}\n\n📖 **Rozšířené senzory**\n\nVyberte, které skupiny rozšířených senzorů chcete aktivovat.\n\n💡 **Dostupné skupiny:**\n• 🔋 Baterie - napětí článků, teploty, proudy\n• ☀️ FVE - napětí stringů, proudy, teploty\n• ⚡ Síť - napětí fází, frekvence, kvalita\n\n⚠️ **Poznámka:** Více senzorů = vyšší zátěž na API", + "data": { + "enable_extended_battery_sensors": "🔋 Rozšířené senzory baterie", + "enable_extended_fve_sensors": "☀️ Rozšířené senzory FVE", + "enable_extended_grid_sensors": "⚡ Rozšířené senzory sítě", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_extended_battery_sensors": "Napětí článků, teploty, proudy nabíjení/vybíjení", + "enable_extended_fve_sensors": "Napětí stringů, proudy, teploty, výkon jednotlivých stringů", + "enable_extended_grid_sensors": "Napětí fází L1/L2/L3, frekvence, kvalita napájení", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_import": { + "title": "💰 Konfigurace nákupní ceny (1/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 1: Nákupní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za nákup elektřiny ze sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT + procento - Variabilní cena podle burzy\n• 💵 SPOT + fixní poplatek - Stabilnější než procento\n• 🔒 FIX cena - Předvídatelná fixní cena\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "data": { + "import_pricing_scenario": "Scénář nákupní ceny", + "spot_positive_fee_percent": "Přirážka při kladné spotové ceně (%)", + "spot_negative_fee_percent": "Přirážka při záporné spotové ceně (%)", + "spot_fixed_fee_kwh": "Fixní poplatek (CZK/kWh)", + "fixed_price_kwh": "Fixní nákupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "import_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "spot_positive_fee_percent": "Při kladné spotové ceně: cena × (1 + procento/100). Např. 15% = spot × 1,15", + "spot_negative_fee_percent": "Při záporné spotové ceně: cena × (1 - procento/100). Např. 9% = spot × 0,91", + "spot_fixed_fee_kwh": "Konstantní poplatek přičtený ke spotové ceně. Např. 0,50 CZK/kWh", + "fixed_price_kwh": "Fixní nákupní cena. ⚠️ ZADÁVEJTE BEZ DPH A DISTRIBUCE!", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_export": { + "title": "💸 Konfigurace prodejní ceny (2/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 2: Prodejní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za prodej přebytků do sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT - procento - Výhodné při vysokých spotových cenách\n• 📉 SPOT - fixní srážka - Stabilnější výkup\n• 🔒 FIX cena - Stabilní výkupní cena po celý rok\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "data": { + "export_pricing_scenario": "Scénář prodejní ceny", + "export_fee_percent": "Srážka z exportu (%)", + "export_fixed_fee_czk": "Fixní srážka exportu (CZK/kWh)", + "export_fixed_price_kwh": "Fixní výkupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "export_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "export_fee_percent": "Srážka v %. Např. 15% = dostanete 85% ze spotové ceny (spot × 0.85)", + "export_fixed_fee_czk": "Fixní srážka od spotové ceny. Např. 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixní výkupní cena bez ohledu na spot. Např. 2.50 CZK/kWh", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_distribution": { + "title": "⚡ Konfigurace distribuce a DPH (3/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 3: Distribuce a DPH**\n\nNastavte distribuční poplatky a DPH.\n\n💡 **Informace:**\n• Distribuce je **nezávislá** na typu nákupu/prodeje (FIX/SPOT)\n• Pokud máte 2 tarify (VT/NT), zaškrtněte 'Dva tarify'\n• VT hodiny se automaticky nastaví podle běžných časů\n\n⚙️ Po výběru počtu tarifů klikněte 'Odeslat' pro zobrazení parametrů.", + "data": { + "tariff_count": "Počet tarifů", + "distribution_fee_vt_kwh": "Poplatek za distribuci VT (CZK/kWh)", + "distribution_fee_nt_kwh": "Poplatek za distribuci NT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixní nákupní cena VT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixní nákupní cena NT (CZK/kWh)", + "tariff_vt_start_weekday": "VT začátek pracovní den (hodina)", + "tariff_nt_start_weekday": "NT začátek pracovní den (hodina1,hodina2)", + "tariff_vt_start_weekend": "VT začátek víkend (hodina)", + "tariff_nt_start_weekend": "NT začátek víkend (hodina1,hodina2)", + "tariff_weekend_same_as_weekday": "Víkend stejné jako pracovní dny", + "vat_rate": "DPH (%)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "tariff_count": "💡 Klikněte 'Odeslat' pro zobrazení parametrů podle počtu tarifů", + "distribution_fee_vt_kwh": "Distribuční poplatek VT (vysoký tarif). Např. 1.42 CZK/kWh", + "distribution_fee_nt_kwh": "Distribuční poplatek NT (nízký tarif). Např. 0.91 CZK/kWh", + "fixed_price_vt_kwh": "Fixní nákupní cena VT bez DPH a distribuce.", + "fixed_price_nt_kwh": "Fixní nákupní cena NT bez DPH a distribuce.", + "tariff_vt_start_weekday": "Začátek VT v pracovní den. Formát: hodina (např. '6' = 06:00)", + "tariff_nt_start_weekday": "Začátek NT v pracovní den. Formát: hodina1,hodina2 (např. '22,2' = 22:00 večer a 02:00 ráno)", + "tariff_vt_start_weekend": "Začátek VT o víkendu. Formát: hodina (nechte prázdné pro NT celý den)", + "tariff_nt_start_weekend": "Začátek NT o víkendu. Formát: hodina1,hodina2 (např. '0' = NT celý den)", + "tariff_weekend_same_as_weekday": "Použít stejné časy VT/NT i o víkendu", + "vat_rate": "Sazba DPH v procentech. Standardně 21%", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_summary": { + "title": "✅ Shrnutí a dokončení", + "description": "{step}\n{progress}\n\n📋 **Shrnutí konfigurace**\n\n{summary}\n\n---\n\n✅ **Vše je připraveno!**\n\nKliknutím na 'Odeslat' dokončíte nastavení a integrace se aktivuje.", + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "import_config": { + "title": "Import konfigurace", + "data": { + "config_file": "Cesta k souboru" + } + }, + "init": { + "title": "Základní konfigurace OIG Cloud", + "description": "Nastavte základní parametry a povolte funkce." + }, + "statistics": { + "title": "Konfigurace statistik", + "description": "Nastavení parametrů pro statistické senzory a predikce." + }, + "solar_basic": { + "title": "Solar Forecast - základní nastavení", + "description": "GPS souřadnice a výběr stringů pro solar forecast." + }, + "solar_string1": { + "title": "Solar Forecast - String 1", + "description": "Parametry panelů na String 1." + }, + "solar_string2": { + "title": "Solar Forecast - String 2", + "description": "Parametry panelů na String 2." } }, "error": { - "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]", - "unknown": "[%key:common::config_flow::error::unknown%]" + "cannot_connect": "Nepodařilo se připojit k OIG Cloud API", + "invalid_auth": "Neplatné přihlašovací údaje", + "unknown": "Neočekávaná chyba", + "required": "Toto pole je povinné", + "live_data_not_enabled": "V OIG Cloud aplikaci nejsou zapnutá 'Živá data'. Zapněte je v nastavení aplikace!", + "live_data_not_confirmed": "Musíte potvrdit, že máte v aplikaci zapnutá 'Živá data'", + "solar_forecast_no_strings": "Musíte povolit alespoň jeden string", + "solar_forecast_invalid_api_key": "Neplatný API klíč pro Forecast.Solar", + "invalid_api_key": "Neplatný API klíč - ověřte, že je správně zadaný a je aktivní na forecast.solar", + "validation_failed": "Chyba při ověřování API klíče - zkontrolujte připojení k internetu", + "invalid_coordinates": "Neplatné GPS souřadnice", + "invalid_interval": "Interval musí být v povoleném rozsahu", + "interval_too_short": "⚠️ Standardní interval je příliš krátký (minimálně 30 sekund)", + "interval_too_long": "⚠️ Standardní interval je příliš dlouhý (maximálně 300 sekund = 5 minut)", + "extended_interval_too_short": "⚠️ Rozšířený interval je příliš krátký (minimálně 300 sekund = 5 minut)", + "extended_interval_too_long": "⚠️ Rozšířený interval je příliš dlouhý (maximálně 3600 sekund = 60 minut)", + "local_proxy_missing": "⚠️ Pro režim 'Lokální' je potřeba entita sensor.oig_local_oig_proxy_proxy_status_last_data z integrace OIG Local", + "requires_solar_forecast": "⚠️ Predikce baterie vyžaduje zapnutou solární předpověď", + "required_for_battery": "⚠️ Predikce baterie vyžaduje zapnuté rozšířené senzory", + "dashboard_requires_all": "⚠️ Dashboard vyžaduje všechny ostatní moduly (Statistiky, Solární předpověď, Predikce baterie, Cenové senzory, Spotové ceny, Rozšířené senzory)", + "api_key_required_for_frequent_updates": "⚠️ Pro aktualizaci každé 4 hodiny nebo každou hodinu je vyžadován API klíč z Forecast.Solar", + "no_strings_enabled": "⚠️ Musíte povolit alespoň jeden string solárních panelů (String 1 nebo String 2)", + "invalid_latitude": "Neplatná GPS šířka (musí být od -90 do 90°)", + "invalid_longitude": "Neplatná GPS délka (musí být od -180 do 180°)", + "invalid_kwp": "Neplatný výkon kWp (musí být od 0.1 do 15 kWp)", + "invalid_declination": "Neplatný sklon panelů (musí být od 0° do 90°)", + "invalid_azimuth": "Neplatná orientace panelů (musí být od 0° do 360°)", + "invalid_string1_params": "Neplatné parametry pro String 1", + "invalid_string2_params": "Neplatné parametry pro String 2", + "min_must_be_less_than_target": "⚠️ Minimální kapacita musí být menší než cílová kapacita", + "invalid_price": "⚠️ Neplatná cena (1-50 CZK/kWh)", + "invalid_percentage": "⚠️ Neplatné procento (0.1-100%)", + "invalid_fee": "⚠️ Neplatný poplatek", + "invalid_distribution_fee": "⚠️ Neplatný distribuční poplatek (0-10 CZK/kWh)", + "invalid_vat": "⚠️ Neplatná sazba DPH (0-30%)", + "invalid_hour_range": "⚠️ Hodiny musí být v rozsahu 0-23", + "invalid_hour_format": "⚠️ Neplatný formát hodin. Použijte čísla oddělená čárkou (např: 6,14,18)", + "overlapping_tariffs": "⚠️ VT a NT tarify se překrývají. Každá hodina může být pouze VT nebo NT.", + "tariff_gaps": "⚠️ Tarify nepokrývají celý den (0-23 hodin). Zkontrolujte začátky VT a NT.", + "endpoint_must_start_with_slash": "⚠️ Endpoint musí začínat lomítkem (/)", + "invalid_port": "⚠️ Neplatný port (1-65535)" }, "abort": { - "already_configured": "[%key:common::config_flow::abort::already_configured_device%]" + "already_configured": "Integrace OIG Cloud je již nakonfigurována", + "not_implemented": "Tato funkce ještě není implementována" } }, "options": { "step": { - "init": { - "title": "[%key:common::config_flow::options::title%]", - "description": "[%key:common::config_flow::options::description%]", + "wizard_welcome_reconfigure": { + "title": "🔧 Změna nastavení OIG Cloud", + "description": "Vítejte ve změně nastavení OIG Cloud! Můžete upravit existující nastavení integrace. Použijte tlačítko \"Zpět\" pro návrat k předchozím krokům.\n\nKliknutím na \"Odeslat\" zahájíte úpravy nastavení." + }, + "wizard_modules": { + "title": "📦 Výběr modulů a funkcí", + "description": "{step}\n{progress}\n\nVyberte, které funkce chcete používat. Každý modul můžete později podrobně nastavit.", + "data": { + "enable_statistics": "📊 Statistiky a analýzy spotřeby", + "enable_solar_forecast": "☀️ Solární předpověď výroby FVE", + "enable_battery_prediction": "🔋 Inteligentní predikce a optimalizace baterie", + "enable_pricing": "💰 Cenové senzory a spotové ceny z OTE", + "enable_extended_sensors": "⚡ Rozšířené senzory (napětí, proudy, teploty)", + "enable_chmu_warnings": "🌦️ Varování ČHMÚ (meteorologická výstraha)", + "enable_dashboard": "📊 Webový dashboard s grafy", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_statistics": "Doporučeno - medián spotřeby, predikce", + "enable_pricing": "Doporučeno - spotové ceny z OTE + kalkulace nákladů", + "enable_extended_sensors": "Doporučeno - detailní monitoring", + "enable_solar_forecast": "Vyžaduje API klíč od Forecast.Solar", + "enable_battery_prediction": "Experimentální - chytré nabíjení podle cen", + "enable_chmu_warnings": "Meteorologická varování pro vaši lokalitu (CAP XML)", + "enable_dashboard": "Webové rozhraní s grafy přístupné v HA", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_intervals": { + "title": "⏱️ Intervaly načítání dat", + "description": "{step}\n{progress}\n\nNastavte, jak často se mají načítat data z OIG Cloud.\n\n💡 **Tip:** Kratší interval = aktuálnější data, ale vyšší zátěž na API servery.", + "data": { + "standard_scan_interval": "Základní data (sekund)", + "extended_scan_interval": "Rozšířená data (sekund)", + "enable_cloud_notifications": "🔔 Cloud notifikace", + "notifications_scan_interval": "Notifikace interval (sekund)", + "data_source_mode": "Zdroj telemetrie (cloud vs. lokální)", + "local_proxy_stale_minutes": "Fallback na cloud po (minut)", + "local_event_debounce_ms": "Local event debounce (ms)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "standard_scan_interval": "Jak často načítat spotřebu, výrobu, stav baterie a další základní údaje (minimálně 30 sekund, doporučeno 30-60 sekund)", + "extended_scan_interval": "Jak často načítat napětí článků, teploty, proudy a další detailní údaje (minimálně 300 sekund, doporučeno 300-600 sekund)", + "enable_cloud_notifications": "Povolit stahování cloud notifikací (typicky stačí 1× za několik minut)", + "notifications_scan_interval": "Jak často kontrolovat cloud notifikace (doporučeno 300-900 sekund)", + "data_source_mode": "☁️ Cloud only = jen OIG Cloud; 🏠 Local only = lokální senzory, při výpadku proxy automaticky fallback na cloud a po obnovení se vrátí", + "local_proxy_stale_minutes": "Fallback na cloud, pokud lokální proxy neposlala data déle než tento limit (platí pro Local only)", + "local_event_debounce_ms": "Debounce pro event-driven refresh z local entit (nižší = rychlejší reakce, vyšší = méně aktualizací)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_solar": { + "title": "☀️ Konfigurace solární předpovědi", + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nPoskytuje předpověď výroby elektřiny z fotovoltaických panelů na následujících 24-72 hodin. Využívá službu Forecast.Solar s přesnými meteorologickými daty.\n\n🔧 **Co je potřeba:**\n• Bezplatný nebo placený API klíč z https://forecast.solar\n• GPS souřadnice instalace FVE\n• Parametry panelů (sklon, azimut, výkon)\n\n⚠️ **Tento modul je vyžadován pro:**\n• 🔋 Predikce baterie (inteligentní nabíjení)\n\n🔑 API klíč získáte registrací na https://forecast.solar", + "data": { + "solar_forecast_api_key": "Forecast.Solar API klíč", + "solar_forecast_mode": "Režim aktualizace předpovědi", + "solar_forecast_latitude": "GPS šířka instalace", + "solar_forecast_longitude": "GPS délka instalace", + "solar_forecast_string1_enabled": "✅ Zapnout String 1", + "solar_forecast_string1_kwp": "String 1 - Instalovaný výkon (kWp)", + "solar_forecast_string1_declination": "String 1 - Sklon panelů (°)", + "solar_forecast_string1_azimuth": "String 1 - Azimut / Orientace (°)", + "solar_forecast_string2_enabled": "✅ Zapnout String 2", + "solar_forecast_string2_kwp": "String 2 - Instalovaný výkon (kWp)", + "solar_forecast_string2_declination": "String 2 - Sklon panelů (°)", + "solar_forecast_string2_azimuth": "String 2 - Azimut / Orientace (°)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "solar_forecast_api_key": "Nepovinné pro ZDARMA režimy. Povinné pro časté aktualizace (4h, 1h)", + "solar_forecast_mode": "🎯 Optimalizovaný = 3× denně v 6:00, 12:00, 16:00 (DOPORUČENO)\n🌅 Denní = 1× denně v 6:00\n🕐 4h/⚡1h = vyžaduje API klíč", + "solar_forecast_latitude": "Rozsah: -90° až 90° (Střední Evropa cca 48-51°)", + "solar_forecast_longitude": "Rozsah: -180° až 180° (Střední Evropa cca 12-19°)", + "solar_forecast_string1_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Pokud máte panely pouze na jedné orientaci, stačí String 1", + "solar_forecast_string1_kwp": "Celkový výkon String 1 v kWp (např. 5.0 kWp)", + "solar_forecast_string1_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string1_azimuth": "0° = jih, -90° = východ, 90° = západ. Rozsah: 0-360°", + "solar_forecast_string2_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Zapněte, pokud máte panely na dvou různých orientacích (např. východ + západ)", + "solar_forecast_string2_kwp": "Celkový výkon String 2 v kWp (např. 3.5 kWp)", + "solar_forecast_string2_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string2_azimuth": "0° = jih, -90° = východ, 90° = západ. Rozsah: 0-360°", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_battery": { + "title": "🔋 Konfigurace predikce baterie", + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně optimalizuje nabíjení domácí baterie podle spotových cen elektřiny a předpovědi solární výroby. Automaticky se nabíjí v nejlevnějších hodinách.\n\n🔧 **Co je potřeba:**\n• ☀️ Solární předpověď (musí být zapnutá)\n• ⚡ Rozšířené senzory (musí být zapnuté)\n• 📈 Spotové ceny elektřiny\n\n⚠️ **Experimentální funkce** - může vyžadovat jemné doladění parametrů\n\n⚠️ **Tento modul je vyžadován pro:**\n• 📊 Dashboard (webové rozhraní)", + "data": { + "min_capacity_percent": "Minimální kapacita baterie (%)", + "disable_planning_min_guard": "Vypnout ochranu plánovacího minima", + "target_capacity_percent": "Cílová kapacita baterie (%)", + "home_charge_rate": "Nabíjecí výkon ze sítě (kW)", + "max_ups_price_czk": "Maximální cena pro nabíjení UPS (CZK/kWh)", + "charge_on_bad_weather": "Nabíjet preventivně při špatném počasí", + "weather_entity": "Weather entita pro předpověď počasí", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "min_capacity_percent": "Pokud kapacita klesne pod tuto hodnotu, zahájí se nabíjení", + "disable_planning_min_guard": "Povolí plánovači jít níž než plánovací minimum (agresivnější optimalizace)", + "target_capacity_percent": "Optimální kapacita, na kterou se nabíjí", + "home_charge_rate": "Maximální výkon nabíjení ze sítě (typicky 2-3 kW)", + "max_ups_price_czk": "Tvrdý bezpečnostní limit: ze sítě se nikdy nenabíjí, pokud je cena vyšší", + "charge_on_bad_weather": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Při předpovědi deště se baterie přednabije", + "weather_entity": "Výběr weather entity pro předpověď (prázdné = automaticky)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_import": { + "title": "💰 Konfigurace nákupní ceny (1/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 1: Nákupní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za nákup elektřiny ze sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT + procento - Variabilní cena podle burzy\n• 💵 SPOT + fixní poplatek - Stabilnější než procento\n• 🔒 FIX cena - Předvídatelná fixní cena\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", "data": { - "update_interval": "[%key:common::config_flow::options::data::update_interval%]", - "no_telemetry": "[%key:common::config_flow::options::data::no_telemetry%]", - "log_level": "[%key:common::config_flow::options::data::log_level%]" + "import_pricing_scenario": "Scénář nákupní ceny", + "spot_positive_fee_percent": "Přirážka při kladné spotové ceně (%)", + "spot_negative_fee_percent": "Přirážka při záporné spotové ceně (%)", + "spot_fixed_fee_kwh": "Fixní poplatek (CZK/kWh)", + "fixed_price_kwh": "Fixní nákupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "import_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "spot_positive_fee_percent": "Při kladné spotové ceně: cena × (1 + procento/100). Např. 15% = spot × 1,15", + "spot_negative_fee_percent": "Při záporné spotové ceně: cena × (1 - procento/100). Např. 9% = spot × 0,91", + "spot_fixed_fee_kwh": "Konstantní poplatek přičtený ke spotové ceně. Např. 0,50 CZK/kWh", + "fixed_price_kwh": "Fixní nákupní cena. ⚠️ ZADÁVEJTE BEZ DPH A DISTRIBUCE!", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_export": { + "title": "💸 Konfigurace prodejní ceny (2/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 2: Prodejní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za prodej přebytků do sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT - procento - Výhodné při vysokých spotových cenách\n• 💵 SPOT - fixní srážka - Stabilnější výkup\n• 🔒 FIX cena - Stabilní výkupní cena po celý rok\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "data": { + "export_pricing_scenario": "Scénář prodejní ceny", + "export_fee_percent": "Srážka z exportu (%)", + "export_fixed_fee_czk": "Fixní srážka exportu (CZK/kWh)", + "export_fixed_price_kwh": "Fixní výkupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "export_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "export_fee_percent": "Srážka v %. Např. 15% = dostanete 85% ze spotové ceny (spot × 0.85)", + "export_fixed_fee_czk": "Fixní srážka od spotové ceny. Např. 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixní výkupní cena bez ohledu na spot. Např. 2.50 CZK/kWh", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_pricing_distribution": { + "title": "⚡ Konfigurace distribuce a DPH (3/3)", + "description": "{step}\n{progress}\n\n📖 **Krok 3: Distribuce a DPH**\n\nNastavte distribuční poplatky a DPH.\n\n💡 **Informace:**\n• Distribuce je **nezávislá** na typu nákupu/prodeje (FIX/SPOT)\n• Pokud máte 2 tarify (VT/NT), zaškrtněte 'Dva tarify'\n• VT hodiny se automaticky nastaví podle běžných časů\n\n⚙️ Po výběru počtu tarifů klikněte 'Odeslat' pro zobrazení parametrů.", + "data": { + "tariff_count": "Počet tarifů", + "distribution_fee_vt_kwh": "Poplatek za distribuci VT (CZK/kWh)", + "distribution_fee_nt_kwh": "Poplatek za distribuci NT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixní nákupní cena VT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixní nákupní cena NT (CZK/kWh)", + "tariff_vt_start_weekday": "VT začátek pracovní den (hodina)", + "tariff_nt_start_weekday": "NT začátek pracovní den (hodina1,hodina2)", + "tariff_vt_start_weekend": "VT začátek víkend (hodina)", + "tariff_nt_start_weekend": "NT začátek víkend (hodina1,hodina2)", + "tariff_weekend_same_as_weekday": "Víkend stejné jako pracovní dny", + "vat_rate": "DPH (%)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "tariff_count": "💡 Klikněte 'Odeslat' pro zobrazení parametrů podle počtu tarifů", + "distribution_fee_vt_kwh": "Distribuční poplatek VT (vysoký tarif). Např. 1.42 CZK/kWh", + "distribution_fee_nt_kwh": "Distribuční poplatek NT (nízký tarif). Např. 0.91 CZK/kWh", + "fixed_price_vt_kwh": "Fixní nákupní cena VT bez DPH a distribuce.", + "fixed_price_nt_kwh": "Fixní nákupní cena NT bez DPH a distribuce.", + "tariff_vt_start_weekday": "Začátek VT v pracovní den. Formát: hodina (např. '6' = 06:00)", + "tariff_nt_start_weekday": "Začátek NT v pracovní den. Formát: hodina1,hodina2 (např. '22,2' = 22:00 večer a 02:00 ráno)", + "tariff_vt_start_weekend": "Začátek VT o víkendu. Formát: hodina (nechte prázdné pro NT celý den)", + "tariff_nt_start_weekend": "Začátek NT o víkendu. Formát: hodina1,hodina2 (např. '0' = NT celý den)", + "tariff_weekend_same_as_weekday": "Použít stejné časy VT/NT i o víkendu", + "vat_rate": "Sazba DPH v procentech. Standardně 21%", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_extended": { + "title": "⚡ Rozšířené senzory", + "description": "{step}\n{progress}\n\n📖 **Rozšířené senzory**\n\nVyberte, které skupiny rozšířených senzorů chcete aktivovat.\n\n💡 **Dostupné skupiny:**\n• 🔋 Baterie - napětí článků, teploty, proudy\n• ☀️ FVE - napětí stringů, proudy, teploty\n• ⚡ Síť - napětí fází, frekvence, kvalita\n\n⚠️ **Poznámka:** Více senzorů = vyšší zátěž na API", + "data": { + "enable_extended_battery_sensors": "🔋 Rozšířené senzory baterie", + "enable_extended_fve_sensors": "☀️ Rozšířené senzory FVE", + "enable_extended_grid_sensors": "⚡ Rozšířené senzory sítě", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_extended_battery_sensors": "Napětí článků, teploty, proudy nabíjení/vybíjení", + "enable_extended_fve_sensors": "Napětí stringů, proudy, teploty, výkon jednotlivých stringů", + "enable_extended_grid_sensors": "Napětí fází L1/L2/L3, frekvence, kvalita napájení", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + } + }, + "wizard_summary": { + "title": "✅ Shrnutí a dokončení", + "description": "{step}\n{progress}\n\n📋 **Shrnutí konfigurace**\n\n{summary}\n\n---\n\n✅ **Vše je připraveno!**\n\nKliknutím na 'Odeslat' uložíte změny.", + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" } } + }, + "abort": { + "reconfigure_successful": "Nastavení bylo úspěšně uloženo" } } } diff --git a/custom_components/oig_cloud/translations/cs.json b/custom_components/oig_cloud/translations/cs.json index 4fc96a3f..5cc5e6b2 100644 --- a/custom_components/oig_cloud/translations/cs.json +++ b/custom_components/oig_cloud/translations/cs.json @@ -1,85 +1,735 @@ { "config": { "abort": { - "already_configured": "Zařízení je již nakonfigurováno" + "already_configured": "Integrace OIG Cloud je již nakonfigurována", + "not_implemented": "Tato funkce ještě není implementována" }, "error": { - "cannot_connect": "Nepodařilo se připojit", + "api_key_required_for_frequent_updates": "⚠️ Pro aktualizaci každé 4 hodiny nebo každou hodinu je vyžadován API klíč z Forecast.Solar", + "solcast_api_key_required": "⚠️ Je vyžadován API klíč pro Solcast", + "cannot_connect": "Nepodařilo se připojit k OIG Cloud API", + "dashboard_requires_all": "⚠️ Dashboard vyžaduje všechny ostatní moduly (Statistiky, Solární předpověď, Predikce baterie, Cenové senzory, Spotové ceny, Rozšířené senzory)", + "endpoint_must_start_with_slash": "⚠️ Endpoint musí začínat lomítkem (/)", + "extended_interval_too_long": "⚠️ Rozšířený interval je příliš dlouhý (maximálně 3600 sekund = 60 minut)", + "extended_interval_too_short": "⚠️ Rozšířený interval je příliš krátký (minimálně 300 sekund = 5 minut)", + "interval_too_long": "⚠️ Standardní interval je příliš dlouhý (maximálně 300 sekund = 5 minut)", + "interval_too_short": "⚠️ Standardní interval je příliš krátký (minimálně 30 sekund)", "invalid_auth": "Neplatné přihlašovací údaje", + "invalid_azimuth": "Neplatná orientace panelů (musí být od 0° do 360°)", + "invalid_coordinates": "Neplatné GPS souřadnice", + "invalid_declination": "Neplatný sklon panelů (musí být od 0° do 90°)", + "invalid_distribution_fee": "⚠️ Neplatný distribuční poplatek (0-10 CZK/kWh)", + "invalid_fee": "⚠️ Neplatný poplatek", + "invalid_hour_format": "⚠️ Neplatný formát hodin. Použijte čísla oddělená čárkou (např: 6,14,18)", + "invalid_hour_range": "⚠️ Hodiny musí být v rozsahu 0-23", + "invalid_interval": "Interval musí být v povoleném rozsahu", + "invalid_kwp": "Neplatný výkon kWp (musí být od 0.1 do 15 kWp)", + "invalid_latitude": "Neplatná GPS šířka (musí být od -90 do 90°)", + "invalid_longitude": "Neplatná GPS délka (musí být od -180 do 180°)", + "invalid_percentage": "⚠️ Neplatné procento (0.1-100%)", + "invalid_port": "⚠️ Neplatný port (1-65535)", + "invalid_price": "⚠️ Neplatná cena (1-50 CZK/kWh)", + "invalid_string1_params": "Neplatné parametry pro String 1", + "invalid_string2_params": "Neplatné parametry pro String 2", + "invalid_vat": "⚠️ Neplatná sazba DPH (0-30%)", + "live_data_not_confirmed": "Musíte potvrdit, že máte v aplikaci zapnutá 'Živá data'", + "live_data_not_enabled": "V OIG Cloud aplikaci nejsou zapnutá 'Živá data'. Zapněte je v nastavení aplikace!", + "local_proxy_missing": "⚠️ Pro režim 'Lokální' je potřeba OIG Local proxy: sensor.oig_local_oig_proxy_proxy_status_last_data a sensor.oig_local_oig_proxy_proxy_status_box_device_id", + "min_must_be_less_than_target": "⚠️ Minimální kapacita musí být menší než cílová kapacita", + "no_strings_enabled": "⚠️ Musíte povolit alespoň jeden string solárních panelů (String 1 nebo String 2)", + "overlapping_tariffs": "⚠️ VT a NT tarify se překrývají. Každá hodina může být pouze VT nebo NT.", + "required": "Toto pole je povinné", + "required_for_battery": "⚠️ Predikce baterie vyžaduje zapnuté rozšířené senzory", + "requires_solar_forecast": "⚠️ Predikce baterie vyžaduje zapnutou solární předpověď", + "solar_forecast_invalid_api_key": "Neplatný API klíč pro Forecast.Solar", + "solar_forecast_no_strings": "Musíte povolit alespoň jeden string", + "tariff_gaps": "⚠️ Tarify nepokrývají celý den (0-23 hodin). Zkontrolujte začátky VT a NT.", "unknown": "Neočekávaná chyba" }, "step": { + "import_config": { + "data": { + "config_file": "Cesta k souboru" + }, + "title": "Import konfigurace" + }, + "init": { + "description": "Nastavte základní parametry a povolte funkce.", + "title": "Základní konfigurace OIG Cloud" + }, + "solar_basic": { + "description": "GPS souřadnice a výběr stringů pro solar forecast.", + "title": "Solar Forecast - základní nastavení" + }, + "solar_string1": { + "description": "Parametry panelů na String 1.", + "title": "Solar Forecast - String 1" + }, + "solar_string2": { + "description": "Parametry panelů na String 2.", + "title": "Solar Forecast - String 2" + }, + "statistics": { + "description": "Nastavení parametrů pro statistické senzory a predikce.", + "title": "Konfigurace statistik" + }, "user": { - "title": "Přihlášení do OIG", - "description": "Zadejte své přihlašovací jméno/e-mail a heslo pro přihlášení do OIG", "data": { - "no_telemetry": "Zakázat sběr telemetrie (funkce v aktivním vývoji mohou být omezeny)", + "setup_type": "Způsob nastavení" + }, + "data_description": { + "setup_type": "🧙‍♂️ Průvodce = postupné nastavení krok za krokem\n⚡ Rychlé = jen přihlášení, vše ostatní na výchozí hodnoty" + }, + "description": "{info}", + "title": "OIG Cloud - Výběr typu nastavení" + }, + "wizard_battery": { + "data": { + "auto_mode_switch_enabled": "Automatické přepínání režimů podle plánu", + "balancing_economic_threshold": "Cena pro ekonomické balancing (CZK/kWh)", + "balancing_enabled": "🔄 Povolit vyrovnání článků baterie", + "balancing_hold_hours": "Doba držení na 100% (hodiny)", + "balancing_interval_days": "Interval vyrovnání (dny)", + "balancing_opportunistic_threshold": "Cena pro opportunistic balancing (CZK/kWh)", + "cheap_window_percentile": "Percentil levných hodin (%)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "home_charge_rate": "Nabíjecí výkon ze sítě (kW)", + "min_capacity_percent": "Minimální kapacita baterie (%)", + "disable_planning_min_guard": "Vypnout ochranu plánovacího minima", + "max_ups_price_czk": "Maximální cena pro nabíjení UPS (CZK/kWh)", + "target_capacity_percent": "Cílová kapacita baterie (%)" + }, + "data_description": { + "auto_mode_switch_enabled": "Pokud je zapnuto, integrace bude volat službu změny režimu (set_box_mode) automaticky podle vypočteného plánu. Stejné nastavení jako v průvodci.", + "balancing_economic_threshold": "V dnech 5-7 po posledním vyrovnání použít tento cenový práh (typicky 2.5 CZK/kWh)", + "balancing_enabled": "Automaticky vyrovnává články baterie nabíjením na 100% a držením po nastavenou dobu", + "balancing_hold_hours": "Jak dlouho držet baterii na 100% pro vyrovnání článků (1-12 hodin, doporučeno 3 hodiny)", + "balancing_interval_days": "Maximální počet dní mezi cykly vyrovnání (3-30 dní, doporučeno 7 dní)", + "balancing_opportunistic_threshold": "Pokud spot cena klesne pod tuto hodnotu, vyrovnat okamžitě bez ohledu na dny (typicky 1.1 CZK/kWh)", + "cheap_window_percentile": "Používá balancing pro výběr \"levné\" části cenové křivky.", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "home_charge_rate": "Maximální výkon nabíjení ze sítě (typicky 2-3 kW)", + "min_capacity_percent": "Pokud kapacita klesne pod tuto hodnotu, zahájí se nabíjení", + "disable_planning_min_guard": "Povolí plánovači jít níž než plánovací minimum (agresivnější optimalizace)", + "max_ups_price_czk": "Tvrdý bezpečnostní limit: ze sítě se nikdy nenabíjí, pokud je cena vyšší", + "target_capacity_percent": "Optimální kapacita, na kterou se nabíjí" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně optimalizuje nabíjení domácí baterie podle spotových cen elektřiny a předpovědi solární výroby. Automaticky se nabíjí v nejlevnějších hodinách.\n\n🔧 **Co je potřeba:**\n• ☀️ Solární předpověď (musí být zapnutá)\n• ⚡ Rozšířené senzory (musí být zapnuté)\n• 📈 Spotové ceny elektřiny\n\n⚠️ **Experimentální funkce** - může vyžadovat jemné doladění parametrů\n\n⚠️ **Tento modul je vyžadován pro:**\n• 📊 Dashboard (webové rozhraní)", + "title": "🔋 Konfigurace predikce baterie" + }, + "wizard_boiler": { + "data": { + "boiler_alt_cost_kwh": "Cena alternativního ohřevu (CZK/kWh)", + "boiler_alt_heater_switch_entity": "Přepínač alternativního zdroje - volitelný", + "boiler_cold_inlet_temp_c": "Teplota studené vody (°C)", + "boiler_deadline_time": "Deadline (čas do kdy mít ohřáto)", + "boiler_has_alternative_heating": "Má bojler alternativní zdroj tepla?", + "boiler_heater_power_kw_entity": "Senzor výkonu topného tělesa (kW)", + "boiler_heater_switch_entity": "Přepínač topného tělesa", + "boiler_plan_slot_minutes": "Délka časového slotu (minuty)", + "boiler_planning_horizon_hours": "Plánovací horizont (hodiny)", + "boiler_spot_price_sensor": "Senzor spotové ceny", + "boiler_stratification_mode": "Režim stratifikace", + "boiler_target_temp_c": "Cílová teplota vody (°C)", + "boiler_temp_sensor_bottom": "Teplotní senzor (dolní část) - volitelný", + "boiler_temp_sensor_top": "Teplotní senzor (horní část)", + "boiler_volume_l": "Objem bojleru (litry)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "boiler_alt_cost_kwh": "Kolik vás stojí 1 kWh z alternativního zdroje (např. 1.5 CZK/kWh pro kotel). Elektrický ohřev se použije jen když je spotová cena levnější.", + "boiler_alt_heater_switch_entity": "Entity ID přepínače pro alternativní zdroj (např. kotel, tepelné čerpadlo). Nechte prázdné, pokud nemáte.", + "boiler_cold_inlet_temp_c": "Teplota přítoku studené vody z vodovodu (typicky 10-15°C)", + "boiler_deadline_time": "Do kdy chcete mít bojler ohřátý (formát HH:MM, např. 20:00). Plánování vždy najde nejlevnější sloty PŘED tímto časem.", + "boiler_has_alternative_heating": "Zaškrtněte, pokud máte alternativní způsob ohřevu (kotel, TČ) a chcete ho využívat když je elektřina drahá", + "boiler_heater_power_kw_entity": "Entity ID senzoru s aktuálním výkonem (např. sensor.boiler_power). Pokud nemáte, vytvořte helper s konstantní hodnotou (např. 2.0 pro 2kW)", + "boiler_heater_switch_entity": "Entity ID přepínače pro zapnutí hlavního topného tělesa (např. switch.boiler_heater). Toto bude integrace zapínat/vypínat.", + "boiler_plan_slot_minutes": "Velikost časových bloků pro plánování (15-60 minut). Menší = přesnější, větší = jednodušší. Doporučeno 60 minut.", + "boiler_planning_horizon_hours": "Jak daleko dopředu plánovat (typicky 24-48 hodin). Čím více, tím lepší optimalizace, ale delší výpočet.", + "boiler_spot_price_sensor": "Entity ID senzoru se spotovou cenou (např. sensor.oig_2206237016_spot_price_current_15min)", + "boiler_stratification_mode": "simple_avg = průměr teplot | two_zone = stratifikovaný model (přesnější, potřebuje 2 senzory)", + "boiler_target_temp_c": "Na jakou teplotu chcete ohřát vodu (typicky 55-65°C)", + "boiler_temp_sensor_bottom": "Entity ID teplotního senzoru ve spodní části - pro přesnější výpočet u stratifikovaných bojlerů", + "boiler_temp_sensor_top": "Entity ID teplotního senzoru v horní části bojleru (např. sensor.boiler_temperature_top)", + "boiler_volume_l": "Celkový objem zásobníku teplé vody (např. 120 litrů)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně plánuje oh řev bojleru podle spotových cen elektřiny. Vybírá nejlevnější časové sloty pro ohřev vody před vámi nastaveným deadlinem.\n\n🔧 **Co je potřeba:**\n• 💰 Spotové ceny (musí být zapnuté)\n• 🌡️ Teplotní senzory bojleru (horní a volitelně dolní)\n• ⚡ Výkon topného tělesa\n\n💡 **Jak to funguje:**\n1. Vypočítá kolik energie potřebujete pro dohřátí vody\n2. Najde nejlevnější časové sloty před deadlinem (např. 20:00)\n3. Vytvoří plán kdy zapnout bojler\n4. Ovládá přepínač (switch) pro zapnutí/vypnutí ohřevu\n\n⚠️ **Poznámka:** Tento modul pouze řídí KDY ohřívat. Fyzické zapínání bojleru musíte zajistit pomocí automatizace nebo chytrého vypínače.", + "title": "🔥 Konfigurace bojleru" + }, + "wizard_credentials": { + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "live_data_enabled": "✅ Potvrzuji, že mám zapnutá 'Živá data' v aplikaci", "password": "Heslo", - "username": "Přihlašovací jméno nebo e-mail" + "username": "E-mail nebo uživatelské jméno" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se na úvodní obrazovku", + "live_data_enabled": "Bez zapnutých živých dat integrace nebude fungovat!" + }, + "description": "{step}\n{progress}\n\nZadejte své přihlašovací údaje do OIG Cloud aplikace.\n\n⚠️ **DŮLEŽITÉ:** V mobilní aplikaci OIG Cloud musíte mít zapnutou funkci 'Živá data' v nastavení!", + "title": "🔐 Přihlašovací údaje" + }, + "wizard_extended": { + "data": { + "enable_extended_battery_sensors": "🔋 Rozšířené senzory baterie", + "enable_extended_fve_sensors": "☀️ Rozšířené senzory FVE", + "enable_extended_grid_sensors": "⚡ Rozšířené senzory sítě", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_extended_battery_sensors": "Napětí článků, teploty, proudy nabíjení/vybíjení", + "enable_extended_fve_sensors": "Napětí stringů, proudy, teploty, výkon jednotlivých stringů", + "enable_extended_grid_sensors": "Napětí fází L1/L2/L3, frekvence, kvalita napájení", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Rozšířené senzory**\n\nVyberte, které skupiny rozšířených senzorů chcete aktivovat.\n\n💡 **Dostupné skupiny:**\n• 🔋 Baterie - napětí článků, teploty, proudy\n• ☀️ FVE - napětí stringů, proudy, teploty\n• ⚡ Síť - napětí fází, frekvence, kvalita\n\n⚠️ **Poznámka:** Více senzorů = vyšší zátěž na API", + "title": "⚡ Rozšířené senzory" + }, + "wizard_intervals": { + "data": { + "data_source_mode": "Zdroj telemetrie", + "enable_cloud_notifications": "Cloud notifikace", + "extended_scan_interval": "Rozšířená data (sekund)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "local_event_debounce_ms": "Local event debounce (ms)", + "local_proxy_stale_minutes": "Fallback na cloud po (minut)", + "notifications_scan_interval": "Notifikace interval (sekund)", + "standard_scan_interval": "Základní data (sekund)" + }, + "data_description": { + "data_source_mode": "Cloud only = všechny senzory čtou z cloudu; Local only = čtení z lokálních entit (při výpadku proxy > limit minut se dočasně vrátí na cloud)", + "enable_cloud_notifications": "Povolit stahování cloud notifikací (typicky stačí 1× za několik minut)", + "extended_scan_interval": "Jak často načítat napětí článků, teploty, proudy a další detailní údaje (minimálně 300 sekund, doporučeno 300-600 sekund)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "local_event_debounce_ms": "Debounce pro event-driven refresh z lokálních entit (nižší = rychlejší reakce, vyšší = méně aktualizací)", + "local_proxy_stale_minutes": "Po kolika minutách bez lokálních dat se přepnout do cloudu. Jakmile proxy znovu odpoví, vrátí se zpět na local.", + "notifications_scan_interval": "Jak často kontrolovat cloud notifikace (doporučeno 300-900 sekund)", + "standard_scan_interval": "Jak často načítat spotřebu, výrobu, stav baterie a další základní údaje (minimálně 30 sekund, doporučeno 30-60 sekund)" + }, + "description": "{step}\n{progress}\n\nNastavte, jak často se mají načítat data z OIG Cloud.\n\n💡 **Tip:** Kratší interval = aktuálnější data, ale vyšší zátěž na API servery.", + "title": "⏱️ Intervaly načítání dat" + }, + "wizard_modules": { + "data": { + "enable_auto": "🚗 Auto - plánování nabíjení vozidla", + "enable_battery_prediction": "🔋 Inteligentní predikce a optimalizace baterie", + "enable_boiler": "🔥 Bojler - optimalizace ohřevu vody", + "enable_chmu_warnings": "🌦️ Varování ČHMÚ (meteorologická výstraha)", + "enable_dashboard": "📊 Webový dashboard s grafy", + "enable_extended_sensors": "⚡ Rozšířené senzory (napětí, proudy, teploty)", + "enable_pricing": "💰 Cenové senzory a spotové ceny z OTE", + "enable_solar_forecast": "☀️ Solární předpověď výroby FVE", + "enable_statistics": "📊 Statistiky a analýzy spotřeby", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_auto": "Optimalizace nabíjení elektromobilu (připravujeme)", + "enable_battery_prediction": "Experimentální - chytré nabíjení podle cen", + "enable_boiler": "Inteligentní plánování ohřevu bojleru podle spotových cen", + "enable_chmu_warnings": "Meteorologická varování pro vaši lokalitu (CAP XML)", + "enable_dashboard": "Webové rozhraní s grafy přístupné v HA", + "enable_extended_sensors": "Doporučeno - detailní monitoring", + "enable_pricing": "Doporučeno - spotové ceny z OTE + kalkulace nákladů", + "enable_solar_forecast": "Vyžaduje API klíč od Forecast.Solar", + "enable_statistics": "Doporučeno - medián spotřeby, predikce", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\nVyberte, které funkce chcete používat. Každý modul můžete později podrobně nastavit.", + "title": "📦 Výběr modulů a funkcí" + }, + "wizard_pricing_distribution": { + "data": { + "distribution_fee_nt_kwh": "Poplatek za distribuci NT (CZK/kWh)", + "distribution_fee_vt_kwh": "Poplatek za distribuci VT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixní nákupní cena NT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixní nákupní cena VT (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "tariff_count": "Počet tarifů", + "tariff_nt_start_weekday": "NT začátek pracovní den (hodina1,hodina2)", + "tariff_nt_start_weekend": "NT začátek víkend (hodina1,hodina2)", + "tariff_vt_start_weekday": "VT začátek pracovní den (hodina)", + "tariff_vt_start_weekend": "VT začátek víkend (hodina)", + "tariff_weekend_same_as_weekday": "Víkend stejné jako pracovní dny", + "vat_rate": "DPH (%)" + }, + "data_description": { + "distribution_fee_nt_kwh": "Distribuční poplatek NT (nízký tarif). Např. 0.91 CZK/kWh", + "distribution_fee_vt_kwh": "Distribuční poplatek VT (vysoký tarif). Např. 1.42 CZK/kWh", + "fixed_price_nt_kwh": "Fixní nákupní cena NT bez DPH a distribuce.", + "fixed_price_vt_kwh": "Fixní nákupní cena VT bez DPH a distribuce.", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "tariff_count": "💡 Klikněte 'Odeslat' pro zobrazení parametrů podle počtu tarifů", + "tariff_nt_start_weekday": "Začátek NT v pracovní den. Formát: hodina1,hodina2 (např. '22,2' = 22:00 večer a 02:00 ráno)", + "tariff_nt_start_weekend": "Začátek NT o víkendu. Formát: hodina1,hodina2 (např. '0' = NT celý den)", + "tariff_vt_start_weekday": "Začátek VT v pracovní den. Formát: hodina (např. '6' = 06:00)", + "tariff_vt_start_weekend": "Začátek VT o víkendu. Formát: hodina (nechte prázdné pro NT celý den)", + "tariff_weekend_same_as_weekday": "Použít stejné časy VT/NT i o víkendu", + "vat_rate": "Sazba DPH v procentech. Standardně 21%" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 3: Distribuce a DPH**\n\nNastavte distribuční poplatky a DPH.\n\n💡 **Informace:**\n• Distribuce je **nezávislá** na typu nákupu/prodeje (FIX/SPOT)\n• Pokud máte 2 tarify (VT/NT), zaškrtněte 'Dva tarify'\n• VT hodiny se automaticky nastaví podle běžných časů\n\n⚙️ Po výběru počtu tarifů klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "⚡ Konfigurace distribuce a DPH (3/3)" + }, + "wizard_pricing_export": { + "data": { + "export_fee_percent": "Srážka z exportu (%)", + "export_fixed_fee_czk": "Fixní srážka exportu (CZK/kWh)", + "export_fixed_price_kwh": "Fixní výkupní cena (CZK/kWh)", + "export_pricing_scenario": "Scénář prodejní ceny", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "export_fee_percent": "Srážka v %. Např. 15% = dostanete 85% ze spotové ceny (spot × 0.85)", + "export_fixed_fee_czk": "Fixní srážka od spotové ceny. Např. 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixní výkupní cena bez ohledu na spot. Např. 2.50 CZK/kWh", + "export_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 2: Prodejní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za prodej přebytků do sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT - procento - Výhodné při vysokých spotových cenách\n• 💵 SPOT - fixní srážka - Stabilnější výkup\n• 🔒 FIX cena - Stabilní výkupní cena po celý rok\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "💸 Konfigurace prodejní ceny (2/3)" + }, + "wizard_pricing_import": { + "data": { + "fixed_price_kwh": "Fixní nákupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "import_pricing_scenario": "Scénář nákupní ceny", + "spot_fixed_fee_kwh": "Fixní poplatek (CZK/kWh)", + "spot_negative_fee_percent": "Přirážka při záporné spotové ceně (%)", + "spot_positive_fee_percent": "Přirážka při kladné spotové ceně (%)" + }, + "data_description": { + "fixed_price_kwh": "Fixní nákupní cena. ⚠️ ZADÁVEJTE BEZ DPH A DISTRIBUCE!", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "import_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "spot_fixed_fee_kwh": "Konstantní poplatek přičtený ke spotové ceně. Např. 0,50 CZK/kWh", + "spot_negative_fee_percent": "Při záporné spotové ceně: cena × (1 - procento/100). Např. 9% = spot × 0,91", + "spot_positive_fee_percent": "Při kladné spotové ceně: cena × (1 + procento/100). Např. 15% = spot × 1,15" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 1: Nákupní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za nákup elektřiny ze sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT + procento - Variabilní cena podle burzy\n• 💵 SPOT + fixní poplatek - Stabilnější než procento\n• 🔒 FIX cena - Předvídatelná fixní cena\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "💰 Konfigurace nákupní ceny (1/3)" + }, + "wizard_solar": { + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "solar_forecast_provider": "Poskytovatel předpovědi", + "solar_forecast_api_key": "Forecast.Solar API klíč", + "solcast_api_key": "Solcast API klíč", + "solar_forecast_latitude": "GPS šířka instalace", + "solar_forecast_longitude": "GPS délka instalace", + "solar_forecast_mode": "Režim aktualizace předpovědi", + "solar_forecast_string1_azimuth": "String 1 - Azimut / Orientace (°)", + "solar_forecast_string1_declination": "String 1 - Sklon panelů (°)", + "solar_forecast_string1_enabled": "✅ Zapnout String 1", + "solar_forecast_string1_kwp": "String 1 - Instalovaný výkon (kWp)", + "solar_forecast_string2_azimuth": "String 2 - Azimut / Orientace (°)", + "solar_forecast_string2_declination": "String 2 - Sklon panelů (°)", + "solar_forecast_string2_enabled": "✅ Zapnout String 2", + "solar_forecast_string2_kwp": "String 2 - Instalovaný výkon (kWp)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "solar_forecast_provider": "Vyberte zdroj dat pro solární předpověď", + "solar_forecast_api_key": "Nepovinné pro ZDARMA režimy. Povinné pro časté aktualizace (4h, 1h)", + "solcast_api_key": "Povinné pro Solcast", + "solar_forecast_latitude": "Rozsah: -90° až 90° (Střední Evropa cca 48-51°)", + "solar_forecast_longitude": "Rozsah: -180° až 180° (Střední Evropa cca 12-19°)", + "solar_forecast_mode": "🎯 Optimalizovaný = 3× denně v 6:00, 12:00, 16:00 (DOPORUČENO)\n🌅 Denní = 1× denně v 6:00\n🕐 4h/⚡1h = vyžaduje API klíč", + "solar_forecast_string1_azimuth": "0° = JIH, 90° = ZÁPAD, 180° = SEVER, 270° = VÝCHOD (rozsah 0-360°)", + "solar_forecast_string1_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string1_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Pokud máte panely pouze na jedné orientaci, stačí String 1", + "solar_forecast_string1_kwp": "Celkový výkon String 1 v kWp (např. 5.0 kWp)", + "solar_forecast_string2_azimuth": "0° = JIH, 90° = ZÁPAD, 180° = SEVER, 270° = VÝCHOD (rozsah 0-360°)", + "solar_forecast_string2_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string2_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Zapněte, pokud máte panely na dvou různých orientacích (např. východ + západ)", + "solar_forecast_string2_kwp": "Celkový výkon String 2 v kWp (např. 3.5 kWp)" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nPoskytuje předpověď výroby elektřiny z fotovoltaických panelů na následujících 24-72 hodin. Využívá službu Forecast.Solar s přesnými meteorologickými daty.\n\n🔧 **Co je potřeba:**\n• Bezplatný nebo placený API klíč z https://forecast.solar\n• GPS souřadnice instalace FVE\n• Parametry panelů (sklon, azimut, výkon)\n\n⚠️ **Tento modul je vyžadován pro:**\n• 🔋 Predikce baterie (inteligentní nabíjení)\n\n🔑 API klíč získáte registrací na https://forecast.solar", + "title": "☀️ Konfigurace solární předpovědi" + }, + "wizard_summary": { + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📋 **Shrnutí konfigurace**\n\n{summary}\n\n---\n\n✅ **Vše je připraveno!**\n\nKliknutím na 'Odeslat' dokončíte nastavení a integrace se aktivuje.", + "title": "✅ Shrnutí a dokončení" + }, + "wizard_welcome": { + "description": "{info}", + "title": "🎯 Vítejte v průvodci OIG Cloud" + }, + "wizard_welcome_reconfigure": { + "description": "🔧 **Změna nastavení OIG Cloud**\n\nTento průvodce vás provede úpravou konfigurace integrace.\n\n**Co můžete změnit:**\n• 📦 Zapnout/vypnout moduly a funkce\n• ⏱️ Upravit intervaly načítání dat\n• ☀️ Změnit nastavení solární předpovědi\n• 🔋 Upravit parametry predikce baterie\n• 💰 Změnit cenové nastavení\n• ⚡ Upravit rozšířené senzory\n\n**Poznámka:** Přihlašovací údaje nelze měnit zde - musíte smazat a znovu přidat integraci.\n\nKliknutím na \"Odeslat\" pokračujte v nastavení.", + "title": "🔧 Změna nastavení OIG Cloud" + } + } + }, + "entity": { + "sensor": { + "data_source": { + "name": "Zdroj dat", + "state": { + "cloud": "Cloud", + "local": "Lokální" + }, + "state_attributes": { + "configured_mode": { + "name": "Nastavený režim" + }, + "effective_mode": { + "name": "Používaný režim" + }, + "last_local_data": { + "name": "Poslední lokální data" + }, + "local_available": { + "name": "Lokální dostupné" + }, + "reason": { + "name": "Důvod" + } + } + } + } + }, + "options": { + "abort": { + "reconfigure_successful": "✅ Nastavení bylo uloženo a integrace byla znovu načtena." + }, + "step": { + "battery_prediction": { + "data": { + "auto_mode_switch_enabled": "Automatické přepínání režimů podle plánu", + "cheap_window_percentile": "Percentil levných hodin (%)" + }, + "data_description": { + "auto_mode_switch_enabled": "Pokud je zapnuto, integrace bude volat službu změny režimu (set_box_mode) automaticky podle vypočteného plánu. Stejné nastavení jako v průvodci.", + "cheap_window_percentile": "Používá balancing pro výběr \"levné\" části cenové křivky." } + }, + "wizard_battery": { + "data": { + "auto_mode_switch_enabled": "Automatické přepínání režimů podle plánu", + "balancing_economic_threshold": "Cena pro ekonomické balancing (CZK/kWh)", + "balancing_enabled": "🔄 Povolit vyrovnání článků baterie", + "balancing_hold_hours": "Doba držení na 100% (hodiny)", + "balancing_interval_days": "Interval vyrovnání (dny)", + "balancing_opportunistic_threshold": "Cena pro opportunistic balancing (CZK/kWh)", + "cheap_window_percentile": "Percentil levných hodin (%)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "home_charge_rate": "Nabíjecí výkon ze sítě (kW)", + "max_ups_price_czk": "Maximální cena pro nabíjení UPS (CZK/kWh)", + "min_capacity_percent": "Minimální kapacita baterie (%)", + "disable_planning_min_guard": "Vypnout ochranu plánovacího minima", + "target_capacity_percent": "Cílová kapacita baterie (%)" + }, + "data_description": { + "auto_mode_switch_enabled": "Pokud je zapnuto, integrace bude volat službu změny režimu (set_box_mode) automaticky podle vypočteného plánu.", + "balancing_economic_threshold": "V dnech 5-7 po posledním vyrovnání použít tento cenový práh (typicky 2.5 CZK/kWh)", + "balancing_enabled": "Automaticky vyrovnává články baterie nabíjením na 100% a držením po nastavenou dobu", + "balancing_hold_hours": "Jak dlouho držet baterii na 100% pro vyrovnání článků (1-12 hodin, doporučeno 3 hodiny)", + "balancing_interval_days": "Maximální počet dní mezi cykly vyrovnání (3-30 dní, doporučeno 7 dní)", + "balancing_opportunistic_threshold": "Pokud spot cena klesne pod tuto hodnotu, vyrovnat okamžitě bez ohledu na dny (typicky 1.1 CZK/kWh)", + "cheap_window_percentile": "Používá balancing pro výběr \"levné\" části cenové křivky.", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "home_charge_rate": "Maximální výkon nabíjení ze sítě (typicky 2-3 kW)", + "min_capacity_percent": "Pokud kapacita klesne pod tuto hodnotu, zahájí se nabíjení", + "disable_planning_min_guard": "Povolí plánovači jít níž než plánovací minimum (agresivnější optimalizace)", + "max_ups_price_czk": "Tvrdý bezpečnostní limit: ze sítě se nikdy nenabíjí, pokud je cena vyšší", + "target_capacity_percent": "Optimální kapacita, na kterou se nabíjí" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně optimalizuje nabíjení domácí baterie podle spotových cen elektřiny a předpovědi solární výroby. Automaticky se nabíjí v nejlevnějších hodinách.\n\n🔧 **Co je potřeba:**\n• ☀️ Solární předpověď (musí být zapnutá)\n• ⚡ Rozšířené senzory (musí být zapnuté)\n• 📈 Spotové ceny elektřiny\n\n⚠️ **Experimentální funkce** - může vyžadovat jemné doladění parametrů\n\n⚠️ **Tento modul je vyžadován pro:**\n• 📊 Dashboard (webové rozhraní)", + "title": "🔋 Konfigurace predikce baterie" + }, + "wizard_boiler": { + "data": { + "boiler_alt_cost_kwh": "Cena alternativního ohřevu (CZK/kWh)", + "boiler_alt_heater_switch_entity": "Přepínač alternativního zdroje - volitelný", + "boiler_cold_inlet_temp_c": "Teplota studené vody (°C)", + "boiler_deadline_time": "Deadline (čas do kdy mít ohřáto)", + "boiler_has_alternative_heating": "Má bojler alternativní zdroj tepla?", + "boiler_heater_power_kw_entity": "Senzor výkonu topného tělesa (kW)", + "boiler_heater_switch_entity": "Přepínač topného tělesa", + "boiler_plan_slot_minutes": "Délka časového slotu (minuty)", + "boiler_planning_horizon_hours": "Plánovací horizont (hodiny)", + "boiler_spot_price_sensor": "Senzor spotové ceny", + "boiler_stratification_mode": "Režim stratifikace", + "boiler_target_temp_c": "Cílová teplota vody (°C)", + "boiler_temp_sensor_bottom": "Teplotní senzor (dolní část) - volitelný", + "boiler_temp_sensor_top": "Teplotní senzor (horní část)", + "boiler_volume_l": "Objem bojleru (litry)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "boiler_alt_cost_kwh": "Kolik vás stojí 1 kWh z alternativního zdroje (např. 1.5 CZK/kWh pro kotel). Elektrický ohřev se použije jen když je spotová cena levnější.", + "boiler_alt_heater_switch_entity": "Entity ID přepínače pro alternativní zdroj (např. kotel, tepelné čerpadlo). Nechte prázdné, pokud nemáte.", + "boiler_cold_inlet_temp_c": "Teplota přítoku studené vody z vodovodu (typicky 10-15°C)", + "boiler_deadline_time": "Do kdy chcete mít bojler ohřátý (formát HH:MM, např. 20:00). Plánování vždy najde nejlevnější sloty PŘED tímto časem.", + "boiler_has_alternative_heating": "Zaškrtněte, pokud máte alternativní způsob ohřevu (kotel, TČ) a chcete ho využívat když je elektřina drahá", + "boiler_heater_power_kw_entity": "Entity ID senzoru s aktuálním výkonem (např. sensor.boiler_power). Pokud nemáte, vytvořte helper s konstantní hodnotou (např. 2.0 pro 2kW)", + "boiler_heater_switch_entity": "Entity ID přepínače pro zapnutí hlavního topného tělesa (např. switch.boiler_heater). Toto bude integrace zapínat/vypínat.", + "boiler_plan_slot_minutes": "Velikost časových bloků pro plánování (15-60 minut). Menší = přesnější, větší = jednodušší. Doporučeno 60 minut.", + "boiler_planning_horizon_hours": "Jak daleko dopředu plánovat (typicky 24-48 hodin). Čím více, tím lepší optimalizace, ale delší výpočet.", + "boiler_spot_price_sensor": "Entity ID senzoru se spotovou cenou (např. sensor.oig_2206237016_spot_price_current_15min)", + "boiler_stratification_mode": "simple_avg = průměr teplot | two_zone = stratifikovaný model (přesnější, potřebuje 2 senzory)", + "boiler_target_temp_c": "Na jakou teplotu chcete ohřát vodu (typicky 55-65°C)", + "boiler_temp_sensor_bottom": "Entity ID teplotního senzoru ve spodní části - pro přesnější výpočet u stratifikovaných bojlerů", + "boiler_temp_sensor_top": "Entity ID teplotního senzoru v horní části bojleru (např. sensor.boiler_temperature_top)", + "boiler_volume_l": "Celkový objem zásobníku teplé vody (např. 120 litrů)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nInteligentně plánuje ohřev bojleru podle spotových cen elektřiny. Vybírá nejlevnější časové sloty pro ohřev vody před vámi nastaveným deadlinem.\n\n🔧 **Co je potřeba:**\n• 💰 Spotové ceny (musí být zapnuté)\n• 🌡️ Teplotní senzory bojleru (horní a volitelně dolní)\n• ⚡ Výkon topného tělesa\n\n💡 **Jak to funguje:**\n1. Vypočítá kolik energie potřebujete pro dohřátí vody\n2. Najde nejlevnější časové sloty před deadlinem (např. 20:00)\n3. Vytvoří plán kdy zapnout bojler\n4. Ovládá přepínač (switch) pro zapnutí/vypnutí ohřevu\n\n⚠️ **Poznámka:** Tento modul pouze řídí KDY ohřívat. Fyzické zapínání bojleru musíte zajistit pomocí automatizace nebo chytrého vypínače.", + "title": "🔥 Konfigurace bojleru" + }, + "wizard_extended": { + "data": { + "enable_extended_battery_sensors": "🔋 Rozšířené senzory baterie", + "enable_extended_fve_sensors": "☀️ Rozšířené senzory FVE", + "enable_extended_grid_sensors": "⚡ Rozšířené senzory sítě", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_extended_battery_sensors": "Napětí článků, teploty, proudy nabíjení/vybíjení", + "enable_extended_fve_sensors": "Napětí stringů, proudy, teploty, výkon jednotlivých stringů", + "enable_extended_grid_sensors": "Napětí fází L1/L2/L3, frekvence, kvalita napájení", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Rozšířené senzory**\n\nVyberte, které skupiny rozšířených senzorů chcete aktivovat.\n\n💡 **Dostupné skupiny:**\n• 🔋 Baterie - napětí článků, teploty, proudy\n• ☀️ FVE - napětí stringů, proudy, teploty\n• ⚡ Síť - napětí fází, frekvence, kvalita\n\n⚠️ **Poznámka:** Více senzorů = vyšší zátěž na API", + "title": "⚡ Rozšířené senzory" + }, + "wizard_intervals": { + "data": { + "data_source_mode": "Zdroj telemetrie", + "enable_cloud_notifications": "Cloud notifikace", + "extended_scan_interval": "Rozšířená data (sekund)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "local_event_debounce_ms": "Local event debounce (ms)", + "local_proxy_stale_minutes": "Fallback na cloud po (minut)", + "notifications_scan_interval": "Notifikace interval (sekund)", + "standard_scan_interval": "Základní data (sekund)" + }, + "data_description": { + "data_source_mode": "Cloud only = vše z cloudu; Local only = lokální mapping (při výpadku/zastarání proxy automaticky fallback na cloud)", + "enable_cloud_notifications": "Povolit stahování cloud notifikací (typicky stačí 1× za několik minut)", + "extended_scan_interval": "Jak často načítat napětí článků, teploty, proudy a další detailní údaje (minimálně 300 sekund, doporučeno 300-600 sekund)", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "local_event_debounce_ms": "Debounce pro event-driven refresh z local entit (nižší = rychlejší reakce, vyšší = méně aktualizací)", + "local_proxy_stale_minutes": "Fallback na cloud, pokud lokální proxy neposlala data déle než tento limit", + "notifications_scan_interval": "Jak často kontrolovat cloud notifikace (doporučeno 300-900 sekund)", + "standard_scan_interval": "Jak často načítat spotřebu, výrobu, stav baterie a další základní údaje (minimálně 30 sekund, doporučeno 30-60 sekund)" + }, + "description": "{step}\n{progress}\n\nNastavte, jak často se mají načítat data z OIG Cloud.\n\n💡 **Tip:** Kratší interval = aktuálnější data, ale vyšší zátěž na API servery.", + "title": "⏱️ Intervaly načítání dat" + }, + "wizard_modules": { + "data": { + "enable_auto": "🚗 Auto - plánování nabíjení vozidla", + "enable_battery_prediction": "🔋 Inteligentní predikce a optimalizace baterie", + "enable_boiler": "🔥 Bojler - optimalizace ohřevu vody", + "enable_chmu_warnings": "🌦️ Varování ČHMÚ (meteorologická výstraha)", + "enable_dashboard": "📊 Webový dashboard s grafy", + "enable_extended_sensors": "⚡ Rozšířené senzory (napětí, proudy, teploty)", + "enable_pricing": "💰 Cenové senzory a spotové ceny z OTE", + "enable_solar_forecast": "☀️ Solární předpověď výroby FVE", + "enable_statistics": "📊 Statistiky a analýzy spotřeby", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "enable_auto": "Optimalizace nabíjení elektromobilu (připravujeme)", + "enable_battery_prediction": "Experimentální - chytré nabíjení podle cen", + "enable_boiler": "Inteligentní plánování ohřevu bojleru podle spotových cen", + "enable_chmu_warnings": "Meteorologická varování pro vaši lokalitu (CAP XML)", + "enable_dashboard": "Webové rozhraní s grafy přístupné v HA", + "enable_extended_sensors": "Doporučeno - detailní monitoring", + "enable_pricing": "Doporučeno - spotové ceny z OTE + kalkulace nákladů", + "enable_solar_forecast": "Vyžaduje API klíč od Forecast.Solar", + "enable_statistics": "Doporučeno - medián spotřeby, predikce", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\nVyberte, které funkce chcete používat. Každý modul můžete později podrobně nastavit.", + "title": "📦 Výběr modulů a funkcí" + }, + "wizard_pricing_distribution": { + "data": { + "distribution_fee_nt_kwh": "Poplatek za distribuci NT (CZK/kWh)", + "distribution_fee_vt_kwh": "Poplatek za distribuci VT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixní nákupní cena NT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixní nákupní cena VT (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "tariff_count": "Počet tarifů", + "tariff_nt_start_weekday": "NT začátek pracovní den (hodina1,hodina2)", + "tariff_nt_start_weekend": "NT začátek víkend (hodina1,hodina2)", + "tariff_vt_start_weekday": "VT začátek pracovní den (hodina)", + "tariff_vt_start_weekend": "VT začátek víkend (hodina)", + "tariff_weekend_same_as_weekday": "Víkend stejné jako pracovní dny", + "vat_rate": "DPH (%)" + }, + "data_description": { + "distribution_fee_nt_kwh": "Distribuční poplatek NT (nízký tarif). Např. 0.91 CZK/kWh", + "distribution_fee_vt_kwh": "Distribuční poplatek VT (vysoký tarif). Např. 1.42 CZK/kWh", + "fixed_price_nt_kwh": "Fixní nákupní cena NT bez DPH a distribuce.", + "fixed_price_vt_kwh": "Fixní nákupní cena VT bez DPH a distribuce.", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "tariff_count": "💡 Klikněte 'Odeslat' pro zobrazení parametrů podle počtu tarifů", + "tariff_nt_start_weekday": "Začátek NT v pracovní den. Formát: hodina1,hodina2 (např. '22,2' = 22:00 večer a 02:00 ráno)", + "tariff_nt_start_weekend": "Začátek NT o víkendu. Formát: hodina1,hodina2 (např. '0' = NT celý den)", + "tariff_vt_start_weekday": "Začátek VT v pracovní den. Formát: hodina (např. '6' = 06:00)", + "tariff_vt_start_weekend": "Začátek VT o víkendu. Formát: hodina (nechte prázdné pro NT celý den)", + "tariff_weekend_same_as_weekday": "Použít stejné časy VT/NT i o víkendu", + "vat_rate": "Sazba DPH v procentech. Standardně 21%" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 3: Distribuce a DPH**\n\nNastavte distribuční poplatky a DPH.\n\n💡 **Informace:**\n• Distribuce je **nezávislá** na typu nákupu/prodeje (FIX/SPOT)\n• Pokud máte 2 tarify (VT/NT), zaškrtněte 'Dva tarify'\n• VT hodiny se automaticky nastaví podle běžných časů\n\n⚙️ Po výběru počtu tarifů klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "⚡ Konfigurace distribuce a DPH (3/3)" + }, + "wizard_pricing_export": { + "data": { + "export_fee_percent": "Srážka z exportu (%)", + "export_fixed_fee_czk": "Fixní srážka exportu (CZK/kWh)", + "export_fixed_price_kwh": "Fixní výkupní cena (CZK/kWh)", + "export_pricing_scenario": "Scénář prodejní ceny", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "export_fee_percent": "Srážka v %. Např. 15% = dostanete 85% ze spotové ceny (spot × 0.85)", + "export_fixed_fee_czk": "Fixní srážka od spotové ceny. Např. 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixní výkupní cena bez ohledu na spot. Např. 2.50 CZK/kWh", + "export_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 2: Prodejní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za prodej přebytků do sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT - procento - Výhodné při vysokých spotových cenách\n• 💵 SPOT - fixní srážka - Stabilnější výkup\n• 🔒 FIX cena - Stabilní výkupní cena po celý rok\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "💸 Konfigurace prodejní ceny (2/3)" + }, + "wizard_pricing_import": { + "data": { + "fixed_price_kwh": "Fixní nákupní cena (CZK/kWh)", + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "import_pricing_scenario": "Scénář nákupní ceny", + "spot_fixed_fee_kwh": "Fixní poplatek (CZK/kWh)", + "spot_negative_fee_percent": "Přirážka při záporné spotové ceně (%)", + "spot_positive_fee_percent": "Přirážka při kladné spotové ceně (%)" + }, + "data_description": { + "fixed_price_kwh": "Fixní nákupní cena. ⚠️ ZADÁVEJTE BEZ DPH A DISTRIBUCE!", + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "import_pricing_scenario": "💡 Klikněte 'Odeslat' pro zobrazení parametrů zvoleného scénáře", + "spot_fixed_fee_kwh": "Konstantní poplatek přičtený ke spotové ceně. Např. 0,50 CZK/kWh", + "spot_negative_fee_percent": "Při záporné spotové ceně: cena × (1 - procento/100). Např. 9% = spot × 0,91", + "spot_positive_fee_percent": "Při kladné spotové ceně: cena × (1 + procento/100). Např. 15% = spot × 1,15" + }, + "description": "{step}\n{progress}\n\n📖 **Krok 1: Nákupní cena elektřiny**\n\nVyberte, jak chcete počítat cenu za nákup elektřiny ze sítě.\n\n💡 **Doporučené scénáře:**\n• 💰 SPOT + procento - Variabilní cena podle burzy\n• 💵 SPOT + fixní poplatek - Stabilnější než procento\n• 🔒 FIX cena - Předvídatelná fixní cena\n\n⚙️ Po výběru scénáře klikněte 'Odeslat' pro zobrazení parametrů.", + "title": "💰 Konfigurace nákupní ceny (1/3)" + }, + "wizard_solar": { + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)", + "solar_forecast_api_key": "Forecast.Solar API klíč", + "solar_forecast_latitude": "GPS šířka instalace", + "solar_forecast_longitude": "GPS délka instalace", + "solar_forecast_mode": "Režim aktualizace předpovědi", + "solar_forecast_string1_azimuth": "String 1 - Azimut / Orientace (°)", + "solar_forecast_string1_declination": "String 1 - Sklon panelů (°)", + "solar_forecast_string1_enabled": "✅ Zapnout String 1", + "solar_forecast_string1_kwp": "String 1 - Instalovaný výkon (kWp)", + "solar_forecast_string2_azimuth": "String 2 - Azimut / Orientace (°)", + "solar_forecast_string2_declination": "String 2 - Sklon panelů (°)", + "solar_forecast_string2_enabled": "✅ Zapnout String 2", + "solar_forecast_string2_kwp": "String 2 - Instalovaný výkon (kWp)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět", + "solar_forecast_api_key": "Nepovinné pro ZDARMA režimy. Povinné pro časté aktualizace (4h, 1h)", + "solar_forecast_latitude": "Rozsah: -90° až 90° (Střední Evropa cca 48-51°)", + "solar_forecast_longitude": "Rozsah: -180° až 180° (Střední Evropa cca 12-19°)", + "solar_forecast_mode": "🎯 Optimalizovaný = 3× denně v 6:00, 12:00, 16:00 (DOPORUČENO)\n🌅 Denní = 1× denně v 6:00\n🕐 4h/⚡1h = vyžaduje API klíč", + "solar_forecast_string1_azimuth": "0° = JIH, 90° = ZÁPAD, 180° = SEVER, 270° = VÝCHOD (rozsah 0-360°)", + "solar_forecast_string1_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string1_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Pokud máte panely pouze na jedné orientaci, stačí String 1", + "solar_forecast_string1_kwp": "Celkový výkon String 1 v kWp (např. 5.0 kWp)", + "solar_forecast_string2_azimuth": "0° = JIH, 90° = ZÁPAD, 180° = SEVER, 270° = VÝCHOD (rozsah 0-360°)", + "solar_forecast_string2_declination": "0° = horizontálně, 90° = vertikálně (střechy obvykle 30-45°). Rozsah: 0-90°", + "solar_forecast_string2_enabled": "💡 Klikněte 'Odeslat' pro zobrazení parametrů. Zapněte, pokud máte panely na dvou různých orientacích (např. východ + západ)", + "solar_forecast_string2_kwp": "Celkový výkon String 2 v kWp (např. 3.5 kWp)" + }, + "description": "{step}\n{progress}\n\n📖 **Co tento modul dělá:**\nPoskytuje předpověď výroby elektřiny z fotovoltaických panelů na následujících 24-72 hodin. Využívá službu Forecast.Solar s přesnými meteorologickými daty.\n\n🔧 **Co je potřeba:**\n• Bezplatný nebo placený API klíč z https://forecast.solar\n• GPS souřadnice instalace FVE\n• Parametry panelů (sklon, azimut, výkon)\n\n⚠️ **Tento modul je vyžadován pro:**\n• 🔋 Predikce baterie (inteligentní nabíjení)\n\n🔑 API klíč získáte registrací na https://forecast.solar", + "title": "☀️ Konfigurace solární předpovědi" + }, + "wizard_summary": { + "data": { + "go_back": "⬅️ Chci se vrátit zpět (zaškrtnout + kliknout Odeslat)" + }, + "data_description": { + "go_back": "Zaškrtněte toto políčko a stiskněte tlačítko 'Odeslat' - vrátíte se o krok zpět" + }, + "description": "{step}\n{progress}\n\n📋 **Shrnutí konfigurace**\n\n{summary}\n\n---\n\n✅ **Vše je připraveno!**\n\nKliknutím na 'Odeslat' uložíte změny.", + "title": "✅ Shrnutí a dokončení" + }, + "wizard_welcome_reconfigure": { + "description": "🔧 **Změna nastavení OIG Cloud**\n\nTento průvodce vás provede úpravou konfigurace integrace.\n\n**Co můžete změnit:**\n• 📦 Zapnout/vypnout moduly a funkce\n• ⏱️ Upravit intervaly načítání dat\n• ☀️ Změnit nastavení solární předpovědi\n• 🔋 Upravit parametry predikce baterie\n• 💰 Změnit cenové nastavení\n• ⚡ Upravit rozšířené senzory\n\n**Poznámka:** Přihlašovací údaje nelze měnit zde - musíte smazat a znovu přidat integraci.\n\nKliknutím na \"Odeslat\" pokračujte v nastavení.", + "title": "🔧 Změna nastavení OIG Cloud" } } }, "selector": { - "set_box_mode": { + "setup_type": { "options": { - "Home 1": "Home 1", - "Home 2": "Home 2", - "Home 3": "Home 3", - "Home UPS": "Home UPS" - }, - "Acknowledgement": { - "description": "Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přijímám plnou odpovědnost za změny a jakýkoli jejich očekávaný či neočekávaný dopad." + "import": "📥 Import z YAML", + "quick": "⚡ Rychlé nastavení", + "wizard": "🧙‍♂️ Průvodce nastavením (doporučeno)" } }, - "set_grid_delivery": { + "box_mode": { "options": { - "Vypnuto / Off": "Vypnuto / Off", - "Zapnuto / On": "Zapnuto / On", - "S omezením / Limited": "S omezením / Limited" - }, - "Acknowledgement": { - "description": "Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přijímám plnou odpovědnost za změny a jakýkoli jejich očekávaný či neočekávaný dopad." - }, - "Upozornění": { - "description": "Před použitím této funkce se seznamte s omezeními dostupnými v aplikaci OIG Power / ČEZ Battery Box." + "home_1": "Home 1", + "home_2": "Home 2", + "home_3": "Home 3", + "home_ups": "Home UPS" } }, - "set_boiler_mode": { + "boiler_mode": { "options": { - "CBB": "CBB", - "Manual": "Manuální" - }, - "Acknowledgement": { - "description": "Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přijímám plnou odpovědnost za změny a jakýkoli jejich očekávaný či neočekávaný dopad." + "cbb": "CBB", + "manual": "Manual" } }, - "set_formating_mode": { + "battery_charge_mode": { "options": { - "Nenabíjet": "Nenabíjet", - "Nabíjet": "Nabíjet" - }, - "Limit": { - "min": "minimální", - "max": "maximální", - "unit_of_measurement": "jednotka měření" - }, - "Acknowledgement": { - "description": "Beru na vědomí, že volání této služby povede ke změně parametrů živého systému. Přijímám plnou odpovědnost za změny a jakýkoli jejich očekávaný či neočekávaný dopad." + "no_charge": "Nenabíjet", + "charge": "Nabíjet" + } + }, + "grid_delivery_mode": { + "options": { + "off": "Vypnuto / Off", + "on": "Zapnuto / On", + "limited": "S omezením / Limited" } } }, - "options": { - "step": { - "init": { - "title": "Konfigurace", - "description": "Nastavení integrace OIG Cloud", - "data": { - "update_interval": "Interval aktualizace (vteřiny)", - "no_telemetry": "Zakázat telemetrii (odhlášení ze sběru dat)", - "log_level": "Úroveň protokolování" + "services": { + "apply_boiler_plan": { + "description": "Aplikuje naplánovaný ohřev bojleru. Vytvoří automatizace pro zapínání topného tělesa v naplánovaných časech.", + "name": "Aplikovat plán ohřevu" + }, + "cancel_boiler_plan": { + "description": "Zruší aktivní plán ohřevu bojleru a odstraní naplánované automatizace.", + "name": "Zrušit plán ohřevu" + }, + "plan_boiler_heating": { + "description": "Vytvoří plán optimálního ohřevu bojleru na základě spotových cen. Najde nejlevnější časové sloty před deadlinem.", + "fields": { + "deadline": { + "description": "Přepsání defaultního deadline času (formát HH:MM, např. 20:00)", + "name": "Přepsat deadline" + }, + "force": { + "description": "Vynutí přepočet plánu i když už existuje platný plán", + "name": "Vynutit přepočet" } - } + }, + "name": "Naplánovat ohřev bojleru" } } } diff --git a/custom_components/oig_cloud/translations/en.json b/custom_components/oig_cloud/translations/en.json index b87b31b7..55bae148 100644 --- a/custom_components/oig_cloud/translations/en.json +++ b/custom_components/oig_cloud/translations/en.json @@ -1,85 +1,925 @@ { "config": { "abort": { - "already_configured": "Device is already configured" + "already_configured": "OIG Cloud integration is already configured", + "not_implemented": "This feature is not yet implemented" }, "error": { - "cannot_connect": "Failed to connect", - "invalid_auth": "Invalid authentication", + "api_key_required_for_frequent_updates": "⚠️ For updates every 4 hours or every hour, API key from Forecast.Solar is required", + "solcast_api_key_required": "⚠️ Solcast API key is required", + "cannot_connect": "Failed to connect to OIG Cloud API", + "dashboard_requires_all": "⚠️ Dashboard requires all other modules (Statistics, Solar forecast, Battery prediction, Price sensors, Spot prices, Extended sensors)", + "endpoint_must_start_with_slash": "⚠️ Endpoint must start with slash (/)", + "extended_interval_too_long": "⚠️ Extended interval is too long (maximum 3600 seconds = 60 minutes)", + "extended_interval_too_short": "⚠️ Extended interval is too short (minimum 300 seconds = 5 minutes)", + "interval_too_long": "⚠️ Standard interval is too long (maximum 300 seconds = 5 minutes)", + "interval_too_short": "⚠️ Standard interval is too short (minimum 30 seconds)", + "invalid_auth": "Invalid credentials", + "invalid_azimuth": "Invalid panel orientation (must be from 0° to 360°)", + "invalid_coordinates": "Invalid GPS coordinates", + "invalid_declination": "Invalid panel tilt (must be from 0° to 90°)", + "invalid_distribution_fee": "⚠️ Invalid distribution fee (0-10 CZK/kWh)", + "invalid_fee": "⚠️ Invalid fee", + "invalid_hour_format": "⚠️ Invalid hour format. Use numbers separated by comma (e.g.: 6,14,18)", + "invalid_hour_range": "⚠️ Hours must be in range 0-23", + "invalid_interval": "Interval must be within allowed range", + "invalid_kwp": "Invalid kWp power (must be from 0.1 to 15 kWp)", + "invalid_latitude": "Invalid GPS latitude (must be from -90 to 90°)", + "invalid_longitude": "Invalid GPS longitude (must be from -180 to 180°)", + "invalid_percentage": "⚠️ Invalid percentage (0.1-100%)", + "invalid_port": "⚠️ Invalid port (1-65535)", + "invalid_price": "⚠️ Invalid price (1-50 CZK/kWh)", + "invalid_string1_params": "Invalid parameters for String 1", + "invalid_string2_params": "Invalid parameters for String 2", + "invalid_vat": "⚠️ Invalid VAT rate (0-30%)", + "live_data_not_confirmed": "You must confirm that you have 'Live Data' enabled in the app", + "live_data_not_enabled": "'Live Data' is not enabled in OIG Cloud app. Enable it in app settings!", + "local_proxy_missing": "⚠️ Local mode requires OIG Local proxy: sensor.oig_local_oig_proxy_proxy_status_last_data and sensor.oig_local_oig_proxy_proxy_status_box_device_id", + "min_must_be_less_than_target": "⚠️ Minimum capacity must be less than target capacity", + "no_strings_enabled": "⚠️ You must enable at least one solar panel string (String 1 or String 2)", + "overlapping_tariffs": "⚠️ HT and LT tariffs overlap. Each hour can be only HT or LT.", + "required": "This field is required", + "required_for_battery": "⚠️ Battery prediction requires extended sensors to be enabled", + "requires_solar_forecast": "⚠️ Battery prediction requires solar forecast to be enabled", + "solar_forecast_invalid_api_key": "Invalid API key for Forecast.Solar", + "solar_forecast_no_strings": "You must enable at least one string", + "tariff_gaps": "⚠️ Tariffs don't cover the whole day (0-23 hours). Check HT and LT starts.", "unknown": "Unexpected error" }, "step": { + "import_config": { + "data": { + "config_file": "File path" + }, + "title": "Import Configuration" + }, + "init": { + "description": "Set basic parameters and enable features.", + "title": "Basic OIG Cloud Configuration" + }, + "solar_basic": { + "description": "GPS coordinates and string selection for solar forecast.", + "title": "Solar Forecast - Basic Settings" + }, + "solar_string1": { + "description": "Panel parameters for String 1.", + "title": "Solar Forecast - String 1" + }, + "solar_string2": { + "description": "Panel parameters for String 2.", + "title": "Solar Forecast - String 2" + }, + "statistics": { + "description": "Setting parameters for statistical sensors and predictions.", + "title": "Statistics Configuration" + }, "user": { - "title": "Login to OIG", - "description": "Enter your username/email and password to log in to OIG", "data": { - "no_telemetry": "Disable telemetry collection (features under active development may be limited)", + "setup_type": "Setup Method" + }, + "data_description": { + "setup_type": "🧙‍♂️ Wizard = step-by-step guided setup\n⚡ Quick = login only, everything else set to defaults" + }, + "description": "{info}", + "title": "OIG Cloud - Setup Type Selection" + }, + "wizard_battery": { + "data": { + "auto_mode_switch_enabled": "Automatic mode switching based on the plan", + "balancing_economic_threshold": "Economic balancing price (CZK/kWh)", + "balancing_enabled": "🔄 Enable battery cell balancing", + "balancing_hold_hours": "Hold at 100% duration (hours)", + "balancing_interval_days": "Balancing interval (days)", + "balancing_opportunistic_threshold": "Opportunistic balancing price (CZK/kWh)", + "cheap_window_percentile": "Cheap window percentile (%)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "home_charge_rate": "Charging power from grid (kW)", + "min_capacity_percent": "Minimum battery capacity (%)", + "disable_planning_min_guard": "Disable planning minimum guard", + "max_ups_price_czk": "Maximum UPS charging price (CZK/kWh)", + "target_capacity_percent": "Target battery capacity (%)" + }, + "data_description": { + "auto_mode_switch_enabled": "When enabled the integration calls the set_box_mode service automatically according to the computed schedule (same as Config Flow).", + "balancing_economic_threshold": "On days 5-7 after last balance, use this price threshold (typically 2.5 CZK/kWh)", + "balancing_enabled": "Automatically balances battery cells by charging to 100% and holding for configured hours", + "balancing_hold_hours": "How long to hold battery at 100% for cell balancing (1-12 hours, recommended 3 hours)", + "balancing_interval_days": "Maximum days between balancing cycles (3-30 days, recommended 7 days)", + "balancing_opportunistic_threshold": "If spot price drops below this, balance immediately regardless of days (typically 1.1 CZK/kWh)", + "cheap_window_percentile": "Used by balancing to select the \"cheap\" part of the price curve.", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "home_charge_rate": "Maximum charging power from grid (typically 2-3 kW)", + "min_capacity_percent": "If capacity drops below this value, charging starts", + "disable_planning_min_guard": "Allows the planner to go below the planning minimum (more aggressive optimization)", + "max_ups_price_czk": "Hard safety limit: never charge from grid if price is higher than this value", + "target_capacity_percent": "Optimal capacity to charge to" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nIntelligently optimizes home battery charging according to spot electricity prices and solar production forecast. Automatically charges during cheapest hours.\n\n🔧 **What is needed:**\n• ☀️ Solar forecast (must be enabled)\n• ⚡ Extended sensors (must be enabled)\n• 📈 Spot electricity prices\n\n⚠️ **Experimental feature** - may require fine-tuning of parameters\n\n⚠️ **This module is required for:**\n• 📊 Dashboard (web interface)", + "title": "🔋 Battery Prediction Configuration" + }, + "wizard_boiler": { + "data": { + "boiler_alt_cost_kwh": "Alternative heating cost (CZK/kWh)", + "boiler_alt_heater_switch_entity": "Alternative heat source switch - optional", + "boiler_cold_inlet_temp_c": "Cold water inlet temperature (°C)", + "boiler_deadline_time": "Deadline (time to have heated by)", + "boiler_has_alternative_heating": "Does boiler have alternative heat source?", + "boiler_heater_power_kw_entity": "Heating element power sensor (kW)", + "boiler_heater_switch_entity": "Heating element switch", + "boiler_plan_slot_minutes": "Time slot duration (minutes)", + "boiler_planning_horizon_hours": "Planning horizon (hours)", + "boiler_spot_price_sensor": "Spot price sensor", + "boiler_stratification_mode": "Stratification mode", + "boiler_target_temp_c": "Target water temperature (°C)", + "boiler_temp_sensor_bottom": "Temperature sensor (bottom) - optional", + "boiler_temp_sensor_top": "Temperature sensor (top)", + "boiler_volume_l": "Boiler volume (liters)", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "boiler_alt_cost_kwh": "Cost per kWh from alternative source (e.g., 1.5 CZK/kWh for boiler). Electric heating will be used only when spot price is cheaper.", + "boiler_alt_heater_switch_entity": "Entity ID of switch for alternative source (e.g., boiler, heat pump). Leave empty if you don't have one.", + "boiler_cold_inlet_temp_c": "Temperature of incoming cold water from mains (typically 10-15°C)", + "boiler_deadline_time": "Time by which you want boiler heated (format HH:MM, e.g., 20:00). Planning will always find cheapest slots BEFORE this time.", + "boiler_has_alternative_heating": "Check if you have alternative heating method (boiler, HP) and want to use it when electricity is expensive", + "boiler_heater_power_kw_entity": "Entity ID of sensor with current power (e.g., sensor.boiler_power). If you don't have one, create a helper with constant value (e.g., 2.0 for 2kW)", + "boiler_heater_switch_entity": "Entity ID of switch for turning on main heating element (e.g., switch.boiler_heater). This will be controlled by the integration.", + "boiler_plan_slot_minutes": "Size of time blocks for planning (15-60 minutes). Smaller = more precise, larger = simpler. Recommended 60 minutes.", + "boiler_planning_horizon_hours": "How far ahead to plan (typically 24-48 hours). More = better optimization but longer calculation.", + "boiler_spot_price_sensor": "Entity ID of spot price sensor (e.g., sensor.oig_2206237016_spot_price_current_15min)", + "boiler_stratification_mode": "simple_avg = average temperature | two_zone = stratified model (more accurate, needs 2 sensors)", + "boiler_target_temp_c": "Desired water temperature (typically 55-65°C)", + "boiler_temp_sensor_bottom": "Entity ID of temperature sensor at bottom - for more accurate calculation with stratified boilers", + "boiler_temp_sensor_top": "Entity ID of temperature sensor at top of boiler (e.g., sensor.boiler_temperature_top)", + "boiler_volume_l": "Total volume of hot water tank (e.g., 120 liters)", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nIntelligently plans boiler heating based on spot electricity prices. Selects the cheapest time slots for heating water before your deadline.\n\n🔧 **What is needed:**\n• 💰 Spot prices (must be enabled)\n• 🌡️ Boiler temperature sensors (top and optionally bottom)\n• ⚡ Heating element power\n\n💡 **How it works:**\n1. Calculates how much energy you need to heat the water\n2. Finds the cheapest time slots before deadline (e.g., 20:00)\n3. Creates a plan of when to turn on the boiler\n4. Controls a switch for turning heating on/off\n\n⚠️ **Note:** This module only controls WHEN to heat. Physical switching of the boiler must be handled by automation or smart switch.", + "title": "🔥 Boiler Configuration" + }, + "wizard_credentials": { + "data": { + "go_back": "⬅️ I want to go back (check + click Submit)", + "live_data_enabled": "✅ I confirm that I have 'Live Data' enabled in the app", "password": "Password", - "username": "Username or email" + "username": "Email or username" + }, + "data_description": { + "go_back": "Check this box and press 'Submit' - you will return to the main screen", + "live_data_enabled": "Without live data enabled, the integration will not work!" + }, + "description": "{step}\n{progress}\n\nEnter your login credentials for the OIG Cloud application.\n\n⚠️ **IMPORTANT:** You must have 'Live Data' enabled in the OIG Cloud mobile app settings!", + "title": "🔐 Login Credentials" + }, + "wizard_extended": { + "data": { + "enable_extended_battery_sensors": "🔋 Extended battery sensors", + "enable_extended_fve_sensors": "☀️ Extended PV sensors", + "enable_extended_grid_sensors": "⚡ Extended grid sensors", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "enable_extended_battery_sensors": "Cell voltages, temperatures, charging/discharging currents", + "enable_extended_fve_sensors": "String voltages, currents, temperatures, power of individual strings", + "enable_extended_grid_sensors": "Phase voltages L1/L2/L3, frequency, power quality", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **Extended Sensors**\n\nSelect which groups of extended sensors you want to activate.\n\n💡 **Available groups:**\n• 🔋 Battery - cell voltages, temperatures, currents\n• ☀️ PV - string voltages, currents, temperatures\n• ⚡ Grid - phase voltages, frequency, quality\n\n⚠️ **Note:** More sensors = higher API load", + "title": "⚡ Extended Sensors" + }, + "wizard_intervals": { + "data": { + "data_source_mode": "Telemetry data source", + "enable_cloud_notifications": "Cloud notifications", + "extended_scan_interval": "Extended data (seconds)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "local_event_debounce_ms": "Local event debounce (ms)", + "local_proxy_stale_minutes": "Fallback to cloud after (minutes)", + "notifications_scan_interval": "Notifications interval (seconds)", + "standard_scan_interval": "Basic data (seconds)" + }, + "data_description": { + "data_source_mode": "Cloud only = always read from cloud; Local only = read mapped local entities (if proxy is stale > this limit, temporarily fall back to cloud until it recovers)", + "enable_cloud_notifications": "Enable fetching cloud notifications (typically enough once every few minutes)", + "extended_scan_interval": "How often to load cell voltages, temperatures, currents and other detailed data (minimum 300 seconds, recommended 300-600 seconds)", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "local_event_debounce_ms": "Debounce for event-driven refresh from local entities (lower = faster response, higher = fewer updates)", + "local_proxy_stale_minutes": "Switch back to cloud after this many minutes without local data; switch back to local automatically when proxy resumes", + "notifications_scan_interval": "How often to poll cloud notifications (recommended 300-900 seconds)", + "standard_scan_interval": "How often to load consumption, production, battery status and other basic data (minimum 30 seconds, recommended 30-60 seconds)" + }, + "description": "{step}\n{progress}\n\nSet how often data should be loaded from OIG Cloud.\n\n💡 **Tip:** Shorter interval = more current data, but higher load on API servers.", + "title": "⏱️ Data Loading Intervals" + }, + "wizard_modules": { + "data": { + "enable_auto": "🚗 Car - vehicle charging planning", + "enable_battery_prediction": "🔋 Intelligent battery prediction and optimization", + "enable_boiler": "🔥 Boiler - water heating optimization", + "enable_chmu_warnings": "🌦️ CHMU Weather Warnings (meteorological alerts)", + "enable_dashboard": "📊 Web dashboard with charts", + "enable_extended_sensors": "⚡ Extended sensors (voltages, currents, temperatures)", + "enable_pricing": "💰 Price sensors and spot prices from OTE", + "enable_solar_forecast": "☀️ Solar forecast for PV production", + "enable_statistics": "📊 Statistics and consumption analysis", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "enable_auto": "Electric vehicle charging optimization (coming soon)", + "enable_battery_prediction": "Experimental - smart charging based on prices", + "enable_boiler": "Intelligent boiler heating planning based on spot prices", + "enable_chmu_warnings": "Weather warnings for your location (CAP XML)", + "enable_dashboard": "Web interface with charts accessible in HA", + "enable_extended_sensors": "Recommended - detailed monitoring", + "enable_pricing": "Recommended - OTE spot prices + cost calculation", + "enable_solar_forecast": "Requires API key from Forecast.Solar", + "enable_statistics": "Recommended - consumption median, predictions", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\nSelect which features you want to use. You can configure each module in detail later.", + "title": "📦 Module and Feature Selection" + }, + "wizard_pricing_distribution": { + "data": { + "distribution_fee_nt_kwh": "Distribution fee LT (CZK/kWh)", + "distribution_fee_vt_kwh": "Distribution fee HT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixed purchase price LT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixed purchase price HT (CZK/kWh)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "tariff_count": "Number of tariffs", + "tariff_nt_start_weekday": "LT start weekday (hour1,hour2)", + "tariff_nt_start_weekend": "LT start weekend (hour1,hour2)", + "tariff_vt_start_weekday": "HT start weekday (hour)", + "tariff_vt_start_weekend": "HT start weekend (hour)", + "tariff_weekend_same_as_weekday": "Weekend same as weekdays", + "vat_rate": "VAT (%)" + }, + "data_description": { + "distribution_fee_nt_kwh": "Distribution fee LT (low tariff). E.g., 0.91 CZK/kWh", + "distribution_fee_vt_kwh": "Distribution fee HT (high tariff). E.g., 1.42 CZK/kWh", + "fixed_price_nt_kwh": "Fixed purchase price LT without VAT and distribution.", + "fixed_price_vt_kwh": "Fixed purchase price HT without VAT and distribution.", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "tariff_count": "💡 Click 'Submit' to show parameters according to number of tariffs", + "tariff_nt_start_weekday": "LT start on weekday. Format: hour1,hour2 (e.g., '22,2' = 22:00 evening and 02:00 morning)", + "tariff_nt_start_weekend": "LT start on weekend. Format: hour1,hour2 (e.g., '0' = LT all day)", + "tariff_vt_start_weekday": "HT start on weekday. Format: hour (e.g., '6' = 06:00)", + "tariff_vt_start_weekend": "HT start on weekend. Format: hour (leave empty for LT all day)", + "tariff_weekend_same_as_weekday": "Use the same HT/LT times on weekends", + "vat_rate": "VAT rate in percent. Standard 21%" + }, + "description": "{step}\n{progress}\n\n📖 **Step 3: Distribution and VAT**\n\nSet distribution fees and VAT.\n\n💡 **Information:**\n• Distribution is **independent** of purchase/sale type (FIXED/SPOT)\n• If you have 2 tariffs (HT/LT), check 'Two tariffs'\n• HT hours are automatically set according to common times\n\n⚙️ After selecting number of tariffs, click 'Submit' to show parameters.", + "title": "⚡ Distribution and VAT Configuration (3/3)" + }, + "wizard_pricing_export": { + "data": { + "export_fee_percent": "Export fee (%)", + "export_fixed_fee_czk": "Fixed export fee (CZK/kWh)", + "export_fixed_price_kwh": "Fixed export price (CZK/kWh)", + "export_pricing_scenario": "Export pricing scenario", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "export_fee_percent": "Fee in %. E.g., 15% = you get 85% of spot price (spot × 0.85)", + "export_fixed_fee_czk": "Fixed fee subtracted from spot price. E.g., 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixed export price regardless of spot. E.g., 2.50 CZK/kWh", + "export_pricing_scenario": "💡 Click 'Submit' to show parameters for selected scenario", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **Step 2: Electricity Sale Price**\n\nSelect how you want to calculate the price for selling surplus to the grid.\n\n💡 **Recommended scenarios:**\n• 💰 SPOT - percentage - Advantageous at high spot prices\n• 💵 SPOT - fixed fee - More stable export\n• 🔒 FIXED price - Stable export price all year\n\n⚙️ After selecting scenario, click 'Submit' to show parameters.", + "title": "💸 Export Price Configuration (2/3)" + }, + "wizard_pricing_import": { + "data": { + "fixed_price_kwh": "Fixed purchase price (CZK/kWh)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "import_pricing_scenario": "Import pricing scenario", + "spot_fixed_fee_kwh": "Fixed fee (CZK/kWh)", + "spot_negative_fee_percent": "Surcharge for negative spot price (%)", + "spot_positive_fee_percent": "Surcharge for positive spot price (%)" + }, + "data_description": { + "fixed_price_kwh": "Fixed purchase price. ⚠️ ENTER WITHOUT VAT AND DISTRIBUTION!", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "import_pricing_scenario": "💡 Click 'Submit' to show parameters for selected scenario", + "spot_fixed_fee_kwh": "Constant fee added to spot price. E.g., 0.50 CZK/kWh", + "spot_negative_fee_percent": "For negative spot price: price × (1 - percent/100). E.g., 9% = spot × 0.91", + "spot_positive_fee_percent": "For positive spot price: price × (1 + percent/100). E.g., 15% = spot × 1.15" + }, + "description": "{step}\n{progress}\n\n📖 **Step 1: Electricity Purchase Price**\n\nSelect how you want to calculate the price for purchasing electricity from the grid.\n\n💡 **Recommended scenarios:**\n• 💰 SPOT + percentage - Variable price according to exchange\n• 💵 SPOT + fixed fee - More stable than percentage\n• 🔒 FIXED price - Predictable fixed price\n\n⚙️ After selecting scenario, click 'Submit' to show parameters.", + "title": "💰 Import Price Configuration (1/3)" + }, + "wizard_solar": { + "data": { + "go_back": "⬅️ I want to go back (check + click Submit)", + "solar_forecast_provider": "Forecast provider", + "solar_forecast_api_key": "Forecast.Solar API key", + "solcast_api_key": "Solcast API key", + "solar_forecast_latitude": "Installation GPS latitude", + "solar_forecast_longitude": "Installation GPS longitude", + "solar_forecast_mode": "Forecast update mode", + "solar_forecast_string1_azimuth": "String 1 - Azimuth / Orientation (°)", + "solar_forecast_string1_declination": "String 1 - Panel tilt (°)", + "solar_forecast_string1_enabled": "✅ Enable String 1", + "solar_forecast_string1_kwp": "String 1 - Installed power (kWp)", + "solar_forecast_string2_azimuth": "String 2 - Azimuth / Orientation (°)", + "solar_forecast_string2_declination": "String 2 - Panel tilt (°)", + "solar_forecast_string2_enabled": "✅ Enable String 2", + "solar_forecast_string2_kwp": "String 2 - Installed power (kWp)" + }, + "data_description": { + "go_back": "Check this box and press 'Submit' - you will go back one step", + "solar_forecast_provider": "Select the solar forecast data provider", + "solar_forecast_api_key": "Optional for FREE modes. Required for frequent updates (4h, 1h)", + "solcast_api_key": "Required for Solcast requests", + "solar_forecast_latitude": "Range: -90° to 90° (Central Europe approx 48-51°)", + "solar_forecast_longitude": "Range: -180° to 180° (Central Europe approx 12-19°)", + "solar_forecast_mode": "🎯 Optimized = 3x daily at 6:00, 12:00, 16:00 (RECOMMENDED)\n🌅 Daily = 1x daily at 6:00\n🕐 4h/⚡1h = requires API key", + "solar_forecast_string1_azimuth": "0° = SOUTH, 90° = WEST, 180° = NORTH, 270° = EAST (range 0-360°)", + "solar_forecast_string1_declination": "0° = horizontal, 90° = vertical (roofs usually 30-45°). Range: 0-90°", + "solar_forecast_string1_enabled": "💡 Click 'Submit' to show parameters. If you have panels on only one orientation, String 1 is enough", + "solar_forecast_string1_kwp": "Total String 1 power in kWp (e.g., 5.0 kWp)", + "solar_forecast_string2_azimuth": "0° = SOUTH, 90° = WEST, 180° = NORTH, 270° = EAST (range 0-360°)", + "solar_forecast_string2_declination": "0° = horizontal, 90° = vertical (roofs usually 30-45°). Range: 0-90°", + "solar_forecast_string2_enabled": "💡 Click 'Submit' to show parameters. Enable if you have panels on two different orientations (e.g., east + west)", + "solar_forecast_string2_kwp": "Total String 2 power in kWp (e.g., 3.5 kWp)" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nProvides forecast of electricity production from photovoltaic panels for the next 24-72 hours. Uses Forecast.Solar service with accurate meteorological data.\n\n🔧 **What is needed:**\n• Free or paid API key from https://forecast.solar\n• GPS coordinates of PV installation\n• Panel parameters (tilt, azimuth, power)\n\n⚠️ **This module is required for:**\n• 🔋 Battery prediction (intelligent charging)\n\n🔑 Get API key by registering at https://forecast.solar", + "title": "☀️ Solar Forecast Configuration" + }, + "wizard_summary": { + "data": { + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📋 **Configuration Summary**\n\n{summary}\n\n---\n\n✅ **Everything is ready!**\n\nClick 'Submit' to complete setup and activate the integration.", + "title": "✅ Summary and Completion" + }, + "wizard_welcome": { + "description": "{info}", + "title": "🎯 Welcome to OIG Cloud Setup Wizard" + }, + "wizard_welcome_reconfigure": { + "description": "🔧 **OIG Cloud Configuration Change**\n\nThis wizard will guide you through updating your integration configuration.\n\n**What you can change:**\n• 📦 Enable/disable modules and features\n• ⏱️ Adjust data update intervals\n• ☀️ Change solar forecast settings\n• 🔋 Adjust battery prediction parameters\n• 💰 Change pricing settings\n• ⚡ Adjust extended sensors\n\n**Note:** Login credentials cannot be changed here - you must delete and re-add the integration.\n\nClick \"Submit\" to continue with the setup.", + "title": "🔧 OIG Cloud Configuration Change" + } + } + }, + "entity": { + "sensor": { + "data_source": { + "name": "Data source", + "state": { + "cloud": "Cloud", + "local": "Local" + }, + "state_attributes": { + "configured_mode": { + "name": "Configured mode" + }, + "effective_mode": { + "name": "Effective mode" + }, + "last_local_data": { + "name": "Last local data" + }, + "local_available": { + "name": "Local available" + }, + "reason": { + "name": "Reason" + } } } } }, + "options": { + "abort": { + "reconfigure_successful": "✅ Settings saved and integration reloaded." + }, + "step": { + "basic_config": { + "data": { + "password": "Password", + "standard_scan_interval": "Basic data update interval (seconds)", + "username": "Username / Email" + }, + "data_description": { + "password": "Password for OIG Cloud (leave empty to keep unchanged)", + "standard_scan_interval": "How often to fetch basic data from OIG Cloud (recommended 20-30s)", + "username": "Email or username for OIG Cloud login" + }, + "description": "Configuration of basic integration parameters", + "title": "⚙️ Basic Settings" + }, + "battery_prediction": { + "data": { + "auto_mode_switch_enabled": "Automatic mode switching based on the plan", + "cheap_window_percentile": "Cheap window percentile (%)", + "enable_battery_prediction": "Enable battery prediction", + "home_charge_rate": "Grid charging power (kW)", + "max_ups_price_czk": "Maximum UPS charging price (CZK/kWh)", + "min_capacity_percent": "Minimum battery capacity (%)", + "disable_planning_min_guard": "Disable planning minimum guard", + "total_hours": "Prediction hours" + }, + "data_description": { + "auto_mode_switch_enabled": "When enabled the integration calls the set_box_mode service automatically according to the computed schedule (same as Config Flow).", + "cheap_window_percentile": "Used by balancing to select the \"cheap\" part of the price curve.", + "enable_battery_prediction": "Intelligent charging planning based on spot prices and consumption", + "home_charge_rate": "Maximum charging power of your system from grid", + "max_ups_price_czk": "Hard safety limit: never charge from grid if price is higher than this value", + "min_capacity_percent": "Below this level, grid charging starts (recommended 15-25%)", + "disable_planning_min_guard": "Allows the planner to go below the planning minimum (more aggressive optimization)", + "total_hours": "How far into future to plan charging (recommended 24-48h)" + }, + "description": "Currently {current_state}. Min. capacity: {min_capacity}%, Charging power: {charge_rate}W", + "title": "Battery Prediction" + }, + "extended_sensors": { + "data": { + "disable_extended_stats_api": "🚫 Disable extended stats API calls", + "enable_extended_battery_sensors": "🔋 Extended battery data", + "enable_extended_fve_sensors": "☀️ Extended PV data", + "enable_extended_grid_sensors": "⚡ Extended grid data", + "enable_extended_sensors": "Enable extended sensors", + "extended_scan_interval": "⏱️ Extended sensors update interval (seconds)" + }, + "data_description": { + "disable_extended_stats_api": "If you have HTTP 500 errors, disable extended stats API", + "enable_extended_battery_sensors": "Cell voltages, currents, temperature and detailed battery status", + "enable_extended_fve_sensors": "Power and currents of individual PV strings", + "enable_extended_grid_sensors": "Voltages L1/L2/L3, grid frequency, power per phase", + "enable_extended_sensors": "Enable extended sensors for detailed system monitoring", + "extended_scan_interval": "How often to fetch extended data (higher value = less server load)" + }, + "description": "Currently {current_state}", + "title": "📊 Extended Sensors" + }, + "menu": { + "description": "Select what you want to configure", + "menu_options": { + "basic_config": "⚙️ Basic Settings", + "battery_prediction": "🔋 Battery Prediction", + "extended_sensors": "📊 Extended Sensors", + "pricing_config": "💰 Pricing Sensors", + "solar_forecast": "☀️ Solar Forecast", + "statistics_config": "📈 Statistics & Analytics" + }, + "title": "OIG Cloud Configuration" + }, + "pricing_config": { + "data": { + "distribution_fee_kwh": "Distribution fee (CZK/kWh)", + "enable_spot_prices": "Enable spot electricity prices from OTE", + "spot_fixed_fee_mwh": "Fixed fee (CZK/MWh)", + "spot_negative_fee_percent": "Fee for negative prices (%)", + "spot_positive_fee_percent": "Fee for positive prices (%)", + "spot_pricing_model": "Price calculation model" + }, + "data_description": { + "distribution_fee_kwh": "Distribution fee added to final price (usually 1-2 CZK/kWh)", + "enable_spot_prices": "Download and process spot electricity prices from OTE daily at 13:00", + "spot_fixed_fee_mwh": "Constant fee in CZK per MWh added to spot price (automatically converted to kWh)", + "spot_negative_fee_percent": "For negative spot price: price × (1 - percent/100). E.g. 9% = price × 0.91", + "spot_positive_fee_percent": "For positive spot price: price × (1 + percent/100). E.g. 15% = price × 1.15", + "spot_pricing_model": "How commercial price is calculated from raw spot price" + }, + "description": "Configuration of spot prices and final price calculation\n\nCurrent state: {current_state}\n{info}", + "title": "Spot Electricity Prices" + }, + "solar_forecast": { + "data": { + "enable_solar_forecast": "Enable solar forecast", + "solar_forecast_api_key": "Forecast.Solar API key (optional)", + "solar_forecast_latitude": "Latitude", + "solar_forecast_longitude": "Longitude", + "solar_forecast_mode": "Update mode", + "solar_forecast_string1_azimuth": "String 1 - Azimuth (°)", + "solar_forecast_string1_declination": "String 1 - Tilt (°)", + "solar_forecast_string1_enabled": "Enable String 1", + "solar_forecast_string1_kwp": "String 1 - Power (kWp)", + "solar_forecast_string2_azimuth": "String 2 - Azimuth (°)", + "solar_forecast_string2_declination": "String 2 - Tilt (°)", + "solar_forecast_string2_enabled": "Enable String 2", + "solar_forecast_string2_kwp": "String 2 - Power (kWp)" + }, + "data_description": { + "enable_solar_forecast": "Enable solar forecast for battery optimization and production prediction", + "solar_forecast_api_key": "API key for forecast.solar (optional, increases limits)", + "solar_forecast_latitude": "GPS latitude of your PV system (-90 to 90)", + "solar_forecast_longitude": "GPS longitude of your PV system (-180 to 180)", + "solar_forecast_mode": "How often to update solar forecast", + "solar_forecast_string1_azimuth": "Orientation of 1st string panels (0°=north, 90°=east, 180°=south, 270°=west)", + "solar_forecast_string1_declination": "Tilt of 1st string panels from horizontal (0-90°)", + "solar_forecast_string1_enabled": "Enable first panel string (at least one required)", + "solar_forecast_string1_kwp": "Installed power of 1st string in kWp", + "solar_forecast_string2_azimuth": "Orientation of 2nd string panels (0°=north, 90°=east, 180°=south, 270°=west)", + "solar_forecast_string2_declination": "Tilt of 2nd string panels from horizontal (0-90°)", + "solar_forecast_string2_enabled": "Enable second panel string (optional)", + "solar_forecast_string2_kwp": "Installed power of 2nd string in kWp" + }, + "description": "Currently {current_state}. Mode: {current_mode}", + "title": "☀️ Solar Forecast" + }, + "statistics_config": { + "data": { + "enable_statistics": "Enable statistical sensors", + "reconfigure_statistics": "Reconfigure statistics (deletes old data)" + }, + "data_description": { + "enable_statistics": "Consumption median by time, battery prediction, consumption analysis", + "reconfigure_statistics": "⚠️ Deletes all stored historical data and starts over" + }, + "description": "Currently {current_state}", + "title": "Statistics & Analytics" + }, + "wizard_battery": { + "data": { + "balancing_economic_threshold": "Economic balancing price (CZK/kWh)", + "balancing_enabled": "🔄 Enable battery cell balancing", + "balancing_hold_hours": "Hold at 100% duration (hours)", + "balancing_interval_days": "Balancing interval (days)", + "balancing_opportunistic_threshold": "Opportunistic balancing price (CZK/kWh)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "home_charge_rate": "Charging power from grid (kW)", + "max_ups_price_czk": "Maximum UPS charging price (CZK/kWh)", + "min_capacity_percent": "Minimum battery capacity (%)", + "disable_planning_min_guard": "Disable planning minimum guard", + "target_capacity_percent": "Target battery capacity (%)" + }, + "data_description": { + "balancing_economic_threshold": "On days 5-7 after last balance, use this price threshold (typically 2.5 CZK/kWh)", + "balancing_enabled": "Automatically balances battery cells by charging to 100% and holding for configured hours", + "balancing_hold_hours": "How long to hold battery at 100% for cell balancing (1-12 hours, recommended 3 hours)", + "balancing_interval_days": "Maximum days between balancing cycles (3-30 days, recommended 7 days)", + "balancing_opportunistic_threshold": "If spot price drops below this, balance immediately regardless of days (typically 1.1 CZK/kWh)", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "home_charge_rate": "Maximum charging power from grid (typically 2-3 kW)", + "max_ups_price_czk": "Hard safety limit: never charge from grid if price is higher than this value", + "min_capacity_percent": "If capacity drops below this value, charging starts", + "disable_planning_min_guard": "Allows the planner to go below the planning minimum (more aggressive optimization)", + "target_capacity_percent": "Optimal capacity to charge to" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nIntelligently optimizes home battery charging according to spot electricity prices and solar production forecast. Automatically charges during cheapest hours.\n\n🔧 **What is needed:**\n• ☀️ Solar forecast (must be enabled)\n• ⚡ Extended sensors (must be enabled)\n• 📈 Spot electricity prices\n\n⚠️ **Experimental feature** - may require fine-tuning of parameters\n\n⚠️ **This module is required for:**\n• 📊 Dashboard (web interface)", + "title": "🔋 Battery Prediction Configuration" + }, + "wizard_boiler": { + "data": { + "boiler_alt_cost_kwh": "Alternative heating cost (CZK/kWh)", + "boiler_alt_heater_switch_entity": "Alternative heater switch - optional", + "boiler_cold_inlet_temp_c": "Cold water temperature (°C)", + "boiler_deadline_time": "Deadline (time to have heated by)", + "boiler_has_alternative_heating": "Does boiler have alternative heat source?", + "boiler_heater_power_kw_entity": "Heater power sensor (kW)", + "boiler_heater_switch_entity": "Heater switch", + "boiler_plan_slot_minutes": "Time slot length (minutes)", + "boiler_planning_horizon_hours": "Planning horizon (hours)", + "boiler_spot_price_sensor": "Spot price sensor", + "boiler_stratification_mode": "Stratification mode", + "boiler_target_temp_c": "Target water temperature (°C)", + "boiler_temp_sensor_bottom": "Temperature sensor (bottom) - optional", + "boiler_temp_sensor_top": "Temperature sensor (top)", + "boiler_volume_l": "Boiler volume (liters)", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "boiler_alt_cost_kwh": "How much 1 kWh from alternative source costs (e.g., 1.5 CZK/kWh for boiler). Electric heating will be used only when spot price is cheaper.", + "boiler_alt_heater_switch_entity": "Entity ID of switch for alternative source (e.g., boiler, heat pump). Leave empty if you don't have one.", + "boiler_cold_inlet_temp_c": "Cold water inlet temperature from mains (typically 10-15°C)", + "boiler_deadline_time": "By when you want boiler heated (format HH:MM, e.g., 20:00). Planning always finds cheapest slots BEFORE this time.", + "boiler_has_alternative_heating": "Check if you have alternative heating method (boiler, HP) and want to use it when electricity is expensive", + "boiler_heater_power_kw_entity": "Entity ID of sensor with current power (e.g., sensor.boiler_power). If you don't have one, create a helper with constant value (e.g., 2.0 for 2kW)", + "boiler_heater_switch_entity": "Entity ID of switch to turn on main heating element (e.g., switch.boiler_heater). This will be controlled by the integration.", + "boiler_plan_slot_minutes": "Size of time blocks for planning (15-60 minutes). Smaller = more precise, larger = simpler. Recommended 60 minutes.", + "boiler_planning_horizon_hours": "How far ahead to plan (typically 24-48 hours). More = better optimization but longer calculation.", + "boiler_spot_price_sensor": "Entity ID of spot price sensor (e.g., sensor.oig_2206237016_spot_price_current_15min)", + "boiler_stratification_mode": "simple_avg = temperature average | two_zone = stratified model (more accurate, needs 2 sensors)", + "boiler_target_temp_c": "What temperature to heat water to (typically 55-65°C)", + "boiler_temp_sensor_bottom": "Entity ID of temperature sensor at bottom - for more accurate calculation in stratified boilers", + "boiler_temp_sensor_top": "Entity ID of temperature sensor at top of boiler (e.g., sensor.boiler_temperature_top)", + "boiler_volume_l": "Total volume of hot water tank (e.g., 120 liters)", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nIntelligently plans water heater heating based on spot electricity prices. Selects the cheapest time slots to heat water before your set deadline.\n\n🔧 **What is needed:**\n• 💰 Spot prices (must be enabled)\n• 🌡️ Boiler temperature sensors (top and optionally bottom)\n• ⚡ Heater power\n\n💡 **How it works:**\n1. Calculates how much energy you need to heat the water\n2. Finds the cheapest time slots before deadline (e.g., 20:00)\n3. Creates a plan when to turn on the boiler\n4. Controls the switch for turning heating on/off\n\n⚠️ **Note:** This module only controls WHEN to heat. Physical boiler switching must be handled via automation or smart switch.", + "title": "🔥 Boiler Configuration" + }, + "wizard_extended": { + "data": { + "enable_extended_battery_sensors": "🔋 Extended battery sensors", + "enable_extended_fve_sensors": "☀️ Extended PV sensors", + "enable_extended_grid_sensors": "⚡ Extended grid sensors", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "enable_extended_battery_sensors": "Cell voltages, temperatures, charging/discharging currents", + "enable_extended_fve_sensors": "String voltages, currents, temperatures, power of individual strings", + "enable_extended_grid_sensors": "Phase voltages L1/L2/L3, frequency, power quality", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **Extended Sensors**\n\nSelect which groups of extended sensors you want to activate.\n\n💡 **Available groups:**\n• 🔋 Battery - cell voltages, temperatures, currents\n• ☀️ PV - string voltages, currents, temperatures\n• ⚡ Grid - phase voltages, frequency, quality\n\n⚠️ **Note:** More sensors = higher API load", + "title": "⚡ Extended Sensors" + }, + "wizard_intervals": { + "data": { + "data_source_mode": "Telemetry data source", + "enable_cloud_notifications": "Cloud notifications", + "extended_scan_interval": "Extended data (seconds)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "local_event_debounce_ms": "Local event debounce (ms)", + "local_proxy_stale_minutes": "Fallback to cloud after (minutes)", + "notifications_scan_interval": "Notifications interval (seconds)", + "standard_scan_interval": "Basic data (seconds)" + }, + "data_description": { + "data_source_mode": "Cloud only = always cloud; Local only = mapped local entities (falls back to cloud when proxy is stale/unavailable)", + "enable_cloud_notifications": "Enable fetching cloud notifications (typically enough once every few minutes)", + "extended_scan_interval": "How often to load cell voltages, temperatures, currents and other detailed data (minimum 300 seconds, recommended 300-600 seconds)", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "local_event_debounce_ms": "Debounce for event-driven refresh from local entities (lower = faster updates, higher = fewer updates)", + "local_proxy_stale_minutes": "Fallback to cloud if the local proxy has not sent any data for longer than this limit", + "notifications_scan_interval": "How often to poll cloud notifications (recommended 300-900 seconds)", + "standard_scan_interval": "How often to load consumption, production, battery status and other basic data (minimum 30 seconds, recommended 30-60 seconds)" + }, + "description": "{step}\n{progress}\n\nSet how often data should be loaded from OIG Cloud.\n\n💡 **Tip:** Shorter interval = more current data, but higher load on API servers.", + "title": "⏱️ Data Loading Intervals" + }, + "wizard_modules": { + "data": { + "enable_auto": "🚗 Car - vehicle charging planning", + "enable_battery_prediction": "🔋 Intelligent battery prediction and optimization", + "enable_boiler": "🔥 Boiler - water heating optimization", + "enable_chmu_warnings": "🌦️ CHMU Weather Warnings (meteorological alerts)", + "enable_dashboard": "📊 Web dashboard with charts", + "enable_extended_sensors": "⚡ Extended sensors (voltages, currents, temperatures)", + "enable_pricing": "💰 Price sensors and spot prices from OTE", + "enable_solar_forecast": "☀️ Solar forecast for PV production", + "enable_statistics": "📊 Statistics and consumption analysis", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "enable_auto": "Electric vehicle charging optimization (coming soon)", + "enable_battery_prediction": "Experimental - smart charging based on prices", + "enable_boiler": "Intelligent boiler heating planning based on spot prices", + "enable_chmu_warnings": "Meteorological warnings for your location (CAP XML)", + "enable_dashboard": "Web interface with charts accessible in HA", + "enable_extended_sensors": "Recommended - detailed monitoring", + "enable_pricing": "Recommended - spot prices from OTE + cost calculations", + "enable_solar_forecast": "Requires API key from Forecast.Solar", + "enable_statistics": "Recommended - consumption median, predictions", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\nSelect which features you want to use. You can configure each module in detail later.", + "title": "📦 Module and Feature Selection" + }, + "wizard_pricing_distribution": { + "data": { + "distribution_fee_nt_kwh": "Distribution fee LT (CZK/kWh)", + "distribution_fee_vt_kwh": "Distribution fee HT (CZK/kWh)", + "fixed_price_nt_kwh": "Fixed purchase price LT (CZK/kWh)", + "fixed_price_vt_kwh": "Fixed purchase price HT (CZK/kWh)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "tariff_count": "Number of tariffs", + "tariff_nt_start_weekday": "LT start weekday (hour1,hour2)", + "tariff_nt_start_weekend": "LT start weekend (hour1,hour2)", + "tariff_vt_start_weekday": "HT start weekday (hour)", + "tariff_vt_start_weekend": "HT start weekend (hour)", + "tariff_weekend_same_as_weekday": "Weekend same as weekdays", + "vat_rate": "VAT (%)" + }, + "data_description": { + "distribution_fee_nt_kwh": "Distribution fee LT (low tariff). E.g., 0.91 CZK/kWh", + "distribution_fee_vt_kwh": "Distribution fee HT (high tariff). E.g., 1.42 CZK/kWh", + "fixed_price_nt_kwh": "Fixed purchase price LT without VAT and distribution.", + "fixed_price_vt_kwh": "Fixed purchase price HT without VAT and distribution.", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "tariff_count": "💡 Click 'Submit' to show parameters according to number of tariffs", + "tariff_nt_start_weekday": "LT start on weekday. Format: hour1,hour2 (e.g., '22,2' = 22:00 evening and 02:00 morning)", + "tariff_nt_start_weekend": "LT start on weekend. Format: hour1,hour2 (e.g., '0' = LT all day)", + "tariff_vt_start_weekday": "HT start on weekday. Format: hour (e.g., '6' = 06:00)", + "tariff_vt_start_weekend": "HT start on weekend. Format: hour (leave empty for LT all day)", + "tariff_weekend_same_as_weekday": "Use the same HT/LT times on weekends", + "vat_rate": "VAT rate in percent. Standard 21%" + }, + "description": "{step}\n{progress}\n\n📖 **Step 3: Distribution and VAT**\n\nSet distribution fees and VAT.\n\n💡 **Information:**\n• Distribution is **independent** of purchase/sale type (FIXED/SPOT)\n• If you have 2 tariffs (HT/LT), check 'Two tariffs'\n• HT hours are automatically set according to common times\n\n⚙️ After selecting number of tariffs, click 'Submit' to show parameters.", + "title": "⚡ Distribution and VAT Configuration (3/3)" + }, + "wizard_pricing_export": { + "data": { + "export_fee_percent": "Export fee (%)", + "export_fixed_fee_czk": "Fixed export fee (CZK/kWh)", + "export_fixed_price_kwh": "Fixed export price (CZK/kWh)", + "export_pricing_scenario": "Export pricing scenario", + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "export_fee_percent": "Fee in %. E.g., 15% = you get 85% of spot price (spot × 0.85)", + "export_fixed_fee_czk": "Fixed fee subtracted from spot price. E.g., 0.20 CZK/kWh = spot - 0.20", + "export_fixed_price_kwh": "Fixed export price regardless of spot. E.g., 2.50 CZK/kWh", + "export_pricing_scenario": "💡 Click 'Submit' to show parameters for selected scenario", + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📖 **Step 2: Electricity Sale Price**\n\nSelect how you want to calculate the price for selling surplus to the grid.\n\n💡 **Recommended scenarios:**\n• 💰 SPOT - percentage - Advantageous at high spot prices\n• 💵 SPOT - fixed fee - More stable export\n• 🔒 FIXED price - Stable export price all year\n\n⚙️ After selecting scenario, click 'Submit' to show parameters.", + "title": "💸 Export Price Configuration (2/3)" + }, + "wizard_pricing_import": { + "data": { + "fixed_price_kwh": "Fixed purchase price (CZK/kWh)", + "go_back": "⬅️ I want to go back (check + click Submit)", + "import_pricing_scenario": "Import pricing scenario", + "spot_fixed_fee_kwh": "Fixed fee (CZK/kWh)", + "spot_negative_fee_percent": "Surcharge for negative spot price (%)", + "spot_positive_fee_percent": "Surcharge for positive spot price (%)" + }, + "data_description": { + "fixed_price_kwh": "Fixed purchase price. ⚠️ ENTER WITHOUT VAT AND DISTRIBUTION!", + "go_back": "Check this box and press 'Submit' - you will go back one step", + "import_pricing_scenario": "💡 Click 'Submit' to show parameters for selected scenario", + "spot_fixed_fee_kwh": "Constant fee added to spot price. E.g., 0.50 CZK/kWh", + "spot_negative_fee_percent": "For negative spot price: price × (1 - percent/100). E.g., 9% = spot × 0.91", + "spot_positive_fee_percent": "For positive spot price: price × (1 + percent/100). E.g., 15% = spot × 1.15" + }, + "description": "{step}\n{progress}\n\n📖 **Step 1: Electricity Purchase Price**\n\nSelect how you want to calculate the price for purchasing electricity from the grid.\n\n💡 **Recommended scenarios:**\n• 💰 SPOT + percentage - Variable price according to exchange\n• 💵 SPOT + fixed fee - More stable than percentage\n• 🔒 FIXED price - Predictable fixed price\n\n⚙️ After selecting scenario, click 'Submit' to show parameters.", + "title": "💰 Import Price Configuration (1/3)" + }, + "wizard_solar": { + "data": { + "go_back": "⬅️ I want to go back (check + click Submit)", + "solar_forecast_api_key": "Forecast.Solar API key", + "solar_forecast_latitude": "Installation GPS latitude", + "solar_forecast_longitude": "Installation GPS longitude", + "solar_forecast_mode": "Forecast update mode", + "solar_forecast_string1_azimuth": "String 1 - Azimuth / Orientation (°)", + "solar_forecast_string1_declination": "String 1 - Panel tilt (°)", + "solar_forecast_string1_enabled": "✅ Enable String 1", + "solar_forecast_string1_kwp": "String 1 - Installed power (kWp)", + "solar_forecast_string2_azimuth": "String 2 - Azimuth / Orientation (°)", + "solar_forecast_string2_declination": "String 2 - Panel tilt (°)", + "solar_forecast_string2_enabled": "✅ Enable String 2", + "solar_forecast_string2_kwp": "String 2 - Installed power (kWp)" + }, + "data_description": { + "go_back": "Check this box and press 'Submit' - you will go back one step", + "solar_forecast_api_key": "Optional for FREE modes. Required for frequent updates (4h, 1h)", + "solar_forecast_latitude": "Range: -90° to 90° (Central Europe approx 48-51°)", + "solar_forecast_longitude": "Range: -180° to 180° (Central Europe approx 12-19°)", + "solar_forecast_mode": "🎯 Optimized = 3x daily at 6:00, 12:00, 16:00 (RECOMMENDED)\n🌅 Daily = 1x daily at 6:00\n🕐 4h/⚡1h = requires API key", + "solar_forecast_string1_azimuth": "0° = SOUTH, 90° = WEST, 180° = NORTH, 270° = EAST (range 0-360°)", + "solar_forecast_string1_declination": "0° = horizontal, 90° = vertical (roofs usually 30-45°). Range: 0-90°", + "solar_forecast_string1_enabled": "💡 Click 'Submit' to show parameters. If you have panels on only one orientation, String 1 is enough", + "solar_forecast_string1_kwp": "Total String 1 power in kWp (e.g., 5.0 kWp)", + "solar_forecast_string2_azimuth": "0° = SOUTH, 90° = WEST, 180° = NORTH, 270° = EAST (range 0-360°)", + "solar_forecast_string2_declination": "0° = horizontal, 90° = vertical (roofs usually 30-45°). Range: 0-90°", + "solar_forecast_string2_enabled": "💡 Click 'Submit' to show parameters. Enable if you have panels on two different orientations (e.g., east + west)", + "solar_forecast_string2_kwp": "Total String 2 power in kWp (e.g., 3.5 kWp)" + }, + "description": "{step}\n{progress}\n\n📖 **What this module does:**\nProvides forecast of electricity production from photovoltaic panels for the next 24-72 hours. Uses Forecast.Solar service with accurate meteorological data.\n\n🔧 **What is needed:**\n• Free or paid API key from https://forecast.solar\n• GPS coordinates of PV installation\n• Panel parameters (tilt, azimuth, power)\n\n⚠️ **This module is required for:**\n• 🔋 Battery prediction (intelligent charging)\n\n🔑 Get API key by registering at https://forecast.solar", + "title": "☀️ Solar Forecast Configuration" + }, + "wizard_summary": { + "data": { + "go_back": "⬅️ I want to go back (check + click Submit)" + }, + "data_description": { + "go_back": "Check this box and press 'Submit' - you will go back one step" + }, + "description": "{step}\n{progress}\n\n📋 **Configuration Summary**\n\n{summary}\n\n---\n\n✅ **Everything is ready!**\n\nClick 'Submit' to save changes.", + "title": "✅ Summary and Completion" + }, + "wizard_welcome_reconfigure": { + "description": "🔧 **OIG Cloud Configuration Change**\n\nThis wizard will guide you through updating your integration configuration.\n\n**What you can change:**\n• 📦 Enable/disable modules and features\n• ⏱️ Adjust data update intervals\n• ☀️ Change solar forecast settings\n• 🔋 Adjust battery prediction parameters\n• 💰 Change pricing settings\n• ⚡ Adjust extended sensors\n\n**Note:** Login credentials cannot be changed here - you must delete and re-add the integration.\n\nClick \"Submit\" to continue with the setup.", + "title": "🔧 OIG Cloud Configuration Change" + } + } + }, "selector": { - "set_box_mode": { + "setup_type": { "options": { - "Home 1": "Home 1", - "Home 2": "Home 2", - "Home 3": "Home 3", - "Home UPS": "Home UPS" - }, - "Acknowledgement": { - "description": "I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise." + "import": "📥 Import from YAML", + "quick": "⚡ Quick Setup", + "wizard": "🧙‍♂️ Setup Wizard (recommended)" } }, - "set_grid_delivery": { + "box_mode": { "options": { - "Vypnuto / Off": "Vypnuto / Off", - "Zapnuto / On": "Zapnuto / On", - "S omezením / Limited": "S omezením / Limited" - }, - "Acknowledgement": { - "description": "I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise." - }, - "Warning": { - "description": "Before using this feature, familiarize yourself with the limitations available in the OIG Power / ČEZ Battery Box application." + "home_1": "Home 1", + "home_2": "Home 2", + "home_3": "Home 3", + "home_ups": "Home UPS" } }, - "set_boiler_mode": { + "boiler_mode": { "options": { - "CBB": "CBB", - "Manual": "Manual" - }, - "Acknowledgement": { - "description": "I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise." + "cbb": "CBB", + "manual": "Manual" } }, - "set_formating_mode": { + "battery_charge_mode": { "options": { - "Nenabíjet": "Nenabíjet", - "Nabíjet": "Nabíjet" - }, - "Limit": { - "min": "min", - "max": "max", - "unit_of_measurement": "unit_of_measurement" - }, - "Acknowledgement": { - "description": "I acknowledge that calling the service will result in parameter modification of a live system. I take on full responsibility for the changes and any effect they may have, expected or otherwise." + "no_charge": "Do not charge", + "charge": "Charge" + } + }, + "grid_delivery_mode": { + "options": { + "off": "Vypnuto / Off", + "on": "Zapnuto / On", + "limited": "S omezením / Limited" } } }, - "options": { - "step": { - "init": { - "title": "Configuration", - "description": "Adjust settings for your OIG Cloud integration", - "data": { - "update_interval": "Update interval (seconds)", - "no_telemetry": "Disable telemetry (opt-out of data collection)", - "log_level": "Logging level" + "services": { + "apply_boiler_plan": { + "description": "Applies the planned boiler heating. Creates automations for turning on the heating element at planned times.", + "name": "Apply heating plan" + }, + "cancel_boiler_plan": { + "description": "Cancels the active boiler heating plan and removes planned automations.", + "name": "Cancel heating plan" + }, + "plan_boiler_heating": { + "description": "Creates an optimal boiler heating plan based on spot prices. Finds the cheapest time slots before the deadline.", + "fields": { + "deadline": { + "description": "Override the default deadline time (format HH:MM, e.g., 20:00)", + "name": "Override deadline" + }, + "force": { + "description": "Forces plan recalculation even if a valid plan already exists", + "name": "Force recalculation" } - } + }, + "name": "Plan boiler heating" + }, + "set_boiler_mode": { + "description": "Switch boiler between automatic (CBB) and manual mode.", + "fields": { + "acknowledgement": { + "description": "I acknowledge the risks associated with manual boiler mode and accept full responsibility.", + "name": "Acknowledgement" + }, + "mode": { + "description": "Select between CBB (automatic) or Manual operation.", + "name": "Boiler Mode" + } + }, + "name": "Set Boiler Mode" + }, + "set_box_mode": { + "description": "Set Battery Box mode (Home 1, Home 2, Home 3, Home UPS, Home 5, Home 6)", + "fields": { + "acknowledgement": { + "description": "Acknowledge mode change", + "name": "Acknowledgement" + }, + "mode": { + "description": "Battery Box mode", + "name": "Mode" + } + }, + "name": "Set Battery Box Mode" + }, + "set_formating_mode": { + "description": "Enable or disable immediate charging of the battery from the grid.", + "fields": { + "acknowledgement": { + "description": "I acknowledge that starting battery charging from the grid modifies a live system and accept responsibility.", + "name": "Acknowledgement" + }, + "limit": { + "description": "Set the target battery charge percentage.", + "name": "Target Charge (%)" + }, + "mode": { + "description": "Select to start or stop grid charging of the battery.", + "name": "Charging Mode" + } + }, + "name": "Set Battery Grid Charging" + }, + "set_grid_delivery": { + "description": "Configure export of excess production to the grid. Ensure legal permissions are obtained.", + "fields": { + "acknowledgement": { + "description": "I acknowledge that enabling this feature modifies a live system. I take full responsibility.", + "name": "Acknowledgement" + }, + "limit": { + "description": "Set the maximum allowed export to the grid in watts.", + "name": "Grid Export Limit (W)" + }, + "mode": { + "description": "Choose whether grid export is allowed, limited, or disabled.", + "name": "Grid Export Mode" + }, + "warning": { + "description": "Before enabling grid export, ensure you have DSO approval. Unauthorized export may lead to penalties.", + "name": "Export Warning" + } + }, + "name": "Set Grid Delivery Mode" } } } diff --git a/custom_components/oig_cloud/www/.htmlhintrc b/custom_components/oig_cloud/www/.htmlhintrc new file mode 100644 index 00000000..dfba7a08 --- /dev/null +++ b/custom_components/oig_cloud/www/.htmlhintrc @@ -0,0 +1,3 @@ +{ + "tagname-lowercase": false +} diff --git a/custom_components/oig_cloud/www/.stylelintrc b/custom_components/oig_cloud/www/.stylelintrc new file mode 100644 index 00000000..6a4a0a5b --- /dev/null +++ b/custom_components/oig_cloud/www/.stylelintrc @@ -0,0 +1,6 @@ +{ + "rules": { + "comment-empty-line-before": null, + "declaration-empty-line-before": null + } +} diff --git a/custom_components/oig_cloud/www/boiler-tab.html b/custom_components/oig_cloud/www/boiler-tab.html new file mode 100644 index 00000000..75cf9eab --- /dev/null +++ b/custom_components/oig_cloud/www/boiler-tab.html @@ -0,0 +1,348 @@ + +
+ + +
+
+

🛠️ Pokročilé ovládání (Debug) + ❓ + + ⚠️ Automatický režim + Bojler funguje plně automaticky! Systém: +
    +
  • 🤖 Automaticky plánuje ohřev každých 5 minut
  • +
  • Cíl: Do deadline (20:00) být nahřátý na cílovou teplotu
  • +
  • 💰 Optimalizuje: Podle spotových cen a profilu spotřeby
  • +
+ Tlačítka níže jsou jen pro debug/override: +
    +
  • Naplánovat: Manuálně přeplánovat (normálně automatické)
  • +
  • Aplikovat: Spustit plán ručně (normálně automatické)
  • +
  • Zrušit: Zrušit aktuální plán
  • +
+
+
+

+ +
+ +
+ +
+

⚠️ Manuální akce (override)

+
+ + + +
+
+ + +
+

Stav bojleru

+
+
+
SOC
+
+ -- % +
+
+
+
Teplota horní
+
+ -- °C +
+
+
+
Energie potřebná
+
+ -- kWh +
+
+
+
Náklady plánu
+
+ -- Kč +
+
+
+
+ + +
+

Rozpad energie

+
+
+
Ze sítě
+
+ -- kWh (-- Kč) +
+
+
+
Alternativa
+
+ -- kWh (-- Kč) +
+
+
+
+ + +
+

Plánované odběry

+
+
+ Předpokládaná spotřeba: + -- kWh +
+
+ Píky spotřeby: + -- +
+
+ ≈ objem vody (40°C): + -- L +
+
+
+ + +
+

Poměr dohřevu

+
+
+
+
+
+
+
+
+ 0% síť + 0% alternativa +
+
+
+ + +
+

Informace o plánu

+
+
+ Digest: + -- +
+
+ Slotů: + -- +
+
+ Topení aktivní: + -- +
+
+ Od: + -- +
+
+ Do: + -- +
+
+
+
+
+ + +
+
+ +
+

🌡️ Vizualizace bojleru

+
+
+
70°C
+
60°C
+
50°C
+
40°C
+
30°C
+
20°C
+
10°C
+
+
+
+
+ Cíl +
+
+ --°C +
+
+ --°C +
+
+
0% nahřáto
+
+
+ + +
+ +
+ + +
+ + +
+

🗓️ Heatmapa spotřeby (7 dní × 24 hodin)

+ +
+ + +
+

⚡ Plán ohřevu - Doporučené zdroje

+ +
+ + +
+
+

Celková spotřeba dnes

+
-
+
+
+

Z FVE

+
-
+
+
+

Ze sítě

+
-
+
+
+

Odhadovaná cena

+
-
+
+
+
+ + +
+

📊 Profil spotřeby (týden)

+ +
+
+ Dnes: + -- kWh +
+
+ Píky: + -- +
+
+ Sledováno: + 7 dní +
+
+
+
+ + +
+

🗓️ Mapa spotřeby (7 dní)

+
+ +
+
+ Nízká + Střední + Vysoká +
+
+
+ + +
+
+ +
+
+ + +
+

⚙️ Profil bojleru

+
+
+
Objem
+
+ -- L +
+
+
+
Výkon topení
+
+ -- W +
+
+
+
Cílová teplota
+
+ -- °C +
+
+
+
Deadline
+
+ --:-- +
+
+
+
Stratifikace
+
+ -- +
+
+
+
Koeficient K
+
+ -- +
+
+
+
+
diff --git a/custom_components/oig_cloud/www/css/02-layout.css b/custom_components/oig_cloud/www/css/02-layout.css new file mode 100644 index 00000000..30ba0ff3 --- /dev/null +++ b/custom_components/oig_cloud/www/css/02-layout.css @@ -0,0 +1,71 @@ +/* =================================== + LAYOUT COMPONENT STYLES + + Base layout struktury pro dashboard + - Container + - Header + - Footer + - Grid layout + =================================== */ + +/* === BASE CONTAINER === */ +.container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + padding-bottom: 40px; + position: relative; +} + +/* === HEADER === */ +.header { + text-align: center; + margin-bottom: 30px; + position: relative; +} + +.header h1 { + font-size: 32px; + font-weight: 300; + color: var(--text-primary); + margin: 0; +} + +/* === LAYOUT CONTROLS === */ +.layout-controls { + display: flex; + gap: 12px; + justify-content: center; + margin-bottom: 20px; +} + +/* === RESPONSIVE LAYOUT === */ +@media (width <= 768px) { + .container { + padding: 15px; + padding-bottom: 30px; + } + + .header { + margin-bottom: 20px; + } + + .header h1 { + font-size: 24px; + } +} + +@media (width <= 480px) { + .container { + padding: 10px; + } + + .header h1 { + font-size: 20px; + } +} + +/* === LIGHT THEME === */ +body.light-theme .header { + color: rgb(0, 0, 0, 0.87); +} diff --git a/custom_components/oig_cloud/www/css/03-typography.css b/custom_components/oig_cloud/www/css/03-typography.css new file mode 100644 index 00000000..942ab1a0 --- /dev/null +++ b/custom_components/oig_cloud/www/css/03-typography.css @@ -0,0 +1,113 @@ +/* =================================== + TYPOGRAPHY STYLES + + Všechny textové styly a nadpisy + =================================== */ + +/* === BODY TEXT === */ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + overflow: hidden auto; + min-height: 100vh; + transition: background 0.3s ease, color 0.3s ease; +} + +/* === HEADINGS === */ +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + line-height: 1.2; + margin: 0; +} + +h1 { + font-size: 32px; +} + +h2 { + font-size: 24px; +} + +h3 { + font-size: 20px; +} + +h4 { + font-size: 18px; +} + +h5 { + font-size: 16px; +} + +h6 { + font-size: 14px; +} + +/* === TEXT UTILITIES === */ +.text-primary { + color: var(--text-primary); +} + +.text-secondary { + color: var(--text-secondary); +} + +.text-muted { + color: var(--text-tertiary); +} + +.text-center { + text-align: center; +} + +.text-right { + text-align: right; +} + +.text-left { + text-align: left; +} + +/* === FONT WEIGHTS === */ +.font-light { + font-weight: 300; +} + +.font-normal { + font-weight: 400; +} + +.font-medium { + font-weight: 500; +} + +.font-bold { + font-weight: 600; +} + +/* === FONT SIZES === */ +.text-xs { + font-size: 11px; +} + +.text-sm { + font-size: 12px; +} + +.text-base { + font-size: 14px; +} + +.text-lg { + font-size: 16px; +} + +.text-xl { + font-size: 18px; +} + +.text-2xl { + font-size: 24px; +} diff --git a/custom_components/oig_cloud/www/css/components/buttons.css b/custom_components/oig_cloud/www/css/components/buttons.css new file mode 100644 index 00000000..7010d6d6 --- /dev/null +++ b/custom_components/oig_cloud/www/css/components/buttons.css @@ -0,0 +1,392 @@ +/* =================================== + BUTTONS COMPONENT STYLES + + Všechny button styly pro OIG Cloud Dashboard + - Base button styles + - Button variants (primary, secondary, action) + - Button groups + - Button states (hover, active, disabled) + - Layout buttons (minimize, edit, reset) + =================================== */ + +/* === BASE BUTTON STYLES === */ + +.btn { + display: inline-block; + padding: 8px 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 500; + text-align: center; + cursor: pointer; + transition: all 0.2s ease; + border: 1px solid transparent; + background: var(--bg-secondary); + color: var(--text-primary); +} + +.btn:hover { + background: var(--bg-hover); + transform: translateY(-1px); +} + +.btn:active { + transform: translateY(0); +} + +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; + background: var(--button-disabled-bg); + border-color: var(--button-disabled-border); + color: var(--button-disabled-text); +} + +/* === BUTTON VARIANTS === */ + +.btn-primary { + background: linear-gradient(135deg, #4caf50 0%, #45a049 100%); + color: white; +} + +.btn-primary:hover { + background: linear-gradient(135deg, #45a049 0%, #3d8b40 100%); + box-shadow: 0 4px 8px rgb(76, 175, 80, 0.3); +} + +.btn-secondary { + background: linear-gradient(135deg, rgb(255, 255, 255, 0.08) 0%, rgb(255, 255, 255, 0.05) 100%); + border: 1px solid rgb(255, 255, 255, 0.15); + color: var(--text-primary); +} + +.btn-secondary:hover { + background: linear-gradient(135deg, rgb(255, 255, 255, 0.12) 0%, rgb(255, 255, 255, 0.08) 100%); + border-color: rgb(255, 255, 255, 0.25); +} + +.btn-action { + background: linear-gradient(135deg, #2196F3 0%, #1976D2 100%); + border: 1px solid rgb(33, 150, 243, 0.3); + color: white; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.btn-action:hover { + background: linear-gradient(135deg, #1976D2 0%, #1565C0 100%); + box-shadow: 0 4px 12px rgb(33, 150, 243, 0.4); +} + +/* === CONTROL BUTTONS === */ + +.control-button { + padding: 4px 10px; + background: var(--status-charging-bg); + border: 1px solid var(--status-charging-border); + border-radius: 4px; + color: var(--text-primary); + font-size: 10px; + cursor: pointer; + transition: all 0.2s ease; +} + +.control-button:hover { + background: var(--status-charging-shadow); + transform: scale(1.05); +} + +.control-buttons-row { + display: flex; + gap: 8px; + margin-top: 8px; + flex-wrap: wrap; +} + +/* === LAYOUT BUTTONS === */ + +.btn-minimize { + position: absolute; + top: 8px; + right: 8px; + background: transparent; + border: none; + color: var(--text-secondary); + cursor: pointer; + font-size: 16px; + padding: 4px; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: all 0.2s ease; + z-index: 10; +} + +.btn-minimize:hover { + background: var(--bg-hover); + color: var(--text-primary); + transform: scale(1.1); +} + +.btn-layout-edit, +.btn-layout-reset { + padding: 8px 16px; + border-radius: 4px; + border: 1px solid var(--border-primary); + background: var(--bg-secondary); + color: var(--text-primary); + cursor: pointer; + font-size: 12px; + transition: all 0.2s ease; +} + +.btn-layout-edit:hover, +.btn-layout-reset:hover { + background: var(--bg-hover); + border-color: var(--border-secondary); +} + +.btn-layout-edit.active { + background: var(--button-active-bg); + border-color: #4caf50; + color: #4caf50; +} + +.btn-layout-reset { + background: rgb(244, 67, 54, 0.1); +} + +.btn-layout-reset:hover { + background: rgb(244, 67, 54, 0.2); +} + +/* === BUTTON GROUPS === */ + +.button-group { + display: flex; + gap: 6px; + flex-wrap: wrap; + margin: 8px 0; +} + +.button-group button { + flex: 1; + min-width: 70px; + padding: 6px 10px; + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 4px; + color: var(--text-primary); + cursor: pointer; + font-size: 10px; + font-weight: 500; + transition: all 0.2s ease; + position: relative; +} + +.button-group button:hover { + background: var(--bg-hover); + border-color: var(--border-secondary); + transform: translateY(-1px); +} + +.button-group button:active { + transform: translateY(0); +} + +.button-group button.active { + background: var(--button-active-bg); + border-color: #4caf50; + color: #4caf50; +} + +.button-group button:disabled, +.button-group button.disabled { + opacity: 0.5; + cursor: not-allowed; + background: var(--button-disabled-bg); +} + +.button-group button:disabled:hover, +.button-group button.disabled:hover { + transform: none; +} + +.button-group button:disabled { + border-color: var(--button-disabled-border); + color: var(--button-disabled-text); +} + +/* === BUTTON STATES WITH INDICATORS === */ + +.button-group button.active { + position: relative; +} + +.button-group button.active::before { + content: '●'; + position: absolute; + left: 8px; + color: #4caf50; +} + +.button-group button.pending { + border-color: #ff9800; + color: #ff9800; +} + +.button-group button.pending::before { + content: '⏳'; + position: absolute; + left: 8px; +} + +.button-group button.processing { + border-color: #2196f3; + color: #2196f3; +} + +.button-group button.processing::before { + content: '⟳'; + position: absolute; + left: 8px; + animation: spin 1s linear infinite; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +/* === DIALOG BUTTONS === */ + +.ack-dialog-buttons button { + flex: 1; + padding: 12px 24px; + border-radius: 6px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; +} + +.ack-dialog-buttons .btn-cancel { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + color: var(--text-primary); +} + +.ack-dialog-buttons .btn-cancel:hover { + background: var(--bg-hover); +} + +.ack-dialog-buttons .btn-confirm { + background: linear-gradient(135deg, #4caf50 0%, #45a049 100%); + border: none; + color: white; +} + +.ack-dialog-buttons .btn-confirm:hover:not(:disabled) { + background: linear-gradient(135deg, #45a049 0%, #3d8b40 100%); + box-shadow: 0 4px 8px rgb(76, 175, 80, 0.3); +} + +.ack-dialog-buttons .btn-confirm:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +/* === CLOSE BUTTONS === */ + +.btn-close { + background: transparent; + border: none; + color: var(--text-secondary); + cursor: pointer; + font-size: 20px; + padding: 4px 8px; + transition: all 0.2s ease; +} + +.btn-close:hover { + color: var(--text-primary); + transform: scale(1.1); +} + +/* === INPUT GROUP BUTTONS === */ + +.input-group button { + padding: 8px 16px; + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-left: none; + color: var(--text-primary); + cursor: pointer; + transition: all 0.2s ease; +} + +.input-group button:hover { + background: var(--bg-hover); +} + +/* === TOAST BUTTONS === */ + +.toast-header button { + background: transparent; + border: none; + color: var(--text-secondary); + cursor: pointer; + padding: 4px 8px; + margin-left: auto; +} + +.toast-header button:hover { + color: var(--text-primary); +} + +/* === LIGHT THEME OVERRIDES === */ + +body.light-theme .btn-minimize { + color: rgb(0, 0, 0, 0.6); +} + +body.light-theme .btn-minimize:hover { + background: rgb(0, 0, 0, 0.05); + color: rgb(0, 0, 0, 0.8); +} + +body.light-theme .button-group button { + background: rgb(0, 0, 0, 0.03); + border-color: rgb(0, 0, 0, 0.1); + color: rgb(0, 0, 0, 0.87); +} + +body.light-theme .button-group button:hover:not(:disabled) { + background: rgb(0, 0, 0, 0.08); +} + +body.light-theme .button-group button.active { + background: rgb(76, 175, 80, 0.15); + border-color: #4caf50; +} + +body.light-theme .button-group button:disabled { + opacity: 0.4; +} + +body.light-theme .btn-close { + color: rgb(0, 0, 0, 0.54); +} + +body.light-theme .btn-close:hover { + color: rgb(0, 0, 0, 0.87); +} diff --git a/custom_components/oig_cloud/www/css/components/cards.css b/custom_components/oig_cloud/www/css/components/cards.css new file mode 100644 index 00000000..b2a1bebd --- /dev/null +++ b/custom_components/oig_cloud/www/css/components/cards.css @@ -0,0 +1,263 @@ +/* =================================== + CARDS COMPONENT STYLES + + Všechny card styly pro OIG Cloud Dashboard + - Base card styles + - Card variants (primary, secondary, accent) + - Stat cards (statistics display) + - Metric cards (metrics dashboard) + - Card states (hover, active, completed) + =================================== */ + + .stat-card { + background: var(--bg-secondary); + border-radius: 8px; + border: 1px solid var(--border-primary); + padding: 15px; + transition: transform 0.2s, box-shadow 0.2s, border-color 0.3s, background 0.3s; + display: flex; + flex-direction: column; + } + + .stat-card:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgb(0, 0, 0, 0.3); + } + + .stat-card.zoom-active { + border-color: rgb(33, 150, 243, 0.8); + box-shadow: 0 0 20px rgb(33, 150, 243, 0.5), 0 4px 12px rgb(0, 0, 0, 0.4); + background: linear-gradient(135deg, rgb(33, 150, 243, 0.15) 0%, rgb(33, 150, 243, 0.05) 100%); + transform: scale(1.02); + } + + .card-label { + font-size: 0.85em; + color: var(--text-secondary, #b0b0b0); + margin-bottom: 8px; + } + + .card-value { + font-size: 1.5em; + font-weight: 700; + color: var(--text-primary, #fff); + margin-bottom: 5px; + } + + .card-value.better { + color: var(--success-color, #4caf50); + } + + .card-value.worse { + color: var(--error-color, #f44336); + } + + .card-sublabel { + font-size: 0.75em; + color: var(--text-tertiary, #888); + } + +.card { + display: flex; + align-items: center; + gap: 1rem; + padding: 1.25rem; + background: rgb(255, 255, 255, 0.05); + border-radius: 12px; + border: 1px solid rgb(255, 255, 255, 0.1); + transition: all 0.3s ease; +} + +.card:hover { + background: rgb(255, 255, 255, 0.08); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.2); +} + +.card-icon { + font-size: 2.5rem; + flex-shrink: 0; +} + +.card-content { + flex: 1; + min-width: 0; +} + +.card-title { + font-size: 0.85rem; + color: rgb(255, 255, 255, 0.7); + margin-bottom: 0.5rem; + font-weight: 500; +} + +.card-value { + font-size: 1.75rem; + font-weight: 700; + color: #fff; + margin-bottom: 0.25rem; + line-height: 1.2; +} + +.card-value.positive { + color: #4CAF50; +} + +.card-value.negative { + color: #F44336; +} + +.card-sub { + font-size: 0.8rem; + color: rgb(255, 255, 255, 0.6); + font-weight: 400; +} + +.card-primary { + border-left: 4px solid #2196F3; +} + +.card-secondary { + border-left: 4px solid #FF9800; +} + +.card-accent { + border-left: 4px solid #9C27B0; +} + + .card-value { + font-size: 1.5rem; + } + +.metric-cards-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.25rem; +} + + .metric-cards-grid { + grid-template-columns: 1fr; + } + +.metric-card { + background: rgb(40, 50, 60, 0.5); + border-radius: 12px; + padding: 1.25rem; + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + transition: all 0.3s ease; + border: 1px solid rgb(255, 255, 255, 0.08); + backdrop-filter: blur(10px); +} + +.metric-card:hover { + transform: translateY(-2px); + box-shadow: 0 6px 16px rgb(0, 0, 0, 0.4); + border-color: rgb(255, 255, 255, 0.15); + background: rgb(45, 55, 65, 0.6); +} + +.card-completed { + border-left: 3px solid rgb(76, 175, 80, 0.6); +} + +.card-active { + border-left: 3px solid rgb(255, 152, 0, 0.6); +} + +.card-eod { + border-left: 3px solid rgb(33, 150, 243, 0.6); +} + +.card-header { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.75rem; +} + +.card-icon { + font-size: 1.75rem; + filter: drop-shadow(0 1px 2px rgb(0, 0, 0, 0.3)); +} + +.card-title { + font-size: 0.875rem; + font-weight: 600; + color: rgb(255, 255, 255, 0.7); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.card-body { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.card-main-value { + font-size: 2rem; + font-weight: 700; + color: rgb(255, 255, 255, 0.95); + line-height: 1; + text-shadow: 0 1px 2px rgb(0, 0, 0, 0.2); +} + +.card-details { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.875rem; + color: rgb(255, 255, 255, 0.6); +} + +.card-savings { + font-size: 0.875rem; + color: #66BB6A; + font-weight: 600; + margin-top: 0.25rem; +} + +.card-progress-mini { + display: flex; + align-items: center; + gap: 0.75rem; + margin-top: 0.5rem; +} + +.card-status-bar { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.75rem 1rem; + background: rgb(0, 0, 0, 0.2); + font-size: 0.85rem; +} + +.card-content { + padding: 1rem; +} + +.card-details { + margin-top: 1rem; + border-top: 1px solid var(--border-primary); +} + +.card-details summary { + padding: 0.75rem 1rem; + cursor: pointer; + user-select: none; + font-size: 0.85rem; + color: var(--text-secondary); + transition: all 0.2s ease; +} + +.card-details summary:hover { + color: var(--text-primary); + background: rgb(255, 255, 255, 0.05); +} + +.card-details[open] summary { + color: var(--text-primary); + font-weight: 600; +} + diff --git a/custom_components/oig_cloud/www/css/components/modals.css b/custom_components/oig_cloud/www/css/components/modals.css new file mode 100644 index 00000000..f6e80d82 --- /dev/null +++ b/custom_components/oig_cloud/www/css/components/modals.css @@ -0,0 +1,224 @@ +/* =================================== + MODALS & DIALOGS COMPONENT STYLES + - Dialog overlays & content + - Toast notifications + - Acknowledgement dialogs + =================================== */ + +/* Base dialog overlay */ +.dialog-overlay { + position: fixed; + inset: 0; + background: rgb(0, 0, 0, 0.8); + z-index: 10000; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; + animation: fadeIn 0.2s ease-out; +} + +.dialog-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 25px; + border-bottom: 1px solid var(--border-primary); +} + +.dialog-header h3 { + margin: 0; + color: var(--text-primary); + font-size: 1.4em; +} + +.dialog-close { + background: rgb(255, 255, 255, 0.1); + border: 1px solid rgb(255, 255, 255, 0.2); + color: var(--text-primary); + font-size: 28px; + width: 36px; + height: 36px; + border-radius: 50%; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.2s; +} + +.dialog-close:hover { + background: rgb(244, 67, 54, 0.3); + border-color: #F44336; + transform: rotate(90deg); +} + +.dialog-body { + padding: 25px; +} + +.dialog-input { + width: 100%; + padding: 8px; + border: 1px solid var(--input-border); + background: var(--input-bg); + color: var(--text-primary); + border-radius: 4px; + font-size: 14px; +} + +.dialog-input:focus { + border-color: var(--input-focus-border); + outline: none; +} + +/* Toast notification container */ +.notification-toast { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + min-width: 400px; + max-width: 500px; + background: var(--dialog-bg); + border: 2px solid var(--dialog-border); + border-radius: 16px; + backdrop-filter: blur(20px); + box-shadow: 0 20px 60px var(--shadow-strong); + z-index: 10000; + animation: popIn 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +@keyframes popIn { + 0% { + transform: translate(-50%, -50%) scale(0.7); + opacity: 0; + } + + 100% { + transform: translate(-50%, -50%) scale(1); + opacity: 1; + } +} + +.toast-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 24px 16px; + border-bottom: 1px solid var(--border-secondary); +} + +.toast-header strong { + font-size: 18px; + font-weight: 600; + color: var(--text-primary); +} + +.toast-body { + padding: 16px 24px 20px; + font-size: 14px; + line-height: 1.6; + color: var(--toast-body-text); +} + +.toast-success { + border-color: var(--toast-success-border); + box-shadow: var(--toast-success-shadow); +} + +.toast-success .toast-header { + border-bottom-color: var(--toast-success-border-light); +} + +.toast-error { + border-color: var(--toast-error-border); + box-shadow: var(--toast-error-shadow); +} + +.toast-error .toast-header { + border-bottom-color: var(--toast-error-border-light); +} + +.toast-warning { + border-color: var(--toast-warning-border); + box-shadow: var(--toast-warning-shadow); +} + +.toast-warning .toast-header { + border-bottom-color: var(--toast-warning-border-light); +} + +/* Custom acknowledgement dialog */ +.ack-dialog-overlay { + position: fixed; + inset: 0; + background: var(--modal-backdrop); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + backdrop-filter: blur(4px); +} + +.ack-dialog { + background: var(--modal-bg); + border: 1px solid var(--modal-border); + border-radius: 12px; + padding: 24px; + max-width: 500px; + width: 90%; + box-shadow: var(--modal-shadow); +} + +.ack-dialog-header { + font-size: 20px; + font-weight: 600; + margin-bottom: 16px; + color: var(--modal-header-text); + display: flex; + align-items: center; + gap: 12px; +} + +.ack-dialog-body { + font-size: 14px; + line-height: 1.6; + margin-bottom: 20px; + color: var(--modal-body-text); +} + +.ack-dialog-warning { + background: var(--modal-warning-bg); + border: 1px solid var(--modal-warning-border); + border-radius: 8px; + padding: 12px; + margin-bottom: 16px; + font-size: 13px; + color: var(--modal-warning-text); +} + +.ack-checkbox-wrapper { + display: flex; + align-items: flex-start; + gap: 12px; + margin-bottom: 20px; + padding: 12px; + background: var(--modal-checkbox-bg); + border-radius: 8px; +} + +.ack-checkbox-wrapper input[type="checkbox"] { + margin-top: 3px; + width: 18px; + height: 18px; + cursor: pointer; +} + +.ack-checkbox-wrapper label { + flex: 1; + font-size: 13px; + line-height: 1.5; + color: var(--modal-checkbox-label); + cursor: pointer; +} diff --git a/custom_components/oig_cloud/www/css/components/tiles.css b/custom_components/oig_cloud/www/css/components/tiles.css new file mode 100644 index 00000000..7faaebe9 --- /dev/null +++ b/custom_components/oig_cloud/www/css/components/tiles.css @@ -0,0 +1,15 @@ +/* =================================== + TILES COMPONENT STYLES + + Všechny tile komponenty pro dashboard + - Base tile styles + - Stat tiles (statistiky) + - Metric tiles (metriky) + - Tile layouts + =================================== */ + +/* Tiles jsou již v css/features/custom-tiles.css (27KB) */ + +/* Tento soubor je placeholder pro budoucí společné tile styly */ + +/* Pokud budou potřeba společné tile styly napříč features, přidáme je sem */ diff --git a/custom_components/oig_cloud/www/css/features/balancing-card.css b/custom_components/oig_cloud/www/css/features/balancing-card.css new file mode 100644 index 00000000..c07a57c7 --- /dev/null +++ b/custom_components/oig_cloud/www/css/features/balancing-card.css @@ -0,0 +1,38 @@ +/* =================================== + BALANCING CARD STYLES + + Styly pro dlaždici vyrovnání baterie v pricing tabu + =================================== */ + +/* Zajištění jednotné výšky všech stat-card v pricing tabu */ +#pricing-tab > div:has(> .stat-card) { + display: grid; +} + +#pricing-tab > div > .stat-card { + min-height: 240px; /* Jednotná minimální výška pro všechny dlaždice */ + height: 100%; /* Roztáhne na celou výšku gridu */ +} + +/* Gradient bar vždy dole */ +#pricing-tab .stat-card > div:last-child { + margin-top: auto !important; +} + +/* Battery balancing card specifické styly */ +#battery-balancing-card { + display: flex; + flex-direction: column; +} + +#battery-balancing-card #balancing-details { + flex: 1; /* Vyplní prostor nad gradient barem */ + display: flex; + flex-direction: column; + justify-content: flex-start; +} + +/* Timeline bar na spodku */ +#battery-balancing-card > div:last-child { + margin-top: auto; +} diff --git a/custom_components/oig_cloud/www/css/features/battery-health.css b/custom_components/oig_cloud/www/css/features/battery-health.css new file mode 100644 index 00000000..1b39e268 --- /dev/null +++ b/custom_components/oig_cloud/www/css/features/battery-health.css @@ -0,0 +1,358 @@ +/** + * Battery Health Tile Styles + * Styly pro dlaždici zobrazující kvalitu baterie (SoH%, quality metrics) + */ + +/* Container */ +.battery-health-tile { +/* Nepoužíváme vlastní styly - plně respektujeme .stat-card z cards.css */ + +/* background, border, padding, atd. se nastavují inline v JS */ +} + +/* Hover efekt je již definován v .stat-card:hover z cards.css */ + +/* Header */ +.battery-health-tile .tile-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + border-bottom: 1px solid var(--divider-color, rgb(255, 255, 255, 0.1)); + padding-bottom: 12px; +} + +.battery-health-tile .tile-title { + font-size: 18px; + font-weight: 600; + color: var(--primary-text-color, #fff); + margin: 0; + display: flex; + align-items: center; + gap: 8px; +} + +.battery-health-tile .tile-icon { + font-size: 24px; +} + +/* Status Badge */ +.battery-health-status { + padding: 6px 12px; + border-radius: 16px; + font-size: 13px; + font-weight: 500; + display: inline-flex; + align-items: center; + gap: 6px; +} + +.status-excellent { + background: rgb(76, 217, 100, 0.2); + color: #4cd964; +} + +.status-good { + background: rgb(52, 199, 89, 0.2); + color: #34c759; +} + +.status-fair { + background: rgb(255, 204, 0, 0.2); + color: #fc0; +} + +.status-poor { + background: rgb(255, 69, 58, 0.2); + color: #ff453a; +} + +.status-unknown { + background: rgb(142, 142, 147, 0.2); + color: #8e8e93; +} + +/* Main Section - SoH Display */ +.battery-health-main { + margin: 20px 0; +} + +.battery-health-soh { + text-align: center; + padding: 24px 0; + background: linear-gradient(135deg, rgb(76, 217, 100, 0.05), rgb(52, 199, 89, 0.05)); + border-radius: 12px; + margin-bottom: 16px; +} + +.soh-value-large { + font-size: 64px; + font-weight: 700; + color: #4cd964; + line-height: 1; + text-shadow: 0 0 20px rgb(76, 217, 100, 0.3); +} + +.soh-unit { + font-size: 32px; + font-weight: 400; + opacity: 0.7; + margin-left: 4px; +} + +.soh-label { + margin-top: 8px; + font-size: 14px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.7)); + text-transform: uppercase; + letter-spacing: 1px; +} + +/* Waiting State */ +.battery-health-waiting { + text-align: center; + padding: 32px 20px; + background: rgb(142, 142, 147, 0.1); + border-radius: 12px; + margin-bottom: 16px; +} + +.waiting-icon { + font-size: 48px; + margin-bottom: 12px; + animation: pulse 2s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.5; } +} + +.waiting-text { + font-size: 16px; + color: var(--primary-text-color, #fff); + margin-bottom: 8px; + font-weight: 500; +} + +.waiting-hint { + font-size: 13px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.6)); + font-style: italic; +} + +/* Capacity Section */ +.battery-health-capacity { + background: rgb(255, 255, 255, 0.03); + border-radius: 8px; + padding: 16px; + margin-bottom: 16px; +} + +.capacity-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 0; + border-bottom: 1px solid rgb(255, 255, 255, 0.05); +} + +.capacity-row:last-child { + border-bottom: none; +} + +.capacity-label { + font-size: 14px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.7)); +} + +.capacity-value { + font-size: 15px; + font-weight: 600; + color: var(--primary-text-color, #fff); +} + +.capacity-loss { + margin-top: 8px; + padding-top: 12px; + border-top: 1px solid rgb(255, 69, 58, 0.2); +} + +.capacity-loss .capacity-label { + color: #ff453a; +} + +.capacity-loss .capacity-value { + color: #ff453a; +} + +/* Cycle Progress */ +.battery-health-cycle-progress { + background: linear-gradient(135deg, rgb(0, 122, 255, 0.1), rgb(10, 132, 255, 0.05)); + border-radius: 8px; + padding: 16px; + margin-bottom: 16px; + border-left: 3px solid #007aff; +} + +.cycle-indicator { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; +} + +.cycle-icon { + font-size: 20px; + animation: blink 1.5s ease-in-out infinite; +} + +@keyframes blink { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.4; } +} + +.cycle-text { + font-size: 15px; + font-weight: 600; + color: #007aff; +} + +.cycle-details { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 14px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.8)); +} + +.cycle-duration { + font-weight: 500; + color: #007aff; +} + +/* Quality Metrics */ +.battery-health-quality { + background: rgb(255, 255, 255, 0.03); + border-radius: 8px; + padding: 16px; + margin-bottom: 16px; +} + +.quality-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 0; + border-bottom: 1px solid rgb(255, 255, 255, 0.05); +} + +.quality-row:last-child { + border-bottom: none; +} + +.quality-label { + font-size: 14px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.7)); + display: flex; + align-items: center; + gap: 6px; +} + +.quality-value { + font-size: 14px; + font-weight: 600; + color: var(--primary-text-color, #fff); +} + +/* Trend Section */ +.battery-health-trend { + background: rgb(255, 255, 255, 0.03); + border-radius: 8px; + padding: 16px; + display: flex; + align-items: center; + gap: 12px; +} + +.trend-icon { + font-size: 24px; +} + +.trend-label { + font-size: 14px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.7)); +} + +.trend-value { + font-size: 15px; + font-weight: 700; +} + +.trend-confidence { + font-size: 12px; + color: var(--secondary-text-color, rgb(255, 255, 255, 0.5)); + margin-left: auto; +} + +/* Responsive Design */ +@media (width <= 768px) { + .battery-health-tile { + padding: 16px; + } + + .soh-value-large { + font-size: 48px; + } + + .soh-unit { + font-size: 24px; + } + + .tile-title { + font-size: 16px; + } + + .battery-health-status { + font-size: 12px; + padding: 4px 10px; + } +} + +/* Dark Mode Support */ +@media (prefers-color-scheme: dark) { + .battery-health-tile { + background: var(--card-background-color, #1c1c1e); + } +} + +/* Light Mode Support */ +@media (prefers-color-scheme: light) { + .battery-health-tile { + background: var(--card-background-color, #fff); + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.1); + } + + .battery-health-tile:hover { + box-shadow: 0 4px 16px rgb(0, 0, 0, 0.15); + } + + .capacity-row, + .quality-row { + border-bottom-color: rgb(0, 0, 0, 0.08); + } + + .battery-health-capacity, + .battery-health-quality, + .battery-health-trend { + background: rgb(0, 0, 0, 0.02); + } + + .battery-health-soh { + background: linear-gradient(135deg, rgb(76, 217, 100, 0.08), rgb(52, 199, 89, 0.08)); + } + + .battery-health-waiting { + background: rgb(142, 142, 147, 0.08); + } +} diff --git a/custom_components/oig_cloud/www/css/features/custom-tiles.css b/custom_components/oig_cloud/www/css/features/custom-tiles.css new file mode 100644 index 00000000..407338da --- /dev/null +++ b/custom_components/oig_cloud/www/css/features/custom-tiles.css @@ -0,0 +1,1042 @@ + /* === CUSTOM TILES === */ + .custom-tiles-section { + position: absolute; + top: 0; + left: 0; + right: 0; + pointer-events: none; + + /* Umožní klikání přes sekci na flow pod ní */ + z-index: 10; + } + + .tiles-container { + display: flex; + justify-content: space-between; + padding: 15px; + gap: 15px; + + /* Mezera mezi bloky */ + } + + .tiles-block { + pointer-events: auto; + + /* Bloky jsou klikatelné */ + flex: 0 1 350px; + + /* Flexibilní šířka, max 350px */ + max-width: 350px; + min-width: 280px; + + /* Minimální šířka aby se nezmenšovaly moc */ + } + + /* Levý blok - levý horní roh */ + #tiles-left { + margin-right: auto; + } + + /* Pravý blok - pravý horní roh */ + #tiles-right { + margin-left: auto; + } + + .tiles-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + + /* 2 sloupce místo 3 */ + gap: 5px; + } + + /* Tile base */ + .dashboard-tile { + position: relative; + background: rgb(255, 255, 255, 0.03); + backdrop-filter: blur(10px); + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 8px; + min-height: 45px; + max-height: 45px; + display: flex; + align-items: flex-end; + justify-content: center; + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.2); + } + + .dashboard-tile:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + background: rgb(255, 255, 255, 0.05); + border-color: rgb(255, 255, 255, 0.12); + } + + /* Neaktivní dlaždice (hodnota = 0) */ + .tile-inactive { + opacity: 0.4 !important; + transition: opacity 0.3s ease; + } + + .tile-inactive:hover { + opacity: 0.6 !important; + } + + /* Placeholder tile */ + .tile-placeholder { + border: 1.5px dashed rgb(255, 255, 255, 0.15); + background: rgb(255, 255, 255, 0.02); + cursor: pointer; + opacity: 0.6; + backdrop-filter: blur(5px); + } + + .tile-placeholder:hover { + border-color: rgb(66, 165, 245, 0.6); + background: rgb(66, 165, 245, 0.08); + opacity: 1; + box-shadow: 0 0 12px rgb(66, 165, 245, 0.2); + } + + .tile-placeholder-content { + text-align: center; + padding: 6px; + width: 100%; + } + + .tile-placeholder-icon { + font-size: 16px; + + /* Menší ikona */ + margin-bottom: 1px; + opacity: 0.5; + } + + .tile-placeholder-text { + font-size: 7px; + + /* Menší text */ + color: var(--text-secondary); + opacity: 0.6; + } + + /* Entity tile - původní vertikální layout (DEPRECATED) */ + .tile-entity .tile-content { + padding: 5px 8px; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + position: relative; + } + + /* Nový horizontální layout */ + .tile-content-horizontal { + padding: 6px 8px !important; + width: 100%; + height: 100%; + display: flex !important; + flex-direction: row !important; + align-items: flex-end !important; + justify-content: flex-start !important; + gap: 8px; + position: relative; + } + + /* Hlavní obsah (ikona + hodnota/stav) */ + .tile-main-content { + display: flex; + flex-direction: row; + align-items: flex-end; + gap: 8px; + flex: 1; + min-width: 0; /* allow value to shrink instead of overflowing */ + } + + /* Velká ikona vlevo */ + .tile-icon-large { + font-size: 28px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + /* Velká hodnota entity */ + .tile-value-large { + font-size: 18px; + font-weight: 700; + color: var(--text-primary); + cursor: pointer; + transition: transform 0.2s; + min-width: 0; + max-width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + line-height: 1; + } + + .tile-value-large:hover { + transform: scale(1.05); + } + + .tile-unit { + font-size: 11px; + font-weight: 500; + margin-left: 2px; + opacity: 0.8; + } + + /* Stav tlačítka */ + .tile-button-state { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); + } + + /* Název při hover */ + .tile-label-hover { + position: absolute; + bottom: 2px; + left: 8px; + font-size: 8px; + color: var(--text-secondary); + opacity: 0; + transition: opacity 0.2s; + pointer-events: none; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: calc(100% - 16px); + } + + .dashboard-tile:hover .tile-label-hover { + opacity: 0.9; + } + + /* Podporné entity v rozích */ + .tile-support { + position: absolute; + display: flex; + align-items: center; + gap: 3px; + font-size: 9px; + color: var(--text-primary); + background: rgb(0, 0, 0, 0.5); + backdrop-filter: blur(8px); + padding: 3px 5px; + border-radius: 5px; + border: 1px solid rgb(255, 255, 255, 0.1); + opacity: 0.95; + cursor: pointer; + transition: all 0.2s; + box-shadow: 0 2px 4px rgb(0, 0, 0, 0.3); + } + + .tile-support:hover { + opacity: 1; + background: rgb(0, 0, 0, 0.6); + border-color: rgb(255, 255, 255, 0.15); + box-shadow: 0 2px 6px rgb(0, 0, 0, 0.4); + } + + .tile-support-top-left { + top: 2px; + left: 2px; + } + + .tile-support-bottom-left { + bottom: 2px; + left: 2px; + } + + .tile-support-top-right { + top: 2px; + right: 2px; + } + + .tile-support-bottom-right { + bottom: 2px; + right: 2px; + } + + .tile-support .support-icon { + font-size: 11px; + } + + .tile-support .support-value { + font-weight: 600; + font-size: 9px; + display: inline-block; + max-width: 10ch; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .tile-icon { + font-size: 16px; + margin-bottom: 2px; + } + + .tile-label { + font-size: 8px; + color: var(--text-secondary); + margin-bottom: 1px; + line-height: 1.2; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 100%; + } + + /* Button specific label */ + .tile-button .tile-label { + font-size: 9px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 2px; + } + + .tile-value { + font-size: 12px; + + /* Menší hodnota */ + font-weight: 700; + color: var(--text-primary); + } + + /* Button tile */ + .tile-button .tile-content { + padding: 6px 8px; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + cursor: pointer; + transition: all 0.2s; + border-radius: 4px; + } + + .tile-button .tile-content:hover { + background: rgb(255, 255, 255, 0.1); + } + + .tile-button .tile-content:active { + transform: scale(0.98); + } + + .tile-button-active { + background: rgb(76, 175, 80, 0.2) !important; + box-shadow: inset 0 0 12px rgb(76, 175, 80, 0.25), 0 0 8px rgb(76, 175, 80, 0.15); + border: 1px solid rgb(76, 175, 80, 0.5); + } + + .tile-button-inactive { + background: rgb(158, 158, 158, 0.08); + border: 1px solid rgb(158, 158, 158, 0.12); + box-shadow: inset 0 0 6px rgb(158, 158, 158, 0.08); + } + + /* Custom tooltip pro elementy s title atributem v tilech + Pozn.: na touch zařízeních může `:hover` "zůstat viset", proto tooltip jen pro hover+fine pointer. */ + @media (hover: hover) and (pointer: fine) { + .dashboard-tile [title] { + position: relative; + cursor: help; + } + + .dashboard-tile [title]:hover::before { + content: attr(title); + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%) translateY(-8px); + background: rgb(0, 0, 0, 0.95); + color: #fff; + padding: 8px 12px; + border-radius: 6px; + font-size: 11px; + font-weight: 400; + line-height: 1.4; + white-space: pre-wrap; + z-index: 1000; + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.4); + min-width: 200px; + max-width: 400px; + text-align: left; + pointer-events: none; + font-family: 'Courier New', monospace; + } + + .dashboard-tile [title]:hover::after { + content: ''; + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%) translateY(-2px); + border: 6px solid transparent; + border-top-color: rgb(0, 0, 0, 0.95); + z-index: 999; + pointer-events: none; + } + } + + .tile-state { + font-size: 7px; + + /* Menší text */ + font-weight: 600; + margin-top: 1px; + opacity: 0.8; + } + + /* Remove button */ + .tile-remove { + position: absolute; + top: 1px; + right: 1px; + background: rgb(244, 67, 54, 0.9); + color: white; + border: none; + border-radius: 50%; + width: 14px; + + /* Menší */ + height: 14px; + font-size: 9px; + + /* Menší */ + cursor: pointer; + opacity: 0; + transition: opacity 0.2s; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + z-index: 2; + } + + /* Edit button */ + .tile-edit { + position: absolute; + top: 1px; + right: 17px; + + /* Vedle remove buttonu */ + background: rgb(66, 165, 245, 0.9); + color: white; + border: none; + border-radius: 50%; + width: 14px; + height: 14px; + font-size: 9px; + cursor: pointer; + opacity: 0; + transition: opacity 0.2s, transform 0.2s; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + z-index: 2; + } + + .dashboard-tile:hover .tile-remove, + .dashboard-tile:hover .tile-edit { + opacity: 1; + } + + .tile-remove:hover { + background: rgb(244, 67, 54, 1); + transform: scale(1.1); + } + + .tile-edit:hover { + background: rgb(66, 165, 245, 1); + transform: scale(1.1); + } + + /* Error tile */ + .tile-error { + color: #FF6B6B; + font-size: 9px; + text-align: center; + padding: 8px; + line-height: 1.2; + opacity: 0.9; + } + + /* Dialog overlay */ + .tile-dialog-overlay { + position: fixed; + inset: 0; + background: rgb(0, 0, 0, 0.7); + z-index: 10000; + display: flex; + align-items: center; + justify-content: center; + } + + .tile-dialog { + background: var(--bg-primary); + border: 1px solid var(--border-primary); + border-radius: 12px; + width: 90%; + max-width: 600px; + max-height: 80vh; + display: flex; + flex-direction: column; + box-shadow: 0 8px 32px rgb(0, 0, 0, 0.5); + } + + .tile-dialog-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px; + border-bottom: 1px solid var(--border-primary); + } + + .tile-dialog-header h2 { + margin: 0; + font-size: 20px; + color: var(--text-primary); + } + + .tile-dialog-close { + background: none; + border: none; + color: var(--text-secondary); + cursor: pointer; + padding: 4px; + display: flex; + align-items: center; + transition: color 0.2s; + } + + .tile-dialog-close:hover { + color: var(--text-primary); + } + + .tile-dialog-close svg { + fill: currentcolor; + } + + /* Dialog tabs */ + .tile-dialog-tabs { + display: flex; + gap: 0; + background: var(--bg-secondary); + border-bottom: 1px solid var(--border-primary); + } + + .tile-tab { + flex: 1; + padding: 12px; + background: transparent; + border: none; + border-bottom: 3px solid transparent; + cursor: pointer; + color: var(--text-secondary); + font-size: 14px; + font-weight: 600; + transition: all 0.2s; + } + + .tile-tab:hover { + background: rgb(255, 255, 255, 0.05); + color: var(--text-primary); + } + + .tile-tab.active { + color: var(--text-primary); + border-bottom-color: rgb(66, 165, 245, 0.8); + background: var(--bg-primary); + } + + /* Dialog content */ + .tile-dialog-content { + padding: 20px; + overflow-y: auto; + flex: 1; + } + + .tile-tab-content { + display: none; + } + + .tile-tab-content.active { + display: block; + } + + /* Form elements */ + .form-group { + margin-bottom: 16px; + } + + .form-group label { + display: block; + margin-bottom: 6px; + font-size: 13px; + color: var(--text-secondary); + font-weight: 600; + } + + .form-input { + width: 100%; + padding: 10px; + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 6px; + color: var(--text-primary); + font-size: 14px; + font-family: inherit; + } + + .form-input:focus { + outline: none; + border-color: rgb(66, 165, 245, 0.6); + box-shadow: 0 0 0 3px rgb(66, 165, 245, 0.1); + } + + .form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + } + + /* Entity list */ + .entity-list { + max-height: 300px; + overflow-y: auto; + border: 1px solid var(--border-primary); + border-radius: 6px; + background: var(--bg-secondary); + margin-bottom: 16px; + } + + .entity-item { + display: flex; + align-items: center; + padding: 8px 12px; + border-bottom: 1px solid var(--border-primary); + transition: background 0.2s; + } + + .entity-item:last-child { + border-bottom: none; + } + + .entity-item:hover { + background: rgb(255, 255, 255, 0.05); + } + + .entity-item input[type="radio"] { + margin-right: 10px; + cursor: pointer; + } + + .entity-item label { + flex: 1; + cursor: pointer; + margin: 0; + } + + .entity-item-content { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + } + + .entity-item-name { + font-size: 13px; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 6px; + } + + .entity-item-icon { + opacity: 0.7; + } + + .entity-item-value { + font-size: 12px; + color: var(--text-secondary); + } + + /* Support entity lists */ + .support-entity-list { + max-height: 200px; + margin-top: 8px; + margin-bottom: 8px; + } + + .support-entity-item { + cursor: pointer; + padding: 6px 10px; + } + + .support-entity-item:hover { + background: rgb(66, 165, 245, 0.1); + } + + /* Icon suggestions */ + .icon-suggestions { + margin-top: 8px; + padding: 8px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 8px; + background: rgb(20, 20, 25, 0.95); + backdrop-filter: blur(20px); + max-height: 240px; + overflow-y: auto; + box-shadow: 0 8px 24px rgb(0, 0, 0, 0.4); + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 4px; + } + + .icon-suggestion-item { + padding: 8px 12px; + cursor: pointer; + border-radius: 6px; + transition: all 0.2s; + display: flex; + align-items: center; + gap: 8px; + background: rgb(255, 255, 255, 0.03); + border: 1px solid rgb(255, 255, 255, 0.08); + } + + .icon-suggestion-item:hover { + background: rgb(66, 165, 245, 0.15); + border-color: rgb(66, 165, 245, 0.4); + transform: translateY(-1px); + box-shadow: 0 2px 8px rgb(66, 165, 245, 0.2); + } + + .icon-suggestion-item ha-icon { + color: var(--text-primary); + flex-shrink: 0; + } + + .icon-name { + font-size: 11px; + color: var(--text-secondary); + font-family: monospace; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .icon-preview { + font-size: 12px; + color: var(--text-secondary); + font-family: monospace; + } + + /* Dialog footer */ + .tile-dialog-footer { + padding: 15px 20px; + border-top: 1px solid var(--border-primary); + display: flex; + justify-content: flex-end; + gap: 10px; + } + + .btn { + padding: 10px 20px; + border-radius: 6px; + border: none; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; + } + + .btn-primary { + background: linear-gradient(135deg, rgb(66, 165, 245, 0.8), rgb(33, 150, 243, 0.8)); + color: white; + } + + .btn-primary:hover { + background: linear-gradient(135deg, rgb(66, 165, 245, 1), rgb(33, 150, 243, 1)); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgb(66, 165, 245, 0.4); + } + + .btn-secondary { + background: var(--bg-secondary); + color: var(--text-secondary); + border: 1px solid var(--border-primary); + } + + .btn-secondary:hover { + background: var(--button-hover); + color: var(--text-primary); + } + + /* Icon Input Wrapper */ + .icon-input-wrapper { + display: flex; + align-items: center; + gap: 8px; + position: relative; + } + + .icon-preview-box { + width: 42px; + height: 42px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 6px; + background: rgb(255, 255, 255, 0.03); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.2s; + flex-shrink: 0; + } + + .icon-preview-box:hover { + background: rgb(66, 165, 245, 0.1); + border-color: rgb(66, 165, 245, 0.4); + transform: scale(1.05); + } + + .icon-preview-box ha-icon { + --mdc-icon-size: 24px; + + color: var(--text-primary); + } + + .icon-preview-placeholder { + font-size: 20px; + opacity: 0.5; + } + + .icon-input-field { + flex: 1; + pointer-events: none; + background: rgb(255, 255, 255, 0.02) !important; + } + + .icon-picker-btn { + width: 36px; + height: 36px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 6px; + background: rgb(66, 165, 245, 0.1); + color: var(--text-primary); + font-size: 18px; + cursor: pointer; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .icon-picker-btn:hover { + background: rgb(66, 165, 245, 0.2); + border-color: rgb(66, 165, 245, 0.4); + transform: scale(1.05); + } + + /* Icon Picker Modal */ + .icon-picker-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgb(0, 0, 0, 0.7); + backdrop-filter: blur(5px); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + } + + .icon-picker-content { + background: rgb(20, 20, 25, 0.98); + backdrop-filter: blur(20px); + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 12px; + width: 90%; + max-width: 800px; + max-height: 80vh; + display: flex; + flex-direction: column; + box-shadow: 0 12px 40px rgb(0, 0, 0, 0.5); + } + + .icon-picker-header { + padding: 20px; + border-bottom: 1px solid rgb(255, 255, 255, 0.1); + display: flex; + justify-content: space-between; + align-items: center; + } + + .icon-picker-header h3 { + margin: 0; + color: var(--text-primary); + font-size: 18px; + } + + .icon-picker-close { + background: none; + border: none; + color: var(--text-secondary); + font-size: 24px; + cursor: pointer; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + transition: all 0.2s; + } + + .icon-picker-close:hover { + background: rgb(244, 67, 54, 0.1); + color: rgb(244, 67, 54, 1); + } + + .icon-picker-search { + padding: 15px 20px; + border-bottom: 1px solid rgb(255, 255, 255, 0.1); + } + + .icon-picker-body { + padding: 20px; + overflow-y: auto; + flex: 1; + } + + .icon-category { + margin-bottom: 24px; + } + + .icon-category-title { + margin: 0 0 12px; + font-size: 13px; + color: var(--text-secondary); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + } + + .icon-category-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 8px; + } + + .icon-picker-item { + padding: 12px 8px; + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 8px; + background: rgb(255, 255, 255, 0.03); + cursor: pointer; + transition: all 0.2s; + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + } + + .icon-picker-item:hover { + background: rgb(66, 165, 245, 0.15); + border-color: rgb(66, 165, 245, 0.4); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(66, 165, 245, 0.2); + } + + .icon-picker-item ha-icon { + --mdc-icon-size: 28px; + + color: var(--text-primary); + display: inline-flex !important; + width: 28px; + height: 28px; + flex-shrink: 0; + } + + .icon-picker-name { + font-size: 10px; + color: var(--text-secondary); + text-align: center; + word-break: break-word; + } + + /* Mobile responsive */ + @media (width <= 768px) { + .tiles-container { + grid-template-columns: 1fr; + } + + .tiles-grid { + grid-template-columns: repeat(2, 1fr); + } + + .tile-dialog { + width: 95%; + max-height: 90vh; + } + + .form-row { + grid-template-columns: 1fr; + } + + .icon-picker-content { + width: 95%; + max-height: 90vh; + } + + .icon-category-grid { + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + } + + /* ČHMÚ Warning - mobile responsiveness */ + .header { + flex-wrap: wrap; + gap: 10px; + } + + .chmu-warning-badge { + order: 3; + width: 100%; + justify-content: center; + padding: 10px 16px; + } + + .chmu-text { + white-space: normal; + text-align: center; + } + + .chmu-modal-content { + width: 95%; + max-height: 90vh; + } + + .chmu-warning-info { + grid-template-columns: 1fr; + } + + /* Boiler tab mobile */ + .boiler-status-grid, + .profile-grid { + grid-template-columns: repeat(2, 1fr); + } + } diff --git a/custom_components/oig_cloud/www/css/features/detail-tabs.css b/custom_components/oig_cloud/www/css/features/detail-tabs.css new file mode 100644 index 00000000..8975ec82 --- /dev/null +++ b/custom_components/oig_cloud/www/css/features/detail-tabs.css @@ -0,0 +1,832 @@ +/** + * Detail Tabs Styles + * FÁZE 6: Timeline Storage & Detail Tabs Frontend + * Styling for mode blocks and summary tiles in Yesterday/Today/Tomorrow tabs + */ + +/* Tab Content Container */ +.detail-tab-content { + padding: 20px; + max-width: 1200px; + margin: 0 auto; +} + +.detail-summary-tiles { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 16px; + margin-bottom: 24px; +} + +.summary-tile { + background: transparent; + border: 1px solid var(--border-color, #444); + border-radius: 4px; + padding: 16px; + text-align: center; + transition: transform 0.2s, border-color 0.2s; +} + +.summary-tile:hover { + transform: translateY(-2px); + border-color: var(--primary-color, #2196F3); +} + +.summary-tile.metric-tile { + text-align: left; + display: flex; + flex-direction: column; + gap: 6px; +} + +.summary-tile.metric-tile .tile-icon { + font-size: 1.6rem; + line-height: 1; +} + +.summary-tile.metric-tile .tile-label { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-secondary, #bbb); + text-transform: uppercase; + letter-spacing: 0.3px; +} + +.summary-tile.meta-tile { + min-height: 120px; + padding: 18px; + text-align: center; +} + +@media (width <= 960px) { + .detail-summary-tiles { + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + } + + .summary-tile { + padding: 14px; + } +} + +.summary-tile-label { + font-size: 0.875rem; + color: var(--text-secondary, #999); + margin-bottom: 8px; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.summary-tile-value { + font-size: 1.75rem; + font-weight: 700; + color: var(--text-primary, #fff); + margin-bottom: 4px; +} + +/* Adherence Color Coding */ +.summary-tile.adherence-good .summary-tile-value { + color: #4CAF50; /* Green for ≥80% */ +} + +.summary-tile.adherence-warning .summary-tile-value { + color: #FF9800; /* Orange for 50-79% */ +} + +.summary-tile.adherence-poor .summary-tile-value { + color: #F44336; /* Red for <50% */ +} + +.summary-tile-icon { + font-size: 1.2rem; + margin-right: 8px; +} + +.metric-plan, +.metric-actual { + display: flex; + align-items: center; + gap: 6px; + font-size: 0.9rem; +} + +.metric-plan { + color: var(--text-secondary, #bbb); +} + +.metric-actual { + color: var(--text-primary, #fff); +} + +.metric-label { + font-size: 0.8rem; + text-transform: uppercase; + letter-spacing: 0.5px; + color: var(--text-secondary, #999); +} + +.metric-value { + font-weight: 600; + color: var(--text-primary, #fff); +} + +.metric-context { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 2px 8px; + border-radius: 999px; + font-size: 0.75rem; + font-weight: 600; + margin-left: 6px; + border: 1px solid transparent; +} + +.metric-context--positive { + color: #4CAF50; + background: rgb(76, 175, 80, 0.12); + border-color: rgb(76, 175, 80, 0.4); +} + +.metric-context--negative { + color: #F44336; + background: rgb(244, 67, 54, 0.12); + border-color: rgb(244, 67, 54, 0.4); +} + +.metric-context--neutral { + color: #FFC107; + background: rgb(255, 193, 7, 0.12); + border-color: rgb(255, 193, 7, 0.4); +} + +.metric-delta { + padding: 2px 8px; + border-radius: 999px; + font-size: 0.8rem; + font-weight: 600; + background: rgb(255, 255, 255, 0.08); +} + +.metric-delta.delta-positive { + color: #f44336; +} + +.metric-delta.delta-negative { + color: #4caf50; +} + +/* ======================================== + 48H COMPARE TAB (včera + dnes) + ======================================== */ +.compare-tab { + display: flex; + flex-direction: column; + gap: 18px; +} + +.compare-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + flex-wrap: wrap; +} + +.compare-title { + font-size: 1.05rem; + font-weight: 600; + color: var(--text-primary, #fff); +} + +.compare-sub { + font-size: 0.85rem; + color: var(--text-secondary, #b0b0b0); + margin-top: 4px; +} + +.compare-legend { + display: flex; + align-items: center; + gap: 12px; + font-size: 0.8rem; + color: var(--text-secondary, #b0b0b0); +} + +.legend-item { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.legend-line { + display: inline-block; + width: 22px; + height: 2px; + border-radius: 2px; + background: rgba(255, 255, 255, 0.7); +} + +.legend-line.legend-planned { + background: transparent; + border-top: 2px dashed rgba(255, 255, 255, 0.45); +} + +.compare-grid { + display: grid; + grid-template-columns: 1fr; + gap: 16px; +} + +.compare-card { + background: rgba(15, 20, 30, 0.35); + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 10px; + padding: 12px 14px; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.compare-card-title { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary, #fff); + margin-bottom: 8px; +} + +.compare-card canvas { + width: 100% !important; + height: 240px !important; + max-height: 240px !important; +} + +@media (width <= 900px) { + .compare-card canvas { + height: 220px !important; + max-height: 220px !important; + } +} + +/* Mode Blocks Container */ +.mode-blocks-container { + display: flex; + flex-direction: column; + gap: 16px; +} + +/* Mode Section (pro DNES tab - uplynulé/aktuální/plán) */ +.mode-section { + margin-bottom: 32px; +} + +.mode-section .section-header { + font-size: 1.1rem; + font-weight: 600; + color: var(--text-primary, #fff); + margin-bottom: 16px; + padding-bottom: 8px; + border-bottom: 2px solid var(--border-color, #444); +} + +.mode-section.current-section .section-header { + color: #2196F3; + border-bottom-color: #2196F3; +} + +/* Individual Mode Block */ +.mode-block { + background: transparent; + border: 1px solid var(--border-color, #444); + border-left: 4px solid var(--border-color, #444); + border-radius: 4px; + padding: 12px 16px; + transition: border-color 0.3s, background 0.2s; +} + +.mode-block:hover { + background: rgb(255, 255, 255, 0.02); +} + +/* Match Indicators - pouze border-left barva */ +.mode-block.match-yes { + border-left-color: #4CAF50; +} + +.mode-block.match-no { + border-left-color: #F44336; +} + +.mode-block.match-neutral { + border-left-color: #FFC107; +} + +/* Mode Block Header */ +.mode-block-header, +.block-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 12px; + padding-bottom: 8px; + border-bottom: 1px solid var(--border-color, #333); + flex-wrap: wrap; + gap: 8px; +} + +.mode-block-time, +.block-time { + font-size: 0.95rem; + font-weight: 600; + color: var(--text-primary, #fff); +} + +.block-duration { + font-size: 0.85rem; + font-weight: 400; + color: var(--text-secondary, #999); + margin-left: 8px; +} + +/* Single-row content layout */ +.block-content-row { + display: flex; + flex-wrap: wrap; + gap: 16px 24px; + align-items: center; +} + +/* Individual items */ +.block-item { + display: flex; + align-items: center; + gap: 8px; +} + +.block-item.block-reasons { + align-items: flex-start; + gap: 10px; + width: 100%; +} + +.reason-list { + display: flex; + flex-direction: column; + gap: 6px; + font-weight: 500; +} + +.reason-line { + display: flex; + gap: 8px; + align-items: center; + color: var(--text-secondary, #cfcfcf); + font-size: 0.85rem; +} + +.reason-time { + display: inline-flex; + min-width: 48px; + font-weight: 600; + color: var(--text-primary, #fff); +} + +.item-label { + font-size: 0.85rem; + color: var(--text-secondary, #999); + white-space: nowrap; +} + +.item-value { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-primary, #fff); + display: flex; + align-items: center; + gap: 6px; +} + +.metric-value-pair { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.metric-arrow { + font-size: 0.85rem; + color: var(--text-secondary, #999); +} + +/* Mode badges */ +.mode-badge { + padding: 4px 10px; + border-radius: 12px; + font-size: 0.8rem; + font-weight: 500; + white-space: nowrap; + display: inline-flex; + align-items: center; + gap: 4px; + color: #fff; +} + +.mode-badge.mode-planned { + opacity: 0.7; +} + +.mode-arrow, +.cost-arrow { + font-size: 0.85rem; + color: var(--text-secondary, #999); + margin: 0 4px; +} + +/* Cost values */ +.cost-actual { + font-weight: 600; +} + +.cost-planned { + font-weight: 500; + opacity: 0.8; +} + +.cost-delta { + display: inline-flex; + align-items: center; + padding: 2px 8px; + border-radius: 10px; + font-size: 0.75rem; + font-weight: 600; + margin-left: 8px; +} + +.cost-delta.cost-higher { + background: rgb(244, 67, 54, 0.15); + color: #F44336; +} + +.cost-delta.cost-lower { + background: rgb(76, 175, 80, 0.15); + color: #4CAF50; +} + +.cost-delta.cost-equal { + background: rgb(158, 158, 158, 0.15); + color: var(--text-secondary, #999); +} + +/* Match badge in header */ +.block-match { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 10px; + border-radius: 12px; + font-size: 0.85rem; + font-weight: 600; +} + +.block-match.match-yes { + background: rgb(76, 175, 80, 0.15); + color: #4CAF50; +} + +.block-match.match-no { + background: rgb(244, 67, 54, 0.15); + color: #F44336; +} + +.block-match.match-neutral { + background: rgb(255, 193, 7, 0.15); + color: #FFC107; +} + +/* Responsive Design */ + +/* Energy Stats Toggle */ +.energy-stats-toggle { + margin-top: 12px; + cursor: pointer; + padding: 8px; + background: var(--background-secondary, #f9f9f9); + border-radius: 6px; + display: flex; + align-items: center; + justify-content: space-between; + transition: background 0.2s; +} + +.energy-stats-toggle:hover { + background: var(--background-hover, #e9e9e9); +} + +.energy-stats-toggle-label { + font-size: 0.875rem; + font-weight: 600; + color: var(--text-primary, #000); +} + +.energy-stats-toggle-icon { + font-size: 0.875rem; + color: var(--text-secondary, #666); + transition: transform 0.3s; +} + +.energy-stats-toggle.expanded .energy-stats-toggle-icon { + transform: rotate(90deg); +} + +/* Energy Stats Content */ +.energy-stats-content { + margin-top: 8px; + padding: 12px; + background: var(--card-background, #fff); + border: 1px solid var(--border-color, #e0e0e0); + border-radius: 6px; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); + gap: 12px; +} + +.energy-stat-item { + display: flex; + flex-direction: column; + gap: 4px; +} + +.energy-stat-label { + font-size: 0.75rem; + color: var(--text-secondary, #666); +} + +.energy-stat-value { + font-size: 1rem; + font-weight: 600; + color: var(--text-primary, #000); +} + +/* Responsive Design */ +@media (width <= 768px) { + .detail-summary-tiles { + grid-template-columns: 1fr 1fr; + } + + .block-content-row { + gap: 12px 16px; + } + + .block-item { + flex: 1 1 45%; + } +} + +@media (width <= 480px) { + .detail-tab-content { + padding: 12px; + } + + .detail-summary-tiles { + grid-template-columns: 1fr; + } + + .summary-tile-value { + font-size: 1.5rem; + } + + .mode-block { + padding: 10px 12px; + } + + .block-content-row { + gap: 8px; + } + + .block-item { + flex: 1 1 100%; + } +} + +/* Dark Mode Support */ +@media (prefers-color-scheme: dark) { + .summary-tile, + .mode-block { + border-color: var(--border-color-dark, #444); + } + + .summary-tile:hover { + border-color: var(--primary-color, #2196F3); + } + + .summary-tile-value, + .mode-block-time, + .block-time, + .item-value { + color: var(--text-primary-dark, #fff); + } + + .summary-tile-label, + .item-label, + .mode-arrow, + .cost-arrow { + color: var(--text-secondary-dark, #999); + } +} + +/* ================================================================ + COMPACT BLOCK STYLES - Used by dashboard-timeline.js + ================================================================ */ + +/* These styles are for the timeline dialog popup, not for detail-tabs */ + +/* Keep these minimal and separate from detail-tabs styles above */ + +/* ================================================================ + SMART METRIC TILES - Nový kompaktní design pro summary + ================================================================ */ + +.summary-tiles-smart { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 16px; + margin-bottom: 18px; +} + +.summary-tile-smart { + background: rgb(12, 17, 30, 0.6); + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 10px; + padding: 18px; + transition: transform 0.2s ease, border-color 0.2s ease; +} + +.summary-tile-smart:hover { + border-color: rgb(33, 150, 243, 0.4); + transform: translateY(-2px); +} + +.summary-tile-smart .tile-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + margin-bottom: 6px; +} + +.summary-tile-smart .tile-title { + display: flex; + align-items: center; + gap: 8px; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.5px; + color: rgb(255, 255, 255, 0.65); + font-weight: 600; +} + +.summary-tile-smart .tile-icon { + font-size: 18px; +} + +.summary-tile-smart .tile-value-label { + font-size: 10px; + letter-spacing: 0.4px; + text-transform: uppercase; + color: rgb(255, 255, 255, 0.45); +} + +.summary-tile-smart .tile-value-big { + font-size: 26px; + font-weight: 600; + color: var(--text-primary, #fff); + line-height: 1.2; +} + +.summary-tile-smart .tile-value-big .unit { + font-size: 0.95rem; + margin-left: 4px; + opacity: 0.7; + font-weight: 400; +} + +.summary-tile-smart .tile-sub-row { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 6px; + font-size: 0.85rem; + color: rgb(255, 255, 255, 0.7); +} + +.summary-tile-smart .tile-sub-row.hint-row { + font-style: italic; + font-size: 0.8rem; + opacity: 0.7; +} + +.tile-delta { + margin-top: 10px; + padding: 6px 10px; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 0.85rem; + border: 1px solid rgb(255, 255, 255, 0.08); + background: rgb(255, 255, 255, 0.03); + color: rgb(255, 255, 255, 0.8); +} + +.tile-delta span:last-child { + font-weight: 600; +} + +.tile-delta.delta-better { + color: #9ccc65; + border-color: rgb(156, 204, 101, 0.5); + background: rgb(156, 204, 101, 0.12); +} + +.tile-delta.delta-worse { + color: #ff8a80; + border-color: rgb(255, 138, 128, 0.5); + background: rgb(255, 138, 128, 0.12); +} + +.tile-delta.delta-neutral { + color: rgb(255, 255, 255, 0.75); + border-color: rgb(255, 255, 255, 0.08); +} + +/* Kompaktní meta info pod kartami */ +.summary-meta-compact { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + padding: 8px 16px; + background: rgb(255, 255, 255, 0.02); + border-radius: 6px; + font-size: 13px; + color: rgb(255, 255, 255, 0.7); + margin-bottom: 16px; +} + +.summary-meta-compact .meta-item { + display: flex; + align-items: center; + gap: 4px; +} + +.summary-meta-compact .meta-separator { + color: rgb(255, 255, 255, 0.3); +} + +/* Responsive */ +@media (width <= 768px) { + .summary-tiles-smart { + grid-template-columns: repeat(2, 1fr); + } + + .summary-tile-smart .tile-value-big { + font-size: 20px; + } +} + +@media (width <= 480px) { + .summary-tiles-smart { + grid-template-columns: 1fr; + } +} + +.plan-status-banner { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 14px; + border-radius: 8px; + margin: 10px 0 18px; + font-weight: 600; + font-size: 0.9rem; + background: rgb(255, 255, 255, 0.05); + border: 1px solid rgb(255, 255, 255, 0.08); +} + +.plan-status-banner span { + display: inline-flex; + align-items: center; +} + +.plan-status-banner.plan-hybrid { + border-color: rgb(0, 188, 212, 0.4); + background: rgb(0, 188, 212, 0.08); +} + + +.plan-status-banner .plan-hint { + font-weight: 400; + opacity: 0.7; +} + +.comparison-section { + margin-top: 16px; +} diff --git a/custom_components/oig_cloud/www/css/features/today-plan-tile.css b/custom_components/oig_cloud/www/css/features/today-plan-tile.css new file mode 100644 index 00000000..061c483c --- /dev/null +++ b/custom_components/oig_cloud/www/css/features/today-plan-tile.css @@ -0,0 +1,351 @@ +/** + * Today Plan Tile Styles + * + * Styly pro dlaždici "Dnes - Plnění plánu" + * Phase 2.9 - Implementace dle PLAN_VS_ACTUAL_UX_REDESIGN.md + * + * @version 1.0.0 + * @status IMPLEMENTOVÁNO - NEZASAZENO (čeká na review) + */ + +/* ======================================================================== + Hlavní kontejner dlaždice + ======================================================================== */ + +.today-plan-tile { + cursor: pointer; + transition: transform 0.2s ease, box-shadow 0.2s ease; + padding: 12px; + height: 200px; + display: flex; + flex-direction: column; + background: var(--card-background-color, #fff); + border-radius: 8px; + box-shadow: 0 2px 4px rgb(0, 0, 0, 0.1); +} + +.today-plan-tile:hover { + transform: translateY(-2px); + box-shadow: 0 4px 8px rgb(0, 0, 0, 0.15); +} + +.today-plan-tile--empty { + cursor: default; + justify-content: center; + align-items: center; +} + +.today-plan-tile--empty:hover { + transform: none; + box-shadow: 0 2px 4px rgb(0, 0, 0, 0.1); +} + +/* ======================================================================== + Header s názvem a časem + ======================================================================== */ + +.tile-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; + padding-bottom: 6px; + border-bottom: 1px solid var(--divider-color, #e0e0e0); +} + +.tile-title { + font-weight: 600; + font-size: 14px; + color: var(--primary-text-color, #333); +} + +.tile-time { + font-size: 12px; + color: var(--secondary-text-color, #757575); + font-variant-numeric: tabular-nums; +} + +/* ======================================================================== + Mini chart container + ======================================================================== */ + +.mini-chart-container { + height: 100px; + margin-bottom: 8px; + position: relative; +} + +.mini-chart-container canvas { + width: 100% !important; + height: 100% !important; +} + +/* ======================================================================== + Metriky (3 sloupce) + ======================================================================== */ + +.tile-metrics { + display: flex; + gap: 8px; + margin-bottom: 8px; +} + +.metric { + flex: 1; + text-align: center; + padding: 4px; + border-radius: 4px; + background: var(--card-background-color, #fafafa); +} + +.metric-label { + font-size: 10px; + color: var(--secondary-text-color, #757575); + margin-bottom: 2px; + font-weight: 500; +} + +.metric-value { + font-size: 13px; + font-weight: 700; + color: var(--primary-text-color, #333); + margin-bottom: 2px; + font-variant-numeric: tabular-nums; +} + +.metric-sublabel { + font-size: 9px; + color: var(--secondary-text-color, #999); + font-weight: 500; +} + +/* Barevné označení metrik */ +.metric.better .metric-value, +.metric.better .metric-sublabel { + color: var(--success-color, #4CAF50); +} + +.metric.worse .metric-value, +.metric.worse .metric-sublabel { + color: var(--error-color, #f44336); +} + +.metric.neutral .metric-value { + color: var(--secondary-text-color, #757575); +} + +/* ======================================================================== + EOD predikce + ======================================================================== */ + +.tile-prediction { + font-size: 12px; + text-align: center; + margin-bottom: 8px; + padding: 6px 8px; + background: var(--primary-background-color, #f5f5f5); + border-radius: 4px; + line-height: 1.4; +} + +.tile-prediction strong { + font-weight: 700; + font-size: 13px; +} + +.tile-prediction .prediction-plan { + color: var(--secondary-text-color, #757575); + font-size: 11px; + margin: 0 4px; +} + +.tile-prediction .better { + color: var(--success-color, #4CAF50); + font-weight: 600; +} + +.tile-prediction .worse { + color: var(--error-color, #f44336); + font-weight: 600; +} + +.tile-prediction .neutral { + color: var(--secondary-text-color, #757575); +} + +/* ======================================================================== + Footer s Detail linkem a auto-refresh info + ======================================================================== */ + +.tile-footer { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 11px; + color: var(--secondary-text-color, #999); + margin-top: auto; + padding-top: 4px; +} + +.detail-link { + color: var(--primary-color, #03a9f4); + font-weight: 600; + transition: color 0.2s; +} + +.detail-link:hover { + color: var(--primary-color-dark, #0277bd); + text-decoration: underline; +} + +.auto-refresh { + opacity: 0.7; + font-size: 10px; +} + +/* ======================================================================== + Empty state + ======================================================================== */ + +.tile-empty-state { + text-align: center; + color: var(--secondary-text-color, #999); +} + +.tile-empty-state p { + margin: 8px 0; + font-size: 13px; +} + +.tile-empty-hint { + font-size: 11px; + opacity: 0.7; +} + +/* ======================================================================== + Confidence level indicators (optional) + ======================================================================== */ + +.today-plan-tile[data-confidence="low"]::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 3px; + height: 100%; + background: linear-gradient(to bottom, + var(--warning-color, #ff9800) 0%, + transparent 100%); + border-radius: 8px 0 0 8px; +} + +.today-plan-tile[data-confidence="medium"]::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 3px; + height: 100%; + background: linear-gradient(to bottom, + var(--info-color, #2196f3) 0%, + transparent 100%); + border-radius: 8px 0 0 8px; +} + +.today-plan-tile[data-confidence="good"]::before, +.today-plan-tile[data-confidence="high"]::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 3px; + height: 100%; + background: linear-gradient(to bottom, + var(--success-color, #4CAF50) 0%, + transparent 100%); + border-radius: 8px 0 0 8px; +} + +/* ======================================================================== + Responsive adjustments + ======================================================================== */ + +@media (width <= 768px) { + .today-plan-tile { + height: auto; + min-height: 200px; + } + + .tile-metrics { + flex-direction: column; + gap: 4px; + } + + .metric { + display: flex; + justify-content: space-between; + align-items: center; + text-align: left; + } + + .metric-label { + flex: 1; + } + + .metric-value { + flex: 0 0 auto; + } +} + +/* ======================================================================== + Dark mode support + ======================================================================== */ + +@media (prefers-color-scheme: dark) { + .today-plan-tile { + background: var(--card-background-color, #1e1e1e); + box-shadow: 0 2px 4px rgb(0, 0, 0, 0.3); + } + + .today-plan-tile:hover { + box-shadow: 0 4px 8px rgb(0, 0, 0, 0.4); + } + + .tile-header { + border-bottom-color: var(--divider-color, #333); + } + + .tile-title { + color: var(--primary-text-color, #e0e0e0); + } + + .metric { + background: var(--card-background-color, #2a2a2a); + } + + .metric-value { + color: var(--primary-text-color, #e0e0e0); + } + + .tile-prediction { + background: var(--primary-background-color, #2a2a2a); + } +} + +/* ======================================================================== + Animation pro auto-refresh + ======================================================================== */ + +@keyframes pulse-refresh { + 0%, 100% { + opacity: 0.7; + } + + 50% { + opacity: 1; + } +} + +.auto-refresh.refreshing { + animation: pulse-refresh 1s ease-in-out; +} diff --git a/custom_components/oig_cloud/www/css/utils/animations.css b/custom_components/oig_cloud/www/css/utils/animations.css new file mode 100644 index 00000000..64cc7c7d --- /dev/null +++ b/custom_components/oig_cloud/www/css/utils/animations.css @@ -0,0 +1,316 @@ +/* =================================== + ANIMATIONS & KEYFRAMES + + Všechny animace používané v dashboardu + =================================== */ + +/* === FADE IN === */ +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +/* === SLIDE UP === */ +@keyframes slideUp { + from { + transform: translateY(20px); + opacity: 0; + } + + to { + transform: translateY(0); + opacity: 1; + } +} + +/* === POP IN === */ +@keyframes popIn { + 0% { + transform: scale(0); + opacity: 0; + } + + 50% { + transform: scale(1.1); + } + + 100% { + transform: scale(1); + opacity: 1; + } +} + +/* === SPIN === */ +@keyframes spin { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + +/* === PULSE ANIMATIONS === */ + +@keyframes pulse-warning { + 0%, 100% { + opacity: 1; + } + + 50% { + opacity: 0.5; + } +} + +@keyframes pulse-balancing { + 0%, 100% { + box-shadow: 0 0 0 0 rgb(33, 150, 243, 0.7); + } + + 50% { + box-shadow: 0 0 0 10px rgb(33, 150, 243, 0); + } +} + +@keyframes pulse-charging { + 0%, 100% { + box-shadow: 0 0 0 0 rgb(76, 175, 80, 0.7); + } + + 50% { + box-shadow: 0 0 0 10px rgb(76, 175, 80, 0); + } +} + +@keyframes pulse-hot { + 0%, 100% { + opacity: 1; + } + + 50% { + opacity: 0.5; + } +} + +@keyframes pulse-cold { + 0%, 100% { + opacity: 1; + } + + 50% { + opacity: 0.5; + } +} + +@keyframes pulse-pending { + 0%, 100% { + box-shadow: 0 0 0 0 rgb(255, 152, 0, 0.6); + border-color: rgb(255, 152, 0, 0.4); + } + + 50% { + box-shadow: 0 0 0 8px rgb(255, 152, 0, 0); + border-color: rgb(255, 152, 0, 0.7); + } +} + +@keyframes pulse-mode-changing { + 0%, 100% { + box-shadow: 0 0 0 0 rgb(156, 39, 176, 0.6); + border-color: rgb(156, 39, 176, 0.4); + } + + 50% { + box-shadow: 0 0 0 8px rgb(156, 39, 176, 0); + border-color: rgb(156, 39, 176, 0.7); + } +} + +@keyframes warning-border { + 0%, 100% { + border-color: rgb(255, 152, 0, 0.3); + } + + 50% { + border-color: rgb(255, 152, 0, 0.8); + } +} + +/* === VALUE UPDATE HIGHLIGHT (FE only) === */ +@keyframes value-update-flash { + 0% { + text-shadow: none; + filter: none; + } + + 35% { + text-shadow: 0 0 12px var(--info-text, #42a5f5); + filter: brightness(1.15); + } + + 100% { + text-shadow: none; + filter: none; + } +} + +@keyframes tile-update-glow { + 0% { + opacity: 0; + transform: scale(0.98); + } + + 25% { + opacity: 0.85; + transform: scale(1); + } + + 100% { + opacity: 0; + transform: scale(1.02); + } +} + +/* === SPLIT-FLAP (TRAIN BOARD) VALUE CHANGE === */ +@keyframes oig-flip-top { + to { + transform: rotateX(-90deg); + } +} + +@keyframes oig-flip-bottom { + to { + transform: rotateX(0deg); + } +} + +.oig-flipboard { + display: inline-block; + max-width: 100%; + overflow: hidden; + vertical-align: baseline; + white-space: nowrap; + font-variant-numeric: tabular-nums; +} + +.oig-flip-cell { + position: relative; + display: inline-block; + overflow: hidden; + vertical-align: baseline; + perspective: 900px; +} + +.oig-flip-size { + display: inline-block; + opacity: 0; + user-select: none; + pointer-events: none; +} + +.oig-flip-face { + position: absolute; + inset: 0; + display: inline-flex; + align-items: center; + justify-content: center; + line-height: inherit; + backface-visibility: hidden; + transform-style: preserve-3d; + will-change: transform; +} + +.oig-flip-static-top { + clip-path: inset(0 0 50% 0); +} + +.oig-flip-static-bottom { + clip-path: inset(50% 0 0 0); +} + +.oig-flip-anim-top { + clip-path: inset(0 0 50% 0); + transform-origin: bottom; + animation: oig-flip-top 180ms ease-in forwards; + filter: brightness(1.08); +} + +.oig-flip-anim-bottom { + clip-path: inset(50% 0 0 0); + transform-origin: top; + transform: rotateX(90deg); + animation: oig-flip-bottom 200ms ease-out 180ms forwards; + filter: brightness(0.92); +} + +@media (prefers-reduced-motion: reduce) { + .oig-flip-anim-top, + .oig-flip-anim-bottom { + animation: none !important; + transform: none !important; + } +} + +/* === SHIMMER === */ +@keyframes shimmer { + 0% { + background-position: -1000px 0; + } + + 100% { + background-position: 1000px 0; + } +} + +/* === UTILITY CLASSES === */ +.animate-fade-in { + animation: fadeIn 0.3s ease; +} + +.animate-slide-up { + animation: slideUp 0.3s ease; +} + +.animate-pop-in { + animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); +} + +.animate-spin { + animation: spin 0.8s linear infinite; +} + +.animate-pulse-warning { + animation: pulse-warning 2s ease-in-out infinite; +} + +.animate-pulse-balancing { + animation: pulse-balancing 2s ease-in-out infinite; +} + +.animate-pulse-charging { + animation: pulse-charging 2s ease-in-out infinite; +} + +.animate-value-update { + animation: value-update-flash 450ms ease-out; +} + +/* Highlight the whole tile when any child value changes */ +.dashboard-tile.animate-tile-update::after { + content: ''; + position: absolute; + inset: 0; + border-radius: inherit; + pointer-events: none; + opacity: 0; + box-shadow: + 0 0 0 2px var(--info-text, #42a5f5), + 0 0 20px 0 var(--info-bg, rgb(33, 150, 243, 0.2)); + animation: tile-update-glow 650ms ease-out; +} diff --git a/custom_components/oig_cloud/www/css/variables.css b/custom_components/oig_cloud/www/css/variables.css new file mode 100644 index 00000000..099b5121 --- /dev/null +++ b/custom_components/oig_cloud/www/css/variables.css @@ -0,0 +1,1031 @@ + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + /* === THEME VARIABLES === */ + + /* Tmavý režim (výchozí) */ + body { + /* Pozadí */ + --bg-primary: linear-gradient(135deg, #0a0e27 0%, #1a1f3a 100%); + --bg-secondary: rgb(255, 255, 255, 0.05); + --bg-tertiary: rgb(255, 255, 255, 0.03); + --bg-hover: rgb(255, 255, 255, 0.1); + --bg-active: rgb(76, 175, 80, 0.3); + --bg-disabled: rgb(255, 255, 255, 0.02); + + /* Text */ + --text-primary: #fff; + --text-secondary: rgb(255, 255, 255, 0.7); + --text-tertiary: rgb(255, 255, 255, 0.5); + --text-disabled: rgb(255, 255, 255, 0.3); + + /* Borders */ + --border-primary: rgb(255, 255, 255, 0.15); + --border-secondary: rgb(255, 255, 255, 0.1); + --border-tertiary: rgb(255, 255, 255, 0.05); + + /* Shadows */ + --shadow-color: rgb(0, 0, 0, 0.4); + --shadow-strong: rgb(0, 0, 0, 0.7); + --shadow-light: rgb(0, 0, 0, 0.2); + + /* Dialog */ + --dialog-bg: #1a1f3a; + --dialog-border: rgb(156, 39, 176, 0.5); + + /* Komponenty specifické barvy */ + --solar-bg: linear-gradient(135deg, rgb(255, 213, 79, 0.15) 0%, rgb(255, 179, 0, 0.08) 100%); + --solar-border: rgb(255, 213, 79, 0.4); + --solar-accent: rgb(255, 193, 7, 0.95); + --grid-bg: linear-gradient(135deg, rgb(66, 165, 245, 0.15) 0%, rgb(33, 150, 243, 0.08) 100%); + --grid-border: rgb(66, 165, 245, 0.4); + --battery-bg: linear-gradient(135deg, rgb(76, 175, 80, 0.15) 0%, rgb(56, 142, 60, 0.08) 100%); + --battery-border: rgb(76, 175, 80, 0.4); + --house-bg: linear-gradient(135deg, rgb(240, 98, 146, 0.15) 0%, rgb(233, 30, 99, 0.08) 100%); + --house-border: rgb(240, 98, 146, 0.4); + --inverter-bg: linear-gradient(135deg, rgb(149, 117, 205, 0.15) 0%, rgb(126, 87, 194, 0.08) 100%); + --inverter-border: rgb(149, 117, 205, 0.4); + + /* === LAYOUT POSITIONS - Default for Desktop === */ + + /* Solar - Top Center */ + --solar-top: 40px; + --solar-left: 50%; + --solar-transform: translateX(-50%); + + /* Grid - Left Middle */ + --grid-top: 50%; + --grid-left: 80px; + --grid-transform: translateY(-50%); + + /* Battery - Bottom Center */ + --battery-top: auto; + --battery-bottom: 120px; + --battery-left: 50%; + --battery-transform: translateX(-50%); + + /* House - Right Middle */ + --house-top: 50%; + --house-right: 80px; + --house-transform: translateY(-50%); + + /* Inverter - Center Hub */ + --inverter-top: 50%; + --inverter-left: 50%; + --inverter-transform: translate(-50%, -50%); + + /* Status colors */ + --status-charging-bg: rgb(33, 150, 243, 0.3); + --status-charging-text: #42a5f5; + --status-discharging-bg: rgb(255, 152, 0, 0.3); + --status-discharging-text: #ffb74d; + --status-idle-bg: rgb(76, 175, 80, 0.3); + --status-idle-text: #81c784; + --status-importing-bg: rgb(244, 67, 54, 0.3); + --status-importing-text: #e57373; + --status-exporting-bg: rgb(76, 175, 80, 0.3); + --status-exporting-text: #81c784; + + /* UI elements */ + --dialog-bg: linear-gradient(135deg, rgb(30, 41, 59, 0.98) 0%, rgb(15, 23, 42, 0.98) 100%); + --dialog-border: rgb(66, 165, 245, 0.4); + --button-bg: rgb(255, 255, 255, 0.1); + --button-border: rgb(255, 255, 255, 0.2); + --button-hover: rgb(255, 255, 255, 0.2); + --button-active-border: rgb(76, 175, 80, 0.6); + --input-bg: rgb(255, 255, 255, 0.05); + --input-border: rgb(255, 255, 255, 0.2); + --input-focus-border: #42a5f5; + + /* Warnings and alerts */ + --warning-bg: rgb(255, 193, 7, 0.2); + --warning-text: #ffc107; + --warning-bg-transparent: rgb(255, 193, 7, 0.6); + --warning-text-transparent: rgb(255, 193, 7, 0.9); + --error-bg: rgb(244, 67, 54, 0.2); + --error-text: #e57373; + --error-bg-transparent: rgb(244, 67, 54, 0.8); + --error-text-transparent: rgb(244, 67, 54, 1); + --info-bg: rgb(33, 150, 243, 0.2); + --info-text: #42a5f5; + + /* Animace - transparentní varianty */ + --status-idle-bg-transparent: rgb(59, 130, 246, 0.7); + --status-idle-bg-semi: rgb(59, 130, 246, 0.4); + + /* Indicator badges */ + --indicator-warning-bg: linear-gradient(135deg, rgb(255, 193, 7, 0.95), rgb(255, 152, 0, 0.95)); + --indicator-warning-border: rgb(255, 193, 7, 0.8); + --indicator-warning-shadow: rgb(255, 193, 7, 0.4); + --indicator-info-bg: linear-gradient(135deg, rgb(33, 150, 243, 0.95), rgb(25, 118, 210, 0.95)); + --indicator-info-border: rgb(33, 150, 243, 0.8); + --indicator-info-shadow: rgb(33, 150, 243, 0.4); + --indicator-text: #1a1a2e; + --spinner-border: rgb(26, 26, 46, 0.3); + --spinner-border-top: #1a1a2e; + + /* Tooltips */ + --tooltip-bg: rgb(0, 0, 0, 0.95); + --tooltip-bg-secondary: rgb(50, 50, 50, 0.95); + --tooltip-border: rgb(0, 0, 0, 0.95); + --tooltip-border-secondary: rgb(50, 50, 50, 0.95); + + /* Control panel */ + --control-panel-bg: rgb(10, 14, 39, 0.98); + --control-panel-border: rgb(66, 165, 245, 0.3); + + /* Success/Error text colors */ + --success-text: #4caf50; + --error-text-alt: #f33; + + /* Header */ + --header-gradient: linear-gradient(135deg, #ffd54f 0%, #ffb300 100%); + + /* Toast notifications */ + --toast-body-text: rgb(255, 255, 255, 0.85); + --toast-success-border: rgb(76, 175, 80, 0.6); + --toast-success-border-light: rgb(76, 175, 80, 0.2); + --toast-success-shadow: 0 20px 60px rgb(0, 0, 0, 0.7), 0 0 0 1px rgb(76, 175, 80, 0.2); + --toast-error-border: rgb(244, 67, 54, 0.6); + --toast-error-border-light: rgb(244, 67, 54, 0.2); + --toast-error-shadow: 0 20px 60px rgb(0, 0, 0, 0.7), 0 0 0 1px rgb(244, 67, 54, 0.2); + --toast-warning-border: rgb(255, 152, 0, 0.6); + --toast-warning-border-light: rgb(255, 152, 0, 0.2); + --toast-warning-shadow: 0 20px 60px rgb(0, 0, 0, 0.7), 0 0 0 1px rgb(255, 152, 0, 0.2); + + /* Modal */ + --modal-backdrop: rgb(0, 0, 0, 0.7); + --modal-bg: linear-gradient(135deg, rgb(30, 41, 59, 0.98) 0%, rgb(15, 23, 42, 0.98) 100%); + --modal-border: rgb(100, 116, 139, 0.3); + --modal-shadow: 0 20px 60px rgb(0, 0, 0, 0.5); + --modal-header-text: rgb(255, 255, 255, 0.95); + --modal-body-text: rgb(255, 255, 255, 0.8); + --modal-warning-bg: rgb(255, 152, 0, 0.1); + --modal-warning-border: rgb(255, 152, 0, 0.3); + --modal-warning-text: rgb(255, 193, 7, 0.95); + --modal-checkbox-bg: rgb(100, 116, 139, 0.1); + --modal-checkbox-label: rgb(255, 255, 255, 0.9); + --modal-button-cancel-bg: rgb(100, 116, 139, 0.2); + --modal-button-cancel-hover: rgb(100, 116, 139, 0.3); + --modal-button-cancel-text: rgb(255, 255, 255, 0.8); + --modal-button-confirm-bg: linear-gradient(135deg, rgb(59, 130, 246, 0.8) 0%, rgb(29, 78, 216, 0.8) 100%); + --modal-button-confirm-hover: linear-gradient(135deg, rgb(59, 130, 246, 1) 0%, rgb(29, 78, 216, 1) 100%); + --modal-button-confirm-shadow: 0 4px 12px rgb(59, 130, 246, 0.4); + + /* Shield states */ + --shield-idle-bg: rgb(76, 175, 80, 0.2); + --shield-idle-border: rgb(76, 175, 80, 0.4); + --shield-idle-text: #4caf50; + --shield-idle-shadow: 0 0 10px rgb(76, 175, 80, 0.3), 0 0 20px rgb(76, 175, 80, 0.5); + --shield-pending-bg: rgb(255, 193, 7, 0.4); + --shield-pending-border: rgb(255, 193, 7, 0.7); + --shield-pending-text: #ffc107; + --shield-pending-shadow: 0 0 10px rgb(255, 193, 7, 0.3), 0 0 20px rgb(255, 193, 7, 0.5); + --shield-processing-bg: rgb(66, 165, 245, 0.5); + --shield-processing-border: rgb(66, 165, 245, 0.8); + --shield-processing-text: #42a5f5; + --shield-processing-shadow: 0 0 15px rgb(66, 165, 245, 0.4); + --shield-button-active-bg: rgb(76, 175, 80, 0.5); + --shield-button-active-border: rgb(76, 175, 80, 0.8); + --shield-button-active-shadow: 0 0 15px rgb(76, 175, 80, 0.4); + --shield-button-active-check: #81c784; + --shield-queue-bg: rgb(255, 193, 7, 0.3); + + /* Light text variants */ + --text-label: rgb(255, 255, 255, 0.7); + --table-header-bg: rgb(255, 255, 255, 0.05); + --table-border: rgb(255, 255, 255, 0.1); + --table-border-light: rgb(255, 255, 255, 0.05); + + /* Drop shadows */ + --shadow-success: rgb(76, 175, 80, 0.8); + --shadow-error: rgb(244, 67, 54, 1); + --shadow-error-weak: rgb(244, 67, 54, 0.8); + --shadow-error-light: rgb(244, 67, 54, 0.4); + --shadow-warning: rgb(255, 193, 7, 0.8); + --shadow-info: rgb(33, 150, 243, 0.8); + --shadow-white: rgb(255, 255, 255, 0.8); + + /* Status borders and shadows */ + --status-discharging-border: rgb(255, 152, 0, 0.6); + --status-discharging-shadow: rgb(255, 152, 0, 0.4); + --status-charging-border: rgb(33, 150, 243, 0.6); + --status-charging-shadow: rgb(33, 150, 243, 0.4); + + /* Battery gauge gradient */ + --battery-gauge-gradient: linear-gradient(90deg, #f44336, #ff9800, #ffeb3b, #8bc34a, #4caf50); + + /* Button states */ + --button-active-bg: rgb(76, 175, 80, 0.4); + --button-disabled-bg: rgb(128, 128, 128, 0.2); + --button-disabled-border: rgb(128, 128, 128, 0.3); + --button-disabled-text: rgb(255, 255, 255, 0.4); + } + + /* Světlý režim */ + body.light-theme { + /* Pozadí */ + --bg-primary: linear-gradient(135deg, #f0f4f8 0%, #e2e8f0 100%); + --bg-secondary: rgb(255, 255, 255, 0.85); + --bg-tertiary: rgb(255, 255, 255, 0.6); + --bg-hover: rgb(0, 0, 0, 0.1); + --bg-active: rgb(76, 175, 80, 0.2); + --bg-disabled: rgb(0, 0, 0, 0.02); + + /* Text */ + --text-primary: #1a202c; + --text-secondary: #4a5568; + --text-tertiary: #718096; + --text-disabled: #cbd5e0; + + /* Borders */ + --border-primary: rgb(0, 0, 0, 0.15); + --border-secondary: rgb(0, 0, 0, 0.1); + --border-tertiary: rgb(0, 0, 0, 0.05); + + /* Shadows */ + --shadow-color: rgb(0, 0, 0, 0.1); + --shadow-strong: rgb(0, 0, 0, 0.2); + --shadow-light: rgb(0, 0, 0, 0.05); + + /* Komponenty specifické barvy */ + --solar-bg: linear-gradient(135deg, rgb(255, 245, 220, 0.95) 0%, rgb(255, 235, 180, 0.9) 100%); + --solar-border: rgb(255, 193, 7, 0.5); + --solar-accent: rgb(255, 160, 0, 0.95); + --grid-bg: linear-gradient(135deg, rgb(227, 242, 253, 0.95) 0%, rgb(187, 222, 251, 0.9) 100%); + --grid-border: rgb(66, 165, 245, 0.5); + --battery-bg: linear-gradient(135deg, rgb(232, 245, 233, 0.95) 0%, rgb(200, 230, 201, 0.9) 100%); + --battery-border: rgb(76, 175, 80, 0.5); + --house-bg: linear-gradient(135deg, rgb(252, 228, 236, 0.95) 0%, rgb(248, 187, 208, 0.9) 100%); + --house-border: rgb(240, 98, 146, 0.5); + --inverter-bg: linear-gradient(135deg, rgb(237, 231, 246, 0.95) 0%, rgb(209, 196, 233, 0.9) 100%); + --inverter-border: rgb(149, 117, 205, 0.5); + + /* Status colors */ + --status-charging-bg: rgb(33, 150, 243, 0.2); + --status-charging-text: #1565c0; + --status-discharging-bg: rgb(255, 152, 0, 0.2); + --status-discharging-text: #e65100; + --status-idle-bg: rgb(76, 175, 80, 0.2); + --status-idle-text: #2e7d32; + --status-importing-bg: rgb(244, 67, 54, 0.2); + --status-importing-text: #c62828; + --status-exporting-bg: rgb(76, 175, 80, 0.2); + --status-exporting-text: #2e7d32; + + /* UI elements */ + --dialog-bg: linear-gradient(135deg, rgb(255, 255, 255, 0.98) 0%, rgb(240, 244, 248, 0.98) 100%); + --dialog-border: rgb(66, 165, 245, 0.3); + --button-bg: rgb(0, 0, 0, 0.05); + --button-border: rgb(0, 0, 0, 0.15); + --button-hover: rgb(0, 0, 0, 0.1); + --button-active-border: rgb(76, 175, 80, 0.6); + --input-bg: rgb(0, 0, 0, 0.05); + --input-border: rgb(0, 0, 0, 0.15); + --input-focus-border: #1976d2; + + /* Warnings and alerts */ + --warning-bg: rgb(255, 193, 7, 0.15); + --warning-text: #f57c00; + --warning-bg-transparent: rgb(255, 193, 7, 0.6); + --warning-text-transparent: rgb(255, 193, 7, 0.9); + --error-bg: rgb(244, 67, 54, 0.15); + --error-text: #c62828; + --error-bg-transparent: rgb(244, 67, 54, 0.8); + --error-text-transparent: rgb(244, 67, 54, 1); + --info-bg: rgb(33, 150, 243, 0.15); + --info-text: #1976d2; + + /* Animace - transparentní varianty */ + --status-idle-bg-transparent: rgb(59, 130, 246, 0.7); + --status-idle-bg-semi: rgb(59, 130, 246, 0.4); + + /* Indicator badges */ + --indicator-warning-bg: linear-gradient(135deg, rgb(255, 193, 7, 0.95), rgb(255, 152, 0, 0.95)); + --indicator-warning-border: rgb(255, 193, 7, 0.8); + --indicator-warning-shadow: rgb(255, 193, 7, 0.4); + --indicator-info-bg: linear-gradient(135deg, rgb(33, 150, 243, 0.95), rgb(25, 118, 210, 0.95)); + --indicator-info-border: rgb(33, 150, 243, 0.8); + --indicator-info-shadow: rgb(33, 150, 243, 0.4); + --indicator-text: #fff; + --spinner-border: rgb(255, 255, 255, 0.3); + --spinner-border-top: #fff; + + /* Tooltips */ + --tooltip-bg: rgb(255, 255, 255, 0.98); + --tooltip-bg-secondary: rgb(240, 240, 240, 0.98); + --tooltip-border: rgb(0, 0, 0, 0.1); + --tooltip-border-secondary: rgb(0, 0, 0, 0.05); + + /* Control panel */ + --control-panel-bg: rgb(255, 255, 255, 0.98); + --control-panel-border: rgb(66, 165, 245, 0.3); + + /* Success/Error text colors */ + --success-text: #2e7d32; + --error-text-alt: #c62828; + + /* Header */ + --header-gradient: linear-gradient(135deg, #ff8f00 0%, #f57c00 100%); + + /* Toast notifications */ + --toast-body-text: rgb(0, 0, 0, 0.75); + --toast-success-border: rgb(46, 125, 50, 0.5); + --toast-success-border-light: rgb(46, 125, 50, 0.15); + --toast-success-shadow: 0 8px 32px rgb(0, 0, 0, 0.15), 0 0 0 1px rgb(46, 125, 50, 0.2); + --toast-error-border: rgb(198, 40, 40, 0.5); + --toast-error-border-light: rgb(198, 40, 40, 0.15); + --toast-error-shadow: 0 8px 32px rgb(0, 0, 0, 0.15), 0 0 0 1px rgb(198, 40, 40, 0.2); + --toast-warning-border: rgb(245, 124, 0, 0.5); + --toast-warning-border-light: rgb(245, 124, 0, 0.15); + --toast-warning-shadow: 0 8px 32px rgb(0, 0, 0, 0.15), 0 0 0 1px rgb(245, 124, 0, 0.2); + + /* Modal */ + --modal-backdrop: rgb(0, 0, 0, 0.5); + --modal-bg: linear-gradient(135deg, rgb(255, 255, 255, 0.98) 0%, rgb(245, 245, 245, 0.98) 100%); + --modal-border: rgb(66, 165, 245, 0.3); + --modal-shadow: 0 8px 32px rgb(0, 0, 0, 0.2); + --modal-header-text: rgb(0, 0, 0, 0.87); + --modal-body-text: rgb(0, 0, 0, 0.7); + --modal-warning-bg: rgb(255, 152, 0, 0.08); + --modal-warning-border: rgb(245, 124, 0, 0.25); + --modal-warning-text: rgb(245, 124, 0, 0.95); + --modal-checkbox-bg: rgb(0, 0, 0, 0.03); + --modal-checkbox-label: rgb(0, 0, 0, 0.8); + --modal-button-cancel-bg: rgb(0, 0, 0, 0.05); + --modal-button-cancel-hover: rgb(0, 0, 0, 0.1); + --modal-button-cancel-text: rgb(0, 0, 0, 0.7); + --modal-button-confirm-bg: linear-gradient(135deg, rgb(25, 118, 210, 0.9) 0%, rgb(13, 71, 161, 0.9) 100%); + --modal-button-confirm-hover: linear-gradient(135deg, rgb(25, 118, 210, 1) 0%, rgb(13, 71, 161, 1) 100%); + --modal-button-confirm-shadow: 0 4px 12px rgb(25, 118, 210, 0.3); + + /* Shield states */ + --shield-idle-bg: rgb(46, 125, 50, 0.15); + --shield-idle-border: rgb(46, 125, 50, 0.4); + --shield-idle-text: #2e7d32; + --shield-idle-shadow: 0 0 10px rgb(46, 125, 50, 0.2), 0 0 20px rgb(46, 125, 50, 0.3); + --shield-pending-bg: rgb(245, 124, 0, 0.2); + --shield-pending-border: rgb(245, 124, 0, 0.5); + --shield-pending-text: #f57c00; + --shield-pending-shadow: 0 0 10px rgb(245, 124, 0, 0.2), 0 0 20px rgb(245, 124, 0, 0.3); + --shield-processing-bg: rgb(25, 118, 210, 0.2); + --shield-processing-border: rgb(25, 118, 210, 0.5); + --shield-processing-text: #1976d2; + --shield-processing-shadow: 0 0 15px rgb(25, 118, 210, 0.3); + --shield-button-active-bg: rgb(46, 125, 50, 0.3); + --shield-button-active-border: rgb(46, 125, 50, 0.6); + --shield-button-active-shadow: 0 0 15px rgb(46, 125, 50, 0.3); + --shield-button-active-check: #2e7d32; + --shield-queue-bg: rgb(245, 124, 0, 0.15); + + /* Light text variants */ + --text-label: rgb(0, 0, 0, 0.6); + --table-header-bg: rgb(0, 0, 0, 0.03); + --table-border: rgb(0, 0, 0, 0.08); + --table-border-light: rgb(0, 0, 0, 0.04); + + /* Drop shadows */ + --shadow-success: rgb(76, 175, 80, 0.8); + --shadow-error: rgb(244, 67, 54, 1); + --shadow-error-weak: rgb(244, 67, 54, 0.8); + --shadow-error-light: rgb(244, 67, 54, 0.4); + --shadow-warning: rgb(255, 193, 7, 0.8); + --shadow-info: rgb(33, 150, 243, 0.8); + --shadow-white: rgb(0, 0, 0, 0.2); + + /* Status borders and shadows */ + --status-discharging-border: rgb(255, 152, 0, 0.6); + --status-discharging-shadow: rgb(255, 152, 0, 0.4); + --status-charging-border: rgb(33, 150, 243, 0.6); + --status-charging-shadow: rgb(33, 150, 243, 0.4); + + /* Battery gauge gradient */ + --battery-gauge-gradient: linear-gradient(90deg, #f44336, #ff9800, #ffeb3b, #8bc34a, #4caf50); + + /* Button states */ + --button-active-bg: rgb(76, 175, 80, 0.4); + --button-disabled-bg: rgb(200, 200, 200, 0.2); + --button-disabled-border: rgb(180, 180, 180, 0.3); + --button-disabled-text: rgb(0, 0, 0, 0.4); + } + + body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background: var(--bg-primary); + color: var(--text-primary); + overflow: hidden auto; + min-height: 100vh; + transition: background 0.3s ease, color 0.3s ease; + } + + .container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; + padding-bottom: 40px; + position: relative; + } + + /* Header */ + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; + } + + .header h1 { + font-size: 24px; + font-weight: 700; + background: var(--header-gradient); + background-clip: text; + -webkit-text-fill-color: transparent; + } + + .time { + font-size: 16px; + font-weight: 600; + opacity: 0.8; + } + + .last-update { + font-size: 12px; + opacity: 0.6; + font-style: italic; + } + + /* ČHMÚ Weather Warning Badge */ + .chmu-warning-badge { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 16px; + border-radius: 20px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + user-select: none; + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.1); + } + + .chmu-warning-badge:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.15); + } + + .chmu-warning-badge.severity-0 { + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + color: white; + } + + .chmu-warning-badge.severity-1 { + background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%); + color: #78350f; + } + + .chmu-warning-badge.severity-2 { + background: linear-gradient(135deg, #fb923c 0%, #ea580c 100%); + color: white; + } + + .chmu-warning-badge.severity-3 { + background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); + color: white; + animation: pulse-warning 2s ease-in-out infinite; + } + + .chmu-warning-badge.severity-4 { + background: linear-gradient(135deg, #a855f7 0%, #9333ea 100%); + color: white; + animation: pulse-warning 1.5s ease-in-out infinite; + } + + @keyframes pulse-warning { + 0%, + 100% { + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.1); + } + + 50% { + box-shadow: 0 4px 20px rgb(239, 68, 68, 0.4); + } + } + + .chmu-icon { + font-size: 18px; + display: flex; + align-items: center; + } + + .chmu-text { + white-space: nowrap; + } + + /* ČHMÚ Warning Modal */ + .chmu-modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgb(0, 0, 0, 0.7); + backdrop-filter: blur(4px); + z-index: 10000; + align-items: center; + justify-content: center; + animation: fadeIn 0.3s ease; + } + + .chmu-modal.active { + display: flex; + } + + @keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } + } + + .chmu-modal-content { + background: var(--card-background); + border-radius: 16px; + max-width: 600px; + width: 90%; + max-height: 80vh; + overflow: hidden; + box-shadow: 0 20px 60px rgb(0, 0, 0, 0.3); + animation: slideUp 0.3s ease; + } + + @keyframes slideUp { + from { + transform: translateY(50px); + opacity: 0; + } + + to { + transform: translateY(0); + opacity: 1; + } + } + + .chmu-modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 24px; + border-bottom: 1px solid var(--border-color); + background: var(--header-gradient); + } + + .chmu-modal-header h3 { + margin: 0; + font-size: 20px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-modal-close { + background: none; + border: none; + font-size: 28px; + color: var(--text-color); + cursor: pointer; + padding: 0; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + transition: all 0.2s ease; + } + + .chmu-modal-close:hover { + background: rgb(0, 0, 0, 0.1); + transform: rotate(90deg); + } + + .chmu-modal-body { + padding: 24px; + overflow-y: auto; + max-height: calc(80vh - 80px); + } + + .chmu-warning-item { + background: var(--node-background); + border-radius: 12px; + padding: 16px; + margin-bottom: 16px; + border-left: 4px solid var(--accent-color); + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.15); + position: relative; + overflow: hidden; + } + + .chmu-warning-item:last-child { + margin-bottom: 0; + } + + .chmu-warning-item.severity-1 { + border-left-color: #fbbf24; + background: linear-gradient(135deg, + rgb(251, 191, 36, 0.1) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-2 { + border-left-color: #fb923c; + background: linear-gradient(135deg, + rgb(251, 146, 60, 0.15) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-3 { + border-left-color: #ef4444; + background: linear-gradient(135deg, + rgb(239, 68, 68, 0.2) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-4 { + border-left-color: #a855f7; + background: linear-gradient(135deg, + rgb(168, 85, 247, 0.2) 0%, + var(--node-background) 40% + ); + } + + /* TOP warning - zvýrazněné pozadí */ + .chmu-warning-item.chmu-warning-top { + box-shadow: 0 4px 16px rgb(0, 0, 0, 0.25); + border-width: 6px; + } + + .chmu-warning-item.chmu-warning-top.severity-1 { + background: linear-gradient(135deg, + rgb(251, 191, 36, 0.18) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-2 { + background: linear-gradient(135deg, + rgb(251, 146, 60, 0.25) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-3 { + background: linear-gradient(135deg, + rgb(239, 68, 68, 0.3) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-4 { + background: linear-gradient(135deg, + rgb(168, 85, 247, 0.3) 0%, + var(--node-background) 50% + ); + } + + /* Compact warnings - menší sekce */ + .chmu-warning-item.chmu-warning-compact { + padding: 12px; + margin-bottom: 8px; + border-width: 3px; + } + + .chmu-warning-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; + } + + .chmu-warning-icon { + font-size: 32px; + } + + .chmu-warning-title { + flex: 1; + } + + .chmu-warning-title h4 { + margin: 0 0 4px; + font-size: 18px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-warning-severity { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 4px 12px; + border-radius: 12px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + } + + .chmu-warning-severity.severity-1 { + background: #fef3c7; + color: #92400e; + } + + .chmu-warning-severity.severity-2 { + background: #fed7aa; + color: #7c2d12; + } + + .chmu-warning-severity.severity-3 { + background: #fee2e2; + color: #991b1b; + } + + .chmu-warning-severity.severity-4 { + background: #f3e8ff; + color: #6b21a8; + } + + .chmu-warning-info { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; + margin-bottom: 12px; + } + + .chmu-info-item { + display: flex; + align-items: flex-start; + gap: 8px; + } + + .chmu-info-icon { + font-size: 16px; + margin-top: 2px; + } + + .chmu-info-content { + flex: 1; + } + + .chmu-info-label { + font-size: 11px; + text-transform: uppercase; + font-weight: 600; + opacity: 0.6; + margin-bottom: 2px; + } + + .chmu-info-value { + font-size: 14px; + font-weight: 500; + color: var(--text-color); + } + + .chmu-warning-description { + background: rgb(0, 0, 0, 0.1); + border-radius: 8px; + padding: 12px; + margin-bottom: 12px; + } + + .chmu-warning-description p { + margin: 0 0 8px; + font-size: 13px; + line-height: 1.5; + color: var(--text-color); + } + + .chmu-warning-description p:last-child { + margin-bottom: 0; + } + + .chmu-warning-description strong { + display: block; + font-size: 11px; + text-transform: uppercase; + font-weight: 700; + opacity: 0.7; + margin-bottom: 6px; + } + + /* Header sekce s dalšími výstrahami */ + .chmu-all-warnings-header { + margin: 24px 0 16px; + padding: 12px 0; + border-top: 2px solid rgb(255, 255, 255, 0.1); + border-bottom: 2px solid rgb(255, 255, 255, 0.1); + } + + .chmu-all-warnings-header h5 { + margin: 0; + font-size: 14px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.8; + color: var(--text-color); + } + + /* Compact info řádky */ + .chmu-warning-info-compact { + margin-top: 8px; + display: flex; + flex-direction: column; + gap: 6px; + } + + .chmu-info-row { + display: flex; + justify-content: space-between; + gap: 8px; + font-size: 13px; + } + + .chmu-info-row .chmu-info-label { + opacity: 0.7; + font-weight: 500; + } + + .chmu-info-row .chmu-info-value { + font-weight: 600; + color: var(--text-color); + } + + .chmu-no-warnings { + text-align: center; + padding: 40px 20px; + } + + .chmu-no-warnings-icon { + font-size: 64px; + margin-bottom: 16px; + } + + .chmu-no-warnings h4 { + margin: 0 0 8px; + font-size: 20px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-no-warnings p { + margin: 0; + font-size: 14px; + opacity: 0.7; + } + + /* Energy Flow Canvas */ + .flow-canvas { + position: relative; + width: 100%; + max-width: 100%; + + /* Celá šířka - bylo 900px */ + margin: 0 auto; + height: 1000px; + } + + /* SVG for connections */ + .connections { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; + } + + .flow-line { + stroke-width: 3; + stroke-linecap: round; + fill: none; + opacity: 0.6; + } + + /* Components - Kompaktní a široké */ + .node { + position: absolute; + background: var(--bg-secondary); + border: 2px solid var(--border-primary); + border-radius: 12px; + padding: 10px 14px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + backdrop-filter: blur(10px); + z-index: 2; + min-width: 130px; + max-width: 250px; + } + + .node:hover { + background: var(--bg-hover); + border-color: var(--border-primary); + transform: scale(1.05); + box-shadow: 0 10px 40px var(--shadow-color); + } + + /* Solar - Top Center - S VĚTŠÍM ODSTUPEM */ + .solar { + top: var(--solar-top); + left: var(--solar-left); + transform: var(--solar-transform); + border-color: var(--solar-border); + background: var(--solar-bg); + } + + .solar:hover { + transform: var(--solar-transform) scale(1.05); + } + + /* Grid - Left Middle - S VĚTŠÍM ODSTUPEM */ + .grid-node { + top: var(--grid-top); + left: var(--grid-left); + transform: var(--grid-transform); + border-color: var(--grid-border); + background: var(--grid-bg); + } + + .grid-node:hover { + transform: var(--grid-transform) scale(1.05); + } + + /* Battery - Bottom Center - S VELKÝM ODSTUPEM */ + .battery { + top: var(--battery-top); + bottom: var(--battery-bottom); + left: var(--battery-left); + transform: var(--battery-transform); + border-color: var(--battery-border); + background: var(--battery-bg); + } + + .battery:hover { + transform: var(--battery-transform) scale(1.05); + } + + /* House - Right Middle - S VĚTŠÍM ODSTUPEM */ + .house { + top: var(--house-top); + right: var(--house-right); + transform: var(--house-transform); + border-color: var(--house-border); + background: var(--house-bg); + } + + .house:hover { + transform: var(--house-transform) scale(1.05); + } + + /* Center Hub - Inverter */ + .inverter { + top: var(--inverter-top); + left: var(--inverter-left); + transform: var(--inverter-transform); + border-color: var(--inverter-border); + background: var(--inverter-bg); + min-width: 240px; + + /* Rozšířeno pro lepší zobrazení notifikací a přetoků */ + max-width: 240px; + } + + .inverter:hover { + transform: var(--inverter-transform) scale(1.05); + } + + +/* === FALLBACK VALUES === */ +.fallback-value { + opacity: 0.5; + font-style: italic; + color: var(--text-secondary, #888) !important; + cursor: help; +} + +.fallback-value::after { + content: ' ⚠'; + font-size: 0.8em; + margin-left: 2px; +} diff --git a/custom_components/oig_cloud/www/dashboard-styles.css b/custom_components/oig_cloud/www/dashboard-styles.css new file mode 100644 index 00000000..2aa3a5fd --- /dev/null +++ b/custom_components/oig_cloud/www/dashboard-styles.css @@ -0,0 +1,7843 @@ +/* === DASHBOARD SPECIFIC STYLES === */ + + /* Header */ + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; + } + + .header h1 { + font-size: 24px; + font-weight: 700; + background: var(--header-gradient); + background-clip: text; + -webkit-text-fill-color: transparent; + } + + .time { + font-size: 16px; + font-weight: 600; + opacity: 0.8; + } + + .last-update { + font-size: 12px; + opacity: 0.6; + font-style: italic; + } + + /* ČHMÚ Weather Warning Badge */ + .chmu-warning-badge { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 16px; + border-radius: 20px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + user-select: none; + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.1); + } + + .chmu-warning-badge:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.15); + } + + .chmu-warning-badge.severity-0 { + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + color: white; + } + + .chmu-warning-badge.severity-1 { + background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%); + color: #78350f; + } + + .chmu-warning-badge.severity-2 { + background: linear-gradient(135deg, #fb923c 0%, #ea580c 100%); + color: white; + } + + .chmu-warning-badge.severity-3 { + background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); + color: white; + animation: pulse-warning 2s ease-in-out infinite; + } + + .chmu-warning-badge.severity-4 { + background: linear-gradient(135deg, #a855f7 0%, #9333ea 100%); + color: white; + animation: pulse-warning 1.5s ease-in-out infinite; + } + + .chmu-icon { + font-size: 18px; + display: flex; + align-items: center; + } + + .chmu-text { + white-space: nowrap; + } + + /* ČHMÚ Warning Modal */ + .chmu-modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgb(0, 0, 0, 0.7); + backdrop-filter: blur(4px); + z-index: 10000; + align-items: center; + justify-content: center; + animation: fadeIn 0.3s ease; + } + + .chmu-modal.active { + display: flex; + } + + .chmu-modal-content { + background: var(--card-background); + border-radius: 16px; + max-width: 600px; + width: 90%; + max-height: 80vh; + overflow: hidden; + box-shadow: 0 20px 60px rgb(0, 0, 0, 0.3); + animation: slideUp 0.3s ease; + } + + .chmu-modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 24px; + border-bottom: 1px solid var(--border-color); + background: var(--header-gradient); + } + + .chmu-modal-header h3 { + margin: 0; + font-size: 20px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-modal-close { + background: none; + border: none; + font-size: 28px; + color: var(--text-color); + cursor: pointer; + padding: 0; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + transition: all 0.2s ease; + } + + .chmu-modal-close:hover { + background: rgb(0, 0, 0, 0.1); + transform: rotate(90deg); + } + + .chmu-modal-body { + padding: 24px; + overflow-y: auto; + max-height: calc(80vh - 80px); + } + + .chmu-warning-item { + background: var(--node-background); + border-radius: 12px; + padding: 16px; + margin-bottom: 16px; + border-left: 4px solid var(--accent-color); + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.15); + position: relative; + overflow: hidden; + } + + .chmu-warning-item:last-child { + margin-bottom: 0; + } + + .chmu-warning-item.severity-1 { + border-left-color: #fbbf24; + background: linear-gradient(135deg, + rgb(251, 191, 36, 0.1) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-2 { + border-left-color: #fb923c; + background: linear-gradient(135deg, + rgb(251, 146, 60, 0.15) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-3 { + border-left-color: #ef4444; + background: linear-gradient(135deg, + rgb(239, 68, 68, 0.2) 0%, + var(--node-background) 40% + ); + } + + .chmu-warning-item.severity-4 { + border-left-color: #a855f7; + background: linear-gradient(135deg, + rgb(168, 85, 247, 0.2) 0%, + var(--node-background) 40% + ); + } + + /* TOP warning - zvýrazněné pozadí */ + .chmu-warning-item.chmu-warning-top { + box-shadow: 0 4px 16px rgb(0, 0, 0, 0.25); + border-width: 6px; + } + + .chmu-warning-item.chmu-warning-top.severity-1 { + background: linear-gradient(135deg, + rgb(251, 191, 36, 0.18) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-2 { + background: linear-gradient(135deg, + rgb(251, 146, 60, 0.25) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-3 { + background: linear-gradient(135deg, + rgb(239, 68, 68, 0.3) 0%, + var(--node-background) 50% + ); + } + + .chmu-warning-item.chmu-warning-top.severity-4 { + background: linear-gradient(135deg, + rgb(168, 85, 247, 0.3) 0%, + var(--node-background) 50% + ); + } + + /* Compact warnings - menší sekce */ + .chmu-warning-item.chmu-warning-compact { + padding: 12px; + margin-bottom: 8px; + border-width: 3px; + } + + .chmu-warning-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; + } + + .chmu-warning-icon { + font-size: 32px; + } + + .chmu-warning-title { + flex: 1; + } + + .chmu-warning-title h4 { + margin: 0 0 4px; + font-size: 18px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-warning-severity { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 4px 12px; + border-radius: 12px; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + } + + .chmu-warning-severity.severity-1 { + background: #fef3c7; + color: #92400e; + } + + .chmu-warning-severity.severity-2 { + background: #fed7aa; + color: #7c2d12; + } + + .chmu-warning-severity.severity-3 { + background: #fee2e2; + color: #991b1b; + } + + .chmu-warning-severity.severity-4 { + background: #f3e8ff; + color: #6b21a8; + } + + .chmu-warning-info { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 12px; + margin-bottom: 12px; + } + + .chmu-info-item { + display: flex; + align-items: flex-start; + gap: 8px; + } + + .chmu-info-icon { + font-size: 16px; + margin-top: 2px; + } + + .chmu-info-content { + flex: 1; + } + + .chmu-info-label { + font-size: 11px; + text-transform: uppercase; + font-weight: 600; + opacity: 0.6; + margin-bottom: 2px; + } + + .chmu-info-value { + font-size: 14px; + font-weight: 500; + color: var(--text-color); + } + + .chmu-warning-description { + background: rgb(0, 0, 0, 0.1); + border-radius: 8px; + padding: 12px; + margin-bottom: 12px; + } + + .chmu-warning-description p { + margin: 0 0 8px; + font-size: 13px; + line-height: 1.5; + color: var(--text-color); + } + + .chmu-warning-description p:last-child { + margin-bottom: 0; + } + + .chmu-warning-description strong { + display: block; + font-size: 11px; + text-transform: uppercase; + font-weight: 700; + opacity: 0.7; + margin-bottom: 6px; + } + + /* Header sekce s dalšími výstrahami */ + .chmu-all-warnings-header { + margin: 24px 0 16px; + padding: 12px 0; + border-top: 2px solid rgb(255, 255, 255, 0.1); + border-bottom: 2px solid rgb(255, 255, 255, 0.1); + } + + .chmu-all-warnings-header h5 { + margin: 0; + font-size: 14px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.8; + color: var(--text-color); + } + + /* Compact info řádky */ + .chmu-warning-info-compact { + margin-top: 8px; + display: flex; + flex-direction: column; + gap: 6px; + } + + .chmu-info-row { + display: flex; + justify-content: space-between; + gap: 8px; + font-size: 13px; + } + + .chmu-info-row .chmu-info-label { + opacity: 0.7; + font-weight: 500; + } + + .chmu-info-row .chmu-info-value { + font-weight: 600; + color: var(--text-color); + } + + .chmu-no-warnings { + text-align: center; + padding: 40px 20px; + } + + .chmu-no-warnings-icon { + font-size: 64px; + margin-bottom: 16px; + } + + .chmu-no-warnings h4 { + margin: 0 0 8px; + font-size: 20px; + font-weight: 700; + color: var(--text-color); + } + + .chmu-no-warnings p { + margin: 0; + font-size: 14px; + opacity: 0.7; + } + + /* Energy Flow Canvas */ + .flow-canvas { + position: relative; + width: 100%; + max-width: 100%; + + /* Celá šířka - bylo 900px */ + margin: 0 auto; + height: 1000px; + } + + /* SVG for connections */ + .connections { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; + } + + .flow-line { + stroke-width: 3; + stroke-linecap: round; + fill: none; + opacity: 0.6; + } + + /* Components - Kompaktní a široké */ + .node { + position: absolute; + background: var(--bg-secondary); + border: 2px solid var(--border-primary); + border-radius: 12px; + padding: 10px 14px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + backdrop-filter: blur(10px); + z-index: 2; + min-width: 130px; + max-width: 250px; + } + + .node:hover { + background: var(--bg-hover); + border-color: var(--border-primary); + transform: scale(1.05); + box-shadow: 0 10px 40px var(--shadow-color); + } + + /* Solar - Top Center - S VĚTŠÍM ODSTUPEM */ + .solar { + top: var(--solar-top); + left: var(--solar-left); + transform: var(--solar-transform); + border-color: var(--solar-border); + background: var(--solar-bg); + } + + .solar:hover { + transform: var(--solar-transform) scale(1.05); + } + + /* Grid - Left Middle - S VĚTŠÍM ODSTUPEM */ + .grid-node { + top: var(--grid-top); + left: var(--grid-left); + transform: var(--grid-transform); + border-color: var(--grid-border); + background: var(--grid-bg); + } + + .grid-node:hover { + transform: var(--grid-transform) scale(1.05); + } + + /* Battery - Bottom Center - S VELKÝM ODSTUPEM */ + .battery { + top: var(--battery-top); + bottom: var(--battery-bottom); + left: var(--battery-left); + transform: var(--battery-transform); + border-color: var(--battery-border); + background: var(--battery-bg); + z-index: 3; + } + + .battery:hover { + transform: var(--battery-transform) scale(1.05); + } + + /* House - Right Middle - S VĚTŠÍM ODSTUPEM */ + .house { + top: var(--house-top); + right: var(--house-right); + transform: var(--house-transform); + border-color: var(--house-border); + background: var(--house-bg); + } + + .house:hover { + transform: var(--house-transform) scale(1.05); + } + + /* Center Hub - Inverter */ + .inverter { + top: var(--inverter-top); + left: var(--inverter-left); + transform: var(--inverter-transform); + border-color: var(--inverter-border); + background: var(--inverter-bg); + min-width: 240px; + + /* Rozšířeno pro lepší zobrazení notifikací a přetoků */ + max-width: 240px; + } + + .inverter:hover { + transform: var(--inverter-transform) scale(1.05); + } + + /* === EDIT MODE STYLES === */ + + /* Edit mode активní - nodes jsou draggable */ + .flow-canvas.edit-mode .node { + cursor: move; + border: 2px dashed rgb(255, 193, 7, 0.6); + box-shadow: 0 0 20px rgb(255, 193, 7, 0.3); + transition: all 0.2s ease; + } + + .flow-canvas.edit-mode .node:hover { + border-color: rgb(255, 193, 7, 0.9); + box-shadow: 0 0 30px rgb(255, 193, 7, 0.5); + } + + /* Během dragování */ + .node.dragging { + opacity: 0.8; + z-index: 1000; + cursor: grabbing !important; + box-shadow: 0 10px 40px rgb(0, 0, 0, 0.5); + transform: scale(1.05) !important; + } + + /* Touch-friendly hit area pro mobily */ + @media (width <= 768px) { + .flow-canvas.edit-mode .node { + min-width: 44px; + min-height: 44px; + padding: 12px; + } + } + + /* Node Content - VELMI KOMPAKTNÍ! */ + .node-icon { + font-size: 28px; + + /* Ještě menší */ + margin-bottom: 4px; + filter: drop-shadow(0 2px 4px rgb(0, 0, 0, 0.3)); + position: relative; + + /* Pro absolutní pozici emoji ikony */ + } + + .node-label { + font-size: 10px; + + /* Zvětšeno z 9px */ + text-transform: uppercase; + letter-spacing: 0.4px; + opacity: 0.7; + margin-bottom: 3px; + font-weight: 600; + } + + .node-value { + font-size: 22px; + + /* Zvětšeno z 20px */ + font-weight: 700; + line-height: 1; + margin-bottom: 2px; + } + + .node-subvalue { + font-size: 10px; + + /* Zvětšeno z 9px */ + opacity: 0.6; + } + + /* Phase values in main box */ + .node-phases { + margin-top: 4px; + font-size: 10px; + + /* Zvětšeno z 9px */ + opacity: 0.8; + display: flex; + flex-direction: row; + + /* Výchozí pro Spotřebu - 1 řádek */ + gap: 4px; + align-items: center; + justify-content: center; + } + + /* Síť - 2 řádky (výkony nad napětími) */ + .grid-node .node-phases { + flex-direction: column; + gap: 2px; + } + + .phase-row { + display: flex; + gap: 6px; + align-items: center; + } + + .phase-label { + font-weight: 600; + min-width: 20px; + } + + .phase-value { + font-size: 10px; + + /* Zvětšeno z 9px */ + opacity: 0.9; + } + + .phase-separator { + opacity: 0.4; + margin: 0 2px; + } + + .phase-row-group { + display: flex; + gap: 4px; + align-items: center; + justify-content: center; + } + + /* Dvousloupcový layout pro fáze v Síti */ + .phase-col-group { + display: flex; + gap: 8px; + align-items: center; + justify-content: center; + } + + .phase-col { + display: flex; + flex-direction: column; + align-items: center; + min-width: 45px; + } + + /* Tariff indicator in grid box */ + .node-tariff { + position: absolute !important; + top: 8px !important; + left: 8px !important; + font-size: 12px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + } + + .node-tariff:hover { + transform: scale(1.1); + } + + /* Frequency indicator in grid box */ + .node-frequency { + position: absolute !important; + top: 8px !important; + right: 8px !important; + font-size: 9px; + line-height: 1; + z-index: 10; + opacity: 0.7; + cursor: pointer; + transition: opacity 0.2s; + margin: 0 !important; + } + + .node-frequency:hover { + opacity: 1; + } + + /* Battery corner indicators */ + .battery-voltage-indicator { + position: absolute !important; + top: 8px !important; + left: 8px !important; + font-size: 11px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + padding: 0 !important; + background: transparent !important; + border: none !important; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + } + + .battery-current-indicator { + position: absolute !important; + top: 30px !important; + left: 8px !important; + font-size: 11px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + padding: 0 !important; + background: transparent !important; + border: none !important; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + } + + .battery-current-indicator:hover { + transform: scale(1.1); + } + + /* Battery Balancing Indicator - pod proudem */ + .battery-balancing-indicator { + position: absolute !important; + top: 62px !important; + left: 8px !important; + font-size: 10px; + line-height: 1.2; + z-index: 10; + cursor: help; + margin: 0 !important; + display: flex; + align-items: center; + gap: 4px; + padding: 3px 6px; + border-radius: 8px; + background: linear-gradient(135deg, rgb(255, 193, 7, 0.25) 0%, rgb(255, 152, 0, 0.15) 100%); + border: 1px solid rgb(255, 193, 7, 0.4); + transition: all 0.3s ease; + animation: pulse-balancing 2s ease-in-out infinite; + } + + .battery-balancing-indicator:hover { + transform: scale(1.05); + background: linear-gradient(135deg, rgb(255, 193, 7, 0.35) 0%, rgb(255, 152, 0, 0.25) 100%); + box-shadow: 0 0 10px rgb(255, 193, 7, 0.4); + } + + .balancing-icon { + font-size: 12px; + display: inline-block; + } + + .balancing-text { + font-size: 9px; + font-weight: 600; + color: var(--warning-text); + white-space: nowrap; + } + + /* Balancing states - různé barvy podle fáze */ + .battery-balancing-indicator.charging { + background: linear-gradient(135deg, rgb(255, 193, 7, 0.3) 0%, rgb(255, 152, 0, 0.2) 100%); + border-color: rgb(255, 193, 7, 0.5); + } + + .battery-balancing-indicator.holding { + background: linear-gradient(135deg, rgb(66, 165, 245, 0.25) 0%, rgb(33, 150, 243, 0.15) 100%); + border-color: rgb(66, 165, 245, 0.4); + } + + .battery-balancing-indicator.holding .balancing-text { + color: var(--info-text); + } + + .battery-balancing-indicator.completed { + background: linear-gradient(135deg, rgb(76, 175, 80, 0.25) 0%, rgb(56, 142, 60, 0.15) 100%); + border-color: rgb(76, 175, 80, 0.4); + animation: none; + } + + .battery-balancing-indicator.completed .balancing-text { + color: var(--success-text); + } + + .battery-temp-indicator { + position: absolute !important; + top: 8px !important; + right: 8px !important; + font-size: 11px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + padding: 0 !important; + background: transparent !important; + border: none !important; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .battery-temp-icon { + font-size: 14px; + display: inline-block; /* Nutné pro animaci transform */ + } + + .battery-temp-indicator:hover { + transform: scale(1.1); + } + + .battery-grid-charging-indicator { + position: absolute !important; + top: 58px !important; + right: 8px !important; + font-size: 14px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: all 0.3s ease; + margin: 0 !important; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + + /* Default OFF state - šedá, průhledná */ + opacity: 0.4; + } + + /* Active ON state - plná opacity, animovaná */ + .battery-grid-charging-indicator.active { + opacity: 1; + } + + .battery-grid-charging-indicator:hover { + transform: scale(1.1); + } + + .battery-voltage-indicator:hover { + transform: scale(1.1); + } + + /* Dynamic battery icon */ + .battery-icon-dynamic { + font-size: 32px; + transition: all 0.3s ease; + } + + /* Temperature animations */ + + /* Pending mode change animation */ + + /* Mode change in flow diagram */ + + .mode-changing { + animation: pulse-mode-changing 2s ease-in-out infinite; + } + + /* Mode change indicator badge */ + .mode-change-indicator { + position: absolute; + top: 30px; + right: -80px; + background: var(--indicator-warning-bg); + border: 1px solid var(--indicator-warning-border); + border-radius: 8px; + padding: 4px 8px; + font-size: 9px; + font-weight: 600; + color: var(--indicator-text); + display: flex; + align-items: center; + gap: 4px; + box-shadow: 0 2px 8px var(--indicator-warning-shadow); + animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); + z-index: 10; + white-space: nowrap; + } + + .mode-change-indicator .spinner { + display: inline-block; + width: 8px; + height: 8px; + border: 2px solid var(--spinner-border); + border-top-color: var(--spinner-border-top); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + /* Grid delivery change indicators - dva badges vedle sebe */ + .grid-change-indicator { + position: absolute; + top: 70px; + right: -80px; + background: var(--indicator-info-bg); + border: 1px solid var(--indicator-info-border); + border-radius: 8px; + padding: 4px 8px; + font-size: 9px; + font-weight: 600; + color: var(--indicator-text); + display: flex; + align-items: center; + gap: 4px; + box-shadow: 0 2px 8px var(--indicator-info-shadow); + animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); + z-index: 10; + white-space: nowrap; + } + + .grid-change-indicator .spinner { + display: inline-block; + width: 8px; + height: 8px; + border: 2px solid var(--spinner-border); + border-top-color: var(--spinner-border-top); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + .grid-limit-indicator { + position: absolute; + top: 70px; + right: -80px; + background: var(--indicator-warning-bg); + border: 1px solid var(--indicator-warning-border); + border-radius: 8px; + padding: 4px 8px; + font-size: 9px; + font-weight: 600; + color: var(--indicator-text); + display: flex; + align-items: center; + gap: 4px; + box-shadow: 0 2px 8px var(--indicator-warning-shadow); + animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55) 0.15s both; + z-index: 10; + white-space: nowrap; + } + + .grid-limit-indicator .spinner { + display: inline-block; + width: 8px; + height: 8px; + border: 2px solid var(--spinner-border); + border-top-color: var(--spinner-border-top); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + .boiler-change-indicator { + position: absolute; + top: 30px; + right: -80px; + background: var(--indicator-warning-bg); + border: 1px solid var(--indicator-warning-border); + border-radius: 8px; + padding: 4px 8px; + font-size: 9px; + font-weight: 600; + color: var(--indicator-text); + display: flex; + align-items: center; + gap: 4px; + box-shadow: 0 2px 8px var(--indicator-warning-shadow); + animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); + z-index: 10; + white-space: nowrap; + } + + .boiler-change-indicator .spinner { + display: inline-block; + width: 8px; + height: 8px; + border: 2px solid var(--spinner-border); + border-top-color: var(--spinner-border-top); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + .temp-hot { + /* Container má jen červený stín */ + filter: drop-shadow(0 0 3px rgb(244, 67, 54, 0.8)); + } + + /* Ikona uvnitř temp-hot bliká - použij ID pro vyšší specificitu */ + .temp-hot #battery-temp-icon, + .temp-hot .battery-temp-icon, + .temp-hot #inverter-temp-icon, + .temp-hot .inverter-temp-icon { + animation: pulse-hot 1.5s ease-in-out infinite !important; + display: inline-block; + } + + .temp-cold { + /* Container má jen modrý stín */ + filter: drop-shadow(0 0 3px rgb(33, 150, 243, 0.8)); + } + + /* Ikona uvnitř temp-cold bliká */ + .temp-cold #battery-temp-icon, + .temp-cold .battery-temp-icon { + animation: pulse-cold 1.5s ease-in-out infinite !important; + display: inline-block; + } + + /* Inverter corner indicators */ + .inverter-bypass-indicator { + position: absolute !important; + top: 8px !important; + left: 8px !important; + font-size: 14px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + } + + .inverter-bypass-indicator:hover { + transform: scale(1.1); + } + + .bypass-ok { + filter: drop-shadow(0 0 3px var(--shadow-success)); + } + + .bypass-warning { + /* Container má jen červený stín */ + filter: drop-shadow(0 0 5px var(--shadow-error)); + } + + /* Ikona uvnitř bypass-warning bliká */ + .bypass-warning #inverter-bypass-icon { + animation: pulse-warning 1.5s ease-in-out infinite !important; + display: inline-block; + } + + .inverter-temp-indicator { + position: absolute !important; + top: 8px !important; + right: 8px !important; + font-size: 11px; + line-height: 1.2; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .inverter-temp-indicator:hover { + transform: scale(1.1); + } + + .inverter-temp-icon { + font-size: 14px; + } + + /* Warning border animation for inverter */ + + .inverter.warning-active { + border: 3px solid var(--shadow-error-weak); + animation: warning-border 1.5s ease-in-out infinite; + } + + /* Notification styles */ + .notification-error { + color: var(--error-text) !important; + font-weight: 700 !important; + } + + .notification-ok { + color: var(--success-text) !important; + } + + /* Solar icon animations */ + .solar-icon-dynamic { + font-size: 32px; + transition: all 0.3s ease; + } + + /* Měsíc v noci - zvětšený a výraznější */ + .solar-icon-moon { + font-size: 36px !important; + filter: drop-shadow(0 0 8px rgb(255, 255, 255, 0.8)); + } + + .solar-active { + animation: solar-pulse 2s ease-in-out infinite, solar-glow 2s ease-in-out infinite; + } + + /* Solar forecast indicators */ + .solar-forecast-today { + position: absolute !important; + top: 8px !important; + left: 8px !important; + font-size: 11px; + line-height: 1.2; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + } + + .solar-forecast-tomorrow { + position: absolute !important; + top: 8px !important; + right: 8px !important; + font-size: 11px; + line-height: 1.2; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .solar-forecast-today:hover, + .solar-forecast-tomorrow:hover { + transform: scale(1.1); + } + + .forecast-icon { + font-size: 12px; + } + + .forecast-value { + font-size: 10px; + font-weight: 600; + opacity: 0.9; + } + + /* Inverter corner indicators */ + .inverter-bypass-indicator { + position: absolute !important; + top: 8px !important; + left: 8px !important; + font-size: 14px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + } + + .inverter-bypass-indicator:hover { + transform: scale(1.1); + } + + .inverter-bypass-indicator.status-ok { + color: var(--success-text); + } + + .inverter-bypass-indicator.warning-active { + color: var(--error-text-alt); + animation: pulse-warning 2s ease-in-out infinite; + } + + .inverter-bypass-label { + position: absolute !important; + top: 28px !important; + left: 8px !important; + font-size: 11px; + font-weight: 600; + color: var(--error-text); + background: rgb(220, 53, 69, 0.15); + padding: 2px 6px; + border-radius: 4px; + z-index: 11; + pointer-events: none; + white-space: nowrap; + animation: pulse-warning 2s ease-in-out infinite; + } + + .inverter-temp-indicator { + position: absolute !important; + top: 8px !important; + right: 8px !important; + font-size: 11px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + } + + .inverter-temp-indicator:hover { + transform: scale(1.1); + } + + .inverter-temp-icon { + font-size: 14px; + } + + /* Inverter temperature hot threshold at 35°C */ + .inverter-temp-hot { + /* Container má jen červený stín */ + filter: drop-shadow(0 0 3px var(--shadow-error-weak)); + } + + /* Ikona uvnitř inverter-temp-hot bliká */ + .inverter-temp-hot #inverter-temp-icon, + .inverter-temp-hot .inverter-temp-icon { + animation: pulse-hot 1.5s ease-in-out infinite !important; + display: inline-block; + } + + .inverter-temp-cold { + /* Container má jen modrý stín */ + filter: drop-shadow(0 0 3px var(--shadow-info)); + } + + /* Ikona uvnitř inverter-temp-cold bliká */ + .inverter-temp-cold #inverter-temp-icon, + .inverter-temp-cold .inverter-temp-icon { + animation: pulse-cold 1.5s ease-in-out infinite !important; + display: inline-block; + } + + /* Distribution crisis indicator */ + .inverter-distribution-crisis { + position: absolute !important; + top: 50% !important; + left: 15px !important; + transform: translateY(-50%); + font-size: 14px; + line-height: 1; + z-index: 10; + cursor: pointer; + transition: transform 0.2s; + margin: 0 !important; + } + + .inverter-distribution-crisis:hover { + transform: translateY(-50%) scale(1.1); + } + + .inverter-distribution-crisis.status-ok { + color: var(--success-text); + } + + .inverter-distribution-crisis.warning-active { + color: var(--error-text-alt); + animation: pulse-warning 2s ease-in-out infinite; + } + + /* Notification indicator */ + .notification-badge { + display: inline-flex; + align-items: center; + gap: 3px; + } + + .notification-badge.has-error { + color: var(--error-text-alt); + font-weight: 700; + } + + .notification-badge.has-unread { + color: var(--warning-text); + font-weight: 600; + } + + /* Solar strings layout */ + .node-strings { + display: flex; + justify-content: space-between; + gap: 10px; + margin-top: 4px; + margin-bottom: 4px; + } + + .string-item { + display: flex; + align-items: center; + gap: 4px; + flex: 1; + } + + .string-item:first-child { + justify-content: flex-start; + } + + .string-item:last-child { + justify-content: flex-end; + } + + .string-icon { + font-size: 10px; + } + + .string-value { + font-size: 10px; + font-weight: 600; + cursor: pointer; + } + + .string-value:hover { + opacity: 0.8; + } + + /* Solar columns in details */ + .solar-columns { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; + margin-bottom: 0; + } + + .solar-column { + display: flex; + flex-direction: column; + gap: 3px; + } + + .solar-column .detail-group { + margin-bottom: 6px; + } + + .solar-column .detail-group:last-child { + margin-bottom: 0; + } + + /* Grid box price coloring */ + .grid-node.price-cheap { + border: 2px solid var(--battery-border); + box-shadow: 0 0 15px var(--shadow-success); + animation: price-cheap-pulse 3s ease-in-out infinite; + } + + .grid-node.price-normal { + border: 2px solid var(--border-primary); + + /* Žádná animace - neutrální stav */ + } + + .grid-node.price-expensive { + border: 2px solid var(--status-discharging-border); + box-shadow: 0 0 15px var(--status-discharging-shadow); + animation: price-expensive-pulse 2s ease-in-out infinite; + } + + /* Export do sítě - vždy zelený s animací (prodáváme elektřinu!) */ + .grid-node.grid-exporting { + border: 2px solid var(--battery-border); + box-shadow: 0 0 20px var(--shadow-success); + animation: export-pulse 2.5s ease-in-out infinite; + } + + /* Ikony pro cenové stavy - barevné stíny kolem zásuvky */ + .price-icon-cheap { + animation: icon-savings 2s ease-in-out infinite; + + /* Zelený světelný efekt */ + text-shadow: + 0 0 10px rgb(76, 175, 80, 1), + 0 0 20px rgb(76, 175, 80, 0.8), + 0 0 30px rgb(76, 175, 80, 0.6); + } + + .price-icon-normal { + /* Žlutý/oranžový světelný efekt */ + text-shadow: + 0 0 10px rgb(255, 193, 7, 1), + 0 0 20px rgb(255, 193, 7, 0.8), + 0 0 30px rgb(255, 193, 7, 0.6); + } + + .price-icon-expensive { + animation: icon-expensive 1.5s ease-in-out infinite; + + /* Červený světelný efekt */ + text-shadow: + 0 0 10px rgb(244, 67, 54, 1), + 0 0 20px rgb(244, 67, 54, 0.8), + 0 0 30px rgb(244, 67, 54, 0.6); + } + + /* Node Details - Čitelné písmo */ + .node-details { + margin-top: 6px; + padding-top: 6px; + border-top: 1px solid var(--border-secondary); + font-size: 11px; + + /* Zvětšeno z 8px */ + line-height: 1.4; + } + + .detail-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 3px; + gap: 5px; + } + + .detail-row.detail-row-quad { + display: grid; + grid-template-columns: 18px minmax(0, 1fr) 18px minmax(0, 1fr); + column-gap: 6px; + align-items: center; + } + + .detail-row.detail-row-quad .detail-icon { + justify-self: center; + } + + .detail-row.detail-row-quad .detail-value { + justify-self: start; + text-align: left; + } + + .detail-label { + opacity: 0.6; + font-size: 10px; + + /* Zvětšeno z 8px */ + text-transform: uppercase; + letter-spacing: 0.3px; + } + + .detail-value { + font-weight: 600; + font-size: 11px; + + /* Zvětšeno z 9px */ + } + + .detail-extra { + font-size: 10px; + + /* Zvětšeno z 8px */ + opacity: 0.7; + margin-left: 4px; + } + + .detail-group { + margin-top: 6px; + padding-top: 5px; + border-top: 1px solid var(--border-tertiary); + } + + .detail-subheader { + font-size: 10px; + + /* Zvětšeno z 8px */ + text-transform: uppercase; + opacity: 0.5; + margin-bottom: 5px; + letter-spacing: 0.5px; + } + + .node-status { + margin-top: 6px; + margin-bottom: 4px; + font-size: 10px; + padding: 3px 8px; + border-radius: 10px; + font-weight: 600; + } + + .planner-mode-badge { + display: inline-flex; + align-items: center; + gap: 4px; + border: 1px solid transparent; + transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease; + } + + .planner-mode-badge.auto-enabled { + background: rgb(76, 175, 80, 0.15); + border-color: rgb(76, 175, 80, 0.4); + color: #8bc34a; + } + + .planner-mode-badge.auto-disabled { + background: rgb(158, 158, 158, 0.15); + border-color: rgb(158, 158, 158, 0.4); + color: #bdbdbd; + } + + .planner-mode-badge.auto-unknown { + background: rgb(255, 152, 0, 0.1); + border-color: rgb(255, 152, 0, 0.4); + color: #ffcc80; + } + + /* Baterie - ještě menší status */ + .battery .node-status { + margin-top: 4px; + margin-bottom: 2px; + font-size: 9px; + padding: 2px 6px; + } + + /* Mobile: Expand/Collapse indicator */ + @media (width <= 768px) { + .node::after { + content: '▼'; + position: absolute; + bottom: 3px; + right: 5px; + font-size: 8px; + opacity: 0.4; + transition: transform 0.3s ease, opacity 0.3s ease; + } + + .node:hover::after { + opacity: 0.7; + } + + .node.expanded::after { + transform: rotate(180deg); + opacity: 0.7; + } + } + + /* Klikatelné hodnoty s entity */ + .entity-value { + cursor: pointer; + transition: all 0.2s ease; + position: relative; + } + + .entity-value:hover { + color: var(--info-text); + transform: scale(1.05); + } + + /* Globální tooltip kontejner - mimo flow, position: fixed */ + #global-tooltip { + position: fixed; + background: var(--tooltip-bg); + color: var(--text-primary); + padding: 8px 12px; + border-radius: 6px; + font-size: 11px; + white-space: normal; + max-width: min(250px, calc(100vw - 20px)); + width: max-content; + overflow-wrap: break-word; + text-align: center; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s ease; + z-index: 100000; + box-shadow: 0 4px 12px var(--shadow-color); + top: -9999px; + left: -9999px; + } + + /* Světlý režim - detekce z HA tématu pomocí JavaScript */ + body.light-theme #global-tooltip { + background: var(--tooltip-bg-secondary); + color: var(--text-primary); + box-shadow: 0 4px 12px var(--shadow-color); + } + + /* Fallback: Světlý režim - systémová preference (pokud JS selže) */ + @media (prefers-color-scheme: light) { + #global-tooltip { + background: var(--tooltip-bg-secondary); + color: var(--text-primary); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + } + } + + #global-tooltip.visible { + opacity: 1; + } + + /* Globální tooltip šipka */ + #global-tooltip-arrow { + position: fixed; + width: 0; + height: 0; + border: 5px solid transparent; + border-top-color: var(--tooltip-border); + opacity: 0; + pointer-events: none; + transition: opacity 0.2s ease; + z-index: 100000; + top: -9999px; + left: -9999px; + } + + /* Světlý režim - detekce z HA tématu pomocí JavaScript */ + body.light-theme #global-tooltip-arrow { + border-top-color: var(--tooltip-border-secondary); + } + + body.light-theme #global-tooltip-arrow.below { + border-top-color: transparent; + border-bottom-color: var(--tooltip-border-secondary); + } + + /* Fallback: Světlý režim - systémová preference (pokud JS selže) */ + @media (prefers-color-scheme: light) { + #global-tooltip-arrow { + border-top-color: var(--tooltip-border-secondary); + } + + #global-tooltip-arrow.below { + border-top-color: transparent; + border-bottom-color: var(--tooltip-border-secondary); + } + } + + #global-tooltip-arrow.visible { + opacity: 1; + } + + #global-tooltip-arrow.below { + border-top-color: transparent; + border-bottom-color: var(--tooltip-border); + } + + /* Info bubble system */ + .info-bubble { + display: inline-block; + width: 16px; + height: 16px; + line-height: 16px; + text-align: center; + background: var(--info-bg); + border: 1px solid var(--indicator-info-border); + border-radius: 50%; + font-size: 11px; + cursor: help; + margin-left: 4px; + transition: all 0.2s ease; + position: relative; + } + + .info-bubble:hover { + background: var(--status-charging-bg); + transform: scale(1.1); + } + + .info-bubble-tooltip { + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%); + margin-bottom: 8px; + background: var(--tooltip-bg); + color: var(--text-primary); + padding: 12px 16px; + border-radius: 8px; + font-size: 11px; + line-height: 1.5; + white-space: normal; + width: 280px; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: opacity 0.2s ease, visibility 0.2s ease; + z-index: 10000; + text-align: left; + box-shadow: 0 4px 12px var(--shadow-color); + } + + .info-bubble:hover .info-bubble-tooltip { + opacity: 1; + visibility: visible; + pointer-events: auto; + } + + .info-bubble-tooltip::after { + content: ''; + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%); + border: 6px solid transparent; + border-top-color: var(--tooltip-border); + } + + .info-bubble-tooltip strong { + color: var(--info-text); + display: block; + margin-bottom: 6px; + } + + .info-bubble-tooltip ul { + margin: 6px 0; + padding-left: 16px; + } + + .info-bubble-tooltip li { + margin: 3px 0; + } + + /* Ikony v detailech */ + .detail-icon { + margin-right: 2px; + font-size: 10px; + } + + .status-charging { + background: var(--status-charging-bg); + color: var(--status-charging-text); + } + + .status-discharging { + background: var(--status-discharging-bg); + color: var(--status-discharging-text); + } + + .status-idle { + background: var(--status-idle-bg); + color: var(--status-idle-text); + } + + .status-importing { + background: var(--status-importing-bg); + color: var(--status-importing-text); + } + + .status-exporting { + background: var(--status-exporting-bg); + color: var(--status-exporting-text); + } + + /* Flow Particles Container - OPRAVA: Stabilní positioning kontext */ + #particles { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 5; + overflow: visible; + } + + /* Flow Particles */ + .particle { + position: absolute; + width: 8px; + height: 8px; + border-radius: 50%; + pointer-events: none; + z-index: 10; + box-shadow: 0 0 10px currentcolor; + will-change: transform, opacity; + } + + /* Animations */ + + .pulse { + animation: pulse 2s ease-in-out infinite; + } + + /* Price indicator animations - jemné pulzování */ + + /* Export animation - silnější zelené pulzování (prodáváme!) */ + + .solar.active .node-icon { + animation: pulse 3s ease-in-out infinite; + } + + /* Battery - sjednoceno s ostatními boxy (nepřebíjí typografii) */ + .battery { + min-width: 250px !important; + max-width: 330px !important; + } + + .battery .node-details { + width: 100%; + min-width: 0; + box-sizing: border-box; + } + + .battery .node-details .detail-group { + width: 100%; + min-width: 0; + } + + .battery .node-details .detail-group > div { + width: 100%; + min-width: 0; + } + + .battery .node-details .detail-group > div > div { + min-width: 0; + } + + .battery .node-details .detail-group > div[style*="grid-template-columns"] { + gap: 10px !important; + } + + .battery .detail-group>div[style*="grid"] { + background: transparent; + } + + .battery .detail-group>div[style*="grid"]>div { + background: transparent; + } + + .battery .detail-subheader { + margin-bottom: 2px; + font-size: 10px; + } + + /* Battery details: nepoužívat ALL CAPS jako jinde */ + .battery .detail-subheader, + .battery .detail-label { + text-transform: none; + letter-spacing: 0; + } + + .battery .detail-label { + font-size: 10px; + opacity: 0.78; + flex: 0 0 auto; + margin-right: 8px; + } + + .battery .detail-value { + font-size: 10px; + margin-left: auto; + } + + /* Battery SVG Icon */ + .battery-icon-svg { + display: block; + margin: 0 auto; + filter: drop-shadow(0 2px 4px rgb(0, 0, 0, 0.2)); + width: 28px !important; + height: 44px !important; + } + + .battery-outline { + stroke: var(--text-primary); + } + + .battery-terminal { + fill: var(--text-primary); + } + + .battery-fill { + /* Gradient je definován v SVG, zde jen animace */ + transition: height 0.8s ease, y 0.8s ease, opacity 0.3s ease; + transform-origin: bottom; + } + + /* Animace blikání při nabíjení */ + .battery-fill.charging { + animation: battery-pulse 2s ease-in-out infinite; + } + + /* Grid charging blesk */ + .battery-lightning { + fill: #ffd700; + font-size: 24px; + opacity: 0; + transition: opacity 0.3s ease; + } + + .battery-lightning.active { + opacity: 1; + animation: lightning-blink 1.5s ease-in-out infinite; + } + + /* Warning-capable values (Bypass, Distribution) */ + .warning-capable { + transition: all 0.3s ease; + } + + /* Green (OK) - when OFF/Standby */ + .warning-capable.status-ok { + color: var(--success-text) !important; + font-weight: 600 !important; + font-size: 11px !important; + } + + /* Red (WARNING) - when ON/Active */ + .warning-capable.warning-active { + color: var(--error-text-alt) !important; + font-weight: 700 !important; + font-size: 11px !important; + text-shadow: 0 0 8px var(--shadow-error-weak); + animation: pulse-warning 2s ease-in-out infinite; + } + + /* Info Panel */ + .info-panel { + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + background: var(--bg-secondary); + border: 1px solid var(--border-secondary); + border-radius: 16px; + padding: 16px 24px; + backdrop-filter: blur(10px); + display: flex; + gap: 30px; + z-index: 3; + } + + .info-item { + text-align: center; + } + + .info-label { + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.6; + margin-bottom: 4px; + } + + .info-value { + font-size: 18px; + font-weight: 700; + } + + /* Responsive */ + + /* Desktop - wider screens, avoid overlap */ + @media (width >= 1400px) { + .flow-canvas { + margin-top: 0; + + /* Top bar doesn't need margin */ + } + } + + /* Mobile - small screens */ + @media (width <= 768px) { + .container { + padding: 5px; + padding-bottom: 10px; + max-width: 100vw; + overflow-x: hidden; + } + + .header { + margin-bottom: 5px; + + /* Menší margin */ + flex-wrap: wrap; + padding: 5px; + } + + .header h1 { + font-size: 14px; + + /* Menší font */ + width: 100%; + margin-bottom: 2px; + } + + .time { + font-size: 11px; + + /* Menší font */ + } + + .last-update { + font-size: 8px; + + /* Menší font */ + width: 100%; + text-align: left; + margin-top: 2px; + } + + .flow-canvas { + height: 750px; + + /* Zvětšeno z 650px pro více prostoru */ + max-width: 100%; + margin-top: 0; + transform: scale(0.92); + + /* Zvětšeno z 0.82 pro lepší čitelnost */ + transform-origin: top center; + overflow: visible; + } + + /* Zmenšení všech boxů pro mobil */ + .node { + min-width: 130px; + max-width: 180px; + padding: 10px 12px; + } + + .battery { + min-width: 130px !important; + max-width: 180px !important; + } + + #battery-power { + font-size: 12px; + } + + .node-icon { + font-size: 24px; + margin-bottom: 3px; + } + + .node-label { + font-size: 9px; + margin-bottom: 2px; + font-weight: 600; + } + + .node-value { + font-size: 20px; + margin-bottom: 2px; + } + + .node-subvalue { + font-size: 9px; + } + + /* COLLAPSED DETAILS - skryté defaultně */ + .node-details { + display: none; + font-size: 8px; + margin-top: 5px; + padding-top: 4px; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + } + + .node.expanded .node-details { + display: block; + max-height: 500px; + } + + /* Overflow protection - detaily nesmí vytékat */ + .node { + overflow: visible; + + /* Změněno z hidden aby fungovaly indikátory */ + + /* position zůstává absolute z výchozího CSS! */ + } + + .node-details { + width: 100%; + box-sizing: border-box; + } + + /* Battery - extra protection */ + .battery .detail-group, + .battery .detail-row { + max-width: 100%; + overflow: hidden; + box-sizing: border-box; + } + + .battery .detail-group>div[style*="grid"] { + background: transparent; + max-width: 100%; + } + + .detail-label { + font-size: 7.5px; + } + + .detail-value { + font-size: 8.5px; + } + + .detail-extra { + font-size: 7.5px; + } + + .detail-subheader { + font-size: 7.5px; + padding: 2px 4px; + margin-bottom: 3px; + } + + .detail-row { + gap: 3px; + margin-bottom: 3px; + } + + /* POUŽITÍ DESKTOP LAYOUTU s větším rozestupem pro mobil */ + + /* Zmenšení střídače aby se nevěkrýval */ + .inverter { + min-width: 110px; + max-width: 140px; + padding: 8px 10px; + top: 55%; + + /* Posunuto níž aby se nepřekrýval se sítí/spotřebou */ + } + + /* Síť více vlevo a nahoru */ + .grid-node { + left: 5px; + + /* Ještě blíž ke kraji */ + top: 40%; + + /* Výš než střídač */ + } + + /* Spotřeba více vpravo a nahoru */ + .house { + right: 5px; + + /* Ještě blíž ke kraji */ + top: 40%; + + /* Výš než střídač */ + } + + /* Solar forecast corners - větší */ + .solar-forecast-today, + .solar-forecast-tomorrow { + font-size: 8px; + padding: 3px 5px; + } + + .forecast-icon { + font-size: 10px; + } + + .forecast-value { + font-size: 8px; + } + + /* Battery indicators - větší */ + .battery-current-indicator, + .battery-voltage-indicator, + .battery-temp-indicator { + font-size: 8px; + padding: 3px 4px; + } + + /* Inverter notifications */ + .inverter-notification { + font-size: 8px; + padding: 3px 5px; + } + + /* Grid mode indicator */ + .grid-mode-indicator { + font-size: 7.5px; + padding: 3px 5px; + } + + /* Info panel */ + .info-panel { + position: relative; + bottom: auto; + margin-top: 15px; + flex-direction: column; + gap: 6px; + font-size: 8px; + padding: 6px; + } + + /* Control panel - mobile sticky */ + .control-panel { + position: sticky; + top: 0; + left: 0; + right: 0; + width: 100%; + max-height: 85vh; + border-radius: 0 0 10px 10px; + overflow-y: auto; + } + + .panel-header h3 { + font-size: 10px; + } + + .panel-content { + max-height: calc(85vh - 50px); + overflow-y: auto; + padding: 6px; + } + + .control-section { + margin-bottom: 10px; + } + + .control-section h4 { + font-size: 10px; + margin-bottom: 5px; + } + + /* Menší battery gauge */ + .battery-gauge { + height: 4px; + margin-top: 4px; + margin-bottom: 3px; + } + + /* Solar columns - vertical stacking */ + .solar-columns { + flex-direction: column; + gap: 3px; + } + + .solar-column { + width: 100%; + } + + /* Phase displays */ + .node-phases { + font-size: 7px; + gap: 2px; + } + + .phase-value { + font-size: 7px; + } + + /* Shield queue - hide on mobile nebo zmenšit */ + #shield-queue-section { + display: none; + + /* Skrýt na mobilu kvůli prostoru */ + } + + /* Pokud by se shield queue zobrazila, udělat ji scrollovatelnou */ + .shield-queue-table { + display: block; + overflow-x: auto; + font-size: 9px; + } + + .shield-queue-table thead, + .shield-queue-table tbody, + .shield-queue-table tr { + display: table; + width: 100%; + table-layout: fixed; + } + + .shield-queue-table th, + .shield-queue-table td { + padding: 6px 4px; + font-size: 9px; + } + + /* Menší šířky sloupců pro mobil */ + .shield-queue-table th:nth-child(1) { + width: 80px; + } + + /* Stav */ + .shield-queue-table th:nth-child(2) { + width: 100px; + } + + /* Služba */ + .shield-queue-table th:nth-child(3) { + width: auto; + } + + /* Změny */ + .shield-queue-table th:nth-child(4) { + width: 60px; + } + + /* Vytvořeno */ + .shield-queue-table th:nth-child(5) { + width: 50px; + } + + /* Trvání */ + + /* Tooltips - menší na mobilu */ + #global-tooltip { + max-width: min(180px, calc(100vw - 20px)); + font-size: 9px; + padding: 5px 8px; + } + + /* Badges - menší */ + .mode-change-indicator, + .grid-change-indicator, + .grid-limit-indicator, + .boiler-change-indicator { + font-size: 7px; + padding: 2px 4px; + } + + /* Status badges */ + .node-status { + font-size: 7px; + padding: 2px 6px; + } + } + + /* Extra small phones */ + @media (width <= 380px) { + .flow-canvas { + transform: scale(0.78); + height: 650px; + } + + .node { + min-width: 125px; + max-width: 175px; + } + + /* DESKTOP LAYOUT - stejný jako fullscreen! */ + + /* Žádné custom pozice */ + } + + /* Tablet portrait mode (iPad: 768x1024px) */ + @media (width >= 769px) and (width <= 1024px) and (orientation: portrait) { + .flow-canvas { + height: 650px; + transform: scale(0.95); + max-width: 650px; + margin: 0 auto; + } + + .node { + min-width: 100px; + max-width: 135px; + padding: 9px 11px; + } + + /* Na tabletu ZOBRAZIT detaily - ne collapsed! */ + .node-details { + display: block !important; + font-size: 8.5px; + } + + .node-icon { + font-size: 22px; + } + + .node-label { + font-size: 9.5px; + } + + .node-value { + font-size: 18px; + } + + .node-subvalue { + font-size: 9.5px; + } + + .node-details { + font-size: 8.5px; + } + + .detail-label { + font-size: 8px; + } + + .detail-value { + font-size: 9.5px; + } + + /* DESKTOP LAYOUT - stejný jako fullscreen! */ + + /* Žádné custom pozice - vše zůstává z výchozího CSS */ + + /* Větší indikátory pro tablet */ + .solar-forecast-today, + .solar-forecast-tomorrow, + .battery-current-indicator, + .battery-voltage-indicator, + .battery-temp-indicator, + .inverter-notification, + .grid-mode-indicator { + font-size: 8.5px; + padding: 3px 6px; + } + + .forecast-icon { + font-size: 11px; + } + + .info-panel { + font-size: 9.5px; + padding: 9px 11px; + gap: 9px; + } + } + + /* Tablet landscape mode (Nest Hub: 1024x600px, iPad Mini: 1024x768px) */ + @media (width >= 769px) and (width <= 1200px) and (orientation: landscape) { + .flow-canvas { + height: 600px; + transform: scale(0.75); + max-width: 100%; + margin: 0 auto; + } + + .node { + min-width: 140px; + max-width: 180px; + padding: 12px 14px; + } + + /* COLLAPSED DETAILS - skryté defaultně jako na mobilu */ + .node-details { + display: none; + font-size: 9px; + margin-top: 5px; + padding-top: 4px; + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease; + } + + .node.expanded .node-details { + display: block; + max-height: 500px; + } + + .node-icon { + font-size: 28px; + } + + .node-label { + font-size: 10px; + } + + .node-value { + font-size: 22px; + } + + .node-subvalue { + font-size: 10px; + } + + .detail-label { + font-size: 9px; + } + + .detail-value { + font-size: 10px; + } + + /* DESKTOP LAYOUT - stejný jako fullscreen! */ + + /* Žádné custom pozice - vše zůstává z výchozího CSS */ + + /* Indikátory */ + .solar-forecast-today, + .solar-forecast-tomorrow, + .battery-current-indicator, + .battery-voltage-indicator, + .battery-temp-indicator, + .inverter-notification, + .grid-mode-indicator { + font-size: 9px; + padding: 3px 6px; + } + + .forecast-icon { + font-size: 12px; + } + + .info-panel { + font-size: 10px; + padding: 10px 12px; + gap: 10px; + } + + .control-panel { + max-height: 90vh; + } + } + + /* Control Panel Styles - Top Bar - VELMI MALÝ! */ + .control-panel { + position: sticky; + top: 0; + left: 0; + right: 0; + width: 100%; + max-height: auto; + + /* Auto - přizpůsobí se obsahu */ + background: var(--control-panel-bg); + border-bottom: 2px solid var(--control-panel-border); + backdrop-filter: blur(10px); + z-index: 1000; + box-shadow: 0 4px 20px var(--shadow-color); + overflow: hidden; + transition: all 0.3s ease; + } + + .control-panel.minimized { + max-height: 32px; + + /* Minimalizovaný stav */ + } + + .control-panel.minimized .panel-content { + display: none; + } + + .panel-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 4px 12px; + + /* Ještě menší */ + background: var(--info-bg); + border-bottom: 1px solid var(--border-secondary); + cursor: pointer; + } + + .panel-header h3 { + margin: 0; + font-size: 12px; + + /* Velmi malé */ + font-weight: 600; + } + + .panel-content { + max-height: none; + + /* Není omezení - přizpůsobí se obsahu */ + overflow: hidden visible; + padding: 4px 12px; + + /* Velmi malý padding */ + } + + /* Desktop - horizontal layout with sections */ + @media (width >= 1200px) { + .panel-content { + display: flex; + flex-wrap: wrap; + gap: 0; + padding: 12px 16px; + align-items: flex-start; + } + + .control-section { + flex: 0 0 auto; + min-width: auto; + margin-bottom: 0; + padding-bottom: 0; + border-bottom: none; + border-right: none; + padding-right: 0; + margin-right: 12px; + } + + .control-section:last-child { + border-right: none; + padding-right: 0; + margin-right: 0; + } + + /* Queue section full width */ + #shield-queue-section { + flex: 1 0 100%; + } + } + + .panel-content::-webkit-scrollbar { + width: 8px; + } + + .panel-content::-webkit-scrollbar-track { + background: var(--bg-tertiary); + border-radius: 10px; + } + + .panel-content::-webkit-scrollbar-thumb { + background: var(--button-hover); + border-radius: 10px; + } + + .panel-content::-webkit-scrollbar-thumb:hover { + background: var(--bg-hover); + } + + .control-section { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: none; + } + + #charge-battery-btn { + background: var(--shield-pending-bg); + border-color: var(--shield-pending-border); + } + + .control-section:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; + margin-right: 0; + } + + .control-section h4 { + font-size: 10px; + font-weight: 600; + margin: 0 0 4px; + color: var(--text-label); + text-transform: uppercase; + letter-spacing: 0.5px; + white-space: nowrap; + } + + .input-group { + display: flex; + gap: 6px; + align-items: center; + margin-top: 8px; + } + + .input-group label { + font-size: 10px; + opacity: 0.7; + white-space: nowrap; + } + + .input-group input { + flex: 1; + padding: 6px; + background: var(--input-bg); + border: 1px solid var(--input-border); + border-radius: 4px; + color: var(--text-primary); + font-size: 11px; + min-width: 80px; + } + + .input-group input:focus { + outline: none; + border-color: var(--input-focus-border); + background: var(--bg-hover); + } + + .input-group { + display: none; + + /* Skryté - šetříme místo */ + } + + .input-group label { + font-size: 8px; + opacity: 0.7; + white-space: nowrap; + } + + .input-group input { + flex: 1; + padding: 2px 4px; + background: var(--input-bg); + border: 1px solid var(--input-border); + border-radius: 3px; + color: var(--text-primary); + font-size: 9px; + } + + .input-group input:focus { + outline: none; + border-color: var(--input-focus-border); + background: var(--bg-hover); + } + + /* Status texty - skryté */ + .control-section .status { + display: none; + } + + .status span { + color: var(--success-text); + font-weight: 600; + } + + .notification-toast { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + min-width: 400px; + max-width: 500px; + background: var(--dialog-bg); + border: 2px solid var(--dialog-border); + border-radius: 16px; + backdrop-filter: blur(20px); + box-shadow: 0 20px 60px var(--shadow-strong); + z-index: 10000; + animation: popIn 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); + } + + .ack-checkbox-wrapper { + display: flex; + align-items: flex-start; + gap: 12px; + margin-bottom: 20px; + padding: 12px; + background: var(--modal-checkbox-bg); + border-radius: 8px; + } + + .ack-checkbox-wrapper input[type="checkbox"] { + margin-top: 3px; + width: 18px; + height: 18px; + cursor: pointer; + } + + .ack-checkbox-wrapper label { + flex: 1; + font-size: 13px; + line-height: 1.5; + color: var(--modal-checkbox-label); + cursor: pointer; + } + + .shield-status.idle { + background: var(--shield-idle-bg); + border: 1px solid var(--shield-idle-border); + color: var(--shield-idle-text); + } + + .shield-status.pending { + background: var(--shield-pending-bg); + border: 1px solid var(--shield-pending-border); + color: var(--shield-pending-text); + animation: pulse-status 1.5s ease-in-out infinite; + } + + .shield-status.processing { + background: var(--shield-processing-bg); + border: 1px solid var(--shield-processing-border); + color: var(--shield-processing-text); + } + + /* Button states for shield */ + + /* Status text transitions */ + .status .transitioning { + color: var(--shield-pending-text); + animation: pulse-text 1s ease-in-out infinite; + } + + /* Queue indicator */ + .queue-indicator { + display: inline-block; + padding: 2px 8px; + background: var(--shield-queue-bg); + border-radius: 12px; + font-size: 11px; + font-weight: 600; + margin-left: 8px; + color: var(--shield-pending-text); + } + + /* Shield Queue Table */ + .shield-queue-table { + width: 100%; + max-width: 1600px; + margin: 10px auto 0; + border-collapse: collapse; + font-size: 12px; + table-layout: fixed; + } + + .shield-queue-table th { + background: var(--table-header-bg); + padding: 10px 12px; + text-align: left; + font-weight: 600; + border-bottom: 1px solid var(--table-border); + white-space: nowrap; + } + + .shield-queue-table th:nth-child(1) { + width: 140px; + } + + /* Stav */ + .shield-queue-table th:nth-child(2) { + width: 200px; + } + + /* Služba */ + .shield-queue-table th:nth-child(3) { + width: auto; + } + + /* Změny (zbytek prostoru) */ + .shield-queue-table th:nth-child(4) { + width: 90px; + } + + /* Vytvořeno */ + .shield-queue-table th:nth-child(5) { + width: 90px; + } + + /* Trvání */ + + .shield-queue-table td { + padding: 10px 12px; + border-bottom: 1px solid var(--table-border-light); + vertical-align: top; + } + + .shield-queue-table td:nth-child(3) { + word-break: break-word; + } + + .shield-queue-table tr:hover { + background: rgb(255, 255, 255, 0.03); + } + + .queue-status-running { + color: #42a5f5; + font-weight: 600; + } + + .queue-status-queued { + color: #ffc107; + } + + .queue-time { + opacity: 0.7; + font-size: 11px; + } + + .queue-empty { + text-align: center; + padding: 20px; + opacity: 0.5; + } + + /* === LIGHT THEME OVERRIDES === */ + body.light-theme { + /* Text adjustments */ + color: var(--text-primary); + } + + body.light-theme .node-label { + opacity: 0.8; + } + + body.light-theme .node-subvalue, + body.light-theme .detail-label, + body.light-theme .detail-extra { + opacity: 0.7; + } + + body.light-theme .time, + body.light-theme .last-update { + opacity: 0.7; + } + + /* Control panel */ + body.light-theme .control-panel { + background: rgb(255, 255, 255, 0.98); + border-bottom: 2px solid rgb(66, 165, 245, 0.3); + box-shadow: 0 4px 20px var(--shadow-color); + } + + body.light-theme .panel-header { + background: rgb(66, 165, 245, 0.1); + border-bottom: 1px solid var(--border-secondary); + } + + body.light-theme .panel-header h3 { + color: var(--text-primary); + } + + body.light-theme + + body.light-theme + + /* Buttons */ + body.light-theme + + body.light-theme + + body.light-theme + + body.light-theme + + /* Info bubbles */ + body.light-theme .info-bubble { + background: rgb(33, 150, 243, 0.15); + border: 1px solid rgb(33, 150, 243, 0.3); + color: #1976d2; + } + + body.light-theme .info-bubble:hover { + background: rgb(33, 150, 243, 0.25); + } + + body.light-theme .info-bubble-tooltip { + background: rgb(30, 30, 30, 0.95); + color: white; + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + } + + /* Shield queue table */ + body.light-theme .shield-queue-table th { + background: rgb(0, 0, 0, 0.05); + border-bottom: 1px solid var(--border-secondary); + color: var(--text-primary); + } + + body.light-theme .shield-queue-table td { + border-bottom: 1px solid rgb(0, 0, 0, 0.05); + color: var(--text-primary); + } + + body.light-theme .shield-queue-table tr:hover { + background: rgb(0, 0, 0, 0.03); + } + + /* Dialogs */ + body.light-theme .charge-dialog, + body.light-theme .notification-toast, + body.light-theme + + body.light-theme + + body.light-theme input[type="number"]:focus, + body.light-theme select:focus { + background: rgb(0, 0, 0, 0.08); + border-color: #42a5f5; + } + + /* Info panel */ + body.light-theme .info-panel { + background: rgb(255, 255, 255, 0.1); + border-top: 1px solid var(--border-secondary); + color: var(--text-secondary); + } + + /* Entity values */ + body.light-theme .entity-value:hover { + color: #1976d2; + } + + /* Status colors adjustments for light theme */ + body.light-theme .queue-status-running { + color: #1976d2; + } + + body.light-theme .queue-status-queued { + color: #f57c00; + } + + /* Battery SVG - light theme */ + body.light-theme .battery-outline { + stroke: #1a1a1a; + } + + body.light-theme .battery-terminal { + fill: #1a1a1a; + } + + /* Phase displays */ + body.light-theme .node-phases, + body.light-theme .phase-value { + opacity: 0.9; + } + + /* Notifications */ + body.light-theme .inverter-notification, + body.light-theme .battery-current-indicator, + body.light-theme .battery-voltage-indicator, + body.light-theme .battery-temp-indicator { + background: rgb(0, 0, 0, 0.08); + border: 1px solid rgb(0, 0, 0, 0.15); + color: var(--text-primary); + } + + body.light-theme .grid-mode-indicator { + background: rgb(0, 0, 0, 0.08); + border: 1px solid rgb(0, 0, 0, 0.15); + color: var(--text-primary); + } + + /* Control section headers */ + body.light-theme .control-section h4 { + color: var(--text-primary); + opacity: 0.9; + } + + /* Specific status colors that need better contrast in light mode */ + body.light-theme .status-charging { + background: rgb(33, 150, 243, 0.2); + color: #1565c0; + } + + body.light-theme .status-discharging { + background: rgb(255, 152, 0, 0.2); + color: #e65100; + } + + body.light-theme .status-idle { + background: rgb(76, 175, 80, 0.2); + color: #2e7d32; + } + + body.light-theme .status-importing { + background: rgb(244, 67, 54, 0.2); + color: #c62828; + } + + body.light-theme .status-exporting { + background: rgb(76, 175, 80, 0.2); + color: #2e7d32; + } + + /* === TABS === */ + .dashboard-tabs { + display: flex; + gap: 10px; + margin-bottom: 20px; + background: var(--bg-secondary); + padding: 10px; + border-radius: 12px; + border: 1px solid var(--border-primary); + align-items: center; + } + + .dashboard-tab { + flex: 1; + padding: 12px; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + transition: all 0.3s; + text-align: center; + font-weight: 600; + color: var(--text-secondary); + } + + .dashboard-tab:hover { + background: var(--button-hover); + color: var(--text-primary); + } + + .dashboard-tab.active { + background: linear-gradient(135deg, rgb(66, 165, 245, 0.5), rgb(33, 150, 243, 0.5)); + border-color: rgb(66, 165, 245, 0.8); + box-shadow: 0 0 15px rgb(66, 165, 245, 0.4); + color: var(--text-primary); + } + + /* Layout controls */ + .layout-controls { + display: flex; + gap: 8px; + margin-left: auto; + } + + .tab-content { + display: none; + } + + .tab-content.active { + display: block; + } + + .chart-container { + background: var(--bg-secondary); + border-radius: 12px; + border: 1px solid var(--border-primary); + padding: 20px; + margin-bottom: 20px; + } + + .chart-title { + font-size: 18px; + margin-bottom: 15px; + font-weight: 600; + } + + .chart-wrapper { + position: relative; + height: 400px; + } + + .stats-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 15px; + margin-bottom: 20px; + } + + .stat-label { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 5px; + } + + .stat-value { + font-size: 24px; + font-weight: 700; + } + + .stat-unit { + font-size: 14px; + color: var(--text-secondary); + margin-left: 5px; + } + + @media (width <= 768px) { + .dashboard-tabs { + flex-direction: column; + } + + .chart-wrapper { + height: 300px; + } + + .stats-grid { + grid-template-columns: 1fr; + } + } + + /* === CUSTOM TILES === */ + .custom-tiles-section { + position: absolute; + top: 0; + left: 0; + right: 0; + pointer-events: none; + + /* Umožní klikání přes sekci na flow pod ní */ + z-index: 10; + } + + /* Levý blok - levý horní roh */ + #tiles-left { + margin-right: auto; + } + + /* Pravý blok - pravý horní roh */ + #tiles-right { + margin-left: auto; + } + + /* Tile base */ + .dashboard-tile { + position: relative; + background: rgb(255, 255, 255, 0.03); + backdrop-filter: blur(10px); + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 8px; + min-height: 45px; + max-height: 45px; + display: flex; + align-items: flex-end; + justify-content: center; + transition: all 0.3s ease; + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.2); + } + + .dashboard-tile:hover { + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + background: rgb(255, 255, 255, 0.05); + border-color: rgb(255, 255, 255, 0.12); + } + + /* Neaktivní dlaždice (hodnota = 0) */ + + /* Placeholder tile */ + + /* Entity tile - původní vertikální layout (DEPRECATED) */ + + /* Nový horizontální layout */ + + /* Hlavní obsah (ikona + hodnota/stav) */ + + /* Velká ikona vlevo */ + + /* Velká hodnota entity */ + + /* Stav tlačítka */ + + /* Název při hover */ + + /* Podporné entity v rozích */ + + /* Button specific label */ + + /* Button tile */ + + /* Custom tooltip pro elementy s title atributem v tilech + Pozn.: na touch zařízeních může `:hover` "zůstat viset", proto tooltip jen pro hover+fine pointer. */ + @media (hover: hover) and (pointer: fine) { + .dashboard-tile [title] { + position: relative; + cursor: help; + } + + .dashboard-tile [title]:hover::before { + content: attr(title); + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%) translateY(-8px); + background: rgb(0, 0, 0, 0.95); + color: #fff; + padding: 8px 12px; + border-radius: 6px; + font-size: 11px; + font-weight: 400; + line-height: 1.4; + white-space: pre-wrap; + z-index: 1000; + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.4); + min-width: 200px; + max-width: 400px; + text-align: left; + pointer-events: none; + font-family: 'Courier New', monospace; + } + + .dashboard-tile [title]:hover::after { + content: ''; + position: absolute; + bottom: 100%; + left: 50%; + transform: translateX(-50%) translateY(-2px); + border: 6px solid transparent; + border-top-color: rgb(0, 0, 0, 0.95); + z-index: 999; + pointer-events: none; + } + } + + /* Remove button */ + + /* Edit button */ + + .dashboard-tile:hover + + /* Error tile */ + + /* Dialog overlay */ + + /* Dialog tabs */ + + /* Dialog content */ + + /* Form elements */ + .form-group { + margin-bottom: 16px; + } + + .form-group label { + display: block; + margin-bottom: 6px; + font-size: 13px; + color: var(--text-secondary); + font-weight: 600; + } + + .form-input { + width: 100%; + padding: 10px; + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 6px; + color: var(--text-primary); + font-size: 14px; + font-family: inherit; + } + + .form-input:focus { + outline: none; + border-color: rgb(66, 165, 245, 0.6); + box-shadow: 0 0 0 3px rgb(66, 165, 245, 0.1); + } + + .form-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 12px; + } + + /* Entity list */ + .entity-list { + max-height: 300px; + overflow-y: auto; + border: 1px solid var(--border-primary); + border-radius: 6px; + background: var(--bg-secondary); + margin-bottom: 16px; + } + + .entity-item { + display: flex; + align-items: center; + padding: 8px 12px; + border-bottom: 1px solid var(--border-primary); + transition: background 0.2s; + } + + .entity-item:last-child { + border-bottom: none; + } + + .entity-item:hover { + background: rgb(255, 255, 255, 0.05); + } + + .entity-item input[type="radio"] { + margin-right: 10px; + cursor: pointer; + } + + .entity-item label { + flex: 1; + cursor: pointer; + margin: 0; + } + + .entity-item-content { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + } + + .entity-item-name { + font-size: 13px; + color: var(--text-primary); + display: flex; + align-items: center; + gap: 6px; + } + + .entity-item-icon { + opacity: 0.7; + } + + .entity-item-value { + font-size: 12px; + color: var(--text-secondary); + } + + /* Support entity lists */ + .support-entity-list { + max-height: 200px; + margin-top: 8px; + margin-bottom: 8px; + } + + .support-entity-item { + cursor: pointer; + padding: 6px 10px; + } + + .support-entity-item:hover { + background: rgb(66, 165, 245, 0.1); + } + + /* Icon suggestions */ + .icon-suggestions { + margin-top: 8px; + padding: 8px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 8px; + background: rgb(20, 20, 25, 0.95); + backdrop-filter: blur(20px); + max-height: 240px; + overflow-y: auto; + box-shadow: 0 8px 24px rgb(0, 0, 0, 0.4); + display: grid; + grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); + gap: 4px; + } + + .icon-suggestion-item { + padding: 8px 12px; + cursor: pointer; + border-radius: 6px; + transition: all 0.2s; + display: flex; + align-items: center; + gap: 8px; + background: rgb(255, 255, 255, 0.03); + border: 1px solid rgb(255, 255, 255, 0.08); + } + + .icon-suggestion-item:hover { + background: rgb(66, 165, 245, 0.15); + border-color: rgb(66, 165, 245, 0.4); + transform: translateY(-1px); + box-shadow: 0 2px 8px rgb(66, 165, 245, 0.2); + } + + .icon-suggestion-item ha-icon { + color: var(--text-primary); + flex-shrink: 0; + } + + .icon-name { + font-size: 11px; + color: var(--text-secondary); + font-family: monospace; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .icon-preview { + font-size: 12px; + color: var(--text-secondary); + font-family: monospace; + } + + /* Dialog footer */ + + /* Icon Input Wrapper */ + .icon-input-wrapper { + display: flex; + align-items: center; + gap: 8px; + position: relative; + } + + .icon-preview-box { + width: 42px; + height: 42px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 6px; + background: rgb(255, 255, 255, 0.03); + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: all 0.2s; + flex-shrink: 0; + } + + .icon-preview-box:hover { + background: rgb(66, 165, 245, 0.1); + border-color: rgb(66, 165, 245, 0.4); + transform: scale(1.05); + } + + .icon-preview-box ha-icon { + --mdc-icon-size: 24px; + + color: var(--text-primary); + } + + .icon-preview-placeholder { + font-size: 20px; + opacity: 0.5; + } + + .icon-input-field { + flex: 1; + pointer-events: none; + background: rgb(255, 255, 255, 0.02) !important; + } + + .icon-picker-btn { + width: 36px; + height: 36px; + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 6px; + background: rgb(66, 165, 245, 0.1); + color: var(--text-primary); + font-size: 18px; + cursor: pointer; + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .icon-picker-btn:hover { + background: rgb(66, 165, 245, 0.2); + border-color: rgb(66, 165, 245, 0.4); + transform: scale(1.05); + } + + /* Icon Picker Modal */ + .icon-picker-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgb(0, 0, 0, 0.7); + backdrop-filter: blur(5px); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + } + + .icon-picker-content { + background: rgb(20, 20, 25, 0.98); + backdrop-filter: blur(20px); + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 12px; + width: 90%; + max-width: 800px; + max-height: 80vh; + display: flex; + flex-direction: column; + box-shadow: 0 12px 40px rgb(0, 0, 0, 0.5); + } + + .icon-picker-header { + padding: 20px; + border-bottom: 1px solid rgb(255, 255, 255, 0.1); + display: flex; + justify-content: space-between; + align-items: center; + } + + .icon-picker-header h3 { + margin: 0; + color: var(--text-primary); + font-size: 18px; + } + + .icon-picker-close { + background: none; + border: none; + color: var(--text-secondary); + font-size: 24px; + cursor: pointer; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 6px; + transition: all 0.2s; + } + + .icon-picker-close:hover { + background: rgb(244, 67, 54, 0.1); + color: rgb(244, 67, 54, 1); + } + + .icon-picker-search { + padding: 15px 20px; + border-bottom: 1px solid rgb(255, 255, 255, 0.1); + } + + .icon-picker-body { + padding: 20px; + overflow-y: auto; + flex: 1; + } + + .icon-category { + margin-bottom: 24px; + } + + .icon-category-title { + margin: 0 0 12px; + font-size: 13px; + color: var(--text-secondary); + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + } + + .icon-category-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 8px; + } + + .icon-picker-item { + padding: 12px 8px; + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 8px; + background: rgb(255, 255, 255, 0.03); + cursor: pointer; + transition: all 0.2s; + display: flex; + flex-direction: column; + align-items: center; + gap: 6px; + } + + .icon-picker-item:hover { + background: rgb(66, 165, 245, 0.15); + border-color: rgb(66, 165, 245, 0.4); + transform: translateY(-2px); + box-shadow: 0 4px 12px rgb(66, 165, 245, 0.2); + } + + .icon-picker-item ha-icon { + --mdc-icon-size: 28px; + + color: var(--text-primary); + display: inline-flex !important; + width: 28px; + height: 28px; + flex-shrink: 0; + } + + .icon-picker-name { + font-size: 10px; + color: var(--text-secondary); + text-align: center; + word-break: break-word; + } + + /* Mobile responsive */ + @media (width <= 768px) { + .form-row { + grid-template-columns: 1fr; + } + + .icon-picker-content { + width: 95%; + max-height: 90vh; + } + + .icon-category-grid { + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + } + + /* ČHMÚ Warning - mobile responsiveness */ + .header { + flex-wrap: wrap; + gap: 10px; + } + + .chmu-warning-badge { + order: 3; + width: 100%; + justify-content: center; + padding: 10px 16px; + } + + .chmu-text { + white-space: normal; + text-align: center; + } + + .chmu-modal-content { + width: 95%; + max-height: 90vh; + } + + .chmu-warning-info { + grid-template-columns: 1fr; + } + + /* Boiler tab mobile */ + .boiler-status-grid, + .profile-grid { + grid-template-columns: repeat(2, 1fr); + } + } + + /* === BOILER TAB STYLES === */ + .boiler-control-panel { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 12px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 4px 12px var(--shadow-color); + transition: all 0.3s ease; + } + + .boiler-control-panel.minimized .panel-content { + display: none; + } + + .boiler-status-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 15px; + margin-top: 15px; + } + + .status-card { + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 8px; + padding: 15px; + text-align: center; + transition: all 0.2s ease; + } + + .status-card:hover { + background: var(--bg-hover); + border-color: var(--border-primary); + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--shadow-color); + } + + .status-label { + font-size: 0.85em; + color: var(--text-secondary); + margin-bottom: 8px; + font-weight: 500; + } + + .status-value { + font-size: 1.5em; + color: var(--text-primary); + font-weight: bold; + cursor: pointer; + } + + .boiler-plan-info { + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 8px; + padding: 15px; + margin-top: 15px; + } + + .plan-info-row { + display: flex; + justify-content: space-between; + padding: 8px 0; + border-bottom: 1px solid var(--border-tertiary); + } + + .plan-info-row:last-child { + border-bottom: none; + } + + .plan-info-label { + color: var(--text-secondary); + font-size: 0.9em; + } + + .plan-info-value { + color: var(--text-primary); + font-weight: 600; + font-family: 'Courier New', monospace; + } + + .chart-section { + margin: 20px 0; + } + + .chart-container { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 12px; + padding: 20px; + box-shadow: 0 4px 12px var(--shadow-color); + } + + .boiler-profile-section { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 12px; + padding: 20px; + margin-top: 20px; + box-shadow: 0 4px 12px var(--shadow-color); + } + + .boiler-profile-section h3 { + margin-bottom: 15px; + color: var(--text-primary); + font-size: 1.2em; + } + + .profile-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 15px; + } + + .profile-card { + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 8px; + padding: 15px; + text-align: center; + transition: all 0.2s ease; + } + + .profile-card:hover { + background: var(--bg-hover); + border-color: var(--border-primary); + transform: translateY(-2px); + box-shadow: 0 4px 8px var(--shadow-color); + } + + .profile-label { + font-size: 0.85em; + color: var(--text-secondary); + margin-bottom: 8px; + font-weight: 500; + } + + .profile-value { + font-size: 1.3em; + color: var(--text-primary); + font-weight: bold; + } + + /* Boiler button styling */ + #btn-plan-boiler { + background: linear-gradient(135deg, rgb(33, 150, 243, 0.2) 0%, rgb(33, 150, 243, 0.1) 100%); + border-color: rgb(33, 150, 243, 0.5); + } + + #btn-plan-boiler:hover { + background: linear-gradient(135deg, rgb(33, 150, 243, 0.3) 0%, rgb(33, 150, 243, 0.15) 100%); + border-color: rgb(33, 150, 243, 0.7); + } + + #btn-apply-boiler { + background: linear-gradient(135deg, rgb(76, 175, 80, 0.2) 0%, rgb(76, 175, 80, 0.1) 100%); + border-color: rgb(76, 175, 80, 0.5); + } + + #btn-apply-boiler:hover { + background: linear-gradient(135deg, rgb(76, 175, 80, 0.3) 0%, rgb(76, 175, 80, 0.15) 100%); + border-color: rgb(76, 175, 80, 0.7); + } + + #btn-cancel-boiler { + background: linear-gradient(135deg, rgb(244, 67, 54, 0.2) 0%, rgb(244, 67, 54, 0.1) 100%); + border-color: rgb(244, 67, 54, 0.5); + } + + #btn-cancel-boiler:hover { + background: linear-gradient(135deg, rgb(244, 67, 54, 0.3) 0%, rgb(244, 67, 54, 0.15) 100%); + border-color: rgb(244, 67, 54, 0.7); + } + + /* NEW: Heating Ratio Bar */ + .heating-ratio-container { + margin-top: 10px; + } + + .ratio-bar { + width: 100%; + height: 30px; + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 15px; + overflow: hidden; + display: flex; + position: relative; + } + + .ratio-grid { + background: linear-gradient(90deg, rgb(33, 150, 243, 0.6), rgb(33, 150, 243, 0.8)); + height: 100%; + transition: width 0.5s ease; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 0.85em; + font-weight: bold; + } + + .ratio-alt { + background: linear-gradient(90deg, rgb(255, 152, 0, 0.6), rgb(255, 152, 0, 0.8)); + height: 100%; + transition: width 0.5s ease; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-size: 0.85em; + font-weight: bold; + } + + .ratio-labels { + display: flex; + justify-content: space-between; + margin-top: 8px; + font-size: 0.9em; + color: var(--text-secondary); + } + + /* NEW: Predicted Usage */ + .boiler-predicted-usage { + display: flex; + flex-direction: column; + gap: 10px; + } + + .usage-item { + display: flex; + justify-content: space-between; + padding: 8px 12px; + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 6px; + transition: all 0.2s ease; + } + + .usage-item:hover { + background: var(--bg-hover); + border-color: var(--border-primary); + } + + .usage-label { + color: var(--text-secondary); + font-size: 0.9em; + } + + .usage-value { + color: var(--text-primary); + font-weight: bold; + } + + /* NEW: Grade Thermometer */ + .boiler-visual-section { + margin-top: 20px; + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 12px; + padding: 20px; + box-shadow: 0 4px 12px var(--shadow-color); + } + + .visual-grid { + display: grid; + grid-template-columns: 1fr 2fr; + gap: 30px; + margin-bottom: 30px; + } + + .grade-thermometer-container { + display: flex; + flex-direction: column; + align-items: center; + } + + .grade-thermometer-container h3 { + margin-bottom: 20px; + color: var(--text-primary); + } + + .boiler-tank { + position: relative; + width: 120px; + height: 400px; + background: var(--bg-tertiary); + border: 2px solid var(--border-primary); + border-radius: 60px; + overflow: hidden; + box-shadow: inset 0 4px 12px var(--shadow-color); + } + + .temperature-scale { + position: absolute; + left: -60px; + top: 0; + height: 100%; + width: 50px; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 10px 0; + } + + .scale-marker { + position: absolute; + left: 0; + width: 100%; + text-align: right; + font-size: 0.75em; + color: var(--text-secondary); + display: flex; + align-items: center; + justify-content: flex-end; + } + + .scale-marker::after { + content: ''; + width: 8px; + height: 1px; + background: var(--border-secondary); + margin-left: 5px; + } + + .water-container { + position: relative; + width: 100%; + height: 100%; + } + + .water-level { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: linear-gradient(180deg, + rgb(255, 87, 34, 0.8) 0%, + rgb(255, 152, 0, 0.7) 20%, + rgb(255, 193, 7, 0.6) 40%, + rgb(76, 175, 80, 0.5) 60%, + rgb(33, 150, 243, 0.4) 80%, + rgb(3, 169, 244, 0.3) 100% + ); + transition: height 0.8s ease; + border-radius: 0 0 58px 58px; + } + + .target-line { + position: absolute; + left: 0; + right: 0; + height: 2px; + background: rgb(255, 193, 7, 0.9); + box-shadow: 0 0 8px rgb(255, 193, 7, 0.6); + transition: bottom 0.5s ease; + } + + .target-label { + position: absolute; + right: 5px; + top: -20px; + background: rgb(255, 193, 7, 0.2); + padding: 2px 8px; + border-radius: 4px; + font-size: 0.7em; + color: #FFC107; + font-weight: bold; + } + + .sensor-marker { + position: absolute; + right: -45px; + width: 40px; + height: 4px; + background: var(--text-primary); + border-radius: 2px; + transition: bottom 0.5s ease; + } + + .sensor-marker::before { + content: ''; + position: absolute; + left: -10px; + top: 50%; + transform: translateY(-50%); + width: 10px; + height: 10px; + background: var(--accent-color); + border: 2px solid var(--bg-secondary); + border-radius: 50%; + box-shadow: 0 0 8px var(--accent-color); + } + + .sensor-label { + position: absolute; + right: -80px; + top: 50%; + transform: translateY(-50%); + font-size: 0.75em; + color: var(--text-primary); + white-space: nowrap; + font-weight: bold; + } + + .sensor-top::before { + background: rgb(255, 87, 34, 0.9); + box-shadow: 0 0 8px rgb(255, 87, 34, 0.6); + } + + .sensor-bottom::before { + background: rgb(33, 150, 243, 0.9); + box-shadow: 0 0 8px rgb(33, 150, 243, 0.6); + } + + .grade-label { + margin-top: 15px; + font-size: 1.1em; + color: var(--text-primary); + font-weight: bold; + text-align: center; + } + + /* NEW: Profiling Chart */ + .profiling-chart-container { + display: flex; + flex-direction: column; + } + + .profiling-chart-container h3 { + margin-bottom: 15px; + color: var(--text-primary); + } + + .profile-stats { + display: flex; + justify-content: space-around; + margin-top: 15px; + padding: 15px; + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 8px; + } + + .stat-item { + display: flex; + flex-direction: column; + align-items: center; + gap: 5px; + } + + .stat-label { + font-size: 0.85em; + color: var(--text-secondary); + } + + .stat-value { + font-size: 1.2em; + color: var(--accent-color); + font-weight: bold; + } + + /* NEW: Heatmap */ + .heatmap-section { + margin-top: 20px; + } + + .heatmap-section h3 { + margin-bottom: 15px; + color: var(--text-primary); + } + + .heatmap-container { + display: grid; + grid-template-columns: 60px repeat(24, 1fr); + gap: 2px; + background: var(--bg-tertiary); + border: 1px solid var(--border-secondary); + border-radius: 8px; + padding: 10px; + } + + .heatmap-day-label { + display: flex; + align-items: center; + justify-content: center; + font-size: 0.85em; + color: var(--text-secondary); + font-weight: 500; + } + + .heatmap-hour-label { + display: flex; + align-items: center; + justify-content: center; + font-size: 0.7em; + color: var(--text-secondary); + padding: 4px 0; + } + + .heatmap-cell { + aspect-ratio: 1; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s ease; + position: relative; + } + + .heatmap-cell:hover { + transform: scale(1.1); + z-index: 10; + box-shadow: 0 4px 8px var(--shadow-color); + } + + .heatmap-cell.low { + background: rgb(76, 175, 80, 0.3); + } + + .heatmap-cell.medium { + background: rgb(255, 193, 7, 0.5); + } + + .heatmap-cell.high { + background: rgb(244, 67, 54, 0.7); + } + + .heatmap-cell.none { + background: var(--bg-secondary); + opacity: 0.3; + } + + .heatmap-legend { + display: flex; + justify-content: center; + gap: 30px; + margin-top: 15px; + padding: 10px; + } + + .legend-item { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.9em; + color: var(--text-secondary); + } + + .legend-color { + width: 20px; + height: 20px; + border-radius: 4px; + border: 1px solid var(--border-secondary); + } + + .legend-color.low { + background: rgb(76, 175, 80, 0.3); + } + + .legend-color.medium { + background: rgb(255, 193, 7, 0.5); + } + + .legend-color.high { + background: rgb(244, 67, 54, 0.7); + } + + /* Responsive adjustments */ + @media (width <= 900px) { + .visual-grid { + grid-template-columns: 1fr; + } + + .heatmap-container { + grid-template-columns: 40px repeat(24, 1fr); + font-size: 0.8em; + } + } + + /* ========================================================================== */ + + /* MODE TIMELINE DIALOG - Phase 2.7 */ + + /* ========================================================================== */ + + /* Clickable card effect */ + .clickable-card:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgb(156, 39, 176, 0.3) !important; + } + + .clickable-card:active { + transform: translateY(0); + } + + /* Dialog overlay */ + + /* Dialog content */ + .timeline-dialog { + background: var(--dialog-bg); + border: 2px solid var(--dialog-border); + border-radius: 12px; + max-width: 1200px; + width: 100%; + max-height: 90vh; + overflow-y: auto; + box-shadow: 0 20px 60px rgb(0, 0, 0, 0.5); + animation: slideIn 0.3s ease-out; + } + + .timeline-dialog .dialog-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; + } + + .dialog-header-left { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 12px; + } + + .plan-toggle { + display: flex; + align-items: center; + gap: 6px; + background: rgb(255, 255, 255, 0.05); + border-radius: 999px; + padding: 4px 10px; + border: 1px solid rgb(255, 255, 255, 0.08); + } + + .plan-toggle-label { + font-size: 0.7em; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); + } + + .plan-toggle-btn { + background: transparent; + border: none; + color: var(--text-secondary); + font-size: 0.75em; + font-weight: 600; + padding: 4px 10px; + border-radius: 999px; + cursor: pointer; + text-transform: uppercase; + letter-spacing: 0.05em; + transition: background 0.2s, color 0.2s; + } + + .plan-toggle-btn.active { + background: var(--primary-color); + color: #fff; + } + + .plan-toggle-btn:not(.active):hover { + color: var(--text-primary); + } + + .timeline-header-controls { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 10px; + } + + .auto-mode-toggle { + display: flex; + align-items: center; + gap: 10px; + padding: 4px 12px; + border-radius: 999px; + border: 1px solid rgb(255, 255, 255, 0.12); + background: rgb(255, 255, 255, 0.03); + transition: border-color 0.2s, background 0.2s, opacity 0.2s; + } + + .auto-mode-toggle.loading { + opacity: 0.6; + } + + .auto-mode-toggle.error { + border-color: rgb(244, 67, 54, 0.6); + } + + .auto-mode-switch { + position: relative; + width: 40px; + height: 20px; + } + + .auto-mode-switch input { + opacity: 0; + width: 0; + height: 0; + } + + .auto-mode-switch-track { + position: absolute; + inset: 0; + background: rgb(255, 255, 255, 0.15); + border-radius: 999px; + transition: background 0.2s; + } + + .auto-mode-switch-track::after { + content: ""; + position: absolute; + width: 16px; + height: 16px; + border-radius: 50%; + background: #fff; + top: 2px; + left: 2px; + transition: transform 0.2s; + box-shadow: 0 2px 4px rgb(0, 0, 0, 0.3); + } + + .auto-mode-switch input:checked + .auto-mode-switch-track { + background: #4caf50; + } + + .auto-mode-switch input:checked + .auto-mode-switch-track::after { + transform: translateX(20px); + } + + .auto-mode-toggle-text { + display: flex; + flex-direction: column; + line-height: 1.1; + } + + .auto-mode-toggle-title { + font-size: 0.65em; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--text-secondary); + } + + .auto-mode-toggle-status { + font-size: 0.85em; + font-weight: 600; + color: var(--text-secondary); + transition: color 0.2s; + } + + .auto-mode-toggle-status.enabled { + color: #4caf50; + } + + .auto-mode-toggle-status.disabled { + color: var(--text-secondary); + } + + .auto-mode-toggle-status.error { + color: #ff5252; + } + + /* Timeline summary */ + .timeline-summary { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 15px; + margin-bottom: 25px; + } + + .summary-metric { + background: rgb(255, 255, 255, 0.05); + padding: 15px; + border-radius: 8px; + border: 1px solid var(--border-secondary); + text-align: center; + } + + .summary-metric.success { + background: rgb(76, 175, 80, 0.1); + border-color: rgb(76, 175, 80, 0.3); + } + + .metric-label { + display: block; + font-size: 0.85em; + color: var(--text-secondary); + margin-bottom: 5px; + } + + .metric-value { + display: block; + font-size: 1.5em; + font-weight: 600; + color: var(--text-primary); + } + + .summary-metric.success .metric-value { + color: #4CAF50; + } + + /* Timeline container */ + .timeline-container { + position: relative; + height: 100px; + background: rgb(0, 0, 0, 0.3); + border-radius: 8px; + margin-bottom: 25px; + overflow: hidden; + border: 1px solid var(--border-primary); + } + + .timeline-hour-markers { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 20px; + display: flex; + justify-content: space-between; + padding: 0 2px; + font-size: 0.7em; + color: var(--text-tertiary); + z-index: 1; + } + + .hour-marker { + display: flex; + align-items: center; + justify-content: center; + width: 30px; + } + + .timeline-blocks { + position: absolute; + inset: 25px 0 0; + display: flex; + } + + .timeline-block { + position: absolute; + top: 0; + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-right: 1px solid rgb(0, 0, 0, 0.2); + cursor: pointer; + transition: all 0.2s; + overflow: hidden; + } + + .timeline-block:hover { + filter: brightness(1.2); + z-index: 2; + box-shadow: 0 0 10px rgb(255, 255, 255, 0.3); + } + + .timeline-block .block-icon { + font-size: 1.2em; + margin-bottom: 2px; + } + + .timeline-block .block-label { + font-size: 0.65em; + font-weight: 600; + text-shadow: 0 1px 2px rgb(0, 0, 0, 0.5); + } + + .timeline-block .block-time { + font-size: 0.6em; + opacity: 0.8; + position: absolute; + bottom: 2px; + } + + /* Current time indicator */ + .timeline-now-indicator { + position: absolute; + top: 20px; + bottom: 0; + width: 2px; + background: #F44336; + z-index: 10; + box-shadow: 0 0 8px rgb(244, 67, 54, 0.8); + transition: left 0.5s ease; + } + + .timeline-now-indicator::before { + content: '▼'; + position: absolute; + top: -20px; + left: 50%; + transform: translateX(-50%); + color: #F44336; + font-size: 12px; + } + + /* Timeline details */ + .timeline-details { + display: flex; + flex-direction: column; + gap: 10px; + margin-bottom: 25px; + } + + .detail-block { + background: rgb(255, 255, 255, 0.03); + border-radius: 8px; + border: 1px solid var(--border-secondary); + overflow: hidden; + transition: all 0.2s; + } + + .detail-block:hover { + border-color: var(--border-primary); + } + + .detail-header { + display: grid; + grid-template-columns: 100px 1fr auto auto auto; + gap: 15px; + padding: 12px 15px; + cursor: pointer; + align-items: center; + background: rgb(255, 255, 255, 0.02); + } + + .detail-header:hover { + background: rgb(255, 255, 255, 0.05); + } + + .detail-time { + font-weight: 600; + color: var(--text-primary); + font-size: 0.95em; + } + + .detail-mode { + display: flex; + align-items: center; + gap: 8px; + font-weight: 600; + } + + .detail-mode-icon { + font-size: 1.2em; + } + + .detail-cost { + font-weight: 600; + color: var(--text-secondary); + } + + .detail-savings { + font-weight: 600; + font-size: 0.9em; + } + + .detail-savings.positive { + color: #4CAF50; + } + + .detail-savings.negative { + color: #F44336; + } + + .detail-expand { + color: var(--text-tertiary); + font-size: 0.8em; + transition: transform 0.2s; + } + + .detail-block.expanded .detail-expand { + transform: rotate(180deg); + } + + .detail-body { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease-out, padding 0.3s ease-out; + } + + .detail-block.expanded .detail-body { + max-height: 500px; + padding: 15px; + border-top: 1px solid var(--border-tertiary); + } + + .detail-rationale { + background: rgb(66, 165, 245, 0.1); + padding: 12px; + border-radius: 6px; + border-left: 3px solid #42A5F5; + margin-bottom: 12px; + font-size: 0.9em; + line-height: 1.5; + } + + .detail-rationale strong { + color: #42A5F5; + } + + .detail-metrics { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 8px; + } + + .metric-row { + display: flex; + justify-content: space-between; + padding: 8px; + background: rgb(255, 255, 255, 0.03); + border-radius: 4px; + font-size: 0.85em; + } + + .metric-row span:first-child { + color: var(--text-secondary); + } + + .metric-row span:last-child { + font-weight: 600; + color: var(--text-primary); + } + + /* What-if alternatives */ + .timeline-alternatives { + background: rgb(255, 152, 0, 0.08); + padding: 15px; + border-radius: 8px; + border: 1px solid rgb(255, 152, 0, 0.2); + } + + .timeline-alternatives h4 { + margin: 0 0 12px; + color: #FF9800; + font-size: 1.1em; + } + + .alt-item { + background: rgb(255, 255, 255, 0.03); + padding: 10px 12px; + border-radius: 6px; + margin-bottom: 8px; + border: 1px solid var(--border-tertiary); + } + + .alt-item:last-child { + margin-bottom: 0; + } + + .alt-header { + display: grid; + grid-template-columns: 1fr auto auto; + gap: 15px; + align-items: center; + margin-bottom: 5px; + } + + .alt-name { + font-weight: 600; + color: var(--text-primary); + } + + .alt-cost { + color: var(--text-secondary); + font-size: 0.9em; + } + + .alt-delta { + font-weight: 600; + font-size: 0.9em; + } + + .alt-delta.negative { + color: #F44336; + } + + .alt-delta.positive { + color: #4CAF50; + } + + .alt-explain { + font-size: 0.8em; + color: var(--text-secondary); + font-style: italic; + line-height: 1.4; + } + + /* Responsive */ + @media (width <= 900px) { + .timeline-summary { + grid-template-columns: 1fr; + } + + .timeline-container { + height: 80px; + } + + .detail-header { + grid-template-columns: 1fr; + gap: 8px; + } + + .detail-metrics { + grid-template-columns: 1fr; + } + + .alt-header { + grid-template-columns: 1fr; + gap: 5px; + } + } + + /* Timeline Tabs */ + .timeline-tabs { + display: flex; + gap: 10px; + margin-bottom: 20px; + border-bottom: 2px solid var(--border-primary); + padding-bottom: 0; + } + + .timeline-tab { + background: rgb(255, 255, 255, 0.05); + border: 1px solid var(--border-secondary); + border-bottom: none; + color: var(--text-secondary); + padding: 12px 24px; + font-size: 0.95em; + font-weight: 600; + cursor: pointer; + border-radius: 8px 8px 0 0; + transition: all 0.2s; + position: relative; + bottom: -2px; + } + + .timeline-tab:hover { + background: rgb(255, 255, 255, 0.08); + color: var(--text-primary); + } + + .timeline-tab.active { + background: rgb(33, 150, 243, 0.15); + border-color: #2196F3; + color: #2196F3; + border-bottom: 2px solid #2196F3; + } + + .timeline-tab-content { + display: none; + } + + .timeline-tab-content.active { + display: block; + } + + /* Day Stats */ + .day-stats { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 12px; + margin-bottom: 20px; + padding: 15px; + background: rgb(33, 150, 243, 0.08); + border-radius: 8px; + border: 1px solid rgb(33, 150, 243, 0.2); + } + + .day-stat { + text-align: center; + } + + .day-stat-label { + font-size: 0.8em; + color: var(--text-secondary); + margin-bottom: 5px; + } + + .day-stat-value { + font-size: 1.3em; + font-weight: 700; + color: var(--text-primary); + } + + .day-stat-value.positive { + color: #4CAF50; + } + + .detail-savings-note { + font-size: 0.85em; + color: #4CAF50; + padding: 8px 12px; + background: rgb(76, 175, 80, 0.1); + border-radius: 6px; + margin-top: 10px; + border-left: 3px solid #4CAF50; + } + + @media (width <= 900px) { + .day-stats { + grid-template-columns: repeat(2, 1fr); + } + } + + /* Visual Timeline */ + .day-timeline-container { + display: grid; + grid-template-columns: 400px 1fr; + gap: 20px; + align-items: start; + } + + .visual-timeline { + position: relative; + height: 120px; + border-radius: 8px; + overflow: hidden; + border: 1px solid var(--border-primary); + box-shadow: inset 0 2px 8px rgb(0, 0, 0, 0.3); + } + + .timeline-background { + position: absolute; + inset: 0; + opacity: 0.6; + } + + .timeline-solar-curve { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + pointer-events: none; + } + + .timeline-mode-blocks { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 30px; + z-index: 2; + display: flex; + } + + .timeline-mode-block { + position: absolute; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + border-right: 1px solid rgb(0, 0, 0, 0.2); + cursor: pointer; + transition: all 0.2s; + } + + .timeline-mode-block:hover { + filter: brightness(1.3); + z-index: 3; + transform: scaleY(1.2); + } + + .timeline-mode-icon { + font-size: 1.2em; + text-shadow: 0 1px 2px rgb(0, 0, 0, 0.5); + } + + .timeline-hour-markers { + position: absolute; + bottom: 32px; + left: 0; + right: 0; + height: 20px; + z-index: 1; + pointer-events: none; + } + + .timeline-hour-mark { + position: absolute; + font-size: 0.7em; + color: rgb(255, 255, 255, 0.6); + transform: translateX(-50%); + text-shadow: 0 1px 2px rgb(0, 0, 0, 0.8); + } + + .timeline-cards { + display: flex; + flex-direction: column; + gap: 10px; + } + + @media (width <= 1100px) { + .day-timeline-container { + grid-template-columns: 1fr; + } + + .visual-timeline { + margin-bottom: 15px; + } + } + + /* ================================================================= + PHASE 2.9: Extended Timeline - Historie vs Plán + Simplified: Only TODAY's plan vs actual comparison + ================================================================= */ + + .today-comparison { + padding: 20px; + max-width: 1400px; + margin: 0 auto; + } + + .comparison-header { + margin-bottom: 30px; + } + + .comparison-header h2 { + margin: 0 0 20px; + color: var(--text-primary, #fff); + font-size: 1.5em; + } + + /* Summary Cards */ + .summary-cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 15px; + margin-bottom: 30px; + } + + .summary-card { + background: var(--card-background, #1e1e1e); + border-radius: 12px; + padding: 20px; + box-shadow: 0 2px 8px rgb(0,0,0,0.1); + border: 2px solid var(--border-color, #333); + } + + .summary-card.better { + border-color: var(--success-color, #4caf50); + background: linear-gradient(135deg, var(--card-background, #1e1e1e) 0%, rgb(76, 175, 80, 0.1) 100%); + } + + .summary-card.worse { + border-color: var(--error-color, #f44336); + background: linear-gradient(135deg, var(--card-background, #1e1e1e) 0%, rgb(244, 67, 54, 0.1) 100%); + } + + /* Top Deviations */ + .top-deviations { + margin-bottom: 30px; + background: var(--card-background, #1e1e1e); + border-radius: 12px; + padding: 20px; + box-shadow: 0 2px 8px rgb(0,0,0,0.1); + } + + .top-deviations h3 { + margin: 0 0 15px; + color: var(--text-primary, #fff); + font-size: 1.2em; + } + + .deviation-list { + display: flex; + flex-direction: column; + gap: 10px; + } + + .deviation-item { + display: grid; + grid-template-columns: 40px 60px 1fr auto; + align-items: center; + gap: 15px; + padding: 12px 15px; + background: var(--summary-bg, #2a2a2a); + border-radius: 8px; + border-left: 4px solid var(--border-color, #333); + } + + .deviation-item.worse { + border-left-color: var(--error-color, #f44336); + } + + .deviation-item.better { + border-left-color: var(--success-color, #4caf50); + } + + .deviation-item .rank { + font-size: 1.3em; + } + + .deviation-item .time { + font-weight: 600; + color: var(--text-primary, #fff); + } + + .deviation-item .modes { + color: var(--text-secondary, #b0b0b0); + font-size: 0.9em; + } + + .deviation-item .delta { + font-weight: 700; + font-size: 1.1em; + } + + .deviation-item .delta.worse { + color: var(--error-color, #f44336); + } + + .deviation-item .delta.better { + color: var(--success-color, #4caf50); + } + + /* Comparison Table */ + .comparison-table { + background: var(--card-background, #1e1e1e); + border-radius: 12px; + padding: 20px; + box-shadow: 0 2px 8px rgb(0,0,0,0.1); + overflow-x: auto; + } + + .comparison-table h3 { + margin: 0 0 15px; + color: var(--text-primary, #fff); + font-size: 1.2em; + } + + .comparison-table table { + width: 100%; + border-collapse: collapse; + } + + .comparison-table thead th { + background: var(--summary-bg, #2a2a2a); + color: var(--text-secondary, #b0b0b0); + font-weight: 600; + text-align: left; + padding: 12px 10px; + font-size: 0.85em; + text-transform: uppercase; + border-bottom: 2px solid var(--border-color, #333); + } + + .comparison-table tbody tr { + border-bottom: 1px solid var(--border-color, #333); + transition: background 0.2s ease; + } + + .comparison-table tbody tr:hover { + background: var(--summary-bg, #2a2a2a); + } + + .comparison-table tbody tr.match { + background: rgb(76, 175, 80, 0.05); + } + + .comparison-table tbody tr.mismatch { + background: rgb(244, 67, 54, 0.05); + } + + .comparison-table tbody td { + padding: 10px; + color: var(--text-primary, #fff); + } + + .time-cell { + font-weight: 600; + font-size: 0.9em; + } + + .mode-cell { + display: flex; + align-items: center; + gap: 8px; + } + + .mode-badge { + display: inline-block; + padding: 4px 10px; + border-radius: 6px; + font-size: 0.75em; + font-weight: 600; + text-transform: uppercase; + color: white; + } + + .soc-cell, + .cost-cell { + text-align: right; + font-variant-numeric: tabular-nums; + } + + .delta-cell { + text-align: right; + font-weight: 700; + font-variant-numeric: tabular-nums; + } + + .delta-cell.better { + color: var(--success-color, #4caf50); + } + + .delta-cell.worse { + color: var(--error-color, #f44336); + } + + .no-historical { + text-align: center; + color: var(--text-secondary, #b0b0b0); + padding: 60px 20px; + } + + /* Responsive */ + @media (width <= 1100px) { + .summary-cards { + grid-template-columns: repeat(2, 1fr); + } + + .comparison-table { + font-size: 0.9em; + } + + .deviation-item { + grid-template-columns: 30px 50px 1fr auto; + gap: 10px; + } + } + + @media (width <= 768px) { + .summary-cards { + grid-template-columns: 1fr; + } + + .comparison-table table { + font-size: 0.8em; + } + + .comparison-table thead th, + .comparison-table tbody td { + padding: 8px 5px; + } + + .deviation-item { + grid-template-columns: 30px 1fr auto; + font-size: 0.9em; + } + + .deviation-item .time { + display: none; + } + } + + /* ============================================================================= + * TIMELINE DIALOG - New Clean Implementation Styles + * ============================================================================= */ + + /* Yesterday Header */ + .yesterday-header h3, + .today-header h3 { + margin: 0 0 20px; + color: var(--text-primary); + font-size: 1.3em; + } + + .stats-row { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 10px; + margin-bottom: 15px; + } + + .stat-box { + background: rgb(33, 150, 243, 0.08); + border-radius: 6px; + padding: 8px 10px; + text-align: center; + border: 1px solid rgb(33, 150, 243, 0.2); + } + + .stat-box.positive { + background: rgb(76, 175, 80, 0.1); + border-color: rgb(76, 175, 80, 0.3); + } + + .stat-box.negative { + background: rgb(244, 67, 54, 0.1); + border-color: rgb(244, 67, 54, 0.3); + } + + .stat-label { + font-size: 0.7em; + color: var(--text-secondary); + margin-bottom: 4px; + opacity: 0.9; + } + + .stat-value { + font-size: 1.05em; + font-weight: 600; + color: var(--text-primary); + line-height: 1.2; + } + + .stat-value small { + font-size: 0.75em; + font-weight: 400; + display: block; + margin-top: 2px; + } + + /* Header Footer - Mode adherence and biggest variance */ + .header-footer { + margin-top: 15px; + padding: 10px 15px; + background: rgb(0, 0, 0, 0.15); + border-radius: 6px; + display: flex; + flex-direction: column; + gap: 8px; + } + + .footer-stat { + font-size: 0.9em; + color: var(--text-secondary); + } + + /* Top Variances */ + .top-variances { + margin: 30px 0; + padding: 20px; + background: rgb(0, 0, 0, 0.2); + border-radius: 8px; + } + + .top-variances h4 { + margin: 0 0 15px; + color: var(--text-primary); + font-size: 1.1em; + } + + .variance-item { + display: grid; + grid-template-columns: 50px 1fr; + gap: 15px; + padding: 15px; + margin-bottom: 10px; + background: rgb(255, 255, 255, 0.03); + border-radius: 6px; + border-left: 4px solid transparent; + } + + .variance-item.positive { + border-left-color: #4CAF50; + } + + .variance-item.negative { + border-left-color: #F44336; + } + + .variance-rank { + font-size: 2em; + text-align: center; + line-height: 1; + } + + .variance-details { + display: flex; + flex-direction: column; + gap: 5px; + } + + .variance-time { + font-weight: 700; + color: var(--text-primary); + } + + .variance-modes { + color: var(--text-secondary); + font-size: 0.9em; + } + + .variance-impact { + font-weight: 600; + font-size: 1.1em; + } + + .variance-item.positive .variance-impact { + color: #4CAF50; + } + + .variance-item.negative .variance-impact { + color: #F44336; + } + + .variance-reason { + font-size: 0.85em; + color: var(--text-secondary); + font-style: italic; + } + + /* Variance Chart Container */ + .variance-chart-container, + .timeline-chart-container { + margin: 30px 0; + padding: 20px; + background: rgb(0, 0, 0, 0.2); + border-radius: 8px; + } + + .variance-chart-container h4, + .timeline-chart-container h4 { + margin: 0 0 15px; + color: var(--text-primary); + font-size: 1.1em; + } + + .variance-chart-container canvas, + .timeline-chart-container canvas { + width: 100% !important; + max-height: 350px !important; + } + + /* Today Tab - Live Status */ + .live-status { + margin-bottom: 30px; + } + + .live-time { + font-size: 0.9em; + color: var(--text-secondary); + font-weight: 400; + } + + .progress-section { + margin: 20px 0; + } + + .progress-label { + display: flex; + justify-content: space-between; + margin-bottom: 8px; + font-size: 0.9em; + color: var(--text-secondary); + } + + .progress-bar { + width: 100%; + height: 30px; + background: rgb(0, 0, 0, 0.3); + border-radius: 15px; + overflow: hidden; + position: relative; + } + + .progress-fill { + height: 100%; + background: linear-gradient(90deg, #2196F3, #4CAF50); + transition: width 0.5s ease; + border-radius: 15px; + } + + /* EOD Prediction */ + .eod-prediction { + margin-top: 30px; + padding: 20px; + background: rgb(33, 150, 243, 0.1); + border-radius: 8px; + border: 1px solid rgb(33, 150, 243, 0.2); + } + + .eod-prediction h4 { + margin: 0 0 15px; + color: var(--text-primary); + font-size: 1.1em; + } + + .trend-message { + margin-top: 15px; + padding: 12px; + background: rgb(0, 0, 0, 0.2); + border-radius: 6px; + text-align: center; + font-weight: 500; + } + + /* Responsive */ + @media (width <= 900px) { + .stats-row { + grid-template-columns: 1fr; + } + + .variance-item { + grid-template-columns: 40px 1fr; + } + + .variance-rank { + font-size: 1.5em; + } + } + + /* =================================================================== + UNIFIED COST TILE - COMPACT VERSION - Fáze 1 V2 + =================================================================== */ + + .unified-cost-tile-compact { + background: transparent; + border: none; + border-radius: 0; + padding: 10px 14px; + transition: all 0.3s ease; + cursor: pointer; + flex: 1; + display: flex; + flex-direction: column; + } + + .unified-cost-tile-compact:hover { + background: transparent; + border-color: transparent; + transform: none; + box-shadow: none; + } + +#unified-cost-tile-container:hover { + background: var(--bg-hover); + border-color: rgb(33, 150, 243, 0.5); + transform: translateY(-1px); + box-shadow: 0 3px 8px var(--shadow-color); +} + + /* COMPACT HEADER: DNES 51 Kč [===] 3% ✅ */ + .uct-header-compact { + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 8px; + } + + .uct-label-inline { + font-size: 0.75em; + font-weight: 600; + color: var(--text-tertiary); + } + + .uct-cost-inline { + font-size: 1.3em; + font-weight: 700; + color: var(--text-primary); + } + + .uct-progress-inline { + flex: 1; + height: 4px; + background: var(--bg-tertiary); + border-radius: 2px; + overflow: hidden; + min-width: 40px; + } + + .uct-progress-bar { + height: 100%; + background: linear-gradient(90deg, #2196F3, #4CAF50); + border-radius: 2px; + transition: width 0.5s ease; + } + + .uct-progress-text { + font-size: 0.7em; + color: var(--text-tertiary); + } + + .uct-status { + font-size: 1.1em; + } + + /* OLD HEADER - keeping for backward compat */ + .uct-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 6px; + } + + .uct-label { + font-size: 0.85em; + font-weight: 600; + color: var(--text-primary); + } + + .uct-progress { + font-size: 0.75em; + color: var(--text-tertiary); + margin-left: 4px; + } + + /* Main cost number */ + .uct-main { + font-size: 1.6em; + font-weight: 700; + text-align: center; + margin: 8px 0; + transition: color 0.3s ease; + } + + .uct-main.cost-better { + color: #4CAF50; + } + + .uct-main.cost-worse { + color: #F44336; + } + + .uct-main.cost-on-plan { + color: var(--text-primary); + } + + /* Main cost number - LARGER variant */ + .uct-main-large { + font-size: 2.2em; + font-weight: 700; + text-align: center; + margin: 12px 0; + color: var(--text-primary); + } + + /* Compact progress bar */ + .uct-bar { + width: 100%; + height: 4px; + background: var(--bg-tertiary); + border-radius: 2px; + overflow: hidden; + margin-bottom: 8px; + } + + .uct-bar-fill { + height: 100%; + background: linear-gradient(90deg, #2196F3, #4CAF50); + transition: width 0.5s ease; + border-radius: 2px; + } + + /* Compact stats row */ + .uct-stats { + display: flex; + justify-content: space-around; + gap: 8px; + margin-bottom: 6px; + } + + .uct-stat { + display: flex; + flex-direction: column; + align-items: center; + gap: 2px; + flex: 1; + } + + .uct-stat-icon { + font-size: 0.8em; + color: var(--text-tertiary); + } + + .uct-stat-value { + font-size: 0.75em; + font-weight: 600; + color: var(--text-secondary); + } + + .uct-stat.cost-better .uct-stat-value { + color: #4CAF50; + } + + .uct-stat.cost-worse .uct-stat-value { + color: #F44336; + } + + .uct-stat.cost-on-plan .uct-stat-value { + color: var(--text-secondary); + } + + /* Context row (yesterday/tomorrow) */ + .uct-context { + display: flex; + justify-content: space-around; + gap: 12px; + padding-top: 6px; + border-top: 1px solid var(--border-tertiary); + } + + .uct-ctx { + font-size: 0.7em; + color: var(--text-secondary); + display: flex; + align-items: center; + gap: 4px; + } + + .uct-ctx.muted { + color: var(--text-disabled); + } + + /* INFO ROW: Savings + Plan vs Actual */ + .uct-info-row { + display: flex; + flex-direction: column; + gap: 4px; + margin: 6px 0; + font-size: 0.75em; + } + + .uct-savings { + font-weight: 600; + text-align: center; + } + + .uct-savings.positive { + color: #4CAF50; + } + + .uct-savings.negative { + color: #F44336; + } + + .uct-savings.neutral { + color: var(--text-secondary); + } + + .uct-delta { + text-align: center; + color: var(--text-secondary); + font-size: 0.9em; + } + + .uct-delta.cost-better { + color: #4CAF50; + } + + /* Custom tooltip for UCT - yellow background matching warning-bg */ + .uct-custom-tooltip { + position: fixed; + z-index: 10000; + padding: 12px 16px; + background: var(--warning-bg); + border: 1px solid rgb(255, 193, 7, 0.4); + border-radius: 8px; + color: var(--text-primary); + font-size: 0.9em; + line-height: 1.5; + max-width: 350px; + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.3); + pointer-events: none; + opacity: 0; + transition: opacity 0.2s ease; + white-space: pre-line; + } + + .uct-custom-tooltip.visible { + opacity: 1; + } + + /* Cursor hint for elements with tooltips */ + .unified-cost-tile [data-tooltip] { + cursor: help; + } + + .uct-delta.cost-worse { + color: #F44336; + } + + /* FOOTER: Včera | Zítra */ + .uct-footer { + display: flex; + justify-content: space-around; + gap: 12px; + padding-top: 6px; + border-top: 1px solid var(--border-tertiary); + font-size: 0.7em; + color: var(--text-tertiary); + margin-top: 6px; + } + + /* Baseline comparison - ultra compact single line */ + .uct-baseline-compact { + font-size: 0.72em; + color: var(--text-secondary); + text-align: center; + padding: 4px 0; + border-top: 1px dashed var(--border-tertiary); + margin-top: 6px; + } + + .uct-baseline-value { + font-weight: 600; + } + + .uct-baseline-value.savings-positive { + color: #4CAF50; + } + + .uct-baseline-value.savings-negative { + color: #F44336; + } + + .uct-baseline-value.savings-neutral { + color: var(--text-secondary); + } + + /* Spot price minigraph - ASCII sparkline */ + .uct-minigraph { + font-family: monospace; + font-size: 0.85em; + line-height: 1.2; + color: var(--text-secondary); + text-align: center; + padding: 6px 0; + letter-spacing: 1px; + background: var(--bg-secondary); + border-radius: 4px; + margin: 6px 0; + } + + /* Savings highlight - BIG version */ + .uct-savings-big { + text-align: center; + padding: 8px 0; + margin: 6px 0; + border-top: 1px dashed var(--border-tertiary); + border-bottom: 1px dashed var(--border-tertiary); + } + + .uct-savings-amount { + font-size: 1.4em; + font-weight: 700; + margin-bottom: 2px; + } + + .uct-savings-amount.savings-positive { + color: #4CAF50; + } + + .uct-savings-amount.savings-negative { + color: #F44336; + } + + .uct-savings-amount.savings-neutral { + color: var(--text-secondary); + } + + .uct-savings-label { + font-size: 0.75em; + color: var(--text-tertiary); + } + + /* Savings highlight - COMPACT version */ + .uct-savings-compact { + font-size: 0.75em; + color: var(--text-secondary); + text-align: center; + padding: 4px 0; + margin: 4px 0; + } + + /* Stats row - inline format */ + .uct-stats-row { + display: flex; + justify-content: space-around; + gap: 8px; + margin: 6px 0; + font-size: 0.75em; + } + + .uct-stat-inline { + color: var(--text-secondary); + } + + .uct-stat-inline.cost-better { + color: #4CAF50; + } + + .uct-stat-inline.cost-worse { + color: #F44336; + } + + /* Responsive */ + @media (width <= 768px) { + .unified-cost-tile-compact { + padding: 8px 12px; + } + + .uct-main { + font-size: 1.4em; + } + + .uct-stats { + gap: 4px; + } + } + + /* =================================================================== + DNES DIALOG - COMPACT HEADER v2.1 + =================================================================== */ + + .today-header-compact { + background: rgb(0, 0, 0, 0.2); + border-radius: 8px; + padding: 16px; + margin-bottom: 20px; + } + + .compact-live-status h3 { + margin: 0 0 12px; + color: var(--text-primary); + font-size: 1.3em; + display: flex; + justify-content: space-between; + align-items: center; + } + + .live-time { + font-size: 0.8em; + color: var(--text-secondary); + } + + /* Progress bar - compact */ + .progress-bar-compact { + height: 6px; + background: rgb(255, 255, 255, 0.1); + border-radius: 3px; + overflow: hidden; + margin: 8px 0 4px; + } + + .progress-bar-compact .progress-fill { + height: 100%; + background: linear-gradient(90deg, #4CAF50, #8BC34A); + transition: width 0.5s ease; + border-radius: 3px; + } + + .progress-label-compact { + text-align: center; + font-size: 0.75em; + color: var(--text-secondary); + margin-bottom: 16px; + } + + /* Compact metrics rows */ + .compact-metrics { + display: flex; + flex-direction: column; + gap: 8px; + } + + .metric-row { + display: flex; + align-items: baseline; + flex-wrap: wrap; + gap: 6px; + font-size: 0.9em; + } + + .metric-row.dosud-section { + margin-top: 12px; + padding-top: 12px; + border-top: 1px solid rgb(255, 255, 255, 0.1); + } + + .metric-row.dosud-details { + margin-top: 2px; + margin-left: 20px; + font-size: 0.85em; + } + + .metric-label { + color: var(--text-secondary); + font-weight: 500; + } + + .metric-label-big { + color: var(--text-primary); + font-weight: 600; + font-size: 1.05em; + } + + .metric-value { + color: var(--text-primary); + font-weight: 600; + } + + .metric-value.positive { + color: #4CAF50; + } + + .metric-value.negative { + color: #F44336; + } + + .metric-value.neutral { + color: var(--text-secondary); + } + + .plan-in-parentheses { + font-weight: 400; + color: var(--text-secondary); + font-size: 0.9em; + } + + .metric-separator { + color: var(--border-primary); + margin: 0 4px; + } + + /* Responsive */ + @media (width <= 768px) { + .metric-row { + font-size: 0.85em; + } + + .metric-row.dosud-details { + margin-left: 10px; + } + } + +/* =============================================== + DNES DIALOG - INTERVAL LIST v2.1 + =============================================== */ + +.interval-section { + margin: 1.5rem 0; + background: rgb(255, 255, 255, 0.03); + border-radius: 8px; + overflow: hidden; +} + +.section-header { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1rem; + background: rgb(255, 255, 255, 0.05); + border-bottom: 1px solid rgb(255, 255, 255, 0.1); + font-weight: 600; + font-size: 0.85rem; + text-transform: uppercase; + letter-spacing: 0.05em; + cursor: pointer; + transition: background 0.2s ease; +} + +.interval-section.collapsible .section-header:hover { + background: rgb(255, 255, 255, 0.08); +} + +.section-icon { + font-size: 1.1rem; +} + +.section-title { + color: rgb(255, 255, 255, 0.8); +} + +.section-meta { + display: flex; + align-items: center; + gap: 1rem; + margin-left: auto; + font-size: 0.9rem; + font-weight: 500; +} + +.meta-item { + color: rgb(255, 255, 255, 0.9); +} + +.meta-item.positive { + color: #4CAF50; +} + +.meta-item.negative { + color: #F44336; +} + +.meta-item.neutral { + color: rgb(255, 255, 255, 0.7); +} + +.section-count { + color: rgb(255, 255, 255, 0.5); + font-size: 0.8rem; +} + +.section-toggle { + color: rgb(255, 255, 255, 0.4); + font-size: 0.9rem; + margin-left: 0.5rem; + transition: transform 0.2s ease; +} + +.interval-section.collapsed .section-toggle { + transform: rotate(-90deg); +} + +.interval-list { + padding: 0.5rem; +} + +/* Interval rows */ +.interval-row { + padding: 0.75rem 1rem; + margin: 0.25rem 0; + border-radius: 6px; + transition: background 0.2s ease; +} + +.interval-row.completed { + background: rgb(255, 255, 255, 0.02); + border-left: 3px solid rgb(76, 175, 80, 0.3); +} + +.interval-row.completed:hover { + background: rgb(255, 255, 255, 0.05); + cursor: pointer; +} + +.interval-row.future { + background: rgb(255, 255, 255, 0.01); + border-left: 3px solid rgb(255, 255, 255, 0.1); + opacity: 0.7; + display: flex; + align-items: center; + gap: 1rem; + padding: 0.5rem 1rem; +} + +.interval-row.future.muted { + opacity: 0.4; + font-style: italic; + justify-content: center; + border-left: none; +} + +/* Interval summary (one-line) */ +.interval-summary { + display: flex; + align-items: center; + gap: 1rem; + font-size: 0.95rem; +} + +.interval-time { + font-family: 'Roboto Mono', monospace; + color: rgb(255, 255, 255, 0.6); + min-width: 3rem; +} + +.interval-mode { + flex: 1; + color: rgb(255, 255, 255, 0.9); +} + +.interval-cost { + font-weight: 600; + min-width: 5rem; + text-align: right; +} + +.interval-delta { + min-width: 3rem; + text-align: right; + font-weight: 600; +} + +.interval-toggle { + color: rgb(255, 255, 255, 0.4); + font-size: 0.8rem; + transition: transform 0.2s ease; +} + +.interval-row.expanded .interval-toggle { + transform: rotate(180deg); +} + +.interval-progress { + color: rgb(255, 152, 0, 0.9); + font-weight: 600; + min-width: 4rem; + text-align: right; +} + +.interval-count { + color: rgb(255, 255, 255, 0.5); + font-size: 0.85rem; +} + +.interval-row.future .interval-count { + margin-left: auto; +} + +/* Interval detail (collapsible) */ +.interval-detail { + margin-top: 0.75rem; + padding: 0.75rem; + background: rgb(0, 0, 0, 0.2); + border-radius: 4px; + font-size: 0.9rem; +} + +.detail-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.75rem; +} + +.detail-label { + color: rgb(255, 255, 255, 0.6); + font-size: 0.85rem; +} + +.detail-value { + color: rgb(255, 255, 255, 0.95); + font-weight: 600; +} + +.detail-plan { + color: rgb(255, 255, 255, 0.5); + font-weight: normal; + font-size: 0.9rem; +} + +/* Active interval */ +.interval-section.active { + border: 1px solid rgb(255, 152, 0, 0.3); + background: rgb(255, 152, 0, 0.05); +} + +.interval-row.active-interval { + background: transparent; + border-left: 3px solid rgb(255, 152, 0, 0.6); +} + +.active-progress-bar { + margin: 0.5rem 0; + height: 8px; + background: rgb(0, 0, 0, 0.3); + border-radius: 4px; + overflow: hidden; +} + +.active-progress-bar .progress-fill { + height: 100%; + background: linear-gradient(90deg, #FF9800 0%, #FFB74D 100%); + border-radius: 4px; + transition: width 0.3s ease; +} + +.active-details { + margin-top: 0.5rem; + padding: 0.5rem; + background: rgb(0, 0, 0, 0.2); + border-radius: 4px; + font-size: 0.9rem; + color: rgb(255, 255, 255, 0.9); +} + +/* Color classes for deltas */ +.interval-cost.positive, +.interval-delta.positive { + color: #4CAF50; +} + +.interval-cost.negative, +.interval-delta.negative { + color: #F44336; +} + +.interval-cost.neutral, +.interval-delta.neutral { + color: rgb(255, 255, 255, 0.7); +} + +/* Mobile responsive */ +@media (width <= 768px) { + .interval-summary { + font-size: 0.85rem; + gap: 0.5rem; + } + + .interval-time { + min-width: 2.5rem; + } + + .interval-cost { + min-width: 4rem; + } + + .detail-grid { + grid-template-columns: 1fr; + } + + .section-meta { + flex-direction: column; + align-items: flex-end; + gap: 0.25rem; + font-size: 0.8rem; + } + + .section-header { + flex-wrap: wrap; + } +} + +/* =============================================== + DNES DIALOG - SIMPLE CARD HEADER v2.2 + =============================================== */ + +.today-header-simple { + padding: 1.5rem; + background: linear-gradient(135deg, rgb(33, 150, 243, 0.1) 0%, rgb(156, 39, 176, 0.1) 100%); + border-radius: 12px; + margin-bottom: 1.5rem; +} + +/* Progress Bar */ +.header-progress { + margin-bottom: 1.5rem; +} + +.progress-bar-large { + position: relative; + height: 32px; + background: rgb(0, 0, 0, 0.3); + border-radius: 16px; + overflow: hidden; +} + +.progress-bar-large .progress-fill { + height: 100%; + background: linear-gradient(90deg, #4CAF50 0%, #8BC34A 100%); + transition: width 0.5s ease; +} + +.progress-bar-large .progress-label { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + font-weight: 700; + font-size: 1.1rem; + color: #fff; + text-shadow: 0 1px 3px rgb(0,0,0,0.5); + z-index: 2; +} + +/* Cards Grid */ +.header-cards { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1rem; +} + +/* Card variants */ + +/* Mobile responsive */ +@media (width <= 1024px) { + .header-cards { + grid-template-columns: 1fr; + } + +} + +/* ============================================ + DNES DIALOG - CARD-BASED HEADER v2.2 DARK + ============================================ */ + +/* Large Progress Bar with Gradient */ + +/* Card Grid Layout */ + +@media (width <= 1024px) { + +} + +/* Individual Metric Cards */ + +/* Card Header */ + +/* Card Body */ + +.detail-separator { + color: rgb(255, 255, 255, 0.3); +} + +.detail-delta { + font-weight: 600; + padding: 0.125rem 0.5rem; + border-radius: 12px; +} + +.detail-delta.positive { + color: #66BB6A; + background: rgb(76, 175, 80, 0.15); +} + +.detail-delta.negative { + color: #EF5350; + background: rgb(244, 67, 54, 0.15); +} + +.detail-delta.neutral { + color: rgb(255, 255, 255, 0.6); + background: rgb(255, 255, 255, 0.08); +} + +.card-savings { + font-size: 0.875rem; + color: #66BB6A; + font-weight: 600; + margin-top: 0.25rem; +} + +/* Mini Progress Bar for Active Card */ +.card-progress-mini { + display: flex; + align-items: center; + gap: 0.75rem; + margin-top: 0.5rem; +} + +.mini-progress-bar { + flex: 1; + height: 8px; + background: rgb(255, 255, 255, 0.1); + border-radius: 4px; + overflow: hidden; +} + +.mini-progress-fill { + height: 100%; + background: linear-gradient(90deg, #FF9800 0%, #FFB74D 100%); + border-radius: 4px; + transition: width 0.3s ease; +} + +.mini-progress-label { + font-size: 0.75rem; + color: rgb(255, 255, 255, 0.6); + white-space: nowrap; + font-weight: 600; +} + +/* ======================================== + VČERA TAB - INTERVAL ANALYSIS + ======================================== */ + +.yesterday-interval-analysis { + margin: 2rem 0; + padding: 1.5rem; + background: rgb(30, 40, 50, 0.4); + border-radius: 12px; + border: 1px solid rgb(255, 255, 255, 0.05); +} + +.yesterday-interval-analysis h4 { + margin: 0 0 1.5rem; + font-size: 1.125rem; + color: rgb(255, 255, 255, 0.95); + font-weight: 600; +} + +.interval-groups { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.interval-group { + background: rgb(40, 50, 60, 0.5); + border: 1px solid rgb(255, 255, 255, 0.08); + border-radius: 8px; + padding: 1rem; + transition: all 0.2s ease; +} + +.interval-group:hover { + border-color: rgb(255, 255, 255, 0.15); + transform: translateY(-1px); + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.2); +} + +.interval-group-header { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.interval-group-mode { + display: flex; + align-items: center; + gap: 0.75rem; +} + +.mode-emoji { + font-size: 1.5rem; +} + +.mode-name { + font-size: 1rem; + font-weight: 600; + color: rgb(255, 255, 255, 0.95); +} + +.mode-count { + font-size: 0.875rem; + color: rgb(255, 255, 255, 0.6); + padding: 0.25rem 0.75rem; + background: rgb(255, 255, 255, 0.08); + border-radius: 12px; +} + +.interval-group-stats { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1rem; +} + +.stat-item { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.stat-label { + font-size: 0.75rem; + color: rgb(255, 255, 255, 0.5); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.stat-value { + font-size: 0.9375rem; + font-weight: 600; + color: rgb(255, 255, 255, 0.9); +} + +.stat-item.positive .stat-value { + color: #66BB6A; +} + +.stat-item.negative .stat-value { + color: #EF5350; +} + +.stat-item.neutral .stat-value { + color: rgb(255, 255, 255, 0.7); +} + +/* --- Value micro-animations to make changes feel alive --- */ +.stat-value, +.day-stat-value, +.card .value, +.tile-value, +.price-value { + transition: color 0.25s ease, transform 0.25s ease, text-shadow 0.35s ease; + will-change: transform, color; + font-variant-numeric: tabular-nums; +} + +.stat-item.positive .stat-value, +.stat-item.negative .stat-value, +.price-card .price-value { + animation: value-pop 0.7s ease; +} + +@keyframes value-pop { + 0% { + transform: scale(0.98); + text-shadow: 0 0 0 rgba(0, 0, 0, 0); + } + 45% { + transform: scale(1.04); + text-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); + } + 100% { + transform: scale(1); + text-shadow: 0 0 0 rgba(0, 0, 0, 0); + } +} + +/* Split-flap inspired roll when number changes */ +.rolling-change { + animation: value-roll 0.55s ease; + transform-origin: center; + display: inline-block; +} + +@keyframes value-roll { + 0% { + transform: translateY(-40%) rotateX(36deg); + opacity: 0.35; + } + 45% { + transform: translateY(12%) rotateX(-10deg); + opacity: 1; + } + 100% { + transform: translateY(0) rotateX(0deg); + opacity: 1; + } +} + +/* Responsive */ +@media (width <= 1024px) { + .interval-group-stats { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (width <= 600px) { + .interval-group-stats { + grid-template-columns: 1fr; + } +} + +/* === MODE BLOCKS STYLING === */ +.mode-blocks-container { + padding: 1rem; +} + +.mode-blocks-container h3 { + font-size: 1.1rem; + margin: 1.5rem 0 1rem; + color: var(--text-primary); + font-weight: 600; +} + +/* Collapsible Sections */ +.collapsible-section { + margin: 1rem; + border: 1px solid var(--border-primary); + border-radius: 8px; + background: var(--bg-secondary); + overflow: hidden; + transition: all 0.3s ease; +} + +.collapsible-section.current-section { + border-left: 4px solid #2196F3; +} + +.section-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem; + cursor: pointer; + user-select: none; + transition: background 0.2s ease; +} + +.section-header:hover { + background: var(--bg-hover); +} + +.section-header-simple { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 1rem; + font-weight: 600; + color: var(--text-primary); +} + +.section-title { + display: flex; + align-items: center; + gap: 0.75rem; + flex: 1; +} + +.section-icon { + font-size: 1.2rem; +} + +.section-name { + font-size: 1rem; + font-weight: 600; + color: var(--text-primary); +} + +.section-badge { + display: inline-block; + padding: 0.2rem 0.6rem; + background: rgb(255, 255, 255, 0.1); + border-radius: 12px; + font-size: 0.75rem; + color: var(--text-secondary); +} + +.section-summary { + display: flex; + align-items: center; + gap: 1rem; +} + +.summary-item { + font-size: 0.85rem; + color: var(--text-secondary); + white-space: nowrap; +} + +.expand-icon { + font-size: 0.8rem; + color: var(--text-tertiary); + transition: transform 0.3s ease; + margin-left: 0.5rem; +} + +.collapsible-section.expanded .expand-icon { + transform: rotate(180deg); +} + +.section-content { + max-height: 0; + overflow: hidden; + transition: max-height 0.3s ease, padding 0.3s ease; + padding: 0 1rem; +} + +.section-content.visible, +.collapsible-section.expanded .section-content { + max-height: 10000px; + padding: 0.5rem 1rem 1rem; +} + +/* Mode Blocks */ +.mode-block { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 8px; + padding: 1rem; + margin-bottom: 0.75rem; + transition: all 0.2s ease; +} + +.mode-block:hover { + background: var(--bg-hover); + border-color: var(--border-secondary); + transform: translateX(2px); +} + +.mode-block.mode-match { + border-left: 4px solid #4CAF50; +} + +.mode-block.mode-mismatch { + border-left: 4px solid #F44336; +} + +.mode-block.mode-current { + border-left: 4px solid #2196F3; + background: rgb(33, 150, 243, 0.1); +} + +.mode-block.mode-planned { + border-left: 4px solid rgb(255, 255, 255, 0.3); +} + +.mode-block-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.75rem; +} + +.mode-block-time { + font-size: 0.9rem; + font-weight: 600; + color: var(--text-secondary); +} + +.mode-block-status { + font-size: 1.2rem; +} + +.mode-block-modes { + margin-bottom: 0.75rem; +} + +.mode-actual, +.mode-plan { + font-size: 0.9rem; + color: var(--text-secondary); + margin-bottom: 0.25rem; +} + +.mode-actual strong, +.mode-plan strong { + color: var(--text-primary); + font-weight: 600; +} + +.mode-block-costs { + background: rgb(0, 0, 0, 0.2); + border-radius: 4px; + padding: 0.5rem; + margin-bottom: 0.5rem; +} + +.cost-row { + font-size: 0.85rem; + color: var(--text-secondary); + margin-bottom: 0.25rem; +} + +.cost-row:last-child { + margin-bottom: 0; +} + +.cost-row.cost-higher { + color: #EF5350; + font-weight: 600; +} + +.cost-row.cost-lower { + color: #66BB6A; + font-weight: 600; +} + +.cost-row.cost-equal { + color: rgb(255, 255, 255, 0.5); +} + +.mode-block-meta { + display: flex; + gap: 1rem; + font-size: 0.8rem; + color: var(--text-tertiary); +} + +.mode-block-meta span { + display: inline-flex; + align-items: center; + gap: 0.25rem; +} + +.no-plan-notice { + background: rgb(33, 150, 243, 0.1); + border: 1px solid rgb(33, 150, 243, 0.3); + border-radius: 8px; + padding: 1rem; + margin: 1rem; + text-align: center; +} + +.no-plan-notice p { + color: var(--text-secondary); + margin: 0; +} + +/* ============================================================================ + NEW MODE BLOCK CARDS - Improved UX Design + ============================================================================ */ + +.mode-block-card { + background: var(--bg-secondary); + border-radius: 12px; + margin-bottom: 1rem; + overflow: hidden; + box-shadow: 0 2px 8px rgb(0, 0, 0, 0.3); + transition: all 0.2s ease; +} + +.mode-block-card:hover { + box-shadow: 0 4px 12px rgb(0, 0, 0, 0.5); + transform: translateY(-2px); +} + +/* Card Types - Color coding by outcome */ +.mode-block-card.card-success { + border-left: 5px solid #4CAF50; /* Green: Plan matched + saved money */ +} + +.mode-block-card.card-danger { + border-left: 5px solid #F44336; /* Red: Plan not matched + cost more */ +} + +.mode-block-card.card-warning { + border-left: 5px solid #FF9800; /* Orange: Plan matched but cost more */ +} + +.mode-block-card.card-info { + border-left: 5px solid #2196F3; /* Blue: Plan not matched but saved money */ +} + +.mode-block-card.card-current { + border-left: 5px solid #00BCD4; /* Cyan: Currently running */ + background: rgb(0, 188, 212, 0.05); +} + +.mode-block-card.card-planned { + border-left: 5px solid rgb(255, 255, 255, 0.3); /* Gray: Future planned */ +} + +/* Status Bar */ +.card-status-bar { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 0.75rem 1rem; + background: rgb(0, 0, 0, 0.2); + font-size: 0.85rem; +} + +.status-icon { + font-size: 1.3rem; +} + +.status-text { + font-weight: 600; + color: var(--text-primary); +} + +.status-time { + margin-left: auto; + color: var(--text-secondary); +} + +/* Card Content */ + +/* Cost Delta - Large prominent display */ +.cost-delta-large { + text-align: center; + padding: 1rem; + margin-bottom: 1rem; + border-radius: 8px; +} + +.cost-delta-large .delta-label { + font-size: 0.75rem; + color: var(--text-secondary); + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 0.25rem; +} + +.cost-delta-large .delta-value { + font-size: 1.8rem; + font-weight: 700; +} + +.delta-positive { + background: rgb(76, 175, 80, 0.15); +} + +.delta-positive .delta-value { + color: #66BB6A; +} + +.delta-negative { + background: rgb(244, 67, 54, 0.15); +} + +.delta-negative .delta-value { + color: #EF5350; +} + +.delta-neutral { + background: rgb(158, 158, 158, 0.15); +} + +.delta-neutral .delta-value { + color: var(--text-secondary); +} + +/* Mode Comparison */ +.mode-comparison { + display: flex; + gap: 1rem; + margin-bottom: 1rem; +} + +.mode-item { + flex: 1; +} + +.mode-item .mode-label { + font-size: 0.75rem; + color: var(--text-secondary); + margin-bottom: 0.5rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.mode-item .mode-badge { + padding: 0.5rem 1rem; + border-radius: 6px; + font-weight: 600; + text-align: center; + font-size: 0.9rem; +} + +/* Cost Summary */ +.cost-summary { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 0.75rem; + background: rgb(0, 0, 0, 0.2); + border-radius: 6px; +} + +.cost-item { + display: flex; + justify-content: space-between; + align-items: center; +} + +.cost-label { + font-size: 0.85rem; + color: var(--text-secondary); +} + +.cost-value { + font-size: 0.95rem; + font-weight: 600; + color: var(--text-primary); +} + +/* Card Details (collapsible) */ + +.energy-stats { + padding: 0.75rem 1rem 1rem; + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.energy-stats .stat-row { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.85rem; +} + +.energy-stats .stat-row span:first-child { + color: var(--text-secondary); +} + +.energy-stats .stat-row span:last-child { + color: var(--text-primary); + font-weight: 600; +} + +/* ============================================================================ + MODE BLOCKS - Original design with complete data + ============================================================================ */ + +.mode-block { + background: var(--bg-secondary); + border: 1px solid var(--border-primary); + border-radius: 6px; + padding: 0.6rem; + margin-bottom: 0.5rem; + transition: all 0.2s ease; +} + +.mode-block:hover { + background: var(--bg-hover); + border-color: var(--border-secondary); + transform: translateX(2px); +} + +.mode-block.match-yes { + border-left: 3px solid #4CAF50; +} + +.mode-block.match-no { + border-left: 3px solid #F44336; +} + +.mode-block.mode-current { + border-left: 3px solid #2196F3; + background: rgb(33, 150, 243, 0.1); +} + +.mode-block.mode-planned { + border-left: 3px solid rgb(255, 255, 255, 0.3); +} + +/* Block Header */ +.block-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 0.5rem; + padding-bottom: 0.4rem; + border-bottom: 1px solid var(--border-primary); +} + +.block-time { + font-size: 0.85rem; + font-weight: 600; + color: var(--text-primary); +} + +.block-duration { + font-size: 0.75rem; + color: var(--text-tertiary); + font-weight: normal; + margin-left: 0.4rem; +} + +.block-match { + font-size: 0.75rem; + font-weight: 600; + padding: 0.15rem 0.5rem; + border-radius: 10px; +} + +.block-match.match-yes { + background: rgb(76, 175, 80, 0.2); + color: #66BB6A; +} + +.block-match.match-no { + background: rgb(244, 67, 54, 0.2); + color: #EF5350; +} + +/* Note: Detail tabs styles moved to css/features/detail-tabs.css */ + +/* Old .block-modes, .block-cost, .block-details styles removed to avoid conflicts */ + +.no-mode-blocks { + padding: 2rem; + text-align: center; +} + +.no-mode-blocks p { + color: var(--text-secondary); + font-size: 0.9rem; +} + +.chart-control-bar { + background: rgb(255, 255, 255, 0.05); + border-radius: 8px; + padding: 10px 15px; + margin-bottom: 15px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; +} + +.chart-control-tip { + opacity: 0.75; + font-size: 0.85em; +} + +.chart-control-actions { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.chart-control-btn { + background: rgb(255, 255, 255, 0.05); + border: 1px solid rgb(255, 255, 255, 0.2); + color: white; + padding: 4px 12px; + border-radius: 6px; + cursor: pointer; + font-size: 0.8em; + transition: background 0.2s ease, border-color 0.2s ease; +} + +.chart-control-btn:hover { + background: rgb(255, 255, 255, 0.1); + border-color: rgb(255, 255, 255, 0.4); +} + +.chart-plan-toggle-group { + display: flex; + align-items: center; + gap: 6px; + background: rgb(255, 255, 255, 0.03); + border-radius: 999px; + padding: 4px 6px; + border: 1px solid rgb(255, 255, 255, 0.08); +} + +.chart-plan-label { + font-size: 0.75em; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); +} + +.chart-plan-toggle-btn { + border: none; + background: transparent; + color: var(--text-secondary); + padding: 4px 10px; + border-radius: 999px; + font-size: 0.75em; + text-transform: uppercase; + letter-spacing: 0.05em; + cursor: pointer; + transition: background 0.2s ease, color 0.2s ease; +} + +.chart-plan-toggle-btn.active { + background: rgb(33, 150, 243, 0.3); + color: #fff; +} + + +.chart-plan-pill { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.75em; + padding: 2px 10px; + border-radius: 999px; + background: rgb(33, 150, 243, 0.25); + color: #BBDEFB; + margin-left: 8px; +} + + +.cost-card { + background: linear-gradient(160deg, rgb(33, 150, 243, 0.18) 0%, rgb(13, 71, 161, 0.08) 100%); + border: 1px solid rgb(33, 150, 243, 0.35); + border-radius: 18px; + display: flex; + flex-direction: column; + padding: 18px; + gap: 16px; + min-height: 0; + aspect-ratio: auto; +} + +.cost-card-square { + aspect-ratio: auto; + overflow: hidden; +} + +.cost-card-compact { + gap: 6px; + padding: 14px; + justify-content: space-between; +} + +.cost-card-placeholder { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + color: var(--text-secondary); + padding: 16px; +} + +.cost-card-title { + font-size: 1.1em; +} + +.cost-card-loading { + font-size: 0.85em; + opacity: 0.8; +} + +.cost-hero-lite { + background: rgb(0, 0, 0, 0.2); + border-radius: 14px; + padding: 10px 12px; + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; + min-height: 0; +} + +.cost-hero-main { + display: flex; + flex-direction: column; + gap: 6px; + flex: 1; +} + +.cost-hero-label { + font-size: 0.7em; + text-transform: uppercase; + color: var(--text-secondary); + letter-spacing: 0.05em; +} + +.cost-hero-main-value { + font-size: 1.25em; + font-weight: 600; +} + +.cost-hero-breakdown { + display: flex; + gap: 10px; + flex-wrap: wrap; + font-size: 0.68em; + color: var(--text-secondary); +} + +.cost-hero-breakdown span { + white-space: nowrap; +} + +.cost-hero-alt { + min-width: 0; + text-align: right; + display: flex; + flex-direction: column; + gap: 2px; +} + +.cost-hero-alt-label { + font-size: 0.65em; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); +} + +.cost-hero-alt-value { + font-size: 0.9em; + font-weight: 600; +} + +.cost-hero-alt-note { + font-size: 0.65em; + color: var(--text-secondary); + white-space: nowrap; +} + +.cost-history-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 8px; +} + +.cost-history-card { + background: rgb(0, 0, 0, 0.2); + border-radius: 10px; + padding: 8px 10px; + display: flex; + flex-direction: column; + gap: 2px; + min-height: 0; +} + +.cost-history-label { + font-size: 0.7em; + text-transform: uppercase; + color: var(--text-secondary); + letter-spacing: 0.05em; +} + +.cost-history-value { + font-size: 0.95em; + font-weight: 600; +} + +.cost-history-note { + font-size: 0.68em; + color: var(--text-secondary); +} + +.cost-history-note.subtle { + opacity: 0.7; +} + +.cost-hero { + display: flex; + justify-content: space-between; + align-items: center; + background: rgb(0, 0, 0, 0.2); + border-radius: 14px; + padding: 16px; + gap: 18px; + flex-wrap: wrap; +} + +.cost-hero-label { + font-size: 0.75em; + text-transform: uppercase; + color: var(--text-secondary); + letter-spacing: 0.04em; +} + +.cost-hero-value { + font-size: 2em; + font-weight: 700; + color: var(--text-primary); +} + +.cost-hero-sub { + font-size: 0.8em; + color: var(--text-secondary); +} + +.cost-hero-total { + text-align: right; + font-weight: 600; + min-width: 130px; +} + +.cost-hero-total small { + display: block; + color: var(--text-secondary); + font-weight: 400; +} + +.plan-table { + display: flex; + flex-direction: column; + gap: 10px; +} + +.plan-row { + border: 1px solid rgb(255, 255, 255, 0.15); + border-radius: 12px; + padding: 10px 12px; + display: flex; + flex-direction: column; + gap: 6px; + transition: border 0.2s ease; + background: rgb(0, 0, 0, 0.15); +} + +.plan-row.primary { + border-color: rgb(255, 255, 255, 0.4); + background: rgb(255, 255, 255, 0.06); +} + +.plan-row-header { + display: flex; + justify-content: space-between; + align-items: center; +} + +.plan-row-label { + font-size: 0.75em; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); +} + +.plan-row-tag { + font-size: 0.65em; + text-transform: uppercase; + color: var(--text-secondary); + border: 1px solid rgb(255, 255, 255, 0.2); + border-radius: 999px; + padding: 2px 6px; +} + +.plan-row-tag.alt { + border-color: rgb(255, 255, 255, 0.1); + color: rgb(255, 255, 255, 0.5); +} + +.plan-row-value { + font-size: 1.3em; + font-weight: 600; + color: var(--text-primary); +} + +.plan-row-bar { + height: 6px; + background: rgb(255, 255, 255, 0.1); + border-radius: 999px; + overflow: hidden; +} + +.plan-row-bar-fill { + height: 100%; + background: #4CAF50; +} + +.plan-row-breakdown { + display: flex; + gap: 4px; + font-size: 0.78em; + color: var(--text-secondary); +} + +.plan-row-breakdown .plus { + opacity: 0.5; +} + +.cost-delta-container { + display: flex; + justify-content: center; + margin-top: 8px; +} + +.cost-delta-badge { + display: inline-flex; + align-items: center; + gap: 8px; + border-radius: 999px; + padding: 6px 18px; + font-weight: 600; + border: 1px solid rgb(255, 255, 255, 0.18); +} + +.cost-delta-badge.neutral { + color: var(--text-secondary); +} + +.cost-delta-badge.positive { + color: #4CAF50; + border-color: rgb(76, 175, 80, 0.4); +} + +.cost-delta-badge.negative { + color: #F44336; + border-color: rgb(244, 67, 54, 0.4); +} + +.cost-delta-text { + font-size: 1.2em; +} + +.cost-delta-label { + font-size: 0.6em; + color: var(--text-secondary); +} + +.cost-delta-pill.positive { + background: rgb(76, 175, 80, 0.2); + border: 1px solid rgb(76, 175, 80, 0.4); +} + +.cost-delta-pill.negative { + background: rgb(255, 112, 67, 0.2); + border: 1px solid rgb(255, 112, 67, 0.4); +} + +.cost-delta-pill.neutral { + border: 1px dashed rgb(255, 255, 255, 0.25); +} + +.cost-meta-row { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: stretch; +} + +.cost-meta-mini { + display: flex; + flex-direction: column; + gap: 8px; +} + +.cost-meta-cluster { + display: flex; + flex-direction: column; + gap: 10px; +} + +.cost-meta-cluster > *:not(:last-child) { + margin-bottom: 8px; +} + +.cost-meta-cluster .cost-meta-block, +.cost-meta-cluster .cost-delta-badge { + width: 100%; +} + +@media (width >= 680px) { + .cost-meta-cluster { + flex-flow: row wrap; + } + + .cost-meta-cluster .cost-delta-badge, + .cost-meta-cluster .cost-meta-block { + flex: 1; + min-width: 180px; + } +} + +.cost-meta-block { + background: rgb(255, 255, 255, 0.05); + border-radius: 10px; + padding: 8px 10px; + display: flex; + flex-direction: column; + gap: 4px; + min-width: 150px; + flex: 1; +} + +.cost-meta-title { + font-size: 0.65em; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-secondary); +} + +.cost-meta-emphasis { + font-size: 0.9em; + font-weight: 600; +} + +.cost-meta-line { + font-size: 0.75em; + color: var(--text-secondary); +} + +.cost-plan-chips { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 6px; +} + +.cost-plan-chip { + display: flex; + flex-direction: column; + background: rgb(255, 255, 255, 0.04); + border-radius: 8px; + padding: 6px 10px; + font-size: 0.75em; + min-width: 0; +} + +.cost-plan-chip-label { + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-tertiary); + font-size: 0.65em; +} + +.cost-plan-chip-value { + font-size: 0.85em; + color: var(--text-secondary); +} + +.cost-plan-chip.positive { + border: 1px solid rgb(76, 175, 80, 0.5); + background: rgb(76, 175, 80, 0.15); + color: #C8E6C9; +} + +.cost-plan-chip.positive .cost-plan-chip-value { + color: #C8E6C9; +} + +.cost-plan-chip.negative { + border: 1px solid rgb(255, 112, 67, 0.5); + background: rgb(255, 112, 67, 0.15); + color: #FFCCBC; +} + +.cost-plan-chip.negative .cost-plan-chip-value { + color: #FFCCBC; +} + +.cost-plan-chip.neutral { + border: 1px solid rgb(255, 255, 255, 0.08); +} + +@media (width <= 1200px) { + .cost-main-row { + grid-template-columns: minmax(0, 1fr) minmax(70px, auto) minmax(0, 1fr); + } + + .cost-plan-chips { + grid-template-columns: 1fr; + } +} + +/* === SPLIT-FLAP OVERFLOW SAFEGUARDS === */ +.node-label, +.node-value, +.node-subvalue { + align-self: stretch; + text-align: center; + box-sizing: border-box; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +#solar-today, +#house-today, +#battery-soc { + display: flex; + justify-content: center; + align-items: center; + text-align: center; + width: 100%; +} + +#solar-today .oig-flipboard, +#house-today .oig-flipboard, +#battery-soc .oig-flipboard { + display: inline-flex; + justify-content: center; + margin: 0 auto; +} + +#battery-power { + font-size: 13px; + font-weight: 700; + opacity: 0.75; +} + +.node-phases, +.node-details { + align-self: stretch; + width: 100%; + min-width: 0; + box-sizing: border-box; +} + +.phase-row-group, +.detail-row { + width: 100%; + min-width: 0; + box-sizing: border-box; +} + +.node-tariff, +.node-frequency { + max-width: calc(50% - 14px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.inverter-temp-indicator { + max-width: calc(50% - 14px); + overflow: hidden; +} + +.inverter-temp-indicator > * { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.node-status { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.node-phases { + max-width: 100%; + overflow: hidden; + box-sizing: border-box; +} + +.phase-value { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.detail-row { + min-width: 0; +} + +.detail-label, +.detail-value { + min-width: 0; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/custom_components/oig_cloud/www/dashboard.html b/custom_components/oig_cloud/www/dashboard.html new file mode 100644 index 00000000..cfd2fd36 --- /dev/null +++ b/custom_components/oig_cloud/www/dashboard.html @@ -0,0 +1,1092 @@ + + + + + + + OIG Cloud Dashboard + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+

⚡ Energetické Toky

+ + +
+ + Bez výstrah +
+ +
--:--:--
+
Aktualizováno: --
+
+ + +
+
+
+

🌦️ Meteorologická Výstraha ČHMÚ

+ +
+
+ +
+
+
+ + +
+
⚡ Toky
+
💰 Predikce a statistiky
+ +
+ + +
+
+ + +
+ + +
+
+

⚙️ Ovládání + ❓ + + Ovládací panel + Zde můžete měnit režimy systému v reálném čase. Všechny změny jsou chráněny + ServiceShield systémem pro bezpečné API volání. +
    +
  • Režim střídače: Home 1-4 režimy
  • +
  • Dodávka do sítě: On/Off/Limited
  • +
  • Bojler: Inteligentní/Manuální
  • +
+ Změny jsou vidět ve frontě požadavků níže. +
+
+

+ +
+ +
+ +
+

Režim střídače

+
+ + + + +
+
+ + +
+

Dodávka do sítě

+
+ + + +
+
+
+

Nabíjení baterie ze sítě

+
+ +
+
+ + +
+

Režim bojleru

+
+ + +
+
+ + +
+

📊 Vlastní dlaždice

+
+ + +
+ + +
+
+
+ + +
+
+
+ Načítání... +
+
+
+
+
+ +
+ + + + + + +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+
+
+ + +
+
+ 🔮 + -- kWh +
+
+ 🌅 + -- kWh +
+
☀️
+
Solár
+
-- W
+
Dnes: + -- kWh
+
+
+
+
🏭 String 1
+
+ + --V +
+
+ 〰️ + --A +
+
+ + -- W +
+
+
+
🏭 String 2
+
+ + --V +
+
+ 〰️ + --A +
+
+ + -- W +
+
+
+
+
+ + +
+
+ 〰️ + -- A +
+ + +
+ + -- V +
+
+ 🌡️ + -- °C +
+ +
+ ⚡🔌 +
+
+ + + + + + + + + + + + + + + + + + + + +
+
Baterie
+
-- % +
+
-- W
+
--
+
+
+
+ +
+
⚡ Energie
+
+ Nabíjení: + -- + kWh +
+
+ └ z FVE: + -- + kWh +
+
+ └ ze sítě: + -- + kWh +
+
+ Vybíjení: + -- + kWh +
+
+ + +
+
🔌 Plánované
+ +
+
+
+
+
+ + +
+
+ 🌉 +
+ +
+ 🌡️ + -- °C +
+ + + + + +
🔄
+
Střídač
+
--
+
Režim plánovače: --
+
+
+
+ 🌊 Přetoky do sítě + + +
+
+
+ 💧 + -- +
+
+ LIMIT: + -- + kW +
+
+
+
+
🔔 Notifikace
+
+ 📨 + -- + + -- +
+
+
+
+ + +
+
🔌
+
Síť
+
--
+
-- Hz
+
-- W
+
+
+ --W + | + --W + | + --W +
+
+ --V + | + --V + | + --V +
+
+
--
+
+
+
⚡ Energie
+
+ ⬇️ + -- kWh + ⬆️ + -- kWh +
+
+
+
💰 Ceny
+
+ ⬇️ + -- Kč/kWh + ⬆️ + -- + Kč/kWh +
+
+ +
+
+ + +
+ + +
🏠
+
Spotřeba
+
-- W
+
+ Dnes: -- kWh
+
+ --W + | + --W + | + --W +
+
+ +
+
+ + +
+
+
+ + + + + + +
+ + + + +
+ +
+
🟢 Nejlevnější nákup
+
--
+
+ --
+ +
+ + +
+
📈 Nejlepší prodej
+
--
+
+ --
+ +
+ + +
+
+ 💰 Nákladový přehled + Načítání… +
+
+ + +
+
+ 📆 Dnes - Plnění plánu +
+
+ ⏳ Načítání... +
+
+
+ + + + + +
+ + 💡 Ovládání grafu: Myší označte oblast pro zoom • Kolečka zoom in/out • Shift+tažení = posun + +
+ + +
+
+ +
+
+ 📊 Ceny elektřiny & Předpovědi + Standardní +
+
+
+ + +
+
+
⚡ Efektivita nabíjení
+
--
+
--
+
+ --
+
+
+ ⚡ Nabito: + -- +
+
+ 🔌 Vybito: + -- +
+
+ 📉 Ztráty: + -- +
+
+ +
+
+
+
+
+
+ -- + | + -- +
+
+
+ + +
+
📊 Plánovaná spotřeba
+ +
+ -- +
+
--
+
+ --
+
+ +
+ Dnes spotřeba: + -- + + └ plán: + -- + + Zítra: + -- +
+
+ +
+
+
+
+
+
+ -- + | + -- +
+
+
+ + +
+
🔋 Vyrovnání baterie
+
--
+ + +
+ -- + dní +
+ +
+
+ 📅 Poslední: + -- +
+
+ ⏰ Plánováno: + -- +
+
+ 💰 Náklady: + -- +
+
+ + +
+
+ +
+
+ -- +
+
+
+ +
+ + + + + +
+ +
+ + + + + + + + + + + diff --git a/custom_components/oig_cloud/www/js/components/dialog.js b/custom_components/oig_cloud/www/js/components/dialog.js new file mode 100644 index 00000000..6ccda60b --- /dev/null +++ b/custom_components/oig_cloud/www/js/components/dialog.js @@ -0,0 +1,1263 @@ +/* eslint-disable */ +/** + * Dashboard Tile Config Dialog + * Dialog pro konfiguraci dlaždic - výběr entity nebo tlačítka + */ + +/** + * Helper: Render ikonu pro picker a preview (emoji protože ha-icon nefunguje v iframe) + */ +function renderIconHTML(icon, color = 'var(--text-primary)') { + if (!icon) return ''; + + // MDI ikona (formát mdi:xxx) - převést na emoji + if (icon.startsWith('mdi:')) { + const iconName = icon.substring(4); // Odstranit 'mdi:' prefix + + // Emoji mapa - kompletní ze všech kategorií + const emojiMap = { + // Spotřebiče + 'fridge': '❄️', 'fridge-outline': '❄️', 'dishwasher': '🍽️', 'washing-machine': '🧺', + 'tumble-dryer': '🌪️', 'stove': '🔥', 'microwave': '📦', 'coffee-maker': '☕', + 'kettle': '🫖', 'toaster': '🍞', + // Osvětlení + 'lightbulb': '💡', 'lightbulb-outline': '💡', 'lamp': '🪔', 'ceiling-light': '💡', + 'floor-lamp': '🪔', 'led-strip': '✨', 'led-strip-variant': '✨', 'wall-sconce': '💡', + 'chandelier': '💡', + // Vytápění + 'thermometer': '🌡️', 'thermostat': '🌡️', 'radiator': '♨️', 'radiator-disabled': '❄️', + 'heat-pump': '♨️', 'air-conditioner': '❄️', 'fan': '🌀', 'hvac': '♨️', 'fire': '🔥', + 'snowflake': '❄️', + // Energie + 'lightning-bolt': '⚡', 'flash': '⚡', 'battery': '🔋', 'battery-charging': '🔋', + 'battery-50': '🔋', 'solar-panel': '☀️', 'solar-power': '☀️', 'meter-electric': '⚡', + 'power-plug': '🔌', 'power-socket': '🔌', + // Auto + 'car': '🚗', 'car-electric': '🚘', 'car-battery': '🔋', 'ev-station': '🔌', + 'ev-plug-type2': '🔌', 'garage': '🏠', 'garage-open': '🏠', + // Zabezpečení + 'door': '🚪', 'door-open': '🚪', 'lock': '🔒', 'lock-open': '🔓', 'shield-home': '🛡️', + 'cctv': '📹', 'camera': '📹', 'motion-sensor': '👁️', 'alarm-light': '🚨', 'bell': '🔔', + // Okna + 'window-closed': '🪟', 'window-open': '🪟', 'blinds': '🪟', 'blinds-open': '🪟', + 'curtains': '🪟', 'roller-shade': '🪟', + // Média + 'television': '📺', 'speaker': '🔊', 'speaker-wireless': '🔊', 'music': '🎵', + 'volume-high': '🔊', 'cast': '📡', 'chromecast': '📡', + // Síť + 'router-wireless': '📡', 'wifi': '📶', 'access-point': '📡', 'lan': '🌐', + 'network': '🌐', 'home-assistant': '🏠', + // Voda + 'water': '💧', 'water-percent': '💧', 'water-boiler': '♨️', 'water-pump': '💧', + 'shower': '🚿', 'toilet': '🚽', 'faucet': '🚰', 'pipe': '🔧', + // Počasí + 'weather-sunny': '☀️', 'weather-cloudy': '☁️', 'weather-night': '🌙', + 'weather-rainy': '🌧️', 'weather-snowy': '❄️', 'weather-windy': '💨', + // Ostatní + 'information': 'ℹ️', 'help-circle': '❓', 'alert-circle': '⚠️', + 'checkbox-marked-circle': '✅', 'toggle-switch': '🔘', 'power': '⚡', 'sync': '🔄' + }; + + const emoji = emojiMap[iconName] || '⚙️'; + return `${emoji}`; + } + + // Emoji nebo jiný text + return icon; +} + +class TileConfigDialog { + constructor(hass, tileManager) { + this.hass = hass; + this.tileManager = tileManager; + this.index = null; + this.side = null; + this.currentTab = 'entity'; + + this.createDialog(); + this.setupEventListeners(); + } + + /** + * Vytvoř dialog element + */ + createDialog() { + // Odstranit existující dialog (pokud existuje) + const existing = document.getElementById('tile-config-dialog'); + if (existing) { + existing.remove(); + } + + const dialog = document.createElement('div'); + dialog.id = 'tile-config-dialog'; + dialog.className = 'tile-dialog-overlay'; + dialog.style.display = 'none'; + + dialog.innerHTML = ` +
+
+

Konfigurace dlaždice

+ +
+ +
+ + +
+ +
+ +
+
+ + +
+ +
+ +
+ + +
+ +
+
+ +
+
+ 🔍 +
+ + +
+ +
+ +
+ + +
+
+ +
+ +
+ + + + +
+ +
+ + + + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+ +
+ + +
+ +
+
+ +
+
+ 🔍 +
+ + +
+
+ +
+ + +
+
+ +
+ +
+ + + + +
+ +
+ + + + +
+
+
+ + +
+ + + + `; + + document.body.appendChild(dialog); + this.dialog = dialog; + this.iconPickerModal = document.getElementById('icon-picker-modal'); + this.iconPickerBody = document.getElementById('icon-picker-body'); + this.currentIconTarget = null; // 'entity' nebo 'button' + } + + /** + * Setup event listeners + */ + setupEventListeners() { + // Click mimo dialog = zavřít + this.dialog.addEventListener('click', (e) => { + if (e.target === this.dialog) { + this.close(); + } + }); + + // ESC key = zavřít + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape' && this.dialog.style.display === 'flex') { + this.close(); + } + }); + } + + /** + * Otevřít dialog + */ + open(index, side) { + this.index = index; + this.side = side; + + console.log(`📝 Opening tile config dialog for [${side}][${index}]`); + + // Načíst existující konfiguraci (pokud existuje) + const existingTile = this.tileManager.getTile(side, index); + + // Flag pro rozlišení editace vs nová dlaždice + this.isEditing = !!existingTile; + + // Zobrazit dialog co nejdřív (Safari má pomalejší DOM render při velkém seznamu entit) + this.dialog.style.display = 'flex'; + + // Rychlé placeholdery aby bylo jasné, že se načítá + try { + const lists = [ + 'entity-list', + 'button-entity-list', + 'support-entity-1-list', + 'support-entity-2-list', + 'support-button-entity-1-list', + 'support-button-entity-2-list' + ]; + lists.forEach((id) => { + const el = document.getElementById(id); + if (el) el.innerHTML = '
Načítání…
'; + }); + } catch (e) { + // ignore + } + + // Naplnit seznamy entit až po prvním paintu (aby otevření dialogu nebylo blokované) + requestAnimationFrame(() => { + requestAnimationFrame(() => { + this.populateEntityLists(); + + // Pre-fill form pokud editujeme existující dlaždici + if (existingTile) { + this.loadTileConfig(existingTile); + } + }); + }); + + // Focus na search input + setTimeout(() => { + const searchInput = document.getElementById('entity-search'); + if (searchInput) searchInput.focus(); + }, 100); + } + + /** + * Zavřít dialog + */ + close() { + this.dialog.style.display = 'none'; + this.isEditing = false; // Reset editačního flagu + this.resetForm(); + } + + /** + * Přepnout tab + */ + switchTab(tabName) { + this.currentTab = tabName; + + // Update tab buttons + document.querySelectorAll('.tile-tab').forEach(tab => { + if (tab.dataset.tab === tabName) { + tab.classList.add('active'); + } else { + tab.classList.remove('active'); + } + }); + + // Update tab content + document.querySelectorAll('.tile-tab-content').forEach(content => { + if (content.id === `tab-${tabName}`) { + content.classList.add('active'); + } else { + content.classList.remove('active'); + } + }); + } + + /** + * Naplnit seznamy entit + */ + populateEntityLists() { + this.populateEntityList(); + this.populateButtonEntityList(); + this.populateSupportEntityLists(); // Naplnit listy pro podpůrné entity + } + + /** + * Naplnit seznam entit (sensor, binary_sensor) + */ + populateEntityList() { + const entityList = document.getElementById('entity-list'); + if (!entityList) return; + + const entities = Object.keys(this.hass.states) + .filter(id => id.startsWith('sensor.') || id.startsWith('binary_sensor.')) + .sort((a, b) => { + const nameA = this.hass.states[a].attributes.friendly_name || a; + const nameB = this.hass.states[b].attributes.friendly_name || b; + return nameA.localeCompare(nameB); + }); + + entityList.innerHTML = entities.map(entityId => { + const state = this.hass.states[entityId]; + const name = state.attributes.friendly_name || entityId; + const value = state.state; + const unit = state.attributes.unit_of_measurement || ''; + const icon = state.attributes.icon || ''; + + return ` +
+ + +
+ `; + }).join(''); + } + + /** + * Naplnit seznam entit pro tlačítka (switch, light, fan, input_boolean) + */ + populateButtonEntityList() { + const buttonEntityList = document.getElementById('button-entity-list'); + if (!buttonEntityList) return; + + const switchables = Object.keys(this.hass.states) + .filter(id => + id.startsWith('switch.') || + id.startsWith('light.') || + id.startsWith('fan.') || + id.startsWith('input_boolean.') + ) + .sort((a, b) => { + const nameA = this.hass.states[a].attributes.friendly_name || a; + const nameB = this.hass.states[b].attributes.friendly_name || b; + return nameA.localeCompare(nameB); + }); + + buttonEntityList.innerHTML = switchables.map(entityId => { + const state = this.hass.states[entityId]; + const name = state.attributes.friendly_name || entityId; + const value = state.state; + const icon = state.attributes.icon || ''; + + return ` +
+ + +
+ `; + }).join(''); + } + + /** + * Naplnit selecty pro podpůrné entity + */ + /** + * Naplnit listy pro podpůrné entity + */ + populateSupportEntityLists() { + // OPRAVA: Podporovat VŠECHNY entity, nejen senzory + // Listy se naplní dynamicky při psaní, zde jen inicializace + this.supportEntities = Object.keys(this.hass.states) + .sort((a, b) => { + const nameA = this.hass.states[a].attributes.friendly_name || a; + const nameB = this.hass.states[b].attributes.friendly_name || b; + return nameA.localeCompare(nameB); + }); + } + + /** + * Filtrovat podporné entity podle hledaného textu + */ + filterSupportEntities(number, searchText) { + const listDiv = document.getElementById(`support-entity-${number}-list`); + const hiddenInput = document.getElementById(`support-entity-${number}`); + + if (!searchText.trim()) { + listDiv.style.display = 'none'; + hiddenInput.value = ''; + return; + } + + const search = searchText.toLowerCase(); + const filtered = this.supportEntities.filter(entityId => { + const state = this.hass.states[entityId]; + const name = (state.attributes.friendly_name || entityId).toLowerCase(); + return name.includes(search) || entityId.toLowerCase().includes(search); + }); + + if (filtered.length === 0) { + listDiv.innerHTML = '
Žádné entity nenalezeny
'; + listDiv.style.display = 'block'; + return; + } + + listDiv.innerHTML = filtered.slice(0, 20).map(entityId => { + const state = this.hass.states[entityId]; + const name = state.attributes.friendly_name || entityId; + const value = state.state; + const unit = state.attributes.unit_of_measurement || ''; + + return ` +
+
${name}
+
${value} ${unit}
+
+ `; + }).join(''); + + listDiv.style.display = 'block'; + } + + /** + * Vybrat podpornou entitu + */ + selectSupportEntity(number, entityId, entityName) { + const searchInput = document.getElementById(`support-entity-${number}-search`); + const hiddenInput = document.getElementById(`support-entity-${number}`); + const listDiv = document.getElementById(`support-entity-${number}-list`); + + searchInput.value = entityName; + hiddenInput.value = entityId; + listDiv.style.display = 'none'; + + console.log(`✅ Selected support entity ${number}: ${entityId}`); + } + + /** + * Filtrovat support entities pro button (stejné jako filterSupportEntities) + */ + filterButtonSupportEntities(number, searchText) { + const listDiv = document.getElementById(`button-support-entity-${number}-list`); + const hiddenInput = document.getElementById(`button-support-entity-${number}`); + + if (!searchText.trim()) { + listDiv.style.display = 'none'; + hiddenInput.value = ''; + return; + } + + const search = searchText.toLowerCase(); + const filtered = this.supportEntities.filter(entityId => { + const state = this.hass.states[entityId]; + const name = (state.attributes.friendly_name || entityId).toLowerCase(); + return name.includes(search) || entityId.toLowerCase().includes(search); + }); + + if (filtered.length === 0) { + listDiv.innerHTML = '
Žádné entity nenalezeny
'; + listDiv.style.display = 'block'; + return; + } + + listDiv.innerHTML = filtered.slice(0, 20).map(entityId => { + const state = this.hass.states[entityId]; + const name = state.attributes.friendly_name || entityId; + const value = state.state; + const unit = state.attributes.unit_of_measurement || ''; + + return ` +
+
${name}
+
${value} ${unit}
+
+ `; + }).join(''); + + listDiv.style.display = 'block'; + } + + /** + * Vybrat button support entitu + */ + selectButtonSupportEntity(number, entityId, entityName) { + const searchInput = document.getElementById(`button-support-entity-${number}-search`); + const hiddenInput = document.getElementById(`button-support-entity-${number}`); + const listDiv = document.getElementById(`button-support-entity-${number}-list`); + + searchInput.value = entityName; + hiddenInput.value = entityId; + listDiv.style.display = 'none'; + + console.log(`✅ Selected button support entity ${number}: ${entityId}`); + } + + /** + * Vyhledávání ikon +``` + */ + searchIcons(searchText) { + const suggestionsDiv = document.getElementById('icon-suggestions'); + + if (!searchText.trim() || searchText.startsWith('mdi:')) { + suggestionsDiv.style.display = 'none'; + return; + } + + // Základní populární ikony + const commonIcons = [ + // Spotřebiče & Domácnost + 'fridge', 'fridge-outline', 'dishwasher', 'washing-machine', 'tumble-dryer', + 'stove', 'microwave', 'coffee-maker', 'kettle', 'toaster', + + // Světla & Osvětlení + 'lightbulb', 'lightbulb-outline', 'lamp', 'ceiling-light', 'floor-lamp', + 'led-strip', 'led-strip-variant', 'wall-sconce', 'chandelier', + + // Vytápění & Chlazení + 'thermometer', 'thermostat', 'radiator', 'radiator-disabled', 'heat-pump', + 'air-conditioner', 'fan', 'hvac', 'fire', 'snowflake', 'snowflake-melt', + + // Energie & Baterie + 'lightning-bolt', 'flash', 'battery', 'battery-charging', 'battery-50', + 'solar-panel', 'solar-power', 'meter-electric', 'meter-electric-outline', + 'power-plug', 'power-socket', 'transmission-tower', + + // Auto & Doprava + 'car', 'car-electric', 'car-battery', 'ev-station', 'ev-plug-type2', + 'garage', 'garage-open', 'garage-alert', + + // Zabezpečení & Vstup + 'door', 'door-open', 'door-closed', 'lock', 'lock-open', 'shield-home', + 'cctv', 'camera', 'motion-sensor', 'alarm-light', 'bell', 'alert', + + // Okna & Stínění + 'window-closed', 'window-open', 'blinds', 'blinds-open', 'curtains', + 'roller-shade', 'roller-shade-closed', + + // Mediální zařízení + 'television', 'speaker', 'speaker-wireless', 'music', 'volume-high', + 'cast', 'cast-connected', 'chromecast', + + // Síť & IoT + 'router-wireless', 'wifi', 'access-point', 'lan', 'network', + 'home-assistant', 'home-automation', + + // Voda & Sanitace + 'water', 'water-percent', 'water-boiler', 'water-pump', 'shower', + 'toilet', 'faucet', 'pipe', 'waves', + + // Počasí & Klima + 'weather-sunny', 'weather-cloudy', 'weather-night', 'weather-rainy', + 'weather-snowy', 'weather-windy', 'home-thermometer', + + // Plyn & Ostatní utility + 'meter-gas', 'gas-cylinder', 'gauge', 'chart-line', 'chart-areaspline', + + // Speciální + 'information', 'help-circle', 'alert-circle', 'checkbox-marked-circle', + 'toggle-switch', 'power', 'sync' + ]; + + const search = searchText.toLowerCase(); + const filtered = commonIcons.filter(icon => icon.includes(search)); + + if (filtered.length === 0) { + suggestionsDiv.style.display = 'none'; + return; + } + + suggestionsDiv.innerHTML = filtered.slice(0, 12).map(icon => ` +
+ + mdi:${icon} +
+ `).join(''); + + suggestionsDiv.style.display = 'block'; + } + + /** + * Vybrat ikonu + */ + selectIcon(icon) { + document.getElementById('entity-icon').value = icon; + document.getElementById('icon-suggestions').style.display = 'none'; + } + + /** + * Filtrovat entity podle hledaného textu + */ + filterEntities(searchText) { + const items = document.querySelectorAll('#entity-list .entity-item'); + const search = searchText.toLowerCase(); + + items.forEach(item => { + const entityId = item.dataset.entityId; + const state = this.hass.states[entityId]; + const name = (state.attributes.friendly_name || entityId).toLowerCase(); + + if (name.includes(search) || entityId.toLowerCase().includes(search)) { + item.style.display = ''; + } else { + item.style.display = 'none'; + } + }); + } + + /** + * Filtrovat entity pro tlačítka podle hledaného textu + */ + filterButtonEntities(searchText) { + const items = document.querySelectorAll('#button-entity-list .entity-item'); + const search = searchText.toLowerCase(); + + items.forEach(item => { + const entityId = item.dataset.entityId; + const state = this.hass.states[entityId]; + const name = (state.attributes.friendly_name || entityId).toLowerCase(); + + if (name.includes(search) || entityId.toLowerCase().includes(search)) { + item.style.display = ''; + } else { + item.style.display = 'none'; + } + }); + } + + /** + * Když je vybrána entita, auto-fill ikonu a barvu + */ + onEntitySelected(entityId) { + const state = this.hass.states[entityId]; + if (!state) return; + + // Auto-fill label + const labelInput = document.getElementById('entity-label'); + if (labelInput && !labelInput.value) { + labelInput.value = state.attributes.friendly_name || ''; + } + + // Auto-fill icon - POUZE pokud vytváříme novou dlaždici (ne při editaci) + const iconInput = document.getElementById('entity-icon'); + if (iconInput && !this.isEditing && !iconInput.value && state.attributes.icon) { + iconInput.value = state.attributes.icon; + } + + // Auto-fill color podle domény + const colorInput = document.getElementById('entity-color'); + if (colorInput) { + colorInput.value = this.tileManager.getColorFromDomain(entityId); + } + } + + /** + * Když je vybrána button entita, auto-fill ikonu a barvu + */ + onButtonEntitySelected(entityId) { + if (!entityId) return; + + const state = this.hass.states[entityId]; + if (!state) return; + + // Auto-fill label + const labelInput = document.getElementById('button-label'); + if (labelInput && !labelInput.value) { + labelInput.value = state.attributes.friendly_name || ''; + } + + // Auto-fill icon - POUZE pokud vytváříme novou dlaždici (ne při editaci) + const iconInput = document.getElementById('button-icon'); + if (iconInput && !this.isEditing && !iconInput.value && state.attributes.icon) { + iconInput.value = state.attributes.icon; + } + + // Auto-fill color podle domény + const colorInput = document.getElementById('button-color'); + if (colorInput) { + colorInput.value = this.tileManager.getColorFromDomain(entityId); + } + } + + /** + * Načíst existující konfiguraci do formu + */ + loadTileConfig(tileConfig) { + if (tileConfig.type === 'entity') { + this.switchTab('entity'); + + // Vybrat radio button + const radio = document.querySelector(`input[name="entity"][value="${tileConfig.entity_id}"]`); + if (radio) radio.checked = true; + + // Fill form + document.getElementById('entity-label').value = tileConfig.label || ''; + document.getElementById('entity-icon').value = tileConfig.icon || ''; + document.getElementById('entity-color').value = tileConfig.color || '#03A9F4'; + + // Update icon preview + if (tileConfig.icon) { + this.updateIconPreview('entity', tileConfig.icon); + } + + // Podporné entity - nastavit hidden input a zobrazit název v search + if (tileConfig.support_entities) { + if (tileConfig.support_entities.top_right) { + const entity1 = this.hass.states[tileConfig.support_entities.top_right]; + if (entity1) { + document.getElementById('support-entity-1').value = tileConfig.support_entities.top_right; + document.getElementById('support-entity-1-search').value = entity1.attributes.friendly_name || tileConfig.support_entities.top_right; + } + } + if (tileConfig.support_entities.bottom_right) { + const entity2 = this.hass.states[tileConfig.support_entities.bottom_right]; + if (entity2) { + document.getElementById('support-entity-2').value = tileConfig.support_entities.bottom_right; + document.getElementById('support-entity-2-search').value = entity2.attributes.friendly_name || tileConfig.support_entities.bottom_right; + } + } + } + + } else if (tileConfig.type === 'button') { + this.switchTab('button'); + + // Vybrat radio button + const radio = document.querySelector(`input[name="button_entity"][value="${tileConfig.entity_id}"]`); + if (radio) radio.checked = true; + + // Fill form + document.getElementById('button-action').value = tileConfig.action || 'toggle'; + document.getElementById('button-label').value = tileConfig.label || ''; + document.getElementById('button-icon').value = tileConfig.icon || ''; + document.getElementById('button-color').value = tileConfig.color || '#FFC107'; + + // Update icon preview + if (tileConfig.icon) { + this.updateIconPreview('button', tileConfig.icon); + } + + // Načíst support entities + if (tileConfig.support_entities) { + if (tileConfig.support_entities.top_right) { + const entity1 = this.hass.states[tileConfig.support_entities.top_right]; + if (entity1) { + document.getElementById('button-support-entity-1').value = tileConfig.support_entities.top_right; + document.getElementById('button-support-entity-1-search').value = entity1.attributes.friendly_name || tileConfig.support_entities.top_right; + } + } + if (tileConfig.support_entities.bottom_right) { + const entity2 = this.hass.states[tileConfig.support_entities.bottom_right]; + if (entity2) { + document.getElementById('button-support-entity-2').value = tileConfig.support_entities.bottom_right; + document.getElementById('button-support-entity-2-search').value = entity2.attributes.friendly_name || tileConfig.support_entities.bottom_right; + } + } + } + } + } + + /** + * Uložit konfiguraci + */ + save() { + let config; + + if (this.currentTab === 'entity') { + config = this.saveEntityConfig(); + } else { + config = this.saveButtonConfig(); + } + + if (!config) return; // Validace selhala + + // Uložit do tile manageru + this.tileManager.setTile(this.side, this.index, config); + + // Zavřít dialog + this.close(); + + console.log(`✅ Saved tile config:`, config); + } + + /** + * Uložit entity config + */ + saveEntityConfig() { + const selectedEntity = document.querySelector('input[name="entity"]:checked'); + if (!selectedEntity) { + alert('Vyberte entitu'); + return null; + } + + const entityId = selectedEntity.value; + const label = document.getElementById('entity-label').value.trim(); + const icon = document.getElementById('entity-icon').value.trim(); + const color = document.getElementById('entity-color').value; + + // Podpůrné entity + const supportEntity1 = document.getElementById('support-entity-1').value; + const supportEntity2 = document.getElementById('support-entity-2').value; + + return { + type: 'entity', + entity_id: entityId, + label: label || null, + icon: icon || null, + color: color, + support_entities: { + top_right: supportEntity1 || null, + bottom_right: supportEntity2 || null + } + }; + } + + /** + * Uložit button config + */ + saveButtonConfig() { + const selectedEntity = document.querySelector('input[name="button_entity"]:checked'); + if (!selectedEntity) { + alert('Vyberte entitu'); + return null; + } + + const entityId = selectedEntity.value; + const action = document.getElementById('button-action').value; + const label = document.getElementById('button-label').value.trim(); + const icon = document.getElementById('button-icon').value.trim(); + const color = document.getElementById('button-color').value; + + // Přečíst support entities + const supportEntity1 = document.getElementById('button-support-entity-1').value; + const supportEntity2 = document.getElementById('button-support-entity-2').value; + + return { + type: 'button', + entity_id: entityId, + action: action, + label: label || null, + icon: icon || null, + color: color, + support_entities: { + top_right: supportEntity1 || null, + bottom_right: supportEntity2 || null + } + }; + } + + /** + * Resetovat form + */ + resetForm() { + document.getElementById('entity-search').value = ''; + document.getElementById('entity-label').value = ''; + document.getElementById('entity-icon').value = ''; + document.getElementById('entity-color').value = '#03A9F4'; + + document.getElementById('button-action').value = 'toggle'; + document.getElementById('button-entity-search').value = ''; + document.getElementById('button-label').value = ''; + document.getElementById('button-icon').value = ''; + document.getElementById('button-color').value = '#FFC107'; + + // Reset support entities for entity tab + document.getElementById('support-entity-1-search').value = ''; + document.getElementById('support-entity-1').value = ''; + document.getElementById('support-entity-2-search').value = ''; + document.getElementById('support-entity-2').value = ''; + + // Reset support entities for button tab + document.getElementById('button-support-entity-1-search').value = ''; + document.getElementById('button-support-entity-1').value = ''; + document.getElementById('button-support-entity-2-search').value = ''; + document.getElementById('button-support-entity-2').value = ''; + + // Reset icon previews + document.getElementById('entity-icon-preview').innerHTML = '🔍'; + document.getElementById('button-icon-preview').innerHTML = '🔍'; + + // Odznačit všechny entity + document.querySelectorAll('input[name="entity"]').forEach(radio => { + radio.checked = false; + }); + document.querySelectorAll('input[name="button_entity"]').forEach(radio => { + radio.checked = false; + }); + + // Zobrazit všechny entity (zrušit filtr) + document.querySelectorAll('.entity-item').forEach(item => { + item.style.display = ''; + }); + + // Přepnout na první tab + this.switchTab('entity'); + } + + /** + * Otevřít icon picker modal + */ + openIconPicker(target) { + this.currentIconTarget = target; + this.populateIconPicker(); + this.iconPickerModal.style.display = 'flex'; + document.getElementById('icon-picker-search').value = ''; + document.getElementById('icon-picker-search').focus(); + } + + /** + * Zavřít icon picker modal + */ + closeIconPicker() { + this.iconPickerModal.style.display = 'none'; + this.currentIconTarget = null; + } + + /** + * Naplnit icon picker všemi ikonami + */ + async populateIconPicker() { + const categories = { + 'Spotřebiče': [ + 'fridge', 'fridge-outline', 'dishwasher', 'washing-machine', 'tumble-dryer', + 'stove', 'microwave', 'coffee-maker', 'kettle', 'toaster', 'blender', 'food-processor', + 'rice-cooker', 'slow-cooker', 'pressure-cooker', 'air-fryer', 'oven', 'range-hood' + ], + 'Osvětlení': [ + 'lightbulb', 'lightbulb-outline', 'lamp', 'ceiling-light', 'floor-lamp', 'led-strip', + 'led-strip-variant', 'wall-sconce', 'chandelier', 'desk-lamp', 'spotlight', 'light-switch' + ], + 'Vytápění & Chlazení': [ + 'thermometer', 'thermostat', 'radiator', 'radiator-disabled', 'heat-pump', + 'air-conditioner', 'fan', 'hvac', 'fire', 'snowflake', 'fireplace', 'heating-coil' + ], + 'Energie & Baterie': [ + 'lightning-bolt', 'flash', 'battery', 'battery-charging', 'battery-50', 'battery-10', + 'solar-panel', 'solar-power', 'meter-electric', 'power-plug', 'power-socket', + 'ev-plug', 'transmission-tower', 'current-ac', 'current-dc' + ], + 'Auto & Doprava': [ + 'car', 'car-electric', 'car-battery', 'ev-station', 'ev-plug-type2', 'garage', + 'garage-open', 'motorcycle', 'bicycle', 'scooter', 'bus', 'train', 'airplane' + ], + 'Zabezpečení': [ + 'door', 'door-open', 'lock', 'lock-open', 'shield-home', 'cctv', 'camera', + 'motion-sensor', 'alarm-light', 'bell', 'eye', 'key', 'fingerprint', 'shield-check' + ], + 'Okna & Stínění': [ + 'window-closed', 'window-open', 'blinds', 'blinds-open', 'curtains', 'roller-shade', + 'window-shutter', 'balcony', 'door-sliding' + ], + 'Média & Zábava': [ + 'television', 'speaker', 'speaker-wireless', 'music', 'volume-high', 'cast', + 'chromecast', 'radio', 'headphones', 'microphone', 'gamepad', 'movie', 'spotify' + ], + 'Síť & IT': [ + 'router-wireless', 'wifi', 'access-point', 'lan', 'network', 'home-assistant', + 'server', 'nas', 'cloud', 'ethernet', 'bluetooth', 'cellphone', 'tablet', 'laptop' + ], + 'Voda & Koupelna': [ + 'water', 'water-percent', 'water-boiler', 'water-pump', 'shower', 'toilet', + 'faucet', 'pipe', 'bathtub', 'sink', 'water-heater', 'pool' + ], + 'Počasí': [ + 'weather-sunny', 'weather-cloudy', 'weather-night', 'weather-rainy', 'weather-snowy', + 'weather-windy', 'weather-fog', 'weather-lightning', 'weather-hail', 'temperature', + 'humidity', 'barometer' + ], + 'Ventilace & Kvalita vzduchu': [ + 'fan', 'air-filter', 'air-purifier', 'smoke-detector', 'co2', 'wind-turbine' + ], + 'Zahrada & Venku': [ + 'flower', 'tree', 'sprinkler', 'grass', 'garden-light', 'outdoor-lamp', 'grill', + 'pool', 'hot-tub', 'umbrella', 'thermometer-lines' + ], + 'Domácnost': [ + 'iron', 'vacuum', 'broom', 'mop', 'washing', 'basket', 'hanger', 'scissors' + ], + 'Notifikace & Stav': [ + 'information', 'help-circle', 'alert-circle', 'checkbox-marked-circle', 'check', + 'close', 'minus', 'plus', 'arrow-up', 'arrow-down', 'refresh', 'sync', 'bell-ring' + ], + 'Ovládání': [ + 'toggle-switch', 'power', 'play', 'pause', 'stop', 'skip-next', 'skip-previous', + 'volume-up', 'volume-down', 'brightness-up', 'brightness-down' + ], + 'Čas & Plánování': [ + 'clock', 'timer', 'alarm', 'calendar', 'calendar-clock', 'schedule', 'history' + ], + 'Ostatní': [ + 'home', 'cog', 'tools', 'wrench', 'hammer', 'chart-line', 'gauge', 'dots-vertical', + 'menu', 'settings', 'account', 'logout' + ] + }; + + console.log('🎨 Populating icon picker...'); + + // Vyprázdnit body + this.iconPickerBody.innerHTML = ''; + + // Vytvořit kategorie přímo jako DOM elementy + for (const [category, icons] of Object.entries(categories)) { + const categoryDiv = document.createElement('div'); + categoryDiv.className = 'icon-category'; + + const categoryTitle = document.createElement('h4'); + categoryTitle.className = 'icon-category-title'; + categoryTitle.textContent = category; + categoryDiv.appendChild(categoryTitle); + + const gridDiv = document.createElement('div'); + gridDiv.className = 'icon-category-grid'; + + icons.forEach(icon => { + const fullIcon = `mdi:${icon}`; + + const itemDiv = document.createElement('div'); + itemDiv.className = 'icon-picker-item'; + itemDiv.dataset.icon = fullIcon; + itemDiv.onclick = () => this.selectIconFromPicker(fullIcon); + + // Vložit HTML s ha-icon + itemDiv.innerHTML = ` + ${renderIconHTML(fullIcon)} + ${icon} + `; + + gridDiv.appendChild(itemDiv); + }); + + categoryDiv.appendChild(gridDiv); + this.iconPickerBody.appendChild(categoryDiv); + } + + console.log('✅ Icon picker populated with', Object.keys(categories).reduce((sum, cat) => sum + categories[cat].length, 0), 'emoji icons'); + } /** + * Filtrování icon pickeru + */ + filterIconPicker(searchText) { + const search = searchText.toLowerCase(); + const categories = this.iconPickerBody.querySelectorAll('.icon-category'); + + categories.forEach(category => { + const items = category.querySelectorAll('.icon-picker-item'); + let hasVisible = false; + + items.forEach(item => { + const iconName = item.dataset.icon.toLowerCase(); + if (iconName.includes(search)) { + item.style.display = ''; + hasVisible = true; + } else { + item.style.display = 'none'; + } + }); + + category.style.display = hasVisible ? '' : 'none'; + }); + } + + /** + * Vybrat ikonu z pickeru + */ + selectIconFromPicker(icon) { + console.log('🎯 Icon selected from picker:', icon); + const inputId = this.currentIconTarget === 'entity' ? 'entity-icon' : 'button-icon'; + const previewId = this.currentIconTarget === 'entity' ? 'entity-icon-preview' : 'button-icon-preview'; + + const inputField = document.getElementById(inputId); + const previewBox = document.getElementById(previewId); + + if (inputField) { + inputField.value = icon; + console.log('✅ Input field updated:', inputId, '=', icon); + } + + if (previewBox) { + previewBox.innerHTML = renderIconHTML(icon); + console.log('✅ Preview box updated with rendered icon'); + } + + this.closeIconPicker(); + } + + /** + * Aktualizovat náhled ikony při načtení konfigurace + */ + updateIconPreview(target, icon) { + if (!icon) return; + console.log('🎨 Updating icon preview:', target, icon); + const previewId = target === 'entity' ? 'entity-icon-preview' : 'button-icon-preview'; + const previewBox = document.getElementById(previewId); + if (previewBox) { + previewBox.innerHTML = renderIconHTML(icon); + console.log('✅ Preview updated'); + } else { + console.error('❌ Preview box not found:', previewId); + } + } +} + +// Export do window pro použití inline onclick handlerů +window.TileConfigDialog = TileConfigDialog; diff --git a/custom_components/oig_cloud/www/js/components/grid-charging.js b/custom_components/oig_cloud/www/js/components/grid-charging.js new file mode 100644 index 00000000..c1b83187 --- /dev/null +++ b/custom_components/oig_cloud/www/js/components/grid-charging.js @@ -0,0 +1,934 @@ +/* eslint-disable */ +// === GRID CHARGING PLAN FUNCTIONS === + +function getDayLabel(day) { + if (day === 'tomorrow') return 'zítra'; + if (day === 'today') return 'dnes'; + return ''; +} + +function getBlockEnergyKwh(block) { + if (!block) return 0; + // HYBRID API uses grid_import_kwh, legacy uses grid_charge_kwh + const energy = Number(block.grid_import_kwh || block.grid_charge_kwh); + if (Number.isFinite(energy) && energy > 0) { + return energy; + } + const start = Number(block.battery_start_kwh); + const end = Number(block.battery_end_kwh); + if (Number.isFinite(start) && Number.isFinite(end)) { + const delta = end - start; + return delta > 0 ? delta : 0; + } + return 0; +} + +function sortChargingBlocks(blocks = []) { + return [...blocks].sort((a, b) => { + const dayScore = (a?.day === 'tomorrow' ? 1 : 0) - (b?.day === 'tomorrow' ? 1 : 0); + if (dayScore !== 0) return dayScore; + return (a?.time_from || '').localeCompare(b?.time_from || ''); + }); +} + +function formatPlanWindow(blocks) { + if (!Array.isArray(blocks) || blocks.length === 0) return null; + const sorted = sortChargingBlocks(blocks); + const first = sorted[0]; + const last = sorted[sorted.length - 1]; + + const startLabel = getDayLabel(first?.day); + const endLabel = getDayLabel(last?.day); + + if (startLabel === endLabel) { + const prefix = startLabel ? `${startLabel} ` : ''; + if (!first?.time_from || !last?.time_to) { + return prefix.trim() || null; + } + return `${prefix}${first.time_from} – ${last.time_to}`; + } + + const startText = first ? `${startLabel ? `${startLabel} ` : ''}${first.time_from || '--'}` : '--'; + const endText = last ? `${endLabel ? `${endLabel} ` : ''}${last.time_to || '--'}` : '--'; + return `${startText} → ${endText}`; +} + +function formatBlockLabel(block) { + if (!block) return '--'; + const label = getDayLabel(block.day); + const prefix = label ? `${label} ` : ''; + const from = block.time_from || '--'; + const to = block.time_to || '--'; + return `${prefix}${from} - ${to}`; +} + +function updateChargingRow(rowId, valueId, block, shouldShow) { + const rowEl = document.getElementById(rowId); + const valueEl = document.getElementById(valueId); + if (!rowEl || !valueEl) return; + + if (block && shouldShow) { + rowEl.style.display = 'flex'; + valueEl.textContent = formatBlockLabel(block); + } else { + rowEl.style.display = 'none'; + valueEl.textContent = '--'; + } +} + +// Update target warning indicator - kontrola dosažitelnosti cílové kapacity +async function updateTargetWarningIndicator() { + const forecastData = await getSensorString(getSensorId('battery_forecast')); + const warningRow = document.getElementById('target-warning-row'); + const warningIndicator = document.getElementById('target-warning-indicator'); + + if (!forecastData || !forecastData.attributes || !warningRow || !warningIndicator) { + return; + } + + const attrs = forecastData.attributes; + const targetAchieved = attrs.target_achieved; + const minAchieved = attrs.min_achieved; + const finalCapacityKwh = attrs.final_capacity_kwh; + const targetCapacityKwh = attrs.target_capacity_kwh; + const minCapacityKwh = attrs.min_capacity_kwh; + const shortageKwh = attrs.shortage_kwh || 0; + + // Pokud nejsou dostupná data, skrýt + if (targetAchieved === undefined) { + warningRow.style.display = 'none'; + return; + } + + // Pokud je vše OK (target dosažen), skrýt warning + if (targetAchieved) { + warningRow.style.display = 'none'; + return; + } + + // Target NENÍ dosažen - zobrazit warning + warningRow.style.display = 'flex'; + + const maxCapacityKwh = attrs.max_capacity_kwh || 12.29; + const finalPercentage = ((finalCapacityKwh / maxCapacityKwh) * 100).toFixed(0); + const targetPercentage = ((targetCapacityKwh / maxCapacityKwh) * 100).toFixed(0); + + // Rozhodnout barvu a text podle závažnosti + let color, text, tooltipText; + + if (!minAchieved) { + // KRITICKÉ: Nedosáhne ani minimum + color = '#f44336'; // červená + text = `⚠️ Dosáhne ${finalPercentage}%`; + tooltipText = ` +
+ ⚠️ KRITICKÉ VAROVÁNÍ

+ Nedosáhne minimální kapacity!
+ + Cílová kapacita: ${targetPercentage}% (${targetCapacityKwh.toFixed(1)} kWh)
+ Minimální kapacita: ${((minCapacityKwh / maxCapacityKwh) * 100).toFixed(0)}% (${minCapacityKwh.toFixed(1)} kWh)
+ Dosažitelná: ${finalPercentage}% (${finalCapacityKwh.toFixed(1)} kWh)
+ Chybí: ${shortageKwh.toFixed(1)} kWh +
+
+ + 💡 Není dostatek levných hodin pro nabíjení.
+ Zvyšte max. cenu nebo snižte cílovou kapacitu. +
+
+ `; + } else { + // VAROVÁNÍ: Nedosáhne target, ale dosáhne minimum + color = '#ff9800'; // oranžová + text = `⚠️ Dosáhne ${finalPercentage}%`; + tooltipText = ` +
+ ⚠️ VAROVÁNÍ

+ Nedosáhne cílové kapacity
+ + Cílová kapacita: ${targetPercentage}% (${targetCapacityKwh.toFixed(1)} kWh)
+ Dosažitelná: ${finalPercentage}% (${finalCapacityKwh.toFixed(1)} kWh)
+ Chybí: ${shortageKwh.toFixed(1)} kWh +
+
+ + 💡 Není dostatek levných hodin pro dosažení targetu.
+ Minimální kapacita bude zajištěna. +
+
+ `; + } + + // Nastavit text a barvu + warningIndicator.textContent = text; + warningIndicator.style.color = color; + warningIndicator.setAttribute('data-tooltip-html', tooltipText); + + // Přidat blikání (použít existující animaci) + warningIndicator.style.animation = 'pulse-warning 2s ease-in-out infinite'; +} + +function parseHmToMinutes(hm) { + if (!hm || typeof hm !== 'string') return null; + const m = hm.trim().match(/^(\d{1,2}):(\d{2})$/); + if (!m) return null; + const h = Number(m[1]); + const min = Number(m[2]); + if (!Number.isFinite(h) || !Number.isFinite(min)) return null; + return h * 60 + min; +} + +function formatDurationMinutes(totalMinutes) { + if (!Number.isFinite(totalMinutes) || totalMinutes <= 0) return '0 h'; + const hours = Math.floor(totalMinutes / 60); + const minutes = Math.round(totalMinutes % 60); + if (hours <= 0) return `${minutes} min`; + if (minutes <= 0) return `${hours} h`; + return `${hours} h ${minutes} min`; +} + +function getLocalDateKey(dateObj) { + if (!(dateObj instanceof Date) || Number.isNaN(dateObj.getTime())) return null; + const y = dateObj.getFullYear(); + const m = String(dateObj.getMonth() + 1).padStart(2, '0'); + const d = String(dateObj.getDate()).padStart(2, '0'); + return `${y}-${m}-${d}`; +} + +function buildChargingBlocksFromTimeline(rawTimeline) { + const timeline = Array.isArray(rawTimeline?.timeline) ? rawTimeline.timeline : rawTimeline; + if (!Array.isArray(timeline) || timeline.length === 0) return []; + + const todayKey = getLocalDateKey(new Date()); + const sorted = [...timeline] + .filter(p => p && typeof p.timestamp === 'string') + .sort((a, b) => a.timestamp.localeCompare(b.timestamp)); + + const blocks = []; + let current = null; + + const flush = () => { + if (!current) return; + if (current.interval_count <= 0) { + current = null; + return; + } + const avg = current.grid_import_kwh > 0 ? (current.total_cost_czk / current.grid_import_kwh) : 0; + blocks.push({ + day: current.day, + time_from: current.time_from, + time_to: current.time_to, + interval_count: current.interval_count, + grid_import_kwh: current.grid_import_kwh, + total_cost_czk: current.total_cost_czk, + avg_spot_price_czk: avg + }); + current = null; + }; + + for (let i = 0; i < sorted.length; i++) { + const point = sorted[i]; + const gridKwh = Number(point.grid_import_kwh ?? point.grid_charge_kwh ?? 0); + if (!Number.isFinite(gridKwh) || gridKwh <= 0) { + flush(); + continue; + } + + const ts = point.timestamp; + const [datePart, timePart] = ts.split('T'); + const hm = timePart ? timePart.slice(0, 5) : null; + if (!datePart || !hm) { + flush(); + continue; + } + + const day = datePart === todayKey ? 'today' : 'tomorrow'; + const spot = Number(point.spot_price_czk ?? 0); + const cost = Number.isFinite(spot) && spot > 0 ? gridKwh * spot : 0; + + if (!current) { + current = { + day, + datePart, + time_from: hm, + time_to: hm, + interval_count: 0, + grid_import_kwh: 0, + total_cost_czk: 0, + last_ts: ts + }; + } else { + const sameDay = current.datePart === datePart; + const contiguous = sameDay && current.last_ts && typeof current.last_ts === 'string' + ? true + : false; + if (!sameDay || !contiguous) { + flush(); + current = { + day, + datePart, + time_from: hm, + time_to: hm, + interval_count: 0, + grid_import_kwh: 0, + total_cost_czk: 0, + last_ts: ts + }; + } + } + + current.interval_count += 1; + current.grid_import_kwh += gridKwh; + current.total_cost_czk += cost; + current.last_ts = ts; + current.time_to = hm; + } + + flush(); + + // Adjust time_to: add one interval (assume 15min) for nicer display + blocks.forEach((b) => { + const fromMin = parseHmToMinutes(b.time_from); + const toMin = parseHmToMinutes(b.time_to); + if (fromMin === null || toMin === null) return; + const intervalMinutes = 15; + const end = toMin + intervalMinutes; + const endH = Math.floor(end / 60) % 24; + const endM = end % 60; + b.time_to = `${String(endH).padStart(2, '0')}:${String(endM).padStart(2, '0')}`; + }); + + return blocks; +} + +function computeBlocksDurationMinutes(blocks) { + if (!Array.isArray(blocks) || blocks.length === 0) return 0; + let total = 0; + blocks.forEach((b) => { + const a = parseHmToMinutes(b.time_from); + const z = parseHmToMinutes(b.time_to); + if (a === null || z === null) return; + const delta = z - a; + if (delta > 0) total += delta; + }); + return total; +} + +async function updateGridChargingPlan() { + const gridChargingData = await getSensorString(getSensorId('grid_charging_planned')); + const isPlanned = gridChargingData.value === 'on'; + + let rawBlocks = gridChargingData.attributes?.charging_blocks || []; + let chargingBlocks = sortChargingBlocks(rawBlocks); + let hasBlocks = chargingBlocks.length > 0; + + // Fallback: pokud sensor nemá charging_blocks, zkus vytvořit bloky z timeline API + if (!hasBlocks && typeof loadBatteryTimeline === 'function') { + try { + const timeline = await loadBatteryTimeline(typeof INVERTER_SN === 'string' ? INVERTER_SN : undefined); + rawBlocks = buildChargingBlocksFromTimeline(timeline); + chargingBlocks = sortChargingBlocks(rawBlocks); + hasBlocks = chargingBlocks.length > 0; + } catch (e) { + console.warn('[GridCharging] Timeline fallback failed:', e); + } + } + + const totalEnergy = Number(gridChargingData.attributes?.total_energy_kwh) + || chargingBlocks.reduce((sum, b) => sum + Number(b.grid_import_kwh || b.grid_charge_kwh || 0), 0); + const totalCost = Number(gridChargingData.attributes?.total_cost_czk) + || chargingBlocks.reduce((sum, b) => sum + Number(b.total_cost_czk || 0), 0); + const planWindow = formatPlanWindow(chargingBlocks); + const durationMinutes = computeBlocksDurationMinutes(chargingBlocks); + const runningBlock = chargingBlocks.find(block => { + const status = (block.status || '').toLowerCase(); + return status === 'running' || status === 'active'; + }); + const upcomingBlock = runningBlock + ? chargingBlocks[chargingBlocks.indexOf(runningBlock) + 1] || null + : chargingBlocks[0] || null; + const shouldShowNext = upcomingBlock && (!runningBlock || upcomingBlock !== runningBlock); + + updateChargingRow('grid-charging-current-row', 'grid-charging-current', runningBlock, !!runningBlock); + updateChargingRow('grid-charging-next-row', 'grid-charging-next', upcomingBlock, !!shouldShowNext); + + const indicator = document.getElementById('battery-grid-charging-indicator'); + if (indicator) { + if (isPlanned) { + indicator.classList.add('active'); + } else { + indicator.classList.remove('active'); + } + + if (hasBlocks) { + const planSummary = planWindow || gridChargingData.attributes?.next_charging_time_range || '--'; + let tooltipHtml = ` +
+ Období: ${planSummary}
+ Plánované dobití: ${totalEnergy.toFixed(1)} kWh
+ Celková cena: ~${totalCost.toFixed(2)} Kč +
+ + + + + + + + + + `; + + chargingBlocks.forEach((block) => { + const dayLabel = block.day === 'tomorrow' ? ' (zítra)' : ''; + const timeRange = `${block.time_from}-${block.time_to}${dayLabel}`; + const energyValue = getBlockEnergyKwh(block); + const costValue = Number(block.total_cost_czk) || 0; + + tooltipHtml += ` + + + + + + `; + }); + + tooltipHtml += ` + +
ČaskWh
${timeRange}${energyValue.toFixed(2)}${costValue.toFixed(2)}
+
+ `; + + indicator.setAttribute('data-tooltip-html', tooltipHtml); + } else { + indicator.setAttribute('data-tooltip', 'Žádné plánované nabíjení'); + } + + initTooltips(); + } + + const section = document.getElementById('grid-charging-plan-section'); + if (section) { + section.style.display = hasBlocks ? 'block' : 'none'; + } + + const windowElement = document.getElementById('grid-charging-window'); + const durationElement = document.getElementById('grid-charging-duration'); + const windowRow = document.getElementById('grid-charging-window-row'); + const durationRow = document.getElementById('grid-charging-duration-row'); + if (windowElement && windowRow) { + windowRow.style.display = hasBlocks ? 'flex' : 'none'; + windowElement.textContent = hasBlocks + ? (planWindow || gridChargingData.attributes?.next_charging_time_range || '--') + : '--'; + } + if (durationElement && durationRow) { + durationRow.style.display = hasBlocks ? 'flex' : 'none'; + durationElement.textContent = hasBlocks ? formatDurationMinutes(durationMinutes) : '--'; + } + + const energyElement = document.getElementById('grid-charging-energy'); + if (energyElement) { + energyElement.textContent = totalEnergy.toFixed(1) + ' kWh'; + } + + const costElement = document.getElementById('grid-charging-cost'); + if (costElement) { + costElement.textContent = '~' + totalCost.toFixed(2) + ' Kč'; + } + + await updateTargetWarningIndicator(); +} + +async function updateBatteryBalancingCard() { + try { + const balancingData = await getSensorString(getSensorId('battery_balancing')); + const forecastData = await getSensorString(getSensorId('battery_forecast')); + + if (!balancingData || !balancingData.attributes) { + console.warn('[Balancing] No balancing data available'); + return; + } + + const attrs = balancingData.attributes; + const rawState = balancingData.state; + const status = + rawState && rawState !== 'unknown' && rawState !== 'unavailable' + ? rawState + : (attrs.status || 'ok'); // ok, due_soon, critical, overdue, disabled + const daysSince = attrs.days_since_last ?? null; + const intervalDays = attrs.cycle_days ?? 7; + const holdingHours = attrs.holding_hours ?? 3; + const socThreshold = attrs.soc_threshold ?? 80; + const lastBalancing = attrs.last_balancing ? new Date(attrs.last_balancing) : null; + const planned = attrs.planned; + const currentStateRaw = attrs.current_state ?? 'standby'; // charging/balancing/planned/standby + const currentState = + currentStateRaw && currentStateRaw !== 'unknown' && currentStateRaw !== 'unavailable' + ? currentStateRaw + : 'standby'; + const timeRemaining = attrs.time_remaining; // HH:MM + + // Získat cost tracking data + const costImmediate = Number.isFinite(Number(attrs.cost_immediate_czk)) + ? Number(attrs.cost_immediate_czk) + : null; + const costSelected = Number.isFinite(Number(attrs.cost_selected_czk)) + ? Number(attrs.cost_selected_czk) + : null; + const costSavings = Number.isFinite(Number(attrs.cost_savings_czk)) + ? Number(attrs.cost_savings_czk) + : null; + + console.debug('[Balancing] Sensor data:', { + state: status, + daysSince, + intervalDays, + lastBalancing: attrs.last_balancing, + costImmediate, + costSelected, + costSavings, + planned: !!planned + }); + + // Vypočítat dny do dalšího balancingu + let daysRemaining = null; + if (daysSince !== null) { + daysRemaining = Math.max(0, intervalDays - daysSince); + } + + // Status barvy + const statusColors = { + ok: '#4CAF50', // zelená + due_soon: '#FFC107', // žlutá + critical: '#FF9800', // oranžová + overdue: '#F44336', // červená + disabled: '#757575' // šedá + }; + const statusColor = statusColors[status] || '#757575'; + + // Current state texty a barvy + const stateTexts = { + charging: 'Příprava na 100%', + balancing: 'Vyrovnávání článků', + completed: 'Vybalancováno', + planned: 'Čeká na zahájení', + standby: 'Standby' + }; + + const stateColors = { + charging: '#FFC107', // žlutá + balancing: '#FF9800', // oranžová + completed: '#4CAF50', // zelená + planned: '#2196F3', // modrá + standby: '#757575' // šedá + }; + + // Update status label s detailním stavem + const statusLabel = document.getElementById('balancing-status-label'); + if (statusLabel) { + const stateText = stateTexts[currentState] || currentState; + const stateColor = stateColors[currentState] || '#757575'; + + if (currentState === 'charging' && timeRemaining) { + statusLabel.textContent = `${stateText} (${timeRemaining} do balancování)`; + } else if (currentState === 'balancing' && timeRemaining) { + statusLabel.textContent = `${stateText} (zbývá ${timeRemaining})`; + } else if (currentState === 'planned' && timeRemaining) { + statusLabel.textContent = `${stateText} (start za ${timeRemaining})`; + } else if (currentState === 'completed' && timeRemaining) { + statusLabel.textContent = `${stateText} ${timeRemaining}`; + } else { + statusLabel.textContent = stateText; + } + + statusLabel.style.color = stateColor; + } + + // OPRAVA: Update nadpisu karty podle aktuálního stavu + const cardTitle = document.getElementById('balancing-card-title'); + if (cardTitle) { + if (currentState === 'balancing') { + cardTitle.textContent = '⚡ Probíhá balancování'; + cardTitle.style.color = '#FF9800'; + } else if (currentState === 'charging') { + cardTitle.textContent = '🔋 Příprava na balancování'; + cardTitle.style.color = '#FFC107'; + } else if (currentState === 'completed') { + cardTitle.textContent = '✅ Balancování dokončeno'; + cardTitle.style.color = '#4CAF50'; + } else if (currentState === 'planned') { + cardTitle.textContent = '📅 Balancování naplánováno'; + cardTitle.style.color = '#2196F3'; + } else { + cardTitle.textContent = '🔋 Vyrovnání baterie'; + cardTitle.style.color = '#FF9800'; + } + } + + // Update velké číslo - dny + const daysNumber = document.getElementById('balancing-days-number'); + const daysUnit = document.getElementById('balancing-days-unit'); + if (daysNumber) { + if (daysRemaining !== null) { + daysNumber.textContent = daysRemaining; + daysNumber.style.color = statusColor; + + // Správný český tvar + if (daysUnit) { + if (daysRemaining === 1) { + daysUnit.textContent = 'den'; + } else if (daysRemaining >= 2 && daysRemaining <= 4) { + daysUnit.textContent = 'dny'; + } else { + daysUnit.textContent = 'dní'; + } + } + } else { + daysNumber.textContent = '?'; + daysNumber.style.color = '#757575'; + if (daysUnit) { + daysUnit.textContent = 'dní'; + } + } + } + + // Update poslední balancing (krátký formát) + const lastDateShort = document.getElementById('balancing-last-date-short'); + if (lastDateShort && lastBalancing) { + const dateStr = lastBalancing.toLocaleDateString('cs-CZ', { day: '2-digit', month: '2-digit' }); + lastDateShort.textContent = `${dateStr} (${daysSince}d)`; + } else if (lastDateShort) { + lastDateShort.textContent = 'Žádné'; + } + + // Update plánované balancing (krátký formát) + const plannedShort = document.getElementById('balancing-planned-short'); + const plannedTimeShort = document.getElementById('balancing-planned-time-short'); + const costValueShort = document.getElementById('balancing-cost-value-short'); + + if (planned && plannedTimeShort && costValueShort && plannedShort) { + // Zobrazit plánovanou řádku + plannedShort.style.display = 'flex'; + + // Parsovat časy + const startTime = new Date(planned.holding_start); + const startStr = startTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }); + + // Zobrazit info o charging intervalech + const chargingIntervals = planned.charging_intervals || []; + const chargingAvgPrice = planned.charging_avg_price_czk || 0; + const endTime = new Date(planned.holding_end); + const endStr = endTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }); + + // Sestavit detailní tooltip s tabulkou (zmenšená šířka aby se vešla) + let tooltipHTML = '
'; + tooltipHTML += '🔋 Plán balancování'; + + // Sekce: Příprava (nabíjení) + if (chargingIntervals.length > 0) { + tooltipHTML += '
'; + tooltipHTML += '
📊 Příprava (nabíjení na 100%)
'; + tooltipHTML += ''; + + // Formátovat intervaly s datem (dnes/zítra) + const now = new Date(); + const todayDate = now.getDate(); + const chargingTimes = chargingIntervals.map(t => { + const time = new Date(t); + const timeStr = time.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }); + const isTomorrow = time.getDate() !== todayDate; + return isTomorrow ? `zítra ${timeStr}` : timeStr; + }); + + // Rozdělit intervaly pod sebe pro lepší čitelnost + tooltipHTML += ''; + tooltipHTML += ``; + tooltipHTML += ''; + tooltipHTML += ``; + tooltipHTML += '
Intervaly:${chargingTimes.join('
')}
Průměrná cena:${chargingAvgPrice.toFixed(2)} Kč/kWh
'; + tooltipHTML += '
'; + } + + // Sekce: Balancování (držení) + tooltipHTML += '
'; + tooltipHTML += '
⚡ Balancování (držení na 100%)
'; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ``; + tooltipHTML += ''; + tooltipHTML += ``; + tooltipHTML += ''; + tooltipHTML += ``; + tooltipHTML += '
Začátek:${startStr}
Konec:${endStr}
Délka:${attrs.config?.hold_hours ?? 3} hodiny
'; + tooltipHTML += '
'; + + // Sekce: Náklady (pokud jsou k dispozici) + if (costSelected !== null && costSelected !== undefined) { + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ''; + tooltipHTML += ``; + if (costImmediate !== null) { + tooltipHTML += ''; + tooltipHTML += ``; + } + if (costSavings !== null && costSavings > 0) { + tooltipHTML += ''; + tooltipHTML += ``; + } + tooltipHTML += ''; + tooltipHTML += '
💰 Náklady
Vybraný plán:${costSelected !== null ? costSelected.toFixed(2) : '--'} Kč
Okamžitě:${costImmediate.toFixed(2)} Kč
Úspora:${costSavings.toFixed(2)} Kč
'; + } + + tooltipHTML += '
'; + + plannedTimeShort.textContent = `dnes ${startStr}`; + plannedTimeShort.setAttribute('data-tooltip-html', tooltipHTML); + + // Zobrazení nákladů + if (costSelected !== null) { + // Použít cost tracking data z balancing senzoru + costValueShort.textContent = `${costSelected.toFixed(1)} Kč`; + if (costSavings !== null && costSavings > 0) { + costValueShort.textContent += ` (-${costSavings.toFixed(1)} Kč)`; + costValueShort.title = `Vybraná cena: ${costSelected.toFixed(2)} Kč\nÚspora oproti okamžitému: ${costSavings.toFixed(2)} Kč`; + costValueShort.style.color = '#4CAF50'; // Zelená = úspora + } else { + costValueShort.title = `Odhadované náklady: ${costSelected.toFixed(2)} Kč`; + costValueShort.style.color = 'var(--text-primary)'; + } + } else { + // Fallback odhad + console.warn('[Balancing] No balancing_cost in forecast, using estimate'); + const avgPrice = planned.avg_price_czk ?? 0; + const holdHours = holdingHours; + const estimatedCost = avgPrice * holdHours * 0.7; + costValueShort.textContent = `~${estimatedCost.toFixed(1)} Kč`; + costValueShort.title = 'Odhad (přesné náklady nejsou k dispozici)'; + costValueShort.style.color = 'var(--text-primary)'; + } + } else if (plannedShort) { + // Skrýt plánovanou řádku + plannedShort.style.display = 'none'; + if (costValueShort) costValueShort.textContent = '--'; + } + + // Update timeline bar + const timelineBar = document.getElementById('balancing-timeline-bar'); + const timelineLabel = document.getElementById('balancing-timeline-label'); + + if (timelineBar && timelineLabel && daysSince !== null) { + const progressPercent = Math.min(100, (daysSince / intervalDays) * 100); + + timelineBar.style.width = `${progressPercent}%`; + timelineBar.style.background = `linear-gradient(90deg, ${statusColor} 0%, ${statusColor}aa 100%)`; + + timelineLabel.textContent = `${daysSince}/${intervalDays} dní`; + } + + // Re-inicializovat tooltips aby fungovaly na dynamicky přidaných elementech + if (typeof initTooltips === 'function') { + initTooltips(); + } + + // NOVÉ: Aktualizovat baterie balancing indikátor + updateBatteryBalancingIndicator(currentState, timeRemaining, costSelected); + + } catch (error) { + console.error('[Balancing] Error updating battery balancing card:', error); + } +} + +/** + * Aktualizuje indikátor balancování baterie v boxu baterie + * @param {string} state - Aktuální stav: 'charging', 'balancing', 'planned', 'standby' + * @param {string} timeRemaining - Zbývající čas ve formátu HH:MM + * @param {number|null} costSelected - Celkové náklady balancování + */ +function updateBatteryBalancingIndicator(state, timeRemaining, costSelected) { + const indicator = document.getElementById('battery-balancing-indicator'); + const icon = document.getElementById('balancing-icon'); + const text = document.getElementById('balancing-text'); + + if (!indicator || !icon || !text) return; + + // Zobrazit indikátor jen během aktivního balancování + if (state === 'charging' || state === 'balancing') { + indicator.style.display = 'flex'; + + // Ikona podle stavu + if (state === 'charging') { + icon.textContent = '⚡'; + text.textContent = 'Nabíjení...'; + indicator.className = 'battery-balancing-indicator charging'; + } else if (state === 'balancing') { + icon.textContent = '⏸️'; + text.textContent = 'Balancuje...'; + indicator.className = 'battery-balancing-indicator holding'; + } + + // Sestavit tooltip s detaily + let tooltipHtml = '
'; + tooltipHtml += '🔋 Balancování baterie

'; + + if (state === 'charging') { + tooltipHtml += 'Fáze: Nabíjení baterie
'; + tooltipHtml += 'Baterie se nabíjí před vyvažováním článků

'; + } else { + tooltipHtml += 'Fáze: Držení (balancování)
'; + tooltipHtml += 'Články baterie se vyvažují na stejnou úroveň

'; + } + + if (timeRemaining) { + tooltipHtml += `⏱️ Zbývá: ${timeRemaining}
`; + } + + if (costSelected !== null && costSelected !== undefined) { + tooltipHtml += `
💰 Náklady: ${costSelected.toFixed(2)} Kč
`; + } + + tooltipHtml += '
ℹ️ Balancování prodlužuje životnost baterie tím, že vyrovná napětí všech článků'; + tooltipHtml += '
'; + + indicator.setAttribute('data-tooltip-html', tooltipHtml); + + } else { + // Skrýt indikátor pokud není aktivní balancování + indicator.style.display = 'none'; + } + + // Reinicializovat tooltips + if (typeof initTooltips === 'function') { + initTooltips(); + } +} + +function showGridChargingPopup() { + getSensorString(getSensorId('grid_charging_planned')).then(gridChargingData => { + if (!gridChargingData.attributes || !gridChargingData.attributes.charging_blocks) { + showDialog('Plánované nabíjení ze sítě', 'Žádné bloky nejsou naplánovány.'); + return; + } + + const blocks = sortChargingBlocks(gridChargingData.attributes.charging_blocks); + const totalEnergy = gridChargingData.attributes.total_energy_kwh || 0; + const totalCost = gridChargingData.attributes.total_cost_czk || 0; + const planWindow = formatPlanWindow(blocks); + + // Build table HTML + let tableHtml = ` +
+
+ Období: ${planWindow || '--'}
+ Celková energie: ${totalEnergy.toFixed(2)} kWh
+ Celková cena: ~${totalCost.toFixed(2)} Kč +
+ + + + + + + + + + + + `; + + blocks.forEach((block, index) => { + const rowBg = index % 2 === 0 ? 'var(--bg-tertiary)' : 'transparent'; + const batteryStart = Number(block.battery_start_kwh); + const batteryEnd = Number(block.battery_end_kwh); + const batteryChange = Number.isFinite(batteryStart) && Number.isFinite(batteryEnd) + ? `${batteryStart.toFixed(1)} → ${batteryEnd.toFixed(1)} kWh` + : '--'; + const energyValue = getBlockEnergyKwh(block); + const energyText = energyValue.toFixed(2) + ' kWh'; + const avgPriceValue = Number(block.avg_spot_price_czk) || 0; + const avgPriceText = avgPriceValue > 0 ? avgPriceValue.toFixed(2) + ' Kč/kWh' : '—'; + const costValue = Number(block.total_cost_czk) || 0; + const costText = costValue.toFixed(2) + ' Kč'; + const intervalCount = Number(block.interval_count) || 0; + const intervalInfo = intervalCount > 0 ? `${intervalCount}× 15min` : ' '; + const blockDay = getDayLabel(block.day); + const daySuffix = blockDay ? ` (${blockDay})` : ''; + + tableHtml += ` + + + + + + + + `; + }); + + tableHtml += ` + +
ČasEnergie∅ CenaNákladyBaterie
+ ${block.time_from} - ${block.time_to}${daySuffix}
+ ${intervalInfo} +
${energyText}${avgPriceText}${costText} + ${batteryChange} +
+
+ `; + + showDialog('⚡ Plánované nabíjení ze sítě', tableHtml); + }); +} + +// Dialog functions (stubs - to be implemented or removed) +function openGridChargingDialog() { + console.log('[GridCharging] openGridChargingDialog - not implemented'); +} + +function closeGridChargingDialog() { + console.log('[GridCharging] closeGridChargingDialog - not implemented'); +} + +function renderGridChargingDialog() { + console.log('[GridCharging] renderGridChargingDialog - not implemented'); + return ''; +} + +function selectTimeBlock() { + console.log('[GridCharging] selectTimeBlock - not implemented'); +} + +function deselectTimeBlock() { + console.log('[GridCharging] deselectTimeBlock - not implemented'); +} + +function clearAllBlocks() { + console.log('[GridCharging] clearAllBlocks - not implemented'); +} + +function saveGridChargingPlan() { + console.log('[GridCharging] saveGridChargingPlan - not implemented'); +} + + +// Export grid charging functions +window.DashboardGridCharging = { + openGridChargingDialog, + closeGridChargingDialog, + renderGridChargingDialog, + selectTimeBlock, + deselectTimeBlock, + clearAllBlocks, + saveGridChargingPlan, + init: function() { + console.log('[DashboardGridCharging] Initialized'); + } +}; + +console.log('[DashboardGridCharging] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/components/shield.js b/custom_components/oig_cloud/www/js/components/shield.js new file mode 100644 index 00000000..01c6a54a --- /dev/null +++ b/custom_components/oig_cloud/www/js/components/shield.js @@ -0,0 +1,1902 @@ +/* eslint-disable */ +// === SHIELD INTEGRATION FUNCTIONS === + +// Debouncing timers (only for shield-specific functions) +let shieldMonitorTimer = null; +let timelineRefreshTimer = null; + +// Debounced shield monitor - prevents excessive calls when shield sensors change rapidly +function debouncedShieldMonitor() { + try { + if (shieldMonitorTimer) clearTimeout(shieldMonitorTimer); + } catch (e) { } + try { + shieldMonitorTimer = setTimeout(() => { + monitorShieldActivity(); + updateShieldQueue(); + updateShieldUI(); + updateButtonStates(); + }, 100); // Wait 100ms before executing (shorter delay for responsive UI) + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + shieldMonitorTimer = null; + } +} + +// Debounced timeline refresh - for Today Plan Tile updates +function debouncedTimelineRefresh() { + try { + if (timelineRefreshTimer) clearTimeout(timelineRefreshTimer); + } catch (e) { } + try { + timelineRefreshTimer = setTimeout(() => { + window.DashboardTimeline?.buildExtendedTimeline?.(); + }, 300); // Wait 300ms before executing + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + timelineRefreshTimer = null; + } +} + +// Subscribe to shield status changes +function subscribeToShield() { + const hass = getHass(); + if (!hass) { + console.warn('Cannot subscribe to shield - no HA connection'); + return; + } + + console.log('[Shield] Subscribing to state changes...'); + + try { + // IMPORTANT: Do NOT create extra `subscribeEvents('state_changed')` subscriptions here. + // Mobile Safari / HA app can fall behind and HA will stop sending after 4096 pending messages. + const watcher = window.DashboardStateWatcher; + if (!watcher) { + console.warn('[Shield] StateWatcher not available yet, retrying...'); + setTimeout(subscribeToShield, 500); + return; + } + + // Start watcher (idempotent) + watcher.start({ + intervalMs: 1000, + prefixes: [ + `sensor.oig_${INVERTER_SN}_`, + ], + }); + + // Prevent duplicate callback registrations + if (!window.__oigShieldWatcherUnsub) { + const lastPricingPayload = new Map(); // entityId -> stable signature for skip logic + + window.__oigShieldWatcherUnsub = watcher.onEntityChange((entityId, newState) => { + if (!entityId) return; + + // Shield status sensors + if (entityId.includes('service_shield_')) { + debouncedShieldMonitor(); + } + + // Target state sensors (box mode, boiler mode, grid delivery) + if (entityId.includes('box_prms_mode') || + entityId.includes('boiler_manual_mode') || + entityId.includes('invertor_prms_to_grid') || + entityId.includes('invertor_prm1_p_max_feed_grid')) { + debouncedShieldMonitor(); + } + + // Data sensors - trigger loadData() on changes + if (entityId.includes('actual_pv') || // Solar power + entityId.includes('actual_batt') || // Battery power + entityId.includes('actual_aci_wtotal') || // Grid power + entityId.includes('actual_aco_p') || // House power + entityId.includes('boiler_current_cbb_w') || // Boiler power + entityId.includes('extended_battery_soc') || // Battery SOC + entityId.includes('extended_battery_voltage') || // Battery voltage + entityId.includes('box_temp') || // Inverter temp + entityId.includes('bypass_status') || // Bypass status + entityId.includes('chmu_warning_level') || // ČHMÚ weather warning + entityId.includes('battery_efficiency') || // Battery efficiency stats + entityId.includes('real_data_update')) { // Real data update + debouncedLoadData(); + } + + // Detail sensors - trigger loadNodeDetails() on changes + if (entityId.includes('dc_in_fv_p') || // Solar strings + entityId.includes('extended_fve_') || // Solar voltage/current + entityId.includes('computed_batt_') || // Battery energy + entityId.includes('ac_in_') || // Grid details + entityId.includes('ac_out_') || // House phases + entityId.includes('spot_price') || // Grid pricing + entityId.includes('current_tariff') || // Tariff + entityId.includes('grid_charging_planned') || // Grid charging plan + entityId.includes('battery_balancing') || // Battery balancing plan + entityId.includes('notification_count')) { // Notifications + debouncedLoadNodeDetails(); + } + + // Pricing chart sensors - trigger loadPricingData() on changes + if (entityId.includes('_spot_price_current_15min') || // Spot prices + entityId.includes('_export_price_current_15min') || // Export prices + entityId.includes('_solar_forecast') || // Solar forecast + entityId.includes('_battery_forecast')) { // Battery forecast + + if (entityId.includes('_battery_forecast')) { + debouncedTimelineRefresh(); + } + + // Skip if payload didn't actually change (rough equivalent of old_state/new_state compare) + if (newState) { + let sig = ''; + try { + sig = `${newState.state}|${JSON.stringify(newState.attributes || {})}`; + } catch (e) { + sig = `${newState.state}`; + } + const prev = lastPricingPayload.get(entityId); + if (prev === sig) return; + lastPricingPayload.set(entityId, sig); + } + + if (typeof window.invalidatePricingTimelineCache === 'function') { + window.invalidatePricingTimelineCache(); + } + + debouncedLoadPricingData(); + + if (entityId.includes('_battery_forecast')) { + debouncedUpdatePlannedConsumption(); + } + } + }); + } + + // Subscribe to theme changes (HA events) + hass.connection.subscribeEvents((event) => { + console.log('[Theme] HA theme event:', event); + detectAndApplyTheme(); + }, 'themes_updated'); + + // Subscribe to frontend set theme event + hass.connection.subscribeEvents((event) => { + console.log('[Theme] Frontend theme changed:', event); + detectAndApplyTheme(); + }, 'frontend_set_theme'); + + // Subscribe to connection state changes (reconnect after HA restart) + hass.connection.addEventListener('ready', () => { + console.log('[Connection] WebSocket reconnected - refreshing all data'); + forceFullRefresh(); + }); + + hass.connection.addEventListener('disconnected', () => { + console.warn('[Connection] WebSocket disconnected'); + }); + + console.log('[Shield] Successfully subscribed to state changes'); + } catch (e) { + console.error('[Shield] Failed to subscribe:', e); + } +} + +// Parse shield activity to get pending tasks +function parseShieldActivity(activity) { + // activity = "set_box_mode: Home 5" or "Idle" or "nečinný" or null + if (!activity || + activity === 'Idle' || + activity === 'idle' || + activity === 'nečinný' || + activity === 'Nečinný') { + return null; + } + + const separatorIndex = activity.indexOf(':'); + if (separatorIndex === -1) { + // Don't warn for known idle states + if (!['idle', 'Idle', 'nečinný', 'Nečinný'].includes(activity)) { + console.warn('[Shield] Cannot parse activity:', activity); + } + return null; + } + + const service = activity.slice(0, separatorIndex).trim(); + const target = activity.slice(separatorIndex + 1).trim(); + if (!service || !target) { + return null; + } + + return { + service: service, // "set_box_mode" + target: target // "Home 5" + }; +} + +// Update shield UI (global status bar) +async function updateShieldUI() { + try { + const statusEl = document.getElementById('shield-global-status'); + if (!statusEl) return; + + // Get shield sensors (use dynamic lookup for queue and activity) + const shieldStatus = await getSensor(getSensorId('service_shield_status')); + const shieldQueue = await getSensor(findShieldSensorId('service_shield_queue')); + const shieldActivity = await getSensor(findShieldSensorId('service_shield_activity')); + + const status = shieldStatus.value || 'Idle'; + const queueCount = parseInt(shieldQueue.value) || 0; + const activity = shieldActivity.value || 'Idle'; + + console.log('[Shield] Status:', status, 'Queue:', queueCount, 'Activity:', activity); + + // Update status bar based on state + if (status === 'Running' || status === 'running') { + statusEl.innerHTML = `🔄 Zpracovává: ${activity}`; + statusEl.className = 'shield-status processing'; + } else if (queueCount > 0) { + const plural = queueCount === 1 ? 'úkol' : queueCount < 5 ? 'úkoly' : 'úkolů'; + statusEl.innerHTML = `⏳ Ve frontě: ${queueCount} ${plural}`; + statusEl.className = 'shield-status pending'; + } else { + statusEl.innerHTML = `✓ Připraveno`; + statusEl.className = 'shield-status idle'; + } + } catch (e) { + console.error('[Shield] Error updating shield UI:', e); + } +} + +// Update button states based on shield status +async function updateButtonStates() { + try { + // console.log('[Shield] Updating button states...'); + + // Get shield sensors (string values for status/activity, use dynamic lookup) + const shieldStatus = await getSensorString(getSensorId('service_shield_status')); + const shieldQueue = await getSensor(findShieldSensorId('service_shield_queue')); + const shieldActivity = await getSensorString(findShieldSensorId('service_shield_activity')); + + // Get current states (string values) + const boxMode = await getSensorString(getSensorId('box_prms_mode')); + const boilerMode = await getSensorStringSafe(getSensorId('boiler_manual_mode')); + + // Parse shield activity + const pending = parseShieldActivity(shieldActivity.value); + const isRunning = (shieldStatus.value === 'Running' || shieldStatus.value === 'running'); + + // console.log('[Shield] Parsed state:', { + // pending, + // isRunning, + // queueCount, + // boxMode: boxMode.value, + // boilerMode: boilerMode.value + // }); + + // Update Box Mode buttons + updateBoxModeButtons(boxMode.value, pending, isRunning); + + // Update Boiler Mode buttons + updateBoilerModeButtons(boilerMode.value, pending, isRunning); + + // Update Grid Delivery buttons + await updateGridDeliveryButtons(pending, isRunning); + + // Update Battery Formating buttons + await updateBatteryFormatingButtons(pending, isRunning); + + } catch (e) { + console.error('[Shield] Error updating button states:', e); + } +} + +// Update Box Mode buttons +function updateBoxModeButtons(currentMode, pending, isRunning) { + const modes = ['Home 1', 'Home 2', 'Home 3', 'Home UPS']; + const buttonIds = { + 'Home 1': 'btn-mode-home1', + 'Home 2': 'btn-mode-home2', + 'Home 3': 'btn-mode-home3', + 'Home UPS': 'btn-mode-ups' + }; + + modes.forEach(mode => { + const btn = document.getElementById(buttonIds[mode]); + if (!btn) return; + + // Reset classes + btn.classList.remove('active', 'pending', 'processing', 'disabled-by-service'); + + // OPRAVA: Zamknout VŠECHNA tlačítka pokud běží set_box_mode (nezávisle na target) + if (pending && pending.service === 'set_box_mode') { + btn.disabled = true; + // Pokud je tento mode cílový, zobraz jako processing/pending + if (pending.target === mode) { + btn.classList.add(isRunning ? 'processing' : 'pending'); + // console.log(`[Shield] Button ${mode} -> ${isRunning ? 'processing' : 'pending'} (target)`); + } else { + // Ostatní tlačítka jen zamknout + btn.classList.add('disabled-by-service'); + // console.log(`[Shield] Button ${mode} -> disabled (service running)`); + } + } + // Check if this is current mode (exact match) + else { + btn.disabled = false; + if (currentMode === mode) { + btn.classList.add('active'); + // console.log(`[Shield] Button ${mode} -> active (currentMode: ${currentMode})`); + } + } + }); + + // Update status text + const statusEl = document.getElementById('box-mode-status'); + if (!statusEl) return; + + if (pending && pending.service === 'set_box_mode') { + const arrow = isRunning ? '🔄' : '⏳'; + statusEl.innerHTML = `${currentMode} ${arrow} ${pending.target}`; + } else { + statusEl.textContent = currentMode || '--'; + } +} + +// Update Boiler Mode buttons +function updateBoilerModeButtons(currentModeRaw, pending, isRunning) { + // boiler_manual_mode sensor: "CBB" = CBB, "Manuální" = Manual + const currentMode = currentModeRaw === 'Manuální' ? 'Manual' : 'CBB'; + const modes = ['CBB', 'Manual']; + + modes.forEach(mode => { + const btnId = `btn-boiler-${mode.toLowerCase()}`; + const btn = document.getElementById(btnId); + if (!btn) return; + + // Reset classes + btn.classList.remove('active', 'pending', 'processing', 'disabled-by-service'); + + // OPRAVA: Zamknout VŠECHNA tlačítka pokud běží set_boiler_mode (nezávisle na target) + if (pending && pending.service === 'set_boiler_mode') { + btn.disabled = true; + // Pokud je tento mode cílový, zobraz jako processing/pending + if (pending.target === mode) { + btn.classList.add(isRunning ? 'processing' : 'pending'); + // console.log(`[Shield] Boiler ${mode} -> ${isRunning ? 'processing' : 'pending'} (target)`); + } else { + // Ostatní tlačítka jen zamknout + btn.classList.add('disabled-by-service'); + // console.log(`[Shield] Boiler ${mode} -> disabled (service running)`); + } + } + // Check if active + else { + btn.disabled = false; + if (currentMode === mode) { + btn.classList.add('active'); + // console.log(`[Shield] Boiler ${mode} -> active`); + } + } + }); + + // Update status + const statusEl = document.getElementById('boiler-mode-status'); + if (!statusEl) return; + + if (pending && pending.service === 'set_boiler_mode') { + const arrow = isRunning ? '🔄' : '⏳'; + statusEl.innerHTML = `${currentMode} ${arrow} ${pending.target}`; + } else { + statusEl.textContent = currentMode; + } +} + +// Update Grid Delivery buttons +async function updateGridDeliveryButtons(pending, isRunning) { + try { + // Get current grid delivery mode (string) and limit (number) + const gridModeData = await getSensorString(getSensorId('invertor_prms_to_grid')); + const gridLimitData = await getSensor(getSensorId('invertor_prm1_p_max_feed_grid')); + + const currentMode = gridModeData.value || ''; + const currentLimit = gridLimitData.value || 0; + const isChanging = currentMode === 'Probíhá změna'; + + // console.log('[Shield] Grid delivery - mode:', currentMode, 'limit:', currentLimit, 'isChanging:', isChanging); + + // Update mode buttons + // Sensor vrací: "Vypnuto", "Zapnuto", "Omezeno" (nebo "Probíhá změna") + // Mapování sensor hodnota -> button label + const modeMapping = { + 'Vypnuto': 'Vypnuto / Off', + 'Zapnuto': 'Zapnuto / On', + 'Omezeno': 'S omezením / Limited' + }; + + const modeButtons = { + 'Vypnuto / Off': 'btn-grid-off', + 'Zapnuto / On': 'btn-grid-on', + 'S omezením / Limited': 'btn-grid-limited' + }; + + // Zjistit jaký button label odpovídá current mode + const currentModeLabel = modeMapping[currentMode] || currentMode; + + Object.entries(modeButtons).forEach(([mode, btnId]) => { + const btn = document.getElementById(btnId); + if (!btn) return; + + btn.classList.remove('active', 'pending', 'processing'); + + // If "Probíhá změna", disable all buttons and show processing on all + if (isChanging) { + btn.disabled = true; + btn.classList.add('processing'); + // console.log(`[Shield] Grid ${mode} -> disabled (změna probíhá)`); + return; + } + + // OPRAVA: Zamknout VŠECHNA tlačítka pokud běží set_grid_delivery (nezávisle na target) + if (pending && pending.service === 'set_grid_delivery') { + btn.disabled = true; + + // Pokud pending target je číslo (limit change), animuj tlačítko "S omezením" + const isLimitChange = !isNaN(parseInt(pending.target)); + const isTargetButton = isLimitChange + ? btnId === 'btn-grid-limited' // Při změně limitu animuj "S omezením" + : pending.target && pending.target.includes(mode.split(' ')[0]); // Při změně mode animuj odpovídající tlačítko + + if (isTargetButton) { + btn.classList.add(isRunning ? 'processing' : 'pending'); + // console.log(`[Shield] Grid ${mode} -> ${isRunning ? 'processing' : 'pending'} (target)`); + } else { + // Ostatní tlačítka jen zamknout, nezobrazovat jako pending + btn.classList.add('disabled-by-service'); + // console.log(`[Shield] Grid ${mode} -> disabled (service running)`); + } + } + // Check if active (porovnat label s currentModeLabel) + else { + btn.disabled = false; + if (mode === currentModeLabel) { + btn.classList.add('active'); + // console.log(`[Shield] Grid ${mode} -> active (currentMode: ${currentMode})`); + } + } + }); + + // Update limit display + const inputEl = document.getElementById('grid-limit'); + if (inputEl) { + // If pending limit change, show target value with highlight + if (pending && pending.service === 'set_grid_delivery' && !isNaN(parseInt(pending.target))) { + inputEl.value = pending.target; + inputEl.style.borderColor = isRunning ? '#42a5f5' : '#ffc107'; + } + // Otherwise show current limit + else { + inputEl.value = currentLimit; + inputEl.style.borderColor = ''; + } + } + + } catch (e) { + console.error('[Shield] Error updating grid delivery buttons:', e); + } +} + +// Update Battery Formating button (charge-battery-btn) +async function updateBatteryFormatingButtons(pending, isRunning) { + try { + const chargeBtn = document.getElementById('charge-battery-btn'); + if (!chargeBtn) return; + + // Pokud je pending task pro battery formating + if (pending && pending.service === 'set_formating_mode') { + chargeBtn.classList.remove('pending', 'processing'); + chargeBtn.classList.add(isRunning ? 'processing' : 'pending'); + // console.log(`[Shield] Battery charging -> ${pending.target} (${isRunning ? 'processing' : 'pending'})`); + } else { + chargeBtn.classList.remove('pending', 'processing'); + } + + } catch (e) { + console.error('[Shield] Error updating battery formating buttons:', e); + } +} + +// Open entity more-info dialog +function openEntityDialog(entityId) { + const hass = getHass(); + if (!hass) { + console.error('Cannot open entity dialog - no HA connection'); + return; + } + + try { + const event = new Event('hass-more-info', { + bubbles: true, + composed: true + }); + event.detail = { entityId: entityId }; + parent.document.querySelector('home-assistant').dispatchEvent(event); + console.log(`[Entity] Opened dialog for ${entityId}`); + } catch (e) { + console.error(`[Entity] Failed to open dialog for ${entityId}:`, e); + } +} + +// Call HA service +async function callService(domain, service, data) { + console.log(`[Service] Calling ${domain}.${service} with data:`, JSON.stringify(data)); + const hass = getHass(); + if (!hass) { + console.error('[Service] Failed to get hass object'); + window.DashboardUtils?.showNotification('Chyba', 'Nelze získat připojení k Home Assistant', 'error'); + return false; + } + + try { + console.log(`[Service] Executing ${domain}.${service}...`); + await hass.callService(domain, service, data); + console.log(`[Service] ✅ Success: ${domain}.${service}`); + + // Shield queue will be updated automatically via WebSocket event (sensor state change) + // No need to manually trigger update here - backend callback handles it instantly + + return true; + } catch (e) { + console.error(`[Service] ❌ Error calling ${domain}.${service}:`, e); + console.error('[Service] Error details:', e.message, e.stack); + window.DashboardUtils?.showNotification('Chyba', e.message || 'Volání služby selhalo', 'error'); + return false; + } +} + +// Track mode change state +let modeChangeInProgress = false; +let lastModeChangeNotified = false; + +// Shield Queue live duration update +let shieldQueueUpdateInterval = null; + +function startShieldQueueLiveUpdate() { + // Clear existing interval + if (shieldQueueUpdateInterval) { + clearInterval(shieldQueueUpdateInterval); + } + + // Update every second for live duration + shieldQueueUpdateInterval = setInterval(() => { + updateShieldQueue(); + }, 1000); +} + +function stopShieldQueueLiveUpdate() { + if (shieldQueueUpdateInterval) { + clearInterval(shieldQueueUpdateInterval); + shieldQueueUpdateInterval = null; + } +} + +// Update Shield Queue display +function updateShieldQueue() { + try { + // Use Hass states directly (instant, no API call needed!) + const hass = getHass(); + if (!hass || !hass.states) { + console.warn('[Queue] Hass not available'); + return; + } + + // Use helper function to find sensor (handles _2, _3 suffixes) + const entityId = findShieldSensorId('service_shield_activity'); + + if (!entityId) { + console.warn('[Queue] service_shield_activity sensor not found'); + return; + } + + const activitySensor = hass.states[entityId]; + const container = document.getElementById('shield-queue-container'); + + if (!activitySensor || !activitySensor.attributes || !container) { + console.warn('[Queue] Missing data:', { + sensor: entityId, + hasState: !!activitySensor, + hasAttrs: !!activitySensor?.attributes, + hasContainer: !!container + }); + return; + } + + const attrs = activitySensor.attributes; + const runningRequests = attrs.running_requests || []; + const queuedRequests = attrs.queued_requests || []; + const allRequests = [...runningRequests, ...queuedRequests]; + + if (allRequests.length === 0) { + container.innerHTML = '
✅ Fronta je prázdná
'; + stopShieldQueueLiveUpdate(); // Stop live updates when queue is empty + + // OPRAVA: Pokud je fronta prázdná, skryj všechny lístky (fallback, když monitor shieldu vynechá update) + ['box_mode', 'boiler_mode', 'grid_mode', 'grid_limit'].forEach((type) => hideChangingIndicator(type)); + return; + } + + // Start live duration updates when there are active requests + if (!shieldQueueUpdateInterval) { + startShieldQueueLiveUpdate(); + } + + // Build table + let html = ''; + html += ''; + html += ''; + + allRequests.forEach((req, index) => { + const isRunning = index === 0 && runningRequests.length > 0; + const isQueued = !isRunning; // Anything not running is queued + + // OPRAVA: Přidat position pro delete button (1-based index pro backend) + // Running má position 1, queued jsou 2, 3, 4, ... + req.position = index + 1; + + const statusClass = isRunning ? 'queue-status-running' : 'queue-status-queued'; + const statusIcon = isRunning ? '🔄' : '⏳'; + const statusText = isRunning ? 'Zpracovává se' : 'Čeká'; + + // Format service name to human-readable Czech + const serviceMap = { + 'set_box_mode': '🏠 Změna režimu boxu', + 'set_grid_delivery': '💧 Změna nastavení přetoků', + 'set_grid_delivery_limit': '🔢 Změna limitu přetoků', + 'set_boiler_mode': '🔥 Změna nastavení bojleru', + 'set_formating_mode': '🔋 Změna nabíjení baterie', + 'set_battery_capacity': '⚡ Změna kapacity baterie' + }; + let serviceName = serviceMap[req.service] || req.service || 'N/A'; + + // Format changes + let changes = 'N/A'; + if (req.changes && Array.isArray(req.changes) && req.changes.length > 0) { + changes = req.changes.map(ch => { + const arrowIndex = ch.indexOf('→'); + if (arrowIndex === -1) { + return ch; + } + const left = ch.slice(0, arrowIndex).trim(); + const right = ch.slice(arrowIndex + 1).trim(); + const colonIndex = left.indexOf(':'); + const fromRaw = colonIndex === -1 ? left : left.slice(colonIndex + 1); + + let from = fromRaw.replaceAll("'", '').trim(); + let to = right.replaceAll("'", '').trim(); + + // Mapování hodnot pro lepší čitelnost + const valueMap = { + 'CBB': 'Inteligentní', + 'Manual': 'Manuální', + 'Manuální': 'Manuální' + }; + + from = valueMap[from] || from; + to = valueMap[to] || to; + + return `${from} → ${to}`; + }).join('
'); + } + + // Format creation time and duration + let createdText = '--'; + let durationText = '--'; + + // Try multiple timestamp fields (started_at for running, queued_at for queued) + const timestamp = req.started_at || req.queued_at || req.created_at || req.timestamp || req.created; + + if (timestamp) { + try { + const createdDate = new Date(timestamp); + const now = new Date(); + const diffSec = Math.floor((now - createdDate) / 1000); + + // Format creation time (HH:MM) + const hours = String(createdDate.getHours()).padStart(2, '0'); + const minutes = String(createdDate.getMinutes()).padStart(2, '0'); + createdText = `${hours}:${minutes}`; + + // Add date if not today + const isToday = createdDate.toDateString() === now.toDateString(); + if (!isToday) { + const day = createdDate.getDate(); + const month = createdDate.getMonth() + 1; + createdText = `${day}.${month}. ${createdText}`; + } + + // Format duration (how long in queue) + if (diffSec < 60) { + durationText = `${diffSec}s`; + } else if (diffSec < 3600) { + const diffMin = Math.floor(diffSec / 60); + const diffSecRem = diffSec % 60; + durationText = `${diffMin}m ${diffSecRem}s`; + } else { + const diffHours = Math.floor(diffSec / 3600); + const diffMin = Math.floor((diffSec % 3600) / 60); + durationText = `${diffHours}h ${diffMin}m`; + } + } catch (e) { + console.warn('[Queue] Invalid timestamp format:', timestamp, e); + } + } else { + console.warn('[Queue] No timestamp found in request:', req); + } + + html += ` + + + + + + + + + `; + }); + + html += '
StavSlužbaZměnyVytvořenoTrváníAkce
${statusIcon} ${statusText}${serviceName}${changes}${createdText}${durationText} + ${isQueued ? ` + + ` : ''} +
'; + container.innerHTML = html; + + } catch (e) { + console.error('[Queue] Error updating queue display:', e); + } +} + +// ============================================================================ +// SHIELD MONITORING - Simplified universal approach +// ============================================================================ + +// Helper: Parse service request to get type and target value +function parseServiceRequest(request) { + if (!request || !request.service) { + return null; + } + + const service = request.service; + + // NOVÝ PŘÍSTUP: Použij strukturovaná data z targets[] místo parsování changes[] + if (request.targets && Array.isArray(request.targets) && request.targets.length > 0) { + const target = request.targets[0]; + + // Mapování param → type + if (service.includes('set_box_mode') && target.param === 'mode') { + return { type: 'box_mode', targetValue: target.value }; + } + + if (service.includes('set_boiler_mode') && target.param === 'mode') { + return { type: 'boiler_mode', targetValue: target.value }; + } + + if (service.includes('set_grid_delivery') && target.param === 'mode') { + return { type: 'grid_mode', targetValue: target.value }; + } + + if (service.includes('set_grid_delivery') && target.param === 'limit') { + return { type: 'grid_limit', targetValue: target.value }; + } + } + + // FALLBACK: Starý přístup pro kompatibilitu (pokud targets[] není dostupný) + if (!request.changes || !Array.isArray(request.changes)) { + return null; + } + + const changeStr = request.changes[0] || ''; + + // Box mode: "prms_mode: 'Home 1' → 'Home 2'" + if (service.includes('set_box_mode')) { + const match = changeStr.match(/→\s*'([^']+)'/); + return match ? { type: 'box_mode', targetValue: match[1] } : null; + } + + // Boiler mode: "manual_mode: 'CBB' → 'Manuální'" + if (service.includes('set_boiler_mode')) { + const match = changeStr.match(/→\s*'([^']+)'/); + return match ? { type: 'boiler_mode', targetValue: match[1] } : null; + } + + // Grid mode: "prms_to_grid: 'Vypnuto' → 'Zapnuto'" + if (service.includes('set_grid_delivery') && changeStr.includes('prms_to_grid')) { + const match = changeStr.match(/→\s*'([^']+)'/); + return match ? { type: 'grid_mode', targetValue: match[1] } : null; + } + + // Grid limit: "p_max_feed_grid: 5400 → 3000" + if (service.includes('set_grid_delivery') && changeStr.includes('p_max_feed_grid')) { + const match = changeStr.match(/→\s*(\d+)/); + return match ? { type: 'grid_limit', targetValue: match[1] } : null; + } + + return null; +} + +// Helper: Show changing indicator for specific service type +function showChangingIndicator(type, targetValue, startedAt = null) { + // console.log(`[Shield] Showing change indicator: ${type} → ${targetValue} (started: ${startedAt})`); + + switch (type) { + case 'box_mode': + showBoxModeChanging(targetValue); + break; + case 'boiler_mode': + showBoilerModeChanging(targetValue); + break; + case 'grid_mode': + showGridModeChanging(targetValue, startedAt); + break; + case 'grid_limit': + showGridLimitChanging(targetValue, startedAt); + break; + } +} + +// Helper: Hide changing indicator for specific service type +function hideChangingIndicator(type) { + // console.log(`[Shield] Hiding change indicator: ${type}`); + + switch (type) { + case 'box_mode': + hideBoxModeChanging(); + break; + case 'boiler_mode': + hideBoilerModeChanging(); + break; + case 'grid_mode': + hideGridModeChanging(); + break; + case 'grid_limit': + hideGridLimitChanging(); + break; + } +} + +// Main monitor function - simplified +let isMonitoringShieldActivity = false; + +async function monitorShieldActivity() { + if (isMonitoringShieldActivity) { + // console.log('[Shield] Skipping - already running'); + return; + } + + isMonitoringShieldActivity = true; + + try { + const hass = getHass(); + if (!hass || !hass.states) return; + + // Find activity sensor + const sensorPrefix = `sensor.oig_${INVERTER_SN}_service_shield_activity`; + const entityId = Object.keys(hass.states).find(id => id.startsWith(sensorPrefix)); + if (!entityId) return; + + const activitySensor = hass.states[entityId]; + if (!activitySensor || !activitySensor.attributes) return; + + const attrs = activitySensor.attributes; + const runningRequests = attrs.running_requests || []; + const queuedRequests = attrs.queued_requests || []; + const allRequests = [...runningRequests, ...queuedRequests]; + + // console.log('[Shield] Monitoring:', { + // running: runningRequests.length, + // queued: queuedRequests.length, + // total: allRequests.length + // }); + + // Track which service types mají aktivní indikátor + const activeServices = new Set(); + + const processRequestList = (requests, { allowIfActive } = { allowIfActive: false }) => { + requests.forEach((request) => { + const parsed = parseServiceRequest(request); + if (!parsed) { + return; + } + if (!allowIfActive && activeServices.has(parsed.type)) { + return; + } + activeServices.add(parsed.type); + showChangingIndicator(parsed.type, parsed.targetValue, request.started_at || request.queued_at || request.created_at || null); + }); + }; + + // Priorita: běžící requesty → teprve potom čekající (pokud pro daný typ nic neběží) + processRequestList(runningRequests, { allowIfActive: false }); + processRequestList(queuedRequests, { allowIfActive: false }); + + // Hide indicators for service types that are no longer active + const allServiceTypes = ['box_mode', 'boiler_mode', 'grid_mode', 'grid_limit']; + allServiceTypes.forEach(type => { + if (!activeServices.has(type)) { + hideChangingIndicator(type); + } + }); + + } catch (e) { + console.error('[Shield] Error monitoring activity:', e); + } finally { + isMonitoringShieldActivity = false; + } +} + +// ============================================================================ +// SERVICE-SPECIFIC SHOW/HIDE FUNCTIONS +// ============================================================================ + +// Box Mode +function showBoxModeChanging(targetMode) { + const modeButtonMap = { + 'Home 1': 'btn-mode-home1', + 'Home 2': 'btn-mode-home2', + 'Home 3': 'btn-mode-home3', + 'Home UPS': 'btn-mode-ups' + }; + + const buttonIds = Object.values(modeButtonMap); + const buttons = buttonIds.map(id => document.getElementById(id)).filter(b => b); + const targetButtonId = modeButtonMap[targetMode]; + + // Flow diagram: blink mode text + const inverterModeElement = document.getElementById('inverter-mode'); + if (inverterModeElement) { + inverterModeElement.classList.add('mode-changing'); + } + + // Show badge + const modeChangeIndicator = document.getElementById('mode-change-indicator'); + const modeChangeText = document.getElementById('mode-change-text'); + if (modeChangeIndicator && modeChangeText) { + modeChangeText.textContent = `→ ${targetMode}`; + modeChangeIndicator.style.display = 'flex'; + } + + // Lock buttons, animate target + buttons.forEach(btn => { + btn.disabled = true; + if (btn.id === targetButtonId) { + btn.style.animation = 'pulse-pending 1.5s ease-in-out infinite'; + btn.style.opacity = '0.8'; + } else { + btn.style.animation = ''; + btn.style.opacity = '0.5'; + } + }); +} + +function hideBoxModeChanging() { + const buttonIds = ['btn-mode-home1', 'btn-mode-home2', 'btn-mode-home3', 'btn-mode-ups']; + const buttons = buttonIds.map(id => document.getElementById(id)).filter(b => b); + + // Remove flow diagram animation + const inverterModeElement = document.getElementById('inverter-mode'); + if (inverterModeElement) { + inverterModeElement.classList.remove('mode-changing'); + } + + // Hide badge + const modeChangeIndicator = document.getElementById('mode-change-indicator'); + if (modeChangeIndicator) { + modeChangeIndicator.style.display = 'none'; + } + + // Unlock buttons + buttons.forEach(btn => { + btn.disabled = false; + btn.style.animation = ''; + btn.style.opacity = ''; + }); +} + +// Boiler Mode +function showBoilerModeChanging(targetMode) { + const boilerModeMap = { + 'CBB': 'cbb', + 'Manual': 'manual', + 'Manuální': 'manual', + 'Inteligentní': 'cbb' + }; + + const boilerButtons = [ + document.getElementById('btn-boiler-cbb'), + document.getElementById('btn-boiler-manual') + ].filter(b => b); + + const targetModeLower = boilerModeMap[targetMode] || targetMode?.toLowerCase(); + const targetButtonId = targetModeLower ? `btn-boiler-${targetModeLower}` : null; + + // Flow diagram: blink mode text + const boilerModeElement = document.getElementById('boiler-mode'); + if (boilerModeElement) { + boilerModeElement.classList.add('mode-changing'); + } + + // Show badge + const boilerChangeIndicator = document.getElementById('boiler-change-indicator'); + const boilerChangeText = document.getElementById('boiler-change-text'); + if (boilerChangeIndicator && boilerChangeText) { + const isIntelligent = targetMode === 'CBB' || targetMode === 'Inteligentní'; + const modeIcon = isIntelligent ? '🤖' : '👤'; + const modeName = isIntelligent ? 'Inteligentní' : 'Manuální'; + boilerChangeText.textContent = `${modeIcon} ${modeName}`; + boilerChangeIndicator.style.display = 'flex'; + } + + // Lock buttons, animate target + boilerButtons.forEach(btn => { + btn.disabled = true; + if (btn.id === targetButtonId) { + btn.style.animation = 'pulse-pending 1.5s ease-in-out infinite'; + btn.style.opacity = '0.8'; + } else { + btn.style.animation = ''; + btn.style.opacity = '0.5'; + } + }); +} + +function hideBoilerModeChanging() { + const boilerButtons = [ + document.getElementById('btn-boiler-cbb'), + document.getElementById('btn-boiler-manual') + ].filter(b => b); + + // Remove flow diagram animation + const boilerModeElement = document.getElementById('boiler-mode'); + if (boilerModeElement) { + boilerModeElement.classList.remove('mode-changing'); + } + + // Hide badge + const boilerChangeIndicator = document.getElementById('boiler-change-indicator'); + if (boilerChangeIndicator) { + boilerChangeIndicator.style.display = 'none'; + } + + // Unlock buttons + boilerButtons.forEach(btn => { + btn.disabled = false; + btn.style.animation = ''; + btn.style.opacity = ''; + }); +} + +// Grid Mode +function showGridModeChanging(targetMode, startedAt = null) { + const gridModeMap = { + 'Off': 'off', + 'Vypnuto': 'off', + 'On': 'on', + 'Zapnuto': 'on', + 'Limited': 'limited', + 'Omezeno': 'limited', + 'S omezením': 'limited' + }; + + const gridButtons = [ + document.getElementById('btn-grid-off'), + document.getElementById('btn-grid-on'), + document.getElementById('btn-grid-limited') + ].filter(b => b); + + const gridModeLower = gridModeMap[targetMode]; + const targetButtonId = gridModeLower ? `btn-grid-${gridModeLower}` : null; + + // Flow diagram: blink mode text + const gridExportModeElement = document.getElementById('inverter-grid-export-mode'); + if (gridExportModeElement) { + gridExportModeElement.classList.add('mode-changing'); + } + + // Show badge - bez duration! + const gridChangeIndicator = document.getElementById('grid-change-indicator'); + const gridChangeText = document.getElementById('grid-change-text'); + if (gridChangeIndicator && gridChangeText) { + const isOff = targetMode === 'Off' || targetMode === 'Vypnuto'; + const isOn = targetMode === 'On' || targetMode === 'Zapnuto'; + const modeIcon = isOff ? '🚫' : isOn ? '💧' : '🚰'; + const modeName = isOff ? 'Vypnuto' : isOn ? 'Zapnuto' : 'Omezeno'; + + gridChangeText.textContent = `${modeIcon} ${modeName}`; + gridChangeIndicator.style.display = 'flex'; + } + + // Lock buttons, animate target + gridButtons.forEach(btn => { + btn.disabled = true; + if (btn.id === targetButtonId) { + btn.style.animation = 'pulse-pending 1.5s ease-in-out infinite'; + btn.style.opacity = '0.8'; + } else { + btn.style.animation = ''; + btn.style.opacity = '0.5'; + } + }); +} + +function hideGridModeChanging() { + const gridButtons = [ + document.getElementById('btn-grid-off'), + document.getElementById('btn-grid-on'), + document.getElementById('btn-grid-limited') + ].filter(b => b); + + // Remove flow diagram animation + const gridExportModeElement = document.getElementById('inverter-grid-export-mode'); + if (gridExportModeElement) { + gridExportModeElement.classList.remove('mode-changing'); + } + + // Hide badge + const gridChangeIndicator = document.getElementById('grid-change-indicator'); + if (gridChangeIndicator) { + gridChangeIndicator.style.display = 'none'; + } + + // Unlock buttons + gridButtons.forEach(btn => { + btn.disabled = false; + btn.style.animation = ''; + btn.style.opacity = ''; + }); +} + +// Grid Limit +function showGridLimitChanging(targetLimit, startedAt = null) { + const gridButtons = [ + document.getElementById('btn-grid-off'), + document.getElementById('btn-grid-on'), + document.getElementById('btn-grid-limited') + ].filter(b => b); + + // When only limit changes, animate the Limited button + const targetButtonId = 'btn-grid-limited'; + + // Animate limit value in flow diagram + const gridLimitElement = document.getElementById('inverter-export-limit'); + if (gridLimitElement) { + gridLimitElement.classList.add('mode-changing'); + } + + // Show limit badge (different from mode badge) - bez duration! + const gridLimitIndicator = document.getElementById('grid-limit-indicator'); + const gridLimitText = document.getElementById('grid-limit-text'); + if (gridLimitIndicator && gridLimitText) { + gridLimitText.textContent = `→ ${targetLimit}W`; + gridLimitIndicator.style.display = 'flex'; + } + + // Lock buttons, animate Limited + gridButtons.forEach(btn => { + btn.disabled = true; + if (btn.id === targetButtonId) { + btn.style.animation = 'pulse-pending 1.5s ease-in-out infinite'; + btn.style.opacity = '0.8'; + } else { + btn.style.animation = ''; + btn.style.opacity = '0.5'; + } + }); +} + +function hideGridLimitChanging() { + const gridButtons = [ + document.getElementById('btn-grid-off'), + document.getElementById('btn-grid-on'), + document.getElementById('btn-grid-limited') + ].filter(b => b); + + // Remove limit value animation in flow diagram + const gridLimitElement = document.getElementById('inverter-export-limit'); + if (gridLimitElement) { + gridLimitElement.classList.remove('mode-changing'); + } + + // Hide limit badge + const gridLimitIndicator = document.getElementById('grid-limit-indicator'); + if (gridLimitIndicator) { + gridLimitIndicator.style.display = 'none'; + } + + // Unlock buttons (only if no mode change is active) + gridButtons.forEach(btn => { + btn.disabled = false; + btn.style.animation = ''; + btn.style.opacity = ''; + }); +} + +// ============================================================================ +// END OF SHIELD MONITORING +// ============================================================================ + +// Show grid delivery dialog with optional limit input +function showGridDeliveryDialog(mode, currentLimit) { + return new Promise((resolve) => { + const needsLimit = mode === 'S omezením / Limited'; + const modeDisplayName = mode === 'Vypnuto / Off' ? 'Vypnuto' : + mode === 'Zapnuto / On' ? 'Zapnuto' : + 'S omezením'; + const modeIcon = mode === 'Vypnuto / Off' ? '🚫' : + mode === 'Zapnuto / On' ? '💧' : '🚰'; + + // Create overlay + const overlay = document.createElement('div'); + overlay.className = 'ack-dialog-overlay'; + + // Create dialog + const dialog = document.createElement('div'); + dialog.className = 'ack-dialog'; + + const limitInputHtml = needsLimit ? ` +
+ + + Rozsah: 1-20000 W +
+ ` : ''; + + dialog.innerHTML = ` +
+ ${modeIcon} Změna dodávky do sítě +
+
+ Chystáte se změnit dodávku do sítě na: "${modeDisplayName}" +
+ ${limitInputHtml} +
+ ⚠️ Upozornění: ${needsLimit ? + 'Režim a limit budou změněny postupně (serializováno). Každá změna může trvat až 10 minut.' : + 'Změna režimu může trvat až 10 minut. Během této doby je systém v přechodném stavu.'} +
+
+ + +
+
+ + +
+ `; + + overlay.appendChild(dialog); + document.body.appendChild(overlay); + + const checkbox = dialog.querySelector('#ack-checkbox'); + const confirmBtn = dialog.querySelector('.btn-confirm'); + const cancelBtn = dialog.querySelector('.btn-cancel'); + const limitInput = dialog.querySelector('#grid-limit-input'); + + // Enable confirm button only when checkbox is checked + checkbox.addEventListener('change', () => { + confirmBtn.disabled = !checkbox.checked; + }); + + // Handle confirm + confirmBtn.addEventListener('click', () => { + if (checkbox.checked) { + let limit = null; + if (needsLimit && limitInput) { + limit = parseInt(limitInput.value); + if (isNaN(limit) || limit < 1 || limit > 20000) { + alert('Prosím zadejte platný limit mezi 1-20000 W'); + return; + } + } + document.body.removeChild(overlay); + resolve({ confirmed: true, mode, limit }); + } + }); + + // Handle cancel + cancelBtn.addEventListener('click', () => { + document.body.removeChild(overlay); + resolve({ confirmed: false }); + }); + + // Handle ESC key + const handleEsc = (e) => { + if (e.key === 'Escape') { + document.body.removeChild(overlay); + document.removeEventListener('keydown', handleEsc); + resolve({ confirmed: false }); + } + }; + document.addEventListener('keydown', handleEsc); + }); +} + +// Show acknowledgement dialog +function showAcknowledgementDialog(title, message, onConfirm) { + return new Promise((resolve) => { + // Create overlay + const overlay = document.createElement('div'); + overlay.className = 'ack-dialog-overlay'; + + // Create dialog + const dialog = document.createElement('div'); + dialog.className = 'ack-dialog'; + + dialog.innerHTML = ` +
+ ⚠️ ${title} +
+
+ ${message} +
+
+ ⚠️ Upozornění: Změna režimu může trvat až 10 minut. Během této doby je systém v přechodném stavu. +
+
+ + +
+
+ + +
+ `; + + overlay.appendChild(dialog); + document.body.appendChild(overlay); + + const checkbox = dialog.querySelector('#ack-checkbox'); + const confirmBtn = dialog.querySelector('.btn-confirm'); + const cancelBtn = dialog.querySelector('.btn-cancel'); + + // Enable confirm button only when checkbox is checked + checkbox.addEventListener('change', () => { + confirmBtn.disabled = !checkbox.checked; + }); + + // Handle confirm + confirmBtn.addEventListener('click', () => { + if (checkbox.checked) { + document.body.removeChild(overlay); + resolve(true); + } + }); + + // Handle cancel + cancelBtn.addEventListener('click', () => { + document.body.removeChild(overlay); + resolve(false); + }); + + // Handle ESC key + const handleEsc = (e) => { + if (e.key === 'Escape') { + document.body.removeChild(overlay); + document.removeEventListener('keydown', handleEsc); + resolve(false); + } + }; + document.addEventListener('keydown', handleEsc); + }); +} + +// Jednoduchý confirm dialog bez checkboxu a vysvětlení +function showSimpleConfirmDialog(title, message, confirmText = 'OK', cancelText = 'Zrušit') { + return new Promise((resolve) => { + // Create overlay + const overlay = document.createElement('div'); + overlay.className = 'ack-dialog-overlay'; + + // Create dialog + const dialog = document.createElement('div'); + dialog.className = 'ack-dialog'; + + dialog.innerHTML = ` +
+ ⚠️ ${title} +
+
+ ${message} +
+
+ + +
+ `; + + overlay.appendChild(dialog); + document.body.appendChild(overlay); + + const confirmBtn = dialog.querySelector('.btn-confirm'); + const cancelBtn = dialog.querySelector('.btn-cancel'); + + // Handle confirm + confirmBtn.addEventListener('click', () => { + document.body.removeChild(overlay); + resolve(true); + }); + + // Handle cancel + cancelBtn.addEventListener('click', () => { + document.body.removeChild(overlay); + resolve(false); + }); + + // Handle ESC key + const handleEsc = (e) => { + if (e.key === 'Escape') { + document.body.removeChild(overlay); + document.removeEventListener('keydown', handleEsc); + resolve(false); + } + }; + document.addEventListener('keydown', handleEsc); + }); +} + +// Remove item from shield queue +async function removeFromQueue(position) { + try { + // Získat detaily položky pro název akce + const shieldQueue = await getSensor(findShieldSensorId('service_shield_queue')); + const requests = shieldQueue.attributes?.requests || []; + const request = requests.find(r => r.position === position); + + let actionName = 'Operace'; + if (request) { + if (request.service_name.includes('set_box_mode')) { + actionName = `Změna režimu na ${request.target_display || request.target_value || 'neznámý'}`; + } else if (request.service_name.includes('set_grid_limit')) { + actionName = `Změna limitu do sítě na ${request.target_display || request.target_value || 'neznámý'}`; + } else if (request.service_name.includes('set_grid_delivery_limit')) { + actionName = `Změna limitu ze sítě na ${request.target_display || request.target_value || 'neznámý'}`; + } + } + + // Jednoduchý confirm dialog + const confirmed = await showSimpleConfirmDialog( + actionName, + 'Operace bude odstraněna z fronty bez provedení.', + 'OK', + 'Zrušit' + ); + + if (!confirmed) return; + + console.log(`[Queue] Removing position ${position} from queue`); + + const success = await callService('oig_cloud', 'shield_remove_from_queue', { + position: position + }); + + if (success) { + // Tichá aktualizace bez notifikace + await updateShieldQueue(); + await updateShieldUI(); + } else { + window.DashboardUtils?.showNotification('Chyba', 'Nepodařilo se odstranit položku z fronty', 'error'); + } + } catch (e) { + console.error('[Queue] Error removing from queue:', e); + window.DashboardUtils?.showNotification('Chyba', 'Chyba při odstraňování z fronty', 'error'); + } +} + +// === SHIELD SERVICE CALL HELPERS === + +/** + * Univerzální wrapper pro volání služeb s pending UI + * @param {Object} config - Konfigurace + * @param {string} config.serviceName - Název služby (pro UI) + * @param {string} config.buttonId - ID tlačítka pro pending state (optional) + * @param {Function} config.serviceCall - Async funkce která volá service + * @param {boolean} config.skipQueueWarning - Přeskočit warning při plné frontě + */ +async function executeServiceWithPendingUI(config) { + const { serviceName, buttonId, serviceCall, skipQueueWarning = false } = config; + + try { + // Check shield queue before adding task + if (!skipQueueWarning) { + const shieldQueue = await getSensor(findShieldSensorId('service_shield_queue')); + const queueCount = parseInt(shieldQueue.value) || 0; + + if (queueCount >= 3) { + const proceed = confirm( + `⚠️ VAROVÁNÍ: Fronta již obsahuje ${queueCount} úkolů!\n\n` + + `Každá změna může trvat až 10 minut.\n` + + `Opravdu chcete přidat další úkol?` + ); + if (!proceed) return false; + } + } + + // Show pending state immediately + const btn = buttonId ? document.getElementById(buttonId) : null; + if (btn) { + btn.disabled = true; + btn.classList.add('pending'); + } + + // Execute service call + const success = await serviceCall(); + + if (success) { + // Okamžitá aktualizace UI bez čekání na WebSocket debounce + monitorShieldActivity(); + await updateShieldQueue(); + await updateShieldUI(); + await updateButtonStates(); + return true; + } else { + // Re-enable on error + if (btn) { + btn.disabled = false; + btn.classList.remove('pending'); + } + return false; + } + } catch (e) { + console.error(`[Shield] Error in ${serviceName}:`, e); + window.DashboardUtils?.showNotification('Chyba', `Nepodařilo se provést: ${serviceName}`, 'error'); + + // Re-enable button on error + const btn = buttonId ? document.getElementById(buttonId) : null; + if (btn) { + btn.disabled = false; + btn.classList.remove('pending'); + } + return false; + } +} + +// Set box mode +async function setBoxMode(mode) { + try { + // Check if mode is already active + const currentModeData = await getSensorString(getSensorId('box_prms_mode')); + const currentMode = currentModeData.value || ''; + + if (currentMode.includes(mode)) { + return; // Режим už je aktivní - tiše ignorovat + } + + // Show acknowledgement dialog + const confirmed = await showAcknowledgementDialog( + 'Změna režimu střídače', + `Chystáte se změnit režim boxu na "${mode}".

` + + `Tato změna ovlivní chování celého systému a může trvat až 10 minut.` + ); + if (!confirmed) return; + + // Button ID mapping + const buttonIds = { + 'Home 1': 'btn-mode-home1', + 'Home 2': 'btn-mode-home2', + 'Home 3': 'btn-mode-home3', + 'Home UPS': 'btn-mode-ups' + }; + + // Execute with pending UI + await executeServiceWithPendingUI({ + serviceName: 'Změna režimu boxu', + buttonId: buttonIds[mode], + serviceCall: async () => { + return await callService('oig_cloud', 'set_box_mode', { + mode: mode, + acknowledgement: true + }); + } + }); + + } catch (e) { + console.error('[Shield] Error in setBoxMode:', e); + window.DashboardUtils?.showNotification('Chyba', 'Nepodařilo se změnit režim boxu', 'error'); + } +} + +// Set grid delivery - main entry point +async function setGridDelivery(mode) { + console.log('═══════════════════════════════════════════════'); + console.log('[Grid] setGridDelivery() called with mode:', mode); + console.log('═══════════════════════════════════════════════'); + + try { + // Get current mode and limit + const currentModeData = await getSensorString(getSensorId('invertor_prms_to_grid')); + const currentMode = currentModeData.value || ''; + const currentLimitData = await getSensorSafe(getSensorId('invertor_prm1_p_max_feed_grid')); + const currentLimit = currentLimitData.value || 5000; + + console.log('[Grid] Current state:', { currentMode, currentLimit }); + + // Check if change is already in progress + if (currentMode === 'Probíhá změna') { + console.log('[Grid] ⏸️ Change already in progress, skipping silently'); + return; + } + + // Check if already active (except for Limited - can change limit) + const isAlreadyActive = + (mode === 'Vypnuto / Off' && currentMode === 'Vypnuto') || + (mode === 'Zapnuto / On' && currentMode === 'Zapnuto'); + + if (isAlreadyActive) { + console.log('[Grid] ⏸️ Mode already active, skipping silently'); + return; + } + + // Check if Limited is already active + const isLimitedActive = currentMode === 'Omezeno'; + const isChangingToLimited = mode === 'S omezením / Limited'; + + console.log('[Grid] Decision flags:', { isLimitedActive, isChangingToLimited }); + + // Show dialog + console.log('[Grid] 📋 Opening dialog...'); + const result = await showGridDeliveryDialog(mode, currentLimit); + + if (!result.confirmed) { + console.log('[Grid] ❌ Dialog cancelled by user'); + return; + } + + console.log('[Grid] ✅ Dialog confirmed with:', result); + + // Determine button ID + const buttonIds = { + 'Vypnuto / Off': 'btn-grid-off', + 'Zapnuto / On': 'btn-grid-on', + 'S omezením / Limited': 'btn-grid-limited' + }; + const buttonId = buttonIds[mode]; + + // CASE 1: Limited is active, just change limit + if (isLimitedActive && isChangingToLimited && result.limit) { + console.log('[Grid] 🔧 Case 1: Changing limit only'); + + await executeServiceWithPendingUI({ + serviceName: 'Změna limitu přetoků', + buttonId: buttonId, + serviceCall: async () => { + return await callService('oig_cloud', 'set_grid_delivery', { + limit: result.limit, + acknowledgement: true, + warning: true + }); + } + }); + return; + } + + // CASE 2: Mode + Limit together (Limited from Off/On) + if (isChangingToLimited && result.limit) { + console.log('[Grid] 🔧 Case 2: Mode + limit together (backend will serialize)'); + + await executeServiceWithPendingUI({ + serviceName: 'Nastavení přetoků s omezením', + buttonId: buttonId, + serviceCall: async () => { + // NOVÁ LOGIKA: Pošleme OBĚ parametry najednou + // Backend automaticky rozdělí na 2 volání ve frontě + console.log('[Grid] Sending mode + limit together:', { mode, limit: result.limit }); + return await callService('oig_cloud', 'set_grid_delivery', { + mode: mode, + limit: result.limit, + acknowledgement: true, + warning: true + }); + } + }); + return; + } + + // CASE 3: Single-step change (just mode) + console.log('[Grid] 🔧 Case 3: Single-step change (mode only)'); + + await executeServiceWithPendingUI({ + serviceName: 'Změna dodávky do sítě', + buttonId: buttonId, + serviceCall: async () => { + return await callService('oig_cloud', 'set_grid_delivery', { + mode: mode, + acknowledgement: true, + warning: true + }); + } + }); + + } catch (e) { + console.error('[Grid] Error in setGridDelivery:', e); + window.DashboardUtils?.showNotification('Chyba', 'Nepodařilo se změnit dodávku do sítě', 'error'); + } +} + +// OLD FUNCTIONS - KEPT FOR COMPATIBILITY BUT NOT USED +async function setGridDeliveryOld(mode, limit) { + if (mode === null && limit === null) { + window.DashboardUtils?.showNotification('Chyba', 'Musíte zadat režim nebo limit!', 'error'); + return; + } + + if (mode !== null && limit !== null) { + window.DashboardUtils?.showNotification('Chyba', 'Můžete zadat pouze režim NEBO limit!', 'error'); + return; + } + + const confirmed = confirm('Opravdu chcete změnit dodávku do sítě?\n\n⚠️ VAROVÁNÍ: Tato změna může ovlivnit chování systému!'); + if (!confirmed) return; + + const data = { + acknowledgement: true, + warning: true + }; + + if (mode !== null) { + data.mode = mode; + } else { + data.limit = parseInt(limit); + if (isNaN(data.limit) || data.limit < 1 || data.limit > 9999) { + window.DashboardUtils?.showNotification('Chyba', 'Limit musí být 1-9999 W', 'error'); + return; + } + } + + const success = await callService('oig_cloud', 'set_grid_delivery', data); + + if (success) { + const msg = mode ? `Režim: ${mode}` : `Limit: ${data.limit} W`; + window.DashboardUtils?.showNotification('Dodávka do sítě', msg, 'success'); + setTimeout(forceFullRefresh, 2000); + } +} + +// Set grid delivery limit from input +function setGridDeliveryLimit() { + const input = document.getElementById('grid-limit'); + const limit = parseInt(input.value); + + if (!limit || limit < 1 || limit > 9999) { + window.DashboardUtils?.showNotification('Chyba', 'Zadejte limit 1-9999 W', 'error'); + return; + } + + setGridDeliveryOld(null, limit); +} + +// Set boiler mode +async function setBoilerMode(mode) { + try { + // Get current mode + const currentModeData = await getSensorStringSafe(getSensorId('boiler_manual_mode')); + const currentModeRaw = currentModeData.value || ''; + const currentMode = currentModeRaw === 'Manuální' ? 'Manual' : currentModeRaw; + + console.log('[Boiler] setBoilerMode called:', { mode, currentMode, currentModeRaw }); + + // Check if already active + if (currentMode === mode) { + console.log('[Boiler] ⏸️ Mode already active, skipping silently'); + return; + } + + const modeName = mode === 'CBB' ? 'Inteligentní' : 'Manuální'; + const modeIcon = mode === 'CBB' ? '🤖' : '👤'; + + // Show acknowledgement dialog + const confirmed = await showAcknowledgementDialog( + 'Změna režimu bojleru', + `Chystáte se změnit režim bojleru na "${modeIcon} ${modeName}".

` + + `Tato změna ovlivní chování ohřevu vody a může trvat až 10 minut.` + ); + if (!confirmed) return; + + // Button ID + const btnId = `btn-boiler-${mode.toLowerCase()}`; + + // Store expected mode for monitoring + const expectedMode = mode === 'CBB' ? 'CBB' : 'Manuální'; + window._lastRequestedBoilerMode = expectedMode; + console.log('[Boiler] Stored expected mode for monitoring:', expectedMode); + + // Execute with pending UI + await executeServiceWithPendingUI({ + serviceName: 'Změna režimu bojleru', + buttonId: btnId, + serviceCall: async () => { + return await callService('oig_cloud', 'set_boiler_mode', { + mode: mode, + acknowledgement: true + }); + } + }); + + } catch (e) { + console.error('[Shield] Error in setBoilerMode:', e); + window.DashboardUtils?.showNotification('Chyba', 'Nepodařilo se změnit režim bojleru', 'error'); + } +} + +// Update solar forecast +async function updateSolarForecast() { + const confirmed = confirm('Opravdu chcete aktualizovat solární předpověď?'); + if (!confirmed) return; + + const success = await callService('oig_cloud', 'update_solar_forecast', {}); + + if (success) { + window.DashboardUtils?.showNotification('Solární předpověď', 'Předpověď se aktualizuje...', 'success'); + // Delší čas pro forecast update + setTimeout(forceFullRefresh, 5000); + } +} + +// Load control panel status (now uses shield integration) +async function loadControlStatus() { + try { + // Update shield UI and button states + await updateShieldUI(); + await updateButtonStates(); + } catch (e) { + console.error('Error loading control status:', e); + } +} + + +// Export shield functions +window.DashboardShield = { + subscribeToShield, + startShieldQueueLiveUpdate, + stopShieldQueueLiveUpdate, + debouncedShieldMonitor, + monitorShieldActivity, + updateShieldUI, + updateButtonStates, + setBoxMode, + setGridDelivery, + setBoilerMode, + loadControlStatus, + init: function() { + console.log('[DashboardShield] Initialized'); + startShieldQueueLiveUpdate(); + } +}; + +console.log('[DashboardShield] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/components/tiles.js b/custom_components/oig_cloud/www/js/components/tiles.js new file mode 100644 index 00000000..c635dd87 --- /dev/null +++ b/custom_components/oig_cloud/www/js/components/tiles.js @@ -0,0 +1,740 @@ +/* eslint-disable */ +/** + * Dashboard Tile Manager + * Správa konfigurace dynamických dlaždic na OIG Dashboard + */ + +// Global tile manager instance +let tileManager = null; + +class DashboardTileManager { + constructor(hass) { + this.hass = hass; + this.config = null; // Bude načteno v init() + this.listeners = []; + this.isInitialized = false; + } + + /** + * Asynchronní inicializace - načte konfiguraci z HA storage + * MUSÍ se zavolat před použitím! + */ + async init() { + if (this.isInitialized) { + console.log('⚠️ TileManager already initialized'); + return; + } + + console.log('🔄 Initializing TileManager...'); + + // Pokus načíst z HA storage JAKO PRVNÍ + const haConfig = await this.loadFromHAStorage(); + + if (haConfig) { + console.log('✅ Using config from HA storage'); + this.config = haConfig; + } else { + // Pokud není v HA, zkusit localStorage + try { + const stored = localStorage.getItem('oig_dashboard_tiles'); + if (stored) { + this.config = JSON.parse(stored); + console.log('📦 Using config from localStorage fallback'); + } else { + this.config = this.getDefaultConfig(); + console.log('🆕 Using default config'); + } + } catch (e) { + console.error('❌ Failed to load from localStorage:', e); + this.config = this.getDefaultConfig(); + } + } + + // Synchronizovat do localStorage jako cache + try { + localStorage.setItem('oig_dashboard_tiles', JSON.stringify(this.config)); + } catch (e) { + console.error('❌ Failed to cache to localStorage:', e); + } + + this.isInitialized = true; + console.log('✅ TileManager initialized with config:', this.config); + + // Notifikovat listenery o dokončení načtení + this.notifyListeners(); + } + + /** + * Načíst konfiguraci z HA storage (async) + */ + async loadFromHAStorage() { + try { + const hass = window.hass || this.hass; + if (!hass) { + console.warn('⚠️ Cannot load from HA storage - no hass connection'); + return null; + } + + console.log('☁️ Loading config from HA storage...'); + + // Použít WebSocket API přímo pro kompatibilitu Safari + Chrome + const response = await hass.callWS({ + type: 'call_service', + domain: 'oig_cloud', + service: 'get_dashboard_tiles', + service_data: {}, + return_response: true + }); + + if (response && response.response && response.response.config) { + console.log('✅ Config loaded from HA storage:', response.response.config); + return response.response.config; + } else { + console.log('ℹ️ No config found in HA storage'); + return null; + } + } catch (e) { + console.error('❌ Failed to load from HA storage:', e); + return null; + } + } + + /** + * Výchozí konfigurace + */ + getDefaultConfig() { + return { + tiles_left: Array(6).fill(null), // 2×3 nebo 3×2 grid = 6 dlaždic + tiles_right: Array(6).fill(null), // 2×3 nebo 3×2 grid = 6 dlaždic + left_count: 6, + right_count: 6, + visible: true, // ZMĚNĚNO: Default je nyní TRUE (viditelné) + version: 1 + }; + } + + /** + * Uložit konfiguraci do localStorage a HA storage + */ + saveConfig() { + if (!this.isInitialized || !this.config) { + console.warn('⚠️ Cannot save - TileManager not initialized yet'); + return; + } + + try { + // Uložit do localStorage jako cache + localStorage.setItem('oig_dashboard_tiles', JSON.stringify(this.config)); + console.log('💾 Saved tile config to localStorage cache:', this.config); + this.notifyListeners(); + + // VŽDY synchronizovat do HA storage (debounced) + this.scheduleSyncToHA(); + } catch (e) { + console.error('❌ Failed to save tile config to localStorage:', e); + // I když selže localStorage, zkusíme sync do HA + this.scheduleSyncToHA(); + } + } + + /** + * Nastavit dlaždici + */ + setTile(side, index, tileConfig) { + if (!this.isInitialized || !this.config) { + console.warn('⚠️ Cannot set tile - TileManager not initialized yet'); + return; + } + + const key = `tiles_${side}`; + if (!this.config[key]) { + console.error(`❌ Invalid side: ${side}`); + return; + } + + if (index < 0 || index >= this.config[key].length) { + console.error(`❌ Invalid index: ${index}`); + return; + } + + console.log(`🔧 Setting tile [${side}][${index}]:`, tileConfig); + this.config[key][index] = tileConfig; + this.saveConfig(); + } + + /** + * Odebrat dlaždici + */ + removeTile(side, index) { + console.log(`🗑️ Removing tile [${side}][${index}]`); + this.setTile(side, index, null); + } + + /** + * Získat dlaždici + */ + getTile(side, index) { + if (!this.isInitialized || !this.config) return null; + const key = `tiles_${side}`; + if (!this.config[key]) return null; + return this.config[key][index]; + } + + /** + * Získat všechny dlaždice na straně + */ + getTiles(side) { + if (!this.isInitialized || !this.config) return []; + const key = `tiles_${side}`; + return this.config[key] || []; + } + + /** + * Resetovat konfiguraci + */ + reset() { + console.log('🔄 Resetting tile config to defaults'); + this.config = this.getDefaultConfig(); + this.saveConfig(); + } + + /** + * Přidat listener pro změny + */ + addChangeListener(callback) { + this.listeners.push(callback); + } + + /** + * Odebrat listener + */ + removeChangeListener(callback) { + this.listeners = this.listeners.filter(l => l !== callback); + } + + /** + * Notifikovat listenery o změně + */ + notifyListeners() { + this.listeners.forEach(callback => { + try { + callback(this.config); + } catch (e) { + console.error('❌ Listener error:', e); + } + }); + } + + /** + * Naplánovat sync do HA (debounced) + */ + scheduleSyncToHA() { + // Zrušit předchozí timeout + if (this.syncTimeout) { + clearTimeout(this.syncTimeout); + } + + // Naplánovat sync za 2 sekundy + this.syncTimeout = setTimeout(() => { + this.syncToHA(); + }, 2000); + } + + /** + * Sync konfigurace do Home Assistant + */ + async syncToHA() { + // Try multiple methods to get hass + const hass = (typeof getHass === 'function' ? getHass() : null) || + window.hass || + this.hass; + + if (!hass) { + console.warn('⚠️ Cannot sync to HA: hass not available'); + return; + } + + try { + console.log('☁️ Syncing config to HA...'); + + // Volání služby s celou konfigurací jako JSON string + await hass.callService('oig_cloud', 'save_dashboard_tiles', { + config: JSON.stringify(this.config) + }); + + console.log('✅ Config synced to HA successfully'); + } catch (e) { + console.error('❌ Failed to sync to HA:', e); + } + } + + + + /** + * Helper: Získat barvu podle domény entity + */ + getColorFromDomain(entityId) { + if (!entityId) return '#9E9E9E'; + + const domain = entityId.split('.')[0]; + const colors = { + 'sensor': '#03A9F4', + 'binary_sensor': '#FF9800', + 'switch': '#4CAF50', + 'light': '#FFC107', + 'climate': '#2196F3', + 'cover': '#9C27B0', + 'fan': '#00BCD4', + 'media_player': '#E91E63' + }; + + return colors[domain] || '#9E9E9E'; + } + + /** + * Export konfigurace jako JSON (pro backup) + */ + export() { + return JSON.stringify(this.config, null, 2); + } + + /** + * Import konfigurace z JSON (pro restore) + */ + import(jsonString) { + try { + const imported = JSON.parse(jsonString); + if (imported.tiles_left && imported.tiles_right) { + this.config = imported; + this.saveConfig(); + console.log('✅ Imported config successfully'); + return true; + } else { + console.error('❌ Invalid config format'); + return false; + } + } catch (e) { + console.error('❌ Failed to import config:', e); + return false; + } + } + + /** + * Nastavit počet dlaždic pro stranu + */ + setTileCount(side, count) { + const parsedCount = parseInt(count); + if (isNaN(parsedCount) || parsedCount < 0 || parsedCount > 6) { // Max 6 pro 2×3 nebo 3×2 grid + console.error(`❌ Invalid tile count: ${count}`); + return; + } + + const key = `${side}_count`; + console.log(`🔢 Setting tile count for ${side}: ${parsedCount}`); + this.config[key] = parsedCount; + + // Pokud snížíme počet, ořežeme pole + const tilesKey = `tiles_${side}`; + if (this.config[tilesKey].length > parsedCount) { + this.config[tilesKey] = this.config[tilesKey].slice(0, parsedCount); + } + + // Pokud zvýšíme počet, doplníme null + while (this.config[tilesKey].length < parsedCount) { + this.config[tilesKey].push(null); + } + + this.saveConfig(); + } + + /** + * Získat počet dlaždic pro stranu + */ + getTileCount(side) { + const key = `${side}_count`; + return this.config[key] || 6; + } + + /** + * Přepnout viditelnost sekce dlaždic + */ + toggleVisibility() { + this.config.visible = !this.config.visible; + console.log(`👁️ Toggling tiles visibility: ${this.config.visible}`); + this.saveConfig(); + } + + /** + * Získat viditelnost sekce + */ + isVisible() { + return this.config.visible !== false; // Default true + } +} + +// Export pro použití v ostatních souborech +window.DashboardTileManager = DashboardTileManager; + +// Track subscribed entities to avoid duplicate subscriptions +let subscribedEntities = new Set(); +let tilesWatchedEntities = new Set(); +let tilesWatcherUnsub = null; +let tilesRenderTimeout = null; + +async function initCustomTiles() { + console.log('[Tiles] Initializing custom tiles system...'); + + // Initialize tile dialog only if not already initialized + const hass = getHass(); + if (!hass) { + console.warn('[Tiles] Cannot initialize - no HA connection, retrying...'); + setTimeout(initCustomTiles, 1000); // Retry + return; + } + + // Initialize tile manager (only once) + if (!tileManager) { + tileManager = new DashboardTileManager(hass); + window.tileManager = tileManager; // Export for dialog access + + // Listen for config changes - render ONLY tiles, not whole dashboard + tileManager.addChangeListener(() => { + console.log('[Tiles] Config changed, re-rendering tiles only...'); + renderAllTiles(); // Local function - renders only tiles + updateTileControlsUI(); + subscribeToTileEntities(); // Re-subscribe to new entities + }); + + // ASYNCHRONNĚ načíst konfiguraci z HA storage + console.log('[Tiles] Loading configuration...'); + await tileManager.init(); + console.log('[Tiles] Configuration loaded'); + } + + // Initialize tile dialog (only once) + if (!tileDialog) { + tileDialog = new TileConfigDialog(hass, tileManager); + window.tileDialog = tileDialog; // Export for onclick handlers + } + + // Initial render + renderAllTiles(); + updateTileControlsUI(); + + // Subscribe to entity state changes for real-time updates + subscribeToTileEntities(); + + console.log('[Tiles] Initialization complete'); +} + +/** + * Subscribe to state changes for all entities used in tiles + * This enables real-time updates without full page refresh + */ +function subscribeToTileEntities() { + if (!tileManager) return; + + // Collect all entity IDs from tiles (both sides) + const allEntityIds = new Set(); + + ['left', 'right'].forEach(side => { + const tiles = tileManager.getTiles(side); + const count = tileManager.getTileCount(side); + + for (let i = 0; i < count; i++) { + const tile = tiles[i]; + if (tile && tile.type === 'entity' && tile.entity_id) { + allEntityIds.add(tile.entity_id); + + // Add support entities if present + if (tile.support_entities) { + Object.values(tile.support_entities).forEach(entityId => { + if (entityId) allEntityIds.add(entityId); + }); + } + } + } + }); + + // Only subscribe to new entities (avoid duplicates) + const newEntities = [...allEntityIds].filter(id => !subscribedEntities.has(id)); + + // Update watched set for the callback + tilesWatchedEntities = allEntityIds; + + const watcher = window.DashboardStateWatcher; + if (!watcher) { + console.warn('[Tiles] StateWatcher not available yet, retrying...'); + setTimeout(subscribeToTileEntities, 500); + return; + } + + // Ensure watcher is running (idempotent) + watcher.start({ intervalMs: 1000, prefixes: [] }); + + // Ensure we have a single callback registered, and only update the watched entity set above. + if (!tilesWatcherUnsub) { + tilesWatcherUnsub = watcher.onEntityChange((entityId) => { + if (!tilesWatchedEntities || !tilesWatchedEntities.has(entityId)) return; + if (tilesRenderTimeout) return; + tilesRenderTimeout = setTimeout(() => { + tilesRenderTimeout = null; + console.log(`[Tiles] Entity ${entityId} changed, updating tiles...`); + renderAllTiles(); + }, 100); + }); + } + + if (newEntities.length > 0) { + console.log(`[Tiles] Watching ${newEntities.length} entity updates:`, newEntities); + watcher.registerEntities(newEntities); + + // Mark as subscribed + newEntities.forEach(id => subscribedEntities.add(id)); + } +} + +/** + * Update tile count from UI input + */ +function updateTileCount(side, value) { + if (!tileManager) { + console.error('[Tiles] Tile manager not initialized'); + return; + } + + tileManager.setTileCount(side, value); +} + +/** + * Toggle tiles section visibility + */ +function toggleTilesVisibility() { + if (!tileManager) { + console.error('[Tiles] Tile manager not initialized'); + return; + } + + tileManager.toggleVisibility(); + + const section = document.querySelector('.custom-tiles-section'); + if (section) { + section.style.display = tileManager.isVisible() ? 'block' : 'none'; + } +} + +/** + * Reset all tiles to default + */ +function resetAllTiles() { + if (!tileManager) { + console.error('[Tiles] Tile manager not initialized'); + return; + } + + if (!confirm('Opravdu smazat všechny dlaždice a vrátit nastavení na výchozí?')) { + return; + } + + tileManager.reset(); + + // Reset UI inputs + document.getElementById('tiles-left-count').value = 6; + document.getElementById('tiles-right-count').value = 6; +} + +/** + * Update tile controls UI (inputs visibility toggle button) + */ +function updateTileControlsUI() { + if (!tileManager) return; + + // Update inputs + const leftInput = document.getElementById('tiles-left-count'); + const rightInput = document.getElementById('tiles-right-count'); + + if (leftInput) { + leftInput.value = tileManager.getTileCount('left'); + } + if (rightInput) { + rightInput.value = tileManager.getTileCount('right'); + } + + // Update visibility + const section = document.querySelector('.custom-tiles-section'); + if (section) { + const isVisible = tileManager.isVisible(); + section.style.display = isVisible ? 'block' : 'none'; + console.log(`[Tiles] Section visibility updated: ${isVisible}`); + } + + // Update toggle button text + const toggleBtn = document.getElementById('btn-tiles-toggle'); + if (toggleBtn && tileManager.isVisible()) { + toggleBtn.style.background = 'rgba(76, 175, 80, 0.2)'; + toggleBtn.style.borderColor = 'rgba(76, 175, 80, 0.5)'; + } else if (toggleBtn) { + toggleBtn.style.background = 'var(--button-bg)'; + toggleBtn.style.borderColor = 'var(--button-border)'; + } +} + +/** + * Render all tiles (both blocks) + */ +function renderAllTiles() { + renderTilesBlock('left'); + renderTilesBlock('right'); +} + +function _applyFlipToTileValues(side, index) { + if (typeof updateElementIfChanged !== 'function') return; + + const ids = [ + `tile-${side}-${index}-value`, + `tile-${side}-${index}-unit`, + `tile-${side}-${index}-support-top`, + `tile-${side}-${index}-support-bottom`, + `tile-${side}-${index}-button-state` + ]; + + ids.forEach((id) => { + const el = document.getElementById(id); + if (!el) return; + updateElementIfChanged(id, el.textContent, id, false, true); + }); +} + +/** + * Render one tiles block + * @param {string} side - 'left' or 'right' + */ +function renderTilesBlock(side) { + const blockElement = document.getElementById(`tiles-${side}`); + if (!blockElement) { + console.warn(`[Tiles] Block element not found: tiles-${side}`); + return; + } + + const gridElement = blockElement.querySelector('.tiles-grid'); + if (!gridElement) { + console.warn(`[Tiles] Grid element not found in tiles-${side}`); + return; + } + + // Get tile count for this side + const tileCount = tileManager.getTileCount(side); + + // Hide block if count is 0 + if (tileCount === 0) { + blockElement.style.display = 'none'; + return; + } else { + blockElement.style.display = 'block'; + } + + // Get configuration + const tiles = tileManager.getTiles(side); + + // Debug log pro diagnostiku + // console.log(`[Tiles] DEBUG ${side} tiles:`, tiles, 'non-null:', tiles.filter(t => t !== null)); + + // Render tiles up to count + gridElement.innerHTML = ''; + for (let i = 0; i < tileCount; i++) { + const tileConfig = tiles[i]; + const tileElement = renderTile(side, i, tileConfig); + gridElement.appendChild(tileElement); + _applyFlipToTileValues(side, i); + } + + // console.log(`[Tiles] Rendered ${side} block with ${tileCount} slots (${tiles.filter(t => t !== null).length} configured)`); +} + +/** + * Render single tile + * @param {string} side - 'left' or 'right' + * @param {number} index - Tile index (0-5) + * @param {object|null} config - Tile configuration + * @returns {HTMLElement} - Tile element + */ +function renderTile(side, index, config) { + const tile = document.createElement('div'); + tile.className = 'dashboard-tile'; + tile.dataset.side = side; + tile.dataset.index = index.toString(); + + if (!config) { + // Placeholder tile + tile.classList.add('tile-placeholder'); + tile.innerHTML = ` +
+
+
Přidat dlaždici
+
+ `; + } else if (config.type === 'entity') { + // Entity tile + tile.classList.add('tile-entity'); + tile.innerHTML = renderEntityTile(config, side, index); + } else if (config.type === 'button') { + // Button tile + tile.classList.add('tile-button'); + tile.innerHTML = renderButtonTile(config, side, index); + } + + // Add edit button (visible on hover) + if (config) { + const editBtn = document.createElement('button'); + editBtn.className = 'tile-edit'; + editBtn.innerHTML = '⚙️'; + editBtn.title = 'Upravit dlaždici'; + editBtn.onclick = (e) => { + e.stopPropagation(); + window.tileDialog.open(index, side); + }; + tile.appendChild(editBtn); + } + + // Add remove button (visible on hover) + if (config) { + const removeBtn = document.createElement('button'); + removeBtn.className = 'tile-remove'; + removeBtn.innerHTML = '✕'; + removeBtn.title = 'Odstranit dlaždici'; + removeBtn.onclick = (e) => { + e.stopPropagation(); + if (confirm('Opravdu odstranit tuto dlaždici?')) { + tileManager.removeTile(side, index); + } + }; + tile.appendChild(removeBtn); + } + + return tile; +} + +/** + * Render icon - podporuje emoji i MDI ikony + * @param {string} icon - Icon string (emoji nebo mdi:xxx) + * @param {string} color - Icon color + * @returns {string} - HTML string + */ + +// Export all tile functions +window.DashboardTiles = Object.assign(window.DashboardTiles || {}, { + // Existing TileManager + DashboardTileManager, + // Add rendering functions + initCustomTiles, + renderAllTiles, + renderTilesBlock, + renderTile, + // renderEntityTile, renderButtonTile, executeTileButtonAction are in dashboard-core.js + updateTileCount, + toggleTilesVisibility, + resetAllTiles, + updateTileControlsUI +}); + +console.log('[DashboardTiles] Enhanced with rendering functions'); diff --git a/custom_components/oig_cloud/www/js/core/api.js b/custom_components/oig_cloud/www/js/core/api.js new file mode 100644 index 00000000..c97ef34b --- /dev/null +++ b/custom_components/oig_cloud/www/js/core/api.js @@ -0,0 +1,537 @@ +/* eslint-disable */ +/** + * OIG Cloud Dashboard - API & Data Loading + * + * Funkce pro načítání dat ze senzorů, REST API a služeb Home Assistant. + * Extrahováno z monolitického dashboard-core.js + * + * @module dashboard-api + * @version 1.0.0 + * @date 2025-11-02 + */ + +// Global inverter SN (může být přepsán) +var INVERTER_SN = new URLSearchParams(window.location.search).get('inverter_sn') || '2206237016'; + +// ============================================================================ +// HOME ASSISTANT ACCESS +// ============================================================================ + +/** + * Získá přístup k Home Assistant objektu + * @returns {object|null} Home Assistant objekt nebo null + */ +function getHass() { + try { + return parent.document.querySelector('home-assistant')?.hass || null; + } catch (e) { + console.error('[API] Cannot access hass:', e); + return null; + } +} + +/** + * Získá HA autentizační token + * @returns {string|null} Token nebo null + */ +function getHAToken() { + try { + return parent.document.querySelector('home-assistant').hass.auth.data.access_token; + } catch (e) { + console.error('[API] Cannot get HA token:', e); + return null; + } +} + +/** + * Wrapper around fetch() that attaches Home Assistant Bearer token when available. + * @param {string} url - Absolute or relative URL + * @param {object} options - Fetch options + * @returns {Promise} + */ +async function fetchWithAuth(url, options = {}) { + const token = getHAToken(); + const mergedHeaders = { + ...(options.headers || {}) + }; + + // Add Bearer token if not already provided. + if (token && !mergedHeaders.Authorization && !mergedHeaders.authorization) { + mergedHeaders.Authorization = `Bearer ${token}`; + } + + return await fetch(url, { + ...options, + headers: mergedHeaders + }); +} + +// ============================================================================ +// SENSOR ID HELPERS +// ============================================================================ + +/** + * Vytvoří sensor entity ID + * @param {string} sensor - Název senzoru + * @returns {string} Entity ID + */ +function getSensorId(sensor) { + return `sensor.oig_${INVERTER_SN}_${sensor}`; +} + +/** + * Najde shield sensor s dynamickým suffixem (_2, _3, ...) + * @param {string} sensorName - Název senzoru + * @returns {string} Entity ID + */ +function findShieldSensorId(sensorName) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + console.warn(`[API] Cannot find ${sensorName} - hass not available`); + return getSensorId(sensorName); + } + + const sensorPrefix = `sensor.oig_${INVERTER_SN}_${sensorName}`; + + // Find exact match or with numeric suffix + const entityId = Object.keys(hass.states).find(id => { + if (id === sensorPrefix) return true; + if (id.startsWith(sensorPrefix + '_')) { + const suffix = id.substring(sensorPrefix.length + 1); + return /^\d+$/.test(suffix); + } + return false; + }); + + if (!entityId) { + console.warn(`[API] Sensor not found: ${sensorPrefix}`); + return getSensorId(sensorName); + } + + return entityId; + } catch (e) { + console.error(`[API] Error finding sensor ${sensorName}:`, e); + return getSensorId(sensorName); + } +} + +// ============================================================================ +// SENSOR DATA LOADING +// ============================================================================ + +/** + * Načte numerický sensor + * @param {string} entityId - Entity ID + * @returns {Promise} {value, lastUpdated, attributes} + */ +async function getSensor(entityId) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + return { value: 0, lastUpdated: null, attributes: {} }; + } + + const state = hass.states[entityId]; + if (!state) { + return { value: 0, lastUpdated: null, attributes: {} }; + } + + const value = state.state !== 'unavailable' && state.state !== 'unknown' + ? parseFloat(state.state) || 0 + : 0; + const lastUpdated = state.last_updated ? new Date(state.last_updated) : null; + const attributes = state.attributes || {}; + return { value, lastUpdated, attributes }; + } catch (e) { + return { value: 0, lastUpdated: null, attributes: {} }; + } +} + +/** + * Načte string sensor + * @param {string} entityId - Entity ID + * @returns {Promise} {value, lastUpdated, attributes} + */ +async function getSensorString(entityId) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + return { value: '', lastUpdated: null, attributes: {} }; + } + + const state = hass.states[entityId]; + if (!state) { + return { value: '', lastUpdated: null, attributes: {} }; + } + + const value = (state.state !== 'unavailable' && state.state !== 'unknown') + ? state.state + : ''; + const lastUpdated = state.last_updated ? new Date(state.last_updated) : null; + const attributes = state.attributes || {}; + return { value, lastUpdated, attributes }; + } catch (e) { + return { value: '', lastUpdated: null, attributes: {} }; + } +} + +/** + * Načte sensor s kontrolou existence + * @param {string} entityId - Entity ID + * @param {boolean} silent - Potlačit logy + * @returns {Promise} {value, lastUpdated, attributes, exists} + */ +async function getSensorSafe(entityId, silent = true) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + return { value: 0, lastUpdated: null, attributes: {}, exists: false }; + } + + const state = hass.states[entityId]; + if (!state) { + if (!silent) console.log(`[API] Sensor ${entityId} not available`); + return { value: 0, lastUpdated: null, attributes: {}, exists: false }; + } + + const value = state.state !== 'unavailable' && state.state !== 'unknown' + ? parseFloat(state.state) || 0 + : 0; + const lastUpdated = state.last_updated ? new Date(state.last_updated) : null; + const attributes = state.attributes || {}; + return { value, lastUpdated, attributes, exists: true }; + } catch (e) { + if (!silent) console.error(`[API] Error fetching ${entityId}:`, e); + return { value: 0, lastUpdated: null, attributes: {}, exists: false }; + } +} + +/** + * Načte string sensor s kontrolou existence + * @param {string} entityId - Entity ID + * @param {boolean} silent - Potlačit logy + * @returns {Promise} {value, lastUpdated, exists} + */ +async function getSensorStringSafe(entityId, silent = true) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + return { value: '', lastUpdated: null, exists: false }; + } + + const state = hass.states[entityId]; + if (!state) { + if (!silent) console.log(`[API] Sensor ${entityId} not available`); + return { value: '', lastUpdated: null, exists: false }; + } + + const value = (state.state !== 'unavailable' && state.state !== 'unknown') + ? state.state + : ''; + const lastUpdated = state.last_updated ? new Date(state.last_updated) : null; + return { value, lastUpdated, exists: true }; + } catch (e) { + if (!silent) console.error(`[API] Error fetching ${entityId}:`, e); + return { value: '', lastUpdated: null, exists: false }; + } +} + +// ============================================================================ +// REST API CALLS +// ============================================================================ + +/** + * Načte data z OIG Cloud REST API + * @param {string} endpoint - API endpoint (bez /api/oig_cloud prefix) + * @param {object} options - Fetch options + * @returns {Promise} API response nebo null + */ +async function fetchOIGAPI(endpoint, options = {}) { + try { + const url = `/api/oig_cloud${endpoint.startsWith('/') ? '' : '/'}${endpoint}`; + const response = await fetchWithAuth(url, { + ...options, + headers: { + 'Content-Type': 'application/json', + ...options.headers + } + }); + + if (!response.ok) { + console.error(`[API] Error fetching ${url}: ${response.status}`); + return null; + } + + return await response.json(); + } catch (e) { + console.error(`[API] Fetch error for ${endpoint}:`, e); + return null; + } +} + +/** + * Načte battery forecast timeline + * @param {string} inverterSn - Inverter SN + * @returns {Promise} Timeline data + */ +async function loadBatteryTimeline(inverterSn) { + return await fetchOIGAPI(`/battery_forecast/${inverterSn}/timeline`); +} + +/** + * Načte unified cost tile + * @param {string} inverterSn - Inverter SN + * @returns {Promise} Cost tile data + */ +async function loadUnifiedCostTile(inverterSn) { + return await fetchOIGAPI(`/battery_forecast/${inverterSn}/unified_cost_tile`); +} + +/** + * Načte spot prices + * @returns {Promise} Spot price data + */ +async function loadSpotPrices() { + return await fetchOIGAPI('/spot_prices'); +} + +/** + * Načte analytics data + * @param {string} inverterSn - Inverter SN + * @returns {Promise} Analytics data + */ +async function loadAnalytics(inverterSn) { + return await fetchOIGAPI(`/analytics/${inverterSn}`); +} + +// ============================================================================ +// SERVICE CALLS +// ============================================================================ + +/** + * Zavolá Home Assistant service + * @param {string} domain - Service domain + * @param {string} service - Service name + * @param {object} data - Service data + * @returns {Promise} Success + */ +async function callService(domain, service, data = {}) { + try { + const hass = getHass(); + if (!hass || !hass.callService) { + console.error('[API] Cannot call service - hass not available'); + return false; + } + + await hass.callService(domain, service, data); + return true; + } catch (e) { + console.error(`[API] Service call failed (${domain}.${service}):`, e); + return false; + } +} + +/** + * Otevře entity dialog + * @param {string} entityId - Entity ID + * @returns {boolean} Success + */ +function openEntityDialog(entityId) { + try { + const event = new Event('hass-more-info', { bubbles: true, composed: true }); + event.detail = { entityId }; + parent.document.querySelector('home-assistant').dispatchEvent(event); + return true; + } catch (e) { + console.error('[API] Cannot open entity dialog:', e); + return false; + } +} + +// ============================================================================ +// BATCH LOADING +// ============================================================================ + +/** + * Načte multiple senzory najednou (optimalizováno) + * @param {string[]} entityIds - Array of entity IDs + * @returns {Promise} Map entityId → sensor data + */ +async function batchLoadSensors(entityIds) { + const hass = getHass(); + if (!hass || !hass.states) { + return {}; + } + + const result = {}; + for (const entityId of entityIds) { + const state = hass.states[entityId]; + if (state) { + const value = state.state !== 'unavailable' && state.state !== 'unknown' + ? parseFloat(state.state) || 0 + : 0; + result[entityId] = { + value, + lastUpdated: state.last_updated ? new Date(state.last_updated) : null, + attributes: state.attributes || {}, + exists: true + }; + } else { + result[entityId] = { + value: 0, + lastUpdated: null, + attributes: {}, + exists: false + }; + } + } + return result; +} + +// ============================================================================ +// INVERTER SN MANAGEMENT +// ============================================================================ + +/** + * Nastaví inverter SN + * @param {string} sn - Inverter serial number + */ +function setInverterSN(sn) { + INVERTER_SN = sn; +} + +/** + * Získá aktuální inverter SN + * @returns {string} Inverter SN + */ +function getInverterSN() { + return INVERTER_SN; +} + +// ============================================================================ +// PLANNER SETTINGS / PLAN LABELS +// ============================================================================ + +const PLAN_LABELS = { + hybrid: { short: 'Plán', long: 'Plánování' } +}; + +const PlannerState = (() => { + const CACHE_TTL = 60 * 1000; // 1 minuta + let cache = null; + let lastFetch = 0; + let inflight = null; + + const resolveActivePlan = (settings) => { + // Single-planner: always hybrid (legacy name). + return 'hybrid'; + }; + + const fetchSettings = async (force = false) => { + const now = Date.now(); + if (!force && cache && now - lastFetch < CACHE_TTL) { + return cache; + } + if (inflight) { + return inflight; + } + + inflight = (async () => { + if (!window.INVERTER_SN) { + return null; + } + + const endpoint = `oig_cloud/battery_forecast/${INVERTER_SN}/planner_settings`; + + try { + const hass = window.DashboardAPI?.getHass?.() || window.getHass?.(); + let payload; + + if (hass && typeof hass.callApi === 'function') { + payload = await hass.callApi('GET', endpoint); + } else { + const headers = { 'Content-Type': 'application/json' }; + const token = window.DashboardAPI?.getHAToken?.(); + if (token) { + headers.Authorization = `Bearer ${token}`; + } + + const response = await fetch(`/api/${endpoint}`, { + method: 'GET', + headers, + credentials: 'same-origin' + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + payload = await response.json(); + } + + cache = payload; + lastFetch = Date.now(); + return payload; + } catch (error) { + console.warn('[PlannerState] Failed to fetch planner settings', error); + return null; + } finally { + inflight = null; + } + })(); + + return inflight; + }; + + const getDefaultPlan = async (force = false) => { + const settings = await fetchSettings(force); + return resolveActivePlan(settings); + }; + + const getCachedSettings = () => cache; + + const getLabels = (plan = 'hybrid') => PLAN_LABELS[plan] || PLAN_LABELS.hybrid; + + return { + fetchSettings, + getDefaultPlan, + getCachedSettings, + resolveActivePlan, + getLabels + }; +})(); + +// ============================================================================ +// EXPORT DEFAULT (backward compatibility) +// ============================================================================ + +if (typeof window !== 'undefined') { + window.DashboardAPI = { + getHass, + getHAToken, + getSensorId, + findShieldSensorId, + getSensor, + getSensorString, + getSensorSafe, + getSensorStringSafe, + fetchOIGAPI, + loadBatteryTimeline, + loadUnifiedCostTile, + loadSpotPrices, + loadAnalytics, + callService, + openEntityDialog, + batchLoadSensors, + setInverterSN, + getInverterSN, + plannerState: PlannerState, + planLabels: PLAN_LABELS + }; + + // Backward compatibility - expose getHass globally + window.getHass = getHass; + window.PlannerState = PlannerState; + window.PLAN_LABELS = PLAN_LABELS; +} diff --git a/custom_components/oig_cloud/www/js/core/core.js b/custom_components/oig_cloud/www/js/core/core.js new file mode 100644 index 00000000..2a5bd02f --- /dev/null +++ b/custom_components/oig_cloud/www/js/core/core.js @@ -0,0 +1,1179 @@ +/* eslint-disable */ +// === INVERTER SN (from api.js) === +// INVERTER_SN is defined in dashboard-api.js (loaded before this file) + +// === LAYOUT (using dashboard-layout.js module) === +// Import layout functions (var allows re-declaration if script re-runs) +var getCurrentBreakpoint = window.DashboardLayout?.getCurrentBreakpoint; +var saveLayout = window.DashboardLayout?.saveLayout; +var loadLayout = window.DashboardLayout?.loadLayout; +var resetLayout = window.DashboardLayout?.resetLayout; +var toggleEditMode = window.DashboardLayout?.toggleEditMode; + +// === GLOBAL VARIABLES FOR CHART DATA === +// Store complete dataset for extremes calculation regardless of zoom +var originalPriceData = null; + +// === TOOLTIP POSITIONING === + +// === CONTROL PANEL FUNCTIONS === + +// Toggle control panel +function toggleControlPanel() { + const panel = document.getElementById('control-panel'); + const icon = document.getElementById('panel-toggle-icon'); + panel.classList.toggle('minimized'); + icon.textContent = panel.classList.contains('minimized') ? '+' : '−'; +} + +function runWhenIdle(task, timeoutMs = 2000, fallbackDelayMs = 600) { + if (typeof window.requestIdleCallback === 'function') { + window.requestIdleCallback(() => task(), { timeout: timeoutMs }); + return; + } + setTimeout(task, fallbackDelayMs); +} + +function detectHaApp() { + try { + const ua = window.navigator?.userAgent || ''; + return /Home Assistant|HomeAssistant/i.test(ua); + } catch (e) { + return false; + } +} + +function detectMobile() { + try { + const ua = window.navigator?.userAgent || ''; + const mobileUA = /Android|iPhone|iPad|iPod|Mobile/i.test(ua); + const smallViewport = window.innerWidth <= 768 || window.matchMedia?.('(max-width: 768px)')?.matches; + return mobileUA || !!smallViewport; + } catch (e) { + return false; + } +} + +window.OIG_RUNTIME = window.OIG_RUNTIME || {}; +if (window.OIG_RUNTIME.isHaApp === undefined) { + window.OIG_RUNTIME.isHaApp = detectHaApp(); +} +if (window.OIG_RUNTIME.isMobile === undefined) { + window.OIG_RUNTIME.isMobile = detectMobile(); +} +if (window.OIG_RUNTIME.reduceMotion === undefined) { + const prefersReduced = window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches; + window.OIG_RUNTIME.reduceMotion = !!(prefersReduced || window.OIG_RUNTIME.isHaApp || window.OIG_RUNTIME.isMobile); +} +if (window.OIG_RUNTIME.initialLoadComplete === undefined) { + window.OIG_RUNTIME.initialLoadComplete = false; +} + +// === SHIELD (moved to dashboard-shield.js) === +// Import shield functions +var subscribeToShield = window.DashboardShield?.subscribeToShield; +var startShieldQueueLiveUpdate = window.DashboardShield?.startShieldQueueLiveUpdate; +var stopShieldQueueLiveUpdate = window.DashboardShield?.stopShieldQueueLiveUpdate; +var loadShieldData = window.DashboardShield?.loadShieldData; +var debouncedShieldMonitor = window.DashboardShield?.debouncedShieldMonitor; +var setShieldMode = window.DashboardShield?.setShieldMode; +var setShieldModeWithConfirmation = window.DashboardShield?.setShieldModeWithConfirmation; +var cancelShieldAction = window.DashboardShield?.cancelShieldAction; +var loadControlPanelStatus = window.DashboardShield?.loadControlPanelStatus; + +// === FLOW DIAGRAM (moved to dashboard-flow.js) === +// Import functions from DashboardFlow module +var getSensorId = window.DashboardFlow?.getSensorId; +var updateTime = window.DashboardFlow?.updateTime; +var debouncedDrawConnections = window.DashboardFlow?.debouncedDrawConnections; +var drawConnections = window.DashboardFlow?.drawConnections; +var getNodeCenters = window.DashboardFlow?.getNodeCenters; +var updateNode = window.DashboardFlow?.updateNode; +var updateNodeDetails = window.DashboardFlow?.updateNodeDetails; +var loadData = window.DashboardFlow?.loadData; +var loadNodeDetails = window.DashboardFlow?.loadNodeDetails; +var forceFullRefresh = window.DashboardFlow?.forceFullRefresh; +var debouncedLoadData = window.DashboardFlow?.debouncedLoadData; +var debouncedLoadNodeDetails = window.DashboardFlow?.debouncedLoadNodeDetails; + +// Import findShieldSensorId from utils +var findShieldSensorId = window.DashboardUtils?.findShieldSensorId; + +// === THEME DETECTION === + +/** + * Detekuje aktuální téma Home Assistantu a aplikuje správné styly + */ +function detectAndApplyTheme() { + try { + const hass = getHass(); + const bodyElement = document.body; + let isLightTheme = false; + + if (hass && hass.themes) { + // Metoda 1: Přímý přístup k HA theme konfiguraci (nejspolehlivější) + const selectedTheme = hass.selectedTheme || hass.themes.default_theme; + const darkMode = hass.themes.darkMode; + + // console.log('[Theme] HA theme info:', { + // selectedTheme, + // darkMode, + // themes: hass.themes + // }); + + // HA má explicitní dark mode flag + if (darkMode !== undefined) { + isLightTheme = !darkMode; + // console.log('[Theme] Using HA darkMode flag:', darkMode, '-> light theme:', isLightTheme); + } else if (selectedTheme) { + // Fallback: některá témata mají v názvu "light" nebo "dark" + const themeName = selectedTheme.toLowerCase(); + if (themeName.includes('light')) { + isLightTheme = true; + } else if (themeName.includes('dark')) { + isLightTheme = false; + } + // console.log('[Theme] Detected from theme name:', selectedTheme, '-> light:', isLightTheme); + } + } else { + console.warn('[Theme] Cannot access hass.themes, trying CSS detection'); + } + + // Metoda 2: Fallback - detekce z CSS proměnných + if (!hass || !hass.themes) { + try { + const haElement = parent.document.querySelector('home-assistant'); + if (haElement) { + const computedStyle = getComputedStyle(haElement); + const primaryBg = computedStyle.getPropertyValue('--primary-background-color'); + + if (primaryBg) { + const rgb = primaryBg.match(/\d+/g); + if (rgb && rgb.length >= 3) { + const brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3; + isLightTheme = brightness > 128; + console.log('[Theme] CSS detection - brightness:', brightness, '-> light:', isLightTheme); + } + } + } + } catch (e) { + console.warn('[Theme] CSS detection failed:', e); + } + } + +// Aplikovat třídu na body + if (isLightTheme) { + bodyElement.classList.add('light-theme'); + bodyElement.classList.remove('dark-theme'); + // console.log('[Theme] ✓ Light theme applied'); + } else { + bodyElement.classList.add('dark-theme'); + bodyElement.classList.remove('light-theme'); + // console.log('[Theme] ✓ Dark theme applied'); + } + + } catch (error) { + console.error('[Theme] Error detecting theme:', error); + // Výchozí: tmavé téma + document.body.classList.add('dark-theme'); + document.body.classList.remove('light-theme'); + } +} + +// === NUMBER ROLLING EFFECT === +// Přidá animaci podobnou split-flap při změně textContent u vybraných prvků +function initRollingNumbers() { + const selectors = [ + '.stat-value', + '.day-stat-value', + '.card .value', + '.tile-value', + '.price-value', + ]; + + const targets = Array.from(document.querySelectorAll(selectors.join(','))); + if (!targets.length) { + return; + } + + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.type === 'characterData') { + const el = mutation.target.parentElement; + if (!el) return; + el.classList.remove('rolling-change'); + // force reflow to restart animation + void el.offsetWidth; + el.classList.add('rolling-change'); + } else if (mutation.type === 'childList' && mutation.target) { + const el = /** @type {HTMLElement} */ (mutation.target); + el.classList.remove('rolling-change'); + void el.offsetWidth; + el.classList.add('rolling-change'); + } + }); + }); + + targets.forEach((el) => { + observer.observe(el, { + characterData: true, + subtree: true, + childList: true, + }); + }); +} + +// === TOOLTIP SYSTEM === + +/** + * Globální tooltip systém - používá dedikované DOM elementy mimo flow + * Toto řešení zaručuje správné pozicování bez ohledu na CSS transformace rodičů + */ +function initTooltips() { + const tooltip = document.getElementById('global-tooltip'); + const arrow = document.getElementById('global-tooltip-arrow'); + const entityValues = document.querySelectorAll('.entity-value[data-tooltip], .entity-value[data-tooltip-html], .detail-value[data-tooltip-html], #battery-grid-charging-indicator[data-tooltip], #battery-grid-charging-indicator[data-tooltip-html], #balancing-planned-time-short[data-tooltip-html], #battery-balancing-indicator[data-tooltip-html]'); + + if (!tooltip || !arrow) { + console.error('[Tooltips] Global tooltip elements not found!'); + return; + } + + entityValues.forEach(element => { + element.addEventListener('mouseenter', function () { + const tooltipText = this.getAttribute('data-tooltip'); + const tooltipHtml = this.getAttribute('data-tooltip-html'); + + if (!tooltipText && !tooltipHtml) return; + + // Nastavit text nebo HTML + if (tooltipHtml) { + tooltip.innerHTML = tooltipHtml; + } else { + tooltip.textContent = tooltipText; + } + + // Získat pozici elementu v rámci viewportu + const rect = this.getBoundingClientRect(); + + // Nejprve zobrazit tooltip pro změření jeho skutečné velikosti + tooltip.style.visibility = 'hidden'; + tooltip.style.opacity = '1'; + + const tooltipRect = tooltip.getBoundingClientRect(); + const tooltipWidth = tooltipRect.width; + const tooltipHeight = tooltipRect.height; + const padding = 10; + const arrowSize = 5; + + // Vypočítat pozici tooltipu + let tooltipTop = rect.top - tooltipHeight - arrowSize - padding; + let tooltipLeft = rect.left + (rect.width / 2) - (tooltipWidth / 2); + + // Zajistit že tooltip není mimo viewport (horizontálně) + const viewportWidth = window.innerWidth; + if (tooltipLeft < padding) { + tooltipLeft = padding; + } + if (tooltipLeft + tooltipWidth > viewportWidth - padding) { + tooltipLeft = viewportWidth - tooltipWidth - padding; + } + + // Kontrola zda se tooltip vejde nad element + let isBelow = false; + if (tooltipTop < padding) { + // Nedostatek místa nahoře - zobrazit dole + tooltipTop = rect.bottom + arrowSize + padding; + isBelow = true; + } + + // Pozice šipky - vždy uprostřed původního elementu + const arrowLeft = rect.left + (rect.width / 2) - arrowSize; + const arrowTop = isBelow + ? rect.bottom + padding + : rect.top - arrowSize - padding; + + // Aplikovat vypočítané pozice + tooltip.style.top = `${tooltipTop}px`; + tooltip.style.left = `${tooltipLeft}px`; + tooltip.style.visibility = 'visible'; + + arrow.style.top = `${arrowTop}px`; + arrow.style.left = `${arrowLeft}px`; + + // Nastavit směr šipky + if (isBelow) { + arrow.classList.add('below'); + } else { + arrow.classList.remove('below'); + } + + // Zobrazit tooltip a šipku + tooltip.classList.add('visible'); + arrow.classList.add('visible'); + }); + + element.addEventListener('mouseleave', function () { + // Skrýt tooltip a šipku + tooltip.classList.remove('visible'); + arrow.classList.remove('visible'); + + // Po animaci schovat mimo obrazovku + setTimeout(() => { + if (!tooltip.classList.contains('visible')) { + tooltip.style.top = '-9999px'; + tooltip.style.left = '-9999px'; + arrow.style.top = '-9999px'; + arrow.style.left = '-9999px'; + } + }, 200); // délka CSS transition + }); + }); + + // console.log('[Tooltips] Initialized for', entityValues.length, 'elements'); +} + +// === GRID CHARGING (moved to dashboard-grid-charging.js) === +var openGridChargingDialog = window.DashboardGridCharging?.openGridChargingDialog; +var closeGridChargingDialog = window.DashboardGridCharging?.closeGridChargingDialog; + +// === INITIALIZATION === +function init() { + console.log('[Dashboard] Initializing...'); + const isConstrainedRuntime = !!(window.OIG_RUNTIME?.isHaApp || window.OIG_RUNTIME?.isMobile); + if (window.OIG_RUNTIME?.reduceMotion) { + document.body.classList.add('oig-reduce-motion'); + const particles = document.getElementById('particles'); + if (particles) { + particles.style.display = 'none'; + } + } + + // Detekovat a aplikovat téma z Home Assistantu + detectAndApplyTheme(); + + // === LAYOUT CUSTOMIZATION INITIALIZATION === + currentBreakpoint = getCurrentBreakpoint(); + console.log(`[Layout] Initial breakpoint: ${currentBreakpoint}`); + + // Načíst custom layout pokud existuje + const loaded = loadLayout(currentBreakpoint); + if (loaded) { + console.log(`[Layout] Custom ${currentBreakpoint} layout loaded`); + } else { + console.log(`[Layout] Using default ${currentBreakpoint} layout`); + } + + // Resize listener pro breakpoint changes + window.addEventListener('resize', handleLayoutResize); + + // Auto-collapse control panel on mobile + if (window.innerWidth <= 768) { + const panel = document.getElementById('control-panel'); + const icon = document.getElementById('panel-toggle-icon'); + if (panel && icon) { + panel.classList.add('minimized'); + icon.textContent = '+'; + } + } + + // Initialize tooltip system + initTooltips(); + + // Start number rolling animation observer + initRollingNumbers(); + + // Optional: legacy performance chart (removed) + if (typeof initPerformanceChart === 'function') { + initPerformanceChart(); + } + + // OPRAVA: Počkat na dokončení layout načtení před voláním loadData() + // Pokud byl načten custom layout, particles byly zastaveny + // a needsFlowReinitialize je TRUE, takže loadData() je restartuje + setTimeout(() => { + // Initial full load (defer heavy work in HA app to avoid UI freeze) + const startHeavyLoad = () => { + forceFullRefresh(); + }; + if (isConstrainedRuntime) { + setTimeout(() => runWhenIdle(startHeavyLoad, 3500, 1200), 200); + } else { + startHeavyLoad(); + } + + updateTime(); + + // NOVÉ: Load extended timeline for Today Plan Tile + runWhenIdle(buildExtendedTimeline, isConstrainedRuntime ? 3500 : 2500, isConstrainedRuntime ? 1200 : 900); + + // OPRAVA: Načíst pricing data pokud je pricing tab aktivní při načtení stránky + const pricingTab = document.getElementById('pricing-tab'); + if (pricingTab && pricingTab.classList.contains('active')) { + console.log('[Init] Pricing tab is active, loading initial pricing data...'); + pricingTabActive = true; + setTimeout(() => { + loadPricingData(); + }, 200); + } + }, 50); + + // Subscribe to shield state changes for real-time updates (defer on mobile/HA app) + const startShieldSubscription = () => { + subscribeToShield(); + }; + if (isConstrainedRuntime) { + setTimeout(() => runWhenIdle(startShieldSubscription, 4000, 1500), 300); + } else { + startShieldSubscription(); + } + + // Initial shield UI update with retry logic (wait for sensors after HA restart) + let retryCount = 0; + const maxRetries = 10; + const retryInterval = 2000; // 2s between retries + + function tryInitialShieldLoad() { + console.log(`[Shield] Attempting initial load (attempt ${retryCount + 1}/${maxRetries})...`); + + // Check if shield sensors are available + const hass = getHass(); + if (!hass || !hass.states) { + console.warn('[Shield] HA connection not ready, will retry...'); + retryCount++; + if (retryCount < maxRetries) { + setTimeout(tryInitialShieldLoad, retryInterval); + } else { + console.error('[Shield] Failed to load after', maxRetries, 'attempts'); + console.warn('[Shield] Falling back to 20s polling as backup'); + // Fallback: Enable backup polling if initial load fails + setInterval(() => { + console.log('[Shield] Backup polling triggered'); + monitorShieldActivity(); + updateShieldQueue(); + updateShieldUI(); + updateButtonStates(); + }, 20000); + } + return; + } + + const activitySensorId = findShieldSensorId('service_shield_activity'); + if (!activitySensorId || !hass.states[activitySensorId]) { + console.warn('[Shield] Shield sensors not ready yet, will retry...'); + retryCount++; + if (retryCount < maxRetries) { + setTimeout(tryInitialShieldLoad, retryInterval); + } else { + console.error('[Shield] Shield sensors not available after', maxRetries, 'attempts'); + console.warn('[Shield] Falling back to 20s polling as backup'); + // Fallback: Enable backup polling if sensors not available + setInterval(() => { + console.log('[Shield] Backup polling triggered'); + monitorShieldActivity(); + updateShieldQueue(); + updateShieldUI(); + updateButtonStates(); + }, 20000); + } + return; + } + + // Sensors are ready, load UI + console.log('[Shield] Sensors ready, loading initial UI...'); + updateButtonStates(); // Set initial active states (green highlighting) + updateShieldQueue(); // Load initial queue state + updateShieldUI(); // Load initial shield status + monitorShieldActivity(); // Start activity monitoring + } + + // Start initial load with delay + setTimeout(tryInitialShieldLoad, 1000); + + // === EVENT-DRIVEN ARCHITECTURE === + // Veškeré updates jsou řízeny přes StateWatcher (polling hass.states), bez dalších `state_changed` WS subscription. + // - Data sensors -> debouncedLoadData() (200ms debounce) + // - Detail sensors -> debouncedLoadNodeDetails() (500ms debounce) + // - Pricing sensors -> debouncedLoadPricingData() (300ms debounce) + // - Shield sensors -> debouncedShieldMonitor() (100ms debounce) + + // REMOVED: Polling-based updates (replaced by WebSocket events) + // setInterval(loadData, 5000); ❌ Nahrazeno event-driven + // setInterval(loadNodeDetails, 30000); ❌ Nahrazeno event-driven + // setInterval(detectAndApplyTheme, 5000); ❌ Nahrazeno event-driven + + // Theme detection - pouze event listeners (NO POLLING) + // 1. Parent window theme changes + try { + if (parent && parent.addEventListener) { + parent.addEventListener('theme-changed', () => { + console.log('[Theme] Theme changed event detected'); + detectAndApplyTheme(); + }); + } + } catch (e) { + console.warn('[Theme] Cannot listen to parent events:', e); + } + + // 2. System preference changes + if (window.matchMedia) { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + console.log('[Theme] System preference changed'); + detectAndApplyTheme(); + }); + } + + // 3. Fallback: Check theme on visibility change (tab switch) + document.addEventListener('visibilitychange', () => { + if (!document.hidden) { + console.log('[Theme] Tab became visible, checking theme'); + detectAndApplyTheme(); + } + }); + + // REMOVED: Backup shield monitoring - WebSocket events handle all updates in real-time + // setInterval(() => { + // monitorShieldActivity(); + // updateShieldQueue(); + // }, 10000); + + // Time update every second + setInterval(updateTime, 1000); + + // Redraw lines on resize with debounce. + // Mobile WebViews (incl. HA app) fire frequent resize events when browser chrome shows/hides. + // Avoid stopping/reinitializing particles on height-only micro-resizes. + let resizeTimer; + let lastResizeWidth = window.innerWidth; + let lastResizeHeight = window.innerHeight; + let lastResizeBreakpoint = (window.innerWidth <= 768) ? 'mobile' : (window.innerWidth <= 1024 ? 'tablet' : 'desktop'); + window.addEventListener('resize', () => { + clearTimeout(resizeTimer); + // Clear cache on resize + cachedNodeCenters = null; + lastLayoutHash = null; + resizeTimer = setTimeout(() => { + const w = window.innerWidth; + const h = window.innerHeight; + const breakpoint = (w <= 768) ? 'mobile' : (w <= 1024 ? 'tablet' : 'desktop'); + + const dw = Math.abs(w - lastResizeWidth); + const dh = Math.abs(h - lastResizeHeight); + const breakpointChanged = breakpoint !== lastResizeBreakpoint; + + // "Meaningful" resize: width changes (rotation / split-screen) or breakpoint changes. + // Height-only changes often happen continuously on mobile due to browser UI. + const meaningfulResize = breakpointChanged || dw >= 24 || dh >= 180; + + lastResizeWidth = w; + lastResizeHeight = h; + lastResizeBreakpoint = breakpoint; + + // OPRAVA: Při resize na flow tabu musíme reinicializovat particles + const flowTab = document.querySelector('#flow-tab'); + const isFlowTabActive = flowTab && flowTab.classList.contains('active'); + + if (isFlowTabActive) { + if (meaningfulResize) { + console.log('[Resize] Flow tab meaningful resize, reinitializing particles...'); + stopAllParticleFlows(); + drawConnections(); + needsFlowReinitialize = true; + // Trigger a data refresh (debounced) to kick animations with updated positions. + if (typeof debouncedLoadData === 'function') { + debouncedLoadData(); + } else { + loadData(); + } + } else { + // Lightweight update: just redraw connections; particle flows will self-correct on next data tick. + drawConnections(); + } + } else { + // Jen překreslit connections pokud nejsme na flow tabu + drawConnections(); + } + }, 100); + }); + + // FIX: Force layout stabilization after initial render + // Problém: Po restartu HA se někdy načítají CSS/HTML v jiném pořadí + // Řešení: Opakované překreslení po různých intervalech + // OPRAVA BUG #3: Inicializovat cache před prvním kreslením + const scheduleConnectionsDraw = (delay) => { + setTimeout(() => { getNodeCenters(); drawConnections(); }, delay); + }; + if (isConstrainedRuntime) { + scheduleConnectionsDraw(200); // První pokus po 200ms (mobile/HA app) + scheduleConnectionsDraw(1200); // Finální po 1.2s + } else { + scheduleConnectionsDraw(100); // První pokus po 100ms + scheduleConnectionsDraw(500); // Druhý pokus po 500ms + scheduleConnectionsDraw(1000); // Třetí pokus po 1s + scheduleConnectionsDraw(2000); // Finální po 2s + } + + // Mobile: Toggle node details on click (collapsed by default) + if (window.innerWidth <= 768) { + const nodes = document.querySelectorAll('.node'); + nodes.forEach(node => { + node.addEventListener('click', function (e) { + // Ignore clicks on buttons inside nodes + if (e.target.tagName === 'BUTTON' || e.target.closest('button')) { + return; + } + this.classList.toggle('expanded'); + }); + + // Add cursor pointer to indicate clickability + node.style.cursor = 'pointer'; + }); + } + + // === CUSTOM TILES INITIALIZATION === + initCustomTiles(); + + // === PERIODICKÝ CLEANUP PARTICLES (PREVENCE ÚNIK PAMĚTI) === + // Každých 30 sekund zkontrolujeme počet particles + // Pokud NEJSME na tab Toky, NEMAŽ particles (budou potřeba po návratu) + // Pokud JSME na tab Toky a je > 40 kuliček, proveď cleanup + setInterval(() => { + const flowTab = document.querySelector('#flow-tab'); + const isFlowTabActive = flowTab && flowTab.classList.contains('active'); + const particlesContainer = document.getElementById('particles'); + + if (!isFlowTabActive) { + // OPRAVA: NEMAŽ particles když nejsi na tabu - budou potřeba při návratu + // Jen zkontroluj count pro monitoring + if (particlesContainer) { + const particleCount = particlesContainer.children.length; + if (particleCount > 50) { + console.log(`[Particles] ⚠️ High particle count while tab inactive: ${particleCount} (will cleanup on tab switch)`); + } + } + } else if (particlesContainer) { + // Jsme na tab flow (toky) -> cleanup jen pokud je > 40 kuliček + const particleCount = particlesContainer.children.length; + if (particleCount > 40) { + console.log(`[Particles] ⏰ Periodic cleanup (${particleCount} particles exceeded threshold)`); + stopAllParticleFlows(); + // Po cleanup restartovat animace s aktuálními daty + setTimeout(() => { + needsFlowReinitialize = true; + loadData(); + }, 200); + } + } + }, 30000); // 30 sekund + + console.log('[Particles] ✓ Periodic cleanup timer started (30s interval)'); +} + +// Wait for DOM +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); +} else { + init(); +} + +// === TAB SWITCHING === +var pricingTabActive = false; +var needsFlowReinitialize = false; // Flag pro vynucené restartování flow animací + +function switchTab(tabName) { + // Zapamatuj si předchozí tab PŘED změnou + const previousActiveContent = document.querySelector('.tab-content.active'); + const previousTab = previousActiveContent ? previousActiveContent.id.replace('-tab', '') : null; + + console.log(`[Tab] Switching from '${previousTab}' to '${tabName}'`); + + // Remove active from all tabs and contents + document.querySelectorAll('.dashboard-tab').forEach(tab => tab.classList.remove('active')); + document.querySelectorAll('.tab-content').forEach(content => content.classList.remove('active')); + + // Add active to clicked tab (find by checking which one was clicked via event) + const clickedTab = event ? event.target : document.querySelector('.dashboard-tab'); + if (clickedTab) { + clickedTab.classList.add('active'); + } + + // Add active to corresponding content + const tabContent = document.getElementById(tabName + '-tab'); + if (tabContent) { + tabContent.classList.add('active'); + } + + // Track active tab for event-driven updates + pricingTabActive = (tabName === 'pricing'); + + // OPRAVA: Při ODCHODU z tab flow (toky), zastavit particles (cleanup) + if (previousTab === 'flow' && tabName !== 'flow') { + console.log('[Tab] ========== LEAVING FLOW TAB - CLEANUP =========='); + stopAllParticleFlows(); + } + + // OPRAVA: Při přepnutí NA tab flow (toky), překreslit connections a FORCE restart particles + if (tabName === 'flow') { + console.log('[Tab] ========== SWITCHING TO FLOW TAB =========='); + + // DŮLEŽITÉ: Počkat až se tab zobrazí a DOM se vykreslí + setTimeout(() => { + console.log('[Tab] --- Timeout fired, starting redraw ---'); + + const flowTab = document.getElementById('flow-tab'); + console.log('[Tab] Flow tab visible?', flowTab && flowTab.classList.contains('active')); + console.log('[Tab] Flow tab offsetHeight:', flowTab?.offsetHeight); + + // OPRAVA: Zkontrolovat jestli je tab skutečně viditelný + if (!flowTab || !flowTab.classList.contains('active')) { + console.warn('[Tab] ✗ Flow tab not visible yet, aborting redraw'); + return; + } + + // 3. Invalidovat cache pozic + cachedNodeCenters = null; + lastLayoutHash = null; + console.log('[Tab] ✓ Cache invalidated'); + + // 4. Force browser reflow aby DOM byl stabilní + if (flowTab) { + const reflow = flowTab.offsetHeight; // Trigger reflow + console.log('[Tab] ✓ Browser reflow triggered:', reflow, 'px'); + } + + // 5. Načíst fresh pozice node elementů + console.log('[Tab] Getting node centers...'); + const centers = getNodeCenters(); + console.log('[Tab] Node centers result:', centers); + + // OPRAVA: Zkontrolovat jestli se pozice načetly správně + if (!centers || Object.keys(centers).length === 0) { + console.error('[Tab] ✗ Failed to get node centers (DOM not ready), retrying...'); + // Zkusit znovu s delším timeout + setTimeout(() => { + cachedNodeCenters = null; + lastLayoutHash = null; + const retryCenters = getNodeCenters(); + console.log('[Tab] Retry node centers result:', retryCenters); + + if (!retryCenters || Object.keys(retryCenters).length === 0) { + console.error('[Tab] ✗ Retry also failed, giving up'); + return; + } + + console.log('[Tab] ✓ Node centers loaded on retry:', Object.keys(retryCenters).length); + drawConnections(); + needsFlowReinitialize = true; + loadData(); + console.log('[Tab] ✓ Retry complete'); + }, 200); + return; + } + + // 6. Překreslit čáry (teď už máme správné pozice) + console.log('[Tab] ✓ Node centers cached:', Object.keys(centers).length); + console.log('[Tab] Drawing connections...'); + drawConnections(); + console.log('[Tab] ✓ Connections drawn'); + + // 7. Nastavit flag pro vynucené restartování animací + needsFlowReinitialize = true; + console.log('[Tab] Flag needsFlowReinitialize set to TRUE'); + + // 8. Načíst aktuální data a restartovat particles + console.log('[Tab] Loading fresh data for animations...'); + loadData(); // Načte data a zavolá animateFlow() s aktuálními hodnotami + console.log('[Tab] ========== TOKY TAB SWITCH COMPLETE =========='); + }, 150); // Delší timeout aby se DOM stihl vykreslit + } + + // Load data when entering pricing tab + if (tabName === 'pricing') { + const tabSwitchStart = performance.now(); + console.log('[Tab] ========== SWITCHING TO PRICING TAB =========='); + // Počkat až se tab zobrazí a canvas bude viditelný + setTimeout(() => { + const afterTimeout = performance.now(); + console.log(`[Pricing] Tab visible after ${(afterTimeout - tabSwitchStart).toFixed(0)}ms timeout, loading pricing data...`); + loadPricingData(); + + // Subscribe to Battery Health updates (once) + if (typeof subscribeBatteryHealthUpdates === 'function') { + subscribeBatteryHealthUpdates(); + } + }, 150); // Stejný timeout jako u Toky pro konzistenci + } + + // Load boiler dashboard when entering boiler tab + if (tabName === 'boiler') { + console.log('[Tab] ========== SWITCHING TO BOILER TAB =========='); + setTimeout(() => { + console.log('[Boiler] Tab visible, initializing boiler dashboard...'); + if (typeof initBoilerDashboard === 'function') { + initBoilerDashboard(); + } else { + console.error('[Boiler] initBoilerDashboard function not found'); + } + }, 150); + } + +} + +// === BOILER (enhanced in dashboard-boiler.js) === +var loadPricingData = window.DashboardPricing.loadPricingData; +var updatePlannedConsumptionStats = window.DashboardPricing.updatePlannedConsumptionStats; +var tileDialog = null; + +// === CUSTOM TILES (moved to dashboard-tiles.js) === +var initCustomTiles = window.DashboardTiles.initCustomTiles; +var renderAllTiles = window.DashboardTiles.renderAllTiles; +var updateTileCount = window.DashboardTiles.updateTileCount; +var toggleTilesVisibility = window.DashboardTiles.toggleTilesVisibility; +var resetAllTiles = window.DashboardTiles.resetAllTiles; + +/** + * Render icon - podporuje emoji i MDI ikony + * @param {string} icon - Icon string (emoji nebo mdi:xxx) + * @param {string} color - Icon color + * @returns {string} - HTML string + */ +function renderIcon(icon, color) { + if (!icon) return ''; + + // MDI ikona (formát mdi:xxx) - použít emoji fallback protože ha-icon nefunguje v iframe + if (icon.startsWith('mdi:')) { + const iconName = icon.substring(4); // Odstranit 'mdi:' prefix + + // Emoji mapa - stejná jako v dashboard-dialog.js + const emojiMap = { + // Spotřebiče + 'fridge': '❄️', 'fridge-outline': '❄️', 'dishwasher': '🍽️', 'washing-machine': '🧺', + 'tumble-dryer': '🌪️', 'stove': '🔥', 'microwave': '📦', 'coffee-maker': '☕', + 'kettle': '🫖', 'toaster': '🍞', + // Osvětlení + 'lightbulb': '💡', 'lightbulb-outline': '💡', 'lamp': '🪔', 'ceiling-light': '💡', + 'floor-lamp': '🪔', 'led-strip': '✨', 'led-strip-variant': '✨', 'wall-sconce': '💡', + 'chandelier': '💡', + // Vytápění + 'thermometer': '🌡️', 'thermostat': '🌡️', 'radiator': '♨️', 'radiator-disabled': '❄️', + 'heat-pump': '♨️', 'air-conditioner': '❄️', 'fan': '🌀', 'hvac': '♨️', 'fire': '🔥', + 'snowflake': '❄️', + // Energie + 'lightning-bolt': '⚡', 'flash': '⚡', 'battery': '🔋', 'battery-charging': '🔋', + 'battery-50': '🔋', 'solar-panel': '☀️', 'solar-power': '☀️', 'meter-electric': '⚡', + 'power-plug': '🔌', 'power-socket': '🔌', + // Auto + 'car': '🚗', 'car-electric': '🚘', 'car-battery': '🔋', 'ev-station': '🔌', + 'ev-plug-type2': '🔌', 'garage': '🏠', 'garage-open': '🏠', + // Zabezpečení + 'door': '🚪', 'door-open': '🚪', 'lock': '🔒', 'lock-open': '🔓', 'shield-home': '🛡️', + 'cctv': '📹', 'camera': '📹', 'motion-sensor': '👁️', 'alarm-light': '🚨', 'bell': '🔔', + // Okna + 'window-closed': '🪟', 'window-open': '🪟', 'blinds': '🪟', 'blinds-open': '🪟', + 'curtains': '🪟', 'roller-shade': '🪟', + // Média + 'television': '📺', 'speaker': '🔊', 'speaker-wireless': '🔊', 'music': '🎵', + 'volume-high': '🔊', 'cast': '📡', 'chromecast': '📡', + // Síť + 'router-wireless': '📡', 'wifi': '📶', 'access-point': '📡', 'lan': '🌐', + 'network': '🌐', 'home-assistant': '🏠', + // Voda + 'water': '💧', 'water-percent': '💧', 'water-boiler': '♨️', 'water-pump': '💧', + 'shower': '🚿', 'toilet': '🚽', 'faucet': '🚰', 'pipe': '🔧', + // Počasí + 'weather-sunny': '☀️', 'weather-cloudy': '☁️', 'weather-night': '🌙', + 'weather-rainy': '🌧️', 'weather-snowy': '❄️', 'weather-windy': '💨', + // Ostatní + 'information': 'ℹ️', 'help-circle': '❓', 'alert-circle': '⚠️', + 'checkbox-marked-circle': '✅', 'toggle-switch': '🔘', 'power': '⚡', 'sync': '🔄' + }; + + const emoji = emojiMap[iconName] || '⚙️'; + return `${emoji}`; + } + + // Emoji nebo jiný text + return icon; +}/** + * Render entity tile content + * @param {object} config - Entity tile config + * @param {string} side - Tile side (left/right) + * @param {number} index - Tile index + * @returns {string} - HTML string + */ +function renderEntityTile(config, side, index) { + const hass = getHass(); + if (!hass || !hass.states) { + return '
HA nedostupné
'; + } + + const state = hass.states[config.entity_id]; + if (!state) { + return `
Entita nenalezena:
${config.entity_id}
`; + } + + const label = config.label || state.attributes.friendly_name || config.entity_id; + // Použij POUZE ikonu z config, pokud není nastavena, použij výchozí - nikdy ne z HA state + const icon = config.icon || '📊'; + let value = state.state; + let unit = state.attributes.unit_of_measurement || ''; + const color = config.color || '#03A9F4'; + + // Konverze W/Wh na kW/kWh pokud >= 1000 + if (unit === 'W' || unit === 'Wh') { + const numValue = parseFloat(value); + if (!isNaN(numValue)) { + if (Math.abs(numValue) >= 1000) { + value = (numValue / 1000).toFixed(1); + unit = unit === 'W' ? 'kW' : 'kWh'; + } else { + value = Math.round(numValue); + } + } + } + + // Podporné entity + let supportHtml = ''; + if (config.support_entities) { + // Top right + if (config.support_entities.top_right) { + const topRightState = hass.states[config.support_entities.top_right]; + if (topRightState) { + let topRightValue = topRightState.state; + let topRightUnit = topRightState.attributes.unit_of_measurement || ''; + const topRightIcon = topRightState.attributes.icon || ''; + + // Konverze W/Wh na kW/kWh + if (topRightUnit === 'W' || topRightUnit === 'Wh') { + const numValue = parseFloat(topRightValue); + if (!isNaN(numValue)) { + if (Math.abs(numValue) >= 1000) { + topRightValue = (numValue / 1000).toFixed(1); + topRightUnit = topRightUnit === 'W' ? 'kW' : 'kWh'; + } else { + topRightValue = Math.round(numValue); + } + } + } + + supportHtml += ` +
+ ${topRightIcon} + ${topRightValue}${topRightUnit} +
+ `; + } + } + + // Bottom right + if (config.support_entities.bottom_right) { + const bottomRightState = hass.states[config.support_entities.bottom_right]; + if (bottomRightState) { + let bottomRightValue = bottomRightState.state; + let bottomRightUnit = bottomRightState.attributes.unit_of_measurement || ''; + const bottomRightIcon = bottomRightState.attributes.icon || ''; + + // Konverze W/Wh na kW/kWh + if (bottomRightUnit === 'W' || bottomRightUnit === 'Wh') { + const numValue = parseFloat(bottomRightValue); + if (!isNaN(numValue)) { + if (Math.abs(numValue) >= 1000) { + bottomRightValue = (numValue / 1000).toFixed(1); + bottomRightUnit = bottomRightUnit === 'W' ? 'kW' : 'kWh'; + } else { + bottomRightValue = Math.round(numValue); + } + } + } + + supportHtml += ` +
+ ${bottomRightIcon} + ${bottomRightValue}${bottomRightUnit} +
+ `; + } + } + } + + // Detekce neaktivního stavu (0 W nebo 0 hodnota) + const numericValue = parseFloat(state.state); + const isInactive = !isNaN(numericValue) && numericValue === 0; + const inactiveClass = isInactive ? ' tile-inactive' : ''; + + return ` +
+
+
${renderIcon(icon, color)}
+
${value}${unit}
+
+ ${supportHtml} +
${label}
+
+ `; +} + +/** + * Render button tile content + * @param {object} config - Button tile config + * @param {string} side - Tile side (left/right) + * @param {number} index - Tile index + * @returns {string} - HTML string + */ +function renderButtonTile(config, side, index) { + const hass = getHass(); + if (!hass || !hass.states) { + return '
HA nedostupné
'; + } + + const state = hass.states[config.entity_id]; + if (!state) { + return `
Entita nenalezena:
${config.entity_id}
`; + } + + const label = config.label || state.attributes.friendly_name || config.entity_id; + // Použij POUZE ikonu z config, pokud není nastavena, použij výchozí - nikdy ne z HA state + const icon = config.icon || '🔘'; + const color = config.color || '#FFC107'; + const action = config.action || 'toggle'; + const isOn = state.state === 'on'; + + const buttonClass = isOn ? 'tile-button-active' : 'tile-button-inactive'; + + // Popis akce pro uživatele + const actionLabels = { + 'toggle': 'Přepnout', + 'turn_on': 'Zapnout', + 'turn_off': 'Vypnout' + }; + const actionLabel = actionLabels[action] || 'Ovládat'; + + // Podporné entity + let supportHtml = ''; + if (config.support_entities) { + // Top right + if (config.support_entities.top_right) { + const topRightState = hass.states[config.support_entities.top_right]; + if (topRightState) { + let topRightValue = topRightState.state; + let topRightUnit = topRightState.attributes.unit_of_measurement || ''; + const topRightIcon = topRightState.attributes.icon || ''; + + // Konverze W/Wh na kW/kWh + if (topRightUnit === 'W' || topRightUnit === 'Wh') { + const numValue = parseFloat(topRightValue); + if (!isNaN(numValue)) { + if (Math.abs(numValue) >= 1000) { + topRightValue = (numValue / 1000).toFixed(1); + topRightUnit = topRightUnit === 'W' ? 'kW' : 'kWh'; + } else { + topRightValue = Math.round(numValue); + } + } + } + + supportHtml += ` +
+ ${topRightIcon} + ${topRightValue}${topRightUnit} +
+ `; + } + } + + // Bottom right + if (config.support_entities.bottom_right) { + const bottomRightState = hass.states[config.support_entities.bottom_right]; + if (bottomRightState) { + let bottomRightValue = bottomRightState.state; + let bottomRightUnit = bottomRightState.attributes.unit_of_measurement || ''; + const bottomRightIcon = bottomRightState.attributes.icon || ''; + + // Konverze W/Wh na kW/kWh + if (bottomRightUnit === 'W' || bottomRightUnit === 'Wh') { + const numValue = parseFloat(bottomRightValue); + if (!isNaN(numValue)) { + if (Math.abs(numValue) >= 1000) { + bottomRightValue = (numValue / 1000).toFixed(1); + bottomRightUnit = bottomRightUnit === 'W' ? 'kW' : 'kWh'; + } else { + bottomRightValue = Math.round(numValue); + } + } + } + + supportHtml += ` +
+ ${bottomRightIcon} + ${bottomRightValue}${bottomRightUnit} +
+ `; + } + } + } + + return ` +
+
+
${renderIcon(icon, color)}
+
${isOn ? 'ON' : 'OFF'}
+
+ ${supportHtml} +
${label} • ${actionLabel}
+
+ `; +} + +/** + * Execute button action + * @param {string} entityId - Entity ID + * @param {string} action - Action (toggle, turn_on, turn_off) + */ +function executeTileButtonAction(entityId, action) { + const hass = getHass(); + if (!hass) { + console.error('[Tiles] Cannot execute action - no HA connection'); + return; + } + + const domain = entityId.split('.')[0]; + const service = action === 'toggle' ? 'toggle' : action; + + console.log(`[Tiles] Calling ${domain}.${service} on ${entityId}`); + + hass.callService(domain, service, { entity_id: entityId }) + .then(() => { + console.log(`[Tiles] Service call successful`); + // Re-render tiles after state change (debounced) + setTimeout(renderAllTiles, 500); + }) + .catch((err) => { + console.error(`[Tiles] Service call failed:`, err); + alert(`Chyba při volání služby: ${err.message}`); + }); +} + +// === ČHMÚ (moved to dashboard-chmu.js) === +var updateChmuWarningBadge = window.DashboardChmu?.updateChmuWarningBadge; +var toggleChmuWarningModal = window.DashboardChmu?.toggleChmuWarningModal; +var openChmuWarningModal = window.DashboardChmu?.openChmuWarningModal; +var closeChmuWarningModal = window.DashboardChmu?.closeChmuWarningModal; + +// === BATTERY & PRICING ANALYTICS (moved to modules) === +var updateBatteryEfficiencyBar = window.DashboardAnalytics?.updateBatteryEfficiencyBar; +var updateWhatIfAnalysis = window.DashboardPricing?.updateWhatIfAnalysis; +var updateModeRecommendations = window.DashboardPricing?.updateModeRecommendations; + +// === ANALYTICS (moved to dashboard-analytics.js) === +var initPerformanceChart = window.DashboardAnalytics?.initPerformanceChart; +var updatePerformanceChart = window.DashboardAnalytics?.updatePerformanceChart; +var buildYesterdayAnalysis = window.DashboardAnalytics?.buildYesterdayAnalysis; +var renderYesterdayAnalysis = window.DashboardAnalytics?.renderYesterdayAnalysis; + +// === EXPORT TILE RENDERING FUNCTIONS FOR TILES.JS === +window.renderEntityTile = renderEntityTile; +window.renderButtonTile = renderButtonTile; +window.executeTileButtonAction = executeTileButtonAction; +window.renderAllTiles = renderAllTiles; diff --git a/custom_components/oig_cloud/www/js/core/state-watcher.js b/custom_components/oig_cloud/www/js/core/state-watcher.js new file mode 100644 index 00000000..5f205bc9 --- /dev/null +++ b/custom_components/oig_cloud/www/js/core/state-watcher.js @@ -0,0 +1,151 @@ +/* eslint-disable */ +/** + * OIG Cloud Dashboard - State Watcher (no extra WebSocket subscriptions) + * + * Uses the parent HA frontend's `hass.states` (already kept up to date by HA) + * and polls only selected entities for `last_updated` changes. + * + * This avoids creating additional `subscribeEvents('state_changed')` streams which + * can overload mobile clients (Safari/iOS) and trigger HA "pending messages" protection. + */ + +(function () { + const callbacks = new Set(); + const watched = new Set(); + const lastUpdated = new Map(); + + let timer = null; + let rescanTimer = null; + let running = false; + + function _getHassSafe() { + try { + return getHass?.() || null; + } catch (e) { + return null; + } + } + + function registerEntities(entityIds) { + if (!entityIds) return; + for (const id of entityIds) { + if (typeof id === 'string' && id.length > 0) watched.add(id); + } + } + + function registerPrefix(prefix) { + const hass = _getHassSafe(); + if (!hass || !hass.states || typeof prefix !== 'string') return; + + const ids = Object.keys(hass.states); + const runtime = window.OIG_RUNTIME || {}; + const shouldChunk = !!(runtime.isHaApp || runtime.isMobile || ids.length > 800); + + if (!shouldChunk) { + registerEntities(ids.filter((eid) => eid.startsWith(prefix))); + return; + } + + let index = 0; + const chunkSize = runtime.isHaApp || runtime.isMobile ? 200 : 400; + + const step = (deadline) => { + const timeBudget = deadline && typeof deadline.timeRemaining === 'function' + ? deadline.timeRemaining() + : 0; + const useTimeBudget = timeBudget > 0; + const start = index; + while (index < ids.length) { + const id = ids[index]; + if (id.startsWith(prefix)) watched.add(id); + index += 1; + if (index - start >= chunkSize) break; + if (useTimeBudget && deadline.timeRemaining() < 3) break; + } + + if (index < ids.length) { + schedule(); + } + }; + + const schedule = () => { + if (typeof window.requestIdleCallback === 'function') { + window.requestIdleCallback(step, { timeout: 250 }); + } else { + setTimeout(step, 16); + } + }; + + schedule(); + } + + function onEntityChange(cb) { + if (typeof cb !== 'function') return () => {}; + callbacks.add(cb); + return () => callbacks.delete(cb); + } + + function _tick() { + const hass = _getHassSafe(); + if (!hass || !hass.states) return; + + for (const entityId of watched) { + const st = hass.states[entityId]; + if (!st) continue; + const lu = st.last_updated; + const prev = lastUpdated.get(entityId); + if (prev === lu) continue; + lastUpdated.set(entityId, lu); + for (const cb of callbacks) { + try { + cb(entityId, st); + } catch (e) { + // keep watcher resilient + } + } + } + } + + function start(options = {}) { + if (running) return; + running = true; + + const runtime = window.OIG_RUNTIME || {}; + const baseInterval = Number(options.intervalMs || 1000); + const intervalMs = (runtime.isHaApp || runtime.isMobile) + ? Math.max(2000, baseInterval) + : baseInterval; + const prefixes = Array.isArray(options.prefixes) ? options.prefixes : []; + + // Initial registration + prefixes.forEach(registerPrefix); + + // Polling tick + timer = setInterval(_tick, Math.max(250, intervalMs)); + + // Rescan prefixes occasionally (new entities, reloads) + const rescanInterval = (runtime.isHaApp || runtime.isMobile) ? 60000 : 30000; + rescanTimer = setInterval(() => { + prefixes.forEach(registerPrefix); + }, rescanInterval); + + console.log('[StateWatcher] Started', { intervalMs, prefixes, watched: watched.size }); + } + + function stop() { + running = false; + if (timer) clearInterval(timer); + if (rescanTimer) clearInterval(rescanTimer); + timer = null; + rescanTimer = null; + console.log('[StateWatcher] Stopped'); + } + + window.DashboardStateWatcher = { + start, + stop, + registerEntities, + registerPrefix, + onEntityChange, + }; +})(); diff --git a/custom_components/oig_cloud/www/js/core/utils.js b/custom_components/oig_cloud/www/js/core/utils.js new file mode 100644 index 00000000..cb43bcf6 --- /dev/null +++ b/custom_components/oig_cloud/www/js/core/utils.js @@ -0,0 +1,571 @@ +/* eslint-disable */ +/** + * OIG Cloud Dashboard - Utility Functions + * + * Helpers pro formatting, notifications, debouncing a další utility funkce. + * Extrahováno z monolitického dashboard-core.js + * + * @module dashboard-utils + * @version 1.0.0 + * @date 2025-11-02 + */ + +// ============================================================================ +// FORMATTING FUNCTIONS +// ============================================================================ + +/** + * Formátuje výkon (W → kW při >= 1000W) + * @param {number} watts - Výkon ve wattech + * @returns {string} Formátovaný string s jednotkou + */ +function formatPower(watts) { + if (watts === null || watts === undefined || isNaN(watts)) return '-- W'; + const absWatts = Math.abs(watts); + if (absWatts >= 1000) { + return (watts / 1000).toFixed(2) + ' kW'; + } else { + return Math.round(watts) + ' W'; + } +} + +/** + * Formátuje energii (Wh → kWh při >= 1000Wh) + * @param {number} wattHours - Energie ve watthodinách + * @returns {string} Formátovaný string s jednotkou + */ +function formatEnergy(wattHours) { + if (wattHours === null || wattHours === undefined || isNaN(wattHours)) return '-- Wh'; + const absWh = Math.abs(wattHours); + if (absWh >= 1000) { + return (wattHours / 1000).toFixed(2) + ' kWh'; + } else { + return Math.round(wattHours) + ' Wh'; + } +} + +/** + * Formátuje relativní čas (před X minutami/hodinami/dny) + * @param {Date} date - Datum k porovnání + * @returns {string} Lidsky čitelný relativní čas + */ +function formatRelativeTime(date) { + if (!date) return ''; + + const now = new Date(); + const diffMs = now - date; + const diffSec = Math.floor(diffMs / 1000); + const diffMin = Math.floor(diffSec / 60); + const diffHour = Math.floor(diffMin / 60); + const diffDay = Math.floor(diffHour / 24); + + if (diffSec < 10) return 'právě teď'; + if (diffSec < 60) return `před ${diffSec} sekundami`; + if (diffMin === 1) return 'před minutou'; + if (diffMin < 60) return `před ${diffMin} minutami`; + if (diffHour === 1) return 'před hodinou'; + if (diffHour < 24) return `před ${diffHour} hodinami`; + if (diffDay === 1) return 'včera'; + if (diffDay < 7) return `před ${diffDay} dny`; + + return date.toLocaleDateString('cs-CZ'); +} + +/** + * Formátuje ČHMÚ datetime (ISO string → lidsky čitelný formát) + * @param {string} isoString - ISO datetime string + * @returns {string} Formátovaný čas + */ +function formatChmuDateTime(isoString) { + if (!isoString) return ''; + try { + const date = new Date(isoString); + return date.toLocaleString('cs-CZ', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + hour: '2-digit', + minute: '2-digit' + }); + } catch (e) { + return isoString; + } +} + +/** + * Formátuje číslo s desetinným místem + * @param {number} value - Hodnota + * @param {number} decimals - Počet desetinných míst + * @returns {string} Formátované číslo + */ +function formatNumber(value, decimals = 2) { + if (value === null || value === undefined || isNaN(value)) return '--'; + return value.toFixed(decimals); +} + +/** + * Formátuje cenu v CZK + * @param {number} value - Cena + * @returns {string} Formátovaná cena s jednotkou + */ +function formatCurrency(value) { + if (value === null || value === undefined || isNaN(value)) return '-- CZK'; + return `${value.toFixed(2)} CZK`; +} + +/** + * Formátuje procenta + * @param {number} value - Hodnota (0-100) + * @returns {string} Formátovaná procenta + */ +function formatPercent(value) { + if (value === null || value === undefined || isNaN(value)) return '-- %'; + return `${Math.round(value)} %`; +} + +// ============================================================================ +// NOTIFICATION SYSTEM +// ============================================================================ + +/** + * Zobrazí notifikaci (toast) + * @param {string} title - Nadpis notifikace + * @param {string} message - Text zprávy + * @param {string} type - Typ: 'success', 'error', 'warning', 'info' + */ +function showNotification(title, message, type = 'success') { + // Pokus o použití HA notification + const hass = window.getHass?.(); + if (hass?.callService) { + try { + hass.callService('persistent_notification', 'create', { + title: title, + message: message, + notification_id: `oig_dashboard_${Date.now()}` + }); + return; + } catch (e) { + console.warn('[Notification] HA notification failed, using fallback:', e); + } + } + + // Fallback: browser console + alert (jen pro error) + console.log(`[${type.toUpperCase()}] ${title}: ${message}`); + if (type === 'error') { + alert(`${title}\n\n${message}`); + } +} + +// ============================================================================ +// DEBOUNCE HELPERS +// ============================================================================ + +/** + * Vytvoří debounced verzi funkce + * @param {Function} func - Funkce k debounce + * @param {number} delay - Delay v ms + * @returns {Function} Debounced funkce + */ +function debounce(func, delay) { + let timeout; + return function(...args) { + clearTimeout(timeout); + timeout = setTimeout(() => func.apply(this, args), delay); + }; +} + +/** + * Vytvoří throttled verzi funkce + * @param {Function} func - Funkce k throttle + * @param {number} limit - Minimální interval v ms + * @returns {Function} Throttled funkce + */ +function throttle(func, limit) { + let inThrottle; + return function(...args) { + if (!inThrottle) { + func.apply(this, args); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + }; +} + +// ============================================================================ +// DOM HELPERS +// ============================================================================ + +// Cache pro previousValues (detekce změn) +const previousValues = {}; +const _flipPadLengths = {}; +const _flipElementTokens = new WeakMap(); +let _flipTokenCounter = 0; +const _transientClassTimeouts = new WeakMap(); + +function _triggerTransientClass(element, className, durationMs) { + if (!element || !className) return; + + let timeouts = _transientClassTimeouts.get(element); + if (!timeouts) { + timeouts = new Map(); + _transientClassTimeouts.set(element, timeouts); + } + + const existing = timeouts.get(className); + if (existing) { + clearTimeout(existing); + } + + // Restart animation reliably by removing + forcing reflow + adding back. + element.classList.remove(className); + // eslint-disable-next-line no-unused-expressions + element.offsetWidth; + element.classList.add(className); + + const timeoutId = setTimeout(() => { + element.classList.remove(className); + timeouts.delete(className); + }, durationMs); + timeouts.set(className, timeoutId); +} + +function _splitGraphemes(value) { + const str = value === null || value === undefined ? '' : String(value); + try { + if (typeof Intl !== 'undefined' && Intl.Segmenter) { + const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' }); + return Array.from(segmenter.segment(str), (s) => s.segment); + } + } catch (e) { + // Ignore and fall back + } + return Array.from(str); +} + +function _renderChar(char) { + return char === '' || char === ' ' ? '\u00A0' : char; +} + +function _prefersReducedMotion() { + try { + return !!(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches); + } catch (e) { + return false; + } +} + +function _animateFlipCell(cell, fromChar, toChar, token, hostElement) { + const staticTop = cell.querySelector('.oig-flip-static-top'); + const staticBottom = cell.querySelector('.oig-flip-static-bottom'); + const size = cell.querySelector('.oig-flip-size'); + if (!staticTop || !staticBottom || !size) return; + + // Ensure width matches the final character (prevents jitter) + size.textContent = _renderChar(toChar); + + const animTop = document.createElement('span'); + animTop.className = 'oig-flip-face oig-flip-anim-top'; + animTop.textContent = _renderChar(fromChar); + + const animBottom = document.createElement('span'); + animBottom.className = 'oig-flip-face oig-flip-anim-bottom'; + animBottom.textContent = _renderChar(toChar); + + cell.appendChild(animTop); + cell.appendChild(animBottom); + + animTop.addEventListener('animationend', () => { + if (_flipElementTokens.get(hostElement) !== token) return; + staticTop.textContent = _renderChar(toChar); + animTop.remove(); + }, { once: true }); + + animBottom.addEventListener('animationend', () => { + if (_flipElementTokens.get(hostElement) !== token) return; + staticBottom.textContent = _renderChar(toChar); + animBottom.remove(); + }, { once: true }); +} + +function _renderSplitFlap(element, cacheKey, oldValue, newValue, forceFlip = false) { + if (!element) return; + if (_prefersReducedMotion()) { + element.textContent = newValue; + return; + } + + const disablePad = element.dataset?.flipPad === 'none'; + + const oldChars = _splitGraphemes(oldValue); + const newChars = _splitGraphemes(newValue); + + const targetLen = disablePad + ? newChars.length + : Math.max(_flipPadLengths[cacheKey] || 0, oldChars.length, newChars.length); + if (!disablePad) { + _flipPadLengths[cacheKey] = targetLen; + } + + // When padding is disabled, we intentionally do NOT pad with trailing spaces, + // so shorter values stay visually centered (no "empty cells" on the right). + if (!disablePad) { + while (oldChars.length < targetLen) oldChars.push(' '); + while (newChars.length < targetLen) newChars.push(' '); + } + + const token = ++_flipTokenCounter; + _flipElementTokens.set(element, token); + + const board = document.createElement('span'); + board.className = 'oig-flipboard'; + + for (let i = 0; i < targetLen; i++) { + const fromChar = oldChars[i] ?? ' '; + const toChar = newChars[i] ?? ' '; + + const cell = document.createElement('span'); + cell.className = 'oig-flip-cell'; + + // Hidden sizing span keeps layout stable and copy-paste friendly + const size = document.createElement('span'); + size.className = 'oig-flip-size'; + size.textContent = _renderChar(toChar); + + const staticTop = document.createElement('span'); + staticTop.className = 'oig-flip-face oig-flip-static-top'; + staticTop.textContent = _renderChar(fromChar); + + const staticBottom = document.createElement('span'); + staticBottom.className = 'oig-flip-face oig-flip-static-bottom'; + staticBottom.textContent = _renderChar(fromChar); + + cell.appendChild(size); + cell.appendChild(staticTop); + cell.appendChild(staticBottom); + board.appendChild(cell); + + if (forceFlip || fromChar !== toChar) { + _animateFlipCell(cell, fromChar, toChar, token, element); + } else { + // No animation needed; ensure final character is shown + staticTop.textContent = _renderChar(toChar); + staticBottom.textContent = _renderChar(toChar); + } + } + + element.textContent = ''; + element.appendChild(board); +} + +/** + * Aktualizuje element jen pokud se hodnota změnila + * @param {string} elementId - ID elementu + * @param {string} newValue - Nová hodnota + * @param {string} cacheKey - Klíč pro cache (optional) + * @param {boolean} isFallback - True pokud je hodnota fallback (např. '--') + * @param {boolean} animate - True = krátká vizuální animace při změně + * @returns {boolean} True pokud se změnilo + */ +function updateElementIfChanged(elementId, newValue, cacheKey, isFallback = false, animate = true) { + if (!cacheKey) cacheKey = elementId; + const element = document.getElementById(elementId); + if (!element) return false; + + const nextValue = newValue === null || newValue === undefined ? '' : String(newValue); + + // Update fallback visualization + if (isFallback) { + element.classList.add('fallback-value'); + element.setAttribute('title', 'Data nejsou k dispozici'); + } else { + element.classList.remove('fallback-value'); + element.removeAttribute('title'); + } + + // Update value if changed + const hasPrev = previousValues[cacheKey] !== undefined; + const prevValue = hasPrev ? String(previousValues[cacheKey]) : undefined; + if (!hasPrev || prevValue !== nextValue) { + // Remember new value first (so rapid updates don't fight) + previousValues[cacheKey] = nextValue; + + if (animate && !isFallback) { + let fromValue = hasPrev ? prevValue : (element.textContent || ''); + // First load: still flip even if the element already contains the same text (tiles render directly). + if (!hasPrev && fromValue === nextValue) { + fromValue = ''; + } + _renderSplitFlap(element, cacheKey, fromValue, nextValue, !hasPrev); + } else { + element.textContent = nextValue; + } + return true; + } + return false; +} + +/** + * Aktualizuje CSS třídu jen pokud se stav změnil + * @param {HTMLElement} element - DOM element + * @param {string} className - Název třídy + * @param {boolean} shouldAdd - True = přidat, False = odebrat + * @returns {boolean} True pokud se změnilo + */ +function updateClassIfChanged(element, className, shouldAdd) { + if (!element) return false; + const hasClass = element.classList.contains(className); + if (shouldAdd && !hasClass) { + element.classList.add(className); + return true; + } else if (!shouldAdd && hasClass) { + element.classList.remove(className); + return true; + } + return false; +} + +/** + * Najde element s retry mechanikou + * @param {string} selector - CSS selector + * @param {number} maxRetries - Max počet pokusů + * @param {number} delay - Delay mezi pokusy (ms) + * @returns {Promise} Element nebo null + */ +async function waitForElement(selector, maxRetries = 10, delay = 100) { + for (let i = 0; i < maxRetries; i++) { + const element = document.querySelector(selector); + if (element) return element; + await new Promise(resolve => setTimeout(resolve, delay)); + } + return null; +} + +// ============================================================================ +// VALIDATION HELPERS +// ============================================================================ + +/** + * Validuje, zda je hodnota číslo v rozsahu + * @param {*} value - Hodnota k validaci + * @param {number} min - Minimální hodnota + * @param {number} max - Maximální hodnota + * @returns {boolean} True pokud je validní + */ +function isNumberInRange(value, min, max) { + const num = parseFloat(value); + return !isNaN(num) && num >= min && num <= max; +} + +/** + * Validuje entity ID formát (sensor.xxx_yyy) + * @param {string} entityId - Entity ID + * @returns {boolean} True pokud je validní + */ +function isValidEntityId(entityId) { + if (typeof entityId !== 'string') return false; + return /^[a-z_]+\.[a-z0-9_]+$/.test(entityId); +} + +// ============================================================================ +// TIME HELPERS +// ============================================================================ + +/** + * Vrátí aktuální čas ve formátu HH:MM:SS + * @returns {string} Formátovaný čas + */ +function getCurrentTimeString() { + const now = new Date(); + return now.toLocaleTimeString('cs-CZ'); +} + +/** + * Převede sekundy na lidsky čitelný formát (1h 23m 45s) + * @param {number} seconds - Počet sekund + * @returns {string} Formátovaný čas + */ +function formatDuration(seconds) { + if (!seconds || seconds < 0) return '0s'; + + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = Math.floor(seconds % 60); + + const parts = []; + if (hours > 0) parts.push(`${hours}h`); + if (minutes > 0) parts.push(`${minutes}m`); + if (secs > 0 || parts.length === 0) parts.push(`${secs}s`); + + return parts.join(' '); +} + +// ============================================================================ +// SHIELD SENSOR UTILITIES +// ============================================================================ + +/** + * Find shield sensor ID with support for numeric suffixes + * Handles: sensor.oig__ or sensor.oig___2, _3, etc. + * @param {string} sensorName - Sensor name (without prefix) + * @returns {string} - Full entity ID + */ +function findShieldSensorId(sensorName) { + try { + const hass = getHass(); + if (!hass || !hass.states) { + console.warn(`[Shield] Cannot find ${sensorName} - hass not available`); + return `sensor.oig_${INVERTER_SN}_${sensorName}`; // Fallback to basic pattern + } + + const sensorPrefix = `sensor.oig_${INVERTER_SN}_${sensorName}`; + + // Find matching entity with strict pattern: + // - sensor.oig__ (exact match) + // - sensor.oig___2, _3, etc. (with numeric suffix) + const entityId = Object.keys(hass.states).find(id => { + if (id === sensorPrefix) { + return true; // Exact match + } + if (id.startsWith(sensorPrefix + '_')) { + // Check if suffix is numeric (e.g., _2, _3) + const suffix = id.substring(sensorPrefix.length + 1); + return /^\d+$/.test(suffix); + } + return false; + }); + + if (!entityId) { + console.warn(`[Shield] Sensor not found with prefix: ${sensorPrefix}`); + return `sensor.oig_${INVERTER_SN}_${sensorName}`; // Fallback to basic pattern + } + + return entityId; + } catch (e) { + console.error(`[Shield] Error finding sensor ${sensorName}:`, e); + return `sensor.oig_${INVERTER_SN}_${sensorName}`; // Fallback to basic pattern + } +} + +// Export utilities +if (typeof window !== 'undefined') { + window.DashboardUtils = { + formatPower, + formatEnergy, + formatRelativeTime, + formatChmuDateTime, + formatNumber, + formatCurrency, + formatPercent, + formatDuration, + showNotification, + debounce, + throttle, + updateElementIfChanged, + updateClassIfChanged, + waitForElement, + isNumberInRange, + isValidEntityId, + getCurrentTimeString, + findShieldSensorId + }; +} diff --git a/custom_components/oig_cloud/www/js/features/analytics.js b/custom_components/oig_cloud/www/js/features/analytics.js new file mode 100644 index 00000000..37269a3a --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/analytics.js @@ -0,0 +1,861 @@ +/* eslint-disable */ +// ============================================================================ +// ANALYTICS HELPERS +// ============================================================================ + +// Import ČHMÚ functions from dashboard-chmu.js +var toggleChmuWarningModal = window.DashboardChmu?.toggleChmuWarningModal; + +// Import Timeline functions from dashboard-timeline.js (var allows re-declaration) +var openTimelineDialog = window.DashboardTimeline?.openTimelineDialog; +var closeModeTimelineDialog = window.DashboardTimeline?.closeModeTimelineDialog; +var buildModeTimeline = window.DashboardTimeline?.buildModeTimeline; + +/** + * Initialize Today Plan Tile instance + * @param {HTMLElement} container - Container element + * @param {object} tileSummary - Tile summary data from API + */ +function initTodayPlanTile(container, tileSummary) { + if (!container) { + console.warn('[Today Plan Tile] Container not found - skipping render'); + return; + } + + // Lazy load TodayPlanTile class if not already loaded + if (typeof TodayPlanTile === 'undefined') { + console.log('[Today Plan Tile] Loading module...'); + const script = document.createElement('script'); + script.type = 'module'; + script.src = 'modules/today-plan-tile.js'; // Relativní cesta (stejný základ jako dashboard-core.js) + script.onload = () => { + console.log('[Today Plan Tile] Module loaded, rendering...'); + initTodayPlanTile(container, tileSummary); + }; + script.onerror = () => { + console.error('[Today Plan Tile] Failed to load module'); + }; + document.head.appendChild(script); + return; + } + + // Update existing instance or create new one + if (todayPlanTileInstance) { + console.log('[Today Plan Tile] Updating existing instance'); + todayPlanTileInstance.update(tileSummary); + } else { + console.log('[Today Plan Tile] Creating new instance'); + initTodayPlanTile(container, tileSummary); + } +} + +/** + * Load unified cost tile data from API + */ + + +var costComparisonTileInstance = null; +const COST_TILE_CACHE_TTL = 60 * 1000; +let costComparisonTileCache = null; +let costComparisonTileLastFetch = 0; +let costComparisonTilePromise = null; + +async function loadCostComparisonTile(force = false) { + const now = Date.now(); + + if (!force && costComparisonTileCache && now - costComparisonTileLastFetch < COST_TILE_CACHE_TTL) { + renderCostComparisonTile(costComparisonTileCache); + return costComparisonTileCache; + } + + if (!force && costComparisonTilePromise) { + return costComparisonTilePromise; + } + + const plannerPromise = window.PlannerState?.fetchSettings?.() || Promise.resolve(null); + + costComparisonTilePromise = Promise.all([fetchCostComparisonTileData(), plannerPromise]) + .then(([rawTiles, plannerSettings]) => { + const activePlan = + window.PlannerState?.resolveActivePlan?.( + plannerSettings || window.PlannerState?.getCachedSettings?.() + ) || 'hybrid'; + + const summary = buildCostComparisonSummary(rawTiles.hybrid, activePlan); + const payload = { hybrid: rawTiles.hybrid, comparison: summary }; + costComparisonTileCache = payload; + costComparisonTileLastFetch = Date.now(); + renderCostComparisonTile(payload); + return payload; + }) + .finally(() => { + costComparisonTilePromise = null; + }); + + return costComparisonTilePromise; +} + +async function fetchCostComparisonTileData(retryCount = 0, maxRetries = 3) { + try { + console.log(`[Cost Comparison] Loading data (attempt ${retryCount + 1}/${maxRetries + 1})`); + const hybridRes = await fetch(`/api/oig_cloud/battery_forecast/${INVERTER_SN}/unified_cost_tile`); + + if (!hybridRes.ok) { + const shouldRetry = (code) => code >= 500; + if (retryCount < maxRetries && shouldRetry(hybridRes.status)) { + const delay = Math.min(1000 * Math.pow(2, retryCount), 5000); + await new Promise((resolve) => setTimeout(resolve, delay)); + return fetchCostComparisonTileData(retryCount + 1, maxRetries); + } + throw new Error(`HTTP ${hybridRes.status}`); + } + + const hybridData = await hybridRes.json(); + return { hybrid: hybridData }; + } catch (error) { + console.error('[Cost Comparison] Failed to load', error); + if (retryCount < maxRetries) { + const delay = Math.min(1000 * Math.pow(2, retryCount), 5000); + await new Promise((resolve) => setTimeout(resolve, delay)); + return fetchCostComparisonTileData(retryCount + 1, maxRetries); + } + throw error; + } +} + +function buildCostComparisonSummary(hybridTile, activePlan = 'hybrid') { + const todayHybrid = (hybridTile || {}).today || {}; + + const actualSpent = + todayHybrid.actual_cost_so_far ?? + todayHybrid.actual_total_cost ?? + 0; + + function planSummary(dayData, planKey) { + const future = + dayData.future_plan_cost ?? + dayData.plan_total_cost ?? + 0; + return { + plan_key: planKey, + actual_cost: actualSpent, + future_plan_cost: future, + total_cost: actualSpent + future + }; + } + + const standardSummary = planSummary(todayHybrid, 'hybrid'); + return { + active_plan: activePlan, + actual_spent: Math.round(actualSpent * 100) / 100, + plans: { + standard: standardSummary + }, + delta_vs_standard: 0, + baseline: todayHybrid.baseline_comparison || null, + yesterday: (hybridTile || {}).yesterday || null, + tomorrow: { + standard: (hybridTile || {}).tomorrow?.plan_total_cost ?? null + } + }; +} + +function renderCostComparisonTile(data) { + const container = document.getElementById('cost-comparison-tile-container'); + if (!container) { + console.warn('[Cost Comparison] Container not found'); + return; + } + + if (typeof CostComparisonTile === 'undefined') { + const script = document.createElement('script'); + const payload = JSON.parse(JSON.stringify(data || {})); + script.src = `modules/cost-comparison-tile.js?v=${Date.now()}`; + script.onload = () => renderCostComparisonTile(payload); + script.onerror = () => console.error('[Cost Comparison] Failed to load module'); + document.head.appendChild(script); + return; + } + + if (!data || !data.comparison) { + container.innerHTML = ` +
+ 💰 Nákladový přehled + Čekám na data… +
+ `; + return; + } + + const options = { + onOpenHybrid: () => window.DashboardTimeline?.openTimelineDialog?.('today', 'hybrid') + }; + + if (costComparisonTileInstance) { + costComparisonTileInstance.update(data); + } else { + costComparisonTileInstance = new CostComparisonTile(container, data, options); + } +} + +/** + * Render TODAY's plan vs actual comparison + future intervals + * FIRST: "Průběžný výsledek" (completed intervals with plan vs actual) + * THEN: "Nadcházející intervaly" (future planned intervals) + */ +function renderTodayComparison(todayData, dailyPlanState) { + const container = document.getElementById('extended-timeline-container'); + if (!container) { + console.warn('[Extended Timeline] Container not found'); + return; + } + + const { date, intervals, summary } = todayData; + + if (!intervals || intervals.length === 0) { + container.innerHTML = ` +
+

+ 📅 Žádná data pro dnešní porovnání +

+
+ `; + return; + } + + // Split intervals: historical (completed) vs future (planned) + const historicalIntervals = intervals.filter(i => i.status === 'historical' && i.actual && i.planned); + const futureIntervals = intervals.filter(i => i.status !== 'historical'); + + let html = '
'; + + // Header with summary stats + html += ` +
+

📊 Dnes (${date}) - Plán vs Skutečnost

+ `; + + if (summary && historicalIntervals.length > 0) { + const deltaClass = summary.delta_cost > 0 ? 'worse' : 'better'; + const deltaIcon = summary.delta_cost > 0 ? '📈' : '📉'; + + html += ` +
+
+
Plánované náklady
+
${summary.planned_total_cost?.toFixed(2) || '0.00'} Kč
+
+
+
Skutečné náklady
+
${summary.actual_total_cost?.toFixed(2) || '0.00'} Kč
+
+
+
${deltaIcon} Rozdíl
+
+ ${summary.delta_cost > 0 ? '+' : ''}${summary.delta_cost?.toFixed(2) || '0.00'} Kč +
+
${summary.delta_cost > 0 ? 'Dráž než plán' : 'Levněji než plán'}
+
+
+
Přesnost režimů
+
${summary.accuracy_pct?.toFixed(0) || '0'}%
+
${historicalIntervals.length} intervalů dokončeno
+
+
+ `; + } + + html += '
'; // comparison-header + + // Only show if there are historical intervals + if (historicalIntervals.length === 0) { + html += ` +
+ ⏳ Zatím neproběhl žádný interval.
+ Porovnání bude k dispozici po dokončení prvního intervalu. +
+ `; + } else { + // Find top 3 worst deviations + const sortedByDelta = [...historicalIntervals] + .filter(i => i.delta && Math.abs(i.delta.net_cost) > 0.01) + .sort((a, b) => Math.abs(b.delta.net_cost) - Math.abs(a.delta.net_cost)) + .slice(0, 3); + + if (sortedByDelta.length > 0) { + html += ` +
+

⚠️ Největší odchylky od plánu

+
+ `; + + sortedByDelta.forEach((interval, idx) => { + const time = new Date(interval.time); + const timeStr = `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`; + const delta = interval.delta; + const deltaClass = delta.net_cost > 0 ? 'worse' : 'better'; + const icon = idx === 0 ? '🥇' : idx === 1 ? '🥈' : '🥉'; + + html += ` +
+ ${icon} + ${timeStr} + + ${interval.planned.mode_name} → ${interval.actual.mode_name} + + + ${delta.net_cost > 0 ? '+' : ''}${delta.net_cost.toFixed(2)} Kč + +
+ `; + }); + + html += ` +
+
+ `; + } + + // Detailed comparison table + html += ` +
+

📋 Detail všech dokončených intervalů

+ + + + + + + + + + + + + + + `; + + historicalIntervals.forEach(interval => { + const time = new Date(interval.time); + const timeStr = `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`; + const planned = interval.planned; + const actual = interval.actual; + const delta = interval.delta; + + const modeMatch = planned.mode_name === actual.mode_name; + const modeIcon = modeMatch ? '✅' : '❌'; + const deltaClass = delta && delta.net_cost > 0 ? 'worse' : delta && delta.net_cost < 0 ? 'better' : ''; + + const plannedModeConfig = MODE_CONFIG[planned.mode_name] || MODE_CONFIG['HOME I']; + const actualModeConfig = MODE_CONFIG[actual.mode_name] || MODE_CONFIG['HOME I']; + + html += ` + + + + + + + + + + + `; + }); + + html += ` + +
ČasPlánSkutečnostSOC plánSOC skutečnostNáklady plánNáklady skutečnostRozdíl
${timeStr} + + ${planned.mode_name} + + + ${modeIcon} + + ${actual.mode_name} + + ${planned.battery_soc?.toFixed(0) || '-'}%${actual.battery_soc?.toFixed(0) || '-'}%${planned.net_cost?.toFixed(2) || '0.00'} Kč${actual.net_cost?.toFixed(2) || '0.00'} Kč + ${delta && delta.net_cost ? + `${delta.net_cost > 0 ? '+' : ''}${delta.net_cost.toFixed(2)} Kč` : + '0.00 Kč' + } +
+
+ `; + } + + // === SEKCE 2: NADCHÁZEJÍCÍ INTERVALY === + if (futureIntervals.length > 0) { + html += ` +
+

🔮 Nadcházející intervaly (${futureIntervals.length})

+ + + + + + + + + + + + `; + + futureIntervals.forEach(interval => { + const time = new Date(interval.time); + const timeStr = `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`; + const planned = interval.planned; + const plannedModeConfig = MODE_CONFIG[planned?.mode_name] || MODE_CONFIG['HOME I']; + const isActive = interval.status === 'active'; + + html += ` + + + + + + + + `; + }); + + html += ` + +
ČasPlánovaný režimSOC plánNáklady plánSpotová cena
${timeStr}${isActive ? ' ⏱️' : ''} + + ${planned?.mode_name || 'N/A'} + + ${planned?.battery_soc?.toFixed(0) || '-'}%${planned?.net_cost?.toFixed(2) || '0.00'} Kč${planned?.spot_price?.toFixed(2) || '0.00'} Kč/kWh
+
+ `; + } + + html += '
'; // today-comparison + + container.innerHTML = html; +} + + +// ============================================================================= +// PHASE 2.10: YESTERDAY ANALYSIS - Včerejší plán vs skutečnost +// ============================================================================= + +/** + * Build yesterday's plan vs actual analysis + */ +async function buildYesterdayAnalysis() { + const apiUrl = `/api/oig_cloud/battery_forecast/${INVERTER_SN}/timeline?type=active`; + + try { + const response = await fetch(apiUrl); + if (!response.ok) { + console.error('[Yesterday Analysis] Failed to fetch data:', response.status); + return; + } + + const data = await response.json(); + const timelineExtended = data.timeline_extended; + + if (!timelineExtended || !timelineExtended.yesterday) { + console.warn('[Yesterday Analysis] No yesterday data available'); + showYesterdayNoData(); + return; + } + + console.log('[Yesterday Analysis] Loaded YESTERDAY data:', { + intervals: timelineExtended.yesterday?.intervals?.length || 0, + summary: timelineExtended.yesterday?.summary + }); + + // Render yesterday's analysis + renderYesterdayAnalysis(timelineExtended.yesterday); + + } catch (error) { + console.error('[Yesterday Analysis] Error fetching data:', error); + showYesterdayNoData(); + } +} + + +/** + * Show "no data" message for yesterday + */ +function showYesterdayNoData() { + const container = document.getElementById('yesterday-timeline-container'); + if (!container) return; + + container.innerHTML = ` +
+
📅
+

Včerejší data nejsou k dispozici

+

+ Data se archivují automaticky každý den o půlnoci.
+ Pokud jste integraci spustili dnes, včerejší data ještě nejsou k dispozici. +

+
+ `; +} + + +/** + * Render yesterday's plan vs actual analysis + */ +function renderYesterdayAnalysis(yesterdayData) { + const container = document.getElementById('yesterday-timeline-container'); + if (!container) { + console.warn('[Yesterday Analysis] Container not found'); + return; + } + + const { date, intervals, summary } = yesterdayData; + + if (!intervals || intervals.length === 0) { + showYesterdayNoData(); + return; + } + + // Filter only historical (completed) intervals + const historicalIntervals = intervals.filter(i => i.status === 'historical' && i.actual && i.planned); + + let html = '
'; + + // Header with date + html += ` +
+

📊 Včera (${date}) - Plán vs Skutečnost

+
+ `; + + // Summary cards + if (summary && historicalIntervals.length > 0) { + const deltaClass = summary.delta_cost > 0 ? 'worse' : 'better'; + const deltaIcon = summary.delta_cost > 0 ? '📈' : '📉'; + const deltaPct = summary.delta_cost !== null && summary.planned_total_cost > 0 + ? ((summary.delta_cost / summary.planned_total_cost) * 100).toFixed(1) + : '0.0'; + + html += ` +
+
+
💰 Plánované náklady
+
${summary.planned_total_cost?.toFixed(2) || '0.00'} Kč
+
+
+
💸 Skutečné náklady
+
${summary.actual_total_cost?.toFixed(2) || '0.00'} Kč
+
+
+
${deltaIcon} Výsledek
+
+ ${summary.delta_cost > 0 ? '+' : ''}${summary.delta_cost?.toFixed(2) || '0.00'} Kč +
+
+ ${summary.delta_cost > 0 ? '❌' : '✅'} ${deltaPct}% ${summary.delta_cost > 0 ? 'horší' : 'lepší'} +
+
+
+
🎯 Přesnost režimů
+
${summary.accuracy_pct?.toFixed(0) || '0'}%
+
${historicalIntervals.length}/96 intervalů
+
+
+ `; + } else { + html += ` +
+ ℹ️ Včerejší data jsou neúplná nebo se ještě zpracovávají. +
+ `; + } + + html += '
'; // yesterday-analysis + + container.innerHTML = html; +} + +// Global function for toggling interval details +window.toggleIntervalDetail = function(intervalId) { + const detailEl = document.getElementById(`interval-detail-${intervalId}`); + const rowEl = document.querySelector(`[data-interval-id="${intervalId}"]`); + + if (detailEl && rowEl) { + const isVisible = detailEl.style.display !== 'none'; + detailEl.style.display = isVisible ? 'none' : 'block'; + + if (isVisible) { + rowEl.classList.remove('expanded'); + } else { + rowEl.classList.add('expanded'); + } + } +}; + +// Global function for toggling section collapse +window.toggleSection = function(sectionId) { + const sectionEl = document.getElementById(sectionId); + const headerEl = sectionEl?.parentElement.querySelector('.section-header'); + + if (sectionEl && headerEl) { + const isVisible = sectionEl.style.display !== 'none'; + sectionEl.style.display = isVisible ? 'none' : 'block'; + + const toggleEl = headerEl.querySelector('.section-toggle'); + if (toggleEl) { + toggleEl.textContent = isVisible ? '▶' : '▼'; + } + + if (isVisible) { + headerEl.parentElement.classList.add('collapsed'); + } else { + headerEl.parentElement.classList.remove('collapsed'); + } + } +}; + +/** + * Update battery efficiency bar visualization + * Shows comparison between last month and current month efficiency + * @param {number} lastMonthEff - Last month efficiency percentage + * @param {number} currentMonthEff - Current month efficiency percentage + */ +function updateBatteryEfficiencyBar(lastMonthEff, currentMonthEff) { + const barLast = document.getElementById('battery-efficiency-bar-last'); + const barCurrent = document.getElementById('battery-efficiency-bar-current'); + const labelLast = document.getElementById('battery-efficiency-bar-last-label'); + const labelCurrent = document.getElementById('battery-efficiency-bar-current-label'); + + if (!barLast || !barCurrent || !labelLast || !labelCurrent) return; + + // Pokud máme obě hodnoty, zobraz poměr + if (lastMonthEff !== null && lastMonthEff !== undefined && + currentMonthEff !== null && currentMonthEff !== undefined) { + + const total = lastMonthEff + currentMonthEff; + const lastPercent = (lastMonthEff / total) * 100; + const currentPercent = (currentMonthEff / total) * 100; + + barLast.style.width = `${lastPercent}%`; + barCurrent.style.width = `${currentPercent}%`; + labelLast.textContent = `${lastMonthEff.toFixed(1)}%`; + labelCurrent.textContent = `${currentMonthEff.toFixed(1)}%`; + } else if (lastMonthEff !== null && lastMonthEff !== undefined) { + // Jen minulý měsíc + barLast.style.width = '100%'; + barCurrent.style.width = '0%'; + labelLast.textContent = `${lastMonthEff.toFixed(1)}%`; + labelCurrent.textContent = '--'; + } else if (currentMonthEff !== null && currentMonthEff !== undefined) { + // Jen tento měsíc + barLast.style.width = '0%'; + barCurrent.style.width = '100%'; + labelLast.textContent = '--'; + labelCurrent.textContent = `${currentMonthEff.toFixed(1)}%`; + } else { + // Žádná data + barLast.style.width = '0%'; + barCurrent.style.width = '0%'; + labelLast.textContent = '--'; + labelCurrent.textContent = '--'; + } +} + +// Export analytics functions +// Cache for battery efficiency to prevent unnecessary updates +var batteryEfficiencyCache = { + efficiency: null, + charge: null, + discharge: null, + losses: null, + label: null +}; + +/** + * Update battery efficiency statistics on Pricing tab + * Loads data from battery_efficiency sensor and displays monthly stats + * Uses change detection to update only when values change + */ +async function updateBatteryEfficiencyStats() { + const hass = getHass(); + if (!hass) { + console.warn('[Battery Efficiency] No HA connection'); + return; + } + + const sensorId = `sensor.oig_${INVERTER_SN}_battery_efficiency`; + const sensor = hass.states[sensorId]; + + console.log('[Battery Efficiency] Checking sensor:', sensorId, 'state:', sensor?.state); + + if (!sensor || sensor.state === 'unavailable' || sensor.state === 'unknown') { + console.log('[Battery Efficiency] Sensor not available:', sensorId); + return; + } + + const attrs = sensor.attributes || {}; + console.log('[Battery Efficiency] Sensor attributes:', attrs); + + // Prefer last month (complete), fallback to current month (partial) + let displayEff, displayLossesPct, displayLossesKwh, displayCharge, displayDischarge, displayLabel; + + const lastMonthEff = attrs.efficiency_last_month_pct; + const lastMonthLossesPct = attrs.losses_last_month_pct; + const lastMonthLossesKwh = attrs.losses_last_month_kwh; + const lastMonthCharge = attrs.last_month_charge_kwh; + const lastMonthDischarge = attrs.last_month_discharge_kwh; + + const currentMonthEff = attrs.efficiency_current_month_pct; + const currentMonthLossesPct = attrs.losses_current_month_pct; + const currentMonthLossesKwh = attrs.losses_current_month_kwh; + const currentMonthCharge = attrs.current_month_charge_kwh; + const currentMonthDischarge = attrs.current_month_discharge_kwh; + const currentMonthDays = attrs.current_month_days; + + // Use last month if available (complete data), otherwise use current month (partial) + if (lastMonthEff !== null && lastMonthEff !== undefined && + lastMonthCharge !== null && lastMonthDischarge !== null) { + displayEff = lastMonthEff; + displayLossesPct = lastMonthLossesPct; + displayLossesKwh = lastMonthLossesKwh; + displayCharge = lastMonthCharge; + displayDischarge = lastMonthDischarge; + displayLabel = 'Minulý měsíc'; + console.log('[Battery Efficiency] Using LAST month data:', displayEff + '%'); + } else if (currentMonthEff !== null && currentMonthEff !== undefined) { + displayEff = currentMonthEff; + displayLossesPct = currentMonthLossesPct; + displayLossesKwh = currentMonthLossesKwh; + displayCharge = currentMonthCharge; + displayDischarge = currentMonthDischarge; + displayLabel = `Tento měsíc (${currentMonthDays} dní)`; + console.log('[Battery Efficiency] Using CURRENT month data:', displayEff + '%'); + } else { + console.warn('[Battery Efficiency] No data available - lastMonth:', lastMonthEff, 'currentMonth:', currentMonthEff); + } + + if (displayEff !== undefined) { + // Check if values changed (change detection) + const hasChanged = + batteryEfficiencyCache.efficiency !== displayEff || + batteryEfficiencyCache.charge !== displayCharge || + batteryEfficiencyCache.discharge !== displayDischarge || + batteryEfficiencyCache.losses !== displayLossesKwh || + batteryEfficiencyCache.label !== displayLabel; + + if (!hasChanged) { + // No changes, skip update + return; + } + + // Update cache + batteryEfficiencyCache.efficiency = displayEff; + batteryEfficiencyCache.charge = displayCharge; + batteryEfficiencyCache.discharge = displayDischarge; + batteryEfficiencyCache.losses = displayLossesKwh; + batteryEfficiencyCache.label = displayLabel; + + console.log('[Battery Efficiency] Values changed, updating UI:', { + efficiency: displayEff, + charge: displayCharge, + discharge: displayDischarge, + losses: displayLossesKwh, + label: displayLabel + }); + + // Main value - direct DOM update (more reliable than updateElementIfChanged) + const mainEl = document.getElementById('battery-efficiency-main'); + if (mainEl) { + mainEl.textContent = `${displayEff.toFixed(1)}%`; + } + + // Period label + const periodEl = document.getElementById('battery-efficiency-period-label'); + if (periodEl) { + periodEl.textContent = displayLabel; + } + + // Trend comparison + if (lastMonthEff !== null && currentMonthEff !== null && + lastMonthEff !== undefined && currentMonthEff !== undefined) { + const diff = currentMonthEff - lastMonthEff; + const diffAbs = Math.abs(diff); + let trendText = ''; + let trendColor = ''; + + if (diff > 0.5) { + trendText = `↗️ Vs minulý měsíc +${diffAbs.toFixed(1)}%`; + trendColor = '#4CAF50'; + } else if (diff < -0.5) { + trendText = `↘️ Vs minulý měsíc -${diffAbs.toFixed(1)}%`; + trendColor = '#FF5722'; + } else { + trendText = `➡️ Podobně jako minulý měsíc`; + trendColor = 'var(--text-secondary)'; + } + + const trendEl = document.getElementById('battery-efficiency-trend'); + if (trendEl) { + trendEl.textContent = trendText; + trendEl.style.color = trendColor; + } + } else { + const trendEl = document.getElementById('battery-efficiency-trend'); + if (trendEl) { + trendEl.textContent = displayLabel; + } + } + + // Detail values + const chargeEl = document.getElementById('battery-charge-value'); + if (chargeEl) { + chargeEl.textContent = `${displayCharge?.toFixed(1) || '--'} kWh`; + } + + const dischargeEl = document.getElementById('battery-discharge-value'); + if (dischargeEl) { + dischargeEl.textContent = `${displayDischarge?.toFixed(1) || '--'} kWh`; + } + + const lossesEl = document.getElementById('battery-losses-value'); + if (lossesEl) { + lossesEl.textContent = `${displayLossesKwh?.toFixed(1) || '--'} kWh (${displayLossesPct?.toFixed(1) || '--'}%)`; + } + + // Update gradient bar comparison + updateBatteryEfficiencyBar(lastMonthEff, currentMonthEff); + } else { + console.warn('[Battery Efficiency] No displayEff - setting UI to defaults'); + + const mainEl = document.getElementById('battery-efficiency-main'); + if (mainEl) mainEl.textContent = '--'; + + const periodEl = document.getElementById('battery-efficiency-period-label'); + if (periodEl) periodEl.textContent = 'Čekám na data...'; + + const trendEl = document.getElementById('battery-efficiency-trend'); + if (trendEl) trendEl.textContent = 'Čekám na data...'; + + const chargeEl = document.getElementById('battery-charge-value'); + if (chargeEl) chargeEl.textContent = '--'; + + const dischargeEl = document.getElementById('battery-discharge-value'); + if (dischargeEl) dischargeEl.textContent = '--'; + + const lossesEl = document.getElementById('battery-losses-value'); + if (lossesEl) lossesEl.textContent = '--'; + } +} + +window.DashboardAnalytics = { + buildYesterdayAnalysis, + showYesterdayNoData, + renderYesterdayAnalysis, + updateBatteryEfficiencyBar, + updateBatteryEfficiencyStats, + init: function() { + console.log('[DashboardAnalytics] Initialized'); + } +}; + +console.log('[DashboardAnalytics] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/features/battery-health.js b/custom_components/oig_cloud/www/js/features/battery-health.js new file mode 100644 index 00000000..df758796 --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/battery-health.js @@ -0,0 +1,414 @@ +/* eslint-disable */ +/** + * Battery Health Dashboard Module + * Zobrazuje kvalitu baterie (SoH%), quality metrics, cycle progress + * + * Umístění: Tab "💰 Predikce a statistiky" vedle Battery Efficiency + * Import: Přidat do dashboard.html + */ + +// Cache pro Battery Health data (change detection) +var batteryHealthCache = { + soh: null, + capacity: null, + measurementCount: null, + lastMeasured: null, + degradation3m: null, + degradation6m: null, + degradation12m: null +}; + +/** + * Update Battery Health statistics na Pricing tab + * Načítá data z battery_health senzoru a zobrazuje SoH metriky + * Používá change detection pro optimalizaci + */ +async function updateBatteryHealthStats() { + const hass = getHass(); + if (!hass) { + console.warn('[Battery Health] No HA connection'); + return; + } + + const sensorId = `sensor.oig_${INVERTER_SN}_battery_health`; + const sensor = hass.states[sensorId]; + + console.log('[Battery Health] Checking sensor:', sensorId, 'state:', sensor?.state); + + if (!sensor) { + console.log('[Battery Health] Sensor not found:', sensorId); + return; + } + + const attrs = sensor.attributes || {}; + const state = sensor.state; // Průměrný SoH% za 30 dní + + console.log('[Battery Health] Sensor state:', state, 'attributes:', attrs); + + // Získat data ze senzoru (NOVÁ STRUKTURA PO REFACTORINGU) + const soh = (state !== 'unknown' && state !== 'unavailable') ? parseFloat(state) : null; + + // 30-day průměry + const capacity = attrs.capacity_kwh || null; // Průměrná kapacita za 30 dní + const measurementCount = attrs.measurement_count || 0; + const lastMeasured = attrs.last_measured || null; + const minCapacity = attrs.min_capacity_kwh || null; + const maxCapacity = attrs.max_capacity_kwh || null; + const qualityScore = attrs.quality_score || null; + + // Degradation trends (3, 6, 12 měsíců) + const degradation3mPercent = attrs.degradation_3_months_percent || null; + const degradation6mPercent = attrs.degradation_6_months_percent || null; + const degradation12mPercent = attrs.degradation_12_months_percent || null; + + // Long-term trend (regression analysis) + const degradationPerYearPercent = attrs.degradation_per_year_percent || null; + const estimatedEolDate = attrs.estimated_eol_date || null; + const yearsTo80Pct = attrs.years_to_80pct || null; + const trendConfidence = attrs.trend_confidence || null; + + // Change detection + const hasChanged = + batteryHealthCache.soh !== soh || + batteryHealthCache.capacity !== capacity || + batteryHealthCache.measurementCount !== measurementCount || + batteryHealthCache.lastMeasured !== lastMeasured || + batteryHealthCache.degradation3m !== degradation3mPercent || + batteryHealthCache.degradation6m !== degradation6mPercent || + batteryHealthCache.degradation12m !== degradation12mPercent; + + if (!hasChanged) { + // Žádné změny, přeskočit update + return; + } + + // Update cache + batteryHealthCache.soh = soh; + batteryHealthCache.capacity = capacity; + batteryHealthCache.measurementCount = measurementCount; + batteryHealthCache.lastMeasured = lastMeasured; + batteryHealthCache.degradation3m = degradation3mPercent; + batteryHealthCache.degradation6m = degradation6mPercent; + batteryHealthCache.degradation12m = degradation12mPercent; + + console.log('[Battery Health] Values changed, updating UI:', { + soh, + capacity, + measurementCount, + lastMeasured, + degradation3mPercent, + degradation6mPercent, + degradation12mPercent + }); + + // Najít nebo vytvořit battery health tile + let container = document.getElementById('battery-health-container'); + if (!container) { + // Vytvořit nový container + container = createBatteryHealthContainer(); + } + + // Update HTML + updateBatteryHealthUI(container, { + soh, + capacity, + measurementCount, + lastMeasured, + minCapacity, + maxCapacity, + qualityScore, + degradation3mPercent, + degradation6mPercent, + degradation12mPercent, + degradationPerYearPercent, + estimatedEolDate, + yearsTo80Pct, + trendConfidence + }); +} + +/** + * Vytvoří HTML container pro Battery Health tile + */ +function createBatteryHealthContainer() { + console.log('[Battery Health] Creating new container'); + + // Najít Battery Efficiency tile - je to .stat-card s #battery-efficiency-main uvnitř + const efficiencyTile = document.querySelector('.stat-card #battery-efficiency-main'); + + if (!efficiencyTile) { + console.warn('[Battery Health] Battery Efficiency tile not found, trying fallback position'); + // Fallback: najít pricing-tab a vložit dovnitř + const pricingTab = document.getElementById('pricing-tab'); + if (!pricingTab) { + console.error('[Battery Health] Cannot find pricing tab!'); + return null; + } + + // Vytvořit wrapper vedle první stat-card grid + const statGrid = pricingTab.querySelector('div[style*="grid-template-columns"]'); + if (statGrid) { + const wrapper = document.createElement('div'); + wrapper.className = 'battery-health-tile'; + wrapper.id = 'battery-health-container'; + + // Vložit za stat-card grid + statGrid.parentNode.insertBefore(wrapper, statGrid.nextSibling); + + console.log('[Battery Health] Container created at fallback position'); + return wrapper; + } + } + + // Najít parent .stat-card (rodič #battery-efficiency-main) + const parentCard = efficiencyTile.closest('.stat-card'); + if (!parentCard) { + console.error('[Battery Health] Cannot find parent stat-card'); + return null; + } + + // Vytvořit novou stat-card pro Battery Health + const wrapper = document.createElement('div'); + wrapper.className = 'stat-card battery-health-tile'; + wrapper.id = 'battery-health-container'; + wrapper.style.background = 'linear-gradient(135deg, rgba(76, 217, 100, 0.15) 0%, rgba(76, 217, 100, 0.05) 100%)'; + wrapper.style.border = '1px solid rgba(76, 217, 100, 0.3)'; + wrapper.style.minHeight = '160px'; // Shodný s efficiency tile pro konzistentní výšku + + // Vložit vedle Efficiency card (jako součást stejného grid) + parentCard.parentNode.insertBefore(wrapper, parentCard.nextSibling); + + console.log('[Battery Health] Container created and positioned next to Efficiency'); + return wrapper; +} + +/** + * Aktualizuje UI Battery Health tile + */ +function updateBatteryHealthUI(container, data) { + const { + soh, + capacity, + measurementCount, + lastMeasured, + minCapacity, + maxCapacity, + qualityScore, + degradation3mPercent, + degradation6mPercent, + degradation12mPercent, + degradationPerYearPercent, + estimatedEolDate, + yearsTo80Pct, + trendConfidence + } = data; + + // Určit status a barvu + let statusClass = 'status-unknown'; + let statusIcon = '❓'; + let statusText = 'Čekám na data'; + + if (soh !== null) { + if (soh >= 95) { + statusClass = 'status-excellent'; + statusIcon = '✅'; + statusText = 'Výborný stav'; + } else if (soh >= 90) { + statusClass = 'status-good'; + statusIcon = '✔️'; + statusText = 'Dobrý stav'; + } else if (soh >= 80) { + statusClass = 'status-fair'; + statusIcon = '⚠️'; + statusText = 'Střední degradace'; + } else { + statusClass = 'status-poor'; + statusIcon = '❌'; + statusText = 'Vysoká degradace'; + } + } + + // Funkce pro barvu degradace + const getDegradationColor = (value) => { + if (value === null || value === undefined) return 'var(--text-secondary)'; + if (value <= 2) return '#44ff44'; // zelená - výborné + if (value <= 5) return '#ffaa00'; // oranžová - střední + return '#ff4444'; // červená - vysoká + }; + + // Degradace trendy (3/6/12 měsíců) + let degradationHTML = ''; + if (degradation3mPercent !== null || degradation6mPercent !== null || degradation12mPercent !== null) { + degradationHTML = ` +
+
📉 Degradace kapacity:
+ ${degradation3mPercent !== null ? ` +
+ 3 měsíce: + ${degradation3mPercent.toFixed(2)}% +
+ ` : ''} + ${degradation6mPercent !== null ? ` +
+ 6 měsíců: + ${degradation6mPercent.toFixed(2)}% +
+ ` : ''} + ${degradation12mPercent !== null ? ` +
+ 12 měsíců: + ${degradation12mPercent.toFixed(2)}% +
+ ` : ''} +
+ `; + } + + // Dlouhodobá predikce (pokud je dostatečná spolehlivost) + let predictionHTML = ''; + if (trendConfidence !== null && trendConfidence >= 70 && yearsTo80Pct !== null) { + const yearsText = yearsTo80Pct >= 10 ? '10+' : yearsTo80Pct.toFixed(1); + const eolText = estimatedEolDate || 'N/A'; + + predictionHTML = ` +
+
🔮 Dlouhodobá predikce:
+ ${degradationPerYearPercent !== null ? ` +
+ Degradace/rok: + ${degradationPerYearPercent.toFixed(2)}% +
+ ` : ''} +
+ Do 80% SoH: + ${yearsText} let +
+ ${eolText !== 'N/A' ? ` +
+ Očekávaný konec: + ${eolText} +
+ ` : ''} +
+ Spolehlivost: ${trendConfidence.toFixed(0)}% +
+
+ `; + } + + // Sestavit HTML (stat-card kompatibilní struktura) + container.innerHTML = ` +
+ 🔋 Kvalita baterie + + ${statusIcon} ${statusText} + +
+ + ${soh !== null ? ` +
+ ${soh.toFixed(1)}% SoH +
+
+ (z ${measurementCount || 0} měření) +
+ ` : ` +
+
+
Čekám na první měření...
+
+
Jak to funguje:
+
+ 1. Baterii vybijte pod 90% SoC
+ 2. Nabijte na 95%+ SoC
+ 3. Snažte se nabíjet čistě ze slunce
+ 4. Měření se uloží každý den v 01:00 +
+
+
+ `} + +
+ ${capacity !== null ? ` +
+ 📊 Aktuální kapacita: + ${capacity.toFixed(2)} kWh +
+ ${minCapacity !== null && maxCapacity !== null ? ` +
+ Rozsah: + ${minCapacity.toFixed(2)} - ${maxCapacity.toFixed(2)} kWh +
+ ` : ''} + ` : ''} + + ${measurementCount > 0 ? ` +
+ 📈 Počet měření: + ${measurementCount} +
+ ${lastMeasured ? ` +
+ Poslední měření: + ${new Date(lastMeasured).toLocaleDateString('cs-CZ')} +
+ ` : ''} + ${qualityScore !== null ? ` +
+ ⭐ Kvalita: + ${qualityScore.toFixed(1)}/100 +
+ ` : ''} + ` : ''} +
+ + ${degradationHTML} + ${predictionHTML} + `; + + console.log('[Battery Health] UI updated successfully'); +} + +/** + * Subscribe to battery_health sensor changes + */ +function subscribeBatteryHealthUpdates() { + const hass = getHass(); + if (!hass) { + console.warn('[Battery Health] Cannot subscribe - no HA connection'); + return; + } + + const sensorId = `sensor.oig_${INVERTER_SN}_battery_health`; + + console.log('[Battery Health] Subscribing to updates:', sensorId); + + const watcher = window.DashboardStateWatcher; + if (!watcher) { + console.warn('[Battery Health] StateWatcher not available yet, retrying...'); + setTimeout(subscribeBatteryHealthUpdates, 500); + return; + } + + // Ensure watcher is running (idempotent) + watcher.start({ intervalMs: 1000, prefixes: [`sensor.oig_${INVERTER_SN}_`] }); + + // Register and subscribe once + if (!window.__oigBatteryHealthWatcherUnsub) { + watcher.registerEntities([sensorId]); + window.__oigBatteryHealthWatcherUnsub = watcher.onEntityChange((entityId) => { + if (entityId !== sensorId) return; + console.log('[Battery Health] Sensor changed, updating...'); + updateBatteryHealthStats(); + }); + } + + // První načtení + updateBatteryHealthStats(); +} + +// Export funkcí pro použití v dashboard.html +window.updateBatteryHealthStats = updateBatteryHealthStats; +window.subscribeBatteryHealthUpdates = subscribeBatteryHealthUpdates; + +console.log('[Battery Health] Module loaded ✅'); diff --git a/custom_components/oig_cloud/www/js/features/boiler.js b/custom_components/oig_cloud/www/js/features/boiler.js new file mode 100644 index 00000000..11de461e --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/boiler.js @@ -0,0 +1,935 @@ +/* eslint-disable */ +/** + * OIG Bojler Dashboard - Integrace do hlavního dashboardu + * Heatmap, timeline, profiling + */ + +// Global boiler state +const boilerState = { + profiles: {}, + currentCategory: null, + plan: null, + charts: {}, + initialized: false, + refreshTimer: null +}; + +// Czech labels +const CATEGORY_LABELS = { + 'workday_spring': 'Pracovní den - Jaro', + 'workday_summer': 'Pracovní den - Léto', + 'workday_autumn': 'Pracovní den - Podzim', + 'workday_winter': 'Pracovní den - Zima', + 'weekend_spring': 'Víkend - Jaro', + 'weekend_summer': 'Víkend - Léto', + 'weekend_autumn': 'Víkend - Podzim', + 'weekend_winter': 'Víkend - Zima', +}; + +const SOURCE_COLORS = { + 'fve': '#4CAF50', // Zelená + 'grid': '#FF9800', // Oranžová + 'alternative': '#2196F3', // Modrá +}; + +const DAY_LABELS = ['Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne']; + +/** + * Inicializace bojlerového dashboardu + */ +async function initBoilerDashboard() { + console.log('🔥 [Boiler] Initializing dashboard'); + + if (!boilerState.initialized) { + boilerState.initialized = true; + + // Auto-refresh každých 5 minut (pouze jednou) + boilerState.refreshTimer = setInterval(() => loadBoilerData(), 5 * 60 * 1000); + } + + // Vždy načti aktuální data + await loadBoilerData(); +} + +/** + * Načtení dat z backend API + */ +/** + * Load basic boiler data (profiles and plan) + * Used for simple boiler tab + */ +async function loadBasicBoilerData() { + try { + console.log('🔥 [Boiler] Loading data from API'); + + const entryId = new URLSearchParams(window.location.search).get('entry_id'); + if (!entryId) { + console.error('[Boiler] Missing entry_id'); + return; + } + + // Načíst profily + const profilesResp = await fetch(`/api/oig_cloud/${entryId}/boiler_profile`); + if (profilesResp.ok) { + const data = await profilesResp.json(); + boilerState.profiles = data.profiles || {}; + boilerState.currentCategory = data.current_category; + console.log(`🔥 [Boiler] Loaded ${Object.keys(boilerState.profiles).length} profiles`); + } + + // Načíst plán + const planResp = await fetch(`/api/oig_cloud/${entryId}/boiler_plan`); + if (planResp.ok) { + boilerState.plan = await planResp.json(); + console.log('🔥 [Boiler] Plan loaded'); + } + + // Update UI + updateCategorySelector(); + createBoilerHeatmap(); + createBoilerTimeline(); + updateBoilerStats(); + + } catch (err) { + console.error('[Boiler] Failed to load data:', err); + } +} + +/** + * Combined loader that hydrates both API-driven and hass-driven widgets. + */ +async function loadBoilerData() { + try { + await loadBasicBoilerData(); + } catch (error) { + console.error('[Boiler] Basic loader failed:', error); + } + + try { + await loadExtendedBoilerData(); + } catch (error) { + console.error('[Boiler] Extended loader failed:', error); + } +} + +/** + * Update category selector + */ +function updateCategorySelector() { + const select = document.getElementById('boiler-category-select'); + if (!select) return; + + select.innerHTML = ''; + + Object.keys(CATEGORY_LABELS).forEach(cat => { + const option = document.createElement('option'); + option.value = cat; + option.textContent = CATEGORY_LABELS[cat]; + if (cat === boilerState.currentCategory) { + option.selected = true; + } + select.appendChild(option); + }); +} + +/** + * Category change handler + */ +function onBoilerCategoryChange() { + const select = document.getElementById('boiler-category-select'); + if (!select) return; + + boilerState.currentCategory = select.value; + createBoilerHeatmap(); +} + +/** + * Vytvoření heatmapy 7×24 + */ +function createBoilerHeatmap() { + const canvas = document.getElementById('boiler-heatmap-chart'); + if (!canvas) { + console.warn('[Boiler] Heatmap canvas not found'); + return; + } + + const profile = boilerState.profiles[boilerState.currentCategory]; + if (!profile) { + console.warn('[Boiler] No profile for category:', boilerState.currentCategory); + return; + } + + // Destroy existing chart + if (boilerState.charts.heatmap) { + boilerState.charts.heatmap.destroy(); + } + + // Připravit data jako bar chart (horizontální) + const datasets = []; + const labels = []; + + // Vytvoř dataset pro každý den + for (let day = 0; day < 7; day++) { + const dayData = []; + for (let hour = 0; hour < 24; hour++) { + const consumption = profile.hourly_avg[hour] || 0; + dayData.push(consumption); + } + + datasets.push({ + label: DAY_LABELS[day], + data: dayData, + backgroundColor: `rgba(255, 152, 0, 0.${day + 3})`, // Různé opacity pro dny + borderColor: 'rgba(255, 152, 0, 0.8)', + borderWidth: 1, + }); + } + + // Hour labels (0-23) + for (let h = 0; h < 24; h++) { + labels.push(`${h}h`); + } + + const ctx = canvas.getContext('2d'); + boilerState.charts.heatmap = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: datasets + }, + options: { + responsive: true, + maintainAspectRatio: false, + interaction: { + intersect: false, + mode: 'index' + }, + plugins: { + legend: { + display: true, + position: 'top' + }, + tooltip: { + callbacks: { + label(context) { + const day = context.dataset.label; + const hour = context.label; + const value = context.parsed.y; + return `${day} ${hour}: ${value.toFixed(3)} kWh`; + } + } + } + }, + scales: { + x: { + stacked: false, + title: { + display: true, + text: 'Hodina' + } + }, + y: { + stacked: false, + title: { + display: true, + text: 'Spotřeba (kWh)' + }, + beginAtZero: true + } + } + } + }); +} + +/** + * Vytvoření timeline grafu + */ +function createBoilerTimeline() { + const canvas = document.getElementById('boiler-timeline-chart'); + if (!canvas) { + console.warn('[Boiler] Timeline canvas not found'); + return; + } + + if (!boilerState.plan) { + console.warn('[Boiler] No plan data'); + return; + } + + // Destroy existing chart + if (boilerState.charts.timeline) { + boilerState.charts.timeline.destroy(); + } + + // Připravit data - groupnout sloty podle zdroje + const fveData = []; + const gridData = []; + const altData = []; + + boilerState.plan.slots.forEach(slot => { + const x = new Date(slot.start).getTime(); + const y = slot.avg_consumption_kwh; + + const point = { x, y }; + + if (slot.recommended_source === 'fve') { + fveData.push(point); + } else if (slot.recommended_source === 'grid') { + gridData.push(point); + } else if (slot.recommended_source === 'alternative') { + altData.push(point); + } + }); + + const ctx = canvas.getContext('2d'); + boilerState.charts.timeline = new Chart(ctx, { + type: 'bar', + data: { + datasets: [ + { + label: 'FVE (zdarma)', + data: fveData, + backgroundColor: SOURCE_COLORS.fve, + borderColor: SOURCE_COLORS.fve, + borderWidth: 1 + }, + { + label: 'Síť', + data: gridData, + backgroundColor: SOURCE_COLORS.grid, + borderColor: SOURCE_COLORS.grid, + borderWidth: 1 + }, + { + label: 'Alternativa', + data: altData, + backgroundColor: SOURCE_COLORS.alternative, + borderColor: SOURCE_COLORS.alternative, + borderWidth: 1 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + type: 'time', + time: { + unit: 'hour', + displayFormats: { + hour: 'HH:mm' + } + }, + title: { + display: true, + text: 'Čas' + } + }, + y: { + stacked: true, + title: { + display: true, + text: 'Spotřeba (kWh)' + }, + beginAtZero: true + } + }, + plugins: { + legend: { + position: 'top', + } + } + } + }); +} + +/** + * Update statistik + */ +function updateBoilerStats() { + if (!boilerState.plan) return; + + const totalEl = document.getElementById('boiler-total-consumption'); + const fveEl = document.getElementById('boiler-fve-consumption'); + const gridEl = document.getElementById('boiler-grid-consumption'); + const costEl = document.getElementById('boiler-estimated-cost'); + + if (totalEl) totalEl.textContent = `${boilerState.plan.total_consumption_kwh.toFixed(2)} kWh`; + if (fveEl) fveEl.textContent = `${boilerState.plan.fve_kwh.toFixed(2)} kWh`; + if (gridEl) gridEl.textContent = `${boilerState.plan.grid_kwh.toFixed(2)} kWh`; + if (costEl) costEl.textContent = `${boilerState.plan.estimated_cost_czk.toFixed(2)} Kč`; +} + +/** + * Toggle bojler control panel + */ +function toggleBoilerControlPanel() { + const panel = document.getElementById('boiler-control-panel'); + if (!panel) return; + + const icon = document.getElementById('boiler-panel-toggle-icon'); + + if (panel.classList.contains('minimized')) { + panel.classList.remove('minimized'); + if (icon) icon.textContent = '−'; + } else { + panel.classList.add('minimized'); + if (icon) icon.textContent = '+'; + } +} + +// Export functions to global scope +window.initBoilerDashboard = initBoilerDashboard; +window.onBoilerCategoryChange = onBoilerCategoryChange; +window.toggleBoilerControlPanel = toggleBoilerControlPanel; + +console.log('🔥 [Boiler] Dashboard script loaded'); +// === BOILER DATA & CHART === +var boilerChartInstance = null; + +/** + * Load extended boiler data (sensors, profile, energy breakdown, predictions, charts) + * Used for advanced boiler dashboard + */ +async function loadExtendedBoilerData() { + console.log('[Boiler] Loading boiler data...'); + + try { + // Update boiler sensor values + await updateBoilerSensors(); + + // Update boiler profile + await updateBoilerProfile(); + + // NEW: Update energy breakdown + await updateBoilerEnergyBreakdown(); + + // NEW: Update predicted usage + await updateBoilerPredictedUsage(); + + // NEW: Update grade thermometer + await updateBoilerGradeThermometer(); + + // NEW: Render profiling chart + await renderBoilerProfilingChart(); + + // NEW: Render heatmap + await renderBoilerHeatmap(); + + // Initialize or refresh boiler chart + await initializeBoilerChart(); + + console.log('[Boiler] Data loaded successfully'); + } catch (error) { + console.error('[Boiler] Failed to load data:', error); + } +} + +async function updateBoilerSensors() { + const hass = getHass(); + if (!hass) return; + + // Boiler sensors have different naming: sensor.oig_bojler_* + const sensorMap = { + 'boiler-soc-value': 'sensor.oig_bojler_stav_nabiti', + 'boiler-temp-top-value': 'sensor.oig_bojler_teplota_nahore', + 'boiler-energy-required-value': 'sensor.oig_bojler_pozadovana_energie', + 'boiler-plan-cost-value': 'sensor.oig_bojler_cena_planu_ohrevu' + }; + + for (const [elementId, entityId] of Object.entries(sensorMap)) { + const state = hass?.states?.[entityId]; + + const element = document.getElementById(elementId); + if (element && state) { + const value = parseFloat(state.state); + if (!isNaN(value)) { + if (entityId.includes('stav_nabiti')) { + element.textContent = `${value.toFixed(0)} %`; + } else if (entityId.includes('teplota')) { + element.textContent = `${value.toFixed(1)} °C`; + } else if (entityId.includes('energie')) { + element.textContent = `${value.toFixed(2)} kWh`; + } else if (entityId.includes('cena')) { + element.textContent = `${value.toFixed(2)} Kč`; + } + } + } + } + + // Update plan info + const planEntityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + const planState = hass?.states?.[planEntityId]; + + if (planState?.attributes?.plan) { + const plan = planState.attributes.plan; + const slots = plan.slots || []; + const activeSlots = slots.filter(s => s.heating).length; + + document.getElementById('boiler-plan-digest').textContent = plan.digest || 'N/A'; + document.getElementById('boiler-plan-slots').textContent = slots.length; + document.getElementById('boiler-plan-active-slots').textContent = activeSlots; + + if (slots.length > 0) { + const startTime = new Date(slots[0].start_time); + const endTime = new Date(slots[slots.length - 1].start_time); + + document.getElementById('boiler-plan-start').textContent = startTime.toLocaleString('cs-CZ', { + day: '2-digit', + month: '2-digit', + hour: '2-digit', + minute: '2-digit' + }); + document.getElementById('boiler-plan-end').textContent = endTime.toLocaleString('cs-CZ', { + day: '2-digit', + month: '2-digit', + hour: '2-digit', + minute: '2-digit' + }); + } + } +} + +async function updateBoilerProfile() { + // Get configuration from energy sensor attributes + const hass = getHass(); + if (!hass) return; + + const energyEntityId = 'sensor.oig_bojler_pozadovana_energie'; + const energyState = hass?.states?.[energyEntityId]; + + if (energyState?.attributes) { + const attrs = energyState.attributes; + + document.getElementById('boiler-profile-volume').textContent = `${attrs.volume_l || '--'} L`; + document.getElementById('boiler-profile-target-temp').textContent = `${attrs.target_temp_c || '--'} °C`; + + // Deadline from plan or config + const planEntityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + const planState = hass?.states?.[planEntityId]; + const deadline = planState?.attributes?.plan?.deadline || attrs.deadline || '--:--'; + document.getElementById('boiler-profile-deadline').textContent = deadline; + + document.getElementById('boiler-profile-stratification').textContent = attrs.stratification_mode || attrs.method || '--'; + document.getElementById('boiler-profile-k-constant').textContent = attrs.k_constant?.toFixed(4) || '--'; + + // Heater power - hide if element doesn't exist + const heaterPowerEl = document.getElementById('boiler-profile-heater-power'); + if (heaterPowerEl) { + heaterPowerEl.textContent = '--'; // Not available in attributes + } + } +} + +async function initializeBoilerChart() { + const canvas = document.getElementById('boiler-chart'); + if (!canvas) { + console.warn('[Boiler] Chart canvas not found'); + return; + } + + const hass = getHass(); + if (!hass) { + console.warn('[Boiler] Hass not available for chart'); + return; + } + + // Lazy load boiler chart module + if (!window.BoilerChartModule) { + try { + const module = await import('./modules/boiler-chart.js'); + window.BoilerChartModule = module.BoilerChartModule; + } catch (error) { + console.error('[Boiler] Failed to load boiler-chart.js:', error); + return; + } + } + + // Create or refresh chart instance + if (!boilerChartInstance) { + boilerChartInstance = new window.BoilerChartModule(); + await boilerChartInstance.init(canvas, hass, INVERTER_SN); + } else { + await boilerChartInstance.refresh(); + } +} + +// Boiler control functions (will use ServiceShield) +async function planBoilerHeating() { + console.log('[Boiler] Planning heating...'); + + const hass = getHass(); + if (!hass) return; + + const service = 'oig_cloud.plan_boiler_heating'; + const entityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + + try { + await hass.callService('oig_cloud', 'plan_boiler_heating', { + entity_id: entityId + }); + + showNotification('✅ Plán topení byl úspěšně vytvořen', 'success'); + + // Refresh after planning + setTimeout(() => loadBoilerData(), 2000); + } catch (error) { + console.error('[Boiler] Failed to plan heating:', error); + showNotification('❌ Chyba při plánování topení', 'error'); + } +} + +async function applyBoilerPlan() { + console.log('[Boiler] Applying heating plan...'); + + const hass = getHass(); + if (!hass) return; + + const service = 'oig_cloud.apply_boiler_plan'; + const entityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + + try { + await hass.callService('oig_cloud', 'apply_boiler_plan', { + entity_id: entityId + }); + + showNotification('✅ Plán topení byl aplikován', 'success'); + + // Refresh after applying + setTimeout(() => loadBoilerData(), 2000); + } catch (error) { + console.error('[Boiler] Failed to apply plan:', error); + showNotification('❌ Chyba při aplikaci plánu', 'error'); + } +} + +async function cancelBoilerPlan() { + console.log('[Boiler] Canceling heating plan...'); + + const hass = getHass(); + if (!hass) return; + + const service = 'oig_cloud.cancel_boiler_plan'; + const entityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + + try { + await hass.callService('oig_cloud', 'cancel_boiler_plan', { + entity_id: entityId + }); + + showNotification('✅ Plán topení byl zrušen', 'success'); + + // Refresh after canceling + setTimeout(() => loadBoilerData(), 2000); + } catch (error) { + console.error('[Boiler] Failed to cancel plan:', error); + showNotification('❌ Chyba při rušení plánu', 'error'); + } +} + +// NEW: Update energy breakdown (grid vs alternative) +async function updateBoilerEnergyBreakdown() { + const hass = getHass(); + if (!hass) return; + + const planEntityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + const planState = hass?.states?.[planEntityId]; + + if (planState?.attributes?.plan) { + const plan = planState.attributes.plan; + const gridEnergy = plan.grid_energy_kwh || 0; + const gridCost = plan.grid_cost_czk || 0; + const altEnergy = plan.alt_energy_kwh || 0; + const altCost = plan.alt_cost_czk || 0; + + // Update breakdown cards + document.getElementById('boiler-grid-energy-value').textContent = + `${gridEnergy.toFixed(2)} kWh (${gridCost.toFixed(2)} Kč)`; + document.getElementById('boiler-alt-energy-value').textContent = + `${altEnergy.toFixed(2)} kWh (${altCost.toFixed(2)} Kč)`; + + // Update heating ratio bar + const totalEnergy = gridEnergy + altEnergy; + if (totalEnergy > 0) { + const gridPercent = (gridEnergy / totalEnergy) * 100; + const altPercent = (altEnergy / totalEnergy) * 100; + + document.getElementById('boiler-ratio-grid').style.width = `${gridPercent}%`; + document.getElementById('boiler-ratio-alt').style.width = `${altPercent}%`; + document.getElementById('boiler-ratio-grid-label').textContent = `${gridPercent.toFixed(0)}% síť`; + document.getElementById('boiler-ratio-alt-label').textContent = `${altPercent.toFixed(0)}% alternativa`; + } + } +} + +// NEW: Update predicted usage +async function updateBoilerPredictedUsage() { + const hass = getHass(); + if (!hass) return; + + const energyEntityId = 'sensor.oig_bojler_pozadovana_energie'; + const energyState = hass?.states?.[energyEntityId]; + + if (energyState?.attributes) { + const predictedToday = energyState.attributes.predicted_usage_today || 0; + const peakHours = energyState.attributes.peak_hours || []; + + document.getElementById('boiler-predicted-today').textContent = `${predictedToday.toFixed(2)} kWh`; + document.getElementById('boiler-peak-hours').textContent = peakHours.map(h => `${h}h`).join(', ') || '--'; + + // Calculate approximate liters at 40°C + // Energy = Volume × (40 - 15) × 0.00116 + // Volume = Energy / (25 × 0.00116) + const liters = predictedToday / (25 * 0.00116); + document.getElementById('boiler-water-liters').textContent = `${liters.toFixed(0)} L`; + } +} + +// NEW: Update grade thermometer +async function updateBoilerGradeThermometer() { + const hass = getHass(); + if (!hass) return; + + const tempTopEntityId = 'sensor.oig_bojler_teplota_nahore'; + const socEntityId = 'sensor.oig_bojler_stav_nabiti'; + const energyEntityId = 'sensor.oig_bojler_pozadovana_energie'; + + const tempTopState = hass?.states?.[tempTopEntityId]; + const socState = hass?.states?.[socEntityId]; + const energyState = hass?.states?.[energyEntityId]; + + if (tempTopState && socState) { + const tempTop = parseFloat(tempTopState.state); + const soc = parseFloat(socState.state); + const tempBottom = energyState?.attributes?.temp_bottom_c || tempTop * 0.8; + const targetTemp = energyState?.attributes?.target_temp_c || 60; + + // Update water level (based on SOC) + document.getElementById('boiler-water-level').style.height = `${soc}%`; + + // Update grade label + document.getElementById('boiler-grade-label').textContent = `${soc.toFixed(0)}% nahřáto`; + + // Update sensor markers + // Temperature range: 10°C (bottom) to 70°C (top) + // Position calculation: (temp - 10) / (70 - 10) * 100 + const topPosition = ((tempTop - 10) / 60) * 100; + const bottomPosition = ((tempBottom - 10) / 60) * 100; + const targetPosition = ((targetTemp - 10) / 60) * 100; + + document.getElementById('boiler-sensor-top').style.bottom = `${topPosition}%`; + document.getElementById('boiler-sensor-top').querySelector('.sensor-label').textContent = `${tempTop.toFixed(1)}°C`; + + document.getElementById('boiler-sensor-bottom').style.bottom = `${bottomPosition}%`; + document.getElementById('boiler-sensor-bottom').querySelector('.sensor-label').textContent = `${tempBottom.toFixed(1)}°C`; + + document.getElementById('boiler-target-line').style.bottom = `${targetPosition}%`; + } +} + +// NEW: Render profiling chart +async function renderBoilerProfilingChart() { + const canvas = document.getElementById('boiler-profile-chart'); + if (!canvas) return; + + try { + const hass = getHass(); + if (!hass) { + console.warn('[Boiler] Hass not available'); + return; + } + + // Get data from sensor attributes + const energySensor = hass.states['sensor.oig_bojler_pozadovana_energie']; + if (!energySensor || !energySensor.attributes) { + console.warn('[Boiler] Energy sensor not available'); + return; + } + + const attrs = energySensor.attributes; + const hourlyData = attrs.hourly_avg_kwh || {}; + const peakHours = attrs.peak_hours || []; + const predictedToday = attrs.predicted_usage_today || 0; + const daysTracked = attrs.days_tracked || 7; + + // Prepare data for chart + const labels = Array.from({ length: 24 }, (_, i) => `${i}h`); + const data = labels.map((_, i) => parseFloat(hourlyData[i] || 0)); + + // Destroy existing chart + if (window.boilerProfileChart) { + window.boilerProfileChart.destroy(); + } + + // Create new chart + const ctx = canvas.getContext('2d'); + window.boilerProfileChart = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: [{ + label: 'Průměrná spotřeba (kWh)', + data: data, + backgroundColor: labels.map((_, i) => + peakHours.includes(i) + ? 'rgba(244, 67, 54, 0.6)' + : 'rgba(33, 150, 243, 0.6)' + ), + borderColor: labels.map((_, i) => + peakHours.includes(i) + ? 'rgba(244, 67, 54, 1)' + : 'rgba(33, 150, 243, 1)' + ), + borderWidth: 1 + }] + }, + options: { + responsive: true, + maintainAspectRatio: true, + plugins: { + legend: { display: false }, + tooltip: { + callbacks: { + label: (context) => `${context.parsed.y.toFixed(2)} kWh` + } + } + }, + scales: { + y: { + beginAtZero: true, + title: { + display: true, + text: 'kWh' + } + }, + x: { + title: { + display: true, + text: 'Hodina' + } + } + } + } + }); + + // Update stats + document.getElementById('profile-stat-today').textContent = `${predictedToday.toFixed(2)} kWh`; + document.getElementById('profile-stat-peaks').textContent = peakHours.map(h => `${h}h`).join(', ') || '--'; + document.getElementById('profile-stat-days').textContent = `${daysTracked} dní`; + + } catch (error) { + console.error('[Boiler] Error rendering profiling chart:', error); + } +} + +// NEW: Render heatmap +async function renderBoilerHeatmap() { + const container = document.getElementById('boiler-heatmap'); + if (!container) return; + + try { + const hass = getHass(); + if (!hass) { + console.warn('[Boiler] Hass not available'); + return; + } + + // Get data from sensor attributes + const energySensor = hass.states['sensor.oig_bojler_pozadovana_energie']; + if (!energySensor || !energySensor.attributes) { + console.warn('[Boiler] Energy sensor not available for heatmap'); + return; + } + + const attrs = energySensor.attributes; + const heatmapData = attrs.heatmap_data || []; + + // If no heatmap_data, build from hourly_avg_kwh + let dataMatrix = heatmapData; + if (!heatmapData || heatmapData.length === 0) { + const hourlyData = attrs.hourly_avg_kwh || {}; + dataMatrix = Array.from({ length: 7 }, () => + Array.from({ length: 24 }, (_, hour) => parseFloat(hourlyData[hour] || 0)) + ); + } + + // Calculate thresholds + const allValues = dataMatrix.flat(); + const maxValue = Math.max(...allValues, 0.1); + const lowThreshold = maxValue * 0.3; + const highThreshold = maxValue * 0.7; + + // Clear container + container.innerHTML = ''; + + // Day labels + const days = ['Po', 'Út', 'St', 'Čt', 'Pá', 'So', 'Ne']; + + // Header row with hour labels + const headerDiv = document.createElement('div'); + headerDiv.className = 'heatmap-day-label'; + container.appendChild(headerDiv); + + for (let hour = 0; hour < 24; hour++) { + const hourLabel = document.createElement('div'); + hourLabel.className = 'heatmap-hour-label'; + hourLabel.textContent = hour; + container.appendChild(hourLabel); + } + + // Rows for each day + days.forEach((day, dayIndex) => { + const dayLabel = document.createElement('div'); + dayLabel.className = 'heatmap-day-label'; + dayLabel.textContent = day; + container.appendChild(dayLabel); + + for (let hour = 0; hour < 24; hour++) { + const value = dataMatrix[dayIndex]?.[hour] || 0; + const cell = document.createElement('div'); + cell.className = 'heatmap-cell'; + + if (value === 0) { + cell.classList.add('none'); + } else if (value < lowThreshold) { + cell.classList.add('low'); + } else if (value < highThreshold) { + cell.classList.add('medium'); + } else { + cell.classList.add('high'); + } + + cell.title = `${day} ${hour}h: ${value.toFixed(2)} kWh`; + container.appendChild(cell); + } + }); + + } catch (error) { + console.error('[Boiler] Error rendering heatmap:', error); + } +} + +// Removed duplicate showNotification - using DashboardUtils.showNotification instead + + +// Export enhanced boiler functions +window.DashboardBoiler = Object.assign(window.DashboardBoiler || {}, { + initBoilerDashboard, + loadBoilerData, + loadBasicBoilerData, + loadExtendedBoilerData, + initializeBoilerChart, + renderBoilerProfilingChart, + renderBoilerHeatmap, + updateBoilerSensors, + updateBoilerProfile, + planBoilerHeating, + applyBoilerPlan, + cancelBoilerPlan, + init: function() { + console.log('[DashboardBoiler] Enhanced - Data & Chart loaded'); + } +}); + +console.log('[DashboardBoiler] Enhanced module loaded'); diff --git a/custom_components/oig_cloud/www/js/features/chmu.js b/custom_components/oig_cloud/www/js/features/chmu.js new file mode 100644 index 00000000..0da0409c --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/chmu.js @@ -0,0 +1,330 @@ +/* eslint-disable */ +// === ČHMÚ WEATHER WARNING FUNCTIONS === + +var chmuWarningData = null; + +// Update ČHMÚ warning badge +function updateChmuWarningBadge() { + const hass = getHass(); + if (!hass) return; + + const localSensorId = `sensor.oig_${INVERTER_SN}_chmu_warning_level`; + const globalSensorId = `sensor.oig_${INVERTER_SN}_chmu_warning_level_global`; + + const localSensor = hass.states[localSensorId]; + const globalSensor = hass.states[globalSensorId]; + + if (!localSensor) { + console.log('[ČHMÚ] Local sensor not found:', localSensorId); + return; + } + + const badge = document.getElementById('chmu-warning-badge'); + const icon = document.getElementById('chmu-icon'); + const text = document.getElementById('chmu-text'); + + if (!badge || !icon || !text) return; + + const severity = parseInt(localSensor.state) || 0; + const attrs = localSensor.attributes || {}; + const warningsCount = attrs.warnings_count || 0; + const eventType = attrs.event_type || ''; + + // OPRAVENO: Pokud je warnings_count=0 nebo event_type obsahuje "Žádná výstraha", zobraz jako severity 0 + const effectiveSeverity = (warningsCount === 0 || eventType.includes('Žádná výstraha')) ? 0 : severity; + + // Store data for modal + chmuWarningData = { + local: localSensor, + global: globalSensor, + severity: effectiveSeverity + }; + + // Remove all severity classes + badge.className = 'chmu-warning-badge'; + badge.classList.add(`severity-${effectiveSeverity}`); + + // Update icon and text based on effective severity + if (effectiveSeverity === 0) { + icon.textContent = '✓'; + text.textContent = 'Bez výstrah'; + } else { + if (effectiveSeverity >= 3) { + icon.textContent = '🚨'; + } else { + icon.textContent = '⚠️'; + } + + // Show event type instead of generic "Oranžové varování" + text.textContent = eventType; + + // If multiple warnings, show count + if (warningsCount > 1) { + text.textContent = `${eventType} +${warningsCount - 1}`; + } + } +} + +/** + * Update battery efficiency statistics on Pricing tab + * Loads data from battery_efficiency sensor and displays monthly stats + */ +function toggleChmuWarningModal() { + const modal = document.getElementById('chmu-modal'); + if (!modal) return; + + if (modal.classList.contains('active')) { + closeChmuWarningModal(); + } else { + openChmuWarningModal(); + } +} + +// Open ČHMÚ warning modal +function openChmuWarningModal() { + const modal = document.getElementById('chmu-modal'); + const modalBody = document.getElementById('chmu-modal-body'); + + if (!modal || !modalBody || !chmuWarningData) return; + + modal.classList.add('active'); + + // Render modal content + renderChmuWarningModal(modalBody); +} + +// Close ČHMÚ warning modal +function closeChmuWarningModal(event) { + const modal = document.getElementById('chmu-modal'); + if (!modal) return; + + // If event is provided, check if we clicked outside the content + if (event && event.target !== modal) return; + + modal.classList.remove('active'); +} + +// Render ČHMÚ warning modal content +function renderChmuWarningModal(container) { + if (!chmuWarningData || !container) return; + + const { local, global } = chmuWarningData; + const attrs = local.attributes || {}; + const severity = parseInt(local.state) || 0; + + // If no warnings + if (severity === 0) { + container.innerHTML = ` +
+
☀️
+

Žádná meteorologická výstraha

+

V současné době nejsou aktivní žádná varování pro váš region.

+
+ `; + return; + } + + // Get warnings from new structure + const allWarningsDetails = attrs.all_warnings_details || []; + const topEventType = attrs.event_type; + const topSeverity = attrs.severity; + const topDescription = attrs.description; + const topInstruction = attrs.instruction; + const topOnset = attrs.onset; + const topExpires = attrs.expires; + const topEtaHours = attrs.eta_hours; + + if (allWarningsDetails.length === 0) { + container.innerHTML = ` +
+
+

Data nejsou k dispozici

+

Varování byla detekována, ale detaily nejsou dostupné.

+
+ `; + return; + } + + const icon = getWarningIcon(topEventType); + const severityLabel = getSeverityLabel(severity); + const onset = topOnset ? formatChmuDateTime(topOnset) : '--'; + const expires = topExpires ? formatChmuDateTime(topExpires) : '--'; + + let etaText = ''; + if (topEtaHours !== null && topEtaHours !== undefined) { + if (topEtaHours <= 0) { + etaText = '
⏱️
Status
PROBÍHÁ NYNÍ
'; + } else if (topEtaHours < 24) { + etaText = `
⏱️
Začátek za
${Math.round(topEtaHours)} hodin
`; + } + } + + // TOP WARNING (hlavní sekce) + let html = ` +
+
+
${icon}
+
+

${topEventType}

+ ${severityLabel} +
+
+ +
+
+
+
+
Začátek
+
${onset}
+
+
+
+
+
+
Konec
+
${expires}
+
+
+ ${etaText} +
+ + ${topDescription ? ` +
+ 📋 Popis +

${topDescription}

+
+ ` : ''} + + ${topInstruction ? ` +
+ 💡 Doporučení +

${topInstruction}

+
+ ` : ''} +
+ `; + + // ALL WARNINGS (seznam všech aktivních) + if (allWarningsDetails.length > 1) { + html += '
📋 Všechny aktivní výstrahy
'; + + allWarningsDetails.forEach((warning, index) => { + const wEventType = warning.event || 'Varování'; + const wSeverity = getSeverityLevelFromName(warning.severity); + const wOnset = warning.onset ? formatChmuDateTime(warning.onset) : '--'; + const wExpires = warning.expires ? formatChmuDateTime(warning.expires) : '--'; + const wRegions = (warning.regions || []).join(', ') || 'Celá ČR'; + const wIcon = getWarningIcon(wEventType); + const wSeverityLabel = warning.severity || 'Neznámá'; + + html += ` +
+
+
${wIcon}
+
+
${wEventType}
+ ${wSeverityLabel} +
+
+
+
+ 📍 Regiony: + ${wRegions} +
+
+ ⏰ Platnost: + ${wOnset} – ${wExpires} +
+
+
+ `; + }); + } + + container.innerHTML = html; +} + +// Helper: Convert severity name to level +function getSeverityLevelFromName(severityName) { + const map = { + 'Minor': 1, + 'Moderate': 2, + 'Severe': 3, + 'Extreme': 4 + }; + return map[severityName] || 1; +} + +// Get icon for warning type +function getWarningIcon(eventType) { + const icons = { + 'Vítr': '🌪️', + 'Silný vítr': '💨', + 'Déšť': '🌧️', + 'Silný déšť': '⛈️', + 'Sníh': '❄️', + 'Sněžení': '🌨️', + 'Bouřky': '⛈️', + 'Mráz': '🥶', + 'Vedro': '🌡️', + 'Mlha': '🌫️', + 'Náledí': '🧊', + 'Laviny': '⚠️' + }; + + for (const [key, icon] of Object.entries(icons)) { + if (eventType.includes(key)) return icon; + } + + return '⚠️'; +} + +// Get severity label +function getSeverityLabel(severity) { + const labels = { + 1: 'Minor', + 2: 'Moderate', + 3: 'Severe', + 4: 'Extreme' + }; + return labels[severity] || 'Unknown'; +} + +// Format ČHMÚ datetime +function formatChmuDateTime(isoString) { + if (!isoString) return '--'; + + try { + const date = new Date(isoString); + const day = date.getDate().toString().padStart(2, '0'); + const month = (date.getMonth() + 1).toString().padStart(2, '0'); + const hours = date.getHours().toString().padStart(2, '0'); + const minutes = date.getMinutes().toString().padStart(2, '0'); + + return `${day}.${month}. ${hours}:${minutes}`; + } catch (e) { + return isoString; + } +} + +// ======================================================================== +// MODE TIMELINE DIALOG - Phase 2.7 +// ======================================================================== + +// === TIMELINE (moved to dashboard-timeline.js) === +// MODE_CONFIG is already defined in dashboard-timeline.js as const +// No need to re-declare it here + +// Export ČHMÚ functions +window.DashboardChmu = { + updateChmuWarningBadge, + toggleChmuWarningModal, + openChmuWarningModal, + closeChmuWarningModal, + renderChmuWarningModal, + init: function() { + console.log('[DashboardChmu] Initialized'); + } +}; + +console.log('[DashboardChmu] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/features/detail-tabs.js b/custom_components/oig_cloud/www/js/features/detail-tabs.js new file mode 100644 index 00000000..fd282966 --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/detail-tabs.js @@ -0,0 +1,833 @@ +/* eslint-disable */ +/** + * OIG Cloud - Detail Tabs Dashboard Component + * + * FÁZE 6: Frontend integrace pro Detail Tabs API + * + * Purpose: + * - Zobrazení mode-agregovaných dat pro Včera/Dnes/Zítra + * - Mode match detection (plán vs. realita) + * - Adherence % tracking + * - Tab navigation + * + * API: /api/oig_cloud/battery_forecast/{box_id}/detail_tabs + * + * @author OIG Cloud Team + * @version 1.0.0 + * @date 2025-11-06 + */ + +// Mode configuration (inherited from dashboard-timeline.js) +const DETAIL_TABS_MODE_CONFIG = { + 'HOME I': { icon: '🏠', color: 'rgba(76, 175, 80, 0.7)', label: 'HOME I' }, + 'HOME II': { icon: '⚡', color: 'rgba(33, 150, 243, 0.7)', label: 'HOME II' }, + 'HOME III': { icon: '🔋', color: 'rgba(156, 39, 176, 0.7)', label: 'HOME III' }, + 'HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.7)', label: 'HOME UPS' }, + 'FULL HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.7)', label: 'FULL HOME UPS' }, + 'DO NOTHING': { icon: '⏸️', color: 'rgba(158, 158, 158, 0.7)', label: 'DO NOTHING' }, + 'Unknown': { icon: '❓', color: 'rgba(158, 158, 158, 0.5)', label: 'Unknown' } +}; + +/** + * DetailTabsDialog Class - manages the detail tabs popup dialog + * Shows mode-aggregated data with adherence tracking + */ +class DetailTabsDialog { + constructor(boxId) { + this.boxId = boxId; + this.dialogElement = null; + this.isOpen = false; + this.activeTab = 'today'; // Default tab - DNES + this.plan = 'hybrid'; + this.cache = { + yesterday: null, + today: null, + tomorrow: null, + lastUpdate: null + }; + this.updateInterval = null; + } + + /** + * Initialize dialog - called once on page load + */ + init() { + this.dialogElement = document.getElementById('detail-tabs-dialog'); + if (!this.dialogElement) { + console.error('[DetailTabs] Dialog element not found'); + return; + } + + // Setup close button + const closeBtn = this.dialogElement.querySelector('.close-dialog'); + if (closeBtn) { + closeBtn.addEventListener('click', () => this.close()); + } + + // Setup tab buttons + const tabBtns = this.dialogElement.querySelectorAll('.tab-btn'); + tabBtns.forEach((btn) => { + btn.addEventListener('click', (e) => { + const target = e.target; + const tab = target.dataset.tab; + if (tab) { + this.switchTab(tab); + } + }); + }); + + console.log('[DetailTabs] Dialog initialized'); + } + + /** + * Open dialog with specific tab + */ + async open(tab = 'today', plan = 'hybrid') { + if (!this.dialogElement) { + console.error('[DetailTabs] Dialog not initialized'); + return; + } + + this.isOpen = true; + this.activeTab = tab; + this.plan = plan || 'hybrid'; + this.dialogElement.style.display = 'block'; + + // Fetch data + await this.fetchData(); + + // Render active tab + this.switchTab(this.activeTab); + + // Start auto-refresh for today/tomorrow tabs (60s interval matches cache TTL) + if (this.activeTab === 'today' || this.activeTab === 'tomorrow') { + this.startAutoRefresh(); + } + + console.log(`[DetailTabs] Dialog opened with ${tab} tab (${this.plan})`); + } + + /** + * Close dialog + */ + close() { + if (this.dialogElement) { + this.dialogElement.style.display = 'none'; + } + this.isOpen = false; + this.stopAutoRefresh(); + console.log('[DetailTabs] Dialog closed'); + } + + /** + * Switch to specific tab + */ + switchTab(tab) { + this.activeTab = tab; + + // Update tab buttons + const tabBtns = this.dialogElement?.querySelectorAll('.tab-btn'); + tabBtns?.forEach((btn) => { + if (btn.dataset.tab === tab) { + btn.classList.add('active'); + } else { + btn.classList.remove('active'); + } + }); + + // Render tab content + this.renderTab(tab); + + // Auto-refresh strategy + this.stopAutoRefresh(); + if (tab === 'today' || tab === 'tomorrow') { + this.startAutoRefresh(); + } + + console.log(`[DetailTabs] Switched to ${tab} tab`); + } + + /** + * Fetch data from Detail Tabs API + */ + async fetchData() { + try { + const params = []; + if (this.plan) { + params.push(`plan=${this.plan}`); + } + if (this.activeTab) { + params.push(`tab=${this.activeTab}`); + } + const query = params.length ? `?${params.join('&')}` : ''; + const apiUrl = `/api/oig_cloud/battery_forecast/${this.boxId}/detail_tabs${query}`; + console.log(`[DetailTabs] Fetching data from ${apiUrl}`); + + const response = await fetchWithAuth(apiUrl); + if (!response.ok) { + throw new Error(`HTTP ${response.status}: ${response.statusText}`); + } + + const data = await response.json(); + + this.cache = { + yesterday: data.yesterday || null, + today: data.today || null, + tomorrow: data.tomorrow || null, + lastUpdate: new Date() + }; + + console.log('[DetailTabs] Data fetched:', { + yesterday: this.cache.yesterday?.mode_blocks?.length || 0, + today: this.cache.today?.mode_blocks?.length || 0, + tomorrow: this.cache.tomorrow?.mode_blocks?.length || 0 + }); + } catch (error) { + console.error('[DetailTabs] Failed to fetch data:', error); + } + } + + /** + * Render specific tab + */ + renderTab(tab) { + const container = document.getElementById(`${tab}-detail-container`); + if (!container) { + console.error(`[DetailTabs] Container for ${tab} not found`); + return; + } + + const tabData = this.cache[tab]; + if (!tabData || !tabData.mode_blocks || tabData.mode_blocks.length === 0) { + container.innerHTML = this.renderNoData(tab); + return; + } + + // Render summary + mode blocks + container.innerHTML = this.renderTabContent(tabData, tab); + + console.log(`[DetailTabs] Rendered ${tab} tab with ${tabData.mode_blocks.length} mode blocks`); + } + + /** + * Render tab content: summary + mode blocks + */ + renderTabContent(tabData, tabName) { + const { date, mode_blocks, summary } = tabData; + + const summaryHtml = this.renderSummary(summary, tabName); + + // Pro DNES tab: rozdělit na sekce podle statusu + let blocksHtml = ''; + if (tabName === 'today') { + const completedBlocks = mode_blocks.filter(b => b.status === 'completed'); + const currentBlocks = mode_blocks.filter(b => b.status === 'current'); + const plannedBlocks = mode_blocks.filter(b => b.status === 'planned'); + + blocksHtml = ` + ${completedBlocks.length > 0 ? ` +
+

⏮️ Uplynulé

+
+ ${completedBlocks.map((block, index) => this.renderModeBlock(block, index)).join('')} +
+
+ ` : ''} + + ${currentBlocks.length > 0 ? ` +
+

▶️ Aktuální

+
+ ${currentBlocks.map((block, index) => this.renderModeBlock(block, index)).join('')} +
+
+ ` : ''} + + ${plannedBlocks.length > 0 ? ` +
+

⏭️ Plán

+
+ ${plannedBlocks.map((block, index) => this.renderModeBlock(block, index)).join('')} +
+
+ ` : ''} + `; + } else { + // VČERA/ZÍTRA: flat list + blocksHtml = ` +
+ ${mode_blocks.map((block, index) => this.renderModeBlock(block, index)).join('')} +
+ `; + } + + return ` +
+ + ${summaryHtml} + + + ${blocksHtml} + + + +
+ `; + } + + /** + * Render summary tiles at top of tab + * BE již počítá aggregované metriky v summary.metrics + */ + renderSummary(summary, tabName) { + if (!summary) { + return ''; + } + + const { overall_adherence, mode_switches } = summary; + const metrics = summary.metrics || {}; + + // Hlavní 4 metriky (BE aggregace) + const metricTiles = [ + this.renderSmartMetricTile(metrics.cost, '💰', 'Náklady', 'Kč', tabName), + this.renderSmartMetricTile(metrics.solar, '☀️', 'Solární výroba', 'kWh', tabName), + this.renderSmartMetricTile(metrics.consumption, '🏠', 'Spotřeba', 'kWh', tabName), + this.renderSmartMetricTile(metrics.grid, '⚡', 'Odběr ze sítě', 'kWh', tabName), + ] + .filter(Boolean) + .join(''); + + // Kompaktní meta info pod hlavními metrikami + const adherenceLabel = overall_adherence !== null && overall_adherence < 100 + ? `${overall_adherence.toFixed(0)}% shoda` + : '✓ Dle plánu'; + + const metaInfo = ` +
+ ${adherenceLabel} + | + ${mode_switches || 0} přepnutí +
+ `; + + return ` +
+ ${metricTiles} +
+ ${overall_adherence !== null && overall_adherence < 100 ? metaInfo : ''} + `; + } + + /** + * Render smart metric tile - jednoduchý design s porovnáním + * Logika: Pokud máme actual, zobrazujeme actual vs plán + * Pokud nemáme actual, zobrazujeme jen plán + */ + renderSmartMetricTile(metric, icon, label, unit, tabName) { + if (!metric) { + return ''; + } + + const plan = Number(metric.plan ?? 0); + const actualValue = + metric.actual === null || metric.actual === undefined + ? null + : Number(metric.actual); + const hasActual = + actualValue !== null && + (metric.has_actual || metric.actual_samples > 0) && + tabName !== 'tomorrow'; + + const mainValue = hasActual ? actualValue : plan; + const mainLabel = hasActual ? 'Skutečnost' : 'Plán'; + + const planRow = hasActual + ? ` +
+ Plán: + ${this.formatMetricValue(plan)} ${unit} +
+ ` + : ''; + + const hintRow = + !hasActual && tabName === 'tomorrow' + ? ` +
+ Plánovaná hodnota (čeká na živá data) +
+ ` + : ''; + + let deltaRow = ''; + if (hasActual) { + const delta = actualValue - plan; + const absDelta = Math.abs(delta); + + const preferLower = label === 'Náklady' || label === 'Odběr ze sítě'; + const preferHigher = label === 'Solární výroba'; + + let deltaState = 'delta-neutral'; + if (absDelta >= 0.01) { + if (preferLower) { + deltaState = delta <= 0 ? 'delta-better' : 'delta-worse'; + } else if (preferHigher) { + deltaState = delta >= 0 ? 'delta-better' : 'delta-worse'; + } + } + + const deltaText = + deltaState === 'delta-better' + ? 'Lépe než plán' + : deltaState === 'delta-worse' + ? 'Hůře než plán' + : 'Rozdíl vs. plán'; + + const deltaValueText = + absDelta >= 0.01 + ? `${delta > 0 ? '+' : ''}${this.formatMetricValue(delta)} ${unit}` + : '±0'; + + deltaRow = ` +
+ ${deltaText} + ${deltaValueText} +
+ `; + } + + const supplemental = [planRow, hintRow, deltaRow].filter(Boolean).join(''); + + return ` +
+
+
+ ${icon} + ${label} +
+ ${mainLabel} +
+
+ ${this.formatMetricValue(mainValue)} ${unit} +
+ ${supplemental} +
+ `; + } + + renderSummaryMetricTile(metric, icon, label) { + if (!metric) { + return ''; + } + + const plan = metric.plan ?? 0; + const actual = metric.actual ?? null; + const unit = metric.unit || ''; + const hasActual = metric.has_actual; + const delta = + hasActual && actual !== null ? actual - plan : null; + + const planLabel = `${plan.toFixed(2)} ${unit}`; + + let actualHtml = ''; + if (hasActual && actual !== null) { + const deltaClass = + delta > 0 ? 'delta-positive' : delta < 0 ? 'delta-negative' : ''; + const deltaLabel = + delta !== null && Math.abs(delta) > 0.009 + ? `${delta > 0 ? '+' : ''}${delta.toFixed(2)} ${unit}` + : ''; + actualHtml = ` +
+ Skutečnost: + ${actual.toFixed(2)} ${unit} + ${deltaLabel} +
+ `; + } + + return ` +
+
${icon}
+
${label}
+
+ Plán: + ${planLabel} +
+ ${actualHtml} +
+ `; + } + + /** + * Render single mode block + */ + renderModeBlock(block, index) { + const { + mode_historical, + mode_planned, + mode_match, + status, + start_time, + end_time, + duration_hours, + cost_historical, + cost_planned, + cost_delta, + solar_planned_kwh, + solar_actual_kwh, + consumption_planned_kwh, + consumption_actual_kwh, + grid_import_planned_kwh, + grid_import_actual_kwh, + grid_export_planned_kwh, + grid_export_actual_kwh, + interval_reasons + } = block; + + // Get mode config + const historicalMode = DETAIL_TABS_MODE_CONFIG[mode_historical] || DETAIL_TABS_MODE_CONFIG['Unknown']; + const plannedMode = DETAIL_TABS_MODE_CONFIG[mode_planned] || DETAIL_TABS_MODE_CONFIG['Unknown']; + + // Status icon + const statusIcons = { + completed: '✅', + current: '▶️', + planned: '📅' + }; + const statusIcon = statusIcons[status] || '❓'; + + const isPlannedOnly = status === 'planned'; + const hasActualData = + !isPlannedOnly && + mode_historical && + mode_historical !== 'Unknown' && + cost_historical !== null && + cost_historical !== undefined; + + // Match indicator + const matchClass = isPlannedOnly + ? 'match-neutral' + : mode_match + ? 'match-yes' + : 'match-no'; + const matchIcon = isPlannedOnly ? 'ℹ️' : mode_match ? '✅' : '❌'; + const matchLabel = isPlannedOnly ? 'Plán' : mode_match ? 'Shoda' : 'Odchylka'; + + // Cost delta indicator + let costDeltaHtml = ''; + if (!isPlannedOnly && cost_delta !== null && cost_delta !== undefined) { + const deltaClass = cost_delta > 0 ? 'cost-higher' : cost_delta < 0 ? 'cost-lower' : 'cost-equal'; + const deltaIcon = cost_delta > 0 ? '⬆️' : cost_delta < 0 ? '⬇️' : '➡️'; + costDeltaHtml = ` + + ${deltaIcon} ${cost_delta > 0 ? '+' : ''}${cost_delta.toFixed(2)} Kč + + `; + } + + // Build compact single-line layout + let modeCompare; + if (hasActualData && mode_planned !== 'Unknown') { + modeCompare = `${historicalMode.icon} ${historicalMode.label} + + ${plannedMode.icon} ${plannedMode.label}`; + } else { + modeCompare = `${plannedMode.icon} ${plannedMode.label}`; + } + + const costCompare = this.renderPlanActualValue( + hasActualData ? cost_historical : null, + cost_planned ?? 0, + 'Kč', + costDeltaHtml + ); + + const modeLabelText = hasActualData ? 'Skutečnost/Plán:' : 'Plánovaný režim:'; + const costLabelText = hasActualData ? 'Cena (skutečná/plán):' : 'Plánovaná cena:'; + + const timeRange = this.formatTimeRange(start_time, end_time); + const reasonsHtml = this.renderIntervalReasons(interval_reasons, status); + + return ` +
+
+
+ ${statusIcon} ${timeRange} + (${duration_hours?.toFixed(1)}h) +
+
+ ${matchIcon} ${matchLabel} +
+
+ +
+ +
+ ${modeLabelText} +
${modeCompare}
+
+ + +
+ ${costLabelText} +
${costCompare}
+
+ + +
+ ☀️ Solár: +
+ ${this.renderPlanActualValue( + solar_actual_kwh, + solar_planned_kwh, + 'kWh' + )} +
+
+ + +
+ 🏠 Spotřeba: +
+ ${this.renderPlanActualValue( + consumption_actual_kwh, + consumption_planned_kwh, + 'kWh' + )} +
+
+ + +
+ ⬇️ Import: +
+ ${this.renderPlanActualValue( + grid_import_actual_kwh, + grid_import_planned_kwh, + 'kWh' + )} +
+
+ + +
+ ⬆️ Export: +
+ ${this.renderPlanActualValue( + grid_export_actual_kwh, + grid_export_planned_kwh, + 'kWh' + )} +
+
+ + ${reasonsHtml} +
+
+ `; + } + + renderIntervalReasons(intervalReasons, status) { + if (!intervalReasons || intervalReasons.length === 0) { + return ''; + } + + const items = intervalReasons.map(item => { + const timeLabel = this.formatTimeLabel(item.time); + return `
${timeLabel}${item.reason}
`; + }).join(''); + + return ` +
+ 🧠 Důvod${status === 'completed' ? ' (plán)' : ''}: +
+ ${items} +
+
+ `; + } + + renderPlanActualValue(actual, planned, unit = 'kWh', extra = '') { + const hasActual = + actual !== null && actual !== undefined; + const planValue = + planned !== null && planned !== undefined + ? `${planned.toFixed(2)} ${unit}` + : 'N/A'; + + if (!hasActual) { + return `${planValue}`; + } + + const delta = actual - (planned ?? 0); + const deltaClass = + delta > 0 ? 'delta-positive' : delta < 0 ? 'delta-negative' : ''; + const deltaLabel = + Math.abs(delta) > 0.009 + ? `${delta > 0 ? '+' : ''}${delta.toFixed(2)} ${unit}` + : ''; + + return ` + + ${actual.toFixed(2)} ${unit} + + ${planValue} + ${deltaLabel} + ${extra || ''} + + `; + } + + /** + * Format ISO timestamps into local HH:MM range (cs-CZ) + */ + formatTimeRange(startIso, endIso) { + try { + const fmt = new Intl.DateTimeFormat('cs-CZ', { + hour: '2-digit', + minute: '2-digit' + }); + const startDate = new Date(startIso); + const endDate = new Date(endIso); + if (isNaN(startDate.getTime()) || isNaN(endDate.getTime())) { + return `${startIso} - ${endIso}`; + } + return `${fmt.format(startDate)} – ${fmt.format(endDate)}`; + } catch (err) { + console.warn('[DetailTabs] Failed to format time range', err); + return `${startIso} - ${endIso}`; + } + } + + formatTimeLabel(isoTs) { + if (!isoTs) return '--:--'; + try { + const dt = new Date(isoTs); + if (isNaN(dt.getTime())) { + return '--:--'; + } + return dt.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }); + } catch (err) { + return '--:--'; + } + } + + /** + * Render "No Data" message + */ + renderNoData(tab) { + const messages = { + yesterday: 'Včerejší data nejsou k dispozici', + today: 'Dnešní data nejsou k dispozici', + tomorrow: 'Plán pro zítřek ještě není k dispozici (OTE ceny přijdou po 13:00)' + }; + + return ` +
+
📊
+

${messages[tab] || 'Data nejsou k dispozici'}

+
+ `; + } + + /** + * Format date for display + */ + formatDate(dateStr) { + if (!dateStr) return ''; + const date = new Date(dateStr); + return date.toLocaleDateString('cs-CZ', { + weekday: 'long', + year: 'numeric', + month: 'long', + day: 'numeric' + }); + } + + formatMetricValue(value) { + const num = Number(value); + if (!Number.isFinite(num)) { + return '0.00'; + } + + const abs = Math.abs(num); + if (abs >= 1000) { + return num.toFixed(0); + } + if (abs >= 100) { + return num.toFixed(1); + } + return num.toFixed(2); + } + + /** + * Start auto-refresh timer + */ + startAutoRefresh() { + this.stopAutoRefresh(); + // Refresh every 60s to match cache TTL + this.updateInterval = setInterval(async () => { + if (this.isOpen) { + console.log('[DetailTabs] Auto-refreshing data...'); + await this.fetchData(); + this.renderTab(this.activeTab); + } + }, 60000); // 60s + } + + /** + * Stop auto-refresh timer + */ + stopAutoRefresh() { + if (this.updateInterval) { + clearInterval(this.updateInterval); + this.updateInterval = null; + } + } + + /** + * Destroy dialog and cleanup + */ + destroy() { + this.close(); + this.cache = { + yesterday: null, + today: null, + tomorrow: null, + lastUpdate: null + }; + console.log('[DetailTabs] Dialog destroyed'); + } +} + +// Global instance +window.DetailTabsDialog = null; + +/** + * Initialize Detail Tabs Dialog + */ +function initDetailTabsDialog(boxId) { + if (!window.DetailTabsDialog) { + window.DetailTabsDialog = new DetailTabsDialog(boxId); + window.DetailTabsDialog.init(); + console.log('[DetailTabs] Global instance created'); + } +} + +/** + * Open Detail Tabs Dialog + */ +function openDetailTabsDialog(tab = 'today', plan = 'hybrid') { + if (window.DetailTabsDialog) { + window.DetailTabsDialog.open(tab, plan); + } else { + console.error('[DetailTabs] Dialog not initialized. Call initDetailTabsDialog() first.'); + } +} + +// Export for global access +window.initDetailTabsDialog = initDetailTabsDialog; +window.openDetailTabsDialog = openDetailTabsDialog; diff --git a/custom_components/oig_cloud/www/js/features/flow.js b/custom_components/oig_cloud/www/js/features/flow.js new file mode 100644 index 00000000..dee662e6 --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/flow.js @@ -0,0 +1,2149 @@ +/* eslint-disable */ +// === EXISTING FUNCTIONS === + +// NOTE: Analytics/Pricing/CHMU functions are called directly via window.Dashboard* +// to avoid load-order dependency issues (flow.js loads before analytics.js) + +// Get sensor entity ID +function getSensorId(sensor) { + return `sensor.oig_${INVERTER_SN}_${sensor}`; +} + +// Find shield sensor dynamically (may have suffix like _2, _3) +// Lazy load from utils to avoid load-time dependency +function findShieldSensorId(sensorName) { + return window.DashboardUtils?.findShieldSensorId?.(sensorName) || `sensor.oig_${INVERTER_SN}_${sensorName}`; +} + +// Update time +function updateTime() { + const now = new Date(); + document.getElementById('current-time').textContent = now.toLocaleTimeString('cs-CZ'); +} + +// Debouncing timers +var drawConnectionsTimeout = null; +var loadDataTimer = null; +var loadDetailsTimer = null; + +function safeClearTimeout(timerId) { + try { + if (timerId) clearTimeout(timerId); + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + } +} + +function safeSetTimeout(fn, delay) { + try { + return setTimeout(() => { + try { + if (document?.body) fn(); + } catch (e) { } + }, delay); + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + return null; + } +} + +// Debounced version of drawConnections to prevent excessive redraws +function debouncedDrawConnections(delay = 100) { + if (drawConnectionsTimeout) { + safeClearTimeout(drawConnectionsTimeout); + } + drawConnectionsTimeout = safeSetTimeout(() => { + drawConnections(); + drawConnectionsTimeout = null; + }, delay); +} + +// Debounced loadData() - prevents excessive calls +function debouncedLoadData() { + if (loadDataTimer) safeClearTimeout(loadDataTimer); + loadDataTimer = safeSetTimeout(() => { + loadData(); + }, 200); // Wait 200ms before executing +} + +// Debounced loadNodeDetails() - prevents excessive calls +function debouncedLoadNodeDetails() { + if (loadDetailsTimer) safeClearTimeout(loadDetailsTimer); + loadDetailsTimer = safeSetTimeout(() => { + loadNodeDetails(); + }, 500); // Wait 500ms before executing +} + +// Draw connection lines +function drawConnections() { + const svg = document.getElementById('connections'); + const canvas = document.querySelector('.flow-canvas'); + if (!svg) return; // Guard: SVG neexistuje + + svg.innerHTML = ''; + + // OPRAVA BUG #2: Použít cache místo přepočítávání + const centers = cachedNodeCenters || getNodeCenters(); + if (!centers) return; + + // Draw lines + const connections = [ + { from: 'solar', to: 'inverter', color: '#ffd54f' }, + { from: 'battery', to: 'inverter', color: '#4caf50' }, + { from: 'inverter', to: 'grid', color: '#42a5f5' }, + { from: 'inverter', to: 'house', color: '#f06292' } + ]; + + connections.forEach(conn => { + if (!centers[conn.from] || !centers[conn.to]) return; // Skip if node missing + + const from = centers[conn.from]; + const to = centers[conn.to]; + + const line = document.createElementNS('http://www.w3.org/2000/svg', 'line'); + line.setAttribute('x1', from.x); + line.setAttribute('y1', from.y); + line.setAttribute('x2', to.x); + line.setAttribute('y2', to.y); + line.setAttribute('stroke', conn.color); + line.classList.add('flow-line'); + svg.appendChild(line); + }); +} + +// Create flow particle with optional delay for multiple particles +function createParticle(from, to, color, speed = 2000, delay = 0) { + if (!from || !to) return; + + setTimeout(() => { + const particle = document.createElement('div'); + particle.className = 'particle'; + particle.style.background = color; + particle.style.left = from.x + 'px'; + particle.style.top = from.y + 'px'; + + const particlesContainer = document.getElementById('particles'); + if (!particlesContainer) return; // Guard: container neexistuje + + particlesContainer.appendChild(particle); + + const dx = to.x - from.x; + const dy = to.y - from.y; + const distance = Math.sqrt(dx * dx + dy * dy); + + particle.animate([ + { left: from.x + 'px', top: from.y + 'px', opacity: 0 }, + { opacity: 1, offset: 0.1 }, + { opacity: 1, offset: 0.9 }, + { left: to.x + 'px', top: to.y + 'px', opacity: 0 } + ], { + duration: speed, + easing: 'linear' + }).onfinish = () => particle.remove(); + }, delay); +} + +// ======================================== +// FLOW ANIMATION v2.0 - Multi-layer particles +// ======================================== + +// Maxima pro normalizaci intenzity (Watt) +const FLOW_MAXIMUMS = { + solar: 5400, // 5.4 kW + battery: 7000, // 7 kW + grid: 17000, // 17 kW + house: 10000 // 10 kW +}; + +// Barevné konstanty +const FLOW_COLORS = { + solar: '#ffd54f', // Žlutá + battery: '#ff9800', // Oranžová + grid_import: '#f44336', // Červená (odběr) + grid_export: '#4caf50', // Zelená (dodávka) + house: '#f06292' // Růžová (fallback) +}; + +// Globální stav pro kontinuální animaci kuliček +// Nový formát: podporuje multi-source flows +const particleFlows = { + solarToInverter: { active: false, speed: 2000, count: 0, sources: [] }, + batteryToInverter: { active: false, speed: 2000, count: 0, sources: [] }, + inverterToBattery: { active: false, speed: 2000, count: 0, sources: [] }, + gridToInverter: { active: false, speed: 2000, count: 0, sources: [] }, + inverterToGrid: { active: false, speed: 2000, count: 0, sources: [] }, + inverterToHouse: { active: false, speed: 2000, count: 0, sources: [] } +}; + +/** + * Vyčistí všechny sub-flow klíče pro daný flow + * @param {string} flowKey - Hlavní klíč toku + */ +function cleanupSubFlows(flowKey) { + Object.keys(particleFlows).forEach(key => { + if (key.startsWith(flowKey + '_')) { + particleFlows[key].active = false; + delete particleFlows[key]; + } + }); +} + +/** + * OPRAVA ÚNIK PAMĚTI: Zastaví a vyčistí VŠECHNY particle flows včetně animací + * Toto je kritická funkce pro prevenci memory leaks při dlouhém běhu dashboardu + */ +function stopAllParticleFlows() { + console.log('[Particles] 🧹 Stopping all particle flows and cleaning up...'); + + // 1. Zastavit všechny flows a SMAZAT je z objektu + let flowCount = 0; + Object.keys(particleFlows).forEach(key => { + particleFlows[key].active = false; + delete particleFlows[key]; + flowCount++; + }); + + console.log(`[Particles] ✓ Stopped ${flowCount} flows`); + + // 2. Vyčistit DOM a zrušit běžící animace + const container = document.getElementById('particles'); + if (container) { + const particles = container.querySelectorAll('.particle'); + const particleCount = particles.length; + + // Explicitně zrušit všechny Web Animation API animace + particles.forEach(particle => { + const animations = particle.getAnimations(); + animations.forEach(anim => { + try { + anim.cancel(); + } catch (e) { + // Ignorovat chyby při rušení už dokončených animací + } + }); + particle.remove(); + }); + + // Finální vyčištění kontejneru + container.innerHTML = ''; + + console.log(`[Particles] ✓ Cleaned ${particleCount} particles from DOM`); + } else { + console.warn('[Particles] ⚠️ Particles container not found'); + } + + // 3. Reinicializovat základní flow objekty (ale neaktivní) + const baseFlows = ['solarToInverter', 'batteryToInverter', 'inverterToBattery', + 'gridToInverter', 'inverterToGrid', 'inverterToHouse']; + baseFlows.forEach(flowKey => { + particleFlows[flowKey] = { active: false, speed: 2000, count: 0, sources: [] }; + }); + + console.log('[Particles] ✓ Particle flows cleaned and reinitialized'); +} + +/** + * Aktualizovat všechny particle flows po změně layoutu. + * Zastaví všechny běžící flows a vynutí reinicializaci s novými pozicemi nodes. + */ +function updateAllParticleFlows() { + console.log('[Layout] 🔄 Updating all particle flows after layout change...'); + + // DŮLEŽITÉ: Zastavit VŠECHNY běžící particles okamžitě + stopAllParticleFlows(); + + // Invalidovat cache pozic nodes + if (typeof cachedNodeCenters !== 'undefined') { + cachedNodeCenters = null; + } + if (typeof lastLayoutHash !== 'undefined') { + lastLayoutHash = null; + } + + // Nastavit flag pro reinicializaci při dalším update cyklu + if (typeof needsFlowReinitialize !== 'undefined') { + needsFlowReinitialize = true; + } + + // NEBUDEME spouštět animateFlow okamžitě - necháme to na normální update cyklus + // Tím zajistíme že particles dostanou správné pozice z getNodeCenters() + + console.log('[Layout] ✓ All particles stopped, waiting for next data update to reinitialize'); +} + +/** + * DEBUGGING: Vypíše aktuální stav paměti a počet kuliček + * Volitelné - použij v konzoli nebo pro monitoring + */ +function logParticleMemoryStats() { + const container = document.getElementById('particles'); + const particleCount = container ? container.children.length : 0; + const flowCount = Object.keys(particleFlows).length; + const activeFlows = Object.keys(particleFlows).filter(k => particleFlows[k]?.active).length; + + console.log('═══════════════════════════════════════'); + console.log('📊 PARTICLE MEMORY STATS'); + console.log('═══════════════════════════════════════'); + console.log(`🔵 Particles in DOM: ${particleCount}`); + console.log(`📦 Flow objects: ${flowCount} (${activeFlows} active)`); + + if (performance.memory) { + const heapMB = (performance.memory.usedJSHeapSize / 1048576).toFixed(2); + const limitMB = (performance.memory.jsHeapSizeLimit / 1048576).toFixed(2); + const percentage = ((performance.memory.usedJSHeapSize / performance.memory.jsHeapSizeLimit) * 100).toFixed(1); + console.log(`💾 Heap used: ${heapMB} MB / ${limitMB} MB (${percentage}%)`); + } + + console.log('═══════════════════════════════════════'); + + return { particleCount, flowCount, activeFlows }; +} + +// Globální funkce pro debugging - můžeš volat z konzole +window.logParticleStats = logParticleMemoryStats; +window.cleanupParticles = stopAllParticleFlows; + +// Cache pro smoothing rychlosti - zabraňuje náhlým skokům +const speedCache = {}; + +async function updatePlannerModeBadge(force = false) { + const badge = document.getElementById('planner-mode-badge'); + if (!badge) { + return; + } + + const data = window.PlannerState + ? await window.PlannerState.fetchSettings(force) + : null; + const newState = data ? (data.auto_mode_switch_enabled ? 'enabled' : 'disabled') : 'unknown'; + let labelText = 'Plánovač: --'; + let className = 'auto-unknown'; + + if (!data) { + labelText = 'Plánovač: N/A'; + } else if (newState === 'enabled') { + labelText = 'Plánovač: AUTO'; + className = 'auto-enabled'; + } else { + labelText = 'Plánovač: MANUÁL'; + className = 'auto-disabled'; + } + + if (typeof updateElementIfChanged === 'function') { + updateElementIfChanged('planner-mode-badge', labelText, 'planner-mode-badge-text'); + } else if (badge.textContent !== labelText) { + badge.textContent = labelText; + } + + if (badge.dataset.modeState !== newState) { + badge.classList.remove('auto-enabled', 'auto-disabled', 'auto-unknown'); + badge.classList.add(className); + badge.dataset.modeState = newState; + } +} + +/** + * Vypočítá parametry toku podle výkonu a maxima s VYHLAZENÍM rychlosti + * @param {number} power - Výkon v W (může být záporný) + * @param {number} maximum - Maximální výkon v W + * @param {string} flowKey - Klíč toku pro cachování rychlosti + * @returns {object} { active, intensity, count, speed, size, opacity } + */ +function calculateFlowParams(power, maximum, flowKey = null) { + const absPower = Math.abs(power); + const intensity = Math.min(100, (absPower / maximum) * 100); + + // Vypočítat cílovou rychlost + const targetSpeed = Math.max(500, Math.round(3500 - (intensity * 30))); // 3500-500ms + + // OPRAVA: Smoothing rychlosti - zabraňuje náhlým skokům + let finalSpeed = targetSpeed; + if (flowKey && speedCache[flowKey] !== undefined) { + // Exponential moving average (alpha = 0.3 = 30% nová hodnota, 70% stará) + const alpha = 0.3; + finalSpeed = Math.round(alpha * targetSpeed + (1 - alpha) * speedCache[flowKey]); + + // Pokud je rozdíl menší než 100ms, použít starou hodnotu (prevent jitter) + if (Math.abs(finalSpeed - speedCache[flowKey]) < 100) { + finalSpeed = speedCache[flowKey]; + } + } + + // Uložit do cache + if (flowKey) { + speedCache[flowKey] = finalSpeed; + } + + return { + active: absPower >= 50, // Práh: 50W (citlivější než 500W) + intensity: intensity, + count: Math.max(1, Math.min(4, Math.ceil(1 + intensity / 33))), // 1-4 kuličky + speed: finalSpeed, // Vyhlazená rychlost + size: Math.round(6 + (intensity / 10)), // 6-16px + opacity: Math.min(1.0, 0.3 + (intensity / 150)) // 0.3-1.0 + }; +} + +/** + * Vytvoří kontinuální tok kuliček - když jedna doběhne, vytvoří se nová + * @param {string} flowKey - Klíč toku (např. 'solarToInverter') + * @param {object} from - Pozice začátku {x, y} + * @param {object} to - Pozice konce {x, y} + * @param {string} color - Barva kuličky + * @param {number} speed - Rychlost animace (ms) + * @param {number} size - Velikost kuličky (px) + * @param {number} opacity - Průhlednost (0-1) + */ +function createContinuousParticle(flowKey, from, to, color, speed, size = 8, opacity = 1) { + const flow = particleFlows[flowKey]; + if (!flow || !flow.active || !from || !to) return; + + const particle = document.createElement('div'); + particle.className = 'particle'; + particle.style.background = color; + + // OPRAVA: Konstantní velikost - žádná náhodná variace (eliminuje vizuální chaos) + particle.style.width = `${size}px`; + particle.style.height = `${size}px`; + particle.style.borderRadius = '50%'; + + // Blur pro rychlé toky + if (speed < 1500) { + particle.style.filter = 'blur(0.5px)'; + } + + particle.style.left = from.x + 'px'; + particle.style.top = from.y + 'px'; + + const particlesContainer = document.getElementById('particles'); + if (!particlesContainer) return; + + // OPRAVA ÚNIK PAMĚTI: Kontrola max počtu kuliček v DOM (prevence exponenciálního růstu) + const currentParticleCount = particlesContainer.children.length; + if (currentParticleCount > 50) { + console.warn(`[Particles] ⚠️ Too many particles (${currentParticleCount}), skipping creation for flow: ${flowKey}`); + return; + } + + particlesContainer.appendChild(particle); + + const animation = particle.animate([ + { left: from.x + 'px', top: from.y + 'px', opacity: 0 }, + { opacity: opacity, offset: 0.1 }, + { opacity: opacity, offset: 0.9 }, + { left: to.x + 'px', top: to.y + 'px', opacity: 0 } + ], { + duration: speed, + easing: 'linear' + }); + + animation.onfinish = () => { + // OPRAVA ÚNIK PAMĚTI: Explicitně zrušit animaci před odstraněním elementu + try { + animation.cancel(); + } catch (e) { + // Ignorovat chyby (animace už může být zrušená) + } + particle.remove(); + + // OPRAVA: Zkontrolovat že flow je stále aktivní PŘED vytvořením nové kuličky + // Tím zabráníme "zombie" kuličkám když se flow zastaví + const flow = particleFlows[flowKey]; + if (flow && flow.active) { + // Použít AKTUÁLNÍ rychlost z flow objektu (může se změnit během animace) + createContinuousParticle(flowKey, from, to, color, flow.speed, size, opacity); + } + }; +} + +/** + * Vytvoří multi-source flow s kuličkami různých barev + * @param {string} flowKey - Klíč toku + * @param {object} from - Pozice začátku + * @param {object} to - Pozice konce + * @param {Array} sources - [{type, power, color}, ...] + * @param {number} totalPower - Celkový výkon + * @param {number} speed - Rychlost animace + * @param {number} size - Velikost kuliček + * @param {number} opacity - Průhlednost + */ +function updateMultiSourceFlow(flowKey, from, to, sources, totalPower, speed, size, opacity) { + const flow = particleFlows[flowKey]; + if (!flow) return; + + // Zastavit starý flow pokud se změnily zdroje nebo rychlost + const sourcesChanged = JSON.stringify(flow.sources) !== JSON.stringify(sources); + const speedChanged = flow.speed !== speed; + + if (sourcesChanged || speedChanged) { + // OPRAVA: Zastavit VŠECHNY staré sub-flow klíče + Object.keys(particleFlows).forEach(key => { + if (key.startsWith(flowKey + '_')) { + particleFlows[key].active = false; + delete particleFlows[key]; + } + }); + + flow.active = false; + flow.sources = sources; + + // Restart po malém delaye + setTimeout(() => { + flow.active = true; + flow.speed = speed; + + // Pro každý zdroj vytvořit kuličky podle poměru + let cumulativeDelay = 0; + const totalCount = Math.max(1, Math.min(4, Math.ceil(sources.length + totalPower / 2000))); + + sources.forEach((source, idx) => { + const ratio = source.power / totalPower; + const sourceCount = Math.max(1, Math.round(totalCount * ratio)); + + for (let i = 0; i < sourceCount; i++) { + const particleKey = `${flowKey}_${source.type}_${i}`; + particleFlows[particleKey] = { + active: true, + speed: speed, + sources: [source] + }; + + setTimeout(() => { + createContinuousParticle( + particleKey, + from, to, + source.color, + speed, + size, + opacity + ); + }, cumulativeDelay); + + cumulativeDelay += speed / totalCount / 2; + } + }); + }, 100); + } +} + +// Spustí nebo zastaví kontinuální tok kuliček (simple single-color flow) +function updateParticleFlow(flowKey, from, to, color, active, speed, count = 1, size = 8, opacity = 1) { + const flow = particleFlows[flowKey]; + if (!flow) return; + + const wasActive = flow.active; + const countChanged = flow.count !== count; + const speedChanged = Math.abs(flow.speed - speed) > 150; // OPRAVA: Tolerace ±150ms pro prevenci zbytečných restartů + + // OPRAVA: Pokud se mění počet kuliček NEBO výrazně rychlost, musíme restartovat flow + // ALE: Nebudeme zastavovat existující kuličky - nechť doběhnou přirozeně + if (active && wasActive && (countChanged || speedChanged)) { + // Místo zastavení starých jen aktualizujeme parametry + flow.speed = speed; + flow.count = count; + + // Pokud se změnil počet, přidáme/ubereme kuličky + if (countChanged) { + console.log(`[Particles] Count changed for ${flowKey}: ${flow.count} -> ${count}`); + // Starý count byl flow.count, nový je count + const diff = count - flow.count; + + if (diff > 0) { + // Přidat kuličky + const delayBetweenParticles = speed / count / 2; + for (let i = 0; i < diff; i++) { + setTimeout(() => { + if (flow.active) { // Double-check že flow je stále aktivní + createContinuousParticle(flowKey, from, to, color, speed, size, opacity); + } + }, i * delayBetweenParticles); + } + } + // Pokud diff < 0 (ubrat kuličky), kuličky se zastaví přirozeně když onfinish zjistí jiný count + } + + return; + } + + flow.active = active; + flow.speed = speed; + flow.count = count; + + if (active && !wasActive) { + // Spustit nové toky s odstupem + const delayBetweenParticles = speed / count / 2; + for (let i = 0; i < count; i++) { + setTimeout(() => { + createContinuousParticle(flowKey, from, to, color, speed, size, opacity); + }, i * delayBetweenParticles); + } + } + // Pokud je active=false, kuličky se zastaví samy (rekurze se ukončí) +} + +/** + * Vypočítat barvu kuličky podle zdrojů energie. + * + * @param {number} solarRatio - Poměr solární energie (0-1) + * @param {number} gridRatio - Poměr energie ze sítě (0-1) + * @param {number} batteryRatio - Poměr energie z baterie (0-1, jen pro spotřebu) + * @returns {string} CSS gradient nebo jednolitá barva + */ +function getEnergySourceColor(solarRatio, gridRatio, batteryRatio = 0) { + const colors = []; + const SOLAR_COLOR = '#ffd54f'; // Žlutá + const GRID_COLOR = '#42a5f5'; // Modrá + const BATTERY_COLOR = '#ff9800'; // Oranžová + + // Normalize ratios (pokud se nesečtou na 1.0) + const total = solarRatio + gridRatio + batteryRatio; + if (total > 0) { + solarRatio = solarRatio / total; + gridRatio = gridRatio / total; + batteryRatio = batteryRatio / total; + } + + // Práh pro "čistý" zdroj (>95%) + const PURE_THRESHOLD = 0.95; + + // Pokud je jeden zdroj dominantní, použij čistou barvu + if (solarRatio > PURE_THRESHOLD) return SOLAR_COLOR; + if (gridRatio > PURE_THRESHOLD) return GRID_COLOR; + if (batteryRatio > PURE_THRESHOLD) return BATTERY_COLOR; + + // Vytvořit gradient podle poměrů + if (batteryRatio > 0) { + // 3 zdroje (pro spotřebu) + if (solarRatio > 0.05 && gridRatio > 0.05 && batteryRatio > 0.05) { + // Všechny 3 zdroje + const solarPct = (solarRatio * 100).toFixed(0); + const gridPct = ((solarRatio + gridRatio) * 100).toFixed(0); + return `linear-gradient(135deg, ${SOLAR_COLOR} 0%, ${SOLAR_COLOR} ${solarPct}%, ${GRID_COLOR} ${solarPct}%, ${GRID_COLOR} ${gridPct}%, ${BATTERY_COLOR} ${gridPct}%, ${BATTERY_COLOR} 100%)`; + } else if (solarRatio > 0.05 && batteryRatio > 0.05) { + // Solár + baterie + const solarPct = (solarRatio * 100).toFixed(0); + return `linear-gradient(135deg, ${SOLAR_COLOR} 0%, ${SOLAR_COLOR} ${solarPct}%, ${BATTERY_COLOR} ${solarPct}%, ${BATTERY_COLOR} 100%)`; + } else if (gridRatio > 0.05 && batteryRatio > 0.05) { + // Grid + baterie + const gridPct = (gridRatio * 100).toFixed(0); + return `linear-gradient(135deg, ${GRID_COLOR} 0%, ${GRID_COLOR} ${gridPct}%, ${BATTERY_COLOR} ${gridPct}%, ${BATTERY_COLOR} 100%)`; + } + } else { + // 2 zdroje (pro nabíjení baterie) + if (solarRatio > 0.05 && gridRatio > 0.05) { + // Solár + grid + const solarPct = (solarRatio * 100).toFixed(0); + return `linear-gradient(135deg, ${SOLAR_COLOR} 0%, ${SOLAR_COLOR} ${solarPct}%, ${GRID_COLOR} ${solarPct}%, ${GRID_COLOR} 100%)`; + } + } + + // Fallback na dominantní barvu + if (solarRatio >= gridRatio && solarRatio >= batteryRatio) return SOLAR_COLOR; + if (gridRatio >= batteryRatio) return GRID_COLOR; + return BATTERY_COLOR; +} + +// Global cache for node positions +var cachedNodeCenters = null; +var lastLayoutHash = null; + +// OPRAVA BUG #4: Cache pro power hodnoty +var lastPowerValues = null; + +// Prevent overlapping refreshes (iOS WebView can freeze during HA initial state burst) +var loadDataInProgress = false; +var loadDataPending = false; +var loadNodeDetailsInProgress = false; +var loadNodeDetailsPending = false; + +// Calculate layout hash to detect changes +function getLayoutHash() { + const solar = document.querySelector('.solar'); + const battery = document.querySelector('.battery'); + const inverter = document.querySelector('.inverter'); + const grid = document.querySelector('.grid-node'); + const house = document.querySelector('.house'); + const canvas = document.querySelector('.flow-canvas'); + + if (!solar || !battery || !inverter || !grid || !house || !canvas) return null; + + // Use coordinates relative to the canvas. + // On mobile WebViews (incl. HA app), viewport chrome show/hide triggers frequent resize/scroll + // which changes getBoundingClientRect() top/left but *not* the layout inside the canvas. + const canvasRect = canvas.getBoundingClientRect(); + + // Hash based on relative geometry. + // IMPORTANT: Do NOT include textContent length; it changes frequently during updates and + // would cause unnecessary particle restarts (especially painful on iOS WebView). + const hash = [solar, battery, inverter, grid, house] + .map(el => { + const rect = el.getBoundingClientRect(); + const relLeft = rect.left - canvasRect.left; + const relTop = rect.top - canvasRect.top; + return `${Math.round(relLeft)},${Math.round(relTop)},${Math.round(rect.width)},${Math.round(rect.height)}`; + }) + .join('|'); + + return hash; +} + +// Get cached or fresh node centers +function getNodeCenters() { + const currentHash = getLayoutHash(); + + // If layout hasn't changed, return cached centers + if (currentHash === lastLayoutHash && cachedNodeCenters) { + return cachedNodeCenters; + } + + // Layout changed - recalculate + const canvas = document.querySelector('.flow-canvas'); + if (!canvas) return null; + + const nodes = { + solar: document.querySelector('.solar'), + battery: document.querySelector('.battery'), + inverter: document.querySelector('.inverter'), + grid: document.querySelector('.grid-node'), + house: document.querySelector('.house') + }; + + function getCenter(el) { + if (!el) return null; + const rect = el.getBoundingClientRect(); + const canvasRect = canvas.getBoundingClientRect(); + + // Get canvas scale factor + const canvasStyle = window.getComputedStyle(canvas); + const transform = canvasStyle.transform; + let scale = 1; + if (transform && transform !== 'none') { + const matrix = transform.match(/matrix\(([^)]+)\)/); + if (matrix) { + const values = matrix[1].split(','); + scale = parseFloat(values[0]) || 1; + } + } + + return { + x: (rect.left + rect.width / 2 - canvasRect.left) / scale, + y: (rect.top + rect.height / 2 - canvasRect.top) / scale + }; + } + + const centers = { + solar: getCenter(nodes.solar), + battery: getCenter(nodes.battery), + inverter: getCenter(nodes.inverter), + grid: getCenter(nodes.grid), + house: getCenter(nodes.house) + }; + + // Detect meaningful center movement (avoid restarting particles on tiny shifts). + const prev = cachedNodeCenters; + const centerShift = (a, b) => { + if (!a || !b) return 0; + const dx = (a.x || 0) - (b.x || 0); + const dy = (a.y || 0) - (b.y || 0); + return Math.sqrt(dx * dx + dy * dy); + }; + const maxShift = prev + ? Math.max( + centerShift(prev.solar, centers.solar), + centerShift(prev.battery, centers.battery), + centerShift(prev.inverter, centers.inverter), + centerShift(prev.grid, centers.grid), + centerShift(prev.house, centers.house), + ) + : 999; + const layoutChanged = currentHash !== lastLayoutHash; + + // Cache the results + cachedNodeCenters = centers; + lastLayoutHash = currentHash; + + // OPRAVA: Pokud se layout změnil, vyčistit VŠECHNY particles + // protože mají hardcodované staré cílové pozice v animacích + if (layoutChanged && currentHash && maxShift >= 12) { + console.log('[Layout] Layout changed, stopping all particles and redrawing connections'); + + // Zastavit všechny běžící particles (mají staré pozice) + if (typeof stopAllParticleFlows === 'function') { + stopAllParticleFlows(); + } + + // Nastavit flag pro reinicializaci + if (typeof needsFlowReinitialize !== 'undefined') { + needsFlowReinitialize = true; + } + + // Překreslit čáry s novými pozicemi + debouncedDrawConnections(50); + } + + return centers; +} + +// Animate particles - v2.0 with continuous normalization +function animateFlow(data) { + const runtime = window.OIG_RUNTIME || {}; + if (runtime.reduceMotion) { + if (!runtime.particlesDisabled) { + runtime.particlesDisabled = true; + if (typeof stopAllParticleFlows === 'function') { + stopAllParticleFlows(); + } + const container = document.getElementById('particles'); + if (container) { + container.innerHTML = ''; + } + } + return; + } + const { solarPower, solarPerc, batteryPower, gridPower, housePower, boilerPower, boilerMaxPower } = data; + + // Use cached positions + const centers = getNodeCenters(); + if (!centers) return; + + // OPRAVA ÚNIK PAMĚTI: Při výrazné změně power hodnot vyčistit staré particles + // Toto pomáhá při náhlých změnách (např. cloud zakryje solár, zapne se boiler, atd.) + if (lastPowerValues) { + const solarChange = Math.abs(solarPower - (lastPowerValues.solarPower || 0)); + const batteryChange = Math.abs(batteryPower - (lastPowerValues.batteryPower || 0)); + const gridChange = Math.abs(gridPower - (lastPowerValues.gridPower || 0)); + const houseChange = Math.abs(housePower - (lastPowerValues.housePower || 0)); + + // Pokud došlo k výrazné změně (>2000W na jakémkoli toku), vyčistit particles + const significantChange = solarChange > 2000 || batteryChange > 2000 || + gridChange > 2000 || houseChange > 2000; + + if (significantChange) { + console.log(`[Particles] 🔄 Significant power change detected (S:${solarChange}W B:${batteryChange}W G:${gridChange}W H:${houseChange}W), cleaning up...`); + const container = document.getElementById('particles'); + if (container && container.children.length > 10) { + // Vyčistit jen pokud je více než 10 kuliček (aby se to nevolalo zbytečně) + stopAllParticleFlows(); + // Po cleanup nastavit flag pro reinicializaci (už je nastaven v loadData, ale pro jistotu) + needsFlowReinitialize = true; + } + } + } + + // ======================================== + // 1. SOLAR → INVERTER (žlutá, jednosměrný) + // ======================================== + const solarParams = calculateFlowParams(solarPower, FLOW_MAXIMUMS.solar, 'solarToInverter'); + + updateParticleFlow( + 'solarToInverter', + centers.solar, + centers.inverter, + FLOW_COLORS.solar, + solarParams.active, + solarParams.speed, + solarParams.count, + solarParams.size, + solarParams.opacity + ); + + // ======================================== + // 2. BATTERY ↔ INVERTER (obousměrný) + // ======================================== + const batteryAbsPower = Math.abs(batteryPower); + const batteryParams = calculateFlowParams(batteryAbsPower, FLOW_MAXIMUMS.battery, + batteryPower > 0 ? 'inverterToBattery' : 'batteryToInverter'); + + // Zastavit oba směry nejdřív + updateParticleFlow('batteryToInverter', centers.battery, centers.inverter, FLOW_COLORS.battery, false, batteryParams.speed, 0); + updateParticleFlow('inverterToBattery', centers.inverter, centers.battery, FLOW_COLORS.solar, false, batteryParams.speed, 0); + // Vyčistit i sub-flows + cleanupSubFlows('batteryToInverter'); + cleanupSubFlows('inverterToBattery'); + + if (batteryParams.active) { + if (batteryPower > 0) { + // ===== NABÍJENÍ BATERIE ===== + // Vypočítat zdroje: solar + grid + let solarToBattery = 0; + let gridToBattery = 0; + + if (solarPower > 0) { + solarToBattery = Math.min(solarPower, batteryPower); + } + + const remaining = batteryPower - solarToBattery; + if (remaining > 50 && gridPower > 0) { + gridToBattery = remaining; + } + + // Multi-source flow: žluté + modré kuličky + const sources = []; + if (solarToBattery > 50) { + sources.push({ type: 'solar', power: solarToBattery, color: FLOW_COLORS.solar }); + } + if (gridToBattery > 50) { + sources.push({ type: 'grid', power: gridToBattery, color: FLOW_COLORS.grid_import }); + } + + if (sources.length > 1) { + // Multi-source: použít novou funkci + updateMultiSourceFlow( + 'inverterToBattery', + centers.inverter, + centers.battery, + sources, + batteryPower, + batteryParams.speed, + batteryParams.size, + batteryParams.opacity + ); + } else { + // Single source: vyčistit staré sub-flows a použít starou funkci + cleanupSubFlows('inverterToBattery'); + const color = sources.length > 0 ? sources[0].color : FLOW_COLORS.solar; + updateParticleFlow( + 'inverterToBattery', + centers.inverter, + centers.battery, + color, + true, + batteryParams.speed, + batteryParams.count, + batteryParams.size, + batteryParams.opacity + ); + } + } else { + // ===== VYBÍJENÍ BATERIE ===== + // Vždy oranžová + updateParticleFlow( + 'batteryToInverter', + centers.battery, + centers.inverter, + FLOW_COLORS.battery, + true, + batteryParams.speed, + batteryParams.count, + batteryParams.size, + batteryParams.opacity + ); + } + } + + // ======================================== + // 3. GRID ↔ INVERTER (obousměrný) + // ======================================== + const gridAbsPower = Math.abs(gridPower); + const gridParams = calculateFlowParams(gridAbsPower, FLOW_MAXIMUMS.grid, + gridPower > 0 ? 'gridToInverter' : 'inverterToGrid'); + + // Zastavit oba směry nejdřív + updateParticleFlow('gridToInverter', centers.grid, centers.inverter, FLOW_COLORS.grid_import, false, gridParams.speed, 0); + updateParticleFlow('inverterToGrid', centers.inverter, centers.grid, FLOW_COLORS.grid_export, false, gridParams.speed, 0); + // Vyčistit i sub-flows + cleanupSubFlows('gridToInverter'); + cleanupSubFlows('inverterToGrid'); + + if (gridParams.active) { + if (gridPower > 0) { + // ===== ODBĚR ZE SÍTĚ ===== + // Červená, jednosměrný + updateParticleFlow( + 'gridToInverter', + centers.grid, + centers.inverter, + FLOW_COLORS.grid_import, + true, + gridParams.speed, + gridParams.count, + gridParams.size, + gridParams.opacity + ); + } else { + // ===== DODÁVKA DO SÍTĚ ===== + // Vypočítat zdroje: solar + battery + const gridExportPower = Math.abs(gridPower); + + let solarToGrid = 0; + let batteryToGrid = 0; + + // Solár co nejde do baterie ani domu může jít do gridu + const solarUsed = (batteryPower > 0 ? batteryPower : 0); + const solarAvailableForGrid = Math.max(0, solarPower - solarUsed); + + solarToGrid = Math.min(solarAvailableForGrid, gridExportPower); + + const remaining = gridExportPower - solarToGrid; + if (remaining > 50 && batteryPower < 0) { + // Zbytek z baterie + batteryToGrid = Math.min(Math.abs(batteryPower), remaining); + } + + // Multi-source flow: žluté + oranžové kuličky + const sources = []; + if (solarToGrid > 50) { + sources.push({ type: 'solar', power: solarToGrid, color: FLOW_COLORS.solar }); + } + if (batteryToGrid > 50) { + sources.push({ type: 'battery', power: batteryToGrid, color: FLOW_COLORS.battery }); + } + + if (sources.length > 1) { + // Multi-source + updateMultiSourceFlow( + 'inverterToGrid', + centers.inverter, + centers.grid, + sources, + gridExportPower, + gridParams.speed, + gridParams.size, + gridParams.opacity + ); + } else { + // Single source - vyčistit staré sub-flows + cleanupSubFlows('inverterToGrid'); + const color = sources.length > 0 ? sources[0].color : FLOW_COLORS.grid_export; + updateParticleFlow( + 'inverterToGrid', + centers.inverter, + centers.grid, + color, + true, + gridParams.speed, + gridParams.count, + gridParams.size, + gridParams.opacity + ); + } + } + } + + // ======================================== + // 4. INVERTER → HOUSE (spotřeba, multi-source) + // ======================================== + const houseParams = calculateFlowParams(housePower, FLOW_MAXIMUMS.house, 'inverterToHouse'); + + // Vypočítat zdroje pro spotřebu (house) + let solarToHouse = 0; + let batteryToHouse = 0; + let gridToHouse = 0; + + if (houseParams.active && housePower > 0) { + // OPRAVA: Správná logika rozdělení zdrojů + // batteryPower > 0 = nabíjení baterie (energie TEČE DO baterie) + // batteryPower < 0 = vybíjení baterie (energie TEČE Z baterie) + // gridPower > 0 = odběr ze sítě + // gridPower < 0 = dodávka do sítě + + // 1. Kolik energie baterie poskytuje/odebírá + let batteryContribution = 0; + if (batteryPower < 0) { + // Vybíjení - baterie dává energii + batteryContribution = Math.abs(batteryPower); + } + // Pokud batteryPower > 0, baterie ODEBÍRÁ energii (nabíjí se), nedává do domu + + // 2. Kolik soláru je dostupné pro dům + // Solár může jít do: baterie (nabíjení) + dům + grid (přebytek) + let solarAvailable = solarPower; + if (batteryPower > 0) { + // Baterie se nabíjí - část soláru jde do baterie + solarAvailable = Math.max(0, solarPower - batteryPower); + } + + // 3. Kolik gridu potřebujeme + // Grid pokrývá to, co solár + baterie nezvládnou + const solarAndBattery = solarAvailable + batteryContribution; + let gridNeeded = 0; + if (housePower > solarAndBattery && gridPower > 0) { + gridNeeded = Math.min(gridPower, housePower - solarAndBattery); + } + + // Přiřadit zdroje k domu + solarToHouse = Math.min(solarAvailable, housePower); + const houseRemaining = housePower - solarToHouse; + + if (houseRemaining > 0) { + batteryToHouse = Math.min(batteryContribution, houseRemaining); + const stillRemaining = houseRemaining - batteryToHouse; + + if (stillRemaining > 0) { + gridToHouse = Math.min(gridNeeded, stillRemaining); + } + } + + // Multi-source flow: žluté + oranžové + červené kuličky + const sources = []; + if (solarToHouse > 50) { + sources.push({ type: 'solar', power: solarToHouse, color: FLOW_COLORS.solar }); + } + if (batteryToHouse > 50) { + sources.push({ type: 'battery', power: batteryToHouse, color: FLOW_COLORS.battery }); + } + if (gridToHouse > 50) { + sources.push({ type: 'grid', power: gridToHouse, color: FLOW_COLORS.grid_import }); + } + + if (sources.length > 1) { + // Multi-source + updateMultiSourceFlow( + 'inverterToHouse', + centers.inverter, + centers.house, + sources, + housePower, + houseParams.speed, + houseParams.size, + houseParams.opacity + ); + } else { + // Single source - vyčistit staré sub-flows + cleanupSubFlows('inverterToHouse'); + const color = sources.length > 0 ? sources[0].color : FLOW_COLORS.house; + updateParticleFlow( + 'inverterToHouse', + centers.inverter, + centers.house, + color, + true, + houseParams.speed, + houseParams.count, + houseParams.size, + houseParams.opacity + ); + } + } else { + updateParticleFlow('inverterToHouse', centers.inverter, centers.house, FLOW_COLORS.house, false, houseParams.speed, 0); + // Vyčistit i sub-flows + cleanupSubFlows('inverterToHouse'); + } + + // OPRAVA: Uložit aktuální power hodnoty pro detekci změn + lastPowerValues = { solarPower, batteryPower, gridPower, housePower }; +} + +// Use utils from DashboardUtils module (var allows re-declaration) +var formatPower = window.DashboardUtils?.formatPower; +var formatEnergy = window.DashboardUtils?.formatEnergy; +var updateElementIfChanged = window.DashboardUtils?.updateElementIfChanged; + +// Legacy wrapper kept for backward compatibility +function updateElementIfChanged_legacy(elementId, newValue, cacheKey) { + if (!cacheKey) cacheKey = elementId; + const element = document.getElementById(elementId); + if (!element) return false; + + // Always update on first load (when previousValues[cacheKey] is undefined) + // or when value actually changed + if (previousValues[cacheKey] === undefined || previousValues[cacheKey] !== newValue) { + element.textContent = newValue; + previousValues[cacheKey] = newValue; + return true; // Changed + } + return false; // No change +} + +// Helper to update class only if changed +function updateClassIfChanged(element, className, shouldAdd) { + const hasClass = element.classList.contains(className); + if (shouldAdd && !hasClass) { + element.classList.add(className); + return true; + } else if (!shouldAdd && hasClass) { + element.classList.remove(className); + return true; + } + return false; +} + +// Load and update data (optimized - partial updates only) +async function loadData() { + if (loadDataInProgress) { + loadDataPending = true; + return; + } + loadDataInProgress = true; + const runtime = window.OIG_RUNTIME || {}; + try { + const isConstrainedRuntime = !!runtime.isHaApp || !!runtime.isMobile || window.innerWidth <= 768; + const shouldYield = isConstrainedRuntime && !runtime.initialLoadComplete; + const yieldIfNeeded = async () => { + if (!shouldYield) return; + await new Promise(resolve => { + if (typeof window.requestAnimationFrame === 'function') { + window.requestAnimationFrame(() => resolve()); + } else { + setTimeout(resolve, 0); + } + }); + }; + + // Solar + const [solarP1Data, solarP2Data, solarPercData, solarTodayData] = await Promise.all([ + getSensor(getSensorId('actual_fv_p1')), + getSensor(getSensorId('actual_fv_p2')), + getSensor(getSensorId('dc_in_fv_proc')), + getSensor(getSensorId('dc_in_fv_ad')), + ]); + const solarP1 = solarP1Data.value || 0; + const solarP2 = solarP2Data.value || 0; + const solarPower = solarP1 + solarP2; + const solarPerc = solarPercData.value || 0; + const solarTodayWh = solarTodayData.value || 0; + const solarTodayKWh = solarTodayWh / 1000; // Convert Wh to kWh + + // Display solar power using formatPower helper - UPDATE ONLY IF CHANGED + updateElementIfChanged('solar-power', formatPower(solarPower), 'solar-power'); + updateElementIfChanged('solar-today', 'Dnes: ' + solarTodayKWh.toFixed(2) + ' kWh', 'solar-today'); + + // Update solar icon based on percentage (dynamic icon with animation) + const solarIcon = document.getElementById('solar-icon-dynamic'); + let solarIconEmoji; + if (solarPerc <= 5) { + solarIconEmoji = '🌙'; // Měsíc v noci - výrazný + solarIcon.className = 'node-icon solar-icon-dynamic solar-icon-moon'; + } else if (solarPerc < 50) { + solarIconEmoji = '☀️'; // Normální slunce + solarIcon.className = 'node-icon solar-icon-dynamic'; + } else { + solarIconEmoji = '☀️'; // Aktivní slunce s animací + solarIcon.className = 'node-icon solar-icon-dynamic solar-active'; + // Scale based on percentage (50% = 1.0, 100% = 1.3) + const scale = 1.0 + ((solarPerc - 50) / 50) * 0.3; + solarIcon.style.fontSize = (32 * scale) + 'px'; + } + updateElementIfChanged('solar-icon-dynamic', solarIconEmoji, 'solar-icon'); + + // Update active class only if changed + const solarNode = document.querySelector('.solar'); + updateClassIfChanged(solarNode, 'active', solarPower > 50); + + await yieldIfNeeded(); + + // Battery + const [batterySoCData, batteryPowerData] = await Promise.all([ + getSensor(getSensorId('batt_bat_c')), + getSensor(getSensorId('batt_batt_comp_p')), + ]); + const batterySoC = batterySoCData.value || 0; + const batteryPower = batteryPowerData.value || 0; + + // Update battery SoC only if changed + updateElementIfChanged('battery-soc', Math.round(batterySoC) + ' %', 'battery-soc'); + + // Display battery power using formatPower helper - UPDATE ONLY IF CHANGED + updateElementIfChanged('battery-power', formatPower(batteryPower), 'battery-power'); + + // Update SVG battery fill (animated) - s gradientem podle SoC + const batteryFill = document.getElementById('battery-fill'); + + // Update fill height if SoC changed + const previousSoC = previousValues['battery-gauge-width']; + if (previousSoC === undefined || Math.abs(previousSoC - batterySoC) > 0.5) { + // SVG baterie má výšku 54px (od y=13 do y=67) + const maxHeight = 54; + const fillHeight = (batterySoC / 100) * maxHeight; + const fillY = 13 + (maxHeight - fillHeight); // Počítáme od shora dolů + + batteryFill.setAttribute('height', fillHeight); + batteryFill.setAttribute('y', fillY); + + previousValues['battery-gauge-width'] = batterySoC; + } + + // Add charging animation if charging + const previousPower = previousValues['battery-power-state']; + const isCharging = batteryPower > 10; + + if (previousPower !== isCharging) { + if (isCharging) { + batteryFill.classList.add('charging'); + } else { + batteryFill.classList.remove('charging'); + } + previousValues['battery-power-state'] = isCharging; + } + + // Check grid charging status for lightning indicator + const gridChargingData = await getSensor(getSensorId('grid_charging_planned')); + const isGridCharging = gridChargingData.value === 'on'; + const batteryLightning = document.getElementById('battery-lightning'); + + if (isGridCharging && batteryPower > 10) { + batteryLightning.classList.add('active'); + } else { + batteryLightning.classList.remove('active'); + } + + // Update grid charging indicator (⚡🔌 icon next to temperature) + const gridChargingIndicator = document.getElementById('battery-grid-charging-indicator'); + if (gridChargingIndicator) { + if (isGridCharging) { + gridChargingIndicator.classList.add('active'); + } else { + gridChargingIndicator.classList.remove('active'); + } + } + + // Get time to empty/full from sensors + const timeToEmptyData = await getSensorString(getSensorId('time_to_empty')); + const timeToFullData = await getSensorString(getSensorId('time_to_full')); + + // Update battery status with time info + const batteryStatus = document.getElementById('battery-status'); + let newBatteryState, newBatteryText, newBatteryClass; + if (batteryPower > 10) { + newBatteryState = 'charging'; + const timeInfo = timeToFullData.value ? ` (${timeToFullData.value})` : ''; + newBatteryText = '⚡ Nabíjení' + timeInfo; + newBatteryClass = 'node-status status-charging pulse'; + } else if (batteryPower < -10) { + newBatteryState = 'discharging'; + const timeInfo = timeToEmptyData.value ? ` (${timeToEmptyData.value})` : ''; + newBatteryText = '⚡ Vybíjení' + timeInfo; + newBatteryClass = 'node-status status-discharging pulse'; + } else { + newBatteryState = 'idle'; + newBatteryText = '◉ Klid'; + newBatteryClass = 'node-status status-idle'; + } + if (previousValues['battery-state'] !== newBatteryState || previousValues['battery-status-text'] !== newBatteryText) { + batteryStatus.textContent = newBatteryText; + batteryStatus.className = newBatteryClass; + previousValues['battery-state'] = newBatteryState; + previousValues['battery-status-text'] = newBatteryText; + } + + // Update battery corner indicators + const batteryVoltageData = await getSensor(getSensorId('extended_battery_voltage')); + const batteryCurrentData = await getSensor(getSensorId('extended_battery_current')); + const batteryTempData = await getSensor(getSensorId('extended_battery_temperature')); + + updateElementIfChanged('battery-voltage-value', (batteryVoltageData.value || 0).toFixed(1) + ' V'); + updateElementIfChanged('battery-current-value', (batteryCurrentData.value || 0).toFixed(1) + ' A'); + + // Update temperature indicator with animation + const batteryTemp = batteryTempData.value || 0; + const tempIndicator = document.getElementById('battery-temp-indicator'); + const tempIconElement = document.getElementById('battery-temp-icon'); + let tempIcon, tempClass; + if (batteryTemp > 25) { + tempIcon = '🌡️'; + tempClass = 'battery-temp-indicator temp-hot'; + } else if (batteryTemp < 15) { + tempIcon = '🧊'; + tempClass = 'battery-temp-indicator temp-cold'; + } else { + tempIcon = '🌡️'; + tempClass = 'battery-temp-indicator'; + } + + if (previousValues['battery-temp-icon'] !== tempIcon) { + tempIconElement.textContent = tempIcon; + tempIndicator.className = tempClass; + previousValues['battery-temp-icon'] = tempIcon; + } + + // Update temperature value + updateElementIfChanged('battery-temp-value', batteryTemp.toFixed(1) + ' °C'); + + await yieldIfNeeded(); + + // Grid + const gridPowerData = await getSensor(getSensorId('actual_aci_wtotal')); + const gridConsumptionData = await getSensor(getSensorId('extended_grid_consumption')); + const gridDeliveryData = await getSensor(getSensorId('extended_grid_delivery')); + const gridPower = gridPowerData.value || 0; + const gridConsumptionWh = gridConsumptionData.value || 0; + const gridDeliveryWh = gridDeliveryData.value || 0; + const gridConsumptionKWh = gridConsumptionWh / 1000; // Convert Wh to kWh + const gridDeliveryKWh = gridDeliveryWh / 1000; // Convert Wh to kWh + + // Display grid power using formatPower helper (absolute value) - UPDATE ONLY IF CHANGED + updateElementIfChanged('grid-power', formatPower(gridPower), 'grid-power'); + updateElementIfChanged('grid-today', 'Dnes: ' + (gridConsumptionKWh + gridDeliveryKWh).toFixed(1) + ' kWh', 'grid-today'); + + // Update grid status only if state changed + const gridStatus = document.getElementById('grid-status'); + let newGridState, newGridText, newGridClass; + if (gridPower > 10) { + newGridState = 'importing'; + newGridText = '⬇ Import'; + newGridClass = 'node-status status-importing pulse'; + } else if (gridPower < -10) { + newGridState = 'exporting'; + newGridText = '⬆ Export'; + newGridClass = 'node-status status-exporting pulse'; + } else { + newGridState = 'idle'; + newGridText = '◉ Žádný tok'; + newGridClass = 'node-status status-idle'; + } + if (previousValues['grid-state'] !== newGridState) { + gridStatus.textContent = newGridText; + gridStatus.className = newGridClass; + previousValues['grid-state'] = newGridState; + } + + await yieldIfNeeded(); + + // House + const housePowerData = await getSensor(getSensorId('actual_aco_p')); + const houseTodayData = await getSensor(getSensorId('ac_out_en_day')); + const housePower = housePowerData.value || 0; + const houseTodayWh = houseTodayData.value || 0; + const houseTodayKWh = houseTodayWh / 1000; // Convert Wh to kWh + + // Display house power using formatPower helper - UPDATE ONLY IF CHANGED + updateElementIfChanged('house-power', formatPower(housePower), 'house-power'); + updateElementIfChanged('house-today', 'Dnes: ' + houseTodayKWh.toFixed(1) + ' kWh', 'house-today'); + + // Update box mode with icons + const boxModeData = await getSensorString(getSensorId('box_prms_mode')); + const boxMode = boxModeData.value || '--'; + let modeIcon = '⚙️'; + let modeText = boxMode; + if (boxMode.includes('Home 1')) { + modeIcon = '🏠'; + modeText = 'Home 1'; + } else if (boxMode.includes('Home 2')) { + modeIcon = '🔋'; + modeText = 'Home 2'; + } else if (boxMode.includes('Home 3')) { + modeIcon = '☀️'; + modeText = 'Home 3'; + } else if (boxMode.includes('UPS')) { + modeIcon = '⚡'; + modeText = 'Home UPS'; + } + + // Aktualizovat inverter mode, ale zachovat třídu mode-changing pokud existuje + const inverterModeElement = document.getElementById('inverter-mode'); + if (inverterModeElement) { + const isModeChanging = inverterModeElement.classList.contains('mode-changing'); + updateElementIfChanged('inverter-mode', modeIcon + ' ' + modeText, 'inverter-mode'); + // Obnovit třídu mode-changing, pokud byla nastavená + if (isModeChanging && !inverterModeElement.classList.contains('mode-changing')) { + inverterModeElement.classList.add('mode-changing'); + } + } + + const shouldUpdatePlanner = !isConstrainedRuntime || runtime.initialLoadComplete; + if (shouldUpdatePlanner) { + await updatePlannerModeBadge(); + await yieldIfNeeded(); + } + + // Aktualizovat boiler mode (ve flow diagramu), ale zachovat třídu mode-changing pokud existuje + const boilerModeFlowData = await getSensorStringSafe(getSensorId('boiler_manual_mode')); + const boilerModeFlowElement = document.getElementById('boiler-mode'); + if (boilerModeFlowElement && boilerModeFlowData.exists) { + const isModeChanging = boilerModeFlowElement.classList.contains('mode-changing'); + updateElementIfChanged('boiler-mode', boilerModeFlowData.value || '--', 'boiler-mode'); + // Obnovit třídu mode-changing, pokud byla nastavená + if (isModeChanging && !boilerModeFlowElement.classList.contains('mode-changing')) { + boilerModeFlowElement.classList.add('mode-changing'); + } + } + + // Show last update time from real_data_update sensor - UPDATE TO HEADER + const realDataUpdateSensor = await getSensorString(getSensorId('real_data_update')); + const lastUpdate = realDataUpdateSensor.value; // String value from sensor + if (lastUpdate && lastUpdate !== '--') { + const lastUpdateHeader = document.getElementById('last-update-header'); + // Parse timestamp and convert to relative time + const updateDate = new Date(lastUpdate); + const relativeTime = formatRelativeTime(updateDate); + const displayText = `Aktualizováno ${relativeTime}`; + + if (previousValues['last-update'] !== displayText) { + lastUpdateHeader.textContent = displayText; + previousValues['last-update'] = displayText; + } + } + + // ===== INVERTER CORNER INDICATORS ===== + // Bypass indicator (top-left corner) + const bypassStatusData = await getSensorString(getSensorId('bypass_status')); + const bypassStatus = bypassStatusData.value || 'off'; + const bypassIndicator = document.getElementById('inverter-bypass-indicator'); + const bypassLabel = document.getElementById('inverter-bypass-label'); + const bypassIconElement = document.getElementById('inverter-bypass-icon'); + let bypassIcon, bypassClass; + const isBypassActive = bypassStatus.toLowerCase() === 'on' || bypassStatus === '1'; + if (isBypassActive) { + bypassIcon = '🔴'; + bypassClass = 'inverter-bypass-indicator bypass-warning'; + } else { + bypassIcon = '🟢'; + bypassClass = 'inverter-bypass-indicator bypass-ok'; + } + if (previousValues['inverter-bypass-icon'] !== bypassIcon) { + if (bypassIconElement) { + bypassIconElement.textContent = bypassIcon; + } + if (bypassIndicator) { + bypassIndicator.className = bypassClass; + } + // Show/hide bypass label + if (bypassLabel) { + bypassLabel.style.display = isBypassActive ? 'block' : 'none'; + } + previousValues['inverter-bypass-icon'] = bypassIcon; + } + + // Temperature indicator (top-right corner) + const inverterTempData = await getSensor(getSensorId('box_temp')); + const inverterTemp = inverterTempData.value || 0; + const inverterTempIndicator = document.getElementById('inverter-temp-indicator'); + const inverterTempIconElement = document.getElementById('inverter-temp-icon'); + let inverterTempIcon, inverterTempClass; + if (inverterTemp > 35) { + inverterTempIcon = '🌡️'; + inverterTempClass = 'inverter-temp-indicator temp-hot'; + } else { + inverterTempIcon = '🌡️'; + inverterTempClass = 'inverter-temp-indicator'; + } + if (previousValues['inverter-temp-icon'] !== inverterTempIcon || previousValues['inverter-temp-class'] !== inverterTempClass) { + if (inverterTempIconElement) { + inverterTempIconElement.textContent = inverterTempIcon; + } + if (inverterTempIndicator) { + inverterTempIndicator.className = inverterTempClass; + } + previousValues['inverter-temp-icon'] = inverterTempIcon; + previousValues['inverter-temp-class'] = inverterTempClass; + } + // Always update temperature value (force update) + updateElementIfChanged('inverter-temp-value', inverterTemp.toFixed(1) + ' °C'); + + // Warning border around entire inverter (when bypass ON OR temp >35°C) + const inverterBox = document.getElementById('inverter-box'); + const bypassIsOn = bypassStatus && (bypassStatus.toLowerCase() === 'on' || bypassStatus === '1' || bypassStatus.toLowerCase().includes('on')); + const tempIsHigh = inverterTemp > 35; + const hasWarning = bypassIsOn || tempIsHigh; + + // Debug log for bypass status + // console.log('[Inverter] Bypass status:', bypassStatus, 'isOn:', bypassIsOn, 'tempIsHigh:', tempIsHigh, 'hasWarning:', hasWarning); + + // Force update on first load or when changed + if (previousValues['inverter-warning'] === undefined || previousValues['inverter-warning'] !== hasWarning) { + if (hasWarning) { + inverterBox.classList.add('warning-active'); + // console.log('[Inverter] Warning ACTIVATED'); + } else { + inverterBox.classList.remove('warning-active'); + // console.log('[Inverter] Warning DEACTIVATED'); + } + previousValues['inverter-warning'] = hasWarning; + } + + // ===== ANIMATION DATA LOADING ===== + // Load sensors needed for proper animation logic (solarPerc already loaded above) + + const [boilerPowerData, boilerInstallPowerData] = await Promise.all([ + getSensorSafe(getSensorId('boiler_current_cbb_w')), + getSensorSafe(getSensorId('boiler_install_power')), + ]); + const boilerPower = boilerPowerData.value || 0; + const boilerMaxPower = boilerInstallPowerData.value || 3000; // Default 3kW + + // OPRAVA BUG #4: Volat animateFlow() jen pokud se hodnoty skutečně změnily + // NEBO pokud je nastaven flag needsFlowReinitialize (po přepnutí tabu) + const currentPowerValues = { + solarPower, + solarPerc, + batteryPower, + gridPower, + housePower, + boilerPower, + boilerMaxPower + }; + + // Kontrola zda se něco změnilo + const powerChanged = !lastPowerValues || + Object.keys(currentPowerValues).some(key => + Math.abs(currentPowerValues[key] - (lastPowerValues[key] || 0)) > 0.1 + ); + + if (powerChanged || needsFlowReinitialize) { + if (needsFlowReinitialize) { + // console.log('[Animation] Flow reinitialize flag set, forcing animation update'); + needsFlowReinitialize = false; // Reset flag + } else { + // console.log('[Animation] Power values changed, updating flow'); + } + lastPowerValues = currentPowerValues; + + // Animate particles only when Flow tab is active (reduces initial load cost on iOS). + const flowTab = document.querySelector('#flow-tab'); + const isFlowTabActive = flowTab && flowTab.classList.contains('active'); + if (isFlowTabActive) { + if (isConstrainedRuntime && !runtime.initialLoadComplete) { + runtime.pendingFlowValues = currentPowerValues; + } else { + animateFlow(currentPowerValues); + } + } + } + + // REMOVED: Control panel status now handled by WebSocket events + // if (!previousValues['control-status-loaded']) { + // loadControlStatus(); + // previousValues['control-status-loaded'] = true; + // } + + // Load details for all nodes (only on first load or explicit refresh) + if (!previousValues['node-details-loaded']) { + // Do not await heavy details on first render; it can freeze iOS WebView. + if ((runtime.isHaApp || runtime.isMobile || window.innerWidth <= 768) && !runtime.initialLoadComplete) { + if (!runtime.nodeDetailsScheduled) { + runtime.nodeDetailsScheduled = true; + setTimeout(() => { + loadNodeDetails(); + runtime.nodeDetailsScheduled = false; + }, 1500); + } + } else { + loadNodeDetails(); + } + previousValues['node-details-loaded'] = true; + } + + // Update ČHMÚ weather warning badge + if (window.DashboardChmu?.updateChmuWarningBadge) { + window.DashboardChmu.updateChmuWarningBadge(); + } + + // Update battery efficiency statistics + if (window.DashboardAnalytics?.updateBatteryEfficiencyStats) { + window.DashboardAnalytics.updateBatteryEfficiencyStats(); + } + + const pricingActive = typeof pricingTabActive !== 'undefined' ? pricingTabActive : false; + if (pricingActive) { + // Update planned consumption statistics + if (window.DashboardPricing?.updatePlannedConsumptionStats) { + window.DashboardPricing.updatePlannedConsumptionStats(); + } + + // Phase 2.6: Update what-if analysis and mode recommendations + if (window.DashboardPricing?.updateWhatIfAnalysis) { + window.DashboardPricing.updateWhatIfAnalysis(); + } + if (window.DashboardPricing?.updateModeRecommendations) { + window.DashboardPricing.updateModeRecommendations(); + } + } + + // Performance chart removed (legacy performance tracking) + } finally { + loadDataInProgress = false; + if (window.OIG_RUNTIME) { + window.OIG_RUNTIME.initialLoadComplete = true; + } + if (runtime.pendingFlowValues && (runtime.isHaApp || runtime.isMobile || window.innerWidth <= 768)) { + const pendingValues = runtime.pendingFlowValues; + runtime.pendingFlowValues = null; + setTimeout(() => { + const flowTab = document.querySelector('#flow-tab'); + if (flowTab && flowTab.classList.contains('active')) { + animateFlow(pendingValues); + } + }, 400); + } + if (loadDataPending) { + loadDataPending = false; + setTimeout(() => loadData(), 0); + } + } +} + +// Force full refresh (for manual reload or after service calls) +function forceFullRefresh() { + previousValues['control-status-loaded'] = false; + previousValues['node-details-loaded'] = false; + loadData(); +} + +// Load detailed information for all nodes (optimized - partial updates) +async function loadNodeDetails() { + if (loadNodeDetailsInProgress) { + loadNodeDetailsPending = true; + return; + } + loadNodeDetailsInProgress = true; + try { + // === SOLAR DETAILS === + const solarP1 = await getSensor(getSensorId('dc_in_fv_p1')); + const solarP2 = await getSensor(getSensorId('dc_in_fv_p2')); + const solarV1 = await getSensor(getSensorId('extended_fve_voltage_1')); + const solarV2 = await getSensor(getSensorId('extended_fve_voltage_2')); + const solarI1 = await getSensor(getSensorId('extended_fve_current_1')); + const solarI2 = await getSensor(getSensorId('extended_fve_current_2')); + + // Solar forecast sensors + const solarForecast = await getSensor(getSensorId('solar_forecast')); + const solarForecastS1 = await getSensor(getSensorId('solar_forecast_string1')); + const solarForecastS2 = await getSensor(getSensorId('solar_forecast_string2')); + + // Update only if changed + updateElementIfChanged('solar-s1', Math.round(solarP1.value || 0) + ' W'); + updateElementIfChanged('solar-s2', Math.round(solarP2.value || 0) + ' W'); + updateElementIfChanged('solar-s1-volt', Math.round(solarV1.value || 0) + 'V'); + updateElementIfChanged('solar-s2-volt', Math.round(solarV2.value || 0) + 'V'); + updateElementIfChanged('solar-s1-amp', (solarI1.value || 0).toFixed(1) + 'A'); + updateElementIfChanged('solar-s2-amp', (solarI2.value || 0).toFixed(1) + 'A'); + + // Solar forecast - corner indicators (today and tomorrow) + const forecastToday = (solarForecast.value || 0).toFixed(2); + updateElementIfChanged('solar-forecast-today-value', forecastToday + ' kWh'); + + const forecastTomorrow = solarForecast.attributes?.tomorrow_total_sum_kw || 0; + updateElementIfChanged('solar-forecast-tomorrow-value', parseFloat(forecastTomorrow).toFixed(2) + ' kWh'); + + // === BATTERY DETAILS === + const battChargeTotal = await getSensor(getSensorId('computed_batt_charge_energy_today')); + const battDischargeTotal = await getSensor(getSensorId('computed_batt_discharge_energy_today')); + const battChargeSolar = await getSensor(getSensorId('computed_batt_charge_fve_energy_today')); + const battChargeGrid = await getSensor(getSensorId('computed_batt_charge_grid_energy_today')); + + // Battery totals today - use formatEnergy (Wh from sensors) + updateElementIfChanged('battery-charge-total', formatEnergy(battChargeTotal.value || 0)); + updateElementIfChanged('battery-charge-solar', formatEnergy(battChargeSolar.value || 0)); + updateElementIfChanged('battery-charge-grid', formatEnergy(battChargeGrid.value || 0)); + updateElementIfChanged('battery-discharge-total', formatEnergy(battDischargeTotal.value || 0)); + + // Grid charging plan + await updateGridChargingPlan(); + + // Battery balancing card + await updateBatteryBalancingCard(); + + // === GRID DETAILS === + const gridPowerData = await getSensor(getSensorId('actual_aci_wtotal')); + const gridImport = await getSensor(getSensorId('ac_in_ac_ad')); + const gridExport = await getSensor(getSensorId('ac_in_ac_pd')); + const gridFreq = await getSensor(getSensorId('ac_in_aci_f')); // OPRAVENO: správný senzor + const gridL1V = await getSensor(getSensorId('ac_in_aci_vr')); // OPRAVENO: L1 napětí + const gridL2V = await getSensor(getSensorId('ac_in_aci_vs')); // OPRAVENO: L2 napětí + const gridL3V = await getSensor(getSensorId('ac_in_aci_vt')); // OPRAVENO: L3 napětí + const gridL1P = await getSensor(getSensorId('actual_aci_wr')); + const gridL2P = await getSensor(getSensorId('actual_aci_ws')); + const gridL3P = await getSensor(getSensorId('actual_aci_wt')); + const gridL1Power = gridL1P.value || 0; + const gridL2Power = gridL2P.value || 0; + const gridL3Power = gridL3P.value || 0; + + // Grid pricing sensors + const spotPrice = await getSensor(getSensorId('spot_price_current_15min')); + const exportPrice = await getSensor(getSensorId('export_price_current_15min')); + const currentTariff = await getSensorString(getSensorId('current_tariff')); + + // Update only if changed - use formatEnergy (Wh from sensors) + updateElementIfChanged('grid-import', formatEnergy(gridImport.value || 0)); + updateElementIfChanged('grid-export', formatEnergy(gridExport.value || 0)); + + // Update frequency indicator in top right corner + updateElementIfChanged('grid-freq-indicator', '〰️ ' + (gridFreq.value || 0).toFixed(2) + ' Hz'); + + // Grid prices and tariff + updateElementIfChanged('grid-spot-price', (spotPrice.value || 0).toFixed(2) + ' Kč/kWh'); + updateElementIfChanged('grid-export-price', (exportPrice.value || 0).toFixed(2) + ' Kč/kWh'); + + // Update tariff indicator with better icons + const tariffValue = currentTariff.value || '--'; + let tariffDisplay = '⏰ ' + tariffValue; + if (tariffValue === 'VT' || tariffValue.includes('vysoký')) { + tariffDisplay = '⚡ VT'; // Vysoký tarif - blesk + } else if (tariffValue === 'NT' || tariffValue.includes('nízký')) { + tariffDisplay = '🌙 NT'; // Nízký tarif - měsíc + } + updateElementIfChanged('grid-tariff-indicator', tariffDisplay); + + updateElementIfChanged('grid-l1-volt', Math.round(gridL1V.value || 0) + 'V'); + updateElementIfChanged('grid-l2-volt', Math.round(gridL2V.value || 0) + 'V'); + updateElementIfChanged('grid-l3-volt', Math.round(gridL3V.value || 0) + 'V'); + updateElementIfChanged('grid-l1-power', Math.round(gridL1Power) + 'W'); + updateElementIfChanged('grid-l2-power', Math.round(gridL2Power) + 'W'); + updateElementIfChanged('grid-l3-power', Math.round(gridL3Power) + 'W'); + + // Update main box phases (new elements) + updateElementIfChanged('grid-l1-volt-main', Math.round(gridL1V.value || 0) + 'V'); + updateElementIfChanged('grid-l2-volt-main', Math.round(gridL2V.value || 0) + 'V'); + updateElementIfChanged('grid-l3-volt-main', Math.round(gridL3V.value || 0) + 'V'); + updateElementIfChanged('grid-l1-power-main', Math.round(gridL1Power) + 'W'); + updateElementIfChanged('grid-l2-power-main', Math.round(gridL2Power) + 'W'); + updateElementIfChanged('grid-l3-power-main', Math.round(gridL3Power) + 'W'); + + // === HOUSE DETAILS === + const houseL1 = await getSensor(getSensorId('ac_out_aco_pr')); + const houseL2 = await getSensor(getSensorId('ac_out_aco_ps')); + const houseL3 = await getSensor(getSensorId('ac_out_aco_pt')); + + // Update main box phases + updateElementIfChanged('house-l1-main', Math.round(houseL1.value || 0) + 'W'); + updateElementIfChanged('house-l2-main', Math.round(houseL2.value || 0) + 'W'); + updateElementIfChanged('house-l3-main', Math.round(houseL3.value || 0) + 'W'); + + // === BOILER DETAILS (as part of house) === + const boilerIsUse = await getSensorStringSafe(getSensorId('boiler_is_use')); + const boilerDetailSection = document.getElementById('boiler-detail-section'); + + if (boilerIsUse.exists && (boilerIsUse.value === 'Zapnuto' || boilerIsUse.value === 'on' || boilerIsUse.value === '1' || boilerIsUse.value === 1)) { + // Show boiler section + boilerDetailSection.style.display = 'block'; + + const boilerCurrentPower = await getSensorSafe(getSensorId('boiler_current_cbb_w')); + const boilerDayEnergy = await getSensorSafe(getSensorId('boiler_day_w')); + const boilerManualMode = await getSensorStringSafe(getSensorId('boiler_manual_mode')); + + // Format power (W or kW) + const powerValue = boilerCurrentPower.value || 0; + const powerDisplay = powerValue >= 1000 + ? (powerValue / 1000).toFixed(1) + ' kW' + : Math.round(powerValue) + ' W'; + updateElementIfChanged('house-boiler-power', powerDisplay); + + // Format energy (Wh or kWh) + const energyValue = boilerDayEnergy.value || 0; + const energyDisplay = energyValue >= 1000 + ? (energyValue / 1000).toFixed(2) + ' kWh' + : Math.round(energyValue) + ' Wh'; + updateElementIfChanged('house-boiler-today', energyDisplay); + + // Format mode with icon + const modeValue = boilerManualMode.value || '--'; + const modeIcon = document.getElementById('boiler-mode-icon'); + let modeDisplay = modeValue; + + if (modeValue === 'CBB') { + modeDisplay = '🤖 Inteligentní'; + if (modeIcon) modeIcon.textContent = '🤖'; + } else if (modeValue === 'Manual') { + modeDisplay = '👤 Manuální'; + if (modeIcon) modeIcon.textContent = '👤'; + } else { + if (modeIcon) modeIcon.textContent = '⚙️'; + } + updateElementIfChanged('house-boiler-mode', modeDisplay); + } else { + // Hide boiler section + boilerDetailSection.style.display = 'none'; + } + + // Update boiler control panel visibility/state + const boilerControlSection = document.getElementById('boiler-control-section'); + if (boilerControlSection) { + if (boilerIsUse.exists && (boilerIsUse.value === 'Zapnuto' || boilerIsUse.value === 'on' || boilerIsUse.value === '1' || boilerIsUse.value === 1)) { + boilerControlSection.style.display = 'block'; + boilerControlSection.style.opacity = '1'; + boilerControlSection.style.pointerEvents = 'auto'; + } else { + boilerControlSection.style.display = 'none'; + } + } + + // === INVERTER DETAILS === + const inverterMode = await getSensorString(getSensorId('box_prms_mode')); + const inverterGridMode = await getSensorString(getSensorId('invertor_prms_to_grid')); + const inverterGridLimit = await getSensorSafe(getSensorId('invertor_prm1_p_max_feed_grid')); + const notificationsUnread = await getSensor(getSensorId('notification_count_unread')); + const notificationsError = await getSensor(getSensorId('notification_count_error')); + + // Check if box mode changed - trigger shield activity check + const currentMode = inverterMode.value || '--'; + if (previousValues['box-mode'] !== undefined && previousValues['box-mode'] !== currentMode) { + console.log('[Mode Change] Detected:', previousValues['box-mode'], '→', currentMode); + // Trigger immediate shield activity check + setTimeout(() => monitorShieldActivity(), 500); + } + previousValues['box-mode'] = currentMode; + + // Box mode with icons and descriptions + let modeDisplay = currentMode; + let modeDescription = ''; + if (modeDisplay.includes('Home 1')) { + modeDescription = '🏠 Home 1: Max baterie + FVE pro domácnost'; + } else if (modeDisplay.includes('Home 2')) { + modeDescription = '🔋 Home 2: Šetří baterii během výroby'; + } else if (modeDisplay.includes('Home 3')) { + modeDescription = '☀️ Home 3: Priorita nabíjení baterie z FVE'; + } else if (modeDisplay.includes('UPS')) { + modeDescription = '⚡ Home UPS: Vše ze sítě, baterie na 100%'; + } else { + modeDescription = '⚙️ ' + modeDisplay; + } + updateElementIfChanged('inverter-mode-detail', modeDescription); + + // Grid export mode with icons (water theme: waterfall / river / dam) + let gridExportDisplay = inverterGridMode.value || '--'; + let gridExportIcon = '💧'; + if (gridExportDisplay === 'Vypnuto / Off') { + gridExportIcon = '🚫'; // Zákaz - odpovídá ovládacímu panelu + gridExportDisplay = 'Vypnuto'; + } else if (gridExportDisplay === 'Zapnuto / On') { + gridExportIcon = '💧'; // Zapnuto - odpovídá ovládacímu panelu + gridExportDisplay = 'Zapnuto'; + } else if (gridExportDisplay.includes('Limited') || gridExportDisplay.includes('omezením')) { + gridExportIcon = '🚰'; // S omezením - odpovídá ovládacímu panelu + gridExportDisplay = 'Omezeno'; + } + + // Aktualizovat grid export mode, ale zachovat třídu mode-changing pokud existuje + const gridExportModeElement = document.getElementById('inverter-grid-export-mode'); + if (gridExportModeElement) { + const isModeChanging = gridExportModeElement.classList.contains('mode-changing'); + updateElementIfChanged('inverter-grid-export-mode', gridExportDisplay); + // Obnovit třídu mode-changing, pokud byla nastavená + if (isModeChanging && !gridExportModeElement.classList.contains('mode-changing')) { + gridExportModeElement.classList.add('mode-changing'); + } + } + + document.getElementById('grid-export-icon').textContent = gridExportIcon; + + // Grid export limit (convert W to kW) + const limitKw = (inverterGridLimit.value || 0) / 1000; + updateElementIfChanged('inverter-export-limit', limitKw.toFixed(1) + ' kW'); + + // Notifications with badges (zobrazení jen čísel) + const unreadCount = notificationsUnread.value || 0; + const errorCount = notificationsError.value || 0; + + const unreadEl = document.getElementById('inverter-notifications-unread'); + unreadEl.textContent = unreadCount; + if (unreadCount > 0) { + unreadEl.classList.add('has-unread'); + unreadEl.classList.remove('has-error'); + } else { + unreadEl.classList.remove('has-unread', 'has-error'); + } + + const errorEl = document.getElementById('inverter-notifications-error'); + errorEl.textContent = errorCount; + if (errorCount > 0) { + errorEl.classList.add('has-error'); + errorEl.classList.remove('has-unread'); + } else { + errorEl.classList.remove('has-error', 'has-unread'); + } + + // === BOILER DETAILS (if available) === + const boilerNode = document.getElementById('boiler-node'); + if (boilerNode && !boilerNode.classList.contains('hidden')) { + const boilerPower = await getSensorSafe(getSensorId('boiler_current_cbb_w')); + const boilerMode = await getSensorStringSafe(getSensorId('boiler_manual_mode')); + const boilerTemp = await getSensorSafe(getSensorId('boiler_temperature')); + const boilerStatus = await getSensorStringSafe(getSensorId('boiler_status')); + + if (boilerPower.exists || boilerMode.exists || boilerTemp.exists || boilerStatus.exists) { + updateElementIfChanged('boiler-power', Math.round(boilerPower.value || 0) + ' W'); + + // Aktualizovat boiler-mode, ale zachovat třídu mode-changing pokud existuje + const boilerModeElement = document.getElementById('boiler-mode'); + if (boilerModeElement) { + const isModeChanging = boilerModeElement.classList.contains('mode-changing'); + updateElementIfChanged('boiler-mode', boilerMode.value || '--'); + // Obnovit třídu mode-changing, pokud byla nastavená + if (isModeChanging && !boilerModeElement.classList.contains('mode-changing')) { + boilerModeElement.classList.add('mode-changing'); + } + } + + updateElementIfChanged('boiler-mode-detail', boilerMode.value || '--'); + updateElementIfChanged('boiler-temp', (boilerTemp.value || 0).toFixed(1) + ' °C'); + updateElementIfChanged('boiler-status', boilerStatus.value || '--'); + } + } + + } catch (e) { + console.error('[Details] Error loading node details:', e); + } finally { + loadNodeDetailsInProgress = false; + if (loadNodeDetailsPending) { + loadNodeDetailsPending = false; + setTimeout(() => loadNodeDetails(), 0); + } + + // FIX: Překreslit linky po načtení dat (může se změnit pozice elementů) + // Použít debounced verzi aby se nepřekreslovali příliš často + debouncedDrawConnections(50); + } +} + +// Show charge battery dialog +async function showChargeBatteryDialog() { + try { + // Check shield queue before adding task (use dynamic lookup) + const shieldQueue = await getSensor(findShieldSensorId('service_shield_queue')); + const queueCount = parseInt(shieldQueue.value) || 0; + + // Warn if queue is getting full + if (queueCount >= 3) { + const proceed = confirm( + `⚠️ VAROVÁNÍ: Fronta již obsahuje ${queueCount} úkolů!\n\n` + + `Každá změna může trvat až 10 minut.\n` + + `Opravdu chcete přidat další úkol?` + ); + if (!proceed) return; + } + + const overlay = document.createElement('div'); + overlay.className = 'ack-dialog-overlay'; + + const dialog = document.createElement('div'); + dialog.className = 'ack-dialog'; + + dialog.innerHTML = ` +
+ ⚡ Nabíjení baterie +
+
+

Nastavte cílový stav nabití baterie (SoC):

+ +
+ + +
+
+
+ ⚠️ Upozornění: Nabíjení baterie ovlivní chování systému. + Baterie bude nabíjena ze sítě až do zvoleného SoC. Změna může trvat až 10 minut. +
+
+ + +
+
+ + +
+ `; + + overlay.appendChild(dialog); + document.body.appendChild(overlay); + + // Enable/disable confirm button based on checkbox + const checkbox = dialog.querySelector('#charge-ack-checkbox'); + const confirmBtn = dialog.querySelector('#charge-confirm-btn'); + + checkbox.addEventListener('change', () => { + if (checkbox.checked) { + confirmBtn.disabled = false; + confirmBtn.style.opacity = '1'; + confirmBtn.style.background = 'rgba(33, 150, 243, 0.5)'; + } else { + confirmBtn.disabled = true; + confirmBtn.style.opacity = '0.5'; + confirmBtn.style.background = 'rgba(33, 150, 243, 0.3)'; + } + }); + } catch (e) { + console.error('[Battery] Error in showChargeBatteryDialog:', e); + showNotification('Chyba', 'Nepodařilo se zobrazit dialog', 'error'); + } +} + +// Confirm charge battery +async function confirmChargeBattery() { + const overlay = document.querySelector('.ack-dialog-overlay'); + const targetSoC = parseInt(document.getElementById('target-soc-slider').value); + + // Remove dialog + if (overlay) overlay.remove(); + + try { + // Show pending state immediately + const btn = document.getElementById('charge-battery-btn'); + if (btn) { + btn.disabled = true; + btn.classList.add('pending'); + } + + // Call service + const success = await callService('oig_cloud', 'set_formating_mode', { + mode: 'Nabíjet', + limit: targetSoC, + acknowledgement: true + }); + + if (success) { + // Immediately check shield activity + await monitorShieldActivity(); + + // Update UI immediately + setTimeout(() => { + updateButtonStates(); + }, 500); + } else { + // Re-enable on error + if (btn) { + btn.disabled = false; + btn.classList.remove('pending'); + } + } + } catch (e) { + console.error('[Battery] Error in confirmChargeBattery:', e); + showNotification('Chyba', 'Nepodařilo se spustit nabíjení', 'error'); + + // Re-enable button on error + const btn = document.getElementById('charge-battery-btn'); + if (btn) { + btn.disabled = false; + btn.classList.remove('pending'); + } + } +} + +// Initialize + +// Export functions to window for backward compatibility +window.DashboardFlow = { + getSensorId, + findShieldSensorId, + updateTime, + debouncedDrawConnections, + drawConnections, + getNodeCenters, + loadData, + loadNodeDetails, + forceFullRefresh, + debouncedLoadData, + debouncedLoadNodeDetails, + init: function() { + console.log('[DashboardFlow] Initialized'); + // Start periodic updates + setInterval(updateTime, 1000); + setInterval(debouncedLoadData, 5000); + } +}; + +console.log('[DashboardFlow] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/features/pricing.js b/custom_components/oig_cloud/www/js/features/pricing.js new file mode 100644 index 00000000..33a428c6 --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/pricing.js @@ -0,0 +1,2319 @@ +/* eslint-disable */ +// === PRICING CHARTS === +var loadPricingDataTimer = null; +var updatePlannedConsumptionTimer = null; +var priceCardHandlersAttached = false; // Flag aby se handlery nastavily JEN JEDNOU +var currentPriceBlocks = { // Aktuální bloky pro onClick handlery + cheapest: null, + expensive: null, + bestExport: null, + worstExport: null +}; + +// Cache for timeline data to prevent re-fetching on tab switch +var pricingPlanMode = null; + +var timelineDataCache = { + perPlan: { + hybrid: { data: null, timestamp: null, chartsRendered: false, stale: true } + } +}; +const timelineFetchPromises = { + hybrid: null +}; + +const PRICING_MODE_CONFIG = { + 'HOME I': { icon: '🏠', color: 'rgba(76, 175, 80, 0.16)', label: 'HOME I' }, + 'HOME II': { icon: '⚡', color: 'rgba(33, 150, 243, 0.16)', label: 'HOME II' }, + 'HOME III': { icon: '🔋', color: 'rgba(156, 39, 176, 0.16)', label: 'HOME III' }, + 'HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.18)', label: 'HOME UPS' }, + 'FULL HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.18)', label: 'FULL HOME UPS' }, + 'DO NOTHING': { icon: '⏸️', color: 'rgba(158, 158, 158, 0.18)', label: 'DO NOTHING' } +}; + +const PRICING_MODE_ICON_PLUGIN_ID = 'pricingModeIcons'; +let pricingModeIconPluginRegistered = false; + +const pricingModeIconPlugin = { + id: PRICING_MODE_ICON_PLUGIN_ID, + beforeDatasetsDraw(chart, args, pluginOptions) { + const segments = pluginOptions?.segments; + if (!segments || segments.length === 0) { + return; + } + + const chartArea = chart.chartArea; + const xScale = chart.scales?.x; + if (!chartArea || !xScale) { + return; + } + + const ctx = chart.ctx; + ctx.save(); + ctx.globalAlpha = pluginOptions?.backgroundOpacity ?? 0.12; + + segments.forEach((segment) => { + const bounds = getPricingModeSegmentBounds(xScale, segment); + if (!bounds) { + return; + } + + ctx.fillStyle = segment.color || 'rgba(255, 255, 255, 0.1)'; + ctx.fillRect(bounds.left, chartArea.top, bounds.width, chartArea.bottom - chartArea.top); + }); + + ctx.restore(); + }, + afterDatasetsDraw(chart, args, pluginOptions) { + const segments = pluginOptions?.segments; + if (!segments || segments.length === 0) { + return; + } + + const xScale = chart.scales?.x; + const chartArea = chart.chartArea; + if (!xScale || !chartArea) { + return; + } + + const iconSize = pluginOptions?.iconSize ?? 16; + const labelSize = pluginOptions?.labelSize ?? 9; + const iconFont = `${iconSize}px "Inter", "Segoe UI Emoji", "Noto Color Emoji", sans-serif`; + const labelFont = `${labelSize}px "Inter", sans-serif`; + const iconColor = pluginOptions?.iconColor || 'rgba(255, 255, 255, 0.95)'; + const labelColor = pluginOptions?.labelColor || 'rgba(255, 255, 255, 0.7)'; + const axisBandPadding = pluginOptions?.axisBandPadding ?? 10; + const axisBandHeight = pluginOptions?.axisBandHeight ?? (iconSize + labelSize + 10); + const axisBandColor = pluginOptions?.axisBandColor || 'rgba(6, 10, 18, 0.12)'; + const iconAlignment = pluginOptions?.iconAlignment || 'start'; + const iconStartOffset = pluginOptions?.iconStartOffset ?? 12; + const iconBaselineOffset = pluginOptions?.iconBaselineOffset ?? 4; + // Place the band below the X-axis labels (xScale.bottom is below tick labels). + const axisBandTopRaw = (xScale.bottom || chartArea.bottom) + axisBandPadding; + const axisBandTop = Math.min(axisBandTopRaw, chart.height - axisBandHeight - 2); + const axisBandWidth = chartArea.right - chartArea.left; + const baselineY = axisBandTop + iconBaselineOffset; + + const ctx = chart.ctx; + // Draw behind axes/labels so we never obscure tick labels even if layout shifts. + ctx.save(); + ctx.globalCompositeOperation = 'destination-over'; + ctx.fillStyle = axisBandColor; + ctx.fillRect(chartArea.left, axisBandTop, axisBandWidth, axisBandHeight); + ctx.restore(); + + ctx.save(); + ctx.globalCompositeOperation = 'destination-over'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + + segments.forEach((segment) => { + const bounds = getPricingModeSegmentBounds(xScale, segment); + if (!bounds) { + return; + } + + let iconX; + if (iconAlignment === 'start') { + iconX = bounds.left + iconStartOffset; + const maxStart = bounds.left + bounds.width - iconSize / 2; + if (iconX > maxStart) { + iconX = bounds.left + bounds.width / 2; + } + } else { + iconX = bounds.left + bounds.width / 2; + } + + ctx.font = iconFont; + ctx.fillStyle = iconColor; + ctx.fillText(segment.icon || '❓', iconX, baselineY); + + if (segment.shortLabel) { + ctx.font = labelFont; + ctx.fillStyle = labelColor; + ctx.fillText(segment.shortLabel, iconX, baselineY + iconSize - 2); + } + }); + + ctx.restore(); + } +}; + +function ensurePricingModeIconPluginRegistered() { + if (typeof Chart === 'undefined' || !Chart.register) { + return; + } + + if (!pricingModeIconPluginRegistered) { + Chart.register(pricingModeIconPlugin); + pricingModeIconPluginRegistered = true; + } +} + +function getPricingModeSegmentBounds(xScale, segment) { + if (!segment?.start || !segment?.end) { + return null; + } + + const xStart = xScale.getPixelForValue(segment.start); + const xEnd = xScale.getPixelForValue(segment.end); + + if (!isFinite(xStart) || !isFinite(xEnd)) { + return null; + } + + const left = Math.min(xStart, xEnd); + const width = Math.max(Math.abs(xEnd - xStart), 2); + + if (!isFinite(width) || width <= 0) { + return null; + } + + return { left, width }; +} + +function getTimelineCacheBucket(plan) { + const normalized = plan || 'hybrid'; + if (!timelineDataCache.perPlan[normalized]) { + timelineDataCache.perPlan[normalized] = { data: null, timestamp: null, chartsRendered: false, stale: true }; + } + return timelineDataCache.perPlan[normalized]; +} + +function invalidatePricingTimelineCache(plan) { + const plans = plan ? [plan] : Object.keys(timelineDataCache.perPlan); + plans.forEach((key) => { + const bucket = getTimelineCacheBucket(key); + bucket.stale = true; + bucket.chartsRendered = false; + }); +} + +window.invalidatePricingTimelineCache = invalidatePricingTimelineCache; + +// Debounced loadPricingData() - prevents excessive calls when multiple entities change +function debouncedLoadPricingData() { + try { + if (loadPricingDataTimer) clearTimeout(loadPricingDataTimer); + } catch (e) { } + try { + loadPricingDataTimer = setTimeout(() => { + if (pricingTabActive) { // Only update if pricing tab is active + loadPricingData(); + } + }, 300); // Wait 300ms before executing (allow multiple changes to settle) + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + loadPricingDataTimer = null; + } +} + +// Debounced updatePlannedConsumptionStats() - prevents excessive calls when battery_forecast changes +function debouncedUpdatePlannedConsumption() { + try { + if (updatePlannedConsumptionTimer) clearTimeout(updatePlannedConsumptionTimer); + } catch (e) { } + try { + updatePlannedConsumptionTimer = setTimeout(() => { + if (pricingTabActive) { // Only update if pricing tab is active + updatePlannedConsumptionStats(); + } + }, 300); // Wait 300ms before executing + } catch (e) { + // Firefox can throw NS_ERROR_NOT_INITIALIZED if the document/window is being torn down. + updatePlannedConsumptionTimer = null; + } +} + +var combinedChart = null; + +// Helper funkce pro detekci theme a barvy +function isLightTheme() { + try { + const haElement = parent.document.querySelector('home-assistant'); + if (haElement) { + const computedStyle = getComputedStyle(haElement); + const primaryBg = computedStyle.getPropertyValue('--primary-background-color'); + if (primaryBg) { + const rgb = primaryBg.match(/\d+/g); + if (rgb && rgb.length >= 3) { + const brightness = (parseInt(rgb[0]) + parseInt(rgb[1]) + parseInt(rgb[2])) / 3; + return brightness > 128; + } + } + } + } catch (e) { } + return false; // Default: dark theme +} + +async function ensurePricingPlanMode(force = false) { + if (pricingPlanMode && !force) { + return pricingPlanMode; + } + + if (window.PlannerState) { + try { + const plan = await window.PlannerState.getDefaultPlan(force); + pricingPlanMode = plan || 'hybrid'; + } catch (error) { + console.warn('[Pricing] Failed to resolve default plan', error); + pricingPlanMode = 'hybrid'; + } + } else { + pricingPlanMode = 'hybrid'; + } + + updateChartPlanIndicator(); + return pricingPlanMode; +} + +function updateChartPlanIndicator() { + const buttons = document.querySelectorAll('.chart-plan-toggle-btn'); + buttons.forEach((btn) => { + const plan = btn.getAttribute('data-plan'); + btn.classList.toggle('active', plan === pricingPlanMode); + }); + + const pill = document.getElementById('chart-plan-pill'); + if (pill) { + const label = window.PLAN_LABELS?.[pricingPlanMode]?.short || 'Plán'; + pill.textContent = label; + // No dual-plan UI - keep pill in default styling. + } +} + +function initChartPlanToggle() { + const buttons = document.querySelectorAll('.chart-plan-toggle-btn'); + if (!buttons.length) { + return; + } + + buttons.forEach((btn) => { + btn.addEventListener('click', () => { + const plan = btn.getAttribute('data-plan') || 'hybrid'; + if (plan === pricingPlanMode) { + return; + } + pricingPlanMode = plan; + const cacheBucket = getTimelineCacheBucket(plan); + cacheBucket.chartsRendered = false; + updateChartPlanIndicator(); + loadPricingData(); + }); + }); + + ensurePricingPlanMode(); +} + +function getTextColor() { + return isLightTheme() ? '#333333' : '#ffffff'; +} + +function getGridColor() { + return isLightTheme() ? 'rgba(0,0,0,0.1)' : 'rgba(255,255,255,0.1)'; +} + +function resolvePricingMode(point) { + if (!point) { + return null; + } + + const raw = + point.mode_name || + point.mode_planned || + point.mode || + point.mode_display || + null; + + if (!raw || typeof raw !== 'string') { + return null; + } + + const normalized = raw.trim(); + return normalized.length ? normalized : null; +} + +function getPricingModeShortLabel(modeName) { + if (!modeName) { + return ''; + } + + if (modeName.startsWith('HOME ')) { + return modeName.replace('HOME ', '').trim(); + } + + if (modeName === 'FULL HOME UPS' || modeName === 'HOME UPS') { + return 'UPS'; + } + + if (modeName === 'DO NOTHING') { + return 'DN'; + } + + return modeName.substring(0, 3).toUpperCase(); +} + +function getPricingModeMeta(modeName) { + if (!modeName) { + return { icon: '❓', color: 'rgba(158, 158, 158, 0.15)', label: 'Unknown' }; + } + + if (window.DashboardTimeline?.MODE_CONFIG?.[modeName]) { + const base = window.DashboardTimeline.MODE_CONFIG[modeName]; + return { + icon: base.icon || '❓', + color: adjustModeColorAlpha(base.color || 'rgba(158, 158, 158, 0.15)'), + label: base.label || modeName + }; + } + + return PRICING_MODE_CONFIG[modeName] || { icon: '❓', color: 'rgba(158, 158, 158, 0.15)', label: modeName }; +} + +function adjustModeColorAlpha(color, targetAlpha = 0.15) { + if (typeof color !== 'string') { + return `rgba(158, 158, 158, ${targetAlpha})`; + } + + if (color.startsWith('rgba')) { + const match = color.match(/rgba\(([^)]+)\)/); + if (match && match[1]) { + const parts = match[1].split(',').map(part => part.trim()); + if (parts.length === 4) { + return `rgba(${parts[0]}, ${parts[1]}, ${parts[2]}, ${targetAlpha})`; + } + } + } + + if (color.startsWith('rgb(')) { + return color.replace('rgb', 'rgba').replace(')', `, ${targetAlpha})`); + } + + return color; +} + +function buildPricingModeSegments(timelineData) { + if (!Array.isArray(timelineData) || timelineData.length === 0) { + return []; + } + + const segments = []; + let currentSegment = null; + + timelineData.forEach((point) => { + const modeName = resolvePricingMode(point); + if (!modeName) { + currentSegment = null; + return; + } + + const startTime = new Date(point.timestamp); + const endTime = new Date(startTime.getTime() + 15 * 60 * 1000); + + if (!currentSegment || currentSegment.mode !== modeName) { + currentSegment = { + mode: modeName, + start: startTime, + end: endTime + }; + segments.push(currentSegment); + } else { + currentSegment.end = endTime; + } + }); + + return segments.map((segment) => { + const meta = getPricingModeMeta(segment.mode); + return { + ...segment, + icon: meta.icon, + color: meta.color, + label: meta.label, + shortLabel: getPricingModeShortLabel(segment.mode) + }; + }); +} + +function buildPricingModeIconOptions(segments) { + if (!segments || segments.length === 0) { + return null; + } + + return { + segments, + iconSize: 18, + labelSize: 10, + iconAlignment: 'start', + iconStartOffset: 14, + iconBaselineOffset: 6, + iconColor: 'rgba(255, 255, 255, 0.95)', + labelColor: 'rgba(255, 255, 255, 0.7)', + backgroundOpacity: 0.14, + // Keep this compact and below X-axis labels. + axisBandPadding: 10, + axisBandHeight: 28, + axisBandColor: 'rgba(6, 10, 18, 0.12)' + }; +} + +function applyPricingModeIconPadding(options, pluginOptions) { + if (!options) { + return; + } + + if (!options.layout) { + options.layout = {}; + } + + if (!options.layout.padding) { + options.layout.padding = {}; + } + + const padding = options.layout.padding; + const axisBandPadding = pluginOptions?.axisBandPadding ?? 10; + const axisBandHeight = pluginOptions?.axisBandHeight ?? (pluginOptions?.iconSize || 18) + (pluginOptions?.labelSize || 10) + 6; + const extra = pluginOptions ? axisBandPadding + axisBandHeight + 6 : 12; + + padding.top = padding.top ?? 12; + padding.bottom = Math.max(padding.bottom || 0, extra); +} + +// Convert Date to local ISO string (without timezone conversion to UTC) +function toLocalISOString(date) { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`; +} + +function getBoxId() { + updateChartPlanIndicator(); + + const hass = getHass(); + if (!hass || !hass.states) return null; + for (const entityId in hass.states) { + const match = entityId.match(/^sensor\.oig_(\d+)_/); + if (match) return match[1]; + } + return null; +} + +// Reset zoom grafu na původní rozsah +function resetChartZoom() { + if (combinedChart) { + // Resetovat zoom pomocí odstranění scale limits + delete combinedChart.options.scales.x.min; + delete combinedChart.options.scales.x.max; + combinedChart.update('none'); + + currentZoomRange = null; // Reset zoom state + + // Odebrat zoom-active z aktivní karty + if (activeZoomCard) { + activeZoomCard.classList.remove('zoom-active'); + activeZoomCard = null; + } + + updateChartDetailLevel(combinedChart); + } +} + +// Přepínání režimu zobrazování datalabels +function toggleDatalabelMode() { + const modes = ['auto', 'always', 'never']; + const currentIndex = modes.indexOf(datalabelMode); + const nextIndex = (currentIndex + 1) % modes.length; + datalabelMode = modes[nextIndex]; + + // Aktualizovat UI + const btnText = document.getElementById('datalabel-mode-text'); + const btn = document.getElementById('datalabel-toggle-btn'); + + if (btnText) { + const labels = { 'auto': 'Auto', 'always': 'Vždy', 'never': 'Nikdy' }; + btnText.textContent = labels[datalabelMode]; + } + + // Změnit barvu tlačítka podle módu + if (btn) { + if (datalabelMode === 'always') { + btn.style.background = 'rgba(76,175,80,0.3)'; + btn.style.borderColor = 'rgba(76,175,80,0.7)'; + } else if (datalabelMode === 'never') { + btn.style.background = 'rgba(244,67,54,0.2)'; + btn.style.borderColor = 'rgba(244,67,54,0.5)'; + } else { + btn.style.background = 'rgba(76,175,80,0.2)'; + btn.style.borderColor = 'rgba(76,175,80,0.5)'; + } + } + + // Aktualizovat graf + if (combinedChart) { + updateChartDetailLevel(combinedChart); + } + + console.log('[Datalabels] Mode changed to:', datalabelMode); +} + +// Sledování aktuálního zoom stavu +var currentZoomRange = null; +var activeZoomCard = null; // Reference na aktuálně aktivní kartu + +// Datalabels režim: 'auto' (závislé na zoomu), 'always', 'never' +var datalabelMode = 'auto'; + +// Toggle zoom: pokud není zoom -> zoom IN, pokud je zoom -> zoom OUT +function zoomToTimeRange(startTime, endTime, cardElement = null) { + if (!combinedChart) { + console.log('[Zoom] Chart not available'); + return; + } + + // Zkontrolovat jestli je už zazoomováno na tento rozsah + const start = new Date(startTime); + const end = new Date(endTime); + const marginMs = 15 * 60 * 1000; + const zoomStart = start.getTime() - marginMs; + const zoomEnd = end.getTime() + marginMs; + + // Pokud už je zazoomováno na tento interval -> ZOOM OUT (reset) + if (currentZoomRange && + Math.abs(currentZoomRange.start - zoomStart) < 60000 && + Math.abs(currentZoomRange.end - zoomEnd) < 60000) { + console.log('[Zoom] Already zoomed to this range -> ZOOM OUT'); + + // Reset zoom: odstranit scale limits + delete combinedChart.options.scales.x.min; + delete combinedChart.options.scales.x.max; + combinedChart.update('none'); + + currentZoomRange = null; + + // Odebrat zoom-active třídu z aktivní karty + if (activeZoomCard) { + activeZoomCard.classList.remove('zoom-active'); + activeZoomCard = null; + } + + updateChartDetailLevel(combinedChart); + return; + } + + // ZOOM IN na nový interval + console.log('[Zoom] ZOOM IN to range:', startTime, '->', endTime); + console.log('[Zoom] Calculated zoom:', new Date(zoomStart), '->', new Date(zoomEnd)); + + try { + // OPRAVA: zoom() metoda nefunguje správně pro absolutní rozsah + // Místo toho nastavíme přímo scale limits a zavoláme update() + + // Nastavit min/max na scale + combinedChart.options.scales.x.min = zoomStart; + combinedChart.options.scales.x.max = zoomEnd; + + // Aplikovat změny + combinedChart.update('none'); // 'none' = bez animace, okamžitě + + console.log('[Zoom] Chart X scale after update - min:', combinedChart.scales.x.min, 'max:', combinedChart.scales.x.max); + + // Uložit aktuální zoom + currentZoomRange = { start: zoomStart, end: zoomEnd }; + console.log('[Zoom] Zoom IN applied successfully'); + + // Odebrat zoom-active ze všech karet + document.querySelectorAll('.stat-card.zoom-active').forEach(card => { + card.classList.remove('zoom-active'); + }); + + // Přidat zoom-active na novou kartu + if (cardElement) { + cardElement.classList.add('zoom-active'); + activeZoomCard = cardElement; + } + + // Aktualizovat detail level + updateChartDetailLevel(combinedChart); + } catch (error) { + console.error('[Zoom] Error:', error); + } +} + +// Adaptivní úprava detailu grafu podle úrovně zoomu +function updateChartDetailLevel(chart) { + if (!chart || !chart.scales || !chart.scales.x) return; + + const xScale = chart.scales.x; + const visibleRange = xScale.max - xScale.min; // v milisekundách + const hoursVisible = visibleRange / (1000 * 60 * 60); + + // Určit úroveň detailu + let detailLevel = 'overview'; // celkový pohled (>24h) + if (hoursVisible <= 24) detailLevel = 'day'; // denní pohled (6-24h) + if (hoursVisible <= 6) detailLevel = 'detail'; // detailní pohled (<6h) + + // Adaptivní nastavení legend + if (chart.options.plugins.legend) { + // Overview: kompaktní legenda + if (detailLevel === 'overview') { + chart.options.plugins.legend.labels.padding = 10; + chart.options.plugins.legend.labels.font.size = 11; + } + // Detail: větší legenda + else if (detailLevel === 'detail') { + chart.options.plugins.legend.labels.padding = 12; + chart.options.plugins.legend.labels.font.size = 12; + } + // Day: střední + else { + chart.options.plugins.legend.labels.padding = 10; + chart.options.plugins.legend.labels.font.size = 11; + } + } + + // Adaptivní nastavení os Y + const yAxes = ['y-price', 'y-solar', 'y-power']; + yAxes.forEach(axisId => { + const axis = chart.options.scales[axisId]; + if (!axis) return; + + if (detailLevel === 'overview') { + // Overview: menší titulky, skrýt některé + axis.title.display = false; // Skrýt názvy os + axis.ticks.font.size = 10; + if (axisId === 'y-solar') axis.display = false; // Skrýt střední osu + } else if (detailLevel === 'detail') { + // Detail: plné titulky + axis.title.display = true; + axis.title.font.size = 12; + axis.ticks.font.size = 11; + axis.display = true; + } else { + // Day: střední velikost + axis.title.display = true; + axis.title.font.size = 11; + axis.ticks.font.size = 10; + axis.display = true; + } + }); + + // Adaptivní nastavení X osy + if (chart.options.scales.x) { + if (detailLevel === 'overview') { + chart.options.scales.x.ticks.maxTicksLimit = 12; + chart.options.scales.x.ticks.font.size = 10; + } else if (detailLevel === 'detail') { + chart.options.scales.x.ticks.maxTicksLimit = 24; + chart.options.scales.x.ticks.font.size = 11; + // V detailu ukázat i minuty + chart.options.scales.x.time.displayFormats.hour = 'HH:mm'; + } else { + chart.options.scales.x.ticks.maxTicksLimit = 16; + chart.options.scales.x.ticks.font.size = 10; + chart.options.scales.x.time.displayFormats.hour = 'dd.MM HH:mm'; + } + } + + // Adaptivní zobrazení datalabels podle zoom úrovně a módu + const shouldShowLabels = (datalabelMode === 'always') || + (datalabelMode === 'auto' && hoursVisible <= 6); + + chart.data.datasets.forEach((dataset, idx) => { + if (!dataset.datalabels) { + dataset.datalabels = {}; + } + + // Vypnout labely pokud režim = 'never' + if (datalabelMode === 'never') { + dataset.datalabels.display = false; + return; + } + + // Zobrazit labely pro VŠECHNY datasety při zoomu + if (shouldShowLabels) { + // Určit hustotu zobrazování podle zoom úrovně + let showEveryNth = 1; + if (hoursVisible > 3 && hoursVisible <= 6) { + showEveryNth = 2; // 3-6h: každý druhý bod + } else if (hoursVisible > 6) { + showEveryNth = 4; // >6h: každý čtvrtý bod + } + // <3h: všechny body (showEveryNth = 1) + + dataset.datalabels.display = (context) => { + const value = context.dataset.data[context.dataIndex]; + if (value == null || value === 0) return false; + return context.dataIndex % showEveryNth === 0; + }; + + // Nastavení podle typu dat + const isPrice = dataset.yAxisID === 'y-price'; + const isSolar = dataset.label && (dataset.label.includes('Solární') || dataset.label.includes('String')); + const isBattery = dataset.label && dataset.label.includes('kapacita'); + + dataset.datalabels.align = 'top'; + dataset.datalabels.offset = 6; + dataset.datalabels.color = '#fff'; + dataset.datalabels.font = { size: 9, weight: 'bold' }; + + // Formátování podle typu + if (isPrice) { + dataset.datalabels.formatter = (value) => value != null ? value.toFixed(2) + ' Kč' : ''; + dataset.datalabels.backgroundColor = dataset.borderColor || 'rgba(33, 150, 243, 0.8)'; + } else if (isSolar) { + dataset.datalabels.formatter = (value) => value != null ? value.toFixed(1) + ' kW' : ''; + dataset.datalabels.backgroundColor = dataset.borderColor || 'rgba(255, 193, 7, 0.8)'; + } else if (isBattery) { + dataset.datalabels.formatter = (value) => value != null ? value.toFixed(1) + ' kWh' : ''; + dataset.datalabels.backgroundColor = dataset.borderColor || 'rgba(120, 144, 156, 0.8)'; + } else { + // Ostatní datasety + dataset.datalabels.formatter = (value) => value != null ? value.toFixed(1) : ''; + dataset.datalabels.backgroundColor = dataset.borderColor || 'rgba(33, 150, 243, 0.8)'; + } + + dataset.datalabels.borderRadius = 4; + dataset.datalabels.padding = { top: 3, bottom: 3, left: 5, right: 5 }; + } else { + dataset.datalabels.display = false; + } + }); + + chart.update('none'); // Update bez animace + console.log(`[Detail] Zoom level: ${hoursVisible.toFixed(1)}h, Labels: ${shouldShowLabels ? 'ON' : 'OFF'}, Mode: ${datalabelMode}`); +} + +// Najít extrémní blok cen (nejlevnější/nejdražší 3h období) +function findExtremePriceBlock(prices, findLowest, blockHours = 3) { + if (!prices || prices.length === 0) return null; + + const blockSize = Math.floor((blockHours * 60) / 15); // 3h = 12 intervalů po 15min + if (prices.length < blockSize) return null; + + let extremeBlock = null; + let extremeAvg = findLowest ? Infinity : -Infinity; + + // Sliding window přes všechny možné bloky + for (let i = 0; i <= prices.length - blockSize; i++) { + const block = prices.slice(i, i + blockSize); + const blockValues = block.map(p => p.price); + const blockAvg = blockValues.reduce((a, b) => a + b, 0) / blockValues.length; + + if ((findLowest && blockAvg < extremeAvg) || (!findLowest && blockAvg > extremeAvg)) { + extremeAvg = blockAvg; + extremeBlock = { + avg: blockAvg, + min: Math.min(...blockValues), + max: Math.max(...blockValues), + start: block[0].timestamp, + end: block[block.length - 1].timestamp, + values: blockValues + }; + } + } + + return extremeBlock; +} + +// Vytvořit mini graf pro cenový blok +function createMiniPriceChart(canvasId, values, color, startTime, endTime) { + const canvas = document.getElementById(canvasId); + if (!canvas) return; + + const ctx = canvas.getContext('2d'); + if (!ctx) return; + + // Chart.js keeps a global registry per canvas. Always destroy any existing instance first + // to avoid: "Canvas is already in use. Chart with ID ... must be destroyed..." + try { + const existing = typeof Chart !== 'undefined' && Chart.getChart ? Chart.getChart(canvas) : null; + if (existing) { + existing.destroy(); + } + } catch (e) { + // ignore - best effort cleanup + } + + // Vypočítat statistiky pro detekci razantních změn (potřebujeme před optimalizací) + const avg = values.reduce((a, b) => a + b, 0) / values.length; + const min = Math.min(...values); + const max = Math.max(...values); + const range = max - min; + const threshold = range * 0.25; // Razantní změna = >25% rozsahu + + // Detekovat body s razantní změnou + const significantPoints = []; + values.forEach((value, idx) => { + // Porovnat s průměrem a sousedy + const prevValue = idx > 0 ? values[idx - 1] : value; + const nextValue = idx < values.length - 1 ? values[idx + 1] : value; + const change = Math.max(Math.abs(value - prevValue), Math.abs(value - nextValue)); + + // Nebo extrémy (top/bottom 20%) + const isExtreme = value >= max - threshold || value <= min + threshold; + const isBigChange = change > threshold; + + if (isExtreme || isBigChange) { + significantPoints.push(idx); + } + }); + + // OPTIMALIZACE: Kontrola jestli se data změnila + const dataKey = JSON.stringify({ values, color, startTime, endTime }); + if (canvas.lastDataKey === dataKey && canvas.chart) { + // Data se nezměnila, nepřekreslovat + return; + } + canvas.lastDataKey = dataKey; + + // Pokud existuje graf a jen se změnila data (ne struktura), aktualizovat + if (canvas.chart && canvas.chart.data.datasets[0]) { + const dataset = canvas.chart.data.datasets[0]; + const labelsChanged = canvas.chart.data.labels.length !== values.length; + + if (!labelsChanged) { + // Jen aktualizovat data bez destroy + dataset.data = values; + dataset.borderColor = color; + dataset.backgroundColor = color.replace('1)', '0.2)'); + dataset.pointBackgroundColor = values.map((_, i) => + significantPoints.includes(i) ? color : 'transparent' + ); + canvas.chart.update('none'); // Update bez animace + return; + } + } + + // Pokud neexistuje graf nebo se změnila struktura, zničit a vytvořit nový + if (canvas.chart) { + canvas.chart.destroy(); + } + + // Vytvořit absolutní časy pro X osu (ne relativní offsety) + const start = new Date(startTime); + const timeLabels = values.map((_, i) => { + const time = new Date(start.getTime() + i * 15 * 60 * 1000); + return time.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' }); + }); + + // Vytvořit nový interaktivní mini graf (bez svislých čar) + canvas.chart = new Chart(ctx, { + type: 'line', + data: { + labels: timeLabels, + datasets: [{ + data: values, + borderColor: color, + backgroundColor: color.replace('1)', '0.2)'), + borderWidth: 2, + fill: true, + tension: 0.3, + pointRadius: (context) => { + // Větší body pro razantní změny + return significantPoints.includes(context.dataIndex) ? 4 : 0; + }, + pointBackgroundColor: color, + pointBorderColor: '#fff', + pointBorderWidth: 1, + pointHoverRadius: 6 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, // OPRAVA: Používat fixní výšku z HTML (40px) + plugins: { + legend: { display: false }, + tooltip: { + enabled: true, + backgroundColor: 'rgba(0, 0, 0, 0.8)', + titleColor: '#fff', + bodyColor: '#fff', + padding: 8, + displayColors: false, + callbacks: { + title: (items) => items[0].label, // Zobrazit přesný čas místo "+Xmin" + label: (item) => `${item.parsed.y.toFixed(2)} Kč/kWh` + } + }, + datalabels: { + display: (context) => { + // Ukázat labely jen pro razantní změny + return significantPoints.includes(context.dataIndex); + }, + align: 'top', + offset: 4, + color: '#fff', + font: { size: 8, weight: 'bold' }, + formatter: (value) => value.toFixed(2), + backgroundColor: color.replace('1)', '0.8)'), + borderRadius: 3, + padding: { top: 2, bottom: 2, left: 4, right: 4 } + }, + zoom: { + pan: { + enabled: true, + mode: 'x', + modifierKey: 'shift' + }, + zoom: { + wheel: { + enabled: true, + speed: 0.1 + }, + drag: { + enabled: true, + backgroundColor: 'rgba(33, 150, 243, 0.3)' + }, + mode: 'x' + } + } + }, + scales: { + x: { display: false }, + y: { + display: true, + position: 'right', // Y osa napravo + grace: '10%', // Trochu prostoru kolem dat + ticks: { + color: 'rgba(255, 255, 255, 0.6)', + font: { size: 8 }, + callback: function (value) { + return value.toFixed(1); // Zobrazit s 1 desetinným místem + }, + maxTicksLimit: 3 // Max 3 hodnoty (min, střed, max) + }, + grid: { + display: false // Žádné horizontální čáry + } + } + }, + layout: { + padding: 0 + }, + interaction: { + mode: 'nearest', + intersect: false + } + } + }); + + // Uložit časy pro zoom funkci + canvas.dataset.startTime = startTime; + canvas.dataset.endTime = endTime; +} + +async function loadPricingData() { + const perfStart = performance.now(); + console.log('[Pricing] === loadPricingData START ==='); + + // Start cost tile loading ASAP (non-blocking) + if (typeof loadCostComparisonTile === 'function') { + loadCostComparisonTile().catch((error) => { + console.error('[Pricing] Cost tile preload failed:', error); + }); + } + + await ensurePricingPlanMode(); + + // Show loading overlay + const loadingOverlay = document.getElementById('pricing-loading-overlay'); + if (loadingOverlay) { + loadingOverlay.style.display = 'block'; + } + + const hass = getHass(); + if (!hass || !hass.states) { + if (loadingOverlay) loadingOverlay.style.display = 'none'; + return; + } + const boxId = getBoxId(); + if (!boxId) { + if (loadingOverlay) loadingOverlay.style.display = 'none'; + return; + } + const datasets = []; + let allLabels = []; + + const { data: rawTimelineData, fromCache } = await getTimelineData(pricingPlanMode, boxId); + const cacheBucket = getTimelineCacheBucket(pricingPlanMode); + + if (fromCache) { + console.log(`[Pricing] Using cached ${pricingPlanMode} timeline data (age: ${Math.round((Date.now() - cacheBucket.timestamp) / 1000)}s)`); + if (cacheBucket.chartsRendered) { + const perfEnd = performance.now(); + console.log(`[Pricing] Charts already rendered, skipping re-render (took ${(perfEnd - perfStart).toFixed(1)}ms)`); + + if (loadingOverlay) loadingOverlay.style.display = 'none'; + return; + } + } + + let timelineData = Array.isArray(rawTimelineData) ? [...rawTimelineData] : []; + + // OPRAVA: Filtrovat pouze aktuální a budoucí intervaly + const nowDate = new Date(); + const bucketStart = new Date(nowDate); + bucketStart.setMinutes(Math.floor(nowDate.getMinutes() / 15) * 15, 0, 0); + timelineData = timelineData.filter(point => { + const pointTime = new Date(point.timestamp); + return pointTime >= bucketStart; + }); + console.log(`[Pricing] After filtering future intervals: ${timelineData.length} points`); + + const modeSegments = buildPricingModeSegments(timelineData); + const modeIconOptions = buildPricingModeIconOptions(modeSegments); + if (modeIconOptions) { + ensurePricingModeIconPluginRegistered(); + } + + // Convert timeline to prices format for compatibility with existing code + const prices = timelineData.map(point => ({ + timestamp: point.timestamp, + price: point.spot_price_czk || 0 + })); + + const exportPrices = timelineData.map(point => ({ + timestamp: point.timestamp, + price: point.export_price_czk || 0 + })); + + // Spot prices (15min) - cards and chart + const spotEntityId = 'sensor.oig_' + boxId + '_spot_price_current_15min'; + const spotSensor = hass.states[spotEntityId]; + + // Update current price card from sensor state (not attributes) + if (spotSensor && spotSensor.state) { + const currentPrice = parseFloat(spotSensor.state); + if (!isNaN(currentPrice)) { + const spotCard = document.getElementById('current-spot-price'); + if (spotCard) { + spotCard.innerHTML = currentPrice.toFixed(2) + ' Kč/kWh'; + spotCard.parentElement.style.cursor = 'pointer'; + spotCard.parentElement.onclick = () => openEntityDialog(spotEntityId); + } + } + } + + if (prices.length > 0) { + const priceValues = prices.map(p => p.price); + const avg = priceValues.reduce((a, b) => a + b, 0) / priceValues.length; + const avgCard = document.getElementById('avg-spot-today'); + if (avgCard) { + avgCard.innerHTML = avg.toFixed(2) + ' Kč/kWh'; + avgCard.parentElement.style.cursor = 'pointer'; + avgCard.parentElement.onclick = () => openEntityDialog(spotEntityId); + } + + // Parse timestamps from timeline + allLabels = prices.map(p => { + const timeStr = p.timestamp; + if (!timeStr) return new Date(); + + try { + const [datePart, timePart] = timeStr.split('T'); + if (!datePart || !timePart) return new Date(); + + const [year, month, day] = datePart.split('-').map(Number); + const [hour, minute, second = 0] = timePart.split(':').map(Number); + + return new Date(year, month - 1, day, hour, minute, second); + } catch (error) { + console.error('[Pricing] Error parsing timestamp:', timeStr, error); + return new Date(); + } + }); + + // Uložit kompletní data pro výpočet extrémů (nezávisle na zoomu) + const spotPriceData = prices.map(p => p.price); + originalPriceData = spotPriceData; + + // Identifikace top/bottom 10% cen z CELÉHO datasetu + const sortedPrices = [...priceValues].sort((a, b) => a - b); + const tenPercentCount = Math.max(1, Math.ceil(sortedPrices.length * 0.1)); + const bottomThreshold = sortedPrices[tenPercentCount - 1]; + const topThreshold = sortedPrices[sortedPrices.length - tenPercentCount]; + + // ODSTRANIT tečky u extrémů - čistý graf + const pointRadii = spotPriceData.map(price => 0); // Všechny body neviditelné + const pointColors = spotPriceData.map(price => '#42a5f5'); // Jednotná barva + + // Detekce pozic extrémů pro chytré rozložení labelů + const extremeIndices = []; + spotPriceData.forEach((price, idx) => { + if (price <= bottomThreshold || price >= topThreshold) { + extremeIndices.push(idx); + } + }); + + datasets.push({ + label: '📊 Spotová cena nákupu', + data: spotPriceData, + borderColor: '#2196F3', + backgroundColor: 'rgba(33, 150, 243, 0.15)', + borderWidth: 3, + fill: false, + tension: 0.4, + type: 'line', + yAxisID: 'y-price', + pointRadius: pointRadii, + pointHoverRadius: 7, + pointBackgroundColor: pointColors, + pointBorderColor: pointColors, + pointBorderWidth: 2, + order: 1, + // Datalabels VYPNUTY - cenové labely ruší přehlednost grafu + datalabels: { + display: false + } + }); + + // === NOVÉ: Najít extrémní bloky pro karty === + // Nejlevnější 3h blok + const cheapestBlock = findExtremePriceBlock(prices, true, 3); + if (cheapestBlock) { + // Uložit do globální proměnné pro onClick handler + currentPriceBlocks.cheapest = cheapestBlock; + + const priceEl = document.getElementById('cheapest-buy-price'); + const timeEl = document.getElementById('cheapest-buy-time'); + + if (priceEl && timeEl) { + // UPDATE DATA (tohle se děje při každém update) + priceEl.innerHTML = cheapestBlock.avg.toFixed(2) + ' Kč/kWh'; + const startTime = new Date(cheapestBlock.start); + const endTime = new Date(cheapestBlock.end); + timeEl.textContent = `${startTime.toLocaleDateString('cs-CZ', { day: '2-digit', month: '2-digit' })} ${startTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })} - ${endTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })}`; + createMiniPriceChart('cheapest-buy-chart', cheapestBlock.values, 'rgba(76, 175, 80, 1)', cheapestBlock.start, cheapestBlock.end); + } + } + + // Nejdražší 3h blok + const expensiveBlock = findExtremePriceBlock(prices, false, 3); + if (expensiveBlock) { + // Uložit do globální proměnné + currentPriceBlocks.expensive = expensiveBlock; + + const priceEl = document.getElementById('expensive-buy-price'); + const timeEl = document.getElementById('expensive-buy-time'); + + if (priceEl && timeEl) { + // UPDATE DATA + priceEl.innerHTML = expensiveBlock.avg.toFixed(2) + ' Kč/kWh'; + const startTime = new Date(expensiveBlock.start); + const endTime = new Date(expensiveBlock.end); + timeEl.textContent = `${startTime.toLocaleDateString('cs-CZ', { day: '2-digit', month: '2-digit' })} ${startTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })} - ${endTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })}`; + createMiniPriceChart('expensive-buy-chart', expensiveBlock.values, 'rgba(244, 67, 54, 1)', expensiveBlock.start, expensiveBlock.end); + } + } + } + + // Export prices (15min) - from timeline API + const exportEntityId = 'sensor.oig_' + boxId + '_export_price_current_15min'; + const exportSensor = hass.states[exportEntityId]; + if (exportSensor && exportSensor.state) { + // Current price from sensor state + const currentPrice = parseFloat(exportSensor.state); + if (!isNaN(currentPrice)) { + const exportCard = document.getElementById('current-export-price'); + if (exportCard) { // ✅ NULL CHECK - element neexistuje ve nové verzi + exportCard.innerHTML = currentPrice.toFixed(2) + ' Kč/kWh'; + // Make card clickable + exportCard.parentElement.style.cursor = 'pointer'; + exportCard.parentElement.onclick = () => openEntityDialog(exportEntityId); + } + } + } + + // Export prices from timeline API (already fetched) + if (exportPrices.length > 0) { + datasets.push({ + label: '💰 Výkupní cena', + data: exportPrices.map(p => p.price), + borderColor: '#4CAF50', + backgroundColor: 'rgba(76, 187, 106, 0.15)', + borderWidth: 2, + fill: false, + type: 'line', + tension: 0.4, + yAxisID: 'y-price', + pointRadius: 0, + pointHoverRadius: 5, + order: 1, + borderDash: [5, 5] + }); + + // === NOVÉ: Extrémní bloky pro EXPORT (prodej) - OBRÁCENÁ LOGIKA === + // Nejlepší prodej = NEJVYŠŠÍ cena (findLowest = false) + console.log('[Pricing] exportPrices count:', exportPrices.length, 'sample:', exportPrices.slice(0, 3)); + const bestExportBlock = findExtremePriceBlock(exportPrices, false, 3); + console.log('[Pricing] bestExportBlock:', bestExportBlock); + + const priceEl = document.getElementById('best-export-price'); + const timeEl = document.getElementById('best-export-time'); + + if (bestExportBlock && bestExportBlock.avg > 0) { + currentPriceBlocks.bestExport = bestExportBlock; + + if (priceEl && timeEl) { + priceEl.innerHTML = bestExportBlock.avg.toFixed(2) + ' Kč/kWh'; + const startTime = new Date(bestExportBlock.start); + const endTime = new Date(bestExportBlock.end); + timeEl.textContent = `${startTime.toLocaleDateString('cs-CZ', { day: '2-digit', month: '2-digit' })} ${startTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })} - ${endTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })}`; + createMiniPriceChart('best-export-chart', bestExportBlock.values, 'rgba(76, 175, 80, 1)', bestExportBlock.start, bestExportBlock.end); + } + } else { + console.warn('[Pricing] No best export block found - all prices are 0 or export pricing not configured'); + if (priceEl && timeEl) { + priceEl.innerHTML = 'Není nakonfigurováno'; + timeEl.textContent = 'Nastavte export price sensor v konfiguraci'; + } + } + + // Nejhorší prodej = NEJNIŽŠÍ cena (findLowest = true) + const worstExportBlock = findExtremePriceBlock(exportPrices, true, 3); + if (worstExportBlock) { + currentPriceBlocks.worstExport = worstExportBlock; + + const priceEl = document.getElementById('worst-export-price'); + const timeEl = document.getElementById('worst-export-time'); + if (priceEl && timeEl) { + priceEl.innerHTML = worstExportBlock.avg.toFixed(2) + ' Kč/kWh'; + const startTime = new Date(worstExportBlock.start); + const endTime = new Date(worstExportBlock.end); + timeEl.textContent = `${startTime.toLocaleDateString('cs-CZ', { day: '2-digit', month: '2-digit' })} ${startTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })} - ${endTime.toLocaleTimeString('cs-CZ', { hour: '2-digit', minute: '2-digit' })}`; + createMiniPriceChart('worst-export-chart', worstExportBlock.values, 'rgba(255, 167, 38, 1)', worstExportBlock.start, worstExportBlock.end); + } + } + } + + // Solar forecast (hourly) - interpolate to 15min grid + const solarEntityId = 'sensor.oig_' + boxId + '_solar_forecast'; + const solarSensor = hass.states[solarEntityId]; + if (solarSensor && solarSensor.attributes) { + const attrs = solarSensor.attributes; + const todayTotal = attrs.today_total_kwh || 0; + const solarCard = document.getElementById('today-forecast-total'); + if (solarCard) { // ✅ NULL CHECK - element neexistuje ve nové verzi + solarCard.innerHTML = todayTotal.toFixed(2) + ' kWh'; + // Make card clickable + solarCard.parentElement.style.cursor = 'pointer'; + solarCard.parentElement.onclick = () => openEntityDialog(solarEntityId); + } + + const todayTotal_kw = attrs.today_hourly_total_kw || {}; + const tomorrowTotal_kw = attrs.tomorrow_hourly_total_kw || {}; + const todayString1_kw = attrs.today_hourly_string1_kw || {}; + const tomorrowString1_kw = attrs.tomorrow_hourly_string1_kw || {}; + const todayString2_kw = attrs.today_hourly_string2_kw || {}; + const tomorrowString2_kw = attrs.tomorrow_hourly_string2_kw || {}; + + // Helper: Linear interpolation between two points + function interpolate(v1, v2, ratio) { + if (v1 == null || v2 == null) return v1 || v2 || null; + return v1 + (v2 - v1) * ratio; + } + + // Map hourly solar data to 15min price grid with interpolation + // This now handles today + tomorrow seamlessly + if (allLabels.length > 0) { + const string1Data = []; + const string2Data = []; + + // Merge today and tomorrow solar data into continuous timeline + const allSolarData = { + string1: { ...todayString1_kw, ...tomorrowString1_kw }, + string2: { ...todayString2_kw, ...tomorrowString2_kw } + }; + + for (let i = 0; i < allLabels.length; i++) { + const timeLabel = allLabels[i]; // Now a Date object + + // Create ISO timestamp key for solar data lookup (LOCAL TIME!) + const isoKey = toLocalISOString(timeLabel); + + // For solar data, we need to interpolate from hourly values + const hour = timeLabel.getHours(); + const minute = timeLabel.getMinutes(); + + // Create current and next hour timestamps for interpolation + const currentHourDate = new Date(timeLabel); + currentHourDate.setMinutes(0, 0, 0); + const currentHourKey = toLocalISOString(currentHourDate); + + const nextHourDate = new Date(currentHourDate); + nextHourDate.setHours(hour + 1); + const nextHourKey = toLocalISOString(nextHourDate); + + // Get values for interpolation from merged data + const s1_current = allSolarData.string1[currentHourKey] || 0; + const s1_next = allSolarData.string1[nextHourKey] || 0; + const s2_current = allSolarData.string2[currentHourKey] || 0; + const s2_next = allSolarData.string2[nextHourKey] || 0; + + // Interpolation ratio (0.0 at :00, 0.25 at :15, 0.5 at :30, 0.75 at :45) + const ratio = minute / 60; + + string1Data.push(interpolate(s1_current, s1_next, ratio)); + string2Data.push(interpolate(s2_current, s2_next, ratio)); + } + + // Determine solar visualization strategy + const hasString1 = string1Data.some(v => v != null && v > 0); + const hasString2 = string2Data.some(v => v != null && v > 0); + const stringCount = (hasString1 ? 1 : 0) + (hasString2 ? 1 : 0); + + // Jasné sluneční barvy pro lepší viditelnost + const solarColors = { + string1: { border: 'rgba(255, 193, 7, 0.8)', bg: 'rgba(255, 193, 7, 0.2)' }, // zlatá žlutá + string2: { border: 'rgba(255, 152, 0, 0.8)', bg: 'rgba(255, 152, 0, 0.2)' } // oranžová + }; + + if (stringCount === 1) { + // Pouze 1 string aktivní - zobrazit jen ten jeden (bez celkového součtu) + if (hasString1) { + datasets.push({ + label: '☀️ Solární předpověď', + data: string1Data, + borderColor: solarColors.string1.border, + backgroundColor: solarColors.string1.bg, + borderWidth: 2, + fill: 'origin', + tension: 0.4, + type: 'line', + yAxisID: 'y-power', + pointRadius: 0, + pointHoverRadius: 5, + order: 2 + }); + } else if (hasString2) { + datasets.push({ + label: '☀️ Solární předpověď', + data: string2Data, + borderColor: solarColors.string2.border, + backgroundColor: solarColors.string2.bg, + borderWidth: 2, + fill: 'origin', + tension: 0.4, + type: 'line', + yAxisID: 'y-power', + pointRadius: 0, + pointHoverRadius: 5, + order: 2 + }); + } + } else if (stringCount === 2) { + // Oba stringy - zobrazit jako stacked area chart + datasets.push({ + label: '☀️ String 2', + data: string2Data, + borderColor: solarColors.string2.border, + backgroundColor: solarColors.string2.bg, + borderWidth: 1.5, + fill: 'origin', + tension: 0.4, + type: 'line', + yAxisID: 'y-power', + stack: 'solar', + pointRadius: 0, + pointHoverRadius: 5, + order: 2 + }); + + datasets.push({ + label: '☀️ String 1', + data: string1Data, + borderColor: solarColors.string1.border, + backgroundColor: solarColors.string1.bg, + borderWidth: 1.5, + fill: '-1', // stack on previous dataset + tension: 0.4, + type: 'line', + yAxisID: 'y-power', + stack: 'solar', + pointRadius: 0, + pointHoverRadius: 5, + order: 2 + }); + // Bez celkového součtu - stacked area chart ukazuje celkovou výšku + } + } + } + + // Battery forecast (timeline data) - using findShieldSensorId for dynamic suffix support + const batteryForecastEntityId = findShieldSensorId('battery_forecast'); + const batteryForecastSensor = hass.states[batteryForecastEntityId]; + + // console.log('[Pricing] Battery forecast sensor:', batteryForecastEntityId, batteryForecastSensor ? 'FOUND' : 'NOT FOUND'); + + // Uchovej timeline rozsah pro výchozí zoom grafu + let initialZoomStart = null; + let initialZoomEnd = null; + + if (batteryForecastSensor && batteryForecastSensor.attributes) { + // Timeline data already loaded from API at function start + // console.log('[Pricing] Timeline data length:', timelineData.length); + const maxCapacityKwh = batteryForecastSensor.attributes.max_capacity_kwh || 10; + const minCapacityKwh = batteryForecastSensor.attributes.min_capacity_kwh || 0; + + if (timelineData.length > 0 && prices.length > 0) { + // ULOŽIT ROZSAH TIMELINE PRO VÝCHOZÍ ZOOM + const timelineTimestamps = timelineData.map(t => new Date(t.timestamp)); + initialZoomStart = timelineTimestamps[0].getTime(); + initialZoomEnd = timelineTimestamps[timelineTimestamps.length - 1].getTime(); + // console.log('[Pricing] Timeline range for initial zoom:', new Date(initialZoomStart), 'to', new Date(initialZoomEnd)); + + // EXTEND allLabels with battery forecast timestamps (union) + const batteryTimestamps = timelineTimestamps; + const priceTimestamps = allLabels; // already Date objects + + // Merge and dedupe timestamps + const allTimestamps = new Set([...priceTimestamps, ...batteryTimestamps].map(d => d.getTime())); + allLabels = Array.from(allTimestamps).sort((a, b) => a - b).map(ts => new Date(ts)); + + // ZOBRAZENÍ KAPACITY BATERIE: + // battery_capacity_kwh = SOC baterie na konci intervalu (kWh) + // solar_charge_kwh = kWh do baterie ze soláru (pre-efficiency) + // grid_charge_kwh = kWh do baterie ze sítě (pre-efficiency) + // baseline = battery_capacity_kwh - solar_charge_kwh - grid_charge_kwh + + const batteryCapacityData = []; // Cílová kapacita (linie navrch) + const baselineData = []; // Předchozí kapacita (baseline pro stack) + const solarStackData = []; // Solar přírůstek + const gridStackData = []; // Grid přírůstek + const gridNetData = []; // Netto odběr ze sítě (import - export) + const consumptionData = []; // Plánovaná spotřeba (kW) + + for (let i = 0; i < allLabels.length; i++) { + const timeLabel = allLabels[i]; + const isoKey = toLocalISOString(timeLabel); + + const timelineEntry = timelineData.find(t => t.timestamp === isoKey); + + if (timelineEntry) { + // Planner timeline uses: battery_capacity_kwh, solar_charge_kwh, grid_charge_kwh. + // Keep compatibility fallbacks for older payloads. + const targetCapacity = + (timelineEntry.battery_capacity_kwh ?? timelineEntry.battery_soc ?? timelineEntry.battery_start) || 0; + const solarCharge = timelineEntry.solar_charge_kwh || 0; + const gridCharge = timelineEntry.grid_charge_kwh || 0; + const gridNet = typeof timelineEntry.grid_net === 'number' + ? timelineEntry.grid_net + : (timelineEntry.grid_import || 0) - (timelineEntry.grid_export || 0); + const loadKwhRaw = + timelineEntry.load_kwh ?? + timelineEntry.consumption_kwh ?? + timelineEntry.load ?? + 0; + const loadKwh = Number(loadKwhRaw) || 0; + const loadKw = loadKwh * 4; + + // Baseline = odkud vyšli (cílová - přírůstky) + const baseline = targetCapacity - solarCharge - gridCharge; + + batteryCapacityData.push(targetCapacity); + baselineData.push(baseline); + solarStackData.push(solarCharge); + gridStackData.push(gridCharge); + gridNetData.push(gridNet); + consumptionData.push(loadKw); + } else { + batteryCapacityData.push(null); + baselineData.push(null); + solarStackData.push(null); + gridStackData.push(null); + gridNetData.push(null); + consumptionData.push(null); + } + } + + // Vylepšené barvy pro viditelnost kapacity baterie + const batteryColors = { + baseline: { border: '#78909C', bg: 'rgba(120, 144, 156, 0.25)' }, // šedá - zbývající kapacita + solar: { border: 'transparent', bg: 'rgba(255, 167, 38, 0.6)' }, // výrazná oranžová - solár + grid: { border: 'transparent', bg: 'rgba(33, 150, 243, 0.6)' } // výrazná modrá - síť + }; + + if (consumptionData.some(v => v != null && v > 0)) { + datasets.push({ + label: '🏠 Spotřeba (plán)', + data: consumptionData, + borderColor: 'rgba(255, 112, 67, 0.7)', + backgroundColor: 'rgba(255, 112, 67, 0.12)', + borderWidth: 1.5, + type: 'line', + fill: false, + tension: 0.25, + pointRadius: 0, + pointHoverRadius: 5, + yAxisID: 'y-power', + stack: 'consumption', + borderDash: [6, 4], + order: 2 + }); + } + + // POŘADÍ DATASETŮ určuje pořadí ve stacku (první = dole, poslední = nahoře) + // 1. Grid area (dole) - nabíjení ze sítě, BEZ borderu + if (gridStackData.some(v => v != null && v > 0)) { + datasets.push({ + label: '⚡ Do baterie ze sítě', + data: gridStackData, + backgroundColor: batteryColors.grid.bg, + borderColor: batteryColors.grid.border, + borderWidth: 0, + type: 'line', + fill: true, + tension: 0.4, + pointRadius: 0, + pointHoverRadius: 5, + yAxisID: 'y-solar', + stack: 'charging', + order: 3 + }); + } + + // 2. Solar area (uprostřed) - nabíjení ze solaru, BEZ borderu + if (solarStackData.some(v => v != null && v > 0)) { + datasets.push({ + label: '☀️ Do baterie ze soláru', + data: solarStackData, + backgroundColor: batteryColors.solar.bg, + borderColor: batteryColors.solar.border, + borderWidth: 0, + type: 'line', + fill: true, + tension: 0.4, + pointRadius: 0, + pointHoverRadius: 5, + yAxisID: 'y-solar', + stack: 'charging', + order: 3 + }); + } + + // 3. Baseline area (nahoře) - zbývající kapacita s TLUSTOU ČÁROU + datasets.push({ + label: '🔋 Zbývající kapacita', + data: baselineData, + backgroundColor: batteryColors.baseline.bg, + borderColor: batteryColors.baseline.border, + borderWidth: 3, // TLUSTÁ ČÁRA + type: 'line', + fill: true, + tension: 0.4, + pointRadius: 0, + pointHoverRadius: 5, + yAxisID: 'y-solar', + stack: 'charging', + order: 3 + }); + + if (gridNetData.some(v => v !== null)) { + datasets.push({ + label: '📡 Netto odběr ze sítě', + data: gridNetData, + borderColor: '#00BCD4', + backgroundColor: 'transparent', + borderWidth: 2, + type: 'line', + fill: false, + tension: 0.2, + pointRadius: 0, + pointHoverRadius: 5, + yAxisID: 'y-solar', + order: 2 + }); + } + } + } + + // Create/update combined chart + const ctx = document.getElementById('combined-chart'); + + // OPRAVA: Kontrola jestli je canvas viditelný (pricing tab aktivní) + // Pokud není, odložit vytvoření grafu + if (!ctx) { + console.warn('[Pricing] Canvas element not found, deferring chart creation'); + return; + } + + const isVisible = ctx.offsetParent !== null; + if (!isVisible && !combinedChart) { + console.warn('[Pricing] Canvas not visible yet, deferring chart creation'); + // Zkusit znovu za chvíli + setTimeout(() => { + if (pricingTabActive) { + console.log('[Pricing] Retrying chart creation after visibility delay'); + loadPricingData(); + } + }, 200); + return; + } + + if (combinedChart) { + // OPTIMALIZACE: Místo přenastavení celého datasetu aktualizujeme jen labely a data + const labelsChanged = JSON.stringify(combinedChart.data.labels) !== JSON.stringify(allLabels); + const datasetsChanged = combinedChart.data.datasets.length !== datasets.length; + + // console.log('[Pricing] Updating EXISTING chart - labelsChanged:', labelsChanged, 'datasetsChanged:', datasetsChanged); + // if (allLabels.length > 0) { + // console.log('[Pricing] Update - First label:', allLabels[0], 'Last:', allLabels[allLabels.length - 1]); + // } + + if (labelsChanged) { + combinedChart.data.labels = allLabels; + } + + let updateMode = 'none'; + if (datasetsChanged) { + // Pokud se změnil počet datasetů, musíme je nahradit + combinedChart.data.datasets = datasets; + updateMode = undefined; + } else { + // Jinak jen aktualizujeme data v existujících datasetech + datasets.forEach((newDataset, idx) => { + if (combinedChart.data.datasets[idx]) { + // Zachovat reference na dataset, jen aktualizovat data + combinedChart.data.datasets[idx].data = newDataset.data; + // Aktualizovat i další properties které se mohly změnit + combinedChart.data.datasets[idx].label = newDataset.label; + combinedChart.data.datasets[idx].backgroundColor = newDataset.backgroundColor; + combinedChart.data.datasets[idx].borderColor = newDataset.borderColor; + } + }); + } + + if (!combinedChart.options.plugins) { + combinedChart.options.plugins = {}; + } + + combinedChart.options.plugins.pricingModeIcons = modeIconOptions || null; + applyPricingModeIconPadding(combinedChart.options, modeIconOptions); + combinedChart.update(updateMode); // Update bez animace když se jen mění data + } else { + // DETAILNÍ DEBUG PRO ANALÝZU PROBLÉMU S ČASOVOU OSOU + // console.log('[Pricing] Creating NEW chart with', allLabels.length, 'labels'); + // if (allLabels.length > 0) { + // console.log('[Pricing] First label:', allLabels[0]); + // console.log('[Pricing] Last label:', allLabels[allLabels.length - 1]); + // console.log('[Pricing] Current time:', new Date()); + // console.log('[Pricing] Time offset (hours):', (new Date() - allLabels[0]) / (1000 * 60 * 60)); + // } + + const chartOptions = { + responsive: true, + maintainAspectRatio: false, + interaction: { mode: 'index', intersect: false }, + plugins: { + legend: { + labels: { + color: '#ffffff', + font: { size: 11, weight: '500' }, + padding: 10, + usePointStyle: true, + pointStyle: 'circle', + boxWidth: 12, + boxHeight: 12 + }, + position: 'top' + }, + tooltip: { + backgroundColor: 'rgba(0,0,0,0.9)', + titleColor: '#ffffff', + bodyColor: '#ffffff', + titleFont: { size: 13, weight: 'bold' }, + bodyFont: { size: 11 }, + padding: 10, + cornerRadius: 6, + displayColors: true, + callbacks: { + title: function (tooltipItems) { + if (tooltipItems.length > 0) { + const date = new Date(tooltipItems[0].parsed.x); + return date.toLocaleString('cs-CZ', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + hour: '2-digit', + minute: '2-digit' + }); + } + return ''; + }, + label: function (context) { + let label = context.dataset.label || ''; + if (label) { + label += ': '; + } + if (context.parsed.y !== null) { + // Formátování podle typu datasetu + if (context.dataset.yAxisID === 'y-price') { + label += context.parsed.y.toFixed(2) + ' Kč/kWh'; + } else if (context.dataset.yAxisID === 'y-solar') { + label += context.parsed.y.toFixed(2) + ' kWh'; + } else if (context.dataset.yAxisID === 'y-power') { + label += context.parsed.y.toFixed(2) + ' kW'; + } else { + label += context.parsed.y; + } + } + return label; + } + } + }, + datalabels: { + display: false // Vypnout globálně, povolit jen pro specifické datasety + }, + zoom: { + zoom: { + wheel: { + enabled: true, + modifierKey: null // Zoom kolečkem bez modifikátorů + }, + drag: { + enabled: true, // Drag-to-zoom jako v Grafaně + backgroundColor: 'rgba(33, 150, 243, 0.3)', + borderColor: 'rgba(33, 150, 243, 0.8)', + borderWidth: 2 + }, + pinch: { + enabled: true // Touch zoom pro mobily + }, + mode: 'x', // Zoom jen na X ose (časové ose) + onZoomComplete: function ({ chart }) { + // Při manuálním zoomu (kolečko/drag) resetovat currentZoomRange + // aby další klik na dlaždici fungoval správně + currentZoomRange = null; + + // Odebrat zoom-active z aktivní karty + if (activeZoomCard) { + activeZoomCard.classList.remove('zoom-active'); + activeZoomCard = null; + } + + updateChartDetailLevel(chart); + } + }, + pan: { + enabled: true, + mode: 'x', + modifierKey: 'shift', // Pan s Shift+drag + onPanComplete: function ({ chart }) { + // Při manuálním panu resetovat currentZoomRange + currentZoomRange = null; + + // Odebrat zoom-active z aktivní karty + if (activeZoomCard) { + activeZoomCard.classList.remove('zoom-active'); + activeZoomCard = null; + } + + updateChartDetailLevel(chart); + } + }, + limits: { + x: { minRange: 3600000 } // Min 1 hodina (v milisekundách) + } + }, + pricingModeIcons: modeIconOptions || null + }, + scales: { + x: { + // KRITICKÁ ZMĚNA: 'timeseries' místo 'time' pro lepší timezone handling + // timeseries používá data.labels přímo bez UTC konverze + type: 'timeseries', + time: { + unit: 'hour', + displayFormats: { + hour: 'dd.MM HH:mm' + }, + tooltipFormat: 'dd.MM.yyyy HH:mm' + }, + ticks: { + color: getTextColor(), + maxRotation: 45, + minRotation: 45, + font: { size: 11 }, + maxTicksLimit: 20 + }, + grid: { color: getGridColor(), lineWidth: 1 } + }, + 'y-price': { + type: 'linear', + position: 'left', + ticks: { + color: '#2196F3', + font: { size: 11, weight: '500' }, + callback: function (value) { return value.toFixed(2) + ' Kč'; } + }, + grid: { color: 'rgba(33, 150, 243, 0.15)', lineWidth: 1 }, + title: { + display: true, + text: '💰 Cena (Kč/kWh)', + color: '#2196F3', + font: { size: 13, weight: 'bold' } + } + }, + 'y-solar': { + type: 'linear', + position: 'left', + stacked: true, + ticks: { + color: '#78909C', + font: { size: 11, weight: '500' }, + callback: function (value) { return value.toFixed(1) + ' kWh'; }, + display: true + }, + grid: { + display: true, + color: 'rgba(120, 144, 156, 0.15)', + lineWidth: 1, + drawOnChartArea: true + }, + title: { + display: true, + text: '🔋 Kapacita baterie (kWh)', + color: '#78909C', + font: { size: 11, weight: 'bold' } + }, + // Začátek shora, aby se nepřekrývala s y-price + beginAtZero: false + }, + 'y-power': { + type: 'linear', + position: 'right', + stacked: true, + ticks: { + color: '#FFA726', + font: { size: 11, weight: '500' }, + callback: function (value) { return value.toFixed(2) + ' kW'; } + }, + grid: { display: false }, + title: { + display: true, + text: '☀️ Výkon (kW)', + color: '#FFA726', + font: { size: 13, weight: 'bold' } + } + } + } + }; + + applyPricingModeIconPadding(chartOptions, modeIconOptions); + + combinedChart = new Chart(ctx, { + type: 'bar', // Changed to 'bar' to support mixed chart (bar + line) + data: { labels: allLabels, datasets: datasets }, + plugins: [ChartDataLabels], // Registrace datalabels pluginu + options: chartOptions + }); + + // Inicializace detailu pro nový graf + updateChartDetailLevel(combinedChart); + + // OPRAVA: Nastavit zoom asynchronně PO dokončení inicializace Chart.js + // Chart.js zoom plugin se inicializuje asynchronně a přepisuje naše nastavení + // Použijeme requestAnimationFrame aby se zoom aplikoval až po prvním renderu + if (initialZoomStart && initialZoomEnd) { + requestAnimationFrame(() => { + if (!combinedChart) return; // Safety check + + combinedChart.options.scales.x.min = initialZoomStart; + combinedChart.options.scales.x.max = initialZoomEnd; + combinedChart.update('none'); // Aplikovat okamžitě bez animace + + // console.log('[Pricing] Initial zoom applied after first render:', new Date(initialZoomStart), 'to', new Date(initialZoomEnd)); + updateChartDetailLevel(combinedChart); + }); + } + } + + // Attach card handlers only once + setupPriceCardHandlers(); + + // Update Battery Health stats (if module is loaded) + if (typeof updateBatteryHealthStats === 'function') { + updateBatteryHealthStats(); + } + + // Mark charts as rendered to skip re-rendering on next tab switch + getTimelineCacheBucket(pricingPlanMode).chartsRendered = true; + + // Single-planner: no dual-plan comparison tile here + // Hide loading overlay + if (loadingOverlay) { + loadingOverlay.style.display = 'none'; + } + + const perfEnd = performance.now(); + const totalTime = (perfEnd - perfStart).toFixed(0); + console.log(`[Pricing] === loadPricingData COMPLETE in ${totalTime}ms ===`); +}/** + * Setup onClick handlers for price cards + * OPRAVENO: Používá event delegation pro spolehlivost + * Handlery přežijí innerHTML updates a fungují i když elementy ještě neexistují + */ +function setupPriceCardHandlers() { + if (priceCardHandlersAttached) { + return; // Už nastaveno + } + + console.log('[Card] Setting up price card click handlers (event delegation)'); + + // Event delegation: jeden handler na document, zachytí všechny kliky na karty + // Výhoda: Funguje i když se elementy dynamicky mění/přidávají + document.addEventListener('click', function (e) { + // Najít nejbližší .stat-card parent + const card = e.target.closest('.stat-card'); + if (!card) return; + + // Určit který typ karty to je podle ID uvnitř + let blockData = null; + let cardType = ''; + + if (card.querySelector('#cheapest-buy-price')) { + blockData = currentPriceBlocks.cheapest; + cardType = 'Nejlevnější nákup'; + } else if (card.querySelector('#expensive-buy-price')) { + blockData = currentPriceBlocks.expensive; + cardType = 'Nejdražší nákup'; + } else if (card.querySelector('#best-export-price')) { + blockData = currentPriceBlocks.bestExport; + cardType = 'Nejlepší prodej'; + } else if (card.querySelector('#worst-export-price')) { + blockData = currentPriceBlocks.worstExport; + cardType = 'Nejhorší prodej'; + } else { + return; // Není to jedna z našich cenových karet + } + + // Pokud máme data o bloku, zoomuj + if (blockData && blockData.start && blockData.end) { + console.log(`[Card] ${cardType} clicked, zooming to:`, blockData.start, '->', blockData.end); + e.stopPropagation(); + zoomToTimeRange(blockData.start, blockData.end, card); + } else { + console.warn(`[Card] ${cardType} clicked but no block data available`); + } + }); + + // Nastavit cursor pointer na všechny cenové karty (pokud existují) + const cardIds = [ + 'cheapest-buy-price', + 'expensive-buy-price', + 'best-export-price', + 'worst-export-price' + ]; + + cardIds.forEach(id => { + const element = document.getElementById(id); + if (element) { + const card = element.closest('.stat-card'); + if (card) { + card.style.cursor = 'pointer'; + } + } + }); + + priceCardHandlersAttached = true; + console.log('[Card] Event delegation handler attached successfully'); +} + + +// Export pricing functions +async function updatePlannedConsumptionStats() { + const hass = getHass(); + if (!hass) return; + + const forecastSensorId = `sensor.oig_${INVERTER_SN}_battery_forecast`; + const forecastSensor = hass.states[forecastSensorId]; + + // Check if sensor is available + if (!forecastSensor || forecastSensor.state === 'unavailable' || forecastSensor.state === 'unknown') { + console.log('[Planned Consumption] Battery forecast sensor not available:', forecastSensorId); + updateElementIfChanged('planned-consumption-today', '--', 'planned-today'); + updateElementIfChanged('consumption-profile-today', 'Čekám na data...', 'profile-today'); + updateElementIfChanged('planned-consumption-tomorrow', '--', 'planned-tomorrow'); + updateElementIfChanged('consumption-profile-tomorrow', 'Čekám na data...', 'profile-tomorrow'); + return; + } + + // Get pre-calculated consumption data from battery_forecast attributes + const attrs = forecastSensor.attributes || {}; + + // Display data (already calculated in Python) - načítáme přímo z root atributů + const todayPlannedKwh = attrs.planned_consumption_today; + const tomorrowKwh = attrs.planned_consumption_tomorrow; + const profileToday = attrs.profile_today; + const profileTomorrow = attrs.profile_tomorrow; + + // Získat již spotřebovanou energii dnes z ac_out_en_day (vrací Wh, převést na kWh) + const todayConsumedSensorId = `sensor.oig_${INVERTER_SN}_ac_out_en_day`; + const todayConsumedSensor = hass.states[todayConsumedSensorId]; + const todayConsumedWh = todayConsumedSensor && todayConsumedSensor.state !== 'unavailable' + ? parseFloat(todayConsumedSensor.state) || 0 + : 0; + const todayConsumedKwh = todayConsumedWh / 1000; // Převod Wh -> kWh + + // Celková spotřeba dnes (už spotřebováno + ještě plánováno) + const todayTotalKwh = todayConsumedKwh + (todayPlannedKwh || 0); + + // Celková plánovaná spotřeba (dnes zbývá + zítřek celý) + const totalPlannedKwh = (todayPlannedKwh || 0) + (tomorrowKwh || 0); + + // Update UI - Hlavní hodnota (plánovaná: dnes zbývá + zítřek) + if (totalPlannedKwh > 0) { + updateElementIfChanged('planned-consumption-main', `${totalPlannedKwh.toFixed(1)} kWh`, 'planned-main'); + } else { + updateElementIfChanged('planned-consumption-main', '--', 'planned-main'); + } + + // Update trend text (porovnání celkem dnes vs zítřek) + if (todayTotalKwh > 0 && tomorrowKwh !== null && tomorrowKwh !== undefined) { + const diff = tomorrowKwh - todayTotalKwh; + const diffPercent = todayTotalKwh > 0 ? ((diff / todayTotalKwh) * 100) : 0; + let trendText = ''; + let trendIcon = ''; + + if (Math.abs(diffPercent) < 5) { + trendIcon = '➡️'; + trendText = `Zítra podobně`; + } else if (diff > 0) { + trendIcon = '📈'; + trendText = `Zítra více (+${Math.abs(diffPercent).toFixed(0)}%)`; + } else { + trendIcon = '📉'; + trendText = `Zítra méně (-${Math.abs(diffPercent).toFixed(0)}%)`; + } + + updateElementIfChanged('planned-consumption-trend', `${trendIcon} ${trendText}`, 'planned-trend'); + } else { + updateElementIfChanged('planned-consumption-trend', '--', 'planned-trend'); + } + + // Detail řádky - Dnes: spotřebováno + zbývá plán, Zítra: celý den + if (todayConsumedKwh !== null && todayConsumedKwh !== undefined) { + updateElementIfChanged('planned-today-consumed-kwh', `${todayConsumedKwh.toFixed(1)} kWh`, 'planned-today-consumed'); + } else { + updateElementIfChanged('planned-today-consumed-kwh', '--', 'planned-today-consumed'); + } + + if (todayPlannedKwh !== null && todayPlannedKwh !== undefined) { + updateElementIfChanged('planned-today-remaining-kwh', `${todayPlannedKwh.toFixed(1)} kWh`, 'planned-today-remaining'); + } else { + updateElementIfChanged('planned-today-remaining-kwh', '--', 'planned-today-remaining'); + } + + if (tomorrowKwh !== null && tomorrowKwh !== undefined) { + updateElementIfChanged('planned-tomorrow-kwh', `${tomorrowKwh.toFixed(1)} kWh`, 'planned-tomorrow-kwh'); + } else { + updateElementIfChanged('planned-tomorrow-kwh', '--', 'planned-tomorrow-kwh'); + } + + // Profil display - bez emoji, čistý text (nahoru místo "Zbývá dnes + celý zítřek") + let profileDisplay = ''; + if (profileToday && profileToday !== 'Žádný profil' && profileToday !== 'Neznámý profil') { + profileDisplay = profileToday; + } else { + profileDisplay = 'Žádný profil'; + } + updateElementIfChanged('consumption-profile-display', profileDisplay, 'profile-display'); + + // Update gradient bar (místo canvas grafu) + const barToday = document.getElementById('planned-consumption-bar-today'); + const barTomorrow = document.getElementById('planned-consumption-bar-tomorrow'); + const labelToday = document.getElementById('planned-bar-today-label'); + const labelTomorrow = document.getElementById('planned-bar-tomorrow-label'); + + if (barToday && barTomorrow && todayTotalKwh > 0 && tomorrowKwh !== null && tomorrowKwh !== undefined) { + const total = todayTotalKwh + tomorrowKwh; + const todayPercent = (todayTotalKwh / total) * 100; + const tomorrowPercent = (tomorrowKwh / total) * 100; + + barToday.style.width = `${todayPercent}%`; + barTomorrow.style.width = `${tomorrowPercent}%`; + + if (labelToday) labelToday.textContent = `${todayTotalKwh.toFixed(1)}`; + if (labelTomorrow) labelTomorrow.textContent = `${tomorrowKwh.toFixed(1)}`; + } +} + +/** + * Update what-if analysis statistics on Pricing tab + * Reads mode_optimization.alternatives from battery_forecast attributes + */ +async function updateWhatIfAnalysis() { + const hass = getHass(); + if (!hass) return; + + const forecastSensorId = `sensor.oig_${INVERTER_SN}_battery_forecast`; + const forecastSensor = hass.states[forecastSensorId]; + + // Check if sensor is available + if (!forecastSensor || forecastSensor.state === 'unavailable' || forecastSensor.state === 'unknown') { + console.log('[What-if] Battery forecast sensor not available'); + updateElementIfChanged('whatif-optimized-cost', '--', 'whatif-main'); + updateElementIfChanged('whatif-savings-main', '--', 'whatif-savings'); + updateElementIfChanged('whatif-home-i-delta', '--', 'whatif-home-i'); + updateElementIfChanged('whatif-home-ii-delta', '--', 'whatif-home-ii'); + updateElementIfChanged('whatif-home-iii-delta', '--', 'whatif-home-iii'); + updateElementIfChanged('whatif-home-ups-delta', '--', 'whatif-home-ups'); + return; + } + + // Get mode_optimization data (still in attributes) + const attrs = forecastSensor.attributes || {}; + const modeOptData = attrs.mode_optimization || {}; + const alternatives = modeOptData.alternatives || {}; + + console.log('[What-if Tile] modeOptData:', modeOptData); + console.log('[What-if Tile] alternatives:', alternatives); + + // Phase 2.8: Use cached totals from mode_optimization instead of summing blocks + // (mode_recommendations are per-interval, mode_optimization has pre-calculated totals for DNES+ZÍTRA) + const totalCost = modeOptData.total_cost_czk || 0; + const totalSavings = modeOptData.total_savings_vs_home_i_czk || 0; + + console.log('[What-if Tile] totalCost:', totalCost, 'totalSavings:', totalSavings); + + // Update optimized cost and savings + updateElementIfChanged('whatif-optimized-cost', `${totalCost.toFixed(2)} Kč`, 'whatif-main'); + + if (totalSavings > 0) { + updateElementIfChanged('whatif-savings-main', `+${totalSavings.toFixed(2)} Kč`, 'whatif-savings'); + } else if (totalSavings < 0) { + updateElementIfChanged('whatif-savings-main', `${totalSavings.toFixed(2)} Kč`, 'whatif-savings'); + } else { + updateElementIfChanged('whatif-savings-main', '0 Kč', 'whatif-savings'); + } + + // Update what-if alternatives comparison - 4 modes only + // Backend format: alternatives = { "HOME I": {...}, "HOME II": {...}, ... } + const homeI = alternatives['HOME I']; + const homeII = alternatives['HOME II']; + const homeIII = alternatives['HOME III']; + const homeUps = alternatives['HOME UPS'] || alternatives['FULL HOME UPS']; + const doNothing = alternatives['DO NOTHING']; + + // Format deltas (delta_czk from backend - positive means alternative is more expensive) + const formatDelta = (alt) => { + if (!alt || alt.delta_czk === undefined) return '--'; + const delta = alt.delta_czk; + if (delta > 0.01) { + return `+${delta.toFixed(2)} Kč`; + } else if (delta < -0.01) { + return `${delta.toFixed(2)} Kč`; + } else { + return '~0 Kč'; + } + }; + + // Update values + updateElementIfChanged('whatif-home-i-delta', formatDelta(homeI), 'whatif-home-i'); + updateElementIfChanged('whatif-home-ii-delta', formatDelta(homeII), 'whatif-home-ii'); + updateElementIfChanged('whatif-home-iii-delta', formatDelta(homeIII), 'whatif-home-iii'); + updateElementIfChanged('whatif-home-ups-delta', formatDelta(homeUps), 'whatif-home-ups'); + + // Highlight active mode (DO NOTHING = current mode) + // Reset all rows first + const rows = ['whatif-home-i-row', 'whatif-home-ii-row', 'whatif-home-iii-row', 'whatif-home-ups-row']; + rows.forEach(rowId => { + const row = document.getElementById(rowId); + if (row) { + row.style.background = 'transparent'; + row.style.border = 'none'; + } + }); + + // Highlight the active one (if DO NOTHING exists, check which mode it represents) + if (doNothing && doNothing.current_mode) { + // Backend provides current_mode field in DO NOTHING + const activeMode = doNothing.current_mode; + let activeRowId = null; + + if (activeMode === 'HOME I') { + activeRowId = 'whatif-home-i-row'; + } else if (activeMode === 'HOME II') { + activeRowId = 'whatif-home-ii-row'; + } else if (activeMode === 'HOME III') { + activeRowId = 'whatif-home-iii-row'; + } else if (activeMode === 'HOME UPS') { + activeRowId = 'whatif-home-ups-row'; + } + + if (activeRowId) { + const activeRow = document.getElementById(activeRowId); + if (activeRow) { + activeRow.style.background = 'rgba(76, 175, 80, 0.15)'; + activeRow.style.border = '1px solid rgba(76, 175, 80, 0.3)'; + } + } + } +} + + +window.DashboardPricing = { + debouncedLoadPricingData, + debouncedUpdatePlannedConsumption, + loadPricingData, + updatePlannedConsumptionStats, + updateWhatIfAnalysis, + init: function() { + console.log('[DashboardPricing] Initialized'); + initChartPlanToggle(); + } +}; + +console.log('[DashboardPricing] Module loaded'); +if (window.DashboardPricing && typeof window.DashboardPricing.init === 'function') { + window.DashboardPricing.init(); +} +async function fetchTimelineFromAPI(plan, boxId) { + const timelineUrl = `/api/oig_cloud/battery_forecast/${boxId}/timeline?type=active`; + const fetchStart = performance.now(); + console.log(`[Pricing] Fetching ${plan} timeline from API...`); + const response = await fetch(timelineUrl); + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + const data = await response.json(); + const timelineData = data.active || data.timeline || []; + const fetchEnd = performance.now(); + console.log(`[Pricing] API fetch completed in ${(fetchEnd - fetchStart).toFixed(0)}ms - loaded ${timelineData.length} points for ${plan} plan`); + return timelineData; +} + +async function getTimelineData(plan, boxId, force = false) { + const cacheBucket = getTimelineCacheBucket(plan); + const cacheValid = !force && + cacheBucket.data && + !cacheBucket.stale; + + if (cacheValid) { + return { data: cacheBucket.data, fromCache: true }; + } + + if (!timelineFetchPromises[plan]) { + timelineFetchPromises[plan] = fetchTimelineFromAPI(plan, boxId) + .then((timelineData) => { + cacheBucket.data = timelineData; + cacheBucket.timestamp = Date.now(); + cacheBucket.chartsRendered = false; + cacheBucket.stale = false; + return timelineData; + }) + .catch((error) => { + console.error(`[Pricing] Failed to fetch ${plan} timeline:`, error); + throw error; + }) + .finally(() => { + timelineFetchPromises[plan] = null; + }); + } + + const data = await timelineFetchPromises[plan]; + return { data, fromCache: false }; +} diff --git a/custom_components/oig_cloud/www/js/features/timeline.js b/custom_components/oig_cloud/www/js/features/timeline.js new file mode 100644 index 00000000..e2c361bc --- /dev/null +++ b/custom_components/oig_cloud/www/js/features/timeline.js @@ -0,0 +1,3820 @@ +/* eslint-disable */ +const MODE_CONFIG = { + 'HOME I': { icon: '🏠', color: 'rgba(76, 175, 80, 0.7)', label: 'HOME I' }, + 'HOME II': { icon: '⚡', color: 'rgba(33, 150, 243, 0.7)', label: 'HOME II' }, + 'HOME III': { icon: '🔋', color: 'rgba(156, 39, 176, 0.7)', label: 'HOME III' }, + 'HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.7)', label: 'HOME UPS' }, + 'FULL HOME UPS': { icon: '🛡️', color: 'rgba(255, 152, 0, 0.7)', label: 'FULL HOME UPS' }, + 'DO NOTHING': { icon: '⏸️', color: 'rgba(158, 158, 158, 0.7)', label: 'DO NOTHING' } +}; + +const TIMELINE_MODE_ICON_PLUGIN_ID = 'timelineModeIcons'; +let timelineModeIconPluginRegistered = false; + +const timelineModeIconPlugin = { + id: TIMELINE_MODE_ICON_PLUGIN_ID, + beforeDatasetsDraw(chart, args, pluginOptions) { + const segments = pluginOptions?.segments; + if (!segments || segments.length === 0) { + return; + } + + const meta = chart.getDatasetMeta(0); + if (!meta || !meta.data || meta.data.length === 0) { + return; + } + + const chartArea = chart.chartArea; + if (!chartArea) { + return; + } + + const ctx = chart.ctx; + ctx.save(); + ctx.globalAlpha = pluginOptions?.backgroundOpacity ?? 0.12; + + segments.forEach((segment) => { + const pixelRange = getModeSegmentPixelRange(meta, segment); + if (!pixelRange) { + return; + } + + ctx.fillStyle = segment.color || 'rgba(255, 255, 255, 0.1)'; + ctx.fillRect( + pixelRange.left, + chartArea.top, + pixelRange.width, + chartArea.bottom - chartArea.top + ); + }); + + ctx.restore(); + }, + afterDatasetsDraw(chart, args, pluginOptions) { + const segments = pluginOptions?.segments; + if (!segments || segments.length === 0) { + return; + } + + const meta = chart.getDatasetMeta(0); + if (!meta || !meta.data || meta.data.length === 0) { + return; + } + + const chartArea = chart.chartArea; + if (!chartArea) { + return; + } + + const iconSize = pluginOptions?.iconSize ?? 18; + const labelSize = pluginOptions?.labelSize ?? 10; + const iconOffset = pluginOptions?.iconOffset ?? 8; + const iconFont = `${iconSize}px "Inter", "Segoe UI Emoji", "Noto Color Emoji", sans-serif`; + const labelFont = `${labelSize}px "Inter", sans-serif`; + const iconColor = pluginOptions?.iconColor || 'rgba(255, 255, 255, 0.95)'; + const labelColor = pluginOptions?.labelColor || 'rgba(255, 255, 255, 0.7)'; + const axisY = chartArea.bottom + iconOffset; + + const ctx = chart.ctx; + ctx.save(); + ctx.textAlign = 'center'; + ctx.textBaseline = 'top'; + + segments.forEach((segment) => { + const pixelRange = getModeSegmentPixelRange(meta, segment); + if (!pixelRange) { + return; + } + const centerX = pixelRange.left + pixelRange.width / 2; + + ctx.font = iconFont; + ctx.fillStyle = iconColor; + ctx.fillText(segment.icon || '❓', centerX, axisY); + + if (segment.shortLabel) { + ctx.font = labelFont; + ctx.fillStyle = labelColor; + ctx.fillText(segment.shortLabel, centerX, axisY + iconSize - 2); + } + }); + + ctx.restore(); + } +}; + +function ensureTimelineModeIconPluginRegistered() { + if (typeof Chart === 'undefined' || !Chart.register) { + return; + } + + if (!timelineModeIconPluginRegistered) { + Chart.register(timelineModeIconPlugin); + timelineModeIconPluginRegistered = true; + } +} + +function getModeSegmentPixelRange(meta, segment) { + const elements = meta?.data || []; + if (!elements.length) { + return null; + } + + const lastIndex = elements.length - 1; + const startIndex = Math.max(0, Math.min(segment.startIndex, lastIndex)); + const endIndex = Math.max(0, Math.min(segment.endIndex, lastIndex)); + const startEl = elements[startIndex]; + const endEl = elements[endIndex]; + + if (!startEl || !endEl) { + return null; + } + + const startWidth = startEl.width ?? 0; + const endWidth = endEl.width ?? 0; + const left = (startEl.x ?? 0) - startWidth / 2; + const right = (endEl.x ?? 0) + endWidth / 2; + const width = right - left; + + if (!isFinite(width) || width <= 0) { + return null; + } + + return { + left, + width + }; +} + +function runWhenIdle(task, timeoutMs = 2000, fallbackDelayMs = 600) { + if (typeof window.requestIdleCallback === 'function') { + window.requestIdleCallback(() => task(), { timeout: timeoutMs }); + return; + } + setTimeout(task, fallbackDelayMs); +} + +// Global Today Plan Tile instance +var todayPlanTileInstance = null; + +/** + * Render Today Plan Tile - live tracking of today's plan vs actual with EOD prediction + * Event-driven refresh triggered by buildExtendedTimeline() + */ +function renderTodayPlanTile(tileSummary) { + const container = document.getElementById('today-plan-tile-container'); + if (!container) { + console.warn('[Today Plan Tile] Container not found - skipping render'); + return; + } + + // Lazy load TodayPlanTile class if not already loaded + if (typeof TodayPlanTile === 'undefined') { + console.log('[Today Plan Tile] Loading module...'); + const script = document.createElement('script'); + script.type = 'module'; + script.src = '/local/oig_cloud/www/modules/today-plan-tile.js'; + script.onload = () => { + console.log('[Today Plan Tile] Module loaded, rendering...'); + initTodayPlanTile(container, tileSummary); + }; + script.onerror = () => { + console.error('[Today Plan Tile] Failed to load module'); + }; + document.head.appendChild(script); + return; + } + + // Update existing instance or create new one + if (todayPlanTileInstance) { + console.log('[Today Plan Tile] Updating existing instance'); + todayPlanTileInstance.update(tileSummary); + } else { + console.log('[Today Plan Tile] Creating new instance'); + initTodayPlanTile(container, tileSummary); + } +} + +/** + * Initialize Today Plan Tile instance + * @param {HTMLElement} container - Container element + * @param {object} tileSummary - Tile summary data from API + */ +function initTodayPlanTile(container, tileSummary) { + try { + todayPlanTileInstance = new TodayPlanTile( + container, + tileSummary, + () => { + // Click handler - open DNES tab in timeline dialog + console.log('[Today Plan Tile] Opening timeline dialog with DNES tab'); + if (window.DashboardTimeline?.openTimelineDialog) { + window.DashboardTimeline.openTimelineDialog('today'); + } + } + ); + console.log('[Today Plan Tile] Instance created'); + } catch (error) { + console.error('[Today Plan Tile] Failed to create instance:', error); + } +} + +// ============================================================================= +// TIMELINE DIALOG - Clean Implementation +// ============================================================================= + +/** + * TimelineDialog Class - manages the timeline popup dialog + * Clean lifecycle: init → open → render → update → close → destroy + */ +class TimelineDialog { + constructor() { + this.dialogElement = null; + this.isOpen = false; + this.updateInterval = null; + this.activeTab = 'today'; // Default tab - DNES + this.plan = 'hybrid'; + this.cache = { + hybrid: this.createEmptyCache() + }; + this.plannerMode = 'hybrid'; + this.autoModeSwitchEnabled = null; + this.autoSettingsLoaded = false; + this.autoModeToggleBusy = false; + this.autoModeToggleErrorTimeout = null; + this.autoPlanSyncEnabled = true; + this.activePlannerPlan = 'hybrid'; // Always hybrid + this.compareCharts = {}; + this.timelineCharts = {}; + this.chartResizeObservers = new Map(); + } + + createEmptyCache() { + return { + yesterday: null, + today: null, + tomorrow: null, + detail: null, + history: null, + compare: null + }; + } + + resolvePlanFromMode(mode) { + if (!mode) { + return null; + } + return 'hybrid'; + } + + getPlanCache(plan = this.plan) { + if (!this.cache[plan]) { + this.cache[plan] = this.createEmptyCache(); + } + return this.cache[plan]; + } + + setupAutoModeToggle() { + const input = document.getElementById('auto-mode-toggle-input'); + if (!input || input.dataset.listenerAttached === '1') { + return; + } + + input.addEventListener('change', (event) => { + this.handleAutoModeToggleChange(event.target.checked); + }); + input.dataset.listenerAttached = '1'; + } + + setAutoModeToggleLoading(isLoading, message = null) { + const container = document.getElementById('auto-mode-toggle'); + const statusEl = document.getElementById('auto-mode-toggle-status'); + const input = document.getElementById('auto-mode-toggle-input'); + if (!container || !statusEl || !input) { + return; + } + + container.classList.toggle('loading', isLoading); + input.disabled = !!isLoading; + if (isLoading && message) { + statusEl.textContent = message; + statusEl.classList.remove('enabled', 'disabled', 'error'); + } + } + + updateAutoModeToggleUI() { + const container = document.getElementById('auto-mode-toggle'); + const statusEl = document.getElementById('auto-mode-toggle-status'); + const input = document.getElementById('auto-mode-toggle-input'); + if (!container || !statusEl || !input) { + return; + } + + container.classList.remove('error'); + statusEl.classList.remove('error'); + + if (this.autoModeSwitchEnabled === null) { + statusEl.textContent = 'N/A'; + statusEl.classList.remove('enabled'); + statusEl.classList.add('disabled'); + input.checked = false; + return; + } + + const enabled = !!this.autoModeSwitchEnabled; + input.checked = enabled; + statusEl.textContent = enabled ? 'Zapnuto' : 'Vypnuto'; + statusEl.classList.toggle('enabled', enabled); + statusEl.classList.toggle('disabled', !enabled); + } + + showAutoModeToggleError(message) { + const container = document.getElementById('auto-mode-toggle'); + const statusEl = document.getElementById('auto-mode-toggle-status'); + if (!container || !statusEl) { + return; + } + + container.classList.add('error'); + statusEl.classList.add('error'); + statusEl.textContent = message; + + if (this.autoModeToggleErrorTimeout) { + clearTimeout(this.autoModeToggleErrorTimeout); + } + + this.autoModeToggleErrorTimeout = setTimeout(() => { + container.classList.remove('error'); + statusEl.classList.remove('error'); + this.updateAutoModeToggleUI(); + this.autoModeToggleErrorTimeout = null; + }, 3000); + } + + async requestPlannerSettings(method = 'GET', payload = null) { + if (!window.INVERTER_SN) { + throw new Error('Missing inverter serial number'); + } + + const endpoint = `oig_cloud/battery_forecast/${INVERTER_SN}/planner_settings`; + const hass = typeof window !== 'undefined' && typeof window.getHass === 'function' + ? window.getHass() + : null; + + if (hass && typeof hass.callApi === 'function') { + return hass.callApi(method, endpoint, method === 'GET' ? undefined : payload || {}); + } + + const headers = { 'Content-Type': 'application/json' }; + const token = window.DashboardAPI?.getHAToken?.(); + if (token) { + headers.Authorization = `Bearer ${token}`; + } else { + console.warn('[TimelineDialog] HA token not available, relying on cookies for auth'); + } + + const response = await fetch(`/api/${endpoint}`, { + method, + headers, + body: method === 'GET' ? undefined : JSON.stringify(payload || {}), + credentials: 'same-origin' + }); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + return response.json(); + } + + async ensurePlannerSettingsLoaded(force = false) { + const applyCurrentPreference = async () => { + const resolvedPlan = this.activePlannerPlan || this.resolvePlanFromMode(this.plannerMode); + const fallbackPlan = resolvedPlan || 'hybrid'; + + let desiredPlan; + if (this.autoModeSwitchEnabled) { + desiredPlan = resolvedPlan || fallbackPlan; + } else { + desiredPlan = fallbackPlan; + } + + await this.syncPlanWithAutoMode(desiredPlan); + }; + + if (this.autoSettingsLoaded && !force) { + this.updateAutoModeToggleUI(); + await applyCurrentPreference(); + return; + } + + if (!window.INVERTER_SN) { + return; + } + + this.setAutoModeToggleLoading(true, 'Načítám…'); + try { + const data = await this.requestPlannerSettings('GET'); + this.autoModeSwitchEnabled = !!data.auto_mode_switch_enabled; + if (data.planner_mode) { + this.plannerMode = data.planner_mode; + } + this.activePlannerPlan = this.resolvePlanFromMode(this.plannerMode); + this.autoSettingsLoaded = true; + this.updateAutoModeToggleUI(); + await applyCurrentPreference(); + } catch (error) { + console.error('[TimelineDialog] Failed to load planner settings', error); + this.showAutoModeToggleError('Chyba načtení'); + } finally { + this.setAutoModeToggleLoading(false); + } + } + + async handleAutoModeToggleChange(enabled) { + if (this.autoModeToggleBusy || !window.INVERTER_SN) { + return; + } + + const previousValue = this.autoModeSwitchEnabled; + this.autoModeToggleBusy = true; + this.setAutoModeToggleLoading(true, 'Ukládám…'); + + try { + const payload = { auto_mode_switch_enabled: enabled }; + const data = await this.requestPlannerSettings('POST', payload); + this.autoModeSwitchEnabled = !!data.auto_mode_switch_enabled; + if (data.planner_mode) { + this.plannerMode = data.planner_mode; + } + this.autoSettingsLoaded = true; + const desiredPlan = 'hybrid'; + this.updateAutoModeToggleUI(); + await this.syncPlanWithAutoMode(desiredPlan); + } catch (error) { + console.error('[TimelineDialog] Failed to update planner settings', error); + this.autoModeSwitchEnabled = previousValue; + const input = document.getElementById('auto-mode-toggle-input'); + if (input) { + input.checked = !!previousValue; + } + this.showAutoModeToggleError('Chyba uložení'); + } finally { + this.setAutoModeToggleLoading(false); + this.autoModeToggleBusy = false; + } + } + + async syncPlanWithAutoMode(desiredPlan) { + if (!this.autoPlanSyncEnabled) { + return; + } + if (!desiredPlan || this.plan === desiredPlan) { + return; + } + + console.log(`[TimelineDialog] Syncing plan view to active mode: ${desiredPlan}`); + await this.switchPlan(desiredPlan, { origin: 'auto', forceRefresh: true }); + } + + /** + * Initialize dialog - called once on page load + */ + init() { + this.dialogElement = document.getElementById('mode-timeline-dialog'); + if (!this.dialogElement) { + console.error('[TimelineDialog] Dialog element not found'); + return; + } + + // Attach event listeners + this.attachEventListeners(); + + // Prefetch data for all tabs (proactive caching) + this.prefetchAllTabs(); + + console.log('[TimelineDialog] Initialized'); + } + + /** + * Prefetch data for all tabs (called on init, not on open) + */ + prefetchAllTabs() { + runWhenIdle(async () => { + console.log('[TimelineDialog] Prefetching all tab data...'); + + try { + let defaultPlan = 'hybrid'; + if (window.PlannerState) { + try { + defaultPlan = await window.PlannerState.getDefaultPlan(); + } catch (error) { + console.warn('[TimelineDialog] Failed to resolve default plan for prefetch', error); + } + } + await this.loadAllTabsData(false, defaultPlan); + console.log('[TimelineDialog] Prefetch complete'); + } catch (error) { + console.warn('[TimelineDialog] Prefetch failed:', error); + } + }, 2500, 900); + } + + /** + * Load all tabs data in ONE API call (more efficient) + */ + async loadAllTabsData(forceRefresh = false, planOverride = null) { + const plan = planOverride || this.plan; + const planCache = this.getPlanCache(plan); + + if (!forceRefresh && planCache.yesterday && planCache.today && planCache.tomorrow) { + console.log(`[TimelineDialog] All tabs already cached for plan ${plan}`); + return; + } + + console.log(`[TimelineDialog] Loading ALL tabs data for plan ${plan}...`); + + try { + const apiUrl = `/api/oig_cloud/battery_forecast/${INVERTER_SN}/detail_tabs?plan=${plan}`; + const response = await fetchWithAuth(apiUrl); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + const data = await response.json(); + + if (!data) { + throw new Error('No data returned from detail_tabs'); + } + + ['yesterday', 'today', 'tomorrow', 'history', 'detail'].forEach(dayType => { + if (data[dayType]) { + planCache[dayType] = data[dayType]; + console.log( + `[TimelineDialog] Cached ${dayType} data for plan ${plan}:`, + planCache[dayType] + ); + } else { + planCache[dayType] = null; + } + }); + } catch (error) { + console.error(`[TimelineDialog] Failed to load tabs data for plan ${plan}:`, error); + this.cache[plan] = this.createEmptyCache(); + } + } + + /** + * Attach event listeners to dialog controls + */ + attachEventListeners() { + // Tab buttons + const tabButtons = this.dialogElement.querySelectorAll('.timeline-tab-btn'); + tabButtons.forEach(btn => { + btn.addEventListener('click', (e) => { + const tab = e.currentTarget.dataset.tab; + this.switchTab(tab); + }); + }); + + const planButtons = this.dialogElement.querySelectorAll('.plan-toggle-btn'); + planButtons.forEach(btn => { + btn.addEventListener('click', () => { + const plan = btn.dataset.plan || 'hybrid'; + this.switchPlan(plan, { origin: 'manual' }); + }); + }); + + // Close button + const closeBtn = this.dialogElement.querySelector('.close-timeline-dialog'); + if (closeBtn) { + closeBtn.addEventListener('click', () => this.close()); + } + + // Click outside to close + this.dialogElement.addEventListener('click', (e) => { + if (e.target === this.dialogElement) { + this.close(); + } + }); + + this.setupAutoModeToggle(); + } + + /** + * Open dialog and load data + */ + async open(tabName = null, planOverride = null) { + if (this.isOpen) { + console.log('[TimelineDialog] Already open'); + return; + } + + console.log('[TimelineDialog] Opening...'); + this.isOpen = true; + this.dialogElement.style.display = 'flex'; + + if (tabName) { + this.activeTab = tabName; + } + + this.autoPlanSyncEnabled = !planOverride; + if (planOverride && planOverride !== this.plan) { + this.plan = planOverride; + } + this.updatePlanButtons(); + await this.ensurePlannerSettingsLoaded(false); + + // Load all tabs data in ONE API call if not cached + const planCache = this.getPlanCache(this.plan); + if (!planCache.yesterday || !planCache.today || !planCache.tomorrow) { + console.log('[TimelineDialog] Loading missing tabs...'); + await this.loadAllTabsData(false, this.plan); + } + + // Switch to active tab (this will render + set CSS classes) + this.switchTab(this.activeTab); + + // Start update interval (refresh every 60s) + this.startUpdateInterval(); + } + + /** + * Close dialog and cleanup + */ + close() { + console.log('[TimelineDialog] Closing...'); + this.isOpen = false; + this.dialogElement.style.display = 'none'; + + // Stop update interval + this.stopUpdateInterval(); + this.destroyCompareCharts(); + Object.values(this.timelineCharts).forEach((chart) => { + if (chart && typeof chart.destroy === 'function') { + chart.destroy(); + } + }); + this.timelineCharts = {}; + this.chartResizeObservers.forEach((observer) => observer.disconnect()); + this.chartResizeObservers.clear(); + this.autoPlanSyncEnabled = true; + this.syncPlanWithAutoMode('hybrid'); + } + + /** + * Load data for specific tab from API + */ + async loadTabData(dayType, forceRefresh = false, planOverride = null) { + const plan = planOverride || this.plan; + const planCache = this.getPlanCache(plan); + + // Check cache first (unless forced refresh) + if (!forceRefresh && planCache[dayType]) { + console.log(`[TimelineDialog] Using cached ${dayType} data`); + return; + } + + console.log(`[TimelineDialog] Loading ${dayType} data...`); + + try { + const apiUrl = `/api/oig_cloud/battery_forecast/${INVERTER_SN}/detail_tabs?tab=${dayType}&plan=${plan}`; + const response = await fetchWithAuth(apiUrl); + + if (!response.ok) { + throw new Error(`HTTP ${response.status}`); + } + + const data = await response.json(); + + if (!data) { + throw new Error('No data returned from detail_tabs'); + } + + // Extract the specific day data from response + // API returns: { "today": { "date": "...", "mode_blocks": [...], "summary": {...} } } + const dayData = data[dayType]; + if (!dayData) { + throw new Error(`No data for ${dayType} in response`); + } + + // Cache the day-specific data + planCache[dayType] = dayData; + console.log(`[TimelineDialog] ${dayType} data loaded for plan ${plan}:`, planCache[dayType]); + + // Extra debug + if (planCache[dayType]?.mode_blocks) { + console.log(`[TimelineDialog] ${dayType} mode_blocks count: ${planCache[dayType].mode_blocks.length}`); + if (planCache[dayType].mode_blocks.length > 0) { + console.log(`[TimelineDialog] First block:`, JSON.stringify(planCache[dayType].mode_blocks[0], null, 2)); + } + } + } catch (error) { + console.error(`[TimelineDialog] Failed to load ${dayType} data:`, error); + planCache[dayType] = null; + } + } + + /** + * Switch to different tab + */ + switchTab(dayType) { + console.log(`[TimelineDialog] Switching to ${dayType} tab`); + + // Update active tab + this.activeTab = dayType; + + // Update tab buttons visual state + const tabButtons = this.dialogElement.querySelectorAll('.timeline-tab-btn'); + console.log(`[TimelineDialog] Found ${tabButtons.length} tab buttons`); + tabButtons.forEach(btn => { + if (btn.dataset.tab === dayType) { + btn.classList.add('active'); + } else { + btn.classList.remove('active'); + } + }); + + // Update tab content visibility + const allTabContents = this.dialogElement.querySelectorAll('.timeline-tab-content'); + console.log(`[TimelineDialog] Found ${allTabContents.length} tab contents`); + allTabContents.forEach(content => { + content.classList.remove('active'); + }); + + const activeContent = document.getElementById(`timeline-${dayType}-content`); + console.log(`[TimelineDialog] Active content element:`, activeContent); + if (activeContent) { + activeContent.classList.add('active'); + console.log(`[TimelineDialog] Added 'active' class to timeline-${dayType}-content`); + } + + // Render the tab + this.renderTab(dayType); + } + + async switchPlan(plan, options = {}) { + if (!plan) { + return; + } + + const origin = options.origin || 'manual'; + const forceRefresh = options.forceRefresh !== undefined ? options.forceRefresh : true; + + if (!forceRefresh && plan === this.plan) { + return; + } + + if (origin === 'manual') { + this.autoPlanSyncEnabled = false; + } + + this.plan = plan; + this.updatePlanButtons(); + + if (forceRefresh) { + this.cache[plan] = this.createEmptyCache(); + } + + await this.loadAllTabsData(forceRefresh, plan); + this.renderTab(this.activeTab); + + if (origin === 'manual' && this.autoModeSwitchEnabled) { + await this.updateAutoModePlanPreference(plan); + } + } + + updatePlanButtons() { + const planButtons = this.dialogElement?.querySelectorAll('.plan-toggle-btn'); + planButtons?.forEach(btn => { + const isActive = btn.dataset.plan === this.plan; + if (isActive) { + btn.classList.add('active'); + } else { + btn.classList.remove('active'); + } + }); + } + + /** + * Render specific tab based on dayType + */ + renderTab(dayType) { + console.log(`[TimelineDialog] Rendering ${dayType} tab`); + + const planCache = this.getPlanCache(); + const containerId = `${dayType}-timeline-container`; + const container = document.getElementById(containerId); + + if (!container) { + console.error(`[TimelineDialog] Container ${containerId} not found`); + return; + } + + if (dayType === 'compare') { + const yesterdayData = planCache.yesterday; + const todayData = planCache.today; + if ( + !yesterdayData || + !todayData || + !Array.isArray(yesterdayData.intervals) || + !Array.isArray(todayData.intervals) + ) { + container.innerHTML = this.renderNoData(dayType); + return; + } + + container.innerHTML = this.renderCompareTab(yesterdayData, todayData); + this.initializeCompareCharts(yesterdayData, todayData); + return; + } + + const data = planCache[dayType]; + if (!data || !data.mode_blocks || data.mode_blocks.length === 0) { + container.innerHTML = this.renderNoData(dayType); + return; + } + + // Render based on tab type + if (dayType === 'yesterday') { + container.innerHTML = this.renderYesterdayTab(data); + // Charts will be added later if needed + } else if (dayType === 'today') { + container.innerHTML = this.renderTodayTab(data); + // Charts will be added later if needed + } else if (dayType === 'tomorrow') { + container.innerHTML = this.renderTomorrowTab(data); + } else if (dayType === 'history') { + container.innerHTML = this.renderHistoryTab(data); + } + } + + scheduleChartResize(chart, canvas) { + if (!chart || !canvas) { + return; + } + + const resize = () => { + try { + chart.resize(); + } catch (err) { + // Ignore resize errors when chart is being destroyed + } + }; + + if (typeof window.requestAnimationFrame === 'function') { + window.requestAnimationFrame(() => { + resize(); + window.requestAnimationFrame(resize); + }); + } else { + setTimeout(resize, 50); + } + + if (typeof ResizeObserver !== 'undefined') { + const container = canvas.parentElement; + if (container && !this.chartResizeObservers.has(canvas)) { + const observer = new ResizeObserver(() => resize()); + observer.observe(container); + this.chartResizeObservers.set(canvas, observer); + } + } + } + + /** + * Render "No Data" message + */ + renderNoData(dayType) { + const messages = { + yesterday: 'Včerejší data nejsou k dispozici', + today: 'Dnešní data nejsou k dispozici', + tomorrow: 'Plán pro zítřek ještě není k dispozici', + history: 'Historická data nejsou k dispozici', + compare: 'Srovnání 48h zatím není k dispozici' + }; + + return ` +
+
📊
+

+ ${messages[dayType] || 'Data nejsou k dispozici'} +

+
+ `; + } + /** + * Render VČERA tab - Plan vs Actual comparison + * FÁZE 6: Now using Detail Tabs API data (mode_blocks) + */ + renderYesterdayTab(data) { + const { mode_blocks, summary } = data; + + if (!mode_blocks || mode_blocks.length === 0) { + return this.renderNoData('yesterday'); + } + + // Check if we have any planned data + const hasPlannedData = mode_blocks.some(b => b.mode_planned && b.mode_planned !== 'Unknown'); + + return ` + ${this.renderDetailTabHeader(summary, 'Včera')} + + +
+
+
+ 📊 + Režimy a náklady + ${mode_blocks.length} bloků +
+
+ 💰 ${summary.total_cost?.toFixed(2) || '0.00'} Kč + 📊 ${summary.overall_adherence?.toFixed(1) || '0'}% shoda + +
+
+
+ ${this.renderModeBlocks(mode_blocks, { showCosts: true, showAdherence: true })} +
+
+ + ${!hasPlannedData ? '

ℹ️ Pro tento den nebyl dostupný plán, zobrazena pouze skutečnost.

' : ''} + `; + } + + /** + * Render VČERA header from BE data (FÁZE 2) + */ + renderYesterdayHeaderBE(summary) { + const plannedCost = summary.plan_total_cost || 0; + const actualCost = summary.actual_total_cost || 0; + const deltaCost = summary.delta || 0; + const deltaPercent = summary.vs_plan_pct || 0; + const modeAdherence = summary.mode_adherence_pct || 0; + + // Calculate total intervals from mode_groups + const totalIntervals = summary.mode_groups?.reduce((sum, g) => sum + (g.interval_count || 0), 0) || 96; + const totalMatches = summary.mode_groups?.reduce((sum, g) => sum + (g.mode_matches || 0), 0) || 0; + + return ` +
+
+
+
+
${modeAdherence.toFixed(0)}% shoda režimů
+
+
+ +
+
+
+ 💰 + Plán +
+
+
${plannedCost.toFixed(2)} Kč
+
+ ${totalIntervals} intervalů +
+
+
+ +
+
+ 💸 + Skutečnost +
+
+
${actualCost.toFixed(2)} Kč
+
+ režimy OK ${totalMatches}/${totalIntervals} +
+
+
+ +
+
+ 📊 + Výsledek +
+
+
${deltaCost > 0 ? '+' : ''}${deltaCost.toFixed(2)} Kč
+
+ + + ${deltaPercent > 0 ? '+' : ''}${deltaPercent.toFixed(1)}% + + + ${deltaCost < 0 ? 'lepší' : deltaCost > 0 ? 'horší' : 'na plánu'} +
+
+
+
+
+ `; + } + + /** + * Render mode groups from BE data (FÁZE 2) + */ + renderYesterdayModeGroupsBE(groups) { + if (!groups || groups.length === 0) { + return '

Žádné skupiny

'; + } + + const modeIcons = { + 'HOME I': '🏠', + 'HOME II': '⚡', + 'HOME III': '🔋', + 'HOME UPS': '⚡' + }; + + const rows = groups.map(group => { + const delta = group.delta || 0; + const deltaClass = delta < -0.5 ? 'positive' : delta > 0.5 ? 'negative' : 'neutral'; + const icon = modeIcons[group.mode] || '🎯'; + const adherence = group.adherence_pct || 0; + + return ` +
+
+ ${icon} + ${group.mode} + +
+
+ `; + }).join(''); + + return rows; + } + + /** + * Render top variances from BE data (FÁZE 2) + */ + renderTopVariancesBE(variances) { + if (!variances || variances.length === 0) { + return ''; + } + + const rows = variances.map((v, idx) => { + const deltaClass = v.variance < 0 ? 'positive' : 'negative'; + const icon = v.variance < 0 ? '✅' : '❌'; + + return ` +
+ #${idx + 1} + ${v.time} + Plán: ${v.planned} Kč + Skutečnost: ${v.actual} Kč + ${icon} ${v.variance > 0 ? '+' : ''}${v.variance} Kč (${v.variance_pct > 0 ? '+' : ''}${v.variance_pct}%) +
+ `; + }).join(''); + + return ` + + `; + } + + /** + * Render card-based header for VČERA tab (v2.2 Dark) - FE fallback + */ + renderYesterdayHeader(summary) { + const plannedCost = summary?.planned_total_cost || 0; + const actualCost = summary?.actual_total_cost || 0; + const deltaCost = actualCost - plannedCost; + const deltaPercent = plannedCost > 0 ? ((deltaCost / plannedCost) * 100) : 0; + + const modeAdherence = summary?.mode_adherence_pct || 0; + const modeMatches = summary?.mode_matches || 0; + const totalIntervals = summary?.total_intervals || 96; + + return ` +
+
+
+
+
${modeAdherence.toFixed(0)}% shoda režimů
+
+
+ +
+
+
+ 💰 + Plán +
+
+
${plannedCost.toFixed(2)} Kč
+
+ ${totalIntervals} intervalů +
+
+
+ +
+
+ 💸 + Skutečnost +
+
+
${actualCost.toFixed(2)} Kč
+
+ režimy OK ${modeMatches}/${totalIntervals} +
+
+
+ +
+
+ 📊 + Výsledek +
+
+
${deltaCost > 0 ? '+' : ''}${deltaCost.toFixed(2)} Kč
+
+ + + ${deltaPercent > 0 ? '+' : ''}${deltaPercent.toFixed(1)}% + + + ${deltaCost < 0 ? 'lepší' : deltaCost > 0 ? 'horší' : 'na plánu'} +
+
+
+
+
+ `; + } + + /** + * Render interval analysis for VČERA tab - grouped by mode with variance details + */ + renderYesterdayIntervalAnalysis(intervals) { + // Group intervals by mode (both planned and actual) + const modeGroups = {}; + + intervals.forEach(interval => { + const plannedMode = interval.planned?.mode_name || 'Unknown'; + const actualMode = interval.actual?.mode_name || 'Unknown'; + + if (!modeGroups[plannedMode]) { + modeGroups[plannedMode] = { + mode: plannedMode, + intervals: [], + totalPlanned: 0, + totalActual: 0, + matchCount: 0, + mismatchCount: 0 + }; + } + + const costPlanned = interval.planned?.net_cost || 0; + const costActual = interval.actual?.net_cost || 0; + const matched = plannedMode === actualMode; + + modeGroups[plannedMode].intervals.push(interval); + modeGroups[plannedMode].totalPlanned += costPlanned; + modeGroups[plannedMode].totalActual += costActual; + if (matched) modeGroups[plannedMode].matchCount++; + else modeGroups[plannedMode].mismatchCount++; + }); // Sort by total cost (highest first) + const sortedGroups = Object.values(modeGroups).sort((a, b) => b.totalPlanned - a.totalPlanned); + + const modeEmojis = { + 'Balancer': '⚖️', + 'PV_to_Grid': '☀️', + 'Grid_Charging': '🔌', + 'Export_Peak': '📤', + 'Import_Only': '📥', + 'Self_Consumption': '🔋' + }; + + const groupsHtml = sortedGroups.map(group => { + const delta = group.totalActual - group.totalPlanned; + const adherence = group.intervals.length > 0 ? (group.matchCount / group.intervals.length * 100) : 0; + const deltaPercent = group.totalPlanned > 0 ? (delta / group.totalPlanned * 100) : 0; + const emoji = modeEmojis[group.mode] || '🎯'; + + return ` +
+
+
+ ${emoji} + ${group.mode} + ${group.intervals.length} intervalů +
+
+
+ Plán: + ${group.totalPlanned.toFixed(2)} Kč +
+
+ Skutečnost: + ${group.totalActual.toFixed(2)} Kč +
+
+ Delta: + ${delta > 0 ? '+' : ''}${delta.toFixed(2)} Kč (${deltaPercent > 0 ? '+' : ''}${deltaPercent.toFixed(1)}%) +
+
+ Shoda režimů: + ${adherence.toFixed(0)}% (${group.matchCount}/${group.intervals.length}) +
+
+
+
+ `; + }).join(''); + + return ` +
+

📋 Analýza intervalů podle režimů

+
+ ${groupsHtml} +
+
+ `; + } + + /** + * FÁZE 6.1: Render Detail Tab Header + * Přináší metriky (cost/solar/consumption/grid) srovnání plán vs. realita. + */ + renderDetailTabHeader(summary, tabName) { + if (!summary) { + return ''; + } + + const { overall_adherence, mode_switches } = summary; + const metrics = summary.metrics || {}; + + // Adherence color coding + let adherenceColor = '#888'; // Gray default + let adherenceIcon = '📊'; + if (typeof overall_adherence === 'number') { + if (overall_adherence >= 80) { + adherenceColor = '#4CAF50'; // Green + adherenceIcon = '✅'; + } else if (overall_adherence >= 50) { + adherenceColor = '#FF9800'; // Orange + adherenceIcon = '⚠️'; + } else { + adherenceColor = '#F44336'; // Red + adherenceIcon = '❌'; + } + } + + const metricTiles = [ + this.renderSummaryMetricTile(metrics.cost, '💰', 'Náklady', 'cost'), + this.renderSummaryMetricTile(metrics.solar, '☀️', 'Solární výroba', 'solar'), + this.renderSummaryMetricTile(metrics.consumption, '🏠', 'Spotřeba', 'consumption'), + this.renderSummaryMetricTile(metrics.grid, '⚡', 'Odběr ze sítě', 'grid'), + ] + .filter(Boolean) + .join(''); + + const metaInfo = + typeof overall_adherence === 'number' + ? ` +
+ ${overall_adherence.toFixed(0)}% shoda + | + ${mode_switches || 0} přepnutí +
+ ` + : ''; + + return ` +
+ ${metricTiles} +
+ ${metaInfo} + `; + } + + /** + * Helper: render single metric tile (plan vs actual) + */ + renderSummaryMetricTile(metric, icon, label, metricKey) { + if (!metric) { + return ''; + } + + const unit = metric.unit || ''; + const plan = Number(metric.plan ?? 0); + const hasActual = + metric.has_actual && metric.actual !== null && metric.actual !== undefined; + const actual = hasActual ? Number(metric.actual) : null; + + const mainValue = hasActual ? actual : plan; + const mainLabel = hasActual ? 'Skutečnost' : 'Plán'; + + const planRow = hasActual + ? ` +
+ Plán: + ${this.formatMetricValue(plan)} ${unit} +
+ ` + : ''; + + const hintRow = !hasActual + ? ` +
+ Plánovaná hodnota (čeká na živá data) +
+ ` + : ''; + + let deltaRow = ''; + if (hasActual) { + const delta = (actual ?? 0) - plan; + const absDelta = Math.abs(delta); + + const contextInfo = this.getMetricContext(delta, metricKey); + const deltaClassMap = { + 'metric-context--positive': 'delta-better', + 'metric-context--negative': 'delta-worse', + 'metric-context--neutral': 'delta-neutral', + }; + const deltaClass = deltaClassMap[contextInfo.className] || 'delta-neutral'; + const deltaValueText = + absDelta >= 0.01 + ? `${delta > 0 ? '+' : ''}${this.formatMetricValue(delta)} ${unit}` + : '±0'; + + deltaRow = ` +
+ ${contextInfo.text} + ${deltaValueText} +
+ `; + } + + const supplemental = [planRow, hintRow, deltaRow].filter(Boolean).join(''); + + return ` +
+
+
+ ${icon} + ${label} +
+ ${mainLabel} +
+
+ ${this.formatMetricValue(mainValue)} ${unit} +
+ ${supplemental} +
+ `; + } + + getMetricContext(delta, metricKey) { + const preferences = { + cost: 'lower', + solar: 'higher', + consumption: 'lower', + grid: 'lower', + }; + + const preference = preferences[metricKey] || 'lower'; + + if (delta === null) { + return { text: 'Na plánu', className: 'metric-context--neutral' }; + } + + if (Math.abs(delta) < 0.001) { + return { text: 'Na plánu', className: 'metric-context--neutral' }; + } + + const isBetter = + preference === 'higher' ? delta > 0 : preference === 'lower' ? delta < 0 : false; + + return { + text: isBetter ? 'Lépe než plán' : 'Hůře než plán', + className: isBetter ? 'metric-context--positive' : 'metric-context--negative', + }; + } + + formatMetricValue(value) { + const num = Number(value); + if (!Number.isFinite(num)) { + return '0.00'; + } + + const abs = Math.abs(num); + if (abs >= 1000) { + return num.toFixed(0); + } + if (abs >= 100) { + return num.toFixed(1); + } + return num.toFixed(2); + } + + /** + * FÁZE 6: Render Mode Blocks from Detail Tabs API + */ + renderModeBlocks(blocks, options = {}) { + if (!blocks || blocks.length === 0) { + return '

Žádné mode bloky k dispozici

'; + } + + const blocksHtml = blocks.map((block, index) => { + const { + mode_historical, + mode_planned, + mode_match, + status, + start_time, + end_time, + duration_hours, + cost_historical, + cost_planned, + cost_delta, + adherence_pct, + solar_total_kwh, + consumption_total_kwh, + grid_import_total_kwh, + grid_export_total_kwh, + interval_reasons + } = block; + + // Get mode config + const historicalMode = MODE_CONFIG[mode_historical] || { icon: '❓', color: 'rgba(158, 158, 158, 0.5)', label: mode_historical }; + const plannedMode = MODE_CONFIG[mode_planned] || { icon: '❓', color: 'rgba(158, 158, 158, 0.5)', label: mode_planned }; + const hasActualMode = Boolean(mode_historical && mode_historical !== 'Unknown' && status !== 'planned'); + const hasPlannedMode = Boolean(mode_planned && mode_planned !== 'Unknown'); + const plannedOnly = !hasActualMode && hasPlannedMode; + + // Status icon + const statusIcons = { + completed: '✅', + current: '▶️', + planned: '📅' + }; + const statusIcon = statusIcons[status] || '❓'; + + // Match indicator + const matchClass = mode_match ? 'match-yes' : 'match-no'; + const matchIcon = mode_match ? '✅' : '❌'; + const matchLabel = mode_match ? 'Shoda' : 'Odchylka'; + + // Cost delta indicator + let costDeltaHtml = ''; + if (cost_delta !== null && cost_delta !== undefined) { + const deltaClass = cost_delta > 0 ? 'cost-higher' : cost_delta < 0 ? 'cost-lower' : 'cost-equal'; + const deltaIcon = cost_delta > 0 ? '⬆️' : cost_delta < 0 ? '⬇️' : '➡️'; + costDeltaHtml = ` + + ${deltaIcon} ${cost_delta > 0 ? '+' : ''}${cost_delta.toFixed(2)} Kč + + `; + } + + const reasonsHtml = this.renderIntervalReasons(interval_reasons, status); + + return ` +
+ +
+
+ ${statusIcon} ${start_time} - ${end_time} + (${duration_hours?.toFixed(1)}h) +
+
+ ${matchIcon} ${matchLabel} +
+
+ + +
+ +
+ ${plannedOnly ? 'Plán:' : 'Skutečnost/Plán:'} +
+ ${hasActualMode ? `${historicalMode.icon} ${historicalMode.label}` : ''} + ${hasActualMode && hasPlannedMode ? ` + + ${plannedMode.icon} ${plannedMode.label} + ` : (!hasActualMode && hasPlannedMode ? ` + ${plannedMode.icon} ${plannedMode.label} + ` : '')} +
+
+ + +
+ Cena (skutečná/plán): +
+ ${cost_historical?.toFixed(2) || 'N/A'} Kč + ${cost_planned !== null && cost_planned !== undefined ? ` + + ${cost_planned.toFixed(2)} Kč + ${costDeltaHtml} + ` : ''} +
+
+ + +
+ ☀️ Solár: +
${solar_total_kwh?.toFixed(2) || '0.00'} kWh
+
+ + +
+ 🏠 Spotřeba: +
${consumption_total_kwh?.toFixed(2) || '0.00'} kWh
+
+ + +
+ ⬇️ Import: +
${grid_import_total_kwh?.toFixed(2) || '0.00'} kWh
+
+ + +
+ ⬆️ Export: +
${grid_export_total_kwh?.toFixed(2) || '0.00'} kWh
+
+ + ${reasonsHtml} +
+
+ `; + }).join(''); + + return blocksHtml; + } + + formatReasonTime(isoTs) { + if (!isoTs) { + return '--:--'; + } + try { + const fmt = new Intl.DateTimeFormat('cs-CZ', { + hour: '2-digit', + minute: '2-digit' + }); + const dt = new Date(isoTs); + if (Number.isNaN(dt.getTime())) { + return isoTs; + } + return fmt.format(dt); + } catch (err) { + return isoTs; + } + } + + renderIntervalReasons(intervalReasons, status) { + if (!intervalReasons || intervalReasons.length === 0) { + return ''; + } + + const items = intervalReasons.map(item => { + const timeLabel = this.formatReasonTime(item.time); + return `
${timeLabel}${item.reason}
`; + }).join(''); + + return ` +
+ 🧠 Důvod${status === 'completed' ? ' (plán)' : ''}: +
+ ${items} +
+
+ `; + } + + /** + * Render DNES tab - Live tracking + EOD prediction + */ + renderTodayTab(data) { + const { mode_blocks, summary } = data; + + if (!mode_blocks || mode_blocks.length === 0) { + return this.renderNoData('today'); + } + + // Split into completed, current, and planned blocks + const completedBlocks = mode_blocks.filter(b => b.status === 'completed'); + const currentBlock = mode_blocks.find(b => b.status === 'current'); + const plannedBlocks = mode_blocks.filter(b => b.status === 'planned'); + + // Get sub-summaries from API + const completedSummary = summary.completed_summary || { + count: completedBlocks.length, + total_cost: completedBlocks.reduce((sum, b) => sum + (b.cost_historical || 0), 0), + adherence_pct: 0 + }; + + const plannedSummary = summary.planned_summary || { + count: plannedBlocks.length, + total_cost: plannedBlocks.reduce((sum, b) => sum + (b.cost_planned || 0), 0) + }; + + const activePlan = data.metadata?.active_plan?.toUpperCase?.(); + const planBanner = activePlan ? ` +
+ Aktivní plán: ${activePlan} + ${!data.comparison && data.metadata?.comparison_plan_available ? `Druhý plán: ${data.metadata.comparison_plan_available.toUpperCase()}` : ''} +
+ ` : ''; + + const comparisonHtml = this.renderComparisonSection(data.comparison); + + return ` + ${this.renderDetailTabHeader(summary, 'Dnes')} + ${planBanner} + + + ${completedBlocks.length > 0 ? ` +
+
+
+ + Uplynulé + ${completedSummary.count} bloků +
+
+ 💰 ${completedSummary.total_cost.toFixed(2)} Kč + 📊 ${completedSummary.adherence_pct.toFixed(1)}% shoda + +
+
+
+ ${this.renderModeBlocks(completedBlocks, { showCosts: true, showAdherence: true })} +
+
+ ` : ''} + + + ${currentBlock ? ` +
+
+ ⏱️ + Aktuální režim +
+
+ ${this.renderModeBlocks([currentBlock], { showCosts: true, showAdherence: false })} +
+
+ ` : ''} + + + ${plannedBlocks.length > 0 ? ` +
+
+
+ 📅 + Plánované + ${plannedSummary.count} bloků +
+
+ 💰 ${plannedSummary.total_cost.toFixed(2)} Kč + +
+
+
+ ${this.renderModeBlocks(plannedBlocks, { showCosts: true, showAdherence: false })} +
+
+ ` : ''} + + ${comparisonHtml} + `; + } + + /** + * Render DNES header from BE data (FÁZE 1) + */ + renderTodayHeaderBE(data) { + const eodPredicted = data.eod_prediction?.predicted_total || 0; + const eodPlan = data.plan_total_cost || 0; + const eodVsPlan = data.eod_prediction?.vs_plan || 0; + const eodVsPlanPct = data.vs_plan_pct || 0; + + const actualSoFar = data.actual_total_cost || 0; + const planSoFar = data.completed_so_far?.planned_cost || 0; + const deltaSoFar = data.completed_so_far?.delta_cost || 0; + const deltaSoFarPct = data.completed_so_far?.delta_pct || 0; + + const predictedSavings = data.eod_prediction?.predicted_savings || 0; + const plannedSavings = data.eod_prediction?.planned_savings || 0; + + const progressPct = data.progress_pct || 0; + + return ` +
+
+
+
+
${progressPct.toFixed(0)}% dne • ${new Date().toLocaleTimeString('cs-CZ', {hour: '2-digit', minute: '2-digit'})}
+
+
+ +
+
+
+ 💰 + Odhad nákladů na konec dne +
+
+
${eodPredicted.toFixed(2)} Kč
+
+ plán: ${eodPlan.toFixed(2)} Kč + + + ${eodVsPlanPct > 0 ? '+' : ''}${eodVsPlanPct.toFixed(1)}% + +
+
+
+ +
+
+ 📊 + Dosud skutečně +
+
+
${actualSoFar.toFixed(2)} Kč
+
+ plán: ${planSoFar.toFixed(2)} Kč + + + ${deltaSoFarPct > 0 ? '+' : ''}${deltaSoFarPct.toFixed(1)}% + +
+
+
+ +
+
+ 💎 + Předpokládaná úspora +
+
+
${predictedSavings.toFixed(2)} Kč
+
+ vs. HOME I režim +
+
+
+
+
+ `; + } + + /** + * Group 15-min intervals into time blocks by mode (HOME regime changes) + */ + groupIntervalsByMode(intervals) { + if (intervals.length === 0) return []; + + const groups = []; + let currentGroup = null; + + intervals.forEach((interval, idx) => { + // Normalize mode name (trim whitespace) + const rawMode = interval.planned?.mode_name || interval.actual?.mode_name || '?'; + const mode = rawMode.trim(); + + if (!currentGroup || currentGroup.mode !== mode) { + // Start new group + currentGroup = { + mode: mode, + intervals: [interval], + startTime: interval.time, + endTime: interval.time + }; + groups.push(currentGroup); + } else { + // Add to existing group + currentGroup.intervals.push(interval); + currentGroup.endTime = interval.time; + } + }); + + console.log(`[TimelineDialog] Grouped ${intervals.length} intervals into ${groups.length} groups by mode`); + + return groups; + } + + resolveIntervalMode(interval) { + if (!interval) { + return null; + } + + const status = interval.status; + const baseMode = (status === 'historical' || status === 'current') + ? (interval.actual?.mode_name || interval.planned?.mode_name || interval.mode_name) + : (interval.planned?.mode_name || interval.mode_name || interval.actual?.mode_name); + + if (!baseMode || typeof baseMode !== 'string') { + return null; + } + + const normalized = baseMode.trim(); + return normalized.length ? normalized : null; + } + + getModeShortLabel(modeName) { + if (!modeName) { + return ''; + } + + if (modeName.startsWith('HOME ')) { + return modeName.replace('HOME ', '').trim(); + } + + if (modeName === 'FULL HOME UPS') { + return 'UPS'; + } + + if (modeName === 'HOME UPS') { + return 'UPS'; + } + + if (modeName === 'DO NOTHING') { + return 'DN'; + } + + return modeName.substring(0, 3).toUpperCase(); + } + + buildModeSegmentsForChart(intervals) { + if (!Array.isArray(intervals) || intervals.length === 0) { + return []; + } + + const segments = []; + let currentSegment = null; + + intervals.forEach((interval, idx) => { + const mode = this.resolveIntervalMode(interval); + + if (!mode) { + currentSegment = null; + return; + } + + if (!currentSegment || currentSegment.mode !== mode) { + currentSegment = { + mode, + startIndex: idx, + endIndex: idx + }; + segments.push(currentSegment); + } else { + currentSegment.endIndex = idx; + } + }); + + return segments.map((segment) => { + const config = MODE_CONFIG[segment.mode] || { icon: '❓', color: 'rgba(158, 158, 158, 0.6)', label: segment.mode || 'Unknown' }; + return { + ...segment, + icon: config.icon || '❓', + color: config.color || 'rgba(158, 158, 158, 0.6)', + label: config.label || segment.mode, + shortLabel: this.getModeShortLabel(segment.mode) + }; + }); + } + + /** + * Render intervals for VČERA tab (backward compatibility fallback) + * Shows all completed intervals grouped by mode + */ + renderYesterdayIntervals(intervals) { + // Group all intervals by mode (they're all completed for yesterday) + const completedGroups = this.groupIntervalsByMode(intervals); + + // Render using the completed intervals renderer + return this.renderCompletedIntervalGroups(completedGroups); + } + + /** + * Render intervals for DNES tab (v2.1 compact format) + * FÁZE 1-3: Now uses BE grouped data + */ + renderTodayIntervals(intervals, unifiedCostData) { + const now = new Date(); + + // FÁZE 1: Use BE grouped data if available + if (unifiedCostData && unifiedCostData.completed_groups && unifiedCostData.future_groups) { + console.log('[TimelineDialog DNES] Using BE grouped data:', { + completed: unifiedCostData.completed_groups.length, + active: unifiedCostData.active_group ? 1 : 0, + future: unifiedCostData.future_groups.length + }); + + return ` + ${this.renderCompletedIntervalGroupsBE(unifiedCostData.completed_groups)} + ${unifiedCostData.active_group ? this.renderActiveIntervalBE(unifiedCostData.active_group) : ''} + ${this.renderFutureIntervalGroupsBE(unifiedCostData.future_groups)} + `; + } + + // Fallback to FE grouping (backward compatibility) + console.log('[TimelineDialog DNES] BE grouped data not available, using FE grouping'); + + // Separate intervals by status + const completed = []; + let active = null; + const future = []; + + intervals.forEach(interval => { + const status = interval.status; + + if (status === 'historical') { + completed.push(interval); + } else if (status === 'current') { + active = interval; + } else { + future.push(interval); + } + }); + + console.log(`[TimelineDialog] Separated intervals: completed=${completed.length}, active=${active ? 1 : 0}, future=${future.length}`); + + // Group intervals by mode (HOME regime changes) + const completedGroups = this.groupIntervalsByMode(completed); + const futureGroups = this.groupIntervalsByMode(future); + + // Get active interval data from unifiedCostData + const activeIntervalData = unifiedCostData?.active_interval; + + return ` + ${this.renderCompletedIntervalGroups(completedGroups)} + ${active ? this.renderActiveInterval(active, activeIntervalData) : ''} + ${this.renderFutureIntervalGroups(futureGroups, unifiedCostData)} + `; + } + + /** + * Render completed interval groups - compact one-line format + */ + renderCompletedIntervalGroups(groups) { + if (groups.length === 0) { + return '

Žádné uplynulé intervaly

'; + } + + const totalIntervals = groups.reduce((sum, g) => sum + g.intervals.length, 0); + + // Calculate aggregated values + const totalActualCost = groups.reduce((sum, g) => { + return sum + g.intervals.reduce((s, iv) => s + (iv.actual?.net_cost || 0), 0); + }, 0); + + const totalPlannedCost = groups.reduce((sum, g) => { + return sum + g.intervals.reduce((s, iv) => s + (iv.planned?.net_cost || 0), 0); + }, 0); + + const totalSavings = groups.reduce((sum, g) => { + return sum + g.intervals.reduce((s, iv) => s + (iv.actual?.savings || 0), 0); + }, 0); + + const totalDelta = totalActualCost - totalPlannedCost; + const totalDeltaPct = totalPlannedCost > 0 ? ((totalDelta / totalPlannedCost) * 100) : 0; + const deltaClass = totalDelta < -0.5 ? 'positive' : totalDelta > 0.5 ? 'negative' : 'neutral'; + + const rows = groups.map((group, idx) => { + const startTime = new Date(group.startTime); + const endTime = new Date(group.endTime); + + // Calculate end time + 15 minutes for the range + const rangeEnd = new Date(endTime.getTime() + 15 * 60 * 1000); + + const startStr = `${startTime.getHours().toString().padStart(2, '0')}:${startTime.getMinutes().toString().padStart(2, '0')}`; + const endStr = `${rangeEnd.getHours().toString().padStart(2, '0')}:${rangeEnd.getMinutes().toString().padStart(2, '0')}`; + const timeRange = `${startStr} - ${endStr}`; + + const mode = group.mode; + const modeIcon = mode.includes('HOME I') ? '🏠' : mode.includes('HOME UPS') ? '⚡' : '🔋'; + + // Sum costs across all intervals in group + const actualCost = group.intervals.reduce((sum, iv) => sum + (iv.actual?.net_cost || 0), 0); + const plannedCost = group.intervals.reduce((sum, iv) => sum + (iv.planned?.net_cost || 0), 0); + const actualSavings = group.intervals.reduce((sum, iv) => sum + (iv.actual?.savings || 0), 0); + + const delta = actualCost - plannedCost; + const deltaPct = plannedCost > 0 ? ((delta / plannedCost) * 100) : 0; + + const deltaClass = delta < -0.5 ? 'positive' : delta > 0.5 ? 'negative' : 'neutral'; + const deltaIcon = delta < -0.5 ? '✅' : delta > 0.5 ? '❌' : '⚪'; + + const intervalCount = group.intervals.length; + + return ` +
+
+ ${timeRange} + ${modeIcon} ${mode} + (${intervalCount}×15min) + ${actualCost.toFixed(2)} Kč + ${deltaIcon} ${Math.abs(deltaPct).toFixed(0)}% + +
+ +
+ `; + }).join(''); + + return ` + + `; + } + + /** + * Render completed interval groups from BE data (FÁZE 1) + */ + renderCompletedIntervalGroupsBE(groups) { + if (!groups || groups.length === 0) { + return '

Žádné uplynulé intervaly

'; + } + + const totalActualCost = groups.reduce((sum, g) => sum + (g.actual_cost || 0), 0); + const totalPlannedCost = groups.reduce((sum, g) => sum + (g.planned_cost || 0), 0); + const totalDelta = groups.reduce((sum, g) => sum + (g.delta || 0), 0); + const totalDeltaPct = totalPlannedCost > 0 ? ((totalDelta / totalPlannedCost) * 100) : 0; + const deltaClass = totalDelta < -0.5 ? 'positive' : totalDelta > 0.5 ? 'negative' : 'neutral'; + + const rows = groups.map((group, idx) => { + const deltaClass = group.delta < -0.5 ? 'positive' : group.delta > 0.5 ? 'negative' : 'neutral'; + const deltaIcon = group.delta < -0.5 ? '✅' : group.delta > 0.5 ? '❌' : '⚪'; + const modeIcon = group.mode.includes('HOME I') ? '🏠' : group.mode.includes('HOME UPS') ? '⚡' : '🔋'; + + return ` +
+
+ ${group.start_time} - ${group.end_time} + ${modeIcon} ${group.mode} + (${group.interval_count}×15min) + ${group.actual_cost.toFixed(2)} Kč + ${deltaIcon} ${Math.abs(group.delta_pct || 0).toFixed(0)}% +
+
+ `; + }).join(''); + + return ` + + `; + } + + /** + * Render active interval from BE data (FÁZE 1) + */ + renderActiveIntervalBE(group) { + const modeIcon = group.mode.includes('HOME I') ? '🏠' : group.mode.includes('HOME UPS') ? '⚡' : '🔋'; + const plannedCost = group.planned_cost || 0; + const actualCost = group.actual_cost || 0; + const progress = 50; // Default mid-interval + + return ` +
+
+ 🔥 + AKTIVNÍ INTERVAL +
+
+
+
+ ${group.start_time} + ${modeIcon} ${group.mode} + ${plannedCost.toFixed(2)} Kč plán + ⏳ ${progress}% +
+
+
+
+
+
+
+ `; + } + + /** + * Render future interval groups from BE data (FÁZE 1) + */ + renderFutureIntervalGroupsBE(groups) { + if (!groups || groups.length === 0) { + return '

Žádné budoucí intervaly

'; + } + + const totalPlannedCost = groups.reduce((sum, g) => sum + (g.planned_cost || 0), 0); + const totalPlannedSavings = groups.reduce((sum, g) => sum + (g.planned_savings || 0), 0); + + const rows = groups.map((group, idx) => { + const modeIcon = group.mode.includes('HOME I') ? '🏠' : group.mode.includes('HOME UPS') ? '⚡' : '🔋'; + const plannedSavings = group.planned_savings || 0; + + return ` +
+
+ ${group.start_time} - ${group.end_time} + ${modeIcon} ${group.mode} + (${group.interval_count}×15min) + ${group.planned_cost.toFixed(2)} Kč + ${plannedSavings > 0 ? `💎 ${plannedSavings.toFixed(2)} Kč` : ''} +
+
+ `; + }).join(''); + + return ` + + `; + } + + /** + * Render active interval with progress bar + */ + renderActiveInterval(interval, activeData) { + const time = new Date(interval.time); + const timeStr = `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`; + + const mode = interval.planned?.mode_name || '?'; + const modeIcon = mode.includes('HOME I') ? '🏠' : mode.includes('HOME UPS') ? '⚡' : '🔋'; + + const plannedCost = interval.planned?.net_cost || 0; + const progress = activeData?.progress_pct || 0; + const actualCostSoFar = activeData?.actual_cost_so_far || 0; + const expectedCost = activeData?.expected_cost_at_progress || 0; + const costDelta = actualCostSoFar - expectedCost; + const costDeltaPct = activeData?.cost_delta_pct || 0; + + const deltaClass = costDelta < -0.5 ? 'positive' : costDelta > 0.5 ? 'negative' : 'neutral'; + const deltaIcon = costDelta < -0.5 ? '✅' : costDelta > 0.5 ? '❌' : '⚪'; + + return ` +
+
+ 🔥 + AKTIVNÍ INTERVAL + 1 interval +
+
+
+
+ ${timeStr} + ${modeIcon} ${mode} + ${plannedCost.toFixed(2)} Kč plán + ⏳ ${progress.toFixed(0)}% +
+
+
+
+
+ Skutečně dosud: ${actualCostSoFar.toFixed(2)} Kč (${progress.toFixed(0)}% plánu) ${deltaIcon} ${costDeltaPct > 0 ? '+' : ''}${costDeltaPct.toFixed(1)}% +
+
+
+
+ `; + } + + /** + * Render future interval groups - minimalist format + */ + renderFutureIntervalGroups(groups, unifiedCostData) { + if (groups.length === 0) { + return ''; + } + + const totalIntervals = groups.reduce((sum, g) => sum + g.intervals.length, 0); + + // Calculate aggregated planned costs for FUTURE intervals only + const totalPlannedCost = groups.reduce((sum, g) => { + return sum + g.intervals.reduce((s, iv) => s + (iv.planned?.net_cost || 0), 0); + }, 0); + + const displayGroups = groups.slice(0, 20); // Show first 20 groups + + const rows = displayGroups.map((group, idx) => { + const startTime = new Date(group.startTime); + const endTime = new Date(group.endTime); + + // Calculate end time + 15 minutes for the range + const rangeEnd = new Date(endTime.getTime() + 15 * 60 * 1000); + + const startStr = `${startTime.getHours().toString().padStart(2, '0')}:${startTime.getMinutes().toString().padStart(2, '0')}`; + const endStr = `${rangeEnd.getHours().toString().padStart(2, '0')}:${rangeEnd.getMinutes().toString().padStart(2, '0')}`; + const timeRange = `${startStr} - ${endStr}`; + + const mode = group.mode; + const modeIcon = mode.includes('HOME I') ? '🏠' : mode.includes('HOME UPS') ? '⚡' : '🔋'; + + const plannedCost = group.intervals.reduce((sum, iv) => sum + (iv.planned?.net_cost || 0), 0); + const plannedSavings = group.intervals.reduce((sum, iv) => sum + (iv.planned?.savings_vs_home_i || 0), 0); + const intervalCount = group.intervals.length; + + return ` +
+
+ ${timeRange} + ${modeIcon} ${mode} + (${intervalCount}×15min) + ${plannedCost.toFixed(2)} Kč + ${plannedSavings > 0 ? `💎 ${plannedSavings.toFixed(2)} Kč` : ''} +
+
+ `; + }).join(''); + + const remaining = groups.length - 20; + + return ` + + `; + } + + /** + /** + * Render ZÍTRA tab - Tomorrow's plan with card design + */ + renderTomorrowTab(data) { + const { mode_blocks, summary } = data; + + if (!mode_blocks || mode_blocks.length === 0) { + return this.renderNoData('tomorrow'); + } + + const activePlan = data.metadata?.active_plan?.toUpperCase?.(); + const planBanner = activePlan ? ` +
+ Aktivní plán: ${activePlan} + ${!data.comparison && data.metadata?.comparison_plan_available ? `Druhý plán: ${data.metadata.comparison_plan_available.toUpperCase()}` : ''} +
+ ` : ''; + + const comparisonHtml = this.renderComparisonSection(data.comparison); + + // All blocks should be planned for tomorrow + return ` + ${this.renderDetailTabHeader(summary, 'Zítra')} + ${planBanner} + + +
+
+
+ 📅 + Plánované režimy + ${mode_blocks.length} bloků +
+
+ 💰 ${summary.total_cost?.toFixed(2) || '0.00'} Kč + +
+
+
+ ${this.renderModeBlocks(mode_blocks, { showCosts: true, showAdherence: false })} +
+
+ + ${comparisonHtml} + `; + } + + renderComparisonSection(comparison) { + if (!comparison || !comparison.mode_blocks || comparison.mode_blocks.length === 0) { + return ''; + } + const planName = comparison.plan ? comparison.plan.toUpperCase() : 'JINÝ PLÁN'; + return ` +
+
+ 🔀 + Alternativní plán (${planName}) +
+
+ ${this.renderModeBlocks(comparison.mode_blocks, { showCosts: true, showAdherence: false })} +
+
+ `; + } + + /** + * Render mode distribution chart (FÁZE 3) + */ + renderModeDistributionBE(distribution) { + if (!distribution || Object.keys(distribution).length === 0) { + return '

Žádná distribuce

'; + } + + const total = Object.values(distribution).reduce((a, b) => a + b, 0); + const modeIcons = { + 'HOME I': '🏠', + 'HOME II': '⚡', + 'HOME III': '🔋', + 'HOME UPS': '⚡' + }; + + const bars = Object.entries(distribution) + .sort((a, b) => b[1] - a[1]) + .map(([mode, count]) => { + const pct = total > 0 ? (count / total * 100) : 0; + const icon = modeIcons[mode] || '🎯'; + + return ` +
+ ${icon} ${mode} +
+
+ ${count} intervalů (${pct.toFixed(0)}%) +
+
+ `; + }).join(''); + + return `
${bars}
`; + } + + /** + * Render tomorrow's intervals grouped by mode + */ + renderTomorrowIntervals(intervals) { + if (!intervals || intervals.length === 0) { + return '

Žádné intervaly k dispozici

'; + } + + // Group by mode + const groups = this.groupIntervalsByMode(intervals); + + return groups.map(group => { + const totalCost = group.intervals.reduce((sum, iv) => sum + (iv.planned?.net_cost || 0), 0); + const timeRange = `${group.intervals[0].time_start} - ${group.intervals[group.intervals.length - 1].time_end}`; + + return ` +
+
+ ${group.mode} + ${timeRange} + ${group.intervals.length} bloků + ${totalCost.toFixed(2)} Kč +
+
+ `; + }).join(''); + } + + /** + * Render HISTORIE tab - Multi-day historical comparison + */ + renderHistoryTab(data) { + // For now, placeholder + return ` +
+
📈
+

+ Historie posledních 7 dní +

+

+ Graf přesnosti plánu a kumulativní dopady
+ (v přípravě) +

+
+ `; + } + + /** + * Render 48h compare tab (včera + dnes) + */ + renderCompareTab(yesterdayData, todayData) { + const yesterdayCount = Array.isArray(yesterdayData?.intervals) + ? yesterdayData.intervals.length + : 0; + const todayCount = Array.isArray(todayData?.intervals) + ? todayData.intervals.length + : 0; + const totalCount = yesterdayCount + todayCount; + + return ` +
+
+
+
📊 Srovnání 48h (včera + dnes)
+
15min intervaly • ${totalCount} bodů
+
+
+ Skutečnost + Plán +
+
+ +
+
+
🏠 Spotřeba & ☀️ Solár
+ +
+
+
🔋 SoC (%)
+ +
+
+
💰 Náklady (Kč / 15 min)
+ +
+
+
+ `; + } + + async getBatteryCapacityKwh() { + try { + const sensorId = getSensorId('installed_battery_capacity_kwh'); + const sensor = await getSensor(sensorId); + const value = Number(sensor?.value); + if (!Number.isFinite(value) || value <= 0) { + return null; + } + return value / 1000; + } catch (err) { + return null; + } + } + + buildCompareSeries(yesterdayData, todayData, capacityKwh) { + const yesterdayIntervals = Array.isArray(yesterdayData?.intervals) + ? yesterdayData.intervals + : []; + const todayIntervals = Array.isArray(todayData?.intervals) + ? todayData.intervals + : []; + const intervals = [...yesterdayIntervals, ...todayIntervals]; + const boundaryIndex = yesterdayIntervals.length; + + const labels = []; + const times = []; + const consumptionActual = []; + const consumptionPlanned = []; + const solarActual = []; + const solarPlanned = []; + const costActual = []; + const costPlanned = []; + const socActual = []; + const socPlanned = []; + + const toNumber = (value) => { + if (value === null || value === undefined) { + return null; + } + const num = Number(value); + return Number.isFinite(num) ? num : null; + }; + + const totalIntervals = intervals.length; + const labelStride = totalIntervals > 160 ? 12 : totalIntervals > 120 ? 8 : 4; + + intervals.forEach((interval, idx) => { + const time = new Date(interval.time); + times.push(time); + + let label = ''; + if (idx % labelStride === 0) { + const hh = time.getHours().toString().padStart(2, '0'); + const mm = time.getMinutes().toString().padStart(2, '0'); + label = `${hh}:${mm}`; + if (hh === '00' && mm === '00') { + const dd = time.getDate().toString().padStart(2, '0'); + const mo = (time.getMonth() + 1).toString().padStart(2, '0'); + label = `${dd}.${mo} ${label}`; + } + } + labels.push(label); + + const planned = interval.planned || {}; + const actual = interval.actual || {}; + + consumptionActual.push(toNumber(actual.consumption_kwh)); + consumptionPlanned.push(toNumber(planned.consumption_kwh)); + solarActual.push(toNumber(actual.solar_kwh)); + solarPlanned.push(toNumber(planned.solar_kwh)); + costActual.push(toNumber(actual.net_cost)); + costPlanned.push(toNumber(planned.net_cost)); + + const actualSoc = toNumber(actual.battery_soc); + socActual.push(actualSoc); + + let plannedSoc = toNumber(planned.battery_soc); + if (plannedSoc === null) { + const plannedKwh = toNumber(planned.battery_kwh); + if (plannedKwh !== null && capacityKwh) { + plannedSoc = (plannedKwh / capacityKwh) * 100; + } + } + socPlanned.push(plannedSoc); + }); + + let nowIndex = -1; + const now = new Date(); + times.forEach((time, idx) => { + if (time <= now) { + nowIndex = idx; + } + }); + + return { + labels, + times, + boundaryIndex, + nowIndex, + consumptionActual, + consumptionPlanned, + solarActual, + solarPlanned, + costActual, + costPlanned, + socActual, + socPlanned + }; + } + + buildCompareAnnotations(series) { + const annotations = {}; + + if (series.boundaryIndex > 0 && series.boundaryIndex < series.labels.length) { + annotations.daySplit = { + type: 'line', + xMin: series.boundaryIndex, + xMax: series.boundaryIndex, + borderColor: 'rgba(255, 255, 255, 0.25)', + borderWidth: 2, + label: { + display: true, + content: 'DNES', + position: 'start', + backgroundColor: 'rgba(255, 255, 255, 0.15)', + color: 'rgba(255, 255, 255, 0.8)', + font: { size: 10, weight: '600' } + } + }; + } + + if (series.nowIndex >= 0) { + annotations.nowLine = { + type: 'line', + xMin: series.nowIndex, + xMax: series.nowIndex, + borderColor: 'rgba(255, 152, 0, 0.8)', + borderWidth: 2, + label: { + display: true, + content: 'TEĎ', + position: 'start', + backgroundColor: 'rgba(255, 152, 0, 0.85)', + color: '#fff', + font: { size: 10, weight: '700' } + } + }; + } + + return annotations; + } + + destroyCompareCharts() { + Object.values(this.compareCharts || {}).forEach((chart) => { + if (chart && typeof chart.destroy === 'function') { + chart.destroy(); + } + }); + this.compareCharts = {}; + } + + async initializeCompareCharts(yesterdayData, todayData) { + if (typeof Chart === 'undefined') { + console.warn('[TimelineDialog] Chart.js not available - compare charts skipped'); + return; + } + + const energyCanvas = document.getElementById('compare-energy-chart'); + const socCanvas = document.getElementById('compare-soc-chart'); + const costCanvas = document.getElementById('compare-cost-chart'); + + if (!energyCanvas || !socCanvas || !costCanvas) { + return; + } + + this.destroyCompareCharts(); + + const capacityKwh = await this.getBatteryCapacityKwh(); + const series = this.buildCompareSeries(yesterdayData, todayData, capacityKwh); + const annotations = this.buildCompareAnnotations(series); + + const gridColor = 'rgba(255, 255, 255, 0.08)'; + const tickColor = 'rgba(255, 255, 255, 0.7)'; + const legendColor = 'rgba(255, 255, 255, 0.75)'; + const zoomOptions = { + pan: { + enabled: true, + mode: 'x', + modifierKey: 'shift' + }, + zoom: { + wheel: { + enabled: true, + speed: 0.1 + }, + pinch: { + enabled: true + }, + drag: { + enabled: true, + backgroundColor: 'rgba(33, 150, 243, 0.2)', + borderColor: 'rgba(33, 150, 243, 0.4)', + borderWidth: 1 + }, + mode: 'x' + } + }; + + const tooltipLabel = (unit, decimals = 2) => (context) => { + const value = context.parsed?.y; + if (!Number.isFinite(value)) { + return `${context.dataset.label}: —`; + } + return `${context.dataset.label}: ${value.toFixed(decimals)} ${unit}`; + }; + + this.compareCharts.energy = new Chart(energyCanvas.getContext('2d'), { + type: 'line', + data: { + labels: series.labels, + datasets: [ + { + label: 'Spotřeba – skutečnost', + data: series.consumptionActual, + borderColor: 'rgba(33, 150, 243, 0.9)', + backgroundColor: 'rgba(33, 150, 243, 0.12)', + borderWidth: 2, + tension: 0.25, + pointRadius: 0 + }, + { + label: 'Spotřeba – plán', + data: series.consumptionPlanned, + borderColor: 'rgba(33, 150, 243, 0.5)', + borderDash: [6, 4], + borderWidth: 2, + tension: 0.25, + pointRadius: 0 + }, + { + label: 'Solár – skutečnost', + data: series.solarActual, + borderColor: 'rgba(255, 193, 7, 0.9)', + backgroundColor: 'rgba(255, 193, 7, 0.15)', + borderWidth: 2, + tension: 0.25, + pointRadius: 0 + }, + { + label: 'Solár – plán', + data: series.solarPlanned, + borderColor: 'rgba(255, 193, 7, 0.5)', + borderDash: [6, 4], + borderWidth: 2, + tension: 0.25, + pointRadius: 0 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + interaction: { mode: 'index', intersect: false }, + plugins: { + legend: { + labels: { color: legendColor } + }, + tooltip: { + callbacks: { label: tooltipLabel('kWh', 2) } + }, + zoom: zoomOptions, + annotation: { annotations } + }, + scales: { + x: { + grid: { display: false }, + ticks: { + color: tickColor, + autoSkip: true, + maxTicksLimit: 12, + maxRotation: 0, + minRotation: 0 + } + }, + y: { + grid: { color: gridColor }, + ticks: { + color: tickColor, + callback: (value) => `${value.toFixed(2)} kWh` + }, + title: { display: true, text: 'kWh / 15 min', color: tickColor } + } + } + } + }); + this.scheduleChartResize(this.compareCharts.energy, energyCanvas); + + this.compareCharts.soc = new Chart(socCanvas.getContext('2d'), { + type: 'line', + data: { + labels: series.labels, + datasets: [ + { + label: 'SoC – skutečnost', + data: series.socActual, + borderColor: 'rgba(76, 175, 80, 0.9)', + backgroundColor: 'rgba(76, 175, 80, 0.12)', + borderWidth: 2, + tension: 0.2, + pointRadius: 0 + }, + { + label: 'SoC – plán', + data: series.socPlanned, + borderColor: 'rgba(76, 175, 80, 0.5)', + borderDash: [6, 4], + borderWidth: 2, + tension: 0.2, + pointRadius: 0 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + interaction: { mode: 'index', intersect: false }, + plugins: { + legend: { + labels: { color: legendColor } + }, + tooltip: { + callbacks: { label: tooltipLabel('%', 1) } + }, + zoom: zoomOptions, + annotation: { annotations } + }, + scales: { + x: { + grid: { display: false }, + ticks: { + color: tickColor, + autoSkip: true, + maxTicksLimit: 12, + maxRotation: 0, + minRotation: 0 + } + }, + y: { + grid: { color: gridColor }, + ticks: { + color: tickColor, + callback: (value) => `${value.toFixed(0)}%` + }, + min: 0, + max: 100 + } + } + } + }); + this.scheduleChartResize(this.compareCharts.soc, socCanvas); + + this.compareCharts.cost = new Chart(costCanvas.getContext('2d'), { + data: { + labels: series.labels, + datasets: [ + { + type: 'bar', + label: 'Náklady – skutečnost', + data: series.costActual, + backgroundColor: 'rgba(255, 152, 0, 0.45)', + borderColor: 'rgba(255, 152, 0, 0.75)', + borderWidth: 1 + }, + { + type: 'line', + label: 'Náklady – plán', + data: series.costPlanned, + borderColor: 'rgba(255, 152, 0, 0.9)', + borderDash: [6, 4], + borderWidth: 2, + tension: 0.25, + pointRadius: 0 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + interaction: { mode: 'index', intersect: false }, + plugins: { + legend: { + labels: { color: legendColor } + }, + tooltip: { + callbacks: { label: tooltipLabel('Kč', 2) } + }, + zoom: zoomOptions, + annotation: { annotations } + }, + scales: { + x: { + stacked: false, + grid: { display: false }, + ticks: { + color: tickColor, + autoSkip: true, + maxTicksLimit: 12, + maxRotation: 0, + minRotation: 0 + } + }, + y: { + grid: { color: gridColor }, + ticks: { + color: tickColor, + callback: (value) => `${value.toFixed(2)} Kč` + } + } + } + } + }); + this.scheduleChartResize(this.compareCharts.cost, costCanvas); + } + + /** + * Render header with overall stats + */ + renderHeader(summary, dayType) { + const plannedCost = summary?.planned_total_cost || 0; + const actualCost = summary?.actual_total_cost || 0; + const deltaCost = actualCost - plannedCost; + const deltaPercent = plannedCost > 0 ? ((deltaCost / plannedCost) * 100) : 0; + + const deltaClass = deltaCost > 0 ? 'negative' : 'positive'; + const deltaIcon = deltaCost > 0 ? '❌' : '✅'; + + // Calculate mode adherence from intervals (need to pass it separately) + const modeAdherence = summary?.mode_adherence_pct || 0; + const modeMatches = summary?.mode_matches || 0; + const totalIntervals = summary?.total_intervals || 96; + + // Find biggest variance + const biggestVariance = summary?.biggest_variance || null; + + return ` +
+

📊 Včera - Plán vs Skutečnost

+ +
+
+
💰 Plán
+
${plannedCost.toFixed(2)} Kč
+
+ +
+
💸 Skutečnost
+
${actualCost.toFixed(2)} Kč
+
+ +
+
📊 Výsledek
+
+ ${deltaCost > 0 ? '+' : ''}${deltaCost.toFixed(2)} Kč
+ ${deltaIcon} ${Math.abs(deltaPercent).toFixed(1)}% ${deltaCost > 0 ? 'horší' : 'lepší'} +
+
+
+ + +
+ `; + } + + /** + * Render top 3 variances ranking + */ + renderTopVariances(variances) { + if (variances.length === 0) { + return '

Žádné významné odchylky

'; + } + + const medals = ['🥇', '🥈', '🥉']; + + const html = variances.map((v, idx) => { + // Safety check for null values + const delta = v.delta ?? 0; + const planned = v.planned ?? 0; + + const deltaClass = delta > 0 ? 'negative' : 'positive'; + const arrow = delta > 0 ? '⬆️' : '⬇️'; + const percent = planned > 0 ? Math.abs((delta / planned) * 100) : 0; + + return ` +
+
${medals[idx] || `#${idx + 1}`}
+
+
${v.time || '--'}
+
${v.plannedMode || '?'} → ${v.actualMode || '?'}
+
+ ${delta > 0 ? '+' : ''}${delta.toFixed(2)} Kč ${arrow} ${percent.toFixed(0)}% ${delta > 0 ? 'horší' : 'lepší'} +
+
${v.reason || 'Žádný důvod'}
+
+
+ `; + }).join(''); + + return ` +
+

⚠️ Top 3 největší odchylky

+ ${html} +
+ `; + } + + /** + * Render variance chart for VČERA + */ + renderVarianceChart(intervals, dayType) { + // Return placeholder div, actual chart will be rendered via Chart.js after DOM insert + return ` +
+

📊 Variance Analysis - Plán vs Skutečnost

+ +
+ `; + } + + /** + * Render live header for DNES tab (v2.1 compact format) + */ + renderLiveHeader(progress, eodPrediction, unifiedCostData) { + const now = new Date(); + const timeStr = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + const today = unifiedCostData || {}; + const eod = today.eod_prediction || {}; + const completed = today.completed_so_far || {}; + + const progressPercent = today.progress_pct || progress.percent || 0; + const eodPredicted = eod.predicted_total || eodPrediction.predicted || 0; + // FIX: Use today.plan_total_cost FIRST (contains full day plan), not eod.planned_total + const eodPlanned = today.plan_total_cost || eod.planned_total || eodPrediction.planned || 0; + const eodSavingsPredicted = eod.predicted_savings || 0; + + const completedCost = completed.actual_cost || progress.actualCost || 0; + const completedPlanned = completed.planned_cost || progress.plannedCost || 0; + + const eodDelta = eodPredicted - eodPlanned; + const eodDeltaPct = eodPlanned > 0 ? ((eodDelta / eodPlanned) * 100) : 0; + const eodDeltaClass = eodDelta < -0.5 ? 'positive' : eodDelta > 0.5 ? 'negative' : 'neutral'; + const eodDeltaIcon = eodDelta < -0.5 ? '✅' : eodDelta > 0.5 ? '❌' : '⚪'; + + const completedDelta = completedCost - completedPlanned; + const completedDeltaPct = completed.delta_pct || (completedPlanned > 0 ? ((completedDelta / completedPlanned) * 100) : 0); + const completedDeltaClass = completedDelta < -0.5 ? 'positive' : completedDelta > 0.5 ? 'negative' : 'neutral'; + + return ` +
+
+
+
+
${progressPercent.toFixed(0)}% dne • ${timeStr}
+
+
+ +
+
+
💰
+
+
Odhad nákladů na konec dne
+
${eodPredicted.toFixed(2)} Kč
+
plán: ${eodPlanned.toFixed(2)} Kč • ${eodDeltaIcon} ${eodDeltaPct > 0 ? '+' : ''}${eodDeltaPct.toFixed(1)}%
+
+
+ +
+
📊
+
+
Dosud skutečně
+
${completedCost.toFixed(2)} Kč
+
plán: ${completedPlanned.toFixed(2)} Kč • ${completedDeltaPct > 0 ? '+' : ''}${completedDeltaPct.toFixed(1)}%
+
+
+ +
+
💎
+
+
Předpokládaná úspora
+
${eodSavingsPredicted.toFixed(2)} Kč
+
vs. HOME I režim
+
+
+
+
+ `; + } + /** + * Render timeline chart for DNES tab + */ + renderTimelineChart(intervals, dayType) { + return ` +
+

📊 Timeline - Plán vs Skutečnost

+ +
+ `; + } + + /** + * Calculate statistics from intervals + */ + calculateStats(intervals) { + let plannedCost = 0; + let actualCost = 0; + let modeMatches = 0; + let totalIntervals = 0; + + intervals.forEach(interval => { + if (interval.planned) { + plannedCost += interval.planned.net_cost || 0; + } + + if (interval.actual) { + actualCost += interval.actual.net_cost || 0; + totalIntervals++; + + if (interval.planned && interval.actual.mode_name === interval.planned.mode_name) { + modeMatches++; + } + } + }); + + return { + plannedCost, + actualCost, + deltaCost: actualCost - plannedCost, + modeMatches, + totalIntervals, + adherence: totalIntervals > 0 ? (modeMatches / totalIntervals) * 100 : 0 + }; + } + + /** + * Get top N variances sorted by absolute delta + */ + getTopVariances(intervals, count = 3) { + const variances = []; + + intervals.forEach(interval => { + if (!interval.actual || !interval.planned) return; + + const delta = (interval.actual.net_cost || 0) - (interval.planned.net_cost || 0); + + // Only include significant variances (>0.5 Kč) + if (Math.abs(delta) < 0.5) return; + + const time = new Date(interval.time); + const timeStr = `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`; + + variances.push({ + time: timeStr, + delta: delta, + planned: interval.planned.net_cost || 0, + actual: interval.actual.net_cost || 0, + plannedMode: interval.planned.mode_name || '?', + actualMode: interval.actual.mode_name || '?', + reason: this.getVarianceReason(interval) + }); + }); + + // Sort by absolute delta (biggest first) + variances.sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta)); + + return variances.slice(0, count); + } + + /** + * Determine reason for variance + */ + getVarianceReason(interval) { + const planned = interval.planned; + const actual = interval.actual; + + if (!planned || !actual) return 'Neznámý důvod'; + + // Check mode mismatch + if (planned.mode_name !== actual.mode_name) { + return `Režim se nezměnil na ${planned.mode_name}`; + } + + // Check consumption variance + const consumptionDelta = (actual.consumption_kwh || 0) - (planned.consumption_kwh || 0); + if (Math.abs(consumptionDelta) > 0.1) { + return consumptionDelta > 0 ? 'Vyšší spotřeba než plánováno' : 'Nižší spotřeba než plánováno'; + } + + // Check price variance + const priceDelta = (actual.spot_price || 0) - (planned.spot_price || 0); + if (Math.abs(priceDelta) > 0.1) { + return priceDelta > 0 ? 'Vyšší cena než plánováno' : 'Nižší cena než plánováno'; + } + + return 'Odchylka způsobena kombinací faktorů'; + } + + /** + * Calculate current progress (for DNES tab) + */ + calculateProgress(intervals) { + const now = new Date(); + const historical = intervals.filter(i => i.status === 'historical' || i.status === 'current'); + + console.log(`[TimelineDialog] calculateProgress - total intervals: ${intervals.length}, historical: ${historical.length}`); + + if (historical.length > 0) { + console.log('[TimelineDialog] Sample historical interval:', historical[0]); + console.log('[TimelineDialog] Sample planned object:', historical[0].planned); + console.log('[TimelineDialog] Sample actual object:', historical[0].actual); + console.log('[TimelineDialog] Sample delta object:', historical[0].delta); + } + + let plannedCost = 0; + let actualCost = 0; + let modeMatches = 0; + + historical.forEach((interval, idx) => { + const pCost = interval.planned?.net_cost || 0; + const aCost = interval.actual?.net_cost || 0; + + if (idx === 0) { + console.log(`[TimelineDialog] First interval - planned.net_cost: ${interval.planned?.net_cost}, actual.net_cost: ${interval.actual?.net_cost}`); + } + + plannedCost += pCost; + actualCost += aCost; + + // Count mode matches + if (interval.actual && interval.planned) { + const plannedMode = interval.planned.mode_name || ''; + const actualMode = interval.actual.mode_name || ''; + if (plannedMode === actualMode) { + modeMatches++; + } + } + }); + + console.log(`[TimelineDialog] Progress - planned: ${plannedCost.toFixed(2)}, actual: ${actualCost.toFixed(2)}`); + + // Calculate % of day elapsed (96 intervals = 24 hours) + const percent = (historical.length / 96) * 100; + const modeAdherence = historical.length > 0 ? (modeMatches / historical.length) * 100 : 0; + + return { + plannedCost, + actualCost, + percent, + intervalsCompleted: historical.length, + modeMatches, + modeAdherence + }; + } + + /** + * Calculate EOD prediction (for DNES tab) + */ + calculateEODPrediction(intervals) { + const historical = intervals.filter(i => i.status === 'historical' || i.status === 'current'); + const planned = intervals.filter(i => i.status === 'planned'); + + // Historical costs + let historicalPlanned = 0; + let historicalActual = 0; + + historical.forEach(interval => { + historicalPlanned += interval.planned?.net_cost || 0; + historicalActual += interval.actual?.net_cost || 0; + }); + + // Future planned costs + let futurePlanned = 0; + planned.forEach(interval => { + futurePlanned += interval.planned?.net_cost || 0; + }); + + // Total planned + const totalPlanned = historicalPlanned + futurePlanned; + + // Calculate drift ratio + const driftRatio = historicalPlanned > 0 ? (historicalActual / historicalPlanned) : 1.0; + + // Predict EOD = actual so far + (future planned * drift ratio) + const predicted = historicalActual + (futurePlanned * driftRatio); + + return { + planned: totalPlanned, + predicted: predicted + }; + } + + /** + * Start update interval (refresh every 60s) + */ + startUpdateInterval() { + this.stopUpdateInterval(); // Clear existing + + this.updateInterval = setInterval(() => { + console.log('[TimelineDialog] Auto-refresh...'); + + // Reload ALL tabs data in one call (force refresh) + this.loadAllTabsData(true, this.plan).then(() => { + // Re-render active tab with fresh data + this.renderTab(this.activeTab); + }); + }, 60000); // 60 seconds + } + + /** + * Stop update interval + */ + stopUpdateInterval() { + if (this.updateInterval) { + clearInterval(this.updateInterval); + this.updateInterval = null; + } + } + + /** + * Initialize Chart.js for VČERA tab - Variance Chart + */ + initializeYesterdayCharts(intervals, dayType) { + const canvasId = `variance-chart-${dayType}`; + const canvas = document.getElementById(canvasId); + + if (!canvas) { + console.warn(`[TimelineDialog] Canvas ${canvasId} not found`); + return; + } + + console.log(`[TimelineDialog] Initializing variance chart for ${dayType}`); + + // Prepare data + const labels = []; + const deltaData = []; + const colors = []; + + intervals.forEach((interval, idx) => { + const intervalTime = new Date(interval.time); + const timeStr = `${intervalTime.getHours().toString().padStart(2, '0')}:${intervalTime.getMinutes().toString().padStart(2, '0')}`; + + // Show every 4th label (1 hour) + labels.push(idx % 4 === 0 ? timeStr : ''); + + // Calculate delta + const delta = interval.actual && interval.planned + ? (interval.actual.net_cost || 0) - (interval.planned.net_cost || 0) + : 0; + + deltaData.push(delta); + + // Color coding + let color = 'rgba(150, 150, 150, 0.5)'; + if (delta < -0.05) { + color = 'rgba(76, 175, 80, 0.8)'; // Green - better + } else if (delta > 0.05) { + color = 'rgba(244, 67, 54, 0.8)'; // Red - worse + } else if (interval.actual) { + color = 'rgba(33, 150, 243, 0.8)'; // Blue - neutral + } + colors.push(color); + }); + + // Create chart + const ctx = canvas.getContext('2d'); + if (this._costDeltaChart) { + this._costDeltaChart.destroy(); + } + this._costDeltaChart = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: [{ + label: 'Odchylka od plánu (Kč)', + data: deltaData, + backgroundColor: colors, + borderColor: colors.map(c => c.replace('0.8', '1').replace('0.5', '0.8')), + borderWidth: 1 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false + }, + tooltip: { + enabled: true, + backgroundColor: 'rgba(30, 40, 50, 0.95)', + titleColor: 'rgba(255, 255, 255, 0.95)', + bodyColor: 'rgba(255, 255, 255, 0.8)', + borderColor: 'rgba(255, 255, 255, 0.2)', + borderWidth: 1, + callbacks: { + title: (context) => { + const idx = context[0].dataIndex; + const interval = intervals[idx]; + const time = new Date(interval.time); + const endTime = new Date(time.getTime() + 15 * 60000); + return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')} - ${endTime.getHours().toString().padStart(2, '0')}:${endTime.getMinutes().toString().padStart(2, '0')}`; + }, + label: (context) => { + const idx = context.dataIndex; + const interval = intervals[idx]; + const delta = context.parsed.y; + + if (!interval.actual) { + return 'Plánováno (ještě nenastalo)'; + } + + return [ + `Odchylka: ${delta >= 0 ? '+' : ''}${delta.toFixed(2)} Kč`, + `Plán: ${(interval.planned?.net_cost || 0).toFixed(2)} Kč`, + `Skutečnost: ${(interval.actual?.net_cost || 0).toFixed(2)} Kč`, + `Režim: ${interval.actual?.mode_name || interval.planned?.mode_name || '?'}` + ]; + } + } + } + }, + scales: { + x: { + grid: { + display: false + }, + ticks: { + color: 'rgba(255, 255, 255, 0.7)', + maxRotation: 0, + autoSkip: false + } + }, + y: { + grid: { + color: 'rgba(255, 255, 255, 0.1)' + }, + ticks: { + color: 'rgba(255, 255, 255, 0.7)', + callback: function(value) { + return value.toFixed(1) + ' Kč'; + } + }, + title: { + display: true, + text: 'Odchylka od plánu', + color: 'rgba(255, 255, 255, 0.9)' + } + } + } + } + }); + } + + /** + * Initialize Chart.js for DNES tab - Timeline Chart with NOW marker + */ + initializeTodayCharts(intervals, dayType) { + const canvasId = `timeline-chart-${dayType}`; + const canvas = document.getElementById(canvasId); + + if (!canvas) { + console.warn(`[TimelineDialog] Canvas ${canvasId} not found`); + return; + } + + console.log(`[TimelineDialog] Initializing timeline chart for ${dayType}`); + + const now = new Date(); + const labels = []; + const deltaData = []; + const colors = []; + let nowIndex = -1; + const modeSegments = this.buildModeSegmentsForChart(intervals); + const timelineModeIconsOptions = modeSegments.length ? { + segments: modeSegments, + iconSize: 18, + labelSize: 10, + iconOffset: 10, + iconColor: 'rgba(255, 255, 255, 0.95)', + labelColor: 'rgba(255, 255, 255, 0.7)', + backgroundOpacity: 0.14 + } : null; + + if (timelineModeIconsOptions) { + ensureTimelineModeIconPluginRegistered(); + } + + intervals.forEach((interval, idx) => { + const intervalTime = new Date(interval.time); + const timeStr = `${intervalTime.getHours().toString().padStart(2, '0')}:${intervalTime.getMinutes().toString().padStart(2, '0')}`; + + labels.push(idx % 4 === 0 ? timeStr : ''); + + const isHistorical = interval.status === 'historical' || interval.status === 'current'; + + if (isHistorical && interval.actual && interval.planned) { + const delta = (interval.actual.net_cost || 0) - (interval.planned.net_cost || 0); + deltaData.push(delta); + + // Color: green/red/blue for historical + if (delta < -0.05) { + colors.push('rgba(76, 175, 80, 0.8)'); + } else if (delta > 0.05) { + colors.push('rgba(244, 67, 54, 0.8)'); + } else { + colors.push('rgba(33, 150, 243, 0.8)'); + } + } else { + // Future: show as 0 with gray + deltaData.push(0); + colors.push('rgba(150, 150, 150, 0.3)'); + } + + // Find NOW marker + if (intervalTime <= now) { + nowIndex = idx; + } + }); + + // Build annotations object for NOW marker + const annotations = {}; + if (nowIndex >= 0) { + annotations.nowLine = { + type: 'line', + xMin: nowIndex, + xMax: nowIndex, + borderColor: 'rgba(255, 152, 0, 0.8)', + borderWidth: 3, + label: { + display: true, + content: 'TEĎKA', + position: 'start', + backgroundColor: 'rgba(255, 152, 0, 0.9)', + color: '#fff', + font: { + size: 11, + weight: 'bold' + } + } + }; + } + + // Create chart with NOW marker annotation + if (this.timelineCharts[dayType]) { + try { + this.timelineCharts[dayType].destroy(); + } catch (err) { + // Ignore destroy errors + } + this.timelineCharts[dayType] = null; + } + + const ctx = canvas.getContext('2d'); + const chart = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: [{ + label: 'Odchylka od plánu (Kč)', + data: deltaData, + backgroundColor: colors, + borderColor: colors.map(c => c.replace('0.8', '1').replace('0.3', '0.5')), + borderWidth: 1 + }] + }, + options: { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false + }, + tooltip: { + enabled: true, + callbacks: { + title: (context) => { + const idx = context[0].dataIndex; + const interval = intervals[idx]; + const time = new Date(interval.time); + const endTime = new Date(time.getTime() + 15 * 60000); + return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')} - ${endTime.getHours().toString().padStart(2, '0')}:${endTime.getMinutes().toString().padStart(2, '0')}`; + }, + label: (context) => { + const idx = context.dataIndex; + const interval = intervals[idx]; + const isHistorical = interval.status === 'historical' || interval.status === 'current'; + + if (!isHistorical || !interval.actual) { + return 'Plánováno (ještě nenastalo)'; + } + + const delta = context.parsed.y; + return [ + `Odchylka: ${delta >= 0 ? '+' : ''}${delta.toFixed(2)} Kč`, + `Plán: ${(interval.planned?.net_cost || 0).toFixed(2)} Kč`, + `Skutečnost: ${(interval.actual?.net_cost || 0).toFixed(2)} Kč`, + `Režim: ${interval.actual?.mode_name || interval.planned?.mode_name || '?'}` + ]; + } + } + }, + annotation: { + annotations: annotations + }, + ...(timelineModeIconsOptions ? { timelineModeIcons: timelineModeIconsOptions } : {}) + }, + layout: { + padding: { + top: 12, + bottom: timelineModeIconsOptions + ? timelineModeIconsOptions.iconOffset + timelineModeIconsOptions.iconSize + timelineModeIconsOptions.labelSize + 6 + : 12 + } + }, + scales: { + x: { + grid: { + display: false + }, + ticks: { + color: 'var(--text-secondary)', + maxRotation: 0, + autoSkip: false + } + }, + y: { + grid: { + color: 'rgba(255, 255, 255, 0.1)' + }, + ticks: { + color: 'var(--text-secondary)', + callback: function(value) { + return value.toFixed(1) + ' Kč'; + } + }, + title: { + display: true, + text: 'Odchylka od plánu', + color: 'var(--text-secondary)' + } + } + } + } + }); + + this.timelineCharts[dayType] = chart; + this.scheduleChartResize(chart, canvas); + } + + /** + * Destroy dialog instance + */ + destroy() { + this.close(); + this.dialogElement = null; + this.cache = { + hybrid: this.createEmptyCache() + }; + this.plan = 'hybrid'; + } +} + +// Global instance +var timelineDialogInstance = null; + +// Initialize on page load +function initTimelineDialog() { + timelineDialogInstance = new TimelineDialog(); + timelineDialogInstance.init(); +} + +// Open dialog (called from Today Plan Tile) +function openModeTimelineDialog(tabName = null, plan = null) { + if (!timelineDialogInstance) { + initTimelineDialog(); + } + timelineDialogInstance.open(tabName, plan); +} + +// Alias for openModeTimelineDialog (used by Unified Cost Tile onclick) +function openTimelineDialog(tabName = null, plan = null) { + if (!timelineDialogInstance) { + initTimelineDialog(); + } + if (tabName) { + timelineDialogInstance.open(tabName, plan); + } else { + timelineDialogInstance.open(null, plan); + } +} + +// Close dialog +function closeModeTimelineDialog() { + if (timelineDialogInstance) { + timelineDialogInstance.close(); + } +} + +// ============================================================================= +// END TIMELINE DIALOG +// ============================================================================= + +// Global instance for Today Plan Tile +var todayPlanTileInstance = null; + +// ============================================================================= + + +/** + * Build extended timeline with historical data - ONLY TODAY's plan vs actual + * Shows clear comparison for completed intervals + */ +async function buildExtendedTimeline() { + const apiUrl = `/api/oig_cloud/battery_forecast/${INVERTER_SN}/detail_tabs?tab=today`; + + try { + const response = await fetchWithAuth(apiUrl); + if (!response.ok) { + console.error('[Extended Timeline] Failed to fetch data:', response.status); + return; + } + + const data = await response.json(); + // API returns data in data.today object + const todayData = data.today || data; + const todayTileSummary = todayData.summary; + const modeBlocks = todayData.mode_blocks; + + if (!modeBlocks || modeBlocks.length === 0) { + console.warn('[Extended Timeline] No today data available'); + return; + } + + console.log('[Extended Timeline] Loaded TODAY data:', { + mode_blocks: modeBlocks.length, + summary: todayTileSummary ? 'present' : 'missing' + }); + + // NOTE: renderTodayComparison() removed - replaced by Today Plan Tile + // Old timeline comparison view is deprecated + + // Update Today Plan Tile (event-driven refresh) + if (todayTileSummary) { + renderTodayPlanTile(todayTileSummary); + } + + // Update Cost Comparison Tile (event-driven refresh) + if (typeof loadCostComparisonTile === 'function') { + loadCostComparisonTile().catch((error) => { + console.error('[TimelineDialog] Failed to load cost comparison tile', error); + }); + } + + } catch (error) { + console.error('[Extended Timeline] Error fetching data:', error); + } +} + +/** + * Render Today Plan Tile - live tracking of today's plan vs actual with EOD prediction + * Event-driven refresh triggered by buildExtendedTimeline() + */ + +// Export timeline functions +window.DashboardTimeline = { + MODE_CONFIG, + TimelineDialog, + initTimelineDialog, + openModeTimelineDialog, + openTimelineDialog, + closeModeTimelineDialog, + init: function() { + console.log('[DashboardTimeline] Initialized'); + initTimelineDialog(); + } +}; + +// Export timelineDialogInstance to window for access from other modules +if (!window.hasOwnProperty('timelineDialogInstance')) { + Object.defineProperty(window, 'timelineDialogInstance', { + get: function() { return timelineDialogInstance; }, + set: function(value) { timelineDialogInstance = value; }, + configurable: true + }); +} + +console.log('[DashboardTimeline] Module loaded'); diff --git a/custom_components/oig_cloud/www/js/layout/layout-manager.js b/custom_components/oig_cloud/www/js/layout/layout-manager.js new file mode 100644 index 00000000..08e67b61 --- /dev/null +++ b/custom_components/oig_cloud/www/js/layout/layout-manager.js @@ -0,0 +1,466 @@ +/* eslint-disable */ +/** + * OIG Cloud Dashboard - Layout Customization System + * + * Drag & drop system pro přizpůsobení pozic energy flow nodes. + * Podporuje responsive breakpoints (mobile/tablet/desktop). + * Extrahováno z monolitického dashboard-core.js + * + * @module dashboard-layout + * @version 1.0.0 + * @date 2025-11-02 + */ + +// ============================================================================ +// STATE +// ============================================================================ + +var editMode = false; +var currentBreakpoint = null; +var draggedNode = null; +var dragStartX = 0; +var dragStartY = 0; +var dragStartTop = 0; +var dragStartLeft = 0; +var resizeTimer = null; +var lastResizeWidth = null; +var lastResizeHeight = null; + +// Callbacks pro redraw (registruje core) +var onLayoutChangeCallback = null; + +// ============================================================================ +// BREAKPOINT DETECTION +// ============================================================================ + +/** + * Detekce současného breakpointu + * @returns {string} 'mobile' | 'tablet' | 'desktop' + */ +function getCurrentBreakpoint() { + const width = window.innerWidth; + if (width <= 768) return 'mobile'; + if (width <= 1024) return 'tablet'; + return 'desktop'; +} + +// ============================================================================ +// LAYOUT PERSISTENCE +// ============================================================================ + +/** + * Uloží layout pro breakpoint do localStorage + * @param {string} breakpoint - Breakpoint name + * @param {object} positions - Node positions + */ +function saveLayout(breakpoint, positions) { + const key = `oig-layout-${breakpoint}`; + localStorage.setItem(key, JSON.stringify(positions)); + console.log(`[Layout] Saved ${breakpoint}:`, positions); +} + +/** + * Načte layout pro breakpoint z localStorage + * @param {string} breakpoint - Breakpoint name + * @returns {boolean} True pokud byl layout načten + */ +function loadLayout(breakpoint) { + const key = `oig-layout-${breakpoint}`; + const saved = localStorage.getItem(key); + + if (saved) { + try { + const positions = JSON.parse(saved); + console.log(`[Layout] Loading ${breakpoint}:`, positions); + applyCustomPositions(positions); + return true; + } catch (e) { + console.error(`[Layout] Parse error for ${breakpoint}:`, e); + return false; + } + } + return false; +} + +/** + * Aplikuje custom pozice na nodes + * @param {object} positions - Node positions + */ +function applyCustomPositions(positions) { + const nodes = ['solar', 'grid-node', 'battery', 'house', 'inverter']; + + nodes.forEach(nodeClass => { + const node = document.querySelector(`.${nodeClass}`); + if (!node || !positions[nodeClass]) return; + + const pos = positions[nodeClass]; + if (pos.top !== undefined) node.style.top = pos.top; + if (pos.left !== undefined) node.style.left = pos.left; + if (pos.right !== undefined) node.style.right = pos.right; + if (pos.bottom !== undefined) node.style.bottom = pos.bottom; + if (pos.transform !== undefined) node.style.transform = pos.transform; + }); + + // Notify callback + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } +} + +/** + * Reset layoutu pro breakpoint + * @param {string} breakpoint - Breakpoint name + */ +function resetLayout(breakpoint) { + const key = `oig-layout-${breakpoint}`; + localStorage.removeItem(key); + console.log(`[Layout] Reset ${breakpoint}`); + + // Odstranit inline styles + const nodes = document.querySelectorAll('.solar, .grid-node, .battery, .house, .inverter'); + nodes.forEach(node => { + node.style.top = ''; + node.style.left = ''; + node.style.right = ''; + node.style.bottom = ''; + node.style.transform = ''; + }); + + // Notify callback + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } +} + +// ============================================================================ +// EDIT MODE +// ============================================================================ + +/** + * Toggle edit mode (drag & drop) + * @returns {boolean} Nový stav edit mode + */ +function toggleEditMode() { + editMode = !editMode; + const canvas = document.querySelector('.flow-canvas'); + const btn = document.getElementById('edit-layout-btn'); + + if (editMode) { + canvas?.classList.add('edit-mode'); + btn?.classList.add('active'); + console.log('[Layout] Edit mode ON'); + initializeDragAndDrop(); + } else { + canvas?.classList.remove('edit-mode'); + btn?.classList.remove('active'); + console.log('[Layout] Edit mode OFF'); + } + + return editMode; +} + +/** + * Vrací současný stav edit mode + * @returns {boolean} Edit mode state + */ +function isEditMode() { + return editMode; +} + +// ============================================================================ +// DRAG & DROP +// ============================================================================ + +/** + * Inicializace drag & drop event listenerů + */ +function initializeDragAndDrop() { + const nodes = document.querySelectorAll('.solar, .grid-node, .battery, .house, .inverter'); + + nodes.forEach(node => { + // Mouse events + node.addEventListener('mousedown', handleDragStart); + // Touch events + node.addEventListener('touchstart', handleTouchStart, { passive: false }); + }); + + // Global handlers (již by měly být registrovány, ale pro jistotu) + document.removeEventListener('mousemove', handleDragMove); + document.removeEventListener('mouseup', handleDragEnd); + document.removeEventListener('touchmove', handleTouchMove); + document.removeEventListener('touchend', handleTouchEnd); + + document.addEventListener('mousemove', handleDragMove); + document.addEventListener('mouseup', handleDragEnd); + document.addEventListener('touchmove', handleTouchMove, { passive: false }); + document.addEventListener('touchend', handleTouchEnd); +} + +// --- MOUSE HANDLERS --- + +function handleDragStart(e) { + if (!editMode) return; + e.preventDefault(); + + draggedNode = e.target.closest('.node'); + if (!draggedNode) return; + + draggedNode.classList.add('dragging'); + + const rect = draggedNode.getBoundingClientRect(); + dragStartX = e.clientX; + dragStartY = e.clientY; + dragStartTop = rect.top; + dragStartLeft = rect.left; + + console.log('[Drag] Start:', draggedNode.className); +} + +function handleDragMove(e) { + if (!draggedNode || !editMode) return; + e.preventDefault(); + + updateNodePosition(e.clientX, e.clientY); + + // Live update + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } +} + +function handleDragEnd(e) { + if (!draggedNode || !editMode) return; + e.preventDefault(); + + draggedNode.classList.remove('dragging'); + saveCurrentLayout(); + + // Final update + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } + + console.log('[Drag] End'); + draggedNode = null; +} + +// --- TOUCH HANDLERS --- + +function handleTouchStart(e) { + if (!editMode) return; + e.preventDefault(); + + draggedNode = e.target.closest('.node'); + if (!draggedNode) return; + + draggedNode.classList.add('dragging'); + + const touch = e.touches[0]; + const rect = draggedNode.getBoundingClientRect(); + + dragStartX = touch.clientX; + dragStartY = touch.clientY; + dragStartTop = rect.top; + dragStartLeft = rect.left; + + console.log('[Touch] Start:', draggedNode.className); +} + +function handleTouchMove(e) { + if (!draggedNode || !editMode) return; + e.preventDefault(); + + const touch = e.touches[0]; + updateNodePosition(touch.clientX, touch.clientY); + + // Live update + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } +} + +function handleTouchEnd(e) { + if (!draggedNode || !editMode) return; + e.preventDefault(); + + draggedNode.classList.remove('dragging'); + saveCurrentLayout(); + + // Final update + if (onLayoutChangeCallback) { + onLayoutChangeCallback(); + } + + console.log('[Touch] End'); + draggedNode = null; +} + +// --- POSITION CALCULATION --- + +function updateNodePosition(clientX, clientY) { + if (!draggedNode) return; + + const canvas = document.querySelector('.flow-canvas'); + if (!canvas) return; + + const canvasRect = canvas.getBoundingClientRect(); + const nodeRect = draggedNode.getBoundingClientRect(); + + const deltaX = clientX - dragStartX; + const deltaY = clientY - dragStartY; + + const newLeft = dragStartLeft + deltaX; + const newTop = dragStartTop + deltaY; + + // Constraints - keep within canvas + const minLeft = canvasRect.left; + const maxLeft = canvasRect.right - nodeRect.width; + const minTop = canvasRect.top; + const maxTop = canvasRect.bottom - nodeRect.height; + + const constrainedLeft = Math.max(minLeft, Math.min(maxLeft, newLeft)); + const constrainedTop = Math.max(minTop, Math.min(maxTop, newTop)); + + // Relativní pozice (%) + const relativeLeft = ((constrainedLeft - canvasRect.left) / canvasRect.width) * 100; + const relativeTop = ((constrainedTop - canvasRect.top) / canvasRect.height) * 100; + + draggedNode.style.left = `${relativeLeft}%`; + draggedNode.style.top = `${relativeTop}%`; + draggedNode.style.right = 'auto'; + draggedNode.style.bottom = 'auto'; + draggedNode.style.transform = 'none'; +} + +// --- LAYOUT SAVE --- + +function saveCurrentLayout() { + const breakpoint = getCurrentBreakpoint(); + const canvas = document.querySelector('.flow-canvas'); + if (!canvas) return; + + const canvasRect = canvas.getBoundingClientRect(); + const positions = {}; + + const nodes = { + 'solar': document.querySelector('.solar'), + 'grid-node': document.querySelector('.grid-node'), + 'battery': document.querySelector('.battery'), + 'house': document.querySelector('.house'), + 'inverter': document.querySelector('.inverter') + }; + + Object.entries(nodes).forEach(([key, node]) => { + if (!node) return; + + const rect = node.getBoundingClientRect(); + const relativeLeft = ((rect.left - canvasRect.left) / canvasRect.width) * 100; + const relativeTop = ((rect.top - canvasRect.top) / canvasRect.height) * 100; + + positions[key] = { + top: `${relativeTop}%`, + left: `${relativeLeft}%`, + right: 'auto', + bottom: 'auto', + transform: 'none' + }; + }); + + saveLayout(breakpoint, positions); +} + +// ============================================================================ +// RESIZE HANDLING +// ============================================================================ + +/** + * Resize handler s debouncing + */ +function handleLayoutResize() { + if (resizeTimer) clearTimeout(resizeTimer); + + resizeTimer = setTimeout(() => { + // Mobile WebViews (incl. HA app) fire frequent resize events when the browser chrome + // shows/hides; ignore height-only micro-resizes to avoid infinite redraw loops. + const w = window.innerWidth; + const h = window.innerHeight; + const widthChanged = lastResizeWidth === null ? true : Math.abs(w - lastResizeWidth) >= 24; + const heightChanged = lastResizeHeight === null ? true : Math.abs(h - lastResizeHeight) >= 180; + lastResizeWidth = w; + lastResizeHeight = h; + + const newBreakpoint = getCurrentBreakpoint(); + const breakpointChanged = newBreakpoint !== currentBreakpoint; + + if (breakpointChanged) { + console.log(`[Layout] Breakpoint: ${currentBreakpoint} → ${newBreakpoint}`); + currentBreakpoint = newBreakpoint; + + const loaded = loadLayout(newBreakpoint); + if (!loaded) { + console.log(`[Layout] No custom ${newBreakpoint} layout`); + } + } + + // Notify only on meaningful resizes (breakpoint change, width change, or major height change e.g. rotation). + if (onLayoutChangeCallback && (breakpointChanged || widthChanged || heightChanged)) { + onLayoutChangeCallback(); + } + }, 300); +} + +// ============================================================================ +// INITIALIZATION +// ============================================================================ + +/** + * Inicializace layout systému + * @param {Function} changeCallback - Callback volaný při změně layoutu + */ +function initLayout(changeCallback) { + onLayoutChangeCallback = changeCallback; + + // Detekce breakpointu + currentBreakpoint = getCurrentBreakpoint(); + console.log(`[Layout] Init - breakpoint: ${currentBreakpoint}`); + + // Načíst uložený layout + loadLayout(currentBreakpoint); + + // Resize listener + window.addEventListener('resize', handleLayoutResize); + + console.log('[Layout] Initialized'); +} + +/** + * Cleanup + */ +function destroyLayout() { + window.removeEventListener('resize', handleLayoutResize); + document.removeEventListener('mousemove', handleDragMove); + document.removeEventListener('mouseup', handleDragEnd); + document.removeEventListener('touchmove', handleTouchMove); + document.removeEventListener('touchend', handleTouchEnd); + + onLayoutChangeCallback = null; + console.log('[Layout] Destroyed'); +} + +// ============================================================================ +// EXPORT DEFAULT (backward compatibility) +// ============================================================================ + +if (typeof window !== 'undefined') { + window.DashboardLayout = { + initLayout, + destroyLayout, + getCurrentBreakpoint, + saveLayout, + loadLayout, + resetLayout, + toggleEditMode, + isEditMode, + handleLayoutResize + }; +} diff --git a/custom_components/oig_cloud/www/modules/boiler-chart.js b/custom_components/oig_cloud/www/modules/boiler-chart.js new file mode 100644 index 00000000..0e4fe4b4 --- /dev/null +++ b/custom_components/oig_cloud/www/modules/boiler-chart.js @@ -0,0 +1,417 @@ +/** + * Boiler Chart Module - Chart.js visualization for water heater planning + * Zobrazuje průběh teploty, SOC, plánované topení a náklady + */ +/* global Chart */ + +export class BoilerChartModule { + constructor() { + this.chart = null; + } + + /** + * Inicializuje boiler chart s multi-axis visualizací + * @param {HTMLCanvasElement} canvasElement - Canvas element pro graf + * @param {Object} hass - Home Assistant instance + * @param {string} inverterId - ID střídače (např. "2206237016") + */ + async init(canvasElement, hass, inverterId) { + if (!canvasElement || !hass || !inverterId) { + console.error('[BoilerChart] Missing required parameters'); + return; + } + + this.canvasElement = canvasElement; + this.hass = hass; + this.inverterId = inverterId; + + console.log('[BoilerChart] Initializing boiler chart for inverter:', inverterId); + + // Načíst a vykreslit data + await this.loadAndRender(); + } + + /** + * Načte data z boiler senzorů a vykreslí graf + */ + async loadAndRender() { + // Načíst boiler sensory - Czech entity names + const planEntityId = 'sensor.oig_bojler_plan_ohrevu'; + const socEntityId = 'sensor.oig_bojler_stav_nabiti'; + const tempEntityId = 'sensor.oig_bojler_teplota_nahore'; + const energyEntityId = 'sensor.oig_bojler_pozadovana_energie'; + const costEntityId = 'sensor.oig_bojler_cena_planu_ohrevu'; + + const planSensor = this.hass.states[planEntityId]; + const socSensor = this.hass.states[socEntityId]; + const tempSensor = this.hass.states[tempEntityId]; + const energySensor = this.hass.states[energyEntityId]; + const costSensor = this.hass.states[costEntityId]; + + if (!planSensor || !planSensor.attributes) { + console.warn('[BoilerChart] Boiler plan sensor not found:', planEntityId); + return; + } + + // Získat plán z atributů + const plan = planSensor.attributes.plan || {}; + const slots = plan.slots || []; + const digest = plan.digest || 'N/A'; + + if (slots.length === 0) { + console.warn('[BoilerChart] No plan slots available'); + this.renderEmptyState(); + return; + } + + console.log('[BoilerChart] Plan slots:', slots.length, 'Digest:', digest); + + const series = this.buildSeries(slots); + const metadata = this.buildMetadata({ + socSensor, + tempSensor, + energySensor, + costSensor, + digest, + }); + const datasets = this.buildDatasets(series); + + // Vytvořit nebo aktualizovat graf + if (this.chart) { + this.chart.data.labels = series.labels; + this.chart.data.datasets = datasets; + this.chart.update('none'); // Bez animace pro rychlejší refresh + } else { + this.createChart(series.labels, datasets, metadata); + } + } + + buildSeries(slots) { + const labels = []; + const temperatureData = []; + const socData = []; + const heatingData = []; + const spotPriceData = []; + const costData = []; + + slots.forEach((slot) => { + const timestamp = new Date(slot.start_time); + labels.push(timestamp); + + temperatureData.push(slot.temp_top || 0); + socData.push(slot.soc || 0); + heatingData.push(slot.heating ? 1 : 0); + spotPriceData.push(slot.spot_price || 0); + costData.push(slot.cost || 0); + }); + + console.log('[BoilerChart] Sample slot data:', { + timestamp: labels[0], + temp: temperatureData[0], + soc: socData[0], + heating: heatingData[0], + spotPrice: spotPriceData[0], + cost: costData[0] + }); + + return { + labels, + temperatureData, + socData, + heatingData, + spotPriceData, + costData, + }; + } + + buildMetadata({ socSensor, tempSensor, energySensor, costSensor, digest }) { + return { + currentSoc: socSensor ? parseFloat(socSensor.state) : 0, + currentTemp: tempSensor ? parseFloat(tempSensor.state) : 0, + energyRequired: energySensor ? parseFloat(energySensor.state) : 0, + totalCost: costSensor ? parseFloat(costSensor.state) : 0, + digest, + }; + } + + buildDatasets(series) { + const datasets = []; + + datasets.push({ + label: 'Teplota horní zóna (°C)', + data: series.temperatureData, + borderColor: '#ff6b6b', + backgroundColor: 'rgba(255, 107, 107, 0.1)', + borderWidth: 2, + fill: true, + type: 'line', + tension: 0.3, + pointRadius: 0, + pointHoverRadius: 4, + yAxisID: 'y-temp', + order: 1 + }); + + datasets.push({ + label: 'SOC (%)', + data: series.socData, + borderColor: '#4ecdc4', + backgroundColor: 'rgba(78, 205, 196, 0.1)', + borderWidth: 2, + fill: true, + type: 'line', + tension: 0.3, + pointRadius: 0, + pointHoverRadius: 4, + yAxisID: 'y-soc', + order: 2 + }); + + const heatingBarData = series.heatingData.map((heating, idx) => { + if (heating === 1) { + return series.temperatureData[idx]; + } + return null; + }); + + datasets.push({ + label: 'Topení aktivní', + data: heatingBarData, + backgroundColor: 'rgba(255, 193, 7, 0.4)', + borderColor: '#ffc107', + borderWidth: 1, + type: 'bar', + barPercentage: 1.0, + categoryPercentage: 1.0, + yAxisID: 'y-temp', + order: 3 + }); + + datasets.push({ + label: 'Spot cena (Kč/kWh)', + data: series.spotPriceData, + borderColor: '#95a5a6', + backgroundColor: 'rgba(149, 165, 166, 0.1)', + borderWidth: 1, + borderDash: [5, 5], + fill: false, + type: 'line', + tension: 0, + pointRadius: 0, + pointHoverRadius: 3, + yAxisID: 'y-price', + hidden: true, + order: 4 + }); + + return datasets; + } + + /** + * Vytvoří Chart.js instanci + */ + createChart(labels, datasets, metadata) { + const ctx = this.canvasElement.getContext('2d'); + if (!ctx) { + console.error('[BoilerChart] Failed to get canvas context'); + return; + } + + this.chart = new Chart(ctx, { + type: 'line', + data: { + labels, + datasets + }, + options: this.buildChartOptions(metadata) + }); + + console.log('[BoilerChart] Chart created successfully'); + } + + buildChartOptions(metadata) { + return { + responsive: true, + maintainAspectRatio: false, + interaction: { + mode: 'index', + intersect: false + }, + plugins: { + title: { + display: true, + text: `Plán ohřevu bojleru | SOC: ${metadata.currentSoc.toFixed(0)}% | Teplota: ${metadata.currentTemp.toFixed(1)}°C | Energie: ${metadata.energyRequired.toFixed(2)} kWh | Náklady: ${metadata.totalCost.toFixed(2)} Kč`, + font: { size: 14, weight: 'bold' }, + color: '#ffffff' + }, + legend: { + display: true, + position: 'top', + labels: { + color: '#ffffff', + usePointStyle: true, + padding: 15, + filter: (legendItem) => { + return !legendItem.text.includes('Spot cena'); + } + } + }, + tooltip: { + backgroundColor: 'rgba(0, 0, 0, 0.8)', + titleColor: '#ffffff', + bodyColor: '#ffffff', + borderColor: '#4ecdc4', + borderWidth: 1, + padding: 12, + displayColors: true, + callbacks: { + title: (tooltipItems) => { + const item = tooltipItems[0]; + const date = new Date(item.label); + return date.toLocaleString('cs-CZ', { + day: '2-digit', + month: '2-digit', + hour: '2-digit', + minute: '2-digit' + }); + }, + label: (context) => { + const label = context.dataset.label || ''; + const value = context.parsed.y; + + if (label.includes('Teplota')) { + return `${label}: ${value.toFixed(1)}°C`; + } else if (label.includes('SOC')) { + return `${label}: ${value.toFixed(0)}%`; + } else if (label.includes('Topení')) { + return value !== null ? '🔥 Topení ZAPNUTO' : ''; + } else if (label.includes('Spot cena')) { + return `${label}: ${value.toFixed(2)} Kč/kWh`; + } + return `${label}: ${value}`; + } + } + }, + zoom: { + pan: { + enabled: true, + mode: 'x' + }, + zoom: { + wheel: { + enabled: true + }, + pinch: { + enabled: true + }, + mode: 'x' + } + } + }, + scales: { + x: { + type: 'time', + time: { + unit: 'hour', + displayFormats: { + hour: 'HH:mm' + }, + tooltipFormat: 'dd.MM HH:mm' + }, + grid: { + color: 'rgba(255, 255, 255, 0.1)' + }, + ticks: { + color: '#ffffff', + maxRotation: 0, + autoSkip: true, + maxTicksLimit: 12 + } + }, + 'y-temp': { + type: 'linear', + position: 'left', + title: { + display: true, + text: 'Teplota (°C)', + color: '#ff6b6b' + }, + grid: { + color: 'rgba(255, 107, 107, 0.2)' + }, + ticks: { + color: '#ff6b6b', + callback: (value) => `${value}°C` + }, + min: 0, + max: 100 + }, + 'y-soc': { + type: 'linear', + position: 'right', + title: { + display: true, + text: 'SOC (%)', + color: '#4ecdc4' + }, + grid: { + drawOnChartArea: false + }, + ticks: { + color: '#4ecdc4', + callback: (value) => `${value}%` + }, + min: 0, + max: 100 + }, + 'y-price': { + type: 'linear', + position: 'right', + display: false, + grid: { + drawOnChartArea: false + } + } + } + }; + } + + /** + * Vykreslí prázdný stav když nejsou data + */ + renderEmptyState() { + const ctx = this.canvasElement.getContext('2d'); + if (!ctx) return; + + if (this.chart) { + this.chart.destroy(); + this.chart = null; + } + + // Zobrazit text "Žádný plán topení" + ctx.fillStyle = '#ffffff'; + ctx.font = '20px Arial'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText('⚠️ Žádný plán topení', this.canvasElement.width / 2, this.canvasElement.height / 2); + ctx.font = '14px Arial'; + ctx.fillText('Pro vytvoření plánu použijte službu "Naplánovat ohřev bojleru"', this.canvasElement.width / 2, this.canvasElement.height / 2 + 30); + } + + /** + * Refresh dat (volat při update senzorů) + */ + async refresh() { + await this.loadAndRender(); + } + + /** + * Destroy chart instance + */ + destroy() { + if (this.chart) { + this.chart.destroy(); + this.chart = null; + } + } +} diff --git a/custom_components/oig_cloud/www/modules/cost-comparison-tile.js b/custom_components/oig_cloud/www/modules/cost-comparison-tile.js new file mode 100644 index 00000000..02a89ff1 --- /dev/null +++ b/custom_components/oig_cloud/www/modules/cost-comparison-tile.js @@ -0,0 +1,151 @@ +class CostComparisonTile { + constructor(container, payload, options = {}) { + this.container = container; + this.data = payload || {}; + this.summary = this.data.comparison || {}; + this.onOpenHybrid = options.onOpenHybrid; + this.boundContainerClick = null; + this.render(); + } + + update(payload) { + this.data = payload || {}; + this.summary = this.data.comparison || {}; + this.render(); + } + + render() { + if (!this.summary || !this.summary.plans) { + this.container.innerHTML = ` +
+ 💰 Nákladový přehled + Čekám na data… +
+ `; + return; + } + + const plans = this.summary.plans; + const activePlan = plans['standard'] || {}; + + this.container.classList.add('cost-card', 'cost-card-square', 'cost-card-compact'); + this.container.innerHTML = ` + ${this.renderHero(activePlan)} + ${this.renderHistoryRows()} + `; + + this.attachEvents(); + } + + renderHero(activePlan) { + const total = this.formatCost(activePlan.total_cost); + const actual = this.formatCost(activePlan.actual_cost); + const future = this.formatCost(activePlan.future_plan_cost); + const activePlanKeyForEvents = activePlan.plan_key || 'hybrid'; + const activeLabel = this.getPlanLabel(activePlanKeyForEvents); + + return ` +
+
+
Dnes · ${activeLabel}
+
${total}
+
+ Utraceno ${actual} + Plán ${future} +
+
+
+ `; + } + + renderHistoryRows() { + const yesterdaySource = + this.summary.yesterday || + this.data?.hybrid?.yesterday || + null; + const yesterdayActual = this.asNumber(yesterdaySource?.actual_total_cost); + const yesterdayPlan = this.asNumber(yesterdaySource?.plan_total_cost); + const yesterdayCost = + yesterdayActual ?? + yesterdayPlan ?? + null; + const yesterdayNote = + yesterdayActual !== null + ? 'skutečnost' + : yesterdayPlan !== null + ? 'plán' + : ''; + const yesterdayPlanNote = + yesterdayActual !== null && yesterdayPlan !== null && Math.round(yesterdayPlan) !== Math.round(yesterdayActual) + ? `plán ${this.formatCost(yesterdayPlan)}` + : ''; + const tomorrowCost = (this.summary.tomorrow || {})['standard'] ?? null; + const tomorrowLabel = this.getPlanLabel('hybrid'); + const blocks = [ + this.renderHistoryCard('Včera', this.formatCost(yesterdayCost), yesterdayNote, yesterdayPlanNote), + this.renderHistoryCard('Zítra', this.formatCost(tomorrowCost), tomorrowLabel) + ]; + return `
${blocks.join('')}
`; + } + + renderHistoryCard(label, value, note, secondaryNote = '') { + return ` +
+ ${label} + ${value} + ${note ? `${note}` : ''} + ${secondaryNote ? `${secondaryNote}` : ''} +
+ `; + } + + attachEvents() { + const heroMain = this.container.querySelector('.cost-hero-main[data-plan]'); + + const handleOpen = () => { + if (typeof this.onOpenHybrid === 'function') { + this.onOpenHybrid(); + } + }; + + if (heroMain) { + heroMain.addEventListener('click', (e) => { + e.stopPropagation(); + handleOpen(); + }); + } + + if (!this.boundContainerClick) { + this.boundContainerClick = () => { + handleOpen(); + }; + this.container.addEventListener('click', this.boundContainerClick); + } + } + + getPlanLabel(planKey) { + const fallback = 'Standardní'; // Always hybrid + const labels = window.PLAN_LABELS && window.PLAN_LABELS[planKey]; + if (!labels) { + return fallback; + } + return labels.short || fallback; + } + + formatCost(value) { + if (value === undefined || value === null || Number.isNaN(value)) { + return '--'; + } + return `${Math.round(value)} Kč`; + } + + asNumber(value) { + if (value === undefined || value === null) { + return null; + } + const parsed = Number(value); + return Number.isNaN(parsed) ? null : parsed; + } +} + +window.CostComparisonTile = CostComparisonTile; diff --git a/custom_components/oig_cloud/www/modules/today-plan-tile.js b/custom_components/oig_cloud/www/modules/today-plan-tile.js new file mode 100644 index 00000000..ef1c58ff --- /dev/null +++ b/custom_components/oig_cloud/www/modules/today-plan-tile.js @@ -0,0 +1,301 @@ +/** + * Today Plan Tile Component + * + * Dlaždice "Dnes - Plnění plánu" s mini grafem variance chart + * Zobrazuje průběžné plnění plánu a EOD predikci + * + * Phase 2.9 - Implementace dle PLAN_VS_ACTUAL_UX_REDESIGN.md + * + * @version 1.0.0 + * @author OIG Cloud Team + * @status IMPLEMENTOVÁNO - NEZASAZENO (čeká na review) + */ +/* global Chart */ + +class TodayPlanTile { + /** + * @param {HTMLElement} container - Container element pro dlaždici + * @param {Object} data - Data z API (today_tile_summary) + * @param {Function} onClickHandler - Handler pro kliknutí na dlaždici + */ + constructor(container, data, onClickHandler = null) { + this.container = container; + this.data = data; + this.onClickHandler = onClickHandler; + this.chart = null; + + this.render(); + } + + /** + * Hlavní render metoda - vykreslí dlaždici ve stat-card stylu + */ + render() { + if (!this.data) { + this.renderEmpty(); + return; + } + + const { + planned_so_far, + actual_so_far, + delta, + delta_pct, + eod_prediction + } = this.data; + const deltaIcon = delta < 0 ? '↓' : (delta > 0 ? '↑' : '→'); + + // Barva podle výsledku (zelená = lepší, červená = horší) + const tileColor = delta < 0 ? '#4CAF50' : '#2196F3'; // Zelená nebo modrá + const bgGradient = delta < 0 + ? 'linear-gradient(135deg, rgba(76, 175, 80, 0.15) 0%, rgba(76, 175, 80, 0.05) 100%)' + : 'linear-gradient(135deg, rgba(33, 150, 243, 0.15) 0%, rgba(33, 150, 243, 0.05) 100%)'; + const borderColor = delta < 0 ? 'rgba(76, 175, 80, 0.3)' : 'rgba(33, 150, 243, 0.3)'; + + // Vytvořit HTML ve stat-card stylu + this.container.style.background = bgGradient; + this.container.style.border = `1px solid ${borderColor}`; + + this.container.innerHTML = ` +
+ 📆 Dnes - Plnění plánu +
+
+ ${actual_so_far.toFixed(1)} Kč +
+
+ ${deltaIcon} ${Math.abs(delta).toFixed(1)} Kč (${delta_pct > 0 ? '+' : ''}${delta_pct.toFixed(1)}%) +
+ Plán: ${planned_so_far.toFixed(1)} Kč • EOD: ${eod_prediction.toFixed(1)} Kč +
+ + `; + + // Vykreslit mini chart + this.renderMiniChart(); + + // Přidat click handler + if (this.onClickHandler) { + this.container.style.cursor = 'pointer'; + this.container.onclick = this.onClickHandler; + } + } + + /** + * Vykreslí prázdnou dlaždici pokud nejsou data + */ + renderEmpty() { + this.container.innerHTML = ` +
+ 📆 Dnes - Plnění plánu +
+
+ ⏳ Načítání... +
+
+ Data budou k dispozici po prvním 15min intervalu. +
+ `; + } + + /** + * Vykreslí mini variance chart s Chart.js + */ + renderMiniChart() { + const canvas = document.getElementById('today-mini-chart'); + if (!canvas) { + console.warn('⚠️ Canvas #today-mini-chart not found'); + return; + } + + const chartData = this.data.mini_chart_data || []; + if (chartData.length === 0) { + this.renderEmptyChart(canvas); + return; + } + + const ctx = canvas.getContext('2d'); + + const { labels, data, colors, nowIndex } = this.buildMiniChartData(chartData); + + // Zničit existující chart pokud je + if (this.chart) { + this.chart.destroy(); + } + + // Vytvořit nový chart + this.chart = new Chart(ctx, { + type: 'bar', + data: { + labels: labels, + datasets: [{ + data: data, + backgroundColor: colors, + borderWidth: 0, + barPercentage: 0.9, + categoryPercentage: 0.95 + }] + }, + options: this.buildMiniChartOptions(chartData, nowIndex) + }); + } + + buildMiniChartData(chartData) { + const labels = chartData.map(d => d.time.substring(11, 16)); + const data = chartData.map(d => d.delta); + + const colors = chartData.map(d => { + if (!d.is_historical) { + return 'rgba(200, 200, 200, 0.5)'; + } + + if (d.delta === null) { + return 'rgba(200, 200, 200, 0.7)'; + } + + return d.delta < 0 + ? 'rgba(76, 175, 80, 0.8)' + : 'rgba(244, 67, 54, 0.8)'; + }); + + return { + labels, + data, + colors, + nowIndex: chartData.findIndex(d => d.is_current) + }; + } + + buildMiniChartOptions(chartData, nowIndex) { + return { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + display: false + }, + tooltip: { + enabled: true, + callbacks: { + title: (context) => { + const index = context[0].dataIndex; + const item = chartData[index]; + return item.time.substring(11, 16); + }, + label: (context) => { + const index = context.dataIndex; + const item = chartData[index]; + + if (!item.is_historical) { + return 'Plán (ještě nenastalo)'; + } + + if (item.delta === null) { + return 'Chybí actual data'; + } + + const value = context.parsed.y; + const sign = value < 0 ? '' : '+'; + return `Odchylka: ${sign}${value.toFixed(2)} Kč`; + } + } + }, + annotation: nowIndex >= 0 ? { + annotations: { + nowLine: { + type: 'line', + xMin: nowIndex - 0.5, + xMax: nowIndex - 0.5, + borderColor: 'rgb(255, 99, 132)', + borderWidth: 2, + borderDash: [5, 5], + label: { + content: 'NOW', + enabled: true, + position: 'top', + backgroundColor: 'rgb(255, 99, 132)', + color: 'white', + font: { + size: 10, + weight: 'bold' + } + } + } + } + } : undefined + }, + scales: { + x: { + display: true, + grid: { + display: false + }, + ticks: { + maxRotation: 0, + autoSkip: true, + maxTicksLimit: 8, + font: { + size: 9 + } + } + }, + y: { + display: true, + grid: { + color: 'rgba(0, 0, 0, 0.05)' + }, + ticks: { + callback: (value) => { + const sign = value < 0 ? '' : '+'; + return `${sign}${value.toFixed(1)}`; + }, + font: { + size: 9 + } + } + } + } + }; + } + + /** + * Vykreslí prázdný chart jako placeholder + */ + renderEmptyChart(canvas) { + const ctx = canvas.getContext('2d'); + ctx.fillStyle = '#f5f5f5'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = '#999'; + ctx.font = '12px sans-serif'; + ctx.textAlign = 'center'; + ctx.fillText('Žádná data pro graf', canvas.width / 2, canvas.height / 2); + } + + /** + * Aktualizovat data a překreslit + * @param {Object} newData - Nová data z API + */ + update(newData) { + this.data = newData; + this.render(); + } + + /** + * Zničit komponentu a uvolnit resources + */ + destroy() { + if (this.chart) { + this.chart.destroy(); + this.chart = null; + } + + if (this.container) { + this.container.innerHTML = ''; + } + } +} + +// Export pro použití v dashboard +window.TodayPlanTile = TodayPlanTile; + +export default TodayPlanTile; diff --git a/custom_components/oig_cloud/www/oig-battery-forecast-card.js b/custom_components/oig_cloud/www/oig-battery-forecast-card.js new file mode 100644 index 00000000..80e54d36 --- /dev/null +++ b/custom_components/oig_cloud/www/oig-battery-forecast-card.js @@ -0,0 +1,836 @@ +/* global ApexCharts */ +class OigBatteryForecastCard extends HTMLElement { + constructor() { + super(); + this.attachShadow({ mode: 'open' }); + this.chart = null; + } + + setConfig(config) { + if (!config.entity) { + throw new Error('You need to define an entity'); + } + this.config = config; + } + + set hass(hass) { + this._hass = hass; + + // Phase 1.5: Hash-based change detection + // Check if timeline data changed by comparing hash (state) + const entityId = this.config?.entity; + if (entityId) { + const entity = hass.states[entityId]; + if (entity) { + const currentHash = entity.state; // State = hash[:8] + + // First load or hash changed - fetch new data + if (!this._lastHash || this._lastHash !== currentHash) { + console.log(`🔄 Timeline data changed: ${this._lastHash || 'none'} -> ${currentHash}`); + this._lastHash = currentHash; + this.fetchAndUpdateChart(); + } else { + // Hash unchanged - skip update + console.log(`✅ Timeline data unchanged (hash: ${currentHash})`); + } + } + } + } + + connectedCallback() { + this.render(); + this.loadChartsLibrary(); + } + + async loadChartsLibrary() { + try { + // Načtení chart loaderu pokud není dostupný + if (!window.ApexChartsLoader) { + await this.loadScript('/oig_cloud_static/chart-loader.js'); + } + + // Zobrazení loading stavu + this.showLoading('Načítání grafu...'); + + // Načtení Apex Charts pomocí CDN loaderu + await window.ApexChartsLoader.load(); + + // Inicializace grafu + this.initChart(); + + } catch (error) { + console.error('Chyba při načítání Apex Charts:', error); + this.showError('Graf není dostupný - problém s načítáním z CDN'); + } + } + + loadScript(src) { + return new Promise((resolve, reject) => { + if (document.querySelector(`script[src="${src}"]`)) { + resolve(); + return; + } + + const script = document.createElement('script'); + script.src = src; + script.async = true; + script.onload = resolve; + script.onerror = () => reject(new Error(`Failed to load ${src}`)); + document.head.appendChild(script); + }); + } + + showLoading(message) { + const chartContainer = this.shadowRoot.querySelector('#chart'); + if (chartContainer) { + chartContainer.innerHTML = ` +
+ +
${message}
+
+ + `; + } + } + + showError(message) { + const chartContainer = this.shadowRoot.querySelector('#chart'); + if (chartContainer) { + chartContainer.innerHTML = ` +
+ +
Graf není k dispozici
+
${message}
+ +
+ `; + } + } + + render() { + this.shadowRoot.innerHTML = ` + +
+ +

Predikce kapacity baterie

+
+
+
+
+
+ Skutečná kapacita +
+
+
+ Predikovaná kapacita +
+
+
+ Solární výroba +
+
+
+ Spotřeba domu +
+
+
+ Nabíjení ze sítě +
+
+
+ `; + } + + initChart() { + if (!window.ApexCharts || !this.shadowRoot.querySelector('#chart')) return; + + const options = { + chart: { + type: 'line', + height: 500, + stacked: true, // Zapnout stacking pro area série + stackType: 'normal', // Normální sčítání + animations: { + enabled: true, + easing: 'easeinout', + speed: 800 + }, + toolbar: { + show: true, + tools: { + download: true, + selection: false, + zoom: true, + zoomin: true, + zoomout: true, + pan: true, + reset: true, + } + } + }, + series: [], + xaxis: { + type: 'datetime', + labels: { + format: 'HH:mm', + style: { + fontSize: '11px' + } + }, + axisBorder: { + show: true + }, + axisTicks: { + show: true + } + }, + yaxis: [ + { + seriesName: 'Kapacita baterie', + title: { + text: 'Kapacita (kWh)', + style: { + fontSize: '12px', + color: '#00E396' + } + }, + min: 0, + max: undefined, // Bude nastaveno dynamicky + labels: { + formatter: (val) => val ? val.toFixed(1) : '0', + style: { + colors: '#00E396' + } + } + }, + { + seriesName: 'Nabíjení ze sítě', + opposite: true, + title: { + text: 'Přírůstek (kWh/15min)', + style: { + fontSize: '12px', + color: '#2196F3' + } + }, + min: 0, + max: 3, // Max přírůstek za 15min + labels: { + formatter: (val) => val ? val.toFixed(2) : '0', + style: { + colors: '#2196F3' + } + } + } + ], + stroke: { + width: [3, 0, 0], // line=3, area=0 + curve: 'smooth' + }, + fill: { + type: ['solid', 'solid', 'solid'], + opacity: [1, 0.7, 0.7], // line plná, plochy průhledné + }, + colors: [ + '#00E396', // Čára baterie - tyrkysová/zelená + '#2196F3', // Grid charge - modrá + '#4CAF50' // Solar charge - zelená + ], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + labels: { + colors: 'var(--primary-text-color, #212121)' + }, + markers: { + width: 12, + height: 12 + } + }, + tooltip: { + shared: true, + intersect: false, + x: { + format: 'dd.MM HH:mm' + }, + y: { + formatter: (val, opts) => { + if (!val) return '0'; + const seriesName = opts.w.config.series[opts.seriesIndex]?.name || ''; + if (seriesName.includes('Kapacita')) { + return val.toFixed(2) + ' kWh'; + } + return val.toFixed(2) + ' kW'; + } + } + }, + grid: { + borderColor: 'var(--divider-color, #e0e0e0)', + strokeDashArray: 3, + xaxis: { + lines: { + show: true + } + }, + yaxis: { + lines: { + show: true + } + } + }, + annotations: { + xaxis: [], + points: [] + } + }; + + this.chart = new ApexCharts(this.shadowRoot.querySelector('#chart'), options); + this.chart.render(); + this.updateChart(); + } + + /** + * Phase 1.5: Fetch timeline data from REST API + * @param {string} boxId - Box ID from entity unique_id + * @returns {Promise} Timeline data points + */ + async fetchTimelineFromAPI(boxId) { + const apiEndpoint = `/api/oig_cloud/battery_forecast/${boxId}/timeline`; + + try { + console.log(`📡 Fetching timeline from API: ${apiEndpoint}?type=active`); + const response = await fetch(`${apiEndpoint}?type=active`, { + method: 'GET', + credentials: 'include', // Include HA session cookies + }); + + if (!response.ok) { + throw new Error(`API request failed: ${response.status} ${response.statusText}`); + } + + const data = await response.json(); + console.log(`✅ Timeline fetched: ${data.metadata.points_count} points, ${data.metadata.size_kb} KB`); + + return data.active || []; + } catch (error) { + console.error('❌ Failed to fetch timeline from API:', error); + this.showError(`Nepodařilo se načíst data grafu: ${error.message}`); + return []; + } + } + + /** + * Phase 1.5: Fetch timeline and update chart + * Called when hash changes (timeline data updated) + */ + async fetchAndUpdateChart() { + if (!this.chart || !this._hass) { + console.log('⏭️ Skipping update - chart or hass not ready'); + return; + } + + const entityId = this.config.entity; + const entity = this._hass.states[entityId]; + if (!entity) { + console.warn(`⚠️ Entity not found: ${entityId}`); + return; + } + + // Extract box_id from entity_id: sensor.oig_2206237016_battery_forecast -> 2206237016 + const boxIdMatch = entityId.match(/sensor\.oig_(\d+)_battery_forecast/); + if (!boxIdMatch) { + console.error(`❌ Could not extract box_id from entity_id: ${entityId}`); + this.showError('Chyba konfigurace: neplatné entity_id'); + return; + } + const boxId = boxIdMatch[1]; + + // Fetch timeline from API + this.showLoading('Načítání dat grafu...'); + const timelineData = await this.fetchTimelineFromAPI(boxId); + + if (timelineData.length === 0) { + console.warn('⚠️ No timeline data received from API'); + return; + } + + // Store timeline data for chart update + this._timelineData = timelineData; + + // Update chart with new data + this.updateChart(); + } + + updateChart() { + if (!this.chart || !this._hass) return; + + const entityId = this.config.entity; + const entity = this._hass.states[entityId]; + if (!entity) return; + + const attrs = entity.attributes; + + // Příprava dat pro graf + const series = this.prepareSeries(); + const annotations = this.prepareAnnotations(attrs); + + // Nastavení max hodnoty pro Y-axis kapacity + const maxCapacity = attrs.max_capacity_kwh || 15; + + // Aktualizace grafu + this.chart.updateOptions({ + series: series, + annotations: annotations, + yaxis: [ + { + seriesName: 'Kapacita baterie', + title: { + text: 'Kapacita (kWh)', + style: { + fontSize: '12px' + } + }, + min: 0, + max: maxCapacity * 1.1, // 10% rezerva + labels: { + formatter: (val) => val ? val.toFixed(1) : '0' + } + }, + { + seriesName: 'Výroba', + opposite: true, + title: { + text: 'Výkon (kW)', + style: { + fontSize: '12px' + } + }, + min: 0, + labels: { + formatter: (val) => val ? val.toFixed(1) : '0' + } + } + ] + }); + + // Aktualizace statistik + const stats = this.prepareStats(attrs); + this.updateStats(stats); + } + + prepareAnnotations(attrs) { + const annotations = { + xaxis: [], + points: [] + }; + + // Přidat vertikální čáru pro "Nyní" + const now = new Date().getTime(); + annotations.xaxis.push({ + x: now, + borderColor: '#999', + strokeDashArray: 5, + label: { + text: 'Nyní', + style: { + color: '#fff', + background: '#999' + } + } + }); + + // Přidat spot price annotations (červená čísla nahoře) + const spotPrices = attrs.spot_prices || {}; + const peakHours = attrs.peak_hours || []; + + Object.entries(spotPrices).forEach(([timestamp, price]) => { + const time = new Date(timestamp).getTime(); + const isPeak = peakHours.includes(timestamp); + + // Zobrazit ceny pouze každou hodinu (00 minut) + if (new Date(timestamp).getMinutes() === 0) { + annotations.points.push({ + x: time, + y: 0, + marker: { + size: 0 + }, + label: { + text: price.toFixed(1), + style: { + color: '#fff', + background: isPeak ? '#F44336' : '#4CAF50', + fontSize: '10px', + padding: { + left: 4, + right: 4, + top: 2, + bottom: 2 + } + }, + offsetY: -10 + } + }); + } + }); + + // Přidat charging hours jako zelené sloupce + const chargingHours = [ + ...(attrs.charging_hours_today || []), + ...(attrs.charging_hours_tomorrow || []) + ]; + + chargingHours.forEach(timestamp => { + const time = new Date(timestamp).getTime(); + annotations.xaxis.push({ + x: time, + x2: time + (15 * 60 * 1000), // 15 minut + fillColor: '#4CAF50', + opacity: 0.3, + label: { + text: '⚡', + style: { + color: '#fff', + background: '#4CAF50', + fontSize: '10px' + }, + offsetY: 0 + } + }); + }); + + return annotations; + } + + prepareSeries() { + const series = []; + + // Připravíme data pro dvě nezávislé linie + const { batteryLineData, gridChargeData, solarChargeData } = this.prepareTwoLineData(); + + // 1. ČÁRA BATERIE - kapacita na levé Y ose (axis 0) + if (batteryLineData.length > 0) { + series.push({ + name: 'Kapacita baterie', + type: 'line', + data: batteryLineData, + yAxisIndex: 0 // Levá osa + }); + } + + // 2. GRID CHARGE - stacked area na pravé Y ose (axis 1) + if (gridChargeData.length > 0) { + series.push({ + name: 'Nabíjení ze sítě', + type: 'area', + data: gridChargeData, + yAxisIndex: 1 // Pravá osa + }); + } + + // 3. SOLAR CHARGE - stacked area na pravé Y ose (axis 1) + if (solarChargeData.length > 0) { + series.push({ + name: 'Nabíjení ze soláru', + type: 'area', + data: solarChargeData, + yAxisIndex: 1 // Pravá osa (stackuje se s gridem) + }); + } + + return series; + } + + prepareTwoLineData() { + console.log('🔥 prepareTwoLineData called - Phase 1.5 API VERSION!'); + const batteryLineData = []; + const gridChargeData = []; + const solarChargeData = []; + + // Phase 1.5: Use timeline data from API (stored in this._timelineData) + const timelineData = this._timelineData || []; + + if (timelineData.length === 0) { + console.warn('⚠️ No timeline data available - chart will be empty'); + } + + timelineData.forEach((point) => { + if (!point.timestamp) return; + + const timestamp = new Date(point.timestamp).getTime(); + // HYBRID API uses battery_start, legacy uses battery_capacity_kwh + const batteryKwh = point.battery_start || point.battery_capacity_kwh || 0; + // HYBRID API uses solar_kwh, legacy uses solar_charge_kwh + const solarChargeKwh = point.solar_kwh || point.solar_charge_kwh || 0; + // HYBRID API uses grid_import_kwh, legacy uses grid_charge_kwh + const gridChargeKwh = point.grid_import_kwh || point.grid_charge_kwh || 0; + + // Kapacita baterie - levá Y osa + batteryLineData.push({ + x: timestamp, + y: batteryKwh + }); + + // Grid charge - pravá Y osa (stacked) + gridChargeData.push({ + x: timestamp, + y: gridChargeKwh + }); + + // Solar charge - pravá Y osa (stacked nad gridem) + solarChargeData.push({ + x: timestamp, + y: solarChargeKwh + }); + }); + + return { batteryLineData, gridChargeData, solarChargeData }; + } + + prepareBatteryData(attrs) { + const data = []; + // Phase 1.5: Use timeline data from API + const timelineData = this._timelineData || []; + + // Pokud máme timeline_data, použijeme je + if (timelineData.length > 0) { + timelineData.forEach(point => { + if (point.timestamp && point.battery_kwh !== undefined) { + data.push({ + x: new Date(point.timestamp).getTime(), + y: point.battery_kwh + }); + } + }); + } else { + // Fallback na původní metodu + const current = attrs.current_battery_kwh || 0; + const now = new Date().getTime(); + + data.push({ + x: now, + y: current + }); + + // Predikce z battery_today_predicted a battery_tomorrow_predicted + const todayPredicted = attrs.battery_today_predicted || {}; + const tomorrowPredicted = attrs.battery_tomorrow_predicted || {}; + + Object.entries({...todayPredicted, ...tomorrowPredicted}).forEach(([timestamp, value]) => { + data.push({ + x: new Date(timestamp).getTime(), + y: value + }); + }); + } + + return data.sort((a, b) => a.x - b.x); + } + + prepareSolarData(attrs) { + const data = []; + // Phase 1.5: Use timeline data from API + const timelineData = this._timelineData || []; + + if (timelineData.length > 0) { + timelineData.forEach(point => { + if (point.timestamp && point.solar_kw !== undefined) { + data.push({ + x: new Date(point.timestamp).getTime(), + y: point.solar_kw + }); + } + }); + } else { + // Fallback + const todayPredicted = attrs.solar_today_predicted || {}; + const tomorrowPredicted = attrs.solar_tomorrow_predicted || {}; + + Object.entries({...todayPredicted, ...tomorrowPredicted}).forEach(([timestamp, value]) => { + data.push({ + x: new Date(timestamp).getTime(), + y: value + }); + }); + } + + return data.sort((a, b) => a.x - b.x); + } + + prepareConsumptionData(attrs) { + const data = []; + // Phase 1.5: Use timeline data from API + const timelineData = this._timelineData || []; + + if (timelineData.length > 0) { + timelineData.forEach(point => { + if (point.timestamp && point.consumption_kw !== undefined) { + data.push({ + x: new Date(point.timestamp).getTime(), + y: Math.abs(point.consumption_kw) // Spotřeba jako pozitivní + }); + } + }); + } else { + // Fallback - použít konstantní spotřebu z prediction + const prediction = attrs.consumption_prediction || {}; + const avgHourly = prediction.average_hourly_kwh || 0.5; + + // Vytvoř predikci na 48 hodin + const now = new Date(); + for (let i = 0; i < 48; i++) { + const timestamp = new Date(now.getTime() + i * 60 * 60 * 1000); + data.push({ + x: timestamp.getTime(), + y: avgHourly + }); + } + } + + return data.sort((a, b) => a.x - b.x); + } + + prepareStats(attrs) { + const config = attrs.battery_config || {}; + const chargingToday = attrs.charging_hours_today || []; + const chargingTomorrow = attrs.charging_hours_tomorrow || []; + + return { + maxCapacity: `${config.max_capacity_kwh || 0} kWh`, + minCapacity: `${config.min_capacity_percent || 20}%`, + chargeRate: `${config.charge_rate_kw || 2.8} kW`, + chargingHoursToday: chargingToday.length, + chargingHoursTomorrow: chargingTomorrow.length, + lastUpdate: attrs.last_update ? new Date(attrs.last_update).toLocaleString('cs-CZ') : 'N/A' + }; + } + + updateStats(stats) { + const statsContainer = this.shadowRoot.querySelector('#stats'); + if (!statsContainer) return; + + statsContainer.innerHTML = ` +
+
${stats.maxCapacity}
+
Max. kapacita
+
+
+
${stats.minCapacity}
+
Min. kapacita
+
+
+
${stats.chargeRate}
+
Nabíjecí výkon
+
+
+
${stats.chargingHoursToday}
+
Nabíjení dnes
+
+
+
${stats.chargingHoursTomorrow}
+
Nabíjení zítra
+
+
+
${stats.lastUpdate}
+
Poslední aktualizace
+
+ `; + } + + getCardSize() { + return 6; // Velikost karty v grid systému + } +} + +// Registrace custom elementu +customElements.define('oig-battery-forecast-card', OigBatteryForecastCard); + +// Registrace pro Lovelace +window.customCards = window.customCards || []; +window.customCards.push({ + type: 'oig-battery-forecast-card', + name: 'OIG Battery Forecast Card', + description: 'Karta pro zobrazení predikce kapacity baterie s Apex Charts', +}); + +console.info( + '%c OIG-BATTERY-FORECAST-CARD \n%c Version 1.0.0 ', + 'color: orange; font-weight: bold; background: black', + 'color: white; font-weight: bold; background: dimgray' +); diff --git a/docker-compose.e2e.yml b/docker-compose.e2e.yml new file mode 100644 index 00000000..f4a01253 --- /dev/null +++ b/docker-compose.e2e.yml @@ -0,0 +1,19 @@ +services: + ha-mock: + build: + context: . + dockerfile: tests/fe/mock/Dockerfile + environment: + OIG_MOCK_PORT: 8124 + OIG_REPO_ROOT: /repo + ports: + - "8124:8124" + volumes: + - .:/repo + restart: "no" + networks: + - oig_cloud_e2e_net + +networks: + oig_cloud_e2e_net: + name: oig_cloud_e2e_net diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..754d665c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: '3.8' + +services: + homeassistant: + container_name: ha-test + image: homeassistant/home-assistant:2025.1.4 + volumes: + - ./config:/config + - ./custom_components:/config/custom_components + - ./tests:/config/tests + environment: + - TZ=Europe/Prague + ports: + - "8123:8123" + restart: unless-stopped + + # Test runner - spustí se pro testy + test-runner: + image: homeassistant/home-assistant:2025.1.4 + volumes: + - .:/workspace + working_dir: /workspace + command: > + sh -c " + pip install pytest pytest-cov pytest-asyncio && + pytest tests/ -v + " + depends_on: + - homeassistant + profiles: + - test diff --git a/docs/grid_delivery_script_sample.yaml b/docs/grid_delivery_script_sample.yaml deleted file mode 100644 index 9751dc0c..00000000 --- a/docs/grid_delivery_script_sample.yaml +++ /dev/null @@ -1,32 +0,0 @@ -alias: Přetoky -sequence: - - if: - - condition: not - conditions: - - condition: state - entity_id: sensor.oig_XXXXXXXX_invertor_prms_to_grid - state: S omezením / Limited - then: - - service: oig_cloud.set_grid_delivery - data: - Mode: S omezením / Limited - Upozornění: true - Acknowledgement: true - - wait_for_trigger: - - platform: state - entity_id: - - sensor.oig_XXXXXXXX_invertor_prms_to_grid - to: S omezením / Limited - timeout: - hours: 0 - minutes: 20 - seconds: 0 - milliseconds: 0 - continue_on_timeout: false - - service: oig_cloud.set_grid_delivery - data: - Upozornění: true - Acknowledgement: true - Limit: 2100 -mode: single -icon: mdi:transmission-tower-import diff --git a/docs/images/dlazdice.png b/docs/images/dlazdice.png new file mode 100644 index 0000000000000000000000000000000000000000..90c379243fd223c1df187876901977d30ba62a91 GIT binary patch literal 779430 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%0A~63Pz$P2b*2vzN|- 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%0ALN3aWA)}g!j*aAZ#gi) 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

yBgzvPdY+VCS|a9jKC6}sU<2K+uS-;*Mq z;P?tBeg1eNQ42}j89c;*fYZE~nLgr&I3VH8z!M&QP3fo*jBay2pdGUUneRQ2T&Iiy z7ZaFdm?7~W^B;k)ScAKE#!>RfhF>+Y1(An10OQzZcnP>MjP3d49#s7jA?`vDZR#Ja`|7X3;KtVT57y(SLpbW!SUmP{$)oM; zVQ4)9K+p3K;qy>}A37Sn^{rpMs_VL4%hV=?1%qwNjZaY;4c^5efqIs^UjSRIa(ezZ zf)lgnc=&tV!nMu2Kj(s(7^*$3!f)}KiOAWIKj*W$yFwz&`s>07ND-`m64wvi%JCg; z>rb7xbX*w0X*=bH0YdIHiI=VCvDnKN1Mk8)IngC7?;;yh&wswqge&JT>pypHU^5Ql zVivl1=Ny+Y=RAyW<-qv%i*FMU-9He zo=1G~7jR_4Vb3UA0ogyWpv?t-j2 z36KvHmS!OiLU1PWu=K9OgwkplbAzlc82o`(Pm=Mqxtqnr;zF3sNVEcuINHkT;^Xv6 z!H3`X>DLVT`k3>0Qy5$pa0(@F4hHUC;3oeaUfjThpQ7Wz9xz7e+>TDQqrr4+HH~b7W zm{)(gV|eDj^;fp;*@Kg+QA|@KKE@(PT)Oh3vpK)`RZb4&XJ3;B+-w_3@dG4?ww_Bjf6O*SUF~iw8#@ z$ZN&T;_qaRP1GgIeh_b%7xRtPLJW>E zQs>26d;}}cdffH5=N0b?Mb8h7?S-oRQ%hs!{1Xdfqi@}*5nj=7?pTyv|L~Iw{9JJD zg$jh))`PodUieerIftzU$DRDU{t^IVpFg6r{$c|ONA{5$R^(n7M%2%A#gp@2^fv7A z1&1`uA->srmoTE;d;ZP15yt_X{1Oe0Y~`j0J_7iWrBo|y6ie6fpE(dGR@8(RpXu4(aT!5_BsNXJem5g` za3CaxdJs$NG%oPSSwEzmo+%K5g<-!Jameqsv07t_KbVFqk(<^P&msz| zah3FlK@IvO?m-nj5MoU+bQxUiy49Y@BPfAf)Pvaab7b6X_%J8tyI*KYB=JCGzX z^9dpyPXJ-$xU&A?@vwpq+3dkX&jmawvY5odksh|`$w9{~z-2yBc3!E!7f93yv95_J z@%zPu`0|hKCC&~5V(>1Y&sGYRyI|P}Lbl+P2cOP0u@q04QKCbh1{}NWy<;d!1k4kS zcrFi*gE-@6{lm`)xC3%Asbu_

=aXmxhhpo~^t7kQ1|j@`VlXjn!`Jq>)4! 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
P8*|U#@9&z9 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

KV|92H<+n%hGmZWR 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

UOdsC*koPQhQX*_c9yaB+dBjjsW8YR4Vj`u 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 z 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∨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

  • zl8TG>P0@=n4X}{ZshFrq6KuFYJ$`*RYP5jVkgLXztk?mZAV%9(_A!I`bIuWVfHj^X~$nG_N*>m z_VD+VxePmuH%Q&K2>#PY{HHA5Y_31 z#?|7{TxwYO*AOxJ@7eB~TEX^mzG?TO*1vMUuT2vQc=K2AZ$|j6wD;j(=jve0yz&3N zG#$*vXs+MXB)GQv=k7{!Tn0kQh}Q=HZm1RqtHKuc!^q>BahO)mvb95u zq{OVAY3UE97I9JM*>wTssL*_vi0yu36)Ix4-a!Iq8+oI1a^Xinz5!e|yN5@JCv9m+ z`^S&>AR0^7Q%f(uKne*3={*p6C5Y<|cN?i|nv-ipZ(IBwzn{r04}}dM$apwa?VtEG zhU4eCJXmoTjt^QTk8m`)O8rs=6@fSno2b_xDfLpTC)W!erz0^m!jvb#$HZ#82XsXy}4FTQ&Z37Ndf z9&ZuL(y}kCn0Q7fs}=taYU)cXD?^HWk!M6TwE`o!HREF zI$?7ey&gXsjSMWQX7{=kN*;wtwUeS`tL|HQX7`kC2j!E7zDY8S!|$Ddvu~B3b(zUV zRYAw0O3Om3ox>g2WLGUxSYtm!*`D^d8xsKWiv<~MyU5X3!LGSPx-(>LY@5T)FDTwesJ(v+0&3500 z>|Op|7o|FFH=A?<$iO!GJXcc(5?195>`kw4=aUi>C(f8`!m0M4fp{9W+hq+~*DGjJ zJp|>=@uIo5qG;nvo)qreT3xZSciUUFjem)gC?vGzGoQe-$YIY%j@G(yzhPlD!XQ^Wn#uB*Od_@Oq=%wn+D|FzTa`uw(uM5N98pqt< z`b+o;J&@WH4O+Y5;e3A&b*J;_(Ctx~iM&dE=~M~)*_uYouUF8qZwQ?bRzYdvWrR_^oxeu1v&}bHI0EtW&8Qsb zPa7=Xm%qQ<3(FJ&a8SxnV8?jbSE~xfF+MDl6!b|Z>oaH0B!aYUo{}OjSTcEXe27BD z`$u)Q0G9}pp<-dk+;VurZBqaG|8DxfN%i~=NM4z5iyqn7n&@GqY!lx$Ph>uUyoIPG zwSC#CeOoEL>9UU2bFf*7cM5uYx3Ozel`4-#14n~%fW)H zt<4$l)T5V@d@wqrd-nU`WIrBG|iR`gw`*adms||rz87-9??46JG8i);a(AoB+Arvqs z>~Ouak4-9elP8~gI?D9%gFB^5*rx|?6(;-n_Eb_H)m53hHB3F*90sQp%yeI-H583x zoeg2-1R_o-%?v3=`n$kRKVB94vR6L-b8Ywrar9N0v)^;plojrAuD!bPSSjR2C$awZ z1frDtBBIFXdbG{BFd4+?$Ax`r+gfBc8TvNWbHiJ2Fxv|5p(zs@{hkd(gIKX<^24*6 z^fNmMsnbrK?^Va8zx}E|eK-G1{G$RXr{92^AyK z+X4SzP=Ck2RW+`TNW24_cYU+4z{~NSt$f$lQk5isAQO|=ewEyuCajk27x3CQ0ld=t z-NpX)y)YM(*YT@(@bV&2=8}b};9>uN*NzuT zpT%rud*6z6xv`FcD+l>Sy0H7fYtzIo`sTHfinN=W%iQHW){TvZ7nU5 zP(hgRfyHf~C)UCoZYa=6&spt0mf{TlN{Py`;^tKKP?k$z>ME3^%3tn*IWKZ3^!OPi zyWZ&)kVqZ=+H^Se`zLrQmI78mJ_9%@xs`nd6ios?3;zb#Gknp4f6#qz&_nJSK zQpViE?62%o+{8ZNSdyfxQK*Vyms%yH@(PAaq%Dn0r1;(kO+OY+pQ`OXlA|)f&dC?A z3GsRg23b%kz0K)ETDoq%XE{Ir=qC%SZ=}qIP269dm)*l{iHW|#L$2zG3+U1}_a>VGkcD)NM(`HR}W7|NN%p0JSmV$AT<#}*y=u=6-S zojW$CCc#nXuqm)%;8p5echWQDrd~MqMvTeZ1Sv%zmbMAKuiTDbOgUd!wFyrdQrDsG zSA-Z&oNVy9V}|pso!|-ml>J&)LO8wal+Cz zCg@YlQ?%6{=+aIEZb9*;g&Gem9&qp`y0~REnHXPPzBEz}%A|zwQZmT^^N=j#rTm8i zP^m>w>mfOvlUvH~5G$P)lxuI|fg6Q+X$c|P5@}f`;q9OWy_7t5pT*+Lj2aSW{HJ|4g&#_-JnG_>CR4yqi>4_(hd& zQ~EfM0(bHNdvZ_yL!f(*0q^hk%By;_3(j1By?2}nt`$QzuU}$ z)d1Tlv23fNR)ci0TvFYg1mQ^`c}z=}Gz8a#0^Z(X6$_1X`tlUT$DiAzwxy-sLEWmS z%9^Ass{d($>X$7uM^=O3+wW(m-zi6r;ilKB#N{nlA6xS>YQ7gU5$>CeV+G(0lCMqL z^s@Phi%zCHBXSF$xDyb@o!a55hIiI6G<_Ng`CLP(MMk9Z=ZNJKwk~vf_!>*-8;<9K zUY-sn+_~l>E1#t8JLz6X^v={o>iq(0exn{w@k)!JKr_3rgEI7o0@dWm>0_GN_|-y{ z#~MU1R#h;iUfPU8%|Qcy>|wZ{O`W zC9)iyeBnC8?<}Ls?;tQOOf$=PlRU3@Vz$@zZBlEV-pDG-F|_y{Ch=bL56zV%ck`%) z(}MfW12Lf5sc!Poa>OT{h788qO^Gnp#t{>4?E*LcFRCBF^_#V9mr}3zXlt)-Hj32W z^WUCdC%gN6ywMIVx$`S|7%D-wq6~Y6`c}}^W&GZHOumcyiz3G%rVm)_;rEMYERn5< z9~&Lc(FZiFkvsrn`V)6OulINjt+I=<#^O~)ahW-lW>J zXl~13i0&w2e~NMu{`FsX{^qS^-S(8cO3*}GV~W;pNy_UohgmWj<;__y*M2lk7@Z*`Ciz}%r^L4sbxJWV zFAfabN1NfYM_6zUQ_POX@kA0G7~>PHz?CNq`{{vAk0eGK(BE1$$eG`U+sn$_G8IYs zRjNIm#OU$Ht!M%7j91Fp#tk@) z!I~$!NvL;=f+g|pgDdKPa4f0J;6GT>-rv?sPK+fS1j|eUss+L?JNF-#w7C)?*=r*q zsl;B#$PLUK$;i}TzP$|_$k|jSpb)DmJ*{0D5J`7j;YFzjUe1Nv;mZk1C{_R#ppZ>K z4a^WpNoXnuN4b*`s{-RKDE|z^7KFFS0%%NxL{TDhL`~*4L8^BuANl+4QXb)OEtr*U zNJf9sO01$BA<`fCi5CvQyT zZ9z(dWHF&P#t7APjp!$iYWDuN$PJLPk3_}Me;gu^H30uAdcAmzM1yTEZdN z^_*rsYr5*Xmo5sxG!=gYKL45W+68yGAMsNn$}3gEI`U*7w)~#k3qm|FT4-*kONNl~ z!u4od6{}g8!0FDk(|K@m&8RPbam9yXmlD(smGZ~0j@U*^^Y%b;vi*{N^RtZc`2_R? z01rJ$rjr+~yb-OHm2N!vt$}#Z%eFN+I3tP7-AozE~`@Q|i2rQC#|einhS;V#%{v;#14l6~u8jwkF7 zk#S~mEA*XraQQlxBOv4Owm6w0E1k*xfhudUGn62+^Q)rUQw+O>PD*d@)!O#5eQMHN z)Uy-%(Z^#`v*2fE^7kHPZdfaiCQe;n6lIzCAnbahUv|^F`ZCEX>REx0NRI(DdWxpe z{Ke{k(k59p4+U(Q%2Mb{pe>_tYKMUY1@!$a-0>uA^_R~|&5uJr|Bx)=6iF?mH*zN( zo940Ag;k7Bq6b3}Gt;#g5{E0-{NHBN%R_;Bo;-J~6xr@CGky|4iB#NLPmmTE@O*;Q z$%rT4JF7O}WNY_eigVhC|0<<-IZ({Bo*3-gHkJLnJfAq`{8>NZg#Rn$Qx|nfdrjqP zmHglL5C1e()rHu`Qn3+sPMW0Nm&S|%LCWRHwf}JtcPz%#3Vh>Da=j|02o8^3DZZr` zwBPRMTkr<-NL33HO$A}I4`J6Lq0FU0F>YuiE%X~*@C!nm9|4yA<0aFeXCafX^`rO# zgt!!1Uk!X&cuhN)VE!w_BwFqD>q1D!yr!Vs8P)#JkS_h_Vn%~zdGdGmDxLbwDdi&u z2i4AmR#1FX&#SQwuq?1b5IR%+p|MOiGzoexZLKal-4c!##fBIY9pYPnLU2<9S7GnPZ zeM3g;Nk%3YKtD7CkF-87^hr&Mye~1GEabhmo0mU7sG1b&Be3sGsb+2mKsaYofT8nG3n)s;({cPu#PY-ERgTGIT;pgpZptI9& zR1oQd-P~@UMOz>|sEOzb`tiRK&38Hfoc^_ahip!AT|bcR{8P~Ut^CKkkB_}Bo}@g( z-yx!hKcTqqU>4P!+JFfAtpe~oB7WB>+rUqx0n32Uu33go3vs7HQbaKxNnpnDKOZ}S zW&MZIF3W>D_0wBOej1w%%WlxcxX*1yDLGE&kh4!JXtNFQRoP^af@bsiz&WY>{Vm8j zS>O3{vZP_o=-%JIe=WyWkD7j6P|T+3VBWt4y)%vh^`s4Ti&;vsiUQv$AuKjjK~{xm zX2ZxawH`)05L?&*b$3?az*D@-7C7iesw$zuCRjvCO70eXCNlj}f%=APSvj~PX8d1+ z9p}r;@nang<%jZrDG5)%m)MR0SFI=D!Y#is88e^YfbC_fuDQhKbybR zwlxR!J`?LW^^A7Gb`>R2mBb2L&%CZ;k7^B$VtOu~5$e#bpsybP(Hq8RMYe(5&w@KE ztTrg>kI2peI)TAEj0IiYkgkC0{;m{lFY*w^8eZcjoqaxffMq-rocOzIOC=`?T!hg z{CltpP|ph_r4PJkNJ)biEX+ocyztL}f(ObXciLM2#LszJkaX!?1QopPE3dZ|--IKm zFqE)BjYPSd-*OS~EAG@y_IkMNjxP*5sK^e-|i%!RX9*R8eQ~~F1 za3hzXSKT-XmwMU+jcQP)iTjPk7M>t5R6q!%p?crmDL|+;`q3yG*?8HsebfW*8ptP9 zBJ3%Wzj(rotMwZ+%<+io_rS5BD!zZ`HQoUUymX+kusI*Wl(7(*ykl&Mk$gUb;1-R> zz!Jc;edQkEC9pOLnt3(rfR?N~3J+%r&9AZvE8S)pb7BGDFNY?yt;L1I zM8$_Xw5>RWKHXH>+UeZdeWSYWnA#^H#Vi(2C&q$Fy8e5AtEt*__e{+)3UKYygPsO$ z$8e3yq}974u|ne^T}Lk?1aym)`)^w6LlX~jqG7&65>cq|E+=eO@#_r>eEIj(h7faF zrD!1~rwvp!O_&|(Ei;v7r}oIG-C5@YpXHjiHMd(XLC-9prsB+Z25ICyWcX|)4TGm`Z-5x-jKm%LRe{w4uiVWz~`C zKHf&>BCpHgb!^n2sDQOtZ_S_rlHI;di)>c=hu*hCCr8NyM0O*;WBJu`$br9%!hM*HVBJ?meNr}SAv+$y^7&Yyc$5F|FcnT<1a9=R6f86L9)qb;!O zPvDqu7uO2>`haGd>fhZS+khKbDh~Q!N*b+FzcP7#L6E%< zHA#O+Vwx`dOHK0nqKE3F>L>fSE#JvoC`{Z)I#!EU{=n>y*J>+PhmPUiH}9-HQtnUdko>YG ztyqjjXJ6Bolg7T2UM7)2(_27jiSl8}`jklTWsp*}ub08-)m{mv@c?hNVydM3u#CD# z*N`cI`|{7C*U$BHrRKd_SUaadM3P>Qm{F}kj+bfjm>UOA^B30a@wk|AyFY&JKOJ|E z$!+`JMNE^%gSBI4b6Lr8t*`n)6px*w4;^ZutU{TV`vAkb$CKi%D)5BT>jYXo4 z#v>()$e;debW^eY^{sr);?jBC9}~gXDeXaw<_Q`p3*rercFZUIB!~V{^316`#bLBq zNy8panl%8b*3+Rw4)Zjl9~u1@gx?zX=7C(f(QZNmaj9}$oGV|~53te1cS0|h;?PbRUN?pXvlDOpoXL48H6VyjaIIz{V|=vv%S zp@wj}5C47JyFI06KWtxYhzarHmhy2;d1Fp z`m<$#eZmf*kNl*7aL_V#y?M}b(yy$gx_{B%1s5Z>yXqBE#mBGc>gz=*3#!5;=vdXH zMUi7q#=rPJ`HA2KC`^{oaU>glHi|$TastWT1r;may!pj)HPIfh%pO_}Wpa5O>*HT= z>vNH^Z`pp)?CwBl#kx+NxwhDNNO49eJcsW+n5<{$auxn4y6%#)rmjw6eA?IAhUCs5 z@cbHc0J0js8FrJ8o);O%mF@zDdlAefto(EHr`N=?ZZBChX-$iKCFoJrUeD5J@IAKF z?DKhwTZ^Lc`KGMXiw1kwM~Leg>c}fMNt9bMr$Kci!iyB0vY$h3af|3<}qh)!Y)eK5WS&9`aIyBdW_t-pu$5%5lB2gL(3}_nW=bbrr2$*Xp7`U z@JAUYlqv!ibH{mv@xoUft&wJ5AK);SdO)R_w)W4XSQ+W{ut$VTds5go4yAKJI6n8* zZ+038v?-e;BGx6M$|NIZdiy1lrTKFvKldda9(wueJg$^G%72i4p{$PQ2bu&e_?Ac) zwfOHG+mWR(xA=3n$lIuKyK2#6yge-|UwUpaymqnD-G2;WGf_X|bDK}fyjI8IOMi;T z9b|v_><5h(@i`@-8!S6!kq32&P60a+qxHfk>Z6g`Hpx~yx9=UPUK2l50=K=GA}^sG zU*`^ooVmXG;F_1ZuFoa!0Bs*_OF;8Ll`$4YyAeXs@$#~)*sP5&kwxh`jusYtVrvFQtB~9jSaC1F>wZ z?D{;W7eKl?)!6%tu_ttoSKO0lQl}j|~szodUX^bd66z$y((8%V>{S`P=vw^G@^7cLkev=%}ZC2@>{PxDqrEdOZdN?sJ zPRW25oFDwc&E_we^v1`Oc*23a`i;wu+FNqxp>G5h+jq&Sma-na(rHt-#QmOL6OU#I zJ#xgXzbD7l+zz1F?t8lMYf~+;9b&CklK)>^t@;J80;$+U1I5ng%82=U)jhAjtqzj& z9Rkun2lr^?{f+Z1wy5e0p4RalBsSqWwHd=F!8A7U^S5FAy@Jp-&&_B-Oo}CR;gau9 zb#foOps73P{E ze*6=?Io-LXkw=8*M{lxy_TD<+N0d&W+6hM;41@*W z??oUO`uz=xxLuueimLC&M)>^;oxXk%>?vI)94AB&WAL*uxz(~ZAE=# zrN&6X15G&A2aWHndwDgaj155qM-0g3#WbsOvSxPe$tm9U(&ubfJW8j#yLU$yu!rrI zDqQ(kPp;syxSW)XIxWB1f?+I$biMkYw`3Ip|IXDFT0IqJzHn#jj|sk2A@pyzlyAN(_i zk^5;H`^Z z*qH}364wCyN0qUsB<*g?!#jb5T&03H#(?_Ii-pn z-w5CRKGdAlUaz1s2`4y82;Eyo$T&gvh1Q{lCgbzNc)e#>twK_f%YWC~VD`1-?-K}n z|LZA^&%mLA)P9L3ExCrcP%yqfS|M|Za2=!id=&ug;8Yu&oTOf1z@EY~+FZFe;7)<4Q9vfGQw z{&&$m5QWDIesIhw#ABZQgM6<;pWLN8>yK^d#Y&hCj6v+rskTjP@d=2FxQ^C&OAAsm ze3HqiZ!bw}W-(xMQC&z#Cv2Q+6O55YH<)<5+@Z23ftkkQ5ty|%)4_2LXT}lwE^;4w zyw1uai6D!c49;hMHXBLt>$C}Mse&eR$&zPH7h|moE;i??nys!o2e?L@J8XhqIgJpw z)h)h1XDDPe@4%ZF(Y*dyo1QUP1I)KD2X1LuF3hH$`M+%Wm)fXz{~UlZ)>Sqc@e_WDbJ&%z!wpb99_6LKUr}F`Du3J1sEJN$%&^I|y7z z0mF#Yj1iR%6`^TIdjI`|((bb<)5-0Ur2(KEWY7VJs$QlZAp!IX0GEK>m$#K}u zE+}4Fcl?)zJ}Nq?=ay`MC-*UNe$ypd>>9NNX{CNDuc2>ZZk5BZ|KGNn2wPN!)JX$#lQn>KdmN{LnzYDjB!1<>{D<#rfN za)k-w6Yvg6F1O$K*5_3zpe+*eXWHaHOT5>|ev0CdE?@FrytPms; zx4d!{m+Nyq+hT;AW#V+-o_8RjT#J{*yfVJ}sF~}tN0KvQX%xrk$dv0{(8Q|Yre74> za~IgB6s|s~u=r?dnj+3WFYX35X$y_%%Up5TpM!YJGz9SuoVgL6{3joh_8@Snl_+}U zG!GOq0i&XRZYCA*8OF-tE6y6>Iam^4)1sHD663^8{)I~mZmP5KEGP;~vTHwT0?)S#|sxnEkEBukY^{Nh?kA0rp`rb`dsK#{5F zQlp~A7^;?c|AhEvB91E+$MWPnPs}D&Q>OlK(^}h+3fmk3ZIKde#W~&`Drg%M{5gNz z;l^X5u9T2?%oXzD+FB0Ax_kyIv zNuQY0#TE&q@}_Nto)Ls^GQfVd_*xz12NZdD^#AD0$vv3fB=+pO$G&LOdmV!ir+O`qyQ)_xf9mv~O$aY) z{>0!m5g-C-bJ8^oouPiKQ7xExUA9g!i@E!4qX9wkQW-2wDc!VY^(vV8cnx0uE6$6! zF{8-n0pZ&TsQyFr)USfP_uK07#2dMj@|iOR3z&6Y7R8f}6CsNLMy{SiK^0d5f-ptM zvpw#tW%x5ooN)k2hZe&ojck#l=za9x6y&Ydwz5|j`t7^p2MzWWV-f@8 zi=+SGVe$m!Nfd(>G!BGB4aRfwlGrV$Y+icUVi{?ag-;k%P1s-?907eDm*B>EA3R1N z<-y7u5Cfn*Xk0AhKxd!YwRG)+Z*_ST_FRBiAm$!ijJdt`<0fHab7=)XJ92b=2yO>9 zY6H@>=qR_r6Y2u$!#5m9b^PM_hd|92-UM(IjVz#ER^oGxd_m&6jvp|+S@=TWYYM-( zPPQ`8;|7AlYw095X4Q!++$d>(!OOv9NoyteVGQ9E@(JBca45O=j19InRCt8(kO7>2 zJ7L#`lX!1$A3JQ1krQ`t_pQ(WaAck2x(2TwK(6?Ltg_U^ZXa@NYQk(_nj*-Yd0O14 zd0bCtA+Baw^5B@bGH#}P)$mIB`IyHqmnjT$U&gq5@Nun5bYz#-C7}cD- z6r_&ME|xaqNKU~H0WWct{-%8KrnM@WjH0cs3oaCvA}uGejE?ZHl#_P&1++RHrkh2a zA+ck}G0>c~#4D6s!lui|L?q&#X(2Bm70Jf6tH#H1neDXy77T27v~x@U`9lT4C23(F zFtub>k7EC$m4}^TvI%J9FJL2>0MD((Pr+_vqC{xYls1{=_D_&n^zSA6?=rHzVwXP_ z2gSM->#vRs<6kL+$lE``&)zeq&QAWoZU=5N{|>vg&aQB>NjxH?=E&In`GJmS-z`~l zhK&(6#{Gcvhu?hGiE60!#18d{N zG3d*Pw7YVWZDkSuT6sPO{?QvkvzUvEa9KEBD}1zJD?*ocx|FM|ck|C;Z)yE!e8jHw z6s`BG-~JXixB-&T5+lmO$%iNKjbtv`*1{872{v?*CjA<&8Jr|hfxgtWM+r7RH!fy$qEDB}WP z!{4}hN;*>u&&pq^yzqRM++DEV|CA6WJRDc<9{C8P9K!wmM5cYg`RlUd19sHW$hELCj`G!{Tqb<0Gmz6@e1%Q7Yh7EM&gEGfZX}+KpSGHa$9EG;CDkMux_c2 z{BQqlBnC48!<0g!usz5K+#v)zK9X2EaztpPj8(z@7hW>97)8XSRW{NP)| zQe(`w8=opKd^XXs7GO-aYX@FUd-Krwz(BB?Vrwya!%_j>nh`!K5!JH817KfGz=&vv zRWg_*mTzaTz3z*!4**f1SO}i@A;N}k4c{8ihx}}+hh>c6ksH(;_lqX41n-B}6z14c zWw8(>Md+_PAsww0CIgBmW;<$E(>ZYhk|p*$oaS@IRXC$8_b~9MFT%T4!MIS4eSFM_BwpA5k@v0RnDwAd zQtJiYf&WOGCrbjvLwrsl#0D)-_6m(1+K+qeY;7OyD@D|Nn_X$w(RD-l9-8 z+2gj*vQo0IE|KiL?=`YAZc^E9wO=O z^Ljtu&)0J-^y;Jcum9g7SJP$MWIf2d6ktCEAw%yx@16<3i=**u4=4Q~gR@|7uKueegDaw_6jcXvI^1K_E zj;&FAM686*4yg-x?IPl?X)61ibb-uf?-q|8YOmTGda%O_0inG3o-+kQl_ivuiApRg zT64jbQZNP{Nb9r+qhCu-0E1GLqgU9mN}Fq5{?phIag8Tfudcdxc#(430QVfsI&U(M z{bR_H|4gvPm+A+*!st+Y)kiv{qoeeA8>fxPE|E%(8_(onU%M*xrZJ=A-r)=C7Q|yb zgQxN}$ItUgLH=XhoL7brL%7@GWF}neq*-}r!I>ytwsX(aVLR>c=H+<2d|e(0=T_oI zC_Vdo`qn>yT>+Treo;`EwSJEpw1;>#-aGVd48bv*F|Odnd{*;PPCV zq@K34JNJq|iTiBN?qb|0w*smlMPI)Lc%)@Uk1-UlU)_#WB({px4KJR$B*U)PgkM2p z#qOlGuRurs?QgP#qTZ`0i=ntlfC}XqpYu58T=nm$JI?i<5g=88z%1Kp0?39K`r&tS z;KGMWaHg(Xqpu235|NWMatogWU;>@J7Xn*0zZiG?v6P&TdL7uOfJ(m4jV6yF%=>!J z8Mp1=^D&j1>KB91WxH6fy~9Hw6j_ubPlXNQmsCF~Wt_^92y@~Jsf4ES>7my$kkQje z-Hei*OT6f5c1$>-bmRG*pGDrm1#0f|VN}44Z|s;K`_`ce%k0e&gVkqKju#->z-HYK zN5gwAZD-GZ(2kDOQWbeDh54`ShXm%aW63e9^>*EqOW}LVaSzzi=_=A|`}S_Vfl#6r zQ-Mb|dDM}B$-$(ja1S-TqrX*%SVOuk^QY=fKYM-hWr~r<*EcXHcf0?fkb+3N)Rxx7 zbSOgaxZ39IsPoZ2&bbs>rPk-~^Q9dwkXW>hxyShUX855Nv$^PF2v^E-?CsydQJlux zl^i;A2J8HJwCJT8q(yC!%;^ZljUtPD# znUc20eeV8UBuW^BOA(Ai&tu}R>)+I)*ILZT>c5^3J#Frnpt2(xH0Ds;$XRvwH%ZED z_Y3A>>&hE#*l3)d%~AiU6!L9m>wq{?WzFgQm#$#6iPU!0#R~3FmxVq!HzMtX=k`Ng ztcWL~$~wLgvB>&w!e#zcMw8ZslX1;aMzmUWoh%Rb=1S$7|H{Q0jkJ}5J%@Rq@U4OC zvanj^1~!AFn{pPCP5S3sTTIWjjGLu~*Fc(Iuf0|f$Hdz4UhP^QFpgLadipVO{Miw` zhLswTw_z;mx!uNwwi%I*-!yGcI}a4JSV=xw($SgtJGLfRKUC&cD;SWgX>ShUsOFWlSNQ>pXQ?t0@TjP^DJ9aq<0 z8gz>j_JSoxd91qrl^+t&N5d>o(K&P)?~^cU7dF)0r~QvQlc-)^$ry^b0M^(QS%rao zM;QDC2gIaGEL*MbbUY!O`0^Fsk&UG~CXpU*a{pEY5@PkU(o=aX!V6XoXFxLU!YYc$vh6avaXTzCcY7YZ6OJJa^t)DC+dINE#VU+|vHeTv2sOfAlt3+d<#<%)d zj94E}R}Ns=sH7xq<~TT?i-}pJ@4F|7JtX#tzTZQfL=JN{1D3WVoa7=5=@u7%?7cwM zkgG0(2;!Q|Kti1F3 zJMkS+IId@vAdb{V);APKj(tU4Ns>vk$Tt3}5a2F&0`3V<0au+$Y$y1L`>k>G7WQcq!)~P-cDZ zVseVbqz%D&ngT;79krm(EEpQX+?;q#fC4HIvok)38q<7ml50i}`k0k+SL6)4-${+N z#H_JwBz-#r*#hoXGy`2;;nc-2LZ7M{0Zuxn%^T;l1>F!n!pHWGzCjm^@p*@4;J^e2 zUCJ;d`C0A3-YwEycb4^0#9e4n`sX@^g7TQp?4C;jD+)y(tZyR!ZEI8==%g>yM5Sj6 z#bdr|0HrZCKCU8G>i02y3%-@AKPi>b4Vr2A; zx#fFN+@fr{3~V4&-WYCJ9X}axt3nI2S%N4CHD3CcGIgV5HX3<22d%fM4j>|1El(B9%>G_w||2mM8kk(fMXe;6J! zzd<`X({8TmEU}TQMP3&Ac)`&lMozUI{kp`U4xQfsypM>&xmeg#Yo8JWKH_3)V6pPG1? ze=819J2?besOORJHbLcp_jem>Z)+Kj9{l~n=f}i47pt9Q+CBX3`57KOshd=bb{kd= zv{WhoS8n{qY*!z-F*ZuddF*4P=GUSVdV8V$>uz1hkkSqNtIBVZDb|nDyL(LRob?Lx z%cYT&?pDG7d|X7vVErm^5vL&ZD33%SnOIwu8JH2!qA4o7Vl36-HjEnO9UTK)iHmeawOj-?*eG@eu1ILX4O$J%- z1@yX8`Xc=K3dxRcfRvATutUTjM5pZEj%X=bKBiW*F=JTBFy^!Sp!`a>(9$5`rIU_v zvKw7i{h9q2inSIpP_a7^jvuHNzxX)WUa+!wyh)zNnX6>QalrWZBg3AYE^C3DY`j(u z%6C3n(>}#2N)!m%#UJ$H(R3=FHrIEUM%|u)18GI0B?x6L*-?V75qW)RnB(WoOF2*m z9{6O7Jfw>Tyu#)1h@GwG@XKRUn>=*Y*L$l2=9!UpZVaVApp*R`ab4-+`Nq5+4vhYFT=)MuKMF;}M6wXVE)BDg z)BJ3~Vb!d@ivqHteG(cA1uL*#{_8Cnkdd*s|Cz09^O8hEsOldt`&u4wz`e(cI3j_c z%%vB166mn4mL9dtw-R@AUxbp?)Sb3+DuyOFqRDFSTmpswneN5v@s^>b)S3&nB+R8C z(1r2WuEmRl*MYGJl( zCJ4`dY;X|Xu)k)K$d5^OWioz2k>T6hNyzX8_zT7y7X9Y19kjsK5%Ug^Z*siSv&JOk z#59nj9gV{jHJC#IdZ3i{^`s^>ySak&@1_KtKir_-oxpf>%(EJXK$6igk1>@ZtCr=q>LyXAwDQ24W5C{1e}7H5%C?gsn$ zai0zRtqpj>xfT89%|-8P^YwPTS6#I#fnP8yhfBFG?I+dI$N#ut#Bd(NmNn9wQa>j6 zKI6(BRBCL^OBJtfTCOenM24N;TgX7IhpIh2R@CWMdHax^p*(%V|5#DxB4}x73G?n3 zWb_BNfFeT^odfr}x7FLnfS&z=DTnnW9r-RYFSl)9uTOW^wSK8RGaJlex?AqGf3#83 zS?ClzKRDN?(~Q2Ye&gO>sn%do^dQ_gu?I$zXp6fpyHrn?X@;rAq0XF?0~m3qM5Zpx zlV8F~Tp{iU90J~e@hP`ZnBm5OUIwlu!IUno*^~q~2G*+=k%gq)o>(zEB6i+Y_s;<0 zq`X2;Wi>divRB7_?omxJ{RNtXWDndxs6ttFCcMWg7WN zNnOilXGs$8#x^3Vp8_;ctVlmEI1S`4bQQNZnoYXV4<^;D_I=4U#EUIZ1h}#U|y%NW|d+vI3057)GPJ1+?xzzgkskw_pqK7(Y&v)u z6Rcyx@-ePUrrk4@wrD~bFEV`kR8s?gqUvN7GxBJ@BO*R4so@WZA)48qa+ zHR~?DV@L0Io_(2wSGSGMdaq>umhI%oPgB8`ejA6;Vg1V6QY(w`Nt(nc{KuFg&bP0g zzA5$T`{%r2dG!)HHluV~CUu*BfN{{WLf0K}=E~o(@?2g0s+>QtSU7dy1&tw&8~gq# zk{*ChAM+-aoPFKixvDCt@j zY11rh8t^*f;Ei8EL+$6V$cOS?0NZad7`m-!Fvsh&qaYo1Z6M;z4=IkiDhUcZdWRC@ zf@-tBJ=TZKbJ+7@=vjP@>Cz0=+f@2qS0b7487H*g;K0@@1Exr|IFy|ltvj#B>^qlS zcGA1g#ItxmS3)2^g)KqCA)IHSKkeHIb&wbn5K(UBvkncvi^`M^!#>SAm@oZqDPoqD zRCEVcZn=7x0TJ5J+c`^_eR#2BLgDofk)Sb#24w&w-UN0RgK;haL?oN6-g=P|!^N&H zs#od~-H}(Cg}Q&+_r}DVG+*D~nCi>20}2IDq}$n)7>u{ZW{QDGcEF$J>)G_&Wl?%X z6L8E8@maVr)%8l#t3=jNyG;GxcZp~;u+JlR9x!>bvH;C6`r?zNfkcND`PydfN;vtVj8 z+{m;TEgU(CJl}EP7yk09=alHR4LGZ~0J-Q%0z-f+yK1pV>c8y&0>_<$9iJ@N$qdG{ zZT=umd!5}%k8&u55jyd=bz5ThpZS!{xSZUQK-34Wr~Qopo4TM72Oc%Yh^@5&L1rUu zc*8Q8wA+OZr(`KW2O9@gwTClV%#jpkTiQ8Wht4%+u9(zkROpSgYfN>`=L0HM|HQWD z>z>!wZ9Kl#x24IqxLx3i2n)+wY@hwzyEXcj6}&(#3fb(Bq07#z2&&U}>1V)k$Gu-% zOEzfvGB_#dh~EOI4}IUZX;3A%Fuz%G-&&EH0>47f^qz5^%T8i-w0EVp^ItUJn`t-E zt(iV)AEM4(aR>JUOG-p6l*g>pBndgE?>*LhRSOg=@9XDr#%hmY`WdYQcbzyg{d$hN zztDNS(6gKVFE|@vOR^R(Onl{|iEC@soGd;~LiN!jwf z@J$cv{yw~Ru_g}_W` z)kNizYs2ghM^(;&FAFAsZnKFjp1T%9=m%kt46HB%UnWB$chV|myQnr=Vy?ti{;djg}`LIp(N z;VNXSrV%L36CBS4$Aam@PP4L*Ev9;wy>Ak;hhas0kIwL?SuKRbOiABZ@8bd2z%6?B zj6;00^Iir1o%9+z_{6o;5jYO5U|t#GIA;97x9SN|ExQ;X1Ak8Ts|reQ7jv~&918CW zaDM#i9Rv2F4#~8(@pajuS8$N%LkFr?=$%<{e-vib&Rs;u3Ub59M>0dKHi0DTit&XT zlldMB`|AZWlr+>2xgRvJBMae%5#9W-U;G!_2eZxGr$1 zj}~?6&eBGS4Cd2iUZ0dT)hLAXFiewDwocj@gk@DcTuTB0if#E#plg?2k`$!pt8$WU45HG z&1-ZK`{H;2^w~oWc7V`Y9SUiuV%YyZNs4Qe(D3X3P^}9|_GdOlfRCUatSku={tm;y zW|}ZRVdfEh$Eu9}1ScXw+}(FxZ!T^1*F5c%X3f!qF6PHmc|4fMWZPq&G2pt?l0!^^ zX*bimeH)egSJU*^Dx9JN>FwaphqSsFe4sS$;sB+D-?^zC>+{xLIu}A0@Pmkhv8<-#Hd{~UYxDtQyWcrO7AlR4Nes3 z7LumX`518pj9(*7y`XbtxLG-+8zenE?EQK6Z7m4tM@?V$jUw)ElI_2CMchIkC9k&@ zUQ@fWM=|`-_b?}}kskk0A7;(FfPR_wV?{6#(4?@F((w6Bpt!r z$&GrEQ{22L%5wchcMhkl(stmt^tHADFl3Z1?9oXIg!tqYZr2vys7uS$J_-&?nhs!Ct*Br3`aMCd3nT zh;bB+dtj?M7PO!_MO!m087jQmErQsl_Vpks&<}tcb3-y}U@Z$SOVy_5p#IaYGx~eI zOimowGxl!&XOhw|gbU-u_;)Voys>3|cDqH*mGE{<;_--<|6NNj;PayMi_B4C;zeob zbhucZrh2Ii_1crISBlr>_Ss>4_EuY^qQ?bAZD-|r$c8<1uCY;kT-DoB%VsOnKy<=9 z?P)66#B>3fyeL=h6XucF=CUC8I%zEVgLeQi#v~@80lHtb>9IYSSu1~o2A7Z!m7DWaD zW=FgSXG81Rnb0T(o)qJKARe$QLF2&jOZxcJ-!{$sXXLmM643i^|@+V=LWsze*M7}q*=K; zr#wit3^-rLlmR*V;WynPqCJIwi-70VHsfx;kLE$tUrDkpT~%s>$vAK7uXpu@58Lo! z?^pHJ8nC`P$@=M$`qIXe+@Ce*X$dF#xu6>(zVo(d_e?mtNOkYjQET^PPMeBSSZBej zyyR06!!SRBPrS+l(^_aHdP(s9%C${cgSz*jvXOO3ypV1gL5~TZ*SknS^hrygT2pe_D8?DLip{TitnH5Ae;tMlVQby>IAv)VtaHN$%Q- zm)eMT<2t*DjE$2`b${fdSS`Sp0o}QjaPY%JLsYV8m-d&H#qq0!q6tRTy-%3)e~=GwGUCJ>^~<7S`dDLIj1;@`mk@7E5%DxtPb6p=kRmLr9RT(W#6 zx-?q&WFd#@?#%&m(<;=XFRjFqe-3BgHI}L78ScCpd#(21lL8}D*EoD7W8BshGn3wV z-0p#jCs}OZQ%$E>EN6!l#|r1GXIUGVAw*j?l&C41yWhZm+=+bUo4|ah)>7QQ1=OeTad}Z{uj`_UElO3Ov=I_gwQvg~ zb~hCZ;)|5nXs@Ep>so`9!rs=9;PuZ3B?MH8&!~++)_*-;ebe3@y8EA53mR-Y1QGY# z?Qs|mGZU^X^AUFR{fC74orA_l3A#eUhuTXPtd|~ib@kSx*6&`fqDbvAOnN9yOQK5yQ* z4TM|STpCxmXTTkDJRLpcuG#g4Z>z|Uena6Zm$ILo){KI+dsaH?YGt15h4r_+s_7`-sC(Rj@jGSRIwD7^CF3Za&&t{qyxqqT2ZinnWeeKTpWf2Aqi5 zr;v&tt!AW;0o5o1kBi0Noux#~#`oHUwFRidq@$B9Zq@%A)C&hMviGLoL%OJ46;kSR zvsC0THzqV%>af48Egy3K288~6FFl`xxSdFUd3t>&_YLtZrZTdbDmat>Ut!otfo3vY zeu<-_847pg6K4D=?sLGlpGDY4T%7BvYeQOfD&%8?3{1R)h|9i5gha8WMIn1YLFk{& zRhcV_UQ673siv)PyM;IjPlEp*E#*wA16&pwvurDn}3XB}g&HJ!)BSc`2*3 ze=K<6TrFA>c;))O7q4gX&dm~JUcb@9B*0F6RMQbxH?~xXwnGaf zclDXUfW@IS^Q%9`fTPA>;H@R{80;b0|3AI6JuiN>AZ_<-*R&BG!Wz%J{|kllsP& zM_+E$%-NoqNNLw%9r51f_iV?u_u@j_f2`HZ&Bv}7>DLEBeaEj(&4;;Pd@;lm@i)c3 zk7H&X<0uS9Zcxv+eynuaT2vS*0ll7;jmb$pXM>Hg%}g~^|A__`raUwyXE~B@9wpS@N6qVaC8>J&IhcAuUpf853~75&YvJVZgyn4F=w$xzTPq^IJM zd$iZ`K2@P%5A#d{_gx($@h9q)WY^{6sNkfYrntwCe(l*z(sXk%$E5XdM_7l(;G20> zfFjR6NrdW23yGB+yB#i>v-oYQZRRtHon55SIkk86qxnFeCbQzE;w;YHQM{p!2N+*3 zW~!Mma9!BWGH5MI@a=zK8ZSo$zL>rAQIZ|!(z0K&F_-U}JL@ld*8YChdD(^T{HVyb zD}>p^N%t(|5W+ERN2}{t2syb~*~j^1{T+^eQB!=^NAMCiX1>7K`Gwf(hs}?kOr%Ef z$Nrk<^k!kLJ<$dA_k-4TX-PwC3Zs7z>14bfG{t%5b<%&7_fk?r1-6s5_Lehrf)4Z! z5r-uabXHg^vJG#TX1bO-Hn{Qy zj`^T5tr9)&Vie&lll+u-K*lewR7t1mk?dLX5b2{1+dP}&j}jj3NE#?#1fDz(P}!hlZc;rRoNBJeYPovK$VPR9CVWl z`F!XXA)5^ysP*me_||e6q9Xe<2g^Ef;ckabS>WsogZhMwK7(M2TG>POhh6&$Maf-=g~G98k*wl1EYEc`0e zj$qNS-)D(AXDUX?!$P*J%ye=tmeZr ze4BHmxD_#K0TR&3Occa(8Anq2PbdXnQ!*V@$H7}Z6#e;}qVBwI!h(Mz5e zG_{f2=e6AGwHQC#K_Uc0w_R};-^CSJ`WmC{pJYE=x_USKP4c)Do44hbK1-OqsV4e$ zaC1U3bI(aOl%>ruZgK3S2h-njuxF;zq>M%}?^LrV)TfE^0rYUTR%0(=3Kf8CzZY|xi^yr#2oEEQe#lvStkZ0=V zSJ0_G^LpqYPN3a}YdzItdjAd~*jL=Ax}+v?(q%DTob_F^x0h(s1*x#r^H<|k3Q?5j z5x>+irplf`K$i7~2{5B(qMg5EyWOVL1ynxXjcMnRC+H|zpLlBN&{!jjC^=Y|wS~zg z{W}a#5PEv%6V=Y|zrVv`5t82q%QXdh6MdcEwhxIE$#9d;4aG(=BX}>VC2Ql0?3|KP z&?M0y^gcn;aA$)(bp(@^BHq1uFd=OM`84JYuki@dGYbjg&sPp|2ue8p}}7 zlBO90FgNDnG|FPUA#sLNx8_~!FxxVR-B&2VDc7bYBs#J~u~z5R;#@onm-s8A+-(O< zpiX%1=X|6TvK^0ul|OZy-;H0(R*PVJwf$bW=9wP(0j6B5E+1^Sg-H?NX1+6UH95qu zro<`GFq;)l?$|2fE8hwux)@rTRyo*h_T=F3;;G2cd6-HHkoV6@3wMp0xg?D=Y<}!G-}$1rc>Fo$CUBzin3z;o$4`F-PBX#-x??}I zsLsZu9>H+)04#@E@Z|fZTv0<+>?pJjlzptRmT4j#?4h|M3Ys9GuE*AjEGn~!SI*Aw zsz1`Ksk{--`(-icN3`JGCWRxHj_X3#5;bVz7riSG?;Z69pV6K#hM1N)N$^aRnJZq}n_LEnj6vHxSb$=Kwk`RBs51Bs469}=j_uh2 ziE~ZR)30L)4TaZV7k`XWhh!h5izsL${`mF|VPDg#TRqEiQl9R!plcj!eM{iAdOpT` zglC-==;jHqAi;PNyiG&_;6}wFVtD4SzMJ<1>z+iNEVN!TY4V~T{&k0kD$=Rrqg1CQ zD3jng@SbQG$R9C;pHCMKTyQOR7yz};%B!`CNN|*TF}E1=(is><3C*o66KHHQ6Xk65 zrzSD`R|;$M|S-U2H3xmkpKNTDhyceCYkc!ZR&ufN;*oSM2O~1*dXC& zF^b2f2?Yb9ax!WWGeoB@Anu*2%zEZ-Blfny;-=CNrfLS1Q6D`o`{2{gW*(leObphC z@!dMx4nAx31nZK*1| zqaVKha6!uGezQ`x=9pLkf!HdFQ0`m$mpQJu+}j_<`iwL;d$b^8z`d|?&-|_U4_hew z#CFD=Ydvl4eR6@ilSWO4;edbU$hiwkPqsc^Nn+KmvaRDa<@DCLanOtxl9H?5c!4=jE(QQdSiX z^L@Y%qmM|}{An`!=pb&yzsvPB?+NLZL-Mb=0T#4Tb&KxG`~%kO6+oK7Eq*<&7j5S% z+rDhYssI|+ehEHz@AJT8olmHtQrl*fn3pB;O(d{a~B;3I}OCCzvt*P!let(Li+`d8n>wiWyQrW!7c zyX2;vvgvB|WPY&+vv(+ih+FMLC)q#_c*_97u>7X%e!O9Qq4l|^!<3W7uAg*hF9rg% z+Jp+3MOU7jWha5+;2t65GOsE^dQyZc1%EG0yQF9qJpN#6oABD9d_#m;5wg8e@oUyL zhXkjS9&jF6Ym+CXz$4-`P)V}Z|uD^IEocT2ykr7H9+-W$p%A*iuWmHO~*uB>aL zu8+_~^T>A$R`G}gZ@QciEiuDL3{BmmAI^Qhc8edO{5iY)*Vl}7+L~d{y1J8l$ltSFA@Ay#W$v*Ze|^E z|I|_<{NwUEnr?$sw2O<2~;Yq`6YuJtxNo$AQ z&jxBY!+6_3c@x_pt&s*pWuxhl{Ljdb@-r z;7hHeR(-%xj5EKMmY3ReteckygeM^q+qG*dwYoxxQZUv*mUaf+3*b8pK>cEye(}4C z@oy|0o}*50Q+x$0%G^Rge-)xX#ZUPZLQIHO1j2@49pDyiPXaA zeFI+Y(0vPu!p;VUJ$>vdsKE#PS)%o?A*uOg5=)CZy6}IuTp^F!o$(6Cn}Q}mo_B8| zA7v3wv+3TAIJ}u!t<*~+FZsV$?k5D4T^S%kCQQt>b!aL-sTVoT<{7z=1`MD?HUEQb zz7}1i(6!eg&#rCOd_FWoL239LkG=&?{*KY3ryfizjkZ~}aTD_+{(e^Nv$vo@5COE= z2wKJ-OzuIkPmgb_!?&CE@#^lqZa1V#!l13(Sslo4(4GJEW~}~9NSQHczFHW=w1tY) z4m!p}UQC)ELc{9`qHGSsm-}*iJ#wejb`HXt4?{;fK6b%&3%zdGG3xISp3if*bMA#KVaI_~Wm7`w{}nxC2Z_k$`zX zhgcG&2S3qGbgtA3>v(<$jCgsNJyc}G;}PP-XgNn7VxsECO!wY%J$i4-S?Yj(mf%hF zb4A@>4yg557q9R_#VLmZy&l#&buFYh_dkaSQCMMI-wTj<=h8?!&-_fCNWEJ4Zza9H zM`2vjJ^!6r&WQX+1Gxenv(=eNIHZLtsO)u!%UZbri zz2KmL$Gjj44(kV!q>#8*>%F<~e|1=?!FKp9)62ZN-~Db40bu0$PAhc59os%0c)hiu zThHcMf>fSHE;Dh;UO0lgN^DK~#GP%!Vh7$QNQ?{)(y{9r|UNMOONDwb8F2k>VpG>`jpO^*b{=h9*oUJc#QT z4N-sDqr)$8z2||tqC!cUsD%p@2Oc(6U$$z*?ybx%A$hzg-}Z~XV~Jx|k~c8WxQ)Jj z#SyZkq|c%j-$h(s*Tox06JLYZd-Ml$1%!m{KZiYRzR*C4(J!syE7~oKm~tAiQzh?z zK(aBMMY*>nc>TL#VyGSYxp%_YsyH!h2?vFqx!+h~>NJlh`Csk#xxK0>>#&G?x_cq| zz^0}h^RE@b9Mbc=VH){uu2tsMiGY6IzO>%G9K9;JKPq_Kq!|9FJ7`}TkRATb8smC5 zp+Ud@#r3ITUt4>3E>C7b%Il^QYt7Ap>cJn2EItc=E>f5NCF*`VeP;BO`%=wZ-R`yf zNsz-V!xcda?_-^rWvGNFP7uEC z)4P9v+HuK?YNE59Jg^{fcVTpy?6>*K?~abC`nwBAYP9icluQs4 z0oEwMXd%9S-{d1Y#AB>|GmnN$C2&KIkfYxLg7f=kOvc@Grr5}Qd#9eWEPnC?COJvd zM-&pzf+%aZ(2>5(Gvr?)w)BEPhoYALvvKNEUrtAcIJO(?$tWL`FL%jY`)2EVu-KqtCIK{I^fWGREcbjmP{i`yJtet+Q+R z1zCj1&MaeS+Ro8Dd&0L1C+?ImCeHPKKW?5K@MU_`yr4KVrJ)?s=;c4H@ztFs8Ugk? zostxgy?<%@i9~-8xd>u4`%{(JIk^)`!^IlA-bG48ENK*#lI7_C6`22VFQA0GWToPi`MoiDObXi>paGo)mQ>LP(yOFc7VgyL3Wl|0bPFMmd zm_{gIj!gs{O=_`R|8p7)(t~)zYEva@?2z+pwSc)vtYfz^*`% zLmbDF;CHwxLrR$`?nUEI(yN$WDcuzfLMdWnaTVb!G71<l-@DSiKUy>Z6Q}SdS{+@zH(Zn#is*NwdD?c53qAK# z?077&{=*zCY7=Q7mZv|aoGtS`33r|}YL+MaQE3t1nt@DLr;Xg6vJ+{v)Etjf2tQQF zBIr_h>NXQ`Ky3P47na8Kq+^| z{l~|cp{prwsrz)H+?&<;f_jEOohVO~o<|j9?h-0}Z*?Cl)cwJ3HOAzEb}r}?A`^No2Lr?UNi-zRRV`>9=i+eqDG~yV*^LlTU*T();|yq zVMChFskKXQ5`GvEP>POOXHH47cdcr<{N1ddJpEy~IR;aI&V{a7m2Jk!LvUy{v}XKw z`@GH*J3;hldIkMI$w)4F)kT1)yx&id8Z{y9r+7&3bK*P8kndBlG0f-hvv{B{JotKE z2d&E#`@qL%$*zMoCb=;Bu;rVYrztkH{o@=7;hgUl7^o+yM-Bd>Tt~o>4?^BuPJiS44VfrdcJHu!0iJ0cb<~Jx`%^u^YqtI(^W)ctju?`Qacrw5T}{jgD2s)GroVX;y`?9p>=5ZbO z(h&o&Ua%+AG2P1S`?HuQEN1oq4-@gn5{?!uB?>S(T@)?ml%21Mf?;~N9_sIU&(XzMzt2@=8gy<1k6gw*Mdwk4YC zUoCTM>GfBLZwz@t#zAc$TDmAtaSE)}I_N~GqL;)o4Ta4zJK8vA!|0UrZw_>~1wU^b zK1=Z5lO&vr#W=Etsz~rLvXZ3~m+ZsoaCh3YxzhG4a6hlVoxUG54T+R4Hd6S{`fSoO z=zADccL~q^KrVrMKkzuHI8}>(d;j9OC+`Y-x9LFG>S6RUEJI{Tp7&FMv*Ysp=z4c6 zi7QYJ6GQ4&k*{EE3G+7!h4$Q}Z8f`h78BGyFbHlz420hlCl8l|TDk~64SQUrSDta? z%pp&+8-KKY4RF+*GyLZPOE!}((LP=B)Ay(CK!@HXY-(u*Ncgk+4vOP9otUElVbf6X zt6I(0hTJUlE5bGR|*J{K)rLXK@U&Oj!rr1a03c8QO#RjP#MNi$2>%@ma{CwK! z&>nc$eChP{LX-H@x|sXk{SK$hbZ$pR0(oajy91#{)iGg@UEvo!zie1HZk{0I-=5Qj zYRM!AzK5WrFRpbN6mJG|jW?5C`E++i{q6 zo3|y<=X4UXc^B$H4)NX#S1zY2Bz1;JVOHPJCZuqKCQVzqP;#rCVn#dW$_e(dD(>y4 ztps@H>^*S!KiGKL!1{85EJY_5`Z!G+YIyt93N$cvpZ|BR!fONZ773(OX5OUxOS2!Y z_}y$FUx8|B=XB=gSy>b_#CG!D*RxHPFROPK#_x`0h(LZP2KMv^L9PQ$NZdBdJ=?5% zzF1pbw~FIlIc{Ij)z)MnZtcp@9j(O=yms)W8IB1zyl z5E%Q&Od;<1PWUmGOALRC;ZnBeiz8dfK1;uVtYn?&{at(unKY^UQe-f;iNYhwb~q|e zMt6oLA#B<1>YDc%yP1@C*n@{|&_R4Lk^fYb7A#zH%h@z%6SG8|xBg9LW2E7u7rR~0 z$IHe~LnkYRYD{^Y+0!msyZQ9V-1V~rONADGz=F;*+?ih7s(6~60^W473DLFm2;zY( z>XnRcFEr5!?a86b&cAJ?lf!g2-+YMUXbp{l*MHf8L#S#rCLJVLqphJFMAxMar6>;^ zutAf0wtc=kDnmSa1G>`d75d_4LI``=mFI=459+8xU*CGp&sdHhs@||4%cz8cv z87ycilgh-}9x3g=ToU=;Iloltvp22(iVRHx6h(QRQ_`kh)G#L2$k7@<*R76BjjQ)( zha={j4$Jopcblo|()At2_eY9?z#%kPLz?x&s=JJ>^Q2$VPKi20cb|$4WH%QKP-TQ_>nC=HKv-jq70E#!WQm|tS8a0 zviwm;*1+b9L&Z#c*B%`|I~GiLj4aT%SJ#ZFv3W7P*HGK4DsOT16|Nv@Se4+)o=xN~ zNZJ?Xmbu+|xN(KP)7HN-DQVd1@9p7s_E7x5F7@0GGckxL2LI9re72HJEGp#Y-;X98 ztnPw&z#cvl2A;ZM;N;1QJM!!W%pW){Uwp72h8f-E5CLq5X{jLLo^Bz-Grl?letU&H zy~(5eX~y)y87Aopk^AYLJgfpZRIL-GpGIx{bA;9TXvpT8W>}|3SmVR9(r3f&Sh5{C zeaWCV|FGxf%g<;1S8yp^uYgw!*DT42|FV>%H*~_G=Vsw0AMZ`fWH_LMdpBcw)otg9 z-h}k6O$nP^Ti*M2X))2%RC`}zRh!Y}WYi4zN|?$=Pj}zG@l)&kvo~RZi@u$RmF%7=jf**sbP1W{7Lvw~ zdeC8ip2t;U9CXnH+~lDHS)Dowtk+7|ZgTwD$-aL^SsK0WeO+p*yUIsNr6jyhLagMM zqCT`xk^bhs%2$;^_*C)YevOicvumAh;I!19la|JP^&wL(M==8vhA5bJ8~is}t1s(? ztN&{Ba^aWIMMON~cV`78AfOd-Q1I_Wl^#j78#;JZM~s{ke_&<%$HJ@ezG#!Aqpj(* z;w&+}?Ji9I5_a!=D)%@rY?)6b&&a9c&YVZJb1Vfn*Ne5^za*FUk!O%Cflu91J`lAn z*L{S#?$+0J$cvnzUtL7ow+AvaO&ixOx0qh=(+=Xeb28fDXPMOCdoS2o#*Vi&c0C!L z+%@@qxy_Wv|8NP>sLJO?~zgjha+#SC_w_T zssjmvNqd~X;EM75ye0L->SWP4VtaW1-e)|W>u^OD6(ECcaE563l`Pc6zx4ME(I?$e z4kWvUtd#CfWNNODg5qYzf>1hveP4xW7a!L2eIU};g+11EZFw{EJM~uCRQp~(zHt>c z;K?MVJ4a%NIKIf7m2u!7pqs^;UfO{1x>rO0lAGl|qJ-=Us$RZs`1j&D)zogUx#amd zFNP{m$`aXqHPg=RN4n+mm#I5tEOJJ5-ZrbX=T`QNrEsf8__o~=gSO>PtaE7`xW@#< zEU2va2crP_DzrP~nRr8CO_Xl2yZHy$J~8OH-?WURU=h7PH2Z?7^$!z@-+flTLDs+N5=OU(k#BW7#)6W~+u2Lt2*blN%aHc?M@| zAcgR{<1x0d8hYw}r;^>*%4g456Fx>)KRFh{MoPvg=5 zQ9_dBlV%l{t0yu#-hZre?b5Q4ruFXH&MM+hVcZ~h8x%@C?=;%{KJ=CoWY_zgtBui9 z#5`SbWLCOjkb(sXT!kwi1LDqdlFN^vJ1qNrtkORqH1WG+6F4>AbcBZi$03q13O=vM z#odLATgiGUQH3L)CG1<|$IB*?%d?)3c#!(n#(rAF-XUbE)Yi z-u~N6m(XE?RLwc@;LvFJhYrFU;iz|=^;7Qh{o|1nwtf7jbuFuvsdx=js-ZgdJFvG_ zk3QT^M^pC^PAqrNqcxFZkuMVhKFcIk!eh0gF8cXB&WdkT7S3hC56hPZ&8y@|yPbdc z?crF@y=L}5hOH_|iRcQ9E^ht>i>oG6SIBYzM{5aFF=Mg(@O7CVCoe2+b7t83+>510 zbnR(ZgOp}m$1XyENkVGBT^!y-dL1XkvLfSOD3y$Q)0uvO0j|OBU;e?jMg6SSuq~Leuh=0E$KDyjH*_iQ-8MW z(3#Yqo4KR2*M$fQsRt8sCcGYaeAO>p(cPAmI2=3r5aGQlaudIge*d-J#%1%w3hbwW znpAJYpZsPX!^D;=&MtMBvbK z#rPXlhY0~U>!AQ7bD;`f$74xn^2G$twV9#O7BCu6EYuAhT5xITMJ;vWNK(PYk9=;x z7aeZB3&R}*t%$)AyGolDQxv3y>+^{$e6=0P)Cv-0+R=M_L&ZnZdu6(gv6|E}a_L=s8$2Yed+4RtetO{8duCu+4SH9l7SzG6a)SPH3BA^~@bB9j<71z6 z+NqBA+CligqSNMAn(@(zJDK(hPPs!tZkb!?9jS+%o#vYE1q{SJ&g-syLcUM(j^Ng} zoEY9(MIEJ$zneXHmUOS^$0fxzW5PQ8fv6H_cV{e#O6y`sbVS6 zne6v#t{Z(5SDhoechAc|V>Q-1G`N~t_L1hQyW!0TGiIK*i2v7vH+91><_ zk2g46f=b6#|3-H!OIy5qPiBwZTxTg86gP1A$97BsUEOfksOv!4pXX7NBppXBW8E;J zTbFfphd+$?6Ys1nJ%J$&(Got!@jrdp&c!{8zGyYAk{QmCt%;C?x=7FEOb2YAjam+5#5NuykBZb?2 zOSoT^?DB+nyVeZX`Mi@VB*`gVt!wFN`Xgs8nDFF??%`*`GriEi&BZjjtBcC~4cKeHNPjJG;6jkt?6CPr~S2Lw4k%v*xj9J%3-I5#+yg9J;t>2J+ z8MEGg*=}oLUJ8%b%IHoTyb)bO_FXa@-XhHh+NtSGozMOx0krgvnBSlKBo5baGgRLJ zB_i9J>@X|koPDIkBH$^b#KqV8vW%TV@)LHtZogvZBJ)|~hl8R75lE?L>ifFSk4!*s zadp-9mJ4%zJ%i`Gaa*N$wh$p0htIM97F`}`oQv1BJI5B5MNjRTQuv2C^T1U~t|4>^ zs^47{2NJE*_r6oL+3G`Lg()mIQzyF5^S;hyGhO+%{Q@O(noIux1R7HJ)xZ<|oR$rx zs{%d>71qaQdQ}U%Ijz-dHmU7rIfbNx``?M{9)K@2*_YOt9sk6e*%4_=sSBJQUi;Rc zQKp@V5hYPBZ08uHbQkZcHx1Xe-<3|Zi+fi5-TG|YWz!O##Yh3oEqdXU&!T+AUG03| zE_W)l&X?NH#Yjxr%9*&cK*dILrM(NufS8@I#{r*NX26qL zg3P$V&`D4F%dp^vQq_-J5%8*CDjDRj4gc6m!4`MVE^`%oEt|dshHd=u`KMwPBVy)E zwl>nHDzQIvdLynt=F42s|Avh_xlyg{7n;kf(~i#zgORN*fl`=qpKo(peJ5T_%YpBJ zSG`GU1M@8C_o`Ygo2U?IBq7-)F`HyZHFJQymkw7I#bci>&*o1}X6xMJTcW&!iCx18 z`)2NxEe@FFRjnfKilV4;ro zw@W_~qnfFY(xSJ~^Do9T#+Me+$LJFJWqM(R=MiGB5A|~v&%Urk;-vHswEuvF5)Hl1 z?zI?0k0ePlaD_(?mRlW~C|JH{l|&& z8&eXJco!Xjc*sWO3EM4(w{RN`&xhb*X9x0Wh<(MIA2Zk_3+~Mi5<<( z0i2F_*{P}20{M6tZwj4DsP@Of&XQr4q_@o?SW95Z5-3tZ6Y|o5hR>q1skr}H@`SX! z@P}U1j>yN-mw>Sbz(VYxQT|0cU&08NK4b_J9h_OMuz)(vJE!=-LLH|WB51^R_!RAE;XEELf#9vD0VSg?N z_@B3CIj`FO+T?M6TPPiGOmz;>POYGd#6DI#hO`)8H7QW1Nlq~N-#E;NnuBJkr2}Av z#dK)Jq8x|e&p$v{_P-XApJAdrQQs#Ood#HYkDD%!h`~A0mRmbl5_f1%*P$UPR z*^v-ymN;gBE$8!v*R!&9g6cY)lGN#X&wFhfFr_*U^M@W4%P>u6EWF&~uIj?}UV@if zdR0Kx*AAzB4ASDA?2xZ};q3lS2$EQxxv=c$-07D$?BI~Mc`9Gds%xt5E5O*-b$rmt zkgqaO6y4Y71-d=|2_fd@93NEOs2!-Eb-&A=d(KCI$vK!-?S}P7+RO)ZBj<$g9=aFp zTI{f?l$Q;t&F0?z?V|ezD#Y!umCCr9{8L)t^TZ{TM;Vn}-^&kT58fO9d8nV04qTPq z0U#K(lMYePU^;?&h=8`!fdNzt;jS$rL;^lvYsLCP!h<_dL}D}An?B{7`pDO|N-%yd z%S`f9PbDS=+>F~OHad$#L?2bQQLC(Y-=i2@ z_btHj9d5(U6c3@fz}`jDDh;3HeYGc!H_^!c{NWNwy)^QO6&SVT;t{o14jUk~Ih!u8 z=KgVt0!mRCagVUKl=pN_c9-FvmmhSG&CHRE5`H-Hc3r>#`Iytd`hMyJ1f#CIajH>l@dhVhNgih7jFU1eP2}F}gE2T&sw(M*3`0 zU~NCtS7GTQ=$5hz4MWKxwXV-X?KExv>u{W@6!#Fvh-NfVnXW2_TjBJSO;USE9gPOlB;v1%C2bx_?d6rY5>ZUe#|Hzq6D-5Q75i;!9_Rh2VEL0fMCc5%j)`=m5bm z-=;x^cAjX&$F5n)P0_izgQx(Tzs8paKo6?{!R?FCgSm%#wKR*-+y^7SuMVmvcpSlR z4%;=6+1cjyWLW=O;zW+K;J7;1rYQiiba%Odx&i0I=AgN5WIRuiI_hh_2!GAAY{-{= zrRi4)7MR+6%PwHKr2F;Vf2e$*#oRoAdk^ zP-DKDu&)zs>Fb;=+T);R)P66IW02&l5t2XF^anwVkmJFl_6gLIEK|)gvWj(JHtg?$ zyIAhGYt&2_wM`KA<1Vru>iBnI=mBSZ2qaf#nL9%%+@6C*AZ1_y^+@UcL0xI-neiRYU&4yd=sb z0_om3yX)G=u+F7qje~_V>#5=I8@`ufq9VCkGJb@0{`ncMT(1AU3KL>!mps2m@_;U; z$0?fg1fGYHV(ZC}D4-ctQp|!BUY4*~vj1!RR#T3CVL8bttmT!O*@4Cf1`~<}j#GHX zhy{p}vAd=`)*8rxKvI4QKR-44mUASEvu^WCX-F5K! zLWT9+UuU}jb^?kz0tfLhDzO?3jzcE^6)#DuR`2y8^}bGJS>|Dmbbm*Ocs5(A{MX+TD2DJrWXi&=3 zTnt)>miBg#dVxJ!{unXQRxghexgFXqWmj8ze{L5fG*`0tkYMxBd)j@}Y40KcV)49R zprv%+v~J<37fqQ)Q}9^AVLlkO_VS!`shZtyMH9Ou#wl*s zT!%2gQ`$1tvlO$}jW8_ng$2z)V;>Z@s1yEX_d*A;KFt|Av+~F#Vml!Cj@IZbj8D(( z;*!KzFBRCch}qw18nFMgiS{nM6Sl1g;7mAt&>GNnsE}-1<>pNv(=E?_C%8<}?=EHD zo>})?E$9R*mMtC2QrFV7`GuIj?soS{A3_`8@^YrDKh_R)Dh2DJ7uQp zT1rmm$$(}dtDHc$qMQbMfhGLcmjfxLBdp%~6^!a>w}-30S^ZTmrOi=P`BVa0s*7M9t;xGX$5e zr0)QWt#+=3o@M(K-EmBYk|@wZ73nr(%bVcvuy0oZoi+Djfn5keLinEBk^?64AB^5F z9$(h;9?2o2D}{iwh4f=q(fcyh=D`V>CBXjmq^}Y{aPIv22G@*r=*fJh@K2A=2n$VB!sNDoJ}k2-WOJ0>a5*`v;AOmi6>LpLHgFc zqr=r?V@`nqDfRBSn-iNS7{_NvvEt_yS=)9gu+#3ZlN1^-`GDd%{$a{$l{?G1vw|3k z<9xQo#RQEq(D@u4(jV_+@jSX(*92iSsp$lhtq*OU4D4)m^17GPj)V0Fj4^}YIa3zb zrRm81tiqnl^%-(dXQJiKwKHc%zX1klka&e1nNEbT5$dd!xhEAXMwOks7 z@S=`v`0GoYEp3qN(G^!imE)pYT#!2SXp2Nsqt4FNS!_YcID2HW3pLkV4S^npFJs`8 z&SU$3ZUA^xZ|vb;qAiEI03y zTK(?0lA54#Gqjxr|A$g4%h_5ZClK+bA7Le@0nkfN z407kG*MTYOX`NZWBmiciDQ^KR!4nTPo}x;Q;Shch0wEAD0woywlgr;8+`qYy&qMun z=VOKWXXCu8jLI1@P*g%MG}e=CQhONC1onpCS>0`U{3eJZlk0=TVRyUVMIfeqW?s71 z_zM}1D<0P|%(|oIfEN+|Silo^vNuA@?$@O7B`92aC$f=le0Q1~{u*-=79;;G1dVy= z9oXbl(_oBhlXyd9w8KSl7WRdOCp(2TC0W}qKW>Y5uRHy>s0s%}%Fo@_-nz5Q{@^0r zh0Cig+bEf*Co-T`^Ug<9b}mD-PnVnVq5{>(Kvg*PUVMI?9spGXL>wIKhXEuq8e$=x z)FY^;J)e}0&)|$r zm{Y6V-~6uOu94RgA@2McJL!a6Z1W7N9#>2MT)p~m#F{#AGZ(klvS zO1NeC$UGSYHPSFU=PiKxmg@%z zR-|4t!phNrq2ACTvh-+O+)M44lHQaQ2nkY)7zMl!)Me~ytcj1leg2q9Ze&>a{1(e0 z3@nDexT|5_#XTfldQ+~6?q|}hUEYFBv6E7iZuHuK=Yieyx4)SCDsN3L0qT~pr_l;a zxMSYJSuL*bHVQTz0est6h2>u?Q_!@Y((#Baa2fK^G~?aUT=smgdiim7P;1$dq3`kR z#NQUfOYzk^uCOn=fHhH0_3BavNt4=|bo;gYe|GB9cJaFlz`WRxuW6p>Kou-eME5h_GKtG-*WF<8B{&FR-cb`>s&r{Fjslj=(W&F!<>TTgc4z0I8Y!G>4j=m@D zhKg%(V^XeH%@*QN`*V;Q!CaPSZBpQ{NbK_T;GV*3*W2D30v~MbQw@7XU6y8DW{y$! zV}#tZIn$b?Q)5$ee~J4CuRX?c6*pubhOJ`OW*|)$D=*%fu06VUOdp-+$(GE(e@^2QSF<77r>`~7v# z@Tjd(>Dcz@+S}<;nF&dBOq<}F4y&l_>RZy2x;;j7E z_ch=Xz@ObI>du+_mR;rvHbxx%97ZhiVO=g6?1rxl#&h+M(0hD~8!eDNaJbK8@FvD{T3PEW#RY~D&~j@CVZZk&D1C#>EG>2?HI-82veh{Q;*3YdT%`QSvc@y?iJ79_R7On+GOxt zTj1-vB2i^^aH-O;el)+Or%>X~jb9`3w=?vQwgQ&4weakNm*zs1dE>b$&* zB9W)yGp8?yZ|bkksE0O8jJI6WOYOR|V)}t=NBO6b$0gDL7tL6AaYy zusSSA_jb`_Z3%IUk@gb5UE3r4qB3E=1vX*@-D@%2O2&K#uCtcJA6`~YpVWj6V)xXJ z(cvwiI5h{|dC~->^+@WC=f980Pt>a!b=K6bkW&Mv96x?Tk&X`~NlPh`*pwmq!)XHN zYw9!_J}>f{aSaEm5k zQ8rA$>X-EH*sg`NPr!+;`}0) zo-)_ly;s~Xf?SMqQZKqOu|I5QFW8|2-pV1LtPUVv(+^b*JKUot!;ew5%<$F03|ki- zBClyk>kfJFzxbqEk#UjgEFpzwa-R^DFSevWB}zaTwz=&BYi;W2<{t0m4cH#^DV)Td z!iZ={T9w?~IhOl!mfzr*F%h2>ua^$EJvKJBtwbh`qjP#i0I#4ho}5>|0$h%5pz7ba zS#TQ#{_KV^kz`iLuT} zD7WVih4FT3mo?GsBGb=^-=0KQTYY&d&h<^pPX12i z+J+ywl>OpiduJCzf8?+{el0X?E+i~#aev!G^&-X0dG)RF2og%PbQis8e6@uCy@U7>ZfY&y+K^p+S7rOV#sSitszPzmYchYN zY_Uat4ths)uwo(rn(e{9C_IzGa@1Leg6v`XxHVs#7pZG(jsVD+FiMH&}0*5 z0lbsnzdTZ-BuLlzqhV2?*Kp`gAL~=kjZIztinXj(CnVa2R!Dp3tOAkdqr#JeT`*%I zLVxTmwil(hIu7uBz1RFVTi72?paM9hho8rYR-pdk<*kT%*K# zis5Z1_t2F(%eA=}uC(#Kco|^m^_gr->p{e}-wOuGs3XqZLy)<5wC?%!_Z5M@>37p~ zBwiR$uU-xEYRX1`b?0l7CADcd2%YCd{%NLTMq&aWp>f(-5u}wbnWfHkb;+1zeLD&>R}HiY9>a{h@2tHh}@)&j**lI?fe7w%7Au)2A$C`CGUY~$MzG> z&*)qpSCY6aE3?@95b8~qTM6tTUnx1Tcw~#ltNoxsgmy}Rn#`LiK3of1n6j&B;VKpL zS~C7VinFof12&d!2dz=q?7A4AP?`P{Tv_M;>F6rX5>Mjm7X=*A<|8Y>Afhl#U$`@r zt>BmUZD{cj)UE26~9#0HF_?u0x#3Xs#LZ@^nu_fYrp*|Ev&H@LDfS;^p`b9?>}1< z!%XW;Oo#JUG;HL)RsJM&m-Pn2^bu7Qy3mq_4G(9ePsiW7>rl-015g8c|A1L>Mmgg! zuR3U-g}>#5TZNcOd`2zKi%OG#Oy$*SRk%L^j$xD#T)NFMjHE`qeoJM%P}%bKK?zl- zZN*`uA0~8eNK~_eRv+i%aKCflU`UpA<@(1u{=zcb35L9Epu?a|=?8wafjt zO?7fyW3E_k@nw#A#8noo?D{x`tM`StFkT+k;nvXyD;1_ z^<7iP`+TspH@aa+=7`V}OpRf*Uw)bOXyswdb=a~AwNLl@4Occw6ZJ(u#BqDEwbPm@ zwZ)3`Nsm`M>Ql*eX7|M%bfeCAr#p{BK`%e=@xJYUqf_M&N{st$xb=Jq@fO5+}i^2K-)o6Ef0c!Xd-^smI_`sy_c zh)Bi61aNTZ$V9%P`nzJi*NmL6kUqeqqF)Hc5Z}yS&^0z>ttehK~+A5 z=bW?+6`a(y8wnyCYZ<&8{xnBeO7fY;4>mb9LONDl8rdoL{!;^$Z8NX->GhI3;i_7* zm;aQB$=2+%(G|&*SYHm6k|{`@UC<4hn&N3cr_QKKs*HwVR}RY{A$fy}E1vV#L=H~c z)Yj$aSzO&%g{!(DIK+je|)--b-y5CkDw>B1QUdJbl&WXJ6{rZm>#nL z4tu@)9mG1NE>uHY>1HX2(^und@Xvi=EkYlC#FTS|mrv^NvLSr45iGJ9&s$|#QY396 zm-rS3!Q>Bgj-&DvF-_a^d2ErlURU`|_)aLe;jXs@i%ma_%D-ECNupAGMif|X_a@5K zk{?Ef$kX^=>47fgqO;qSqM`C3UP{E*!|*HR(8qCHCKKL&3HCQz9J3h z$XAqrnGZ~H{9ksD;6ybb_c8AfM-`0QOm8LH`YXEuowv$u>6XZWDCtPE-D679MmAdb z46onN?FW7LznzWX2;xKMpkw_m{vMwN6i;clr`G9}hca91p9_UI@J@R+5LVF}iGwpX zHd19*cZmxvi+<3i=EAepus5qopY|0VzI0*#QKr8u#o{Oqo=tg5YO+artvZbrLU| zob15@9i)QXzrdE)4G$fpx8M}JWh}9G=~RuJqDRtRf2|{NRkDp3<9&=6MCb)TnAV#* z5~24}e|U0UUAPEoeK~G|#uynJuzM+JgI=iF#EGG0&vy*-hV^k$9ZZ5wzv3%SfvNE2 zDcE!B-c`@z1z#wO*L#D%{*tf+P?BK3CEH7^g_fd;Vm}opw3LH1?Ya)GQHkJ78LqER zeNF-))aIzgFi6)qi-M6|?uSeK=HQWYWf__TGLqiR@vR-Y<|oxQ5;i0Jc)-UY-3QO; zALVgPqm%*Wd*9knX^9hR*_#fvp#AZvn{>GgCZL=)Po3MoHOGv5`0u5h6BFvnGwMns znB`3%=D_@aZKoGKS=T*1rw%S_*n(0Z(TzhvtYghur6t+KYIBr)!>`6$ZS!E`;#ua~ zMKOjmt2O=s(G45VE%w!A#jwrzJJ~09rrrgY#`dLO z3CsNc%i~#`ilEE(N+rRHotB+4l z&qne4FWgm&_SN^=I-_%fnirs@NJDej{VFa=hnP9RRqZc6EBfif;LjR(>+ol1ERUz+ zaYWXVz#FV-rrkgY%G=^xARpn*O_m!$MmO`VGVtZ8j33}=UDROhAfM_MPe|&*5{-yt z6%X_t?RE~MUkc{RJrUZ6+Xdqgi~XzY@QZFw+chtY=$)31=FRmQjuONpE6w8JSwL#j z{Ma!*>vm75wz2~8`T2t6y#7ByWA!|5|I6%!@kyZ6pKj~i(j*<#xw zY1H{dsWkrD?FO*vjvBH5_MLkR8oh6L>OCTuIX9*XC4Al{Z+3oD(H?0(YK1G0L8Bhy zzoS?ePNtfZ;mVkOg{pqEhvb)YU&LzKlL#W5L4^({p(7jAd`%Y0Z<&g)Hgw2&PH?P0 zNUN`ihsEv^9ABvi&7W>$>84${Y`AR*-l>dS0zTWJI#q$hb@7`>w#UHA##TdDX-CWZ z6Q>=jZ-3`%OVX0hDYY&KO{9xfZMdC(3db2t_#ma2kjqXaX31q>j??7CJl;bS< zB};+fn)jrB>^OoVQ2F0VwMPj^47gS=dDr4m?rpu5Bucha$^49% zrbORfLy@wE%|_^fwvgDr;M>a*UC66;W~`UT@af#^{iwhkGPFc$lk)rABTZ^%xoOFj zPot-2I4KZQPKG-gQj1Olx7qHIx?-ylx}CG5dm_L}MKt!(uCj->)aLYD-Cb5I1N$YB zK-ubuOBjSd_00Oojh;8K#4W(bDxqfRz2aM5wXc%f3D73#qQ}O?o7-i2=3d|mDK1Z= z!{7BkbIBL)P>%*-_^F<1kZqgFZV)i`pPa0T^K%)s(0Z+zRq0BP@BDAhct&0v#~p*r zJDz)yK0D||Eqo_Bw$2l0f6y~nr+;9+_4W#_N)dyl0zi^;)&~0L_TXoRlX_1vHDADx zGyyFz{~p@&dLl}yai1)y-j->29hhM+&n2$A=ogiXcPH3(Rmte(JC#(#P$Z zDfA&?Z!DhI@3k=E^kXe_TrG&%ehZhT%BHLJeloHaT+%4PGNB1Sw~WjFzYCx|z3NBO zotr%#X)kO9b?9)C5)$cerSO*QgnSBg10ZQIw&aE3=#|95!e5%9-%eZhO?;2BrCD9C z1TvFWJr(<2U^MPagi+Wnza_T*2RIcmE%h4m7sLHq93Uu>J`OKx=~R}fbADkpj*r0c zRgzp{`_Hcezdx}H*Jv*3>V?_}BDgU{c9+9zKwe6lq7<_V$o$((^%#A=?dDL_d2Al{ zO9^uGt_-9+UMjZNYS>kP2A@Wq+LCxSnrON#o0-Tb^rlUHa59`+e2kj!EQhd|97NwX|EGq0l~mY%xi{1Z$K;(M)Hz6ri}b>(+s@- z5-v}7Hu>}J_rv;eo(C4mCP%hufUo&XnI$z17=%VsQSt90cleTxBUk>37ChbTEUy!x z`_yA0>Jmc0hIIBr>%6`CUwDK5JdZhPITe`}kIf%-R?3NB;=f))RfdcuUK4<$S+%_N z!bh|T0rj-mq^t4Kp8)|i>!(3d_VMb7EnMHaPKtBfcg`wkwC+B? z3-uTlnm6q)xo+?0-+$RJGZt%wRLf&Pv+(^{xQN+{bWd!9J!@|fg#LX`7g0;_Omuv; z+_>FYZ4)z{{VLXY=*$BPkEzs@TV(~?~)rgSJy+~vKCxhc< zOYNM##TP%!aYit3pCntu#n?Q~weRXqZN=PI~@vx&_Mdy>Qz9cp_O+0gAzGn47Ty?V(m zqh}{v$hKYT_+g9Tl{XiFNM>2@>%eLf0q>dJR-(cx5G%uXu4+{>tLBSI^fs==Y>7$7 z_Mp})7QwFB#N8%4iayKb5h$`X~*clb-2iO zDKMTSvR&&<;c69ZAn@u*Y6t4Zl#P^d$v5-%-EG zDZu?^(BTM1*5%zO!OlX=p&LvAOxlw?w*;z+AvK`1HHreuDms1Beb{%RS0x{pMta0^ zzBjY*t!5upc3&aB+si8OP;JJgbuMgCqzlVH*? z%_%*xaZdrM`0yHe4UT82ld4r{u|B%b+fbTAVS&S#-JT@B-0HzH8Kq1p;XDCkB=wVoo|7zSrO$uS7*2!dVKz^Lm_O#C z%m)LIpv7NU1NDJ1l}Go*;~@l6Yv}7V#i^o6Hxf{n&F1S$s;#p;ym7D)(hHD=cc_R* zHVcLpNRd`aUE4diY|RG$sS*FN`Pv)VwT$Cs$n8mt+n=EvG>+JVfScJP#*Qi2pD_j8 zrWZF%#%HFuxs=|wy8X~sW4QgA{Ku^0CmDN+Lc6WF#iHyG+8Z%T{Ex+_Nohj)7dZ;X z8$Q2H_6_B%B|{`?LBu0za(uvv#^i)iKehf;n=P@#GqO$Y#ktnCNiK`Rxf0y)=^{C2 z(={U(=ucQu9+7By&L~o-x7mM3wbyxu?@u1y+dKxiQ_*Y!06<~OK1>I;J{kfIA5j`4 zo6~_TFBtE+-Gvlw_GuO9T~6Amg}(ZuQqzcoKNG_H*z z8{g85(zq5T{nqHn(Sew!DU$?H+aZkpqroXte1br)brY|GoP}dtz-gn1O@N=NAui)#Ir_)6~-UxHI8g3Yzsb);~ge7Rw%utaev6Z&p}=%=rxc9!d7i)rYSNl3$L45xv0*;>QH zCqKdDt6Q{GKyFpcnLj^~?rx0e(aWVE2nmLpwL#yKWQuQm z8Pv0J-O2h8gW9)kI@0EQuN&V*p0{#^4V}Pu*oxkyNkV^HcfVYZ&mewHwMK#;FGTAt zBUt(9rWI~A)o4X2DhDK%(Y$LY)`+#FOm!~fjW5Qq`Rlv%`uT-Nr0^Shu(tVW{j?_1 zC*`6*fpZK4D=4X^s@}eX7Z_BwsA(@I_5JdKHk~T#q55^J2c&)u6+$PvXn0Gm%x?y{ zW&I=5RGi=xT50j&Va)BRA~{oz*x&|!X^ve&H(Tj;H|%H~hULQ62g63#(aFM< z$zQm>e>5pc=@gg+vd-;a^O&QempKI6FG)BGH#PcwxPej%iNIcPc5maI?iQ}%?Ba`+ zkNT&3O|j~-R1W2s!F0FfPTuQLMu#ceSMr2sGxjNG3-{7J^=nK{cP1R%EVavY6!#&Q z+4Vl#NQG8^S5}dAK_-tHF)v67pt;fEUbyg!qiQWY2f2NE_o?WdVlyEXDf0`kctQaYyt3z%^Wq&gC`;@S` zk7~$FAsm;$j_De>$Le(9@n?Z?7&@jW zy}K_$F-|QF^oQtCYWPF&yx=_I7%`+k#R;{){Gt2AlZ?t3a-Wn^kRg_zi3YrWL+!Bs z`NG>1vTa@V$G~@IUICEF)l+*F?5EIMrPVD~jyO@`e#C|=^eBr#Bd|>oc%baVm+Fm* zP1(cRyVOynT%gD135R%DMvcXfiBbRQDS`bgUAJ`X{6(X=Wka@+gee7 zqR0Slg=ugH6(NW2vRE?hjribwQ|htq(+%OD%7VwxC*7$4{ve^Axla@R&}NB~1d%T* z02x0Y>E&EG=&+=lvp!DH4dohn^+`@_#zm~-R6p>V`|L3F*8Ki(hjUDT!G~RNSg05Te*9g*^_DL`MZ%v@-@}7R|3}kVzcuyt zaa=_Kl@LK%CZM3w(m9d*Dq+$v8fod?6qHVpl9-|hDlm}FNo_RJ&8X3}Q5%eNp8fLt z0o!$*b8YuI_xt|5Uhlv03*Qd%FCIQCm=cGEP#i!FQAFMOb11UjkM#rO?^D4>))K&P zNI3&fcb5@lNZFYia+Z325#i$(2qO!s*vQ0+bGEh=Mk{r#;J@C4=Qo|ADG`#5t?RV} zd7ZJvH6c1(-xnEASU+XInL9?W4s;0R#JSR@M)ohBy#;Nk-k_gI`kkKva1nWmtDcp0 z=p>kOVSF5E#zB5YODQu?7DfZ~QxumkrQCMp6`Zrp?Ige{w`U?f$l)wy#UcasPjLEk?(Sz>8)Gqr8rdIN zPOTv>#~>+O-5gaI=Gt<2&obS3QZjUXu0+mum34?H&n#I_H}P=~0iIN3)fk|*w7z1d z$4+GTbKTiZ^ot>6$X&h(%WOP(RsunqMxSC4L`)mrK0_+toYCzp!i9^Ug5f;YJ1>8P z--D=(yuWypF$m*fYs_xBtQM>lGkCGp1n3QWox}$mv{J(yvU4%wBr%5G@&~Z;__p^A z9*Gxfe>z)a72IC;rr58CO7cj&?U0!3f}Rjj&2yO&P@Kep-=&o~ra_6T&`^H7HGJO_0k9|!U8tpot zN|b;2YU(4nmkEB3ON~KRSP7|%vTR7Rr8IykB?dVssB&@-MB_=c+EUE=7BoC;f$m*X z>dLHyU>%#L+9|@}NP6(6zr~#+Cb=sOx7sOtIs+4jNqngv0P3CwpV zh7?U>|DM?CiiW^HA@I0A?*=Kt20wcY6`0>RPKA$g%ubLaI9_Ey8j22dxF2A)K*0W# z+M+gv5r%&>K&f0mNqoiI5CVJ-t9tkpL0!2LTqIq7==a{l}QJUxzhMT!^&M*lud~d1Qq-oVWc}^3EkhNqXIdd*?_&$BQ>`G}n^p{&s+ByF$!?rKS8<0NMkr z5l|}RxXm$8J*K|1IUDH ziQ;{DVjG=aNA(=uXNLO6G@zjI>Jwq;rlLW=X3Ej^Q4Op4t``PZSaa$lfj zg~uWWZ3E5MOI!5#s$ePVP21@Is?GoNDI@4ktF=XPw5*g-Chq)0PJ`+#DC@w;@TSke zZJwsa1E$Ibiqb3jQ%DqCvydNtc5-hUx`GrtT z|C%DoZQ>eIG6=8Im~y&9O_$SVo4<9uba&%$UoxRxK@GrSz5a+sk5A>--7Sn?84TPQ zy8GKnMfiAPHq-IU?gd0(?X~+_kLk@NqelO%=!SA>)Q?ez&>hC4XWK}tz&S;@@@B1c zwTrC7dhO}CK6lQsA5+4MW;gbO1DZ2k50^cka_~&Ui)HIO!l*NmbxOsAhD}psy<@L1 zxWIy2L!~eeKJQCaV%~p9)T$c-j%?lrnY_NLZ+xpd1^?AySHtpgCby&ZqO7RkU$6_( zb9p!gk;vj80ezBb}08v<9tVhbd|&dwdY^!&0J(M2(b&mdgPVV_(aL}y0t6I zpU%6hrEX4iBQM`mBS-BGzRQxcctE=FvV7c=1mU`HD-uv3hj;kAnad35zZ$xvUFJR} zSZ{fc?=Oo_@wD0=Pw5S--}4XiR`|kJ5mOsOx>2(eF!FI@y8z+KQpK}{OS+{a-A5RR zB^SHjVyj5`Xo$sn9$EU8tn52v6U(H-@H{bz? zpEQw+K6th+PjR`nb~>LV{oDTiWzKzAs^RQ|d$l{qk1U+m4w%MAUMgmIl9)3h=TFJq zNK+WQT&dR0IlY@75aVU5o?C-Le16;>Ios%2FdI$5Z*->^u4;N~8v-fgYNoB8EQHtQ z=mE;Oqk!?l_Dajh4$0Uybn&M!Z~ax^NoDsUJuQ3{D%cZ9==L#QeI;(5LPzu65@BN4 zmg3x;j*MAanm(&h-X(GO+21l~c{3g8(opfbsJzyy)aHloNo1g;?7fwiuF9&>lTASQ zXqP1R+LcssiayV+`)pxAH=V6(KO?K?`s$w*&sP&CnX=I?P+VAxs7p?0wAzu+KMN271&bvm^vZF=ozDIPLWEDIN;qXqbsI9lFw zt~`Ms2vAX~=z|p)m%8J!8du(7-+`Q@Gk*{f75MT!;l--qcUlGu7=r%d+m|%ltTd!S z(buvQBlff`nMkP;x3H|?{4J-7P$*)m-N@(Nr<@+c{Un_?q8Tj$)Qnu|B+NMC!-xcp zP~f7nqFnIp05y2-FrJVJ2{R!WaBiOHjQh8%@LFO_Ob=no|%brhR(X8`n%G$>)st>6)#?7feVpUeTW>Fr5BbE? zz?33X{|gIco&WfD)$vV7P~15TJI&il?%9?e0OIG2r7a}BqZTBc!g^mP+W~WWugA9J zNq%Si2+{mPzSEt94?CpNPZLiz?kDV)3YxfhzVq{il4y({+@}?E%L01=)XkMLeISut zSc&v*0Q;DW-wPBpblV#ghmz4vV2A6Tq^RQu903v%$P^qY8T?SmL(k+|i}qEQ!?bTL zj*ITLkLSpQ=NLd5E$pvoR@KqAb(oG1$N7(A)L9oEV=hisTN??tswYfY4eb@0c!o~=_XN9HLgkPMQ15ZPXD zkNAbrep$u_*RMZFYcFM9N`BR*x=t3V)%q(gXcZLJnNf%SZ`523I z@7s*ogfLt0XJ}Y6spdb{3^4$@?BuhIh{=H9^ncUAjPD_ziowUScm}!7HmxcY+!n~joSAv}=MFp%oS>`# zs}v2|Ru3_$o(4%*WX zPi%nlSzLb8rg^}z%~fT^cjS6d9;^TtEa68h&83T(4^PtD=abifKh#*1K+|?M)*rn% zAU<)13Q?FajDqk>ZSwI(#@*;sMC4`D=hGy)d*;%*9-n(%`5+?>eAyxWJ)c*$+hparZ2$CHT=ynqW&U4m8dz#+j`N-fp$UBS99bDV~>SVHm)_nZ!V)=|q` zZw%;y8Mus&Ln!CJ&UGoylB_^r@h0{P&9^77InM!NWtk2D&c7`M}S- z%KtfNoWr<(+1Z4hd&<;bDy^!x9;uYGdWs&*4aO3^+oc1?UbPxh{-p&_$smKy1sUEY z58gDMzSq)`w`&A80v@vTUqwv3Bb-7$Wqog;+-0Ex zvtwP^cD`q#I}_BohdwklQ91c{qcrsVk1~y0uVW=Ag%DE91Hm!Soq+T8V38sD>bxty z`+&>>Y9@BIYXc}0^p$&H4T{w`KWq-<;R?AF%579L%e9NZ<$>+~WY4FYA>j-j#|ScX z3$!U+eNYN^G&tEgl!>4GJ{z0NxgOB%rUBq7Ezq5er5lDnqOEp7*e}}u&gRIc=%#P> zsVm~k1p7OG1hW4i;5%0w6m5NgR(^kgIg>C2oBL&mdfI(jI1|5u8<1hxbGGg#_9Mw; z_kV28h*TM=qw{WIJXnt#Wpa)rVGe^;Y0w@Pk*FC) zr8mV~pFR9$`ec_Wo@C6+Hm4;)P!NM?S1Q9o?~oYKj%MBs*odU*bY%9zqy=GDUzp%P zGqqLAhQGpNO-{kkviukxPMHi=L$p2LwOD4(@IB$0#M8y6&d-h#mWbFYc1@+<+U3*{(%<&55D5zv+xq0kyugb=VpW-cq^pasA$F!ACZo64z)&K*&apGeODENcm zuR4x-D-FLeFZ6vT8z*TEhb)_PUs$yhx0eEqq;`<#i%5AP$dhN_JS?vV%9L5tHfDx) z>w+NE?W1|hXX;c`BBSQhYU#i@r0vpmNT3ua&;%ycbCc5= z_gGiSw2)%zu#5f4hYvq|6f^H~Km0*R&;ZGTIWjFJ?mk|Tm7B#aL1%G+o98d_?w*~r z7~7*(l4zj1)ptx?ccy(p}@)pT7Hx(3GjZyyPbn(xduX&4}6clCW z>LGUq;AI&q_#ipz`7#~)T1mKQe>UP6_O!@pD&q{P(m7w<4<$lgd>cxQn`;2iKd>V0 z0+6a-!SkGkZt4n~xr(Q6PduO6c|XbxTYRoPzE-z5Ja+;m6=eQnKN19!RgOV?!s_3) zS73zPFV19EoZ*&L+ihD*LAC8=*cr7XLj~Y{%*2lV0AB)fI72n7QQp^@zTKI zm!vJ~gHa_epooyGok&8r%f)!=CjzrOms=HTS5g-qvK{MT7Lm&dHVc_|V>Wg7$O{ApoVs@5`1il^^4#ikr_oiP(Aa2@PLWN+O!{-j(?MIPV>a z2TqQc@K|StN;1asm?$V_*~7Ap@(+ zN#Z5PXK}klmy_~3ORXS}3Tn-tY}<7lqhpr3&`%xZ)v`w`Jb49KV5BQwvhO)O_$Cjh zP8~uSZKa*t5ZsS0tshhLXAyllyVh^aSzlcVR8B@vCk$%&r&g?DJ&r+-pGg!g*!Tg> zPP89+CKR8*>M#)j7L;y(USMn90TP zEfs&fAoP=^0%M0}b~J5tHiU2f&3><7(=zI9Z;{j!d1L!tOC*jq1uCq?P5K#i&UA02 z2l@EHs>l_P+D?L1Gsp^=IB*J&hf@q-(`l*F6lHlZm$jXhN5KJgG`IV&g&*8t*&%%m znV>`?%@z$*byp`Pc7Dps83N@siSG%eS7%Ba$ewyVtfy^B?#-_c4AE^U-a-aGLN{b` zn2yKG_OWuk0XoAbF8wgbTEN8uAD|j7xV?2sQrTA*W^uRTnMvPYFsK5)BPMZ8vu)Mr$#ix(D_a`>P{J ziqnfulp>`(JFs>)J>W!djvN5)|07#3f#K50-9m}Jr`g|!SdN`LPFf+VDfE!yZLhY| ztf=ES&WBwN?(4aQn-Si`q_ySPwkaINCOKl$c1`~1L^FAuW{j7W0dGvFWBKamc9GPm zot-(?kgcdA)9jW1KFS|CTih_mx|+jEt7^ws9bTHVx?63W>p#g)sF7#mbRO&qklx`n zrvx_0`ICMeZb&Yf6x`j(9pwXTd8UU0h$2G)6nPJU=_>}3PW6-(KN6STCvU$U_@jv4 zFSHrg1kkIy&QOKu*PKH?pp-`mCH08|c`CA|Kuh$bD&m~rmuxkk1@AgnmF9JdHb47l ziQ(ZRQB>H0^D=DqpKh|05<@=r%i$HoY$>yxv!)TeF9e{C`yzo53inN;EYN07E%zVK zfF$hE4yFMt_A@b0xe%>jG2g|CsEpjsZ1`PaF$`LRb{(GwyM4%XUdb{nR0Iq5No!No zn2^#fx1U`e#Acd}G4OU@>>F_jRYcs%xKWzOXG}8Xl|BE*BihA>yx@AHJ7+VJfI+Q} zxSt)Ga#@h9@1m!y1avygSs2^-LT(DEHFNuw`Yk>IBAH5?$AKW=aiX|?CZ;;1G7}Fw zv(*Q@i{17#Fs2VGi`vgRA^bVnSC3zAFAU82dRLtWUyG`208h+zV|A?F5>ugm(QL&n zOXuW4BCAI=jMGAD4bV$9$B=T>MyfR^A^R}HqsSIF5rx@0eG`jc1-Xi%E!Y`$>g3=+EDGcU7-3Q2a zhnU?7x%)E2Y5Df1#kRAksm5g{BX0EeI1A^nfQS&cZE>iWRL<*slWFdo461{z4fP9e z%*Hyt;>Ng5Zxl7}(bT~4C@0h8#uI8hD`z+1RdF9|*9_Z_nL}}H0XU_xU~dC3 z|DJ5=mU%R9)`-WEKcNnZ=p~e=kHr`jI6cfbU#3Ed`la$k;(7U)H90^{uR$SLb{t=< z<@3upxe7tdICc)%m5RLl&_ktepFAJI_h-iV%8R!`pVs!zx%Cu%II408;cF-(K?Jx0 zF*Byv^ox2QIG)J;V=JJ%w(EI8??=+o=By3?@(&k8mz?dp3|79rjx_guBlkEtGzD_D zP#B$xh7&n1eTNtHWI|KZQY}un>OT5zn|^944_%<6Eo~=n0{-hiU$8m1XT!dC=q-;y zhv-R;L7;AO9hbNW!e#H#% z?G(HSFuD?J0VFOIdgHObNEkH=CFBo|5a)J|P{4uMrWPS~Vji4Wmh2~_kjG;w2HUpi zO^NpQaf&*xRc(S@Fa?tigaBFvsNBQR0N+#&&YavZFaF5c!o$)gs;VftOMyOx>OI{l zQB}}NrfKj2@>8MDY}!aY9mBQBK?J z4ky=a2Lp2ybT-DRhr9IjRHbpChw40m($Z(lJ+4|~@X6>~2N4&;ZcxVyh+?nclf;`S z?cEAFDl$^XbO<|sBu!L>kA*8rE_F)uhL5|Tq!?vxf4qqDewt%r(R?yS>#jIkyoBBm zl~xXqncL_Z%p%`wEqSN4ZxXj>QtH=#F--n}+Fc?(+<8P%ph~O6k|N3SjiokmO1o4? z?|ED)%}Nimt7B2^x%WuFbCtnQd6|V=ijkBv^&6dMf7|vlAk4Rh%U%QPb*2|q?$BC8 z;NJ(Q%kJdKjLAl{B~`vHIU@ytDEZp>K9U!}@AkUA-~+(q^OM0z1;08qz-{wfi?l@e zfX~LxD(da#Wh2!!envfSlmjcel?kb5)b9gurTW8;I%O9^?f7ZCcF?8;MIh0fO@dJ3hte(U-)ydz-okVFmTIHAYqa#!1OAU>F@uZqE=Do zt!-lXD4}+)PlOAF+6EL(@}R|Kx!wJM4u(d~@8I*_r0C*oMXPp8)dvjTjBp(sVf8rF zc5Vv$JbIJ4)a1I_F)VA)HjI3JlfiLQVoQ28-pfK_{n`Nl&H{)$=q7~u7`(;xpG)f| zb3qDXaTh);a6Rp4;(#u4M5f}`!~RuFmNU2MJ*;pwqp}>A&AXEG z&gWS@z5f<<4%!euz&K0@LZ1_1q-ShYx%Ji8Ecs7RT?=&XU6x(Oz-t6RX_-A^1Th!B ztPZ?)0-2#(#1KpPBER8YG>4+Qw^4ms<{`GD9qtNpbY*N+pf2WwlFIXP-#{4c%Yecbd*%1Zd&mxh81uS6)#B;pq;zQh6f`6uHaKc2% zD`|lyPgPgXgxSMZo<6Ba(i(@j?yFD&hs!)lay@|VAM8`2Lnogu;m-apK9(M9qP*^g z^@`IhRf&X1KiatxgQcI*R`SpKRKqt_D2}2WdV}liGuV^y{Vv#?4ZYE(02p;9flfZ` zK{l;IRa*P#vLcr?RJ6l2=c;YwE*d5O3zD1yuXRpF^6H!U@BQ~a$}Ed~>w{ECc+jqU z$Dn}1PR#-gve!(y0ZEGscb|&kWFn-Lp-tEitl1hK}U$HP~ z*E@4Cq?7$&hb#I#A{?TI>v5RqW;;*n8RIf;Yku+V^o7c?@WrU~oLZ_FHcy^te6qK1 z{lZK|7}3*sB;b+m6+2XQvtNQTxc~Mb4dTWdyPt+LZ_xo}g$u95^boe7e0o<@3BH!n z{ADI%o@8w2*>NY5SO2zrF15YoUEiTH(C0i!kGa7vL0QP}mr(C!w&j)uTOqTz4_i@G zx6m#B*?*$wRkdQBE!QB zmf%$EEgSl1z?7{4EbkfLB*$5s3I1dhAWpXZ3ry3?2956OVOC-b$a=$P)U{4XCQR60qaF^4V8rh-?W%PA~PVWr_S%Czt& z;r8~a!`!;&YF*6rxLiTWK6a{(d*(fu*-){tlHj8!d=@pv+h5C&w^rjX_js!Q?KRAV8YLR35wk}ZwYTv zbi*xH1=b+nW;q(o_Y#y#McRjPe-*r?z!;aOE>4w)t~qhvhw%YQd3#Q;Z?Y7;8Yb*h zEPVJ75#^sSoSLl}6wi zhrfS>nhJZO)I{WFRmEY1*PTAwABUIAjwk465v5))F&Bu7y%SedNLdwkofDQZ8iA?^ z=ps_JnsOjc96y8ciA>y}Ki>&$0xzdMyg>8=ZtOX7Wy|IMVrzE92D)oe#x;y21xFvXPtevNtXFFWME`H516d zsi+&<2EAO{&7PdgeXUaBW(CY@6k<#BU}J@>v15XC>+elw<1O3{h@#Y6CXey+NZ zyH97&AmgrpZh_h9pU+=csbr47{~I0~5a9M@tr*QjlTPSvFgCF?Lv@(PZSqa(X+3}CXqYmZkAG9X;rKcPneVU-BnN-u=z|Y({^AepM}!2Ep`+mxNE%ch0U;;!FN3 zabKJ3`}4i7B&A2>^1<5~X=KY3?Ts;`E9Awl_l`PxxkK4)5xA(MPVC%%g~db7!Ph*g z%n&K+>wc`5xL>p+OpWqbUqzRtK(F4N`Qj2TpfD4GUcYMmo)W^QVx7O+cMEgD$)Hb& zc5I0IC_NLSSYQ zqpaEGw$hv_jor3(dGm}bSD~4m!xae~PsT3u_ZcmNCLt|1-ZcV}! z_g$r}{_8zy@nA+t>SX~-g`C5Df`!3Onj4@M!DJ&bQqHn^P__4w+|MZam~5& zxUm*@u(=+XgjZNopr43BJGt%2@B(kQu5vkXqJSR}y$N3Oohxi2l@?_VTNabrR&|Xq zQXQ=GyPc{nSV4Ki7eIN-A5Q;DubFE?~27L3y1BImpV2 zrrdd@V{6#v%xbM zLopf$K9ft2Y2F1*JjtNp9%5YWB!@ix z82^j1b#=PC$Zkn31z7$Qw#up`?q;f

    t2tZ9mbp46=>*386fa05irRY?_*ec_xPQ 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

  • 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≷;KfdUj<*M_(Qr6vdNBPPpK2dHw=hw@I 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

    )VlL5 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

    WJAcV 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

    Wqxp(!RJ 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�yoaZS- zpQbjmOW!Q^&?kMBoZKm;|0%9V(=$cgU<;*)-;i!@ss|kf+?(HRJD!7DA~gtKJ@f#y z8K5TCuf@H2qlf>jADE>UD1X^t(RM=Q#HbU{ji#sc z_UkG0^KDx!AkStrGj!pIh&?E-m!$l2as%y;qUYLhI*8`EQ2N*&1DP$cZJ!r>#)3=% zS5r^Wl;SI{;T{?8hFeaqiE-IzcrCsGx@xQ%970341ufg$$DX79mZY5rt%M%C6A>m4 zmfSsI&7RzzkPI_S?aGh3U>?owJgyIX zb=Sk_iC?nxH2#A|(cEBZ&*XdE86N-LpXIB@YHsfO&$A{4U;I`wExuhcV4ME6*X{AgSiT$O)7CueRObCn#Hh9lE~M_9@*lRx(VTE% zxd~Z@ocayADRM1z{qMd$)p}s%lcm=J;e#d90lug$X1AqkqxwsZUk#^TxL+%6tT)7! z^(bM^gQ}FUHhGt8_VzV};p zc%`a>zSq9=sD_&{=^VVgOFB+(Z;4?9dJ7V2TcdTt!RaOT*a%Yk&uBG`pa~GfC$YM z%wIj&fS%A!#_fQf>5==b9iqd!_(Kl3_D#JDpGR0UL~>)UU%96H2;ZUp3v%I;64wH8 zdV|Ge5{r7LeaXQ2f#Lo0i8I`PfegdC(P_h)5sJv?4**gIS^U%-V+e0K zy0_$VC57W&z<3h51m1R32(P=rrQeq-!Kc+{c`2~TQ}J%6Fbh_u7TPdr&I7rrBM48Q z{}Q3XRGqA-HMD7y8It?#Lx9N$`OpZm`2?{n%nX}-2my%R=h9VW6B<}1{g+{zdZ%sz zd3R8E;kHvG*K;h2J5!zypMkXX_Vy9ER}Ve?kcDwBz+O(y|IJ$LRYvbxvoS0L1zpM@ zU*Kw#ymp|-ZQ{M~!c}jx9$1}{cK=&g+VER!UiO6p8T0)r+Wx=$QR~HPog2;y3*9e- zR=7@;sNcSd<;WSvjT|(IOdr{+5qm{$1cMIq-yP<`wT2>u&QBfOM&VLE^!qPRQ5Q8q zZoLGv! z?CllvM%btlO+Az3u9O2TS|CCkX)V$DDMV~$ja%<6@9gOdGIv1ssm!ngp5Ba z?8zkkG-G!Xcw7xFw%dVtwn0eQ+n~SD6}o=MYx6VFCZg&&2sQU!N^Q8)BYedy3ZBsCMT2T?G~y5%kgqccOjP7CQro7-?o zdoex`1}(D#9}$o^&mfrvbzCJ576I$z$2tSpGy?e_HDR;e8Yz9OIpCZGrGAUOovKy| zl~2Tst35lFtvD)jnUa>#}sI}gtgZW z=hmH-@fsqF%c4!{@b;I2sKebe#f!%NKNFG;7>nbQ50MxRKv5gL*?Q0QCM zn511zP-9x7OOzP-@FXei@2nET)Dq)*Gr!)=Tbj-UROokpEt?

    L8{g@yn#xA}(a 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

    26exNHwI3QgLo%BX8cU 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 Nx?^CXUv}H!)&FQmF%|#- literal 0 HcmV?d00001 diff --git a/docs/login.png b/docs/images/login.png similarity index 100% rename from docs/login.png rename to docs/images/login.png diff --git a/docs/images/nastaveni.png b/docs/images/nastaveni.png new file mode 100644 index 0000000000000000000000000000000000000000..2551b1234af2edf0a58a2fef07c5402483f60ccd GIT binary patch literal 94209 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 oQ8;8sT5=CpeLUt38T#sB~S literal 0 HcmV?d00001 diff --git a/docs/images/planovac.png b/docs/images/planovac.png new file mode 100644 index 0000000000000000000000000000000000000000..c833e3b5667bf7385c5fab0ac5dc89589cec740c GIT binary patch literal 1518760 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

  • WzJehEkOkNC&i0Axy^V=qyENV-aENPo=x=CBO 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

    yd{XzLd~ZQQ&^W;VrjZS=oQv><+b~RN0kk2Ne9* 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 PrvC6S=ldt!chJWZrbkWE1q#|}i%}ED* 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¬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

    A-Xq(92~D5zjIi!As_UqHH+RZvh@h) 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

    E9Cv|ifb&NIa@y{7p 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

    3%*|{)6($n*K`vVPljzi%kFqm1dlcedf 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 z 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�Kdxk16lZEi>k8g_wZd^(bY( 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�jX;c`S#+C~eN_o|H}Wyt;zcA0bGz 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૊o>4E3YbV}s`22Ojt4kVIW^OknSq-OKNs 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

    M7cJ&9Nr-gJJ8HU%>$%_nYZdK*&zo-mp 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 z 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

    oxd!~-F)ZQ7C`gC<)%Xj^ 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

    @4VakNJvyrmS!%7 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∓LAWC$0Ro^$3PaBmk4 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 s%VXc^7h<8e-hQUO5XF@wDQYXALgc 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 WyKVHkm~Pff3e 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 Y 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�#FjP*THO)Fr1bhD-<{rN!<6DPUPTd4H~e~v@| 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

    K4k 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�x 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

    M&*y@S5U1#quyU)}+n6}2GQ=a5s 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

    o)*OEBe4EqF8NQ}P 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

    ^peIw27FZu?Kh>bh|Z0)$QDa;EF?QJi*YIl2< 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%0Aw2|Fx7sKgYjo4(BX{>2CtQ_;@EOX z;?POFJ!@%ET6YZd4TtD9HnTS(Ri#j_<*KCk{W{@##3QH#O~~IltD&oxxYd*-`WLwI z`_dBBl3eCSCzkw}+Wh$2ehlm8hjvwRF8kjWy1%FuC8~kHWGr>8*ukIr-#T7UNERX7 zgqYF+5QX$H=gc|JMaMbFNeFEB+n*M9Kuy*L0Z8UZL>xl*IBnC5)8=WWJBe|JlrCK;^cI>vBbKvZ;)F>15)2j%}OyBN)ynp-JTku6k2r zeeP%A^O`tkgX0#dvJq=&PWk0U%^@6Kt0}&dt&Gk0@eN24!*?0)+O}o=gLvS_lM8U` zLXA6*BpoP$fdsYSaw4mjLA-4nRZ689fG?u)>dMjFSVfuro}XXy>B&+pMQk!-!O|r4 z42kTnnC@pjbrjCHfTc2a?CB6l zCS^eQZcOiXP99fK+~)h!KK&Erq)aCiK( zV0(F&o}GXFtLxth^;E*kP3+gp`00?4nZJ`ZFdHZ;fX%-N8{a~t3w?`!>~w9;=Q%nRaJF!rMNXWIAt`$=fl*W{Zmp z!O`n2muv7z;E`Rk?kxr97BqDI1(uQ*Zr28!JYCIS3kpvl|!vydc@3Y)jZbKw0;ZF|8NE4R4~4L%;n@1y{ux5nqS=^+09 z0lPp%zh9eQw^-n_;kDP@+^*AuBCglg7+wVz{{Jz*Ch|DH;~1_gZgCY|%>SX$RLbRm zx^PsqSoN5HJ+2i}au3IqbW4r1^xz;CJ{QiXd)o4}+Kcpq?e)6U_!?bi%6AVhL!OXy zaz>!3SrNFFj-QV6=fAKi{xb4Va3!4Z8-I=1O4-jprA%Fa-a3c?1A`?#H)2r|gjTuF zx%J8g7yQQUvG|AH-Ol*=FGH=oxzzaTYp(Y#7;68IGO$FZa!~gCjs*%7n0P{r^4D0d zt%C;@r$`8BP`YtHO5MB&b4je0 zE~cp%WYmLpHZgY61`{C}iM6_?{8~#<_E>sQC`jz_pH{ex zQNqH}m?U9NZJdx4rMHGkKaeR0u8r&cti$lt+F*Bfp&I3vui|-L@4nI1$vG*%I*YhT z!h!W0mHK_6XPD{;F&*&Z%0X3p41sj@DYdH zn8{$V(x!!fhqrnl8r7TYlFYYnK&9cW4F7sj+4kc26Mc!h-{Z?ox4 z9xfaF`z^OOJ|6P0l-qUhLeMtQeayIQVs8C%d+-6f_^Fil=7FZk=Ume__a z@-K~a*}r8|rCRsa4cXJoWb1RjnP#y?_4&E))Ggg+)!0){P1#mSA}m($brZqk`dHUA#b z{*N;|c`sO6m)4Tojru}$s~)6s_dWO8*`Xz<%P%_ra*T^V(jt)Pr5gXp*)0M)I{y)} zXiHKGzT?EUbZO$MR-^NuEWk-?Hvov7RXa`ltj^%LUi$&~Z_;@9l+J4T>tAnd7himZ ze~h?a_cvYqgYRhT9^ zKYpOQ>rUnZ{ykUWA}4<9&6E6+vy`3rWyEm6Jl_8_syfUpBo=taWK;NqGU{6T@h^!K z^&Vrlfno3#e`}xo_U){7V`i9r(a@wEiN2sOsP>k2<>D0P}P)DX(yiilXjQ(iQYYf2Vgcx z&!c&WZH0XveJC`6U_GeZ0DwDT!u?=NmA(7s|=~k4lAzH-j}G9gB!fBPptIOgZNBI0HpY`^lVtK0f|GVlND>VUiT!{oDS zms(={!(&2m5M1u(yFh9Ge*Ztpp9vJ8;|D7t3$MeHJrudsv&8$Gvk!q3We0!g zgMXg6=kQZXIsU+ygfqq}KKhhk-$D*d=O3+WT*y0qnU0Tt_#=AxJ^gD`-!4t`-FGC@d;OrwGUlXXLWO9O%YvsaQ|K5+5!H$(gb!`Fv{gG=IZ zqhXL@k%Eb!O7R<8b&tEWV&gUuE)l9`djne{gaLn-10agY(YOuOi^X3-z)zXMMj_=L zKhCK02`Hf^Zem7*gv1j^RVI<;fVj@4q6)woGcugOkA?YJ;YqRT@nL`iRtsVKDQ`*nZywFeDdRR}_ zI^&FAw#_$P!}lh5%Uj>5ONZvy7pvPM2ly)^2SJPkNIN;u(uyHvXwZ-GM_ZB)b`DHF z2GvF^5>Z2gjr&`Y;*V|*ek0IsHE!h7#gzP!ztC#V2w?i@r*Gf>=HBh3lYgoYP(Rm! zgq`&`_odpESN^rVK~H4lW|dqP@Q$~?Ne@uC8dNQg$g$PqM}}g)RID^zYQz(g@Vl&N2VUyCaS=010Fq)t-6gxpsn{I{1lCENSp7uJ}{i zcmE^XsV5!QmR@?v#=+@#zGG2ca;*mgBxkV393w)vKUA{l#-tMVhYu3hKXI`{Mv7i? z{z8JM76k=XW&*OyNGMxlQ{-VaeE&&FddUV3^UK%#;9~_p%)!q+3ptDLbDvq(k{fhD zgOo=Abw6|NX<3}Ik@0sVGY5VN8ZCgiA6N8rk^Aa)a`n?EOc)3%RZPzy4d^g{(i2bJz?K-#^ zv+iE`(9d1_BUCPMdoH4PMvOlgU}tL}w`mQ7;rm~V*|2lm<>Pi5T94Gyg- z>qVRR1!6Y*2!G0?HY2=7A%|$1j3px#9wnl4gqNAyBV|cXb*+ z2xH%`?GSp*SY&hbai{8mDr@QT$$88@RvV@F)Kv zP=xBS#QaMdZykqMFT@|AfJqD^3%-)&#@pp}V1*xFd~Y(TZ`9dK|G51gU0VJ=J(YO+ zwvjF^KIhy^f{t&aSwg6y+Uv(~x zTw7ny-6kGQ@a#f0xYPbKTf>ZL_N5;g}&A;pzZya#6NAL&g zqWVm{r5+r^J=-|AwzD2C#%0y;FY=mK`p1}+Kle%9ZesCv+Ue)^{O+9M&zRwN43a~d z9a#KeMx1*8la8`)Di{V4yYt7;QARsZWRXvoKiIM{hIwcTYS9MN_%mZ|fCWaYj$iHa zs#m_E?Y!fr?OVF1@BQ~ZqzA}sqpLmiv~F21s{6UkFyr*TB@YK8pML5oiN%!s#1!v; z!Ho}1J;D#G{v-d0EB5dq!*=LL8wNt?(Yg+XbRgKDHZnh2IPfce73;IKb@-yyw_=;B zX7gb4ntJDBXg;VY?yw>LX>xESl?3?c1v2*s2fOAUSQuuY6YR&hwd0Wd!QI9DfQRp7|8JN{%8 zIRHi<7(y7t>R;xpuphY5H?eWm-}6fz5<>CkZx#I6qWD3qYn>npQmB2WbE!HtdXOehEW`HUp1nY;V?{-=;F_`6UsKlg5F- zKRc)19)4aDMXB(`A2R7|?_rw*N2bYd&%|^1z))c0 zb;Jk@lY%^gAE)3R^816Y{1~X=A3#h}x*(q7k>HFItT0rO!Q1aF5r@L8Dn@H$JIaLx zgo5DU2R7b;ap=4j6&?40-_7KmRgAxmzXL00A<7v0Xo=#7nX;B_FK=xKQEP8{^Xv5_ zo!fo7GyH$iQ#XHb@?mX{JrC7olz(kgcH5#o@W8`ut8MmfPe1uoiEUU*dZ84B*0E5F$?yrt)U&Fp-e?zzUI}h z)SKla{)HN=RloSe9LU+V)@FPxmbQmn?EIFCMW(i@*{T zZgR&J`mjrWLs;rQdA8tvtc91@>e7h_rAfALIVA zU;W-;(FP}f?+{-qb+*1l9Dm$_?Ma={v)djAN509Q*-Dl%3&Zn>pGx#5iWu&mp92i( zg)QVPj(4*82Z+Xm`%NWnWB%EzST&!Nzqvq+aTvKquXz9MAVSBbs&$_ZBf&4fH!ZqI zyG0+8w%Kw$i_bsr(srJ13eII>U)f^aHupSpwY~Q_LgRt6I9LEBJop1Ud&2UF#Rg6x z@)#Ze4&3bt7JCvQs7O8@|7s^AJN{toIOK;J3pUZVl=>yg;T-c%9#jb<`(SAE`q#Z$ zPZxWrt-bat&grM8pBEvjE4Vk$(cjsp?Wco~f4EWypWSZ3WmW~<#g-uiwoQ#^F!RfD z;9r^9Qu;1`5V0#D(&nc*8Xk<-LH@3 z1f8vb|C`>ph|lbM>glK2A%}j~XEOv0S!e$N{j`bR!*F%Qqm zKiXD+8MHTPBWtA={Cqh84}TC?+m`nqfl)SQ;b>d@ye;86uP%+6K?l=5_`$_gf4&{@ z?Gru!zWco&=`yJs{p3Z!FTUh*`2s)$tOnz+_!*}Jq80Da6XzfCG5_`6sMz5TC>5yV z97Q%-VvP@r)y5{b0e@LahfQG8HbThpkALA|U;8tPp8B(Pi7q8Fikv3pw-(F(=G=}O)#z9 zamU^IvF_yd!4JG!_xn8GG7!kis{ubE2~(+}_*uNRee&B`X35{>kGcj%xc2@+LCs<) zt@<%(*5Dc8@9j}~-e!k%G+CHdXM6HF;db3h;V}I`x%IYt>qm&^+PA-bQrqwAJG66k zKfg21yg>Dn4Vqo$a*XWCv(MjDnFmeb`KLhKEZG#JNqNYGsQe-YkLOGcB9UC-B0&&JmJ^_+f#a=)`lDJ*w$Nj zwRZTSQ`%MfF>WtCbj(Y}RRoTu0um;98NUpOHuW+7Q;!|;QsbLG-p_|hM#^7}$3ZxE zX4%U+csfA<%MW=UM51Dbq7FKU+&q#m`|%}p8TpyIZ1^Uh`FrN+-|gJ*(%J6o>;Ar+ z`OksaxSuDn;t!D)1FK@<;t##Q?zofXA${bg9)-X9-+mof;Hv6B0AX|O@SbyDB+v2*v z>DBr!_0^sC4}Q1|<(7yteN>Anv{x0kKg%Yq`H6=Gcok9Ay7qd4mz*}s&p);azp(H5 zX;@BMC<9%k z6@IixbXnj><4_Ky_`(~lZdrRKfUiGnPRlBRcT3iXDe$ zDHBUpLw@5(=q%+M{NZn3X>zE0CotqUG{2%3wz78>i8o* zFk%NIEWx8@F^l;mb4_-x_v3%I*=NzspHFCC_~I7r&OC^)h|c2q-gggfpZL@ox^K-> z(f%D`vasLTJQOU$6nUKfd5}Tgj)&9~f?b6`iwI__~*iUpnuIvpw*VQLs3k zY1%nwouGq?`}$HDezTc#uDROJe|k(?Sq}@~vcb-kSj1s2!4T`{{4?|m^3wv9zxyW} zH(Dk!ox=-{f0#V~a{oU*|6;t8Y__SB=*K@vz*+Ne)m4_)y;m+5>~rnJ;}2=yIQ+YQ zLZ{DXmy-#v?k;56d;Cj2asEXlpZWAMI+OFyz8}+x#~;+br!N?%>7W}6H%R6S7WXuSdXzuv za0R~#HU3nL@sj+qK!tG9@lSlTH}Tpmm?A>MC!WfgQ^ccM*Ef^%(;oH$SWc7ie{z|) zob+y89(UZ)`|JK~m$VafbL`;Pnz-#B7;b+RliD%=C-aYP0zB~9k~jGi;ZTl1TJxt? z<=X#GZTu6T4|3&ru%|mp=&B6)#bEv=mi&P3C;M=_PM4G(rF(e(@ycuTi~fn`ccSS} zb9(*@WNQ2%IwvPnWjT_E_-g)9?rhVi#(#`k8)y}+5~G5Udvz)g5@sC%xgZAG=KR!LEo1^Q?bP`SA2ggYW!=PFzHe_~zMRiQN z@vj=Dv7}ycy8q>5U4Vukh6acYkw^Y1Hu2>AWjn%8e2@?$SXz5uV7_^E z$?R|2-g|tdO|P>zcG^t`-SiYra0-(^jT^!~|NQ*turgNLMPifAzb=k09#|3|N&y5O zmCPS;8kKGIf3)xT`=4``@96w5o@@uBHy>LE+v{fN3opD-+gd+Da?p)f zoQiBm$G_x*c!HlG{coMe1srMTb^%8(#(ix|&UUmRge4)iEK}o0XN)1wpgcPN(l&i+ z{&9b{B^G~=&VoOuZM?ziJ`lgjW;*Dm%Z$l`9E#sLmJpp@^vy_~1AdBGCDe#Dx6i2& zIM{*SZ8$I>Cl>HA@Fs<$pFfiyW9e;|iP3(J3mpr3VL2Xj$h>NPVA4lF{K2;UPW$Q} zzw@;{ciXCMviYtrncq<01DTi|f61jY|Day{_Ui&fWd3Ck&Cq`wyUjI#qt@yZw(ai?{awZZ{?4{zaSkaMkz=KInVBb*@Ld!SDA`a!e9O zma)dcFTUGBfvvXK>Gh6xzR8yje`$@abcM{c?SFpot+w(PHk}H8_>S@yr}wsc{}iqk zf4&Sh(L|gR_`@{py^j4Kq3OIG9Y~90Cj0(Tt?4{%_7eD=_aKMtzifK327lE(tR$T( zKmCiB6BEDcfei*=002M$NklLU$%ju zwSwsQ5$2+Z%o}zRz97HU8B@($V4S7L8}8Hu!oTycyvScN@U;y-Y&kI}zo&#s??DUe z${Nm`mE5-IQBq;gsEu)`o85dE!S8*ib%~-e%D^$%R4pLi3^1aTlJG(Xe;ol22WMat62UI`dhAFsRfXin4g}WZVvlFF z=3g-{w9rDjXVxRCR6NL2Z{zT!8T=j7jF6Thl=hRKgS;*bu0{e`0y;>$@h&Tn%9!hMv#3$pm#Aj;7EVIQ$E z{OkKL}zA`aMpN8SAT;`T2+eUwWDcrqt9 zzP<0h2lXZ*LmF61cxz2u=0`%^ftG>mPAMF01BBxNNJ|%rgzo>4CRR8a-TEFn__P*( z%pmx|v$au-Ph6pbO)03qXja*>U{0Str!NlNqv!B%?B341;MeW3M;`aRy59b_H#z^? zZ_|w`>3`$n3=jTe{U1`Vt!I@nhKHyrkdGs0TUaU$=U=CRErOof_;=eme+Wr0@Lf^N z)iu^R2dCpSil4^#v+hH~J=-q5^mpw+?SpuL#;f(K{cg?jo z=`6-4G!LHiuk{CfeaCk1y$`m(-EwO|N22og_%G6GeHoK^2^BmWRf*aaMt zn17vC1#HIo5d)Z@=vDW4v#U6S+t<_FSi#Sj#Q%Cdq4%-J|Jk0@!S-LAePNrj`_?Ky z={a)44LAF2&)}~Etr?H0lRqN~zL3$MG5@I3Uu=m>Yket?_$2cOG1aAInFc5N-}Vus z<&rTfoHrQdU{7nQvNc+7F@r=DaK!b5D)jVd|3OzXY|03v(CPxZKInX&!KzU zUGy6z=7%Y4v5_)t12^~$DGKHa?E_&f zJ-=+=N389{`G-Qt9ltE05GMCAyjS<8WBfGPes&>waCs_4b|;S^NZ;FNkcE+dcpLsNEP zc$W^i-gU>lIw1I*9++~OF0)>yz2`meXqR5{JMoW>|41_Y9G{Zz=NoNQoXKQU_!NrE zY2Z!Zu#fVVKqI8@En~1&6oPZ!_&jH zNQp7I2q}j$FcF@)GM1r?&<&Pb@~?NUp^&x*jgp=0>Q8xwHaGPqd z@%yLF?!Qi-30b(c#)1pZ+cw$wzuQ^oT%?05d~pps8>A0@RqPA4$i!5Zf%`Va<95^f zhtb}=@IC*h;)B?!u&RYX)MmyiAn+JxYza8)Lw+!{NE6tMe*uPX?H^2&ST;`n2&DLHjJa>8 z#t#{xz^34WHDcpF*Srrtq6e(K@%4-7jQIK6g%@4kmRaT_?X!A_#^t)tu^X(*zbk+m zi$tKq;dlF*sH)pHtVFFuhy3X?{{B;Nf$6}FL(Xnn<0hvQ!(+f-jq;-Wasz(s{RgOi zp}k}_9F*WPR@t)Ho_h3QfU3^tKi@b$j3&PSA(uO*V6Y<~9-ypYmHghZg%H#6_a6tr zSmT9rffObp|JC@CQIgn{l?&*DC)UAFj@7OB4ac8dZ9L8|L-9MFmz*s`#wRFL+nhM1ac8}5XPdCf#3rr!u+Ub!zfyb9!57REA0+H5W_Jh@h zAV9}r9G6^isne(sWqkOEqsG&q_rOh`o*$h9>U;{l}1s45OTceo6IYoLEhHT-@Y}3G1%Ctb?1t^&( z;5ffDgq>;%c2T|LR+YO+Xu{0fTu=(9Fba?Qkl%9nW8zik6_11Hc<_z5EK2ao1J&Pj z18klycE~}y=n|28bicOwbYtj`wC@~!N_*C)VJb%N^!xON@R5UQ9lJ=h z&%FzZL9zNp z8~;fVq3tp9|Sf2;kftS`~B3-Z+~;I_VA;R=~AK@+m}{fsU4}yYB>lM zITo&+W31NBBh%~bA`}zDXG*rRtNy6`9ZVWHwhR|1<7rj6(J&MFN5((t!DY(!eq)M_{ zq$yuSnLxb%l~>r*`1enR@`-k}lij-U2gysBf93@nhgdj!;Vd0=+hN;{+W9&d&4D+^ zFB|ZAi+}0!&)FKdGKruiQX599!A~gBHngyG^gmqLZsYS0vBL*lK>US20*kURve6iU zSGLI?^DnT>D;-bilH&2v?IT>Hu)fAzl!O@_ZP2QfLf)L~ck8vns1gL0~5 zw5_~DRe4D&fpPwm`B&p012E=*tHUJLY(QewZIHMg!jflO*#p1iuaMyKQg&6v zF2)~MA#l)bC7l6!&%O8Q!|wxu;{1a$Py<6=UH&ou+@QjP9ZOnIRwJL2@xd+@kIm#q z5`Nms#`wqv{OM&ovqeBS@{e_{Qvnx6Hr~QtA~C3992wEEoI=hv@S{-U-)j6YGihv1 z>6Kxn9oSGA*i!W(nQ^@8{jmLm&iY(XXT9;@44!IV{N-2Ml6PZ3iVUNV(Z;bF+Ld94 zQFaO7%^0tC@?TvbP5ch23!5Qo)iDfk248Z(wM7`s$7za*H3x0w1 z^N;W&MhFa(`#z|;q@QWXZUn84UBj`Jf#mfMa${3h}TVrqk!bqTbsBE*z=)#sls|LRkWw7AXK z!p}BQM)v=lo-4z`q(IHh5pD?hx7`pYgpyRM5@6T43Af&9qX|M2@4xZ+C*FVM2O&$w zl1)}3Z=*qEn~6ECBnuI`;E(u=f7&+J+%L3_d1?*sN6*Y$wLRQ<)%qqNszFAn0sg zHS7?_hBajgz}1o67yzUEPEP#ZiI4D0CW!c4C=4y|Q*tLsL76Aty?e2DwVU-s#2}7H zNx*XoV{o-Ceq%XE8WE7-8qL3aux3$Re_?N@lx2>p5pTzVVFf#ZKd~J!jxsF!aI(ff zQVlUi_~DHM+iXoX#HjKhf1cCf%SG`FCwq4MQ41&#vFZ4^U@lH2wM;71IXp)3B==%p zm9(Y(gI^UK3!4J@^8p%r7EBOlIXYYh9t`R;6!>e!8e`32L7e-+uFqDS9OtB zzpCxF>lVK0`PaUFgzwQdP2Vw%ha+sZ(U%@A|Yt8s`(2OE2p^if4 zKRW)1S?d3I{>Au*jm2+7ig)t)M_h0yq6zaq#wfwQQa82TeU~lT0y?O8z`;lBm$^U4 zi7c2CP4_5yP1|(iHQKDR&ZMW49Nl6JqyXkNYWD|~Qa9{r+nkZulq-Ss#1!8!cF_{XtJK?VB1t4l`}F?Ot+!({U>PNKH! z&>ue*`^NVFI{s_?5#U^N&fa#_Q?_^*#xZ*8=IOfs5PRY1BQp+G1mq07`TxQ1`L8$0 zZXc_d;w189GG*~bgD^t*kjr%o<>#n6Tf&s&1;#%~)vV$H06XunSzGK~Z)qo;a=M?m zW{xltR`O>Ddj3h~@t3;c_;CG&s~do<}+oOY5I=EL#Nn{4!0 zIHfO!HFv;Ecc&74D=9hXj}IL)%`~Gg5nEhmEBxfA=eA>Y6L`BR5ZhD9W~gmH|I85B z_L8CbyO63o{7Y=lKXLry;h2o$5MMIC;~MbCn@9l(nXss`axQSy`=4%;xw*wA2N@wjf9XjXVt;SMjmr2k^p)NeB}+`ZAe)5W?cdEm*%Ys~ z)m}sOXLKg#dTV{&_cNWc_n|(hQux>pDJrMZk0^!TjlUrQ#=;qnKhz!WFed{?voH>y zpH6l%CIv5L%XS1r^&x-f5N_lAs0)h1CqMDww$X;G>r3u^dQi$?zMLF9x0hDSF0-Vc zO3S^>zPi%^-hWjmcH@7HAADG1{tfdF*^u9{%NoAQW5|!tDFvudRjBtL;)F_z-A6En z{He&8s)iFeETMamZMEe(?*BdZI@I3@oPTohgw8#7-^ypeZmCPGpUKOMiN(`wudSVpWCb zbz6aVv~6{UJ3l^7(Kxu})_-W61_mH+deb89(1Ui<)0yvWn|*mV{Sd)J67VNp!O4c0 z2Ok0?SDnG0AI!}!a<@@9^%z}1;00Fy{)bag!5Fv_$kdCrM>FG;o3dke_~Hz$ka!o z#IApBIy%*BID}4Z$d1DKcg~VU{|_;(O%vJ?&=`N@kS%~*3w>yrHk7TEz1_SrB>>XB zbbjI_CLTy~<&}TZ_g{YKCjaCi56*~#$>WMr@uQO%Td)2fdv5}ESyGpIo~+EQ+$y&! zD5_Xw6=g>qT77Kru|af3+pTr9AJ@jMrxnF^6x(j6K~WI3+m`mx22orQK^+}%o5#Uj zL>t_20|i8&immpl%&J`G{k?DePsBany4aYHr ztGwMj+2MLD)-WcGz8L}|H^n5|IdsVw(8XSK8rTvsh=!1>GzkXO6yO9TLx8I&=RdCS+DHzZ?GV`Ou&+V5% z=clnS@S&`wl#wj?Gx%nHyWk@^{91vMYYK7mPLh!PctPvv__~&ztz3?|qRU z?E8Z6fA;kAzxZo@IC}N&d#}01C!Md<1CXz6Zzi-(xE_BkhAsReL6-Okx|IpgWjkhj zR*?J=tSxP`-2Tv@$Fh9w6^XeFt@`Tt4<$bAgv-WoZo`ZI$9HLx>1ER^e*Rad@B5x_ zoqj`CZQP(=EZyI7;F)zy!u|5Aep3(6f1eyT@OuwVlp}w5($Ed#-$7~7a{A5NKPyiz zZaI|b=L*I2o5fmKZ#q?Em;RRkSsVZ60K+&|S;Y8%xnAY|lArj6={eu=jnixNRx#ho zpQhM;IsOBo7zlvWa<7%*FPV*1!I*NKXSb|L-?VmD9_MKn#CXZk9Y2xs!2PNKi z`{?dXJu2#+${0 z;nkpWV&8iFp^;#%j{oAX?;o+TAwB6nDSji^fq2D4Ss!m&0g_!0Rro*!YpNN?aHroYozaG+G+(ZF(%_$3Oz3QCqpIr1koIP}3W z&dokviKn$$df!$GI7#*8_z#5G(ty}$8UBp_Qmybqw1pq{lJA=S&6j@ebXXJ6|LH&f zm+8~=Hpl9UyiGOH~wynR!3bj-7Axp6dT=U2?A_>qn60z9o)&z}*w+J55j7|{4#lSj8Gi8(4_Fu8uvUI8p?lUm5;(wHWeEzC0|AOi1&-iw~G~`RagN30|u5e0`rhql+c*Wx}FkXZ$%XSek;ED9*8!eBdv0d|j4J#vh}v$7vi% zN|t(j=ur2As+Ma}<7}>@q0(%s{fHi@6Z~g>(^pT=_=fM8Zo2uF=^MWO%co!X#b2Mf z@Og*s3OS@lEj;&mKQ!Ie?f|IumhDeS)h8*s-KKP13s>k5ZC5o$+-ZHA!)B%Zw2c7V zK~WOBWhHk>mFU<9@Mw)(BS<>zAfQ3oQ6s^o>W7IT$k|m!WZpPW&D$ZmZG4FE`rnByp`9+Zwy+T87ii zFPY0Yw|L+i`5l&h95jaFpksrBo~}Vofj<{jrO2n$Sec)!@p&C#fV=fgrvc<&XC=p! zIBld&JhRnJ*8I{pGO7kiZa|4j z)Hq??Aa}jS|E$Np@l(We1AhaYaq~uB@wE1Xzm*@};G@6Kz3#2&lHEG}xo&^>TlK>q z=s61yd+3MRuhxGiw28%0dk;R3KYGX{#7Us46n~2yH@Dxd8TqBqPe}X`QGMK7hBEMK z`w{6g^Q$c*f8YKV<6mxe^fn5(!!+r^gZrnWx?Ps%PrO;r<@pUggXR&s9iX@0=4}zb z@MrwP&vuY*B|we;wvV$6u92VGz)#hBTuERl^T{@K#y{v;9ug`_Ud?Q`)lz%=FuOa$@Twlx>_&9c*QGz zb$ZNWK0@KRw~g(9-7bQob;I~u@~3gK!K&Jin;WfM{``d6bV$7kVXexR@h3YcWm*4P z%Ftoh$4+zm={r-&-q`Rg$G_WO`s5$4TVj4*6VLC{MB7il^p~f{>A8(Cn}@>8-^V{h zaAl0$zVYuEX;_PsZZQo7#59Wrv^sI5{qVzyL9>acx)p~e!zMK?>6O^G)n}#kvWwYS zPcZ!4%U|hdcm9MXpy`9~r@zhbeV07M<(NZ4Kr=_hjmmsz*f%(CgfL=H11KwjM}`ds z`nSsMPsMcsMvfjkeUQKpv5M%iTHXGzQ(A0)Hb(BC)dx>}!t}CNyh=Z^+~BtmKISp% zgBDEs-|US?F}LyG`6Y80XtAZ~lp;>6Jx>L=Ko3r`cuugWr~&Ul=%=-;Ha2U=vf+&Ks?<5r3lk z;1~2#fNQV6etOZ1Up77VF%Ng&q>mQ-I4BjKyP6mgwwT;A$f%>xXVhbdia1ES^ql#^ zp^l$b*^FGVy+JVOcnu;nt+LYp&1Vz8wWZ z6C*+LIt?dLHO_0ay>UYer##a(dHI2Awb zBD7EV_>Y->?bm;2;s@BD{+a)KdZ_LOAdO><$F2O27yayX`m9!(l4EMv!4E%p_A7qs zd@2YyF;XgiM}bTqtJ*;D`fPS6*v{8)e=^cOs``e!_{?ozVT%xa^Q%z&OagtZu3r0X z{UCR>9yRjI|Icqu_qy!3xp2VFj#|9%#V^g{HkxeaQGq|~90x@eYX5BWk)PJ6kAh89 z@pWwS^EzT2!SA+VBfPQ;pz*Q6e>wj1JqiHyO7JVr`TIxvj-C!VJ3a2B9y$H-AOHFE zj(>XB^y*jt!L(a%E8eqPu`KrgFMi3-O(*p{KgXj$-CosJ`77Qfzr64v9xs5wwzZ#N zX+IrnSNaLV$iqQ9BvOJq`$kntDA~OIQRd?mKcUb3R+U~kIu4+#{5VUl^Wr+jLxttc z&-&lM-$Dh%soGx{B?l1x%>M)r4#U!CA}fx_#4o*CrA41$ z{WQA#j2->VFDFaf0b0xS2PsWzWr8p%d4fcP7(4Px-oP4Bd;kn+PA(b&QWfJJn~p?C z%?CU4do?7E4k4>dFl@`;?6dJVWXTYB&eoD<+cGslayO7cD0{w;k;|8enpd+CT5~j) z{ODJ2IJQqcCV28kY9+6g$ShagTwXa;c7 zkJbjQ?T|Nqvo&2Sn~_Ds0Fde&>KK!32*sxG+c|Z-I3~?WhUmFXnOC}Vn;?lvm#g0S zZeg6&TXy!CD+^G~tfjQZp4W(d;ieVtpMFSTIr z*|Rq!s?ZYn@l87^!>NUUOb4cIuma+Yf91x`sr8wiu!Y1Q{J@B_mtGjvHl4pbK+O7B z&ktJbe@rPiy7YgGIgOg$@K+L_zmdB1A(KxtD9@!Sm(^?cHmht!atM<3!Pqf{O zI;rzh@xP1`RP~#iEj6*HJS7V{&`yN*xcpNAS_K6Ngw)i=+;&;EKE%W|g2&RM|d;7qZLi%5IjAs6<|5mja^K5^K zkr)g?u=;lfMoZyOCE}s|wwIKg==jG-bteHcVt)7c{&@QA&wQ%+k7@tNivnn`w*}dP zIB$P)%=QP6bhWX;VUfl^L@m*7VxIYhHV4r7F-4k1`4WM6r3gO;ByC}sh|HE+fKQ^1 z7gw3gNoB8ZIx+vYvL2layL=nz=X~a;xW+i($_;pT>#FEF87phXA0PXIx!@0`p`vpP z7&e4?{THI*21AQLxnlk(XcsBSTgHEs)~45N91q&9D_+`!oHX*|fX=+ufgyf_%SZX|s1H8pvp&UmJTvF*Z-2MT;O)^H z7|q|tJQT%`QTmcm)00ODIz(EG{cRtk#~yy;$xg*4Ou5>FkhgXg$tW-0+9a{<+h2Uj z23`1F3ST4rJ>3EES)cI~%Z?n@_e9-NS@G=A8{LcFSX#{e8K}kax9I`Ew%It7tm?)u zl4e77A&Q%v=6(mW8G%J{Y(E0)QD6%~*`uSb%o$c`E^1pIYa})}q>AJ8Te){PvT8 zf8?t3@wP#cddrPwo3qnvb#?3i`l+92C!P_-Rc_{&EyqWjsj~~RxtU`n#^RCz$2KO5 zu=Ut%yviJhulABMdj%I%)>g_&1;-O@Dyt!mrSV$_DAuh#)Lh07M*f=(I{UbQko|x@ z#)BP@UDKbw{teS7ebUEI7wsj0JkRwuCc6a0woq{aV`%wp%a5V4lf|b=+KOPG*8cvThM2VYihuR^mwsx^NsRLfub5Z)TWyX)^eU%6To!j5&dkuLyWHaZ9r^gtKar}?pf9*TRp>+p; zz_ipq2IRn2CmXlBQtL+az2#hEA=~?%G@yoaP>CocGivQ|kehBiL`S3>Q9BZY4KLghc zR?KfKqXwRGdlf%*3F-?Yx{43OnV&M=GM@Q^WYGM&P+-biI>XtV{J=H8`XGGpAT^{) z*hQux?y?sV%Ln%2$BrSSrT%S#z}3j?tKtg3g!jMimD3mgYuzFw3f@NguRj0Z`R$Xm zX|HZEy-{zSdhBB#HNEJEzf0CaUh<2CJ|Xs|n)wp~{FI`FpS520)a*LH$ypb<>MRQ^bgYm z?tkU<(x3Wo)5RC>&13MqayIb0%?+&afIai8?D4M%;2@B`|DjA|iQnr#Rj+@FXBOih z+lFK;|B?(aZ8rfHYxsqeU%;45yvVmiaGN16Pk+X+BQ9~2)!)BeQiQ7T7=+BkdvTiV*cI{wvIZ-2HGuS2f(8$07a4WkullKB-~@n`>w zm7Uy%Rep^>L7^u+@|5AnGC_aCGrrs>j#&JM|Mb1n@9OPhFh2INA2Gd7Z(HL;`=@{M z`!z9re2xU)dH)Z#8UdP@!}w>&tnyCFzhoHBo&~lPCb6SX;1jA*J6bq zMoZ_hd7rgnQWLq`}6{UInOC0{hg3sK3Tx$Kxnepc;K462Rj`5_Gc|*~VY|yXn z*uXE0&L2>iNDf(|ulcuM>~_Nc{V({j=@r~6B>CfX)#D%Q4TJ}DlKH|PdXAn?^H97T zmjSc@J8&v!{nO{9I{tcnsm^zR+WuDgV;`6`<6jD6w)R8jUtXKs{K7XT4KhFbUvTNE z#FV&H7e)A^OaJehzVa)+U^;f}n2}!ml9x{}`N>zPJn71=kMslK*=O+P>W}`IN4NFg z`oWy*_!D;`3OgQbe>|U#RB<>?gABze&C`?gk_7NrtZsh@ zljiN8koZUpNBGHAN1%8K*}Af_eebiZW7-|NYX1s9U;%-pAAi9zUQ>gi56Lc7rY=Ap zbk5s%;o?yW&-tz&)K;N!pesFJ_xisu#kc*3ubn>q)Bc6qz*T5YOMVaK*8eSrw710} zr_qJb;jaWgHCCyiz-Ve`I4I4>KPuR?+!J9DSwq7^lEwlkcD9-}(i<1;4qF!{0cOeacgxI6dyMk8pf%_{+bWzV_>%<$ipGUWo8# zfA-gQ`!YS(?*I6TJm=WdoUBybKK?X*DQjCqzq0+QPJ7sX=VO8GO<{g~4QspDSKaGX zrsnse`4vA{#$znX3k(GKkRd{5N%V9CGM?G?aUb{5^55l0D?IHhzFBr>^}OE)_>mL% zevWQ8{-$sI>R`>s|3&|A!(V+4Kk<3pHvSs3ZoPu7eqx_9hfAN^S&Nb1K(twY;OWEh z$L+TR^`Xxjf4~w4{JeSflb`(0CDx0?-u>R`3%~do)0tDJ_3Y#0{!x-xK3UKAd-k_| zo%s`MKmR38WNC}|hwopVU$J;xO7Gb0gsYo0pFO8@a{Oy1b6?O>_X`-~@y|`B*{oI{ zf9MmEyUm!$(QoC)#%+={IllSU99;S(Sjt%!E%oDX@q^v?Q#5}=@t8cT@8gcjq|IKE znP2j#SW512(;6=$wvM(WUfD_RG7kFp_$N15aNIZ9(^?KR$*q>sb$ldiFvjwFm7w#- zbLNM89Y5F$e(&jVhc7URg}RK9!2_F<>gIPvvI10{{^!s3j-N6P!Jts%Pa-3_tpG{~ zS03vjXM2&6%uO))vg(E-*Tz?6Tym+Sj5R3O_;55*!$~*<9i2%7o)shyf}jzIo410F z{gOWuF&Tm3mlKVFKPbs@2iu_1yF{LnJGt3NWuMMpanOEkmfFc?qf^}wEYu5B^zj!J z7ZY>PBw%GW{#G)3d{V@gw9aq%>e1aJ^z#MI>nhxB>_&0xx1^(-Ayk1|HziE2f7k{4luf6s< z$8%HA6I#5Bvm6{AowxPk&nxrR_U^#ytF-T9DFyH+&xd z$YEei(3G?)yes_8-}bZQ@h@5Uhw+c0zHD)V5EcKR3kwf4XNz_T>zc9GsZdy^gv zf6BZ}OoRKvAO6nid3qMfd#}-3DDe_i#-FOjfMXrM)HK11Reo@3KW$@~ZGy5sZWwqZ zrkNyDbsm2+f9n~#OIDhK;}W%}@B4$4oE&;ph1+yuRY|mRp56O&|7v z`}ysg`~dMoFZ>x@1$h-TV)Hjs+ptLF#ZR3-)wgVaTgQL!w3I_yVLZf`o@>!Tj^;nPpPq%|i|8=v)5+h4}~O8ae(jXtuU`PI1o<-PT!fo0?#!MM0el(uL4 zOCa?4mhtZ}z`;Lb5c0nL!B^YgS=}b~fa#}y;=fGCj~-LEoz*dsx6YkaA6zkA_3rn0 zvhBBj_m8JP`4dgL7?z$hIEw|p!WMroyVM7Iey~XIt8u_Xz`tAH zA9%*$Z@v082?1Aof|K~tX4M^I0`2^S1V8$C!V8#l$|~6lfedLg{$*iY32dXq$iK4x zF9UhnzhRjRT~^}ETl~j0>H5;2`2lVJdc=m(b?O7m@2}$`Z!TxD?Pguw^NYXq8`iT3 zzQz)<+FH>v5!X1-)Bm*PT>Q-)SSPo?D&%e#culA}W$eNqc_sp5%(86gKlhl$XlDzcT)-{ecu5;_$droTKgu+IjA+xCs_(Mhqm-u` zv*ed*-u~30E&K#RKRA$?-|aUii?e#e=xHDSp2DP?5|0@m-S>W1dVlcAPkE9i=|63H z&T};}FT5IcjPo=y+~(K!zm@q1`pj)rYt&!v1Nw%f<7u@&>tAw*)OxC!)%r^RkNmVN zA9pwHSDhE*rPrym-NnXT=)P#coKK>oO(^j~C3()dR3^1}`}o6FW?ug(hd&$sk{?XN z;n%y~1x-Eo5&qEz}Rh9Mq<7720RB zS)BG;ZT{M@8-`bkv~%v}3nQ_%&>NZ~bmT4k$kP;+>F1$^g5}roGqp2W!+%k0%gA2@ znYC`z&NlFy83X;&0DpBrYgT5T6(n(1??^`IKE<)K@qhZv zt$LvX4_3c>q~p3RHf`G|+<>aShXo8I)+=@vcT?m|rmFWEmm?7%R;BWh2N|iYXCKq5KI&Ai<9^w$aE{pWU#S)jxFopN$q+ZWj?LI` z_1dEz`A{AEZqQY3hkfeln~W6LAGE!?0hT90}hoYe6F{(E0`sjl$6 z+|PG>$2;HC0gHbf7cvrIFVi~Rj3o!Y{}yKDwLZ(&m?Z~xv@4o5qkt;?~4skv=&G|Q*8OggfAOARa)zI<29&P3Ym;kJ~1pD~A0vI{} zH%Ki6;PYSaKeX`iwC#~YG<$92uVb++@zfdn27bY}Skeg0*YL|G6L$nz^AE}$5AA3; zc2AqJr2WP3%MFE{uLo&Y`K2H9{q#W(m|p*Y-aqoc|4jZg))|T>%L`0+TFwUi_>X%0#K|C-#!z0#E8p!$ zGRR$C<@fZ-%%3QO)7orND-$Rfwr{b!9=T^nRre*M#qXe_Pb7+VXn*Gyp3PdkwN5OA z7G8)|CR2TGce4qsdZg@Vh=q2rD;UrK1Z44B)a2nvo2|F`DnHH)XitU~zwLw!!E9au zOIER9N0~k%8p1=Q4|yflE&L>6ZAI6y^lu>TwaEx=DZ6p}6&`eJ$G^Ou_=z7o{h?kA zz||~2`XkTR1M)NJ2LC5M@nfeqyy1<$nqf7<#!n;K_#gRC>(F0JX~K;Y3HO2eg=bZvzg7D<_QUT_ zVxM`(5mvpu|21AOoh!B=tm2dpCl0%HMttjSr>BFub#%W@D4BfY*n5$-i+wuTxJ4(P zl{#xLm2Okc@h|P?crx}yYC+1ec=h;0ZB^b`%L}}q2aPCtDYe*Q*YUbt*7Zf|gHzLi zefxBK?E&`z`v<-oUaYsyojge&Bz`=r6sFtHAHQ1m_!4^R=RN zFI5}TCw#r(Iek2Cf=3CkPq;?=1Ns2V{pyz!?gK+fl2mv>!4gepT&-1P_(oIfq)R9z zbzN*rPL70B{Jk_XCY~NmS;d!S=Lp!v>I1fU_60}urdr<8%{~&({rZuD7cG&tMr5(^ zuuWX6`0IRD_yh5NEx{Z4&jq%OiMVO|t(s`uyLY!HTet(_MtyI}cY?7G&V{`b{gQtt zK6j?gCVsX7`her&u_NjOO*Y-8eI)75?t?qCJ$EM7e)Rzp&OEd6xV|giaO2JH6ZgSB z_KCN(@qTBr-icTYW>)a~k*W`PZXM6_y!pmk)F;{p2zx)r1(ki?wvJ=uAInSI?Q~1q zs_(>Sv>D5VQTcYdvRUSX&)$6pr%R9BUtN;Dk2?oFov(lI4OOR~;#Mmq9`&rSlA6kf z995Wt;}~SXwiFgs&aIV?`@AZ5!**nnVO@L!kKw(L-XMv^#o3_q+lIhekbV9|0%Azk zV*wj;DboJNZ_ellp1Fl!m%f7qv*K!wjsHPR2eb(y$$l%EVe7Ap70>4_)!BrgIk51}y+=SwR8C1c7SG&bEm+cq|{5kg%daavYf0 zS4(j9<$GR{Xw1W+ThpS*GksD#jzxBvGfBhcn2s?UwUIxVH2z9m#(wQJxvYPM-_gO> zY+IcG@+W~(R(0a6l_vws$+7j)?Qd})ry*_+dQ21_0J2XUvE9XNC^GZLZau%?^8JBeQ;JM)u$B8 zE??=!Lsgk_9@hQsjTqm-z$iAiIMt}tI$@tVhai>{DmH# zk`FwBX1hnv@sS@pkLV=ZlWgcb;d1`?drQ)mzD#RY+e94IhKi{?uq^B7dM)jXcek%z zK+fcvbA3->|8P{3E$kmP4AL*=1*dy~A7m?M{`$VUE%^}O?>?h_j}Y%wtVpsf zpUT(ikZt8(^`|ysjO{2LZ6~o`;Kw<(g;Ux;QfK0AozGHMSS24h$8zaSxP!&$y94uc znrz~)t9&_cWFnq%;2$d8C;fZmISKB@28@3a$C}n}TL1t+07*naQ~~w_M~@uwzL37* zxNxVXO)KF}BRB`pCVt7?2k15MI3}_!oYmt>X#bA;p!si%VjF(@Y|?K8Tqs8Vby(|U zK$N`l1#DG!@3~k%R2`B1y1kEN@@L;s6F&yFZAj41+qKHnBLI&&OBa%tb(BpOzi|d2 zitsarLF2U61j>CHk5u?MK8O}MHZbQudIx9)V!U*IEMdhq!)E>ob9Am4i6{_AE>-M*%xR+>?beeW> zGYoG?jGD|g)Bx8X`g~MVV+hQhO?1{9AvFz#NS$ecPBJ;z2Y(lBwemVDr^&Mx|v`*KN${Rx*lhsK&knRvZY=Xz-(o%v-|ZBa>MrT7&sGsSSw zzSdUS(Eiu(X95OOIogc{RqA$Bp&~G*YCK4uGF;Vu%ErOX`nZq$Rc78P?bqOHq2hyE z@w-_lCG`ZKgGwLG?YB>hPUPeHwOwUs&V-V(a2&VEjGVqQlXRA+VT&ic0J+sNw68d}?|0hnIn4b2P&zv6m zum}2u34Ey_&2aF$gN3)?x1srE9k+1P@lI)z;oVqH+vo%G zP3e05f={BqF2s~RxJ2uCbNjf$@2n-CWX9U87&;wsKjSI0UKZq~7Z+hq3o4ZVq@5J&!AMqBZgG#;D0SKAMJF%Ute!tMH? zgG%(}6T7NMn*J^R$hyTPnpEXV-=xCtIVV;(-*iikjgD?aSmm#nIy$H$f3142`(Ar*!zT7bd6;QAZr z1Ntd8*mWL@XWx=Xx)pPse92q&!m7OFm4mg^RsCE%BgVyQ{{daqT4~fF z(o(-kwv>;4V;Q^KlinZSO*}kW;GlkN+LX8x;#ythx9{T3Hk*9!E^@AB{C}ca)hq$7&-sc{ukSJvR~)_kj&@5)??EO;wOZ@ zKUWQvzRQ!Lsl9qU;J~_$F^RzE&sf?BQ0WtBQ0n|QAkwSgpbFh);X>ucCb(FL2YKU| z`3c_9C~N26oK|}dXyhjzEWNOcD#$#+{6GHZ?`?J3crJcu9HH0W9I7L^Yb}^O;u3hemPrPF ztzVaDaotY2PJefnv18^EcoNSjs$b{Vwdq3cgQFS;99(#H{jGWl#HLiY7H`tuUFGa5 z+y@#D+(tUy9=L21Zz{ffr0j#w9c$S!@yuk~MZQhylx`O;%@Tu2w`HOa+n%qfM(=2s zKB<@8R-5eE*L%S>rsD5DqkhD$C?o6kse8gvClwrfZuJW?U@7!s-KFO@o>++>$5iyi zo6^#=_tIAWNIGA~TB7uNF|P6_2A18j(0cnz0wb2OJ*yKcO*rZ{S-yH?e}JZre<{J6 z+b6>{^5-}iyI@i-w$9&Wqb>R%thOTjLCUg63`=6{-W`)t=PHXtR((|M$Byzru4>-5 zciMgGB44=z0#VfxJNUV>E7I_n9om#D$Ep%CKIs#1(iZe12X#^~iZe*z@7j(~cF~nD zHBv>pi65J^lxJA-_T5vuTICi^uvYuA7&*AbR{wL9Xp6OSWJ%$#+L({FX=BIP>a}eD zh}6p?W|yA3RQ&ri*~YUvxvEc{u+|X{Zl%2KwypccrNh>CEG^D&{f_W6*>=g{gY7ET z&G9kmcH^n@{XEmn{O41{WZPl=Aa~j?n%cacnRL5Bw^ZJ(5(Bsf{4(%C$7CB-jlDVrn&u^XO zm5fTsCgcK086--4=nP^}iN;Db^Q)oh3UsLQXFqu82q5rP!GjhIlE@rWiqfhEt&>Uc zP_68g%a;{%#)h&%?aoGyWvs1WQU`-Z=U4nXehFH~cYZ7zKOk@tKmCrmK_CFE_*JCp zHa31kvyxGSKYfK48yyDdgij`b>LRLXmZP?PqRMm^KJlkNDC=V-~OZN z!yob>2kEF}!^F!+>UHln7e=jC1jSE@@+!Y;^Z1vmy94Q6E!AY(4Z1>sTY`4;oTf!$ z;^9J0HQC1G0dHPhcjeZ_Yx?Cv>J$2aiKbgM2Iz-9d$La*+jznEff`F6aJ%GwLd5e2nNch?RmnON7X+9#991l>l zj32rjx1uTA5u+W#?3Z#Ynsej_yW&{oFWl|;K`pz^&t%(0I_ z$ABI~N_*5V_;uDE2{8~;#|wYwDNXDm$E)*GE>2jg+@6&u8mbcK1m9ok7*Iue>8gS22`)1wi#7f7A*`P4X))N)npn0dSVVdNjn09AcKw}qqh zm5;tE-8#wyXFe~Q@2tZw@f5E8XCA=J;8;K_J88tjGO74oBk&at>gA1v4cva; z{yL)~$2BdamYH0nic^E7_$y8{F1I*clVcD{M;nVj9Q1sAs}W|C2%ho|za+7p`I%}W zPK#T?k_eXkV8RcsK1pl%(fN~1Zms=b8`S=p>MDNeybe1*anS-KxY27lAUA%SW~1Y6 zC%rK;#uk5KO$`(!ge6b={b)Q?=8p+BOMW}1xd2RG{Dq%Aefx7>F#XB@{IlsV|MG99 zr#$%+>;xaSPxzR}P0#zTZw5;H7q_B7?VrdZvWrYS{@|9NZ-1_(A8dI37yNQ^R3`&R zHF0uOUjX*Camg3vgSy?p54%?wJouZ*Hr_DBFSGmgOa7RcY~%L2*7{L(!IbF(CYhLU zI}>(_fG+iuo`BUkt3_Nm@5u6#VID*(5<)wEmRJxe^) zm&rE90^^`=3#!)8_M=CS=qk{=%59|CQ&oKIvv!iQEthR=*{O5uAd_ue!Fc-A8BI3S zt%R{-H^ML5Of=N~uX7e=m#iyo$G_FSF#YXC>Z-$DqAOTLKP+WejKqtq5wL;`HX3&{G-oZxx8O53u3a3tJk=Sk4eZe@mAJlAB_4BdU-j}mh~M3xL@m- z$u^$Vc}CxtxcYZYevyv$32W1mZ&_dKB;jbc(?PY)Zp0b6*2zczQ9sH@jAa?S(T_48 zcBHj4)%kzK?fh4J2L9MX)cLDxK7W&?eS^WCh=d&&=-O#sFrnd`7@d;mIAR!EONaR% z)r+0d$X~$dyL=6QV}piy25|88p94ixEa=x9|7gbw4`yja_|fXm`0z;IQqWq(^2Xr_ zKFJ+RIW(Q1eMD29`7g=!?{-pj)kXrK{j!$Ou>dJO$!{rjfyM09w8&br17xlfvY=?7 z1alyRn=~jKh#N>m7B;|!Qvtau6S}chdh4rLf*m?6VonBZn@!{LOYlgJk3xi!vf|H9 zAN9D$Pyg`dx1mvr)f^W5)!E7m3rKUicV*pp$=$5EbKo8@-9K(ouU={TCiiDy!{1ygbj*zxn_RmUJ7X7D zBf`z=(gjtv;io0@=nTos-SfO1^O!=0o0j!#eKkLpLeiPD;B)7svi{uZ^2kI@Qm+4FLH$D9FY4@!s zeD}jE-*f%+KTn>X9&)dv)5l-3cY3=fSAPHM>-7eq{xDbCa<5B|Pw%L;_v30Pp;fve8>CX_VW|vc3zuwOL^)`>AF5B8*-AacH^o?-9k3rUR-@pd2IV~ zDL)r~vF3=xw^K5^>9klZ_vSr1`s) zB#{wq9WzQ+ZHTUFAjBfyh*Iy`@K+RQ6J=i(PvKybR7_(%{^ir#i%s=0(q0Y<%fotJ z5w{of!lbk>KbOWfc2dk~DH-eOv#tD*Y~?S|V2ntm*_tn{#`-$`CBkT5Ic%2r}yK+ zsM%q8;IId@`C&XxHa_@)513x}r+?}Tetcye&gN2$d~R>M zB1a;=V~qS@cM6D_MQc+o9a4orY3w}N;h@u1AXpDlBQPin?(2mz6PXw^3v{kJXTsge4|nJHt*3@dBfO#vq7ogaGF7y(Pyw0RWV7O3srT-J-yQ17v-sxHNtH?X z!{Z9gm%x0R-a)FVs(2e0^>>%b4CeAQ^r5EB<%PKYvg`Iwyv9Q)N=;@@DE=< zeZl|!=`;Q=4Se1*wQl^|4}N&u2<5dMsK}NRV%ZG*5`I7ule_mixM#Y2->zx@MS7c_ zz9c^A*um+mFWWzT;j#VG*Ia(d^!fKYrZ=zZm+5x(9zB2Zp7vySH zN~;{zGZja%2D563ZxesmyB5sUF3~p6F*3E{-=!;GPkMhq)YzgYt{z+Wh@54tK#5(+ ziobloNx3{qgFL>pEX>6ZO4p@KJ$%trd1*%riX+G@6ERova0_9OItN$(9^9{eV*7HA zeSYdqWZ|YC-=@jV%bpG3I4ezQs+xj=${4nN&KcPo>iF zyh3z*XDHda9NCgT^&nQca_pBlouTV09`dp;*;uDMVwcS_FPo*DIxl~ymjjI0d_UNy z$)@qU!>Gr1Sx2@mZO6ZzZXMPryR-P2R9bm3ek0*6oEPg^W_S43!7vf znRrPE?dLYrG3~VPN1yXrz9R!^(FksnJ*&t25~7Y0tWq>9*qml)x9N~f5-+>Ggf5eGj& zZ5prN;#Q%!-)L3{;LykMsOYP8$Pr6O7zNnENmcqJ8kQ1+Cmq=vBF8JXh2?;(((z(}8#RlelsTdB=4DE{Ww6mDl!D3<(iB^DyLT>vF+K*~mb z&r{20IsR|e)oV}qUmiET_=V4#_A#l_aOme3{NRsIPycscGClCa?&tPzJN}EGc;F@t z*9Xob(%XWWKFV4_z zZJ30=9hlxB?|^%aNwLhkS=ppqnsQp!k$10NTH4J=k^-{ZG2J$Ov7XOX)*NwpVFI_$ z@JzEDWV*}NI*gsQ9YGgCH)xdGrE=Tgnp1Z+Me&%@q$$tl_RZKA}iL;k9_2( zR`Hc@a9DO*%J^0)&M}W}To=V(kq2WdzdY5}!|DTGmOv^liTz^?SG6GPh~1`Qu%oQX zH}xz>KP26U_E*|k8vVL9_G5ihxsXSkk}Y#=F1h3qPr4PJ{j|90=9{OZN48Et6h_%s zeVOlsf9XSgr+(++Ux&R;##R0Y4;|Vv=|&tk>4ykEYGa+_1tjAU3kURL%(_W8eyH~& zSMID1KOg-cA%z@yYy4^yB^?SnK6Ez~Io%+ocz%aWt_|k6H5G7rC8c5FEK8w7mQl z{67CL(Co*Ftho@GXvk)km{ ztLvw$wsLT&L@+WCkCo1&L!PSif~SmWRD}_p9rw=3Y39or|m~0T)-*KGiEMvtO1Fi`L$kBhNQJy_7w*$U zTd@#t+2cMptMOYz8z?y0%KT4#>XW9+FTZs9gFkrP^mSkRrPHf^?bW)4R9CUd-0}=e`nrSTJAz}-ys_uR$?Im+^I15gU+EuoVE6R; z>$zg>;Ph3;4o$l?**1OJ6Q_^+f={2W_}IrxHy_qjZ*RMLx?JP=ty(YFoz&Y1_2q(F z=uY$Ng4gr;jPiqr&4eOXF>oc zt1MM3{;GF>j%$}_8{imlL~r3cb(@~iGpuvQ1&5_mdUnrh>R7!*E2-7Kqcr68DU{On z`ci@>?e_tw44qeRk&k|2 zYsbr#_9M@y$C?t$MB4S~JL*Y6r;M!nA^ufE4)c2c@~voN8-yUnVwX>>nNT^TTS!mq zn9XEs@iXbjSh=nB!5GbwKW*yKfstA-RaCL92ztAb^!B92a+SB_)&8z8O?-+!`qC9v z>S^gA9TRU+A8;oC{Nru)=>u&G`kt_i6pU(dwW;vOeCb!VSv$cNT_bk8akIKt$%$Jy>u5d=#PRe)GZztI6Y%V#-G4Z6I z*~!E5S@)IL5Ac0qyFMt}yK~NdfbRjj^j%?}euU(0#Ff}b^1a?ydX@0*p062Xyq%Y4 zy7GmPt2=q-b0vO=U}84Mg_52lU&AqbY^R%z))aQ)S2mTeftfe*(rss3Hsm|8lg;kk zx_bD);W(&1&p#ML=f6uFo!7SOr^3N%Xf|Z?enxgV{>^F-RgsmA_y&{xyE!BypZNjf z{F{7C@N<$&DlC_K)jl$r&BQ}APR++hJ(W3rT4a8emD_LR$CY}^@zKtv69O!e<@Te} z`Th3SI+u|zKcrsu&a1`4%m@xP*Md5Jk){1A6BKd+)4wN^9g8Z2fzbaf^3jCb<H8j*F_SI`z41}}YDRu;i%!$AC~NtF2W5CL!Ik2L<2 zNqyxRzCZ}tfeS^&E3UXw&mGc)hV}7fiFdhFzRE8fb*%f%eBd&~o3#`*c#x$1nt-A` zZG~jrHVhlVD_gI~u+d1`Nz6@>l5A%FrVl>=*o)r;;L8(xWCOo|f+_nNgmGor`9U*3 z?M=lTjtgJm5HcQ~CAU#5)6^K)8!_>=+$<`m&0sY!jO>hY5^t7mT{HU^PT0iI`Zfj) z0xTwNXI;6|N0Kv^TVkz^?Uoi@AkRU!0CT>;cp1%a2X>y86A-{dAJ`4y~_ibx`Gsj&b7Ue8l&` z#$;riIB~1n$^^?%{c<->x^c37Ay2ls|J4cH9>a+Q6A8!Y1AVcqb?=kSVe;vNz0S@T z|H+fLX&l_TWgQl@-suDO14s383{J8#`I2q8Ux&YZ!$i*Tv7hC+cjh6Fo&ojux7aqybM`GF6yaOSIQvRIJ)3_l~^#?0d*efr7 zL=C`M=1R^^$8{IaRad{$c((EEPI_dQ_Upx!c?J53`43q(K;ooKwfLh(BCRT#aJ%AJ zs>w*eHrApAXlHC&Vj?HkMU@0U8JE2PGMSMeO>In@$f-9OSUyNvlYmj6b(K`~Hj

      9xRlRF}yUIffbV?})$NZL~7n5U(&Ag)3R{I%Ge#*zzMrn)2 zG4SJRYAl zL`9mENbg0EP7)E7PNa9DARxU-F9D=i>7CF61PCRegp|vD?|Q$?hgq}Ehgs*$JZGP0 z|91c1149@I(Q2hsHvhYoj3E!~wqbqE+`a8p`bkz^aLpfOXRgi> zS|JdVzjc`kNaK1*0g15;ZLIfl&bGnF|E7V!GWk9TE(}CBWjmjnePBXL|C!*xB{Z^i z2hWye!d*|Sayo@bWY8{pj^o-+EtMC4x1sVbLxgPocm)OM&-l*WbX)`$#n(^9<=&wL zr}fLTJ~sWkXe0eQDbN*>?5oQB*z}6PbMXsby1n*fzE%HEN`gD4#U1fcne5H?s3ise z%tR3Gnw8(&>ypxQgQ&8-d8^t`(No0!ChDA*bH(#-?|UpC3*!i8=?FPXFS-8_aPVorey2%@)|P zbe5Dxme#dCG&^4HsZ}#!a<>x0n8h`Mw)^XLFh_HOImg}>^S?6656spoxa_-3+~;SL zhqBTn&ix`)Pulaf>$0pDE%uTj74Bnu`*XEf-7RC(O5)}v+I1UA?#f+_j@aQ55QVM<(d#jG5<=o>^JcxYX2K~dIMX3Un1`elH8}ADKtFcRQD=|)S1F>IO zS>YpG^G#cOVPX9?aKnv!b?Oyre97qQnV z9xh%UEg(Oz#f*;pU07APjlgxsPR z%c2=5(fqi7abGAjgDUM)l6PL2XAr=+UO41!eWzyhB-t)3bm2VWN6rsbg_MWAmJd9L zU*U$H_iMhSTk2+t_(4rqc(SA=*z+>auL}y$fZWt~gx-3xg+3xm(ibbPb3xY%r=|iF z!qq3Cl>^pOgxE^&Xp&LI#t8ai&gl~NB^fO^gyufx;1PtQSFm-#bv z&s33@j42_3?}kps+VqUUwRVF&w|D%7b@H|EPS(dw|I^E@aOB zxE5_j@fkC1q)S?0)Mux2g{(dL3J}>V$dcXeE)O3lZWR9m{Y`q~Vf@g1w)fY3nMKny z?x}0zh`!E-R`yZ--G0aFTXn9Qka-IHL6Y&KV$I8&(Jpm`+VW-2R;YglvmbByzo;I3 zeQmFZzsC2yWBQhkS|CqU?U8#;Vu7VjY>T#r!A8f@E#Ql%%Eb|aWgq8rMRP!y+vPu= zvt;-ZYqW^gjM=N@ONI3ZdtzUWC4Kd}o+5cIj;N6ppQ|HaHS(+D(^?+{t16y%8{aB( zU+L$z{E;YA>!AvKvno0;k>2E!I1V#>An`|}K-C76=!1U|P*MwUI@1A@j5+!AAKY?~ z6bwU*Xj?2+X~C_Qi^_IR9d84P{&_{Z zNyMC7rhc)0+emWL`7&D2--Z06ioz>rP>d{S^Z^Imt8|l{oqQJ>W!GBF3O>Aw-Qbdm z6kR;oE$g{+msTg!j%z&LP_3WpxAI#~N%@szy^V}rU-l~sUkwA!%L=`9wnHFV!O%u8 z^5U>;-KSgES!?YS^S-#MP@YG3H;B!j7kaxIqD|~!7$KYK;hLEFCoic)y~uWvO_)S6 z^&Aq=zsMjP4eJkEaL1gLw!PM@ttwS*`@$ITH}(9wBgB0AaBbuqb_NFkXC_?+XagmzV@?4C_=-<3+!yA>oaB8%Pq3W7( z)?RDc=Ft+033~Q?W5y~*$Z}Dhkx}yG%6GlIRX8}f-7AYZz?yHW_w~fOCiJ^XvDwS= z)UrwGh1(pP!{WMgajykGMOHrc{*MV9S43kM0)VtplT_%Uf3Hl;$@A5^=eyiu*6d6B zax7GV+THU{jryhcLfh;-FD2+KuPZsVNMe`I<1DK`{-vujl0Qax%Gc&O4<05l?kgC< z03eEB5-u{wy_bSB9+mRXCj57D^ArE%)ce8rri%Z%D>x6Y^1ZKbnz=NfpSU&e;Ttwx zYsIfCvE*-;QwVy2Mm>E~oh20aG0sc2d|f$nQk{Rb`#-avyidy<9a;n`hmV=uFJ!{i zOjDYH>qmU!?IS^BxXzJ_#O*V?o&p1BvpueWNqyHT zzQ^0X_Ws{y9VbuRLme4M1kRV0?x#!*1g2@KIrm5z8J0JzH0A3AIynt}G02{+Ez&Nv zP4dgME?k>%luXv5>({Z^5yLRT#ZfzxK6up!uM-_01twKrL-?sh-w+k_*L{DQ`~c7^ z>l2HHxUTkvYd2IV0gNUziIP*XLGI*dA^^|8k6m=ehbjEK?VvA}8~%NJUn9x`sbFuk zm9IM<{+hts&|vK+oYwrfSg?aLYB`#?Sgr8#4S7PxcuyiD-T+${_h8S( zSrj>G*(rsmzoShMQcB*M?rZESYIXJN2XlTkCL4lN;D@;Y!TDseApp{Sq(oFUFe378 zo-b2gWxE!)wiM9$iwse3DUanpZPvCF-5&0jKXi>pg!nt^0G34%Y&|Wt4f|DJ#91 zd)PhZ_vED^>%OSsfwAbPWAu(;kBF*Umqy)>d~Ks&TfJBAiVb|SVg%;fet$jvj86MT z_Yb}7l2TS(4v?PA#5=d$_N(f!uHAU2yUVdPu~ex~z-L1qJvTlv^2T-EDpme2ninkp zURcuARjO!q;IPU>tcbC1@294{9lgPs%NvQyEP|VC>D|~@Tp!FNm(w{ccPl_Y1(bhx zuvCh4p*;KHCnLm?E6O2Z(wMK;?&DI)SE65NO8HV3x`_RK2@B8AJEM8;h@)~ONO$W1 z=PL_`Uhk#!Jpb7GMVD2xz+5BNLh9_6T_3PVMC)Eh`O3oF)8g-e@riAPd`E)sCf`2q ziLMc4cm?i(%j|D!^n1l$Qodd#7OyrkyWQ7h3z(>yLaNIG9?$43?3k){@-l~pwQHiC zK2&D|k403sE^#fw9R_Nr1_kPYO$-uW-wQTlau)mjT!hA*Eo0lYPO~w8nLL_?_p@Vn zXv&Zc9;dhz`K*b*M<3e2+%PSfu9;1m*gRg|avj$37c;fD@PFzB4%-{(XEzUFsPLz*fCXd-t!y zq_>#(^&6eA(bK&R9%D>`;N0GMCGTk2DyUS#nD4~|=A4FK>@g-G{O@Ovmn{-+z(=8P zlau&#Ub=+F`M*?OT6;9opS!nUCp>8~hTm z9i2r1)AM*Z8M9+&Hj|VReA%cJ<2#>psk}M_!S}E2hs-PAo0=_8D8*Fy_+o4^!8*0W z(8L%H>Z38$5twjB-(*_ z^}Xz~3>{Seo4B1`12pRWn$ezTTH}V8*WmT;lpCc7b>{&6e{27$I=?!ITVLz`RK<8t z=UR%;p5q%0e(4&P>KHhXRVaWQl6G~O*luJ8iv&;lW;b?71R-FeRL8}u(5nUUAKE^O zmSBnLluAw>#fgTB!8`J3+?QMvTphKFAWOvrtVN>s>OBp`)nqod07JefBZ=J4#Qq#{ z**LP^+~Q)1%hSEW{Kl^*w3L!|cWGwu!TG;{lSj~tff3F$3)_w>kIi8BcJ&mh*Y)DsEB=M zP~4da4Y}sz0^9f;4wp*W{x%GlElJULe>6LmdLUSP(4{d@L;T=yFU@2*RZ%1&+>;Av z*==Vv-7P^EY_e<3UqtUNAT_Vu$!~N+=)Y!qQR8-oZLx$a)vIuL%#-RE7P)VTYph~l zGz`~(WAAQDKkuv54j%qspz97ioPYNFk-5(O=<+ruO>A0He%!kHPrW8!qy*gcN!#*=IpikM`V#w=-$C}ayOxiX8 zl$}*JUR|=UeTr*SRrU1S3u&b&8sG7CPg6CSx5&Qk%jImVLzzSSwN?FYu9yj(v}D3e zzB@$~9e?Pgs!0*wrT30t$*B4gF!`WnjKyn}_0i#gaO}tV@)P8S5yyI|W)cIy2$Dj~(1P>!w_q8PrR^THbL-?>#a}@*)2)&JY2RjLsPi z9Dcp6DHEmix0@J?x7x)*`h*g?1N#R~JVpSC_<@eH;H*idMIp24*4MSP)wW*^0{VJ_ zmAQPCH`pby!m#j@E1`Bxo$oo^y1mXz6O!Bqr!OtkNgx{BsJ&Rqq7qwUUM8VoPI_mg z3w)OJw*klIqr4&!ZLi!^+}4mcLV3Qb$}N?0q#DBaOt0<3v)ysqS%rtgQ5n(Dt5KP7 zta!rktpLtn&QZl7?+^B!b|KJ zB8JveL2*IP@*Z$~Rgba~@VsZFE%q%nXadEgzTvhBI@GgZX;8 zv%-pfo?Q-YQr|BjGdr~R-Obgw7i!L>VTu-6wKgXJxH>Zx2+iu@9nJZoxO-Fef%jqEH_W6+{lNY@A2#-jYFy4rS zc&S3t&o^sy5p@aq#T8o?1bRg09XcjvjpsmF4UOPbF@x@FGuFYpDSm5yL6L$lH(q|o;IbT(Row1m1o#6wE3L1nd06$Tix?s znj#XY{H9m!PKc<`#n*_FjmP=;`%*4ov<#6T5n3z5!RUoK&t9itcQP z2EbPM>}7fon?3ri#Hu!mw!j9^6g9I}AB-p*`S^TSLpAA-2T`pw+NI>bTi zU92TV&!=s)%&M#(&5z}MjT3hpa7Zjr$q}&%PJ3>Wq{Bg z4000Hs%iqS&T(?#li)<+wm|{QZIrFA*Wu>M*m)L<*fu1t3eAh|$4wTKh z=_~lz>DLENO8Z}=9WamkHEX!Zk@Q!EGZP0v=A9|aIfkZ;?r}G?^fmYfs`uhKN6td5 z&A06=|84))9DUH%YNK7yD9HV|`2Ou_m8+Fq)bfmSYH39~Nyfxseq;TVafPsDCF?nc z77q8?T1TS2XXt%tt}k=~UcGsdriGtnn3+?9(r@!}$Ep$|=;x<4yFu^I7z(fR>*zg5 z`X>(+hzb82ml~=R*h~$bU2!3QyV|T`_#J!^~WH5hpOMsTul#l6*&s%e+Bss zAR@FdYGd6bGvuq9d>}oVzFlqPNBya^u|F>Um^y!M;!KsiGKLx)VRDZ_3DJIzf8+8> zqcUohD9+{(gnwmhxd92BUfRw95vIpmd(@niF67Iz@{M5#fmMC|IwxOBXUGL8h!!ll zSY)PO;DkW*wf*fl-O9UFdS}Gr$LSB$`1Q+4ku`CBEf#J59pg5wlVXxPxhI+;dtq{t z;|5nn^IO<)o@$tUziowM9k7%2`dE7u`>>WPfe=1s+g~a@8%Z)K6@qld+fL*Rd zl2(&XZI|SnVZ+C-vYU3&{ZmOPz5@hbwfV#H<0dU%5M6Lv;HQwmD;D{BM|q2l1f}LG zvsEL=wt*M1`>2sH_P>gro{3$P_%MxH{Xriw>ZMvp$r`{5SNn<=J)wr2yo^8YlPci3 zHVhjYk{W;gc8}(}>gO2DqQItKCG(e5(?PdNMXv9WgxIks9KEZ@{Z}IL;gpYm zwNiZHko$}aw6^|`B1EI~XjJ8*`pTFe0VXLLxVmg6&@?TtM3euX;a8E@>N-D|oh3h8 z@o|5?I?{HpGm#C{ktitC`6-8=>ZUBio8n0ZSX3GC-*bB(P1{bIDUZ^Y!Cg+u0ybta zdQdzmy)Om1sU5ftBD=p^GuNDHIrqFS^FGbVQd;zRd zQn3lsl<%w|&W`_nn1_fddUFkNS(rXB%bvXcEmSXu*D6&eL>d_~Rr;Sek)6NHr_7vt zTaY%(RqRe=WVXQbF0*NyPf{5M0pBwc?#rLZ5t}nH3Ym!2p0beEnJ-F4!?+1Eb^m|i zU7tq7o|%2iL^v@A!)o=#Ie4Z;T#?G1kSfFx>8q0l(Vw>}pXunX} z;djI%0$$lU-|FzgGaFjJol%okld)=waiN0Ar+vybUW#Uh$Y?r-^1`3+jP3^Is0W6} zB>>04qNFHfFoFAA*on-$3!Ek%7oa9W5m^~CQDFGylO4SpN$r-ZO>-K_TobMRV&e<#;a^>Zp zDZJ56N=uSXKaW@~0uzS|RVIH(fa=$-vXHWDa8cc`qf^0jX?KTe7v3T^Mp$6gaLpe< zmUp=)sjrVh3eKW^m!5vmb>T8q&+%6s@i~^IwJoi5BkeWuMY_Uvv@R;4hkGLgm!^{f zuYZRK8?n>#q>T@{k_DP>d*Gu*{Qhw_g4FX~Uu7)?hpn$WpTAA)H~vIJ`mI`39S4{N zbRoaA^q|liN_$)>$7+K4t=%Yejr_?dFd|sdkBS=2}Gey;Yj7 z%}UPO)6-g&98*Uk&>1*2s9h_UY4Zyz|Y) zkgxp!)VO>f4Q`a`IuR5jT-q_D*>khK&m;)xq1COKevnLyGQYWCqU>AX1pl{$h7oS6 z8GIJh-X5!2%kZH48dr%D_ZxFu%-?+>pv-DHlAw~x1feN$Qg7q^V6hRUrV)^{Xnx^Y z!9APNBHg$RmZ=w}`BGLEaA&2ML6)2TsT#9y(X6v+??LX8&u-b!h`pv(8G z2H)J$JUQp5iaO_8_5P(yeHid*`#F=Q=~3Aa?>9GT z4HSl6_?C^+K~|lP_5N&`Dub{OJUB;;I|Lt!1bf9 zF+5SUf|6ZH*grFn2_)W+Xiqh#FZKUf0K2zsoVX=0h=#{%_}l?W^Ftq1P?oX|pC7bT zBHP}~op3UfGs($iw}ry$if0c(Ohdg|z6hVZhIIpvV7(`o z3p1QDM5(<7sJZ6a33rpQYWQS%1PQ-rzQ>ACL7xqKJ7=#k`XMW@^}|sK+<(b$wA2h@ zy&Hq~rwi<1$rGeW!0)7!_1lB$7eRsmvd2bTpoV6K$hpwlPv`zt4wWc%M-gqUM|yOVX^`9-!3KF z;m#ae-pd%3LIVvoZ*^Ypl=r>#2uAeBUt7;dJ?PG#!fg(8-vrLB{Q7a(3f8j!x~BDs zwwW5F=?X9F5b_x__cOE;oYKKd2#z~m=JhmP{}o@1r8u@nv0EY@UuTMF?OA1m{ED{K zTeperZezIqBvysz<$rQl%n6mp{|45h6qU8sFB9a#|c>t9^WmuKWJ|&5|5| z7}}p%J;KZRw7=svjFE?yTnaRMDz{<(5ht8JAmx&XkCFSGX(O1m7o+WtGnH3$WfYUA zdr>%V_45h9cWo_7P4pVIn$=)oz0cYYshN$bpEcbKHh9LyQ`l6ew&FiY7Sb`b5Uu|L2$u-NAVLs~aLJ&)7`cqNY$fg<7hs{-c|vJDD4V=10X>S@JpI2P%|E8C zn9^hLFA8f}1MpFrmZab&XZa7d1;|K4q$8?n-9C_e{2~yGTqtLpZXL~#O&*7PNV~<( z$fH!h{kBiLfLYgVCfyOEck2_zszXkNs8BkD$-pv%k{k?g#&z6kP#}6q|9X!wKlf{s8ZGAo5YdT#@@{bQ`Ce6ps39t}n$i z!9K;C)1$!37$h2EJuF!-oxe8yI7T=hvWIid^8zA}4bp7G=vTavD|M)&nQ%Y$0RJaX z#>2GL25dIG^MFm|bO%yGgRts5oSs1Yc&^7oh{MB!?;0b3GoC0K@#}ZT>IpV=YUz_K zv6;r-6?Fd_U8h>lp;Kr;hbk*7-Sox{rPQ=No07C!cii~IoUMkG#J-9%SZmgQV(~uv zzk>$V2!klsA{y>2hMu%(7b(I6Gu~$=bBU30GX<6}n05-nR1SG(9tX;w0cHa>| zHd*8lP@w~6$|xpa4?^&L$L7-1Kk{uySDLN78GX-Pc%c}M$c5!n8`5%C{gYJUJt}DW z*U30Q#xt$luy*FPqz1a3wFOT0gF1yOQGqgVR1{djYM&XG10Wj#ma%84+;Dtez%*!2 zV^+UByW}6aP#xVrW2%tm_OP~$QoA3%L+`!wc-WMxGHv9wieXS}#~9OX6cZy*YmSfP zzte<9DrTskg4VK6r~5hTF3|LquBFqmml{rfF)4dwGAIkewJUq%c2au{)pomrclH3e zV>AS#$C(9r?=(a902wZaF|Y|1@1=XrqOHd#@(@su?^5oud%H*NP?%X)*n{iYkJm%< zzTgzOQTdkd&5ntof(*yRun}bBlTZ(PsM@uVyV=DKi6g^@XcjxpuMW6LWp^c*I5%K~ zy* zw5v+ZO`ZEIM=IL0XGz(x`|30$8G5Dr!5kGGu(`AV zycFb^S}I3}ZDfAh@1fc$a3>{CQ6Roni+c8S?oD0DPJkNX!-!=2nop}|2?>b4W_3Ro z{sKq3m-uN%eck&lDf?8UtyB`FFR!S6sQ1V3T@QdX5A-KoP)4ypk|>a{KklbS8Xivx z{C<)~F4_W8h*1TUeK=)%oN_Uu1`9kbEzgFo$+wbl$}mhF0@{o5Yb`%KML-Wiv8tqQ zI<)`-9c2v#BLrRMJ*z>`P3Bu3dv5=c1T>kAphit)P5FQZNnN}7o^sPsscAEve=KGG!f0 z$&KeoA;U9-gI9J5J^(|YYOnvlwXa#d2GR}d&6z^#9$}gcfL1MhSTUZOBS(wybec}- zw@Fzwny`LVz?n<69O=3(PjE(xtYOmm;oYNtsvr*fQ^ndK9b&CqK4A|;iixF?F0W18inQ6nf-z;XK!c;p>IY{>P zxJJrHho%=ibGn^Av_9c!3J84=_E$_LJk)Ld=(`5Y|O12JXbkoHtXi5Hm{(+ zzC`X&yZ?73GLz6`qysRzb*9ryoZ@_x&b&w%dn!u!5f6ewWF$v$4wAsp^1e#hXfFCO z-|AGUHV;V5HYC3HvTgSGoeg}HG{&-)&3zETHZ9R|QAY0HLLQ$|@(N&km$lP&5YYeh7sd50T@EmSkVYP=9m#IZ zqom>H33_!NePym^09_<;c02`4+})0nXnjTL8o!W0e!oa4KoQKa*-+g74ia{0f+vr8 z2lEA+g&?^_4}8iDElwqBr-LP^`VRHBVVu|nJLAt1TCY(p-QLjHpP~jqM7C*$376`G zurudhSd#o*JiWT81ZjbSOokc@s6Z*rTWcQNTZVw(n%ui(GbU~0IUh9N*0g%^XP+Wu z2*uFgNjJD`eK9oPa}?A@v*SZwv!dW_bFGc`j(W~L#=a7QgT|rZY(LxH?ZO8|rPMb* zY!pK`0l5IG*gh%ZU^-^%u4qqIUm;3mxHo}r>V3LLeFnOZeQD3h_KY1BU3OdwZ)p`} zY4{O>%pTrTDoIO0udBHIkSd3+2A1@*A#Fa3cvxBuv1Tps4=*(7c_slF8*>n^*06BgFoGObQjP37Io@Ja-|Y*C z?JK^_WCP-FtZ`#TkjL|`7`~Dn9q^_-*WqWip?(iJN?|q?M@d7D zuF&NvEKj!6%ac@^K1nN?0eq=HEI~%w+gHpELjGq5!ihXcOfRN!Ge-1Cp-oW z84LRjsO_~6WU+oZIwr=olD@qt)hl^txnJz%oAB$nDuuW$5U)K=H{HumN1ir^Hcya; z>HTg%Qf4#zn}iAmdlXfM-A7jZnsjc?<1yAV4X52-+aG?vzT*B(&e3+hR*Wu6JX%)e z%1brckC_yRoKsw&5wrDG?(Kx~#V$HJxfb2xzrTbcr#1zXsU}hyml*|Cr{u%D-^yt( zeMuO*sn5N>`$-*Po>`Du3K!Fkd#|7>NXyY`fb!*Ca=B!!gJ4Y$Z@tO1!riq_8hT(5 zW;kf|!n{nF`|~^42{Ph++`e%SnHsHBI?v8IjOsrLo$h=fWv8evpz}ygy}K6YtwwW3 zMHl$(1P3E0P_Ww+G7@@%!;%gz{pSNsm&;}fOI{kkOoc_ArXNmg!mwJvK*EU!g*=W% zVCXqP>&->$#q+5vrsS7*P-eBd;M;ASaAu@g1`uvyeI_f5?BE0{DBlbgWg| zh*hxOnk;IB7caI>PjOQ28To8?_8lnM(1K1?_FS7o)X#CRWT-mI4G1Wx|~o z_9@R?bsDy;ma>~utY|=SaJjLA~L_fFo4>1jt6(zmbA>rCT8m8`x`F|M!&&N|@MlNyHC>ueSaPC;tW`vF>p+w>=|NnJI_Y5Zu-`CvP3?n33~Z4gv4OXzgflI#Lw;92RiirP&DJ8rS4hwC;3$d`q5SYq ztyZd5?JA6$6m*v;vkU*DKTnULR!YaL{mh1~A4_n4!?dCCcQ#i0c(68%Jih=|%Wu2| zuOE_$#fMPfon8biK#1zLScC$PB-upV;NQI(SxfI8E6{sk^8{BDQsx!Xz_DNfKc$)D z`09Ln6=1n*BSrhZcKP9;(Y)wvvj3TpqudjG;wPyl4;SKBwrt06$G z1oGmMm(#|ryvaC52`+jyDvB4(7CqHMgoRIRp}3{LXD(+Q)BP1LksODQ`^En_B^x}h zoOxf>dIaqO&{u$M*UDozVbAa~uc&WH=;ESAhPo3+c2bg#y>_H)2X|$Mvv!cXFsmx* zB8k{My5{C1nEKu^0(y=El13@VI4+X)91IVlw2x!SCqO7cM^z!HfRdAfQ&dKsw_J)~ ztJRm4R{^CD_A|}s5$%OZ4~#s1x&7}$5YNZa;AR+M7KHq%fpSC{EqmZ@ual23W}meP zaMuO;dXLP#h7J0iXn!@bf9!*V>pkz@56xgH!$MxT*7g`-;n#Vszx@6bal4|~rfzJ)^nd3FcWaxMJfTc%`q#(THV%E8~RRP{FA;zC(a5leVouBmDU z%+7+LpUT9~a)T$M79fhhVa32{$E5?=e3E_f+=)uZ+9PnBA7nMsD!8`$4=lD=@O9SW zMMCwObt(`|v(wr9?G6FM1=_!qiK78gO+BjV2m+kwQH!J!ZPT_j_>*-!Zb^}70^*m| z(33#7NtkWZ1v~g6mptq}42}YRILMwMRQLpAGX@ry&ad@_pz{pGNB4h+MEbu5uv76O# zQK_60&b3(2nKZ~JOF`Ly7Xx_jj~2NS01)HHqHHxEy-$DnrFo{JuRn8s_~-}VrDJ%M z;?vHnx`U}{jBK~BI9EQhRH%3sD#5V%VeViq%u?XX<0|sOY@5ljwlr&)Lmcl2El! zT~}S_@4TFoT3R;bpXA_`SQ^?Xn{AK^MfwiK^B1C%4)x+4{j=noDH#HzfLxEaD?=z_ zT4+Jai_M1?kbOuW7&^Hoo7k??^>ypkGZ;NJGo*7XX+0A$A){pTtB z#iEjYd&Z9U1kK}d^t)D%rTzS?z$x@_ka3WE$V!8en;NUfP z{_KN1;~icbZPhM;Z?#Cucl>LiyC(fiFnhC>aQHNx4Q|9x0dMBx^X5a%8#v?mN`H?^ zvIXpM7WmL=iTGMPpB?W9J@IqJw`ZoK&!Q!0xh>&;xM%k{;hQl{X#bw<`dH8)-~2Yr zX`!BOTb|5s9uRq9c#3oO*#1aIL(g)tnfoC957KGfgu3;tscUv=Z*mgMUF=5VdkDqJnLaCH5M^(NFg)kI79 z_dCsX`BvKuKiNo`S5M1+1{cPPY`h+bOT*kxmS*;rVsz>~lfQiDU)pOKZ(1zRT*ob_ zAH09Tv>!fTdk1&dX0lWH1vC9jtLGIPu;SBt*1updZsiFqcq%@=Pb3n<<3+wV<-ks5!hhFKOOfsM-R9jv7{F9sc`mW8$W2c9nLJT(Js$sAsb@Z=dH2yx`kQzW30y(z zp2&ZW&beqaYBJ&XUP5`hl%qvs_gTP75fm~|No4=m3)c^^6xGX>*4+u7QlNJ}kW84PyoJ<75Pz2ZV}k8^D`?1%$H9M*1ogxv+yH{o|FMROcX6Ae+yuF zCT9tyHW)XsaflFW$DN}h>}llF8^@9a+xtdm{i6$~oOmHB$d0_R%EsrFlG?L9pzQmb z4@3$ivddmE6;0xK#9tdO(jU6PX8o4VYRTPo(239D7gHYl89>?n@S$l}4o1CLGoVt; zZ1`N|!>BEpWVO^DLd10@^VHm^Qt$32s~Bt%pwsE^SU`7LR;|X~T46veBdp6OIa)~v zJYR@+B$dBzI%y)QNdQm0&CT5kppbHWOc2enWb09|1qr@FX4S=C5-Pq0Sp5f`6~tn) z6H{>DDuZqp_VRP?N9{UFeiw=`y<9ay_r!@rJk;Acc4+UvrXfP~3|gX%l=hZZh`6-u za6cer1_8tXu5#0E&jaL{?r1eAA6@`%c#cq`@}ASC|7dWXLh~qV_QcRP-~Ff9E&Wuc z$GV=AM9jAJ6plLjjg`=N3LO$A+8-aoRbF|Le&w`#LrmkJkXt^sWhd}%-NbA)Ycnwa zk*p7V=E@FfbDk!2t!rHA0f?_#AFPQtL)JPnSqoO4+|g5^1NVRJyJjFnE7-4HRz4`T zu^`X>Jm$I^+8^Wcr3{t@=Wg})nOKmqPW4Cga`-&rkW8nJzkO=L_abbV;-u%jwtAfN@&_eP7 z8?9l8oY^XtsOF9kH?FD86Eg{(X#r!B^X~5cFKv&KW6a7ks1tOkg9D3CN&CU-D9@Q5nvH~ zk6;QeJio4VYX`#1PbdTboAYgriwHrYznjd7`3u>pXH3QwhnN7 zuXo(*4#bL8N+%6iG5V~t(jw`cUIai)w8#-dl_Nl*Xo;Xn$;ehy6_D+&hRtp@&B*0$ zT`loUyj~JF{*RJa8Fl4F1^Yv`;Wn{ng$`CRbYlu+dF@_D#lS-IPQgoS&xNh`&-Tnb z3;bxClq+%SACYU5=xx50kSjW1g0!<$X`t6xQR<9jpwKcw;Oy2;D=Uu9@_bC&35QNE@~3zUo$DVCkq*3~x4&%6hp>O)QS3joL6|ydyvuH2nSN7|ZERWwT z5qJVrG|S~w)L8mQVM8gF;*`8uQ@#{8ZU95UN)QQ~ssm6f|JgVTn*=LO6}JjhJL(`Z z?JOHWk!4q*QsaIgPW-V)2NTHJ7dS()SH+oTWefHwXk#l5;=(wwmuJ-5e$X@O@FiTG zcCHJ?{$HSO$GnHZ{W@%W@K@*&E)+|-6kb~|%=)fxnZxv)5=MR#t_Xd8p7$tC_Iu^C zOcwIT9LZ(b+KW!cYx%07L-E?KwQ~1+*j?W5OA2XGWVd%XZeG?VWgPu4E$+&EOleup zbept#sM6AP|C+#QRv~gZ4{Y1psG&$Vqfe5pBozViVm4`u41uJ(DT0gize} z-i~Tk+tN zYVJxHY9Jnkwfg=Rip>-!FzQrP=+jb_TH)+^7K~WEC9I+DLdg_*G3*edz@QDOZ+tqo z@8b+X?8)%VSI1eT8He_(u9(ugcy!KF|XRU)2NYI%I4HfXwE({0|5=Q1}`8V0SUw=ZAc`nwq znj|=lK=HoGbuBx1*F6>H&W`cgnQmo_%WL48*$FK-DntHv`lJ4*3C@KlY-B*{OSwN` zlGc@U7AO~`3gM~)oA-PoeJ26d#3};@oZtdON#1cV^GzR;`leI~RrfURu$+^YBrSqR z7~g;0CT~ZDjU^)|P1O{jX(L-`>6!#m2 zqX*IaB%`eG_4rfNTS*u|2n#I3n2%>KzCC||I4dESC72h@bCce8JrFttzjLv`!m9lA z%>2Bl7heZ{oJPKO7kKc*?OPAw=pvt-PSzXhG$siRp%#j&JOea8okoJ(t1!=+cShI= zXu9BuK$lkkmX~3nFF}yW>tW0@o=Ct@(o#lR&gnVJ(z`KZuf7MXmfZ8dLz734Gsax( z8|M)+c7MwCt-lUkm)u2RMC#G4PojZV zf(m#kqw#BT{t?w}RrC%wb1UY*W&V3K80ELq zlqg2^hiG&0$DN_u)KMn&pH?nk^eEgbwxdz}^TeAkHpZmY2V+_Yh5n3%EKRSpS9~iU zxF1@}B}CKkI^^(WNFaHit4(@f9ce?+)FfML_?v=hoxo9$rEby4miaCCbt5sfG~H|o z@bxkBjlxCd;lb%o>qDfRZcpA84ojOEdMzx4eT%kggHEo#=gf zWBnj{5Ti_rF22%NOe&=E(&K#@CY!K7`=7^&@;R+Mz}rdO|iHkw>V@5V_^ zkcc@>$dm~p-QthkVqCcqi-M?#m4Qc$3m(|zyQwjI` zE-8C|POL85{|3`X8|slCD(ua^f;CB~>x z(lB61Zp49YAHF|)|AF(vIp^_uUDtix_w#-xU8ikIJgVAhAVpGcJX7Ul>dD4=^%5%b z`X`!Bs_u4{UrklI#8+yah?qb>M)vlKPTH zC@{sy(8bX^E+lg@6=KWCR2BIFY!nY9TXyw5YXmB=)Rb~ z)P3=7+#+&OdiNZD>@mewmW3PtJ5duYDef18DQ8yTW~@oi3Z3e^do@ zfBw-Dt&x>oS%~-7ax}p8maM3-1>Dvv9y(u)IlNV>2{p0cXAto#Fp_R*P!e zXuorV-j-0yaY$po#pm)=N8C_*_@%Hs6W`zIR7qe)Ia2%uF?kjM4!Tej_I=>XX5i!&M`Q{l9}H#&?V?K>A#sJh;6E%~+l@@Z)sP-K6!={|yzFoc4!Ux{h+l>JKg>axv| z;cF{IFAof#o@htH#}Bn+fmb;}KgkgX&oM{|ZtDIyDvDRzB+LZ-Henwa%-!crY;|ZM z34a}lFZc|Tcc`lAE!;cY1x6&!r6wQ4R{~N#!KSD`4(JkGXh;)**XUnOxkKSYR*C{; zi$pI|yucq)-EBMNSaT3;!#f_#t}FUmATEde1a{GK0#InnPZSHqpcpkBq)S>) zvg$27+Z(+sr+J%)s7jrQ3R&ql))KjyjW&hds_)Pz_?+|A#f z>lglfzI@BQqCWD5fa1&u+rOz8&W9AV5+0n=b>OI4^3c~0Yu7y!t&^NZvO%)0{#HM8 z3ImEsGjQjQ5%n0y6bBDB{PM|VlL#(L|C%TiHj+Oxx^z9}F)o3@#;^&sT*>ApQY!Zy zbpo-v2iqSDGk{=!hBEM@f0mnGbHW4gL%be&_;R7K3;7IwON!yuN*rA@dX2gLHBPeh za?x@NO<1^zrJw6tGi#gjoZfRFj&7*}!R;le2uprjfcybt$&d!nYWNb~s4w7|WYe*$ zzf_}?+We=WzrYwtFL#SqHgLy0SBkO>)$X;5WatC;qL#tHDFHX41D{TxfyTx^aJj539nKmizak+_&~*y|c>2>#-td*lZA> ztPumoN#vqSrf>v$Y`F*+^HKcGolXM{KXRXLT-ZyPzch^=(HuL55qy8!#lrIV(>`gL z_i2nDduKgb<0mlTK=U1qd7>`o#2{1{a}M9iGEhfK_uK)w6a^a(7*rBST(C_k-~=b- zqz~WrHEAJb^LGjqUG2FGYaYt^;=ORE-JPGPBi!`X=$y~YC>IJ}dW;>!Kv#yG>UC$y z%;WNhCjn%sW_T|94)|I&}Fk<|;Tx`K=jiLe4dr_c9bN<*})m_MzmAWr;u0h&` zSBdj$i=Xr=BA>RIxmtiAt=nxuM8<3UmcF4ypaA#CjJMqPU_WWpA=)La$^6C1lG3c` z6EpL=Bf#(R<7<2C_o4ur)=jyXuEgyupLiY@@d)MEb`9635|RVV1%sqt@_E+-ZaP=u~4pkY8DJ}hAF z#az1Xtx6N64HEL=H(2=fFf8Xz4-&VgeIHoKSgL5$OFJj86X{_uV;4?0e9$gF_#Ah= zpp@RpQ1U9kxdTDHD`-)en3M+wnRZ5FW6dEt+CVtyG2lz_ilB2Qa_5*2k=i>X7l zIe99N2m1ef9E1cHal12gwVO6*+=MT{oeDyN%Bu8v2GrCTc>4@oTF6fzWj@=r8gft| zDL%|sm9U-(j1SMocAe#^NwI~Hv2Qm&Gk55Ic7G_^lfxJ;9!0UPxp1bXyx+BQU&+ta zlb@l>Q3-i@+R}gSERy+ir#!RM0XBoRjX zdD=eUo)PWxPk80x9h0g)lcT36D|%6d_jUeP9lF>lbgVPWt;yz!uA4j^r!A!f9)|R` zyzuPVB?_sz+p4BYIZYmKdHRe^pkZd~f+ExG;ard})2dy0z0Mu2KdTuxva)+eVqLl9 zOf8)pH3~{CrBu21*C_q?F6w(nwl|+!WnF{yboITFeMV1y@Np$YnFcLK&_PTyCA@&oB!ICDv!9KRJ0^+yDz zB&Hej)jHC?h6n)JSTN^V$?0Ga4)Lq!6nn2&6IpNK=Ylo+pFv9JOc-9ezA=JtV^y`0KPff<2P5gt0cEYpZ?}yLJdfdcLhtQ| z_YVtX>cITjAe`xIyXM`@wz+dS6fVsDGgjawasQlJrs!%2ip14^`W3~ziY5n68o z_Gj3rHyZMOhbfht!(Jwjy{0&a1!9b$XRW?O3iuR$i~=G2{E*QU*%H8AnDTI5^q6>YimcQCevt(BevW= zk}1!V$VyxPEB&AwI%R~c4=@&xW9NC-&~v8@T_o)c23j3;$}du2G0h_vcaPvcqQbnA z+!{F==%~aT$dZ|gWx_yz{>hyV_~}Wg5Sg9uAU!3!UO`HYT{i(X(&kPShvJZO9`*2%JFiE$ndUOG{K*Y;q10_%=Lw2?Rc*q5ERHrE)F160 z0dj(@Fd4ySKgGqhc&0_+jeL)^PpXpa`8#aUf63iSi~-Y;5AiZAF&OJrtNU||26^e( z;TxiLZzt$uLflD3Q#Sg0mtmqBx{E!U1#FTdOK*IJ^H@!juk=@&PFrEQJ( z!=pJ_TTYEt-ZE9m_}R+u2-JDC$KVaUedpg>LsY~qP}Spdzke(J@?!1!1E-qG7K@^O zRnKo@&TOl9*39LYw|6Gwzd5F57D>0si6X>jY*_A*Uu(Hko_3htPedtb-4(6U8b~+H z`@uXFs!fP31FL)_U`@qccv+{<-dX!C!uPXGFX&hi9#rZDd+0z*51IiFLAutxQYZ#w zt>yY$d+mfP>q){nyb`|qK7>pg2@8=liMQn`lZ$GwjW_6PdnL+>mq{Qdw^p?^kwVC# zW(S3P3O^ZiRjuw6mZKWYo~@{#9_{6uP6tbUCCNWCa_G^#6sZpMRWki6%Uku#iB8Zb zi-cNM&4&~$nIazV>}Aov=BS z4hw^6v@!^J$+Yoc!4XxR%)X<uYXFIiGbLuh?A%z7WQu`z1?} zHTUC^(-zRR6lc^{wE2?&PZqu7pXzL!ATcp`_cD+yJ<#d3=S~l?^7*rEh!73|ez3uU zF5VmZ_(jrenNfD>ib)9&{x#b`rCy~D-beoHkZd?Al*%lW5~&h>l(5ADj4E<6;&9C)QLzID~bE zkA}PHa7YZYONUdU$Dw``A<3wun4(eUMe;t0(cnzTo{>-VO~e65)Iw*{g?ps$h*e8U z>azECuH^J=rI@5`!LCv(Ww)Kj``N2OS_|AiI&tzTQ`;iiljWI zkl#M`jo_OlE-kx64frDLmN#zj3vKn@R~+i2So33b)p5Zz(hmI29p}l|2>vgmpbbqo zqUHHA#uZBDUFL@Qsg7b*;lC;&l=6FS!V`eQK94lLAhFsrY|0r*b`Tk>LDSp+Hd5XW zg~G-1y|k7L%i*Wmp~s!gh6A^ZPTJmC_U*E2Hj%j{`C<3}>|`YSEd0feT-wV>gU;fw zY=w7$g*|w@-lEKR|6_=2jAmyzXF=FM_;xjW-@fL^P$>1UkNNHzg4n1IpLW?{*OQgA zvsj}?&iV|u%RCQ-JU#4!(fpF3ecb7@@_7X8&+b)F6UK-3PuRF3qh-%iq)c(XzE@2R z!oiK9X}b*vQsuo*%2NzXIzHp~QwUtZ{8@Ibm2a3%Uc+#`#Gto7*`aOg zj)ox=UqiUhc@LkK`0}xZH~ZRUiR@#yIB04}e2~_3G3%7&?k-usiQ~IPnZ8%#e_Ehi zv5-lwA7Y#CDYv3tO_sdbZXZ-UJ0rSyuf1&W&OU(?vmVDDJ@R3_Wr2VFPCXq*P$Vqk zZMGUo-8%PKP4{Bf8MZ>P!`nT&ZvD%JPAuGpZA_XAwu%(Ikr<219w>Qgz5 zJtTZMc{b1IJ(#Rr*k!o564a;MUp4)QYP!+t2DbWYU$W3#fKZI3-&F%Cto2lbEKaX` zwVYd9S}9qK#_F|D%sf|FZ(=m$ji_2Yo6W0kP|o!f$~RG-L_YZ*;l6a5a&l&afW^R4dnmYfBVf_VrbjP5Ir)}>&^uV6e%M>Mus zrh#9BJ4;_7=e@~mH)CWrV+P#|Z-(-D0S6X~Lp3=-8EapAVMlokt}Zdw1(qu6W9c{I z3CxlYXa{%k&F(8lrIY&vJ(Hwc(bfmQMg|EbSMGfLPKX`;p4oHp5s73LEoq>0{N#6) zWn-!UYzu}=_h%^oJ(cB9Jx5tbQ+#QyK2(Anjr{t;$-H(zssh8suQB!|ekssxd$V0d zA_7NJf-hoJnxn3nCQkV5!i%Z)*Uif!;Ww2Cx8kBvY9reYW)Z#K{ZOqJ=TI{|=pX#u zl3&i6ff9WS_sS7RsxHyIJZR(y{+Dc*2EHq`X~+?g1^$8#q*5^gH;`ft)?noP)E?GI zjM|D-;5TK;^0pX77}CTegb}L<(H{*gA-sf%i18^I2lOWqehTB>CpVa|O$8~@)r}aK zBvnF!K13)25{K3sF&L=)cf?1(_v;0V^Xo}Ds#aGNsa&@!;Jfh6GE>jolITHFnwkqO zQPo7{l8kJL&fhyyXEt}?^mJ35BXfL)087gs!2BmT1a6Vhs(qc&)NdF|aQVLJvSkX> zGaBYSdNGuKdh0JxxQvs!z!JE;NBUGSl`m9HqK?!*iV5>y3v(j-&2{q83jh?^IwMsv z*@}_0S60plilprU%O-Nk2wzhukZbI5?HCm|KrOje3~TK6Q>q}>dH0YMz{ zi_aQKL*h94V~9_sIP(AsD7T!NRc5XP%6W#{WI7F&-h*q33L}N5Tv%HP)a)tjkpYfg z;oh*$A2#yGPu|c?6z}~+OZMaV{dpqc-?830%E2xGx;d*;y(zSLwGAGnlDv*w6Zl$_{T*ISnR8h?V943DI`(K#9Ae! z;yX&BQ$w#D`xh?ZAiRDf{8p9u;&F$f1`GTDvjFTdBI|&tk>B{8=U_+asF&Lo$+j^{ z$gNO;Ypb|q^;5LWIDZqPM_LB+y~1IlgHiD7p#Xqj8(vKi0?z=5nvQo2h5L75}*jlg`UuMBVay z7jB(Bw3L5)`9clYp)Bt)sz2g}o&E-c=$4ZcgzEXrC}G_zioc!>lFX5JN4dh;26&@H zm!q|uIOx=|7ZH=wm0uz4Gh|VB=Hv#Y!aaVcBVONE<)$qA#W?`as(m+Z^n^EZx0&0fLAEMmFQhPpV-aGRH`w=r}VoVEZ1>|Xbv4HvS>E$V| z1H1DVL7dr-)fvl%Qep@K-@j==8|K!JOz%ATH!C#;)9?*&7S`@NQzAdQ-Oj_G789cK7k5~i5?U}T>Mwn~RZ>%g5%;?46% z**+uik*fIwwG(o6Y%+%no##P~ge{!F%csZ>M*Vlo%BS0Bj_j?Rt8XuHgH#3%Q?Sq3 z>ePYi-LwCc-8~UBL-sLJwcHFL2EW;KQ8QzCO=u$bKloh<8Jy;A>>bg6bIJXcgdfs| zE|TrCGeS14b@Or;Paq$yAivEbSbk&X1|e%&5;xl54_RR|42Fl9Fa97k z^!l$OV9*)>Op2o&iE56M1#BPSs=S8arFNa&kQO|N9#;d;ixOp`srsuT`{%z7MMDv$ zi_;ZJE*$6_YSL7zSif*}atOUBIk|(vbKc>eMk7SV6*}dB>92X(|0b8aAmqn!GhG>_ zTXn6%f3&_FNWtVASZET?UTz)!u*xB7k0_CDfipfpSSf_kDI{W)h9G5 zn5o$#@Wv%t=hszb455A{w}pN#%~?Q1#!#<)BzGNCxNxK0e5U-)Ac?bF+b<{#$UYq3 z*;{=ORUX8`+eEcaZ^nNh--nt$px6Z>PC9BUw zv1{gb#(Vc(Z};hQukAFBIoA+!u&PU0+_fvqRL%)yNXug<{S|kL7F)*J5iO$neGGgo zoye3>Kz!l7sU)>~_2EezDI2-Ojtx;X*jBv6d9vo5#2LjOk*Eb>*}Mf(Ndbug5ntKu zNca5sR=qE5pkd_YYfOpN(3{P9Y@f3$Db2hD|BK!li}@qQeIO3kEnO7bXlx}nsJ|1O z@?wd(qW2F+l%h01{z_ii#CkRn&Pl71KDKPNBk$wD^Z9Q!lD1dE^Y?1Q$a-06$}}<} zeP8!1H+2_<2X2O@6Q+SsFC|)mQ#Tmi#=6=NYX0*FO95qO^k1yG!|HHhP5V+If{kLj zW_aSiA2EnR+qK(#5H0rpP<28Ay#h6m*fQmO`0+Fa&(zaVdNLt z15}>$^OY@u(Z4##uglBH3ch6tRq1CmzK^Pe(0t;onWEGlkKz`qE;n})r9bRToj(3_ z;z4H8?H*%W?at~1=q_Wa^bao#&cq-^lF&1rubvf}B*#!my|IzEcJ}(SBu*{K-?!NN z%Y8CxZ@r9}19sJZ_Z!`_Atrx;pzTaRt3PC;(}K-fygi`ri=Rl*1lbxc_N2?moJK(b zbiYl+bbut6>i0=WLE<;YrfrnozwJP^OX`I2?GHW7o90{(yY6KX3J|C&|Dsf2S)p|G z{1F5=G=@#~CAQY0r-8Q&eODk__x&|X7yV|?LM8(B83VdqmZ95F_}>8_BD?|jP$<^ z!Cv&GpZcCdu87mT_WsoV1pbbT`9X_EQQGImPp&6S?kR7tI^68vhE_sOS?4$J!FuvL zLEMKMSpt;}324POuG_YPGiM>65~R*2lfSr_Lt0zN4_Ke|F|$sM>Osaj=O8|@`ju<9 z%q9*BQ;p)^@Vl5@!vTY#bSmhWuK%0`_rD3TBn=f@Wrqa44D%;`eSML<^XB+M;G! zK7ZjJi%{(eM5n#44wZ1qaNu=CT3!1_K(NkV_X0oX@{^jK31~AvmSnoGZ>4twi9s)2 zK=Do`9p;w>UbU3M&n!M+|FH(+R~_`hHBXVZobwEkJeb4HK>~gUNMl(zC)8~#6iVCT z9GCPq7*eu`e};K2h5UWv%R!&i@)INprcd*ceq!(wvUKCTBQNyJ?gZQ6gbVYYA55|h zpOZ)ptDY(a-T5|wV2eHsse116LxJcT4^tiK3-P62o~dVpJ-f<`U0={*{bg))BtN*^l{hT?=1oEF+|}P5u4^?l z!A*t<5Bf`T?fbcnM8lLeQ20pYo#N4X7C~k?6hU!bmTypFn0-G(VkBJV8xDxH0qSFr ziAgRHa^hdWyviswTu)_l-spRp@lSsUK59T_Yol;vSUKNT`GbH zYd}{Yllaef>)7kq;!;A*QH4^ahC~=SEk_EQQMWv!wM@OG#Oiuy+7ci8(~AB9K~i@+$Dofk|Neq_4#E(0Ja5V`_M7pXWY z_o8o`DBAz-T8C{$?)9LMCN{uDwx+;Zk0KPvFj#FS_gKKjeu9P~^lrTfK?u(_913z*QO?JV6 zZZ>4+m~+E;a^fx~`&zf7gKlQ+CuNS!QyOXh`A z;tNiTH*cEC?rSp7OFSM-H+i%Auc-M!Ptvzq9*#hbD5=2^v|>}xhwEABO+@j8b(??| zik@SK^vjN*9kBd`3`PK9`1w`lu1dS3T9rF$TNf{YX3-#@FL25TeZ-EwSEahanuR@cqA_p z7L;c@oXM{`5`3s_t+bkA)6JtNDz|Ow2LUb{h!vjZZ8^)Wvp7@bm{aI7X?fg!>Q#V7 zd>A+(q)pfNzjkUkhNB1sfLiaJb3isO+8xnUnvtKw5ogh!`9+d~Vu!s2} zhW{i!R|roCqE zk~HB*mZZ+`0vbpKTSjQfFMo!%68CLcR~F|#JcaZO#_22XbGq9mtd7k;d&on3eSY>~ z=UDMW{D4#WM%ym@2O_LM3IIBy)Y|Z8W*qe@J4Q=&KiQ0*3Mv*=K%%YTwWQK#ha;Ln z?NM7v+7rvG;&YpG^slP@@6h(Wr#tUDf#fG39n-=XF1?(ZoxIJ_Dv7N$zydoT?Q>|N zwl;+HmuTBEX7^t&m&&&?VN%kiU%I^WMHxohR}symYrf9o=Rg>_3^L(*c}rAityc7t z(p#FgP5*N@T>}gY?gpNa4KdJ8*zYO~^5f?xBQI+A-x=#B8TOWZQb2#w4g5=9qk7O% z$azKf;!xQ_V|0hK2)s*)^gfmgh-9&q|Eo5kxN@CnYq4odZgSzQuk|hbiKQgXi7{xa3Svr z9sRw`2@Tw@>_tjr5ba{<<^tZrU;g@njbT$tr0upRkcd{zaQEzSh57G`53J)9Pk+fS z3`J*@T+TKao9yZIKmC`H`Z-47i&Tt*_vW0`u0TmL7lk2r?6r2)r5e3ObmqXn&aUwj zWHWhy&yvC4kyUjMZlt-mI@On=AWN5f_cMI_^Lg92uc}2Y}~* zUiO^fg%i-1IV413^BiO}AfY7t4l`{It#1lb>VJM8$C>@0 zo1Q`Q!Hfl$iTCdT6O-D* zUCbXN{wJp=1T0=#xXkyZ!0i>H)ZIllIWw;70xrfYdfMJn6b#-qTVFn}7f4IljnHrg zpUTee-PV#@7U|3rF-Uoy@lMg@$&efO#bI6z*7A7X#dRw#hM!{mgI*u!7^a^yB-Q16 zxIUu7MWB$^On>WSI6Bya!^ndm@X>9nON$t+F$Jt^s26+ZU2cFKa$EBvQc~D&W@W#= z{EuuDd_Mgr%~J0CH#-nUO=q-V`zhA1nY9EQW;ZfEK;vN^T^d>AAMrEnnX1BUtjk44 z+c(7AuaCokimQ!)$M}SoOvV;%)L#kdMxGZ)2(>qCU-VQGy`IZ1k}lPf^9v*nOHy$DQX_cTyR&b}r@uZ7~kyh*IQ->%HAQ(n(=vlu5b-pT=Wzh=L|X6RMb? z1}u>fmD-IUFCY!50Ew5}5g_r0tGFQut4vp-4)G$=Z&gkLKgTI%dApNi`|ik}drdO6saBd_3vT1N%aeQ;kLQR3o8MMnblCX4Iqxv)uD{y4 zz3M9}=pTxBuMj?8Yz2}m6`R&uadc;`Z~pN>kdP%2prY`N>bJ|yiohB2(og4LvI7-_ z4P?{EmfYDHG9VU7{--A^tQb6R!ojnj@j+&J{FnebpCvD`;7yVeH$KWCVlAbnOq}8U zpGc9os+UoE$f7{1DkwZE8<+ZF}s@% zNAA^Ah~bVRZ#0JgVsoydf#8G>POkE7_|h8S&F*!Mm$T*1Y~nEDJe?ux{obIc%I7x9 zzTd&STFyk?pB2P3lckrL#d_!bP8qfa&)ASdy{VxKWFvdN)=9d(Y%jpB-tlqUN<*84 z2fkyv+d6V8@vnry2bUp&9^B2rTM;1fE93oIM_toulPHJyS6HC5T@_~Sov$1`$W5F!h=?BEYqK#OYsbE%wj;bgOn4O( z-hJ=e6Z|$Qb;hK?@}x2g#iJola4qaXLC%7O+`Wj7?xSI3rd%f~(*VJjn^-8bypJx_ zAyVRaR7X;(DrH7iGG91lc_MIOgDINWxj6x9(1KtEo6gn`!uYTI^)JgVW%?~&yQVEL z#SQxS$f?Ed>0p7GL2iIO|kXYUCb6h0-En1>qd*+i&T=48>DTwd~kFe z8$=cBb4`KjB-yqwyCyznw%kJ%tLEy}O#`fDaftDke$7go2_+_5oyPinDdRgk7?jkk z_TV0TR|Qs1?YzfweC6MFM2}HxG65S}Ug4E?iipdld6Z; zaOmO|r(Mqyx*si6K%Ux6ElApWo@E`8ZA8`7qIB;>s z{L@X7cRtv6q&1~gsgeAEId@d2E$$jxV2RPHX%){;RSG`Y13G_(2OSQ%$3JIX! zm{)j09O>nrs{w70HrG$7OfRPMcMvStk8J=g1k z^cz{fUHf9TAzzh+L;5h<6-Wf2jv*0C<$H2&=~j8>2NDqM%e?r`G?)7^ z0;n@|8qrsCS%$t>mieC?@?Yl!s-5|IBt^-Ft#dD3Sr(X}2P#}vF@vl&dx?z*)42+o z)5X`|oR~FUM9Dd&py?JoJE%E(=#R9=+)Y!+u-%u(GRE*=%%jk0ir*uvG$H`Fz ziJ>$5@(d1#T{8aI&EDWn;|s_oHdFGt#&dw5Q7|inlr{<@e}-*!>v9Yi5V0 z*UpLyc1EWuC)XtY>Dba&j~uGzcP)pR!<20x3dwZ&Bf>k0ztsG22*^51iJWK+k^D_W(0zZz{ z@!w9848vpxE-rwq`F{@gqAynnTjPmK7o&RG!#5%o{!5DQ;8`YUfL^pVk~t2Pe}9TR zJGyw=BaRSk+K4TG_r4W3Xd==@X&PR24w1}E@T#jfHTN+Zu+8;6o!~_8q(I zw|@13d9*FJB;V&cip&UAl8g7mq=2>ciIldm&lAtRzXw-+s{-S;wX@uG=*XSQLu zl!WfM^q&^WQ;cC3@5;3wGi%*~c}DMlpD7kKPm_i1P&2KMq5g2pJ@ReX_Bt+pDNlGf z+?@*;NMP-8?z{d^YgX!&g2d&NWFIWFi!Y_$sY>knJX%C$*Pnr=!56L)Mxwc|Ly`0 z?!gY1Duoe8s9Q{+^F0OFbQ+0lI?H!cDFxU6W`RJ4A2z+o=A=lyRqFia^|M*4!%HT@TxxSYO)z9LNAky34;vWNeTSLiZ{&_spf5y7sygX zBv$I}AV-F8LV2UBMVs4WnR+XSml16vNQ&|rZ0OQTB4%;Z=$EvCXDEp~bvu2v312vQT0_}c{Fd-gru>}kK0`1i z_H!I_x^#H5WAQZVj{ZgZhdE3yKQWnGu*UAKv2mAQ8(H6oxBIn+HzKUBUV5C1~wsIl1I(4A?`+DosI>ee&dx@!LbSz$pveSWmK-yL?y z2EuAn9}i%rJ8mf_4YOPrBH#1aHz~!Qza`Jj&$o&C;?b7Ge623-w;QQ<7KOc0Mb4qe zkoMRz8T0CH-!K8dnEa;rko_U z+$a{vW#_IAfl6m1A=LT(u-5dtD>P^Ka;?wK27d{)dJdZV5|$0i!qnL}vbY+{7H{jO z>Cmxz5C-jRc^+4_qFp|M6GjfN-*m6oXEazSH}$^jN|&ddBFBy&PHkJP)R{lONSyG^?=(h2yMU9r8NW#!8$p4KMQdGXd9q9mk_qJqCzZV+H04TAd!E3}U--Su!Z_=7 zCV1^))2?+Vzq#<&TfC6Eq*Mwih1fE77dMP6^l>#QQ&4ch+BpkZ%r-W0gZ!R2$uBWd z1{`yh&mFo-NvACqr$R#~+sJboR-!t4%?dhga|#iN(rXWMDjiQ-=-3R57i&C!+^Iy6 z161Hku&=clKmDf+J+T*OQ+bG++Y-NVQ$7TR6E)hdPdpxB>v%LJc|scMwuJiVEugW10)=XHfjN}}`{*k?4cg-Qs zo2@q-n*vOvBz1P>^Rx=5hVzcq5qkhv!7< zX{8;0{kG(9i?|u$;^kL-D`TaSQ$=#L7btG;U@G9ppm&{J#-8ylTkCv*<=)`~AH+KUrS)`2K0Ai=l!CI| z?dGRfe#zgn0!j zvbe4FV0OrPqyX{@eX0awRWaG2b2dO`DhJN>isiwN;B6bPHAvr7u(Wv-*Uc^2ER z7M#;&+0rsW0fw&p7l?nUOmxdVltakRs9*wmls=qPJPt#GYAf8Hb;MdIVt# zHBL*Xn6o$sA;(!w?j7FM>~ksDK0F8Vp*#CWywemg5UG8ru@8pVl3AvPzXD%h5ckdc zv7|JPSNK&^daW0G*L*I&h%=Gej(KtKNb)n-q4OTwo<#~DZ0dY|90_>q40eBKiy2%F zNxacqt9M`#(~tgGg*DAHJK>vXDrwZna_`+>&b~mi#Z0qa&v1%kbFg)rH48oskVn-4Ezb5L68zF1q7p<8h+d$DBa zAnDARjzmUa8L!p?9YaK3H{#1{3FI-z$ict2xHbYI0UYdEIjvA-kH@sOAdVR?lH6@h zy^GeN?ye5IB&70RyJx%UQ{g1X5|bUgi?NFd|Gyb{M*5l^VM7)$gyYlP{@R8a1m_ec4>ol}=jU6rd(6t7lSz z`{Ng%D2;7{{`5OS;N2>?#gn#hiV+g(oAFR@-?fTnheTn@R&u+^Ga1A}A>^cZVXYCk zzuPUmT@A$K@;fX7w8q5r)VUdQVH02jSN}SV+l4@yj9%L(&umRp(RQIxD(=k$b3>1o zhY@ryVAAVP{zubUzcs;kVVsbX7L=3`0zQg#Dr^#h2#AUj5~CzUS|qno5|WD2FeOD= zM4Ewgjt)f{HU?7L7#nPR_sjbi?Aoq<&vnjypYyrF9KiIAML6tI?7g%L-QD_zP0+c5 zkg-I?TasI1cTQDnwnoKkoE0FP;_qB9_z_y&b+G$QhAR zEC$nnU!fRxHD}I;wrcPA~6iuDA&s#MUeFqeGr^Sdw#`_4oi9TND4Ne|7tzQLLD z7}=`yopM{?u`RJ{1s~|^7{8jBk$U*$bV>jK`)v-SPpB%Zq+USUFB8~HyZcD+AyIy# zn4A3q0ttBdd>jmX`i}y(4^!SH?owF(b^xStZoV;IWbuSO7XF)J9P}UaE9(1{Jjs=5 zTXYk_!d}uUdGs=IHFrLn{u~ny>T3v_rwDw~>RgVVjV~f#=G-qY-R<#)nteYi23Iqw z2~0&k4&|3xct)Nvy0Z}XLNJQ=5+K^YxOJlZF#b;#n?5(8RAz$cL?1}Lk8$nMTq6(}e|3J3zd4}` zeh#64NJ$<@DE@-dTXV9h_}jcf<4$%bomOh&g$9%_K1I6f8Zk1nl}9+`_bxSpx=YNP z7}VaaC(z;tyV=$Xq%1s*!;bo%A-oz%A%)n1n0-GvKmT{9TQGTPaBkg5|QJ{x( z?o@fpS2wBC1(O51W&iP`n~9xuyUYOIo*$o9Ar#Bno35;qo-yhJBZ_ZsrFPt80yQyo z2Xm6oy>)OYW9BaIWOrWsO_{yB7lm1*tguZ@4idyk4=tdhQ zZ4j~3BSE<2)TJD_p;87DNA~7kI+|0sa&8N1d!;wsSeky-cO~#A1&21e3sFelRJ%$G zV!Q9OGqQ++BgHtEBzR1}9aOD8|5>Lu1G~>x3$=c-+DVn0kBw~$Ee?EYSWFUMPi&s8 z?);sT&p)r!(JoX;M)!1w#oPddW*R_Z-)y`xADvX7VxcjQn%~@-8YxJU@|EYCAvMBb zVfuHc2bHu<73}R3u?UhlGAd8mlkaYR)aS|r4~XdmP>tgyM!m0>$bJd0s}XmTu!i;; zNbr#5D!zB!1FRHARrxdX(S+yJ!ufDC(Nn9%4Z5qs_awRpF->1*|bhPD&rg0V> zy^2nEcRtq0?NE=21!#m;KiIa}UCz&fepY_P@aznX>AB14vH#L+IR{1X%gKIGaQ-Z! zdWkil!MI*aEHB0}K~B|foc+C((fWUe1&+aM479Gg{>X`w$XW;*9*^Y>PaU8qSRryNz+L}bW!CY{^ z1%hM&USKoOl47XM>aVa*7)taK)m`xW;OmebahbiQc-uyxlg@64p$*N$tws zExu{x@ASe^9NyQ>cXvU9G}Up^`I9h?NA6rNW4 zE@SlHW8CDN3O=az&1wkY?T0FMW&mYW2eIP#XQZ6Lbl2>dK(gtneVI%!yN4uwrHopCT&L?<4Tdx7{ z6_$&V4X$&-fPB~I8~Y0dy00#>3ql4BhN39SEDsiF0PLc%kmEntCW0_^ALgYVnvj=4 z5-QA{2-aJsvO@$d%1Okhbx49O_}46w5^SS9P_p>xzDI0g8v&FVNU73zY=L%P_Nn>AFKAdA)C_d;VwPscd4KB{71W*T!9-oSwg;O^oa0di9=SH~)kd@2i z$m6BbZLfj7Nh^LQ+&#C5W4p3|2YhlI827HzAA2B6#@0D8xi5halQ}eG{PtnM%QBHa zaJy!M?|W}&2u>DD8rEV31_?yl!kVbb%gP8Xc}x>?hF^&4vu~X!kp5g9X;Uw+nYu+h zn~Be8yeXxZ%sPIgD4>un&(;>rh6up7cR64ILhs zau$$`H=M-nhfyT?LIPs|%RCBAPB~xmMuxccg*D^QNlp>Vu#4A!%+G0UGSR3NgR&dT&H;;Rw`%s4Wg|c9!@~abu}W*7SC)SUwRC3z)b+S+B$gbj1FQx zIs(WjtisLVGvA0g2cLkG5({=2EuMs+X2c3L_GF#&))g_Y_pRL!YM%f3G6=_O_=I=c z_umJNv|@#yjZ6;rSttMfkb1caDf+ou&ePsTtu&W2#x?vT%;vFzwZZ}S8?CVd7SM~) z^FcG6L9YsDv)&_KZ4yT~;&8}#C#E%_nO=4o<^_)966~`!X*b2$T{B~Zvyvltym}3|TXBzINX#8e) z5boZ0S`AijuqAK)KBSTm#~`!83GKYNBMTBRNx&WYR2J4U#YV^22?z)zydGtNhx`O;6xflhYpIc5XH)oGLr_HuArV zfHMSU)?bHRAHUg0%1fxP>y@n`ecd5k0uT)?m;=tISR9}(DJ~yr`I-&wMu4%4<&3Nv z5=3Qyf)V)p={eo^utcejLeS;t`%8x}oMQ-$)Tq1EFTUtK(6=JI9nYihG?N=~^YrXo zNN%7IW;rzDd=GKffTw7~*2+2|8_|1NP(sR+TSHGdtCXCp#+#r^LyV^|qC|8qf`IU4 zXr3a`M{W+?jI*1Wx2@5uXq0+)&jo)^NW?axjVirW*l+Yx2R4?EcUBswFcw#1)}y{Q zEa0wvJ5Ijh`07>hN}$ljl6!!UWTm+dn>ugwMxlxU^F&RnO1*Gkw_cn+vWoy;d)xr^ zV+eeFgZmW9+D$!mTn6VqUAfPHc*>ODE+<_Kp|JD5*=hT^O8dzY_hEcd6=!Li&jh*f zExt##On6OC4mNF+Zy-aDWC@=+^wbhyej|>-$b#HL4X1Qvg=ad-#HIlkB}DQ+a!f7x zHqZj?MOjD(SflgPX(Hpr3)yjPK8&SW;d|&N%K!=9)-x^aGPNC4|I3>|>{%dyBkpxI zk{UPP8H$e1igIj>d0%-RN&LL{w%!2*Yc_I?T5F`LT`;a{b@u9uE`OuyLfA8qav?CY zP3>RE8GxRE1dZDbK!Il5pc^&l?g!7wu|Z=lXWFptJS#TFY&8VFRMH$bG%~LCYKuWx zwsu?QwkBolHE!85AqN#C391iNTmD(_!Dk$@H8-T9;pdY4#VlZbbe7!ET_!O{a zR19D-5E{gyP9*u2|w7w$GlxokA>&n43ZK_1@KZ;LrBB0e692=_@)#8A%_`BNp0M zn=CI(utqAjd!sk>ZH>kf%ee}5oKu)GZThwIdSkXxh|g78ZhMBDvLS^buBUsj1e_gGUw))78;>FaMNm>2(=Qnz7&a;bIV-#)v4Zy=O(mQ-Jp)ZeRMCzIAWq zsmp(SR>Hs0ZmfmZR3hR0*}~tnvS!m}U&t?!(tuILRt}VlvUhV*0`+J4<@DNH6W@j5 zQbevQKFVmI@0o;URP4&FGz@_|oz@6S%~=EsUpcN;Z9fM(HcC`5Y1a zY*ONM*c+c{<}xrL2H8g7>Qnb@+R~-dcj`)zy`l0A?7LMR`=7Di-x_$%%G>A6m}6Ob z$qFSGbNx&Io&gRzsD-2+XEJlPh+12Fi7Kg$ng(P*+j8)xbxIw77sSX`iccqTm+L4+ z5?|ltHeCx*kxgcOXHRCRXgdw34mig=@KjK?cERs%oWsd5TvqT26>ar*=rBe~_lcL} z(_Re=+<=|w_UYPUJD9ZJz5NWfYn1%A68b{%Er*0dAVoPAjLo9V06^uQ)Talay^#o7 zU5e6R$bl_UA2Fg{{59a|eT&VidEH(xGw|}fky^p&`-RVDec|>>P!X5u+)DaolMw5P zrnyVQqJftK-j0(2Qblhry`iQo7b3EN--arY!`n>v@`7(gEMaZD!nbQ89A{y)UbIr@ zFg9bvk9RUQ=6(_tZ5tz_%~b_9<5*i#^1t%uHu=vQ&#!7X0)liyhos2s%~@sjpPXRc%gudySR@5nuIx(*mn6*@}keotDx&J97o-!U86^ zY&!`Q_P~RgnuUdgVo~hhpKBxg;*@kAZ6b@}Akwep$Vn6uxvoncV~_ zaTlV1JixMCeePr;JEf*DK+|SxNWJ&8X+bnfcAjJWKUG5*pRB0O#12F$y>u6&&J&9* zOO7cGO>_@~tiYv4;QfUvWAZy2{pN(fOM-dDx=)uHyZYUW-jy5Wf8H`V_&y(N;m zV?F>E?I=lzI*D9Dx?TZ|Q!9Y&-L%2QW&Fi%)5$`>CT3(}V#o``_guF7$7!a3 zp!agUrlGXpzsHED;KOK{3HhvQeR5){1qcF5xXC2U$5nDG z4n-!^djsKk{W=u#hzGi3e($Bc4LYq;TP?k^d57LR!8S56avh1Z^BWZ#n)vBocsHc$ zRYVVa?>MVztGn;a8qr;_9HuGp_{hWA{hxhOZeVG5rWf7Zw3ZtO|C3K2Cz4DpM?;f&FLk%5d^;a*^p3 zZCKm;YqRE4OWYnmp+F;vQ_zyx2-_dA)E|hoG>mk=DO_7FDEUM0*_B1`3i>qJnVHClSsC1fo zCf&4m^XT6vnq2lJLn%k+YIhkVADDxkksme-K%{3gx$IiChAw4pf#Llf)X-^}@ntpL~5x_xcF#)fZo_=A4H zF1JhIM#eDFR=o_hg|P1B5oDRfpup*WNt2By)5R?z&g&ac>w_a!=C~B;{!T*V1_}t*ft8iaEmC9eC&mdG9juIlU2-k@ zdwFZ1ZyucvtLB4FsFSk%?MW-w=fO`t#Kg4TWEkaDTEK3BPLm->fNFh17AI|_mN-Io zxN=pNynLpxcPaUfKPKY}&EY)PhJ~ClEY+@mBGyw!60T?p>(y0tW;!IhCv@^Cbj;Hp zN?*O?rUJnP5FvV@w}s>umGb78E}b|D5LjD?*KZxox%84ev!!WR*TTaXw|%RQo9j%o zk*`w0Dk48>)VOCxxdora2dJ$9Irel6ipXbj@0<0KCL=Gjlgokh)Ee{iWj?h_`sR>I z^X1Vr=%w3O+m)lL#Z@pqUQZ|DY9{tKV8I`T38p{nkAE0%{?Mf->!3z$q5T9F64`MO z#KGLec&o$OmSJ|V@9fQ)5qpLgZnEtb<$$@XoAfPZXKB`Cinx|KKkUJzE+EUB$oF@XvR1L;36Ot*>2eLnh|(PmD-nrE1LIL7{^{d0SG zyPVTM+~KACX=n~I>>&Vng!C6CMk!D#J*U_|TR{n064-pUS}xAv1OtxX9XR8Fi@tT zG^c@L87f3<6U|A9u?(~O;DF&0Qhnc;HAK6x5M-IR*o+j*uYrv>@@<78=dq7;wyi6CZ)cMW@(2~+r~n;OMmWDIXkXq>MKngWFO0SA>!zZezB(nSAuQXwC zmi1aPT(_3oDnS~8$9HG3#})(QE#2gaT9L=NJLU8HzFvVxR1DSgY!Rsw|nptJ5c}`%^TCUThJ|$ zLt?2vLw2ZYF}!e+Lrxs4@mWv$*02~9E>bby#mGO$?dRpUR!DOk;nI5EG66(gNuVqy z10ZS7i_?b1W?wkj%swjbq(m3Z=2K_F5=NrzU)qpzQHKupqo+((BuRy z9V5vAGJzNa$I|A$&>eVwl8TMI>CQOO%YFiF5Da!hc6#vms#d#)B;P;ZhmCE;B-zi3 z>7905uREhjnyDI6GH1hGsI<6{jD<;~z|T6c3)R2T9MOyWFkPi8VB>d*3Aa}jktO=D zV}>u#mbpS)-#$@_1HPt>UL6Y}z~Xq`kOi`d<(;A34E=G?P?~nCP|f|D8*(FPB%Oao zzZN)M@CPL+l!0-d_~!h<`2^u2ulnm+oEqLGI7P(~HeIi(`gPiJMKZ@L-oruiVtmb+ zB)Jr%%LLi6V#1mL0)^EHTCI-9Ypsh73W_u=(vjnXa5&=k$HMFy#@N&A`SNoXpc_g% zNLF;Gb1*p-s4^EAf@9er#xQ9ceAs#bHes*2irt6JiChrt@NgF`7ATSJx%(I?3PFNV zzBIhNUD?ne)7;k#UEx|cV z6fhR@D(k?VylYMuW*S<-X#5+N5gfKFB=VQG`JX>OovE5B-J9c2fc3M9Z#Szby-XMn z!HG71k{74%o=fv@z$Re-XggXXE1wm}r*q`ph+Hi#_wIB!kp-)~})s`dwZ zj0Mm1?s+Zn(WPRhPW&`>kq%<+7y-4^vHocGpPGnAd+2(|PKFVbA|nuz9Xg~LhZ(37 z>C3OYmCf!yxlLSQ)>Ss4;THsnhLA_G4FV#MhC4_mC1??ct9Hq`UZST{ z;~1`k$uyo2o-_PIyrkKY+O^WY+{+57SFG0R)|i!T7CxGO=G0YvY-@V z6O_K%{gRDiwL3c(VC5#zeQ$RlJ)0ljDhE1wqyj}}55iV=@AsA>wK*XUy<2K!$3en( zQdda(h>#aXf?_h$o%jZ3QUh{kg8*Xp5w|+&DhWJRHV&*1=(Pn!q519zbBt@gX&FFu z4xe6U!@0hTNt)mG%*+Cgqs}=;N>{-355Q~k%(0`!-*w(54i3LM&b$8RN|mvyje2@$ z-J>gxh1&u}GRUe=EFzf;iBW0TR4&7_Nq5FtAZv3Ih|~`x`E@yab&Yr8h|-O)5APj# zg5Jlk2vq}JhwN{^R1Ce$z^TdAEO&js^YM(lKl?KV!DdQ@VZD#Xlek=<_)h-o2prR8 zi?8OIcy9Bh6o&3cKQVdiH(g7&!`8o=JUL|hA~}w`i>L2$*?a8w`nHXko44e#RZ|*OGh4`r_ObW%Xq3`rJ zl2+SU*z)_9xFyGA&cNefltOz0wL)J|)i2D+k*Q_hL(n;R>{SV(8tOklF(-esoT-i3GKt>9WtRarZxwZM<78()Dv-_s(nufC;G z=F<2h9*JH}nKbwjykiS`EcN*}+Cs*unqkUx6-0AFjX))v?F888K6R!*am$L;zJ(PM z(VS~N(&QS+-BeY`al!*ZLY{#mWP}`;>}PEV+++wP&2SfqdL=zvyo=VEs&Pw7U2?sr zvycky&*|aKS}$Odq&hUWeyYJZWG>AgFay-S-N>pT4_=^iB8-X3yr&RKpEMQ*0&c6XV6B(^j`d3KT zrUU5SbDQ=#9T1ZwHvD%`-xr#5Mer(xM9>aPz-dB#K@0ksk$JApkKq!X5&jgKGI}9o5u80F1946^ykYr)6=?#>$7Ce6 zw#JOOZl@Qgt!cql8M{pX0DET3f!F<>fnvsUlX7QilyXWw6vt;LWL>1t*5hF9{!~4* zD(cN`(s;(~o<_z+AKMkGx*LqbAxmH*(=|aeCxQ$vF>q8KEY#H(uY_}#!9HIRXcu8m z%Q#srIA(NXMh|4vc7|3_GpKIGm1yM3+@i(J)e@Crr@j7|dD8cav&y`hiVj&1Fy zq`$7Ds=ZC(+`KX4=u=(wtv z6Gv(03AwcIMdZhG5n4z#rIh;-Kq8_M`pekoqX`$B@`Qb8YX!$?D5cQ3;QLp$_~Z+1 z0ADe9q*Y{)^Pp-wE3iL6prIdEi;Zua6(y%z|67o#UOL(20O*kXHs1oTcAQ{(m@E@E z4jK9LM@nmz%8C`Z?30}$FXXv~GQQ)oNLkwvgwZ{G8EAjGj}lJhbAGhWAzjPWuJKO3 z`uU6&Ph_R9X~o>1bN@$Y@tu+>0tX}w0gK^ugzg5WR`>5kaw9dA;-ivG64EwSIhuW@ zCl!ciG}Y;vgzUtZ^8-lw1rO(J5z4-hVw(-kS)(*j1xWLRtimqx)0j(@)wU~JO{h{o z^?c`6wi0H~j!O^KSwKd--2O>2ukHNcv;fH@7MnvouDSRpKhxjSf@M!w7vQSluM<dX-%@nF`WP_G|uEY=mUm#b~%L!|2#q(5&rB>&=^QeZ8K*G}#`8|ATSR)+UP6 zip?;faWLL@b2DB01gIhj_`bRiBC%%NwBgfeyg!e3Je?D$nhf775)wz+Xy8_9CoE~0 z41v&v=>PgK+yX+ku9eZc?_fVHWrIKBwW~11wFxRYaamnw72~RSCQ7FTL~JJMPANCL zad?__Lbq*EeuHT(iM=|XrZWcDE`J>PIoD15=0Y(9<>q2;o8P4e+9A?3Hrc&P8WO?W zb63t&{{_;IH=lh|3=ius|AF^jou||?o}0i9A(XqC6sh0feJ%Sx z9^}$AGL)*sA>}{9?M4*z?LlgG1|1+@>%HcZiL(H?Fm40w@Fv;K4Y0VLaCmlcaA2CI zJra(I4rX_%fHGEsfgsp;M>R0JE|jvwo6}zg4X1vV&`-BLuSN=%qd1&6B6~I-(NP8p zA1g7q8-0c6ohmB9KdA2t!-m0E2{(7`z!_K?Xyh>dj8-HCUcqe>(mc`(%RX7q9 zs{;z8cwJWyHQm}SvDA4|4V}KKa4sc1$WZ}Hu3QnRY~9tHwBZk)pE*E*Uw)B>;tRlM zzN=$LrQF{i&kkCHo{yXm&X6XE9BC+ly7{R+96ZEJnDPDKkvv`jFu{-b?eM7_e%pJV ziNc=;!(9O6CF(p9?x(xmI;pZ(#M_9+;-q0=w)tdf!LR1zw-;`GGG)7uI77lpQqNey zdkW;WShqQvVt{M#apSokxAg-lZ7rBsHoM}_dErxDJ`?Nqua()C+M=9>N&eGla*|m` z?8I(KEid5Jk6Cat7ygLrkz!Woj7z@bcN@qd{tGDiwd3WW541B`ru{1F=bXOk#&Zt$ z)|gssFkKoj>|1hYrCa?)Qv)cQH$6RGBl@v&3y)STPr2t+y|Uc8DiMd?58A*u)l>gL zmB$neNSp=?$oSez6zS%M>qd*DdE}CC z#M`8rm2wK%Uxp(?MD@i>^Ea}Mvpij;#AQ+&9hfASn>f(phu9Q`T)aR1@#a>Ls5Z~5 zBRFX?SZ7*c3baH2hkWp_j566&n2ytJWq4u8NO@V5R*-qUfLHb4ZH& z`&T4gwHfB(A$?0!4<%UGdvhff1fo?Q7Hg!9TJAhA1V>aBDZ@;6Xe9e{j>#fx_PCyOMixkhOCLpaC zPhQu$WYyaxH*nMNwC5V1&=6)Ie-r;}uOrn5?~nR^&#KmPDpe=iPu&%FgYemaojac~7ji_h3AybCa~iyX(&^ z7W|e;ulVs}b?A;uQp6g-kKd;mtEu*%OsEkF`3p4Nl@z%G2Q8n0?#OwulzkV{dVh$f zeX7r?%{x7nsQ6V+5EAStms|H)D3!AG#99{ukJg^KoBk!kgAg-=aC{ec-#xAiH>+kIAV5tQhs~D%Hc~ zF9E=7wKO@;yT7y3ZjKAB1|}A`q$yyNYBtn*jV|`bhYXB}%-g{F=`?0`uDNLMb9_xi zM%^p{s++RD5-Ix2_!riJz;M5DOdS5YB9z8gu-1P}BxXdyN$FfinaJQWpywcCXq#%ifMuTDh40Z2y&&wqb;CLO_0SXcFj%G4H z-M#s^pXudZo$x0~fvW4>_-YuCTJnubJ~KZxc9n1Hq<$Pa8biYAFP6%PP@l1QnHIuH z;sPw$=YQ(0{+#$qDkVJ*DL{eP_?t;7&qG&@KpT{ExUTv&ldW9d?=D28UV~+STriD9 zT>IWks^>zYneY0d7HuseE1n5Y&7zuVIwMgE(kUWGI}@@>Ncj0DNvq#oFGUe=SC_B? zZFqOeocY6&_aM5`@10pz$gr<=7?{Bsd?8D336C=Lm^2ZAvXGC|m z6_VreJ?O3X_z>KP{`geloA#ai?f58(PMvuyMQVSMy39u7NNd(v8@;;d{P@AG2Te_ zx?2A%N^8U7*6z8q=8OI0$)@OE!17|MOaNip20sK^zZ7xnD`2b6} zHi;d86g>uc^$U)$s;F*Sz^u3l$&)PRthD31V{cEKT=a9Bw)3Lj_Fb)33*m<6mxeZ$ zdPQ}8?A&x# z7g6j?Hexri$FN^y<~%MWvlRJ8pf%>>E0?&6&@MTi z`0TW1tQujH&V`^Wh6Xg+j65vj$nuI!A^lO4nJ-R5(8T&`DJ{MtVESLGk{CpQ!5uw2 zpi&KUy}U_0Fuy)YI0F-2`D4uA_+<=L zrxxGh?LZ<3u_7C3|M)}ig*{9-s$vgvZ6j#&Izps$8*F2lx7cZ=Q$!kjO zwnfDC$7ID{2ze2J%PIe>?eYz{aGD~p$gb}1P#9Fdzi{OM{@7ep*oU^qg-$>wk*)Z` zjkDgIX0P`+fC)O+BPggBJKcl4QbKFR-fuATie0Zi#7U97m1nqh%S1FL1mlGO4d(`O zs#&&(hgmaDnz6%ayzaQbu4GRASJ} zXBESj>sxWU#p1F8V^?gN<5oP<<&olC;BX*y4=P2DKWDjtEvXdOp3ut}nIsrKO_FeY zd1?fCJ$Y>a2cb$e*KTQ%j;o>A_47*g++Lr2lG{|aWU%Qqt!0wpdu%m#cSNQGXI^8$roVW%^J)~ zf^0}W?FreH(k2}?(vbwQS|dRt6WZHYq+F|@k1UKn9toPeVbimfAtAhD56hl`M+{~N zAabgD6ho|JeRNPLUk(>1Tsu|BRcBN3T2}SBIoXwYsiUP`U#(ycMOHw|c;u6k`?qiN zcqCD-6+;zId_E>uy}*qHU0(ZhqesbK$?WF1-%U9&lr4ZOqU8fX0SUOjK)R8JFqY_u z?Cy)_P>A9>wAHJLh>{=s75Cjgede^dqd zo?v6uy5s^gIS4y;EK*Y<3@mYvcnyjVk3d%MW&ks>ephDMg*NzN9LF$;e*gC1Kqom=Z2oRcl%E0e*HqJVL*c2w@{aI3=?lZ`L4;U90fgPwtS zyKAoIwae7C}W6|B?>;Un2L<{Cy*aY;S(F6HrraHyn`d0-vAo z!yS@Ov%~DIl4(aezU2Nwz^4720p&LpOe!l@C*}2UeE4;)cNubg&0DwS(f&tMirSAm z;c&qtIyychpPed%jJS>$SDdSN6@zAC)rcw0rb}-ZW$Wb`@wmf*XLF=H8o|kIm@bJs&dy?%9vteem-D#QA+Va>^18iLOJX zb@XaN`_MyaOK6uLjwG31{1tESD2alWwz54M-u20>qusB3UsoBW>_V<{(^uARL(y(g z3>Cl|_EuQ+V96GkA#8W!;hi%;i{Cy)L8+e`G9S~tkOs`26fg&VYqML;Or+l!pRVQW zDK!t}zLCNDohtG1jzHM!owi7hxzuuwBmp6*rbk+nDwA}cwB@7fu@BDFDR@L~Y;4AS zvBI>><3Rw)zsSrT)bhe-JYeSMF7hnR>#f3=^%>e-&*lgDT2FRRot?})DapPNm(TXv zTjVY*#YRS7y#~FUTJQ8c_i7#}16`~uEF1c-0OQh0k@!Bc^?@#EJ8#-3Tkw^a23?`r zD_sd|pR?1UQ1-tZBEvnw@eBjo{kQI3-{DY^wS!5^{QSTze3pk zIH@g4E=Wi3)3weOITkJU^lhjG;#p}+; z6f1=z@zDME?(EH{eMcPMI{*9dKKjCg{ANc>z{@MqHG2j9KS}tD|3#lA^K!TiOe%rH zIupy0TXPC2N=K%Zzc3B*bmOEu3c@7;;l?X=>!1TzF<=vu5sjbLk~e%Qr1GvnG?`wb zxQ0=8*6??nBA-J=#{nYwX#H%?>UqJ-C_CGM%8QISdk|L4V2~fh(GTBJn|>q=xqWe; zn1{?fYD2c^_A+{PR$kP%ipD<&sqcr?E*c!8lv~kfO#`9x>4@$&isgkkT6!vHJN`@c z#UJ5_m;Wx4J5@e`_yQvVV6uxV^Q#lY*-HzJ&5R(h6CktRmHNH?X1y`d(3GX zuhQpv5$u=r6MEOD;Nl0qd}U9mq-$*S8e`6Bz~^DP`glelY1USPS|m0rF{trG@inF$ zXJcA1H|Hq~I|(LRAOzRnT@{+&n&j-p z$leq?yiu`I-SZ9(>tT{-)zFdIAGS2eHVO}Qt3Q2_j_3Q9#@?-__+%_4!#@ENmqj`f zc)@S1?5=$9z{^+0Vu0pE@k+9PSMXGx$s;7yOf_(BzaX^PTDw5b5=+~uzhNF8FX#- z?al7}Pc2!tD$^7&NaeH7aXqkiSeK!!M>MLMinb6D+-KGC8oU0+LqhoPzoCAZfq-_z zdh0&ti-ObW3&Dn_HDvPzI0|Wc2@`KU_(IQ2*bVB}b*ZQo0GX`1cP^Vbq^&v#&Pu3m zQ=h|V!9KIPn%(|6a+r_sqp6r8E&TkV>~FD>``qLeRP8H_zHU)sd8QFHoSKCCCA38> zSI2B=o&ik!CJM0v$&K8Z_tMSDq;n$+wQ=q9qSWeq=1T-xCQ!=?>8Yo4F+6t-Nh3Lc zdD!+l`qngzZ8EU7pp8OA?7KB6KSyxq>_X7oyjf&BtHDy1&#<#FIVC`m^UbSUr3HJ(kJxQ*wjUiKJK)Vx4Vl0^M3bT^#xA^J=>wY?RmJWM=5)kiD>?Kl zHsPk)Uo7gJ$%(9sZ##|q>3F4+KcIaayhlp`V`?fM-1o2yg0*ySFIHb4U;0=D3{*8y zOdUrOV?fQtuoc)Z1Wtte-y|U4*d;jiIwPWfuApW2C!Xb`g(_g`{VUM(ZyYU(tpc8Q zIl4Sg`A0YX#8xDBh98>+-Ra){J*5wun;a^z)tVgm^pI0eROK#=^Y0-|2yCj4E+oc^ zd2XwE86#S3rW3yOM&S2k-BW@4>*J_D6=SrbFsS+oP$6sFvrMsEm$?6q4?T#qsbGgo_uLX`?;_G6d-|T)!d&* zckXxoiQrDLC%2$bSY&ypt}RH3ZS$<^9=Kj z5_ytxR^?yR-Ie<&UZ&e;h;%#Ff4F@p)RPk9a;2QTTeNVMH9F?u#%m$Q?kF1&u}eU{ zL;Koh`b(UUh!!a&h`z4(S!xQWaWaf%rV6_ay}(_Tfgg4Mxz;GuCH)54(1KSnf}L4_ z8gn)10(>slNMetof0HJ$IY|oHHYG-&+aAwW1~DXqm!nyo?EK#%T3x&j30#)3KfK>b zgU->+cr+5z6C*3Wk0>1r8}xiSXZWP9kFO`4v{*7jE%lu&ra{1S!T2_~i~fp2q?z@@ zGS7CU{@nRbjAwuGV95Es%jzw9<$kQ+>267rH+_@OlkduOvFL6~&BF|Ci=o$k`{4iH zK~M8PHIX|5?8dESHeIG|Sj-b$%zAl6E-C9fChP^gKPlw~)z4h__Zmz8?`%>~e(kJ6 z;U{TJ@3aQwvQbHU!S}KH0OpWeMH}*h?3b!5x=XrVm=`;-b$Gtb=tzCNNX@yNM|R7! zn>smnie>!RLAql|M+N1BT3j>v$}X0gh>`Ds&jSa|E+;!r>cX~XgP-IjSwjvOYmA#` zRez#t{d=~>o~@iE(r%IT4~GYy{mQ)XP(J76`~~RR5OmG^SEYFuk_YpcIaJc(d&yUW!%V6x)VRQhS&pQ_X85 zCgg8exJp@)O_ACzNnfiOR(;7e@hI-B`X*@dwakNdrF`z&MgWiBw7RI!!uA1mcK+BZ z@#3!F_{FBP7OD||eljOqRe2Hr2*h7aqZSF%cj5?S*1#a44f`W^+!+$~c9Rkt2$vvbW<18JY1e+aYCShfrpA#xakX zW5scf%`tAyxxeT0!}m|Pf4E<-*YkN@*W(Htgnm%-bop%q_Y9(*3)9%hf`4-{R$X*# ziNG98yU9`1(5Di5KRPk1Zimn_Pa-(Es$JvkRIk5xr>*RcoQTvu{yJ}4fkF~x<5U%` zX~S9X6V+3GKRn&pI-rYXIWu>Bq(kTe|7|1?scbpOc*mXRK6NfVHN?IIE|%{1`b!kU zw|(hHZ4^9MC{mtjc?jB|cfuGSp(7JR*eY!MDMdzs z-tvUw^CxdR42)OCoCf9%LiJ=TY!9g3RQq9MW02;vxoR<=RCWj!U0E-9fq93O^Y_5g zF`DJ$<~z+ZyrR6a0f!E?Z%?T8F|aIULQO5+Ggh?M5^MNEeNg#%Ma0xj#u!FgC{b(%ObQr zJ)E$G#h*~EIn2%LY~wf18Qi2}pL2}F$8$dh|E7j~!dbrnki?SX5;4=02*yw58!W>%a zZ*|q#Xeh;7)&`E&%m^qp%747Sx`$EyfD3isI$^J+QG`q3U_okXPzrtC6Gr;!QpDhs zs;AJTg3Qh8Vp!bA;o$ zdBXKyZW;ahN;nmGdL!|HfK%<>zi)*K;rq|emuUzkoh+PELUlL>bYh=X*Rl>3(`+a}u7 zv-KI-=X1^JvGwcm?ixSiUPFjz@LE*djF~)c9S6Bx>7!u(C-|~y#nih?n~aa3+4Jm# z$y@{~I%Y@fV-+S%Q7b$01r6g{MhP zjq*~ZpBqfW#-0CBpMr?F2XaF>jYz;_fyK=zt~r2n)VH9m3jV?d+>4>dh*18O@a|vC z?IR}1Pr8C{IhW22-nS`R4cu>Aw|0K@hS9>Lv3A!zgD~Zm1Mh0tZ z-4`glsPApJeYeFeP`baZ9(-5DY5&u08FC@jmLrW5z*Xpx4?|FzXnlMWtM2qBC?xDN zT;b4p-{XtZu9?y&t~J)TSEsXDtlB@#s`Y#$7dCf1ME=f)xWS8l$6uBU#sb|Au9JhN zXj&l2=&6QrJ|dB7a(AxE2UVgDAHYc#o2YMsc)j{2EU$*9cbHLr?IKS}`7^z?m-PTS^>y(O!G)$4vvQLgni+bM;H5w!jc>f$TEOn}F`w=Zb$TuYIamVD1q zPR1A!p$$Xx;Apu;=wP`)bPr=L-s~0<54tbchS7|BQKRFtbbTZ;_9d=bXyU;%9(DikpP-vZ zN|8^yPUa>r{;_>hzISY6TVF}ar-o2t7V^BX5xS411@=|r=;v7q_xMuxGhTvzD1&+7 zGqJti3N#AM1mB0ao@b-2YyP7=TxZX1Q{0Hq-lo)!&?#hpsWu+%)YZbEf8~=%S+Ll@ z;8)(R0mRl%WW1(E^j^*<#zy^izr|v-#i{Zlr*_gOesZG!K$An<#P6bbK3kKyEXR`T zKZa?U`G*es45}FL&jX4l{!bl@-};b{@5YV+X7lNKH*WvNZb666GK5XIGi)Xe-)0LC zrfsSy*bCADf4*+vy5rzVYj7;|%|v|jkX$@{^@pddwAw$-{}2rgWsI4QJe4XsX;K}^ zZ1mgrD(^M%d5yZC#S3ws$%t+D=T}&G4{0ShUhxe(XFsU?G+EVt*)}-q^q{g-b`B8W zX-v~p{?i&(K~D7`&(CLn-)b>2i!Kmcw3_5 zPFc+}AfxZSRb_XDif#U-oK=<_fKM49G@IX^9q+$=#^pTo?JpDpga&*`VeuvN*m|Q* z7&dACs^xID&R(lF<8LukwVYo>XkzlE6AOT5c6@%O2`+TGXp&3z;2s{h!GmCpCEw?< zpgQ~l<4;Et6M?AO2PII9#ZH%)WF!)RWAP3=Br^ym^ueo7$jS!oAMYTBr7$rib$}wnG-m{6U^qF5X|h zU`(Uft%zPeS8^B*v|Zu>#{;Q-G3oqiWyze;I?hh{SX<4cBNl_|K3mk5ZI=U|EG0Dk z10J)A_?A0lpczD6jtGx*TXSv(NNBqDvoM+VAwSWF+KvVuzrZqR{f~2u!%B>$?8AMB zZYLN;NvWMF^xvH7itRSvZ1_rfOL(VT-do6MbhX}icc@H-E64|vGp5Dpcit`1N&-qk z%(fp)W_RxX4)UEMoxUDC+WUwqZ7$}lxxvo-c$3HUWkI-*m+t*9WcUKT0e1bK97c{7V7E*o-D9x`u;O;K4vaK9B>K$K1cy-ixY%G;r8fs~E~)F`sUZth&y$q? z8s5p7+=zMdX1F1)`S4~4nGZdP@4SS6xx*}ZyI$C-vWeq}mrl~_beeJbJM`?QW#62= ziAi=VcI~(LJQ5E{yox@$H|y|HSK$)?cX2ghV72A)L|2?#)+#z!MNg4Gv2~#@c%rs> z^I>iwb(UFCl6Qh;bNZ>`dXFv$kx5CpwDW6n``)i`Muo$W(mBJVR;ANLdBxk2FLzG0 z)cNGH(3Mq%6U=9iw3nxX?^t)*KeWlcTOhOg4_WKgZ&iwkA~*D_>&n0k?i z8N9ohDp)+Nmy*>l2`1xH7kKgUVEHBhrJh0zR`A9ds2_K$Akfywd% zqn6r1EM_i+nBPfx%dMH&^+!na5V_x${AadqPT{lY^|pvq1rf{iG;t@B5{%ut=XH*U zo99Rue-gbU+AXx`{3m$s*!}cuAS*73UJs5O5OSE$M~3BnaP-r4GsV|+NWWHM@>-yA4HG=*2*P8tkqe@OzQzFU01ZN7hNfpCNAvsSz2N4ZO{i)Mwy zz7FpQuQJRGh` zCHUg8zt$@EFwy{J8}jj%zxTJTj)kAYmlKZ55_5u_armfrX|_Lp+=aTqAWxhL%kHX4Ox;Rz-wbp5@r9WW*LF6L{-P)`Q@}t?bj^z0={qF{DE%fnm zl$J&b8Q)cP-}s8!kN2izWX4tko{D(3(QlZ9t=s!@USi?XwRt*k)5pxAlB7bvMy)j$ zzs+>BttlGR*2&%BeiSyCrK3GV1Lz+dMZ63S8nu z^g8&|^8CamSgk)U#UJlXL$nOOKOK^CA+z?2>rzJiC=6}Po@A@@GwbMV3GX6xQTKdV za>@hT#a`~n$XdyXs$0q`a%2zXIQDWtg0GyjQ7evca@wZYvGAo_Gj_Z#V|t!YqvBI? zT!wfwmNxs{Kp*~tm>Sz({LZprSU-ZF=xhs*_zOA}2*2plcIggx=6IiZchi*Lw~43= zb!a|+AL&l6ddc(2NOGt3)!p`ApfDeIR#ND1_x)nGeTmMC^Iwr>5C6%2O#giZLl3ka zB43p6P1s-lE-+!bGEB1v9NM&C@0?qpp6w9J4D1P!iVHrwtWRjO_l|d0n;I{BqEKFg zOT_2C4d+MEY}EBu-L3VPXpv0ru)|^HH+$lN6Hptwv1antarhYyLGq=9kQHJg`*p*4 z`>TFkbKqlR2@l~;3sfcCoDb9xi29w-YJK5r_1AK15(=%?AA_V9ySJ z=f4>Cy=Jy?Iia;T&WG9!$9ZnoG(qhkrxKIx{EF9Jy^I3n=ux|w;v35({UT>)6$NlC z3XQq14{wPMZ7<4PLg&ip-{n~m3|@oQF5}K5=nmZEC2D}8*DyL#nS7^(A^T34y2$>s z|FwE-AK6M7aL|t{SY2A8oA2NL3biE%{aZzb&>dQ70!9z>xY>UB{KIm6m3oVVl55+Z zf0v7E&TQ0`2uWkh<@M}8fjXK0k$^BpIq1Pv1WDhT6>8*rN`N+&?lfHS56$_g)U-SE z4jV&m_vB_*6Rj`*R{csoMm$4SoIo1frDws<5sO!XaL(L8kFB?E8mfkl>R|>M8HiN3 zIG}#_-QCpVvWnN947pStKL!MIfG6bx%=wo&cej*BbQvkwe?aL(cGyJMagPd~OzMt5hbXAg)XJ-zp3J7rLXEVpV-tL7Ej@O;&#Ey`JRe+>-HQ^g=H4p zk#QFvWYELd2pHI$ovL~v;nuyVD0kfDJWGAe!28sbJ3B@>GE1*}J(~StN}uAM4Tkyb z95E$jG(RyKHo9+C-fC);B=7$3=_-HWY}p}B8R}>(Xn*_hfDuN6&MCgJ^CQ!u>)%|? zxRbH1Y{olr)SaD6WW$6p{&V+6PA0@^O>8G5b7LMvq&1orT}W&`_)i;V1Lq-O(fY`f z`LpfHB$@K6`bX#q{CrF?^g|8r=PcKYtND0VK;&C1t-|!F)nXlNSkxEe?$)Y)_}?s5 z<)@$n|CVPhRUgd)*`fw9mq1zq@&`&%_APz^{5x-pJ%_6XLxMKY_t$%awOD>ME*rk7 z&2LLJOS}6C98Pq^;$NhM17@Artg3KZfysYiFty1s2iw*ODzmoe37RF|X45D9J@S(| z`nh5k!j`l}^)qGbJ^zP#c=|k&-O85Z@yGY&Fmp=uh#nqPXY)FMhb~vw=O;onRM+}7 zI!cD?ceki~(Y!JayVi64fAslUG(66X)5-IYoBSZn;_3N`mGusPk;(QLhHO;LZ<-AA zuaAr*WA>u-_>WlQhoh+ehJAW(*s`~d9ba3b&*kX}EEV-#CG2L$(p!mT(;QaJ!@rub z6t|F}w~hgKM!gtDoURF|7TQo~G^Ee3DYNPhZGGAFZl8nP`e%R%JS`FWNwqWTwDB9b zj=nShvzzL7f)^@&wfp7O^G%?P!FA7nKV7+Pmp{Gx9Q^<)pzqJO3-CG_#*hh3t;&8V zx8E;qXILq8$aa&GSe7hVFF0K<#cBy5Pl5Vy+jU6uYgUKoEDctiBET#dHoe2#vC_tU zV#RZ-KcJ06puQ$?&+_{uSt_bG^Ug;*VEluW&i>))+lr7^J>%-YmkGeZmp$I@7HcM+ zn99IRzw=}Z-d|Ua0;ed6STn&+w&WEjOy4G0f8U2y;NQu~=~+5myK-jIF6eo{WL>_b z@_mD3w+EtU6_pP-LO;L4e9I{`juq#Orn_q9skUdKJ3rjLYFtE*0s6A99vx2e*8y$v zN=}Po`mwfMn69>byoy)yCGkC(-Qg&I@~tWn%1h3U~)enz;Y^ctzvhF|z1FmXbyBTO6g=aly?3!zSGFJnn z?rY#8U+O_W>+y1H?ZonSC0I^EugkToo4?v7b_DObdSd>uvCwQ^sqM+?s@FnkX?<#mViXq=e>#l#MH4Z*F*52 zJ|;N1GB6KKa%*-Oa3d>-M+R#=WlnlKl%+ix1e09pb*QxrR}&q2#=(JO`CASL8Z`vF zHF4YbVAT2T9nnBq>N6-rdd~UOSh4sKh6FNG49D4?WdNy59u{a&-FN##d`-vQSBfuV zeNR8@K^rF=NfQ_zeOX48zw{y~HigO%mR-tMU5>WAW1LK#{}MlgLrzS3-j#tf|A|ZR zT&_w}~i!&D+3v$&1d}S7?h9qoh3ovy9)yBSgx;4wb5uXI(E<1!kmDM1Hg-s^1)lAM9mF zQvDZ!a&S4?L)aPqD8%ODrVW(Ay59+MeF}CU;uLlq1v`Uzu=2@% z?>@ZBi=w>cDJ6ffkzYi$uTs$asocKr=nZyu<;nO@=L|iUy#+Kbvq{6c7#>uiJPng7 zR=#ADJ`Nf|o4JgX2e*H#Heydx?vlkJi2%FU?${ROk@ank)Zbm(&~x~F()XntI4SXA zSxqp*cNJ^-sEMrt2}!0{YygVauKENb5?M9FUhYC^2Qc-l1=0+7}uA6M9_%bn?W>+`@;-ALNRheR&xYGDM^@k3HtM#ME!Xqg!VTME&OG z2Pz`HA1{?v9En!~+o1;*c1*;sN2oQ%vh{NAjsIr>H1}lLF73!l5}UwnoimmE_eETy z7iLN7zLfly$+qE2s=vVb)d;ya|Jfsep$0ORjHGn5eK0Q;`U350!jovQLh~R3E+Canrm*aZ7_>Un7ZsX_p@laDSCrfSTR&+G ziN0_z5u!_exX371Ae5E9)wryqX}V5W@Of}?;{^XcyYY-b`QaWj3h95serekXeUlLT zK(1&kp1o)!XZQ5%SaX(+WuFbEH9I^XEg9?;vOnOuJ99JRdj5lG-@UkAGE&|7I|_~l zOYtQ9vL>P|#e}4%q3`^Z>{>0ouUjmh9?q}*vTi~QSo?at<(bGO-)>bjifX<} zfB||*q75I9?6+O&947!ur@}7ww?Q7O>wud@&Q8VlfWp9BA24nw~BP z9PLo=elsWcgmB7UIeOOWGXZ_1`cdP!7~(f?dQG$55=zI+PbYLi?MdV*^gO-2!_RaE zvHR?mV)HNiHhP;2Gk8W_Eh+bodT(U0k6m3Q7NXXeS0g2(3}%5FJs04BKrpe}=(r<+ zM7Uyu3M7BtLdU+@eqy!r7kJNyCgsbfN({>?3DyJEG>Gs)ALjPmMp zsrZIwMsP$1x<_YjG2El80hFJOIn~-Hv^#GyS-}4yPp~iVY08x`(Acvd+{mM`%33$C zCYFLv&~iINB_Ub8lraR$yJRC+AtNg!9l(kdvaqQpfY<-A6Xw-p%j z;_DlUNW<2>31QYhha&p$Nd1;Cb|sT00$f0|FX&?$eKN+ZD%SP3xP1PI_;4 z!%?N;@;h3ku~1hsN^Hj2n9*^&D?A<4UYi^donbJho*P&)hm+X8_&e;qY#Kqo z3niVB)BqS-u1)T@663N87S3c}Kn}0Ws40WhB3_V~F-t#O`EPmVY!27egjQ}*^amvp zC`QN;LOrNP*DQt}gB0Az3!Fy}glib_vK_*Ad1UlWRbgb;cujk|pi;dhl1gxRzK7lD z^?{%dJLF^Ypb6x}8JdN*kN?)@jn$?*J&{hk7y(Yp#{YeyP}Lc3jSbt8^jl73e95H4bhzqd6kTL!liBbNpVo_x@Uq%xwDG&_enDNpPnkz} zQO6-TT+`1JIK3gxe?jHVx%k9UKv=U#3)qREtWEnfO9cXLdKJ`4XHdN-9GY znv#%`!46d>KGM)_C8in?ik=9nhBkgTL^9|kAW&!(Nuj2Z=rzDZvSa1EVq%;XXlL2; zN!D})X|lb7Ub}?x*dFjwk^KE?LGoj7_Tcd`_GqQ@1Y7I3567YRj|KkgPiI@bxA`bM zS<#~EYkbHdG`1Re{-IRGD=(J)?Dr5HJjdGma21TH3TfIo`z&P1u^eQErZDfA$wc?k z?E_G{n{pmk;))HwI#%>9bz3&KJ@c#~xnd{B;Yah0t;4BeR|#Uv8sg*pWOpHyBmac& zHyyZ^U9Lp>Bk{s#2JLX2aO6#&UMOOlJ&(8NJ%eH5i-sTYQ|S;GoPF!^{k_54pXNmV zU?I9P6tFdeZ%1W*@qBfUfU^bVk^Jaoz2{~ymezKuRi4v|2CG{KNWzT+LjI7l0jp`$ zwDCJePQBP?Qkw*YE@3`I@|-OHvZxYOzhz5p2x&`VPP?+1ZSMT4-l#*s&T!OKF*6xp z%P~|twvPQ!!jt902rIta0+fhJifOayew0J{s3@^sE!iT*IPU3UPJe#7!i-Na&-^*G*p{bqw!;l~F{;$~Vm)Bj21Ty;8|O5%+Og{j^X;%NpeDm(>?WXKgJ`cHxz!@uZFacO5-Z^V+ z^RTl2;}=sI5kh6&c#PzIxvu8CcjpJ?W_JSwkM!rEcWr}EwI zN`EHB*|JcEkaLL?{aY`E${G-n)xhY7z1}F*Ek$8rqFXd@;OKBjUV2guKY<{0sCsbm z!FI75QRBj>EY(JiUIUY?{a@5y-wLGBW>+E3$?Soi1>MvoK{p>V9t+)Pl?P2+a^P5M zK5TzMT)TD*Bge-wQ?rjeky%FkRSAFnltZbG$gECXWzKBvkUC5ashnea1g}@E43|Jm zFf?3rnz72Ana!QZPT&?)%2mOt3_$R#X5-4hjWdW+3}F3a!e4dhM(S#e&F1tYI1UTY z7xj_@0Jd-U-)OWx`k0dwL%&fk?o1gwz)3A@fONJ%Wlh(3@&ZAGl138C`Kh*f)iD6i zZx)^@)fxbjm_6vD>`9;-8DR$BS8jO8bfu9paKM))>*@TiMi-QO-hg7l&5sG)#h*c27nb6Ksy`Og7=6ng9$pxcKslC#i7A6 zp23dGy`B$GIqbl|8Cf<{sXVN7xTohH)BGe_dMTwPdjy)FgZ{2Bc(#t5;;6lCRbljA^kX@Z`86hsO*B^4rfP&fEOlh5@#jZm89T z`Ccv0326S_t51D@*cJwFDiu6Z1DKxPD8}9+Wgb_qJbNx=&o&sXlrK*Ojx9MFOCgJM zfbd=ii{2YVr~3JEOO6{BKazCee2%GSkApYhJLBtA*}dWG%%93;P>jhflzozlc3 z=|#zc^R}Oj)tHKg@Ex6ZJ~NrB0Lh0(-x8VdIKMTXClx2@!4y#1z7{* zofufhX%Jc17@CIoEzQF*RUEc7zaq@M98qo#%Z&n3vsth@(24+OHH{=W%$)!i9T>LI-6M2Yf{ahz9rgDqGyi6Y_V{JoXM_n|Sp@ig z?ZrD@X^Rh$tR~@y23snV7?ykvkWBoSrV;1p?~j&)Y?QJwEMiR6mw z^D0OnZh;>q+IBjJ?rr@dlLI9|rHPs+iONB^#H5!m>k-=HBi|6$aM0NbN>uX%M}`n; z`HtsQ6a#gqgLQElh0@hc2R%QSzH1{pB1g3+AfMS2J zV$6$zCqaXH2h2Vbz3{yXsZcsS&<=e6<|f}KomoPZ{}xCaJ>w44KAl*hla^IZ;6gM! z!%?qklY0@ie!+Z)FmZr`{B}vRou9It_YR_$L9M4K$NhDS-`cAKzPLZ?vAXf(%79EQ z54Kn{wKpG{!w||NF`m$zCoo=^TUh2%xZnjYpesQ6D&rE2?=O=f)v{mYYzp(>EP-F* zQ*s9Uwew;vc;^1c(HFVs`rH&93-XSm&T9X)*2Wh%Wl|P($xgD@?H-HMK5j884mVT*$f(JQF^7uT=!KkqnTIHr%SO<@6mM?R zL-h1MnwBeIzwMIp@$mp*v^NiuEHvp$6?Vk)(H6Y^(fK3YO=SBIJnh@m2T%jq#@39{ zl#Yp0ny{`WM_85Uo>L|VlTwT%d2U{=$spuc98XZsx2SD1r2TwJ`-yA4hakA4nM7l{PhJ-P-yv0&=Fk_ML0LE^EKdL?nRfm%&aM?+o_0xwXQLRi^DDc)7-Z^o$+nZg~x6oBe+OTNf)I;hc2kOL6O^$SQGmrtxt6y=y*SvE3AyWTD2csoZiM27VBZB8F0Yt$*+G-rXDv% zrRe+u+*fR_SDe?PDPh~``_#X%q~QP(Lw~G0x+F=AG5dD^wLECX0~GmCkM2jqsIOfh zH9tff@P6@bmh-~fb59b6R|Wq>GF7N0PnWr!ix;37d-MZ2zYz}sOJ8!h_6Y)LD)<%I znqC{zj?|UB-DCyY<4hm2w;8xOgb@79eo_O?nc#P%ZaTiukl6B(^ILsf=W)m;9G{)` zj)Z?DnFWi$AqpNe9wOJ#*5E_xSX8Nind-6Mpuj&}VRO%$p8(y>*g< zot`2?ZzT|wan)^{wq$1A(_yTjL|wV`uJEU9xAx4t9{D;`B@n1!@lWK{m7^4DA{o8^ z{4#IXild%Dg`ssLty+<)!h3-PENIlcn7IO#i#;u`2(@5lZ{@9KJoeJ zs}6~Y3sk0zw-b<5j(v4^DzzRIbdKKM|4v;yFu-md0&xE~Bq6yXH}P;+@VT8Y1zIY+ zXrE!7(7YaQZ|c!VHhI~urRFAnJtpWG23~GR@>?xrBC4x$5^(u!`fk#*$!n-j0 z5r`9cJd8d5{su5}f_b11RZ7{OC3B8E0k=Ototae*+4BIH-W?D#55I!l6uz*Pm;?v- z{?n3Xvy{Z`0yo*wu#lKdAhmvYMKW&mkU9g@F@2uf0&Bbn-%!$e^Ag6H`>I-TW=39} zOE+|WrrI`z@nGw&cX11SqAx`u-8+I);kwr(ck)r~6Pj%<$gd6`WJ;J&`2kD?0> zo!fE+6{FlJ-+y;k1x%*{mVP$1XWc9oajf05pgJ5wN^EuB9IU;kAv9#rx%L$*a>h&J z8)C}`L~Ejlq(0HqiwCAMC`l=NlVqEDYs3*-n{dC^U($X~L+@8IwOz3?7lI0p@=lh$ z{dlQ|RoJ2PQ$5ghB81{$2Mr9BHB4ro{mAXVvq-a2MZ934<+RzKZnhu_#C=HNZ8nrm z_)3A#Ebw30xkg$^fOg{r%_-XX8LMt(0m;-{OkWimPfNgfIwENHuxrOU@DD8ie%)f> z7)%*#04>?^g|PFqqNC(tKFUat!BTwH!C+9gAmEg$Bto@j6kJ>Ucyc+(;K5&R+#HQ!pbMcmB2-%|u8xK6a-=|W3e?4L? z@&mth;J^JnOoqc*d}G43jM$COt=RL@+oBfYc=GO=BeyQ5{HmHc zb4ZyBN~tqs|E$zS*`Zgqw1nthOLPt%U|JaiK75zocc!?c)2iZsJVD1%s@#igI>aq5 z#W4;@mCAA7G;yD0S=%#lE9bE~4$FV67ApVwp8+ZUw$i7R$*hCX)@z1BLV8X6z3R>3YM75?m#FGU|N^aOgbJY-PvF2z<=9z)87wbKN1XNufp08_V4j{oX+jUef* zM`l7w%^zq|z`l>_U9g<>T{*hId7>pi1hu{V0LW2J`B8R>j#UHbD(0UdEaCgx4$p7s zL(3Fe_VrsV#*;XHg(X`n>-hKSmqwRo&vL1RtnpNmD`1u%@&UZN%@F~qktigE`x)ILz2G3r=J3S( z_`A`uZ{^dO6{MQWIs6pICVLvdZVL|ouwS^AK#%rmuK;HW3uwh2!i$u0zuB+@=)K9* zrN?2^^^59Vg8#48Eg)IK>}M@hRZYuXxV6iE7(Pd)x^td2;pGD2E2n9X@T0j9z|tP?b19N~D&D zPomfIzlNNyY}PBOUfwUH)Y01d7<+a9j(6*o1y9A~qblG(<`GQkDiauu7_V|0wWD;q zuxJgkYxgs41!!qr9BPe)fl4~QB40QTE>SNL@h27EzeM10h!aA0j?hpLZJNtRz-1g} z)ptz>>$kP&2IKgGjC~t7?T4T=>lBM}Ox5}5Vc_4B!9m3gEcJ>?luGzC!cTi9y_>_Q zoYF*<7Nm=zMWXYV*`#*Xf(9xf0!#IpIHlY4oyIrQ&UWq>L*gbR{k2LM^zBY1gqy<= z7&#e^^%=Y`1Jw}C`X&J(M$&ig9Ub|*ApGlxTJ;<0_FnXv!8GwOhU*#$+2(A6j=_ZL zK$pWnPBrh>VviXJG0t$u6#})|?-fDgMCJm$PN&NuynVcdVM3Uo;{n06LnHH_ zd1j^z(RDDVhf=N6mgdC)piS<%dQe%JZc0VBb?vNzRsSoiL|{^iYvO+8<|S=UZ&2b~ zdBzta7Sr@*9)C(rCMEdKVLbJ)eqnaNGb-dDLhkI78*fUz-L zzM}l6Qcm1^umqe4rn};%a!XvQY6X#)5bjw(E6E){EYOI4X&cU8V{*d_ph~FlNdTGG zxoKQDMI|vQbWB>jd5fF^{Mv72$q%ctw_A(5w#T~#kA;2}513J=rQA|Toy_sI=g}u# z1IzFI+=e_VnvKP?+?3A86hU+YBd^0%U!*na{H|1$IO#aS+H}qzjmdQ9nJZse5tFNf z5y!g`iABo{2_H5HvAR$em;-+t6`1O@e!arz>oC-FxEETO)K?JVJp=<3^xHIn1$$|S z88R~hAIAk9T==VmoA#U|)7IYw{1nqdgRcGiaDm(OURMP64_B@P&c$`*y_)r`(Txz2 zM#1UcUsM2oxY4>w@U$YH=VuijL`s$Kd$K;C)8|R0cvA;{<~1L)w)%+aBS!AbM9iIF zNe}@cb$HyKCJBB;=cMhzD_gW^s8BHiyZ*K#?@MIw4D44;h+J>LJs2Pnb7+k&kd`$Z zUOBM?zv{K9w!Ma_)j0XDjvfDH#vB#506R!v#E=zE=0V` z?aU2viV9i96alzFnuF}6yYK+L^SzA-mBQ^4?y3?QrQ53j=mMt49H*NhK0Xc?-0cUX zA}unstDWya$OE~g{bJ}Tb^Au(0diH!)Tez%2NMV$uEU9c`~GsAduMFiO- z`dQ@aSE$ewCRPh`K^nD~6{_FzQ=psA&|H!;V!!v%pE7(K!Cdy67if;O*&wQO_$9oI zP_$JT^(KW&HNiLGms#RrVi+vkU^}(r1Lb-}$U08$bDFYb+0_{=aQ-Gp%x`Nu=8P@CVX@h;A)?%O_vS$28kcyQOI(X(nEErCavCQ{>$Oo zW3R~jj4~homw&p6I&Z5-Tqvbh ztP=L*o=s;LEWzBdvXF|P#7h0mhkK_5c5II%GWq1z1Hy@#T{dXH+~W#2ujY;))V_T} zVco&sCF4@ynY^%|`%3IzOOK%JeiM1zfxNiWA!w59&tjRmKs>}a;_zo@HD>v&u6C5d zJpN6R6Ss8Wtk)?c-AtYd-a}hz=Vax|N>o_BA%4A&R)(&;B1Ji4Ois`89-_Z!vJAME zyeJX-`Wb@YL6Mjn#0kzrViBs3Fw?~hGWg}yJ!kjj&$g@tl6Rgs&2*tVO2eopaGiB_1jVYi_CJpLK)OzBWy(^)$K9mk~h{nwo6;;F^)$H z`gRPrNA`}pv3R;0j?t-%>nig|_T3gTt3M9>iny7TY=O_~BHm~Omc4=_HmScvNNJqnoW;N!A7OwvEfEycr2Q7# zkgTVORyW2ibn!7Ghlg00&uOicb;vfBn$oQ(bI&gNj~<&ZdzUbZGcuTvGGYYPNia^@ zLi0Eas~)Orl!N2NpMHAZdYCt>@J;u?>9N9XVK3j%aEc`)CZi4_4)_NREUVIlGwnTX zXwyFbzmHd&zqP8scoV8yMc;8YE&F=CfBR*qRfaj{_7~xGr+4sjMxnB8FjGJcpiko; zpaG9XQdPaf<%jE<$93=AsPD*+(j@T^z9IwVh6|az&O9AxzOOMVTE7&OH^%KA3vq?FaK-hqgZjEEd*f(SbEezdTJF@Nd(@9S{nNU-^@vYzm z-fcpO-PJk$7R;jK6`f{xOFU!P`2C8%Sx3|{<+83>ppe5c$<%qJ9Tj2DqGCP#wYi!w};8SU$JbtjqgGQ(`LN)pA+zF!!dnY04m z%0pMJZ4NhEcCDP(OAySGwJOf7{^;0;SQKRnElT%JYG7E33ITK%d1ZlQ3%FCb6lN1W zdFi-;np^c)uvrOKtGZP+^OU-ww3@&5uj5myT)$xwVdhzLX$s*NRhE-G)AqRmn{C_5 zE@xZG>f)f{+pObNtQFRa$;gt_mS!~c_N%F}mUEe=+>vl30M5}y01#B|d=^}!P&ra>v; z7*l`Sw~9x_`t~7Y|FdIOrLahQD$IhR;E5(Hf8P);gf>CTo_{ZWJdYIaK4Pvu$fMPP zuO3&!taX%q*-&6NU0(3&bJNF!LtlvfQ7pqLo{(tU&|XDWR3bT%mKO682aP`u0EVK> zCncN2aLX%FzVo!3s@vDon0aHoj{kBhI1(kEBO?9sXYD!#!WdM6D+lwjmw#*Vgz$|M zZm?tv($BB@ka+6(v?zr8{7x(zdhlj%uO!wB=IHm{BE-`XKN0THLx9!TcB{>-?{Fkl z_(4qxB)RU4B(!SWtxdoSgrdBAY??&nx=EArK_lkIoYQA&^d@6GBQqIxGQ6x&zhAB| zO~dj$a^XU08{w-w=WD(X9S;=(20qd!r+xkohZG3hICV~(WxG9boJJA&p!p5G@~mPN z2KKzYefEn^85dy>!nDGFiJlEkj*o7c9Cu5Y4}fZ+jub55Sv}Sup~O7NmX@o%JC|;O zJRxM>>y(7|IR2xiw01dZY_$~qUiu0l6PHYK;#9}FX_2J5G;1rQCB@#u*s&Dg_B=N^ zC3>|Y3$`yD%abJXYz&*mr8*+N*>EDGSkkgse`&_GPc6-VeMABA?=9aJ0@eDSj`}V(=m%Qy=Hn;4biWZCo_c%zD`N z-j%`764c(^yR<><2%LQHOs2+OJ=rO(A7_b%tKj{u0eyFe>LbUca;C3SNeyd2BPlQh zZ_!y%I+b6xi^i8I5C2^%LcBEA<%<$_#m5rOz)b)Z<@Tm6S4&ne?7ga1_WT*UDVbP6 z^C*@5eB6o1U3*@ce{myDDevQ8iEX*&rK!cQXA}8`UIJKGFnP7X9PIE~DLuNhTZW{6 zk<~;B0EcF!2KgoOK3Kxu#_gev*H6a{JkL%2S%ZF4XAH);5E=RoW|93_wJ73dA3@&! z(BjKxAkk91CYU*8!vfUT7(6>BJJ9Pkn8<1m*bUHCwqo!%H(|l9yD11SOLD8~sMW#f z>XelN5>uJpNVdx1hLzM=Kk-aXTnUq3&8#gTizFSUsJpCIZ99#DU=(*8w!PQYeuU%@ z1IIuTtDoF!t#2I+8N48;MV7%{g4;)K7|`0EyrY3W3VB@#V)p^TxmjP5Ijv>qu+*L5 z+wAH{f-*$$7f5;EA2*_4wq$chM~P$whQv@@zcO#v($YMJoJO8J5x2sJ3YYae4dyhV zPZpD5`@F_G-_mBxE|wE^0zV&4JN=CrA)rX*D2n+3$=lr>WkUqr_?FND*peip;}IFm zVZ9KfRw8qdpq* zXc<3Q3_ZqEPTu|d61hF_O`pQ(^ELM*AsJt<-_<@xJ@9jFu;Xp4*JW)H3dt>lUk|-W zcOwxfIbSJPoG|g4C z_9zS^?@YE)Z1PKNw70o%u+;Bjlkd{abr7{7hBm*Ro7&p6tuD^6DztWA8+mbopQ3BK z+v~Z+*XOl+7@y@EfFiOB_Rf!Q@6F~&*iyfVm{;Tx@SB)%DO3h{)As$d>u%Wc3_ZxY zn%IoreEpYZ1tRIy43t*8wzl^7oZ_{qb{5F(eII$?$0gdT_X9qC2`mue_{6oA=115B zY9HCp>?awcoLTj~ch*+k_a{L24P-U{GBAi~cmA&P8M9v|%p$8fz!J!Nq+*>?!=yo+3X&z+W5OWg{ctT}YyYU% zU?r2u+-WtPxb~2h?@^6nu^p-g3XUCfsyJ=_#xiRsJ(%NULNqEL9d zSW?<#Y5UOdUH-nlR6IeBZg9T)SXTmyxFWFu(qH;ymhhpO3Yy9 zBg8A_O3o|Ch*t?spC%k6P5zUhvT@LrQ!!H*@3EoP9%F*4XyUG8y8rFN$N3;i+`Qf^ z-=|{^U%s{ltRkN#aejX#ITAA&Az#TiwO^EDMn7x%D_tpIwU<-^`B+k^s9?OvdAZ=m zfnDdPaGi%JL#!W<@`r$@`aV3}Js}>u<=};vDB;Q_2Ne}oN4tTKIZYQiC%KS#Aqn_V zTw{I@s_|{x!N;=6vjYZdfNfeOQ=77Zt(E`203-si*+61*)h6u?8WA z>HK^f#=^8f8GqrFACV68n_>t!32k8fkPz^dGS98gKH$%ZMA!FtdXGET{%sXmx^n!8 z%QT%v^%h7Jlgm>G?T14^=RUvF=0+fBggA21&ElRWnod;`>mk(d4s=D|*HkP3>&M9J z|B1~m71m;a5!s^zQS+y!wZ1KqqFMQyv&6Z$Ij8H%|B}xVlB>H@z4d`ek*JN@8!U(wm_kA^6Dht<`f;<}Al=pFFJ8Zu!v> z{=$@|ifI45kgM`QA#B|bH3;Gi&9R|S+6=TVOA zr6$xV{aXX%SH@3T@ypG@QyggAa{D~2eRHV_;RU<^1-2J?%5SBDAl==>V-(5P47 zhc=20$bYua{XVXzNBQvfUai#W{$20TC+DAUk6H2Ig<)*ZvAx5WMzGTOV|uMuH?5FP zG~>=w+9^S=UH|dgBetbKK{3T?>sM!A*|oV6^N=oPb6d%SxHCEl;Kz4o{oTtO)T+eq ztFb;B+XJv0t0w5gzl-jAR`30*mT;4AtvTsvpWzS2E8!lzr~n=-J631>m|+*!!!_@1 z?q@cb*XmJU+s7@z4OzaUM6o>q9yqR(I^0$CcEfVnW5V?;U^n7U6{9))zHqu!uXR&6 zc}=E!w1A}E`cZfH&x||k;=zx5Q0Ptr1E(IH)DOODMv({ShmTdQty%nTMZlm@HG>%uW zaF6k+t}QY3J354um+0G9<7%g<{omG>se`9sq3h-}9hHOmz@NX&t16(i*TFEm9U;YQ zyw?2NDU{%6%}2D_!uC>$N@;Jp;oA>WUh`a@IS+P-RH=#+_3;LmS6>y*2797q>Ki6e zG=1l=V}2I$MW@kDR?okRAY)RY-i!eh|FWfmjbbklMX3Q;a|N3A} zby?QHBJM|Bd@W$+MD&8V;Ma92XFNSyGm+r|YGb$Ag%&X+s?VKD4f?d*b}CeO#iBw> z|}j7CYoZfv;6%GgqWugp91YtIUb@+AK8cx@k2{Y|nQ zI-jR*oXjPIp|W*SdP?4)AsD)x)UA8a@ z>U8zfrQ5kjUX@7K$ao11sEeLYCTvCXJogO1Zx3u{V)g(u{<8lusA*{mpl~Sp=Tsq$ zRrLs(D^#<%MgHDjq#_au2%>Q2KZgk^gBUdd&*mPDrz*Kg#ILLrzIxn49rKp|b2; z*VB~GYsX%x9|IXTIXnn)ww(oT|8+;b)FYaMYhj!7An!}P zXlu9gES?IB-CrV2p6Z`M2ocB?KjM(Pfb@S$ng`y-ruTm293xW2Na=CCY} zk;Nt_9o?Zc*rPvaj(GLOk1$4Fpfqa=E91bQPr!XVA@Ll7_XE!_e7Jl`8rg?wR0H=X zlGPeNy5KVDcNAzPe}TSAkAuxx=Vqj`-QVbIC1xrU-H19@8!9a!mYc}eZ8@>Ye@||c zcL?##YI^flBwjgR|1P(SDz0#(zuW>2GB^6^C;HGOixuh5`9p>q*()Z0Yo{C?pp2}C z=I}I^^XsF(_NceT*St>dET}9jvLE|H)wKQ$l2q3SrnAdckvU>^SGRwl7l9FRumD}B z?t!0xL3$!UDtgBz{=gYZ8h{>OJv)Im>6L9uB zO6XH+)b@xiD=Z+HhH?th%1TEM_s-bQtBl%eHbHtw`F4=s&?7JyXmNL2ZlL6FD^KxE zLPYHQML}smzFT7}_?Dk+AZ)>Tz#7%;8)ThH05D zMO=};_4G`jdhG>qveSK|-*b7FI?@(?#gLO=iIOVL%<7FZoF^Ed=~|mx@t8#mKKPDN zn@s1@g)f2&N0gr_U+gmnhnNSj$YxM}|DRbD0X=h4GuW`66DcYs;uDb-p_dRO^f{Yq zwrh9v%FLDASe-vS8b8=Wzrt{?N>*kzlax(CrSaqnjFa+4 zjz|9Ut6rtSJ&Dt2z}_9A2wvP?qu{0jj1Q;jtghzRXzKCI6}l2%e_6CDfi1RD@)eH1 zI8l`@EI|?=@9uZPoUgco?V6AYUD)dsC>E=$#Y=5x316DO>X0Tc#O{pKM69W4H!$QSGXJ+jIh?kiVx9xOy#m zyUkMInB)k`reL*#Fsl*JqX6>u_w`XJ5png;8acfCqJ|XZ!}6U87K2TA@IKPc%ZeLK z`QtU7%ECm+|CnD3VIQiDfoXm7C1$;M=ryu_{m`w-JzwI1Sk{!&7QfT^km@8!NFm<` zP4Ec#{BJD&Dg4r!Tm+zC2{XAJ8UNOcKPIj8@VjmLbP4zO4}>?+t(Iw6Ls=|_v^qpa zOTnj|BMbEIljQFvpYY;gqxiuO)9f9-H0ES1G8ZaEP{#Ff|j=SZbS~M=jfcNJYIN15Tglk zmOzjc)T4RFZ&U3R z(Gv$Oy&)y%@s~{b88c6LWx{fADwZ4TsrR*zRbeKy_Qf-gB%xK8!%ene~zZDEd{BU z4{sQq*xslLSz%|Gjz@N=dV>WwjLS5;a=q$uM*O?^qZ0iUIaukc{^pI$_((zBOKq8r zPg+MfDgvTDhDyD>t1zn^gr{O)X-3u&zdc}X5$ zd|j(bBM=VHQwH%fGnNTOVVyT!Uv90Q3DXzaj-XDCDuE4VYn&BPGWok#unpjTtk<>n z(kf!cOgkE%mB-o<y)TiH z+^~5@=O#eE!ogSD0PZoSR0E~zO;VZO2Y2tBj}^IZlIbS%D+707g<~#rXPXwjdg>b2 zJImb`@|b!~;?x!aLH1h&Q-%x)?>euy(`>rIPP@Z(W)v!;{#{PZU$L(H`H$!&A~Kik zC21oxlTFJ~7tSla+#@NA5yPyu@aw9H$`(G*5ftYlK;4YzMphy>SYwO~tJK2Ep*o$d zz2?YvBvx0>F5~7Ih0TfMb|$RpbEz!kYRViFmq8M;o1XYmnua&&4Hauh5?BOBN~E3ZTE5&pMXyV*2XF_>yqk#ssJ zY^4qJi~PqfYnSl=j`eE)+(Kv+PdNIP=8IfizsCc=7ILhGh5H-~dl`LoN>s7BlX&a5 z{yp2|J}(X5>L6@rPxzw%JF}|=rZB{<(G_cbrx>%TwVcA9BVAB8o>R*rfD#5 zab~@NuxsE_)r!A7m$PdF*bNC6O*cS<#8c%m4<_CwPg5`+|3wb2V5Mm${5&bM$b7;( zp$S`>+pehd5psp)b(NLp2F0&kI_;kDvUfv8TKc7_CE)gVP)Fq>Y`+M1cdokwMMQ1h z5cn>d!;&;ys94bEHz*}}buoX<>RNI+x2KS-^Z!VE>C?RmUK z=0r&-A}7$G>d{vzWN z$iD3PRsV_4$U&4TazlD}N&%2!*iA7w7rbj24$&EzWHe7_Y{g62Z+Lz)K##>qQ&g5A(v4WerX+ZMJHsqj-;tbs7s6ZiJTHWc2TEb6P;`Id2} zZ7oL)45|oDbck{}N_rNzcUPf$=qGbcrqW91h=&m`vB@GCcMly4tCeWC+SkVZKZhFny392~?oJ>y}aHjrb;l zI{)tiND$0iqZK>5wz}>VgrizX9a70FC1EdZTm8*6^V(9)`@5dgQ}fOQroS1T&f-+8 z`1!BdE^o%!=`Vb^bfR`I50uaw{ix|8`L9jHKd#KnFS_ca3;<6;{+F2{CZ}ZgtKBQT zgR&xJHwt#Q>PRgVp{|CNmx2BX++IpV-cNEX>n`e2P&}rJOxK=u2C^A`MZQ|m1oPV z3?V=zqFO42)#Y}WMVBRU{rAwI0Zn-=6$XoWD465R`)y=Ma*^jF{=4~qKigN?O@2>* zCJi&aT_p!lA1o}hmP5N@#l8U_BU}$8B_Y<3?R9cExVbu=lSi_Qr1SZ9|0TCpGi01+ z_F3;UZUqiceg;#n_dM9ZaAmR^y}gA%6!oDGB+_YvTPfB3veP^)E4j}85-PxdREEEr zH)H|hKZ}z^bqD?<1PI(7zAhvJj49(F2>hzo6X~lGIL{_d5!$#Q0-cxw%S$~&k7IfD zdZ@2;>^d@=qIE+XsaW=r!g#qlw-hSo7wbO=2_Q@y+-*ZoNUQ~d=1k4Y>Kj7ZD2=x- z|C^D2*agR4(I4OVE3hW`>E6j+b5o$j7w3~ExWy4-M7hqPS28m zO2?RdhtD5qbe?Up`uSo;tCwaqnz#`;|L=ZYtz*<+<54vZQNE zIHj5;VA{)3JfkNI;aWkRWGq0;d716uSbRK^R=wD#J|V_a;iNpBoQv}VyTJ&;{)OA# z0b`Mm7QNU;N!CAs&8eAr=P`D+c%Yp_kKq#ec+&+pNmn2~otI**b~C=ua%$89D~@qd zG^BC%VAG(FH_+G$(Z+ z*9ds480hrJXQZ$++)D%YvD~hRGT4huhiguT8fhRU*?QxVCQqP(L6xOP3dRNA;vGS$ z_PwN~sf1OLHd=MX|Sl_-AHgoaTrJ`-Uqio zFyDBCi@P*y4f1}9QiM)@@Auz~0))w3YS$1@3*l39Ac=(2Uu5Ou((F?)+rxG@h`#W!BHgq79BDPhN6GF^+ zj|^spBa-q=-z(=WLX*}5@!U~=Ps?FsICKx6h*%aOY3>ga%7sr$d{|o%TaM78xTV=t zkz!(JIN<|c<776A$5#?GiG$nkOHiHf^R?|-wg-gsM`VJ-R_*Uxyw$LPQM74D%BKlQ zFKhHU)zqo|W~vUlwkRv5llwriEzJu4G$V*3QUm&M!$_6fx*_jSRa*Hge*wmo$}P&t z;6!;U0Eu;%c8T0@?^xR5cYTrrY-XPdT6z!>v|_tV*q-nTt>cC-=G&y;=e5&b12m1Fy4?;JIjwS$L;$nuUXELvUNAswiq6mv(% z+=QN&ktyP$cg!BdR1$2*Eg=Jw5(W*KjR(L0p5BhY@k zWe<%{lEBT)KXv&YUMpgs z-AzS0c{Ag?9IFxJ1`qjrqNEH1!-ZOg$ORzd5#LKEFww!jP|9F4vH@{v1|YAmo_BQY zrcI7XJRSCmL1?x1U#_<`A`=Qis?Q*hli@~ejaSeF)7}*uL!kHtRaO0y@W-)`m?tw1`4ObpPp^?nh}Fd zV7t@!9axp*E{Saa%mA(AjzW_H$6djPk-8gJv*QEHmv^xa>Z~>Ngye|usr?JOsy1sm zX_)Y`{9gFx4pEc}-2BfAEcG4{I#B_`O@^*<65ne9S%c+O)*6r=3p)!a`m`0Z{Ck&Y#MW;9eOzyw|H z)9Z3Y#cS1v-s~R38Wj(pWK6*NXrUBC^^3hD13!aMYxvRzm6O1hD^)Ba?|TNR2%4^O zRt?&NOV>}vB^rS*Mv%MBwt!Gx3*zXdO6Jj#7sI@o32dg(hH65>u~Gfy32ls9`}B~V z1DkF}O5;6$yUBei0KYHkw#ym`UtY2RSrb4D4W{4;wZw7M!M5wotzLfS$qYF`9tNX2{WxjA6vilSIys$pb@EoU zg0+Fu;0tp5vh2fwcpD*3IA{NFOO=yig5%hfN4&#^@!I|<))&BEBEzHT3K#iONkh5 zHSHSUul{Gm$PkstUttT}yqUc^X^=nfAZmm3D!xi&f-?^Nc*Ac>2H6}6Tj!BYJ+iI9 zl5UG=8Ad_E|!Le0TgK>@dPC zsYGwQy5)4S=7FOMd)z4$OCI zd)m-lm{&=?xhF2_6KrLGFK<(&h-p-VTKVh}BB(MGG8;?C79pA(F{k~{1MFm4VHcfn zIp-&8-XNgj!R*V*1xwqHC0>Nf6YsQG(z=;Hb43R|F1|4kb&LLrtZYpn(Upno$wuX> z_rJdpFU0;`zY#F%s-p~WrGd+wk&0iKwya^8LdD!49^>s&0{rh&3wQ>~o&GM3VbY{o z=_Pgj)yYSBlcmLJb#b@Ms??vI-fHKo4^jqMxR|l9@e_C`;Tlg z$ki#+X0#f?M@+JnJUs#W@#?zVBNXF~qE7zjv|&+uV?%cFX?ep6iXHNR-TfYn?x+g) z2kT%b2fgppt7*B1dA8+@uHx<;#VVgJFX_(d!aVGXs5c)n*2sV!!g9TZp=6*ya2VCM zAT&Oi`pg6}YK`uEHe(%P^04*9idc@ACZCZW#KcgIckg*#j{6cFA`dOmt%HO5EX?#g zP6_*0$H@4$vb#B!p{X&D@&%Ad&73wNvw&m<+VOwP_^Q^rywQxa)g@~rO5n#UVmb>s z1>#|k-7ooq4_f!oAqS4&VDGS#v|YL4s$bl)X-7W0trY>~`VirtP3$e6-fj>G^s`@$n&TaXrq04jnvC|9fS&vEHvc6tdzb(IGYyEvsI5UMr`jJzbkn4 z5%&Uehd!cAHp+~0HfSQ)?QBZ4Y#WWE+aD;TuSy;Is;`9{uhcLslzQ7rZh@3>YHt3T zMOuF2cTcV;zBQyeQ}OlLi8HjQV6ddPlwHb)H{AqU!mY{yv{WEpgjFw8{>wYn~5!zvmS3Taabp1hBv?mC*?V+pk(Icq!J2=%R zZ}9#9ImKZoq7j28@~sQ|{c3izK6=rAfJMOFkgE7!qLa=~ME43zOiCMlF>*v})gTUU z^zw{Ve!*af!?c3iG?#|dvW;l%`3wf=!l5wQcfT9T563INk8P6Vt-5MA`rl&Zy1ULU zUA|b8l9I8C$gAXCy;PT>l0M7aRf))PdM%W7RvElg8t;Mv>!E-8-nL$ndOUjd$wPRl zG6?~Yz1r;Hbc8t^Y8;k~yZ(NcHb(_0`pC-Ms!s#oaCw}0)^Dw=pW_B!DNFHxpSQ1c z`)yMeO~R1C?rE*eQ~JS&m^Et99K6*)s`~1B#$N_awdfBa(~y&=o>0C@+yir%sAO}Z z?kM3E2ESS5#oNbs7N` zIbIiKwh-$TERlFogv6z&p^p+Je{fd+bdN@Y8!TzwfqI zNx-Yx{v&6arpJ11;h&R28yQ|?CCPM8k-wahf|ksQ45Sv7lvaX)IC<|{@VD$#_jC9g zi#PtLp*N2kBDCSank3NGv3R|h&xUjHX;>NbdcOM2wdOO2j-?Q{ntQHkA*xz(Ip@N1 z$K7UV<7C;hZ=KP5V~_OcET%Qi4RFZMOc?Ss&ln@O14-P3hPlCiyt{8jww}`@Uu^GJ zGtGR}WH?(9`~4`)(;eOft_Z8@1(BBmLe5GQ(MeRqE21>>EqlM>#uo2I{e;X_z=}^S zR$(4KeJA7WZudX^(qeV`B!pkw3VoafMfwpr&$e{8)^7H}T>fiJ%H>SGS*uQy$n*Tc7rYA;x$5gQcr~V1|6r$<|4k5tJY06WXVtAE z0?BMn-*@j;XXD=BF1S2N%U5BiP==hoYMxhltHV2Gx4`!AebxK7B%{pV5vAI$Si3TP zJ(y|dOl!FB*hSJMmchoyE9Gwnt5gm1Yx&#doy;Obg7(qt0XPk9#F_yT0~^$St?XjD zNR&VjVkHHaHBKjOiQhGzRC1y5&;Nr(q_5E(>eCWzHHyO+HrenefP1*C3LL~0%NfH6 z*CLBI4B&Yd7$Y<%xuC;q$Ee~A3QVqE>-DX#F}ontk!bM@T9Bg4IXK;3Da$$NEDl}a+XdIFG_}lH>Dfk zyX}t7QrJ4Xrj_Lqn{ui``6M*P|FneU1}ccbDHMHMdCx4(hR4EyJcsvqFn@gn{^JkO+HJlc|f`%S5nqS1t8>!C8tUt)RTZ4)qn z^gQ_}1$qhF8_fr-)ppO0L@g=3=gp@+-y)|h)1GFd56uG``~PI=i>0oq@=q@>Y>s?- z!PXOX<-VDJ8BMlM*$A3t`2@&~cOR@oflEg@HKARp5+eS;%TkQ!m)8v;M&Z!SS{m5L zVi2FS3XuR67*ZVhl`5zlawi#oTS>x_$H z$Lg^R)e13|B#TgMWbc=uN`siQpF#y(R1~JGk4I z#`H!AlH~RwKt{pv-wxHvn(Uhl-9sT=$wgyztE>3-b7Cb(W;l(Je@_hlutNFf0P(>h zBazTJ``Ch!#3A!Eck#dm*L$zWG4_7j z!TP@s|NeFx$oDB+UKeO41W@@J@Ok7c8J0DUIi>QbtO?>a!k)t&jHnv#9Zx$6^=cyCVI6n>{L?n)9Y$yOtk)s>RkfQ`<-+Cc1$o{$-pH> zNH zBwZ94mnJ~n`yeoqAtzS2k~30PeNM_ zi2WC^L9Ko%`{JM+`Z~?@mb=Up3Wq*t3Tm{RyGl<6lS_9gk=8Su?=<3#xPg6QM2}E% z55zE)Ue7Lf@@)>KQ|z_dg>~aaa_Q$#Dqb#Y@E+?wtj9hq22NVJOIhJ7KQJ>ENfnkJ znu~6{OmQvmEXPG4W`b@a-_SL$%1iS_S#ST6YaXp$yv)K!j>%hU z-uPyqUj@6^_;hG@lM`8+Z%YgWY20jtWoTz~QHMAAB`&0-(B3N9jU8b(Y;XpF9kJ`z zAw6SsqLtYP&$Qzc1T0l>C}&}+7=$1 zS5mJdK7CI6EWK@b__}w&>S%gm>Iy|xCi7bNHLAZUBzyb)*%x5wfGO+EZ#aQf**fBA zir`G@)H2ZM9_=uu&}#(a`j=|E%KYs&Y}?Y$yNSdH-ve8|KmpmX`Htd1dvK9tu7!hA+tYS3Qix&jA`#SlEF<+iEj4a3507E~_BR_t>{eUdTpI@T*FXj+j z-C?-yQ12o9tA7pzSJVC|6;XV8UGKJ0zQd-IV@P9|Kl$!lB&eb2oe6fU^zrRHH;$t! zpoiuLr6T{p)Av-pl7vcFPHP-cqJyqp!Zt(tWSTA-sfYhV=RV2|xlwZ!lOW zn`mUWcn-?9W=5i1zY4?#B1x=|25o-#x70C1A}ppB1Iq@AcY@t%X@A;jYeW8PErx)E zGp5v;;Z2x3}^%Z{077ua#vS-fVdPv$(YOGXB%gjBMZJl*zmcoEq`WR!V(dCeBf5-J_jn)1e$V z9}~7$u<>u3A+`_8vLgAsd!g}8 z#jR5<7(&t?o_ee8P4FP+Z5$c+q1+O(qgBl&aA*3n*H_VgZvM5`2g)lRGB$Q{?)Qzz7Kc_3di~A=)Vq)Y92KyqXR8c2#fkgSPR_ zZKtr-Ixe1={I`msK17U7ec13>1y~70?UOX>zTw~dPbD#9f;MKqR!c+72#e?O46a3M ztuDOc0_pBkD==W1Oa-E-&bC{nF9Ha;ABOf_iSqe4TX-G>o=X2Cd`x?LGDp5BuToS0 zmcIBQaUX*Yi`*=Ra#e&{To-V{7Ig1l#M=_fXyQ;n^=2ShM&-%Gd@vDL8Z@`5jqbgk z;`qknI;y?w!9^KJELR$VEz)pAR!X4&ao2=JDfqP9if*WRPFCh9iYL6yu@Wtb z(SOhI+BwukWTl?4NN(c{%5qQYyV>4|nT%$>ZxP{fmJ9~|qpQ3W)==rV^5+noHv zw>(y)eZI97dSg2?Wpx_nnzGdVeGzx)0QNIjR+Hh`_k@dX@xkBFuj`fkK?YtHS)b9i zEx>zZ3Z62Yyy{_I%W#>U&-}q#n)*AZKl()ThJkYR3})Zww((~8z~ngo(X|J zH0oS|8#o@4(@x98=ctQN__lOU=EO9asG;JCFL1q8)O`FPSBXNw-qyyB=cvn``->e< z^y(i+=-WxV=0mJg6-x*&aT}`tL1a{vl1pkCPidU!fx^x|ZT|A(OJR-ro97gfy7r*dPS43T)K&m81{saoP+)D7PaZ)?g zyF5>*2Q+S5(qw8^6(J-ygM%CSi29#?4r3!oIubfk*Mdfh)`OT=Uevt)J9mCD_aD2c zjA(Hg3{a`e`H=+#kc{7O|Fm>FEI%InU^Kx^Eq}bh2+4AUi*Egw7eDuMCUAy4K|7bv7iUzUCny_t2%vGMH#@jG z30v1q8|6{71>$;li1C^9P58?p$dkpzU!*kq*0(jeN@-FbFJ)+oE`Pmpc<@I&JcFGc zW-W8c|ASDX3s>Z2;VJs>oV@R&N}ll?tQ~ylo-#)@i^S)}!{|=9JL%;`!fQ3A;zHF5 znPQBU)rPgqMYhUqQ{*nJZk;-@wyiJ3?@!17;b|6sGkkWJYNyLgDft$L!xRS6m~U%D zR$!KDw@&IXjs)GGln`L}dPgafUspV$yM;{}qcCM4Y%q8B!(?X}H&isZKrgistUI0A zFs+GQ5wPI*p)R^66#4qO@YU#02C%1SVBMQ1f1khiN~^%3J#KsYB;@4$eX#Oujkp>_S;ceMz*UL;zu_e%IW`F3e{r3?Wp=XJzkKQRb z(>uk$;*kk)Qmel(AmE+r@L+zh?|MS#;t>R#<*hpHg zbIU2JDDZxoF;fq%ZpfHuA%z%)m%MVvt**B9;?7CB-hJ&Roe67Wgnc(shCiRh{B9Yo*KveT_@M)gM1LR~D4QU76BU6Nr60{Rn=gf! zxt5Vmi0m<(@_%YbH{x~&fcPm6oD;=y!6L(x3ICpwi8EQd3Icv2fvPCa4fZpI6ilHk zG5L@KIQ7g_p?DdD@4aDFsT0KLtEZ5QEjsc7yCDn_DQ$8J`8S1pALYO+I5A`&JlMxi z7gVdbE9@5-W56EJbVkXysGbd2=RAr%N;<>U2!Z)Qn3)#uU}2lIzZDQH8) zPQi;2_ktIQcxr%^tiRw4I7sGb&vG-$$g^@1qwHcJG0(*=-KBkey}RUme?^Ye^fff} zya+)b-gjn48S57T#ehvm$^0 zrJ~bo94Xic#HkISXR-0Ss_^B1i1$0+G|&MQyDc$_OO&$m|EduY36rhN7WbY!Xe{tL zwq0t)6b#*brwrLg>qN-*f3y(~^=u-v96NLx#1PRb0=?}+qnw*u~#Kt;7p-3rOHv9<)rC~Y}V`7D}sDXc)LuR)w9Kkr`c!nQCov` zF_KW%n%&be(aLgp1qo5`U=OO%Puf6;B@%A zdPJ%@QscScPa8?4f9^_vg@NXdiOoxZr?)5bRT=cSxe09GV(3ZjnR@G@#lWA49HC<~ zVGUt%w6`00>UsZVSCo$3%8x%f;v)9L-J^7J5y?8Dku!InAic-y+#lul*kn2gR7=mW zX~q^o?QH;k&(26kkv?{K?VL-!$3Q%;2r73)Hp07~`_AZg8xF-hO9t=+t7t*^0iK(= zIL5!#CWKwJno8zFjo-vjwn@p{kr&fToP!s|5^bE{jo@KNzg5m?<5PJ&d+yPli9vuf zpwNJFT5ZGpRRNtfba>EcP9`bv2NIuG)S7_*8Z1YJgLGBEkP{H(A1X_@;BSnc3A!=c zHG%SMQ~A;9(iH|FpS@<^JDf%leR{l7?oWocp0Kn&?c)$wd^Cz;Sa75U*F$(i!qN1Jg5fE;Obn?;=){1;*p*zz(BJ9hT}y& zV)L%rG)j)206WG)2wB&e9Y0%5II0eCcMk<5WlK3bJ!(AJg`ACpmU3U<)t+-Mgo3*D6uOKzw?Sq?j1`xsViw! zcai6Ne0+JR&bB#ttmu*Ov&;BPQwx$`;_QY1F6`Ru3q(hPKHY}Q=V?oS*M+}al z(5(Sdz3jYD-4Y^h72HEU?S0(kuVU$p;!a4Vv8R;34b_9DL`U*aX9*9)Jva@2Nr=@$ zYtpJ|g598SQhNu7K)+{Uc>&FITmS}!p`zw%aV~=771=n^wkOIz!2dboltSPPoOfQO z$7I^YrU!yL-X-hb9DCcgHjUxrZEoGZ5~&p|USk5r45cL(ZbzB;?FdOZ+*gfWCVLfm znAiC0@9KH&!#*m&KV6aw!y+({m^xb0EV9#q+;m?7EjL0X?{RRzaBc)qIAz2;O^B5YV0Ca6iYAaE%)!ppz`n^nwrb1z0yl0*IXPU&cvL?jcx0HIcz2}jTb%Iig&o5Pje?)K) z^QyHEW4rV^?yw@w2D#Ztv5$&PTM~=&MDZ!({nAWYCb+HHW#sPpD$Nfq*hT3N5Qa$R zJHY-x7M&LMDXsB@u{k?SW5GTka)l2$j4Z>z$+~mdU|_$NyhVG}p!=}GU2mvkj}X1K z7cQ@o^ujUf$bXwM!Su*pfYyyvGn+B&$JC7tnh1Z$3$rzx^*`*~9~BQjKi9vzCw(wJ zz1dUAdLa{_4O`I?!22V~lOOw+y$0{d1lfI8e_Owr2QoGq6m{`byd)cRBJ$K(F_Xcd z-P=2!9{qJAKeW#0Nggzs1T}*UVb-x^^VMNqPXs=j=EAk{Ng^uiioD@h97?bdxWbP& z!f%EjYF@TyyPdih6G}hzzt;QkI&rk(m#-0w$fD^@SSmtb>0v?F?vnIm<7+umxtYG^ z3I<+6jQNoyg_fwHX*7^d|2yyTeF){&q!wY(b@H0H6l+#PXWx_+^fh5WjxlQtB}h#` zpOhj)cMLo|dJDolSsYH6zb(K4k38n%Aa`@X1wYvt_v*cLk3e@SWMmW3O&zg&(0> zvh6Rvi#!WGJLsId$>H;|1VU=EXs5tk{=~xI`m95@JhT%d?#S(H8Ux_ zujHu)Os??+Zw;1x%v<>Oe!dVg6)N>vXMu@1?AzW`8A4@t)R5`&UIDwwN$Cq^Im#rD zCm~4L-a+kL2fEU=$XBPdeO;RC5!=sAIZCH3;8}UZ5lAS(_b>6$HiU)8b}-dHNpS8k zawpPLDWr2q!**Rb;V#@>uh@0vTYic@IH%=F?oGO)CAbge-B8oi!a8q4geit(1#T}S zJCUps0bCix=5If}Yd6K{zGX3MM)6bqeE=s%P@}@`dsb_oh#xE8Okr{g$7Mm}s(>TU zGKf-z2HjF`mAh7bw*VYQaHYII#>^o--Y>|$be*?ibtR7B9i@pv6GI{HPapl84I4;% z{=kDMuasBSrAMD|wU{8m@1jD*R@-u$dw8ROp|PLw5Ah zZPGX@?4gll9*W_`1So{|G;r{Z!!W3rSV$zx31<}8vBzDa$A%nD4ndWbfY*!*AtOBz z8hP8hXHreh(or$G3oigR!ZryhpSc}kI|SX++1-c~X}FOHD3%n%L^kd1SEwjW!5iFh z)Mw<*4GYTEuhtO(eA^pPz{cA1<#G)n}=v_+_?TRC$b zaK^Jveb)&>lMF4IC{@rv4_|8Ut3O&GqKW7e2H`wYu9TIoAbiv;W>V~KMOUwk1F(8$ zuEvj~1GDoV9nE4<%}i7BrNo50FVmRi?Ps8@OQfQMBkx?2nM1N^H@XeQ#+Niafs%MB zdf>2+vXT2^`=n;Eu?M1xpV1S-d3O?LCCc)TP#1P7@)I!eubw0u$(QwvwmzUgEAX&sQ`_HTOU>izG)TON3Q=-S$SNEyY{l(yc(6pY-B^)Lt1 z5)R6$05FuY5oB~0n*MgQZqUaH#B$4HLq`klRXjZ&-1*<@g2VHUq;t5NdM~wVR$>f) z3;|f%D6?EHnkXnQg&PJK1vGn)>}u_$|?!Vp0yW zKeMcDkCFZ+81DdlM`(g1F#+M`VFxC~WCgG4p{GAw?R%{0Tmn(H4M?s67!-pdiddWp z{Wq{^KrXe7Tu^a-Js-igm!wH4mZy6q4=gniVix$udlJL9g2_8VASMZA;>~TgKb63x z9PL>c;gBq4!S)|KA@iT7e08$bI?tFX_$ebO&GwtxKc?7jpGqLKedInz?|RlEw?R0K8TfAHgRLRrv#aGg3tDn&K>c_Z52J3SUJBFWi;hJyYTGNI zRt?v|JEz|%aFSnn*oI$rq1;q1P`P;M@{-vSPTMx^YnPHoaiFlg4emmJk&rVzzYuT! z;?icySsf9Hpb?pC3T%FTsXK{2Ve-L0HD#vcz-Z0mZ)odB`#GTG2QQn6cQoVaA5Fbp zSGwOa?vU`{2jKY~reEzzS`lV!zkIH=D;RaUL< z`U}Cozp=G3A@qJ0CCwoVKss<8Xh$CE&cn936wfygOi65gOA@jduNclc#I^{m6Bo*; z&(>k_S%>lrA3lyoLe=FAF2h52l(BNleWc1ln?H%a@$lzySDsVAQUNhn+>Q8gNr^gx zMR&L)8Z0V47EJ(tik)jqjO?C)I`cpzAnY z_krMAh%v<@M1N(G^j&#;mx`ZyQrJqCokkq4F zzT9Pz^Ma&76iM7=W#dENhTf01lZ%%M1dEEiTN){Ht8nwRdU1nH#*?~a1YPREUu2d2 z`FChlDntSeT)C5!Yrf-bo~-iIJ%dXcu;L~hI9&O3#0}35Diw%`G`usg6mT>Ctcu*% zZR%r`(!8DihX@|o!l(3|xxN&goyuQXi!W!VSSHn9g zWu6tkw_blLkLY~!i^4JV@p(%7Q=d2QBH+SsN&weIwpJ4MLs7PMj4@t{Z!yZT{HioCs z69CO&K>1Mez8XT3TcFCofV?c95jkX$OHf22H&-Lt?@GwlOgx|G@lt1q6gBV>U%5NX z+x_Bcn}0N`-1y0`7AAL1eu#$AB?=<*vX>Xm$TQ;38p2eiPFsAL?VbJgSGp(HsR(g% zq=M~yxM38+_R>phxK#Vzg(Xk&bpY360FMzHFzkRje@X@{V%ie9JO+KDb4GBt)|R*3 zd1k;j>jfT-@WNLv59B~xTM}9hkBgC*ES8Q{M#J=(q&YoT1qKi2mO8RgD~M!)e3kO} z9MP))TuIb48T>Sb*i*0ULT;kI9j5z!Bo{DA;4+;^6yi%#_?zeHBO#QLp1~3PpI_#b z=PL(+^FaFxvD-k*3lee!77o=kJ&DgM;8l6sW-}pGJ{UyyK2Wp>gpb$5D6uG`30Kp#!;R|D@Gu~`7 zgSnAr|F$TB;uC@2p`Lr`JttR6|Jc_jP7;sq9OOPK&&!(&n(5HAY% zdk}sxmcVodPc(M})%}2pp=kr;6tWDud^vec<17!FaJNG5ViBj7(Qg-0*%Kq4aw6p& zWdMLSQXH%aj~d9OA*wRP^EYm|IkV5r+I)wLRGq5PemB4+?0 z3%k&HJhVDaDqKO%mJ~qw(TTV{WW;x2gV5v9af}Rdx7@3 z6S1j>iIXo`C~NNHnN=%b*HQ?j+qHZQ3aHu|SXOYk+LjnUar(E?cVg5*=35rMuwpWO zl&V-RMJf@IQL6R{xxi<7R$mW*Km8DG9tBAf``~>R-TxQ~TyTDCzNb3}?C<1T13?s!*AX)C`l?3% z9ER{&OpU_S!wr-svBeSsuj7GdavIdMbf{nEpxHr@H|;Pv}B>^ zGZTU^wmSsga1`|?nZq_mq#mwkxyTPe&sa>r>cJVJ+N3vzneS{l7dNr5Mu_Of(DtD- zsax^YOtnnF_!c=Cmfmoc$!z5WN=<+L2)}6$cY!X@fd7 zuC>zra7tXCxVjaul5(-|{rF~8ga{oe}A*#aJ1y}GTC>YVbPoIS$* zd8}&~EWgsWK{R$)8rLjM;3`HKI7TxWU}Jbkm(viEFYM-h=dQ1>GDOY<3;=Rs5v5r+ z$lEg7?;=Km@tSJDBQ?N3x}%ZFR$_DIRGhTf9MGO;fL$-8XueHB(0Cj?+|WcKUOHc0 zr**RJ+!IwuR>BDXIq3tAXB;ilku{`vkf3G<(Uo#v&xfKc8Iw&W^lIEYTJX7aI==9i z{yv;wc>R(jz;ke^jOhI|R$<9i?u$-6NjODUs7LG-$m^9*!4A|b94zTkW9hXiL~ld- z)#Sw!hFx+M$gzDc8zKC+XUJSKsoVOl_Om;d=g-X+sFo3z{hHv<8kY{Vt>7o-nCF9Q zAMP(qWZkQ3AE^Io^w44a0i~Am2gkeZ4v0|uB?au9(+xQ`qcC6>Ya2N8rkEpU7073&ZkJ&{CU9Sfj3ejYVa%DT6%he9PfmCbt^{oKyxPgbT)5VAV}8X1mas4NmgqMdCPiZKd>{Yb zU#0uT@1<$PCO1-g5%swGJO|3x8l6%2V^P&-#fKr<7=B5vJ00%rRSN^%%HuR zGxN^`y26xpSG$FJ?B{8J@XM1vzA6~tDMR#6+Ntu~EWlZYrD^eIIH~9$@5aTqXMr9J zlK)|i{Rdb`KA)=6dNs4Q<|dApOCf*q&_c6!KQx4t7{B)Xi`*YMKDBDiLpi)YPupN(^3detKK zKL$$mjc>k`?IBLNeRT`|fA{9RsFyi?n8RM)P$e*q@=0@pUquK|=TadW<#O08K6@1? z<%^b#Q4A5gA=7+?fr zOzNdVd;ZSu1jQBGqf_5-oMk{dfunw<@6LlmXyK$5;NYU(m2{?NFJ1wXg?|YeqkG}= zrw*-Q5pPZh=6wT^gFDF?TrC1DQMnQ>JdJ-ZF#CPQ?S;tk%O2dSxKIeZ4KCJMK;-)7 zTJkCOEESLIBV!K>blCOT?-?~v6JBBYcIa1}kHHd5R#hiGVNT7Gy-((8b+IvN_I!gE zf(gwx=Q+}lFX=?3dm`Q?ruF*ehFhv*#}z9(57-$liivOpfY1rr1&u&IlhD1M%`yA% zxEAMhu0R651Wk6lY(%)6@HrB{qe9aaA49M6ylNYM$8B=5bgEP0vszGM7ESQ{4`v8I+|< z;pb28ERc>ywA%5N80ULgW0q8aYTN$zRu6nO%-z0hVcPs|$mfZ5K3hU?fNC>I$Lj%j zabY*?F#mG%Rl7dVb+pXvl@K#0`^SKmHNcsnf32bC7W;QREOL)Z@+nd;*s3XG6(!B2 zV~pYY7CuUv_76U<4Fn#;x>bgmGk`S9%MEJ4M8x`}c-{grgGyx?_b5lC#>Xj9Vb4_E zqFdRR-o;s>s^~f|TWX$Kirvdq^v4AS1}&SG?n0>VCYr?bUvSNwi*Mz6?L9(U=%b7P zh1|qH6Jyd_b~^vu9?$JAS!zt`u}5t{&WsN~kKqzpz&m`upJ{kaGUG9f+nk+9d>=#P zpc--pU6(nnnl6+277e}R9HT)6kF-J0P_>_w0+&xpjO8``@4O2t3pwT$Pt`# zGr{3rM;`jgZv${(d2&}ByRL=4-FQDJHLj7H%6i3zy+%WCQoU;(@JXoG$Q%)MeP2L| zI#G?a{%w(#HiB;9A;wyX-Q4hF8+ut!NDpKBOiT23|3#F`cgrynmKo?(egqcu4h<9X z5`B{yd7+#0MNI%%{!3&%j3AB{)95#bzkN*TygAn-{nw$Au|`flYT%Nha-T*a{L%X9 ziuLExs!nWQ%@}stPnM7#74d<1O*VuJdyxOqI2*4~f|w~8lIQ*585U!sb4kA=8q%Op z&c_5*Q`*R_cyk*0`xQKK(DOb2$z`#N|7PxR;`n}MkBHk5RVh#VYk3yz8PB(%2Y$ys zZu~Pq9q9CPqKiOAZpbV67=Nju(P~p=?d7T=hBp>Niu!SPm{Q0x4AJD~uRccV$1sIs zK-t}cLqB7s1hL~%vSvA06wsw|&S&ql-AJ+HH?w2NJOd{!MGJZx`&3FQ%9v1%SD#Rg z|0%_D>^{(hPTF>ykfcG#7SFWc6$5VZvyUm zx86V8RiY|dbtST7YQR4a&%-lLUPMD~^+y(ITiz5M;wml~9U$;>DB%MYVx2ca250@);TqE~ASJTJ#ed$4aqOM;VvZ5>%tTLh zy0qW56)F26i%vRkJ{tlF|LiMYY25%nrJpI-Agdy6dsqnmdT2s*s$}wOZ?$nj;>cRa zRK>bqT$Kg=sWf*#7ZBmk7dF9d2B)sRpts`S2i=kNj%y0YT!-pKpAjt0m+~{1=5~;A z8&k+_rSA)n@^4&uF9;UMByX{=_kLb_PMY@gWp|>P+&evIV)m@@IFWtpFY}OI=zUnj zBy^U{OdoQp`l&yDbJ&$lasrldMZ;MMjGh5NVdmZ1E+?}6o*ZJM{wB9y54$WpF zHBq21A#ar%ZkKAo>y8f6tSgJ#6ni5!SF}7X5r%g`{u_mfze+&yQ?Ccb^cWciP4s>) zeu=rI0@BT1Krw$T<7*qgUEPL{eMuCJb0gk(ItuRRvxG+<@kQIM58GU*AH!OetyjVg zfiJpPI=X5(FkaDb;QoGZ8MmbC@3a3LYZiY#m}vqk5rpFY24-oucGW@LIEt#4Au9N* zjOor6Hw)+>@fae1ytSXM_jFV?U`me2j6fmYeTDzF1~FQ4>io|B>9~T_QvA6C^$>0lqS?ND zOIeg@3J@QlUODU81_t)ONx2u3n<$(EwIB19!KB9>-}P4pgIxP3swwK1hcauRZ>!0F z*7)Bmm43mi_v4J8cP}jvcNI3{-mQl~frVqRffZM(W6x50;qpAC#JEMPpM~uhTH7q) zl}Q}RWMJE-8gaUHUqO#y@KTD6kevmnuBE8pJC3qI4w?)lYH1oCtT8brCzN{|{Zu;F zwyj&KPe1_F0q1{gQ+amvhh^P^)h#ABz2_A?$rX(z$K^=qbd*$RJ~q}rW;CBvV0?)h zW8~bOXO_|$^__R(?OJ`toapkvCV*sqhPsk*9e;6>u`pClQv!O7o^K$li-$jbnK@XB z^k&a@AN}rIfjovSmg7fu$K4J0KQhZY22Db1A@~Yr4LG(QkMweOjVUZhS9*=y!AzWu z@1Bel_Sdy2do0%i8%cBuO-JC$5%H`7z4wGMFUc{deILm19nh_2Iw0pbzHF#Ca-B4kOCm(Z}E?Db|$sjx{39*R)AjT;`)+#KWKMmWAoELL{0j zcJH8@vWDQZ3P@$24V<%h{b!23+ecoKp#!mPFRVYsgu99Qs?)7B+et0wPVaDs<>nH)`Ure)6lT?5mR9M(HH|wot1GI~?Ibj~Rj<3BvZw5nhrX5$d_cv$4G3pM%UdH=MD*dVy_Pfb8cTZTHd@m`Qg zErWrh;gmPW-8AfM zj9UUwq61rkZ0B&DqReC+(5tL;3`?7+Xg4N#Bo3IvuZw)iH?3*qQ$wk4IF^a+j)d-> z)&>Okg81vht9EbwtU1h`B25ihwQMpmus;>$9Rk3IRLuyC=o$C3c^qe@S9W=?S&7#c zO(})&aOq;_k?f~2F$~S4A{@Wv?eM)%1Z{3Xq;c*@y%znztaRmu75(Kx8?qSEgM{kGzl zO-*m+{AqKr_qk!xlJ;jjs<7Z68=2)Te)-D?9KDv*?oMEiT(9Wzw~MY_!|1yW0;Ki( zVUvH(JKp>^8ss-oLuv7+3E6rI&4{2%)H8-~AfX@Y=A?O3``9WNO-5xVoA;hwoPrdm zydJj;7D?Raem1?B-C_6o@Wr)X@=ab#mheQDJ#CH*nTe=YqWDPuWtx*9(#Q84;;Ia# zNH6TC6>HQ5e4!70URcnkVJm;>djcF?s>|m@U6rTiP>0sDMXskWmXelz@j!r zvfq!i!4D%fBKn!@$?ov}Jxi@KBO39V0>)&z)ELdY1{7rWhI=v*tXpN_o~yJrO%lJK zoxQmEa27&$nn12NGcF%VrDiB|W5PZ@u13=F0ll0Ax>6H^NKKo}Z4OotD z0aHC>*3k3hPliTXi*{^aCV8rbx7*{9I?-E*efiD^5e84o;DI+>G*Y!10Rg^a>Du~rW^%sLZSKq$X@z^>X!e4WVQ5PS-KDjD#P%?%EJFIG9tcK>@6GoAH<{Kn|~VUC#4 z`I~z^sdrnNXg*`MsSj3<-26WOsps8zeY|N{xVOT-JF>oe?m43l#&fbeD7G`^J^htJ zfmH_{gz8uV5^lGDM)vbyu$?Q$oG;#|6UIt>wztqEL}6T%yrp@RMFcVD|DyV&(r=7I zXOWZ=^+A^?DmddcDYKyZ@Ng96j$PpKMmtJ7zO5g`)l+1Z68)*b;Voa}SSr=aDK&p) z{9*r#;gfRNB%0J~t;^1jPkyCJ&jTKpr@_%5W%_ES`SV(KDSKszBbC7C?Mqt% zq-ib;@HD4lsStAeb%^RQG}=(W>Q@C8Z4rU=dWP2eZguzfpOIPN4N{C#|73h;Kik~v zfip0p<;;0Kg^P*ep-kWF1O`vCJxs{TNJWT0j7g=Yv}C1>0vgE2*rDiG*0#N|8aDuq z)MWNUxhq+*Cjluc9Kus%ztK5(-7{UcNAAx0b~>Ir*Z7>S4%o-=#cYU|}-!+Bi>Ye1;p1 zQh)eUkM-;0-~mbowO}O&Ui?+m^x!|UUwBONa?SN?3AVdliK1_O+}z**!#fJC%cUa& z<9qr`4mW)UYGX=ziir$;febf_tS18wL{P+zNXXb{lV9oE!QbRo^d(b3@OH1vGpVW) z6#Zrc#REReSCvEAtD|NTFdo;X1BT@i>l$(fx-MA z%w|9s6XHe+5p;J+9SD4eZo7}ywQ}8QvjuCO?uo68IPWWEa}1Hx-&T9u<>rbXa+bU< zRE6sau7d;y&w6~yb!V`TLa8ij!yf3$7?W0ifsQAP`yc-&0h&7)XQs21U))qM6?OQ2 zA8@mf5Qwj~U5Dj(Wiq^%n9t@~XTG*#hVK84`kj7<>BQcL93y0VfY|6!Xp-S}(#Q1h zejgc`To6~v%#*TMrc*tXy2QBE`{7eg!z7v`_Me)|l699dKeJ*&7M=hl#{4jIWABi` z50G@IpXZ65$;gK3)3&q>9h*E5M90(rAWR&9;}l-Wlp|jlFr=09Yb~|jNEKw%p0OY~ zn_{NodGx~dgQ%^-oZnS=sFjWlp+wipH^^B`%2Jw2|8nrA3<#M0c$fH$XaZaQF10ig zRp)NHr2Ubn#fj{&|9U#X=pRw%^%UkxcZWPsgImyA6|}kbjCOeXuT8_LADvY@5{_8hFH~9?Zp2V)lH^a%!Cp1VRDBKN==Z?r5)X~E=lTJ5jJJ^(k|)IhlV>* zB(I5dUJrQcJ@-wstLzuPed}XYve{l4NM-Qsl)g0oQWJ40M|iNUlstq57xm`vMW*+4 zf>6piL+{2x$G%mcnPLxYtWl8XiiSy?>R!R_0)N*-&QyF)wlJF+k^7pd(+kK{bnZ_PF zX2sXQjbX_~IUFbfmHhGo-|b@|tT)wh%5U2a&Se+{5;PYgD4_y%A3Aw z$)1E%RwXzZ8Nr#63ZzS($}v>S_>3($IXK;Pc&B_!(y?n3k*;9KqOgG=Gy>)6mCSv& zvgV^?7Qv2u(E9ud(=#YulWv#exj|$`8wef@zpRHcxOXY@Nb&yVejPRlrGWf#)0F!&gLkbrY zX9qQu@ZgRfKs;z5bLQPFS7cKHL^%%$Lw-7X?-pDKDeu(-K=9ctMN7u}w=Fsxg?6&d zDT|K3nHTaHO=!NAyyG*7^b~=W1a~phth9Lji+>?J5gIG^%F*Sm$M<41c1&uKvZ& znwN84`?R@LI`ll-kO;?ozT*Y;jLlJ01#`H`?GG*5RKFZ_#OOB&MPjB zhh1?&1@Blk9SAt58hpYebLHs)owzI)X%dA3qTbz(s`bRlVLhW8)-f;5&_wt0JeO8` zu0{a+APTJgtm)R1XRhOwz}^;sBwVm$y>~Hi8ydSvD5b!o%`uN6e(a>7G>jN=a>kw^ zInux09M7mkg->!bM_nRJN;m%5r;BuHjYY3*2>6JdlnlB3q;^CXltsTfyirvFs29YUh{vLAE<8 zOxnqJQ}I$l6(1Y?{|k>nUOazC%4pqV1S#ZsK>(iL%agk*F$x-RQQbmiN#7|9knGFK zJXK3}TC)MFvWwlO-v>p*ii|0y&~#{_`qC~KXXY&T1;$F;Y=Sj!vY zsg?^zg$Uf^E!ibW!K+x)d|Tt{*QwQ*;;;vzMC$&Mi=91KAG$IDqtNr*-3#E2Y!NKx z52AAcr43Mo^Rlex~Bt5H(6Or@A^`@SV| zhV_a^MVO*?r*b+%yOUCY>NthLm7~}f%A{fn|HKF`Ss?)&<`@=`HMP2G%IKgs?A4n7 zYQwfH;UE8^n{)YX|RFjL7#~UNMgRR8rwX2`Ta6tph=E!{~$}^;< zbzwx3DZBhuL3J7X$yFLLhw~YR)f)E;DXYF;NmJ98EG|6=UC6<6;f1ScqkGe^mq^~$ zz~q0}h=DWAwW;oCNG2AkrlhTaL$xmT`D1Ha%8}WHWNRh`v8z)iNZKt5y z$^84OfA=0WW--JL@Cc!j7vshfDNFrnXUN*GBvf}E_{_sh>cq!B3A@3QLp2#b9ucdZ ztL&}<)P1cFsDC3y&0=By~suGOsqko^KBN6N{kaf(;t#-sRxn)Kz) zsnf76HC4^WN7VKo{cnAEdaNIXH}eaZ!n@-Za!!S9$@hD~D2NamnZac*0R4(o2%0CQ zwoOLO-PWX%+$N-5%%APwPz@=&W7F4n5=X9_= zbAGbJY3m>%Uz5|3U6?B6`1dY&%)RXJuy86Lc z^ZoT!8M1O735M$r#gzV{jCv0`v&z1K0leM{RvkaWIMd~3QB(ww3%B=Ws9Dn=zrU&HCt2Tw2+e(!kx_`(`%fr2!5vPRwKBmd z#xB;ny2b?C-(z~UY-zsP6UBVOQ3EpftRv3{w`_D|lgEY8KW$k)6-SPy|H%&Zi8G5R zfgYtIf_eG%Uk5fH?XBrU2qKw$_AZ?`{WBcDa+mY{svFe^P6BgSzFg@Al2Tm7#SRnb zG~4DIgARxA0@HW-yPgD9t=&>e5d;`m?9_ViZX&~?_N0Ztn|Hb!tZZ%}`eQZ!oY$wB z7fC<|TVm{3jwl8`ghoL&TxnnV)w|^~cuF%xF6BpT)mFa%8}H|38|Xc2Im(rn$C?YL zAa+;_^}fIKq*q1%rjeieVzk5Tsd%1k#}rWq)*mv)VPOF0Rk(_xyHQud(ewiRgizp; z4}2R?f?b{1YAV>zB7*KlDdm;C*{SMqdA5}8;zlqBR{&ZeaZ-Y|aaF^LvdgHJ@<|SR zLhSeTGU_)kGC9ybd+9MufejaRXYQ4JRagn=5#&X*$wVPy3S;`7AQFJ+~dHC=g_DzJ~BZ^s4TmF&?(_AYSE6%2dcB zO-+;~)#mIbOBrO7ku)BKb)Y;GJxt>$@7^@|(DN6`GY?3NhKmN`nZ9t>x|7b%!>?%< zHw6A^6;*Y0U5n>tANDFlPcIy!YrJHfKJ!ZIY4gqe2>Vgka%8oTF9dBUf(dRaNd8@B zWvRIBmfo4akZ3bF?>i`-QxjX*`)0R}r2zQE!3$KL#Ipa6uJ{DDy zz@)plILWn#G|lLsH0bd<49O(3c!2see1c9emeCJ9g1vb@sQ;q8jpd=Jpli6y?iA27 z63zotez@%M17^T2&eTv_XhRaz-(!M%Fx>Rm7fX0-y&9d-aD0-C2xj8mD+d2CC#A0q z1i|T_h~4WylQq?ekG-52ddMRkcs{Hnz;lcdv4~CZKJX_DTxQ?mjn+@~oPxO)mMgVJ z7aEs_dlZnyr_5@|5w9MgpG8tU&bfg_md6JPhGr$-K+jp3e_lNhvlu7kWcgcnMZ9$|oeK8GYtow6SKqMf>NZCr-@r7Pm;9bKw z*8g+CqmZs1>05aVSYzH-W>zP-v-37dC!_Okd4xs2Shz zzU9mb14+}Ks9i4(pIuD4`q8bZW6Xbsvv@$W1?WxvG!VfB`Qe1%$u{?&nY1GDz2}kz zjEV!C7@LLSpDZK_@?W7YjD1ApQ6o;ed<6%F$nq)&X%FU~kHVa- z5@_}uPbN{!4T~Ww0lPGit-WQlk}APG4DST!d3*!SdIXt6m}?bR_ce$V3!=N4XU}u` zI#jWVS$uCl12;a@IkFA2xLZ()^Op9aj40|D<*i4ktH0eJuXP!DogKg{L;QO3?ON;J zU?cWU0!eX)ZkGr;w7~#e24;pT_dN#I{!)^;_wvwfG3i*CeE|7X?sak>?~`zjoS~3d zGtZ1PU;E*ysDYRey|ByT0_E~2rv+d+?ho|MRHXqw9JRaq1f)K?Ys)O6k!}R2psO>ddE(k zJ8nA4QI;Q-#O+(>#WAmbQ_rx~*;1hMD`%WP-EA$oN4uw2XAK6JLvISe$#>if{x-l* zSJLuZhZlUH#HhW!BlO3IPK1#=J!L32E(LVJqa#JSXLnVqJUCYZVxx7WYwW8?t*gl7HTzx_yT`m0aF2;6Y@ z%}`Z}^d1+V8W=#IH^K&@ULO2G?c*}IH=dW(8x|ZcoF-y3$a|mmi+BGbW1wdh-`zy& zi%z{sH^3js>4X7US-?Tcm$pE@ML4%72)VH6g$4F6#R)W?$M%)Ld$$jH}|2H4*Zd3G~xtUef9ue!(+f zQRw`ymnbH0Z42NA_gOMnIqNLmMqFDLPX2%6!nI_NEV_o~LwDaX^wKj=` z?(MX_IsWdY>H3lClr$6>^QRf;WZAyw)%v`wMseZkZMpEN^Ni_asinG>9qLUU82KnG zK9kxKx!=RoWt-g5L2fLkRCRRSDV%Vk5-OBh4(!$3mDyCL9NVc_A86uQwhf7pY6RY? zdNLJBH8phI)9Ujpf5$e5Y-@$8tyMsRyUQRBwiygxM5zJf5LZ5yQK)67>>x`Ck5v?|w(Vwc>_$e&My;Q%@b7N55YHXiw^k z9OyV5ws6%6vg_oaBTT2q${nOPeK^hvMxQBw6Cd)X94bfAgmmtbsOaTrG2^c5wwH+e zU&6P*fCr!9m?nI+61(@wm(Z4V2Ij(_WI*118g+3|Q*+RAp8~^eh2k|e9d8I>0z(eT z*l)%jTj|;GZqW+|IB#lH8C@#8KMkZhY;z?2Bl~SFYHC`p_Y+Nj&ZxZ4)kb=&5XH$j z6O)##yEQn`gcppe6s4bE^B%JEw)(y8qb^Dnwf9845~4j#l{udzeKL5REOO660#%&z z`w2WqtSXL01D&hLuCk7gLP%_O4XKDXOmN$TWe#Lqw_x3~s|EUF$O8hVmtEypb208^N~ZIDENa61ykE#^@06_(dy~?U^h2>!_MM zGN3W*O^QqmsW=eN0%TV%TF!uiY)JP262evTYdp zPlnS~Y}C{{5P!Tm%Qrq@n3)n{YUs9oCuu!iOtzBo6xT@fr0T$>N<%b5}Gbbm0pMU!< z^WXx$PI|g8{`i;_bv)@*qeC5gbwCb9)JPxkqhQ#%J+r73QCzWB=I6520D1KhTG4!O7LU%DGkun@II$PurV{hU8v1;b+J$~P z{*h9?5W(@Tg;sF*e|XGoVCpn7z>Q%!4K5jfHb^l~8W1BS4( zh%~F$&Fm#mm6NL_w+dgiHUJqW+Yc$vDewL$Jjw8QCnpOc42~p*cc+T#;i0h#*RdSnh3i{<$|t1>h9T1d zx4wSFdsS|BWKG$6H+cWL`5m=1sd$&MrK+Rh-mkdA&xQtZ;i9;2uzJojGB++VXaA4P zpf^QyA^7=)$y()KkAG24uoj(n+{Bx4-cOd4!Pf?xZ~E2~40{6FQaT`>*(bKrM%%dp zCuA68eC0aL{ieIO!w=7uwZto4h7u6u>|GZk?Vss_IEP*apY$Rg)6H&1(?w(W8`{;P z<1*vL!M1#kA1u0u#jpZE*&P1wiQWBt{BI&m)oIUTy`g=RysLUd&-HXYupyQUxb-@lrcwO`*&aX!zUEOI#-Tm3#}Fy?3g~$_mx#V z336KQ*Liy^F3>{x+H1SB_9GtWcDQ%JAD`>E=f7(Fc@Y?i-5mgA9|ak zD<9i%tV`b>@A<*&$usAasQ-2?SHfG#bvDagzpsC(mDRzp`iY-ZP!6T47Dvp>*BrAE zTdVgD$MnQ*wJu`U2c)E|g=xVgS-qJBH|j3+K6x9n=4!L4^O_jgrVSntn3nCjv~KNf z|9D6pZo=y9#gOV2Rr|vJd=%B2!KSRWJjrd$%&7yV;-UT1pW63K_&ToTx9;Z-J%g!< zin_zQ`h4->hX)^1|mKHO6zc}asDd0xmr zmHX@es>-fE7R(UKqzQ_noiMIbRH$(*0snkzY!DE4)tofE^cY;p+QWj2k77FhL$?AMxHo_`Qoz!Nd+YZLJM15qsVrVX@0iUOnz3}#O8w{fajIXUv}A}>2d(U` z?eC3iw`3tqf~ANHhYJC1W@mY5BG%NmKqZ_ovTM-cHh8g%y^c%m1B}qSI>N-QzrKcp z;lU7}D8v5<7;4*c9L`^8<+u3OtC|2lSt^AcrT7#E4Ootpfq%_9uCrs z!eHO(d({)WQ+C_l5yy_f5ot^oG&Ypm9XO_w1k{G=v-x7 zuU|FDvNL9mbe-8JRqpcIkcZ|`(Rn|&z;CMTgzpx@)ic562z~B?s!v!kjcW(LTt`|) zj@VAt`j`Jow^$u)S{18_)0v`M{fr^Tj{nE!^emD@(oJZ;)AW=ErvN7c zg{=1*NPvD>?qG;#6TE$kpnARp>gwTo8$}Qi1GNPdU|`=|3F%SH$&9{~g21DLK|K=s zb}ffEq*wOjDQ(6Fk~nH69vOZ>mW*4h6$S?aNnyj6un&Q#CEu<;9 zpB*(<(jM7L^$hMxxK-U;=YksTE?Wzd|8^>oXT@=uVx*GwvWxHlw2dGw+Ho3JtGTv7 z-U2qt>te}rN^0z@4x)^+$n^zHsVMFJ9Jq|-wDz%m1TCN zohhz$59%w^=k!5ueaB5gugq=@NMl~Qo-o}SsCU(5)$axw=*%3wwt6Rb8lPS3=I?l? zXmAPofo1TruTtG_^Z0p@y!1K2OLv>D4|?6+q;aLTz3pG|_+0CD$<$lSitA$&v}bKl z6N1x_{jB_3F5Z8Wnw!*MOSl+uWa%H<(K|1z;rZaBqX9dyM}p$?;y)J|L)bml3Lw57 zuX10Fpg0oADgYqmSd{~I1^kV^lDAZIKTLY;n~e`l+b2ukPC$e;fGN3j*QERT^4SZP z&u?hcG{y5+tgIl1ueLgBjeqUyIEG~LE#b>C=v_Ul)FrM zbCS?}1i@Q=i_fhch@9>}cYsC_wnhCPR8kwLPuVP=$dFo@zPl3!%055ct8B)A3#)S%ScwKyT0m^&OgFkH9^A3wv2>{(jFJ?t*mz)Q1G@KY zYdbdQ!V4X)r~`8fx4{?SGdd*Q^GncpEO)YgelGGCZ!VF(d!M_H(7B>|3x2drO9Lby!3pB6tg}OvP z30a-u$(JrlSTWAvwoBNjI2dLvkWz<&&B2@p1X<;tP26wAl`ekzj`%R)pX50c)ytkD zxV?eCa#c{&*iM*X5L;P26`YdAtY@NaP|^B2Ak_}OV>@-Nx|ZSHkNBNxstDh!C-B1f zf;ih!orLQJ`OfqR_5#dO0`N(_(FM&4XOdTW^JV>!=EoALRHJE=mwtE_%{>_9ib8r$ z);H=B4)L|CzkZSQ{%1b=yc{`PT;!)Mh@-6vV7^}f(k2!P-DhjH=VzFgg5bfeI8qtt zcuI~%*qAWqOW8Rii$O)zI7KHC`^TR$fv)yul;3X)n&r$adHgzzTDALAbF|T%BpPt8 z#Q6C)9TH=$jWu}uW;D+ez_w@`jj!_Vnn~S9Pqr_&yj^cQPCCk;Y`Ol{zPjvg?`-m* zM(+SZ-OLRab`O77IbBmzg{(7AJ?re-iroW}CsDJhz;yb}-JA0HIrZT4J8l!5K)ERPF zl}aYo;o8z$smm{&{>^AH2cw_M-Hew`hq)I6iPaD&HCL@3Hf=F9`Rj!C-H6@$xX&)52r zG9)`)9LQrDjWhF7!~f87Y)`G|H`zUZ7iWH#e#cIHhz9V) zjM&*LTnzR{;?67>YJyY5AxxBKx=le6vZ;={6nIx70VPp(2LByk@iKsbv56GdZ;f|f zj=SpVsI@ZJ!~Te!BO}*_O?GChZkxgg6xMn%XnL3V!*o-nfUQ$O{qYp2>ojcGb*xb99!rYYVl=S9LaM)qT*<`}~U-!Y1A8f!*_sUAC$73C!ztz+?*08pP!=YP& zMu)+lkT`Hr=NjL415~BfrI#p;y$4$w%^MhpnyxjLskIWQX$$SRy$&w{aOh&5$9gn$7=7wisgBj$0DCc%%YX&b_oRYhC7BnL>z zsuigAyF8%iDNO!V75b&w?I{~otQAbt^?keE^s^4e6-nQgi6sJTbIqSpelGi<5+$7K z9>Yx+po0S>oh*wY>&OP6E7MB>hwc-Ri3OVWe$v=-(g#<{0lkD_BX&Lwbdt)c&jGxr zpHusN-z>X3GuttkFCF`y-kaP127#E)o+gJ+R3%w{gCzu7`<-usu6N2pdD{zY{=a!^sIh)zp|vV>ClXNf{RSbN%Jy*h6S z3Mu`TK7IsHR{D*_-Ciw7aJyVto>YvedAZu%Z`k~HWc0ia_;r4Xs9Ug1VB9@A-2u5DV(ov5F|z> zUCE`__ZfI{1flP6fj1g&$%SXx>pyTv z*ow6TjEEyhd3oxk4h0yZaoXpS;F)@hln-w`2`RReu=V~X#~?h&ZMoyfx6nICz#!CD zWD}^IBqFY$9!M&K0{|U8>nb0UGMSB?a=U-|5O}&42v;r{r&`@laO!XF*(0sde|!7I z@Li}jX9;R)WB&=@owSL4f!nbuAA0Dk!;)r=di85CX+Ml6mYVj8Qt!a`Wy?i)5lo0? z>E@~^%a7mA12zW+J(XqG`th2%3YP?oJP_k5TxrV{n_W5v;A(=)a!9|}(3-&07#B*` zXOhx!76(=mJ%ByC@QxlT1R(T|ng2kL3dGdd0&%U2T@crDt?m!}5-ek~G8kpQcW!T@ zZOjv3!L9_-+F%w6)Ir?ESIa{Tk|fya&g5sm2LK~*pmr9J<1W58U+cLs=uW{D4Gw#E z&NG1Vre@k11-12_;cg%qkB7(c+L&*tc4Wkg2hj6cAVdFPz{t1CvULvzwDZed>J%bOe%XVpx~Cl(?2yB;&# zyZ2zYq0mjYU`nHj7(p?PjXAuPcLqq=cX;7y0hGF=lq@}qd!>}gl(r&M20UAlsycy1 zgnRV|bI3YU$VKu#Ed#i1 zX_L`lq?6@v3VKo2JzNko{EmB5s>oN?KU?V!3%5~CXFB}gzn=HC+J4WL5!b6SWgY|U zCCjx){FkVuV5f?IzVNXj)1j2eBe6OU*cFT2jkeKxH1jpeSwhIo!lYMra*b$^0;F_5wEH5^V2K+>>(Pk%<3 zbZyz3jN4qKEZZQqf3vF|9Ry!@d0a+%kI{e}T8lCH;SC~QKVjLYY3eZVnD{sj6k-hXL24gJ~jnhU%(P5Dkv))tG9&S6B34W#ZvUcMuWu-WGKYJOlkpdqSODx~OmP z^9Vq)!e#nitt~ZFnS4>;_Zg)3VWzTSJ0h5JCI19=^+g3jJVIUAA(AUs8xB3}oo*d$ z;Z9;KQuO6tHDag7a$Q#Yy`*?y0y;taL4&uO^>ocd4qd~mn)tLW6H? z34ST-Ol^s*E$@Lmt2BQ9!J0OW7kcPF+&M~rKaJXs=CW|0y>djg{B=8Vh^v~4iIj!B zBeW1%37&uR3q<2F)>eD<^11oT8I_q9-cPaLnV8%K;#5(OQNh;h)9se=8!GCNSeyhT zafOu!%m6lGO=<2-%rDCvn0Ct zA1*`)=(3uYn^EA3^<*Vz!{My?x)<-f2KGk-H`$AS6bDP_+b~Kt>jeeZM4f zQpXf61gqN_Y_8PO$0B!w=*!g8c%?m<#W(3-Tx_QUr4STwR=PC*a_IynotX7SsNXtr zGfBtpF<+k4>R+5^D22G}T2(8Hz~F^~E1_47Vbk4D{BFq>;K`-AuZr48uL}7f86uR8 zFkHWSUdh5FfERE2ozUIsj6hZxI}P){dU8gLAmC&k%S&cwB%QtI)E&G^9_yFqeN!X6 zfrouALMh&e^>mxe5>DPvyJxSe>_=N*K7>bH{K+Xq!fdd&UJR`m&p2UgAF2LR!dc9UTe6>T0Eh)xi z{arVVC;)8~!8KsrDPVZ8erYc#h574iw#6Y?Bi?0VOsvLg_=b=L(@S9350Urn6v^nz zI$BlGZ_j*6fZfZdlph;WQ*t3k>{Sa-%(*?oa!xn-GvI9+d{MyiERMyF%MgCI! zqb1sucgLzJ2g$5Quq*5?fl2xjh4Ng4q%7vcaPq~G-|fWrBM(w6#=?q7odc+pgJYa+ zK$cr+lPdoi-JL`gs7h8(!LPG40>^$aCy!?`i}QsCUCW@hgtVLWx~z#g@6iN54_+q? zSEzp;1-UqfhtP5`W9$}}i}!-@o=akkQ7o4sYmbw?j}Ck{me1mji{NNGa9d8b7+KZ8ixGQc~n5`3zS|EmIvI@C_;38IEs6BW(>t~HSk7G8-yl_ zN55>ESm1f{G2#Sdwy-`08v&#qK8E8)rXM*>gPe8^4sVPY2JSRDdp{7#4!60`zl+Sq zkV`z0onG6X*dN!fjVf{MGRta8$ovP&I@IE*0z1bhzy14Wqe9V*AR%2L>KFU*{Cl#h zAD}}SD%^pJ{s9%>h$Jvq0c&epX`NraDL3QKty${CK0QHT6!`^jn-bUWf{2Pevg1*0BJ#CesOlcaS@=ZSRjhUNlvt10l5 zGcWV4Se_9KxPe~20y3%r-_~QVACGzH7vdA#2&HfR_q_VyJ9AXJQZkeD<6~=_`;aId zAdhd%t*olW{P$|Mjyn0rCYMnHbjJ77WvB}>NBhuzwuhCM!0{LTI0TXA*}>-$7-nQr?-P2a1^KN3>gUtHP4d$bp!!uAU#h_W7zr&kz4 z51+U{AUTFAVfi8vpf`CvGps!?D2LXVG0@=D>{~EpScdW@Lcj;?)=)Q<5#<076ZAW9- zf^^?6F!G!oNc(xY1U`&#(yAQf07jf9?gi6U!d_{pl#Fk zg>`kMRrBtf^`T8a#VRFoDljjdj3e+RPMp7f)Eu1k%05`5AW3aPheW}ytac5Zv%xi>r9B+g(?

      vC6+1BO5biUUdz;_;EYTE+^1(h_|08;#RfGM|866c5v|uRLwvTzvc8kXU-x6M zoe7uAOuq2J!7Z05W;_xLW~TqvT^GOoO0YjvN*BVe=FMx7>{}0#G+|%rmCx8DLJ9t9 z_eha}w%KKTy&qe7ZAkwwN5H~XHu)h)B#3bcP8yrl0E}&ESZDALxbt~79Fr;iV20jzB9OC2 zU}}-CE{5&KQMk1q>&K??K^e7n7u*N0cA6_#CK<`Q;PCfOPED4d;8u}^l>Z9LTcB>< zQ*s6EwwD$u+h3tl*n7Gcs`3Mx2KmjM^t6TtA2F4Q5%ouKyAZZuf^7E zENKPTQxAd|Crh9e_|}-dVIq$7;+%mW_^7$0d=D}Z>7##jd>`ItxdJ^@U zyI*p8MqPr!DIKzl94q%VD?1xCE>8m7sqvr{A*!c@G=4_V9DMyKfj3r-mo!*pyYb^5 zAJ=p=V*T6cL8y*VXgIPZr{DPH?q|(ACWu$X^Q3}T5*0>|^)QuZf*0|HgT{bQQ!dkzD9ae}I4yCTF)c-4W&vUVq< zyH@!whANiZWEI-Ch^mcN_aXU`qAx!@fo=52?dJja7huUxwN1>n$FkgpR-3L_UnA#! zE72jqw)!<{=stwKqh@Iz+>&USs)tt?=ji2eE2*EB{srhpEenfnG%QES0r0b7PXv?l z9KY0(lVm98wh_U00?f&Kw!QP51ByeM3h<@-^?8;r(LutocUjXDFjqAms-6z~5O1Z` z!mx7s#bDCR9rHm3O40jl^b>KGsS>bZK>qs=>T{%(zaD}x=A;wYSMN6)4NvN))6@+B zg|Z|xUx4W->Z=vUgf(Kelv#0U9fSAqTmRyywR-}i=Kc44=TGEB7HiCvC5-PDZM1Pb zklJmb5Z`!`^^fD<*+AY@dCGWNw=qssDV3_g5#H*p)+16YJ^DLJ5LYN9EuuVa(66vYXvRcx)Y9LV@@VP?yuL{!=cceKsR&4P! z)LSW>HnBuf`16DP!-jnJ0?dS-+qGTfe`LD&iencASfrzfH?F{eg0E^qS+Uv8sh`$R z8h89(F_kpUb0uDe?IdOb$br;#e^gS2(3c717JL4(} zFZ>J^Tvn`LaR14*J&~!G$K{GCxhfB(i1Cq2ZYGn#_-GdP#YNSddKin`%=jKQ3%U24VYXs(#MpG}C<86RQ5wkpCQerU zMTI38)9zxXGGB9f`%>3RTKfK2LJ^wVweGwko5#78Jp-?qVgMzIDCV*FxJz|OLq2X4 zq5d2)HE>5np+~@~hGhuiW(voQd0d7t+#3clmjQpOEwd{9PC{;QwCZoN>XN+Rf1O{b z&Mtj%lQO8g5DRT~jI4?DZabngxpTZ)2^JE49q&6U5(wo|2X^2?N#1ftx_ON8o2BDf z$$5_lZGTG>=Qi`Cp1EALNfJK9_c5{)QYcuDLS-B9CBf}QujFSUI^otx(T$W#go8t> zl3cvj!l`y5^aSB}m%$ihdki8DBmtY7LL^{wG&Z(w5T{|6E!zXvqiJ(W`4VO6&)A9L zWgFGtrZ-#tEDPJnm6msu(^4Bmi{L!BH{s)F*0&1 zO)lE;@P^ffzz6Cg&9?B2wn$Titis0NSDE~|gdy@%p_Tg&fO@nZwZkz!gW*m#5Vu5T ztK%CL7=6aLxAW#&_414q_4+x|w{(Il0`UzThHDmZUSfO&=?a|*hXFWu-}3FLByQ90d@X}!QPCQI zH+s{My=Ev?Bg)vPJF)&iO!e|2Jh1xWHlBU;n~6YYTxz|@Xzi;@%JX`#u%RzFT-uqe zX6-L76rRs#lgk!jC%Uc;fV`TblW6SU_wT~^K_dt|G3o9=T7;ZSVCPzJ?@6Iq%u*q! z5Y&({1vmzUS7#9aAR?Qdl7_BiH3Gei@D|B-UQXAY6y6#kF>tNZO2D18H$5Bbf<_jU z+CF!>NOvD^{G8D>?g!2xw+Or_Jj}CPiQ2XTmyN$hauQ4Vc+Ad-)uw#rfJL>#&neVE zs!6tQ`=8#A0jI()b|Q@cf#^!WpZANSp*;KYV74sa%Fk|{iP-Dn6mM*(V!x|6i7>9! zV?NX~wg4JUO7-swdCiSkWHWfRM0-P@tef&@{QDf5KX@O67gWtZwP88qJT#Tx{;|Xod zLvZDjK|gU96esykhv8eB4`e5{yU=ipC?y}bDJTI@5&ln^Q1Wp4^9X=cW#CG(1Fh^A zNliG03cl!1xHjANPU}q8^-37EetC#UbUUJ$ebgkx^qB3;az0L)%FDmwNO~^!=OR$_ z>zBnXL2Ea_bZTc$G_dV^nylMCxsR#xRSMLxe2%p{B>zr?6?YpNi0PYH=+r08tK$sgCBDLC|IS8cnIIjkB6IM` z_yxvv>;-8Xbg@jF-%$e`XaY<+KTcM9wo1g=hf>anB_{%9&N1b{K!F2?KIleADzIHM zCnLH0nJ9hbF|b?=mr|tkJVL(jnGoo(i8=i9&tR!plToCzlcceT<#w>BK0D((Nz3K` zs%2g!JDQ*3p`eHBaSl+a-co~;SR8216Q%j~HK(_IpgHe-oa#4X72@wBa<~#wEKvHd z(uf?Nw(I)}DF`vgi2N-ih*s`vEht(;S}!hTE>vtkiSDf@<-m4f0iZJ)IxC%YkN_uc z!`!`_X~bNF=$+^3zx9gV42x^nnQ40K0R0d&j5ro4)PyPv?Hi$T+50q_eDL3k0K`m=$D5B z^-GJt4C!&@ZfLKyB}{drrG9L{XA2yWs~mqHG(ZH%$XvYhOkLTz?$0nYsCveUH1JeN zU*t$nh8dL1JNAaD=>+6IqbrwB@uGD%5MpP&dpjCxmHKE<8UV5jICy`V#^~sUJj$E9 z`^5w(eb+TLTV1FMb;d_+3%ft}*38R$!?k*~Cp>oO4`GRJCq@#QRaYL|Y6mw_2c#0; z4HmzgrfP7}mFi2+Y6Wx5GAx~js zSEwT%k|mqcD=vc1^}HTIglKl$*7ENOHeGL0jkSctI1VzZe3YVQ=S~&T<|jKTIK1(> z;S_lQM0P+ramx_o)qRTA2*o9Pyi@5SyGSck|B#o4$hWeU!|1#dpOxRAlt~kO-rA8e z_sUVot+jDxX;~-gt?By!F>m}m#1&B2%1p;m3s%JJ3dyYb6)Z-MP2TTkNh#ZJaq@9_ zwQ?#RaZX*S!*iX0hS9AUsKfYfeAY}6V6IY8QB)W|J0qys-fPK~;#0fDy!`QJh!XRX z!xP#}qQfGF%(;p8hza#w9=pJJMo<;IYB4dh>8?pC$k_{9PbG%a^kq0+aZg;PG&_Vw zpRx~$R#RUNU3vohVa^b~t}g0~+!6{n3P;rZ+Jb*X-N^Wg>TpT-SQz%+MU7dwpgba7 zO})Q_gYN;hvV~8G%&GtRiAoxGtL3*`iXjA3lT!&+AZ_Z(g_z5^&QUqjLX!eYLI#J9lCJ_X*otH)gn=9`mGF-g!d*2D0n^6;#xe5MKb>kxoeE zb656Hd$#f%2$nl7 zYeU*!Gq*x#DL+n1?9e|Eh{W!~nFX3(2HOeN3X~J1X9IGP&Jm8ay)T%OILDNIDHNdi zOl*!!uAM3J)h<$eRDW(4W<2Umost`}=#*#Yv7V4Z=c;4^qbd3 z92og-SM2A#Jet5e%#5t;4Tc5R{C)(UZ=@12=39t;0O|0jBS+aF-)jKrdwE!pit1jr z!-oS8Z!x7v$(s$ZmNC-6FEQiVO1`RE5RIJnR$!5!!Mjz_(@f(VnflE8E?wO%MAJ(} zw56@0t7z$$owqvoE%T2nQzwRi2eVrq>)K6DGlaP7x~&nNbu`?Z+nhMZB87&v@HPgq z-o4IH)l+XGORBiyQVyqC0lw2*jM(^pXiSD$d+ma5hR>b&zI_5Xzxr6k=!QbSX#9Sp z4s1)z-a8;_B=9bZ+6{iRvxEXmUP(bzaN>yFs%=}t#5JLGWAMG=WAZQsh6^<$1L6ek zzFWQ)?MV$nQDUS{DvU_Bday)*6Z#q9mq$;mBW0QxTRra=LJ{*j&Hkacx}G}m;c%Sg zgd(8miynyuk)qQxu>*oj)fkJEvAZ8T#`^7{Mk+qm$MhD^8c^U)w{x(6o|hP6v~g|v zt}nC0tiUGD*^3-wrA!dLzHObM9_8t%4bywz+QgvB&SIWadYmbAtFGo}yCh8$c2J$F zTL@yhe0D~*oDIk%76XJ@BF!7#IV?@mzc_3wmQxMeZCgoa^zJ>4|FWwbK>F1x6S{tu6=x< z*`MT){oaxL=n;h5xhYg#GVJ7@;#xE6_n2PCl%K*0K|sFPw7(#zMfc0-f>f_%{$M^i!~M?lyu zsJ~%`$4N&(>f`P8TS!qy(en0gV}MZd^IIM$gXE&U!r0JuhH}Me2O59xw5Ug#&xy=s z$o5HXAj-?3Kod$=FH_k>61UIp3~>TKzDN)(ECfZi)xYc>##{`PN@$BTAC*g0HAzO% z{P52UA>63THvqqzdOztW+aA^Sl`x29?zO&P>i;D(zehuE+FW_Y1KV^n=td!F|A81g zk%YYRJ=*D^q55{97!LM}lRyqm*)IpNf3U?BB9Jf|vF=|!*e^Y8Non09Gx>}hcpeUQ zpT?uMO|B^F@~=P7LxIomzL6W5 zAlGh+Ic!r=c~P!ffozauJ=N4w5+jFJjBY&VHOhhD$+6Q5ZVQU~*ht!4{%~JcJ46EB zF1S;qe71xyIrsJ;PSofwEFbjHKi#sl6oeHXmZ2B0Zak6e<(lx-vO1Eh)U0cAwa=2IesstlEk0m-2!XE5=BbgIYRCMqAHK*Gi=a5rEFcVB_YmKzNTa;X^Y$Sae1(aWB;j!R+ z3V^;?G@32nqsCIUkzZuJ{EOOGp1B$zY9p({cc=i00^|;Q>3dAY%~TWx1$@f5<(faJ ze7@4zh2FL$`L&JR6a3ukamg6cJ$RnIZRh587niv3(5^)~Rdf;}q1 z(`XXa?Na}mR@9mA^G5%q@Dqxo;jjUUwPFt0GdwT02YT{wsV1=kOK-!XWcSBy^7N*; zcPYM9`QMAMI@kZ4I_Ek$*D66Lv$JK_Psfe@yq?%W9@57-&4LHAJ1nC0-TleyW zs(8yL;70XydbZD&#$Y4#cnO8KvEFj8Cy`T7BMwN=<9na5Qx;G$^9n|#hGtm@n3*1I zb3j5VvI5EDz=rNUT_fVPVO)6g2azrJ0cDGVM#Vsqr~<_5nz?k~7K$n-r;8zL4dh>L zT}*A&oNt&dx3HhN`>qpm)U!twYe^iEX9A-TZx;n0m-{kyFDM^VY8D{${i}{f6{cFN z+q!S-g#4r&L${`Id8uM|pOrLtYmd!Ps^h`h~t;I|0mKHGBfI^S?CZ zUQ=}U?gMjBWm&TIU8SfL0?Je1M^?_(Zc#3aSA6UPYc57dVQixp7Ac6Og zSg>o}G=yn#xVT0Ov~f=$kxw6i%z=*evmy5E&f7wEd_Fua(xdgl)t?5BCU`8-4m@t- zP})}~;|`Gh&+`*+E7QkOuSd>6>q<2Yo>*N{ZoMuki8<51-gzE_LLgu-)E5S9e;EUY zUt`7p#oT~ROzEopbOgcR)Jd`i2o?p>$l_oj5)~y*tRSniwu4(q`4CIRX*>I!!Sa+h zO#7738FEQLUz&0(ti(5ZxPEXJ`^fCeaB&;Br*mPWa9c(l(m*RjMfyosI%H$HGF zscB0CoG7THF2hF<#E1?-{qs8JSox8pOZ=ioE8$08R@1?e0gDuHa8-)YQ6=&%`Vi}e zVEQH&-=o3D|73`e06l@7Pm)%`S>!i-)8GYpg+nvmc>3ocU+-$0jX2N> z1rO6c;LhB z_2Q^6B$&Gs8R@Tb?+guV8n!L#aBN(A&+T>8Y(_bKT6Z51yqtZ6$hQW7X*+m=j$~0T zfNAC5j}{1MY6FbR3>(K*F&0<{ci+9^Qwh)^OEuM~XC(V=g@XI3a3 zPMfr_Wf*qu*!X4WNMdYJlzP~_l25_pFaw=mFu+P8Mx~^9;1?M^Ju$MP%VYK z<;qbn*VBW>|e>USA*z*C_|{S@%RTSxl*12$C+{b;7adUW#X0ksth zc|6A*7<|6v(th`M-oGB^8?*V-ePF|yt)^qDpeZ%%r=9vrPyF^g?QI!tjVz+vl6Y>H zo-&NC>0DE?CSwVg`%pgWcQhBbt7{b!R%G5#-q-Gw5g7XQW{`_m`1w>;j# z=g>uZQjeX^01oKwU@AGbfDeLJAA4jpM?03vdE=*&a81}{$FIWkwK$6C`};3#`JbQM z5b&L8^cZ~B_Y7vevF_hx(nYqUO%P-Mp-cK?Q7w1^dZ}xJDyY*H5)N(Rh*l?!_pd@( znCwTfq4Xv3KTXm=xmRo-Hc+wn>fEEQ`K5s<1r4>@{b9y` zJsEdF%*$T0zXZ~SelGvgFa{~qxzfBTl?laI9$$HJXu7;CAu(ZP4E3FUJz*4MP-zcI zMd16FAd-(xXJ@gJ8R_GuYa1exK@J z7n|B=7{FoW5*Fy2F;j7z!pAnzU_mo^`$+00h7pbY`I@ok;+iQt^2-kZ`!R~^afr>ry9ECPL}`ywjZXnNUh99mqFgNp1~&% zLAN2paU_bPY8WnG?axEVWrdF>tQ$S{$|lY&b*U9rvktJ`_`bsr4dU-de%Ic9FBQB| z9$6MA1S#8e1mKX;ESRb9rHE{Xyop#==0Vq6EaIdY&e`B$@lU?|MX31(VMsu50k2%M zsFB*Dqh~>IJ?WrJu&6~-C?Wj-3xDzVlN#@igO}Q>pnxr{o>}%~_w1ATwvY#{8f%5$ z5MRxbb=MwpIj|Mcq`$U~86(JL^`s%{h~OjKzUi<`3b!Yr$nX}{bBJ}W7_4NIcaR0N zeYH65_>U@4=S6u78cy2%CvMKXTOfril|Rq!q67jx~?Nr(b$MDU)@3SXYv5xHMBFB9%g{ zy191lF|*~GHSD9#Xn(P5J4pGbGc=!YQ%w4y$k3Kb2Vev}wKi1n=%164d@M-jJf z2okUij2mZC^`muWYm)sXG-}7Hd64?HsN2o8VqBfE7o1}IHrS)4%Be-3+WQu^1j91; z(+3L4{|1~%bB*H1jy>yF-(uCabM}A^D^_I$8-!zA_j}1>PxW@`$*)}=5Y$PX+1@WER9uK{M}hPL?Nmr@ zqtf-Q@_M&7)Zf{eOB}3xS$MoZ{}cVggTP3ep&5(=UMoU=cQv10WQ87SToUUW>X&x+ zdgmcN;Gs0=e{YoO5)G{)9dL|aDD)BeC;m54gkY!ZCHlgD3SgyO5%gC3ciKTko__g& z$dZ3eoyA~Y8n-5=$zH_b*mPFVihA!(guB|ifq!%O1YuTT>Dx+iCQt5Dyy8Fl!+b=+ zTQ7Zbx?L`R`lOIo)(Dae1ab6XvCBRfZ1TD-0CZ{w}rOdw6On9rgb&Fm}pb@bPaF@J1Y5d{*wcR<27?GW~_hMo~1u)({fK{n(X=| zwYeWoZRkssOdG#8N<|~^HaeqdzMso-$4;mSTIZkXUD#?{|21=;LtnN_7ZyveZ>R~d zKJOLQF1VvJ{j$sj!sIzzP9u{YfQ&G+8{jK%eRsB5$KsT-@WfEh z<(DQ@puq?7&AFSoaR=anyKkC0uBm**$5r1?%!@FD31o3`Robdb9yAXu+_{jO&ZTJ> z;l>oXDaXsRR+NSOQ*sHfcH~(OR%Ns|{j9jCX+-la{~F)XWXmV0KXTT%<66Y?^m-90 zZw2ec6;)bn20rVEI(w&1@$n$7<_&GR zx)mz#ebeUOjfK1VpN1tz*-FNDB`?gl>m6h^VI%bZufUZG1XfDYSyoq-C zHXwBQXzUAAgJ;dz8j%YJ9^XgM!kI+XL8Prd&0x-lV5=+!bHdrTH{V*i`{@`U@R7?2 zY>@$|TaQM(UcLok^WUFkyRGQ;9}@7+Ho=0z_$Solx9WxEzdfzA&(++aN_0rum+D{m zmv!G5{rQf5#GeQ=F?Oyi5Bd3_s0N>KaK04d1kP~s22A@PE-{F&r5$vi zVCCL4$Lanx2p%8C($DueLm*Epww2oRc`rgt^dM&v%Z$2TT*PPdAjo`m4H50!=u`Vz zP&=eeG6Df&PIjT}QBVOnjaus}`RGK&&xzUk;gb?Z`g^LjG$XcJ(;7Tqpq5u@3^-Z*(l)>Mo-?&!}J|;a27L+p>TJ1Cwe;O>Z ze@+0Fu$sJ-T?F#)#+Uj&=ne$IZZDw)&Ie6C-*1~leJBiz{O_MDqS@d4+%xRW)H?WE zK&uuH6bCQ&uGbK9&dv;cDCHzaonX?n4amd80Xh%b&635)v&vr<@L9t8LLO0vew|r1 zC;+!7hWwlxl@(?-`Ri9?9LE0aDYDP;T^^+0l|&9#>-dF$!Qr-R1DyZPFQ8z3yzy<9 zRFn=R;6N_b-oL%3^AsZAU?~W?#_4dF45yApH+!A5@#nDyR)2MmI0khjmMdG;><2*I zA=lWQR1aUagC6X&H7IimA?+yC5ZFvmjb0&> zMHJpe0%0$I$9>9VD|93h2OF-m`#h|4A#hrhL))Y|t|^Aq3})Rl3buR3(8=U0#qcU{ zRD*OnRx)P!@Ko65+vR>$y6}*~{dowEIW08k~#vx~4;sSR)u^S{#vGyOSwd4$1{vk^B2GjDE)yhlPyG(wGJ8n4# z7?Rm;9p;P%@=uJKTEYD;Ab8J6>Rzzj-;K?~%z`c-emax?&v^j{RcSw??&jd;p>bX& z4jGWGLyqo}_bq80+mCMMb(8qVS)ueiP!0EhryR%aB_oOJAqk$N{xd#lni|)g_+vA( zAzH_cKc+W#>+sw+-x~=)zd9!ll2i>PeoTiEjRnhhRq`|i{4}Ro9@PBWzWO%H@5*qJ zQ`ed#gvimE7gP!orl+xjdGB<|6sQT0$4xKGB4@&|z1!M&dg0m&6+SFjiN2Xu;K3Ly6B>SBjhZp% z3Ksi5p3{VU;G9oDu5T$P>aK{lMCtv6E#p=r+GQWLZ6rZHT-G+nHx3B zu%IS6*Ig)|z^g-aB1b#O;=Y7IlTbNA)>A}M8c;3nPqU<2Lk93`BQ@~eZ#+W|@i1>_ zf?9N0{$C)c`7F!+BHvyvE~lyh4SzOD_E!~t_UvK<1&co&-gVyNN<2MBd&^73?y9(& z;&g-PA^TA7ILu0va!tyUqVN{VHH`QjltShQ<-+^Rbhq|rX^0EJ+k|-SyQZDxtZ7|z zTHSrA3X71Zrq__`g#_3sG-^PKg3hsb_zl7G?2@XwKrsn^SlTx-??R>1H$elKWfYl< z%bG{0J)^57@_-?!c6FaxOlhUcNyQ9Ei~U!Blz8J|2|&{6$Fw@33X+ zttHuEve{eCny$q;<$w+Z94SN3?<~%&!Xn}}9XL+*Ov1EaSTb`n8ERej5=BljFd9Us z>R0m93QN0*p16`nvfs%d80hrg1jL_g>Sm<7f>`;G70NV78{aNbAKQYACv8Eod9hws z`;@G7%68p?wd@hdcQl7kkLsjp9VYQ=Q8+U86RkVU46n=!tp?_gf(4Hb9^-m`SwHmh zTTo4)hg7IUQ<{2qGl24#VLb=pngR5}^w^x3Y4{P6Yikgn;!wLAdqrb)H^-j5wqU;& zU!b|L`=g?TBCQBp>5mMW;(C2ByM0qUhrG311Mixi$IrlDV|v-V9XH$B#4y4J(0_mH zfHB!AZqN1*?*ENLYf94Eh|ukj*r#o7&lm_U~+NQU9J^&Yuh2%4aklP7i*C%xq&AIp_0`=%pmlygI!xe z&jt{qh|lryk-O$Ax}BH2*HNkC4#`!X*KgCqv1ZElbfs$;Q13J?(1Is5L=*9iD8zKZ zg@qcR#Le;o>HJ)!_w36pl&Obf^EqSQMNk@iPA6iF{A+q9vw-Ig;ZCKB`pmSHq5%|| zWdNMvdL+QsH`DCP+Ppnt9EHJL)Ct2_Gpk0d-IUBClX&)~R%jMp`T{b{GCwyhBRMi3 zp?KYtj__#c);5x69bGo%kMdB=!Q;7*_^@jkloFZ2|9IW(YiAHTZG~h|d({fgpZoIl zPlBUSuk#juSuu7KNgE(SrPW*w?3t?%`AZcrH)yi+l=|ir1@nsD+6$)Uuk0qqVf3|e zeE3P0#SbHSY=nQQ8Y-OPf;NEF1001Uq`M#yt7bgX)zh3 z>msBw{Q*6_cjR&gDHy6%3=QQPeD{U{A9|v@4a? z1@kn2{dA= z)H=l+g9tRl(lhX%x*EnqOv{@Z`o2QoMeUVqGHJuSQQU4iEpLnS_hUBI2QvM|JvpOi z?K_1eFFdN91Bwi;pKp++;3$z-P_t3V2HHE>&=?dBP|ql|L^v_`&PL{G-EFu^X0f`_ zHOJrR7M7B=%@B8UPl~@+)%0_dFrRu~+91opt7;*?W04htMgwTCSK^G1Qbm24>vczG_85yKfoEd#x6IiQYcf#g zr0PH24$96mH1<<~;H(UdFHl=j@iffZ^aEVn5)^gu>^E4GV0I&d(Jm|z`R#zawYJ%g zuksxX2eZ5Q3~Wjy)kWT2&b!WftAp*<%IDIq>8nsE@uFuxe5bb>2)Bs~K82q?g(;f) z{p}T+yg7RQ9M*(8!*D4^$jOLqW)0Zfm_>%cQdcmlMy57reGl6icRa~5GQY+t=CtJ_ zpuMlTMS9TvK~&`ZBFyaO_(M9SHfWhS(-a;5G;@qo@7LGeaMSiUj0;N0C4r8`Jc8D#sWelk;Rl zZxp0+*PZuz8YJnqgvHaZn(y5I-Ku`ajoB=<${`;`DL45S z3h&Tjrta-j6Rsy7|6ZUT%4XG z4QUIA?*t1wTlvinJj0-KZ~4O7EfwyeRi-6{h6V)#aOD%|eWYu+D(|1hz};4l&UoUUgc`I8lVdQctiX^DsJ`=+bc}48=$r7}BSDqw9pkx|9^_W!C^W zzCdgk)kQya7uMHwVh&QHjn3KATbH1PPAG-0Fmj*GAZlgToNf0)Oz6YN`M!tKW$C3?&0e`vCl}Xh`zrtxNL4>0R$wo;!Y@Qv}^GD^^!!w&lkrhhwii z5CqHD7wU+pT{Kk|y`0;ftSOfeOu5ZW4zE-x%uMceC+}0I5ERK8mvkkGXkR-|UP+yL zr8k9eJz5oVD`HQ7uu}p$@RRBSw9+<$6N;e6RsL~8Y=C%_jn4RDW)*M!VRk1xmq~Kl3uYwhMrb(3w-$U8zDON=&m_5@;W<4HA zm~u;TOVqZzO(8skGQ43b%NSu)#D3Yxt%(49`4tP@;VN2ns~c^rB|j~10TOeWKMDtU z=i#H|XA(E)v_;W%glz-Cj!if{HqR($WSC3eVN8bLT2D(4(#M}J-0|d~_rp%~S(9BA zu^hHU4e}KbErQ|%lp@`{_)4aLbs&p{AawHUWME z_7f)3ofER^T(_-D$OZHTf2@R0_iEr9yOESBd6roKL8=tefiB4y;@{I0c)N!Nzvtb5 zd2%z@v-$>tI%*4Q*h~fcOMUlixO4`DKHZBD3_?4sJ!`6XF zKdI~5^YX=s(3{|1q&`A8c|3;`rrUADquH(&rP8-+VRxQ2O4YzZK}4_F;oMc$R8IKF zJ(#^>R(YG|9e(l~qyX20mu#d;P{H*NKMAW(Yt-FDA-lFFw&&h9L7$jBAv>`a01Jm) z-}{tWt_lJXp>49NW^*5;HIhtG-3#k@oYt%8`=Xv>=2rHL4KBSfj(7iNaV7!L`!~zh z?)+C6a%T_FLf`u}!^A(SWbE3HIlx%zBG=e=f-_x-*$=Q@K}UjIx+-?ZSX}{bdF_%4 zm=2=Ba0JzXG74%P3qhx0#QGZ}YNtrUkCBKG_}a{hCW~GSa?Ok;u3`3iJye2j^b}y_ zi?=NQ!mSgqO>_yMafg=TnYq-*s2y(M4j2F-itai2>nhaN?-loP6=H64XU$S|SyslO zTORx^R4iZZ**)oMQGUu?#yyN&dJKl}oXMyO{bxesaMz#h{*m5>LO&VNk-WXs9=sFq zTPpE-HF(1S*6uBQ9RS~Nrw)Tdw<0wC}j1_k@7dfDw z`bKkOB-hgihun-OBL`XQGT2?|zxe&@s|D&&indYs*ew5r7BZDgV%lFXnYQPFpFt5$ z0c*>c7Q$v6!#lFfmR;A*^KPlRg}c%LFGH{1B>gWHfJ0eRaxh_gMEYpDARsZr-R#`x zT9=OlSiA;$ro^*y3ZjC)*1(w11j*b?}e0^ ze69&Z82BG6^+!YlHWJ=ys3LIHKU4$x+}!aaKop~}eI2xc!n`hG~&g=R32BdJ6N?w+O) z0=MYj-RGKo&d2mSgh9>b(nFSZ+7vK0;*g5;`g$M|zsBBkAneye>mKIm`RiK;aOuhP zZ~i#^vzx{6h*KP7B*#J%qQ28y3mLF! ztlWXtm+?FUc_Y&y{xie$)k^s`+h9t(2kTmNf^Ed>tqFi3t%8`(t_g#e!78@(79SP6 z0@aoXw4h^m76QqdY5p}}LI=u`i;6d&J#TRrH@ikT{~ePn&-UAMJ@uCV7GYYldz6`oxg$NH`?RY_ zVHhKOy8Pg|fHZ-RPQ#8@8T|jokP8sEDf0^v1AqmNM`W41FZ(n7`73E)`&SntZ~}_m zMJhLxo)(kyDJS%qG8{W>nz(^g%AnFGj$wB6?$7dx3`?yureqV(+mT5s;_9DI`nDrk z0_T)v&{aTs@2^U30bt77UFgi}%pjjOH0xpvbdrUxx9IWqCawD-j3@nDj=u3Hb?t>_ z%Itq?7El2?a!n;6o_3H&0r2no$0?F5Mkg2hkz5IIzS^rG&89IueR!Rf<_f+0FFB`#px7Bgze82PDP< zV4#6-PHA1{Lq8stYlsOuR>6{CE=mpxXL2CwLv8TDrePHBC(TMkWxYtB`;k3VIOZRO zhJg>nO%t~$gL)Hz12SeDoBw%exM41}j>JQP>1K(AMWRD;YaRAoE7&XB%jTDkn0$Wx z#$Zs=mcVgbnUlzW(}x_zbA12L0zjkiCLDoQX0N2*`QcKc*9H%vN$#BAX`4`A^sggp zc;v0+J84HK^YD{SA{CEU8CbhR7)H`!h3C7r=5LE>h0=J#RFB6yh5!>@{2<0KH<<^g zdImUcLgD|ksq1PUR=)y=Y?Q@C9h*n9pECF5{i;a2+5JgnxVzhaiI)!rvI_L<5stgN z!?9KuaN&MwpnQngIym}8QKVLdp%eRQL`@g-ao-DWuvIHAS@)EqGdWitctknk7a_=P z)YPfl<3A7nb?h*G_(Aa7$;*G%I?_%!kL;U3?{stZ`>|kb1HZD2>;YXV!s?PqXdy~D zBmR!cpu2!7Hq}AgD_}qevn)0f6I*TwwY*dXpms$NJigFX(SP4N6p@z5Jvk|YqMx(# zRB-{1Po(l{{coBkc1TrqJ=-k(hs=-|dC%TS5W3Hh*X{O8!`|qkDQR<;CD>wd&^tYK z>sl;j24FE-M}}f^!cO6$?j6lG(feW4t6+@pI66!FPDd^u!^k#yl9sN14*kVTuk19E z$kV|-MYi3!;Vjk}i*UxxQ;Fqopp6Q{#(vyv_GwR{pEaSm_?SwH3$bM7&a{L4n{lT* zrOwX_zgs>3G@hD!{w*i4F_D>tq8xe^b61L#Tfvl3aZh=igWU15G^a_|Ret@xO`YCp@Lh@^xYoLz!PW&Ck2iPLr3}^v8@>%G;J)u00iBj9 zaTf4Ihz83mkmtfT(IXQRH@!f7-x#7_@6CQUznyN$hW_(p1p!ZntL1W36OPoYXGa~V zqkT15$q75kudlj2fuWD9U^}x2*y;}^st$Be@NcGjfV5CqGQG$~hZhJdV>CCwqH#39 zE6C9HF5gk4OSOgW5xwAvF7d)Y73P8;Rz-T}-M&$zydN%}A5sqN+ckF4_!POici>Lf}E~`(e9C0nF07xUIT$`9isO~?Ulds)S+Q^t)*7M^FyT8PP4n=Kv%YB&+dqzycA!ZRW{ zM2?rbKs~ym7@A7j><~`N`?MB~Y>zPiTv}Z-Y|QHH=pazusNqORo(JDr*@w3A+5qhH zHklGaBeB$eij2aIQu9Tm`4U8}ZAOIkkP+f6V=|nZNyZxR5<1ap^%HiypAJYo+xxPDBOL*(PW*sLfZr zYi%fCw6!6*U*nXc-sYh)>UwSX^86a+Q$dj~!|F;Q2!ru|`Xt)u6_sjFT=^G(g^>@%5W1mYwDqPx z5f1olL)h#VFQixAt3qCLk>o(ks66ZwC-+ZD-rh;^a_wtQoV)U{~LogHuf_ zL`KnrQP`UQgo$?uB3b8VjcTQ^sPEK7{2geP%-f+Wc~$O$f)z_FcZC-JphpDX_cK+B z{B)tNlbRP29$$SFzNv}I5Y?Mb{6p|bewskz5QJC5*Bl0guXv_~Y^_tm91NjJ?K$_b zRg_hStW=43jWe!SzZLsUJ7fe6H6+33a2WhPm%2l@z3Y0f%IVEwD0}JIXF|0Q55`7P zzHW&+!j^N2AtB#tlb*I&vj?*Z2Y{eA^vIgJ0?A5pTf;Y96v+GHsdHBlt0NQ;Vb#gXGiBrBpUw_3>vYedfe8L_(cBwtJMD$jIeoy)&L8}8Z)MK<=TcV5&vcvTz+Zi|fgm+1k z&t#2Tlx(bYu*|0yF;;NnVLfEF`IS-|H$%dRU=M4@CxdD#62goAO>Wu82z ztzZR)c=dJk^{;nSY~eN_>_+5{KF!4NkK^&iIznbk8V`o@&XOX-sI%#_r@dwMMXRu@j+DY?k64h9OcR9 zML3NTbbWSTN!%;x(?Sqo^TC0$Aa|DSHhky##k*gZcdI}VQeAI0Ep+Qu5l;=1Y*c{X ztwCUG2QUW&Mh4la5lEN>xvG&m%6^P~b;3uLhf#UsMX8GXxRl(Cg2l9^m2oExj-*bU z%b~=bw%soS&jFG?#V=j$>g?vI-u7oC?VniurtnLdn;ZBu&#@Pdek9Ta%rbHMr8z26Ia%v^k<-c{A|q#-j>z zy3(fi71Wq7*#w4oe@(o^3xL$(EsI@1xQAp@tzB-$zi_$jKlQLD z6qmn8-;>2s$~sfFQrkFU@VT#tRO&y5etd0;d1#9z`CN>gYNV*JYEM~@F=bWwH_XEq zYQjO*IbI-La?Q)dW>DrXlt8qYvQGyo zwwN<=265&PGAG*3K9ulSO71AiVlmhF&Gv)ut_Nw3>qIlau_`HG1a!8dwwl&8m94Zl z34J?j??~YLqn)jnl5fAG8H=`Lw zF-oGqt@r7<`?9gLum2Rw(^XxlS;fn6uPPXiR*TVCm3hq^(nDutL3D~m{zj#h?vb5x zcM-P#0N;BU^yMr~UQqleRc&yUpzwaG`+7KTjJ;VcTKv(>G(z-5@Q@5|TESL+crmBR zHmtx<$?g0Kmf~*uE#okh;z1P|i8sjYt4|R4=~HkwZkkGSQ7`sEkP5g>ExaQktBKIL zNRUeCs%)j${m9HhXgy@w08D4=5RaVhO>zNCY|3~&hNQ7 zla)GgG5~>qUp-O#RD&S7*eQOr(b)m?fJHXh@DTm!^6q$W^4T(NWUxug_^>rhI`4xC z?bKv>wf&j>0*n1N8`$x4=)YGv&a{U;2+gNKh_d3XIhZqc-S*(4`!h?a>)Q{s=;`R) zTq48-%bo`RJvozC}I_%qQ)Gs!?*B!B{CK9FZdKdpO#ZZr-(J# zoD&*o0Wu$99q$Ypl<6Oy9`~NiQ==zGGwJDj4Rep}C!;9+6<1A}=h_ASY@B-yxc!WR zPy65K=#X|l6Y7EwiD*A!{zHSmkA{Y~J#d@zCSXXM83lXe_vcPz=(kPVsIE!@+p`87 zG;d1l+{?{xE8g-nFt1Fy^IHFw?#kTG3c_hE=wJK!NTxFgM;xcyE27G>VIz1F9}V~# zA{&Q)QoFgGXwkvbDhlITLxljiP!|gk!X{ zbZllCgQ>=^9E=9xZ4yFOV2?UA7`&68LU7=Uy6Vz_W6B%c_8z;N_X%x3`33>sqy7BN zErl0DFDjDBl`v7PC(6{JBWJ-#DoyrGPh;b%(ZFX%Zhvy?`i!>lV%((b96^QSqGQcZ zD%1Be9}Rj%qdO&T-{)y&X@z|xOz|oJPOH_wo>||gc6)ajDvHZ@j13OYeana^`@>}Y zJw2&>*q1PZ=5yKOA3`6LvJ1;?1B2*Co(|S@{Tg+{l46`SHJU^;67C)%tTv&*5v^0DB#p)5`b3s+oQR>XT3nSAXWWUcumpGCq9x8v zeOx+Na>A5(K!GO>wdUVjcx-#iyKO+;9@q1I!fT-9dd@%25hk9GN+Rny&82nkkHOx0O1vZ2TLz6^0va%k)ypB z$!T&_g&>XrrH1tZqB+2Z8GonL533u|BmBmvHns1+n%nE5o{Sx z40p%|g@HalftC1fHxQ|Zn-w459Od6?zFg*;%S{3q4NMWOAOw!2^!syOqU2zTjX~R(~NtPwJwxfTf_`Q`PQ0tVrjO>4#u@8y0wznNPvX`HbO^sq!Ir5*^ z=k?xA>d@~xGkz=aE#13<)qu=__9rhKqegTV6zT|pHlS9`ga^a@LhXd-Agd!W^0v#x zq%E8S$TGR4Qk^i$Rt5ZA@vBG8&uzk-wtgZ)i~C(!#3Ta~m=p#mGYFVuKYh*+qmJ9- zUI~%tCU+eI0;2#azWGhK_8U#pM(Ltvh!J7Avv`rK+VZYHdEp1tGC;tIWZ&QZ5Z3l> z8uc<->OEERzrd-x`*BUP0edO~)1erW2%W7Xy74P8KuEt8rH}>T`zMe#R1f?TgiN?(sgAYB#me9W+RTHrpg_hWi)5lFhsp=GvzV0y6v zc05Wo2E5HwPQa_I>WAi|{G-OgL`4dAcJQo8voQ;txhXxTqk~69};4e6z(f zn-(TYm+JuI)tek3{7I*b_V7p=N&tw|cMGc{eG_xXINIe4S6D;>e){O&#w0h76m<4g z_9oUGviByEj|Ldj70v)r`z-6Omr)+B%jf^9R)Q_St%XcQOLau-DnDhyUFGKg{ez|7;5Kf8y| zAvn+i)vJAZwys-4BBFDKP*)j1g!1b`k${=sx6>htF7Do=`Ol_ga@!~GC1fbQ+5T_O zocwge8Tu!&mSdtU6%vdFeKhD!H2@XlQ22BSf|Enzs5%(cl{Iny{hx<_8@^50!X>88 z>BNACnBx9TY+}jcsiSr-NrTW#bpA|2ib_r zhUpT4j>G2QUgOI()`^v~**;M3wWdo(!|B zm#8>f8nI2t6uu?P5^B0X`E8mQJy<+lw}#$O8$nV7DVL4k3-4H?f<9TT<3&`L6GwbfNElSpp)falNL#`>m@k&WH}xuAV2(n$HY7VoHUAHKWTE65B{W z$y75~K)#mbM98hzI}G2BKIbR<=ymVvGqZGWwiHzUv8Zi)MeGX4PNj+I=Bz2z_FzcK zvYdUpu^QXahNv%~g1#@Ery%AKayu@t$r${PT4r8A(BKVmiiEX2uVxQiq&=qImLZC9 zG%Gs##%!5+>cN4b0H@8T3&ATBZk@wiiF@>)i5XRLxmJ4bAY(AvB8KH~)q|?tiEX2z zC5hHh3@Z!7dU$mZpVfTK(Z6*fHSZi1&-{np#(~=Ynu=+w3fd78bv(zp>*a^Kt47RM zHoM*#L0)qt)OXk27r5}fY~`+^Y(7Pi1@1<)FA7mCj%vWJ8yq#5^KNXzhFG6cLI|D%iBPVy z>>he)QSyc~Zf6j!jIJ%A<_tl5R05t)eyBj>S-Wo2eLr&YquHx5)7(_%vBW(d=3x) zj#80a?ZGDYb9Ah(i;vVM;kdvuS!rM7-{x!M)pGo~MIj02%hWl=#8Rc5NSE6*raW_( z<1}jgthbR+{JW9pR7{xTYuhuYOton7X%I)BEV^IT4(g+o8x>XMnnsphd;yp+oJ6SI z>nOpQOWpbocz54V!e|0v;>eg_gs(rF7!Y|)y(Q=H(Wv@ZngQ|tD1Wg9c*sIZ;HC_8 z5X$PLBecaNC4!IdcJHA*RgE85L4>JRC2J&u4~2p*LGKXSg;LIC4Pv{ll1IzPuK5e6 zZwGv^Y5o!ukv##}Lby4ZxMBKMTEpuSICp5gdb6gSfW?J_ELG^82$aI1fg9KTEv(WZ z)&O!LRk-BEBX>n+ZG#U(ZmASwF0qNW#>FWRVd26*nmI%0iHE9SHXC@~KKb4)om7Bq ztT}kCNAOE6k(vk*mt>A0M0DclIkJWycLwv{-h*O$2Ao>)5Exv19AL)xms=Z)x#x2A zRh`ncmCYgyiar@2z`nE3k^U8>;F8y}MBR;*dFXrPpC@UO#emnEUtc~$xNx3YG+209 zGdOd4o+=TJW$Dh~3D^ z8c|L#9az%an{N)4ytK0}*8CunLaB8qJoo(EEIywwgr<-h z5CB}3ISeFplV6p-BdCUg!k1mDjhR2B{Jed8&v|Z87utX)d57ebs#r7>!LQSrfH{4M zA2hYtz3x;WGv8C!JVM|lyMTTnPk%;n4aOI4u$IXjqSk2W_c1A6F}6Z$7FQ6eZ&X#Ms3SAOc7TD^%p%MshhkW{{- z6qbz32NtzJ=2}>AGF1hpPK^62M(W zU}OYwL}WG(N}$u2D)Beq%g}!Gay{5N=BdI!hoVINEcZV#H06I9wK+qDPDr9l0h&W2 z8-ai^lBN9Az)bQ z!Wq@qDCZ6Cix}C;ec7S2uaSAY)~8 z2+|3(0c_0|XPlR1U?p5?yUqXm^B#+w9Tb#_$@esg#JZi4Vq83eKq)%ey-sG2x={Yd zInMUHP)sF?DJ>A@*lx0GVK8NOns7K8_{##d%Xn6#~Lh41}5dcXa`lyzR4%)ncE;##24VL?f%8&OH(y z%j?V(cgVMCg9W(v{yTm-#?H+ZdD;QHi?e2JnJAjrBR#Ps8 zDM(G*->u;wjEcT#(~km>+r2La3tJ;47>Uu(Z^L|4vA2zI<5TPm>to?b;ak~ z&2+*zDT^zzJ0V=2)sA7H0_i$(l^i0pgn$E8-dRK43d&m`LJgU2u0ZVbtAxj>@%D;u zHH60-%O>&xdgi86(rfD*c?EqFwxH!mYFP!pC9i;j9?(9%gdC*BjS8JVQz{gg1?}6^0mG{gVA?kq33Ew8`4M~>6tgLt zD!_l4f$77xS3iMv1un>Fb;z?rNE`_K&-(3gN{cn~rv0)6X-Z>}afHhkHy9Ns!|Ai< z%ek}ZY_E4|khU-Bj;Dvl{XYAWp`}y>GJnw%h91}v>>vmWb2*BgY<%oNdKT<$3t8iO z2K+mQmg|!->ck6+bOMJkOLI}-S4;&RUI|HLTRxwsFx=n}H{g`eet1`?2xi4EX~=9> zAL#dbcedUY$@T7#MhC5+ZQ^Ht6m(`??nHs=M4lbT#=Lx2d;PAIR>QW?AQBeeV5!N9 zpMX6)#q&A-DW`;dXviJbFYE}b?n-GSY^@&%yzTIyw}n}pB0C!qhkoZED2NGu0-m92DWQoo83rHyVG z!o;wBE=4KAE{YWN28YGl8qinr?V38BK0N61q zICE&t>EL{L79 zn}o9pS0E`PIJ-Pnb10-In?1p6^MKULC=?l;pc8>_`4rN3QAUH?PqYi`Lr?1-*@2$h zadZUI4g1Mb%OI{cRw3bkjT&rdW29_puSE#OE+12TiZ)l?l^LH&yEk5+(bbl&IEp{G zp(b^J*4Gv*-5HsPX*Q{=a}06=M$K0K%NUGjD!K?vcLO`7 zv-B}vHDuXSe{$<$u3f#$k&HP;AZ{e5CDe3cCK3zNEF=9H*ZM*H zI(rX%4DgKgAr6JE%!J7>YnnAl#2uGepxBN+i|x>L$Y5%hoC}eEA?o6fCz>1?b!Ll)*oLgUU+liHChku?9Jadv~NmQgtjE z%0iY4SPb>$&-?VO^k1B~(1TlIE?v_rHFuW1mNRYmoR@UsNNBKOajI=uOq3XMBCuLR zw+FaR?)NhuZad4k$uBn*lqG3-HsopZWZmLC79Q|GUVh|P&2U_u5;zy5A`j@L$XM;X zH#(YIcvQ!?18-0=_PrSUPeD)-h*G%B<^+DJ#Q%Gq$}E%6B1!z%n9>Ekr#IKYA&$?g zq*6qh_wkKRON$_^%B3kSET>Xl9{Ya%)_2IARJX90_K~>tlW#y2B5@>x>=YQ@PHmyg zQZmk}b;(|z*g86%$VPPFGXu;Q-RdzWXTrQ87ICE zx;`e%dkYgR<@KR?&JxoCoFKgmu`e9|HeLAdi{T{;tpttU)*_66le~B&MX0U|zBsK& zRCw#WMEmr%b`w62oqv<>M5@DRz=Nu8AO{#fh)PYob$F#+h7kM0j{rm_Q)0@^AsreM z0}=o^(_xPNIK7`2RrcaWl#m$|aa#DudFY+F2C=SRzni^zx2g@$o>$yz9Gf2eAg5!j z^Ax&3y~gcWNgHS?9CLwDk`kXIu)}4TmlwAgY$V59kkl)WklT3c%Vr$VNm$e;MkOy=eI=$;gWK+1(nJh0kRt_H#rit zQxIJQfB7GK$GC`S-{dx-5_Z-+9i-rSKk5lQM)SI9)(;d-QpA)%?V!?g8Sdvsmc{zD zCFc>I+E#ezm+eIY4U)pjO0L??Dgq&S2``-2-?mVqJOX|S(xv-g`wjbtH!+T#eX&uU z)Yzwxzz!Bm{rbsu1UrD4*i#LhYUD0_5me!a`$C_S(zVx-t9Iu&$;Jfyvu%m6+Q!S( zZhPekEP`I|it~(#BR0Y>onwLPM2EU64G}Cgzo;VdM?w0DsNY+O+HZD-E1}WFLw9X+ z>Fb;cq%SamfzcL@oG$MQYq|G6KG4T5;&&cb13xIY1XG;3B?%F7Avh7eSB&GHCfMN` zkv_&^udb?#y)z2=5Z^-EgZcZ?A4DE>kEA&HqRY}G#>U}SVkF{hxnFw~DqLo*d`A`@ zcm{Y{p+pigVg_{)28V8lQgqPI7*!Su6mI#4@ok<>qoLV|78bkhwjKE$4=yS|pre?L2 z3F(`m7bu`7e9rRF_sVPUv61`dNh1O54`BeS@Qr@ck;mYl)2x{f?zR$=(N0UTDuHZo zqyky7wj}7rOuc$gi{v1Qr3G{(66| z^>Nx?EFT^BqD*G!fr&|~Q*sjjoul{Zdw1ntzQ117u}i1ihAdkiaNGVD)9{hK8fPk5 zQ2u)NCzfXvH(3`yIvR7o3iPQD6Z4{JkvhYp4(cPpkt=Hz?qytcj|eO=s6K(5ForURWT`r)X0Tm;bqXSSiAvymLnCmzFMI zIEYf@>IgEa@3Qu)-ydror~V&J=N(Sv|Nn6-BQwf~9I_fRve!98C~+#E$UJhCjO^^= z7-eKeWjjhpvOY++9j3)>6)QAkTY|vx`^G^}zwHL0^QW z^SkQ>6twYTXg3~em`*D7KcMvj#PV)WXihy-aGJcp?sh3V=!qNVEA-6wJ4Ljm|(`v4DGc*@;Ig%Vi`PPJ-ci;-Ro$Bu^(KrH% zzsxwb9c4$R<>9E$K-#Tl3T5Q^d`+T|;KqDMGgK?8lf*(sVOdlhrX&_b1-8R*oe9a! zAhpc@@I@RfS^6t}k31&zLNz_fuHg#}Wk82dKBnvkwEmCXv?aP(aY1QFPp!%K2QUy< zbfFnaEY*X{le{Xpb%?n>Cvb8#la!2L!U1*5>{{B84M^b>d(4|{l2|j$bC^I2(8d4* zBZmmWaF@eADNo`gYH3vL-oNQ)+$kaLTgDcO*y$^57C)H6J~Y86FqbqT(0PZb%*JEn zaZZ5ZtMiQjJQahd361H6krMv+@Tkla809M=3U~yh^7ceu>@D95qHs84gLbg$)4>y% zFP`|XG#}_Yzbg9h~o9?v9I0ZGSxIAZGqs0_;EZ7tP(@24RhR+%G?+-c=pi4he^3>o2-W* zIh{|cnR?7UXbvIFf3PDfQ3u>QAw=dfpd#Da`M~|3FLaVF>xhL1zO6Z~DTnNC;s^lc z)lJ5_4Z)U76OPeMljMT}`8c=R(u()N3HbNL1`E`uP87DXwz}p#S~`N|Yos#aX+HD8 zYLOguzjZU8R)r4=?L}!vx>ew{_`LlL9o%(v;AB`o7>0|C9>395P3po_RVB$!wPzz#-pmVU6%bpi(crw;nmYygm4jPb(RhdekjH2ffGxXTPX6rcmhlZKI z{``{PqnGDG194dl@oni50M^{L6XM}s2;tWi^zHB0IOfbyL^n681SnK_O~nZY6a1#$ zbNL&*yT~pkwzV}{{Fb*jq4{(=4Rmt#O>&sSDID@B!?JQ5C9PNuhIJQ!>E?q}klUxG zQmQyIgR$tDP1%>ry*-1HPna`HhiD8y`JdMO=9=&M80C3pd(nb~twfLdk$~V9#op(y zmu98uyiO^?dMX{STw*gy!X_oyl;`FLFX()PNjRDbu0W{;PIO(%<_Nv2qV%s=mqaER zkVYk@Q;@-f&Gv%C|+;?5t(r5ZFatK{ZW!w0cNk&niw!qK?`nAsXis5&dvIvIl-NhfD<4MMBjvN+EJp@e8aTt~dpfOV z$Y5qgAWuVB5E2LNf6s}~KC4UCSoH?qF-!zyHgn{p9y3BdDMPl0Y9;Hxz z!J+r%Q8U%)E-LH&oSh->(o?4A8;yF3j^J<}{^V1t{ z5rS0Z7jVbqq;eu*B1c%+XPybWa7y3H=)A-`EuWOPqh>H@hsY z$|w6I`QMHf;Rvhdw9+GY1J{^R+x-gWv!7r`{J?aP#UK<++n^kpBdjQRf;>}-*N9~L zkbHy9dpQ{Ee@@voOKhD}IbmC;Gb&j6^6b7VKPyKUsJWMm-&;AR@;U-*GDyEZ?w5fP zv?ho{S*yLRO``3u_x!AJO5-*=4`k0T$=5Ca9!dj;9&X1JY8w`2&kR{=R)!Z0KI@MG zPR>xz2H)akHs4aZqABfYIp_+6xC?hP%YKI)9 z052W+Ql58Dr?K2}qH#Me$?~f%R0rPWb#`o>yEnVT!RKl_Ksm`0bmnP4V^WHJQ{(W$ zs>yLD>aGNy-A1j)U`%ApKsEH&gfk&(|F4;ckp7_wB;Oawe_=(Xc}hC91Wci68fgRzD;UFsmsfi2tdr=jIl6B^Q;V$W5@^Ek_W%R=Ylwkavw%hWe-$oeD`>}Z27JM7} zAEI4D1RJ(WD4?x*NE=!?1{S>SwN%M#Fk-_8iNC#%;b_0Oy$eO2T|%YYMd$vt4k`Uy zjE-pH#1D#x>B*lHZt{ZtZv|(zo{=Y08oyUQe02m5t`)k=N{sT|(_CIA4T@O&ew%V7 z;vDhS64I7Y%IyjI(Uy2!F%(5gleKK0MeaM(^x~Jh+LehlwB;FT)KVa9tzrE70T*(A zsml`f$)8#f2k#kGOE!UUhvhp|G)VmUizey{AJ#ZdL~@kB|AfSX(bNoKX2p$eYz&() z*>r}xRy@8qr$(ssKnKPLzR|_xUp@wYY-fOKvA*zy(J~r&0@r?P@o0YI+2Z=m{J#b0 zC3!N2#7TF-$L!cgiDm1tcWDu@T7GKH=CF)gbBOjYn@@~Z6Rgj?5va*151Y!5>yW?k zqxbtu)r4lgAuo}RAli+YdP7}&nf7z1#j_48&~xs=kE(%q=-!3pw|j>g@QHw1%N!Q} z{4Ay{z&YE+m!_w0{%c)}KbX2Oa@O%H+IF?k-Ow1G3y5GAnm&#w9 z^KlFp`%_1OqK!^4=csKD_A66mNOGt9`6wcP+vLbA#WHeDT>V6AIO`s~ zK+|dNuiuQ8{J?u6ynK4{2CgUi|3pvjl-bTmDN z7=&mac}~B%mM&6Moh7Wh)6uCIBm#@%WMJfZ=AHvp9!hYy(*?L3;qglp8ZIIdWjp$< zv0|D?Vf4{Z)n3g^D3I6tno1x+AMGx+uVUq=C;6$iJ^R((Xt<5UX&8ltNG99{_O56- z#l>;XOdOmmMBB#B6!lXEDvM@mw)EEV`%7iWCIs=JHlff+I=gEGjmvu4_n{R-(}$!^ zDjzw7fv7(T)Wd@o?@J~oeS~|izscL~wD!T`LMh$R6L1#xuM7;W zqNq!1ULJz0FC8OU^kJ^!<2R>xTei^%qytasy*v?WfaELrFfe?95( zfy*%s9ROM)=v&#HL&o0D3j>*$^>c`)M0s!njWN-@G4GhRjwOk&H9h+vZYfo&^>OHU zL|#^%seZH%%Y6oS38l0Hj+3o71QTmj-&`P6LZoE1M?rFQ(MdeT+S5_Z`^ zJmqqW(q@d)7O!`}~Gp&JeOyqCosi(C+Cbr*LDV$9~5 z8~ihw#TtTh!zQzg;RnY>iZII?=_Sap1Kqn=z84i9RF*#50MJp6}e=|y;5ic29b zy4sMvuaT`Jad8%i$-#=&GtqBr{95(760aukbZ@t`${O2SDu8b@_Ya+-6c;wjf&Y0i z>^$u-Z*yE$`GLP8+{FGUDQN2_XlW)sUKaUwNgt&4nl=q{!%h&>Wp2kj+0zpsc2jYS z_rM%6H)xn8V0juml+kqiIiXF`V zgS!FIdsx8fi z5)&o9>Ju63zl}$t02@CHFUw6u5nF}z8Bi*ozGXKzYyiYO&~7qtDOZ?iA{;1^;-!yV z-S}X~Zo!IALjzC%g?Gd1=b)~HCx>lnHLB`{a5A?;J>5p_*%ZOI?Z-rnDZa3Sc@;z0 z`S}9UOs%12LVb7vnI5S1XKS0tJa|v>pX-8acT0)|PmJ*|STd(-sVW*EnoNzmi8mbv za;W|wW(S`e>5g^AH3F7m_cmDm(E5LB3)TG-F&vA3-YL)m&1tDt@6N?+{m#6eDw+C1 z$j`s_JrTP&@LX`H_8cMpnrA{61XZ3$?Ea%3n$LFqbC+ZPebM+@_DlZ%Dzdk_?}chK z<0p&{N918!qwp=0r_$>kNrz=17>;IibJ48m?Y+s_m72dEsWdqH&-z-OT8oYY-RgBn zWMVcM+!6N>QwRxk-&)JskQ4*&{^^jb+nf*ElBeV#v}hIc-<%<*A5Y@n(!gK|jdt5zX| zA{BooE=X7TZ6;!{#kvjoSNpa219QaV>#bINSxuEQUBG7LYm%(lzvmt(Kr#9(;d|df zQ}IfwVILotVMzLv&F;LTA+;!4l&XQY_MCK!_%K<&P|42#2}V&+tmKsNw+g3U#zK#J zUOUpgyg5oh1>$lSaGeP36vr>nvOH`?6gC!HhSeYrr-=oHr8y*|?Y>JlPa3$Z_+TK*0#r7={-1VT0!_v4E*%XF zGWia4D=sRZ_aN6>UwKl>tpGg>Pi~HyF8s*&>bBa+Bxo8%=GLxyeT3zv;u%7i-{O~L z0%Rx0VAEH>JmXCZ`!73Op6`I=;WPO#cSD zN&}_f%ftd{$J8Jk<1C@rjYDmq;e9C)ucEC=YGQc9lWS{))W_+-m+5;1NoivpVzH$P z=kr99ZuKV3ba>22L!YP>?2>ck?!e$ScYAS|Bgq_LLxobocU_kq6JhTTMBlfsjj%>) zerngmf~1MCo)et4a|7QV|CP#^g&#Q>!j7YrTuLD|r zG_2tb!L8pz+B%utX?px=hD))x^ZIs7 zQ95B$Y5Wzajw3@x?(1wLweXgty7>CTNBB(0PqXjem3hbgjh}sPuNPXOg)%l;f>ft= zNGchz?p?KMLAYSb5qa|9T;P3W7(I+uvW0f7-xfomON0z|c=gDwJ}=PC(4B6;?IYz6 zNx&|7nAc$9#2J>L^)6Z3JL6wDzWa;7Y$+0hTC%I);E0hC-%c)TI%=Z_F%!!{u(MLI zEQfylZRljTu19&vo7{rC_38?@74x>IBAO`$0R3_!WM)A(yX@3~fI@SOLtYy#7wI(7&K-Fy2_8qO$Fzr;Hl;O*eU(8LB?y_4?u5 zwpQ0V2vg6=$SMNe#E$&!~$KcASV}0y|d1y`Pn~W9W6&4dfzx! zmLgZhN0OCt(}C&?m+J$gB$x&6>{nAM4?xXPCIeP*V|!xe`d|o*kv{sy22AK@L02bh zPfHMo;6DtZyUeTtl2)iUow%_xYhrcT3oFkN70PQSj|-^BDk{B*x4lKxsdM zY(~lG_G*2}x|&`<^Lzan~2mht`mZsBHge0y7AF zk+#%lEL=yo^vDwU*3pdTtCW~FO6m9?ZvDba~qx$Qng0XT5Q0{+G;)19N>K-%+3 zoTzj|DedE19k>2Pjj6FNtez&(kf<5$HMx<2E0wQzb=U|8*gHBF@xMxjG^-T~?qk*X zdNkIz&p{tywG^KWzkzL;^asU{-$S8cbl(D=TOT}%<634-YBs+pR*{G7q5=9Ok2Vj8 zw=*J$kJIHgAjImYYwSr*aRz94!|@MyD4}urmzr)l(3Lk3JDPD4ZGs|am}*M< z3@X}i9CXx;B>30@8MrX#&?gbgWfuv8BCgIBlV|F4OEi%QeO((R#rGfzd7_^+- zQ-XNn-Z6F~tF^~rEM3@5aF_f<~s}WACv_N}xZCAM*ueOY+ zJ(3x#fnPh^>>fi0r+NBXBsU#@)1WmAp1xh3PQ52fIM{SUgr-ZrKiY`m1IgQ#BAZv$ zDSq{jG))W_B}duU`1rmAHVc6r$S@8_2ETMCh1 z)P9*c$SU@?fM4T&P)Dh2-7jHqjAY$%(u3=op3iHc}zP#Kus@^$l0UrAtF={ zu1h;Roi4BrEKDJ zDaA+0?Lri(%5JN9cHOq-6cTbSQ^ zB%wzP$qPvK8mekNo&G)$3MO~y1iL~dr1iEeK-bg-Pdx{R#GtgX-Oc9CFhoP|k?}=k zr5efi0PTwD$e^w6mDO)tf{(fytY9Zk9D}HP1n#L7X)~?hz@mH`B-5Gi6ZoPg*EykwI&tNH$$AwXN>8mucQNU@mU|99kDGGjZ(FF<4{+~uRb7j3?TP7@QM zw)Q^0NrGL10r;%~gymGSUXCrBnADE(j`il*FSt#vpR7e4#QqA|#F%j2=4A5y}t4dq(cnI#YAST@&4C3q@yi~F@h z7xGWde$fQLW5BL*WOxz%-}dU4jM2{Cx{RY0x0nBv#M||r4wg(Sc^CTKdiVQL#e)%R()YtsE{jsklLP`g&`cWL!q6sdbhZHalFxHR%Nd2kHPdgCu3 zqX$ern)F~$Qd?F@E_(d+Ozq$m-=btC?D7QSUu3Rgmd>NC?rE0aj`$16pci(WHn^bP znR!9Ww388laYAieW^L$JyJhF%NQ`eFf*_N*jWWo#dBoNGcITAkHizwI|NW}6O!$w` ziv9ki5b7`5FjBZKoYFaxs?ikY#=qfY<^ATKz^7AA^}zLeXpec*oqyB?=$Y=3jyIpk z*rst8C!OjBd6wFk5*Yr@_~-oOL=WkK-c827`-!9UYmM{u1B2dI=H9>GnFLU0BWQ7A z*aoz6qI@zglh7Sd+AzsiM=YIBwXQz*#1nL_i)}s0M_(Cft+<~EZ5fZNzMj;-;PU5Z zUiSz7(LiY<7WA*S0b~EDR%&5YH2{kxN6>#|ReQc?~Ekesd05Sr=I} z0x>s7n3*~Zqk40TKYnu*QZmf|!)-%mEN#yeGV;u9Fp`vx7s zFYd{gVM3p76ZFNJVbl3v<3Kk{xsfW1L>}Td@zT`b(?3;CJf7|oF^RVU;t>XqoID2D z1fbs*G29?Yx_J8a&(VVWla1_O;Wz;;^{XcUdFV1}SiYDZ|J8RVnaewV;*(8Dy(Rqg z;og1t9#wNa>&FL7dHJ2XQ2i=mhARC)SYfqQhGFlV>EPCX01wu)Fk>1st=sPe;jIWY z0-+PpS&E(jM=#hQKTvV?nPbtj*Co|9qpd@4clg4=cCalOpP~YnO9Cyf!-|}{TRe>+ z_I#n-CjGw z0*vVCWm{ppuCYF8>8{pGPUNm}4*TcQAve`H5-pRuI(yUz8|lv+G_q^tVSwS+Vxpc` zhx0T7hvY9cR-kBA%ajOdKe_X>rIiqczqMoSf}N62f#c$F*L0dZZbe~94{W}rS&IE` zp&2oTPYchY=()Xx_BQzM{3y)`37!tWC`+77=hrO{MiZI#MPe@mN{2#4Ve?9wR^yR9 zH@=^22&J7P{r8a7j+Q#HiR zz8jC}x=phM?x|DuKA>*M1z+de;pRwS+Zq~nR-Rv4=86V2Iow*~XTN1Ar$ARP>6YHe zu4sJY=8xcEwGFP;6YD&yoA657clyiyN7^~8dh3;{j}oXS6*ra5y>#4#VooOoz^qbv zdwMVMBILlEh-upTu_zq)FL(rlykoB|A>j#=`hdi@4*r&8?lNRd_nZP~{f5GE1y^Ph zT}j(9FIJW{cfTv{m>kNJj}^I{GM+0x#f}8X8-K#fS6@8LETEqN*Lk|W?&Z(>79DKl zB4cff*AKvLWxdBjx~-^^E&84r56((JCoppvFiyv2iLWI-l~h`|?2!i`0?q-~$_o&{ zF;mXhDLt7~!91+dg&7h3e4zHwHNDMybOzE@lr2?#SAbFmt!sz_w}f8_j4?g})1*f- zCbf^8mDk^SUHm}_p%&Aw2?Mr^J0Qfn-^Pg}GpC@_`;ysOxf3Xeum3GA^CeB{W;{_eGN*)M+9Rc{0paTX(($3?)zqcb3OBuh5=2VoX8A?9 zuUzZWa^W3$Z1OaQgz<3HP52y<|T0xX@$u1gj>vC5dsGw9FhCKPo$%b^Kt-}JVd zuqklc*9UouxKXnnt{C=ubhXV4{je?33;}=Jgu4=}BY^+GJ#|PsJ%yiX+3Ag_T`a_P z@R_QWnfb+^Ys2f2Ly$@u5&r#jMky*I_QUKfr@9R@rT~?}o=Cc*EdN0f#YMjVA6>>T zKwT7zf6UT7xcsrh8dd;GxACR?2E!(8z#J2ZQe54hx{xO_P8+AHB2eoTx4MA)SCtkD z4nmov4k!;ao|t^uPX|(L$s`R}*B-?RMA?709YIy$K9;poXrg{Z1Zw#7<4YiJyYvUm zEq|^i9&m^>bJ@V@90Cb-%w1C$@LoB5*l`7(i%b|=f3Vrj&87*QA1VyE4q%GS@8R4teUvi$r2;6w*EKa&@d6X#DLj|BEL`-O!2eFYg5Y<~nr` z@1ofyNlLG6p9>u1s9Kek(kP2t1fbGUfn+|u0O2M=^<+tYw0e)1g(_q{=Geh7wsA$e zXEVOXL1^>RLhP1+i1rG}Mw9#A7pJB#W?(|qB9VOGHY3h51-bWGzGL*5TguVnkxfwc zK;W!`TQ(Gl(3vbK9QHFhSl1O+F@@uRj3fi4;MP z(CBY{85No$*-Sx9La+dHk!*S5+7y-Eh{)9Y>3q|YaS@+r_>#GqIAdq^E9x3=!Gu)$ z1Q%lC+_LW^{#${V!iJ{8w;r1LJR$elD)Qp6lrMNBLyPjoC=|O<%%%HGG~00sUQWzBD@ma-%f8DH!LnMhpn@Oo!nACWz1-E*JAg}7Owg` z_T*kW^JUDnV#2bP-p}T+l*pJI!&Z%lu@YPf624xdjRoK6n*+zr`I z5eJh9@xjfxT;kjT)|t2@rq?JPG}WK=byef{(81YD`TRUVJ=#N?huosevt+ix}L zxgb0O?A^)=8lra}Ivf!_(hsN;WfZY74s40g6Z1y{$8lMM8&-B4#wZt_syoe?gE$cU zQn<#)(3E3`=^p=(zKa&gvNSGQ;wxxe7_J(lMDMi=kQO1+v9;E@g#QYIuH}Y?Qm@z~ zU@tn9hjC4FxH-XFI*qkvsu9mJ2yso@jqnqJaxs@7Cgw58N)t)<_>8&^;S|yg zY|*%+=ceso{E(7!er2f?h#Ba7m|$={w)Oy9ahaNr5aeUxJ~arf zx_~5}_DP*%O*p0N=T3$FN>3*?+0XJe-sEbMGx^Cr<|$KOZcQoo-MGr*f4WE%LJoJ2 zY}?@jx!l`PNZ|^wtOqZ?!^hRowF6gXkD`S$g`VZN_Nt%icK4R@!z* zyqhPNv{Vw-g2c}#vne^b(GQp@?$ie{f&q0l;nZj5UC#$|?>Y7@*e-;=TSb*DhbBY}5UuAhb~Ccnz1lp#x6&dm`s zOZSR>$Kra_KUMN85_Ojo+LgXU9AQp24`Skq80pMTUSkknf;rYJ={sV6JfFom@+&=m zs93iYx=QEt8Uy<3b1hH%@FdX(KO?zqN3{FlgW=+2@X>-f^j^55dA>D7Ri6A z;q92#0dXmm3$N;D#0t&jBiK#vJ_RUu*NWbErM45!N4c$oHY?w(rsB< z*#w4FyUgeR1@veMXHQrs_DX-+i+~`4g-pP^CJ05Wq2?HxT;Yrz3MW_Ga-h+}pz4MI zV+AA%a#xHp4#=aOt>sS9KF2S{;;vh$sEF;5I#r)PtfDN1tUWx`<4S>% zgNQ%G$JfYoP8+IMHvw`PYdmjPYQ9#h6xuBKAig%4n6`zb#~iA}_7Bc4J0yju!0Fn{ zJkC*A?&6d&P50@NkGzUj)E1T4o#x>tTL&x%y3~eK1DtL$fdkNYN6T{k6{Fg}zw!X# zk5(BoGRooS8LFVolLk`=EGk@kr;JfHf5%bOIS!3y8N*s0nt&9WsA?LxMmhL+%yqNT zZ4sG@(Z9)+zI&8{gzY zBh}sPxlNdqNx#gnxLYNbe!n0;5dG<$Bj^R?{S^2=n&QlgY!BNDQ7d^T0HF zctpl0?V;+>wM9>|nIGPURiprA`2A|?-7kGZkLM`5p5(J|#;3@^?LYNiz3I{T7&Qox zDqVy^{>C{xx|5bH`t;%=V5sC8t8E=Hwzhbz+E_I|ufk>k0vz@W$9JeMt=h;px{mMKAR%U84m~aM#cHqfqd*Eyp zSBDd|aPNRKcJOO7pvF7CJ=aa!3w^^Py%TH0;M9BjWc_#h1^ey~W;rE-oLe^3RWi0DuOL%c z$?tPpaD)rsT4zOrOzC$*LeJb~6aI>OE3H_Qx2Aa2q}~-gRhODBiE!sGYdUOcsFD4l z#~o46VH!+bq&Q>=m?@>si7r!0?uqdDjXriu+I~d#Xc>4BDke3vC}V@QP)v+yK1ew{imf0 z9f%mHUIHMB6D)x*;oFv{qn205lZooCle0CrC(KthYt__#A#n?fOqXPqX|?LOy$)eJ z9=kImgn}d6kbTvTf)3JcIZV`;V`%LXgyRKe)B(8m40K+>@F#b9DG||N+l(U1mmMT+ zyr}I=1J01bb|d2~hk53zs|Wd)Cg)=4u6uE#t0 zT9XruAY}z$=`v3Y3W^0o48*KN%~PCE>-nFC87F`ktoHF}q@EIQcX4)F;e2+!dSVdjjUWm$z8(Vjrb(RICIqc@ zwz>UrBcE-S`8KA9MW6%3PBrJTo}+Zk)mZq>jv>7EqUSBQ#+_KSEep$9F)%DFV)4Mi zpQ;wNBO}@tCdZewo_Vpu5dOCAnN6iEE{|*kU!-QE3*@~#vd^t<`z+tr7W9xO@B7*& zZ;yriqay!TK4D*uiix4=OV`#K-FUShn8l)a<}0w4G8l|K91VZY$W9!tI~0F&(cJSc zhnm$lGzKB@WCF9h&aRXmC;jTX>uoR}_hXsh0bNHnRgcx9VF-*?H9kNZoIFgPO$G`! zO&ky;>O9FqrhDfUdFPeF%|T$pJke;*48J)mkry=dEOG11#$&gahT@aL-lr%9#Tnc{ zztQvZM)(b3i(Suv_?dhFF(sjSGd;|c|RQOvVjiqD7qH653R{Kn_&40^c?4ovVMGFhs0YX z{LJz7*2mkmM#!S)j0ta2R=!|%#aBXGFNoGKT_JhX#vL;tp7W^MJ(uY))CbC9&-EVBh9l~(U~3276zIR(LP&611diKn#7NVUuC zQ=4;tPz%-f$y;gVmeygJcChOeSb>)9{%>IkL;7rMZM1igy2hc6N)06m6i>cpL@!1?jkS7J)qxEQeT!LyEUNTe+LY@Grfvx2}kspv`cHaC*J zt+*tVy2qW_=HvDVzm;qjEQWjdB@cg)t&8dQy2#dA2KKWIw=Z9(>(&>&hWV`>Vo6oF z5|en4(HQL)8zV3^BJi|K-2$=YO=cm{!WY~w54)xpkGmThpw8DwuEJv@#qbTW`mnEq zr4m1EjTqy*i*6811(btcKg8^6ozjcEi``u8<^E}l#L>gI&zn`x!W_h}K1)1t%9;NO z@ZT|lpQ3L>_V-_k*upZe&;9~dIo!?jTYsXg__JNnF@^P)0!46LToKHf$4bO0sW7S+D?k>Zb(wN1 z(;kKz1pf(V4K`%z^e2sqEWHB5Sq_Cyu{Hlp3s3BYCtl@XM|0N?7q z>8vClz;23|-lT4k%3hVa?KYG)5`U_L9J0Bp@7G;=jc133mY7rO1E}VjXPJw1!i~gP zMVB8aa=N0M_vIr93h=H>dn)#K(?AJKcmyZo$T!TsIogvmy){E2wiOU6UKM`xrBe zKCjRw)=N=BDfa;iIUU9DDX=8;dqWRORqajt)Ya`(N(uMCa2y0!>GKUC08isWw-%!^ z1O!g@JR9kUl7FCyfA4wuhF-J+X`1AH+2=Z#uARt)`3kihSyw4_@ryiO_TJ5L^b%z& z05I;AvwS_|aSqYM=YzE|Y@qZi;A2r?CKSPq=~C80a1$k*bZVRR9mel29tDgX&KnzfXc8>mig_W(Q*r$jf z@y@P@Lk!vkQF;FFlhEe&F!liRkv1?mBtCKf5S|{?#gd(~nLe%a%ekg&{RRy0jBEl@ z-?vOl-bU`w13!8Rvswj>CB$)6MU8-8O%dYVe!C287u@u`v8G!}#E>qmst}Vl!J>GT zfSwRa)*ObyvNK@XgsEUk4^yC!3JcDdQ{N;mI*WEW15YX3CsQ=)|L;2hm13}|%RX5? z?2{!LSJ3!o?7=SW_m2+gT%NO)XNBJI%TE*eMvIkjkj>J}?CtCttM_LbLib-Wl5@dg zu1Pn<1qGklT84(<{`2nrOI0ftFXv!Z`}7Ms5`^+*GE)sjI~dYt9)~BVsl4F zVzbC#F`HzOvavE=$mS6)16LrA-WbYX+6FJ)Y;$=XQT>|SsoxI51%0@~XQy^CYmhK0 zAn5-|Rpu2l>^a*)r+MC`oJlZ8)JS>)p*tGi+|p*LJ%pj>R-#mu07Pq&DFaV*lfw>$ zQW^mlKk0+~z0xO-yRFOSM-DWTfJa+*8MssFb;iNWrY-Zv%w;g_B^`j_>SO-vGw$M_ z2_vThx>b&bXc}f_byFDC5OEO(B>A#@t{?4}`V>@WzCQRK{%hoI9)fOOzy~MIS!4R6 z*g(R2*%lV4+IU6{rChD1IY-0XvWZnMgc_fp=RB3;72BVomP(sy&*&q;maRfcRBhjT zD{i)y`mj`e8#4COU1~LzuS0u(z9Z-aK#s2Na{n+SG*c~CuFWQ#D|9u+7CPmJlSz4g zk|;^fmo?TXKb+u=l!c`P6d1@NIey*Ga#=vu+-dzW~W!L?^#4$>AAg{_pL zvFRgn%$pN3bU%C=@FAQNzmr}t*D1PiR+FoNX?m<<6Ss+5CaZTWV6BCBeg(L$*Mc1W z%2(>WgUyLg$+6@)Q>swiqplryz69pWyi)HrOCTorHhgkP987#H&mr`yYu3N7j1lT} z&zYhkwLfkudYHs1D=)X|hz2r8XEBeHAyABIy$Y+)d^ytABvPI{QJm~@Z}yhz$$Hk8 zjd8F$M=>Q{X2F@NSYH7qd$mM;8$5JvO_{RM|8L3#mW{3H@F1tN`HF-Em?_OG4GEiM zssRc+H6RYKD|P1`^Os+E%C{FLvr%bUA^wVq19*}U-}H=ZE}F;bm(Y|`Z^pW8^o|P)sE=Za`OTH8V!9NTnYwu8{P1I^at0X7KK8=a~W^5-tsP| zN|ZLI{oZYJh*92uFfJ}+$fCtct2Vq;)g@wM+}5wQjPw&81oRtri9GY8OO(JU>YyeL zZ3^GYa0y)Bnie5%SS(^ly{mcYkL+t~eJ@LmwEWnKWo6a>p|U!WT-;WgEN&^?gF@DHgN9J*kaSpfp{+`bd-+$r0@9Vy< z*YkQlAJ03p6d@N$m-i8I@$DuQcjU`Tho$t_tAmLa1(Aw}8f&IS5*{=Mc5&LYbQ+cu z-IJRmhSwMV2nS*JAFEvcg+`*{%@_neT)z6vi|&rD-mid>D0hI@TGXP>^Ymei{G-&t z{+I)eJ5|)U;V6sVm&)I7(6V;*1I(EQKCsh)-UAb5>0+;>cW>gXFAES!U9`-A1N>N^ zcxWyIXdML0th@fbbHRTSTubCV*t-QsaQPS?k=0|7M;N1v^_|RYyYeei%*U}Bf!kJA z-ow7Cu57H)kOYrjSRni?t= znv^9zL~yB@+&^6#BXNX?!%iRFt3K}2nG+vW*#FoLEX$u^`03q{bAC0gii6WAlOwx7 z!=Ec`3K91GeF(du(eM;L# zidng7Y8iF#h;cpW9gt7E2h~6hyWjG02&sDQhu9BYl00Ek1=Uq2*gM_bA@?NIGbS#@ z@7!(kDc7zWB6U+_nKje-H2J<$PiYta>lHHcL^pG$&ctIoP0(ilHqg;{FWn)^^}0=; z$(e>DpqhQfjH`qLGnb&1#{PFHn46Fy$x!QT~)4%6jFDFu=A-#W}mWqi}Rra!f0|%2C zIhnC_P}c5>cn0a|X&(HF?aVRld2_a10o$;D-OlP&V|Gv=lF|N+@BSFNV6SQV^5V;G`=F|Hy1fI5Dr8Rt2XW6yk#ZvF-paro` zT>Q4b%50IHdsZKoW3JveMDD-QAkdh|z#F(Wqq>GQ6>OY7D}3X_3G=HFdDCfj^rA8B z8|_$m9z%kYt2?|lLpzgEKO>Y-k>mhGS)L5@V)u5SgC9yS9ppdbNZm9Ap$>Xy`i=uj z%T!ySMC6rMt-14)Q`1{Q>kBS>Ok*TO*jO8!@1(-dI!tZvbNks@$`R0BTlFvh*D=9# zI73^4@T&gnzX{?z)TnXS*v6k})pWC;@-}l#nkzHtQAkhf_b>Tt1XXjuOi`Kq_W*=|6$i3-#u;pn)ub zNz?qNrSmJVTRtNKdRjCEKYg6v;C|u&n>uXmh|q5OqN5Ab#8&BCXO2J|-!!z%?bC)7 z@}^ILcG-~syts(}eU{Im#tgrk9}MMez1kt6g^lj$s6P@c*M@9uc`G?v2oG_w&qyadS2sW~d7dx0b?;ey*t!O~M$B**k3vbnzo_i`#9lSpk^1H%)Qf7! zD@@=kR+x)wp@46p_RA)ELpQoTkkwEj-{Ca!-*sh>;r-AS#IKP@Qi0c4d~J9u$6~7K z$vgCghliI|mU8S60UZ#ykV_E~AF9xY*~BpG|Q zmd(`AatT~}J>hQ5M|+ zt>d_z?(~cNJ9Fd-mG0@%h|l-2!kyP$Bz_Dqa%ervXy%@^*uov#;=L=AH0r;qkFI+5N_m*2+$aRO{v4$Bvh zkLVTys$|1(jAx#P5$!VN{Rs+&JNtSCyf?~cT(hu~H|4plPJ`rzgso6rz&o3#MCvF= zdYAIo&LOw4!^lB&!lmg1O&&TOQcz!HS~JM*TfKY9G;X61mJMCGI>V;z6nWSA20grD z`q^=>4c|er-z1KsP+Yr!X6MvQSb6BI3;g(Y4=3IPmY)R$GWB`MlPCS49 z5cq_L_@l|j*!mk1Z&w^7gVy)#8P(BqP_6cSoY9&4`piStHl1;bP#F~W>jt&PJ!_st*$&WkcZ1Yd%-c|pJ;>H&SRJ^_menhcfP5fs$Coo|C0kTk?Ygg9 z363JycJ@<-J8?H>@+WEN=6f?Ig`T5mBA6exuK}wM0lA#LUOI6cd z|B8w__-{KVv}b&`*~w?Nn4m&Qcx-+|J=6I6H$(6o_=8@53^u6{v+I1#G2`6JW@jqf zyWxmgxUNU50h#C@AA%W!H?vQ^V)X@R@#E8;N%5?Kp$D^W{k(!%64G!@L$uyu{s`yB6!GFF z?9{UCu18M|mp#9WtHYm+%U`|dT}gt%@2JW1x*dDvLi5v+B8>7uDe^HaEKkHa zdx*h?!xF#nkt6VH>jB9H4sH2O;^8w*IS+je3XckRXLMDLqx&^;rVXJ#LPhU{Fq3wP z&7BuQ_7!i(f8}=?NeZ~Dcpff#s1@Y<(bSiRY1H*CliWVETG>dUA}-vv;+rzp z3d*&k&zQ%xOp4W}#0X`}J(T!_ObAkLuA0t?scSxjP~%d9_nuWlBEBS{GBIhof4%0L zg*X-96cEWV-bXzTX}oNlzM{U{&w4TPU8}^i^|KN-o2Q7lx_2EH9WT+c{%H29H#FG! zwxO7x_3@hGCBWrIAUZa;F~B^KS*Ot;v4+tON<^_Haq<;b&=xLt2GC`O^fB6z` zwdBOiq*I2~0~apRZy?x-)}VqWVAJT^SKux_@&u2eICxqi#m_gJe5MwAyR4*D6DPK- zUa-p5n?-$dijwW_g`cIXzelzXSnm&S=O3UEk_E0d%=w9^pn~@DzW=s6P+}zdL|FA`F6m zRjBsIs#El>%dAqg(kRd|O*Rl#VKj5Ig~;u-I{xYN--F%#6B2W`lS(KV*5q9U1?z6_ z7{EwQY*cXQT}nkce|_QE*?_`uMcl%Wsq+^tK8Y@;&&e1Tc z90Om4v)A44&NIGAg|nx-NUGWl`O9=s$NY+?sg6tY7U1+~OKbVXK*)voH02MfDDC5; zBQ0#Q^4yy2Svu98vfGG3Yyksh8OS|Oz~L#?Iv*pmr&lsxCS=FntB?BOI8)F0?IFB3tP{gNnG(tyyCnu8_KTrm+Cq#maZXfI} zzz^5V0y@xh2glfoVos?XHkyB~kz=Hoq>|*5W3pcYat;?bs+#obVI2-S?Lb6^Pn>q5S=n(A_!#hsJ-X8i^u3|0$Dag zSQA%%4(N^t4s`<(YZt?k`U6Pp*qXgJp0=%MQ^haQ<-4f+x7gs~T+ZNp?NDdDH{mrJkefKuSyC1|0 zPYK13FbWEkBL-nl?pxl_6Dzkcbd?^Fg>R5R7S~h$*NP&-E|B5Vf|VGot$z_R!L=0X zBCN?CT5!^IzD27L}y3V_lj&2wEM~?7H%gU8n#WV0D#XeiAGDnq<3r9DGlJP78Eu*Y$U>!Ij7ziLo?$Oh&1+>YMYi;l(=dO%}1>T zHsi-4Y&uofUIy(=h$}1^RtCHFzNGt5p1fc*%K>e>aNP(8N}2lycw~$gaq5dK3RDX; z(fqRjdHUb&oVozM0J%xOAl+w34SNFn(~coi8#+~A3dJZ{BAbw2(6Z~Za9{%{ z6L9xeqL+dDQo7qH#N}I+oOuUuqceq4RJTHn7u!$G)#b=l4E)~5N(Vs^11A&>T?Z+Q zNJl$|ck^B67mrIUWRy}=6w0%4YIJ0IgLi9vIPznKKodX9Z?OqN6Xc87qTE?v6LEKL z82`}cMUo8G{_M9DEVV1ZXI)qs5k<%E$?di%`4<2Ph)F^jM3VYtbV`z0~C6pib zXOl`>#s`BpMSEITm>q1DQJ~xCg(XY)iz>6fdy@~KzUN2SXnAE%6`j+*DaBQ0>o_|~ z7*xgJ?X=}@p$KcEUKwx->MwEF;UGFf8cblT*_kmE0i`wG|7j2cy2D3bu13Ie!cGm% zl&nx2XE=Y3gojMfm{qh__%BbIRjef01h>@QJz7IFTKrfb?vn6F7}P+TH_MR7pEn_U z?kPe~kz*6;jvfssAne~tKRhYvB-nJF(+dR}^BI0Q23XEp#K888{0&t;Z)b_Qgq}$V zA3bWPXUN&x*=&a?+(*SAmY)7B{df>SR&7Xbq% zXr;L1_jrlU(pOB_S*$;^>{K>x^fe3eP-Yhr1^qnJ9hTaD=0&`gS}_uQQ=l+jX#QyI=EuZkV<>;qe=^<3ROLaLnX${&Ef2n$C-U7Ze z8~X{SB*J5Dx&P2nnUh$t0RJ28K=x=oc`^z&o+D1hrs8QwsPUT4ISES3c9xr~y=g|H` zeg^}KmXE_K4^k`IixQ=)(1Nj7WPLB(vm8UZN$wT-L7Rq8f$A8}DC2FN20`&Bax2VM zw^&7yiaHDzl%FqLG0z+sv7S#$X)?ahqG+{hr7SJ5u*en!cgBAzIzr&~JoD((2Hh*l!N) zSYn5Bh|}QpWphqK%-AVf=OCPda685 z8rW|g2a{719R7v_zIb%OHn&^D5%l)i2EspHo`iGLVS5^w370={I{Ff)>Vv;Aed}`j zbR7tR#El1@;fLVU@&_r{kee;HqQ_Au$wp`NnIhB$BjmGhFF&is1Lnv>IFf0@G${SH zX80Gr8eT?6NJIq=K#yDi39FrOXGrQ96>?mB}GtRiw`c=N$t;|ZR60aAsDV` zHmjgs->Xj-ocP()&XGPf{Tq=r_^#tml3X#2bdM>O+!yN`;rzMFkp5zdAH~%DQrj=UYOSk#RhT+eR zHN@Bnuw2+T{rBRhyXaEjLW>R9eKyhjwib%!QS^lhtu-`q_S>#@?azhshp&RmMQ`ro zh=v!t$g<4xi_0*A+@PaBLw`whz3c1k91V{+e8Uf$;A1`2Sp=nzJsM~No$XocLbQO_ z`Rt}$e>IAb7xMi`R>OkG5O6J=+|(7r(QbQJD!Q6bC@!P!DZjV|JAbk7V2*@81q#(S z1rdaF_?g!;N;4Ie`nJz)NU7{V0~y$Bl?x^-%eF36ZBD`mN0i0`3D%bx53A9! zQE!oT@(!U$(8)&TGO{$~-qKn$cVe)5T@Zw&_Fb+b()sHlCUY$ZZ-?dcqfLZNXgUIc zG^&&>2V-}F>8yYJE*$?Ft%6lun&>)8l5eEM>?}!*UP{OM2RkmJ+itdesIic;j~d|3 z4Zdbq5&7PE@y<8RSZY|)a*u@pYx*Xj_!t&Hkpz)Ntv2#ehI)hRc6WFQ6$$}CRq0kLk7+)iYQS?5 zH{aZ^-Ya_dw4PJsg5#HhP1=OuVIeU`(mDAc7OU5-BYZN(4y~V*D2pl^(=5Z4gn9Vh zEAk(?D<%_(9h=`2gnM#I&&G>BZN4O{&ywDV7=V$wlFHK!tzlo$1dVKw2JmB6!;MJTG)vq!h!W~qELm0pkL%a zsXepZYjrS*a`~{9R+nj+Q=)iZW|)8mHEwaULnVNm2*pEK6gwlInT%M}0Fs7brXXbM1`jMh|&SR=_qX-#GhZV2Hys@ZBWJLsl)X>+-{b zbeQ$NW^DkJ5kQfOtvcD&K-tkt-VUe+k3cwJpqL}NmVl*-(tl5fp8RN*_h)7LUiruF zI*A!o829s7o8|2r6~AStTh~W~>B+{5#ZLEU&wao@0qdTI8?1m*lV)H|o_*D8S)>ka zzdr_EHj5II6xx>$p)ge|>?h0wWY7NGWNC4zXa9GB$t9=sJ-|WLf>D&>y!$fUi)dS0 z?0PEvhu~Yn-QkA~+~hk4OS=@~Qg73wFwa!S<;w8B>^w1-Tw3x+f$1$0FJa$%T=Ek8}4HX1}j}cR7%EenGHGVEi}4HgW@QEC2Mwzbt zat!LuLK`di_*!O=xMML6FzIp(9j1HmRqe4tz$)y1!^Ii4Y_*~1k&ndteGT|1ig%Q-Dx^kf^8wc?Gs@2?6uy&3m&(|>p>+<;p zD{ta+6pF6=NRPQsIW5#=U8#68(~gD%bv#bV`B%2Gahee;*O4CARCqO|B3ETq0LqgJ zgz_~_1=CZPC%@O-k|tCDZ-->BNorG8w`*w2(NtdLbreNG8<6LcQhqi0_gBPkdxoR$ z8GNu0vj?}E0gwCIS0(F2Z<6VigNWufzdFwb?r*{S9lh^aQ!X7aI@Q@IIxL)L#b!tQ zB&6d2W`0C;-w-PA{I9k9B1p$GQWe}95xLiyh(jPVAEwm-%7Qq6{1c3dEr;_{N(x8a zn<24tHlb8gd)zwkO=f$E#Kr%O8cvYpJ+?wZp0>^?ahT z_?K-OT_7h=;{?(`!kaE}4Z&`9GGZ#)p(WIMoaE&J$a&jN%rlvht{U& zY8*T?QO!SFIR_Tzs3FNd)Rl`n5>jR@32~5;)K7lv|6Zbo{gQ~4P*ea;n5`kCzQRk(|du^z4nj5H&H7~+q zH@UNdcC?42h0Mdw8Q$L$jr`UoUJ-S?lE|&!>iRj-?o?(dmlH23H&aipBc{a-A0S@_@oSttFjAxm*dXh)cljLk zL6f>TkfB~+c!b%fbpbscb9h?6w+6K@h;PoGpJtG7_I=*hrnJCqL-w_2n||bOFK=y1 z>nGkXyLhuG*_|XDz>Rxd4R#3&Xg^@Gf=i)uzE(VML@Vr4N=|!2PCwQ%awH`(DqY&U znfdqF?&Ko;=Xx|OrLXhV2H)Zh#7-XE_X@eyT9{$o_W+pKp`wSg45Mq|o-0@_bwNMD z(_C!ZteeV7lKn9t@K^p791@*dH?j&rk?xnsoa($ z`ePvm(g4Pz(mYdM7y~SAQBr;$_Q7>6`0D+vSji-PVKB`u^cHh(b8}Axj}&%n^?DVN zlu^@@li@+qTr`m455L#em_g^04l^lTx!hYNiz@1myDn~5Xo37e7+YURlcj%=W>BpR zIG76Tp1?`13YjyAAq@DYURQev9@|D>P?4wo+w>O>bSds_pX?3@xOB(BWu~1p< zwop>1l&FimPn~3Y+Ft{b&peF6Iu)GJ=X!lpSJUE4_iy5W9Q)lcFdt-{i6;X8lRHbBbSk8EveyuM{paXA98U!cTYp zR+~<@!cxpYCjY%|w;|@z(77Ru$;A)W{EF_{94M{TZj3N?xuWq*Vo7itRaa_g$5gGp z$LZ|fK-ozzcOkDqi`jYlS`%Nu-jn;THL7UoGxxJc6bBaqt%$1Ybv9ju|?X>3E?%@dRaOfgp z%oSMFA`$t{fYH7r!)pP`I0 zBm{Em-wKSCaH~V=#NMDAR0xpJdu{C3CUw7S=pIARAr_GT`Gm-_3l8VOidqtCD`0(S z^k_Dm?!}@EHjjWV)Aa^L* z?zj`LrOV|8hU>JEuA`S^B#-58@p)h+p&htzW%l6`TDoBkQN9Dsa4}sjl7&YOy6?3P znN{Yq;oPCZk0Qu|OZ-TKkv$#H9}8c!0U4EAqCkz)OxP~(Y^ruKM zmsOKnnQtmF@I>IM2I?rA9>H?+zusbgE;zb|_KZq@ZW9ZyU^SWemAFkTRLEmpsex_L zl$SJBovy_AiNOaEE3nL&Uu2>8KnLes*KhvTcuX9zN(94ZJC8No(CAr2Z%SgUz`8Zh?^z2eia?<%y(Sz${yZ~i5_y{uZ0|6K`Uz5i(y;qK}n+LU%(IQz3+ zkt-v?>}5~wd}I0-rdxH?z0>X82#%>8OW5qUw)CLZX&vHv&4f8nigN6PkJqq{3NWyr z9Uh%NzO*B!- z%eBA(^a@P)lgsfrGKf_m?oI)4lEw$*w6a zf1tLsf16ZbYz8)m_Kv&9>QF8q?$oFR_88D?wqufkX)c$rR3|DJxtwIUQVsQ8%U2=e z8-f3H!^lFGnwDaMK6|hJ!#JCnB;f5kzzXA+@LV`6*_2jiIs`K>wga*VVjz#~)2Zj0 zpS`qF88fV5$Vwrsrobo$HSe*uic_`s)`sH3T1`QkA4~!?lI`DF;SUBC4xS=`mA+RO zJxihtA`_h_)XUn&mrNp)FXplM$*HfJh8%Cmj>Kb|m4^BTEEi`^oT&y93f&a8`9pzS zkxpsf9UiL>F;fxARX#oln2!R9L*<=k9dWACg?)0}Upi0rJKvMXy>JD)u1Ozd?zCWX zvi)%LVXqkdT$|TmRwcR7wM+(h-odZnZ=cHaY*X9! zb6T7`Ye%derEh93A0p^Evf1Cc{h~6tqV(-}=_|@V+G%Gnn)lP>7a%`^UB_TqN_aVf z+*T3Rid{9o;1bjtwr40TrI^$JsLHuPy=Z?clJc{}IBEKE>z)-4*?{*mr?BT9AIboe z3kuUCwsdtLnT3z~pYZ+d^|`A)O-&acgV>eWEnjDZQ>jrySO;u_;-B0biM|v z`7Ladk?%A4+1;O%odz8J{-qTQeQ+h=yK z5n_{54gu24cErKobJO|kwjSE?U~6+I^Yc>A0&^=|5Pvi z4saNSdV=JMCN&zrM(i{@y#GZFx_f=_0gZ2zmLvzt#FR}Aed?1XFWnUtxmoBVouu7h z28J~698NKy%2(lx{4xjAjeiVPZH5q%QBpYCrlnvLH^Gqp%!O(P^S(RFt*@{8kMg$O zy#4xzTGHR}37AMgV4?Gm8U(avrZW);`5%kGpV-U3^MrvT5u{8_Zuw=>8ce&A5dm%y zeMEd%^ZaTRE*nRm2hU$2G8vWs8=eI|c{e&-k*v^KaGK}t{RB+ItJuBoazONgC`uGp zaTqB5Bf32vc?dKxGjwR0alo*I~ahm4}SWf+?{9_0E6(ZYv#f^&3;GqGI zWFy8ahB*OlSBQA>(BG|^yLmPnFMvbEE5g`58895f+UjqPL|L; zTaw`hj$#lK@_Y~NVA*8H+?BUA@p{rf$r2UB3JEPY;@zwv5Tl;Y73}uhMvD1CrLs#{ z>yLA7PO95WhUnAve$+&=2*`i4aMtCA ztgjnpGXpO5KO~dS2Y#|SKgVv4u=U>M6IVG~uqb|ZO_5|4{PvIjZNu|%Qx@}dB{2HG}UbDx|mqc(%jh*2vnRptN|I+UX7~Q zL|q655+wc;Y_WcRF`}4Rc987VzQTf)kuNEL2@a8KAgj_!iD-eo=MT6(jJ0z-r!`0hklhkfhOA65-e-tS}N%7)vWQQEZff=b6{_E!gw#nNP zOmK%G?dQocwK?m`zwIxehiSwGXHP!ASaBDJGbP)$g2_BG(O>G8$Ku{k3{w;I83M7b z$FIOxXL7}<897_vI0p87#Db$s%o}?Ir(UvL&fO`r`1iJZL9ZiI{WnZm`1a-4#nJza zOEpqpA#w{98UI~;S4=060kgW%Eul?FKn~%`mDEJw39Q;w>y*7Wd9o;zX@80kl_|E0 zJC*8dm&FrZpxWDI#r8cfc0OeaC0sEYq{Qc{mHfFMyg+4EwpO!r6$KCtotrFDF{e6j zM3GW!Q%_}FOt_Z2JjX3tmhL~=KR87~g`wnK{7?hM;44Go*$~x;yM6s?j(xIMI|%Ms zdvVpzTutL|1QA^-r#G}9U8Xk21$4CL-lC|-ZDKX_(CiS=F;SA(SJ2@u$r(v6SV#@A z^-hs$RlSf4v1n3z&=I^R#*O)3298v5O5C)&{efd41x3BZxLN2M+AaH#@SNI>(PG6) z#1`p1SIEpBuAsECx_KW0UZXgo-uVaZ$18kagS9Ap+iEBw2aIpx(V`U0ibrF%b>?G5 zIc2IK&|}<3h&lS%wWR5sqx;{2w-A5>nv|TeHfwHr>WTrj90c8DwhYH9n!hK?s#ALD z@jq7oZ8dO+0v@%Ulb5*j8^8n0oX?j~FFqpk;3ny?7exVzPa=oC)J9UV%HfBs&<9j6 zb#?<}19k8RX+g=O)U9!u;N5z>hFKu|M>}{d@x?yTY`>YQvt{`l(s#Kx(%Fsv5VP|qR2SZWh=EO z|LpcOujP$enn>dm*!`mBp+~$Sr{8d=2xRElkIdsPk?yq5VlTfSmlYC; zQ}n6Cc>X-1OZ1KL`QQGelc{T+Q}*qyr|hUDIPfs!){MID!}qNALhua^6>|HA^*6(h z&n(~Gu^#7<0Zz6Uz5pY!b72WDrp}Lg|>-1tO=9ZDY5u`Z8xarNrBM!OPL0qP9--`Gz~o#d&JS>PBqCbYU7f6YVJ$* zgA9`HlkPH>kM4z62HUfePYUj*!?IPoYex=geU=1oUafkUVCzR=d#FV;tiQO^U8)`3qW`uD&cK_F69n3uV%H{SIR0gGN$_Ej zEgW!UJMJ0PJ!7y2cOd^dw-|w3H5-1W+5*p3QY*y}T@$UqE>5$y7k&>*KN%<47X)7{ z{!|(PICIgS;s4VBdT>3D72)>kL$K}~w9%yY$Iht^ud?tjFw^a{a~!^Md%eeulAA_p z<%~G>S6^Ti1oAz!3F5amm+24*qaQ}IVS4QBbxQo;wfz%MXqSb@nFH0Ifzj-Ejk14R zh9!E*Whz&$N-=-b-9r4y`+(~9YI|3#6llmWb|?-3I{LGX5LOMPg7u;)5*-4gLdY>( z#Il;rFLy||u!LCV5AtT9>fWy63y>%LLxZS5Eo*pM>=0v_PM<@ej0V2t|^TzU5t4zPXkY7xK-(R`aWzy$g2J}pqA-8vH_JNvp)xeqM| zJj-{^qw9(A>AIV8r--O%udPsY(?jU4WP&6wIk_XFVT;l|AHW>z)Zqg4p=~Io4|937 z!j`Xy{;bJ>Ut81-M>WsN_Mv|njJ)?Kih*HAbgi&U(qmuKlI-*&%IfHI)rK)Z*$Zj2 zcVC478k47C;Ke#}ZsNg{2_PnI0DS!wVq{IXS(D9IZ z|E&#i@wf$f_YxLegvD?hAB{+Wyloy!?za)I-fk*(?D*{_)nulxBGY*|ICl8Y1N>#jUcF0s#}_3;WB#QoQme)T81j(^s0 zo^(Wj7g?gtRkQJhKLhk-poDJiwHF$d81s)3+JD9H6;h9$r@t-vYw{ zbuBdi2rfzVerMbCY>tnkDmRrP+@|m_L2qBDasO7%;N?}7uPwj@IFs0xrIV@6F+hKH z7dt0J;%Yd~wRCFj5%_@wPI27)lJT?W52}O4s9Z-FoF-^2{vL72$RZge ztNF*e)-hJfR3)$?$7g#2Fz~+JAykL=UQ}-_NN4eSGI+biWNb1b`AVU(!G9+0yC8ZN zXRnxl#e)RK%g6BWsjiqwVcBKDu99H8I{MxkAd4)@JK}#|76+Zl&Q<^I2d?bqq4t(z zd}tOB4LZe~L5;FNsotYs4bP4!A*my0xsB~x42zQzHM&w6ev~XxPX#E-a^$bolQ@L^ zq_*jU77nf?Zvx3>FUM(%gePP~{j>CH;@&?2E|lLh18v{yQzo3547*GeNq9J((-AtN znE!nmPDn%ayOus?B@pmt=RWMtL1Bsly9%6|1YQL?Z!SOKVje^|3BK{uymxKm1t7<6`l51< z_bfMK3S4b>J_YUpp1qauJ^d*+Ppc(dg5`blqgllfQFzzIds%G;F2%$22^rYvJt@F?rE6j3oxr`( zpeV)fE7L#;N%nbG=voZQhjPK$o=-(CUsE((d3&R zrS6$l%RT%7m51enms)0Oe`;|hv(rhS{#Q6;FMO41ONNJJy!$wI&AYT7xbvj+O9)8l zP7l7x(=NqVc`p)d_=&|05OhQ%^mppQ2#SX3+ zI$OFWrj6gdEx{?@u3Hht)Ni$yP|fFxpon*yV>{gPW1oIymObaDRWmBeDID7xYrd_R z^(!Xt6h%&qS6_}T*Tw)t6qd=3=!2Q6+C2on$<3GVgaGb#nrWqy`Nlx|cr;Sn@a7v; ztkX?DO8X4SFpaFf!;mc55?uC`*U~)dOE#8~UupJktYA6@F4udz$GHKpK%v0!>+qin zPyO0nkubkl7-fioTFp7|DA)375TtC*+*>}O=*@QMf}r8qPc^`|XpF^2IllV(HwaI1 zmXy6RqWLPfsIBGqT*GtGhsk?+UsnEg^I;|$W!~t9Rw|4mw|~QP_#of-IOB4v@W0z@ zf=pE+han^5w&O8sOS8%-iuke=o4>$@n?gG*G1y)w-qT0Ea4+hdLsC}M{nFfB)H2FX z&JsmYw0xWY{sESbZ2;Og4-u%tUnp4ytyR8Tf8EQ4oAYP`pxixXFoIr zRM=9%+`@Q+(wV#Hk;(QOEw`iS_WKzx1-P&V%^U~QwYEB+77qPjQ!AW(grEF%Uw;VU zm`n=Rk8tCV@}C9ugyNCPzmIBkQbL76eTa zXYm10Hj ztuCpC1jqEKl)MzaFtw~B3g6HG44K(gK7@^j36I~RqmjDAp#F6qKh$%sSl&^oH(GTU zQmVtiFIR#B$P=KwgSR=9wELBMd-CJu03izIU*0U`^3DrBvDO`$I>A>)l{O1Q6s$G0 zd<%>EhDiS*9j;<`A&KkS6Dw9@VdZBUq;(5rqH;|`)VmdJf6-oifXKES;6ve{AW)mk zVip=iPtRL82m=+a4X{4xQ(fn5!9scCb z@GB=T4!gop{m0g0zF4xMJAM-;e^$w7;gdL#)%z&7O?D6_Qx&$S_v;3K82Bd2;_ln? z0?=F3-DSSeXM!GV7TRJhgDXgu%f8P)zT6&ZhwrY5r^8*W>b$7Myj(I_BcW&SXU3gl z`QdhHSSCC|`HE%gbv?6!^X@c3T=&ZV`)hzJIEh>UZe(*U6b=ALjiB7Z9y!$bcR=*n z5^awtsOl|`J|(iyF}BT1f7^soQR8ao*I@ixWtZeLjAJc+YbgAfyRzJ_Ssu1`wOIDG ze^R{^upQ~vsE4rsnOilQ)Q%lLbj zE#LS%Zc+JP2ab7Z5$%OAQpg1U>6=EJUW$2aSnRdY!XiJ?z|a#z8ra>MPQ@s6Jmexv zEiNYhr@bErgb^A+xxxyWcH*X$*z$+WJgq3*j738vYj|3Cq+rt zT=?=i;cCK(3^s@G04`B z%IDp#z`t)E?3o|Yu&0m{*tipX4~Q=7PCSz< zr-ln3N&&24H6e`q?M%n(^4Adr>l3($=x$Y#&eQjS-x3Aevo2-c`Bws)%**8M(Fh9%HruBP zCnQp&(h+h1S=d|@{b6@Sa0z8=!9m=Ay}m%JJqwHVeKvE9IgQsGME{f1&h$KH3SmN` z@WFG?`|=MfBS(9D|5$-N8%kKw<6k;vk$=!;k|K{Ia?=r!D9({dulu`-22zg8P50cv zWv>DFIm9;Pi2@zWIJ@jxO&Ul~Pg1|cCzJX~;Xl?q7ok&tMtE5DNk*pp6~N)X0&P~l z{MU0d{^rnH?;54Fn$qHv8n4;hVfW_yF4W?fi*@$_2yJ7@kF5(Ac==I`2{I%hS`|9h zj}Q~^H_qxVsb0atu86j68|L$wG8#{+=5Z<~s!Nt&^UtS6j%=1hZZz2u5)JEpOi>4`-s$K)=2pnv?GkTsag}kqV<3TJ7w^jRU=Y|;{K~`w+zvNE zi%;8K(GS;Xx>L^}ZqeSC_uMX{`jT{y%+zKYCBKLeSKa|(qB$F!I`3A zwfKeCDra=gEALzgPm3ck>tA0>OpdOO!fCH`Dx24xY{sjyJGR?#;_5!gfeXcR`p<_N zOQg#`zRoZay54YMVF9+V7)b+Nebpr|V$}?tqfwQeUWe>c_OpavSKaLHfk`WQ~-C`MZ01>}ygO zvf%4)awo1cl^tuV{=%w#;eXSJdn#hRF`V*jv@_4RDHxx|ewtUy1qO93>Vn@eq`1lI z1xY6#lU;Z$eND*ZUtif%JuUpXE*{mR4-8wpj5j~^3xDJdB0jsFf+NJ=)0|wCB75zU z8jcY@*?^|@jIjsE_UOQi6 z6N+MLfWEMJe|Yu37e`G)`So(!q&Al+iC#C7g4n9$mjKcY%VjTx{2$89BsmuKV}8{) znygU>$FS9hJ##;-mbiPNeu5#9o|Fzxvi7+oc@j@!dUU>3?J?WhTQjYt#Ezr{ z4v4l$nt4p{LEVrVFl?J~qy@ZRKt_t4<9terBkV~b`w~;{H+TPK%?#0`^mRFTjdo(! zV3#Ki*E;gNFPWqS3hodn&xR{hZM^KottWF8;x2eAM8F67GBKo1CA^r4-g%3Ui_Ktr z!;oESm2V&a+G7;f6MWzB)b4~z5>G?!EwPyO1r!%nH;PNeX7SKl8`FqP9m6}@k{(E) z(C5lg=**%&Zv-L)TTKyHFekY>HO{?hAp0qt|NVxYlKIIV+(JYhBAb+bRtzYV{T{KheXZBMAN!}G?h&-ZX2H~D$vovL{+(Hv&squQNfiXZ*) zDq8Lrg;vq+q(xUeoOg^?Fr1SlD9pN$cc2mmI_9fmS#HVpXrOwEDur2-@u}DwcG;r) z`Kaq@)5t9T2I5tHi}v%p34ii2p_XWycZi!n(*22IA~;m9$@H)@Kpia??T^lJHu`_w zrfEpfG@t^ha?QjeQa%p|*tR+BkRnfmiWc>IpSNKdXV3ZEnz2~}NCh{8$%|4PHaYXh zOa^PgkKTT8Zx(1qBVGs%El5R#O!7+TVK-@*wd9t?MYFz@@k}AqmOUcn8~ZD)IdM7` z@u-p5!N?ctF`n9VdpmB$1LVAb^77vnSbb4?|AUeG*eS`n*Q`QIm6K2-J#e^+Hzpd&I(Mld+8_>a?M{u!Lc04p&Dxtpj2uD1kBOz54{?@Nr?@={o$21>*+D{bSO!wh15N1)8sDAxdRHnv z{E9W+o+@{HskE0Bl1m;UAajnJOF1l)W zo~JF@n@>BFLc>~=8>NMPv(IP-M00zS#FO_Qo^n|&k~d8@M*oOr_EmQdUOie{d}VH;#u4RObet<2CpXaDPy6_$>pS( z34<;e>dlbK-3Y7%ir=OTmLx1_FABKXYuij-ELMP$JW<=SEsmzD7Lw=a<`3lOQ+bNp zF5B;AEZ@(_K`1K;qP+BaLh;ZK+AR^7cV@DC$=mKHooLiAO49xNgUoE&)}LeNuL4xc819SMg4xcK3p;ND2#==&b8+wwyv*7al0T z@=N}tEi3msCe_91kBZiZld)6x;2=LR2us#^&GVlHW+@rs z>{6x_#tE$p@x^+1)4Q_(Z^c%h0u?D$zT+6+*8u+qO(5$)XgBUg!6wCpjg8Us?(*(wM;9M7 zMNR?;TIw!|-+xa_DE=Fltf`AUpYSQ;Ox=ibYGsN6Dx{m>gnHqmdQ>T7P5LsnASF5E zyln6=(LJiN1EVz=@m$kqB&ag-qzhODjsVJ1SOX`!MFQVWKU$UI?oRP3%i~vYGH(2B z0;~ZHI^VysiepM?=Zr$gPhqvo3XO3HXA4FYnX zQT8EO7GQ41JYFUVJzaW4QB4-Arr%?QGJ)0P08-WV%whs$CmMxTlQFAN-KZVlnmbDB zbliLpwr^%gbzvPo#&PK-4JI1e^u=M0mXt22vYb{gDp)!k4D>i~^(Pv7xbHnjwK>^< z^RnkZF=ySZGJnUDBLW2J;g|S6zVeV<9bV83B?WWzz{b58&i&-W*mkVn`>6s@D2$0E z9;gK|q2zI)945l@;J3jJoLFvSHXAWI-HPt*OgBP1f%@%}gdTXn^?PtrrrhB>jmK~yN>h(R8Ft^PPL>9JR`II^*)ZuYPW$9DFOODI?d z13o7+1C)h9H&S=+Wa1fprruqP+SE2gwe2}nWlLg4^Sr7{a?=A;OCKHRjPGDIs~k`h zWRGSX7SVo@vw28~gpc*Zm^F^7o%&dXYhV!3RAbS>ZOd<{rfn7mMC%kQVojv+OS4~Z zMR7P2TUyqxL8J0Dh<%-xf(rYnsI;P=n!`Xh`^*+~;eFM{{B8-y>1 z#1NOU7jU#nqK)+L_!US4U=};CS{8T8-o#YtQ;EEr`LkPMMo}o11U2Q#W6!F$E=#pi zvm%)+EQA{72XuX{w{l>@_;c$BZkUC`!hIR#SDRx#^MvBle{ExsNB_~Qt8yructQt* zae;dZNR)D;nT|OPq*m?i7Mi=%o713z+3_kOeRu~fc>r2XW4GHP#_H!rRmGc4FU-e0 zx*+{mdplmCPqecsFkmhE^2F}G>uE#jW(#O14eyW8ps3qj_RhgWb+$|y~gpkcRlJxI5FXka*aHjCBTFKj$LF z3+w@`?EZf9TNLSQXO#a2?&%6!-3*oFTX+JC_CzJ}{=!Q6x2_C}XjOcHF^v~c-s>5} zn_S$BKwde!(l>fg{IhSKh0kPq3na8cq>yC`1(AzWfqu$>&&m zDx%8%WLDOxG0=rCe8D;DM`YUBAa?Z3ABGZ-AgomNSlLVl75Umqr&GxdS~LW12SO?% z@2MOZIaFsd@|}O*?qzx1WZ4=ce`4x4jlYqv@5Wfh#3RwfEO9XM*>>C+Yob9jfy;1g zf?<_^_q@+n?+d+14ID5RCV7E-5Uu_x3f~DwX<2U7`tFHqQ4)HS?}ujcsQzl(EyT|r zZrnHRt-?PwpBp~kpczADO_O=*IP`6k;U{RGK7=GTSQ|Au-?9;a06J%P)mKqfB zcNc@5rBVHyerIV%i{Dy`bY(}OK$-+%N%4nz@7i`SOMhxJOE~{5U^x=Ki|1QdMDl5} zPCk+6*ljPxoHQzr%WOhq63_LnQX$PYktdDHke(;ypyo1Fmp??D<~F-i`kMO+$A&*d zN*=9Dn%4&x;l{Q_B3i&Aq!BaU$%`b<+NrBE4i2ktv0F)BuuFzL@T7cyOl>Vun3DJ4 z50(b}z@al|USP=_k!MNbqRebcb2=nmY}ORsem4`vNC&68lgGb)Yq}WZVa8rb{m-Dv z@s01dMqvRQC0m1n96(#ZDUmAZ|9bs>;=W{gT%JbZCyF-B=vLMSYNZ$ZzHSWAc&>tE zkTp=lpZcI2&lq);JT)zFx90y@08U5K?;`@se82-i^g`r?t@QVDlrZ_8`Dv&ZDn@`C zwE(%CbXdl(jK=5OvHoT7H11Q_!FwndLnMO1J{BOQzo|}t62TQNv44<^vAmh>%gK+$8q$U;W=UacF!&=13`<9q9a;Lt#oFla zrp_Ch7NF{2P^!Vi^UXOCFTe$fEPK15#z3Li1fEN7q76x_R886I=upee&5VBpp$rA9RF~ zI+Nx+PG}jLA@{oo;N(G`W_@_@6E|{rMt*v*JXaO(ut8f2dfd%4!hJrR_>$yx7a(KS^hjwypW$(qdob7n*OIf7Zu?A2a18kW|M0p#W?Iy021<|v=q`}B>QtYHK~M*OVxL!OP=x`G|H;gZYB!GEB>H`lw>ua$@ZJF zy*P*7D%t1ZfPGvjmbgt|m1qmxXS7z|qM7aizaD;u{9XEu$G=&)=Ii08t?IIRrTDFd ziI26FR;YBwh8;|Tp-lbK4*}L1D<cD^d^dwp;u zV*jgbO{S`{_w7usO>{1NGiA>G4EVWxVm7q^Zd`~QM7qO(VogZlRh~Sv2Tg+z4t|-1 zd!}lm^D^oK)c8=|W|qy2Dqvst-L#m7U>*p|9q@E$e*(rmo8ZQsn${emPS7$HEh1G( z9MI(jxSIre7jco4jt;B;qeV(>O-5(V{vqoQ{z~-P3b5e@2(ZNzJbC6>(0kEmLO@7M zp0+X&mHFRo*DqZ5QDw;=vRwGZ3%x3LLP2_NII(gGwXbry4lSwiz?#?GsN^)wSdD$q zhesbHDyg*yAOa~^?}37@q!lc!A%5C>e!RDHBC|+YW~q<0xapW3Pp;XgYy@eXD#26U zYqMuyY>Z&DfuO@I8X?~m{qjo&BISD*Z&LYicQKmFzv;aBW+K-!=^Jbsel-67uSSal zD$<5s0yPKR`GQL^W5FC6PgoRIvfX!E=Iu#-88J=Zt0y^ut7gW_xri`Dd|NW7&A=^2 zZ)h-cheDC!-At_b1`s>HugU!CTUi^EZC_>NZ7{f0+4g1V`YT)p=8J%V-6d<|g)~HS zNTO_0RL}g)HQ4e>1{d6|RS?P(vTgPE{Rod|gG2Vv!FU0FZ zzr~F4YaC^W<<1N~e=T{$2^u`dVui+(S(0?J*~uxLH2%kn7bzWs0TQT=AY#X93@h^q z){+ndsX=OS(vJYgkxQ3hfW(JoR~+#5?~hN|AVJjFl0MB*(FmFS0thMqVFm#%p$pn2 zkK$@6`zi~*&h3%t8j?a4`1vwh2*33Sx=FdUmL&>NJ+~^$A$*#0%5*oLz`q|EAOkCwd z_~PC4bVSWx`*jW2YC zv)?Hj^ry`4kc~#B_bz@_yD+~n$U-M&lc_~KF;w2n5$UrgdKLE7&d3rpRp|wCznk>@ zqJVK`k++GhK}U!`c!bUYAj-|*ULQx#fctOoUWOTnO$?k++u2)s^S@*u2|K{Y7?BdM zxzL-wIl64$BRE+hBy4!CJf+8em|*BOZ)nH0@qXFhf~z|iuCvl}F*Yft7Ilve80Kke zzPc#o?3O0?eQ{_ao6BA)Tde%i;IAxmdAW{37pzc#1nmFWk$e8|pv@u#4$UIh`QF-ZS8T zZe;6t-!95Z(#q`HZwr~j_mRFaJyFFw!%K)^RYW{rtHK(&^ML<@J-b&}SzT7s1pN7wZn zF4E{p2+MZ!N4G3cO_BP2UV;m}D#OZ#A)YA3HuwYboMd?J)?`(u(GrUP2iDEASO_6q}6D7A#d3Njimiw$;Fp z=sA&SrLQ{FU2ePD<>O+MkR=Spk+1@(^bb0{1ASOrzn?|_vN*oH68XZWP2nBxvv#+> ziuM-f&7{#-ICXKb@z+jp>B~X0GY2f^F}G8Om2ZZus77arFE=EgF6;aU&wy-&a#?Y@`MG~r{JqmL z7PHid6xZ`!B=6TeC4`04T`0wxVlnpR1g3N&Kn9%5jMSKyzs6A&`1#7ShcSqyHqSpW z;J)47HB`VtyJRRDSOL>kDgjf9`%B zyTJ-SZ7cY&zjrl{wBOBXM~eeIT6u*!F-C5!y*ULZ_0m#fb4_fFxMvSV z#ug^tPR*-j|Jrs^UJsjq%_??2l-AX=&f<(tn+oU!w0c`Pk#0-#W|y!?%63?7sazDc8Dw3GLDVNf^ z56a3ZF(x8M2qZ<~!Jv-U{!6-~|AtiG2&|l>Ix9|heM=WM!&lyX94m*r6D4t~hb{J8 zJ4@cuwBFaIrdlFfYXDj`w(It#zOGx?xW?Z%SmXkzN3=T|0f5`PU>k0gu^|Q>z&0_- zuY=K#NoBn#UoasuykO3)*%9*)d^vRob=NcGIvcwtr8*6vYy4-51BeoKUamm%tyLC? zFB&krIr6@f^gKTw^Yv_y0WgEiu=PJj#7>8DQ`axrnoNw*{0%?iO2&*it&&RM>oT$UJc zAz8!V`$w7BVOu`H&24osHgFm5pW*WL{^67M=3L}4MkjWHiXmZ+fDf{Pzuj$4`$IgP z+82RAEu&)Od=$r?qA##}8YnuJ1-_7?N#pj)prYf z*KT#s`+=)Bq@GSwIN(w;|YlI_=wJX412G6IcYj}S=te0FsQ zVhCwNQ(7g@TlebXens?H2sunHKapTgP-j`=wx%T^ES}#2ry#mFc|ug5>M&xdunE_= zjoErMcm4TJ&U-XZSe^3Sx70XbQI6mGPmAW7*`0r3LpcnoTumf}#CyQWnRC~oFG~hs z-zBXjSKrDon7BrA(thzXRH`lWrs%}VS4_>>0;54NYM_SWU?NkVx7cxMZe_B&ZuHX* zHd&P7bA6Ru=oD)@{BI+5(7m5`wZ`{kR%=#Kw+8=~-yl!rBeA(+afqDZ(kUbKka(&1 zJp__+Y$ZjHRR>s8Zu$+R-TLR zL~q--`N!b)2^aavvlb(zmTXl;ScBj7Os{5)6;^?QU-CxPOs|OkxF1EX% zeZKc-b;_^W(}G4r0cbnnjRSbp9?$P{4%lk?`jQPVMCt7q8oIH!eCFDRfF7i8eiCIRF{JlWiln>kmyL|LZpZ@!+V{mtXTGo=IO8=JzAsH<4gpqzFk*uSEYct-4mB z@I6XC&UW+7kfHjL3PQ`oR9S_i=vn#)O5OMOahCqF7srMcq-iM&oY#pNvD1RXubWe!?pOW%!gMJJZ#XwEIlGWio3$`B87oa1 z{Bj*wn$+&R!E(bC--dm$&ztPUC8pYb8x?9X()rNj=Of#Q;I*tgN~$kgTF(6!B^4iK zJ9n3D657lLTx7tzUcJ0wObi&+SXzU-_M}Owe zf`#$j`_^I<7s&qO`^foS&_8irfB!vnLNHg{XQ)0|?1%gy*TF=Ep7`e3it|fbfJCKu znJ;K(zhiI2)t-jANn7;5+#uS1Yf$Sl3G1D{R;dXAF3X~8GK8e=^ z_|sq-2Ubq^(0Xlya|txOe?#l*&|?gIYx4o>)`6~kIKv?$LX85F;xSH)eRNz-%_1nh z5G6-@JG^-w#%?29b42s%e|oKbDN_>!mE3XqkvLm?wQLoXs3sYjX0V(&!AXNg7Uf@? zda^06o$txE-@AN5i184N42CjZ_{7ti0U=t9D8y>yn6dyH*kbJZxN< zlu%mx=0!)r=fN*p8`rc4x(R#sLYj#j7+4MzXRe$tA;11}*L@i}ou6fCq!RNp^L&o;TZzjwL!Koe zg=1g0_A!z`eCS4VJ_ZJ^Xsvl3q?+;LV_5-ayp3=`=@u)b1-u>gC(#az_4lRc{8ME$5OWYn z?fGy51ycX24iG%i2tLGQVwuGWWsJ{Y4(2T9Usvzt(`M$86%6vkiab!=th_IcD70h7 zHI`Ts1**WwQ^_F+B;@zhpV-F2dql$=E8!Bu^3QS#7dC0A`q`Fq$UTR-g9ilTKy@a( za~QR!yaPs=WK`7YzN~X<&M?pGhj}-za!?JU2#o}r^32~&I5_?~)jEL;rs3L!8LC^Y zK>lYeCHZ|$P$H2Pf%hcoXy4aU3%T}1f~lEr7gR?>^9;7r-hZj^j1UCnxA>Q`%_Ng$ zsa<+{!j!L9;gej%u`!|eE8#{_c!)pP(x;;FT{hGKfDlxwC$xtK7ij9}8W7R%`pK8M z#D(tm)tUy>w0}*Z^jeaF#{;u z02K!wOwH&(f`s~0mE=9Ua<=XPJ% z>x-a^Dy+f<{ zQB}~LX^Znt!J!DEp+8=*x|KUGh@rnFteB6LdcDWNa1E?-*z`Ts#Ltzt;A2-~Pfp1= zKh$v-H~;4^rJCg-Dx@`q>968JD>v9BPj^&RnLp%lPs)}plBelJvdZA~z7%xXo4)hm zJnnR?LRCD}`eIu3)FWKt2wOBdWd3Omlw3o2`c^_M>11vJ%~dE7#x1J#y3lacx2F&$ zaj37D*5@F0JDiRKj}8uSeC&6)b^Z3r_CrU5fI345$4AEpeLMS}u0(zAGnm#ji<7IqBfV(5`&s-`&_c)p&+P3 z*e@aAMNUpGn%Tte**T#eRlkCOu)Qoi$f~uY2MU=3@>zh)Xl27bf#}M zLKZ@}HqV0whYD5C1^Jp*BjQU)&D_TB;qel6&A~b)P!0MC3{ckss`@(Ox!BXu=iet( zLCjZ7c8lm;zs1JQC=I5qoT~E3WAuC-ccZgpXQ%NQUtC6?;VZo+|GKGS)$jZ#w$yAb z(ooBAI;yC~7rGevC1go!?b>_w)fS&uEoJ0yu%e^I&eapM=JJ26Q0x`B@LH44$jmX4 zag?WkOaN5~v2JYH_sX#CYay2MVVj94{J4u9Rq12o>LFNJtcJOyMbd9o(DRm=jOxymN* zyF1&qZ-Ao|m|cEpPiV0huzDA)#~iR;E~W~RO;!BNO81g7Wfdk@9C+Tmq}p(@-4>`j zVP2Z0r;pS}YBls2vIzuu{P~#J?3b`{O8t4&&Iz>>+j{BaA=!1YeRdAm=KoLji$10A zV&6v|^qse|@BZc=^S_oLn~m`0JjPz-5}px^d<`_AT8V%O0od{pNlysVHjboO(V=X^r9iY>cFQYD&k zxvMQ2IKp1cP80gOUOpi-RRHfPLudNU#vI*&dyFr9#V}e6=zD|umsdv@=yfl$b+!au z;ge#OvF+!3%Ki_R2Oxf0K}>%(D2NR!(N6-OI&aI7_TF0Zbjc1v!>ZP;-pV$B(Y&ux_ac$^YSuGl>U?Ic0$1*kk0-~3Oefj>ZLt9RW z6MQc~D92DHpd(~6#Ri}XU6Y`!4DP;64x)yZ_gsHlU2c4cJ`R2>Ywvtf&fI#~soyr; za8>O}N?o_398Xs{c&^P>ek;yG^8sA@P>aqhP-mf?g~24OPavj)TyrggPe^x)joP}i z`XNfH^l_`5Gn|EdR%B}z+B=Z}PH@m_Z#jzUiJ=gs5T;3_eS`Ja+d1y$8$y@J@lW+t zP1r0}Qbsz(~H+*MR_Q9SgGnzksIa|@gl{Zn3{;2Jye&Z~TBJSNBU)?;eA z-j^C(TvW>2bjo7H1me+?X~~MMXnXOy)Gd1+U-#7>kspxTvOeH(w3pSzUuT^GW1rR0 zV~s8_$-JSO$s=|Hs|Hk-RWsP4!`oCE+n*lrxHeW>s7xi*6b(HoB+K`aY74_BM-}Hz zkc_X&AdN`*iZfw?O#LIw$WMrg&#<4tWtF~+T4b;K$N3MR4Vb)X9!D!71~58FY6m7t z!AkWmj?UHv==rTLhbxcrM+b9~?yI~x2n9tev@&yrypDKu_%nI)bq=?4$qh)S&ni6zW}ne3RC~y1|=!;yKP~S!byUidO*anq(dXd2hA2>$jjb8{kMS zb8JnLrrv}KJkNGk$rqTFKk<7M-%LpF_v4CE3ky%FWweo*$MS`~Q|UO@(s@jPfGVg2o5dI1zV04i3dRJ6i=Z#O|!C*QiDuC>^eWLUd=B z8xLAn`ilPLvhtU1(5ETco{}xxAsjl@J&3r# zZ+%wG%|n4CRG7^XFOJ+wF1oX&-M{59onDrB4+m+HKC9m?vHkH(IzJZo@ z4%?p=wYq!4w-mMP6_so2vHp_@Y6p>Hj{uv47{2fhwdvlD5XmtWCMz{LZPA%WzznrZ zHt9oUtvCn#$feUOE8Ybdmf{d$U{_tQ=yfy=5hMoi=vIk`ZrfZ_uWk6%4BK?Q?whD4 z9&ayOgF9qYVK`g-NcwQ<8>g*ubcSE(ikfUQR(334LwzdI@^EwC*K;-9d(3)ZVVzc+ zTo+PRK=j(zTEQ+&D7Vl1pl-n!cgyva#X|V%9dm_!|k>x-`6o%c$Z>y=F}ZpHo;l z^2aJkSNO?@KndwO_D`)Qzde=QnLF8@mHNzejeWNewRaiA!vlzxOD0L zrAQ=H1g37;aKlzfhcek@gG`4sY0WE}h(gJk44q9_*b@W5ZrnASdryQN8Al;s6S9HS zEl!)bmu6`iSvQZ#_H6zxxp8P2DQ9zdzu#`Mco$;?d-VJMa9#b0Fg7kUDZ#+WSMRig zvcaYmRl;k;DVa&*@CMCwKz;?r)npk(=dbxp6dQ~VQVqW#*L(c`EoJBCA9z=3Z)6o# zI+{4k^BI)0PJ@TPkF66N(M$mK;fm15@l zfY7Ld(kvGxb3R*!da8Qs1i$!xu|S9lrxH6swslYNh<0m&Ff!uZ*L|Iw0xN{YL8bCz zCQ9)}$t=r0kA2H}T0ExL^u?=&+X%YFH>qaCQHpHY8{?WENxC$c>uvco3FzpY$Ju9$ z^<@!NsbN1C>{GvCl!^M7I}SHW%ZYrUQ=iI(iFFSxB_?(cJnN~nG6BjVE`)T90sWDv zqY-pck!quEVY^dm+QvsSlue+y-}-}$g&^%SzfG7PWoUhC2}u$aO}WUHe!(wApZOYP zi+d9o%NSf!Esguy9J0Q-7|9^C#1bl!gk_K@?ryXA@86Z~#nd{%QyQ~aavw&w#6YA(Q36mikw@8TxO5WB4kd^GzrJ^{{@-3h4w&sBt* z=HGqp90T^{g&*74gx8?N#KJ=Lf=pv~sWMjMeh+Vd?TYbxyBL&1ua zZVT|r-Ztr&x#oK)_&d($fU7ckRassaxsR>+u8ZCZ0?UB*9$z)c7jJB$Y-6Zc7XR2s zuGrUX1)OUtun~_TPk7#>c(YzjunFS;Y7lXj32(KA#QN3x-m*zdk z)r3L8w6y(Aknkp6Wozsh({%aU1pHCi_8%v$HB3i^!Enrl!saA`=SZ&E$=n?9hUZkn z=?911f61mc8N-8tDT9ohbP0XTt^?gKer>+9L`+VfbLRb5(fmN?TD=~cpXl{)Ug7+$;zNqUDRu^xM@8pco|xzB!r{&ls!&`BNL8+b9SOeSO`xl5a(Y8&gP>IU>=pSnLL?Mt6#E4S5J=#(yP0n1UA|dBk>aQ_st>@=#TK@1{8*ie)W(=%@4=V$>_(hRKKcg9^(UM*7TP z%`Lj2aO{Y5?vH()h{G{Mq}+I!)?nRw4tt2GIkiId)yfl5rZl4%4NvD`soeoXq=a0@ zfYQ0{iAw9YiZ+t8q9Io;vdz;(ojovqhB4IluEcTB%kfS0&{(ozrK#<~M;7gTvCJ{U zXSBJZ^DjY9&{DMFrP|@j-AD2=p<$!0#lZ(UN7=jT!B@G1 z|H*7o!Gf0?1!IIkO~%MWrC+m9c2&;heJO!Vrb6S&oMb=l4EM-BF!IjcJJW{;8{Tn~ z!kG#JB9jJ4txfd+;_?zKv0@#O3+$YUVA6-DxrP^q@zz_+GVln-)=)jtO6k zCPo9)AxR>B#Sl0mV90~fw^UgdJN6lFTL3h3Vr>8Da+G*n!XMSDlKhr0rxz#hK*?u+ zB}dIj!%uOf>r7PJIhJb4al|#N+-Xx#6Agd9+;4~+pXJAIGWO%ZomwP{aEu}0&4I&B z83avSZKga1nntS=qW$_VwXGAjs)bDAPM+Ow`oaz%otba27Fe=M7M2I3bNwEtUv1A~ zjSp}Ad-$=cKO;eiCG>iIToa#;p;V3nc|B|{Fg-@=#B;aeMWf<{^`Me?$mszBgW$xA@BZx(D!g7<;Ih;EQHyLKCpWjby`SkQ{GBBf7hr1^dY`Kk)u;}wjy(^; zud;oD@wzVhVKI_yRUXQlKPDdYEc}PD8>P*e z?LJgQ`Gc(^T^-j}f|P8s+7hx(cou$Hd2xnsvPMfde->h0X%S(F|+j2?U~1?<$73m z3bQJUrg%=%8IJg5ueCj}%%G2zylJ6)#`Es)3oyoTb1E+^wuMQ2Jpg$Dq13xe^U=5B z27$|kkDpaNLabrF$Ail%zqjAU-RbtW0gwmJ!%APlDiZ4~6}bxGO!HsCn@cTHSk$Ug z-Ens&fklkKuPRhnGM(2`Iwk91xXc&LW2U&jSAN*yU`VmKts=a7wO-G6ck4+lyHD956a8=#`hD|7=6r$zrHI^X`D*ic z-g0oXb9XmKDxdTfmeYK<@?hbfZ)~pTAw5@a=kjm+qJ>Wj(QPK!1~7mdnVVpQ-k*Gc zd3Be7XW^%C**s~;09#$@=$G61+Ae+|SPBZkZIiBvm<-jr3oo~Otvo*QD)DVIzTR)) zYqzt*q zbqvt)8g`$)7b9hD2uC!lDxItJ%E+C(PQ{Jzo$~6`1AesJ?B7Z=GL84ZG<XL&?%udfX)-kvjMx*T{JH3k!3>#V<4vWB?Zdc{ef;?{Pbbp@yL!j6iyeNs(8s0_$mLylGyfk(2_uVv6B+teIg!wgWkgnu0$Hac zVdij?!pa9?B}U(8>Sin~dXP+^+({YKzGpM#8-`d9Ec}BgR4B%Z_8+=4K zfhU=1u!=^~H{0*6Un5`is*4_af;K1BMdb1Osf30LN7^&2KV?f#Qu<+qzV#1-rj6uC z5T5}Z^_BxvS87`z2Ev;`$F=0WZGW=%4!W5F`cqEFsH%Qk8!sOFaQ9tFMoaJ7RxNIF zR8`l1g3L2AR>APrvg9*-^ovaVID&k3$TKG}oNj=bS@Y;l78Cy>LDylbd%h%v@pCqQ zcQFiRHZIL(g#?Asr5!&0vY%o{y6&^@KCv0IqwesL8HhaoVKHD-r&PnEgfnbE-F=_$ z9EHVcReOunHN9gIdJ`Lb{@J;)yeCwbb{F5-u4)C|w9lC9sgRDqBAj%P)N zZufF6Y|5222VrC{CM8D8{>{vs8wAFY=A9#(IAz;g4`{!;%jyR)4W>mMYU#bd=ev_U zsrg~80ufrS#ueFas~7M)^FP?JlS|x60_O)mCX?z0w*)}TDA_6Ozk39lR-pV@8DtmX z)CyfFdY+rM#X0pmGmE!JA6lRqR`7G}k}|Hmu=2yHj1}+xQ>ra9`%!+3GhBm*;!}P; zZyVE~{3ppH{iN{^+9|}X(ox9}o&A_vti|=>DG>VZcTLO~6w1f&ZmC}nH zl8B&?=HdzZzZ%59l3Es)u?yE8MtkW%KS^2yswBE{*0TUnx#|}2L#K6xrp@l8#IbVj zwL4_G)|2*b>luF=Z1GJI)VmpI^1=vsU!c>uvLEvzO`_RIh$?-0Bo~M+++Dl4NY+i7 z9%;m$J#7IlcQB#b7Jrk3Lbqd}oOy<8;?MR=QH8$uosBg)euA{JT6Z=J=yX`Z`Aj^Q*IK01aZ)8hE;FNLG20^&PEQ_%vUBtII#)w8A&ktzqv%m5Vir zJt4~LWmV*t4k5)ggFCxmX9h&VfNL3u^(ql9i(cROr}sukiyC_7 znyj1bJqiiv{WVG?J+@~>Q6h9|`|i=)|Iu`o4^1|18&(leDFFfLP(Y=-nMlcllyrB4 zlr-B!kdOwEW)jj}0s@l;iID>&Mvty-#9-UY@5B3Hf581^_jO;_c^(J9%@@MDF+s^0 zoTwwh<(TlW&q0CWfox*2ysH(JnA75)$D<`cp+XbKuM4}gYG+}Y^PQs4h6{cvGgaVU zOxUbNZjnUwi;PP2j@LF&uUVg3=sfa$Pc#VlHpo@s?1w*q;SX*V5_pu*?GJjJ>;s=7 zu~I9by|D07>Rq~W+rI2W$z2 z?pRz##T`-Jtp&)Kkh0%w|65ml=AK7apk*Redw7w#CbwygN!jg68`_}`k<1$F`uM49 zZ_%mvbGPhnM9g6)%Ukc>JY~8QRrb?dH;9Dad+4~?1!;%h=u64rd3a{`VbIT#k_CV7 zNTK3yC;--9V-8zsB=appQB+^1ZZFP1Jt5wxk)w6fw00~Jt)9w^R|8NrxIH{F8_~Qh zhlTkjw+UHM`mp^tX3Pp-SEd_Kq9VOcqFmC!p7-Q96=TGtn&B^kmoRCQ&S)UZw#9eH zCnYsh=&duIp>b^K^L9z!P18r;vrm2C*MP3mHWmr!n%<|B1L(lke`EJyshq-~+DO<) z%bMin*cAdB?h_L9zQ}obPxp@Gn9Ot%*8k~{BNN#{MK7bTE6auTcL>7_yBehZ;!4QB zxHrT9n<}^?8h*KSRho>v7DC3}`_<(vSb`nqIG@jrD)jwqv|IdZ4-f{2nR*v%jPKas zq8c642^H)&PD49lNWhnucemQa4)Sf=B<00RtK6~r0Q|b-_uC@(VQ1Z;W!h!wBif^E z1=f;n>LWSDA-*U}%@320yil^99D)26N?)4ou^s%?w63qkKW~}Un3>f3*CzPXuEQ%R zll=)IaAS!cpxJBd#WY36>6qd?p;|}xB!WGzlu7EM5`W&UB_}fLnFPi5ckXvj?Lm_u z+kwpOzcQ{>O;!RGESj*8f%ysP#aM9Zv2(%ac6v+5EY(BHf4Q$1Z*tQo13$&U#XvMN zm{O4TVs5NZe3>9dsO|heqzm_v$vkZMOJ!$H6Arp*QRU@ zIps3o=1&gOYmxfA+)ql>`*T{gxt{!#AyPuoQAYAs)t zq6hTRQogMnvFtlKH;*FTSU3J-n-!h-c$c+Aq;*mIsCflkHx=fj#`*o3=XIR;&7`OX zeVvHlW^1Dwp{ih^S?Xb|&5t~LX2G}Sg@k(_Iic6Rx7P_A;VOafupWFl1_-+v1mCFR z(qf?cF-IW~d&MFyN$Uejgi5{V`G~XA?D}!_li|R}-=YL9&9vzZzG?Vvh7t6BgL^#< zk;F7p)VAWdY`z36|j=0v(@Qv2nkCP|kCF=5g; z;DAeP3!3Oy6fpxg{q4)^{{sc6^nEBb@xWp$X=W&jZ%wV)G}gCjnO(T_lxktnZw5@+BT|-4bCmD97L6`gcat*Y?j|~NbE^0#ObTZ9{oJ50@DEkb)O01)^`lZD7 zBjkol zhZuGGVx6sUXZCW73V5`L;?>_%Q=D7xw8=ozwLE+u!nk10#h3vT$_qRc+ilmMk3XWzONV*C6xD@+4hU?y> zzS23$jkZ6k2hQlR3}EYi@1|2jZW7)p8j&Vr{PQO?@vojW()6+tclC}y^ttYtJbYjzmqI#-@#`PyB5LMh|oj&|BM-i*lJvbk`=Rh7Y1U7^4{=xl~P zp2@o)?l%!M>&bZNvu74f+>1)1*RMhmC$&=F`{)3jercUJo}sdkQ6}t%c!GycJsC=k zkUvOE$^;qSdKs{*Q#iY!J3GfVL`!FQ%!L>rNdj{)1fB`Cm?z#&*|F8mM!&e&;jF;tK@#be5(yp{bcm)N2 z`O9~;^VH2JfwBX>Fao`qeAIvlrnl~FBpr@3X*<12`=-o(jK}+erTA6?vD(iNj#lH= z>A6kfDS2q@G9U349h0y<&N(-vQ|JV#D?f8H@;;>0NpSL{>&^aeC{-c|{OMWC&vYM5 z+8r10Dt-93;p@le@u*S1Z%#1TRbScPL1i(h?~uZA*!#7ozx*7za_VjEX_7H7=Bc9! zU>six1(h)gy&7SkG_A=Z7Z?tGmcH_Q?{Dlo>3;P|vz`wc+go^YyIV}Idm6&q5B{y{ z2YWV1m-{MZzfUZ#x+^G)j)5T2F19Wu_^K2OPdbvrt@ku9jQGP8AB^9DK6@)Z>MS{G zH-a%oGe1-}H|Y6H0e8mbjie)EIa@*k5)GGe10GMXx$)Jg59F{zX4`j&37hRsfkD_t z4A>BClei}ppxD#k0pUU393>y;pqXpC5Rn-K!G9Ke7h&tDgb!|AmlAE)C$(xf;%L{8 zl2pGE?46e$cX9gbzm~|90_}XS^%IV3XPMXjL)^Dnl|WlALeyhwC*d{{!)?hi6Uqsj#{;3O6~m_xAez z;9lfjxpn)g9pV7YZz0VeCRQ(lBfi%CD;HYaW)AZo^14YN8`KkfnG9?zV#$44Bxd`}A9tbx zSO_x$Fdbvkd>XPyi&6bk-!bEfKiTA~J(J@8yjMkERM1Qx>%Y#c4m+&vvh>faS5JFycBejCUekcG9L|Nj zfRoj>*4Vej9o~HFRts$-0+bVafPG&~jlm<2AAZyx^Rwvia1X7|YYU%Sg5F*A`aTE< zI1ZglF!?2gJrlUvmcXg9CvKk@;v&9D|5ApQ?CJm&PfSFa(8~Op+Ex@W*!wfvHz0i# zHe2mPyItPH>CMwAsO>lwf=S!&zevE&@}zuM*AerI65GyS_b6Sq*9nzzD*{}}0&p=yJQuzD}|A1bnQGsvwgQ6Hwx(kCy`g#AyKppFIMsJ%f48z#{E`9h!0ARWQ6 zOQBnXlkei(AuMM%ykcgkYo%KITVCW8G^~u%V54S<$3mSHu|PBJZWHHhrH=B-Iao3S zW5!-eN&hRi6?}uiMkCST&5=DZvrn=UaIO+3Xu zFl;VY`IQ8CAR7O(1h&IYEcy}k+VmQz2EY5epix@J?V*+b;)@)7&_Z{1(Y~K={h$7E znMs46RjNDVHii8_=(=r73NxDVQL}F zy!WmkkNc2({Dxje2>ks#HEsoLJtu^03o%UAy1fQ!5v*X~x%E8!U*yCpXA1)C74054Dd#pP^fMX-p_4r(m^Ln6Azm>V zf}41_+yNS4x8@;+i&Q|d<;9Z#Y784(noc5aT{a;G^4@Uri|yS#H7{ zt0%?4`=E)W)$ZoH=<42dX2zxL3wF;1AY8t6SBKo>O#ITw9Rq2~_t4syIsPgrD9|!T zsDUjNSIWWO+6|%p2nQU^yIjsz)#A~XXlI>w#)$(Iq+j(5B`f*}eA_!F_v_UP#eo`s%}NBJQLt!|RAB9-g? z4kcEKP){BCEBB|1N(9igf&cxuyEGTEYkZcUGZL8=CD!1s3taC!K$KZ8v-M6%QC*WY z_~=}IkR()@g6UMdO#S%RCd7s$!xATG+zu4%zt~Bsz`iRs(~QuPyfE(B$cvRZ%X&Wp zCy3v5L{w0?QUMWQ9r7yEmxDd^xAJwhxh@|Elc%;Z>ba%_t?^9)u|0 z424bcd%|KbN;XaHUNT=^a9W%OUAZUaHY}XGgUawuH584eO{gLcVnW#1DqtpGvS;qW z*+|e&_Wu<^4`XF9p(ejYXT8R}r?VlvgDmp%Et?nhiaYRA*fei;8a2)-#a~O!8RU>{ z7+Q;v-RYKsPLE4>z_4SaQH_>x-CD>@+tabm+?|Wq-#QvIXUVRK^^TsY z;Q}cJtk1dN8P`H`-yqs0W<*KZA$Yf>sMfR9aHAcAClI~{|J=RJNyv^muaBSqg(?WcR9dF=f4lw*w>MwP3C*vibI-47<1>Cpq<)$9^l1Io+&*9MqDfUwb&)s8@ zhc6WO(@Xz8R(rHPB%=jDA&H}zjsf z=!>q!<~Jb(38mn{jDCHbmlZe&zlEu>o4l~HEi}qc!NLHoSNbrhlnB{i`pp?O4f8jf zH+=@ei=A=?VvzEL37h9|AstYj`IkXY6=9yo=gPn}Tj2oDZ%$O$lRxyp)D0cX+KcIO z2!DKJT613H>MK#KMgI$?V^SJ6uOqK^0@qBFFTS$Y>^i~S-6VJ!Gd%ZmO*bkxc1^Km zf%_wr<%AA*{}Xv_2Jy>F3_Ccvx|82A%Ek=@zkCNcnGF3{qru`4j$YXX=O zv^bpLEwV1T)#piQ&E@>d#KpNkxdCT}w@T@=a5`E}nIRNDEqx;b`r@MK*~ zl)-ki?nBk7>0G|ZAJW#&(f%1hBI@~TER@_HcC-5BJz;BWAyWC>pK$xIomH*h|6(sQ z;DI1|chIv!!7k6Fu6!n|QqvlK0~)a;y)1p`+={DC|H; zJL+y%-tG?;Dq1!(-G2MFeS10PHiaFsdkh);%9xR5EYVkx6>E{n)&)qu&JZfm$EJhM zi$y)W80RLpL{wW-HVg%(s=yKCmibk+=O>>vS(QRwDWWd|4UisC_;X}6W65u@aq6Uj zXF=HUO)9(4Hc*P>{@Rx^Lg_EUf z1ERCepE5h~v5B|FtIf10Uu_sfkbki#+adr5i}%N}&zGD*Q&e{Owz3)nJb=NmH@if? z2*tVS=)=74+!fD6PdbN0760k*P%KpZ_)mqEO1o;CJt za$4J&e`M43^vihI7uS_EYi6H#R|>%OmJNrEyGz*h7iQ7L1?xPB-M`-AQ!~&(lkyyB zk>|m3`U}eD?49L-x=U>!W8UviY&TU=ufhXY>_AKRoe}R z*n0QGtb+Uaq3A)Tk#D*zc-N$Dlr1KRi`ih3Z-R;ErOZt`^GAD6U{8e*UpoWP?Xemb zG1eBKrJ45RNmJvjF6yTHr4C<88+K+v_$n`{4$ja~bH1HJI#r&;jxG;pk@v(b6l?Cu zp)CO{Qb5~SA6$GXIZR7?rD>;@$*$1*7Xxkq{8{HH5PK4&A%q!1xtvpUI*nPF))6ZI6mGdWw@J9=vIis0C9GRq$l|K(dVX zNbrTtmKqVRjW&%w-8w>ww`+9JBNFMhCy2lL>k0%N?D&QfApV5!>$UY8P3x=bMm|>f zfgZqdQD+wJ3oi5=GK(;Nrt?(EhZDSCU02Tj3s+QI&sj9W#tn-3NONkB2HaGAw!p6P z^Bv3Kyg5IEDy}4fd%7G-;``Afv4_OtkDf?kpgSY5;C+OO3u9%O$b>&97llu*A}yb8 z!0lrQc8jVF?j~B2;2+prv)qZ6)z~B#RtIgWZq4ZY-gnOjz`4#10iljBYY7K=^L2)j zSHcMF&b`ZTUCB?>ONP@eg2t(j8^$(KWmh%DUFf>xdv|32rQxOH`R1IMK-{a>uvKB; zf8di@M3zCUqGwX7^EY*{kv(b#-xb}QJ16aAI^yJG$H)NPfGyuSwYrFH3`-E}wn!aw z9lmTr402TT?jz*!d4Yb4j0A2putqfmwsnS;3pNd<*<|B^wuFLs5s^>Z4@9vyBVVh} z?ba@EQeE2%#O>Fya^_cc>1n48RM22&@|yXx+N(Z#T>$kpUU{uKeFOa%hBbu7UY&B; zT(MThU2A}r38Og^8ld^rQ@=&i4-0SJ%tKMga+>RT;>J{V^8@I8#tYb`IQ|$eWV%iA?HJefG(EMc@vWTN~u*< z2$q%jji<>#q}{kxhuVXl>l`?A&*&YRmbPSgp`&iZjZ`5*9O{1R^-R)Sak__ryo2=` zSBuVL{!sgSyR-|pK{Mr!&cO2hC^XENboD?edgP7uA z4Tne_&Tx`7hbT#pwp682(;*dq+Y>dS-&ZBCNb5J;a2n-0@+8_FZ;N2M^;vqZ8Fnw^zrFa12L821f%le!uR5n@JrL*7(#n zba1?h#@Zj92z0t#rSnc#RftBBSS^Om%WV7W{2#Tu89vUYBS)ut!&&B?msZej7l|J| zqk5h=TlW&%_B|+8aZ1POBJ;op6L@5JPv?5{it1wf?en>YpX~`Jj9a#jqYh=|*7F_T zvoj^-?tiE~Ip=1x!BL*&j#vWP8_2f*etWNz1dZKgxibd)!YDQi)_zxVGr;-dGNYEq zk5z;NLp~NK<+A>*KwMt)eS>R>$O@?Sal)#+6*fZC;PRzm0pwTmaeDTG>s2g(Jp^xslNdnK^> zVj`YK_wqUi7Jp#|p+PJhd3Dv1Z#Jbsir`IA?3J*0Kx0lpU)?*Cw^=$L=6_i`!{G3+Pkr3C2IlwQ|J{0NlVl}Q35qKUnM|U?sYnaCO)b&+QjJ>YnPIEw$O2nL1c2j! z<{8Soe^Yuv-&vv!tA{cHaCP%)k^IZlr&L6)?V?v79X(lJ(mvhSp%G2So8yKZXk1So zm&@U(ux2*)?`I>I(X}#Kp9S3qhFX__PXk%!P}Ydy0+H)s=CJjSUm+Ohf6-iN{80xH zjU*dc(2;5+`|j*t&Inl2=h(n!(QBBsd8Z`BpT`dO8FVo24HKtF+hW*p&j&}?#JO8J z)xMcsT1UI19S2T+sfD#MhXg*+Cn>l^{8|fb4-g?jDHu`yXqx)C+H82sQY1Zb;a_~b z(Ey|Dw<{f!k9Ga-JhJ|>&$o@>o6p1c`$cOK(HJh{rKEQ$$)ox%>}!${TsrEV^v31+ zKI9fMh-~!GDUppKu1`!lWzBzQ{}Z0 zSoA3u^bu9|ZRG#jRB;nYC!4qs{6#fSfa?h&1m|O>?7bsI@hEJDSJ(QIM}D>da`A5e z>0hcRHfV{Sfe@F35J?ko*?&6%D5ep%&xc|kk{NJtwIsEs*Rqy#P)~;_w-*x{Bo8E= zogKJL`koE;o3n=1X-HR5VS^HLwSfaKnkr#f$;2*q-dKmj$I_F=D@S9IMj(xcdYY8B_#sJ|ggy}|+#4o!HjR>2Dqt(lpn(e&}0XvTnudU-JXR$flf1ltu z*G`lxNr=+2{z;aM;YX}-gRze@0i*EcAN7(y0R4-j_Zm#jd}8orn`b2NPjUBqA985Z z6gRL-K98JLl+1kcGd7{+V2B^s(Yv;~7crUH=ej|rskmO3lJr|$0^8`bUP=kt9Y9)a zFaTBU{O;d~yQa1vghkF(@}k>YA-VE0ehlN1J&7H#X;O9;ExAa(15TL)vH!UVEHefc$bjJvwO^1`+F8hselG(gB;I~9U^U9 zz~A(r%UFt2vaxTrkDI;8V??6&9%81Baq2(UqF;01gQf#KaK=DW!gJtP>!YnZb$3u~snlmkH^=Y{<}=W zpH61K=_t~yfAYPCZZCo?4~Ny)ea~^!CkRAHlH{7j zYVZZlZ&ha@?(uDS)J>K;RaTHww!Fl=igj`lZ{KuDDlD4UT z7dvgeOeS%Vbq384v=Kv`Kwd2S>skau8ae=r$6$GOo7^8bBFUH;fOMBBWRPmxz<5j>1 z`Hwq^vyEMXHP+)8EUkzA4l8%A?&L51g6+um(O^kq!ejcD7j+?2j#jB0(KH%G%+VvV zeZxszF+vEi^yq6_iLCu8XW^w;sZ#ORyuS8@;YPXTuPUD&RVudFh`%nSu=DfyP-@#P zOI26j-l`UIN=ZK#jE@ew&xXzzIH|?%RlEuX?G5(OQC8@v<@++? zJd+Z{1(DFRig6@6&URmeQPkA0=0UmQ25U;JkK(f+^U86+hB~mJ_}1kH>=nvzQ>(2g z1yy+FTip{c%};KA1&=@GbTLOLTQ=0h#z0zM@k*ZW4Te@2LQm@)iMxBK)153yPGGm; z&H5_mC#i_Lt7q z9pN}`Mgw-{jVpncXQfrs~tgeSh9zNns4ZT9OeMDVpPq=QFnE3u18ACtAdEef2F;ga`3 z>1S^Ca{YdVbX;4XD7RjrG20wdCY?hyAgy3yxrK_5X3Q{%gkp4XqXUXDopDK-meHW># zzyBlV8Oc}HrxYI^GuESc0-*1x|Mb9^f9bQ!28~vl2sQ9nv80LoljgoU2}5 zkGw_9_?P4sw^(=l&>Pdk8Fqvg0x7vr+lhb6?&}+eQu^%uEG3AKB<1c_es>A{n;2PX@PJO> zo^dgt$ju^jaPQ0%xUS~5weFwGe3^%D@4jmy&iJwQ2uvYdOe#wH~VMf;VodkU}1cc8cir$%!`o%IM zY+7SbIY>e~rE>GH_|trhzipzkip3FO^kz)gczp{$g3at^dSnc_05eLp&0P!e<;?v@ zOnoegeO}X|w<#~jm2q(>y~B5-$F6PnTBKE!eVwUmPU<0Jx}EPkd3U9rgEry;{z@5M zXWZ9`He#Ze}lNRm)BmTU$inkJ>Dn{)~z+xevrPiM`{KkFI99_ zu8kr2?Dr?3;?jq5j`>7M59lf#6$8XK4nU@LmUz)G!=qy>wBhJkz`j?k)OZ$rQE{6& zz%ays`z?l6Gd|%z4QYxT(;g9*yi1ZCIKz)o;im(rq!9TzGvAShc9Vz)e5-qbb1}go zIFa7}{b^jj?qg??e!~!ZYJ(zm-rOqo{+_BxAp(os5PEm>RxI@ybqK*hE6v|&{XcTh z7z9I0^@j?a@>7NDpTSK5jEsx@fh;>m8Y$66;`7%sezs>i|B1wn2~}bDOCA~{uqofE zLvyt5rk2eKOrHp_M5iX$3piLH9w$Q;b4N>t_2T#M@Ja3u2JZDLM@*XnwX9`>yK6yD z$9wgFa1robwV6uL);gx-O%|{kM9%MHUXg$>antW;oc(FCZ_f=MsM?Uj-KkusV;b+9 zwQnE6Ca5PaP%>MgP1O$xMWAnQHq9&-PIhiIbTl*CY7_|N0s&l?Jdy7e;H#KhS~1{L z4MD^1)!i47C5e7@=qxEVscU%iY;I?Ptr?O%EiD@Z2?B(feJeUA_WwPhpMQ;azt`Qh zqdBko|J7-UU_+6)M&3u`z9+xT#Z@}pyiZ6qVMqBl?Q+fnWx*FXOW z@rupfdgMBt>YB#7T$%C?8|jM`q4(+%#j_M=0$Kg=-L%J>Ju$=8q)D;Ux5esrYV6sX z) zg!v~Y@1bcCf*9*#@B+0dMxEntrsC%5`!P5ieuc2Dedd-j`zt17W&ENA zZRVUp($ve^h^9*#8L-I&-%hHJIF_&lLsoztdnQ*QS1UqGg7>}-c>OeQtZVqX2HZW| zme|TdyWTB_`{E;sEJutwe^`?d%a_)&BHf{oN~TfkqLg|Jarl+L)OG2dRPB zp*$mVr_ioL=k(JEg$>$kQ{Yh+W`+qj2KPsYiqnEE0WmvL8T$6M1|M5$+dP0DN^sap z!=16McfBAhTu1KLb9~0HA@~VwR!Ap!H(Ec>>OZ6J&IwA+>SMy3raMxB{3AZQz|F>|$i*`oygv!8Zy{dUbk3FcF$7pA#D}p3$XPGclhw1Mm3Yd#|eyeWxE@=;=8A!+s)a z41UZ9iMz$xNq@v)1zDZR2d5wwxhy8OeH(Lt>gGUWRCT-h=k{(_J}h7Nj@*+c*V}jM zewY&~L31Jy@Z0+|?mmnHjhPQhUcVCQ!r{Hvg|N1tFSallvQ2o%)lENtn$g@?d1|)w zdoU&~lkY@z@*XslaFKOEusRLIrlLS~ianR`de4D|l!0LUZ*_JAc!qlNWpC991jepQ zMk){OFO@81zb3tJ*7nB z&z&=gJa%4G`r-Wq)G=uWvoYl$&+=}}kK?bK?i6PC!8VfEI6}L0qS(et-OG&ozvzo_ zB|OP9Fss9*`MHyaX-%ab!M)hq=l)UE3ogu}N zU3+3z0JWtwx!VmTECa%3SrVz;7l>kUPKTYJW;=p~!=IVHM+GS;)(YV#!)hV?RrlZNDQY&^Q6^HVkFFidP`4Q3%^YIS=zWp3nb3JV|yzi`7lFb zp{w9&`({_mxCXgtGfPO8#~A5N5ngv)Y`V|iYh@3`rgvAx_Hr2Z1J{>2nopXob^kU2upj?6O= z6}rpK{S1B*%JylUDRAyLEY96po93zt-?p2`V2UbR(NA(ZEd?}U zUHZ=NzFzWDRLI=&V=@6u-gXkj(&KXEYf+E6Xv#0C>eo5`1!UOb2GI0(5nPWwZS z2}OTy)9KEvL+3^d9ng?jSpFq{oZaA;VOL7$369qjB0jzbP6<1Qc&Ycc+L1 z+=E~E+81k%{G$mM_+VYF_vE3pT1J)q_#^W-no*cx;h<~A&@~gP1n_Akq1b9f5rWU+ zyfP;qkBNNoSB+aKcR5z$PxyOB*2lxq;@n#N#^(3uu|~|KOwi>6=~R$6tedf!=3yE@gSK_=U(D-n!(!y8Z#ahp6c5sL93}VBD(tsS)j8! zqjNu@Qi2hI|LVN)XOiBiaD~)E^v&@1D?;CSVQq%ZZUM6*v2<+T7yWLBCbapNG3n*@ z=Crq$o8=(3VvQlk>@c*)9eGqN(VIqQ$PpB#eH?6DjS2iP zzCmNQ+gPVa*c4s=8}}~@ym+PVIsQf3B448Pfu_o{?^0MN8FUg-e_nminUT`gIjIO> zXkM$x8sU6@$q^_T_~aQ zHRgSdzsxn!cS69QODre?f9HXz#gD(lzFnu*ZS2C{R=O#V<(9T+ho5Y*gzv$0r|7d`ML-K$!dL#5+WJOKdNC*C}T)76+>V{`%_h6OjpmhX9h?9 zU1@jh1kN^4hWZz>m&9+3RKI6&3&f3{b~w>k&vn#ypEEUk+)la&vk0^LcOK3{sg3#;iFQv6uJ^cA_Z{Z6wsb#UOt897hNUR<@K_SD#b z(^50+DY)_zTuUu~7kOQax-vHjy``LxmRBX#O5qHxD=T|Ern!r90TUo6P*E2GJho32 zR%LFKrAV8*&4$vK1_d-{W-sn@2;HCCN&7Sh z!F2PefcVUdG$>!qhY&k3+b}d^l=^ReP{rlhn!zs5sQEt`+X;-jNC+pV|4kPje_Q6g z(i=jSrm!OE96fM~Kki3j9sQ-NWT+A?SIdI`>LwVXy#n%(LW0&g33CeH>POZZqBmYl z_15MSH2QBHffwN9uP1Lqc8l5%{P15AVtOouNNp=C*`ltk8<=n0vsdb!b>{!= z15(lMG?+H0q{|$`8zblQ6Y_QODHCo9l!G_!MztQfo_P;=RD?FS&b?v&uw8hE;th;r zag8WGkx4q6Doed#QzvyQQZ)N>{Q&ihQbZ5>yO z!v9r$=NSHT;_S5^@XEjoP1|^q{O3&`4>M5c9h#(I+^{VwecwU%!=nED$=^30urS4v zA=~L75z!jFO=CdWw6`orv&;PFL0Yg+wu}=SJ>z0o+-IR{z`lyz_*ASkS&snm@yu2; ze{E`jf?7H_gh8drtX%GviD5T)Pb}uLJjnwJeES4z+CLh~Er}dDh0I#p1g)MxilY+U z9=ZFMz)}UCG5YA!9HMG%zkAT=A*lym=2BnggZbh%RQ_Nvw@@eLdIe=h!m6L=9%zQ34N zvgA{fRTRnvgl&phfhyjQ7q`87+4Cj?*fFQIyf;8#(?&c$T={s2N7fm((+T%}%gbEiO1Oc$9V^-0h2YYr0XIT0U6 zbl!HI^q~2t(BIJ1ot)5m-bjxO#XA9ka{84QQ07~c+p{1n)o!#z>nxu*Wj8}qrESN_~zEh!i8S1t}=dnk@~byy>0fDcM}7Q zW18ot&CQJpu#<8aMkFR9=5XP(c^dL4zV;9epH54WxiMVW*|V;X9csRAxsWb$FxYgO zdHa5emfROEs!h`8`SA!Er0o$*J1kMbL0b)44r;zX7$Je3?OBm^o3?O3q6nk=4$uGT z^_n9>bPACLkhcQ5JL))%{2(**wEj%Ph%p7x+~=r2N!IQZZg#k_CN9sdH@PrCSh-YK zJ2rgbYu3Kz$#sze%O%N=HL|yYp)cP)OKRf>j^D*vabF{edtEZ@4j47%1y=UV*YY>D z06w&2aIKUpdo3Ps%#AuS4O?y#G+W^H;b|oUF% z@N71dy=OQkaJ<~vy?WF)w)brITIl0;bJTXxD=i+odbLXdj;18d!jC_Hs;Tu&ckSNr zy~3Ju4{Gyh7e)560moTk)^gQ@L)gEez^AYG^dI5gm41V(8Vm$G{Si+vp+F$O*Edpq z`#kLjui#}hhh~3_aXJXFrHu~;&rZiEJ_TU_iWX$f)?gE%yc)QY#z0lI9}Xl<|Jl|c z0ZNU(l9zMR_JHq8jV;%|Zj3JSn^USc8P%NnveI4q5sbZj^O~tA#zdrWjzpo8#xd_K zdtH>2Rce&wuvZTrSs%t5r}^aZxv6N5S9aM=79ZKh;ty}ATtD`4CucbKRKWhrw_keF zbPUepaTSOsVS~;_bB5?LRz`-`hH9YXbxI_;ZjAp^qVfST3p^PTgZ=lZTYK?~<9PbU z?Kj7TaHg15&-u50?#j34)#j=#igXdHHeb_bSZMYG27z_lTt^kVrkq_56YNYE4#Lf$WpVU7QQ@ZKl_giu4)8kWxGNLI_pDC;R7`$wkX%m zN^iDheWb*zQbovwpPwKlg^e}AFJ7=cp>R{^ZRsOxR8LOW>LIi@{j7b(_E&tt!bAA( z46-y*v1~T*6Pn}Mhp4*lQR`>hwX}22I2mvf_I^9}0|ERX2R_iQ&i$ZMSNQZMv5!Up z&3NWcfb)`nds&VQz;B6t0-5P>iQG(#BN3<6w*oH=v&%c)f0HuI%?^eYLW1{y7@)2& z6$vD2OEX@fx=(d*)tn@!!It4YE)P@xQLuizz%g|0=*W&=H)TAN+(*C&>#AfdZO{Ds zzRn@7OOBvQ`ciMzL1oA2PLUgCn%wecwtr>*cpm}WCQ-mLI5VtHe2ASmt@$4_ZiyoI z;PxK-gX3$rwDJoV$@FOwk;`9OPLOZVIbe^LdNPSo3gCiW^0fTN5?GeDr&Eq#6HCD2 zGFb9nC{?D2oB82qxd|^5H^oQ! zo%`)kiDJp+4(ls>(eCQwSIjqUOv4+a+ci+?vYxiZ8KH>7Wzw-Yt&%|C(|~|L597iY zA!a^VKApSlnLG5i>y&zV!hV6!u>?;{hvp7kcEN?g~LymSVX;mUG{>=Az`!uKLkI* zH+=U3tIx;zoQ8A~dP7d7Ky+AM_a}>7tQ)U2Ic+l)cs5*T!s9w$brMa4g zl{bU1bo=Pswe?tdT8;v*#j)X=@4{WdXr>4wT|&UH@IT}?H3Ual(sw`mPp8)yuY9)T zt6vL4*6s_c02GZwOORL^^D+4CY6*LDCNb0a%so$dG4@Sp(9TF7Z2L;!xe!fO&R}<2 z{H;+rOx`3P!#k$x^J5}Mc4@7m>vZtS>qgc3?#ct1wfDb*p3-hOo>}(2`_Y#fY5ALcDzbiCEi%~NsvJ}nJ7 zF0Y2n%b+KJL%0AYW3l@tDPth0WzPp+MALnqIMWiV?5OAMvc*+qZ_Iux&TVpw02&xB*av_-`X#CFXIReB{)9$v#0-4ZNL?;P6i%?I0 z75-C*_NpDP`Hrjd{SzRXL8REp^%zS^w=xD*kJZ_nW!egoWGGr{Dg_M=qq5ae1ztea z+yybk!+7^{MZ^E2>8#(PYQHW{gMx%84MPbcEs_EQNfK;|wfft5pItpLENTv$yFsE=nU5Wg3VJ>? z&KcTm<{EqE{Vo`Tr-jWhU(HOIeuSx%x{Z|u+Gy=4n!y!+Je@{16=c@+2A-~`van)7 z(zr2hq~a%cc&_>0EU6)2>lNoM#!$(lN`)SZZBJme_k#}D22Tm!RDtGpN@6Ot8a=J^ zLRm4roAWGrKAJ&#L zIYw&q)#TG#=q&Kz&=aUSOKzeRj9K2k=pvW08fwgywEqL*-jZvzinFFuCE9u^gxtYc zz6ti#EZxMM)psqkKjExPrvinveE!a{FQ%q;_1Sk7Y{1xUCoHuF-dQW3vWpaK?!qnl z-Hm8j{4oUY7(s*P&O30EzDZR|83A3mJdjDv&zwJa$thQmSd7*0UXR0(zNpi052s%5 zlLgNDRl@u4*=?raby~v5D|+Crt5}A%tvjegcG5+)Zug%Zykx16ubhhBm_xa}bQurp z(f>pUve~DdT7rUkG?^0rySYViX=u79fTh8gt=ap$g!WS(W?m~@gw$BSaLwTTT6u#ZY;OE z97Q~<=#169vB4kakpB6-`dIo%HebcoVd*+2^*JJ(blPMtRDb=3QvBScModB zdkOvR!M57;2Gphsy$mPrfZHl)Cij95 zZHZImmw{8C9~Sj?i5_o|W_(HiI>4kpDzVuu)|>y`A%0Ld^p9(^z0Gn?xQ?t?^hE4; zKfG6GX#rmeQAA3>pkdfWv6js$A;<9ZsL{f`66I^}SeXc%l%g^K_6FwP`FI9QHQ zn>2EuvHZFkr5I~FxFTJRGXCOh_f$|SYiyduIdJZbiB7*!EHR~c?&&9-I#}#wr2ki@ zG1{+BwPNhG@B^_~wp`^csAWZ`TA#0Z#tiK$la6#LtKh~szuJfm!oM%|f5?5wmp`gT zIFPj+<J~!(HwY|WzM9TL>-6)dInJweY^~u0x*!3%#u6{aZY;H^}AneEDr8U$@K7Z zK6cppbbHJ_P{y$B2T=3~Zit>_bdxCnlPN@Y?KR(rC~%Gml6g1EChnnOYO;2_|E*we z%gMTBnda*8U#D!CqHHEx;LRikrMknx&JVu_hR^^Ms@(`P!@MSEnJ63GkEOxJ;45ay_rG#|KsEi9qz?sKKgiU>`zho_A^UNR~Ve*7BBc20Q&Gd+lOn` zU8_M4Q7Y8miGUot-U9mTzB~BD%`Qi%ylmQUGqhFqgCM}s8N(5E{Uxj0gqR<8s%UNR zP5t4>sjLuc(qr|e9@~u&?(!|LzhLxbld3noii!E?g3Jqv{GEvP#6At4gOCMXZ_FXf zco;<-0rX`n@Hw?=3(RaAC#%kIZ~WAD$F|JR}pD$(m%-msg*WeP)oX zqBX`ek(-xQ>ql%+&A-zf?K^sg0x$n|S*La#!Kii3;|`b#P!6fsWsCb=a}vTLGL%wbp~iUo$0$sdu2c}a}}Q+P3<_eIqM z@${J}d9&L)s*L0M-SIUzME>ZFz8tQk4{TAL4^+~qmY2D`tM-d5UaLPcYQRKi=EA49 zZt25zJPUAM%7FE%Y4NnrUnMcVetmpHGN3Abj>3C`QaOO~GLkHmyB^0RdI9jV-_P$~ zt7i^fm@HM<-|x{Zd}&u~4U2|bx{#foU?fG$PG884+na_X&f#2?q^Ul%sJ4FG_X4A+Qaufe)tjr$%~Lv zS)B2jK`NV>!xX;(d07`Eg(@pOo-32~8{1M{4-bB_)%6b)~1{bPmFpuHweJXsx;lu331MLsBE)5YP6 z0M2C+FBt(D>RZaV1~K=ry?MK~Cri?p__K}{RE;gUW7S1%9;0V6>Gj+t<^@GpnL#pY zgpkmmIW&Y^&F70zf$aqXx#ctRZMD}QwLLfY-w@}K$;wUn zyn5VvDAx8mVJmZzFFYbnNc{!OK6@Qe4I{+_cIA0IUp<68Pd8mtf8GZourU-GM?R6f z#cdtGZ|6}@KkBGFbThCbA*7IECw?re`WUIagu~Ixq^BtTN6nW&)Qw*|R&;RsYbvzB zWtRqNps!`y@q%mFtra%9EXVnBEu`X)mb(ns&@YrAT7Eeu^}3Q~Xm{BP!$IdQj?T13 zT_p2>tC4*@j=E;|2aUj-0oyRD8N35N}HiVXqwdg2Q^V zv|Y5ke~l)K0R>^&+x`dC&nKR}+?0@%_@p?&VaOtlh>O)&-^Y-bZ5J-(aMSW1f5 zk*}N3nRTXa6 zE5-Ax{j<|%W89NK7}de!iAG%aI|_V^2#{?%Re~J3bOCOM3s<6RG|Wpn<_eFvC2rv$ zC0Z(EcCVny%|s|h59C?Xx&x9cB6LR9_Rcqsi`t?NrQcL-{pZQ{{qiPR=Xd~yDeED> zvMRuk`n7Cp;pX~+d$eXqytiT%P5;=qiQ&?&vA2&D;p01NQk-@2eW}<% zgp2$=EA;jXVC89{F~O*5`rbCKKBMP2TypUf9}s>!5rXAXaV^hkqLES^1y$p^5qj~r zh#o4o`NXTqJE|iGiX#WvH*Y<*&ai~uJLj;vR>h`^uI*~{4r+qb9ryP6CjkTYPp;eS zDOS(dV~94f_CAc0(fnnyUZrC5wYM9hGQx#o_@V!BctELJiEIT4i%jRh!(`F)f^b83 zPuoN=D*ui{2wSUWR{G{CnGDfv16X8|Vk5s{u2i}RU)zy`g7RgZ2ntkM1J&Ns$oT;wnxJ?Dn= z^>UDeh!ZNg6)3ErQwZdmwW~x3gnvyG_wq-GmY*4ey)kQ4ZO?y{2D8$}qDuwG<8qNN zwwODi_oWKhcHLyMTGL`{D>9@SH&lh19>jNKT`H`~ePivZG0lp7<2JUV>h#Wc^Ew~A zN&P$){lx)syU^|XfmmlxD@s}pJspq{S$Se2$FUrt6RVYcLTs*b;mMDT?5YyN2=JHQX97?iU0Dg z)`e@A7n0Z;4{{$O66vxoxWrUVs7c>)-}L{0h(y``>na$HqkP@3y1% z^73=nXeD_POe(j*2?%H`%u{W01+2DBKsMaT52(3}e6aYErP#gflw7c`{i=xcu zaKA;=`72`!e{!;Qw_~fpr9UdVWkBK5S%4>(%`#PY=H%NROtL+=c~mT2$!oA9@`F(U zL-PBy*DP2Mgd)cgP#drc_AG1-!uNgCSz4#_U8>;p5AyTIe6zGV$pe%M3V6EP;eYeH)%mIZ*JMLNKhN>O$#ijJ z5%=I0`*>n})K3AQ&jMqAt!e_ftqi+bo*%I` zW0^8JxvPDdq8v6i>jIfQiMzW00{pQ>$bn5MpHR@Qy{o1LZbG1zUm|u39i}?PUwU%F z=vyI`P8L*5e3($Au>d|DfbWKYw!Q6LKp6!s)gdOazhKYz(7u7hWpw#dj*#55{`G+4 zWKMe8+rolIfaJ6J-ia@^fL$ih)!tjk#+sZ`fQX0ayYn%cQHtcR7F!##X@L$&!tar} z5szh^FDB7DkY2CDyL2Fyn6Kv#qdmz8V9hj#pB1bAj&QAoQIrx(%*_%g2xjT7Q*OE~ zO#7^gB?tfkjkYyTiCqOVGGP0aGh*M3al63sSfK4@OXH4er7`879S!&UD?DX~^qY6@ z#pYS4>Wbtg6*KQzqTi1ks;hf)Vff`5h znJKOMk3+E^J|0foLnDC5dde}tUV~|Vd(&sq+rEnR%?PU1v5QeLo+*}PA$z!o^u^kibQ#bH3D z(`5-Xo&RR$@ppKFynMeK#vfCNvBQuy92k*_xaX{l2p>uQ2HOsAbi#%An@w?mUH=^) zlBhG3>ymV2?#vOltDmvGNVrWNE~FJ2n@wO+~`p zuHK3 zTc$&_UhPs5u^tbstx4^UEleM&4NLTR_R*~;#$a&YulIAcs_RVFtHFCuwq&^sZj=_C z{a!Go9awCiH zC#4&ht|BcUi+t8gj=ci%5OleTZm;3%bYz2%bq2GT(i08(-azuRr>}ucxJ}}v)a+*>AYFNxv!8zzYD%eh3;~8 zgM3;c9GKbPpJK54#eDQcd|;$%PUQQ7H%uFObm3|U4mtgu2}7A?j+6={WmUAeTwuu_ zL9mHI#;%oyzQDeLR)GV(9zT(uY|>A)Oxm#F^?H86k;mrw`k`2FG zs-!z60LI&y-c?_83DR$@vA%JN$8^jT)t>yc`0RpSi|E#~wKJf#lV~`<9P3?ghvMA@i!fJKelus6w5Y zX$;JMMbjFNB0O{z!U<==xj(Rm6x$+zTGi+#I3RHePe>rhHJ=_l@P_uP|E$1eGoG)p zeDZrN27^&$uPGUOAhvhTj8I=(h=Y92j~KGr!D-_2Zd;cq* zU3Ea2LCbVs9(+PX`1=a@wL(Ib_lXrE#r4lmWoH(8dGL8IK+6_2cmKq@PfL@ph@qaV zb}8N>Ni0HPMapTT_bmL2PC;F}1DRapoHKILnBirCc*%$ZOG2s)Q`oyFd7yTj%vjGn zH`#hT0KbUpD&rLzy|M>-mInNd10oK<6Z9|w+UH+4Geo^LsmqidlvQear?|MEXk`If zXl&kj*B{$C%WdTC^n?CMB?-3(D%tP%9Jg_MEuJsgCW&R2@#C*+j)XE>Db;*KD0uoxit{Px25wJNl^l2Pe!PC|Mo(@_ue92AB<6n z2ycr66jBxL75hX7hEzQkuifV&XxK8_6uTid9oGPeJ0bi|6}vsNm<0JteO63@7xjb)s&wm|0K)sH97ya?il^JP@S7f{JkUDM~ImY6G)B_uzi z{_fN1*w{o@t$17PIoTRCABLHi_mux39rFo9q0{#)t!ZGsb7t! zlMB)91@F3)RqD-sZe@3+v`6K?eq4il#c6uy?L|8; z_qZxTbe1i=fvOVM&shNK7uNRX30u@Bxy&^#Ryv##jiXrI0=)=WzvT!6cEoUhL~Gn( z;MM=_f9n_c*lXU*40R!H`Wy#NxIp;*B zc~trQ$(uAO>O}eH-O@M@(p2-){rq8CviNa6sKnIuF!szO6I?4lU|E8C(vJQ@<(J<$ zq?nh~V=pqo8=0lD&yzK;eAI(1u3%^7rH`tTRFHHqyT2f}m5}LxoHwtN9}Ry6+CquX z)8N9;9`ORItGrG#!v@~(98|hWyXklmYo9JhLG}q=r_hVHZ-M=eJ?0w@*?76fQ zuPE`W>le7oMx~1>^6e_n4oTf*l7cmC3hO6;2>rOXCL}3Yz}}?ztj;Nrark#Dx$DVN zGH3nLTNW^KQu@8sTSh5rx63lgOLO3v9GEHFf$bEHcy_=2x@q^8FnqQ)@46Fyu%VY(;JJN@kq#oj<}DC|OK(G4UxZ z025_cb9V(TiM=OU6y{HPZ1_ZuTcOr#v9;k$wwu^})F5}0VWW?3lM)P0s&Q?*#*U{} z5rWJK)B~bFeY6tSg5~>~VwHQ8&K2DXw|;U(C5RTx3Eac>Z01B@8%fQd@8n~ZQMH)Z z-^*t`UkYnPzR{h;I@p-A?X3S(G0Yn`L>jV2(M_LAiDIgH%ak@*hVZQ%r_cN09EO0cXHX~K%DEA8QX`{m}I@x7do9aA)QcEUrg}|mm%#Vwvqpf0I z%)$ezKk!U2d)iQZ_81bI-ES&}-_@qBS^TaIp6WkNrK!@ zuhi5Dt;v;n$DnNA*m(pF1{)jW%pTs&F{7DxKQotpXQ{O!M6w$y|K3? zp$IbRsl`}kh{3Csxq&hIXV5ggMq2JYyk<;31+h6;&(9PoBax7}-Hn*9cc|(@$Qz!BhVv~2ec0=Go z4DgaaKBuQ-OPNDzdRE*o(_{3sCQg2)d`1;XYE{0eiD$Z$s-E(kOb1yr$oQJ}Q?2~9 z{5)jEUJ=CP>%q|Zp<*eHCS~lhm!-ZFHwzU90`T^U2BZDitWqd2P0434&}D#Y?T5!w}lNp_|aL%@*Xht#i0KEU2E*0XXq4BqAjihKK)vN5MpA@ zuChJxa>Y0r{aXCq`vaYEQl5)sz+-E@A{ejp%@RAC1*yi}R16vhcHSk# zT_#i+rYE&AM5Z0BR{{%xHKQbDnQwU@;*MLY?p5Unp%*KIWk5vK;8rX!umigaVT0U5 z{KEFjobvcm0;?SQdkrlno%c;7f0|S3rh3=+X2z^zuoj^euyeopb`FHXb}DqN)ZxQ} zq;YW7)8p6;MaQ-Cf}MckifegWW-hw@+j-9|Gv)^V_>=SJuVNJGOVnm(wd{6dnErk^ z@kR4sttjlYCeYh+mLcE_zQkw_Tf#Mw67LhJfhRj?{`Z)d*#sc%+`k5$rceM)SZN_o zZ+rnHGcP{vmtxzN@-4mKx(wgUxY9tDB(SBJA8kjlx@G*bv|lT=9N7%7m6u~qVya*7yLvTv42)S2ajY6xaMG-_vbg%r z-upNAzs?DCq0E#0|FYNwZ~S1k+mGk|lo9bIggOV)mH$(EuXt~|%K!Z6&} zRv9orHteQX5^@$|K@J0t`ii*)qr5-Gi&; zu-+|%F~T}T`jn9wWmBDhoBKj2EVeJ^(LCDCgK;n8!Q5kiF8fv&rkdvmHyGApi!7Zp z;Clj?Z13P8&4%`af!30F0hV&IuI78!1z+pULz;TDw$9^1jZ1HYVi~l|fD_fJ4=v{c6WaO;O*~Ny%A` z{o`i(I9Vu_uYs#`kJ&}MnMPLxI$CdGB8_nosFBo-zA@>LS~GJ3^cm5wyDY|S0jyN+k)h!LWSH80>t2fTw`ap*r1{ocHkzA! z51Z5gq`K`00l3eU`Ht~Y^FAN^8pOGs8-4ex%_Zop_>|#fO!2OYLRPr2v6UOu`K(Rj zF(6>4kJNEB_T|l6(NzyxeCGH8+$6eB5?$VS@?t}7z3cTfXUj-O+K|RLgVM;NdxgDR zYMe-0Fs^j^hYW-fisF{`z(5oP9wd&HAV8_d(2UCnOsu{4v$`btU<~3FpcINdJsPA( zieTt*XIYT@P#oX?GQ=}|Yu+&~W!;@g-}TU19&PTajjkc9yRHyDP*l%W1r+%L2B`*s z!k(T9*W(;h%(RV-!tNImbA}HH51TP)SD& zN7YjiGkV$XaVXyB!N&AX1l4uN3wo{mEW8Q_Sv*~AX2N5KHrLX>zI2JMaSDiwb0kCa zZBXO)P`&Hm+XVFJHfGF^g5xqX&Hn31;OY__6_O%G**Ni1K8*v5LdWc`fLp{;Ds^SG)r|D*;&AB-@QmIRHW*=f`x zuYGJE!NB`+ZWKGmX8IFt#8ta?9US3vfdn$SQ6M4lw;A_UQFox!Wao*>=0`Wwish(Dm#lV2@(W z0dOP9zCJOw!pzmpz-^%=8uF#{l$lOjm6sV74)1lJsW~gjC<%TDTuhn}dvw|1hgsXx z=q~^Iwj215Gt6b#UoJph^qxdXA!t8t@qOqutgyKidS#SaW{sR3hJe-r^u)1W9sfL? zK{J!iKBtmERI1BtdruG->_BMOlsdlEkP7T=IBs*BWFQ}6^r$+6>l`W&fkYB6C@XE5SJ!)wjQoyy+1>w{KZIwQ}56_PjbR5@)ZX24-q1gY4c;`tI|4r>IDl=UP)l4Q` zM*GSoVW=q;Je;b#0%W_cFoQ>DA(Fss#PHS;6fFty2j9_qj*5K{+#OQ;<}&*4NXbVM zetCt>aJxb}LIw*lh@(O9EiVWFzB(G*Is;=+7m4WeoeJ5!llF|G-ikz9G1ml104rt&^K{HL0QU1=kgm`Zr90w?oD(__+61 z_etG9*f`~l(K**|ODoQ#HbP?4Sq`^i&D2Y*vmTJwa$R@j$=rnj{Z1pFYhiU~0KAtk zKPd93B;wP(2pG;qw$6bJ{mdh%c}PP^yfs5l)!Baom7E6Bu9zl&bUR_-AA_YUd$y~$ zp6bC_B>!GV_HHqREQ4CkJlcm}-k{pm{9WhCRuPi8I0=neM>7e#eZ~!c?AKZT?U_)7 zIWB$@GeR_b^+Z5^Jg^T@li9S|eSr!{q?5h1?C8L4ybp;Nyw!Edy@NQgztu`~!)-mS z=DExlelWYq5^vpG(AU4=P5e-ELH_RgWb4+85!pk3#s)@oHbZc5VPGJ-9U6=Y$dLY* zBx0QgbR;j}Sb5}psX7%?YawbU*aVdewS6;Yfq4$qJuHHZxNclKKQ!WKH(CUoOF_qb zQ|LMFT;gFw40?dw2O@QQ=YPGRX0*?z5`RCIl?=F6ZsS%?s1DI7b4zdBlOm2k^_7o9 ztQLl15#wjz8$>@C^>RW>kNw+pQlJf^x@IDEF}~%4HX-PMLqn-9c|+nfg=6+~O1#yH zfkB1Mlx3?U9YK24zk}NbKgNS;eYJVLsI4gFT;%e1iPc|JR|&1U%ZSd@c6FQZ({28M z{j#pM+R2)BM5XR|N1C$gvu@9;zBZuK@}bYNR$YCN(K;_((nd$KRoYsEo}=y0Kmm#+ za`hJDX(dl4X*ZEY9*MP*njqVwXeo(Ko_)Vn(r+UfWh|sMtacxY@2VvM0{tJNh?9+` z3V9zxJD&)1x`|KUMuhGfx>T4z%{2UE-iV*pLc<__2oik3p zT{7u^HZJSHy;=PWQ)k84U}tBzkuzXe2B-~#!XfP0QZtMTa_6hZz{h1~+aI$>Ko*o_ zrYjX8^Ebo5I~c@p4R^7%GJy*fS=%mVa*#p~e+h<1*Im75Ep;GxznrZ*yy0lqJJ!0_f&FApQIp20~dQai|lHpZ)>4xzvQZ7KWH6GaBI-xHK1-uVtovzOE*GbpbUp}YkJYYU| z>mb>F75cthke}1V{=J3}Av{W~jNnxC&35{l-Fkbe>Rt`32S54Epy~2Ed5>cGe`32q z<7`uw^pvA`jwa)O4{V#g1{&IrSD^fX)GiP}F7Brlvdm(BE269mPgVPK!EAEA`cEMO8{U`L z(lhvTQzFdt9Vp~BCl_s<(0PXR64jn!PByY)diP{m)m8>z(=R?ZI}PeB{CXfW#7JHZ z_L_~cJu5b{%^=y61C;cc&~6=l(AU)PSmR=s2pNa_H|!-UpU)4RCn-43gc>kx=6BmE zAv!IzN+)BMNaZZ|M_ge4NkG=%>;y>Svw>axm!vrt1HmaE4Q1Z}`SLo@&XEc)y|>Uze@n zekH=vhI#lxX<57V`73QY2PG1+_rl9MgJt{k?-M=V=nvX=v*@lwp6~vXtMI_S6ScdP2yC3Z>_ir|sm&;3~ z$o+?QPuBXDI6{L(NB`H`!S^fxspH$LJvh$mFgA)hno}!du5?w9Abj<3k6jgY2{PK@ zjrngNK07&YEMF6$4r&68dB4i&YyU|rlef&WD<=-9LE>jwT(^F!dC2aj9YQ_H^YhGD z#v)LKqXNKR2%nzkNnq%Moo|WJ6B={+{bv&a2D&C@t$idX5jk&fpQcJV%OM$gmLQ+4 zWSdaXo^H%HRvc!sg3z%H8^e3xhdCEBp;zFhOKlw>5I*jnAUC$L=eCgVIs?0jLtb7W&q7g%O)BIH-uZ|n8K(=n&#N){bE}im zq0RM5Nc~A-VF(tngZo0YR4M_Fer>Qji(U!7D;Ni95+%zTsfw=TIaGs(5i%k~nGPfbv*Fn`FX`JQ69p|dI1E26~{jDf8v*gPn0b;U0x^8r7G1q8ocDH#m2sZhRLXvCiv zX)ALi+7s_hefz5>G$c}SC6qlgrh=4;ZB&eQm7YolM*6u!?tti;gHM7Hz_^hgQzdSV zAIQr7gt6T5+Pm6ZG9b9~d9$aT-ig+W74WH|$AwJ+-cu>RYX{c!B6`v~fv8L~oJ!G* z%nZcLImhCr8pGnS_=j-!3L_c0KLR22jw%dht!2-*Caw@IEax=KD4#wviMm>45^JO! z&^cFpko#rk@Z6=j4b}P10*YvchJ+LV{)JxDqXT9FY{f#bed19;%5k#718UL}Pd=n= z9TlR*fUd!JhB*HwE}RG{NM6rTW-uUR0WL5s0{8_Bj zKsdHJFs_P6_4UTys4|mcRQ}3Z7wE>2mh#S1_&xFrYJP3^~Vy1Qv+?>&2~H^ z!~h?AvB>bL-(024BR9`wc`)yy|CJ zr>JPzfn_ovBOZDNZjAYo=kcU#h6uix*L#gDF7hK4-lE*(@SXgWlucVh&<^tY`-4Z^? zO4g%?Jxyq|2pkvi=}q!KmGfS#DD%!vLFY~p!4zDj#h}o9)SaCP__m*97!~t)a{V#xcSMwsF#FI~hFq-^ z#7)j4LJB9*4p$S}O%cCM%I1y4I6_!=XOn=fqf91}mJuBlQTYfMRF9qJ61=j^+xOr5 z0x0fQjCxNe@8z37$N%Q4`vr`;k_zk}EO6L-i%Z%dCD%M8CO#9D$^=)*_2QgQfwFJ; zIO)SPJ^?@8bh0W81s1;L=H${yge{N6ds$U@QCOZtG+KYkE1Qvg7)EV|sf>6I9T$F# z7DmP}uld~VLAAb?zc*pY&*&RM$bw7diteCc;N7)||X+S{{dkX}07!u7!Ny|mwapMfAcrCrUa z+`oE9$>cbn`7++xcfaugPq~3Y2L-29>wQ~-guI5qUQrTE(@=k|LE#d-DO*DQZ?xE4 zRJ7ZV_lcCf^l!-S{LGUupg^KqA-=Ku0AkC^#c(0`J zFYEslGJw^uG^!;Fjdf_)uV6;glLGRU;^F@$gZ>sX(64?<0=N}5klrpW=>!$fd*$tF4g{UH?wVhFf7c# z9zQ5InHS;0#JxLC9Iu=Pk3wvpm9#faUR+vdz<06CgZX5`C;)cxh+a19#cqA!IP+m2 z&sWh>`c!}UXJfrvAq?}<`>RCtcZFAdE;I-pm4S2{CG0oCcA9-wr=9(6-hiNUV^x%t zO`1w*poqvgnQ_Q=x~NK3zvm=dYZpRPvgNubQf+-OBMZV7Z|QwCBo6Rjzv2j}j@bUg zFW8EBWXyu*3)LVP2<$#SX8 z^3}MR-pBpdDXg`;|CCMcLj$+p^l^0vdIR>Eo(yhe&FdVOj(@zk#k;$tRkUnVwwNfg z5K690NzT7Mm`%^Gnk?F{cF?H>na){akk$2PP#{jlR>W_zFKIN9DWqFSVJDg6%|kfS zpREvme1D{2j=+H4f#N`)kR>G+%D`bax2X|^*D1$_OhJChXiWm(`X7UdY`0`0UTeIRP4d|M z3=CCT2DNIAfLV&eDFW>@r{YXfDLzhG`z=ytW_a5XzSd%mCm1ac_;Ca3J^TH}|5M)p zyYTnyEVWtMml955r6b}w(s>lD-k3eqE69@rDoTT1VV+l3tW}$PO_r1{YywEm5D2*Y z(16#q#&E!zw6bRy+3oo*PWqStprs!vIW=q$h(2K^3lZ6U?Ju@`1OnFbwC_Ggj7ESzn ztRJ7?^MKUF9FMASh!|&6M~HAvzIlu-6^VH@$F=HdhrQOxecujTMl-rRiMuKUTHrEp zGEnEg(BSyz?Dq+W%@gY4tQ;=fkvm%J<Q#<`FgQcazFs?S$gG znUBpX@stOS^>%+*9KjM+x6Y(*Uaja6#msnN4@sp9{)8k=k=L<~@|;LAe&nPv^y>H) z1KO#Dw9)xURL|STbuMqIV)<>?ma44;2HE!NaUXW@*u?RQrDP!pd^Hh-K^n%4JA5X0 zoX87J(22Ai%3ye;V(IICUhEN?oG<;Y-9Dn8!0zPj@Ud<47=Xtn4b4?8{>;r!^?4b$LFh?o0yNw`h%8J7qEUm`9+FXOMc zfZCW;cE1rms87F=Cqk^{`8sck@uW&V;WojvV|rpJ&pY*H4 z19eSTl|7xpNXBY~MgbPTS@KW+M8BCNSv|>np7-YohbEx#6}>J?d&~^2 zgGW4RZ5JZW*qy;<&!+LDP4S~xezLq?rXel7J{snMa19N{q2FX*g2r0BBourE_wjeB)FL#+uP?y6vt7{%(CGF1o z{hrYm!*D*YP1x(IEmI*MZ}oz@pzkXfRe>$*x+6-zV!OMwcf**w}Q+pk9QxGiBeON=j;1Fpewq*$>*A0aO~FifR# zpfVsng9yak=DKK)hdocHTB-T+10uQlPZPUrMUb9#1W_+OtppqD5A55#SrQj=xc9k< z{NAUorP3E2AMrSu&SO%0Xk+lv29|aN_BBYda1M? ztEoi5<`(juKR|Qj{{UVL2AeU;7OQa-RHxVu|AqgjB}f8CVGL-J9s* zLj^kjVBx32Y3-X0B%-OI&r3Y{!HFOJN0_*w9seI`@^EZ!)=&l{6au~6pMEe1^B~1RYkJ0NN{?X&@FMjTa?Kp}aId#G2MAr$K z_%X-|Hi?j=Z*>~9v3QB*ngK^%Q#~sZ^K<{BkKQv-lZ5;P?gXRIb*>GOr}YhZRbe_d zuyyP)_;EIVb{+jLN7e<)61{V9_7dv@Le^PcbaOT*sI&gu&g>`0==tD`4}-d2T%r15 zpO@>OYisAPkNOC~z>t29^pi8c9(umzhQEziqNk|aFx$9^hdA^#f{b&f`z8l`hbKnq zgOyVgY+wF}jA?k_JM+IjxDh+gEIdCj20tz4Q1TKV7*wlIm$gORiI_RzQi^@+x>4fj zk3IV4DkC_1DP{dJPX*uk=iguJ+PmQq5AiQQvEYYm+Qw1YtZOw~;l}Uy|LS8DEU#(S81r$&ZR;)sK6LN_ar){;W*=SJz%=tHj5%^_{6;1Qsd!G* zy* z_9|afdH45!{doQRe=JrM1$AL#b~4g~WaMAGq56~Gd;9o{f5@+q<~LJo5IecU80rbf ze0y&!jrqgezl~uq`-6w(7LohLI%3Q70imX7eg8>j)DugymEYP%-k38T35Hr~9bfMU z@u2v4y648eRwzN_6`L5*XaBW=8KhrUU>ZlH%|FK2`#}%9;on+-&)niGzl!B({qQXU z^WVPL9o`4wOFZzWkFDe2=$Ay1>%}^Zl>9etBs<22DervH$=_}}RC2KgPX6KVx7iSu zWWqNPB)(@wm;tv$c>Mv83AbkOm5d{XoFUJP_kXCL{_A`GV?=yntv_cZ;ppBZ z$K=m-kecOB_dnx$YM;Kj02p6un*iY7`Rn}0C${(!f<6uav)aIkfeth73|xySF8r-` zmFR8h7$es|_($A*;}s}=SqDZP6p<&dyMjEXo*J2zE)@k~Nc(H>rY}K|HYDn_3sPKuDXw6cxK(B~U{=TFO(Qr^Slt_n*hah;V#cNwm26#`v#@F#MU(>yb74l7u^VyZ z+NO^Yr>R+e27|>kDaInE_=cTVbW(|fKe?5v8*KDa0Fuq3|KOq{}ch+{F@FwPZM*#i2^bgUK(%w`9rJC zjJSxPG1cgE=7VQ05q?+zFEQ{_?^;G)(9K;Ft@!Q?7ouQtw~{kwIT*8^P879U{;0FD zI2sG}!yj&O{Pj~JB^P3*F$!M7A%5Z^cGs$R%l2zJ*m2zmDC|f*cmKyH_3aCDfBBoSPDQN zTw_dhkVYmqHyE)R82EgUD9OD&vKeVbH1qQ-aI{}?{a_JT(4b!9N`*MGmXN5tmTnnU0FW8w-%b0(yXjWe5x-Onp+H&@QY zPaM6rH-CI>Toass_C{Wc@c}O)=OZ2Gh{8w4i)L+DPsKtU7F8ZJzY6s#Yf4Pk}91im(^n641 z_y0-0Zu|GR+G-Qqag=NNvf`VW$jQ8LI{fK346c(HFx3!z|6)6&I0hS-)S;{(;PYw~dEp znm;fl_&hM9OxOP`Ku9q1a{Xs*YsStQB2O3=>$U6uO-AE~oUZGiPB1u)efKcq2qy)h z$49w8je#fzTQrS!JdT*WxBrkuFF)tJCiH0R&#hfELmRyxhNaKEHaqIi2bb)>&O2fA z>%(F)H|R6)_Uj^y0sg6<*wj3}>JLAJC2`#`q;0H>#Ul254wDO<15y0|#HaIwk08Q! zbB&FDIV2|QubA=h)3MJXO@7V{;ODwRP9uw+RXzq7wYxM5^cWye@_wf@JK?D{k-|Wd1(Vmg3wIbr? zVC(Z&Y$u-k{9F3~v!DHvb~u<0=xDui)8k47ch{e}VvAuzO9_dt{Pn}5o;-FMD?DsX=e@+k1jd*UPV1KmK|<^qtCE=J=qX{Y$x0C?fNe?Xn=*o_-fny)wDLb=<=sO zpc@xl310kmSrGi-m+SvTDmL>EU)TTe>so$e4rxdEHd^ALPi7U4-Q+JP`*`xRkOU2D z_?tKS`1zN6YBC70W+n_cZODe7Kyfo*RxSPnl;)+wjzewOPtK!(Vg$foXbS-Ef5t9Q zKmYZs$3OoO{|+QXX*sq2iQk-7Jzfc=o#BVc7&19#t%J2Hth1+m8E!fW0GMk+Av2w z3(|fz(Irc!>+ZR8U4N^Mv;6f1up-X&ow}9r`3O)PIk~nHyAM?6fDUuCY2u|H&`J=X z$btRGwTOp%&&X*2jJ;S2=fY7zKRgNweqOY}K)0)m3kKsD@H92Gu6HBxMzL=!j$d4G z`~fC*FVIoF&Ho_! z>G#nZk(T|250ZNJh`uPx?@c^~{xtvV>AU>?|5?L0Om1}V&3~(n`jcA<-z~KKd7MNB zb0*010&%m6%)Gd{kX8e1KXy<2Poy&dmb)4G^NB6}*^|_ScGa!$hbA3N%1zL@;+hyD z=cNmXsB9x^sKiNq`x0NSh&7;&qyR_ytQ$7`uBpg*>(Dsxfn{C+*!`ynpfrxx{ci*) zrU5~1iUnpBEH985y2{h({)=@%s~bBUvB%o8Mjgo?pYA`6&Y?T#4BzW4s`D4*o+sv5 zQ%hyUmp_N!=zv=({mz}e-@JQ#`g?g;Ol#bBZwCPbN3yZuW@A)R2!eBNTU;JZ#aE61MDJtA~`9anSf&|WdgZqjZJuPSE z$zQ`6oHd%5yvliBtjGOGO*@y7-oww(xG{!5SpG*JV}nmWTwFiu+K-$TsQ)f=?5qRz zh|`8G&Va!|o8jIC*51b&F^D5}U}!sFuG92W|2_gOZa57K9sD<6eIi)XsGbJQr8Xmm z-&*%{@kfqb{`zgCsI}t+HUV*V?`XszuRWnhzGF3G-@fw?290xKd)j}53I*?Yhi2V-zhoAX;eT;g`B!`bI)Gu6-t!5|O(v;HlI^N(<|X!Wt*wS*gv zo4l|zp#QysJPK@BqJLf_TIk#!5O<_Nq_m{y!UO_ zOvbAH;Zgf|wq5*=W9ScfdF~WNk~-!7x9^>t(@|;11UqJNEHW|{%AV7wo#b$dF6}@~ zhxzCAB;WZ(IGd)?$KL`z9>4zbwbuYa!HwopVX>={IVO zGss`()c6>_Q#?-&h z@7mrKhWqlzw(Gt)KH>!m_T>lnb^hCD>`D_&0cGmu#i=>K-#>UV%FB?dk8{RlSi9xI zVkf>b#zg^57&>!{Bp&Rp7TgHLQFj^arhwB0d_1!Z$4s3I4UoLBY0{-QlNJp7h|`A< zKQ{sc+W2cXvJqiVmsSya>Xci51eP*I;|(CS();E^J+&MEXMRv=!+_!Xf{kkY>C(!; zO=KQD$T>E?`IMi*Gyx9!!Q1t(6*hi_J!gu`-Y2Q_b*IZN%Am*`iJ~Ls3cEf!L>B+m z)kDC5jJNvQFQU6Nd|lZAgAX?z#Jwqnfr~n_+0p(xS`L?gD|2TjGI&$3_-Wxo9yX0w zne(1r&hM}P_^DsqM#;$QWpJ8*j>L*QjEyrRav-;0^yV5n-_KsQUc>Q(A721H1S@k| zOEPH>wfvbUzP;fqI&A~+>T__gs-<4(4!Yh1$QVAad)S(1G@qqUtCAW{op{EYK*^85SpRfF(+7=x(8MPE!$B=*)@1r~G6x9Y(uM=dUK{Z5H56O=*z=)$+p`Z3airq)CmpL5Y^=?{ zMN7T}J?l~4j=@}Hu7|X1|6x;Ye<)WyRY6K*NC=I!*k=INMB_k5Y%&ZKvLe#S2-^q< zZ)V|ck$&6yac+O-PKbjEb2YVtU%ohTUYrZHwPO6tpUUUof!#)Yn=i6u@%e`_L~!Jc zErWNTe9p1_oR!DMfH>nYsP^l(25@YjZf{TB@#-{ZJ*2^(X8wp0#91;XzEx?3y8e)D zRvSxU0be`tq*#@)7<|V<3m1ci*8KX zVZe0<1L_u6?5)9`qoQHL!F+N)^NbiF{L?IO`pJ{*`m49q?au-k!QQI`xpto6=koD7 zc( zPy#Z|WfrH`pYdA@v>K2J=~DlO1o%t-@`3loXU(1bMTo7n1mw;?ynE{MjZK<uDUzLn~4F+{ut-ZQq-XZmTJ5E*eu*mm-uD4BP?!$CIVmmzKIZQxFTYzc7aVN$&6)1LZ}1E}QZ7tMpy}1n%Q{&M zzq%ZZFZRUW>se*79IlKh0$c%s6By6*(~O^vP6+Zh{oT_(4?2kO@MByT3J*Uq_xYx= zzaf9b0;gmBTZ4^51I;uPlX!UEy1suH@dRUKagI5Slk0!R;wFKqj0Ud%v2J|vS!etg z4~)DR-uWFbKY7yTL|1+~Y2vyP>1Px>*O7|7CPv4EE=F`dtKz2&UHYAL=dJhm5JX=N z={$5zb&QTR;ksD72-y$ojLyGs(e(>0%*(6C7u@ogd>y8WA?W^#P4X9te2f^9wIE)Vsbj3Tf<=i16JZuKZc9*8nNAy82IPS(&2L*dh+y~unoMi7{DgoX zFT-g~_CbRxb1~-a0CPuJnsT6d&SC2q`&ap9jSn59ph|#r$BENyR3Ube&-&XL#+eI} z>Rf=0$>-?ebp$YD|Ji?9?jd%-B_>YHfxh&u(dHj5izc!7Qz-IC^9TM@4?NHM zk2!hylh)<0OJ!#c$8PdQAhoALhanLCK!cR{&fAsoMdo?3;y~L3)Vn3#_CEj zed|b^P{ckw>mwGv`NO*LSJ36(t2`Kap_I#2Sibm>s=kLmoiw7t!?_v0%Hbb*EYdw# z)pNY$E5oi*j`@=q>2c%@i2A9Qp=yu!TG7{259BN1+-MuiGLXCsS0e5Zb6PfbJ zIOC93eqy7IZ=E%wCK~Cmz_qSR`sf1cdmB`P-4DQLFfM!m#<#AG1)1_2?x}wr?)%^S z7V%7+@L&IS%CVm&%c~`HhP!pZQbq%c35QpHw?XZ{p$im_Fn%p1@=i^ zG?dfb{~X0{o2k+X)QK_U{LiqqGa(&v^z-er9}~!=ZcO{3-xXjmgVmo{#T%|^CkMte zSoP|5LRb*U9LGq01(7u|zOBbx7~kOWUdYrjwU2L~HSi)#rbb`Rd2K%GGvwODnrTX@ zeq!KTPyE4#@e?OpfMo48vJQ>KILeO|t^7LK*GD^oN!zuhNo3Z**&aPI4Li0gfH7=7 zZZLGz@;(pJM8GzFW23}Og+`NIBE0uKwH+J~o%WKB;?BmD$R~c;PKPp2YM(ma!EX)-? zLs8psN-=q1#jl)lJ)4hEBZ)JtO@wL{);x8L$uG|))A-y(2v|R?gw?`$o(=JH)0+bG>WHZJ!8zm15LYI|@VvOiy z(>FUDw?(Jl$mr9sN8~976B;E%yadO9$8Th{?+G7lcwO#WU1d2i|5hYeFbEN9KU zqeKJQ%6es+_#lfiPpX*g*Q%)*A1>O`(C$ zrPazw&21^E;s$kZ)V^%?ke^T|>z=4Q$^`@++5p zbBK(vIh7QqG-U8o+q`UJN80(@t&AcL#UWofKq7&RqwxBRPf761Wu*hJ(LOu@r1$XW z-^BD&QULiIJk&I>5}3=48!<5gH+uNZf8!q2;RkQ*>sLqXCq5s78NS>MSTp>!ZS2@I zxT;(a0mc;k1=N+frsgNs*9AXl#c#ZP_r`qld37a#wT_Ug(WIXS11EXF5^_dm|VRp$|85V`#1kBxJEk1jaO4LSjf zbrpj)8iH zuGZ{-yu|2WpMU0dm71g$Q0C>zmnYcXYl0cy&KYxE&c?L(xoTxydT$5@ z{FW?`Hn3?EpVxo5h>2!BGSH3#vxG9yGo-t^VAxhR!(Ow-UY{teV+Q(yF~&P4P;n5X zLmb#B!=4v52xx1U?(V~zSYLh6&x`7s-^8}|U^!7atB(R-T1;K18GDvK1M(q0J(Rw_<9{c6}ca%8)N+36N3{MxGs*th)l)M z5K~+HfCv`!G*uktwb$Q%h>y6}DGjp!U43AT3po4yyU%|rTa=~~n|oXSDdnXS7v!!# z)-&u|wC4J$-H#O<~AItoS7%b*YToA&Mq00ar z{p;XJpBh;`$7uK<9UNXbZGWQHrAs|I4|a2jx6tLsTMS}0nW%M4rugNhJ{_>TM#7&& zl*9);KdhS`0FB9{)Hd#PyZ%t)9lOYqirmJIISpa@Kxk$Mc@22qMQ?^{u1~~?bDSGW zxv|{ zC}+`a2^Ow&Sf`O2=V`T#n|KW|CR%n_3awS9i7^&V(yt>E|>R6A+wJW<^_gp zo^$TM`B!a~>*uwmc3yYzi39dhZ2%EVGS@$CXvw6zk59EnL+&N*{){l{b>ehad9G z3hfJiwC0IVi@TVu%W@{e!(TRzPd0Eu)gHl__KPjQsIvCv#yFT9=7K~N zNQ^1@qnp&dL3r)mg%ji2b3VI61U%IR038dXw&k=o$1*bK1q;~7pJZ#>dCo;OYUh8k zfUSwx6ZN3pbT^w~PHeFpRnAuVNQPM~`gjmsJtr6Vm1-8~!NoAmZ~HLMc~LhWw9kAY zkImuFVr!rLN0B#etVtsa0J-i8(>H>1bJ8c*AMEuBK7jDJuyfX__`UuGe*)l)83D5F z5aZt^7@qVUyN)2k9)6tA;j#IruRS+QZkjknXK+|Ew-FIs^m=j*l>gQPCNyEPuAsmu zXX6=8r1a?h*2!k1p7)9~SWR`y;y|ky^7H{h&3;3YWuvTamFhcud7u?y{5fxAACgAlujQ7n7hdlkTZ)jCs* zRacgz84VTwyHfb3%GLOw489n`ucG{jJ7yPV;9mf{{?YpDqmjEJ=fki5FKG2N)#$Ib zAH0nOov+yMh1Z{aAn!WgD9+7Z2X6et#d)~=4h}e|CQJHTgxSZu84)5UKM+HYY$twe zzJA(aixF+l$@|EVL&j;&nDNf*m}hQcZ?t2=x6f#v({*kKbN@304RXM@72%ve;0`up z^6a6TAqyj zk1wVM$}vgfE_?Y_DBSAA!1B6+sK3e4wkBM0!aMbB#4*g@H*oWk;)bPjzo~YGk{V;j ztL`)CDI!~;JXSHsz3#a($Jp!PVg-D!|ERIQuSe(jCI8HSpMT1^{I`)I?@~Dlz+oJd z*TxY!ZJ+;o9Z$+NwgzB#|7ohsA7Yj%zI$y?7CiUGVdrn3v-T1OZ0D{K%N?2Z;+)s8 zcp?sch6`cqriV5l?QA05%I=4ebzOVB7ZX37$17`8#Ni+hY$M~BZuU8c_zBZrWzOJj zE)2#^Uw;!St$z4MkpuOm-#lvv*j2&uX&{fvb6F66`0eLFz4Lcss#FyC90nt8_n-EN zs!XSY>u9Lz`)tJgV>}Ky6|oZYkCs3dl3qP_Hlj}M&6|F-J1~N-|Mf?w$xMiR1WwES zYN}Mel^@QUHJ>~GHNWq2|1l*^dH&rMG`n#4;o=Q)uZb9^55G4{#spZOEBk~v_h?qc zDcuy!=iZ?K!M66NurZ)STPBOafVoL+c0+%>6 z!6T24$;6A`@f}sqau23})xw|K`mtxE=bc~X+P4;+G3+c9api^YmRbI-&d9Oh)dP4~ zgL1v;LTcXe-3%OS9bLo7s11HtX&mk4K#KM^*PIuJrZT>Wl=e9nau)|K#7`eyc=Y!b*xMZ1|Tfbn%heQ5OZtOCjsl&N3#J~@5uyZoY&e1ob zshhb3#8?2k&%ZHsqKV)Cjd5ZjK{Wgu3j9aB4J7Bu+z8>H4`J0~M<;(>O6?}btwjXj zW0v-g4;3?JE|K|o?l@*(qY1wvT&J^RJln^+H(|#abuMq$Ux@N5Un6k276GX8+l%c0 zVM+AvEyZLWsc}V9sK{nLY9HS5CoU@K8fHE$H~A9Vo*QQ?UfBUQ9{kzSFteDzWSlk| zSa}j^IQ>>nIf=hDWG;CqYPHF?*$ES{){IenEH)PSZZhLx(v|MLMP8D2p%<%Nd}~Y8 z=ywj-%T%*_sC^c!dweL3Fb9W;NvmLVj2y}40zq4G(bl&t=&(nc-YAdG4{?fy435QV zk7GIUr+tjSv-Ofci1~Z2KLOiyQr6U3(s0*QhR$AG@lDX$$R61y;knVF>POA);C#RV zZDMhL&|=pmZ6^mL*T+*AKfk)w>o2@mQIVYKrf0Jsd15fu@a+Ast2ua)!QWeqvzRT_ zGdR?wE1DZ>TGsgCanlf8@`>DE5uJ7adhbQ??p`40{Z^Zst$u=LoWI=xd`R|YI5#fx zS$-XIK!)w)hTgQh2U`dFdm$_*zcnh^l!y_`+`M=HRW=6Hwv+!P?f|gm$IgOR<-F64 zjN%3ZeCp3!5E=8oeSG)%$I@XJH=^plTNnM3NZ9*G^kx2$@5XeR#AqgQBLRnQMsd9Yv>g6~8-+!%r?tOx9 zW_H!RXYaMw`meCV*=OH#&hrO4NoB8oddqfGro^&ES65>)bNsChBRHfQP5se^U8*ydFf^Ozf0 zjBAxtPm%7qeElbybyi)!e({o069wj%oF}|#52hKC!*hCOp{9OuK!T6?kL0HeGTVn; zcD4E6LdD<7Iyxm|s2Z-;oOJ6iBP0$&8-JNkqGO`0n+}pb9J}wH`HMGiZ*BA@^lyS!ZShl=A#r1#C=e3j>~3t7?A57#WiOH~lF= zXwcu<7hTj?#5s_l=qTGtqxD0D&i~|4*2d=ipY@ri|D($i7D?Z^Gj6fN&NF}j`fO;MLK^2A} zU3Dn$oV0<(tNPA3I6ADR9|hu-{#**AIy(uDszEjnIngMAn#gHekE_fzPf=|^Vx)eb zHiQKNmHOB&J6n`SPd%wGyK>sXcj6n~rOfrps?Q)BQ_h!!586~wy_xmp|3p9;i267N z*yWFC_>UgrSRjF*QDeDALQW*~=c?Id^O>Dkf|e0jHW5Mg%;;*%xvxR?K69_(=tm?*s<;|`X(l<-G7z+m>}^}|D?SvB1=q1+*YMU>6uy(Ct!5f&Pl}9yDTo%(US0c zK>@bMpBZe0U--x`5ZG4j$3~ogWkPG&lP^~9>BmP(O@BLyr=3(LhxIE4+4|Bip_ca~ zpH`R-FSVA@2>_|~NnGmFAD^H&Te@7|HVB?X@warRgexJrmJIRh#=q>%39$6r(9-WV zOI#ebO)91zNk<1(lolO(^pwb&Z)|_jVMRa9;`Wg=w@ngz?5KAI8I#>jG5X|Uf!0$* zSA$!NzBr+ghcDOoc_LfZ{x+Gvo{3)Z(q?tR3JCxo$pEI5emawLNO8E{Y>ij3K$!lY zASJB=Skja6Fa4r5{T35T#+qZpB%cYJf$5SlMMIc8u~dFQ@k(9@O3&~A#8)2<7M5L% zS;yT1L|v5~a8r;ZO6Xy}=hD>5AhAf09DgJM{jSruH^p^C9qpL6`q%hV`{g1;N7@)$ zz~tjPgp!9GdOZN!(V(pl3$U zP3U5jeDJqeGJm-L+D2-Wk&s0ce1;fv2#IgU-z>uK#$O8f+^nFcEY^yjfvODv4TrfZmvN!SIF^)j0hzz_rxaX?{{L_M`?6LNO`2oo^P4tSPXE(~q@sn?*=ygZ zOa0U}O!Br~cBV8GB^q1ppMMa+m&h4Q`=eeZC?4Z(v35XPtP7}Lf7)IC(`MFIjBX6@ z%5uu$p-<&wh4AU)aHlPd0_Fhpdn%U<`rseJcJdN&kM?-NsqEJdgM~ywW$t7NKIcQm zOO8kSf5{+i{d{pDp`$;{wJABkpB2|)KIbg#Ct*8EDCM{|%{Jnv$b7-p=_jwmd~KR^ z$)-WBu9#z)-;tB={)p7ZA7Z8@pm>{pDoQ_bUZ!94Y6G}b**mbAhfb2QY^d8mV*p+4 zWclB@edLUAj$BZSglmWhY4D>^(tw)mr0I`W4qR}?UZtV=@K(XZPq&`Eu=&NjNL z@PYG>b@j0dEAMcoPLA}6SU0e$$`-83WjuwgLvCoNy~JFDtFK=vZ+OvFmu;`u(%7Q+ z$2d37XtRnJMp-AVU2O?|M^{u;kBu$9d2L5qih|Fo_okR*$Jhs{bP#*b9q3apuXaJ3 z@m!}uqM7QTs5bTSjbtUjmGb~xafzmtws31zS$7@H* zVuIQw!&h0A)Z@OBj%2A#{n9629Udx*(bCFu%sxq^NQ$OogS;#egL(8_VYPzf)wlY; z^{ZuEFBIFYDtPRFA>)I66=>=O8yn!%O2oENmv-6y!m%uPs%=uKL48i7W<9m^5{|Y* zM$!M=?F*2#ly!>9y2N8E(qJU*lMbeX=yRttd?nrZQqK7#5mccLn%?LeTyzkaEb5q? z*w?Lrsy;W~Y(xZA9+=k3(kmSV(M2O9tMaK>pJX%XHdUfFKPXiK0v`{eAGup z=S9nuDPk7IUPEvs z`Fcr5Vf5-MU;2CP4}m&!c6fCqCDT=hGi!h0Ly5$NlppRMwH$^d<`8+4LhQ z8_a|)q9a%SS1^)BMPGcoI-rot|HTW2E3!--Mf9|Tbx@$P`hxWn2a)(Ex?>?MPiQ(O z0)x*?iED0Qp;Kf-_vg{=l+p%KM>84q!fGrTin_#A0T|mu1t*10NOUs;jI~N;*1_(` z)^x?|>cj`baDtTnns}2UdChP+r(h44#NvlXdO6rH76nSiBcH(3iZ21JUoxODVL8X_ ziEF+Qz4yg+rc*}Qw8U>WhXEUbHqPQY!ee&(^NA3ezx1_)DmVHzDbg`Kye`(?F zuMAWvq#j)SE_?wyt1rh!^}aP5gIvKyo3iRM>8Fbo3U>n0GxqTN8bL=y@ixbS>d|Y@ zbs#?Qz~oOw2$Ny!62`zFJ=9g4sm_xROMQ(Gg!srv@&oj5%A{{NqFD4gAY&D|2s`Tx@2 ziKXHY|m-|hk18OsfAbrXVRxTd;P8#6;iGC#_gG5_@Ns1n+1Qs9aHO5j|VVa?u#XT(MyYaW^ zEwJ$T6CY#4^PlwlP3k2pXl!Sjt@VFAu{maONp%#ky?x-x`OtL^ARBP-!OSRbc0*Jh z{P3Aa{@8W!`Ji71#}OS>c3q?E2osxb#DR}xAd?ZGHxM)Lt-y+J>PJtqnb-PlOwv1E z!2sp@8udVyEk31Me~R^wKkgv5EdEQTwI}{Do^4aIfmd#rY>$Odj6F887E}m0mH%o6gF)vT2TYfj7dHEvA{1Yie6*gw$Zi+#Ze-Md{A? z_u9a1Em`Yx&>d*83g3Q84Ey~_9bA7y0FwMN|AmD0tnJ{i6_BifQtCEIeZ=)}ieMMu zFg6(GwhZ;jAWXv`0I%pWxy^yFkvz5I4?crW7Hx=G6k-1tw+TK#@fuEb5U>Sox1R(- zTk!g?@;2Pe;>V%Fa{mVln5zz)!0nx^t&Xw&Lh1VaNx;4XOrVvSoM`=@b36-QrUYiRJoXFZmKQ zSJK2!lu8m=S(F(1etv?pCHPXCzOB2Vbjpgg>`GYUquW@HKWsE;(whFJt2G{Un<{Q= zcF#k|H7RTc6qU4ljLMMUhfY;1lV^g|A&Kn>L$Wq|I)W=Cp#`XSc)eJq{XyYVdP;y6 zg6>~qN|T#cWNUFRg;}K%N2d9jeW6fL3nzTaIcDVD|De_I>iQ>G+L`r-ZnPPJ9DAnmqf$s?Qq?qVuoiTj=a6OI07YVr!xQWg-0 z#rewiM^_i0PJh{Dt*KvZVocr6HY34d1Ca?G+S0uABcJnLHIV8kD;Uy|Cn>dy`FpUv z`Ik1#M0@tMDyM)_=XxrXN&g#BW3hxgzJxLkF1Wh!fB`H*<$vpQ^heq$|8N5WFsFR# zP?L?3qC)c=GFS=ri>)7F!xF)Og;9Fn(ZD+!}h z7D27{&sz21RArNm=)k87Wq_?fH@~J@N2fpS0}~kAY5gh~CoM#G!IIO5?^H|))G|XA z#G+T1`P718i79hOkl5K43pR_N1O6|>d z9sA@mc9^F=nGKfu&7S=q`Lw@$=)o2*%(99Nt`=WmE#LHk$DrcD1J_nN3s7xEugfGp z+rommlKXY~T3w|cHEX!)GZN<_MEB?E)7Srj?fO4>>hC@|h==jxam1KtiMDPZXz=uv zZ6-8unys=Q-(81(rDiC^W%?Qaa0tV9tts!#f<7Hhzik(*pkY#vmlh)Am?lPb z$6M1wn|V!uUIf#IrXS>_6-vIyZG74PQx)wG zw(1&>kEO)=$>-c@dumMvnv;Cu>|-+kQvYe22dP7|llqtMWN{nd7ko%#OV%eCB-NqP zc3@v7&vn>?sN)C|34T6xkeqd)CK;3=Ckx>dH7{DprT@NYH4;Jq^&KUHbeSU{)lED(sM*IB+i-N&2D65M5hfr@#u&wT=u!@b$|~9%c8&R;%KWgz~V^# zjh}ML@tv?uKVU$U5?7h(*run5h}DMDVY=|ZOjBtqf=Q`j1A?G+Dk3aIUgA%{> zThjR8-~->8$YqHbJJIH%dHwCcD=*MQffq(wtiRN*0&o__XlyJ7W$XaKVk`kdgE-L2 zFKTt*OL=7EO%71-Q6LjKyhLQ@-|-a~@1OFm%J88mZAu-jP`0+y0>v^&{Mdpj$(JlR zi3R~bnkO8oNh+E4?l2UaPa=i^*Es{Apq0!AS0ah8d`{fd*=jG}v=F1}e-9lQ^5vqj ztzWqo7wk|#a_R<@Xe9?I6QjP#pTycz#&qqGOs)Jr)}T#`>t zyWo-lTK{YQJA~5V^S1oM&VKzCW^+W(>ZGYU@@u;%uXZe(P$D|NDtIy-8HkN9S{bv) z=i|)d)3(Mp?}&$ulDx=A8wm^zX4NsifOm~-v%l!KUX3k{BX3^&gauy(i}o2Aj4dx- z8Pms7XV-S(;w7B+A8@y+B#i+9o0>mp7N&T7x0#CepL*LVi%>~g*8gRr=&e7&O^N?l z*<$VWtWQ*(<>pIt{6)lGXPlX9i9=Q(#wD9BiRsy)n4Fo4Gjq?x%*=EgIe9dme)L$JJ2N9l?ogngF=qh7 z{HwfR?SXWr|4`N3R4DmS`Wb!*bEL}X zlRj~^>GKBjUxJE(4ym}h4e^oaW&G@mOJX-seCX4OI@=dtRrUp#3=$K%lE`Ot%?1#wdTQrg`6k7*i-u$Q;^8?r)EK;Q-+uS{F1)7pmvaGIlV1+d)n9tC=80jFUlcaupD`a^Q(cb0M?n0+P3ztAj*RlR;)BngRXb4@A4 zHvXEws)MO&?EquXBE%ewfmpF(G~V_--x`-+x?6WJ(+Aa`@J5Z2=%`D5_^_lHKm5dj z`0Mw5EY41z*XdXG6{n8~lUn1D_jq7>)33k<>hqj<9eYegD`nfI7>Z`G3$KWQ^*dwn z>z|9oxfu<+j8iVi(W5d0QRw`_>{{z68Z{nMaMWDIQ8b1wI6nV*tSc`Y2ffltds8B@ z#H~bL30W4^K5?7k8s7n8{pv%+o8*atV_87G00vjCkKw&H#{9vDWAViP#I(~mkA9T2 z)SnlPwzZx*+BL|t*yU~kY7%{Of zW*@mD#x8qBEX_>D?2}&>N6zcaQs{AL@TDbXv+blCyOr#p_2>FOsghOW=Vl)A`gnfL zT08AH3WVwwBkO83$S8q9$1W=`$TtEpbiIkiE}A=^X!I>uFxb4xcX1cZZ6#Vu{pC)- zDjh%pp@xq!^GJ^~O~o{~>8D(I>j#F}Ux|3QK~%3}*M0zjZ5^q|Yew6(q>HpRRwbjx z&i>E(PcY?Q>OfXBpWB=jCbFqEl@#3yGv8}B~N#$ zfzJF;ZunSV=A#}CVre&uF;Rph2G3#QGOznnY5*X|f8r;Uw3#t^$dWTGM-xO*rgvSH z^KU=C^Oj72cKu;_a8!rAt^JyRh@gLb^@`Yb#im%fW`pMGm9cx%WpQ5Xx+$&eCT9=E zoYr+GPaKIu4|_pfSGu;`!LS zVJ<%S;DlmS{m=Tc?`GR&|HoD&p)s5=?+RUS-?VEcKKI0UJb5Z-VBcLQo8W~>YQz0!O4GJzxiEo;%VnUFqr>^2iih9XR!X&`H`r46P&qSCm-54*WXxJewT9J)ka=bye`I2<|V@M1A zFa7W5m6(lAxKby**dH-WH_BvDgE;siCJ!8f5I@36Lm9Mc2-8smQ{wqzUv!uJrP^v# zUo2s*{yT8u1KpZBTJksJF%11A>_Hr363b*Gq(;>%xCp@3OBS+BnQ2Urt40Fo_35sT zO{<51pb{|~6-%t9r$UtLcPz$Rubzr`-8E55z`p82XsF<2Oobyb)AhyVOPvp9z{<4K zXc>SMa31+qFDWJl!1x#hDP`zH&O)r1gAXG(jint`V-eLQcgcXEL>-HKqgsE<8_K?w z6FSrYm7Fi;#qU0WY7LUSSdhHzF`nt-P4F@VqT-@pxf9z68Eak`(}&baCAz3)63;gD zJJIk}G4ci!gWMdlkU`0b!xYensd&Y+`Noy8_2nz$k-s>OKuWN}C1;t^j|?49|CxuN zx;<#r3}$Y&SyD6-deP(wy)aeYeB-K4r*XOyh4?FPdFz1#S*gi`^CqF%kB*9mfKaak z?;zmBM6!O-a!kr6@umONl1o0QVuLY{EG#KjJ$Y{?iaj~W=)-I*U5N@;PZ!NmXu!HF znll^Ugk|^$AOWoNDmu2HN<-y+Nb^jGhm#mQ$XkcMGcTeO9LCXiayS30#*69Fubl(# ziej@Z{nh-T+sYlkrpjpQe=MGixfnaHS{+xud}FL0+^jYjjaV}h3sbr~ZblosODkh& zcqqo^kH*Bxt#QxipHl3=6rlX|Nm8AXrpx{<`|wTw=*}5WD{>w$S{+SqFU0R(z~Ki+ z6_yjA@A7i{i=ND?sz@UVI$w4 zN{306H+w&y^6qnJ@9EDWM=YURNbs#*@vpp*I=JL>xR@_Be|gT=k)GlA!StJ_d?D+Y zEyOp}*8g3vwqfBpIIQ>&YZ1Ic7AgJgBt0(1ivkm1W(LDYtZ=+mMI+dpbqn}MGbdd*{9VhmnT!yBycd;OVKN!O|eNPN- z+!2cp-?b)cB|2VErv(uC|XoFj)n$|X@cr9aDQzb%(9?*GMwDEjQXXsHqpg;jMRwhQxhSFMe0ui6%?2e#S+PAHz2k|Vew?@889!`e{P902XdyM5>wE*r zZ6bTXD1OFo`eu^Hu-A{~HH`ho3HbQ7IQ2NDqrFr%H!qYSnXZEr7{7w$^`{AGpSdXu zH2X@$Or6Uns16_3uZVcZEr;UHr`N^VnWPch=2PnQH`GcNc3!LDju`h03mwdrmSrgH2ohL+d&nW#IXKl8>`&n-(P2L`KO7749+5HY(ot%I2(am+^^Z~%x;UE7e)bu=pEj1`E7)-sRJ zDiG4R%q1VZ#%#b@MqiJT?MI+G{jjN!wgT11Z~MxK65y#BN0f^ma6m5wIVTXOLV*s4 zWyy+eTKfOZuRr_U=$z8>)OP6006OSsPT`uF4L^>hLQiDvZ|E ze6)Y4q7pvat1p3D3?=2ikqwpgrXx#H|ES6fqiQQV3LqakqEdnuzi18+{B5!)>J6W2 zP!l`#x0o^@#iwe}-G1bZZv8* zbv8OFo|tJ*zg$x^TGsl-#;-Kii5OHJ(VMa5ApcE+!5R{q2^~f@@$kQ^qYPd3j&0$g zzuGYItuULn$x68~lfiDlkeW-s4we*_kCKJbZK42RJ)+Wg{6A%zgajz)NYrL^ z9-;A3dxEd5+ZjJOVR8~t96Xk2L^=+gM#<(lBmawN2=UBJO~-u?eL42**b-AC=VN|) zE-qZPK^tttu`ss~=g%#~@%{UCH^L>t5up1M>X}#CRiTY=7r@`H{m`wCtV>&Uf@zyw z@U)W$AtE_e&@Ckb6$UFz16BJQm=23z>Nkwbps7kcEMPo(z_EUUl6dHco&J?c*w$|j zDlkR|EV? zQl_O=PAP+!vC$hJM`)EQ-iB^uR4Ct&;BRf@_*+yA{O{~=!9s3f+SvfKM^h z_b|zkmeZkN0Mu-MSqibrsT;%b-~CTOaKpzpCAX_^61(KHb9sTEc%oZ2OD*v9D=ub{ zrmdU)465#a8Iq6Mm@>jq^%N*B+a?y-7MNSXbI zFa7mhX2ePM(mvSgwvvv4Rhx9@<|)~v^@kq4XMVMQF}f`aqxsLQNgfxMP92E3PyR^^ zZr&Y>cYi1rkL?##3Tz|#v*=AT$ygSe?ZXgk(gmsf!=5ac9Ch|vWmRQ8b>g+3%KAKk zK3QWiFqFDBO4+UsIxNu)$Sc}#*vFP?q9#Jnxus3H@Nn)UJ`t(z_1=N$#m+-u%Q635UU#>rGg7e0d zJ;{->UY9tVwtM|+Py-tpB|N4~`-0t6w)ua0`h48`&^@tt$F`Un*1GQeY+SICyWO;| zn_txC+k6~<`an#~UEG@4M+m&$xvDGw!URNc%XmyLM8U;A6Y)k-SiNz zS;=|?elp;)hBBrUb^4pH zfM&nZEF}HReWj1bL}ffB4>qoU1z~ko4n2Rs_S%X0A3EkBl!D#SsC{*K3$HhNEd-tt zJS6N_TW5QTTXwba=W59_#{%OP@()Y+1s?}$B`2e;3n8V1Piz;^A-ccO(Z`d#NpZgb z*u<%NZd;I8HGKLoNSTyU6$s5)yD5Lg zga8W|j%e{Q^B%NhNi?!5J)sL61pc?qkB-!ntcdi7CQD7fD@zuf7H%XO3V4~%1_cp5 z(J&G*%Ied9E^|dJES4gOSqPCFAU5fi8!R6t*-usEeVuVf1h|@ zCJuh$lo?RN{nAuCcgNYd_Wh6v*GVtVEyaWHJYu_czg6`Yjl=_g zcu0+-N7=Rw#h$lqjJY!l@#wpc$Cg`G$CexQGs8DY2R?EpPVJkD-QTM_adwZ!1Ap+G zLNE|lzI}@>W(H#4A0LjGlb{@2alvTp{oxI9=CRp$>Vqd@!!;{n#~aqh{@YK*sfVZI z@}J%kW4Z|Xh9ubs|M0LEw-|i+Pi%^@jl=QmC(p$3FP}?r;!Ph?{E0PvV%>EUu~YcZ z-El6C-E}r$g>~7FZ+877|1IxCqh*oWcI)cc`m$9qs|~ZSz3Zs1!NqKI2IAuHBZgy% zA?~@Ur8xWOtZZO`E6w^bedin3#%cL6xqp_~%<~71^Gm~qYvrrz58Qq_PVPG&>&vzR z><&-9_f(vH@_ej&fovE5b9YR}(J#nH-}W&Om;U%BxAUX_^|&568;o6VTob3iE}aKX zN?%U0FnD}bD9MxjOAF(Pj)#5Xql#&foa4YmMXvhp^8T+X)sfoxbF3Mw!t|6)HS?}2 z8U{Rt%DToWmzrp&hLZ;Z67JUzmgw!IM|CFbgwhj5yg4OIU&LB9hG5 z$cmU+JRI}$GcmV#PV?)We*IjhyHRG<=N9zxRp|!C4XUFqKHX=n!r+CgJK|okE-v`~ zE%D4>9g0(Tozde%5tqE$hmm(j}A&kzxs-QPp9wknAhXez5dtkh{IngXnlxm zH8x}tF@@xQBeVP~A9Vk#4N5W5H$7(H)tG9hB4D!n>RSw|wqNKmE^Wv-Wh|i!oD>i( zQ}U5tjN!E-F}jX<84KJKlpToKiJ2I>Dq_<`8)Ik)yS_2e{zvy8kHv=uVq{tv*a}87 z3K9G5uPXFcwmkJM&yg|7u|E}03t+3FOp;P!iU&u)J{Qh@AfQCs@u*=?9xLv$0umoS#=c`gO>SD>0Ow!I9Az|DktUoWF`W zz^2ae12L=3nFVbyAv1F6%`x(dx5eCN|2*cNx=&E4kBba?m6J%Lul}hRT(?y}lrP4t zHr@Oe6~!?$Iua9ad#CW8ikXl7XBi4WP zK{PNt8cXLVW8uI9F?;8GWsBy?t$SnSjqix1{a=ZhfBY|!!CTF#H-2vnT>YAu|NOgS z{;_*Z8`yARjKBHU#IY1p@A=gTZCd4^ABvI7ZjK@OwD{%QWA=eh+D|&>*js+n7y9Qv z_&b7@Q;HkszwsA-yKH@Z3|(;~ra$nT!cV<nZ_eEUvVm*$&TJz1kHvFE7 z>CX%2%#j${xF^QG<5zl0`*ZsrjOkDPUom>wOJewzAL(j_wIQ%{?8%t<=l8_YxnuTg z#ce+uvE%BFhs@yIY)t*%KW7`LAKY<`>*BiWT#b${sLzUm9NjrSI-|!zc_P}gK1N(af6c$vE(VqT zICt5CP{M2OkvIVOmtjpXl}x9}jn*!@HNP}jn^ShW>40*yBq6#tFsiNCs`pAVc7Rf^W7?)XIw)|2$1M0okqV9(2)>b|2(srn@#yCS<3mG#`jtG!6pi_Kd}LLe znLn;!F%vTj=cH>khFRAw&U(XbL3bO2y~J9=an4AYW>Zua{rU^$;Qbi-1-^G#32`ySX9fA!@F#e`T%uR8c|e9Ph3y6U`QbwPaSAzgz(m#=HaBi{S{ zPsEcaSH~~>{bsF^6?fJB=nd2H*6W^&pSyi`Ja%F*Ub<^8e)#%llRGykZt}Xdza)O*CFkRNt~nH^r$^)a{(7fc zd@-)tIv;=VhW)C|b~jLc-T&PB__a^0m;ZC|voF_r_Ic^IKD|4>uzxUq{|zVOx^2Dq zA5r}8-oGmTO!1%Bpj#_n-~WS8#9aqA#J~U4T5WF)#D9GKDao9$-UiDUeB+;Aq@w(z z!E6&5dn>o`yVw8WfReT=Psiu{uK3g6lGQ+2M!@5*cr|9NhcSy))#<(2=0&uyz|qIE zoR8>79xobQv@+8_mZpiuw!8)SGE}lkv5_PP4|6E~(F$;37pf^y?>t{rn1wGTRbsnk zs8`9?7sSEqd| z>pyZ~Y`)~G_)mYJM=7+H#HDj0mq{K67$Gn>_l}6d}>4o)ZXqiGS6f zex&!z|KxraIEcm1F`G7H)zZ)#r_X!GfA`Uls1r# z0HONL+IVBL>GVTW?%>l$u|bxigGo{)RGfWuIyT%e5o@#wcj{5SUrMyqmul9K9cQo+ zCa6?!UeV{|{pVtMd{7ra!?EVF@tAySHqIZ?=9PG0hjqo4VQ;qK*V-$_Yr`%3A8pZ2 zI$||H-`j3k8E0hAwBD`eMGfqt^H}46?mY5EiS)0#O7Yn|_ z)7t17i1k-Z#D*7)$N3{G;`qH&89(|ZaTI^1JQB;a3lBt7nH=fNVzPYk`+(TLLJr0 z_e~VmU!W;h@^q?iGOo=JxOJ6|j;}Nl17d_;2ftZ_V6!Uo;9(&m$yL#@vu*{|YWrUU zmwKB@j>lza3v^(r5x^9mRmcGQ>RzflP=?jaRFE=m(+g9vVqnaYEZDg)_e(#;HsF_D z(E+Lvl*?tV^l_&lRTv~4yMA;>j9oYuM?Zcd&OWF|$+W4zsCQefx_lxAH3oUV6=}`2 zt1LJ9;MufMv~@S?!cIplTlb>XaqLqkjR|c~kL;x$m2|?&f({gQa2rS$A?D7almDW- zI+RvjuE)$akHne#bm6Q!MbAGwT>={CFJ9HBZ%yhWr~snW?L|Q!%BhKrvqY}rb7QE? zNrl*%-`RvA{_Y4!G5&Q{Q@iHfe;He!?^s|kF}p6?%jW`Mk+W(c3D04Gu6erM={B@# zBu3V1m%eN*Gq5=3uRR~v-}(YAGB-;{+1?If6r?O1jOX?oiMt2ykCD6ATh2YNi-k%0 z>PIFoVbjPj#+Enf#|N#zkNn-yqPKdEE%oO`Lr29i(Q`at*z)sgD;JJ!!-7T!H}x4u z^}w!v;c9K%Y7ze~{dl8a{QG&l5XAnP(?D*sQ*ORd&c16*k8|cqQd)~FIosiyff&{1 zCr_5npXFz})QCi;J{wEw`Qsl6x4)%RA3TnXoHAyA+ysgKlv8cBGxMpXXymMx+4xfz z_}q!9i+y^Wrtj+dk|*{Epr{1tJM)V=(M#O-jVTs61&ddFi~KSoUdIi6B;?&rDi;ZC zVr&zUyZ>V`v|&dK?6@|@Zu=Q;EG^DxZDCo)2&sf?4q&+P?y%tvx=7Jx8)@+37iq`- z4%>u{j3@LAZr&3k*L`cu-T!fnv^|VT*Fn%Dsbk;r_K5Wt#L`pu#KQ4|F{pQt4PW*$ zg-Vae{>yu`Y4>=HY7=g7`;|KHjfg%c{leaPo!n9E_U{ug{%fOf&x?H|g2Q{RkNK~C zM&)*5l%2AB@cM6$`2!EdqV5D^((rrnkaFB`96r4%PFQaDH5ykFYeFw!avfj%5f&Z` zb&^e^ulq^;7&#O3cfDUYdK6Wgies<+32plQiZ8wiC|I-ie>8^1Rw-UL#K?=kQ+L9h zh=s?$1Y%6wsK-~Ycy%nDI2a52J{<$=E{LJMH)Xs0{qF~xc#B{Cl$&E{=e2ro-u9S( z`16{4&&R^4XNAD7HvLJxSMO|FJo!uvZrQ8Nv#VoVZF~NM|6BSwoB6G8O}}Vd(Og$MA^*F~5&^DiOyGyS&*(aZvBM3u29|Hy7a1$CI*j zklg9WCq82=A495oGg$~`myDr&UR-9|bZlf`YdT!5FKG1pj-8B%@X^K`;Yl-;hlUIv zGTE1U@*NG&PGOX?JMXUJ{1O9EltBC%ZDAZik-W}Yt{*L=c0RIJ;kv1iH3Rb+nW9U-XI~#XbFANB z@Ckrn@#+9c$0WXCL1fPqTExG}*>08$P^myIu>u7&l*ZD&BbI;W#%t81KGUzs}09 zpVG$Jw_SEP4xL>YpMG>h>|Qq)H|#hbzx}PV@k_UF_4~-r%bx2lkUb-7^s-xS_kReq8Ptw&)N9!L;7(= z{h#qd+aj}f<7E8M^(*7uU)D__!XMIF7djh@gnUSOzqe3F70uK71pylto%HOP74c7x zuhk~jR9v_Hbo~4)mf{y~*BVS9f^sXr>f+oKTRW~FsaEPo&vOHDYI-<6@rdSorRy&| zr@Q~o#pj>g9B1^1@KYy7J++|&8y-5eCZ0N_IFRJSkx855`GNWmJ-97Khjh33?o;um ztB%H$;{V^Y0m)r#)U(Io>l4W`-k^Q_ku7yIif#m%&#{;a@LxSlygI0`y#Hr3@J*G3 zfOs+BTtq-w(cAS`#;zEJ$;^-m1eJZ4Sjt(S`Z#^da*CdD+xgGLwoX!=%K1kVlCOYE zzi?Pj|KCw|q?kfLXmG*xHEY#N_1bozy3DT3d`3%%hRj!F^S@m$XrG!u;o01&CS z9YqtN(b9hTZ)H&X{IM`)>`Mtqq{}zY#c%(>cwF|{AC5ad`Tls~;ACvnZLVMsX~2*< z%08MB4Uxwt-J?w(o{MKcql;tox_8h?khe%oADN3opVggQK-eB5Wu?AdXWkO9?ylN{ zclUR#i&1U5J^44My+K9ona5`0tUgF>yg?gox)b2p&uXSEkt_)acit=T*74L5Wiy$64LY4uf_RF$x4%_U9I<9GWOJJkkRn?$A68_i{898xLdD{_eLl7*gLU(G{)8qdt+{mHU`&UIT6S2 z)?Gy&|Db0&c8?lL*wfnVZ5YdX6OV)n_(f}HTRhH)C1>qhuW;{ zYLgfBJ$?Mbv+K?4Z2N%TwPT0$4NkHpGIJmCG`_TfKpqKBKIGfDNpwX^XCyY`n6$Y| zFH=LHq~UpGX0DfZ0M`EF85s|3QGqMEi|VY!YgbG2;Xs5 zC9>2~R*;P$GGc8^RF%r6x{_RSB_C}E5^Yjkl#-@n(#(8K=F&{9y~c zZYTxFQK#4xQ>R856!xJH9rI=z(<1YeWtI0Ghm<_|p$%!*8YNN5rVNHSS9VhaH#GE< z^La?vBWs5BJ~#D?`eO<`-p)cvwe?TxZTgcVb;<)HGpSJTi()j{cV#d@Ddz>OK(2^7 zB#JHb{Oid{_4K?2eifEaGPmS`la_P}SP^86KF`b_j87iDJzg&dsgG{SWAtaNQBbxAY%CXH|Y+k2V?R0)51+;_bE-PqZeK0 z&9=oy?~Iu{|GTgin|*i0itqThF?ji{5j@U0JsFGp?^F4eF|z&An16O(46oKj(HdQx zJoBL1nROBi_k|eR{i0Zso|sr0!`cL#|Jofb1l5P7Uq60~-1=iNefxh5Ik3?uxnEkXkx(I0i4c zQa^aCR7|9!()@iN@uN_KPu?42Z}_Dc)<);t6L;%}ztI@D=C!dnd0ck{{wHnT=|@o6 zF|I#&FnrZ(w0U@A%9r+`N@(mL<>xa-sSDWM-*$jLoUz2+tZZb5U zj;Zvh+(2ZudVnH8us`g5mj#!l(pyjN@9c}O-V)ZO))Ss=t_;L;rzjS0%2~+%@L9vGz~nCjS9-99_p3gOpLPC z`m@gUO+UQCZPj^^o!HpU%HH-{)ToX_>Sz7KIu9__m3>~*DBC-a+&i z_pFK+?>w%%ypF})2e!u#-f$xHMw0l;FYAX);$mQ%6YsuzLU(vY{KMBL;*a0FUz=xo z&44!CR_n3OZ`TIgsp*OMUq8AzPMmkIieI{QC|)Q1ui87~yU)I8dyd5o7tY5&KQ-c~ zx;C$z)<)C1IKd@j3#1}<(YkZ-V=p=v|Mg3n@47*hb|l+?HVL^_jCkbOYF$U4jjek0 z_K-HYh`SqEy%X8*d%~ z51ok%)~YQ~TRSU+mbMR@q{I^-FavAMSEj=+L`v@ zUtf~nww3d{5~GMRe|*qEGEFGfPh?V0VkHkU?nAVl^Tba7B;+!|Hibh^f7+!wiIXR# zyfVZ;#VE)WYLM-S%#jF7ngfnx)ZsTHtdLyK(NtiP&LYDm(+-u&dhK2amH&4W6xBaH%=i^0}JrnQ$cO&t>UtJX+c>B5d%Qqd4D>lwqhb5YRj?$I7 z({wJ<*koGGhSVNS40`_$4DgV+2pZB~y30?qu+_4WHD>uWd&Xmh?r!M>Q#>ww{aQcv z$s?FN)`*oCH(E-bgJZ4Z#}X@J@@onjO${a zM`M>In3a~as#tS%-re@>XU^)K3X8E;ce{DBjhRTR*k%_oTz~aMY`Ix?{s{Z@K23=9 zt)|b2^jvJuXykVvgD{~XG_J>NSJN(+=7%;!UjoW@-Ca1oc{sM-vdR~mc$cYvi6xpR zH)^tXTR$aiM_2WKBU`^Jy>8Y-+}SU_c5$ofW#dofUjJ7?2~Bu`NuGDJq;GVVhi*Gj z^hW~Hc1^bMBWq)FoMn8K7oer$Tol5hM3p;-wwX} z*;Is5#r5=;brGtx`nr|&eie7ODV-9XND#A?y7P2McV?Zw_iRi)I2Gf&#$#-Y9%;1y z+3ziskb=!1bn$m(eKlJdV=eV%nR8ZNqCXB{eUoukch!zb->AlNI@s%f&3_wW>t!+c zQf%A%+X7!ym2+42a!g=@EiVFCj*v7!+CoD0ZnM^?X2>yUJ!(%cC`9+|^dLA7quQFu zM2V&1klw+^Um;B;<**MnB4!pRwWxeN4o^L~>~m!Dk+^B>h4JdmuZZ`a{7@V|_lSAR zSfg8szP7w&Q*8a-EwTmuS`KM*^x}WBE5>(^$I2^L#Kpg?m+336Cq8o`>we`TKk7>y z_x##!eJ+YU|K_6D^{;ov$}6-WE;D&2<7REx?taIv*!_#UV&_llal9SexhyTxb>Z8# z#a`*z^KVuEvpZt_t$MVi#@~fMxHYzY|5iiMCSyCtW6v+|wE06iw_(#N^}W;gosHQe zGqLNZFNjUAUaxxjK=|~@mP;>b{bp9LhM>dcR>vsoXZ|A+P128>s=!*V`=cY%F@%s!oh+bx>n{Yn`p6i- zW*?Ptht!W=^QYs!GhdARPk$yJJok`bcw|<5^KBUbk1EwD!*n}bt>81aS-9>E4!xYeDN$Z2-6*6wk=ctG(ejeBre*ylIc&6^$;9YBO+nuO3mo{`CUWIqC`B ziPz^p8?H;V|AU{l?QVY*J1#o(*^_+@$IYNRQsLBmVFwvp3u9XTBTH^k%17 z82>p3AccOL+K17*ur4=@4TG6r+sIc^-G!brb>M`KP78+Di8q!0xZrl zBOs?<>q_dXMi_Rbc$$>5!v1iS7 zBJrpucPkJ~c$pczNg`iXjnk7BWrOB+G3?cKEcJIjwK`7d zt~r!p+eaSC>#s{U>8}~6{JEznFUE~Kbz_2XZrTBTFh2j3u3uDktVMzL?CBNp7CoMM zjUGjX*ZTF1J+?`~z2)MQzN79vUtvy;xOK1m!=Ta+?Z_nS)x~(ntw;457ATo$dy#vI zI2u^wG$!>F$IY_&mOXRv(=VO$9eAI6Vr`lQjAU=Uglo=-Kl{Rln3@~XCZq14mfiFt zmh*O@u+ZbRm)h99FgsIRs%!n5FPhJf9(6^&Op;`RP-cS@3ag`TmR= zG&A|6qj`jLzrbiCa6MyjWbxJX^wD#jEq?opH>^w04b6u%4g=Fj)3a^qmBb5$`go1w zo*;VGaHKuG{s$8_>%vE3gEaZ%$u(VzS5t`nAXOqh7-vHzk1SQRooMJNNzqeJ5~>bS z(T9bT4B}Rm|K;k(VQ`%^TPwVzoLn$mUC2ZXpvJ0hES3aSH)WDQUy?LYpD^h>z#6{~e5_x!a;j(!l z{{5{dWAEk*V(RIS%e9j+5*Ng(YhS5}ZGAlcsdvSH`Qk*}c~A=+n^CqPO$(7)P?cSA zp?<;m?tFZRs)PS`RbJgC6?NhxKl*^F=*)s<8srj@?i3^`Y761E=N-^gO(So%3yTFfS=ocoIS`g%<1mp@_!I??Leyp3kX zSRg)d?Sbr4m z9R27q3&7sP$*dn$mZnyhEuM_1%)Zc54yAx@G5PZE$Jumnf?0JR&LB`<8|ZfHpZb39F9%5 zZH(yyGjaZj{52Vi4}IWB%;<6c^{-kVn_jme&IymSQ5#?@b=UH9??0lu9_LhE7u(;u zS?>YV=B<8U;YY>OUpgD7?m45)*_E;B+t$a_V|xF}bHY~L%8T`y0qH)YddG(Kr0khL zwGgN7J{y}}BmS@J9hQ1*nMa#XeNlJcX|Y-%kOe&-Ge=JqRbO-?C-;9isjK+6<|Opg zw5Ck~e?uEqycS2b*`hn$QWsSX1;nO5Yf}R~NIjwSqtP~%WVeoSzZS0ywN?5`K9&1q zB__IR7@+2%Pm%9qs`2Yzx{IFuPr|ALm+|Jm)ERojPje6N23kD&tTt|D)lT{$Y}>Z{ z)mQy(Nq;nf-sW*`I}Kp{jNsB71H1KD{`_0q&L|1xu?IXKjyH`cgPLv(akw+23PR&PMdFi5RxaL9E9tv+R7aRJ;YE)%C4+3{3MGo9$UWy z0HThFkZccf6fB^F3lJ(X0yQF9|IGzd)*-5Xly}>SRQ`3iwvFCZ*xfPDe|gs$a+K8u z!n3tvr(A|9?kVpxXy-2`zym(1*;IHYlw@pP+Oi~BMr8m)K)k;ln+{hpC9Sp3u7~ahiv@+x%~j{RO6O z=6!ZVH^Yv^i+5vir=k79Y`}d+(}v%_S#d&xT1o>Np%9(4ARelUls+ z=zsr~<9e)fNv}Z4yWT(d)CyzlSi|Gvi*e|TZt_5m_E!L&rL1(}y8JQVUR}##&rLhI zD^~XG!k)$W=O=Z(q1~#jxbyM%KC?Og=sTwL7f285J#br$1GLQ&?{(UUTR$j7P+K zK0_71*T3|Ce%wRCvzL$hQu3_m8e1d1aOGMzd0iGsre~!v9a@!L$FbRKCKW1C-`4-; zmcu!ZiSAg~N?X+;NdM%=5$?h_eto;mB;yf8pwJ6GN0rg)S{cK?CR?moZ~MwP1eJR0 zKO-lfUCcm&`qKWd%>8vMDdhFeLOsCH7^V4;qR-J%)9@AX0 zV_1JYU{y@&;%oXCgQonp(iTtIlmBVr><<7aB^;J7#i_65hTE!3bVuEGO<8KAGrE{U z7^L(nzpDTOFiIS0C#$j&zhg}b)?Yi}yS|3?NYn5IdKc2_LH&UT4diAM{SW!-Cp;~A z;G-wv^8aab?EH59YN2;XE%<^e)vUZw8+qDXBe9{z`{PLK^q#gOU)0@0%#W4$;|*L? zuG}#i7k$@SJ?^<)an(W}bCvR-{-8;-_2a7Q>hZXF|C}BHKBqq-VcW&H#JjV+S%wso zfS%U5UAF(k=GcMly2#cK&*mxjR1l{a-8vBcuC^>U(<{o33;ngY5miais@T#0(%u@6 ziE1v_@QeZC92l!=Q{ySfU}Q3)B@;^(Y_ih#jGpbkoI7E`rOn|pt_lsK$YM-IzL1qt zFDg{o>2Jn;6nb zS-745+SveEE;@0vT9r7?JU0{kv4pK}+#H8KtVc>~?&Y0^?Xl9;*R6_)-DBD;nT|Pa zhKR`O@`UWqsy3 z|H*B*{Y##Bec2@a*&mpPv_y6QdN|daV_>Z6I@?i%(n|JyPFp0aFn7C{rCiSTBYCR@AsXx}@&3JJg z`G=FS^T)Tv#&6je6Bmv7eQ5@fexMAe#!wUJ6#{t&Hdd~7d9-(AR#1Ut?l%W-3no_OHj>(WBZd*GB3)|3nT8kB$VE z4b{=XBo_33VlR^QC)>y^KPrmSr2abg9q-j9z0Q#+ujGZTaOb5QOR~-MIJ6#dM9t78 z+KAHo*9OM)dI;VZwo-SP>9343X6%Y2*o5;t$Mgpd;<-nS;^nZ$-{RS$ez0YDweHl_ zK;0#gMXlDP}(R?wEMXugAzMe^j!%fSm93;o*(DV~NKjmBwEC z(=niT$`KMa;T9kK6akb@Y|3a7>$#`zjXB*}H>8b7d>y>vR=vmV^)Y|&tFd_G380)t zU-2V8F6wTxg?*pZADZ|Vx6P6^_elJ8Qhq?o^Nw^@9OAV8&{S&|wP|ZZ+Lw!E`lH+0 zDET$O-EG=zThgZI^k@D;_BMd5pZ>ewm0#8O^&U9agH!3;U;Uh7sLg{ddt&IdKN;h% z`tdmb;s0PgLzmoWu0d_;jjX>g2FG;KPrI-QtH)w{Njg#Mv0VDAkDG_QbrxUiH1u1< zs@Elm7$H;F@j)}OaKNi_A)wnhkV&n+*xDG&N_}_Y$_S3WoNIUH5D~<{MLX@$>KuR3 z7-vpC0F+}+Eg{+7Wndpu>abF%DW8u|B3@U!=)$gFgpBS_!yv)BTk=MTsKzyPnH;-~^=A;jyk0cR? zQst>>{m`I4hLr2Nr?jry)3>fm{#l*Z*AGsBQu3*jO)Jc!gtj^Tp__b+^GMvZYd$X3 zMj4Njo;aVn9c%HP(r@*D|IijadiiYp?N>L&S$?|*8!Y=nIoEG%SLpR2qJQk+t?{Wx zxlv+Ck4NSW6I)hs$5OT#{`1#Lk$dix-ajXqIjtdi%=NWJG1)_Z zcid4W<|p(A6aM?X+u~on_)z@R%lJ_uQ+m9l%{8tSBi?Yu@z|yJ#f=Rw#Kjw?^!~Xe zJ;v#lNCADn_r7u6Rkv1u0O6?q2!w88P{Ok8Ph>LD9L!$X578u}D!uEA+vC%ZjmI|m z_)E7Qi(j~Pe>{BbV!h{XAYOQZZtfU&(BgM*I~gz9c~Vk~@v2K^wu6MEOU$RGLIR=pc;v|6Q&V6_pAqoUWWisL&z zveSQ90awoYl$8BH`>Rb8v%F>uTW`)oz>qjJTQgqRo^w2QQrG&14b*xJ30{=|901+; zgH=E7<=UA3RNh-Z3qA32ZWh_^Z1Y+L8P7_~fy7(zpk~N8%J8%u2IiA&PwZ&p&pGO> z$KrAgG$rx-4?o#+ij)%v!_4*n5ccLln`L)>-|fAprCtFrG@}KOgoT7G*+w8R z#;nFBHbs@?3M3|#qHJ)gjPr*R;-s7kDaXcTVqz9o*{%wZ045N?gdicY7$Gnifvjb; zq8VxS>1C$(?zj8xd_LdrIrn*bM9SxVpL@>vE#Keo{LXUkbDz7gNxWK%j`WLy^H}a}A^PA&%FHJ?_+S!}SX|DD<&9lc&{~iw??|L<~ zxd0)0=yK)4&WjudXe+I#$m6^u;i-3W88auO9{MIO;q?j%lWp603V~SJ2h-(|N7RiB z{x5y@dTuMdio;Oe=2 zL7PWL(DHUjPKsUlBOZ24{O>q5dMBa6m{vKOJ){9SyV0Z zLdO262g+NjJb|qoSoCwfQ?^d3;x9zOkndQ4*k4R*Gvb zsdc+Oe*JaQ3#j83r)~nNrV*B3xkSaHhhp02z@RE}{9;om#ih?rgyl-eL57lyWyW+a zi?=`BQ_^?Jrp+1atwXFI=uwGFG(@Zm1s9!SZ*HJS-$VJe}8$yp|>p$^4ijG zz5iR5A9~_nEzfbnHQ$*1)||u2fv0~Xxz1et=#`vk^NPB|Jde+pW6b0&n=kTwOs`P% zt+hL6dwXC`3LtdN{?E^_;Y^ z@Pa<|d_m9Ycb!>|@c`tVXK!$#kbMyY!UGcDXsOKhJZ!u>uMN6!pX*cl3hB@^6YY!u zO32a;@zxNIM3;r;Skso_jOJj$cV(s8y=g=8f#i548PCL2 zP52?h$^qGG$g5+Ow=D?y8T!^_&GkJeSDjG)7((0JckP@xyIg;QD`U@`=888?NI7;h zR{Pbyn1#(37EQ$t7?f|F<_(xX{r8ruKlyi;OaGdacTaq{_R~nmHqr?0=46{eF3o4Z z?B({!B(6l;bBHT0gUyT?w_@5AlV+T+z4u44Oax#4+Ng<}`FHy9)c1bD+mq+4B5yd| z_sX8oxy6I}d!~^er+Ds}>A;t~16|f&Z@{_G9-KoU+>Q8;oa`ngm>*f0I{Dd7D3~$Xf?R({0Im>s1 zND)hX@`Ryjm$%4d>+;NDljLU<#>OBFuD z^X@(y?3)*Ql5AbGMdWJ4g%@aCf8s;S9!~HsoLH+q@g9CHoG>-sGwpj-`z`Bq;v~@c zD3r0)U~hl_nCp5vZO#uB(}~Jko;U)|w#*#Tl$p8mourkwp0te>p<>Iknh9$~Ic9i# zsLt$ztP1*xg7F`RSt^lgC|4Y!=ANmekII^c-PE09gQqS2`y)? z3vKw599HK1ghiu8x2zLpQy!d~+854L!A(8}#Uz)J89sE}Gs|@ygFB#R`y~`QTqL{x zJO5|@cKr_ojU#jb_-3&ZRf#W*+$VY`-xOypLq>-vk+h40 zAL|7IfAekLWw3CY=~1>=gqJoBjkA~Ka!lv5-6)2KLpgp9XW?z9_blK0o>TGjPd|KN zImF#R;`p{t)7!bl^KNc;bU&;8Z+yL%XYKN~(nDm!AFj%h_MKnayB@rqRBO34HsgnC zD9iHGA3V$n!s9&8t;e0^uwHX)@b#QL6X!AB7<%NOUz|*wZWhWH=$!VM7SY7iq1G(PiK;p3=Zg`vA6aej2>`_$59=?o6~UH!7(a7GQyz@iSD!TXQ|5buPU%m^ zuWSh+K@;1yqZAvohO+)!kEC_W0Bz<#AZjY|q87LMVhTNcg4I}o6F=Ji_4pDbW946b zQD)TZmktbC%ouh49DC&YTkG1?x7zpN9D1%ugbiH;B-<(zWoey+Msm;vQBy~daWQqU ztDuu9LAOv17ZbsBsgAiVchFoZ8KmNA$6Vbsp1Sf%u1R~uYPIhS6u+(1mAKo%TWj&5 zr~|3=Vv8((rKX)whA+CdNpg5-|H-|}cm1UU%SZn3lgs!2{1sj|?6-}Hh~J1!zxAaD zLTyg~*!V23`~U3mSzWI1;Qkl$*3y+!*M`@jCf?=0{40;gj%T|>LqJ;vnZCk9aTE=`O>+fiXv7q7$5^|yp`U`vktln&?NT%wUuTfnw zt8pjK3GzgsZv=hvoxFtyyL~s4@P={TlKEJU`3gD zXlH$n?~zbsq&%FGv26t0%eXwq_G{E$cZ891Tg*hf#BiclZItYv+bGC*$kSg;?byz{ z;U74SfHjO4Z*0TOEcWxV9F|3VM zLqUA;&vk#63lyutP=5HFQstDNu~lPDf?;IiuTrjsuPxN(R@l1*(~&~f9Qng zFI{&nd+vN-Id$a3a`@JvWrv5K`!=iN2T$=RE!Gcj6FYKnd7fJlqJypW(8%4H5Bn4I z8Ygyl&hqk=pMGw6=s&xEdBtCU`SOYH{UdHW)E#a`%x$II{^gZ*kbG8K55xB^cfIv^ zXpjA~CwQKkbY5cc_LDrf>ppG)Jia{h3(rDpx{H@D9C^e8L3|*d&;1Gy>g6rLrbODX zP)c8o_J%nn@Z~OUJv2S8J)Re*#@*O^;9G~ir#v7d1rV$m|Ku_pSB?L+j9+K+iB*7J$_yq=s&4j2h_OWU%V7K5Ch1lNe}s(#SGTc-h0_6`67(rO z0>S)qeg63;escM$lV7=f_bdL!a^dF1<##Up-txZFzY)}4sfI0N*OWnSy<^W4Y!AHS zzFaltNwI4@S93eP`1|LVL7EPH{-tIJ6_I} zZk)78MCZKW*MF{n-o0=GpE%JA*gR?Mnp~-j7=|^N`6j7F4cGS^2gD1=Cg%WrqmuEK z^#}|@M6&yo>5m7IppPUrm14Q}H}hW(m<5i-_4p^M+SMj<2q_jnM<10NN;s{L;~%Bt zHrmlmC0N{)42?P>+N&H8j)U3%3od0v zhv(+0Uphzsa5X~gYu*B4aj8Mw`+0BW1nfgYmmkPJ{A+tb+iW?x1RY_ z4GKcKdFc$h(Vi^XKB=<1bA>m6{%T&3aQGYkPEICzo9VvK`!mb#`RA7#pZYyaI!0Kv zIv@(jcAgNLt6Lcry7~Tpv+VoY?_3VO<(rnvzx+?}Y?BVY^_#&PV2qjT@Bf9{un)Zc zs|Y){*FNwCTn>9;+2z@H25;ZXKA#QGu6p#>^A=fYdk-9;|Nk-l@RnuggTJg-d`g~uSvc$-zIgIt}+51KrZYjTb)0?EdFRkFMdhJE+LHaM6lHPu{`Z0Y`3fTzA)Uh~v5&dwHD04Ug;YA^u(m$??e@2bOCb*XdEQ zrcdNRYBwiU$>0BEZ{xi82v@Zu{a$Y0G-W*>_U)^B5mqrMHXfxp=*9drC!Buku~W<2 zUwLNv3$MSv{M?5RFXuTC<#XV^;k9R$fAklhOx>2 zdx43!mEL=VABDlp?WB6P?xTheX2^fvZ=76y=&xMl5h|PG!#8n7ndx1hxNrG>Ur0bY zcKDvW?Ei~n48mLO<41#ntZvG+sDCDj7$kE>nw!;r(Wc)O zmsznYQHf@e+pnt^tf@q=t`jWef`xhMPuLkR3k42mi5ICG$-1WnLeo!UKqt&g=A7` z>ntld6DMa5-dg_dH(p!LKYecbhd+CXlWpjWqrns`LbGndDLrT#%sbHzadm;u@|vIH zpT|`Na6dPRGq4ECFtMECd129g+nvj)w|Z|rVldY)AH%*Uw017-@_aF$zvd1=8+_y| zKg&?1$M?7>U(n`?pXZrvN%Y%=+)irEsDhV;lAOgNf5U$L(I%3^o+kl?J^yje3?P>U zfGZ+A;dKYkh&yncNsK^#A=8IUpdhU6bA|ovFTKE(XWQ=SpXiCRd;tUf z#gF$F4Nu1DiQ=XQzUKJyz*ikx?%;WH=egbPiC^&2V(q#3P>kT7#jDbu{tbR1;)*nH z(bdM&ypUmsFO!Ap))RpD(I38q!Ox+Sy!LwZzV`IF&w|7E|K~iuyMU;RG3SEG_PVpP z7=m1#Y3|p!Cb2d$^ikB5rqf2Lro%^5)~aIUsY~dbJJwN*N5>-xL~rh^xI_>|Kn# zYMtM>7-c*;1z7o^PAQw6F37A|pZ@ z%0-P0^?XKswGYn0RjAB4mnBDzg2x0r!{z#oE6ewP@}DiQI{xtT6{o&z`QJYM!@MT` zG(2qO!vSiJYbK_-Ez$n19U;?3tzr-gqOOE z9|OFaUH2~W1JB8~pI8n)bcm~b_AICV!byDKcDpAWC&j(O$+j2%-TCGGhc9wVFelX@ z=fDpmHuuK0Tg$UQe`Yxdwzrcy@YHnca4@cUSx9J`xoEreO*^|$q=sUxYNIGpTz5KI zDO2=ADYUtsX6+jD!IO7Afro({4{E78Ep?tZQrZ!8c!XUkS!XL8e*MBK{Ep4ZOiKZ$ zp8nSkhjgp|WA%YOuff!q>!V+k*LLCzUXZXP7HPA^W?~72zO%f`m{H$jbDyD;mn6X0 z;1rG6d%aJKCuwl8y~_NUgqhrf8)|HiN9^L5F+V#{Z>nRXuk53#S` zySxOzTRivN^9WaU@ntg-ahF&Y?Zzj5D{uXjrDu|TkpIJqtp z?57;I6TGXu8PyYJ?K@V-Q?KENk-L^%p4*l{$5T$KJpO@b?|T&|^QZEBv}^AqKHP5W@sR!PXU4a4OH6I>SyLj+)oCACcDagh?}J~s9Pkaa zrs2!}FKVBrf4Lnue&WlXv4$Mr&9w)3_TCE?ymj%zrqe{3D3$i-Q;9x)@0hZ z%SnctPxCxFpBZ=bROHz3zwMJ{{UQg)Ecv8OI^-nz`KUuN6W{W{2s5lfs$3~VXuBHh zAv-hUr5~pF(&Fr+5~cYSO#zD&v~_zmeGzg&+BXoSA)k}sDLUV)m+?oj&uv7Ia=+XK zXsj_P39{M*Yi*P`eE6?D>yd7bj%wL;+D`r*|NaHinkq4;;FudL+E9)_gen|SWtr81 zl_!u%x_`h9pXXXxQ*D3vM%3Ub7e{pksoV6FENTmpNDSrNW}mp``=|E7*x1*yb|-%G z93Rywc#WWPI$wH($Q%{^m4?1^r;OZ-QY1V-o|Nql-o(q+HE+=@d+Bd)9x#dqibZ+_Bb0?Pn;a6VH zixeuQC>KsIzw>zg@%Gl!SLc4aCT{M!Hj{J@pPuEaFK_3Z$u9oVNBaHicOLKeFL@Ve z*N3q8&F&9E_x?)%0IBEIyMedI>>%R=$=PZ!)I zd`r>(zq!2mfpg1W`oiazZ~DS#`0%6m2~RR|yyH5Bo}#M$*zY&~?|Ad`Tn%emVR%P| zatuUm-AteDavSaG<(pnF=4nol+Fzo~{)qAPAVe_0cOK=>`j~&e&J5p!*T>BiM^+%4b5EiS9)YF|9>FX)OIbgQexY9BA+Q>Hz9l8r|;X|&1uv~QlaU@g8YKe*F= z>(nBQ4RXz__KiRF&z*lFn5H#ls4_lhyviOm)>405sI=%Kh8c4MYkT|+WI2HiYVqSs zA{Yxp0{lU%#eqqKvN%tmRa#w%9$pOD;oUuNJhD9do4%QIVp^)_)hP!e)WOTZqYTuk zuRoRNX36j23!O4esDqf@rrq1ee*@&9y7CWw{_*AHtFJ9@dgZHfb(_!cJIoaw`#D&1 z*j>A_vpo8#N0;-TIki0c!DnK^<-s9uD02{rv2^=w_WNaEwU2CLkV0J*$hM_jBHDq} zL5ud-QA*i@&bk$g4mcP^nOF#$P@43%pIU&}n45-u*O9Q;#uZt7BDTs70(FmrCr>$3 z+DYCzHGTJlSt$M*Ih2?zX=2=gW?S7sQ?HI#9uzrd$YW?sJj)T(N+M2PjO3D$S+DvV z-UMVe3;|)D|Jsi%drx`EAqm1?dGK48`|dck{K&`u3AbSiv`M=>*!RA7eIW$sDzEHT zd|uj#w;f+T`_G@u^V2q(?3+#;SRVdc4=#^=|7Vt6PRz~pn*Z*VDT?6LW-oHp?YUn+ z7kIDkz5hSqOTicLWq_;oZk)ThJo}5!FTL%QA0)o*zU4B{|9s)M&U2OI{=8}QIi8<+ zf!jm967n+72|dTjUPE-xSM$8gw;o+S{f|BiwzIcBJn~1a2x0o%l?yr7%Q*L~sD<+p$BSC;b^__Fho`4?Z}O4klofhPSTXv4h(bM#}+a>_G8Bvq7~ z9YEx~x{hnRN@xE0C8{SLC2^vL2D)qB=uqBHoTT#h&fW9G8&h>_bq0cE0D_?(3e7~_ z9b|keFIWELp@LIx>O=@d>jQJb%zEbkl+&PT$i_a^nTJRFiTmC=Po?W`Ugjz|jsxZly55lC& z2yF;V`h*+%hG0ybR2Yr;>X^)kh`h=aMy8l!H}M|uQO#y!sQoGtSuoqj)=}a=hj~^_ z1LwBmFJkC1jl9NRA=Adjth@Kr=i6BW6rnsvX~rnBZNo%NtnjhNT$<>STQD^esN!w9 za^RD#U(%J;Jz1m{^@|o{th6lKcnmR0YYT>VT~Q}LU}KY8>FJ!gZYwiQ9(?VWE!Tek z7mEvHW1mXEwBNEk+u84Fwg1e7HxHx0(5|T++M3gJeHm3 z(NT!xwtRd|o2PX7sihs*9b=;>8q{X|6M&cBd22b#2{2q8@hhm79Mg8IPIuf+d}t)G zx{4}me|N2Otms_4g&uF}QuK7%{r%f`|bf#qcKfCfC0Hw6kI}l2NZOiE8;1>y_LCet-w+{4ei0 z)(2H;OP8i@1oaaFpNU&EppJNE;Zd>U*7l38B__zw?G6N&{T$rY;mkB!e;nv zeG^L%kk`XbB=u;gUrH3X>#g^~EjTfY}JPZ)*z-Wc^hw zCk|)-$LA3reNdS8#(n~7$q(Bw;W-W<&GkTXC5A89cc-Tpo^vr)) zZXV=~ZU=ZP=p83%1CLYYO0+ANt}o}WTv;w(;MP-&<;x;A`~th1qp$4Vus7@k7~|Ae z-=}@YoDTCJ?{v(o7RJGc8j|wMZbY#$R3@y=gG6#iRw$$8TUqz=t7gZ}w*A?DrK+30 z6D7v9Ctj?RNgr~d7Ar(Tr&?N8rP@n*e2GQhs{`Vj6R*xj-La5r+H1S*GcaSn2NJEr zo8-w)A5XvJ>kKJ2EVuvX*exc?>aQ3rXl~yb-Vk__=cc)6k$&;XpJjdGYGxfU=p%U* zm$G#dy8UM-)ByRd<;<_1&4kFP~MkM1UKwViQN{HY(~#D_7a>}{-{`Ujt(Za?o?p8Qd6*~d3S?C0#Sp36tC z8~@J#$N%XQLk1L>cDqS#$KmivI{es|$9j`nO<8M*xT7$6;yCs{x$;f#^ufF#j%WBT0F7GJS%i zebgFk!HPZdRXhoIFcQtQE4pL;`6e`5x=VZd z<%0)GS0Gz1mt1yvIY62O&TTw>_11gWR`Yx-qdI-IKIU$NNdT#sr~k-@sy2Px!@}EE`=!G%TV|~~erw8H*{)K^0hu8!-7lh~~NuaJJDuwsswL)yoD%)WK<%!L~9xJj;O>5~DaZTmG&Q0}^* z9+i;C`_PTo^h2fmXLX=B>d3gp2QPL3m~p14eSXJi`^a@mG1bQg8GC*zms}awIab?w zzz`j@w5ebDw`Fakh{2Vg3U=kRitmxMfenkz{;uG@QX zACC{=WmN3r7w+1*#&O-nE0>r3FY@w|;cMHhfu>;FPX4lHKqz-3DL2pAo9k~>cT(0XVRDyyz8 zWGhaJ?T^@nqDS?$<3y8oXEouvyr(WD-m4lJ>6xDK7a~9v4QkCsSsov`$toATIc$cm z?6!aS0Drc>%5|+*;n7Eq0|jimW>ljt-HLC-jyII!n*#9X8lSnHc8yrb9v?;1R`d8S z2p@gbF1_;igl!mN4?PLrn2R(Beg5ym$w;u~qA4mK5aLmB1+F}GJn8w9p z*I|H~yo_by6*=n0U&)S?QG!|fD)=v5e=3{$mR_9JPNc%1Y|?i!S(LTm1zJg=#R^qs zPvzVW(H5hWg;ZQTh#bbW*R}~una)dx=q#ft$5jYdBcO01sR?w0v{jZ^T3od#Nu4aL z8Z1$iKm|?-4qUL`TU@DiG;1XO)bj$Kg z!79()pObYCY@OWLS9B-_*EUlS2(m?ugw|0DS^Z&h=E%*ig%o!JYdM3W&I>2Aw+M(U zAtpliq1rvk0Aq}&wWqM3+vpR+8hobA7y#UxI>?s z;)#pA$N8`$I*`2e!uo7gVq!%*_!1Q3CCve{W#9TdaT&Sn#ncg{DPDTpo+lb@7i8m` zZh_Qxu$>Gk=_mE&ZW7k0loF%_T^VTFj^C}@W@Y1vw*_j;_Lq`+khP_qh?KjTf76;! zwH}Jj>q^`~*Bo5`=Xh-V^~D&;KxpK1eA!hAD>CNN$IuL3d@r)lNVRV*ZIU)-ni^u2 zDy3~hhD9zIV-RHLg;-F@M|0wb6%k^If*4Odac;Tm@;%GdYloM;$1g6|4_#b#cvI8< zeFv69*N-k&&g@^#{n5qc%vqjkh=Rigc9*?aR|{@bFu5_->I*Wvi@m1(stUf7x=81IU~Aa%(TPuIH?YR~_}?$Pol^-}84a zcYf?;L7mo{Z-EW&?U_CgW66-Ov!Q2940dff7GMRIwvgw`)8*a{A$^^HqumXLATaw) zETJ(R!npqSO5WBXCB^KBmC+rY3U6RRTgM1g-A>B7YMjv$JMx)vo#fCX%9`M?ZvT@< z9?ojByjt7DNuOt2JQl%3+99a*w4b)m1MFH;Lmt{TMIFY5s9BoCOuXPsex#sFk~iwX zp`M}5+FN~%1HvY8sFR{|qK%hToaZ**-9ATg=Q58txa0ZdMQ&r-Id*l~f0+E4=a!v| z*Oy~AxEc|su3X#!mzD(+80^i8_VZ(?ZSh1}gcP(jq_k_)#TfLx6Av}lTE3=*=W}p! zB2GC6gQm8V6DCP{W?6SINF$haDLa?&Vv9Kvo;tdbPDUn4onb$1)21@1j577;nZr*T zR31eAQ$BrZg=A+~pXD@yx+*WFMIYkiWyj-*#LByN%hRnS%02xDWsDy~<%z@HtUs13 zs#({28<{;$bk!@`I81=8tkQ=uM1F)6J5)Dxn51pC#KjqQ!YXmPR&qN_=8GY+&3OF93= zwUG7~*YGF`HKMWa2tme~Aun@MoFTLoK4_5$(^BlXq0(keMOm}WtXVMibv{3Du3}Cr zeTpfav0|-`#YrhiDcB;TA_7S#21wX$__PZGSXpV7;)fRS&VlU*nppZDOya&C{|+oM z{q)$)N@caPeixD$Ir|QN#Eb%!91Bf+%p#yn5{A!y=DFqYmAjS$R}U{YPFz`bIIcT) zfD1E_xnqY%bDTN8?0)k6a_;$a^|6X<3u4=vjJb(A|Ct_AcgtM8~e-lB`Dfa@5JF=$Mf?3&aA zKjT4BgM@ZI+Qa#|CX1(?%rzwJv+VK`N4&vgeAiugNhw5<>WBrjjLGOhPQBuZ;jj-o zvu5)hfL6sdV^R6+8l>rs&S(nWV2^@7Rv8a6WHX0Gz#`{HAb1luK+ppnBg8Os79@yv zNqOj+tcXJ%3^oa6)XCw(FCeAbL2$3P;)*LR{MrBZi!o7|Pew-o z0}qEk+plvy;;~%&%Bxn#qaJtF=@^SZY$_O6*_0QPdbHZFG&hZ)E*GXs@Y4ro6U1^v zETmxtufsa1@LU|q6Q~OvxOBGq1}o1DiL`DH=d{g#H-J%I8%V)&*l|!fQk=qr*s-cy z92s_{RBYOxY6)@yBB2*rsJ2pD_6J>GMGGo|*66C`gU@^F9m4PvQtZ1}Iq7?bn*uVi z5}4MDQa=+bm6d{RTRf?gMDXIB0H$D=PePE_dVIAbQ5|erKr~0HcJsSvV zLOqlnla4vyJy6O58m-BtGFAuMkX^p6jCiZR*DJPCkE1=d)sFs=l}Z(yEL1FNBa*eB zhIUTKk9TuLiXgtAldHwl$Y9a1K8kA@GCaj?i#T$H(Y`hR5{AfCHy+ymkwJ3EtCTAy zpzDuv(T}8vMGdk?Y_^qy|Fki@coOOO=}u7Wm;kGeWc^wbB8J^GSkf|g)Lhnw;r}#j+yE47J6b3oXp^A)}vB&C*#w`ZTag$JSFNE=*rko zu;x`ReqGHkJ+@=`>WSp&y5S>zXXpCzJa21!?wLM+i{D0VF#_H)bR}&c>d@-RIHnwN zffygli!H!=2wS(ph7lZ3?6~J=aQOyLlkWH>+`PZQSI?n8>&o>|MsqUcQ64+mpg@-u z92I6<)AA#D9RXmP4I5CCx^GvJl+1Sem685S-M(=ZapDN$uW+IhjiDAZ zmicsKbdq5TdzM@08!tY97k_jFRvH{dEBp;mY_@0&DO*_$Q8nGx7~TYW;m~sT?>+(} zmLu{xo3PxNhF`7xN4EMk^j3HZ6AG>)UjOHu$>@MDB`IY~Beqe8H`o;dk~Pv_p7k!V zqMn0v*0Q|})Ews-5>nrI&QdVyrPisrt$k~h#(LPA?qht08i@=&*WTe&N;)D>D)#Nt z6=(2*5gZ#+^t4|cs%ZU#)D?k7&e0k zWh4olU}D={uR9&;1YkXG(q2wT50&`dS)LWO&48(nhDhmn%U$DQKhMJ%JY|x!KT_tb zWdJ2-zPFlsgBEt%F=cF*Ezr+6M~;78K-(_JJyF|G2xa^lTl-)2_C>JZB_2SRXO7Z< z*HjNB><`MULPXS6{uofx@tGtHtbQ|hCV{(zP$8}snlOg(ib zeb`?y=J-pjR6uaGO+D-X020H`HgIq&mt%_Xm6>S}BFAQ!NIqce+pM5RF=J4jVc%F9 z<5I>zWQ%gL@j90B0>c~J#5-fsBF#jp%_&fBDo9Zdlw5{)#$lAvPvD3%2Iej|o z>JEQ!W^??fFEiPqVIyO}vJR&?Vda=BBzT`A3O)`*m5re_)t}PW^>^?h15W*sn5f4m zd9Exyj;*~&gg)$NZPBiVrnc>jkmk9vn5&JS<{77a6id40Gf=tqcn^? z$y)7eo52{TWOV#z6r!h&8~4P1=aD;;KIn2}2HiG6DIS>X{0mm~-2=H>%6QW};<}&2 zSZbU^kt&|;9qkuddG*4ph;^%ti*c?e6FB34^ow59K02S1+Wu&>k2Nf|-Q@SrTRB)u z0jj?C_}b(C#A5iNiu}#~R{;GZ+mZ>eEO^z?a^u~7sH>KW)tdlsK#;$?^DH*Xsb`Wu z0y*b@;-@W`$>7(1!4iMCju%ZND3SE4=GqHJAnH|JX>5ZDVfB6LXh&SOb4+LatoFl{ z8^0O0I-s^H1vg4Ass*w`%h#6#P{T2i6VFiXl>D;30%KYOXJz!r#EUDD zNfXkDdZjWYqG(+;{WGYR%qOl`(!`oFQv8^h8l`VhR{QXyJ#z*{x*( zMy$Yz8_u>hcye1+Bk^CM8~526@mU$-t9>CRPRd%-FB61mJ-@6|_j3MlZI2380F4TD z;VJ+-g2>})#$R&TBmUI$EZdITqpUE7Vl-yb_MZTZLu5_xQRo9yQT2&&Y;g7svzz9$Kk#WP$EEV(a zgp|+k)!CW0rh@GXf&-R%yjuqu*5Ml$hgr)KC__xMAwn6t$cYA_!%0B=nqxFAK&C^q zIO@(XpcY5m(FDiAs+c=qcdWE0PQWa5_}Y&eg?J+&oyiyFF&=G~Wc?AgjgdeSGr8p! z6HV#-$Cor(SOp~V$sW-%m^3)CgDX6qveikl)TBCQIe^ICje2~nc~PhBlx;60_X$ZM z(wNv+w|K4FcQ$l>)lts`Ek35grijx{?N@S2G#_%e6E~~?C=;j1#h9Op-M)PZ-mI>s z2M(EIJSn6({)j9cEN}gR1F=X>RmT~M83%kT^Y#QV{vo4w-KvM zJ#ox9f7%xre_X*EyTr92N5;_G1={E14<$LXp|e?Y1R^7W0&(ilGk*1G_Dek(El?-%%w9J-p49Z@ zX7u1iz5_VlGp#qY^jLIxCoDGFXT&B0==T0^jO!QbTWR=fdmY^RlU!NK9n{cdSobq@ z^h_1wIY|ZB)YV&gLtmWOaT9=-)a9$U^@)A!Q+di*C&i~0vo%P<+Av}t z`;HR@?JrfxlSR!djpq8KP&kN?D{n&1rp>XDW+-&d?C45f4o0Ijy)_?H= zs{>tET-_u}=~jtKNl~YCk;htODQeWkjmW@B1r2iL+wC2H6U%7JunF2vlVe3=YBd$t zZP!!3f8={uWYp7sT3UlcGW3{a_0%ZiUmNimqyE`1Gp;eHnC3^)YV5m3(Z5+&ZtMvQ z3Qr%KkV2qqOEKn2r%n6CvgN9c_FK_Fjf}V}fEqz`j!ut1B&AR6FM~n6dN+%MymCD#(SGaG zkM=*&lCHzuWL%{Gtcy=d{I|=}CJ=)#O`#q=H}--@x=wc~3U3w|lEIcskH| zfgFOH6KzHyQ5bINJ6h=Knh?>mt{$K5@h@)e>pLHHp_p4Y#kbf`CHl(9<_fn8doY{_ z3#(yDAOzO|L2R5`D0GaDn7kBP?ljh1n$8S)vQnC7|6KJF^cMTxqdPQeA9C~{>P}Dm zX-qW4^^lL5OmjZwBeS|iid-y27Tl3f<%Dd|Vs*fa5)*9H z&%MYFAc^UzVQ@@ZYQqlzswhOtfplU-R%4|%hn|7be73WTq#o&qHj$2>402Y=#u10+ z!K+{@4}c6-Y1&kJ%f6WP5!S?ImT0Hm6-VpQUhONaiRK9=ZH-%H4EtmOLe3w+P5%7m z7d%$9_@b8X!|Io8%433tI(bo^n@FQ+kC?`eHRV!L9NggKgL3O3f$TXv;R=gzGb}# z3hS0jog#j^28UB!s2vI-Ri|Il+dnx#L~mWRGjNL*6vYzffjRa+BE>iC=NyAwEsr$Y zH@%wmTqT?#(J!l6_2V>1aWd)+QUf){KSJ;ukyiOzzoZv7(`6BYV)&1F>iO_hlEG{>YrI z%Gj*|n2un&V?T4tE38I2cm}q88b60i&KEtdHe2_Pt4|c1Hz8|zwgbW+H=o4MvkW|0 zH%`t4OnDCwphu7TnzSb_xqX$jYXrfz+m?(eb*6n}EvIkI1=DFh85g6RmRTk#Luci- zUF7lwE_}a0X~NZlHUiz-Mj^&N1cS`_BRr=u$lJDHMVFJHGEK2>!4sdhxid(6d45}R zXz_>5=-=sIbHA+V)0_uj+t!)1G3|s*-H@m}>H4EuVpLXLR7P1h%mU=+{L5gDKk}hc zMjBCpQV2b&)6T>SUs(#XUsOpsLeu0Xmp@oFpdIuxP6y!hXW~a^tD-#-;KHQLxw7?ESY?U}E8Oa}otCj1HRULTU77Sh z#a@vd!;zmp1Ou|iN$RRK~OZGzHuM+#ZqQX?Guqq-OiS(J2}F({XPDhbY!5*NqYqtJ{N8J z5~%hAgVEui`5*Dx2{ZaSA}+bbNyCogSo_NMJKks;G8yB_+FF$KH>zxe8fpn`;{#2J zIXPla>|tZt3MOR7-=L+f(GDfx@nkq_1S1?Ui;Y7{9=Fhb{mYLV;N}@|=EGK%i(RWW zi}oY1w*NN!;_0`V)ib{8<`25-|LT{)82XW8{dczox`x0pDC8j`>%aQ2weNSR>`T~+ zDOxwyP0&&(PUfu`;%EOS9Vvtq)9yU}jZEyrP>1q7(H7ZGAebKinzCw*_Qy!#pl-*i z4MTR?3J7ZQGq1(LzG48zBjcl;v9C_CD#1)3kW|ySL@T%=4IuqWtmHz6pZJYj`x0C; z)IwOnrr4)SeH|0ZDm8$r0|ol@d(Mf#brbpMp}RkwrX7%byFd*WdLI5%Jci=b?4;?R zrjZ#qdR(8T8Ce;2vhW%W;)^*ez);;ZZJ8M#er zb zN}@N%l8B1XS1WJW?ji&)95Uqe&y-keUv>3OE@0sg!YG@?Tw>``F!32 zDW8z;Uc9-S|H!4~nV))Qxp{5)Pum<1ul?RvF9+^EusroM&n;)(b54!r$mbndUj4UU z5&f5LE`IFN^4JeNx!nEbcP$UTS8*<;kCZ zZn?z^8x9=ZyS(lnzIM6rp^NO>`NjYMKmbWZK~&4*KlJ3X|JXk2pEt$V{KbENVfpO8 ze44s(mE0KF)E@jomIrmn~cR7bg0+uZmK?ST`(O*wMXoB%8a?1d?j#=?*T0mzbK zUpe|`z&Kkh&UN1Lt-T!FFvd4>_P@wu!JB3ArHM^RKb&K>RrxI2_S#GRh4v$jt0&vUIQ~UE z|Alnyi;j*HZnu_8pSZFdef^Pf!VMlL+%7+Ul{Y3gGRn8T_1L-&>az)NsSkw0quDuuKhcuQ!@18vtAiRq5H!^V>stb=NhpaerWsl`G>OWkLw;l z+6XSCoGi|INZJ0=(6Bpw$@)I@)T}OYq&drh;7Sdwj`pkL!C?Sn5KzGfUySLAWu$?| zeq_~~qBE{aNUvrD#D{v5vFnv6MqnR1El<8B7V&g8So;%H+oY<0ZaECv2H!7-9iSPt zu@QwjN|CqFB5(Tz>_NUE99OWV=j0hwd>K1cYJ;P{o3icBf+pXEEgeE-#Z!|Mdo9OS z9|k(&uKK6EFq?bA8emdFnK zksalc6`Oe(o7%BVCJqHDwML0`qn-%F$AFvh@%YF6f8w}r_~9+0!+!L}SP|cGqB7SH zg2|O_v9G<+k76PrwrM?ylG-4~Pu;LU?k3}1zBE3usqgYYq%XZqHn$DNCiLOUDj(Tl zLw5L#{Mdm$$A9##Z}G6#{lKt4bZZ}|khlB`KE&8uO$}<-lQ5&=X0%0#=-8%FS^ctZ znxGc9%hNvefxE^UjKp!oq;Wzhavcv=T*+N`k{B!g#_9a`wr+p(H0)WkRLoea=yrLX zbJ26IB0JlVe(N4F>ac9j7;*ty!%r-y|ENqr7l3}yX|gqSv>I5X=SNk6ACwLja1aKzL~3Ds(s zl8(|I3h6(X`sS6rk-W`55(GR~{NP{rTl!6uz-Wv`Z~u!ktb|rSM|`$8-M<)L`=(lr zwmx+}XUu{!yu-B`6yHy+%5T~B8_4h!9a7R&?S?Fap`Pi#<0rSF)4z)4SYXE7K2Q5; zgYD-peI;D{CN~&pc8n>ZDXbe`0Hr6@37DfwragbG+wO;6wJV1-WaHBqAK~cuv|q_F zRjaq@n_^_>Qk1*ymMG8h=Q_C$C0p3B9Z4i+(q7$Z`)y~(-#nHv&XcEozj`)eah0-| zTQP*+^?9uSu`kAE{Z}JuSWEv7ce;BrqSF~16oVo^rH%bGBS_jGh{(+Y3|Q3=VBky?dD}@( zlE|hXaacuCJ+(9)+A7+xs3T>b9#K{>vYZUEI_U*`RcJTwoKITOxy_zf?syte(Ym8tKMD6Ke-o-SXd zx;RNoZ&2A7w?K(F>YI67e~^garX5uMH36MUOk02%bB+k5c$DFHp?X*G z)jq1yyOB5SM@;Q-L(fpl#%ehkF0n6&sgcO|xBu1GJyPrsxDuxq&6ROcj$A5er~li= zAZs^}!+xX{9!A#E*fGgM-k5HzNFyN3CAH#GHjv^od48oCdKthKc>bMd8Ap4T6MypP za`H=#FIS(sww!+VSrvnI=d15n_H(jL+>>uPv7CALx%BOg^EZ|k-uGhYM_+ejIe71Z z<;6d^xZLDwsjE-&_7)u6>&a7^dgYT>m#feCMi)RxzPU2VhQmL@n}-LMmp;vF@3Ggldk}NrFePd@d`U@@MxOcK z*sNd7f{d^OB4cD=rN2Bl@yZ&3>`VJj`;EV%G$t%)!iSK^; zR~tLL1$0=+I63;dJC`&6@7d+vufKaaaM%82=Y<=b5WTdVcUq z-<*y)$Ej(4VQITUXjl_l`D6TBH<`6@;kB{utIM=oTDERfj19ej-n40`9mPh@vE=&K z18Yydj`$~}<;Uc-kH%I=gVLAL)IYt={2Tu4^+0W1yO7EHihXUyKJHPT+Vcuz8V50> zC%m2(am}*vCdU<8Y0OxEXrMTLD&<(fe#YO3Bb<4x5I>a#$1$Vc)HGMaFu3vLk zY|N{UTLfl+;W_@*6Co$;;7zvspV^jR2_I&yPnxEBOr$aU#J(A~cxK%91Yl0TW!yU# zKvsODo|@AWMuB+p(k}|=GnrR2T06+@6ZMBwUo4}m zEsNtAAp>CcW%_zJv(oThfN6i`)7Er8lYKS>e2c4$W!pnPf}2%nHpeyDC3oi1fV5&>nQv>WO3VjEd_exjqMP@U@eeP}qt` zCh)8~nG+LbM!!eT4JjEL`@;U6DT@H~;AogMV;dc4=EJA(Qx!v-gE8$#M;3)YMsKAF z6j#Pru%3jHnA0z5!4XeeB(j|Rj8jx3Z`sNSi~Y${z|?r!C-z;(|5TK{k&A3}CI-4G zj$AbiH$dl zeMW(N#vF$t2X4Aw#+OO@Qg>_j@s|~ z-9vQ#!Q(r9=VqPOR+IXAWWwNj{4;2)oFhsR#P}5PTeus)D*P)S&lcbn^C=f|B6IpL^K|;1%}@(=J>b2tY=68sg(a7IMn4B zrLOPt6jI8vU?r)c;v82~Ymn6rtaRJ&AMaAd=?o~CMh3t_n+sQ^g51sv4SoRUHV!#J zpql9;fAKOhcACLR7CHGjduTt~wn{Vy&-Pl0r8quqLN6=Zi4&uO#D1*{QREabQ=8VN zceGbt&=2Z6{&sfNU< z*(q3A=pj3(_)D(^pMmCtq@1(T>8o%dASwRpPh*_6g3w&{K#Y9d()jR@k~W4`?8}9Z z&AhK&Cz)z3`SAscU9l{|_tT&6ag9SB(B z7?&I!b#WOeu{Ui`y(|n=l*w(+`YL|D^;lLC#6nTVKrR8%2Gy004&`)3?8`&Xo&J`7 z?Mo5Lwp*zE-u69sC08z6a58SNpt2b!bg~{MkR_%EDcUD(oAwbOo5T-FtU&A)gtedB z$mpo(-e!NcYXS?XKc&Y&t;mRfnzPg6k8&YMG*Qt%v$3;jt64Tz`wB!PdBp`Oedejz z4@vOje0@_p_Tg>NiZm3U7qj+<6n(bGFZsjV#wwkaP8YCz!jNR<&cfvO`CmT0>|VXK zT>hgg%PYR)f#uMtgQKk;;4V3lqU_bjuPt}H^3Zbd)Pd#NnH$UXXRj}x{fTE2uUGsR zFJBID!tH5JlI=WyU2#I{fT__l?|Wf+;kUir5P$RKZ=9^E8_Tml|J<_6`M7hxd1!gf z_q=jB_60|lXH~5_g{HY?d6MYKAAe@$&vy6MA7nGw_~LFKtudEwoV)(yB>SpJA>)L+ z#l)tI0eTr9=ERO2t6vRzSPG$JSnk7g$+$KC8B2zrK4??MByw)z*yQKZ0{4FkA=198 zth;khrbuhI6^27fvsCb8_?eTaIx8^yYGw zlb#np!W&C7Swu5dCjDsX$QK;Ohg-{we|TXz_QpGxqi;C6oO|z!%e5!3E<0y$EO)-{ zC@1JRnaX-{`Qw*^l{N*-28icIyw<}{e4Pu}oDEt1P-lA3S)gZ|7tuh|MMFy7lW^09 zinU|rRM7sMOO`u6q;04h9}yRul#?PHjmN#ryPi|6zV5gNC7srCW4f_T$4HKs!h<4(eks2&%>%f}vM%Ala zXu+!3gL!1*Z#Jon(8O}e;s?_?=KK@iPpIVmB7YNGeTy8BuzJj=;+Bp<8fv{#4R-Lf zG&+0m)to8e9`i5q4hZD*ti30QiTPpN#h4vo*?s11xKza3mYWc>bA^jBeIrGd+&=I} z2OAmL!B=J)F-W)BAND55#M;&g);zTV=I|$dhFtR4)C|1`hH#6 z%$VDofmVUcgfad%ZLmFz0`z+PIWdG+ul(4cc$?lN4l%fYe9C}_rM?^GyFj$gI7)mb z&UQZR8~Ys64G6Q@@GLXfaG&7*r-sZM|HN;JDsQHxj~%3CPF!W{Ir@6J*ymNA5m+QmU?1-tCm>N)if6)+p1b+RU*% zKJ^D}m7>;yTl+y^)oG09ur{ffSq+Am?N41-!*&J@|MeYOy&XP>hs+rN@>R=mZ^~Qq zOZ)H!Ou^WOC~EqrJu11!Cu+b*6Yzv;P{_MmY5!YJQvr+r1!e1OR5^;mTC1=!#zwzZ zerfCRlWMB-H}#SOVPtxuz>bW?c zT!NMkArR8hQ7s+>0=|_jWXf12mh}EDejLoP!^)pcWt66m5MFIpGYu3gPSI{5qpzP9 zItJ8BUk!*xUTxdZ_0#p%?<8qM2ma6jXD&KvgBt!-H{WB3-7rhu76D8e_ASPrK{F%G zv9ax2>0x7olpv0V>sSAiJ23fyQ&(c1Ml0A)DGt^f+m*R8ZD(NT{#&ZMGc+BY^}vmWQJ&1bfKZj{^x-BoU}LcEIp`AeZ477RMNDgEJqJsbRbB=+;sw-?Jr7<@?nPh2%eqcX+8vxOg!j3G} z@Xdi?0SHg2IiMjpdGvejf3LGQ%^ZwfzKNu5BNl4d`bxHxGToY*@f!Nl)ywXDaX<1)U;ne zVPxrp7t5{E+PggX8av)#5Q9Zo>xMW1{W^aZgbbBBYxj6}Tx#!rlFFJQr@!%uUW0I{gLB^|| za9C3tD8jU~B1M8A@uMxkhO@mNpD&yj# zmzK}`@Ds~txK-B^W~ct*Jzx%iD0dEQ1Ks=8Czri<>{}lB&WDzR4<6zfaCfcvUghR( zrQS|@>7$pq7)JkW(;OphW5zx7+r~d;d$7M5^M(b@eByCp-Ztcc+H>$2iXk=ExY<&3 zmsl;2f3pmu#5=W7A5E9~HWP_L<}Pf@hes{zK0?PL2;y(`A-S@da7;|M_7A zn&)@2?n1voAI6H&nLUTz*=)&L!y3>Jb(# zqM5GNG(pXDo+rxUPEVX6rFplj&(>qe`RVw9&_jK#^NB6X)GX8HoJ7j6WDtWdS6|@I zzzx#qcz9yq$Lw_Z>gbHmL{m48NEcKr%hE}fV}In+u=Wx^=&?_3O8Y%#@%X{|21k>A ziYd>};8X0CA0z%SGn7NGY@?w=J;l~rtK@ltjT{~OU!0UR1iV)%rk^asi7c#~c$@Zh zLp@bV_J8b!CT{5pbPPhU{n1yC&m6SDfG=(8Ste!vSo9P9QZuK9Eh(G%XGIVc0>NgC z+hPZ3@bsyoY@4S2w0!7Jnf0nyS_-Z0t%6O-UP1WP{%re8v5`eV{W<@XaQ@BpAZ3jZ zuXPN>RPCwTlWodiQkxJpKac74>+i^M|<Jn7wq`*kaA(Rfr6fLc{24pf|G0|croF0CkFEM6Z0DaQ zun%vYHv96>G3B>wXd-BTz!Ua+Ycd0f3-%^euAXW>hMQh z-6GikEoa?v|EaFB+NZ2+>Qj#aAw61&Z`YscH{8Ud-nYv$9#zm+#`jQcxMFROa!(`U4Qesw$~5{}nX1!pHA_vPouL*IL&8+WsM=e*v2M=28&s z+_a785et2u?T?P6NRv}YTLeTmvBd%H&;D!wS2l|9qmznYwk9h{Fyx7!A6sHSXu)fH z%a04%S0)z(%-#{d2*x7ce}gklJ`v#6-mu%dH}GNgZRoMDog+)$wAnK9+R+D`HpXjm zA1z%sJU*uqmkdyXFB6`6X3@2u_#imvTaQ!3$Uhl^qiu}HK`efN0FN)q$8O^&ysm)G z))WD1qjmTp-!#{b*?*n)*agtEv9Hw}xcv*u*l zU$KxIl4Jz5suCp+D21%dR7Mx1$!n11#ESh(B`)ENvW2Mba4=bf>J0hBq-_k2vNIu@YV?Z}-(n&`jlYUZ>Xs7y-SJ-q-fGK+^MRj9VsrSdolcf1 zS8n{PRruIKw=Y!C6WgMmr6I3<{B{ZS%cm(<&Cb46ZpJd~poEs80Y4NvQJ>cS2^|I1 zXNNf?Tx^levmM4fSH^>q>=bpty1Co*n-;`L7XDfnpFjIGF$tD>#7n#3!z~0-_Q@E3 z!LH0i>ENpUs%W$&cPy5qnEGX;_0s0n+(Dt;`ZaY{`$5@QsQqZv*P)Pj+7|t0Com?!ljMaYq$}hU~5eeb9Gv+Ez5OIta+=b$=Ds`8E^ZK?^{m4=f$2xxxTxcjd3_~7#J-*|AsEl=~zH*a;dp%K}NQ5uhOMuIpBr2mmkKqfX!0|j68 z@En)U=`p};o4VfGVgx7Dm>w$eaSS0w>*8~EuFT(IHvOLkL@;NUspG)~PTcA`NBOWO ztiRU9{?JLF@l}(yTO@JGc6|mP&%n!_!vo(eF<^V}{)5XazWx5?i64J%xyIFkUX^&u z*fa0&B$5G&ZcF=*>|OS8qVvqV&MlWeeL1&}zWg2cFNYsEv|N4qYM#A!^2<*whweYL zJpGegeMl_yNwg&D2{%Do=N|+Q7EIIby8e%tuPDfR@~mqp3K_uQXPs1v)R3-LrDdrF zeYQQVN&Hz?SmYB;1Z&^;<1u~iz9#z{G{y0jo}6gY4$1HjtMMgueS)3?O^WKTSH`&y z3%~2>tt+77hZy1qE&V^^4<&}-8#^U3;L?Knw5^M*Yvp=SCvWHn2ZR~_QCQd2F1J{S z{Wv2Sh6L4~Ba&k9C>JpPWUbS=@M!+fk)X~{a(9#6qI~<`w#;=>v8kV3keUgW`n$^w z;xu#HiH~71 z8T}i33S+S2R&SX4Cd9(hM zkhsE+E07%3#ehg#tjqNF;Yzvch&Jro5C^n2h=2PIKJCeLgC1TQOxaK=OED>Jm}RlB z=g0QWn3%_^xkp2 z5kszHAu@1`rpGF23clNXhe!D>_dB8X;zo#Sw$0#2J`~Esez2>ceLXN~-vK+Jq(pzn zi(*>}P9E57LaHstA+&&undJQOpEk_>pZjdre8;`{%MnKpYb#} z_LZQb`!7wLv_Ijd0zWkJo*%$&#$SD&ZE@c3;W9DnnJZZysiS8qhIk_~6nj!qoXkYp ztT244KDx?%Nse*E9GyvV*f;*lOCh1-@n#c(ArV zgCx3QfaRJ@Zm0%S>Bw~TW1c9cPW0O5jxWlS`2P|19srjW<^BIGEW1nZz4szjKm-I- zEI_cgm{_7n5(~swutiObi3Ls6SfVB|YK$6Vixmq>lP1!uw59j5lx6$x^Z7nA_r7b) z|3B}0&zX7p^GrE&=FU0SN`pwc)L+^dJLJHJjYDk&LY{$k_Z>8@_o%5srAR_Cr}x%GIur84!h5J@1%j2A;rKNnL-+!0 zXC8ip08+`{X}fLPXHNdxcF^PZ0akQDd!PtaCCQ`9OwT)@lb_8Nmyf*fo$c92J+1xO zEB~my`z_{W)&gC0E3J^JbG;~)I%_#8dTCX=|8#+8o>g3(jjR^n|N0ur3$ zW=P1Y4mI=&5W&IsA=xZ5`SvW_qye2iwggy%VsP>m!T}){4w(ZRtxRFkK;R&SucpqG zd@eTXjzNQuq9A1D<}UVOE3mRv)*0>3A~a=3*C9`r8I8107v0p*qaq6;i{AcMeRNP% zy+|91!IXlBss898?)i&eu-3!Sq#q1&shW)L;P}@Po2)GMzp1_Em0yswGib*dVPFP@ z8RYosW5|#l`6-w)pqv#Q$tfwdN)x+)Kom0RCIA0PgQmDT5B8M(Vug*f!peTVo9Gum z9G;MPA+Yd!(o|_;n;7JV3O~!qXuRrOOg`U!9X~p7TU%}Y)!J6aZ81@^?g8s0zu}YC zYug+Te9kIuE<2m%Z9cd3q9gsLtJjM%N9Dr+A6vbzU4QaTlh4wJys*!(87ExW)0g{B zf1us(mO^^fB5Eh{fBO9*M0b=_Q3h|Ynft8tVi-gNs7i2dFDNZ zQ2C?4Il&B~`WM+6lf-E=mq=HA(jryi4Vq^zrpe$xnOsnz@yb=w?3lJMKhc3a@Wuy}1uVy^xt7+PuS=MKwQIb-b7-m+@YSvHM2lYmb(j0&f+y07Duvh6D4FK6Oj zHDjKSVt_@R?LPJZC(W6&T6_8t`?q}_w`1F5mu=eSn{E_%g`@OOTfegOwPeN=+qUJ5 zN&L>CWsAicSvfFKkIeWljeLH9#xSy+xqMX$Opfu9dRg0M>y6t#fB4Ovh|`Ei^urYW zv)WNld1Bjh*Xh|N}nepoeW`Q!RCBVd+qTh@#fcZ8H zd9n?nZd2yJX`kXM{qYN*+5YBj$F~C?zkB=K$tSgKx7uvNRx&CAp;i~No_o|`?VmpI zmVj)UwTF#jY%-=bLJUEC2zn zp7#e&ZXbL98!INFlo66HEbWv$ZLPXq@uv=AmN@HU25)!(3{p@l6&yo)`wz{iZ@}xW zwPyR1mmb^JUB@4QL3ZL#Zqk`owC%RutiArY7q+$LF}|rI{eevCwcDLj*JHke$#weV z@M#4xIHG;>gTy|vyb%l0lurA!nY8BW^V;q^Z`ambV;&(WSm~Fh6pa`g9%ZJDCY#&A z0!EopgeUSn7s{S~)R9kYkK1i~V8%Ux23aJ@K(ool8@A*A=-4)AHFuFSIz)f87G;+g z{p2kUKO8xB-eK$ZnUB1^9dy9sK=wM6F7*-O$k}w0_1ddm`s|D=HR9+emJ^e@|0~S^5E^{!_1sbjeYk0y%iDU#g@$ zd=O4?!_78sYphvwfK4{vw5`78>fyX8o(&O>Zm z(JOFxq5jH`wxm5W)-_C{g-|B;rN6g7#B|fbK`Atl`ajsn6d-aZ`in(63CmCN;z_l^ z#-jGkuqgNc^x6W+&{^P9j*Txtp*Z-`W_l_5#g)(Mnz{a=sj?}*EFs@BY5&Nd-2a4E z37tTjhJHZfx?OEHV##{_ue_X-CwL38RFJU$RR(8EV%@HSZNBp66S83>aJu8R*QDsHX zv0~o!cPFb_t+%pFAJS$a_S#@Ow~p$*A)-ni3et|$h2GR-+Ccdi;&(Ka_X5i2~a)paCZQ~6$ zXzzOC8`{fW^c*!*1CGYl-uI3-w|Bq!^(k$??N)7<9k(lH1qjWVtSJ>DOyk6x$g2>8 zciw6Hw%^{n2O3`ZU-;~!+fBFJ+RnS^k^u_+;Pz}JawIT{)pvDd7ZduIEL+;X|Kp#x z7d-3ecJP6ZZ(sY?4~i~a(wgDWJL1}FuGx-x`cvB}KR>NK_^|I8QhE{RY&jW$;v#@{ zRB_EVXF*h=@lVV`8RFyy`;ccN9UU*q{1(e(JGAd>ANfI_ofH&Q(;b-T8ADG^9iVU= z>6AqqfynFJ!Rv>Ou3*WcuUa->QL;G^&qWF44(h_vR^jY-qf`AOGBdU7fjYS8!WW86 z@}wz?1M6*N(*8S-yw!Y4PWJ%LU~0UiWI0D|m4|ZKNl72{4IOoHh1xIQ!%?&=^}j*| zU;339E0J5diGJ&mI?qQM^KhzPed9atbs1sw`uSA(3 zn60??3j^gIbH|_9(eWi1d6uC`nY{I-tRbIVjSceG7$$99pqa>|ze+UaS@sBfe)_M3 zPW+C7C~5bca&No-BR9ACpSp$f{PysrjH^RGk{1%+>rbAq(4++yE@(IYj z-`Vc@>3tPGcy9T^?d^t--8#{tuN6uxAd`5GbH_!g;fp`r1U1?ipv~jQX3Myo6E0~; zju-0D^_&w%bJd@tUpy)Lb1d2k4)VxBMnwnWjKwqhU;4lB2}M;8Ang$v{hUiPN5`@44>-_}~oo3ALL zTh!V2HJOYiVL(P-v>t7oe(LVDn2?GbJJr-5jvi}i_$W3aJ6;mu>3;>Qh#K^a;_ZdU zKBe7p_kBp4j$^e26hYliWj_6g1KT!RZtf+OB<;|zT*~SHAcL2N)JZC1LH{H$ZkVqB ziNQF7GD+eg{&2R<2PRnH3|mLL!%th)_kVU)+jOJ#+ljAvaXaUNE85Msu&b1$_8KLO zwG;Z%zb-e$$3Ejp?MFX5Crvv|a_B-;%Hib@dpNA9NA+upAu+Jg4k?+`ci0p6ZCh<# zzeYV%|F^z>YH%+g_TT)$FQ7z*vbD?eM89%{_i7FelClGjLTEcdZ+|P<61?1DoSw%( zk@yQ%zjN59vfF91_TYj?y57O3jH20a!}Z#pyYJXmXYng(692--UYmpoQwO>L9zjOz ziniXGYqeup6#DVc&zZoCQ_{?MQs;Z`v19wtdrxTZdefh@?Y7whbGmKOh3@Wu>8tr! zDgl(VUc2flV-a59(@~5z(PN?1r$6~17HT)gCi;l*B*&0yJ2J1wqU4c>AJ|soOMc4} zvgiY(Ak}nsi?Nxql3w_nBe`F=qn-boE8tdcjWk6UVh`w9J9=E$)9k{}X#ZWoWd7Op z?XcZeEV}K1)JowCx1%b5AoR^J-v7XYwiERC-SQcs$W}4E`($!PZcR+A+Wk; z6GQUlH&WDDh90?0W z!?!&7hRxDOKV-}LyiiCeje}U_t5~oH<#|q-qIhIY_a8#mjY(u>?zEnaZ8xXnMvJ;4 zxY|E-GL?N%Igyb#DX4!GKU06oL;q0J^(!^{&5)$6tAhE`pLP_)7!$!wuJ^^{eA@m} zenB_6mXi&wFlhOd4)s)u{Ugu0M|mnwGs0BN;`6UOv$;kuW4MKH%2Zuob6^hD+u4FJrsj5qsBFx2wSVOTl z)M{|x^hJ@NVqDkbDU|?HdD4~OseVZ!7F@|tmvm)ANgeu&-J|wQC%6Sy&hSY+k<*W( zq>_X7->-e~>)&Y)Kg!J#_}zBesm+_m4KqA;n6G{Nhi#p8*3yc$%T7CRp}D_pw#g=K z;iAXdbvMk1XhmCxU2>akx=Fj{y6Yl(jk#;IO*h%7-Eh;*WsJ+4?T$O{Xy5qm zkJ{b$+}pO_YAf_U+U~m7U%0EdthM?YZ7U|L_kiDFyKUM{H{aIoec;}<`!2g8dse&p zn%}lXOL?g_=~w6f2E7}%1rI&kuD`Kt(Zx09t;x4y+tCSDv}>-vp*^-}VSDVcMeV1* zIJ2E{>gmzs;I_?HTeMABc)S4}_uN;HxJ7V+Ma=PkOd^c3Wk-fFu;WrX1=XYZ*vEl< z)d;mhBlaigbDt3uGO%g#!wB-&QF9{>oNOAd?T=)wOQJ+?h%;uupI^jv9-(5&?t&Y1 z(XTFGd0f>7+Eb=c(GR|ZqeK0|1DiMljewF}yEjTp^mmPlmtEfa@rI#I9i2B)lth`J zX?7obVbWMIiJLTlCL-{SLVORbu#sbo9J%!0_)KC^en^=w{JX$d0!?JAQcda>p#I1w z+wF^4qBJ>*uWe^4hZtE!tyVn>bi;+?2RT7@w_j>rld|1mTCA%R#HJ5AH5M` zRmSAHjy;s|KZAipljLQyyJL=6 z<^q=M6o~LUo&b+dBIE)K`7*)FEieEHQz}LXHYr1X`+&qXIP^SaQ?I+wb^YceKXqG$ zJQjcq#f?W$L&pv`9}iw_1AYV}2IU}CPuS(+4~vzhSZ|G&!jSg6e5!~Yl9kws%k}c8N;S7ALs;A9liRH zP~>ZeV|^`NVncK)zss?%$dB==yp6K`sOymWZSVg~yYue*+vE4zxt(y_i`vr;KcM~e^z+)*TWr$qzIQ>}al0*85V{hb ztF#@q-J)&0!8+~c+wW?(+|Kx6V30Lu_FU#CTXHR0g=_xJ?XiVR&_}-lxjj3LHe&JP zx*KlihWVj%nca5W3jTZBV~;MRjNI+FXb(U9Xs)fR&R(^xw(6>F!}Zo~mt1*$Tfz^B zsOa*mZfI9ucOz0MYrl9x(!67G&3r6{dL!7?z3gP<+gj;?RU6f z$Cm;uD(c^zci!7}+;Qu6{SCJ=&td$@W2sQ2ftQ?3H{Kw-&+g-9|JoaF83C>{!QOn+ z4Y{7K$_}Dc+WPCS6PuSVwoj7KzX5*iwB45Nj=LUcH{HgM%dnVdT|D^U!|h97|6$vm z9Xdbx<+-s-n|IxLTjoO#wk?qR=)y(qx*KotGTRm|UebPi>N%m^bh8cfl)>D&bJ_;X z4==m=#x{5E?6xbu+A@y(3g75PoL(_U5&ZfR%v?ITz7L@vVTkZ8X@4{K62d+ zx3!BdxvG8QbNqty{SUM)Hrb%9I(v4TH)l>;cipwx6<6OtEau?D*6qFrAEaJyO^kQn ziP%%mn{B!QZTPWvHEr2Pkso8e?PA-He|~m!sE1J0XY^CfyY9SAc3)j}&HT0=dK|eb zakfoin~$MxMg7g9jju+2&)h_N;57^;+L7VUYp%aTWz^%7P4K) zx^Dh0&32Bm=)d)jd$?ctS-b0=`?GlX$Rpe@kYA16vAgWJ4efpw^?P&LY0Ti@{mO1T zZ`bZu&-_~_F__GMfVlH-_g%JY4?pxs>J2fmbaU=oR^`Ysiz(O1nTi7LhRUU1sQVV?kJ=JN5%R}i#Ie5 z2F}$xTyjaHkV4HNt5|SlMN|QyAKcL+zZ6|(E;$r47R9DM{)bLE+EWr_Q~wUT?bPmM zf%E#SuA$qk()M`#o^2a8PF#KI6>WX`*y=32-*d-Zw239Mgl6uV^V(AS>r!InSg{&? zSQ~u(m@mCpTbB@8!UTsds;>Fyz3AL?y&!Bwozh<#`=~%yv zvH}wGaFUk;nEDKF=z&H*HhI0w^+`fLmX)F1wZL3gFF-}-(b%POR*ru_#SV2C>Z~ks zK1yBEO21=6M5&Yf)L4r#22kmcKZ|gJ(@p?Lqhyf^0zO2=K0p-<;NX{Gpgu{S#X|DA z{)bVq6|}?{}zp9{|%V7RoRmTMJIVyK4w>QsIzGycP!n1yu+mWjMDm`ay*C672^F1k?wDXdx&vMiTHvD1E08_cSn zX*CK!R<9>{wYyhZwSQnXc>e7lx|e)0cC*SJk&uy!Nc!34HAtaWY8sU^U5^H>d{f(n zB+{LJ7-%378YL^$M5$Eh0H?D`IniHA^-T$xZx|p+GU^Q(E6b0)UB44{W1x&gRC8jD zLPcGj8F@La~$=-CW_mtJ{QJNeU}XOgsYJMLvKZpZ)SJ0kzc!w=4`vv+x)HGv&TAF^#X=eS0nAjEtRE}ebyYxV<{~54&Y;Q@0a;kpP>#BziaOA=pbF4!_ z9HPn9u0RT(!Oq48tR#2&v8qN0ZIU5!G=JL_bc8Rp#)&*hU-`6$+`yMa!hkbQMYu zRWdy%*WmPQDt?bM{HIisJzK%x6%13!r{XX!LxM0q)jo=5(CK#4ILqw&2uT|swLxV0 zxZp#VKiY2l>K({oA%5SrgLmhf3bXb3;T74Tw&u>Ox4E0oX^U=i@x0_nyxhkwdNJ?E z5lC8-#XLW%7yZzc+<@J}WGrpHU{0v-W)W{)ehfjI?&ViA$IGBI(Sfld%+1{fv)lSl zp1u=q6&@*l;OzR=y5iF*M@9E@RX>6vi&Fwq1xY6LX&fcWN{o{LwwkZPE;^k_@}f*4 z*w#zrRwt_Z?>C{n0A4y}7GD-Z!!Hb6CK2Ewbo2+{xl&ul5a*G!k}>2AgHrF%ePHka73Lsz{kr6>iWcRfFKbR|j)w$LJ-(d)wsuP78pN(Ch%3r%!8 zER$!oNtim26)Htg5oz-x^`9{+E#EP&s2r@irRXwT8DG0ziN`n_gX}Z%nzV#tFIV3J zhrEpO=u?(|p+i>2(bxe@U6BvmeB>4V_~K;rzswg$)gf~^_ZG_+ENRQEldf{5_J^#D z|M92)>4b+#y9IQ7Al*uxLphbc18k_UJ~Vw|Mm zl*woK!w5)W=>>_#dYyXJFuBC11(q-)&cDJ1Ps^{|>ipR0= zvbfFVChkk$_;LHmY3H-xw0?Wh0skuL`yY;R)s++Mrykeg;PhVZ1-uk_PtZi zAf`X#X@?{8Sn|6+@EJn0f;s84sHPR|BcJ{ce0^CST~>zagCF}Mi>EiWx4hxyZ7z#9 zF6Mc@1-+ZIpkypv9Ddi|eVWB!7Vswhpz#Rd_E~Ja^vdhfwx4#y6WU&n+u0t&0v|u< zLmj-~?H^?kZ|nB<6JOC@^%sA~Ba4SO7wML=cx!iX;n$s{n9QwJ|=kFi*zzt;V~{Ri#vtP9#nZ+vC@-j7bFy`A3HVqxw**!1PE{h(d(+Z(%m z^Ac+pj{o+f|2jg@-v5q2Pd~I@efI~awQqdy=lJh<=72k^ZOa1Rdr$h)Hk)7JuJO0A z(08j|#J|H2-jDdRC`~_J$b$3R-}g!S|AXupJg)r%ZRt1kq0M=$^j&Xybvx;=KfxmU z-R-g~ujTRDLue*O*X!}LYBK*D!VA1ER#jyYzuMmb06+jqL_t*A zR7s+kpW2(wUQ{%q=JIsVJz4(BT_x;%BW z=@y%|&9`QE8!_DP-~-zEr=8u_q`mKTz&^xkRpL3j-F*H0cKy}YW`S-)Vl;<^=vAnP zhZ&PEI`22^q+wBZqYc^~`|YK=$pTs#R_1KI{WfiP=8neye#VB&F1V!a$U^*F+T&#x zTqaxFY1f^z=&EfMNd3~@xDlVp;Xl#v9)*MOeJ9E- zOKvJORmSx$Fb*ZETtdH7xojHfGCE6<^}@J+PrIR+dL38x5LNnxbvOvK;{8aQYrK4! zWO(KZYr6{}{%8JIEj~Qq3l}uR3Eq(Qu_dCq0;PoKZXLZjmi_9$P*Mr$g@D2 zyt<*=IN1oK$_Rxt`lTM@57td&Dbqq18C}wre9xs{d?Y~+y6dlgqCEnw*YFvZAwUH( z6ti@lSF@lpDASa|D#l3Yzj8`e88AaGSp!{3jUzueivR!8-?1xk#Wv(dSDApYp?_%d zj6N$Upy_e=7KlD;QXR@~2OUBEQ}?N}+PN2A+@5mS!GW%~_Bw6-zLs$FM7@~OhOm5*S+=K zOfEm1Z!-@+wdna~oC;!vu+MmAh z9qsgAozEnWcQBwj?Lbqc?{UsR1k&ozx}3pRBP@ISlV{ba>EEWvppz%hU>g&_IW{P% zqk@m_@ImFkP|!NclbjJV=SOaJ)49w!umVrZu&zPZf?4MU=0IYq8$0w%XG2J1u%DES z(jTcskL>CXr4f}%3AK>eRQG^|iVonKIB5&rj?Otep-AenL1m=Eqa|Hi+HaLhTh)sY z4bgv{)m~2N2n>CoGiVK2lt&+tb7lQAa3!YnM`pJzJZdQ3uC12^P9bu{I&{~-2^tfJ zS29(tg*}IXi*3**bR8|MY%YMdPqlTT4l7Ja8Zz z9~PI=oF%*Q6Z6|8ufL{U`ns#zWv{)uUGbJ{dA#uEwv=~q8S7hEc)J|<0v6nALZMLj zK6+ET44y@|ySo8G{%`)5+uLP-esx=VpWj$&8??ah{pACJU;f%FbG{ULmqPd8#ScNV zyxs8eo1;4~`N!}_c?X#IE8lu;ZkU!nv?6>r@=Kbgr3=`p0{*f;zp|grU(NgHZjUL6 z9I9uI{}@lXVu48&FoR@)pd`-Za~2<3t}u2uzi|T-|DALMU+0QO0FhO{M4E=uf&Cg4 zJ%+_r0c=!6^l)QHYZ)z~7^Op`0}XME9(@WwXK~?`YSb}j^n^xQQPIP=i6<{iwa> z%^wb}yRJU;sju+G-iMgCT-ly<(B5z_Z!cn@9z&o5=)I0xztK!GQ$a>RzKG9D6 ztAEH&jRV0~Dy#DRMF7TUS$om5k8G#>@;v56A8eof5{qF;(DMKC7a!Ap__MRytN-!? z?LSzodlrvmI%l%pl=j81{V;s)q&w`OeWSlOxCB~1uD|iNcEUS8%EHlqwnrX)tjqUQ z_2cm&zF3US@A^j;%T{HMgU!U=_q6@w7w1O*M?dqQZU4P@&BD|E`|R5GA~qlTz^@H}OZ~B0gEX*C#e(+Ob`o{OCefa(@A1D0PxfiqBY_se( zT!$}o_t<6ob|!Ux;J&+O(e-ax+&doo+*$Wx7LDQ$HlD*G-tp-D<(a=}Te9o$oh-8b z<-7ke3!%HS&^2lQy>V}}!Mbe$emuyN6{gR#Ky)H)?|mQn0z0i9%R=J=EU1N~Q! zaP=3|<3|&(b=wbE?A71PSh(A7&s|1!w%=TOReSXb@5^qgy?8uy{XA}$U`Ag$;G};V zTvEo=S?&5;?`UV8f9VJtHWXj#qLYpE>C~6AH3nD54AU7-^0ZG-~(B}A?f1RzI94F?!@=C^Dexi9n2V!2oSG~ZQx%( zf4%R42ixo4@}c&|cl|@!q`V0!XTPL>6aDBfXrnGXKVjd;!CS%05j)amWg-c?>DD{5 z;5>&NoWrSVE@+h?W*R9lphM^KH&(32#o(L(}8k~$SG80fo! z+7SK2IXQsky5X5mrOK%5#%phATko)KdjgM=?((?Z+Is7)$8NSo?e<%4Z@1idQ@i)> zd)j%Y@n|z?9=p`$UpK#<^|RC3CFfn(wqmi&FDlfq3Ja*`{_^a0_Rr61tFyT5LYt=U zy7wNDbJkB!Z&zP-Rh#Pqyuv_w_WtDTpP#|!%)Hxe3l{nAy6uiU&g$+%{oR-^W$w7` z_FfNg0aLcuQ(YZCd!002eimKg3$?mD%GZNJ38?=fM^fI%bFTOoEK>krk%FSg>eTt+ z83cu10fh{8X&y)T#i<8kv-KXg&LA9^Nr<~ngXy#dFPO*pAg#JPW6cYOl(M&KNp2E^ ziBoSkq15o;92F`*^mas`ohml2tiPr-CBk`YaXAAhI?H_)(DhdZst-d#Po7GhEO@5I zi>Ev;nPU;oo;hL}gFt6a+tm~`$G&Jc;uF2-o77c;AwYg&Gdh&40TZE|y)QC$l#O@v zSuPJPo9h0jN|HL3*~ZM9Vq=#hEaparxT47qKj5GDjt&>8Q}SuaqrZogFB0IXxh1v$ zQ>JHA^cGhEp$#tQB9vy_XDCa&ew(zt@4Sra0EYl+QZbIcA^6|=p@x5O75~tW_Re2+6ju6Dsz6{}zcvKbGrAbm@RjrM z$3>O01q%Lc(x#uEes*4J`nX+oX-6FT1SWKkw(~E#G`L&?GI*9B0xtk(z%OLsO$qC- z=Ym^T90STmX(u%#9^4t{UckFew&ZcsO?Xl7KJCIwE^m*rr8uM>Cb3)5E&#WXZ?f;c z_g;Pt=my@|ww%Wc>ZaLmst??6Z@xj?tiA1oKW~5b@|Us*H>d5$_WWyaxFL@QeBj+D z@uJoj^BBkNZT`*uF^p(xZQE_OYIojs58K7B&bPb&_Lcu?@A=Tj5|`QnTBc;MhNmJ& z#42Pto2_k}KdwhF;hfq22EE$308OPT+mcpU zi|D6rv#Wx0zQnNH;i0zo0*iyl^2UhOHpU!sl>PNQd+`6#-)#@PPY6neQeokvp4>dT ziATNBBT~DjmR4H;2K|Ju^GAkqsQ-#}c^6%QTb8$?Q1u|CoCXbv05gb%rWB8hS7h2Y zBSSsrI8XF<`Rf1O{-<0uM=5v;T4I{;TmO;gxhxf5oP#n}1Y6W4#iJi(c`TV#{@r{? zILzcxuhcX3Pw8e#9Z;*LB*Yg;!Yk>__D6Z_Fw-i34M?^TMw^ru0Dgc;^<`9Su?V66 zeGxWzY0U7Src_zFyxNTv0OdD`@@qukP1<4BU(E|h)}9&V(0Pc#brB9u zP>3D>OHMA9C@XzsLD)*VQc8bvNa=!#pMq^ZU_B=vyYQ++0qgA%{#1!DwQS zr}(RF`t7;wOyzXgM6l%Gt4FKZexS_saO^Oz?VNF_%;CGT*cxTgtvS}E-#}Kh<&nA! zH7-jZUfvepySOcRm`aUU@!D22a!k{JO(Bz9#DWjGbVXZ5w5G^8_KudJHS!d^>bgW2 z6@V%m3Ov{KQZ_Y#G0z~xlt3$A5@U&~BDgFtpB7I>`TmjXasmTgEX7Y~qTiC^ zVq#X+5x&T!T=TdwCPU1PS(0`ule4=F7u~(AE%%2K3{d?i?;Z^m8g3YzCtgod}p?ae6EEPsX2EGOPW~TVB&X z{lT}k8p3%17a8NYhC0guX#{ue@MTnO2b$5H*kfc;r? z_~oxI0ySzzD(l5Z7|Z7SALKoWH{a1V)MjF?{$Jp?yOA%v?6=v8wk?lVZcprP=TS`c zy2I`B>~4GShd)Q%l?Z4&m)`uQi$YR4C8qzLi;m8}s zn{K%?yNCQ1+_sjH3`XngoL^tYg6L!LInTT@j|tW&K8rcuRc#47Yc9O(n#fzj7ykEV zbmlpiW!!Rrn9WW1Q`kB9*Kaw#xx37??N*z%ORl=MJ-}`!7jq8avzXn3=Tonb+il0x z(I36=sPfOqt%I=zakOjqBKrzC0Xo%6jHj8;K z9QMH~ah@}0c01wt7q#1X1oErjJSDUVWjd04v@7D}BHfKFC|kaS#}z#%UObU8e7%63 zp59bnz@n$IUVpuH%GMmUqZi>#!LyyRtmG6#WJ^)-5Cyih^It#zwss?rg}T^$Iy)OT z-*f|Z4b9GD+vn1bA7WAKLFnr^8~U1U?ewz>cOfzL zeP?;U8+NJv)H8k^(@sC{;^xlIt$7FDxQ{)Dok~mC!h0z@`fR(>pK;Dbd31GCb{rnS zV~y@CdxZOi9e6zYY!($=WcD3;Z~vQ5wC}K!tvp=O&Sg=~o${B^j@%g+?IL^HhW2ke zd>C2xvvci2Uu0(2CdR4G%-}XRSXD!++sj5SH z^;d1Bcvi6ED|3FUl6ubgD+B+Tn|PK~ka@CW{1px;DV(&&lsjGFim2M3BN63*$ai8F z)&Ygr`H!+pj`q(4Zbu&*UqC$9;5~5ecyod6Hg*)cgY*G*k1nJh$8}Aacd)Rxj5g^`$-8f7 zA(Qt1Aa${D;lj4zCL6c)c=xAP+^6msgZ1du&oSp$f9|ai=v=~pmfh1BI5rt0FS(LP z;K>x0oGVUsuNM@$WZ*i+Y1Ljqo{|*Mh17yYFLeDXsXCCXW`17%ou_C>e9#Wq%3{ux z)gM0~Q{2`bRDgstu7cg46+9slGFcF*PnV(hEmEzXlz?_1og)jz66wU+<%SsKOCy6D9XD3(smiNT&b3| zMg2vW8U}B&`ONm<6}fJhEyyGi(mq($xQq8m{I)&)DNo{}xkWqetn>1XmI6z!)e}ZRZ7~C(n59e-Ll7b#{hXa` z?I?{IU^SfHX5REy?`LwlCljxI+G~${S+>7F#-kx4`93$_QIYn8 z{quPD$eh*YBJ<%40anC_ul8kL!`)VQsmHNA+=(3GNId1H?{4jg69l=`Na0pFKZ~eeg}`5utx((&h|ew@?ULE5OyW_z&fw8sy@oI@E9kXMo&r_ z$+jVH^!qD>L8wGXm5QEYRa)0Cjl?;u-2bp^a7Km(@gG>Sg{_EIAoXc*jkA)a92nuc z=};`jp}zixyuq=ugn_Md(F_TZj$bS5SBsFTezLJoN?S&3N{pnUjBxfam4$IhZT9hM zHIRTak&%T|Ru-ZzjZ#eU(GuFK=kmYo8r)S+aA$0`zg1E@02$5kT5X-r@TK*W1G|uJGAAd+}E*F1pe!2R>SMlh?b(+K} z#v#LhXeXp(${`ix-}<+vVwQxGSVDh?7A!)fEqv&4#s#W^f#_ps_@kjPiB2ZB#b0qz z!jzIi2^v~u1+RR^MtO#1(cF1faE;C5ql=cc zWskze``T3DxM^!CD>+AP4AZ#al`CY>*#7KW`s{M57AdC;F52>idW3QCRsS#9BT8v3 zJ?=d?U0b(7x!`M}hKgR!NHWt_t|OTZLZX~cvs30a9?M#=U?K0b@`pEiO>itmOQq!U3KSt<{}TYryg-Y-o^9}pZ!nxD?Z*NI+^zuHofsPTEkz21y^GvS^Egd zcaw=*)kmxP4X5!m{p|E#w;OM|op7vRr`US!rkn1_FIbB6$Dj0f8H;tCs3+yiXpC00 zAMnElJ|4K=o;$U}dF=Dx1NLgKecMNP6wBSg(yE{NSmtH<)+>()0u0<^7LD>vT*crq zVq<@rhs{=nGJG6&?(EgF3rqdJE6KPkSCTQGl)9{=JrS?^WlAj&!BM1%v(e1x(dXYj zHt6G%>XyJ?sa*stF~rxUOMC=}AH+)hjYY|kcG+^?$*24%nALuI+IcL7-Yx|(UAN6= zVRSh^r1PtDFX7ABJ@Sq=7hxB(Gw0!l`BE3w@Bj1+jGDz`pKG#E1gsq4a^MY0+2pk$ zFPT?+?2HNy;G>_%HnFeTRTlvEl`r`N-j%mbd-n%En=gka>r zOz6)JXR=H6A9&~~_t9Lc)OIn=;0=a@_94fcH%E#}(oqkb#+AmVV4t2x{73y+FX~%C z4AY;O!~2LhY^gIBFH5h#E*S zG06On@)#L?SD*8LlOdbK{NLpKS37;|*t3Vx|3~|uH?Q=r5&gw4Vab@qyP`{X0#{N9 zztYfddrBK3&IRiJ8)cI95*q!F1+tNo&;QOOmU@=UqfNJ{r#y-ipCkQG8D0T0_RA|1 zM#PRZ$l`VUT8G`N5Ag27+xddy_W8HAt=R3hCGXd};hO6vT|#+s?7HtBSwOq}mfP9_ z7FajneSl>Rv&vqV@gR9r_C94ui6bKITf0k40yQlg1o2yTgDa%Ft$h zep#+PCXewq=i-fBAe3iYs`{E*kb066bkq$Q0Sy^)DSawmV(G=qp56>eqQR3c(*rEL z8l-JJ&T5iEERJJv90*Dl7*du3HFQ3mj(kD(ynfM){w|~R4{Z?zu}M=odiCp`8gE7A zsM_d*?)T~+eE3%!;S9Hc8I>1B$cVh|V?@grx?Y0s)YE^(w{w4jZ_C@MXPwPtaLbY# zX8kn{Zu7$qU}XI^*msZ|edH1CN-mOz9Q1e=!}c3r4WHQLf;*>oDSVz(*%e<3}HMi2g79=QrA&r`*%_ z++$aML}4D2i0Ojc)z@Cvp8u?)+KZq22kkc(U*7(hUure|&4)ieiN9v4)9#~c^Rt+# zWN_6EO|2kv)>_*~!E130NR7<(1WLk)AkG{~bRH*n10GOCz*Z9fp~)f~?Ipv5cKD7m zc%t3`(zcXj-T?~v!6V!L%4dZ;*oGeH$HLwiXzS6_E@#kbLFCIXj#wby$JeyZ>!)^V zN$CUXb|-bpD+g%Lekw^XJlLYqzCim?{TcX?p|4>n`no6!0B1k6?@>_>=xIig)A6!W zXL8QOMO;XdOOqJ7`nYTRTalY;V5$`9*`$KBtA2u~ zdM~I+1K@%_J zzjPcFIgu$6{erERMN3(e_gCOwM$FQQt)skZyv0{Q#i1kqwPeFi_Lr&3Ac6K#I zXZ+C>jPWHu?SC+KUJweQ$e3YcB6X{4dPKRPg(-pZ*#C_0EOwytMcJMA)TPX8Cc30h zw0d2fWBG^kioBfM_bF|}Ya$--7b4lYb>%hl+fxpCJU^&3KTZ5~uY7*{?;o7Xql5F? z3wUJF&y~FQ$wxnZEHy7>NB)`TUD}>|)M4#@cEw$K#f?BnI&6b>LY@AvEp??7t*62H zjeEb|`Uu)fp8d4;?H``TZn-_Ouu!h8lATb#g#UcrXSEwId4C4K>UeH`Z85@d2|fDg z$CQ(0^w9s`@y3_4YwMx*Eo86BZk=a7<%w+$?_XQGxZ3oTs&K zeg7A2zrA+N?yPIrx#Hs53!e4V_EPM=fL&}ad%;nmf6vMP!ntg52eD$5m1^iR#a64+ zPT7Vw7K$yBYX03r2#qy;6+eXVlqc=qe#^VlR%P+UM}mLKZpQLIY^6H!SE`!ImNKAX z_0YqQWS5gW;&$C(oA%77J~59P+CI)W|KfJcGY*NczyF6Xg#EIsuIJrcPvVJ)P1((M zb$cR@>H5y8U!8xMO1hrXUsa*s_!QsJk6iWF{BM=~xPZIPeAk)_Q7#A_!7j$n^CJo_ zB5ukLB;3nF(Zuu$UKP7LYAg98cGjX%A`Sne-!gGD&)IRo-E_V$?NZ(w=C5~7Qe@Xv zPnDB|BCj|Rpf4n2>rSs@jyyDvL;7yE>uI55d{p$%C+<^=-0=Fi z^&j#$?zd@APvCLSETSRrHg*N3tv&Y{w6#;)zO=Qq*a`UCYj4huM0LK5Mage{@6`50 z7LC1MxRxKK*mQjs&6Bi`))U{WMX%spqGz6SaeMADN7Vho<=2GrN}hOmGBNkZFRZ`U z9rwca-~V$eyF70$Q5@?Yr-~J4^A!~7o^t2`j1Tk!>hKBdp39G&6nc=={8w3gobf%t z?$N^!*`IgW-QS*d^bsWwq}Fb-(T3TC;E%wWGLNAWtcQ$YkwP0%SoD;Sb^RTRtDhwX z&=sHb7T|?=$cj(KsyjDAm4nF5I?iBVhQXdy}7h!%tfgiBBoi7x&VSG!9lfCzL6H_9;l>V}i7;UrT zcI~>WuWOsIfaZ@UXkXmnyai7x-OUeCtil+v=@$GD&2O*Iz4%=`t+eB=J4VI%XPzeq z?hosYkErq}xdKp+`d&ECW)qKI7_m%^z~i5B6`p(*bDuNb39Jm0vNQh(O%W&o%BMY5P(h6!Lx19w*uliW6up$SQ!x>x{=nc?Xc@{GdPM!2jKwucEUMQ41m~&p z>i1pDH5e-!V(2Pf^(DG_MP$)V|BIw#a*X)QlaPbhhz4$^tLapFNL$c!4#vVS0IN=_ zzDtopVun&kYA}x7E=t3dSQZ01ovfW#J5z(fLkUxjDT;&;f?3|*=boIM^FX3XC-Mkh zZUiVK6;2l_=)e_XQAJ&81SEhZ&4yH!Q;n$_j?Q;JG8!5o|4V<#?VKeVnoLZ?B6IOh z^h2eiriANv^p`SZM5kJj-s#mdMNmpdn9A$QiU;|=q}ZgW3ogB!N$3Mie0eP4zWdsC zTh)SFJcYm)*2?cUKTG|EPz?4l2zC2QHS_Phl}Ai3Z_hvWXsA{&$z&poIm#a2Ru27V zomUHPXPkX*UQ8NSJm@xZmo8b9A2KLzcZ-A~1dGQvR}A!D`_}jJ-nKXX*{kwm-z$H6 zUAy4I%k$0E6A#?4z2_}|5nFuc-1!&t(#>tR#b$O4Q0Z5(;P&6&{XskW=}&3LJpHM> z5cU4{PyhPm9zG%;TQtc|oyexEP8uNAbc3t&F@nWPeNLaCMEk3SDoC9r1)f@st15Aw zV?tk0J~*p^*=zu<4VQOY&x6v1k16#~aPeFQRr{1y9i>*v1?9)U` z%li&C!8TGCxYHMa*SBQ_mtpu40_3hFNL{s(4Y(#GHObLH{GCi(Wb5Vl*ztn3)dhCY zX}Z8H3|sr4fJ@M@SRqm2@GlJ2COldv^{$3$Wfhvr8@T9#Cv~Up=)%kdwMtzIZKbFx zdgz2kc_~kgLuTn87FYk1PU4}v7)rkqMhho9WOi#x|J26`ZQ`fFGjXFdg4eG9TOBz2X#DSwJ%rmg0OjF~Yk`chS2Z)g>*3VNkiG9GG8L{f)c4`dmC6cGKK zdVSdbl~GcZH=Lfa zre(^hM#c^H(p;~#hX>ciwu>&mmiKo(Gdpqo5dq&VrFmcDM+i3FXubA^<6e*(c^_^3 z#pxI22M@l%!oV>s$UKi1&ijK5|MwBfTR78{nQt}(_X_1`rr8%ugDAb7i*UjQ}lcceSiA$=d`~)={1?x{DAkl z-OqbzH($Db%F7*7QZHR}_g}^CK01}h_g>8p1RTOUs@xIu_3!+wJ?aj%UZ)0DyXLXu zbY>bq4)Aey1-<4K&uf46m#@krc>nR=r{s}YN00_V$8Zmutd*4aNCx$=# z=~?Xo-pQq%H}g2{d_HS(6MqE@N2bfUvHvCuGDkn{5ay^)&I0CVzxZu1W%G#D_|?U_ z{%DhP_eu=A(4_>U`CH?!0$(LhWutU$w9`3x_X#!PDC{AHESfQu=Di z&Qz1@uhV;ZQ*Y7`KQ6&ZxdNigCpw<>%)|2I2>wd&=Xn313tE#QX){_76&rmO~dR~4^z(wf)Z~cT{f!(OR@z4G+ed;d8 z1;4a6dB5UrPc0ZbXlj?+EFN3^W&0z3*yFu#|Fd=vzm!_^i=my>c4o231w7-djnVH} zK~mTZsGP|cv!RiexdQodA1D2^YjYJ0(os-BGC>=;$RrauH0Jyd%5o7^8ARarMB(|D zv-3c&^djQ^h)oE)?)|v7-OfA2u7x~$d&PymW@wdm@11w$(a}SWJgl90%4zN9>uzkj z?72HXlEAOR-hHo9NXUyovf89WY6EEQN**8HW8Xd5HMezpgmK(QN=>m68h0x`k%eH> z-TWHr9X!@+P!=s*oQ1zNcpscU!eHR|Cw2e(*%_uP3+I`F|I$OP4K@ELI)TDuh`7pj z7zL1lhe$%lGoic!nXeaHQJ14bNvnzK3Ss&`qY;!b(0lJ=L=*0C-2a&q%7#@kP4AGw3w-B zYWFc1Jp3HR@RC=oh;FVXg|3@x-w69N7wS(9k7Rt^n zY%{c-qOI02Hm?+1>k6L7!7^w}!!0&WMStnV8DuiB+0e8%c9`$RQ;v_pVMES=gd|I8 z@^pO0J7j75u$e4r$VY}Z75cAFMHz}|KHLy+uK(b>XUWG;*wg=p{?txIAd7+6)Fp8) zZvE@`kHmkfUplF0>L^GMISgEAIaL3KXQG4%Q;5{yyMFQ^>FUz1kZ94Q+*%Kv_Pb$O zQPgoI{oyOQVu!4WDKqdhWtrb_uhrX~XFk+R`=3q0_1;vk(o|vULPx)nZUiqE@EKlsgODxX8Gs}-)eXm3%v)JMYSfcK z*~us#Wi~!hJI!E6#KxYY3vYCIh@c65T6<_Y#7{}ckM?sPbNjoj?q`R3C){Mn_AZ*H+mK<`@jf4*x{SJI+&D5n%#f<3`y~u%T;+ zudY%y!HN8?A4P^FN`&|9RDVggebxBGSkv3en25phI|(V(;LrnS;+Kd-equ?i3qC{t zh(A;l{fa_*?CKe-PC)r&rY3d*r`8tFOvA(pRhDVcmMoyer20RecKOmy^oMIIS9q01 z{Dddtd$L#M zi@4cs$s&IE1B|#D@yJrw?lfP;3;6^tzqWgkfkT_quRWK9pq|1NC)wz-63(NjRXGb7k$Mmy&tWZ)m7$#2?*Ia$|_6V=SC|{@WfuHIu3yrnR zRX4s{YISxeF<&IW)B1vo3U-&$;z?}E=WO0Xw{p^CJkKbrx2|>K4UoQagH{d{tv*nH z;U_x=nALb((J^y8Iw}8Xf6}j`&%x;%6!dtk;7vuDV~rqS^D?8oZzDwZ?z6a^ ze>3+!Jy5kU0uusqO;eu%L58}kRPj!1hHNl%Sa_7wK9=i%V1!VbLg1>09;Jhm-*Pvh|J(=9Hn9B}A??KU2D zy_JRB5s>(!5ynaVF-m2&_Zp{S68Vx}=c28={YIK@8ks8V_j2xY@^lR}iJM5fbKsKl zr#e#9S2m?sk%PEIBS#KN&Hy|>!@nPmqwj*7>IX?dl6-fn6Qq!LrKE(Y$kTXi690_d zmb5Qjz$>%(6F2F9rJT6Rq)i2=I+q`COe>y<#AI&aLffrYq2qx?Q>n37uoA2(3Wx!r zl9p1Wh$EANl(D4nwzlMQ>IZ2%kBa!uLJuCu9l(H5c9%kQPxKEBGxZ|_{gEJX5|7v0X0c7i$OmU#6<0A0|K$pL=;v%>)PL)UbBzbRZo^lS zVgoXjoC-nK=z3(qC<~lQ4D6$*Bx0r2z~Zf+(68DhaYWjrK)C7c$XbY$ZfPU`YGd0RGDw zZ#QLhCxQ@z;Fl0}nyJ{<+Lh!K2EdWhkDb8!FO4&MkF=G#nAo9(-Ac;DW>`urQ$Gn*DN}4&G9*=L z3M))_bNP74Y7KT>1Fc8ByONT*e zV4SthyeY9w201aB9~$tTV?%$}S;RTUeuKtMX^jBTSXm@BEnoqpMv;oIG_jO9!ef)g zHtC6(wwtggQwXwS+L1|*KJZ`G)Nz&UhLCQ`tNu(mFw35mGK@=DtQb3r6qIX$ZpMGg z-Tz4LF`4Ms>f8aWlE)isu?=2*RfY$7_^*R{3$Fiv+_bs+WMvv3r>nhc6-IUD`jw*-Fn=YqW{)mU~ z^;?p*UoiVz_=bY$5JrkmiW2B&7VkKuJ^JJd{*A@9=#HIb%wl#@j>R_l(yx_A-o>_= z_2alv9?i-R2#o87_BxLAf8M9}Xm(A`^f5QB5nD3G*!Y~Ij%Y7={xjN-ettIZ=;Mbb zOq!;R=v&MjKkoqSI;Ph@X*#VZdH4wOsC@ric+EWm1T~x$#mxI3znGAx4|l|jUyJtj zG>}T|Sa|ROd$)V;eW0CoHa|{6`|a#}bi!<3ng0;Y-qxo2J6>sJ zM$bSCK>Z`t^%rooD_Fm!z|;6%K1P3_a#}J~&8k8kV`GSIBl_yCLeVLWJV?K!C`XV% zei>gRgs&*7xyz;D$P7PO+o1KN92eV!=Sy_}6$|6z?oPf4$&OC#S-}@3^V(t0I6Py& z3vOC6xo6RoE>~);)qc;G%1$$+0465@VIIS5VpS5#M!Q(WagZXr2<(uFg>A&PU*M|$ z(htzo{SO}zkj@1z>qSFdyd3wE1ruQ+&R%wUN_Apx=I}YoZl-MfeeGXK%JftEjfwUO zP%vfnONcB_;)CKC|3f9baAAy2bH+gV1_}b_yPg6Brlv5eL#gU81_Egf(vhFU6os?6 z{$wN|uYOZ@cNIG&faHlza5+Q=xhUscVrKv;= z6nEGuGrKdUTnx1T{A!udFV& zW}LW844Iud(pB z!)?KJ?#zl|9-}g44z()W?e5}21V?-fp-dsRUsS%!Pf)~#PMvaFF8!8FqI-DEReAV7 zaXct~#b`FPG*RCO4Xz?bLo{~Ct((7+UxQqat#VhgB}R3dkX>3!iTM~Mn2g5dqz*H} zJ(RUtAx#Zp1R-`5Ylu2!gg|Tk$Igy~ySyG9(MCqfMb^A<#HukNR^N;^Wc=%KPr>-> z4L50Gt9b_=ZI6B=N#Y=h>=DJ%P;hlhT}LwH%sY(baWl@-w6gxp=q5;|nB*_*QI4Hc zFM1tWhf;DVtXu*(0`s&|{}X3GlqF%_|E4SpFgR1|e%3qZ%7^NUDxnOCy5ulTxJNw$ z3s=|AiE?p_=2ZPeW~2bDc2M%WGoVVt;8l}JXvrMsVSV94)U7Mt!84N%+TKP==8#(4 z9*2ih{RQ1%@73E~XSl;{Sn<2O!VRJl>LM3cav^AK)1x+Fhnv5)246MU4D5ztMhGX; zt6rS}_^711pfhI4)vxucvNFV&LwZ~rYEPqMC+4sx@W08^{U@gy2hk%w4t$%WG19+Hiq(Pjspvay3Y=;Eqy+jp%&{;C-IM7F;`7cXo!ro;RP=z3&bH>WKc9ANnES78oces7` zE^;M5vZ^zLRq5KDt{_8rr~2pY{S0=vU11ADMAzR(CY?Q0Hpb7uI z?q~m5%(Um*PND%>NFD8Rz+#>HJB@tw!MGF!z=2KPfm5vxSos_}voWG}X@#N3q0H^R z^<7+rSEpW@&=C?2#(X9Hj0-sKE{QxIJ`B@NlaG`dqb#%wRFE<_SA#En3=uUGPC2Qf zJ>><6OqUz8XxPP$(Zvy?Ch#B_a}wWNZ*70_@|khY2xHp>Tt0{-^*Z;;Qln5^Wvu6N zvu8L>cVS6O4Fl7jD4Mhp%JHwjQzN?1fG2qK+BxD<1p!mGw10?H6I*+IS)R~S_`Ui= zBwW?!X_08HYI~5Hib`5V|#16L$Zpj;#Kth+;iiI2hoD)^NOG;whX-XE9%8d$T zPg{G{i!Eej{TM{jpE{2CmxdTwyVz*cV~m$tDbqPbhv099a*)QcYyqbjb{4L1H*0a` z^tWnb;XW zpvSnh$COKyGE^?8UI!vTwOYin;{&vuiYnZM7t8UyZ1tWLM71XBFyc7S=Ij1eNzmKA ziAnG!4tRZm?UiG4{g;)75}2$#g=Hn%Ku{jnpCPilS`K2nmu#J?`@iCe|FKwQ{u^7{ zpTv|EmZV?W5;ABcrlh~h?ro;<%BVh6T-1Naq3ik;E3L=Md+hq7v?LX-C`)sq-Hu|1 z+n0aM7eOI|inDCi%jgH;)eSGiDR7wh4-A{J^ndH`5Ud87nl9nWP*MiJXjVwUd@?uf z0A+#zQJlEWt(R+-eD{l}IoR>Jd$DR5(3?-uA6O!bfU zFF#5B>ein+TZk8kD*Y-`zZW7iVw16cjDM9T@X`O&A3MQkXp-M8+0x^zQcOdF@v6Lr zn$t+=(hfNHx|v!3-Ri3UqJ|T@LW_(Nh!irhzv~ZeA=B2Rz@UO?nYjv*yjmL>z5Rov z?8o6>{3wel-jZcmoU#T4YKrohhDBm4KcLVtB6WEar}q^KD^=)y*v|F3cc?u!xYizpSC}58%WwDQTU6v+R#))><~Xl@n@#~p!6~R6=B}n zmaBH8mo5zimUtrpmZZemurNr-ts~R+9>BE!E5rISKIG+1y=H(>W&}ZEexhJ1S3V~- z{N>7C+M-(`Im#~OTMh*MRaR%El09kv9Y12H!RZqaJBh5Ql>AbFio>z@&Q&%egaCrxo-;LO1w ztCNC5x=4gt61o_DXX^M1_GA7R&v9Xr0@g9x&3;6m{NiU0rB7|{bjI%=3Z9ftwD}N; zHP8CP=2`#g@BBj!Kh~A;rY1}aPmCY3j~FBvd3iuEqlT0|jo9V|-g8^+`3L@Pz`6Ev zUqh_8=)X6Iv5ho(gp5OaJAVyga!ktQ_-U#}J^%1yr$6>-Bo_Bsl0}!fCQ5bMVU!ZPjz9C8 z*fLLkimeN>Hg}xMJBIj!O8giRM;iJfHjv8D^Fm~u2DWzan{6b;N0+kdscEowG4EkU zoIAua-RY^}@%7=tx#qp@5ujs@P)Ft@#rf2qHJIWumne8$I|}?${rqw|{#a3*C(l26 z8UN^kqdfOtoxBN4&O9+k!bZb`xA*+@FD69_QpQ32p~6p$)DdxOtEX~MyMJKPf5w3U zFUBaYTJ(7Q{2f0&N%it~58;~EJp|qO31|1;gjFe-!V!MrSW-Rzki+-M-(4Do55e$F z>6~9X9=LA&8@oVw)t;Pc6iH;9>+DVLRp~lL(Zq&-no_9x-ndg&LICllx49rU@u_vd zxN+e_{+`q3h9q+e#+1)}0&+2OSkXF%dc9I|>kN7(zx?3{V_xvbCXSAOY94YZi0*mV z8e8|8EYRmY4E}IJn&MVUi)_0O-P`YWlyB26<41w5Q{ zP$)IF=8x#T{-6j?4Lu#70gNG-y;_AQe9YR#>U!=8I*f4{1*~~7ceco*>+krf!K}%$ z#pLW`fXzkgSY>P&LS){Od0zqDh_hI)3yMY6RE8D@^LQx{? zSv`5A;n)Y@u#RQ$7>^X!e}0Tn*&78vTIxqnr^}dp^52-_QU26i@#q_0G|68(xGw*Q zzpej-+vv;v9-EsNsYcfenv*%)z&d_nq;oe;{Eu0u#q{=s5;=ZS}@5M z->7`K*0KZn>8}XMzTei*n^j|o8k4ISAWCH2mrt4cbj%aef@NZzcH$+j3q?Qp znHxBWi$s&sY{=uzKjzi*hr_rP1n2xb=dr^AI~vh8<3vD=N^aJe9H$_FTn%H-yyPW6 zeM%7;cjN3rtEP0tX#0+z-q(J!yt%pa@6jYb=hcN0ri_2R!;wbqh%@}yP@{O(X#|Xs zUdfLeS#6r@?f+iOqYxbf?T05s+h+FYV?As!YXV4$hYuK(k=>jmK2}e|nl9>xpBz+D zWq#9TmVHB-x{ErWhf?R;cW_ii%IPo>Z)z8(sggHT=ck*kcbr zHOkcH!bOjVSNW39B<9Zp6v^WkyTLV3392{O_RD{U#~-s5{t3&#iznzVyu@Qn#D6O( z=869oIsce>qW2R@t`G1#cH~nXxgcfrm!G`)Koei$1Ur7n{c3JJD8tvl%*j#uh;x0{ zXYKB+nkN3tQ+3jFAdDW&OZBIGpCI<5GR)P-cxsDG|Hj@m##n*CrJ{|Jjm=UD{iJeei-|y`Srk zV^D6X(xm74_pDuHSufcG@b>R!yZ(nCJ5#{~PG~64`Y67#?TZh;9^;q0JLo;6Vdcjp z1$o!(bLou45TW9gn0P;l9v}WRj0&$?TwefsufN@yV+u%Y?)|HD1HSR3e)tCqNi#ow zJS#))91}oz-M=>;#)@6c#f_ddf?SpckY4-G{qLnBXbCG=#xotl=HGFC*Z=sVM*|vm6fipc<3~CR8>BVP`gi{`*N=IUw~ERrCQVZYMf_^Xns`MWo39)`n9p9i95aQx~LeQNh$ zAPIM+XxF1=9&2IF`AB8gUv+o`jg0zv{sm87`8G;f7J~@r)TBq;DgMB$RCVqraB7AD zb_CwW3k)Fa@oF%DNPrh5J|E;Tf@MN@(V>?{+i+xnass-^>RX@h{P4k!@9_tNaO7_` z@PB)QQIdF-cir|j*znv>SiE==8^Do&E66~4>gW+YW;F8Jg9UZyDKmX-k&*MDRX@+o+Z+myq5RRkQ8N1}6 zL~q;?BfIq{KNgL{H-01*ta_6F2R|6z;bUJphz@)(%N1Q3ZKvKu>ER;Mqx0%I!g&1j zDXD1P`3FAey+{?amK>vT;v>hm)B5rwOA+s+=GU96UcAPy)pvXHXYT7y6nz~gteyYJ zdHA#9^@`Ni|HdELU3x)lbR4mw%u#0+Oh5hNse+36OMTXuzhkabmCku*@YRDJ{{e_W z0twjl{|S17$+`wMFRR$pZ?aLYs#1ey=NL|j82%=(jL(tz&-Zm{8T}H!{1a&Thh=QG z??!gH`1F}eB;$8C4ZJaB0kBXwLAIrqim%|58ieu@3Y3aCpKiA9ISTu}H zzMTKePeeDjyzwfED@3y6*Pr!Nh^`d_LWZ!O1|^QINL%!Odf{Z;RdMWm-Vt#l0keBA zG2VlCbJpf8sXzGbAw$~ohw;Pnoge!$fXMtYN9+?zGqMN|7`1J!ac;rSEHDjTY^W<^ zeQw^7=^qWaPDUZBKuu;NAW0gZ{!+ioULZyxf~S`I5rj%D%ED7Jh76E*5(1XX?g} z`7iOCSB$g%8z=3&n14CbrqJexfN-6U?IVwY_8gG0|FC}2MszRNm4>s&gmWjhA92bb zmBsO%&&jC8IzjZBtfp-kG$zB8LA{XaTV9`gBZyJg6DTJLd{}~g`iWxWFTYY^$pFN_eMA^qc;_!C zBF|Xc3$JP;WB*}(@=ZLh{c1VdO-&lbnv5HA(4G+dHsmrpoUIb zMHAuWkJLB2hMIBM*!sikVCv_1N*sL{U!lKntNqrGI!NLa91D6P+QKH2x8-&lZO1`LzNeCGyk>3I>mJr3Dx?ybC$Ocf=XPYZEi`O>PMU(C8dD@=sSw#N%(j=L_cy7Vi>_HsixM z5y9BUi)?tJrnBPu^Me`?jhA?UPoXj+0^`4fren3$93>j$exl0PEtz1&4iPdcOK^{4wfOY3PhLEf_xdX(xDJs1g)@U`3Vw z2fp%on=d%mhcH40Id&*K!BS&`$U&lQIR$m?6*DOGj~}4`9FPwN9&8J|Hr-Etx^X}} zJjXiyXQ5{Nzr_g| z9|68{=Qe#Gwh7&G=r;6{p*#{;==_rwVTh2comSCc}2QAMVW|VMnVM_f2 zKN=AeMG)Dw9|0HMsPR00kv}xGDq1Z$)+&A(Z`;hnVWvjL16FJ8mun>F z`=XQ|T(c(s81bSoe%f+#F!^B+HOu+|#ki9(KU95l;JItOi7RvE-#QSGTOPhxhbcKc zpI8K%i);w*L6k1oQ7(|x{tAL1(Or!hb4_g6QQi8ZZ-VgCo?bj8oiS4ivGcn1uWh_^ z5u>xrc<_LYnJItyXekBL9im%GvbJyGEPzDao*SUq0z!b%fb8N+xL7)r#9`ZD3jCQ*mJ%0W5Mda)qJOm?#UpOvo zbc|0&iM7uQ)2(lHY1=(ZYV1gsSGv^7aH#L|Q`zT+A07NW9D*e0HEx#m0i%hI!eCh! z6aP0KoV{4q=Hc&H`5^E8i27_&1ybF|7?v~~j5CylSe?%L{WT%p#_-UrH|p-$=6~23 z|Amd;eUidkh?w*NV+_L2Erlg^Jiv4=BRgCAWGOFL#K9|vhu`ji@LgVx7`DiCO2dBQ zXYRh`UrddG>Y}alsi-N;iM|-p52&)Vl^dX{$M)f$5B$j1t?`b^rhDf9FwZ}>Kydg} zxvr377X>`vgBvU5xyo#`xlUaSoU9z7-3eTZUp9;w6S)gzA2bR|Cg7!&=BTcN)2>y^55k%l?IZxr_3+hWku5j^%^ za71s`oOBt-=lTZ&Ch`}id|<<}nzk<@F@wfJ9>g$1t__z1(1<0Fow1J$ele!9>N@GQ z>Vb2=V_e=?;t6MfNyYbg4}bGu|DfD&g~$~LSjkOC08@&am@{s!`z*-su|-ba*lJ&X zI?e?;pa>}6j166{k?1OpM73+LCq()ze&_!w|5c+cd3XJjLT zo%|7T+lVcA6k_qg%-(E^; z7d!IDwv-+JQOcqcN9aE5uA;~r+ZMb=uD=^#PXq$Nl-bYD=!j&^R*IIm$YMWN$O9OuV@FVnz>|wnZ)yR_OY5w!#}LoUyqVcGm_xeW-lcR3}&vxzIF0 zu7nEBN|c2-S+D@tIX1NExLDeJfPskKC$@|Ut|-Awt>?l6qfK%Fj~D(r6$d;#`L(%6 z4bD2LE}YH*<_J3;x?>Abz353%-Kiq|;O`i=U=SK-#CBi`~$;RGsQ~&t(6jF z6K3-X**%EqS{;8JJpULcVgMuuTj)OVGr!=gH;)f}bok0&Z+pnVb=GvIPXqhriw))N zSGQ;)f6E}WEf;<*WqJEZtLt2#FYk_9dt9Wt)?RyBpSWdM{_QN+`2^beq|TyX$s}zH zH|Sn$=y7hQu#Of^{fLF}Um%{sjuX~fWO*aVuauI-1;+@An5(<%#~^koBR?RO0zL0(migJa0b0Hs_6T^}{Zv}2y9!gY%I^HVk5`l${s z#o&Y1%Q7R!dd4U^Pbwhbx!6?3fdm+fz6H@9HxrA_J4$L|i5)MQG?Em~2#vATanuHT z<@(jzy?auus!x66yV}0IiGBGy?*581oOtr0bUbB`F{+M9=l8w-CZ2%kb!#a-&wo5n zY+W5P_2&y@5MEiikuQ67#Bes;U6TE0Ohk>Ig67(-i+TR77q=eQ#_#ySp;Skk%ZPg> zIq{tr`TI$ffIcW03wf0_9>K8BivjigD||3m4=7keZ}CAY-GMP*HYdWPtN^z~3^#6- zVG=#Y;V4gxop0R}|DhJKBs#F_hn>E^RtFBRj080oB}&#m4|*6Of0cCSiaF8NhxJbz z-&*79C*jaP`7;i=slC2yiw9!JQyeQ|PT$z6)#Shftk@b0_Ot`;!@9-nyEFbP=;0y% z(Stc{;z|+wA&9_aRF$8m2`nBsSBy37bI~lj%4&X{m7M@Rqh}*sb`hd;+en`_dT(X8 zKggIUd*&`m^m#FEhvltAuzWBH2fWtH2d-eaw#WO9Wo*HpX?iW>ba|;yUz;;bWXR73 z!hF9kbhD*m4WaiCfhq+k*GHccv1=HAOyE&Sy_Y9h+H~uXDjn>f7iS7_&TXG8!2_8( zY$@Vh{o?q^GyLVC?iJGO?PSj5`3JA_00y?YZ2XT5VS@yRIc|w8IGsP*k*ZugvF)7q z%B3Dh=Kwq$Qg80aUaZJ^{}%}+*l1dAJP!-8CfMXv9Y`qbiN!;pPD|~?Jdla-xivb3 zZ#cwx-WtXMA6~uwRFCiHo~=Hf)E2{H--{$|!o;4w`A6&z#?!wz2p&5hPH}T}xg{pq zdQt@?eeU1cmn1BL^5b6+LL5I_@P`xwHw+r^dc@a=>bD%=zqO?` zal?(D?eZ727`6Z4kJ7)x7fcFk-Eo#5Eau_(H3@cbqag10nn*M;3 z{WN15bvXb}q0dV)Dv}_cR5nqX|7@c3UN~L&%_cTZ7p~b%yLT`S4{Z6(6JkIq$$!2` zluAmclFAtWl<27GapqKpV&1{0|CDu@FTN?XyBB|7H+P@i@W3aA6nKw6 zN@eP3nZac1X&k%wWQItJXbjC{f}Cy)h7KeP6)SDopj6fqIi=>qO7+UY7Dc0sS8?FX zsD1MLPZd7+%lFAYriXtqNFJS}!F}R|66Fk5HOf!^xEk2v#NL6LKWpq@7N2C~xkQB) zm{uBAIT-8tPaeIS9{KZ%4LHUi_uLK!U7-5v_(x>Xj}|-%g9SdaI7m;&R{`0S5a6p1 z{AqeZ%a30q3Tp#5<^5HH_W4-5eABP0^8DEgd_}NThaG-Bf5(4!xQU_fB?j=!C;jMn zsAmpuh~fpi_3*GJRX2wCrODaF7oS5ee+-829X1c(Vo$h5j~{w3O7$yJM-g~&t-I3C zlN#G@%xT52bJ#qwC`Q)4LZYdik)fq$Mx&Dv7} ze_jMfknm^zT_5o`SxA^C1l;G%xdzrJRlD_*oO+fL2X9-|}}ZV{+VG|GB7S%${FAQOSXE%+W*o zKobMayxgZY=8OZu<*3qM33(F9NF68p@AAMDdq(@_OMl)}I{{$5FT#*G9v!c+;-Dfm zBsg3@J^O;flSV#D?%E`Ql&P9e!M1Mt#v7jUHtyc_5M25O`MyPE{~>Son1;YbF#StD z_8tG%w=ocRVj;YIk;ld5fD4u};oMhU{ti;xUfliIZLxZdD_*aEhq-(l4M!wKo;}9U zQ94`vkq{NZjh{dXF#Fw26VBv$yxzRx!dL7YH&&5#K!pH?;&j*vQ)*s%ldmoMjkm|f zNc)YR^-m!VTI;2f-z+kYot()Iwd00&y;{H0YKjVD{o23ry7P|+4!3~ta}&njDq8vg z`fF8YP=`pG{{_)=PjNw+gM1x+A5e`yBx<76&p}Lw@ejm#!r%7CX{H%gP2@^mz;!Lv5!|<@|#a?9LAcEBIl6h&FSh40+07 zJvGX_JfW%cVmv3-!8x7|0Bq&Xs&{>Wi^Fs{r&(TP_@-|;-*m9i5A{c!lbugF9)J(5 z^05BJ3LN9*_|lHrE5nCt=L-Azgo|;kysJO1D+Z`7^WIXK^Fy;qbS~1nsjhALJEpI# zI_ULJI_8^wA~j!(FGEHxehl*?H{FzBvKJtCjlf`5`aM&b`-aM6yMYoJ-ZbQ#{My>z z^-qou%b5=xziJExym=bp490FZl7sgSF!O zx=5bu4~WLnabx{y6P)vbpHKeM?-EZd2{1(P*Atw)=ot^Ki5OFGsSS!=?Hz|45Q76I zX5PO}{^XC#0mOzTF>&q^2U|d?x}V998Fu8LveM)4{t=`2iy74Iim|GsC*;QP?>gM?k&s9lWNk^Dhv|%PolS1o_%{>HBiLC`j9I~Q|BX#%kg@ai@xwUZ zH;@M-^Z2mZ@W0VYJH*d0(IpUMSS|*H9Z!6tGk#*kF2;ewjdBlD@qOM0A*T4rwq$VpOdI*@DNbyO1xYHenRHFBbBP?0@yEycF^A&t{6##EQBahX z9~uGhRNk)ZgMXcC9;KA$!`_?_%8IQ`&$$U5=4X-##D`z8)Y&t>e!!UJz)T1`zQhhz z?BSpw_st+}4H8L|9SoWdh4x+KXyO%HHH=(NfIbxkF$LK?%kvH%t@0a;Jb;T@H{-me zx1}g-c_m1*$Z!7be*?l)@y3b%uFO7ABbIU2kBsn%{orV`BrDF+Np5hOVuaL8J~+A{ z05d&h10{Jemh`ZxYwG-3gsP>$+@k2ewUg6$qM^`pMg8l#zLK^MC{PHzf^;^?8t zSk{V}y!>5%3^HS_{T=Anmv;jFcssmdiQ(CTsC(+3e+Y=>N-?l^?w#N8kFWgE(LX0` z@DpmDM2%hexnQY1hw_m>LrJZzp5VA;erSpn!4v0kQD4FH`uvJ8HyT`1dj5C*b9Ht8 z7*F+a#;g29LOK3-{r8q+{4pYTY&}0y`}hBlp-Wc$%qc@uya>w?1HT#1G%;Wt1D0-V zas)Kqj%_ZSb`wvBIO|)(jOI+WLzZIOmY1jUlVnoAIoBVX@ZR|ki4bDLn1*d0lF^`# z9K*C{5<&ZzM9A0KnGtq;ss;YMdDSdOF8-XFjsY&T_tF?Gf=ph2g2r5ubAXZ$>&ag! z4RG_19ui-TggNXD1^Jgb1{TAj1)d9}@*d$}9c=F7O2m#oF8Pus)r*5?^H;{rgSNHl zPwUX=ow*=hXoxu_NzkW&a^9>5&$r0A@#f1oSWm`S4{&)g7L6%(!>k>i6!2;@52YVo zi4EJ&^?!cEYDB5V1tHv2(S75GYaSO9R#)oTxH>XLrwvPeKF`16iy7r{ksk#Q_aq(3 zApF>oi#4bi&i-Tl_uN?gUW}Sw_W|rXZas<8cl^QTOLY$2<0|>&4;IS|K5TcS<*!i! zkQZlKRS05<@r`dfoU4wC6G*IF>tdTee^;#!c($HgS9^H2P0mYcJg#v5eg4hElfUQR z&L8|UhCl3D?SnAD7~Cs79P3C-vK+ke=luV$<>X;Ng4v5Peca$lS?mfqHyt#_;{)UF zxa$#}M%SCIBMRX7;biAYKTy_S(zcH~I6eQcW*09uetEDKwYL+oSC2X4L){rr4#q}b zpWbG4eR%r-pT242`(hAC>|Je=|9u+ne&zPzk3TUOpZtIhPwX5R7v}~6L@6{W@Mt!@~X>Y9=2eIXK=QDM_ zU7>Z8txb;IvmX0se}Vt_Ms<{1OmDX>GAa-K?n~Q~2X*-~o`vR!<@SHiKVM7*?b`F8^dQNRDU_xp-#fyOZ zL6=Gnya(?6VdKT$=yI+%*7%E-{RJ7_9Q{Pld?7&&XG<^)pgm$>wOp)7kH2`t-Iji7 zqDMk~W9m6}c2UqY{@wp~L_lvO=JCY##*W@zFrN27$?b{x*5Bf&V(|bUZ_hpgOsn_i zbjpjA;x!eF#9;o|&R6}d{}BJ+51Dl9#`{1q05E=xv18EuiG+>%Q_pzg?wAtR`jyfp z8svBV!Iq@+!Vw?uhuP&~i!7yAn4AYbo^M9IURS5l`O^uep~C+$52&E-13eo;aB$T(AcNOCw%9Gude*S~4gZm>3m#5Z9V#z~U#LwS#HC$Dao>Kh5j( zKDYyu2Q{gAf8j&I#pZhiFyQ0DCU5LhU-&*o2)@6nIOHdP!d>aeHUE1MS@jv+mYaSk zD_#5*xfUwnxYr&~-VI>aZ*q@X+Xx&9JLA{2qi{@(If{=Hz!(}x&!@~guHZezwGbJu zeqqqD@2CQBGjXGUZA&Gz>(gl4Kbu7Z(fio;-!wQ^1Zs8dtApzU>`U8Vk3U$ZqR}9eBX929oMZR!^Xsq#6uiZ3Ui333 zKjlP!Z2PE*NsB0D57f>#rk2ng7UKZC=A4O=QO9@~3ov~EYEKP+AL4N_r;H%U_0347 zJx09-6uk+?=gxl8p#83u+poFaxdOru#NB9kog#RXE%>b}b8?U?_t<7rOxrl#EQ-}PsklO0(uV60}2T=KNq`j0q; z&t^o*d2$ca^gtJl0g*rbNWjE@{J*?;!4_j5@X+KZ-#irLhXex=6V8Yam>9g+9#{G) z&PEroeGmG>k=~Q{uratXI%Dl~(1iH6^VsK*H?*ymxefsR0sQz2+=pfHWn8;s0fL@7 zvR1vFL6iKO6%W$tclr14c7X%J2)5=L2Z;4Uja|Cqn!UUc`XCg8$hG-s)BIM5C`Ma< zufyXQ?QqU-boyNT>e#p^JJ-Y2@58{L4lMjf<=}kU0X92qDA%VxKjk%eAa1Q~3^|9M z^>03RC$KS%J1s$v3m>p&PwV-F%i`!g7Mkup&I^HE{_*wv&6?{2!3SI_4y=--_ogFk1%uo_5Bk$QUq>`W*mj_ zNGtt|tqS>#CjE(OXUEkQrf_Dkb@hBtKeZ+%jSI6uJgI0!$yNlyD3NB8@;WSZ+Q0iR zz92V$&bAqd4|v9i6RbUdJCN&)4aFBMy1&SPSNrntQ$SMMi3q^=yyx@kh}S zk&SG`z?YZv9Zu#N400_l1_*$vv3cFYHy1~2qbDYOy3f?fc(nQC2dnlM{IlM45G?B& zrWWsU3TAwSA_z7if$dB~BpTt(cI4oH4vI^zn`WvvPC&8Ie<4|j<8R#uYU z|C6ue-ZR8I_ZWzX6Rh6<@?nDXnWrd~E5Wz+)H+7uj1;)}XJX8DGQ0!=GqSt?5*hLk zu%295Oibc__>sp3N#Tg5_C2rDKAr{|!AAY$Isoz=7nFYZNp$su16#JYH0456!!TuH zFAxmNm~paT2^58~cY{fr3zU5|Jv6pp#hjNM7kGOS9b%R^BRYOUgQ zP$UNAZKXTz)Z}FTsnN?%4IdKqXy{{)z;3j9Waw$FEkAm^_eN3e{DR?|Qexny-4feV zbC+X#{9X*pZwy&&-v5g^&S12~STE1J(_p_D9#-Xf@fJWf$olaBG9JL@Q=TD&5^;65l1d|S}D-B8n)$H8RNTOXov>fd*3oflWr!5I(~&j6`!>G z&=HjK>u9gz&!>Ry&AqvNtbYRdd=S_9kCov<)M$GCrTxr*SRDAp)=4mboy>PR2dq{( zj=RWUH)`{ji&itZY|aK;v~H-gsjTBdySU>;umaYz99aW>=g5ZiUOZiU^G)^g>n+mD zk6p)iGchI{i^1kjGF(XfOh-2LF+JA&-fLap1M`@CV}pIGtm-yo2kFjro4Y z6#n?Z=5UdEFnu^CP95HJ0vw3)N{o#6jd{<-5d`$!q#?Nr_$^QTD=(kR71#(n*5eqQ z*5=AQAxsqVV_z<&uc$T}V*usxh+fYep&}C`w8^WjuE`+9arBN!dq{5lK`7>XM1N9h z`1_SkG@qQuPSl<4ajGW^>k%(qD>@W8&JGjb)O!GYK!d+NV0irFjOb_T#_xHe z7oIdM{EDsA+H&4a3k(bT*&Ol7D{^+7mfXZ*mvX-n`TPF&u?RHbAw355OCyCodlu(x z+CF5X$;~(RSMGeo7u)W0UJUUiwoIn`M6}K*!2r*~>%`E>i)wWZD(hsWO|W?xGkKIsdAl3)$dYy1T(}tLps<;XBRwP zbS6*BGSNr~$o_1F;BaLzUsvp>(+2TgzHpuU=BP1Y`tDYbz43NcI(qsR#J*#I zE91!Q)8u@|X6r9a|KY{PqI-6Oc$S(tPhhSG0dBm4QNH3nmcbM@0O%75kOhh6VK;RBd)YYbY`cAiRry(QCXSUGq; zMW_yE@&QK~$K-)nN4o6)?Xd4X_rLRHepvq;dz~%P7$S{@{@}vJH+*=cz)wFmNLhjK z-CSXP=Rf!KUcOvU7>TYwD93-<$WZcQ(}y2xFE`ics@4xn2+?sL8W{mHJ=3mGHJ;~$I-m$@D!@nOTga~BVz+Y$Et4|-fc^*>+&kfrmzF(@#}ny|I^pH<{|STosx>X864Iw0}FBZmkfAp?O< zj=yuLKpR1DqnOP}2(sm%d60G!L4IWc3+~6-z159Y)dtd_kDn+}9tZ8>8M|?GkenFc zvCaWMt;5I3UDi*7Xc5*J*fi0LkUBm(iK4z^MKg*jCnt7fb_ZD;^T$>gcB|&eAG+@a zK0eWDJ$_*7$Gqrx29sk@G8e6W!9@m@c$Yt>v-M^j1LDlMX`b4g@tgApzl3%0!#N`1 z$Tkh_Y#69EX(9#4e2Wosq z$R`Gj-Fe*wK&OI`zl(mdiyT<_ktYDR2>FA?+(bTA8?HZWqvIS9FNbvHXr%A@L!U6K zOFMen?^a|FMO6K@SjQD=Uhyx*{pxIlH$hC2)L9+A(M)YWm@J%b4#o+*e)xWt_;uD9 zJ#>zu`M@hq4y^Hu*?{E6*66hF*hRwmr?@)zDF!Izj$J#^UyN!Qo0MRCqY$-gkNJq0 zH}ad3^vl6H$NC_+KluDp6>G+*_};{Uh@Xs&20>fpLoH8^UAI_Q$2grA<3`;5B%z>N zvu!gjc=h_T7@$t+c(e^0sI{)9F*MX_ZYQl}JrA?i9Qm~>#)CHeoPWJRLQ>ww71UB~ zj?-bh8R*U9vzNrx^Di}eAD#;r{+PRRI`Qt;M!iK$)bE~f@h%daQ=T;@egqGHMtHaq zF_z%+X|M4kzhA_r?GL#8HOH)Jmpq0v^3td4$*4Vdg5^&wV^XV*i?(^V27kV}{~>xl zZR&$1Pmo|{9p~Tv6gxJIVLOp=r)mK#{ilr|9o_`cAU^8EqC9r{a23 z4kkFn$1B}${HO)PDX%MQV++~w(MWFhaEo7$&6(qie0``T1Y?hF;2DE7`2*tiqj&s0 zF(cQH+*se;r{kS&6qGK+=(hfYd;gvE!HZdO;KgY*?cjL%LNUz#fOGh%`hZqrf&*YR zf#;R){nR=b@A@wn#__@J#>;V<3{LzhmlL+OXR{m&f)ahJVy>@W+Tigz8^)NnJUN_Q zIM~~eyEAB?4#Q2MpZ2p`Tzro*w&uie#CW*6561ad&NxSy!ujWY&E**J&(1%=^w&BE z#yYWpkBo4cYZ}o#V~P%2wB5TfVPClWzuqqqX7}Ij`SAlLQcLjMA2tXMJ%`h4o`bQ( zb~&N%o-UZy;K+|oc;cgk|H-T4f7c&kk^ge_`p<}h-*UA*Its=QXZl7=n0y7x@#g*? zrSCtY46J`jB02oTH;bs_&pB_rF(o|klK?UHmHy(B8+{ziU;d5@CcqFw$C2^Cw)myU zG2Li<;ZU1ug%$xnW)8cSj<;f+QyNw0I6~Sg znRnc&-|^QVi2e$_ITrUBSMw(y7l-_g&G^GWw(^raUoFTQ)m<{!|B0LPkFmM@`wz5U zKbPcU1fu6(<8rL!USIxE9)w-4p$IY{<`A3&0zaOfUwdGt9r2)GkjR7j_IBh;qU)AX zL)Ze#L!Cx{;{qL%fs(v4@=nA=%F`Z9xnrBY`QsiXYHik#-@zl^tz&H)#k;5V4vF*J zhii-h*ohR>XZ#~{?}5};jGV{#!%1f2wnsZ6ha(2CUg2g~$pj)bYm-9PGLO zXtv>17NYTU{Z+SEUH=3}KbUA+<2Xrl{SkNJ8|j4Mo|p;OQxtSIT5(QjY$vP6r3Go6m_lZ z10!QG8Dl|`uBg-)JwDApl8877@^w0d<`SF8z@zJ^P}9fn?9+gv(!{AEy*%h~6Xh>& zx=F-=Rp~3(b?P6$oLC((!^YVcTkgjxWG64j-hDQd--krh+kh0mrXFQJwIcP zn}2HqyeEgPxl+h|{F=qCUw8y8FZx%mg@#g_J66IhdIQ4z)1hXp@?x^P{_q(C^L>D_ zmF2jO9}{Gc>2gM|Zu9Pkq|X=!CNyK~ytXNbH;3`Oi;@%L8@xEh&iP1_%UHJ<_JXLu z=JlK(X=8&drI{s)U6f1KFkAzG%!<}Gel+3}ZyMURDtwMMa&SDi29_MvM#J#Pkv^gH z!oN4=>A$}YxpQZ#NcCNZ|SQe3mxM(Fu>e%3|c#-S}7(#lIo)?u z71Fk=#S;tI&Jx*+gdG}|odb09M%VRUBv#S=TB!~UQobFl%#Y(9#lz2F>l$>|D}adt zIihsEp2^2JV4N4rQmO0ik6(DM^6;#mlH)&&Is%%!2Xg9pT^ZoWu;n3J zYR+BuGm2`M(?`y^4S(vN@>6#AJuPcvGfw`Ex*zd_B^T9n&Pm1UL9dMpR8RkN{ZE^U@syy3kl-`^2aoYW?!iX=7LVhFjr<-kj`?ILPUo1P4f3_E zm}mTWp-YXP8rc=)8-dfwUp_vyz!*Eu=qXn-5W&11`^NY&kedT`^JDyn@w2Qs=Dz0z zdL8DTU$$C4;G^*noJM=x=Qo02)Gr>w>Dds>i`@ZVzM~6=>u+Yy_y-mozT6QpB?gL( z_V|BVjc!`|*leF+{wb*Ql5_LX>)*Tniz}NhjHhpYzcUP{c%I_R0xG}r9!OFL#A%P#?RQ8ev2><{<07*naRK4zp3k96i*k&xP zu=(_4+n%iXW83&|*%7xw?DCS|oNmNYb1eYbz!($Rnh#FIQj}g!3?g#p8qd?#sMp`+ z`Q$%<*t)0d&To~#&wRc5`*agI5ao{;YKwVPoFnqnF)#Yyz5EY0Cd|yj_54eIicxVr ztfx>*JuV*^>f0R%edjqD=NkI(WJh`Ke`3G`L~JFZj-kKVA{XK(0$XQmjT^xFq{hPU zcrpGl`gZRy3;)bU}DkssY_RV?5^Newq2XrW(AFaY7qM;?tzJ@hF@v^EgI z;Pt0e9T`9Xi$6_K3fMP{07mhgVX`1m+^bW8`wtgDnEj0EQRoh1`Tb;Jbd%!S6*VOy_XhOc6Ypnv^*5IIX(9aj>Gk$I=Z^9<&oG^#%N5vz@F zjbth6*1!CxKK@L+n;70C5qZzQ4?MuZO?lR6#d}IhXey#`R)w#_yW=wqe7dZhkQLM;gRt>}|9+wfgkw?Dbh{?-W!7ECX&0mT?Bj*T8FHXE&dyO~7vIH! zHw7%*C|9@FKC;4w*ZIQdENSIy-CF{mw>x0fp0V5bt%WbccxY&^yt3o(x<}ubiKobH zZFg;GDH6AODCULGVz_iEnH@hdQr1D~|7}^$F5ZvI2~028&O7$Klg= zHpuTOmk;P*itad)e@hIn`6<(XCR7YY#>P*$VTT^^USO~vv48te45jhsp(EjA4-c=j zxu&3Icd2iX82d;rY$p&rq>pdyaZ{GsGX85@yH;axHVDDt02gu=68SKv)Hna=^wS~o zx@8f!tu8XLru#7wHsIq!dDeg0jv;)s`*Q!cos4nO4MB?X9FR?9eSL;bdyH4Y=UCE3 zCx4B+-U49$%tz$ML7i^rjPcKIb$S(?f9zljL_Z1QSm*mxsq3E;QSRB>?Yzp5&rFCH zBnl~U#C5l(l>viMYQs8*d-xC)Yeq~C;m4)1*@$%fX?5?zoHdX-pxAp#rtI^|4Zli`dbv(4$mhM zpAK>yh;`<65E_3hpZqaQA%9q7-#@2QF?mLm0#I`~*{y#fG<5xeiR z_Pz2HFZQZOa`()4{jF{s29tJb;^trsazQrI*ne>ctM(%g0=~##Vzhf+yE`jBegV4AyI6v4?8PIb7S?}Sg%ls$o2}M0#)lVS z8$)9Ay<+N~|L7Yt@4t~956>F9R=@Kfru?dI{U;`PBBQ?eTwU}P_F((n1mBQt0dTK0 zn545HSd&dgj`K`e!_JNUT4Q&SAnDv0NyO1+1#965)so2rmtrEY{UQ8*VmWpWSbQ8{ z9q}E{MuMK7T)QA6xQAE`f@KmAxX0i6vlFKV6oO!0GiQ$p5i}y{(t$*0WbUbPe4B?>R%S}c8_2C>W+1*@JTs#bxDHetRVoPw6ztVh) zfx1~g1DTwV#^w)M|2TnGjI_5ljpyO11;<}n|Ew3}9y$uNU2>7DOs6&;6?P_?5o_im zz8tZUE)zq4H3htm2M_b^Z$1$9@f4+V*T8f!NN(aC zLFcM-Bj4uo=D~~b+&-^=h@3~qDohPlOJ^K7w}77;SVuZU&rK9& zDIm(vz|dEo0|Vgvdh z^PinjudSmNIn0Mu=H3h_2H0lp@!#j%xNf~h)lXH`<~==G|9PoR-JdYHE&9*_SkxTk zxb;uXW6k|?q<$Er&&hrpoP&zp3SmW7{&eVDc<=-fJkcuW({B|uuC(1q>b-z8c_x7# zVaWf9KceHaMsIR;x)X$Tk+TB>?#y8C*9u1VN$;Mt=Hvtx|PnXLpNSw;WtYGs5qR`gF!$%n7aL z1McxXwu=EQZ9jmouUiiEm0?U-$0`S0Pk%i2uM>Tm-hSy`AI9IZe6M?aw>-^%c-^t- ze2jnE?9uqUr$BaNNIQV&+R8EC{MPfk*&^%iXbf^S-aF&FFK`uO-|RlcI%CcJtiXYt zW8{)q$0BRCxs?YoW6=;_pHF|Tw~aZBX+wbn4!TZ zKuvJjm*E#8!t&u1eEG4&u0CGNX6Hi@+Byvv^OWw*#Z~V>#4rQk`@aDa3-1098W}w? z#_u@*Ud31-vffyTzwtr0k;1ar7~5*K5UWFVc&KB`coYSHlyCmuu7BV7i}OqTiA%F2 zz!pkutW{(t1*iPvn-1k_HW~q0fAziV59`katm1n)rg83gz#~`uQjtlbU{QALN_%~0(eaP`=df0IhR8+SR!N8T9R`EPH8 z;2ysZB{MMZ_%k=mTq7X&J}8cac>^Ov)-mxx-oW%iuN*rgNL4H_`D$Lwzot22iVcNz za=ln459YhmpOssvub=w-A?6Jz9>p+i+QQ{PtC8L>NL+7RUUqj2)R@t0ToICl_+6+6cP zz9=pWDd9nG$75_Iu7Z3tFo;^ykGwIQ98%QOk!eGPKC<=ChH*n)F-O_}q(&7S!(g>5 zP*wNn@o@Yf=;mL3{9}O4&Tt?O$2M%lMTy|p{WX{L{e5e75X9Ng@TtA<=WZQ-Ry9l8 z+DyU{%k+Kd`P_M8_ffX72BG$BN{fidym!|e!{C8KOI{cR$c;5zkmChLmNdlqX7l!8 zT-0u6;6HbEF^(^s_}<@uJH0<;lLeddx7B#>hOlV|qu~IK5$B1!Un7KaWRhs$TfFuocf;YWO-oaY+!&)) zfDhvcE;8&lK=W%A1Me)_!&chVgzQ+x*R>*HTH;eXQo&YX-7(WzK=U_%rp3%)jZ3{D z#5D5M-T(2=xJ6(*IY_BpELmrGAkU%sQa^~GfskXdwJ%GKqNyFyG|4k#fzPeK`WGZT;{s1zr82cUD;6lTTLM$HJNSoaUZTMM+w4>AhoUV?Rk%ODVenB+N z`&Cc;c>orm>=8T~GvV}w4sKU<^T)ac?GInSa(Cc7z{c`;t&y=G@u@ZnNKs@Bu;QP9 z9Vi3T3KdFYN$dXjymE2DIlje(XpuG!1qcJB6Ainq;9p<9SG@^$Og*U2VRKYPd^i7O z!yZjUH!o#h2GBU3UUgl6eCmW>vDGg+?RzotO%44HZDvg0pKHq&yL!SZ;p|F zFZ5$WzTq{0>-ud`SC1p+Vnk15xUh!}W&m#=+($S6ROJCffFJeI23@ls(AYf%+uzUnN6_>4UDJwCEWDhj zV1nT%Bi0v{tu!+SXRBkN|G%%Fu=_%(-BPK!OraC zGk($5R-HD5s!fhJV$~4Cu7m@{Q}24kfc46<)_e2(jXxSa$RkEzevmHK$gnf-tTXHc z?46(p+}8pefV84#)Elqf*hj)x(bPS9_b%44yhhSC0%Dp-kBaIW1+kJpwV%$10vjrl zUK{cKAVX&a_-VtXAHNP<{h_K@iUTuJspTSI_jix;uYTy`-jSpOk z6E$|Mn|jbYghtF!oiN@1vFN?yW8V3p3q(Ace+d{<&djd=-y!_G|tJ=lZTjyy7KZHL}lpUN?}H<4=8-DiS+g3z+CfUhq^GH z^_NUAG1i`cItJJIkKA)QJ=QO6Dbt3VFd7Q6lYa5A;d@tL08$i*%h2^3oaZ-%g8h++KdYyxw+C3*8o`1%IS9z@ia|}jG{`|BhI4F!ge(u{$ zFp3h)(EtHN*CCP^!vzm8K&=6O10Wo;Rlg>pygX^qQxN=!UpX9k@x=gmp*pr7@yF0F z`AM)WsqE;rX6e|(ROKMQj9ESF(?vfXYhuI?M@|g_zfxKgbA9$FHo8<VDWGVJ#EN7;U4xG`$8$2J3 zrS?}{-Lc_W96W%_&bw2t{OU4V)L^Wb8oM-w`R@S67a146=EFGuex7>stJ2jqdLkx^ zxCtRdB5Sd}4kBV<{F6(^9gp~Vu_}A>jbY};^>^zcc0?mTKEWw8NBZ#7YFxC{ zOkNwLSMaF~?##dTslT0n;Gy=bH3&$Nw^eR>?}(un*dv;;Y4tfT_?@mE=`sYVxE3+L z^x0Zlx9>P2zy^HB@#XbFUQ9n@qOEP58XvyM`hwqfx>`oSl=0G6Atp4YK;t;)q`{s; zj@G+q)@?}ya_wh6K<`mhp{!znKBV6v4W|Uq3T?XtG<;S{|>?hdq z&B}rMAxxXTE2>7}L3GzYXx-P3Kg#mA9&~-xR05(mc53iQAwOr2dNDX&#DK_yx^ft~ zs*4cTwqO1^$8S6ZJBHMi~dj3a$x^wyfaD~WE7(d&uq9J8;`tsL3 zX|tYqEiUG-I%M++7k+)vge)cYAhksHb|NCU2vYgx;bIf-d?vJli$<~8Fv z3&sQ4@#vdAArmihllYKl~GX%58JViwax{ zmHpKxqds6b8=%r>ZV}(>Y_YgF5?gnEj41a8CZx`L=$wJ*+>k=}qI>2=31rdC4|71=KbDR@73YX>ifcn9z~YWK zzY6>8zBBLc13zHJ`L_Qzi0II5 z5LuvYW?#8&z}Q^VoI^~2laLTn!;$Jft?vDPVlzB+iQ7-XT`hRTj&EbO6I)`8#8Q2l zOS6N7Jpx9u3Vb}_=5HVVyu`zW7k0{Gj>{*%nBk916*aHqjG6lk?rAtzC@C6q=K8=76FghkW0jL2VkSa}&cF)fY3{I7O0gM;WE9 zjuq|G6*E@*^w9acPVgttr+~`~_q9`bjxz8mm;b{bamN~c_kVo-avt%52%g%gXYk`F z|6=fm82T_+(Z>cehiX{x^W&J#!XVR!4<6@Kk4TmpKCbg31sYqdBmV`zVvS*5oFp_; z`lnjfrt$=$!ToP*jzSS@igT7GW9}6O$VImBYPXYA{&4#s+wgO^PnD2w!uiZ!j0kdy z>Jx4Bm*>Ua^OzW&t3WaihS*#B!Q8a8gGf34yQw8Ms%Y_kTaZ*16jvTx&^rl}NJu*JO!XN$iCov2jqemg(^Z~T2 z-4mv=YB#{(W6dG9>K^w9`;AgK9*lHsOv8sZOxE#xBK`sV4t_|65?J^H9s%ud{8|k^ z3POAN-=@Ls0UG~R%V%7|K^2ox!@pTyo z$4SIS$ncC`S~-f@~AStY3x3^8)f>5 z*#+prO6$fac$}+VWYJ}OQNjILfaU~3*S84R9De|e43EXa7-#MDkMnck?v0ceUO}24 z9%RKoKoEoVCVTneMaL)Mu;3>#j>{8&?K?6ts5VgK2<}BR{#bxXxf~fvmeFbCj8;j; zvKg^~kW##oi%-NsV&n5_+)>**fLO+wc}S^${OG46q9l!=`OY>ruUDMYajM0M4t_9d zWZ>0L09hHdaXlhRLw?!`g6$u6<`7R_hwMQR9~( z@^5(Hg`S(2c$9ImIRA$e?SeUeZm6Ay)No%WH3Y4Q=SS~!Jizn%m$7jCSRDLq5`A#Z zNt40!KmU1xjGrn2@Wwb0jz4dn;T~I@Ne&F?*06pSY7{9hwBe4I`SSvVZt*-9q+vay z%>3sIF;pL<_7*_I9Uo`ayzY(sHU_WC^#;g~zh{D^3lgJD7QHwDyjUS$krSX9CmhKnqfBem(ur7b*#QP5>1V_&)+MjVm zk-ie<>f8B;fBZ66&a0*oD5O4nGRXBOaz|x&7xR1m%_nXYps&y_S89dTvK77OpGfg* zytUNx>*tY?Kd9d1r{$g?R&utmCez+UwKIq!=U-rI6)8B3Rf>Px?YSWD6LDr4rF^yP z{*yPn;Ft*BJb3DZBzl+G64bWxM3B9u+cNwCmY>|fU;N^NSxy}=NhyEi%weB|rG2&r znm(3muPSz8loKA>slZ7CN!ilMI%p&S<>iK(DoyTxxc)niKU*B(cl?Ia6EC>==1c)2 zpC1fnKG`Nee49rwW6?25JMnaWBh)vQaS{fN)EqduZy{me$xiI(f|$AdA)x&mf9Q2W znb+*KRe>_4x?ZExzWFs~`Z?E)A#Kke)+ZnWwf<;+iw}70PG71?yPv33&SAOCtvRjp z#HD)<2TJp^{XsI^XRL$qImh?65IY224~z$^ntjKTx#7J(?|=B4YkVSxVRui!(X~|5 z&-Qc9>BqSh+snau>#efxQIXG#f*&d6Teg4FwI@WaIq4%ofi zE7Q_)@xw5G;bPB6kmX0BOR_HWUGZ65XY0h$N{5)01Ev&sCJKYULtF%BPJ z4=EEBd~7`b>=GBViCy^b-d&@~@A{8@dBb0r|`P|L{-0e(lfx(XU_mQ~%J{Pydl$@o!H5?%(;{uV4J1 zKmYpOzy0^We*gc@?jJ|ikH3bVaS@xCZ~PgnEI9Mc{1|PF%C}qzJDy!*SVYe_ByZO$ z0*Zr@&iYjF@xB{~`V-66bYy4S`y;IDW8kdA*W}3`8A4tM`O&9YH`Y+rZTn7?>)h#O=CikR-R~CP_2;6Nvlv~=w4?W$egnw)M{eyK z-~1rA$y$2u1BfhggUL9=fj@`9`tuym`NuBG2>GX=a&6}x#<7D(Z=K_ZW#%f~j(PMQ zWc_PP1ZnjfW)Wf-%y6bg!n<%Vy#I(TV_OX~nZhE*Hu&u8L(%5iU^C~`RQO$Npgp=M z#E233Ya86|af~ni@D4>F0MnqIf`)_l?buF$$+VTF@7P44Du-Y3B*Pig&V)`!>Jx2| zDls790!;ijIKdHaJs5iWh`_!Z45C2hi4t4=W;0Z@Nb;3hvhhcXGukURIEQmeH_<SO4wT@BN(3m9b)Q0^lTPDU5@B{?fnoZ+`vxf9YTR`e*;l zKmGM5{`eo01ghWqt^eoiZ~Vq@e*KSs?XQ3R*MH@&e*L0wn?vAOFYx!rOWhb(f6LlcME#wRxYhXlp+=3~~bHEi?cIO-QWabJGdS;Qx~c)(YR8}KbLeDjFhPsE%B5yTR(z72_ZEP}{NcA9ncV2cuNmG`L=LRy zUut8kxt2Ms5GjV7q|6J(Ri)KD?IOG=S|est*3M46S^BR3YM2|Li#%&=MncOwhMs?5 z;ogUlbXK@g%lAeoHudkECkNKh(4X^9j*iIr^|A=&2fq|s|Fi?eoZe=uC<4aNb-`pg z>8wE$#w0qnef;dELBNs4!OrAD* z|LQ;aYhQor-}#eYf9zlQqanY90+P7?-{1IqUw`Mn`@3Ji_1Aw}fj33sv)A2tF#m8i ze>>^l+9)F9#f3ON@$+V*lOG=9Sd@y4Z zA{S}bGTp~submf>^NBVhWyti`8GGjGnLPx5$oWSUDF#CwJHVdnUzJ^Fv|AV_oHQLL znzHstzvyfx8-Ikek`e&R3(^*2^5(hGnk~JKf0;yjP#Ez;EBdQv9LVh=>|>FP6!IZ7 z|M1`blQChAZ~n>38`i7?yoknm$H0E1d?z!iDc%GZCwC@H`M+Z}r4;uiP$+>F? zZhT|!^_?Ktqf3wug7Oo=%=#)%Dc!h`z#il^(I2WqS-7IemVpKjas210ckf455c zRpk&L`sNA-a^{l94k^5`VDEh9{dCNyPTJHD*~ILp#FNrkXveo{^m>Je4fy7gnu!DK zktH(#j{j=&iRlH;80kYy6F)Wx$S12XHm-u1;ln4>Sh%PUZ230M5U1SO>H{ybyzFB@m-#<_aA{Mke%n9td$2HL%6SKm%~Jwkt{;wI ziao5TX%bs`)<2WOp z^oY;z#Sk_EJL$B2`4~iH!Tp6*SrU$8@)aTVM0Ie6l0CCre^3z=NYRf?)@IT08RuO@ zQ{BfI5sfFha}#gXN`%gdWM~;fd)5R))uwrk!=PI8BRZdZ$R6iMLS1&)ig=*&`7NKg zeQf>07K7n3V;C>|ii7?}4aX?ch+l%pLULU4WIFzU433zd0%}f()*+6$(m2Rj56s}T z6yNCa8jXPd4dAgvZ&Q*R^t%7uZ{}sppvZ9yKP&N*COrC08;zoP=X_cMJz`;O!NoT* z=Iu+b$G_KVoMPORK1nh@ZFJ=aSS~&OumQ_41TXr~)b@IoSg@b|uMeBy*Ua~MC4=7= zjt!{1=GReu{;x4Vn}703?}0NnvBn&;SK43;k0>(e^UthACQWjzOo&L{aap=H+F4HV zvsY{(RDYq!ydziQ)7-5)y!~SVqLVZCD7rP+pn#F%td4iGOXhe4M(kT+vNJ#bI5)yu z!zsQ#SHdm#kN3TXL<(D;f3=?b{i+e-uRO!K3AMCBW~;!+BGV>wmkQP71iVmsk9`E# zh|~5x=;WnyXtLQzxkwIt+o#GhMwjR>_^M+|jioqcm!*Ud5>~Xhn$Xb#$Qw&jn@Z|4 z9E@9l&Xh9hyh5C7QJw6^$p{wu#J6(nOTc7ph|?~GJ+py*3XbQ0#)IB`dV|r{LWPG& zz+Ka(WGrhXtDJbuvExsE_w{4lS}m-5lx547jbn~JavZDI!ybI*__g2u-Er9!SIC_7 z?K^wn3Um4L72`Kw@uKmB$2@8QN?9H2*R357I_-geoq5KokD^xlfoor1Cq@vBUpd>Az%`jQjh!_cvTDDm15ZET1j zVs0~zeLj-Srvu=nphoE&1sDSUgq~n*Ad;$DPmb6cat#C++yIJB0^$(~p4msBa4bm0ii}U{M#&6E)me z&bFhBUUX+N$fAc7CpFHO@`tVuE@5drav$!Cgw{o zzjhXE(@LAV5cH>-ea{JlHKh+Ko1P&dsAa{Bw9G9ekpf5m@SR^|MKusKF{XyCl%96d zo$P?4(rWWI%y8nQVLL4uAJB?k{A+5^f@=(Iu-DtzSNyC47HAYlB}&!`vue|5Grwh} z4SH>%|A}8O?Ky6BiEUb{nVk4%R?;ukI}#Ic1dY@BK93PTGt+NiaG>%7cJx>>3JDxr zjW7M?jP;KaZfex+KTY)K$9H83I!L^M;13^hGq@<~VjDm<$3%c8YvhNzc|^_pnemb7 zV$XcAK}J;GC`cE}$pb`+4$O_w9f1wj#v2P}7?&zf(cJBLjyz7si6$wxJu(wrEHWTZq;8=c}lGKG}ReEQ!y0v2&3U zGCg*uK@$P`+2@!j#0_bwA~_$o=@;u3f3l}G5a`V7HL-d2;rndtN9zgzd7n5DJ@#`s zow$uZzc)YelM|1W$p-|JXJVjl=2ms{kazwH$GNqAF}kl+B{zJdr&lh-r}3vMhC8j9 zjD#Q{h2Wu_pp3&R;ifR0!iWK=muI+YVs;!Nvj#D8m&hli;#%a{LiGA)B~wHIMRoNX zHhpd{pE&>NQj%%X4*)|{FueJjl}LIuC^4LO8&}O{29^Jq5G~%8&*n*{#y@b_o|W^$77p;1Q**ljvo7UPu(N9hJl>qaPHQ6v01S2IVcrYQF;SW_{GBB;!lCUGa0HY0Bd!cS?Rx#nwa^n*5V}+9`Gg8T4%5Rbxy%3{sG@akq*< zU5q%Sq)FB>LsMP5Gf#csc-J4kVXW81HXtbML1o`B+Q%Gq#Q4Cw-Zl=>-EjSBOinB% zrylt8x4y|2+mPi&X`HmuhIZEJr;PW#-aQoX@eFrIW+!(f$;(IHm+2XEdy{_4-( z;)`u9*ZX<9(703Yt>?UUJn1oyj)*XJY4EIFvu3>cwZAH#Gx_hl^R98_Ro67kc<5QD zk7u6!6uF{5MC!Zx%a<-2uX)7_?JvSN-h9h=+dKY3wTvAvJgU3j350Ru46wLERg1x^ zT+vRBq8nTA>NKhbxJR~e$gu#x07-RUtf`p*j{~XsmJ?#>;fHOD=^tm%-u5B7F1~UT zsosW{F(pB-?8$INVrx05#<$%*F;!gdFdW2+N-vzU;rU=os^h1iz4W#H$*1t(8$^7H zJz%`Z2E*DG*y}aTKTF2;edb^BKmq{iJMqJOD3L>M>=y+vqv}vZlK4fRtR@k9fCZKYcXs9rzrmMZ*mF#1MI} zY5_Wz7~)PY^6I%+2OriUhL!Uz#KkLikHcSf&=0)WhSe_I1-bdBb)oAQHYa}JP}t$a z(slp;FSZ!~ePaoPqPpYn4%R+=@szhskJ&g5diD>v*k*v)X5%B)kAt48^^U~rg@ssA z8=H)I2nv8d;xOF{Egj9joy#GlCb19P96`;}hJHZD^1`6N<0TWe5yMy!K_p~tkUedD z;i3;*HuQD&Cdr21V1!fiFFsq!zT<6qEF$<`8*G~uuKOP>TfkV^$1}#9(aPntp%7zy zlRS0Hff1atisZr~+ep_xyVz3=bV}k6R#E1;Woh1~QKXr@{hRa0m~33I5>&Q*l1{gD z{&9fyhbc{rj!hM7b_{cL3H>+ZVUttKMv-&2!lCN_)ZH(D>2z!KV?M z;4&V-@|@P*b;(2m>HMJs&GGp-l3d$<(b46Nj1hf-NdzJK`CmQ$5mH^#&aQ9}3!Jjo zw7PI6DbvWI9b=D-$GFl;%T7SS5~&@f-W_G1%8omz>b8%L3iia~;(yxUt4I`+yo`@3EZc`joLVVl z1CKf7@6)>Krt%U+E~!agIWeAWT1Gm)Am?1vaZfh5OVRyA-FCFW9}lSVj~#lztF#}X zfg3sk?kD`7^w9%QuPGPeLu)R!{FV^mAgveZ?f&IUbzEmC#!ism}9 zDwd%_;-dm`-S3Jau_LH5VFTrrzmC6QbKc?gKuyIz|T|~)U<_~Lu_`J078c*)|Hx1q5vj-7V;sOCKq5%yZdxiGl=X%Mrof6-N7lLYK5A2cbh$r;;kJTYUUY*?DH zf`XBa;kHO#OC0FDeHjxCm9`c8qWk;{M}*1v)j#KQIh+eaG@tj%Kp%6#LL)9pf#FlS z#EU-6e27^#%W!fLJNVCZv9$K!s?X@y4w&z*K~Iug#DSdn4HzMUjXx2>KLZ&|y6o9XFmsb(P5+BdpXo32pLR=YuexIaP`b{oOkltJ zkM$R;i66Pr0mxuPovi@P;MDT-PyZZ3m>$xTZZ4x}$ zE4%&%2=&P~L8B*~8X@Kx9%ute9y|I^|CyT&lMXtv8XV4`>r!;`VS*EM`Ue8CE?G`&hu{cRBSCbKb`0tX%P`Ot5S^tT>|0gx z=9w)e3Oty+RAi54W7%EWwuI4O1>2*_u{qNQV1pb=wRbF#MYDa;?K84tY}$L{_+#BE z#$9ZZn98M>UpdaZ;H$b@Y{@w5v{T0Y54@jw$gEtsV!Y_NKRaIWx;IX~V(pX@P8cT~ zcZ}s|Q?9-4hVija{-1H(_1Eibp9hSmJn=`z#`=mW{DXx1q{lpBeB|Swvd@lxa-CtI zf>F~LK#Rt&zW90Lz|Av%5aBDYpZWY3$CfR3k26j^ah#>Q=ejJ`9d9rFrRR))`;T+S zc6~i|k?uq}?&zb&%2l(kz5T+AUOB#_ub#g1E$58WPdUjZPt~1l@BPp}rjI>4$9T>& zo;D6YbeXPp3@`TWdQ9`QGwyRK85v|*%X#9A* zM-)%o1|$<$6?|i{W&GPN!WI=gZwhApX;WnfEK2M}erkhnOZbalxXNDn@*dLM{9_Wy zk^9U)Nm(Bq6}GWDtC1^ckr2w9>`V(jtxTe5S6tR@iW(HTV_ofiN2B_2)<;FNZ|)?? zh>ssiM!qgAea44q)+5Ib5t_!6gP0w(+PCb@taykYU-(o@H92K2RlOkL>+G&e)%oN} zWMAm_84m)IH&J!($2jn34jk)GUn|L3*|lxg*mB|BW9wC0$ErhCjkU+G9*dTtkh1S1 zH;kJ;dCR!_vU@NpTftkpcHsrLZP(vBwq29?6-~*xkbmmC#`fEHjjh+|IU>**L=}+T z!&&D{@z(%bvUbTh@Re?$6Gv5q?SsDu5ZYFfO!kc* zk5P;c+*wIfwk=}w+G=yd!2%Qvb3p~~7^k$6K%4xtN3QXbvGhym@TdikR=2Zn`yfRo zHMT7oyP1D&jr=dLZzHl#?!Y2fsz44)yf7jIPYmak_#z}d>)ON9~`dhk;<*7ex4<>f>RY`saNQ&s-%P^RWxuDke5MZv^ z2EIna0b|zAs^VP0)Qe-N6Ig+|J*UT*$W z1dG9l##0nJ0$^`-$!-c=lzm>wSxRC*jB0Je%hlZ5Uj&S`AY(0}@f zw#vk(K@maX={xi+AhWd>C6`rmrfK1lVb1K7oZt6M7*YTx8*Le1U=#&dwX*`y$gIm< zkDV0pD;A*q3?}ve{E8^DHGPo|Uv0B?u7}`rRfN@aD!tH@oI{j-^`TSRo#LS;j~NHn zl_2>?-XOut@lRydBhkBC+83<&gK%^J0+$ctjmw&;by!MX!@*XfvUF(gH4Z&+#q3ST~#x6T;^xyVXGmo}Q%vl7TbgS^K4*~haUqrRVceVo|t}FBu;uy5PTTo5$)_@j@ zB&x9`_R7U$uSe%mKx(<{-nx6-_Q9LSy_ejhe%L)$JYe-$fA+?)XmxBNwC3UK$2Ofu z`8)_PfqFV<{<-gVLl*~=6QBQHYXHSAwEUnGvWj1H z_|&n_UbQOfUw3eL1}VqV8wKm&3SS6}7eWKibThaUMGm=pq~Ifw?W65v zgva=29$43c2DLR}0EoDv;=O5*iPbqCt-zy8vWpF9((x2yYa@G$3>TX&pG|vd0+MgH&TRO6kh<5 z#X}E0XgudxPn&H2*Jr;lK7HLM#)flh^;l!?N5CgF|#F_j;-#RY%Xi{)QwUDyJsLt9Jeq?+AY=6w)U{&T2fhN7B zI@#JsCt34l=UuzUciwdQxcfVL2BPik(gnA5HKwgEM{|;!fANSJN@f z`)HAJwB*QtWMNX|4JRbd9ri_U3~WsGNaKHq>{O?TQ15BB$O4)h3axB4Fk~EJ?*&Q~ z?+eKGi%;U_OUsMq{%@YKcq7JoAb=?b>R>@oY5D^DGdejYr|vJQaXLU@Cg(1)v;pcd zGGQVo|4Ky-`dx1(u@6tL@H}%fj)(`IcF{yiuc*X6P52Xzyb&$uW@rb4TCF%mLs5}9 zet6*`4_3yGbmeE6D zhQOBUAlP5`H@Yf;o$PnTBH)8*xg39(j5+=gDXXWsvP=B6{%h{`hv29>7uaXWnlP2d z+?fCXKmbWZK~$NA>4yE5QPSGnRiR`Kf#%Q0sH%HECjw zN6sE8ZtszGQOg}8KpA9~`n*T{L?(ILr=?>1;V}21W!zd__C=_%fQyt;Hx4u0eT-sE z+Mfurb;8}`jMEs-Yuo25oT)cHo>F&8U4eofIRf1l#IUo_p=!g$H)GSL&Yt2VxyG!Y zCZs3kLOz(jNGkHAPDSwD|FPc!W+(<^tSo(cMEcG@d_HtW+bd4_82>WXrI#QYB70#_ zfVO?(DVieKrWm%xUW7jXrrXGBxNSE$09qE@NnbT^waID`yI@mbO*ed)2y!ywy)lt% zn(Fqq#-CBNv9sFn_$J#^-TN})1}GvEXrC5YA3+r>;%eK{UM%@-wIol>R6FzIGY_t8yTzkWfZ@antC$Zv=>DRmz}>lX=lG3t{=gU8ptkzE-ut(MA5WO4ZN8s= zSi!fjk8!^P^mVc-S6zGEWdG`Gt}_+vP5W;29e(7WetoT;O}AWk0%GHC{XoJwZ~4>o z&7_fO*Jn+Pr$oS@qozWY19N*y8#NYsos@ad^9cepcq;jYQksl8V(gyD__K^TvF3AI z>~WH(J+_$C)^dVX)86ABxzf$>X`OjgVaONkwtf3*Y{}VA;SmF|3EKx(#w+hxtQTK< z{M&w5=G)I6+oIsDkZcdl97siL8SjzPt74kwABa8Pwf9901&3@_&-h5Qi=$S~6Md+O zH8!BornF4Alfh7%=6&TOJtsxRL*=SgapN&wh?R@7^s)Wa9t>vz9BT9@KB|L}brCD_ zX%^MGlR!Es&E}9ZDOz5A#`p%?Z^~-4*aPJ`<3zG$h<(#m=|>0lym)o_JFi}Fv5ly< zTzKcW;;%Bd%8{||q%~u&BXpN3;{~GZFJJEg(;~WiO+V1WC&nsX|JYA4RG*rwjhzyb z!NimAIE_4#ChKn34QDO9K)C(p9sV(goNQrW*SK95-0t{_9s)d9Rv)=?EZ?+Tc9>0= zk;4=Nt7Ci8x-Fh34Kj3k$@(1?`g++vi4}k9Q_IeD_@oX|&wo`MzpydmE~)XK6EQ_9 zMm}W|w>r%(Az$s;{6i+(ex{?uLI@t5OI#wzy2wIEQ)n`E+D=s>4B zaV80*Tw0HP>fLvSnA5~={Ijf}jHU+r=ms;bx*O@b7R7>`K~wY z(uu_7{)?~nuG;Q7`R07|0P8&wRNd~YDM_e`FRP#JW1{2NKA{$7+?S%{kRL<{l72Yvy6t1zd3R+hYSF8zN#Dc{@;g>MwtwqfSN^pJ4A~kweA6=$T``Fk>R8)+%n~y4-jEF@V8|{T_evqzr3E zhc<@9e6GqwFb$sS>2&v7j_(33|7@T(8B=NCYh_v13lBG7lrnt(V~Z*WP-`KBT`{D< zGpLc}T!gU&MDN|IT+DLnh^51a7a-Bj_-p$fOKS9068jV>_q%JmgrH!F0WV(=?AOt`y{E_AT6QIR<1bX{(z77@u3LtUN(XOcHXM8uzuAk%=D7<` zh<{GM9?HONH6{!T+>V_)^vj=DEVxj0SUkAfjB0r}F8=oS(sJVQLZ$rkf)Qt>vuIp>!wrLrg3DLvjjzhZs`LCc%NtZ1 z>2A>lv3s^|9eeGyI%XxiZJWMMDl9GxU3Ja1)@O6b{Woii!QJEF`yU9&g|EZz(gi)r z*-v`>c;HFLPgsBa&i9NPZn;Su=?O1)!66y@9#R^;eoh0Ezlu+zB=2>q$mGViuR}L2 zzJT37DNbmH=k61rJt6-Xbz2hHhM)n2Jf%Nzvs<)_V?Bh#a2&1&!)@f? zc^57BH@=D1pKhpXlbn1ILh`72;fo>IOR-z3&bONrduh${_pIkR9r#fa~G;K&ZO5(miZQc|9^=<1mc3rcDYrHDe1t-1DjYUrUxAL*hpZmUHq5;N5bv4~-Y|A= zGl(T~m)jUuzwbKz$b-Hr8}mk_%~xSPaymC1U{7jdAyE|5*wgR?b>02Ox~NzP-d_ul zUc_XOTYc1+pEKq;lZnSUV`DjX)GIflgYEuyo-!6}%kJc0p2UOfmC1WMQ96tr!bgHS zbH+9#ANyjc;OERfvauKY60k3kWLwgbN~^qcE40QaBHuKJER+$^hGPT$Z;kk9`^E0{-)IVeeY`l~>ymxH$siWRYkTE%^_}wrh;or< z2nEx=h&*o}bNJ={ue$Z|%lTKu@gResUf$a?wN>249!gcvLBFs~rER~!q+X?ECVA0Y zziqcn=Xa9DrkJ%eB6Zv&fhx{1mB}Q1rJVYrY2sj>n{PXkHJNnF~^#ynsMP)bJn z{u-+F!Nvu25h>Zq&ouwQ7R!2);r!3VbaZIzReI@v!pa4Vsh^!ozlBxb1~WF$E%VyP zDXk%<6;I^Er7w|*5l_WaT2OJj?ECAhqNGXQT3Q!N)3wj_Obmt zTgQ%@_5R8Ubwq@0dy3xp@N8c;I9^(o5cKkSh2$Au&O`ZQAB`z#e7D2#u|f$67LHQ7 z0+yPL#rPHb)A0`nNtFKMEKS--#|HX6PyF7@eQt$-<3zgGP~ zhlYTl;Q5)OqLHik!`?uuu(uhwj)i#*+p=K5z%4dbV?25G3tKeeQpv^2S=-{``SCFt z_?BW*xyjjcn-Q?Fv|3>UKqUp}9F^t08vJlbnDCV_`{SMIj#86ENNUZg!{J59CGne6f}Vf>UkAU%8KR z-b)H7H0d(o0IvAS52rxbB@#?z8!6m7ZW(uhxa?r>brPQjiTR&`Y z^?3R({Bry)nFy)jG~n!_@xbGc@x`_%W_yt?>@kcunYifUOD5JndZye-diLBmFaEZ^ zHhacIzv$cFwVh4->@!~Uzn(qO`Ks)P^~>8$K4DOY#bdh5*1|YpF^$n2raQWf$^` zILQ!0L_uS~7OsC_BFmBOi^ce#Y^5^OZTs5y_>VAp5<^}uBY513NZUA65mLcE{E~Gv z?jw=r;*VPAvGt+O;&*JyXPIbt?`W zceLa=%MjNTf1q}>}TEfqX zMYW+O(Q{fz#unRnVC|9#73|>0esr+3&^|IyXZ!MIPMHzlV>^98D%&n5KDb*Xm;K4Jfq^TOWTlF71JwYs=m0mt1z$_{K$-j=%kfe;eQao_^q{ZTJoIbBE*ZsidD5C8ca#y)%3Gc_giTYvDLaqj0Y zkS%-{LI2iO^8@er?Xlm!^~=&~|N1%a7@z<0|0KSK7oGACe|3(2WqwT>+J5xo=Z-)5 z^S{%NQvJ#};g~~17xwSH{R89QKK(hh)j(IfDUW4;MvL0Cpn2e;Q%dNgLz(tz<{Swd zWu*6xvt%#~mU(k>6AfIwY|fh~Ql)6!&hvXTCXl0euMNYNy4%=*sUo^h$<$^xxR0?9 zW_22~tQB%h?)k?N12M^$$}H}Tk7@i#&PCX)gX zRWeyeC9gK83SK>H3|kkP4M?8;!@mCTyA8*FggBTthzs_Cv#wt3X zj0u3I>o1H^bZk?2Vka*oRSlIoTXD^8a;3sf+LGhn4eOwV&z5T0Nv`k>9sHg+*27n@ z)4+gZ1Timd;Zd9rJRo9Xf=E0_imEoTWUn^#Fs);CG+2L_BS4DZbWECNgDC5zGQBIZ zJ(MICT&Dp-j9T1WkzxQy<4M`l$V$#vyuq@?G7N4!nAb+QtYRQGJ5UF!1=g76vZl)> z2t~9FcxB6RNyg1eKphA0z;t_L04X9npCyr;8~_TlJ?PkOxbdd3|9&}9gm$KWIdsvV zzc)TfDL&~FEuBoS(=U5AjQ64)sIO^WcC}7^DLAKtr{9z*uA>h-bewYX@y6gQoW~#g zfN}Z*Pqb)n{^r9U85drBv77w{F8S}cD<;RUMS)oLU#Zpr>pX~7=iEz|E*Zc6vR`f! z-d}h9jpK@IuR+y|*+t*^uJ4RnyJj!P^scwQQO}yYb8OnUkJ~7HNk1AvdDTmwKh{VN z-FtWJ7{B#bbm432Yaa_`7tE;IR&&9m*hcN4*;jWob$f@|NjKC`j8TKa_0q^Q z+N7kyI`0L^D5S8x3%_mHu4RcUFKE0J;rFpGB1QeliG|~0EKsXHYE1SNb0zO_fE7~b zekz~b|FT_k3Lc-f@TMsz4+4>o$uT-9@i%ST)TZ;Ae9z+Pc6SQ5Uc>bgA|?AsPU}F5 zeJ)5bHu_fbdvD3b_A+nLH7BeYcYIlQvq{eRLP5A|Pn~<#M=7k>f9|Ub!d|uxA7-4K!s}5T|c5K}_?$Qq`Y`bb(p$kKW zi*S1#p_9@>mJfaa0vTUefmc4ZuYM3J^G55}I{gU6%FWAl2jQ}@OBWrtU3c%e`=Tx5 zo@?&S+NXZ;v86ERcMou(x=ve#xw!tswPPtb`XP(kK6|_QKFKBo$*ehc}_O+~|Zj!2AYk+B9!Y*B&c6L-~ZOB>?C zV-Fdi;DMn(PLb08k>er)Jm#eJ5vFDxG?3Tcbk>9*vrX|y zRt#BbW?y`X#b-xS%EX0rUYcuK|GAKc&Axk#Uu5(f4on1)T9wFmYo874$Df?@GMy(J z)}(3A4<8+M#KC?&?vZDXUw!@C$7jy_n)vvy1HV1d$#va{^w>w7HQx9e&(jBr3)d3> zSFBhzPCWhyzkc|^4;;Vpy0?!@FTYAql67JUw(^ohi!SFUnm|O~xN*aH_gh{$jyP=g zm<#Z`tXZ>q{M=7JVLbJTj~vf?`I~i~bE)*2s}U>=jz{DRdS3)#f97e&>yZ|-hnBBi zwMw$Rawy~FS7^%rggbPX{{FhaI9pdwKlzw(?&mJB|FhAiAG^8Vru*djhfY6foOk{= zr&xXXk$VRnc)&RF@PpcU@2|XCAFe7V8#k<7;Ok1|R}ANfbDHEdqy+%Pkii}qa_pkL zb1gn`K^Cu%Kjuxk(TF`{(T%)01gy*%2)g~MJ-f;qesAmwvQ5I9VfQ*9l60LSW3Z`p1-j}UPl`W%7L4gRaHWIG(F9B9 z^#Yt>f)_rO)Js~s%>Uv~`46A1*E8es#x+2FJa$v|;_(cdSkZNnu4AOp_OU|)9_Jq| zFM5uDbM{q@+0v0Fv3XrX-se4Z!l|&`uwZpy@q49?Bf?72zrbVDNCM$%)`q$ zhmV_hfK7sOEE;;)n(T$8twg5tzYwvX9IA~Uw6N8e=rdhRd{6exz z#nB!h;ess#3iLl+lS`!auIwUC5_;~ajz9c zawwTfU6CdUMO&DE5`+)4KBpc`&h7GHc=xa9#;(3MBGx$?2Nx3ND&2zMyj5+>a^zrj z0FNxH!`eP=>19nsShi8pheiJI*dqoVu!82gCPAN(_`)?r9FmAHvPA`IiYJZyz!ory zkzz#jX3h!*p`L$|DWROl;=5N($tWJ%OJwuwuk&w@C1byoC&_#KTPOC>%o>gzMJQP< z9m1wfKXBJG{=`OnR=WSTIVbivJouQP+dVGIezJ}| ze6859k4@fxDnQq@VUHumPz5RbC9>yi@es65alM9$;9LPATh5k;Upxh3>N5`vdcrUj zkm{jembws?SvrPd9djaYFVP@@cw-q`DQz(5M35vWnM}ySB3lsk;@}&b$WTMZ3bC(h zIvZO?3m@D-TSsbDMC_9r{MWyWW2OczMB8-$i^ey<{hbL1?s58|fYKt(A)w_Uc{1p?4&Ok>}sg6r<&V1Rl}~%m$@+b#@D=J9ChSjmg~(M-}3gc zOLy2f0~#rJ+;h)(`D@kV~xEvyL#rOFxSp zE!p#Emx^1`!yfM!*xQa63^FiOHKzNYXls$t9v*)3hsQZUI!nevU7^xZ-7k{o!yZcdD><|zsr2d&k9x_;JI@8$ zq*{CI`vO3DIP+)bX{8cN0jg~dM9EIpAL^13NK5kUH2MjH(EMveZc9vis&`+eUkBy= z?p!(Smp1FGo2yK*xcX*|9>RO@v+w)Mpxohxj88;lY|kG}*z;oBoEcZw>Z02bzk0}6 zT<`JHv+|Y$BYzc)N4)Aw*H%IcXxmM?*k)PiI{2GSyqu8eLf4H8FDT+4Jb*Vmc>UP) zV;gnBYW3J~%9?TDPwhXJ=`Oq+xje&lN8aMG=}8;Mh6m|l;|^!ocC!A*7v>K+;9$OF z!{V{|S^JNDe`IgtuGn|^SatA9>8~9JJah9{Cp#3M6w4EQ@%S?}_+EdDN?up%uD%Ut ztkc(HSA6sATWs6+Kp~hHL=~2Ucq&gAf2{o;6!Y;@w-tNjaaVfuKOB}6k0RR- zwli6F>EjB=drQbTrc#oJw zW<-s*xhPkjtF>5{(W?UOC=&&P&IWANx?TaDf^S|%Kwmq?qIQ+oz!FRoG9C{F6b(eoSc-L7%iB_N_k`7M9W8K=-<1hc{)j#lJ z+q|8%l6~hNymB0Qs4mP21ANwBX09_L=&m!F`ut}e1G{-{o%SUUpK(n7Sgl9}cwg3? zd-LU#la3Z$`H{#}WdFgZE&T8k-dU%gFtd+5A?tPOiATd;P`=jsd7 zNEF+b1p3HjHIumCe<5KAZH=Ox{O|R@m86|&*)N@-O2y>FZAr$BHMG?Qe6P7mJ?G0_ z|4`7s&p%ans%4ks8FqaBBcd;Qm0!NAUAQ1eH+IP>-O8I-jq}JoMoY8&7%KPmUvw zIx@aX7*^ivsiKnin3)$Ro_PE?@~ET6?YG@FF8un17|07bgF;X#`xvP-*cYW-6s`M& z!}xCqEel`9tIjU@FS&^>aPa#Dz3O<-&u#VjmssFgL}1Q_WZgghmX0`T=R+)U-I++! z+Z1#{M}|MYCn8q8nny?D0-9dg$(xcC&qKGi@Tcn^lJvNfBI1;ZqoFth7$s3e1jF=+zq%9TgQdl4Yq;?#@E1>ONnZ&e>i(#kjtmN32qe&W? zu@7v2G6}B$Yw)!VaGO^)zOQ`^90VgQC{>V?kvi8c_!1DETGFYyecU}h^07~jr~kwg zQM6SyPkG|w^!3r>##g@fjj?puQr(qyk}j;xp1tIFOM2b9y`(Ej+h;)Q0ESF9*?~T@ z5Oe$KM+x>>w|?AuhrVu6!wsD*AQ^rQ)4s#U)eHpkI+Gy6-+cLt#-ktcFo+fJ7$5)S zr}b(0m;8+vdq&@DVLk7HuZ$PH@^#}0kA38L&}k2}4qsV4@BFWi_kQs2#+ucu#;?8f zmrQ4K#g$i&cfIdJWA)0F<4KSE5q%1Miryd`?dQSqLl7VT)PIdDuf9&cu~^9l3!L^W zV!bHVdlUP{;!g3F)t)Z(QCC5U=L>P+I;T!;`3`Ome(OtDWieu^$~<;p?GT z@jO6NUduS4B$aBrpV1K)o;bEa|GI``)m3dj0Em4k($Nn4EfL+85m_Z%4iflP+U_IO z`FE#dKb;v2KK<&F(HmjWW{j~zKWcE>1$U0U&zODHXvvzT zim~=s-66VcPO+eu>{W*@`=G=39zU9Z*p54Pj$3u-)vmjD`fjo{$LVg574&Ax+7tI0 z2mSnkq z%(CzFn|dvv1xQ4yc4ujzV20x!v`V)nS_El^MP^oMBB+0B`THu25N47ln^`EX&+K{p8_5w_d|un}iceu|quD*Zr~S;omSs;r1#R9- zzey2JbC`d@#ELW=|13)9RC&TaBceVVEjif`093E{=*n2Iu^*p9aq!|x2KTDuB&%DJ zF<+Q1rV8UfUj&)3RjbFVU;MKJ{(Sk;1>YLyefgVX<*Mc5u@66E9DLC1 z;{VE(%g1w`@x<|)Z+@5E%U3olAOd%o0{5D!y~=Z*@#EvrgJ!uUH|_<945u6{g%gd5;TjmtS%1 zxL)6mnB18IB4sYUCxLyj#QmT68TqsERKngd1LEmIATjA@7xv)NXc{Ed_oQ{ZOjyQO zupqQNI2!ZQ8rRs+DW$9({gpo2QwA~cG@~_Hd<0P2cT3Pl*Ep)HyFIt0(id3$9!PX! zJBeJ(&+Mdc34@g+6)4Oy3cfWx^PTXlt3AgVF#TrFlNn#csE*2;f5ru*!m%aUmkj9E zS1qz4m_ju13j5uk$WNv4@}3G$;Szt_$6ur~{Y=l4CJIEJ=>73KTx-) zfJv74!30_MeGCA>wnW8G_lWlTw|(#hh()ZKCKaQwQE~rOp71AROK82272|?ONsJsH zX!{zp-D^+_O`B~O-92vm;4NdfJ~*_z&V@ESd%v-4GoN;*EIU9SKk3}e&%_nUl8iIO z+~eP#S8ir8R6I$T9Z!@3=|qB~f1jy307+4B9Mz>2OG~qMCEW`bJ3e_7gv2q$0HW zU`_A;z?NTP<*)-@^=n**=gyMr`m+&a5)1ZIK!|jPZ3=e>2QJ z;%{hphYl0Urj-j;DEAY6TrIog_=#Dv?(6vM9wCR)%f&8ax{&95SctFqLt*Q9y)Ru+ zQp;AIIXC{%Dz22#$0YNEy5lL-tOGNA`q{@H$0Kj0M^+4gCO{PrNEsKB;{rcj*|^*m zI>|*xTjO{SPvHImt9XiLQz+)c@^w=i>h$B)6R*6XT4QUND(St5q*jER;W6SQ$zETGuK;B~@wjjk= zXx+A$8y2X*GhP*YmR;fEgV7Z$oOS$h#^+MQeUGtmOJ-`d(gF>&FW zdIs8!H{UXrE?MH|sqqV+UDmH%JAP6>MDVDGKXg3zMXwy+x%4tC*>yG`;=W>H`XqQx&(npl*S-0Vau<%*5(#Q=6RLdfix-T~pRcc5RDsUa zC!UwR;1~Q$rOo^8-{-5OJI3$+&g;fQ&N{uxV?RC1?$nb{98Z1n6UHp}8`Kp(n^ETOsPHzxdS@YRedI+_gL)7Yo4ivO

  • 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