APP通过http获取OneNet数据与命令下发【应用层】
文章目录
- 前言
- 一、项目思路及结构
- 二、主要函数
- 1.Get请求方法
- 2.Post请求
- 3.Main函数
- 4.运行效果
- 总结
前言
在之前我们已经完成了感知层和网络层的设计,现在我们来完成应用层的设计,这样大概的物联网框架就有了。这边采用APP实现,由于没有花很多时间学习app的设计,所以ui和程序都设计的比较简陋。需要完成设计的小伙伴可以参考前几篇博客。
ESP32驱动震动传感器、MAX4466(感知层)
ESP32通过MQTT协议把数据上传到OntNet平台(网络层)
一、项目思路及结构
1.结构(如下图):
其中http保存的是get请求和post请求的文件夹,json保存的是请求返回json数据解析的文件。
2.思路:
首先我们需要设计一个能够接收信息和发送信息到云平台的应用,使用get请求获取云平台的额数据显示到文本框上,通过按钮发送post请求到云平台,其中get请求获取的是一个json格式的数据如下:
{"errno": 0,"data": {"count": 3,"datastreams": [{"datapoints": [{"at": "2022-09-29 01:22:34.128","value": 326},{"at": "2022-09-29 01:22:32.997","value": 325},{"at": "2022-09-29 01:22:31.967","value": 324}],"id": "data"}]},"error": "succ"
}
所以还要对数据进行解析,由于涉及的细节比较多这里只介绍主要的函数,当然完整工程会在文末分享出来。
二、主要函数
1.Get请求方法
代码如下:
public String GetDateMethod(String url){String time=new String();OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).addHeader("Authorization","version=2018-10-31&res=products%2F417488&et=1700000000&method=md5&sign=2c5X8shBYQAVp%2B7BtJ0iTg%3D%3D")//这里需要生成新的key 我搞了一晚上才发现.build();String responseData="";Response response=null;try {response=client.newCall(request).execute();responseData=response.body().string();} catch (IOException e) {e.printStackTrace();}Log.w("ww","responsedata:"+responseData);return responseData;}
新的密钥生成格式如下:
具体可以查看网络层的文章 其中res的参数是不一样的,key需要在云平台的产品概况找到,如下图:
2.Post请求
代码如下:
public String PostDataMethod(String commd){OkHttpClient client=new OkHttpClient();String url=String.format("http://api.heclouds.com/v1/synccmds?device_id=997936235&timeout=30"); //api接口只需要把device_id=后面的改成你自己的设备id就可以String body=String.format(commd);Log.e("url",url);Log.e("body",body);RequestBody bodyJson=RequestBody.create(MediaType.parse("application/json;charset=utf-8"),body);Request request = new Request.Builder().url(url).headers(new Headers.Builder().add("Authorization","version=2018-10-31&res=products%2F417488&et=1700000000&method=md5&sign=2c5X8shBYQAVp%2B7BtJ0iTg%3D%3D") //这里和get请求的一样.build()).post(bodyJson).build();Call call=client.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {Log.e("e","post请求失败");}@Overridepublic void onResponse(Call call, Response response) throws IOException {}});Response response=null;String responseData="";try{response=client.newCall(request).execute();String jsonResStr=response.body().string();Log.e("onenet回应数据",jsonResStr);JSONObject jsonObject=new JSONObject(jsonResStr);responseData=jsonObject.getString("error");Log.e("val",responseData);}catch (Exception e){e.printStackTrace();}return responseData;}
3.Main函数
代码如下:
public class MainActivity extends AppCompatActivity {HttpNetwork httpNetwork = new HttpNetwork();String openRes;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button bt1=findViewById(R.id.button);Button bt2=findViewById(R.id.button2);Button bt3=findViewById(R.id.button3);TextView tw1=findViewById(R.id.textView);//get请求需要用的urlString url="http://api.heclouds.com/devices/997936235/datapoints?datastream_id=data&limit=3";bt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();openRes=httpNetwork.PostDataMethod("1");Toast.makeText(getApplicationContext(),openRes.toString(),Toast.LENGTH_LONG).show();Looper.loop();}).start();}});bt2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();openRes=httpNetwork.PostDataMethod("0");Toast.makeText(getApplicationContext(),openRes.toString(),Toast.LENGTH_LONG).show();Looper.loop();}).start();}});bt3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {new Thread(() -> {Looper.prepare();String data = httpNetwork.GetDateMethod(url);int date= getvalue(data).intValue();Log.i("data", String.valueOf(date));tw1.post(new Runnable() {@Overridepublic void run() {tw1.setText(String.valueOf(date));}});}).start();}});}//json数据解析的函数public Integer getvalue(String responseData){JsonDate data = new Gson().fromJson(responseData, JsonDate.class);List<DatastreamItem> streams = data.getData().getDatastreams();List<DatapointItem> points = streams.get(0).getDatapoints();Integer resultData = new Integer(1);resultData = points.get(0).getValue();return resultData;}
}
4.运行效果
如图:
这里返回了云平台的最新数据!
完整工程链接:https://pan.baidu.com/s/1LZZS_9tlLnPaN-YwgMAHmw?pwd=8888
提取码:8888
总结
上面的程序仅供参考,写的也比较简陋,文笔也不是很好,所以好多东西都表达的不到位,由于涉及的东西比较多,所以就直接把工程分享出来了。到此为止,一个简单的物联网项目设计就完成了,也是在复习之前学习的知识,同时,也欢迎小伙伴们和我一起进行学习交流呀!!!要学习的东西还很多,大家一起加油进步呀!如果觉得是不错分享动动发财的小手点一个赞呀!
最后多看官方给出的文档,如下:
https://open.iot.10086.cn/doc/v5/develop/
https://developer.android.com/
APP通过http获取OneNet数据与命令下发【应用层】相关推荐
- 安卓app 获取view的id_隐私保护问题不小 研究表示1325个安卓APP未经授权获取用户数据...
在今年苹果的WWDC大会上,苹果大谈保护用户的隐私,并暗怼了自己的竞争对手安卓系统在用户隐私保护方面不如苹果.那么安卓操作系统在隐私保护方面真的有问题吗? 由于国内的安卓操作系统没有谷歌的监管,因此在 ...
- 猫眼电影App抓包获取评论数据接口
之前在CSDN程序人生公众号上看到了这篇文章<邪不压正>评分持续走低,上万条网友评论揭秘,是救救姜文还是救救观众?,文中提到了通过抓包猫眼App发现了评论的数据接口:http://m. ...
- 微信小程序获取Onenet温湿度数据并控制灯亮灭
其实之前就写过类似的文章,但是看过我博客的朋友就知道,我是先写微信小程序获取onenet,然后再写esp32上云到onenet.一篇是ESP32-C3通过MQTT协议把温湿度上传到OneNet平台 ...
- java对接移动物联网onenet平台实现接收设备上报数据命令下发
java对接移动物联网onenet平台实现接收设备上报数据命令下发. 最近由于工作需要,公司设备集成了物联网卡,需要实现数据上报命令下发等(目前集成了电信,移动,联通三个平台).电信和移动都有自己的开 ...
- 实时获取股票数据的android app应用程序源码分享
From:http://www.jb51.net/article/72449.htm 本文我们分享一个实时获取股票数据的android app应用程序源码分享,可以作为学习使用,本文贴出部分重要代码, ...
- 微信小程序获取OneNet数据显示温湿度
微信小程序获取OneNet数据显示温湿度 一.OneNet平台 1.我这里的设备是通过MQTT协议连接到OneNet平台的 2.微信小程序获取OneNet数据需要得到产品的api-key.设备 ...
- 一个实时获取股票数据的安卓应用程序
关键字:Stock,股票,安卓,Android Studio. OS:Windows 10. 最近学习Android应用开发,不知道写一个什么样的程序来练练手,正好最近股票很火,就一个App来实时获取 ...
- gstreamer 获取帧数据_Android App卡顿率(顺滑度、顺滑度)并整理数据
概要 测试一个Android App的卡顿率(流畅性.顺滑度)的方法有很多,不同的厂和团队有他们不同的玩法,有的用高速摄像机去评估,有的用肉眼主观感受,有的通过获取获取底层数据的去评估,也有的像本文章 ...
- cocos2d-LUA逆向之修改客户端app,实时获取app解密后通信数据
本文中,将以宝博.apk为例.基于前面 解密lua脚本与 解密lua资源,我们为实现修改客户端app,实时获取app解密后通信数据,应分析修改app端的lua脚本,然后按原app加密方式打包修改后的l ...
最新文章
- NLP玩得溜,「兵器」得趁手:GLUE排行第一的那种,了解下?
- 23 DesignPatterns学习笔记:C++语言实现 --- 2.2 Adapter
- 【微信网页版】给所有微信群发消息
- 【重复制造精讲】3、成本收集
- jQuery获取所有父级元素及同级元素及子元素的方法
- centos 新建swap区文件
- 返回JSON出现Infinite recursion无限循环错误的解决
- java命令行编译命令_Java使用命令行编译运行程序
- Android 安全 (一)
- R用户的福音︱TensorFlow:TensorFlow的R接口
- 5天学python_人生苦短,我将学习Python基本句子(第5天),我学,基础,篇,语句,Day5...
- mybatis的缓存基础
- 1.关于Python,你可能不知道的
- MAC下的环境变量设置
- html调用腾讯视频,调用腾讯视频播放器APi代码
- dbf解析_DBF文件格式分析.doc
- C#圆形卡尺测量程序基于halcon
- Prim算法的具体实现
- sizeof结构体指针
- 谷歌身份验证器验证码不对怎么回事_谷歌相机安装教程,让你的手机拥有谷歌般强大的夜拍能力...