Funktioniert mit CCU Firmware 3.57.5 (orig. eQ-3 und RaspberryMatic) - andere Versionen sollten auch gehen, habe ich jedoch nicht getestet.
Mit diesem Skript ist es möglich, die Anzeige "Neue Geräte-Firmware verfügbar" für bestimmte Gerätetypen sowie Firmware-Versionen auf der Starteseite auszublenden.
So stört mich u.a. der Hinweis auf Versionen, die ich ohnehin nie einspielen werde. Was zu tun ist:
1.) Eine Systemvariable namens "HideDeviceFirmwareUpdateInfo" vom Typ "Zeichenkette" anlegen und dort mit ; getrennt die Gerätetypen reinschreiben (z.B. HM-ES-PMSw1-Pl;HM-CC-RT-DN;), deren FW Updates nicht mehr auf der Startseite angezeigt werden sollen.
1.a) Soll nur eine bestimmte Firmware-Version ausgeblendet werden, so ist diese mit einem Komma nach dem Gerätetyp anzugeben.
Beispiel:
Vom HM-ES-PMSw1-Pl wird nur FW Version 2.6.0 ausgeblendet.
(Sollte es irgendwann mal eine 2.7 geben, würde diese wieder angezeigt werden!)
Vom HM-CC-RT-DN werden alle Firmware-Update ausgeblendet.
2.) Das Skript (regelmäßig/zeitgesteuert) auf der CCU ausführen:
Code: Alles auswählen
object sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get("HideDeviceFirmwareUpdateInfo");
if (sv) {
! URL zusammenbauen, um die echte Firmwareliste vom eQ-3 Server zu holen, anschliessend mit curl runterladen
string out;
string err;
system.Exec("cat /boot/VERSION|grep VERSION|awk -F= '{print$2}'", &out, &err);
string ccufw = out.Replace("\r","").Replace("\n","");
string sDate = system.Date("%s");
string url = "http://ccu3-update.homematic.com/firmware/api/firmware/search/DEVICE?product=HM-CCU3&version="#ccufw#"&ts="#sDate;
string downloadcmd = "curl -m 8 '"#url#"' > /usr/local/devlist.js";
out="";err="";
system.Exec(downloadcmd, &out, &err);
WriteLine(out#" "#err);
! die heruntergeladene Datei liegt nun unter /usr/local/devlist.js
! ggf. Symlink nach /www/ise anlegen
out="";err="";
system.Exec("if [ -e /usr/local/devlist.js ]; then if [ ! -e /www/ise/devlist.js ]; then mount -o remount,rw / ; ln -s /usr/local/devlist.js /www/ise/devlist.js ; mount -o remount,ro / ; echo 'Symlink angelegt'; else echo 'Symlink existiert'; fi; else echo '/usr/local/devlist.js existiert nicht. Abbruch'; fi", &out, &err);
WriteLine(out#" "#err);
! ggf. webui.js anpassen, um nun die FW Infos von der lokalen Datei zu laden
out="";err="";
system.Exec(^webuiSearch='[[:space:]]*script.src[[:space:]]=[[:space:]]*this.m_URLServer[[:space:]]+[[:space:]]"/firmware/api/firmware/search/DEVICE?product=HM-CCU"+getProduct()+"&version="+WEBUI_VERSION' ; webuiInsert='script.src = "/ise/devlist.js";' ; webuiFile=/www/webui/webui.js ; if [ -z `grep -n "/ise/devlist.js" $webuiFile | cut -f1 -d:` ]; then echo "Anpassung in webui.js fehlt."; l=`grep -n $webuiSearch $webuiFile | cut -f1 -d:` ; if [ ! -z $l ]; then echo "OK... fuehre Aenderungen durch"; mount -o remount,rw / ; l=$((l+1)) ; sed -i "${l}i $webuiInsert" $webuiFile ; mount -o remount,ro / ; echo "Anpassungen an webui.js erledigt."; fi ; else echo "Keine Anpassungen an webui.js notwendig."; fi^, &out, &err);
WriteLine(out#" "#err);
string devTypesRemove=sv.Value();
string devType;
foreach(devType, devTypesRemove.Split(";")) {
string devVers="0";
if (devType.Contains(",") == true) {
integer pos=devType.Find(",");
devVers=devType.Substr(pos+1,devType.Length()-pos);
devType=devType.Substr(0,pos);
}
!jetzt noch die Geraetebezeichnungen umbenennen (XYZ voranstellen), so dass diese nicht mehr gefunden werden koennen
out="";err="";
if (devVers == "0") {
WriteLine("Ausschluss für "#devType#" (alle Firmware-Versionen)");
system.Exec(^sed -i 's/\"^#devType#^/\"XYZ^#devType#^/g' /usr/local/devlist.js^, &out, &err);
} else {
WriteLine("Ausschluss für "#devType#" (nur FW Version "#devVers#")");
system.Exec(^if [ `grep -n {\"type\":\"^#devType#^\",\"version\":\"^#devVers#^\"} /usr/local/devlist.js` ]; then sed -i 's/\"^#devType#^/\"XYZ^#devType#^/g' /usr/local/devlist.js; fi^, &out, &err);
}
WriteLine(out#" "#err);
}
WriteLine("ALL DONE");
} else {
WriteLine ("Systemvariable [Zeichenkette] 'NoDeviceFirmware' existiert nicht");
}
Um die Sache rückgängig zu machen, ist in der Datei /www/webui/webui.js die Zeile
script.src = "/ise/devlist.js";
suchen und entfernen.
Alle anderen vom Skript ausgeführten Modifikationen sind nicht weiter schädlich.
30.08.02023 Anpassung für CCU Version 3.71.x, Zeile 26:
Code: Alles auswählen
system.Exec(^webuiSearch='[[:space:]]*script.src[[:space:]]=[[:space:]]*this.m_URLServer[[:space:]]+[[:space:]]"/firmware/api/firmware/search/DEVICE?product=HM-CCU"[[:space:]]+[[:space:]]getProduct()[[:space:]]+[[:space:]]"&version="[[:space:]]+[[:space:]]*WEBUI_VERSION' ; webuiInsert='script.src = "/ise/devlist.js";' ; webuiFile=/www/webui/webui.js ; if [ -z `grep -n "/ise/devlist.js" $webuiFile | cut -f1 -d:` ]; then echo "Anpassung in webui.js fehlt."; l=`grep -n $webuiSearch $webuiFile | cut -f1 -d:` ; if [ ! -z $l ]; then echo "OK... fuehre Aenderungen durch"; mount -o remount,rw / ; l=$((l+1)) ; sed -i "${l}i $webuiInsert" $webuiFile ; mount -o remount,ro / ; echo "Anpassungen an webui.js erledigt."; fi ; else echo "Keine Anpassungen an webui.js notwendig."; fi^, &out, &err);