From 80415a18570a89d00646982536013b71958597d0 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 12 Nov 2024 19:05:56 +0100 Subject: [PATCH] shutdown on pin --- default.toml | 1 + main.py | 27 ++++++++++++++++++++++++++- settings/device_settings.py | 3 ++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/default.toml b/default.toml index 4722709..9ea93d9 100644 --- a/default.toml +++ b/default.toml @@ -2,6 +2,7 @@ fire_servo_range = [65, 150] #90 is onder de buis fire_delay = 1.0 stepper_range = [0, 300] # tweak this not sure about the range, was not used in old code communicator = "raw" +shutdown_pin = 17 [gcode] port = "COM8" diff --git a/main.py b/main.py index 305e439..5e51c29 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,11 @@ import argparse +import time from communicator.communicator_mock import MockCommunicator from communicator.communicator_serial import SerialCommunicator from controller.sjoel_controller_gcode import SjoelControllerGcode from server.sjoel_server_socket import SjoelServerSocket -from settings.device_settings import CommunicatorType +from settings.device_settings import CommunicatorType, DeviceSettings from settings.hosting_settings import HostingSettings @@ -59,10 +60,34 @@ def create_app(config: HostingSettings | None = None): else: raise ValueError("Invalid communicator type") + if device_settings.shutdown_pin is not None: + import pigpio + pi = pigpio.pi() + pi.set_mode(device_settings.shutdown_pin, pigpio.INPUT) + pi.set_pull_up_down(device_settings.shutdown_pin, pigpio.PUD_DOWN) + pi.callback(device_settings.shutdown_pin, pigpio.RISING_EDGE, lambda: shutdown(device_settings)) + # Create server return SjoelServerSocket(controller).init() +def shutdown(device_settings: DeviceSettings): + print("Shutting down") + + import os + os.system("sudo shutdown -h now") + + if device_settings.shutdown_led_pin is not None: + import pigpio + pi = pigpio.pi() + pi.set_mode(device_settings.shutdown_led_pin, pigpio.OUTPUT) + while True: + pi.write(device_settings.shutdown_led_pin, 1) + time.sleep(0.1) + pi.write(device_settings.shutdown_led_pin, 0) + time.sleep(0.1) + + if __name__ == '__main__': # load settings hosting_settings = parse_hosting_settings() diff --git a/settings/device_settings.py b/settings/device_settings.py index d42d4a9..f4854df 100644 --- a/settings/device_settings.py +++ b/settings/device_settings.py @@ -1,5 +1,4 @@ import enum -from typing import Literal import toml from pydantic import BaseModel @@ -18,6 +17,8 @@ class DeviceSettings(BaseModel): fire_delay: float stepper_range: tuple[int, int] communicator: CommunicatorType + shutdown_pin: int | None = None + shutdown_led_pin: int | None = None gcode: GcodeSettings | None = None raw: RawControlsSettings | None = None