private bool BeginMonitoring() { try { //when an alarm is found, if it equals this, it will not play the alarm AlarmToIgnore = new AlarmState(); AlarmToIgnore.AlarmOn = false; //more code to avoid uninitalized exceptions CurAlarm = new AlarmState(); CurAlarm.AlarmOn = false; InstrumentMonitor = new AlarmClient(); InitializePolling(); return true; } catch (Exception thrown) { MessageBox.Show("Could not initialize the remote client.\n" + thrown.Message); isConnected = false; ChangeButtonFromOtherThread(); return false; } }
private void CreateAndActivateAlarm() { PlayAlarmSound(); CurAlarm = new AlarmState(); CurAlarm.AlarmOn = true; CurAlarm.TimeTurnedOn = DateTime.Now; ClientSideAlarmActivation = true; AlarmOnOrOff = CurrentAlarmState.AlarmOn; }
private void PollInstrumentStatus() { try { while (PerformPolling) { AlarmState AS = InstrumentMonitor.GetAlarmStatus(); InstrumentStatus IS = InstrumentMonitor.GetInstrumentStatus(); if (chkMonitorVideo.Checked) { //update images string updatetime1; string updatetime2; //Bitmap Cam1 = InstrumentMonitor.GetCameraImage1(out updatetime1); //Bitmap Cam2 = InstrumentMonitor.GetCameraImage2(out updatetime2); byte[] myStream = InstrumentMonitor.ReturnJPEGCamera1(out updatetime1); Image Cam1 = TurnByteArrayToImage(myStream); myStream = InstrumentMonitor.ReturnJPEGCamera2(out updatetime2); Image Cam2 = TurnByteArrayToImage(myStream); object[] args = { Cam1, updatetime1, Cam2, updatetime2 }; this.Invoke(BitmapDel, args); } if (chkIdle.Checked) { CheckForIdle(); } if (AS.AlarmOn) { if (AlarmOnOrOff == CurrentAlarmState.AlarmOn) { //alarm already running continue; } else if (AS.TimeTurnedOn == AlarmToIgnore.TimeTurnedOn) { //alarm already ignored continue; } else { CurAlarm = new AlarmState(); CurAlarm.AlarmOn = AS.AlarmOn; CurAlarm.TimeTurnedOn = AS.TimeTurnedOn; AlarmOnOrOff = CurrentAlarmState.AlarmOn; PlayAlarmSound(); } } else if (AlarmOnOrOff== CurrentAlarmState.AlarmOn && !ClientSideAlarmActivation) { StopAlarmSound(); } //update the status object[] tmp = new object[1] { IS.Status }; this.Invoke(UpdateStatusDel, tmp); //wait 4 seconds Thread.Sleep(POLLING_INTERVAL); } } catch (Exception thrown) { if (chkAlarmDisconnect.Checked) { CreateAndActivateAlarm(); } isConnected = false; MessageBox.Show("Could not poll the Clarity software for its status. This suggests the software is not running.\n\n"+thrown.Message,"Problem Connecting",MessageBoxButtons.OK,MessageBoxIcon.Error); ChangeButtonFromOtherThread(); } }
/// <summary> /// Tests the value of the given measurement to determine /// whether the alarm should be raised or cleared. /// </summary> /// <param name="measurement">The measurement whose value is to be tested.</param> /// <returns>true if the alarm's state changed; false otherwise</returns> public bool Test(IMeasurement measurement) { if (m_state == AlarmState.Raised && m_clearTest(measurement)) { m_state = AlarmState.Cleared; return true; } if (m_state == AlarmState.Cleared && m_raiseTest(measurement)) { m_state = AlarmState.Raised; Cause = measurement; return true; } return false; }
private void btnSilenceAlarm_Click(object sender, EventArgs e) { StopAlarmSound(); AlarmToIgnore = CurAlarm; }
protected override void CreateStates() { StatePreRun = new PreRunState(this); StateRun = new RunState(this); StatePreStop = new PreStopState(this); StateStop = new StopState(this); StatePreInitialize = new PreInitializeState(this); StateInitialize = new InitializeState(this); StateRundown = new RundownState(this); StatePreEmergency = new PreEmergencyState(this); StateEmergency = new EmergencyState(this); StateEmergencyReset = new EmergencyResetState(this); StatePreAlarm = new PreAlarmState(this); StateAlarm = new AlarmState(this); StatePreWarning = new PreWarningState(this); StateWarning = new WarningState(this); StatePreSuspend = new PreSuspendState(this); StateSuspend = new SuspendState(this); }
private void SetAlarmState(CommandEventArgs args) { AlarmState newState = ParseAlarmState(args.CommandValue); if (newState == _currentState) return; if (_currentState == AlarmState.Off) { // You cant set the alarm if any of the windows, doors or motion detectors are currently open int openedSensorCount = _sensors.Where(s => s.SensorValue == "opened").Count(); if (openedSensorCount > 0) { _client.Publish(string.Format("/{0}/{1}/{2}/{3}", args.HouseCode, args.DeviceCode, args.LocationCode, "alarmstatevalid"), new MqttPayload("false"), QoS.BestEfforts, false); } else { _client.Publish(string.Format("/{0}/{1}/{2}/{3}", args.HouseCode, args.DeviceCode, args.LocationCode, "alarmstatevalid"), new MqttPayload("true"), QoS.BestEfforts, false); _currentState = newState; SendAlarmStateChange(args.HouseCode, _currentState); if (_currentState == AlarmState.Sleep) LockAllDoors(); else if (_currentState == AlarmState.Away) { _giveMeTimeToExit = true; _timeRemainingInSeconds = _giveMeTimeToExitInMilliseconds / 1000; _giveMeTimeToExitTimer.Enabled = true; } } } }
private void SendAlarmStateChange(string houseCode, AlarmState state) { string topic = string.Format("/{0}/{1}/{2}/{3}", houseCode, "alarmpanel", "firstfloor", "setalarmstate"); _client.Publish(topic, new MqttPayload(GetAlarmState(state)), QoS.BestEfforts, false); topic = string.Format("/{0}/{1}/{2}/{3}", houseCode, "alarmpanel", "masterbedroom", "setalarmstate"); _client.Publish(topic, new MqttPayload(GetAlarmState(state)), QoS.BestEfforts, false); topic = string.Format("/{0}/{1}/{2}/{3}", houseCode, "alarmpanel", "bedroom1", "setalarmstate"); _client.Publish(topic, new MqttPayload(GetAlarmState(state)), QoS.BestEfforts, false); topic = string.Format("/{0}/{1}/{2}/{3}", houseCode, "alarmpanel", "bedroom2", "setalarmstate"); _client.Publish(topic, new MqttPayload(GetAlarmState(state)), QoS.BestEfforts, false); }
private string GetAlarmState(AlarmState state) { string stringState = "unknown"; switch (state) { case AlarmState.Off: stringState = "off"; break; case AlarmState.Away: stringState = "away"; break; case AlarmState.Sleep: stringState = "sleep"; break; } return stringState; }
private bool DisarmAlarm(CommandEventArgs args) { bool disarmed=false; if (args.CommandValue.Equals(_secretCode)) { _giveMeTimeToEnterTimer.Enabled = false; _currentState = AlarmState.Off; SendAlarmStateChange(args.HouseCode, _currentState); SilenceBurglarAlarm(); _giveMeTimeToExitTimer.Enabled = false; _giveMeTimeToExit = false; disarmed = true; _client.Publish(string.Format("/{0}/{1}/{2}/{3}", args.HouseCode, args.DeviceCode, args.LocationCode, "codevalid"), new MqttPayload("true"), QoS.BestEfforts, false); } else { _client.Publish(string.Format("/{0}/{1}/{2}/{3}", args.HouseCode, args.DeviceCode, args.LocationCode, "codevalid"), new MqttPayload("false"), QoS.BestEfforts, false); } return disarmed; }