智慧路灯后台管理系统设计文档

 

 

 

智慧路灯后台管理系统设计文档

 

Pris Lab/xxx Lab

Bupt

 


更新日志

2016/7/15 creaded by us

2016/8/12 add tcp server by us

 


目录

一、 总则 1

二、 功能概述 1

三、 关键问题 1

1. ip数字广播(一期实现技术) 1

2. 内网问题 2

四、 系统架构 2

五、 接口描述 3

1. 灯杆上报信息,可携带心跳信息 3

2. 灯杆心跳信息,不携带其他数据信息 5

3. 发送灯杆控制信息 5

3.1 喇叭发送控制 5

3.2灯开灯关控制 5

 



一、 总则

智慧路灯后台管理系统由于接收路灯上各种传感器数据,并向路灯设备发送相关指令和音视频数据,用于路灯设备的音视频播放。管理人员亦可通过该系统进行管理。

该文档由智慧路灯后台管理系统设计人员、开发人员和终端设计人员、开发人员使用和维护。

二、 功能概述

智慧路灯后台管理系统提供管理页面。管理人员登陆后可对所有路灯的各种资源进行管理,并进行相关业务处理。

界面上具体包括:

1. 用户管理

所有用户的管理

2. 资源管理

所有设备的管理,增删改查,设置分组,地理展示等等

3. 路灯控制

4. 广播控制

5. 广告视频及字幕控制(第一期暂时不做)

6. 摄像头控制(第一期暂时不做)

7. 感知数据浏览

8. 报警按钮控制

9. 关联控制

与终端的交互包括:

1. 向指定终端发送控制命令

2. 接收终端发来的数据

与其他服务器的交换包括:

1. 发送并控制音频流媒体

2. 接收并控制音频流媒体

3. 接收并控制视频流媒体

4. 发送并控制广告信息(流媒体,pps,字幕等)

三、 关键问题

1. ip数字广播(一期实现技术)

功能有2个:

1.用户通过浏览器调用mac讲话,浏览器录音,用户可回放,可上传服务器存储成文件。

2.用户通过浏览器调用mac讲话,实时传给路灯喇叭播放。

2.用户选择播放文件,路灯喇叭播放。

4.用户选择播放文件,用户浏览器可进行试听。

 

实现思路一:灯杆箱部分不需要做任何开发

使用方式:路灯设备上只要浏览器访问指定url后,就不用做任何事情了。该操作在灯杆上部署应用时就已完成。用户在智慧路灯后台管理系统上选择播放方式,路灯设备就开始播放,直到播放结束。

实现原理:路灯上开启浏览器访问指定urlajax定时访问web服务器,服务器上有播放需求,进行播放文件或实时语音。播放文件可通过js控制选择文件源。播放实时语音可使用webrtc

 

实现思路二:灯杆箱部分需要做语音播放的开发

 

2. 内网问题

实际部署时,所有的灯杆箱有可能属于内网,有内网访问外网上的web server。这个没有问题。但server要想直接发命令到灯杆箱则需要NAT穿越的问题,处理起来比较困难。因此,可利用server对灯杆箱周期性的心跳反馈来处理,灯杆箱收到反馈,则进行相应的操作,如开关灯,摄像头等操作。这样处理起来最简单。

以上方案是比较简单的处理。实际应用开发还是应直接开发一个TCP Server作为汇聚服务器。该服务器部署于外网,接收所有灯杆发来的心跳和各种数据,写入数据库。同时,接收Web server发来的指令,并将指令转发给相应的灯杆箱。这样就解决了NAT穿越问题。

四、 系统架构

 

 

 

 

 

 

 

    ……

 

 

 

灯杆箱发送数据有两种方式,既可以直接http restful,也可以发给作为tcp server的汇聚服务器。汇聚服务器通过内存字典/数据库服务器内存表来维护各个灯杆箱和socket id的对应关系。

系统发送指令到灯杆箱则通过汇聚服务器。用户通过web 界面向特定灯杆箱发送指令,web server获得相应灯杆箱在汇聚服务器上的socket id后作为socket client转发给汇聚服务器,汇聚服务器直接选择相应的socket,将指令转发给灯杆箱。

灯杆箱部分需要开发一个对应的socket client。用于解析指令做相应处理。

汇聚服务器设计:

 

任务检测守护进程实时监测用户的任务,如何时开关灯,随时播放语音等控制

鉴权功能用于检测链接服务器的终端是否是伪造等。灯杆箱初次链接时,无socket id,若数据表不存在该灯杆箱,说明是新添设备,status=-1,插入设备信息。之后再发来数据,返回都是错误信息为not confirm。用户通过界面确认以后,status=0。之后再发来数据就可以接受处理了。Socket id为有效链接

若数据表存在该灯杆箱,说明是重新连接,重新记录有效的socket id。以后可加入密码等方式。

TCP Server用于接收所有灯杆箱的tcp 链接。并发送指令到指定灯杆箱。

 

五、 接口描述

1. 灯杆上报信息,可携带心跳信息

灯杆上报方式既可以采用http restful接口,也可以直接通过socket向汇聚服务器发送。

http restful协议访问:http://xxxx/xxx/poleupload.php?r=json-string

向汇聚服务器发送数据时,只需要通过tcp发送json-string即可。

 

举例1,上报灯杆箱上的所有灯的静态信息:

http://xxxx/xxx/poleupload.php?r={“ip”:”x.x.x.x”,“name”:”xxxx”,“light”:[{“name”:”xxx1” ,“info”:”xxxx”},{“name”:”xxx1” ,“info”:”xxxx”}]}

 

举例2,上报灯杆箱上的nameabccde两个的灯的亮度:

http://xxxx/xxx/poleupload.php?r={“ip”:”x.x.x.x”,“name”:”xxxx”,“light”:[{“name”:”abc” ,“brightness”:”20”,”brighttime”:”20160810171000”},{“name”:”cde” ,“brightness”:”90”,”brighttime”:”20160810171001”}]}

 

举例3,上报灯杆箱上的传感器名称为abccde的两个传感器采集的数据

http://xxxx/xxx/poleupload.php?r={“ip”:”x.x.x.x”,“name”:”xxxx”,“sensor”:[{“name”:”abc” ,“value”:”20”,”vtime”:”20160810171000”},{“name”:”cde” ,“value”:”90”,”vtime”:”20160810171001”}]}

 

完整的json-string如下。

{

    “ip”:”x.x.x.x”, #灯杆箱的ip,必须字段

“name”:”xxxx”, #灯杆箱的唯一名称,必须字段

“heartbeat”:”on” #心跳信息,非必需字段,http restful方式该字段不处理

“pole”{ #灯杆箱信息,非必需字段,有该信息则添加或更新数据库的t_lightpole

”city”:””,

….,

”gps”:”x:123.23,y:123.23”

}

“light”:[#灯的信息,是数组, 非必需字段,有该信息则添加或更新数据库的t_light等表

{

“name”:”xxx” ,//灯的唯一名称或序号,必需字段

“info”:”xxxx”,

“brightness”:”20”,

“brighttime”:”20101212121212”,

“power”:”2.4”, #即时电量

“ptime”,”20101212121212”  #与前一个字段成对出现

},

……,

{

….

}

]

“sensor”:[ #传感器信息,数组, 非必需字段,有该信息则添加或更新数据库的相应表

{

“name”:”xxx” ,//传感器的唯一名称或序号,必须字段

“type”:”xxxx”,

“remark”:”xxxx”,

“value”:”20”,

“vtime”:”20101212121212”  #与前一个字段成对出现

},

……,

{

….

}

 

]

}

实际发送时,只发送需要发送的字段即可,如上例所示。

返回结果:

{

“status”:”ok”/”error”,

“info”:”xxxx”

}

2. 灯杆心跳信息,不携带其他数据信息

灯杆心跳直接通过socket向汇聚服务器发送,只需要通过tcp发送json-string即可。

{

    “ip”:”x.x.x.x”, #灯杆箱的ip,必须字段

“name”:”xxxx”, #灯杆箱的唯一名称,必须字段

“heartbeat”:”on” #心跳信息,必需字段

}

返回:

{

“status”:”ok”/”error”,

“info”:”xxxx”

}

 

3. 发送灯杆控制信息

3.1 喇叭发送控制

(1) 喇叭发声可按方案一。不需要终端部分的开发,全部由管理系统完成。

(2) 比较好的方案:

Server守护进程检测到有语音发送,将语音数据通过汇聚服务器转发给灯杆箱。

3.2灯开灯关控制

1)最简单的方法(不建议用)

每隔1~2s访问一下服务器指定url,根据返回的结果进行控制。url如下:

http restful协议访问:http://xxxx/xxx/lightget.php?r={ip:x.x.x.x, name:xxxx}

ip为本灯杆箱的ipname为本灯杆箱的name

返回结果如下:

{

    “ip”:”x.x.x.x”, #灯杆箱的ip,必须字段

“name”:”xxxx”, #灯杆箱的唯一名称,必须字段

“light”:[

{

“name”:”xxx” ,//灯的唯一名称或序号,必需字段

“status”:”on”/”off”, //灯亮还是灭,必需字段

“begintime”:”20101212121212”, #状态开始时的时间,非必需字段

},

……,

{

….

}

]

}

2)通用方法(建议按此开发)

汇聚服务器接收到web server发来的控制命令,直接通过维持的socket发送到灯杆箱。发送内容同上面的返回结果。

你可能感兴趣的:(项目经历)