每小時背景執行 加入新的設備計算(風向計、累計日照量)
This commit is contained in:
parent
6d3bcb7d0d
commit
355ad96330
@ -21,7 +21,9 @@ namespace SolarPower.Models.PowerStation
|
||||
EMM = 4, //環境濕度計
|
||||
VAN = 5, //風速計
|
||||
FOM = 6, //落塵計
|
||||
PWR = 7 //電錶
|
||||
PWR = 7, //電錶
|
||||
WIN = 8, //風向計
|
||||
TPY = 9 //累計日照量
|
||||
}
|
||||
|
||||
public class PowerStation : Created
|
||||
@ -729,6 +731,8 @@ namespace SolarPower.Models.PowerStation
|
||||
public double Humidity { get; set; } //濕度
|
||||
public double Vane { get; set; } //風速
|
||||
public double Dust { get; set; } //落塵計
|
||||
public double WingDirection { get; set; } //風向計
|
||||
public double IrrDay { get; set; } //累計日照量
|
||||
}
|
||||
|
||||
public class AvgPyrheliometerHistory
|
||||
|
||||
@ -428,7 +428,7 @@ namespace SolarPower.Quartz.Jobs
|
||||
logger.LogError("【CalcPowerStationJob】【失敗原因】- {0}", ex.Message);
|
||||
}
|
||||
|
||||
//5. 計算該電站 - 落塵計(FOM)
|
||||
//6. 計算該電站 - 落塵計(FOM)
|
||||
try
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始取得電站[{0}]在{1}的落塵計設備資訊】", powerStation.Code, dateTime);
|
||||
@ -452,6 +452,54 @@ namespace SolarPower.Quartz.Jobs
|
||||
logger.LogError("【CalcPowerStationJob】【失敗原因】- {0}", ex.Message);
|
||||
}
|
||||
|
||||
//7. 計算該電站 - 風向計(WIN)
|
||||
try
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始取得電站[{0}]在{1}的風向計設備資訊】", powerStation.Code, dateTime);
|
||||
var WINdeviceInfos = await powerStationRepository.GetDeviceListByPowerStationIdAndType(powerStation.Id, SensorTypeEnum.WIN.ToString(), powerStation.SiteDB);
|
||||
logger.LogInformation("【CalcPowerStationJob】【取得成功電站[{0}]在{1}的風向計設備資訊】", powerStation.Code, dateTime);
|
||||
logger.LogInformation("【CalcPowerStationJob】【電站[{0}]在{1}的風向計設備資訊】 - {2}", powerStation.Code, dateTime, System.Text.Json.JsonSerializer.Serialize(WINdeviceInfos));
|
||||
if (WINdeviceInfos != null && WINdeviceInfos.Count() > 0)
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始計算電站[{0}]在{1}的風向計的平均%】", powerStation.Code, dateTime);
|
||||
var WINHistory = await powerStationRepository.CalcSensorHistoryPerHour(dateTime, WINdeviceInfos, Convert.ToInt32(SensorTypeEnum.WIN));
|
||||
if (WINHistory != null)
|
||||
{
|
||||
sensorHistory.WingDirection = WINHistory.WingDirection;
|
||||
logger.LogInformation("【CalcPowerStationJob】【計算完成電站[{0}]在{1}的風向計的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError("【CalcPowerStationJob】【計算失敗電站[{0}]在{1}的風向計的平均值】", powerStation.Code, dateTime);
|
||||
logger.LogError("【CalcPowerStationJob】【失敗原因】- {0}", ex.Message);
|
||||
}
|
||||
|
||||
//8. 計算該電站 - 累計日照量(TPY)
|
||||
try
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始取得電站[{0}]在{1}的累計日照量設備資訊】", powerStation.Code, dateTime);
|
||||
var TPYdeviceInfos = await powerStationRepository.GetDeviceListByPowerStationIdAndType(powerStation.Id, SensorTypeEnum.TPY.ToString(), powerStation.SiteDB);
|
||||
logger.LogInformation("【CalcPowerStationJob】【取得成功電站[{0}]在{1}的累計日照量備資訊】", powerStation.Code, dateTime);
|
||||
logger.LogInformation("【CalcPowerStationJob】【電站[{0}]在{1}的累計日照量設備資訊】 - {2}", powerStation.Code, dateTime, System.Text.Json.JsonSerializer.Serialize(TPYdeviceInfos));
|
||||
if (TPYdeviceInfos != null && TPYdeviceInfos.Count() > 0)
|
||||
{
|
||||
logger.LogInformation("【CalcPowerStationJob】【開始計算電站[{0}]在{1}的累計日照量的平均%】", powerStation.Code, dateTime);
|
||||
var TPYHistory = await powerStationRepository.CalcSensorHistoryPerHour(dateTime, TPYdeviceInfos, Convert.ToInt32(SensorTypeEnum.TPY));
|
||||
if (TPYHistory != null)
|
||||
{
|
||||
sensorHistory.IrrDay = TPYHistory.IrrDay;
|
||||
logger.LogInformation("【CalcPowerStationJob】【計算完成電站[{0}]在{1}的累計日照量的平均值】", powerStation.Code, dateTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError("【CalcPowerStationJob】【計算失敗電站[{0}]在{1}的累計日照量的平均值】", powerStation.Code, dateTime);
|
||||
logger.LogError("【CalcPowerStationJob】【失敗原因】- {0}", ex.Message);
|
||||
}
|
||||
|
||||
sensorHistoriesHour.Add(sensorHistory);
|
||||
}
|
||||
|
||||
|
||||
@ -2523,26 +2523,41 @@ namespace SolarPower.Repository.Implement
|
||||
{
|
||||
SensorTypeEnum SensorTypeEnum = (SensorTypeEnum)type;
|
||||
var typename = "";
|
||||
var calc = "";
|
||||
switch (SensorTypeEnum)
|
||||
{
|
||||
case SensorTypeEnum.PYR: //日照計
|
||||
calc = "AVG";
|
||||
typename = "Irradiance";
|
||||
break;
|
||||
case SensorTypeEnum.MTR: //模組溫度計
|
||||
calc = "AVG";
|
||||
typename = "Temperature";
|
||||
break;
|
||||
case SensorTypeEnum.ETR: //環境溫度計
|
||||
calc = "AVG";
|
||||
typename = "EnvTemperature";
|
||||
break;
|
||||
case SensorTypeEnum.EMM: //環境濕度計
|
||||
calc = "AVG";
|
||||
typename = "Humidity";
|
||||
break;
|
||||
case SensorTypeEnum.VAN: //風速計
|
||||
calc = "AVG";
|
||||
typename = "Vane";
|
||||
break;
|
||||
case SensorTypeEnum.FOM: //落塵計
|
||||
calc = "AVG";
|
||||
typename = "Dust";
|
||||
break;
|
||||
case SensorTypeEnum.WIN: //風向計
|
||||
calc = "AVG";
|
||||
typename = "WingDirection";
|
||||
break;
|
||||
case SensorTypeEnum.TPY: //累計日照量
|
||||
calc = "MAX";
|
||||
typename = "IrrDay";
|
||||
break;
|
||||
}
|
||||
|
||||
PyrheliometerHistory result;
|
||||
@ -2563,7 +2578,7 @@ namespace SolarPower.Repository.Implement
|
||||
sql_per_device.Add(str);
|
||||
}
|
||||
|
||||
var sql = @$"SELECT a.TIMESTAMP, AVG(a.SENSOR) AS {typename} FROM(" + string.Join(" UNION ", sql_per_device) + @") a GROUP BY `TIMESTAMP`";
|
||||
var sql = @$"SELECT a.TIMESTAMP, {calc}(a.SENSOR) AS {typename} FROM(" + string.Join(" UNION ", sql_per_device) + @") a GROUP BY `TIMESTAMP`";
|
||||
|
||||
result = await conn.QueryFirstOrDefaultAsync<PyrheliometerHistory>(sql, new { DateTime = dateTime });
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user