mirror of
https://github.com/lumapu/ahoy.git
synced 2025-08-03 08:28:20 +02:00
Merge branch 'development03' of https://github.com/lumapu/ahoy into development03
This commit is contained in:
commit
1eabd0f470
11 changed files with 189 additions and 365 deletions
287
src/CHANGES.md
287
src/CHANGES.md
|
@ -1,260 +1,33 @@
|
|||
# Changelog
|
||||
Changelog v0.6.0
|
||||
|
||||
(starting from release version `0.5.66`)
|
||||
## General
|
||||
* improved night time calculation time to 1 minute after last communication pause #515
|
||||
* refactored code for better readability
|
||||
* improved Hoymiles commuinication (retransmits, immediate power limit transmission, timing at all)
|
||||
* renamed firmware binaries
|
||||
* add login / logout to menu
|
||||
* add display support for `SH1106`, `SSD1306`, `Nokia` and `ePaper 1.54"` (ESP32 only)
|
||||
* add yield total correction - move your yield to a new inverter or correct an already used inverter
|
||||
* added import / export feature
|
||||
* added `Prometheus` endpoints
|
||||
* improved wifi connection and stability (connect to strongest AP)
|
||||
* addded Hoymiles alarm IDs to log
|
||||
* improved `System` information page (eg. radio statitistics)
|
||||
* improved UI (repsonsive design, (optional) dark mode)
|
||||
* improved system stability (reduced `heap-fragmentation`, don't break settings on failure) #644, #645
|
||||
* added support for 2nd generation of Hoymiles inverters, MI series
|
||||
* improved JSON API for more stable WebUI
|
||||
* added option to disable input display in `/live` (`max-power` has to be set to `0`)
|
||||
* updated documentation
|
||||
* improved settings on ESP32 devices while setting SPI pins (for `NRF24` radio)
|
||||
|
||||
## 0.5.108
|
||||
|
||||
* merge: PR SPI pins configureable (ESP32) #807, #806 (requires manual set of MISO=19, MOSI=23, SCLK=18 in GUI for existing installs)
|
||||
* merge: PR MI serial outputs #809
|
||||
* fix: no MQTT `total` sensor for autodiscover if only one inverter was found #805
|
||||
* fix: MQTT `total` renamed to `device_name` + `_TOTOL` for better visibility #805
|
||||
|
||||
## 0.5.107
|
||||
* fix: show save message
|
||||
* fix: removed serial newline for `enqueueCmd`
|
||||
* Merged improved Prometheus #808
|
||||
|
||||
## 0.5.106
|
||||
* merged MI and debug message changes #804
|
||||
* fixed MQTT autodiscover #794, #632
|
||||
|
||||
## 0.5.105
|
||||
* merged MI, thx @rejoe2 #788
|
||||
* fixed reboot message #793
|
||||
|
||||
## 0.5.104
|
||||
* further improved save settings
|
||||
* removed `#` character from ePaper
|
||||
* fixed saving pinout for `Nokia-Display`
|
||||
* removed `Reset` Pin for monochrome displays
|
||||
* improved wifi connection #652
|
||||
|
||||
## 0.5.103
|
||||
* merged MI improvements, thx @rejoe2 #778
|
||||
* changed display inverter online message
|
||||
* merged heap improvements #772
|
||||
|
||||
## 0.5.102
|
||||
* Warning: old exports are not compatible any more!
|
||||
* fix JSON import #775
|
||||
* fix save settings, at least already stored settings are not lost #771
|
||||
* further save settings improvements (only store inverters which are existing)
|
||||
* improved display of settings save return value
|
||||
* made save settings asynchronous (more heap memory is free)
|
||||
|
||||
## 0.5.101
|
||||
* fix SSD1306
|
||||
* update documentation
|
||||
* Update miPayload.h
|
||||
* Update README.md
|
||||
* MI - remarks to user manual
|
||||
* MI - fix AC calc
|
||||
* MI - fix status msg. analysis
|
||||
|
||||
## 0.5.100
|
||||
* fix add inverter `setup.html` #766
|
||||
* fix MQTT retained flag for total values #726
|
||||
* renamed buttons for import and export `setup.html`
|
||||
* added serial message `settings saved`
|
||||
|
||||
## 0.5.99
|
||||
* fix limit in [User_Manual.md](../User_Manual.md)
|
||||
* changed `contrast` to `luminance` in `setup.html`
|
||||
* try to fix SSD1306 display #759
|
||||
* only show necessary display pins depending on setting
|
||||
|
||||
## 0.5.98
|
||||
* fix SH1106 rotation and turn off during night #756
|
||||
* removed MQTT subscription `sync_ntp`, `set_time` with a value of `0` does the same #696
|
||||
* simplified MQTT subscription for `limit`. Check [User_Manual.md](../User_Manual.md) for new syntax #696, #713
|
||||
* repaired inverter wise limit control
|
||||
* fix upload settings #686
|
||||
|
||||
## 0.5.97
|
||||
* Attention: re-ordered display types, check your settings! #746
|
||||
* improved saving settings of display #747, #746
|
||||
* disabled contrast for Nokia display #746
|
||||
* added Prometheus as compile option #719, #615
|
||||
* update MQTT lib to v1.4.1
|
||||
* limit decimal places to 2 in `live`
|
||||
* added `-DPIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48` to esp8266 debug build #657
|
||||
* a `max-module-power` of `0` disables channel in live view `setup`
|
||||
* merge MI improvements, get firmware information #753
|
||||
|
||||
## 0.5.96
|
||||
* added Nokia display again for ESP8266 #764
|
||||
* changed `var` / `VAr` to SI unit `var` #732
|
||||
* fix MQTT retained flags for totals (P_AC, P_DC) #726, #721
|
||||
|
||||
## 0.5.95
|
||||
* merged #742 MI Improvments
|
||||
* merged #736 remove obsolete JSON Endpoint
|
||||
|
||||
## 0.5.94
|
||||
* added ePaper (for ESP32 only!), thx @dAjaY85 #735
|
||||
* improved `/live` margins #732
|
||||
* renamed `var` to `VAr` #732
|
||||
|
||||
## 0.5.93
|
||||
* improved web API for `live`
|
||||
* added dark mode option
|
||||
* converted all forms to reponsive design
|
||||
* repaired menu with password protection #720, #716, #709
|
||||
* merged MI series fixes #729
|
||||
|
||||
## 0.5.92
|
||||
* fix mobile menu
|
||||
* fix inverters in select `serial.html` #709
|
||||
|
||||
## 0.5.91
|
||||
* improved html and navi, navi is visible even when API dies #660
|
||||
* reduced maximum allowed JSON size for API to 6000Bytes #660
|
||||
* small fix: output command at `prepareDevInformCmd` #692
|
||||
* improved inverter handling #671
|
||||
|
||||
## 0.5.90
|
||||
* merged PR #684, #698, #705
|
||||
* webserial minor overflow fix #660
|
||||
* web `index.html` improve version information #701
|
||||
* fix MQTT sets power limit to zero (0) #692
|
||||
* changed `reset at midnight` with timezone #697
|
||||
|
||||
## 0.5.89
|
||||
* reduced heap fragmentation (removed `strtok` completely) #644, #645, #682
|
||||
* added part of mac address to MQTT client ID to seperate multiple ESPs in same network
|
||||
* added dictionary for MQTT to reduce heap-fragmentation
|
||||
* removed `last Alarm` from Live view, because it showed always the same alarm - will change in future
|
||||
|
||||
## 0.5.88
|
||||
* MQTT Yield Day zero, next try to fix #671, thx @beegee3
|
||||
* added Solenso inverter to supported devices
|
||||
* improved reconnection of MQTT #650
|
||||
|
||||
## 0.5.87
|
||||
* fix yield total correction as module (inverter input) value #570
|
||||
* reneabled instant start communication (once NTP is synced) #674
|
||||
|
||||
## 0.5.86
|
||||
* prevent send devcontrol request during disabled night communication
|
||||
* changed yield total correction as module (inverter input) value #570
|
||||
* MQTT Yield Day zero, next try to fix #671
|
||||
|
||||
## 0.5.85
|
||||
* fix power-limit was not checked for max retransmits #667
|
||||
* fix blue LED lights up all the time #672
|
||||
* fix installing schedulers if NTP server isn't available
|
||||
* improved zero values on triggers #671
|
||||
* hardcoded MQTT subtopics, because wildcard `#` leads to errors
|
||||
* rephrased some messages on webif, thx to @Argafal #638
|
||||
* fixed 'polling stop message' on `index.html` #639
|
||||
|
||||
## 0.5.84
|
||||
* fix blue LED lights up all the time #672
|
||||
* added an instant start communication (once NTP is synced)
|
||||
* add MI 3rd generation inverters (10x2 serial numbers)
|
||||
* first decodings of messages from MI 2nd generation inverters
|
||||
|
||||
## 0.5.83
|
||||
* fix MQTT publishing, `callback` was set but reset by following `setup()`
|
||||
|
||||
## 0.5.82
|
||||
* fixed communication error #652
|
||||
* reset values is no bound to MQTT any more, setting moved to `inverter` #649
|
||||
* fixed wording on `index.hmtl` #661
|
||||
|
||||
## 0.5.81
|
||||
* started implementation of MI inverters (setup.html, own processing `MiPayload.h`)
|
||||
|
||||
## 0.5.80
|
||||
* fixed communication #656
|
||||
|
||||
## 0.5.79
|
||||
* fixed mixed reset flags #648
|
||||
* fixed `mCbAlarm` if MQTT is not used #653
|
||||
* fixed MQTT `autodiscover` #630 thanks to @antibill51
|
||||
* next changes from @beegee many thanks for your contribution!
|
||||
* replaced `CircularBuffer` by `std::queue`
|
||||
* reworked `hmRadio.h` completely (interrupts, packaging)
|
||||
* fix exception while `reboot`
|
||||
* cleanup MQTT coding
|
||||
|
||||
## 0.5.78
|
||||
* further improvements regarding wifi #611, fix connection if only one AP with same SSID is there
|
||||
* fix endless loop in `zerovalues` #564
|
||||
* fix auto discover again #565
|
||||
* added total values to autodiscover #630
|
||||
* improved zero at midnight #625
|
||||
|
||||
## 0.5.77
|
||||
* fix wrong filename for automatically created manifest (online installer) #620
|
||||
* added rotate display feature #619
|
||||
* improved Prometheus endpoint #615, thx to @fsck-block
|
||||
* improved wifi to connect always to strongest RSSI, thx to @beegee3 #611
|
||||
|
||||
## 0.5.76
|
||||
* reduce MQTT retry interval from maximum speed to one second
|
||||
* fixed homeassistant autodiscovery #565
|
||||
* implemented `getNTPTime` improvements #609 partially #611
|
||||
* added alarm messages to MQTT #177, #600, #608
|
||||
|
||||
## 0.5.75
|
||||
* fix wakeup issue, once wifi was lost during night the communication didn't start in the morning
|
||||
* reenabled FlashStringHelper because of lacking RAM
|
||||
* complete rewrite of monochrome display class, thx to @dAjaY85 -> displays are now configurable in setup
|
||||
* fix power limit not possible #607
|
||||
|
||||
## 0.5.74
|
||||
* improved payload handling (retransmit all fragments on CRC error)
|
||||
* improved `isAvailable`, checkes all record structs, inverter becomes available more early because version is check first
|
||||
* fix tickers were not set if NTP is not available
|
||||
* disabled annoying `FlashStringHelper` it gives randomly Expeptions during development, feels more stable since then
|
||||
* moved erase button to the bottom in settings, not nice but more functional
|
||||
* split `tx_count` to `tx_cnt` and `retransmits` in `system.html`
|
||||
* fix mqtt retransmit IP address #602
|
||||
* added debug infos for `scheduler` (web -> `/debug` as trigger prints list of tickers to serial console)
|
||||
|
||||
## 0.5.73
|
||||
* improved payload handling (request / retransmit) #464
|
||||
* included alarm ID parse to serial console (in development)
|
||||
|
||||
## 0.5.72
|
||||
* repaired system, scheduler was not called any more #596
|
||||
|
||||
## 0.5.71
|
||||
* improved wifi handling and tickers, many thanks to @beegee3 #571
|
||||
* fixed YieldTotal correction calculation #589
|
||||
* fixed serial output of power limit acknowledge #569
|
||||
* reviewed `sendDiscoveryConfig` #565
|
||||
* merged PR `Monodisplay`, many thanks to @dAjaY85 #566, Note: (settings are introduced but not able to be modified, will be included in next version)
|
||||
|
||||
## 0.5.70
|
||||
* corrected MQTT `comm_disabled` #529
|
||||
* fix Prometheus and JSON endpoints (`config_override.h`) #561
|
||||
* publish MQTT with fixed interval even if inverter is not available #542
|
||||
* added JSON settings upload. NOTE: settings JSON download changed, so only settings should be uploaded starting from version `0.5.70` #551
|
||||
* MQTT topic and inverter name have more allowed characters: `[A-Za-z0-9./#$%&=+_-]+`, thx: @Mo Demman
|
||||
* improved potential issue with `checkTicker`, thx @cbscpe
|
||||
* MQTT option for reset values on midnight / not avail / communication stop #539
|
||||
* small fix in `tickIVCommunication` #534
|
||||
* add `YieldTotal` correction, eg. to have the option to zero at year start #512
|
||||
|
||||
## 0.5.69
|
||||
* merged SH1106 1.3" Display, thx @dAjaY85
|
||||
* added SH1106 to automatic build
|
||||
* added IP address to MQTT (version, device and IP are retained and only transmitted once after boot) #556
|
||||
## MqTT
|
||||
* added `comm_disabled` #529
|
||||
* added fixed interval option #542, #523
|
||||
* improved communication, only required publishes
|
||||
* improved retained flags
|
||||
* added `set_power_limit` acknowledge MQTT publish #553
|
||||
* changed: version, device name are only published via MQTT once after boot
|
||||
* added `Login` to menu if admin password is set #554
|
||||
* added `development` to second changelog link in `index.html` #543
|
||||
* added interval for MQTT (as option). With this settings MQTT live data is published in a fixed timing (only if inverter is available) #542, #523
|
||||
* added MQTT `comm_disabled` #529
|
||||
* changed name of binaries, moved GIT-Sha to the front #538
|
||||
|
||||
## 0.5.68
|
||||
* repaired receive payload
|
||||
* Powerlimit is transfered immediately to inverter
|
||||
|
||||
## 0.5.67
|
||||
* changed calculation of start / stop communication to 1 min after last comm. stop #515
|
||||
* moved payload send to `payload.h`, function `ivSend` #515
|
||||
* payload: if last frame is missing, request all frames again
|
||||
* added feature to reset values on midnight, communication pause or if the inverters are not available
|
||||
* partially added Hoymiles alarm ID
|
||||
* improved autodiscover (added total values on multi-inverter setup)
|
||||
* improved `clientID` a part of the MAC address is added to have an unique name
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
// VERSION
|
||||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 5
|
||||
#define VERSION_PATCH 108
|
||||
#define VERSION_MINOR 6
|
||||
#define VERSION_PATCH 0
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
|
|
@ -448,8 +448,8 @@ const byteAssign_t InfoAssignment[] = {
|
|||
} else {
|
||||
bool change = false;
|
||||
if ( cmd >= 0x36 && cmd < 0x39 ) { // MI-1500 Data command
|
||||
cmd++; // just request the next channel
|
||||
change = true;
|
||||
//cmd++; // just request the next channel
|
||||
//change = true;
|
||||
} else if ( cmd == 0x09 ) {//MI single or dual channel device
|
||||
if ( mPayload[iv->id].dataAB[CH1] && iv->type == INV_TYPE_2CH ) {
|
||||
if (!mPayload[iv->id].stsAB[CH1] && mPayload[iv->id].retransmits<2) {}
|
||||
|
@ -472,6 +472,7 @@ const byteAssign_t InfoAssignment[] = {
|
|||
if (change) {
|
||||
DBGPRINT(F("next request is"));
|
||||
//mPayload[iv->id].skipfirstrepeat = 0;
|
||||
mPayload[iv->id].txCmd = cmd;
|
||||
} else {
|
||||
DBGPRINT(F("sth."));
|
||||
DBGPRINT(F(" missing: Request Retransmit"));
|
||||
|
@ -480,7 +481,6 @@ const byteAssign_t InfoAssignment[] = {
|
|||
DBGHEXLN(cmd);
|
||||
//mSys->Radio.sendCmdPacket(iv->radioId.u64, cmd, cmd, true);
|
||||
mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd, mPayload[iv->id].ts, iv->alarmMesIndex, true, cmd);
|
||||
mPayload[iv->id].txCmd = cmd;
|
||||
yield();
|
||||
}
|
||||
}
|
||||
|
@ -682,11 +682,13 @@ const byteAssign_t InfoAssignment[] = {
|
|||
}*/
|
||||
miStsConsolidate(iv, datachan, rec, p->packet[23], p->packet[24]);
|
||||
|
||||
|
||||
if (p->packet[0] < (0x39 + ALL_FRAMES) ) {
|
||||
/*uint8_t cmd = p->packet[0] - ALL_FRAMES + 1;
|
||||
mSys->Radio.prepareDevInformCmd(iv->radioId.u64, cmd, mPayload[iv->id].ts, iv->alarmMesIndex, false, cmd);
|
||||
mPayload[iv->id].txCmd = cmd;*/
|
||||
mPayload[iv->id].txCmd++;
|
||||
if (mPayload[iv->id].retransmits)
|
||||
mPayload[iv->id].retransmits--; // reserve retransmissions for each response
|
||||
mPayload[iv->id].complete = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@ lib_deps =
|
|||
https://github.com/yubox-node-org/ESPAsyncWebServer
|
||||
nrf24/RF24 @ ^1.4.5
|
||||
paulstoffregen/Time @ ^1.6.1
|
||||
https://github.com/bertmelis/espMqttClient#v1.4.1
|
||||
https://github.com/bertmelis/espMqttClient#v1.4.2
|
||||
bblanchon/ArduinoJson @ ^6.21.0
|
||||
https://github.com/JChristensen/Timezone @ ^1.2.4
|
||||
olikraus/U8g2 @ ^2.34.16
|
||||
|
@ -48,7 +48,8 @@ lib_deps =
|
|||
platform = espressif8266
|
||||
board = esp12e
|
||||
board_build.f_cpu = 80000000L
|
||||
build_flags = -D RELEASE -Wl,-Map,output.map
|
||||
build_flags = -D RELEASE
|
||||
;-Wl,-Map,output.map
|
||||
monitor_filters =
|
||||
;default ; Remove typical terminal control codes from input
|
||||
;time ; Add timestamp with milliseconds for each new line
|
||||
|
|
|
@ -101,7 +101,7 @@ class PubMqtt {
|
|||
if (mIntervalTimeout > 0)
|
||||
mIntervalTimeout--;
|
||||
|
||||
if(!mClient.connected()) {
|
||||
if(mClient.disconnected()) {
|
||||
mClient.connect();
|
||||
return; // next try in a second
|
||||
}
|
||||
|
@ -118,9 +118,8 @@ class PubMqtt {
|
|||
}
|
||||
|
||||
void tickerMinute() {
|
||||
char val[12];
|
||||
snprintf(val, 12, "%ld", millis() / 1000);
|
||||
publish(subtopics[MQTT_UPTIME], val);
|
||||
snprintf(mVal, 40, "%ld", millis() / 1000);
|
||||
publish(subtopics[MQTT_UPTIME], mVal);
|
||||
publish(subtopics[MQTT_RSSI], String(WiFi.RSSI()).c_str());
|
||||
publish(subtopics[MQTT_FREE_HEAP], String(ESP.getFreeHeap()).c_str());
|
||||
#ifndef ESP32
|
||||
|
@ -152,12 +151,10 @@ class PubMqtt {
|
|||
}
|
||||
|
||||
void tickerMidnight() {
|
||||
char topic[7 + MQTT_TOPIC_LEN], val[4];
|
||||
|
||||
// set Total YieldDay to zero
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "total/%s", fields[FLD_YD]);
|
||||
snprintf(val, 2, "0");
|
||||
publish(topic, val, true);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "total/%s", fields[FLD_YD]);
|
||||
snprintf(mVal, 2, "0");
|
||||
publish(mSubTopic, mVal, true);
|
||||
}
|
||||
|
||||
void payloadEventListener(uint8_t cmd) {
|
||||
|
@ -177,7 +174,6 @@ class PubMqtt {
|
|||
if(!mClient.connected())
|
||||
return;
|
||||
|
||||
memset(mTopic, 0, MQTT_TOPIC_LEN + 32 + MAX_NAME_LENGTH + 1);
|
||||
if(addTopic){
|
||||
snprintf(mTopic, MQTT_TOPIC_LEN + 32 + MAX_NAME_LENGTH + 1, "%s/%s", mCfgMqtt->topic, subTopic);
|
||||
} else {
|
||||
|
@ -230,10 +226,8 @@ class PubMqtt {
|
|||
|
||||
void setPowerLimitAck(Inverter<> *iv) {
|
||||
if (NULL != iv) {
|
||||
char topic[7 + MQTT_TOPIC_LEN];
|
||||
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/%s", iv->config->name, subtopics[MQTT_ACK_PWR_LMT]);
|
||||
publish(topic, "true", true);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/%s", iv->config->name, subtopics[MQTT_ACK_PWR_LMT]);
|
||||
publish(mSubTopic, "true", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -247,12 +241,11 @@ class PubMqtt {
|
|||
tickerMinute();
|
||||
publish(mLwtTopic, mqttStr[MQTT_STR_LWT_CONN], true, false);
|
||||
|
||||
char sub[20];
|
||||
for(uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
||||
snprintf(sub, 20, "ctrl/limit/%d", i);
|
||||
subscribe(sub);
|
||||
snprintf(sub, 20, "ctrl/restart/%d", i);
|
||||
subscribe(sub);
|
||||
snprintf(mVal, 20, "ctrl/limit/%d", i);
|
||||
subscribe(mVal);
|
||||
snprintf(mVal, 20, "ctrl/restart/%d", i);
|
||||
subscribe(mVal);
|
||||
}
|
||||
subscribe(subscr[MQTT_SUBS_SET_TIME]);
|
||||
}
|
||||
|
@ -356,7 +349,7 @@ class PubMqtt {
|
|||
bool total = (mDiscovery.lastIvId == MAX_NUM_INVERTERS);
|
||||
|
||||
Inverter<> *iv = mSys->getInverterByPos(mDiscovery.lastIvId);
|
||||
record_t<> *rec;
|
||||
record_t<> *rec = NULL;
|
||||
if (NULL != iv) {
|
||||
rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
||||
if(0 == mDiscovery.sub)
|
||||
|
@ -437,7 +430,6 @@ class PubMqtt {
|
|||
void checkDiscoveryEnd(void) {
|
||||
if(++mDiscovery.lastIvId == MAX_NUM_INVERTERS) {
|
||||
// check if only one inverter was found, then don't create 'total' sensor
|
||||
DPRINTLN(DBG_INFO, "found: " + String(mDiscovery.foundIvCnt));
|
||||
if(mDiscovery.foundIvCnt == 1)
|
||||
mDiscovery.running = false;
|
||||
} else if(mDiscovery.lastIvId == (MAX_NUM_INVERTERS + 1))
|
||||
|
@ -467,7 +459,6 @@ class PubMqtt {
|
|||
bool allAvail = true; // shows if all enabled inverters are available
|
||||
bool anyAvail = false; // shows if at least one enabled inverter is available
|
||||
bool changed = false;
|
||||
char topic[7 + MQTT_TOPIC_LEN], val[40];
|
||||
Inverter<> *iv;
|
||||
record_t<> *rec;
|
||||
|
||||
|
@ -497,19 +488,19 @@ class PubMqtt {
|
|||
mLastIvState[id] = status;
|
||||
changed = true;
|
||||
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/available", iv->config->name);
|
||||
snprintf(val, 40, "%d", status);
|
||||
publish(topic, val, true);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/available", iv->config->name);
|
||||
snprintf(mVal, 40, "%d", status);
|
||||
publish(mSubTopic, mVal, true);
|
||||
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/last_success", iv->config->name);
|
||||
snprintf(val, 40, "%d", iv->getLastTs(rec));
|
||||
publish(topic, val, true);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/last_success", iv->config->name);
|
||||
snprintf(mVal, 40, "%d", iv->getLastTs(rec));
|
||||
publish(mSubTopic, mVal, true);
|
||||
}
|
||||
}
|
||||
|
||||
if(changed) {
|
||||
snprintf(val, 32, "%d", ((allAvail) ? MQTT_STATUS_ONLINE : ((anyAvail) ? MQTT_STATUS_PARTIAL : MQTT_STATUS_OFFLINE)));
|
||||
publish("status", val, true);
|
||||
snprintf(mVal, 32, "%d", ((allAvail) ? MQTT_STATUS_ONLINE : ((anyAvail) ? MQTT_STATUS_PARTIAL : MQTT_STATUS_OFFLINE)));
|
||||
publish("status", mVal, true);
|
||||
}
|
||||
|
||||
return anyAvail;
|
||||
|
@ -529,7 +520,6 @@ class PubMqtt {
|
|||
}
|
||||
|
||||
void sendData(Inverter<> *iv, uint8_t curInfoCmd) {
|
||||
char topic[7 + MQTT_TOPIC_LEN], val[40];
|
||||
record_t<> *rec = iv->getRecordStruct(curInfoCmd);
|
||||
|
||||
if (iv->getLastTs(rec) > 0) {
|
||||
|
@ -546,9 +536,9 @@ class PubMqtt {
|
|||
}
|
||||
}
|
||||
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "%s/ch%d/%s", iv->config->name, rec->assign[i].ch, fields[rec->assign[i].fieldId]);
|
||||
snprintf(val, 40, "%g", ah::round3(iv->getValue(i, rec)));
|
||||
publish(topic, val, retained);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/ch%d/%s", iv->config->name, rec->assign[i].ch, fields[rec->assign[i].fieldId]);
|
||||
snprintf(mVal, 40, "%g", ah::round3(iv->getValue(i, rec)));
|
||||
publish(mSubTopic, mVal, retained);
|
||||
|
||||
yield();
|
||||
}
|
||||
|
@ -563,7 +553,6 @@ class PubMqtt {
|
|||
if(mSendList.empty())
|
||||
return;
|
||||
|
||||
char topic[7 + MQTT_TOPIC_LEN], val[40];
|
||||
float total[4];
|
||||
bool RTRDataHasBeenSent = false;
|
||||
|
||||
|
@ -635,9 +624,9 @@ class PubMqtt {
|
|||
retained = false;
|
||||
break;
|
||||
}
|
||||
snprintf(topic, 32 + MAX_NAME_LENGTH, "total/%s", fields[fieldId]);
|
||||
snprintf(val, 40, "%g", ah::round3(total[i]));
|
||||
publish(topic, val, retained);
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "total/%s", fields[fieldId]);
|
||||
snprintf(mVal, 40, "%g", ah::round3(total[i]));
|
||||
publish(mSubTopic, mVal, retained);
|
||||
}
|
||||
RTRDataHasBeenSent = true;
|
||||
yield();
|
||||
|
@ -670,9 +659,10 @@ class PubMqtt {
|
|||
char mLwtTopic[MQTT_TOPIC_LEN+5];
|
||||
const char *mDevName, *mVersion;
|
||||
char mClientId[24]; // number of chars is limited to 23 up to v3.1 of MQTT
|
||||
// global buffer for mqtt topic. Used when publishing mqtt messages.
|
||||
// global buffer for mqtt topic. Used when publishing mqtt messages.
|
||||
char mTopic[MQTT_TOPIC_LEN + 32 + MAX_NAME_LENGTH + 1];
|
||||
|
||||
char mSubTopic[32 + MAX_NAME_LENGTH + 1];
|
||||
char mVal[40];
|
||||
discovery_t mDiscovery;
|
||||
};
|
||||
|
||||
|
|
57
src/web/html/about.html
Normal file
57
src/web/html/about.html
Normal file
|
@ -0,0 +1,57 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>About</title>
|
||||
{#HTML_HEADER}
|
||||
</head>
|
||||
<body>
|
||||
{#HTML_NAV}
|
||||
<div id="wrapper">
|
||||
<div id="content">
|
||||
<div class="my-3"><h2>About AhoyDTU</h2></div>
|
||||
<div class="my-3">
|
||||
<div class="row my-3 head">
|
||||
<div class="p-2">Used Libraries</div>
|
||||
</div>
|
||||
<div class="row"><a href="https://github.com/bertmelis/espMqttClient" target="_blank">bertmelis/espMqttClient</a></div>
|
||||
<div class="row"><a href="https://github.com/yubox-node-org/ESPAsyncWebServer" target="_blank">yubox-node-org/ESPAsyncWebServer</a></div>
|
||||
<div class="row"><a href="https://github.com/bblanchon/ArduinoJson" target="_blank">bblanchon/ArduinoJson</a></div>
|
||||
<div class="row"><a href="https://github.com/nrf24/RF24" target="_blank">nrf24/RF24</a></div>
|
||||
<div class="row"><a href="https://github.com/paulstoffregen/Time" target="_blank">paulstoffregen/Time</a></div>
|
||||
<div class="row"><a href="https://github.com/olikraus/U8g2" target="_blank">olikraus/U8g2</a></div>
|
||||
<div class="row"><a href="https://github.com/zinggjm/GxEPD2" target="_blank">zinggjm/GxEPD2</a></div>
|
||||
|
||||
<div class="row my-3 head">
|
||||
<div class="p-2">Contact Information</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-5 col-sm-3">Github Repository</div>
|
||||
<div class="col-7 col-sm-9"><a href="https://github.com/lumapu/ahoy">https://github.com/lumapu/ahoy</a></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-5 col-sm-3">Discord Chat</div>
|
||||
<div class="col-7 col-sm-9"><a href="https://discord.gg/WzhxEY62mB" target="_blank">Discord</a></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-5 col-sm-3">E-Mail</div>
|
||||
<div class="col-7 col-sm-9"><a href="mailto:contact@ahoydtu.de">contact@ahoydtu.de</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{#HTML_FOOTER}
|
||||
<script type="text/javascript">
|
||||
function parseGeneric(obj) {
|
||||
parseNav(obj);
|
||||
parseESP(obj);
|
||||
parseRssi(obj);
|
||||
}
|
||||
function parse(obj) {
|
||||
if(null != obj) {
|
||||
parseGeneric(obj["generic"]);
|
||||
}
|
||||
}
|
||||
getAjax("/api/html/save", parse);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -74,7 +74,7 @@ function topnav() {
|
|||
}
|
||||
|
||||
function parseNav(obj) {
|
||||
for(i = 0; i < 10; i++) {
|
||||
for(i = 0; i < 11; i++) {
|
||||
if(i == 2)
|
||||
continue;
|
||||
var l = document.getElementById("nav"+i);
|
||||
|
|
|
@ -15,11 +15,10 @@
|
|||
<span class="seperator"></span>
|
||||
<a id="nav8" href="/api" target="_blank">REST API</a>
|
||||
<a id="nav9" href="https://ahoydtu.de" target="_blank">Documentation</a>
|
||||
<a id="nav10" href="/about">About</a>
|
||||
<span class="seperator"></span>
|
||||
<a id="nav0" class="hide" href="/login">Login</a>
|
||||
<a id="nav1" class="hide" href="/logout">Logout</a>
|
||||
</div>
|
||||
<div id="wifiicon" class="info"></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "html/h/save_html.h"
|
||||
#include "html/h/update_html.h"
|
||||
#include "html/h/visualization_html.h"
|
||||
#include "html/h/about_html.h"
|
||||
|
||||
#define WEB_SERIAL_BUF_SIZE 2048
|
||||
|
||||
|
@ -83,6 +84,7 @@ class Web {
|
|||
mWeb.on("/upload", HTTP_POST, std::bind(&Web::onUpload, this, std::placeholders::_1),
|
||||
std::bind(&Web::onUpload2, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6));
|
||||
mWeb.on("/serial", HTTP_GET, std::bind(&Web::onSerial, this, std::placeholders::_1));
|
||||
mWeb.on("/about", HTTP_GET, std::bind(&Web::onAbout, this, std::placeholders::_1));
|
||||
mWeb.on("/debug", HTTP_GET, std::bind(&Web::onDebug, this, std::placeholders::_1));
|
||||
|
||||
|
||||
|
@ -141,16 +143,14 @@ class Web {
|
|||
}
|
||||
}
|
||||
if (!Update.hasError()) {
|
||||
if (Update.write(data, len) != len) {
|
||||
if (Update.write(data, len) != len)
|
||||
Update.printError(Serial);
|
||||
}
|
||||
}
|
||||
if (final) {
|
||||
if (Update.end(true)) {
|
||||
if (Update.end(true))
|
||||
Serial.printf("Update Success: %uB\n", index + len);
|
||||
} else {
|
||||
else
|
||||
Update.printError(Serial);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,7 +245,7 @@ class Web {
|
|||
}
|
||||
|
||||
void showUpdate(AsyncWebServerRequest *request) {
|
||||
bool reboot = !Update.hasError();
|
||||
bool reboot = (!Update.hasError());
|
||||
|
||||
String html = F("<!doctype html><html><head><title>Update</title><meta http-equiv=\"refresh\" content=\"20; URL=/\"></head><body>Update: ");
|
||||
if (reboot)
|
||||
|
@ -619,6 +619,21 @@ class Web {
|
|||
request->send(response);
|
||||
}
|
||||
|
||||
void onAbout(AsyncWebServerRequest *request) {
|
||||
if (CHECK_MASK(mConfig->sys.protectionMask, PROT_MASK_LIVE)) {
|
||||
if (mProtected) {
|
||||
checkRedirect(request);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
AsyncWebServerResponse *response = request->beginResponse_P(200, F("text/html; charset=UTF-8"), about_html, about_html_len);
|
||||
response->addHeader(F("Content-Encoding"), "gzip");
|
||||
response->addHeader(F("content-type"), "text/html; charset=UTF-8");
|
||||
|
||||
request->send(response);
|
||||
}
|
||||
|
||||
void onDebug(AsyncWebServerRequest *request) {
|
||||
mApp->getSchedulerNames();
|
||||
AsyncWebServerResponse *response = request->beginResponse(200, F("text/html; charset=UTF-8"), "ok");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue