I’m not quite sure that I understand your question (maybe because I don’t use HA), but are you saying that you succeeded in writing a value to 0x42F1? Based on the discussion on the Contribution: Samsung ASHP NASA link <-> MQTT bridge (Home Assistant) thread, I had been under the impression that the only Message Addresses we could write to were those associated with FSVs (like the 0x40A7 you mention for #5051). Personally I use SNET-Pro2 v1.14.3 to reset my FSVs (on my laptop), as the packet syntax for outgoing messages is a bit daunting (all those 0x55555555555s…)
Yes I’ve succeeded in writing to fsv 0x42f1. Altgough it’s format is highly constructed.
Abour 55…5 I’m not bothered by it this only preamble data for bus decoders sync. To eliminate a few collsion they use it and relt on a csma/cd (iirc my networks courses).
Also for fun I’ve made an ndoor controller python emulator to mess around with the remote controller display. I’ve already uncovered the fsv descrptor fetch and decode (to know unit/max/min/default values of fsv on the remote, useless but refreshing)
Abour FR and DR i’ve already seen the effect on dhw production, but not yet on space heating (summer sure lasts this year).
This sounds like it does what SNET-Pro2 does (have you used SNET at all?)
Again, can you give us details? I’m also fooling around with a Python-based proxy to intercept data traffic between SNET and the MIM. I can understand most of the traffic leaving the MIM, but that leaving SNET has a really weird syntax (typical packet 55 AA 55 00 25 80 1B C0, though sometimes something like 32 00 1F 80 FF 00 B0 FF 10 C0 11 59 01 06 1A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 38 CF 34, preceded by about 100 0x55s). This latter is similar to the FSV reset code that SNET writes, though with the 0x061A and its 15 data bytes replaced by the target address such as 0x40A7 with just a single data byte following.
Also, 061A, once decoded means the struct of index 1A and of format 0 (generally a single byte, but structure, hey!)
I can poke around my system just to see. Also, in my proxy, I added a field from home assistant to play random hex encoded request, just decorated with CRC and start and stop bytes before sending. proven very useful to uncover all those mysteries
the heat pump probably wasn’t running at the time I grabbed the above log, so the data may not be very interesting.
the packet data aren’t always cleanly separated. For example, look at the packet starting at [2025-09-13 13:55:41.385] - you can see that it’s spread over 3 log entries.
some packets seem to mistime/misinterpret the EOL character and get an extra byte added. See [2025-09-13 13:55:41.636] where an otherwise valid packet has a 0xFD nailed to the end.
I assume that there must be faults in my proxy coding somewhere…
I was under the impression that the data length for each message could be inferred from the register address. For example address 0x40nn or 0x41nn would have a single byte of data, 0x42nn would be 2 bytes, 0x44nn would be 4 bytes, and 0x46nn would be “the rest of the message (prior to the CRC bytes)”. Similarly for 0x0nnn and 0x8nnn.
Have I got this completely wrong? (I’ve built this syntax into my Python code so any error needs to be corrected asap…)
To confirm my (layman’s) understanding, 0x4612 is used to define the operating limits of any FSV (i.e. min/default/max, as listed in the User Manual), with the measurement unit coded as a hex byte (1 = degC, 3 = min, 0 = no unit etc). (By contrast, the current FSV value is stored in other registers, such as 0x424A for FSV #1011.)
I see in the NASA codes list Samsung NASA Codes.docx (77.1 KB) that 1) 0x4612 bears the Description “Source_Address_Class: WiFiKit” whereas in the Packet Structure table, “WiFiKit” appears (packet byte 03) as 0x62. Have you resolved this apparent inconsistency?
I presume that the FSV operating limits (as defined by 0x4612) are fixed for any given heat pump model, and that any FSV change request (either from the Remote Controller, or from SNET via F1/F2) will only be honoured if it complies with the operating limits.
I believe that we have already determined the syntax of an SNET FSV change request, in Contribution: Samsung ASHP NASA link <-> MQTT bridge (Home Assistant) , post #59 onwards. Presumably an FSV change request from the Remote Controller would be similar (I haven’t tried my proxy on F3-F4 yet).
x6xx means “structure” as per the java code provided by samsung ehs kit.
in this case the number of entries in the packet must be exactly 1. and though the total length of the data is determined by the packet length (after the starting 0x32 byte). At least I think this is correct.
I also observed invalid data on the bus sometimes. My packetization engine is coded with a state machine that waits for the 0x32 byte, then decode the 2 following big endian bytes to get the total lenth, then append every following byte. and expect a 0x34 as the last byte.
before the last byte are 2 bytes of crc, which is recomputed and verified. If the 32, 34 and crc are correct and at the expected place. then I continue with decoding the packet, else I discard it. This way you can strip off every 0xFD (preamble/postamble bytes) and 0x55 (weird but probably related to perturbation on the line maybe).
My understanding is that its enumeration only. It does not bear the actual values, but the remote controller “asks” for the definition of the FSV to change the way it’s displayed and know the limits of the FSV edition. I confirmed that by spoofing values returned by 4612 and the remote controller changed its display.
Well, 4612 is not a regular field, it’s a structure, and according to my this is like an “extension” of the poorly designed 2 bytes based NASA protocol. In my mind, x6xx are a collection of additional functions. 4612 is meant to describe the FSV encoding (min/max/default/type/unit)
@Topaz one question, are you able to set values like 55% or 73% ? Seems when I try to set e.g. 311 in decimal which corresponds to 55% I can’t to it and always lower value is set in this case 50% - 306 decimal. I don’t know why but I don’t like it. So I can set either 22Hz or 27Hz but I can’t set e.g. 25Hz. So between 50% and 60% it makes 5Hz difference in compressor speed what is maybe 1kW of heat more. For some better regulation I would like to limit it more finer. Any idea ?
I have different experience. I thought as well but the I’ve found that 42F1 always reset after one hour to 0. This gave me an idea that maybe if this register is written then #5051 is ignored for the time being until 42F1 > 0. Indeed. I’ve disabled @5051 back and wrote 42F1 and it uses FRC as requested.
Note: Once 42F1 is reset to 0 FRC still is enabled at 50% while #5051 is active.
This is actually a good behavior because I don’t need rely to home assistant working. In case there is some issue and FRC can’t be set automatically every 1h then it resets to 0 and the pump works like FRC is not enabled.
Yeah this is also my finding. I don’t know if it because frequencies at those intermediate steps are not stable or it’s just another Samsung controlling stupidity. Why for the god sake I can’t set 55% ???
So I have writen an automation to help with cylcing when starting, I have found when starting the heat pump, it would ramp up to full power very quickly to get the LWT to target. Sometimes this would cause a few start stops before we got to a steady state. I am unsure why, maybe the fact the PWM pump won’t even attempt to ramp down for 20 minutes. Insights welcomed.
I have built automation around the FR control to limit the compressor to an estimated 1.2x the heat loss of the house.
When we are doing DHW we limit to 50% (unless the water is really low and someone is trying to have a shower) and when we are doing CH we limit to what the heat loss is.
I am hoping this will help reduce the defrosts too