---
# System prepended metadata

title: 公司程式1

---

# 公司程式1


### MQTT_TW & MQTT_SG
- 都是寫data進mysql資料庫
- TW和SG的區別在於MQTT的broker不同，分別為mqtt.emscloud.net和sg.evercomm.com
- MQTT_SubBACnetRaw_TW.py & MQTT_SubBACnetRaw_SG.py
    - 去MQTT提取資料後寫入rawData.BACnet
- MQTTModbusRaw_TW.py & MQTTModbusRaw_SG.py
    - 去MQTT提取資料後寫入rawData.Modbus
- MQTTSubZigBeeRaw_TW.py & MQTTSubZigBeeRaw_SG.py
    - 去MQTT提取資料後寫入rawData.ZB
- MQTTSubM2MRaw_SG.py
    - 去MQTT提取資料後寫入rawData.M2M


### MQTT_ISS
- 這邊的程式都是寫入sg.evercomm.com這個broker的
- 第一部分為8CL，寫data進mysql資料庫的rawData.mqttIAQ
- 第二部分為HBF，寫data進mysql資料庫的rawData.mqttIAQ
- 兩者區別為topic不一樣，前者為ISS8CL/iaqsensor，後者為ISSHBF/iaqsensor

### MQTT_PPSS
- 這邊的程式都是寫入mqtt.emscloud.net這個broker的
- 主要針對powerMeter、flowMeter和dTemperature的資料寫入
- 其對應的資料庫是 iotmgm.pm、iotmgmt.ultrasonicFlow2和iotmgmt.ultrasonicFlow2

### MQTT_TC
- 都是寫data進mysql資料庫
- 相對復雜一些，不太清楚

# iotmgmt(程式)
- iotmgmtFrom1. 41To6. 41 .py
    - 更新資料庫（由於會動到的資料庫有點多，就不一一列出）
- ZigBee_raw2iotmgmt.py
    - 寫資料進資料庫，裡面有多個資料庫

# dataETL(程式)
- airQuality_dataETL.py & co_dataETL
    - 更新dataETL.airQuality的資料
- environment_dataETL.py
    - 更新dataETL.environment的資料
- flow_API_dataETL.py
    - 更新dataETL.flow的資料
- gas_dataETL.py
    - 更新dataETL.gas的資料
- goCheck_dataETL.py
    - 檢查多個資料庫(?)
- gpio_dataETL.py
    - 更新dataETL.gpio的資料
- particle_dataETL.py
    - 更新dataETL.airQuality的資料
- power_API_dataETL.py
    - 更新dataETL.power的資料
- power_dataETL.py
    - 更新dataETL.power的資料
- sigfox_API_dataETL.py
    - 更新dataETL.power的資料
- sindcon_API_dataETL.py
    - 更新dataETL.power的資料
- temp_API_dataETL.py
    - 更新dataETL.temp的資料
- twoInOne_3-1_dataETL.py
    - 更新dataETL.twoInOne的資料
- twoInOne_3-2_dataETL.py
    - 更新dataETL.twoInOne的資料
- vibration.py
    - 更新dataETL.vibration的資料
- wetness_dataETL.py
    - 更新dataETL.wetness的資料

# API(程式)
- flow_API.py
    - 寫資料進入iotmgmt.flowMR2RMT
- power_API.py
    - 寫資料進入iotmgmt.pm
- sigfox_API.py
    - 更新rawData.sigfoxAPI的資料
- sindcon_API.yp
    - 更新rawData.sindconAPI的資料

# dataPlatform
- ammonia.py
    - 更新dataPlatform.ammonia的資料
- ch2o.py
    - 更新dataPlatform.ch2o的資料
- co.py
    - 更新dataPlatform.co的資料
- co2.py
    - 更新dataPlatform.co2的資料
- environment.py
    - 更新dataPlatform.environment的資料
- flow_Chiller.py 
    - 更新dataPlatform.flow的資料
- flow_Name_API.py 
    - 更新dataPlatform.flow的資料
- flow_Name.py
    - 更新dataPlatform.flow的資料
- flow.py 
    - 更新dataPlatform.flow的資料
- FlowLog.py
    - 寫資料進mgmtETL.FLowLog
- flowU.py 
    - 更新dataPlatform.flow的資料
- gas.py 
    - 更新dataPlatform.gas的資料
- goCheck_dataPlatform.py
    - **對多個table進行處理，但因為缺少一個toolkit無法閱讀**
- gpio.py
    - 更新dataPlatform.gpio的資料
- humidity.py 
    - 更新dataPlatform.humidity的資料
- ion.py
    - 更新dataPlatform.ion的資料
- particle.py 
    - 更新dataPlatform.particle的資料
- PMLog.py
    - 寫資料進dataPlatform.PMLog
- power_API.py
    - 更新dataPlatform.power的資料
- power.py 
    - 更新dataPlatform.power的資料
- pressure.py
    - 更新dataPlatform.pressure的資料
- quality.py
    - 更新dataPlatform.quality的資料
- temp_55.py
    - 更新dataPlatform.temp的資料
- temp_API.py
    - 更新dataPlatform.temp的資料
- temp.py
    - 更新dataPlatform.temp的資料
- vibration.py
    - 更新dataPlatform.vibration的資料
- voc.py
    - 更新dataPlatform.voc的資料
- wetness.py
    - 更新dataPlatform.wetness的資料

# reportPlatform2021
- 根據檔案名更新該reportPlatform2021對應的table


# Note
#### MQTT config TW
clientId = 自取，無需註冊，放自己英文名字
user = iotmqtt
password = ECTW4iot
port = 1883
IP1 = mqtt.emscloud.net

#### MQTT config SG
clientId = 自取，無需註冊，放自己英文名字
user = iotmqtt
password = ECTW4iot
port = 1883
IP1 = sg.evercomm.com # IP即broker

#### MQTT config TC
broker = 192.168.91.34
port = 1883
user = iotmqtt
passwd = ECTW4iot
clientid = SG41

#### MQTT路徑
以MQTT_SubBACnetRaw_TW.py的topic為例，bacnet/+/raw就是在台灣MQTT裡的某些資料，可參考 https://swf.com.tw/?p=1009

#### 流程圖的線
只要是從py-->table，線中間如果沒有文字，即是py執行insert，否則有replace的話就是py執行replace，以下為範例

#### mysql db的形狀
```mermaid 
    flowchart TD
        A[41環境]
        B[/42環境/]
```

- replace
```mermaid
    flowchart TD
    A[test.py] -->|replace| B[database.table]
```
- insert
```mermaid
    flowchart TD
    A[test.py] --> B[database.table]
```

# mysql 41的rawData資料來源
- rawData.BACnet
```mermaid
    flowchart TD
    A[MQTT_SubBACnetRaw_TW.py] -->AAAA
    AAAA[rawData.BACnet]
    B[MQTT_SubBACnetRaw_SG.py] --> AAAA
    C[MQSubBacnetRaw_TC.py] --> AAAA
```
```
1. MQTT_SubBACnetRaw_TW.py
- 簡單來說就是當日之rawData.BACnet的資料產生
- subClient_rawdata: SubbacnetRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata: bacnet/+/raw
- subTopic_rawdata_Hank: rawdata/bacnet/raw 
- subTopic_list: [(subTopic_rawdata, 2), (subTopic_rawdata_Hank, 2)]

2. MQTT_SubBACnetRaw_SG.py
- 其架構和MQTT_SubBACnetRaw_SG.py一樣，不同的是config的ip不一樣，其他subClient_rawdata、
  subTopic_rawdata等等都是一樣的

3. MQSubBacnetRaw_TC.py
-* 從localFileSave讀取資料，如果第一行是INSERT開頭，則執行蓋sql，否則他就視為需放入資料庫的資料
-* 接下來還有一個寫入rawData.GWClockIn，但我並未看到該table
```
- rawData.M2M
```mermaid
    flowchart TD
    A[MQTT_SubM2MRaw_SG.py] -->AAAA
    AAAA[rawData.BACnet]
    B[MQSubM2M_JHP_TC.py] --> C[JHP_parsing] 
    C --> AAAA
    D[MQSubM2M_TC.py] --> AAAA
```
```
1. MQTT_SubM2MRaw_SG.py
- 簡單來說就是當日之rawData.M2M的資料產生
- subClient_rawdata: Subm2mRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata: m2m/+/raw
- subTopic_list: [(subTopic_rawdata, 2)]

2. MQSubM2M_JHP_TC.py
- clientId: SUB065-165166
- topics: [("JHP/065166",2)]
-* 從localFileSave讀取資料，如果行數介於0至100（不含），就將localFileSave裡的內容複製到
   tempFile，再將localFileSave的內容清空
-* 接下倆讀取temp內容。再將需要insert的query做JHPParsing後執行該query
-* 如果行數大於100,也是將localFileSave裡的內容複製到tempFile，再將localFileSave的內容清空。
   接下來讀取tempFile的資料然後對其逐行做JHPParsing再執行query的處理。

3. MQSubM2M_TC.py
- clientId: SUBM2Mraw
- topic: rawdata/M2M/raw
- 與MQSubM2M_JHP_TC.py雷同，不同的地方在JHPParsing的部分
```
- rawData.Modbus
```mermaid
    flowchart TD
    A[MQTT_SubModbusRaw_TW.py] -->AAAA
    AAAA[rawData.BACnet]
    B[MQTT_SubModbusRaw_SG.py] --> AAAA
    C[MQSubModbusRaw_TC.py] --> AAAA
```
```
1. MQTT_SubModbusRaw_TW.py
- 簡單來說就是當日之rawData.Modbus的資料產生
- subClient_rawdata: SubmodbusRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata: modbus/+/raw
- ubTopic_rawdata_Hank = rawdata/modbus/raw
- subTopic_list: [(subTopic_rawdata, 2), (subTopic_rawdata_Hank, 2)]

2. MQTT_SubModbusRaw_SG.py
- 其架構和MQTT_SubModbusRaw_TW.py一樣，不同的是config的ip不一樣，其他subClient_rawdata、
  subTopic_rawdata等等都是一樣的

3. MQSubModbusRaw_TC.py
- 和MQSubM2M_TC.py架構一樣，只是寫入的table不一樣
```
- rawData.mqttIAQ
```mermaid
    flowchart TD
    A[airIAQ_ISS8CL_dataETL.py] -->AAAA
    AAAA[rawData.mqttIAQ]
    B[airIAQ_MQ_dataETL.py] --> AAAA
```
```
1. airIAQ_ISS8CL_dataETL.py
- MQTT 使用sg config
- 簡單來說就是當日之rawData.mqttIAQ的資料產生
- MQTTuser: SubzigbeeRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata: ISS8CL/iaqsensor

2. airIAQ_MQ_dataETL.py
- MQTT 使用sg config
- 其架構和airIAQ_ISS8CL_dataETL.py一樣，不一樣的是SubTopic為ISSHBF/iaqsensor
```
- rawData.RESAPI

- rawData.sigfoxAPI
```mermaid
    flowchart TD
    A[sigfox_API.py] -->|replace| AAAA
    AAAA[rawData.sigfoxAPI]
    B["https://api.sigfox.com/v2/devices/{dId}/messages<br>dId為deviceId"] --> A
```
```
1. sigfox_API.py
- 從url https://api.sigfox.com/v2/devices/{dId}/messages，取得data裡面後replace到
  rawData.sigfoxAPI
```
- rawData.sindconAPI
```mermaid
    flowchart TD
    A[sindcon_API.py] -->|replace| AAAA
    AAAA[rawData.sindconAPI]
    B["getToken()"] --> C
    C["getDevList(token)"]--> E
    D["getUMG96Data(token)"] --> C
    B --> D
    E["getHistoricalData(dev_dict, token)"] --> A
```
- rawData.ZB
```mermaid
    flowchart TD
    A[MQTT_SubZigBeeRaw_TW.py] -->AAAA
    AAAA[rawData.BACnet]
    B[MQTT_SubZigBeeRaw_SG.py] --> AAAA
    C[MQSubZBRaw_TC.py] -->AAAA
```
```
1. MQTT_SubZigBeeRaw_TW.py
- 簡單來說就是當日之rawData.Modbus的資料產生
- subClient_rawdata: SubzigbeeRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata: zigbee/+/raw
- subTopic_rawdata_Hank = rawdata/zb/raw
- subTopic_list: [(subTopic_rawdata, 2), (subTopic_rawdata_Hank, 2)]

2. MQTT_SubZigBeeRaw_SG.py
- 其架構和MQTT_SubZigBeeRaw_TW.py一樣，不同的是config的ip不一樣，
  其他subClient_rawdata、subTopic_rawdata等等都是一樣的

3. MQSubZBRaw_TC.py
- 和MQSubM2M_TC.py架構一樣，只是寫入的table不一樣
```
# mysql 41的iotmgmt資料來源
- iotmgmt.pm
```mermaid
    flowchart TD
    A[MQTT_SubPPSSRaw.py] --> AAAA
    AAAA[iotmgmt.pm]
    B[iotmgmtFrom1.41To6.41.py] -->|replace| AAAA
    C[ZigBee_raw2iotmgmt.py] --> AAAA
    D[power_API.py] --> AAAA
    E[rawData.ZB] --> C
    F[iotmgmt.pm] --> B
    G[rawData.RESTAPI2023<br>/rawData.RESTAPI] --> D
```
```
1. MQTT_SubPPSSRaw.py 
- 簡單來說就是當日之iotmgmt.pm/iotmgmt.ultrasonicFlow2/iotmgmt.dTemperature的資料產生
- subClient_rawdata: SubppssRawXXXXX (XXXXX為英文名字，就是Note的clientId)
- subTopic_rawdata_pm: iotdata/+/powerMeter/#
- subTopic_rawdata_flow: iotdata/+/flowMeter/#
- subTopic_rawdata_temp: iotdata/+/dTemperature/#
- subTopic_list: [(subTopic_rawdata_pm, 2), (subTopic_rawdata_flow, 2),
  (subTopic_rawdata_temp, 2)]

2. iotmgmtFrom1.41To6.41.py
-* 從資料庫host為tc.evercomm.com(?)讀取iotmgmt.XXX資料後更新到host為其他資料庫的
   iotmgmt.XXX，其中XXX為某個table

3. ZigBee_raw2iotmgmt.py
- 從rawData.ZB讀取資料後更新到對應clusterId（cId）的table

4. power_API.py
- 如果是今天日期，就從rawData.RESTAPI，否則就從rawData2023.RESTAPI08讀取資料，然後經過一些
  數據處理寫入iotmgmt.pm
```
- iotmgmt.ultrasonicFlow2
```mermaid
    flowchart TD
    AAAA[iotmgmt.ultrasonicFlow2]
    A[MQTT_SubPPSSRaw.py] --> AAAA
    B[iotmgmtFrom1.41To6.41.py] --> AAAA
    C[ZigBee_raw2iotmgmt.py] --> AAAA
    D[rawData.ZB] --> C
    E[iotmgmt.ultrasonicFlow2] --> B
```
```
1. MQTT_SubPPSSRaw.py 
- 參考iotmgmt.pm裡的解說

2. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

3. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.dTemperature
```mermaid
    flowchart TD
    AAAA[iotmgmt.dTemperature]
    A[MQTT_SubPPSSRaw.py] --> AAAA
    B[iotmgmtFrom1.41To6.41.py] -->|replace|AAAA
    C[ZigBee_raw2iotmgmt.py] --> AAAA
    D[rawData.ZB] --> C
    E[iotmgmt.dTemperature] --> B
```
```
1. MQTT_SubPPSSRaw.py 
- 參考iotmgmt.pm裡的解說

2. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

3. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.gpio
```mermaid
    flowchart TD
    AAAA[iotmgmt.gpio]
    A[iotmgmtFrom1.41To6.41.py] -->|replace| AAAA
    B[ZigBee_raw2iotmgmt.py] --> AAAA
    C[rawData.ZB] -->B
    D[iotmgmt.gpio] --> A
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

2. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.co2
```mermaid
    flowchart TD
    AAAA[iotmgmt.co2]
    A[iotmgmtFrom1.41To6.41.py] -->|replace| AAAA
    B[ZigBee_raw2iotmgmt.py] --> AAAA
    C[rawData.ZB] -->B
    D[iotmgmt.co2] --> A
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

2. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.zigbeeRawModbus
```mermaid
    flowchart TD
    AAAA[iotmgmt.zigbeeRawModbus]
    A[iotmgmtFrom1.41To6.41.py] -->|replace|AAAA
    B[ZigBee_raw2iotmgmt.py] --> AAAA
    C[rawData.ZB] -->B
    D[iotmgmt.zigbeeRawModbus] --> A
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

2. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.waterQuality
```mermaid
    flowchart TD
    AAAA[iotmgmt.waterQuality]
    A[iotmgmtFrom1.41To6.41.py] -->|replace|AAAA
    B[ZigBee_raw2iotmgmt.py] --> AAAA
    C[rawData.ZB] -->B
    D[iotmgmt.waterQuality] --> A
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

2. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.ain
```mermaid
    flowchart TD
    AAAA[iotmgmt.ain]
    A[iotmgmtFrom1.41To6.41.py] -->|replace|AAAA
    B[iotmgmt.ain] --> A
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.flowTMR2RMT
```mermaid
    flowchart TD
    AAAA[iotmgmt.flowTMR2RMT]
    A[iotmgmtFrom1.41To6.41.py] -->|replace|AAAA
    B[flow_API.py] --> AAAA
    C[iotmgmt.flowTMR2RMT] --> A
    D[rawData.RESTAPI2023<br>/rawData.RESTAPI] --> B
```
```
1. iotmgmtFrom1.41To6.41.py
- 參考iotmgmt.pm裡的解說

2. flow_API.py
- 如果是今天日期，就從rawData.RESTAPI，否則就從rawData2023.RESTAPI08讀取資料，然後經過一些數據
  處理寫入iotmgmt.flowTMR2RMT
```
- iotmgmt.batTempHumidCo2
```mermaid
    flowchart TD
    AAAA[iotmgmt.batTempHumidCo2]
    A[ZigBee_raw2iotmgmt.py] --> AAAA
    B[rawData.ZB] -->A
```
```
1. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```
- iotmgmt.solarInverter2
```mermaid
    flowchart TD
    AAAA[iotmgmt.solarInverter2]
    A[ZigBee_raw2iotmgmt.py] --> AAAA
    B[rawData.ZB] -->A
```
```
1. ZigBee_raw2iotmgmt.py
- 參考iotmgmt.pm裡的解說
```

# mysql 41的dataETL資料來源
- dataETL.airQuality
```mermaid
    flowchart TD
    AAAA[dataETL.airQuality]
    A[airQuality_dataETL.py] -->|replace| AAAA
    B[co_dataETL.py] -->|replace| AAAA
    C[particle_dataETL.py] -->|replace| AAAA
    D[mgmtETL.Device] 
    E["iotdata2023.zigbeeRawModbus_XX<br>/ iotmgmt.zigbeeRawModbus<br>(視日期而定)"] --> A
    D ---|table用迴圈控制| E & F
    E  --> B
    F[iotmgmt.particle] --> C
    
```
```
1. airQuality_dataETL.py
- 從mgmtETL.Device讀取name,ieee和gatewayId後，使用for回圈控制每個element，根據每個element的
  ieee和gatewayId去iotmgmt.zigbeeRawModbus/iotdata2023.zigbeeRawModbus_08做讀取
- 接下來做一些數據處理後，replace到dataETL.airQuality

2. co_dataETL.py
- 與airQuality_dataETL.py差不多，但是差別在於數據處理的部分。

3. particle_dataETL.py
- 與airQuality_dataETL.py差不多，差別在於進入迴圈後的element讀取的table是iotmgmt.particle以及
  數據處理不相同。
```
- dataETL.environment
```mermaid
    flowchart TD
    AAAA[dataETL.environment]
    A[environment_dataETL.py] -->|replace| AAAA
    B[iotmgmt.zigbeeRawModbus] -->A
```
```
1. environment_dataETL.py
- 根據特定ieee(['00124b0019309c19','00124b0019309e7b'])去iotmgmt.zigbeeRawModbus讀取資料
- 接下來做一些數據處理然後replace到dataETL.environment
```
- dataETL.flow
```mermaid
    flowchart TD
    AAAA[dataETL.flow]
    A[flow_API_dataETL.py] -->|replace| AAAA
    B[mgmtETL.vDeviceInfo] --> A
    C[iotmgmt.flowTMR2RMT] --> A
    C ---|table用迴圈控制| B
```
```
1. flow_API_dataETL.py
- 從mgmtETL.vDeiceInfo讀取siteId, name, nameList,ieee,dataTableRaw後，接著使用for迴圈根據
  每個element的ieee從iotmgmt.flowTMR2RMT讀取資料
- 經過數據處理後將其replace搭配dataETL.flow
```
- dataETL.gas
```mermaid
    flowchart TD
    AAAA[dataETL.gas]
    A[gas_dataETL.py] -->|replace| AAAA
    B[mgmtETL.Device] --> A
    C["iotdata2023.zigbeeRawModbus_XX<br>/ iotmgmt.zigbeeRawModbus<br>(視日期而定)"] --> A
    B---|table用迴圈控制|C
```
```
1. gas_dataETL.py
- 從mgmtETL.Device裡讀取資料後根據每個element的gId、ieee以及modbusCmd去撈取
  iodmgmt.zigbeeRawModbus/iotdate2023.zigbeeRawModbus_08的資料後，經過一些數據處理replace
  到dataETL.gas
```
- dataETL.gpio
```mermaid
    flowchart TD
    AAAA[dataETL.gpio]
    A[gpio_dataETL.py] -->|replace| AAAA
    B[mgmtETL.Device] -->|table用迴圈控制| C
    C[iotmgmt.gpio] --> A
```
```
1. gpio_dataETL.py
- 從mgmtETL.Device裡讀取資料後根據每個element的gId和ieee去撈取iotmgmt.gpio資料後，經過一些
  數據處理replace到dataETL.gpio
```
- dataETL.power
```mermaid
    flowchart TD
    AAAA[dataETL.power]
    A[power_API_dataETL.py] -->|replace| AAAA
    B[power_dataETL.py] -->|replace| AAAA
    C[sigfox_API_dataETL.py] -->|replace| AAAA
    D[sindcon_API_dataETL.py] -->|replace| AAAA
    E[mgmtETL.Device] -->|table用迴圈控制| F[iotmgmt.pm]
    F --> A & B
    G[sigfoxAPI] --> C
    H[sindconAPI] --> D
```
```
1. power_API_dataETL.py
- 從mgmtETL.Device裡讀取資料後根據每個element的gId和ieee去撈取iotmgmt.pm資料後，經過一些
  數據處理replace到dataETL.power

2. power_dataETL.py
- 和power_API_dataETL.py差不多，
- 區別
    · power_dataETL.py的mgmtETL.Device取gatewayId>0，而power_API_dataETL.py去gatewaOd=170
    · 數據處理方法不同
    · replace的內容不同

3. sigfox_API_dataETL.py
- 根據指定的dev_dict去rawData.sigfoxAPI撈取資料後，做一些數據處理後replace到dataETL.power

4. sindcon_API_dataETL.py
- 跟sigfox_API_dataETL.py差不多
- 區別
    · dev_dict不同
    · table不同一個是rawData.sindconAPI，上面是rawData.sigfoxAPI
    · replace的內容不同
```
- dataETL.temp
```mermaid
    flowchart TD
    AAAA[dataETL.temp]
    A[temp_API_dataETL.py] -->|replace| AAAA
```
```
1. temp_API_dataETL.py
- 根據指定的uid_dict去data_url取得資料後，經過數據處理replace到dataETL.temp
```
- dataETL.twoInOne
```mermaid
    flowchart TD
    AAAA[dataETL.twoInOne]
    A[twoInOne_3-1_dataETL.py] -->|replace| AAAA
    B[twoInOne_3-2_dataETL.py] -->|replace| AAAA
    C[mgmtETL.Device]
    D[iotmgmt.co2]
    C -->|table用迴圈控制| D
    D --> A & B
```
```
1. twoInOne_3-1_dataETL.py
- 從mgmtETL.Device裡讀取資料後根據每個element的 name和ieee去iotmgmt.co2撈取資料後，做一些
  數據處理replace到dataETL.twoInOne

2. twoInOne_3-2_dataETL.py
- 跟twoInOne_3-1_dataETL.py差不多
- 區別
    · device logic不一樣，3-1是1,3-2是2
```
- dataETL.vibration
```mermaid
    flowchart TD
    AAAA[dataETL.vibration]
    A[vibration.py] -->|replace| AAAA
    B[mgmt.Device]
    C[iotmgmt.vibration]
    B -->|table用迴圈控制| C
    C --> A
```
```
1. vibration.py
- 從mgmtETL.Device裡讀取資料後根據每個element的gId和ieee去iotmgmt.vibration撈取資料後，
  做數據處理replace到dataETL.vibration
```
- dataETL.wetness
```mermaid
    flowchart TD
    AAAA[dataETL.wetness]
    A[wetness_dataETL.py] -->|replace| AAAA
    B[iotmgmt.zigbeeRawModbus] --> A
```
```
1. wetness_dataETL.py
- 根據特定的ieee去iotmgmt.zigbeeRawModbus撈取資料，做一些數據處理後replace到dataETL.wetness
```

# 公司程式2網址
https://hackmd.io/nBjlGsLAQ1Oz3CjR3aSbdg