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"}}
\ No newline at end of file
{"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
......@@ -39,15 +39,24 @@ class BatteryHandler(PayloadHandler):
except KeyError:
logging.debug("Keyerror in battery payload: 'bat'")
try:
new_status["battery_percent_1"] = int(battery_data["bat1_percent"])
except KeyError:
logging.debug("Keyerror in battery payload: 'bat1_percent'")
try:
new_status["battery_percent_2"] = int(battery_data["bat2_percent"])
except KeyError:
logging.debug("Keyerror in battery payload: 'bat2_percent'")
if battery_data.has_key("bat85"):
try:
new_status["battery_percent_1"] = self.compute_battery_percent_hev(batter_data)
new_status["battery_percent_2"] = 0
except KeyError:
logging.debug("Keyerror in battery payload: 'bat85'")
if battery_data.has_key("bat1_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:
if battery_data["prob_elec"] == 0:
......@@ -73,22 +82,22 @@ class BatteryHandler(PayloadHandler):
self.UpdateBatteryDisplay.emit(self.__battery_status)
return 0
# def compute_battery_percent(self, battery_data: dict) -> float:
# """
# Determine the current battery percentage from the information in battery_data.
# As of 17/03/21 battery payloads only contain enough information to
# determine if the battery is above or below 85% battery life.
# Unless provided with specific information to the contrary, assume that the
# battery is on 0% so that we should never overestimate how much remains.
# """
# if battery_data["bat85"] == 1:
# return 85.0
# elif battery_data["bat85"] == 0:
# return 0.0
# else:
# raise TypeError(
# "Battery Percentage (entry 'bat85' in the battery payload) is not 1 or 2."
# )
def compute_battery_percent_hev(self, battery_data: dict) -> float:
"""
Determine the current battery percentage from the information in battery_data.
As of 17/03/21 battery payloads only contain enough information to
determine if the battery is above or below 85% battery life.
Unless provided with specific information to the contrary, assume that the
battery is on 0% so that we should never overestimate how much remains.
"""
if battery_data["bat85"] == 1:
return 85.0
elif battery_data["bat85"] == 0:
return 0.0
else:
raise TypeError(
"Battery Percentage (entry 'bat85' in the battery payload) is not 1 or 2."
)
......@@ -31,12 +31,16 @@ from CommsCommon import BatteryFormat
# Set up logging
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')
logging.getLogger().setLevel(logging.WARNING)
isHEV = False
try:
import RPi.GPIO as gpio
isHEV = True
except ModuleNotFoundError:
logging.warning("RPi gpio backend not found, will use dummy")
from hevgpio import gpio
gpio = gpio()
isHEV = False
class BatteryLLI:
......@@ -72,79 +76,88 @@ class BatteryLLI:
async def main(self) -> None:
while True:
await asyncio.sleep(self._timeout)
payload = BatteryFormat(dummy=self._dummy)
# Get output from upower
# 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
if isHEV == True:
payload = HEVBatteryFormat(dummy=self._dummy)
else :
# set bat value
payload_dict = {}
try:
if upower_out_dict["AC Status"] == "No Plug":
payload_dict["ok"] = 1
payload = BatteryFormat(dummy=self._dummy)
# Get output from upower
# 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_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
# 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:
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["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])
# 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
if isHEV == True:
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:
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])
for pin in self._pins:
setattr(payload, pin, gpio.input(self._pins[pin]))
try:
self.queue.put_nowait(payload)
except asyncio.queues.QueueFull:
try:
......
......@@ -873,7 +873,7 @@ class LogMsgFormat(PayloadFormat):
# BATTERY data payload
# =======================================
@dataclass
class OldBatteryFormat(PayloadFormat):
class HEVBatteryFormat(PayloadFormat):
_dataStruct = Struct("<BIBbbbbbbb")
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