I have a Thermasol Pro-Series steam unit with a Solitude Wireless (SWM-2) device. Unfortunately, Thermasol decided to deprecate the iOS app that managed the steam unit from my phone. While the hardware still worked fine, I could no longer install the app on any new phones, and while my phone still had the app, it was getting very buggy.
Through quite a bit of packet sniffing, data stream decoding, trial and error, and some head scratching, I was finally able to have my Home Assistant control my Thermasol steam room via the wifi module.
Essentially you need to ensure that your Home Assistant device can send TCP streams to your SWM-2 device. I did most of this automation within Node Red, since I find it simpler for complex logic flows. Here are some of the important details, even if you want to use an alternate data frame initiator.
- Find the IP address of your SWM-2 device
- You will be connecting to port 10002
- In Node Red, I used the TCP request node, with a function node parsing the string.
- At the moment all data is one-way, in that the Home Assistant box sends these frames to the steam unit, but does not listed for a reply. Instead, I rely on things like a power clamp meter to verify if the steam unit is on or off. I still need to work on receiving the response frames and decoding / parsing them.
Code for function node if you choose to use Node Red: After the function node, use a standard TCP Request node with your SWM-2 wifi module and port 10002.
`// Expect msg.payload to be a hex string like 'A5010100690000005A'
const s = (msg.payload || '').toString().replace(/\s|0x/gi,'');
if (!s || s.length % 2 !== 0) {
node.error('Invalid hex payload length or empty payload', msg);
return null;
}
try {
msg.payload = Buffer.from(s, 'hex');
return msg;
} catch (e) {
node.error('Failed to convert hex to buffer: ' + e);
return null;
}`
I tested this with a little python script on my machine to send the frames to the wifi module. Note that the wifi module only allows 1 TCP data stream to be connected at one time. In my case, my iOS app still worked somewhat, but I needed to completely kill it for my computer (or HA) to successfully send a frame.
Important Hex frames to send to the SWM-2:
Turn steam unit ON
A5 0E 01 01 00 00 00 00 5A
Turn steam unit OFF
A5 0F 00 00 00 00 00 00 5A
Temperature is in the format “a5 01 01 00 XX 00 00 00 5a” with XX being the hex value related to temperature. In my case 95°F and 119°F seemed to be the min and max values it would accept. Some examples:
Set to 95°F a5 01 01 00 5f 00 00 00 5a
Set to 106°F a5 01 01 00 6a 00 00 00 5a
Set to 119°F a5 01 01 00 77 00 00 00 5a
Setting the cycle timer:
Set to 15 Minutes a5 03 01 0f 00 00 00 00 5a
Set to 30 Minutes a5 03 01 1e 00 00 00 00 5a
Set to 45 Minutes a5 03 01 2d 00 00 00 00 5a
Set to 60 Minutes a5 03 01 3c 00 00 00 00 5a