• 快速入门
  • HTTP文档
  • .NET开发指南
  • DEMO下载
  • 调用HTTP常见问题
    Show / Hide Table of Contents
    • 快速开始
      • 引入依赖包
      • 初始化
      • 开启FBox所有监控点
      • 盒子状态变更推送
      • 实时数据变更推送
      • 获取盒子信息与盒子分组
      • 获取监控点分组与监控点
      • 写值
    • 驱动操作
      • 获取盒子PLC
      • 下载盒子plc
    • 监控点操作
      • 新增监控点条目
      • 更新及删除监控点
    • 报警操作
      • 获取盒子下所有报警条目
      • 获取报警历史记录数据
      • 新增报警条目
      • 更新及删除报警条目
    • 历史操作
      • 获取历史记录数据
      • 获取历史记录条目
      • 新增历史记录条目
      • 更新及删除历史记录条目

    示例代码

    特别说明

    1、适用于 Visual Studio版本号15.3及以上。
    2、需要引入NuGet依赖包FBoxClientDriver、FBoxClientDriver.Contract

    示例代码中步骤如下:

    • 配置参数

    • 创建DefaultCredentialProvider对象

    • 创建FBoxClientManager对象

    • 登录服务器

    • 侦听盒子状态变更事件

    • 侦听实时数据推送变更事件

    • 开启盒子的所有监控点数据推送

    • 定义方法

    • 调用方法

    示例代码如下:

    注意:
    数据推送前需要先开点

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using FBoxClientDriver;
    using FBoxClientDriver.Contract;
    using FBoxClientDriver.Impl;
    
    namespace SDKDEMO
    {
        //配置参数
        public class FBoxClientParameters
        {
            public static string ClientId { get; set; } = "";
            public static string ClientSecret { get; set; } = "";
            public static string UserName { get; set; } = "";
            public static string Password { get; set; } = "";
            public static string IdServer { get; set; } = "https://account.flexem.com/core";
            public static string MainServer { get; set; } = "http://fbox360.com";
            public static string HdataServer { get; set; } = "http://fbhs1.fbox360.com";
        }
    
        public class FBoxDemo : IDisposable
        {
            private readonly IFBoxClientManager _fbox;
            private readonly string boxNo = "300015050009"; // 以这个为例子
    
            public FBoxDemo()
            {
                //创建对象并初始化
                var provider =
                    new DefaultCredentialProvider(FBoxClientParameters.ClientId, FBoxClientParameters.ClientSecret,
                        FBoxClientParameters.UserName, FBoxClientParameters.Password);
                _fbox = new FBoxClientManager(FBoxClientParameters.IdServer, FBoxClientParameters.MainServer,
                    FBoxClientParameters.HdataServer, provider, Guid.NewGuid().ToString("N"), null);
            }
    
            public void Dispose()
            {
                _fbox?.Dispose();
            }
    
           /// <summary>
            /// 启动
            /// </summary>
            public void Start()
            {
                //初始化SDK,内部建立signalr连接对象,Restart只需全局执行一次。
                _fbox.Restart().Wait();
                //侦听盒子状态变更事件
                _fbox.BoxConnectStateChanged += _fbox_BoxConnectStateChanged;
                //侦听实时数据变更事件
                _fbox.DataMonitorValueChanged += _fbox_DataMonitorValueChanged;
            }
    
            /// <summary>
            /// 实时数据变更函数
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void _fbox_DataMonitorValueChanged(object sender, IList<DataMonitorValueChangedArgs> e)
            {
                foreach (var dmon in e)
                    Console.WriteLine($"dmv:{dmon.Uid}:{dmon.Value},{dmon.Status}");
            }
    
            /// <summary>
            /// 盒子状态变更函数
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void _fbox_BoxConnectStateChanged(object sender, IList<BoxConnectionStateItem> e)
            {
                //NewState:1、2是盒子在线状态。0、3为盒子不在线状态,根据盒子状态对盒子进行开点操作
                foreach (var stateItem in e)
                {
                    Console.WriteLine($"{stateItem.BoxNo},{stateItem.NewState}");
                }
            }
    
            /// <summary>
            /// 开启盒子所有监控点
            /// </summary>
            public void StartAllDMonData()
            {
                //盒子每次掉线后,重新上线后均需要重新开点
                try
                {
                    _fbox.StartAllDataMonitorPointsOnBox(new BoxArgs(boxNo)).Wait();//boxNo为盒子号
                }
                catch (Exception ex)
                {
                    switch (ex.Message)
                        {
                            // 未登录服务器,请先Restart()
                            case "Box server not found.":; break;
                            // 当前账号下未找到BoxNo序列号的盒子
                            case "Not Found":; break;
                            default:; break;
                        }
                }
            }
    
            /// <summary>
            /// 获取盒子分组和盒子信息
            /// </summary>
            public void GetBoxGroups()
            {
                var grpList = _fbox.GetBoxGroups().Result;
                foreach (var grp in grpList)
                {
                    Console.WriteLine(grp.Uid);                 // 盒子分组的Uid
                    Console.WriteLine(grp.Name);                // 盒子分组名称
                    foreach (var box in grp.Boxes)              // 遍历分组下的盒子集合
                    {
                        Console.WriteLine(box.BoxId);           // 盒子Id
                        Console.WriteLine(box.Alias);           // 盒子名称
                        Console.WriteLine(box.BoxNo);           // 盒子号码
                        Console.WriteLine(box.ConnectionState); // 获取的时候盒子状态, 不能作为实时状态用,也不能一直调用这个接口来作为盒子状态变更,盒子状态变更请使用SignalR实时推送
                        Console.WriteLine(box.NetworkType);     // 网络类型   1:网络, 2:2G, 3:3G (这个不支持),4:Wifi ,5:4G 
                        Console.WriteLine(box.Disabled);        // 盒子是否被禁用
                        Console.WriteLine(box.ApiBaseUrl);      // ApiBaseUrl服务器地址
                        Console.WriteLine(box.SignalrUrl);      // SignalR服务器地址
                        Console.WriteLine(box.Owned);           // 是否为拥有者
                        Console.WriteLine(box.BoxType);         // 盒子类型, 0:标准盒子,1:mini盒子,2:Lite 3:VPN盒子
                    }
                }
            }
            //定义方法
        }
        class Program
        {
            static void Main(string[] args)
            {
                using (var fbox = new FBoxDemo())
                {
                    fbox.Start();
                    fbox.StartAllDMonData();
                    fbox.GetBoxGroups();
                    //调用定义的方法
                    Console.ReadLine();
                }
            }
        }
    }
    

    在创建IFBoxClientManager实例并初始化时,您需要提供一下参数:clientId、clientsecret、username、password、Id server、App server、和Hdata Server
    username、password为FlexManager的账号、密码
    clientId、clientsecret为找销售申请的账号、密码
    Id server、App server、和Hdata Server若公有云的话不变,私有云改为对应地址

    Back to top Generated by DocFX