## 裝置整合筆記
### 使用方法
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)]

- 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:**

如上圖未出現數值定義,需於googleDrive自行查詢,查詢如下:
[裝置屬性-需公司內網開啟](https://drive.google.com/drive/folders/0ByvIItSN14r7Y2Y2VW9idHkxZWs?resourcekey=0-jI7S9i_Msldjm7pGbf_Phw)


**註2:**
[IN21209資料定義](https://sites.google.com/insynerger.com/19435/devices/in21209?authuser=0)

- 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那包程式執行**

:::
## - 最後確認步驟
:::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網頁

-要讓所有裝置都在這綁定完再去平台(https://t-infactory.insynerger.com/)新增
-ec0501 新增 GW
[命名規則](https://docs.google.com/presentation/d/1TjF3E1Nvj_N94jzbtklDY1TKkyPaeUpSaLd9seMITgE/edit?pli=1#slide=id.p)

BN90(廠商代碼+裝置類型) 0004ed + FFFE(固定的) + d82f64
-ec0503可以控制電力計開關
-ec0701看電力計歷史資料
-若電腦設置固定IP,可透過GW去遠端控制此內所有IP的東西