Add examples

This commit is contained in:
tronikos 2025-06-05 22:43:21 -07:00 committed by GitHub
parent f0797354cf
commit f592c06c12
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 103 additions and 0 deletions

View File

@ -27,6 +27,109 @@ To set up the integration, you need a username and password with access to the [
{% include integrations/config_flow.md %}
## Examples
### Statistics graph
An example of a Statistics graph that shows hourly production per module for the past 7 days.
![Screenshot hourly production Statistics graph](/images/integrations/solaredge_modules/hourly_production.png)
```yaml
chart_type: line
period: hour
type: statistics-graph
entities:
- solaredge_modules:1234567_100000001
- solaredge_modules:1234567_100000002
- solaredge_modules:1234567_100000003
- solaredge_modules:1234567_100000004
stat_types:
- change
days_to_show: 7
title: Hourly production per module on east side
```
Another example of a Statistics graph that shows daily production per module for the past 7 days.
It's easier here to identify any problematic modules.
![Screenshot daily production Statistics graph](/images/integrations/solaredge_modules/daily_production.png)
```yaml
chart_type: line
period: day
type: statistics-graph
entities:
- solaredge_modules:1234567_100000001
- solaredge_modules:1234567_100000002
- solaredge_modules:1234567_100000003
- solaredge_modules:1234567_100000004
stat_types:
- change
title: Daily production per module on east side
days_to_show: 30
```
### SQL
To identify problematic modules you could setup the [`SQL`](/integrations/sql/) integration with the following:
Name: SolarEdge low production modules (East)
Column: `problematic_modules`
Query:
```sql
SELECT * FROM (
WITH RelevantTimeRange AS (
-- Define the start and end timestamps for "past 7 days, ignoring today"
-- start_ts is inclusive, end_ts is exclusive
SELECT
strftime('%s', date('now', 'localtime', 'start of day', '-7 days')) AS period_start_ts,
strftime('%s', date('now', 'localtime', 'start of day')) AS period_end_ts
),
ModuleProduction AS (
-- Calculate total production for each module in the relevant time period
SELECT
sm.name,
SUM(s.state) AS total_production
FROM statistics s
JOIN statistics_meta sm ON s.metadata_id = sm.id
CROSS JOIN RelevantTimeRange rt
WHERE
sm.source = 'solaredge_modules'
-- TODO: Adjust this to match your setup
AND sm.name LIKE '% 1.1.%'
AND s.start_ts >= rt.period_start_ts
AND s.start_ts < rt.period_end_ts
AND s.state IS NOT NULL
GROUP BY
sm.name
),
AverageProduction AS (
-- Calculate the average production across all modules that produced something
SELECT
AVG(mp.total_production) AS average_total_production
FROM ModuleProduction mp
WHERE total_production > 0
)
SELECT
GROUP_CONCAT(
mp.name || ' (' || printf("%.1f", (mp.total_production * 100.0 / ap.average_total_production)) || '%)',
', '
) AS problematic_modules
FROM
ModuleProduction mp, AverageProduction ap -- Implicit cross join, AP will have 1 row
WHERE
-- TODO: Adjust the 96% threshold if needed
mp.total_production < (0.96 * ap.average_total_production)
AND ap.average_total_production > 0 -- Avoid division by zero if no production at all
)
```
This will result to a sensor with state e.g.: `SolarEdge 1.1.13 (95.7%), SolarEdge 1.1.14 (95.2%)`
You can use this sensor in automations, e.g to notify you if its value changes.
## Removing the integration
{% include integrations/remove_device_service.md %}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB