private async Task SaveValveLogAsync(int addr, StateMessage state) { using (IServiceScope scope = scopeFactory.CreateScope()) { HeatAppContext db = scope.ServiceProvider.GetRequiredService <HeatAppContext>(); ValveLog vl = new ValveLog(addr, state); var last = db.ValveLog.SingleOrDefault(v => v.Addr == vl.Addr && v.Time == vl.Time); if (last == null) { db.ValveLog.Add(vl); await db.SaveChangesAsync(); } } }
private void SaveState(int addr, string message) { using (IServiceScope scope = scopeFactory.CreateScope()) { HeatAppContext db = scope.ServiceProvider.GetRequiredService <HeatAppContext>(); List <string> items = message.Split(' ').ToList(); ValveLog vl = new ValveLog(); vl.Addr = addr; for (int i = 1; i < items.Count; i++) { string item = items[i]; switch (item.Substring(0, 1)) { case "A": vl.Auto = true; break; case "-": vl.Auto = false; break; case "M": vl.Auto = false; break; case "V": vl.Turn = int.Parse(item.Substring(1)); break; case "I": vl.Actual = decimal.Parse(item.Substring(1)) / 100; break; case "S": vl.Wanted = decimal.Parse(item.Substring(1)) / 100; break; case "B": vl.Battery = decimal.Parse(item.Substring(1)) / 1000; break; case "E": vl.Error = int.Parse(item.Substring(1), System.Globalization.NumberStyles.HexNumber); break; case "W": vl.Window = true; break; case "L": vl.Locked = true; break; case "X": //$st['force'] = 1; break; } } DateTime now = DateTime.Now; vl.Time = now; db.ValveLog.Add(vl); db.SaveChanges(); } }