diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages.patch b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages.patch
new file mode 100644
index 0000000000..ba9f1fe0c6
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages.patch
@@ -0,0 +1,232 @@
+--- occu/WebUI/www/rega/pages/tabs/control/devices.htm.orig
++++ occu/WebUI/www/rega/pages/tabs/control/devices.htm
+@@ -42,6 +42,7 @@
+
|
+
+ <%
++ string sEnumDeviceIds = "";
+ object obj = dom.GetObject(ID_DEVICES);
+ if ( obj )
+ {
+@@ -98,6 +99,7 @@
+ Write("InitGD(jg_0, 50);");
+ Write("Draw(jg_0, '"#devs.Label()#"', 50, '-1');");
+ Write("var tmp = new Object();");
++ Write("tmp['id'] = '"#devs.ID()#"';");
+ Write("tmp['name'] = '"#devs.Name()#"';");
+ Write("tmp['trid'] = '"#trId#"';");
+ Write("arItems[arItems.length] = tmp;");
+@@ -106,6 +108,7 @@
+
+ Write("");
+ Write("");
++ sEnumDeviceIds = sEnumDeviceIds # devs.ID() # "\t";
+ }
+ }
+ }
+@@ -175,8 +178,29 @@
+ {
+ system.SetSessionVar("sessionTAB1",sFirstId);
+ }
++ else
++ {
++ string tmpID = system.GetSessionVar("sessionTAB1");
++ string tmp = "";
++ boolean bFound = false;
++ foreach (tmp, sEnumDeviceIds)
++ {
++ if (tmp == tmpID)
++ {
++ bFound = true;
++ break;
++ }
++ }
++ if (bFound == false)
++ {
++ system.SetSessionVar("sessionTAB1", sFirstId);
++ }
++ }
+ %>
+- loadChannels( <% Write( system.GetSessionVar("sessionTAB1") ); %> );
++ // to avoid a double channelload, perform only initial load if no room-filter is set
++ if(document.getElementById("ftDevName") && document.getElementById("ftDevName").value == "") {
++ loadChannels( <% Write( system.GetSessionVar("sessionTAB1") ); %> );
++ }
+
+ filterOptions = new iseFilter();
+
+@@ -260,6 +284,7 @@
+
+ updateDevTable = function()
+ {
++ var sFirstId = "";
+ colorFilterBtns(fltDL);
+ for (var i = 0; i < arItems.length; i++)
+ {
+@@ -270,8 +295,13 @@
+ else
+ {
+ show(arItems[i]['trid']);
++ if(sFirstId == "")
++ {
++ sFirstId = arItems[i]['id'];
++ }
+ }
+ }
++ loadChannels(sFirstId);
+ };
+
+ clearInputLeft = function()
+--- occu/WebUI/www/rega/pages/tabs/control/functions.htm.orig
++++ occu/WebUI/www/rega/pages/tabs/control/functions.htm
+@@ -36,6 +36,7 @@
+
+
+ <%
++ string sEnumFunctionIds = "";
+ object obj = dom.GetObject(ID_FUNCTIONS);
+ if ( obj )
+ {
+@@ -55,12 +56,14 @@
+ Write("");
+ Write("");
+ Write("");
++ sEnumFunctionIds = sEnumFunctionIds # func.ID() # "\t";
+ }
+ }
+ }
+@@ -128,8 +131,29 @@
+ {
+ system.SetSessionVar("sessionTAB1",sLoadId);
+ }
++ else
++ {
++ string tmpID = system.GetSessionVar("sessionTAB1");
++ string tmp = "";
++ boolean bFound = false;
++ foreach (tmp, sEnumFunctionIds)
++ {
++ if (tmp == tmpID)
++ {
++ bFound = true;
++ break;
++ }
++ }
++ if (bFound == false)
++ {
++ system.SetSessionVar("sessionTAB1", sLoadId);
++ }
++ }
+ %>
+- loadChannels( <% Write( system.GetSessionVar("sessionTAB1") ); %> );
++ // to avoid a double channelload, perform only initial load if no room-filter is set
++ if(document.getElementById("ftFunc") && document.getElementById("ftFunc").value == "") {
++ loadChannels( <% Write( system.GetSessionVar("sessionTAB1") ); %> );
++ }
+
+ // filterOptions = new iseFilter();
+ translatePage("#tblFunctionNames");
+@@ -178,6 +202,7 @@
+
+ updateFuncTable = function()
+ {
++ var sFirstId = "";
+ colorFilterBtns(fltFN);
+ for (var i = 0; i < arItems.length; i++)
+ {
+@@ -188,8 +213,13 @@
+ else
+ {
+ show(arItems[i]['trid']);
++ if(sFirstId == "")
++ {
++ sFirstId = arItems[i]['id'];
++ }
+ }
+ }
++ loadChannels(sFirstId);
+ };
+
+ clearInputLeft = function()
+--- occu/WebUI/www/rega/pages/tabs/control/rooms.htm.orig
++++ occu/WebUI/www/rega/pages/tabs/control/rooms.htm
+@@ -56,6 +56,7 @@
+ Write("");
+ Write("
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${thName} |
+ ${thPicture} |
+
+
+
+
+ ${thFilter}
+
+ |
+ |
+
+ <%
+ string sEnumDeviceIds = "";
+ object obj = dom.GetObject(ID_DEVICES);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() )
+ {
+ object devs = dom.GetObject(tmp);
+ string s1;
+ foreach( s1, devs.Channels().EnumEnabledVisibleIDs() )
+ {
+ object oCH = dom.GetObject( s1 );
+ if( oCH )
+ {
+ boolean bHasFullAccess = (oCH.UserAccessRights(iulOtherThanAdmin) == iarFullAccess);
+ boolean bHasDPs = (oCH.DPs().EnumEnabledVisibleIDs().Length());
+ boolean bDefaultDPWrite = (oCH.DefaultDPWrite()!=ID_ERROR);
+ boolean bIsSysVarDP = false;
+ object oTmpDP = dom.GetObject( oCH.DefaultDPWrite() );
+ if( oTmpDP )
+ {
+ bIsSysVarDP = ( oTmpDP.IsTypeOf( OT_VARDP ) || oTmpDP.IsTypeOf( OT_ALARMDP ) );
+ }
+ }
+ }
+ if(devs.Visible()
+ && devs.ReadyConfig()
+ && devs.HssType()
+ && (! devs.MetaData("operateGroupOnly") == "true" )
+ && (devs.HssType() != "VIR-OL-GTW")
+ && (devs.HssType() != "VIR-HUE-GTW")
+ )
+ {
+ if( sFirstId == "" )
+ {
+ sFirstId = tmp;
+ }
+ string trId = "devices"#devs.ID();
+ WriteLine('');
+ Write("");
+ Write(devs.Name());
+ Write(" | ");
+ Write("");
+
+ string sPicDivId = "picDiv"#devs.ID();
+ Write("");
+
+ Write("");
+
+ Write(" | ");
+ Write(" ");
+ sEnumDeviceIds = sEnumDeviceIds # devs.ID() # "\t";
+ }
+ }
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/devices.htm.orig b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/devices.htm.orig
new file mode 100755
index 0000000000..f6c0069b93
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/devices.htm.orig
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${thName} |
+ ${thPicture} |
+
+
+
+
+ ${thFilter}
+
+ |
+ |
+
+ <%
+ object obj = dom.GetObject(ID_DEVICES);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() )
+ {
+ object devs = dom.GetObject(tmp);
+ string s1;
+ foreach( s1, devs.Channels().EnumEnabledVisibleIDs() )
+ {
+ object oCH = dom.GetObject( s1 );
+ if( oCH )
+ {
+ boolean bHasFullAccess = (oCH.UserAccessRights(iulOtherThanAdmin) == iarFullAccess);
+ boolean bHasDPs = (oCH.DPs().EnumEnabledVisibleIDs().Length());
+ boolean bDefaultDPWrite = (oCH.DefaultDPWrite()!=ID_ERROR);
+ boolean bIsSysVarDP = false;
+ object oTmpDP = dom.GetObject( oCH.DefaultDPWrite() );
+ if( oTmpDP )
+ {
+ bIsSysVarDP = ( oTmpDP.IsTypeOf( OT_VARDP ) || oTmpDP.IsTypeOf( OT_ALARMDP ) );
+ }
+ }
+ }
+ if(devs.Visible()
+ && devs.ReadyConfig()
+ && devs.HssType()
+ && (! devs.MetaData("operateGroupOnly") == "true" )
+ && (devs.HssType() != "VIR-OL-GTW")
+ && (devs.HssType() != "VIR-HUE-GTW")
+ )
+ {
+ if( sFirstId == "" )
+ {
+ sFirstId = tmp;
+ }
+ string trId = "devices"#devs.ID();
+ WriteLine('');
+ Write("");
+ Write(devs.Name());
+ Write(" | ");
+ Write("");
+
+ string sPicDivId = "picDiv"#devs.ID();
+ Write("");
+
+ Write("");
+
+ Write(" | ");
+ Write(" ");
+ }
+ }
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm
new file mode 100755
index 0000000000..6316fe9bc2
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm
@@ -0,0 +1,231 @@
+<%
+ if( system.GetSessionVar("sessionTAB") != "control/functions" )
+ {
+ system.SetSessionVar("sessionTAB", "control/functions");
+ system.SetSessionVar("sessionTAB1", "");
+ }
+%>
+
+
+
+
+
+
+
+
+
+
+
+ ${thFunc} |
+
+
+
+
+ ${thFilter}
+
+ |
+
+ <%
+ string sEnumFunctionIds = "";
+ object obj = dom.GetObject(ID_FUNCTIONS);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() ) {
+ object func = dom.GetObject(tmp);
+ if (func.Visible()) {
+ if (sFirstId == "") {
+ sFirstId = tmp;
+ }
+ string trId = "funcs"#func.ID();
+ Write("");
+ Write("");
+ Write(func.Name());
+ Write(" | ");
+ Write("");
+ Write(" ");
+ sEnumFunctionIds = sEnumFunctionIds # func.ID() # "\t";
+ }
+ }
+ }
+ string sLoadId = sFirstId;
+ if (system.GetVar("funcId") != null) {
+ sLoadId = system.GetVar("funcId");
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm.orig b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm.orig
new file mode 100755
index 0000000000..babd1bec38
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/functions.htm.orig
@@ -0,0 +1,201 @@
+<%
+ if( system.GetSessionVar("sessionTAB") != "control/functions" )
+ {
+ system.SetSessionVar("sessionTAB", "control/functions");
+ system.SetSessionVar("sessionTAB1", "");
+ }
+%>
+
+
+
+
+
+
+
+
+
+
+
+ ${thFunc} |
+
+
+
+
+ ${thFilter}
+
+ |
+
+ <%
+ object obj = dom.GetObject(ID_FUNCTIONS);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() ) {
+ object func = dom.GetObject(tmp);
+ if (func.Visible()) {
+ if (sFirstId == "") {
+ sFirstId = tmp;
+ }
+ string trId = "funcs"#func.ID();
+ Write("");
+ Write("");
+ Write(func.Name());
+ Write(" | ");
+ Write("");
+ Write(" ");
+ }
+ }
+ }
+ string sLoadId = sFirstId;
+ if (system.GetVar("funcId") != null) {
+ sLoadId = system.GetVar("funcId");
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm
new file mode 100755
index 0000000000..6e0c64dc01
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${thRoom} |
+
+
+
+
+ ${thFilter}
+
+ |
+
+ <%
+ string sEnumRoomIds = "";
+ object obj = dom.GetObject(ID_ROOMS);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() ) {
+ object room = dom.GetObject(tmp);
+ if (room.Visible()) {
+ if (sFirstId == "") {
+ sFirstId = tmp;
+ }
+ string trId = "rooms"#room.ID();
+ Write("");
+ Write("");
+ Write(room.Name());
+ Write(" | ");
+ Write("");
+ Write(" ");
+ sEnumRoomIds = sEnumRoomIds # room.ID() # "\t";
+ }
+ }
+ }
+ string sLoadId = sFirstId;
+ if (system.GetVar("roomId") != null) {
+ sLoadId = system.GetVar("roomId");
+ system.SetSessionVar("sessionTAB1",sLoadId);
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm.orig b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm.orig
new file mode 100755
index 0000000000..6d852938ce
--- /dev/null
+++ b/buildroot-external/patches/occu/0196-WebUI-Fix-FilterOfTwoColumnControlPages/occu/WebUI/www/rega/pages/tabs/control/rooms.htm.orig
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+ ${thRoom} |
+
+
+
+
+ ${thFilter}
+
+ |
+
+ <%
+ string sEnumRoomIds = "";
+ object obj = dom.GetObject(ID_ROOMS);
+ if ( obj )
+ {
+ obj.SortByName(soAsc,stNatural);
+ string tmp = "";
+ string sFirstId = "";
+ foreach( tmp, obj.EnumEnabledIDs() ) {
+ object room = dom.GetObject(tmp);
+ if (room.Visible()) {
+ if (sFirstId == "") {
+ sFirstId = tmp;
+ }
+ string trId = "rooms"#room.ID();
+ Write("");
+ Write("");
+ Write(room.Name());
+ Write(" | ");
+ Write("");
+ Write(" ");
+ sEnumRoomIds = sEnumRoomIds # room.ID() # "\t";
+ }
+ }
+ }
+ string sLoadId = sFirstId;
+ if (system.GetVar("roomId") != null) {
+ sLoadId = system.GetVar("roomId");
+ system.SetSessionVar("sessionTAB1",sLoadId);
+ }
+ %>
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+