Added alarm functionality
This commit is contained in:
parent
58a57dceef
commit
0af39c6eb5
@ -76,6 +76,7 @@ unsigned long current_timestamp = 0;
|
||||
unsigned long activity_timestamp = 0;
|
||||
unsigned long servo_timestamp = 0;
|
||||
unsigned long rfid_timeout_timestamp = 0;
|
||||
unsigned long alarm_timestamp = 0;
|
||||
|
||||
bool lock_disable = false;
|
||||
|
||||
@ -92,6 +93,15 @@ int rfid_tags[RFID_TAGS][RFID_TAG_BYTES];
|
||||
int rfid_store_tag_nbr = 0;
|
||||
bool rfid_store_tag = false;
|
||||
|
||||
#define ALARM_PRE_STAGE_DISABLED 0
|
||||
#define ALARM_PRE_STAGE_WAITING 1
|
||||
#define ALARM_PRE_STAGE_ENABLED 2
|
||||
|
||||
int alarm_pre_activate = 0;
|
||||
bool alarm_activate = false;
|
||||
bool alarm_confirmed = false;
|
||||
bool alarm_waiting_for_confirmation = false;
|
||||
|
||||
ServoController servo(12);
|
||||
|
||||
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_ALWAYS_AWAKE);
|
||||
@ -100,8 +110,10 @@ ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_ALWAYS_AWAKE);
|
||||
ZUNO_SETUP_CHANNELS(
|
||||
ZUNO_SWITCH_BINARY(getterLock, setterLock),
|
||||
ZUNO_SWITCH_BINARY(getterLockDisable, setterLockDisable),
|
||||
ZUNO_SWITCH_BINARY(getterAlarmActivate, setterAlarmActivate),
|
||||
ZUNO_SWITCH_BINARY(getterAlarmConfirm, setterAlarmConfirm),
|
||||
ZUNO_SWITCH_MULTILEVEL(getterStoreRFID, setterStoreRFID),
|
||||
ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor)
|
||||
ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor),
|
||||
);
|
||||
|
||||
void set_servo(int mode, int source){
|
||||
@ -177,7 +189,7 @@ void update_rfid() {
|
||||
CONSOLE_SERIAL.println("RFID tag stored");
|
||||
rfid_store_tag = false;
|
||||
rfid_store_tag_nbr = 0;
|
||||
zunoSendReport(3);
|
||||
zunoSendReport(5);
|
||||
|
||||
} else {
|
||||
// Check for match of RFID tag
|
||||
@ -192,9 +204,20 @@ void update_rfid() {
|
||||
CONSOLE_SERIAL.println("RFID tag verified");
|
||||
if (sensor_door_locked){
|
||||
set_servo(SERVO_UNLOCK, SOURCE_RFID);
|
||||
if (alarm_activate == true){
|
||||
alarm_activate = false;
|
||||
alarm_waiting_for_confirmation = true;
|
||||
zunoSendReport(3);
|
||||
}
|
||||
}
|
||||
else{
|
||||
set_servo(SERVO_LOCK, SOURCE_RFID);
|
||||
if (alarm_pre_activate == ALARM_PRE_STAGE_ENABLED){
|
||||
alarm_pre_activate = ALARM_PRE_STAGE_DISABLED;
|
||||
alarm_activate = true;
|
||||
alarm_waiting_for_confirmation = true;
|
||||
zunoSendReport(3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -349,7 +372,7 @@ void loop() {
|
||||
rfid_eeprom_pos++;
|
||||
}
|
||||
rfid_store_tag_nbr = 0;
|
||||
zunoSendReport(3);
|
||||
zunoSendReport(5);
|
||||
}
|
||||
else{
|
||||
set_servo(SERVO_LOCK, SOURCE_BUTTONS);
|
||||
@ -363,6 +386,10 @@ void loop() {
|
||||
}
|
||||
else{
|
||||
set_servo(SERVO_UNLOCK, SOURCE_BUTTONS);
|
||||
if (sensor_door_locked == false){
|
||||
alarm_pre_activate = ALARM_PRE_STAGE_WAITING;
|
||||
alarm_timestamp = current_timestamp + 2000;
|
||||
}
|
||||
}
|
||||
btn_lock = false;
|
||||
btn_unlock = false;
|
||||
@ -383,7 +410,7 @@ void loop() {
|
||||
// Check if sensor changed and report to Z-Wave
|
||||
if (sensor_door_closed_changed){
|
||||
sensor_door_closed_changed = false;
|
||||
zunoSendReport(4);
|
||||
zunoSendReport(6);
|
||||
}
|
||||
|
||||
// Check if servo needs to be centered or turned off
|
||||
@ -397,12 +424,24 @@ void loop() {
|
||||
}
|
||||
}
|
||||
|
||||
// Check if pre Alarm should be enablede
|
||||
if (alarm_pre_activate == ALARM_PRE_STAGE_WAITING) {
|
||||
if (current_timestamp >= alarm_timestamp) {
|
||||
if (sensor_door_locked_current_state == LOW){
|
||||
alarm_pre_activate = ALARM_PRE_STAGE_ENABLED;
|
||||
}
|
||||
else {
|
||||
alarm_pre_activate = ALARM_PRE_STAGE_DISABLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if store RFID has timed out
|
||||
if (rfid_store_tag_nbr > 0) {
|
||||
if (current_timestamp >= rfid_timeout_timestamp) {
|
||||
rfid_store_tag = false;
|
||||
rfid_store_tag_nbr = 0;
|
||||
zunoSendReport(3);
|
||||
zunoSendReport(6);
|
||||
}
|
||||
}
|
||||
|
||||
@ -444,6 +483,22 @@ void loop() {
|
||||
digitalWrite(LED_LOCK_PIN, HIGH);
|
||||
digitalWrite(LED_UNLOCK_PIN, HIGH);
|
||||
}
|
||||
// Indicate that pre Alarm activation has been enabled
|
||||
else if (alarm_pre_activate == 2){
|
||||
if (current_timestamp >= activity_timestamp) {
|
||||
if (activity_flash == 0){
|
||||
digitalWrite(LED_LOCK_PIN, HIGH);
|
||||
digitalWrite(LED_UNLOCK_PIN, HIGH);
|
||||
activity_flash = 1;
|
||||
}
|
||||
else{
|
||||
digitalWrite(LED_LOCK_PIN, LOW);
|
||||
digitalWrite(LED_UNLOCK_PIN, HIGH);
|
||||
activity_flash = 0;
|
||||
}
|
||||
activity_timestamp = current_timestamp + 250;
|
||||
}
|
||||
}
|
||||
// Indicate that the lock/unlock is disabled
|
||||
else if (sensor_not_home_activated == true || lock_disable == true){
|
||||
if (current_timestamp >= activity_timestamp) {
|
||||
@ -515,6 +570,38 @@ byte getterLockDisable(void) {
|
||||
return lock_disable;
|
||||
}
|
||||
|
||||
void setterAlarmActivate(byte value) {
|
||||
if (value == 0){
|
||||
alarm_activate = false;
|
||||
}
|
||||
else{
|
||||
alarm_activate = true;
|
||||
}
|
||||
}
|
||||
|
||||
byte getterAlarmActivate(void) {
|
||||
return alarm_activate;
|
||||
}
|
||||
|
||||
void setterAlarmConfirm(byte value) {
|
||||
if (value == 0){
|
||||
alarm_confirmed = false;
|
||||
if (alarm_activate == false){
|
||||
alarm_waiting_for_confirmation == false;
|
||||
}
|
||||
}
|
||||
else{
|
||||
alarm_confirmed = true;
|
||||
if (alarm_activate == true){
|
||||
alarm_waiting_for_confirmation == false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
byte getterAlarmConfirm(void) {
|
||||
return alarm_confirmed;
|
||||
}
|
||||
|
||||
void setterStoreRFID(byte value) {
|
||||
if (rfid_store_tag_nbr == 0 && value > 0 && value < RFID_TAGS + 1){
|
||||
rfid_store_tag_nbr = value;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user