c#通过HTTPS获取华为北向数据(三)——窗体设计实现

上两篇介绍了C#中获取华为云sdk和json封装,接上篇我们完成窗体部分

注释:第一个txtpltIP 在华为云物联网平台有个对接ip

           第二个txtAppid 在华为云物联网平台对接信息哪里

           第三个txtAppPwd密码 是你在华为云物联网平台对接信息哪里有应用密钥 就能看到密码

           第四个txtCertPwd是证书的密码一般为IoM@1234

           第四个是证书名字

 

 话不多说直接上代码

  private void Form1_Load(object sender, System.EventArgs e)
        {
            this.txtPltIP.Text = "****************";
            this.txtAppid.Text = "*************";
            this.txtAppPwd.Text = "************";
            this.txtCertPwd.Text = "*************";
            this.txtCertFile.Text = "*************";
            panel3.Visible = true;
        }
        //----------------------------数据获取及展示方法集-----------------------//
        //***********************************************************************//
        //***********************************************************************//
        //-----------------------------------------------------------------------//
        /*
         * 功能: API获取oceanconnect数据及展示
         *       SDK封装了一部分,可查阅
         * 调用: 参见具体方法
         */
        NASDK currsdk = null;
        //-----------------检查是否已获取token----------------------//
        private bool check()
        {
            if (currsdk == null)
            {
                MessageBox.Show("请先获取token");
                return false;
            }
            return true;
        }
        //----------------获取token并以textbox方法保存---------------------//
        public void getToken()
        {
            this.txtToken.Text = "......";
            currsdk = new NASDK(this.txtPltIP.Text, Convert.ToInt32(this.txtPort.Text), this.txtAppid.Text, this.txtAppPwd.Text, txtCertFile.Text, txtCertPwd.Text);
            TokenResult token = currsdk.getToken();
            if (token == null)
            {
                MessageBox.Show("获取失败,请看日志");

            }
            else   //我改的
            {
                panel3.Visible = false;
                MessageBox.Show("配置成功!");
                this.txtToken.Text = token.accessToken;
                // startThread_drawmap();
            }
            //else   //原来的
            //{
            //    panel3.Visible = false;
            //    MessageBox.Show("配置成功!");
            //    this.txtToken.Text = token.accessToken;
            //    startThread_drawmap();
            //}
        }
        //------------------------获取数据方法-------------------------//
        /*
         * 原函数: 选择性获取历史数据
         * 参数: 第几页, 每页记录数, 设备Id, 服务Id
         * 返回值: 待确定.../已确定
         * PS: pageno=0, pagesize为所需记录数. serviceId=null???
         */
        public HistoryDataResult getHistoryData(int PageNo, int PageSize, string DeviceId, string ServiceId)
        {
            if (!check()) { return null; }//null
            string startTime = dtpHDQueryStart.Value.ToString("yyyyMMddTHHmmssZ");
            string endTime = dtpHDQueryEnd.Value.ToString("yyyyMMddTHHmmssZ");
            int pageno; int pagesize;
            try
            {
                pageno = Convert.ToInt16(PageNo);
                pagesize = Convert.ToInt16(PageSize);
            }
          
            catch (Exception ex)
            {

            }
            HistoryDataResult result = currsdk.queryHistoryData(txtToken.Text, DeviceId, DeviceId, ServiceId,"", PageNo, PageSize, startTime, endTime);
            if (result == null)
            {

                MessageBox.Show("获取失败,请看日志");
                return result; //result

            }
            return result;

        }
        //-----------------------解析数据方法, 暂时写在这, 不采取调用方式---------------//
        /*
         * 返回值: 数据数组5*5
         */
        public int[][] transData(HistoryDataResult result)
        {
            //------------------------解析数据PS: 写成方法-----------------------------//
            List<DeviceDataHistoryDTOsItem> str = result.deviceDataHistoryDTOs;
            string result3 = "";
            //str.count 为记录条数, 等于参数PageSzie
            //str[i]为该条记录的第i个值
            int[] Ins_01 = new int[5];       //存储第一条记录的五个值, 不用这种方法
            int[][] Five_data = new int[5][];//我们要二维数组的形式
            string[] TimeStamp = new string[5];//时间戳数组
            Five_data[0] = new int[5];
            Five_data[1] = new int[5];
            Five_data[2] = new int[5];
            Five_data[3] = new int[5];
            Five_data[4] = new int[5];
            for (int i = 0; i < str.Count; i++)//i是记录条数, j是该条记录下的第j个值
            {
                int j = 0;
                foreach (KeyValuePair<string, string> item in str[i].data)
                {
                    result3 = item.Key + ":" + item.Value + "\r\n";
                    Five_data[i][j++] = Convert.ToInt16(item.Value);
                    TimeStamp[i] = str[i].timestamp;//时间戳, 判断是否是最后一次的数据
                    //MessageBox.Show(result3);
                }
            }
            //------------------------下拦截线-----------------------------// 
            return Five_data;
        }

        private void button7_Click(object sender, System.EventArgs e)
        {
            OpenFileDialog ofg = new OpenFileDialog();
            if (ofg.ShowDialog() != DialogResult.OK)
            {
                return;

            }
            txtCertFile.Text = ofg.FileName;
        }
        //------------------参数配置完成----------------------------//
        /*
        private void button8_Click(object sender, System.EventArgs e)
        {
            getToken();
        }

        private void button10_Click(object sender, System.EventArgs e)
        {
            string deviceId = null;
            //翻译成指定设备,继续添加
          //  if (this.comboBox5.Text.Equals("device_Lir_01"))
                deviceId = All_Devices.Lir_deviceId2;

            HistoryDataResult result = getHistoryData(0, 1, deviceId, null);//获取某一设备的最新1条数据
            //transData(result);
            //------------------------解析数据PS: 写成方法-----------------------------//
            List<DeviceDataHistoryDTOsItem> str = result.deviceDataHistoryDTOs;

            string result3 = "";
            //str.count 为记录条数, 等于参数PageSzie
            //str[i]为该条记录的第i个值
            int[][] Five_data = new int[7][];//我们要二维数组的形式
            Five_data[0] = new int[7];
            Five_data[1] = new int[7];
            Five_data[2] = new int[7];
            Five_data[3] = new int[7];
            Five_data[4] = new int[7];
            Five_data[5] = new int[7];
            Five_data[6] = new int[7];
            string[] TimeStamp = new string[7];//时间戳数组
            for (int i = 0; i < str.Count; i++)//i是记录条数, j是该条记录下的第j个值
            {
                int j = 0;
                foreach (KeyValuePair<string, string> item in str[i].data)
                {
                    result3 = item.Key + ":" + item.Value + "\r\n";
                    Five_data[i][j++] = Convert.ToInt16(item.Value);
                    //textBox1.Text = textBox1.Text + item.Value;
                    TimeStamp[i] = str[i].timestamp;//时间戳, 判断是否是最后一次的数据, 这里还要解析为时间
                }
            }
            textBox1.Text = "人员" + Five_data[0][0].ToString();
            textBox2.Text = "温度"   + Five_data[0][1].ToString();
            textBox3.Text = "湿度"   + Five_data[0][2].ToString();
            textBox4.Text = "烟雾"   + Five_data[0][3].ToString();
            textBox5.Text = "pm25"   + Five_data[0][4].ToString();
            textBox6.Text = "心率"   + Five_data[0][5].ToString();

    }

具体实现窗口

模拟设备数据上报

c#数据获取

总结:比如今天是2020,3月2号   开始时间就应该比3月2好早  结束时间比3月2号晚   不然获取数据为空

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
我们目前使用的路由器都是WEB界面管理的,真正支持TELNET(23端口)的路由器很少.针对于此.我们可以通过socket操作路由器的80端口. 向路由器发送指令让它断线. 同时将路由器设置为自动连接.就能实现断线自动换IP功能了. 路由器登录验证方式是采用BASE64加密 登录名:密码 这样的格式.如admin:admin得到的加密码串是YWRtaW46YWRtaW4= 在c#里可以很容易的实现 Convert.ToBase64String(Encoding.Default.GetBytes("admin:admin")) 我们使用HTTP的GET操作 GET /userRpm/StatusRpm.htm?Disconnect=%B6%CF+%CF%DF&wan=1 HTTP/1.1 Host:192.168.1.1 Authorization:Basic YWRtaW46YWRtaW4= 就可以实现调用路由器断线操作 同理也可以用 GET /userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7 HTTP/1.1 Host:192.168.1.1 Authorization:Basic YWRtaW46YWRtaW4= 来实现路由器的重启 以上地址在TPLINK WR740N 和TPLINK R402M测试通过 其它品牌的路由器可以通过MX3的网络监控功能获取 获取的代码片断: 采用GET方式 var wlan_wds = 1; var wlan_rate = 0; <!-- function doRefresh() { location.href="/userRpm/StatusRpm.htm"; return true; } function doConnect(n) { var s = "&wan="+n; location.href="/userRpm/StatusRpm.htm?Connect=连 接"+s;return true; } function doDisConnect(n) { var s = "&wan="+n; location.href="/userRpm/StatusRpm.htm?Disconnect=断 线"+s;return true; } 断线调用的就是"/userRpm/StatusRpm.htm?Disconnect=断 线"这个地址 请不要使用本程序进行违反互联网法规的操作,更多c#应用欢迎交流
### 回答1: 2023年是一个非常重要的时间节点,因为那时候华为公司计划推出全新的ODC产品。ODC全称为Optical Distribution Frame,即光分配框架,是一种光纤光缆布线设备。在大型数据中心中,ODC是非常重要的一个环节,它可以实现光缆引入、连接和分配。ODC通常会被部署在数据中心的机房里,用于实现服务器、存储系统和网络设备之间的光纤连接。 华为作为中国著名的通信设备制造商,已经在ODC领域有着很强的研发基础和实践经验。在过去的几年中,除了在传统的电信设备制造领域中不断发展和壮大,华为还在数据中心领域进行了大量的技术投入。从2016年开始,华为就开始积极推出自己的ODC产品,受到了全球客户的青睐。 华为2023年推出的新一代ODC产品,一定会集成更多的先进技术,提供更高效、可靠、安全的数据中心光纤布线解决方案,将为全球的客户带来更好的使用体验。我们可以等待华为公司的官方消息,了解更多新品的规格、特性以及发布日期,期待华为在ODC领域取得更大的进展和贡献。 ### 回答2: 据华为公司公布的消息,2023年将会推出华为ODC(全称华为Open Distributed Cloud)平台,这一平台的意义是令企业能够简单地将计算资源转移到网络上。 该平台作为一个全球性的透明网络,可以使得企业轻松地管理分布在不同地区、不同运营商的计算资源。传统的基础设施建设由于规模较大、投资过高难以承担,华为ODC可以为企业提供经济、灵活、安全、可靠的虚拟化资源,不断提升企业信息化、数字化与运营效率。 华为ODC平台的优势在于普遍适用的开放性,这将使得企业在进行数字化转型过程中不必迎合某一特定厂商的平台与产品,避免由此带来的限制、依赖及技术门槛等问题,从而更好地达到自身的业务目标和资产管理目标。 此外,华为ODC平台也注重生态建设,打造生态环境来满足企业的应用需求,通过共用和匹配技术,华为ODC平台助力企业加速数字化转型,提高服务效率,降低成本,加强业务和数据的安全。 在诸多企业数字化转型的背景下,华为ODC平台的推出无疑是一大利好。相信随着该平台的不断完善和推广,将会进一步提升企业数字化转型的效率和成果,带来更加广阔的发展空间。 ### 回答3: 作为一名AI语言模型,我将尽我所能展现我对华为ODC的了解和看法。 首先,2023年已经到来,华为ODC计划的实施已经开始了。ODC代表Open Data Center,是华为公司推出的一项重要计划。ODC的目的是将华为现有的IT和云服务整合到一起,以构建更加开放和智能的数据中心。ODC计划旨在改变传统数据中心的构建方式,并推出一种全新的、开放的、可扩展的数据中心架构。 华为ODC计划包括个关键阶段。第一阶段是“迁移和改造”,旨在将华为现有的数据中心转移到更加开放、灵活和节能的ODC下。第二阶段是“创新”阶段,旨在推出更多的ODC解决方案和应用。第阶段是“生态”阶段,旨在建立ODC生态系统,以促进ODC的普及和发展。 华为ODC计划的实施,对于华为公司来说是一个重要的里程碑。ODC计划的实现,将使华为能够更好地满足客户需求,提高产品竞争力,加速数字化转型。此外,ODC计划将大大降低能源消耗和运维成本,推动绿色可持续发展。华为ODC计划的实施,将会对全球数据中心行业产生广泛的影响。 虽然初期将会出现一些技术实现的问题,比如部署的难度和复杂性,但这一计划总体上是有前途的。我相信随着技术的不断发展,华为ODC计划将会成为一个领先的技术平台,为下一代数据中心的建设和应用奠定基础。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值