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.7 - 05.11.23
!- für CCU3 ab 3.53.34 (und deren Derivate) sowie RaspberryMatic 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 ids_address; string start_address; string hmip_firmw; string rf_serial = ""; string hmip_serial; string old_serial; string rf_hw; string sys_hw;
string data; string dc_value = "-"; string stdOut; string stdErr; object oInterface; string sInterfaceURL;
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 = desc.Substr(anfang + 11, ende - anfang + 11).Trim();
WriteLine("Auflistung der gefundenen BidCos-Adressen:");
WriteLine("BidCoS-Adresse der HM-RCV-50 (nutzt das Analyzer-Script für seine Anzeige): "# analyzer_address);
}}
system.Exec("grep -i BidCoS-Address /etc/config/ids | tr -d '[:space:]' | cut -d= -f2", &ids_address);
ids_address = ids_address.Trim();
WriteLine("BidCoS-Adresse aus /etc/config/ids (die aktuell genutzte Adresse): "# ids_address);
system.Exec("grep -i BidCoS-Address /var/ids | tr -d '[:space:]' | cut -d= -f2", &start_address);
WriteLine("BidCoS-Adresse aus /var/ids (beim Systemstart ausgelesene Adresse): "# start_address.Trim() #"\n");
system.Exec("grep HM_HOST= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &sys_hw);
WriteLine("Zentralen-Hardware: "# sys_hw.Replace("'","").Trim() #"\n");
system.Exec("cat /boot/VERSION", &data);
WriteLine(data.Trim());
WriteLine("RegaHSS="# dom.BuildLabel() #"\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 s = stdOut.Replace("{ADDRESS",";").Substr(2);
WriteLine("Gefundene Geräte:");
integer n = 0;
string Serials = "";
while (n <= web.webGetValueListCount(s) -1) {
string l = web.webGetValueFromList(s,n);
string sType = l.Substr(l.Find("TYPE ")+ 5,6).Replace("}","").Trim();
string sAddr = l.Substr(0,l.Find("CONNECTED"));
sAddr.Trim();
string dc_value = l.Substr(l.Find("CYCLE") + 6, l.Find("FIRMWARE") - l.Find("CYCLE") + 6).Trim();
if (sType.Contains("CCU")) {
if ((Serials) && (Serials.StartsWith(";"))) {Serials = sAddr #";"# Serials;} else {Serials = sAddr;}
rf_serial = Serials;
WriteLine("SN: "# Serials.Trim() #" | Typ: "# sType.Substr(0,3) #" | DutyCycle: "# dc_value #"%");
}
else {
if ((Serials) && (Serials.StartsWith(";"))) {Serials = Serials #";"# sAddr;} else {Serials = sAddr;}
WriteLine("SN: "# Serials.Trim() #" | Typ: "# sType #" | DutyCycle: "# dc_value #"%");
}
n = n + 1;
}}
else {
WriteLine("Fehler beim auslesen der Seriennummern...\nFehlermeldung: "# stdErr.Trim() #"\nAlternative Auslesemethode wird genutzt...");
system.Exec("cat /var/rf_board_serial", & rf_serial);
}}
else {
WriteLine("BidCos-Interface zum auslesen der Daten nicht gefunden...\nAlternative Auslesemethode wird genutzt...");
system.Exec("cat /var/rf_board_serial", & rf_serial);
}
WriteLine("\nFunkmodul-Daten des aktuellen Moduls:");
system.Exec("grep HM_HMIP_DEV= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &rf_hw);
WriteLine("Funkmodul Typ: "# rf_hw.Replace("'","").Trim());
system.Exec("cat /var/hmip_firmware_version", &hmip_firmw);
WriteLine("Funkmodul Firmware: "# hmip_firmw.Trim());
system.Exec("cat /var/hmip_board_serial", &hmip_serial);
WriteLine("Funkmodul Seriennummern: "# rf_serial.Trim() #" | "# hmip_serial.Trim());
system.Exec("grep HM_HMIP_DEVTYPE= /var/hm_mode | tr -d '[:space:]' | cut -d= -f2", &rf_hw);
WriteLine("Funkmodul Anschluss: "# rf_hw.Replace("'","").Trim() #"\n");
WriteLine("Funkmodul-Daten des initialen Moduls:");
system.Exec("grep -i SerialNumber /etc/config/ids | tr -d '[:space:]' | cut -d= -f2", &old_serial);
string old_serial_sn = "n/a";
old_serial = old_serial.Trim();
if (old_serial) { old_serial_sn = old_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);
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 ((ids_address != 65535 ) && (ids_address != 0 )){
WriteLine("Deine Zentrale funkt mit einer unikalen BidCos-Adresse (" # ids_address # "), 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 ("# analyzer_address #") dabei herauskommen.\n");
}
else {
WriteLine("Deine Zentrale funkt nicht mit einer unikalen BidCos-Adresse ("# ids_address #")!!!
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:\nDeine Zentrale hatte beim ersten Start kein direkt verbundenenes Funkmodul,\ndaher konnten keine alten Funkmodul-Daten ausgelesen werden."); }
elseif (!((hmip_serial.Trim() == old_serial.Trim()) || (rf_serial.Trim() == old_serial.Trim()))) {
WriteLine("Info:\nDeine Zentrale läuft mit dem Backup einer anderen Zentrale\noder 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