-
-
Notifications
You must be signed in to change notification settings - Fork 508
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for HERF-300 inverter #2236
Comments
Are you able to compile the firmware by yourself? Otherwise I will provide you a binary which includes a first detection. The interpretation of the data will still be wrong as I need the console output from your side if it's able to send and receive data. |
@tbnobody yep I can compile the source code (VSCode on MacOS). Do I need to change something in the code? Log:
|
Yes. Please add at this line: the following: uint16_t preSerial = (serial >> 32) & 0xffff;
if (preSerial == 0x2841) {
return true;
} After this the inverter should be recognized as Also the inverter should be visible at the Live View.
|
Ok, I added the code and now it is recognised but it is not connecting :( The inverter is connected to its DCU should I turn off the HERF DCU?
|
What is the original serial number of the inverter before any conversion? (So whats shown on the label on the inverter?) I assume the 2841xxxxxx was generated by the WebGUI. Maybe there is another logic how the serial number is created for this kind of model. |
Here it is... SN: A21001JXX-XXX |
@tbnobody I got some data from the inverter, for a couples of seconds datas was available in the live view but after that now it is in "nothing received", "all missing", "last missing", "middle missing" Maybe it is related to #2137 ? I have two chinese NRF24L01+ with antenna, I am trying with capacitor / cables etc with no luck. |
Nope. NRF24 and CMT module uses completely different frequency handling. But if you receive anything (and if its only for a short period of time) the serial number is formatted correctly. Can now be anything. From the power supply, RF module, wiring, antenna etc. |
It is almost working now... with transmitting power to maximum 0dbm, but the data received does not match the dashboard information :( Maybe it is necessary to adapt the Herf-800 datas to the Herf-300 1ch.
|
Yes, I will to that using the information you provided. A new inverter class for the HERF-300 is required (like for the other HERF types) and the byte assignment has to be adjusted. Will provide you a new patch soon. Does the event log show correct values? I see it shows 15 events in your screenshot |
I only took a part of the log where I saw a couple of ‘successes’, the log continues sending more or less always that kind of data. Do you need a longer log? |
No, thats great |
I guess you did turn off the HERF DCU already, as this would most likely interfere with OpenDTU connecting to the HERF-300 inverter. |
Yes I turned it off, with the HERF DCU on I never got any data from the NRF24L01+ |
I analyzed the following snippet
How realistic are the following values (based on the dump you pasted above) (I dont know how long you are already operating the inverter) DC-Input Voltage: 29,7V Yield Daily: 369Wh AC Voltage: 233,4V Temperature: ???? °C The temperature was either 38,4°C or 42,4°C. Reactive Power also either 38,4var or 42,4var. Therefor a additional data snippet e.g. at the morning when it's a little bit colder or at afternoon when it's really hot would be helpfull to distinct between the two values |
ah ok. but based on this screenshot my guess for yield total and yield daily is correct. the other values also make sense as e.g. Power = Voltage * Current. Looking forward to see whether other values match up |
I've got the data from the HERF DCU and from OpenDTU to compare. I can't find any information about Power DC/temperature/current/frequency/hz from the platform Estar Energy :( Response from api:
OpenDTU LOG: GRID PROFILE |
unfortunatly the cloud does not show values like e.g. temperature. did you use the |
I just installed the defaults from PlatformIO with vscode. |
I can't see the inverter now, before flashing I had the lines added to fake the HERF 300 as HM 300
|
Yeah... just found the issue.... give me 3minutes.. |
Should work better now :) Just figured out, that the name is still wrong (it shows |
looks good for the moment. but as expected the reactive power is wrong and I don't know how realistic the temperature is. |
I'll try to monitor the temperature, it is cloudy now. |
Yes. The source will be available in the next release. Thats what I did: diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp
index 1416a73a..0e60301e 100644
--- a/lib/Hoymiles/src/Hoymiles.cpp
+++ b/lib/Hoymiles/src/Hoymiles.cpp
@@ -4,6 +4,7 @@
*/
#include "Hoymiles.h"
#include "Utils.h"
+#include "inverters/HERF_1CH.h"
#include "inverters/HERF_2CH.h"
#include "inverters/HERF_4CH.h"
#include "inverters/HMS_1CH.h"
@@ -173,6 +174,8 @@ std::shared_ptr<InverterAbstract> HoymilesClass::addInverter(const char* name, c
i = std::make_shared<HM_2CH>(_radioNrf.get(), serial);
} else if (HM_1CH::isValidSerial(serial)) {
i = std::make_shared<HM_1CH>(_radioNrf.get(), serial);
+ } else if (HERF_1CH::isValidSerial(serial)) {
+ i = std::make_shared<HERF_1CH>(_radioNrf.get(), serial);
} else if (HERF_2CH::isValidSerial(serial)) {
i = std::make_shared<HERF_2CH>(_radioNrf.get(), serial);
} else if (HERF_4CH::isValidSerial(serial)) {
diff --git a/lib/Hoymiles/src/inverters/HERF_1CH.cpp b/lib/Hoymiles/src/inverters/HERF_1CH.cpp
new file mode 100644
index 00000000..f137a67f
--- /dev/null
+++ b/lib/Hoymiles/src/inverters/HERF_1CH.cpp
@@ -0,0 +1,55 @@
+
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2022-2024 Thomas Basler and others
+ */
+#include "HERF_1CH.h"
+
+static const byteAssign_t byteAssignment[] = {
+ { TYPE_DC, CH0, FLD_UDC, UNIT_V, 2, 2, 10, false, 1 },
+ { TYPE_DC, CH0, FLD_IDC, UNIT_A, 6, 2, 100, false, 2 },
+ { TYPE_DC, CH0, FLD_PDC, UNIT_W, 10, 2, 10, false, 1 },
+ { TYPE_DC, CH0, FLD_YD, UNIT_WH, 22, 2, 1, false, 0 },
+ { TYPE_DC, CH0, FLD_YT, UNIT_KWH, 14, 4, 1000, false, 3 },
+ { TYPE_DC, CH0, FLD_IRR, UNIT_PCT, CALC_CH_IRR, CH0, CMD_CALC, false, 3 },
+
+ { TYPE_AC, CH0, FLD_UAC, UNIT_V, 26, 2, 10, false, 1 },
+ { TYPE_AC, CH0, FLD_IAC, UNIT_A, 34, 2, 100, false, 2 },
+ { TYPE_AC, CH0, FLD_PAC, UNIT_W, 30, 2, 10, false, 1 },
+ { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 32, 2, 10, false, 1 }, //TODO
+ { TYPE_AC, CH0, FLD_F, UNIT_HZ, 28, 2, 100, false, 2 },
+ { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 36, 2, 1000, false, 3 },
+
+ { TYPE_INV, CH0, FLD_T, UNIT_C, 38, 2, 10, true, 1 }, //TODO
+ { TYPE_INV, CH0, FLD_EVT_LOG, UNIT_NONE, 40, 2, 1, false, 0 }, //TODO
+
+ { TYPE_INV, CH0, FLD_YD, UNIT_WH, CALC_TOTAL_YD, 0, CMD_CALC, false, 0 },
+ { TYPE_INV, CH0, FLD_YT, UNIT_KWH, CALC_TOTAL_YT, 0, CMD_CALC, false, 3 },
+ { TYPE_INV, CH0, FLD_PDC, UNIT_W, CALC_TOTAL_PDC, 0, CMD_CALC, false, 1 },
+ { TYPE_INV, CH0, FLD_EFF, UNIT_PCT, CALC_TOTAL_EFF, 0, CMD_CALC, false, 3 }
+};
+
+HERF_1CH::HERF_1CH(HoymilesRadio* radio, const uint64_t serial)
+ : HM_Abstract(radio, serial) {};
+
+bool HERF_1CH::isValidSerial(const uint64_t serial)
+{
+ // serial >= 0x284100000000 && serial <= 0x2841ffffffff
+ uint16_t preSerial = (serial >> 32) & 0xffff;
+ return preSerial == 0x2841;
+}
+
+String HERF_1CH::typeName() const
+{
+ return "HERF-300-1T";
+}
+
+const byteAssign_t* HERF_1CH::getByteAssignment() const
+{
+ return byteAssignment;
+}
+
+uint8_t HERF_1CH::getByteAssignmentSize() const
+{
+ return sizeof(byteAssignment) / sizeof(byteAssignment[0]);
+}
diff --git a/lib/Hoymiles/src/inverters/HERF_1CH.h b/lib/Hoymiles/src/inverters/HERF_1CH.h
new file mode 100644
index 00000000..8220272e
--- /dev/null
+++ b/lib/Hoymiles/src/inverters/HERF_1CH.h
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+
+#include "HM_Abstract.h"
+
+class HERF_1CH : public HM_Abstract {
+public:
+ explicit HERF_1CH(HoymilesRadio* radio, const uint64_t serial);
+ static bool isValidSerial(const uint64_t serial);
+ String typeName() const;
+ const byteAssign_t* getByteAssignment() const;
+ uint8_t getByteAssignmentSize() const;
+}; |
Love it. Thanks! |
I've just updated the bit for PowerFactor to show my other guess... so either the shown temperature or power factor should be the right temperature :) |
Implemented in a949776 |
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new discussion or issue for related concerns. |
Is your feature request related to a problem? Please describe.
I just received a micro invert from ESTAR ENERGY, it is a HERF-300.
I added the serial and the form accepted and converted it, but I get UNKNOWN TYPE.
Is it possible to add support for this model?
Thanks.
Describe the solution you'd like
I don't have a solution :(
Describe alternatives you've considered
No response
Additional context
The HERF-300 micro inverter it is working with HERF-DCU but I'll love to get off their cloud, and there is no integration with Home Assistant or MQTT.
The text was updated successfully, but these errors were encountered: