1 """Support for monitoring Dremel 3D Printer sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from datetime
import datetime, timedelta
9 from dremel3dpy
import Dremel3DPrinter
14 SensorEntityDescription,
30 from .const
import ATTR_EXTRUDER, ATTR_PLATFORM
31 from .coordinator
import DremelConfigEntry
32 from .entity
import Dremel3DPrinterEntity
35 @dataclass(frozen=True, kw_only=True)
37 """Describes a Dremel 3D Printer sensor."""
39 value_fn: Callable[[Dremel3DPrinter, str], StateType | datetime]
40 available_fn: Callable[[Dremel3DPrinter, str], bool] =
lambda api, _:
True
43 SENSOR_TYPES: tuple[Dremel3DPrinterSensorEntityDescription, ...] = (
46 translation_key=
"job_phase",
47 value_fn=
lambda api, _: api.get_printing_status(),
51 translation_key=
"completion_time",
52 device_class=SensorDeviceClass.TIMESTAMP,
53 available_fn=
lambda api, key: api.get_job_status()[key] > 0,
54 value_fn=ignore_variance(
55 lambda api, key:
utcnow() +
timedelta(seconds=api.get_job_status()[key]),
61 translation_key=
"progress",
62 native_unit_of_measurement=PERCENTAGE,
63 state_class=SensorStateClass.MEASUREMENT,
64 entity_category=EntityCategory.DIAGNOSTIC,
65 entity_registry_enabled_default=
False,
66 value_fn=
lambda api, _: api.get_printing_progress(),
70 translation_key=
"chamber",
71 device_class=SensorDeviceClass.TEMPERATURE,
72 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
73 state_class=SensorStateClass.MEASUREMENT,
74 entity_category=EntityCategory.DIAGNOSTIC,
75 entity_registry_enabled_default=
False,
76 value_fn=
lambda api, key: api.get_temperature_type(key),
79 key=
"platform_temperature",
80 translation_key=
"platform_temperature",
81 device_class=SensorDeviceClass.TEMPERATURE,
82 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
83 state_class=SensorStateClass.MEASUREMENT,
84 entity_category=EntityCategory.DIAGNOSTIC,
85 entity_registry_enabled_default=
False,
86 value_fn=
lambda api, _: api.get_temperature_type(ATTR_PLATFORM),
89 key=
"target_platform_temperature",
90 translation_key=
"target_platform_temperature",
91 device_class=SensorDeviceClass.TEMPERATURE,
92 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
93 state_class=SensorStateClass.MEASUREMENT,
94 entity_category=EntityCategory.DIAGNOSTIC,
95 entity_registry_enabled_default=
False,
96 value_fn=
lambda api, _: api.get_temperature_attributes(ATTR_PLATFORM)[
101 key=
"max_platform_temperature",
102 translation_key=
"max_platform_temperature",
103 device_class=SensorDeviceClass.TEMPERATURE,
104 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
105 state_class=SensorStateClass.MEASUREMENT,
106 entity_category=EntityCategory.DIAGNOSTIC,
107 entity_registry_enabled_default=
False,
108 value_fn=
lambda api, _: api.get_temperature_attributes(ATTR_PLATFORM)[
114 translation_key=
"extruder",
115 device_class=SensorDeviceClass.TEMPERATURE,
116 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
117 state_class=SensorStateClass.MEASUREMENT,
118 entity_category=EntityCategory.DIAGNOSTIC,
119 entity_registry_enabled_default=
False,
120 value_fn=
lambda api, key: api.get_temperature_type(key),
123 key=
"target_extruder_temperature",
124 translation_key=
"target_extruder_temperature",
125 device_class=SensorDeviceClass.TEMPERATURE,
126 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
127 state_class=SensorStateClass.MEASUREMENT,
128 entity_category=EntityCategory.DIAGNOSTIC,
129 entity_registry_enabled_default=
False,
130 value_fn=
lambda api, _: api.get_temperature_attributes(ATTR_EXTRUDER)[
135 key=
"max_extruder_temperature",
136 translation_key=
"max_extruder_temperature",
137 device_class=SensorDeviceClass.TEMPERATURE,
138 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
139 state_class=SensorStateClass.MEASUREMENT,
140 entity_category=EntityCategory.DIAGNOSTIC,
141 entity_registry_enabled_default=
False,
142 value_fn=
lambda api, _: api.get_temperature_attributes(ATTR_EXTRUDER)[
148 translation_key=
"network_build",
149 entity_category=EntityCategory.DIAGNOSTIC,
150 entity_registry_enabled_default=
False,
151 value_fn=
lambda api, key: api.get_job_status()[key],
155 translation_key=
"filament",
156 entity_category=EntityCategory.DIAGNOSTIC,
157 entity_registry_enabled_default=
False,
158 value_fn=
lambda api, key: api.get_job_status()[key],
162 translation_key=
"elapsed_time",
163 native_unit_of_measurement=UnitOfTime.SECONDS,
164 device_class=SensorDeviceClass.DURATION,
165 entity_category=EntityCategory.DIAGNOSTIC,
166 entity_registry_enabled_default=
False,
167 available_fn=
lambda api, _: api.get_printing_status() ==
"building",
168 value_fn=
lambda api, key: api.get_job_status()[key],
171 key=
"estimated_total_time",
172 translation_key=
"estimated_total_time",
173 native_unit_of_measurement=UnitOfTime.SECONDS,
174 device_class=SensorDeviceClass.DURATION,
175 entity_category=EntityCategory.DIAGNOSTIC,
176 entity_registry_enabled_default=
False,
177 available_fn=
lambda api, key: api.get_job_status()[key] > 0,
178 value_fn=
lambda api, key: api.get_job_status()[key],
182 translation_key=
"job_status",
183 entity_category=EntityCategory.DIAGNOSTIC,
184 entity_registry_enabled_default=
False,
185 value_fn=
lambda api, key: api.get_job_status()[key],
189 translation_key=
"job_name",
190 entity_category=EntityCategory.DIAGNOSTIC,
191 entity_registry_enabled_default=
False,
192 value_fn=
lambda api, _: api.get_job_name(),
196 translation_key=
"api_version",
197 entity_category=EntityCategory.DIAGNOSTIC,
198 entity_registry_enabled_default=
False,
199 value_fn=
lambda api, key: api.get_printer_info()[key],
203 translation_key=
"host",
204 entity_category=EntityCategory.DIAGNOSTIC,
205 entity_registry_enabled_default=
False,
206 value_fn=
lambda api, key: api.get_printer_info()[key],
209 key=
"connection_type",
210 translation_key=
"connection_type",
211 entity_category=EntityCategory.DIAGNOSTIC,
212 entity_registry_enabled_default=
False,
213 value_fn=
lambda api, key: api.get_printer_info()[key],
216 key=
"available_storage",
217 translation_key=
"available_storage",
218 native_unit_of_measurement=UnitOfInformation.MEGABYTES,
219 device_class=SensorDeviceClass.DATA_SIZE,
220 entity_category=EntityCategory.DIAGNOSTIC,
221 entity_registry_enabled_default=
False,
222 value_fn=
lambda api, key: api.get_printer_info()[key] * 100,
226 translation_key=
"hours_used",
227 native_unit_of_measurement=UnitOfTime.HOURS,
228 entity_category=EntityCategory.DIAGNOSTIC,
229 entity_registry_enabled_default=
False,
230 value_fn=
lambda api, key: api.get_printer_info()[key],
237 config_entry: DremelConfigEntry,
238 async_add_entities: AddEntitiesCallback,
240 """Set up the available Dremel 3D Printer sensors."""
243 for description
in SENSOR_TYPES
248 """Representation of a Dremel 3D Printer sensor."""
250 entity_description: Dremel3DPrinterSensorEntityDescription
254 """Return True if the entity is available."""
261 """Return the sensor state."""
Dremel3DPrinter _api(self)
StateType|datetime native_value(self)
None async_setup_entry(HomeAssistant hass, DremelConfigEntry config_entry, AddEntitiesCallback async_add_entities)