From 714a872a08a48bbeaf0155c335f38adb08873d81 Mon Sep 17 00:00:00 2001 From: Nico Melone Date: Fri, 12 Jun 2020 15:37:03 -0500 Subject: [PATCH] bug fixes --- multisensor/multisensor.py | 2 +- piflow/PiFlow.py | 45 +++++++++++++++++++++++++++++----- piflow/Tags.py | 4 ++- plcfreshwater/Channel.py | 12 ++++----- plcfreshwater/Tags.py | 10 ++++---- plcfreshwater/config.txt | 2 +- plcfreshwater/plcfreshwater.py | 2 +- pondlevel/config.txt | 2 +- pondlevel/pondlevel.py | 22 +++++++++++++++-- 9 files changed, 77 insertions(+), 24 deletions(-) diff --git a/multisensor/multisensor.py b/multisensor/multisensor.py index d860e64..0f6e962 100644 --- a/multisensor/multisensor.py +++ b/multisensor/multisensor.py @@ -225,7 +225,7 @@ class start(threading.Thread, deviceBase): if write_cmd: read_val = read_tag(PLC_IP_ADDRESS, "input{}.deleteSuccess", plc_type="Micro800") if read_val[0] == 1: - self.read_pond_calibration(pond_number) + self.read_pond_calibration(input_number) return True return "Wrote everything successfully, but delete didn't succeed (Check input and point values)." return "Didn't write delete command correctly." diff --git a/piflow/PiFlow.py b/piflow/PiFlow.py index 2f80ccc..6738da0 100644 --- a/piflow/PiFlow.py +++ b/piflow/PiFlow.py @@ -19,9 +19,11 @@ GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(Relay_Ch1,GPIO.OUT) +GPIO.output(Relay_Ch1, GPIO.HIGH) GPIO.setup(Relay_Ch2,GPIO.OUT) +GPIO.output(Relay_Ch2, GPIO.HIGH) GPIO.setup(Relay_Ch3,GPIO.OUT) - +GPIO.output(Relay_Ch3, GPIO.HIGH) _ = None os.system('sudo timedatectl set-timezone America/Chicago') @@ -40,6 +42,8 @@ if not PERSIST: 'drive': 1, 'isVFD': False, 'drive_enabled': True, + 'state': False, + 'state_timer': 0, 'plc_ip': '192.168.1.12', 'yesterday_totalizer_1': dt.today().day, 'yesterday_totalizer_2': dt.today().day, @@ -52,6 +56,19 @@ if not PERSIST: 'yesterday_total_midnight_totalizer_3': 0 } 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'] try: @@ -151,12 +168,16 @@ class start(threading.Thread, deviceBase): else: for chan in CHANNELS: try: - for x in range(3): - val = chan.read() - if not val == None: - break + if chan.mesh_name == "remote_start": + val = PERSIST["state"] + else: + val = None + for _ in range(3): + temp = chan.read() + if not temp == None: + val = temp if val == None: - log.info("No modbus read sending previous value") + log.info("No modbus data sending previous value") val = chan.value if chan.mesh_name in ['totalizer_1','totalizer_2','totalizer_3']: right_now = dt.today() @@ -172,6 +193,11 @@ class start(threading.Thread, deviceBase): self.sendtodbDev(1, "run_status", "Running", 0, 'PiFlow') else: 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: if chan.check(val, self.force_send): self.sendtodbDev(1, chan.mesh_name, chan.value, 0, 'PiFlow') @@ -278,6 +304,10 @@ class start(threading.Thread, deviceBase): else: log.info("Sending START signal to Drive via relay {}".format(Relay_Ch1)) GPIO.output(Relay_Ch1,GPIO.LOW) + PERSIST["state"] = True + PERSIST["state_timer"] = time.time() + persistence.store(PERSIST,"persist.json") + return True def PiFlow_stop(self, name, value): @@ -287,6 +317,9 @@ class start(threading.Thread, deviceBase): else: log.info("Sending STOP signal to Drive") GPIO.output(Relay_Ch1,GPIO.HIGH) + PERSIST["state"] = False + PERSIST["state_timer"] = time.time() + persistence.store(PERSIST, "persist.json") return True def totalize(self,val, yesterday, day, hour, minute, yesterday_total_midnight, yesterday_total,channel): diff --git a/piflow/Tags.py b/piflow/Tags.py index 4a98d54..7a85fa5 100644 --- a/piflow/Tags.py +++ b/piflow/Tags.py @@ -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_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('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('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 ), @@ -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('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_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) ] diff --git a/plcfreshwater/Channel.py b/plcfreshwater/Channel.py index c9bf85d..9e308c7 100644 --- a/plcfreshwater/Channel.py +++ b/plcfreshwater/Channel.py @@ -33,7 +33,7 @@ def read_tag(addr, tag, plc_type="CLX"): log.error("Data Error during readTag({}, {}): {}".format(addr, tag, err)) except CommError: # err = c.get_status() - clx.close() + #clx.close() log.error("Could not connect during readTag({}, {})".format(addr, tag)) except AttributeError as err: clx.close() @@ -87,7 +87,7 @@ def write_tag(addr, tag, val, plc_type="CLX"): except CommError as err: clx_err = clx.get_status() log.error("--\nCommError during write_tag({}, {}, {}, plc_type={})\n{}\n--".format(addr, tag, val, plc_type, err)) - clx.close() + #clx.close() return False @@ -123,17 +123,17 @@ class Channel(object): elif self.value is None: send_needed = True 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: 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_reason = "value change" else: send_needed = True send_reason = "value change" - elif (time.time() - self.last_send_time) > self.guarantee_sec: - send_needed = True - send_reason = "guarantee sec" elif force_send: send_needed = True send_reason = "forced" diff --git a/plcfreshwater/Tags.py b/plcfreshwater/Tags.py index e45a63e..2bb12d3 100644 --- a/plcfreshwater/Tags.py +++ b/plcfreshwater/Tags.py @@ -4,9 +4,9 @@ from plcfreshwater import PLC_IP_ADDRESS tags = [ 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, "raw_hand_input","Raw_Hand_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"}), - 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_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", None: "Error"}), + 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, "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"), @@ -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_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, "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, "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", None: "Error"}) ] \ No newline at end of file diff --git a/plcfreshwater/config.txt b/plcfreshwater/config.txt index e96a11d..22ec924 100644 --- a/plcfreshwater/config.txt +++ b/plcfreshwater/config.txt @@ -8,7 +8,7 @@ "file4": "Tags.py" }, "deviceName": "plcfreshwater", - "releaseVersion": "9", + "releaseVersion": "10", "driverFileName": "plcfreshwater.py", "driverId": "0100" } \ No newline at end of file diff --git a/plcfreshwater/plcfreshwater.py b/plcfreshwater/plcfreshwater.py index 752115a..7f2b189 100644 --- a/plcfreshwater/plcfreshwater.py +++ b/plcfreshwater/plcfreshwater.py @@ -52,7 +52,7 @@ class start(threading.Thread, deviceBase): mqtt=mqtt, Nodes=Nodes) self.daemon = True - self.version = "9" + self.version = "10" self.finished = threading.Event() self.force_send = False self.public_ip_address = "" diff --git a/pondlevel/config.txt b/pondlevel/config.txt index df30f6b..7777507 100644 --- a/pondlevel/config.txt +++ b/pondlevel/config.txt @@ -2,7 +2,7 @@ "driverFileName": "pondlevel.py", "deviceName": "pondlevel", "driverId": "0130", - "releaseVersion": "7", + "releaseVersion": "8", "files": { "file1": "pondlevel.py", "file2": "calibration_db.py", diff --git a/pondlevel/pondlevel.py b/pondlevel/pondlevel.py index f578dcf..745f88a 100644 --- a/pondlevel/pondlevel.py +++ b/pondlevel/pondlevel.py @@ -28,8 +28,26 @@ temp_pl = pond_level['value'] temp_psi = psi_reading['value'] 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): """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) self.daemon = True - self.version = "7" + self.version = "8" self.finished = threading.Event() self.forceSend = False threading.Thread.start(self)