大华ICC事件订阅与监听

大华ICC事件订阅与监听

概要

整体环境:
   (兼容性很强,不一定必须用我这里的版本 )
	整理截止日期:2023-08-17
	前端:unity2021.3.6f1c1 + C# + Rider2023.1.1​
	大华ICC:v5.0.0.12   (我这里的现场环境是V5.0.0.3没有啥不兼容的地方) 

组成

  • 第三方服务端应用(监听用) 以下简称第三方
  • ICC鉴权中心(订阅用) ICC平台提供
  • ICC事件中心 (向监听地址推送订阅结果) ICC平台提供

第三方就是我们自己开发的监听端,这里使用的是unity+C#,并未使用大华提供 SDK (没必要,能直接网络通讯),ICC鉴权中心与ICC事件中心都是ICC部署时提供的,相应的还要提供:ICC后台ip+端口,登录账号、密码,OpenAPI的账户[client_id]与秘钥[client_secret]
监听大华推送的事件本质就是:向ICC服务器发送一个能接受消息的端口
这里提供官方文档链接1:https://open-icc.dahuatech.com/#/home

整体架构流程

  1. 第三方通过鉴权中心完成登录,推荐 ICC开放平台-API文档-鉴权中心-用户密码模式 方式登录

    步骤顺序URL
    获取公钥/evo-apigw/evo-oauth/1.0.0/oauth/public-key返回体保留:publicKey
    认证/evo-apigw/evo-oauth/1.0.0/oauth/extend/token密码需要通过RSA与publicKey加密后发送
    刷新认证信息/evo-apigw/evo-oauth/1.0.0/oauth/extend/refresh/tokentoken保活,刷新access_token

    关于token保活:官方文档里有说可以直接定时调用 认证接口2 ,本质都一样,保证access_token不过期就可以

  2. 向ICC平台提供订阅地址

    调用事件订阅 [/evo-apigw/evo-event/1.0.0/subscribe/mqinfo] 接口订阅消息
    ​订阅结构如下:

    //json post /evo-apigw/evo-event/1.0.0/subscribe/mqinfo
    {	
        "param": {
            "monitors": [
                {
                    "monitor": "监听地址:端口",
                    "monitorType": "url",
                    "events": [
                        {
                             //订阅内容类型
                            "category": "alarm",
                            "subscribeAll": 1,
                            "domainSubscribe": 2,
                            //订阅内容↓
                            "authorities": [
                                {
                                    "types": [
                                        "57",
                                        "51",
                                        "61"
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ],
            "subsystem": {
                "subsystemType": 0,//固定值:0
                "name": "监听地址_端口",
                "magic": "监听地址_端口"
            }
        }
    }
    

    ​详细订阅权限设置见官方文档:APi文档-事件中心-事件订阅引导

  3. 保证第三方开放的监听端口能通
    添加防火墙入站规则,我这里用的是TCP端口,这里提供第三方为Windows的两种设置方式:


    ​第一种:主动开放端口: 控制面板-系统和安全-windows Defender防火墙-高级设置-入站规则-新建规则
    新建入站规则 添加入站设置
    入站设置


    第二种:调用命令接口开发端口,这里提供C#版本方式

      private static void AddFireWallPort(int port)
        {
            ProcessStartInfo processStartInfo =
                new ProcessStartInfo("netsh", $"firewall set portopening TCP {port.ToString()} ENABLE");
            processStartInfo.Verb = "runas";
            processStartInfo.CreateNoWindow = false;
            processStartInfo.UseShellExecute = true;
            processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            Process.Start(processStartInfo).WaitForExit();
        }
    

第三方开启端口监听3,我这里用的C#的System.Net.HttpListener:

//开启监听
public static void StartServer()
    {
        Debug.Log("--开启 Http监听--");
        httpobj = new HttpListener();
        httpobj.Prefixes.Add($"http://+:{开放端口号}/");
        httpobj.Start();
        httpobj.BeginGetContext(监听回调, null);
    }
//关闭监听
public static void StopServer()
    {
        if (httpobj != null)
        {
            Debug.Log("关闭 Http监听");
            httpobj.Stop();
            httpobj = null;
        }
    }

httpobj.Prefixes的url配置具体可以查看.net的官链:https://learn.microsoft.com/zh-cn/dotnet/api/system.net.httplistener?view=netframework-4.0

开启监听后可以尝试发送请求到该端口,测试下端口是否正常开启 端口测试
4. 对接完成,附我们现场环境的对接测试截图:
现场环境

附注

  1. 重复订阅时,订阅请求中name字段相同的订阅,会覆盖前一个。
  2. 订阅时注意[]与{}的区别,端口能通,监听不到消息可以优先从订阅处排查,能登录ICC后台的开发者推荐查看对应的evo-event.txt日志并搜索监听ip,查看后台收到的订阅json是否符合要求,基本上只要本地或其他网段能向监听地址发送消息就能规避telnet通的问题。

  1. 需开发者注册ICC开放平台 ↩︎

  2. token需要保活, refresh_token有效期一天,access_token有效期2h,access_token重新获取需要refresh_token,返回新的access_token时也会返回一个新的refresh_token ↩︎

  3. 监听无需保活,经过客服沟通与现场测试 ↩︎

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布尔方程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值