Info
Content

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:
  1. System has no production device: NORMAL

  2. Mana has never obtained any readings from the device: COM ERR

  3. 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

  4. 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).

  5. Site time is before the end of the Expected Production Period4 and...

    1. 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*5NOT PRODUCING

    2. 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.
  6. 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)

  7. Site last reported after the solar day end (minus a dawn/dusk offset*7), and...
    1. 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
    2. 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
  8. 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)

  9. In all other cases: 
    1. 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
    2. 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
    3. 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:

  1. System has no production device: NORMAL

  2. Mana has never obtained any readings from the device: COM ERR

  3. 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

  4. Current power output exceeds the minimum production threshold*3: NORMAL/OVER-/UNDER-PRODUCING (see step #9 below for criteria)

  5. 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)

  6. When the timeout is at least 1440 minutes (1 day) 
    1. 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)
    2. 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.)
  7. When the timeout is at least 2880 minutes (2 days)
    1. 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)
    2. 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.)
  8. When the timeout is at least 4320 minutes (3 days)
    1. 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)
    2. 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.)
  9. 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:

  1. If any of the subsystems have status "NORMAL", then the aggregator system has status "NORMAL"
  2. If any of the subsystems have status "OVERPRODUCING", then the aggregator system has status "OVERPRODUCING"
  3. If any of the subsystems have status "UNDERPRODUCING", then the aggregator system has status "UNDERPRODUCING"
  4. If any of the subsystems have status "NOT PRODUCING", then the aggregator system has status "NOT PRODUCING"
  5. 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):

  1. System status is COM ERR/NOT PRODUCING: thunderstorm

  2. If system has children or grandchildren, and any of the children/grandchildren are COM ERR/NOT PRODUCING:
    1. and site takes irradiance into account and irradiance is available and above the irradiance threshold (see footnote *8 above) then: sunny+thunderstorm
    2. and site time is during the expected solar production period (see *4 above) then: sunny+thunderstorm
    3. otherwise moon+thunderstorm
  3. Latest power reading was obtained in the past 30 minutes and exceeds the minimum production threshold*3 then: sunny

  4. 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

  5. Site local time is within the Expected Production Period (see *4 above): sunny
  6. 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:

  1. Mana has never obtained any readings from the device: COM ERR
  2. The COM ERR timeout set for the system has passed since the device reported any readings: COM ERR
  3. 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:

  1. If any of the subsystems have status "NORMAL", then the aggregator system has status "NORMAL"
  2. 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):

  1. System status is COM ERR: red triangle
  2. If system has children or grandchildren, and any of the children/grandchildren are COM ERR: lightbulb + red triangle
  3. If the device has reported non-zero values in the past twelve hours, then: yellow lightbulb
  4. 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
Back to top