富士通 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 上提供的答案。非常感谢他。我永远不会解决这个问题。我的唯一不同之处在于我的遥控器有更少的选项,因此要反转和求和的字节更少,否则它的工作方式与乔治在他的示例代码中的完全一样。
我正在尝试对家庭自动化项目的 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 上提供的答案。非常感谢他。我永远不会解决这个问题。我的唯一不同之处在于我的遥控器有更少的选项,因此要反转和求和的字节更少,否则它的工作方式与乔治在他的示例代码中的完全一样。