1 """Support for Octoprint buttons."""
3 from pyoctoprintapi
import OctoprintClient, OctoprintPrinterInfo
12 from .
import OctoprintDataUpdateCoordinator
13 from .const
import DOMAIN
18 config_entry: ConfigEntry,
19 async_add_entities: AddEntitiesCallback,
21 """Set up Octoprint control buttons."""
22 coordinator: OctoprintDataUpdateCoordinator = hass.data[DOMAIN][
25 client: OctoprintClient = hass.data[DOMAIN][config_entry.entry_id][
"client"]
26 device_id = config_entry.unique_id
27 assert device_id
is not None
42 CoordinatorEntity[OctoprintDataUpdateCoordinator], ButtonEntity
44 """Represent an OctoPrint binary sensor."""
46 client: OctoprintClient
50 coordinator: OctoprintDataUpdateCoordinator,
53 client: OctoprintClient,
55 """Initialize a new OctoPrint button."""
65 """Return if entity is available."""
66 return self.coordinator.last_update_success
and self.coordinator.data[
"printer"]
70 CoordinatorEntity[OctoprintDataUpdateCoordinator], ButtonEntity
72 """Represent an OctoPrint binary sensor."""
74 client: OctoprintClient
78 coordinator: OctoprintDataUpdateCoordinator,
81 client: OctoprintClient,
83 """Initialize a new OctoPrint button."""
93 """Return if entity is available."""
94 return self.coordinator.last_update_success
98 """Pause the active job."""
102 coordinator: OctoprintDataUpdateCoordinator,
104 client: OctoprintClient,
106 """Initialize a new OctoPrint button."""
107 super().
__init__(coordinator,
"Pause Job", device_id, client)
110 """Handle the button press."""
111 printer: OctoprintPrinterInfo = self.coordinator.data[
"printer"]
113 if printer.state.flags.printing:
114 await self.
clientclient.pause_job()
115 elif not printer.state.flags.paused
and not printer.state.flags.pausing:
120 """Resume the active job."""
124 coordinator: OctoprintDataUpdateCoordinator,
126 client: OctoprintClient,
128 """Initialize a new OctoPrint button."""
129 super().
__init__(coordinator,
"Resume Job", device_id, client)
132 """Handle the button press."""
133 printer: OctoprintPrinterInfo = self.coordinator.data[
"printer"]
135 if printer.state.flags.paused:
136 await self.
clientclient.resume_job()
137 elif not printer.state.flags.printing
and not printer.state.flags.resuming:
142 """Resume the active job."""
146 coordinator: OctoprintDataUpdateCoordinator,
148 client: OctoprintClient,
150 """Initialize a new OctoPrint button."""
151 super().
__init__(coordinator,
"Stop Job", device_id, client)
154 """Handle the button press."""
155 printer: OctoprintPrinterInfo = self.coordinator.data[
"printer"]
157 if printer.state.flags.printing
or printer.state.flags.paused:
158 await self.
clientclient.cancel_job()
162 """Shutdown the system."""
166 coordinator: OctoprintDataUpdateCoordinator,
168 client: OctoprintClient,
170 """Initialize a new OctoPrint button."""
171 super().
__init__(coordinator,
"Shutdown System", device_id, client)
174 """Handle the button press."""
179 """Reboot the system."""
181 _attr_device_class = ButtonDeviceClass.RESTART
185 coordinator: OctoprintDataUpdateCoordinator,
187 client: OctoprintClient,
189 """Initialize a new OctoPrint button."""
190 super().
__init__(coordinator,
"Reboot System", device_id, client)
193 """Handle the button press."""
194 await self.
clientclient.reboot_system()
198 """Restart Octoprint."""
200 _attr_device_class = ButtonDeviceClass.RESTART
204 coordinator: OctoprintDataUpdateCoordinator,
206 client: OctoprintClient,
208 """Initialize a new OctoPrint button."""
209 super().
__init__(coordinator,
"Restart Octoprint", device_id, client)
212 """Handle the button press."""
213 await self.
clientclient.restart()
217 """Service attempted in invalid state."""