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 activity_timestamp = 0;
|
||||||
unsigned long servo_timestamp = 0;
|
unsigned long servo_timestamp = 0;
|
||||||
unsigned long rfid_timeout_timestamp = 0;
|
unsigned long rfid_timeout_timestamp = 0;
|
||||||
|
unsigned long alarm_timestamp = 0;
|
||||||
|
|
||||||
bool lock_disable = false;
|
bool lock_disable = false;
|
||||||
|
|
||||||
@ -92,6 +93,15 @@ int rfid_tags[RFID_TAGS][RFID_TAG_BYTES];
|
|||||||
int rfid_store_tag_nbr = 0;
|
int rfid_store_tag_nbr = 0;
|
||||||
bool rfid_store_tag = false;
|
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);
|
ServoController servo(12);
|
||||||
|
|
||||||
ZUNO_SETUP_SLEEPING_MODE(ZUNO_SLEEPING_MODE_ALWAYS_AWAKE);
|
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_SETUP_CHANNELS(
|
||||||
ZUNO_SWITCH_BINARY(getterLock, setterLock),
|
ZUNO_SWITCH_BINARY(getterLock, setterLock),
|
||||||
ZUNO_SWITCH_BINARY(getterLockDisable, setterLockDisable),
|
ZUNO_SWITCH_BINARY(getterLockDisable, setterLockDisable),
|
||||||
|
ZUNO_SWITCH_BINARY(getterAlarmActivate, setterAlarmActivate),
|
||||||
|
ZUNO_SWITCH_BINARY(getterAlarmConfirm, setterAlarmConfirm),
|
||||||
ZUNO_SWITCH_MULTILEVEL(getterStoreRFID, setterStoreRFID),
|
ZUNO_SWITCH_MULTILEVEL(getterStoreRFID, setterStoreRFID),
|
||||||
ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor)
|
ZUNO_SENSOR_BINARY_DOOR_WINDOW(getterDoor),
|
||||||
);
|
);
|
||||||
|
|
||||||
void set_servo(int mode, int source){
|
void set_servo(int mode, int source){
|
||||||
@ -177,7 +189,7 @@ void update_rfid() {
|
|||||||
CONSOLE_SERIAL.println("RFID tag stored");
|
CONSOLE_SERIAL.println("RFID tag stored");
|
||||||
rfid_store_tag = false;
|
rfid_store_tag = false;
|
||||||
rfid_store_tag_nbr = 0;
|
rfid_store_tag_nbr = 0;
|
||||||
zunoSendReport(3);
|
zunoSendReport(5);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Check for match of RFID tag
|
// Check for match of RFID tag
|
||||||
@ -192,9 +204,20 @@ void update_rfid() {
|
|||||||
CONSOLE_SERIAL.println("RFID tag verified");
|
CONSOLE_SERIAL.println("RFID tag verified");
|
||||||
if (sensor_door_locked){
|
if (sensor_door_locked){
|
||||||
set_servo(SERVO_UNLOCK, SOURCE_RFID);
|
set_servo(SERVO_UNLOCK, SOURCE_RFID);
|
||||||
|
if (alarm_activate == true){
|
||||||
|
alarm_activate = false;
|
||||||
|
alarm_waiting_for_confirmation = true;
|
||||||
|
zunoSendReport(3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
set_servo(SERVO_LOCK, SOURCE_RFID);
|
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;
|
break;
|
||||||
}
|
}
|
||||||
@ -349,7 +372,7 @@ void loop() {
|
|||||||
rfid_eeprom_pos++;
|
rfid_eeprom_pos++;
|
||||||
}
|
}
|
||||||
rfid_store_tag_nbr = 0;
|
rfid_store_tag_nbr = 0;
|
||||||
zunoSendReport(3);
|
zunoSendReport(5);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
set_servo(SERVO_LOCK, SOURCE_BUTTONS);
|
set_servo(SERVO_LOCK, SOURCE_BUTTONS);
|
||||||
@ -363,6 +386,10 @@ void loop() {
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
set_servo(SERVO_UNLOCK, SOURCE_BUTTONS);
|
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_lock = false;
|
||||||
btn_unlock = false;
|
btn_unlock = false;
|
||||||
@ -383,7 +410,7 @@ void loop() {
|
|||||||
// Check if sensor changed and report to Z-Wave
|
// Check if sensor changed and report to Z-Wave
|
||||||
if (sensor_door_closed_changed){
|
if (sensor_door_closed_changed){
|
||||||
sensor_door_closed_changed = false;
|
sensor_door_closed_changed = false;
|
||||||
zunoSendReport(4);
|
zunoSendReport(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if servo needs to be centered or turned off
|
// 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
|
// Check if store RFID has timed out
|
||||||
if (rfid_store_tag_nbr > 0) {
|
if (rfid_store_tag_nbr > 0) {
|
||||||
if (current_timestamp >= rfid_timeout_timestamp) {
|
if (current_timestamp >= rfid_timeout_timestamp) {
|
||||||
rfid_store_tag = false;
|
rfid_store_tag = false;
|
||||||
rfid_store_tag_nbr = 0;
|
rfid_store_tag_nbr = 0;
|
||||||
zunoSendReport(3);
|
zunoSendReport(6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,6 +483,22 @@ void loop() {
|
|||||||
digitalWrite(LED_LOCK_PIN, HIGH);
|
digitalWrite(LED_LOCK_PIN, HIGH);
|
||||||
digitalWrite(LED_UNLOCK_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
|
// Indicate that the lock/unlock is disabled
|
||||||
else if (sensor_not_home_activated == true || lock_disable == true){
|
else if (sensor_not_home_activated == true || lock_disable == true){
|
||||||
if (current_timestamp >= activity_timestamp) {
|
if (current_timestamp >= activity_timestamp) {
|
||||||
@ -515,6 +570,38 @@ byte getterLockDisable(void) {
|
|||||||
return lock_disable;
|
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) {
|
void setterStoreRFID(byte value) {
|
||||||
if (rfid_store_tag_nbr == 0 && value > 0 && value < RFID_TAGS + 1){
|
if (rfid_store_tag_nbr == 0 && value > 0 && value < RFID_TAGS + 1){
|
||||||
rfid_store_tag_nbr = value;
|
rfid_store_tag_nbr = value;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user