|
14 | 14 | slug, |
15 | 15 | unpack_value, |
16 | 16 | ) |
| 17 | +from sunsynk.utils import pretty_table, table_data |
17 | 18 |
|
18 | 19 | _LOG = logging.getLogger(__name__) |
19 | 20 | LOG_TRACE = 15 # logging.addLevelName(LOG_TRACE, "TRACE") |
@@ -222,30 +223,39 @@ def _copy(old: Sensor) -> Sensor: |
222 | 223 | setattr(_copy(sen), attrn, news) |
223 | 224 | return news |
224 | 225 |
|
| 226 | + info: list[dict[str, str]] = [] |
| 227 | + |
225 | 228 | for key, val in values.items(): |
226 | 229 | sen_name, _, sen_attr = key.partition(".") |
227 | 230 | sen = self.all.get(slug(sen_name)) |
| 231 | + row = { |
| 232 | + "Sensor": sen.name if sen else sen_name, |
| 233 | + "Attribute": sen_attr, |
| 234 | + "Value": str(val), |
| 235 | + "Message": "?", |
| 236 | + } |
| 237 | + info.append(row) |
228 | 238 | if sen is None: |
229 | | - _LOG.error("Override: Sensor %s not found, skipping", sen_name) |
| 239 | + row["Message"] = "✕ Sensor not found" |
230 | 240 | continue |
| 241 | + |
231 | 242 | if sen_attr == "": |
232 | 243 | if not isinstance(sen, Constant): |
233 | | - _LOG.warning( |
234 | | - "Override for %s is not a Constant sensor, skipping", sen_name |
| 244 | + row["Message"] = ( |
| 245 | + "✕ Empty attributes can only be used with Constants" |
235 | 246 | ) |
236 | 247 | continue |
237 | 248 | sen_attr = "value" |
238 | 249 |
|
239 | 250 | if not hasattr(sen, sen_attr): |
240 | | - _LOG.error( |
241 | | - "Override: Sensor %s has no attribute %s, skipping", |
242 | | - sen_name, |
243 | | - sen_attr, |
244 | | - ) |
| 251 | + row["Message"] = "✕ Attribute not found on target sensor" |
245 | 252 | continue |
246 | 253 |
|
247 | 254 | setattr(_copy(sen), sen_attr, val) |
248 | | - _LOG.info("Override: Sensor %s.%s set to %s", sen_name, sen_attr, val) |
| 255 | + row["Message"] = f"✓ {getattr(sen, sen_attr, '?')} -> {val}" |
| 256 | + |
| 257 | + tab = pretty_table(*table_data(info)) |
| 258 | + _LOG.info("Applying sensor overrides from configuration\n%s", tab.get_string()) |
249 | 259 |
|
250 | 260 |
|
251 | 261 | @dataclass(slots=True, eq=False) |
|
0 commit comments