mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-24 14:26:11 +02:00
Add mqtt sunrise/sunset + setupAp + system.html
This commit is contained in:
parent
da04d3ff73
commit
553f64caa3
8 changed files with 92 additions and 17 deletions
10
src/.vscode/extensions.json
vendored
Normal file
10
src/.vscode/extensions.json
vendored
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
|
// for the documentation about the extensions.json format
|
||||||
|
"recommendations": [
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
],
|
||||||
|
"unwantedRecommendations": [
|
||||||
|
"ms-vscode.cpptools-extension-pack"
|
||||||
|
]
|
||||||
|
}
|
5
src/.vscode/settings.json
vendored
5
src/.vscode/settings.json
vendored
|
@ -21,6 +21,9 @@
|
||||||
// https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
// https://clang.llvm.org/docs/ClangFormatStyleOptions.html
|
||||||
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 0}",
|
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4, ColumnLimit: 0}",
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"typeinfo": "cpp"
|
"typeinfo": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"istream": "cpp",
|
||||||
|
"ostream": "cpp"
|
||||||
},
|
},
|
||||||
}
|
}
|
|
@ -287,7 +287,7 @@ void app::setupMqtt(void) {
|
||||||
mMqttActive = true;
|
mMqttActive = true;
|
||||||
|
|
||||||
if(mMqttActive)
|
if(mMqttActive)
|
||||||
mMqtt.setup(&mConfig->mqtt, mConfig->sys.deviceName, mVersion, mSys, &mUtcTimestamp);
|
mMqtt.setup(this, &mConfig->mqtt, mConfig->sys.deviceName, mVersion, mSys, &mUtcTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -31,6 +31,23 @@ function parseESP(obj) {
|
||||||
document.getElementById("esp_type").innerHTML="Board: " + obj["esp_type"];
|
document.getElementById("esp_type").innerHTML="Board: " + obj["esp_type"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function parseSysInfo(obj) {
|
||||||
|
document.getElementById("sdkversion").innerHTML= "SDKv.: " + obj["sdk_version"];
|
||||||
|
document.getElementById("cpufreq").innerHTML= "CPU MHz: " + obj["cpu_freq"] + "MHz";
|
||||||
|
document.getElementById("chiprevision").innerHTML= "Rev.: " + obj["chip_revision"];
|
||||||
|
document.getElementById("chipmodel").innerHTML= "Model: " + obj["chip_model"];
|
||||||
|
document.getElementById("chipcores").innerHTML= "Core: " + obj["chip_cores"];
|
||||||
|
document.getElementById("esp_type").innerHTML= "Type: " + obj["esp_type"];
|
||||||
|
|
||||||
|
document.getElementById("heap_used").innerHTML= "Used: " + obj["heap_used"];
|
||||||
|
document.getElementById("heap_total").innerHTML= "Total: " + obj["heap_total"];
|
||||||
|
}
|
||||||
|
|
||||||
|
function changeProgressbar(id, value, max) {
|
||||||
|
document.getElementById(id).value = value;
|
||||||
|
document.getElementById(id).max = max;
|
||||||
|
}
|
||||||
|
|
||||||
function setHide(id, hide) {
|
function setHide(id, hide) {
|
||||||
var elm = document.getElementById(id);
|
var elm = document.getElementById(id);
|
||||||
if(hide) {
|
if(hide) {
|
||||||
|
|
|
@ -17,7 +17,18 @@
|
||||||
<div id="topnav" class="hide"></div>
|
<div id="topnav" class="hide"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="wrapper">
|
<div id="wrapper">
|
||||||
<div id="content"></div>
|
<div id="content">
|
||||||
|
<ul>
|
||||||
|
<li>Heap:<progress id="heap" max="100" value="70"></progress> <span id="heap_used"></span>(<span id="heap_total"></span>)</li>
|
||||||
|
<li><span id="sdkversion"></span></li>
|
||||||
|
<li><span id="cpufreq"></span></li>
|
||||||
|
<li><span id="chiprevision"></span></li>
|
||||||
|
<li><span id="chipmodel"></span></li>
|
||||||
|
<li><span id="chipcores"></span></li>
|
||||||
|
<li><span id="esp_type"></span></li>
|
||||||
|
</ul>
|
||||||
|
<div id="system"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
|
@ -39,13 +50,15 @@
|
||||||
function parseSys(obj) {
|
function parseSys(obj) {
|
||||||
parseVersion(obj);
|
parseVersion(obj);
|
||||||
parseESP(obj);
|
parseESP(obj);
|
||||||
|
changeProgressbar("heap", obj["heap_used"], obj["heap_total"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function parse(obj) {
|
function parse(obj) {
|
||||||
if(null != obj) {
|
if(null != obj) {
|
||||||
parseMenu(obj["menu"]);
|
parseMenu(obj["menu"]);
|
||||||
parseSys(obj["system"]);
|
parseSys(obj["system"]);
|
||||||
var e = document.getElementById("content");
|
parseSysInfo(obj["system"]);
|
||||||
|
var e = document.getElementById("system");
|
||||||
e.innerHTML = obj["html"];
|
e.innerHTML = obj["html"];
|
||||||
|
|
||||||
if(null != obj["refresh"]) {
|
if(null != obj["refresh"]) {
|
||||||
|
|
|
@ -38,16 +38,17 @@ class mqtt {
|
||||||
|
|
||||||
~mqtt() { }
|
~mqtt() { }
|
||||||
|
|
||||||
void setup(cfgMqtt_t *cfg, const char *devName, const char *version, HMSYSTEM *sys, uint32_t *utcTs) {
|
void setup(app *app, cfgMqtt_t *cfg_mqtt, const char *devName, const char *version, HMSYSTEM *sys, uint32_t *utcTs) {
|
||||||
DPRINTLN(DBG_VERBOSE, F("mqtt.h:setup"));
|
DPRINTLN(DBG_VERBOSE, F("mqtt.h:setup"));
|
||||||
mAddressSet = true;
|
mAddressSet = true;
|
||||||
|
|
||||||
mCfg = cfg;
|
mApp = app;
|
||||||
mDevName = devName;
|
mCfg_mqtt = cfg_mqtt;
|
||||||
mSys = sys;
|
mDevName = devName;
|
||||||
mUtcTimestamp = utcTs;
|
mSys = sys;
|
||||||
|
mUtcTimestamp = utcTs;
|
||||||
|
|
||||||
mClient->setServer(mCfg->broker, mCfg->port);
|
mClient->setServer(mCfg_mqtt->broker, mCfg_mqtt->port);
|
||||||
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
||||||
|
|
||||||
setCallback(std::bind(&mqtt<HMSYSTEM>::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
setCallback(std::bind(&mqtt<HMSYSTEM>::cbMqtt, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
@ -75,7 +76,7 @@ class mqtt {
|
||||||
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:sendMsg"));
|
//DPRINTLN(DBG_VERBOSE, F("mqtt.h:sendMsg"));
|
||||||
if(mAddressSet) {
|
if(mAddressSet) {
|
||||||
char top[66];
|
char top[66];
|
||||||
snprintf(top, 66, "%s/%s", mCfg->topic, topic);
|
snprintf(top, 66, "%s/%s", mCfg_mqtt->topic, topic);
|
||||||
sendMsg2(top, msg, false);
|
sendMsg2(top, msg, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,21 +174,21 @@ class mqtt {
|
||||||
if(strlen(mDevName) > 0) {
|
if(strlen(mDevName) > 0) {
|
||||||
// der Server und der Port müssen neu gesetzt werden,
|
// der Server und der Port müssen neu gesetzt werden,
|
||||||
// da ein MQTT_CONNECTION_LOST -3 die Werte zerstört hat.
|
// da ein MQTT_CONNECTION_LOST -3 die Werte zerstört hat.
|
||||||
mClient->setServer(mCfg->broker, mCfg->port);
|
mClient->setServer(mCfg_mqtt->broker, mCfg_mqtt->port);
|
||||||
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
mClient->setBufferSize(MQTT_MAX_PACKET_SIZE);
|
||||||
|
|
||||||
char lwt[MQTT_TOPIC_LEN + 7 ]; // "/uptime" --> + 7 byte
|
char lwt[MQTT_TOPIC_LEN + 7 ]; // "/uptime" --> + 7 byte
|
||||||
snprintf(lwt, MQTT_TOPIC_LEN + 7, "%s/uptime", mCfg->topic);
|
snprintf(lwt, MQTT_TOPIC_LEN + 7, "%s/uptime", mCfg_mqtt->topic);
|
||||||
|
|
||||||
if((strlen(mCfg->user) > 0) && (strlen(mCfg->pwd) > 0))
|
if((strlen(mCfg_mqtt->user) > 0) && (strlen(mCfg_mqtt->pwd) > 0))
|
||||||
resub = mClient->connect(mDevName, mCfg->user, mCfg->pwd, lwt, 0, false, "offline");
|
resub = mClient->connect(mDevName, mCfg_mqtt->user, mCfg_mqtt->pwd, lwt, 0, false, "offline");
|
||||||
else
|
else
|
||||||
resub = mClient->connect(mDevName, lwt, 0, false, "offline");
|
resub = mClient->connect(mDevName, lwt, 0, false, "offline");
|
||||||
// ein Subscribe ist nur nach einem connect notwendig
|
// ein Subscribe ist nur nach einem connect notwendig
|
||||||
if(resub) {
|
if(resub) {
|
||||||
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
|
char topic[MQTT_TOPIC_LEN + 13 ]; // "/devcontrol/#" --> + 6 byte
|
||||||
// ToDo: "/devcontrol/#" is hardcoded
|
// ToDo: "/devcontrol/#" is hardcoded
|
||||||
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg->topic);
|
snprintf(topic, MQTT_TOPIC_LEN + 13, "%s/devcontrol/#", mCfg_mqtt->topic);
|
||||||
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
|
DPRINTLN(DBG_INFO, F("subscribe to ") + String(topic));
|
||||||
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
|
mClient->subscribe(topic); // subscribe to mTopic + "/devcontrol/#"
|
||||||
}
|
}
|
||||||
|
@ -226,6 +227,13 @@ class mqtt {
|
||||||
|
|
||||||
sendMsg("uptime", val);
|
sendMsg("uptime", val);
|
||||||
|
|
||||||
|
sendMsg("wifi_rssi", String(WiFi.RSSI()).c_str());
|
||||||
|
|
||||||
|
String sunrise = String(mApp->getSunrise());
|
||||||
|
String sunset = String(mApp->getSunset());
|
||||||
|
sendMsg("sunrise", sunrise.c_str());
|
||||||
|
sendMsg("sunset", sunset.c_str());
|
||||||
|
|
||||||
while(!mSendList.empty()) {
|
while(!mSendList.empty()) {
|
||||||
memset(total, 0, sizeof(float) * 4);
|
memset(total, 0, sizeof(float) * 4);
|
||||||
for (uint8_t id = 0; id < mSys->getNumInverters(); id++) {
|
for (uint8_t id = 0; id < mSys->getNumInverters(); id++) {
|
||||||
|
@ -427,13 +435,14 @@ class mqtt {
|
||||||
DPRINTLN(DBG_INFO, F("app::cbMqtt finished"));
|
DPRINTLN(DBG_INFO, F("app::cbMqtt finished"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app *mApp;
|
||||||
WiFiClient mEspClient;
|
WiFiClient mEspClient;
|
||||||
PubSubClient *mClient;
|
PubSubClient *mClient;
|
||||||
HMSYSTEM *mSys;
|
HMSYSTEM *mSys;
|
||||||
uint32_t *mUtcTimestamp;
|
uint32_t *mUtcTimestamp;
|
||||||
|
|
||||||
bool mAddressSet;
|
bool mAddressSet;
|
||||||
cfgMqtt_t *mCfg;
|
cfgMqtt_t *mCfg_mqtt;
|
||||||
const char *mDevName;
|
const char *mDevName;
|
||||||
uint32_t mLastReconnect;
|
uint32_t mLastReconnect;
|
||||||
uint32_t mTxCnt;
|
uint32_t mTxCnt;
|
||||||
|
|
|
@ -153,6 +153,21 @@ void webApi::getSysInfo(JsonObject obj) {
|
||||||
obj[F("ts_sun_upd")] = mApp->getLatestSunTimestamp();
|
obj[F("ts_sun_upd")] = mApp->getLatestSunTimestamp();
|
||||||
obj[F("wifi_rssi")] = WiFi.RSSI();
|
obj[F("wifi_rssi")] = WiFi.RSSI();
|
||||||
obj[F("pwd_set")] = (strlen(mConfig->sys.adminPwd) > 0);
|
obj[F("pwd_set")] = (strlen(mConfig->sys.adminPwd) > 0);
|
||||||
|
|
||||||
|
obj[F("hostname")] = WiFi.getHostname();
|
||||||
|
obj[F("sdk_version")] = ESP.getSdkVersion();
|
||||||
|
obj[F("cpu_freq")] = ESP.getCpuFreqMHz();
|
||||||
|
|
||||||
|
obj[F("heap_total")] = ESP.getHeapSize();
|
||||||
|
obj[F("heap_used")] = ESP.getHeapSize() - ESP.getFreeHeap();
|
||||||
|
obj[F("sketch_total")] = ESP.getFreeSketchSpace();
|
||||||
|
obj[F("sketch_used")] = ESP.getSketchSize();
|
||||||
|
//obj[F("littlefs_total")] = LittleFS.totalBytes();
|
||||||
|
//obj[F("littlefs_used")] = LittleFS.usedBytes();
|
||||||
|
|
||||||
|
obj[F("chip_revision")] = ESP.getChipRevision();
|
||||||
|
obj[F("chip_model")] = ESP.getChipModel();
|
||||||
|
obj[F("chip_cores")] = ESP.getChipCores();
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
obj[F("esp_type")] = F("ESP32");
|
obj[F("esp_type")] = F("ESP32");
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -113,6 +113,12 @@ void ahoywifi::setupAp(const char *ssid, const char *pwd) {
|
||||||
DPRINTLN(DBG_VERBOSE, F("app::setupAp"));
|
DPRINTLN(DBG_VERBOSE, F("app::setupAp"));
|
||||||
IPAddress apIp(192, 168, 4, 1);
|
IPAddress apIp(192, 168, 4, 1);
|
||||||
|
|
||||||
|
DBGPRINTLN(F("\n---------\nAhoy Info:"));
|
||||||
|
DBGPRINT(F("Version: "));
|
||||||
|
DBGPRINTLN(String(VERSION_MAJOR) + F(".") + String(VERSION_MINOR) + F(".") + String(VERSION_PATCH));
|
||||||
|
DBGPRINT(F("Github Hash: "));
|
||||||
|
DBGPRINTLN(String(AUTO_GIT_HASH));
|
||||||
|
|
||||||
DBGPRINT(F("\n---------\nAP MODE\nSSID: "));
|
DBGPRINT(F("\n---------\nAP MODE\nSSID: "));
|
||||||
DBGPRINTLN(ssid);
|
DBGPRINTLN(ssid);
|
||||||
DBGPRINT(F("PWD: "));
|
DBGPRINT(F("PWD: "));
|
||||||
|
@ -120,6 +126,8 @@ void ahoywifi::setupAp(const char *ssid, const char *pwd) {
|
||||||
DBGPRINT(F("\nActive for: "));
|
DBGPRINT(F("\nActive for: "));
|
||||||
DBGPRINT(String(WIFI_AP_ACTIVE_TIME));
|
DBGPRINT(String(WIFI_AP_ACTIVE_TIME));
|
||||||
DBGPRINTLN(F(" seconds"));
|
DBGPRINTLN(F(" seconds"));
|
||||||
|
|
||||||
|
DBGPRINTLN("\nIp Address: " + apIp[0] + apIp[1] + apIp[2] + apIp[3]);
|
||||||
DBGPRINTLN(F("\n---------\n"));
|
DBGPRINTLN(F("\n---------\n"));
|
||||||
|
|
||||||
WiFi.mode(WIFI_AP);
|
WiFi.mode(WIFI_AP);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue