Hier mal ein Beispielhaftes Ergebnis der Ausgabe (im Script testen ausgeführt):
Beispielausgabe:
Code: Alles auswählen
Auflistung der gefundenen BidCos-Adressen:
BidCoS-Adresse der HM-RCV-50 (nutzt das Analyzer-Script für seine Anzeige): 16770025
BidCoS-Adresse aus /etc/config/ids (die aktuell genutzte Adresse): 16770025
BidCoS-Adresse aus /var/ids (beim Systemstart ausgelesene Adresse): 0xFFE3E9
Zentralen-Hardware: ova-KVM
VERSION=3.71.12.20231104
PRODUCT=raspmatic_ova
PLATFORM=ova
RegaHSS=R1.00.0388.0235
Gefundene Geräte:
SN: PEQ0532930 | Typ: HMLGW2 | DutyCycle: 0%
SN: SEQ0896344 | Typ: CCU | DutyCycle: 1%
Funkmodul-Daten des aktuellen Moduls:
Funkmodul Typ: HMIP-RFUSB
Funkmodul Firmware: 4.4.18
Funkmodul Seriennummern: SEQ0896344 | 1D89971558
Funkmodul Anschluss: eQ-3HmIP-RFUSB@usb-0000:02:1b.0-1
Funkmodul-Daten des initialen Moduls:
Funkmodul Seriennummer.: n/a
Auswertung:
Deine Zentrale funkt mit einer unikalen BidCos-Adresse (16770025), also alles gut!
Wenn du diese Adresse in dezimal umrechnest
(z.B. mittels https://www.rapidtables.com/convert/number/hex-to-decimal.html)
sollte die vom Analyzer genutzte Adresse (16770025) dabei herauskommen.
Info:
Deine Zentrale hatte beim ersten Start kein direkt verbundenenes Funkmodul,
daher konnten keine alten Funkmodul-Daten ausgelesen werden.
- für CCU3 ab 3.53.34 (und deren Derivate) sowie RaspberryMatic ab 3.53.30.20201024
- nicht getestet mit CCU2
- die Ausgaben können sich zwischen CCU3 und RaspberryMatic geringfügig unterscheiden
- CCU3 liest den Anschluss-Typ nicht aus, aber da geht je eh nur RPI-RF-MOD auf GPIO
... bitte im Herkunfts-Thread posten.
Das Script:
Code: Alles auswählen
!- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware, Zentralen Hardware und verbundene Klienten
!- by Baxxy (powered by Black)
!- v2.11 - 09.12.25
!- für CCU3 ab 3.53.34 (und deren Derivate) sowie RaspberryMatic / OpenCCU ab 3.53.30.20201024 | nicht getestet mit CCU2
!- https://homematic-forum.de/forum/viewtopic.php?f=31&t=62096#p614148
string modul_data = "ja"; !- ["ja"] oder ["nein"] eintragen um sensible Funkmoduldaten auszugeben
string crypt_data = "ja"; !- Infos zum Sicherheitsschlüssel-Status ausgeben ["ja"] oder eben nicht ["nein"]
string client_data = "ja"; !- Infos zu Klienten, die an den Schnittstellen hängen, anzeigen. z.B. ioBroker, Homeassistant, nodeRed, Homematic-Manager ["ja"] oder ["nein"]
!----------------------------------------------------------------------------------------
string sDevId; string sIDS_Address_Hex; string sStart_Address_Hex; string sIDS_Address_Dec; string sStart_Address_Dec; string sHmIP_Firmware; string sRF_Serial = ""; string sHostname;
string sHmIP_Serial; string sOld_Serial; string sRF_HW; string sSys_HW; string sDC_Val = "-"; string stdOut; string stdErr; object oInterface; string sInterfaceURL;
string sSW_Type; string sSW_Version; string sSW_Type_raw; string sPlatform; string sVirtTest;
boolean bIs_OpenCCU; boolean bIs_Debmatic; boolean bIsPiVCCU;
WriteLine("Zentralen-Infos:");
system.Exec("grep PRODUCT= /VERSION | tr -d '[:space:]' | cut -d= -f2", &sSW_Type_raw);
sSW_Type_raw = sSW_Type_raw.Trim().ToLower();
sSW_Type = sSW_Type_raw;
if (sSW_Type == "ccu2") { sSW_Type = "CCU2"; }
elseif ( sSW_Type == "ccu3" ) {
system.Exec("head -n1 /proc/2/status", &sVirtTest);
if (sVirtTest.Contains("kthreadd")) { sSW_Type = "CCU3"; }
else { sSW_Type = "piVCCU"; bIsPiVCCU = true; }
}
elseif (sSW_Type.Contains("raspmatic")) { sSW_Type = "RaspberryMatic"; }
elseif (sSW_Type == "debmatic") { sSW_Type = "debmatic"; bIs_Debmatic = true; }
else { sSW_Type = "OpenCCU"; bIs_OpenCCU = true; }
WriteLine(" Zentralen-Software: "# sSW_Type);
system.Exec("grep HM_HOST= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &sSys_HW);
system.Exec("grep PLATFORM= /VERSION | tr -d '[:space:]' | cut -d= -f2", &sPlatform);
sSys_HW = sSys_HW.Replace("'","").Trim();
sPlatform = sPlatform.Trim();
if (bIs_OpenCCU) {
if (sSys_HW != sSW_Type_raw) {
sSys_HW = sSys_HW #" / "# sSW_Type_raw;
}
}
elseif (bIs_Debmatic) {
if (sSys_HW != sPlatform) {
sSys_HW = sSys_HW #" / "# sPlatform;
}
}
elseif (bIsPiVCCU) {
sSys_HW = "unbekannt / lxc";
}
WriteLine(" Zentralen-Hardware: "# sSys_HW);
system.Exec("grep VERSION= /VERSION | tr -d '[:space:]' | cut -d= -f2", &sSW_Version);
WriteLine(" Zentralen-Firmware: "# sSW_Version.Trim());
system.Exec("hostname", &sHostname);
WriteLine(" Zentralen-Hostname: "# sHostname.Trim());
WriteLine(" Zentralen-RegaHss: "# dom.BuildLabel() #"\n");
foreach(sDevId, root.Devices().EnumUsedIDs()) {
var dev= dom.GetObject(sDevId);
if (dev.Address() == "BidCoS-RF") {
string desc = dev.MetaData("DEVDESC");
integer anfang = desc.Find("RF_ADDRESS:");
integer ende = desc.Find(",ROAMING");
string analyzer_address_dec = desc.Substr(anfang + 11, ende - anfang + 11).Trim();
string analyzer_address_hex;
system.Exec("printf '%X\n' "#analyzer_address_dec, &analyzer_address_hex, &stdErr);
analyzer_address_hex = "0x"#analyzer_address_hex.Trim();
WriteLine("Auflistung der gefundenen BidCos-Adressen:");
WriteLine(" BidCoS-Adresse HM-RCV-50 (nutzt der (XS)Analyzer für seine Anzeige): "# analyzer_address_dec #" | "# analyzer_address_hex);
}
}
system.Exec("grep -i BidCoS-Address /etc/config/ids | tr -d '[:space:]' | cut -d= -f2", &sIDS_Address_Hex);
sIDS_Address_Hex = sIDS_Address_Hex.Trim();
system.Exec("echo $(("#sIDS_Address_Hex#"))", &sIDS_Address_Dec, &stdErr);
sIDS_Address_Dec = sIDS_Address_Dec.Trim();
WriteLine(" BidCoS-Adresse aus /etc/config/ids (die aktuell genutzte Adresse): "# sIDS_Address_Dec #" | "# sIDS_Address_Hex);
system.Exec("grep -i BidCoS-Address /var/ids | tr -d '[:space:]' | cut -d= -f2", &sStart_Address_Hex);
sStart_Address_Hex = sStart_Address_Hex.Trim();
system.Exec("echo $(("#sStart_Address_Hex#"))", &sStart_Address_Dec, &stdErr);
sStart_Address_Dec = sStart_Address_Dec.Trim();
WriteLine(" BidCoS-Adresse aus /var/ids (beim Systemstart ausgelesene Adresse): "# sStart_Address_Dec #" | "# sStart_Address_Hex #"\n");
if (modul_data == "ja"){
oInterface = interfaces.Get ("BidCos-RF");
if (oInterface) {
sInterfaceURL = oInterface.InterfaceUrl();
string sTCL= ^puts [xmlrpc ^ # sInterfaceURL # ^/ listBidcosInterfaces]^;
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
if (stdOut) {
!- 3 Test-Zeilen fürs Debugging
!stdOut = "{ADDRESS NEQ1694194 CONNECTED 1 DEFAULT 0 DESCRIPTION {} DUTY_CYCLE 100 FIRMWARE_VERSION 1.4.1 TYPE HMLGW2} {ADDRESS QEQ0682647 CONNECTED 1 DEFAULT 1 DESCRIPTION {} DUTY_CYCLE 77 FIRMWARE_VERSION 4.2.6 TYPE CCU2} {ADDRESS LEQ1694195 CONNECTED 1 DEFAULT 0 DESCRIPTION {} DUTY_CYCLE 22 FIRMWARE_VERSION 1.4.1 TYPE HMLGW2}";
!stdOut = "{ADDRESS PEQ0532930 CONNECTED 1 DEFAULT 0 DESCRIPTION {} DUTY_CYCLE 1 FIRMWARE_VERSION 2.8.6 TYPE HMLGW2} {ADDRESS SEQ0896344 CONNECTED 1 DEFAULT 1 DESCRIPTION {} DUTY_CYCLE 1 FIRMWARE_VERSION 4.4.18 TYPE CCU2}";
!Write("Out: "# stdOut);
string sTemp = stdOut.Replace("{ADDRESS",";").Substr(2);
WriteLine("Gefundene Geräte:");
integer iCount = 0;
string sSerials_Tmp = "";
while (iCount <= web.webGetValueListCount(sTemp) -1) {
string l = web.webGetValueFromList(sTemp,iCount);
string sType = l.Substr(l.Find("TYPE ")+ 5,6).Replace("}","").Trim();
string sAddr = l.Substr(0,l.Find("CONNECTED"));
sAddr.Trim();
string sDC_Val = l.Substr(l.Find("CYCLE") + 6, l.Find("FIRMWARE") - l.Find("CYCLE") + 6).Trim();
if (sType.Contains("CCU")) {
if ((sSerials_Tmp) && (sSerials_Tmp.StartsWith(";"))) {sSerials_Tmp = sAddr #";"# sSerials_Tmp;} else {sSerials_Tmp = sAddr;}
sRF_Serial = sSerials_Tmp;
WriteLine(" SN: "# sSerials_Tmp.Trim() #" | Typ: "# sType.Substr(0,3) #" | DutyCycle: "# sDC_Val #"%");
}
else {
if ((sSerials_Tmp) && (sSerials_Tmp.StartsWith(";"))) {sSerials_Tmp = sSerials_Tmp #";"# sAddr;} else {sSerials_Tmp = sAddr;}
WriteLine(" SN: "# sSerials_Tmp.Trim() #" | Typ: "# sType #" | DutyCycle: "# sDC_Val #"%");
}
iCount = iCount + 1;
}
}
else {
WriteLine("Fehler beim auslesen der Seriennummern...\nFehlermeldung: "# stdErr.Trim() #"\nAlternative Auslesemethode wird genutzt...");
system.Exec("cat /var/rf_board_serial", & sRF_Serial);
}
}
else {
WriteLine("BidCos-Interface zum auslesen der Daten nicht gefunden...\nAlternative Auslesemethode wird genutzt...");
system.Exec("cat /var/rf_board_serial", & sRF_Serial);
}
WriteLine("\nFunkmodul-Daten des aktuellen Moduls:");
system.Exec("grep HM_HMIP_DEV= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &sRF_HW);
WriteLine(" Funkmodul Typ: "# sRF_HW.Replace("'","").Trim());
system.Exec("cat /var/hmip_firmware_version", &sHmIP_Firmware);
WriteLine(" Funkmodul Firmware: "# sHmIP_Firmware.Trim());
system.Exec("cat /var/hmip_board_serial", &sHmIP_Serial);
WriteLine(" Funkmodul Seriennummern: "# sRF_Serial.Trim() #" | "# sHmIP_Serial.Trim());
system.Exec("grep HM_HMIP_DEVTYPE= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &sRF_HW);
WriteLine(" Funkmodul Anschluss: "# sRF_HW.Replace("'","").Trim() #"\n");
WriteLine("Funkmodul-Daten des initialen Moduls:");
system.Exec("grep -i SerialNumber /etc/config/ids | tr -d '[:space:]' | cut -d= -f2", &sOld_Serial);
string old_serial_sn = "n/a";
sOld_Serial = sOld_Serial.Trim();
if (sOld_Serial) { old_serial_sn = sOld_Serial; }
WriteLine(" Funkmodul Seriennummer.: "# old_serial_sn #"\n");
}
if (crypt_data =="ja"){
string cmd = "/bin/sh -c 'crypttool -g'";
system.Exec(cmd, &stdOut, &stdErr);
if (stdOut){
WriteLine("Schlüsselanalyse:\n"# stdOut);
}
else {
WriteLine("Fehler in Schlüsselanalyse:\n "# stdErr);
}}
if (client_data =="ja"){
string rfd_handlers; string virt_dev_handlers; string ip_handlers;
system.Exec("cat /var/LegacyService.handlers", & ip_handlers);
system.Exec("cat /var/RFD.handlers", & rfd_handlers);
system.Exec("cat /var/HMSERVER.handlers", & virt_dev_handlers);
ip_handlers = ip_handlers.Substr(ip_handlers.Find("CET ")+ 9,1000);
ip_handlers = ip_handlers.Replace(^\^,"");
WriteLine("verbundene Klienten:");
WriteLine("- HmIP Schnittstelle:\n"# ip_handlers.Trim() #"\n\n- BidCos-RF Schnittstelle:\n"# rfd_handlers.Trim() # "\n\n- Virt.-Devices Schnittstelle:\n"# virt_dev_handlers.Trim() #"\n");
}
WriteLine("Auswertung:");
if ((sIDS_Address_Hex != 65535 ) && (sIDS_Address_Hex != 0 )){
WriteLine(" Deine Zentrale funkt mit einer unikalen BidCos-Adresse ("# sIDS_Address_Dec #" | "# sIDS_Address_Hex #"), also alles gut!\n");
}
else {
WriteLine(" Deine Zentrale funkt nicht mit einer unikalen BidCos-Adresse ("# sIDS_Address_Dec #" | "# sIDS_Address_Hex #")!!!
Du solltest den ganzen Thread lesen und selbst entscheiden
ob du was (dagegen) unternehmen möchtest.\n");
}
if (old_serial_sn == "n/a") {
WriteLine("Info:\n Deine Zentrale hatte beim ersten Start kein direkt verbundenenes Funkmodul,\n daher konnten keine alten Funkmodul-Daten ausgelesen werden."); }
elseif (!((sHmIP_Serial.Trim() == sOld_Serial.Trim()) || (sRF_Serial.Trim() == sOld_Serial.Trim()))) {
WriteLine("Info:\n Deine Zentrale läuft mit dem Backup einer anderen Zentrale\n oder das Funkmodul wurde irgendwann gewechselt."); }
Edit: auf Version 2.3 aktualisiert - kleinere Optimierungen / Beispielausgabe aktualisiert
Edit: auf Version 2.5 aktualisiert - Ausgabe verbundener Klienten (ioBroker, Homeassistant, NodeRED, Homematic Manager usw.) eingebaut
Edit: auf Version 2.6 aktualisiert - BidCos-Interface Abfrage optimiert, Info-Ausgabe erweitert, Beispielausgabe aktualisiert
Edit: auf Version 2.7 aktualisiert - kleinere Optimierungen / Beispielausgabe aktualisiert
Edit: auf Version 2.8 aktualisiert - kleinere Optimierungen / alle Adressen werden nun in dezimal und hexadezimal ausgegeben
Edit: auf Version 2.9 aktualisiert - Ausgabe verbundener Klienten etwas verschönert
Edit: auf Version 2.11 aktualisiert - Zentralenerkennung optimiert