mirror of
https://github.com/lumapu/ahoy.git
synced 2025-08-02 16:08:26 +02:00
Merge branch 'development03' into development03
This commit is contained in:
commit
a4be65e634
17 changed files with 133 additions and 70 deletions
|
@ -1,33 +1,6 @@
|
|||
Changelog v0.6.0
|
||||
# Development Changes
|
||||
|
||||
## 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)
|
||||
|
||||
## 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
|
||||
* 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
|
||||
## 0.6.1 - 2023-04-01
|
||||
* merge LED fix - LED1 shows MqTT state, LED configureable active high/low #839
|
||||
* only publish new inverter data #826
|
||||
* potential fix of WiFi hostname during boot up #752
|
||||
|
|
28
src/app.cpp
28
src/app.cpp
|
@ -389,30 +389,40 @@ void app::mqttSubRxCb(JsonObject obj) {
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
void app::setupLed(void) {
|
||||
/** LED connection diagram
|
||||
* \\
|
||||
* PIN ---- |<----- 3.3V
|
||||
*
|
||||
* */
|
||||
|
||||
uint8_t led_off = (mConfig->led.led_high_active != 0) ? LOW : HIGH;
|
||||
|
||||
if (mConfig->led.led0 != 0xff) {
|
||||
pinMode(mConfig->led.led0, OUTPUT);
|
||||
digitalWrite(mConfig->led.led0, HIGH); // LED off
|
||||
digitalWrite(mConfig->led.led0, led_off);
|
||||
}
|
||||
if (mConfig->led.led1 != 0xff) {
|
||||
pinMode(mConfig->led.led1, OUTPUT);
|
||||
digitalWrite(mConfig->led.led1, HIGH); // LED off
|
||||
digitalWrite(mConfig->led.led1, led_off);
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void app::updateLed(void) {
|
||||
|
||||
uint8_t led_off = (mConfig->led.led_high_active != 0) ? LOW : HIGH;
|
||||
uint8_t led_on = (mConfig->led.led_high_active != 0) ? HIGH : LOW;
|
||||
|
||||
if (mConfig->led.led0 != 0xff) {
|
||||
Inverter<> *iv = mSys.getInverterByPos(0);
|
||||
if (NULL != iv) {
|
||||
if (iv->isProducing(mTimestamp))
|
||||
digitalWrite(mConfig->led.led0, LOW); // LED on
|
||||
digitalWrite(mConfig->led.led0, led_on);
|
||||
else
|
||||
digitalWrite(mConfig->led.led0, HIGH); // LED off
|
||||
digitalWrite(mConfig->led.led0, led_off);
|
||||
}
|
||||
}
|
||||
|
||||
if (mConfig->led.led1 != 0xff) {
|
||||
if (getMqttIsConnected()) {
|
||||
digitalWrite(mConfig->led.led1, led_on);
|
||||
} else {
|
||||
digitalWrite(mConfig->led.led1, led_off);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -217,8 +217,8 @@ class app : public IApp, public ah::Scheduler {
|
|||
|
||||
void mqttSubRxCb(JsonObject obj);
|
||||
|
||||
void setupLed(void);
|
||||
void updateLed(void);
|
||||
void setupLed();
|
||||
void updateLed();
|
||||
|
||||
void tickReboot(void) {
|
||||
DPRINTLN(DBG_INFO, F("Rebooting..."));
|
||||
|
|
|
@ -100,6 +100,7 @@ typedef struct {
|
|||
typedef struct {
|
||||
uint8_t led0; // first LED pin
|
||||
uint8_t led1; // second LED pin
|
||||
uint8_t led_high_active; // determines if LEDs are high or low active
|
||||
} cfgLed_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -378,6 +379,7 @@ class settings {
|
|||
|
||||
mCfg.led.led0 = DEF_PIN_OFF;
|
||||
mCfg.led.led1 = DEF_PIN_OFF;
|
||||
mCfg.led.led_high_active = LOW;
|
||||
|
||||
memset(&mCfg.inst, 0, sizeof(cfgInst_t));
|
||||
|
||||
|
@ -517,9 +519,11 @@ class settings {
|
|||
if(set) {
|
||||
obj[F("0")] = mCfg.led.led0;
|
||||
obj[F("1")] = mCfg.led.led1;
|
||||
obj[F("led_high_active")] = mCfg.led.led_high_active;
|
||||
} else {
|
||||
mCfg.led.led0 = obj[F("0")];
|
||||
mCfg.led.led1 = obj[F("1")];
|
||||
mCfg.led.led_high_active = obj[F("led_high_active")];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 6
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_PATCH 1
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
|
|
@ -138,6 +138,10 @@ monitor_filters =
|
|||
[env:opendtufusionv1-release]
|
||||
platform = espressif32
|
||||
board = esp32-s3-devkitc-1
|
||||
upload_protocol = esp-builtin
|
||||
upload_speed = 115200
|
||||
debug_tool = esp-builtin
|
||||
debug_speed = 12000
|
||||
build_flags = -D RELEASE -std=gnu++14
|
||||
build_unflags = -std=gnu++11
|
||||
monitor_filters =
|
||||
|
|
|
@ -50,7 +50,6 @@ class PubMqtt {
|
|||
mSubscriptionCb = NULL;
|
||||
memset(mLastIvState, MQTT_STATUS_NOT_AVAIL_NOT_PROD, MAX_NUM_INVERTERS);
|
||||
memset(mIvLastRTRpub, 0, MAX_NUM_INVERTERS * 4);
|
||||
|
||||
mLastAnyAvail = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -391,6 +391,7 @@ class RestApi {
|
|||
obj[F("miso")] = mConfig->nrf.pinMiso;
|
||||
obj[F("led0")] = mConfig->led.led0;
|
||||
obj[F("led1")] = mConfig->led.led1;
|
||||
obj[F("led_high_active")] = mConfig->led.led_high_active;
|
||||
}
|
||||
|
||||
void getRadio(JsonObject obj) {
|
||||
|
|
|
@ -411,6 +411,10 @@
|
|||
[47, "GPIO47"],
|
||||
[48, "GPIO48"],
|
||||
];
|
||||
var led_high_active = [
|
||||
[0, "low active"],
|
||||
[1, "high active"],
|
||||
];
|
||||
|
||||
const re = /11[2,4,6]1.*/;
|
||||
|
||||
|
@ -670,6 +674,14 @@
|
|||
])
|
||||
);
|
||||
}
|
||||
e.append(
|
||||
ml("div", { class: "row mb-3" }, [
|
||||
ml("div", { class: "col-12 col-sm-3 my-2" }, "LED polarity"),
|
||||
ml("div", { class: "col-12 col-sm-9" },
|
||||
sel('pinLedHighActive', led_high_active, obj['led_high_active'])
|
||||
)
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
function parseRadio(obj) {
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
#define WEB_SERIAL_BUF_SIZE 2048
|
||||
|
||||
const char *const pinArgNames[] = {"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0", "pinLed1"};
|
||||
const char *const pinArgNames[] = {"pinCs", "pinCe", "pinIrq", "pinSclk", "pinMosi", "pinMiso", "pinLed0", "pinLed1", "pinLedHighActive"};
|
||||
|
||||
template <class HMSYSTEM>
|
||||
class Web {
|
||||
|
@ -532,6 +532,7 @@ class Web {
|
|||
case 5: mConfig->nrf.pinMiso = ((pin != 0xff) ? pin : DEF_MISO_PIN); break;
|
||||
case 6: mConfig->led.led0 = pin; break;
|
||||
case 7: mConfig->led.led1 = pin; break;
|
||||
case 8: mConfig->led.led_high_active = pin; break; // this is not really a pin but a polarity, but handling it close to here makes sense
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
// 2023 Ahoy, https://www.mikrocontroller.net/topic/525778
|
||||
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
|
||||
// 2023 Ahoy, https://ahoydtu.de
|
||||
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#if defined(ESP32) && defined(F)
|
||||
|
@ -160,6 +160,9 @@ void ahoywifi::setupAp(void) {
|
|||
DBGPRINTLN(mApIp.toString());
|
||||
DBGPRINTLN(F("---------\n"));
|
||||
|
||||
if(String(mConfig->sys.deviceName) != "")
|
||||
WiFi.hostname(mConfig->sys.deviceName);
|
||||
|
||||
WiFi.mode(WIFI_AP_STA);
|
||||
WiFi.softAPConfig(mApIp, mApIp, IPAddress(255, 255, 255, 0));
|
||||
WiFi.softAP(WIFI_AP_SSID, WIFI_AP_PWD);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue