富士通 IR 远程校验和计算

Fujitsu IR Remote Checksum Calculation

我正在尝试对家庭自动化项目的 Fujitsu AC 远程控制协议进行逆向工程。我已经确定哪些字节对应于哪些控制信息,但是最后有一个校验和。

我相信校验和是使用其他三个字节(温度、模式和风扇速度)计算的。

我使用电子表格尝试逆向工程执行了哪些操作来获取校验和,发现对于温度“00001010”和任何 mode/fan 速度组合,以下算法适用;

校验和 = 392 -(温度 + 模式 + 风扇速度)

Example
392 - (10 + 64 + 128) = 190
392 - (10 + 192 + 128) = 62
392 - (10 + 32 + 128) = 222

然而,没有其他温度(我测试过)以这种方式工作。我目前的理论是,首先对温度执行一些其他操作,并且无论此操作是什么,都会导致温度“00001010”的相同值,但不会导致其他温度。

原始数据:

Temperature, Mode, Fan Speed, Checksum

00000110, 10000000, 10000000, 01110110
00001010, 10000000, 10000000, 01111110
00000010, 10000000, 10000000, 01110001

完整电子表格位于:This link

我无法确定对温度执行了哪些操作,或者事实上我什至对算法的假设是否正确。

我想知道是否有任何人对此类问题有更多经验,可以阐明这一点?

额外:

温度值是温度的整数比如21度(00010101)

1. Reversed to get 10101000
2. Only the first four bits taken - 1010
3. Then expanded to get a value of 00001010

所以上面原始数据中的00001010是21度的温度

Original question has been edited as I was originally approaching this incorrectly and assuming my hypothesis was correct

在 Google 搜索结果中进行更多筛选后,我找到了以下解决方案。

感谢乔治杜瓦 Github

1. Reverse (flip) bytes 8 - 13 (I - N in spreadsheet)
2. Sum those bytes
3. (208 - sum) % 256
4. Reverse (flip) bytes of result

例如

Data: 00000110, 10000000, 10000000, 00000000, 00000000, 00000000

1. Reverse:
   01100000, 00000001, 00000001, 00000000, 00000000, 00000000
         96,        1,        1,        0,        0,        0
2. Sum:
   96 + 1 + 1 + 0 + 0 + 0 = 98

3. Calculate:
   (208 - 98) % 256 = 110 (dec) or 01101110 (bin)

4. Reverse:
   01110110

@george-dewar 在 Github 上提供的答案。非常感谢他。我永远不会解决这个问题。我的唯一不同之处在于我的遥控器有更少的选项,因此要反转和求和的字节更少,否则它的工作方式与乔治在他的示例代码中的完全一样。