Ich habe ein Skript erstellt, das mir alle meine selbst gebauten Geräte nach Raumname sortiert auflistet.
Nur um mal eine Übersicht zu bekommen.
Vielleicht ist es für den ein oder anderen auch interessant.
Das Skript basiert auf der Grundlage, dass ich bei der Seriennummernvergabe keine Schnittmenge mit den Originalgeräten habe.
So werden nur Geräte der CCU aufgelistet, deren Seriennummer
- 10stellig ist (HmIP fliegt gleich raus)
- an 2.+3. Stelle nicht EQ hat
- an 2.+3. Stelle nicht TK hat (Telekom-Geräte)
- an 2.+3. Stelle nicht AA hat (alte Wandtastermodelle)
- nicht mit CUX beginnt (CUxD...)
- nicht mit INT beginnt (Gruppen)
Für meinen Gerätepark passt das Ergebnis.
Optimierungen sind sehr willkommen... TCL ist nicht meine Lieblingssprache -.-
Code: Alles auswählen
string ch = "";
string room = "";
string lastRoom = "";
string result = "Raum\t\t\tSeriennum.\t[B] Gerätename (B = Batteriegerät)\n==============================================================\n";
integer hbCount = 0;
object chans = dom.GetObject(ID_CHANNELS);
object rooms = dom.GetObject(ID_ROOMS);
rooms.SortByName();
foreach(room, rooms.EnumUsedIDs()) {
foreach(ch, chans.EnumUsedIDs()) {
object oCh = dom.GetObject(ch);
object oDev = dom.GetObject(oCh.Device());
string adr = oCh.Address();
var devAddress = oDev.Address();
if (
(devAddress.Length() == 10) &&
(adr.Substr(1,2) != "EQ") &&
(adr.Substr(1,2) != "TK") &&
(adr.Substr(1,2) != "AA") &&
(!adr.StartsWith("CUX")) &&
(!adr.StartsWith("INT"))
) {
var chRoom = oCh.ChnRoom();
var devName = oDev.Name();
var roomName = dom.GetObject(room).Name();
if ((chRoom == room) && (!result.Contains("\t"#devAddress#"\t"))) {
string hasBattery = "[ ] ";
if (dom.GetObject("BidCos-RF."#devAddress#":0.LOWBAT")) { hasBattery = "[X] ";}
string spacer = "\t";
if (roomName.Length() < 4) {spacer = spacer # "\t";}
if (roomName.Length() < 8) {spacer = spacer # "\t";}
if (roomName.Length() < 12) {spacer = spacer # "\t";}
if (hbCount == 0) { lastRoom = room; }
if (room != lastRoom) {
lastRoom = room;
result = result#"--------------------------------------------------------------\n";
}
result = result # roomName # spacer # devAddress # "\t" # hasBattery # devName # "\n";
hbCount = hbCount + 1;
}
}
}
}
!dom.GetObject(ID_SYSTEM_VARIABLES).Get("HB_DeviceList").State(result);
WriteLine(result);
WriteLine("Anzahl Geräte: "#hbCount.ToString(0));
EDIT: Das mit den Batteriegeräten stimmt nicht. Leider haben auch die originalen Netzgeräte eine LOWBAT Datenpunkt.