예제 #1
0
        static void Main(string[] args)
        {
            ReadSettings();

            softNodeClient = new SoftNodeClient();
            softNode = new SoftNode(softNodeClient, nodeId, nodeName, nodeVersion);

            if (Convert.ToBoolean(ConfigurationManager.AppSettings["ShowNodeTxRxDebug"]))
                softNode.OnDebugTxRxMessage += message => Console.WriteLine("NODE: " + message);

            if (Convert.ToBoolean(ConfigurationManager.AppSettings["ShowNodeStateDebug"]))
                softNode.OnDebugNodeStateMessage += message => Console.WriteLine("NODE: " + message);

            softNode.OnIdResponseReceived += OnIdResponseReceived;
            softNode.ConnectToServer(serverURL);


            Sensor sensor = new Sensor();
            sensor.sensorId = sensorId;
            sensor.sensorType = SensorType.S_RGB_LIGHT;
            sensor.description = sensorDescription;
            softNode.AddSensor(sensor);

            StartScreenCapture();
            ShowMessage("Screen capture started");

            while (true)
            {
                Console.ReadLine();
            }
        }
예제 #2
0
 public void AddSensor(Sensor sensor)
 {
     node.sensors.Add(sensor);
     if (IsConnected())
         SendSensorPresentation(sensor);
 }
예제 #3
0
        private void SendSensorPresentation(Sensor sensor)
        {
            if (!IsConnected()) return;

            Message message = new Message
            {
                nodeId = node.nodeId,
                sensorId = sensor.sensorId,
                messageType = MessageType.C_PRESENTATION,
                ack = false,
                subType = (int)sensor.type,
                payload = sensor.description
            };

            if (OnDebugNodeStateMessage != null)
                OnDebugNodeStateMessage("Sending sensor "+sensor.sensorId+" presentation");

            if (OnDebugTxRxMessage != null)
                OnDebugTxRxMessage(message.ToString());

            client.SendMessage(message);
        }
예제 #4
0
        private bool CheckLinkPossible(Sensor fromSensor, Sensor toSensor)
        {
            //if it's the same sensor
            if (fromSensor.ownerNodeId == toSensor.ownerNodeId
                && fromSensor.sensorId == toSensor.sensorId)
                return false;

            List<SensorLink> links = linksDb.GetAllLinks();
            foreach (var link in links)
            {
                //prevent infinite loop
                if (link.fromNodeId == toSensor.ownerNodeId
                    && link.fromSensorId == toSensor.sensorId
                    && link.toNodeId == fromSensor.ownerNodeId
                    && link.toSensorId == fromSensor.sensorId)
                    return false;

                //prevend duplicates
                if (link.fromNodeId == fromSensor.ownerNodeId
                    && link.fromSensorId == fromSensor.sensorId
                    && link.toNodeId == toSensor.ownerNodeId
                    && link.toSensorId == toSensor.sensorId)
                    return false;
            }

            return true;
        }
        private void WriteSensorDataToHistory(Sensor sensor)
        {
            using (var db = new SqlConnection(connectionString))
            {
                db.Open();

                CreateTableForSensor(sensor);

                List<SensorData> data = sensor.GetAllData();

                if (data == null)
                    return;

                foreach (var sensorData in data)
                    sensorData.dateTime = DateTime.Now;

                var sqlQuery = String.Format(
                    "INSERT INTO SensorHistory{0} (dataType, state, dateTime) "
                    + "VALUES(@dataType,@state, @dateTime); "
                    + "SELECT CAST(SCOPE_IDENTITY() as int)", sensor.db_Id);
                db.Execute(sqlQuery,data);

            }
        }
 private void OnSensorUpdatedEvent(Sensor sensor)
 {
     if (sensor.storeHistoryEnabled && sensor.storeHistoryEveryChange)
         WriteSensorDataToHistory(sensor);
 }
        private void CreateTableForSensor(Sensor sensor)
        {
            using (var db = new SqlConnection(connectionString))
            {
                db.Open();

                try
                {
                    string req = String.Format(
                        @"CREATE TABLE [dbo].[SensorHistory{0}](
                [db_Id] [int] IDENTITY(1,1) NOT NULL,
                [dataType] [int] NULL,
                [state] [nvarchar](max) NULL,
                [dateTime] [datetime] NOT NULL ) ON [PRIMARY] ", sensor.db_Id);

                    db.Query(req);
                }
                catch
                {
                }
            }
        }
예제 #8
0
 private void OnSensorUpdatedEvent(Sensor sensor)
 {
     foreach (var link in links)
     {
         if (link.fromNodeId == sensor.ownerNodeId
             && link.fromSensorId == sensor.sensorId)
         {
             SensorData oldData = sensor.GetData(link.fromDataType.Value);
             SensorData newData = ConvertSensorData(oldData,link.toDataType);
             gateway.SendSensorState(link.toNodeId, link.toSensorId, newData);
         }
     }
 }
예제 #9
0
        private void OnSensorUpdatedEvent(Sensor sensor)
        {
            if (!IsConnected()) return;

            hubProxy.Invoke("OnSensorUpdatedEvent", sensor);
        }
예제 #10
0
 private void OnSensorUpdated(Sensor sensor)
 {
     if (writeInterval == 0) AddOrUpdateSensor(sensor);
     else
     {
         if (!updatedNodesId.Contains(sensor.ownerNodeId))
             updatedNodesId.Add(sensor.ownerNodeId);
     }
 }
예제 #11
0
        public void AddOrUpdateSensor(Sensor sensor)
        {
            //   Sensor oldSensor = conn.Table<Sensor>().Where(x => x.nodeId == sensor.nodeId).FirstOrDefault(x => x.sensorId == sensor.sensorId);

            if (db.Sensors.Any(x => x.ownerNodeId == sensor.ownerNodeId && x.sensorId == sensor.sensorId))
            {
                db.Entry(sensor).State = EntityState.Modified;
            }
            else
            {
                db.Sensors.Add(sensor);
            }
            db.SaveChanges();
        }
예제 #12
0
 public void UpdateSensorSettings(Sensor sensor)
 {
     throw new NotImplementedException();
 }
예제 #13
0
 public void UpdateSensorSettings(Sensor sensor)
 {
     using (var db = new SqlConnection(connectionString))
     {
         db.Open();
         var sqlQuery =
             "UPDATE Sensors SET " +
             "description = @description, " +
             "storeHistoryEnabled = @storeHistoryEnabled, " +
             "storeHistoryEveryChange = @storeHistoryEveryChange, " +
             "storeHistoryWithInterval = @storeHistoryWithInterval " +
             "WHERE ownerNodeId = @ownerNodeId AND sensorId = @sensorId";
         db.Execute(sqlQuery, new
         {
             description = sensor.description,
             storeHistoryEnabled = sensor.storeHistoryEnabled,
             storeHistoryEveryChange = sensor.storeHistoryEveryChange,
             storeHistoryWithInterval = sensor.storeHistoryWithInterval,
             sensorId = sensor.sensorId,
             ownerNodeId = sensor.ownerNodeId
         });
     }
 }
예제 #14
0
        public void AddOrUpdateSensor(Sensor sensor)
        {
            using (var db = new SqlConnection(connectionString))
            {
                db.Open();

                Sensor oldSensor =
                    db.Query<Sensor>("SELECT * FROM Sensors WHERE ownerNodeId = @ownerNodeId AND sensorId = @sensorId",
                        new { ownerNodeId = sensor.ownerNodeId, sensorId = sensor.sensorId }).SingleOrDefault();
                int node_db_id =
                    db.Query<Sensor>("SELECT * FROM Nodes WHERE nodeId = @nodeId", new { nodeId = sensor.ownerNodeId })
                        .SingleOrDefault()
                        .db_Id;

                if (oldSensor == null)
                {
                    var sqlQuery = "INSERT INTO Sensors (ownerNodeId, sensorId, sensorType, sensorDataJson, description, storeHistoryEnabled, storeHistoryEveryChange, storeHistoryWithInterval ,Node_db_Id) "
                                   +
                                   "VALUES(@ownerNodeId, @sensorId, @sensorType, @sensorDataJson, @description,  @storeHistoryEnabled, @storeHistoryEveryChange, @storeHistoryWithInterval, @Node_db_Id); "
                                   + "SELECT CAST(SCOPE_IDENTITY() as int)";
                    int dbId = db.Query<int>(sqlQuery, new
                    {
                        ownerNodeId = sensor.ownerNodeId,
                        sensorId = sensor.sensorId,
                        sensorType = sensor.sensorType,
                        sensorDataJson = sensor.sensorDataJson,
                        description = sensor.description,
                        storeHistoryEnabled = sensor.storeHistoryEnabled,
                        storeHistoryEveryChange = sensor.storeHistoryEveryChange,
                        storeHistoryWithInterval = sensor.storeHistoryWithInterval,
                        Node_db_Id = node_db_id
                    }).Single();

                    gateway.SetSensorDbId(sensor.ownerNodeId, sensor.sensorId, dbId);
                }
                else
                {
                    var sqlQuery =
                        "UPDATE Sensors SET " +
                        "ownerNodeId = @ownerNodeId, " +
                        "sensorId  = @sensorId, " +
                        "sensorType = @sensorType, " +
                        "sensorDataJson = @sensorDataJson, " +
                        "description = @description, " +
                        "storeHistoryEnabled = @storeHistoryEnabled, " +
                        "storeHistoryWithInterval = @storeHistoryWithInterval, " +
                        "storeHistoryEveryChange = @storeHistoryEveryChange, " +
                        "Node_db_Id = @Node_db_Id " +
                        "WHERE ownerNodeId = @ownerNodeId AND sensorId = @sensorId";
                    db.Execute(sqlQuery, new
                    {
                        ownerNodeId = sensor.ownerNodeId,
                        sensorId = sensor.sensorId,
                        sensorType = sensor.sensorType,
                        sensorDataJson = sensor.sensorDataJson,
                        description = sensor.description,
                        storeHistoryEnabled = sensor.storeHistoryEnabled,
                        storeHistoryWithInterval = sensor.storeHistoryWithInterval,
                        storeHistoryEveryChange = sensor.storeHistoryEveryChange,
                        Node_db_Id = node_db_id
                    });
                }
            }
        }
예제 #15
0
 public void OnSensorUpdatedEvent(Sensor sensor)
 {
     Clients.Others.onSensorUpdatedEvent(sensor);
 }
예제 #16
0
 public void OnNewSensorEvent(Sensor sensor)
 {
     Clients.Others.onNewSensorEvent(sensor);
 }