public async Task <WriteResult> WriteAsync(SystemProduction systemProduction, List <Inverter> inverters) { var data = new StringBuilder(); data.Append($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] systemProduction: "); data.Append($"ReadingTime: {systemProduction.ReadingTime}, "); data.Append($"ActiveCount: {systemProduction.ActiveCount}, "); data.Append($"WhLifeTime: {systemProduction.WhLifeTime}, "); data.Append($"WNow: {systemProduction.WNow}"); data.AppendLine(); foreach (var inverter in inverters) { data.Append($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] inverter: "); data.Append($"SerialNumber: {inverter.DeviceInfo.SerialNum}, "); data.Append($"LastReportDate: {inverter.Production.LastReportDate}, "); data.Append($"LastReportWatts: {inverter.Production.LastReportWatts}, "); data.Append($"MaxReportWatts: {inverter.Production.MaxReportWatts}"); data.AppendLine(); } await File.AppendAllTextAsync(file, data.ToString()); return(WriteResult.Success); }
private bool AddSystemProductionToPayload(SystemProduction systemProduction, LineProtocolPayload payload) { if (systemProduction.ReadingTime <= 0) { return(false); } var readingTime = DateTimeOffset.FromUnixTimeSeconds(systemProduction.ReadingTime); var systemPoint = new LineProtocolPoint( "inverters", //Measurement new Dictionary <string, object> //Fields { { $"activecount", systemProduction.ActiveCount }, { $"whlifetime", systemProduction.WhLifeTime }, { $"WNow", systemProduction.WNow }, }, new Dictionary <string, string> //Tags { }, readingTime.UtcDateTime); //Timestamp payload.Add(systemPoint); return(true); }
public async Task <WriteResult> WriteAsync(SystemProduction systemProduction, List <Inverter> inverters) { if (systemProduction.ReadingTime <= 0) { return(WriteResult.NoNeedToWrite); } using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("X-Pvoutput-Apikey", apiKey); client.DefaultRequestHeaders.Add("X-Pvoutput-SystemId", systemId); var parameters = new List <KeyValuePair <string, string> >(); AddFixedParameters(systemProduction, parameters); await AddWeatherParameters(parameters); using (var response = await client.PostAsync(AddStatusUrl, new FormUrlEncodedContent(parameters))) { if (!response.IsSuccessStatusCode) { var responseData = await response.Content.ReadAsStringAsync(); throw new Exception(responseData); } } } return(WriteResult.Success); }
private static void AddFixedParameters(SystemProduction systemProduction, List <KeyValuePair <string, string> > parameters) { var readingTime = DateTimeOffset.FromUnixTimeSeconds(systemProduction.ReadingTime); var localTime = readingTime.ToLocalTime(); parameters.AddRange(new[] { new KeyValuePair <string, string>("d", localTime.ToString("yyyyMMdd")), new KeyValuePair <string, string>("t", localTime.ToString("HH:mm")), new KeyValuePair <string, string>("v1", systemProduction.WhLifeTime.ToString(CultureInfo.InvariantCulture)), //Energy Generation new KeyValuePair <string, string>("v2", systemProduction.WNow.ToString(CultureInfo.InvariantCulture)), //Power Generation new KeyValuePair <string, string>("c1", "1"), //Cumulative }); }
private static async Task WriteToOutput(List <Inverter> inverters, SystemProduction systemProduction, IOutput output) { var name = output.GetType().Name; Console.WriteLine($"Try to write to {name}"); var result = await output.WriteAsync(systemProduction, inverters); switch (result) { case WriteResult.NoNeedToWrite: Console.WriteLine($"No need to write to {name}"); break; case WriteResult.Success: Console.WriteLine($"Successfully written to {name}"); break; } }
public async Task <WriteResult> WriteAsync(SystemProduction systemProduction, List <Inverter> inverters) { var payload = new LineProtocolPayload(); var systemPayloadAdded = AddSystemProductionToPayload(systemProduction, payload); var invertersPayloadAdded = AddInvertersToPayload(inverters, payload); if (!systemPayloadAdded && !invertersPayloadAdded) { return(WriteResult.NoNeedToWrite); } var client = new LineProtocolClient(url, database); var writeResult = await client.WriteAsync(payload); if (!writeResult.Success) { throw new Exception(writeResult.ErrorMessage); } return(WriteResult.Success); }