mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-02-02 07:00:51 +00:00
Changes for Energy Speedometer connection
This commit is contained in:
@@ -33,7 +33,7 @@ struct SystemConfig {
|
||||
bool userConfigured;
|
||||
uint8_t dataCollectionConsent; // 0 = unknown, 1 = accepted, 2 = declined
|
||||
char country[3];
|
||||
bool energyspeedometer;
|
||||
uint8_t energyspeedometer;
|
||||
}; // 8
|
||||
|
||||
struct WiFiConfig {
|
||||
@@ -232,6 +232,8 @@ public:
|
||||
|
||||
bool getSystemConfig(SystemConfig&);
|
||||
bool setSystemConfig(SystemConfig&);
|
||||
bool isSystemConfigChanged();
|
||||
void ackSystemConfigChanged();
|
||||
|
||||
bool getWiFiConfig(WiFiConfig&);
|
||||
bool setWiFiConfig(WiFiConfig&);
|
||||
@@ -319,7 +321,7 @@ protected:
|
||||
private:
|
||||
uint8_t configVersion = 0;
|
||||
|
||||
bool wifiChanged, mqttChanged, meterChanged = true, ntpChanged = true, entsoeChanged = false, energyAccountingChanged = true;
|
||||
bool sysChanged = false, wifiChanged = false, mqttChanged = false, meterChanged = true, ntpChanged = true, entsoeChanged = false, energyAccountingChanged = true;
|
||||
|
||||
uint8_t tempSensorCount = 0;
|
||||
TempSensorConfig** tempSensors = NULL;
|
||||
|
||||
@@ -13,13 +13,22 @@ bool AmsConfiguration::getSystemConfig(SystemConfig& config) {
|
||||
config.vendorConfigured = false;
|
||||
config.userConfigured = false;
|
||||
config.dataCollectionConsent = 0;
|
||||
config.energyspeedometer = false;
|
||||
config.energyspeedometer = 0;
|
||||
strcpy(config.country, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool AmsConfiguration::setSystemConfig(SystemConfig& config) {
|
||||
SystemConfig existing;
|
||||
if(getSystemConfig(existing)) {
|
||||
sysChanged |= config.boardType != existing.boardType;
|
||||
sysChanged |= config.vendorConfigured != existing.vendorConfigured;
|
||||
sysChanged |= config.userConfigured != existing.userConfigured;
|
||||
sysChanged |= config.dataCollectionConsent != existing.dataCollectionConsent;
|
||||
sysChanged |= strcmp(config.country, existing.country) != 0;
|
||||
sysChanged |= config.energyspeedometer != existing.energyspeedometer;
|
||||
}
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
stripNonAscii((uint8_t*) config.country, 2);
|
||||
EEPROM.put(CONFIG_SYSTEM_START, config);
|
||||
@@ -28,6 +37,14 @@ bool AmsConfiguration::setSystemConfig(SystemConfig& config) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool AmsConfiguration::isSystemConfigChanged() {
|
||||
return sysChanged;
|
||||
}
|
||||
|
||||
void AmsConfiguration::ackSystemConfigChanged() {
|
||||
sysChanged = false;
|
||||
}
|
||||
|
||||
bool AmsConfiguration::getWiFiConfig(WiFiConfig& config) {
|
||||
if(hasConfig()) {
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
@@ -739,6 +756,7 @@ void AmsConfiguration::clear() {
|
||||
EEPROM.get(CONFIG_SYSTEM_START, sys);
|
||||
sys.userConfigured = false;
|
||||
sys.dataCollectionConsent = 0;
|
||||
sys.energyspeedometer = 0;
|
||||
strcpy(sys.country, "");
|
||||
EEPROM.put(CONFIG_SYSTEM_START, sys);
|
||||
|
||||
|
||||
@@ -978,7 +978,7 @@ void AmsWebServer::configurationJson() {
|
||||
server.sendContent(buf);
|
||||
snprintf_P(buf, BufferSize, CONF_CLOUD_JSON,
|
||||
#if defined(ENERGY_SPEEDOMETER_PASS)
|
||||
sysConfig.energyspeedometer ? "true" : "false"
|
||||
sysConfig.energyspeedometer == 7 ? "true" : "false"
|
||||
#else
|
||||
"null"
|
||||
#endif
|
||||
@@ -1483,7 +1483,7 @@ void AmsWebServer::handleSave() {
|
||||
if(debugger->isActive(RemoteDebug::DEBUG)) debugger->printf_P(PSTR("Received cloud config\n"));
|
||||
SystemConfig sys;
|
||||
config->getSystemConfig(sys);
|
||||
sys.energyspeedometer = server.hasArg(F("ces")) && server.arg(F("ces")) == F("true");
|
||||
sys.energyspeedometer = server.hasArg(F("ces")) && server.arg(F("ces")) == F("true") ? 7 : 0;
|
||||
config->setSystemConfig(sys);
|
||||
}
|
||||
|
||||
|
||||
@@ -574,7 +574,7 @@ void loop() {
|
||||
}
|
||||
|
||||
#if defined(ENERGY_SPEEDOMETER_PASS)
|
||||
if(sysConfig.energyspeedometer) {
|
||||
if(sysConfig.energyspeedometer == 7) {
|
||||
if(!meterState.getMeterId().isEmpty()) {
|
||||
if(energySpeedometer == NULL) {
|
||||
uint16_t chipId;
|
||||
@@ -597,6 +597,14 @@ void loop() {
|
||||
energySpeedometer->loop();
|
||||
delay(10);
|
||||
}
|
||||
} else if(energySpeedometer != NULL) {
|
||||
if(energySpeedometer->connected()) {
|
||||
energySpeedometer->disconnect();
|
||||
energySpeedometer->loop();
|
||||
} else {
|
||||
delete energySpeedometer;
|
||||
energySpeedometer = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -745,6 +753,11 @@ void handleNtpChange() {
|
||||
}
|
||||
|
||||
void handleSystem(unsigned long now) {
|
||||
if(config.isSystemConfigChanged()) {
|
||||
config.getSystemConfig(sysConfig);
|
||||
config.ackSystemConfigChanged();
|
||||
}
|
||||
|
||||
unsigned long start, end;
|
||||
if(now - lastSysupdate > 60000) {
|
||||
start = millis();
|
||||
|
||||
Reference in New Issue
Block a user