System Statuses and Icons
Production Sites
A system with a PRIMARY Solar meter is considered a production system. A production system can have one of the following technical statuses:
- COM ERR: Mana has been unable to communicate with the primary production device past a timeout period
- NOT PRODUCING: Mana is receiving readouts from the primary production device, however the device is reporting readings that are too low or zero
- OVERPRODUCING: production to-date this month is over 110% of the estimated production for the elapsed days in this month, derived from the monthly production estimate for the system
- UNDERPRODUCING: production to-date this month is under 90% of the estimated production for the elapsed days in this month, derived from the monthly production estimate for the system
- NORMAL: site is producing normally
These are the statuses shown on the site details page. An explanation of why a site is assigned a given status can be obtained by hovering the mouse over the status button on the Solar tab:
For usability, the production status is actually shown in two columns on the systems list page.
Select the "Status & Issues" column configuration to show the above columns:
"Production Status" here can be one of:
- PRODUCING (includes sites that are normal, over- or under-performing)
- NOT PRODUCING
- COM ERR
The "Production Performance" column shows whether a site that is producing is actually producing as expected, over- or under-producing.
Automatic Determination of System Status for a System with a Primary Device
The status of a system with a primary production device is determined according to the following rules, shown in order or priority, i.e. whichever rule matches first determines the status. All rules are run against the readings obtained from the primary production meter set for the system. The primary device is indicated by the words (PRIMARY) on the site details page:
Rules
The rules for determining system status diverge depending on whether the system has a timeout set that is under one day (1440 minutes).
Rules for systems where the NOT PRODUCING Notifications Timeout is less than 1 day:
- System has no production device: NORMAL
- Mana has never obtained any readings from the device: COM ERR
- The COM ERR timeout set for the system*1 has passed since the device reported any readings, where the timeout only takes into consideration minutes in the solar day*2 (i.e. if the system did not report during the night, this does not automatically push the system status into COM ERR): COM ERR
- Current power output exceeds the minimum production threshold*3: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria).
Current power output is determined by taking the most recent reading. If that is 0 or invalid, then we take into consideration the value set in the "0 Power Readout Tolerance" field on the site form. If nothing is set, then we use a tolerance of 60 minutes. This means that if the most recent reading is 0, then we look back in time up to 60 minutes to find the first non-zero value and use that to evaluate if current power output exceeds the minimum production threshold. We allow for this because some sites return 0 as the most recent reading (incorrectly), and also, this is a way to allow a site to not produce power for a few minutes without it affecting the site status.
Power output is determined using direct power readouts if available within the 0 Power Readout Tolerance timeframe. If unavailable, but we can determine positive power during this timeframe from energy readouts (cumulative or delta), then we use that. If that is unavailable, but we have positive direct power readouts from the past 6 hours, then we use that. Otherwise we fall back on the most recent power reading derived from energy readouts (cumulative or delta).
If all readings obtained within the 0 Power Readout Tolerance timeframe are under the minimum production threshold, then this criteria is not met (and we continue evaluating the criteria below).
-
Site time is before the end of the Expected Production Period4 and...
- If performance ratio is unavailable for today or yesterday, and the energy generated today as well as yesterday is less than what the site is expected to produce in a day*5: NOT PRODUCING
- If performance ratio IS available both for today and yesterday, then we compare that to the site Not Producing Threshold Pct*6. In other words, if both the performance ratio for today and yesterday were below the threshold percent, then the site status is: NOT PRODUCING
See MANA-2402 for an explanation as to why this was implemented.
- If performance ratio is unavailable for today or yesterday, and the energy generated today as well as yesterday is less than what the site is expected to produce in a day*5: NOT PRODUCING
-
Site last reported during the Expected Production Period taking into consideration the not producing notification timeout as well as a dawn/dusk offset*7, and irradiance is either set to be disregarded, not available, or available and above the irradiance threshold*8, then: NOT PRODUCING
(note that we already know that the current power output does not exceed the minimum production threshold since we checked for that in step #4)
- Site last reported after the solar day end (minus a dawn/dusk offset*7), and...
- If performance ratio is unavailable for today and the energy generated today is less than what the site is expected to produce in a day*5 then: NOT PRODUCING
- If performance ratio IS available for today, then we compare that to the site Not Producing Threshold Pct*6. In other words, if the performance ratio for today was below the threshold percent, then the site status is: NOT PRODUCING
- If site last status was NOT PRODUCING then we stay with that until production exceeds the threshold (see MANA-2371 to understand why this is required)
- In all other cases:
- If the energy produced so far this month minus the energy produced today is 10% over the predicted energy set for this system for this month, proportionally adjusted to the days elapsed in this month until today: OVERPRODUCING
- Energy produced so far this month minus the energy produced today is 10% under the predicted energy set for this system for this month, proportionally adjusted to the days elapsed in this month until today: UNDERPRODUCING
- Otherwise: NORMAL
Rules for systems where the NOT PRODUCING Notifications Timeout is at least 1 day:
For such systems we use a simplified algorithm for determining system status:
- System has no production device: NORMAL
- Mana has never obtained any readings from the device: COM ERR
- The COM ERR timeout set for the system*1 has passed since the device reported any readings, where the timeout only takes into consideration minutes in the solar day*2 (i.e. if the system did not report during the night, this does not automatically push the system status into COM ERR): COM ERR
- Current power output exceeds the minimum production threshold*3: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)
- When the energy generated today is more than what the site is expected to produce in a day*5 then: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)
- When the timeout is at least 1440 minutes (1 day)
- and the energy generated yesterday is more than what the site is expected to produce in a day*5 then: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)
- or the Site last reported before the solar day end yesterday (minus a dawn/dusk offset*7), and yesterday the site was fine, then don't change the site status (until the morning at least)
(in other words, we will only go to NOT PRODUCING if the site hasn't reported readouts for yesterday by the morning, or if those readouts did arrive but indicated very low energy production.)
- When the timeout is at least 2880 minutes (2 days)
- and the energy generated the day before yesterday is more than what the site is expected to produce in a day*5 then: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)
- or the Site last reported before the solar day end the day before yesterday (minus a dawn/dusk offset*7), and yesterday the site was fine, then don't change the site status (until the morning at least)
(in other words, we will only go to NOT PRODUCING if the site hasn't reported readouts for two days ago by the morning, or if those readouts did arrive but indicated very low energy production.)
- When the timeout is at least 4320 minutes (3 days)
- and the energy generated 3 days ago is more than what the site is expected to produce in a day*5 then: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)
- or the Site last reported before the solar day end two days ago (minus a dawn/dusk offset*7), and yesterday the site was fine, then don't change the site status (until the morning at least)
(in other words, we will only go to NOT PRODUCING if the site hasn't reported readouts for three days ago by the morning, or if those readouts did arrive but indicated very low energy production.)
- Otherwise: NOT PRODUCING
Footnotes for the above rules
*1: System COM ERR Timeout
The COM ERR timeout set for the system has passed since the device reported any readings...
See System-specific Issue Generation Settings for a more detailed explanation.
This can be set on the system configuration form:
The default value (if not set here) is: 120 minutes.
*2: Business Minutes Elapsed since Last Report
...where the timeout only takes into consideration minutes in the solar day...
When determining how many minutes ago a device last reported, we only take into account the number of minutes elapsed during the solar day, where the solar day can be set on the site settings page:
If not set here, de following default values are used: 7 a.m. - 5 p.m.
Note that for historical reasons we don't make use of the calculated sunrise and sunset values when determining how long a site has not been reporting. Using the calculated sunrise and sunset times here could be argued for.
*3: Minimum Production Threshold
If a site is producing 0, or very little, then we consider it to effectively not be producing at all. This "very little" is determined by the Minimum Production Threshold. This threshold can be set specifically for a site by clicking on the little envelope icon next to the site name:
If not set here, then the threshold is considered to be 1% of the system module output, as set on the system form (System Size field):
If no system size is set, then the threshold is set to 5kW.
*4: Expected Production Period
Site time is before the end of the Expected Production Period and...
We expect a site to produce energy during a period each day. This "Expected Production Period" can be set explicitly for a site on the site details form:
If it is not set here, then we use the calculated site sunrise and sunset times adjusted by a "dawn/dusk offset" value of 60 minutes. See MANA-2402 as to why this was changed from 30 to 60 minutes! 120 minutes. See MANA-3715 as to why this was changed from 60 to 120 minutes!
The sunrise and sunset times for a site are calculated every day based on location / time zone information and using the sunrise/sunset algorithm published by the US Naval Observatory . It is shown on the site detail page in the top-right corner:
In order to "play it safe", a fixed minimum and maximum value is hard-coded. These are: 7 a.m. and 5 p.m.
So, if the sunrise is calculated to be before 6, then the site is expected to be producing after 7. In other words, even if the sunrise is at 4 a.m., it is not expected to be producing before 7 a.m..
Similarly, if the sunset is after 8 p.m., the site is not expected to be producing after 5 p.m..
So, taking the above screenshot as an example, we would expect this given site to be producing between 7:29 am and 5:07 pm on this day.
*5: Site Expected Daily Energy Production:
the energy generated today as well as yesterday is less than what the site is expected to produce in a day...
COALESCE(`system`.ModuleOutput *
(TIMESTAMPDIFF(MINUTE,
site.SiteDayStart,
site.SiteDayEnd
)/60) * COALESCE(site.NotProducingThresholdPct, 0.05), 1)
Calculated using the module output (System DC Size on the site configuration form, or AC size if DC is unavailable) multiplied by the site expected production period (see *4 above) and the site "Not Producing Threshold Pct" (see *6 below).
If for some reason any of the above cannot be calculated (system DC/AC size isn't given, or no GPS coordinates are set for the site) then a fix threshold of 1 kWh is used.
*6: "Site Not Producing Threshold Pct"
This if 5% by default, but can be set explicitly for a site on the site settings form:
*7: Site Expected Production Period - NOT PRODUCING Notifications Timeout
Site last reported during the Expected Production Period taking into consideration the not producing notification timeout...
COALESCE(`system`.NotProducingNotificationTimeout, 120) < TIMESTAMPDIFF(MINUTE, site.SiteDayStart, site.SiteDayEnd)
AND DATE(production_device_summary.LastReport) = DATE(`system`.SiteTime)
AND TIME(production_device_summary.LastReport)
BETWEEN (site.SiteDayStart + INTERVAL COALESCE(`system`.NotProducingNotificationTimeout, 120) MINUTE) AND site.SiteDayEnd
The site solar day is the same as what is described in footnote #4 above. Additionally, we also allow a leeway that can be set specifically for each system by clicking the envelope icon next to the system name:
So, if the sun rises at 6:29 am at a site and sets at 6:07 pm, and has a NOT PRODUCING Notifications Timeout set to 60 minutes, then we will be checking that the site is producing energy between 8:29 am (6:29 + timeout + dawn/dusk offset) and 5:07 pm (6:07 - dawn/dusk offset). If nothing is set, the default value is 120 minutes.
*8: irradiance is either not available or available and above the irradiance threshold
NOT(site.SystemStatusConsidersIrradiance)
OR device_irradiance_stats.ID IS NULL
OR ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, production_device_summary.LastReportUTC)) > 30
OR device_irradiance_stats.LastIrradiance > COALESCE(site.IrradianceThreshold, 50)
A site can be set to disregard irradiance completely on the site details page:
If enabled, and the last irradiance data was reported in the past 30 minutes, then we check the last irradiance value reported. If it exceeds the irradiance threshold (50 W/m2 by default, but can be set explicitly for a site on the site details page), then we expect the site to be producing energy during daylight hours as explained above.
Relevant Source Code for System Status Determination
`system`.StatusCode =
CASE
WHEN production_device_summary.SystemID IS NULL
THEN
1 #'NORMAL'
WHEN production_device_summary.LastReportUTC IS NULL
THEN
2 #'COM ERR'
WHEN #MANA-1216 for PV OUTPUT devices take business hours into account only:
production_device_summary.BusinessMinutesSinceLastReport > COALESCE(`system`.ComErrTimeout, 120)
THEN
3 #'COM ERR'
WHEN COALESCE(production_device_summary.CurrentOutput, 0) >= COALESCE(`system`.NotProducingThreshold, `system`.ModuleOutput * 0.01, 5)
THEN
4 #PRODUCING/OVER-UNDER
WHEN /* Current output is below 1% during the solar day (checked previously)
and generated yesterday AND generated today is under threshold
irradiance doesn't matter
*/
TIME(`system`.SiteTime) < site.SiteDayEnd
AND ( system_stats.PerformanceRatioToday IS NULL
OR system_stats.PerformanceRatioYesterday IS NULL)
AND COALESCE(production_device_summary.GeneratedYesterday, 0)
< COALESCE(`system`.ModuleOutput *
(TIMESTAMPDIFF(MINUTE,
site.SiteDayStart,
site.SiteDayEnd
)/60) * COALESCE(site.NotProducingThresholdPct, 0.05), 1)
AND #kWh, MANA-607, MANA-551
COALESCE(production_device_summary.GeneratedToday, 0)
< COALESCE(`system`.ModuleOutput
* TIMESTAMPDIFF(MINUTE,
site.SiteDayStart,
site.SiteDayEnd
)/60 * COALESCE(site.NotProducingThresholdPct, 0.05), 1)
THEN
5 #'NOT PRODUCING'
WHEN /* Current output is below 1% during the solar day (checked previously)
and generated yesterday AND generated today is under threshold
irradiance doesn't matter
*/
TIME(`system`.SiteTime) < site.SiteDayEnd
AND system_stats.PerformanceRatioToday IS NOT NULL
AND system_stats.PerformanceRatioYesterday IS NOT NULL
AND system_stats.PerformanceRatioYesterday < COALESCE(site.NotProducingThresholdPct, 0.05)
AND system_stats.PerformanceRatioToday < COALESCE(site.NotProducingThresholdPct, 0.05)
THEN
55 #'NOT PRODUCING'
WHEN /* Current output is below 1% during the solar day (checked previously)
and last report is today after day start + NotProducingNotificationTimeout and before day end
and irradiance shouldn't be taken into account or irradiance is above threshold (MANA-2402)
*/
COALESCE(`system`.NotProducingNotificationTimeout, 120) < TIMESTAMPDIFF(MINUTE, site.SiteDayStart, site.SiteDayEnd)
AND DATE(production_device_summary.LastReport) = DATE(`system`.SiteTime)
AND TIME(production_device_summary.LastReport)
BETWEEN (site.SiteDayStart + INTERVAL COALESCE(`system`.NotProducingNotificationTimeout, 120) MINUTE) AND site.SiteDayEnd
AND (
NOT(site.SystemStatusConsidersIrradiance)
OR device_irradiance_stats.ID IS NULL
OR ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, production_device_summary.LastReportUTC)) > 30
OR device_irradiance_stats.LastIrradiance > COALESCE(site.IrradianceThreshold, 50)
)
# No other check - current output should be at least 1% during the solar day
/* A nice check for above condition:
SELECT EnergyProduced / 3600000,
`system`.ModuleOutput,
CASE WHEN EnergyProduced / 3600000 < COALESCE(`system`.NotProducingThreshold, `system`.ModuleOutput * 0.01, 1) THEN 'X' ELSE NULL END
FROM device_readout_hourly
INNER JOIN device ON device.ID = device_readout_hourly.DeviceID
INNER JOIN `system` ON `system`.ID = device.SystemID
WHERE DATE(ReferenceDateTimeLocal) = '2017-07-21' AND HOUR(ReferenceDateTimeLocal) = 7
*/
THEN
6 #'NOT PRODUCING'
WHEN /* Current output is below 1% during the solar day (checked previously)
and last report is today after day end
and generated today is less than the threshold then NOT PRODUCING */
DATE(production_device_summary.LastReport) = DATE(`system`.SiteTime)
AND TIME(production_device_summary.LastReport) > site.SiteDayEnd
AND system_stats.PerformanceRatioToday IS NULL
AND #kWh, MANA-607, MANA-551, should have produced at least at 10% for each hour since 7 am today
COALESCE(production_device_summary.GeneratedToday, 0)
< COALESCE(`system`.ModuleOutput
* TIMESTAMPDIFF(MINUTE,
site.SiteDayStart,
site.SiteDayEnd
)/60 * COALESCE(site.NotProducingThresholdPct, 0.05), 1)
THEN
7 #'NOT PRODUCING'
WHEN /* Current output is below 1% during the solar day (checked previously)
and last report is today after day end
and generated today is less than the threshold then NOT PRODUCING */
DATE(production_device_summary.LastReport) = DATE(`system`.SiteTime)
AND TIME(production_device_summary.LastReport) > site.SiteDayEnd
AND system_stats.PerformanceRatioToday IS NOT NULL
AND system_stats.PerformanceRatioToday
< COALESCE(site.NotProducingThresholdPct, 0.05)
THEN
77 #'NOT PRODUCING'
WHEN /* MANA-2371: if last status was NOT PRODUCING then we stay with that until production excedes the threshold */
`system`.Status = 'NOT PRODUCING'
THEN
8 #'NOT PRODUCING'
ELSE
9 #PRODUCING/OVER-UNDER
END
Automatic Determination of System Status for a Aggregator Systems
Aggregator systems are systems without a primary physical production metering device, but with subsystems.
The status of these systems is determined based on the status of the subsystems, in the following order of precedence:
- If any of the subsystems have status "NORMAL", then the aggregator system has status "NORMAL"
- If any of the subsystems have status "OVERPRODUCING", then the aggregator system has status "OVERPRODUCING"
- If any of the subsystems have status "UNDERPRODUCING", then the aggregator system has status "UNDERPRODUCING"
- If any of the subsystems have status "NOT PRODUCING", then the aggregator system has status "NOT PRODUCING"
- If any of the subsystems have status "COM ERR", then the aggregator system has status "COM ERR"
Relevant Source Code for Aggregator System Status Determination
CASE MIN(
CASE
WHEN uh.`Status` = 'COM ERR' THEN 4
WHEN uh.`Status` = 'NOT PRODUCING' THEN 3
WHEN uh.`Status` = 'UNDERPERFORMING' THEN 2
WHEN uh.`Status` = 'OVERPERFORMING' THEN 1
WHEN uh.`Status` = 'NORMAL' THEN 0
END
)
WHEN 4 THEN 'COM ERR'
WHEN 3 THEN 'NOT PRODUCING'
WHEN 2 THEN 'UNDERPERFORMING'
WHEN 1 THEN 'OVERPERFORMING'
ELSE 'NORMAL'
END AS `Status`
PV Site/System Status Icon
The icon shown in the maps can be one of:
The icon shown is loosely determined by the status of the system based on the following logic (in order of precedence):
- System status is COM ERR/NOT PRODUCING: thunderstorm
- If system has children or grandchildren, and any of the children/grandchildren are COM ERR/NOT PRODUCING:
- and site takes irradiance into account and irradiance is available and above the irradiance threshold (see footnote *8 above) then: sunny+thunderstorm
- and site time is during the expected solar production period (see *4 above) then: sunny+thunderstorm
- otherwise moon+thunderstorm
- Latest power reading was obtained in the past 30 minutes and exceeds the minimum production threshold*3 then: sunny
- Site is set to consider irradiance and the latest irradiance readout was within the past 30 minutes and exceeds the threshold then (see *8 above for more details): sunny
- Site local time is within the Expected Production Period (see *4 above): sunny
- Otherwise: moon
Relevant Source Code
CASE WHEN`system`.`Status` IN ('COM ERR', 'NOT PRODUCING')
THEN
'thunderstorm.png'
WHEN vw_system_l2children.ParentID IS NOT NULL
AND vw_system_l2children.SubSystemsStatus IN ('COM ERR', 'NOT PRODUCING')
THEN
CASE WHEN site.SystemStatusConsidersIrradiance
AND device_irradiance_stats.ID IS NOT NULL
AND ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, UTC_TIMESTAMP)) <= 30
AND device_irradiance_stats.LastIrradiance > COALESCE(site.IrradianceThreshold, 50)
AND HOUR(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC'))) BETWEEN 5 AND 21
THEN
'sunny+thunderstorm.png'
WHEN TIME(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC')))
BETWEEN COALESCE(NULLIF(site.DayStart, '00:00:00'),
COALESCE(GREATEST(TIME(site.SunriseToday)+INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('080000' AS TIME)), CAST('080000' AS TIME))
) AND COALESCE(NULLIF(site.DayEnd, '00:00:00'),
COALESCE(LEAST(TIME(site.SunsetToday)-INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('190000' AS TIME)), CAST('190000' AS TIME))
)
THEN
'sunny+thunderstorm.png'
ELSE
'moon+thunderstorm_v3.png'
END
WHEN vw_system_l1children.ParentID IS NOT NULL
AND vw_system_l1children.SubSystemsStatus IN ('COM ERR', 'NOT PRODUCING')
THEN
CASE WHEN site.SystemStatusConsidersIrradiance
AND device_irradiance_stats.ID IS NOT NULL
AND ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, UTC_TIMESTAMP)) <= 30
AND device_irradiance_stats.LastIrradiance > COALESCE(site.IrradianceThreshold, 50)
AND HOUR(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC'))) BETWEEN 5 AND 21
THEN
'sunny+thunderstorm.png'
WHEN TIME(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC')))
BETWEEN COALESCE(NULLIF(site.DayStart, '00:00:00'), COALESCE(GREATEST(TIME(site.SunriseToday)+INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('080000' AS TIME)), CAST('080000' AS TIME)))
AND COALESCE(NULLIF(site.DayEnd, '00:00:00'), COALESCE(LEAST(TIME(site.SunsetToday)-INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('190000' AS TIME)), CAST('190000' AS TIME)))
THEN
'sunny+thunderstorm.png'
ELSE
'moon+thunderstorm_v3.png'
END
WHEN COALESCE(`system`.CurrentProductionPower, 0) > COALESCE(`system`.NotProducingThreshold, `system`.ModuleOutput * 0.01, 5)
AND ABS(TIMESTAMPDIFF(MINUTE, `system`.LastProductionReport, CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC')))) < 30
THEN
CASE WHEN site.SystemStatusConsidersIrradiance
AND device_irradiance_stats.ID IS NOT NULL
AND ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, UTC_TIMESTAMP)) <= 30
AND device_irradiance_stats.LastIrradiance < COALESCE(site.IrradianceThreshold, 50)
AND NOT(TIME(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC')))
BETWEEN (LEAST(
COALESCE(NULLIF(site.DayStart, '00:00:00'), CAST('120000' AS TIME)),
COALESCE(TIME(site.SunriseToday), CAST('120000' AS TIME)),
CAST('080000' AS TIME)) - INTERVAL _offsetFromDayStartAndEnd MINUTE)
AND (GREATEST(
COALESCE(NULLIF(site.DayEnd, '00:00:00'), CAST('120000' AS TIME)),
COALESCE(TIME(site.SunsetToday), CAST('120000' AS TIME)),
CAST('190000' AS TIME)) + INTERVAL _offsetFromDayStartAndEnd MINUTE)
) # Subtract and add here, unlike in other places, so we make sure not to show the question mark while it's daylight
THEN # Power is being generated and it is nighttime according to irradiance
'sunny.png' # Zoli wants this off: 'sunny+info_circle.png'
ELSE # Power is being generated and it is daytime or no irradiance readouts exist
'sunny.png'
END
WHEN site.SystemStatusConsidersIrradiance
AND device_irradiance_stats.ID IS NOT NULL
AND ABS(TIMESTAMPDIFF(MINUTE, device_irradiance_stats.LastIrradianceReferenceDateTimeUTC, UTC_TIMESTAMP)) <= 30
AND device_irradiance_stats.LastIrradiance > COALESCE(site.IrradianceThreshold, 50)
AND HOUR(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC'))) BETWEEN 5 AND 21
THEN
'sunny.png'
WHEN TIME(CONVERT_TZ(UTC_TIMESTAMP(), 'UTC', COALESCE(site_time_zone.MysqlName, 'UTC')))
BETWEEN COALESCE(NULLIF(site.DayStart, '00:00:00'), COALESCE(GREATEST(TIME(site.SunriseToday)+INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('080000' AS TIME)), CAST('080000' AS TIME)))
AND COALESCE(NULLIF(site.DayEnd, '00:00:00'), COALESCE(LEAST(TIME(site.SunsetToday)-INTERVAL _offsetFromDayStartAndEnd MINUTE, CAST('190000' AS TIME)), CAST('190000' AS TIME)))
THEN
'sunny.png'
ELSE
'moon.png'
END
Consumption Sites
A system with a PRIMARY Total Consumption or Load type device is considered a consumption system. A consumption system can have one of the following technical statuses:
- COM ERR: Mana has been unable to communicate with the primary consumption device past a timeout period
- NORMAL: site consumption is being reported normally
These are the statuses shown on the site details page. An explanation of why a site is assigned a given status can be obtained by hovering the mouse over the status button:
The consumption status is also shown on the systems list page:
"Consumption Status" here can be one of:
- PRODUCING (consumption device is reporting values)
- COM ERR
Automatic Determination of System Status for a System with a Primary Device
The status of a system with a primary consumption device is determined according to the following rules, shown in order or priority, i.e. whichever rule matches first determines the status. All rules are run against the readings obtained from the primary consumption meter set for the system. The primary device is indicated by the words (PRIMARY) on the site details page:
Rules:
- Mana has never obtained any readings from the device: COM ERR
- The COM ERR timeout set for the system has passed since the device reported any readings: COM ERR
- Otherwise: NORMAL
Automatic Determination of System Status for a Aggregator Systems
Aggregator systems are systems without a primary physical production metering device, but with subsystems.
The status of these systems is determined based on the status of the subsystems, in the following order of precedence:
- If any of the subsystems have status "NORMAL", then the aggregator system has status "NORMAL"
- If any of the subsystems have status "COM ERR", then the aggregator system has status "COM ERR"
PV Site/System Status Icon
The icon shown in the maps can be one of:
The icon shown is loosely determined by the status of the system based on the following logic (in order of precedence):
- System status is COM ERR: red triangle
- If system has children or grandchildren, and any of the children/grandchildren are COM ERR: lightbulb + red triangle
- If the device has reported non-zero values in the past twelve hours, then: yellow lightbulb
- Otherwise: white lightbulb
Hybrid Sites
Sites with both production and consumption devices are considered hybrid sites. These sites have both a production and a consumption status in the sites list page. On the map, the status of the production device takes precedence over the status of the consumption device.
The following additional icons are available for use, but not currently in use:
No Comments