|
1 | 1 | import logging
|
| 2 | +import sys |
2 | 3 |
|
3 | 4 | from homeassistant.core import Event
|
4 | 5 | from homeassistant.helpers.dispatcher import (
|
@@ -92,128 +93,178 @@ async def initialize(self):
|
92 | 93 | await self.async_config_entry_first_refresh()
|
93 | 94 |
|
94 | 95 | def create_main_device(
|
95 |
| - self, device_key: str, device_data: dict, _device_config: dict |
| 96 | + self, device_key: str, device_data: dict, device_config: dict |
96 | 97 | ):
|
97 |
| - self._main_device_data = device_data |
98 |
| - self._main_device_id = device_key |
| 98 | + try: |
| 99 | + self._main_device_data = device_data |
| 100 | + self._main_device_id = device_key |
99 | 101 |
|
100 |
| - model = device_data.get("make_and_model") |
101 |
| - serial_number = device_data.get("serial_number") |
102 |
| - manufacturer = device_data.get("manufacturer_name") |
| 102 | + model = device_data.get("make_and_model") |
| 103 | + serial_number = device_data.get("serial_number") |
| 104 | + manufacturer = device_data.get("manufacturer_name") |
103 | 105 |
|
104 |
| - device_identifier = (DOMAIN, self._main_device_id) |
| 106 | + device_identifier = (DOMAIN, self._main_device_id) |
105 | 107 |
|
106 |
| - device_info = DeviceInfo( |
107 |
| - identifiers={device_identifier}, |
108 |
| - name=self.entry_title, |
109 |
| - model=model, |
110 |
| - serial_number=serial_number, |
111 |
| - manufacturer=manufacturer, |
112 |
| - ) |
| 108 | + device_info = DeviceInfo( |
| 109 | + identifiers={device_identifier}, |
| 110 | + name=self.entry_title, |
| 111 | + model=model, |
| 112 | + serial_number=serial_number, |
| 113 | + manufacturer=manufacturer, |
| 114 | + ) |
113 | 115 |
|
114 |
| - self._devices[device_key] = device_info |
| 116 | + self._devices[device_key] = device_info |
| 117 | + |
| 118 | + except Exception as ex: |
| 119 | + exc_type, exc_obj, tb = sys.exc_info() |
| 120 | + line_number = tb.tb_lineno |
| 121 | + _LOGGER.error( |
| 122 | + f"Failed to create main device, " |
| 123 | + f"Device Key: {device_key}, " |
| 124 | + f"Data: {device_data}, " |
| 125 | + f"Config: {device_config}, " |
| 126 | + f"Error: {ex}, " |
| 127 | + f"Line: {line_number}" |
| 128 | + ) |
115 | 129 |
|
116 | 130 | def create_sub_unit_device(
|
117 |
| - self, device_key: str, _device_data: dict, device_config: dict |
| 131 | + self, device_key: str, device_data: dict, device_config: dict |
118 | 132 | ):
|
119 |
| - model = self._main_device_data.get("make_and_model") |
120 |
| - serial_number = self._main_device_data.get("serial_number") |
121 |
| - manufacturer = self._main_device_data.get("manufacturer_name") |
| 133 | + try: |
| 134 | + model = self._main_device_data.get("make_and_model") |
| 135 | + serial_number = self._main_device_data.get("serial_number") |
| 136 | + manufacturer = self._main_device_data.get("manufacturer_name") |
122 | 137 |
|
123 |
| - device_type = device_config.get("device_type") |
| 138 | + device_type = device_config.get("device_type") |
124 | 139 |
|
125 |
| - device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
| 140 | + device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
126 | 141 |
|
127 |
| - sub_unit_device_name = f"{self.entry_title} {device_type}" |
| 142 | + sub_unit_device_name = f"{self.entry_title} {device_type}" |
128 | 143 |
|
129 |
| - device_identifier = (DOMAIN, device_unique_id) |
| 144 | + device_identifier = (DOMAIN, device_unique_id) |
130 | 145 |
|
131 |
| - device_info = DeviceInfo( |
132 |
| - identifiers={device_identifier}, |
133 |
| - name=sub_unit_device_name, |
134 |
| - model=model, |
135 |
| - serial_number=serial_number, |
136 |
| - manufacturer=manufacturer, |
137 |
| - via_device=(DOMAIN, self._main_device_id), |
138 |
| - ) |
| 146 | + device_info = DeviceInfo( |
| 147 | + identifiers={device_identifier}, |
| 148 | + name=sub_unit_device_name, |
| 149 | + model=model, |
| 150 | + serial_number=serial_number, |
| 151 | + manufacturer=manufacturer, |
| 152 | + via_device=(DOMAIN, self._main_device_id), |
| 153 | + ) |
139 | 154 |
|
140 |
| - self._devices[device_key] = device_info |
| 155 | + self._devices[device_key] = device_info |
| 156 | + |
| 157 | + except Exception as ex: |
| 158 | + exc_type, exc_obj, tb = sys.exc_info() |
| 159 | + line_number = tb.tb_lineno |
| 160 | + _LOGGER.error( |
| 161 | + f"Failed to sub unit device, " |
| 162 | + f"Device Key: {device_key}, " |
| 163 | + f"Data: {device_data}, " |
| 164 | + f"Config: {device_config}, " |
| 165 | + f"Error: {ex}, " |
| 166 | + f"Line: {line_number}" |
| 167 | + ) |
141 | 168 |
|
142 | 169 | def create_consumable_device(
|
143 |
| - self, device_key: str, device_data: dict, _device_config: dict |
| 170 | + self, device_key: str, device_data: dict, device_config: dict |
144 | 171 | ):
|
145 |
| - printer_device_unique_id = slugify(f"{self.entry_id}.printer") |
| 172 | + try: |
| 173 | + printer_device_unique_id = slugify(f"{self.entry_id}.printer") |
146 | 174 |
|
147 |
| - device_name_parts = [self.entry_title] |
148 |
| - cartridge_type: str = device_data.get("consumable_type_enum") |
149 |
| - cartridge_color = device_data.get("marker_color") |
150 |
| - manufacturer = device_data.get("consumable_life_state_brand") |
151 |
| - serial_number = device_data.get("serial_number") |
| 175 | + device_name_parts = [self.entry_title] |
| 176 | + cartridge_type: str = device_data.get("consumable_type_enum") |
| 177 | + cartridge_color = device_data.get("marker_color") |
| 178 | + manufacturer = device_data.get("consumable_life_state_brand") |
| 179 | + serial_number = device_data.get("serial_number") |
152 | 180 |
|
153 |
| - model = device_data.get("consumable_selectibility_number") |
| 181 | + model = device_data.get("consumable_selectibility_number") |
154 | 182 |
|
155 |
| - if cartridge_type == "printhead": |
156 |
| - device_name_parts.append(cartridge_type.capitalize()) |
157 |
| - model = cartridge_type.capitalize() |
| 183 | + if cartridge_type == "printhead": |
| 184 | + model = cartridge_type.capitalize() |
| 185 | + else: |
| 186 | + device_name_parts.append(cartridge_color) |
158 | 187 |
|
159 |
| - else: |
160 |
| - device_name_parts.append(cartridge_color) |
161 |
| - device_name_parts.append(cartridge_type.capitalize()) |
| 188 | + if cartridge_type is not None: |
| 189 | + device_name_parts.append(cartridge_type.capitalize()) |
162 | 190 |
|
163 |
| - device_name_parts = [ |
164 |
| - device_name_part |
165 |
| - for device_name_part in device_name_parts |
166 |
| - if device_name_part is not None |
167 |
| - ] |
| 191 | + device_name_parts = [ |
| 192 | + device_name_part |
| 193 | + for device_name_part in device_name_parts |
| 194 | + if device_name_part is not None |
| 195 | + ] |
168 | 196 |
|
169 |
| - device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
| 197 | + device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
170 | 198 |
|
171 |
| - cartridge_device_name = " ".join(device_name_parts) |
| 199 | + cartridge_device_name = " ".join(device_name_parts) |
172 | 200 |
|
173 |
| - device_identifier = (DOMAIN, device_unique_id) |
| 201 | + device_identifier = (DOMAIN, device_unique_id) |
174 | 202 |
|
175 |
| - device_info = DeviceInfo( |
176 |
| - identifiers={device_identifier}, |
177 |
| - name=cartridge_device_name, |
178 |
| - model=model, |
179 |
| - serial_number=serial_number, |
180 |
| - manufacturer=manufacturer, |
181 |
| - via_device=(DOMAIN, printer_device_unique_id), |
182 |
| - ) |
| 203 | + device_info = DeviceInfo( |
| 204 | + identifiers={device_identifier}, |
| 205 | + name=cartridge_device_name, |
| 206 | + model=model, |
| 207 | + serial_number=serial_number, |
| 208 | + manufacturer=manufacturer, |
| 209 | + via_device=(DOMAIN, printer_device_unique_id), |
| 210 | + ) |
183 | 211 |
|
184 |
| - self._devices[device_key] = device_info |
| 212 | + self._devices[device_key] = device_info |
| 213 | + |
| 214 | + except Exception as ex: |
| 215 | + exc_type, exc_obj, tb = sys.exc_info() |
| 216 | + line_number = tb.tb_lineno |
| 217 | + _LOGGER.error( |
| 218 | + f"Failed to consumable device, " |
| 219 | + f"Device Key: {device_key}, " |
| 220 | + f"Data: {device_data}, " |
| 221 | + f"Config: {device_config}, " |
| 222 | + f"Error: {ex}, " |
| 223 | + f"Line: {line_number}" |
| 224 | + ) |
185 | 225 |
|
186 | 226 | def create_adapter_device(
|
187 | 227 | self, device_key: str, device_data: dict, device_config: dict
|
188 | 228 | ):
|
189 |
| - serial_number = self._main_device_data.get("serial_number") |
190 |
| - manufacturer = self._main_device_data.get("manufacturer_name") |
191 |
| - |
192 |
| - adapter_name = device_data.get("hardware_config_name").upper() |
193 |
| - model = ( |
194 |
| - device_data.get("hardware_config_device_connectivity_port_type") |
195 |
| - .replace("Embedded", "") |
196 |
| - .upper() |
197 |
| - ) |
| 229 | + try: |
| 230 | + serial_number = self._main_device_data.get("serial_number") |
| 231 | + manufacturer = self._main_device_data.get("manufacturer_name") |
198 | 232 |
|
199 |
| - device_type = device_config.get("device_type") |
| 233 | + adapter_name = device_data.get("hardware_config_name").upper() |
200 | 234 |
|
201 |
| - device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
| 235 | + port_type_key = "hardware_config_device_connectivity_port_type" |
| 236 | + model = device_data.get(port_type_key).replace("Embedded", "").upper() |
202 | 237 |
|
203 |
| - adapter_device_name = f"{self.entry_title} {device_type} {adapter_name}" |
| 238 | + device_type = device_config.get("device_type") |
204 | 239 |
|
205 |
| - device_identifier = (DOMAIN, device_unique_id) |
| 240 | + device_unique_id = slugify(f"{self.entry_id}.{device_key}") |
206 | 241 |
|
207 |
| - device_info = DeviceInfo( |
208 |
| - identifiers={device_identifier}, |
209 |
| - name=adapter_device_name, |
210 |
| - model=model, |
211 |
| - serial_number=serial_number, |
212 |
| - manufacturer=manufacturer, |
213 |
| - via_device=(DOMAIN, self._main_device_id), |
214 |
| - ) |
| 242 | + adapter_device_name = f"{self.entry_title} {device_type} {adapter_name}" |
| 243 | + |
| 244 | + device_identifier = (DOMAIN, device_unique_id) |
215 | 245 |
|
216 |
| - self._devices[device_key] = device_info |
| 246 | + device_info = DeviceInfo( |
| 247 | + identifiers={device_identifier}, |
| 248 | + name=adapter_device_name, |
| 249 | + model=model, |
| 250 | + serial_number=serial_number, |
| 251 | + manufacturer=manufacturer, |
| 252 | + via_device=(DOMAIN, self._main_device_id), |
| 253 | + ) |
| 254 | + |
| 255 | + self._devices[device_key] = device_info |
| 256 | + |
| 257 | + except Exception as ex: |
| 258 | + exc_type, exc_obj, tb = sys.exc_info() |
| 259 | + line_number = tb.tb_lineno |
| 260 | + _LOGGER.error( |
| 261 | + f"Failed to adapter device, " |
| 262 | + f"Device Key: {device_key}, " |
| 263 | + f"Data: {device_data}, " |
| 264 | + f"Config: {device_config}, " |
| 265 | + f"Error: {ex}, " |
| 266 | + f"Line: {line_number}" |
| 267 | + ) |
217 | 268 |
|
218 | 269 | def get_device(self, device_key: str) -> DeviceInfo | None:
|
219 | 270 | result = self._devices.get(device_key)
|
|
0 commit comments