对Kambrook智能插座进行的逆向工程【翻译】

原文:http://wiki.beyondlogic.org/index.php?title=Reverse_engineering_the_RF_protocol_on_a_Kambrook_Power_Point_Controller

433MHz遥控“电源插座控制器”低廉的价格使它变得越来越流行。这些组件包含了一个独立的电源适配器和一个允许在大约30英尺远的地方使用无线电来控制插在电源适配器上那些设备的开关的遥控器。通过hacking和重放433MHz协议,这些廉价的适配器可以很容易的被一个微型控制器控制,比如Arduino。 相对于无线电频率,非物理连接不存在潜在致命的通道并且已经通过强制性的合格检查,他们没有安全威胁和发生火灾的可能。

rf3672.jpg - 大小: 78.16 KB - 尺寸: 440 x 440 - 点击打开新窗口浏览全图
为了证明这些适配器是有多廉价,你可以在Bunnings硬件商店以29.9刀的价格拿到一个三孔并且带遥控的电源适配器。如果29.9刀让银行倒闭了(意思是太贵,说白了就是穷),单纯的输出不带遥控的适配器只需要花8.98刀。当你从外部的微控制器操作这些设备的时候你并不需要遥控,那么遥控在这里就是多余的。

Kambrook & Bauhn公司出售的品牌,RF3399/RF3405/RF3672/RF3689/RF4471R智能插座似乎是Ningbo Comen 电子技术有限公司制造的。

遥控器包含了10个按钮和一个侧边开关。上面有一个控制插座开启的专用开关(左侧)和一个不同颜色的按钮(右侧)来关掉插座,这样就可以控制5个电器。为了以后扩展系统,侧边的开关可以选择4组电器,这样就可以同时控制20个电器。

每个插座在出厂的时候都已经被编号。使用之前,用户需要按住开启按钮5秒钟直到指示灯开始闪烁。然后用户可以按开或者关的按钮来分配插座上的这些按钮/分组,编码一直存储在不可擦除的存储器里面。

这里有几种方法来窃听遥控器跟插座之间的通讯协议。一种方法是用一个第三方的433.92MHz接收模块。这种方法有个优势就是你不需要把任何东西拆开(无聊),但是这种方法在解调器电平信号上会产生抖动妨碍获得时钟信息的准确性。

另外一种方法(刺激的多)就是把发射机拆开并且把探针放到解调器之前。当然,这个我等会再研究。建议检查操作设备的电路板(PCB), 无论是一个微型控制器或者是ASIC(封闭型集成电路)和一个单独的433.92MHz声波谐振器。解调器信号目前在IC的13针脚上并且在双面PCB板上通过有线跨接到J3针脚。这样就在信号之前制造了一个理想位置。在数字示波器上信息显示成这样:

rf3399_waveform.jpg - 大小: 31.05 KB - 尺寸: 320 x 234 - 点击打开新窗口浏览全图
信息由一系列的长短脉冲组成。短脉冲由一个280微秒宽的脉冲组成,紧跟着是一个300微秒的静默。长脉冲包含了一个675微秒宽的脉冲,紧跟着是一个300微秒的静默期。利用时间帧和一个5V逻辑层的快速检查将不会造成破坏(这句翻译的比较别扭),接下来我要用到逻辑分析仪。我的逻辑分析仪比DSO(数字示波器)有更大的内存,因此更加适合解码这些更长更复杂的消息。
rf3399_message.jpg - 大小: 37.22 KB - 尺寸: 586 x 185 - 点击打开新窗口浏览全图
上面的波形来自一条完整的消息– 分组 A,单元1通电-包含48比特和6字节。当按钮被按下去的时候,消息会重复发送5次,然后按钮必须弹起。

接着我继续解码一条简单的消息来试图理解那条正在解码的消息。结果可以在下面的表格中找到。

A 1 On 01010101 00000000 01101101 11111101 00000001 11111111
A 1 Off 01010101 00000000 01101101 11111101 00000010 11111111
A 2 On 01010101 00000000 01101101 11111101 00000011 11111111
A 2 Off 01010101 00000000 01101101 11111101 00000100 11111111
A 3 On 01010101 00000000 01101101 11111101 00000101 11111111
A 3 Off 01010101 00000000 01101101 11111101 00000110 11111111
A 4 On 01010101 00000000 01101101 11111101 00000111 11111111
A 4 Off 01010101 00000000 01101101 11111101 00001000 11111111
A 5 On 01010101 00000000 01101101 11111101 00001001 11111111
A 5 Off 01010101 00000000 01101101 11111101 00001010 11111111
B 1 On 01010101 00000000 01101101 11111101 00010001 11111111
C 1 On 01010101 00000000 01101101 11111101 00100001 11111111
D 1 On 01010101 00000000 01101101 11111101 00110001 11111111
随着所有蛋疼的事情搞完,现在是时候写一些代码来重放那条消息并且检测它到底会不会正常工作。
pic32_tws-bs-3.jpg - 大小: 94.11 KB - 尺寸: 507 x 491 - 点击打开新窗口浏览全图

我从Little Bird Electronics这个网站上花了4.95刀搞了一个很普通的 TWS-BS 433.92MHz RF ASK [pdf文档在这tws-bs-3_433.92mhz_ask_rf_transmitter_module_data_sheet.pdf]发射器,这玩意在Altronics这个网站上要7.95刀。

TWS-BS-3发射器支持1.5V到12V 的供电。在这个案例里面,我用了5V的供电。Data IN针脚连接到PIC32的RD0针脚。

经过一些实验和一些报错之后我发现会出现当两条消息之间的时间间隔小于7毫秒的时候会拒绝执行。

还出现了一种情况就是试验中的字节可以是任何东西-它并不会对要操作的单元有影响。

值得注意的是协议中可以省略校验和(checksum)。我发现在测试过程中,如果时钟有点儿慢的时候,我会错误的打开相邻单元的开关或者导致我正在控制的单元的状态出乎我的意料之外。

针对Microchip PIC32MX440F512H.的源码可以在这里下载[附件rf3399.zip]



如果您觉得文章有帮助到您,请到 https://www.92ez.com/index.php?action=show&id=23403 进行打赏/捐赠,谢谢!
如果您觉得文章有帮助到您,请 使劲戳这里 进行打赏/捐赠,谢谢!
本文链接:https://www.92ez.com/?action=show&id=77
提示:技术文章有一定的时效性,请先确认是否适用你当前的系统环境。

上一篇: 玩osmocom-bb需要哪些技能?【翻译】
下一篇: phpmyadmin 缺少 mcrypt 扩展。请检查 PHP 配置。

访客评论
目前还没有人评论,您发表点看法?
发表评论

评论内容 (必填):