mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-30 21:51:52 +00:00
Added DNS to static IP config. Added hostname to config. Added mDNS
This commit is contained in:
@@ -45,10 +45,39 @@ void AmsConfiguration::setWifiSubnet(String wifiSubnet) {
|
||||
this->wifiSubnet = String(wifiSubnet);
|
||||
}
|
||||
|
||||
String AmsConfiguration::getWifiDns1() {
|
||||
return wifiDns1;
|
||||
}
|
||||
|
||||
void AmsConfiguration::setWifiDns1(String wifiDns1) {
|
||||
wifiChanged |= this->wifiDns1 != wifiDns1;
|
||||
this->wifiDns1 = wifiDns1;
|
||||
}
|
||||
|
||||
String AmsConfiguration::getWifiDns2() {
|
||||
return wifiDns2;
|
||||
}
|
||||
|
||||
void AmsConfiguration::setWifiDns2(String wifiDns2) {
|
||||
wifiChanged |= this->wifiDns2 != wifiDns2;
|
||||
this->wifiDns2 = wifiDns2;
|
||||
}
|
||||
|
||||
String AmsConfiguration::getWifiHostname() {
|
||||
return wifiHostname;
|
||||
}
|
||||
|
||||
void AmsConfiguration::setWifiHostname(String wifiHostname) {
|
||||
wifiChanged |= this->wifiHostname != wifiHostname;
|
||||
this->wifiHostname = wifiHostname;
|
||||
}
|
||||
|
||||
void AmsConfiguration::clearWifiIp() {
|
||||
setWifiIp("");
|
||||
setWifiGw("");
|
||||
setWifiSubnet("");
|
||||
setWifiDns1("");
|
||||
setWifiDns2("");
|
||||
}
|
||||
|
||||
bool AmsConfiguration::isWifiChanged() {
|
||||
@@ -214,9 +243,11 @@ void AmsConfiguration::setProductionCapacity(int productionCapacity) {
|
||||
|
||||
|
||||
bool AmsConfiguration::hasConfig() {
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
int configVersion = EEPROM.read(EEPROM_CONFIG_ADDRESS);
|
||||
EEPROM.end();
|
||||
if(configVersion == 0) {
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
configVersion = EEPROM.read(EEPROM_CONFIG_ADDRESS);
|
||||
EEPROM.end();
|
||||
}
|
||||
switch(configVersion) {
|
||||
case 71:
|
||||
case 72:
|
||||
@@ -229,6 +260,10 @@ bool AmsConfiguration::hasConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
int AmsConfiguration::getConfigVersion() {
|
||||
return configVersion;
|
||||
}
|
||||
|
||||
bool AmsConfiguration::load() {
|
||||
int address = EEPROM_CONFIG_ADDRESS;
|
||||
bool success = false;
|
||||
@@ -451,13 +486,23 @@ bool AmsConfiguration::loadConfig81(int address) {
|
||||
setWifiSsid(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiPassword(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiIp(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiGw(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiSubnet(temp);
|
||||
|
||||
bool staticIp = false;
|
||||
address += readBool(address, &staticIp);
|
||||
if(staticIp) {
|
||||
address += readString(address, &temp);
|
||||
setWifiIp(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiGw(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiSubnet(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiDns1(temp);
|
||||
address += readString(address, &temp);
|
||||
setWifiDns2(temp);
|
||||
}
|
||||
address += readString(address, &temp);
|
||||
setWifiHostname(temp);
|
||||
bool mqtt = false;
|
||||
address += readBool(address, &mqtt);
|
||||
if(mqtt) {
|
||||
@@ -526,17 +571,25 @@ bool AmsConfiguration::save() {
|
||||
|
||||
address += saveString(address, wifiSsid.c_str());
|
||||
address += saveString(address, wifiPassword.c_str());
|
||||
address += saveString(address, wifiIp.c_str());
|
||||
address += saveString(address, wifiGw.c_str());
|
||||
address += saveString(address, wifiSubnet.c_str());
|
||||
if(mqttHost) {
|
||||
if(!wifiIp.isEmpty()) {
|
||||
address += saveBool(address, true);
|
||||
address += saveString(address, wifiIp.c_str());
|
||||
address += saveString(address, wifiGw.c_str());
|
||||
address += saveString(address, wifiSubnet.c_str());
|
||||
address += saveString(address, wifiDns1.c_str());
|
||||
address += saveString(address, wifiDns2.c_str());
|
||||
} else {
|
||||
address += saveBool(address, false);
|
||||
}
|
||||
address += saveString(address, wifiHostname.c_str());
|
||||
if(!mqttHost.isEmpty()) {
|
||||
address += saveBool(address, true);
|
||||
address += saveString(address, mqttHost.c_str());
|
||||
address += saveInt(address, mqttPort);
|
||||
address += saveString(address, mqttClientId.c_str());
|
||||
address += saveString(address, mqttPublishTopic.c_str());
|
||||
address += saveString(address, mqttSubscribeTopic.c_str());
|
||||
if (mqttUser) {
|
||||
if (!mqttUser.isEmpty()) {
|
||||
address += saveBool(address, true);
|
||||
address += saveString(address, mqttUser.c_str());
|
||||
address += saveString(address, mqttPassword.c_str());
|
||||
@@ -562,6 +615,8 @@ bool AmsConfiguration::save() {
|
||||
bool success = EEPROM.commit();
|
||||
EEPROM.end();
|
||||
|
||||
configVersion = EEPROM_CHECK_SUM;
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
@@ -656,13 +711,15 @@ void AmsConfiguration::print(Stream* debugger)
|
||||
debugger->printf("WiFi SSID: %s\r\n", this->getWifiSsid().c_str());
|
||||
debugger->printf("WiFi Psk: %s\r\n", this->getWifiPassword().c_str());
|
||||
|
||||
if(getWifiIp()) {
|
||||
if(!getWifiIp().isEmpty()) {
|
||||
debugger->printf("IP: %s\r\n", this->getWifiIp().c_str());
|
||||
debugger->printf("Gateway: %s\r\n", this->getWifiGw().c_str());
|
||||
debugger->printf("Subnet: %s\r\n", this->getWifiSubnet().c_str());
|
||||
debugger->printf("Subnet: %s\r\n", this->getWifiSubnet().c_str());
|
||||
debugger->printf("Primary DNS: %s\r\n", this->getWifiDns1().c_str());
|
||||
debugger->printf("Secondary DNS: %s\r\n", this->getWifiDns2().c_str());
|
||||
}
|
||||
|
||||
if(getMqttHost()) {
|
||||
if(!getMqttHost().isEmpty()) {
|
||||
debugger->printf("mqttHost: %s\r\n", this->getMqttHost().c_str());
|
||||
debugger->printf("mqttPort: %i\r\n", this->getMqttPort());
|
||||
debugger->printf("mqttClientID: %s\r\n", this->getMqttClientId().c_str());
|
||||
@@ -673,6 +730,7 @@ void AmsConfiguration::print(Stream* debugger)
|
||||
debugger->printf("mqttUser: %s\r\n", this->getMqttUser().c_str());
|
||||
debugger->printf("mqttPass: %s\r\n", this->getMqttPassword().c_str());
|
||||
}
|
||||
debugger->printf("payload format: %i\r\n", this->getMqttPayloadFormat());
|
||||
}
|
||||
|
||||
if (this->getAuthSecurity()) {
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
class AmsConfiguration {
|
||||
public:
|
||||
bool hasConfig();
|
||||
int getConfigVersion();
|
||||
|
||||
bool load();
|
||||
bool save();
|
||||
|
||||
@@ -19,6 +21,12 @@ public:
|
||||
void setWifiGw(String wifiGw);
|
||||
String getWifiSubnet();
|
||||
void setWifiSubnet(String wifiSubnet);
|
||||
String getWifiDns1();
|
||||
void setWifiDns1(String wifiDns1);
|
||||
String getWifiDns2();
|
||||
void setWifiDns2(String wifiDns1);
|
||||
String getWifiHostname();
|
||||
void setWifiHostname(String wifiHostname);
|
||||
void clearWifiIp();
|
||||
|
||||
bool isWifiChanged();
|
||||
@@ -67,11 +75,16 @@ public:
|
||||
protected:
|
||||
|
||||
private:
|
||||
int configVersion;
|
||||
|
||||
String wifiSsid;
|
||||
String wifiPassword;
|
||||
String wifiIp;
|
||||
String wifiGw;
|
||||
String wifiSubnet;
|
||||
String wifiDns1;
|
||||
String wifiDns2;
|
||||
String wifiHostname;
|
||||
bool wifiChanged;
|
||||
|
||||
String mqttHost;
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
|
||||
#if defined(ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266mDNS.h>
|
||||
#elif defined(ESP32)
|
||||
#include <WiFi.h>
|
||||
#include <ESPmDNS.h>
|
||||
#include "SPIFFS.h"
|
||||
#include "Update.h"
|
||||
#endif
|
||||
|
||||
@@ -166,6 +166,16 @@ void setup() {
|
||||
}
|
||||
}
|
||||
|
||||
if(config.getConfigVersion() < 81) {
|
||||
uint16_t chipId;
|
||||
#if defined(ARDUINO_ARCH_ESP32)
|
||||
chipId = ESP.getEfuseMac();
|
||||
#else
|
||||
chipId = ESP.getChipId();
|
||||
#endif
|
||||
config.setWifiHostname(String("ams-") + String(chipId, HEX));
|
||||
}
|
||||
|
||||
if(config.hasConfig()) {
|
||||
if(debugger) config.print(debugger);
|
||||
WiFi_connect();
|
||||
@@ -285,6 +295,10 @@ void loop() {
|
||||
if(debugger) {
|
||||
debugger->println("Successfully connected to WiFi!");
|
||||
debugger->println(WiFi.localIP());
|
||||
if(!config.getWifiHostname().isEmpty()) {
|
||||
MDNS.begin(config.getWifiHostname().c_str());
|
||||
MDNS.addService("http", "tcp", 80);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!config.getMqttHost().isEmpty()) {
|
||||
@@ -573,17 +587,27 @@ void WiFi_connect() {
|
||||
}
|
||||
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
MDNS.end();
|
||||
WiFi.disconnect();
|
||||
yield();
|
||||
|
||||
WiFi.enableAP(false);
|
||||
WiFi.mode(WIFI_STA);
|
||||
if(!config.getWifiIp().isEmpty()) {
|
||||
IPAddress ip, gw, sn(255,255,255,0);
|
||||
IPAddress ip, gw, sn(255,255,255,0), dns1, dns2;
|
||||
ip.fromString(config.getWifiIp());
|
||||
gw.fromString(config.getWifiGw());
|
||||
sn.fromString(config.getWifiSubnet());
|
||||
WiFi.config(ip, gw, sn);
|
||||
dns1.fromString(config.getWifiDns1());
|
||||
dns2.fromString(config.getWifiDns2());
|
||||
WiFi.config(ip, gw, sn, dns1, dns2);
|
||||
}
|
||||
if(!config.getWifiHostname().isEmpty()) {
|
||||
#if defined(ESP8266)
|
||||
WiFi.hostname(config.getWifiHostname());
|
||||
#elif defined(ESP32)
|
||||
WiFi.setHostname(config.getWifiHostname().c_str());
|
||||
#endif
|
||||
}
|
||||
WiFi.begin(config.getWifiSsid().c_str(), config.getWifiPassword().c_str());
|
||||
yield();
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#include "root/configmqtt_html.h"
|
||||
#include "root/configweb_html.h"
|
||||
#include "root/configsystem_html.h"
|
||||
#include "root/firmwarewait_html.h"
|
||||
#include "root/restartwait_html.h"
|
||||
#include "root/boot_css.h"
|
||||
#include "root/gaugemeter_js.h"
|
||||
|
||||
@@ -32,7 +32,8 @@ void AmsWebServer::setup(AmsConfiguration* config, Stream* debugger, MQTTClient*
|
||||
|
||||
server.on("/config-system", HTTP_GET, std::bind(&AmsWebServer::configSystemHtml, this));
|
||||
server.on("/config-system", HTTP_POST, std::bind(&AmsWebServer::configSystemPost, this), std::bind(&AmsWebServer::configSystemUpload, this));
|
||||
server.on("/firmware-wait", HTTP_GET, std::bind(&AmsWebServer::firmwareWaitHtml, this));
|
||||
server.on("/restart-wait", HTTP_GET, std::bind(&AmsWebServer::restartWaitHtml, this));
|
||||
server.on("/is-alive", HTTP_GET, std::bind(&AmsWebServer::isAliveCheck, this));
|
||||
|
||||
server.begin(); // Web server start
|
||||
}
|
||||
@@ -209,6 +210,9 @@ void AmsWebServer::configWifiHtml() {
|
||||
html.replace("${config.wifiIp}", config->getWifiIp());
|
||||
html.replace("${config.wifiGw}", config->getWifiGw());
|
||||
html.replace("${config.wifiSubnet}", config->getWifiSubnet());
|
||||
html.replace("${config.wifiDns1}", config->getWifiDns1());
|
||||
html.replace("${config.wifiDns2}", config->getWifiDns2());
|
||||
html.replace("${config.wifiHostname}", config->getWifiHostname());
|
||||
|
||||
server.setContentLength(html.length());
|
||||
server.send(200, "text/html", html);
|
||||
@@ -462,9 +466,12 @@ void AmsWebServer::handleSave() {
|
||||
config->setWifiIp(server.arg("wifiIp"));
|
||||
config->setWifiGw(server.arg("wifiGw"));
|
||||
config->setWifiSubnet(server.arg("wifiSubnet"));
|
||||
config->setWifiDns1(server.arg("wifiDns1"));
|
||||
config->setWifiDns2(server.arg("wifiDns2"));
|
||||
} else {
|
||||
config->clearWifiIp();
|
||||
}
|
||||
config->setWifiHostname(server.arg("wifiHostname"));
|
||||
}
|
||||
|
||||
if(server.hasArg("mqttConfig") && server.arg("mqttConfig") == "true") {
|
||||
@@ -499,19 +506,12 @@ void AmsWebServer::handleSave() {
|
||||
if (config->save()) {
|
||||
println("Successfully saved.");
|
||||
if(config->isWifiChanged()) {
|
||||
String html = "<html><body><h1>Successfully Saved!</h1><a href=\"/\">Go to index</a></form>";
|
||||
server.send(200, "text/html", html);
|
||||
yield();
|
||||
println("Wifi config changed, rebooting");
|
||||
delay(1000);
|
||||
#if defined(ESP8266)
|
||||
ESP.reset();
|
||||
#elif defined(ESP32)
|
||||
ESP.restart();
|
||||
#endif
|
||||
performRestart = true;
|
||||
server.sendHeader("Location","/restart-wait");
|
||||
server.send(303);
|
||||
} else {
|
||||
server.sendHeader("Location", String("/"), true);
|
||||
server.send ( 302, "text/plain", "");
|
||||
server.send (302, "text/plain", "");
|
||||
}
|
||||
} else {
|
||||
println("Error saving configuration");
|
||||
@@ -567,7 +567,8 @@ void AmsWebServer::configSystemUpload() {
|
||||
firmwareFile.close();
|
||||
SPIFFS.end();
|
||||
print("handleFileUpload Size: "); println(String(upload.totalSize).c_str());
|
||||
server.sendHeader("Location","/firmware-wait");
|
||||
performRestart = true;
|
||||
server.sendHeader("Location","/restart-wait");
|
||||
server.send(303);
|
||||
} else {
|
||||
server.send(500, "text/plain", "500: couldn't create file");
|
||||
@@ -575,18 +576,24 @@ void AmsWebServer::configSystemUpload() {
|
||||
}
|
||||
}
|
||||
|
||||
void AmsWebServer::firmwareWaitHtml() {
|
||||
println("Serving /firmware-wait.html over http...");
|
||||
void AmsWebServer::restartWaitHtml() {
|
||||
println("Serving /restart-wait.html over http...");
|
||||
|
||||
if(!checkSecurity(1))
|
||||
return;
|
||||
|
||||
String html = String((const __FlashStringHelper*) FIRMWAREWAIT_HTML);
|
||||
String html = String((const __FlashStringHelper*) RESTARTWAIT_HTML);
|
||||
html.replace("${version}", VERSION);
|
||||
|
||||
if(WiFi.getMode() != WIFI_AP) {
|
||||
html.replace("boot.css", BOOTSTRAP_URL);
|
||||
}
|
||||
if(config->getWifiIp().isEmpty() && WiFi.getMode() != WIFI_AP) {
|
||||
html.replace("${ip}", WiFi.localIP().toString());
|
||||
} else {
|
||||
html.replace("${ip}", config->getWifiIp());
|
||||
}
|
||||
html.replace("${hostname}", config->getWifiHostname());
|
||||
|
||||
server.sendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
server.sendHeader("Pragma", "no-cache");
|
||||
@@ -595,7 +602,7 @@ void AmsWebServer::firmwareWaitHtml() {
|
||||
server.send(200, "text/html", html);
|
||||
|
||||
yield();
|
||||
if(SPIFFS.begin() && SPIFFS.exists("/firmware.bin")) {
|
||||
if(performRestart) {
|
||||
SPIFFS.end();
|
||||
println("Firmware uploaded, rebooting");
|
||||
delay(1000);
|
||||
@@ -604,9 +611,15 @@ void AmsWebServer::firmwareWaitHtml() {
|
||||
#elif defined(ESP32)
|
||||
ESP.restart();
|
||||
#endif
|
||||
performRestart = false;
|
||||
}
|
||||
}
|
||||
|
||||
void AmsWebServer::isAliveCheck() {
|
||||
server.sendHeader("Access-Control-Allow-Origin", "*");
|
||||
server.send(200);
|
||||
}
|
||||
|
||||
size_t AmsWebServer::print(const char* text)
|
||||
{
|
||||
if (debugger) debugger->print(text);
|
||||
|
||||
@@ -43,6 +43,7 @@ private:
|
||||
Stream* debugger;
|
||||
MQTTClient* mqtt;
|
||||
File firmwareFile;
|
||||
bool performRestart = false;
|
||||
|
||||
#if defined(ESP8266)
|
||||
ESP8266WebServer server;
|
||||
@@ -66,7 +67,8 @@ private:
|
||||
void configSystemHtml();
|
||||
void configSystemPost();
|
||||
void configSystemUpload();
|
||||
void firmwareWaitHtml();
|
||||
void restartWaitHtml();
|
||||
void isAliveCheck();
|
||||
|
||||
size_t print(const char* text);
|
||||
size_t println(const char* text);
|
||||
|
||||
Reference in New Issue
Block a user