Update DEV_Zephyr.h
This commit is contained in:
parent
35280ccf53
commit
e5fd2a200f
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue