Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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
            });
        }
Пример #5
0
        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;
            }
        }
Пример #6
0
        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);
        }