Data tools
SolarSENS MCP exposes the read-only tools below. The assistant selects a tool from your question. Every read uses the access scope of the connected account.
Tool catalog
| Tool | Title | Parameters |
|---|---|---|
get_profile | Connected Account Profile | None. |
list_accessible_plants | List Accessible Plants | None. |
search_plants | Search Plants | query (string, required, 1-120 characters) |
get_plant_overview | Get Plant Overview | plantId (UUID, required) |
list_devices | List Devices | plantId (UUID, required), deviceType (string, optional, 1-64 characters), nameQuery (string, optional, 1-120 characters) |
get_plant_daily_performance | Get Plant Daily Performance | plantId (UUID, required), start (string, required), end (string, required), timezone (string, optional) |
query_plant_5min | Query Plant Five-minute Values | plantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), metrics (array of string, required) |
query_plant_daily | Query Plant Daily Values | plantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), metrics (array of string, required) |
list_alarms | List Alarms | plantId (UUID, required), status (active or cleared or all, optional), start (string, required), end (string, required), page (integer, optional) |
get_alarm | Get Alarm | plantId (UUID, required), alarmId (UUID, required) |
query_string_5min | Query String Five-minute Values | plantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), inverterIds (array of string, optional), resolution (5min or 15min or 30min or 60min, required), metrics (array of string, required) |
query_inverter_daily | Query Inverter Daily Values | plantId (UUID, required), start (string, required), end (string, required), timezone (string, optional), inverterIds (array of string, optional), metrics (array of string, required) |
get_plant_dashboard | Get Plant Dashboard | plantId (UUID, required), view (production_status or production_status_asset_owner or device_status or devices_detail or devices_simple or disconnected_strings, required), deviceType (string, optional, 1-64 characters), parentDeviceId (UUID, optional), parentDeviceType (string, optional, 1-64 characters), faultType (string, optional, 1-64 characters), page (integer, optional), pageSize (integer, optional) |
get_portfolio_dashboard | Get Portfolio Dashboard | view (site_overview or last_7_days_yield or last_7_days_yield_agg or devices_status_summary or alarm_status or string_health, required), date (string, required), plantIds (array of string, optional), alarmDays (integer, optional) |
get_plant_chart | Get Plant Chart | plantId (UUID, required), chart (power or power_asset_owner or yield or yield_agg or yield_agg_asset_owner or performance, required), date (string, required), resolution (1m or 5m or 15m or 30m or 60m, optional) |
query_device_telemetry | Query Device Telemetry | plantId (UUID, required), deviceId (UUID, required), metrics (array of string, required), date (string, required), resolution (1m or 5m or 15m or 30m or 60m, optional) |
get_string_daily_analytics | Get String Daily Analytics | plantId (UUID, required), view (latest or for_date, required), date (string, optional) |
No other tool is available. The tools read Plant and portfolio dashboards,
day charts, device catalogs, device telemetry, string analytics, and alarms.
list_alarms and get_alarm read live alarm state and alarm history for one
Plant. Tool details below gives their inputs, paging, and
alarm fields. If a question needs work orders,
generic metric catalogs, or DataHub exports, the assistant cannot answer it
through this connector today.
get_plant_daily_performance parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
plantId | UUID | Yes | Use the canonical Plant ID returned by discovery. |
start | Date or date-time (see below) | Yes | Start of the window. |
end | Date or date-time (see below) | Yes | Must be after start. |
timezone | IANA time zone name | No | Defaults to the Plant's own time zone. Required when the Plant record has none; the call fails with INVALID_QUERY otherwise. |
This tool reads daily values only. It has no interval input.
start and end accept three formats, all read in the timezone field:
- an ISO 8601 date-time with a UTC offset, for example
2026-09-22T00:00:00+08:00; - a date-time with no offset, for example
2026-09-22T00:00:00; - a plain date, for example
2026-09-22.
A plain-date start begins at 00:00:00. A plain-date end covers the whole day, through 23:59:59.
Example request:
{
"plantId": "00000000-0000-0000-0000-000000000000",
"start": "2026-09-01T00:00:00+07:00",
"end": "2026-09-08T00:00:00+07:00",
"timezone": "Asia/Ho_Chi_Minh"
}
Each returned row carries date, yieldKwh, performanceRatio,
availability, and irradiationKwhM2. Any of the value fields can be
null when the source has no reading for that date; a null value is not
the same as zero production.
The demo Plant DEMO-AI-P001 has no telemetry. A get_plant_daily_performance call for
it returns a response with no populated rows for the requested window. Do
not treat that empty result as evidence that a real Plant produced nothing;
check the response coverage and warnings first.
Response fields
Every successful response can include:
- a request ID;
- the Plant or other entities used by the result;
- the resolved date window and timezone, when the tool accepts one;
- metric definitions, when relevant; and
- coverage, warnings, and truncation metadata. See Limits & errors for when each value is set.
Missing values remain missing. An unavailable upstream is not reported as a successful empty result.
Shared limits
- A query accepts at most 1,000 returned rows and 1 MB of serialized data.
- Use the canonical Plant ID returned by discovery for later reads. A Plant name is a search input, not an authorization method.
See Limits & errors for the full table and error codes.
Read-only boundary
The connector does not provide tools to:
- read work orders;
- create, edit, assign, resolve, or delete anything;
- list portfolios or read management summaries, metric catalogs, or DataHub values;
- control a Plant or device;
- run arbitrary SQL, HTTP, storage, or backend requests; or
- start export jobs.
These capabilities are absent from the connector today, not merely non-mutating. Calling a tool never changes SolarSENS data.
Tool details
The docs build makes this section from the tools/list response of the
production server. Each argument shows its JSON Schema type, whether it is
required, and its constraints. A tool shows an output schema only when it
advertises one.
get_profile
Connected Account Profile
Return the email address for the SolarSENS account selected for this connection. Use to confirm which account is connected. Does not select or switch accounts. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
Arguments: none.
Output schema:
{
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 1,
"pattern": "\\S"
}
},
"required": [
"email"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}
list_accessible_plants
List Accessible Plants
Read the current Plant catalog for the signed-in account, all accessible Plants. Use only returned Plant IDs; never guess account scope from letters, digits, keywords, or IDs. Use for: account scope. Not for: a named Plant - use search_plants. Next: get_portfolio_dashboard. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
Arguments: none.
search_plants
Search Plants
Read the current Plant catalog by name or code, accessible matches only. Call once with the user's name or code. If one result name equals the user's Plant name (any letter case), use it without asking. If the user gives only the end of a code, such as P043 (a full code is NORTH-P043), search the digits, such as 043; if several codes match, show all and ask. Use for: a named Plant. Not for: all Plants - use list_accessible_plants. Next: get_plant_overview. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
query | string | Yes | 1 to 120 characters |
Input schema:
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_plant_overview
Get Plant Overview
Read current identity and timezone for one accessible Plant. Use for: Plant scope and local dates. Not for: live status - use get_plant_dashboard. Next: get_plant_daily_performance. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"plantId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
list_devices
List Devices
Read the current device catalog for one Plant, all devices or one type. Use for: IDs, parents, types, and unclear names with nameQuery. nameQuery matches name or label; letter case and separators are ignored. If no device matches, call again without nameQuery to find similar names or labels. If no device or more than one device matches, stop. Show name, label, and type, and ask which device. Do not read data for all matches. Not for: offline status - use get_plant_dashboard. Next: query_device_telemetry. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
deviceType | string | No | 1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$ |
nameQuery | string | No | 1 to 120 characters; Part of a device name or label. Letter case and separators are ignored. |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"deviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"nameQuery": {
"description": "Part of a device name or label. Letter case and separators are ignored.",
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"plantId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_plant_daily_performance
Get Plant Daily Performance
Read stored daily yield, PR, availability, and irradiation for one Plant, up to 366 days; can lag. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: low PR and daily performance. Not for: other stored daily values - use query_plant_daily. Next: get_string_daily_analytics. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
start | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
end | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
timezone | string | No | At least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none. |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
}
},
"required": [
"plantId",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
query_plant_5min
Query Plant Five-minute Values
Read stored five-minute Plant values; can lag. Up to 31 days, but 1,000 rows allow about 3 days for one metric or 1 day for 3 metrics. start inclusive, end exclusive, with offsets. Use for: numbers across days. Not for: a one-day chart - use get_plant_chart. Next: query_inverter_daily. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
start | string | Yes | ISO 8601 date-time |
end | string | Yes | ISO 8601 date-time |
timezone | string | No | At least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none. |
metrics | array of string | Yes | 1 to 20 items; each item one of Active Power Plant, Consumption Load, Daily irradiation, Daily irradiation effect, Daily Overspill Energy, Daily Overspill Energy effect, Daily Overspill PR, Daily PR, Daily PR Temp Corrected, Daily Total Energy, Daily Total Energy effect, Daily Total PR, Daily Yield, Daily Yield effect, Daily Yield Plant, Daily Yield PR, Daily Yield PR Temp Corrected, Daily Yield Total Energy, Daily Yield Total PR, Derating Power Plant, Five Min Overspill PR, Five Min PR, Five Min Total PR, Grid Power, Irradiance, Irradiation, Irradiation_effect, Overspill Energy, Temp-PV Module, Total Energy, Yield, Yield Plant, Yield_effect |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"metrics": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"Active Power Plant",
"Consumption Load",
"Daily irradiation",
"Daily irradiation effect",
"Daily Overspill Energy",
"Daily Overspill Energy effect",
"Daily Overspill PR",
"Daily PR",
"Daily PR Temp Corrected",
"Daily Total Energy",
"Daily Total Energy effect",
"Daily Total PR",
"Daily Yield",
"Daily Yield effect",
"Daily Yield Plant",
"Daily Yield PR",
"Daily Yield PR Temp Corrected",
"Daily Yield Total Energy",
"Daily Yield Total PR",
"Derating Power Plant",
"Five Min Overspill PR",
"Five Min PR",
"Five Min Total PR",
"Grid Power",
"Irradiance",
"Irradiation",
"Irradiation_effect",
"Overspill Energy",
"Temp-PV Module",
"Total Energy",
"Yield",
"Yield Plant",
"Yield_effect"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
query_plant_daily
Query Plant Daily Values
Read stored daily Plant values, up to 366 days and 1,000 rows; can lag. start inclusive, end exclusive, with offsets. Use for: curtailment, soiling, revenue, and monthly values. Not for: yield, PR, availability, irradiation - use get_plant_daily_performance. Next: query_inverter_daily. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
start | string | Yes | ISO 8601 date-time |
end | string | Yes | ISO 8601 date-time |
timezone | string | No | At least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none. |
metrics | array of string | Yes | 1 to 20 items; each item one of avg_tcell, daily_availability, daily_pr, daily_pr_agg, daily_pr_corr, daily_pr_corr_agg, daily_pr_overspill, daily_pr_total_agg, daily_pr_total_agg_corr, daily_rev, daily_s_yield, daily_slope_rad, daily_slope_rad_sensor, daily_total_pr, daily_total_pr_corr, daily_yield, daily_yield_agg, meter_reading, mthly_pr, mthly_pr_agg, mthly_pr_corr, mthly_pr_corr_agg, mthly_pr_overspill, mthly_pr_total, mthly_pr_total_agg, mthly_pr_total_agg_corr, mthly_pr_total_corr, mthly_slope_rad, mthly_slope_rad_sensor, mthly_yield, mthly_yield_agg, plant_curtailment, plant_soiling |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"metrics": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"avg_tcell",
"daily_availability",
"daily_pr",
"daily_pr_agg",
"daily_pr_corr",
"daily_pr_corr_agg",
"daily_pr_overspill",
"daily_pr_total_agg",
"daily_pr_total_agg_corr",
"daily_rev",
"daily_s_yield",
"daily_slope_rad",
"daily_slope_rad_sensor",
"daily_total_pr",
"daily_total_pr_corr",
"daily_yield",
"daily_yield_agg",
"meter_reading",
"mthly_pr",
"mthly_pr_agg",
"mthly_pr_corr",
"mthly_pr_corr_agg",
"mthly_pr_overspill",
"mthly_pr_total",
"mthly_pr_total_agg",
"mthly_pr_total_agg_corr",
"mthly_pr_total_corr",
"mthly_slope_rad",
"mthly_slope_rad_sensor",
"mthly_yield",
"mthly_yield_agg",
"plant_curtailment",
"plant_soiling"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
list_alarms
List Alarms
Read live ThingsBoard alarm state for one Plant, the same list as the GUI alarm page. Ten events per page; page 0 is the first page. Start inclusive and end exclusive on creation time, with UTC offsets. Use for: active alarms and alarm history. Not for: work orders - this connector cannot read them. Next: get_alarm for one alarm, then query_device_telemetry for the device curve at the alarm time. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
status | string | No | One of active, cleared, all; default active; Alarm status. Omit to read active alarms. |
start | string | Yes | ISO 8601 date-time |
end | string | Yes | ISO 8601 date-time |
page | integer | No | Default 0; 0 to 9007199254740991; Page index. 0 is the first page; omit page to read the first page. |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"status": {
"default": "active",
"description": "Alarm status. Omit to read active alarms.",
"type": "string",
"enum": [
"active",
"cleared",
"all"
]
},
"start": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"end": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"page": {
"default": 0,
"description": "Page index. 0 is the first page; omit page to read the first page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"plantId",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_alarm
Get Alarm
Read live ThingsBoard lifecycle state for one alarm in one Plant, from the same source as the GUI alarm page. Times are epoch milliseconds. A read does not acknowledge or clear the alarm. Use for: alarm details and lifecycle times. Not for: work orders - this connector cannot read them. Next: query_device_telemetry for the device curve at the alarm time. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
alarmId | string | Yes | UUID |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"alarmId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"plantId",
"alarmId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
query_string_5min
Query String Five-minute Values
Read stored string Idc and Udc at 5 to 60 minutes; can lag. Up to 7 days, 1,000 rows; inverterIds optional. Data is kept for about the last 72 days only. For an older date, do not call; tell the user stored five-minute string data is not kept for that date. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: current and voltage across days. Not for: a live curve today - use query_device_telemetry. Next: get_plant_dashboard. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
start | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
end | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
timezone | string | No | At least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none. |
inverterIds | array of string | No | 1 to 50 items; each item UUID |
resolution | string | Yes | One of 5min, 15min, 30min, 60min |
metrics | array of string | Yes | 1 to 2 items; each item one of Idc, Udc |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"inverterIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"resolution": {
"type": "string",
"enum": [
"5min",
"15min",
"30min",
"60min"
]
},
"metrics": {
"minItems": 1,
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"Idc",
"Udc"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"resolution",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
query_inverter_daily
Query Inverter Daily Values
Read stored inverter daily values as reported; can lag. Up to 366 days, 1,000 rows. inverterIds optional. A plain-date end (YYYY-MM-DD) includes that whole day. With offset timestamps, start is inclusive and end is exclusive. Use for: yield, availability, and losses across inverters. Not for: a live device curve today - use query_device_telemetry. Next: query_string_5min. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
start | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
end | string | Yes | YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset |
timezone | string | No | At least 1 character; IANA zone. Omit to use the Plant's timezone; required when the Plant has none. |
inverterIds | array of string | No | 1 to 50 items; each item UUID |
metrics | array of string | Yes | 1 to 7 items; each item one of Daily Yield, availability, Daily Derating Loss, Daily Operation Time, unavailability_loss_kwh, overspill_loss_kwh, soiling_loss_kwh |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"start": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"end": {
"type": "string",
"pattern": "^(?:\\d{4}-\\d{2}-\\d{2}|\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)$",
"description": "YYYY-MM-DD, or an ISO 8601 date-time with an optional UTC offset"
},
"timezone": {
"description": "IANA zone. Omit to use the Plant's timezone; required when the Plant has none.",
"type": "string",
"minLength": 1
},
"inverterIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"metrics": {
"minItems": 1,
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"Daily Yield",
"availability",
"Daily Derating Loss",
"Daily Operation Time",
"unavailability_loss_kwh",
"overspill_loss_kwh",
"soiling_loss_kwh"
]
}
}
},
"required": [
"plantId",
"start",
"end",
"metrics"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_plant_dashboard
Get Plant Dashboard
Read live and today status for one Plant and its devices. Use for: production KPIs, offline devices, and disconnected strings. Not for: past daily performance - use get_plant_daily_performance. Next: list_devices. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
view | string | Yes | One of production_status, production_status_asset_owner, device_status, devices_detail, devices_simple, disconnected_strings |
deviceType | string | No | 1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$ |
parentDeviceId | string | No | UUID |
parentDeviceType | string | No | 1 to 64 characters; matches ^[A-Za-z][A-Za-z0-9 _-]*$ |
faultType | string | No | 1 to 64 characters |
page | integer | No | 0 to 9007199254740991; Page index. 0 is the first page; omit page to read the first page. |
pageSize | integer | No | 1 to 100 |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"view": {
"type": "string",
"enum": [
"production_status",
"production_status_asset_owner",
"device_status",
"devices_detail",
"devices_simple",
"disconnected_strings"
]
},
"deviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"parentDeviceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"parentDeviceType": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z][A-Za-z0-9 _-]*$"
},
"faultType": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"page": {
"description": "Page index. 0 is the first page; omit page to read the first page.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"pageSize": {
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"plantId",
"view"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_portfolio_dashboard
Get Portfolio Dashboard
Read live and today screens across accessible Plants, with 7-day yield and bounded alarm status. Pass plantIds to narrow it. Use for: Plants with problems today. Not for: one Plant over past days - use get_plant_daily_performance. Next: get_plant_dashboard. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
view | string | Yes | One of site_overview, last_7_days_yield, last_7_days_yield_agg, devices_status_summary, alarm_status, string_health |
date | string | Yes | YYYY-MM-DD |
plantIds | array of string | No | 1 to 50 items; each item UUID |
alarmDays | integer | No | 1 to 92 |
Input schema:
{
"type": "object",
"properties": {
"view": {
"type": "string",
"enum": [
"site_overview",
"last_7_days_yield",
"last_7_days_yield_agg",
"devices_status_summary",
"alarm_status",
"string_health"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"plantIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"alarmDays": {
"type": "integer",
"minimum": 1,
"maximum": 92
}
},
"required": [
"view",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_plant_chart
Get Plant Chart
Read a Plant chart for one Plant-local day, live and today data, at 1 to 60 minutes. Use for: a one-day power, yield, or performance chart. Not for: stored numbers across days - use query_plant_5min. Next: query_device_telemetry. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
chart | string | Yes | One of power, power_asset_owner, yield, yield_agg, yield_agg_asset_owner, performance |
date | string | Yes | YYYY-MM-DD |
resolution | string | No | One of 1m, 5m, 15m, 30m, 60m; default 30m |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"chart": {
"type": "string",
"enum": [
"power",
"power_asset_owner",
"yield",
"yield_agg",
"yield_agg_asset_owner",
"performance"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"resolution": {
"default": "30m",
"type": "string",
"enum": [
"1m",
"5m",
"15m",
"30m",
"60m"
]
}
},
"required": [
"plantId",
"chart",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
query_device_telemetry
Query Device Telemetry
Read telemetry for one device and one Plant-local day, today or a past day, at 1 to 60 minutes. Metric keys are device telemetry names, for example Active Power. An empty series can mean a wrong key, not missing data. Get the device ID from list_devices. Use for: device values at a time of day. Not for: string values across days - use query_string_5min. Next: get_plant_dashboard. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
deviceId | string | Yes | UUID |
metrics | array of string | Yes | 1 to 10 items; each item 1 to 64 characters; Device telemetry key names exactly as stored, for example Active Power. A wrong key returns an empty series. |
date | string | Yes | YYYY-MM-DD |
resolution | string | No | One of 1m, 5m, 15m, 30m, 60m; default 30m |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"deviceId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"metrics": {
"minItems": 1,
"maxItems": 10,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"description": "Device telemetry key names exactly as stored, for example Active Power. A wrong key returns an empty series."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
},
"resolution": {
"default": "30m",
"type": "string",
"enum": [
"1m",
"5m",
"15m",
"30m",
"60m"
]
}
},
"required": [
"plantId",
"deviceId",
"metrics",
"date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}
get_string_daily_analytics
Get String Daily Analytics
Read stored daily string analytics for one Plant, latest processed day or one past Plant-local date; can lag. Call a string weak only with the peer value it was compared with; state that value. Use for: weak strings and peer ranks. Not for: current and voltage curves - use query_string_5min. Next: query_string_5min. Read-only.
Annotations: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false.
| Argument | Type | Required | Accepted values |
|---|---|---|---|
plantId | string | Yes | UUID |
view | string | Yes | One of latest, for_date |
date | string | No | YYYY-MM-DD |
Input schema:
{
"type": "object",
"properties": {
"plantId": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"view": {
"type": "string",
"enum": [
"latest",
"for_date"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD"
}
},
"required": [
"plantId",
"view"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}