mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 16:29:51 +03:00
added Buderus Logano, BC40, SM50
This commit is contained in:
46
src/ems.cpp
46
src/ems.cpp
@@ -190,12 +190,12 @@ const _EMS_Type EMS_Types[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// calculate sizes of arrays at compile
|
// calculate sizes of arrays at compile
|
||||||
uint8_t _EMS_Types_max = ArraySize(EMS_Types); // number of defined types
|
uint8_t _EMS_Types_max = ArraySize(EMS_Types); // number of defined types
|
||||||
uint8_t _Boiler_Devices_max = ArraySize(Boiler_Devices); // number of boiler models
|
uint8_t _Boiler_Devices_max = ArraySize(Boiler_Devices); // number of boiler models
|
||||||
uint8_t _SolarModule_Types_max = ArraySize(SolarModule_Devices); // number of solar module types
|
uint8_t _SolarModule_Devices_max = ArraySize(SolarModule_Devices); // number of solar module types
|
||||||
uint8_t _Other_Devices_max = ArraySize(Other_Devices); // number of other ems devices
|
uint8_t _Other_Devices_max = ArraySize(Other_Devices); // number of other ems devices
|
||||||
uint8_t _Thermostat_Devices_max = ArraySize(Thermostat_Devices); // number of defined thermostat types
|
uint8_t _Thermostat_Devices_max = ArraySize(Thermostat_Devices); // number of defined thermostat types
|
||||||
uint8_t _HeatPump_Devices_max = ArraySize(HeatPump_Devices); // number of defined heatpuimp types
|
uint8_t _HeatPump_Devices_max = ArraySize(HeatPump_Devices); // number of defined heatpump types
|
||||||
|
|
||||||
// these structs contain the data we store from the specific EMS devices
|
// these structs contain the data we store from the specific EMS devices
|
||||||
_EMS_Boiler EMS_Boiler; // for boiler
|
_EMS_Boiler EMS_Boiler; // for boiler
|
||||||
@@ -2078,7 +2078,7 @@ void _process_Version(_EMS_RxTelegram * EMS_RxTelegram) {
|
|||||||
|
|
||||||
// look for Solar Modules
|
// look for Solar Modules
|
||||||
i = 0;
|
i = 0;
|
||||||
while (i < _SolarModule_Types_max) {
|
while (i < _SolarModule_Devices_max) {
|
||||||
if (SolarModule_Devices[i].product_id == product_id) {
|
if (SolarModule_Devices[i].product_id == product_id) {
|
||||||
typeFound = true; // we have a matching product id. i is the index.
|
typeFound = true; // we have a matching product id. i is the index.
|
||||||
break;
|
break;
|
||||||
@@ -2091,7 +2091,7 @@ void _process_Version(_EMS_RxTelegram * EMS_RxTelegram) {
|
|||||||
_addDevice(EMS_MODELTYPE_SM, EMS_RxTelegram->src, product_id, version, i);
|
_addDevice(EMS_MODELTYPE_SM, EMS_RxTelegram->src, product_id, version, i);
|
||||||
|
|
||||||
// myDebug_P(PSTR("Solar Module support enabled."));
|
// myDebug_P(PSTR("Solar Module support enabled."));
|
||||||
EMS_SolarModule.device_id = SolarModule_Devices[i].device_id;
|
EMS_SolarModule.device_id = EMS_ID_SM;
|
||||||
EMS_SolarModule.product_id = product_id;
|
EMS_SolarModule.product_id = product_id;
|
||||||
strlcpy(EMS_SolarModule.version, version, sizeof(EMS_SolarModule.version));
|
strlcpy(EMS_SolarModule.version, version, sizeof(EMS_SolarModule.version));
|
||||||
|
|
||||||
@@ -2115,7 +2115,7 @@ void _process_Version(_EMS_RxTelegram * EMS_RxTelegram) {
|
|||||||
_addDevice(EMS_MODELTYPE_HP, EMS_RxTelegram->src, product_id, version, i);
|
_addDevice(EMS_MODELTYPE_HP, EMS_RxTelegram->src, product_id, version, i);
|
||||||
|
|
||||||
// myDebug_P(PSTR("Heat Pump support enabled."));
|
// myDebug_P(PSTR("Heat Pump support enabled."));
|
||||||
EMS_HeatPump.device_id = SolarModule_Devices[i].device_id;
|
EMS_HeatPump.device_id = EMS_ID_HP;
|
||||||
EMS_HeatPump.product_id = product_id;
|
EMS_HeatPump.product_id = product_id;
|
||||||
strlcpy(EMS_HeatPump.version, version, sizeof(EMS_HeatPump.version));
|
strlcpy(EMS_HeatPump.version, version, sizeof(EMS_HeatPump.version));
|
||||||
return;
|
return;
|
||||||
@@ -2312,7 +2312,7 @@ void ems_getSolarModuleValues() {
|
|||||||
if (ems_getSolarModuleEnabled()) {
|
if (ems_getSolarModuleEnabled()) {
|
||||||
if (EMS_SolarModule.product_id == EMS_PRODUCTID_SM10) {
|
if (EMS_SolarModule.product_id == EMS_PRODUCTID_SM10) {
|
||||||
ems_doReadCommand(EMS_TYPE_SM10Monitor, EMS_ID_SM); // fetch all from SM10Monitor
|
ems_doReadCommand(EMS_TYPE_SM10Monitor, EMS_ID_SM); // fetch all from SM10Monitor
|
||||||
} else if (EMS_SolarModule.product_id == EMS_PRODUCTID_SM100) {
|
} else if ((EMS_SolarModule.product_id == EMS_PRODUCTID_SM100) || (EMS_SolarModule.product_id == EMS_PRODUCTID_SM50)) {
|
||||||
ems_doReadCommand(EMS_TYPE_SM100Monitor, EMS_ID_SM); // fetch all from SM100Monitor
|
ems_doReadCommand(EMS_TYPE_SM100Monitor, EMS_ID_SM); // fetch all from SM100Monitor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2421,7 +2421,7 @@ char * ems_getSolarModuleDescription(char * buffer, bool name_only) {
|
|||||||
char tmp[6] = {0};
|
char tmp[6] = {0};
|
||||||
|
|
||||||
// scan through known ID types
|
// scan through known ID types
|
||||||
while (i < _SolarModule_Types_max) {
|
while (i < _SolarModule_Devices_max) {
|
||||||
if (SolarModule_Devices[i].product_id == EMS_SolarModule.product_id) {
|
if (SolarModule_Devices[i].product_id == EMS_SolarModule.product_id) {
|
||||||
found = true; // we have a match
|
found = true; // we have a match
|
||||||
break;
|
break;
|
||||||
@@ -2512,16 +2512,14 @@ void ems_scanDevices() {
|
|||||||
Device_Ids.push_back(tt.device_id);
|
Device_Ids.push_back(tt.device_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy over solar modules
|
|
||||||
for (_SolarModule_Device sm : SolarModule_Devices) {
|
|
||||||
Device_Ids.push_back(sm.device_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy over others
|
// copy over others
|
||||||
for (_Other_Device ot : Other_Devices) {
|
for (_Other_Device ot : Other_Devices) {
|
||||||
Device_Ids.push_back(ot.device_id);
|
Device_Ids.push_back(ot.device_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Device_Ids.push_back(EMS_ID_HP); // add heat pump
|
||||||
|
Device_Ids.push_back(EMS_ID_SM); // add solar module
|
||||||
|
|
||||||
// remove duplicates and reserved IDs (like our own device)
|
// remove duplicates and reserved IDs (like our own device)
|
||||||
Device_Ids.sort();
|
Device_Ids.sort();
|
||||||
Device_Ids.unique();
|
Device_Ids.unique();
|
||||||
@@ -2552,16 +2550,26 @@ void ems_printAllDevices() {
|
|||||||
Boiler_Devices[i].product_id);
|
Boiler_Devices[i].product_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
myDebug_P(PSTR("\nThese %d devices are supported under solar module devices:"), _SolarModule_Types_max);
|
myDebug_P(PSTR("\nThese %d devices are supported under solar module devices:"), _SolarModule_Devices_max);
|
||||||
for (i = 0; i < _SolarModule_Types_max; i++) {
|
for (i = 0; i < _SolarModule_Devices_max; i++) {
|
||||||
myDebug_P(PSTR(" %s%s%s (DeviceID:0x%02X ProductID:%d)"),
|
myDebug_P(PSTR(" %s%s%s (DeviceID:0x%02X ProductID:%d)"),
|
||||||
COLOR_BOLD_ON,
|
COLOR_BOLD_ON,
|
||||||
SolarModule_Devices[i].model_string,
|
SolarModule_Devices[i].model_string,
|
||||||
COLOR_BOLD_OFF,
|
COLOR_BOLD_OFF,
|
||||||
SolarModule_Devices[i].device_id,
|
EMS_ID_SM,
|
||||||
SolarModule_Devices[i].product_id);
|
SolarModule_Devices[i].product_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
myDebug_P(PSTR("\nThese %d devices are supported under heat pump devices:"), _HeatPump_Devices_max);
|
||||||
|
for (i = 0; i < _HeatPump_Devices_max; i++) {
|
||||||
|
myDebug_P(PSTR(" %s%s%s (DeviceID:0x%02X ProductID:%d)"),
|
||||||
|
COLOR_BOLD_ON,
|
||||||
|
HeatPump_Devices[i].model_string,
|
||||||
|
COLOR_BOLD_OFF,
|
||||||
|
EMS_ID_HP,
|
||||||
|
HeatPump_Devices[i].product_id);
|
||||||
|
}
|
||||||
|
|
||||||
myDebug_P(PSTR("\nThese %d devices are supported as other EMS devices:"), _Other_Devices_max);
|
myDebug_P(PSTR("\nThese %d devices are supported as other EMS devices:"), _Other_Devices_max);
|
||||||
for (i = 0; i < _Other_Devices_max; i++) {
|
for (i = 0; i < _Other_Devices_max; i++) {
|
||||||
myDebug_P(PSTR(" %s%s%s (DeviceID:0x%02X ProductID:%d)"),
|
myDebug_P(PSTR(" %s%s%s (DeviceID:0x%02X ProductID:%d)"),
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
// Product IDs
|
// Product IDs
|
||||||
#define EMS_PRODUCTID_HEATRONIC 95 // Junkers Heatronic 3 device
|
#define EMS_PRODUCTID_HEATRONIC 95 // Junkers Heatronic 3 device
|
||||||
#define EMS_PRODUCTID_SM10 73 // SM10 solar module
|
#define EMS_PRODUCTID_SM10 73 // SM10 solar module
|
||||||
|
#define EMS_PRODUCTID_SM50 162 // SM50 solar module
|
||||||
#define EMS_PRODUCTID_SM100 163 // SM100 solar module
|
#define EMS_PRODUCTID_SM100 163 // SM100 solar module
|
||||||
#define EMS_PRODUCTID_ISM1 101 // Junkers ISM1 solar module
|
#define EMS_PRODUCTID_ISM1 101 // Junkers ISM1 solar module
|
||||||
|
|
||||||
@@ -248,7 +249,6 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t product_id;
|
uint8_t product_id;
|
||||||
uint8_t device_id;
|
|
||||||
char model_string[50];
|
char model_string[50];
|
||||||
} _SolarModule_Device;
|
} _SolarModule_Device;
|
||||||
|
|
||||||
@@ -260,7 +260,6 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t product_id;
|
uint8_t product_id;
|
||||||
uint8_t device_id;
|
|
||||||
char model_string[50];
|
char model_string[50];
|
||||||
} _HeatPump_Device;
|
} _HeatPump_Device;
|
||||||
|
|
||||||
|
|||||||
@@ -191,19 +191,21 @@ const _Boiler_Device Boiler_Devices[] = {
|
|||||||
{64, "Sieger BK15/Nefit Smartline/Buderus GB152"},
|
{64, "Sieger BK15/Nefit Smartline/Buderus GB152"},
|
||||||
{EMS_PRODUCTID_HEATRONIC, "Bosch Condens 2500/Junkers Heatronic 3"},
|
{EMS_PRODUCTID_HEATRONIC, "Bosch Condens 2500/Junkers Heatronic 3"},
|
||||||
{122, "Nefit Proline"},
|
{122, "Nefit Proline"},
|
||||||
|
{170, "Buderus Logano GB212"},
|
||||||
{172, "Nefit Enviline"}
|
{172, "Nefit Enviline"}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Known Solar Module types
|
* Known Solar Module types, device type 0x30
|
||||||
* format is PRODUCT ID, DEVICE ID, DESCRIPTION
|
* format is PRODUCT ID, DESCRIPTION
|
||||||
*/
|
*/
|
||||||
const _SolarModule_Device SolarModule_Devices[] = {
|
const _SolarModule_Device SolarModule_Devices[] = {
|
||||||
|
|
||||||
{EMS_PRODUCTID_SM10, EMS_ID_SM, "SM10 Solar Module"},
|
{EMS_PRODUCTID_SM10, "SM10 Solar Module"},
|
||||||
{EMS_PRODUCTID_SM100, EMS_ID_SM, "SM100 Solar Module"},
|
{EMS_PRODUCTID_SM100, "SM100 Solar Module"},
|
||||||
{EMS_PRODUCTID_ISM1, EMS_ID_SM, "Junkers ISM1 Solar Module"}
|
{EMS_PRODUCTID_ISM1, "Junkers ISM1 Solar Module"},
|
||||||
|
{EMS_PRODUCTID_SM50, "SM50 Solar Module"}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -211,27 +213,31 @@ const _SolarModule_Device SolarModule_Devices[] = {
|
|||||||
// format is PRODUCT ID, DEVICE ID, DESCRIPTION
|
// format is PRODUCT ID, DEVICE ID, DESCRIPTION
|
||||||
const _Other_Device Other_Devices[] = {
|
const _Other_Device Other_Devices[] = {
|
||||||
|
|
||||||
{69, 0x21, "MM10 Mixer Module"},
|
|
||||||
{71, 0x11, "WM10 Switch Module"},
|
{71, 0x11, "WM10 Switch Module"},
|
||||||
|
|
||||||
|
{69, 0x21, "MM10 Mixer Module"},
|
||||||
{160, 0x20, "MM100 Mixing Module"},
|
{160, 0x20, "MM100 Mixing Module"},
|
||||||
{160, 0x21, "MM100 Mixing Module"},
|
{160, 0x21, "MM100 Mixing Module"},
|
||||||
{159, 0x21, "MM50 Mixing Module"},
|
{159, 0x21, "MM50 Mixing Module"},
|
||||||
|
|
||||||
{68, 0x09, "BC10/RFM20 Receiver"},
|
{68, 0x09, "BC10/RFM20 Receiver"},
|
||||||
{190, 0x09, "BC10 Base Controller"},
|
{190, 0x09, "BC10 Base Controller"},
|
||||||
{114, 0x09, "BC10 Base Controller"},
|
{114, 0x09, "BC10 Base Controller"},
|
||||||
{125, 0x09, "BC25 Base Controller"},
|
{125, 0x09, "BC25 Base Controller"},
|
||||||
|
{169, 0x09, "BC40 Base Controller"},
|
||||||
{152, 0x09, "Junkers Controller"},
|
{152, 0x09, "Junkers Controller"},
|
||||||
|
|
||||||
{205, 0x02, "Nefit Moduline Easy Connect"},
|
{205, 0x02, "Nefit Moduline Easy Connect"},
|
||||||
{206, 0x02, "Bosch Easy Connect"},
|
{206, 0x02, "Bosch Easy Connect"},
|
||||||
{171, 0x02, "EMS-OT OpenTherm converter"},
|
{171, 0x02, "EMS-OT OpenTherm converter"},
|
||||||
{252, EMS_ID_HP, "HeatPump Module"},
|
|
||||||
{189, EMS_ID_GATEWAY, "Web Gateway KM200"}
|
{189, EMS_ID_GATEWAY, "Web Gateway KM200"}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// heatpump
|
// heatpump, device ID 0x38
|
||||||
// format is PRODUCT ID, DEVICE ID, DESCRIPTION
|
// format is PRODUCT ID, DEVICE ID, DESCRIPTION
|
||||||
const _HeatPump_Device HeatPump_Devices[] = {{252, EMS_ID_HP, "HeatPump Module"}};
|
const _HeatPump_Device HeatPump_Devices[] = {{252, "HeatPump Module"}};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Known thermostat types and their capabilities
|
* Known thermostat types and their capabilities
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
#define APP_VERSION "1.9.1b10"
|
#define APP_VERSION "1.9.1b11"
|
||||||
|
|||||||
Reference in New Issue
Block a user