Added configuration of GPIO in UI. Added initial setup page in AP mode. Major changes in storing configuration.

This commit is contained in:
Gunnar Skjold
2020-05-03 16:29:38 +02:00
parent 1ea9da22c7
commit 2858123c1b
23 changed files with 1472 additions and 1232 deletions

View File

@@ -1,75 +1,75 @@
#include "AmsConfiguration.h"
String AmsConfiguration::getWifiSsid() {
return wifiSsid;
char* AmsConfiguration::getWifiSsid() {
return config.wifiSsid;
}
void AmsConfiguration::setWifiSsid(String wifiSsid) {
wifiChanged |= this->wifiSsid != wifiSsid;
this->wifiSsid = String(wifiSsid);
void AmsConfiguration::setWifiSsid(const char* wifiSsid) {
wifiChanged |= strcmp(config.wifiSsid, wifiSsid) != 0;
strcpy(config.wifiSsid, wifiSsid);
}
String AmsConfiguration::getWifiPassword() {
return wifiPassword;
char* AmsConfiguration::getWifiPassword() {
return config.wifiPassword;
}
void AmsConfiguration::setWifiPassword(String wifiPassword) {
wifiChanged |= this->wifiPassword != wifiPassword;
this->wifiPassword = String(wifiPassword);
void AmsConfiguration::setWifiPassword(const char* wifiPassword) {
wifiChanged |= strcmp(config.wifiPassword, wifiPassword) != 0;
strcpy(config.wifiPassword, wifiPassword);
}
String AmsConfiguration::getWifiIp() {
return wifiIp;
char* AmsConfiguration::getWifiIp() {
return config.wifiIp;
}
void AmsConfiguration::setWifiIp(String wifiIp) {
wifiChanged |= this->wifiIp != wifiIp;
this->wifiIp = String(wifiIp);
void AmsConfiguration::setWifiIp(const char* wifiIp) {
wifiChanged |= strcmp(config.wifiIp, wifiIp) != 0;
strcpy(config.wifiIp, wifiIp);
}
String AmsConfiguration::getWifiGw() {
return wifiGw;
char* AmsConfiguration::getWifiGw() {
return config.wifiGw;
}
void AmsConfiguration::setWifiGw(String wifiGw) {
wifiChanged |= this->wifiGw != wifiGw;
this->wifiGw = String(wifiGw);
void AmsConfiguration::setWifiGw(const char* wifiGw) {
wifiChanged |= strcmp(config.wifiGw, wifiGw) != 0;
strcpy(config.wifiGw, wifiGw);
}
String AmsConfiguration::getWifiSubnet() {
return wifiSubnet;
char* AmsConfiguration::getWifiSubnet() {
return config.wifiSubnet;
}
void AmsConfiguration::setWifiSubnet(String wifiSubnet) {
wifiChanged |= this->wifiSubnet != wifiSubnet;
this->wifiSubnet = String(wifiSubnet);
void AmsConfiguration::setWifiSubnet(const char* wifiSubnet) {
wifiChanged |= strcmp(config.wifiSubnet, wifiSubnet) != 0;
strcpy(config.wifiSubnet, wifiSubnet);
}
String AmsConfiguration::getWifiDns1() {
return wifiDns1;
char* AmsConfiguration::getWifiDns1() {
return config.wifiDns1;
}
void AmsConfiguration::setWifiDns1(String wifiDns1) {
wifiChanged |= this->wifiDns1 != wifiDns1;
this->wifiDns1 = wifiDns1;
void AmsConfiguration::setWifiDns1(const char* wifiDns1) {
wifiChanged |= strcmp(config.wifiDns1, wifiDns1) != 0;
strcpy(config.wifiDns1, wifiDns1);
}
String AmsConfiguration::getWifiDns2() {
return wifiDns2;
char* AmsConfiguration::getWifiDns2() {
return config.wifiDns2;
}
void AmsConfiguration::setWifiDns2(String wifiDns2) {
wifiChanged |= this->wifiDns2 != wifiDns2;
this->wifiDns2 = wifiDns2;
void AmsConfiguration::setWifiDns2(const char* wifiDns2) {
wifiChanged |= strcmp(config.wifiDns2, wifiDns2) != 0;
strcpy(config.wifiDns2, wifiDns2);
}
String AmsConfiguration::getWifiHostname() {
return wifiHostname;
char* AmsConfiguration::getWifiHostname() {
return config.wifiHostname;
}
void AmsConfiguration::setWifiHostname(String wifiHostname) {
wifiChanged |= this->wifiHostname != wifiHostname;
this->wifiHostname = wifiHostname;
void AmsConfiguration::setWifiHostname(const char* wifiHostname) {
wifiChanged |= strcmp(config.wifiHostname, wifiHostname) != 0;
strcpy(config.wifiHostname, wifiHostname);
}
void AmsConfiguration::clearWifiIp() {
@@ -89,84 +89,84 @@ void AmsConfiguration::ackWifiChange() {
}
String AmsConfiguration::getMqttHost() {
return mqttHost;
char* AmsConfiguration::getMqttHost() {
return config.mqttHost;
}
void AmsConfiguration::setMqttHost(String mqttHost) {
mqttChanged |= this->mqttHost != mqttHost;
this->mqttHost = String(mqttHost);
void AmsConfiguration::setMqttHost(const char* mqttHost) {
mqttChanged |= strcmp(config.mqttHost, mqttHost) != 0;
strcpy(config.mqttHost, mqttHost);
}
int AmsConfiguration::getMqttPort() {
return mqttPort;
uint16_t AmsConfiguration::getMqttPort() {
return config.mqttPort;
}
void AmsConfiguration::setMqttPort(int mqttPort) {
mqttChanged |= this->mqttPort != mqttPort;
this->mqttPort = mqttPort;
void AmsConfiguration::setMqttPort(uint16_t mqttPort) {
mqttChanged |= config.mqttPort != mqttPort;
config.mqttPort = mqttPort;
}
String AmsConfiguration::getMqttClientId() {
return mqttClientId;
char* AmsConfiguration::getMqttClientId() {
return config.mqttClientId;
}
void AmsConfiguration::setMqttClientId(String mqttClientId) {
mqttChanged |= this->mqttClientId != mqttClientId;
this->mqttClientId = String(mqttClientId);
void AmsConfiguration::setMqttClientId(const char* mqttClientId) {
mqttChanged |= strcmp(config.mqttClientId, mqttClientId) != 0;
strcpy(config.mqttClientId, mqttClientId);
}
String AmsConfiguration::getMqttPublishTopic() {
return mqttPublishTopic;
char* AmsConfiguration::getMqttPublishTopic() {
return config.mqttPublishTopic;
}
void AmsConfiguration::setMqttPublishTopic(String mqttPublishTopic) {
mqttChanged |= this->mqttPublishTopic != mqttPublishTopic;
this->mqttPublishTopic = String(mqttPublishTopic);
void AmsConfiguration::setMqttPublishTopic(const char* mqttPublishTopic) {
mqttChanged |= strcmp(config.mqttPublishTopic, mqttPublishTopic) != 0;
strcpy(config.mqttPublishTopic, mqttPublishTopic);
}
String AmsConfiguration::getMqttSubscribeTopic() {
return mqttSubscribeTopic;
char* AmsConfiguration::getMqttSubscribeTopic() {
return config.mqttSubscribeTopic;
}
void AmsConfiguration::setMqttSubscribeTopic(String mqttSubscribeTopic) {
mqttChanged |= this->mqttSubscribeTopic != mqttSubscribeTopic;
this->mqttSubscribeTopic = String(mqttSubscribeTopic);
void AmsConfiguration::setMqttSubscribeTopic(const char* mqttSubscribeTopic) {
mqttChanged |= strcmp(config.mqttSubscribeTopic, mqttSubscribeTopic) != 0;
strcpy(config.mqttSubscribeTopic, mqttSubscribeTopic);
}
String AmsConfiguration::getMqttUser() {
return mqttUser;
char* AmsConfiguration::getMqttUser() {
return config.mqttUser;
}
void AmsConfiguration::setMqttUser(String mqttUser) {
mqttChanged |= this->mqttUser != mqttUser;
this->mqttUser = String(mqttUser);
void AmsConfiguration::setMqttUser(const char* mqttUser) {
mqttChanged |= strcmp(config.mqttUser, mqttUser) != 0;
strcpy(config.mqttUser, mqttUser);
}
String AmsConfiguration::getMqttPassword() {
return mqttPassword;
char* AmsConfiguration::getMqttPassword() {
return config.mqttPassword;
}
void AmsConfiguration::setMqttPassword(String mqttPassword) {
mqttChanged |= this->mqttPassword != mqttPassword;
this->mqttPassword = String(mqttPassword);
void AmsConfiguration::setMqttPassword(const char* mqttPassword) {
mqttChanged |= strcmp(config.mqttPassword, mqttPassword) != 0;
strcpy(config.mqttPassword, mqttPassword);
}
int AmsConfiguration::getMqttPayloadFormat() {
return this->mqttPayloadFormat;
uint8_t AmsConfiguration::getMqttPayloadFormat() {
return config.mqttPayloadFormat;
}
void AmsConfiguration::setMqttPayloadFormat(int mqttPayloadFormat) {
this->mqttPayloadFormat = mqttPayloadFormat;
void AmsConfiguration::setMqttPayloadFormat(uint8_t mqttPayloadFormat) {
config.mqttPayloadFormat = mqttPayloadFormat;
}
bool AmsConfiguration::isMqttSsl() {
return this->mqttSsl;
return config.mqttSsl;
}
void AmsConfiguration::setMqttSsl(bool mqttSsl) {
mqttChanged |= this->mqttSsl != mqttSsl;
this->mqttSsl = mqttSsl;
mqttChanged |= config.mqttSsl != mqttSsl;
config.mqttSsl = mqttSsl;
}
void AmsConfiguration::clearMqtt() {
@@ -193,27 +193,27 @@ void AmsConfiguration::ackMqttChange() {
byte AmsConfiguration::getAuthSecurity() {
return authSecurity;
return config.authSecurity;
}
void AmsConfiguration::setAuthSecurity(byte authSecurity) {
this->authSecurity = authSecurity;
config.authSecurity = authSecurity;
}
String AmsConfiguration::getAuthUser() {
return authUser;
char* AmsConfiguration::getAuthUser() {
return config.authUser;
}
void AmsConfiguration::setAuthUser(String authUser) {
this->authUser = String(authUser);
void AmsConfiguration::setAuthUser(const char* authUser) {
strcpy(config.authUser, authUser);
}
String AmsConfiguration::getAuthPassword() {
return authPassword;
char* AmsConfiguration::getAuthPassword() {
return config.authPassword;
}
void AmsConfiguration::setAuthPassword(String authPassword) {
this->authPassword = String(authPassword);
void AmsConfiguration::setAuthPassword(const char* authPassword) {
strcpy(config.authPassword, authPassword);
}
void AmsConfiguration::clearAuth() {
@@ -222,62 +222,194 @@ void AmsConfiguration::clearAuth() {
setAuthPassword("");
}
int AmsConfiguration::getMeterType() {
return this->meterType;
uint8_t AmsConfiguration::getMeterType() {
return config.meterType;
}
void AmsConfiguration::setMeterType(int meterType) {
this->meterType = meterType;
void AmsConfiguration::setMeterType(uint8_t meterType) {
config.meterType = meterType;
}
int AmsConfiguration::getDistributionSystem() {
return this->distributionSystem;
uint8_t AmsConfiguration::getDistributionSystem() {
return config.distributionSystem;
}
void AmsConfiguration::setDistributionSystem(int distributionSystem) {
this->distributionSystem = distributionSystem;
void AmsConfiguration::setDistributionSystem(uint8_t distributionSystem) {
config.distributionSystem = distributionSystem;
}
int AmsConfiguration::getMainFuse() {
return this->mainFuse;
uint8_t AmsConfiguration::getMainFuse() {
return config.mainFuse;
}
void AmsConfiguration::setMainFuse(int mainFuse) {
this->mainFuse = mainFuse;
void AmsConfiguration::setMainFuse(uint8_t mainFuse) {
config.mainFuse = mainFuse;
}
int AmsConfiguration::getProductionCapacity() {
return this->productionCapacity;
uint8_t AmsConfiguration::getProductionCapacity() {
return config.productionCapacity;
}
void AmsConfiguration::setProductionCapacity(int productionCapacity) {
this->productionCapacity = productionCapacity;
void AmsConfiguration::setProductionCapacity(uint8_t productionCapacity) {
config.productionCapacity = productionCapacity;
}
bool AmsConfiguration::isDebugTelnet() {
return this->debugTelnet;
return config.debugTelnet;
}
void AmsConfiguration::setDebugTelnet(bool debugTelnet) {
this->debugTelnet = debugTelnet;
config.debugTelnet = debugTelnet;
}
bool AmsConfiguration::isDebugSerial() {
return this->debugSerial;
return config.debugSerial;
}
void AmsConfiguration::setDebugSerial(bool debugSerial) {
this->debugSerial = debugSerial;
config.debugSerial = debugSerial;
}
int AmsConfiguration::getDebugLevel() {
return this->debugLevel;
uint8_t AmsConfiguration::getDebugLevel() {
return config.debugLevel;
}
void AmsConfiguration::setDebugLevel(int debugLevel) {
this->debugLevel = debugLevel;
void AmsConfiguration::setDebugLevel(uint8_t debugLevel) {
config.debugLevel = debugLevel;
}
bool AmsConfiguration::pinUsed(uint8_t pin) {
if(pin == 0xFF)
return false;
return
pin == config.hanPin ||
pin == config.apPin ||
pin == config.ledPinRed ||
pin == config.ledPinGreen ||
pin == config.ledPinBlue ||
pin == config.tempSensorPin ||
pin == config.vccPin
;
}
uint8_t AmsConfiguration::getHanPin() {
return config.hanPin;
}
void AmsConfiguration::setHanPin(uint8_t hanPin) {
if(!pinUsed(hanPin)) {
config.hanPin = hanPin;
}
}
uint8_t AmsConfiguration::getApPin() {
return config.apPin;
}
void AmsConfiguration::setApPin(uint8_t apPin) {
if(!pinUsed(apPin)) {
config.apPin = apPin;
if(apPin >= 0)
pinMode(apPin, INPUT_PULLUP);
}
}
uint8_t AmsConfiguration::getLedPin() {
return config.ledPin;
}
void AmsConfiguration::setLedPin(uint8_t ledPin) {
if(!pinUsed(ledPin)) {
config.ledPin = ledPin;
}
}
bool AmsConfiguration::isLedInverted() {
return config.ledInverted;
}
void AmsConfiguration::setLedInverted(bool ledInverted) {
config.ledInverted = ledInverted;
}
uint8_t AmsConfiguration::getLedPinRed() {
return config.ledPinRed;
}
void AmsConfiguration::setLedPinRed(uint8_t ledPinRed) {
if(!pinUsed(ledPinRed)) {
config.ledPinRed = ledPinRed;
}
}
uint8_t AmsConfiguration::getLedPinGreen() {
return config.ledPinGreen;
}
void AmsConfiguration::setLedPinGreen(uint8_t ledPinGreen) {
if(!pinUsed(ledPinGreen)) {
config.ledPinGreen = ledPinGreen;
}
}
uint8_t AmsConfiguration::getLedPinBlue() {
return config.ledPinBlue;
}
void AmsConfiguration::setLedPinBlue(uint8_t ledPinBlue) {
if(!pinUsed(ledPinBlue)) {
config.ledPinBlue = ledPinBlue;
}
}
bool AmsConfiguration::isLedRgbInverted() {
return config.ledRgbInverted;
}
void AmsConfiguration::setLedRgbInverted(bool ledRgbInverted) {
config.ledRgbInverted = ledRgbInverted;
}
uint8_t AmsConfiguration::getTempSensorPin() {
return config.tempSensorPin;
}
void AmsConfiguration::setTempSensorPin(uint8_t tempSensorPin) {
if(!pinUsed(tempSensorPin)) {
config.tempSensorPin = tempSensorPin;
}
}
uint8_t AmsConfiguration::getVccPin() {
return config.vccPin;
}
void AmsConfiguration::setVccPin(uint8_t vccPin) {
if(!pinUsed(vccPin)) {
config.vccPin = vccPin;
}
}
double AmsConfiguration::getVccMultiplier() {
return config.vccMultiplier / 100.0;
}
void AmsConfiguration::setVccMultiplier(double vccMultiplier) {
config.vccMultiplier = max(0.01, min(vccMultiplier, 655.5)) * 100;
}
double AmsConfiguration::getVccBootLimit() {
return config.vccBootLimit / 10;
}
void AmsConfiguration::setVccBootLimit(double vccBootLimit) {
if(vccBootLimit == 0.0)
config.vccBootLimit = 0;
else
config.vccBootLimit = max(2.5, min(vccBootLimit, 3.5)) * 10;
}
bool AmsConfiguration::hasConfig() {
if(configVersion == 0) {
@@ -311,153 +443,25 @@ bool AmsConfiguration::load() {
int cs = EEPROM.read(address);
address++;
switch(cs) {
case 71: // Same as 72
case 72:
success = loadConfig72(address);
break;
case 75:
success = loadConfig75(address);
break;
case 80:
case 80: // v1.1
success = loadConfig80(address);
break;
case 81:
case 81: // v1.2
success = loadConfig81(address);
break;
case 82:
success = loadConfig82(address);
case 82: // v1.3
EEPROM.get(address, config);
success = true;
break;
}
EEPROM.end();
if(config.apPin >= 0)
pinMode(config.apPin, INPUT_PULLUP);
return success;
}
bool AmsConfiguration::loadConfig72(int address) {
char* temp;
address += readString(address, &temp);
setWifiSsid(temp);
address += readString(address, &temp);
setWifiPassword(temp);
byte b;
address += readByte(address, &b);
setMeterType(b);
address += readString(address, &temp);
setMqttHost(temp);
int port;
address += readInt(address, &port);
setMqttPort(port);
address += readString(address, &temp);
setMqttClientId(temp);
address += readString(address, &temp);
setMqttPublishTopic(temp);
address += readString(address, &temp);
setMqttSubscribeTopic(temp);
bool secure = false;
address += readBool(address, &secure);
if (secure) {
address += readString(address, &temp);
setMqttUser(temp);
address += readString(address, &temp);
setMqttPassword(temp);
} else {
setMqttUser("");
setMqttPassword("");
}
setMqttPayloadFormat(0);
clearAuth();
setWifiIp("");
setWifiGw("");
setWifiSubnet("");
setMainFuse(0);
setProductionCapacity(0);
setDistributionSystem(0);
ackWifiChange();
setDebugLevel(3); // 3=Info
setDebugTelnet(false);
setDebugSerial(false);
return true;
}
bool AmsConfiguration::loadConfig75(int address) {
char* temp;
address += readString(address, &temp);
setWifiSsid(temp);
address += readString(address, &temp);
setWifiPassword(temp);
byte b;
address += readByte(address, &b);
setMeterType(b);
bool mqtt = false;
address += readBool(address, &mqtt);
if(mqtt) {
address += readString(address, &temp);
setMqttHost(temp);
int port;
address += readInt(address, &port);
setMqttPort(port);
address += readString(address, &temp);
setMqttClientId(temp);
address += readString(address, &temp);
setMqttPublishTopic(temp);
address += readString(address, &temp);
setMqttSubscribeTopic(temp);
}
bool secure = false;
address += readBool(address, &secure);
if (secure) {
address += readString(address, &temp);
setMqttUser(temp);
address += readString(address, &temp);
setMqttPassword(temp);
} else {
setMqttUser("");
setMqttPassword("");
}
setMqttPayloadFormat(0);
address += readByte(address, &authSecurity);
if (authSecurity > 0) {
address += readString(address, &temp);
setAuthUser(temp);
address += readString(address, &temp);
setAuthPassword(temp);
} else {
clearAuth();
}
int i;
address += readInt(address, &i);
setMainFuse(i);
address += readByte(address, &b);
setDistributionSystem(b);
setWifiIp("");
setWifiGw("");
setWifiSubnet("");
setProductionCapacity(0);
ackWifiChange();
setDebugLevel(3); // 3=Info
setDebugTelnet(false);
setDebugSerial(false);
return true;
}
bool AmsConfiguration::loadConfig80(int address) {
char* temp;
@@ -504,8 +508,10 @@ bool AmsConfiguration::loadConfig80(int address) {
}
setMqttPayloadFormat(0);
address += readByte(address, &authSecurity);
if (authSecurity > 0) {
byte b;
address += readByte(address, &b);
setAuthSecurity(b);
if (b > 0) {
address += readString(address, &temp);
setAuthUser(temp);
address += readString(address, &temp);
@@ -591,103 +597,10 @@ bool AmsConfiguration::loadConfig81(int address) {
clearMqtt();
}
address += readByte(address, &authSecurity);
if (authSecurity > 0) {
address += readString(address, &temp);
setAuthUser(temp);
address += readString(address, &temp);
setAuthPassword(temp);
} else {
clearAuth();
}
int i;
address += readInt(address, &i);
setMeterType(i);
address += readInt(address, &i);
setDistributionSystem(i);
address += readInt(address, &i);
setMainFuse(i);
address += readInt(address, &i);
setProductionCapacity(i);
bool debugTelnet = false;
address += readBool(address, &debugTelnet);
setDebugTelnet(debugTelnet);
bool debugSerial = false;
address += readBool(address, &debugSerial);
setDebugSerial(debugSerial);
address += readInt(address, &i);
setDebugLevel(i);
ackWifiChange();
return true;
}
bool AmsConfiguration::loadConfig82(int address) {
char* temp;
address += readString(address, &temp);
setWifiSsid(temp);
address += readString(address, &temp);
setWifiPassword(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) {
address += readString(address, &temp);
setMqttHost(temp);
int port;
address += readInt(address, &port);
setMqttPort(port);
address += readString(address, &temp);
setMqttClientId(temp);
address += readString(address, &temp);
setMqttPublishTopic(temp);
address += readString(address, &temp);
setMqttSubscribeTopic(temp);
bool secure = false;
address += readBool(address, &secure);
if (secure)
{
address += readString(address, &temp);
setMqttUser(temp);
address += readString(address, &temp);
setMqttPassword(temp);
} else {
setMqttUser("");
setMqttPassword("");
}
int payloadFormat;
address += readInt(address, &payloadFormat);
setMqttPayloadFormat(payloadFormat);
bool ssl = false;
address += readBool(address, &ssl);
setMqttSsl(ssl);
} else {
clearMqtt();
}
address += readByte(address, &authSecurity);
if (authSecurity > 0) {
byte b;
address += readByte(address, &b);
setAuthSecurity(b);
if (b > 0) {
address += readString(address, &temp);
setAuthUser(temp);
address += readString(address, &temp);
@@ -726,60 +639,11 @@ bool AmsConfiguration::save() {
EEPROM.begin(EEPROM_SIZE);
EEPROM.put(address, EEPROM_CHECK_SUM);
address++;
address += saveString(address, wifiSsid.c_str());
address += saveString(address, wifiPassword.c_str());
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.isEmpty()) {
address += saveBool(address, true);
address += saveString(address, mqttUser.c_str());
address += saveString(address, mqttPassword.c_str());
} else {
address += saveBool(address, false);
}
address += saveInt(address, mqttPayloadFormat);
address += saveBool(address, mqttSsl);
} else {
address += saveBool(address, false);
}
address += saveByte(address, authSecurity);
if (authSecurity > 0) {
address += saveString(address, authUser.c_str());
address += saveString(address, authPassword.c_str());
}
address += saveInt(address, meterType);
address += saveInt(address, distributionSystem);
address += saveInt(address, mainFuse);
address += saveInt(address, productionCapacity);
address += saveBool(address, debugTelnet);
address += saveBool(address, debugSerial);
address += saveInt(address, debugLevel);
EEPROM.put(address, config);
bool success = EEPROM.commit();
EEPROM.end();
configVersion = EEPROM_CHECK_SUM;
return success;
}
@@ -797,21 +661,6 @@ int AmsConfiguration::readString(int pAddress, char* pString[]) {
return address;
}
int AmsConfiguration::saveString(int pAddress, const char* pString) {
int address = 0;
int length = pString ? strlen(pString) + 1 : 0;
EEPROM.put(pAddress + address, length);
address++;
for (int i = 0; i < length; i++)
{
EEPROM.put(pAddress + address, pString[i]);
address++;
}
return address;
}
int AmsConfiguration::readInt(int address, int *value) {
int lower = EEPROM.read(address);
int higher = EEPROM.read(address + 1);
@@ -819,79 +668,44 @@ int AmsConfiguration::readInt(int address, int *value) {
return 2;
}
int AmsConfiguration::saveInt(int address, int value) {
byte lowByte = value & 0xFF;
byte highByte = ((value >> 8) & 0xFF);
EEPROM.write(address, lowByte);
EEPROM.write(address + 1, highByte);
return 2;
}
int AmsConfiguration::readBool(int address, bool *value) {
byte y = EEPROM.read(address);
*value = (bool)y;
return 1;
}
int AmsConfiguration::saveBool(int address, bool value) {
byte y = (byte)value;
EEPROM.write(address, y);
return 1;
}
int AmsConfiguration::readByte(int address, byte *value) {
*value = EEPROM.read(address);
return 1;
}
int AmsConfiguration::saveByte(int address, byte value) {
EEPROM.write(address, value);
return 1;
}
template <class T> int AmsConfiguration::writeAnything(int ee, const T& value) {
const byte* p = (const byte*)(const void*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
EEPROM.write(ee++, *p++);
return i;
}
template <class T> int AmsConfiguration::readAnything(int ee, T& value) {
byte* p = (byte*)(void*)&value;
unsigned int i;
for (i = 0; i < sizeof(value); i++)
*p++ = EEPROM.read(ee++);
return i;
}
void AmsConfiguration::print(Print* debugger)
{
debugger->println("Configuration:");
debugger->println("-----------------------------------------------");
debugger->printf("WiFi SSID: %s\r\n", this->getWifiSsid().c_str());
debugger->printf("WiFi Psk: %s\r\n", this->getWifiPassword().c_str());
debugger->printf("WiFi SSID: '%s'\r\n", this->getWifiSsid());
debugger->printf("WiFi Psk: '%s'\r\n", this->getWifiPassword());
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("Primary DNS: %s\r\n", this->getWifiDns1().c_str());
debugger->printf("Secondary DNS: %s\r\n", this->getWifiDns2().c_str());
if(strlen(getWifiIp()) > 0) {
debugger->printf("IP: '%s'\r\n", this->getWifiIp());
debugger->printf("Gateway: '%s'\r\n", this->getWifiGw());
debugger->printf("Subnet: '%s'\r\n", this->getWifiSubnet());
debugger->printf("Primary DNS: '%s'\r\n", this->getWifiDns1());
debugger->printf("Secondary DNS: '%s'\r\n", this->getWifiDns2());
}
debugger->printf("WiFi Host: '%s'\r\n", this->getWifiHostname());
if(!getMqttHost().isEmpty()) {
debugger->printf("mqttHost: %s\r\n", this->getMqttHost().c_str());
if(strlen(getMqttHost()) > 0) {
debugger->printf("mqttHost: '%s'\r\n", this->getMqttHost());
debugger->printf("mqttPort: %i\r\n", this->getMqttPort());
debugger->printf("mqttClientID: %s\r\n", this->getMqttClientId().c_str());
debugger->printf("mqttPublishTopic: %s\r\n", this->getMqttPublishTopic().c_str());
debugger->printf("mqttSubscribeTopic: %s\r\n", this->getMqttSubscribeTopic().c_str());
debugger->printf("mqttClientID: '%s'\r\n", this->getMqttClientId());
debugger->printf("mqttPublishTopic: '%s'\r\n", this->getMqttPublishTopic());
debugger->printf("mqttSubscribeTopic: '%s'\r\n", this->getMqttSubscribeTopic());
if (this->getMqttUser()) {
debugger->printf("SECURE MQTT CONNECTION:\r\n");
debugger->printf("mqttUser: %s\r\n", this->getMqttUser().c_str());
debugger->printf("mqttPass: %s\r\n", this->getMqttPassword().c_str());
debugger->printf("mqttUser: '%s'\r\n", this->getMqttUser());
debugger->printf("mqttPass: '%s'\r\n", this->getMqttPassword());
}
debugger->printf("payload format: %i\r\n", this->getMqttPayloadFormat());
}
@@ -899,8 +713,8 @@ void AmsConfiguration::print(Print* debugger)
if (this->getAuthSecurity()) {
debugger->printf("WEB AUTH:\r\n");
debugger->printf("authSecurity: %i\r\n", this->getAuthSecurity());
debugger->printf("authUser: %s\r\n", this->getAuthUser().c_str());
debugger->printf("authPass: %s\r\n", this->getAuthPassword().c_str());
debugger->printf("authUser: '%s'\r\n", this->getAuthUser());
debugger->printf("authPass: '%s'\r\n", this->getAuthPassword());
}
debugger->printf("meterType: %i\r\n", this->getMeterType());
@@ -908,5 +722,13 @@ void AmsConfiguration::print(Print* debugger)
debugger->printf("fuseSize: %i\r\n", this->getMainFuse());
debugger->printf("productionCapacity: %i\r\n", this->getProductionCapacity());
debugger->printf("HAN pin: %i\r\n", this->getHanPin());
debugger->printf("LED pin: %i\r\n", this->getLedPin());
debugger->printf("LED red pin: %i\r\n", this->getLedPinRed());
debugger->printf("LED green pin: %i\r\n", this->getLedPinGreen());
debugger->printf("LED blue pin: %i\r\n", this->getLedPinBlue());
debugger->printf("AP pin: %i\r\n", this->getApPin());
debugger->printf("Temperature pin: %i\r\n", this->getTempSensorPin());
debugger->println("-----------------------------------------------");
}