bug fixes

This commit is contained in:
2020-06-12 15:37:03 -05:00
parent eb7da58d75
commit 714a872a08
9 changed files with 77 additions and 24 deletions

View File

@@ -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."

View File

@@ -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):

View File

@@ -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)
] ]

View File

@@ -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"

View File

@@ -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"})
] ]

View File

@@ -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"
} }

View File

@@ -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 = ""

View File

@@ -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",

View File

@@ -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)