De som har lest HomeSeer-skolen vet at jeg er veldig opptatt av å holde orden i systemet sitt. Det er fordi da er det så mye enklere å finne frem når man skal automatisere. Det er lett å huske hva "Node 11 Switch Multilevel 1" er når man bare har 11 noder, men når man har mange er det selvfølgelig helt umulig.
I HomeSeer er det lett å tilordne rom og etasje til enhetene dine, men det er tungvindt å gi selve devicene noe mer fornuftig valg. Jeg navngir enheter med "Enhet, device_type", slik at det f.eks. er "Taklys, Switch Multilevel 1" eller "Taklys, Power", og det har jeg frem til nå gjort manuelt fordi jeg legger til en og en node.
Men tidligere i vår satte jeg opp et helt hus på et par dager, på over 60 noder. Da tar det altfor lang tid å gjøre det manuelt, og et script var på sin plass.
Scriptet gjør at dette:
... enkelt kan forandres til dette (etter å ha også gitt dem nye etaskjer og rom):
... og dermed kan man med litt sjuling av "unødvendige enheter" ende opp med noe enklere:
Det fungerer også på andre sensorer, bl.a. bevegelsessensorer og magnetbrytere.
Før:
Etter:
Bruk
Måten det gjøres på er at root-devicen navngis med navnet du har tenkt å bruke og med et komma og Root bak, f.eks. "Taklys, Root (123)" (jeg har også begynt å sette nodenummeret i parentes bak Root).
Så kjøres scriptet med Root Device ID som parameter, sub/function må settes til "RenameDevices".
RenameDevices.vb
Sub RenameDevices(input As String)
'Moskus 2019
Dim rootRef As Integer = input
Dim rootDevice As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(rootRef)
rootDevice.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.NO_LOG)
If Not rootDevice.Name(hs).Contains("Switch") Then rootDevice.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.AUTO_VOICE_COMMAND)
Dim rootName As String = rootDevice.Name(hs)
Dim prefix As String = rootName.Substring(0, rootName.IndexOf(",")).Trim
hs.WriteLog("RenameDevices", "Starting with prefix: " & prefix)
Dim i As Integer
'For i = (rootRef + 1) To endRef
For Each i In rootDevice.AssociatedDevices(hs)
Dim device As Scheduler.Classes.DeviceClass = hs.GetDeviceByRef(i)
device.Name(hs) = prefix + ", " + device.Name(hs)
device.MISC_Set(hs, HomeSeerAPI.Enums.dvMISC.NO_LOG)
If Not device.Name(hs).Contains("Switch") Then device.MISC_Clear(hs, HomeSeerAPI.Enums.dvMISC.AUTO_VOICE_COMMAND)
Next
hs.SaveEventsDevices()
hs.WriteLog("RenameDevices", "Done renaming " & prefix)
End Sub