Skip to content

Commit 97f4a29

Browse files
jellespijkergithub-actions[bot]
authored andcommitted
run on all push
1 parent 4e661bc commit 97f4a29

File tree

3 files changed

+99
-69
lines changed

3 files changed

+99
-69
lines changed

.github/workflows/validation-and-formatting.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
name: "Validation And Formatting"
22
on:
33
push:
4-
branches: [stable]
54
pull_request:
65
schedule:
76
- cron: '0 0 * * *'
+4-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
"""Ultimaker printer integration"""
2-
DOMAIN = 'ultimaker'
2+
DOMAIN = "ultimaker"
33

44

55
def setup(hass, config):
66
"""Your controller/hub specific code."""
77
# Data that you want to share with your platforms
8-
hass.data[DOMAIN] = {
9-
'x': 0
10-
}
8+
hass.data[DOMAIN] = {"x": 0}
119

12-
hass.helpers.discovery.load_platform('sensor', DOMAIN, {}, config)
10+
hass.helpers.discovery.load_platform("sensor", DOMAIN, {}, config)
1311

14-
return True
12+
return True

custom_components/ultimaker/sensor.py

+95-62
Original file line numberDiff line numberDiff line change
@@ -16,57 +16,77 @@
1616
- hotend_1_temperature (optional)
1717
- hotend_N_temperature (optional, N = hotend index starting at 1)
1818
"""
19-
import logging
2019
import asyncio
20+
import logging
21+
from datetime import datetime, timedelta
22+
from typing import Any, Dict, Optional
23+
2124
import aiohttp
2225
import async_timeout
23-
24-
from datetime import timedelta, datetime
25-
from typing import Optional, Dict, Any
26-
27-
import voluptuous as vol
28-
29-
from . import DOMAIN
3026
import homeassistant.helpers.config_validation as cv
31-
from homeassistant.helpers.typing import HomeAssistantType, StateType
32-
from homeassistant.helpers.aiohttp_client import async_get_clientsession
27+
import voluptuous as vol
3328
from homeassistant.components.sensor import PLATFORM_SCHEMA
3429
from homeassistant.const import (
35-
CONF_HOST, CONF_SCAN_INTERVAL, CONF_SENSORS, TEMP_CELSIUS, CONF_NAME
30+
CONF_HOST,
31+
CONF_NAME,
32+
CONF_SCAN_INTERVAL,
33+
CONF_SENSORS,
34+
TEMP_CELSIUS,
3635
)
36+
from homeassistant.helpers.aiohttp_client import async_get_clientsession
3737
from homeassistant.helpers.entity import Entity
38+
from homeassistant.helpers.typing import HomeAssistantType, StateType
3839
from homeassistant.util import Throttle
3940

41+
from . import DOMAIN
42+
4043
_LOGGER = logging.getLogger(__name__)
4144

4245
SENSOR_TYPES = {
43-
'status': ['Printer status', '', 'mdi:printer-3d'],
44-
'state': ['Print job state', '', 'mdi:printer-3d-nozzle'],
45-
'progress': ['Print job progress', '%', 'mdi:progress-clock'],
46-
'bed_temperature': ['Bed temperature', TEMP_CELSIUS, 'mdi:thermometer'],
47-
'bed_temperature_target': ['Bed temperature target', TEMP_CELSIUS, 'mdi:thermometer'],
48-
'hotend_1_temperature': ['Hotend 1 temperature', TEMP_CELSIUS, 'mdi:thermometer'],
49-
'hotend_1_temperature_target': ['Hotend 1 temperature target', TEMP_CELSIUS, 'mdi:thermometer'],
50-
'hotend_2_temperature': ['Hotend 2 temperature', TEMP_CELSIUS, 'mdi:thermometer'],
51-
'hotend_2_temperature_target': ['Hotend 2 temperature target', TEMP_CELSIUS, 'mdi:thermometer'],
46+
"status": ["Printer status", "", "mdi:printer-3d"],
47+
"state": ["Print job state", "", "mdi:printer-3d-nozzle"],
48+
"progress": ["Print job progress", "%", "mdi:progress-clock"],
49+
"bed_temperature": ["Bed temperature", TEMP_CELSIUS, "mdi:thermometer"],
50+
"bed_temperature_target": [
51+
"Bed temperature target",
52+
TEMP_CELSIUS,
53+
"mdi:thermometer",
54+
],
55+
"hotend_1_temperature": ["Hotend 1 temperature", TEMP_CELSIUS, "mdi:thermometer"],
56+
"hotend_1_temperature_target": [
57+
"Hotend 1 temperature target",
58+
TEMP_CELSIUS,
59+
"mdi:thermometer",
60+
],
61+
"hotend_2_temperature": ["Hotend 2 temperature", TEMP_CELSIUS, "mdi:thermometer"],
62+
"hotend_2_temperature_target": [
63+
"Hotend 2 temperature target",
64+
TEMP_CELSIUS,
65+
"mdi:thermometer",
66+
],
5267
}
5368

54-
CONF_DECIMAL = 'decimal'
55-
56-
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
57-
vol.Required(CONF_HOST): cv.string,
58-
vol.Required(CONF_NAME): cv.string,
59-
vol.Optional(CONF_DECIMAL, default=2): cv.positive_int,
60-
vol.Required(CONF_SENSORS, default=list(SENSOR_TYPES)):
61-
vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),
62-
})
69+
CONF_DECIMAL = "decimal"
70+
71+
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
72+
{
73+
vol.Required(CONF_HOST): cv.string,
74+
vol.Required(CONF_NAME): cv.string,
75+
vol.Optional(CONF_DECIMAL, default=2): cv.positive_int,
76+
vol.Required(CONF_SENSORS, default=list(SENSOR_TYPES)): vol.All(
77+
cv.ensure_list, [vol.In(SENSOR_TYPES)]
78+
),
79+
}
80+
)
6381

6482

6583
MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=10)
66-
BASE_URL = 'http://{0}/api/v1'
84+
BASE_URL = "http://{0}/api/v1"
6785

6886

69-
async def async_setup_platform(hass: HomeAssistantType, config, async_add_entities, discovery_info=None):
87+
async def async_setup_platform(
88+
hass: HomeAssistantType, config, async_add_entities, discovery_info=None
89+
):
7090
"""Setup the Ultimaker printer sensors"""
7191
session = async_get_clientsession(hass)
7292
data = UltimakerStatusData(session, config.get(CONF_HOST))
@@ -80,14 +100,21 @@ async def async_setup_platform(hass: HomeAssistantType, config, async_add_entiti
80100
unit = SENSOR_TYPES[sensor][1]
81101
icon = SENSOR_TYPES[sensor][2]
82102

83-
_LOGGER.debug(f"Adding Ultimaker printer sensor: {name}, {sensor_type}, {unit}, {icon}")
84-
entities.append(UltimakerStatusSensor(data, name, sensor_type, unit, icon, config.get(CONF_DECIMAL)))
103+
_LOGGER.debug(
104+
f"Adding Ultimaker printer sensor: {name}, {sensor_type}, {unit}, {icon}"
105+
)
106+
entities.append(
107+
UltimakerStatusSensor(
108+
data, name, sensor_type, unit, icon, config.get(CONF_DECIMAL)
109+
)
110+
)
85111

86112
async_add_entities(entities, True)
87113

88114

89115
class UltimakerStatusData(object):
90116
"""Handle Ultimaker object and limit updates"""
117+
91118
def __init__(self, session, host):
92119
if host:
93120
self._url_printer = BASE_URL.format(host) + "/printer"
@@ -106,8 +133,8 @@ async def async_update(self):
106133
self._data |= await self.fetch_data(self._url_print_job)
107134
self._data |= await self.fetch_data(self._url_system)
108135
except aiohttp.ClientError:
109-
self._data = {'status': 'not connected'}
110-
self._data['sampleTime'] = datetime.now()
136+
self._data = {"status": "not connected"}
137+
self._data["sampleTime"] = datetime.now()
111138

112139
async def fetch_data(self, url):
113140
try:
@@ -117,9 +144,13 @@ async def fetch_data(self, url):
117144
_LOGGER.warning(f"Printer {self._host} is offline")
118145
raise err
119146
except asyncio.TimeoutError:
120-
_LOGGER.error(f" Timeout error occurred while polling ultimaker printer using url {url}")
147+
_LOGGER.error(
148+
f" Timeout error occurred while polling ultimaker printer using url {url}"
149+
)
121150
except Exception as err:
122-
_LOGGER.error(f"Unknown error occurred while polling Ultimaker printer using {url} -> error: {err}")
151+
_LOGGER.error(
152+
f"Unknown error occurred while polling Ultimaker printer using {url} -> error: {err}"
153+
)
123154
return {}
124155

125156
try:
@@ -137,7 +168,9 @@ def latest_data(self):
137168
class UltimakerStatusSensor(Entity):
138169
"""Representation of a Ultimaker status sensor"""
139170

140-
def __init__(self, data: UltimakerStatusData, name, sensor_type, unit, icon, decimal):
171+
def __init__(
172+
self, data: UltimakerStatusData, name, sensor_type, unit, icon, decimal
173+
):
141174
"""Initialize the sensor."""
142175
self._data = data
143176
self._name = name
@@ -172,7 +205,7 @@ def unit_of_measurement(self) -> Optional[str]:
172205
def device_state_attributes(self) -> Optional[Dict[str, Any]]:
173206
attr = {}
174207
if self._last_updated is not None:
175-
attr['Last Updated'] = self._last_updated
208+
attr["Last Updated"] = self._last_updated
176209
return attr
177210

178211
async def async_update(self):
@@ -181,42 +214,42 @@ async def async_update(self):
181214
data = self._data.latest_data
182215

183216
if data:
184-
self._last_updated = data.get('sampleTime', None)
217+
self._last_updated = data.get("sampleTime", None)
185218

186-
if self._type == 'status':
187-
self._state = data.get('status', 'not connected')
219+
if self._type == "status":
220+
self._state = data.get("status", "not connected")
188221

189-
elif self._type == 'state':
190-
self._state = data.get('state', None)
222+
elif self._type == "state":
223+
self._state = data.get("state", None)
191224
if self._state:
192-
self._state = self._state.replace('_', ' ')
225+
self._state = self._state.replace("_", " ")
193226

194-
elif self._type == 'progress':
195-
self._state = data.get('progress', 0)
227+
elif self._type == "progress":
228+
self._state = data.get("progress", 0)
196229
if self._state:
197230
self._state *= 100
198231
self._state = self._state
199232

200-
elif 'bed' in self._type:
201-
bed = data.get('bed', None)
202-
if 'temperature' in self._type and bed:
203-
temperature = bed.get('temperature', None)
233+
elif "bed" in self._type:
234+
bed = data.get("bed", None)
235+
if "temperature" in self._type and bed:
236+
temperature = bed.get("temperature", None)
204237
if temperature:
205-
if 'target' in self._type:
206-
self._state = temperature.get('target', None)
238+
if "target" in self._type:
239+
self._state = temperature.get("target", None)
207240
else:
208-
self._state = temperature.get('current', None)
241+
self._state = temperature.get("current", None)
209242

210-
elif 'hotend' in self._type:
211-
head = data.get('heads', [None])[0]
243+
elif "hotend" in self._type:
244+
head = data.get("heads", [None])[0]
212245
if head:
213246
idx = int(self._type.split("_")[1]) - 1
214-
extruder = head['extruders'][idx]
215-
hot_end = extruder['hotend']
216-
temperature = hot_end['temperature']
217-
if 'target' in self._type:
218-
self._state = temperature.get('target', None)
247+
extruder = head["extruders"][idx]
248+
hot_end = extruder["hotend"]
249+
temperature = hot_end["temperature"]
250+
if "target" in self._type:
251+
self._state = temperature.get("target", None)
219252
else:
220-
self._state = temperature.get('current', None)
253+
self._state = temperature.get("current", None)
221254

222255
_LOGGER.debug(f"Device: {self._type} State: {self._state}")

0 commit comments

Comments
 (0)