Und da es mir an einer Idee fehlt, wo ich eine Übersicht der bereits vergebenen RF Adressen ablegen kann (extra Datei pflegen nervt auch irgendwie), habe ich hier mal ein kleines Skript gebaut, das alle Adressen der BidCos Geräte, die an der CCU angelernt sind, ausgibt.
Sortiert ist sie nach Adresse aufsteigend.
Code: Alles auswählen
string show_devices_w_serial_starting_with = ""; ! leave empty for no filtering
string hide_devices_w_serial_containing = ""; ! leave empty for no filtering
object oUser = dom.GetObject( system.GetSessionVar('sessionUserID') );
oUser.UserTempViewIDs3().RemoveAll();
string o;
string hexAddress;
string err;
string metaData;
string data;
boolean hide_flt=false;
if (hide_devices_w_serial_containing == "") { hide_flt = true; }
foreach (o, root.Devices().EnumUsedIDs()) {
var dev = dom.GetObject(o);
var name = dev.Name();
var addr = dev.Address();
var iface = dom.GetObject(dev.Interface());
if ((iface.Name() == "BidCos-RF") &&
(addr.Length() == 10) &&
(addr.StartsWith(show_devices_w_serial_starting_with)) &&
(addr.Contains(hide_devices_w_serial_containing) == hide_flt)) {
metaData = dev.MetaData("DEVDESC");
foreach (data, metaData.Split(",")) {
if (data.Substr(0,8) == "FIRMWARE") {
string fw = data.Replace("FIRMWARE:\"","");
fw = fw.Substr(0,fw.Length() -1);
}
if (data.Substr(0,10) == "RF_ADDRESS") {
string decimalAddress = data.Replace("RF_ADDRESS:","");
if (decimalAddress != "0") {
string cmd = "printf '000000%x' "#decimalAddress;
system.Exec(cmd, &hexAddress, &err);
hexAddress = hexAddress.Substr(hexAddress.Length()-6, 6).ToUpper();
string formattedhexAddress = "{ 0x"#hexAddress.Substr(0,2)#", 0x"#hexAddress.Substr(2,2)#", 0x"#hexAddress.Substr(4,2)#" }";
string decimalAddressFixed = "00000000"#decimalAddress;
decimalAddressFixed = decimalAddressFixed.Substr(decimalAddressFixed.Length()-8, 8);
object oObj = dom.CreateObject(OT_XMLNODE);
oObj.Name(decimalAddressFixed);
oObj.AddMetaData("NAME", dev.Name());
oObj.AddMetaData("HEX", formattedhexAddress);
oObj.AddMetaData("ADDR", addr);
oObj.AddMetaData("FW", fw);
oUser.UserTempViewIDs3().Add(oObj.ID());
}
}
}
}
}
oUser.UserTempViewIDs3().SortByName();
string uid;
string rfaddresslist = "";
integer count = 0;
foreach (uid, oUser.UserTempViewIDs3().EnumIDs()) {
object o = dom.GetObject(uid);
rfaddresslist = rfaddresslist # o.MetaData("HEX")#" = "#o.MetaData("ADDR")#", FW: "#o.MetaData("FW")#" ("#o.MetaData("NAME")#")\n";
dom.DeleteObject(o);
count = count + 1;
}
Write(rfaddresslist);
WriteLine("\n=> "#count#" Geräte");
Code: Alles auswählen
...
{ 0xD9, 0x19, 0x01 } = JPWMO00001 FW: 1.0 (Wasserzähler Haus)
{ 0xE2, 0x4F, 0x02 } = JPRCDISTH2 FW: 1.1 (Wandsender m. Display Wohnzimmer)
{ 0xE3, 0x45, 0x01 } = HBSw1PBU01 FW: 2.4 (UP-Schalter Schlafzimmer)
...
1. Zeile: Zeige nur Geräte mit der Seriennummer beginnend mit... (z.B. nur "HBxxxxxxxx" Geräte anzeigen lassen)
2. Zeile: Zeige keine Geräte, die ... enthalten. (z.B. alle "EQ" Geräte ausblenden)
EDIT:
- Firmware-Version wird mit ausgegeben