From de34fee72ab1f198ec6b802d3b03b4519c1fdc7c Mon Sep 17 00:00:00 2001 From: Arksine Date: Tue, 17 Nov 2020 12:21:16 -0500 Subject: [PATCH] machine: register "reboot_machine" and "shutdown_machine" remote methods This allows Klippy to command moonraker to reboot or shutdown the host machine. Signed-off-by: Eric Callahan --- moonraker/plugins/machine.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/moonraker/plugins/machine.py b/moonraker/plugins/machine.py index b5ae8bd..6964302 100644 --- a/moonraker/plugins/machine.py +++ b/moonraker/plugins/machine.py @@ -13,21 +13,35 @@ class Machine: self.server.register_endpoint( "/machine/shutdown", ['POST'], self._handle_machine_request) + # Register remote methods + self.server.register_remote_method( + "shutdown_machine", self.shutdown_machine) + self.server.register_remote_method( + "reboot_machine", self.reboot_machine) + async def _handle_machine_request(self, web_request): ep = web_request.get_endpoint() if ep == "/machine/shutdown": - cmd = "sudo shutdown now" + await self.shutdown_machine() elif ep == "/machine/reboot": - cmd = "sudo shutdown -r now" + await self.reboot_machine() else: raise self.server.error("Unsupported machine request") + return "ok" + + async def shutdown_machine(self): + await self._execute_cmd("sudo shutdown now") + + async def reboot_machine(self): + await self._execute_cmd("sudo shutdown -r now") + + async def _execute_cmd(self, cmd): shell_command = self.server.lookup_plugin('shell_command') scmd = shell_command.build_shell_command(cmd, None) try: await scmd.run(timeout=2., verbose=False) except Exception: logging.exception(f"Error running cmd '{cmd}'") - return "ok" def load_plugin(config): return Machine(config)