Browse Source

utils/heartbeat: fix hbReport=1 condition, add Bssid (#1995)

* hb: fix hbReport=1 condition, add Bssid

* type
master
Max Prokhorov 5 years ago
committed by GitHub
parent
commit
7fa05d1bf4
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 12 deletions
  1. +9
    -8
      code/espurna/config/general.h
  2. +27
    -4
      code/espurna/utils.ino

+ 9
- 8
code/espurna/config/general.h View File

@ -299,16 +299,16 @@
#define HEARTBEAT_REPORT_INTERVAL 0 #define HEARTBEAT_REPORT_INTERVAL 0
#endif #endif
#if THERMOSTAT_SUPPORT && ! defined HEARTBEAT_REPORT_RANGE
#define HEARTBEAT_REPORT_RANGE 1
#else
#define HEARTBEAT_REPORT_RANGE 0
#ifndef HEARTBEAT_REPORT_RANGE
#define HEARTBEAT_REPORT_RANGE THERMOSTAT_SUPPORT
#endif #endif
#if THERMOSTAT_SUPPORT && ! defined HEARTBEAT_REPORT_REMOTE_TEMP
#define HEARTBEAT_REPORT_REMOTE_TEMP 1
#else
#define HEARTBEAT_REPORT_REMOTE_TEMP 0
#ifndef HEARTBEAT_REPORT_REMOTE_TEMP
#define HEARTBEAT_REPORT_REMOTE_TEMP THERMOSTAT_SUPPORT
#endif
#ifndef HEARTBEAT_REPORT_BSSID
#define HEARTBEAT_REPORT_BSSID 0
#endif #endif
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -1047,6 +1047,7 @@
#define MQTT_TOPIC_BUTTON "button" #define MQTT_TOPIC_BUTTON "button"
#define MQTT_TOPIC_IP "ip" #define MQTT_TOPIC_IP "ip"
#define MQTT_TOPIC_SSID "ssid" #define MQTT_TOPIC_SSID "ssid"
#define MQTT_TOPIC_BSSID "bssid"
#define MQTT_TOPIC_VERSION "version" #define MQTT_TOPIC_VERSION "version"
#define MQTT_TOPIC_UPTIME "uptime" #define MQTT_TOPIC_UPTIME "uptime"
#define MQTT_TOPIC_DATETIME "datetime" #define MQTT_TOPIC_DATETIME "datetime"


+ 27
- 4
code/espurna/utils.ino View File

@ -7,6 +7,7 @@ Copyright (C) 2017-2019 by Xose Pérez <xose dot perez at gmail dot com>
*/ */
#include <Ticker.h> #include <Ticker.h>
#include <limits>
#include "libs/HeapStats.h" #include "libs/HeapStats.h"
String getIdentifier() { String getIdentifier() {
@ -135,6 +136,7 @@ bool haveRelaysOrSensors() {
// Heartbeat helper // Heartbeat helper
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
namespace Heartbeat { namespace Heartbeat {
enum Report : uint32_t { enum Report : uint32_t {
Status = 1 << 1, Status = 1 << 1,
Ssid = 1 << 2, Ssid = 1 << 2,
@ -155,7 +157,8 @@ namespace Heartbeat {
Interval = 1 << 17, Interval = 1 << 17,
Description = 1 << 18, Description = 1 << 18,
Range = 1 << 19, Range = 1 << 19,
Remote_temp = 1 << 20
RemoteTemp = 1 << 20,
Bssid = 1 << 21
}; };
constexpr uint32_t defaultValue() { constexpr uint32_t defaultValue() {
@ -178,14 +181,31 @@ namespace Heartbeat {
(Loadavg * (HEARTBEAT_REPORT_LOADAVG)) | \ (Loadavg * (HEARTBEAT_REPORT_LOADAVG)) | \
(Interval * (HEARTBEAT_REPORT_INTERVAL)) | \ (Interval * (HEARTBEAT_REPORT_INTERVAL)) | \
(Range * (HEARTBEAT_REPORT_RANGE)) | \ (Range * (HEARTBEAT_REPORT_RANGE)) | \
(Remote_temp * (HEARTBEAT_REPORT_REMOTE_TEMP));
(RemoteTemp * (HEARTBEAT_REPORT_REMOTE_TEMP)) | \
(Bssid * (HEARTBEAT_REPORT_BSSID));
} }
uint32_t currentValue() { uint32_t currentValue() {
// use default without any setting / when it is empty
const String cfg = getSetting("hbReport"); const String cfg = getSetting("hbReport");
if (!cfg.length()) return defaultValue();
if (!cfg.length()) {
return defaultValue();
}
// invalidate the whole string when invalid chars are detected
char *value_endptr = nullptr;
const auto value = strtoul(cfg.c_str(), &value_endptr, 10);
if (value_endptr) {
return defaultValue();
}
return strtoul(cfg.c_str(), NULL, 10);
// because we start shifting from 1, we could use the
// first bit as a flag to enable all of the messages
if (value == 1) {
return std::numeric_limits<uint32_t>::max();
}
return value;
} }
} }
@ -253,6 +273,9 @@ void heartbeat() {
if (hb_cfg & Heartbeat::Ssid) if (hb_cfg & Heartbeat::Ssid)
mqttSend(MQTT_TOPIC_SSID, WiFi.SSID().c_str()); mqttSend(MQTT_TOPIC_SSID, WiFi.SSID().c_str());
if (hb_cfg & Heartbeat::Bssid)
mqttSend(MQTT_TOPIC_BSSID, WiFi.BSSIDstr().c_str());
if (hb_cfg & Heartbeat::Ip) if (hb_cfg & Heartbeat::Ip)
mqttSend(MQTT_TOPIC_IP, getIP().c_str()); mqttSend(MQTT_TOPIC_IP, getIP().c_str());


Loading…
Cancel
Save