コード例 #1
0
 public void TryAddNewSensorOperation(SensorOperation senopera)
 {
     if (this._sensorOperationPool != null)
     {
         this._sensorOperationPool.Enqueue(senopera);
     }
 }
コード例 #2
0
 private void UpdateSensorConfig(SensorOperation operation)
 {
     if (operation == null)
     {
         return;
     }
     if (operation.Action != Operations.ChangedDtu)
     {
         if (this.GetDtuNodeListener != null)
         {
             DtuNode node = this.GetDtuNodeListener(operation.Sensor.DtuID);
             if (node != null && operation.Sensor.SensorType != SensorType.Virtual)
             {
                 node.AddSensorOperation(operation);
             }
         }
     }
     else
     {
         try
         {
             this.SensorChangedDtu(operation);
         }
         catch (Exception ex)
         {
             this._log.ErrorFormat("sensor {0} changed Dtu error {1}", operation.Sensor.SensorID, ex.Message);
         }
     }
 }
コード例 #3
0
ファイル: MainForm.cs プロジェクト: fengyhack/KinectV2
        private void btnSensorSwitch_Click(object sender, EventArgs e)
        {
            try
            {
                if (sensorOperation == SensorOperation.Open)
                {
                    SafeOpenSensor();

                    sensorOperation      = SensorOperation.Close;
                    btnSensorSwitch.Text = "Close";
                    textBox1.Text        = "KinectSensor opened, now working...";
                }
                else
                {
                    SafeCloseSensor();

                    sensorOperation      = SensorOperation.Open;
                    btnSensorSwitch.Text = "Open";
                    textBox1.Text        = "KinectSensor closed.";
                }
            }
            catch (Exception ex)
            {
                textBox1.Text = ex.Message;
            }
        }
コード例 #4
0
ファイル: DtuNodeTest.cs プロジェクト: icprog/FS-SMISCloud
        public void TestAddSensor()
        {
            DtuNode node = new DtuNode()
            {
                DtuCode     = "12345678",
                DtuId       = 2,
                Type        = DtuType.Gprs,
                Name        = "Test",
                DacInterval = 5
            };

            new Thread(t =>
            {
                uint i = 1;
                while (i < 100)
                {
                    var senopera = new SensorOperation
                    {
                        Sensor = new Sensor
                        {
                            SensorID  = i,
                            ModuleNo  = 2000 + 1,
                            ChannelNo = 1,
                            DtuID     = 2
                        },
                        Action = Operations.Add
                    };
                    node.AddSensorOperation(senopera);
                    i++;
                }
            }).Start();
            Thread.Sleep(10);
            new Thread(t =>
            {
                uint i = 5;
                while (i < 50)
                {
                    var senopera = new SensorOperation
                    {
                        OldSensorId = i,
                        Action      = Operations.Delete
                    };
                    node.AddSensorOperation(senopera);
                    i++;
                }
            }).Start();

            Thread.Sleep(100);
            var t2 = new Thread(t =>
            {
                node.UpDateSensor();
            });

            t2.Start();
            t2.Join();

            Console.WriteLine("dtunode's sensors count is {0}", node.Sensors.Count);
        }
コード例 #5
0
ファイル: DACTaskManager.cs プロジェクト: icprog/FS-SMISCloud
 /// <summary>
 ///
 /// </summary>
 /// <param name="operation"></param>
 public void UpdateSensorConfig(SensorOperation operation)
 {
     if (_senconfChangedServer == null)
     {
         _senconfChangedServer = new SensorConfigUpdateServer();
         _senconfChangedServer.GetDtuNodeListener += senconfChangedServer_GetDtuNodeListener;
         _senconfChangedServer.StartWork();
     }
     _senconfChangedServer.TryAddNewSensorOperation(operation);
 }
コード例 #6
0
 private void DoIt(SensorOperation senopera)
 {
     try
     {
         this.UpdateSensorConfig(senopera);
     }
     catch (Exception ex)
     {
         this._log.ErrorFormat("Update sensor config error :{0}", ex.Message);
     }
 }
コード例 #7
0
        public static FsMessage GetSensorConfigChangedMsg(SensorOperation senopera)
        {
            var msg = new FsMessage
            {
                Header = new FsMessageHeader
                {
                    A = "PUT",
                    R = "/et/config/sensor/",
                    U = Guid.NewGuid(),
                    T = Guid.NewGuid(),
                    D = "et",
                    M = "config"
                },
                Body = JsonConvert.SerializeObject(senopera)
            };

            return(msg);
        }
コード例 #8
0
        public void SensorOperationSerializeTest()
        {
            var senact = new SensorOperation
            {
                Sensor = new Sensor
                {
                    AcqInterval  = 10,
                    ChannelNo    = 1,
                    DtuCode      = "1234432",
                    ModuleNo     = 2345,
                    Name         = "tear",
                    ProtocolType = 12,
                    FactorType   = 23,
                    StructId     = 1
                },
                Action = Operations.Add
            };

            string str = JsonConvert.SerializeObject(senact);

            Console.WriteLine(str);

            var senopera = JsonConvert.DeserializeObject <SensorOperation>(str);

            Console.WriteLine(senopera.OldDtuId);
            JObject jsobj = JObject.Parse(str);
            var     sen   = JsonConvert.DeserializeObject <Sensor>(jsobj["Sensor"].ToString());
            uint    dtuid = Convert.ToUInt32(jsobj["DtuId"]);

            Console.WriteLine(sen.SensorID);
            Console.WriteLine(dtuid);
            // OldSensorId
            // OldDtuId
            uint oldSenId = Convert.ToUInt32(jsobj["OldSensorId"]);

            Console.WriteLine("OldSensorId :{0}", oldSenId);
            uint oldDtuId = Convert.ToUInt32(jsobj["OldDtuId"]);

            Console.WriteLine("OldDtuId: {0}", oldDtuId);
        }
コード例 #9
0
        //TODO
        public static SensorOperation Json2SensorOperation(string jsonstr)
        {
            JObject jsobj = JObject.Parse(jsonstr);
            var     sen   = JsonConvert.DeserializeObject <Sensor>(jsobj["Sensor"].ToString());
            uint    oldSenId;

            UInt32.TryParse(jsobj["OldSensorId"].ToString(), out oldSenId);
            uint oldDtuId;

            UInt32.TryParse(jsobj["OldDtuId"].ToString(), out oldDtuId);
            int opera;

            int.TryParse(jsobj["Action"].ToString(), out opera);

            var senopera = new SensorOperation
            {
                Sensor      = sen,
                OldSensorId = oldSenId,
                OldDtuId    = oldDtuId,
                Action      = (Operations)opera
            };

            return(senopera);
        }
コード例 #10
0
        private void SensorChangedDtu(SensorOperation operation)
        {
            var so = new SensorOperation
            {
                Sensor = new Sensor
                {
                    SensorID = operation.Sensor.SensorID,
                    DtuID    = operation.OldDtuId
                },
                OldDtuId    = operation.OldDtuId,
                OldSensorId = operation.OldSensorId,
                Action      = Operations.Delete
            };

            this.UpdateSensorConfig(so);
            so = new SensorOperation
            {
                Sensor      = operation.Sensor,
                OldDtuId    = operation.OldDtuId,
                OldSensorId = operation.OldSensorId,
                Action      = Operations.Add
            };
            this.UpdateSensorConfig(so);
        }
コード例 #11
0
        public HttpResponseMessage RemoveSensor([FromUri] int sensorId)
        {
            using (var db = new SecureCloud_Entities())
            {
                var sensor = db.T_DIM_SENSOR.FirstOrDefault(s => s.SENSOR_ID == sensorId && !s.IsDeleted);
                if (sensor == null)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器不存在")));
                }

                sensor.MODULE_NO         *= -1;
                sensor.DAI_CHANNEL_NUMBER = (byte)(sensor.DAI_CHANNEL_NUMBER * -1);
                sensor.IsDeleted          = true;

                //表T_DIM_SENSOR_CORRENT的同步变动
                IQueryable <T_DIM_SENSOR_CORRENT> Corrent = from p in db.T_DIM_SENSOR_CORRENT
                                                            where p.SensorId == sensorId || p.CorrentSensorId == sensorId//反向删除
                                                            select p;
                foreach (var CorrentConfig in Corrent)
                {
                    db.T_DIM_SENSOR_CORRENT.Remove(CorrentConfig);
                }

                #region 日志信息

                this.Request.Properties["ActionParameterShow"] = "传感器位置:" + sensor.SENSOR_LOCATION_DESCRIPTION;
                #endregion

                try
                {
                    if (sensor.Identification != 2)
                    {
                        var sensorinfo = new Entity.Config.Sensor
                        {
                            DtuID     = sensor.DTU_ID == null ? 0 : (uint)sensor.DTU_ID,
                            SensorID  = (uint)sensor.SENSOR_ID,
                            StructId  = sensor.STRUCT_ID == null ? 0 : (uint)sensor.STRUCT_ID,
                            ModuleNo  = sensor.MODULE_NO == null ? 0 : (uint)sensor.MODULE_NO,
                            ChannelNo = sensor.DAI_CHANNEL_NUMBER == null ? 0 : (uint)sensor.DAI_CHANNEL_NUMBER,
                            Name      = sensor.SENSOR_LOCATION_DESCRIPTION,
                            UnEnable  = sensor.Enable//3-3
                        };
                        var senopera = new SensorOperation
                        {
                            Action      = Operations.Delete,
                            OldDtuId    = sensorinfo.DtuID,
                            OldSensorId = sensorinfo.SensorID,
                            Sensor      = sensorinfo
                        };
                        WebClientService.SendToET(ConfigChangedMsgHelper.GetSensorConfigChangedMsg(senopera));
                    }

                    db.SaveChanges();
                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("传感器删除成功")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器删除失败")));
                }
            }
        }
コード例 #12
0
        public HttpResponseMessage ModifySensor([FromUri] int sensorId, [FromBody] Sensor model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    var sensor = db.T_DIM_SENSOR.FirstOrDefault(s => s.SENSOR_ID == sensorId && !s.IsDeleted);
                    if (sensor == null)
                    {
                        return(Request.CreateResponse(
                                   HttpStatusCode.BadRequest,
                                   StringHelper.GetMessageString("传感器修改失败:传感器不存在或已删除")));
                    }
                    int           dtuid     = sensor.DTU_ID.Value;
                    StringBuilder sb        = new StringBuilder();
                    var           sensorLoc = sensor.SENSOR_LOCATION_DESCRIPTION;
                    sb.AppendFormat("原传感器:{0}:", sensorLoc);

                    if (model.FactorId != default(int) && model.FactorId != sensor.SAFETY_FACTOR_TYPE_ID)
                    {
                        sensor.SAFETY_FACTOR_TYPE_ID = model.FactorId;
                        var fac =
                            db.T_DIM_SAFETY_FACTOR_TYPE.Where(f => f.SAFETY_FACTOR_TYPE_ID == model.FactorId)
                            .Select(f => f.SAFETY_FACTOR_TYPE_NAME)
                            .FirstOrDefault();
                        sb.AppendFormat("监测因素改为:{0};", fac);
                    }
                    if (model.DtuId != default(int) && model.DtuId != sensor.DTU_ID)
                    {
                        sensor.DTU_ID = model.DtuId;
                        var dtu =
                            db.T_DIM_REMOTE_DTU.Where(d => d.ID == model.DtuId)
                            .Select(d => d.REMOTE_DTU_NUMBER)
                            .FirstOrDefault();
                        sb.AppendFormat("dtu号改为:{0};", dtu);
                    }
                    if (model.ModuleNo != default(int) && model.ModuleNo != sensor.MODULE_NO)
                    {
                        sensor.MODULE_NO = model.ModuleNo;
                        sb.AppendFormat("模块号改为:{0};", model.ModuleNo);
                    }
                    if (model.Channel != null && model.Channel != sensor.DAI_CHANNEL_NUMBER)
                    {
                        sensor.DAI_CHANNEL_NUMBER = (byte?)model.Channel;
                        sb.AppendFormat("通道改为:{0};", model.Channel);
                    }
                    //2-26
                    if (model.Enable != sensor.Enable)
                    {
                        sensor.Enable = model.Enable;
                        sb.AppendFormat("使能改为:{0};", model.Enable);
                    }
                    if (model.ProductId != default(int) && model.ProductId != sensor.PRODUCT_SENSOR_ID)
                    {
                        sensor.PRODUCT_SENSOR_ID = model.ProductId;
                        var pdt =
                            db.T_DIM_SENSOR_PRODUCT.Where(p => p.PRODUCT_ID == model.ProductId)
                            .Select(p => new { p.PRODUCT_NAME, p.PRODUCT_CODE })
                            .FirstOrDefault();
                        sb.AppendFormat("设备改为{0}({1});", pdt.PRODUCT_NAME, pdt.PRODUCT_CODE);
                    }
                    if (model.Location != default(string) && model.Location != sensor.SENSOR_LOCATION_DESCRIPTION)
                    {
                        sensor.SENSOR_LOCATION_DESCRIPTION = model.Location;
                        sb.AppendFormat("位置标识改为{0};", model.Location);
                    }
                    if (model.Params != null)
                    {
                        var query = (from p in db.T_DIM_SENSOR_PRODUCT
                                     join fn in db.T_DIM_FORMULA_PARA on p.FORMAULAID equals fn.FormulaID into forluma
                                     from f in forluma.DefaultIfEmpty()
                                     join fname in db.T_DIM_FORMULA_PARA_NAME on f.ParaNameID equals fname.ParaNameID
                                     into name
                                     from n in name
                                     where p.PRODUCT_ID == model.ProductId
                                     orderby f.Order
                                     select new { f.FormulaParaID, n.ParaAlias }).ToList();

                        var para =
                            (from q in query
                             from v in model.Params
                             where q.FormulaParaID == v.Id
                             select new { q.FormulaParaID, v.Value }).ToList();

                        var paramStr = (from q in query
                                        from v in model.Params
                                        where q.FormulaParaID == v.Id
                                        select new { q.ParaAlias, v.Value }).ToList();

                        sb.AppendFormat(
                            "参数修改为:{0}",
                            string.Join(
                                "-",
                                paramStr.Select(p => string.Format("{0}:{1}", p.ParaAlias, p.Value)).ToArray()));

                        var old = from o in db.T_DIM_FORMULAID_SET where o.SENSOR_ID == sensor.SENSOR_ID select o;
                        foreach (var o in old)
                        {
                            db.Entry(o).State = System.Data.EntityState.Deleted;
                        }

                        var newParam = new T_DIM_FORMULAID_SET();
                        newParam.SENSOR_ID = sensor.SENSOR_ID;
                        for (int i = 0; i < para.Count(); i++)
                        {
                            newParam.GetType()
                            .GetProperty("FormulaParaID" + (i + 1))
                            .SetValue(newParam, para[i].FormulaParaID, null);
                            newParam.GetType()
                            .GetProperty("Parameter" + (i + 1))
                            .SetValue(newParam, (decimal?)para[i].Value, null);
                        }

                        db.Entry(newParam).State = System.Data.EntityState.Added;
                    }

                    //关联传感器
                    if (model.CorrentId != null)
                    {
                        var correntTable = from cp in db.T_DIM_SENSOR_CORRENT where cp.SensorId == sensorId select cp;

                        foreach (var o in correntTable)
                        {
                            db.T_DIM_SENSOR_CORRENT.Remove(o);
                        }
                        var array = model.CorrentId.Split(',');
                        for (int j = 0; j < array.Length; j++)
                        {
                            var correntSensor = new T_DIM_SENSOR_CORRENT();

                            correntSensor.SensorId = sensorId;
                            var correntId = array.GetValue(j);
                            correntSensor.CorrentSensorId = Convert.ToInt32(correntId);
                            db.T_DIM_SENSOR_CORRENT.Add(correntSensor);
                            db.SaveChanges();
                        }
                    }

                    #region 日志信息
                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] = sb.ToString();

                    #endregion


                    db.SaveChanges();
                    if (sensor.Identification != 2)
                    {
                        Entity.Config.Sensor sensorinfo = GetSensor(sensor);
                        var senopera = new SensorOperation
                        {
                            Sensor      = sensorinfo,
                            OldDtuId    = (uint)dtuid,
                            OldSensorId = sensorinfo.SensorID,
                            Action      = sensor.DTU_ID == dtuid ? Operations.Update : Operations.ChangedDtu
                        };
                        WebClientService.SendToET(ConfigChangedMsgHelper.GetSensorConfigChangedMsg(senopera));
                    }
                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("传感器修改成功")));
                }
                catch (NullReferenceException e)
                {
                    return(Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               StringHelper.GetMessageString("传感器修改失败:参数无效")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器修改失败")));
                }
            }
        }
コード例 #13
0
        public HttpResponseMessage AddSensor([FromBody] Sensor model)
        {
            using (var db = new SecureCloud_Entities())
            {
                try
                {
                    var sensor = new T_DIM_SENSOR();
                    sensor.STRUCT_ID             = model.StructId;
                    sensor.SAFETY_FACTOR_TYPE_ID = model.FactorId;
                    sensor.DTU_ID                      = model.DtuId;
                    sensor.MODULE_NO                   = model.ModuleNo;
                    sensor.DAI_CHANNEL_NUMBER          = (byte?)model.Channel;
                    sensor.PRODUCT_SENSOR_ID           = model.ProductId;
                    sensor.SENSOR_LOCATION_DESCRIPTION = model.Location;
                    sensor.IsDeleted                   = false;
                    sensor.Identification              = model.Identify;
                    sensor.Enable                      = model.Enable;

                    var entry = db.Entry(sensor);
                    entry.State = System.Data.EntityState.Added;

                    var query = (from p in db.T_DIM_SENSOR_PRODUCT
                                 join fn in db.T_DIM_FORMULA_PARA on p.FORMAULAID equals fn.FormulaID into forluma
                                 from f in forluma.DefaultIfEmpty()
                                 join fname in db.T_DIM_FORMULA_PARA_NAME on f.ParaNameID equals fname.ParaNameID into
                                 name
                                 from n in name
                                 where p.PRODUCT_ID == model.ProductId
                                 orderby f.Order
                                 select f.FormulaParaID).ToList();

                    var para = (from q in query
                                from v in model.Params
                                where q == v.Id
                                select new { q, v.Value }).ToList();

                    var old = from o in db.T_DIM_FORMULAID_SET where o.SENSOR_ID == sensor.SENSOR_ID select o;
                    foreach (var o in old)
                    {
                        db.Entry(o).State = System.Data.EntityState.Deleted;
                    }

                    var newParam = new T_DIM_FORMULAID_SET();
                    newParam.SENSOR_ID = sensor.SENSOR_ID;
                    for (int i = 0; i < para.Count(); i++)
                    {
                        newParam.GetType().GetProperty("FormulaParaID" + (i + 1)).SetValue(newParam, para[i].q, null);
                        newParam.GetType().GetProperty("Parameter" + (i + 1)).SetValue(newParam, (decimal?)para[i].Value, null);
                    }

                    db.Entry(newParam).State = System.Data.EntityState.Added;

                    if (model.CorrentId != null)
                    {
                        var correntSensor = new T_DIM_SENSOR_CORRENT();
                        var array         = model.CorrentId.Split(',');
                        for (int j = 0; j < array.Length; j++)
                        {
                            correntSensor.SensorId = sensor.SENSOR_ID;
                            var correntId = array.GetValue(j);
                            correntSensor.CorrentSensorId = Convert.ToInt32(correntId);
                            db.T_DIM_SENSOR_CORRENT.Add(correntSensor);
                            db.SaveChanges();
                        }
                    }


                    #region 日志信息

                    var fac =
                        db.T_DIM_SAFETY_FACTOR_TYPE.Where(f => f.SAFETY_FACTOR_TYPE_ID == model.FactorId)
                        .Select(f => f.SAFETY_FACTOR_TYPE_NAME)
                        .FirstOrDefault();

                    var dtu =
                        db.T_DIM_REMOTE_DTU.Where(d => d.ID == model.DtuId)
                        .Select(d => d.REMOTE_DTU_NUMBER)
                        .FirstOrDefault();

                    var pdt =
                        db.T_DIM_SENSOR_PRODUCT.Where(p => p.PRODUCT_ID == model.ProductId)
                        .Select(p => new { p.PRODUCT_NAME, p.PRODUCT_CODE })
                        .FirstOrDefault();

                    this.Request.Properties["ActionParameter"]     = JsonConvert.SerializeObject(model);
                    this.Request.Properties["ActionParameterShow"] =
                        string.Format(
                            "位置:{0},监测因素:{1},dtu:{2},模块号:{3},通道号:{4},设备类型:{5},参数:{6}",
                            string.IsNullOrEmpty(model.Location) ? string.Empty : model.Location,
                            fac ?? string.Empty,
                            dtu ?? string.Empty,
                            model.ModuleNo,
                            model.Channel,
                            pdt == null ? string.Empty : string.Format("{0}({1})", pdt.PRODUCT_NAME, pdt.PRODUCT_CODE),
                            model.Params == null ? string.Empty : string.Join(",", model.Params.Select(p => p.Value)));

                    #endregion

                    db.SaveChanges();
                    if (sensor.Identification != 2)
                    {
                        Entity.Config.Sensor sensorinfo = GetSensor(sensor);
                        var senopera = new SensorOperation
                        {
                            Action      = Operations.Add,
                            Sensor      = sensorinfo,
                            OldDtuId    = sensorinfo.DtuID,
                            OldSensorId = sensorinfo.SensorID
                        };
                        WebClientService.SendToET(ConfigChangedMsgHelper.GetSensorConfigChangedMsg(senopera));
                    }
                    return(Request.CreateResponse(HttpStatusCode.Accepted, StringHelper.GetMessageString("传感器新增成功")));
                }
                catch (NullReferenceException e)
                {
                    return(Request.CreateResponse(
                               HttpStatusCode.BadRequest,
                               StringHelper.GetMessageString("传感器新增失败:参数无效")));
                }
                catch (Exception e)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, StringHelper.GetMessageString("传感器新增失败")));
                }
            }
        }