## 裝置整合筆記 ### 使用方法 common專案中DeviceModelTest.java可以檢查哪些東西需要更新 ``` @Test public void testINMA11() { DeviceModel deviceModel = DeviceModel.INMA11; checkDeviceHasAttr(deviceModel); genAttrMappingTable(deviceModel); genZhTw_I18nKey(deviceModel); genApplicationContextImport(deviceModel); } ``` ### 方法說明 * checkDeviceHasAttr 檢查目前尚無新增的資料屬性,如無資料,代表以新增完畢,如有資料就根據裝置類型放在對應。 先執行**genZhTw_I18nKey**可自動產生中文註解。 例:如下例裝置類型為Sensor: - attr 放在org.iii.ems.domain.vo.device.eda.Sensor.java。 ->增加屬性、建構子。 - contructor org.iii.ems.service.device.eda.impl.SensorServiceImpl.java。 ->貼到setDeviceData這個方法下面 - info org.iii.ems.domain.attr.deviceinfo.SensorInfoAttr.java ->按照數字順序貼上屬性 可參考 [[資料定義-需公司內網開啟](https://sites.google.com/insynerger.com/19435/devices/in21209?authuser=0)] ![image](https://hackmd.io/_uploads/HyqzVPLJye.png) - genAttrMappingTable 會根據數值定義(註1)取得屬性對應SQL,要更新到ATTRID_MAPPING資料表中。 (可看資料定義中"型態"欄位) 如資料屬性為"設定屬性",屬性代碼較長且為5開頭 SQL新增QUERYTYPE = 5 一筆資料。。 一般資料屬性若為純profile即時屬性,SQL新增QUERYTYPE = 1、4 兩筆資料。 一般資料屬性若為有info歷史屬性,SQL新增QUERYTYPE = 1、2、4 三筆資料。 ->此資料要開remine單加到資料庫中 - genZhTw_I18nKey 可自動產生i18n語法。 src/test/resources/DeviceModelTestAttrNameMap.txt 可透過(註2)複製屬性與中文名稱複製到字典檔DeviceModelTestAttrNameMap.txt 中。 >[!Note] **註1:** ![image](https://hackmd.io/_uploads/SJXH1II1ye.png) 如上圖未出現數值定義,需於googleDrive自行查詢,查詢如下: [裝置屬性-需公司內網開啟](https://drive.google.com/drive/folders/0ByvIItSN14r7Y2Y2VW9idHkxZWs?resourcekey=0-jI7S9i_Msldjm7pGbf_Phw) ![image](https://hackmd.io/_uploads/HJEAeII11l.png) ![image](https://hackmd.io/_uploads/B1szWU8J1l.png) **註2:** [IN21209資料定義](https://sites.google.com/insynerger.com/19435/devices/in21209?authuser=0) ![image](https://hackmd.io/_uploads/SkuqguIJkg.png) - genApplicationContextImport 產生i18n ContextImport語句。 :::info ex. <value>i18n/deviceAttribute/INMA11/messages</value> ::: 複製在InEms1.0.0 src/main/resources/applicationContext.xml :::warning **InEcMessages**中加入該裝置的名稱i18n.deviceType的properties及i18n.deviceAttribute下對應的的裝置擴充類型碼(ex.i18n.deviceAttribute.IN11) ::: :::warning InEMS打包前 記得先在**common那包程式執行** ![image](https://hackmd.io/_uploads/rkaYpVq11x.png) ::: ## - 最後確認步驟 :::success 執行下列步驟直至ec2501確認屬性是否都有綁成功 ::: ### 1.新增閘道器(ec0501) ### 2.新增虛擬資料(以電表為例) #### - 建假資料 透過POSTMAN來執行。 API網址:https://t-infactory.insynerger.com/cs/device/data/ CServer API文件參考: [裝置資料回報](https://docs.google.com/document/d/1QnzDL1ZLIiM6kc9YZIO_BQRUQo5IG9qhN2q7eQ8uTMw/edit#heading=h.12nuhsmqq1rk) 步驟: (1)方法選POST, (2)在Body中貼上-> ``` { "gatewayId": "INC8----YCTEST------", "requestSn": "sn_{{now}}", "gatewayPw": "YWJjMTIz", "deviceList": [ { "deviceId": "IN11-1156-----------", "parentId": "INC8----YCTEST------", "typeId": "1156", "reportBlock": { "reportTime": {{now}}, "attrList": [ { "attrId": "501200", "value": "20.20" }, { "attrId": "500900", "value": "8.4" } ] } } ] } ``` (3)在Scripts中貼上-> ``` var now = new Date(); postman.setEnvironmentVariable("now", now.getTime()); ``` :::info (1) gatewayId 要選擇這個模擬裝置要放在哪個gateway底下,如果需要新建gateway可以到測試機的ec0501。 (2) requestSn、reportTime 傳入當下時間戳,也可以輸入指定過去時間。 (3) gatewayPw 固定用”ABC123”的base64編碼 = YWJjMTIz (4) deviceList 要新增的裝置列表,可以一次新增很多個。 (5) deviceId 要新增的裝置Id,規定的命名方式為前兩個英文字母為裝置廠商的縮寫(EX:IN是思納捷、II是資策會),但目前大多都使用IN(命名規則是其他組決定的),第三、四位的數字需要跟裝置類型相同,後面隨意。 可以參考:https://sites.google.com/insynerger.com/portal/%E6%96%87%E4%BB%B6%E5%BA%AB/device-model (6) parentId 指的是deviceId的上一層,EX:設備"IN11-1156-----------"的上一層為gateway"INC8----YCTEST------",所以"IN11-1156-----------"的parentId就是"INC8----YCTEST------", 大部分時候parentId都跟gatewayId相同,但有例外是多迴路電錶,多迴路電錶可能會是gateway底下有一個總表,總表底下在有一個裝置,這時候裝置的parentId就會是總表,總表的parentId就會是gateway。 (7) typeId 裝置類型的「裝置擴充類型碼」 (8) reportBlock 假資料的內容,可以一次新增多筆。 (9) attrList 裝置的「屬性代碼」 (10) value 要新增的值。 ::: (3)在Scripts中貼上 ``` var now = new Date(); postman.setEnvironmentVariable("now", now.getTime()); //是前面body中的now變數,接著就可以send。 ``` #### -到DB檢查資料 [ERM](https://docs.google.com/document/d/13QYOJjS4ltlaafbOKn3XfxIiqJapPfZVnqsPBedHbrM/edit) - DeviceList是裝置列表,可以下指令檢查剛剛新增的裝置有沒有進去 - MeterCircuit是裝置設定 - MeterProfile是即時資料 - MeterInfo是歷史資料 CServer將gateway的資料存到DB時會存到兩張表,分別是3即時資料、4歷史資料,即時資料表會以更新的方式儲存最後一筆資料,歷史資料會新增最新一筆資料。 ``` select * form devicelist where devicetype='1156' select * form meterprofile where dcid=52444 select * form meterinfo2 where meterid=18354 ``` #### -刷新gateway資料 每一個裝置都要綁定在一個gateway底下,gateway和裝置需要被設定在同一個場域系統才抓的到,所以要到「閘道器管理」(ec0501)刷新gateway資料,更新完後就可以在「裝置列表」(ec2503)找到新建的資料。 #### -驗證資料功能 1. 裝置看板 (EC2501)-是否有所有屬性 2. 裝置管理 (EC2503)-是否有此裝置 3. 事件設定 (EC1401)-可選擇參數種類是否有新增之屬性 4. 基本資訊分析 (EC0425)-可點擊屬性列表確認是否有新增之屬性 5. 裝置歷史資料 (EC1608)-可點擊屬性列表確認是否有新增之屬性,並查看剛新建的資料 ## 閘道器設置方法 - 連接完電腦及閘道器後進入 http://192.168.5.254/zigbee_properties.asp 帳密admin / admin - 閘道器設定連CServer網頁 ![image](https://hackmd.io/_uploads/rJ27KNAykl.png) -要讓所有裝置都在這綁定完再去平台(https://t-infactory.insynerger.com/)新增 -ec0501 新增 GW [命名規則](https://docs.google.com/presentation/d/1TjF3E1Nvj_N94jzbtklDY1TKkyPaeUpSaLd9seMITgE/edit?pli=1#slide=id.p) ![image](https://hackmd.io/_uploads/ry1tYNCkJe.png) BN90(廠商代碼+裝置類型) 0004ed + FFFE(固定的) + d82f64 -ec0503可以控制電力計開關 -ec0701看電力計歷史資料 -若電腦設置固定IP,可透過GW去遠端控制此內所有IP的東西