Fork of Lightning_Report adding: - n8n_report_branch.json: workflow branch for storm-triggered report delivery - report_service/: FastAPI microservice wrapping create_docx_report() so n8n can produce byte-identical reports without fighting the Python Code sandbox Made-with: Cursor
146 lines
3.3 KiB
Markdown
146 lines
3.3 KiB
Markdown
# Batch Report Generation Guide
|
|
|
|
## Overview
|
|
|
|
The batch generation system automates lightning report generation for multiple wind farms by fetching data from the API and processing them in batch.
|
|
|
|
## Setup
|
|
|
|
### 1. Install Dependencies
|
|
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 2. Create .env File
|
|
|
|
Create a `.env` file in the project root with your API key:
|
|
|
|
```env
|
|
API_KEY=your_api_key_here
|
|
```
|
|
|
|
### 3. Create Configuration File
|
|
|
|
Copy `wind_farms_config.example.json` to `wind_farms_config.json` and configure your wind farms:
|
|
|
|
```bash
|
|
cp wind_farms_config.example.json wind_farms_config.json
|
|
```
|
|
|
|
Edit `wind_farms_config.json` with your farms' details.
|
|
|
|
## Configuration
|
|
|
|
### API Configuration
|
|
|
|
```json
|
|
{
|
|
"api_config": {
|
|
"base_url": "https://risk.tarla.io/api",
|
|
"timeout_seconds": 30,
|
|
"retry_attempts": 3,
|
|
"default_query_range": {
|
|
"method": "current_month"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Wind Farm Configuration
|
|
|
|
Each farm can have:
|
|
|
|
- **enabled**: `true` or `false` - Controls whether to generate report
|
|
- **location_bounds.method**: `"auto"` (calculate from turbines) or `"manual"` (specify)
|
|
- **location_bounds.padding_km**: Extra buffer beyond max distance ring (default: 5km)
|
|
- **date_range.method**: `"auto"` (use query_range to fetch, then detect from data) or `"manual"` (specify dates)
|
|
|
|
### Query Range Options (for auto date_range)
|
|
|
|
- `"current_month"`: First day of current month to today
|
|
- `"last_month"`: Entire previous month
|
|
- `"days_back"`: Last N days (requires `days` parameter)
|
|
- `"custom"`: Specific dates (requires `start_date` and `end_date`)
|
|
|
|
## Usage
|
|
|
|
### Process All Enabled Farms
|
|
|
|
```bash
|
|
python batch_generate.py --config wind_farms_config.json
|
|
```
|
|
|
|
### List Farms
|
|
|
|
```bash
|
|
python batch_generate.py --config wind_farms_config.json --list-farms
|
|
```
|
|
|
|
### Process Specific Farm
|
|
|
|
```bash
|
|
python batch_generate.py --config wind_farms_config.json --farm-id dagpazari_RES
|
|
```
|
|
|
|
### Process All Farms (Ignore Enabled Flag)
|
|
|
|
```bash
|
|
python batch_generate.py --config wind_farms_config.json --force-all
|
|
```
|
|
|
|
### Process Disabled Farm
|
|
|
|
```bash
|
|
python batch_generate.py --config wind_farms_config.json --farm-id disabled_farm --force
|
|
```
|
|
|
|
## How It Works
|
|
|
|
### Location Bounds Auto-Calculation
|
|
|
|
1. **Calculate Centroid**: Average of all turbine coordinates
|
|
2. **Find Max Distance**: Maximum distance from centroid to any turbine
|
|
3. **Add Distance Ring**: Add max distance ring (e.g., 30km)
|
|
4. **Add Padding**: Add padding (e.g., 5km)
|
|
5. **Result**: Center (centroid) + Radius (total distance)
|
|
|
|
## Output
|
|
|
|
- Reports are saved to each farm's `output_directory` in the config
|
|
- Batch summary saved to `reports/batch_summary_YYYY-MM-DD.json`
|
|
- Log file: `batch_generation_YYYY-MM-DD.log`
|
|
|
|
## API Endpoints
|
|
|
|
The system uses:
|
|
- Lightning data: `https://risk.tarla.io/api/lightning-data/historical/`
|
|
- Storm data: `https://risk.tarla.io/api/storm-data/historical/`
|
|
|
|
Parameters:
|
|
- `queryType=circle`
|
|
- `centerLongitude` (longitude first)
|
|
- `centerLatitude`
|
|
- `radius` (in meters)
|
|
- `startDate=YYYY-MM-DD`
|
|
- `endDate=YYYY-MM-DD`
|
|
|
|
## Troubleshooting
|
|
|
|
### API Key Not Found
|
|
|
|
Ensure `.env` file exists with `API_KEY=your_key`
|
|
|
|
### No Data Fetched
|
|
|
|
- Check API credentials
|
|
- Verify date range is correct
|
|
- Check if location bounds cover the area
|
|
- Verify API endpoint URLs
|
|
|
|
### Farm Skipped
|
|
|
|
- Check if `enabled: false` in config
|
|
- Use `--force` flag to process disabled farms
|
|
|