power: add "klipper_restart_method" option
When this option is set Mooraker will restart Klipper after the device has been powered on. An additional "restart_delay" option has been added to customize the delay in which the restart is executed. Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
c365de32cf
commit
9e240c3b86
|
@ -104,6 +104,10 @@ class PrinterPower:
|
||||||
|
|
||||||
async def _process_request(self, device, req):
|
async def _process_request(self, device, req):
|
||||||
if req in ["on", "off"]:
|
if req in ["on", "off"]:
|
||||||
|
cur_state = device.get_device_info()['status']
|
||||||
|
if req == cur_state:
|
||||||
|
# device is already in requested state, do nothing
|
||||||
|
return cur_state
|
||||||
printing = await self._check_klippy_printing()
|
printing = await self._check_klippy_printing()
|
||||||
if device.get_locked_while_printing() and printing:
|
if device.get_locked_while_printing() and printing:
|
||||||
raise self.server.error(
|
raise self.server.error(
|
||||||
|
@ -114,6 +118,7 @@ class PrinterPower:
|
||||||
await ret
|
await ret
|
||||||
dev_info = device.get_device_info()
|
dev_info = device.get_device_info()
|
||||||
self.server.send_event("gpio_power:power_changed", dev_info)
|
self.server.send_event("gpio_power:power_changed", dev_info)
|
||||||
|
device.run_power_changed_action()
|
||||||
elif req == "status":
|
elif req == "status":
|
||||||
ret = device.refresh_status()
|
ret = device.refresh_status()
|
||||||
if asyncio.iscoroutine(ret):
|
if asyncio.iscoroutine(ret):
|
||||||
|
@ -164,11 +169,19 @@ class PowerDevice:
|
||||||
name_parts = config.get_name().split(maxsplit=1)
|
name_parts = config.get_name().split(maxsplit=1)
|
||||||
if len(name_parts) != 2:
|
if len(name_parts) != 2:
|
||||||
raise config.error(f"Invalid Section Name: {config.get_name()}")
|
raise config.error(f"Invalid Section Name: {config.get_name()}")
|
||||||
|
self.server = config.get_server()
|
||||||
self.name = name_parts[1]
|
self.name = name_parts[1]
|
||||||
self.state = "init"
|
self.state = "init"
|
||||||
self.locked_while_printing = config.getboolean(
|
self.locked_while_printing = config.getboolean(
|
||||||
'locked_while_printing', False)
|
'locked_while_printing', False)
|
||||||
self.off_when_shutdown = config.getboolean('off_when_shutdown', False)
|
self.off_when_shutdown = config.getboolean('off_when_shutdown', False)
|
||||||
|
self.restart_delay = 1.
|
||||||
|
self.klipper_restart = config.getboolean(
|
||||||
|
'restart_klipper_when_powered', False)
|
||||||
|
if self.klipper_restart:
|
||||||
|
self.restart_delay = config.getfloat('restart_delay', 1.)
|
||||||
|
if self.restart_delay < .000001:
|
||||||
|
raise config.error("Option 'restart_delay' must be above 0.0")
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
@ -183,6 +196,13 @@ class PowerDevice:
|
||||||
def get_locked_while_printing(self):
|
def get_locked_while_printing(self):
|
||||||
return self.locked_while_printing
|
return self.locked_while_printing
|
||||||
|
|
||||||
|
def run_power_changed_action(self):
|
||||||
|
if self.state == "on" and self.klipper_restart:
|
||||||
|
ioloop = IOLoop.current()
|
||||||
|
klippy_apis = self.server.lookup_plugin("klippy_apis")
|
||||||
|
ioloop.call_later(self.restart_delay, klippy_apis.do_restart,
|
||||||
|
"FIRMWARE_RESTART")
|
||||||
|
|
||||||
class GpioChipFactory:
|
class GpioChipFactory:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.chips = {}
|
self.chips = {}
|
||||||
|
|
Loading…
Reference in New Issue