Browse Source

OTA does not need a reboot anymore

sonoff
Mathieu Maret 5 years ago
parent
commit
f4541a6fd6
  1. 4
      Updater.py
  2. 4
      WifiControlSensor/EEPROM.ino
  3. 13
      WifiControlSensor/WebServer.ino
  4. 19
      WifiControlSensor/WifiControlSensor.ino
  5. 2
      WifiControlSensor/config_device.h

4
Updater.py

@ -26,11 +26,9 @@ class Updater(Thread):
try:
print("Put device in OTA mode")
urllib.request.urlopen("http://" + self.ip + "/otamode").read()
urllib.request.urlopen("http://" + self.ip + "/reboot").read()
self.gui.pb["value"] = 2
print("Waiting for device to reboot")
time.sleep(10)
print("Uploading new firmware")
self.gui.pb["value"] = 3
subprocess.call(["python", "espota.py", "-i",

4
WifiControlSensor/EEPROM.ino

@ -64,8 +64,10 @@ void EepromReadConfig(productConfig &config) {
char *tmpString;
if (boot == '1') {
config.bootMode = BOOTMODE_NORMAL;
config.bootMode = BOOTMODE_SETUP;
} else if (boot == '2') {
config.bootMode = BOOTMODE_NORMAL;
} else if (boot == '3') {
config.bootMode = BOOTMODE_OTA;
} else {
//Do not need to parse EEPROM when not configured

13
WifiControlSensor/WebServer.ino

@ -176,7 +176,8 @@ void WebHandleSave() {
//In STA mode, we can test the AP connection
WiFi.begin(server.arg("ssid").c_str(), server.arg("password").c_str());
server.send(200, "text/html", "<h1>Configuration Saved</h1><br/>"
"<a href=\"/wifiStatus\">Check Wifi Configuration</a><br/>");
"<a href=\"/wifiStatus\">Check Wifi Configuration</a><br/>"
"<a href=\"/reboot\">Reboot</a><br/>");
}else{
server.send(200, "text/html", "<h1>Configuration Saved</h1><br/>"
"<a href=\"/reboot\">Reboot</a><br/>");
@ -184,11 +185,11 @@ void WebHandleSave() {
}
void WebHandleOTA() {
SKETCH_DEBUG_PRINTLN("Boot mode Set to OTA");
EepromSaveBootMode(BOOTMODE_OTA);
server.send(200, "text/html", "<h1>OTA Mode set</h1><br/>"
"You can reboot now<br/>"
"<a href=\"/reboot\">Reboot</a><br/>");
SKETCH_DEBUG_PRINTLN("Activating OTA mode");
server.send(200, "text/html", "<h1>Setting OTA mode</h1><br/>"
"Web ui will be disabled<br/>");
mode = BOOTMODE_OTA;
OTASetup();
}
void WebHandleNotFound() {

19
WifiControlSensor/WifiControlSensor.ino

@ -55,15 +55,15 @@ extern "C" {
}
#define BOOTMODE_SETUP 0
#define BOOTMODE_NORMAL 1
#define BOOTMODE_OTA 2
#define BOOTMODE_SETUP 1
#define BOOTMODE_NORMAL 2
#define BOOTMODE_OTA 3
double temp, pressure;
float dhtTemp, dhtHumidity;
int dryness;
uint8_t mode;
productConfig conf = {BOOTMODE_SETUP, "", "", "", "", "", "", 0, 0, 0, 0, 0, 0, 0};
productConfig conf = {BOOTMODE_SETUP, "", "", "", "", "", "", 1883, 0, 0, 0, 0, 0, 0};
// Should have less that MAXSUBSCRIPTIONS elements
// MAXSUBSCRIPTIONS is defined is Adafruit_mqtt.h
const int gpioControlled[] = CONFIG_CONTROLLED_GPIO;
@ -99,10 +99,9 @@ void onLongButtonPressed(uint8_t pin){
void WifiSetup(productConfig conf) {
IPAddress myIP;
if (conf.bootMode == BOOTMODE_SETUP) {
SKETCH_DEBUG_PRINT("Configuring access point...");
SKETCH_DEBUG_PRINTLN(conf.ssid);
SKETCH_DEBUG_PRINTLN("Configuring access point: "CONFIG_SSID_NAME);
/* You can set a password to the AP here */
WiFi.softAP(conf.ssid);
WiFi.softAP(CONFIG_SSID_NAME);
myIP = WiFi.softAPIP();
} else {
//Disable previous AP mode
@ -144,15 +143,13 @@ void OTASetup() {
// No authentication by default
// ArduinoOTA.setPassword((const char *)"123");
//Disable OTA mode to avoid forever loop
//Force BOOTMODE_SETUP in case eeprom layout have changed
EepromSaveBootMode(BOOTMODE_SETUP);
ArduinoOTA.onStart([]() {
SKETCH_DEBUG_PRINTLN("Start");
});
ArduinoOTA.onEnd([]() {
SKETCH_DEBUG_PRINTLN("\nEnd");
//Force BOOTMODE_SETUP in case eeprom layout have changed
EepromSaveBootMode(BOOTMODE_SETUP);
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
SKETCH_DEBUG_PRINTF("Progress: %u%%\n", (progress / (total / 100)));

2
WifiControlSensor/config_device.h

@ -54,7 +54,7 @@
// GPIO that can be get by mqtt and http
// Pin 6 to 11 and 16 can not be used for mqtt
#define CONFIG_OBSERVED_GPIO {}
#define CONFIG_OBSERVED_GPIO {5}
// GPIO used in PWM
//#define CONFIG_CONTROLLED_PWM {}

Loading…
Cancel
Save