EgoSmartHeaterRS485 1.0.0
Library for controlling E.G.O. RS485 Smart Heaters.
Loading...
Searching...
No Matches
EgoSmartHeaterRS485.h
Go to the documentation of this file.
1
18//------------------------------------------------------------------------------
19#ifndef EGO_SH_RS485_h
20#define EGO_SH_RS485_h
21//------------------------------------------------------------------------------
22#include <Arduino.h>
23#include <ModbusMaster.h>
24//------------------------------------------------------------------------------
25#define EGO_SH_RS485_SERIAL_BAUD 19200
26#define EGO_SH_RS485_MODBUS_ADR 247 // Modbus address of EGO Smart Heaters
27
28//------------------------------------------------------------------------------
29
33{
34 uint16_t ActualPower;
35 uint32_t OperatingSeconds;
36 uint32_t SwitchingCycles;
37 uint16_t MinOnTime;
38 uint16_t MinOffTime;
39};
40
44{
45 uint32_t OperatingHour;
46 uint16_t OperatingSecond;
47 uint16_t ErrorCode;
48};
49
53{
54 uint32_t OperatingSeconds1;
55 uint32_t OperatingSeconds2;
56 uint32_t OperatingSeconds3;
57};
58
59//------------------------------------------------------------------------------
64{
65public:
68 EgoSmartHeaterRS485(boolean manualDere = false);
71 EgoSmartHeaterRS485(int dere_pin);
72
75 void begin(Stream &serial);
79 void begin(Stream &serial, uint8_t slave);
80
83 uint8_t getErrCode(bool _clear = false);
85 void clearErrCode();
86 boolean manualDere;
87
88 //Basic Device Information
91 uint16_t getManufacturerId();
94 uint16_t getProductId();
97 uint16_t getProductVersion();
100 uint16_t getFirmwareVersion();
103 String getVendorName();
106 String getProductName();
109 String getSerialNumber();
112 uint32_t getProductionDate();
119 uint16_t getRelaisCount();
120
121 // Configuration Information
125 uint16_t getTemperatureMinValue();
130 uint8_t setTemperatureMinValue(uint16_t value);
133 uint16_t getTemperatureMaxValue();
138 uint8_t setTemperatureMaxValue(uint16_t value);
147 uint8_t setTemperatureNominalValue(uint16_t value);
151 int16_t getPowerNominalValue();
156 uint8_t setPowerNominalValue(int16_t value);
159 int32_t getHomeTotalPower();
164 uint8_t setHomeTotalPower(int32_t value);
170 uint8_t setRelaisMinOnTime(int r, uint16_t value);
176 uint8_t setRelaisMinOffTime(int r, uint16_t value);
177
178 // Operating Information
182 uint32_t getRestartCounter();
186 int16_t getActualTemperaturePCB();
189 uint32_t getTotalOperatingSeconds();
192 uint32_t getErrorCounter();
222 uint16_t getRelaisStatus();
229 ErrorData_t getError(int i);
230
231protected:
232 // instantiate ModbusMaster object
233 ModbusMaster _node;
234 uint8_t _result = _node.ku8MBSuccess; // Value: 0=Success, 2=Illegal Address, 3=Illegal Value
235
236 float getModbusFloat(uint16_t data[2]);
237 uint32_t getModbusUint32(uint16_t data[2]);
238 int32_t getModbusInt32(uint16_t data[2]);
239 String getModbusString32(uint16_t data[16]);
240
241 //Basic Device Information
242 static const uint16_t RegisterManufacturerId = 0x2000;
243 static const uint16_t RegisterProductId = 0x2001;
244 static const uint16_t RegisterProductVersion = 0x2002;
245 static const uint16_t RegisterFirmwareVersion = 0x2003;
246 static const uint16_t RegisterVendorName = 0x2004;
247 static const uint16_t RegisterProductName = 0x2014;
248 static const uint16_t RegisterSerialNumber = 0x2024;
249 static const uint16_t RegisterProductionDate = 0x2034;
250 static constexpr uint16_t RegisterRelaisConfiguration[3] = {0x1000,0x1020,0x1040};
251 static const uint16_t RegisterRelaisCount = 0x1204;
252
253 // Configuration Information
254 static const uint16_t RegisterTemperatureMinValue = 0x1209;
255 static const uint16_t RegisterTemperatureMaxValue = 0x120A;
256 static const uint16_t RegisterTemperatureNominalValue = 0x120B;
257 static const uint16_t RegisterPowerNominalValue = 0x1300;
258 static const uint16_t RegisterHomeTotalPower = 0x1301;
259 static const uint16_t RegisterUserTemperatureNominal = 0x1407;
260
261 //Operating Information
262 static const uint16_t RegisterRestartCounter = 0x1202;
263 static const uint16_t RegisterActualTemperaturePCB = 0x1205;
264 static const uint16_t RegisterTotalOperatingSeconds = 0x1400;
265 static const uint16_t RegisterErrorCounter = 0x1402;
266 static const uint16_t RegisterActualTemperatureBoiler = 0x1404;
267 static const uint16_t RegisterActualTemperaturExternalSensor1 = 0x1405;
268 static const uint16_t RegisterActualTemperaturExternalSensor2 = 0x1406;
269 static const uint16_t RegisterRelaisStatus = 0x1408;
270 static constexpr uint16_t RegisterRelaisOperatingTime[3] = {0x1409,0x140B,0x140D};
271 static constexpr uint16_t RegisterErrorData[10] = {0x1500,0x1504,0x1508,0x150C,0x1510,0x1514,0x1518,0x151C,0x1520,0x1524};
272};
273
274#endif //EGO_SH_RS485_h
Definition: EgoSmartHeaterRS485.h:64
uint8_t setTemperatureNominalValue(uint16_t value)
Configure TemperatureNominalValue (0x120B). This is the desired water temperature of the consumer....
Definition: EgoSmartHeaterRS485.cpp:438
String getSerialNumber()
Retrieve SerialNumber (0x2033)
Definition: EgoSmartHeaterRS485.cpp:299
uint16_t getProductVersion()
Retrieve ProductVersion (0x2002)
Definition: EgoSmartHeaterRS485.cpp:231
uint32_t getErrorCounter()
Retrieve ErrorCounter (0x1402)
Definition: EgoSmartHeaterRS485.cpp:569
int16_t getActualTemperatureExternalSensor2()
Retrieve ActualTemperaturExternalSensor2 (0x1406) This is the actual temperature of an (optional) sec...
Definition: EgoSmartHeaterRS485.cpp:617
RelaisConfigurationData_t getRelaisConfiguration(int r)
Retrieve details for a particular relais (0x1000, 0x1020, 0x1040)
Definition: EgoSmartHeaterRS485.cpp:340
uint16_t getTemperatureMinValue()
Retrieve TemperatureMinValue (0x1209). Below this temperature the heater will warm the boiler even if...
Definition: EgoSmartHeaterRS485.cpp:380
int16_t getActualTemperaturePCB()
Retrieve ActualTemperaturPCB (0x1205) This is the actual temperature of the heater’s control PCB....
Definition: EgoSmartHeaterRS485.cpp:536
uint8_t setTemperatureMinValue(uint16_t value)
Configure TemperatureMinValue (0x1209). Below this temperature the heater will warm the boiler even i...
Definition: EgoSmartHeaterRS485.cpp:394
uint32_t getTotalOperatingSeconds()
Retrieve TotalOperatingSeconds (0x1400).
Definition: EgoSmartHeaterRS485.cpp:549
int16_t getPowerNominalValue()
Retrieve PowerNominalValue (0x1300). This is the desired power value which the heater should use to h...
Definition: EgoSmartHeaterRS485.cpp:446
uint8_t setRelaisMinOnTime(int r, uint16_t value)
Configure relais MinOnTime for a specific relais (0x1005, 0x1025, 0x1045). This field defines the min...
Definition: EgoSmartHeaterRS485.cpp:497
uint32_t getRestartCounter()
Retrieve RestartCounter (0x1202) This is mainly used during development.
Definition: EgoSmartHeaterRS485.cpp:516
int16_t getActualTemperatureExternalSensor1()
Retrieve ActualTemperaturExternalSensor1 (0x1405) This is the actual temperature of an (optional) fir...
Definition: EgoSmartHeaterRS485.cpp:603
uint16_t getRelaisCount()
Retrieve RelaisCount (0x1204)
Definition: EgoSmartHeaterRS485.cpp:363
uint32_t getProductionDate()
Retrieve ProductionDate (0x2035)
Definition: EgoSmartHeaterRS485.cpp:320
uint16_t getRelaisStatus()
Retrieve RelaisStatus (0x1408) This bitfield reflects the switching state of the heater’s internal re...
Definition: EgoSmartHeaterRS485.cpp:644
RelaisOperatingTime_t getRelaisOperatingTime()
Retrieve the operating times of all relais (0x1409, 0x140B, 0x140D)
Definition: EgoSmartHeaterRS485.cpp:658
int32_t getHomeTotalPower()
Retrieve HomeTotalPower (0x1301). This register is written by the smart meter and contains the total ...
Definition: EgoSmartHeaterRS485.cpp:468
String getProductName()
Retrieve ProductName (0x2023)
Definition: EgoSmartHeaterRS485.cpp:279
void clearErrCode()
Function to clear the error code store.
Definition: EgoSmartHeaterRS485.cpp:96
void begin(Stream &serial)
Function to launch the SmartHeater communication using the default modbus ID.
Definition: EgoSmartHeaterRS485.cpp:66
String getVendorName()
Retrieve VendorName (0x2013)
Definition: EgoSmartHeaterRS485.cpp:259
uint8_t getErrCode(bool _clear=false)
Function to retreive the latest error code, which occured during the device communication.
Definition: EgoSmartHeaterRS485.cpp:88
uint8_t setHomeTotalPower(int32_t value)
Retrieve HomeTotalPower (0x1301). This register is written by the smart meter and contains the total ...
Definition: EgoSmartHeaterRS485.cpp:488
uint16_t getFirmwareVersion()
Retrieve FirmwareVersion (0x2003)
Definition: EgoSmartHeaterRS485.cpp:245
uint8_t setTemperatureMaxValue(uint16_t value)
Configure TemperatureMaxValue (0x120A). The maximum specified allowed water temperature which will no...
Definition: EgoSmartHeaterRS485.cpp:416
ErrorData_t getError(int i)
Retrieve error struct (0x1500 - 0x1526)
Definition: EgoSmartHeaterRS485.cpp:691
uint8_t setPowerNominalValue(int16_t value)
Configure PowerNominalValue (0x1300). This is the desired power value which the heater should use to ...
Definition: EgoSmartHeaterRS485.cpp:460
uint16_t getManufacturerId()
Retrieve ManufacturerID (0x2000)
Definition: EgoSmartHeaterRS485.cpp:203
uint8_t setRelaisMinOffTime(int r, uint16_t value)
Configure relais MinOffTime for a specific relais (0x1006, 0x1026, 0x1046). This field defines the mi...
Definition: EgoSmartHeaterRS485.cpp:505
int16_t getActualTemperatureBoiler()
Retrieve ActualTemperaturBoiler (0x1404)
Definition: EgoSmartHeaterRS485.cpp:589
uint16_t getProductId()
Retrieve ProductID (0x2001)
Definition: EgoSmartHeaterRS485.cpp:217
uint16_t getTemperatureMaxValue()
Retrieve TemperatureMaxValue (0x120A). The maximum specified allowed water temperature which will not...
Definition: EgoSmartHeaterRS485.cpp:402
int16_t getUserTemperatureNominal()
Retrieve UserTemperaturNominalValue (0x1407) This value corresponds to the position of an (optional) ...
Definition: EgoSmartHeaterRS485.cpp:631
uint16_t getTemperatureNominalValue()
Retrieve TemperatureNominalValue (0x120B). This is the desired water temperature of the consumer....
Definition: EgoSmartHeaterRS485.cpp:424
Definition: EgoSmartHeaterRS485.h:44
Definition: EgoSmartHeaterRS485.h:33
Definition: EgoSmartHeaterRS485.h:53