Hendrik Langer
7 years ago
2 changed files with 135 additions and 0 deletions
@ -0,0 +1,82 @@ |
|||||
|
#include "XD0OTA.h" |
||||
|
|
||||
|
XD0OTA::XD0OTA() { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
String XD0OTA::getMAC() { |
||||
|
uint8_t mac[6]; |
||||
|
char result[14]; |
||||
|
|
||||
|
WiFi.macAddress( mac ); |
||||
|
snprintf( result, sizeof( result ), "%02x%02x%02x%02x%02x%02x", mac[ 0 ], mac[ 1 ], mac[ 2 ], mac[ 3 ], mac[ 4 ], mac[ 5 ] ); |
||||
|
|
||||
|
return String( result ); |
||||
|
} |
||||
|
|
||||
|
void XD0OTA::update(void) { |
||||
|
|
||||
|
int newVersion = checkForUpdates(); |
||||
|
|
||||
|
if( newVersion > FW_VERSION ) { |
||||
|
Serial.println( "Preparing to update." ); |
||||
|
|
||||
|
String mac = getMAC(); |
||||
|
String fwURL = String( fwUrlBase ); |
||||
|
fwURL.concat( mac ); |
||||
|
String fwImageURL = fwURL; |
||||
|
fwImageURL.concat( ".bin" ); |
||||
|
|
||||
|
t_httpUpdate_return ret = ESPhttpUpdate.update( fwImageURL ); |
||||
|
|
||||
|
switch(ret) { |
||||
|
case HTTP_UPDATE_FAILED: |
||||
|
Serial.printf("HTTP_UPDATE_FAILED Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str()); |
||||
|
break; |
||||
|
case HTTP_UPDATE_NO_UPDATES: |
||||
|
Serial.println("HTTP_UPDATE_NO_UPDATES"); |
||||
|
break; |
||||
|
case HTTP_UPDATE_OK: |
||||
|
Serial.println("[update] Update ok."); // may not called we reboot the ESP
|
||||
|
break; |
||||
|
} |
||||
|
} else { |
||||
|
Serial.println( "Already on latest version" ); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
int XD0OTA::checkForUpdates() { |
||||
|
int newVersion = -1; |
||||
|
|
||||
|
String mac = getMAC(); |
||||
|
String fwURL = String( fwUrlBase ); |
||||
|
fwURL.concat( mac ); |
||||
|
String fwVersionURL = fwURL; |
||||
|
fwVersionURL.concat( ".version" ); |
||||
|
|
||||
|
Serial.println( "Checking for firmware updates." ); |
||||
|
Serial.print( "MAC address: " ); |
||||
|
Serial.println( mac ); |
||||
|
Serial.print( "Firmware version URL: " ); |
||||
|
Serial.println( fwVersionURL ); |
||||
|
|
||||
|
HTTPClient httpClient; |
||||
|
httpClient.begin( fwVersionURL ); |
||||
|
int httpCode = httpClient.GET(); |
||||
|
if( httpCode == 200 ) { |
||||
|
String newFWVersion = httpClient.getString(); |
||||
|
|
||||
|
Serial.print( "Current firmware version: " ); |
||||
|
Serial.println( FW_VERSION ); |
||||
|
Serial.print( "Available firmware version: " ); |
||||
|
Serial.println( newFWVersion ); |
||||
|
|
||||
|
newVersion = newFWVersion.toInt(); |
||||
|
} else { |
||||
|
Serial.print( "Firmware version check failed, got HTTP response code " ); |
||||
|
Serial.println( httpCode ); |
||||
|
newVersion = -1; |
||||
|
} |
||||
|
httpClient.end(); |
||||
|
return newVersion; |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
#ifndef _XD0OTA_H |
||||
|
#define _XD0OTA_H |
||||
|
|
||||
|
#include <Arduino.h> |
||||
|
|
||||
|
#include <ESP8266HTTPClient.h> |
||||
|
#include <ESP8266httpUpdate.h> |
||||
|
|
||||
|
const int FW_VERSION = 10; |
||||
|
const char* httpsFingerprint = "37 42 61 B9 E6 EE 22 36 D1 59 67 7D 55 53 6E A4 C7 AA 60 26"; |
||||
|
|
||||
|
class XD0OTA { |
||||
|
public: |
||||
|
XD0OTA(); |
||||
|
void update(void); |
||||
|
int checkForUpdates(); |
||||
|
private: |
||||
|
const char* fwUrlBase = "https://fwupdate.xd0.de/fota/"; |
||||
|
String getMAC(); |
||||
|
}; |
||||
|
|
||||
|
#endif /* _XD0OTA_H */ |
||||
|
|
||||
|
|
||||
|
/*
|
||||
|
|
||||
|
openssl req -x509 -nodes -days 18263 -newkey rsa:2048 -keyout /etc/ssl/private/xd0-fwupdate-selfsigned.key -out /etc/ssl/certs/xd0-fwupdate-selfsigned.crt |
||||
|
|
||||
|
openssl x509 -noout -fingerprint -sha1 -inform pem -in /etc/ssl/certs/xd0-fwupdate-selfsigned.crt |
||||
|
|
||||
|
|
||||
|
server { |
||||
|
listen 443 ssl; |
||||
|
listen [::]:443 ssl; |
||||
|
server_name fwupdate.xd0.de; |
||||
|
|
||||
|
# SSL configuration |
||||
|
ssl_certificate /etc/ssl/certs/xd0-fwupdate-selfsigned.crt; |
||||
|
ssl_certificate_key /etc/ssl/private/xd0-fwupdate-selfsigned.key; |
||||
|
|
||||
|
root /var/www/fwupdate; |
||||
|
|
||||
|
location / { |
||||
|
# First attempt to serve request as file, then |
||||
|
# as directory, then fall back to displaying a 404. |
||||
|
try_files $uri $uri/ =404; |
||||
|
} |
||||
|
|
||||
|
access_log /var/log/nginx/fwupdate_access.log; |
||||
|
error_log /var/log/nginx/fwupdate_error.log; |
||||
|
} |
||||
|
|
||||
|
*/ |
Loading…
Reference in new issue