Compare commits

..

4 Commits

Author SHA1 Message Date
Gunnar Skjold
a5f872a86c More timezone adjustments after testing 2023-04-25 08:09:47 +02:00
Gunnar Skjold
6e8233e4af Fixed timestamp from meter 2023-04-24 15:46:56 +02:00
Gunnar Skjold
d85d68b4a6 Hide firmware upgrade when no upgrade 2023-04-24 15:46:34 +02:00
Gunnar Skjold
ed9cf4b87d Fixed NTP 2023-04-24 15:26:31 +02:00
8 changed files with 46 additions and 38 deletions

File diff suppressed because one or more lines are too long

View File

@@ -164,7 +164,7 @@
<div class="my-2 flex">
Latest version:
<a href={nextVersion.html_url} class="ml-2 text-blue-600 hover:text-blue-800" target='_blank' rel="noreferrer">{nextVersion.tag_name}</a>
{#if (sysinfo.security == 0 || data.a) && sysinfo.fwconsent === 1 && nextVersion && nextVersion.tag_name}
{#if (sysinfo.security == 0 || data.a) && sysinfo.fwconsent === 1 && nextVersion && nextVersion.tag_name != sysinfo.version}
<div class="flex-none ml-2 text-green-500" title="Install this version">
<button on:click={askUpgrade}><DownloadIcon/></button>
</div>

View File

@@ -17,18 +17,18 @@ export default defineConfig({
plugins: [svelte()],
server: {
proxy: {
"/data.json": "http://192.168.233.244",
"/energyprice.json": "http://192.168.233.244",
"/dayplot.json": "http://192.168.233.244",
"/monthplot.json": "http://192.168.233.244",
"/temperature.json": "http://192.168.233.244",
"/sysinfo.json": "http://192.168.233.244",
"/configuration.json": "http://192.168.233.244",
"/tariff.json": "http://192.168.233.244",
"/save": "http://192.168.233.244",
"/reboot": "http://192.168.233.244",
"/configfile": "http://192.168.233.244",
"/upgrade": "http://192.168.233.244"
"/data.json": "http://192.168.233.235",
"/energyprice.json": "http://192.168.233.235",
"/dayplot.json": "http://192.168.233.235",
"/monthplot.json": "http://192.168.233.235",
"/temperature.json": "http://192.168.233.235",
"/sysinfo.json": "http://192.168.233.235",
"/configuration.json": "http://192.168.233.235",
"/tariff.json": "http://192.168.233.235",
"/save": "http://192.168.233.235",
"/reboot": "http://192.168.233.235",
"/configfile": "http://192.168.233.235",
"/upgrade": "http://192.168.233.235"
}
}
})

View File

@@ -32,7 +32,7 @@ lib_ignore = ${common.lib_ignore}
extra_scripts = ${common.extra_scripts}
[env:esp32]
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.02.00/platform-espressif32.zip
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip
framework = arduino
board = esp32dev
board_build.f_cpu = 160000000L
@@ -47,7 +47,7 @@ extra_scripts = ${common.extra_scripts}
# https://github.com/Jason2866/esp32-arduino-lib-builder
[env:esp32s2]
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.02.00/platform-espressif32.zip
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip
framework = arduino
board = esp32-s2-saola-1
board_build.mcu = esp32s2
@@ -63,7 +63,7 @@ lib_ignore = ${common.lib_ignore}
extra_scripts = ${common.extra_scripts}
[env:esp32solo]
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.02.00/platform-espressif32.zip
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip
framework = arduino
board = esp32-solo1
board_build.f_cpu = 160000000L
@@ -75,7 +75,7 @@ lib_ignore = ${common.lib_ignore}
extra_scripts = ${common.extra_scripts}
[env:esp32c3]
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.02.00/platform-espressif32.zip
platform = https://github.com/tasmota/platform-espressif32/releases/download/2023.04.02/platform-espressif32.zip
framework = arduino
board = esp32-c3-devkitm-1
board_build.mcu = esp32c3

View File

@@ -96,7 +96,7 @@ RemoteDebug Debug;
EntsoeApi* eapi = NULL;
Timezone* tz;
Timezone* tz = NULL;
AmsWebServer ws(commonBuffer, &Debug, &hw);
@@ -341,9 +341,6 @@ void setup() {
NtpConfig ntp;
if(config.getNtpConfig(ntp)) {
tz = resolveTimezone(ntp.timezone);
configTime(tz->toLocal(0), tz->toLocal(JULY1970)-JULY1970, ntp.enable ? strlen(ntp.server) > 0 ? ntp.server : (char*) F("pool.ntp.org") : (char*) F("")); // Add NTP server by default if none is configured
sntp_servermode_dhcp(ntp.enable && ntp.dhcp ? 1 : 0);
ntpEnabled = ntp.enable;
ws.setTimezone(tz);
ds.setTimezone(tz);
ea.setTimezone(tz);
@@ -560,12 +557,21 @@ void handleEnergyAccountingChanged() {
config.ackEnergyAccountingChange();
}
char ntpServerName[64] = "";
void handleNtpChange() {
NtpConfig ntp;
if(config.getNtpConfig(ntp)) {
tz = resolveTimezone(ntp.timezone);
configTime(tz->toLocal(0), tz->toLocal(JULY1970)-JULY1970, ntp.enable ? strlen(ntp.server) > 0 ? ntp.server : (char*) F("pool.ntp.org") : (char*) F("")); // Add NTP server by default if none is configured
sntp_servermode_dhcp(ntp.enable && ntp.dhcp ? 1 : 0);
if(ntp.enable && strlen(ntp.server) > 0) {
strcpy(ntpServerName, ntp.server);
} else if(ntp.enable) {
strcpy(ntpServerName, "pool.ntp.org");
} else {
memset(ntpServerName, 0, 64);
}
configTime(tz->toLocal(0), tz->toLocal(JULY1970)-JULY1970, ntpServerName, "", "");
sntp_servermode_dhcp(ntp.enable && ntp.dhcp ? 1 : 0); // Not implemented on ESP32?
ntpEnabled = ntp.enable;
ws.setTimezone(tz);
@@ -704,8 +710,8 @@ void rxerr(int err) {
if(err == 0) return;
switch(err) {
case 1:
debugE_P(PSTR("Serial break error"));
break;
debugD_P(PSTR("Serial break"));
return;
case 2:
debugE_P(PSTR("Serial buffer overflow"));
rxBufferErrors++;
@@ -720,10 +726,10 @@ void rxerr(int err) {
debugE_P(PSTR("Serial FIFO overflow"));
break;
case 4:
debugE_P(PSTR("Serial frame error"));
debugW_P(PSTR("Serial frame error"));
break;
case 5:
debugE_P(PSTR("Serial parity error"));
debugW_P(PSTR("Serial parity error"));
break;
}
meterState.setLastError(90+err);
@@ -1087,7 +1093,7 @@ bool readHanPort() {
data = new IEC6205675(payload, meterState.getMeterType(), &meterConfig, ctx);
}
} else if(ctx.type == DATA_TAG_DSMR) {
data = new IEC6205621(payload);
data = new IEC6205621(payload, tz);
}
len = 0;

View File

@@ -1,6 +1,6 @@
#include "IEC6205621.h"
IEC6205621::IEC6205621(const char* p) {
IEC6205621::IEC6205621(const char* p, Timezone* tz) {
if(strlen(p) < 16)
return;
@@ -58,7 +58,8 @@ IEC6205621::IEC6205621(const char* p) {
tm.Hour = timestamp.substring(6,8).toInt();
tm.Minute = timestamp.substring(8,10).toInt();
tm.Second = timestamp.substring(10,12).toInt();
meterTimestamp = makeTime(tm); // TODO: Adjust for time zone
meterTimestamp = makeTime(tm);
if(tz != NULL) meterTimestamp = tz->toUTC(meterTimestamp);
}
activeImportPower = (uint16_t) (extractDouble(payload, F("1.7.0")));

View File

@@ -3,10 +3,11 @@
#include "Arduino.h"
#include "AmsData.h"
#include "Timezone.h"
class IEC6205621 : public AmsData {
public:
IEC6205621(const char* payload);
IEC6205621(const char* payload, Timezone* tz);
private:
String extract(String payload, String obis);

View File

@@ -168,8 +168,10 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, MeterConfig* meterCo
}
}
if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) {
this->packageTimestamp = this->packageTimestamp > 0 ? tz.toUTC(this->packageTimestamp) : 0;
if(this->packageTimestamp > 0) {
if(meterType == AmsTypeAidon || meterType == AmsTypeKamstrup) {
this->packageTimestamp = this->packageTimestamp - 3600;
}
}
uint8_t str_len = 0;
@@ -270,10 +272,8 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, MeterConfig* meterCo
if(meterTs != NULL) {
AmsOctetTimestamp* amst = (AmsOctetTimestamp*) meterTs;
time_t ts = decodeCosemDateTime(amst->dt);
if(meterType == AmsTypeAidon) {
if(meterType == AmsTypeAidon || meterType == AmsTypeKamstrup) {
meterTimestamp = ts - 3600;
} else if(meterType == AmsTypeKamstrup) {
meterTimestamp = tz.toUTC(ts);
} else {
meterTimestamp = ts;
}