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/platformio.ini | 7 +-- oliver/dr_desk/src/dr_desk.cpp | 89 ++++++++++++++++++++++++------------ oliver/lr_stripes/platformio.ini | 7 +-- oliver/lr_stripes/src/lr_stripes.cpp | 85 ++++++++++++++++++++++------------ 4 files changed, 118 insertions(+), 70 deletions(-) (limited to 'oliver') diff --git a/oliver/dr_desk/platformio.ini b/oliver/dr_desk/platformio.ini index 0f31fed..9ad2883 100644 --- a/oliver/dr_desk/platformio.ini +++ b/oliver/dr_desk/platformio.ini @@ -14,8 +14,5 @@ env_default = nodemcuv2 platform = espressif8266 board = nodemcuv2 framework = arduino -;upload_flags = --port=8266 --auth=ESP8266_PASSWORD -;upload_port = IP (Set fixed IP in your router first!!!) - -[platformio] -lib_dir=/home/manuel/coding/Arduino/libraries +monitor_speed = 115200 +upload_speed = 115200 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) { diff --git a/oliver/lr_stripes/platformio.ini b/oliver/lr_stripes/platformio.ini index 0f31fed..9ad2883 100644 --- a/oliver/lr_stripes/platformio.ini +++ b/oliver/lr_stripes/platformio.ini @@ -14,8 +14,5 @@ env_default = nodemcuv2 platform = espressif8266 board = nodemcuv2 framework = arduino -;upload_flags = --port=8266 --auth=ESP8266_PASSWORD -;upload_port = IP (Set fixed IP in your router first!!!) - -[platformio] -lib_dir=/home/manuel/coding/Arduino/libraries +monitor_speed = 115200 +upload_speed = 115200 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