Browse Source

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 for new syntax #696, #713
repaired inverter wise limit control, #713
pull/769/head
lumapu 2 years ago
parent
commit
3e919b4d10
  1. 57
      User_Manual.md
  2. 3
      src/CHANGES.md
  3. 7
      src/LICENSE
  4. 2
      src/app.cpp
  5. 2
      src/app.h
  6. 2
      src/appInterface.h
  7. 4
      src/defines.h
  8. 4
      src/main.cpp
  9. 36
      src/publisher/pubMqtt.h
  10. 16
      src/publisher/pubMqttDefs.h
  11. 2
      src/web/html/includes/footer.html

57
User_Manual.md

@ -91,9 +91,6 @@ The AhoyDTU will publish on the following topics
## Active Power Limit via Serial / Control Page
URL: `/serial`
If you leave the field "Active Power Limit" empty during the setup and reboot the ahoy-dtu will set a value of 65535 in the setup.
That is the value you have to fill in case you want to operate the inverter without a active power limit.
If the value is 65535 or -1 after another reboot the value will be set automatically to "100" and in the drop-down menu "relative in percent persistent" will be set. Of course you can do this also by your self.
You can change the setting in the following manner.
Decide if you want to set
@ -115,24 +112,17 @@ Also an absolute active power limit below approx. 30 Watt seems to be not meanfu
### Generic Information
The AhoyDTU subscribes on three topics `<TOPIC>/ctrl/#`, `<TOPIC>/setup` and `<TOPIC>/status`.
The AhoyDTU subscribes on following topics:
- `<TOPIC>/ctrl/limit/<INVERTER_ID>`
- `<TOPIC>/ctrl/restart/<INVERTER_ID>`
- `<TOPIC>/setup/set_time`
👆 `<TOPIC>` can be set on setup page, default is `inverter`.
👆 `<INVERTER_ID>` is the number of the specific inverter in the setup page.
### Inverter Power (On / Off)
```mqtt
<TOPIC>/ctrl/power/<INVERTER_ID>
```
with payload `1` = `ON` and `0` = `OFF`
Example:
```mqtt
inverter/ctrl/power/0 1
```
### Inverter restart
```mqtt
<TOPIC>/ctrl/restart/<INVERTER_ID>
@ -142,50 +132,35 @@ Example:
inverter/ctrl/restart/0
```
### Power Limit relative persistent [%]
### Power Limit relative (non persistent) [%]
```mqtt
<TOPIC>/ctrl/limit_persistent_relative/<INVERTER_ID>
<TOPIC>/ctrl/limit/<INVERTER_ID>
```
with a payload `[2 .. 100]`
**NOTE: optional a `%` can be sent as last character**
Example:
```mqtt
inverter/ctrl/limit_persistent_relative/0 70
inverter/ctrl/limit/0 70
```
### Power Limit absolute persistent [Watts]
### Power Limit absolute (non persistent) [Watts]
```mqtt
<TOPIC>/ctrl/limit_persistent_absolute/<INVERTER_ID>
<TOPIC>/ctrl/limit/<INVERTER_ID>
```
with a payload `[0 .. 65535]`
Example:
```mqtt
inverter/ctrl/limit_persistent_absolute/0 600
```
### Power Limit relative non persistent [%]
```mqtt
<TOPIC>/ctrl/limit_nonpersistent_relative/<INVERTER_ID>
```
with a payload `[2 .. 100]`
**NOTE: the unit `W` is necessary to determine an absolute limit**
Example:
```mqtt
inverter/ctrl/limit_nonpersistent_relative/0 70
```
### Power Limit absolute non persistent [Watts]
```mqtt
<TOPIC>/ctrl/limit_nonpersistent_absolute/<INVERTER_ID>
inverter/ctrl/limit_nonpersistent_absolute/0 600W
```
with a payload `[0 .. 65535]`
Example:
```mqtt
inverter/ctrl/limit_nonpersistent_absolute/0 600
```
### Power Limit persistent
This feature was removed. The persisten limit should not be modified cyclic by a script because of potential wearout of the flash inside the inverter.
## Control via REST API

3
src/CHANGES.md

@ -4,6 +4,9 @@
## 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
## 0.5.97
* Attention: re-ordered display types, check your settings! #746

7
src/LICENSE

@ -1,7 +0,0 @@
License
CC-CY-NC-SA 3.0
https://creativecommons.org/licenses/by-nc-sa/3.0/de
This project is for non-commercial use only!

2
src/app.cpp

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2023 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
//-----------------------------------------------------------------------------
#include "app.h"

2
src/app.h

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2023 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 __APP_H__

2
src/appInterface.h

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2022 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 __IAPP_H__

4
src/defines.h

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2023 Ahoy, https://www.mikrocontroller.net/topic/525778
// 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 __DEFINES_H__
@ -13,7 +13,7 @@
//-------------------------------------
#define VERSION_MAJOR 0
#define VERSION_MINOR 5
#define VERSION_PATCH 97
#define VERSION_PATCH 98
//-------------------------------------
typedef struct {

4
src/main.cpp

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2022 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
//-----------------------------------------------------------------------------
#include "utils/dbg.h"

36
src/publisher/pubMqtt.h

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2023 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
//-----------------------------------------------------------------------------
// https://bert.emelis.net/espMqttClient/
@ -312,13 +312,14 @@ class PubMqtt {
tickerMinute();
publish(mLwtTopic, mqttStr[MQTT_STR_LWT_CONN], true, false);
subscribe(subscr[MQTT_SUBS_LMT_PERI_REL]);
subscribe(subscr[MQTT_SUBS_LMT_PERI_ABS]);
subscribe(subscr[MQTT_SUBS_LMT_NONPERI_REL]);
subscribe(subscr[MQTT_SUBS_LMT_NONPERI_ABS]);
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);
}
subscribe(subscr[MQTT_SUBS_SET_TIME]);
subscribe(subscr[MQTT_SUBS_SYNC_NTP]);
//subscribe("status/#");
}
void onDisconnect(espMqttClientTypes::DisconnectReason reason) {
@ -358,11 +359,15 @@ class PubMqtt {
DynamicJsonDocument json(128);
JsonObject root = json.to<JsonObject>();
bool limitAbs = false;
if(len > 0) {
char *pyld = new char[len + 1];
strncpy(pyld, (const char*)payload, len);
pyld[len] = '\0';
root["val"] = atoi(pyld);
root[F("val")] = atoi(pyld);
DPRINTLN(DBG_INFO, String(pyld) + " " + String(len));
if(pyld[len-1] == 'W')
limitAbs = true;
delete[] pyld;
}
@ -377,7 +382,16 @@ class PubMqtt {
tmp[pos] = '\0';
switch(elm++) {
case 1: root[F("path")] = String(tmp); break;
case 2: root[F("cmd")] = String(tmp); break;
case 2:
if(strncmp("limit", tmp, 5) == 0) {
if(limitAbs)
root[F("cmd")] = F("limit_nonpersistent_absolute");
else
root[F("cmd")] = F("limit_nonpersistent_relative");
}
else
root[F("cmd")] = String(tmp);
break;
case 3: root[F("id")] = atoi(tmp); break;
default: break;
}
@ -389,9 +403,9 @@ class PubMqtt {
pos++;
}
/*char out[128];
char out[128];
serializeJson(root, out, 128);
DPRINTLN(DBG_INFO, "json: " + String(out));*/
DPRINTLN(DBG_INFO, "json: " + String(out));
(mSubscriptionCb)(root);
mRxCnt++;

16
src/publisher/pubMqttDefs.h

@ -1,6 +1,6 @@
//-----------------------------------------------------------------------------
// 2023 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 __PUB_MQTT_DEFS_H__
@ -84,21 +84,11 @@ const char* const subtopics[] PROGMEM = {
};
enum {
MQTT_SUBS_LMT_PERI_REL,
MQTT_SUBS_LMT_PERI_ABS,
MQTT_SUBS_LMT_NONPERI_REL,
MQTT_SUBS_LMT_NONPERI_ABS,
MQTT_SUBS_SET_TIME,
MQTT_SUBS_SYNC_NTP
MQTT_SUBS_SET_TIME
};
const char* const subscr[] PROGMEM = {
"ctrl/limit_persistent_relative",
"ctrl/limit_persistent_absolute",
"ctrl/limit_nonpersistent_relative",
"ctrl/limit_nonpersistent_absolute",
"setup/set_time",
"setup/sync_ntp"
"setup/set_time"
};
#endif /*__PUB_MQTT_DEFS_H__*/

2
src/web/html/includes/footer.html

@ -10,7 +10,7 @@
<ul>
<li>{#VERSION_GIT}</li>
<li id="esp_type"></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/3.0/de" target="_blank" >CC BY-NC-SA 3.0</a></li>
<li><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed" target="_blank" >CC BY-NC-SA 4.0</a></li>
</ul>
</div>
</div>

Loading…
Cancel
Save