mirror of https://github.com/arendst/Tasmota.git
Merge pull request #7188 from tobox/development
Make WeightDelta for JSON message configurable.
This commit is contained in:
commit
07ce419f19
|
@ -58,6 +58,7 @@
|
|||
#define D_JSON_WEIGHT_ITEM "WeightItem"
|
||||
#define D_JSON_WEIGHT_CHANGE "WeightChange"
|
||||
#define D_JSON_WEIGHT_RAW "WeightRaw"
|
||||
#define D_JSON_WEIGHT_DELTA "WeightDelta"
|
||||
|
||||
enum HxCalibrationSteps { HX_CAL_END, HX_CAL_LIMBO, HX_CAL_FINISH, HX_CAL_FAIL, HX_CAL_DONE, HX_CAL_FIRST, HX_CAL_RESET, HX_CAL_START };
|
||||
|
||||
|
@ -81,6 +82,7 @@ struct HX {
|
|||
uint8_t pin_dout;
|
||||
bool tare_flg = false;
|
||||
bool weight_changed = false;
|
||||
uint16_t weight_delta = 4;
|
||||
} Hx;
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
@ -149,6 +151,24 @@ void HxCalibrationStateTextJson(uint8_t msg_id)
|
|||
if (msg_id < 3) { MqttPublishPrefixTopic_P(RESULT_OR_STAT, PSTR("Sensor34")); }
|
||||
}
|
||||
|
||||
void SetWeightDelta()
|
||||
{
|
||||
// backwards compatible: restore old default value of 4 grams
|
||||
if (Settings.weight_change == 0) {
|
||||
Hx.weight_delta = 4;
|
||||
return;
|
||||
}
|
||||
|
||||
// map upper values 101-255 to
|
||||
if (Settings.weight_change > 100) {
|
||||
Hx.weight_delta = (Settings.weight_change - 100) * 10 + 100;
|
||||
return;
|
||||
}
|
||||
|
||||
// map 1..100 to 0..99 grams
|
||||
Hx.weight_delta = Settings.weight_change - 1;
|
||||
}
|
||||
|
||||
/*********************************************************************************************\
|
||||
* Supported commands for Sensor34:
|
||||
*
|
||||
|
@ -166,6 +186,7 @@ void HxCalibrationStateTextJson(uint8_t msg_id)
|
|||
* Sensor34 7 - Save current weight to be used as start weight on restart
|
||||
* Sensor34 8 0 - Disable JSON weight change message
|
||||
* Sensor34 8 1 - Enable JSON weight change message
|
||||
* Sensor34 9 <weight code> - Set minimum delta to trigger JSON message
|
||||
\*********************************************************************************************/
|
||||
|
||||
bool HxCommand(void)
|
||||
|
@ -228,6 +249,13 @@ bool HxCommand(void)
|
|||
}
|
||||
show_parms = true;
|
||||
break;
|
||||
case 9: // WeightDelta
|
||||
if (strstr(XdrvMailbox.data, ",") != nullptr) {
|
||||
Settings.weight_change = strtol(subStr(sub_string, XdrvMailbox.data, ",", 2), nullptr, 10);
|
||||
SetWeightDelta();
|
||||
}
|
||||
show_parms = true;
|
||||
break;
|
||||
default:
|
||||
show_parms = true;
|
||||
}
|
||||
|
@ -235,8 +263,10 @@ bool HxCommand(void)
|
|||
if (show_parms) {
|
||||
char item[33];
|
||||
dtostrfd((float)Settings.weight_item / 10, 1, item);
|
||||
Response_P(PSTR("{\"Sensor34\":{\"" D_JSON_WEIGHT_REF "\":%d,\"" D_JSON_WEIGHT_CAL "\":%d,\"" D_JSON_WEIGHT_MAX "\":%d,\"" D_JSON_WEIGHT_ITEM "\":%s,\"" D_JSON_WEIGHT_CHANGE "\":\"%s\"}}"),
|
||||
Settings.weight_reference, Settings.weight_calibration, Settings.weight_max * 1000, item, GetStateText(Settings.SensorBits1.hx711_json_weight_change));
|
||||
Response_P(PSTR("{\"Sensor34\":{\"" D_JSON_WEIGHT_REF "\":%d,\"" D_JSON_WEIGHT_CAL "\":%d,\"" D_JSON_WEIGHT_MAX "\":%d,\""
|
||||
D_JSON_WEIGHT_ITEM "\":%s,\"" D_JSON_WEIGHT_CHANGE "\":%s,\"" D_JSON_WEIGHT_DELTA "\":%d}}"),
|
||||
Settings.weight_reference, Settings.weight_calibration, Settings.weight_max * 1000,
|
||||
item, GetStateText(Settings.SensorBits1.hx711_json_weight_change), Settings.weight_change);
|
||||
}
|
||||
|
||||
return serviced;
|
||||
|
@ -261,6 +291,8 @@ void HxInit(void)
|
|||
|
||||
digitalWrite(Hx.pin_sck, LOW);
|
||||
|
||||
SetWeightDelta();
|
||||
|
||||
if (HxIsReady(8 * HX_TIMEOUT)) { // Can take 600 milliseconds after power on
|
||||
if (!Settings.weight_max) { Settings.weight_max = HX_MAX_WEIGHT / 1000; }
|
||||
if (!Settings.weight_calibration) { Settings.weight_calibration = HX_SCALE; }
|
||||
|
@ -358,7 +390,7 @@ void HxEvery100mSecond(void)
|
|||
Hx.weight += Hx.last_weight; // grams
|
||||
|
||||
if (Settings.SensorBits1.hx711_json_weight_change) {
|
||||
if (abs(Hx.weight - Hx.weight_diff) > 4) { // Use 4 gram threshold to decrease "ghost" weights
|
||||
if (abs(Hx.weight - Hx.weight_diff) > Hx.weight_delta) { // Use weight_delta threshold to decrease "ghost" weights
|
||||
Hx.weight_diff = Hx.weight;
|
||||
Hx.weight_changed = true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue