public async Task <IActionResult> Edit(int id, [Bind("SensorGroupId,Name,Description")] SensorGroup sensorGroup)
        {
            if (id != sensorGroup.SensorGroupId)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(sensorGroup);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!SensorGroupExists(sensorGroup.SensorGroupId))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(sensorGroup));
        }
Beispiel #2
0
        public SensorGroup read_sensors()
        {
            SensorGroup main_group = new SensorGroup();

            main_group.source_id = source;
            main_group.name      = source;

            SensorNode node;

            node              = new SensorNode();
            node.source_id    = source;
            node.idx          = 0;
            node.identifier   = "hdkasdk";
            node.is_sensor    = true;
            node.name         = "Dummy Sensor 1";
            node.unit         = (int)SensorNodeBase.UnitType.Number;
            node.range        = (int)SensorNodeBase.Range.None;
            node.time_scale   = (int)SensorNodeBase.TimeScale.None;
            node.sensor_value = rnd_number.Next(2000, 10000) / 100.0;
            main_group.children.Add(node);

            node              = new SensorNode();
            node.source_id    = source;
            node.idx          = 0;
            node.identifier   = "loz9324zld";
            node.is_sensor    = true;
            node.name         = "Dummy Sensor 2";
            node.unit         = (int)SensorNodeBase.UnitType.Temperature;
            node.range        = (int)SensorNodeBase.Range.None;
            node.time_scale   = (int)SensorNodeBase.TimeScale.None;
            node.sensor_value = rnd_number.Next(5000, 7000) / 100.0;
            main_group.children.Add(node);

            return(main_group);
        }
Beispiel #3
0
        public SensorGroupViewModel(SensorGroup sensorGroup)
        {
            this.Id   = sensorGroup.Id;
            this.Name = sensorGroup.Name;

            if (!String.IsNullOrEmpty(sensorGroup.TimeStamp))
            {
                if (!String.IsNullOrEmpty(sensorGroup.Name))
                {
                    this.Name += " " + DateTimeUtil.HowLongAgo(sensorGroup.TimeStamp);
                }
            }

            List <SensorViewModel>      sensors = new List <SensorViewModel>();
            List <SensorValueViewModel> values  = new List <SensorValueViewModel>();

            if (sensorGroup.Items != null)
            {
                foreach (var sensor in sensorGroup.Items)
                {
                    if (sensor.Value?.Values != null)
                    {
                        var sensorViewModel = new SensorViewModel(sensor.Value);
                        if (sensorViewModel.Values != null && sensorViewModel.Values.Any())
                        {
                            values.AddRange(sensorViewModel.Values);
                        }
                    }
                }
            }

            this.Sensors      = sensors;
            this.SensorValues = values;
        }
Beispiel #4
0
        public static IAlgorithm CreateAlgorithm(SensorGroup group)
        {
            switch (group.GroupType)
            {
            case GroupType.Inclination:
                return(new DeepDisplacementAlgorithm(group));

                break;

            case GroupType.SaturationLine:
                return(new SaturationLineAlgorithm(group));

                break;

            case GroupType.Settlement:
                return(new SettlementAlgorithm(group));

                break;

            case GroupType.VirtualSensor:
                return(new VirtualSensorAlgorithm(group));

                break;

            default:
                break;
            }
            return(null);
        }
Beispiel #5
0
        public void ProbeMachine_Basic_Success()
        {
            // Setup

            // Act
            SensorGroup group = _data.ProbeMachine();

            // Assert
            group.ShouldNotBeNull();
        }
        public async Task <IActionResult> Create([Bind("SensorGroupId,Name,Description")] SensorGroup sensorGroup)
        {
            if (ModelState.IsValid)
            {
                _context.Add(sensorGroup);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(sensorGroup));
        }
Beispiel #7
0
        public static int Update(uint dtuId, SensorGroup group, IList <SensorAcqResult> acqRes, string taskId)
        {
            int calccnt = 0;

            if (_calcPlans.ContainsKey(group.GroupId))
            {
                var plan = _calcPlans[group.GroupId];
                IList <SensorAcqResult> calRes = null;
                if (plan.GetGuid() == taskId)
                {
                    plan.AddToPlan(dtuId, acqRes);
                    if (plan.IsReady())
                    {
                        if (plan.DoCalc(out calRes))
                        {
                            calccnt++;
                        }
                        if (calRes != null)
                        {
                            foreach (var sar in calRes)
                            {
                                acqRes.Add(sar);
                            }
                        }
                        CalcPlan cp;
                        _calcPlans.TryRemove(group.GroupId, out cp);
                    }
                }
                else //new round acquisition
                {
                    if (plan.DoCalc(out calRes))
                    {
                        calccnt++;
                    }
                    CalcPlan cp;
                    _calcPlans.TryRemove(group.GroupId, out cp);
                    var nplan = _calcPlans.GetOrAdd(group.GroupId, new CalcPlan(group, taskId));
                    nplan.AddToPlan(dtuId, acqRes);
                    if (calRes != null)
                    {
                        foreach (var sar in calRes)
                        {
                            acqRes.Add(sar);
                        }
                    }
                }
            }
            else
            {
                var nplan = _calcPlans.GetOrAdd(group.GroupId, new CalcPlan(group, taskId));
                nplan.AddToPlan(dtuId, acqRes);
            }
            return(calccnt);
        }
Beispiel #8
0
        public void ProbeMachine_UtilizationFirstTime_NonZero()
        {
            // Setup

            // Act
            SensorGroup group    = _data.ProbeMachine();
            SensorNode  utilNode = group.GetSensor("test", "utilization");

            // Assert
            utilNode.sensor_value.ShouldBeGreaterThan(0);
        }
Beispiel #9
0
        public CalcPlan(SensorGroup gp, string taskId)
        {
            _calcGroup = gp;
            _roundGuid = taskId;
            var dtus = gp.GetDtuIdList();

            foreach (var dtu in dtus)
            {
                DtuJobStatus.Add(dtu, false);
            }
        }
Beispiel #10
0
        /// <summary>
        /// is called every second from the service handler
        /// </summary>
        public void worker()
        {
            if (_dataSource == null)
            {
                return;
            }

            SensorGroup sensors = _dataSource.ProbeMachine();

            _sensorData   = sensors;
            _sensorUpdate = true;
        }
Beispiel #11
0
        public void ProbeMachine_UtilizationNextTime_NonZero()
        {
            // Setup

            // Act
            SensorGroup group1   = _data.ProbeMachine();
            SensorGroup group2   = _data.ProbeMachine();
            SensorNode  utilNode = group2.GetSensor("test", "utilization");

            // Assert
            utilNode.sensor_value.ShouldBe(15);
        }
Beispiel #12
0
        public SensorGroup read_sensors()
        {
            if (read_error_count > 10)
            {
                TimeSpan diff = DateTime.Now - last_read;
                if (diff.TotalSeconds > 30)
                {
                    read_error_count--; //allow one read out
                }
                else
                {
                    return(null);
                }
            }

            last_read = DateTime.Now;
            bool read_result = read();

            if (!read_result)
            {
                read_error_count++;
                return(null);
            }
            if (sensors == null || sensors.Length == 0 || groups == null || groups.Length == 0)
            {
                read_error_count++;
                return(null);
            }
            read_error_count = 0;

            SensorGroup main_group = new SensorGroup();

            main_group.source_id = source;
            main_group.name      = source;
            foreach (OhmGroup g in groups)
            {
                if (g != null)
                {
                    SensorGroup newGroup = new SensorGroup();
                    newGroup.name      = g.Name;
                    newGroup.source_id = source;
                    newGroup.children.AddRange(GetSensorsFromGroup(g.Identifier));
                    if (newGroup.children.Count > 0)
                    {
                        newGroup.children = newGroup.children.OrderBy(x => x.name).ToList();
                        main_group.children.Add(newGroup);
                    }
                }
            }
            return(main_group);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            string tid = Request.QueryString["group_id"];

            groupId = tid;
            if (!string.IsNullOrEmpty(tid) && int.TryParse(tid, out int g_id))
            {
                this.asensor = _db.Sensors.Where(a => a.GroupId == g_id).First();
                this.group   = _db.SensorGroups.SingleOrDefault(g => g.GroupID == g_id);

                //put the initial value to textbox
                if (!IsPostBack)
                {
                    alertTxt.Text = _db.AlertValues.SingleOrDefault(a => a.GroupID == g_id).Value.ToString();
                }

                var allSensorVal = _db.Sensors.Where(s => s.GroupId == g_id);

                // loop through all sensors and add into a list
                foreach (var sensor in allSensorVal)
                {
                    sensorValList.Add(sensor.SensorVal.ToString());
                    sensorDtList.Add(DateTime.Parse(sensor.TimeOperate.ToString()));
                }

                this.sensorValStr = "";
                //put the last five value into string
                for (int s = sensorValList.Count - 12; s < sensorValList.Count; s++)
                {
                    if (s > sensorValList.Count - 12)
                    {
                        this.sensorValStr += "~";
                        this.sensorDtStr  += "~";
                    }
                    this.sensorValStr += sensorValList[s].ToString();
                    this.sensorDtStr  += sensorDtList[s].TimeOfDay.ToString();
                }
            }
        }
Beispiel #14
0
 public CalcPlan(SensorGroup gp, int acqNum)
 {
     this._calcGroup = gp;
     this._acqNum    = acqNum;
 }
 public DeepDisplacementAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.DeepDisplaceAlgo;
 }
Beispiel #16
0
 public SettlementAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.SettlementAlgo;
 }
Beispiel #17
0
 public SaturationLineAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.SaturationLineAlgo;
 }
Beispiel #18
0
        public SensorGroup ProbeMachine()
        {
            _machineNow = _machine.CurrentDateTime;

            SensorGroup main_group = new SensorGroup()
            {
                name       = "xforma59 Plugin",
                source_id  = _source,
                identifier = _source,
            };

            main_group.children.Add(new SensorNode()
            {
                source_id    = _source,
                identifier   = "x-average-utilization",
                is_sensor    = true,
                name         = "xAverage Percent System Utilization",
                unit         = (int)SensorNodeBase.UnitType.Temperature,
                sensor_value = GetAverageUtilization(),
            });

            main_group.children.Add(new SensorNode()
            {
                source_id    = _source,
                identifier   = "x-instant-utilization",
                is_sensor    = true,
                name         = "xInstant Percent System Utilization",
                unit         = (int)SensorNodeBase.UnitType.Temperature,
                sensor_value = GetInstantUtilization(),
            });

            for (int i = 0; i < _machine.DimmerControls.Count; i++)
            {
                main_group.children.Add(new SensorNode()
                {
                    source_id    = _source,
                    identifier   = "x-dimmer-control-" + i.ToString(),
                    is_sensor    = true,
                    name         = "xDimmer Control " + i.ToString(),
                    unit         = (int)SensorNodeBase.UnitType.Temperature,
                    sensor_value = GetDimmerValue(i),
                });
            }

            for (int i = 0; i < _machine.FlowRates.Count; i++)
            {
                main_group.children.Add(new SensorNode()
                {
                    source_id    = _source,
                    identifier   = "x-flow-rate-" + i.ToString(),
                    is_sensor    = true,
                    name         = "xFlow Rate " + i.ToString(),
                    unit         = (int)SensorNodeBase.UnitType.Temperature,
                    sensor_value = _machine.FlowRates[i],
                });
            }

            for (int i = 0; i < _machine.FlashersPower.Count; i++)
            {
                main_group.children.Add(new SensorNode()
                {
                    source_id    = _source,
                    identifier   = "x-flasher-power-" + i.ToString(),
                    is_sensor    = true,
                    name         = "xFlasher Power " + i.ToString(),
                    unit         = (int)SensorNodeBase.UnitType.Temperature,
                    sensor_value = _machine.FlashersPower[i],
                });
            }

            return(main_group);
        }
 public VirtualSensorAlgorithm(SensorGroup group)
 {
     this._sensorGroup  = group;
     this.AlgorithmName = AlgorithmNames.VirtualSensorAlgo;
 }
Beispiel #20
0
        private IList <SensorGroup> QueryGroups(DataTable table)
        {
            IList <SensorGroup> grouplst = new List <SensorGroup>();

            if (table == null || table.Rows.Count <= 0)
            {
                return(grouplst);
            }
            var groupType = (GroupType)table.AsEnumerable().First().Field <int>("GROUP_TYPE_ID");
            var groups    = from g in table.AsEnumerable()
                            group g by g.Field <int>("GROUP_ID");

            foreach (var g in groups)
            {
                SensorGroup group;
                switch (groupType)
                {
                case GroupType.Inclination:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"]),
                            DTUId    = Convert.ToUInt32(row["DTU_ID"])
                        };
                        gp.Paramters.Add("DEPTH", Convert.ToDouble(row["DEPTH"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                case GroupType.Settlement:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"]),
                            DTUId    = Convert.ToUInt32(row["DTU_ID"])
                        };
                        gp.Paramters.Add("IsBase", Convert.ToByte(row["isJIZHUNDIAN"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                case GroupType.SaturationLine:
                    group = new SensorGroup(g.Key, groupType);
                    foreach (DataRow row in g)
                    {
                        var gp = new GroupItem
                        {
                            SensorId = Convert.ToInt32(row["SENSOR_ID"]),
                            DTUId    = Convert.ToUInt32(row["DTU_ID"])
                        };
                        gp.Paramters.Add("HEIGHT", Convert.ToDouble(row["HEIGHT"]));
                        group.Items.Add(gp);
                    }
                    grouplst.Add(group);
                    break;

                default:
                    break;
                }
            }

            return(grouplst);
        }
Beispiel #21
0
        private IList <SensorGroup> QueryVirtualSensors(uint dtuid)
        {
            IList <SensorGroup> virtualsens = new List <SensorGroup>();

            String virtualSensorQuerySql = string.Format(
                @"select s.SENSOR_ID,s.SAFETY_FACTOR_TYPE_ID,s.STRUCT_ID,ss.DTU_ID,p.FORMAULAID,p.PROTOCOL_ID,
f.Parameter1,f.Parameter2,f.Parameter3,f.Parameter4,f.Parameter5,f.Parameter6,f.Parameter7,c.CorrentSensorId,
sf.THEMES_TABLE_NAME,sf.THEMES_COLUMNS  from [T_DIM_SENSOR_CORRENT] c
left join T_DIM_SENSOR s on s.SENSOR_ID=c.SensorId
left join T_DIM_SENSOR_PRODUCT p on s.PRODUCT_SENSOR_ID = p.PRODUCT_ID
left join T_DIM_FORMULAID_SET f on c.SensorId=f.SENSOR_ID
left join T_DIM_SAFETY_FACTOR_TYPE sf on sf.SAFETY_FACTOR_TYPE_ID=s.SAFETY_FACTOR_TYPE_ID
left join T_DIM_SENSOR ss on ss.SENSOR_ID=c.CorrentSensorId
where c.SensorId in(
select distinct(c.SensorId) from T_DIM_SENSOR s,[T_DIM_SENSOR_CORRENT] c 
where s.SENSOR_ID=c.CorrentSensorId and s.IsDeleted=0 and s.DTU_ID={0})", dtuid);

            DataTable table = this._dbHelper.Query(virtualSensorQuerySql).Tables[0];

            if (table.Rows.Count > 0)
            {
                var groups = from g in table.AsEnumerable()
                             group g by g.Field <int>("SENSOR_ID");

                foreach (var item in groups)
                {
                    if (!item.Any())
                    {
                        continue;
                    }
                    var     agroup = new SensorGroup(item.Key, GroupType.VirtualSensor);
                    DataRow row    = item.First();

                    // 虚拟传感器的分组信息(公式、参数、子集)
                    agroup.FormulaId       = row["FORMAULAID"] == DBNull.Value ? -1 : Convert.ToInt32(row["FORMAULAID"]);
                    agroup.FactorTypeId    = row["SAFETY_FACTOR_TYPE_ID"] == DBNull.Value ? -1 : Convert.ToInt32(row["SAFETY_FACTOR_TYPE_ID"]);
                    agroup.FactorTypeTable = row["THEMES_TABLE_NAME"] == DBNull.Value ? "" : Convert.ToString(row["THEMES_TABLE_NAME"]);
                    agroup.TableColums     = row["THEMES_COLUMNS"] == DBNull.Value ? "" : Convert.ToString(row["THEMES_COLUMNS"]);
                    int paraIndex = 1;
                    while (!row.IsNull("Parameter" + paraIndex))
                    {
                        agroup.FormulaParams.Add(Convert.ToDouble(row["Parameter" + paraIndex]));
                        paraIndex++;
                    }
                    foreach (DataRow dr in item)
                    {
                        if (!dr.IsNull("CorrentSensorId"))
                        {
                            agroup.AddItem(new GroupItem
                            {
                                SensorId = Convert.ToInt32(dr["CorrentSensorId"]),
                                DTUId    = Convert.ToUInt32(dr["DTU_ID"])
                            });
                        }
                    }

                    // 虚拟传感器的基础信息
                    var virtualSensor = new Sensor();
                    virtualSensor.SensorID        = Convert.ToUInt32(row["SENSOR_ID"]);
                    virtualSensor.FormulaID       = row.IsNull("FORMAULAID") ? 0 : Convert.ToUInt32(row["FORMAULAID"]);
                    virtualSensor.FactorType      = Convert.ToUInt32(row["SAFETY_FACTOR_TYPE_ID"]);
                    virtualSensor.ProtocolType    = row.IsNull("PROTOCOL_ID") ? 0 : Convert.ToUInt32(row["PROTOCOL_ID"]);
                    virtualSensor.FactorTypeTable = Convert.ToString(row["THEMES_TABLE_NAME"]);
                    virtualSensor.TableColums     = Convert.ToString(row["THEMES_COLUMNS"]);
                    virtualSensor.StructId        = Convert.ToUInt32(row["STRUCT_ID"]);
                    virtualSensor.SensorType      = SensorType.Virtual;
                    agroup.VirtualSensor          = virtualSensor;

                    virtualsens.Add(agroup);
                }
            }

            return(virtualsens);
        }
Beispiel #22
0
 /// <summary>
 /// abort export plugin
 /// </summary>
 public void stop_instance()
 {
     _dataSource = null;
     _sensorData = null;
 }