Exemplo n.º 1
0
        public static Status GetStatus()
        {
            var status = new Status();

            foreach (TimedEvent te in heatingData.events)
            {
                if (te.IsActive(DateTime.MinValue))
                {
                    var le = new LiveEvent();
                    le.timedEvent = te;
                    le.heater     = HeatingControl.GetHeater(te.subjectId);
                    le.relay      = HeatingControl.GetRelayByAddress(le.heater.relayAddress);
                    status.liveEvents.Add(le);
                }
                else if (te.IsActive(DateTime.MinValue, Status.SOONTIME))
                {
                    var le = new LiveEvent();
                    le.timedEvent = te;
                    le.heater     = HeatingControl.GetHeater(te.subjectId);
                    le.relay      = HeatingControl.GetRelayByAddress(le.heater.relayAddress);
                    status.soonEvents.Add(le);
                }
            }

            status.sensors = heatingData.sensors;

            return(status);
        }
        private static void SetValue(String p_SensorId, int p_Value)
        {
            bool bFound = false;

            foreach (Sensor sensor in HeatingControl.GetAllSensors())
            {
                if (sensor.sensorId == p_SensorId)
                {
                    if (!sensor.ignore)
                    {
                        var lastReading = sensor.reading;
                        sensor.reading = p_Value;
                        Logger.Log(Logger.LOGLEVEL_INFO, sensor.name + " previous: " + lastReading + " new: " +
                                   sensor.reading + " read: " + sensor.lastRead.ToString("yyyyMMdd H:mm") + " changed: " + sensor.lastChange.ToString("yyyyMMdd H:mm"));
                    }
                    bFound = true;
                    break;
                }
            }

            if (!bFound)
            {
                Logger.Log(Logger.LOGLEVEL_ERROR, "Un-mapped sensor: " + p_SensorId + ", current temp: " + p_Value.ToString());
            }
        }
        public static void DoEvents()
        {
            try
            {
                RelayControl.ResetAllSetupRelays();
                foreach (TimedEvent timedEvent in HeatingControl.GetAllEvents())
                {
                    if (timedEvent.IsActive(DateTime.MinValue))
                    {
                        switch (timedEvent.subjectType)
                        {
                        case "heater":
                            Heater heater = HeatingControl.GetHeater(timedEvent.subjectId);
                            if (heater == null)
                            {
                                break;
                            }
                            Logger.Log(Logger.LOGLEVEL_INFO, "Active timed event: heater: " + heater.name + ", relay: " + heater.relayAddress +
                                       ", event: " + timedEvent.description);

                            ProcessHeaterEvent(heater, timedEvent);
                            break;
                        }
                    }
                }
                RelayControl.UpdateRelays();
            }
            catch (Exception ex)
            {
                var testVal = ex;
            }
        }
        public static int GetValue(string p_SensorId)
        {
            var sensorList = HeatingControl.GetAllSensors();

            for (int i = 0; i < sensorList.Count; i++)
            {
                if (sensorList[i].sensorId == p_SensorId)
                {
                    return(sensorList[i].reading);
                }
            }
            return(Sensor.NO_READING);
        }
        private static void WorkerThread()
        {
            Thread.Sleep(5000);
            // Let the program initialise before starting worker thread ops

            while (m_bRun)
            {
                Logger.Log(Logger.LOGLEVEL_INFO, "Before DoEvents");
                DoEvents();
                Logger.Log(Logger.LOGLEVEL_INFO, "After DoEvents");
                HeatingControl.Save();
                Thread.Sleep(LOOP_DELAY);
            }
        }
        private static void ProcessHeaterEvent(Heater heater, TimedEvent timedEvent)
        {
            bool newState       = false;
            bool foundProcessed = false;
            Room room           = HeatingControl.GetRoom(heater.roomId);

            int sensorTotal   = 0;
            int sensorAverage = 0;
            int sensorCount   = 0;

            foreach (Sensor sensor in heater.sensors)
            {
                if (!sensor.ignore)
                {
                    sensorTotal += sensor.reading;
                    sensorCount++;
                }
            }

            if (sensorCount > 0)
            {
                sensorAverage = sensorTotal / sensorCount;
                if (sensorAverage >= room.tempMax)
                {
                    return;
                }
            }

            if (timedEvent.action == "timed")
            {
                newState = true;
            }
            else if (timedEvent.action == "target")
            {
                if (sensorCount == 0)
                {
                    return;
                }
                if (sensorAverage < room.tempTarget + m_iTempDelta)
                {
                    newState = true;
                }
                else if (sensorAverage == room.tempTarget + m_iTempDelta)
                { // Keep relay in same state to avoid flip-flopping
                    newState = RelayControl.GetRelayState(heater.relayAddress);
                }
            }

            foundProcessed = false;
            foreach (ProcessedRelay processedRelay in m_oProcessedRelays)
            {
                if (heater.relayAddress == processedRelay.relayAddress)
                {
                    if (timedEvent.id >= processedRelay.eventId)
                    {// highest event id has priority
                        processedRelay.eventId = timedEvent.id;
                    }
                    foundProcessed = true;
                    break;
                }
            }

            if (!foundProcessed)
            {
                m_oProcessedRelays.Add(new ProcessedRelay(heater.relayAddress, timedEvent.id));
            }

            RelayControl.SetupRelay(heater.relayAddress, newState);
        }