diff --git a/Pub_Sub/.DS_Store b/Pub_Sub/.DS_Store index e0056e9..23b7f2c 100644 Binary files a/Pub_Sub/.DS_Store and b/Pub_Sub/.DS_Store differ diff --git a/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_measures.csv b/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_measures.csv index 6915ff8..cfb1004 100644 --- a/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_measures.csv +++ b/Pub_Sub/dual_flowmeter/thingsboard/dual_flowmeter_measures.csv @@ -1,21 +1,21 @@ MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit -pump_1_daily_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_Daily_Flow_Rate_Total,2,1,ro,,,none,,,,,,,, -pump_1_run_status,Pond_A,dual_flowmeter,periodic,BIT,Pump_1_Run_Status,2,1,ro,,,none,,,,,,,, -pump_1_flowrate,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_SCL_Flow_Meter,2,1,ro,,,none,,,,,,,, -pump_1_yesterdays_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_Yesterdays_Total,2,1,ro,,,none,,,,,,,, -pump_1_prevmonth_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_PrevMonth_Total,2,1,ro,,,none,,,,,,,, -pump_1_month_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_Current_Month_Total,2,1,ro,,,none,,,,,,,, -pump_1_lifetime_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_1_Lifetime_Flow,2,1,ro,,,none,,,,,,,, -pump_1_suction,Pond_A,dual_flowmeter,periodic,FLOAT,Suction_PSI_TP1_Scaled,2,1,ro,,,none,,,,,,,, -pump_2_daily_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_Daily_Flow_Rate_Total,2,1,ro,,,none,,,,,,,, -pump_2_run_status,Pond_A,dual_flowmeter,periodic,BIT,Pump_2_Run_Status,2,1,ro,,,none,,,,,,,, -pump_2_flowrate,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_SCL_Flow_Meter,2,1,ro,,,none,,,,,,,, -pump_2_yesterdays_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_Yesterdays_Total,2,1,ro,,,none,,,,,,,, -pump_2_prevmonth_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_PrevMonth_Total,2,1,ro,,,none,,,,,,,, -pump_2_month_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_Current_Month_Total,2,1,ro,,,none,,,,,,,, -pump_2_lifetime_total,Pond_A,dual_flowmeter,periodic,FLOAT,Pump_2_Lifetime_Flow,2,1,ro,,,none,,,,,,,, -pump_2_suction,Pond_A,dual_flowmeter,periodic,FLOAT,Suction_PSI_TP2_Scaled,2,1,ro,,,none,,,,,,,, -pump_charge_psi_tp1,Pond_A,dual_flowmeter,periodic,FLOAT,Charge_PSI_TP1_Scaled,2,1,ro,,,none,,,,,,,, -pond_1_height,Pond_A,dual_flowmeter,periodic,FLOAT,Pond_level_TP1_Scaled,2,1,ro,,,none,,,,,,,, -pond_1_volume,Pond_A,dual_flowmeter,periodic,FLOAT,pond1Volume,2,1,ro,,,none,,,,,,,, -charge_pump_run_status,Pond_A,dual_flowmeter,periodic,BIT,CHARGE_PUMP_Run_Status,2,1,ro,,,none,,,,,,,, \ No newline at end of file +pump_1_daily_total,Tree_Pond,default,periodic,FLOAT,Pump_1_Daily_Flow_Rate_Total,2,1,ro,,,none,,,,,,,, +pump_1_run_status,Tree_Pond,default,periodic,BIT,Pump_1_Run_Status,2,1,ro,,,none,,,,,,,, +pump_1_flowrate,Tree_Pond,default,periodic,FLOAT,Pump_1_SCL_Flow_Meter,2,1,ro,,,none,,,,,,,, +pump_1_yesterdays_total,Tree_Pond,default,periodic,FLOAT,Pump_1_Yesterdays_Total,2,1,ro,,,none,,,,,,,, +pump_1_prevmonth_total,Tree_Pond,default,periodic,FLOAT,Pump_1_PrevMonth_Total,2,1,ro,,,none,,,,,,,, +pump_1_month_total,Tree_Pond,default,periodic,FLOAT,Pump_1_Current_Month_Total,2,1,ro,,,none,,,,,,,, +pump_1_lifetime_total,Tree_Pond,default,periodic,FLOAT,Pump_1_Lifetime_Flow,2,1,ro,,,none,,,,,,,, +pump_1_suction,Tree_Pond,default,periodic,FLOAT,Suction_PSI_TP1_Scaled,2,1,ro,,,none,,,,,,,, +pump_2_daily_total,Tree_Pond,default,periodic,FLOAT,Pump_2_Daily_Flow_Rate_Total,2,1,ro,,,none,,,,,,,, +pump_2_run_status,Tree_Pond,default,periodic,BIT,Pump_2_Run_Status,2,1,ro,,,none,,,,,,,, +pump_2_flowrate,Tree_Pond,default,periodic,FLOAT,Pump_2_SCL_Flow_Meter,2,1,ro,,,none,,,,,,,, +pump_2_yesterdays_total,Tree_Pond,default,periodic,FLOAT,Pump_2_Yesterdays_Total,2,1,ro,,,none,,,,,,,, +pump_2_prevmonth_total,Tree_Pond,default,periodic,FLOAT,Pump_2_PrevMonth_Total,2,1,ro,,,none,,,,,,,, +pump_2_month_total,Tree_Pond,default,periodic,FLOAT,Pump_2_Current_Month_Total,2,1,ro,,,none,,,,,,,, +pump_2_lifetime_total,Tree_Pond,default,periodic,FLOAT,Pump_2_Lifetime_Flow,2,1,ro,,,none,,,,,,,, +pump_2_suction,Tree_Pond,default,periodic,FLOAT,Suction_PSI_TP2_Scaled,2,1,ro,,,none,,,,,,,, +pump_charge_psi_tp1,Tree_Pond,default,periodic,FLOAT,Charge_PSI_TP1_Scaled,2,1,ro,,,none,,,,,,,, +pond_1_height,Tree_Pond,default,periodic,FLOAT,Pond_level_TP1_Scaled,2,1,ro,,,none,,,,,,,, +pond_1_volume,Tree_Pond,default,periodic,FLOAT,pond1Volume,2,1,ro,,,none,,,,,,,, +charge_pump_run_status,Tree_Pond,default,periodic,BIT,CHARGE_PUMP_Run_Status,2,1,ro,,,none,,,,,,,, \ No newline at end of file diff --git a/Pub_Sub/gateway/measure_gateway.csv b/Pub_Sub/gateway/measure_gateway.csv new file mode 100644 index 0000000..d0c64b4 --- /dev/null +++ b/Pub_Sub/gateway/measure_gateway.csv @@ -0,0 +1,15 @@ +MeasuringPointName,ControllerName,GroupName,UploadType,DataType,Address,Decimal,Len,ReadWrite,Unit,Description,Transform Type,MaxValue,MinValue,MaxScale,MinScale,Gain,Offset,startBit,endBit +scaled_flow_meter,Tree_13,default,periodic,FLOAT,Scaled_Flow_Meter,2,1,ro,,,none,,,,,,,, +scaled_pressure_transducer,Tree_13,default,periodic,FLOAT,Scaled_Pressure_Transducer,2,1,ro,,,none,,,,,,,, +raw_hand_input,Tree_13,default,periodic,BIT,Raw_Hand_Input,2,1,ro,,,none,,,,,,,, +raw_auto_input,Tree_13,default,periodic,BIT,Raw_Auto_Input,2,1,ro,,,none,,,,,,,, +raw_run_status,Tree_13,default,periodic,BIT,Raw_Run_Status,2,1,ro,,,none,,,,,,,, +raw_local_start,Tree_13,default,periodic,BIT,Raw_Local_Start,2,1,ro,,,none,,,,,,,, +lifetime_flow_meter_gal,Tree_13,default,periodic,FLOAT,Lifetime_Flow_Meter_Gal,2,1,ro,,,none,,,,,,,, +yesterday_flow_meter_gal,Tree_13,default,periodic,FLOAT,Totalizer_FM_Yesterday_Total_Gal,2,1,ro,,,none,,,,,,,, +today_flow_meter_gal,Tree_13,default,periodic,FLOAT,Totalizer_FM_Current_Day_Total_Gal,2,1,ro,,,none,,,,,,,, +last_month_flow_meter_gal,Tree_13,default,periodic,FLOAT,Totalizer_FM_Last_Month_Gal,2,1,ro,,,none,,,,,,,, +month_flow_meter_gal,Tree_13,default,periodic,FLOAT,Totalizer_FM_Current_Month_Gal,2,1,ro,,,none,,,,,,,, +spt_flow_meter_unit,Tree_13,default,periodic,BIT,SPT_Flow_Meter_Unit,2,1,ro,,,none,,,,,,,, +raw_overload_status,Tree_13,default,periodic,BIT,Raw_Overload_Status,2,1,ro,,,none,,,,,,,, +CMD_Cloud_Control,Tree_13,default,periodic,BIT,CMD_Cloud_Control,2,1,rw,,,none,,,,,,,, \ No newline at end of file diff --git a/Pub_Sub/gateway/ratliff_gateway.cfg b/Pub_Sub/gateway/thingsboard/v1/gateway_tb_v1.cfg similarity index 100% rename from Pub_Sub/gateway/ratliff_gateway.cfg rename to Pub_Sub/gateway/thingsboard/v1/gateway_tb_v1.cfg diff --git a/Pub_Sub/gateway/thingsboard/v1/pub/sendData.py b/Pub_Sub/gateway/thingsboard/v1/pub/sendData.py new file mode 100644 index 0000000..49eccd6 --- /dev/null +++ b/Pub_Sub/gateway/thingsboard/v1/pub/sendData.py @@ -0,0 +1,45 @@ +# Enter your python code. +import json +from datetime import datetime as dt +from common.Logger import logger +from quickfaas.remotebus import publish + + +def sendData(message): + #logger.debug(message) + # Extract measures and group by ctrlName + grouped_data = {} + grouped_attributes = {} + now = (round(dt.timestamp(dt.now())/600)*600)*1000 + for measure in message['measures']: + ctrlName = " ".join(measure['ctrlName'].split("_")) + name = measure['name'] + value = measure['value'] + health = measure['health'] + #Add controller for telemetry if it doesn't exist + if ctrlName not in grouped_data: + grouped_data[ctrlName] = {} + #Add controller for attributes if it doesn't exist + if ctrlName not in grouped_attributes: + grouped_attributes[ctrlName] = {} + #Add data to temp payload if datapoint health is good + if health: + grouped_data[ctrlName][name] = value + grouped_attributes[ctrlName]["latestReportTime"] = now + #print(grouped_data) + # Transform the grouped data to desired structure + payload = {} + + for key, value in grouped_data.items(): + if value: + payload[key] = [{"ts": now ,"values": value}] + attributes_payload = {} + for key, value in grouped_attributes.items(): + if value: + attributes_payload[key] = value + + + + #logger.debug(payload) + publish(__topic__, json.dumps(payload), __qos__) + publish("v1/gateway/attributes", json.dumps(attributes_payload), __qos__) \ No newline at end of file