From 0f30f95e2c537b327dac736a4219086c2ffa5fcb Mon Sep 17 00:00:00 2001 From: Bdale Garbee Date: Thu, 24 Jul 2025 16:19:50 -0600 Subject: [PATCH] craft and deliver to systemd a script to turn power off --- debian/quantimotor.install | 1 + power-off.py | 50 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100755 power-off.py diff --git a/debian/quantimotor.install b/debian/quantimotor.install index 38f315d..2fc4fd1 100644 --- a/debian/quantimotor.install +++ b/debian/quantimotor.install @@ -1,6 +1,7 @@ ui/* usr/share/quantimotor/ui bcm2837-rpi-zero-2-w.dtb usr/share/quantimotor enable_ads.py usr/share/quantimotor +power-off.py usr/lib/systemd/system-shutdown quantimotor.conf etc/modules-load.d raspi-extra-cmdline etc/default raspi-firmware-custom etc/default diff --git a/power-off.py b/power-off.py new file mode 100755 index 0000000..be15f43 --- /dev/null +++ b/power-off.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Turn ourselves off by lowering the GPIO line in the soft power switch circuit +# Copyright (C) 2025 Bdale Garbee +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +import gpiod +import signal +import sys +import time + +from gpiod.line import Direction, Value + +def set_line_values(chip_path, line_values): + value_str = {Value.ACTIVE: "Active", Value.INACTIVE: "Inactive"} + + request = gpiod.request_lines( + chip_path, + consumer=sys.argv[0], + config={ + tuple(line_values.keys()): gpiod.LineSettings(direction=Direction.OUTPUT) + }, + ) + request.set_values(line_values) + +if __name__ == "__main__": + try: + set_line_values( + "/dev/gpiochip0", + {13: Value.INACTIVE, # turn off soft power switch + } + ) + + except OSError as ex: + print(ex, "\nD'oh! Powering off failed.") + -- 2.47.2