From 7b92ff758d09fd6a91a8dcc8859534c88b6f7883 Mon Sep 17 00:00:00 2001 From: manuel Date: Sun, 1 Mar 2020 23:58:12 +0100 Subject: Migrate to HTTPUpdater --- oliver/dr_desk/src/dr_desk.cpp | 89 ++++++++++++++++++++++++++++-------------- 1 file changed, 59 insertions(+), 30 deletions(-) (limited to 'oliver/dr_desk/src') diff --git a/oliver/dr_desk/src/dr_desk.cpp b/oliver/dr_desk/src/dr_desk.cpp index 46bf8eb..6f31b76 100644 --- a/oliver/dr_desk/src/dr_desk.cpp +++ b/oliver/dr_desk/src/dr_desk.cpp @@ -1,15 +1,16 @@ #include #include -#include #include #include #include +#include #include "secrets.h" -const char* autoconf_ssid = AUTOCONF_SSID; //AP name for WiFi setup AP which your ESP will open when not able to connect to other WiFi -const char* autoconf_pwd = AUTOCONF_PASSWORD; // AP password so noone else can connect to the ESP in case your router fails -const char* mqtt_server = "192.168.1.2"; //MQTT Server IP, your home MQTT server eg Mosquitto on RPi, or some public MQTT -const int mqtt_port = 1883; //MQTT Server PORT, default is 1883 but can be anything. +#define _STR(s) #s +#define STR(s) _STR(s) + +const char* mqtt_server = "192.168.1.2"; //MQTT Server IP, your home MQTT server eg Mosquitto on RPi, or some public MQTT +const int mqtt_port = 1883; //MQTT Server PORT, default is 1883 but can be anything. const char* mqtt_pingall_sub = "home/pingall"; const char* mqtt_pingall_pub = "home/pingall/response"; @@ -32,11 +33,18 @@ const char* mqtt_brightness_pub = MQTT_BASE "/brightness/status"; #define RGB_COLOR_ORDER GRB #define NUM(a) (sizeof(a) / sizeof(*a)) +#define FIRMWARE_VERSION 1 +//#define FIRMWARE_URL "" + WiFiClient espClient; PubSubClient client(espClient); char convBuffer[10]; CRGB leds[RGB_NUM_LEDS]; +void callback(char *topic, uint8_t *payload, unsigned int length); +void blink(); +void checkFirmwareUpdate(); + void switchMode(struct mode *mode); void modeOff(); void modeSolid(); @@ -73,7 +81,7 @@ struct void setup() { Serial.begin(115200); - pinMode(BUILTIN_LED, OUTPUT); + pinMode(LED_BUILTIN, OUTPUT); FastLED.addLeds(leds, RGB_NUM_LEDS); current.brightness = set.brightness; @@ -82,32 +90,22 @@ void setup() FastLED.show(); WiFiManager wifiManager; - wifiManager.autoConnect(autoconf_ssid, autoconf_pwd); + wifiManager.setConfigPortalTimeout(600); + Serial.printf_P(PSTR("Setting up WiFi\n")); + if (!wifiManager.autoConnect("ESP8266_DR_DESK")) { + Serial.printf_P(PSTR("Failed to connect and hit timeout\n")); + delay(5000); + ESP.restart(); + } - setup_ota(); + yield(); + checkFirmwareUpdate(); + yield(); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); - digitalWrite(BUILTIN_LED, HIGH); //Turn off led as default -} - -void setup_ota() -{ - // Set OTA Password, and change it in platformio.ini - ArduinoOTA.setPassword(OTA_PASSWORD); - ArduinoOTA.onStart([]() {}); - ArduinoOTA.onEnd([]() {}); - ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {}); - ArduinoOTA.onError([](ota_error_t error) - { - if (error == OTA_AUTH_ERROR); // Auth failed - else if (error == OTA_BEGIN_ERROR); // Begin failed - else if (error == OTA_CONNECT_ERROR); // Connect failed - else if (error == OTA_RECEIVE_ERROR); // Receive failed - else if (error == OTA_END_ERROR); // End failed - }); - ArduinoOTA.begin(); + digitalWrite(LED_BUILTIN, HIGH); //Turn off led as default } void reconnect() @@ -195,9 +193,9 @@ void callback(char *topic, uint8_t *payload, unsigned int length) void blink() { //Blink on received MQTT message - digitalWrite(BUILTIN_LED, LOW); + digitalWrite(LED_BUILTIN, LOW); delay(25); - digitalWrite(BUILTIN_LED, HIGH); + digitalWrite(LED_BUILTIN, HIGH); } void calcBrightness() @@ -267,12 +265,43 @@ void modeStrobo() state = !state; } +void checkFirmwareUpdate() +{ + BearSSL::WiFiClientSecure update_client; + update_client.setInsecure(); + + client.publish(mqtt_device_boot, "fwupdate running"); + ESPhttpUpdate.setLedPin(LED_BUILTIN, HIGH); + ESPhttpUpdate.rebootOnUpdate(true); + t_httpUpdate_return ret = ESPhttpUpdate.update(update_client, FIRMWARE_URL, STR(FIRMWARE_VERSION)); + switch(ret) + { + case HTTP_UPDATE_FAILED: + { + Serial.printf_P(PSTR("HTTP_UPDATE_FAILED Error (%d): %s\n"), + ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); + String tmp = String("fwupdate error: ") + ESPhttpUpdate.getLastErrorString(); + client.publish(mqtt_device_boot, tmp.c_str()); + } + break; + + case HTTP_UPDATE_NO_UPDATES: + Serial.printf_P(PSTR("HTTP_UPDATE_NO_UPDATES\n")); + client.publish(mqtt_device_boot, "fwupdate noupdates"); + break; + + case HTTP_UPDATE_OK: + Serial.printf_P(PSTR("HTTP_UPDATE_OK\n")); + client.publish(mqtt_device_boot, "fwupdate ok"); + break; + } +} + void loop() { if (!client.connected()) reconnect(); client.loop(); - ArduinoOTA.handle(); EVERY_N_MILLISECONDS(100) { -- cgit v1.2.3