Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/dev' into idf4
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelDvP committed May 20, 2022
2 parents 4023d78 + 6c68f29 commit 9a3668c
Show file tree
Hide file tree
Showing 15 changed files with 162 additions and 70 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Expand Up @@ -29,7 +29,7 @@ assignees: ''
*If applicable, add screenshots to help explain your problem.*

**Device information**
*Copy-paste here the information as it is outputted by the device. You can get this information by from http://ems-esp.local/api?device=system&cmd=info*
*Copy-paste here the information as it is outputted by the device. You can get this information by from http://ems-esp.local/api/system*

**Additional context**
*Add any other context about the problem here.*
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/questions---troubleshooting.md
Expand Up @@ -23,7 +23,7 @@ assignees: ''
*If applicable, add screenshots to help explain your problem.*

**Device information**
*Copy-paste here the information as it is outputted by the device. You can get this information from http://ems-esp.local/api?device=system&cmd=info*
*Copy-paste here the information as it is outputted by the device. You can get this information from http://ems-esp.local/api/system*

**Additional context**
*Add any other context about the problem here.*
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -39,7 +39,7 @@ Note, EMS-ESP requires a small hardware circuit that can convert the EMS bus dat
- Native support for Home Assistant and Domoticz via [MQTT Discovery](https://www.home-assistant.io/docs/mqtt/discovery/)
- Can run standalone as an independent WiFi Access Point or join an existing WiFi network
- Easy first-time configuration via a web Captive Portal
- Support for more than [80 EMS devices](https://emsesp.github.io/docs/#/Supported-EMS-Devices) (boilers, thermostats, solar modules, mixer modules, heat pumps, gateways)
- Support for more than [100 EMS devices](https://emsesp.github.io/docs/#/Supported-EMS-Devices) (boilers, thermostats, solar modules, mixer modules, heat pumps, gateways)

## **Demo**

Expand Down
14 changes: 7 additions & 7 deletions interface/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion interface/package.json
Expand Up @@ -11,7 +11,7 @@
"@mui/material": "^5.8.0",
"@table-library/react-table-library": "^3.1.2",
"@types/lodash": "^4.14.182",
"@types/node": "^17.0.34",
"@types/node": "^17.0.35",
"@types/react": "^17.0.43",
"@types/react-dom": "^17.0.14",
"@types/react-router-dom": "^5.3.3",
Expand Down
48 changes: 26 additions & 22 deletions interface/src/project/SettingsCustomization.tsx
Expand Up @@ -376,22 +376,22 @@ const SettingsCustomization: FC = () => {
}}
>
<ToggleButton value="8">
<Tooltip arrow placement="top" title="mark it as favorite to be listed at the top of the Dashboard">
<Tooltip arrow placement="top" title="filter favorites">
<StarIcon sx={{ fontSize: 14 }} />
</Tooltip>
</ToggleButton>
<ToggleButton value="4">
<Tooltip arrow placement="top" title="make it read-only, only if it has write operation available">
<Tooltip arrow placement="top" title="filter entities with write action disabled">
<EditOffOutlinedIcon sx={{ fontSize: 14 }} />
</Tooltip>
</ToggleButton>
<ToggleButton value="2">
<Tooltip arrow placement="top" title="excluded it from MQTT and API outputs">
<Tooltip arrow placement="top" title="filter entities excluded from MQTT and API outputs">
<CommentsDisabledOutlinedIcon sx={{ fontSize: 14 }} />
</Tooltip>
</ToggleButton>
<ToggleButton value="1">
<Tooltip arrow placement="top" title="hide it from the Dashboard">
<Tooltip arrow placement="top" title="filter entities hidden from Web Dashboard">
<VisibilityOffOutlinedIcon sx={{ fontSize: 14 }} />
</Tooltip>
</ToggleButton>
Expand All @@ -403,26 +403,30 @@ const SettingsCustomization: FC = () => {
<VisibilityOffOutlinedIcon color="primary" sx={{ fontSize: 14, verticalAlign: 'middle' }} />:
</Grid>
<Grid item>
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(false)}
>
enable
</Button>
<Tooltip arrow placement="top" title="mark shown entities to be all visible and output ">
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(false)}
>
enable
</Button>
</Tooltip>
</Grid>
<Grid item>
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(true)}
>
disable
</Button>
<Tooltip arrow placement="top" title="mark shown entities to be not visible or output ">
<Button
size="small"
sx={{ fontSize: 10 }}
variant="outlined"
color="inherit"
onClick={() => maskDisabled(true)}
>
disable
</Button>
</Tooltip>
</Grid>
</Grid>
<Table data={{ nodes: shown_data }} theme={entities_theme} sort={entity_sort} layout={{ custom: true }}>
Expand Down
Binary file modified media/web_devices.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified media/web_edit.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/web_sensor.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified media/web_settings.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified media/web_status.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
81 changes: 78 additions & 3 deletions src/devices/boiler.cpp
Expand Up @@ -238,7 +238,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
DeviceValueUOM::NONE,
MAKE_CF_CB(set_energyCostRatio),
0,
19.9);
20);
register_device_value(DeviceValueTAG::TAG_BOILER_DATA,
&fossileFactor_,
DeviceValueType::UINT,
Expand Down Expand Up @@ -393,13 +393,29 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const
FL_(wwComfort),
DeviceValueUOM::NONE,
MAKE_CF_CB(set_ww_mode));
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
&wwComfort1_,
DeviceValueType::ENUM,
FL_(enum_comfort1),
FL_(wwComfort1),
DeviceValueUOM::NONE,
MAKE_CF_CB(set_ww_mode1));
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
&wwFlowTempOffset_,
DeviceValueType::UINT,
nullptr,
FL_(wwFlowTempOffset),
DeviceValueUOM::DEGREES_R,
MAKE_CF_CB(set_ww_flowTempOffset));
MAKE_CF_CB(set_ww_flowTempOffset),
0,
40);
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
&wwChargeOptimization_,
DeviceValueType::BOOL,
nullptr,
FL_(wwChargeOptimization),
DeviceValueUOM::NONE,
MAKE_CF_CB(set_ww_chargeOptimization));
register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW,
&wwMaxPower_,
DeviceValueType::UINT,
Expand Down Expand Up @@ -773,11 +789,24 @@ void Boiler::process_UBAParameterWWPlus(std::shared_ptr<const Telegram> telegram
has_update(telegram, wwSelTemp_, 6); // setting here
has_update(telegram, wwHystOn_, 7);
has_update(telegram, wwHystOff_, 8);
has_update(telegram, wwFlowTempOffset_, 9);
has_update(telegram, wwCircPump_, 10); // 0x01 means yes
has_update(telegram, wwCircMode_, 11); // 1=1x3min... 6=6x3min, 7=continuous
has_update(telegram, wwDisinfectionTemp_, 12); // setting here, status in E9
has_update(telegram, wwSelTempSingle_, 16);
has_update(telegram, wwSelTempLow_, 18);
has_update(telegram, wwChargeOptimization_, 25);

uint8_t wwComfort1 = EMS_VALUE_UINT_NOTSET;
telegram->read_value(wwComfort1, 13);
if (wwComfort1 == 0) {
wwComfort1 = 0; // High_Comfort
} else if (wwComfort1 == 0xD8) {
wwComfort1 = 1; // Eco
} else {
wwComfort1 = EMS_VALUE_UINT_NOTSET;
}
has_update(wwComfort1_, wwComfort1);
}

// 0xE9 - WW monitor ems+
Expand Down Expand Up @@ -1249,7 +1278,11 @@ bool Boiler::set_ww_flowTempOffset(const char * value, const int8_t id) {
return false;
}

write_command(EMS_TYPE_UBAParameterWW, 5, v, EMS_TYPE_UBAParameterWW);
if (is_fetch(EMS_TYPE_UBAParameterWWPlus)) {
write_command(EMS_TYPE_UBAParameterWWPlus, 9, v, EMS_TYPE_UBAParameterWWPlus);
} else {
write_command(EMS_TYPE_UBAParameterWW, 5, v, EMS_TYPE_UBAParameterWW);
}

return true;
}
Expand Down Expand Up @@ -1350,6 +1383,23 @@ bool Boiler::set_ww_hyst_off(const char * value, const int8_t id) {
return true;
}

// set ww charge optimization
bool Boiler::set_ww_chargeOptimization(const char * value, const int8_t id) {
bool v = false;
if (!Helpers::value2bool(value, v)) {
return false;
}

if (is_fetch(EMS_TYPE_UBAParameterWWPlus)) {
write_command(EMS_TYPE_UBAParameterWWPlus, 25, v ? 1 : 0, EMS_TYPE_UBAParameterWWPlus);
}

return true;
}




// set dhw max power
bool Boiler::set_ww_maxpower(const char * value, const int8_t id) {
int v = 0;
Expand Down Expand Up @@ -1485,6 +1535,31 @@ bool Boiler::set_ww_mode(const char * value, const int8_t id) {
return true;
}

// wwcomfort1 for RC310
// on a RC310 it's 1=high, 2=eco
bool Boiler::set_ww_mode1(const char * value, const int8_t id) {
uint8_t set;
if (!Helpers::value2enum(value, set, FL_(enum_comfort1))) {
return false;
}

if (!is_fetch(EMS_TYPE_UBAParameterWWPlus)) {
return false;
}

if (set == 0) {
// LOG_INFO(F("Setting boiler dhw to High"));
} else if (set == 1) {
// LOG_INFO(F("Setting boiler dhw to Eco"));
set = 0xD8;
} else {
return false; // do nothing
}

write_command(EMS_TYPE_UBAParameterWWPlus, 13, set, EMS_TYPE_UBAParameterWWPlus);
return true;
}

// turn on/off dhw
bool Boiler::set_ww_activated(const char * value, const int8_t id) {
bool v = false;
Expand Down
66 changes: 35 additions & 31 deletions src/devices/boiler.h
Expand Up @@ -51,37 +51,39 @@ class Boiler : public EMSdevice {
static constexpr uint16_t EMS_TYPE_UBAEnergySupplied = 0x494;

// ww
uint8_t wwSetTemp_; // DHW set temperature
uint8_t wwSelTemp_; // DHW selected temperature
uint8_t wwSelTempLow_; // DHW lower selected temperature
uint8_t wwSelTempOff_; // DHW selected temperature for off position
uint8_t wwSelTempSingle_; // DHW single charge temperature
uint8_t wwType_; // 0-off, 1-flow, 2-flowbuffer, 3-buffer, 4-layered buffer
uint8_t wwComfort_; // WW comfort mode
uint8_t wwCircPump_; // DHW circulation pump available
uint8_t wwChargeType_; // DHW charge type (pump or 3-way-valve)
uint8_t wwDisinfectionTemp_; // DHW disinfection temperature to prevent infection
uint8_t wwCircMode_; // DHW circulation pump mode
uint8_t wwCirc_; // Circulation on/off
uint16_t wwCurTemp_; // DHW current temperature
uint16_t wwCurTemp2_; // DHW current temperature storage
uint8_t wwCurFlow_; // DHW current flow temp in l/min
uint16_t wwStorageTemp1_; // DHW storage temp 1
uint16_t wwStorageTemp2_; // DHW storage temp 2
uint8_t wwActivated_; // DHW activated
uint8_t wwOneTime_; // DHW one time function on/off
uint8_t wwDisinfect_; // DHW disinfection on/off
uint8_t wwCharging_; // DHW charging on/off
uint8_t wwRecharging_; // DHW recharge on/off
uint8_t wwTempOK_; // DHW temperature ok on/off
uint8_t wwActive_; //
uint8_t ww3wayValve_; // 3-way valve on WW
uint8_t wwSetPumpPower_; // ww pump speed/power?
uint8_t wwFlowTempOffset_; // Boiler offset for ww heating
uint8_t wwMaxPower_; // DHW maximum power
uint32_t wwStarts_; // DHW starts
uint32_t wwStarts2_; // DHW control starts
uint32_t wwWorkM_; // DHW minutes
uint8_t wwSetTemp_; // DHW set temperature
uint8_t wwSelTemp_; // DHW selected temperature
uint8_t wwSelTempLow_; // DHW lower selected temperature
uint8_t wwSelTempOff_; // DHW selected temperature for off position
uint8_t wwSelTempSingle_; // DHW single charge temperature
uint8_t wwType_; // 0-off, 1-flow, 2-flowbuffer, 3-buffer, 4-layered buffer
uint8_t wwComfort_; // WW comfort mode
uint8_t wwComfort1_; // WW comfort mode RC310
uint8_t wwCircPump_; // DHW circulation pump available
uint8_t wwChargeType_; // DHW charge type (pump or 3-way-valve)
uint8_t wwChargeOptimization_; // DHW charge optimization
uint8_t wwDisinfectionTemp_; // DHW disinfection temperature to prevent infection
uint8_t wwCircMode_; // DHW circulation pump mode
uint8_t wwCirc_; // Circulation on/off
uint16_t wwCurTemp_; // DHW current temperature
uint16_t wwCurTemp2_; // DHW current temperature storage
uint8_t wwCurFlow_; // DHW current flow temp in l/min
uint16_t wwStorageTemp1_; // DHW storage temp 1
uint16_t wwStorageTemp2_; // DHW storage temp 2
uint8_t wwActivated_; // DHW activated
uint8_t wwOneTime_; // DHW one time function on/off
uint8_t wwDisinfect_; // DHW disinfection on/off
uint8_t wwCharging_; // DHW charging on/off
uint8_t wwRecharging_; // DHW recharge on/off
uint8_t wwTempOK_; // DHW temperature ok on/off
uint8_t wwActive_; //
uint8_t ww3wayValve_; // 3-way valve on WW
uint8_t wwSetPumpPower_; // ww pump speed/power?
uint8_t wwFlowTempOffset_; // Boiler offset for ww heating
uint8_t wwMaxPower_; // DHW maximum power
uint32_t wwStarts_; // DHW starts
uint32_t wwStarts2_; // DHW control starts
uint32_t wwWorkM_; // DHW minutes
int8_t wwHystOn_;
int8_t wwHystOff_;
uint8_t wwTapActivated_; // maintenance-mode to switch DHW off
Expand Down Expand Up @@ -240,6 +242,7 @@ class Boiler : public EMSdevice {

// commands - none of these use the additional id parameter
bool set_ww_mode(const char * value, const int8_t id);
bool set_ww_mode1(const char * value, const int8_t id);
bool set_ww_activated(const char * value, const int8_t id);
bool set_tapwarmwater_activated(const char * value, const int8_t id);
bool set_ww_onetime(const char * value, const int8_t id);
Expand All @@ -253,6 +256,7 @@ class Boiler : public EMSdevice {
bool set_ww_disinfect_temp(const char * value, const int8_t id);
bool set_ww_maxpower(const char * value, const int8_t id);
bool set_ww_flowTempOffset(const char * value, const int8_t id);
bool set_ww_chargeOptimization(const char * value, const int8_t id);
bool set_flow_temp(const char * value, const int8_t id);
bool set_burn_power(const char * value, const int8_t id);
bool set_heating_activated(const char * value, const int8_t id);
Expand Down
11 changes: 8 additions & 3 deletions src/devices/thermostat.cpp
Expand Up @@ -3723,7 +3723,7 @@ void Thermostat::register_device_values() {
DeviceValueUOM::NONE,
MAKE_CF_CB(set_energyCostRatio),
0,
19.9);
20);
register_device_value(DeviceValueTAG::TAG_THERMOSTAT_DATA,
&fossileFactor_,
DeviceValueType::UINT,
Expand Down Expand Up @@ -3835,8 +3835,13 @@ void Thermostat::register_device_values_hc(std::shared_ptr<Thermostat::HeatingCi
tag, &hc->heatingtype, DeviceValueType::ENUM, FL_(enum_heatingtype), FL_(heatingtype), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingtype));
register_device_value(
tag, &hc->summersetmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode));
register_device_value(
tag, &hc->hpoperatingmode, DeviceValueType::ENUM, FL_(enum_hpoperatingmode), FL_(hpoperatingmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode));
register_device_value(tag,
&hc->hpoperatingmode,
DeviceValueType::ENUM,
FL_(enum_hpoperatingmode),
FL_(hpoperatingmode),
DeviceValueUOM::NONE,
MAKE_CF_CB(set_summermode));
register_device_value(tag, &hc->summermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE);
register_device_value(
tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode));
Expand Down

0 comments on commit 9a3668c

Please sign in to comment.