Commit cb3673cd authored by HEV at MDTEC's avatar HEV at MDTEC

fix for HEV battery

parent e221df93
Pipeline #2909 failed with stages
{"calibration": {"label": "calibration", "last_performed": 1635348228, "cmd_code": "calib_rate", "message": "Ensure patient is disconnected from ventilator"}, "leak_test": {"label": "Leak Test", "last_performed": 1635348230, "cmd_code": "leak_test", "message": "Ensure patient is disconnected from ventilator"}} {"calibration": {"label": "calibration", "last_performed": 1635763157, "cmd_code": "calib_rate", "message": "Ensure patient is disconnected from ventilator"}, "leak_test": {"label": "Leak Test", "last_performed": 1635763159, "cmd_code": "leak_test", "message": "Ensure patient is disconnected from ventilator"}}
\ No newline at end of file \ No newline at end of file
...@@ -39,15 +39,24 @@ class BatteryHandler(PayloadHandler): ...@@ -39,15 +39,24 @@ class BatteryHandler(PayloadHandler):
except KeyError: except KeyError:
logging.debug("Keyerror in battery payload: 'bat'") logging.debug("Keyerror in battery payload: 'bat'")
try: if battery_data.has_key("bat85"):
new_status["battery_percent_1"] = int(battery_data["bat1_percent"]) try:
except KeyError: new_status["battery_percent_1"] = self.compute_battery_percent_hev(batter_data)
logging.debug("Keyerror in battery payload: 'bat1_percent'") new_status["battery_percent_2"] = 0
except KeyError:
try: logging.debug("Keyerror in battery payload: 'bat85'")
new_status["battery_percent_2"] = int(battery_data["bat2_percent"])
except KeyError: if battery_data.has_key("bat1_percent"):
logging.debug("Keyerror in battery payload: 'bat2_percent'") try:
new_status["battery_percent_1"] = int(battery_data["bat1_percent"])
except KeyError:
logging.debug("Keyerror in battery payload: 'bat1_percent'")
if battery_data.has_key("bat2_percent"):
try:
new_status["battery_percent_2"] = int(battery_data["bat2_percent"])
except KeyError:
logging.debug("Keyerror in battery payload: 'bat2_percent'")
try: try:
if battery_data["prob_elec"] == 0: if battery_data["prob_elec"] == 0:
...@@ -73,22 +82,22 @@ class BatteryHandler(PayloadHandler): ...@@ -73,22 +82,22 @@ class BatteryHandler(PayloadHandler):
self.UpdateBatteryDisplay.emit(self.__battery_status) self.UpdateBatteryDisplay.emit(self.__battery_status)
return 0 return 0
# def compute_battery_percent(self, battery_data: dict) -> float: def compute_battery_percent_hev(self, battery_data: dict) -> float:
# """ """
# Determine the current battery percentage from the information in battery_data. Determine the current battery percentage from the information in battery_data.
# As of 17/03/21 battery payloads only contain enough information to As of 17/03/21 battery payloads only contain enough information to
# determine if the battery is above or below 85% battery life. determine if the battery is above or below 85% battery life.
# Unless provided with specific information to the contrary, assume that the Unless provided with specific information to the contrary, assume that the
# battery is on 0% so that we should never overestimate how much remains. battery is on 0% so that we should never overestimate how much remains.
# """ """
# if battery_data["bat85"] == 1: if battery_data["bat85"] == 1:
# return 85.0 return 85.0
# elif battery_data["bat85"] == 0: elif battery_data["bat85"] == 0:
# return 0.0 return 0.0
# else: else:
# raise TypeError( raise TypeError(
# "Battery Percentage (entry 'bat85' in the battery payload) is not 1 or 2." "Battery Percentage (entry 'bat85' in the battery payload) is not 1 or 2."
# ) )
...@@ -31,12 +31,16 @@ from CommsCommon import BatteryFormat ...@@ -31,12 +31,16 @@ from CommsCommon import BatteryFormat
# Set up logging # Set up logging
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')
logging.getLogger().setLevel(logging.WARNING) logging.getLogger().setLevel(logging.WARNING)
isHEV = False
try: try:
import RPi.GPIO as gpio import RPi.GPIO as gpio
isHEV = True
except ModuleNotFoundError: except ModuleNotFoundError:
logging.warning("RPi gpio backend not found, will use dummy") logging.warning("RPi gpio backend not found, will use dummy")
from hevgpio import gpio from hevgpio import gpio
gpio = gpio() gpio = gpio()
isHEV = False
class BatteryLLI: class BatteryLLI:
...@@ -72,79 +76,88 @@ class BatteryLLI: ...@@ -72,79 +76,88 @@ class BatteryLLI:
async def main(self) -> None: async def main(self) -> None:
while True: while True:
await asyncio.sleep(self._timeout) await asyncio.sleep(self._timeout)
payload = BatteryFormat(dummy=self._dummy) if isHEV == True:
payload = HEVBatteryFormat(dummy=self._dummy)
# Get output from upower else :
# TODO: change this to use the upower python module
upower_out_list = os.popen("./../upower/upower22/src/upower_22").read().split('\n')
upower_out_dict = {}
for l in upower_out_list:
tmp = l.split("=")
if len(tmp) != 2:
logging.debug("Skipping upower output line: %s" % l)
continue
key = tmp[0].lstrip().rstrip()
value = tmp[1].lstrip().rstrip()
if key in upower_out_dict:
key += "_2"
upower_out_dict[key] = value
del upower_out_list
# set bat value payload = BatteryFormat(dummy=self._dummy)
payload_dict = {}
try: # Get output from upower
if upower_out_dict["AC Status"] == "No Plug": # TODO: change this to use the upower python module
payload_dict["ok"] = 1 upower_out_list = os.popen("./../upower/upower22/src/upower_22").read().split('\n')
upower_out_dict = {}
for l in upower_out_list:
tmp = l.split("=")
if len(tmp) != 2:
logging.debug("Skipping upower output line: %s" % l)
continue
key = tmp[0].lstrip().rstrip()
value = tmp[1].lstrip().rstrip()
if key in upower_out_dict:
key += "_2"
upower_out_dict[key] = value
del upower_out_list
# set bat value
payload_dict = {}
try:
if upower_out_dict["AC Status"] == "No Plug":
payload_dict["ok"] = 1
payload_dict["bat"] = 0
else:
payload_dict["ok"] = 0
payload_dict["bat"] = 1
except KeyError:
logging.warning("No key 'AC Status' in upower output")
payload_dict["ok"] = 0
payload_dict["bat"] = 0 payload_dict["bat"] = 0
# set bat85 value
try:
payload_dict["bat1_percent"] = int(
upower_out_dict["RemainPercent"].rstrip("%")
)
except KeyError:
logging.warning("No key 'RemainPercent' in upower output")
payload_dict["bat1_percent"] = 0
try:
payload_dict["bat2_percent"] = int(
upower_out_dict["RemainPercent_2"].rstrip("%")
)
except KeyError:
logging.warning("No key 'RemainPercent_2' in upower output")
payload_dict["bat2_percent"] = 0
total_batt = payload_dict["bat1_percent"] + payload_dict["bat2_percent"]
if total_batt >= 85:
payload_dict["bat85"] = 1
else: else:
payload_dict["ok"] = 0 payload_dict["bat85"] = 0
payload_dict["bat"] = 1
except KeyError: # dummy_payload_dict = {
logging.warning("No key 'AC Status' in upower output") # "bat":1,
payload_dict["ok"] = 0 # "ok":0,
payload_dict["bat"] = 0 # "alarm":0,
# "rdy2buf":0,
# "bat85":1,
# "prob_elec":0,
# "dummy":True,
# "bat1_percent":13,
# "bat2_percent":93,
# }
# Construct payload
for key in payload_dict:
setattr(payload, key, payload_dict[key])
# set bat85 value
try: try:
payload_dict["bat1_percent"] = int( if isHEV == True:
upower_out_dict["RemainPercent"].rstrip("%")
)
except KeyError:
logging.warning("No key 'RemainPercent' in upower output")
payload_dict["bat1_percent"] = 0
try: for pin in self._pins:
payload_dict["bat2_percent"] = int( setattr(payload, pin, gpio.input(self._pins[pin]))
upower_out_dict["RemainPercent_2"].rstrip("%")
)
except KeyError:
logging.warning("No key 'RemainPercent_2' in upower output")
payload_dict["bat2_percent"] = 0
total_batt = payload_dict["bat1_percent"] + payload_dict["bat2_percent"]
if total_batt >= 85:
payload_dict["bat85"] = 1
else:
payload_dict["bat85"] = 0
# dummy_payload_dict = {
# "bat":1,
# "ok":0,
# "alarm":0,
# "rdy2buf":0,
# "bat85":1,
# "prob_elec":0,
# "dummy":True,
# "bat1_percent":13,
# "bat2_percent":93,
# }
# Construct payload
for key in payload_dict:
setattr(payload, key, payload_dict[key])
try:
self.queue.put_nowait(payload) self.queue.put_nowait(payload)
except asyncio.queues.QueueFull: except asyncio.queues.QueueFull:
try: try:
......
...@@ -873,7 +873,7 @@ class LogMsgFormat(PayloadFormat): ...@@ -873,7 +873,7 @@ class LogMsgFormat(PayloadFormat):
# BATTERY data payload # BATTERY data payload
# ======================================= # =======================================
@dataclass @dataclass
class OldBatteryFormat(PayloadFormat): class HEVBatteryFormat(PayloadFormat):
_dataStruct = Struct("<BIBbbbbbbb") _dataStruct = Struct("<BIBbbbbbbb")
payload_type: PAYLOAD_TYPE = PAYLOAD_TYPE.BATTERY payload_type: PAYLOAD_TYPE = PAYLOAD_TYPE.BATTERY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment