diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index f7d94620a..5e8f7d576 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -94,7 +94,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const id_ = product_id; register_device_value(TAG_BOILER_DATA, &heatingActive_, DeviceValueType::BOOL, nullptr, F("heatingActive"), F("heating active")); - register_device_value(TAG_BOILER_DATA, &tapwaterActive_, DeviceValueType::BOOL, nullptr, F("tapwaterActive"), F("warm water/DHW active")); + register_device_value(TAG_BOILER_DATA, &tapwaterActive_, DeviceValueType::BOOL, nullptr, F("tapwaterActive"), F("warm water active")); register_device_value(TAG_BOILER_DATA, &selFlowTemp_, DeviceValueType::UINT, nullptr, F("selFlowTemp"), F("selected flow temperature"), DeviceValueUOM::DEGREES); register_device_value(TAG_BOILER_DATA, &selBurnPow_, DeviceValueType::UINT, nullptr, F("selBurnPow"), F("burner selected max power"), DeviceValueUOM::PERCENT); @@ -145,11 +145,11 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(TAG_BOILER_DATA_WW, &wWDisinfectionTemp_, DeviceValueType::UINT, nullptr, F("wWDisinfectionTemp"), F("disinfection temperature"), DeviceValueUOM::DEGREES); register_device_value(TAG_BOILER_DATA_WW, &wWCircPumpMode_, DeviceValueType::ENUM, FL_(enum_freq), F("wWCircPumpMode"), F("circulation pump freq")); register_device_value(TAG_BOILER_DATA_WW, &wWCirc_, DeviceValueType::BOOL, nullptr, F("wWCirc"), F("circulation active")); - register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp_, DeviceValueType::USHORT, FL_(div10), F("wWCurTemp"), F("current temperature (intern)"), DeviceValueUOM::DEGREES); - register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp2_, DeviceValueType::USHORT, FL_(div10), F("wWCurTemp2"), F("current temperature (extern)"), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp_, DeviceValueType::USHORT, FL_(div10), F("wWCurTemp"), F("current intern temperature"), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wWCurTemp2_, DeviceValueType::USHORT, FL_(div10), F("wWCurTemp2"), F("current extern temperature"), DeviceValueUOM::DEGREES); register_device_value(TAG_BOILER_DATA_WW, &wWCurFlow_, DeviceValueType::UINT, FL_(div10), F("wWCurFlow"), F("current tap water flow"), DeviceValueUOM::LMIN); - register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp1_, DeviceValueType::USHORT, FL_(div10), F("wWStorageTemp1"), F("storage temperature (intern)"), DeviceValueUOM::DEGREES); - register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp2_, DeviceValueType::USHORT, FL_(div10), F("wWStorageTemp2"), F("storage temperature (extern)"), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp1_, DeviceValueType::USHORT, FL_(div10), F("wWStorageTemp1"), F("storage intern temperature"), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wWStorageTemp2_, DeviceValueType::USHORT, FL_(div10), F("wWStorageTemp2"), F("storage extern temperature"), DeviceValueUOM::DEGREES); register_device_value(TAG_BOILER_DATA_WW, &wWActivated_, DeviceValueType::BOOL, nullptr, F("wWActivated"), F("activated")); register_device_value(TAG_BOILER_DATA_WW, &wWOneTime_, DeviceValueType::BOOL, nullptr, F("wWOneTime"), F("one time charging")); register_device_value(TAG_BOILER_DATA_WW, &wWDisinfecting_, DeviceValueType::BOOL, nullptr, F("wWDisinfecting"), F("disinfecting")); @@ -186,7 +186,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(TAG_BOILER_DATA_INFO, &auxElecHeatNrgConsDHW_, DeviceValueType::ULONG, nullptr, F("auxElecHeatNrgConsDHW"), F("auxiliary electrical heater energy consumption DHW")); register_device_value(TAG_BOILER_DATA_INFO, &maintenanceMessage_, DeviceValueType::TEXT, nullptr, F("maintenanceMessage"), F("maintenance message")); register_device_value(TAG_BOILER_DATA_INFO, &maintenanceDate_, DeviceValueType::TEXT, nullptr, F("maintenanceDate"), F("maintenance set date")); - register_device_value(TAG_BOILER_DATA_INFO, &maintenanceType_, DeviceValueType::ENUM, FL_(enum_off_time_date), F("maintenanceType"), F("scheduled maintenance")); + register_device_value(TAG_BOILER_DATA_INFO, &maintenanceType_, DeviceValueType::ENUM, FL_(enum_off_time_date), F("maintenanceType"), F("maintenance scheduled")); register_device_value(TAG_BOILER_DATA_INFO, &maintenanceTime_, DeviceValueType::USHORT, nullptr, F("maintenanceTime"), F("maintenance set time"), DeviceValueUOM::HOURS); } @@ -661,7 +661,7 @@ bool Boiler::set_warmwater_temp(const char * value, const int8_t id) { } else { write_command(EMS_TYPE_UBAFlags, 3, v, 0x34); // for i9000, see #397 write_command(EMS_TYPE_UBAParameterWW, 2, v, - EMS_TYPE_UBAParameterWW); // read seltemp back + EMS_TYPE_UBAParameterWW); // read seltemp back } return true; diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 0a8e9a73f..0c632e305 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -41,6 +41,7 @@ static const __FlashStringHelper * DeviceValueUOM_s[] __attribute__((__aligned__ // must be an int of 4 bytes, 32bit aligned static const __FlashStringHelper * const DeviceValueTAG_s[] PROGMEM = { + F_(tag_none), F_(tag_boiler_data), F_(tag_boiler_data_ww), F_(tag_boiler_data_info), @@ -64,10 +65,7 @@ const std::string EMSdevice::uom_to_string(uint8_t uom) { } const std::string EMSdevice::tag_to_string(uint8_t tag) { - if (tag == DeviceValueTAG::TAG_NONE) { - return std::string{}; - } - return uuid::read_flash_string(DeviceValueTAG_s[tag - 1]); // offset by 1 to account for NONE + return uuid::read_flash_string(DeviceValueTAG_s[tag]); } const std::vector EMSdevice::devicevalues() const { @@ -519,8 +517,7 @@ bool EMSdevice::generate_values_json_web(JsonObject & json) { } // add name, prefixing the tag if it exists - // if we're a boiler, ignore the tag - if ((dv.tag == DeviceValueTAG::TAG_NONE) || (device_type_ == DeviceType::BOILER)) { + if ((dv.tag == DeviceValueTAG::TAG_NONE) || tag_to_string(dv.tag).empty()) { data.add(dv.full_name); } else { char name[50]; diff --git a/src/emsdevice.h b/src/emsdevice.h index 04d3c4e2d..73eee205c 100644 --- a/src/emsdevice.h +++ b/src/emsdevice.h @@ -69,9 +69,13 @@ MAKE_PSTR(lmin, "l/min") enum DeviceValueUOM : uint8_t { NONE = 0, DEGREES, PERCENT, LMIN, KWH, WH, HOURS, MINUTES, UA, BAR, PUMP }; // TAG mapping - maps to DeviceValueTAG_s in emsdevice.cpp -MAKE_PSTR(tag_boiler_data, "boiler") -MAKE_PSTR(tag_boiler_data_ww, "warm water") -MAKE_PSTR(tag_boiler_data_info, "info") +MAKE_PSTR(tag_none, "") // use empty string if want to suppress showing tags +// MAKE_PSTR(tag_boiler_data, "boiler") +// MAKE_PSTR(tag_boiler_data_ww, "warm water") +// MAKE_PSTR(tag_boiler_data_info, "info") +MAKE_PSTR(tag_boiler_data, "") +MAKE_PSTR(tag_boiler_data_ww, "") +MAKE_PSTR(tag_boiler_data_info, "") MAKE_PSTR(tag_thermostat_data, "") // use empty string if want to suppress showing tags MAKE_PSTR(tag_hc1, "hc1") MAKE_PSTR(tag_hc2, "hc2") diff --git a/src/test/test.cpp b/src/test/test.cpp index 16889050b..014a7855b 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -325,35 +325,15 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd) { if (command == "web") { shell.printfln(F("Testing Web...")); - add_device(0x08, 123); // Nefit Trendline - add_device(0x18, 157); // Bosch CR100 - - // add some data - // Boiler -> Me, UBAMonitorFast(0x18), telegram: 08 00 18 00 00 02 5A 73 3D 0A 10 65 40 02 1A 80 00 01 E1 01 76 0E 3D 48 00 C9 44 02 00 (#data=25) - uart_telegram({0x08, 0x00, 0x18, 0x00, 0x00, 0x02, 0x5A, 0x73, 0x3D, 0x0A, 0x10, 0x65, 0x40, 0x02, 0x1A, 0x80, 0x00, 0x01, 0xE1, 0x01, 0x76, 0x0E, 0x3D, 0x48, 0x00, 0xC9, 0x44, 0x02, 0x00}); - - // Boiler -> Thermostat, UBAParameterWW(0x33), telegram: 08 97 33 00 23 24 (#data=2) - uart_telegram({0x08, 0x98, 0x33, 0x00, 0x23, 0x24}); - - // Boiler -> Me, UBAParameterWW(0x33), telegram: 08 0B 33 00 08 FF 34 FB 00 28 00 00 46 00 FF FF 00 (#data=13) - uart_telegram({0x08, 0x0B, 0x33, 0x00, 0x08, 0xFF, 0x34, 0xFB, 0x00, 0x28, 0x00, 0x00, 0x46, 0x00, 0xFF, 0xFF, 0x00}); - - // Thermostat RCPLUSStatusMessage_HC1(0x01A5) - uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24, 0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03}); - - // time - uart_telegram({0x98, 0x00, 0x06, 0x00, 0x00, 0x03, 0x04, 0x0C, 0x02, 0x33, 0x06, 00, 00, 00, 00, 00, 00}); - - shell.invoke_command("show"); - shell.invoke_command("call boiler info"); + run_test("boiler"); + run_test("thermostat"); // test call DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE_DYN); JsonObject json = doc.to(); (void)emsesp::Command::call(EMSdevice::DeviceType::BOILER, "info", nullptr, -1, json); -// bool has_data = emsesp::Command::call(EMSdevice::DeviceType::SYSTEM, "test", "boiler", -1, json); #if defined(EMSESP_STANDALONE) - Serial.print(COLOR_BRIGHT_MAGENTA); + Serial.print(COLOR_YELLOW); if (json.size() != 0) { serializeJson(doc, Serial); } @@ -363,28 +343,24 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd) { for (const auto & emsdevice : EMSESP::emsdevices) { if (emsdevice) { - if (emsdevice->unique_id() == 1) { - DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE_DYN); + DynamicJsonDocument doc(EMSESP_JSON_SIZE_XLARGE_DYN); - JsonObject root = doc.to(); - emsdevice->generate_values_json_web(root); + JsonObject root = doc.to(); + emsdevice->generate_values_json_web(root); #if defined(EMSESP_STANDALONE) - Serial.print(COLOR_BRIGHT_MAGENTA); - Serial.print("memoryUsage="); - Serial.print(doc.memoryUsage()); - Serial.println(); - Serial.print("measureMsgPack="); - Serial.print(measureMsgPack(doc)); - Serial.println(); - Serial.print("measureJson="); - Serial.print(measureJson(doc)); - Serial.println(); - serializeJson(doc, Serial); - Serial.print(COLOR_RESET); - Serial.println(); + Serial.print(COLOR_BRIGHT_MAGENTA); + serializeJson(doc, Serial); + Serial.println(); + Serial.print("** memoryUsage="); + Serial.print(doc.memoryUsage()); + Serial.print(" measureMsgPack="); + Serial.print(measureMsgPack(doc)); + Serial.print(" measureJson="); + Serial.print(measureJson(doc)); + Serial.println(" **"); + Serial.print(COLOR_RESET); #endif - } } } return;