From 08126e9d3b7abcf42e0a40e4d6c7d278446a5f39 Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:22:25 +0100 Subject: [PATCH 1/6] Add files via upload --- hmip-keyserver-check.patch | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 hmip-keyserver-check.patch diff --git a/hmip-keyserver-check.patch b/hmip-keyserver-check.patch new file mode 100644 index 00000000..0d6f8f12 --- /dev/null +++ b/hmip-keyserver-check.patch @@ -0,0 +1,83 @@ +diff --git a/www/config/cp_add_device.cgi b/www/config/cp_add_device.cgi +--- a/www/config/cp_add_device.cgi ++++ b/www/config/cp_add_device.cgi +@@ -21,2 +21,5 @@ + set HS485D_URL "bin://127.0.0.1:$portnumber" ++ ++set KEYSERVER_HOST "secgtw.homematic.com" ++set KEYSERVER_PORT 8443 + +@@ -204,3 +207,3 @@ + append html "" +- append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
" ++ append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}" + append html "" +@@ -306,3 +309,3 @@ + append html "" +- append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
" ++ append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}" + append html "" +@@ -397,2 +400,4 @@ + ++ puts "" ++ + initJavascript +@@ -457,2 +462,24 @@ + puts { ++ checkKeyserver = function() { ++ new Ajax.Request(url, { ++ method: "post", ++ postBody: "action=check_keyserver", ++ onSuccess: function(transport) { ++ var result = transport.responseText.trim(); ++ var key = result === "reachable" ? "dialogNewDevicesKeyserverReachable" : ++ result === "unreachable" ? "dialogNewDevicesKeyserverUnreachable" : ++ "dialogNewDevicesKeyserverCheckFailed"; ++ jQuery(".keyserver-status") ++ .removeClass("keyserver-reachable keyserver-unreachable") ++ .addClass(result === "reachable" ? "keyserver-reachable" : ++ result === "unreachable" ? "keyserver-unreachable" : "") ++ .text(translateKey(key) || key); ++ }, ++ onFailure: function() { ++ jQuery(".keyserver-status") ++ .removeClass("keyserver-reachable keyserver-unreachable") ++ .text(translateKey("dialogNewDevicesKeyserverCheckFailed") || "dialogNewDevicesKeyserverCheckFailed"); ++ } ++ }); ++ }; + update_new_device_count = function() { +@@ -766,2 +793,3 @@ + puts "translatePage('#messagebox');" ++ puts "checkKeyserver();" + puts "dlgPopup.readaptSize();" +@@ -983,2 +1011,11 @@ + ++proc action_check_keyserver {} { ++ global KEYSERVER_HOST KEYSERVER_PORT ++ if {[catch {exec nc -z -w 3 $KEYSERVER_HOST $KEYSERVER_PORT}]} { ++ puts "unreachable" ++ } else { ++ puts "reachable" ++ } ++} ++ + cgi_eval { +diff --git a/www/webui/js/lang/de/translate.lang.js b/www/webui/js/lang/de/translate.lang.js +--- a/www/webui/js/lang/de/translate.lang.js ++++ b/www/webui/js/lang/de/translate.lang.js +@@ -1,1 +1,5 @@ + "commentDialogNewDevices" : "***********************************************", ++ "dialogNewDevicesKeyserverChecking" : "eQ-3-Keyserver: Erreichbarkeit wird gepr%FCft ...", ++ "dialogNewDevicesKeyserverReachable" : "eQ-3-Keyserver: Erreichbar", ++ "dialogNewDevicesKeyserverUnreachable" : "eQ-3-Keyserver: Nicht erreichbar", ++ "dialogNewDevicesKeyserverCheckFailed" : "eQ-3-Keyserver: Pr%FCfung fehlgeschlagen", +diff --git a/www/webui/js/lang/en/translate.lang.js b/www/webui/js/lang/en/translate.lang.js +--- a/www/webui/js/lang/en/translate.lang.js ++++ b/www/webui/js/lang/en/translate.lang.js +@@ -1,1 +1,5 @@ + "commentDialogNewDevices" : "***********************************************", ++ "dialogNewDevicesKeyserverChecking" : "eQ-3 key server: Checking connectivity ...", ++ "dialogNewDevicesKeyserverReachable" : "eQ-3 key server: Reachable", ++ "dialogNewDevicesKeyserverUnreachable" : "eQ-3 key server: Not reachable", ++ "dialogNewDevicesKeyserverCheckFailed" : "eQ-3 key server: Check failed", From 1a7e5a22d34a1643a53e988d2defa5c51ab49515 Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:40:32 +0100 Subject: [PATCH 2/6] webui: add eQ-3 keyserver connectivity status --- www/config/cp_add_device.cgi | 69 ++++++++++++++++++++++++++++++++---- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/www/config/cp_add_device.cgi b/www/config/cp_add_device.cgi index 082113da..0ae5ba19 100755 --- a/www/config/cp_add_device.cgi +++ b/www/config/cp_add_device.cgi @@ -20,6 +20,9 @@ if { [info exists EQ3_SERVICE_HS485D_PORT] } { } set HS485D_URL "bin://127.0.0.1:$portnumber" +set KEYSERVER_HOST "secgtw.homematic.com" +set KEYSERVER_PORT 8443 + proc getButton {class onclick title} { set html "" @@ -46,12 +49,14 @@ proc initJavascript {} { var thisSection = jQuery("body").data(section); if(thisSection) { jQuery('#section'+section).show(); + jQuery('#sectionUNAVAIL').hide(); } else { if (typeof thisSection == "undefined") { homematic('Interface.isPresent', {"interface": section}, function(result, error) { if (result == true) { jQuery('#section'+section).show(); + jQuery('#sectionUNAVAIL').hide(); dlgPopup.readaptSize(); } }); @@ -62,6 +67,16 @@ proc initJavascript {} { } } +proc putSectionUNAVAIL {} { + set html "" + append html "" + append html "" + append html "\${dialogNewDevicesUNAVAILWarn}" + append html "" + append html "" + return $html +} + proc putSectionBidCosRF {} { set html "" @@ -190,7 +205,7 @@ proc putSectionHMIP {} { append html "" append html "" - append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
" + append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}" append html "" append html [getButton {CLASS21210 colorGradient50px} {buttonPressed(this); hmip_install_mode("HmIP-RF")} \${dialogNewDevicesHmIPAddDeviceBtn}] append html "" @@ -224,7 +239,7 @@ proc putSectionHMIP {} { append html "\${lblTeachInKEY}" append html "" append html "" - append html "" + append html "" append html "" append html "" @@ -233,7 +248,7 @@ proc putSectionHMIP {} { append html "\${lblTeachInSGTIN}" append html "" append html "" - append html "" + append html "" append html "" append html "" @@ -292,7 +307,7 @@ proc putSectionHMIPWired {} { append html "" append html "" - append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
" + append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}" append html "" append html [getButton {CLASS21210 colorGradient50px} {buttonPressed(this); hmip_install_mode("HmIP-Wired")} \${dialogNewDevicesHmIPAddDeviceBtn}] append html "" @@ -383,6 +398,8 @@ proc action_put_page {} { puts "
" + puts "" + initJavascript puts "" @@ -392,6 +409,10 @@ puts "
" puts "
" puts "" + # Start section UNAVAIL + puts [putSectionUNAVAIL] + # End section UNAVAIL + # Start section BidCos-RF puts [putSectionBidCosRF] # End section BidCos-RF @@ -439,6 +460,28 @@ puts "" puts "var url = \"$env(SCRIPT_NAME)?sid=\" + SessionId;" puts "var installTimerHmIP = 0;" puts { + checkKeyserver = function() { + new Ajax.Request(url, { + method: "post", + postBody: "action=check_keyserver", + onSuccess: function(transport) { + var result = transport.responseText.trim(); + var key = result === "reachable" ? "dialogNewDevicesKeyserverReachable" : + result === "unreachable" ? "dialogNewDevicesKeyserverUnreachable" : + "dialogNewDevicesKeyserverCheckFailed"; + jQuery(".keyserver-status") + .removeClass("keyserver-reachable keyserver-unreachable") + .addClass(result === "reachable" ? "keyserver-reachable" : + result === "unreachable" ? "keyserver-unreachable" : "") + .text(translateKey(key) || key); + }, + onFailure: function() { + jQuery(".keyserver-status") + .removeClass("keyserver-reachable keyserver-unreachable") + .text(translateKey("dialogNewDevicesKeyserverCheckFailed") || "dialogNewDevicesKeyserverCheckFailed"); + } + }); + }; update_new_device_count = function() { var pb = "action=get_new_device_count"; var opts = { @@ -712,8 +755,12 @@ puts "" } puts { OnInbox = function() { - rf_install_mode(false); - hmip_install_mode_stop(); + if (jQuery("body").data("BidCos-RF")) { + rf_install_mode(false); + } + if (jQuery("body").data("HmIP-RF")) { + hmip_install_mode_stop(); + } PopupClose(); WebUI.enter(NewDeviceListPage, {"fromTeachIn":true}); } @@ -744,6 +791,7 @@ puts "" } puts "translatePage('#messagebox');" + puts "checkKeyserver();" puts "dlgPopup.readaptSize();" } @@ -961,6 +1009,15 @@ proc action_get_new_device_count {} { puts [get_new_device_count] } +proc action_check_keyserver {} { + global KEYSERVER_HOST KEYSERVER_PORT + if {[catch {exec nc -z -w 3 $KEYSERVER_HOST $KEYSERVER_PORT}]} { + puts "unreachable" + } else { + puts "reachable" + } +} + cgi_eval { #cgi_debug -on cgi_input From 603688cb344cb352d9b62cccb557d93c2599b7ea Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:43:30 +0100 Subject: [PATCH 3/6] webui: add eQ-3 keyserver status translations --- www/webui/js/lang/de/translate.lang.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/www/webui/js/lang/de/translate.lang.js b/www/webui/js/lang/de/translate.lang.js index 1cdcec78..e73ba306 100755 --- a/www/webui/js/lang/de/translate.lang.js +++ b/www/webui/js/lang/de/translate.lang.js @@ -739,6 +739,10 @@ jQuery.extend(true,langJSON, { "dialogNewDevicesErrorSecKeyLbl1g" : "Sicherheitsschl%FCssel:", "dialogNewDevicesBtnSetKeyAndTryAgain" : "Schl%FCssel setzen und erneut versuchen", "dialogNewDevicesLblAllDevicesConfigured" : "Alle Ger%E4te konfiguriert", + "dialogNewDevicesKeyserverChecking" : "eQ-3-Keyserver: Erreichbarkeit wird gepr%FCft ...", + "dialogNewDevicesKeyserverReachable" : "eQ-3-Keyserver: Erreichbar", + "dialogNewDevicesKeyserverUnreachable" : "eQ-3-Keyserver: Nicht erreichbar", + "dialogNewDevicesKeyserverCheckFailed" : "eQ-3-Keyserver: Pr%FCfung fehlgeschlagen", "commentDialogNewDevicesEnd" : "***********************************************", "commentDialogHelp" : "***********************************************", "homepage" : "Homepage", From c2b95f8cfff79ba489124424037a53cab197f25f Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:45:06 +0100 Subject: [PATCH 4/6] webui: add eQ-3 keyserver status translations --- www/webui/js/lang/en/translate.lang.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/www/webui/js/lang/en/translate.lang.js b/www/webui/js/lang/en/translate.lang.js index 8093226f..c4a670c3 100755 --- a/www/webui/js/lang/en/translate.lang.js +++ b/www/webui/js/lang/en/translate.lang.js @@ -758,6 +758,11 @@ jQuery.extend(true,langJSON, { "dialogNewDevicesBtnSetKeyAndTryAgain" : "Set security key and try again", "dialogNewDevicesLblAllDevicesConfigured" : "All devices configured", + + "dialogNewDevicesKeyserverChecking" : "eQ-3 key server: Checking connectivity ...", + "dialogNewDevicesKeyserverReachable" : "eQ-3 key server: Reachable", + "dialogNewDevicesKeyserverUnreachable" : "eQ-3 key server: Not reachable", + "dialogNewDevicesKeyserverCheckFailed" : "eQ-3 key server: Check failed", "commentDialogNewDevicesEnd" : "***********************************************", From c51f14476cc0ae8ef6ef8831aa8f4b968713ae37 Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:47:10 +0100 Subject: [PATCH 5/6] Delete hmip-keyserver-check.patch --- hmip-keyserver-check.patch | 83 -------------------------------------- 1 file changed, 83 deletions(-) delete mode 100644 hmip-keyserver-check.patch diff --git a/hmip-keyserver-check.patch b/hmip-keyserver-check.patch deleted file mode 100644 index 0d6f8f12..00000000 --- a/hmip-keyserver-check.patch +++ /dev/null @@ -1,83 +0,0 @@ -diff --git a/www/config/cp_add_device.cgi b/www/config/cp_add_device.cgi ---- a/www/config/cp_add_device.cgi -+++ b/www/config/cp_add_device.cgi -@@ -21,2 +21,5 @@ - set HS485D_URL "bin://127.0.0.1:$portnumber" -+ -+set KEYSERVER_HOST "secgtw.homematic.com" -+set KEYSERVER_PORT 8443 - -@@ -204,3 +207,3 @@ - append html "" -- append html "" -+ append html "" - append html "" -- append html "" -+ append html "" - append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}
" -@@ -306,3 +309,3 @@ - append html "
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesBidCosRFFetchmodeNotActive}
\${dialogNewDevicesKeyserverChecking}
" -@@ -397,2 +400,4 @@ - -+ puts "" -+ - initJavascript -@@ -457,2 +462,24 @@ - puts { -+ checkKeyserver = function() { -+ new Ajax.Request(url, { -+ method: "post", -+ postBody: "action=check_keyserver", -+ onSuccess: function(transport) { -+ var result = transport.responseText.trim(); -+ var key = result === "reachable" ? "dialogNewDevicesKeyserverReachable" : -+ result === "unreachable" ? "dialogNewDevicesKeyserverUnreachable" : -+ "dialogNewDevicesKeyserverCheckFailed"; -+ jQuery(".keyserver-status") -+ .removeClass("keyserver-reachable keyserver-unreachable") -+ .addClass(result === "reachable" ? "keyserver-reachable" : -+ result === "unreachable" ? "keyserver-unreachable" : "") -+ .text(translateKey(key) || key); -+ }, -+ onFailure: function() { -+ jQuery(".keyserver-status") -+ .removeClass("keyserver-reachable keyserver-unreachable") -+ .text(translateKey("dialogNewDevicesKeyserverCheckFailed") || "dialogNewDevicesKeyserverCheckFailed"); -+ } -+ }); -+ }; - update_new_device_count = function() { -@@ -766,2 +793,3 @@ - puts "translatePage('#messagebox');" -+ puts "checkKeyserver();" - puts "dlgPopup.readaptSize();" -@@ -983,2 +1011,11 @@ - -+proc action_check_keyserver {} { -+ global KEYSERVER_HOST KEYSERVER_PORT -+ if {[catch {exec nc -z -w 3 $KEYSERVER_HOST $KEYSERVER_PORT}]} { -+ puts "unreachable" -+ } else { -+ puts "reachable" -+ } -+} -+ - cgi_eval { -diff --git a/www/webui/js/lang/de/translate.lang.js b/www/webui/js/lang/de/translate.lang.js ---- a/www/webui/js/lang/de/translate.lang.js -+++ b/www/webui/js/lang/de/translate.lang.js -@@ -1,1 +1,5 @@ - "commentDialogNewDevices" : "***********************************************", -+ "dialogNewDevicesKeyserverChecking" : "eQ-3-Keyserver: Erreichbarkeit wird gepr%FCft ...", -+ "dialogNewDevicesKeyserverReachable" : "eQ-3-Keyserver: Erreichbar", -+ "dialogNewDevicesKeyserverUnreachable" : "eQ-3-Keyserver: Nicht erreichbar", -+ "dialogNewDevicesKeyserverCheckFailed" : "eQ-3-Keyserver: Pr%FCfung fehlgeschlagen", -diff --git a/www/webui/js/lang/en/translate.lang.js b/www/webui/js/lang/en/translate.lang.js ---- a/www/webui/js/lang/en/translate.lang.js -+++ b/www/webui/js/lang/en/translate.lang.js -@@ -1,1 +1,5 @@ - "commentDialogNewDevices" : "***********************************************", -+ "dialogNewDevicesKeyserverChecking" : "eQ-3 key server: Checking connectivity ...", -+ "dialogNewDevicesKeyserverReachable" : "eQ-3 key server: Reachable", -+ "dialogNewDevicesKeyserverUnreachable" : "eQ-3 key server: Not reachable", -+ "dialogNewDevicesKeyserverCheckFailed" : "eQ-3 key server: Check failed", From 846c56ed0513d32d003be4c4e091d61460fccc75 Mon Sep 17 00:00:00 2001 From: MichaelN0815 <68965895+MichaelN0815@users.noreply.github.com> Date: Mon, 2 Nov 2026 15:21:43 +0100 Subject: [PATCH 6/6] webui: prevent stale keyserver status updates --- www/config/cp_add_device.cgi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/www/config/cp_add_device.cgi b/www/config/cp_add_device.cgi index 0ae5ba19..afe05b61 100755 --- a/www/config/cp_add_device.cgi +++ b/www/config/cp_add_device.cgi @@ -461,6 +461,7 @@ puts "" puts "var installTimerHmIP = 0;" puts { checkKeyserver = function() { + var statusElements = jQuery(".keyserver-status"); new Ajax.Request(url, { method: "post", postBody: "action=check_keyserver", @@ -469,14 +470,14 @@ puts "" var key = result === "reachable" ? "dialogNewDevicesKeyserverReachable" : result === "unreachable" ? "dialogNewDevicesKeyserverUnreachable" : "dialogNewDevicesKeyserverCheckFailed"; - jQuery(".keyserver-status") + statusElements .removeClass("keyserver-reachable keyserver-unreachable") .addClass(result === "reachable" ? "keyserver-reachable" : result === "unreachable" ? "keyserver-unreachable" : "") .text(translateKey(key) || key); }, onFailure: function() { - jQuery(".keyserver-status") + statusElements .removeClass("keyserver-reachable keyserver-unreachable") .text(translateKey("dialogNewDevicesKeyserverCheckFailed") || "dialogNewDevicesKeyserverCheckFailed"); }