Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UPS HAT does not shut down #33

Open
tve opened this issue Oct 3, 2022 · 1 comment
Open

UPS HAT does not shut down #33

tve opened this issue Oct 3, 2022 · 1 comment

Comments

@tve
Copy link

tve commented Oct 3, 2022

I'm having difficulties getting the UPS HAT to shut down early enough.

Expected functionality: I want the device to shut down when the battery voltage is in the 3V-3.2V range.
Programming: set_safe_shutdown_battery_level(5)
Observed functionality: the device does not shut down.

Details:

  • after dealing with issue bogus battery voltage? #32 I placed a fresh protected 2650mAh 18650 into the HAT
  • I fully charged the battery in the HAT, then unplugged power and let the battery run down
  • when I came back to check, the rPi was "dead", however, the rPi LEDs were flickering in about a 5-second cycle
  • battery voltage (multimeter measure) was around 2.5V (basically where the battery protection cuts out)
  • voltage on the rPi 40-pin header's 5V pins was fluctuating between 2.5V and 2.9V
  • this is not good!!
  • I took the battery out and charged it to see how much charge would go in, my charger reported 2520mAh
  • I placed the battery back into the rPi and used set_safe_shutdown_battery_level(5)
  • I then ran the rPi back down on battery, but was connected (SSH) printing the battery stats
  • the result is that the power API clearly shows "safe shutdown battery level" being set at 5% yet "level" drops below 5% and the rPi doesn't shut down
  • I ran this over night, in the morning the battery voltage (mutimeter measure) was 2.5V

Here's the log starting with 3 iterations at the beginning (the rPi had been running for a few minutes already, that's why level starts at 95%):

$ while true; do date; ./ups_test.py; sleep 300; done
Mon Oct  3 02:23:42 EDT 2022                                                                        
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 28.37, "voltage": 0.0, "current": 0.0, "power": 0
.0}, "system": {"temp": 40.2, "voltage": 5.176, "current": 0.318, "power": 1.632}, "battery": {"temp
": 28.5, "voltage": 4.07, "current": -0.478, "power": -1.945, "level": 96, "health": 90, "max_charge
_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6855, "health": 1}}    
Mon Oct  3 02:28:42 EDT 2022                                                                        
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 28.5, "voltage": 0.0, "current": 0.0, "power": 0.
0}, "system": {"temp": 40.8, "voltage": 5.176, "current": 0.309, "power": 1.632}, "battery": {"temp"
: 28.87, "voltage": 4.05, "current": -0.48, "power": -1.944, "level": 95, "health": 90, "max_charge_
level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6870, "health": 1}}     
Mon Oct  3 02:33:43 EDT 2022                                                                        
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 28.37, "voltage": 0.0, "current": 0.0, "power": 0
.0}, "system": {"temp": 40.2, "voltage": 5.176, "current": 0.318, "power": 1.664}, "battery": {"temp
": 29.25, "voltage": 4.03, "current": -0.485, "power": -1.955, "level": 93, "health": 90, "max_charg
e_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6870, "health": 1}}  

and then later:

Mon Oct  3 06:09:17 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.172, "current": 0.315, "power": 1.64}, "battery": {"temp": 29.12, "voltage": 3.447, "current": -0.567, "power": -1.954, "level": 12, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6780, "health": 1}}
Mon Oct  3 06:14:18 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.2, "voltage": 5.172, "current": 0.316, "power": 1.64}, "battery": {"temp": 29.12, "voltage": 3.43, "current": -0.572, "power": -1.962, "level": 10, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6780, "health": 1}}
Mon Oct  3 06:19:19 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.164, "current": 0.327, "power": 1.784}, "battery": {"temp": 29.12, "voltage": 3.409, "current": -0.573, "power": -1.953, "level": 7, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6765, "health": 1}}
Mon Oct  3 06:24:20 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.172, "current": 0.315, "power": 1.652}, "battery": {"temp": 29.12, "voltage": 3.385, "current": -0.581, "power": -1.967, "level": 4, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6750, "health": 1}}
Mon Oct  3 06:29:20 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.172, "current": 0.316, "power": 1.632}, "battery": {"temp": 29.12, "voltage": 3.371, "current": -0.582, "power": -1.962, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6765, "health": 1}}
Mon Oct  3 06:34:21 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.2, "voltage": 5.172, "current": 0.315, "power": 1.62}, "battery": {"temp": 29.0, "voltage": 3.359, "current": -0.582, "power": -1.955, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6765, "health": 1}}
Mon Oct  3 06:39:22 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.37, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.168, "current": 0.317, "power": 1.624}, "battery": {"temp": 29.12, "voltage": 3.344, "current": -0.588, "power": -1.966, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6750, "health": 1}}
Mon Oct  3 06:44:23 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.5, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.2, "voltage": 5.172, "current": 0.424, "power": 2.056}, "battery": {"temp": 29.12, "voltage": 3.322, "current": -0.591, "power": -1.963, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6765, "health": 1}}
Mon Oct  3 06:49:23 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.37, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.168, "current": 0.318, "power": 1.644}, "battery": {"temp": 29.12, "voltage": 3.267, "current": -0.602, "power": -1.967, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6780, "health": 1}}
Mon Oct  3 06:54:24 EDT 2022
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 27.37, "voltage": 0.0, "current": 0.0, "power": 0.0}, "system": {"temp": 39.7, "voltage": 5.172, "current": 0.316, "power": 1.632}, "battery": {"temp": 29.25, "voltage": 3.111, "current": -0.629, "power": -1.957, "level": 1, "health": 90, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6765, "health": 1}}
client_loop: send disconnect: Broken pipe

Notice how at 06:24:20 EDT the power API reports "level": 4 yet it doesn't shut the rPi down! Also notice "shutdown_level": 5, which is the result of get_safe_shutdown_battery_level().

After turning power back on, I logged into the rPi as quickly as possible and ran ups_test.py:

gnome@SG-D011RPI31F2B:/opt/sensorgnome/ups-hat $ ./ups_test.py 
{"firmware": {"ver": "v0.3.22"}, "input": {"temp": 23.62, "voltage": 11.264, "current": 0.25, "power": 2.816}, "system": {"temp": 34.3, "voltage": 5.172, "current": 0.312, "power": 1.64}, "battery": {"temp": 23.75, "voltage": 2.825, "current": 0.385, "power": 1.088, "level": 1, "health": 89, "max_charge_level": 95, "design_capacity": 2500, "shutdown_level": 5}, "fan": {"speed": 6135, "health": 1}}

Notice how the power API reports a reasonable voltage (a bit higher than the 2.5V before charging current was applied), and a battery level of 1%.

For completeness, here's ups_test.py:

$ cat ./ups_test.py 
#! /usr/bin/python

import json
import sys
from power_api import SixfabPower
pwr = SixfabPower()

try:
    v = pwr.get_firmware_ver().rstrip("\x00")
    #print("Firmware:", v)
    pwr.set_battery_max_charge_level(95)
except Exception as e:
    print("Error:", e, file=sys.stderr)
    print("Assuming no Sixfab UPS HAT present", file=sys.stderr)
    sys.exit(1)


data = {"firmware": {"ver": v}}
for subsys in ["input", "system", "battery"]:
    data[subsys] = {}
    for key in ["temp", "voltage", "current", "power"]:
        f = f"get_{subsys}_{key}"
        data[subsys][key] = getattr(pwr, f)()

for key in ["level", "health", "max_charge_level", "design_capacity"]:
    f = f"get_battery_{key}"
    data["battery"][key] = getattr(pwr, f)()

data["battery"]["shutdown_level"] = pwr.get_safe_shutdown_battery_level()

data["fan"] = {}
data["fan"]["speed"] = pwr.get_fan_speed()
data["fan"]["health"] = pwr.get_fan_health()

print(json.dumps(data))
@kyleinprogress
Copy link

Looking at this commit, it looks like the get_safe_shutdown_battery_level() api was deprecated. Wonder if that means the feature no longer works.

9ac5c4a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants