a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 專題 > 使用 IBM Bluemix 上的 IoT 及 Push 服務發送推送消息到手機

使用 IBM Bluemix 上的 IoT 及 Push 服務發送推送消息到手機

作者: 時間:2016-11-24 來源:網絡 收藏

Bluemix  最新的云服務,是企業和開發人員可以快速輕松地創建,部署和管理應用程序的云平臺。Bluemix 提供企業級的服務,可以輕松地與云應用程序集成。它目前提供了 100 多種服務,覆蓋了認知、移動、運維、web 和應用程序、網絡、集成、數據與分析、安全、存儲、業務分析、物聯網、及 API 等。 

本文引用地址:http://www.j9360.com/article/201611/340672.htm

本文就是使用了 Bluemix 上的移動,物聯網及存儲等相關的服務,基于 Node-RED 快速構建了一個推送消息給手機,并且可以查看歷史數據的應用。該應用主要架構如下:

 1 架構圖

 

主要工作流程:

1.設備(在這里是從命令行)發消息給 IoT 平臺

2.IoT 平臺轉發消息給 Node-RED

3.當收到消息時,Node-RED 調用 Push 服務

4.Push 服務發推送消息給手機端

5.Node-RED 收到消息時將數據也存入 Cloudant 數據庫

6.手機客戶端從 Cloudant 數據庫讀取歷史消息

為實現以下應用程序需要哪些準備:

·Bluemix 賬號

·基本的 Java 技能

·基本的 Swift 技能

下面我們分步驟詳細介紹如何實現這些功能。

第一步:創建應用程序

1.  ID 登錄到 Bluemix,選擇目錄(CATALOG),選擇 Internet of Things Platform Starter 模板。

 2 Internet of Things Platform Starter 模板位置

 

2.在打開的頁面上,左邊欄是關于 Internet of Things Platform Starter 的概要信息,比如版本,類型,以及詳細文檔的鏈接;中間欄是當前版所包含的服務,當前版本包含 SDK for Node.js, Cloudant NoSQL DB,及 Internet of Things Platform 服務,那么我們在后邊就不需要再額外添加這些服務,此外,還列出了其主要功能及如何收費等信息;右邊欄是要配置的信息,輸入 NameHost 字段會根據 Name 的值自動生成,保持其他字段不變,點擊創建(CREATE)。

 3 Internet of Things Platform Starter 模板頁面

 

第二步:啟用移動應用程序

點擊概述(Overview),找到啟用移動應用程序(Enable App for Mobile),并點擊。啟用移動應用程序的對話框會彈出,顯示如下:要啟用您的移動應用程序,Bluemix 將新增 Mobile Client Access 提供的應用程序安全性功能。要將 Mobile Client Access 服務添加到您的應用程序嗎?選擇添加(ADD)。在我們的例子中,移動端的安全問題并不是重點,但是這是啟用移動應用程序的必要條件,我們必須添加這個服務。隨后選擇重新編譯打包應用程序(Restage Application)。當應用程序重新啟動結束,在概述(Overview)頁面的右上角,會出現一個移動選項(Mobile Options),點擊它,會出現路徑(Route)和應用程序 GUID 兩個字段,

 4 查看 Route 和 App GUID

這兩個字段很重要,在將來我們實現移動端程序時,會有如下字樣的代碼,需要指定 Route 和 App GUID,才能連上 Bluemix 里的應用程序。

IMFClient.sharedInstance().initializeWithBackendRoute("http://iot-push.my.net", backendGUID:"27c9eb7b-0df6-43ac-b338-4678c926e936")

第三步:添加推送(Push)服務

推送服務能幫助我們發送推送消息到 Android 或者 iOS 設備,這些設備能作為標記(tag)或者設備唯一標識符的目標,我們使用簡單而統一的 REST API 以配置,訂閱,發送和監控推送消息到 Android 和 iOS 設備。

1.添加推送服務

仍然是回到概述頁面,點擊添加服務或者 APIAdd a Service Or API),在 Services 的列表中選擇 Mobile,然后找到  Push Notification 服務,并點擊之。

 5 Push Notification 目錄

在右邊欄找到 Service name 字段輸入服務名稱,當然,你也可以使用它的默認名稱,點擊創建(CREATE)按鈕。在隨后彈出的窗口中,選擇重新編譯打包(RESTAGE)。因為該應用程序新添加了服務,必須重新編譯打包才能使此服務生效。至此,推送服務添加成功。

2.配置證書

在應用程序的概述頁面找到 Push Notification 服務,并點擊以進入該服務頁面。

 6 概述頁面的 Push Notification 服務

在打開的頁面上會有提示:你還沒有配置推送!在其下方,有一個按鈕配置推送(Setup Push),點擊進入配置頁面。

 7 配置推送證書

因為此例子中,我們是使用的 iOS 客戶端,所以我們只配置蘋果推送認證(Apple Push Certificate)。選擇你的證書所用的類型(請務必跟你的證書的類型相同,如果你的證書是生產環境下的,那么選擇 Production,否則選擇 Sandbox。如果類型不匹配,可能手機收不到推送消息。),選擇文件位置,填寫密碼,然后點擊保存(Save)。證書配置如下,說明已經配置成功。

 8 成功配置推送證書

第四步:配置 Cloudant 數據庫

1.創建數據庫

回到應用程序的概述頁面,找到 Cloudant NoSQL 服務,點擊以打開這個服務,在右上角找到 LAUNCH 按鈕 ,并點擊。在新打開的 Cloudant 控制臺頁面中,在右上角找到按鈕 – 創建數據庫(Create Database),點擊之,在彈出的對話框里,填上數據庫的名字,在這里我們填上 demodb,并點擊創建(Create),隨后頁面上有數據庫創建成功的字樣出現,并且自動切入到已創建好的數據庫中。至此,我們的數據庫創建工作已經完成。 

 9 在 Cloudant 里創建數據庫

2.設置權限

仍然是在 Cloudant 控制臺頁面中,在數據庫列表中點擊剛剛建好的 demodb,進入其子菜單,找到權限(Permissions),為其他用戶勾選上_reader 選項。

 10 Cloudant 數據庫的權限設置

3.獲取 API 連接

獲取數據庫里所有數據的 API 為如下格式:https://<host>/<db_name>/_all_docs?include_docs=true

在應用程序的概述頁面(Overview),找到 Cloudant NoSQL DB,點擊 Show Credentials,在打開的窗口中找到 host,替換上面的相應字段;在 db_name 中用我們的數據庫的名字 demodb 替換;設置 include_docs 為 true,是為返回列表中的數據,如果沒有這個參數,或者設為 false,則只會返回數據項的 ID 和 key 信息,沒有數據信息。

 11 Cloudant 的憑證信息

點擊查看最終該 API 呈現形式,在移動端可以使用該 API 獲取歷史數據。 

第五步:配置 IoT 服務

1.回到應用程序的概述頁面,找到 Internet of Things Platform 服務,點擊進入該服務的頁面,找到 Launch dashboard 按鈕,并點擊之。

2.在新打開的標簽頁中,在左側豎邊欄上懸停,在打開的菜單欄上,找到設備 DEVICES,并點擊之。

 12 IoT 菜單

3.在新打開的設備列表中,目前還沒有設備。點擊右上角的 Add Device, 開始添加一個設備。首先要選擇設備類型,在下拉列表里,暫時還沒有設備類型。所以先點擊 Create device type 按鈕創建一個設備類型。

 13 添加設備

4.在彈出的頁面上,仍然選擇 Create device type.

 14 創建設備類型

5.接下來,在頁面上輸入類型名稱(Name),這個是必填項,然后點擊右下角的下一步(Next),期間有一些信息要填,但都不是必填項,可以留空,一直點擊 Next,直到最后點擊創建(Create)。

6.在選擇設備類型(Choose Device Type)里選擇剛剛創建的設備類型,點擊右下角的下一步。

7.在設備信息(Device Info)頁面,填寫設備 ID,這是唯一必填的信息。點擊額外的字段(+Additional fields)會有更多詳細的字段可以填寫,如序列號,制造商,模型,類別等等,這些字段會根據在設備類型中設置的屬性值自動填充,也可以填上這些字段的值以覆蓋設備類型中的值,此外設備類型中沒有定義的屬性,也可以增加。然后點擊右下角的下一步。

8.元數據(Metadata)這頁,可以留空,點擊下一步。

9.在安全(Security)這頁,主要是獲取安全口令。有兩個選擇,一是使用自動生成的口令:會為你自動生成認證口令。該口令是一個 18 位長,包含數字、字母,以及符號的混合體,它將在注冊流程的最后返回給你;另一個種是由你為該設備提供認證口令。在這種情況下,該口令是 到 36 位長,可以包括大小寫字母,數字及符號(連字號,下劃線及句點)。如果你要使用自定義的口令,在請提供口令(Provide a token)后邊的橫線上填寫,然后點擊下一步。

10.在概要信息(Summary)這頁,主要是顯示之前所填的信息,請核對為該設備所提交信息是否正確。如果無誤,請點擊添加(Add)。

11.在設備憑證(Your Device Credentials)頁,這個設備已經被注冊到了這個組織。要想連接到這個組織,需要把如下信息添加到你的設備上。請牢記認證口令(Authentication Token),由于安全方面的原因,這個口令一旦被忘記,將沒有辦法獲取。

 15 設備憑證信息

12.點擊右上角的按鈕 ,關閉當前頁面。在設備列表里,即有剛剛創建的設備。至此,設備的創建已經完成。

第六步:在 Node-RED 里創建工作流

點擊儀表板(DASHBOARD),在應用程序列表里找到剛剛創建的應用程序,點擊圖標。

 16 找到 Node-RED 入口圖標

在打開的 Node-RED 頁面,找到 Go to your Node-RED flow editor 按鈕,點擊以進入流編輯器。接下來,我們將使用 Node-RED 流編輯器來構建一個工作流。 讀者也可以 點擊這里打開 Node-RED 流編輯器。 

1.在左側調色板中,找到 input 區域,拖拽 ibmiot 節點 拖到畫布上,雙擊以打開編輯頁面進行配置。首先要選擇認證(Authentication)的方式:此下拉框有 個值 Quickstart, API Key, Bluemix Service. Quickstart 是用于快速入門的案例學習用的;API Key 選項需要輸入 API Key 和 API token,多用于 IoT Platform 與 Node-RED 不在同一個 app 時;Bluemix Service 是內部的服務調用,并不需要輸入參數,主要用于 Node-RED 與 IoT 在同一 App 時。因為我們的 App 里邊有 IoT Platform 服務,我們可以選擇 Bluemix Service 直接連接。選定認證方式后,需要選擇輸入類型(Input Type),這里輸入類型有 Device Event, Device Command, Device Status, Application Status, 從名稱上我們即可知道他們 主要檢測的重點。我們在此選擇 Device Event。至于設備類型(Device Type),設備標識(Device Id),事件(Event),格式(Format)等選擇 All 即可,再填寫節點名稱(Name),點擊 OK。 

 17 ibmiot 節點的編輯頁面

2.在 function 區域找到 json 節點 ,并將其拖拽到畫布上。我們使用此節點是為了解析 msg.payload,把一個 javascript 對象轉化為 json 字符串。 

3.在 function 區域找到 function 節點 ,并將其拖拽到畫布上。雙擊該節點,打開編輯頁面。在 Name 字段輸入該節點名稱(建議填上該字段,否則節點顯示名為空),在 Function 區域已有一句 return msg; 在此之前加入如下代碼: 

var message = JSON.parse(msg.payload).;

msg.payload ={

"message":{“alert": message.content }

};

return msg;

 18 function 節點的編輯頁面

4.在 output 區域找到 ibmpush 節點 ,將其拖拽至畫布。雙擊該節點,打開編輯頁面。因為當前節點所屬的應用程序有 Push 服務,所以對該節點初始化時會自動去讀取該應用程序 ID 和 push 服務的 appSecret 字段。編輯頁面上的可編輯的推送屬性只有 個:模式(Mode)和類型(Type)。 

模式有沙箱(Sandbox)和生產(Production)模式,由于我們的證書是生產模式下的,所以我們選擇生產模式。

類型一共有 5 種:

·廣播(Broadcast):可以向所有設備發送

·通過標記(By Tags

·通過設備唯一標識符(By DeviceIds

· Android 設備(Only Android devices

· iOS 設備(Only iOS devices

由于我們 demo 的移動端程序僅支持 iOS 設備,所以我們選擇 Only iOS devices.

 19 ibmpush 節點編輯頁面

5.在 storage 區域找到 cloudant 節點 ,將其拖拽至畫布。雙擊節點,打開編輯頁面。Service 字段已經自動定位到當前應用程序里附帶的 Cloudant 數據庫;Database 字段輸入我們前面已經創建好的數據庫名;Operation 字段表明要執行的操作是插入(insert)還是刪除(remove),因為我們要存查消息進數據庫,所以這里選擇 insert;勾上 Only store msg.payload object,將只存儲 msg.payload 里的數據,否則會存儲整個 msg 對象的值。最終,我們配置如下: 

將各節點用線連接起來,形成如下所示的流:

 20 最終的工作流

在所有節點都修改之后,點擊右上角的 Deploy 按鈕來部署此工作流。當屏幕中間彈出成功部署(Successfully deployed)時,說明此流已經部署成功。

你也可以通過導入功能導入以上工作流。先找到菜單->導入->剪切板。

 21 Node-RED 的導入功能

 

然后把以下代碼粘貼到剪切板上,點擊 Ok 按鈕。當鼠標在畫布上點擊時,工作流即會落到畫布上,然后部署即可。

[{"id":"1b156a6f.f4bd96","type":"ibmiot","z":"2282255c.190b3a","name":"my

api key"},{"id":"1007c76.d968b39","type":"ibmiot

in","z":"2282255c.190b3a","authentication":"boundService","apiKey":"1b156a6f.f4bd96","inputType":"evt","deviceId":"","applicationId":"","deviceType":"+","eventType":"+","commandType":"","format":"json","name":"IBM

IoT","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":true,"allCommands":"","allFormats":true,"x":212,"y":139,"wires":[["ba7c7e78.984a9"]]},{"id":"ba7c7e78.984a9","type":"json","z":"2282255c.190b3a","name":"","x":334,"y":139.5,"wires":[["13ed7f07.efa891"]]},{"id":"13ed7f07.efa891","type":"function","z":"2282255c.190b3a","name":"Message","func":"var

message = JSON.parse(msg.payload).d

;/nmsg.payload=message.content;/nreturn

msg;","outputs":"1","noerr":0,"x":466.5,"y":140,"wires":[["1b7a992d.274b47","27c244f9.52993c"]]},{"id":"1b7a992d.274b47","type":"cloudant

out","z":"2282255c.190b3a","name":"","cloudant":"","database":"demodb","service":"iot-push-cloudantNoSQLDB","payonly":true,"operation":"insert","x":613.5,"y":165.5,"wires":[]},{"id":"27c244f9.52993c","type":"ibmpush","z":"2282255c.190b3a","name":"","ApplicationID":"","identifiers":"","notification":"ios","mode":"PRODUCTION","x":612,"y":115,"wires":[]}]

第七步:發送 MQTT 消息

我們用 Java 實現一段程序,以發送 MQTT 消息給 IoT 平臺。其中,我們引用了如下包:

com.ibm.iotf.client.2016.4.21.jar, gson-2.2.4.jar,httpclient-4.3.6.jar, httpcore-4.3.3.jar,

org.eclipse.paho.client.mqttv3-1.0.3-20150818.040635-202.jar

核心代碼及解析如下:

publicclassDeviceMessage{

DeviceClient deviceClient =null;

publicDeviceMessage(){

//設置連接屬性,用我們已經創建好的設備的憑證,連接到我們的 IoT 服務。

Properties options =newProperties();

options.setProperty("org","6bnaci");

options.setProperty("type","Type1");

options.setProperty("id","Device1");

options.setProperty("auth-method","token");

options.setProperty("auth-token","12345678");

try{

deviceClient =newDeviceClient(options);

}catch(Exception e){

e.printStackTrace();

}

try{

//連接到 IoT 服務,參數設成 false,如果連接失敗,不自動重新連接;如果設置成 true,那么程序會一直重試直到連接成功。

deviceClient.connect(false);

}catch(MqttException e){

e.printStackTrace();

System.out.println("network connection error !");

}

}

publicvoid sendMessage(String[] msg){

//創建一個對象 event

JsonObjectevent=newJsonObject();

//如果此類被執行時有一個參數傳入,我們即把它作為屬性賦給 event,否則即賦值“This is one push message.”

if(msg!=null& msg.length==1){

event.addProperty("content", msg[0]);

}else{

event.addProperty("content","This is one push message.");

}

//發送消息到 IoT 平臺

deviceClient.publishEvent("status",event);

//從 IoT 平臺斷開連接

deviceClient.disconnect();

}

publicstaticvoid main(String args[]){

DeviceMessage dm =newDeviceMessage();

dm.sendMessage(args);

}

}

我們通過命令行(當然,也可以引入這個 java 項目,在 IDE 里如 Eclipse 運行該程序)運行,

Java-jar Push.jar "This is the message from the command line."

 22 在命令行發送 MQTT 消息

第八步:手機裝上相應的客戶端程序

將應用程序發布到蘋果的 App Store 或者其他 store(如某些公司內部有自己 App Store 供開發測試用),并用手機安裝,打開應用程序,按第七步:發送 MQTT 消息在命令行發送一條命令,手機端即可接收推送消息了,同時也能查看歷史記錄。詳細源代碼已經附在后邊,請大家自行查看。 

 



關鍵詞: bluemix IBM

評論


相關推薦

技術專區