Esempio n. 1
0
        //private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        //{
        //    string serialdata = serialPort.ReadLine();
        //    while (serialdata != null)
        //    {
        //        Console.WriteLine(serialdata);
        //        string line = serialdata.Trim();
        //        ProcesSerialData(line);
        //        serialdata = serialPort.ReadLine();
        //    }
        //}

        private void ExecuteCommands(int addr)
        {
            using (IServiceScope scope = scopeFactory.CreateScope())
            {
                HeatAppContext db = scope.ServiceProvider.GetRequiredService <HeatAppContext>();
                List <Command> res;
                res = db.Queue.Where(e => e.Addr == addr).OrderBy(o => o.Time).Take(25).ToList();
                int           weight = 0;
                int           bank   = 0;
                int           send   = 0;
                StringBuilder query  = new StringBuilder();
                foreach (var rec in res)
                {
                    int cw = GetWeight(rec.Data.Substring(0, 1));
                    weight += cw;
                    if (weight > 10)
                    {
                        if (++bank >= 7)
                        {
                            break;
                        }
                        weight = cw;
                    }
                    query.AppendLine("(" + addr.ToString("x02") + "-" + bank.ToString("x") + ")" + rec.Data);
                    send++;
                    rec.Sent = send;
                }
                string q = query.ToString();
                if (q != "")
                {
                    serialPort.WriteLine(q);
                }
                db.SaveChanges();
            }
        }
Esempio n. 2
0
 public CommandService(HeatAppContext db, MqttClient mqttClient, IConfiguration configuration)
 {
     this.db         = db;
     this.mqttClient = mqttClient;
     //this.scopeFactory = scopeFactory;
     this.configuration = configuration;
 }
Esempio n. 3
0
        private void SaveSettings(int addr, string data)
        {
            using (IServiceScope scope = scopeFactory.CreateScope())
            {
                HeatAppContext db = scope.ServiceProvider.GetRequiredService <HeatAppContext>();

                int    idx   = int.Parse(data.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                int    value = int.Parse(data.Substring(6), System.Globalization.NumberStyles.HexNumber);
                string cmd   = data.Substring(0, 1);
                if (cmd == "G" || cmd == "S")
                {
                    Setting memRec = db.ValveSettings.SingleOrDefault(m => m.Addr == addr && m.Idx == idx);
                    if (memRec != null)
                    {
                        memRec.Time  = DateTime.Now;
                        memRec.Value = value;
                    }
                    else
                    {
                        db.ValveSettings.Add(new Setting()
                        {
                            Addr = addr, Idx = idx, Time = DateTime.Now, Value = value
                        });
                    }
                    db.SaveChanges();
                }
            }
        }
Esempio n. 4
0
 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();
         }
     }
 }
Esempio n. 5
0
        private void ProcesSerialData(string line)
        {
            using (IServiceScope scope = scopeFactory.CreateScope())
            {
                HeatAppContext db = scope.ServiceProvider.GetRequiredService <HeatAppContext>();

                if (line == "")
                {
                    return;
                }
                string data = null;
                if (line.Substring(0, 1) == "(" && line.Substring(3, 1) == ")")
                {
                    addr = int.Parse(line.Substring(1, 2), System.Globalization.NumberStyles.HexNumber);
                    data = line.Substring(4);
                }
                else if (line.Substring(0, 1) == "*")
                {
                    var cq = db.Queue.OrderBy(o => o.Sent).Where(w => w.Addr == addr && w.Sent > 0).FirstOrDefault();
                    if (cq != null)
                    {
                        db.Queue.Remove(cq);
                        db.SaveChanges();
                    }
                    data = line.Substring(1);
                }
                else if (line.Substring(0, 1) == "-")
                {
                    data = line.Substring(1);
                }
                else if (line == "}")
                {
                    data = line.Substring(1);
                    addr = 0;
                }
                else
                {
                    addr = 0;
                }

                if (line == "RTC?")
                {
                    DateTime now  = DateTime.Now;
                    string   time = "H" + now.Hour.ToString("x02") + now.Minute.ToString("x02") + now.Second.ToString("x02") + ((int)Math.Round((decimal)now.Millisecond / 10)).ToString("x02");
                    string   date = "Y" + (now.Year - 2000).ToString("x02") + now.Month.ToString("x02") + now.Day.ToString("x02");
                    serialPort.WriteLine(date);
                    serialPort.WriteLine(time);
                }
                else if ((line == "N0?") || (line == "N1?"))
                {
                    int    pr  = 0;
                    int[]  req = { 0, 0, 0, 0 };
                    string v   = "O0000";

                    var res = db.Queue.GroupBy(q => q.Addr).Select(g => new { addr = g.Key, count = g.Count() }).OrderBy(o => o.count).ToList();
                    foreach (var rec in res)
                    {
                        if (rec.addr > 0 && rec.addr < 30)
                        {
                            v = null;
                            if ((line == "N1?") && (rec.count > 20))
                            {
                                v  = "O" + addr.ToString("x02") + pr.ToString("x02");
                                pr = addr;
                                continue;
                            }
                            req[(int)addr / 8] |= (int)Math.Pow(2, (addr % 8));
                        }
                    }
                    if (v == null)
                    {
                        v = "P" + req[0].ToString("x02") + req[1].ToString("x02") + req[3].ToString("x02") + req[3].ToString("x02");
                    }
                    serialPort.WriteLine(v);
                }
                else
                {
                    if (addr > 0)
                    {
                        if (data.Substring(0, 1) == "?")
                        {
                            ExecuteCommands(addr);
                        }
                        else if ((data.Substring(0, 1) == "G" || data.Substring(0, 1) == "S") && data.Substring(1, 1) == "[")
                        {
                            SaveSettings(addr, data);
                        }
                        else if ((data.Substring(0, 1) == "D" || data.Substring(0, 1) == "A") && data.Substring(1, 1) == " ")
                        {
                            SaveState(addr, data);
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        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();
            }
        }
Esempio n. 7
0
 public QueueController(HeatAppContext context)
 {
     db = context;
 }
Esempio n. 8
0
 public ValvesController(HeatAppContext db, CommandService commandService)
 {
     this.commandService = commandService;
     this.db             = db;
 }
Esempio n. 9
0
 public BoilerController(HeatAppContext db, CommandService commandService)
 {
     this.db             = db;
     this.commandService = commandService;
 }
Esempio n. 10
0
 public ValveLogsController(HeatAppContext db)
 {
     this.db = db;
 }
Esempio n. 11
0
 public TimeTablesController(HeatAppContext db, CommandService commandService)
 {
     this.db             = db;
     this.commandService = commandService;
 }
Esempio n. 12
0
 public CommandService(HeatAppContext db)
 {
     this.db = db;
 }