1. OneNET簡介 中國移動物聯網開放平臺是由中國移動打造的PaaS物聯網開放平臺。 平臺能夠幫助開發者輕鬆實現設備接入與設備連接,提供綜合性的物聯網解決方案,實現物聯網設備的數據獲取,數據存儲,數據展現。 中移物聯網官方網址 https://open.iot.10086.cn/ 安卓平臺接入O ...
1. OneNET簡介
中國移動物聯網開放平臺是由中國移動打造的PaaS物聯網開放平臺。
平臺能夠幫助開發者輕鬆實現設備接入與設備連接,提供綜合性的物聯網解決方案,實現物聯網設備的數據獲取,數據存儲,數據展現。
中移物聯網官方網址
https://open.iot.10086.cn/
安卓平臺接入OneNET方法:
①註冊一個中移物聯網的賬號
②接下來開始創建產品與產品下的設備
③點擊右上角新建產品
④接下來開始創建設備,點擊提交之後出現
記住設備id,之後程式里會用到
為設備添加APIKey,這也是之後程式里要用到的
保存設備APIKey
接下來為設備創建數據流,所有的數據都是被上傳到數據流的
這裡進行查看數據流
這裡添加數據流
接下來就是程式方面的實現
使用http協議,具體的協議內容可以查看
https://open.iot.10086.cn/doc/art/id/190#43
具體二進位文件的傳輸看這個網址
https://open.iot.10086.cn/doc/art258.html#68
以下http協議代碼的實現都是基於這個規定的,一定要打開對照來看
(1) 以POST實現文本數據的上傳
public class OneNETUrlConnectionPost extends Thread {
private int SHOW_REQUEST = 0;
private Handler handler;
// 首先聲明設備ID及apikey
private static final String DeviceID = "25857699";
// 個人使用就建議填產品key,設備key在二進位獲取那裡會許可權不足
private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";
public OneNETUrlConnectionPost(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
//data1代表雲端的數據流是data1
String s1 = new String(",;" + "data1" + "," + "哈哈哈,終於成功了");
byte[] data = s1.getBytes();
// 先new出一個URL對象,傳入網路地址
// 調用openConnection()方法獲取到HttpURLConnection對象
// 自己創建的中移物聯網的地址http://api.heclouds.com/devices/25857699/datapoints?type=5
url = new URL("http://api.heclouds.com/devices/" + DeviceID
+ "/datapoints?type=5");
connection = (HttpURLConnection) url.openConnection();
// 下麵使一些自由的定製,比如設置連接超時,讀取超時的毫秒數,以及伺服器希望得到的一些消息頭
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("api-key", ApiKey);
connection.setRequestProperty("Content-Length",
String.valueOf(data.length));
connection.setChunkedStreamingMode(5);
// 設置打開輸出流
connection.setDoOutput(true);
// 拿到輸出流
OutputStream os = connection.getOutputStream();
// 使用輸出流往伺服器提交數據
os.write(data);
os.flush();
os.close();
// //如果請求發送成功
if (connection.getResponseCode() == 200) {
// 接下來利用輸入流對數據進行讀取
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}// 正常則返回{"errno":0,"error":"succ"},此函數為void,用不上這個
// 發送數據完畢,接下來用Handler進行提交成功顯示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = response.toString();
handler.sendMessage(message);
}
// 最後關閉HTTP連接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
(2) 以POST實現位元組數據的上傳(包括圖片視頻等二進位文件)
public class OneNETUrlConnectionPostByte extends Thread {
private int SHOW_REQUEST = 0;
private Handler handler;
// 首先聲明設備ID及apikey
private static final String DeviceID = "25857699";
// 個人使用就建議填產品key,設備key在二進位獲取那裡會許可權不足
private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";
public OneNETUrlConnectionPostByte(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
URL url;
// 自定義的字元數組將它上傳到雲端
byte[] my_data = { '8', '8', '6' };
HttpURLConnection connection;
try {
// 先new出一個URL對象,傳入網路地址
// 調用openConnection()方法獲取到HttpURLConnection對象
// 自己創建的中移物聯網的地址http://api.heclouds.com/devices/25857699/datapoints?type=5
url = new URL("http://api.heclouds.com/bindata?device_id="
+ DeviceID + "&datastream_id=" + "data123");
connection = (HttpURLConnection) url.openConnection();
// 下麵使一些自由的定製,比如設置連接超時,讀取超時的毫秒數,以及伺服器希望得到的一些消息頭
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("api-key", ApiKey);
connection.setRequestProperty("Content-Length",
String.valueOf(my_data.length));
connection.setChunkedStreamingMode(5);
// 設置打開輸出流
connection.setDoOutput(true);
// 拿到輸出流
OutputStream os = connection.getOutputStream();
// 使用輸出流往伺服器提交數據
os.write(my_data);
os.flush();
os.close();
// //如果請求發送成功
if (connection.getResponseCode() == 200) {
// 接下來利用輸入流對數據進行讀取
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}// 正常則返回{"errno":0,"error":"succ"},此函數為void,用不上這個
// 發送數據完畢,接下來用Handler進行提交成功顯示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = response.toString();
handler.sendMessage(message);
}
// 最後關閉HTTP連接
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
(3) 以GET實現文本數據的獲取
public class OneNETHttpRequestGET extends Thread {
private int SHOW_REQUEST = 0;
private Handler handler;
// 首先聲明設備ID及apikey
private static final String DeviceID = "25857699";
// 個人使用就建議填產品key,設備key在二進位獲取那裡會許可權不足
private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";
public OneNETHttpRequestGET(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
// 先new出一個URL對象,傳入網路地址
// 調用openConnection()方法獲取到HttpURLConnection對象
url = new URL("http://api.heclouds.com/devices/" + DeviceID
+ "/datastreams/" + "data1");
connection = (HttpURLConnection) url.openConnection();
// 下麵使一些自由的定製,比如設置連接超時,讀取超時的毫秒數,以及伺服器希望得到的一些消息頭
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
connection.setRequestMethod("GET");
connection.setRequestProperty("api-key", ApiKey);
// 如果網頁正確響應
if (connection.getResponseCode() == 200) {
// 接下來利用輸入流對數據進行讀取
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
// 讀取數據完畢,接下來將數據傳送到Handler進行顯示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = response.toString();
handler.sendMessage(message);
// 最後關閉HTTP連接
connection.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
(4) 以GET實現位元組數據的獲取,但是存在小bug還未成功
public class OneNETHttpRequestGETByte extends Thread {
private int SHOW_REQUEST = 0;
private Handler handler;
// 首先聲明設備ID及apikey
private static final String DeviceID = "25857699";
// 個人使用就建議填產品key,設備key在二進位獲取那裡會許可權不足
private static final String ApiKey = "QMrXbErb2t8h=E1mHORgxX20QVM=";
public OneNETHttpRequestGETByte(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
URL url;
HttpURLConnection connection;
try {
// 先new出一個URL對象,傳入網路地址
// 調用openConnection()方法獲取到HttpURLConnection對象
url = new URL("http://api.heclouds.com/bindata/"
+ "25857699_15201013688560_data123");
connection = (HttpURLConnection) url.openConnection();
// 下麵使一些自由的定製,比如設置連接超時,讀取超時的毫秒數,以及伺服器希望得到的一些消息頭
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
connection.setRequestMethod("GET");
connection.setRequestProperty("api-key", ApiKey);
// 如果網頁正確響應
if (connection.getResponseCode() == 200) {
// 接下來利用輸入流對數據進行讀取
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
StringBuilder response = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
response.append(line);
}
// 讀取數據完畢,接下來將數據傳送到Handler進行顯示
Message message = new Message();
message.what = SHOW_REQUEST;
message.obj = response.toString();
handler.sendMessage(message);
// 最後關閉HTTP連接
connection.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
瞭解更多技術文章,歡迎關註我的個人公眾號