Schedule icon
Webhook icon
Script icon
Docker icon
Query icon
OutputValues icon
If icon
Log icon
SlackIncomingWebhook icon
Request icon
ChatCompletion icon
GoogleGemini icon
Write icon

Solar Telemetry Inverter Anomaly Sentinel and Maintenance Dispatch

Automate solar PV inverter degradation and soiling anomaly detection using DuckDB SQL, generate maintenance work orders, and trigger AI/Slack escalation.

Categories
AIBusinessData

Automate solar photovoltaic (PV) generation fleet monitoring and predictive maintenance escalation. This workflow ingests inverter electrical telemetry (DC voltage, current, AC power, core temperature) and environmental weather station readings (Plane of Array irradiance, ambient temperature), computes temperature-corrected expected power output and peer-fleet baselines using DuckDB SQL, and isolates four high-impact solar generation failure modes:

  1. Inverter Trip / Disconnect (INVERTER_TRIP_OFFLINE): Inverter producing zero or negligible power (< 5 kW) despite high daylight irradiance (> 100 W/m2).
  2. Thermal Derating (THERMAL_DERATING): IGBT heatsink temperature exceeding 65°C, causing automated inverter curtailment and output loss.
  3. MPPT String Fault (MPPT_TRACKER_FAULT): Abnormal DC string voltage (< 550V compared to nominal ~750V) signaling blown combiner fuses or disconnected strings.
  4. Soiling Degradation (SOILING_DEGRADATION): Efficiency is normal (> 95%), but string output is consistently 15%+ below expected yield, indicating module dust or soiling buildup.

Key Features

  • Zero-Credential Default Run: Built-in 6-inverter SCADA test fleet and weather sensor dataset allows immediate one-click execution without any API keys or external services.
  • In-Memory Analytical Engine: Fast vector processing using Kestra's DuckDB plugin (io.kestra.plugin.jdbc.duckdb.Query) with expected yield temperature coefficient baselining (rated_capacity_kw * (poa / 1000) * (1 - 0.0035 * deltaT)).
  • Financial Risk Quantification: Calculates hourly energy deficit ($kWh$) and revenue leakage ($USD$) based on contract PPA rates ($/MWh).
  • Actionable Outputs: Automatically produces priority_maintenance_tickets.csv, priority_maintenance_tickets.json, nominal_inverters_report.csv, fleet_summary_metrics.json, and an executive Markdown audit table (solar_fleet_health_report.md).
  • Modular Incident Escalation: Flowable routing (If) triggers optional CMMS maintenance dispatch via HTTP REST API (io.kestra.plugin.core.http.Request), Slack operational alerts, and Google Gemini AI troubleshooting guidance stored in Kestra internal storage (io.kestra.plugin.core.storage.Write).

How it works

  1. stage_telemetry_data (io.kestra.plugin.scripts.python.Script) stages raw telemetry and environmental sensor arrays into normalized CSV tables. If inject_anomalies is false, it normalizes all records to simulate a clean 100% nominal baseline fleet.
  2. compute_inverter_analytics (io.kestra.plugin.jdbc.duckdb.Query) joins weather metrics with inverter electrical data, applies PV cell temperature derating coefficients, calculates generation deficits, classifies faults, and calculates revenue loss.
  3. generate_work_orders_and_report (io.kestra.plugin.scripts.python.Script) segregates records into priority_maintenance_tickets.csv, priority_maintenance_tickets.json, and nominal_inverters_report.csv, writes fleet_summary_metrics.json, compiles solar_fleet_health_report.md, and emits structured metrics via Kestra output protocol.
  4. expose_fleet_metrics (io.kestra.plugin.core.output.OutputValues) exposes key generation and revenue risk metrics to Kestra execution outputs.
  5. route_incident_escalation (io.kestra.plugin.core.flow.If) branches on anomalies_detected > 0:
    • Dispatches Slack alert card if send_slack_alert: true.
    • Posts prioritized maintenance tickets to CMMS REST endpoint (dispatch_cmms_work_orders) if dispatch_work_order: true.
    • Calls Google Gemini (io.kestra.plugin.ai.completion.ChatCompletion) to generate a field technician troubleshooting guide if enable_ai_diagnostics: true.

What you get

  • Priority Maintenance Tickets ({{ outputs.generate_work_orders_and_report.outputFiles['priority_maintenance_tickets.csv'] }} & .json): Formatted work orders ready for CMMS import with exact fault classification, revenue loss, and recommended field action.
  • Executive Fleet Health Report ({{ outputs.generate_work_orders_and_report.outputFiles['solar_fleet_health_report.md'] }}): Formatted Markdown summary tables for plant managers and operations reviews.
  • Structured Execution Metrics ({{ outputs.expose_fleet_metrics.values }}): total_inverters, anomalies_detected, critical_trips, total_lost_energy_kwh_1h, and total_revenue_loss_usd_1h.
  • Optional AI Technician Guide ({{ outputs.save_ai_diagnostics_guide.uri }}): Generated when enable_ai_diagnostics is set to true.

Who it's for

  • Solar Plant Operations and Asset Managers overseeing commercial and utility-scale PV generation.
  • Renewable Energy Data Engineers building automated SCADA monitoring pipelines.
  • Field Maintenance Engineers looking for automated ticket triage and root-cause dispatch.

Prerequisites

  • Default dry-run mode requires zero external credentials or services. Click Execute immediately with the built-in datasets.
  • To enable optional integrations, configure the corresponding namespace secrets and input endpoints:

Secrets

  • SOLAR_WEBHOOK_KEY: Authentication key for the scada_telemetry_webhook trigger.
  • SLACK_WEBHOOK_URL: Slack Incoming Webhook URL (required only when send_slack_alert is set to true).
  • GEMINI_API_KEY: Google Gemini API key (required only when enable_ai_diagnostics is set to true).
  • CMMS_API_KEY: Maintenance management system API key (required only when dispatch_work_order is set to true).

Quick start

  1. Click Execute with default inputs (inject_anomalies: true) to run the 6-inverter analysis.
  2. Open the Outputs tab to review priority_maintenance_tickets.csv (4 anomalous inverters, $139.64/hr revenue leakage) and solar_fleet_health_report.md.
  3. Re-run with inject_anomalies: false to verify the nominal fleet branch where 100% of inverters pass without work orders.
  4. Optionally set send_slack_alert: true, dispatch_work_order: true, or enable_ai_diagnostics: true with your secrets to test operational escalation.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.