public void Monitor(EngineRoomServiceDB erdb, List <Message> messages, bool returnEventsOnly) { //if not enabled OR it has only just been initialised then don't monitor ... the distance sensor device needs time to build an accurate reading if (!Enabled || DateTime.Now.Subtract(_initialisedAt).TotalSeconds < 45) { return; } Message msg = null; String desc = null; EngineRoomServiceDB.LogEventType let; FluidLevel waterLevel = Level; //old level Level = FluidTank.GetFluidLevel(PercentFull); //current level bool fillingUp = waterLevel < Level; switch (Level) { case FluidLevel.VERY_LOW: let = fillingUp ? EngineRoomServiceDB.LogEventType.INFO : EngineRoomServiceDB.LogEventType.WARNING; desc = String.Format("Water Level: {0} @ {1}% and {2}L remaining", Level, PercentFull, Remaining); BBAlarmsService.AlarmState alarmState = fillingUp ? BBAlarmsService.AlarmState.OFF : BBAlarmsService.AlarmState.MODERATE; msg = BBAlarmsService.AlarmsMessageSchema.AlertAlarmStateChange(ID, alarmState, desc); break; case FluidLevel.EMPTY: let = EngineRoomServiceDB.LogEventType.WARNING; desc = String.Format("Water Level: {0} @ {1}% and {2}L remaining", Level, PercentFull, Remaining); msg = BBAlarmsService.AlarmsMessageSchema.AlertAlarmStateChange(ID, BBAlarmsService.AlarmState.SEVERE, desc); break; default: let = EngineRoomServiceDB.LogEventType.INFO; desc = String.Format("Water Level: {0} @ {1}% and {2}L remaining", Level, PercentFull, Remaining); msg = BBAlarmsService.AlarmsMessageSchema.AlertAlarmStateChange(ID, BBAlarmsService.AlarmState.OFF, desc); break; } if (msg != null && (waterLevel != Level || !returnEventsOnly)) { messages.Add(msg); if (returnEventsOnly) { erdb.LogEvent(let, ID, desc); } } }
public FluidTank AddTank(String id, int transmitPin, int receivePin, int capacity, int minDistance = JSN_SR04T.MIN_DISTANCE, int maxDistance = JSN_SR04T.MAX_DISTANCE) { FluidTank ft = new FluidTank(transmitPin, receivePin, id); ft.Capacity = capacity; ft.MinDistance = minDistance; ft.MaxDistance = maxDistance; ft.Offset = 3; ft.SampleInterval = SampleInterval; ft.SampleSize = SampleSize; Tanks.Add(ft); AddDevice(ft); return(ft); }