Z-Wave技术与zipgateway源码剖析

1 Z-Wave简介

1.1 什么是Z-Wave技术

Z-Wave是一种新兴的基于射频的、低成本、低功耗、高可靠、适于网络的短距离无线通信技术。工作频带为908.42MHz(美国)~868.42MHz(欧洲),采用FSK(BFSK/GFSK)调制方式,早期的数据传输速率为9.6 kbps(现在40kbps),信号的有效覆盖范围在室内是30m,室外可超过100m,适合于窄带宽应用场合。随着通信距离的增大,设备的复杂度、功耗以及系统成本都在增加,相对于现有的各种无线通信技术,Z-Wave技术将是最低功耗和最低成本的技术,有力地推动着低速率无线个人区域网。

1.2 Z-Wave技术特征

(1) 低成本

(2) 低功耗

(3) 高可靠性

(4) 全网覆盖

(5) 通用性

(6) …..

1.3 Z-Wave技术应用

Z-Wave技术目前主要专注于家庭自动化领域,力求为用户提供一个更加舒适、方便和更具人性化的智能家居环境。Z-Wave网络的安装简单易行,各种符合标准的家庭设备都能方便地“安装”到家庭网络中,也能方便地从家庭网络“ 卸载”。

Z-Wave在其家庭网络中定义了三种类型的设备:控制器(controller)、路由从设备(routing slave)和从设备(slave)。当需要安装新的节点设备时,首先激活网络中的控制器和其他所有节点,激活可以同步也可以不同步。控制器被第一次激活后,通过广播查询新节点的请求,如果收到新节点的回应,控制器会向这个节点分配一个ID,通过这个ID来规定自己的属主关系。新节点需要向控制器报告它周围的邻居表(即在射频范围之内的所有节点),使得控制器有一个全面的网络拓扑信息,从而建立了一个无缝的网状结构通信网络。

Z-Wave在家庭中的应用主要包括照明控制、读取仪表(水、电、气)、家用电器功能控制、身份识别、通路(出入口)管制、能量管理系统、预警火灾等。

另外,Z-Wave还可以和传感器网络结合在一起使用,通过在家电和家具中部署基于Z-Wave的传感器节点,并使它们与Internet连接,用户就可以采用远程监控系统实现对家电的远程遥控。例如可以在回家之前半小时打开空调,这样回家的时候就可以直接享受适合的室温,也可以遥控电饭锅、微波炉、电冰箱、电话机、电视机、录像机、电脑等家电,按照自己的意愿完成相应的煮饭、烧菜、查收电话留言、选择录制电视和电台节目以及下载网上资料到电脑中等操作,也可以通过图像传感设备随时监控家庭安全情况。

1.4 Z-wave协议栈

相对于其他无线通信标准而言,Z-Wave协议栈显得更为紧凑和简单。Z-Wave协议栈包括四层:媒介访问控制(MAC)层、传输层、路由层和应用层,Z-Wave协议栈模型如图1所示,其各层的主要功能如下:

1.MAC层主要用于控制射频媒介,数据流采用曼彻斯特编码。

2. 传输层主要用于提供节点之间可靠的、透明的数据传输,主要功能包括重新传输、帧校验和帧确认等。

3. 路由层的主要功能包括:控制节点间数据帧的路由、确保数据帧在不同节点间能够多次重复传输、扫描网络拓扑和维持路由表(routing table)等。

4.应用层负责Z-Wave网络中的译码和指令的执行,主要功能包括:曼彻斯特译码、指令识别、分配HomeID和NodeID、实现网络中控制器的复制(replication)以及对传送和接收帧的有效载荷(pyload)进行控制。


图1 Z-Wave协议栈模型


 

2 Z/IP Gateway

2.1 ZIP Gateway定义

在Z-Wave网络中,Z/IP Gateway是一个允许网络客户端连接并且控制节点的应用程序。

 

Zipgateway需要以太网连接,它可以访问原始以太网帧。在Linux平台上,原始以太网的连接是通过使用linux TAP/TUN驱动程序来实现的,其网络结构图如下所示:


图2 z-wave 网络结构图

 

2.2 Gateway的主要功能

l  在端口41230/4123接收封装了Z/IP command的数据包

l  Z/IP是封装了Z-wave command的UDP/IP包

l  提取z-wave的command指令

l  再将提取的z-wave指令封装在serial帧中,通过serial API发给对应的chip来完成与期望节点的通信。

 

图3 z-wave 网络模拟

 

地址与路由


如下图,phone controller想控制编号为2的灯泡,那么他是怎样完成通信的呢?

 

通过寻址和路由完成,大致的通信过程如下:


图4 z-wave 寻址通信模型

 

2.3 Gateway

 

图5 zipgateway 时序图

 

2.3.1 配置文件读取与解析

首先,需要解析zipgateway的配置文件zipgateway.cfg,这个文件定义了zipgateway的很多基本设置,例如使用的串口端口、IP地址、认证证书文件以及PSK等等。

1.     static char* cfgfile = INSTALL_SYSCONFDIR "/" PACKAGE_TARNAME".cfg"

然后通过文件描述符去读取里面的各个参数已经配置的值,并将读取出的值放在一个全局的router_config结构体中。

 

图6 配置文件

2.3.2 虚拟网卡tap0

TUN/TAP驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。

 

Zipgateway中的驱动程序是在tapdev-drv.c中完成的,当config文件解析完成后,便会执行驱动程序的初始化:

process_start(&tapdev_process); //启动进程

fd = open(DEVTAP,O_RDWR) ;  //打开设备节点

ioctl(fd,TUNSETIFF,(void*)&ifr);  //打开虚拟网卡

ioctl(fd,SIOCGIFHWADDR,&ifr);   //获取网卡物理地址

设备驱动tap0启动后,通过select调用去轮询读端,一旦有数据产生,意思是从我们的pc controller/pyzip发来数据了,将此数据读取出来,这个数据存放在uip_buf中的,接下来就可以对接收到的数据进行处理了,拿到buf直接抛进contiki的uIP协议栈中了。

 

图7 tap0 & 桥接

其数据处理方式简化模式如下:

{
    uip_len = tapdev_poll(); //tapdev6.c select、read调用返回

     if(uip_len> 0) { // 有数据,抛进协议栈里面处理

         uip_input();

         if(uip_len > 0) {

               // uip_input返回后,如果buf中有数据,说明要返回各个controller,比如pc,pyzip脚本

               tcpip_ipv6_output();

     }
 }

Tap0驱动程序起来后,刚开始时没有数据流过来的,还有很多的初始化工作没有准备好,所以紧接着所做的最最重要的一件事情,就是启动我们zipgateway的主要进程了,它就是zip process。

2.3.3 ZIP process

ZIP process是在ZIP_Router.c里面定义的一个auto start process。

进入Zip process的主代码段,通过判断传入的event事件类型,来进行相应的动作。我们初次传入的是ev=PROCESS_EVENT_INIT,即初始化阶段,如下理出了zip process的初始化流程。


图8 zip process:reset时序

 

2.3.4 DTLS server

DTLS server给客户端提供安全链接的服务的,即UDP传输提供端到端的安全通道,目前的版本仅支Pre-Shared-Key(PSK)方式。

OpenSSL API及基本流介绍

SSL通信模型采用标准的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值