mirror of
https://github.com/lumapu/ahoy.git
synced 2025-04-29 02:06:21 +02:00
0.7.17
* next attempt to fix total yield day for multiple inverters #1016 * added two more states for the inverter status (also docu)
This commit is contained in:
parent
aaf685f465
commit
812adce64e
9 changed files with 28 additions and 22 deletions
|
@ -14,6 +14,8 @@ Hoymiles Inverters
|
|||
| ----- | ----- | ------ | ------- |
|
||||
| ✔️ | MI | 300, 600, 1000/1200/⚠️ 1500 | 4-Channel is not tested yet |
|
||||
| ✔️ | HM | 300, 350, 400, 600, 700, 800, 1000?, 1200, 1500 | |
|
||||
| ✔️ | HMS | 350, 500, 800, 1000, 1600, 1800, 2000 | |
|
||||
| ✔️ | HMT | 1600, 1800, 2250 | |
|
||||
| ⚠️ | TSUN | [TSOL-M350](https://www.tsun-ess.com/Micro-Inverter/M350-M400), [TSOL-M400](https://www.tsun-ess.com/Micro-Inverter/M350-M400), [TSOL-M800/TSOL-M800(DE)](https://www.tsun-ess.com/Micro-Inverter/M800) | others may work as well (need to be verified). |
|
||||
|
||||
## Table of Contents
|
||||
|
|
|
@ -22,7 +22,7 @@ Table of approaches:
|
|||
|
||||
| Board | MI | HM | HMS/HMT | comment | HowTo start |
|
||||
| ------ | -- | -- | ------- | ------- | ---------- |
|
||||
| [ESP8266/ESP32, C++](Getting_Started.md) | ✔️ | ✔️ | ✔️ development version ✨ | 👈 the most effort is spent here | [create your own DTU](https://ahoydtu.de/getting_started/) |
|
||||
| [ESP8266/ESP32, C++](Getting_Started.md) | ✔️ | ✔️ | ✔️ ✨ | 👈 the most effort is spent here | [create your own DTU](https://ahoydtu.de/getting_started/) |
|
||||
| [Arduino Nano, C++](tools/nano/NRF24_SendRcv/) | ❌ | ✔️ | ❌ | |
|
||||
| [Raspberry Pi, Python](tools/rpi/) | ❌ | ✔️ | ❌ | |
|
||||
| [Others, C/C++](tools/nano/NRF24_SendRcv/) | ❌ | ✔️ | ❌ | |
|
||||
|
|
|
@ -48,9 +48,11 @@ The AhoyDTU will publish on the following topics
|
|||
|
||||
| status code | Remarks |
|
||||
|---|---|
|
||||
| 0 | not available and not producing |
|
||||
| 0 | off: not available and not producing |
|
||||
| 1 | available but not producing |
|
||||
| 2 | available and producing |
|
||||
| 3 | available and was producing |
|
||||
| 4 | was available |
|
||||
|
||||
|
||||
### `<TOPIC>/<INVERTER_NAME_FROM_SETUP>/ch0/#`
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
# Development Changes
|
||||
|
||||
## 0.7.17 - 2023-07-25
|
||||
* next attempt to fix yield day for multiple inverters #1016
|
||||
* added two more states for the inverter status (also docu)
|
||||
|
||||
## 0.7.16 - 2023-07-24
|
||||
* next attempt to fix yield day for multiple inverters #1016
|
||||
* fix export settings date #1040
|
||||
|
|
|
@ -322,14 +322,14 @@ void app::tickComm(void) {
|
|||
|
||||
//-----------------------------------------------------------------------------
|
||||
void app::tickZeroValues(void) {
|
||||
zeroIvValues(false);
|
||||
zeroIvValues(!CHECK_AVAIL, SKIP_YIELD_DAY);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void app::tickMinute(void) {
|
||||
// only triggered if 'reset values on no avail is enabled'
|
||||
|
||||
zeroIvValues(true);
|
||||
zeroIvValues(CHECK_AVAIL, SKIP_YIELD_DAY);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -339,7 +339,7 @@ void app::tickMidnight(void) {
|
|||
uint32_t nxtTrig = gTimezone.toUTC(localTime - (localTime % 86400) + 86400); // next midnight local time
|
||||
onceAt(std::bind(&app::tickMidnight, this), nxtTrig, "mid2");
|
||||
|
||||
zeroIvValues(false, false);
|
||||
zeroIvValues(!CHECK_AVAIL, !SKIP_YIELD_DAY);
|
||||
|
||||
if (mMqttEnabled)
|
||||
mMqtt.tickerMidnight();
|
||||
|
|
|
@ -239,6 +239,9 @@ class app : public IApp, public ah::Scheduler {
|
|||
}
|
||||
|
||||
private:
|
||||
#define CHECK_AVAIL true
|
||||
#define SKIP_YIELD_DAY true
|
||||
|
||||
typedef std::function<void()> innerLoopCb;
|
||||
|
||||
void resetSystem(void);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
//-------------------------------------
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 7
|
||||
#define VERSION_PATCH 16
|
||||
#define VERSION_PATCH 17
|
||||
|
||||
//-------------------------------------
|
||||
typedef struct {
|
||||
|
@ -74,10 +74,6 @@ union serial_u {
|
|||
#define MIN_MQTT_INTERVAL 60
|
||||
|
||||
|
||||
#define MQTT_STATUS_NOT_AVAIL_NOT_PROD 0
|
||||
#define MQTT_STATUS_AVAIL_NOT_PROD 1
|
||||
#define MQTT_STATUS_AVAIL_PROD 2
|
||||
|
||||
enum {MQTT_STATUS_OFFLINE = 0, MQTT_STATUS_PARTIAL, MQTT_STATUS_ONLINE};
|
||||
|
||||
//-------------------------------------
|
||||
|
|
|
@ -49,7 +49,7 @@ class PubMqtt {
|
|||
mRxCnt = 0;
|
||||
mTxCnt = 0;
|
||||
mSubscriptionCb = NULL;
|
||||
memset(mLastIvState, MQTT_STATUS_NOT_AVAIL_NOT_PROD, MAX_NUM_INVERTERS);
|
||||
memset(mLastIvState, (uint8_t)InverterStatus::OFF, MAX_NUM_INVERTERS);
|
||||
memset(mIvLastRTRpub, 0, MAX_NUM_INVERTERS * 4);
|
||||
mLastAnyAvail = false;
|
||||
mZeroValues = false;
|
||||
|
@ -488,24 +488,22 @@ class PubMqtt {
|
|||
rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
||||
|
||||
// inverter status
|
||||
uint8_t status = MQTT_STATUS_NOT_AVAIL_NOT_PROD;
|
||||
if (iv->isAvailable()) {
|
||||
iv->isProducing(); // recalculate status
|
||||
if (iv->isAvailable())
|
||||
anyAvail = true;
|
||||
status = (iv->isProducing()) ? MQTT_STATUS_AVAIL_PROD : MQTT_STATUS_AVAIL_NOT_PROD;
|
||||
}
|
||||
else // inverter is enabled but not available
|
||||
allAvail = false;
|
||||
|
||||
if(mLastIvState[id] != status) {
|
||||
if(mLastIvState[id] != iv->status) {
|
||||
// if status changed from producing to not producing send last data immediately
|
||||
if (MQTT_STATUS_AVAIL_PROD == mLastIvState[id])
|
||||
if (InverterStatus::WAS_PRODUCING == mLastIvState[id])
|
||||
sendData(iv, RealTimeRunData_Debug);
|
||||
|
||||
mLastIvState[id] = status;
|
||||
mLastIvState[id] = iv->status;
|
||||
changed = true;
|
||||
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/available", iv->config->name);
|
||||
snprintf(mVal, 40, "%d", status);
|
||||
snprintf(mVal, 40, "%d", (uint8_t)iv->status);
|
||||
publish(mSubTopic, mVal, true);
|
||||
|
||||
snprintf(mSubTopic, 32 + MAX_NAME_LENGTH, "%s/last_success", iv->config->name);
|
||||
|
@ -596,7 +594,7 @@ class PubMqtt {
|
|||
subscriptionCb mSubscriptionCb;
|
||||
bool mLastAnyAvail;
|
||||
bool mZeroValues;
|
||||
uint8_t mLastIvState[MAX_NUM_INVERTERS];
|
||||
InverterStatus mLastIvState[MAX_NUM_INVERTERS];
|
||||
uint32_t mIvLastRTRpub[MAX_NUM_INVERTERS];
|
||||
uint16_t mIntervalTimeout;
|
||||
|
||||
|
|
|
@ -99,9 +99,10 @@ class PubMqttIvData {
|
|||
mLastIvId++;
|
||||
|
||||
mPos = 0;
|
||||
if(found)
|
||||
if(found) {
|
||||
mIv->isProducing(); // recalculate status
|
||||
mState = SEND_DATA;
|
||||
else if(mSendTotals && mTotalFound)
|
||||
} else if(mSendTotals && mTotalFound)
|
||||
mState = SEND_TOTALS;
|
||||
else {
|
||||
mSendList->pop();
|
||||
|
|
Loading…
Add table
Reference in a new issue