示例#1
0
 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;
     }
 }
示例#2
0
 private void CreateAndActivateAlarm()
 {
     PlayAlarmSound();
     CurAlarm = new AlarmState();
     CurAlarm.AlarmOn = true;
     CurAlarm.TimeTurnedOn = DateTime.Now;
     ClientSideAlarmActivation = true;
     AlarmOnOrOff = CurrentAlarmState.AlarmOn;
 }
示例#3
0
        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();
            }
        }
示例#4
0
文件: Alarm.cs 项目: rmc00/gsf
        /// <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;
        }
示例#5
0
 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;
        }