public static StatusRegister CreateStatusRegister(int devID, string alias, string description, int registerNumber, Signedness signedness) { using (var context = new DynapowerCloudMonitoringDbContext()) { var dev = context.Devices.Find(devID); var statusRegister = new StatusRegister() { RegisterNumber = registerNumber, Alias = alias, Description=description, SignednessType = signedness }; dev.Registers.Add(statusRegister); for (int i = 0; i < 16; i++) { statusRegister.StatusRegisterBits.Add(new StatusRegisterBit() { Bit = i, Alias = "NA", Description = "NA", Enabled = false, RegisterId = statusRegister.Id }); } context.SaveChanges(); return statusRegister; } }
public bool login() { var userContext = new DynapowerCloudMonitoringDbContext(); var user = userContext.Users.FirstOrDefault(usr => usr.Email.ToUpper() == Email.ToUpper()); bool goodCreds; if(user != null && user.Password == Password) { goodCreds = true; } else { goodCreds = false; } if (user != null) { userContext.Logons.Add(new Logon() { At = DateTime.UtcNow, Worked = goodCreds, UserId = user.Id }); userContext.SaveChanges(); } return goodCreds; }
public DeviceMaster(int deviceId) { this.DeviceID = deviceId; try { using (var db = new DynapowerCloudMonitoringDbContext()) { var device = db.Devices.Find(this.DeviceID); //device query setup this.initializeQuery(); this.QueryTimer = new System.Timers.Timer(); this.QueryTimer.Interval = device.SampleRate.TotalMilliseconds; this.QueryTimer.Elapsed += QueryTimer_Elapsed; //sensorcloud setup this.PusherTimer = new System.Timers.Timer(); this.PusherTimer.Interval = device.DataStorageRate.TotalMilliseconds; this.PusherTimer.Elapsed += PusherTimer_Elapsed; this.Pusher = new SensorCloudPusher(this.DeviceID); } } catch (Exception ex) { Logger.LogErrorExceptionToDB(ex, this.DeviceID); } }
public void StartMonitoring() { var listOfDevices = new List<int>(); using (var dbContext = new DynapowerCloudMonitoringDbContext()) { foreach (var dev in dbContext.Devices) { listOfDevices.Add(dev.Id); } } setupMasters(listOfDevices); }
public static void LogMessageToDB(string message) { try { using (var db = new DynapowerCloudMonitoringDbContext()) { db.LoggingMessages.Add(new GeneralMessage() { At = DateTime.UtcNow, Message = message }); db.SaveChanges(); } } catch (Exception ex) { LogEventViewerMessage(ex.Message + message); } }
public static AnalogRegister CreateAnalogRegister(int devID, string alias, string description, int registerNumber, string engineeringUnit, float scalingFactor, Signedness signedness) { using (var context = new DynapowerCloudMonitoringDbContext()) { var dev = context.Devices.Find(devID); var analogRegister = new AnalogRegister() { RegisterNumber = registerNumber, Alias = alias, Description = description, DeviceId = dev.Id, EngineeringUnit = engineeringUnit, ScalingFactor = scalingFactor, SignednessType = signedness }; dev.Registers.Add(analogRegister); context.SaveChanges(); return analogRegister; } }
public static void LogErrorExceptionToDB(Exception ex, int deviceID) { try { var message = ""; if (ex is AggregateException) { var aggregateEx = (AggregateException)ex; var flattened = aggregateEx.Flatten(); foreach (var agex in flattened.InnerExceptions) { message += agex.Message + ". "; } } else { message += ex.Message; if (ex.InnerException != null) { message += " Inner Exception: " + ex.InnerException.Message; } } using (var db = new DynapowerCloudMonitoringDbContext()) { var device = db.Devices.Find(deviceID); var deviceErr = new DeviceError() { At = DateTime.UtcNow, Message = message, Device = device }; db.LoggingMessages.Add(deviceErr); db.SaveChanges(); } } catch (Exception exFail) { LogEventViewerMessage("Error logging message for device " + deviceID.ToString() + ". Error: " + exFail.Message + " " + ex.Message); } }
public SensorCloudPusher(int deviceId) { this.DPDeviceID = deviceId; using (var dbContext = new DynapowerCloudMonitoringDbContext()) { var DPDevice = dbContext.Devices.Find(this.DPDeviceID); if (DPDevice == null) { throw new Exception("Unknown Dynapower Device"); } this.SensorCloudDeviceID = DPDevice.SensorCloudSettings.DeviceID; this.SensorCloudAPIKey = DPDevice.SensorCloudSettings.APIKey; var device = getDevice(); var sensor = addSensor(device, DPDevice); var exceptions = new ConcurrentQueue<Exception>(); Parallel.ForEach(DPDevice.Registers, reg => { try { var channelID = reg.RegisterNumber.ToString(); var channelDesc = reg.Description; var channelLabel = reg.Alias; addChannel(sensor, channelID, channelLabel, channelDesc); } catch (Exception ex) { exceptions.Enqueue(ex); } }); if (exceptions.Count() > 0) { throw new AggregateException(exceptions); } } _initialized = true; }
private void buildQueryStructure() { //order registers by Reg# using (var db = new DynapowerCloudMonitoringDbContext()) { var device = db.Devices.Find(this.DeviceID); this.IP = NetworkHelpers.GetIP(device.NetworkConfiguration.IpAddress); this.Port = device.NetworkConfiguration.PortNumber; var orderedRegisters = from reg in device.Registers orderby reg.RegisterNumber ascending select reg; var regGroups = buildRegGroups(orderedRegisters); this.ModBusConnections = buildModBusGroups(device, regGroups); } }
public DeviceRegisterImporter(int deviceID, StreamReader stream) { using (var m_context = new DynapowerCloudMonitoringDbContext()) { var device = m_context.Devices.Find(deviceID); if (device != null) { var regs = device.Registers.ToList(); for (int i = 0; i < regs.Count(); i++) { m_context.Entry(regs[i]).State = System.Data.EntityState.Deleted; } } else { var dev = new Device() { Id = 1, Name = "Device 1", Location = new Location() { Address = "146 ESR", City = "South Hero", Name = "Location 1", State = "VT", Zip = "05486" }, SerialNumber = "9999n", NetworkConfiguration = new NetworkingSettings() { IpAddress = "166.130.63.214", PortNumber = 502 }, SensorCloudSettings = new SensorCloudSettings() { LastPush = DateTime.UtcNow.AddHours(-5.0), DeviceID = "OAPI008DD8NQA6S0", APIKey = "bceb944e7de5a2d79cc1db707b9db69ee682f4fb04a80fa1bfe96815150b5eee" }, CircularBufferSampleRate = new TimeSpan(0, 0, 1), DataStorageRate = new TimeSpan(1, 0, 0), SalesOrderNumber = "234234", SampleRate = new TimeSpan(0, 0, 5), ProductTypeId = 1, CompanyId = 1 }; m_context.Devices.Add(dev); } m_context.SaveChanges(); } CsvFileDescription inputFileDescription = new CsvFileDescription { SeparatorChar = ',', FirstLineHasColumnNames = true }; Logger.LogMessage("Starting to load CSV File"); CsvContext cc = new CsvContext(); IEnumerable<CSVRegister> registers = cc.Read<CSVRegister>(stream, inputFileDescription); var goodRegisters = registers.Where(reg => reg.Type.Trim() != "Ignore"); Logger.LogMessage("Loaded " + registers.Count() + " good registers"); foreach (var reg in goodRegisters) { try { var regType = reg.Type.Trim(); Signedness sign = Signedness.Unsigned; if (reg.DataType.Trim() == "Signed") { sign = Signedness.Signed; } else if (reg.DataType.Trim() == "Unsigned") { sign = Signedness.Unsigned; } if (regType == "Analog") { RegisterFactory.CreateAnalogRegister(deviceID, reg.Alias ?? "None", reg.Description ?? "None", reg.RegisterNumber, reg.EngineeringUnit ?? "None", reg.ScalingFactor, sign); } else if (regType == "Fault Word") { RegisterFactory.CreateStatusRegister(deviceID, reg.Alias ?? "None", reg.Description ?? "None", reg.RegisterNumber, sign); } else if (regType == "Alarm Word") { RegisterFactory.CreateStatusRegister(deviceID, reg.Alias ?? "None", reg.Description ?? "None", reg.RegisterNumber, sign); } else { continue; } } catch (Exception ex) { Logger.LogMessage("Could not add register, exception: " + ex.Message); } } }
public void setLastReadTime(DateTime currentTime) { using (var db = new DynapowerCloudMonitoringDbContext()) { var device = db.Devices.Find(this.DPDeviceID); device.SensorCloudSettings.LastPush = currentTime; db.SaveChanges(); } }
public List<ChannelDataPoints> getFeedbacksToPush(DateTime currentTime) { Logger.LogMessageToDB("Getting data to push to SensorCloud"); checkInit(); try { using (var db = new DynapowerCloudMonitoringDbContext()) { var device = db.Devices.Include(dev => dev.Registers).FirstOrDefault(dev => dev.Id == this.DPDeviceID); var registers = device.Registers.ToList(); var registerIds = registers.Select(reg => reg.Id).ToArray(); var lastPush = device.SensorCloudSettings.LastPush; var query = db.RegisterFeedbacks.Where(feedback => (feedback.CreatedAt > lastPush && feedback.CreatedAt < currentTime) && registerIds.Contains(feedback.Register_Id)) .GroupBy(feedback => feedback.Register_Id); var datatoPush = new List<ChannelDataPoints>(); if (query.Count() > 0) { var registersAndFeedbacks = new List<RegisterAndFeedbacks>(); foreach (var group in query) { var registerAndFeedback = new RegisterAndFeedbacks() { Register = findRegister(registers, group.Key), Feedbacks = group }; registersAndFeedbacks.Add(registerAndFeedback); } foreach (var feedbackGroup in registersAndFeedbacks) { var reg = feedbackGroup.Register; if (reg is AnalogRegister) { var points = getAnalogFeedbacks((AnalogRegister)reg, feedbackGroup.Feedbacks); datatoPush.Add(points); } else if (reg is StatusRegister) { var points = getStatusFeedbacks((StatusRegister)reg, feedbackGroup.Feedbacks); datatoPush.AddRange(points); } else { continue; } } } return datatoPush; } } finally { Logger.LogMessageToDB("Done getting data to push to SensorCloud"); } }