コード例 #1
0
        public static bool Load()
        {
            Logger.Init();
            Logger.Log(Logger.LOGLEVEL_INFO, "###############################################################################################");
            Logger.Log(Logger.LOGLEVEL_INFO, "About to load init data");

            try
            {
                using (TextReader reader = new StreamReader(CONTROLFILE))
                {
                    heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd());
                    reader.Close();
                }
            }
            catch
            {
                try
                {
                    Logger.Log(Logger.LOGLEVEL_ERROR, "Failed to load data file - trying alt file");
                    using (TextReader reader = new StreamReader(CONTROLFILEALT))
                    {
                        heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd());
                        reader.Close();
                    }
                }
                catch
                {
                    Logger.Log(Logger.LOGLEVEL_ERROR, "Failed to load alt data file - trying fallback");
                    using (TextReader reader = new StreamReader(CONTROLFILEFALLBACK))
                    {
                        heatingData = JsonConvert.DeserializeObject <HeatingData>(reader.ReadToEnd());
                        reader.Close();
                    }
                }
            }

            Logger.Log(Logger.LOGLEVEL_INFO, "Init data loaded");

            if (heatingData == null)
            {
                return(false);
            }

            heatingData.rooms.ForEach(r =>
            {
                var roomHeaters = heatingData.heaters.FindAll(h => h.roomId == r.id);
                var roomSensors = heatingData.sensors.FindAll(s => s.roomId == r.id);
                r.sensors       = roomSensors;
                roomHeaters.ForEach(rh => rh.sensors = roomSensors);
                r.heaters = roomHeaters;
            });

            // Clear and then populate relay set
            heatingData.relays.Clear();
            heatingData.heaters.ForEach(h =>
            {
                var heaterRelay = new Relay(h.name, h.relayAddress);
                heatingData.relays.Add(heaterRelay);
            });

            heatingData.relays.Sort();

            Logger.Log(Logger.LOGLEVEL_INFO, "Init data processed");
            Save();
            return(true);
        }
コード例 #2
0
        public static bool Load()
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(HeatingData));
            TextReader reader = new StreamReader(@"C:\Temp\HeatingData.xml");

            Logger.Log(Logger.LOGLEVEL_INFO, "About to load init data");
            object obj = deserializer.Deserialize(reader);
            theData = (HeatingData)obj;
            reader.Close();
            Logger.Log(Logger.LOGLEVEL_INFO, "Init data loaded");

            // Deserializer looses references - creates new objects so clear down and rebuild
            for (int i = 0; i < Rooms.Count; i++)
            {
                Rooms[i].Heaters.Clear();
                Rooms[i].Sensors.Clear();
            }

            for (int i = 0; i < FloorHeats.Count; i++)
            {
                FloorHeats[i].Sensors.Clear();
            }

            for (int i = 0; i < TowelRads.Count; i++)
            {
                TowelRads[i].Sensors.Clear();
            }

            // Add heaters to rooms
            for (int i = 0; i < FloorHeats.Count; i++)
            {
                for (int j = 0; j < Rooms.Count; j++)
                {
                    if (Rooms[j].Id == FloorHeats[i].RoomId)
                    {
                        Rooms[j].Heaters.Add(FloorHeats[i]);
                        break;
                    }
                }
            }
            for (int i = 0; i < TowelRads.Count; i++)
            {
                for (int j = 0; j < Rooms.Count; j++)
                {
                    if (Rooms[j].Id == TowelRads[i].RoomId)
                    {
                        Rooms[j].Heaters.Add(TowelRads[i]);
                        break;
                    }
                }
            }

            // Add sensors to rooms and heaters
            for (int i = 0; i < RoomSensors.Count; i++)
            {
                for (int j = 0; j < Rooms.Count; j++)
                {
                    if (Rooms[j].Id == RoomSensors[i].RoomId)
                    {
                        Rooms[j].Sensors.Add(RoomSensors[i]);
                        for (int k = 0; k < Rooms[j].Heaters.Count; k++)
                        {
                            Rooms[j].Heaters[k].Sensors.Add(RoomSensors[i]);
                        }
                        break;
                    }
                }
            }
            for (int i = 0; i < FloorSensors.Count; i++)
            {
                for (int j = 0; j < Rooms.Count; j++)
                {
                    if (Rooms[j].Id == FloorSensors[i].RoomId)
                    {
                        Rooms[j].Sensors.Add(FloorSensors[i]);
                        for (int k = 0; k < Rooms[j].Heaters.Count; k++)
                        {
                            Rooms[j].Heaters[k].Sensors.Add(FloorSensors[i]);
                        }
                        break;
                    }
                }
            }

            // Clear and then populate relay set
            Relay oRelay;
            theData.theRelays.Clear();
            for (int i = 0; i < FloorHeats.Count; i++)
            {
                oRelay = new Relay(FloorHeats[i].Name, FloorHeats[i].RelayAddress);
                theData.theRelays.Add(oRelay);
            }
            for (int i = 0; i < TowelRads.Count; i++)
            {
                oRelay = new Relay(TowelRads[i].Name, TowelRads[i].RelayAddress);
                theData.theRelays.Add(oRelay);
            }
            theData.theRelays.Sort();

            Logger.Log(Logger.LOGLEVEL_INFO, "Init data processed");
            return true;
        }