MrCircuit / hass-tylo

A Home-Assistant integration for Tylö-Helo sauna controls based on the RS485 interface
Apache License 2.0
1 stars 1 forks source link

missing code? #1

Open johanneswilm opened 2 weeks ago

johanneswilm commented 2 weeks ago

Hey, it looks like some code nmay be missing here? I am looking for something to replace the very basic controller that comes with the sauna oven.

MrCircuit commented 1 week ago

Hi,

You can find the "most recent" code in the one-and-only feature branch. I already managed to decode some (but not all) important messages from the Tylo controller while it was talking with the oven. Refer to rs485.py for the current state of my research. With this, most of the state information (temperature, uptime, door state etc.) can be sniffed from the RS485 bus.

Unfortunately I had no more time up to now to finish the HomeAssistant integration. So if you know how to code such an integration I would invite you to participate (even if you come up with another solution like ESPhome etc.).

johanneswilm commented 1 week ago

Hey @MrCircuit , I am a programmer, I have a Tylö-sauna and a homeaassistant... and I would like to connect the two. But it's an area of programming I have no experience in and I had no ambition so far to try to work on this. Thanks for the invitation though. When I have some time, I'll take a look also on home assistant integrations and see if I can come up with something.

MrCircuit commented 1 week ago

Thats great - if you join, I would also pick up the momentum and save some time to support it.

Do you already have a hardware solution for it? Either you can use one of these simple RS485-USB sticks (basically a FTDI or so IC on it) that are available on stores like Amazon. Or we could switch to an ESP32 based board that makes it far more easy to connect using ESPhome (than its just translating python to C++). I was once told that setting up a USB connection in HASS is not a usual use case as it might not work in all environments (like docker etc). I also have a C# based minimal solution for a "Tylo ASP.NET service" :-) but this is hardly integrateable into HASS.

And of course, feel free to add further information, if you get a glimpse of what the remaining undecoded messages are. Most of them should be handshake messages to tell the oven something about the control and stuff like that. Might be important, if you want to mimic an own controller yourself that can also control the oven. I do not know, what happens, if you push control messages on the bus with the address of the active controller :-P.

johanneswilm commented 1 week ago

@MrCircuit No, I don't have a hardware connection Yet. I guess I'll start out by getting a USB to RSB485 connector from Amazon or similar. I have worked with Python for 25 years, but I haven't communicated with outside devices since computers had com-ports some time in the 1990s.

MrCircuit commented 1 week ago

If you need any assistance, feel free to ask. Hardware like that is my daily business.

f-io commented 1 week ago

Hejhej @johanneswilm I would suggest buying an ESP32S3 and an RS485 converter (TTL -> 3V3) plus a buck converter (12V -> 3V3) instead. If you want to process the data externally, an RS485 WiFi adapter like a Waveshare RS485 to WIFI/Ethernet module will work fine, you can power both from the oven.

Even an esp32s2 will work, my 2 year old proto still works but did not implement any bidi communication yet. Just an MQTT client to push data to homekit, now I'm thinking of a matter update to get rid of the MQTT to homekit bridge.

@MrCircuit is this a pure or elite panel? The coding for set temp looks different to mine (sense pure).

98 40 09 60 00 00 1E F1 C2 B9 BE 9C (10) => 1E => 110°C
98 40 09 60 00 00 1C B1 CB EB 34 9C (09) => 1C => 102°C
98 40 09 60 00 00 1A 71 CB A0 51 9C (08) => 1A => 94°C
98 40 09 60 00 00 18 79 CB C8 7B 9C (07) => 18 => 87°C
98 40 09 60 00 00 16 39 C2 28 70 9C (06) => 16 => 79°C
98 40 09 60 00 00 13 69 CB E2 38 9C (05) => 13 => 69°C
98 40 09 60 00 00 11 B9 CB 79 09 9C (04) => 11 => 63°C
98 40 09 60 00 00 0F C1 CB 91 6E E4 (03) => 0F => 56°C

tylo

MrCircuit commented 1 week ago

Hi, Hej and Hallo,

I've also a sense pure. And the coding is exactly the same. Just to be sure that we're on the same page, I summarize all my insights, even if they are repetitive:

The first and last byte (0x98 and 0x9C) are for framing. You need to handle these before analysing the packet, because if they occur in the data, you must escape them (did not happen in your example). Then comes the 0x40 probably address byte, the 0x09 data direction byte and the 0x6000 opcode or data lane or however you want to name it, indicating the temperature target and actual values. Then comes a 32 bit wide data word, that I'll decode in your example lines below. The packet is then finished by a CRC16.

98 40 09 60 00 00 1E F1 C2 B9 BE 9C
            -> 00 1E F1 C2 (temperature data word)
0000000000 01111011110 00111000010
unused     990(*1/9°C) 450(*1/9°C)
           110°C       50°C

98 40 09 60 00 00 1C B1 CB EB 34 9C
            -> 00 1C B1 CB (temperature data word)
0000000000 01110010110 00111001011
unused     918(*1/9°C) 459(*1/9°C)
           102°C       51°C

...and so on...

Somebody at Tylö might be a fan of Fahrenheit. This would explain the strange temperature coding :-).

johanneswilm commented 1 week ago

Hey @MrCircuit @f-io, @f-io that is a nice wodden box you build there. What a good idea. Mine has half-way melted already. Are the plans of that box available anywhere? I was thinking of 3d printing a case of some sort.

One of the main reasons why I want to integrate the Tylö with the home automation is that the basic control panel (the open in your picture) is quite difficult to understand. I forget how it works myself between sauna visits, so I have the manual lying in the sauna to figure out exactly what each number means every time. I figure it should be easier to create something for home assistant that shows real temperature numbers, etc. . The other part is the box that has started to melt.

I see both of you are in Germany (and I am German too while living in Sweden - but probably best to keep this conversation in English in case others find it useful in the future), so I have access to most of the same online shops. I wouldn't mind you telling me exactly which item I should buy to communicate with the unit. I am fairly confident I will be able to figure it out once I have the device, but as external hardware devices isn't something I have looked at for a long time, there is a good chance I'd buy the wrong thing if I just buy the first item that seems to correspond to your description.

MrCircuit commented 1 week ago

I use the following RS485 adapters (or any other similar copy-cat):

https://amzn.eu/d/4JSGBGY

Waveshare looks also promising:

https://amzn.eu/d/aOGJc6A

With these adapters you would have to stick to the Python based integration in HA.

What I mentioned earlier was similar to @f-io approach to use an ESP32 based board that can handle RS485, then translate the code to ESP32 C/C++ and send the stuff away with MQTT or using a EPShome integration in HA with sensors.

You could also build a hybrid approach by pushing the raw data frames from ESPhome to a HA entity and then coding the framing and packeting etc in python/yaml.

MrCircuit commented 1 week ago

This looks promising: https://github.com/loongyh/esphome-rs485

f-io commented 1 week ago

@johanneswilm I must disappoint you, this is built from leftovers just to have some space for the ESP32 and I didn't like the plastic mount either. Due to the lack of backlight the panel is hard to use in the dark, it looks like it was build without any UX experience. 3d printing will be difficult as it is a thermoplastic, in the end it depends on the temperature at the installation.

Used both, the https://amzn.eu/d/aOGJc6A and the wifi https://amzn.eu/d/ez2tB8u (weird webinterface), but in the end I switched to an ESP32S2 (code is written in C). Now I'm currently in the process to switch to an ESP32S3 cause the matter part need some space and I also like to have OTA update. Currently in use is a lolin S2 https://amzn.eu/d/aFny5Hb, https://amzn.eu/d/98d2Ehu and https://amzn.eu/d/gVZwlG3 .

I also did a quick a dirty webinterface, but in the end I will focus on matter (tasmota?) cause I never used the webinterface.

Maybe I'll build a custom pcb for this in the near future. There is no intention of commercialization, so the result will be open source. At the moment I'm waiting for a door contact sensor (generic one) befor start testing to send commands. I don't think this repo has a send function either?

tesu84 commented 1 week ago

Helo, smarthome enthusiast here. :) I have Helo Roxx elite. I was also looking way to integrate it to my home assistant instanse. I have an rs485 communicator with esphome for my heating pump so i guess it might be quite similar to this. I've think about reverse engineer wifi connection also, since elite have cloud control over wifi too, but i think i'll try rs485 aproach first.

components: https://docs.m5stack.com/en/core/atom_lite https://docs.m5stack.com/en/atom/tail485

software i used for pump: https://esphome.io/ https://github.com/elupus/esphome-nibe https://www.home-assistant.io/integrations/nibe_heatpump/

this looks promising: https://github.com/loongyh/esphome-rs485

Screenshot 2024-09-03 204706

I've got few questions since i haven't tested it out in any way and you might figured them out allready. What is the pinout of rj10 connector? what supply voltage it provides? rs485 tail can use 9-24v dc to convert 5v to atom lite. if its in the range maybe i can just pluck it one of the panel connectors? or do i maybe have install it parallel to my current display?

i know some about coding, electronics, electric and can assist this project anyway i can.

f-io commented 1 week ago

part of the installation guide

manual
tesu84 commented 1 week ago

Thanks, mine had everything else but display connector explained. What about default baudrate for communication?

part of the installation guide manual

f-io commented 1 week ago

19200 8E1

johanneswilm commented 1 week ago

Ok, I think I get it - basically this project is a bit of a moving target due to things like the matter protocol, ESP32S3 and other new things coming along. Using only a simple RS485-to-USB connector, one basically needs to run a cable from the sauna oven to the device that runs Home Assistant and execute python code on the same device the Home Assistant is on in order to make it work, while using an ESP32-based device allows for the software to run more locally and a RS485-to-wifi connector allows removing the cable. ESP32S2 requires the code to be C++, while ESP32S3 allows running (Micro)python, right?

If we think of long-term maintainability and trying to make it as simple as possible for others to replicate the installation and to continue working on this, what would the best possible setup be? I guess one should get an RS485-to-USB connector anyway just for development purposes to test talking with the sauna heater directly from the laptop (?) but then after that, is it the ESP32S3 that one should use for the actual production installation?

@f-io Once we have it running and executes the commands through Home Assistant, is there a reason to keep the control device around (the one you gave a new wood case)? Could you not replace it with a screen outside the sauna that is connected to home assistant?

f-io commented 1 week ago

I think there is a missunderstanding, I don't know what route @MrCircuit is going to take or whether this project is even in active development. On my project I do not use python nor do I use home assistent.

ESP32 S2 and S3 both have wifi onboard, there is no need for additional hardware with the exception for the RS485 receiver / level shifter.

For the future I'm still undecided whether I will use a ESP32S3 or a ESP32C6. The C6 offer wifi6 and thread support, but there is still a lack of software support.

Related to the panel, mine is on the outside, I don't know a single reason to mount it inside, nor do I see a reason to delete it. There are also some leagle things to consider, remote start of a sauna is afaik only allowed with door and cover protection sensor.

johanneswilm commented 1 week ago

Mine is installed inside - by a technician who installed it according to the instructions by Tylö. 72001430_2

As far as I can tell, the only point of this 250 Euro panel is to make it so frustrating to use for the users, so they hopefully realize that they made a mistake and instead go back to the store to buy the 580 Euro panel that shows temperature in a way that is readable by common people without having to refer to the manual every time.

@f-io Oh ok, my bad. I thought you were collaborating on this in some way. If you don't, I may not quite have understood why you are both present is in this thread here. Is your project in a working state and documented somewhere? Once the entire message exchange between control panel and sauna heater has been decoded, I guess it should not be that difficult to make several versions of it for various devices.

f-io commented 1 week ago

@johanneswilm I don't wan't to highjack anything and yes my intention is to contribute to this project, at least we can share some hardware or discus what helps to lower the barrier to onboard more people.

Altough this is a different aproche for a different system. Back then I was looking for a working proof of concept for a bidi communication and logs for systems with RS485 hummidity/temp sensors or steam generators to make the decoder more versatile. I've seen this repo last year but it looked to me that there is no ongoing development, although I really appreciate @MrCircuit making his project available, whether it's finished or not.

I don't think the pure panel is all that bad, I'm fine with it, but I was not willing to pay >600€ for 20€ hardware with a close source app (support will be dropped one day) without the ability to integrate this into a more modern system. I also tried to get on touch with Tylö/helo, cause I'm sure they do have some documentation for commercial installations. But they never responded and my supplier just received a message that they don't share information about their protocol for security reasons, that reply was finally the trigger for me to start digging in.

tesu84 commented 1 week ago

I added tail485 one of my panel connectors and got some logs if it helps.

Esphome:

uart:
  rx_pin: GPIO32
  tx_pin: GPIO26
  baud_rate: 19200
  data_bits: 8
  parity: EVEN
  stop_bits: 1
  debug:
    direction: BOTH
    dummy_receiver: true
    after:
      delimiter: "\n"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes);

Some logs:

[21:12:12][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:12][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:13][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:13][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:13][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:14][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:14][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:14][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:15][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:15][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:16][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:16][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:17][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:17][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:17][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:18][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:18][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:18][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:19][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:19][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:20][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:20][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:20][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:22][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:24][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:24][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:24][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:24][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:28][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:28][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:28][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:28][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:29][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:30][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:31][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:31][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:31][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:31][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:31][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:32][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:32][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:33][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:34][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:34][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:34][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"
[21:12:34][D][uart_debug:158]: <<< "\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C"
[21:12:34][D][uart_debug:158]: <<< "\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C\x98@\x06m:\x9C\x98@\a\xFD\xE3\x9C"

I found mention that helo use a rs485 modbus to control heater, example with Ouman Eh-net kaavio