improve mechanism to determine aliases

- meanings from name guessing has sligthly lower importance then
  given meanings
- then temperature meaning is missing, take temperature_regulation
This commit is contained in:
2024-09-27 16:13:11 +02:00
parent 8d722ad09f
commit 6b28b17823
2 changed files with 22 additions and 8 deletions

View File

@ -501,7 +501,10 @@ class FrappyConfig(Device):
depending on their meaning
"""
nodedevs = filter(None, [session.devices.get(devname) for devname in self.nodes])
# value to add to the importance given in meanings targets list
add_importance = {k: 10 * i for i, k in enumerate(self.nodes)}
sample_devices = {}
regulationset = set()
for nodedev in nodedevs:
secnode = nodedev._secnode
if not secnode:
@ -513,6 +516,9 @@ class FrappyConfig(Device):
except KeyError:
meaning = None
if meaning:
head, _, tail = meaning.partition('_')
if tail == 'regulation':
regulationset.add(head)
meaning_name, importance = meaning
sample_devices.setdefault(meaning_name, []).append((importance, devname))
@ -541,7 +547,15 @@ class FrappyConfig(Device):
session.log.warn("neither 'predefined_alias' nor 'alias' configured. skip %s", meaning)
continue
importance_list = sample_devices.get(meaning, [])
importance_list.extend([(nr, nam) for nam, nr in aliascfg.items() if nam in session.devices])
for devname, nr in aliascfg.items():
dev = session.devices.get(devname)
if dev:
# increase importance by 10 for stick or 20 for addons, in case the device is
# living on the stick/addons node
nr += add_importance.get(str(getattr(dev, 'secnode', '')), 0)
importance_list.append((nr, devname))
if meaning in regulationset: # take temperature_regulation when temperature is not available
importance_list.extend(sample_devices.get(f'{meaning}_regulation', []))
importance_list = sorted(importance_list, reverse=True)
session.log.debug('%s: %r', meaning, importance_list)
for _, devname, in importance_list: