private void PerformSensorEnergyLogBatch(Sensor sensor, SensorLogBatch sensorLogBatch)
        {
            SensorEnergyLog previousLog = GetSensorEnergyLogLast(sensor);

            try
            {
                foreach (var contentLogItem in sensorLogBatch.Content.Split("|"))
                {
                    Func <long, long> getSensorDimTimeId = (unixTime) => this.GetOrCreateSensorDimTime(sensor, unixTime).Id;
                    var newEnergyLog = SensorEnergyLog.Parse(sensor, getSensorDimTimeId, contentLogItem);
                    if (previousLog != null)
                    {
                        newEnergyLog.CalculateDuration(sensor.LogDurationMode, previousLog);
                    }
                    this.SensorEnergyLogs.Add(newEnergyLog);
                    this.SaveOrUpdateSensorEnergyLog(newEnergyLog);
                    previousLog = newEnergyLog;
                }
                this.SensorLogBatchs.Remove(sensorLogBatch);
                this.SaveChanges();
            }
            catch (Exception e)
            {
                sensorLogBatch.Attempts++;
                sensorLogBatch.Exception = $"Message: {e.Message}\nSource: {e.Source}";
                this.SaveChanges();
            }
        }
        public SensorEnergyLog CreateSensorEnergyLog(string sensorId, long sensorDimTimeId, long unixTime, float duration, float watts1, float watts2, float watts3, float convertToUnits)
        {
            var createSensorEnergyLog = new SensorEnergyLog()
            {
                SensorId        = sensorId,
                SensorDimTimeId = sensorDimTimeId,
                UnixTime        = unixTime,
                Duration        = duration,
                Watts1          = watts1,
                Watts2          = watts2,
                Watts3          = watts3,
                WattsTotal      = watts1 + watts2 + watts3,
                ConvertToUnits  = convertToUnits
            };

            this.SensorEnergyLogs.Add(createSensorEnergyLog);
            this.SaveChanges();
            return(createSensorEnergyLog);
        }
 private void SaveOrUpdateSensorEnergyLog(SensorEnergyLog newEnergyLog)
 {
     try
     {
         this.SaveChanges();
     }
     catch (Exception e)
     {
         this.SensorEnergyLogs.Remove(newEnergyLog);
         var oldEnergyLog = this.SensorEnergyLogs
                            .Where(log => (log.SensorId == newEnergyLog.SensorId) && (log.UnixTime == newEnergyLog.UnixTime))
                            .FirstOrDefault();
         if (oldEnergyLog != null)
         {
             oldEnergyLog.Update(newEnergyLog);
             this.SaveChanges();
         }
         else
         {
             throw e;
         }
     }
 }