# 公司程式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