HomeSpan/examples/Expert/14-TargetStates/DEV_Doors.h

54 lines
1.4 KiB
C

////////////////////////////////////
// DEVICE-SPECIFIC LED SERVICES //
////////////////////////////////////
struct DEV_GarageDoor : Service::GarageDoorOpener { // A Garage Door Opener
SpanCharacteristic *current;
SpanCharacteristic *target;
SpanCharacteristic *obstruction;
unsigned long alarmTime;
DEV_GarageDoor(ServiceType sType=ServiceType::Regular) : Service::GarageDoorOpener(sType){ // constructor() method
new SpanEvent(1000); // check for events on this Service every 1 second
current=new Characteristic::CurrentDoorState(0);
target=new Characteristic::TargetDoorState(0);
obstruction=new Characteristic::ObstructionDetected(false);
Serial.print("Configuring Garage Door Opener"); // initialization message
Serial.print("\n");
} // end constructor
StatusCode update(){ // update() method
if(target->getNewVal()==0){
LOG1("Opening Garage Door\n");
current->setVal(2);
} else {
LOG1("Closing Garage Door\n");
current->setVal(3);
}
alarmTime=millis()+10000;
return(StatusCode::OK); // return OK status code
} // update
void event(){ // event() method
if(current->getVal()==target->getVal())
return;
if(millis()>alarmTime)
current->setVal(target->getVal());
} // event
};