mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-10 23:46:37 +02:00
0.8.51
* fix translation #1346 * further improve sending active power control command faster #1332 * added history protection mask
This commit is contained in:
parent
e4cb948be4
commit
76fa30503d
15 changed files with 41 additions and 69 deletions
|
@ -1,45 +0,0 @@
|
||||||
{
|
|
||||||
"folders": [
|
|
||||||
{
|
|
||||||
"path": "."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "src"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"settings": {
|
|
||||||
"files.associations": {
|
|
||||||
"algorithm": "cpp",
|
|
||||||
"array": "cpp",
|
|
||||||
"chrono": "cpp",
|
|
||||||
"deque": "cpp",
|
|
||||||
"format": "cpp",
|
|
||||||
"forward_list": "cpp",
|
|
||||||
"functional": "cpp",
|
|
||||||
"initializer_list": "cpp",
|
|
||||||
"iterator": "cpp",
|
|
||||||
"list": "cpp",
|
|
||||||
"memory": "cpp",
|
|
||||||
"queue": "cpp",
|
|
||||||
"random": "cpp",
|
|
||||||
"regex": "cpp",
|
|
||||||
"vector": "cpp",
|
|
||||||
"xhash": "cpp",
|
|
||||||
"xlocmon": "cpp",
|
|
||||||
"xlocnum": "cpp",
|
|
||||||
"xmemory": "cpp",
|
|
||||||
"xstring": "cpp",
|
|
||||||
"xtree": "cpp",
|
|
||||||
"xutility": "cpp",
|
|
||||||
"*.tcc": "cpp",
|
|
||||||
"string": "cpp",
|
|
||||||
"unordered_map": "cpp",
|
|
||||||
"unordered_set": "cpp",
|
|
||||||
"string_view": "cpp",
|
|
||||||
"sstream": "cpp",
|
|
||||||
"istream": "cpp",
|
|
||||||
"ostream": "cpp"
|
|
||||||
},
|
|
||||||
"editor.formatOnSave": false
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,7 +21,8 @@ def get_firmware_specifier_build_flag():
|
||||||
except:
|
except:
|
||||||
build_version = "g0000000"
|
build_version = "g0000000"
|
||||||
|
|
||||||
build_flag = "-D AUTO_GIT_HASH=\\\"" + build_version[1:] + "\\\""
|
build_flag = "-D AUTO_GIT_HASH=\\\"" + build_version[1:] + "\\\" "
|
||||||
|
build_flag += "-DENV_NAME=\\\"" + env["PIOENV"] + "\\\" ";
|
||||||
print ("Firmware Revision: " + build_version)
|
print ("Firmware Revision: " + build_version)
|
||||||
return (build_flag)
|
return (build_flag)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
# Development Changes
|
# Development Changes
|
||||||
|
|
||||||
|
## 0.8.51 - 2024-01-10
|
||||||
|
* fix translation #1346
|
||||||
|
* further improve sending active power control command faster #1332
|
||||||
|
* added history protection mask
|
||||||
|
|
||||||
## 0.8.50 - 2024-01-09
|
## 0.8.50 - 2024-01-09
|
||||||
* merge PR: added history charts to web #1336
|
* merge PR: added history charts to web #1336
|
||||||
* merge PR: small display changes #1339
|
* merge PR: small display changes #1339
|
||||||
|
|
|
@ -53,7 +53,7 @@ void app::setup() {
|
||||||
mCommunication.setup(&mTimestamp, &mConfig->serial.debug, &mConfig->serial.privacyLog, &mConfig->serial.printWholeTrace, &mConfig->inst.gapMs);
|
mCommunication.setup(&mTimestamp, &mConfig->serial.debug, &mConfig->serial.privacyLog, &mConfig->serial.printWholeTrace, &mConfig->inst.gapMs);
|
||||||
mCommunication.addPayloadListener(std::bind(&app::payloadEventListener, this, std::placeholders::_1, std::placeholders::_2));
|
mCommunication.addPayloadListener(std::bind(&app::payloadEventListener, this, std::placeholders::_1, std::placeholders::_2));
|
||||||
mCommunication.addPowerLimitAckListener([this] (Inverter<> *iv) { mMqtt.setPowerLimitAck(iv); });
|
mCommunication.addPowerLimitAckListener([this] (Inverter<> *iv) { mMqtt.setPowerLimitAck(iv); });
|
||||||
mSys.setup(&mTimestamp, &mConfig->inst);
|
mSys.setup(&mTimestamp, &mConfig->inst, this);
|
||||||
for (uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
for (uint8_t i = 0; i < MAX_NUM_INVERTERS; i++) {
|
||||||
initInverter(i);
|
initInverter(i);
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,6 +307,10 @@ class app : public IApp, public ah::Scheduler {
|
||||||
#endif /* defined(ETHERNET) */
|
#endif /* defined(ETHERNET) */
|
||||||
void updateNtp(void);
|
void updateNtp(void);
|
||||||
|
|
||||||
|
void triggerTickSend() {
|
||||||
|
once(std::bind(&app::tickSend, this), 0, "tSend");
|
||||||
|
}
|
||||||
|
|
||||||
void tickCalcSunrise(void);
|
void tickCalcSunrise(void);
|
||||||
void tickIVCommunication(void);
|
void tickIVCommunication(void);
|
||||||
void tickSun(void);
|
void tickSun(void);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2022 Ahoy, https://ahoydtu.de
|
// 2024 Ahoy, https://ahoydtu.de
|
||||||
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@
|
||||||
#define __IAPP_H__
|
#define __IAPP_H__
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "hm/hmSystem.h"
|
|
||||||
#if defined(ETHERNET)
|
#if defined(ETHERNET)
|
||||||
#include "AsyncWebServer_ESP32_W5500.h"
|
#include "AsyncWebServer_ESP32_W5500.h"
|
||||||
#else
|
#else
|
||||||
|
@ -47,6 +46,8 @@ class IApp {
|
||||||
virtual void getSchedulerInfo(uint8_t *max) = 0;
|
virtual void getSchedulerInfo(uint8_t *max) = 0;
|
||||||
virtual void getSchedulerNames() = 0;
|
virtual void getSchedulerNames() = 0;
|
||||||
|
|
||||||
|
virtual void triggerTickSend() = 0;
|
||||||
|
|
||||||
virtual bool getRebootRequestState() = 0;
|
virtual bool getRebootRequestState() = 0;
|
||||||
virtual bool getSettingsValid() = 0;
|
virtual bool getSettingsValid() = 0;
|
||||||
virtual void setMqttDiscoveryFlag() = 0;
|
virtual void setMqttDiscoveryFlag() = 0;
|
||||||
|
|
|
@ -39,9 +39,9 @@
|
||||||
#define PROT_MASK_SETUP 0x0008
|
#define PROT_MASK_SETUP 0x0008
|
||||||
#define PROT_MASK_UPDATE 0x0010
|
#define PROT_MASK_UPDATE 0x0010
|
||||||
#define PROT_MASK_SYSTEM 0x0020
|
#define PROT_MASK_SYSTEM 0x0020
|
||||||
#define PROT_MASK_API 0x0040
|
#define PROT_MASK_HISTORY 0x0040
|
||||||
#define PROT_MASK_MQTT 0x0080
|
#define PROT_MASK_API 0x0080
|
||||||
#define PROT_MASK_HISTORY 0x0100
|
#define PROT_MASK_MQTT 0x0100
|
||||||
|
|
||||||
#define DEF_PROT_INDEX 0x0001
|
#define DEF_PROT_INDEX 0x0001
|
||||||
#define DEF_PROT_LIVE 0x0000
|
#define DEF_PROT_LIVE 0x0000
|
||||||
|
@ -49,9 +49,9 @@
|
||||||
#define DEF_PROT_SETUP 0x0008
|
#define DEF_PROT_SETUP 0x0008
|
||||||
#define DEF_PROT_UPDATE 0x0010
|
#define DEF_PROT_UPDATE 0x0010
|
||||||
#define DEF_PROT_SYSTEM 0x0020
|
#define DEF_PROT_SYSTEM 0x0020
|
||||||
|
#define DEF_PROT_HISTORY 0x0000
|
||||||
#define DEF_PROT_API 0x0000
|
#define DEF_PROT_API 0x0000
|
||||||
#define DEF_PROT_MQTT 0x0000
|
#define DEF_PROT_MQTT 0x0000
|
||||||
#define DEF_PROT_HISTORY 0x0000
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 8
|
#define VERSION_MINOR 8
|
||||||
#define VERSION_PATCH 50
|
#define VERSION_PATCH 51
|
||||||
|
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2024 Ahoy, https://www.mikrocontroller.net/topic/525778
|
// 2024 Ahoy, https://ahoydtu.de
|
||||||
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
||||||
#define MAX_GRID_LENGTH 150
|
#define MAX_GRID_LENGTH 150
|
||||||
|
|
||||||
#include "hmDefines.h"
|
#include "hmDefines.h"
|
||||||
|
#include "../appInterface.h"
|
||||||
#include "HeuristicInv.h"
|
#include "HeuristicInv.h"
|
||||||
#include "../hms/hmsDefines.h"
|
#include "../hms/hmsDefines.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -148,8 +149,9 @@ class Inverter {
|
||||||
bool commEnabled; // 'pause night communication' sets this field to false
|
bool commEnabled; // 'pause night communication' sets this field to false
|
||||||
uint32_t tsMaxAcPower; // holds the timestamp when the MaxAC power was seen
|
uint32_t tsMaxAcPower; // holds the timestamp when the MaxAC power was seen
|
||||||
|
|
||||||
static uint32_t *timestamp; // system timestamp
|
static uint32_t *timestamp; // system timestamp
|
||||||
static cfgInst_t *generalConfig; // general inverter configuration from setup
|
static cfgInst_t *generalConfig; // general inverter configuration from setup
|
||||||
|
static IApp *app; // pointer to app interface
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -286,6 +288,7 @@ class Inverter {
|
||||||
if(isConnected) {
|
if(isConnected) {
|
||||||
mDevControlRequest = true;
|
mDevControlRequest = true;
|
||||||
devControlCmd = cmd;
|
devControlCmd = cmd;
|
||||||
|
app->triggerTickSend();
|
||||||
}
|
}
|
||||||
return isConnected;
|
return isConnected;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2023 Ahoy, https://github.com/lumpapu/ahoy
|
// 2024 Ahoy, https://ahoydtu.de
|
||||||
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
|
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifndef __HM_SYSTEM_H__
|
#ifndef __HM_SYSTEM_H__
|
||||||
#define __HM_SYSTEM_H__
|
#define __HM_SYSTEM_H__
|
||||||
|
|
||||||
|
#include "../appInterface.h"
|
||||||
#include "hmInverter.h"
|
#include "hmInverter.h"
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
|
@ -14,9 +15,10 @@ class HmSystem {
|
||||||
public:
|
public:
|
||||||
HmSystem() {}
|
HmSystem() {}
|
||||||
|
|
||||||
void setup(uint32_t *timestamp, cfgInst_t *config) {
|
void setup(uint32_t *timestamp, cfgInst_t *config, IApp *app) {
|
||||||
mInverter[0].timestamp = timestamp;
|
mInverter[0].timestamp = timestamp;
|
||||||
mInverter[0].generalConfig = config;
|
mInverter[0].generalConfig = config;
|
||||||
|
mInverter[0].app = app;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addInverter(uint8_t id, std::function<void(Inverter<> *iv)> cb) {
|
void addInverter(uint8_t id, std::function<void(Inverter<> *iv)> cb) {
|
||||||
|
|
|
@ -121,7 +121,7 @@ namespace ah {
|
||||||
uint16_t mTsMillis;
|
uint16_t mTsMillis;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline uint8_t addTicker(scdCb c, uint32_t timeout, uint32_t reload, bool isTimestamp, const char *name) {
|
uint8_t addTicker(scdCb c, uint32_t timeout, uint32_t reload, bool isTimestamp, const char *name) {
|
||||||
for (uint8_t i = 0; i < MAX_NUM_TICKER; i++) {
|
for (uint8_t i = 0; i < MAX_NUM_TICKER; i++) {
|
||||||
if (!mTickerInUse[i]) {
|
if (!mTickerInUse[i]) {
|
||||||
mTickerInUse[i] = true;
|
mTickerInUse[i] = true;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// 2024 Ahoy, https://ahoydtu.de
|
// 2024 Ahoy, https://ahoydtu.de
|
||||||
// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
|
// Creative Commons - https://creativecommons.org/licenses/by-nc-sa/4.0/deed
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
#ifndef __WEB_API_H__
|
#ifndef __WEB_API_H__
|
||||||
|
@ -255,6 +255,7 @@ class RestApi {
|
||||||
obj[F("ts_now")] = mApp->getTimestamp();
|
obj[F("ts_now")] = mApp->getTimestamp();
|
||||||
obj[F("version")] = String(mApp->getVersion());
|
obj[F("version")] = String(mApp->getVersion());
|
||||||
obj[F("build")] = String(AUTO_GIT_HASH);
|
obj[F("build")] = String(AUTO_GIT_HASH);
|
||||||
|
obj[F("env")] = String(ENV_NAME);
|
||||||
obj[F("menu_prot")] = mApp->getProtection(request);
|
obj[F("menu_prot")] = mApp->getProtection(request);
|
||||||
obj[F("menu_mask")] = (uint16_t)(mConfig->sys.protectionMask );
|
obj[F("menu_mask")] = (uint16_t)(mConfig->sys.protectionMask );
|
||||||
obj[F("menu_protEn")] = (bool) (strlen(mConfig->sys.adminPwd) > 0);
|
obj[F("menu_protEn")] = (bool) (strlen(mConfig->sys.adminPwd) > 0);
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<li>{#DISCUSS} <a href="https://discord.gg/WzhxEY62mB">Discord</a></li>
|
<li>{#DISCUSS} <a href="https://discord.gg/WzhxEY62mB">Discord</a></li>
|
||||||
<li>{#REPORT} <a href="https://github.com/lumapu/ahoy/issues" target="_blank">{#ISSUES}</a></li>
|
<li>{#REPORT} <a href="https://github.com/lumapu/ahoy/issues" target="_blank">{#ISSUES}</a></li>
|
||||||
<li>{#CONTRIBUTE} <a href="https://github.com/lumapu/ahoy/blob/main/User_Manual.md" target="_blank">{#DOCUMENTATION}</a></li>
|
<li>{#CONTRIBUTE} <a href="https://github.com/lumapu/ahoy/blob/main/User_Manual.md" target="_blank">{#DOCUMENTATION}</a></li>
|
||||||
<li><a href="https://nightly.link/lumapu/ahoy/workflows/compile_development/development03/ahoydtu_dev.zip" target="_blank">Download</a> & Test {#DEV_FIRMWARE}, <a href="https://github.com/lumapu/ahoy/blob/development03/src/CHANGES.md" target="_blank">{#DEV_CHANGELOG}</a></li>
|
<li><a href="https://fw.ahoydtu.de/dev/" target="_blank">Download</a> & Test {#DEV_FIRMWARE}, <a href="https://github.com/lumapu/ahoy/blob/development03/src/CHANGES.md" target="_blank">{#DEV_CHANGELOG}</a></li>
|
||||||
<li>{#DON_MAKE} <a href="https://paypal.me/lupusch" target="_blank">{#DONATION}</a></li>
|
<li>{#DON_MAKE} <a href="https://paypal.me/lupusch" target="_blank">{#DONATION}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -254,7 +254,7 @@
|
||||||
<div class="col-12 col-sm-9"><input type="text" name="mqttUser"/></div>
|
<div class="col-12 col-sm-9"><input type="text" name="mqttUser"/></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<div class="col-12 col-sm-3 my-2">{MQTT_PASSWORD}</div>
|
<div class="col-12 col-sm-3 my-2">{#MQTT_PASSWORD}</div>
|
||||||
<div class="col-12 col-sm-9"><input type="password" name="mqttPwd"/></div>
|
<div class="col-12 col-sm-9"><input type="password" name="mqttPwd"/></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
|
@ -630,9 +630,9 @@
|
||||||
if(!obj["pwd_set"])
|
if(!obj["pwd_set"])
|
||||||
e.value = "";
|
e.value = "";
|
||||||
var d = document.getElementById("prot_mask");
|
var d = document.getElementById("prot_mask");
|
||||||
var a = ["Index", "{#NAV_LIVE}", "{#NAV_WEBSERIAL}", "{#NAV_SETTINGS}", "Update", "System"];
|
var a = ["Index", "{#NAV_LIVE}", "{#NAV_WEBSERIAL}", "{#NAV_SETTINGS}", "Update", "System", "{#NAV_HISTORY}"];
|
||||||
var el = [];
|
var el = [];
|
||||||
for(var i = 0; i < 6; i++) {
|
for(var i = 0; i < 7; i++) {
|
||||||
var chk = ((obj["prot_mask"] & (1 << i)) == (1 << i));
|
var chk = ((obj["prot_mask"] & (1 << i)) == (1 << i));
|
||||||
el.push(mlCb("protMask" + i, a[i], chk))
|
el.push(mlCb("protMask" + i, a[i], chk))
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,7 @@
|
||||||
{
|
{
|
||||||
"token": "REBOOT_AT_MIDNIGHT",
|
"token": "REBOOT_AT_MIDNIGHT",
|
||||||
"en": "Reboot Ahoy at midnight",
|
"en": "Reboot Ahoy at midnight",
|
||||||
"de": "um Mitternacht neu starten"
|
"de": "mitternachts neu starten"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"token": "DARK_MODE",
|
"token": "DARK_MODE",
|
||||||
|
@ -291,7 +291,7 @@
|
||||||
{
|
{
|
||||||
"token": "INV_RESET_MAX_MIDNIGHT",
|
"token": "INV_RESET_MAX_MIDNIGHT",
|
||||||
"en": "Reset 'max' values at midnight",
|
"en": "Reset 'max' values at midnight",
|
||||||
"de": "Maximalwerte bei Sonnenuntergang zurücksetzen"
|
"de": "Maximalwerte mitternachts zurücksetzen"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"token": "INV_START_WITHOUT_TIME",
|
"token": "INV_START_WITHOUT_TIME",
|
||||||
|
@ -1096,7 +1096,7 @@
|
||||||
{
|
{
|
||||||
"token": "APC",
|
"token": "APC",
|
||||||
"en": "APC",
|
"en": "APC",
|
||||||
"de": "Begr."
|
"de": "Limit"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"token": "ALARMS",
|
"token": "ALARMS",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue