fix mqtt handling
This commit is contained in:
parent
efa1f58785
commit
2306f019b3
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
#include <Homie.h>
|
#include <Homie.h>
|
||||||
#define FW_NAME "tischlicht"
|
#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:
|
* To Update configuration (wifi credentials) from data/homie/config.json:
|
||||||
|
@ -116,6 +116,7 @@ void setup() {
|
||||||
lightNode.advertise("brightness").settable(brightnessHandler);
|
lightNode.advertise("brightness").settable(brightnessHandler);
|
||||||
lightNode.advertise("temperature").settable(temperatureHandler);
|
lightNode.advertise("temperature").settable(temperatureHandler);
|
||||||
lightNode.advertise("fadetime").settable(fadetimeHandler);
|
lightNode.advertise("fadetime").settable(fadetimeHandler);
|
||||||
|
lightNode.advertise("sleep").settable(sleepHandler);
|
||||||
|
|
||||||
|
|
||||||
Homie.setup();
|
Homie.setup();
|
||||||
|
@ -272,12 +273,22 @@ void loopHandler() {
|
||||||
last_updatetime = loopmillis;
|
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)) { //if brightness not reached
|
if ( (brightness_change_per_loop<0 && brightness>set_brightness) || (brightness_change_per_loop>0 && brightness<set_brightness)) { //if brightness not reached
|
||||||
brightness += brightness_change_per_loop;
|
brightness += brightness_change_per_loop;
|
||||||
|
if ( ( old_brightness <= set_brightness && set_brightness <= brightness ) || ( old_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)) { //if temperature not reached
|
if ( (temperature_change_per_loop<0 && temperature>set_temperature) || (temperature_change_per_loop>0 && temperature<set_temperature)) { //if temperature not reached
|
||||||
temperature += temperature_change_per_loop;
|
temperature += temperature_change_per_loop;
|
||||||
|
if ( ( old_temperature <= set_temperature && set_temperature <= temperature ) || ( old_temperature >= set_temperature && set_temperature >= temperature ) ) { //overshot set value
|
||||||
|
temperature = set_temperature;
|
||||||
|
}
|
||||||
|
flag_updatePWM=true; //force update
|
||||||
}
|
}
|
||||||
|
|
||||||
//calculate and update pwm
|
//calculate and update pwm
|
||||||
|
@ -307,17 +318,20 @@ void loopHandler() {
|
||||||
last_debugupdatetime = loopmillis;
|
last_debugupdatetime = loopmillis;
|
||||||
|
|
||||||
if (sleep) { Serial.print("Sleep. "); }
|
if (sleep) { Serial.print("Sleep. "); }
|
||||||
/*Serial.print("bright=");
|
Serial.print("bright=");
|
||||||
Serial.print(brightness);
|
Serial.print(brightness);
|
||||||
Serial.print(" set=");
|
Serial.print(" set=");
|
||||||
Serial.print(set_brightness);
|
Serial.print(set_brightness);
|
||||||
Serial.print("| temp=");
|
Serial.print("| temp=");
|
||||||
Serial.print(temperature);
|
Serial.print(temperature);
|
||||||
Serial.print(" set=");
|
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 pwmCW;
|
||||||
uint16_t pwmWW;
|
uint16_t pwmWW;
|
||||||
float temp=mapFloat(temperature, TEMPERATURE_MIN, TEMPERATURE_MAX, 0.0,1.0); //0=warmwhite, 1=coldwhite
|
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.print(", ");
|
||||||
Serial.println(0);
|
Serial.println(0);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,7 +372,11 @@ bool brightnessHandler(const HomieRange& range, const String& value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
float _difference=set_brightness-brightness;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -377,7 +396,11 @@ bool temperatureHandler(const HomieRange& range, const String& value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
float _difference=set_temperature-temperature;
|
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;
|
return true;
|
||||||
|
@ -400,6 +423,27 @@ bool fadetimeHandler(const HomieRange& range, const String& value) { //fadetime
|
||||||
return true;
|
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) {
|
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;
|
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue