Skip to content

Commit d808ee9

Browse files
author
lukas
committed
Merge branch 'combine/rest-more-manufacturers' into combine/rest-no-nrf-hoymiles
2 parents a480878 + 9839bf8 commit d808ee9

15 files changed

Lines changed: 149 additions & 90 deletions

build_firmwares.sh

Lines changed: 55 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,72 @@ set -e
44

55
TARGET_FOLDER=$(realpath ~/Schreibtisch/opendtu)
66
BUILD_COMMAND='~/.platformio/penv/bin/platformio run'
7-
BUILD_COMMAND_16='~/.platformio/penv/bin/platformio run -e generic_esp32_16mb_psram'
7+
#BUILD_COMMAND_16='~/.platformio/penv/bin/platformio run -e generic_esp32_16mb_psram'
88

99
echo "Target folder is: $TARGET_FOLDER"
1010

11+
1112
createBuild() {
12-
git checkout $1
1313
#clear existing old build stuff (some times not clear build done)
1414
rm -Rf .pio/build
1515
yarn --cwd webapp run build
1616

1717
eval $BUILD_COMMAND
18-
echo "Build Generic: $2_esp32dev_firmware.bin copy to: $TARGET_FOLDER"
18+
echo "Build Generic: $1_esp32dev_firmware.bin copy to: $TARGET_FOLDER"
1919
mkdir -p $TARGET_FOLDER/generic_esp32
2020
cp .pio/build/generic_esp32/firmware.bin $TARGET_FOLDER/generic_esp32/$2_esp32dev_firmware.bin
2121

22-
eval $BUILD_COMMAND_16
23-
echo "Build 16MB psram: $2_esp32dev_firmware.bin copy to: $TARGET_FOLDER"
24-
mkdir -p $TARGET_FOLDER/generic_esp32_16mb_psram
25-
cp .pio/build/generic_esp32_16mb_psram/firmware.bin $TARGET_FOLDER/generic_esp32_16mb_psram/$2_esp32dev_firmware.bin
22+
# eval $BUILD_COMMAND_16
23+
# echo "Build 16MB psram: $2_esp32dev_firmware.bin copy to: $TARGET_FOLDER"
24+
# mkdir -p $TARGET_FOLDER/generic_esp32_16mb_psram
25+
# cp .pio/build/generic_esp32_16mb_psram/firmware.bin $TARGET_FOLDER/generic_esp32_16mb_psram/$2_esp32dev_firmware.bin
26+
}
27+
28+
buildAndCheckout(){
29+
git checkout $1
30+
createBuild $2
2631
}
2732

28-
createBuild "feature/more-manufacturers" "more_manufacturers"
29-
createBuild "feature/deye-sun" "deye"
30-
createBuild "feature/hoymiles-HMS-W-2T" "HMS-XXXW-XT"
31-
createBuild "feature/servo" "servo"
32-
createBuild "feature/default-start-date" "starttime"
33-
createBuild "feature/push-rest-api" "rest"
34-
createBuild "combine/rest-more-manufacturers" "rest_more_manufacturers"
35-
createBuild "combine/rest-no-nrf-hoymiles" "rest_no_nrf"
36-
createBuild "combine/all" "all_in_one"
33+
buildAndCheckout "feature/more-manufacturers" "more_manufacturers"
34+
buildAndCheckout "feature/deye-sun" "deye"
35+
buildAndCheckout "feature/hoymiles-HMS-W-2T" "HMS-XXXW-XT"
36+
buildAndCheckout "feature/servo" "servo"
37+
buildAndCheckout "feature/default-start-date" "starttime"
38+
buildAndCheckout "feature/push-rest-api" "rest"
39+
buildAndCheckout "combine/rest-more-manufacturers" "rest_more_manufacturers"
40+
buildAndCheckout "combine/rest-no-nrf-hoymiles" "rest_no_nrf"
41+
42+
git checkout "combine/all"
43+
44+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=1/' platformio.ini
45+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=0/' platformio.ini
46+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=0/' platformio.ini
47+
createBuild "all_in_one_hoymiles"
48+
49+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=0/' platformio.ini
50+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=1/' platformio.ini
51+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=0/' platformio.ini
52+
createBuild "all_in_one_deye"
53+
54+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=0/' platformio.ini
55+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=0/' platformio.ini
56+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=1/' platformio.ini
57+
createBuild "all_in_one_hoymilesW"
58+
59+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=1/' platformio.ini
60+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=1/' platformio.ini
61+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=0/' platformio.ini
62+
createBuild "all_in_one_hoymiles_deye"
63+
64+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=0/' platformio.ini
65+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=1/' platformio.ini
66+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=1/' platformio.ini
67+
createBuild "all_in_one_deye_hoymilesW"
68+
69+
sed -i 's/-DHOYMILES=[^ ]*/-DHOYMILES=1/' platformio.ini
70+
sed -i 's/-DDEYE_SUN=[^ ]*/-DDEYE_SUN=0/' platformio.ini
71+
sed -i 's/-DHOYMILES_W=[^ ]*/-DHOYMILES_W=1/' platformio.ini
72+
createBuild "all_in_one_hoymiles_hoymiles_w"
73+
74+
git reset --hard HEAD
75+
echo "Build all images successfully!"

include/InverterSettings.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,17 @@ class InverterSettingsClass {
1616

1717
Task _settingsTask;
1818

19-
#ifdef HOYMILES
19+
#if HOYMILES
2020
Task _hoyTask;
2121
void hoyLoop();
2222
#endif
2323

24-
#ifdef DEYE_SUN
24+
#if DEYE_SUN
2525
Task _deyeTask;
2626
void deyeLoop();
2727
#endif
2828

29-
#ifdef HOYMILES_W
29+
#if HOYMILES_W
3030
Task _hoyWTask;
3131
void hoyWLoop();
3232
#endif

lib/DeyeSun/src/inverters/AtCommandsDeyeInverter.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,20 @@ bool AtCommandsDeyeInverter::resolveHostname() {
350350
auto ret = WiFi.hostByName(ipToFind, remote_addr);
351351
if (ret == 1) {
352352
ESP_LOGD(TAG,"Resolved Ip is: %s", remote_addr.toString().c_str());
353-
_ipAdress = std::make_unique<IPAddress>(remote_addr);
353+
auto newAdr = std::make_unique<IPAddress>(remote_addr);
354+
if(newAdr != _ipAdress){
355+
endSocket();//end current connections new ip
356+
ESP_LOGI(TAG,"Found new IpAddress reset current connection");
357+
}
358+
_ipAdress = std::move(newAdr);
354359
return true;
355360
}
356361
ESP_LOGW(TAG,"Could not resolve hostname: %s\n", ipToFind);
362+
if(_IpOrHostnameIsMac && _resolvedIpByMacAdress == nullptr && _ipAdress != nullptr){
363+
//only reset on mac resolution
364+
ESP_LOGW(TAG,"Reset resolved ip from mac");
365+
_ipAdress = nullptr;
366+
}
357367
return false;
358368
}
359369

lib/Hoymiles-W/src/inverters/HMS_W_2T.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static const byteAssign_t byteAssignment[] = {
1414
{ TYPE_DC, CH1, FLD_PDC, UNIT_W, 32, 2, 10, false,false, 2 },
1515
{ TYPE_DC, CH1, FLD_YD, UNIT_WH, 34, 4, 1, false,false, 0 },
1616
{ TYPE_DC, CH1, FLD_YT, UNIT_KWH, 38, 4, 1000, false,false, 3 },
17-
{ TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH0, CMD_CALC, false,false, 3 },
17+
{ TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH1, CMD_CALC, false,false, 3 },
1818

1919
{ TYPE_AC, CH0, FLD_UAC, UNIT_V, 2, 2, 10, false,false, 1 },
2020
{ TYPE_AC, CH0, FLD_IAC, UNIT_A, 0, 2, 100, false,false, 2 },

lib/Hoymiles-W/src/inverters/HMS_W_4T.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@ static const byteAssign_t byteAssignment[] = {
1414
{ TYPE_DC, CH1, FLD_PDC, UNIT_W, 32, 2, 10, false,false, 2 },
1515
{ TYPE_DC, CH1, FLD_YD, UNIT_WH, 34, 4, 1, false,false, 0 },
1616
{ TYPE_DC, CH1, FLD_YT, UNIT_KWH, 38, 4, 1000, false,false, 3 },
17-
{ TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH0, CMD_CALC, false,false, 3 },
17+
{ TYPE_DC, CH1, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH1, CMD_CALC, false,false, 3 },
1818

1919
{ TYPE_DC, CH2, FLD_UDC, UNIT_V, 44, 2, 10, false,false, 1 },
2020
{ TYPE_DC, CH2, FLD_IDC, UNIT_A, 42, 2, 100, false,false, 2 },
2121
{ TYPE_DC, CH2, FLD_PDC, UNIT_W, 46, 2, 10, false,false, 2 },
2222
{ TYPE_DC, CH2, FLD_YD, UNIT_WH, 48, 4, 1, false,false, 0 },
2323
{ TYPE_DC, CH2, FLD_YT, UNIT_KWH, 50, 4, 1000, false,false, 3 },
24-
{ TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH0, CMD_CALC, false,false, 3 },
24+
{ TYPE_DC, CH2, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH2, CMD_CALC, false,false, 3 },
2525

2626
{ TYPE_DC, CH3, FLD_UDC, UNIT_V, 56, 2, 10, false,false, 1 },
2727
{ TYPE_DC, CH3, FLD_IDC, UNIT_A, 54, 2, 100, false,false, 2 },
2828
{ TYPE_DC, CH3, FLD_PDC, UNIT_W, 58, 2, 10, false,false, 2 },
2929
{ TYPE_DC, CH3, FLD_YD, UNIT_WH, 62, 4, 1, false,false, 0 },
3030
{ TYPE_DC, CH3, FLD_YT, UNIT_KWH, 66, 4, 1000, false,false, 3 },
31-
{ TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH0, CMD_CALC, false,false, 3 },
31+
{ TYPE_DC, CH3, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH3, CMD_CALC, false,false, 3 },
3232

3333
{ TYPE_AC, CH0, FLD_UAC, UNIT_V, 2, 2, 10, false,false, 1 },
3434
{ TYPE_AC, CH0, FLD_IAC, UNIT_A, 0, 2, 100, false,false, 2 },

lib/InverterLib/src/inverter/BaseNetworkInverter.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
template<class StatT,class DevT,class AlarmT,class PowerT>
88
class BaseNetworkInverter :public BaseInverter<StatT,DevT,AlarmT,PowerT> {
99
private:
10-
static const uint32_t TIMER_SUCCES_MAC_IP_RESOLUTION = 5 * 60 * 1000;
10+
static const uint32_t TIMER_SUCCESS_MAC_IP_RESOLUTION = 5 * 60 * 1000;
1111
static const uint32_t TIMER_FAILED_MAC_IP_RESOLUTION = 30 * 1000;
12+
static const uint32_t TIMER_NOT_FOUND_RESET_MAC_IP_RESOLUTION = 15 * 60 * 1000;
1213
TimeoutHelper _macToIpResolverTimer;
14+
TimeoutHelper _macUnknownTimer;
1315

1416
void checkIfIpOrHostnameIsMac() {
1517
const char* mac = _oringalIpOrHostname.c_str();
@@ -43,6 +45,8 @@ class BaseNetworkInverter :public BaseInverter<StatT,DevT,AlarmT,PowerT> {
4345
_resolvedIpByMacAdress(nullptr){
4446
_macToIpResolverTimer.set(TIMER_FAILED_MAC_IP_RESOLUTION);
4547
_macToIpResolverTimer.zero();
48+
_macUnknownTimer.set(TIMER_NOT_FOUND_RESET_MAC_IP_RESOLUTION);
49+
_macUnknownTimer.zero();
4650
}
4751
~BaseNetworkInverter() = default;
4852

@@ -102,10 +106,12 @@ class BaseNetworkInverter :public BaseInverter<StatT,DevT,AlarmT,PowerT> {
102106
ESP_LOGI(LogTag().c_str(),"Resolved Mac to ip: %s\n", found->second.c_str());
103107
if(_resolvedIpByMacAdress == nullptr || found->second != *_resolvedIpByMacAdress){
104108
_resolvedIpByMacAdress = std::make_unique<std::string>(found->second);
105-
_macToIpResolverTimer.set(TIMER_SUCCES_MAC_IP_RESOLUTION);
109+
_macToIpResolverTimer.set(TIMER_SUCCESS_MAC_IP_RESOLUTION);
110+
_macUnknownTimer.reset();
106111
return true;
107112
}
108113
_macToIpResolverTimer.set(TIMER_FAILED_MAC_IP_RESOLUTION);
114+
_macUnknownTimer.reset();
109115
ESP_LOGD(LogTag().c_str(),"Resolved Ip is same as before\n");
110116
return false;
111117
}
@@ -114,6 +120,10 @@ class BaseNetworkInverter :public BaseInverter<StatT,DevT,AlarmT,PowerT> {
114120
ESP_LOGD(LogTag().c_str(),"Failed on resolving Mac to Ip\n");
115121
return false;
116122
}
123+
if(_resolvedIpByMacAdress != nullptr && _macUnknownTimer.occured()){
124+
_resolvedIpByMacAdress = nullptr;
125+
ESP_LOGW(LogTag().c_str(),"Removed ip from alreadyResolved by mac address because not seen in a while (15min)\n");
126+
}
117127
}
118128
return false;
119129
}

platformio.ini

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ build_flags =
2727
-DPIOENV=\"$PIOENV\"
2828
-D_TASK_STD_FUNCTION=1
2929
-D_TASK_THREAD_SAFE=1
30-
-DHOYMILES_W
31-
-DDEYE_SUN
32-
#-DHOYMILES
30+
-DHOYMILES=0
31+
-DDEYE_SUN=1
32+
-DHOYMILES_W=1
3333
-DCONFIG_ASYNC_TCP_QUEUE_SIZE=128
3434
-DEMC_TASK_STACK_SIZE=6400
3535
; -DHOY_DEBUG_QUEUE

src/InverterHandler.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11

22
#include "InverterHandler.h"
33

4-
#ifdef HOYMILES
4+
#if HOYMILES
55
#include "Hoymiles.h"
66
#endif
77

8-
#ifdef DEYE_SUN
8+
#if DEYE_SUN
99
#include "DeyeSun.h"
1010
#endif
1111

12-
#ifdef HOYMILES_W
12+
#if HOYMILES_W
1313
#include "HoymilesW.h"
1414
#endif
1515

@@ -27,13 +27,13 @@ bool InverterHandlerClass::isAllRadioIdle() {
2727
}
2828

2929
void InverterHandlerClass::init() {
30-
#ifdef HOYMILES
30+
#if HOYMILES
3131
_handlers.push_back(reinterpret_cast<BaseInverterHandlerClass*>(&Hoymiles));
3232
#endif
33-
#ifdef DEYE_SUN
33+
#if DEYE_SUN
3434
_handlers.push_back(reinterpret_cast<BaseInverterHandlerClass*>(&DeyeSun));
3535
#endif
36-
#ifdef HOYMILES_W
36+
#if HOYMILES_W
3737
_handlers.push_back(reinterpret_cast<BaseInverterHandlerClass*>(&HoymilesW));
3838
#endif
3939
}
@@ -92,17 +92,17 @@ std::shared_ptr<BaseInverterClass> InverterHandlerClass::getInverterBySerialStri
9292
}
9393

9494
std::shared_ptr<BaseInverterClass> InverterHandlerClass::getInverterBySerial(uint64_t serial,inverter_type inverterType) {
95-
#ifdef HOYMILES
95+
#if HOYMILES
9696
if(inverterType == inverter_type::Inverter_Hoymiles){
9797
return std::reinterpret_pointer_cast<BaseInverterClass>(Hoymiles.getInverterBySerial(serial));
9898
}
9999
#endif
100-
#ifdef DEYE_SUN
100+
#if DEYE_SUN
101101
if(inverterType == inverter_type::Inverter_DeyeSun){
102102
return std::reinterpret_pointer_cast<BaseInverterClass>(DeyeSun.getInverterBySerial(serial));
103103
}
104104
#endif
105-
#ifdef HOYMILES_W
105+
#if HOYMILES_W
106106
if(inverterType == inverter_type::Inverter_HoymilesW){
107107
return std::reinterpret_pointer_cast<BaseInverterClass>(HoymilesW.getInverterBySerial(serial));
108108
}
@@ -111,17 +111,17 @@ std::shared_ptr<BaseInverterClass> InverterHandlerClass::getInverterBySerial(uin
111111
}
112112

113113
void InverterHandlerClass::removeInverterBySerial(uint64_t serial,inverter_type inverterType) {
114-
#ifdef HOYMILES
114+
#if HOYMILES
115115
if(inverterType == inverter_type::Inverter_Hoymiles){
116116
Hoymiles.removeInverterBySerial(serial);
117117
}
118118
#endif
119-
#ifdef DEYE_SUN
119+
#if DEYE_SUN
120120
if(inverterType == Inverter_DeyeSun){
121121
DeyeSun.removeInverterBySerial(serial);
122122
}
123123
#endif
124-
#ifdef HOYMILES_W
124+
#if HOYMILES_W
125125
if(inverterType == Inverter_HoymilesW){
126126
HoymilesW.removeInverterBySerial(serial);
127127
}

0 commit comments

Comments
 (0)