From 3a54825c2cbef7fc877e820a86b35bc76379895b Mon Sep 17 00:00:00 2001 From: Darrell Date: Sun, 23 Jan 2022 12:38:05 -0500 Subject: [PATCH] Allow status led to be disabled (fixes #156) (#196) --- CHANGELOG.md | 31 +++++++++++++++++++++++++ lib/BleFingerprint/GUI.cpp | 47 ++++++++++++++++++++++++++++++++++---- lib/BleFingerprint/GUI.h | 33 ++++++-------------------- src/main.cpp | 20 +++++++++++----- src/main.h | 14 ++++++------ 5 files changed, 102 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5a0fa3..d3989c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,37 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.15] + +- Allow status led to be disabled (#156) + +## [2.0.14] + +- Add eddystone uid support @DTTerastar (#188) +- Add support for alt-beacons @DTTerastar (#187) + +## [2.0.13] + +- Bump NimBLE-Arduino.git to 1.3.3 @DTTerastar (#145) + +## [2.0.11] && [2.0.12] + +- Requery if room assistant broadcast found after query @DTTerastar (#126) +- Slight tweaks and logging to try and fix #125 + +## [2.0.10] + +- Add trackr support @DTTerastar (#121) + +## [2.0.9] + +- Add support for ATC\_MiThermometer @DTTerastar (#124) +- Add initial support for meater @DTTerastar (#124) +- Improve msft:cdp fingerprint @DTTerastar (#124) + +## [2.0.7] && [2.0.8] + +- Add entity categories for config items @DTTerastar (#114) ## [2.0.6] diff --git a/lib/BleFingerprint/GUI.cpp b/lib/BleFingerprint/GUI.cpp index 0e136d0..40e2544 100644 --- a/lib/BleFingerprint/GUI.cpp +++ b/lib/BleFingerprint/GUI.cpp @@ -1,5 +1,30 @@ #include "GUI.h" +#if defined M5STICK + +#define LED_BUILTIN 10 +#define LED_BUILTIN_ON 0 + +#define BUTTON 39 +#define BUTTON_PRESSED 0 + +#elif defined M5ATOM + +#define BUTTON 39 +#define BUTTON_PRESSED 0 + +#elif defined HUZZAH32 + +#define LED_BUILTIN 13 +#define LED_BUILTIN_ON 1 + +#else //DevKit / generic + +#define LED_BUILTIN 2 +#define LED_BUILTIN_ON 1 + +#endif + GUI Display; void GUI::seenStart() @@ -8,7 +33,7 @@ void GUI::seenStart() #ifdef M5ATOM M5.dis.drawpix(0, CRGB(15, 15, 15)); #else - digitalWrite(LED_BUILTIN, LED_BUILTIN_ON); + if (_statusLed) digitalWrite(LED_BUILTIN, LED_BUILTIN_ON); #endif } @@ -37,7 +62,7 @@ void GUI::connecting() status("Connecting..."); connected(false, false); #ifdef LED_BUILTIN - digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); + if (_statusLed) digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); #endif } @@ -107,6 +132,13 @@ void GUI::status(const char *format, ...) #endif } +void GUI::setup() +{ +#ifdef LED_BUILTIN + pinMode(LED_BUILTIN, OUTPUT); +#endif +} + void GUI::begin() { if (!init) @@ -124,7 +156,7 @@ void GUI::begin() } } -void GUI::update() +void GUI::blit() { begin(); #ifdef M5STICK @@ -137,10 +169,17 @@ void GUI::update() #endif } +void GUI::updateStart() +{ +#ifdef LED_BUILTIN + if (_statusLed) digitalWrite(LED_BUILTIN, LED_BUILTIN_ON); +#endif +} + void GUI::updateProgress(unsigned int percent) { #ifdef LED_BUILTIN - digitalWrite(LED_BUILTIN, percent % 2); + if (_statusLed) digitalWrite(LED_BUILTIN, percent % 2); #endif } diff --git a/lib/BleFingerprint/GUI.h b/lib/BleFingerprint/GUI.h index 238c78e..1971b9e 100644 --- a/lib/BleFingerprint/GUI.h +++ b/lib/BleFingerprint/GUI.h @@ -14,36 +14,13 @@ #include #endif -#if defined M5STICK - -#define LED_BUILTIN 10 -#define LED_BUILTIN_ON 0 - -#define BUTTON 39 -#define BUTTON_PRESSED 0 - -#elif defined M5ATOM - -#define BUTTON 39 -#define BUTTON_PRESSED 0 - -#elif defined HUZZAH32 - -#define LED_BUILTIN 13 -#define LED_BUILTIN_ON 1 - -#else //DevKit / generic - -#define LED_BUILTIN 2 -#define LED_BUILTIN_ON 1 - -#endif - class BleFingerprint; class GUI { public: + void setup(); + void added(BleFingerprint *f); void removed(BleFingerprint *f, long age); void close(BleFingerprint *f); @@ -55,6 +32,7 @@ public: void seenStart(); void seenEnd(); + void updateStart(); void updateProgress(unsigned int percent); void updateEnd(); @@ -62,9 +40,12 @@ public: void connected(bool wifi, bool mqtt); void status(const char *message, ...); - void update(); + void blit(); + + void setStatusLed(bool enabled) { _statusLed = enabled; } private: + bool _statusLed = true; void begin(); bool init; diff --git a/src/main.cpp b/src/main.cpp index 0f19a7a..642ffae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,7 +16,7 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total if (discovery && !sentDiscovery) { - if (sendDiscoveryConnectivity() && sendNumberDiscovery("Max Distance", "config") && sendSwitchDiscovery("Active Scan", "config") && sendSwitchDiscovery("Query", "config") && sendDiscoveryMotion() && sendDiscoveryHumidity() && sendDiscoveryTemperature() && sendDiscoveryLux()) + if (sendDiscoveryConnectivity() && sendSwitchDiscovery("Status LED", "config") && sendNumberDiscovery("Max Distance", "config") && sendSwitchDiscovery("Active Scan", "config") && sendSwitchDiscovery("Query", "config") && sendDiscoveryMotion() && sendDiscoveryHumidity() && sendDiscoveryTemperature() && sendDiscoveryLux()) { sentDiscovery = true; } @@ -81,7 +81,7 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total void connectToWifi() { Serial.printf("Connecting to WiFi (%s)...\n", WiFi.macAddress().c_str()); - Display.update(); + Display.blit(); WiFiSettings.onConnect = []() { @@ -118,6 +118,9 @@ void connectToWifi() WiFiSettings.heading("Preferences"); + statusLed = WiFiSettings.checkbox("status_led", true, "Status LED"); + Display.setStatusLed(statusLed); + autoUpdate = WiFiSettings.checkbox("auto_update", DEFAULT_AUTO_UPDATE, "Automatically Update"); otaUpdate = WiFiSettings.checkbox("ota_update", DEFAULT_OTA_UPDATE, "Arduino OTA Update"); discovery = WiFiSettings.checkbox("discovery", true, "Home Assistant Discovery"); @@ -231,6 +234,13 @@ void onMqttMessage(char *topic, char *payload, AsyncMqttClientMessageProperties spurt("/query", String(allowQuery)); online = false; } + else if (top == roomsTopic + "/status_led/set") + { + statusLed = pay == "ON"; + spurt("/status_led", String(statusLed)); + Display.setStatusLed(statusLed); + online = false; + } fingerprints.setParams(refRssi, forgetMs, skipDistance, skipMs, maxDistance); } @@ -397,9 +407,7 @@ void triggerGetTemp() void setup() { -#ifdef LED_BUILTIN - pinMode(LED_BUILTIN, OUTPUT); -#endif + Display.setup(); Serial.begin(115200); Serial.setDebugOutput(true); @@ -664,7 +672,7 @@ void loop() if (otaUpdate) ArduinoOTA.handle(); firmwareUpdate(); - Display.update(); + Display.blit(); pirLoop(); radarLoop(); dhtLoop(); diff --git a/src/main.h b/src/main.h index 24a4549..7743dcb 100644 --- a/src/main.h +++ b/src/main.h @@ -57,7 +57,7 @@ String teleTopic; String roomsTopic; String subTopic; bool autoUpdate, otaUpdate; -bool discovery; +bool discovery, statusLed; bool activeScan, allowQuery; bool publishTele; bool publishRooms; @@ -236,11 +236,10 @@ void firmwareUpdate() updateInProgress = true; fingerprints.setDisable(updateInProgress); -#ifdef LED_BUILTIN - httpUpdate.setLedPin(LED_BUILTIN, LED_BUILTIN_ON); -#endif + Display.updateStart(); httpUpdate.setFollowRedirects(HTTPC_FORCE_FOLLOW_REDIRECTS); t_httpUpdate_return ret = httpUpdate.update(client, firmwareUrl); + Display.updateEnd(); switch (ret) { @@ -297,7 +296,7 @@ void spiffsInit() bool sendOnline() { - return mqttClient.publish(statusTopic.c_str(), 0, 1, "online") && mqttClient.publish((roomsTopic + "/max_distance").c_str(), 0, 1, String(maxDistance).c_str()) && mqttClient.publish((roomsTopic + "/query").c_str(), 0, 1, String(allowQuery ? "ON" : "OFF").c_str()) && mqttClient.publish((roomsTopic + "/active_scan").c_str(), 0, 1, String(activeScan ? "ON" : "OFF").c_str()); + return mqttClient.publish(statusTopic.c_str(), 0, 1, "online") && mqttClient.publish((roomsTopic + "/max_distance").c_str(), 0, 1, String(maxDistance).c_str()) && mqttClient.publish((roomsTopic + "/query").c_str(), 0, 1, String(allowQuery ? "ON" : "OFF").c_str()) && mqttClient.publish((roomsTopic + "/status_led").c_str(), 0, 1, String(statusLed ? "ON" : "OFF").c_str()) && mqttClient.publish((roomsTopic + "/active_scan").c_str(), 0, 1, String(activeScan ? "ON" : "OFF").c_str()); } void commonDiscovery(JsonDocument *doc) @@ -311,9 +310,10 @@ void commonDiscovery(JsonDocument *doc) (*doc)["dev"]["name"] = "ESPresense " + room; (*doc)["dev"]["sa"] = room; #ifdef VERSION - (*doc)["dev"]["sw_version"] = VERSION; + (*doc)["dev"]["sw"] = VERSION; #endif - (*doc)["dev"]["manufacturer"] = "ESPresense (" FIRMWARE ")"; + (*doc)["dev"]["mf"] = "ESPresense (" FIRMWARE ")"; + (*doc)["dev"]["cu"] = "http://" + localIp; (*doc)["dev"]["mdl"] = ESP.getChipModel(); }