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/lr_stripes/src/lr_stripes.cpp | 85 +++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 30 deletions(-) (limited to 'oliver/lr_stripes/src/lr_stripes.cpp') diff --git a/oliver/lr_stripes/src/lr_stripes.cpp b/oliver/lr_stripes/src/lr_stripes.cpp index 7059f8b..6ad4282 100644 --- a/oliver/lr_stripes/src/lr_stripes.cpp +++ b/oliver/lr_stripes/src/lr_stripes.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"; @@ -81,17 +82,20 @@ WiFiClient espClient; PubSubClient client(espClient); char convBuffer[10]; +void callback(char* topic, byte* payload, unsigned int length); +void blink(); bool relayRead(struct sensor_t *sensor); void relayWrite(struct sensor_t *sensor, bool state, bool send_update=false); void flipRelay(struct sensor_t *sensor, bool send_update=false); void checkButtons(void); inline uint8_t pwmValue(uint8_t level); void fadeDimmer(struct sensor_t *sensor, uint8_t level, bool send_update=false); +void checkFirmwareUpdate(); void setup() { Serial.begin(115200); - pinMode(BUILTIN_LED, OUTPUT); + pinMode(LED_BUILTIN, OUTPUT); analogWriteRange(100); // set relay pins to output mode + restore to last known state @@ -129,32 +133,22 @@ void setup() } WiFiManager wifiManager; - wifiManager.autoConnect(autoconf_ssid, autoconf_pwd); + wifiManager.setConfigPortalTimeout(600); + Serial.printf_P(PSTR("Setting up WiFi\n")); + if (!wifiManager.autoConnect("ESP8266_LR_STRIPES")) { + 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() @@ -244,9 +238,9 @@ void callback(char* topic, byte* 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 loop() @@ -254,7 +248,6 @@ void loop() if (!client.connected()) reconnect(); client.loop(); - ArduinoOTA.handle(); checkButtons(); } @@ -367,3 +360,35 @@ void fadeDimmer(struct sensor_t *sensor, uint8_t level, bool send_update) client.publish(sensor->dimmer.mqtt_pub, convBuffer, true); } } + +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; + } +} -- cgit v1.2.3