add live send switch
This commit is contained in:
parent
a3b0eea2c6
commit
1e84da511c
46
src/main.cpp
46
src/main.cpp
|
@ -21,6 +21,8 @@ const int PIN_SELFENABLE = D1;
|
||||||
|
|
||||||
HX711 scale;
|
HX711 scale;
|
||||||
|
|
||||||
|
float weight_current=0; //last weight reading
|
||||||
|
|
||||||
#define MEASURE_INTERVAL 100 //ms
|
#define MEASURE_INTERVAL 100 //ms
|
||||||
#define READING_FILTER_SIZE 40 //latency is about READING_FILTER_SIZE/2*MEASURE_INTERVAL
|
#define READING_FILTER_SIZE 40 //latency is about READING_FILTER_SIZE/2*MEASURE_INTERVAL
|
||||||
float weight_read[READING_FILTER_SIZE] = {0};
|
float weight_read[READING_FILTER_SIZE] = {0};
|
||||||
|
@ -36,6 +38,10 @@ unsigned long weight_sent_time=0;
|
||||||
|
|
||||||
#define MAXONTIME 60000*2 //turn off after ms
|
#define MAXONTIME 60000*2 //turn off after ms
|
||||||
|
|
||||||
|
#define MQTT_SENDINTERVALL 500 //ms
|
||||||
|
unsigned long last_mqtt_send=0;
|
||||||
|
bool livesend=false; //if true, sends continuous data over mqtt
|
||||||
|
|
||||||
#define FW_NAME "scale"
|
#define FW_NAME "scale"
|
||||||
#define FW_VERSION "0.0.1"
|
#define FW_VERSION "0.0.1"
|
||||||
|
|
||||||
|
@ -71,7 +77,7 @@ void setup() {
|
||||||
scaleNode.advertise("raw");
|
scaleNode.advertise("raw");
|
||||||
scaleNode.advertise("max");
|
scaleNode.advertise("max");
|
||||||
|
|
||||||
scaleNode.advertise("CMD").settable(cmdHandler); //function inputHandler gets called on new message on topic/input/set
|
scaleNode.advertise("cmd").settable(cmdHandler); //function inputHandler gets called on new message on topic/input/set
|
||||||
|
|
||||||
Homie.setup();
|
Homie.setup();
|
||||||
|
|
||||||
|
@ -140,7 +146,7 @@ void loopHandler() {
|
||||||
last_measure=loopmillis;
|
last_measure=loopmillis;
|
||||||
|
|
||||||
Serial.print("reading=");
|
Serial.print("reading=");
|
||||||
float weight_current=0;
|
weight_current=0;
|
||||||
if (scale.wait_ready_timeout(1000)) { //for non blocking mode
|
if (scale.wait_ready_timeout(1000)) { //for non blocking mode
|
||||||
weight_read_pos++;
|
weight_read_pos++;
|
||||||
weight_read_pos%=READING_FILTER_SIZE;
|
weight_read_pos%=READING_FILTER_SIZE;
|
||||||
|
@ -157,12 +163,6 @@ void loopHandler() {
|
||||||
Serial.println(weight_current);
|
Serial.println(weight_current);
|
||||||
Serial.print("spread="); Serial.println(spread,3);
|
Serial.print("spread="); Serial.println(spread,3);
|
||||||
|
|
||||||
char charBuf[10];
|
|
||||||
dtostrf(weight_current,4, 3, charBuf);
|
|
||||||
scaleNode.setProperty("raw").send(charBuf);
|
|
||||||
|
|
||||||
dtostrf(spread,4, 3, charBuf);
|
|
||||||
scaleNode.setProperty("spread").send(charBuf);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -181,8 +181,6 @@ void loopHandler() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dtostrf(weight_max-weight_tare,4, 3, charBuf);
|
|
||||||
scaleNode.setProperty("max").send(charBuf); //filtered and auto tared
|
|
||||||
|
|
||||||
if (!weight_sent) {
|
if (!weight_sent) {
|
||||||
if (weight_max-weight_tare>MIN_WEIGHT_DIFFERENCE) {
|
if (weight_max-weight_tare>MIN_WEIGHT_DIFFERENCE) {
|
||||||
|
@ -191,6 +189,26 @@ void loopHandler() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (livesend && (millis()>last_mqtt_send+MQTT_SENDINTERVALL)) {
|
||||||
|
last_mqtt_send=millis();
|
||||||
|
|
||||||
|
float weight_filtered=getFilteredWeight();
|
||||||
|
float spread=getWeightSpread();
|
||||||
|
|
||||||
|
char charBuf[10];
|
||||||
|
dtostrf(weight_current,4, 3, charBuf);
|
||||||
|
scaleNode.setProperty("raw").send(charBuf);
|
||||||
|
|
||||||
|
dtostrf(spread,4, 3, charBuf);
|
||||||
|
scaleNode.setProperty("spread").send(charBuf);
|
||||||
|
|
||||||
|
dtostrf(weight_max-weight_tare,4, 3, charBuf);
|
||||||
|
scaleNode.setProperty("max").send(charBuf); //filtered and auto tared
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#define STAYONTIME_AFTER_SENT 5000
|
#define STAYONTIME_AFTER_SENT 5000
|
||||||
if (millis() > MAXONTIME || (weight_sent && millis()>weight_sent_time+STAYONTIME_AFTER_SENT)) {
|
if (millis() > MAXONTIME || (weight_sent && millis()>weight_sent_time+STAYONTIME_AFTER_SENT)) {
|
||||||
powerOff();
|
powerOff();
|
||||||
|
@ -281,7 +299,13 @@ bool cmdHandler(const HomieRange& range, const String& value) {
|
||||||
Serial.println("HX711 not found.");
|
Serial.println("HX711 not found.");
|
||||||
scaleNode.setProperty("cmd").send("HX711 not found");
|
scaleNode.setProperty("cmd").send("HX711 not found");
|
||||||
}
|
}
|
||||||
|
}if (value=="live") {
|
||||||
|
livesend=!livesend;
|
||||||
|
if (livesend) {
|
||||||
|
scaleNode.setProperty("cmd").send("live data enabled");
|
||||||
|
}else{
|
||||||
|
scaleNode.setProperty("cmd").send("live data disabled");
|
||||||
|
}
|
||||||
}if (value=="off") {
|
}if (value=="off") {
|
||||||
powerOff();
|
powerOff();
|
||||||
scaleNode.setProperty("cmd").send("shutting down");
|
scaleNode.setProperty("cmd").send("shutting down");
|
||||||
|
|
Loading…
Reference in New Issue