While connected to MQTT server, veto light-sleep (to keep wifi working)

This commit is contained in:
Kevin Hester 2021-08-02 17:42:44 -07:00
parent 39df7108a8
commit 99d529be51
3 changed files with 27 additions and 4 deletions

View File

@ -28,6 +28,21 @@ bool APStartupComplete = 0;
static bool needReconnect = true; // If we create our reconnector, run it once at the beginning static bool needReconnect = true; // If we create our reconnector, run it once at the beginning
// FIXME, veto light sleep if we have a TCP server running
#if 0
class WifiSleepObserver : public Observer<uint32_t> {
protected:
/// Return 0 if sleep is okay
virtual int onNotify(uint32_t newValue) {
}
};
static WifiSleepObserver wifiSleepObserver;
//preflightSleepObserver.observe(&preflightSleep);
#endif
static int32_t reconnectWiFi() static int32_t reconnectWiFi()
{ {
if (radioConfig.has_preferences && needReconnect) { if (radioConfig.has_preferences && needReconnect) {
@ -218,10 +233,10 @@ static void WiFiEvent(WiFiEvent_t event)
DEBUG_MSG("Completed scan for access points\n"); DEBUG_MSG("Completed scan for access points\n");
break; break;
case SYSTEM_EVENT_STA_START: case SYSTEM_EVENT_STA_START:
DEBUG_MSG("WiFi client started\n"); DEBUG_MSG("WiFi station started\n");
break; break;
case SYSTEM_EVENT_STA_STOP: case SYSTEM_EVENT_STA_STOP:
DEBUG_MSG("WiFi clients stopped\n"); DEBUG_MSG("WiFi station stopped\n");
break; break;
case SYSTEM_EVENT_STA_CONNECTED: case SYSTEM_EVENT_STA_CONNECTED:
DEBUG_MSG("Connected to access point\n"); DEBUG_MSG("Connected to access point\n");

View File

@ -4,6 +4,7 @@
#include "mesh/Channels.h" #include "mesh/Channels.h"
#include "mesh/Router.h" #include "mesh/Router.h"
#include "mesh/generated/mqtt.pb.h" #include "mesh/generated/mqtt.pb.h"
#include "sleep.h"
#include <WiFi.h> #include <WiFi.h>
#include <assert.h> #include <assert.h>
@ -57,11 +58,12 @@ MQTT::MQTT() : concurrency::OSThread("mqtt"), pubSub(mqttClient)
mqtt = this; mqtt = this;
pubSub.setCallback(mqttCallback); pubSub.setCallback(mqttCallback);
preflightSleepObserver.observe(&preflightSleep);
} }
void MQTT::reconnect() void MQTT::reconnect()
{ {
// pubSub.setServer("devsrv.ezdevice.net", 1883); or 192.168.10.188
const char *serverAddr = "mqtt.meshtastic.org"; // default hostname const char *serverAddr = "mqtt.meshtastic.org"; // default hostname
int serverPort = 1883; // default server port int serverPort = 1883; // default server port
@ -78,7 +80,7 @@ void MQTT::reconnect()
} }
pubSub.setServer(serverAddr, serverPort); pubSub.setServer(serverAddr, serverPort);
DEBUG_MSG("Connecting to MQTT server %s, port: %d\n", server.c_str(), serverPort); DEBUG_MSG("Connecting to MQTT server %s, port: %d\n", serverAddr, serverPort);
auto myStatus = (statusTopic + owner.id); auto myStatus = (statusTopic + owner.id);
bool connected = pubSub.connect(owner.id, "meshdev", "large4cats", myStatus.c_str(), 1, true, "offline"); bool connected = pubSub.connect(owner.id, "meshdev", "large4cats", myStatus.c_str(), 1, true, "offline");
if (connected) { if (connected) {

View File

@ -19,6 +19,9 @@ class MQTT : private concurrency::OSThread
WiFiClient mqttClient; WiFiClient mqttClient;
PubSubClient pubSub; PubSubClient pubSub;
CallbackObserver<MQTT, void *> preflightSleepObserver =
CallbackObserver<MQTT, void *>(this, &MQTT::preflightSleepCb);
public: public:
MQTT(); MQTT();
@ -53,6 +56,9 @@ class MQTT : private concurrency::OSThread
/// Called when a new publish arrives from the MQTT server /// Called when a new publish arrives from the MQTT server
void onPublish(char *topic, byte *payload, unsigned int length); void onPublish(char *topic, byte *payload, unsigned int length);
/// Return 0 if sleep is okay, veto sleep if we are connected to pubsub server
int preflightSleepCb(void *unused = NULL) { return pubSub.connected() ? 1 : 0; }
}; };
void mqttInit(); void mqttInit();