Improve offline responsiveness
hard-wired button checking is no longer inside the wifi loop - the button now works even if the network (or mqtt broker) drops out
This commit is contained in:
parent
ddb7a6a449
commit
f655976cb1
|
@ -1,6 +1,8 @@
|
||||||
// In your secrets.h file, define the following:
|
// In your secrets.h file, define the following:
|
||||||
// const char *ssid = "";
|
// char ssid[] = "";
|
||||||
// const char *password = "";
|
// char password[] = "";
|
||||||
|
// const char *mqttUsername = "";
|
||||||
|
// const char *mqttPassword = "";
|
||||||
// const int port = 1883;
|
// const int port = 1883;
|
||||||
// IPAddress server(192, 168, 1, 2);
|
// IPAddress server(192, 168, 1, 2);
|
||||||
|
|
||||||
|
@ -23,16 +25,15 @@ long modeStartTime = 0;
|
||||||
long lastWifiConnectAttempt = 0;
|
long lastWifiConnectAttempt = 0;
|
||||||
long lastMQTTConnectAttempt = 0;
|
long lastMQTTConnectAttempt = 0;
|
||||||
int botMode = 0; // 0: Listening; 1: Dispensing; 2: Jam
|
int botMode = 0; // 0: Listening; 1: Dispensing; 2: Jam
|
||||||
//void callback(char* topic, byte* incoming, unsigned int length);
|
|
||||||
|
|
||||||
WiFiClient wifiClient;
|
WiFiClient wifiClient;
|
||||||
PubSubClient mqttclient(server, 1883, MQTTReceived, wifiClient);
|
PubSubClient mqttClient(server, 1883, MQTTReceived, wifiClient);
|
||||||
|
|
||||||
void MQTTReceived(char* incomingTopic, byte* incomingPayload, unsigned int payloadLength){
|
void MQTTReceived(char* incomingTopic, byte* incomingPayload, unsigned int payloadLength){
|
||||||
String incomingString = String((char *)incomingPayload);
|
String incomingString = String((char *)incomingPayload);
|
||||||
incomingString = incomingString.substring(0, payloadLength);
|
incomingString = incomingString.substring(0, payloadLength);
|
||||||
Serial.println(String(incomingTopic) + ": " + incomingString);
|
Serial.println(String(incomingTopic) + ": " + incomingString);
|
||||||
if(incomingString == "ping") mqttclient.publish(incomingTopic, (char*)("pong"));
|
if(incomingString == "ping") mqttClient.publish(incomingTopic, (char*)("pong"));
|
||||||
if(incomingString == "feed" && botMode != 2) botMode = 1; //if not jammed
|
if(incomingString == "feed" && botMode != 2) botMode = 1; //if not jammed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,9 +59,9 @@ void connectWifi(){
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean connectMQTT(){
|
boolean connectMQTT(){
|
||||||
if(mqttclient.connect(myName, statusTopic, 2, true, (char*)("offline"))){
|
if(mqttClient.connect(myName, mqttUsername, mqttPassword, statusTopic, 2, true, (char*)("offline"))){
|
||||||
mqttclient.publish(statusTopic, (byte*)("online"), 6, true);
|
mqttClient.publish(statusTopic, (byte*)("online"), 6, true);
|
||||||
mqttclient.subscribe(controlTopic);
|
mqttClient.subscribe(controlTopic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,12 +71,12 @@ void loop(){
|
||||||
lastWifiConnectAttempt=millis();
|
lastWifiConnectAttempt=millis();
|
||||||
connectWifi();
|
connectWifi();
|
||||||
}
|
}
|
||||||
} else if(!mqttclient.loop()){
|
} else if(!mqttClient.loop()){
|
||||||
if(millis() - lastMQTTConnectAttempt > networkTimeout){
|
if(millis() - lastMQTTConnectAttempt > networkTimeout){
|
||||||
lastMQTTConnectAttempt=millis();
|
lastMQTTConnectAttempt=millis();
|
||||||
connectMQTT();
|
connectMQTT();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
feedButtonDebounced.update();
|
feedButtonDebounced.update();
|
||||||
motorSwitchDebounced.update();
|
motorSwitchDebounced.update();
|
||||||
switch (botMode){
|
switch (botMode){
|
||||||
|
@ -93,15 +94,13 @@ void loop(){
|
||||||
botMode = 0;
|
botMode = 0;
|
||||||
modeStartTime = 0;
|
modeStartTime = 0;
|
||||||
Serial.println("Fed");
|
Serial.println("Fed");
|
||||||
mqttclient.publish(controlTopic, (char*)("fed")); //3 is length
|
mqttClient.publish(controlTopic, (char*)("fed"));
|
||||||
}
|
}
|
||||||
else if(millis() - modeStartTime > jamTimeout){
|
else if(millis() - modeStartTime > jamTimeout){
|
||||||
botMode = 2; //jammed
|
botMode = 2; //jammed
|
||||||
Serial.println("Jammed");
|
Serial.println("Jammed");
|
||||||
//mqttclient.publish(statusTopic, (byte*)("jam"), 3, true); //3 is length
|
mqttClient.publish(statusTopic, (char*)("jam"));
|
||||||
mqttclient.publish(statusTopic, (char*)("jam"));
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue