Example #1
0
        public void Reset(Sensor sensor, bool enableAlarmActivatedLed = true)
        {
            if (sensor.IsSensorTamper() && TrippedSensors.Contains(sensor))
            {
                if (TrippedSensors.Count == 1)
                {
                    Log.Information($"[ALARMSTATE] RESET Sensor: {sensor}");
                    _relayBoard
                    .Relay(Enums.Relay.AlarmStrobe)
                    .Relay(Enums.Relay.AlarmSiren)
                    .Off();
                }

                TrippedSensors.Remove(sensor);
            }

            if (sensor.IsFrontDoor() && TrippedSensors.Contains(sensor))
            {
                if (TrippedSensors.Count == 1)
                {
                    Log.Information($"[ALARMSTATE] RESET Sensor: {sensor}");
                    _relayBoard.Off(Enums.Relay.AlarmStrobe);
                }

                TrippedSensors.Remove(sensor);
            }

            if (sensor.IsGarageDoor() && TrippedSensors.Contains(sensor))
            {
                if (TrippedSensors.Count == 1)
                {
                    Log.Information($"[ALARMSTATE] RESET Sensor: {sensor}");
                    _relayBoard
                    .Relay(Enums.Relay.AlarmStrobe)
                    .Off();
                }

                TrippedSensors.Remove(sensor);
            }

            if (sensor.IsSensorOutdoor() && TrippedSensors.Contains(sensor))
            {
                Log.Information($"[ALARMSTATE] RESET Sensor: {sensor}");
                _relayBoard
                .Relay(Enums.Relay.AlarmStrobe)
                .Relay(Enums.Relay.AlarmSiren)
                .Off();

                TrippedSensors.Remove(sensor);
            }
        }
Example #2
0
        private static (string Title, string CameraId) SensorDetails(Sensor sensor)
        {
            switch (sensor)
            {
            case Sensor.OutdoorMotion:
                return("Outdoor - Motion", OutdoorCameraId);

            case Sensor.OutdoorTamper:
                return("Outdoor - Tamper", OutdoorCameraId);

            case Sensor.GarageDoor:
                return("Garage Door - Opened", FrontDoorCameraId);

            case Sensor.FrontDoorMotion:
                return("Front Door - Motion", FrontDoorCameraId);

            default:
                return("Unknown - Unknown", "");
            }
        }
Example #3
0
        public bool SensorArmed(Sensor sensor)
        {
            switch (sensor)
            {
            case Sensor.OutdoorTamper:
                return(true);

            case Sensor.OutdoorMotion:
                return(Config.ArmedState.ArmedAwayDay ||
                       Config.ArmedState.ArmedAwayNight ||
                       Config.ArmedState.ArmedSleeping);

            case Sensor.GarageDoor:
                return(Config.ArmedState.GarageDoorArmed && !Config.GarageDoorOperated);

            case Sensor.FrontDoorMotion:
                return(Config.ArmedState.FrontDoorArmed);

            default:
                return(false);
            }
        }
Example #4
0
        public async Task Tripped(Sensor sensor)
        {
            var sensorDetails = SensorDetails(sensor);

            if (sensor.IsSensorTamper())
            {
                Log.Information($"[ALARMSTATE] TRIPPED Sensor: {sensor}");
                TrippedSensors.Add(sensor);

                _relayBoard
                .Relay(Enums.Relay.AlarmStrobe)
                .Relay(Enums.Relay.AlarmSiren)
                .On();

                TurnLightsOnAtNight();

                _timerEvents.UpdateEvent(Enums.TimedEvent.StrobeOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.StrobeAlarm), true));
                _timerEvents.UpdateEvent(Enums.TimedEvent.SirenOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.SirenAlarm), true));

                await _mediator.Publish(new SendRichPushNotificationCommand
                {
                    Title    = sensorDetails.Title,
                    Body     = "Sensor has been tampered with...",
                    CameraId = sensorDetails.CameraId
                });
            }

            if (sensor.IsSensorOutdoor())
            {
                Log.Information($"[ALARMSTATE] TRIPPED Sensor: {sensor}");
                TrippedSensors.Add(sensor);

                _relayBoard
                .Relay(Enums.Relay.AlarmStrobe)
                .Relay(Enums.Relay.AlarmSiren)
                .On();

                TurnLightsOnAtNight();

                _timerEvents.UpdateEvent(Enums.TimedEvent.StrobeOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.StrobeAlarm), true));
                _timerEvents.UpdateEvent(Enums.TimedEvent.SirenOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.SirenAlarm), true));

                await _mediator.Publish(new SendRichPushNotificationCommand
                {
                    Title    = sensorDetails.Title,
                    Body     = "Outdoor ALARM",
                    CameraId = sensorDetails.CameraId
                });
            }

            if (sensor.IsFrontDoor())
            {
                var strobeOn = "OFF";
                if (SensorArmed(Sensor.FrontDoorMotion))
                {
                    Log.Information($"[ALARMSTATE] TRIPPED Sensor: {sensor}");
                    TrippedSensors.Add(sensor);

                    _relayBoard.On(Enums.Relay.AlarmStrobe);

                    _timerEvents.UpdateEvent(Enums.TimedEvent.StrobeOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.StrobeAlarm), true));

                    strobeOn = "ON";
                }

                await _mediator.Publish(new SendRichPushNotificationCommand
                {
                    Title    = sensorDetails.Title,
                    Body     = $"Alarm strobe is {strobeOn}",
                    CameraId = sensorDetails.CameraId
                });
            }

            if (sensor.IsGarageDoor())
            {
                Log.Information($"[ALARMSTATE] TRIPPED Sensor: {sensor}");
                TrippedSensors.Add(sensor);

                _relayBoard
                .Relay(Enums.Relay.AlarmStrobe)
                .Relay(Enums.Relay.AlarmSiren)
                .On();

                _timerEvents.UpdateEvent(Enums.TimedEvent.StrobeOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.StrobeAlarm), true));
                _timerEvents.UpdateEvent(Enums.TimedEvent.SirenOff, new TimedEvent(_clock.Now.AddTimeSpan(Config.SirenAlarm), true));

                await _mediator.Publish(new SendRichPushNotificationCommand
                {
                    Title    = sensorDetails.Title,
                    Body     = "Alarm ACTIVATED",
                    CameraId = sensorDetails.CameraId
                });
            }

            void TurnLightsOnAtNight()
            {
                if (Config.ArmedState.ArmedAwayNight || Config.ArmedState.ArmedSleeping)
                {
                    _relayBoard
                    .Relay(Enums.Relay.LightsGarden)
                    .On();
                }
            }
        }