public async Task <IHttpActionResult> PutGroup(int id, Group group)
        {
            group.UpdateDate = DateTime.Now;

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != group.GroupID)
            {
                return(BadRequest());
            }

            db.Entry(group).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!GroupExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Exemplo n.º 2
0
        public async Task <IHttpActionResult> PutRecord(long id, Record record)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != record.RecordID)
            {
                return(BadRequest());
            }

            db.Entry(record).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RecordExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
Exemplo n.º 3
0
        private async void CheckAlarm(Record record)
        {
            using (var context = new EnergyMonitoringContext())
            {
                DateTime dt = DateTime.Now;

                if ((int)dt.DayOfWeek == Config.AuditDayOfWeek)
                {
                    if (dt.TimeOfDay >= Config.AuditTimeStart && dt.TimeOfDay <= Config.AuditTimeEnd)
                    {
                        if (record.Value < record.Sensor.LowerLimit || record.Value > record.Sensor.UpperLimit)
                        {
                            Alarm alarm = new Alarm();
                            alarm.RecordId   = record.RecordId;
                            alarm.CreateDate = DateTime.Now;

                            _logger.LogInformation($"Alarm: {record.Equipment.Name};");

                            context.Alarm.Add(alarm);

                            await context.SaveChangesAsync();
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
        // POST: api/Sensors
        public async Task <IHttpActionResult> PostSensor(Sensor sensor)
        {
            using (EnergyMonitoringContext db = new EnergyMonitoringContext())
            {
                sensor.CreateDate = DateTime.Now;
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                db.Sensors.Add(sensor);
                await db.SaveChangesAsync();
            }
            return(CreatedAtRoute("DefaultApi", new { id = sensor.SensorID }, sensor));
        }
Exemplo n.º 5
0
        public async Task <IHttpActionResult> DeleteSensor(int id)
        {
            using (EnergyMonitoringContext db = new EnergyMonitoringContext())
            {
                Sensor sensor = await db.Sensors.FindAsync(id);

                if (sensor == null)
                {
                    return(NotFound());
                }

                db.Sensors.Remove(sensor);
                await db.SaveChangesAsync();

                return(Ok(sensor));
            }
        }
Exemplo n.º 6
0
        private async void GetData()
        {
            // access database context with EF
            using (var context = new EnergyMonitoringContext())
            {
                try
                {
                    var config = context.Config.ToList().FirstOrDefault();
                    Config = config;
                    _logger.LogInformation($"RecordInterval={config} Minuten;");

                    // read devices with relation entities from database
                    var devices = context.Device.Include(device => device.Sensor)
                                  .ThenInclude(sensor => sensor.Unit)
                                  .Include(device => device.Equipment)
                                  .Where(x => (bool)x.Active)
                                  .ToList();

                    // iterate over device list
                    foreach (var device in devices)
                    {
                        try
                        {
                            // read json
                            var url = "http://" + device.Ip + "/rest/json";

                            // ping device
                            Ping      ping  = new Ping();
                            PingReply reply = ping.Send(device.Ip, 1500);

                            if (reply.Status == IPStatus.Success)
                            {
                                HttpClient request = new HttpClient();
                                var        json    = await request.GetStringAsync(url);

                                WebIO obj = JsonConvert.DeserializeObject <WebIO>(json);
                                _logger.LogInformation(device.Name);
                                // iterate over sensor list
                                foreach (var sensor in device.Sensor)
                                {
                                    // iterate over inputs
                                    foreach (var item in obj.iostate.input)
                                    {
                                        if (sensor.Unit.Name.ToLower().Equals(item.name.ToLower()))
                                        {
                                            StringBuilder sb = new StringBuilder();

                                            sb.Append(Environment.NewLine);
                                            sb.Append($"Equipment: number={device.Equipment.Number}; name={device.Equipment.Name}; ");
                                            sb.Append(Environment.NewLine);
                                            sb.Append($"Device: ip={device.Ip}; name={device.Name}; ");
                                            sb.Append(Environment.NewLine);
                                            sb.Append($"Sensor: id={sensor.SensorId}; ");
                                            sb.Append(Environment.NewLine);
                                            sb.Append($"Unit: name={sensor.Unit.Name}; sign={sensor.Unit.Sign}; ");
                                            sb.Append($"Input: {item.value}; ");
                                            sb.Append(Environment.NewLine);

                                            _logger.LogInformation(sb.ToString());

                                            Record record = new Record();
                                            record.Equipment  = device.Equipment;
                                            record.Sensor     = sensor;
                                            record.Value      = (decimal)Math.Round(item.value, 1);
                                            record.CreateDate = DateTime.Now;

                                            context.Record.Add(record);
                                            await context.SaveChangesAsync();

                                            if (device.Equipment.Active == true)
                                            {
                                                CheckAlarm(record);
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                _logger.LogError($"Fehler Verbindung: Status={device.Ip}; {reply.Status} DeviceName={device.Name};");
                            }
                        }
                        catch (JsonSerializationException ex)
                        {
                            _logger.LogError(ex.StackTrace);
                        }

                        catch (HttpRequestException ex)
                        {
                            _logger.LogError(ex.StackTrace);
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError(ex.StackTrace);
                        }
                    }
                }
                catch (Microsoft.Data.SqlClient.SqlException e)
                {
                    _logger.LogInformation(e.StackTrace);
                }
            }
        }