From b6ec8e14ecf699bd27ca195d075d00d562708bdc Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Wed, 10 Jan 2024 18:32:23 +0100 Subject: [PATCH] remote emulation RC200 for hc3/4 instead of RC100H --- src/devices/thermostat.cpp | 8 ++++---- src/roomcontrol.cpp | 16 +++++++++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index d25999a8a..53a25d04e 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -36,11 +36,11 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i // reserve_telegram_functions(3); register_telegram_type(0x042B + device_id - 0x38, "RemoteTemp", false, MAKE_PF_CB(process_RemoteTemp)); register_telegram_type(0x047B + device_id - 0x38, "RemoteHumidity", false, MAKE_PF_CB(process_RemoteHumidity)); - register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + // register_telegram_type(0x0273 + device_id - 0x38, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); + // register_telegram_type(0x0A6A + device_id - 0x38, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); // maybe fixed type for these telegrams? - // register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); - // register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); + register_telegram_type(0x0273, "RemoteCorrection", true, MAKE_PF_CB(process_RemoteCorrection)); + register_telegram_type(0x0A6B, "RemoteBattery", true, MAKE_PF_CB(process_RemoteBattery)); register_device_values(); // register device values for common values (not heating circuit) return; // no values to add diff --git a/src/roomcontrol.cpp b/src/roomcontrol.cpp index c70ed5b2a..9aa2f9906 100644 --- a/src/roomcontrol.cpp +++ b/src/roomcontrol.cpp @@ -66,7 +66,7 @@ uint8_t Roomctrl::get_hc(uint8_t addr) { case SENSOR: return addr - 0x40; case RC100H: - return addr == 0x1A ? 2 : addr - 0x38; + return addr - 0x38; case FB10: case RC20: default: @@ -98,7 +98,7 @@ void Roomctrl::send(const uint8_t addr) { humidity(addr, 0x10, hc); sendcnt[hc] = 0; } else { // temperature telegram - if (remotehum_[hc] != EMS_VALUE_UINT_NOTSET) { + if (remotehum_[hc] != EMS_VALUE_UINT_NOTSET && hc < 2) { // humidity only for hc 0,1 sendcnt[hc] = 1; } else { rc_time_[hc] = uuid::get_uptime(); @@ -172,9 +172,15 @@ void Roomctrl::version(uint8_t addr, uint8_t dst) { data[1] = dst; data[2] = 0x02; data[3] = 0; - data[4] = type_; // set RC20 id 113, Ver 02.01 or Junkers FB10 id 109, Ver 16.05, RC100H id 200 ver 40.04 - data[5] = type_ == RC20 ? 2 : type_ == FB10 ? 16 : 40; - data[6] = type_ == RC20 ? 1 : type_ == FB10 ? 5 : 4; + if (type_ == RC100H && addr > 0x39) { // use RC200 id=157,ver 41.08 + data[4] = 157; + data[5] = 41; + data[6] = 8; + } else { + data[4] = type_; // set RC20 id 113, Ver 02.01 or Junkers FB10 id 109, Ver 16.05, RC100H id 200 ver 40.04 + data[5] = type_ == RC20 ? 2 : type_ == FB10 ? 16 : 40; + data[6] = type_ == RC20 ? 1 : type_ == FB10 ? 5 : 4; + } data[7] = EMSbus::calculate_crc(data, 7); // apppend CRC EMSuart::transmit(data, 8); }