//Define Route [Primary Source -- Secoundry Source ] //Calculate Avg And insert It // api ///api/source?pid=12&pv1=0.0&pv2=0.0&pv3=0.0&pI1=0.0&pI2=0.0&pI3=0.0&ppf1=0.0&ppf2=0.0&ppf3=0.0&pfreq1=0.0&pfreq2=0.0&pfreq3=0.0&pp1=0.0&pp2=0.0&pp3=0.0&pho=0.0&pIo=0.0&ptime=156777789877 public async Task <string> DoProcess(querySource query) { if (Context.PrimarySource.FirstOrDefault(n => n.Code == query.code) != null) { var line = Context.PrimarySource.Single(n => n.Code == query.code); if (query.PowerFactor1 == -1) { query.PowerFactor1 = 0; } if (query.PowerFactor2 == -1) { query.PowerFactor2 = 0; } if (query.PowerFactor3 == -1) { query.PowerFactor3 = 0; } if (query.frequency1 == -1) { query.frequency1 = 0; } if (query.frequency2 == -1) { query.frequency2 = 0; } if (query.frequency3 == -1) { query.frequency3 = 0; } var Model = new SourceReading() { Fac_Id = line.FactoryId, Voltage1 = query.Voltage1, Current1 = query.Current1, PowerFactor1 = query.PowerFactor1, frequency1 = query.frequency1, Power1 = query.Power1, Voltage2 = query.Voltage2, Current2 = query.Current2, PowerFactor2 = query.PowerFactor2, frequency2 = query.frequency2, Power2 = query.Power2, Voltage3 = query.Voltage3, Current3 = query.Current3, PowerFactor3 = query.PowerFactor3, frequency3 = query.frequency3, Power3 = query.Power3, mCurrent1 = query.mCurrent1, mCurrent2 = query.mCurrent2, mCurrent3 = query.mCurrent3, HarmonicOrder = query.HarmonicOrder, HarmonicOrder1 = query.HarmonicOrder1, HarmonicOrder2 = query.HarmonicOrder2, HarmonicOrder3 = query.HarmonicOrder3, ReturnCurrent = query.ReturnCurrent, PrimarySourceId = Convert.ToInt32(line.Code), SecondarySourceId = null, TimeStamp = query.Timestamp }; //avg calc by yasser CurrentValuesList.Add(query.Current1); CurrentValues2List.Add(query.Current2); CurrentValues3List.Add(query.Current3); if (CurrentValuesList.Count() == 10) { var avg1 = CurrentValuesList.Average(); var avg2 = CurrentValues2List.Average(); var avg3 = CurrentValues3List.Average(); // var avg = new SourceAvg() { Current1Avg = avg1, Time = DateTime.Now, PrimarySourceId = line.Id, SecondarySourceId = null, Current2Avg = avg2, Current3Avg = avg3 }; //save into Database await Context.SourceAvgs.AddAsync(avg); await Context.SaveChangesAsync(); //clear list CurrentValuesList = new List <decimal>(); CurrentValues2List = new List <decimal>(); CurrentValues3List = new List <decimal>(); } Context.SourceReading.Add(Model); await Context.SaveChangesAsync(); // peak calc peakPower(Model); return($"Ok," + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); } else if (Context.secondarySource.FirstOrDefault(n => n.Code == query.code) != null) { var line = Context.secondarySource.Single(n => n.Code == query.code); if (query.PowerFactor1 == -1) { query.PowerFactor1 = 0; } if (query.PowerFactor2 == -1) { query.PowerFactor2 = 0; } if (query.PowerFactor3 == -1) { query.PowerFactor3 = 0; } if (query.frequency1 == -1) { query.frequency1 = 0; } if (query.frequency2 == -1) { query.frequency2 = 0; } if (query.frequency3 == -1) { query.frequency3 = 0; } var Model = new SourceReading() { Fac_Id = line.Fac_Id, Voltage1 = query.Voltage1, Current1 = query.Current1, PowerFactor1 = query.PowerFactor1, frequency1 = query.frequency1, Power1 = query.Power1, Voltage2 = query.Voltage2, Current2 = query.Current2, PowerFactor2 = query.PowerFactor2, frequency2 = query.frequency2, Power2 = query.Power2, Voltage3 = query.Voltage3, Current3 = query.Current3, PowerFactor3 = query.PowerFactor3, frequency3 = query.frequency3, Power3 = query.Power3, ReturnCurrent = query.ReturnCurrent, PrimarySourceId = null, SecondarySourceId = Convert.ToInt32(line.Code), TimeStamp = query.Timestamp, mCurrent1 = query.mCurrent1, mCurrent2 = query.mCurrent2, mCurrent3 = query.mCurrent3, HarmonicOrder = query.HarmonicOrder, HarmonicOrder1 = query.HarmonicOrder1, HarmonicOrder2 = query.HarmonicOrder2, HarmonicOrder3 = query.HarmonicOrder3, }; CurrentValuesList.Add(query.Current1); CurrentValues2List.Add(query.Current2); CurrentValues3List.Add(query.Current3); if (CurrentValuesList.Count() == 10) { var avg1 = CurrentValuesList.Average(); var avg2 = CurrentValues2List.Average(); var avg3 = CurrentValues3List.Average(); // adding to avg tbl var avg = new SourceAvg() { Current1Avg = avg1, Time = DateTime.Now, PrimarySourceId = null, SecondarySourceId = Convert.ToInt32(line.Code), Current2Avg = avg2, Current3Avg = avg3 }; //save into Database await Context.SourceAvgs.AddAsync(avg); await Context.SaveChangesAsync(); //clear list CurrentValuesList = new List <decimal>(); CurrentValues2List = new List <decimal>(); CurrentValues3List = new List <decimal>(); } Context.SourceReading.Add(Model); await Context.SaveChangesAsync(); peakPower(Model); return($"Ok," + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); // peak calc } else { return("worng format or missing Code"); } }
public async Task <string> source() { var queryString = HttpContext.Request.Query; if (counter == 0) { //first Request counter++; var values = queryString.Where(o => o.Key.StartsWith("x")).ToDictionary(o => o.Key); var data = new querySource(); if (values["xt"].Value == "-1") { data.Timestamp = DateTime.Now; } else { if (Int64.TryParse(values["xt"].Value, out timevalue)) { DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timevalue); data.Timestamp = dateTimeOffset.LocalDateTime; } } data.code = values["xid"].Value; data.Voltage1 = Convert.ToDecimal(values["xv1"].Value); data.Voltage2 = Convert.ToDecimal(values["xv2"].Value); data.Voltage3 = Convert.ToDecimal(values["xv3"].Value); data.Current1 = Convert.ToDecimal(values["xi1"].Value); data.Current2 = Convert.ToDecimal(values["xi2"].Value); data.Current3 = Convert.ToDecimal(values["xi3"].Value); data.mCurrent1 = Convert.ToDecimal(values["xii1"].Value); data.mCurrent2 = Convert.ToDecimal(values["xii2"].Value); data.mCurrent3 = Convert.ToDecimal(values["xii3"].Value); data.PowerFactor1 = Convert.ToDecimal(values["xpf1"].Value); data.PowerFactor2 = Convert.ToDecimal(values["xpf2"].Value); data.PowerFactor3 = Convert.ToDecimal(values["xpf3"].Value); data.frequency1 = Convert.ToDecimal(values["xf1"].Value); data.frequency2 = Convert.ToDecimal(values["xf2"].Value); data.frequency3 = Convert.ToDecimal(values["xf3"].Value); data.Power1 = Convert.ToDecimal(values["xp1"].Value); data.Power2 = Convert.ToDecimal(values["xp2"].Value); data.Power3 = Convert.ToDecimal(values["xp3"].Value); data.HarmonicOrder = Convert.ToDecimal(values["xho"].Value); data.HarmonicOrder1 = Convert.ToDecimal(values["xho1"].Value); data.HarmonicOrder2 = Convert.ToDecimal(values["xho2"].Value); data.HarmonicOrder3 = Convert.ToDecimal(values["xho3"].Value); data.ReturnCurrent = Convert.ToDecimal(values["xi0"].Value); //past Value CurrentValue = Convert.ToDecimal(values["xi1"].Value); CurrentValue2 = Convert.ToDecimal(values["xi2"].Value); CurrentValue3 = Convert.ToDecimal(values["xi3"].Value); var result = await DoProcess(data); //return await result; return($"Ok," + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); } else { //Secound Request counter = 0; var values = queryString.Where(o => o.Key.StartsWith("x")).ToDictionary(o => o.Key); var data = new querySource(); if (values["xt"].Value == "-1") { data.Timestamp = DateTime.Now; } else { if (Int64.TryParse(values["xt"].Value, out timevalue)) { DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeSeconds(timevalue); data.Timestamp = dateTimeOffset.LocalDateTime; } } data.code = values["xid"].Value; data.Voltage1 = Convert.ToDecimal(values["xv1"].Value); data.Voltage2 = Convert.ToDecimal(values["xv2"].Value); data.Voltage3 = Convert.ToDecimal(values["xv3"].Value); data.Current1 = Convert.ToDecimal(values["xi1"].Value); data.Current2 = Convert.ToDecimal(values["xi2"].Value); data.Current3 = Convert.ToDecimal(values["xi3"].Value); data.mCurrent1 = Convert.ToDecimal(values["xii1"].Value); data.mCurrent2 = Convert.ToDecimal(values["xii2"].Value); data.mCurrent3 = Convert.ToDecimal(values["xii3"].Value); data.PowerFactor1 = Convert.ToDecimal(values["xpf1"].Value); data.PowerFactor2 = Convert.ToDecimal(values["xpf2"].Value); data.PowerFactor3 = Convert.ToDecimal(values["xpf3"].Value); data.frequency1 = Convert.ToDecimal(values["xf1"].Value); data.frequency2 = Convert.ToDecimal(values["xf2"].Value); data.frequency3 = Convert.ToDecimal(values["xf3"].Value); data.Power1 = Convert.ToDecimal(values["xp1"].Value); data.Power2 = Convert.ToDecimal(values["xp2"].Value); data.Power3 = Convert.ToDecimal(values["xp3"].Value); data.HarmonicOrder = Convert.ToDecimal(values["xho"].Value); data.HarmonicOrder1 = Convert.ToDecimal(values["xho1"].Value); data.HarmonicOrder2 = Convert.ToDecimal(values["xho2"].Value); data.HarmonicOrder3 = Convert.ToDecimal(values["xho3"].Value); data.ReturnCurrent = Convert.ToDecimal(values["xi0"].Value); var newCurrent = Convert.ToDecimal(values["xi1"].Value); var newCurrent2 = Convert.ToDecimal(values["xi2"].Value); var newCurrent3 = Convert.ToDecimal(values["xi3"].Value); // abs values For [new values - old values ] var currentSub = CurrentValue - newCurrent; var currentSub2 = CurrentValue2 - newCurrent2; var currentSub3 = CurrentValue3 - newCurrent3; // abs currentSub = Math.Abs(currentSub); currentSub2 = Math.Abs(currentSub2); currentSub3 = Math.Abs(currentSub3); //Detect Spike if (currentSub >= threshold || currentSub2 >= threshold || currentSub3 >= threshold) { var lineId = 0; var code = values["xid"].Value; if (Context.secondarySource.FirstOrDefault(n => n.Code == code) != null) { lineId = Context.secondarySource.Single(n => n.Code == code).Id; } else { lineId = Context.PrimarySource.Single(n => n.Code == code).Id; } if (currentSub >= threshold) { var Spikelogs = new CurrentSpikeLogs() { Value = currentSub, Time = DateTime.Now, //SourceId = lineId, PhaseName = "I1", SourceCode = code, }; await Context.CurrentSpikeLogs.AddAsync(Spikelogs); await Context.SaveChangesAsync(); } if (currentSub2 >= threshold) { var Spikelogs = new CurrentSpikeLogs() { Value = currentSub2, Time = DateTime.Now, //SourceId = lineId, PhaseName = "I2", SourceCode = code }; await Context.CurrentSpikeLogs.AddAsync(Spikelogs); await Context.SaveChangesAsync(); } if (currentSub3 >= threshold) { var Spikelogs = new CurrentSpikeLogs() { Value = currentSub3, Time = DateTime.Now, // SourceId = lineId, PhaseName = "I3", SourceCode = code }; await Context.CurrentSpikeLogs.AddAsync(Spikelogs); await Context.SaveChangesAsync(); } CurrentValue = 0; CurrentValue2 = 0; CurrentValue3 = 0; var result = await DoProcess(data); //return await result; return($"Ok," + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); } else { var result = await DoProcess(data); // return await result; return($"Ok," + DateTimeOffset.UtcNow.ToUnixTimeSeconds()); } } }