AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Beitrag von jp112sdl » 02.01.2021, 14:44

Mir ist es erst kürzlich passiert, dass ich eine Geräteadresse doppelt vergeben habe.

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");
Ergibt dann sowas wie

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)
...
Man kann noch filtern, indem man die Strings in den ersten beiden Zeilen füttert.
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
Zuletzt geändert von jp112sdl am 02.01.2021, 22:11, insgesamt 5-mal geändert.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Martin62
Beiträge: 681
Registriert: 09.12.2019, 21:24
Hat sich bedankt: 151 Mal
Danksagung erhalten: 61 Mal

Re: AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Beitrag von Martin62 » 02.01.2021, 15:09

Wie immer Top! Danke Jérôme, ich habe schon überall kleine Zettel, kann ich mir jetzt sparen. :lol:
Gruß Martin

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Beitrag von jp112sdl » 02.01.2021, 21:27

Hab das Skript noch mal überarbeitet und den lahmen xml_rpc Aufruf rausgeschmissen.
Bei mir dauerte das Erzeugen der Liste vorher knapp 3 Sekunden. Ist jetzt in einer durch.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

emil70
Beiträge: 288
Registriert: 02.12.2017, 13:47
System: CCU
Hat sich bedankt: 33 Mal
Danksagung erhalten: 8 Mal

Re: AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Beitrag von emil70 » 03.01.2021, 10:12

Super Idee

Könntest du noch mit einbauen, das die Ausgabe in eine Variable geschrieben wird
gruß emil70

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: AskSinPP: CCU-Inventur-Skript Geräteadressen (RF Adressen)

Beitrag von jp112sdl » 03.01.2021, 11:12

emil70 hat geschrieben:
03.01.2021, 10:12
Könntest du noch mit einbauen, das die Ausgabe in eine Variable geschrieben wird
Das kannst du auch selbst... SV Zeichenkette "RFAddressList" anlegen und ans Ende vom Skript noch

Code: Alles auswählen

dom.GetObject(ID_SYSTEM_VARIABLES).Get("RFAddressList").State(rfaddresslist);
schreiben.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“