- Implement `sigen_daemon.py` to poll Sigenergy plant metrics and store snapshots.
- Create `web_daemon.py` for serving a web interface with various endpoints.
- Add debug scripts:
- `debug_duplicates.py` to find duplicate target times in forecast data.
- `debug_energy_forecast.py` to print baseline energy forecast curves.
- `debug_oracle_evaluations.py` to run the oracle evaluator.
- `debug_sigen.py` to inspect stored Sigenergy plant snapshots.
- `debug_weather.py` to trace resolved truth data.
- `modbus_test.py` for exploring Sigenergy plants or inverters over Modbus TCP.
- Introduce `oracle_evaluator.py` for evaluating stored oracle predictions against actuals.
- Add TCN training scripts in `tcn` directory for training usage sequence models.
- Changed save_zero_hour_forecast_as_truth to use issued_at instead of target_at for resolved_at timestamp
- Added window function to deduplicate forecast points, keeping only the most recent for each (target_at, horizon_hours)
- Limits resolved truth query to current time to prevent future points from displaying
- This fixes vertical lines in the chart caused by duplicate forecasts and ensures truth data displays correctly
The zero-hour forecasts (observations) were being saved with resolved_at = target_at,
which could be in the future. This caused them to be filtered out by the time-based
query in load_display_dataset(). Now using issued_at (when the observation was made)
ensures the timestamps fall within the valid display range.