Hi there!
This is my first post. Despite I was registered time ago something happened with my previous account, that is no usable anymore.
It has been a long time since I discovered this thread and started planning my hardware and software (almost two years). In 2019 I sent a message to Alan (who started this thread) and after that started to plan. All your posts have been quite helpful to elaborate my software but still have a lot of doubts. Let’s start:
Hardware:I’m using a RS485 server (
http://www.hi-flying.com/hf5122) to interface with the controller (that is a SMATRIX BASE) and control my thermostats (all of, up to 6, them are T-146).
My settings are 19200 bps 8/1/N and I get consistent frames that are validated by means of the CRC (that matches the modbus one).
I created a server at port 9999 that copies any frame on the bus to the socket and allows me to send whatever frame.
Sofware:I decided time ago to develop a service (written in Java) that will be running in a small linux server that gets the values from the RS485 port through TCP and posts them to a MQTT broker once they are processed.
Results so far… The server frame capture and processing part is almost ready (except for my doubts that are shared here) and the MQTT part is still pending (I hope not for a long time…)
Frames:The usual frames I can capture from the system are:
<- 11049E8BFF9E6D
11 04 | 9E 8B | FF | CRC 9E6D [ OK ]
-> 11049E8B4003373E00003F1C02FB14
11 04 | 9E 8B | Room Temp[40]( 03:37 -> 82.3F/27.94C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC FB14 [ OK ]
-> 11049E8B2D7FFF3D10400C002437019A3803B63B02CC3C0048358000D8B9
11 04 | 9E 8B | ID: 2D | Val 7FFF || Demand water[3D]( 10:40 -> YES [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CC -> 71.6F/22.0C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC D8B9 [ OK ]
My analysis of the frames:really modbus?
In principle observing the frame staring with "11 04" anyone may think it is modbus requesting registers (0x04) to station 17 (0x11), however, observing others’ posts (that were quite helpful) I discovered that changes with the system. For instance, dimmu311 reports frames staring with "10 4" that also fits into the hypothesis, but jsouto reports "10 05" that does not fit! also TBuyukkilic reports "11 0c" that also does not fit! So…. This is something proprietary.
I assumed first two bytes as SYSTEM ID (11 04)
I assumed third and fourth bytes as the STATION ID (thermostat, 9E 8B in the example).
I agree that FF may be status request as mitokondoria suggests for requests (<-)
The data in responses are sets of the sequence ID (1byte) Payload(2 byte).
So it is not modbus despite frame CRC matches.
What about the data?
I strongly relied on what TBuyukkilic provided in a previous post. Let me show my conclusions on the values and my doubts:
-> 11049E8B4003373E00003F1C02FB14
11 04 | 9E 8B | Room Temp[40]( 03:37 -> 82.3F/27.94C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC FB14 [ OK ]
* ID 0x40 (room temperature) 400337
(03:37 -> 82.3F/27.94C)
DOUBTS: No doubt at all! This is crystal clear! I have double checked it. In uponor documents they claim they convert it using (F-320)/18. I’m doing the traditional way and also matches.
* ID 0x3E (operating mode) 3E0000
ROOM_TEMPERATURE(0x0000, "Room Temperature"), INTERNAL_FLOOR_SENSOR(0x0002, "Internal floor sensor"), REMOTE_OUTDOOR_SENSOR(0x0003, "Remote Outdoor sensor"), REMOTE_SENSOR(0xB300, "Remote sensor");
DOUBTS: TBuyukkilic , where did you get that??!!! It is great and seems to match! Thanks a lot!
* ID 0x3F (allow cooling??) 3F1C02
I process it this way:
hot = ((currently&0xF000) == 0x0000) ? true : false;
cold = ((currently&0xF000) == 0x1000) ? true : false;
DOUBTS: TBuyukkilic calls it Allow Cooling, but I noticed that 0xF000&Value=0x0000 for heating (winter) and 0xF000&Value=0x1000 for cooling (summer)… but I can’t say anything else about the rest that would be C02 taking out the first 4 bits…
-> 11049E8B2D7FFF3D10400C002437019A3803B63B02CC3C0048358000D8B9
11 04 | 9E 8B | ID: 2D | Val 7FFF || Demand water[3D]( 10:40 -> YES [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CC -> 71.6F/22.0C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC D8B9 [ OK ]
* ID 0x2D (no idea!) 2D7FFF
DOUBTS: everyone get 7FFF but no idea!
* ID 0x3D (I named it demand) 3D1040
I processed this way:
demanding = ((currently&0x00FF) == 0x0040) ? true : false;
hot = ((currently&0xFF00) == 0x0000) ? true : false;
cold = ((currently&0xFF00) == 0x1000) ? true : false;
DOUBTS: So 0x0000 means actuators for this thermostat are not demanding water during heating, 0x0040 demands water (heating), 0x1000 no demand (cooling), 0x1040 demands (cooling). Do you observe the same?
* ID 0x0C (no idea) 0C0024
Always the same value!
DOUBTS: did you observed something different? Are you all using t-146 (may be the model). It may also has something to do with display configurations at thermostat?
* ID 0x38 Setpoint MIN
* ID 0x37 Setpoint MIN, as room temperature. Also documented by uponor that is maximum 35 and minimum 5. So, crystal clear!
* ID 0x3B (setpoint) 3B02CC
I process it as Room temperature but get always two degrees LESS that the actual setpoint (at least in cooling mode – need to check in heating mode..)
DOUBTs: do you read the exact temperature? Or you need to increase it by 2 (in Celsius)??
* ID 0x3C and ID 0x35, no idea at all.
Thanks for your time and let’s see if you can bring any light to all this!
I add some traffic for analysis:
Client... started
-> 110470642D7FFF3D10000C002437019A3803B63B02CD3C004835800087C5
11 04 | 70 64 | ID: 2D | Val 7FFF || Demand water[3D]( 10:00 -> NO [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 87C5 [ OK ]
<- 11047069FFB6F8
11 04 | 70 69 | FF | CRC B6F8 [ OK ]
-> 110470694002EA3E00003F1C02F162
11 04 | 70 69 | Room Temp[40]( 02:EA -> 74.6F/23.67C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC F162 [ OK ]
-> 110470692D7FFF3D10000C002437019A3803B63B02CD3C00483580002C53
11 04 | 70 69 | ID: 2D | Val 7FFF || Demand water[3D]( 10:00 -> NO [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 2C53 [ OK ]
<- 11047064FFB268
11 04 | 70 64 | FF | CRC B268 [ OK ]
-> 110470644002F13E00003F1C02CB99
11 04 | 70 64 | Room Temp[40]( 02:F1 -> 75.3F/24.06C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC CB99 [ OK ]
-> 110470642D7FFF3D10000C002437019A3803B63B02CD3C004835800087C5
11 04 | 70 64 | ID: 2D | Val 7FFF || Demand water[3D]( 10:00 -> NO [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 87C5 [ OK ]
<- 1104708CFFFC68
11 04 | 70 8C | FF | CRC FC68 [ OK ]
-> 1104708C4002EB3E00003F1C02F5E4
11 04 | 70 8C | Room Temp[40]( 02:EB -> 74.7F/23.72C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC F5E4 [ OK ]
-> 1104708C2D7FFF3D10000C002437019A3803B63B02CD3C00483580007FDA
11 04 | 70 8C | ID: 2D | Val 7FFF || Demand water[3D]( 10:00 -> NO [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 7FDA [ OK ]
<- 11047124FFD268
11 04 | 71 24 | FF | CRC D268 [ OK ]
-> 110471244002F73E00003F1C02ABB1
11 04 | 71 24 | Room Temp[40]( 02:F7 -> 75.9F/24.39C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC ABB1 [ OK ]
-> 110471242D7FFF3D10400C002437019A3803B63B02CD3C00483580003C20
11 04 | 71 24 | ID: 2D | Val 7FFF || Demand water[3D]( 10:40 -> YES [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 3C20 [ OK ]
<- 1104706DFFB438
11 04 | 70 6D | FF | CRC B438 [ OK ]
-> 1104706D4002EC3E00003F1C02D6B7
11 04 | 70 6D | Room Temp[40]( 02:EC -> 74.8F/23.78C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC D6B7 [ OK ]
-> 1104706D2D7FFF3D10000C002437019A3803B63B02CD3C00483580007976
11 04 | 70 6D | ID: 2D | Val 7FFF || Demand water[3D]( 10:00 -> NO [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CD -> 71.7F/22.06C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC 7976 [ OK ]
<- 11049E8BFF9E6D
11 04 | 9E 8B | FF | CRC 9E6D [ OK ]
-> 11049E8B40033A3E00003F1C0227D4
11 04 | 9E 8B | Room Temp[40]( 03:3A -> 82.6F/28.11C ) || Operating mode [3E] ( 00:00 -> ROOM_TEMPERATURE || Params1 [3F] ( 1C:02 -> [Cold] ) || CRC 27D4 [ OK ]
-> 11049E8B2D7FFF3D10400C002437019A3803B63B02CC3C0048358000D8B9
11 04 | 9E 8B | ID: 2D | Val 7FFF || Demand water[3D]( 10:40 -> YES [Cold] ) || ID: 0C | Val 0024 || SetPoint Temp Min [37] ( 01:9A -> 41.0F/5.0C ) || SetPoint Temp Max [38]( 03:B6 -> 95.0F/35.0C ) || SetPoint Temp[3B]( 02:CC -> 71.6F/22.0C ) || ID: 3C | Val 0048 || ID: 35 | Val 8000 || CRC D8B9 [ OK ]