bug fixes
This commit is contained in:
@@ -225,7 +225,7 @@ class start(threading.Thread, deviceBase):
|
|||||||
if write_cmd:
|
if write_cmd:
|
||||||
read_val = read_tag(PLC_IP_ADDRESS, "input{}.deleteSuccess", plc_type="Micro800")
|
read_val = read_tag(PLC_IP_ADDRESS, "input{}.deleteSuccess", plc_type="Micro800")
|
||||||
if read_val[0] == 1:
|
if read_val[0] == 1:
|
||||||
self.read_pond_calibration(pond_number)
|
self.read_pond_calibration(input_number)
|
||||||
return True
|
return True
|
||||||
return "Wrote everything successfully, but delete didn't succeed (Check input and point values)."
|
return "Wrote everything successfully, but delete didn't succeed (Check input and point values)."
|
||||||
return "Didn't write delete command correctly."
|
return "Didn't write delete command correctly."
|
||||||
|
|||||||
@@ -19,9 +19,11 @@ GPIO.setwarnings(False)
|
|||||||
GPIO.setmode(GPIO.BCM)
|
GPIO.setmode(GPIO.BCM)
|
||||||
|
|
||||||
GPIO.setup(Relay_Ch1,GPIO.OUT)
|
GPIO.setup(Relay_Ch1,GPIO.OUT)
|
||||||
|
GPIO.output(Relay_Ch1, GPIO.HIGH)
|
||||||
GPIO.setup(Relay_Ch2,GPIO.OUT)
|
GPIO.setup(Relay_Ch2,GPIO.OUT)
|
||||||
|
GPIO.output(Relay_Ch2, GPIO.HIGH)
|
||||||
GPIO.setup(Relay_Ch3,GPIO.OUT)
|
GPIO.setup(Relay_Ch3,GPIO.OUT)
|
||||||
|
GPIO.output(Relay_Ch3, GPIO.HIGH)
|
||||||
|
|
||||||
_ = None
|
_ = None
|
||||||
os.system('sudo timedatectl set-timezone America/Chicago')
|
os.system('sudo timedatectl set-timezone America/Chicago')
|
||||||
@@ -40,6 +42,8 @@ if not PERSIST:
|
|||||||
'drive': 1,
|
'drive': 1,
|
||||||
'isVFD': False,
|
'isVFD': False,
|
||||||
'drive_enabled': True,
|
'drive_enabled': True,
|
||||||
|
'state': False,
|
||||||
|
'state_timer': 0,
|
||||||
'plc_ip': '192.168.1.12',
|
'plc_ip': '192.168.1.12',
|
||||||
'yesterday_totalizer_1': dt.today().day,
|
'yesterday_totalizer_1': dt.today().day,
|
||||||
'yesterday_totalizer_2': dt.today().day,
|
'yesterday_totalizer_2': dt.today().day,
|
||||||
@@ -52,6 +56,19 @@ if not PERSIST:
|
|||||||
'yesterday_total_midnight_totalizer_3': 0
|
'yesterday_total_midnight_totalizer_3': 0
|
||||||
}
|
}
|
||||||
persistence.store(PERSIST, 'persist.json')
|
persistence.store(PERSIST, 'persist.json')
|
||||||
|
try:
|
||||||
|
if time.time() - PERSIST['state_timer'] >= 60:
|
||||||
|
GPIO.output(Relay_Ch1, GPIO.HIGH)
|
||||||
|
PERSIST['state'] = False
|
||||||
|
persistence.store(PERSIST, "persist.json")
|
||||||
|
elif PERSIST['state']:
|
||||||
|
GPIO.output(Relay_Ch1, GPIO.LOW)
|
||||||
|
else:
|
||||||
|
GPIO.output(Relay_Ch1, GPIO.HIGH)
|
||||||
|
except:
|
||||||
|
PERSIST['state'] = False
|
||||||
|
PERSIST['state_time'] = time.time()
|
||||||
|
persistence.store(PERSIST, "persist.json")
|
||||||
|
|
||||||
drive_enabled = PERSIST['drive_enabled']
|
drive_enabled = PERSIST['drive_enabled']
|
||||||
try:
|
try:
|
||||||
@@ -151,12 +168,16 @@ class start(threading.Thread, deviceBase):
|
|||||||
else:
|
else:
|
||||||
for chan in CHANNELS:
|
for chan in CHANNELS:
|
||||||
try:
|
try:
|
||||||
for x in range(3):
|
if chan.mesh_name == "remote_start":
|
||||||
val = chan.read()
|
val = PERSIST["state"]
|
||||||
if not val == None:
|
else:
|
||||||
break
|
val = None
|
||||||
|
for _ in range(3):
|
||||||
|
temp = chan.read()
|
||||||
|
if not temp == None:
|
||||||
|
val = temp
|
||||||
if val == None:
|
if val == None:
|
||||||
log.info("No modbus read sending previous value")
|
log.info("No modbus data sending previous value")
|
||||||
val = chan.value
|
val = chan.value
|
||||||
if chan.mesh_name in ['totalizer_1','totalizer_2','totalizer_3']:
|
if chan.mesh_name in ['totalizer_1','totalizer_2','totalizer_3']:
|
||||||
right_now = dt.today()
|
right_now = dt.today()
|
||||||
@@ -172,6 +193,11 @@ class start(threading.Thread, deviceBase):
|
|||||||
self.sendtodbDev(1, "run_status", "Running", 0, 'PiFlow')
|
self.sendtodbDev(1, "run_status", "Running", 0, 'PiFlow')
|
||||||
else:
|
else:
|
||||||
self.sendtodbDev(1,"run_status", "Stopped", 0, 'PiFlow')
|
self.sendtodbDev(1,"run_status", "Stopped", 0, 'PiFlow')
|
||||||
|
elif chan.mesh_name == "remote_start":
|
||||||
|
if chan.check(val, self.force_send):
|
||||||
|
self.sendtodbDev(1, chan.mesh_name, chan.value, 0, 'PiFlow')
|
||||||
|
PERSIST["state_timer"] = time.time()
|
||||||
|
persistence.store(PERSIST, "persist.json")
|
||||||
else:
|
else:
|
||||||
if chan.check(val, self.force_send):
|
if chan.check(val, self.force_send):
|
||||||
self.sendtodbDev(1, chan.mesh_name, chan.value, 0, 'PiFlow')
|
self.sendtodbDev(1, chan.mesh_name, chan.value, 0, 'PiFlow')
|
||||||
@@ -278,6 +304,10 @@ class start(threading.Thread, deviceBase):
|
|||||||
else:
|
else:
|
||||||
log.info("Sending START signal to Drive via relay {}".format(Relay_Ch1))
|
log.info("Sending START signal to Drive via relay {}".format(Relay_Ch1))
|
||||||
GPIO.output(Relay_Ch1,GPIO.LOW)
|
GPIO.output(Relay_Ch1,GPIO.LOW)
|
||||||
|
PERSIST["state"] = True
|
||||||
|
PERSIST["state_timer"] = time.time()
|
||||||
|
persistence.store(PERSIST,"persist.json")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def PiFlow_stop(self, name, value):
|
def PiFlow_stop(self, name, value):
|
||||||
@@ -287,6 +317,9 @@ class start(threading.Thread, deviceBase):
|
|||||||
else:
|
else:
|
||||||
log.info("Sending STOP signal to Drive")
|
log.info("Sending STOP signal to Drive")
|
||||||
GPIO.output(Relay_Ch1,GPIO.HIGH)
|
GPIO.output(Relay_Ch1,GPIO.HIGH)
|
||||||
|
PERSIST["state"] = False
|
||||||
|
PERSIST["state_timer"] = time.time()
|
||||||
|
persistence.store(PERSIST, "persist.json")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def totalize(self,val, yesterday, day, hour, minute, yesterday_total_midnight, yesterday_total,channel):
|
def totalize(self,val, yesterday, day, hour, minute, yesterday_total_midnight, yesterday_total,channel):
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ else:
|
|||||||
ModbusChannel('totalizer_1_units', 4603, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
ModbusChannel('totalizer_1_units', 4603, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
ModbusChannel('totalizer_2_units', 4604, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
ModbusChannel('totalizer_2_units', 4604, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
ModbusChannel('totalizer_3_units', 4605, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
ModbusChannel('totalizer_3_units', 4605, 'INTEGER', 1,86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
|
ModbusChannel('remote_start', 0000, 'INTEGER', 1, 86400, channel_size=1, unit_number=flowmeter_unit_number),
|
||||||
ModbusChannel('run_status', 772, 'STRING', 0, 3600, channel_size=1, unit_number=drive_unit_number, transform_fn=status_codes),
|
ModbusChannel('run_status', 772, 'STRING', 0, 3600, channel_size=1, unit_number=drive_unit_number, transform_fn=status_codes),
|
||||||
ModbusChannel('frequency', 784, 'INTEGER', 2, 3600, channel_size=2, unit_number=drive_unit_number,scaling=2 ),
|
ModbusChannel('frequency', 784, 'INTEGER', 2, 3600, channel_size=2, unit_number=drive_unit_number,scaling=2 ),
|
||||||
ModbusChannel('current', 783, 'INTEGER', 2, 3600, channel_size=2, unit_number=drive_unit_number,scaling=1 ),
|
ModbusChannel('current', 783, 'INTEGER', 2, 3600, channel_size=2, unit_number=drive_unit_number,scaling=1 ),
|
||||||
@@ -77,7 +78,8 @@ else:
|
|||||||
ModbusChannel('volume_flow_units', 2102, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=volume_units),
|
ModbusChannel('volume_flow_units', 2102, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=volume_units),
|
||||||
ModbusChannel('totalizer_1_units', 4603, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
ModbusChannel('totalizer_1_units', 4603, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
ModbusChannel('totalizer_2_units', 4604, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
ModbusChannel('totalizer_2_units', 4604, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
ModbusChannel('totalizer_3_units', 4605, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units)
|
ModbusChannel('totalizer_3_units', 4605, 'INTEGER', 1, 86400,channel_size=1, unit_number=flowmeter_unit_number, transform_fn=totalizer_units),
|
||||||
|
ModbusChannel('remote_start', 0000, 'BOOL', 1, 86400, channel_size=1, unit_number=flowmeter_unit_number)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ def read_tag(addr, tag, plc_type="CLX"):
|
|||||||
log.error("Data Error during readTag({}, {}): {}".format(addr, tag, err))
|
log.error("Data Error during readTag({}, {}): {}".format(addr, tag, err))
|
||||||
except CommError:
|
except CommError:
|
||||||
# err = c.get_status()
|
# err = c.get_status()
|
||||||
clx.close()
|
#clx.close()
|
||||||
log.error("Could not connect during readTag({}, {})".format(addr, tag))
|
log.error("Could not connect during readTag({}, {})".format(addr, tag))
|
||||||
except AttributeError as err:
|
except AttributeError as err:
|
||||||
clx.close()
|
clx.close()
|
||||||
@@ -87,7 +87,7 @@ def write_tag(addr, tag, val, plc_type="CLX"):
|
|||||||
except CommError as err:
|
except CommError as err:
|
||||||
clx_err = clx.get_status()
|
clx_err = clx.get_status()
|
||||||
log.error("--\nCommError during write_tag({}, {}, {}, plc_type={})\n{}\n--".format(addr, tag, val, plc_type, err))
|
log.error("--\nCommError during write_tag({}, {}, {}, plc_type={})\n{}\n--".format(addr, tag, val, plc_type, err))
|
||||||
clx.close()
|
#clx.close()
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
@@ -123,17 +123,17 @@ class Channel(object):
|
|||||||
elif self.value is None:
|
elif self.value is None:
|
||||||
send_needed = True
|
send_needed = True
|
||||||
send_reason = "no value"
|
send_reason = "no value"
|
||||||
|
elif (time.time() - self.last_send_time) > self.guarantee_sec:
|
||||||
|
send_needed = True
|
||||||
|
send_reason = "guarantee sec"
|
||||||
elif self.value != new_value:
|
elif self.value != new_value:
|
||||||
if self.map_:
|
if self.map_:
|
||||||
if not self.value == self.map_[new_value]:
|
if (not self.value == self.map_[new_value]) or force_send:
|
||||||
send_needed = True
|
send_needed = True
|
||||||
send_reason = "value change"
|
send_reason = "value change"
|
||||||
else:
|
else:
|
||||||
send_needed = True
|
send_needed = True
|
||||||
send_reason = "value change"
|
send_reason = "value change"
|
||||||
elif (time.time() - self.last_send_time) > self.guarantee_sec:
|
|
||||||
send_needed = True
|
|
||||||
send_reason = "guarantee sec"
|
|
||||||
elif force_send:
|
elif force_send:
|
||||||
send_needed = True
|
send_needed = True
|
||||||
send_reason = "forced"
|
send_reason = "forced"
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ from plcfreshwater import PLC_IP_ADDRESS
|
|||||||
tags = [
|
tags = [
|
||||||
PLCChannel(PLC_IP_ADDRESS, "scaled_flow_meter","Scaled_Flow_Meter","REAL", 3, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "scaled_flow_meter","Scaled_Flow_Meter","REAL", 3, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "scaled_pressure_transducer","Scaled_Pressure_Transducer","REAL", 3, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "scaled_pressure_transducer","Scaled_Pressure_Transducer","REAL", 3, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "raw_hand_input","Raw_Hand_Input","BOOL", 1, 7200, plc_type="Micro800", map_={0: "Off", 1: "On"}),
|
PLCChannel(PLC_IP_ADDRESS, "raw_hand_input","Raw_Hand_Input","BOOL", 1, 7200, plc_type="Micro800", map_={0: "Off", 1: "On", None: "Error"}),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "raw_auto_input","Raw_Auto_Input","BOOL", 1, 7200, plc_type="Micro800", map_={0: "Off", 1: "On"}),
|
PLCChannel(PLC_IP_ADDRESS, "raw_auto_input","Raw_Auto_Input","BOOL", 1, 7200, plc_type="Micro800", map_={0: "Off", 1: "On", None: "Error"}),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "raw_run_status","Raw_Run_Status","BOOL", 1, 3600, plc_type="Micro800", map_={0: "Stopped", 1: "Running"}),
|
PLCChannel(PLC_IP_ADDRESS, "raw_run_status","Raw_Run_Status","BOOL", 1, 3600, plc_type="Micro800", map_={0: "Stopped", 1: "Running", None: "Error"}),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "raw_local_start","Raw_Local_Start","BOOL", 1, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "raw_local_start","Raw_Local_Start","BOOL", 1, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "lifetime_flow_meter_gal","Lifetime_Flow_Meter_Gal","REAL", 1000, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "lifetime_flow_meter_gal","Lifetime_Flow_Meter_Gal","REAL", 1000, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "total_fm_yesterday_gal","Totalizer_FM_Yesterday_Total_Gal","REAL", 50, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "total_fm_yesterday_gal","Totalizer_FM_Yesterday_Total_Gal","REAL", 50, 3600, plc_type="Micro800"),
|
||||||
@@ -18,6 +18,6 @@ tags = [
|
|||||||
PLCChannel(PLC_IP_ADDRESS, "total_fm_last_month_bbls","Totalizer_FM_Last_Month_BBLs","REAL", 100, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "total_fm_last_month_bbls","Totalizer_FM_Last_Month_BBLs","REAL", 100, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "total_fm_month_bbls","Totalizer_FM_Current_Month_BBLs","REAL", 50, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "total_fm_month_bbls","Totalizer_FM_Current_Month_BBLs","REAL", 50, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "lifetime_flow_meter_bbls","Lifetime_Flow_Meter_BBLS","REAL", 1000, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "lifetime_flow_meter_bbls","Lifetime_Flow_Meter_BBLS","REAL", 1000, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "spt_flow_meter_unit","SPT_Flow_Meter_Unit","BOOL", `0`, 3600, plc_type="Micro800"),
|
PLCChannel(PLC_IP_ADDRESS, "spt_flow_meter_unit","SPT_Flow_Meter_Unit","BOOL", 0, 3600, plc_type="Micro800"),
|
||||||
PLCChannel(PLC_IP_ADDRESS, "raw_overload_status", "Raw_Overload_Status", "BOOL", `0`, 3600, plc_type="Micro800", map_={0: "Good", 1: "Down on Overload Tripped"})
|
PLCChannel(PLC_IP_ADDRESS, "raw_overload_status", "Raw_Overload_Status", "BOOL", 0, 3600, plc_type="Micro800", map_={0: "Good", 1: "Down on Overload Tripped", None: "Error"})
|
||||||
]
|
]
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
"file4": "Tags.py"
|
"file4": "Tags.py"
|
||||||
},
|
},
|
||||||
"deviceName": "plcfreshwater",
|
"deviceName": "plcfreshwater",
|
||||||
"releaseVersion": "9",
|
"releaseVersion": "10",
|
||||||
"driverFileName": "plcfreshwater.py",
|
"driverFileName": "plcfreshwater.py",
|
||||||
"driverId": "0100"
|
"driverId": "0100"
|
||||||
}
|
}
|
||||||
@@ -52,7 +52,7 @@ class start(threading.Thread, deviceBase):
|
|||||||
mqtt=mqtt, Nodes=Nodes)
|
mqtt=mqtt, Nodes=Nodes)
|
||||||
|
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self.version = "9"
|
self.version = "10"
|
||||||
self.finished = threading.Event()
|
self.finished = threading.Event()
|
||||||
self.force_send = False
|
self.force_send = False
|
||||||
self.public_ip_address = ""
|
self.public_ip_address = ""
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"driverFileName": "pondlevel.py",
|
"driverFileName": "pondlevel.py",
|
||||||
"deviceName": "pondlevel",
|
"deviceName": "pondlevel",
|
||||||
"driverId": "0130",
|
"driverId": "0130",
|
||||||
"releaseVersion": "7",
|
"releaseVersion": "8",
|
||||||
"files": {
|
"files": {
|
||||||
"file1": "pondlevel.py",
|
"file1": "pondlevel.py",
|
||||||
"file2": "calibration_db.py",
|
"file2": "calibration_db.py",
|
||||||
|
|||||||
@@ -28,8 +28,26 @@ temp_pl = pond_level['value']
|
|||||||
temp_psi = psi_reading['value']
|
temp_psi = psi_reading['value']
|
||||||
|
|
||||||
scaling_persist = persistence.load(filename="scaling_persist.json")
|
scaling_persist = persistence.load(filename="scaling_persist.json")
|
||||||
strapping_persist = persistence.load(filename="strapping_persist.json")
|
if not scaling_persist:
|
||||||
|
scaling_persist = {
|
||||||
|
"psi_raw_min": 0.0,
|
||||||
|
"eu_min": 0.0,
|
||||||
|
"psi_eu_min": 0.0,
|
||||||
|
"raw_max": 20.0,
|
||||||
|
"psi_raw_max": 10.0,
|
||||||
|
"raw_min": 4.0,
|
||||||
|
"eu_offset": 2.0,
|
||||||
|
"psi_eu_max": 600.0,
|
||||||
|
"eu_max": 23.068
|
||||||
|
}
|
||||||
|
persistence.store(scaling_persist, "scaling_persist.json")
|
||||||
|
|
||||||
|
strapping_persist = persistence.load(filename="strapping_persist.json")
|
||||||
|
if not strapping_persist:
|
||||||
|
strapping_persist = {
|
||||||
|
"0": 0
|
||||||
|
}
|
||||||
|
persistence.store(strapping_persist, "strapping_persist.json")
|
||||||
|
|
||||||
def scale_to_eu(inp_measurement, raw_max, raw_min, eu_max, eu_min, offset=0.0):
|
def scale_to_eu(inp_measurement, raw_max, raw_min, eu_max, eu_min, offset=0.0):
|
||||||
"""Scale the inp_measurement to engineering units."""
|
"""Scale the inp_measurement to engineering units."""
|
||||||
@@ -48,7 +66,7 @@ class start(threading.Thread, deviceBase):
|
|||||||
deviceBase.__init__(self, name=name, number=number, mac=mac, Q=Q, mcu=mcu, companyId=companyId, offset=offset, mqtt=mqtt, Nodes=Nodes)
|
deviceBase.__init__(self, name=name, number=number, mac=mac, Q=Q, mcu=mcu, companyId=companyId, offset=offset, mqtt=mqtt, Nodes=Nodes)
|
||||||
|
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self.version = "7"
|
self.version = "8"
|
||||||
self.finished = threading.Event()
|
self.finished = threading.Event()
|
||||||
self.forceSend = False
|
self.forceSend = False
|
||||||
threading.Thread.start(self)
|
threading.Thread.start(self)
|
||||||
|
|||||||
Reference in New Issue
Block a user