我有个问题。我有一个项目,一个家庭自动化系统,在这个系统中,我必须通过接口发送一些命令到一些传感器,温度传感器,电源传感器,接触传感器等。
我已经在中完成了向ZigBee传感器发送开/关/切换命令的部分。我遵循了this manual,这个命令在196页有描述。
在我的项目中,我在python中使用了这一部分来设置要发送到传感器的正确数据包:
if command not in ['ON', 'OFF', 'TOGGLE']:
raise tornado.web.HTTPError(404, "Unknown command: " + str(command))
op_group = "70"
op_code = "50"
# *9999999999999999;70;50;;100260EB008060008000000D8#
# 70 50 100231AC00000000000008060008000101A9
packet_meta = "*%s;%s;%s;%s;02%s%s600080000%s#" # D8 i s the CRC who compute that?
pkt_len = hextransform(16, 2)
# Hexify the network ID
netid = hextransform(int(nid), 16)
# Hexify the sensor ID
# TODO: - split sensor_id in ZTC sensor_id and endpoint!
# - ZTC sens ID is 2 bytes
# - ZTC endpoint is 1 byte
# sens_id = hextransform(int(sid) >> 8, 4)
# end_point = hextransform(int(sid) & 0x0000FF, 2)
# print("\nsens_id: '" + sens_id + "'\n")
# print("\nendpoint: '" + end_point + "'\n")
# TODO: - split sensor_id in ZTC sensor_id and clusterid!
# - ZTC sens ID is 2 bytes
# - ZTC clusterid is 2 bytes
sens_id = hextransform(int(sid) >> 16, 4)#elisa
sens_id_little = invert2bytes(sens_id,0)
cluster_id = hextransform(int(sid) & 0x00FFFF, 4)#elisa
end_point = "08" #elisa
if command == 'ON':
cmd_data = "01"
elif command == 'OFF':
cmd_data = "00"
elif command == 'TOGGLE':
cmd_data = "02"
packet = packet_meta % (netid, op_group, op_code, pkt_len, sens_id, end_point, cmd_data)
packet = packet.upper()
print("\t\t " + packet + "\n")
################ ELISA #########################################
cmd_meta = "02%s000000000000080600080000%s" #elisa
mycommand = cmd_meta % (sens_id_little, cmd_data) #elisa
len_mycommand = len(mycommand)/2
op_group_hex=0x70
op_code_hex=0x50
mynet_type ="ztc"
cmdjson = packet2json(op_group_hex,op_code_hex, mycommand)
#
#
#TODO : -write command into db
ts = datetime.datetime.now().isoformat()
self.lock_tables("write", ['confcommands'])
self.db.execute("INSERT INTO confcommands (network_id, ntype, timestamp, command) \
VALUES (%s,%s,%s,%s)", nid, mynet_type, ts, cmdjson)
self.unlock_tables();现在,根据手册,我将添加重新启动命令,以重新启动传感器。然后添加restore startup configuration命令。
所以我不知道这些命令在手册的什么地方。其中有几个。然后,我看不到重启或恢复启动配置命令的值。如果开/关/切换有三个值(00、01、02),在这种情况下,手册不会说明要分配给cmd_data变量的值是什么,以创建要发送到传感器的正确数据包。
我希望你能帮助我,因为我不知道在哪里搜索这个。非常感谢。
发布于 2012-10-22 22:06:33
我不了解ZigBee技术,但根据您的文档,您可以尝试发送名为APSME-RESET.Request和APSME-REST.Confirm的平台重置APS消息或名为NLME-Reset.Request和NLME-Reset.Confirm的网络管理器重置消息
发布于 2012-10-24 00:48:34
看起来这段代码使用的是ZigBee OnOff集群(0x0006),因为这些命令与您的代码正在执行的操作相匹配。因为ZigBee是小端,所以代码中的0600序列之一是集群ID。
基本群集(0x0000)支持单个命令0x00,该命令可将设备重置为出厂默认值。使用此命令时要小心,因为它可能会导致设备离开网络并返回到其默认网络设置。
我不知道有什么ZCL (ZigBee集群库)集群和命令可以用来重启/重启设备。ZigBee传感器设计为无需重新启动即可运行数年。
要了解有关ZCL集群和命令的更多信息,可以从ZigBee Alliance下载ZigBee Cluster Library。
为什么您的设备需要重新启动传感器?
https://stackoverflow.com/questions/13012829
复制相似问题