From 95276b119101fdc2f1fc401da7c0a004d56cef2c Mon Sep 17 00:00:00 2001 From: aderusha Date: Sat, 16 Dec 2023 10:11:58 -0500 Subject: [PATCH] Update to new MQTT discovery, convert to CPP --- Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin | Bin 671024 -> 672480 bytes .../HASwitchPlate/HASwitchPlate.cpp | 3961 +++++++++++++++++ .../debug/HASwitchPlate.ino.d1_mini.elf | Bin 4126592 -> 4129092 bytes Arduino_Sketch/platformio.ini | 14 +- 4 files changed, 3968 insertions(+), 7 deletions(-) create mode 100644 Arduino_Sketch/HASwitchPlate/HASwitchPlate.cpp diff --git a/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin b/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin index 268065961aa9441c418924a8241be13b685ffa31..2beac795167f151af883456eea55f48cf87d5dc5 100644 GIT binary patch delta 290731 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

05MhBCDcHO=S2rbU=zLGf0z(M9+N|N4 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

tz>yW731gCsLFvd1toZyR-GhIsh^3X?C$~@2_~U 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 z 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 delta 289112 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≶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 po4NKpd;{|D5JB0K;9 diff --git a/Arduino_Sketch/HASwitchPlate/HASwitchPlate.cpp b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.cpp new file mode 100644 index 0000000..e26a744 --- /dev/null +++ b/Arduino_Sketch/HASwitchPlate/HASwitchPlate.cpp @@ -0,0 +1,3961 @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +// _____ _____ _____ _____ +// | | | _ | __| _ | +// | | |__ | __| +// |__|__|__|__|_____|__| +// Home Automation Switch Plate +// https://github.com/aderusha/HASwitchPlate +// +// Copyright (c) 2023 Allen Derusha allen@derusha.org +// +// MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this hardware, +// software, and associated documentation files (the "Product"), to deal in the Product without +// restriction, including without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Product, and to permit persons to whom the +// Product is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Product. +// +// THE PRODUCT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE PRODUCT OR THE USE OR OTHER DEALINGS IN THE PRODUCT. +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// These defaults may be overwritten with values saved by the web interface +char wifiSSID[32] = ""; +char wifiPass[64] = ""; +char mqttServer[128] = ""; +char mqttPort[6] = "1883"; +char mqttUser[128] = ""; +char mqttPassword[128] = ""; +char mqttFingerprint[60] = ""; +char haspNode[16] = "plate01"; +char groupName[16] = "plates"; +char hassDiscovery[128] = "homeassistant"; +char configUser[32] = "admin"; +char configPassword[32] = ""; +char motionPinConfig[3] = "0"; +char nextionBaud[7] = "115200"; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +const float haspVersion = 1.06; // Current HASPone software release version +const uint16_t mqttMaxPacketSize = 2048; // Size of buffer for incoming MQTT message +byte nextionReturnBuffer[128]; // Byte array to pass around data coming from the panel +uint8_t nextionReturnIndex = 0; // Index for nextionReturnBuffer +int8_t nextionActivePage = -1; // Track active LCD page +bool lcdConnected = false; // Set to true when we've heard something from the LCD +const char wifiConfigPass[9] = "hasplate"; // First-time config WPA2 password +const char wifiConfigAP[14] = "HASwitchPlate"; // First-time config SSID +bool shouldSaveConfig = false; // Flag to save json config to SPIFFS +bool nextionReportPage0 = false; // If false, don't report page 0 sendme +const unsigned long updateCheckInterval = 43200000; // Time in msec between update checks (12 hours) +unsigned long updateCheckTimer = updateCheckInterval; // Timer for update check +unsigned long updateCheckFirstRun = 60000; // First-run check offset +bool updateEspAvailable = false; // Flag for update check to report new ESP FW version +float updateEspAvailableVersion; // Float to hold the new ESP FW version number +bool updateLcdAvailable = false; // Flag for update check to report new LCD FW version +unsigned long debugTimer = 0; // Clock for debug performance profiling +bool debugSerialEnabled = true; // Enable USB serial debug output +const unsigned long debugSerialBaud = 115200; // Desired baud rate for serial debug output +bool debugTelnetEnabled = false; // Enable telnet debug output +bool nextionBufferOverrun = false; // Set to true if an overrun error was encountered +bool nextionAckEnable = false; // Wait for each Nextion command to be acked before continuing +bool nextionAckReceived = false; // Ack was received +bool rebootOnp0b1 = false; // When true, reboot device on button press of p[0].b[1] +bool rebootOnLongPress = true; // When true, reboot device on long press of any button +unsigned long rebootOnLongPressTimer = 0; // Clock for long press reboot timer +unsigned long rebootOnLongPressTimeout = 10000; // Timeout value for long press reboot timer +const unsigned long nextionAckTimeout = 1000; // Timeout to wait for an ack before throwing error +unsigned long nextionAckTimer = 0; // Timer to track Nextion ack +const unsigned long telnetInputMax = 128; // Size of user input buffer for user telnet session +bool motionEnabled = false; // Motion sensor is enabled +bool mdnsEnabled = true; // mDNS enabled +bool ignoreTouchWhenOff = false; // Ignore touch events when backlight is off and instead send mqtt msg +bool beepEnabled = false; // Keypress beep enabled +unsigned long beepOnTime = 1000; // milliseconds of on-time for beep +unsigned long beepOffTime = 1000; // milliseconds of off-time for beep +unsigned int beepCounter; // Count the number of beeps +uint8_t beepPin = D2; // define beep pin output +uint8_t motionPin = 0; // GPIO input pin for motion sensor if connected and enabled +bool motionActive = false; // Motion is being detected +const unsigned long motionLatchTimeout = 1000; // Latch time for motion sensor +const unsigned long motionBufferTimeout = 100; // Trigger threshold time for motion sensor +unsigned long lcdVersion = 0; // Int to hold current LCD FW version number +unsigned long updateLcdAvailableVersion; // Int to hold the new LCD FW version number +bool lcdVersionQueryFlag = false; // Flag to set if we've queried lcdVersion +const String lcdVersionQuery = "p[0].b[2].val"; // Object ID for lcdVersion in HMI +uint8_t lcdBacklightDim = 0; // Backlight dimmer value +bool lcdBacklightOn = 0; // Backlight on/off +bool lcdBacklightQueryFlag = false; // Flag to set if we've queried lcdBacklightDim +bool startupCompleteFlag = false; // Startup process has completed +const unsigned long statusUpdateInterval = 300000; // Time in msec between publishing MQTT status updates (5 minutes) +unsigned long statusUpdateTimer = 0; // Timer for status update +const unsigned long connectTimeout = 300; // Timeout for WiFi and MQTT connection attempts in seconds +const unsigned long reConnectTimeout = 60; // Timeout for WiFi reconnection attempts in seconds +byte espMac[6]; // Byte array to store our MAC address +bool mqttTlsEnabled = false; // Enable MQTT client TLS connections +bool mqttPingCheck = false; // MQTT broker ping check result +bool mqttPortCheck = false; // MQTT broke port check result +String mqttClientId; // Auto-generated MQTT ClientID +String mqttGetSubtopic; // MQTT subtopic for incoming commands requesting .val +String mqttStateTopic; // MQTT topic for outgoing panel interactions +String mqttStateJSONTopic; // MQTT topic for outgoing panel interactions in JSON format +String mqttCommandTopic; // MQTT topic for incoming panel commands +String mqttGroupCommandTopic; // MQTT topic for incoming group panel commands +String mqttStatusTopic; // MQTT topic for publishing device connectivity state +String mqttSensorTopic; // MQTT topic for publishing device information in JSON format +String mqttLightCommandTopic; // MQTT topic for incoming panel backlight on/off commands +String mqttLightStateTopic; // MQTT topic for outgoing panel backlight on/off state +String mqttLightBrightCommandTopic; // MQTT topic for incoming panel backlight dimmer commands +String mqttLightBrightStateTopic; // MQTT topic for outgoing panel backlight dimmer state +String mqttMotionStateTopic; // MQTT topic for outgoing motion sensor state +String nextionModel; // Record reported model number of LCD panel +const byte nextionSuffix[] = {0xFF, 0xFF, 0xFF}; // Standard suffix for Nextion commands +uint8_t nextionMaxPages = 11; // Maximum number of pages in Nextion project +uint32_t tftFileSize = 0; // Filesize for TFT firmware upload +const uint8_t nextionResetPin = D6; // Pin for Nextion power rail switch (GPIO12/D6) +const unsigned long nextionSpeeds[] = {2400, + 4800, + 9600, + 19200, + 31250, + 38400, + 57600, + 115200, + 230400, + 250000, + 256000, + 512000, + 921600}; // Valid serial speeds for Nextion communication +const uint8_t nextionSpeedsLength = sizeof(nextionSpeeds) / sizeof(nextionSpeeds[0]); // Size of our list of speeds + +WiFiClientSecure mqttClientSecure; // TLS-enabled WiFiClient for MQTT +WiFiClient wifiClient; // Standard WiFiClient +MQTTClient mqttClient(mqttMaxPacketSize); // MQTT client +ESP8266WebServer webServer(80); // Admin web server on port 80 +ESP8266HTTPUpdateServer httpOTAUpdate; // Arduino OTA server +WiFiServer telnetServer(23); // Telnet server (if enabled) +WiFiClient telnetClient; // Telnet client +MDNSResponder::hMDNSService hMDNSService; // mDNS +EspSaveCrash SaveCrash; // Save crash details to flash + +// URL for auto-update check of "version.json" +const char UPDATE_URL[] PROGMEM = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/update/version.json"; +// Additional CSS style to match Hass theme +const char HASP_STYLE[] PROGMEM = ""; +// Default link to compiled Arduino firmware image +String espFirmwareUrl = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/Arduino_Sketch/HASwitchPlate.ino.d1_mini.bin"; +// Default link to compiled Nextion firmware images +String lcdFirmwareUrl = "https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/Nextion_HMI/HASwitchPlate.tft"; + +void setup(); +void loop(); +void mqttConnect(); +void mqttProcessInput(String &strTopic, String &strPayload); +void mqttStatusUpdate(); +void mqttDiscovery(); +void nextionHandleInput(); +void nextionProcessInput(); +void nextionSendCmd(const String &nextionCmd); +void nextionSetAttr(const String &hmiAttribute, const String &hmiValue); +void nextionGetAttr(const String &hmiAttribute); +void nextionParseJson(const String &strPayload); +void nextionOtaStartDownload(const String &lcdOtaUrl); +bool nextionOtaResponse(); +bool nextionConnect(); +void nextionSetSpeed(); +void nextionReset(); +void nextionUpdateProgress(const unsigned int &progress, const unsigned int &total); +void espWifiConnect(); +void espWifiReconnect(); +void espSetupOta(); +void espStartOta(const String &espOtaUrl); +void espReset(); +void configRead(); +void configSaveCallback(); +void configSave(); +void configClearSaved(); +void webHandleNotFound(); +void webHandleRoot(); +void webHandleSaveConfig(); +void webHandleResetConfig(); +void webHandleShowConfig(); +void webHandleResetBacklight(); +void webHandleFirmware(); +void webHandleEspFirmware(); +void webHandleLcdUpload(); +void webHandleLcdUpdateSuccess(); +void webHandleLcdUpdateFailure(); +void webHandleLcdDownload(); +void webHandleTftFileSize(); +void webHandleReboot(); +void espWifiConfigCallback(WiFiManager *myWiFiManager); +bool updateCheck(); +void motionSetup(); +void motionHandle(); +void beepHandle(); +void telnetHandleClient(); +void debugPrintln(const String &debugText); +void debugPrint(const String &debugText); +void debugPrintCrash(); +void debugPrintFile(const String &fileName); +String getSubtringField(String data, char separator, int index); +String printHex8(byte *data, uint8_t length); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void setup() +{ // System setup + debugPrint(String(F("\n\n================================================================================\n"))); + debugPrintln(String(F("SYSTEM: Starting HASPone v")) + String(haspVersion)); + debugPrintln(String(F("SYSTEM: heapFree: ")) + String(ESP.getFreeHeap()) + String(F(" heapMaxFreeBlockSize: ")) + String(ESP.getMaxFreeBlockSize())); + debugPrintln(String(F("SYSTEM: Last reset reason: ")) + String(ESP.getResetInfo())); + if (SaveCrash.count()) + { + debugPrint(String(F("SYSTEM: Crashdump data discovered:"))); + debugPrintCrash(); + } + debugPrint(String(F("================================================================================\n\n"))); + + pinMode(nextionResetPin, OUTPUT); // Take control over the power switch for the LCD + digitalWrite(nextionResetPin, HIGH); // Power on the LCD + configRead(); // Check filesystem for a saved config.json + Serial.begin(atoi(nextionBaud)); // Serial - LCD RX (after swap), debug TX + Serial1.begin(atoi(nextionBaud)); // Serial1 - LCD TX, no RX + Serial.swap(); // Swap to allow hardware UART comms to LCD + + if (!nextionConnect()) + { + if (lcdConnected) + { + debugPrintln(F("HMI: LCD responding but initialization wasn't completed. Continuing program load anyway.")); + } + else + { + debugPrintln(F("HMI: LCD not responding, continuing program load")); + } + } + + espWifiConnect(); // Start up networking + + if ((configPassword[0] != '\0') && (configUser[0] != '\0')) + { // Start the webserver with our assigned password if it's been configured... + httpOTAUpdate.setup(&webServer, "/update", configUser, configPassword); + } + else + { // or without a password if not + httpOTAUpdate.setup(&webServer, "/update"); + } + + webServer.on("/", webHandleRoot); + webServer.on("/saveConfig", webHandleSaveConfig); + webServer.on("/resetConfig", webHandleResetConfig); + webServer.on("/resetBacklight", webHandleResetBacklight); + webServer.on("/firmware", webHandleFirmware); + webServer.on("/espfirmware", webHandleEspFirmware); + webServer.on( + "/lcdupload", HTTP_POST, []() + { webServer.send(200); }, + webHandleLcdUpload); + webServer.on("/tftFileSize", webHandleTftFileSize); + webServer.on("/lcddownload", webHandleLcdDownload); + webServer.on("/lcdOtaSuccess", webHandleLcdUpdateSuccess); + webServer.on("/lcdOtaFailure", webHandleLcdUpdateFailure); + webServer.on("/reboot", webHandleReboot); + webServer.onNotFound(webHandleNotFound); + webServer.begin(); + debugPrintln(String(F("HTTP: Server started @ http://")) + WiFi.localIP().toString()); + + espSetupOta(); // Start OTA firmware update + + motionSetup(); // Setup motion sensor if configured + + mqttConnect(); // Connect to MQTT + + if (mdnsEnabled) + { // Setup mDNS service discovery if enabled + hMDNSService = MDNS.addService(haspNode, "http", "tcp", 80); + if (debugTelnetEnabled) + { + MDNS.addService(haspNode, "telnet", "tcp", 23); + } + MDNS.addServiceTxt(hMDNSService, "app_name", "HASwitchPlate"); + MDNS.addServiceTxt(hMDNSService, "app_version", String(haspVersion).c_str()); + MDNS.update(); + } + + if (beepEnabled) + { // Setup beep/tactile output if configured + pinMode(beepPin, OUTPUT); + } + + if (debugTelnetEnabled) + { // Setup telnet server for remote debug output + telnetServer.setNoDelay(true); + telnetServer.begin(); + debugPrintln(String(F("TELNET: debug server enabled at telnet:")) + WiFi.localIP().toString()); + } + + debugPrintln(F("SYSTEM: System init complete.")); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void loop() +{ // Main execution loop + while ((WiFi.status() != WL_CONNECTED) || (WiFi.localIP().toString() == "0.0.0.0")) + { // Check WiFi is connected and that we have a valid IP, retry until we do. + if (WiFi.status() == WL_CONNECTED) + { // If we're currently connected, disconnect so we can try again + WiFi.disconnect(); + } + espWifiReconnect(); + } + + if (!mqttClient.connected()) + { // Check MQTT connection + debugPrintln(String(F("MQTT: not connected, connecting."))); + mqttConnect(); + } + nextionHandleInput(); // Nextion serial communications loop + mqttClient.loop(); // MQTT client loop + ArduinoOTA.handle(); // Arduino OTA loop + webServer.handleClient(); // webServer loop + telnetHandleClient(); // telnet client loop + motionHandle(); // motion sensor loop + beepHandle(); // beep feedback loop + + if (mdnsEnabled) + { + MDNS.update(); + } + + if ((millis() - statusUpdateTimer) >= statusUpdateInterval) + { // Run periodic status update + statusUpdateTimer = millis(); + mqttStatusUpdate(); + } + + if (((millis() - updateCheckTimer) >= updateCheckInterval) && (millis() > updateCheckFirstRun)) + { // Run periodic update check + updateCheckTimer = millis(); + if (updateCheck()) + { // Publish new status if updateCheck() worked and reset the timer + statusUpdateTimer = millis(); + mqttStatusUpdate(); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Functions + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void mqttConnect() +{ // MQTT connection and subscriptions + + static bool mqttFirstConnect = true; // For the first connection, we want to send an OFF/ON state to + // trigger any automations, but skip that if we reconnect while + // still running the sketch + rebootOnp0b1 = true; + static uint8_t mqttReconnectCount = 0; + unsigned long mqttConnectTimer = 0; + const unsigned long mqttConnectTimeout = 5000; + + // Check to see if we have a broker configured and notify the user if not + if (strcmp(mqttServer, "") == 0) + { + nextionSendCmd("page 0"); + nextionSetAttr("p[0].b[1].font", "6"); + nextionSetAttr("p[0].b[1].txt", "\"WiFi Connected!\\r " + String(WiFi.SSID()) + "\\rIP: " + WiFi.localIP().toString() + "\\r\\rConfigure MQTT:\\rhttp://" + WiFi.localIP().toString() + "\""); + while (strcmp(mqttServer, "") == 0) + { // Handle other stuff while we're waiting for MQTT to be configured + yield(); + nextionHandleInput(); // Nextion serial communications loop + ArduinoOTA.handle(); // Arduino OTA loop + webServer.handleClient(); // webServer loop + telnetHandleClient(); // telnet client loop + motionHandle(); // motion sensor loop + beepHandle(); // beep feedback loop + } + } + + if (mqttTlsEnabled) + { // Create MQTT service object with TLS connection + mqttClient.begin(mqttServer, atoi(mqttPort), mqttClientSecure); + if (strcmp(mqttFingerprint, "") == 0) + { + debugPrintln(String(F("MQTT: Configuring MQTT TLS connection without fingerprint validation."))); + mqttClientSecure.setInsecure(); + } + else + { + debugPrintln(String(F("MQTT: Configuring MQTT TLS connection with fingerprint validation."))); + mqttClientSecure.allowSelfSignedCerts(); + mqttClientSecure.setFingerprint(mqttFingerprint); + } + mqttClientSecure.setBufferSizes(512, 512); + } + else + { // Create MQTT service object without TLS connection + debugPrintln(String(F("MQTT: Configuring MQTT connection without TLS."))); + mqttClient.begin(mqttServer, atoi(mqttPort), wifiClient); + } + + mqttClient.onMessage(mqttProcessInput); // Setup MQTT callback function + + // MQTT topic string definitions + mqttStateTopic = "hasp/" + String(haspNode) + "/state"; + mqttStateJSONTopic = "hasp/" + String(haspNode) + "/state/json"; + mqttCommandTopic = "hasp/" + String(haspNode) + "/command"; + mqttGroupCommandTopic = "hasp/" + String(groupName) + "/command"; + mqttStatusTopic = "hasp/" + String(haspNode) + "/status"; + mqttSensorTopic = "hasp/" + String(haspNode) + "/sensor"; + mqttLightCommandTopic = "hasp/" + String(haspNode) + "/light/switch"; + mqttLightStateTopic = "hasp/" + String(haspNode) + "/light/state"; + mqttLightBrightCommandTopic = "hasp/" + String(haspNode) + "/brightness/set"; + mqttLightBrightStateTopic = "hasp/" + String(haspNode) + "/brightness/state"; + mqttMotionStateTopic = "hasp/" + String(haspNode) + "/motion/state"; + + const String mqttCommandSubscription = mqttCommandTopic + "/#"; + const String mqttGroupCommandSubscription = mqttGroupCommandTopic + "/#"; + const String mqttLightSubscription = mqttLightCommandTopic + "/#"; + const String mqttLightBrightSubscription = mqttLightBrightCommandTopic + "/#"; + + // Generate an MQTT client ID as haspNode + our MAC address + mqttClientId = String(haspNode) + "-" + String(espMac[0], HEX) + String(espMac[1], HEX) + String(espMac[2], HEX) + String(espMac[3], HEX) + String(espMac[4], HEX) + String(espMac[5], HEX); + nextionSendCmd("page 0"); + nextionSetAttr("p[0].b[1].font", "6"); + nextionSetAttr("p[0].b[1].txt", "\"WiFi Connected!\\r " + String(WiFi.SSID()) + "\\rIP: " + WiFi.localIP().toString() + "\\r\\rMQTT Connecting:\\r " + String(mqttServer) + "\""); + if (mqttTlsEnabled) + { + debugPrintln(String(F("MQTT: Attempting connection to broker ")) + String(mqttServer) + String(F(" on port ")) + String(mqttPort) + String(F(" with TLS enabled as clientID ")) + mqttClientId); + } + else + { + debugPrintln(String(F("MQTT: Attempting connection to broker ")) + String(mqttServer) + String(F(" on port ")) + String(mqttPort) + String(F(" with TLS disabled as clientID ")) + mqttClientId); + } + + // Set keepAlive, cleanSession, timeout + mqttClient.setOptions(30, true, mqttConnectTimeout); + + // declare LWT + mqttClient.setWill(mqttStatusTopic.c_str(), "OFF", true, 1); + + while (!mqttClient.connected()) + { // Loop until we're connected to MQTT + mqttConnectTimer = millis(); + mqttClient.connect(mqttClientId.c_str(), mqttUser, mqttPassword, false); + + if (mqttClient.connected()) + { // Attempt to connect to broker, setting last will and testament + // Update panel with MQTT status + nextionSetAttr("p[0].b[1].txt", "\"WiFi Connected!\\r " + String(WiFi.SSID()) + "\\rIP: " + WiFi.localIP().toString() + "\\r\\rMQTT Connected:\\r " + String(mqttServer) + "\""); + debugPrintln(F("MQTT: connected")); + + // Reset our diagnostic booleans + mqttPingCheck = true; + mqttPortCheck = true; + + // Subscribe to our incoming topics + if (mqttClient.subscribe(mqttCommandSubscription)) + { + debugPrintln(String(F("MQTT: subscribed to ")) + mqttCommandSubscription); + } + if (mqttClient.subscribe(mqttGroupCommandSubscription)) + { + debugPrintln(String(F("MQTT: subscribed to ")) + mqttGroupCommandSubscription); + } + if (mqttClient.subscribe(mqttLightSubscription)) + { + debugPrintln(String(F("MQTT: subscribed to ")) + mqttLightSubscription); + } + if (mqttClient.subscribe(mqttLightBrightSubscription)) + { + debugPrintln(String(F("MQTT: subscribed to ")) + mqttLightBrightSubscription); + } + + // Publish discovery configuration + mqttDiscovery(); + + // Publish backlight status + if (lcdBacklightOn) + { + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'ON'"))); + mqttClient.publish(mqttLightStateTopic, "ON", true, 1); + } + else + { + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'OFF'"))); + mqttClient.publish(mqttLightStateTopic, "OFF", true, 1); + } + debugPrintln(String(F("MQTT OUT: '")) + mqttLightBrightStateTopic + String(F("' : ")) + String(lcdBacklightDim)); + mqttClient.publish(mqttLightBrightStateTopic, String(lcdBacklightDim), true, 1); + + if (mqttFirstConnect) + { // Force any subscribed clients to toggle OFF/ON when we first connect to + // make sure we get a full panel refresh at power on. Sending OFF, + // "ON" will be sent by the mqttStatusTopic subscription action below. + mqttFirstConnect = false; + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + "' : 'OFF'"); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); + } + + if (mqttClient.subscribe(mqttStatusTopic)) + { + debugPrintln(String(F("MQTT: subscribed to ")) + mqttStatusTopic); + } + mqttClient.loop(); + } + else + { // Retry until we give up and restart after connectTimeout seconds + mqttReconnectCount++; + if (mqttReconnectCount * mqttConnectTimeout * 6 > (connectTimeout * 1000)) + { + debugPrintln(String(F("MQTT: connection attempt ")) + String(mqttReconnectCount) + String(F(" failed with rc: ")) + String(mqttClient.returnCode()) + String(F(" and error: ")) + String(mqttClient.lastError()) + String(F(". Restarting device."))); + espReset(); + } + yield(); + webServer.handleClient(); + + String mqttCheckResult = "Ping: FAILED"; + String mqttCheckResultNextion = "MQTT Check..."; + + debugPrintln(String(F("MQTT: connection attempt ")) + String(mqttReconnectCount) + String(F(" failed with rc ")) + String(mqttClient.returnCode()) + String(F(" and error: ")) + String(mqttClient.lastError())); + nextionSetAttr("p[0].b[1].txt", String(F("\"WiFi Connected!\\r ")) + String(WiFi.SSID()) + String(F("\\rIP: ")) + WiFi.localIP().toString() + String(F("\\r\\rMQTT Failed:\\r ")) + String(mqttServer) + String(F("\\rRC: ")) + String(mqttClient.returnCode()) + String(F(" Error: ")) + String(mqttClient.lastError()) + String(F("\\r")) + mqttCheckResultNextion + String(F("\""))); + + mqttPingCheck = Ping.ping(mqttServer, 4); + yield(); + webServer.handleClient(); + mqttPortCheck = wifiClient.connect(mqttServer, atoi(mqttPort)); + yield(); + webServer.handleClient(); + + mqttCheckResultNextion = "Ping: "; + if (mqttPingCheck) + { + mqttCheckResult = "Ping: SUCCESS"; + mqttCheckResultNextion = "Ping: "; + } + if (mqttPortCheck) + { + mqttCheckResult += " Port: SUCCESS"; + mqttCheckResultNextion += " Port: "; + } + else + { + mqttCheckResult += " Port: FAILED"; + mqttCheckResultNextion += " Port: "; + } + debugPrintln(String(F("MQTT: connection checks: ")) + mqttCheckResult + String(F(". Trying again in 30 seconds."))); + nextionSetAttr("p[0].b[1].txt", String(F("\"WiFi Connected!\\r ")) + String(WiFi.SSID()) + String(F("\\rIP: ")) + WiFi.localIP().toString() + String(F("\\r\\rMQTT Failed:\\r ")) + String(mqttServer) + String(F("\\rRC: ")) + String(mqttClient.returnCode()) + String(F(" Error: ")) + String(mqttClient.lastError()) + String(F("\\r")) + mqttCheckResultNextion + String(F("\""))); + + while (millis() < (mqttConnectTimer + (mqttConnectTimeout * 6))) + { + yield(); + nextionHandleInput(); // Nextion serial communications loop + ArduinoOTA.handle(); // Arduino OTA loop + webServer.handleClient(); // webServer loop + telnetHandleClient(); // telnet client loop + motionHandle(); // motion sensor loop + beepHandle(); // beep feedback loop + } + } + } + rebootOnp0b1 = false; + if (nextionActivePage < 0) + { // We never picked up a message giving us a page number, so we'll just go to the default page + debugPrintln(String(F("DEBUG: NextionActivePage not received from MQTT, setting to 0"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"page\",\"value\":0}")); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent, false, 0); + String mqttPageTopic = mqttStateTopic + "/page"; + debugPrintln(String(F("MQTT OUT: '")) + mqttPageTopic + String(F("' : '0'"))); + mqttClient.publish(mqttPageTopic, "0", false, 0); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void mqttProcessInput(String &strTopic, String &strPayload) +{ // Handle incoming commands from MQTT + + // strTopic: homeassistant/haswitchplate/devicename/command/p[1].b[4].txt + // strPayload: "Lights On" + // subTopic: p[1].b[4].txt + + // Incoming Namespace (replace /device/ with /group/ for group commands) + // '[...]/device/command' -m '' == No command requested, respond with mqttStatusUpdate() + // '[...]/device/command' -m 'dim=50' == nextionSendCmd("dim=50") + // '[...]/device/command/json' -m '["dim=5", "page 1"]' == nextionSendCmd("dim=50"), nextionSendCmd("page 1") + // '[...]/device/command/p[1].b[4].txt' -m '' == nextionGetAttr("p[1].b[4].txt") + // '[...]/device/command/p[1].b[4].txt' -m '"Lights On"' == nextionSetAttr("p[1].b[4].txt", "\"Lights On\"") + // '[...]/device/brightness/set' -m '50' == nextionSendCmd("dims=50") + // '[...]/device/light/switch' -m 'OFF' == nextionSendCmd("dims=0") + // '[...]/device/command/page' -m '1' == nextionSendCmd("page 1") + // '[...]/device/command/statusupdate' -m '' == mqttStatusUpdate() + // '[...]/device/command/discovery' -m '' == call mqttDiscovery() + // '[...]/device/command/lcdupdate' -m 'http://192.168.0.10/local/HASwitchPlate.tft' == nextionOtaStartDownload("http://192.168.0.10/local/HASwitchPlate.tft") + // '[...]/device/command/lcdupdate' -m '' == nextionOtaStartDownload("lcdFirmwareUrl") + // '[...]/device/command/espupdate' -m 'http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin' == espStartOta("http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin") + // '[...]/device/command/espupdate' -m '' == espStartOta("espFirmwareUrl") + // '[...]/device/command/beep' -m '100,200,3' == beep on for 100msec, off for 200msec, repeat 3 times + // '[...]/device/command/hassdiscovery' -m 'homeassistant' == hassDiscovery = homeassistant + // '[...]/device/command/nextionmaxpages' -m '11' == nextionmaxpages = 11 + // '[...]/device/command/nextionbaud' -m '921600' == nextionBaud = 921600 + // '[...]/device/command/debugserialenabled' -m 'true' == enable serial debug output + // '[...]/device/command/debugtelnetenabled' -m 'true' == enable telnet debug output + // '[...]/device/command/mdnsenabled' -m 'true' == enable mDNS responder + // '[...]/device/command/beepenabled' -m 'true' == enable beep output on keypress + // '[...]/device/command/ignoretouchwhenoff' -m 'true' == disable actions on keypress + + debugPrintln(String(F("MQTT IN: '")) + strTopic + String(F("' : '")) + strPayload + String(F("'"))); + + if (((strTopic == mqttCommandTopic) || (strTopic == mqttGroupCommandTopic)) && (strPayload == "")) + { // '[...]/device/command' -m '' = No command requested, respond with mqttStatusUpdate() + mqttStatusUpdate(); // return status JSON via MQTT + } + else if (strTopic == mqttCommandTopic || strTopic == mqttGroupCommandTopic) + { // '[...]/device/command' -m 'dim=50' == nextionSendCmd("dim=50") + nextionSendCmd(strPayload); + } + else if (strTopic == (mqttCommandTopic + "/page") || strTopic == (mqttGroupCommandTopic + "/page")) + { // '[...]/device/command/page' -m '1' == nextionSendCmd("page 1") + if (strPayload == "") + { + nextionSendCmd("sendme"); + } + else + { + nextionActivePage = strPayload.toInt(); + nextionSendCmd("page " + strPayload); + } + } + else if (strTopic == (mqttCommandTopic + "/json") || strTopic == (mqttGroupCommandTopic + "/json")) + { // '[...]/device/command/json' -m '["dim=5", "page 1"]' = nextionSendCmd("dim=50"), nextionSendCmd("page 1") + if (strPayload != "") + { + nextionParseJson(strPayload); // Send to nextionParseJson() + } + } + else if (strTopic == (mqttCommandTopic + "/statusupdate") || strTopic == (mqttGroupCommandTopic + "/statusupdate")) + { // '[...]/device/command/statusupdate' == mqttStatusUpdate() + mqttStatusUpdate(); // return status JSON via MQTT + } + else if (strTopic == (mqttCommandTopic + "/discovery") || strTopic == (mqttGroupCommandTopic + "/discovery")) + { // '[...]/device/command/discovery' == mqttDiscovery() + mqttDiscovery(); // send Home Assistant discovery message via MQTT + } + else if (strTopic == (mqttCommandTopic + "/hassdiscovery") || strTopic == (mqttGroupCommandTopic + "/hassdiscovery")) + { // '[...]/device/command/hassdiscovery' -m 'homeassistant' == hassDiscovery = homeassistant + strPayload.toCharArray(hassDiscovery, 128); // set hassDiscovery to value provided in payload + configSave(); + mqttDiscovery(); // send Home Assistant discovery message on new discovery topic via MQTT + } + else if ((strTopic == (mqttCommandTopic + "/nextionmaxpages") || strTopic == (mqttGroupCommandTopic + "/nextionmaxpages")) && (strPayload.toInt() < 256) && (strPayload.toInt() > 0)) + { // '[...]/device/command/nextionmaxpages' -m '11' == nextionmaxpages = 11 + nextionMaxPages = strPayload.toInt(); // set nextionMaxPages to value provided in payload + configSave(); + mqttDiscovery(); // send Home Assistant discovery message via MQTT + } + else if ((strTopic == (mqttCommandTopic + "/nextionbaud") || strTopic == (mqttGroupCommandTopic + "/nextionbaud")) && + ((strPayload.toInt() == 2400) || + (strPayload.toInt() == 4800) || + (strPayload.toInt() == 9600) || + (strPayload.toInt() == 19200) || + (strPayload.toInt() == 31250) || + (strPayload.toInt() == 38400) || + (strPayload.toInt() == 57600) || + (strPayload.toInt() == 115200) || + (strPayload.toInt() == 230400) || + (strPayload.toInt() == 250000) || + (strPayload.toInt() == 256000) || + (strPayload.toInt() == 512000) || + (strPayload.toInt() == 921600))) + { // '[...]/device/command/nextionbaud' -m '921600' == nextionBaud = 921600 + strPayload.toCharArray(nextionBaud, 7); // set nextionBaud to value provided in payload + nextionAckEnable = false; + nextionSendCmd("bauds=" + strPayload); // send baud rate to nextion + nextionAckEnable = true; + Serial.flush(); + Serial1.flush(); + Serial.end(); + Serial1.end(); + Serial.begin(atoi(nextionBaud)); // Serial - LCD RX (after swap), debug TX + Serial1.begin(atoi(nextionBaud)); // Serial1 - LCD TX, no RX + Serial.swap(); // Swap to allow hardware UART comms to LCD + configSave(); + } + else if (strTopic == (mqttCommandTopic + "/debugserialenabled") || strTopic == (mqttGroupCommandTopic + "/debugserialenabled")) + { // '[...]/device/command/debugserialenabled' -m 'true' == enable serial debug output + if (strPayload.equalsIgnoreCase("true")) + { + debugSerialEnabled = true; + configSave(); + } + else if (strPayload.equalsIgnoreCase("false")) + { + debugSerialEnabled = false; + configSave(); + } + } + else if (strTopic == (mqttCommandTopic + "/debugtelnetenabled") || strTopic == (mqttGroupCommandTopic + "/debugtelnetenabled")) + { // '[...]/device/command/debugtelnetenabled' -m 'true' == enable telnet debug output + if (strPayload.equalsIgnoreCase("true")) + { + debugTelnetEnabled = true; + configSave(); + } + else if (strPayload.equalsIgnoreCase("false")) + { + debugTelnetEnabled = false; + configSave(); + } + } + else if (strTopic == (mqttCommandTopic + "/mdnsenabled") || strTopic == (mqttGroupCommandTopic + "/mdnsenabled")) + { // '[...]/device/command/mdnsenabled' -m 'true' == enable mDNS responder + if (strPayload.equalsIgnoreCase("true")) + { + mdnsEnabled = true; + configSave(); + } + else if (strPayload.equalsIgnoreCase("false")) + { + mdnsEnabled = false; + configSave(); + } + } + else if (strTopic == (mqttCommandTopic + "/beepenabled") || strTopic == (mqttGroupCommandTopic + "/beepenabled")) + { // '[...]/device/command/beepenabled' -m 'true' == enable beep output on keypress + if (strPayload.equalsIgnoreCase("true")) + { + beepEnabled = true; + configSave(); + } + else if (strPayload.equalsIgnoreCase("false")) + { + beepEnabled = false; + configSave(); + } + } + else if (strTopic == (mqttCommandTopic + "/ignoretouchwhenoff") || strTopic == (mqttGroupCommandTopic + "/ignoretouchwhenoff")) + { // '[...]/device/command/ignoretouchwhenoff' -m 'true' == disable actions on keypress + if (strPayload.equalsIgnoreCase("true")) + { + ignoreTouchWhenOff = true; + configSave(); + } + else if (strPayload.equalsIgnoreCase("false")) + { + ignoreTouchWhenOff = false; + configSave(); + } + } + else if (strTopic == (mqttCommandTopic + "/lcdupdate") || strTopic == (mqttGroupCommandTopic + "/lcdupdate")) + { // '[...]/device/command/lcdupdate' -m 'http://192.168.0.10/local/HASwitchPlate.tft' == nextionOtaStartDownload("http://192.168.0.10/local/HASwitchPlate.tft") + if (strPayload == "") + { + nextionOtaStartDownload(lcdFirmwareUrl); + } + else + { + nextionOtaStartDownload(strPayload); + } + } + else if (strTopic == (mqttCommandTopic + "/espupdate") || strTopic == (mqttGroupCommandTopic + "/espupdate")) + { // '[...]/device/command/espupdate' -m 'http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin' == espStartOta("http://192.168.0.10/local/HASwitchPlate.ino.d1_mini.bin") + if (strPayload == "") + { + espStartOta(espFirmwareUrl); + } + else + { + espStartOta(strPayload); + } + } + else if (strTopic == (mqttCommandTopic + "/reboot") || strTopic == (mqttGroupCommandTopic + "/reboot")) + { // '[...]/device/command/reboot' == reboot microcontroller + debugPrintln(F("MQTT: Rebooting device")); + espReset(); + } + else if (strTopic == (mqttCommandTopic + "/lcdreboot") || strTopic == (mqttGroupCommandTopic + "/lcdreboot")) + { // '[...]/device/command/lcdreboot' == reboot LCD panel + debugPrintln(F("MQTT: Rebooting LCD")); + nextionReset(); + } + else if (strTopic == (mqttCommandTopic + "/factoryreset") || strTopic == (mqttGroupCommandTopic + "/factoryreset")) + { // '[...]/device/command/factoryreset' == clear all saved settings + configClearSaved(); + } + else if (strTopic == (mqttCommandTopic + "/beep") || strTopic == (mqttGroupCommandTopic + "/beep")) + { // '[...]/device/command/beep' == activate beep function + String mqttvar1 = getSubtringField(strPayload, ',', 0); + String mqttvar2 = getSubtringField(strPayload, ',', 1); + String mqttvar3 = getSubtringField(strPayload, ',', 2); + + beepOnTime = mqttvar1.toInt(); + beepOffTime = mqttvar2.toInt(); + beepCounter = mqttvar3.toInt(); + } + else if (strTopic == (mqttCommandTopic + "/crashtest")) + { // '[...]/device/command/crashtest' -m 'divzero' == divide by zero + if (strPayload == "divzero") + { + debugPrintln(String(F("DEBUG: attempt to divide by zero"))); + int result, zero; + zero = 0; + result = 1 / zero; + debugPrintln(String(F("DEBUG: div zero result: ")) + String(result)); + } + else if (strPayload == "nullptr") + { // '[...]/device/command/crashtest' -m 'nullptr' == dereference a null pointer + debugPrintln(String(F("DEBUG: attempt to dereference null pointer"))); + int *nullPointer = NULL; + debugPrintln(String(F("DEBUG: dereference null pointer: ")) + String(*nullPointer)); + } + else if (strPayload == "wdt") + { // '[...]/device/command/crashtest' -m 'wdt' == trigger soft WDT + debugPrintln(String(F("DEBUG: enter tight loop and cause WDT"))); + while (true) + { + } + } + } + else if (strTopic.startsWith(mqttCommandTopic) && (strPayload == "")) + { // '[...]/device/command/p[1].b[4].txt' -m '' == nextionGetAttr("p[1].b[4].txt") + String subTopic = strTopic.substring(mqttCommandTopic.length() + 1); + mqttGetSubtopic = "/" + subTopic; + nextionGetAttr(subTopic); + } + else if (strTopic.startsWith(mqttGroupCommandTopic) && (strPayload == "")) + { // '[...]/group/command/p[1].b[4].txt' -m '' == nextionGetAttr("p[1].b[4].txt") + String subTopic = strTopic.substring(mqttGroupCommandTopic.length() + 1); + mqttGetSubtopic = "/" + subTopic; + nextionGetAttr(subTopic); + } + else if (strTopic.startsWith(mqttCommandTopic)) + { // '[...]/device/command/p[1].b[4].txt' -m '"Lights On"' == nextionSetAttr("p[1].b[4].txt", "\"Lights On\"") + String subTopic = strTopic.substring(mqttCommandTopic.length() + 1); + nextionSetAttr(subTopic, strPayload); + } + else if (strTopic.startsWith(mqttGroupCommandTopic)) + { // '[...]/group/command/p[1].b[4].txt' -m '"Lights On"' == nextionSetAttr("p[1].b[4].txt", "\"Lights On\"") + String subTopic = strTopic.substring(mqttGroupCommandTopic.length() + 1); + nextionSetAttr(subTopic, strPayload); + } + else if (strTopic == mqttLightBrightCommandTopic) + { // change the brightness from the light topic + nextionSetAttr("dim", strPayload); + nextionSetAttr("dims", "dim"); + lcdBacklightDim = strPayload.toInt(); + debugPrintln(String(F("MQTT OUT: '")) + mqttLightBrightStateTopic + String(F("' : '")) + strPayload + String(F("'"))); + mqttClient.publish(mqttLightBrightStateTopic, strPayload, true, 0); + } + else if (strTopic == mqttLightCommandTopic && strPayload == "OFF") + { // set the panel dim OFF from the light topic, saving current dim level first + nextionSetAttr("dims", "dim"); + nextionSetAttr("dim", "0"); + lcdBacklightOn = 0; + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'OFF'"))); + mqttClient.publish(mqttLightStateTopic, "OFF", true, 0); + } + else if (strTopic == mqttLightCommandTopic && strPayload == "ON") + { // set the panel dim ON from the light topic, restoring saved dim level + nextionSetAttr("dim", "dims"); + nextionSetAttr("sleep", "0"); + lcdBacklightOn = 1; + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'ON'"))); + mqttClient.publish(mqttLightStateTopic, "ON", true, 0); + } + else if (strTopic == mqttStatusTopic && strPayload == "OFF") + { // catch a dangling LWT from a previous connection if it appears + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'ON'"))); + mqttClient.publish(mqttStatusTopic, "ON", true, 0); + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event_type\":\"hasp_device\",\"event\":\"online\"}"))); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F(" : {\"event_type\":\"hasp_device\",\"event\":\"online\"}"))); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void mqttStatusUpdate() +{ // Periodically publish system status + String mqttSensorPayload = "{"; + mqttSensorPayload += String(F("\"espVersion\":")) + String(haspVersion) + String(F(",")); + if (updateEspAvailable) + { + mqttSensorPayload += String(F("\"updateEspAvailable\":true,")); + } + else + { + mqttSensorPayload += String(F("\"updateEspAvailable\":false,")); + } + if (lcdConnected) + { + mqttSensorPayload += String(F("\"lcdConnected\":true,")); + } + else + { + mqttSensorPayload += String(F("\"lcdConnected\":false,")); + } + mqttSensorPayload += String(F("\"lcdVersion\":\"")) + String(lcdVersion) + String(F("\",")); + if (updateLcdAvailable) + { + mqttSensorPayload += String(F("\"updateLcdAvailable\":true,")); + } + else + { + mqttSensorPayload += String(F("\"updateLcdAvailable\":false,")); + } + mqttSensorPayload += String(F("\"espUptime\":")) + String(long(millis() / 1000)) + String(F(",")); + mqttSensorPayload += String(F("\"signalStrength\":")) + String(WiFi.RSSI()) + String(F(",")); + mqttSensorPayload += String(F("\"haspName\":\"")) + String(haspNode) + String(F("\",")); + mqttSensorPayload += String(F("\"haspIP\":\"")) + WiFi.localIP().toString() + String(F("\",")); + mqttSensorPayload += String(F("\"haspClientID\":\"")) + mqttClientId + String(F("\",")); + mqttSensorPayload += String(F("\"haspMac\":\"")) + String(espMac[0], HEX) + String(F(":")) + String(espMac[1], HEX) + String(F(":")) + String(espMac[2], HEX) + String(F(":")) + String(espMac[3], HEX) + String(F(":")) + String(espMac[4], HEX) + String(F(":")) + String(espMac[5], HEX) + String(F("\",")); + mqttSensorPayload += String(F("\"haspManufacturer\":\"HASwitchPlate\",\"haspModel\":\"HASPone v1.0.0\",")); + mqttSensorPayload += String(F("\"heapFree\":")) + String(ESP.getFreeHeap()) + String(F(",")); + mqttSensorPayload += String(F("\"heapFragmentation\":")) + String(ESP.getHeapFragmentation()) + String(F(",")); + mqttSensorPayload += String(F("\"heapMaxFreeBlockSize\":")) + String(ESP.getMaxFreeBlockSize()) + String(F(",")); + mqttSensorPayload += String(F("\"espCore\":\"")) + String(ESP.getCoreVersion()) + String(F("\"")); + mqttSensorPayload += "}"; + + // Publish sensor JSON + mqttClient.publish(mqttSensorTopic, mqttSensorPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttSensorTopic + String(F("' : '")) + mqttSensorPayload + String(F("'"))); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void mqttDiscovery() +{ // Publish Home Assistant discovery messages + + String macAddress = String(espMac[0], HEX) + String(F(":")) + String(espMac[1], HEX) + String(F(":")) + String(espMac[2], HEX) + String(F(":")) + String(espMac[3], HEX) + String(F(":")) + String(espMac[4], HEX) + String(F(":")) + String(espMac[5], HEX); + + // light discovery for backlight + String mqttDiscoveryTopic = String(hassDiscovery) + String(F("/light/")) + String(haspNode) + String(F("/config")); + String mqttDiscoveryPayload = String(F("{\"name\":\"backlight\",\"object_id\":\"")) + String(haspNode) + String(F("_backlight\",\"command_topic\":\"")) + mqttLightCommandTopic + String(F("\",\"state_topic\":\"")) + mqttLightStateTopic + String(F("\",\"brightness_state_topic\":\"")) + mqttLightBrightStateTopic + String(F("\",\"brightness_command_topic\":\"")) + mqttLightBrightCommandTopic + String(F("\",\"availability_topic\":\"")) + mqttStatusTopic + String(F("\",\"brightness_scale\":100,\"unique_id\":\"")) + mqttClientId + String(F("-backlight\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"payload_available\":\"ON\",\"payload_not_available\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // sensor discovery for device telemetry + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/sensor/")) + String(haspNode) + String(F("/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"sensor\",\"object_id\":\"")) + String(haspNode) + String(F("_sensor\",\"json_attributes_topic\":\"")) + mqttSensorTopic + String(F("\",\"state_topic\":\"")) + mqttStatusTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("-sensor\",\"icon\":\"mdi:cellphone-text\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // number discovery for active page + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/number/")) + String(haspNode) + String(F("/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"active page\",\"object_id\":\"")) + String(haspNode) + String(F("_active_page\",\"command_topic\":\"")) + mqttCommandTopic + String(F("/page\",\"state_topic\":\"")) + mqttStateTopic + String(F("/page\",\"step\":1,\"min\":0,\"max\":")) + String(nextionMaxPages) + String(F(",\"retain\":true,\"optimistic\":true,\"icon\":\"mdi:page-next-outline\",\"unique_id\":\"")) + mqttClientId + String(F("-page\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // AlwaysOn topic for RGB lights + mqttClient.publish((String(F("hasp/")) + String(haspNode) + String(F("/alwayson"))), "ON", true, 1); + debugPrintln(String(F("MQTT OUT: 'hasp/")) + String(haspNode) + String(F("/alwayson' : 'ON'"))); + + // rgb light discovery for selectedforegroundcolor + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/light/")) + String(haspNode) + String(F("/selectedforegroundcolor/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"selected foreground color\",\"object_id\":\"")) + String(haspNode) + String(F("_selected_foreground_color\",\"command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/selectedforegroundcolor/switch\",\"state_topic\":\"hasp/")) + String(haspNode) + String(F("/alwayson\",\"rgb_command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/selectedforegroundcolor/rgb\",\"rgb_command_template\":\"{{(red|bitwise_and(248)*256)+(green|bitwise_and(252)*8)+(blue|bitwise_and(248)/8)|int }}\",\"retain\":true,\"unique_id\":\"")) + mqttClientId + String(F("-selectedforegroundcolor\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // rgb light discovery for selectedbackgroundcolor + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/light/")) + String(haspNode) + String(F("/selectedbackgroundcolor/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"selected background color\",\"object_id\":\"")) + String(haspNode) + String(F("_selected_background_color\",\"command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/selectedbackgroundcolor/switch\",\"state_topic\":\"hasp/")) + String(haspNode) + String(F("/alwayson\",\"rgb_command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/selectedbackgroundcolor/rgb\",\"rgb_command_template\":\"{{(red|bitwise_and(248)*256)+(green|bitwise_and(252)*8)+(blue|bitwise_and(248)/8)|int }}\",\"retain\":true,\"unique_id\":\"")) + mqttClientId + String(F("-selectedbackgroundcolor\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // rgb light discovery for unselectedforegroundcolor + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/light/")) + String(haspNode) + String(F("/unselectedforegroundcolor/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"unselected foreground color\",\"object_id\":\"")) + String(haspNode) + String(F("_unselected_foreground_color\",\"command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/unselectedforegroundcolor/switch\",\"state_topic\":\"hasp/")) + String(haspNode) + String(F("/alwayson\",\"rgb_command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/unselectedforegroundcolor/rgb\",\"rgb_command_template\":\"{{(red|bitwise_and(248)*256)+(green|bitwise_and(252)*8)+(blue|bitwise_and(248)/8)|int }}\",\"retain\":true,\"unique_id\":\"")) + mqttClientId + String(F("-unselectedforegroundcolor\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + // rgb light discovery for unselectedbackgroundcolor + mqttDiscoveryTopic = String(hassDiscovery) + String(F("/light/")) + String(haspNode) + String(F("/unselectedbackgroundcolor/config")); + mqttDiscoveryPayload = String(F("{\"name\":\"unselected background color\",\"object_id\":\"")) + String(haspNode) + String(F("_unselected_background_color\",\"command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/unselectedbackgroundcolor/switch\",\"state_topic\":\"hasp/")) + String(haspNode) + String(F("/alwayson\",\"rgb_command_topic\":\"hasp/")) + String(haspNode) + String(F("/light/unselectedbackgroundcolor/rgb\",\"rgb_command_template\":\"{{(red|bitwise_and(248)*256)+(green|bitwise_and(252)*8)+(blue|bitwise_and(248)/8)|int }}\",\"retain\":true,\"unique_id\":\"")) + mqttClientId + String(F("-unselectedbackgroundcolor\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + + if (motionEnabled) + { // binary_sensor for motion + String mqttDiscoveryTopic = String(hassDiscovery) + String(F("/binary_sensor/")) + String(haspNode) + String(F("-motion/config")); + String mqttDiscoveryPayload = String(F("{\"device_class\":\"motion\",\"name\":\"motion\",\"object_id\":\"")) + String(haspNode) + String(F("_motion\",\"state_topic\":\"")) + mqttMotionStateTopic + String(F("\",\"unique_id\":\"")) + mqttClientId + String(F("-motion\",\"payload_on\":\"ON\",\"payload_off\":\"OFF\",\"device\":{\"identifiers\":[\"")) + mqttClientId + String(F("\"],\"name\":\"")) + String(haspNode) + String(F("\",\"manufacturer\":\"HASwitchPlate\",\"model\":\"HASPone v1.0.0\",\"sw_version\":")) + String(haspVersion) + String(F("}}")); + mqttClient.publish(mqttDiscoveryTopic, mqttDiscoveryPayload, true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttDiscoveryTopic + String(F("' : '")) + String(mqttDiscoveryPayload) + String(F("'"))); + } + +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionHandleInput() +{ // Handle incoming serial data from the Nextion panel + // This will collect serial data from the panel and place it into the global buffer + // nextionReturnBuffer[nextionReturnIndex] + unsigned long handlerTimeout = millis() + 100; + bool nextionCommandComplete = false; + static uint8_t nextionTermByteCnt = 0; // counter for our 3 consecutive 0xFFs + + while (Serial.available() && !nextionCommandComplete && (millis() < handlerTimeout)) + { + byte nextionCommandByte = Serial.read(); + if (nextionCommandByte == 0xFF) + { // check to see if we have one of 3 consecutive 0xFF which indicates the end of a command + nextionTermByteCnt++; + if (nextionTermByteCnt >= 3) + { // We have received a complete command + lcdConnected = true; + nextionCommandComplete = true; + nextionTermByteCnt = 0; // reset counter + } + } + else + { + nextionTermByteCnt = 0; // reset counter if a non-term byte was encountered + } + nextionReturnBuffer[nextionReturnIndex] = nextionCommandByte; + nextionReturnIndex++; + if (nextionCommandComplete) + { + nextionAckReceived = true; + nextionProcessInput(); + } + yield(); + } + if (millis() > handlerTimeout) + { + debugPrintln(String(F("HMI ERROR: nextionHandleInput timeout"))); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionProcessInput() +{ // Process complete incoming serial command from the Nextion panel + // Command reference: https://www.itead.cc/wiki/Nextion_Instruction_Set#Format_of_Device_Return_Data + // tl;dr: command byte, command data, 0xFF 0xFF 0xFF + + if (nextionReturnBuffer[0] == 0x01) + { // Instruction Successful - quietly ignore this as it will be returned after every command issued, + // and processing it + spitting out serial output is a huge drag on performance if serial debug is enabled. + + // debugPrintln(String(F("HMI IN: [Instruction Successful] 0x")) + String(nextionReturnBuffer[0], HEX)); + // if (mqttClient.connected()) + // { + // String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Instruction Successful\"}")); + // mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + // debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + // } + nextionReturnIndex = 0; // Done handling the buffer, reset index back to 0 + return; // skip the rest of the tests below and return immediately + } + + debugPrintln(String(F("HMI IN: [")) + String(nextionReturnIndex) + String(F(" bytes]: ")) + printHex8(nextionReturnBuffer, nextionReturnIndex)); + + if (nextionReturnBuffer[0] == 0x00 && nextionReturnBuffer[1] == 0x00 && nextionReturnBuffer[2] == 0x00) + { // Nextion Startup + debugPrintln(String(F("HMI IN: [Nextion Startup] 0x00 0x00 0x00"))); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x00 0x00 0x00\",\"return_code_description\":\"Nextion Startup\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x00) + { // Invalid Instruction + debugPrintln(String(F("HMI IN: [Invalid Instruction] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Instruction\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x02) + { // Invalid Component ID + debugPrintln(String(F("HMI IN: [Invalid Component ID] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Component ID\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x03) + { // Invalid Page ID + debugPrintln(String(F("HMI IN: [Invalid Page ID] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Page ID\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x04) + { // Invalid Picture ID + debugPrintln(String(F("HMI IN: [Invalid Picture ID] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Picture ID\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x05) + { // Invalid Font ID + debugPrintln(String(F("HMI IN: [Invalid Font ID ] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Font ID \"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x06) + { // Invalid File Operation + debugPrintln(String(F("HMI IN: [Invalid File Operation] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid File Operation\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x09) + { // Invalid CRC + debugPrintln(String(F("HMI IN: [Invalid CRC] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid CRC\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x11) + { // Invalid Baud rate Setting + debugPrintln(String(F("HMI IN: [Invalid Baud rate Setting] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Baud rate Setting\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x12) + { // Invalid Waveform ID or Channel # + debugPrintln(String(F("HMI IN: [Invalid Waveform ID or Channel #] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Waveform ID or Channel #\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1A) + { // Invalid Variable name or attribute + debugPrintln(String(F("HMI IN: [Invalid Variable name or attribute] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Variable name or attribute\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1B) + { // Invalid Variable Operation + debugPrintln(String(F("HMI IN: [Invalid Variable Operation] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Variable Operation\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1C) + { // Assignment failed to assign + debugPrintln(String(F("HMI IN: [Assignment failed to assign] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Assignment failed to assign\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1D) + { // EEPROM Operation failed + debugPrintln(String(F("HMI IN: [EEPROM Operation failed] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"EEPROM Operation failed\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1E) + { // Invalid Quantity of Parameters + debugPrintln(String(F("HMI IN: [Invalid Quantity of Parameters] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Invalid Quantity of Parameters\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x1F) + { // IO Operation failed + debugPrintln(String(F("HMI IN: [IO Operation failed] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"IO Operation failed\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x20) + { // Escape Character Invalid + debugPrintln(String(F("HMI IN: [Escape Character Invalid] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Escape Character Invalid\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x23) + { // Variable name too long + debugPrintln(String(F("HMI IN: [Variable name too long] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Variable name too long\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x24) + { // Serial Buffer Overflow + debugPrintln(String(F("HMI IN: [Serial Buffer Overflow] 0x")) + String(nextionReturnBuffer[0], HEX)); + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"nextion_return_data\",\"return_code\":\"0x")) + String(nextionReturnBuffer[0], HEX) + String(F("\",\"return_code_description\":\"Serial Buffer Overflow\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + + else if (nextionReturnBuffer[0] == 0x65) + { // Handle incoming touch command + // 0x65+Page ID+Component ID+TouchEvent+End + // Return this data when the touch event created by the user is pressed. + // Definition of TouchEvent: Press Event 0x01, Release Event 0X00 + // Example: 0x65 0x00 0x02 0x01 0xFF 0xFF 0xFF + // Meaning: Touch Event, Page 0, Object 2, Press + String nextionPage = String(nextionReturnBuffer[1]); + String nextionButtonID = String(nextionReturnBuffer[2]); + byte nextionButtonAction = nextionReturnBuffer[3]; + + if (nextionButtonAction == 0x01) + { + debugPrintln(String(F("HMI IN: [Button ON] 'p[")) + nextionPage + "].b[" + nextionButtonID + "]'"); + if (mqttClient.connected()) + { + // Only process touch events if screen backlight is on and configured to do so. + if (ignoreTouchWhenOff && !lcdBacklightOn) + { + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_press_disabled\",\"event\":\"p[")) + nextionPage + String(F("].b[")) + nextionButtonID + String(F("]\",\"value\":\"ON\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + else + { + String mqttButtonTopic = mqttStateTopic + "/p[" + nextionPage + "].b[" + nextionButtonID + "]"; + mqttClient.publish(mqttButtonTopic, "ON"); + debugPrintln(String(F("MQTT OUT: '")) + mqttButtonTopic + "' : 'ON'"); + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_short_press\",\"event\":\"p[")) + nextionPage + String(F("].b[")) + nextionButtonID + String(F("]\",\"value\":\"ON\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + if (beepEnabled) + { + beepOnTime = 500; + beepOffTime = 100; + beepCounter = 1; + } + if (rebootOnp0b1 && (nextionPage == "0") && (nextionButtonID == "1")) + { + debugPrintln(String(F("HMI IN: p[0].b[1] pressed during HASPone configuration, rebooting."))); + espReset(); + } + if (rebootOnLongPress) + { + rebootOnLongPressTimer = millis(); + } + } + else if (nextionButtonAction == 0x00) + { + debugPrintln(String(F("HMI IN: [Button OFF] 'p[")) + nextionPage + "].b[" + nextionButtonID + "]'"); + if (mqttClient.connected()) + { + // Only process touch events if screen backlight is on and configured to do so. + if (ignoreTouchWhenOff && !lcdBacklightOn) + { + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_release_disabled\",\"event\":\"p[")) + nextionPage + String(F("].b[")) + nextionButtonID + String(F("]\",\"value\":\"ON\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + else + { + String mqttButtonTopic = mqttStateTopic + "/p[" + nextionPage + "].b[" + nextionButtonID + "]"; + mqttClient.publish(mqttButtonTopic, "OFF"); + debugPrintln(String(F("MQTT OUT: '")) + mqttButtonTopic + "' : 'OFF'"); + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_short_release\",\"event\":\"p[")) + nextionPage + String(F("].b[")) + nextionButtonID + String(F("]\",\"value\":\"OFF\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + // Now see if this object has a .val that might have been updated. Works for sliders, + // two-state buttons, etc, returns 0 for normal buttons + mqttGetSubtopic = "/p[" + nextionPage + "].b[" + nextionButtonID + "].val"; + // This right here is dicey. We're done w/ this command so reset the index allowing this to be kinda-reentrant + // because the call to nextionGetAttr is going to call us back. + nextionReturnIndex = 0; + nextionGetAttr("p[" + nextionPage + "].b[" + nextionButtonID + "].val"); + } + } + if (rebootOnLongPress && (millis() - rebootOnLongPressTimer > rebootOnLongPressTimeout)) + { + debugPrintln(String(F("HMI IN: Button long press, rebooting."))); + espReset(); + } + rebootOnLongPressTimer = millis(); + } + } + else if (nextionReturnBuffer[0] == 0x66) + { // Handle incoming "sendme" page number + // 0x66+PageNum+End + // Example: 0x66 0x02 0xFF 0xFF 0xFF + // Meaning: page 2 + String nextionPage = String(nextionReturnBuffer[1]); + debugPrintln(String(F("HMI IN: [sendme Page] '")) + nextionPage + String(F("'"))); + if ((nextionPage != "0") || nextionReportPage0) + { // If we have a new page AND ( (it's not "0") OR (we've set the flag to report 0 anyway) ) + + if (mqttClient.connected()) + { + String mqttButtonJSONEvent = String(F("{\"event\":\"page\",\"value\":")) + nextionPage + String(F("}")); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + String mqttPageTopic = mqttStateTopic + "/page"; + debugPrintln(String(F("MQTT OUT: '")) + mqttPageTopic + String(F("' : '")) + nextionPage + String(F("'"))); + mqttClient.publish(mqttPageTopic, nextionPage, false, 0); + } + } + } + else if (nextionReturnBuffer[0] == 0x67 || nextionReturnBuffer[0] == 0x68) + { // Handle touch coordinate data + // 0X67+Coordinate X High+Coordinate X Low+Coordinate Y High+Coordinate Y Low+TouchEvent+End + // Example: 0X67 0X00 0X7A 0X00 0X1E 0X01 0XFF 0XFF 0XFF + // Meaning: Coordinate (122,30), Touch Event: Press + // issue Nextion command "sendxy=1" to enable this output + // 0x68 is the same, but returned when the screen touch has awakened the screen from sleep + uint16_t xCoord = nextionReturnBuffer[1]; + xCoord = xCoord * 256 + nextionReturnBuffer[2]; + uint16_t yCoord = nextionReturnBuffer[3]; + yCoord = yCoord * 256 + nextionReturnBuffer[4]; + String xyCoord = String(xCoord) + String(',') + String(yCoord); + byte nextionTouchAction = nextionReturnBuffer[5]; + if (nextionTouchAction == 0x01) + { + debugPrintln(String(F("HMI IN: [Touch ON] '")) + xyCoord + String(F("'"))); + if (mqttClient.connected()) + { + String mqttTouchTopic = mqttStateTopic + "/touchOn"; + mqttClient.publish(mqttTouchTopic, xyCoord); + debugPrintln(String(F("MQTT OUT: '")) + mqttTouchTopic + String(F("' : '")) + xyCoord + String(F("'"))); + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_short_press\",\"event\":\"touchxy\",\"touch_event\":\"ON\",\"touchx\":\"")) + String(xCoord) + String(F("\",\"touchy\":\"")) + String(yCoord) + String(F("\",\"screen_state\":\"")); + if (nextionReturnBuffer[0] == 0x67) + { + mqttButtonJSONEvent += "awake\"}"; + } + else + { + mqttButtonJSONEvent += "asleep\"}"; + } + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionTouchAction == 0x00) + { + debugPrintln(String(F("HMI IN: [Touch OFF] '")) + xyCoord + String(F("'"))); + if (mqttClient.connected()) + { + String mqttTouchTopic = mqttStateTopic + "/touchOff"; + mqttClient.publish(mqttTouchTopic, xyCoord); + debugPrintln(String(F("MQTT OUT: '")) + mqttTouchTopic + String(F("' : '")) + xyCoord + String(F("'"))); + String mqttButtonJSONEvent = String(F("{\"event_type\":\"button_short_press\",\"event\":\"touchxy\",\"touch_event\":\"OFF\",\"touchx\":\"")) + String(xCoord) + String(F("\",\"touchy\":\"")) + String(yCoord) + String(F("\",\"screen_state\":\"")); + if (nextionReturnBuffer[0] == 0x67) + { + mqttButtonJSONEvent += "awake\"}"; + } + else + { + mqttButtonJSONEvent += "asleep\"}"; + } + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + } + else if (nextionReturnBuffer[0] == 0x70) + { // Handle get string return + // 0x70+ASCII string+End + // Example: 0x70 0x41 0x42 0x43 0x44 0x31 0x32 0x33 0x34 0xFF 0xFF 0xFF + // Meaning: String data, ABCD1234 + String getString; + for (int i = 1; i < nextionReturnIndex - 3; i++) + { // convert the payload into a string + getString += (char)nextionReturnBuffer[i]; + } + debugPrintln(String(F("HMI IN: [String Return] '")) + getString + String(F("'"))); + if (mqttClient.connected()) + { + if (mqttGetSubtopic == "") + { // If there's no outstanding request for a value, publish to mqttStateTopic + mqttClient.publish(mqttStateTopic, getString); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateTopic + String(F("' : '")) + getString + String(F("'"))); + } + else + { // Otherwise, publish the to saved mqttGetSubtopic and then reset mqttGetSubtopic + String mqttReturnTopic = mqttStateTopic + mqttGetSubtopic; + mqttClient.publish(mqttReturnTopic, getString); + debugPrintln(String(F("MQTT OUT: '")) + mqttReturnTopic + String(F("' : '")) + getString + String(F("'"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"")) + mqttGetSubtopic.substring(1) + String(F("\",\"value\":\"")) + getString + String(F("\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + mqttGetSubtopic = ""; + } + } + } + else if (nextionReturnBuffer[0] == 0x71) + { // Handle get int return + // 0x71+byte1+byte2+byte3+byte4+End (4 byte little endian) + // Example: 0x71 0x7B 0x00 0x00 0x00 0xFF 0xFF 0xFF + // Meaning: Integer data, 123 + long getInt = nextionReturnBuffer[4]; + getInt = getInt * 256 + nextionReturnBuffer[3]; + getInt = getInt * 256 + nextionReturnBuffer[2]; + getInt = getInt * 256 + nextionReturnBuffer[1]; + String getString = String(getInt); + debugPrintln(String(F("HMI IN: [Int Return] '")) + getString + String(F("'"))); + + if (lcdVersionQueryFlag) + { + lcdVersion = getInt; + lcdVersionQueryFlag = false; + debugPrintln(String(F("HMI IN: lcdVersion '")) + String(lcdVersion) + String(F("'"))); + } + else if (lcdBacklightQueryFlag) + { + lcdBacklightDim = getInt; + lcdBacklightQueryFlag = false; + if (lcdBacklightDim > 0) + { + lcdBacklightOn = 1; + } + else + { + lcdBacklightOn = 0; + } + debugPrintln(String(F("HMI IN: lcdBacklightDim '")) + String(lcdBacklightDim) + String(F("'"))); + } + else if (mqttGetSubtopic == "") + { + if (mqttClient.connected()) + { + mqttClient.publish(mqttStateTopic, getString); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateTopic + String(F("' : '")) + getString + String(F("'"))); + } + } + // Otherwise, publish the to saved mqttGetSubtopic and then reset mqttGetSubtopic + else + { + if (mqttClient.connected()) + { + String mqttReturnTopic = mqttStateTopic + mqttGetSubtopic; + mqttClient.publish(mqttReturnTopic, getString); + debugPrintln(String(F("MQTT OUT: '")) + mqttReturnTopic + String(F("' : '")) + getString + String(F("'"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"")) + mqttGetSubtopic.substring(1) + String(F("\",\"value\":")) + getString + String(F("}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + mqttGetSubtopic = ""; + } + } + else if (nextionReturnBuffer[0] == 0x63 && nextionReturnBuffer[1] == 0x6f && nextionReturnBuffer[2] == 0x6d && nextionReturnBuffer[3] == 0x6f && nextionReturnBuffer[4] == 0x6b) + { // Catch 'comok' response to 'connect' command: https://www.itead.cc/blog/nextion-hmi-upload-protocol + String comokField; + uint8_t comokFieldCount = 0; + byte comokFieldSeperator = 0x2c; // "," + + for (uint8_t i = 0; i <= nextionReturnIndex; i++) + { // cycle through each byte looking for our field seperator + if (nextionReturnBuffer[i] == comokFieldSeperator) + { // Found the end of a field, so do something with it. Maybe. + if (comokFieldCount == 2) + { + nextionModel = comokField; + debugPrintln(String(F("HMI IN: nextionModel: ")) + nextionModel); + } + comokFieldCount++; + comokField = ""; + } + else + { + comokField += String(char(nextionReturnBuffer[i])); + } + } + } + else if (nextionReturnBuffer[0] == 0x86) + { // Returned when Nextion enters sleep automatically. Using sleep=1 will not return an 0x86 + // 0x86+End + if (mqttClient.connected()) + { + lcdBacklightOn = 0; + mqttClient.publish(mqttLightStateTopic, "OFF", true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'OFF'"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"sleep\",\"value\":\"ON\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x87) + { // Returned when Nextion leaves sleep automatically. Using sleep=0 will not return an 0x87 + // 0x87+End + if (mqttClient.connected()) + { + lcdBacklightOn = 1; + mqttClient.publish(mqttLightStateTopic, "ON", true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttLightStateTopic + String(F("' : 'ON'"))); + mqttClient.publish(mqttLightBrightStateTopic, String(lcdBacklightDim), true, 1); + debugPrintln(String(F("MQTT OUT: '")) + mqttLightBrightStateTopic + String(F("' : ")) + String(lcdBacklightDim)); + String mqttButtonJSONEvent = String(F("{\"event\":\"sleep\",\"value\":\"OFF\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else if (nextionReturnBuffer[0] == 0x88) + { // Returned when Nextion powers on + // 0x88+End + debugPrintln(F("HMI: Nextion panel connected.")); + } + nextionReturnIndex = 0; // Done handling the buffer, reset index back to 0 +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionSendCmd(const String &nextionCmd) +{ // Send a raw command to the Nextion panel + Serial1.print(nextionCmd); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + debugPrintln(String(F("HMI OUT: ")) + nextionCmd); + + if (nextionAckEnable) + { + nextionAckReceived = false; + nextionAckTimer = millis(); + + while ((!nextionAckReceived) && (millis() - nextionAckTimer < nextionAckTimeout)) + { + nextionHandleInput(); + } + if (!nextionAckReceived) + { + debugPrintln(String(F("HMI ERROR: Nextion Ack timeout"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"nextionError\",\"value\":\"Nextion Ack timeout\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else + { + nextionHandleInput(); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionSetAttr(const String &hmiAttribute, const String &hmiValue) +{ // Set the value of a Nextion component attribute + Serial1.print(hmiAttribute); + Serial1.print("="); + Serial1.print(hmiValue); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + debugPrintln(String(F("HMI OUT: '")) + hmiAttribute + "=" + hmiValue + String(F("'"))); + if (nextionAckEnable) + { + nextionAckReceived = false; + nextionAckTimer = millis(); + + while ((!nextionAckReceived) || (millis() - nextionAckTimer > nextionAckTimeout)) + { + nextionHandleInput(); + } + if (!nextionAckReceived) + { + debugPrintln(String(F("HMI ERROR: Nextion Ack timeout"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"nextionError\",\"value\":\"Nextion Ack timeout\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else + { + nextionHandleInput(); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionGetAttr(const String &hmiAttribute) +{ // Get the value of a Nextion component attribute + // This will only send the command to the panel requesting the attribute, the actual + // return of that value will be handled by nextionProcessInput and placed into mqttGetSubtopic + Serial1.print("get "); + Serial1.print(hmiAttribute); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + debugPrintln(String(F("HMI OUT: 'get ")) + hmiAttribute + String(F("'"))); + if (nextionAckEnable) + { + nextionAckReceived = false; + nextionAckTimer = millis(); + + while ((!nextionAckReceived) || (millis() - nextionAckTimer > nextionAckTimeout)) + { + nextionHandleInput(); + } + if (!nextionAckReceived) + { + debugPrintln(String(F("HMI ERROR: Nextion Ack timeout"))); + String mqttButtonJSONEvent = String(F("{\"event\":\"nextionError\",\"value\":\"Nextion Ack timeout\"}")); + mqttClient.publish(mqttStateJSONTopic, mqttButtonJSONEvent); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F("' : '")) + mqttButtonJSONEvent + String(F("'"))); + } + } + else + { + nextionHandleInput(); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionParseJson(const String &strPayload) +{ // Parse an incoming JSON array into individual Nextion commands + DynamicJsonDocument nextionCommands(mqttMaxPacketSize + 1024); + DeserializationError jsonError = deserializeJson(nextionCommands, strPayload); + + if (jsonError) + { // Couldn't parse incoming JSON command + String jsonErrorDescription = String(F("Failed to parse incoming JSON command with error:")) + String(jsonError.c_str()) + String(F(" memoryUsage: ")) + String(nextionCommands.memoryUsage()) + String(F(" capacity: ")) + String(nextionCommands.capacity()); + debugPrintln(String(F("MQTT: [ERROR] ")) + jsonErrorDescription); + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event\":\"jsonError\",\"event_source\":\"nextionParseJson()\",\"event_description\":\"")) + jsonErrorDescription + String(F("\"}"))); + } + else + { + for (uint8_t i = 0; i < nextionCommands.size(); i++) + { + nextionSendCmd(nextionCommands[i]); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionOtaStartDownload(const String &lcdOtaUrl) +{ // Upload firmware to the Nextion LCD via HTTP download + + uint32_t lcdOtaFileSize = 0; + String lcdOtaNextionCmd; + uint32_t lcdOtaChunkCounter = 0; + uint16_t lcdOtaPartNum = 0; + uint32_t lcdOtaTransferred = 0; + uint8_t lcdOtaPercentComplete = 0; + const uint32_t lcdOtaTimeout = 30000; // timeout for receiving new data in milliseconds + static uint32_t lcdOtaTimer = 0; // timer for lcdOtaTimeout + + HTTPClient lcdOtaHttp; + WiFiClientSecure lcdOtaWifiSecure; + WiFiClient lcdOtaWifi; + if (lcdOtaUrl.startsWith(F("https"))) + { + debugPrintln("LCDOTA: Attempting firmware update from HTTPS host: " + lcdOtaUrl); + + lcdOtaHttp.begin(lcdOtaWifiSecure, lcdOtaUrl); + lcdOtaWifiSecure.setInsecure(); + lcdOtaWifiSecure.setBufferSizes(512, 512); + } + else + { + debugPrintln("LCDOTA: Attempting firmware update from HTTP host: " + lcdOtaUrl); + lcdOtaHttp.begin(lcdOtaWifi, lcdOtaUrl); + } + + int lcdOtaHttpReturn = lcdOtaHttp.GET(); + if (lcdOtaHttpReturn > 0) + { // HTTP header has been sent and Server response header has been handled + debugPrintln(String(F("LCDOTA: HTTP GET return code:")) + String(lcdOtaHttpReturn)); + if (lcdOtaHttpReturn == HTTP_CODE_OK) + { // file found at server + int32_t lcdOtaRemaining = lcdOtaHttp.getSize(); // get length of document (is -1 when Server sends no Content-Length header) + lcdOtaFileSize = lcdOtaRemaining; + static uint16_t lcdOtaParts = (lcdOtaRemaining / 4096) + 1; + static const uint16_t lcdOtaBufferSize = 1024; // upload data buffer before sending to UART + static uint8_t lcdOtaBuffer[lcdOtaBufferSize] = {}; + + debugPrintln(String(F("LCDOTA: File found at Server. Size ")) + String(lcdOtaRemaining) + String(F(" bytes in ")) + String(lcdOtaParts) + String(F(" 4k chunks."))); + + WiFiUDP::stopAll(); // Keep mDNS responder and MQTT traffic from breaking things + if (mqttClient.connected()) + { + debugPrintln(F("LCDOTA: LCD firmware upload starting, closing MQTT connection.")); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); + mqttClient.disconnect(); + } + + WiFiClient *stream = lcdOtaHttp.getStreamPtr(); // get tcp stream + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); // Send empty command + Serial1.flush(); + nextionHandleInput(); + String lcdOtaNextionCmd = "whmi-wri " + String(lcdOtaFileSize) + "," + String(nextionBaud) + ",0"; + debugPrintln(String(F("LCDOTA: Sending LCD upload command: ")) + lcdOtaNextionCmd); + Serial1.print(lcdOtaNextionCmd); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + + if (nextionOtaResponse()) + { + debugPrintln(F("LCDOTA: LCD upload command accepted.")); + } + else + { + debugPrintln(F("LCDOTA: LCD upload command FAILED. Restarting device.")); + espReset(); + } + debugPrintln(F("LCDOTA: Starting update")); + lcdOtaTimer = millis(); + while (lcdOtaHttp.connected() && (lcdOtaRemaining > 0 || lcdOtaRemaining == -1)) + { // Write incoming data to panel as it arrives + uint16_t lcdOtaHttpSize = stream->available(); // get available data size + + if (lcdOtaHttpSize) + { + uint16_t lcdOtaChunkSize = 0; + if ((lcdOtaHttpSize <= lcdOtaBufferSize) && (lcdOtaHttpSize <= (4096 - lcdOtaChunkCounter))) + { + lcdOtaChunkSize = lcdOtaHttpSize; + } + else if ((lcdOtaBufferSize <= lcdOtaHttpSize) && (lcdOtaBufferSize <= (4096 - lcdOtaChunkCounter))) + { + lcdOtaChunkSize = lcdOtaBufferSize; + } + else + { + lcdOtaChunkSize = 4096 - lcdOtaChunkCounter; + } + stream->readBytes(lcdOtaBuffer, lcdOtaChunkSize); + Serial1.flush(); // make sure any previous writes the UART have completed + Serial1.write(lcdOtaBuffer, lcdOtaChunkSize); // now send buffer to the UART + lcdOtaChunkCounter += lcdOtaChunkSize; + if (lcdOtaChunkCounter >= 4096) + { + Serial1.flush(); + lcdOtaPartNum++; + lcdOtaTransferred += lcdOtaChunkCounter; + lcdOtaPercentComplete = (lcdOtaTransferred * 100) / lcdOtaFileSize; + lcdOtaChunkCounter = 0; + if (nextionOtaResponse()) + { // We've completed a chunk + debugPrintln(String(F("LCDOTA: Part ")) + String(lcdOtaPartNum) + String(F(" OK, ")) + String(lcdOtaPercentComplete) + String(F("% complete"))); + lcdOtaTimer = millis(); + } + else + { + debugPrintln(String(F("LCDOTA: Part ")) + String(lcdOtaPartNum) + String(F(" FAILED, ")) + String(lcdOtaPercentComplete) + String(F("% complete"))); + debugPrintln(F("LCDOTA: failure")); + delay(2000); // extra delay while the LCD does its thing + espReset(); + } + } + else + { + delay(20); + } + if (lcdOtaRemaining > 0) + { + lcdOtaRemaining -= lcdOtaChunkSize; + } + } + delay(10); + if ((lcdOtaTimer > 0) && ((millis() - lcdOtaTimer) > lcdOtaTimeout)) + { // Our timer expired so reset + debugPrintln(F("LCDOTA: ERROR: LCD upload timeout. Restarting.")); + espReset(); + } + } + lcdOtaPartNum++; + lcdOtaTransferred += lcdOtaChunkCounter; + if ((lcdOtaTransferred == lcdOtaFileSize) && nextionOtaResponse()) + { + debugPrintln(String(F("LCDOTA: Success, wrote ")) + String(lcdOtaTransferred) + String(F(" of ")) + String(tftFileSize) + String(F(" bytes."))); + uint32_t lcdOtaDelay = millis(); + debugPrintln(F("LCDOTA: Waiting 5 seconds to allow LCD to apply updates we've sent.")); + while ((millis() - lcdOtaDelay) < 5000) + { // extra 5sec delay while the LCD handles any local firmware updates from new versions of code sent to it + webServer.handleClient(); + yield(); + } + espReset(); + } + else + { + debugPrintln(String(F("LCDOTA: Failure, lcdOtaTransferred: ")) + String(lcdOtaTransferred) + String(F(" lcdOtaFileSize: ")) + String(lcdOtaFileSize)); + espReset(); + } + } + } + else + { + debugPrintln(String(F("LCDOTA: HTTP GET failed, error code ")) + lcdOtaHttp.errorToString(lcdOtaHttpReturn)); + espReset(); + } + lcdOtaHttp.end(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +bool nextionOtaResponse() +{ // Monitor the serial port for a 0x05 response within our timeout + unsigned long nextionCommandTimeout = 2000; // timeout for receiving termination string in milliseconds + unsigned long nextionCommandTimer = millis(); // record current time for our timeout + bool otaSuccessVal = false; + while ((millis() - nextionCommandTimer) < nextionCommandTimeout) + { + if (Serial.available()) + { + byte inByte = Serial.read(); + if (inByte == 0x5) + { + otaSuccessVal = true; + break; + } + } + else + { + delay(1); + } + } + return otaSuccessVal; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +bool nextionConnect() +{ + const unsigned long nextionCheckTimeout = 2000; // Max time in msec for nextion connection check + unsigned long nextionCheckTimer = millis(); // Timer for nextion connection checks + + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + + if (!lcdConnected) + { // Check for some traffic from our LCD + debugPrintln(F("HMI: Waiting for LCD connection")); + while (((millis() - nextionCheckTimer) <= nextionCheckTimeout) && !lcdConnected) + { + nextionHandleInput(); + } + } + if (!lcdConnected) + { // No response from the display using the configured speed, so scan all possible speeds + nextionSetSpeed(); + + nextionCheckTimer = millis(); // Reset our timer + debugPrintln(F("HMI: Waiting again for LCD connection")); + while (((millis() - nextionCheckTimer) <= nextionCheckTimeout) && !lcdConnected) + { + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + nextionHandleInput(); + } + if (!lcdConnected) + { + debugPrintln(F("HMI: LCD connection timed out")); + return false; + } + } + + // Query backlight status. This should always succeed under simulation or non-HASPone HMI + lcdBacklightQueryFlag = true; + debugPrintln(F("HMI: Querying LCD backlight status")); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + nextionSendCmd("get dim"); + while (((millis() - nextionCheckTimer) <= nextionCheckTimeout) && lcdBacklightQueryFlag) + { + nextionHandleInput(); + } + if (lcdBacklightQueryFlag) + { // Our flag is still set, meaning we never got a response. + debugPrintln(F("HMI: LCD backlight query timed out")); + lcdBacklightQueryFlag = false; + return false; + } + + // We are now communicating with the panel successfully. Enable ACK checking for all future commands. + nextionAckEnable = true; + nextionSendCmd("bkcmd=3"); + + // This check depends on the HMI having been designed with a version number in the object + // defined in lcdVersionQuery. It's OK if this fails, it just means the HMI project is + // not utilizing the version capability that the HASPone project makes use of. + lcdVersionQueryFlag = true; + debugPrintln(F("HMI: Querying LCD firmware version number")); + nextionSendCmd("get " + lcdVersionQuery); + while (((millis() - nextionCheckTimer) <= nextionCheckTimeout) && lcdVersionQueryFlag) + { + nextionHandleInput(); + } + if (lcdVersionQueryFlag) + { // Our flag is still set, meaning we never got a response. This should only happen if + // there's a problem. Non-HASPone projects should pass this check with lcdVersion = 0 + debugPrintln(F("HMI: LCD version query timed out")); + lcdVersionQueryFlag = false; + return false; + } + + if (nextionModel.length() == 0) + { // Check for LCD model via `connect`. The Nextion simulator does not support this command, + // so if we're running under that environment this process should timeout. + debugPrintln(F("HMI: Querying LCD model information")); + nextionSendCmd("connect"); + while (((millis() - nextionCheckTimer) <= nextionCheckTimeout) && (nextionModel.length() == 0)) + { + nextionHandleInput(); + } + } + return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionSetSpeed() +{ + debugPrintln(String(F("HMI: No Nextion response, attempting to set serial speed to ")) + String(nextionBaud)); + for (unsigned int nextionSpeedsIndex = 0; nextionSpeedsIndex < nextionSpeedsLength; nextionSpeedsIndex++) + { + debugPrintln(String(F("HMI: Sending bauds=")) + String(nextionBaud) + " @" + String(nextionSpeeds[nextionSpeedsIndex]) + " baud"); + Serial1.flush(); + Serial1.begin(nextionSpeeds[nextionSpeedsIndex]); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.print("bauds=" + String(nextionBaud)); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + } + Serial1.begin(atoi(nextionBaud)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionReset() +{ + debugPrintln(F("HMI: Rebooting LCD")); + digitalWrite(nextionResetPin, LOW); + Serial1.print("rest"); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + delay(100); + digitalWrite(nextionResetPin, HIGH); + + unsigned long lcdResetTimer = millis(); + const unsigned long lcdResetTimeout = 5000; + + lcdConnected = false; + while (!lcdConnected && (millis() < (lcdResetTimer + lcdResetTimeout))) + { + nextionHandleInput(); + } + if (lcdConnected) + { + debugPrintln(F("HMI: Rebooting LCD completed")); + if (nextionActivePage) + { + nextionSendCmd("page " + String(nextionActivePage)); + } + } + else + { + debugPrintln(F("ERROR: Rebooting LCD completed, but LCD is not responding.")); + } + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void nextionUpdateProgress(const unsigned int &progress, const unsigned int &total) +{ + uint8_t progressPercent = (float(progress) / float(total)) * 100; + nextionSetAttr("p[0].b[4].val", String(progressPercent)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espWifiConnect() +{ // Connect to WiFi + rebootOnp0b1 = true; + + nextionSetAttr("p[0].b[1].font", "6"); + if (lcdVersion < 1 || lcdVersion > 2) + { + nextionSendCmd("page 0"); + } + + WiFi.persistent(false); + enableWiFiAtBootTime(); + WiFi.macAddress(espMac); // Read our MAC address and save it to espMac + WiFi.hostname(haspNode); // Assign our hostname before connecting to WiFi + WiFi.setAutoReconnect(true); // Tell WiFi to autoreconnect if connection has dropped + WiFi.setSleepMode(WIFI_NONE_SLEEP); // Disable WiFi sleep modes to prevent occasional disconnects + WiFi.mode(WIFI_STA); // Set the radio to Station + + if (String(wifiSSID) == "") + { // If the sketch has no hard-coded wifiSSID, attempt to use saved creds or use WiFiManager to collect required information from the user. + + // First, check if we have saved wifi creds and try to connect manually. + if (WiFi.SSID() != "") + { + nextionSetAttr("p[0].b[1].txt", "\"WiFi Connecting...\\r " + String(WiFi.SSID()) + "\""); + unsigned long connectTimer = millis() + 10000; + + debugPrintln(String(F("WIFI: Connecting to previously-saved SSID: ")) + String(WiFi.SSID())); + + WiFi.begin(); + while ((WiFi.status() != WL_CONNECTED) && (millis() < connectTimer)) + { + yield(); + } + + unsigned int connectCounter = 0; + unsigned int connectRetries = 4; + unsigned int connectTime = 10000; + while ((WiFi.status() != WL_CONNECTED) && (connectCounter <= connectRetries)) + { + connectCounter++; + debugPrintln(String(F("WIFI: Connect failed, retry attempt ")) + String(connectCounter)); + WiFi.mode(WIFI_OFF); // Force the radio off, and then + delay(100); + WiFi.mode(WIFI_STA); // toggle it back on again + connectTimer = millis() + connectTime; + WiFi.begin(); + while ((WiFi.status() != WL_CONNECTED) && (millis() < connectTimer)) + { + yield(); + } + + if (WiFi.localIP().toString() == "(IP unset)") + { // Check if we have our IP yet + debugPrintln(F("WIFI: Failed to lease address from DHCP, disconnecting and trying again")); + WiFi.disconnect(); + } + } + } + + if (WiFi.status() != WL_CONNECTED) + { // We gave it a shot, still couldn't connect, so let WiFiManager run to make one last + // connection attempt and then flip to AP mode to collect credentials from the user. + WiFi.persistent(true); + WiFiManagerParameter custom_haspNodeHeader("
HASPone Node"); + WiFiManagerParameter custom_haspNode("haspNode", "
Node Name (required: lowercase letters, numbers, and _ only)", haspNode, 15, " maxlength=15 required pattern='[a-z0-9_]*'"); + WiFiManagerParameter custom_groupName("groupName", "Group Name (required)", groupName, 15, " maxlength=15 required"); + WiFiManagerParameter custom_mqttHeader("

MQTT"); + WiFiManagerParameter custom_mqttServer("mqttServer", "
MQTT Broker (required, IP address is preferred)", mqttServer, 127, " maxlength=127"); + WiFiManagerParameter custom_mqttPort("mqttPort", "MQTT Port (required)", mqttPort, 5, " maxlength=5 type='number'"); + WiFiManagerParameter custom_mqttUser("mqttUser", "MQTT User (optional)", mqttUser, 127, " maxlength=127"); + WiFiManagerParameter custom_mqttPassword("mqttPassword", "MQTT Password (optional)", mqttPassword, 127, " maxlength=127 type='password'"); + String mqttTlsEnabled_value = "F"; + if (mqttTlsEnabled) + { + mqttTlsEnabled_value = "T"; + } + String mqttTlsEnabled_checked = "type=\"checkbox\""; + if (mqttTlsEnabled) + { + mqttTlsEnabled_checked = "type=\"checkbox\" checked=\"true\""; + } + WiFiManagerParameter custom_mqttTlsEnabled("mqttTlsEnabled", "MQTT TLS enabled:", mqttTlsEnabled_value.c_str(), 2, mqttTlsEnabled_checked.c_str()); + WiFiManagerParameter custom_mqttFingerprint("mqttFingerprint", "
MQTT TLS Fingerprint (optional, enter as 01:23:AB:CD, etc)", mqttFingerprint, 59, " min length=59 maxlength=59"); + WiFiManagerParameter custom_configHeader("

Admin access"); + WiFiManagerParameter custom_configUser("configUser", "
Config User (required)", configUser, 15, " maxlength=31"); + WiFiManagerParameter custom_configPassword("configPassword", "Config Password (optional)", configPassword, 31, " maxlength=31 type='password'"); + WiFiManagerParameter custom_hassHeader("

Home Assistant integration"); + WiFiManagerParameter custom_hassDiscovery("hassDiscovery", "
Home Assistant Discovery topic (required, should probably be \"homeassistant\")", hassDiscovery, 127, " maxlength=127"); + + WiFiManager wifiManager; + wifiManager.setSaveConfigCallback(configSaveCallback); // set config save notify callback + wifiManager.setCustomHeadElement(HASP_STYLE); // add custom style + wifiManager.addParameter(&custom_haspNodeHeader); + wifiManager.addParameter(&custom_haspNode); + wifiManager.addParameter(&custom_groupName); + wifiManager.addParameter(&custom_mqttHeader); + wifiManager.addParameter(&custom_mqttServer); + wifiManager.addParameter(&custom_mqttPort); + wifiManager.addParameter(&custom_mqttUser); + wifiManager.addParameter(&custom_mqttPassword); + wifiManager.addParameter(&custom_mqttTlsEnabled); + wifiManager.addParameter(&custom_mqttFingerprint); + wifiManager.addParameter(&custom_configHeader); + wifiManager.addParameter(&custom_configUser); + wifiManager.addParameter(&custom_configPassword); + wifiManager.addParameter(&custom_hassHeader); + wifiManager.addParameter(&custom_hassDiscovery); + + // Timeout config portal after connectTimeout seconds, useful if configured wifi network was temporarily unavailable + wifiManager.setTimeout(connectTimeout); + + wifiManager.setAPCallback(espWifiConfigCallback); + + // Fetches SSID and pass from EEPROM and tries to connect + // If it does not connect it starts an access point with the specified name + // and goes into a blocking loop awaiting configuration. + if (!wifiManager.autoConnect(wifiConfigAP, wifiConfigPass)) + { // Reset and try again + debugPrintln(F("WIFI: Failed to connect and hit timeout")); + espReset(); + } + + // Read updated parameters + strcpy(mqttServer, custom_mqttServer.getValue()); + strcpy(mqttPort, custom_mqttPort.getValue()); + strcpy(mqttUser, custom_mqttUser.getValue()); + strcpy(mqttPassword, custom_mqttPassword.getValue()); + if (strcmp(custom_mqttTlsEnabled.getValue(), "T") == 0) + { + mqttTlsEnabled = true; + } + else + { + mqttTlsEnabled = false; + } + strcpy(mqttFingerprint, custom_mqttFingerprint.getValue()); + strcpy(haspNode, custom_haspNode.getValue()); + strcpy(groupName, custom_groupName.getValue()); + strcpy(configUser, custom_configUser.getValue()); + strcpy(configPassword, custom_configPassword.getValue()); + strcpy(hassDiscovery, custom_hassDiscovery.getValue()); + if (shouldSaveConfig) + { // Save the custom parameters to FS + configSave(); + } + } + } + else + { // wifiSSID has been defined, so attempt to connect to it + debugPrintln(String(F("Connecting to WiFi network: ")) + String(wifiSSID)); + WiFi.mode(WIFI_STA); + WiFi.begin(wifiSSID, wifiPass); + + unsigned long wifiReconnectTimer = millis(); + while (WiFi.status() != WL_CONNECTED) + { + delay(1); + if (millis() >= (wifiReconnectTimer + (connectTimeout * 1000))) + { // If we've been trying to reconnect for connectTimeout seconds, reboot and try again + debugPrintln(F("WIFI: Failed to connect and hit timeout")); + espReset(); + } + } + } + + // If you get here you have connected to WiFi + nextionSetAttr("p[0].b[1].font", "6"); + nextionSetAttr("p[0].b[1].txt", "\"WiFi Connected!\\r " + String(WiFi.SSID()) + "\\rIP: " + WiFi.localIP().toString() + "\""); + debugPrintln(String(F("WIFI: Connected successfully and assigned IP: ")) + WiFi.localIP().toString()); + if (nextionActivePage) + { + nextionSendCmd("page " + String(nextionActivePage)); + } + + rebootOnp0b1 = false; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espWifiReconnect() +{ // Existing WiFi connection dropped, try to reconnect + debugPrintln(F("Reconnecting to WiFi network...")); + WiFi.mode(WIFI_STA); + WiFi.begin(wifiSSID, wifiPass); + + unsigned long wifiReconnectTimer = millis(); + while (WiFi.status() != WL_CONNECTED) + { + delay(1); + if (millis() >= (wifiReconnectTimer + (reConnectTimeout * 1000))) + { // If we've been trying to reconnect for reConnectTimeout seconds, reboot and try again + debugPrintln(F("WIFI: Failed to reconnect and hit timeout")); + espReset(); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espWifiConfigCallback(WiFiManager *myWiFiManager) +{ // Notify the user that we're entering config mode + debugPrintln(F("WIFI: Failed to connect to assigned AP, entering config mode")); + if (lcdVersion < 1 || lcdVersion > 2) + { + nextionSendCmd("page 0"); + } + nextionSetAttr("p[0].b[1].font", "6"); + nextionSetAttr("p[0].b[1].txt", "\" HASPone Setup\\r AP: " + String(wifiConfigAP) + "\\rPassword: " + String(wifiConfigPass) + "\\r\\r\\r\\r\\r\\r\\r http://192.168.4.1\""); + nextionSendCmd("vis 3,1"); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espSetupOta() +{ // Update ESP firmware from network via Arduino OTA + + ArduinoOTA.setHostname(haspNode); + ArduinoOTA.setPassword(configPassword); + ArduinoOTA.setRebootOnSuccess(false); + + ArduinoOTA.onStart([]() + { + debugPrintln(F("ESP OTA: update start")); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r\\r \""); + nextionSendCmd("page 0"); + nextionSendCmd("vis 4,1"); }); + ArduinoOTA.onEnd([]() + { + debugPrintln(F("ESP OTA: update complete")); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r Complete!\\rRestarting.\""); + nextionSendCmd("vis 4,1"); + delay(1000); + espReset(); }); + ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) + { nextionUpdateProgress(progress, total); }); + ArduinoOTA.onError([](ota_error_t error) + { + debugPrintln(String(F("ESP OTA: ERROR code ")) + String(error)); + if (error == OTA_AUTH_ERROR) + debugPrintln(F("ESP OTA: ERROR - Auth Failed")); + else if (error == OTA_BEGIN_ERROR) + debugPrintln(F("ESP OTA: ERROR - Begin Failed")); + else if (error == OTA_CONNECT_ERROR) + debugPrintln(F("ESP OTA: ERROR - Connect Failed")); + else if (error == OTA_RECEIVE_ERROR) + debugPrintln(F("ESP OTA: ERROR - Receive Failed")); + else if (error == OTA_END_ERROR) + debugPrintln(F("ESP OTA: ERROR - End Failed")); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASPone update:\\r FAILED\\rerror: " + String(error) + "\""); + delay(1000); + nextionSendCmd("page " + String(nextionActivePage)); }); + ArduinoOTA.begin(); + debugPrintln(F("ESP OTA: Over the Air firmware update ready")); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espStartOta(const String &espOtaUrl) +{ // Update ESP firmware from HTTP/HTTPS URL + + nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r\\r \""); + nextionSendCmd("page 0"); + nextionSendCmd("vis 4,1"); + + WiFiUDP::stopAll(); // Keep mDNS responder from breaking things + delay(1); + ESPhttpUpdate.rebootOnUpdate(false); + ESPhttpUpdate.onProgress(nextionUpdateProgress); + t_httpUpdate_return espOtaUrlReturnCode; + if (espOtaUrl.startsWith(F("https"))) + { + debugPrintln(String(F("ESPFW: Attempting firmware update from HTTPS host: ")) + espOtaUrl); + WiFiClientSecure wifiEspOtaClientSecure; + wifiEspOtaClientSecure.setInsecure(); + wifiEspOtaClientSecure.setBufferSizes(512, 512); + espOtaUrlReturnCode = ESPhttpUpdate.update(wifiEspOtaClientSecure, espOtaUrl); + } + else + { + debugPrintln(String(F("ESPFW: Attempting firmware update from HTTP host: ")) + espOtaUrl); + espOtaUrlReturnCode = ESPhttpUpdate.update(wifiClient, espOtaUrl); + } + + switch (espOtaUrlReturnCode) + { + case HTTP_UPDATE_FAILED: + debugPrintln(String(F("ESPFW: HTTP_UPDATE_FAILED error ")) + String(ESPhttpUpdate.getLastError()) + " " + ESPhttpUpdate.getLastErrorString()); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASPone update:\\r FAILED\\rerror: " + ESPhttpUpdate.getLastErrorString() + "\""); + break; + + case HTTP_UPDATE_NO_UPDATES: + debugPrintln(F("ESPFW: HTTP_UPDATE_NO_UPDATES")); + nextionSendCmd("vis 4,0"); + nextionSetAttr("p[0].b[1].txt", "\"HASPone update:\\rNo update\""); + break; + + case HTTP_UPDATE_OK: + debugPrintln(F("ESPFW: HTTP_UPDATE_OK")); + nextionSetAttr("p[0].b[1].txt", "\"\\rHASPone update:\\r\\r Complete!\\rRestarting.\""); + nextionSendCmd("vis 4,1"); + delay(1000); + espReset(); + } + delay(1000); + nextionSendCmd("page " + String(nextionActivePage)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void espReset() +{ + debugPrintln(F("RESET: HASPone reset")); + if (mqttClient.connected()) + { + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event_type\":\"hasp_device\",\"event\":\"offline\"}"))); + debugPrintln(String(F("MQTT OUT: '")) + mqttStateJSONTopic + String(F(" : {\"event_type\":\"hasp_device\",\"event\":\"offline\"}"))); + mqttClient.publish(mqttStatusTopic, "OFF", true, 0); + mqttClient.disconnect(); + debugPrintln(String(F("MQTT OUT: '")) + mqttStatusTopic + String(F("' : 'OFF'"))); + } + debugPrintln(F("HMI: Rebooting LCD")); + digitalWrite(nextionResetPin, LOW); + Serial1.print("rest"); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + delay(500); + ESP.reset(); + delay(5000); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void configRead() +{ // Read saved config.json from SPIFFS + debugPrintln(F("SPIFFS: mounting SPIFFS")); + if (SPIFFS.begin()) + { + if (SPIFFS.exists("/config.json")) + { // File exists, reading and loading + debugPrintln(F("SPIFFS: reading /config.json")); + // debugPrintFile("/config.json"); + File configFile = SPIFFS.open("/config.json", "r"); + if (configFile) + { + DynamicJsonDocument jsonConfigValues(1536); + DeserializationError jsonError = deserializeJson(jsonConfigValues, configFile); + + if (jsonError) + { // Couldn't parse the saved config + debugPrintln(String(F("SPIFFS: [ERROR] Failed to parse /config.json: ")) + String(jsonError.c_str())); + } + else + { + if (!jsonConfigValues["mqttServer"].isNull()) + { + strcpy(mqttServer, jsonConfigValues["mqttServer"]); + } + if (!jsonConfigValues["mqttPort"].isNull()) + { + strcpy(mqttPort, jsonConfigValues["mqttPort"]); + } + if (!jsonConfigValues["mqttUser"].isNull()) + { + strcpy(mqttUser, jsonConfigValues["mqttUser"]); + } + if (!jsonConfigValues["mqttPassword"].isNull()) + { + strcpy(mqttPassword, jsonConfigValues["mqttPassword"]); + } + if (!jsonConfigValues["mqttFingerprint"].isNull()) + { + strcpy(mqttFingerprint, jsonConfigValues["mqttFingerprint"]); + } + if (!jsonConfigValues["haspNode"].isNull()) + { + strcpy(haspNode, jsonConfigValues["haspNode"]); + } + if (!jsonConfigValues["groupName"].isNull()) + { + strcpy(groupName, jsonConfigValues["groupName"]); + } + if (!jsonConfigValues["configUser"].isNull()) + { + strcpy(configUser, jsonConfigValues["configUser"]); + } + if (!jsonConfigValues["configPassword"].isNull()) + { + strcpy(configPassword, jsonConfigValues["configPassword"]); + } + if (!jsonConfigValues["hassDiscovery"].isNull()) + { + strcpy(hassDiscovery, jsonConfigValues["hassDiscovery"]); + } + if (strcmp(hassDiscovery, "") == 0) + { // Cover off any edge case where this value winds up being empty + debugPrintln(F("SPIFFS: [WARNING] /config.json has empty hassDiscovery value, setting to 'homeassistant'")); + strcpy(hassDiscovery, "homeassistant"); + } + if (!jsonConfigValues["nextionBaud"].isNull()) + { + strcpy(nextionBaud, jsonConfigValues["nextionBaud"]); + } + if (strcmp(nextionBaud, "") == 0) + { // Cover off any edge case where this value winds up being empty + debugPrintln(F("SPIFFS: [WARNING] /config.json has empty nextionBaud value, setting to '115200'")); + strcpy(nextionBaud, "115200"); + } + if (!jsonConfigValues["nextionMaxPages"].isNull()) + { + nextionMaxPages = jsonConfigValues["nextionMaxPages"]; + } + if (nextionMaxPages < 1) + { // Cover off any edge case where this value winds up being zero or negative + debugPrintln(F("SPIFFS: [WARNING] /config.json has nextionMaxPages value of zero or negative, setting to '11'")); + nextionMaxPages = 11; + } + if (!jsonConfigValues["motionPinConfig"].isNull()) + { + strcpy(motionPinConfig, jsonConfigValues["motionPinConfig"]); + } + if (!jsonConfigValues["mqttTlsEnabled"].isNull()) + { + if (jsonConfigValues["mqttTlsEnabled"]) + { + mqttTlsEnabled = true; + } + else + { + mqttTlsEnabled = false; + } + } + if (!jsonConfigValues["debugSerialEnabled"].isNull()) + { + if (jsonConfigValues["debugSerialEnabled"]) + { + debugSerialEnabled = true; + } + else + { + debugSerialEnabled = false; + } + } + if (!jsonConfigValues["debugTelnetEnabled"].isNull()) + { + if (jsonConfigValues["debugTelnetEnabled"]) + { + debugTelnetEnabled = true; + } + else + { + debugTelnetEnabled = false; + } + } + if (!jsonConfigValues["mdnsEnabled"].isNull()) + { + if (jsonConfigValues["mdnsEnabled"]) + { + mdnsEnabled = true; + } + else + { + mdnsEnabled = false; + } + } + if (!jsonConfigValues["beepEnabled"].isNull()) + { + if (jsonConfigValues["beepEnabled"]) + { + beepEnabled = true; + } + else + { + beepEnabled = false; + } + } + if (!jsonConfigValues["ignoreTouchWhenOff"].isNull()) + { + if (jsonConfigValues["ignoreTouchWhenOff"]) + { + ignoreTouchWhenOff = true; + } + else + { + ignoreTouchWhenOff = false; + } + } + String jsonConfigValuesStr; + serializeJson(jsonConfigValues, jsonConfigValuesStr); + debugPrintln(String(F("SPIFFS: read ")) + String(configFile.size()) + String(F(" bytes and parsed json:")) + jsonConfigValuesStr); + } + } + else + { + debugPrintln(F("SPIFFS: [ERROR] Failed to read /config.json")); + } + } + else + { + debugPrintln(F("SPIFFS: [WARNING] /config.json not found, will be created on first config save")); + } + } + else + { + debugPrintln(F("SPIFFS: [ERROR] Failed to mount FS")); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void configSaveCallback() +{ // Callback notifying us of the need to save config + debugPrintln(F("SPIFFS: Configuration changed, flagging for save")); + shouldSaveConfig = true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void configSave() +{ // Save the custom parameters to config.json + debugPrintln(F("SPIFFS: Saving config")); + DynamicJsonDocument jsonConfigValues(2048); + + jsonConfigValues["mqttServer"] = mqttServer; + jsonConfigValues["mqttPort"] = mqttPort; + jsonConfigValues["mqttUser"] = mqttUser; + jsonConfigValues["mqttPassword"] = mqttPassword; + jsonConfigValues["mqttTlsEnabled"] = mqttTlsEnabled; + jsonConfigValues["mqttFingerprint"] = mqttFingerprint; + jsonConfigValues["haspNode"] = haspNode; + jsonConfigValues["groupName"] = groupName; + jsonConfigValues["configUser"] = configUser; + jsonConfigValues["configPassword"] = configPassword; + jsonConfigValues["hassDiscovery"] = hassDiscovery; + jsonConfigValues["nextionBaud"] = nextionBaud; + jsonConfigValues["nextionMaxPages"] = nextionMaxPages; + jsonConfigValues["motionPinConfig"] = motionPinConfig; + jsonConfigValues["debugSerialEnabled"] = debugSerialEnabled; + jsonConfigValues["debugTelnetEnabled"] = debugTelnetEnabled; + jsonConfigValues["mdnsEnabled"] = mdnsEnabled; + jsonConfigValues["beepEnabled"] = beepEnabled; + jsonConfigValues["ignoreTouchWhenOff"] = ignoreTouchWhenOff; + + debugPrintln(String(F("SPIFFS: mqttServer = ")) + String(mqttServer)); + debugPrintln(String(F("SPIFFS: mqttPort = ")) + String(mqttPort)); + debugPrintln(String(F("SPIFFS: mqttUser = ")) + String(mqttUser)); + debugPrintln(String(F("SPIFFS: mqttPassword = ")) + String(mqttPassword)); + debugPrintln(String(F("SPIFFS: mqttTlsEnabled = ")) + String(mqttTlsEnabled)); + debugPrintln(String(F("SPIFFS: mqttFingerprint = ")) + String(mqttFingerprint)); + debugPrintln(String(F("SPIFFS: haspNode = ")) + String(haspNode)); + debugPrintln(String(F("SPIFFS: groupName = ")) + String(groupName)); + debugPrintln(String(F("SPIFFS: configUser = ")) + String(configUser)); + debugPrintln(String(F("SPIFFS: configPassword = ")) + String(configPassword)); + debugPrintln(String(F("SPIFFS: hassDiscovery = ")) + String(hassDiscovery)); + debugPrintln(String(F("SPIFFS: nextionBaud = ")) + String(nextionBaud)); + debugPrintln(String(F("SPIFFS: nextionMaxPages = ")) + String(nextionMaxPages)); + debugPrintln(String(F("SPIFFS: motionPinConfig = ")) + String(motionPinConfig)); + debugPrintln(String(F("SPIFFS: debugSerialEnabled = ")) + String(debugSerialEnabled)); + debugPrintln(String(F("SPIFFS: debugTelnetEnabled = ")) + String(debugTelnetEnabled)); + debugPrintln(String(F("SPIFFS: mdnsEnabled = ")) + String(mdnsEnabled)); + debugPrintln(String(F("SPIFFS: beepEnabled = ")) + String(beepEnabled)); + debugPrintln(String(F("SPIFFS: ignoreTouchWhenOff = ")) + String(ignoreTouchWhenOff)); + + File configFile = SPIFFS.open("/config.json", "w"); + if (!configFile) + { + debugPrintln(F("SPIFFS: Failed to open config file for writing")); + } + else + { + serializeJson(jsonConfigValues, configFile); + configFile.print("\n\n\n"); + configFile.flush(); + delay(10); + configFile.close(); + } + debugPrintFile("/config.json"); + shouldSaveConfig = false; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void configClearSaved() +{ // Clear out all local storage + nextionSetAttr("dims", "100"); + nextionSendCmd("page 0"); + nextionSetAttr("p[0].b[1].txt", "\"Resetting\\rsystem...\""); + debugPrintln(F("RESET: Formatting SPIFFS")); + SPIFFS.format(); + debugPrintln(F("RESET: Clearing WiFiManager settings...")); + WiFi.disconnect(); + WiFiManager wifiManager; + wifiManager.resetSettings(); + EEPROM.begin(512); + debugPrintln(F("Clearing EEPROM...")); + for (uint16_t i = 0; i < EEPROM.length(); i++) + { + EEPROM.write(i, 0); + } + nextionSetAttr("p[0].b[1].txt", "\"Rebooting\\rsystem...\""); + debugPrintln(F("RESET: Rebooting device")); + espReset(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleNotFound() +{ // webServer 404 + debugPrintln(String(F("HTTP: Sending 404 to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " 404"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(404, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

404: File Not Found

One of us appears to have done something horribly wrong.
URI: ")); + webServer.sendContent(webServer.uri()); + webServer.sendContent(F("
Method: ")); + webServer.sendContent((webServer.method() == HTTP_GET) ? F("GET") : F("POST")); + webServer.sendContent(F("
Arguments: ")); + webServer.sendContent(String(webServer.args())); + for (uint8_t i = 0; i < webServer.args(); i++) + { + webServer.sendContent(F("
")); + webServer.sendContent(String(webServer.argName(i))); + webServer.sendContent(F(": ")); + webServer.sendContent(String(webServer.arg(i))); + } + webServer.sendContent(""); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleRoot() +{ // http://plate01/ + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending root page to client connected from: ")) + webServer.client().remoteIP().toString()); + + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode)); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent(httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F("

")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("WiFi SSID (required)
WiFi Password (required)")); + webServer.sendContent(F("

HASPone Node Name (required. lowercase letters, numbers, and _ only)
Group Name (required)

MQTT Broker (required, IP address is preferred)
MQTT Port (required)
MQTT User (optional)
MQTT Password (optional)")); + + webServer.sendContent(F("
MQTT TLS enabled:
MQTT TLS Fingerpint (leave blank to disable fingerprint checking)")); + + webServer.sendContent(F("

HASPone Admin Username (optional)
HASPone Admin Password (optional)

Home Assistant discovery topic (required, should probably be \"homeassistant\")
Nextion project page count (required, probably \"11\")

")); + // Big menu of possible serial speeds + if ((lcdVersion != 1) && (lcdVersion != 2)) + { // HASPone lcdVersion 1 and 2 have `bauds=115200` in the pre-init script of page 0. Don't show this option if either of those two versions are running. + webServer.sendContent(F("LCD Serial Speed: 
")); + } + + webServer.sendContent(F("USB serial debug output enabled:
Telnet debug output enabled:
mDNS enabled:
Motion Sensor Pin: ")); + webServer.sendContent(F("
Keypress beep enabled on D2:
Ignore touchevents when backlight is off:

")); + + if (updateEspAvailable) + { + webServer.sendContent(F("

HASPone Update available!

")); + webServer.sendContent(F("
")); + webServer.sendContent(F("
")); + } + + webServer.sendContent(F("
")); + webServer.sendContent(F("
")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("
")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("
")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("
")); + + webServer.sendContent(F("
MQTT Status: ")); + if (mqttClient.connected()) + { // Check MQTT connection + webServer.sendContent(F("Connected")); + } + else + { + webServer.sendContent(F("Disconnected
MQTT return code: ")); + webServer.sendContent(String(mqttClient.returnCode())); + webServer.sendContent(F("
MQTT last error: ")); + webServer.sendContent(String(mqttClient.lastError())); + webServer.sendContent(F("
MQTT broker ping check: ")); + if (mqttPingCheck) + { + webServer.sendContent(F("SUCCESS")); + } + else + { + webServer.sendContent(F("FAILED")); + } + webServer.sendContent(F("
MQTT broker port check: ")); + if (mqttPortCheck) + { + webServer.sendContent(F("SUCCESS")); + } + else + { + webServer.sendContent(F("FAILED")); + } + } + webServer.sendContent(F("
MQTT ClientID: ")); + if (mqttClientId != "") + { + webServer.sendContent(mqttClientId); + } + webServer.sendContent(F("
HASPone FW Version: ")); + webServer.sendContent(String(haspVersion)); + webServer.sendContent(F("
LCD Model: ")); + if (nextionModel != "") + { + webServer.sendContent(nextionModel); + } + webServer.sendContent(F("
LCD FW Version: ")); + webServer.sendContent(String(lcdVersion)); + webServer.sendContent(F("
LCD Active Page: ")); + webServer.sendContent(String(nextionActivePage)); + webServer.sendContent(F("
LCD Serial Speed: ")); + webServer.sendContent(nextionBaud); + webServer.sendContent(F("
CPU Frequency: ")); + webServer.sendContent(String(ESP.getCpuFreqMHz())); + webServer.sendContent(F("MHz")); + webServer.sendContent(F("
Sketch Size: ")); + webServer.sendContent(String(ESP.getSketchSize())); + webServer.sendContent(F(" bytes")); + webServer.sendContent(F("
Free Sketch Space: ")); + webServer.sendContent(String(ESP.getFreeSketchSpace())); + webServer.sendContent(F(" bytes")); + webServer.sendContent(F("
Heap Free: ")); + webServer.sendContent(String(ESP.getFreeHeap())); + webServer.sendContent(F("
Heap Fragmentation: ")); + webServer.sendContent(String(ESP.getHeapFragmentation())); + webServer.sendContent(F("
ESP core version: ")); + webServer.sendContent(ESP.getCoreVersion()); + webServer.sendContent(F("
IP Address: ")); + webServer.sendContent(WiFi.localIP().toString()); + webServer.sendContent(F("
Signal Strength: ")); + webServer.sendContent(String(WiFi.RSSI())); + webServer.sendContent(F("
Uptime: ")); + webServer.sendContent(String(long(millis() / 1000))); + webServer.sendContent(F("
Last reset: ")); + webServer.sendContent(ESP.getResetInfo()); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleSaveConfig() +{ // http://plate01/saveConfig + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /saveConfig page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " Saving configuration"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + + bool shouldSaveWifi = false; + // Check required values + if ((webServer.arg("wifiSSID") != "") && (webServer.arg("wifiSSID") != String(WiFi.SSID()))) + { // Handle WiFi SSID + shouldSaveConfig = true; + shouldSaveWifi = true; + webServer.arg("wifiSSID").toCharArray(wifiSSID, 32); + } + if ((webServer.arg("wifiPass") != String(wifiPass)) && (webServer.arg("wifiPass") != String("********"))) + { // Handle WiFi password + shouldSaveConfig = true; + shouldSaveWifi = true; + webServer.arg("wifiPass").toCharArray(wifiPass, 64); + } + + if (webServer.arg("haspNode") != "" && webServer.arg("haspNode") != String(haspNode)) + { // Handle haspNode + shouldSaveConfig = true; + String lowerHaspNode = webServer.arg("haspNode"); + lowerHaspNode.toLowerCase(); + lowerHaspNode.toCharArray(haspNode, 16); + } + if (webServer.arg("groupName") != "" && webServer.arg("groupName") != String(groupName)) + { // Handle groupName + shouldSaveConfig = true; + webServer.arg("groupName").toCharArray(groupName, 16); + } + + if (webServer.arg("mqttServer") != "" && webServer.arg("mqttServer") != String(mqttServer)) + { // Handle mqttServer + shouldSaveConfig = true; + webServer.arg("mqttServer").toCharArray(mqttServer, 128); + } + if (webServer.arg("mqttPort") != "" && webServer.arg("mqttPort") != String(mqttPort)) + { // Handle mqttPort + shouldSaveConfig = true; + webServer.arg("mqttPort").toCharArray(mqttPort, 6); + } + if (webServer.arg("mqttUser") != String(mqttUser)) + { // Handle mqttUser + shouldSaveConfig = true; + webServer.arg("mqttUser").toCharArray(mqttUser, 128); + } + if (webServer.arg("mqttPassword") != String("********")) + { // Handle mqttPassword + shouldSaveConfig = true; + webServer.arg("mqttPassword").toCharArray(mqttPassword, 128); + } + if ((webServer.arg("mqttTlsEnabled") == String("on")) && !mqttTlsEnabled) + { // mqttTlsEnabled was disabled but should now be enabled + shouldSaveConfig = true; + mqttTlsEnabled = true; + } + else if ((webServer.arg("mqttTlsEnabled") == String("")) && mqttTlsEnabled) + { // mqttTlsEnabled was enabled but should now be disabled + shouldSaveConfig = true; + mqttTlsEnabled = false; + } + if (webServer.arg("mqttFingerprint") != String(mqttFingerprint)) + { // Handle mqttFingerprint + shouldSaveConfig = true; + webServer.arg("mqttFingerprint").toCharArray(mqttFingerprint, 60); + } + if (webServer.arg("configUser") != String(configUser)) + { // Handle configUser + shouldSaveConfig = true; + webServer.arg("configUser").toCharArray(configUser, 32); + } + if (webServer.arg("configPassword") != String("********")) + { // Handle configPassword + shouldSaveConfig = true; + webServer.arg("configPassword").toCharArray(configPassword, 32); + } + if (webServer.arg("hassDiscovery") != String(hassDiscovery)) + { // Handle hassDiscovery + shouldSaveConfig = true; + webServer.arg("hassDiscovery").toCharArray(hassDiscovery, 128); + } + if ((webServer.arg("nextionMaxPages") != String(nextionMaxPages)) && (webServer.arg("nextionMaxPages").toInt() < 256) && (webServer.arg("nextionMaxPages").toInt() > 0)) + { + shouldSaveConfig = true; + nextionMaxPages = webServer.arg("nextionMaxPages").toInt(); + } + if (webServer.arg("nextionBaud") != String(nextionBaud)) + { // Handle nextionBaud + shouldSaveConfig = true; + webServer.arg("nextionBaud").toCharArray(nextionBaud, 7); + } + if (webServer.arg("motionPinConfig") != String(motionPinConfig)) + { // Handle motionPinConfig + shouldSaveConfig = true; + webServer.arg("motionPinConfig").toCharArray(motionPinConfig, 3); + } + if ((webServer.arg("debugSerialEnabled") == String("on")) && !debugSerialEnabled) + { // debugSerialEnabled was disabled but should now be enabled + shouldSaveConfig = true; + debugSerialEnabled = true; + } + else if ((webServer.arg("debugSerialEnabled") == String("")) && debugSerialEnabled) + { // debugSerialEnabled was enabled but should now be disabled + shouldSaveConfig = true; + debugSerialEnabled = false; + } + if ((webServer.arg("debugTelnetEnabled") == String("on")) && !debugTelnetEnabled) + { // debugTelnetEnabled was disabled but should now be enabled + shouldSaveConfig = true; + debugTelnetEnabled = true; + } + else if ((webServer.arg("debugTelnetEnabled") == String("")) && debugTelnetEnabled) + { // debugTelnetEnabled was enabled but should now be disabled + shouldSaveConfig = true; + debugTelnetEnabled = false; + } + if ((webServer.arg("mdnsEnabled") == String("on")) && !mdnsEnabled) + { // mdnsEnabled was disabled but should now be enabled + shouldSaveConfig = true; + mdnsEnabled = true; + } + else if ((webServer.arg("mdnsEnabled") == String("")) && mdnsEnabled) + { // mdnsEnabled was enabled but should now be disabled + shouldSaveConfig = true; + mdnsEnabled = false; + } + if ((webServer.arg("beepEnabled") == String("on")) && !beepEnabled) + { // beepEnabled was disabled but should now be enabled + shouldSaveConfig = true; + beepEnabled = true; + } + else if ((webServer.arg("beepEnabled") == String("")) && beepEnabled) + { // beepEnabled was enabled but should now be disabled + shouldSaveConfig = true; + beepEnabled = false; + } + if ((webServer.arg("ignoreTouchWhenOff") == String("on")) && !ignoreTouchWhenOff) + { // ignoreTouchWhenOff was disabled but should now be enabled + shouldSaveConfig = true; + ignoreTouchWhenOff = true; + } + else if ((webServer.arg("ignoreTouchWhenOff") == String("")) && ignoreTouchWhenOff) + { // ignoreTouchWhenOff was enabled but should now be disabled + shouldSaveConfig = true; + ignoreTouchWhenOff = false; + } + + if (shouldSaveConfig) + { // Config updated, notify user and trigger write to SPIFFS + + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F("

")); + webServer.sendContent(F("
Saving updated configuration values and restarting device")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(F("")); + configSave(); + if (shouldSaveWifi) + { + debugPrintln(String(F("CONFIG: Attempting connection to SSID: ")) + webServer.arg("wifiSSID")); + espWifiConnect(); + } + espReset(); + } + else + { // No change found, notify user and link back to config page + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F("

")); + webServer.sendContent(F("
No changes found, returning to
home page")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(F("")); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleResetConfig() +{ // http://plate01/resetConfig + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /resetConfig page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " Resetting configuration"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + + if (webServer.arg("confirm") == "yes") + { // User has confirmed, so reset everything + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F("

Resetting all saved settings and restarting device into WiFi AP mode")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + delay(100); + configClearSaved(); + } + else + { + webServer.sendContent(F("

Warning

This process will reset all settings to the default values and restart the device. You may need to connect to the WiFi AP displayed on the panel to re-configure the device before accessing it again.")); + webServer.sendContent(F("


")); + webServer.sendContent(F("

")); + webServer.sendContent(F("


")); + webServer.sendContent(F("
")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleResetBacklight() +{ // http://plate01/resetBacklight + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /resetBacklight page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " Backlight reset"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F("

")); + webServer.sendContent(F("
Resetting backlight to 100%")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + debugPrintln(F("HTTP: Resetting backlight to 100%")); + nextionSetAttr("dims", "100"); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleFirmware() +{ // http://plate01/firmware + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /firmware page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " Firmware updates"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" Firmware updates

Note: If updating firmware for both the ESP8266 and the Nextion LCD, you'll want to update the ESP8266 first followed by the Nextion LCD

")); + + // Display main firmware page + webServer.sendContent(F("
")); + if (updateEspAvailable) + { + webServer.sendContent(F("HASPone ESP8266 update available!")); + } + webServer.sendContent(F("
Update ESP8266 from URL")); + webServer.sendContent(F("


")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("Update ESP8266 from file")); + webServer.sendContent(F("

")); + + webServer.sendContent(F("


WARNING!

")); + webServer.sendContent(F("Nextion LCD firmware updates can be risky. If interrupted, the LCD will display an error message until a successful firmware update has completed. ")); + webServer.sendContent(F("

Note: Failed LCD firmware updates on HASPone hardware prior to v1.0 may require a hard power cycle of the device, via a circuit breaker or by physically disconnecting the device.")); + + webServer.sendContent(F("

")); + if (updateLcdAvailable) + { + webServer.sendContent(F("HASPone LCD update available!")); + } + webServer.sendContent(F("
Update Nextion LCD from URL http only")); + webServer.sendContent(F("


")); + + webServer.sendContent(F("
")); + webServer.sendContent(F("
Update Nextion LCD from file")); + webServer.sendContent(F("

")); + + // Javascript to collect the filesize of the LCD upload and send it to /tftFileSize + webServer.sendContent(F("")); + + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleEspFirmware() +{ // http://plate01/espfirmware + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + + debugPrintln(String(F("HTTP: Sending /espfirmware page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " ESP8266 firmware update"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" ESP8266 firmware update

")); + webServer.sendContent(F("
Updating ESP firmware from: ")); + webServer.sendContent(webServer.arg("espFirmware")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + + debugPrintln("ESPFW: Attempting ESP firmware update from: " + String(webServer.arg("espFirmware"))); + espStartOta(webServer.arg("espFirmware")); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleLcdUpload() +{ // http://plate01/lcdupload + // Upload firmware to the Nextion LCD via HTTP upload + + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + + static uint32_t lcdOtaTransferred = 0; + static uint32_t lcdOtaRemaining; + static uint16_t lcdOtaParts; + const uint32_t lcdOtaTimeout = 30000; // timeout for receiving new data in milliseconds + static uint32_t lcdOtaTimer = 0; // timer for upload timeout + + HTTPUpload &upload = webServer.upload(); + + if (tftFileSize == 0) + { + debugPrintln(String(F("LCDOTA: FAILED, no filesize sent."))); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " LCD update error"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" LCD update FAILED

")); + webServer.sendContent(F("No update file size reported. You must use a modern browser with Javascript enabled.")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + } + else if ((lcdOtaTimer > 0) && ((millis() - lcdOtaTimer) > lcdOtaTimeout)) + { // Our timer expired so reset + debugPrintln(F("LCDOTA: ERROR: LCD upload timeout. Restarting.")); + espReset(); + } + else if (upload.status == UPLOAD_FILE_START) + { + WiFiUDP::stopAll(); // Keep mDNS responder from breaking things + + debugPrintln(String(F("LCDOTA: Attempting firmware upload"))); + debugPrintln(String(F("LCDOTA: upload.filename: ")) + String(upload.filename)); + debugPrintln(String(F("LCDOTA: TFTfileSize: ")) + String(tftFileSize)); + + lcdOtaRemaining = tftFileSize; + lcdOtaParts = (lcdOtaRemaining / 4096) + 1; + debugPrintln(String(F("LCDOTA: File upload beginning. Size ")) + String(lcdOtaRemaining) + String(F(" bytes in ")) + String(lcdOtaParts) + String(F(" 4k chunks."))); + + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); // Send empty command to LCD + Serial1.flush(); + nextionHandleInput(); + + String lcdOtaNextionCmd = "whmi-wri " + String(tftFileSize) + "," + String(nextionBaud) + ",0"; + debugPrintln(String(F("LCDOTA: Sending LCD upload command: ")) + lcdOtaNextionCmd); + Serial1.print(lcdOtaNextionCmd); + Serial1.write(nextionSuffix, sizeof(nextionSuffix)); + Serial1.flush(); + + if (nextionOtaResponse()) + { + debugPrintln(F("LCDOTA: LCD upload command accepted")); + } + else + { + debugPrintln(F("LCDOTA: LCD upload command FAILED.")); + espReset(); + } + lcdOtaTimer = millis(); + } + else if (upload.status == UPLOAD_FILE_WRITE) + { // Handle upload data + static int lcdOtaChunkCounter = 0; + static uint16_t lcdOtaPartNum = 0; + static int lcdOtaPercentComplete = 0; + static const uint16_t lcdOtaBufferSize = 1024; // upload data buffer before sending to UART + static uint8_t lcdOtaBuffer[lcdOtaBufferSize] = {}; + uint16_t lcdOtaUploadIndex = 0; + int32_t lcdOtaPacketRemaining = upload.currentSize; + + while (lcdOtaPacketRemaining > 0) + { // Write incoming data to panel as it arrives + // determine chunk size as lowest value of lcdOtaPacketRemaining, lcdOtaBufferSize, or 4096 - lcdOtaChunkCounter + uint16_t lcdOtaChunkSize = 0; + if ((lcdOtaPacketRemaining <= lcdOtaBufferSize) && (lcdOtaPacketRemaining <= (4096 - lcdOtaChunkCounter))) + { + lcdOtaChunkSize = lcdOtaPacketRemaining; + } + else if ((lcdOtaBufferSize <= lcdOtaPacketRemaining) && (lcdOtaBufferSize <= (4096 - lcdOtaChunkCounter))) + { + lcdOtaChunkSize = lcdOtaBufferSize; + } + else + { + lcdOtaChunkSize = 4096 - lcdOtaChunkCounter; + } + + for (uint16_t i = 0; i < lcdOtaChunkSize; i++) + { // Load up the UART buffer + lcdOtaBuffer[i] = upload.buf[lcdOtaUploadIndex]; + lcdOtaUploadIndex++; + } + Serial1.flush(); // Clear out current UART buffer + Serial1.write(lcdOtaBuffer, lcdOtaChunkSize); // And send the most recent data + lcdOtaChunkCounter += lcdOtaChunkSize; + lcdOtaTransferred += lcdOtaChunkSize; + if (lcdOtaChunkCounter >= 4096) + { + Serial1.flush(); + lcdOtaPartNum++; + lcdOtaPercentComplete = (lcdOtaTransferred * 100) / tftFileSize; + lcdOtaChunkCounter = 0; + if (nextionOtaResponse()) + { + debugPrintln(String(F("LCDOTA: Part ")) + String(lcdOtaPartNum) + String(F(" OK, ")) + String(lcdOtaPercentComplete) + String(F("% complete"))); + } + else + { + debugPrintln(String(F("LCDOTA: Part ")) + String(lcdOtaPartNum) + String(F(" FAILED, ")) + String(lcdOtaPercentComplete) + String(F("% complete"))); + } + } + else + { + delay(10); + } + if (lcdOtaRemaining > 0) + { + lcdOtaRemaining -= lcdOtaChunkSize; + } + if (lcdOtaPacketRemaining > 0) + { + lcdOtaPacketRemaining -= lcdOtaChunkSize; + } + } + + if (lcdOtaTransferred >= tftFileSize) + { + if (nextionOtaResponse()) + { + debugPrintln(String(F("LCDOTA: Success, wrote ")) + String(lcdOtaTransferred) + " of " + String(tftFileSize) + " bytes."); + webServer.sendHeader("Location", "/lcdOtaSuccess"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 5000) + { // extra 5sec delay while the LCD handles any local firmware updates from new versions of code sent to it + webServer.handleClient(); + delay(1); + } + espReset(); + } + else + { + debugPrintln(F("LCDOTA: Failure")); + webServer.sendHeader("Location", "/lcdOtaFailure"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 1000) + { // extra 1sec delay for client to grab failure page + webServer.handleClient(); + delay(1); + } + espReset(); + } + } + lcdOtaTimer = millis(); + } + else if (upload.status == UPLOAD_FILE_END) + { // Upload completed + if (lcdOtaTransferred >= tftFileSize) + { + if (nextionOtaResponse()) + { // YAY WE DID IT + debugPrintln(String(F("LCDOTA: Success, wrote ")) + String(lcdOtaTransferred) + " of " + String(tftFileSize) + " bytes."); + webServer.sendHeader("Location", "/lcdOtaSuccess"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 5000) + { // extra 5sec delay while the LCD handles any local firmware updates from new versions of code sent to it + webServer.handleClient(); + yield(); + } + espReset(); + } + else + { + debugPrintln(F("LCDOTA: Failure")); + webServer.sendHeader("Location", "/lcdOtaFailure"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 1000) + { // extra 1sec delay for client to grab failure page + webServer.handleClient(); + yield(); + } + espReset(); + } + } + } + else if (upload.status == UPLOAD_FILE_ABORTED) + { // Something went kablooey + debugPrintln(F("LCDOTA: ERROR: upload.status returned: UPLOAD_FILE_ABORTED")); + debugPrintln(F("LCDOTA: Failure")); + webServer.sendHeader("Location", "/lcdOtaFailure"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 1000) + { // extra 1sec delay for client to grab failure page + webServer.handleClient(); + yield(); + } + espReset(); + } + else + { // Something went weird, we should never get here... + debugPrintln(String(F("LCDOTA: upload.status returned: ")) + String(upload.status)); + debugPrintln(F("LCDOTA: Failure")); + webServer.sendHeader("Location", "/lcdOtaFailure"); + webServer.send(303); + uint32_t lcdOtaDelay = millis(); + while ((millis() - lcdOtaDelay) < 1000) + { // extra 1sec delay for client to grab failure page + webServer.handleClient(); + yield(); + } + espReset(); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleLcdUpdateSuccess() +{ // http://plate01/lcdOtaSuccess + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /lcdOtaSuccess page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " LCD firmware update success"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" LCD update success

")); + webServer.sendContent(F("Restarting HASwitchPlate to apply changes...")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleLcdUpdateFailure() +{ // http://plate01/lcdOtaFailure + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /lcdOtaFailure page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " LCD firmware update failed"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" LCD update failed :(

")); + webServer.sendContent(F("Restarting HASwitchPlate to apply changes...")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleLcdDownload() +{ // http://plate01/lcddownload + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /lcddownload page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " LCD firmware update"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" LCD update

")); + webServer.sendContent(F("
Updating LCD firmware from: ")); + webServer.sendContent(webServer.arg("lcdFirmware")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + nextionOtaStartDownload(webServer.arg("lcdFirmware")); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleTftFileSize() +{ // http://plate01/tftFileSize + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /tftFileSize page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " TFT Filesize"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_HEAD_END); + tftFileSize = webServer.arg("tftFileSize").toInt(); + debugPrintln(String(F("WEB: Received tftFileSize: ")) + String(tftFileSize)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void webHandleReboot() +{ // http://plate01/reboot + if (configPassword[0] != '\0') + { // Request HTTP auth if configPassword is set + if (!webServer.authenticate(configUser, configPassword)) + { + return webServer.requestAuthentication(); + } + } + debugPrintln(String(F("HTTP: Sending /reboot page to client connected from: ")) + webServer.client().remoteIP().toString()); + String httpHeader = FPSTR(HTTP_HEAD_START); + httpHeader.replace("{v}", "HASPone " + String(haspNode) + " reboot"); + webServer.setContentLength(CONTENT_LENGTH_UNKNOWN); + webServer.send(200, "text/html", httpHeader); + webServer.sendContent_P(HTTP_SCRIPT); + webServer.sendContent_P(HTTP_STYLE); + webServer.sendContent_P(HASP_STYLE); + webServer.sendContent(F("")); + webServer.sendContent_P(HTTP_HEAD_END); + webServer.sendContent(F("

")); + webServer.sendContent(haspNode); + webServer.sendContent(F(" Reboot

")); + webServer.sendContent(F("
Rebooting device")); + webServer.sendContent_P(HTTP_END); + webServer.sendContent(""); + nextionSendCmd("page 0"); + nextionSetAttr("p[0].b[1].txt", "\"Rebooting...\""); + espReset(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +bool updateCheck() +{ // firmware update check + WiFiClientSecure wifiUpdateClientSecure; + HTTPClient updateClient; + debugPrintln(String(F("UPDATE: Checking update URL: ")) + FPSTR(UPDATE_URL)); + + wifiUpdateClientSecure.setInsecure(); + wifiUpdateClientSecure.setBufferSizes(512, 512); + updateClient.begin(wifiUpdateClientSecure, UPDATE_URL); + + int httpCode = updateClient.GET(); // start connection and send HTTP header + if (httpCode != HTTP_CODE_OK) + { + debugPrintln(String(F("UPDATE: Update check failed: ")) + updateClient.errorToString(httpCode)); + return false; + } + + DynamicJsonDocument updateJson(2048); + DeserializationError jsonError = deserializeJson(updateJson, updateClient.getString()); + updateClient.end(); + + if (jsonError) + { // Couldn't parse the returned JSON, so bail + debugPrintln(String(F("UPDATE: JSON parsing failed: ")) + String(jsonError.c_str())); + mqttClient.publish(mqttStateJSONTopic, String(F("{\"event\":\"jsonError\",\"event_source\":\"updateCheck()\",\"event_description\":\"Failed to parse incoming JSON command with error: ")) + String(jsonError.c_str()) + String(F("\"}"))); + return false; + } + else + { + if (!updateJson["d1_mini"]["version"].isNull()) + { + updateEspAvailableVersion = updateJson["d1_mini"]["version"].as(); + debugPrintln(String(F("UPDATE: updateEspAvailableVersion: ")) + String(updateEspAvailableVersion)); + espFirmwareUrl = updateJson["d1_mini"]["firmware"].as(); + if (updateEspAvailableVersion > haspVersion) + { + updateEspAvailable = true; + debugPrintln(String(F("UPDATE: New ESP version available: ")) + String(updateEspAvailableVersion)); + } + } + if (nextionModel && !updateJson[nextionModel]["version"].isNull()) + { + updateLcdAvailableVersion = updateJson[nextionModel]["version"].as(); + debugPrintln(String(F("UPDATE: updateLcdAvailableVersion: ")) + String(updateLcdAvailableVersion)); + lcdFirmwareUrl = updateJson[nextionModel]["firmware"].as(); + if (updateLcdAvailableVersion > lcdVersion) + { + updateLcdAvailable = true; + debugPrintln(String(F("UPDATE: New LCD version available: ")) + String(updateLcdAvailableVersion)); + } + } + debugPrintln(F("UPDATE: Update check completed")); + } + return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void motionSetup() +{ + if (strcmp(motionPinConfig, "D0") == 0) + { + motionEnabled = true; + motionPin = D0; + pinMode(motionPin, INPUT); + } + else if (strcmp(motionPinConfig, "D1") == 0) + { + motionEnabled = true; + motionPin = D1; + pinMode(motionPin, INPUT); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void motionHandle() +{ // Monitor motion sensor + if (motionEnabled) + { // Check on our motion sensor + static unsigned long motionLatchTimer = 0; // Timer for motion sensor latch + static unsigned long motionBufferTimer = millis(); // Timer for motion sensor buffer + static bool motionActiveBuffer = motionActive; + bool motionRead = digitalRead(motionPin); + + if (motionRead != motionActiveBuffer) + { // if we've changed state + motionBufferTimer = millis(); + motionActiveBuffer = motionRead; + } + else if (millis() > (motionBufferTimer + motionBufferTimeout)) + { + if ((motionActiveBuffer && !motionActive) && (millis() > (motionLatchTimer + motionLatchTimeout))) + { + motionLatchTimer = millis(); + mqttClient.publish(mqttMotionStateTopic, "ON"); + debugPrintln(String(F("MQTT OUT: '")) + mqttMotionStateTopic + String(F("' : 'ON'"))); + motionActive = motionActiveBuffer; + debugPrintln("MOTION: Active"); + } + else if ((!motionActiveBuffer && motionActive) && (millis() > (motionLatchTimer + motionLatchTimeout))) + { + motionLatchTimer = millis(); + mqttClient.publish(mqttMotionStateTopic, "OFF"); + debugPrintln(String(F("MQTT OUT: '")) + mqttMotionStateTopic + String(F("' : 'OFF'"))); + motionActive = motionActiveBuffer; + debugPrintln("MOTION: Inactive"); + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void beepHandle() +{ // Handle beep/tactile feedback + if (beepEnabled) + { + static bool beepState = false; // beep currently engaged + static unsigned long beepPrevMillis = 0; // store last time beep was updated + if ((beepState == true) && (millis() - beepPrevMillis >= beepOnTime) && ((beepCounter > 0))) + { + beepState = false; // Turn it off + beepPrevMillis = millis(); // Remember the time + analogWrite(beepPin, 254); // start beep for beepOnTime + if (beepCounter > 0) + { // Update the beep counter. + beepCounter--; + } + } + else if ((beepState == false) && (millis() - beepPrevMillis >= beepOffTime) && ((beepCounter >= 0))) + { + beepState = true; // turn it on + beepPrevMillis = millis(); // Remember the time + analogWrite(beepPin, 0); // stop beep for beepOffTime + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void telnetHandleClient() +{ // Basic telnet client handling code from: https://gist.github.com/tablatronix/4793677ca748f5f584c95ec4a2b10303 + if (debugTelnetEnabled) + { // Only do any of this if we're actually enabled + static unsigned long telnetInputIndex = 0; + if (telnetServer.hasClient()) + { // client is connected + if (!telnetClient || !telnetClient.connected()) + { + if (telnetClient) + { + telnetClient.stop(); // client disconnected + } + telnetClient = telnetServer.accept(); // ready for new client + telnetInputIndex = 0; // reset input buffer index + } + else + { + telnetServer.accept().stop(); // have client, block new connections + } + } + // Handle client input from telnet connection. + if (telnetClient && telnetClient.connected() && telnetClient.available()) + { // client input processing + static char telnetInputBuffer[telnetInputMax]; + + if (telnetClient.available()) + { + char telnetInputByte = telnetClient.read(); // Read client byte + if (telnetInputByte == 5) + { // If the telnet client sent a bunch of control commands on connection (which end in ENQUIRY/0x05), ignore them and restart the buffer + telnetInputIndex = 0; + } + else if (telnetInputByte == 13) + { // telnet line endings should be CRLF: https://tools.ietf.org/html/rfc5198#appendix-C + // If we get a CR just ignore it + } + else if (telnetInputByte == 10) + { // We've caught a LF (DEC 10), send buffer contents to the Nextion + telnetInputBuffer[telnetInputIndex] = 0; // null terminate our char array + nextionSendCmd(String(telnetInputBuffer)); + telnetInputIndex = 0; + } + else if (telnetInputIndex < telnetInputMax) + { // If we have room left in our buffer add the current byte + telnetInputBuffer[telnetInputIndex] = telnetInputByte; + telnetInputIndex++; + } + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void debugPrintln(const String &debugText) +{ // Debug output line of text to our debug targets + const String debugTimeText = "[+" + String(float(millis()) / 1000, 3) + "s] "; + if (debugSerialEnabled) + { + Serial.print(debugTimeText); + Serial.println(debugText); + SoftwareSerial debugSerial(-1, 1); // -1==nc for RX, 1==TX pin + debugSerial.begin(debugSerialBaud); + debugSerial.print(debugTimeText); + debugSerial.println(debugText); + debugSerial.flush(); + } + if (debugTelnetEnabled) + { + if (telnetClient.connected()) + { + telnetClient.print(debugTimeText); + telnetClient.println(debugText); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void debugPrint(const String &debugText) +{ // Debug output a string to our debug targets. + // Try to avoid using this function if at all possible. When connected to telnet, printing each + // character requires a full TCP round-trip + acknowledgement back and execution halts while this + // happens. Far better to put everything into a line and send it all out in one packet using + // debugPrintln. + if (debugSerialEnabled) + Serial.print(debugText); + { + SoftwareSerial debugSerial(-1, 1); // -1==nc for RX, 1==TX pin + debugSerial.begin(debugSerialBaud); + debugSerial.print(debugText); + debugSerial.flush(); + } + if (debugTelnetEnabled) + { + if (telnetClient.connected()) + { + telnetClient.print(debugText); + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void debugPrintCrash() +{ // Debug output line of text to our debug targets + SoftwareSerial debugSerial(-1, 1); // -1==nc for RX, 1==TX pin + debugSerial.begin(debugSerialBaud); + SaveCrash.print(debugSerial); + SaveCrash.clear(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +void debugPrintFile(const String &fileName) +{ // Debug output line of text to our debug targets + File debugFile = SPIFFS.open(fileName, "r"); + if (debugFile) + { + uint16_t lineCount = 1; + while (debugFile.available()) + { + debugPrintln(F("SPIFFS: file:") + fileName + F(" line:") + String(lineCount) + F(" data:") + debugFile.readStringUntil('\n')); + lineCount++; + } + debugFile.close(); + } + else + { + debugPrintln("SPIFFS: Error opening file for read: " + fileName); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Submitted by benmprojects to handle "beep" commands. Split +// incoming String by separator, return selected field as String +// Original source: https://arduino.stackexchange.com/a/1237 +String getSubtringField(String data, char separator, int index) +{ + int found = 0; + int strIndex[] = {0, -1}; + int maxIndex = data.length(); + + for (int i = 0; i <= maxIndex && found <= index; i++) + { + if (data.charAt(i) == separator || i == maxIndex) + { + found++; + strIndex[0] = strIndex[1] + 1; + strIndex[1] = (i == maxIndex) ? i + 1 : i; + } + } + return found > index ? data.substring(strIndex[0], strIndex[1]) : ""; +} + +//////////////////////////////////////////////////////////////////////////////// +String printHex8(byte *data, uint8_t length) +{ // returns input bytes as printable hex values in the format 0x01 0x23 0xFF + + String hex8String; + for (int i = 0; i < length; i++) + { + hex8String += "0x"; + if (data[i] < 0x10) + { + hex8String += "0"; + } + hex8String += String(data[i], HEX); + if (i != (length - 1)) + { + hex8String += " "; + } + } + // hex8String.toUpperCase(); + return hex8String; +} diff --git a/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf b/Arduino_Sketch/debug/HASwitchPlate.ino.d1_mini.elf index f09d977b06c154b68f105007961ce5fb28b721d0..2b3fc82f928ae1b5e702ff2919007a3d355e5217 100644 GIT binary patch delta 945020 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