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); }