Update DEV_Zephyr.h

This commit is contained in:
Gregg 2020-08-23 20:37:11 -05:00
parent 35280ccf53
commit e5fd2a200f
1 changed files with 48 additions and 27 deletions

View File

@ -17,7 +17,7 @@
void transmitZephyr(uint32_t code); void transmitZephyr(uint32_t code);
boolean masterPower=false; boolean resetLight=false;
////////////////////////////////// //////////////////////////////////
@ -25,11 +25,14 @@ struct DEV_ZephyrLight : Service::LightBulb {
uint32_t code; uint32_t code;
SpanCharacteristic *power; SpanCharacteristic *power;
SpanCharacteristic *level;
int buttonPin; int buttonPin;
DEV_ZephyrLight(uint32_t code, int buttonPin, ServiceType mod=ServiceType::Regular) : Service::LightBulb(mod){ DEV_ZephyrLight(uint32_t code, int buttonPin, ServiceType mod=ServiceType::Regular) : Service::LightBulb(mod){
power=new Characteristic::On(); power=new Characteristic::On(false);
level=new Characteristic::Brightness(3);
new SpanRange(0,3,1);
new Characteristic::Name("Vent Light"); new Characteristic::Name("Vent Light");
this->code=code; this->code=code;
this->buttonPin=buttonPin; this->buttonPin=buttonPin;
@ -43,32 +46,56 @@ struct DEV_ZephyrLight : Service::LightBulb {
StatusCode update(){ StatusCode update(){
if(power->getNewVal()){ LOG1("Zephyr Vent Hood Light Power: ");
LOG1("Activating Zephyr Vent Hood Light\n"); LOG1(power->getVal());
if(power->updated()){
LOG1("->");
LOG1(power->getNewVal());
}
LOG1(" Level: ");
LOG1(level->getVal());
if(level->updated()){
LOG1("->");
LOG1(level->getNewVal());
}
LOG1("\n");
int oldState=power->getVal()*(4-level->getVal());
int newState=(power->updated()?power->getNewVal():power->getVal())
*(4-(level->updated()?level->getNewVal():level->getVal()));
while(newState!=oldState){
transmitZephyr(code); transmitZephyr(code);
delay(200);
oldState=(oldState+1)%4;
} }
return(StatusCode::OK); return(StatusCode::OK);
} // update } // update
void button(int pin, boolean isLong) override {
LOG1("Zephyr Vent Hood Light Short Button Press\n");
transmitZephyr(code);
int newLevel=level->getVal()-1;
if(newLevel<0)
newLevel=3;
level->setVal(newLevel);
power->setVal(newLevel>0);
} // button
void loop(){ void loop(){
if(power->getVal() && power->timeVal()>500){ // check that power is true, and that time since last modification is greater than 3 seconds if(resetLight){
LOG1("Resetting Zephyr Vent Hood Light Control\n"); // log message power->setVal(false);
power->setVal(false); // set power to false resetLight=false;
} }
} // loop } // loop
void button(int pin, boolean isLong) override {
LOG1("Activating Zephyr Vent Hood Light\n");
transmitZephyr(code);
power->setVal(true);
} // button
}; };
////////////////////////////////// //////////////////////////////////
@ -99,28 +126,20 @@ struct DEV_ZephyrFan : Service::Fan {
StatusCode update(){ StatusCode update(){
if(power->getNewVal()){ if(power->getNewVal()){ // it's okay to repease ON commands - this just cycles through fan speed
LOG1("Zephyr Vent Hood Fan: Power On\n"); LOG1("Zephyr Vent Hood Fan: Power On\n");
transmitZephyr(fanCode); transmitZephyr(fanCode);
} else } else
if(power->getVal()){ // only transmit power code if we know power is really on if(power->getVal()){ // only transmit power code if we know power is really on, else this OFF command will turn fan ON!
LOG1("Zephyr Vent Hood Fan: Power Off\n"); LOG1("Zephyr Vent Hood Fan: Power Off\n");
transmitZephyr(powerCode); transmitZephyr(powerCode);
resetLight=true;
} }
return(StatusCode::OK); return(StatusCode::OK);
} // update } // update
void loop(){
// if(power->getVal() && power->timeVal()>500){ // check that power is true, and that time since last modification is greater than 3 seconds
// LOG1("Resetting Zephyr Vent Hood Fan Control\n"); // log message
// power->setVal(false); // set power to false
// }
} // loop
void button(int pin, boolean isLong) override { void button(int pin, boolean isLong) override {
if(!isLong){ if(!isLong){
@ -133,8 +152,10 @@ struct DEV_ZephyrFan : Service::Fan {
LOG1("Zephyr Vent Hood Fan Long Button Press: Power Off\n"); LOG1("Zephyr Vent Hood Fan Long Button Press: Power Off\n");
transmitZephyr(powerCode); transmitZephyr(powerCode);
power->setVal(false); power->setVal(false);
resetLight=true;
} else { } else {
LOG1("Zephyr Vent Hood Fan Long Button Press: Power is already off!\n"); LOG1("Zephyr Vent Hood Fan Long Button Press: Power is already off!\n");
resetLight=true;
} }
} // button } // button