Skip to content
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

AIRIOT智慧系统搭建平台经验交流

T

tbz

@tbz
关于
帖子
主题
群组
粉丝
关注

帖子

最新 最佳 有争议的

  • 报警弹窗视频联动的升级提示是什么意思
    T tbz

    https://open.ys7.com/bbs/article/128


  • 我想要使用https访问,应该怎么设置?
    T tbz

    不用, 过了nginx之后就不加密了


  • 我想要使用https访问,应该怎么设置?
    T tbz

    运维里看看live服务, 前端video模块是最新的吗? 不是的话更新下


  • 我想要使用https访问,应该怎么设置?
    T tbz

    这是播放视频的时候报的错吧?


  • 我想要使用https访问,应该怎么设置?
    T tbz

    在80里的那个里, 改成ssl的话, 用https访问3030就行了


  • 我想要使用https访问,应该怎么设置?
    T tbz

    1716875218084.png


  • 我想要使用https访问,应该怎么设置?
    T tbz

    是linux吗? linux的nginx里还是80端口, docker-compose.yml里映射到主机上改成3030了


  • 我想要使用https访问,应该怎么设置?
    T tbz

    需要有域名和对应的https证书, 把证书挂载到web容器的某个文件夹(app/docker-compose.yml), 然后在服务器改平台nginx的配置(app/airiot/web/nginx.conf)


  • 连接AP PLC多维数组可以上数 但不显示设备在线状态
    T tbz

    v4.0.11 https://d.airiot.cn/abplc/v4.0.11/abplc-linux-x86_64.tar.gz


  • 使用http-server接收海康威视摄像头上传的报警信息
    T tbz

    部分海康设备可以作为客户端,使用http协议向上级发送报警等消息。
    这种情况下,平台可使用http-server驱动接收报警,简单配置脚本即可解析上传的报警消息。

    海康设备配置页面
    9a38b2c7-97e8-4857-923d-676481be831d-image.png

    平台的配置页面
    de836406-9d36-42fc-b947-64bb84287624-image.png

    本次只解析报文的json部分
    上传的报文示例:

    {
    	"ipAddress":	"10.XXX.XXX.XXX",
    	"portNo":	9505,
    	"protocol":	"HTTP",
    	"macAddress":	"80:be:af:XXX:XXX:XXX",
    	"channelID":	1,
    	"dateTime":	"2023-11-13T08:00:00+08:00",
    	"activePostCount":	1,
    	"isDataRetransmission":	false,
    	"eventState":	"active",
    	"channelName":	"Camera 01",
    	"eventType":	"AIOP_Video",
    	"eventDescription":	"AI Open Platform Video Detection",
    	"taskID":	"ca82e6570c900001",
    	"AIOPData":	{
    		"errorcode":	0,
    		"version":	"2.0.0",
    		"width":	"1920",
    		"height":	"1080",
    		"frameNum":	165704,
    		"timeStamp":	6661635,
    		"aitype":	1003,
    		"targets":	[{
    				"obj":	{
    					"modelID":	"XXXXXXXXXXXXXXXXXXXXXXXXX",
    					"id":	28,
    					"type":	1,
    					"confidence":	941,
    					"valid":	1,
    					"visible":	1,
    					"rect":	{
    						"x":	"0.320312",
    						"y":	"0.252717",
    						"w":	"0.170313",
    						"h":	"0.476902"
    					}
    				}
    			}],
    		"events":	{
    			"alertInfo":	[{
    					"target":	{
    						"modelID":	"XXXXXXXXXXXXXXXXXXXX",
    						"id":	28,
    						"type":	1,
    						"confidence":	941,
    						"region":	{
    							"rect":	{
    								"x":	"0.320312",
    								"y":	"0.252717",
    								"w":	"0.170313",
    								"h":	"0.476902"
    							}
    						}
    					},
    					"ruleInfo":	{
    						"ruleID":	1,
    						"triggerType":	1073758209,
    						"movDir":	0,
    						"region":	{
    							"polygon":	[{
    									"x":	"0.125000",
    									"y":	"0.018000"
    								}, {
    									"x":	"0.195000",
    									"y":	"0.982000"
    								}, {
    									"x":	"0.823000",
    									"y":	"0.984000"
    								}, {
    									"x":	"0.740000",
    									"y":	"0.021000"
    								}]
    						},
    						"ruleName":	"XXXXXXX"
    					}
    				}]
    		}
    	},
    	"PID":	"20231xxxxxxxxxxx"
    }
    

    脚本

    
    /**
     * 数据处理脚本
     * 
     * @param {Object} context 上下文信息
     * @param {Object} request 请求信息
     * @param {string} request.url 请求 url 信息
     * @param {string} request.method 请求方式. 例如: GET, POST, PUT 等
     * @param {string} request.remoteAddr 客户端地址
     * @param {string} request.path 请求路径
     * @param {Object} request.headers 请求头信息. 注: 值为字符串数组. 例: {"Content-Type": ["application/json"]} 
     * @param {Object} request.pathVariables url 路径参数.
     * @param {Object} request.query url 中的请求参数. 注: 值为字符串数组. 例如: {"name": ["name1", "name2"]}
     * @param {string} request.rawQuery url 中的请求参数.
     * @param {Object} request.cookies cookie 信息. 例如: {}
     * @param {string} request.body 请求体
     * @returns {Object}
     */
    function handler(context, request) {
    
        let strs = request.body.split("--boundary")
        let alarmJson
    
        if (strs && strs.length != 0) {
    
            for (let i = 0; i < strs.length; i++) {
                const el = strs[i];
                if (el === "" || el === "--") {
                    continue
                }
                let ss = el.split("\r\n\r\n")
                if (ss && ss.length === 2) {
                    const elHeader = ss[0]
                    const elBody = ss[1]
    
                    if (elHeader.match(/application\/json/i)) {
                        alarmJson = elBody
                        break
                    }
                }
            }
        }
        if (alarmJson) {
            const data = JSON.parse(alarmJson);
            console.log(JSON.stringify(data))
    
            const deviceId = request.query.deviceId;
            const values = data.payload;
    
            return {
                "statusCode": 200,
                "result": [{ "id": deviceId, "values": values }]
            }
    
        } else {
            return {
                "statusCode": 200
            }
        }
    }
    

    脚本中的alarmJson为解析后的json对象,具体返回的数据点可根据对象内容和实际业务提取,放到values中,即可将报文上传的数据发送到平台数据点上。

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组