diff --git a/controllerHomie/controllerHomie.ino b/controllerHomie/controllerHomie.ino index 34d84ed..80938f7 100644 --- a/controllerHomie/controllerHomie.ino +++ b/controllerHomie/controllerHomie.ino @@ -5,7 +5,7 @@ #include #define FW_NAME "tischlicht" -#define FW_VERSION "1.0.0" +#define FW_VERSION "1.0.1" /* * To Update configuration (wifi credentials) from data/homie/config.json: @@ -116,6 +116,7 @@ void setup() { lightNode.advertise("brightness").settable(brightnessHandler); lightNode.advertise("temperature").settable(temperatureHandler); lightNode.advertise("fadetime").settable(fadetimeHandler); + lightNode.advertise("sleep").settable(sleepHandler); Homie.setup(); @@ -272,12 +273,22 @@ void loopHandler() { last_updatetime = loopmillis; - + float old_brightness = brightness; //store last brightness if ( (brightness_change_per_loop<0 && brightness>set_brightness) || (brightness_change_per_loop>0 && brightness= set_brightness && set_brightness >= brightness ) ) { //overshot set value + brightness = set_brightness; + } + flag_updatePWM=true; //force update } + + float old_temperature = temperature; //store last temperature if ( (temperature_change_per_loop<0 && temperature>set_temperature) || (temperature_change_per_loop>0 && temperature= set_temperature && set_temperature >= temperature ) ) { //overshot set value + temperature = set_temperature; + } + flag_updatePWM=true; //force update } //calculate and update pwm @@ -307,17 +318,20 @@ void loopHandler() { last_debugupdatetime = loopmillis; if (sleep) { Serial.print("Sleep. "); } - /*Serial.print("bright="); + Serial.print("bright="); Serial.print(brightness); Serial.print(" set="); Serial.print(set_brightness); Serial.print("| temp="); Serial.print(temperature); Serial.print(" set="); - Serial.println(set_temperature); - */ - + Serial.print(set_temperature); + Serial.print(" change="); + Serial.println(brightness_change_per_loop); + + + /* uint16_t pwmCW; uint16_t pwmWW; float temp=mapFloat(temperature, TEMPERATURE_MIN, TEMPERATURE_MAX, 0.0,1.0); //0=warmwhite, 1=coldwhite @@ -336,6 +350,7 @@ void loopHandler() { Serial.print(", "); Serial.println(0); } + */ } @@ -357,7 +372,11 @@ bool brightnessHandler(const HomieRange& range, const String& value) { } float _difference=set_brightness-brightness; - brightness_change_per_loop = _difference/fadetime*UPDATETIME; + if (fadetime>0) { + brightness_change_per_loop = _difference/fadetime*UPDATETIME; + } else { //special case for instant change + brightness_change_per_loop = _difference; + } return true; } @@ -377,7 +396,11 @@ bool temperatureHandler(const HomieRange& range, const String& value) { } float _difference=set_temperature-temperature; - temperature_change_per_loop = _difference/fadetime*UPDATETIME; + if (fadetime>0) { + temperature_change_per_loop = _difference/fadetime*UPDATETIME; + } else { //special case for instant change + temperature_change_per_loop = _difference; + } return true; @@ -400,6 +423,27 @@ bool fadetimeHandler(const HomieRange& range, const String& value) { //fadetime return true; } +bool sleepHandler(const HomieRange& range, const String& value) { //change on off + if (range.isRange) { + return false; //if range is given but index is not in allowed range + } + Homie.getLogger() << "sleep " << ": " << value << endl; + lightNode.setProperty("sleep").send(value); + + if (value.toInt() == 0) { + sleep=true; + } else if(value.toInt() == 1) { + sleep=false; + } else { + Homie.getLogger() << "Value outside range" << endl; + return false; + } + + flag_updatePWM=true; //force update + + return true; +} + float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }