Ejemplo n.º 1
0
        //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");
            }
        }
Ejemplo n.º 2
0
        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());
                }
            }
        }