# 网关前后端交互协议 ## 调试地址 http://gzq.myqnapcloud.com:8090 ## 区域(Area) #### 获取区域列表 GET /api/area #### 新增area项(ID自动生成) POST /api/area #### 根据ID查询area项 GET /api/area/{id} #### 根据ID修改area项 PUT /api/area/{id} #### 根据ID删除area项 DELETE /api/area/{id} ### area item json数据格式 ~~~json { "id": 1,//区域ID "name": "会议室",//区域名字 } ~~~ ### area list json数据格式 ~~~json { "type": "areaListResult", "size": 2, "items": [ { "id": 1, "name": "会议室", }, { "id": 3, "name": "茶水间", }, ] } ~~~ ## 设备(Device) ### 设备http接口 #### 获取设备列表 GET /api/device #### 新增设备 POST /api/device #### 删除设备 DELETE /api/device/{id} #### 修改设备信息 PUT /api/device/{id} #### 获取设备信息 GET /api/device/{id} ### 设备项json数据格式 #### configDesc设备配置描述(不同设备的属性,是以下属性的子集) ~~~ json [{ "name": "device_addr", //设备地址 "value": 12, "type": "INTEGER" }, { "name": "device_port", //设备端口 "value": 3, "type": "INTEGER" }, { "name": "control_addr", //控制地址 "value": 3, "type": "INTEGER" }, { "name": "control_type", //控制类型 "value": 3, "type": "INTEGER" }, { "name": "temperature_addr", //温湿度传感器地址 "value": 3, "type": "INTEGER" }, { "name": "temperature_type", //温湿度传感器类型 "value": "wired", "type": "STRING" }, { "name": "broadcast", //是否跨网关控制 "value": true, "type": "BOOL" }, { "name": "modlist", //模式列表 "value": "low,normal,high,auto", "type": "STRING" }, { "name": "speedlist", //风速列表 "value":"fan,cool,heat", "type": "STRING" }{ "name": "temp", //温度 "value":"0", "type": "INTEGER" }] ~~~ #### 灯设备configDesc数据格式 ~~~json [ { "name": "device_addr", "value": 12, "type": "INTEGER" }, { "name": "device_port", "value": 3, "type": "INTEGER" }, { "name": "broadcast", "value": true, "type": "BOOL" } ] ~~~ #### 干接点设备configDesc数据格式 ~~~json [ { "name": "device_addr", "value": 12 }, { "name": "device_port", "value": 3 }, { "name": "control_type", "value": "click" }, { "name": "associated_scene", "value": [ 1, 2, 3 ] } ] ~~~ ### 设备列表数据格式 ~~~json { "type": "deviceListResult", "size": 2, "items": [ { "id": 1, "name": "0001", "displayName": "吸顶灯", "type": "light", "subtype": "light_bar", "attachType": "canbus", "areaId": 1, "gatewayId": 1, "configDesc": "" }, { "id": 3, "name": "003", "displayName": "吸顶灯", "type": "curtain", "subtype": "light_bar", "attachType": "canbus", "areaId": 2, "gatewayId": 1, "configDesc": "" } ] } ~~~ ## 面板(Panel) ### 面板类型: canbus(can总线面板) network(普通网络面板) networkExt(附带设备的网络面板) ### 面板http接口 #### 获取面板列表 GET /api/panel #### 新增面板 POST /api/panel #### 删除设备 DELETE /api/panel/{id} #### 修改面板信息 PUT /api/panel/{id} #### 获取面板信息 GET /api/panel/{id} #### 面板列表数据格式 ~~~json { "type": "panelListResult", "size": 2, "items": [ { "id": 1, "name": "2001", "displayName": "面板1", "type": "panel", "subtype": "canbus", "areaId": 1, "configDesc": "", }, { "id": 3, "name": "2003", "displayName": "面板2", "type": "panel", "subtype": "canbus", "areaId": 2, "configDesc": "", } ] } ~~~ 面板configDesc ~~~json { "canId":1, "broadcast":false, "display_device":[ { "name":"0001", "lock":false } ], "display_scene":[ { "name":"1003", "lock":false } ], "attached_device":[], "background":"", "lock_weekday":[ 1, 2, 3, 4, 5 ], "lock_start_time":{ "hour":"00", "minute":"00", "second":"00" }, "lock_end_time":{ "hour":"23", "minute":"59", "second":"59" } } ~~~ ## 场景(Scene) ### scene http接口 #### 获取scene列表 GET /api/scene #### 新增scene项(ID自动生成) POST /api/scene #### 根据ID查询scene项 GET /api/scene/{id} #### 根据ID修改scene项 PUT /api/scene/{id} #### 根据ID删除scene项 DELETE /api/scene/{id} ### actionDesc场景动作描述 ~~~json [{ "id": 1, "channels": [{ "value": "on", "name": "action", "type": "STRING" }], "subtype": "default", "type": "curtain", }, { "subtype": "default", "type": "curtain", "id": 2, "channels": [{ "value": "on", "type": "STRING", "name": "action" }] }, { "id": 3, "channels": [{ "name": "action", "value": "on", "type": "STRING" }], "subtype": "default", "type": "curtain" }, { "id": 4, "channels": [{ "name": "action", "type": "STRING", "value": "on" }], "subtype": "default", "type": "light", }] ~~~ ### scene item json数据格式 ~~~json { "id": 4, "name": "1004", "displayName": "test_scene_4", "areaId": 1, "type": "sleep", "subtype": "", "actionDesc": "...", "enable": true } ~~~ ### scene list json数据格式 ~~~json { "type": "sceneListResult", "size": 2, "items": [ { "id": 1, "name": "test_scene_1", "type": "exit", //"description": "close all device when exit", "actionDesc": "" }, { "id": 3, "name": "test_scene_3", "type": "work", //"description": "open all device when at work", "actionDesc": "" } ] } ~~~ ## 定时触发(Schedule) #### 定时事件触发: 时间:星期+小时+分钟+秒,可设置多个 举例: 周一周二周三周四周五,08:30:00,自动开启工作模式 周一周二周三周四周五,13:00:00,自动开启休息模式 周一周二周三周四周五,14:00:00,自动开启工作模式 ### schedule http接口 #### 获取时间表(schedule)列表 GET /api/schedule #### 修改时间表 PUT /api/schedule #### 新增时间表项(ID自动生成) POST /api/schedule/ #### 根据ID删除时间表项 DELETE /api/schedule/{id} #### 根据ID修改时间表项 PUT /api/schedule/{id} #### 根据ID查询时间表项 GET /api/schedule/{id} ### 时间表项(schedule)数据格式 ~~~ json { "id": 1, "name": "上班定时开启工作模式", "time": "{\"hour\":12,\"minute\":12,\"second\":12,\"weekday\":[1,3,5]}", "sceneId": 1, "enable": true } ~~~ ### 时间触发表(schedule)列表数据格式 ~~~json { "enable": true, "items": [ { "id": 1, "name": "上班开启工作模式", "time": "{\"hour\":8,\"minute\":30,\"second\":0,\"weekday\":[1,2,3,4,5]}", "sceneId": 1, "enable": true }, { "id": 2, "name": "下班开启离开模式", "time": "{\"hour\":20,\"minute\":0,\"second\":0,\"weekday\":[1,2,3,4,5]}", "sceneId": 2, "enable": true } ] } ~~~ ## 事件触发(Trigger) 时间:开始时间(星期+小时+分钟+秒)+结束时间(星期+小时+分钟+秒),可设置多个 设备事件:门禁、各种传感器等 举例: 开始时间(周一周二周三周四周五,08:00:00)结束时间(周一周二周三周四周五,09:30:00),该时间段检测到门禁刷卡数据,自动开启工作模式 开始时间(周一周二周三周四周五,08:00:00)结束时间(周一周二周三周四周五,21:30:00),该时间段检测到人体感应,自动开启茶水间灯光 设备事件细分,可以叠加多个条件,与或非 ### http接口 #### 获取触发列表 GET /api/trigger #### 修改触发 PUT /api/trigger #### 新增触发表项(ID自动生成) POST /api/trigger/ #### 根据ID删除触发表项 DELETE /api/trigger/{id} #### 根据ID修改触发表项 PUT /api/trigger/{id} #### 根据ID查询触发表项 GET /api/trigger/{id} ### 触发表项数据格式 ~~~json { "id": 1, "name": "test", "enableTime": { "startTime": { "hour": 8, "minute": 30, "second": 0 }, "endTime": { "hour": 21, "minute": 0, "second": 0 }, "weekday": [ 1, 3, 5 ] }, "condition": { "devId": 15, "devType": "humiture", "logicType": "and", "data": [ { "name": "temp", "compare": "equal", "value": 20 }, { "name": "humidity", "compare": "greater", "value": 40 } ] }, "sceneId": 1, "enable": true } ~~~ ### 触发表列表数据格式 ~~~json { "items": [ { "id": 1, "name": "卫生间有人自动开灯", "enableTime": { }, "condition": { }, "sceneId": 1, "enable": true }, { "id": 2, "name": "卫生间无人自动关灯", "enableTime": { }, "condition": { }, "sceneId": 2, "enable": true } ] } ~~~ ## 文件管理(File Manager) ### http接口 #### 获取文件列表(path:background(背景图片)) GET /api/file/{path} #### 上传文件 POST /api/file/{path}?name=bg1.jpg #### 下载文件 GET /api/file/{path}?name=bg1.jpg #### 删除文件 DELETE/api/file/{path}?name=bg1.jpg ### 文件项数据格式 ~~~json { "name": "bg1.jpg", "size": "1M" } ~~~ ### 文件列表数据格式 ~~~json { "items": [ { "name": "bg1.jpg", "size": "1M" }, { "name": "bg2.jpg", "size": "1M" }, { "name": "bg3.jpg", "size": "1M" } ] } ~~~ ## 其他操作接口 ### 获取系统信息 GET /api/system/sysinfo #### 数据格式 ~~~json { "uptime": 2223, /* Seconds since boot */ "memTotal": 1009660,//单位kb "memFree": 919732, //"memAvailable": 948204, "cpu": "Amlogic", "storageTotal": "2G", "storageAvailable": "1.8G", "storageUsed": "136.6M", "serialNumber": "", "hardwareVersion": "", "softwareVersion": "" } ~~~ ### 以太网信息 #### 获取以太网信息 GET /api/system/network #### 修改以太网信息 PUT /api/system/network #### 数据格式 ~~~json { "dhcp": false, "ip": "192.168.1.2", "netmask": "255.255.255.0", "geteway": "192.168.1.1", "mac": "01:02:03:04:05:06" //只能获取,不能修改 } ~~~ ### 网关配置信息 #### 获取配置信息 GET /api/config #### 设置配置信息 PUT /api/config #### 导入配置文件 POST /api/config/export #### 导出配置文件 GET /api/config/devlist #### 导入设备列表(上传配置文件) POST /api/config/devlist #### 导出设备列表(下载配置文件) GET /api/config/devlist #### 数据格式 ~~~ { "basic": { "platform": "zhiju", "canType": "uart2can", "canId": 32, "gatewayId": 1, "send_log_to_server": 1, "ntp_server": "", "workMode": "master" //master或slave }, "remote": { "brokerAddress": "tcp://www.izhiju.cn:1883", "username": "mqttgateway", "password": "Iottest8@h2018" }, "local": { "brokerAddress": "tcp://localhost:1883", "username": "", "password": "" } } ~~~ ### 获取系统时间 GET /api/system/time ### 修改系统时间 PUT /api/system/time ### 数据格式 ~~~json { "rawTime": 1632981788, //1970年1月1日起的秒数 "ntp_time": true, "ntp_server": ["0.pool.ntp.org", "1.pool.ntp.org", "2.pool.ntp.org", "3.pool.ntp.org", "time.android.com"] } ~~~ ### 系统操作命令 POST /api/system/cmd ~~~json { "cmd": "cmd_name" //reboot重启,factory_reset恢复出厂 } ~~~ ### 修改密码 PUT /api/system/reset_passwd #### 数据格式 ~~~ { "passwd_current": "", "passwd_new": "" } ~~~ ### 浏览器上传固件升级 POST /api/system/upload_firmware ### 检测固件版本 GET /api/system/update/latest ### OTA升级固件 POST /api/system/update #### 数据格式 { "latest": "1.0.1" "path": "http://www.test.com/iot_gateway.img" } ### 网关日志 #### 获取网关日志 GET /api/system/log #### 浏览器发送数据 ~~~json { "date_begin": "2021-09-02 00:00:00",//查询日志开始时间 "date_end": "2021-09-02 23:59:59",//查询日志结束时间 "level": 7, //查询日志级别info:1 warn:2 error:3 7=1+2+3 "page": 2, //查询第几页 "offset": 50,//从第几条日志开始查询 "limit": 50//返回日志条数 } ~~~ #### 网关返回数据 ~~~json { "data": [ { "id": 1004, "level": 1,//info:1 warn:2 error:3 "date": "2021-08-28", //日志产生日期 "time": "03:01:58", //日志产生时间 "ip": "127.0.0.1", "user": "admin", "message": "open area1 light1", //日志信息内容 "message_id": "1" //日志ID }, { "id": 1003, "level": 1, "date": "2021-08-28", "time": "03:01:58", "ip": "127.0.0.1", "user": "admin", "message": "open area2 curtain", "message_id": "2" }, { "id": 1002, "level": 2, "date": "2021-08-28", "time": "03:00:26", "ip": "127.0.0.1", "user": "admin", "message": "", "message_id": "3" }, { "id": 1001, "level": 3, "date": "2021-08-28", "time": "03:00:05", "ip": "127.0.0.1", "user": "admin", "message": "send canbus data error", "message_id": "4" } ], "total": 3, "severity": {//相应级别日志条数 "info": 2, "warn": 1, "error": 1 }, "error_code": 0, "error_message": "" } ~~~ #### 导出日志文件 GET /api/system/log_export ### 网关地区配置信息 #### 获取配置信息 GET /api/config/city #### 设置配置信息 POST /api/config/city ~~~json { "location_id": 101010100, //城市ID "location_name_en": "Beijing", //本地城市英文 "location_name_zn": "北京", //本地城市中文 "iso_3166_1": "CN", //国家编码 "country_region_en": "China", //国家英文 "country_region_zh": "中国", //国家中文 "adm1_name_en": "Beijing", //省级英文 "adm1_name_zh": "北京市", //省级中文 "adm2_name_en": "Beijing", //市级英文 "adm2_name_zh": "北京市", //市级中文 "timezone": "Asia/Shanghai", //时区 "latitude": "39.904987", //纬度 "longitude": "116.405289", //经度 "adcode":110000 //城市编码 } ~~~