Browse Source

added update on change to ds18b20 temperature sensor with default 1.0 degrees change. Saves space on MQTT server as it avoids logging pointless points..

fastled
Mitchell A. Cox 7 years ago
parent
commit
7f83ca2daf
4 changed files with 42 additions and 30 deletions
  1. +5
    -3
      code/espurna/config/sensors.h
  2. +30
    -19
      code/espurna/ds18b20.ino
  3. +1
    -1
      code/espurna/espurna.ino
  4. +6
    -7
      code/platformio.ini

+ 5
- 3
code/espurna/config/sensors.h View File

@ -74,12 +74,14 @@
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
#ifndef DS18B20_SUPPORT #ifndef DS18B20_SUPPORT
#define DS18B20_SUPPORT 0
#define DS18B20_SUPPORT 1
#endif #endif
#define DS18B20_PIN 14
#define DS18B20_UPDATE_INTERVAL 60000
#define DS18B20_PIN 2
#define DS18B20_UPDATE_INTERVAL 5000
#define DS18B20_TEMPERATURE_TOPIC "temperature" #define DS18B20_TEMPERATURE_TOPIC "temperature"
//Will only send MQTT update if the value has changed by this amount (0.0 sends every interval)
#define DS18B20_UPDATE_ON_CHANGE 1.0
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
// Internal power montior // Internal power montior


+ 30
- 19
code/espurna/ds18b20.ino View File

@ -51,6 +51,10 @@ void dsLoop() {
// Check if we should read new data // Check if we should read new data
static unsigned long last_update = 0; static unsigned long last_update = 0;
static bool requested = false; static bool requested = false;
static double last_temperature = 0.0;
bool send_update = false;
if ((millis() - last_update > DS18B20_UPDATE_INTERVAL) || (last_update == 0)) { if ((millis() - last_update > DS18B20_UPDATE_INTERVAL) || (last_update == 0)) {
if (!requested) { if (!requested) {
ds18b20.requestTemperatures(); ds18b20.requestTemperatures();
@ -80,6 +84,12 @@ void dsLoop() {
DEBUG_MSG_P(PSTR("[DS18B20] Error reading sensor\n")); DEBUG_MSG_P(PSTR("[DS18B20] Error reading sensor\n"));
} else { } else {
//If the new temperature is different from the last
if (fabs(t - last_temperature) >= DS18B20_UPDATE_ON_CHANGE) {
last_temperature = t;
send_update = true;
}
_dsTemperature = t; _dsTemperature = t;
@ -95,25 +105,26 @@ void dsLoop() {
getDSTemperatureStr(), getDSTemperatureStr(),
(_dsIsConnected ? ((tmpUnits == TMP_CELSIUS) ? "ºC" : "ºF") : "")); (_dsIsConnected ? ((tmpUnits == TMP_CELSIUS) ? "ºC" : "ºF") : ""));
// Send MQTT messages
mqttSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr);
// Send to Domoticz
#if DOMOTICZ_SUPPORT
domoticzSend("dczTmpIdx", 0, _dsTemperatureStr);
#endif
#if INFLUXDB_SUPPORT
influxDBSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr);
#endif
// Update websocket clients
#if WEB_SUPPORT
char buffer[100];
snprintf_P(buffer, sizeof(buffer), PSTR("{\"dsVisible\": 1, \"dsTmp\": %s, \"tmpUnits\": %d}"), getDSTemperatureStr(), tmpUnits);
wsSend(buffer);
#endif
if (send_update) {
// Send MQTT messages
mqttSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr);
// Send to Domoticz
#if DOMOTICZ_SUPPORT
domoticzSend("dczTmpIdx", 0, _dsTemperatureStr);
#endif
#if INFLUXDB_SUPPORT
influxDBSend(getSetting("dsTmpTopic", DS18B20_TEMPERATURE_TOPIC).c_str(), _dsTemperatureStr);
#endif
// Update websocket clients
#if WEB_SUPPORT
char buffer[100];
snprintf_P(buffer, sizeof(buffer), PSTR("{\"dsVisible\": 1, \"dsTmp\": %s, \"tmpUnits\": %d}"), getDSTemperatureStr(), tmpUnits);
wsSend(buffer);
#endif
}
} }
} }


+ 1
- 1
code/espurna/espurna.ino View File

@ -43,7 +43,7 @@ void hardwareSetup() {
SPIFFS.begin(); SPIFFS.begin();
#endif #endif
#if defined(EPSLIVE)
#if defined(ESPLIVE)
//The ESPLive has an ADC MUX which needs to be configured. //The ESPLive has an ADC MUX which needs to be configured.
pinMode(16, OUTPUT); pinMode(16, OUTPUT);
digitalWrite(16, HIGH); //Defualt CT input (pin B, solder jumper B) digitalWrite(16, HIGH); //Defualt CT input (pin B, solder jumper B)


+ 6
- 7
code/platformio.ini View File

@ -889,22 +889,21 @@ monitor_baud = 115200
[env:esplive] [env:esplive]
platform = espressif8266 platform = espressif8266
framework = arduino framework = arduino
board = nodemcuv2
board_flash_mode = dout
board = d1_mini
lib_deps = ${common.lib_deps} lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore} lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -DESPLIVE
build_flags = ${common.build_flags} -DESPLIVE
upload_speed = 460800
monitor_baud = 115200 monitor_baud = 115200
[env:esplive-ota] [env:esplive-ota]
platform = espressif8266 platform = espressif8266
framework = arduino framework = arduino
board = nodemcuv2
board_flash_mode = dout
board = d1_mini
lib_deps = ${common.lib_deps} lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore} lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -DESPLIVE
upload_speed = 115200
build_flags = ${common.build_flags} -DESPLIVE
upload_speed = 460800
upload_port = "192.168.4.1" upload_port = "192.168.4.1"
upload_flags = --auth=fibonacci --port 8266 upload_flags = --auth=fibonacci --port 8266
monitor_baud = 115200 monitor_baud = 115200


Loading…
Cancel
Save