diff --git a/tools/esp8266/app.h b/tools/esp8266/app.h index d35cf0e6..df43bcd4 100644 --- a/tools/esp8266/app.h +++ b/tools/esp8266/app.h @@ -98,12 +98,12 @@ class app { return String(str); } - String getTimeStr(void) { - char str[20]; + String getTimeStr(uint32_t offset = 0) { + char str[10]; if(0 == mUtcTimestamp) sprintf(str, "n/a"); else - sprintf(str, "%02d:%02d:%02d UTC", hour(mUtcTimestamp), minute(mUtcTimestamp), second(mUtcTimestamp)); + sprintf(str, "%02d:%02d:%02d ", hour(mUtcTimestamp + offset), minute(mUtcTimestamp + offset), second(mUtcTimestamp + offset)); return String(str); } @@ -115,7 +115,7 @@ class app { return mUtcTimestamp; } - inline void setTimestamp(uint32_t newTime) { + void setTimestamp(uint32_t newTime) { DPRINTLN(DBG_DEBUG, F("setTimestamp: ") + String(newTime)); if(0 == newTime) mUpdateNtp = true; diff --git a/tools/esp8266/html/api.js b/tools/esp8266/html/api.js index f793551a..9742a967 100644 --- a/tools/esp8266/html/api.js +++ b/tools/esp8266/html/api.js @@ -19,8 +19,10 @@ function getAjax(url, ptr, method="GET", json=null) { } function p() { if(xhr.readyState == 4) { - if(null != xhr.responseText) - ptr(JSON.parse(xhr.responseText)); + if(null != xhr.responseText) { + if(null != ptr) + ptr(JSON.parse(xhr.responseText)); + } } } } diff --git a/tools/esp8266/html/serial.html b/tools/esp8266/html/serial.html index bc94fc40..2744e03b 100644 --- a/tools/esp8266/html/serial.html +++ b/tools/esp8266/html/serial.html @@ -85,14 +85,19 @@ if(null == root) return; root = root.inverter; - for(var i = 0; i < root.inverter.length; i++) - { + for(var i = 0; i < root.inverter.length; i++) { inv = root.inverter[i]; var opt = document.createElement('option'); opt.value = inv.id; opt.innerHTML = inv.name; select.appendChild(opt); } + + // set time offset for serial console + var obj = new Object(); + obj.cmd = "serial_utc_offset"; + obj.ts = new Date().getTimezoneOffset() * -60; + getAjax("/api/setup", null, "POST", JSON.stringify(obj)); } document.getElementById("clear").addEventListener("click", function() { @@ -133,8 +138,7 @@ e.innerHTML = "Error: " + obj["error"]; } - function get_selected_iv() - { + function get_selected_iv() { var e = document.getElementById("InvID"); return parseInt(e.value); } diff --git a/tools/esp8266/web.cpp b/tools/esp8266/web.cpp index 4e80fa88..5d0c8be5 100644 --- a/tools/esp8266/web.cpp +++ b/tools/esp8266/web.cpp @@ -474,7 +474,7 @@ void web::serialCb(String msg) { msg.replace("\r\n", ""); if(mSerialAddTime) { if((9 + mSerialBufFill) <= WEB_SERIAL_BUF_SIZE) { - strncpy(&mSerialBuf[mSerialBufFill], mMain->getTimeStr().c_str(), 9); + strncpy(&mSerialBuf[mSerialBufFill], mMain->getTimeStr(mApi->getTimezoneOffset()).c_str(), 9); mSerialBufFill += 9; } else { diff --git a/tools/esp8266/webApi.cpp b/tools/esp8266/webApi.cpp index b0e78b46..7a2d265d 100644 --- a/tools/esp8266/webApi.cpp +++ b/tools/esp8266/webApi.cpp @@ -18,6 +18,8 @@ webApi::webApi(AsyncWebServer *srv, app *app, sysConfig_t *sysCfg, config_t *con mConfig = config; mStat = stat; mVersion = version; + + mTimezoneOffset = 0; } @@ -430,6 +432,8 @@ bool webApi::setSetup(DynamicJsonDocument jsonIn, JsonObject jsonOut) { mApp->setTimestamp(jsonIn[F("ts")]); else if(F("sync_ntp") == jsonIn[F("cmd")]) mApp->setTimestamp(0); // 0: update ntp flag + else if(F("serial_utc_offset") == jsonIn[F("cmd")]) + mTimezoneOffset = jsonIn[F("ts")]; else if(F("discovery_cfg") == jsonIn[F("cmd")]) mApp->mFlagSendDiscoveryConfig = true; // for homeassistant else { diff --git a/tools/esp8266/webApi.h b/tools/esp8266/webApi.h index a060a29a..783c5782 100644 --- a/tools/esp8266/webApi.h +++ b/tools/esp8266/webApi.h @@ -21,6 +21,10 @@ class webApi { void setup(void); void loop(void); + uint32_t getTimezoneOffset() { + return mTimezoneOffset; + } + private: void onApi(AsyncWebServerRequest *request); void onApiPost(AsyncWebServerRequest *request); @@ -59,6 +63,8 @@ class webApi { sysConfig_t *mSysCfg; statistics_t *mStat; char *mVersion; + + uint32_t mTimezoneOffset; }; #endif /*__WEB_API_H__*/