diff --git a/scripts/ulux-config.js b/scripts/ulux-config.js
index 4e5cf767dd1b3eb97f2c5e6f80c666906b5e9f4f..8fe9af1424bfdea235618d6ef9fc5744ebafe815 100644
--- a/scripts/ulux-config.js
+++ b/scripts/ulux-config.js
@@ -1,407 +1,407 @@
-function pad(c) {
+/* globals Logger, Property, raisedEvent, getDevices, getDeviceConfig, getDeviceConfigWord, getZoneByID, Cluster, setDeviceVisibility, TimedICalEvent, dataset101, dataset102, dataset103 */
+
+function pad (c) {
     var i = parseInt(c, 10);
     return (i < 10 ? '0' + i : c.toString());
 }
 
-var LOGFILE_NAME = "ulux.log";
+var LOGFILE_NAME = 'ulux.log';
 var lWarn = {
-		logln : function(o) {
-		}
-	};
-	var lInfo = {
-		logln : function(o) {
-		}
-	};
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+var lInfo = {
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
 
 lInfo = new Logger(LOGFILE_NAME);
 lWarn = new Logger(LOGFILE_NAME);
 
-var maxTilesCount=40;
-var maxDSIDCount=8;
-var maxSceneLabelsCount=72;
-var maxMainTextCount=15;
-var maxSceneLabelCount=11;
-var maxCenterLengh=22;
-
-function retransmitBaseDSIDSettings(dsuid) {
-	lInfo.logln("Prepare retransmitBaseDSIDSettings for " + dsuid);
-	for (var iIndex=0;iIndex<8;iIndex++) {
-		var deviceDsid=dsidFromIndex(dsuid,iIndex);
-		if (Property.getNode("deviceCache/" + deviceDsid)) {
-			if (Property.getProperty("deviceCache/" + deviceDsid + "/visibility")==true) {
-				Property.setProperty("deviceCache/" + deviceDsid + "/setZoneID",false);
-				Property.setProperty("deviceCache/" + deviceDsid + "/setGroupID",false);
-				Property.setProperty("deviceCache/" + deviceDsid + "/setButtonID",false);
-			} 
-			if (iIndex!=0) 
-				Property.setProperty("deviceCache/" + deviceDsid + "/setVisiblitiy",false);
-		}
-	}
-	new Event('ulux.retransmit',{"actions":"retransmitBaseDSIDSettingStep","time":"+10","dsid":dsuid}).raise();
-
+var maxTilesCount = 40;
+var maxDSIDCount = 8;
+var maxSceneLabelsCount = 72;
+var maxMainTextCount = 15;
+var maxSceneLabelCount = 11;
+var maxCenterLengh = 22;
+
+function retransmitBaseDSIDSettings (dsuid) {
+    lInfo.logln('Prepare retransmitBaseDSIDSettings for ' + dsuid);
+    for (var iIndex = 0; iIndex < 8; iIndex++) {
+        var deviceDsid = dsidFromIndex(dsuid, iIndex);
+        if (Property.getNode('deviceCache/' + deviceDsid)) {
+            if (Property.getProperty('deviceCache/' + deviceDsid + '/visibility') == true) {
+                Property.setProperty('deviceCache/' + deviceDsid + '/setZoneID', false);
+                Property.setProperty('deviceCache/' + deviceDsid + '/setGroupID', false);
+                Property.setProperty('deviceCache/' + deviceDsid + '/setButtonID', false);
+            }
+            if (iIndex != 0) {
+                Property.setProperty('deviceCache/' + deviceDsid + '/setVisiblitiy', false);
+            }
+        }
+    }
+    new Event('ulux.retransmit', { actions: 'retransmitBaseDSIDSettingStep', time: '+10', dsid: dsuid }).raise();
 }
 
 
-function retransmitBaseDSIDSettingStep(dsuid) {
-	lInfo.logln("execute retransmitBaseDSIDSettingsStep for " + dsuid);
-	for (var iIndex=0;iIndex<8;iIndex++) {
-		var deviceDsid=dsidFromIndex(dsuid,iIndex);
-		if (iIndex!=0)
-			if (Property.getNode("deviceCache/" + deviceDsid + "/setVisiblitiy")) {
-				if (Property.getProperty("deviceCache/" + deviceDsid + "/setVisiblitiy") == false) {
-					lInfo.logln("set visibility for " + deviceDsid);
-					try {
-						if (Property.getProperty("deviceCache/" + deviceDsid + "/visiblitiy")==true) {
-							setDeviceVisibility(deviceDsid,true);
-		 				} else {
-		 					setDeviceVisibility(deviceDsid,false);
-		 				}
-					} catch (e) {
-						
-					}
-					Property.setProperty("deviceCache/" + deviceDsid + "/setVisiblitiy",true);
-					new Event('ulux.retransmit',{"actions":"retransmitBaseDSIDSettingStep","time":"+10","dsid":dsuid}).raise();
-					return;
-				}
-			}
-		if (Property.getNode("deviceCache/" + deviceDsid + "/setZoneID")) {
-			if (Property.getProperty("deviceCache/" + deviceDsid + "/setZoneID") == false) {				
-				lInfo.logln("set zoneid for " + deviceDsid);
-				try {
-					var zoneID=Property.getProperty("deviceCache/" + deviceDsid + "/zoneID");
-					var zone = getZoneByID(zoneID);
-
-					zone.addDevice(deviceDsid);
-					
-				} catch (e) {
-					
-				}
-				Property.setProperty("deviceCache/" + deviceDsid + "/setZoneID",true);
-				new Event('ulux.retransmit',{"actions":"retransmitBaseDSIDSettingStep","time":"+10","dsid":dsuid}).raise();
-				return;
-			}
-		}
-		if (Property.getNode("deviceCache/" + deviceDsid + "/setGroupID")) {
-			if (Property.getProperty("deviceCache/" + deviceDsid + "/setGroupID") == false) {
-				lInfo.logln("set group for " + deviceDsid);
-				try {
-					var oDevice=getDevices().byDSUID(deviceDsid);
-					var groupID=Property.getProperty("deviceCache/" + deviceDsid + "/groupID");
-					if (groupID>=16) {
-						Cluster.clusterAddDevice(groupID,deviceDsid);
-						oDevice.setButtonActiveGroup(groupID);
-					} else {
-						oDevice.setJokerGroup(groupID);
-					}
-				} catch (e) {
-					
-				}
-				Property.setProperty("deviceCache/" + deviceDsid + "/setGroupID",true);
-				new Event('ulux.retransmit',{"actions":"retransmitBaseDSIDSettingStep","time":"+10","dsid":dsuid}).raise();
-				return;
-			}
-		}
-		if (Property.getNode("deviceCache/" + deviceDsid + "/setButtonID")) {
-			if (Property.getProperty("deviceCache/" + deviceDsid + "/setButtonID") == false) {
-				lInfo.logln("set buttonid for " + deviceDsid);
-				try {
-					var oDevice=getDevices().byDSUID(deviceDsid);
-					var groupID=Property.getProperty("deviceCache/" + deviceDsid + "/buttonID");
-					oDevice.setButtonID(groupID);
-				} catch (e) {
-					
-				}
-				Property.setProperty("deviceCache/" + deviceDsid + "/setButtonID",true);
-				new Event('ulux.retransmit',{"actions":"retransmitBaseDSIDSettingStep","time":"+10","dsid":dsuid}).raise();
-				return;
-			}
-		}
-	}
-	lInfo.logln("retransmit for supparameters are done, go now for the oem parameter");
-	new Event('ulux.retransmit',{"actions":"retransmitRemaining","time":"+10","dsid":dsuid}).raise();
+function retransmitBaseDSIDSettingStep (dsuid) {
+    lInfo.logln('execute retransmitBaseDSIDSettingsStep for ' + dsuid);
+    for (var iIndex = 0; iIndex < 8; iIndex++) {
+        var deviceDsid = dsidFromIndex(dsuid, iIndex);
+        if (iIndex != 0) {
+            if (Property.getNode('deviceCache/' + deviceDsid + '/setVisiblitiy')) {
+                if (Property.getProperty('deviceCache/' + deviceDsid + '/setVisiblitiy') == false) {
+                    lInfo.logln('set visibility for ' + deviceDsid);
+                    try {
+                        if (Property.getProperty('deviceCache/' + deviceDsid + '/visiblitiy') == true) {
+                            setDeviceVisibility(deviceDsid, true);
+                        } else {
+                            setDeviceVisibility(deviceDsid, false);
+                        }
+                    } catch (e) {
+
+                    }
+                    Property.setProperty('deviceCache/' + deviceDsid + '/setVisiblitiy', true);
+                    new Event('ulux.retransmit', { actions: 'retransmitBaseDSIDSettingStep', time: '+10', dsid: dsuid }).raise();
+                    return;
+                }
+            }
+        }
+        if (Property.getNode('deviceCache/' + deviceDsid + '/setZoneID')) {
+            if (Property.getProperty('deviceCache/' + deviceDsid + '/setZoneID') == false) {
+                lInfo.logln('set zoneid for ' + deviceDsid);
+                try {
+                    var zoneID = Property.getProperty('deviceCache/' + deviceDsid + '/zoneID');
+                    var zone = getZoneByID(zoneID);
+
+                    zone.addDevice(deviceDsid);
+
+                } catch (e) {
+
+                }
+                Property.setProperty('deviceCache/' + deviceDsid + '/setZoneID', true);
+                new Event('ulux.retransmit', { actions: 'retransmitBaseDSIDSettingStep', time: '+10', dsid: dsuid }).raise();
+                return;
+            }
+        }
+        if (Property.getNode('deviceCache/' + deviceDsid + '/setGroupID')) {
+            if (Property.getProperty('deviceCache/' + deviceDsid + '/setGroupID') == false) {
+                lInfo.logln('set group for ' + deviceDsid);
+                try {
+                    var oDevice = getDevices().byDSUID(deviceDsid);
+                    var groupID = Property.getProperty('deviceCache/' + deviceDsid + '/groupID');
+                    if (groupID >= 16) {
+                        Cluster.clusterAddDevice(groupID, deviceDsid);
+                        oDevice.setButtonActiveGroup(groupID);
+                    } else {
+                        oDevice.setJokerGroup(groupID);
+                    }
+                } catch (e) {
+
+                }
+                Property.setProperty('deviceCache/' + deviceDsid + '/setGroupID', true);
+                new Event('ulux.retransmit', { actions: 'retransmitBaseDSIDSettingStep', time: '+10', dsid: dsuid }).raise();
+                return;
+            }
+        }
+        if (Property.getNode('deviceCache/' + deviceDsid + '/setButtonID')) {
+            if (Property.getProperty('deviceCache/' + deviceDsid + '/setButtonID') == false) {
+                lInfo.logln('set buttonid for ' + deviceDsid);
+                try {
+                    var oDevice = getDevices().byDSUID(deviceDsid);
+                    var groupID = Property.getProperty('deviceCache/' + deviceDsid + '/buttonID');
+                    oDevice.setButtonID(groupID);
+                } catch (e) {
+
+                }
+                Property.setProperty('deviceCache/' + deviceDsid + '/setButtonID', true);
+                new Event('ulux.retransmit', { actions: 'retransmitBaseDSIDSettingStep', time: '+10', dsid: dsuid }).raise();
+                return;
+            }
+        }
+    }
+    lInfo.logln('retransmit for supparameters are done, go now for the oem parameter');
+    new Event('ulux.retransmit', { actions: 'retransmitRemaining', time: '+10', dsid: dsuid }).raise();
 }
 
 
-function reTransmit(dsuid) {
-	var oActionArray=[];
-	oActionArray=oActionArray.concat(reTransmitGeneralSettings(dsuid));
-	oActionArray=oActionArray.concat(reTransmitTiles(dsuid));
-	oActionArray=oActionArray.concat(reTransmitBaseText(dsuid));
-	oActionArray=oActionArray.concat(reTransmitPagenames(dsuid));
-	oActionArray=oActionArray.concat(reTransmitScenenames(dsuid));
-	oActionArray.push({
-		type:'write',
-		dsid:dsidFromIndex(dsuid,7),
-		bank:127,
-		index:0xD1,
-		value:0x80,
-		cachePath:'close updatescreen',
-		meta:'nocache'
-	});
-	lInfo.logln('queue has size ' + oActionArray.length);
-	return oActionArray;
+function reTransmit (dsuid) {
+    var oActionArray = [];
+    oActionArray = oActionArray.concat(reTransmitGeneralSettings(dsuid));
+    oActionArray = oActionArray.concat(reTransmitTiles(dsuid));
+    oActionArray = oActionArray.concat(reTransmitBaseText(dsuid));
+    oActionArray = oActionArray.concat(reTransmitPagenames(dsuid));
+    oActionArray = oActionArray.concat(reTransmitScenenames(dsuid));
+    oActionArray.push({
+        type: 'write',
+        dsid: dsidFromIndex(dsuid, 7),
+        bank: 127,
+        index: 0xD1,
+        value: 0x80,
+        cachePath: 'close updatescreen',
+        meta: 'nocache'
+    });
+    lInfo.logln('queue has size ' + oActionArray.length);
+    return oActionArray;
 }
 
-function reTransmitOneScenenames(baseDSID,index,textSel) {
-	var dsidIndex=Property.getNode('devices/'+baseDSID+'/scenes/' + index + '/dsidIndex').getValue();
-	var clickType=Property.getNode('devices/'+baseDSID+'/scenes/' + index + '/ClickType').getValue();
-	var buttonNumber=Property.getNode('devices/'+baseDSID+'/scenes/' + index + '/ButtonNumber').getValue();
-	var name=Utf8.decode(Property.getNode('devices/'+baseDSID+'/scenes/' + index + '/text').getValue());
-	var oObject=[{
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14),
-		value:dsidIndex,
-		textSel:textSel,
-		cachePath:'retransmit',
-		meta:'nocache',
-		forced:true
-	},{
-		type:'writeNibble',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14)+1,
-		valueLow:clickType,
-		valueHigh:buttonNumber,
-		textSel:textSel,
-		cachePath:'retransmit',
-		cachePathLow:'retransmit',
-		meta:'nocache',
-		forced:true
-	},{
-		type:'writeTextBlock',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14) + 0x2,
-		value:name,
-		textSel:textSel,
-		length:name.length,
-		cachePath:'retransmit',
-		meta:'nocache',
-		forced:true
-	}];
-
-	return oObject;
+function reTransmitOneScenenames (baseDSID, index, textSel) {
+    var dsidIndex = Property.getNode('devices/' + baseDSID + '/scenes/' + index + '/dsidIndex').getValue();
+    var clickType = Property.getNode('devices/' + baseDSID + '/scenes/' + index + '/ClickType').getValue();
+    var buttonNumber = Property.getNode('devices/' + baseDSID + '/scenes/' + index + '/ButtonNumber').getValue();
+    var name = Utf8.decode(Property.getNode('devices/' + baseDSID + '/scenes/' + index + '/text').getValue());
+    var oObject = [ {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14),
+        value: dsidIndex,
+        textSel: textSel,
+        cachePath: 'retransmit',
+        meta: 'nocache',
+        forced: true
+    }, {
+        type: 'writeNibble',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14) + 1,
+        valueLow: clickType,
+        valueHigh: buttonNumber,
+        textSel: textSel,
+        cachePath: 'retransmit',
+        cachePathLow: 'retransmit',
+        meta: 'nocache',
+        forced: true
+    }, {
+        type: 'writeTextBlock',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14) + 0x2,
+        value: name,
+        textSel: textSel,
+        length: name.length,
+        cachePath: 'retransmit',
+        meta: 'nocache',
+        forced: true
+    } ];
+
+    return oObject;
 }
 
-function reTransmitScenenames(baseDSID) {
-	var oArray=[textSelSceneTextConfig1(baseDSID)];
-	for (var iIndex=0;iIndex<18;iIndex++) {
-		oArray=oArray.concat(reTransmitOneScenenames(baseDSID,iIndex,selTextScene1));
-	}
-	oArray.push(textSelSceneTextConfig2(baseDSID));
-	for (var iIndex=18;iIndex<36;iIndex++) {
-		oArray=oArray.concat(reTransmitOneScenenames(baseDSID,iIndex,selTextScene2));
-	}
-	oArray.push(textSelSceneTextConfig3(baseDSID));
-	for (var iIndex=36;iIndex<54;iIndex++) {
-		oArray=oArray.concat(reTransmitOneScenenames(baseDSID,iIndex,selTextScene3));
-	}
-	oArray.push(textSelSceneTextConfig4(baseDSID));
-	for (var iIndex=54;iIndex<72;iIndex++) {
-		oArray=oArray.concat(reTransmitOneScenenames(baseDSID,iIndex,selTextScene4));
-	}
-	lInfo.logln("scenenames: " + JSON.stringify(oArray));
-	return oArray;
+function reTransmitScenenames (baseDSID) {
+    var oArray = [ textSelSceneTextConfig1(baseDSID) ];
+    for (var iIndex = 0; iIndex < 18; iIndex++) {
+        oArray = oArray.concat(reTransmitOneScenenames(baseDSID, iIndex, selTextScene1));
+    }
+    oArray.push(textSelSceneTextConfig2(baseDSID));
+    for (var iIndex = 18; iIndex < 36; iIndex++) {
+        oArray = oArray.concat(reTransmitOneScenenames(baseDSID, iIndex, selTextScene2));
+    }
+    oArray.push(textSelSceneTextConfig3(baseDSID));
+    for (var iIndex = 36; iIndex < 54; iIndex++) {
+        oArray = oArray.concat(reTransmitOneScenenames(baseDSID, iIndex, selTextScene3));
+    }
+    oArray.push(textSelSceneTextConfig4(baseDSID));
+    for (var iIndex = 54; iIndex < 72; iIndex++) {
+        oArray = oArray.concat(reTransmitOneScenenames(baseDSID, iIndex, selTextScene4));
+    }
+    lInfo.logln('scenenames: ' + JSON.stringify(oArray));
+    return oArray;
 }
 
 
-function reTransmitPagenames(dsuid) {
-	var result=[];
-	for (var iIndex=0;iIndex<10;iIndex++) {
-		var dsidIndex=Property.getNode('devices/'+dsuid +'/pages/'+ iIndex+'/dsidIndex').getValue();
-		var config=Property.getNode('devices/'+dsuid +'/pages/'+ iIndex+'/centerSymbolConfig').getValue();
-		var text=Property.getNode('devices/'+dsuid +'/pagenames/'+ iIndex+'/text').getValue();
-		result=result.concat(setCenterSymbol(dsuid,dsidIndex,config,text,iIndex,true));
-	}
-	for (var iIndex=0;iIndex<result.length;iIndex++) {
-		result[iIndex].meta='nocache';
-		result[iIndex].cachePath='retransmit';
-		result[iIndex].forced=true;
-	}
-	lInfo.logln("pagenames: " + JSON.stringify(result));
-	return result;
-	
-}
+function reTransmitPagenames (dsuid) {
+    var result = [];
+    for (var iIndex = 0; iIndex < 10; iIndex++) {
+        var dsidIndex = Property.getNode('devices/' + dsuid + '/pages/' + iIndex + '/dsidIndex').getValue();
+        var config = Property.getNode('devices/' + dsuid + '/pages/' + iIndex + '/centerSymbolConfig').getValue();
+        var text = Property.getNode('devices/' + dsuid + '/pagenames/' + iIndex + '/text').getValue();
+        result = result.concat(setCenterSymbol(dsuid, dsidIndex, config, text, iIndex, true));
+    }
+    for (var iIndex = 0; iIndex < result.length; iIndex++) {
+        result[iIndex].meta = 'nocache';
+        result[iIndex].cachePath = 'retransmit';
+        result[iIndex].forced = true;
+    }
+    lInfo.logln('pagenames: ' + JSON.stringify(result));
+    return result;
 
-function reTransmitBaseText(dsuid) {
-	var oObject=[];
-		
-	var baseText= ['HomeNameText','AllOffText','DeepOffText','BoostText',
-		'PanicAlarmText','FireAlarmText','SmokeAlarmText','WaterAlarmText',
-		'GasAlarmText','Alarm1Text','Alarm2Text','Alarm3Text','Alarm4Text'
-	];
-
-	var baseText2= ['BreakInAlarmText','DoorBell0Text','DoorBell1Text','DoorBell2Text','DoorBell3Text'];
-	
-	for (var iIndex=0;iIndex<baseText.length;iIndex++) {
-		if (Property.getNode('devices/'+baseDSID +'/baseText/'+baseText[iIndex])!=null){
-			var index=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText[iIndex]).getChild('index').getValue();
-			var deviceIndex=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText[iIndex]).getChild('deviceIndex').getValue();
-			var bank=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText[iIndex]).getChild('bank').getValue();
-			var value=Utf8.decode(Property.getNode('devices/'+baseDSID +'/baseText/'+baseText[iIndex]).getChild('value').getValue());
-			
-			oObject.push({
-				type:'writeTextBlock',
-				dsid:dsidFromIndex(dsuid,deviceIndex),
-				bank:bank,
-				index:index,
-				cachePath:'retransmit',
-				textSel:selTextName1,
-				length:value.length,
-				value:value,
-				meta:'nocache',
-				forced:true
-			});
-		}
-		
-	}
-
-	for (var iIndex=0;iIndex<baseText2.length;iIndex++) {
-		if (Property.getNode('devices/'+baseDSID +'/baseText/'+baseText2[iIndex])!=null) {
-			var index=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText2[iIndex]).getChild('index').getValue();
-			var deviceIndex=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText2[iIndex]).getChild('deviceIndex').getValue();
-			var bank=Property.getNode('devices/'+baseDSID +'/baseText/'+baseText2[iIndex]).getChild('bank').getValue();
-			var value=Utf8.decode(Property.getNode('devices/'+baseDSID +'/baseText/'+baseText2[iIndex]).getChild('value').getValue());
-			
-			oObject.push({
-				type:'writeTextBlock',
-				dsid:dsidFromIndex(dsuid,deviceIndex),
-				bank:bank,
-				index:index,
-				cachePath:'retransmit',
-				textSel:selTextName2,
-				length:value.length,
-				value:value,
-				meta:'nocache',
-				forced:true
-			});
-		}
-		
-	}
-	lInfo.logln("retransmit base texts: " + JSON.stringify(oObject));
-	return oObject;
 }
 
-function reTransmitGeneralSettings(dsuid) {
-	var generalPropertyBase=Property.getNode('devices/' + dsuid + '/generalSettings').getChildren();
-	var result=[];
-	for (var iIndex=0;iIndex<generalPropertyBase.length;iIndex++) {
-		var value=generalPropertyBase[iIndex].getChild('value').getValue();
-		var deviceIndex=generalPropertyBase[iIndex].getChild('deviceIndex').getValue();
-		var bank=generalPropertyBase[iIndex].getChild('bank').getValue();
-		var index=generalPropertyBase[iIndex].getChild('index').getValue();
-		var oAction={
-				type:'write',
-				dsid:dsidFromIndex(dsuid,deviceIndex),
-				bank:bank,
-				index:index,
-				value:value,
-				cachePath:'retransmit',
-				meta:'nocache',
-				forced:true
-			};
-		result.push(oAction);
-	}
-	lInfo.logln("retransmit general settings: " + JSON.stringify(result));
-
-	return result;
-}
+function reTransmitBaseText (dsuid) {
+    var oObject = [];
+
+    var baseText = [ 'HomeNameText', 'AllOffText', 'DeepOffText', 'BoostText',
+        'PanicAlarmText', 'FireAlarmText', 'SmokeAlarmText', 'WaterAlarmText',
+        'GasAlarmText', 'Alarm1Text', 'Alarm2Text', 'Alarm3Text', 'Alarm4Text'
+    ];
+
+    var baseText2 = [ 'BreakInAlarmText', 'DoorBell0Text', 'DoorBell1Text', 'DoorBell2Text', 'DoorBell3Text' ];
+
+    for (var iIndex = 0; iIndex < baseText.length; iIndex++) {
+        if (Property.getNode('devices/' + baseDSID + '/baseText/' + baseText[iIndex]) != null) {
+            var index = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText[iIndex]).getChild('index').getValue();
+            var deviceIndex = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText[iIndex]).getChild('deviceIndex').getValue();
+            var bank = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText[iIndex]).getChild('bank').getValue();
+            var value = Utf8.decode(Property.getNode('devices/' + baseDSID + '/baseText/' + baseText[iIndex]).getChild('value').getValue());
+
+            oObject.push({
+                type: 'writeTextBlock',
+                dsid: dsidFromIndex(dsuid, deviceIndex),
+                bank: bank,
+                index: index,
+                cachePath: 'retransmit',
+                textSel: selTextName1,
+                length: value.length,
+                value: value,
+                meta: 'nocache',
+                forced: true
+            });
+        }
+
+    }
 
-function reTransmitTiles(dsuid) {
-	var result=[];
-	for (var pageIndex=0;pageIndex<10;pageIndex++)
-		for (var index=0;index<4;index++) {
-			var tileNode=Property.getNode('devices/'+dsuid+'/pages/' + pageIndex + '/' + index);
-			var sortIndex=tileNode.getChild('SortIndex').getValue();
-			var libraryID=tileNode.getChild('LibraryID').getValue();
-			var dsidIndex=tileNode.getChild('dsidIndex').getValue();
-			var areaIndex=tileNode.getChild('AreaIndex').getValue();
-			var displayText=Utf8.decode(tileNode.getChild('DisplayText').getValue());			
-			var jokerCount=0;
-			if (libraryID==97) {
-				jokerCount=tileNode.getChild('subtileTextReference').getChildren().length;
-			}
-			
-			tileNode.getChild('').getValue();
-			var buttonNr=tileNode.getChild('ButtonNumber').getValue();
-			var clickType=tileNode.getChild('ClickType').getValue();
-			var oArray=setTile(dsuid,index,pageIndex,sortIndex,libraryID,dsidIndex,areaIndex,displayText,jokerCount,true,buttonNr,clickType);
-			for (var jIndex=0;jIndex<oArray.length;jIndex++) {
-				oArray[jIndex].meta='nocache';
-				oArray[jIndex].cachePath='retransmit';
-				oArray[jIndex].forced=true;
-				result.push(oArray[jIndex]);
-			}
-			
-		}
-	lInfo.logln("retransmit tiles: " + JSON.stringify(result));
-
-	return result;
+    for (var iIndex = 0; iIndex < baseText2.length; iIndex++) {
+        if (Property.getNode('devices/' + baseDSID + '/baseText/' + baseText2[iIndex]) != null) {
+            var index = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText2[iIndex]).getChild('index').getValue();
+            var deviceIndex = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText2[iIndex]).getChild('deviceIndex').getValue();
+            var bank = Property.getNode('devices/' + baseDSID + '/baseText/' + baseText2[iIndex]).getChild('bank').getValue();
+            var value = Utf8.decode(Property.getNode('devices/' + baseDSID + '/baseText/' + baseText2[iIndex]).getChild('value').getValue());
+
+            oObject.push({
+                type: 'writeTextBlock',
+                dsid: dsidFromIndex(dsuid, deviceIndex),
+                bank: bank,
+                index: index,
+                cachePath: 'retransmit',
+                textSel: selTextName2,
+                length: value.length,
+                value: value,
+                meta: 'nocache',
+                forced: true
+            });
+        }
+
+    }
+    lInfo.logln('retransmit base texts: ' + JSON.stringify(oObject));
+    return oObject;
 }
 
-var Utf8 = {
+function reTransmitGeneralSettings (dsuid) {
+    var generalPropertyBase = Property.getNode('devices/' + dsuid + '/generalSettings').getChildren();
+    var result = [];
+    for (var iIndex = 0; iIndex < generalPropertyBase.length; iIndex++) {
+        var value = generalPropertyBase[iIndex].getChild('value').getValue();
+        var deviceIndex = generalPropertyBase[iIndex].getChild('deviceIndex').getValue();
+        var bank = generalPropertyBase[iIndex].getChild('bank').getValue();
+        var index = generalPropertyBase[iIndex].getChild('index').getValue();
+        var oAction = {
+            type: 'write',
+            dsid: dsidFromIndex(dsuid, deviceIndex),
+            bank: bank,
+            index: index,
+            value: value,
+            cachePath: 'retransmit',
+            meta: 'nocache',
+            forced: true
+        };
+        result.push(oAction);
+    }
+    lInfo.logln('retransmit general settings: ' + JSON.stringify(result));
 
-	    // public method for url encoding
-	    encode : function (string) {
-	        string = string.replace(/\r\n/g,"\n");
-	        var utftext = "";
+    return result;
+}
 
-	        for (var n = 0; n < string.length; n++) {
+function reTransmitTiles (dsuid) {
+    var result = [];
+    for (var pageIndex = 0; pageIndex < 10; pageIndex++) {
+        for (var index = 0; index < 4; index++) {
+            var tileNode = Property.getNode('devices/' + dsuid + '/pages/' + pageIndex + '/' + index);
+            var sortIndex = tileNode.getChild('SortIndex').getValue();
+            var libraryID = tileNode.getChild('LibraryID').getValue();
+            var dsidIndex = tileNode.getChild('dsidIndex').getValue();
+            var areaIndex = tileNode.getChild('AreaIndex').getValue();
+            var displayText = Utf8.decode(tileNode.getChild('DisplayText').getValue());
+            var jokerCount = 0;
+            if (libraryID == 97) {
+                jokerCount = tileNode.getChild('subtileTextReference').getChildren().length;
+            }
+
+            tileNode.getChild('').getValue();
+            var buttonNr = tileNode.getChild('ButtonNumber').getValue();
+            var clickType = tileNode.getChild('ClickType').getValue();
+            var oArray = setTile(dsuid, index, pageIndex, sortIndex, libraryID, dsidIndex, areaIndex, displayText, jokerCount, true, buttonNr, clickType);
+            for (var jIndex = 0; jIndex < oArray.length; jIndex++) {
+                oArray[jIndex].meta = 'nocache';
+                oArray[jIndex].cachePath = 'retransmit';
+                oArray[jIndex].forced = true;
+                result.push(oArray[jIndex]);
+            }
+
+        }
+    }
+    lInfo.logln('retransmit tiles: ' + JSON.stringify(result));
 
-	            var c = string.charCodeAt(n);
+    return result;
+}
 
-	            if (c < 128) {
-	                utftext += String.fromCharCode(c);
-	            }
-	            else if((c > 127) && (c < 2048)) {
-	                utftext += String.fromCharCode((c >> 6) | 192);
-	                utftext += String.fromCharCode((c & 63) | 128);
-	            }
-	            else {
-	                utftext += String.fromCharCode((c >> 12) | 224);
-	                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
-	                utftext += String.fromCharCode((c & 63) | 128);
-	            }
+var Utf8 = {
 
-	        }
+    // public method for url encoding
+    encode: function (string) {
+        string = string.replace(/\r\n/g, '\n');
+        var utftext = '';
 
-	        return utftext;
-	    },
+        for (var n = 0; n < string.length; n++) {
 
-	    // public method for url decoding
-	    decode : function (utftext) {
-	        var string = "";
-	        var i = 0;
-	        var c = c1 = c2 = 0;
+            var c = string.charCodeAt(n);
 
-	        while ( i < utftext.length ) {
+            if (c < 128) {
+                utftext += String.fromCharCode(c);
+            } else if ((c > 127) && (c < 2048)) {
+                utftext += String.fromCharCode((c >> 6) | 192);
+                utftext += String.fromCharCode((c & 63) | 128);
+            } else {
+                utftext += String.fromCharCode((c >> 12) | 224);
+                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+                utftext += String.fromCharCode((c & 63) | 128);
+            }
 
-	            c = utftext.charCodeAt(i);
+        }
 
-	            if (c < 128) {
-	                string += String.fromCharCode(c);
-	                i++;
-	            }
-	            else if((c > 191) && (c < 224)) {
-	                c2 = utftext.charCodeAt(i+1);
-	                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
-	                i += 2;
-	            }
-	            else {
-	                c2 = utftext.charCodeAt(i+1);
-	                c3 = utftext.charCodeAt(i+2);
-	                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
-	                i += 3;
-	            }
+        return utftext;
+    },
+
+    // public method for url decoding
+    decode: function (utftext) {
+        var string = '';
+        var i = 0;
+        var c = 0;
+        var c1 = 0;
+        var c2 = 0;
+
+        while (i < utftext.length) {
+
+            c = utftext.charCodeAt(i);
+
+            if (c < 128) {
+                string += String.fromCharCode(c);
+                i++;
+            } else if ((c > 191) && (c < 224)) {
+                c2 = utftext.charCodeAt(i + 1);
+                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+                i += 2;
+            } else {
+                c2 = utftext.charCodeAt(i + 1);
+                var c3 = utftext.charCodeAt(i + 2);
+                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+                i += 3;
+            }
 
-	        }
+        }
 
-	        return string;
-	    }
+        return string;
+    }
 
-	};
+};
 
 
 var iSunriseSecondsSinceMidnight = 0;
@@ -409,9 +409,10 @@ var iSunsetSecondsSinceMidnight = 0;
 var iDuskSecondsSinceMidnight = 0;
 var iDawnSecondsSinceMidnight = 0;
 
-function getAstroTimes() {
-    if (iSunriseSecondsSinceMidnight!=0)
+function getAstroTimes () {
+    if (iSunriseSecondsSinceMidnight != 0) {
         return;
+    }
     var sunriseNode = Property.getNode('/config/geodata/sunrise');
     if (sunriseNode == null) {
         lWarn.logln('scheduleSunTimedEvents - no sunrise Infomation');
@@ -419,7 +420,7 @@ function getAstroTimes() {
     }
     var sString = sunriseNode.getValue();
     var sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no sunrise Infomation');
         return;
     }
@@ -435,7 +436,7 @@ function getAstroTimes() {
     }
     sString = sunsetNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no sunset Infomation');
         return;
     }
@@ -451,7 +452,7 @@ function getAstroTimes() {
     }
     sString = duskNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no dusk Infomation');
         return;
     }
@@ -468,7 +469,7 @@ function getAstroTimes() {
     }
     sString = dawnNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no dawn Infomation');
         return;
     }
@@ -480,4763 +481,4890 @@ function getAstroTimes() {
 }
 
 
-var oSoundArray=[{
-	label:'HomeInSound',
-	index:0x50
-},{
-	label:'HomeOutSound',
-	index:0x56
-},{
-	label:'BreakInAlarmSound',
-	index:0x5c
-},{
-	label:'PanicAlarmSound',
-	index:0x62
-},{
-	label:'Alarm1Sound',
-	index:0x68
-},{
-	label:'FireAlarmSound',
-	index:0x6e
-},{
-	label:'SmokeAlarmSound',
-	index:0x74
-},{
-	label:'WaterAlarmSound',
-	index:0x7a
-},{
-	label:'GasAlarmSound',
-	index:0x80
-},{
-	label:'Alarm2Sound',
-	index:0x86
-},{
-	label:'Alarm3Sound',
-	index:0x8c
-},{
-	label:'Alarm4Sound',
-	index:0x92
-},{
-	label:'DoorBell0Sound',
-	index:0x98
-},{
-	label:'DoorBell1Sound',
-	index:0x9e
-},{
-	label:'DoorBell2Sound',
-	index:0xa4
-},{
-	label:'DoorBell3Sound',
-	index:0xaa
-}];
-
-
-function getSoundIndex(name) {
-	for (var iIndex=0;iIndex<oSoundArray.length;iIndex++) {
-		if (name==oSoundArray[iIndex].label)
-			return oSoundArray[iIndex].index;
-	}
-	return -1;
+var oSoundArray = [ {
+    label: 'HomeInSound',
+    index: 0x50
+}, {
+    label: 'HomeOutSound',
+    index: 0x56
+}, {
+    label: 'BreakInAlarmSound',
+    index: 0x5c
+}, {
+    label: 'PanicAlarmSound',
+    index: 0x62
+}, {
+    label: 'Alarm1Sound',
+    index: 0x68
+}, {
+    label: 'FireAlarmSound',
+    index: 0x6e
+}, {
+    label: 'SmokeAlarmSound',
+    index: 0x74
+}, {
+    label: 'WaterAlarmSound',
+    index: 0x7a
+}, {
+    label: 'GasAlarmSound',
+    index: 0x80
+}, {
+    label: 'Alarm2Sound',
+    index: 0x86
+}, {
+    label: 'Alarm3Sound',
+    index: 0x8c
+}, {
+    label: 'Alarm4Sound',
+    index: 0x92
+}, {
+    label: 'DoorBell0Sound',
+    index: 0x98
+}, {
+    label: 'DoorBell1Sound',
+    index: 0x9e
+}, {
+    label: 'DoorBell2Sound',
+    index: 0xa4
+}, {
+    label: 'DoorBell3Sound',
+    index: 0xaa
+} ];
+
+
+function getSoundIndex (name) {
+    for (var iIndex = 0; iIndex < oSoundArray.length; iIndex++) {
+        if (name == oSoundArray[iIndex].label) {
+            return oSoundArray[iIndex].index;
+        }
+    }
+    return -1;
 }
 
-Property.setSavedProperty=function (path,value) {
-	  Property.setProperty(path, value);
-	  Property.setFlag(path, 'ARCHIVE', true);
+Property.setSavedProperty = function (path, value) {
+    Property.setProperty(path, value);
+    Property.setFlag(path, 'ARCHIVE', true);
+};
+
+function deployStaticData () {
+    Property.setSavedProperty('staticData/1/sounds/1', 'BellFireAlarm');
+    Property.setSavedProperty('staticData/1/sounds/2', 'FastBuzzerAlarm');
+    Property.setSavedProperty('staticData/1/sounds/3', 'FastIndustrialAlarm');
+    Property.setSavedProperty('staticData/1/sounds/4', 'HighSireneAlarm');
+    Property.setSavedProperty('staticData/1/sounds/5', 'PiezoSmokeAlarm');
+    Property.setSavedProperty('staticData/1/sounds/6', 'RadioBuzzerAlarm');
+    Property.setSavedProperty('staticData/1/sounds/7', 'SlowBuzzerAlarm');
+    Property.setSavedProperty('staticData/1/sounds/8', 'SpaceShipAlarm');
+    Property.setSavedProperty('staticData/1/sounds/9', 'TornadoAlarm');
+    Property.setSavedProperty('staticData/1/sounds/10', 'WatchAlarm');
+    Property.setSavedProperty('staticData/1/sounds/11', 'WoopWoopAlarm1');
+    Property.setSavedProperty('staticData/1/sounds/12', 'WoopWoopAlarm2');
+    Property.setSavedProperty('staticData/1/sounds/17', 'ClassicDoorBell');
+    Property.setSavedProperty('staticData/1/sounds/18', 'LongDoorGong');
+    Property.setSavedProperty('staticData/1/sounds/19', 'ModernDoorGong');
+    Property.setSavedProperty('staticData/1/sounds/20', 'ShortDoorGong');
+    Property.setSavedProperty('staticData/1/sounds/33', 'Bullet');
+    Property.setSavedProperty('staticData/1/sounds/34', 'WaterDrop');
+    Property.setSavedProperty('staticData/1/sounds/35', 'Jump');
+    Property.setSavedProperty('staticData/1/sounds/36', 'RobotSound');
+    Property.setSavedProperty('staticData/1/sounds/37', 'StartUp');
+    Property.setSavedProperty('staticData/1/sounds/38', 'SyntheticSound');
+    Property.setSavedProperty('staticData/1/sounds/49', 'goodbye_female_german');
+    Property.setSavedProperty('staticData/1/sounds/50', 'goodbye_male_german');
+    Property.setSavedProperty('staticData/1/sounds/51', 'bye_for_now_female_german');
+    Property.setSavedProperty('staticData/1/sounds/52', 'bye_for_now_male_german');
+    Property.setSavedProperty('staticData/1/sounds/53', 'welcome_female_german');
+    Property.setSavedProperty('staticData/1/sounds/54', 'welcome_male_german');
+    Property.setSavedProperty('staticData/1/sounds/55', 'welcome_home_female_german');
+    Property.setSavedProperty('staticData/1/sounds/56', 'welcome_home_male_german');
+    Property.setSavedProperty('staticData/1/sounds/65', 'goodbye_female_english');
+    Property.setSavedProperty('staticData/1/sounds/66', 'goodbye_male_english');
+    Property.setSavedProperty('staticData/1/sounds/67', 'welcome_female_english');
+    Property.setSavedProperty('staticData/1/sounds/68', 'welcome_male_english');
+
+    Property.setSavedProperty('staticData/1/language/1', 'german');
+    Property.setSavedProperty('staticData/1/language/2', 'english');
+
+    Property.setSavedProperty('staticData/1/screensaverType/1', 'dynamic');
+    Property.setSavedProperty('staticData/1/screensaverType/1', 'bright');
+    Property.setSavedProperty('staticData/1/screensaverType/2', 'dark');
+    Property.setSavedProperty('staticData/1/screensaverType/3', 'fun');
+
+    Property.setSavedProperty('staticData/1/iconset/1', 'digitalSTROM');
+    Property.setSavedProperty('staticData/1/iconset/2', 'youngStyle');
+    Property.setSavedProperty('staticData/1/iconset/3', 'tecStyleDay');
+    Property.setSavedProperty('staticData/1/iconset/4', 'texStyleNight');
 }
 
-function deployStaticData() {
-	Property.setSavedProperty ("staticData/1/sounds/1",'BellFireAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/2",'FastBuzzerAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/3",'FastIndustrialAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/4",'HighSireneAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/5",'PiezoSmokeAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/6",'RadioBuzzerAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/7",'SlowBuzzerAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/8",'SpaceShipAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/9",'TornadoAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/10",'WatchAlarm');
-	Property.setSavedProperty ("staticData/1/sounds/11",'WoopWoopAlarm1');
-	Property.setSavedProperty ("staticData/1/sounds/12",'WoopWoopAlarm2');
-	Property.setSavedProperty ("staticData/1/sounds/17",'ClassicDoorBell');
-	Property.setSavedProperty ("staticData/1/sounds/18",'LongDoorGong');
-	Property.setSavedProperty ("staticData/1/sounds/19",'ModernDoorGong');
-	Property.setSavedProperty ("staticData/1/sounds/20",'ShortDoorGong');
-	Property.setSavedProperty ("staticData/1/sounds/33",'Bullet');
-	Property.setSavedProperty ("staticData/1/sounds/34",'WaterDrop');
-	Property.setSavedProperty ("staticData/1/sounds/35",'Jump');
-	Property.setSavedProperty ("staticData/1/sounds/36",'RobotSound');
-	Property.setSavedProperty ("staticData/1/sounds/37",'StartUp');
-	Property.setSavedProperty ("staticData/1/sounds/38",'SyntheticSound');
-	Property.setSavedProperty ("staticData/1/sounds/49",'goodbye_female_german');
-	Property.setSavedProperty ("staticData/1/sounds/50",'goodbye_male_german');
-	Property.setSavedProperty ("staticData/1/sounds/51",'bye_for_now_female_german');
-	Property.setSavedProperty ("staticData/1/sounds/52",'bye_for_now_male_german');
-	Property.setSavedProperty ("staticData/1/sounds/53",'welcome_female_german');
-	Property.setSavedProperty ("staticData/1/sounds/54",'welcome_male_german');
-	Property.setSavedProperty ("staticData/1/sounds/55",'welcome_home_female_german');
-	Property.setSavedProperty ("staticData/1/sounds/56",'welcome_home_male_german');
-	Property.setSavedProperty ("staticData/1/sounds/65",'goodbye_female_english');
-	Property.setSavedProperty ("staticData/1/sounds/66",'goodbye_male_english');
-	Property.setSavedProperty ("staticData/1/sounds/67",'welcome_female_english');
-	Property.setSavedProperty ("staticData/1/sounds/68",'welcome_male_english');
-
-	Property.setSavedProperty ("staticData/1/language/1",'german');
-	Property.setSavedProperty ("staticData/1/language/2",'english');
-
-	Property.setSavedProperty ("staticData/1/screensaverType/1",'dynamic');
-	Property.setSavedProperty ("staticData/1/screensaverType/1",'bright');
-	Property.setSavedProperty ("staticData/1/screensaverType/2",'dark');
-	Property.setSavedProperty ("staticData/1/screensaverType/3",'fun');
-
-	Property.setSavedProperty ("staticData/1/iconset/1",'digitalSTROM');
-	Property.setSavedProperty ("staticData/1/iconset/2",'youngStyle');
-	Property.setSavedProperty ("staticData/1/iconset/3",'tecStyleDay');
-	Property.setSavedProperty ("staticData/1/iconset/4",'texStyleNight');
-}
 
+function getIconsetIDForName (name, dsid) {
+    if (!isNaN(parseInt(name, 10))) { return name; }
+    if (Property.getNode('devices/' + dsid + '/datasetVersion') == null) { return -1; }
+    var dataSet = Property.getNode('devices/' + dsid + '/datasetVersion').getValue();
 
-function getIconsetIDForName(name,dsid) {
-	if (!isNaN(parseInt(name,10)))
-		return name;
-	if (Property.getNode("devices/" + dsid + "/datasetVersion")==null)
-		return -1;
-	var dataSet=Property.getNode("devices/" + dsid + "/datasetVersion").getValue();
-
-	if (Property.getNode("staticData/" + dataSet + "/iconset")!= null) {
-		var oArray=Property.getNode("staticData/" + dataSet + "/iconset").getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getValue()==name)
-				return oArray[iIndex].getName();
-		}
-	}
-	return -1;
+    if (Property.getNode('staticData/' + dataSet + '/iconset') != null) {
+        var oArray = Property.getNode('staticData/' + dataSet + '/iconset').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getValue() == name) { return oArray[iIndex].getName(); }
+        }
+    }
+    return -1;
 }
 
-function getScreensaverIDForName(name,dsid) {
-	if (!isNaN(parseInt(name,10)))
-		return name;
-	if (Property.getNode("devices/" + dsid + "/datasetVersion")==null)
-		return -1;
-	var dataSet=Property.getNode("devices/" + dsid + "/datasetVersion").getValue();
-
-	if (Property.getNode("staticData/" + dataSet + "/screensaverType")!= null) {
-		var oArray=Property.getNode("staticData/" + dataSet + "/screensaverType").getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getValue()==name)
-				return oArray[iIndex].getName();
-		}
-	}
-	return -1;
+function getScreensaverIDForName (name, dsid) {
+    if (!isNaN(parseInt(name, 10))) { return name; }
+    if (Property.getNode('devices/' + dsid + '/datasetVersion') == null) { return -1; }
+    var dataSet = Property.getNode('devices/' + dsid + '/datasetVersion').getValue();
+
+    if (Property.getNode('staticData/' + dataSet + '/screensaverType') != null) {
+        var oArray = Property.getNode('staticData/' + dataSet + '/screensaverType').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getValue() == name) { return oArray[iIndex].getName(); }
+        }
+    }
+    return -1;
 }
 
-function getSoundIDForName(dsid,name) {
-	if (!isNaN(parseInt(name,10)))
-		return name;
-	if (Property.getNode("devices/" + dsid + "/datasetVersion")==null)
-		return -1;
-	var dataSet=Property.getNode("devices/" + dsid + "/datasetVersion").getValue();
-
-	if (Property.getNode("staticData/" + dataSet + "/sounds")!= null) {
-		var oArray=Property.getNode("staticData/" + dataSet + "/sounds").getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getValue()==name)
-				return oArray[iIndex].getName();
-		}
-	}
-	return -1;
+function getSoundIDForName (dsid, name) {
+    if (!isNaN(parseInt(name, 10))) { return name; }
+    if (Property.getNode('devices/' + dsid + '/datasetVersion') == null) { return -1; }
+    var dataSet = Property.getNode('devices/' + dsid + '/datasetVersion').getValue();
+
+    if (Property.getNode('staticData/' + dataSet + '/sounds') != null) {
+        var oArray = Property.getNode('staticData/' + dataSet + '/sounds').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getValue() == name) { return oArray[iIndex].getName(); }
+        }
+    }
+    return -1;
 }
 
-function getLanguageIDForName(name,dsid) {
-	if (!isNaN(parseInt(name,10)))
-		return name;
-	if (Property.getNode("devices/" + dsid + "/datasetVersion")==null)
-		return -1;
-	var dataSet=Property.getNode("devices/" + dsid + "/datasetVersion").getValue();
-
-	if (Property.getNode("staticData/" + dataSet + "/language")!= null) {
-		var oArray=Property.getNode("staticData/" + dataSet + "/language").getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getValue()==name)
-				return oArray[iIndex].getName();
-		}
-	}
-	return -1;
+function getLanguageIDForName (name, dsid) {
+    if (!isNaN(parseInt(name, 10))) { return name; }
+    if (Property.getNode('devices/' + dsid + '/datasetVersion') == null) { return -1; }
+    var dataSet = Property.getNode('devices/' + dsid + '/datasetVersion').getValue();
+
+    if (Property.getNode('staticData/' + dataSet + '/language') != null) {
+        var oArray = Property.getNode('staticData/' + dataSet + '/language').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getValue() == name) { return oArray[iIndex].getName(); }
+        }
+    }
+    return -1;
 }
 
-function getLibraryIDForName(name) {
-	switch (name) {
-		case 'Empty':
-			return 1;
-		case 'Text':
-			return 2;
-		case 'SystemInfo':
-			return 3;
-		case 'Date':
-			return 4;
-		case 'Time':
-			return 5;
-		case 'WheaterInfo':
-			return 6;
-		case 'RoomTemperature':
-			return 7;
-		case 'RoomHumidity':
-			return 8;
-		case 'RoomTemperatureHumidity':
-			return 9;
-		case 'OutsideTemperature':
-			return 10;
-		case 'OutsideHumidity':
-			return 11;
-		case 'OutsideTemperatureHumidity':
-			return 12;
-		case 'NextPage':
-			return 13;
-		case 'PrevPage':
-			return 14;
-		case 'Homepage':
-			return 15;
-		case 'LightMain':
-			return 17;
-		case 'LightOnOff':
-			return 18;
-		case 'LightPreset':
-			return 19;
-		case 'LightAllOff':
-			return 20;
-		case 'LightIncrement':
-			return 21;
-		case 'LightDecrement':
-			return 22;
-		case 'BlindsMainmenu':
-			return 33;
-		case 'BlindsUpDown':
-			return 34;
-		case 'BlindsPreset':
-			return 35;
-		case 'BlindsSunprotect':
-			return 36;
-		case 'BlindsUp':
-			return 37;
-		case 'BlindsDown':
-			return 38;
-		case 'MarqueeMainmenu':
-			return 41;
-		case 'MarqueeUpDown':
-			return 42;
-		case 'MarqueePreset':
-			return 43;
-		case 'MarqueeSunprotect':
-			return 44;
-		case 'MarqueeUp':
-			return 45;
-		case 'MarqueeDown':
-			return 46;
-		case 'ClimateMainmenu':
-			return 49;
-		case 'ClimateOnOff':
-			return 50;
-		case 'ClimatePreset':
-			return 51;
-		case 'AudioMainmenu':
-			return 65;
-		case 'AudioPlayStop':
-			return 66;
-		case 'AudioPreset':
-			return 67;
-		case 'AudioIncrement':
-			return 68;
-		case 'AudioDecrement':
-			return 69;
-		case 'VideoMainmenu':
-			return 81;
-		case 'VideoPlayStop':
-			return 82;
-		case 'VideoPreset':
-			return 83;
-		case 'VideoIncrement':
-			return 84;
-		case 'VideoDecrement':
-			return 85;
-		case 'JokerMainmenu':
-			return 97;
-		case 'JokerPreset':
-			return 98;
-		case 'ClimateCoolMainmenu':
-			return 113;
-		case 'ClimateCoolOnOff':
-			return 114;
-		case 'ClimateCoolPreset':
-			return 115;
-		case 'VentilationMainmenu':
-			return 129;
-		case 'VentilationBoost':
-			return 130;
-		case 'VentilationIncrement':
-			return 131;
-		case 'VentilationDecrement':
-			return 132;
-		case 'VentilationPreset':
-			return 0x85;
-		case 'RecirculationMainmenu':
-			return 145;
-		case 'RecirculationBoost':
-			return 146;
-		case 'RecirculationIncrement':
-			return 147;
-		case 'RecirculationDecrement':
-			return 148;
-		case 'RecirculationPreset':
-			return 0x95;
-		case 'TemperatureMainmenu':
-			return 161;
-		case 'TemperaturePresence':
-			return 162;
-		case 'TemperatureIncrement':
-			return 163;
-		case 'TemperatureDecrement':
-			return 164;
-		case 'ApartmentVentilationMainmenu':
-			return 177;
-		case 'ApartmentVentilationBoost':
-			return 178;
-		case 'ApartmentVentilationIncrement':
-			return 179;
-		case 'ApartmentVentilationDecrement':
-			return 180;
-		case 'ApartmentVentilationPreset':
-			return 0xb5;
-		case 'HomeInOutMainmenu':
-			return 193;
-		case 'HomeInOutToggle':
-			return 194;
-		case 'HomeIn':
-			return 195;
-		case 'HomeOut':
-			return 196;
-		}
-	return 0;
+function getLibraryIDForName (name) {
+    switch (name) {
+        case 'Empty':
+            return 1;
+        case 'Text':
+            return 2;
+        case 'SystemInfo':
+            return 3;
+        case 'Date':
+            return 4;
+        case 'Time':
+            return 5;
+        case 'WheaterInfo':
+            return 6;
+        case 'RoomTemperature':
+            return 7;
+        case 'RoomHumidity':
+            return 8;
+        case 'RoomTemperatureHumidity':
+            return 9;
+        case 'OutsideTemperature':
+            return 10;
+        case 'OutsideHumidity':
+            return 11;
+        case 'OutsideTemperatureHumidity':
+            return 12;
+        case 'NextPage':
+            return 13;
+        case 'PrevPage':
+            return 14;
+        case 'Homepage':
+            return 15;
+        case 'LightMain':
+            return 17;
+        case 'LightOnOff':
+            return 18;
+        case 'LightPreset':
+            return 19;
+        case 'LightAllOff':
+            return 20;
+        case 'LightIncrement':
+            return 21;
+        case 'LightDecrement':
+            return 22;
+        case 'BlindsMainmenu':
+            return 33;
+        case 'BlindsUpDown':
+            return 34;
+        case 'BlindsPreset':
+            return 35;
+        case 'BlindsSunprotect':
+            return 36;
+        case 'BlindsUp':
+            return 37;
+        case 'BlindsDown':
+            return 38;
+        case 'MarqueeMainmenu':
+            return 41;
+        case 'MarqueeUpDown':
+            return 42;
+        case 'MarqueePreset':
+            return 43;
+        case 'MarqueeSunprotect':
+            return 44;
+        case 'MarqueeUp':
+            return 45;
+        case 'MarqueeDown':
+            return 46;
+        case 'ClimateMainmenu':
+            return 49;
+        case 'ClimateOnOff':
+            return 50;
+        case 'ClimatePreset':
+            return 51;
+        case 'AudioMainmenu':
+            return 65;
+        case 'AudioPlayStop':
+            return 66;
+        case 'AudioPreset':
+            return 67;
+        case 'AudioIncrement':
+            return 68;
+        case 'AudioDecrement':
+            return 69;
+        case 'VideoMainmenu':
+            return 81;
+        case 'VideoPlayStop':
+            return 82;
+        case 'VideoPreset':
+            return 83;
+        case 'VideoIncrement':
+            return 84;
+        case 'VideoDecrement':
+            return 85;
+        case 'JokerMainmenu':
+            return 97;
+        case 'JokerPreset':
+            return 98;
+        case 'ClimateCoolMainmenu':
+            return 113;
+        case 'ClimateCoolOnOff':
+            return 114;
+        case 'ClimateCoolPreset':
+            return 115;
+        case 'VentilationMainmenu':
+            return 129;
+        case 'VentilationBoost':
+            return 130;
+        case 'VentilationIncrement':
+            return 131;
+        case 'VentilationDecrement':
+            return 132;
+        case 'VentilationPreset':
+            return 0x85;
+        case 'RecirculationMainmenu':
+            return 145;
+        case 'RecirculationBoost':
+            return 146;
+        case 'RecirculationIncrement':
+            return 147;
+        case 'RecirculationDecrement':
+            return 148;
+        case 'RecirculationPreset':
+            return 0x95;
+        case 'TemperatureMainmenu':
+            return 161;
+        case 'TemperaturePresence':
+            return 162;
+        case 'TemperatureIncrement':
+            return 163;
+        case 'TemperatureDecrement':
+            return 164;
+        case 'ApartmentVentilationMainmenu':
+            return 177;
+        case 'ApartmentVentilationBoost':
+            return 178;
+        case 'ApartmentVentilationIncrement':
+            return 179;
+        case 'ApartmentVentilationDecrement':
+            return 180;
+        case 'ApartmentVentilationPreset':
+            return 0xb5;
+        case 'HomeInOutMainmenu':
+            return 193;
+        case 'HomeInOutToggle':
+            return 194;
+        case 'HomeIn':
+            return 195;
+        case 'HomeOut':
+            return 196;
+    }
+    return 0;
 }
 
-function getLibraryNameForID(ID) {
-	switch (ID) {
-		case 1:
-			return 'Empty';
-		case 2:
-			return 'Text';
-		case 3:
-			return 'SystemInfo';
-		case 4:
-			return 'Date';
-		case 5:
-			return 'Time';
-		case 6:
-			return 'WheaterInfo';
-		case 7:
-			return 'RoomTemperature';
-		case 8:
-			return 'RoomHumidity';
-		case 9:
-			return 'RoomTemperatureHumidity';
-		case 10:
-			return 'OutsideTemperature';
-		case 11:
-			return 'OutsideHumidity';
-		case 12:
-			return 'OutsideTemperatureHumidity';
-		case 13:
-			return 'NextPage';
-		case 14:
-			return 'PrevPage';
-		case 15:
-			return 'Homepage';
-		case 17:
-			return 'LightMain';
-		case 18:
-			return 'LightOnOff';
-		case 19:
-			return 'LightPreset';
-		case 20:
-			return 'LightAllOff';
-		case 21:
-			return 'LightIncrement';
-		case 22:
-			return 'LightDecrement';
-		case 33:
-			return 'BlindsMainmenu';
-		case 34:
-			return 'BlindsUpDown';
-		case 35:
-			return 'BlindsPreset';
-		case 36:
-			return 'BlindsSunprotect';
-		case 37:
-			return 'BlindsUp';
-		case 38:
-			return 'BlindsDown';
-		case 41:
-			return 'MarqueeMainmenu';
-		case 42:
-			return 'MarqueeUpDown';
-		case 43:
-			return 'MarqueePreset';
-		case 44:
-			return 'MarqueeSunprotect';
-		case 45:
-			return 'MarqueeUp';
-		case 46:
-			return 'MarqueeDown';
-		case 49:
-			return 'ClimateMainmenu';
-		case 50:
-			return 'ClimateOnOff';
-		case 51:
-			return 'ClimatePreset';
-		case 65:
-			return 'AudioMainmenu';
-		case 66:
-			return 'AudioPlayStop';
-		case 67:
-			return 'AudioPreset';
-		case 68:
-			return 'AudioIncrement';
-		case 69:
-			return 'AudioDecrement';
-		case 81:
-			return 'VideoMainmenu';
-		case 82:
-			return 'VideoPlayStop';
-		case 83:
-			return 'VideoPreset';
-		case 84:
-			return 'VideoIncrement';
-		case 85:
-			return 'VideoDecrement';
-		case 97:
-			return 'JokerMainmenu';
-		case 98:
-			return 'JokerPreset';
-		case 113:
-			return 'ClimateCoolMainmenu';
-		case 114:
-			return 'ClimateCoolOnOff';
-		case 115:
-			return 'ClimateCoolPreset';
-		case 129:
-			return 'VentilationMainmenu';
-		case 130:
-			return 'VentilationBoost';
-		case 131:
-			return 'VentilationIncrement';
-		case 132:
-			return 'VentilationDecrement';
-		case 0x85:
-			return 'VentilationPreset';
-		case 145:
-			return 'RecirculationMainmenu';
-		case 146:
-			return 'RecirculationBoost';
-		case 147:
-			return 'RecirculationIncrement';
-		case 148:
-			return 'RecirculationDecrement';
-		case 0x95:
-			return 'RecirculationPreset';
-		case 161:
-			return 'TemperatureMainmenu';
-		case 162:
-			return 'TemperaturePresence';
-		case 163:
-			return 'TemperatureIncrement';
-		case 164:
-			return 'TemperatureDecrement';
-		case 177:
-			return 'ApartmentVentilationMainmenu';
-		case 178:
-			return 'ApartmentVentilationBoost';
-		case 179:
-			return 'ApartmentVentilationIncrement';
-		case 180:
-			return 'ApartmentVentilationDecrement';
-		case 0xb5:
-			return 'ApartmentVentilationPreset';
-		case 193:
-			return 'HomeInOutMainmenu';
-		case 194:
-			return 'HomeInOutToggle';
-		case 195:
-			return 'HomeIn';
-		case 196:
-			return 'HomeOut';
-		}
-	return '';
+function getLibraryNameForID (ID) {
+    switch (ID) {
+        case 1:
+            return 'Empty';
+        case 2:
+            return 'Text';
+        case 3:
+            return 'SystemInfo';
+        case 4:
+            return 'Date';
+        case 5:
+            return 'Time';
+        case 6:
+            return 'WheaterInfo';
+        case 7:
+            return 'RoomTemperature';
+        case 8:
+            return 'RoomHumidity';
+        case 9:
+            return 'RoomTemperatureHumidity';
+        case 10:
+            return 'OutsideTemperature';
+        case 11:
+            return 'OutsideHumidity';
+        case 12:
+            return 'OutsideTemperatureHumidity';
+        case 13:
+            return 'NextPage';
+        case 14:
+            return 'PrevPage';
+        case 15:
+            return 'Homepage';
+        case 17:
+            return 'LightMain';
+        case 18:
+            return 'LightOnOff';
+        case 19:
+            return 'LightPreset';
+        case 20:
+            return 'LightAllOff';
+        case 21:
+            return 'LightIncrement';
+        case 22:
+            return 'LightDecrement';
+        case 33:
+            return 'BlindsMainmenu';
+        case 34:
+            return 'BlindsUpDown';
+        case 35:
+            return 'BlindsPreset';
+        case 36:
+            return 'BlindsSunprotect';
+        case 37:
+            return 'BlindsUp';
+        case 38:
+            return 'BlindsDown';
+        case 41:
+            return 'MarqueeMainmenu';
+        case 42:
+            return 'MarqueeUpDown';
+        case 43:
+            return 'MarqueePreset';
+        case 44:
+            return 'MarqueeSunprotect';
+        case 45:
+            return 'MarqueeUp';
+        case 46:
+            return 'MarqueeDown';
+        case 49:
+            return 'ClimateMainmenu';
+        case 50:
+            return 'ClimateOnOff';
+        case 51:
+            return 'ClimatePreset';
+        case 65:
+            return 'AudioMainmenu';
+        case 66:
+            return 'AudioPlayStop';
+        case 67:
+            return 'AudioPreset';
+        case 68:
+            return 'AudioIncrement';
+        case 69:
+            return 'AudioDecrement';
+        case 81:
+            return 'VideoMainmenu';
+        case 82:
+            return 'VideoPlayStop';
+        case 83:
+            return 'VideoPreset';
+        case 84:
+            return 'VideoIncrement';
+        case 85:
+            return 'VideoDecrement';
+        case 97:
+            return 'JokerMainmenu';
+        case 98:
+            return 'JokerPreset';
+        case 113:
+            return 'ClimateCoolMainmenu';
+        case 114:
+            return 'ClimateCoolOnOff';
+        case 115:
+            return 'ClimateCoolPreset';
+        case 129:
+            return 'VentilationMainmenu';
+        case 130:
+            return 'VentilationBoost';
+        case 131:
+            return 'VentilationIncrement';
+        case 132:
+            return 'VentilationDecrement';
+        case 0x85:
+            return 'VentilationPreset';
+        case 145:
+            return 'RecirculationMainmenu';
+        case 146:
+            return 'RecirculationBoost';
+        case 147:
+            return 'RecirculationIncrement';
+        case 148:
+            return 'RecirculationDecrement';
+        case 0x95:
+            return 'RecirculationPreset';
+        case 161:
+            return 'TemperatureMainmenu';
+        case 162:
+            return 'TemperaturePresence';
+        case 163:
+            return 'TemperatureIncrement';
+        case 164:
+            return 'TemperatureDecrement';
+        case 177:
+            return 'ApartmentVentilationMainmenu';
+        case 178:
+            return 'ApartmentVentilationBoost';
+        case 179:
+            return 'ApartmentVentilationIncrement';
+        case 180:
+            return 'ApartmentVentilationDecrement';
+        case 0xb5:
+            return 'ApartmentVentilationPreset';
+        case 193:
+            return 'HomeInOutMainmenu';
+        case 194:
+            return 'HomeInOutToggle';
+        case 195:
+            return 'HomeIn';
+        case 196:
+            return 'HomeOut';
+    }
+    return '';
 }
 
-function findIndexForName(name,dsid) {
-	var oArray=Property.getNode('devices/' + dsid + '/generalSettings').getChildren();
-	for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-		var node=oArray[iIndex];
-		if (node.getName()==name)
-			if (node.getChild('index')!=null)
-				return node.getChild('index').getValue();
-	}
-	return -1;
+function findIndexForName (name, dsid) {
+    var oArray = Property.getNode('devices/' + dsid + '/generalSettings').getChildren();
+    for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+        var node = oArray[iIndex];
+        if (node.getName() == name) { if (node.getChild('index') != null) { return node.getChild('index').getValue(); } }
+    }
+    return -1;
 }
 
-function dsidFromIndex(anyDSID,deviceIndex) {
-	var baseIndex=Math.floor(parseInt(anyDSID.substring(anyDSID.length-3).substring(0,1),16)/8)*8;
-	var parentDSID=anyDSID.substring(0,anyDSID.length-3);
-	return parentDSID + '' + (baseIndex+deviceIndex).toString(16) + "00";
+function dsidFromIndex (anyDSID, deviceIndex) {
+    var baseIndex = Math.floor(parseInt(anyDSID.substring(anyDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+    var parentDSID = anyDSID.substring(0, anyDSID.length - 3);
+    return parentDSID + '' + (baseIndex + deviceIndex).toString(16) + '00';
 }
 
-var selTextPage=0x01;
-var selTextName1=0x02;
-var selTextName2=0x03;
-var selTextPageName=0x0e;
-var selTextScene1=0x11;
-var selTextScene2=0x12;
-var selTextScene3=0x13;
-var selTextScene4=0x14;
-
-
-function textSelPageTextConfig(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x01,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+var selTextPage = 0x01;
+var selTextName1 = 0x02;
+var selTextName2 = 0x03;
+var selTextPageName = 0x0e;
+var selTextScene1 = 0x11;
+var selTextScene2 = 0x12;
+var selTextScene3 = 0x13;
+var selTextScene4 = 0x14;
+
+
+function textSelPageTextConfig (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x01,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 
 }
-function textSelName1TextConfig(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x02,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelName1TextConfig (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x02,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 }
-function textSelName2TextConfig(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x03,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelName2TextConfig (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x03,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 }
-function textSelPageNameTextConfig(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x0e,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelPageNameTextConfig (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x0e,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 }
-function textSelSceneTextConfig1(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x11,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelSceneTextConfig1 (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x11,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 
 }
-function textSelSceneTextConfig2(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x12,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelSceneTextConfig2 (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x12,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 
 }
-function textSelSceneTextConfig3(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x13,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelSceneTextConfig3 (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x13,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 
 }
-function textSelSceneTextConfig4(baseDSID) {
-	return {
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD3,
-		value:0x14,
-		cachePath:'textSel',
-		meta:'nocache'
-	};
+function textSelSceneTextConfig4 (baseDSID) {
+    return {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD3,
+        value: 0x14,
+        cachePath: 'textSel',
+        meta: 'nocache'
+    };
 }
 
 
+function fetchGeneralSettings (baseDSID) {
+
+    var protocolVersion = -1;
+    if (Property.getNode('devices/' + baseDSID + '/ProtocolVersion') != null) { protocolVersion = Property.getNode('devices/' + baseDSID + '/ProtocolVersion').getValue(); }
+
+    lInfo.logln('fetching general Settings for ' + baseDSID);
+    var baseParameter = [ {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0,
+        cacheName: 'ConfigFlagsLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 1,
+        cacheName: 'ConfigFlagsHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 2,
+        cacheName: 'DisabledAlarmFlagsLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 3,
+        cacheName: 'DisabledAlarmFlagHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 4,
+        cacheName: 'ResetableAlarmFlagsLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 5,
+        cacheName: 'ResetableAlarmFlagsHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 6,
+        cacheName: 'JokerSubPageCountMaskLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 7,
+        cacheName: 'JokerSubPageCountMaskHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 8,
+        cacheName: 'VentilationLevelCountMaskLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 9,
+        cacheName: 'VentilationLevelCountMaskHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0a,
+        cacheName: 'AirRecirculationLevelCountMaskLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0b,
+        cacheName: 'AirRecirculationLevelCountMaskHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0c,
+        cacheName: 'ApartmentVentilationLevelCountMaskLow'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0d,
+        cacheName: 'ApartmentVentilationLevelCountMaskHigh'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0e,
+        cacheName: 'DoorOpenerDeviceIndexTableLow',
+        minProtocolVersion: 0x103
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x0e,
+        cacheName: 'DoorOpenerDeviceIndexTableHigh',
+        minProtocolVersion: 0x103
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x10,
+        cacheName: 'DayDesign'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x11,
+        cacheName: 'Language'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x12,
+        cacheName: 'DayScreenSaverType'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x13,
+        cacheName: 'ProximitySensorSensibility'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x16,
+        cacheName: 'MotionDetectorLEDColors'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x17,
+        cacheName: 'BreakInAlarmConfig'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x18,
+        cacheName: 'LongPressTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x19,
+        cacheName: 'FadeInTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1a,
+        cacheName: 'FadeOutTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1b,
+        cacheName: 'MenuLevelUpTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1c,
+        cacheName: 'MenuLevelIncDecExtraTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1d,
+        cacheName: 'DoorBellPageTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1e,
+        cacheName: 'NightDesign'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x1f,
+        cacheName: 'NightScreenSaverType'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x20,
+        cacheName: 'DoorOpenerConfig0'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x21,
+        cacheName: 'DoorOpenerConfig1'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x22,
+        cacheName: 'DoorOpenerConfig2'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x23,
+        cacheName: 'DoorOpenerConfig3'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x30,
+        cacheName: 'DayMainPageTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x31,
+        cacheName: 'DayScreenSaverTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x32,
+        cacheName: 'DayStandByTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x33,
+        cacheName: 'DayMinIntensity'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x34,
+        cacheName: 'DayMaxIntensity'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x38,
+        cacheName: 'NightMainPageTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x39,
+        cacheName: 'NightScreenSaverTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x3a,
+        cacheName: 'NightStandByTime'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x3b,
+        cacheName: 'NightMinIntensity'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x3c,
+        cacheName: 'NightMaxIntensity'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x4f,
+        cacheName: 'ScreenSaverConfig'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb0,
+        cacheName: 'TemperatureMin0'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb1,
+        cacheName: 'TemperatureMax0'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb2,
+        cacheName: 'TemperatureMin1'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb3,
+        cacheName: 'TemperatureMax1'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb4,
+        cacheName: 'TemperatureMin2'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb5,
+        cacheName: 'TemperatureMax2'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb6,
+        cacheName: 'TemperatureMin3'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb7,
+        cacheName: 'TemperatureMax3'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb8,
+        cacheName: 'TemperatureMin4'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xb9,
+        cacheName: 'TemperatureMax4'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xba,
+        cacheName: 'TemperatureMin5'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xbb,
+        cacheName: 'TemperatureMax5'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xbc,
+        cacheName: 'TemperatureMin6'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xbd,
+        cacheName: 'TemperatureMax6'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xbe,
+        cacheName: 'TemperatureMin7'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0xbf,
+        cacheName: 'TemperatureMax7'
+    } ];
+
+    var baseText = [ {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x00,
+        length: 0x10,
+        cacheName: 'HomeNameText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x40,
+        length: 0x10,
+        cacheName: 'AllOffText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x50,
+        length: 0x10,
+        cacheName: 'DeepOffText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x60,
+        length: 0x10,
+        cacheName: 'BoostText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x70,
+        length: 0x10,
+        cacheName: 'PanicAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x80,
+        length: 0x10,
+        cacheName: 'FireAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x90,
+        length: 0x10,
+        cacheName: 'SmokeAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xa0,
+        length: 0x10,
+        cacheName: 'WaterAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xb0,
+        length: 0x10,
+        cacheName: 'GasAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xc0,
+        length: 0x10,
+        cacheName: 'Alarm1Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xd0,
+        length: 0x10,
+        cacheName: 'Alarm2Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xe0,
+        length: 0x10,
+        cacheName: 'Alarm3Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0xf0,
+        length: 0x10,
+        cacheName: 'Alarm4Text'
+    } ];
+
+    var baseText2 = [ {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x00,
+        length: 0x10,
+        cacheName: 'BreakInAlarmText'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x10,
+        length: 0x10,
+        cacheName: 'DoorBell0Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x20,
+        length: 0x10,
+        cacheName: 'DoorBell1Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x30,
+        length: 0x10,
+        cacheName: 'DoorBell2Text'
+    }, {
+        deviceIndex: 6,
+        bank: 127,
+        index: 0x40,
+        length: 0x10,
+        cacheName: 'DoorBell3Text'
+    } ];
+
+    var oObject = [];
+
+    for (var iIndex = 0; iIndex < baseParameter.length; iIndex++) {
+        var fSkip = false;
+        if (protocolVersion != -1) {
+            if (baseParameter[iIndex].minProtocolVersion != null) {
+                if (protocolVersion < baseParameter[iIndex].minProtocolVersion) {
+                    fSkip = true;
+                }
+            }
+        }
+        if (!fSkip) {
+            var actDeviceIndex = baseParameter[iIndex].deviceIndex;
+            var actBank = baseParameter[iIndex].bank;
+            var actIndex = baseParameter[iIndex].index;
+            var cacheName = baseParameter[iIndex].cacheName;
+            oObject.push({
+                type: 'read',
+                dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+                bank: actBank,
+                index: actIndex,
+                cachePath: 'devices/' + baseDSID + '/generalSettings/' + cacheName + '/value'
+            });
+            Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/deviceIndex', actDeviceIndex);
+            Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/bank', actBank);
+            Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/index', actIndex);
+        }
+    }
+
+    var signedBaseParameter = [ {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x14,
+        cacheName: 'TemperatureCorrection'
+    }, {
+        deviceIndex: 7,
+        bank: 127,
+        index: 0x15,
+        cacheName: 'HumidityCorrection'
+    } ];
+
+    for (var iIndex = 0; iIndex < signedBaseParameter.length; iIndex++) {
+        var actDeviceIndex = signedBaseParameter[iIndex].deviceIndex;
+        var actBank = signedBaseParameter[iIndex].bank;
+        var actIndex = signedBaseParameter[iIndex].index;
+        var cacheName = signedBaseParameter[iIndex].cacheName;
+        oObject.push({
+            type: 'readSigned',
+            dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+            bank: actBank,
+            index: actIndex,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + cacheName + '/value'
+        });
+
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/deviceIndex', actDeviceIndex);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/bank', actBank);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + cacheName + '/index', actIndex);
+    }
+
+
+    for (var iIndex = 0; iIndex < oSoundArray.length; iIndex++) {
+        var soundObject = oSoundArray[iIndex];
+
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_id/deviceIndex', 7);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_id/bank', 127);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_id/index', soundObject.index);
+        oObject.push({
+            type: 'read',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: soundObject.index,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_id/value'
+        });
+
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_volume/deviceIndex', 7);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_volume/bank', 127);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_volume/index', soundObject.index + 1);
+        oObject.push({
+            type: 'read',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: soundObject.index + 1,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_volume/value'
+        });
+
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_duration/deviceIndex', 7);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_duration/bank', 127);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_duration/index', soundObject.index + 2);
+        oObject.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: soundObject.index + 2,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_duration/value'
+        });
+
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_delay/deviceIndex', 7);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_delay/bank', 127);
+        Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_delay/index', soundObject.index + 4);
+        oObject.push({
+            type: 'read',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: soundObject.index + 4,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundObject.label + '_delay/value'
+        });
+
+    }
+
+
+    oObject.push(textSelName1TextConfig(baseDSID));
+
+    for (var iIndex = 0; iIndex < baseText.length; iIndex++) {
+        var actDeviceIndex = baseText[iIndex].deviceIndex;
+        var actBank = baseText[iIndex].bank;
+        var actIndex = baseText[iIndex].index;
+        var actLength = baseText[iIndex].length;
+
+        oObject.push({
+            type: 'readDataBlock',
+            dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+            bank: actBank,
+            index: actIndex,
+            cachePath: 'devices/' + baseDSID + '/baseText/' + baseText[iIndex].cacheName + '/value',
+            length: actLength
+        });
 
-function fetchGeneralSettings(baseDSID) {
-	
-	var protocolVersion=-1;
-	if (Property.getNode('devices/'+baseDSID+'/ProtocolVersion')!=null)
-		protocolVersion=Property.getNode('devices/'+baseDSID+'/ProtocolVersion').getValue();
-	
-	lInfo.logln('fetching general Settings for ' + baseDSID);
-	var baseParameter=[{
-		deviceIndex:7,
-		bank:127,
-		index:0,
-		cacheName:'ConfigFlagsLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:1,
-		cacheName:'ConfigFlagsHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:2,
-		cacheName:'DisabledAlarmFlagsLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:3,
-		cacheName:'DisabledAlarmFlagHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:4,
-		cacheName:'ResetableAlarmFlagsLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:5,
-		cacheName:'ResetableAlarmFlagsHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:6,
-		cacheName:'JokerSubPageCountMaskLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:7,
-		cacheName:'JokerSubPageCountMaskHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:8,
-		cacheName:'VentilationLevelCountMaskLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:9,
-		cacheName:'VentilationLevelCountMaskHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0a,
-		cacheName:'AirRecirculationLevelCountMaskLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0b,
-		cacheName:'AirRecirculationLevelCountMaskHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0c,
-		cacheName:'ApartmentVentilationLevelCountMaskLow'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0d,
-		cacheName:'ApartmentVentilationLevelCountMaskHigh'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0e,
-		cacheName:'DoorOpenerDeviceIndexTableLow',
-		minProtocolVersion:0x103
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x0e,
-		cacheName:'DoorOpenerDeviceIndexTableHigh',
-		minProtocolVersion:0x103
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x10,
-		cacheName:'DayDesign'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x11,
-		cacheName:'Language'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x12,
-		cacheName:'DayScreenSaverType'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x13,
-		cacheName:'ProximitySensorSensibility'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x16,
-		cacheName:'MotionDetectorLEDColors'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x17,
-		cacheName:'BreakInAlarmConfig'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x18,
-		cacheName:'LongPressTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x19,
-		cacheName:'FadeInTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1a,
-		cacheName:'FadeOutTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1b,
-		cacheName:'MenuLevelUpTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1c,
-		cacheName:'MenuLevelIncDecExtraTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1d,
-		cacheName:'DoorBellPageTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1e,
-		cacheName:'NightDesign'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x1f,
-		cacheName:'NightScreenSaverType'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x20,
-		cacheName:'DoorOpenerConfig0'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x21,
-		cacheName:'DoorOpenerConfig1'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x22,
-		cacheName:'DoorOpenerConfig2'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x23,
-		cacheName:'DoorOpenerConfig3'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x30,
-		cacheName:'DayMainPageTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x31,
-		cacheName:'DayScreenSaverTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x32,
-		cacheName:'DayStandByTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x33,
-		cacheName:'DayMinIntensity'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x34,
-		cacheName:'DayMaxIntensity'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x38,
-		cacheName:'NightMainPageTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x39,
-		cacheName:'NightScreenSaverTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x3a,
-		cacheName:'NightStandByTime'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x3b,
-		cacheName:'NightMinIntensity'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x3c,
-		cacheName:'NightMaxIntensity'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x4f,
-		cacheName:'ScreenSaverConfig'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb0,
-		cacheName:'TemperatureMin0'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb1,
-		cacheName:'TemperatureMax0'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb2,
-		cacheName:'TemperatureMin1'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb3,
-		cacheName:'TemperatureMax1'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb4,
-		cacheName:'TemperatureMin2'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb5,
-		cacheName:'TemperatureMax2'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb6,
-		cacheName:'TemperatureMin3'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb7,
-		cacheName:'TemperatureMax3'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb8,
-		cacheName:'TemperatureMin4'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xb9,
-		cacheName:'TemperatureMax4'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xba,
-		cacheName:'TemperatureMin5'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xbb,
-		cacheName:'TemperatureMax5'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xbc,
-		cacheName:'TemperatureMin6'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xbd,
-		cacheName:'TemperatureMax6'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xbe,
-		cacheName:'TemperatureMin7'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0xbf,
-		cacheName:'TemperatureMax7'
-	}];
-
-	var baseText= [{
-		deviceIndex:6,
-		bank:127,
-		index:0x00,
-		length:0x10,
-		cacheName:'HomeNameText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x40,
-		length:0x10,
-		cacheName:'AllOffText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x50,
-		length:0x10,
-		cacheName:'DeepOffText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x60,
-		length:0x10,
-		cacheName:'BoostText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x70,
-		length:0x10,
-		cacheName:'PanicAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x80,
-		length:0x10,
-		cacheName:'FireAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x90,
-		length:0x10,
-		cacheName:'SmokeAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xa0,
-		length:0x10,
-		cacheName:'WaterAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xb0,
-		length:0x10,
-		cacheName:'GasAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xc0,
-		length:0x10,
-		cacheName:'Alarm1Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xd0,
-		length:0x10,
-		cacheName:'Alarm2Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xe0,
-		length:0x10,
-		cacheName:'Alarm3Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0xf0,
-		length:0x10,
-		cacheName:'Alarm4Text'
-	}];
-
-	var baseText2= [{
-		deviceIndex:6,
-		bank:127,
-		index:0x00,
-		length:0x10,
-		cacheName:'BreakInAlarmText'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x10,
-		length:0x10,
-		cacheName:'DoorBell0Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x20,
-		length:0x10,
-		cacheName:'DoorBell1Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x30,
-		length:0x10,
-		cacheName:'DoorBell2Text'
-	},{
-		deviceIndex:6,
-		bank:127,
-		index:0x40,
-		length:0x10,
-		cacheName:'DoorBell3Text'
-	}];
-
-	var oObject=[];
-
-	for (var iIndex=0;iIndex<baseParameter.length;iIndex++) {
-		var fSkip=false;
-		if (protocolVersion!=-1)
-			if (baseParameter[iIndex].minProtocolVersion!=null)
-				if (protocolVersion<baseParameter[iIndex].minProtocolVersion)
-					fSkip=true;
-		if (!fSkip) {
-			var actDeviceIndex=baseParameter[iIndex].deviceIndex;
-			var actBank=baseParameter[iIndex].bank;
-			var actIndex=baseParameter[iIndex].index;
-			var cacheName=baseParameter[iIndex].cacheName;
-			oObject.push({
-				type:'read',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:actBank,
-				index:actIndex,
-				cachePath:'devices/'+baseDSID+'/generalSettings/' + cacheName +'/value'
-			});	
-			Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/deviceIndex',actDeviceIndex);
-			Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/bank',actBank);
-			Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/index',actIndex);
-		}
-	}
-
-	var signedBaseParameter=[{
-		deviceIndex:7,
-		bank:127,
-		index:0x14,
-		cacheName:'TemperatureCorrection'
-	},{
-		deviceIndex:7,
-		bank:127,
-		index:0x15,
-		cacheName:'HumidityCorrection'
-	}];
-
-	for (var iIndex=0;iIndex<signedBaseParameter.length;iIndex++) {
-		var actDeviceIndex=signedBaseParameter[iIndex].deviceIndex;
-		var actBank=signedBaseParameter[iIndex].bank;
-		var actIndex=signedBaseParameter[iIndex].index;
-		var cacheName=signedBaseParameter[iIndex].cacheName;
-		oObject.push({
-			type:'readSigned',
-			dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-			bank:actBank,
-			index:actIndex,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + cacheName +'/value'
-		});
-
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/deviceIndex',actDeviceIndex);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/bank',actBank);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + cacheName +'/index',actIndex);
-	}
-
-
-	for (var iIndex=0;iIndex<oSoundArray.length;iIndex++) {
-		var soundObject=oSoundArray[iIndex];
-
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_id/deviceIndex',7);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_id/bank',127);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_id/index',soundObject.index);
-		oObject.push({
-			type:'read',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:soundObject.index,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_id/value',
-		});
-
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_volume/deviceIndex',7);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_volume/bank',127);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_volume/index',soundObject.index+1);
-		oObject.push({
-			type:'read',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:soundObject.index+1,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_volume/value',
-		});
-
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_duration/deviceIndex',7);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_duration/bank',127);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_duration/index',soundObject.index+2);
-		oObject.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:soundObject.index+2,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_duration/value',
-		});
-
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_delay/deviceIndex',7);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_delay/bank',127);
-		Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_delay/index',soundObject.index+4);
-		oObject.push({
-			type:'read',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:soundObject.index+4,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundObject.label +'_delay/value',
-		});
-
-	}
-
-
-	oObject.push(textSelName1TextConfig(baseDSID));
-
-	for (var iIndex=0;iIndex<baseText.length;iIndex++) {
-		var actDeviceIndex=baseText[iIndex].deviceIndex;
-		var actBank=baseText[iIndex].bank;
-		var actIndex=baseText[iIndex].index;
-		var actLength=baseText[iIndex].length;
-
-		oObject.push({
-			type:'readDataBlock',
-			dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-			bank:actBank,
-			index:actIndex,
-			cachePath:'devices/'+baseDSID +'/baseText/' + baseText[iIndex].cacheName + '/value',
-			length:actLength
-		});
-
-
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText[iIndex].cacheName + '/deviceIndex',actDeviceIndex);
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText[iIndex].cacheName + '/bank',actBank);
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText[iIndex].cacheName + '/index',actIndex);
-
-	}
-
-	oObject.push(textSelName2TextConfig(baseDSID));
-
-	for (var iIndex=0;iIndex<baseText2.length;iIndex++) {
-		var actDeviceIndex=baseText2[iIndex].deviceIndex;
-		var actBank=baseText2[iIndex].bank;
-		var actIndex=baseText2[iIndex].index;
-		var actLength=baseText2[iIndex].length;
-
-		oObject.push({
-			type:'readDataBlock',
-			dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-			bank:actBank,
-			index:actIndex,
-			cachePath:'devices/'+baseDSID +'/baseText/' + baseText2[iIndex].cacheName + '/value',
-			length:actLength
-		});
-
-
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText2[iIndex].cacheName + '/deviceIndex',actDeviceIndex);
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText2[iIndex].cacheName + '/bank',actBank);
-		Property.setSavedProperty('devices/'+baseDSID +'/baseText/' + baseText2[iIndex].cacheName + '/index',actIndex);
-
-	}
-
-	return oObject;
-}
 
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText[iIndex].cacheName + '/deviceIndex', actDeviceIndex);
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText[iIndex].cacheName + '/bank', actBank);
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText[iIndex].cacheName + '/index', actIndex);
 
+    }
+
+    oObject.push(textSelName2TextConfig(baseDSID));
+
+    for (var iIndex = 0; iIndex < baseText2.length; iIndex++) {
+        var actDeviceIndex = baseText2[iIndex].deviceIndex;
+        var actBank = baseText2[iIndex].bank;
+        var actIndex = baseText2[iIndex].index;
+        var actLength = baseText2[iIndex].length;
 
-function fetchOnePage(baseDSID,index) {
-	var oReturn=[];
-	for (var iIndex=0;iIndex<4;iIndex++) {
-		Property.setSavedProperty('devices/'+baseDSID+'/pages/' + index + '/id',index);
-		oReturn=oReturn.concat(fetchOneTile(baseDSID,iIndex,index));
-	}
-	oReturn.push({
-		type:'readNibble',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0x40 + index,
-		cachePathLow:'devices/'+baseDSID+'/pages/' + index + '/dsidIndex',
-		cachePath:'devices/'+baseDSID+'/pages/' + index + '/centerSymbolConfig'
-	});
+        oObject.push({
+            type: 'readDataBlock',
+            dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+            bank: actBank,
+            index: actIndex,
+            cachePath: 'devices/' + baseDSID + '/baseText/' + baseText2[iIndex].cacheName + '/value',
+            length: actLength
+        });
 
-	return oReturn;
+
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText2[iIndex].cacheName + '/deviceIndex', actDeviceIndex);
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText2[iIndex].cacheName + '/bank', actBank);
+        Property.setSavedProperty('devices/' + baseDSID + '/baseText/' + baseText2[iIndex].cacheName + '/index', actIndex);
+
+    }
+
+    return oObject;
+}
+
+
+function fetchOnePage (baseDSID, index) {
+    var oReturn = [];
+    for (var iIndex = 0; iIndex < 4; iIndex++) {
+        Property.setSavedProperty('devices/' + baseDSID + '/pages/' + index + '/id', index);
+        oReturn = oReturn.concat(fetchOneTile(baseDSID, iIndex, index));
+    }
+    oReturn.push({
+        type: 'readNibble',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0x40 + index,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + index + '/dsidIndex',
+        cachePath: 'devices/' + baseDSID + '/pages/' + index + '/centerSymbolConfig'
+    });
+
+    return oReturn;
 }
 
-function fetchOneTile(baseDSID,index,pageIndex) {
-
-	var actDeviceIndex=Math.floor(pageIndex/2);
-	var baseIndex=((pageIndex%2) * 0x80) + (index * 0x20);
-
-	lInfo.logln(' --  fetchOneTile for page ' + pageIndex + ' tiles index ' + index + ' starting on dsid ' + actDeviceIndex + ' and memory offset ' + baseIndex);
-
-	Property.setSavedProperty('devices/'+baseDSID+'/pages/' + pageIndex + '/' + index + '/id',index);
-
-
-	var oObject=[{
-				type:'read',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index + '/SortIndex'
-			},{
-				type:'read',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 1,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/LibraryID'
-			},{
-				type:'readNibble',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 2,
-				cachePathLow:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/dsidIndex',
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/AreaIndex'
-			},{
-				type:'readNibble',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 3,
-				cachePathLow:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/ClickType',
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/ButtonNumber'
-			},{
-				type:'readDataBlock',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 0x10,
-				textSel:selTextPage,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/DisplayText',
-				length:0x10
-			}];
-
-	return oObject;
+function fetchOneTile (baseDSID, index, pageIndex) {
+
+    var actDeviceIndex = Math.floor(pageIndex / 2);
+    var baseIndex = ((pageIndex % 2) * 0x80) + (index * 0x20);
+
+    lInfo.logln(' --  fetchOneTile for page ' + pageIndex + ' tiles index ' + index + ' starting on dsid ' + actDeviceIndex + ' and memory offset ' + baseIndex);
+
+    Property.setSavedProperty('devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/id', index);
+
+
+    var oObject = [ {
+        type: 'read',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/SortIndex'
+    }, {
+        type: 'read',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 1,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/LibraryID'
+    }, {
+        type: 'readNibble',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 2,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/dsidIndex',
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/AreaIndex'
+    }, {
+        type: 'readNibble',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 3,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/ClickType',
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/ButtonNumber'
+    }, {
+        type: 'readDataBlock',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 0x10,
+        textSel: selTextPage,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/DisplayText',
+        length: 0x10
+    } ];
+
+    return oObject;
 }
 
-function fetchOneSceneTable(baseDSID,index) {
-	var oObject=[{
-		type:'read',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14),
-		cachePath:'devices/'+baseDSID+'/scenes/' + index + '/dsidIndex'
-	},{
-		type:'readNibble',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14)+1,
-		cachePathLow:'devices/'+baseDSID+'/scenes/' + index +'/ClickType',
-		cachePath:'devices/'+baseDSID+'/scenes/' + index +'/ButtonNumber'
-	},{
-		type:'readDataBlock',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:((index%18)*14) + 0x2,
-		cachePath:'devices/'+baseDSID+'/scenes/' + index +'/text',
-		length:12
-	}];
-	if (Property.getNode('devices/'+baseDSID+'/scenes/' + index +'/sync')==null)
-		Property.setSavedProperty('devices/'+baseDSID+'/scenes/' + index +'/sync',true);
-	return oObject;
+function fetchOneSceneTable (baseDSID, index) {
+    var oObject = [ {
+        type: 'read',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14),
+        cachePath: 'devices/' + baseDSID + '/scenes/' + index + '/dsidIndex'
+    }, {
+        type: 'readNibble',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14) + 1,
+        cachePathLow: 'devices/' + baseDSID + '/scenes/' + index + '/ClickType',
+        cachePath: 'devices/' + baseDSID + '/scenes/' + index + '/ButtonNumber'
+    }, {
+        type: 'readDataBlock',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: ((index % 18) * 14) + 0x2,
+        cachePath: 'devices/' + baseDSID + '/scenes/' + index + '/text',
+        length: 12
+    } ];
+    if (Property.getNode('devices/' + baseDSID + '/scenes/' + index + '/sync') == null) { Property.setSavedProperty('devices/' + baseDSID + '/scenes/' + index + '/sync', true); }
+    return oObject;
 }
 
-function fetchAllSceneTable(baseDSID) {
-	var oArray=[textSelSceneTextConfig1(baseDSID)];
-	for (var iIndex=0;iIndex<18;iIndex++) {
-		oArray=oArray.concat(fetchOneSceneTable(baseDSID,iIndex));
-	}
-	oArray.push(textSelSceneTextConfig2(baseDSID));
-	for (var iIndex=18;iIndex<36;iIndex++) {
-		oArray=oArray.concat(fetchOneSceneTable(baseDSID,iIndex));
-	}
-	oArray.push(textSelSceneTextConfig3(baseDSID));
-	for (var iIndex=36;iIndex<54;iIndex++) {
-		oArray=oArray.concat(fetchOneSceneTable(baseDSID,iIndex));
-	}
-	oArray.push(textSelSceneTextConfig4(baseDSID));
-	for (var iIndex=54;iIndex<72;iIndex++) {
-		oArray=oArray.concat(fetchOneSceneTable(baseDSID,iIndex));
-	}
-	return oArray;
+function fetchAllSceneTable (baseDSID) {
+    var oArray = [ textSelSceneTextConfig1(baseDSID) ];
+    for (var iIndex = 0; iIndex < 18; iIndex++) {
+        oArray = oArray.concat(fetchOneSceneTable(baseDSID, iIndex));
+    }
+    oArray.push(textSelSceneTextConfig2(baseDSID));
+    for (var iIndex = 18; iIndex < 36; iIndex++) {
+        oArray = oArray.concat(fetchOneSceneTable(baseDSID, iIndex));
+    }
+    oArray.push(textSelSceneTextConfig3(baseDSID));
+    for (var iIndex = 36; iIndex < 54; iIndex++) {
+        oArray = oArray.concat(fetchOneSceneTable(baseDSID, iIndex));
+    }
+    oArray.push(textSelSceneTextConfig4(baseDSID));
+    for (var iIndex = 54; iIndex < 72; iIndex++) {
+        oArray = oArray.concat(fetchOneSceneTable(baseDSID, iIndex));
+    }
+    return oArray;
 }
 
-function getBaseTextIndexForName(name) {
-	switch(name) {
-		case "HomeNameText":
-			return 0x00;
-		break;
-		case "AllOffText":
-			return 0x40;
-		break;
-		case "DeepOffText":
-			return 0x50;
-		break;
-		case "BoostText":
-			return 0x60;
-		break;
-		case "PanicAlarmText":
-			return 0x70;
-		break;
-		case "FireAlarmText":
-			return 0x80;
-		break;
-		case "SmokeAlarmText":
-			return 0x90;
-		break;
-		case "WaterAlarmText":
-			return 0xa0;
-		break;
-		case "GasAlarmText":
-			return 0xb0;
-		break;
-		case "Alarm1Text":
-			return 0xc0;
-		break;
-		case "Alarm2Text":
-			return 0xd0;
-		break;
-		case "Alarm3Text":
-			return 0xe0;
-		break;
-		case "Alarm4Text":
-			return 0xf0;
-		break;
-		case "BreakInAlarmText":
-			return 0x100;
-		break;
-		case "DoorBell0Text":
-		case "DoorBellText0":
-			return 0x110;
-		break;
-		case "DoorBell1Text":
-		case "DoorBellText1":
-			return 0x120;
-		break;
-		case "DoorBell2Text":
-		case "DoorBellText2":
-			return 0x130;
-		break;
-		case "DoorBell3Text":
-		case "DoorBellText3":
-			return 0x140;
-		break;
-	}
-	return 0x00;
+function getBaseTextIndexForName (name) {
+    switch (name) {
+        case 'HomeNameText':
+            return 0x00;
+            break;
+        case 'AllOffText':
+            return 0x40;
+            break;
+        case 'DeepOffText':
+            return 0x50;
+            break;
+        case 'BoostText':
+            return 0x60;
+            break;
+        case 'PanicAlarmText':
+            return 0x70;
+            break;
+        case 'FireAlarmText':
+            return 0x80;
+            break;
+        case 'SmokeAlarmText':
+            return 0x90;
+            break;
+        case 'WaterAlarmText':
+            return 0xa0;
+            break;
+        case 'GasAlarmText':
+            return 0xb0;
+            break;
+        case 'Alarm1Text':
+            return 0xc0;
+            break;
+        case 'Alarm2Text':
+            return 0xd0;
+            break;
+        case 'Alarm3Text':
+            return 0xe0;
+            break;
+        case 'Alarm4Text':
+            return 0xf0;
+            break;
+        case 'BreakInAlarmText':
+            return 0x100;
+            break;
+        case 'DoorBell0Text':
+        case 'DoorBellText0':
+            return 0x110;
+            break;
+        case 'DoorBell1Text':
+        case 'DoorBellText1':
+            return 0x120;
+            break;
+        case 'DoorBell2Text':
+        case 'DoorBellText2':
+            return 0x130;
+            break;
+        case 'DoorBell3Text':
+        case 'DoorBellText3':
+            return 0x140;
+            break;
+    }
+    return 0x00;
 }
 
-function setBaseText(dsid,baseTextName,text,noFinish) {
-	var baseNode=null;
-	var oObject=[];
-
-	if (baseTextName=='DoorBellText0')
-		baseNameText='DoorBell0Text';
-	if (baseTextName=='DoorBellText1')
-		baseNameText='DoorBell1Text';
-	if (baseTextName=='DoorBellText2')
-		baseNameText='DoorBell2Text';
-	if (baseTextName=='DoorBellText3')
-		baseNameText='DoorBell3Text';
-
-	if (Property.getNode('devices/' + dsid + '/baseText/' + baseTextName) !=null) {
-
-		text=unescape(text);
-		var dSID=dsidFromIndex(dsid,6);
-		var updateDSID=dsidFromIndex(dsid,7);
-
-		var parameterAdress=getBaseTextIndexForName(baseTextName);
-		lInfo.logln('parameter adress for ' +baseTextName+ ' is ' + parameterAdress);
-		var textSel;
-		if (parameterAdress>0xff) {
-			//oObject.push(textSelName2TextConfig(dsid));
-			textSel=selTextName2;
-		} else {
-			//oObject.push(textSelName1TextConfig(dsid));
-			textSel=selTextName1;
-		}
-
-		oObject.push({
-			type:'writeTextBlock',
-			dsid:dSID,
-			bank:127,
-			index:(parameterAdress&0xff),
-			cachePath:'devices/' + dsid + '/baseText/' + baseTextName + '/value',
-			textSel:textSel,
-			length:text.length,
-			value:text
-		});
-		if (!noFinish)
-			oObject.push({
-				type:'write',
-				dsid:updateDSID,
-				bank:127,
-				index:0xD1,
-				value:0x80,
-				cachePath:'close updatescreen',
-				meta:'nocache'
-			});
-	}
-
-
-	return oObject;
+function setBaseText (dsid, baseTextName, text, noFinish) {
+    var baseNode = null;
+    var oObject = [];
+
+    if (baseTextName === 'DoorBellText0') {
+        baseNameText = 'DoorBell0Text';
+    }
+    if (baseTextName === 'DoorBellText1') {
+        baseNameText = 'DoorBell1Text';
+    }
+    if (baseTextName === 'DoorBellText2') {
+        baseNameText = 'DoorBell2Text';
+    }
+    if (baseTextName === 'DoorBellText3') {
+        baseNameText = 'DoorBell3Text';
+    }
+
+    if (Property.getNode('devices/' + dsid + '/baseText/' + baseTextName) != null) {
+
+        text = unescape(text);
+        var dSID = dsidFromIndex(dsid, 6);
+        var updateDSID = dsidFromIndex(dsid, 7);
+
+        var parameterAdress = getBaseTextIndexForName(baseTextName);
+        lInfo.logln('parameter adress for ' + baseTextName + ' is ' + parameterAdress);
+        var textSel;
+        if (parameterAdress > 0xff) {
+            // oObject.push(textSelName2TextConfig(dsid));
+            textSel = selTextName2;
+        } else {
+            // oObject.push(textSelName1TextConfig(dsid));
+            textSel = selTextName1;
+        }
+
+        oObject.push({
+            type: 'writeTextBlock',
+            dsid: dSID,
+            bank: 127,
+            index: (parameterAdress & 0xff),
+            cachePath: 'devices/' + dsid + '/baseText/' + baseTextName + '/value',
+            textSel: textSel,
+            length: text.length,
+            value: text
+        });
+        if (!noFinish) {
+            oObject.push({
+                type: 'write',
+                dsid: updateDSID,
+                bank: 127,
+                index: 0xD1,
+                value: 0x80,
+                cachePath: 'close updatescreen',
+                meta: 'nocache'
+            });
+        }
+    }
+
+
+    return oObject;
 }
 
-function fetchPageNames(baseDSID) {
-	var oObject=[];
-	oObject.push(textSelPageNameTextConfig(baseDSID));
-	for (var iIndex=0;iIndex<10;iIndex++) {
-		oObject.push({
-			type:'read',
-			dsid:dsidFromIndex(baseDSID,6),
-			bank:127,
-			index:(iIndex*24),
-			cachePath:'devices/'+baseDSID+'/pagenames/' + iIndex + '/PageIndex'
-		});
-		oObject.push({
-			type:'readDataBlock',
-			dsid:dsidFromIndex(baseDSID,6),
-			bank:127,
-			index:(iIndex*24) + 0x1,
-			cachePath:'devices/'+baseDSID+'/pagenames/' + iIndex +'/text',
-			length:23
-		});
-	}
-	if (Property.getNode('devices/'+baseDSID+'/scenes/' + iIndex +'/sync')==null)
-		Property.setSavedProperty('devices/'+baseDSID+'/scenes/' + iIndex +'/sync',true);
-	return oObject;
+function fetchPageNames (baseDSID) {
+    var oObject = [];
+    oObject.push(textSelPageNameTextConfig(baseDSID));
+    for (var iIndex = 0; iIndex < 10; iIndex++) {
+        oObject.push({
+            type: 'read',
+            dsid: dsidFromIndex(baseDSID, 6),
+            bank: 127,
+            index: (iIndex * 24),
+            cachePath: 'devices/' + baseDSID + '/pagenames/' + iIndex + '/PageIndex'
+        });
+        oObject.push({
+            type: 'readDataBlock',
+            dsid: dsidFromIndex(baseDSID, 6),
+            bank: 127,
+            index: (iIndex * 24) + 0x1,
+            cachePath: 'devices/' + baseDSID + '/pagenames/' + iIndex + '/text',
+            length: 23
+        });
+    }
+    if (Property.getNode('devices/' + baseDSID + '/scenes/' + iIndex + '/sync') == null) { Property.setSavedProperty('devices/' + baseDSID + '/scenes/' + iIndex + '/sync', true); }
+    return oObject;
 }
 
-function probeDeviceStep2(baseDSID) {
-	var oArray=fetchAll(baseDSID);
-	var configLow=Property.getProperty('devices/'+baseDSID+'/generalSettings/ConfigFlagsLow/value');
-	if (configLow & 0x10) {
-		lInfo.logln('dynamic configuration enabled -> should be readout completly');
-		return oArray;
-	}
-	lInfo.logln('dynamic configuration disabled -> should not readout completly');
-	var protocolVersion=Property.getProperty('devices/'+baseDSID+'/ProtocolVersion');
-	switch (protocolVersion) {
-		case 0x101:
-			processDataDeep('devices/'+baseDSID,dataset101);
-			oArray=[];
-			new Event('ulux.config',{"actions":"enrichDatastructure","dsid":baseDSID}).raise();
-		break;
-		case 0x102:
-			processDataDeep('devices/'+baseDSID,dataset102);
-			oArray=[];
-			new Event('ulux.config',{"actions":"enrichDatastructure","dsid":baseDSID}).raise();
-			break;
-		case 0x103:
-			processDataDeep('devices/'+baseDSID,dataset103);
-			oArray=[];
-			new Event('ulux.config',{"actions":"enrichDatastructure","dsid":baseDSID}).raise();
-		break;
-	}
-
-	return oArray;
+function probeDeviceStep2 (baseDSID) {
+    var oArray = fetchAll(baseDSID);
+    var configLow = Property.getProperty('devices/' + baseDSID + '/generalSettings/ConfigFlagsLow/value');
+    if (configLow & 0x10) {
+        lInfo.logln('dynamic configuration enabled -> should be readout completly');
+        return oArray;
+    }
+    lInfo.logln('dynamic configuration disabled -> should not readout completly');
+    var protocolVersion = Property.getProperty('devices/' + baseDSID + '/ProtocolVersion');
+    switch (protocolVersion) {
+        case 0x101:
+            processDataDeep('devices/' + baseDSID, dataset101);
+            oArray = [];
+            new Event('ulux.config', { actions: 'enrichDatastructure', dsid: baseDSID }).raise();
+            break;
+        case 0x102:
+            processDataDeep('devices/' + baseDSID, dataset102);
+            oArray = [];
+            new Event('ulux.config', { actions: 'enrichDatastructure', dsid: baseDSID }).raise();
+            break;
+        case 0x103:
+            processDataDeep('devices/' + baseDSID, dataset103);
+            oArray = [];
+            new Event('ulux.config', { actions: 'enrichDatastructure', dsid: baseDSID }).raise();
+            break;
+    }
+
+    return oArray;
 }
 
 
-function probeDevice(baseDSID) {
-	try {
-
-		if (raisedEvent.parameter.forced==null) {
-			if (Property.getNode('devices/' + baseDSID)!=null) {
-				if (Property.getNode('devices/' + baseDSID + "/readoutFinished")!=null) {
-					lInfo.logln(' device is known, skip readout! ');
-					return [];
-				}
-				if (Property.getNode('devices/' + baseDSID + "/readoutSinceResetStarted")!=null) {
-					lInfo.logln(' device is not known yet, but there seems to be a readout enqueued, so this is a duplicate call');
-					return [];
-				}
-			}
-		} else if (raisedEvent.parameter.forced==true) {
-			Property.getNode('devices').removeChild(baseDSID);
-		}
-
-		var oArray=[];
-
-		lInfo.logln(' --  probeDevice ' + baseDSID);
-
-		Property.setSavedProperty('devices/'+baseDSID+'/id',baseDSID);
-		Property.setSavedProperty('devices/'+baseDSID+'/datasetVersion',1);
-
-		Property.setSavedProperty('devices/'+baseDSID+ '/readoutStarted',Math.floor(new Date().getTime()/1000));
-		Property.setProperty('devices/'+baseDSID+ '/readoutSinceResetStarted',Math.floor(new Date().getTime()/1000)); // never serialize that! should be removed on restart!
-
-		if (Property.getNode('devices/'+baseDSID+'/additionalBehaviour/nightMode')==null)
-			Property.setSavedProperty('devices/'+baseDSID+'/additionalBehaviour/nightMode','disabled');
-
-
-		oArray.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xf0,
-			cachePath:'devices/'+baseDSID+'/FirmwareVersion',
-		});
-		oArray.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xfa,
-			cachePath:'devices/'+baseDSID+'/SerialNumber',
-		});
-		oArray.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xf8,
-			cachePath:'devices/'+baseDSID+'/ProtocolVersion',
-		});
-		oArray.push({
-			type:'read',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0x00,
-			cachePath:'devices/'+baseDSID+'/generalSettings/ConfigFlagsLow/value',
-		});
-
-
-		return oArray;
-	} catch (e) {
-		lWarn.logln("error: " + e);
-	}
-	return [];
+function probeDevice (baseDSID) {
+    try {
+
+        if (raisedEvent.parameter.forced == null) {
+            if (Property.getNode('devices/' + baseDSID) != null) {
+                if (Property.getNode('devices/' + baseDSID + '/readoutFinished') != null) {
+                    lInfo.logln(' device is known, skip readout! ');
+                    return [];
+                }
+                if (Property.getNode('devices/' + baseDSID + '/readoutSinceResetStarted') != null) {
+                    lInfo.logln(' device is not known yet, but there seems to be a readout enqueued, so this is a duplicate call');
+                    return [];
+                }
+            }
+        } else if (raisedEvent.parameter.forced == true) {
+            Property.getNode('devices').removeChild(baseDSID);
+        }
+
+        var oArray = [];
+
+        lInfo.logln(' --  probeDevice ' + baseDSID);
+
+        Property.setSavedProperty('devices/' + baseDSID + '/id', baseDSID);
+        Property.setSavedProperty('devices/' + baseDSID + '/datasetVersion', 1);
+
+        Property.setSavedProperty('devices/' + baseDSID + '/readoutStarted', Math.floor(new Date().getTime() / 1000));
+        Property.setProperty('devices/' + baseDSID + '/readoutSinceResetStarted', Math.floor(new Date().getTime() / 1000)); // never serialize that! should be removed on restart!
+
+        if (Property.getNode('devices/' + baseDSID + '/additionalBehaviour/nightMode') == null) {
+            Property.setSavedProperty('devices/' + baseDSID + '/additionalBehaviour/nightMode', 'disabled');
+        }
+
+
+        oArray.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xf0,
+            cachePath: 'devices/' + baseDSID + '/FirmwareVersion'
+        });
+        oArray.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xfa,
+            cachePath: 'devices/' + baseDSID + '/SerialNumber'
+        });
+        oArray.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xf8,
+            cachePath: 'devices/' + baseDSID + '/ProtocolVersion'
+        });
+        oArray.push({
+            type: 'read',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0x00,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/ConfigFlagsLow/value'
+        });
+
+
+        return oArray;
+    } catch (e) {
+        lWarn.logln('error: ' + e);
+    }
+    return [];
 
 }
 
-function fetchAll(baseDSID) {
-	try {
-
-		if (raisedEvent.parameter.forced==null) {
-			if (Property.getNode('devices/' + baseDSID)!=null) {
-				if (Property.getNode('devices/' + baseDSID + "/pagenames/")!=null) {
-					var generalArray=Property.getNode('devices/' + baseDSID + "/pagenames").getChildren();
-					if (generalArray.length>0)
-						if (generalArray[generalArray.length-1].getChild('PageIndex')) {
-							lInfo.logln(' device is known, skip readout! ');
-							return [];
-
-						}
-				}
-			}
-		} else if (raisedEvent.parameter.forced==true) {
-			Property.getNode('devices').removeChild(baseDSID);
-		}
-
-		var oArray=[];
-
-		lInfo.logln(' --  fetchAll ' + baseDSID);
-
-		Property.setSavedProperty('devices/'+baseDSID+'/id',baseDSID);
-		Property.setSavedProperty('devices/'+baseDSID+'/datasetVersion',1);
-		Property.setSavedProperty('devices/'+baseDSID+ '/readoutStarted',Math.floor(new Date().getTime()/1000));
-
-		lInfo.logln(' --  getting Protocolversion first for ' + baseDSID);		
-        var value=getDeviceConfigWord(dsidFromIndex(baseDSID,7),127,0xf8);
-        Property.setSavedProperty('devices/'+baseDSID+'/ProtocolVersion',value);
-
-		if (Property.getNode('devices/'+baseDSID+'/additionalBehaviour/nightMode')==null)
-			Property.setSavedProperty('devices/'+baseDSID+'/additionalBehaviour/nightMode','disabled');
-
-		oArray.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xf0,
-			cachePath:'devices/'+baseDSID+'/FirmwareVersion',
-		});
-		oArray.push({
-			type:'readWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xfa,
-			cachePath:'devices/'+baseDSID+'/SerialNumber',
-		});
-
-
-		for (var iIndex=0;iIndex<10;iIndex++) {
-
-			oArray=oArray.concat(fetchOnePage(baseDSID,iIndex));
-		}
-
-		oArray=oArray.concat(fetchAllSceneTable(baseDSID));
-		oArray=oArray.concat(fetchGeneralSettings(baseDSID));
-
-		oArray=oArray.concat(fetchPageNames(baseDSID));
-
-		return oArray;
-	} catch (e) {
-		lWarn.logln("error: " + e);
-	}
-	return [];
+function fetchAll (baseDSID) {
+    try {
+
+        if (raisedEvent.parameter.forced == null) {
+            if (Property.getNode('devices/' + baseDSID) != null) {
+                if (Property.getNode('devices/' + baseDSID + '/pagenames/') != null) {
+                    var generalArray = Property.getNode('devices/' + baseDSID + '/pagenames').getChildren();
+                    if (generalArray.length > 0) {
+                        if (generalArray[generalArray.length - 1].getChild('PageIndex')) {
+                            lInfo.logln(' device is known, skip readout! ');
+                            return [];
+
+                        }
+                    }
+                }
+            }
+        } else if (raisedEvent.parameter.forced == true) {
+            Property.getNode('devices').removeChild(baseDSID);
+        }
+
+        var oArray = [];
+
+        lInfo.logln(' --  fetchAll ' + baseDSID);
+
+        Property.setSavedProperty('devices/' + baseDSID + '/id', baseDSID);
+        Property.setSavedProperty('devices/' + baseDSID + '/datasetVersion', 1);
+        Property.setSavedProperty('devices/' + baseDSID + '/readoutStarted', Math.floor(new Date().getTime() / 1000));
+
+        lInfo.logln(' --  getting Protocolversion first for ' + baseDSID);
+        var value = getDeviceConfigWord(dsidFromIndex(baseDSID, 7), 127, 0xf8);
+        Property.setSavedProperty('devices/' + baseDSID + '/ProtocolVersion', value);
+
+        if (Property.getNode('devices/' + baseDSID + '/additionalBehaviour/nightMode') == null) {
+            Property.setSavedProperty('devices/' + baseDSID + '/additionalBehaviour/nightMode', 'disabled');
+        }
+
+        oArray.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xf0,
+            cachePath: 'devices/' + baseDSID + '/FirmwareVersion'
+        });
+        oArray.push({
+            type: 'readWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xfa,
+            cachePath: 'devices/' + baseDSID + '/SerialNumber'
+        });
+
+
+        for (var iIndex = 0; iIndex < 10; iIndex++) {
+
+            oArray = oArray.concat(fetchOnePage(baseDSID, iIndex));
+        }
+
+        oArray = oArray.concat(fetchAllSceneTable(baseDSID));
+        oArray = oArray.concat(fetchGeneralSettings(baseDSID));
+
+        oArray = oArray.concat(fetchPageNames(baseDSID));
+
+        return oArray;
+    } catch (e) {
+        lWarn.logln('error: ' + e);
+    }
+    return [];
 }
 
 
-var EANs=['0747719155903','0747719155958','0747719155927','0747719155972','0747719155934','0747719155989','0747719155941','0747719155996',
-		   '747719155903', '747719155958', '747719155927', '747719155972', '747719155934', '747719155989', '747719155941', '747719155996','2220000000034'];
-
-function checkAndReadout(dsid) {
-	if (dsid!=null) {
-		if (dsid.substr(0,10)!='0000000000') {
-			if (Property.getNode('/apartment/zones/zone0/devices/' + dsid + '/productInfo/EAN') !=null) {
-				var ean=Property.getNode('/apartment/zones/zone0/devices/' + dsid + '/productInfo/EAN').getValue();
-				lInfo.logln('EAN ' + ean);
-				if  (EANs.indexOf(ean)>-1) {
-					var baseDSID=dsidFromIndex(dsid,0);
-					if (baseDSID!=dsid) {
-						;//lInfo.logln('device is a subdevice, not main device');
-					} else {
-						if (Property.getNode('fetching/' + dsid)==null) {
-							lInfo.logln('enqueue a fetch for ' + dsid);
-							new Event('ulux.config',{dsid:dsid,actions:'probeDevice'}).raise();
-						} else
-							lInfo.logln('skip fetch for ' + dsid);
-						Property.setProperty('fetching/' + dsid,true);
-					}
-	
-				}
-			}
-		}
-		return;
-	} else {
-		var oArray=Property.getNode('/apartment/zones/zone0/devices').getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			var ean=oArray[iIndex].getChild('productInfo/EAN').getValue();
-			lInfo.logln('EAN ' + ean);
-			var baseDSID=oArray[iIndex].getName();
-			if (baseDSID.substr(0,10)!='0000000000')
-				if  (EANs.indexOf(ean)>-1) {
-					lInfo.logln('got EAN ' + ean + ' for ' + oArray[iIndex].getName());
-					var base0=dsidFromIndex(baseDSID,0);
-					if (base0!=baseDSID) {
-						;//lInfo.logln('device is a subdevice, not main device');
-					} else {
-						if (Property.getNode('fetching/' + oArray[iIndex].getName())==null) {
-							lInfo.logln('enqueue a fetch for ' + oArray[iIndex].getName());
-							new Event('ulux.config',{dsid:oArray[iIndex].getName(),actions:'probeDevice'}).raise();
-						} else
-							lInfo.logln('skip fetch for ' + oArray[iIndex].getName());
-						Property.setProperty('fetching/' + oArray[iIndex].getName(),true);
-					}
-	
-				}
-		}
-	}
+var EANs = [ '0747719155903', '0747719155958', '0747719155927', '0747719155972', '0747719155934', '0747719155989', '0747719155941', '0747719155996',
+    '747719155903', '747719155958', '747719155927', '747719155972', '747719155934', '747719155989', '747719155941', '747719155996', '2220000000034' ];
+
+function checkAndReadout (dsid) {
+    if (dsid != null) {
+        if (dsid.substr(0, 10) != '0000000000') {
+            if (Property.getNode('/apartment/zones/zone0/devices/' + dsid + '/productInfo/EAN') != null) {
+                var ean = Property.getNode('/apartment/zones/zone0/devices/' + dsid + '/productInfo/EAN').getValue();
+                lInfo.logln('EAN ' + ean);
+                if (EANs.indexOf(ean) > -1) {
+                    var baseDSID = dsidFromIndex(dsid, 0);
+                    if (baseDSID != dsid) {
+                        // lInfo.logln('device is a subdevice, not main device');
+                    } else {
+                        if (Property.getNode('fetching/' + dsid) == null) {
+                            lInfo.logln('enqueue a fetch for ' + dsid);
+                            new Event('ulux.config', { dsid: dsid, actions: 'probeDevice' }).raise();
+                        } else {
+                            lInfo.logln('skip fetch for ' + dsid);
+                        }
+                        Property.setProperty('fetching/' + dsid, true);
+                    }
+
+                }
+            }
+        }
+
+    } else {
+        var oArray = Property.getNode('/apartment/zones/zone0/devices').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            var ean = oArray[iIndex].getChild('productInfo/EAN').getValue();
+            lInfo.logln('EAN ' + ean);
+            var baseDSID = oArray[iIndex].getName();
+            if (baseDSID.substr(0, 10) != '0000000000') {
+                if (EANs.indexOf(ean) > -1) {
+                    lInfo.logln('got EAN ' + ean + ' for ' + oArray[iIndex].getName());
+                    var base0 = dsidFromIndex(baseDSID, 0);
+                    if (base0 != baseDSID) {
+                    // lInfo.logln('device is a subdevice, not main device');
+                    } else {
+                        if (Property.getNode('fetching/' + oArray[iIndex].getName()) == null) {
+                            lInfo.logln('enqueue a fetch for ' + oArray[iIndex].getName());
+                            new Event('ulux.config', { dsid: oArray[iIndex].getName(), actions: 'probeDevice' }).raise();
+                        } else {
+                            lInfo.logln('skip fetch for ' + oArray[iIndex].getName());
+                        }
+                        Property.setProperty('fetching/' + oArray[iIndex].getName(), true);
+                    }
+
+                }
+            }
+        }
+    }
 }
 
-function getParam(baseNode,deviceIndex,bank,index) {
-	var oArray=baseNode.getChildren();
-	for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-		if (oArray[iIndex].getChild('deviceIndex')!=null) {
-			if (oArray[iIndex].getChild('deviceIndex').getValue()==deviceIndex)
-				if (oArray[iIndex].getChild('bank').getValue()==bank)
-					if (oArray[iIndex].getChild('index').getValue()==index){
-						return oArray[iIndex];
-					}
-		}
-
-	}
-	return null;
+function getParam (baseNode, deviceIndex, bank, index) {
+    var oArray = baseNode.getChildren();
+    for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+        if (oArray[iIndex].getChild('deviceIndex') != null) {
+            if (oArray[iIndex].getChild('deviceIndex').getValue() == deviceIndex) {
+                if (oArray[iIndex].getChild('bank').getValue() == bank) {
+                    if (oArray[iIndex].getChild('index').getValue() == index) {
+                        return oArray[iIndex];
+                    }
+                }
+            }
+        }
+
+    }
+    return null;
 }
 
 
-function setDeviceParameter() {
-	lInfo.logln('setDeviceParameter for ' + raisedEvent.parameter.dsid + ' with ' +unescape(raisedEvent.parameter.values));
-	var oValues=JSON.parse(unescape(raisedEvent.parameter.values));
-	var baseNode=Property.getNode('devices/' + raisedEvent.parameter.dsid + '/generalSettings');
-	if (baseNode==null) {
-		lWarn.logln('no cached values!');
-		return [];
-	}
-	var shouldWrite=[];
-	var shouldAlsoWrite=[];
-
-	for (var iIndex=0;iIndex<oValues.length;iIndex++) {
-		var fShoudSave=false;
-		var oValue=oValues[iIndex];
-		var newValue=oValues[iIndex].value;
-		var oldNode=getParam(baseNode,oValue.deviceIndex,oValue.bank,oValue.index);
-
-		if (oldNode!=null) {
-
-			var oldValue=oldNode.getChild('value').getValue();
-			if (oldNode.getChild('newvalue')!=null)
-				oldValue=oldNode.getChild('newvalue').getValue();
-
-			if (oValues[iIndex].bitmask!=null) {
-				if (oValues[iIndex].value == true) {
-					//lInfo.logln('bitmask ' + (oldValue & oValues[iIndex].bitmask));
-					if ((oldValue & oValues[iIndex].bitmask) > 0)
-						;//lInfo.logln('old: bit set, new: bit set');
-					else {
-						//lInfo.logln('old: bit not set, new: bit set');
-						fShoudSave=true;
-						newValue=oldValue | oValues[iIndex].bitmask;
-					}
-				} else {
-					if ((oldValue & oValues[iIndex].bitmask) > 0) {
-						//lInfo.logln('old: bit set, new: bit not set');
-						fShoudSave=true;
-						newValue=oldValue ^ oValues[iIndex].bitmask;
-					} else {
-						;//lInfo.logln('old: bit not set, new: bit not set');
-					}
-				}
-			} else {
-				if (oldValue!=newValue) {
-					fShoudSave=true;
-				}
-			}
-			if (fShoudSave) {
-				Property.setProperty(oldNode.getPath() + '/newvalue',newValue);
-				lInfo.logln('SET old value ' + oldValue + ' to ' + newValue + ' - '+ JSON.stringify(oValue) + ' notfied in ' + oldNode.getPath());
-				shouldWrite.push(oldNode.getPath());
-			} else
-				lInfo.logln('Skip old value ' + oldValue + ' to ' + newValue + ' - '+ JSON.stringify(oValue));
-		} else {
-			shouldAlsoWrite.push(oValues[iIndex]);
-		}
-	}
-
-	if (raisedEvent.parameter.insertSettings!=null)
-		if ("" + raisedEvent.parameter.insertSettings=="true") {
-			lInfo.logln('should insert general Settings!');
-			for (var iIndex=0;iIndex<shouldAlsoWrite.length;iIndex++) {
-				var iPropertyIndex=0;
-				var generalSettings=baseNode.getChildren();
-				for (var kIndex=0;kIndex<generalSettings.length;kIndex++) {
-					var kIndexName=parseInt("" + generalSettings[kIndex].getName(),10);
-					if (kIndexName>=iPropertyIndex)
-						iPropertyIndex=kIndexName+1;
-				}
-
-				var baseDSID=raisedEvent.parameter.dsid;
-				Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/deviceIndex',shouldAlsoWrite[iIndex].deviceIndex);
-				Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/bank',shouldAlsoWrite[iIndex].bank);
-				Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/index',shouldAlsoWrite[iIndex].index);
-				if (Property.getNode('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/value')==null)
-					Property.setSavedProperty('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/value',-1);
-				Property.setProperty('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex +'/newvalue',shouldAlsoWrite[iIndex].value);
-				shouldWrite.push('devices/'+baseDSID+'/generalSettings/' + iPropertyIndex);
-			}
-			shouldAlsoWrite=[];
-		}
-
-	var oObject=[];
-	for (var iIndex=0;iIndex<shouldWrite.length;iIndex++) {
-		if (Property.getNode(shouldWrite[iIndex]+'/newvalue')!=null) {
-			var deviceIndex=Property.getProperty(shouldWrite[iIndex]+'/deviceIndex');
-			var bank=Property.getProperty(shouldWrite[iIndex]+'/bank');
-			var index=Property.getProperty(shouldWrite[iIndex]+'/index');
-			var value=Property.getProperty(shouldWrite[iIndex]+'/newvalue');
-
-			lInfo.logln('Now write data at ' + shouldWrite[iIndex] + ' to ' + value);
-
-			var baseDSID=raisedEvent.parameter.dsid;
-			var baseIndex=Math.floor(parseInt(baseDSID.substring(baseDSID.length-3).substring(0,1),16)/8)*8;
-			var parentDSID=baseDSID.substring(0,baseDSID.length-3);
-
-			var dSID=parentDSID + '' + (baseIndex+deviceIndex).toString(16) + "00";
-
-			Property.getNode(shouldWrite[iIndex]).removeChild('newvalue');
-
-			oObject.push({
-				type:'write',
-				dsid:dSID,
-				bank:bank,
-				index:index,
-				value:value,
-				cachePath:shouldWrite[iIndex] +'/value',
-				meta:'general'
-			});
-
-		}
-	}
-	for (var iIndex=0;iIndex<shouldAlsoWrite.length;iIndex++) {
-
-		var baseDSID=raisedEvent.parameter.dsid;
-		var baseIndex=Math.floor(parseInt(baseDSID.substring(baseDSID.length-3).substring(0,1),16)/8)*8;
-		var parentDSID=baseDSID.substring(0,baseDSID.length-3);
-
-		var dSID=parentDSID + '' + (baseIndex+shouldAlsoWrite[iIndex].deviceIndex).toString(16) + "00";
-
-		oObject.push({
-			type:'write',
-			dsid:dSID,
-			bank:shouldAlsoWrite[iIndex].bank,
-			index:shouldAlsoWrite[iIndex].index,
-			value:shouldAlsoWrite[iIndex].value,
-			cachePath:'',
-			meta:'nocache'
-		});
-	}
-	var baseDSID=raisedEvent.parameter.dsid;
-	var baseIndex=Math.floor(parseInt(baseDSID.substring(baseDSID.length-3).substring(0,1),16)/8)*8;
-	var parentDSID=baseDSID.substring(0,baseDSID.length-3);
-	var updateDSID=parentDSID + '' + (baseIndex+7).toString(16) + "00";
-
-	oObject.push({
-		type:'write',
-		dsid:updateDSID,
-		bank:127,
-		index:0xD1,
-		value:0x80,
-		cachePath:'close updatescreen',
-		meta:'nocache'
-	})
-
-	if (oObject.length==0)
-		new Event('ulux.saved',{}).raise();
-	else {
-		oObject[oObject.length-1].finishEvent='ulux.config';
-		oObject[oObject.length-1].finishEventParameter='{"actions":"finish"}';
-	}
-	return oObject;
+function setDeviceParameter () {
+    lInfo.logln('setDeviceParameter for ' + raisedEvent.parameter.dsid + ' with ' + unescape(raisedEvent.parameter.values));
+    var oValues = JSON.parse(unescape(raisedEvent.parameter.values));
+    var baseNode = Property.getNode('devices/' + raisedEvent.parameter.dsid + '/generalSettings');
+    if (baseNode == null) {
+        lWarn.logln('no cached values!');
+        return [];
+    }
+    var shouldWrite = [];
+    var shouldAlsoWrite = [];
+
+    for (var iIndex = 0; iIndex < oValues.length; iIndex++) {
+        var fShoudSave = false;
+        var oValue = oValues[iIndex];
+        var newValue = oValues[iIndex].value;
+        var oldNode = getParam(baseNode, oValue.deviceIndex, oValue.bank, oValue.index);
+
+        if (oldNode != null) {
+
+            var oldValue = oldNode.getChild('value').getValue();
+            if (oldNode.getChild('newvalue') != null) { oldValue = oldNode.getChild('newvalue').getValue(); }
+
+            if (oValues[iIndex].bitmask != null) {
+                if (oValues[iIndex].value == true) {
+                    // lInfo.logln('bitmask ' + (oldValue & oValues[iIndex].bitmask));
+                    if ((oldValue & oValues[iIndex].bitmask) > 0) {}// lInfo.logln('old: bit set, new: bit set');
+                    else {
+                        // lInfo.logln('old: bit not set, new: bit set');
+                        fShoudSave = true;
+                        newValue = oldValue | oValues[iIndex].bitmask;
+                    }
+                } else if ((oldValue & oValues[iIndex].bitmask) > 0) {
+                    // lInfo.logln('old: bit set, new: bit not set');
+                    fShoudSave = true;
+                    newValue = oldValue ^ oValues[iIndex].bitmask;
+                } else {
+                    // lInfo.logln('old: bit not set, new: bit not set');
+                }
+            } else if (oldValue != newValue) {
+                fShoudSave = true;
+            }
+            if (fShoudSave) {
+                Property.setProperty(oldNode.getPath() + '/newvalue', newValue);
+                lInfo.logln('SET old value ' + oldValue + ' to ' + newValue + ' - ' + JSON.stringify(oValue) + ' notfied in ' + oldNode.getPath());
+                shouldWrite.push(oldNode.getPath());
+            } else {
+                lInfo.logln('Skip old value ' + oldValue + ' to ' + newValue + ' - ' + JSON.stringify(oValue));
+            }
+        } else {
+            shouldAlsoWrite.push(oValues[iIndex]);
+        }
+    }
+
+    if (raisedEvent.parameter.insertSettings != null) {
+        if ('' + raisedEvent.parameter.insertSettings === 'true') {
+            lInfo.logln('should insert general Settings!');
+            for (var iIndex = 0; iIndex < shouldAlsoWrite.length; iIndex++) {
+                var iPropertyIndex = 0;
+                var generalSettings = baseNode.getChildren();
+                for (var kIndex = 0; kIndex < generalSettings.length; kIndex++) {
+                    var kIndexName = parseInt('' + generalSettings[kIndex].getName(), 10);
+                    if (kIndexName >= iPropertyIndex) {
+                        iPropertyIndex = kIndexName + 1;
+                    }
+                }
+
+                var baseDSID = raisedEvent.parameter.dsid;
+                Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/deviceIndex', shouldAlsoWrite[iIndex].deviceIndex);
+                Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/bank', shouldAlsoWrite[iIndex].bank);
+                Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/index', shouldAlsoWrite[iIndex].index);
+                if (Property.getNode('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/value') == null) {
+                    Property.setSavedProperty('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/value', -1);
+                }
+                Property.setProperty('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex + '/newvalue', shouldAlsoWrite[iIndex].value);
+                shouldWrite.push('devices/' + baseDSID + '/generalSettings/' + iPropertyIndex);
+            }
+            shouldAlsoWrite = [];
+        }
+    }
+
+    var oObject = [];
+    for (var iIndex = 0; iIndex < shouldWrite.length; iIndex++) {
+        if (Property.getNode(shouldWrite[iIndex] + '/newvalue') != null) {
+            var deviceIndex = Property.getProperty(shouldWrite[iIndex] + '/deviceIndex');
+            var bank = Property.getProperty(shouldWrite[iIndex] + '/bank');
+            var index = Property.getProperty(shouldWrite[iIndex] + '/index');
+            var value = Property.getProperty(shouldWrite[iIndex] + '/newvalue');
+
+            lInfo.logln('Now write data at ' + shouldWrite[iIndex] + ' to ' + value);
+
+            var baseDSID = raisedEvent.parameter.dsid;
+            var baseIndex = Math.floor(parseInt(baseDSID.substring(baseDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+            var parentDSID = baseDSID.substring(0, baseDSID.length - 3);
+
+            var dSID = parentDSID + '' + (baseIndex + deviceIndex).toString(16) + '00';
+
+            Property.getNode(shouldWrite[iIndex]).removeChild('newvalue');
+
+            oObject.push({
+                type: 'write',
+                dsid: dSID,
+                bank: bank,
+                index: index,
+                value: value,
+                cachePath: shouldWrite[iIndex] + '/value',
+                meta: 'general'
+            });
+
+        }
+    }
+    for (var iIndex = 0; iIndex < shouldAlsoWrite.length; iIndex++) {
+
+        var baseDSID = raisedEvent.parameter.dsid;
+        var baseIndex = Math.floor(parseInt(baseDSID.substring(baseDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+        var parentDSID = baseDSID.substring(0, baseDSID.length - 3);
+
+        var dSID = parentDSID + '' + (baseIndex + shouldAlsoWrite[iIndex].deviceIndex).toString(16) + '00';
+
+        oObject.push({
+            type: 'write',
+            dsid: dSID,
+            bank: shouldAlsoWrite[iIndex].bank,
+            index: shouldAlsoWrite[iIndex].index,
+            value: shouldAlsoWrite[iIndex].value,
+            cachePath: '',
+            meta: 'nocache'
+        });
+    }
+    var baseDSID = raisedEvent.parameter.dsid;
+    var baseIndex = Math.floor(parseInt(baseDSID.substring(baseDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+    var parentDSID = baseDSID.substring(0, baseDSID.length - 3);
+    var updateDSID = parentDSID + '' + (baseIndex + 7).toString(16) + '00';
+
+    oObject.push({
+        type: 'write',
+        dsid: updateDSID,
+        bank: 127,
+        index: 0xD1,
+        value: 0x80,
+        cachePath: 'close updatescreen',
+        meta: 'nocache'
+    });
+
+    if (oObject.length === 0) {
+        new Event('ulux.saved', {}).raise();
+    } else {
+        oObject[oObject.length - 1].finishEvent = 'ulux.config';
+        oObject[oObject.length - 1].finishEventParameter = '{"actions":"finish"}';
+    }
+    return oObject;
 }
 
-function activateDynamicConfiguration() {
-	var baseDSID = raisedEvent.parameter.dsid;
-	var oObject=[{
-		type:'writeBitmask',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0,
-		bitmask: 0x10,
-		value: 0x10,
-		cachePath:'devices/'+baseDSID+'/generalSettings/ConfigFlagsLow/value',
-		forced:true
-	},{
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD1,
-		value:0x80,
-		cachePath:'update end',
-		meta:'nocache'
-	}];
-	return oObject;
+function activateDynamicConfiguration () {
+    var baseDSID = raisedEvent.parameter.dsid;
+    var oObject = [ {
+        type: 'writeBitmask',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0,
+        bitmask: 0x10,
+        value: 0x10,
+        cachePath: 'devices/' + baseDSID + '/generalSettings/ConfigFlagsLow/value',
+        forced: true
+    }, {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD1,
+        value: 0x80,
+        cachePath: 'update end',
+        meta: 'nocache'
+    } ];
+    return oObject;
 }
 
-function setTile(baseDSID,index,pageIndex,sortIndex,libraryID,dsidIndex,areaIndex,displayText,jokerCount,noFinish,buttonNr,clickType) {
-
-	var actDeviceIndex=Math.floor(pageIndex/2);
-	var baseIndex=((pageIndex%2) * 0x80) + (index * 0x20);
-	if (buttonNr==null)
-		buttonNr=0;
-	if (clickType==null)
-		clickType=0;
-	lInfo.logln(' --  setTile for page ' + pageIndex + ' tiles index ' + index + ' starting on dsid ' + actDeviceIndex + ' and memory offset ' + baseIndex);
-	var oObject=[{
-				type:'write',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex,
-				value: sortIndex,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index + '/SortIndex'
-			},{
-				type:'write',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 1,
-				value:libraryID,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/LibraryID'
-			},{
-				type:'writeNibble',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 2,
-				valueLow:dsidIndex,
-				valueHigh:areaIndex,
-				cachePathLow:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/dsidIndex',
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/AreaIndex'
-			},{
-				type:'writeNibble',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 3,
-				valueLow:clickType,
-				valueHigh:buttonNr,
-				cachePathLow:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/ClickType',
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/ButtonNumber'
-			},{
-				type:'writeTextBlock',
-				dsid:dsidFromIndex(baseDSID,actDeviceIndex),
-				bank:127,
-				index:baseIndex + 0x10,
-				textSel:selTextPage,
-				value:displayText,
-				cachePath:'devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/DisplayText',
-				length:displayText.length
-			}];
-
-  var areaID = getAreaIDFromAreaIndex(areaIndex);
-  lInfo.logln('Setting areaID directly to: ' + areaID);
-  Property.setProperty('devices/'+baseDSID+'/pages/' + pageIndex + '/' + index +'/AreaID', areaID);
-
-	if (libraryID==0x61) {
-		var maskValue=0;
-		if (jokerCount==6)
-			maskValue=1;
-		if (jokerCount==9)
-			maskValue=2;
-		if (jokerCount==12)
-			maskValue=3;
-		maskValue=maskValue<<(((dsidIndex-1)%4)*2);
-
-		if ((dsidIndex-1)>3)
-			oObject.push({
-				type:'writeBitmask',
-				dsid:dsidFromIndex(baseDSID,7),
-				bank:127,
-				index:0x07,
-				value:maskValue,
-				bitmask:3<<(((dsidIndex-1)%4)*2),
-				cachePath:'devices/'+baseDSID+'/generalSettings/JokerSubPageCountMaskHigh/value'
-			});
-		else
-			oObject.push({
-				type:'writeBitmask',
-				dsid:dsidFromIndex(baseDSID,7),
-				bank:127,
-				index:0x06,
-				value:maskValue,
-				bitmask:3<<(((dsidIndex-1)%4)*2),
-				cachePath:'devices/'+baseDSID+'/generalSettings/JokerSubPageCountMaskLow/value'
-			});
-	}
-
-	if ((noFinish==null) || (noFinish==false))
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xD1,
-			value:0x80,
-			cachePath:'update end',
-			meta:'nocache'
-		});
-	return oObject;
+function setTile (baseDSID, index, pageIndex, sortIndex, libraryID, dsidIndex, areaIndex, displayText, jokerCount, noFinish, buttonNr, clickType) {
+
+    var actDeviceIndex = Math.floor(pageIndex / 2);
+    var baseIndex = ((pageIndex % 2) * 0x80) + (index * 0x20);
+    if (buttonNr == null) {
+        buttonNr = 0;
+    }
+    if (clickType == null) {
+        clickType = 0;
+    }
+    lInfo.logln(' --  setTile for page ' + pageIndex + ' tiles index ' + index + ' starting on dsid ' + actDeviceIndex + ' and memory offset ' + baseIndex);
+    var oObject = [ {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex,
+        value: sortIndex,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/SortIndex'
+    }, {
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 1,
+        value: libraryID,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/LibraryID'
+    }, {
+        type: 'writeNibble',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 2,
+        valueLow: dsidIndex,
+        valueHigh: areaIndex,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/dsidIndex',
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/AreaIndex'
+    }, {
+        type: 'writeNibble',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 3,
+        valueLow: clickType,
+        valueHigh: buttonNr,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/ClickType',
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/ButtonNumber'
+    }, {
+        type: 'writeTextBlock',
+        dsid: dsidFromIndex(baseDSID, actDeviceIndex),
+        bank: 127,
+        index: baseIndex + 0x10,
+        textSel: selTextPage,
+        value: displayText,
+        cachePath: 'devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/DisplayText',
+        length: displayText.length
+    } ];
+
+    var areaID = getAreaIDFromAreaIndex(areaIndex);
+    lInfo.logln('Setting areaID directly to: ' + areaID);
+    Property.setProperty('devices/' + baseDSID + '/pages/' + pageIndex + '/' + index + '/AreaID', areaID);
+
+    if (libraryID == 0x61) {
+        var maskValue = 0;
+        if (jokerCount == 6) {
+            maskValue = 1;
+        }
+        if (jokerCount == 9) {
+            maskValue = 2;
+        }
+        if (jokerCount == 12) {
+            maskValue = 3;
+        }
+        maskValue <<= (((dsidIndex - 1) % 4) * 2);
+
+        if ((dsidIndex - 1) > 3) {
+            oObject.push({
+                type: 'writeBitmask',
+                dsid: dsidFromIndex(baseDSID, 7),
+                bank: 127,
+                index: 0x07,
+                value: maskValue,
+                bitmask: 3 << (((dsidIndex - 1) % 4) * 2),
+                cachePath: 'devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskHigh/value'
+            });
+        } else {
+            oObject.push({
+                type: 'writeBitmask',
+                dsid: dsidFromIndex(baseDSID, 7),
+                bank: 127,
+                index: 0x06,
+                value: maskValue,
+                bitmask: 3 << (((dsidIndex - 1) % 4) * 2),
+                cachePath: 'devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskLow/value'
+            });
+        }
+    }
+
+    if ((noFinish == null) || (noFinish == false)) {
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xD1,
+            value: 0x80,
+            cachePath: 'update end',
+            meta: 'nocache'
+        });
+    }
+    return oObject;
 }
 
-function saveSceneLabel(baseDSID,dsidIndex,text,buttonNumber,clickType,sceneLabelIndex,noFinish,fSync,fSceneNameAlreadyDeterminated) {
-	lInfo.logln(' --  setSceneLabel for Index ' + sceneLabelIndex + ":"+dsidIndex+':'+buttonNumber+':'+clickType+':'+text);
-	text=unescape(text);
-	var oObject=[];
-	var textSel;
-	if (sceneLabelIndex<18) {
-		textSel=selTextScene1;
-	} else	if (sceneLabelIndex<36) {
-		textSel=selTextScene2;
-	} else if (sceneLabelIndex<54) {
-		textSel=selTextScene3;
-	} else {
-		textSel=selTextScene4;
-	}
-
-	if (fSync) {
-		if (!fSceneNameAlreadyDeterminated)
-			text=getSceneNameForSceneLabel(baseDSID,sceneLabelIndex,text);
-		Property.setSavedProperty('devices/'+baseDSID+'/scenes/' + sceneLabelIndex + '/sync',true);
-	} else {
-		Property.setSavedProperty('devices/'+baseDSID+'/scenes/' + sceneLabelIndex + '/sync',false);
-	}
-	oObject.push({
-		type:'writeTextBlock',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:(sceneLabelIndex%18)*14 + 2,
-		value:text,
-		cachePath:'devices/'+baseDSID+'/scenes/' + sceneLabelIndex +'/text',
-		textSel:textSel,
-		length:text.length
-	});
-
- 	oObject.push({
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:(sceneLabelIndex%18)*14,
-		value: dsidIndex,
-		textSel:textSel,
-		cachePath:'devices/'+baseDSID+'/scenes/' + sceneLabelIndex + '/dsidIndex'
-	});
-	oObject.push({
-		type:'writeNibble',
-		dsid:dsidFromIndex(baseDSID,6),
-		bank:127,
-		index:(sceneLabelIndex%18)*14 + 1,
-		valueLow:clickType,
-		valueHigh: buttonNumber,
-		textSel:textSel,
-		cachePathLow:'devices/'+baseDSID+'/scenes/' + sceneLabelIndex +'/ClickType',
-		cachePath:'devices/'+baseDSID+'/scenes/' + sceneLabelIndex +'/ButtonNumber'
-	});
-	if ((noFinish==null) || (noFinish==false))
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xD1,
-			value:0x80,
-			cachePath:'update end',
-			meta:'nocache',
-			finishEvent:'ulux.config',
-			finishEventParameter:'{"actions":"enrichDatastructure","dsid":"'+baseDSID+'"}'
-		});
-
-	return oObject;
+function saveSceneLabel (baseDSID, dsidIndex, text, buttonNumber, clickType, sceneLabelIndex, noFinish, fSync, fSceneNameAlreadyDeterminated) {
+    lInfo.logln(' --  setSceneLabel for Index ' + sceneLabelIndex + ':' + dsidIndex + ':' + buttonNumber + ':' + clickType + ':' + text);
+    text = unescape(text);
+    var oObject = [];
+    var textSel;
+    if (sceneLabelIndex < 18) {
+        textSel = selTextScene1;
+    } else if (sceneLabelIndex < 36) {
+        textSel = selTextScene2;
+    } else if (sceneLabelIndex < 54) {
+        textSel = selTextScene3;
+    } else {
+        textSel = selTextScene4;
+    }
+
+    if (fSync) {
+        if (!fSceneNameAlreadyDeterminated) {
+            text = getSceneNameForSceneLabel(baseDSID, sceneLabelIndex, text);
+        }
+        Property.setSavedProperty('devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/sync', true);
+    } else {
+        Property.setSavedProperty('devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/sync', false);
+    }
+    oObject.push({
+        type: 'writeTextBlock',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: (sceneLabelIndex % 18) * 14 + 2,
+        value: text,
+        cachePath: 'devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/text',
+        textSel: textSel,
+        length: text.length
+    });
+
+    oObject.push({
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: (sceneLabelIndex % 18) * 14,
+        value: dsidIndex,
+        textSel: textSel,
+        cachePath: 'devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/dsidIndex'
+    });
+    oObject.push({
+        type: 'writeNibble',
+        dsid: dsidFromIndex(baseDSID, 6),
+        bank: 127,
+        index: (sceneLabelIndex % 18) * 14 + 1,
+        valueLow: clickType,
+        valueHigh: buttonNumber,
+        textSel: textSel,
+        cachePathLow: 'devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/ClickType',
+        cachePath: 'devices/' + baseDSID + '/scenes/' + sceneLabelIndex + '/ButtonNumber'
+    });
+    if ((noFinish == null) || (noFinish == false)) {
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xD1,
+            value: 0x80,
+            cachePath: 'update end',
+            meta: 'nocache',
+            finishEvent: 'ulux.config',
+            finishEventParameter: '{"actions":"enrichDatastructure","dsid":"' + baseDSID + '"}'
+        });
+    }
+
+    return oObject;
 }
 
-function getSceneNumber(dsid,buttonNr,clickType) {
-//	var groupID=Property.getProperty('/apartment/zones/zone0/devices/' + dsid + '/button/activeGroup');
-	if (buttonNr==8)
-		return clickType;
-	if (buttonNr==9)
-		return clickType + 16;
-	if (buttonNr==10)
-		return clickType + 32;
-	if (buttonNr==11)
-		return clickType + 48;
-	if (buttonNr==12)
-		return clickType + 64;
-	if (buttonNr==13)
-		return clickType + 80;
-	if (buttonNr==14)
-		return clickType + 96;
-	return -1;
+function getSceneNumber (dsid, buttonNr, clickType) {
+//    var groupID=Property.getProperty('/apartment/zones/zone0/devices/' + dsid + '/button/activeGroup');
+    if (buttonNr == 8) {
+        return clickType;
+    }
+    if (buttonNr == 9) {
+        return clickType + 16;
+    }
+    if (buttonNr == 10) {
+        return clickType + 32;
+    }
+    if (buttonNr == 11) {
+        return clickType + 48;
+    }
+    if (buttonNr == 12) {
+        return clickType + 64;
+    }
+    if (buttonNr == 13) {
+        return clickType + 80;
+    }
+    if (buttonNr == 14) {
+        return clickType + 96;
+    }
+    return -1;
 }
 
-function enrichDataStructure() {
-	var baseDSID = raisedEvent.parameter.dsid;
-	// library type
-	var baseNode=Property.getNode('devices/'+baseDSID);
-	if (baseNode==null)
-		return;
-
-	var scenesArray=baseNode.getChild('scenes').getChildren();
-
-	for (var sIndex=0;sIndex<scenesArray.length;sIndex++) {
-		var sceneNode=scenesArray[sIndex];
-		var dsidIndex=sceneNode.getChild('dsidIndex').getValue();
-		var clickType=sceneNode.getChild('ClickType').getValue();
-		var buttonNr=sceneNode.getChild('ButtonNumber').getValue();
-		if (dsidIndex!=0)
-			if (buttonNr!=0)
-				if (clickType!=0)
-					Property.setSavedProperty(sceneNode.getPath() + "/presetNumber",getSceneNumber(dsidFromIndex(baseDSID,dsidIndex-1),buttonNr,clickType));
-	}
-
-	var ergArray=[];
-
-	var pagesNodeArray=baseNode.getChild('pages').getChildren();
-	for (var iIndex=0;iIndex<pagesNodeArray.length;iIndex++) {
-		//lInfo.logln('working on page ' + iIndex);
-
-		if (pagesNodeArray[iIndex].getChild('centerSymbolConfig')!=null)
-			Property.setSavedProperty(pagesNodeArray[iIndex].getPath()+"/centerSymbolType", getNameForCenterSymbolIndex(pagesNodeArray[iIndex].getChild('centerSymbolConfig').getValue()));
-
-		for (var jIndex=0;jIndex<4;jIndex++)
-			if (pagesNodeArray[iIndex].getChild("" + jIndex)!=null) {
-				//lInfo.logln('working on tile ' + jIndex);
-
-				var tilesNode=pagesNodeArray[iIndex].getChild("" + jIndex);
-				var libraryID=tilesNode.getChild('LibraryID').getValue();
-				Property.setSavedProperty(tilesNode.getPath() + "/LibraryType",getLibraryNameForID(libraryID));
-
-				var dsidIndex=tilesNode.getChild('dsidIndex').getValue();
-				var clickType=tilesNode.getChild('ClickType').getValue();
-				var buttonNr=tilesNode.getChild('ButtonNumber').getValue();
-				Property.setSavedProperty(tilesNode.getPath() + "/presetNumber",getSceneNumber(dsidFromIndex(baseDSID,dsidIndex-1),buttonNr,clickType));
-
-				var areaIndex=tilesNode.getChild('AreaIndex').getValue();
-				var groupID=Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID,dsidIndex-1) + '/button/activeGroup');
-				var buttonID=Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID,dsidIndex-1) + '/button/id');
-
-				tilesNode.removeChild('subtileTextReference');
-
-				if ([0x11,0x21,0x29,0x31,0x41,0x51,0x61,0x71,0x81,0x91,0xa1,0xb1].indexOf(libraryID) != -1) {
-					var subItemCount=3;
-				
-					if (groupID==8) {
-						var bitMask;
-						if (dsidIndex>4) {
-							bitMask=parseInt("" + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskHigh/value'),10);
-						} else
-							bitMask=parseInt("" + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskLow/value'),10);
-	
-						var bitShift=(parseInt("" + dsidIndex,10)-1);
-	
-						bitShift=bitShift%4;
-						bitShift*=2;
-	
-						subItemCount=(bitMask>>bitShift) & 0x3;
-						subItemCount=(subItemCount+1)*3;
-	
-						lInfo.logln('on joker device subitemCount ' + subItemCount + " based on bitMask " + bitMask + " dsidIndex " + dsidIndex + " bitshift " + bitShift);
-					} else {
-						Property.setSavedProperty(tilesNode.getPath() + "/AreaID",-1)
-						switch (buttonID) {
-							case 5:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",0)
-							break;
-							case 1:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",1)
-							break;
-							case 2:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",2)
-							break;
-							case 3:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",3)
-							break;
-							case 4:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",4)
-							break;
-							case 6:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",5)
-							break;
-							case 7:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",6)
-							break;
-							case 8:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",7)
-							break;
-							case 9:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",8)
-							break;
-							case 10:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",9)
-							break;
-							case 11:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",10)
-							break;
-							case 12:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",11)
-							break;
-							case 13:
-								Property.setSavedProperty(tilesNode.getPath() + "/AreaID",12)
-							break;
-						}
-					}
-					for (var kIndex=0;kIndex<subItemCount;kIndex++) {
-						var buttonNr;
-						var clickType;
-						if (groupID==8) {
-							Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/jokerIndex',kIndex+1);
-							buttonNr=8;
-							clickType=kIndex+1;
-						} else {
-							switch (areaIndex) {
-								case 0:
-									buttonNr=9;
-									clickType=kIndex+1;
-									break;
-								case 1:
-									buttonNr=9;
-									clickType=kIndex+4;
-									break;
-								case 2:
-									buttonNr=9;
-									clickType=kIndex+7;
-									break;
-								case 3:
-									buttonNr=9;
-									clickType=kIndex+10;
-									break;
-								case 4:
-									buttonNr=9;
-									clickType=kIndex+13;
-									break;
-							}
-						}
-						Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/presetNumber',getSceneNumber(dsidFromIndex(baseDSID,dsidIndex-1),buttonNr,clickType));
-	
-						var scenesArray=baseNode.getChild('scenes').getChildren();
-	
-						//lInfo.logln("Search now for dsidindex " + dsidIndex + " Clicktype " + clickType + " ButtonNumber " + buttonNr);
-						for (var sIndex=0;sIndex<scenesArray.length;sIndex++) {
-							var sceneNode=scenesArray[sIndex];
-							var dsidIndexScene=sceneNode.getChild('dsidIndex').getValue();
-							var clickTypeScene=sceneNode.getChild('ClickType').getValue();
-							var buttonNumberScene=sceneNode.getChild('ButtonNumber').getValue();
-							if (("" + dsidIndexScene)==("" + dsidIndex))
-								if ((""+buttonNumberScene)==(""+buttonNr))
-									if ((""+clickTypeScene)==(""+clickType)) {
-										Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/sceneIndex',sceneNode.getName());
-										sIndex=1000;
-									}
-						}
-						}
-				}
-						
-				if ([0x13,0x23,0x2b,0x33,0x43,0x53,0x62,0x73,0x85,0x95].indexOf(libraryID) != -1) {
-					var scenesArray=baseNode.getChild('scenes').getChildren();
-					for (var sIndex=0;sIndex<scenesArray.length;sIndex++) {
-						var sceneNode=scenesArray[sIndex];
-						var dsidIndexScene=sceneNode.getChild('dsidIndex').getValue();
-						var clickTypeScene=sceneNode.getChild('ClickType').getValue();
-						var buttonNumberScene=sceneNode.getChild('ButtonNumber').getValue();									
-						if (("" + dsidIndexScene)==("" + dsidIndex))
-							if ((""+buttonNumberScene)==(""+buttonNr))
-								if ((""+clickTypeScene)==(""+clickType)) {									
-									Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex',sceneNode.getName());
-									sIndex=1000;
-								}
-					}					
-				}				
-
-
-			}
-	}
-	var pagesNameNodeArray=baseNode.getChild('pagenames').getChildren();
-	for (var iIndex=0;iIndex<pagesNameNodeArray.length;iIndex++) {
-		//lInfo.logln('working on pagename ' + iIndex);
-		var pageIndex=pagesNameNodeArray[iIndex].getChild('PageIndex').getValue();
-		if (pageIndex!=0)
-			if ((pageIndex&0x0f)<15)
-				Property.setSavedProperty(baseNode.getPath() + "/pages/" + (pageIndex-1) + "/pageNameIndex",pagesNameNodeArray[iIndex].getName());
-	}
-	registerSpecialDevice();
-	lInfo.logln('Enriching ended');
-	Property.setSavedProperty(baseNode.getPath() + '/readoutFinished',Math.floor(new Date().getTime()/1000));
-	Property.store();
-
-	new Event('ulux.finish',{}).raise();
+function enrichDataStructure () {
+    var baseDSID = raisedEvent.parameter.dsid;
+    // library type
+    var baseNode = Property.getNode('devices/' + baseDSID);
+    if (baseNode == null) {
+        return;
+    }
+
+    var scenesArray = baseNode.getChild('scenes').getChildren();
+
+    for (var sIndex = 0; sIndex < scenesArray.length; sIndex++) {
+        var sceneNode = scenesArray[sIndex];
+        var dsidIndex = sceneNode.getChild('dsidIndex').getValue();
+        var clickType = sceneNode.getChild('ClickType').getValue();
+        var buttonNr = sceneNode.getChild('ButtonNumber').getValue();
+        if (dsidIndex != 0) {
+            if (buttonNr != 0) {
+                if (clickType != 0) {
+                    Property.setSavedProperty(sceneNode.getPath() + '/presetNumber', getSceneNumber(dsidFromIndex(baseDSID, dsidIndex - 1), buttonNr, clickType));
+                }
+            }
+        }
+    }
+
+    var ergArray = [];
+
+    var pagesNodeArray = baseNode.getChild('pages').getChildren();
+    for (var iIndex = 0; iIndex < pagesNodeArray.length; iIndex++) {
+        // lInfo.logln('working on page ' + iIndex);
+
+        if (pagesNodeArray[iIndex].getChild('centerSymbolConfig') != null) {
+            Property.setSavedProperty(
+                pagesNodeArray[iIndex].getPath() + '/centerSymbolType',
+                getNameForCenterSymbolIndex(pagesNodeArray[iIndex].getChild('centerSymbolConfig').getValue())
+            );
+        }
+
+        for (var jIndex = 0; jIndex < 4; jIndex++) {
+            if (pagesNodeArray[iIndex].getChild('' + jIndex) != null) {
+            // lInfo.logln('working on tile ' + jIndex);
+
+                var tilesNode = pagesNodeArray[iIndex].getChild('' + jIndex);
+                var libraryID = tilesNode.getChild('LibraryID').getValue();
+                Property.setSavedProperty(tilesNode.getPath() + '/LibraryType', getLibraryNameForID(libraryID));
+
+                var dsidIndex = tilesNode.getChild('dsidIndex').getValue();
+                var clickType = tilesNode.getChild('ClickType').getValue();
+                var buttonNr = tilesNode.getChild('ButtonNumber').getValue();
+                Property.setSavedProperty(tilesNode.getPath() + '/presetNumber', getSceneNumber(dsidFromIndex(baseDSID, dsidIndex - 1), buttonNr, clickType));
+
+                var areaIndex = tilesNode.getChild('AreaIndex').getValue();
+                var groupID = Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID, dsidIndex - 1) + '/button/activeGroup');
+                var buttonID = Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID, dsidIndex - 1) + '/button/id');
+
+                tilesNode.removeChild('subtileTextReference');
+
+                if ([ 0x11, 0x21, 0x29, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xa1, 0xb1 ].indexOf(libraryID) != -1) {
+                    var subItemCount = 3;
+
+                    if (groupID == 8) {
+                        var bitMask;
+                        if (dsidIndex > 4) {
+                            bitMask = parseInt('' + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskHigh/value'), 10);
+                        } else {
+                            bitMask = parseInt('' + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskLow/value'), 10);
+                        }
+
+                        var bitShift = (parseInt('' + dsidIndex, 10) - 1);
+
+                        bitShift %= 4;
+                        bitShift *= 2;
+
+                        subItemCount = (bitMask >> bitShift) & 0x3;
+                        subItemCount = (subItemCount + 1) * 3;
+
+                        lInfo.logln('on joker device subitemCount ' + subItemCount + ' based on bitMask ' + bitMask + ' dsidIndex ' + dsidIndex + ' bitshift ' + bitShift);
+                    } else {
+                        Property.setSavedProperty(tilesNode.getPath() + '/AreaID', -1);
+                        switch (buttonID) {
+                            case 5:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 0);
+                                break;
+                            case 1:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 1);
+                                break;
+                            case 2:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 2);
+                                break;
+                            case 3:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 3);
+                                break;
+                            case 4:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 4);
+                                break;
+                            case 6:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 5);
+                                break;
+                            case 7:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 6);
+                                break;
+                            case 8:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 7);
+                                break;
+                            case 9:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 8);
+                                break;
+                            case 10:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 9);
+                                break;
+                            case 11:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 10);
+                                break;
+                            case 12:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 11);
+                                break;
+                            case 13:
+                                Property.setSavedProperty(tilesNode.getPath() + '/AreaID', 12);
+                                break;
+                        }
+                    }
+                    for (var kIndex = 0; kIndex < subItemCount; kIndex++) {
+                        var buttonNr;
+                        var clickType;
+                        if (groupID == 8) {
+                            Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/jokerIndex', kIndex + 1);
+                            buttonNr = 8;
+                            clickType = kIndex + 1;
+                        } else {
+                            switch (areaIndex) {
+                                case 0:
+                                    buttonNr = 9;
+                                    clickType = kIndex + 1;
+                                    break;
+                                case 1:
+                                    buttonNr = 9;
+                                    clickType = kIndex + 4;
+                                    break;
+                                case 2:
+                                    buttonNr = 9;
+                                    clickType = kIndex + 7;
+                                    break;
+                                case 3:
+                                    buttonNr = 9;
+                                    clickType = kIndex + 10;
+                                    break;
+                                case 4:
+                                    buttonNr = 9;
+                                    clickType = kIndex + 13;
+                                    break;
+                            }
+                        }
+                        Property.setSavedProperty(
+                            tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/presetNumber', getSceneNumber(dsidFromIndex(baseDSID, dsidIndex - 1),
+                                buttonNr,
+                                clickType)
+                        );
+
+                        var scenesArray = baseNode.getChild('scenes').getChildren();
+
+                        // lInfo.logln("Search now for dsidindex " + dsidIndex + " Clicktype " + clickType + " ButtonNumber " + buttonNr);
+                        for (var sIndex = 0; sIndex < scenesArray.length; sIndex++) {
+                            var sceneNode = scenesArray[sIndex];
+                            var dsidIndexScene = sceneNode.getChild('dsidIndex').getValue();
+                            var clickTypeScene = sceneNode.getChild('ClickType').getValue();
+                            var buttonNumberScene = sceneNode.getChild('ButtonNumber').getValue();
+                            if (('' + dsidIndexScene) == ('' + dsidIndex)) {
+                                if (('' + buttonNumberScene) == ('' + buttonNr)) {
+                                    if (('' + clickTypeScene) == ('' + clickType)) {
+                                        Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/' + kIndex + '/sceneIndex', sceneNode.getName());
+                                        sIndex = 1000;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+
+                if ([ 0x13, 0x23, 0x2b, 0x33, 0x43, 0x53, 0x62, 0x73, 0x85, 0x95 ].indexOf(libraryID) != -1) {
+                    var scenesArray = baseNode.getChild('scenes').getChildren();
+                    for (var sIndex = 0; sIndex < scenesArray.length; sIndex++) {
+                        var sceneNode = scenesArray[sIndex];
+                        var dsidIndexScene = sceneNode.getChild('dsidIndex').getValue();
+                        var clickTypeScene = sceneNode.getChild('ClickType').getValue();
+                        var buttonNumberScene = sceneNode.getChild('ButtonNumber').getValue();
+                        if (('' + dsidIndexScene) == ('' + dsidIndex)) {
+                            if (('' + buttonNumberScene) == ('' + buttonNr)) {
+                                if (('' + clickTypeScene) == ('' + clickType)) {
+                                    Property.setSavedProperty(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex', sceneNode.getName());
+                                    sIndex = 1000;
+                                }
+                            }
+                        }
+                    }
+                }
+
+
+            }
+        }
+    }
+    var pagesNameNodeArray = baseNode.getChild('pagenames').getChildren();
+    for (var iIndex = 0; iIndex < pagesNameNodeArray.length; iIndex++) {
+        // lInfo.logln('working on pagename ' + iIndex);
+        var pageIndex = pagesNameNodeArray[iIndex].getChild('PageIndex').getValue();
+        if (pageIndex != 0) {
+            if ((pageIndex & 0x0f) < 15) { Property.setSavedProperty(baseNode.getPath() + '/pages/' + (pageIndex - 1) + '/pageNameIndex', pagesNameNodeArray[iIndex].getName()); }
+        }
+    }
+    registerSpecialDevice();
+    lInfo.logln('Enriching ended');
+    Property.setSavedProperty(baseNode.getPath() + '/readoutFinished', Math.floor(new Date().getTime() / 1000));
+    Property.store();
+
+    new Event('ulux.finish', {}).raise();
 }
 
-function registerSpecialDevice() {
-	if (Property.getNode('devices')==null)
-		return;
-	var ergDSID=[];
-	var ergArray=[];
-	var oBaseArray=Property.getNode('devices').getChildren();
-	for (var bIndex=0;bIndex<oBaseArray.length;bIndex++) {
-		var baseDSID=oBaseArray[bIndex].getName();
-		var baseNode=oBaseArray[bIndex];
-		
-		if (baseNode.getChild('pages')!=null) {
-			var pagesNodeArray=baseNode.getChild('pages').getChildren();
-			for (var iIndex=0;iIndex<pagesNodeArray.length;iIndex++) {
-	
-				for (var jIndex=0;jIndex<4;jIndex++)
-					if (pagesNodeArray[iIndex].getChild("" + jIndex)!=null) {
-						try {
-							var tilesNode=pagesNodeArray[iIndex].getChild("" + jIndex);
-							
-							
-							var libraryID=tilesNode.getChild('LibraryID').getValue();
-		
-							var dsidIndex=tilesNode.getChild('dsidIndex').getValue();
-		
-							var groupID=Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID,dsidIndex-1) + '/button/activeGroup');
-		
-							
-							var subItemCount=3;
-							
-							if (groupID==8) {
-								var bitMask;
-								if (dsidIndex>4) {
-									bitMask=parseInt("" + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskHigh/value'),10);
-								} else
-									bitMask=parseInt("" + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskLow/value'),10);
-								var bitShift=(parseInt("" + dsidIndex,10)-1);	
-								bitShift=bitShift%4;
-								bitShift*=2;	
-								subItemCount=(bitMask>>bitShift) & 0x3;
-								subItemCount=(subItemCount+1)*3;	
-							}
-							
-							if ((groupID==8) && (libraryID==0x61)) {
-								lInfo.logln('found a jokerentry on ' + tilesNode.getPath() + ' based on ' + baseDSID);
-								var subtileTextReference=Property.getNode(tilesNode.getPath() + '/subtileTextReference').getChildren();
-								var parameterArray=[];
-								for (var sIndex=0;sIndex<subItemCount;sIndex++) {
-									if (subtileTextReference[sIndex].getChild('sceneIndex')!=null) {
-										var sceneReference=subtileTextReference[sIndex].getChild('sceneIndex').getValue();
-										var jokerIndex=parseInt("" + subtileTextReference[sIndex].getChild('jokerIndex').getValue(),10);
-										var name=Utf8.decode(baseNode.getChild('scenes/' + sceneReference + '/text').getValue());
-										parameterArray.push({'id':(16 + jokerIndex),'name':{'de_DE':name}});
-									}
-								}
-		
-								if (ergArray[dsidFromIndex(baseDSID,dsidIndex-1)]==null)
-									ergArray[dsidFromIndex(baseDSID,dsidIndex-1)]=[];
-								
-								ergArray[dsidFromIndex(baseDSID,dsidIndex-1)]=ergArray[dsidFromIndex(baseDSID,dsidIndex-1)].concat(parameterArray);
-							}
-							if ((groupID==8) && (libraryID==0x62)) {
-								// joker special handling
-								if (Property.getNode(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex')!=null) {
-									var sceneReference=Property.getNode(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex').getValue();;
-									var jokerIndex=Property.getProperty(tilesNode.getPath() + '/presetNumber');
-									var name=Utf8.decode(baseNode.getChild('scenes/' + sceneReference + '/text').getValue());
-									
-									if (ergArray[dsidFromIndex(baseDSID,dsidIndex-1)]==null)
-										ergArray[dsidFromIndex(baseDSID,dsidIndex-1)]=[];
-									
-									ergArray[dsidFromIndex(baseDSID,dsidIndex-1)].push({'id':(16 + jokerIndex),'name':{'de_DE':name}});
-								}
-							}
-							
-						}
-						catch (e) {}
-					}
-			}
-		}
-		
-		
-	}
-	
-	var ergArray2=[];
-	for (var ergDSID in ergArray) {
-		lInfo.logln('special devices ' + ergDSID);
-		ergArray2.push({
-			dsid:ergDSID,
-			triggers:{
-				'device-action':ergArray[ergDSID]
-			}
-		});
-		
-	}
-	
-	new Event('system-addon-scene-responder.registerSpecialDSIDDevices',{
-		_context:'ulux',
-		values:JSON.stringify(ergArray2)
-	}).raise();
+function registerSpecialDevice () {
+    if (Property.getNode('devices') == null) { return; }
+    var ergDSID = [];
+    var ergArray = [];
+    var oBaseArray = Property.getNode('devices').getChildren();
+    for (var bIndex = 0; bIndex < oBaseArray.length; bIndex++) {
+        var baseDSID = oBaseArray[bIndex].getName();
+        var baseNode = oBaseArray[bIndex];
+
+        if (baseNode.getChild('pages') != null) {
+            var pagesNodeArray = baseNode.getChild('pages').getChildren();
+            for (var iIndex = 0; iIndex < pagesNodeArray.length; iIndex++) {
+
+                for (var jIndex = 0; jIndex < 4; jIndex++) {
+                    if (pagesNodeArray[iIndex].getChild('' + jIndex) != null) {
+                        try {
+                            var tilesNode = pagesNodeArray[iIndex].getChild('' + jIndex);
+
+
+                            var libraryID = tilesNode.getChild('LibraryID').getValue();
+
+                            var dsidIndex = tilesNode.getChild('dsidIndex').getValue();
+
+                            var groupID = Property.getProperty('/apartment/zones/zone0/devices/' + dsidFromIndex(baseDSID, dsidIndex - 1) + '/button/activeGroup');
+
+
+                            var subItemCount = 3;
+
+                            if (groupID == 8) {
+                                var bitMask;
+                                if (dsidIndex > 4) {
+                                    bitMask = parseInt('' + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskHigh/value'), 10);
+                                } else {
+                                    bitMask = parseInt('' + Property.getProperty('devices/' + baseDSID + '/generalSettings/JokerSubPageCountMaskLow/value'), 10);
+                                }
+                                var bitShift = (parseInt('' + dsidIndex, 10) - 1);
+                                bitShift %= 4;
+                                bitShift *= 2;
+                                subItemCount = (bitMask >> bitShift) & 0x3;
+                                subItemCount = (subItemCount + 1) * 3;
+                            }
+
+                            if ((groupID == 8) && (libraryID == 0x61)) {
+                                lInfo.logln('found a jokerentry on ' + tilesNode.getPath() + ' based on ' + baseDSID);
+                                var subtileTextReference = Property.getNode(tilesNode.getPath() + '/subtileTextReference').getChildren();
+                                var parameterArray = [];
+                                for (var sIndex = 0; sIndex < subItemCount; sIndex++) {
+                                    if (subtileTextReference[sIndex].getChild('sceneIndex') != null) {
+                                        var sceneReference = subtileTextReference[sIndex].getChild('sceneIndex').getValue();
+                                        var jokerIndex = parseInt('' + subtileTextReference[sIndex].getChild('jokerIndex').getValue(), 10);
+                                        var name = Utf8.decode(baseNode.getChild('scenes/' + sceneReference + '/text').getValue());
+                                        parameterArray.push({ id: (16 + jokerIndex), name: { de_DE: name } });
+                                    }
+                                }
+
+                                if (ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)] == null) { ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)] = []; }
+
+                                ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)] = ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)].concat(parameterArray);
+                            }
+                            if ((groupID == 8) && (libraryID == 0x62)) {
+                            // joker special handling
+                                if (Property.getNode(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex') != null) {
+                                    var sceneReference = Property.getNode(tilesNode.getPath() + '/subtileTextReference/0/sceneIndex').getValue();
+                                    var jokerIndex = Property.getProperty(tilesNode.getPath() + '/presetNumber');
+                                    var name = Utf8.decode(baseNode.getChild('scenes/' + sceneReference + '/text').getValue());
+
+                                    if (ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)] == null) { ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)] = []; }
+
+                                    ergArray[dsidFromIndex(baseDSID, dsidIndex - 1)].push({ id: (16 + jokerIndex), name: { de_DE: name } });
+                                }
+                            }
+
+                        } catch (e) {}
+                    }
+                }
+            }
+        }
+
+
+    }
+
+    var ergArray2 = [];
+    for (var ergDSID in ergArray) {
+        lInfo.logln('special devices ' + ergDSID);
+        ergArray2.push({
+            dsid: ergDSID,
+            triggers: {
+                'device-action': ergArray[ergDSID]
+            }
+        });
+
+    }
+
+    new Event('system-addon-scene-responder.registerSpecialDSIDDevices', {
+        _context: 'ulux',
+        values: JSON.stringify(ergArray2)
+    }).raise();
 }
 
-function setSound(baseDSID,soundName,duration,delay,volume,soundID,noFinish) {
-
-	if (soundName=='DoorBellSound0')
-		soundName='DoorBell0Sound';
-	if (soundName=='DoorBellSound1')
-		soundName='DoorBell1Sound';
-	if (soundName=='DoorBellSound2')
-		soundName='DoorBell2Sound';
-	if (soundName=='DoorBellSound3')
-		soundName='DoorBell3Sound';
-
-
-	lInfo.logln(' --  setSound for ' + soundName);
-
-	var oObject=[];
-
-	var baseIndex=findIndexForName(soundName + '_id',baseDSID);
-	lInfo.logln("found baseIndex "+ baseIndex);
-	if (baseIndex!=-1) {
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:baseIndex,
-			value: soundID,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundName + '_id/value'
-		});
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:baseIndex+1,
-			value: volume,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundName + '_volume/value'
-		});
-		oObject.push({
-			type:'writeWord',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:baseIndex+2,
-			value: duration,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundName + '_duration/value'
-		});
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:baseIndex+4,
-			value: delay,
-			cachePath:'devices/'+baseDSID+'/generalSettings/' + soundName + '_delay/value'
-		});
-		if (!noFinish)
-			oObject.push({
-				type:'write',
-				dsid:dsidFromIndex(baseDSID,7),
-				bank:127,
-				index:0xD1,
-				value:0x80,
-				cachePath:'update end',
-				meta:'nocache'
-			});
-	}
-	return oObject;
+function setSound (baseDSID, soundName, duration, delay, volume, soundID, noFinish) {
+
+    if (soundName === 'DoorBellSound0') {
+        soundName = 'DoorBell0Sound';
+    }
+    if (soundName === 'DoorBellSound1') {
+        soundName = 'DoorBell1Sound';
+    }
+    if (soundName === 'DoorBellSound2') {
+        soundName = 'DoorBell2Sound';
+    }
+    if (soundName === 'DoorBellSound3') {
+        soundName = 'DoorBell3Sound';
+    }
+
+
+    lInfo.logln(' --  setSound for ' + soundName);
+
+    var oObject = [];
+
+    var baseIndex = findIndexForName(soundName + '_id', baseDSID);
+    lInfo.logln('found baseIndex ' + baseIndex);
+    if (baseIndex != -1) {
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: baseIndex,
+            value: soundID,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundName + '_id/value'
+        });
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: baseIndex + 1,
+            value: volume,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundName + '_volume/value'
+        });
+        oObject.push({
+            type: 'writeWord',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: baseIndex + 2,
+            value: duration,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundName + '_duration/value'
+        });
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: baseIndex + 4,
+            value: delay,
+            cachePath: 'devices/' + baseDSID + '/generalSettings/' + soundName + '_delay/value'
+        });
+        if (!noFinish) {
+            oObject.push({
+                type: 'write',
+                dsid: dsidFromIndex(baseDSID, 7),
+                bank: 127,
+                index: 0xD1,
+                value: 0x80,
+                cachePath: 'update end',
+                meta: 'nocache'
+            });
+        }
+    }
+    return oObject;
 }
 
-function getLTNumGrpFromAreaID(areaID) {
-	switch (areaID) {
-		case 0:
-			return 5;
-			break;
-		case 1:
-			return 1;
-			break;
-		case 2:
-			return 2;
-			break;
-		case 3:
-			return 3;
-			break;
-		case 4:
-			return 4;
-			break;
-		case 5:
-			return 6;
-		case 6:
-			return 7;
-		case 7:
-			return 8;
-		case 8:
-			return 9;
-		case 9:
-			return 10;
-		case 10:
-			return 11;
-		case 11:
-			return 12;
-		case 12:
-			return 13;
-		break;
-	}
-	return 5;
+function getLTNumGrpFromAreaID (areaID) {
+    switch (areaID) {
+        case 0:
+            return 5;
+            break;
+        case 1:
+            return 1;
+            break;
+        case 2:
+            return 2;
+            break;
+        case 3:
+            return 3;
+            break;
+        case 4:
+            return 4;
+            break;
+        case 5:
+            return 6;
+        case 6:
+            return 7;
+        case 7:
+            return 8;
+        case 8:
+            return 9;
+        case 9:
+            return 10;
+        case 10:
+            return 11;
+        case 11:
+            return 12;
+        case 12:
+            return 13;
+            break;
+    }
+    return 5;
 }
 
-function getAreaIndexFromAreaID(areaID) {
-	switch (areaID) {
-		case 0:
-			return 0;
-			break;
-		case 1:
-			return 5;
-			break;
-		case 2:
-			return 6;
-			break;
-		case 3:
-			return 7;
-			break;
-		case 4:
-			return 8;
-			break;
-		case 5:
-			return 9;
-			break;
-		case 6:
-			return 10;
-			break;
-		case 7:
-			return 11;
-			break;
-		case 8:
-			return 12;
-			break;
-		case 9:
-			return 1;
-			break;
-		case 10:
-			return 2;
-			break;
-		case 11:
-			return 3;
-			break;
-		case 12:
-			return 4;
-			break;
-	}
-	return 0;
+function getAreaIndexFromAreaID (areaID) {
+    switch (areaID) {
+        case 0:
+            return 0;
+            break;
+        case 1:
+            return 5;
+            break;
+        case 2:
+            return 6;
+            break;
+        case 3:
+            return 7;
+            break;
+        case 4:
+            return 8;
+            break;
+        case 5:
+            return 9;
+            break;
+        case 6:
+            return 10;
+            break;
+        case 7:
+            return 11;
+            break;
+        case 8:
+            return 12;
+            break;
+        case 9:
+            return 1;
+            break;
+        case 10:
+            return 2;
+            break;
+        case 11:
+            return 3;
+            break;
+        case 12:
+            return 4;
+            break;
+    }
+    return 0;
 }
 
-function getAreaIDFromAreaIndex(areaIndex) {
-	switch (areaIndex) {
-    case 0:
-      return 0;
-    case 1:
-      return 9;
-    case 2:
-      return 10;
-    case 3:
-      return 11;
-    case 4:
-      return 12;
-    case 5:
-      return 1;
-    case 6:
-      return 2;
-    case 7:
-      return 3;
-    case 8:
-      return 4;
-    case 9:
-      return 5;
-    case 10:
-      return 6;
-    case 11:
-      return 7;
-    case 12:
-      return 8;
-  }
-	return 0;
+function getAreaIDFromAreaIndex (areaIndex) {
+    switch (areaIndex) {
+        case 0:
+            return 0;
+        case 1:
+            return 9;
+        case 2:
+            return 10;
+        case 3:
+            return 11;
+        case 4:
+            return 12;
+        case 5:
+            return 1;
+        case 6:
+            return 2;
+        case 7:
+            return 3;
+        case 8:
+            return 4;
+        case 9:
+            return 5;
+        case 10:
+            return 6;
+        case 11:
+            return 7;
+        case 12:
+            return 8;
+    }
+    return 0;
 }
 
-function evaluateTileSetting() {
-	var baseDSID = raisedEvent.parameter.dsid;
-	var dataString= unescape(raisedEvent.parameter.configBlock);
-	var favoriteJokers=[];
-	var oTargetDSIDArray=[];
-	var oTargetTileArray=[];
-	var oTargetSublabels=[];
-	var oTargetCenterArray=[];
-	var oTargetErrornousTilesToLessDSID=[];
-	var oTargetErrornousTilesWrongZone=[];
-	var oTargetErrornousTilesNoPagesLeft=[];
-	var oTargetErrornousTilesToLessSceneNames=[];
-	var oTargetErrornousTilesWrongLibrary=[];
-	var oTargetErrornousCenterWrongZone=[];
-	var oTargetErrornousCenterOnInvisiblePage=[];
-	var oTargetErrornousCenterMissingText=[];
-	var oTargetErrornousTilesWrongClusterGroupType=[];
-	var oTargetErrornousTilesWrongCluster=[];
-	var oTargetErrornousMissingSceneIDOnPreset=[];
-	var	truncatedMainTexts = [];
-	var truncatedSceneLabels = [];
-	var truncatedCenterLabels = [];
-	var defaultZoneID=Property.getProperty("/apartment/zones/zone0/devices/" + baseDSID + "/ZoneID");
-	if (dataString!=null) {
-		var theObject=JSON.parse(dataString);
-
-		var selectedDSIDIndex=0;
-
-		theObject=theObject.sort(function sorter(a,b) {
-			if (a.sortIndex<b.sortIndex)
-				return -1;
-			if (a.sortIndex>b.sortIndex)
-				return 1;
-			return 0;
-		});
-		var firstJokerDSID=-1;
-		// 1. step determinate dsid
-		// 1.1. step put joker presets to dsid
-		// 1.2. fill null sceneIDs on joker presets with life
-		// 2. step determinate tiles
-		// 3. step determinate subtexts
-		// 3.1. step determinate mainTexts
-		
-		
-		//1.
-		for (var iIndex=0;iIndex<theObject.length;iIndex++) {
-			theObject[iIndex].selectedDSIDIndex=0;
-			var targetZone=0
-			theObject[iIndex].targetGroup=0;
-			var targetArea=parseInt('' + theObject[iIndex].areaID,10);
-			theObject[iIndex].targetAreaIndex=getAreaIndexFromAreaID(targetArea);			
-			theObject[iIndex].targetLibraryID=parseInt('' + getLibraryIDForName(theObject[iIndex].libraryType),10);
-
-			var targetLTNumGroup=getLTNumGrpFromAreaID(targetArea);
-			if ([0x61,0x62].indexOf(theObject[iIndex].targetLibraryID)!=-1)
-				targetLTNumGroup=15;
-			
-			
-			lInfo.logln(JSON.stringify(theObject[iIndex]));
-
-			if (theObject[iIndex].targetLibraryID==0)
-				oTargetErrornousTilesWrongLibrary.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-
-			// tiles with targets a zone -> determinate dsids needed
-			if ([7,8,9,
-				17,18,19,20,21,22,
-				33,34,35,36,37,38,
-				41,42,43,44,45,45,
-				49,50,51,
-				65,66,67,68,69,
-				81,82,83,84,85,
-				97, // joker preset should not need a dsid yet, will added after full determination of all other dsids
-				113,114,115,
-				129,130,131,132,0x85,
-				145,146,147,148,0x95,
-				161,162,163,164].indexOf(theObject[iIndex].targetLibraryID)!=-1)
-			{
-				lInfo.logln('determinate zone/dsid assigment');
-
-				var fStop=false;
-				if (theObject[iIndex].clusterID!=null) {
-					lInfo.logln('determinate cluster settings');
-					targetZone=defaultZoneID;
-					theObject[iIndex].targetGroup=theObject[iIndex].clusterID;
-
-					var applicationType=0;
-					if (Property.getNode('/apartment/zones/zone0/groups/group' + theObject[iIndex].clusterID + '/applicationType')!=null)
-						applicationType=Property.getNode('/apartment/zones/zone0/groups/group' + theObject[iIndex].clusterID + '/applicationType').getValue();
-
-					if (applicationType!=0) {
-						lInfo.logln('cluster existing as type '+ applicationType);
-						if (theObject[iIndex].groupID!=null) {
-							if (parseInt("" + theObject[iIndex].groupID,10)!=applicationType) {
-								oTargetErrornousTilesWrongClusterGroupType.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-								fStop=true;
-							}
-						}
-					} else {
-						oTargetErrornousTilesWrongCluster.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-						fStop=true;
-						lInfo.logln("wrong cluster number in tile number " + iIndex);
-					}
-				} else {
-					lInfo.logln('determinate group settings');
-					targetZone=theObject[iIndex].zoneID;
-					theObject[iIndex].targetGroup=theObject[iIndex].groupID;
-				}
-
-				if (!fStop) {
-					var fLocalPriorityNeeded=false;
-					if ([1,2,3,4,10,11,12,13].indexOf(targetLTNumGroup)!=-1) {
-						fLocalPriorityNeeded=true;
-						lInfo.logln('need local priority setting');
-						if (theObject[iIndex].localPriority==null) {
-							theObject[iIndex].localPriority=false;
-							lInfo.logln('local priority is missing, assuming "false"');
-						}
-
-					} else {
-						lInfo.logln('dont need local priority setting');
-					}
-
-
-					var fFoundDSID=false;
-					for (var jIndex=0;jIndex<oTargetDSIDArray.length;jIndex++) {
-						if (oTargetDSIDArray[jIndex].zoneID==targetZone)
-							if (oTargetDSIDArray[jIndex].groupID==theObject[iIndex].targetGroup) {
-								var fLTNumGroupMatch=true;
-								if ([0x11,0x12,0x21,0x22,0x29,0x2a,0x31,0x32,0x41,0x42,0x51,0x52,0x61,0x71,0x72].indexOf(theObject[iIndex].targetLibraryID)!=-1)
-									if (oTargetDSIDArray[jIndex].ltNumGroup!=targetLTNumGroup)
-										fLTNumGroupMatch=false;
-								if (fLocalPriorityNeeded) {
-									if (oTargetDSIDArray[jIndex].localPriority==null)
-										fLTNumGroupMatch=false;
-									else
-										if (oTargetDSIDArray[jIndex].localPriority!=theObject[iIndex].localPriority)
-											fLTNumGroupMatch=false;
-								}
-								if (fLTNumGroupMatch) {
-									lInfo.logln('found a existing entry, reuse ' +  JSON.stringify(oTargetDSIDArray[jIndex]));
-									fFoundDSID=true;
-									theObject[iIndex].selectedDSIDIndex=oTargetDSIDArray[jIndex].dsidIndex;
-								}
-							}
-					}
-					if (!fFoundDSID) {
-						lInfo.logln('not found a dsid');
-						if (oTargetDSIDArray.length<maxDSIDCount) {
-							if (theObject[iIndex].targetLibraryID==0x61) {
-								//joker handling
-								if (oTargetDSIDArray.length>0)
-									targetZone=oTargetDSIDArray[0].zoneID;
-								else
-									targetZone=Property.getProperty("/apartment/zones/zone0/devices/" + baseDSID + "/ZoneID");
-							}
-							if (Property.getNode("/apartment/zones/zone" + targetZone)==null) {
-								oTargetErrornousTilesWrongZone.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-							} else {
-								theObject[iIndex].selectedDSIDIndex=oTargetDSIDArray.length;
-								var theObjectToAdd={zoneID:targetZone,groupID:theObject[iIndex].targetGroup,ltNumGroup:targetLTNumGroup,dsidIndex:theObject[iIndex].selectedDSIDIndex};
-								if (fLocalPriorityNeeded)
-									theObjectToAdd.localPriority=theObject[iIndex].localPriority;
-								oTargetDSIDArray.push(theObjectToAdd);
-								lInfo.logln('add new entry, use now ' +  JSON.stringify(oTargetDSIDArray[theObject[iIndex].selectedDSIDIndex]));
-							}
-						} else {
-							oTargetErrornousTilesToLessDSID.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-						}
-					}
-				}
-			}
-			
-			if (theObject[iIndex].targetLibraryID==0x61) {
-				lInfo.logln('found a jokerDSID, so try to reuse it' + theObject[iIndex].selectedDSIDIndex);
-				firstJokerDSID=theObject[iIndex].selectedDSIDIndex;
-			}
-			
-			if ([177,178,179,180,0xb5].indexOf(theObject[iIndex].targetLibraryID)!=-1) {
-				// apartment ventilation
-				theObject[iIndex].targetAreaIndex=0;
-
-				var fFoundDSID=false;
-				for (var jIndex=0;jIndex<oTargetDSIDArray.length;jIndex++) {
-					if (oTargetDSIDArray[jIndex].groupID==64) {
-						lInfo.logln('found a existing entry, reuse ' +  JSON.stringify(oTargetDSIDArray[jIndex]));
-						fFoundDSID=true;
-						theObject[iIndex].selectedDSIDIndex=oTargetDSIDArray[jIndex].dsidIndex;
-					}
-				}
-				if (!fFoundDSID) {
-					lInfo.logln('not found a dsid');
-					if (oTargetDSIDArray.length<maxDSIDCount) {
-						theObject[iIndex].selectedDSIDIndex=oTargetDSIDArray.length;
-						var theObjectToAdd={zoneID:oTargetDSIDArray[0].zoneID,groupID:64,ltNumGroup:5,dsidIndex:theObject[iIndex].selectedDSIDIndex};
-						oTargetDSIDArray.push(theObjectToAdd);
-						lInfo.logln('add new entry, use now ' +  JSON.stringify(oTargetDSIDArray[selectedDSIDIndex]));
-					} else {
-						oTargetErrornousTilesToLessDSID.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-					}
-				}
-
-
-			}
-			if ([193,194,195,196].indexOf(theObject[iIndex].targetLibraryID)!=-1) {
-				// apartment tiles, put to the first tile (hoping there is one)
-				theObject[iIndex].selectedDSIDIndex=0;
-				theObject[iIndex].targetAreaIndex=0;
-			}
-			lInfo.logln('!!SELEXTED DSID INDEX ' + theObject[iIndex].selectedDSIDIndex);
-			
-		}
-			
-		// 1.1
-		var existingJokerScenes=[];
-		for (var iIndex=0;iIndex<theObject.length;iIndex++) {
-			if (theObject[iIndex].targetLibraryID==0x62) {
-				if (firstJokerDSID==-1) {
-					lInfo.logln('need a joker dsid, but there is no. use the last dsid as Joker');
-					if (oTargetDSIDArray.length<maxDSIDCount) {
-						firstJokerDSID=7;
-						theObject[iIndex].selectedDSIDIndex=7;
-						var theObjectToAdd={zoneID:oTargetDSIDArray[0].zoneID,groupID:8,ltNumGroup:5,dsidIndex:7};
-						oTargetDSIDArray.push(theObjectToAdd);
-						lInfo.logln('add new entry, use now ' +  JSON.stringify(oTargetDSIDArray[oTargetDSIDArray.length-1]));
-					} else {
-						oTargetErrornousTilesToLessDSID.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-					}					
-				} else {
-					lInfo.logln('use existing jokerdsid #' + firstJokerDSID);
-					theObject[iIndex].selectedDSIDIndex=firstJokerDSID;
-				}
-				// joker preset
-				if (theObject[iIndex].sceneID!=null)
-					if (parseInt("" + theObject[iIndex].sceneID,10)>15)
-						existingJokerScenes.push(parseInt("" + theObject[iIndex].sceneID,10))
-			}
-		}
-	
-		// 1.2 
-		for (var iIndex=0;iIndex<theObject.length;iIndex++) {
-			if (theObject[iIndex].targetLibraryID==0x62) {
-				var fSkip=false;
-				if (theObject[iIndex].sceneID!=null)
-					if (parseInt("" + theObject[iIndex].sceneID,10)>15)
-						fSkip=true;
-				if (!fSkip) {
-					lInfo.logln('need a sceneID for ' + JSON.stringify(theObject[iIndex]));
-					var fFound=false;
-					for (var newSceneID=16;((newSceneID<127) && (!fFound));newSceneID++) {
-						if (existingJokerScenes.indexOf(newSceneID)==-1) {
-							lInfo.logln('found new sceneid '+ newSceneID);
-							theObject[iIndex].sceneID=newSceneID;
-							existingJokerScenes.push(newSceneID);
-							fFound=true;
-						}
-					}
-				}
-			}
-		}
-		
-		
-		// 2.
-		for (var iIndex=0;iIndex<theObject.length;iIndex++) {
-			selectedDSIDIndex=theObject[iIndex].selectedDSIDIndex;
-						
-			if (oTargetTileArray.length > (maxTilesCount - 2)) {
-				oTargetErrornousTilesNoPagesLeft.push({tilesIndex:iIndex,originalDefinition:theObject[iIndex]});
-			} else {
-				if (theObject.length>4) {
-					// need navigation
-					if ((oTargetTileArray.length % 4) == 3) {
-
-						oTargetTileArray.push({
-							page : Math.floor(oTargetTileArray.length/4),
-							index : 3,
-							dsidIndex : 1,
-							sortIndex : oTargetTileArray.length+1,
-							libraryID : 0x0d,
-							areaIndex : 0,
-							targetGroup : 0,
-							displayText : "",
-							dsid : baseDSID,
-							jokerCount:0
-						});
-					}
-				}
-				lInfo.logln(theObject[iIndex].targetLibraryID);
-				var jokerCount=0;
-				if (theObject[iIndex].targetLibraryID==0x61) {
-					if (theObject[iIndex].subText!=null) {
-						if (theObject[iIndex].subText.length<4)
-							jokerCount=3;
-						else if (theObject[iIndex].subText.length<7)
-							jokerCount=6;
-						else if (theObject[iIndex].subText.length<10)
-							jokerCount=9;
-						else
-							jokerCount=12;
-					}
-				}
-				
-				theObject[iIndex].mainText=unescape(theObject[iIndex].mainText);
-				if (theObject[iIndex].mainText.length>maxMainTextCount) {
-					var sString=theObject[iIndex].mainText;
-					sString=sString.substr(0,maxMainTextCount);
-					truncatedMainTexts.push({index:iIndex,oldText:theObject[iIndex].mainText,newText:sString});
-					theObject[iIndex].mainText=sString;
-				}
-				var buttonNumber=0;
-				var clickType=0;
-				if ([0x13,0x23,0x2b,0x33,0x43,0x53,0x73,0x85,0x95,0xb5].indexOf(theObject[iIndex].targetLibraryID)!=-1) {
-					// presets
-					if (theObject[iIndex].sceneID!=null) {
-						lInfo.logln('found a preset definition for scene ' + theObject[iIndex].sceneID);
-						buttonNumber=8 + (theObject[iIndex].sceneID>>4)&0x0f;
-						clickType=theObject[iIndex].sceneID&0x0f;
-												
-						var fSync=false;
-						var text="";
-						if (theObject[iIndex].subText!=null)
-							if (theObject[iIndex].subText.length>0) {
-								text=theObject[iIndex].subText[0].text;
-								if (theObject[iIndex].subText[0].sync!=null)
-									fSync=theObject[iIndex].subText[0].sync;
-							}
-						if (fSync)
-							text=getSceneNameForZoneGroup(theObject[iIndex].zoneID,theObject[iIndex].groupID,clickType,buttonNumber,text);
-
-						if (text.length>maxSceneLabelCount) {
-							var sString=text;
-							sString=sString.substr(0,maxSceneLabelCount);
-							errorObject={index:iIndex,oldText:text,newText:sString};
-							text=sString;
-						}
-
-						
-						var fFound=false;
-						for (var kIndex=0;kIndex<oTargetSublabels.length;kIndex++) {
-							if ((oTargetSublabels[kIndex].dsidIndex-1)==selectedDSIDIndex)
-								if (oTargetSublabels[kIndex].buttonNumber==buttonNr)
-									if (oTargetSublabels[kIndex].clickType==clickType) {
-										oTargetSublabels[kIndex].text=text;
-										if (errorObject!=null)
-											errorObject.index=kIndex;
-									}
-						}
-						if (!fFound) {
-							if (oTargetSublabels.length>=maxSceneLabelsCount) {
-								oTargetErrornousTilesToLessSceneNames.push({tileIndex:iIndex,textIndex:-1,originalDefinition:theObject[iIndex]});
-							} else {
-								if (errorObject!=null)
-									errorObject.index=oTargetSublabels.length;
-								oTargetSublabels.push({
-									index:oTargetSublabels.length,
-									dsidIndex:selectedDSIDIndex+1,
-									buttonNumber:buttonNumber,
-									clickType:clickType,
-									text:text,
-									sync:fSync
-								});
-							}
-						}
-						if (errorObject!=null)
-							truncatedSceneLabels.push(errorObject);
-
-					} else {
-						oTargetErrornousMissingSceneIDOnPreset.push(theObject[iIndex]);
-					}
-					
-				}
-				
-				// joker preset
-				if ([0x62].indexOf(theObject[iIndex].targetLibraryID)!=-1) {
-					if (theObject[iIndex].sceneID==null) {
-						
-					}
-					// presets
-					if (theObject[iIndex].sceneID!=null) {
-						lInfo.logln('found a preset definition for scene ' + theObject[iIndex].sceneID);
-						buttonNumber=8 + (theObject[iIndex].sceneID>>4)&0x0f;
-						clickType=theObject[iIndex].sceneID&0x0f;
-												
-						var fSync=false;
-						if (theObject[iIndex].fSync!=null)
-							fSync=theObject[iIndex].fSync;
-						var text=theObject[iIndex].mainText;
-						if (theObject[iIndex].subText!=null)
-							if (theObject[iIndex].subText.length>0)
-								text=theObject[iIndex].subText[0].text;
-						if (fSync)
-							text=getSceneNameForZoneGroup(theObject[iIndex].zoneID,theObject[iIndex].groupID,clickType,buttonNumber,text);
-
-						if (text.length>maxSceneLabelCount) {
-							var sString=text;
-							sString=sString.substr(0,maxSceneLabelCount);
-							errorObject={index:iIndex,oldText:text,newText:sString};
-							text=sString;
-						}
-
-												
-						var fFound=false;
-						lInfo.logln('seach for dsid ' + selectedDSIDIndex + ' button ' + buttonNumber + ' clickType ' + clickType + ' text ' + text);
-						for (var kIndex=0;kIndex<oTargetSublabels.length;kIndex++) {
-							lInfo.logln('checking with ' + JSON.stringify(oTargetSublabels[kIndex]));
-							if ((oTargetSublabels[kIndex].dsidIndex-1)==selectedDSIDIndex)
-								if (oTargetSublabels[kIndex].buttonNumber==buttonNumber)
-									if (oTargetSublabels[kIndex].clickType==clickType) {
-										oTargetSublabels[kIndex].text=text;
-										if (errorObject!=null)
-											errorObject.index=kIndex;
-									}
-						}
-						if (!fFound) {
-							if (oTargetSublabels.length>=maxSceneLabelsCount) {
-								oTargetErrornousTilesToLessSceneNames.push({tileIndex:iIndex,textIndex:-1,originalDefinition:theObject[iIndex]});
-							} else {
-								if (errorObject!=null)
-									errorObject.index=oTargetSublabels.length;
-								oTargetSublabels.push({
-									index:oTargetSublabels.length,
-									dsidIndex:selectedDSIDIndex+1,
-									buttonNumber:buttonNumber,
-									clickType:clickType,
-									text:text,
-									sync:fSync
-								});
-							}
-						}
-						if (errorObject!=null)
-							truncatedSceneLabels.push(errorObject);
-
-					}
-				}
-				oTargetTileArray.push({
-					page : Math.floor(oTargetTileArray.length/4),
-					index : (oTargetTileArray.length%4),
-					dsidIndex : selectedDSIDIndex+1,
-					sortIndex : oTargetTileArray.length+1,
-					libraryID : theObject[iIndex].targetLibraryID,
-					areaIndex : theObject[iIndex].targetAreaIndex,
-					targetGroup : theObject[iIndex].targetGroup,
-					displayText : theObject[iIndex].mainText,
-					dsid : baseDSID,
-					jokerCount:jokerCount,
-					buttonNumber:buttonNumber,
-					clickType:clickType
-				});
-			}
-
-			
-			// tiles with submenu
-			if ([17,33,41,49,65,81,97,113].indexOf(theObject[iIndex].targetLibraryID)!=-1)
-			{
-				lInfo.logln("found subTexts");
-
-				if (theObject[iIndex].subText!=null) {
-					var subtextLength=3;
-					if (theObject[iIndex].targetLibraryID==0x61) 
-						subtextLength=theObject[iIndex].subText.length;
-					
-					for (var jIndex=0;jIndex<subtextLength;jIndex++) {
-						var buttonNr=-1;
-						var clickType=-1;
-						var position=parseInt('' + theObject[iIndex].subText[jIndex].pos,10);
-						var text=theObject[iIndex].subText[jIndex].text;
-						text=unescape(text);
-						var fSync=false;
-						if (theObject[iIndex].subText[jIndex].sync!=null)
-							fSync=theObject[iIndex].subText[jIndex].sync;
-						lInfo.logln("pos: " + position + ' text: ' + text + ' targetAreaIndex ' + theObject[iIndex].targetAreaIndex + ' sync ' + fSync);
-						switch (theObject[iIndex].targetAreaIndex) {
-							case 5:
-							case 6:
-							case 7:
-							case 8:
-							case 0: {
-								if (theObject[iIndex].targetGroup==8) {
-									switch (position) {
-										case 0:
-											buttonNr=8;
-											clickType=1;
-											break;
-										case 1:
-											buttonNr=8;
-											clickType=2;
-											break;
-										case 2:
-											buttonNr=8;
-											clickType=3;
-											break;
-										case 3:
-											buttonNr=8;
-											clickType=4;
-											break;
-										case 4:
-											buttonNr=8;
-											clickType=5;
-											break;
-										case 5:
-											buttonNr=8;
-											clickType=6;
-											break;
-										case 6:
-											buttonNr=8;
-											clickType=7;
-											break;
-										case 7:
-											buttonNr=8;
-											clickType=8;
-											break;
-										case 8:
-											buttonNr=8;
-											clickType=9;
-											break;
-										case 9:
-											buttonNr=8;
-											clickType=10;
-											break;
-										case 10:
-											buttonNr=8;
-											clickType=11;
-											break;
-										case 11:
-											buttonNr=8;
-											clickType=12;
-											break;
-									}
-
-								} else
-									switch (position) {
-										case 0:
-											buttonNr=9;
-											clickType=1;
-											break;
-										case 1:
-											buttonNr=9;
-											clickType=2;
-											break;
-										case 2:
-											buttonNr=9;
-											clickType=3;
-											break;
-									}
-								break;
-							}
-							case 9:
-							case 1: {
-								switch (position) {
-									case 0:
-										buttonNr=9;
-										clickType=4;
-										break;
-									case 1:
-										buttonNr=9;
-										clickType=5;
-										break;
-									case 2:
-										buttonNr=9;
-										clickType=6;
-										break;
-								}
-								break;
-							}
-							case 10:
-							case 2: {
-								switch (position) {
-									case 0:
-										buttonNr=9;
-										clickType=7;
-										break;
-									case 1:
-										buttonNr=9;
-										clickType=8;
-										break;
-									case 2:
-										buttonNr=9;
-										clickType=9;
-										break;
-								}
-								break;
-							}
-							case 11:
-							case 3: {
-								switch (position) {
-									case 0:
-										buttonNr=9;
-										clickType=10;
-										break;
-									case 1:
-										buttonNr=9;
-										clickType=11;
-										break;
-									case 2:
-										buttonNr=9;
-										clickType=12;
-										break;
-								}
-								break;
-							}
-							case 12:
-							case 4: {
-								switch (position) {
-									case 0:
-										buttonNr=9;
-										clickType=13;
-										break;
-									case 1:
-										buttonNr=9;
-										clickType=14;
-										break;
-									case 2:
-										buttonNr=9;
-										clickType=15;
-										break;
-								}
-								break;
-							}
-						}
-
-						var errorObject=null;
-
-						if (fSync)
-							text=getSceneNameForZoneGroup(theObject[iIndex].zoneID,theObject[iIndex].groupID,clickType,buttonNr,text);
-
-						
-						if (text.length>maxSceneLabelCount) {
-							var sString=text;
-							sString=sString.substr(0,maxSceneLabelCount);
-							errorObject={index:iIndex,oldText:text,newText:sString};
-							text=sString;
-						}
-
-						
-						var fFound=false;
-						for (var kIndex=0;kIndex<oTargetSublabels.length;kIndex++) {							
-							if ((oTargetSublabels[kIndex].dsidIndex-1)==selectedDSIDIndex)
-								if (oTargetSublabels[kIndex].buttonNumber==buttonNr)
-									if (oTargetSublabels[kIndex].clickType==clickType) {
-										oTargetSublabels[kIndex].text=text;
-										if (errorObject!=null)
-											errorObject.index=kIndex;
-									}
-						}
-						if (!fFound) {
-							if (oTargetSublabels.length>=maxSceneLabelsCount) {
-								oTargetErrornousTilesToLessSceneNames.push({tileIndex:iIndex,textIndex:jIndex,originalDefinition:theObject[iIndex].subText[jIndex]});
-							} else {
-								if (errorObject!=null)
-									errorObject.index=oTargetSublabels.length;
-								oTargetSublabels.push({
-									index:oTargetSublabels.length,
-									dsidIndex:selectedDSIDIndex+1,
-									buttonNumber:buttonNr,
-									clickType:clickType,
-									text:text,
-									sync:fSync
-								});
-							}
-						}
-						if (errorObject!=null)
-							truncatedSceneLabels.push(errorObject);
-
-					}
-			}
-		}
-	}
-	}
-	if (oTargetTileArray.length>4) {
-		if (oTargetTileArray.length<maxTilesCount) {
-			while ((oTargetTileArray.length % 4)!=3) {
-				oTargetTileArray.push({
-					page : Math.floor(oTargetTileArray.length/4),
-					index : (oTargetTileArray.length % 4),
-					dsidIndex : 1,
-					sortIndex : oTargetTileArray.length+1,
-					libraryID : 0x01,
-					areaIndex : 0,
-					targetGroup : 0,
-					displayText : "",
-					dsid : baseDSID,
-					jokerCount:0
-				});
-			}
-		}
-		if (oTargetTileArray.length<maxTilesCount) {
-			if (oTargetTileArray.length>3) {
-				oTargetTileArray.push({
-					page : Math.floor(oTargetTileArray.length/4),
-					index : 3,
-					dsidIndex : 1,
-					sortIndex : oTargetTileArray.length+1,
-					libraryID : 0x0f,
-					areaIndex : 0,
-					targetGroup : 0,
-					displayText : "",
-					dsid : baseDSID,
-					jokerCount:0
-				});
-			} else {
-				oTargetTileArray.push({
-					page : Math.floor(oTargetTileArray.length/4),
-					index : (oTargetTileArray.length % 4),
-					dsidIndex : 1,
-					sortIndex : oTargetTileArray.length+1,
-					libraryID : 0x01,
-					areaIndex : 0,
-					targetGroup : 0,
-					displayText : "",
-					dsid : baseDSID,
-					jokerCount:0
-				});
-			}
-		}
-	} else {
-		while (oTargetTileArray.length <4) {
-			oTargetTileArray.push({
-				page : 0,
-				index : (oTargetTileArray.length % 4),
-				dsidIndex : 1,
-				sortIndex : oTargetTileArray.length+1,
-				libraryID : 0x01,
-				areaIndex : 0,
-				targetGroup : 0,
-				displayText : "",
-				dsid : baseDSID,
-				jokerCount:0
-			});
-		}
-	}
-
-	if (raisedEvent.parameter.configCenter!=null) {
-		var centerTile= unescape(raisedEvent.parameter.configCenter);
-		var pagesConfig=[];
-		if (centerTile!=null) {
-			var theObject=JSON.parse(centerTile);
-			for (var iIndex=0;iIndex<theObject.length;iIndex++) {
-				var fError=false;
-				var pageObject={
-					index:parseInt("" + theObject[iIndex].index,10),
-					type:getIndexForCenterSymbol(theObject[iIndex].type),
-					dsidIndex:1
-				};
-				if (theObject[iIndex].zoneID!=null) {
-					pageObject.dsidIndex=-1;
-					for (var jIndex=0;jIndex<oTargetDSIDArray.length;jIndex++) {
-						if (oTargetDSIDArray[jIndex].zoneID==theObject[iIndex].zoneID)
-							if (pageObject.dsidIndex==-1) {
-								pageObject.dsidIndex=oTargetDSIDArray[jIndex].dsidIndex;
-							}
-					}
-				}
-				if (pageObject.dsidIndex==-1) {
-					oTargetErrornousCenterWrongZone.push(theObject[iIndex]);
-					fError=true;
-				}
-				if (pageObject.type==5) {
-					if (theObject[iIndex].text!=null) {
-						var text=unescape(theObject[iIndex].text);
-						var errorObject=null;
-						if (text.length>maxCenterLengh) {
-							var sString=text;
-							sString=sString.substr(0,maxCenterLengh);
-							errorObject={index:iIndex,oldText:text,newText:sString};
-							text=sString;
-							truncatedCenterLabels.push(errorObject);
-						}
-
-						pageObject.text=text;
-					} else {
-						fError=true;
-						oTargetErrornousCenterMissingText.push(theObject[iIndex]);
-					}
-				}
-				var maxPagenumbers=Math.floor(oTargetTileArray.length/4);
-				if (pageObject.type!=0)
-					if (parseInt("" + theObject[iIndex].index,10)>=maxPagenumbers) {
-						fError=true;
-						oTargetErrornousCenterOnInvisiblePage.push(theObject[iIndex])
-					}
-
-				if (!fError)
-					oTargetCenterArray.push(pageObject);
-
-			}
-		}
-	}
-
-	
-	var summary={
-		tilesCount:oTargetTileArray.length,
-		dsidCount:oTargetDSIDArray.length,
-		labelsCount:oTargetSublabels.length,
-		tilesLeft:maxTilesCount-oTargetTileArray.length,
-		dsidLeft:maxDSIDCount-oTargetDSIDArray.length,
-		labelsLeft:maxSceneLabelsCount-oTargetSublabels.length,
-		errorNoSceneLabelsLeft:oTargetErrornousTilesToLessSceneNames,
-		errorNoDSIDLeft:oTargetErrornousTilesToLessDSID,
-		errorNoTilesLeft:oTargetErrornousTilesNoPagesLeft,
-		errorWrongLibraryType:oTargetErrornousTilesWrongLibrary,
-		errorWrongZone:oTargetErrornousTilesWrongZone,
-		truncatedMainTexts:truncatedMainTexts,
-		truncatedSceneLabels:truncatedSceneLabels,
-		truncatedCenterLabels:truncatedCenterLabels,
-		errorCenterWrongZone:oTargetErrornousCenterWrongZone,
-		errorCenterMissingText:oTargetErrornousCenterMissingText,
-		errorCenterOnInvisiblePage:oTargetErrornousCenterOnInvisiblePage,
-		errorWrongClusterGroupType:oTargetErrornousTilesWrongClusterGroupType,
-		errorMissingCluster:oTargetErrornousTilesWrongCluster,
-		errorMissingSceneIDOnPreset:oTargetErrornousMissingSceneIDOnPreset
-	};
-
-	while (oTargetTileArray.length < maxTilesCount) {
-		oTargetTileArray.push({
-			page : Math.floor(oTargetTileArray.length/4),
-			index : (oTargetTileArray.length % 4),
-			dsidIndex : 1,
-			sortIndex : oTargetTileArray.length+1,
-			libraryID : 0x00,
-			areaIndex : 0,
-			targetGroup : 0,
-			displayText : "",
-			dsid : baseDSID,
-			jokerCount:0
-		});
-	}
-
-	while (oTargetSublabels.length < maxSceneLabelsCount) {
-		oTargetSublabels.push({
-			index:oTargetSublabels.length,
-			dsidIndex:0,
-			buttonNumber:0,
-			clickType:0,
-			text:"",
-			sync:false
-		});
-	}
-
-	while (oTargetCenterArray.length<Math.floor(maxTilesCount/4)) {
-		oTargetCenterArray.push({
-			index:oTargetCenterArray.length,
-			type:0
-		});
-	}
-	lInfo.logln("summary: " + JSON.stringify(summary));
-	lInfo.logln("oTargetDSIDArray: " + JSON.stringify(oTargetDSIDArray));
-	lInfo.logln("oTargetTileArray: " + JSON.stringify(oTargetTileArray));
-	lInfo.logln("oTargetSublabels: " + JSON.stringify(oTargetSublabels));
-	lInfo.logln("oTargetCenterArray: " + JSON.stringify(oTargetCenterArray));
-
-	return {
-		summary:summary,
-		dsidConfig:oTargetDSIDArray,
-		tilesConfig:oTargetTileArray,
-		labelsConfig:oTargetSublabels,
-		centerConfig:oTargetCenterArray};
+function evaluateTileSetting () {
+    var baseDSID = raisedEvent.parameter.dsid;
+    var dataString = unescape(raisedEvent.parameter.configBlock);
+    var favoriteJokers = [];
+    var oTargetDSIDArray = [];
+    var oTargetTileArray = [];
+    var oTargetSublabels = [];
+    var oTargetCenterArray = [];
+    var oTargetErrornousTilesToLessDSID = [];
+    var oTargetErrornousTilesWrongZone = [];
+    var oTargetErrornousTilesNoPagesLeft = [];
+    var oTargetErrornousTilesToLessSceneNames = [];
+    var oTargetErrornousTilesWrongLibrary = [];
+    var oTargetErrornousCenterWrongZone = [];
+    var oTargetErrornousCenterOnInvisiblePage = [];
+    var oTargetErrornousCenterMissingText = [];
+    var oTargetErrornousTilesWrongClusterGroupType = [];
+    var oTargetErrornousTilesWrongCluster = [];
+    var oTargetErrornousMissingSceneIDOnPreset = [];
+    var truncatedMainTexts = [];
+    var truncatedSceneLabels = [];
+    var truncatedCenterLabels = [];
+    var defaultZoneID = Property.getProperty('/apartment/zones/zone0/devices/' + baseDSID + '/ZoneID');
+    if (dataString != null) {
+        var theObject = JSON.parse(dataString);
+
+        var selectedDSIDIndex = 0;
+
+        theObject = theObject.sort(function sorter (a, b) {
+            if (a.sortIndex < b.sortIndex) {
+                return -1;
+            }
+            if (a.sortIndex > b.sortIndex) {
+                return 1;
+            }
+            return 0;
+        });
+        var firstJokerDSID = -1;
+        // 1. step determinate dsid
+        // 1.1. step put joker presets to dsid
+        // 1.2. fill null sceneIDs on joker presets with life
+        // 2. step determinate tiles
+        // 3. step determinate subtexts
+        // 3.1. step determinate mainTexts
+
+
+        // 1.
+        for (var iIndex = 0; iIndex < theObject.length; iIndex++) {
+            theObject[iIndex].selectedDSIDIndex = 0;
+            var targetZone = 0;
+            theObject[iIndex].targetGroup = 0;
+            var targetArea = parseInt('' + theObject[iIndex].areaID, 10);
+            theObject[iIndex].targetAreaIndex = getAreaIndexFromAreaID(targetArea);
+            theObject[iIndex].targetLibraryID = parseInt('' + getLibraryIDForName(theObject[iIndex].libraryType), 10);
+
+            var targetLTNumGroup = getLTNumGrpFromAreaID(targetArea);
+            if ([ 0x61, 0x62 ].indexOf(theObject[iIndex].targetLibraryID) != -1) { targetLTNumGroup = 15; }
+
+
+            lInfo.logln(JSON.stringify(theObject[iIndex]));
+
+            if (theObject[iIndex].targetLibraryID == 0) {
+                oTargetErrornousTilesWrongLibrary.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+            }
+
+            // tiles with targets a zone -> determinate dsids needed
+            if ([ 7, 8, 9,
+                17, 18, 19, 20, 21, 22,
+                33, 34, 35, 36, 37, 38,
+                41, 42, 43, 44, 45, 45,
+                49, 50, 51,
+                65, 66, 67, 68, 69,
+                81, 82, 83, 84, 85,
+                97, // joker preset should not need a dsid yet, will added after full determination of all other dsids
+                113, 114, 115,
+                129, 130, 131, 132, 0x85,
+                145, 146, 147, 148, 0x95,
+                161, 162, 163, 164 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                lInfo.logln('determinate zone/dsid assigment');
+
+                var fStop = false;
+                if (theObject[iIndex].clusterID != null) {
+                    lInfo.logln('determinate cluster settings');
+                    targetZone = defaultZoneID;
+                    theObject[iIndex].targetGroup = theObject[iIndex].clusterID;
+
+                    var applicationType = 0;
+                    if (Property.getNode('/apartment/zones/zone0/groups/group' + theObject[iIndex].clusterID + '/applicationType') != null) {
+                        applicationType = Property.getNode('/apartment/zones/zone0/groups/group' + theObject[iIndex].clusterID + '/applicationType').getValue();
+                    }
+
+                    if (applicationType != 0) {
+                        lInfo.logln('cluster existing as type ' + applicationType);
+                        if (theObject[iIndex].groupID != null) {
+                            if (parseInt('' + theObject[iIndex].groupID, 10) != applicationType) {
+                                oTargetErrornousTilesWrongClusterGroupType.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                                fStop = true;
+                            }
+                        }
+                    } else {
+                        oTargetErrornousTilesWrongCluster.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                        fStop = true;
+                        lInfo.logln('wrong cluster number in tile number ' + iIndex);
+                    }
+                } else {
+                    lInfo.logln('determinate group settings');
+                    targetZone = theObject[iIndex].zoneID;
+                    theObject[iIndex].targetGroup = theObject[iIndex].groupID;
+                }
+
+                if (!fStop) {
+                    var fLocalPriorityNeeded = false;
+                    if ([ 1, 2, 3, 4, 10, 11, 12, 13 ].indexOf(targetLTNumGroup) != -1) {
+                        fLocalPriorityNeeded = true;
+                        lInfo.logln('need local priority setting');
+                        if (theObject[iIndex].localPriority == null) {
+                            theObject[iIndex].localPriority = false;
+                            lInfo.logln('local priority is missing, assuming "false"');
+                        }
+
+                    } else {
+                        lInfo.logln('dont need local priority setting');
+                    }
+
+
+                    var fFoundDSID = false;
+                    for (var jIndex = 0; jIndex < oTargetDSIDArray.length; jIndex++) {
+                        if (oTargetDSIDArray[jIndex].zoneID == targetZone) {
+                            if (oTargetDSIDArray[jIndex].groupID == theObject[iIndex].targetGroup) {
+                                var fLTNumGroupMatch = true;
+                                if ([ 0x11, 0x12, 0x21, 0x22, 0x29, 0x2a, 0x31, 0x32, 0x41, 0x42, 0x51, 0x52, 0x61, 0x71, 0x72 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                                    if (oTargetDSIDArray[jIndex].ltNumGroup != targetLTNumGroup) {
+                                        fLTNumGroupMatch = false;
+                                    }
+                                }
+                                if (fLocalPriorityNeeded) {
+                                    if (oTargetDSIDArray[jIndex].localPriority == null) {
+                                        fLTNumGroupMatch = false;
+                                    } else if (oTargetDSIDArray[jIndex].localPriority != theObject[iIndex].localPriority) {
+                                        fLTNumGroupMatch = false;
+                                    }
+                                }
+                                if (fLTNumGroupMatch) {
+                                    lInfo.logln('found a existing entry, reuse ' + JSON.stringify(oTargetDSIDArray[jIndex]));
+                                    fFoundDSID = true;
+                                    theObject[iIndex].selectedDSIDIndex = oTargetDSIDArray[jIndex].dsidIndex;
+                                }
+                            }
+                        }
+                    }
+                    if (!fFoundDSID) {
+                        lInfo.logln('not found a dsid');
+                        if (oTargetDSIDArray.length < maxDSIDCount) {
+                            if (theObject[iIndex].targetLibraryID == 0x61) {
+                                // joker handling
+                                if (oTargetDSIDArray.length > 0) {
+                                    targetZone = oTargetDSIDArray[0].zoneID;
+                                } else {
+                                    targetZone = Property.getProperty('/apartment/zones/zone0/devices/' + baseDSID + '/ZoneID');
+                                }
+                            }
+                            if (Property.getNode('/apartment/zones/zone' + targetZone) == null) {
+                                oTargetErrornousTilesWrongZone.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                            } else {
+                                theObject[iIndex].selectedDSIDIndex = oTargetDSIDArray.length;
+                                var theObjectToAdd = {
+                                    zoneID: targetZone,
+                                    groupID: theObject[iIndex].targetGroup,
+                                    ltNumGroup: targetLTNumGroup,
+                                    dsidIndex: theObject[iIndex].selectedDSIDIndex
+                                };
+                                if (fLocalPriorityNeeded) {
+                                    theObjectToAdd.localPriority = theObject[iIndex].localPriority;
+                                }
+                                oTargetDSIDArray.push(theObjectToAdd);
+                                lInfo.logln('add new entry, use now ' + JSON.stringify(oTargetDSIDArray[theObject[iIndex].selectedDSIDIndex]));
+                            }
+                        } else {
+                            oTargetErrornousTilesToLessDSID.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                        }
+                    }
+                }
+            }
+
+            if (theObject[iIndex].targetLibraryID == 0x61) {
+                lInfo.logln('found a jokerDSID, so try to reuse it' + theObject[iIndex].selectedDSIDIndex);
+                firstJokerDSID = theObject[iIndex].selectedDSIDIndex;
+            }
+
+            if ([ 177, 178, 179, 180, 0xb5 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                // apartment ventilation
+                theObject[iIndex].targetAreaIndex = 0;
+
+                var fFoundDSID = false;
+                for (var jIndex = 0; jIndex < oTargetDSIDArray.length; jIndex++) {
+                    if (oTargetDSIDArray[jIndex].groupID == 64) {
+                        lInfo.logln('found a existing entry, reuse ' + JSON.stringify(oTargetDSIDArray[jIndex]));
+                        fFoundDSID = true;
+                        theObject[iIndex].selectedDSIDIndex = oTargetDSIDArray[jIndex].dsidIndex;
+                    }
+                }
+                if (!fFoundDSID) {
+                    lInfo.logln('not found a dsid');
+                    if (oTargetDSIDArray.length < maxDSIDCount) {
+                        theObject[iIndex].selectedDSIDIndex = oTargetDSIDArray.length;
+                        var theObjectToAdd = { zoneID: oTargetDSIDArray[0].zoneID, groupID: 64, ltNumGroup: 5, dsidIndex: theObject[iIndex].selectedDSIDIndex };
+                        oTargetDSIDArray.push(theObjectToAdd);
+                        lInfo.logln('add new entry, use now ' + JSON.stringify(oTargetDSIDArray[selectedDSIDIndex]));
+                    } else {
+                        oTargetErrornousTilesToLessDSID.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                    }
+                }
+
+
+            }
+            if ([ 193, 194, 195, 196 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                // apartment tiles, put to the first tile (hoping there is one)
+                theObject[iIndex].selectedDSIDIndex = 0;
+                theObject[iIndex].targetAreaIndex = 0;
+            }
+            lInfo.logln('!!SELEXTED DSID INDEX ' + theObject[iIndex].selectedDSIDIndex);
+
+        }
+
+        // 1.1
+        var existingJokerScenes = [];
+        for (var iIndex = 0; iIndex < theObject.length; iIndex++) {
+            if (theObject[iIndex].targetLibraryID == 0x62) {
+                if (firstJokerDSID == -1) {
+                    lInfo.logln('need a joker dsid, but there is no. use the last dsid as Joker');
+                    if (oTargetDSIDArray.length < maxDSIDCount) {
+                        firstJokerDSID = 7;
+                        theObject[iIndex].selectedDSIDIndex = 7;
+                        var theObjectToAdd = { zoneID: oTargetDSIDArray[0].zoneID, groupID: 8, ltNumGroup: 5, dsidIndex: 7 };
+                        oTargetDSIDArray.push(theObjectToAdd);
+                        lInfo.logln('add new entry, use now ' + JSON.stringify(oTargetDSIDArray[oTargetDSIDArray.length - 1]));
+                    } else {
+                        oTargetErrornousTilesToLessDSID.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+                    }
+                } else {
+                    lInfo.logln('use existing jokerdsid #' + firstJokerDSID);
+                    theObject[iIndex].selectedDSIDIndex = firstJokerDSID;
+                }
+                // joker preset
+                if (theObject[iIndex].sceneID != null) {
+                    if (parseInt('' + theObject[iIndex].sceneID, 10) > 15) {
+                        existingJokerScenes.push(parseInt('' + theObject[iIndex].sceneID, 10));
+                    }
+                }
+            }
+        }
+
+        // 1.2
+        for (var iIndex = 0; iIndex < theObject.length; iIndex++) {
+            if (theObject[iIndex].targetLibraryID == 0x62) {
+                var fSkip = false;
+                if (theObject[iIndex].sceneID != null) {
+                    if (parseInt('' + theObject[iIndex].sceneID, 10) > 15) {
+                        fSkip = true;
+                    }
+                }
+                if (!fSkip) {
+                    lInfo.logln('need a sceneID for ' + JSON.stringify(theObject[iIndex]));
+                    var fFound = false;
+                    for (var newSceneID = 16; ((newSceneID < 127) && (!fFound)); newSceneID++) {
+                        if (existingJokerScenes.indexOf(newSceneID) == -1) {
+                            lInfo.logln('found new sceneid ' + newSceneID);
+                            theObject[iIndex].sceneID = newSceneID;
+                            existingJokerScenes.push(newSceneID);
+                            fFound = true;
+                        }
+                    }
+                }
+            }
+        }
+
+
+        // 2.
+        for (var iIndex = 0; iIndex < theObject.length; iIndex++) {
+            selectedDSIDIndex = theObject[iIndex].selectedDSIDIndex;
+
+            if (oTargetTileArray.length > (maxTilesCount - 2)) {
+                oTargetErrornousTilesNoPagesLeft.push({ tilesIndex: iIndex, originalDefinition: theObject[iIndex] });
+            } else {
+                if (theObject.length > 4) {
+                    // need navigation
+                    if ((oTargetTileArray.length % 4) == 3) {
+
+                        oTargetTileArray.push({
+                            page: Math.floor(oTargetTileArray.length / 4),
+                            index: 3,
+                            dsidIndex: 1,
+                            sortIndex: oTargetTileArray.length + 1,
+                            libraryID: 0x0d,
+                            areaIndex: 0,
+                            targetGroup: 0,
+                            displayText: '',
+                            dsid: baseDSID,
+                            jokerCount: 0
+                        });
+                    }
+                }
+                lInfo.logln(theObject[iIndex].targetLibraryID);
+                var jokerCount = 0;
+                if (theObject[iIndex].targetLibraryID == 0x61) {
+                    if (theObject[iIndex].subText != null) {
+                        if (theObject[iIndex].subText.length < 4) {
+                            jokerCount = 3;
+                        } else if (theObject[iIndex].subText.length < 7) {
+                            jokerCount = 6;
+                        } else if (theObject[iIndex].subText.length < 10) {
+                            jokerCount = 9;
+                        } else {
+                            jokerCount = 12;
+                        }
+                    }
+                }
+
+                theObject[iIndex].mainText = unescape(theObject[iIndex].mainText);
+                if (theObject[iIndex].mainText.length > maxMainTextCount) {
+                    var sString = theObject[iIndex].mainText;
+                    sString = sString.substr(0, maxMainTextCount);
+                    truncatedMainTexts.push({ index: iIndex, oldText: theObject[iIndex].mainText, newText: sString });
+                    theObject[iIndex].mainText = sString;
+                }
+                var buttonNumber = 0;
+                var clickType = 0;
+                if ([ 0x13, 0x23, 0x2b, 0x33, 0x43, 0x53, 0x73, 0x85, 0x95, 0xb5 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                    // presets
+                    if (theObject[iIndex].sceneID != null) {
+                        lInfo.logln('found a preset definition for scene ' + theObject[iIndex].sceneID);
+                        buttonNumber = 8 + (theObject[iIndex].sceneID >> 4) & 0x0f;
+                        clickType = theObject[iIndex].sceneID & 0x0f;
+
+                        var fSync = false;
+                        var text = '';
+                        if (theObject[iIndex].subText != null) {
+                            if (theObject[iIndex].subText.length > 0) {
+                                text = theObject[iIndex].subText[0].text;
+                                if (theObject[iIndex].subText[0].sync != null) {
+                                    fSync = theObject[iIndex].subText[0].sync;
+                                }
+                            }
+                        }
+                        if (fSync) {
+                            text = getSceneNameForZoneGroup(theObject[iIndex].zoneID, theObject[iIndex].groupID, clickType, buttonNumber, text);
+                        }
+
+                        if (text.length > maxSceneLabelCount) {
+                            var sString = text;
+                            sString = sString.substr(0, maxSceneLabelCount);
+                            errorObject = { index: iIndex, oldText: text, newText: sString };
+                            text = sString;
+                        }
+
+
+                        var fFound = false;
+                        for (var kIndex = 0; kIndex < oTargetSublabels.length; kIndex++) {
+                            if ((oTargetSublabels[kIndex].dsidIndex - 1) == selectedDSIDIndex) {
+                                if (oTargetSublabels[kIndex].buttonNumber == buttonNr) {
+                                    if (oTargetSublabels[kIndex].clickType == clickType) {
+                                        oTargetSublabels[kIndex].text = text;
+                                        if (errorObject != null) {
+                                            errorObject.index = kIndex;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        if (!fFound) {
+                            if (oTargetSublabels.length >= maxSceneLabelsCount) {
+                                oTargetErrornousTilesToLessSceneNames.push({ tileIndex: iIndex, textIndex: -1, originalDefinition: theObject[iIndex] });
+                            } else {
+                                if (errorObject != null) {
+                                    errorObject.index = oTargetSublabels.length;
+                                }
+                                oTargetSublabels.push({
+                                    index: oTargetSublabels.length,
+                                    dsidIndex: selectedDSIDIndex + 1,
+                                    buttonNumber: buttonNumber,
+                                    clickType: clickType,
+                                    text: text,
+                                    sync: fSync
+                                });
+                            }
+                        }
+                        if (errorObject != null) {
+                            truncatedSceneLabels.push(errorObject);
+                        }
+
+                    } else {
+                        oTargetErrornousMissingSceneIDOnPreset.push(theObject[iIndex]);
+                    }
+
+                }
+
+                // joker preset
+                if ([ 0x62 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                    if (theObject[iIndex].sceneID == null) {
+
+                    }
+                    // presets
+                    if (theObject[iIndex].sceneID != null) {
+                        lInfo.logln('found a preset definition for scene ' + theObject[iIndex].sceneID);
+                        buttonNumber = 8 + (theObject[iIndex].sceneID >> 4) & 0x0f;
+                        clickType = theObject[iIndex].sceneID & 0x0f;
+
+                        var fSync = false;
+                        if (theObject[iIndex].fSync != null) {
+                            fSync = theObject[iIndex].fSync;
+                        }
+                        var text = theObject[iIndex].mainText;
+                        if (theObject[iIndex].subText != null) {
+                            if (theObject[iIndex].subText.length > 0) {
+                                text = theObject[iIndex].subText[0].text;
+                            }
+                        }
+                        if (fSync) {
+                            text = getSceneNameForZoneGroup(theObject[iIndex].zoneID, theObject[iIndex].groupID, clickType, buttonNumber, text);
+                        }
+
+                        if (text.length > maxSceneLabelCount) {
+                            var sString = text;
+                            sString = sString.substr(0, maxSceneLabelCount);
+                            errorObject = { index: iIndex, oldText: text, newText: sString };
+                            text = sString;
+                        }
+
+
+                        var fFound = false;
+                        lInfo.logln('seach for dsid ' + selectedDSIDIndex + ' button ' + buttonNumber + ' clickType ' + clickType + ' text ' + text);
+                        for (var kIndex = 0; kIndex < oTargetSublabels.length; kIndex++) {
+                            lInfo.logln('checking with ' + JSON.stringify(oTargetSublabels[kIndex]));
+                            if ((oTargetSublabels[kIndex].dsidIndex - 1) == selectedDSIDIndex) {
+                                if (oTargetSublabels[kIndex].buttonNumber == buttonNumber) {
+                                    if (oTargetSublabels[kIndex].clickType == clickType) {
+                                        oTargetSublabels[kIndex].text = text;
+                                        if (errorObject != null) {
+                                            errorObject.index = kIndex;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        if (!fFound) {
+                            if (oTargetSublabels.length >= maxSceneLabelsCount) {
+                                oTargetErrornousTilesToLessSceneNames.push({ tileIndex: iIndex, textIndex: -1, originalDefinition: theObject[iIndex] });
+                            } else {
+                                if (errorObject != null) {
+                                    errorObject.index = oTargetSublabels.length;
+                                }
+                                oTargetSublabels.push({
+                                    index: oTargetSublabels.length,
+                                    dsidIndex: selectedDSIDIndex + 1,
+                                    buttonNumber: buttonNumber,
+                                    clickType: clickType,
+                                    text: text,
+                                    sync: fSync
+                                });
+                            }
+                        }
+                        if (errorObject != null) {
+                            truncatedSceneLabels.push(errorObject);
+                        }
+
+                    }
+                }
+                oTargetTileArray.push({
+                    page: Math.floor(oTargetTileArray.length / 4),
+                    index: (oTargetTileArray.length % 4),
+                    dsidIndex: selectedDSIDIndex + 1,
+                    sortIndex: oTargetTileArray.length + 1,
+                    libraryID: theObject[iIndex].targetLibraryID,
+                    areaIndex: theObject[iIndex].targetAreaIndex,
+                    targetGroup: theObject[iIndex].targetGroup,
+                    displayText: theObject[iIndex].mainText,
+                    dsid: baseDSID,
+                    jokerCount: jokerCount,
+                    buttonNumber: buttonNumber,
+                    clickType: clickType
+                });
+            }
+
+
+            // tiles with submenu
+            if ([ 17, 33, 41, 49, 65, 81, 97, 113 ].indexOf(theObject[iIndex].targetLibraryID) != -1) {
+                lInfo.logln('found subTexts');
+
+                if (theObject[iIndex].subText != null) {
+                    var subtextLength = 3;
+                    if (theObject[iIndex].targetLibraryID == 0x61) {
+                        subtextLength = theObject[iIndex].subText.length;
+                    }
+
+                    for (var jIndex = 0; jIndex < subtextLength; jIndex++) {
+                        var buttonNr = -1;
+                        var clickType = -1;
+                        var position = parseInt('' + theObject[iIndex].subText[jIndex].pos, 10);
+                        var text = theObject[iIndex].subText[jIndex].text;
+                        text = unescape(text);
+                        var fSync = false;
+                        if (theObject[iIndex].subText[jIndex].sync != null) {
+                            fSync = theObject[iIndex].subText[jIndex].sync;
+                        }
+                        lInfo.logln('pos: ' + position + ' text: ' + text + ' targetAreaIndex ' + theObject[iIndex].targetAreaIndex + ' sync ' + fSync);
+                        switch (theObject[iIndex].targetAreaIndex) {
+                            case 5:
+                            case 6:
+                            case 7:
+                            case 8:
+                            case 0: {
+                                if (theObject[iIndex].targetGroup == 8) {
+                                    switch (position) {
+                                        case 0:
+                                            buttonNr = 8;
+                                            clickType = 1;
+                                            break;
+                                        case 1:
+                                            buttonNr = 8;
+                                            clickType = 2;
+                                            break;
+                                        case 2:
+                                            buttonNr = 8;
+                                            clickType = 3;
+                                            break;
+                                        case 3:
+                                            buttonNr = 8;
+                                            clickType = 4;
+                                            break;
+                                        case 4:
+                                            buttonNr = 8;
+                                            clickType = 5;
+                                            break;
+                                        case 5:
+                                            buttonNr = 8;
+                                            clickType = 6;
+                                            break;
+                                        case 6:
+                                            buttonNr = 8;
+                                            clickType = 7;
+                                            break;
+                                        case 7:
+                                            buttonNr = 8;
+                                            clickType = 8;
+                                            break;
+                                        case 8:
+                                            buttonNr = 8;
+                                            clickType = 9;
+                                            break;
+                                        case 9:
+                                            buttonNr = 8;
+                                            clickType = 10;
+                                            break;
+                                        case 10:
+                                            buttonNr = 8;
+                                            clickType = 11;
+                                            break;
+                                        case 11:
+                                            buttonNr = 8;
+                                            clickType = 12;
+                                            break;
+                                    }
+
+                                } else {
+                                    switch (position) {
+                                        case 0:
+                                            buttonNr = 9;
+                                            clickType = 1;
+                                            break;
+                                        case 1:
+                                            buttonNr = 9;
+                                            clickType = 2;
+                                            break;
+                                        case 2:
+                                            buttonNr = 9;
+                                            clickType = 3;
+                                            break;
+                                    }
+                                }
+                                break;
+                            }
+                            case 9:
+                            case 1: {
+                                switch (position) {
+                                    case 0:
+                                        buttonNr = 9;
+                                        clickType = 4;
+                                        break;
+                                    case 1:
+                                        buttonNr = 9;
+                                        clickType = 5;
+                                        break;
+                                    case 2:
+                                        buttonNr = 9;
+                                        clickType = 6;
+                                        break;
+                                }
+                                break;
+                            }
+                            case 10:
+                            case 2: {
+                                switch (position) {
+                                    case 0:
+                                        buttonNr = 9;
+                                        clickType = 7;
+                                        break;
+                                    case 1:
+                                        buttonNr = 9;
+                                        clickType = 8;
+                                        break;
+                                    case 2:
+                                        buttonNr = 9;
+                                        clickType = 9;
+                                        break;
+                                }
+                                break;
+                            }
+                            case 11:
+                            case 3: {
+                                switch (position) {
+                                    case 0:
+                                        buttonNr = 9;
+                                        clickType = 10;
+                                        break;
+                                    case 1:
+                                        buttonNr = 9;
+                                        clickType = 11;
+                                        break;
+                                    case 2:
+                                        buttonNr = 9;
+                                        clickType = 12;
+                                        break;
+                                }
+                                break;
+                            }
+                            case 12:
+                            case 4: {
+                                switch (position) {
+                                    case 0:
+                                        buttonNr = 9;
+                                        clickType = 13;
+                                        break;
+                                    case 1:
+                                        buttonNr = 9;
+                                        clickType = 14;
+                                        break;
+                                    case 2:
+                                        buttonNr = 9;
+                                        clickType = 15;
+                                        break;
+                                }
+                                break;
+                            }
+                        }
+
+                        var errorObject = null;
+
+                        if (fSync) {
+                            text = getSceneNameForZoneGroup(theObject[iIndex].zoneID, theObject[iIndex].groupID, clickType, buttonNr, text);
+                        }
+
+
+                        if (text.length > maxSceneLabelCount) {
+                            var sString = text;
+                            sString = sString.substr(0, maxSceneLabelCount);
+                            errorObject = { index: iIndex, oldText: text, newText: sString };
+                            text = sString;
+                        }
+
+
+                        var fFound = false;
+                        for (var kIndex = 0; kIndex < oTargetSublabels.length; kIndex++) {
+                            if ((oTargetSublabels[kIndex].dsidIndex - 1) == selectedDSIDIndex) {
+                                if (oTargetSublabels[kIndex].buttonNumber == buttonNr) {
+                                    if (oTargetSublabels[kIndex].clickType == clickType) {
+                                        oTargetSublabels[kIndex].text = text;
+                                        if (errorObject != null) {
+                                            errorObject.index = kIndex;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        if (!fFound) {
+                            if (oTargetSublabels.length >= maxSceneLabelsCount) {
+                                oTargetErrornousTilesToLessSceneNames.push({ tileIndex: iIndex, textIndex: jIndex, originalDefinition: theObject[iIndex].subText[jIndex] });
+                            } else {
+                                if (errorObject != null) {
+                                    errorObject.index = oTargetSublabels.length;
+                                }
+                                oTargetSublabels.push({
+                                    index: oTargetSublabels.length,
+                                    dsidIndex: selectedDSIDIndex + 1,
+                                    buttonNumber: buttonNr,
+                                    clickType: clickType,
+                                    text: text,
+                                    sync: fSync
+                                });
+                            }
+                        }
+                        if (errorObject != null) {
+                            truncatedSceneLabels.push(errorObject);
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+    if (oTargetTileArray.length > 4) {
+        if (oTargetTileArray.length < maxTilesCount) {
+            while ((oTargetTileArray.length % 4) != 3) {
+                oTargetTileArray.push({
+                    page: Math.floor(oTargetTileArray.length / 4),
+                    index: (oTargetTileArray.length % 4),
+                    dsidIndex: 1,
+                    sortIndex: oTargetTileArray.length + 1,
+                    libraryID: 0x01,
+                    areaIndex: 0,
+                    targetGroup: 0,
+                    displayText: '',
+                    dsid: baseDSID,
+                    jokerCount: 0
+                });
+            }
+        }
+        if (oTargetTileArray.length < maxTilesCount) {
+            if (oTargetTileArray.length > 3) {
+                oTargetTileArray.push({
+                    page: Math.floor(oTargetTileArray.length / 4),
+                    index: 3,
+                    dsidIndex: 1,
+                    sortIndex: oTargetTileArray.length + 1,
+                    libraryID: 0x0f,
+                    areaIndex: 0,
+                    targetGroup: 0,
+                    displayText: '',
+                    dsid: baseDSID,
+                    jokerCount: 0
+                });
+            } else {
+                oTargetTileArray.push({
+                    page: Math.floor(oTargetTileArray.length / 4),
+                    index: (oTargetTileArray.length % 4),
+                    dsidIndex: 1,
+                    sortIndex: oTargetTileArray.length + 1,
+                    libraryID: 0x01,
+                    areaIndex: 0,
+                    targetGroup: 0,
+                    displayText: '',
+                    dsid: baseDSID,
+                    jokerCount: 0
+                });
+            }
+        }
+    } else {
+        while (oTargetTileArray.length < 4) {
+            oTargetTileArray.push({
+                page: 0,
+                index: (oTargetTileArray.length % 4),
+                dsidIndex: 1,
+                sortIndex: oTargetTileArray.length + 1,
+                libraryID: 0x01,
+                areaIndex: 0,
+                targetGroup: 0,
+                displayText: '',
+                dsid: baseDSID,
+                jokerCount: 0
+            });
+        }
+    }
+
+    if (raisedEvent.parameter.configCenter != null) {
+        var centerTile = unescape(raisedEvent.parameter.configCenter);
+        var pagesConfig = [];
+        if (centerTile != null) {
+            var theObject = JSON.parse(centerTile);
+            for (var iIndex = 0; iIndex < theObject.length; iIndex++) {
+                var fError = false;
+                var pageObject = {
+                    index: parseInt('' + theObject[iIndex].index, 10),
+                    type: getIndexForCenterSymbol(theObject[iIndex].type),
+                    dsidIndex: 1
+                };
+                if (theObject[iIndex].zoneID != null) {
+                    pageObject.dsidIndex = -1;
+                    for (var jIndex = 0; jIndex < oTargetDSIDArray.length; jIndex++) {
+                        if (oTargetDSIDArray[jIndex].zoneID == theObject[iIndex].zoneID) {
+                            if (pageObject.dsidIndex == -1) {
+                                pageObject.dsidIndex = oTargetDSIDArray[jIndex].dsidIndex;
+                            }
+                        }
+                    }
+                }
+                if (pageObject.dsidIndex == -1) {
+                    oTargetErrornousCenterWrongZone.push(theObject[iIndex]);
+                    fError = true;
+                }
+                if (pageObject.type == 5) {
+                    if (theObject[iIndex].text != null) {
+                        var text = unescape(theObject[iIndex].text);
+                        var errorObject = null;
+                        if (text.length > maxCenterLengh) {
+                            var sString = text;
+                            sString = sString.substr(0, maxCenterLengh);
+                            errorObject = { index: iIndex, oldText: text, newText: sString };
+                            text = sString;
+                            truncatedCenterLabels.push(errorObject);
+                        }
+
+                        pageObject.text = text;
+                    } else {
+                        fError = true;
+                        oTargetErrornousCenterMissingText.push(theObject[iIndex]);
+                    }
+                }
+                var maxPagenumbers = Math.floor(oTargetTileArray.length / 4);
+                if (pageObject.type != 0) {
+                    if (parseInt('' + theObject[iIndex].index, 10) >= maxPagenumbers) {
+                        fError = true;
+                        oTargetErrornousCenterOnInvisiblePage.push(theObject[iIndex]);
+                    }
+                }
+
+                if (!fError) {
+                    oTargetCenterArray.push(pageObject);
+                }
+
+            }
+        }
+    }
+
+
+    var summary = {
+        tilesCount: oTargetTileArray.length,
+        dsidCount: oTargetDSIDArray.length,
+        labelsCount: oTargetSublabels.length,
+        tilesLeft: maxTilesCount - oTargetTileArray.length,
+        dsidLeft: maxDSIDCount - oTargetDSIDArray.length,
+        labelsLeft: maxSceneLabelsCount - oTargetSublabels.length,
+        errorNoSceneLabelsLeft: oTargetErrornousTilesToLessSceneNames,
+        errorNoDSIDLeft: oTargetErrornousTilesToLessDSID,
+        errorNoTilesLeft: oTargetErrornousTilesNoPagesLeft,
+        errorWrongLibraryType: oTargetErrornousTilesWrongLibrary,
+        errorWrongZone: oTargetErrornousTilesWrongZone,
+        truncatedMainTexts: truncatedMainTexts,
+        truncatedSceneLabels: truncatedSceneLabels,
+        truncatedCenterLabels: truncatedCenterLabels,
+        errorCenterWrongZone: oTargetErrornousCenterWrongZone,
+        errorCenterMissingText: oTargetErrornousCenterMissingText,
+        errorCenterOnInvisiblePage: oTargetErrornousCenterOnInvisiblePage,
+        errorWrongClusterGroupType: oTargetErrornousTilesWrongClusterGroupType,
+        errorMissingCluster: oTargetErrornousTilesWrongCluster,
+        errorMissingSceneIDOnPreset: oTargetErrornousMissingSceneIDOnPreset
+    };
+
+    while (oTargetTileArray.length < maxTilesCount) {
+        oTargetTileArray.push({
+            page: Math.floor(oTargetTileArray.length / 4),
+            index: (oTargetTileArray.length % 4),
+            dsidIndex: 1,
+            sortIndex: oTargetTileArray.length + 1,
+            libraryID: 0x00,
+            areaIndex: 0,
+            targetGroup: 0,
+            displayText: '',
+            dsid: baseDSID,
+            jokerCount: 0
+        });
+    }
+
+    while (oTargetSublabels.length < maxSceneLabelsCount) {
+        oTargetSublabels.push({
+            index: oTargetSublabels.length,
+            dsidIndex: 0,
+            buttonNumber: 0,
+            clickType: 0,
+            text: '',
+            sync: false
+        });
+    }
+
+    while (oTargetCenterArray.length < Math.floor(maxTilesCount / 4)) {
+        oTargetCenterArray.push({
+            index: oTargetCenterArray.length,
+            type: 0
+        });
+    }
+    lInfo.logln('summary: ' + JSON.stringify(summary));
+    lInfo.logln('oTargetDSIDArray: ' + JSON.stringify(oTargetDSIDArray));
+    lInfo.logln('oTargetTileArray: ' + JSON.stringify(oTargetTileArray));
+    lInfo.logln('oTargetSublabels: ' + JSON.stringify(oTargetSublabels));
+    lInfo.logln('oTargetCenterArray: ' + JSON.stringify(oTargetCenterArray));
+
+    return { summary: summary,
+        dsidConfig: oTargetDSIDArray,
+        tilesConfig: oTargetTileArray,
+        labelsConfig: oTargetSublabels,
+        centerConfig: oTargetCenterArray };
 }
 
-function getIndexForCenterSymbol(name) {
-	lInfo.logln("getIndexForCenterSymbol for " + name);
-	switch (name) {
-		case 'smallAbsence': return 0; break;
-		case 'onlyAbsence': return 1; break;
-		case 'roomSensoric': return 2; break;
-		case 'outdoorSensoric': return 3; break;
-		case 'weatherSymbols': return 4; break;
-		case 'text': return 5; break;
-	}
-	return 15;
+function getIndexForCenterSymbol (name) {
+    lInfo.logln('getIndexForCenterSymbol for ' + name);
+    switch (name) {
+        case 'smallAbsence': return 0; break;
+        case 'onlyAbsence': return 1; break;
+        case 'roomSensoric': return 2; break;
+        case 'outdoorSensoric': return 3; break;
+        case 'weatherSymbols': return 4; break;
+        case 'text': return 5; break;
+    }
+    return 15;
 }
 
-function getNameForCenterSymbolIndex(index) {
-	switch (index) {
-		case 0: return 'smallAbsence'; break;
-		case 1: return 'onlyAbsence'; break;
-		case 2: return 'roomSensoric'; break;
-		case 3: return 'outdoorSensoric'; break;
-		case 4: return 'weatherSymbols'; break;
-		case 5: return 'text'; break;
-	}
-	return 'hidden';
+function getNameForCenterSymbolIndex (index) {
+    switch (index) {
+        case 0: return 'smallAbsence'; break;
+        case 1: return 'onlyAbsence'; break;
+        case 2: return 'roomSensoric'; break;
+        case 3: return 'outdoorSensoric'; break;
+        case 4: return 'weatherSymbols'; break;
+        case 5: return 'text'; break;
+    }
+    return 'hidden';
 }
 
-function setCenterSymbol(baseDSID,dsidIndex,config,text,index,noFinish) {
-	var oObject=[];
-
-	if (text!=null) {
-		var textIndex=(index*0x18);
-		//oObject.push(textSelPageNameTextConfig(baseDSID));
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,6),
-			bank:127,
-			index:textIndex,
-			value:index+1,
-			cachePath:'devices/' + baseDSID + '/pagenames/' + index + '/PageIndex'
-		});
-
-		oObject.push({
-			type:'writeTextBlock',
-			dsid:dsidFromIndex(baseDSID,6),
-			bank:127,
-			index:textIndex+1,
-			cachePath:'devices/' + baseDSID + '/pagenames/' + index + '/text',
-			textSel:selTextPageName,
-			length:text.length,
-			value:text
-		});
-	}
-
-	lInfo.logln(' --  setCenterSymbol for Index ' + index);
-	if (dsidIndex==null)
-		dsidIndex=1;
-	oObject.push({
-		type:'writeNibble',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0x40 + index,
-		valueLow:dsidIndex,
-		valueHigh: config,
-		cachePathLow:'devices/'+baseDSID+'/pages/' + index + '/dsidIndex',
-		cachePath:'devices/'+baseDSID+'/pages/' + index + '/centerSymbolConfig'
-	});
-
-	if(!noFinish) {
-		oObject.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xD1,
-			value:0x80,
-			cachePath:'update end',
-			meta:'nocache'
-		});
-	}
-
-	return oObject;
+function setCenterSymbol (baseDSID, dsidIndex, config, text, index, noFinish) {
+    var oObject = [];
+
+    if (text != null) {
+        var textIndex = (index * 0x18);
+        // oObject.push(textSelPageNameTextConfig(baseDSID));
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 6),
+            bank: 127,
+            index: textIndex,
+            value: index + 1,
+            cachePath: 'devices/' + baseDSID + '/pagenames/' + index + '/PageIndex'
+        });
+
+        oObject.push({
+            type: 'writeTextBlock',
+            dsid: dsidFromIndex(baseDSID, 6),
+            bank: 127,
+            index: textIndex + 1,
+            cachePath: 'devices/' + baseDSID + '/pagenames/' + index + '/text',
+            textSel: selTextPageName,
+            length: text.length,
+            value: text
+        });
+    }
+
+    lInfo.logln(' --  setCenterSymbol for Index ' + index);
+    if (dsidIndex == null) {
+        dsidIndex = 1;
+    }
+    oObject.push({
+        type: 'writeNibble',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0x40 + index,
+        valueLow: dsidIndex,
+        valueHigh: config,
+        cachePathLow: 'devices/' + baseDSID + '/pages/' + index + '/dsidIndex',
+        cachePath: 'devices/' + baseDSID + '/pages/' + index + '/centerSymbolConfig'
+    });
+
+    if (!noFinish) {
+        oObject.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xD1,
+            value: 0x80,
+            cachePath: 'update end',
+            meta: 'nocache'
+        });
+    }
+
+    return oObject;
 }
 
-Property.setProperty('system/preventUninstall',false);
+Property.setProperty('system/preventUninstall', false);
 Property.setFlag('system/preventUninstall', 'ARCHIVE', true);
 
 
-function setBaseDSIDSettings() {
-	lInfo.logln('setBaseDSIDSettings!');
-	var baseDSID=raisedEvent.parameter.dsid;
-	var dsidArray=JSON.parse(unescape(raisedEvent.parameter.dsidArray));
-	for (var iIndex=0;iIndex<8;iIndex++) {
-		var fFound=false;
-
-		var zoneID=Property.getProperty("/apartment/zones/zone0/devices/" + baseDSID + "/ZoneID" );
-		var groupID=8;
-		var ltNumGroup=5;
-		for (var jIndex=0;jIndex<dsidArray.length;jIndex++) {
-			if (dsidArray[jIndex].dsidIndex==iIndex) {
-				fFound=true;
-				zoneID=parseInt("" + dsidArray[jIndex].zoneID,10);
-				groupID=parseInt("" + dsidArray[jIndex].groupID,10);
-				ltNumGroup=parseInt("" + dsidArray[jIndex].ltNumGroup,10);
-			}
-		}
-		var targetDSID=dsidFromIndex(baseDSID,iIndex);
-
-		if (fFound) {
-			lInfo.logln('device index ' + iIndex + ' is wanted! ' +targetDSID);
-
-			Property.setSavedProperty("deviceCache/" + targetDSID + "/visibility",true);
-			if (Property.getNode("/apartment/zones/zone0/devices/" + targetDSID)==null) {
-				lInfo.logln('set now device ' + targetDSID + ' to visibile');
-
-				setDeviceVisibility(targetDSID,true);
-			} else {
-				lInfo.logln('device ' + targetDSID + ' is already visibile');
-			}
-
-			try {
-				Property.setSavedProperty("deviceCache/" + targetDSID + "/zoneID",zoneID);
-				var oldZoneID=Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/ZoneID" );
-				if (oldZoneID!=zoneID) {
-					var zone = getZoneByID(zoneID);
-					lInfo.logln('put to zone ' + zoneID);
-					zone.addDevice(targetDSID);
-				} else {
-					lInfo.logln('device is already in zone ' + zoneID);
-				}
-			} catch (e) {
-				lInfo.logln("error on zone.addDevice " + e);
-			}
-
-				var oDevice=getDevices().byDSUID(targetDSID);
-				var oldGroupID=Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/activeGroup" );
-				Property.setSavedProperty("deviceCache/" + targetDSID + "/groupID",groupID);
-				if (groupID >= 16) {
-					try {
-//						if (groupID!=oldGroupID) {
-							//var applicationType=Property.getProperty("/apartment/zones/zone0/groups/group" + groupID + "/applicationType");
-							lInfo.logln('put to clustergroup/apartment ' + groupID);
-							//oDevice.setJokerGroup(parseInt("" + applicationType,10));
-							Cluster.clusterAddDevice(groupID,targetDSID);
-							oDevice.setButtonActiveGroup(groupID);
-//						} else
-//							lInfo.logln('device is already in clustergroup ' + groupID);
-					} catch (e) {
-						lInfo.logln("error on setButtonActiveGroup  " + e);
-					}
-				} else {
-					try {
-//						if (groupID!=oldGroupID) {
-							lInfo.logln('put to group ' + groupID);
-							oDevice.setJokerGroup(parseInt("" + groupID,10));
-							lInfo.logln('device was put to ' + groupID);
-//						} else {
-//							lInfo.logln('device is already in group ' + groupID);
-//						}
-
-					} catch (e) {
-						lInfo.logln("error on setJokerGroup  " + e);
-					}
-
-				}
-				try {
-					var oldButtonID=Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/id" );
-					if (groupID==8) {
-						Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID",15);
-						if (oldButtonID!=15)
-							oDevice.setButtonID(15);
-					} else {
-						Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID",ltNumGroup);
-						//if (oldButtonID!=ltNumGroup) {
-							oDevice.setButtonID(ltNumGroup);
-							lInfo.logln('and ltNumGroup ' + ltNumGroup);
-						//} else {
-						//	lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
-						//}
-					}
-				} catch (e) {
-					lInfo.logln("error on setButtonID  " + e);
-				}
-
-			if (dsidArray[iIndex].localPriority!=null) {
-				Property.setSavedProperty("deviceCache/" + targetDSID + "/setsLocalPriority",(dsidArray[iIndex].localPriority==true));
-				lInfo.logln('setLocalpriority to ' + (dsidArray[iIndex].localPriority==true));
-				Property.setProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/setsLocalPriority",(dsidArray[iIndex].localPriority==true));
-			} else {
-				lInfo.logln('no change to local priority');
-			}
-		} else {
-			Property.setSavedProperty("deviceCache/" + targetDSID + "/visibility",false);
-			if (Property.getNode("/apartment/zones/zone0/devices/" + targetDSID)!=null) {
-				lInfo.logln('set now device ' + targetDSID + ' to invisibile');
-				setDeviceVisibility(targetDSID,false);
-			} else {
-				lInfo.logln('device ' + targetDSID + ' is already invisibile');
-			}
-		}
-	}
+function setBaseDSIDSettings () {
+    lInfo.logln('setBaseDSIDSettings!');
+    var baseDSID = raisedEvent.parameter.dsid;
+    var dsidArray = JSON.parse(unescape(raisedEvent.parameter.dsidArray));
+    for (var iIndex = 0; iIndex < 8; iIndex++) {
+        var fFound = false;
+
+        var zoneID = Property.getProperty('/apartment/zones/zone0/devices/' + baseDSID + '/ZoneID');
+        var groupID = 8;
+        var ltNumGroup = 5;
+        for (var jIndex = 0; jIndex < dsidArray.length; jIndex++) {
+            if (dsidArray[jIndex].dsidIndex == iIndex) {
+                fFound = true;
+                zoneID = parseInt('' + dsidArray[jIndex].zoneID, 10);
+                groupID = parseInt('' + dsidArray[jIndex].groupID, 10);
+                ltNumGroup = parseInt('' + dsidArray[jIndex].ltNumGroup, 10);
+            }
+        }
+        var targetDSID = dsidFromIndex(baseDSID, iIndex);
+
+        if (fFound) {
+            lInfo.logln('device index ' + iIndex + ' is wanted! ' + targetDSID);
+
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/visibility', true);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + targetDSID) == null) {
+                lInfo.logln('set now device ' + targetDSID + ' to visibile');
+
+                setDeviceVisibility(targetDSID, true);
+            } else {
+                lInfo.logln('device ' + targetDSID + ' is already visibile');
+            }
+
+            try {
+                Property.setSavedProperty('deviceCache/' + targetDSID + '/zoneID', zoneID);
+                var oldZoneID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/ZoneID');
+                if (oldZoneID != zoneID) {
+                    var zone = getZoneByID(zoneID);
+                    lInfo.logln('put to zone ' + zoneID);
+                    zone.addDevice(targetDSID);
+                } else {
+                    lInfo.logln('device is already in zone ' + zoneID);
+                }
+            } catch (e) {
+                lInfo.logln('error on zone.addDevice ' + e);
+            }
+
+            var oDevice = getDevices().byDSUID(targetDSID);
+            var oldGroupID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/activeGroup');
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/groupID', groupID);
+            if (groupID >= 16) {
+                try {
+                    //                        if (groupID!=oldGroupID) {
+                    // var applicationType=Property.getProperty("/apartment/zones/zone0/groups/group" + groupID + "/applicationType");
+                    lInfo.logln('put to clustergroup/apartment ' + groupID);
+                    // oDevice.setJokerGroup(parseInt("" + applicationType,10));
+                    Cluster.clusterAddDevice(groupID, targetDSID);
+                    oDevice.setButtonActiveGroup(groupID);
+                    //                        } else
+                    //                            lInfo.logln('device is already in clustergroup ' + groupID);
+                } catch (e) {
+                    lInfo.logln('error on setButtonActiveGroup  ' + e);
+                }
+            } else {
+                try {
+                    //                        if (groupID!=oldGroupID) {
+                    lInfo.logln('put to group ' + groupID);
+                    oDevice.setJokerGroup(parseInt('' + groupID, 10));
+                    lInfo.logln('device was put to ' + groupID);
+                    //                        } else {
+                    //                            lInfo.logln('device is already in group ' + groupID);
+                    //                        }
+
+                } catch (e) {
+                    lInfo.logln('error on setJokerGroup  ' + e);
+                }
+
+            }
+            try {
+                var oldButtonID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/id');
+                if (groupID == 8) {
+                    Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', 15);
+                    if (oldButtonID != 15) {
+                        oDevice.setButtonID(15);
+                    }
+                } else {
+                    Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', ltNumGroup);
+                    // if (oldButtonID!=ltNumGroup) {
+                    oDevice.setButtonID(ltNumGroup);
+                    lInfo.logln('and ltNumGroup ' + ltNumGroup);
+                    // } else {
+                    //    lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
+                    // }
+                }
+            } catch (e) {
+                lInfo.logln('error on setButtonID  ' + e);
+            }
+
+            if (dsidArray[iIndex].localPriority != null) {
+                Property.setSavedProperty('deviceCache/' + targetDSID + '/setsLocalPriority', (dsidArray[iIndex].localPriority == true));
+                lInfo.logln('setLocalpriority to ' + (dsidArray[iIndex].localPriority == true));
+                Property.setProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/setsLocalPriority', (dsidArray[iIndex].localPriority == true));
+            } else {
+                lInfo.logln('no change to local priority');
+            }
+        } else {
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/visibility', false);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + targetDSID) != null) {
+                lInfo.logln('set now device ' + targetDSID + ' to invisibile');
+                setDeviceVisibility(targetDSID, false);
+            } else {
+                lInfo.logln('device ' + targetDSID + ' is already invisibile');
+            }
+        }
+    }
 }
 
-function setBaseDSIDSettings1() {
-	lInfo.logln('setBaseDSIDSettings1');
-	var baseDSID=raisedEvent.parameter.dsid;
-	var dsidArray=JSON.parse(unescape(raisedEvent.parameter.dsidArray));
-	for (var iIndex=0;iIndex<8;iIndex++) {
-		var fFound=false;
-
-		var zoneID=Property.getProperty("/apartment/zones/zone0/devices/" + baseDSID + "/ZoneID" );
-		var groupID=8;
-		var ltNumGroup=5;
-		for (var jIndex=0;jIndex<dsidArray.length;jIndex++) {
-			if (dsidArray[jIndex].dsidIndex==iIndex) {
-				fFound=true;
-				zoneID=parseInt("" + dsidArray[jIndex].zoneID,10);
-				groupID=parseInt("" + dsidArray[jIndex].groupID,10);
-				ltNumGroup=parseInt("" + dsidArray[jIndex].ltNumGroup,10);
-			}
-		}
-		var targetDSID=dsidFromIndex(baseDSID,iIndex);
-
-		if (fFound) {
-			lInfo.logln('device index ' + iIndex + ' is wanted! ' +targetDSID);
-
-			Property.setSavedProperty("deviceCache/" + targetDSID + "/visibility",true);
-			if (Property.getNode("/apartment/zones/zone0/devices/" + targetDSID)==null) {
-				lInfo.logln('set now device ' + targetDSID + ' to visibile');
-				setDeviceVisibility(targetDSID,true);
-				
-			} else {
-				lInfo.logln('device ' + targetDSID + ' is already visibile');
-			}
-
-		} else {
-			Property.setSavedProperty("deviceCache/" + targetDSID + "/visibility",false);
-			if (Property.getNode("/apartment/zones/zone0/devices/" + targetDSID)!=null) {
-				lInfo.logln('set now device ' + targetDSID + ' to invisibile');
-				setDeviceVisibility(targetDSID,false);
-			} else {
-				lInfo.logln('device ' + targetDSID + ' is already invisibile');
-			}
-		}
-	}
-	lInfo.logln('setBaseDSIDSettings1 - finished');
-	new Event('ulux.config',{'actions':'setBaseDSIDSettings2','dsid':raisedEvent.parameter.dsid,time:'+20',dsidArray:raisedEvent.parameter.dsidArray}).raise();
+function setBaseDSIDSettings1 () {
+    lInfo.logln('setBaseDSIDSettings1');
+    var baseDSID = raisedEvent.parameter.dsid;
+    var dsidArray = JSON.parse(unescape(raisedEvent.parameter.dsidArray));
+    for (var iIndex = 0; iIndex < 8; iIndex++) {
+        var fFound = false;
+
+        var zoneID = Property.getProperty('/apartment/zones/zone0/devices/' + baseDSID + '/ZoneID');
+        var groupID = 8;
+        var ltNumGroup = 5;
+        for (var jIndex = 0; jIndex < dsidArray.length; jIndex++) {
+            if (dsidArray[jIndex].dsidIndex == iIndex) {
+                fFound = true;
+                zoneID = parseInt('' + dsidArray[jIndex].zoneID, 10);
+                groupID = parseInt('' + dsidArray[jIndex].groupID, 10);
+                ltNumGroup = parseInt('' + dsidArray[jIndex].ltNumGroup, 10);
+            }
+        }
+        var targetDSID = dsidFromIndex(baseDSID, iIndex);
+
+        if (fFound) {
+            lInfo.logln('device index ' + iIndex + ' is wanted! ' + targetDSID);
+
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/visibility', true);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + targetDSID) == null) {
+                lInfo.logln('set now device ' + targetDSID + ' to visibile');
+                setDeviceVisibility(targetDSID, true);
+
+            } else {
+                lInfo.logln('device ' + targetDSID + ' is already visibile');
+            }
+
+        } else {
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/visibility', false);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + targetDSID) != null) {
+                lInfo.logln('set now device ' + targetDSID + ' to invisibile');
+                setDeviceVisibility(targetDSID, false);
+            } else {
+                lInfo.logln('device ' + targetDSID + ' is already invisibile');
+            }
+        }
+    }
+    lInfo.logln('setBaseDSIDSettings1 - finished');
+    new Event('ulux.config', { actions: 'setBaseDSIDSettings2', dsid: raisedEvent.parameter.dsid, time: '+20', dsidArray: raisedEvent.parameter.dsidArray }).raise();
 }
 
-function setBaseDSIDSettings2() {
-	lInfo.logln('setBaseDSIDSettings2');
-	var baseDSID = raisedEvent.parameter.dsid;
-	var dsidArray = JSON.parse(unescape(raisedEvent.parameter.dsidArray));
-	for (var iIndex = 0; iIndex < 8; iIndex++) {
-		var fFound = false;
-
-		var zoneID = Property.getProperty("/apartment/zones/zone0/devices/" + baseDSID + "/ZoneID");
-		var groupID = 8;
-		var ltNumGroup = 5;
-		for (var jIndex = 0; jIndex < dsidArray.length; jIndex++) {
-			if (dsidArray[jIndex].dsidIndex == iIndex) {
-				fFound = true;
-				zoneID = parseInt("" + dsidArray[jIndex].zoneID, 10);
-				groupID = parseInt("" + dsidArray[jIndex].groupID, 10);
-				ltNumGroup = parseInt("" + dsidArray[jIndex].ltNumGroup, 10);
-			}
-		}
-		var targetDSID = dsidFromIndex(baseDSID, iIndex);
-
-		if (fFound) {
-			lInfo.logln('device index ' + iIndex + ' is wanted! ' + targetDSID);
-
-			try {
-				Property.setSavedProperty("deviceCache/" + targetDSID + "/zoneID", zoneID);
-				var oldZoneID = Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/ZoneID");
-				if (oldZoneID != zoneID) {
-					var zone = getZoneByID(zoneID);
-					lInfo.logln('put to zone ' + zoneID);
-					zone.addDevice(targetDSID);
-				} else {
-					lInfo.logln('device is already in zone ' + zoneID);
-				}
-			} catch (e) {
-				lInfo.logln("error on zone.addDevice " + e);
-			}
-
-			var oDevice=getDevices().byDSUID(targetDSID);
-			var oldGroupID=Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/activeGroup" );
-			Property.setSavedProperty("deviceCache/" + targetDSID + "/groupID",groupID);
-			if (groupID >= 16) {
-				try {
-					//if (groupID!=oldGroupID) {
-						//var applicationType=Property.getProperty("/apartment/zones/zone0/groups/group" + groupID + "/applicationType");
-						lInfo.logln('put to clustergroup/apartment ' + groupID);
-						//oDevice.setJokerGroup(parseInt("" + applicationType,10));
-						Cluster.clusterAddDevice(groupID,targetDSID);
-						oDevice.setButtonActiveGroup(groupID);
-					//} else
-					//	lInfo.logln('device is already in clustergroup ' + groupID);
-				} catch (e) {
-					lInfo.logln("error on setButtonActiveGroup  " + e);
-				}
-			} else {
-				try {
-					//if (groupID!=oldGroupID) {
-						lInfo.logln('put to group ' + groupID);
-						oDevice.setJokerGroup(parseInt("" + groupID,10));
-						oDevice.setButtonActiveGroup(parseInt("" + groupID,10));
-						lInfo.logln('device was put to ' + groupID);
-					//} else {
-					//	lInfo.logln('device is already in group ' + groupID);
-					//}
-
-				} catch (e) {
-					lInfo.logln("error on setJokerGroup  " + e);
-				}
-
-			}
-			} else {
-				try {
-					var oldButtonID=Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/id" );
-					if (groupID==8) {
-						Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID",15);
-						if (oldButtonID!=15)
-							oDevice.setButtonID(15);
-					} else {
-						Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID",ltNumGroup);
-						//if (oldButtonID!=ltNumGroup) {
-							oDevice.setButtonID(ltNumGroup);
-							lInfo.logln('and ltNumGroup ' + ltNumGroup);
-						//} else {
-						//	lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
-						//}
-					}
-
-				} catch (e) {
-					lInfo.logln("error on setJokerGroup  " + e);
-				}
-
-			}
-			try {
-				var oldButtonID = Property.getProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/id");
-				if (groupID == 8) {
-					Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID", 15);
-					if (oldButtonID != 15)
-						oDevice.setButtonID(15);
-				} else {
-					Property.setSavedProperty("deviceCache/" + targetDSID + "/buttonID", ltNumGroup);
-					if (oldButtonID != ltNumGroup) {
-						oDevice.setButtonID(ltNumGroup);
-						lInfo.logln('and ltNumGroup ' + ltNumGroup);
-					} else {
-						lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
-					}
-				}
-			} catch (e) {
-				lInfo.logln("error on setButtonID  " + e);
-			}
-			try {
-				oDevice.setButtonUsage("used");
-			} catch (e) {
-				lInfo.logln("error on setButtonUsage " + e);
-			}
-
-			if (dsidArray[jIndex].localPriority != null) {
-				Property.setSavedProperty("deviceCache/" + targetDSID + "/setsLocalPriority", (dsidArray[jIndex].localPriority == true));
-				lInfo.logln('setLocalpriority to ' + (dsidArray[jIndex].localPriority == true));
-				Property.setProperty("/apartment/zones/zone0/devices/" + targetDSID + "/button/setsLocalPriority", (dsidArray[jIndex].localPriority == true));
-			} else {
-				lInfo.logln('no change to local priority');
-			}
-		}
-	}
+function setBaseDSIDSettings2 () {
+    lInfo.logln('setBaseDSIDSettings2');
+    var baseDSID = raisedEvent.parameter.dsid;
+    var dsidArray = JSON.parse(unescape(raisedEvent.parameter.dsidArray));
+    for (var iIndex = 0; iIndex < 8; iIndex++) {
+        var fFound = false;
+
+        var zoneID = Property.getProperty('/apartment/zones/zone0/devices/' + baseDSID + '/ZoneID');
+        var groupID = 8;
+        var ltNumGroup = 5;
+        for (var jIndex = 0; jIndex < dsidArray.length; jIndex++) {
+            if (dsidArray[jIndex].dsidIndex == iIndex) {
+                fFound = true;
+                zoneID = parseInt('' + dsidArray[jIndex].zoneID, 10);
+                groupID = parseInt('' + dsidArray[jIndex].groupID, 10);
+                ltNumGroup = parseInt('' + dsidArray[jIndex].ltNumGroup, 10);
+            }
+        }
+        var targetDSID = dsidFromIndex(baseDSID, iIndex);
+
+        if (fFound) {
+            lInfo.logln('device index ' + iIndex + ' is wanted! ' + targetDSID);
+
+            try {
+                Property.setSavedProperty('deviceCache/' + targetDSID + '/zoneID', zoneID);
+                var oldZoneID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/ZoneID');
+                if (oldZoneID != zoneID) {
+                    var zone = getZoneByID(zoneID);
+                    lInfo.logln('put to zone ' + zoneID);
+                    zone.addDevice(targetDSID);
+                } else {
+                    lInfo.logln('device is already in zone ' + zoneID);
+                }
+            } catch (e) {
+                lInfo.logln('error on zone.addDevice ' + e);
+            }
+
+            var oDevice = getDevices().byDSUID(targetDSID);
+            var oldGroupID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/activeGroup');
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/groupID', groupID);
+            if (groupID >= 16) {
+                try {
+                    // if (groupID!=oldGroupID) {
+                    // var applicationType=Property.getProperty("/apartment/zones/zone0/groups/group" + groupID + "/applicationType");
+                    lInfo.logln('put to clustergroup/apartment ' + groupID);
+                    // oDevice.setJokerGroup(parseInt("" + applicationType,10));
+                    Cluster.clusterAddDevice(groupID, targetDSID);
+                    oDevice.setButtonActiveGroup(groupID);
+                    // } else
+                    //    lInfo.logln('device is already in clustergroup ' + groupID);
+                } catch (e) {
+                    lInfo.logln('error on setButtonActiveGroup  ' + e);
+                }
+            } else {
+                try {
+                    // if (groupID!=oldGroupID) {
+                    lInfo.logln('put to group ' + groupID);
+                    oDevice.setJokerGroup(parseInt('' + groupID, 10));
+                    oDevice.setButtonActiveGroup(parseInt('' + groupID, 10));
+                    lInfo.logln('device was put to ' + groupID);
+                    // } else {
+                    //    lInfo.logln('device is already in group ' + groupID);
+                    // }
+
+                } catch (e) {
+                    lInfo.logln('error on setJokerGroup  ' + e);
+                }
+
+            }
+        } else {
+            try {
+                var oldButtonID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/id');
+                if (groupID == 8) {
+                    Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', 15);
+                    if (oldButtonID != 15) {
+                        oDevice.setButtonID(15);
+                    }
+                } else {
+                    Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', ltNumGroup);
+                    // if (oldButtonID!=ltNumGroup) {
+                    oDevice.setButtonID(ltNumGroup);
+                    lInfo.logln('and ltNumGroup ' + ltNumGroup);
+                    // } else {
+                    //    lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
+                    // }
+                }
+
+            } catch (e) {
+                lInfo.logln('error on setJokerGroup  ' + e);
+            }
+
+        }
+        try {
+            var oldButtonID = Property.getProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/id');
+            if (groupID == 8) {
+                Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', 15);
+                if (oldButtonID != 15) {
+                    oDevice.setButtonID(15);
+                }
+            } else {
+                Property.setSavedProperty('deviceCache/' + targetDSID + '/buttonID', ltNumGroup);
+                if (oldButtonID != ltNumGroup) {
+                    oDevice.setButtonID(ltNumGroup);
+                    lInfo.logln('and ltNumGroup ' + ltNumGroup);
+                } else {
+                    lInfo.logln('and ltNumGroup is already in ' + ltNumGroup);
+                }
+            }
+        } catch (e) {
+            lInfo.logln('error on setButtonID  ' + e);
+        }
+        try {
+            oDevice.setButtonUsage('used');
+        } catch (e) {
+            lInfo.logln('error on setButtonUsage ' + e);
+        }
+
+        if (dsidArray[jIndex].localPriority != null) {
+            Property.setSavedProperty('deviceCache/' + targetDSID + '/setsLocalPriority', (dsidArray[jIndex].localPriority == true));
+            lInfo.logln('setLocalpriority to ' + (dsidArray[jIndex].localPriority == true));
+            Property.setProperty('/apartment/zones/zone0/devices/' + targetDSID + '/button/setsLocalPriority', (dsidArray[jIndex].localPriority == true));
+        } else {
+            lInfo.logln('no change to local priority');
+        }
+    }
 }
 
 
-function getSceneNameForZoneGroup(zoneID,groupID,ClickType,ButtonNumber,defaultText) {
-	var presetNumber=getSceneNumber(null,ButtonNumber,ClickType);
-	if (Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name')!=null) {
-		var sceneName=Utf8.decode(Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name').getValue());
-		if (sceneName.length>11)
-			sceneName=sceneName.substr(0,11);
-		lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + " = " + sceneName);
-		return sceneName;	
-	}
-	return defaultText
+function getSceneNameForZoneGroup (zoneID, groupID, ClickType, ButtonNumber, defaultText) {
+    var presetNumber = getSceneNumber(null, ButtonNumber, ClickType);
+    if (Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name') != null) {
+        var sceneName = Utf8.decode(Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name').getValue());
+        if (sceneName.length > 11) {
+            sceneName = sceneName.substr(0, 11);
+        }
+        lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + ' = ' + sceneName);
+        return sceneName;
+    }
+    return defaultText;
 }
 
-function getSceneNameForSceneLabel(baseDSID,index,defaultText) {
-	var sceneLabelNode=Property.getNode('devices/' + baseDSID + '/scenes/' + index);
-	var dsidIndex=sceneLabelNode.getChild('dsidIndex').getValue();
-	var ClickType=sceneLabelNode.getChild('ClickType').getValue();
-	var ButtonNumber=sceneLabelNode.getChild('ButtonNumber').getValue();
-	var deviceDSID=dsidFromIndex(baseDSID,dsidIndex-1);
-
-	if (Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID)!=null) {
-		var presetNumber=getSceneNumber(deviceDSID,ButtonNumber,ClickType);
-		if (presetNumber==-1)
-			return defaultText;
-		var zoneID=Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID + '/ZoneID').getValue();
-		var groupID=Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID + '/button/activeGroup').getValue();
-		if (Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name')!=null) {
-			var sceneName=Utf8.decode(Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name').getValue());
-			if (sceneName.length>11)
-				sceneName=sceneName.substr(0,11);
-			lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + " = " + sceneName);
-			return sceneName;
-		}
-	}
-	if (defaultText!=null)
-		lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + " = " + defaultText);
-	return defaultText;
+function getSceneNameForSceneLabel (baseDSID, index, defaultText) {
+    var sceneLabelNode = Property.getNode('devices/' + baseDSID + '/scenes/' + index);
+    var dsidIndex = sceneLabelNode.getChild('dsidIndex').getValue();
+    var ClickType = sceneLabelNode.getChild('ClickType').getValue();
+    var ButtonNumber = sceneLabelNode.getChild('ButtonNumber').getValue();
+    var deviceDSID = dsidFromIndex(baseDSID, dsidIndex - 1);
+
+    if (Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID) != null) {
+        var presetNumber = getSceneNumber(deviceDSID, ButtonNumber, ClickType);
+        if (presetNumber == -1) {
+            return defaultText;
+        }
+        var zoneID = Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID + '/ZoneID').getValue();
+        var groupID = Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID + '/button/activeGroup').getValue();
+        if (Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name') != null) {
+            var sceneName = Utf8.decode(Property.getNode('/apartment/zones/zone' + zoneID + '/groups/group' + groupID + '/scenes/scene' + presetNumber + '/name').getValue());
+            if (sceneName.length > 11) {
+                sceneName = sceneName.substr(0, 11);
+            }
+            lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + ' = ' + sceneName);
+            return sceneName;
+        }
+    }
+    if (defaultText != null) {
+        lInfo.logln('zone ' + zoneID + ' group ' + groupID + ' scenenumber ' + presetNumber + ' = ' + defaultText);
+    }
+    return defaultText;
 }
 
-function syncSceneNames(dsid,fillEmpty) {
-	if (Property.getNode('devices')==null)
-		return;
-	if (fillEmpty==null)
-		fillEmpty=false;
-	if (dsid==null)
-		lInfo.logln('Syncing all scenenames!');
-	else {
-		dsid=dsidFromIndex(dsid,0);
-		if (raisedEvent.parameter.configClass!=null)
-			if (raisedEvent.parameter.configIndex!=null)
-				if (raisedEvent.parameter.configClass==127) {
-					lInfo.logln('configure events comes from own device config, ignore sync therefore');
-					return;
-				}
-
-	}
-
-	
-	var deviceNodes=Property.getNode('devices').getChildren();
-	for (var iIndex=0;iIndex<deviceNodes.length;iIndex++) {
-		if ((dsid==null) || (deviceNodes[iIndex].getName()==dsid)) {
-			lInfo.logln('checking syncSceneNames for ' + deviceNodes[iIndex].getName());
-			if (deviceNodes[iIndex].getChild('scenes')!=null) {
-				var resultArray=[];
-				var fSomeDone=false;
-				var scenesArray=deviceNodes[iIndex].getChild('scenes').getChildren();
-				var baseDSID=deviceNodes[iIndex].getChild('id').getValue();
-
-				for (var jIndex=0;jIndex<scenesArray.length;jIndex++) {
-
-					var sceneNode=scenesArray[jIndex];
-					if (sceneNode.getChild('sync')!=null)
-						if (sceneNode.getChild('sync').getValue()) {
-
-							var sceneName = getSceneNameForSceneLabel(baseDSID,jIndex);
-							if (sceneName!=null) {
-
-								lInfo.logln(' --  setSceneLabel for Index ' + jIndex);
-								var textSel;
-								if (jIndex<18) {
-									textSel=selTextScene1;
-								} else	if (jIndex<36) {
-									textSel=selTextScene2;
-								} else if (jIndex<54) {
-									textSel=selTextScene3;
-								} else if (!textSelect4) {
-									textSel=selTextScene4;
-								}
-								fSomeDone=true;
-								resultArray.push({
-									type:'writeTextBlock',
-									dsid:dsidFromIndex(baseDSID,6),
-									bank:127,
-									index:(jIndex%18)*14 + 2,
-									value:sceneName,
-									cachePath:'devices/'+baseDSID+'/scenes/' + jIndex +'/text',
-									textSel:textSel,
-									length:sceneName.length
-								});
-							}
-						}
-				}
-
-				if (fSomeDone) {
-					resultArray.push({
-						type:'write',
-						dsid:dsidFromIndex(baseDSID,7),
-						bank:127,
-						index:0xD1,
-						value:0x80,
-						cachePath:'update end',
-						meta:'nocache'
-					});
-					// don't make a queue for differend ulux devices at once, timeout handling will not work
-					lInfo.logln('insert a SyncSceneName command for ' + baseDSID);
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(resultArray)}).raise();
-
-
-				}
-			}
-		}
-	}
-	return;
+function syncSceneNames (dsid, fillEmpty) {
+    if (Property.getNode('devices') == null) { return; }
+    if (fillEmpty == null) {
+        fillEmpty = false;
+    }
+    if (dsid == null) {
+        lInfo.logln('Syncing all scenenames!');
+    } else {
+        dsid = dsidFromIndex(dsid, 0);
+        if (raisedEvent.parameter.configClass != null) {
+            if (raisedEvent.parameter.configIndex != null) {
+                if (raisedEvent.parameter.configClass == 127) {
+                    lInfo.logln('configure events comes from own device config, ignore sync therefore');
+                    return;
+                }
+            }
+        }
+
+    }
+
+
+    var deviceNodes = Property.getNode('devices').getChildren();
+    for (var iIndex = 0; iIndex < deviceNodes.length; iIndex++) {
+        if ((dsid == null) || (deviceNodes[iIndex].getName() == dsid)) {
+            lInfo.logln('checking syncSceneNames for ' + deviceNodes[iIndex].getName());
+            if (deviceNodes[iIndex].getChild('scenes') != null) {
+                var resultArray = [];
+                var fSomeDone = false;
+                var scenesArray = deviceNodes[iIndex].getChild('scenes').getChildren();
+                var baseDSID = deviceNodes[iIndex].getChild('id').getValue();
+
+                for (var jIndex = 0; jIndex < scenesArray.length; jIndex++) {
+
+                    var sceneNode = scenesArray[jIndex];
+                    if (sceneNode.getChild('sync') != null) {
+                        if (sceneNode.getChild('sync').getValue()) {
+
+                            var sceneName = getSceneNameForSceneLabel(baseDSID, jIndex);
+                            if (sceneName != null) {
+
+                                lInfo.logln(' --  setSceneLabel for Index ' + jIndex);
+                                var textSel;
+                                if (jIndex < 18) {
+                                    textSel = selTextScene1;
+                                } else if (jIndex < 36) {
+                                    textSel = selTextScene2;
+                                } else if (jIndex < 54) {
+                                    textSel = selTextScene3;
+                                } else if (!textSelect4) {
+                                    textSel = selTextScene4;
+                                }
+                                fSomeDone = true;
+                                resultArray.push({
+                                    type: 'writeTextBlock',
+                                    dsid: dsidFromIndex(baseDSID, 6),
+                                    bank: 127,
+                                    index: (jIndex % 18) * 14 + 2,
+                                    value: sceneName,
+                                    cachePath: 'devices/' + baseDSID + '/scenes/' + jIndex + '/text',
+                                    textSel: textSel,
+                                    length: sceneName.length
+                                });
+                            }
+                        }
+                    }
+                }
+
+                if (fSomeDone) {
+                    resultArray.push({
+                        type: 'write',
+                        dsid: dsidFromIndex(baseDSID, 7),
+                        bank: 127,
+                        index: 0xD1,
+                        value: 0x80,
+                        cachePath: 'update end',
+                        meta: 'nocache'
+                    });
+                    // don't make a queue for differend ulux devices at once, timeout handling will not work
+                    lInfo.logln('insert a SyncSceneName command for ' + baseDSID);
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(resultArray) }).raise();
+
+
+                }
+            }
+        }
+    }
+
 }
 
-function executeTileSetting() {
-	var configParameter=evaluateTileSetting();
-	var baseDSID=raisedEvent.parameter.dsid;
-
-
-	var oObjectDynamic=[{
-		type:'writeBitmask',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0,
-		bitmask: 0x10,
-		value: 0x10,
-		cachePath:'devices/'+baseDSID+'/generalSettings/ConfigFlagsLow/value',
-		forced:true
-	}];
-	new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObjectDynamic)}).raise();
-
-
-	var parameter={
-			actions:'setBaseDSIDSettings1',
-			dsid:baseDSID,
-			dsidArray:JSON.stringify(configParameter.dsidConfig)
-		};
-	lInfo.logln('starting: ' + JSON.stringify(parameter));
-
-	new Event('ulux.config',parameter).raise();
-
-	var oArray=[];
-	for (var iIndex=0;iIndex<configParameter.tilesConfig.length;iIndex++) {
-		var config=configParameter.tilesConfig[iIndex];
-		lInfo.logln('config ' + JSON.stringify(config));
-		var oObject=setTile(baseDSID,config.index,config.page,
-				config.sortIndex,config.libraryID,
-				config.dsidIndex,config.areaIndex,
-				config.displayText,config.jokerCount,true,
-				config.buttonNumber,config.clickType);
-		oArray=oArray.concat(oObject);
-		lInfo.logln('tiles: ' + JSON.stringify(oObject));
-	}
-
-	for (var iIndex=0;iIndex<configParameter.labelsConfig.length;iIndex++) {
-		var config=configParameter.labelsConfig[iIndex];
-		var oObject=saveSceneLabel(baseDSID,config.dsidIndex,config.text,config.buttonNumber,config.clickType,config.index,true,config.sync,true);
-		oArray=oArray.concat(oObject);
-		lInfo.logln('labels: ' + JSON.stringify(oObject));
-	}
-
-	for (var iIndex=0;iIndex<configParameter.centerConfig.length;iIndex++) {
-		var config=configParameter.centerConfig[iIndex];
-		var oObject=setCenterSymbol(baseDSID,config.dsidIndex,config.type,config.text,config.index,true);
-		oArray=oArray.concat(oObject);
-		lInfo.logln('center: ' + JSON.stringify(oObject));
-	}
-
-
-	oArray.push({
-		type:'write',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xD1,
-		value:0x80,
-		cachePath:'update end',
-		meta:'nocache',
-		finishEvent:'ulux.config',
-		finishEventParameter:'{"actions":"enrichDatastructure","dsid":"'+baseDSID+'"}'
-	});
-	var fTimeoutAvaible=false;
-	if (Property.getNode('devices/'+baseDSID+'/FirmwareVersion')!=null)
-			if (Property.getNode('devices/'+baseDSID+'/FirmwareVersion').getValue()>=0x1d5) {
-				fTimeoutAvaible=true;
-			}
-	if (fTimeoutAvaible)
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray),timeoutDetection:baseDSID}).raise();
-	else
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray)}).raise();
-	Property.store();
+function executeTileSetting () {
+    var configParameter = evaluateTileSetting();
+    var baseDSID = raisedEvent.parameter.dsid;
+
+
+    var oObjectDynamic = [ {
+        type: 'writeBitmask',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0,
+        bitmask: 0x10,
+        value: 0x10,
+        cachePath: 'devices/' + baseDSID + '/generalSettings/ConfigFlagsLow/value',
+        forced: true
+    } ];
+    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObjectDynamic) }).raise();
+
+
+    var parameter = {
+        actions: 'setBaseDSIDSettings1',
+        dsid: baseDSID,
+        dsidArray: JSON.stringify(configParameter.dsidConfig)
+    };
+    lInfo.logln('starting: ' + JSON.stringify(parameter));
+
+    new Event('ulux.config', parameter).raise();
+
+    var oArray = [];
+    for (var iIndex = 0; iIndex < configParameter.tilesConfig.length; iIndex++) {
+        var config = configParameter.tilesConfig[iIndex];
+        lInfo.logln('config ' + JSON.stringify(config));
+        var oObject = setTile(baseDSID, config.index, config.page,
+            config.sortIndex, config.libraryID,
+            config.dsidIndex, config.areaIndex,
+            config.displayText, config.jokerCount, true,
+            config.buttonNumber, config.clickType);
+        oArray = oArray.concat(oObject);
+        lInfo.logln('tiles: ' + JSON.stringify(oObject));
+    }
+
+    for (var iIndex = 0; iIndex < configParameter.labelsConfig.length; iIndex++) {
+        var config = configParameter.labelsConfig[iIndex];
+        var oObject = saveSceneLabel(baseDSID, config.dsidIndex, config.text, config.buttonNumber, config.clickType, config.index, true, config.sync, true);
+        oArray = oArray.concat(oObject);
+        lInfo.logln('labels: ' + JSON.stringify(oObject));
+    }
+
+    for (var iIndex = 0; iIndex < configParameter.centerConfig.length; iIndex++) {
+        var config = configParameter.centerConfig[iIndex];
+        var oObject = setCenterSymbol(baseDSID, config.dsidIndex, config.type, config.text, config.index, true);
+        oArray = oArray.concat(oObject);
+        lInfo.logln('center: ' + JSON.stringify(oObject));
+    }
+
+
+    oArray.push({
+        type: 'write',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xD1,
+        value: 0x80,
+        cachePath: 'update end',
+        meta: 'nocache',
+        finishEvent: 'ulux.config',
+        finishEventParameter: '{"actions":"enrichDatastructure","dsid":"' + baseDSID + '"}'
+    });
+    var fTimeoutAvaible = false;
+    if (Property.getNode('devices/' + baseDSID + '/FirmwareVersion') != null) {
+        if (Property.getNode('devices/' + baseDSID + '/FirmwareVersion').getValue() >= 0x1d5) {
+            fTimeoutAvaible = true;
+        }
+    }
+    if (fTimeoutAvaible) {
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray), timeoutDetection: baseDSID }).raise();
+    } else {
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray) }).raise();
+    }
+    Property.store();
 }
 
 
-function removeObsoleteDevices() {
-	lInfo.logln('scan for deleted devices and removing data');
-	var fShouldSave=false;
-	if (Property.getNode('devices')==null)
-		return;
-	var oArray=Property.getNode('devices').getChildren();
-	for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-		var dsid=oArray[iIndex].getName();
-		if (Property.getNode('/apartment/zones/zone0/devices/' + dsid)==null){
-			lInfo.logln('removing old deviceinfo ' + dsid);
-			Property.getNode('devices').removeChild(dsid);
-			fShouldSave=true;
-		}
-	}
-	if (fShouldSave)
-		Property.store();
+function removeObsoleteDevices () {
+    lInfo.logln('scan for deleted devices and removing data');
+    var fShouldSave = false;
+    if (Property.getNode('devices') == null) { return; }
+    var oArray = Property.getNode('devices').getChildren();
+    for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+        var dsid = oArray[iIndex].getName();
+        if (Property.getNode('/apartment/zones/zone0/devices/' + dsid) == null) {
+            lInfo.logln('removing old deviceinfo ' + dsid);
+            Property.getNode('devices').removeChild(dsid);
+            fShouldSave = true;
+        }
+    }
+    if (fShouldSave) {
+        Property.store();
+    }
 }
 
 
-function calibrateTemperature(baseDSID,realValue) {
-	lInfo.logln(baseDSID + ' temperature should be set to ' + realValue)
-	baseDSID=dsidFromIndex(baseDSID,0);
-	var oArray=[];
-	var sensorNodes=Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
-	for (var iIndex=0;iIndex<sensorNodes.length;iIndex++) {
-		if (sensorNodes[iIndex].getChild('type').getValue()==9) {
+function calibrateTemperature (baseDSID, realValue) {
+    lInfo.logln(baseDSID + ' temperature should be set to ' + realValue);
+    baseDSID = dsidFromIndex(baseDSID, 0);
+    var oArray = [];
+    var sensorNodes = Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
+    for (var iIndex = 0; iIndex < sensorNodes.length; iIndex++) {
+        if (sensorNodes[iIndex].getChild('type').getValue() == 9) {
 
-			var oDeviceSensor=getDevices().byDSUID(baseDSID);
+            var oDeviceSensor = getDevices().byDSUID(baseDSID);
 
-			var actSensorValue=oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
-			actSensorValue=actSensorValue - 1726;
-			lInfo.logln('found last temperature ' + actSensorValue + ' on index ' + sensorNodes[iIndex].getChild('index').getValue());
+            var actSensorValue = oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
+            actSensorValue -= 1726;
+            lInfo.logln('found last temperature ' + actSensorValue + ' on index ' + sensorNodes[iIndex].getChild('index').getValue());
 
-			var newValue=parseFloat("" + realValue);
-			var difference = (newValue * 40) - actSensorValue;
+            var newValue = parseFloat('' + realValue);
+            var difference = (newValue * 40) - actSensorValue;
 
-			lInfo.logln('difference is ' + (difference/40) );
+            lInfo.logln('difference is ' + (difference / 40));
 
-			var param=Math.floor(difference/4);
+            var param = Math.floor(difference / 4);
 
-			var oldParam=getDeviceConfig(dsidFromIndex(baseDSID,7),127,0x14);
-			if (oldParam>127)
-				oldParam=oldParam-256;
-			lInfo.logln('old offset is ' + oldParam);
+            var oldParam = getDeviceConfig(dsidFromIndex(baseDSID, 7), 127, 0x14);
+            if (oldParam > 127) {
+                oldParam -= 256;
+            }
+            lInfo.logln('old offset is ' + oldParam);
 
-			param=param +oldParam ; // rundungsoffset ....
-			if (param < -128)
-				param=-128;
-			if (param > 127)
-				param=127;
+            param += oldParam; // rundungsoffset ....
+            if (param < -128) {
+                param = -128;
+            }
+            if (param > 127) {
+                param = 127;
+            }
 
-			lInfo.logln('set to ' + param);
+            lInfo.logln('set to ' + param);
 
-			oArray.push({
-				type:'write',
-				dsid:dsidFromIndex(baseDSID,7),
-				bank:127,
-				index:0x14,
-				value:param,
-				cachePath:'devices/'+baseDSID+'/generalSettings/TemperatureCorrection/value'
-			});
-		}
-	}
+            oArray.push({
+                type: 'write',
+                dsid: dsidFromIndex(baseDSID, 7),
+                bank: 127,
+                index: 0x14,
+                value: param,
+                cachePath: 'devices/' + baseDSID + '/generalSettings/TemperatureCorrection/value'
+            });
+        }
+    }
 
-	return oArray;
+    return oArray;
 }
 
-function calibrateHuminity(baseDSID,realValue) {
-	if (realValue>100)
-		realValue=100;
-	if (realValue<0)
-		realValue=0;
-	lInfo.logln(baseDSID + ' huminity should be set to ' + realValue)
-	baseDSID=dsidFromIndex(baseDSID,0);
-	var oArray=[];
-	var sensorNodes=Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
-	for (var iIndex=0;iIndex<sensorNodes.length;iIndex++) {
-		if (sensorNodes[iIndex].getChild('type').getValue()==13) {
+function calibrateHuminity (baseDSID, realValue) {
+    if (realValue > 100) {
+        realValue = 100;
+    }
+    if (realValue < 0) {
+        realValue = 0;
+    }
+    lInfo.logln(baseDSID + ' huminity should be set to ' + realValue);
+    baseDSID = dsidFromIndex(baseDSID, 0);
+    var oArray = [];
+    var sensorNodes = Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
+    for (var iIndex = 0; iIndex < sensorNodes.length; iIndex++) {
+        if (sensorNodes[iIndex].getChild('type').getValue() == 13) {
 
-			var oDeviceSensor=getDevices().byDSUID(baseDSID);
+            var oDeviceSensor = getDevices().byDSUID(baseDSID);
 
-			var actSensorValue=oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
-			lInfo.logln('found last huminity ' + actSensorValue + ' on index ' + sensorNodes[iIndex].getChild('index').getValue());
+            var actSensorValue = oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
+            lInfo.logln('found last huminity ' + actSensorValue + ' on index ' + sensorNodes[iIndex].getChild('index').getValue());
 
-			var newValue=parseFloat("" + realValue);
-			var difference = (newValue * 40) - actSensorValue;
+            var newValue = parseFloat('' + realValue);
+            var difference = (newValue * 40) - actSensorValue;
 
-			lInfo.logln('difference is ' + (difference/40) );
+            lInfo.logln('difference is ' + (difference / 40));
 
-			var param=Math.floor(difference/4);
+            var param = Math.floor(difference / 4);
 
-			var oldParam=getDeviceConfig(dsidFromIndex(baseDSID,7),127,0x15);
-			if (oldParam>127)
-				oldParam=oldParam-256;
+            var oldParam = getDeviceConfig(dsidFromIndex(baseDSID, 7), 127, 0x15);
+            if (oldParam > 127) {
+                oldParam -= 256;
+            }
 
-			lInfo.logln('old offset is ' + oldParam);
+            lInfo.logln('old offset is ' + oldParam);
 
-			param=param +oldParam ; // rundungsoffset ....
+            param += oldParam; // rundungsoffset ....
 
-			if (param < -128)
-				param=-128;
-			if (param > 127)
-				param=127;
+            if (param < -128) {
+                param = -128;
+            }
+            if (param > 127) {
+                param = 127;
+            }
 
-			lInfo.logln('set to ' + param);
+            lInfo.logln('set to ' + param);
 
-			oArray.push({
-				type:'write',
-				dsid:dsidFromIndex(baseDSID,7),
-				bank:127,
-				index:0x15,
-				value:param,
-				cachePath:'devices/'+baseDSID+'/generalSettings/HumidityCorrection/value'
-			});
-		}
-	}
+            oArray.push({
+                type: 'write',
+                dsid: dsidFromIndex(baseDSID, 7),
+                bank: 127,
+                index: 0x15,
+                value: param,
+                cachePath: 'devices/' + baseDSID + '/generalSettings/HumidityCorrection/value'
+            });
+        }
+    }
 
-	return oArray;
+    return oArray;
 }
 
 
-function setGeneralParameters() {
-	var baseDSID = raisedEvent.parameter.dsid;
-	lInfo.logln('parameterblock: ' + unescape(raisedEvent.parameter.configBlock));
-	var dataString= JSON.parse(unescape(raisedEvent.parameter.configBlock));
-	var oArray=[];
-
-	if (dataString.additionalBehaviour!=null)
-		if (dataString.additionalBehaviour.nightMode!=null) {
-			nightMode=dataString.additionalBehaviour.nightMode;
-			oArray=oArray.concat(setadditionalBehaviour(nightMode,dataString.additionalBehaviour.nightStart,dataString.additionalBehaviour.nightEnd,baseDSID));
-		}
-
-	if (dataString.sounds!=null) {
-		for (var sKey in dataString.sounds) {
-			var duration=dataString.sounds[sKey].duration;
-			var delay=dataString.sounds[sKey].delay;
-			var volume=dataString.sounds[sKey].volume;
-			var soundID=getSoundIDForName(baseDSID,dataString.sounds[sKey].soundID);
-
-			lInfo.logln('found Sound with ' + sKey + ' : ' + soundID + ' : ' + duration + ' : ' + delay + ' : ' + volume);
-
-			if (soundID!=-1) {
-				oArray=oArray.concat(setSound(baseDSID,sKey,duration,delay,volume,soundID,true));
-			}
-		}
-	}
-	if (dataString.texts!=null) {
-		for (var sKey in dataString.texts) {
-			lInfo.logln('found Text for ' + sKey + ' to ' + unescape(dataString.texts[sKey]));
-			oArray=oArray.concat(setBaseText(baseDSID,sKey,unescape(dataString.texts[sKey]),true));
-		}
-	}
-	if (dataString.parameters!=null) {
-		for (var sKey in dataString.parameters) {
-			if (Property.getNode('devices/' + baseDSID + '/generalSettings/' + sKey)!=null) {
-				var node=Property.getNode('devices/' + baseDSID + '/generalSettings/' + sKey);
-				var value=dataString.parameters[sKey];
-				lInfo.logln('for parameter ' + sKey + ' set value to ' + value);
-				if (sKey=='Language')
-					value=getLanguageIDForName(value,baseDSID);
-				if (sKey=='DayScreenSaverType')
-					value=getScreensaverIDForName(value,baseDSID);
-				if (sKey=='NightScreenSaverType')
-					value=getScreensaverIDForName(value,baseDSID);
-				if (sKey=='DayDesign')
-					value=getIconsetIDForName(value,baseDSID);
-				if (sKey=='NightDesign')
-					value=getIconsetIDForName(value,baseDSID);
-
-				Property.setProperty(node.getPath() + "/newvalue",value);
-
-				var deviceIndex=node.getChild('deviceIndex').getValue();
-				var bank=node.getChild('bank').getValue();
-				var index=node.getChild('index').getValue();
-
-				oArray.push({
-					type:'write',
-					dsid:dsidFromIndex(baseDSID,deviceIndex),
-					bank:bank,
-					index:index,
-					value:value,
-					cachePath:node.getPath() +'/value',
-					meta:'general'
-				});
-			} else {
-				lInfo.logln('found nonexisting parameter ' + sKey + ' set value to ' + value);
-			}
-		}
-	}
-
-
-	if (oArray.length>0) {
-		oArray.push({
-			type:'write',
-			dsid:dsidFromIndex(baseDSID,7),
-			bank:127,
-			index:0xD1,
-			value:0x80,
-			finishEvent:'ulux.config',
-			finishEventParameter: '{"actions":"enrichDatastructure","dsid":"' + baseDSID + '"}',
-			cachePath:'update end',
-			meta:'nocache'
-		});
-
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray)}).raise();
-	}
+function setGeneralParameters () {
+    var baseDSID = raisedEvent.parameter.dsid;
+    lInfo.logln('parameterblock: ' + unescape(raisedEvent.parameter.configBlock));
+    var dataString = JSON.parse(unescape(raisedEvent.parameter.configBlock));
+    var oArray = [];
+
+    if (dataString.additionalBehaviour != null) {
+        if (dataString.additionalBehaviour.nightMode != null) {
+            nightMode = dataString.additionalBehaviour.nightMode;
+            oArray = oArray.concat(setadditionalBehaviour(nightMode, dataString.additionalBehaviour.nightStart, dataString.additionalBehaviour.nightEnd, baseDSID));
+        }
+    }
+
+    if (dataString.sounds != null) {
+        for (var sKey in dataString.sounds) {
+            var duration = dataString.sounds[sKey].duration;
+            var delay = dataString.sounds[sKey].delay;
+            var volume = dataString.sounds[sKey].volume;
+            var soundID = getSoundIDForName(baseDSID, dataString.sounds[sKey].soundID);
+
+            lInfo.logln('found Sound with ' + sKey + ' : ' + soundID + ' : ' + duration + ' : ' + delay + ' : ' + volume);
+
+            if (soundID != -1) {
+                oArray = oArray.concat(setSound(baseDSID, sKey, duration, delay, volume, soundID, true));
+            }
+        }
+    }
+    if (dataString.texts != null) {
+        for (var sKey in dataString.texts) {
+            lInfo.logln('found Text for ' + sKey + ' to ' + unescape(dataString.texts[sKey]));
+            oArray = oArray.concat(setBaseText(baseDSID, sKey, unescape(dataString.texts[sKey]), true));
+        }
+    }
+    if (dataString.parameters != null) {
+        for (var sKey in dataString.parameters) {
+            if (Property.getNode('devices/' + baseDSID + '/generalSettings/' + sKey) != null) {
+                var node = Property.getNode('devices/' + baseDSID + '/generalSettings/' + sKey);
+                var value = dataString.parameters[sKey];
+                lInfo.logln('for parameter ' + sKey + ' set value to ' + value);
+                if (sKey === 'Language') {
+                    value = getLanguageIDForName(value, baseDSID);
+                }
+                if (sKey === 'DayScreenSaverType') {
+                    value = getScreensaverIDForName(value, baseDSID);
+                }
+                if (sKey === 'NightScreenSaverType') {
+                    value = getScreensaverIDForName(value, baseDSID);
+                }
+                if (sKey === 'DayDesign') {
+                    value = getIconsetIDForName(value, baseDSID);
+                }
+                if (sKey === 'NightDesign') {
+                    value = getIconsetIDForName(value, baseDSID);
+                }
+
+                Property.setProperty(node.getPath() + '/newvalue', value);
+
+                var deviceIndex = node.getChild('deviceIndex').getValue();
+                var bank = node.getChild('bank').getValue();
+                var index = node.getChild('index').getValue();
+
+                oArray.push({
+                    type: 'write',
+                    dsid: dsidFromIndex(baseDSID, deviceIndex),
+                    bank: bank,
+                    index: index,
+                    value: value,
+                    cachePath: node.getPath() + '/value',
+                    meta: 'general'
+                });
+            } else {
+                lInfo.logln('found nonexisting parameter ' + sKey + ' set value to ' + value);
+            }
+        }
+    }
+
+
+    if (oArray.length > 0) {
+        oArray.push({
+            type: 'write',
+            dsid: dsidFromIndex(baseDSID, 7),
+            bank: 127,
+            index: 0xD1,
+            value: 0x80,
+            finishEvent: 'ulux.config',
+            finishEventParameter: '{"actions":"enrichDatastructure","dsid":"' + baseDSID + '"}',
+            cachePath: 'update end',
+            meta: 'nocache'
+        });
+
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray) }).raise();
+    }
 }
 
-function setadditionalBehaviour(nightMode,nightStart,nightEnd,dsid) {
-	lInfo.logln ('setadditionalBehaviour');
-	var oTargetNodes=[];
-	var oArray=[];
-	if (dsid!=null) {
-		oTargetNodes.push(Property.getNode('devices/'+dsid));
-	} else
-		oTargetNodes=Property.getNode('devices').getChildren();
-
-	for (var iIndex=0;iIndex<oTargetNodes.length;iIndex++) {
-		Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode',nightMode);
-		if (nightStart!=null)
-			Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart',nightStart);
-		if (nightEnd!=null)
-			Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd',nightEnd);
-
-		if (nightMode=='disabled') {
-			oArray=[{
-				type:'writeBitmask',
-				dsid:dsidFromIndex(oTargetNodes[iIndex].getName(),7),
-				bank:127,
-				index:0,
-				bitmask: 0x04,
-				value: 0x00,
-				cachePath:'devices/'+oTargetNodes[iIndex].getName()+'/generalSettings/ConfigFlagsLow/value'
-			}];
-		} else {
-			oArray=[{
-				type:'writeBitmask',
-				dsid:dsidFromIndex(oTargetNodes[iIndex].getName(),7),
-				bank:127,
-				index:0,
-				bitmask: 0x04,
-				value: 0x04,
-				cachePath:'devices/'+oTargetNodes[iIndex].getName()+'/generalSettings/ConfigFlagsLow/value'
-			}];
-		}
-
-
-	}
-
-	updateNightSchedule();
-	Property.store();
-	new Event('ulux.timer',{actions:'sync',dsid:dsid}).raise();
-	return oArray;
+function setadditionalBehaviour (nightMode, nightStart, nightEnd, dsid) {
+    lInfo.logln('setadditionalBehaviour');
+    var oTargetNodes = [];
+    var oArray = [];
+    if (dsid != null) {
+        oTargetNodes.push(Property.getNode('devices/' + dsid));
+    } else {
+        oTargetNodes = Property.getNode('devices').getChildren();
+    }
+
+    for (var iIndex = 0; iIndex < oTargetNodes.length; iIndex++) {
+        Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode', nightMode);
+        if (nightStart != null) {
+            Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart', nightStart);
+        }
+        if (nightEnd != null) {
+            Property.setSavedProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd', nightEnd);
+        }
+
+        if (nightMode === 'disabled') {
+            oArray = [ {
+                type: 'writeBitmask',
+                dsid: dsidFromIndex(oTargetNodes[iIndex].getName(), 7),
+                bank: 127,
+                index: 0,
+                bitmask: 0x04,
+                value: 0x00,
+                cachePath: 'devices/' + oTargetNodes[iIndex].getName() + '/generalSettings/ConfigFlagsLow/value'
+            } ];
+        } else {
+            oArray = [ {
+                type: 'writeBitmask',
+                dsid: dsidFromIndex(oTargetNodes[iIndex].getName(), 7),
+                bank: 127,
+                index: 0,
+                bitmask: 0x04,
+                value: 0x04,
+                cachePath: 'devices/' + oTargetNodes[iIndex].getName() + '/generalSettings/ConfigFlagsLow/value'
+            } ];
+        }
+
+
+    }
+
+    updateNightSchedule();
+    Property.store();
+    new Event('ulux.timer', { actions: 'sync', dsid: dsid }).raise();
+    return oArray;
 }
 
-function updateNightSchedule() {
-	var oTargetNodes=Property.getNode('devices').getChildren();
-    var sRRule = "FREQ=DAILY";
+function updateNightSchedule () {
+    var oTargetNodes = Property.getNode('devices').getChildren();
+    var sRRule = 'FREQ=DAILY';
     var dold = new Date();
     dold.setTime(dold.getTime() - (1000 * 60 * 60 * 24 * 1));
 
-    if (Property.getNode('/system/EventInterpreter/ScheduledEvents')!=null)
-    {
-    	var oScheduleNodes=Property.getNode('/system/EventInterpreter/ScheduledEvents').getChildren();
-    	for (var iIndex=0;iIndex<oScheduleNodes.length;iIndex++) {
-    		var nodeName=oScheduleNodes[iIndex].getName();
-    		if (nodeName.indexOf('ulux.timer')!=-1) {
-    			lInfo.logln('removing node ' + nodeName);
-    			Property.getNode('/system/EventInterpreter/ScheduledEvents').removeChild(nodeName);
-    		}
-    	}
-    }
-
-	for (var iIndex=0;iIndex<oTargetNodes.length;iIndex++) {
-
-		if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode')!=null) {
-			if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode').getValue()=='fixed_time')
-				if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart')!=null)
-					if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd')!=null) {
-						lInfo.logln('found a definition for ' + oTargetNodes[iIndex].getPath());
-						var start=Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart').getValue();
-						var end=Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd').getValue();
-
-			            var iCalStartTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(start/3600))
-	                    + pad(Math.floor(start/60)%60) + pad(start%60);
-
-			            var iCalEndTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(end/3600))
-	                    + pad(Math.floor(end/60)%60) + pad(end%60);
-
-		                lInfo.logln('insert start : ' + iCalStartTime + ' rrule: ' + sRRule);
-		                var timerStart = new TimedICalEvent('ulux.timer', iCalStartTime, sRRule, {
-		                	fixedStart:oTargetNodes[iIndex].getName()
-		                });
-			            Property.setProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightTimerStart', timerStart.raise());
-
-		                lInfo.logln('insert end : ' + iCalEndTime + ' rrule: ' + sRRule);
-		                var timerEnd = new TimedICalEvent('ulux.timer', iCalEndTime, sRRule, {
-		                    fixedEnd:oTargetNodes[iIndex].getName()
-		                });
-			            Property.setProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightTimerEnd', timerEnd.raise());
-					}
-		}
-	}
-
-	getAstroTimes();
-
-	// dusk dawn timer will happens independent from device
-	if (Property.getNode('dusk_timer')!=null) {
-		var scheduleID=Property.getNode('dusk_timer').getValue();
+    if (Property.getNode('/system/EventInterpreter/ScheduledEvents') != null) {
+        var oScheduleNodes = Property.getNode('/system/EventInterpreter/ScheduledEvents').getChildren();
+        for (var iIndex = 0; iIndex < oScheduleNodes.length; iIndex++) {
+            var nodeName = oScheduleNodes[iIndex].getName();
+            if (nodeName.indexOf('ulux.timer') != -1) {
+                lInfo.logln('removing node ' + nodeName);
+                Property.getNode('/system/EventInterpreter/ScheduledEvents').removeChild(nodeName);
+            }
+        }
+    }
+
+    for (var iIndex = 0; iIndex < oTargetNodes.length; iIndex++) {
+
+        if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode') != null) {
+            if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightMode').getValue() === 'fixed_time') {
+                if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart') != null) {
+                    if (Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd') != null) {
+                        lInfo.logln('found a definition for ' + oTargetNodes[iIndex].getPath());
+                        var start = Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightStart').getValue();
+                        var end = Property.getNode(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightEnd').getValue();
+
+                        var iCalStartTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(start / 3600)) +
+                        pad(Math.floor(start / 60) % 60) + pad(start % 60);
+
+                        var iCalEndTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(end / 3600)) +
+                        pad(Math.floor(end / 60) % 60) + pad(end % 60);
+
+                        lInfo.logln('insert start : ' + iCalStartTime + ' rrule: ' + sRRule);
+                        var timerStart = new TimedICalEvent('ulux.timer', iCalStartTime, sRRule, {
+                            fixedStart: oTargetNodes[iIndex].getName()
+                        });
+                        Property.setProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightTimerStart', timerStart.raise());
+
+                        lInfo.logln('insert end : ' + iCalEndTime + ' rrule: ' + sRRule);
+                        var timerEnd = new TimedICalEvent('ulux.timer', iCalEndTime, sRRule, {
+                            fixedEnd: oTargetNodes[iIndex].getName()
+                        });
+                        Property.setProperty(oTargetNodes[iIndex].getPath() + '/additionalBehaviour/nightTimerEnd', timerEnd.raise());
+                    }
+                }
+            }
+        }
+    }
+
+    getAstroTimes();
+
+    // dusk dawn timer will happens independent from device
+    if (Property.getNode('dusk_timer') != null) {
+        var scheduleID = Property.getNode('dusk_timer').getValue();
         var propNode = Property.getNode('/system/EventInterpreter/ScheduledEvents/' + scheduleID);
         if (propNode) {
             propNode.getParent().removeChild(propNode);
         }
-	}
-	if (Property.getNode('dawn_timer')!=null) {
-		var scheduleID=Property.getNode('dawn_timer').getValue();
+    }
+    if (Property.getNode('dawn_timer') != null) {
+        var scheduleID = Property.getNode('dawn_timer').getValue();
         var propNode = Property.getNode('/system/EventInterpreter/ScheduledEvents/' + scheduleID);
         if (propNode) {
             propNode.getParent().removeChild(propNode);
         }
-	}
+    }
 
-    var iCalDuskTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(iDuskSecondsSinceMidnight/3600))
-    + pad(Math.floor(iDuskSecondsSinceMidnight/60)%60) + pad(iDuskSecondsSinceMidnight%60);
+    var iCalDuskTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(iDuskSecondsSinceMidnight / 3600)) +
+    pad(Math.floor(iDuskSecondsSinceMidnight / 60) % 60) + pad(iDuskSecondsSinceMidnight % 60);
 
-    var iCalDawnTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(iDawnSecondsSinceMidnight/3600))
-    + pad(Math.floor(iDawnSecondsSinceMidnight/60)%60) + pad(iDawnSecondsSinceMidnight%60);
+    var iCalDawnTime = dold.getFullYear() + pad(dold.getMonth() + 1) + pad(dold.getDate()) + 'T' + pad(Math.floor(iDawnSecondsSinceMidnight / 3600)) +
+    pad(Math.floor(iDawnSecondsSinceMidnight / 60) % 60) + pad(iDawnSecondsSinceMidnight % 60);
 
     lInfo.logln('insert dusk_timer : ' + iCalDuskTime + ' rrule: ' + sRRule);
     var timerDusk = new TimedICalEvent('ulux.timer', iCalDuskTime, sRRule, {
-    	dusk:'dusk'
+        dusk: 'dusk'
     });
     Property.setProperty('dusk_timer', timerDusk.raise());
 
     lInfo.logln('insert dawn_timer : ' + iCalDawnTime + ' rrule: ' + sRRule);
     var timerDawn = new TimedICalEvent('ulux.timer', iCalDawnTime, sRRule, {
-        dawn:'dawn'
+        dawn: 'dawn'
     });
     Property.setProperty('dawn_timer', timerDawn.raise());
 
 }
 
 
-function processDataDeep(path,dataset) {
-	for (var sKey in dataset) {
-		var oObject=dataset[sKey];
-		if (typeof(oObject)=='object') {
-			if (sKey.indexOf('-')!=-1) {
-				var start=parseInt(sKey.split('-')[0],10);
-				var end=parseInt(sKey.split('-')[1],10);
-				for (var iIndex=start;iIndex<=end;iIndex++)
-					processDataDeep(path+'/'+iIndex,oObject);
-			} else
-				processDataDeep(path+'/'+sKey,oObject);
-		} else {
-			lInfo.logln('save Props: ' + path+'/'+sKey + ' to ' + oObject);
-			Property.setSavedProperty(path+'/'+sKey,oObject);
-		}
-	}
+function processDataDeep (path, dataset) {
+    for (var sKey in dataset) {
+        var oObject = dataset[sKey];
+        if (typeof (oObject) === 'object') {
+            if (sKey.indexOf('-') != -1) {
+                var start = parseInt(sKey.split('-')[0], 10);
+                var end = parseInt(sKey.split('-')[1], 10);
+                for (var iIndex = start; iIndex <= end; iIndex++) {
+                    processDataDeep(path + '/' + iIndex, oObject);
+                }
+            } else {
+                processDataDeep(path + '/' + sKey, oObject);
+            }
+        } else {
+            lInfo.logln('save Props: ' + path + '/' + sKey + ' to ' + oObject);
+            Property.setSavedProperty(path + '/' + sKey, oObject);
+        }
+    }
+}
+
+function ensureDeviceData () {
+    var devices = Property.getNode('devices').getChildren();
+    for (var iIndex = 0; iIndex < devices.length; iIndex++) {
+        var baseDSID = devices[iIndex].getName();
+        for (var jIndex = 0; jIndex < 8; jIndex++) {
+            var deviceDSID = dsidFromIndex(baseDSID, jIndex);
+            if (Property.getNode('deviceCache/' + deviceDSID) == null) {
+                if (Property.getNode('/apartment/zones/zone0/devices/' + deviceDSID) == null) {
+                    Property.setSavedProperty('deviceCache/' + deviceDSID + '/visibility', false);
+                } else {
+                    Property.setSavedProperty('deviceCache/' + deviceDSID + '/visibility', true);
+                    Property.setSavedProperty('deviceCache/' + deviceDSID + '/zoneID', Property.getProperty('/apartment/zones/zone0/devices/' + deviceDSID + '/ZoneID'));
+                    Property.setSavedProperty('deviceCache/' + deviceDSID + '/groupID', Property.getProperty('/apartment/zones/zone0/devices/' + deviceDSID + '/button/activeGroup'));
+                    Property.setSavedProperty('deviceCache/' + deviceDSID + '/buttonID', Property.getProperty('/apartment/zones/zone0/devices/' + deviceDSID + '/button/id'));
+                }
+            }
+        }
+    }
+    Property.store();
 }
 
-function ensureDeviceData() {
-	var devices=Property.getNode('devices').getChildren();
-	for (var iIndex=0;iIndex<devices.length;iIndex++) {
-		var baseDSID=devices[iIndex].getName();
-		for (var jIndex=0;jIndex<8;jIndex++) {
-			var deviceDSID=dsidFromIndex(baseDSID,jIndex);
-			if (Property.getNode("deviceCache/"+deviceDSID)==null) {
-				if (Property.getNode("/apartment/zones/zone0/devices/" + deviceDSID)==null)
-					Property.setSavedProperty("deviceCache/"+deviceDSID +"/visibility",false);
-				else {
-					Property.setSavedProperty("deviceCache/"+deviceDSID +"/visibility",true);
-					Property.setSavedProperty("deviceCache/"+deviceDSID +"/zoneID",Property.getProperty("/apartment/zones/zone0/devices/" + deviceDSID + "/ZoneID"));
-					Property.setSavedProperty("deviceCache/"+deviceDSID +"/groupID",Property.getProperty("/apartment/zones/zone0/devices/" + deviceDSID + "/button/activeGroup"));
-					Property.setSavedProperty("deviceCache/"+deviceDSID +"/buttonID",Property.getProperty("/apartment/zones/zone0/devices/" + deviceDSID + "/button/id"));
-				}
-			}
-		}
-	}
-	Property.store();
+var fWrongPlatform = false;
+if (Property.getNode('/system/version/platform') != null) {
+    if (Property.getNode('/system/version/platform').getValue() === 'dss11-1gb-t1') {
+        fWrongPlatform = true;
+        lWarn.logln(' NOT SUPPORTED ON THAT PLATFORM! NO SCRIPTS WILL EXECUTED !!!');
+    }
 }
+if (!fWrongPlatform) {
+    if (raisedEvent.name === 'running') {
+        lInfo.logln('Ulux knows now how to run (because there was a running event)');
+        Property.load();
+        deployStaticData();
+    } else if (raisedEvent.name === 'ulux.retransmit') {
+        lInfo.logln(' -------------- make a retransmit ------------------ ');
+        if (raisedEvent.parameter.dsid != null) {
+            if (Property.getNode('devices/' + raisedEvent.parameter.dsid) != null) {
+                if (raisedEvent.parameter.actions != null) {
+                    if (raisedEvent.parameter.actions === 'retransmitBaseDSIDSettings') {
+                        retransmitBaseDSIDSettings(raisedEvent.parameter.dsid);
+                    }
+                    if (raisedEvent.parameter.actions === 'retransmitBaseDSIDSettingStep') {
+                        retransmitBaseDSIDSettingStep(raisedEvent.parameter.dsid);
+                    }
+                    if (raisedEvent.parameter.actions === 'retransmitRemaining') {
+                        new Event('ulux.queue', { actions: 'startBulkQueue' }).raise();
+                    }
+                } else {
+                    var queue = reTransmit(raisedEvent.parameter.dsid);
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(queue), EnqueueOnly: true }).raise();
+                    retransmitBaseDSIDSettings(raisedEvent.parameter.dsid);
+                }
+            }
+        }
+
+    } else if (raisedEvent.name === 'DeviceEvent') {
+        var fSkip = false;
+        if (raisedEvent.parameter.action === 'configure') {
+            if (raisedEvent.parameter.configClass == 127) {
+                fSkip = true;
+            }
+        }
+        if (!fSkip) {
+            lInfo.logln('---- ' + raisedEvent.name + '  ----- ');
+            for (var sKey in raisedEvent.parameter) {
+                lInfo.logln('---- parameter ' + sKey + ' : ' + raisedEvent.parameter[sKey] + '  ----- ');
+            }
+
+            if (raisedEvent.parameter.action !== 'configure') {
+                checkAndReadout(raisedEvent.source.dsuid);
+                removeObsoleteDevices();
+            }
+            syncSceneNames(raisedEvent.source.dsuid, (raisedEvent.parameter.action === 'moved'));
+        }
+        //        new Event('heating-controller.heating',{}).raise();
+    } else {
+        lInfo.logln('---- start config caused of ' + raisedEvent.name + '  ----- ');
+        for (var sKey in raisedEvent.parameter) {
+            lInfo.logln('---- parameter ' + sKey + ' : ' + raisedEvent.parameter[sKey] + '  ----- ');
+        }
+        Property.load();
+        if (raisedEvent.parameter.actions === 'ensureDeviceData') {
+            ensureDeviceData();
+        }
+        if (raisedEvent.parameter.actions === 'probeDevice') {
+            removeObsoleteDevices();
+            if (raisedEvent.parameter.dsid != null) {
+                if (Property.getNode('fetching') != null) { Property.getNode('fetching').removeChild(raisedEvent.parameter.dsid); }
+                var oObject = probeDevice(raisedEvent.parameter.dsid);
+                if (oObject.length > 0) {
+                    oObject[oObject.length - 1].finishEvent = 'ulux.config';
+                    oObject[oObject.length - 1].finishEventParameter = '{"actions":"probeDeviceStep2","dsid":"' + raisedEvent.parameter.dsid + '"}';
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject), useBULK: false }).raise();
+                }
+            }
+            Property.store();
+        }
+        if (raisedEvent.parameter.actions === 'probeDeviceStep2') {
+            removeObsoleteDevices();
+            if (raisedEvent.parameter.dsid != null) {
+                if (Property.getNode('devices/' + raisedEvent.parameter.dsid) == null) {
+                    lWarn.logln('device disappeared, stoping process');
+                } else if (Property.getNode('devices/' + raisedEvent.parameter.dsid + '/FirmwareVersion') == null) {
+                    Property.getNode('devices/' + raisedEvent.parameter.dsid).removeChild('generalSettings');
+                    lInfo.logln('restarting probe, not all values are present');
+                    new Event('ulux.config', { actions: 'probeDevice', dsid: raisedEvent.parameter.dsid, time: '+10' }).raise();
+                } else {
+                    var oObject = probeDeviceStep2(raisedEvent.parameter.dsid);
+                    if (oObject.length > 0) {
+                        oObject[oObject.length - 1].finishEvent = 'ulux.config';
+                        oObject[oObject.length - 1].finishEventParameter = '{"actions":"enrichDatastructure","dsid":"' + raisedEvent.parameter.dsid + '"}';
+                        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject), useBULK: false }).raise();
+                    }
+                }
+            }
+            Property.store();
+        }
+        if (raisedEvent.parameter.actions === 'setGeneralParameters') {
+            setGeneralParameters();
+        }
+
+        if (raisedEvent.parameter.actions === 'manuallyReadout') {
+            checkAndReadout();
+            removeObsoleteDevices();
+        }
+
+        if (raisedEvent.parameter.actions === 'updateNightSchedule') {
+            updateNightSchedule();
+        }
+        if (raisedEvent.parameter.actions === 'executeTileSetting') {
+            executeTileSetting();
+        }
+        if (raisedEvent.parameter.actions === 'evaluateTileSetting') {
+            var answerParameter = evaluateTileSetting();
+            answerParameter.request = 'evaluateTileSetting';
+            for (var sKey in answerParameter.tilesConfig) {
+                answerParameter.tilesConfig[sKey].displayText = escape(answerParameter.tilesConfig[sKey].displayText);
+            }
+            for (var sKey in answerParameter.labelsConfig) {
+                answerParameter.labelsConfig[sKey].text = escape(answerParameter.labelsConfig[sKey].text);
+            }
+            for (var sKey in answerParameter.summary.truncatedMainTexts) {
+                answerParameter.summary.truncatedMainTexts[sKey].oldText = escape(answerParameter.summary.truncatedMainTexts[sKey].oldText);
+                answerParameter.summary.truncatedMainTexts[sKey].newText = escape(answerParameter.summary.truncatedMainTexts[sKey].newText);
+            }
+            for (var sKey in answerParameter.summary.truncatedSceneLabels) {
+                answerParameter.summary.truncatedSceneLabels[sKey].oldText = escape(answerParameter.summary.truncatedSceneLabels[sKey].oldText);
+                answerParameter.summary.truncatedSceneLabels[sKey].newText = escape(answerParameter.summary.truncatedSceneLabels[sKey].newText);
+            }
+            for (var sKey in answerParameter.summary.truncatedCenterLabels) {
+                answerParameter.summary.truncatedCenterLabels[sKey].oldText = escape(answerParameter.summary.truncatedCenterLabels[sKey].oldText);
+                answerParameter.summary.truncatedCenterLabels[sKey].newText = escape(answerParameter.summary.truncatedCenterLabels[sKey].newText);
+            }
+            lInfo.logln('summary:' + JSON.stringify(answerParameter.summary));
+            lInfo.logln('dsidConfig:' + JSON.stringify(answerParameter.dsidConfig));
+            lInfo.logln('tilesConfig:' + JSON.stringify(answerParameter.tilesConfig));
+            lInfo.logln('labelsConfig:' + JSON.stringify(answerParameter.labelsConfig));
+            new Event('ulux.answer', { summary: JSON.stringify(answerParameter.summary),
+                dsidConfig: JSON.stringify(answerParameter.dsidConfig),
+                tilesConfig: JSON.stringify(answerParameter.tilesConfig),
+                labelsConfig: JSON.stringify(answerParameter.labelsConfig) }).raise();
+        }
+        if (raisedEvent.parameter.actions === 'setCenterSymbol') {
+            try {
+                var baseDSID = raisedEvent.parameter.dsid;
+                var dsidIndex = raisedEvent.parameter.dsidIndex;
+
+                var config = 15;
+                if (raisedEvent.parameter.config != null) {
+                    config = raisedEvent.parameter.config;
+                } else {
+                    config = getIndexForCenterSymbol(raisedEvent.parameter.type);
+                }
+
+                var text;
+                if (raisedEvent.parameter.text != null) {
+                    text = unescape(unescape(raisedEvent.parameter.text));
+                }
+
+                var index = parseInt('' + raisedEvent.parameter.index, 10);
+
+                var oObject = setCenterSymbol(baseDSID, dsidIndex, config, text, index, false);
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
 
-var fWrongPlatform=false;
-if (Property.getNode('/system/version/platform')!=null)
-	if (Property.getNode('/system/version/platform').getValue()=='dss11-1gb-t1') {
-		fWrongPlatform=true;
-		lWarn.logln(' NOT SUPPORTED ON THAT PLATFORM! NO SCRIPTS WILL EXECUTED !!!');
-	} 
-if (!fWrongPlatform) { 
-	if (raisedEvent.name=="running"){
-		lInfo.logln('Ulux knows now how to run (because there was a running event)');
-		Property.load();
-		deployStaticData();
-	}
-	else if (raisedEvent.name=='ulux.retransmit') {
-		lInfo.logln(" -------------- make a retransmit ------------------ ")
-		if (raisedEvent.parameter.dsid!=null) 
-			if (Property.getNode('devices/' + raisedEvent.parameter.dsid)!=null) {
-				if (raisedEvent.parameter.actions!=null) {
-					if (raisedEvent.parameter.actions=='retransmitBaseDSIDSettings') {
-						retransmitBaseDSIDSettings(raisedEvent.parameter.dsid);
-					}
-					if (raisedEvent.parameter.actions=='retransmitBaseDSIDSettingStep') {
-						retransmitBaseDSIDSettingStep(raisedEvent.parameter.dsid);
-					}
-					if (raisedEvent.parameter.actions=='retransmitRemaining') {
-						new Event('ulux.queue',{actions:'startBulkQueue'}).raise();
-					}
-				} else {
-					var queue=reTransmit(raisedEvent.parameter.dsid);
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(queue),EnqueueOnly:true}).raise();
-					retransmitBaseDSIDSettings(raisedEvent.parameter.dsid);
-				}
-			}
-				
-	}
-	else if (raisedEvent.name=='DeviceEvent') {
-		var fSkip=false;
-		if (raisedEvent.parameter.action=='configure') {
-			if (raisedEvent.parameter.configClass==127)
-				fSkip=true;
-		}
-		if (!fSkip) {
-			lInfo.logln('---- ' + raisedEvent.name + '  ----- ');
-			for (var sKey in raisedEvent.parameter) {
-				lInfo.logln('---- parameter ' + sKey + ' : ' + raisedEvent.parameter[sKey] + '  ----- ');
-			}
-			
-			if (raisedEvent.parameter.action!='configure') {
-				checkAndReadout(raisedEvent.source.dsuid);
-			    removeObsoleteDevices();
-			}
-		    syncSceneNames(raisedEvent.source.dsuid,(raisedEvent.parameter.action=="moved"));
-		}
-	//	    new Event('heating-controller.heating',{}).raise();
-	} else {
-		lInfo.logln('---- start config caused of ' + raisedEvent.name + '  ----- ');
-		for (var sKey in raisedEvent.parameter) {
-			lInfo.logln('---- parameter ' + sKey + ' : ' + raisedEvent.parameter[sKey] + '  ----- ');
-		}
-		Property.load();
-		if (raisedEvent.parameter.actions=="ensureDeviceData") {
-			ensureDeviceData();
-		}
-		if (raisedEvent.parameter.actions=='probeDevice') {
-			removeObsoleteDevices();
-			if (raisedEvent.parameter.dsid!=null) {
-				if (Property.getNode('fetching')!=null)
-					Property.getNode('fetching').removeChild(raisedEvent.parameter.dsid);
-				var oObject=probeDevice(raisedEvent.parameter.dsid);
-				if (oObject.length>0) {
-					oObject[oObject.length-1].finishEvent='ulux.config';
-					oObject[oObject.length-1].finishEventParameter='{"actions":"probeDeviceStep2","dsid":"'+raisedEvent.parameter.dsid+'"}';
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject),useBULK:false}).raise();
-				}
-			}
-			Property.store();
-		}
-		if (raisedEvent.parameter.actions=='probeDeviceStep2') {
-			removeObsoleteDevices();
-			if (raisedEvent.parameter.dsid!=null) {
-				if (Property.getNode('devices/'+raisedEvent.parameter.dsid)==null) {
-					lWarn.logln('device disappeared, stoping process');
-				} else {
-					if (Property.getNode('devices/' + raisedEvent.parameter.dsid + '/FirmwareVersion')==null){
-						Property.getNode('devices/' + raisedEvent.parameter.dsid).removeChild('generalSettings');
-						lInfo.logln('restarting probe, not all values are present');
-						new Event('ulux.config',{actions:'probeDevice',dsid:raisedEvent.parameter.dsid,time:'+10'}).raise();
-					} else {
-						var oObject=probeDeviceStep2(raisedEvent.parameter.dsid);
-						if (oObject.length>0) {
-							oObject[oObject.length-1].finishEvent='ulux.config';
-							oObject[oObject.length-1].finishEventParameter='{"actions":"enrichDatastructure","dsid":"'+raisedEvent.parameter.dsid+'"}';
-							new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject),useBULK:false}).raise();
-						}
-					}
-				}
-			}
-			Property.store();
-		}
-		if (raisedEvent.parameter.actions=="setGeneralParameters") {
-			setGeneralParameters();
-		}
-	
-		if (raisedEvent.parameter.actions=='manuallyReadout') {
-		    checkAndReadout();
-		    removeObsoleteDevices();
-		}
-	
-		if (raisedEvent.parameter.actions=='updateNightSchedule') {
-			updateNightSchedule();
-		}
-		if (raisedEvent.parameter.actions=='executeTileSetting') {
-			executeTileSetting();
-		}
-		if (raisedEvent.parameter.actions=='evaluateTileSetting') {
-				var answerParameter=evaluateTileSetting();
-				answerParameter.request='evaluateTileSetting';
-				for (var sKey in answerParameter.tilesConfig) {
-					answerParameter.tilesConfig[sKey].displayText=escape(answerParameter.tilesConfig[sKey].displayText);
-				}
-				for (var sKey in answerParameter.labelsConfig) {
-					answerParameter.labelsConfig[sKey].text=escape(answerParameter.labelsConfig[sKey].text);
-				}
-				for (var sKey in answerParameter.summary.truncatedMainTexts) {
-					answerParameter.summary.truncatedMainTexts[sKey].oldText=escape(answerParameter.summary.truncatedMainTexts[sKey].oldText);
-					answerParameter.summary.truncatedMainTexts[sKey].newText=escape(answerParameter.summary.truncatedMainTexts[sKey].newText);
-				}
-				for (var sKey in answerParameter.summary.truncatedSceneLabels) {
-					answerParameter.summary.truncatedSceneLabels[sKey].oldText=escape(answerParameter.summary.truncatedSceneLabels[sKey].oldText);
-					answerParameter.summary.truncatedSceneLabels[sKey].newText=escape(answerParameter.summary.truncatedSceneLabels[sKey].newText);
-				}
-				for (var sKey in answerParameter.summary.truncatedCenterLabels) {
-					answerParameter.summary.truncatedCenterLabels[sKey].oldText=escape(answerParameter.summary.truncatedCenterLabels[sKey].oldText);
-					answerParameter.summary.truncatedCenterLabels[sKey].newText=escape(answerParameter.summary.truncatedCenterLabels[sKey].newText);
-				}
-				lInfo.logln("summary:" + JSON.stringify(answerParameter.summary));
-				lInfo.logln("dsidConfig:" + JSON.stringify(answerParameter.dsidConfig));
-				lInfo.logln("tilesConfig:" + JSON.stringify(answerParameter.tilesConfig));
-				lInfo.logln("labelsConfig:" + JSON.stringify(answerParameter.labelsConfig));
-				new Event('ulux.answer',{
-					summary:JSON.stringify(answerParameter.summary),
-					dsidConfig:JSON.stringify(answerParameter.dsidConfig),
-					tilesConfig:JSON.stringify(answerParameter.tilesConfig),
-					labelsConfig:JSON.stringify(answerParameter.labelsConfig)}).raise();
-		}
-		if (raisedEvent.parameter.actions=='setCenterSymbol') {
-			try {
-				var baseDSID = raisedEvent.parameter.dsid;
-				var dsidIndex = raisedEvent.parameter.dsidIndex;
-	
-				var config=15;
-				if (raisedEvent.parameter.config!=null)
-					config = raisedEvent.parameter.config;
-				else
-					config=getIndexForCenterSymbol(raisedEvent.parameter.type);
-	
-				var text;
-				if (raisedEvent.parameter.text!=null)
-					text=unescape(unescape(raisedEvent.parameter.text));
-	
-				var index= parseInt("" + raisedEvent.parameter.index,10);
-	
-				var oObject=setCenterSymbol(baseDSID,dsidIndex,config,text,index,false);
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-	
-		}
-		if (raisedEvent.parameter.actions=='fetchPageNames') {
-			try {
-				var oObject=fetchPageNames(raisedEvent.parameter.dsid);
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject),useBULK:false}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-	
-		}
-		if (raisedEvent.parameter.actions=='setBaseDSIDSettings') {
-			setBaseDSIDSettings();
-		}
-		if (raisedEvent.parameter.actions=='setBaseDSIDSettings1') {
-			setBaseDSIDSettings1();
-		}
-		if (raisedEvent.parameter.actions=='setBaseDSIDSettings2') {
-			setBaseDSIDSettings2();
-		}
-		if (raisedEvent.parameter.actions=='enrichDatastructure') {
-			enrichDataStructure();
-		}
-		if (raisedEvent.parameter.actions=='saveSceneLabel') {
-			try {
-				var baseDSID = raisedEvent.parameter.dsid;
-				var dsidIndex = raisedEvent.parameter.dsidIndex;
-				var text = unescape(raisedEvent.parameter.text);
-				var buttonNumber = raisedEvent.parameter.buttonNumber;
-				var clickType = raisedEvent.parameter.clickType;
-				var sceneLabelIndex = raisedEvent.parameter.index;
-				var fSync=false;
-				if (raisedEvent.parameter.sync!=null)
-					fSync=("" + raisedEvent.parameter.sync)=='true';
-				var noFinish=false;
-				if (raisedEvent.parameter.noFinish)
-					noFinish=raisedEvent.parameter.noFinish;
-	
-				var oObject=saveSceneLabel(baseDSID,dsidIndex,text,buttonNumber,clickType,sceneLabelIndex,noFinish,fSync,false);
-				Property.store();
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-		}
-		if (raisedEvent.parameter.actions=='setTile') {
-			try {
-				var baseDSID = raisedEvent.parameter.dsid;
-				var index = raisedEvent.parameter.index;
-				var pageIndex = raisedEvent.parameter.page;
-				var sortIndex = raisedEvent.parameter.sortIndex;
-				var libraryID = raisedEvent.parameter.libraryID;
-				var dsidIndex = raisedEvent.parameter.dsidIndex;
-				var areaIndex = raisedEvent.parameter.areaIndex;
-				var displayText = unescape(unescape(raisedEvent.parameter.displayText));
-				var jokerCount = raisedEvent.parameter.jokerCount;
-				var noFinish=false;
-				if (raisedEvent.parameter.noFinish)
-					noFinish=raisedEvent.parameter.noFinish;
-	
-				var oObject=setTile(baseDSID,index,pageIndex,sortIndex,libraryID,dsidIndex,areaIndex,displayText,jokerCount,noFinish);
-				for (var iIndex=0;iIndex<oObject.length;iIndex++)
-					oObject[iIndex].forced=true;
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-		}
-		if (raisedEvent.parameter.actions=='activateDynamicConfiguration') {
-			try {
-				var oObject=activateDynamicConfiguration();
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-		}
-		if (raisedEvent.parameter.actions=='setSound') {
-			try {
-				var baseDSID = raisedEvent.parameter.dsid;
-				var soundName = raisedEvent.parameter.soundName;
-				var duration = raisedEvent.parameter.duration;
-				var delay = raisedEvent.parameter.delay;
-				var volume = raisedEvent.parameter.volume;
-				var soundID = raisedEvent.parameter.soundID;
-	
-				var oObject=setSound(baseDSID,soundName,duration,delay,volume,soundID,false);
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-		}
-		if (raisedEvent.parameter.actions=='calibrateSensor') {
-			var oObject=[];
-			if (raisedEvent.parameter.dsid!=null) {
-				if (raisedEvent.parameter.realTemperature!=null)
-					oObject=oObject.concat(calibrateTemperature(raisedEvent.parameter.dsid,raisedEvent.parameter.realTemperature));
-				if (raisedEvent.parameter.realHumidity!=null)
-					oObject=oObject.concat(calibrateHuminity(raisedEvent.parameter.dsid,raisedEvent.parameter.realHumidity));
-			}
-			if (oObject.length==0)
-				new Event('ulux.config',{"actions":"error","message":"no sensor found/calibrated"}).raise();
-			else {
-				oObject.push({
-					type:'write',
-					dsid:dsidFromIndex(raisedEvent.parameter.dsid,7),
-					bank:127,
-					index:0xD1,
-					value:0x80,
-					cachePath:'close updatescreen',
-					finishEvent:'ulux.config',
-					finishEventParameter:'{"actions":"updateSensorData","dsid":"'+dsidFromIndex(raisedEvent.parameter.dsid,0)+'"}',
-					meta:'nocache'
-				});
-				new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			}
-		}
-		if (raisedEvent.parameter.actions=="updateSensorData") {
-			var baseDSID=dsidFromIndex(raisedEvent.parameter.dsid,0);
-			if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs')!=null) {
-				var sensorNodes=Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
-				for (var iIndex=0;iIndex<sensorNodes.length;iIndex++) {
-					if ((sensorNodes[iIndex].getChild('type').getValue()==9) || (sensorNodes[iIndex].getChild('type').getValue()==13)) {					
-						var oDeviceSensor=getDevices().byDSUID(baseDSID);
-						var sensorValue=oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
-						lInfo.logln("fetching sensorvalue after update: "+ sensorValue);
-					}
-				}
-			}
-			new Event("ulux.finish",{}).raise();
-		}
-	
-		if (raisedEvent.parameter.actions=='syncSceneNames') {
-			syncSceneNames();
-		}
-	
-		if (raisedEvent.parameter.actions=='fetchGeneralSettings') {
-			if (raisedEvent.parameter.refresh!=null)
-				if (raisedEvent.parameter.refresh=='true') {
-					Property.getNode("devices").removeChild(raisedEvent.parameter.dsid);
-					Property.store();
-				}
-			if (raisedEvent.parameter.dsid!=null) {
-				var oObject=fetchGeneralSettings(raisedEvent.parameter.dsid);
-				if (oObject.length>0)
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject),useBULK:false}).raise();
-			}
-		}
-	
-		if (raisedEvent.parameter.actions=='fetchAll') {
-			if (raisedEvent.parameter.dsid!=null) {
-				if (Property.getNode('fetching')!=null)
-					Property.getNode('fetching').removeChild(raisedEvent.parameter.dsid);
-				var oObject=fetchAll(raisedEvent.parameter.dsid);
-				if (oObject.length>0) {
-					oObject[oObject.length-1].finishEvent='ulux.config';
-					oObject[oObject.length-1].finishEventParameter='{"actions":"enrichDatastructure","dsid":"'+raisedEvent.parameter.dsid+'"}';
-					new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject),useBULK:false}).raise();
-				}
-			}
-			Property.store();
-		}
-		if (raisedEvent.parameter.actions=='setBaseText') {
-			try {
-				if (raisedEvent.parameter.dsid!=null)
-					if (raisedEvent.parameter.name!=null)
-						if (raisedEvent.parameter.text!=null) {
-							var oObject=setBaseText(raisedEvent.parameter.dsid,raisedEvent.parameter.name,unescape(raisedEvent.parameter.text),false);
-							if (oObject.length>0)
-								new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-						}
-			} catch (e) {
-				lWarn.logln('Error ' + e);
-			}
-		}
-	
-	
-		if (raisedEvent.parameter.actions=='setDeviceParameter') {
-			if (raisedEvent.parameter.dsid!=null)
-				if (raisedEvent.parameter.values!=null) {
-					var oObject=setDeviceParameter();
-					if (oObject.length>0)
-						new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-				}
-		}
-	
-		if (raisedEvent.parameter.actions=='removeObsoleteDevices') {
-			removeObsoleteDevices();
-		}
-
-		if (raisedEvent.parameter.actions=='setAdditionalBehaviour') {
-			lInfo.logln('setadditionalBehaviour');
-			var nightMode=raisedEvent.parameter.nightMode;
-			var nightStart=raisedEvent.parameter.nightStart;
-			var nightEnd=raisedEvent.parameter.nightEnd;
-			var oObject;
-			if (raisedEvent.parameter.dsid!=null)
-				oObject=setadditionalBehaviour(nightMode,nightStart,nightEnd,raisedEvent.parameter.dsid);
-			else
-				oObject=setadditionalBehaviour(nightMode,nightStart,nightEnd);
-			if (oObject.length>0) {
-				oObject.push({
-					type:'write',
-					dsid:raisedEvent.parameter.dsid,
-					bank:127,
-					index:0xD1,
-					value:0x80,
-					cachePath:'close updatescreen',
-					meta:'nocache'
-				})
-				new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oObject)}).raise();
-			}
-		}
-	
-		if (raisedEvent.parameter.actions=="reregisterDevice") {
-			if (raisedEvent.parameter.dsid!=null) {
-				for (var iIndex=0;iIndex<8;iIndex++) {
-					try {
-						var oDevice=getDevices().byDSUID(dsidFromIndex(raisedEvent.parameter.dsid,iIndex));
-						oDevice.reregister();
-						lInfo.logln('started reregisterDevice for ' + dsidFromIndex(raisedEvent.parameter.dsid,iIndex));
-					} catch (e) {
-						lWarn.logln('error on reregister device ' + e);
-					}
-				}
-			}
-	
-		}
-	
-	}
+        }
+        if (raisedEvent.parameter.actions === 'fetchPageNames') {
+            try {
+                var oObject = fetchPageNames(raisedEvent.parameter.dsid);
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject), useBULK: false }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+
+        }
+        if (raisedEvent.parameter.actions === 'setBaseDSIDSettings') {
+            setBaseDSIDSettings();
+        }
+        if (raisedEvent.parameter.actions === 'setBaseDSIDSettings1') {
+            setBaseDSIDSettings1();
+        }
+        if (raisedEvent.parameter.actions === 'setBaseDSIDSettings2') {
+            setBaseDSIDSettings2();
+        }
+        if (raisedEvent.parameter.actions === 'enrichDatastructure') {
+            enrichDataStructure();
+        }
+        if (raisedEvent.parameter.actions === 'saveSceneLabel') {
+            try {
+                var baseDSID = raisedEvent.parameter.dsid;
+                var dsidIndex = raisedEvent.parameter.dsidIndex;
+                var text = unescape(raisedEvent.parameter.text);
+                var buttonNumber = raisedEvent.parameter.buttonNumber;
+                var clickType = raisedEvent.parameter.clickType;
+                var sceneLabelIndex = raisedEvent.parameter.index;
+                var fSync = false;
+                if (raisedEvent.parameter.sync != null) {
+                    fSync = ('' + raisedEvent.parameter.sync) === 'true';
+                }
+                var noFinish = false;
+                if (raisedEvent.parameter.noFinish) {
+                    noFinish = raisedEvent.parameter.noFinish;
+                }
+
+                var oObject = saveSceneLabel(baseDSID, dsidIndex, text, buttonNumber, clickType, sceneLabelIndex, noFinish, fSync, false);
+                Property.store();
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+        }
+        if (raisedEvent.parameter.actions === 'setTile') {
+            try {
+                var baseDSID = raisedEvent.parameter.dsid;
+                var index = raisedEvent.parameter.index;
+                var pageIndex = raisedEvent.parameter.page;
+                var sortIndex = raisedEvent.parameter.sortIndex;
+                var libraryID = raisedEvent.parameter.libraryID;
+                var dsidIndex = raisedEvent.parameter.dsidIndex;
+                var areaIndex = raisedEvent.parameter.areaIndex;
+                var displayText = unescape(unescape(raisedEvent.parameter.displayText));
+                var jokerCount = raisedEvent.parameter.jokerCount;
+                var noFinish = false;
+                if (raisedEvent.parameter.noFinish) {
+                    noFinish = raisedEvent.parameter.noFinish;
+                }
+
+                var oObject = setTile(baseDSID, index, pageIndex, sortIndex, libraryID, dsidIndex, areaIndex, displayText, jokerCount, noFinish);
+                for (var iIndex = 0; iIndex < oObject.length; iIndex++) {
+                    oObject[iIndex].forced = true;
+                }
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+        }
+        if (raisedEvent.parameter.actions === 'activateDynamicConfiguration') {
+            try {
+                var oObject = activateDynamicConfiguration();
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+        }
+        if (raisedEvent.parameter.actions === 'setSound') {
+            try {
+                var baseDSID = raisedEvent.parameter.dsid;
+                var soundName = raisedEvent.parameter.soundName;
+                var duration = raisedEvent.parameter.duration;
+                var delay = raisedEvent.parameter.delay;
+                var volume = raisedEvent.parameter.volume;
+                var soundID = raisedEvent.parameter.soundID;
+
+                var oObject = setSound(baseDSID, soundName, duration, delay, volume, soundID, false);
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+        }
+        if (raisedEvent.parameter.actions === 'calibrateSensor') {
+            var oObject = [];
+            if (raisedEvent.parameter.dsid != null) {
+                if (raisedEvent.parameter.realTemperature != null) {
+                    oObject = oObject.concat(calibrateTemperature(raisedEvent.parameter.dsid, raisedEvent.parameter.realTemperature));
+                }
+                if (raisedEvent.parameter.realHumidity != null) {
+                    oObject = oObject.concat(calibrateHuminity(raisedEvent.parameter.dsid, raisedEvent.parameter.realHumidity));
+                }
+            }
+            if (oObject.length === 0) {
+                new Event('ulux.config', { actions: 'error', message: 'no sensor found/calibrated' }).raise();
+            } else {
+                oObject.push({
+                    type: 'write',
+                    dsid: dsidFromIndex(raisedEvent.parameter.dsid, 7),
+                    bank: 127,
+                    index: 0xD1,
+                    value: 0x80,
+                    cachePath: 'close updatescreen',
+                    finishEvent: 'ulux.config',
+                    finishEventParameter: '{"actions":"updateSensorData","dsid":"' + dsidFromIndex(raisedEvent.parameter.dsid, 0) + '"}',
+                    meta: 'nocache'
+                });
+                new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+            }
+        }
+        if (raisedEvent.parameter.actions === 'updateSensorData') {
+            var baseDSID = dsidFromIndex(raisedEvent.parameter.dsid, 0);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs') != null) {
+                var sensorNodes = Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/sensorInputs').getChildren();
+                for (var iIndex = 0; iIndex < sensorNodes.length; iIndex++) {
+                    if ((sensorNodes[iIndex].getChild('type').getValue() == 9) || (sensorNodes[iIndex].getChild('type').getValue() == 13)) {
+                        var oDeviceSensor = getDevices().byDSUID(baseDSID);
+                        var sensorValue = oDeviceSensor.getSensorValue(sensorNodes[iIndex].getChild('index').getValue());
+                        lInfo.logln('fetching sensorvalue after update: ' + sensorValue);
+                    }
+                }
+            }
+            new Event('ulux.finish', {}).raise();
+        }
+
+        if (raisedEvent.parameter.actions === 'syncSceneNames') {
+            syncSceneNames();
+        }
+
+        if (raisedEvent.parameter.actions === 'fetchGeneralSettings') {
+            if (raisedEvent.parameter.refresh != null) {
+                if (raisedEvent.parameter.refresh === 'true') {
+                    Property.getNode('devices').removeChild(raisedEvent.parameter.dsid);
+                    Property.store();
+                }
+            }
+            if (raisedEvent.parameter.dsid != null) {
+                var oObject = fetchGeneralSettings(raisedEvent.parameter.dsid);
+                if (oObject.length > 0) {
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject), useBULK: false }).raise();
+                }
+            }
+        }
+
+        if (raisedEvent.parameter.actions === 'fetchAll') {
+            if (raisedEvent.parameter.dsid != null) {
+                if (Property.getNode('fetching') != null) { Property.getNode('fetching').removeChild(raisedEvent.parameter.dsid); }
+                var oObject = fetchAll(raisedEvent.parameter.dsid);
+                if (oObject.length > 0) {
+                    oObject[oObject.length - 1].finishEvent = 'ulux.config';
+                    oObject[oObject.length - 1].finishEventParameter = '{"actions":"enrichDatastructure","dsid":"' + raisedEvent.parameter.dsid + '"}';
+                    new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject), useBULK: false }).raise();
+                }
+            }
+            Property.store();
+        }
+        if (raisedEvent.parameter.actions === 'setBaseText') {
+            try {
+                if (raisedEvent.parameter.dsid != null) {
+                    if (raisedEvent.parameter.name != null) {
+                        if (raisedEvent.parameter.text != null) {
+                            var oObject = setBaseText(raisedEvent.parameter.dsid, raisedEvent.parameter.name, unescape(raisedEvent.parameter.text), false);
+                            if (oObject.length > 0) {
+                                new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                            }
+                        }
+                    }
+                }
+            } catch (e) {
+                lWarn.logln('Error ' + e);
+            }
+        }
+
+
+        if (raisedEvent.parameter.actions === 'setDeviceParameter') {
+            if (raisedEvent.parameter.dsid != null) {
+                if (raisedEvent.parameter.values != null) {
+                    var oObject = setDeviceParameter();
+                    if (oObject.length > 0) {
+                        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+                    }
+                }
+            }
+        }
+
+        if (raisedEvent.parameter.actions === 'removeObsoleteDevices') {
+            removeObsoleteDevices();
+        }
+
+        if (raisedEvent.parameter.actions === 'setAdditionalBehaviour') {
+            lInfo.logln('setadditionalBehaviour');
+            var nightMode = raisedEvent.parameter.nightMode;
+            var nightStart = raisedEvent.parameter.nightStart;
+            var nightEnd = raisedEvent.parameter.nightEnd;
+            var oObject;
+            if (raisedEvent.parameter.dsid != null) {
+                oObject = setadditionalBehaviour(nightMode, nightStart, nightEnd, raisedEvent.parameter.dsid);
+            } else {
+                oObject = setadditionalBehaviour(nightMode, nightStart, nightEnd);
+            }
+            if (oObject.length > 0) {
+                oObject.push({
+                    type: 'write',
+                    dsid: raisedEvent.parameter.dsid,
+                    bank: 127,
+                    index: 0xD1,
+                    value: 0x80,
+                    cachePath: 'close updatescreen',
+                    meta: 'nocache'
+                });
+                new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oObject) }).raise();
+            }
+        }
+
+        if (raisedEvent.parameter.actions === 'reregisterDevice') {
+            if (raisedEvent.parameter.dsid != null) {
+                for (var iIndex = 0; iIndex < 8; iIndex++) {
+                    try {
+                        var oDevice = getDevices().byDSUID(dsidFromIndex(raisedEvent.parameter.dsid, iIndex));
+                        oDevice.reregister();
+                        lInfo.logln('started reregisterDevice for ' + dsidFromIndex(raisedEvent.parameter.dsid, iIndex));
+                    } catch (e) {
+                        lWarn.logln('error on reregister device ' + e);
+                    }
+                }
+            }
+
+        }
+
+    }
 
 }
diff --git a/scripts/ulux-defaults.js b/scripts/ulux-defaults.js
index 6795850ba937a8921e70474805bcb4f6b206ebc0..347ce82933e8db744583608bb0e5b85a085642a9 100644
--- a/scripts/ulux-defaults.js
+++ b/scripts/ulux-defaults.js
@@ -1,187 +1,541 @@
-//https://digitalstrom-zrh.atlassian.net/wiki/spaces/DSD/pages/524157145/ULUX+-+Default+Parameters
+// https://digitalstrom-zrh.atlassian.net/wiki/spaces/DSD/pages/524157145/ULUX+-+Default+Parameters
 
-var dataset101={
-	'pages':{'0':{'0':{id:0,SortIndex:1,LibraryID: 17,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Licht'},
-				'1':{id:1,SortIndex:2,LibraryID: 33,dsidIndex:2,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Beschattung'},
-				'2':{id:2,SortIndex:3,LibraryID:161,dsidIndex:3,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Temperatur'},
-				'3':{id:3,SortIndex:4,LibraryID:193,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Anwesenheit'},
-				'id':0,
-				'dsidIndex':1,
-				'centerSymbolConfig':3},
-		   '1-9':{'0-3':{SortIndex:0,LibraryID:0,dsidIndex:0,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:''},
-				'dsidIndex':1,
-				'centerSymbolConfig':3}},
-	'scenes':{'0-71': {'dsidIndex':0,'ClickType':0,'ButtonNumber':0,'text':''}},
-	'baseText':{'HomeNameText/value':'Mein Zuhause','AllOffText/value':'Alles aus','DeepOffText/value':'Tiefschlaf',
-				'BoostText/value':'Boost','PanicAlarmText/value':'Panikalarm','FireAlarmText/value':'Feuerlarm','SmokeAlarmText/value':'Rauchalarm','WaterAlarmText/value':'Wasseralarm',
-				'GasAlarmText/value':'Gasalarm','Alarm1Text/value':'Alarm 1','Alarm2Text/value':'Alarm 2','Alarm3Text/value':'Alarm 3','Alarm4Text/value':'Alarm 4',
-				'BreakInAlarmText/value':'Einbruch!','DoorBell0Text/value':'Türklingel','DoorBell1Text/value':'2. Türklingel','DoorBell2Text/value':'3. Türklingel','DoorBell3Text/value':'4. Türklingel'},
-	'pagenames':{0:{PageIndex:1,text:'Seite 1'},
-				 1:{PageIndex:2,text:'Seite 2'},
-				 2:{PageIndex:3,text:'Seite 3'},
-				 3:{PageIndex:4,text:'Seite 4'},
-				 4:{PageIndex:5,text:'Seite 5'},
-				 5:{PageIndex:6,text:'Seite 6'},
-				 6:{PageIndex:7,text:'Seite 7'},
-				 7:{PageIndex:8,text:'Seite 8'},
-				 8:{PageIndex:9,text:'Seite 9'},
-				 9:{PageIndex:10,text:'Seite 10'}},
-	'generalSettings': {'ConfigFlagsLow/value':44,'ConfigFlagsHigh/value':240,'DisabledAlarmFlagsLow/value':0,
-		'DisabledAlarmFlagHigh/value':0,'ResetableAlarmFlagsLow/value':0,'ResetableAlarmFlagsHigh/value':0,
-		'JokerSubPageCountMaskLow/value':255,'JokerSubPageCountMaskHigh/value':255,'DayDesign/value':3,
-		'Language/value':1,'DayScreenSaverType/value':1,'ProximitySensorSensibility/value':50,'MotionDetectorLEDColors/value':2,
-		'BreakInAlarmConfig/value':0,'LongPressTime/value':35,'FadeInTime/value':2,'FadeOutTime/value':50,
-		'MenuLevelUpTime/value':20,'MenuLevelIncDecExtraTime/value':30,'DoorBellPageTime/value':10,'NightDesign/value':4,
-		'NightScreenSaverType/value':2,'DoorOpenerConfig0/value':0,'DoorOpenerConfig1/value':0,'DoorOpenerConfig2/value':0,
-		'DoorOpenerConfig3/value':0,'DayMainPageTime/value':15,'DayScreenSaverTime/value':40,
-		'DayStandByTime/value':20,'DayMinIntensity/value':20,'DayMaxIntensity/value':100,
-		'NightMainPageTime/value':15,'NightScreenSaverTime/value':40,'NightStandByTime/value':20,'NightMinIntensity/value':0,
-		'NightMaxIntensity/value':50,'ScreenSaverConfig/value':1,'TemperatureCorrection/value':-15,'HumidityCorrection/value':0,
-		'VentilationLevelCountMaskLow/value':255,'VentilationLevelCountMaskHigh/value':255,'AirRecirculationLevelCountMaskLow/value':255,'AirRecirculationLevelCountMaskHigh/value':255,
-		'ApartmentVentilationLevelCountMaskLow/value':255,'ApartmentVentilationLevelCountMaskHigh/value':255,
-		'TemperatureMin0/value':8,'TemperatureMin1/value':8,'TemperatureMin2/value':8,'TemperatureMin3/value':8,
-		'TemperatureMin4/value':8,'TemperatureMin5/value':8,'TemperatureMin6/value':8,'TemperatureMin7/value':8,
-		'TemperatureMax0/value':30,'TemperatureMax1/value':30,'TemperatureMax2/value':30,'TemperatureMax3/value':30,
-		'TemperatureMax4/value':30,'TemperatureMax5/value':30,'TemperatureMax6/value':30,'TemperatureMax7/value':30,
-		'HomeInSound_id/value':55,     'HomeOutSound_id/value':49,     'BreakInAlarmSound_id/value':4,        'PanicAlarmSound_id/value':4,       
-		'HomeInSound_volume/value':100,'HomeOutSound_volume/value':100,'BreakInAlarmSound_volume/value':100,  'PanicAlarmSound_volume/value':100, 
-		'HomeInSound_duration/value':0,'HomeOutSound_duration/value':0,'BreakInAlarmSound_duration/value':300,'PanicAlarmSound_duration/value':10,
-		'HomeInSound_delay/value':0,   'HomeOutSound_delay/value':0,   'BreakInAlarmSound_delay/value':0,     'PanicAlarmSound_delay/value':0,    
-		'Alarm1Sound_id/value':4,       'Alarm2Sound_id/value':4,       'Alarm3Sound_id/value':4,       'Alarm4Sound_id/value':4,       
-		'Alarm1Sound_volume/value':100, 'Alarm2Sound_volume/value':100, 'Alarm3Sound_volume/value':100, 'Alarm4Sound_volume/value':100, 
-		'Alarm1Sound_duration/value':10,'Alarm2Sound_duration/value':10,'Alarm3Sound_duration/value':10,'Alarm4Sound_duration/value':10,
-		'Alarm1Sound_delay/value':0,    'Alarm2Sound_delay/value':0,    'Alarm3Sound_delay/value':0,    'Alarm4Sound_delay/value':0,    
-		'FireAlarmSound_id/value':5,        'SmokeAlarmSound_id/value':5,        'WaterAlarmSound_id/value':7,        'GasAlarmSound_id/value':3,        
-		'FireAlarmSound_volume/value':100,  'SmokeAlarmSound_volume/value':100,  'WaterAlarmSound_volume/value':100,  'GasAlarmSound_volume/value':100,  
-		'FireAlarmSound_duration/value':300,'SmokeAlarmSound_duration/value':300,'WaterAlarmSound_duration/value':300,'GasAlarmSound_duration/value':300,
-		'FireAlarmSound_delay/value':0,     'SmokeAlarmSound_delay/value':0,     'WaterAlarmSound_delay/value':0,     'GasAlarmSound_delay/value':0,    
-		'DoorBell0Sound_id/value':20,       'DoorBell1Sound_id/value':20,       'DoorBell2Sound_id/value':20,       'DoorBell3Sound_id/value':20,        
-		'DoorBell0Sound_volume/value':100,  'DoorBell1Sound_volume/value':100,  'DoorBell2Sound_volume/value':100,  'DoorBell3Sound_volume/value':100,  
-		'DoorBell0Sound_duration/value':10, 'DoorBell1Sound_duration/value':10, 'DoorBell2Sound_duration/value':10, 'DoorBell3Sound_duration/value':10,
-		'DoorBell0Sound_delay/value':3,     'DoorBell1Sound_delay/value':3,     'DoorBell2Sound_delay/value':3,     'DoorBell3Sound_delay/value':3}	
+var dataset101 = {
+    pages: {
+        0: {
+            0: { id: 0, SortIndex: 1, LibraryID: 17, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Licht' },
+            1: { id: 1, SortIndex: 2, LibraryID: 33, dsidIndex: 2, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Beschattung' },
+            2: { id: 2, SortIndex: 3, LibraryID: 161, dsidIndex: 3, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Temperatur' },
+            3: { id: 3, SortIndex: 4, LibraryID: 193, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Anwesenheit' },
+            id: 0,
+            dsidIndex: 1,
+            centerSymbolConfig: 3
+        },
+        '1-9': {
+            '0-3': { SortIndex: 0, LibraryID: 0, dsidIndex: 0, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: '' },
+            dsidIndex: 1,
+            centerSymbolConfig: 3
+        }
+    },
+    scenes: {
+        '0-71': { dsidIndex: 0, ClickType: 0, ButtonNumber: 0, text: '' }
+    },
+    baseText: {
+        'HomeNameText/value': 'Mein Zuhause',
+        'AllOffText/value': 'Alles aus',
+        'DeepOffText/value': 'Tiefschlaf',
+        'BoostText/value': 'Boost',
+        'PanicAlarmText/value': 'Panikalarm',
+        'FireAlarmText/value': 'Feuerlarm',
+        'SmokeAlarmText/value': 'Rauchalarm',
+        'WaterAlarmText/value': 'Wasseralarm',
+        'GasAlarmText/value': 'Gasalarm',
+        'Alarm1Text/value': 'Alarm 1',
+        'Alarm2Text/value': 'Alarm 2',
+        'Alarm3Text/value': 'Alarm 3',
+        'Alarm4Text/value': 'Alarm 4',
+        'BreakInAlarmText/value': 'Einbruch!',
+        'DoorBell0Text/value': 'Türklingel',
+        'DoorBell1Text/value': '2. Türklingel',
+        'DoorBell2Text/value': '3. Türklingel',
+        'DoorBell3Text/value': '4. Türklingel'
+    },
+    pagenames: {
+        0: { PageIndex: 1, text: 'Seite 1' },
+        1: { PageIndex: 2, text: 'Seite 2' },
+        2: { PageIndex: 3, text: 'Seite 3' },
+        3: { PageIndex: 4, text: 'Seite 4' },
+        4: { PageIndex: 5, text: 'Seite 5' },
+        5: { PageIndex: 6, text: 'Seite 6' },
+        6: { PageIndex: 7, text: 'Seite 7' },
+        7: { PageIndex: 8, text: 'Seite 8' },
+        8: { PageIndex: 9, text: 'Seite 9' },
+        9: { PageIndex: 10, text: 'Seite 10' }
+    },
+    generalSettings: {
+        'ConfigFlagsLow/value': 44,
+        'ConfigFlagsHigh/value': 240,
+        'DisabledAlarmFlagsLow/value': 0,
+        'DisabledAlarmFlagHigh/value': 0,
+        'ResetableAlarmFlagsLow/value': 0,
+        'ResetableAlarmFlagsHigh/value': 0,
+        'JokerSubPageCountMaskLow/value': 255,
+        'JokerSubPageCountMaskHigh/value': 255,
+        'DayDesign/value': 3,
+        'Language/value': 1,
+        'DayScreenSaverType/value': 1,
+        'ProximitySensorSensibility/value': 50,
+        'MotionDetectorLEDColors/value': 2,
+        'BreakInAlarmConfig/value': 0,
+        'LongPressTime/value': 35,
+        'FadeInTime/value': 2,
+        'FadeOutTime/value': 50,
+        'MenuLevelUpTime/value': 20,
+        'MenuLevelIncDecExtraTime/value': 30,
+        'DoorBellPageTime/value': 10,
+        'NightDesign/value': 4,
+        'NightScreenSaverType/value': 2,
+        'DoorOpenerConfig0/value': 0,
+        'DoorOpenerConfig1/value': 0,
+        'DoorOpenerConfig2/value': 0,
+        'DoorOpenerConfig3/value': 0,
+        'DayMainPageTime/value': 15,
+        'DayScreenSaverTime/value': 40,
+        'DayStandByTime/value': 20,
+        'DayMinIntensity/value': 20,
+        'DayMaxIntensity/value': 100,
+        'NightMainPageTime/value': 15,
+        'NightScreenSaverTime/value': 40,
+        'NightStandByTime/value': 20,
+        'NightMinIntensity/value': 0,
+        'NightMaxIntensity/value': 50,
+        'ScreenSaverConfig/value': 1,
+        'TemperatureCorrection/value': -15,
+        'HumidityCorrection/value': 0,
+        'VentilationLevelCountMaskLow/value': 255,
+        'VentilationLevelCountMaskHigh/value': 255,
+        'AirRecirculationLevelCountMaskLow/value': 255,
+        'AirRecirculationLevelCountMaskHigh/value': 255,
+        'ApartmentVentilationLevelCountMaskLow/value': 255,
+        'ApartmentVentilationLevelCountMaskHigh/value': 255,
+        'TemperatureMin0/value': 8,
+        'TemperatureMin1/value': 8,
+        'TemperatureMin2/value': 8,
+        'TemperatureMin3/value': 8,
+        'TemperatureMin4/value': 8,
+        'TemperatureMin5/value': 8,
+        'TemperatureMin6/value': 8,
+        'TemperatureMin7/value': 8,
+        'TemperatureMax0/value': 30,
+        'TemperatureMax1/value': 30,
+        'TemperatureMax2/value': 30,
+        'TemperatureMax3/value': 30,
+        'TemperatureMax4/value': 30,
+        'TemperatureMax5/value': 30,
+        'TemperatureMax6/value': 30,
+        'TemperatureMax7/value': 30,
+        'HomeInSound_id/value': 55,
+        'HomeOutSound_id/value': 49,
+        'BreakInAlarmSound_id/value': 4,
+        'PanicAlarmSound_id/value': 4,
+        'HomeInSound_volume/value': 100,
+        'HomeOutSound_volume/value': 100,
+        'BreakInAlarmSound_volume/value': 100,
+        'PanicAlarmSound_volume/value': 100,
+        'HomeInSound_duration/value': 0,
+        'HomeOutSound_duration/value': 0,
+        'BreakInAlarmSound_duration/value': 300,
+        'PanicAlarmSound_duration/value': 10,
+        'HomeInSound_delay/value': 0,
+        'HomeOutSound_delay/value': 0,
+        'BreakInAlarmSound_delay/value': 0,
+        'PanicAlarmSound_delay/value': 0,
+        'Alarm1Sound_id/value': 4,
+        'Alarm2Sound_id/value': 4,
+        'Alarm3Sound_id/value': 4,
+        'Alarm4Sound_id/value': 4,
+        'Alarm1Sound_volume/value': 100,
+        'Alarm2Sound_volume/value': 100,
+        'Alarm3Sound_volume/value': 100,
+        'Alarm4Sound_volume/value': 100,
+        'Alarm1Sound_duration/value': 10,
+        'Alarm2Sound_duration/value': 10,
+        'Alarm3Sound_duration/value': 10,
+        'Alarm4Sound_duration/value': 10,
+        'Alarm1Sound_delay/value': 0,
+        'Alarm2Sound_delay/value': 0,
+        'Alarm3Sound_delay/value': 0,
+        'Alarm4Sound_delay/value': 0,
+        'FireAlarmSound_id/value': 5,
+        'SmokeAlarmSound_id/value': 5,
+        'WaterAlarmSound_id/value': 7,
+        'GasAlarmSound_id/value': 3,
+        'FireAlarmSound_volume/value': 100,
+        'SmokeAlarmSound_volume/value': 100,
+        'WaterAlarmSound_volume/value': 100,
+        'GasAlarmSound_volume/value': 100,
+        'FireAlarmSound_duration/value': 300,
+        'SmokeAlarmSound_duration/value': 300,
+        'WaterAlarmSound_duration/value': 300,
+        'GasAlarmSound_duration/value': 300,
+        'FireAlarmSound_delay/value': 0,
+        'SmokeAlarmSound_delay/value': 0,
+        'WaterAlarmSound_delay/value': 0,
+        'GasAlarmSound_delay/value': 0,
+        'DoorBell0Sound_id/value': 20,
+        'DoorBell1Sound_id/value': 20,
+        'DoorBell2Sound_id/value': 20,
+        'DoorBell3Sound_id/value': 20,
+        'DoorBell0Sound_volume/value': 100,
+        'DoorBell1Sound_volume/value': 100,
+        'DoorBell2Sound_volume/value': 100,
+        'DoorBell3Sound_volume/value': 100,
+        'DoorBell0Sound_duration/value': 10,
+        'DoorBell1Sound_duration/value': 10,
+        'DoorBell2Sound_duration/value': 10,
+        'DoorBell3Sound_duration/value': 10,
+        'DoorBell0Sound_delay/value': 3,
+        'DoorBell1Sound_delay/value': 3,
+        'DoorBell2Sound_delay/value': 3,
+        'DoorBell3Sound_delay/value': 3
+    }
 };
 
-var dataset102={
-		'pages':{'0':{'0':{id:0,SortIndex:1,LibraryID: 17,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Licht'},
-					'1':{id:1,SortIndex:2,LibraryID: 33,dsidIndex:2,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Beschattung'},
-					'2':{id:2,SortIndex:3,LibraryID:161,dsidIndex:3,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Temperatur'},
-					'3':{id:3,SortIndex:4,LibraryID:193,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Anwesenheit'},
-					'id':0,
-					'dsidIndex':1,
-					'centerSymbolConfig':3},
-			   '1-9':{'0-3':{SortIndex:0,LibraryID:0,dsidIndex:0,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:''},
-					'dsidIndex':1,
-					'centerSymbolConfig':3}},
-		'scenes':{'0-71': {'dsidIndex':0,'ClickType':0,'ButtonNumber':0,'text':''}},
-		'baseText':{'HomeNameText/value':'Mein Zuhause','AllOffText/value':'Alles aus','DeepOffText/value':'Tiefschlaf',
-					'BoostText/value':'Boost','PanicAlarmText/value':'Panikalarm','FireAlarmText/value':'Feueralarm','SmokeAlarmText/value':'Rauchalarm','WaterAlarmText/value':'Wasseralarm',
-					'GasAlarmText/value':'Gasalarm','Alarm1Text/value':'Alarm 1','Alarm2Text/value':'Alarm 2','Alarm3Text/value':'Alarm 3','Alarm4Text/value':'Alarm 4',
-					'BreakInAlarmText/value':'Einbruch!','DoorBell0Text/value':'Türklingel','DoorBell1Text/value':'2. Türklingel','DoorBell2Text/value':'3. Türklingel','DoorBell3Text/value':'4. Türklingel'},
-		'pagenames':{0:{PageIndex:1,text:'Seite 1'},
-					 1:{PageIndex:2,text:'Seite 2'},
-					 2:{PageIndex:3,text:'Seite 3'},
-					 3:{PageIndex:4,text:'Seite 4'},
-					 4:{PageIndex:5,text:'Seite 5'},
-					 5:{PageIndex:6,text:'Seite 6'},
-					 6:{PageIndex:7,text:'Seite 7'},
-					 7:{PageIndex:8,text:'Seite 8'},
-					 8:{PageIndex:9,text:'Seite 9'},
-					 9:{PageIndex:10,text:'Seite 10'}},
-		'generalSettings': {'ConfigFlagsLow/value':44,'ConfigFlagsHigh/value':240,'DisabledAlarmFlagsLow/value':0,
-			'DisabledAlarmFlagHigh/value':0,'ResetableAlarmFlagsLow/value':254,'ResetableAlarmFlagsHigh/value':1,
-			'JokerSubPageCountMaskLow/value':255,'JokerSubPageCountMaskHigh/value':255,'DayDesign/value':3,
-			'Language/value':1,'DayScreenSaverType/value':1,'ProximitySensorSensibility/value':50,'MotionDetectorLEDColors/value':2,
-			'BreakInAlarmConfig/value':0,'LongPressTime/value':35,'FadeInTime/value':2,'FadeOutTime/value':50,
-			'MenuLevelUpTime/value':20,'MenuLevelIncDecExtraTime/value':30,'DoorBellPageTime/value':10,'NightDesign/value':4,
-			'NightScreenSaverType/value':2,'DoorOpenerConfig0/value':0,'DoorOpenerConfig1/value':0,'DoorOpenerConfig2/value':0,
-			'DoorOpenerConfig3/value':0,'DayMainPageTime/value':15,'DayScreenSaverTime/value':40,
-			'DayStandByTime/value':30,'DayMinIntensity/value':20,'DayMaxIntensity/value':100,
-			'NightMainPageTime/value':15,'NightScreenSaverTime/value':40,'NightStandByTime/value':30,'NightMinIntensity/value':0,
-			'NightMaxIntensity/value':50,'ScreenSaverConfig/value':1,'TemperatureCorrection/value':-15,'HumidityCorrection/value':0,
-			'VentilationLevelCountMaskLow/value':255,'VentilationLevelCountMaskHigh/value':255,'AirRecirculationLevelCountMaskLow/value':255,'AirRecirculationLevelCountMaskHigh/value':255,
-			'ApartmentVentilationLevelCountMaskLow/value':255,'ApartmentVentilationLevelCountMaskHigh/value':255,
-			'TemperatureMin0/value':8,'TemperatureMin1/value':8,'TemperatureMin2/value':8,'TemperatureMin3/value':8,
-			'TemperatureMin4/value':8,'TemperatureMin5/value':8,'TemperatureMin6/value':8,'TemperatureMin7/value':8,
-			'TemperatureMax0/value':30,'TemperatureMax1/value':30,'TemperatureMax2/value':30,'TemperatureMax3/value':30,
-			'TemperatureMax4/value':30,'TemperatureMax5/value':30,'TemperatureMax6/value':30,'TemperatureMax7/value':30,
-			'HomeInSound_id/value':55,     'HomeOutSound_id/value':49,     'BreakInAlarmSound_id/value':4,        'PanicAlarmSound_id/value':4,       
-			'HomeInSound_volume/value':100,'HomeOutSound_volume/value':100,'BreakInAlarmSound_volume/value':100,  'PanicAlarmSound_volume/value':100, 
-			'HomeInSound_duration/value':0,'HomeOutSound_duration/value':0,'BreakInAlarmSound_duration/value':300,  'PanicAlarmSound_duration/value':10,
-			'HomeInSound_delay/value':0,   'HomeOutSound_delay/value':0,   'BreakInAlarmSound_delay/value':0,     'PanicAlarmSound_delay/value':0,    
-			'Alarm1Sound_id/value':4,       'Alarm2Sound_id/value':4,       'Alarm3Sound_id/value':4,       'Alarm4Sound_id/value':4,       
-			'Alarm1Sound_volume/value':100, 'Alarm2Sound_volume/value':100, 'Alarm3Sound_volume/value':100, 'Alarm4Sound_volume/value':100, 
-			'Alarm1Sound_duration/value':10,'Alarm2Sound_duration/value':10,'Alarm3Sound_duration/value':10,'Alarm4Sound_duration/value':10,
-			'Alarm1Sound_delay/value':0,    'Alarm2Sound_delay/value':0,    'Alarm3Sound_delay/value':0,    'Alarm4Sound_delay/value':0,    
-			'FireAlarmSound_id/value':5,        'SmokeAlarmSound_id/value':5,        'WaterAlarmSound_id/value':7,        'GasAlarmSound_id/value':3,        
-			'FireAlarmSound_volume/value':100,  'SmokeAlarmSound_volume/value':100,  'WaterAlarmSound_volume/value':100,  'GasAlarmSound_volume/value':100,  
-			'FireAlarmSound_duration/value':300,'SmokeAlarmSound_duration/value':300,'WaterAlarmSound_duration/value':300,'GasAlarmSound_duration/value':300,
-			'FireAlarmSound_delay/value':0,     'SmokeAlarmSound_delay/value':0,     'WaterAlarmSound_delay/value':0,     'GasAlarmSound_delay/value':0,    
-			'DoorBell0Sound_id/value':20,       'DoorBell1Sound_id/value':20,       'DoorBell2Sound_id/value':20,       'DoorBell3Sound_id/value':20,        
-			'DoorBell0Sound_volume/value':100,  'DoorBell1Sound_volume/value':100,  'DoorBell2Sound_volume/value':100,  'DoorBell3Sound_volume/value':100,  
-			'DoorBell0Sound_duration/value':10, 'DoorBell1Sound_duration/value':10, 'DoorBell2Sound_duration/value':10, 'DoorBell3Sound_duration/value':10,
-			'DoorBell0Sound_delay/value':3,     'DoorBell1Sound_delay/value':3,     'DoorBell2Sound_delay/value':3,     'DoorBell3Sound_delay/value':3}	
-	};
-
+var dataset102 = {
+    pages: {
+        0: {
+            0: { id: 0, SortIndex: 1, LibraryID: 17, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Licht' },
+            1: { id: 1, SortIndex: 2, LibraryID: 33, dsidIndex: 2, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Beschattung' },
+            2: { id: 2, SortIndex: 3, LibraryID: 161, dsidIndex: 3, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Temperatur' },
+            3: { id: 3, SortIndex: 4, LibraryID: 193, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Anwesenheit' },
+            id: 0,
+            dsidIndex: 1,
+            centerSymbolConfig: 3
+        },
+        '1-9': { '0-3': { SortIndex: 0, LibraryID: 0, dsidIndex: 0, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: '' },
+            dsidIndex: 1,
+            centerSymbolConfig: 3 }
+    },
+    scenes: { '0-71': { dsidIndex: 0, ClickType: 0, ButtonNumber: 0, text: '' } },
+    baseText: {
+        'HomeNameText/value': 'Mein Zuhause',
+        'AllOffText/value': 'Alles aus',
+        'DeepOffText/value': 'Tiefschlaf',
+        'BoostText/value': 'Boost',
+        'PanicAlarmText/value': 'Panikalarm',
+        'FireAlarmText/value': 'Feueralarm',
+        'SmokeAlarmText/value': 'Rauchalarm',
+        'WaterAlarmText/value': 'Wasseralarm',
+        'GasAlarmText/value': 'Gasalarm',
+        'Alarm1Text/value': 'Alarm 1',
+        'Alarm2Text/value': 'Alarm 2',
+        'Alarm3Text/value': 'Alarm 3',
+        'Alarm4Text/value': 'Alarm 4',
+        'BreakInAlarmText/value': 'Einbruch!',
+        'DoorBell0Text/value': 'Türklingel',
+        'DoorBell1Text/value': '2. Türklingel',
+        'DoorBell2Text/value': '3. Türklingel',
+        'DoorBell3Text/value': '4. Türklingel'
+    },
+    pagenames: {
+        0: { PageIndex: 1, text: 'Seite 1' },
+        1: { PageIndex: 2, text: 'Seite 2' },
+        2: { PageIndex: 3, text: 'Seite 3' },
+        3: { PageIndex: 4, text: 'Seite 4' },
+        4: { PageIndex: 5, text: 'Seite 5' },
+        5: { PageIndex: 6, text: 'Seite 6' },
+        6: { PageIndex: 7, text: 'Seite 7' },
+        7: { PageIndex: 8, text: 'Seite 8' },
+        8: { PageIndex: 9, text: 'Seite 9' },
+        9: { PageIndex: 10, text: 'Seite 10' }
+    },
+    generalSettings: {
+        'ConfigFlagsLow/value': 44,
+        'ConfigFlagsHigh/value': 240,
+        'DisabledAlarmFlagsLow/value': 0,
+        'DisabledAlarmFlagHigh/value': 0,
+        'ResetableAlarmFlagsLow/value': 254,
+        'ResetableAlarmFlagsHigh/value': 1,
+        'JokerSubPageCountMaskLow/value': 255,
+        'JokerSubPageCountMaskHigh/value': 255,
+        'DayDesign/value': 3,
+        'Language/value': 1,
+        'DayScreenSaverType/value': 1,
+        'ProximitySensorSensibility/value': 50,
+        'MotionDetectorLEDColors/value': 2,
+        'BreakInAlarmConfig/value': 0,
+        'LongPressTime/value': 35,
+        'FadeInTime/value': 2,
+        'FadeOutTime/value': 50,
+        'MenuLevelUpTime/value': 20,
+        'MenuLevelIncDecExtraTime/value': 30,
+        'DoorBellPageTime/value': 10,
+        'NightDesign/value': 4,
+        'NightScreenSaverType/value': 2,
+        'DoorOpenerConfig0/value': 0,
+        'DoorOpenerConfig1/value': 0,
+        'DoorOpenerConfig2/value': 0,
+        'DoorOpenerConfig3/value': 0,
+        'DayMainPageTime/value': 15,
+        'DayScreenSaverTime/value': 40,
+        'DayStandByTime/value': 30,
+        'DayMinIntensity/value': 20,
+        'DayMaxIntensity/value': 100,
+        'NightMainPageTime/value': 15,
+        'NightScreenSaverTime/value': 40,
+        'NightStandByTime/value': 30,
+        'NightMinIntensity/value': 0,
+        'NightMaxIntensity/value': 50,
+        'ScreenSaverConfig/value': 1,
+        'TemperatureCorrection/value': -15,
+        'HumidityCorrection/value': 0,
+        'VentilationLevelCountMaskLow/value': 255,
+        'VentilationLevelCountMaskHigh/value': 255,
+        'AirRecirculationLevelCountMaskLow/value': 255,
+        'AirRecirculationLevelCountMaskHigh/value': 255,
+        'ApartmentVentilationLevelCountMaskLow/value': 255,
+        'ApartmentVentilationLevelCountMaskHigh/value': 255,
+        'TemperatureMin0/value': 8,
+        'TemperatureMin1/value': 8,
+        'TemperatureMin2/value': 8,
+        'TemperatureMin3/value': 8,
+        'TemperatureMin4/value': 8,
+        'TemperatureMin5/value': 8,
+        'TemperatureMin6/value': 8,
+        'TemperatureMin7/value': 8,
+        'TemperatureMax0/value': 30,
+        'TemperatureMax1/value': 30,
+        'TemperatureMax2/value': 30,
+        'TemperatureMax3/value': 30,
+        'TemperatureMax4/value': 30,
+        'TemperatureMax5/value': 30,
+        'TemperatureMax6/value': 30,
+        'TemperatureMax7/value': 30,
+        'HomeInSound_id/value': 55,
+        'HomeOutSound_id/value': 49,
+        'BreakInAlarmSound_id/value': 4,
+        'PanicAlarmSound_id/value': 4,
+        'HomeInSound_volume/value': 100,
+        'HomeOutSound_volume/value': 100,
+        'BreakInAlarmSound_volume/value': 100,
+        'PanicAlarmSound_volume/value': 100,
+        'HomeInSound_duration/value': 0,
+        'HomeOutSound_duration/value': 0,
+        'BreakInAlarmSound_duration/value': 300,
+        'PanicAlarmSound_duration/value': 10,
+        'HomeInSound_delay/value': 0,
+        'HomeOutSound_delay/value': 0,
+        'BreakInAlarmSound_delay/value': 0,
+        'PanicAlarmSound_delay/value': 0,
+        'Alarm1Sound_id/value': 4,
+        'Alarm2Sound_id/value': 4,
+        'Alarm3Sound_id/value': 4,
+        'Alarm4Sound_id/value': 4,
+        'Alarm1Sound_volume/value': 100,
+        'Alarm2Sound_volume/value': 100,
+        'Alarm3Sound_volume/value': 100,
+        'Alarm4Sound_volume/value': 100,
+        'Alarm1Sound_duration/value': 10,
+        'Alarm2Sound_duration/value': 10,
+        'Alarm3Sound_duration/value': 10,
+        'Alarm4Sound_duration/value': 10,
+        'Alarm1Sound_delay/value': 0,
+        'Alarm2Sound_delay/value': 0,
+        'Alarm3Sound_delay/value': 0,
+        'Alarm4Sound_delay/value': 0,
+        'FireAlarmSound_id/value': 5,
+        'SmokeAlarmSound_id/value': 5,
+        'WaterAlarmSound_id/value': 7,
+        'GasAlarmSound_id/value': 3,
+        'FireAlarmSound_volume/value': 100,
+        'SmokeAlarmSound_volume/value': 100,
+        'WaterAlarmSound_volume/value': 100,
+        'GasAlarmSound_volume/value': 100,
+        'FireAlarmSound_duration/value': 300,
+        'SmokeAlarmSound_duration/value': 300,
+        'WaterAlarmSound_duration/value': 300,
+        'GasAlarmSound_duration/value': 300,
+        'FireAlarmSound_delay/value': 0,
+        'SmokeAlarmSound_delay/value': 0,
+        'WaterAlarmSound_delay/value': 0,
+        'GasAlarmSound_delay/value': 0,
+        'DoorBell0Sound_id/value': 20,
+        'DoorBell1Sound_id/value': 20,
+        'DoorBell2Sound_id/value': 20,
+        'DoorBell3Sound_id/value': 20,
+        'DoorBell0Sound_volume/value': 100,
+        'DoorBell1Sound_volume/value': 100,
+        'DoorBell2Sound_volume/value': 100,
+        'DoorBell3Sound_volume/value': 100,
+        'DoorBell0Sound_duration/value': 10,
+        'DoorBell1Sound_duration/value': 10,
+        'DoorBell2Sound_duration/value': 10,
+        'DoorBell3Sound_duration/value': 10,
+        'DoorBell0Sound_delay/value': 3,
+        'DoorBell1Sound_delay/value': 3,
+        'DoorBell2Sound_delay/value': 3,
+        'DoorBell3Sound_delay/value': 3
+    }
+};
 
-var dataset103={
-		'pages':{'0':{'0':{id:0,SortIndex:1,LibraryID: 17,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Licht'},
-					'1':{id:1,SortIndex:2,LibraryID: 33,dsidIndex:2,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Beschattung'},
-					'2':{id:2,SortIndex:3,LibraryID:161,dsidIndex:3,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Temperatur'},
-					'3':{id:3,SortIndex:4,LibraryID:193,dsidIndex:1,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:'Anwesenheit'},
-					'id':0,
-					'dsidIndex':1,
-					'centerSymbolConfig':3},
-			   '1-9':{'0-3':{SortIndex:0,LibraryID:0,dsidIndex:0,AreaIndex:0,ClickType:0,ButtonNumber:0,DisplayText:''},
-					'dsidIndex':1,
-					'centerSymbolConfig':3}},
-		'scenes':{'0-71': {'dsidIndex':0,'ClickType':0,'ButtonNumber':0,'text':''}},
-		'baseText':{'HomeNameText/value':'Mein Zuhause','AllOffText/value':'Alles aus','DeepOffText/value':'Tiefschlaf',
-					'BoostText/value':'Boost','PanicAlarmText/value':'Panikalarm','FireAlarmText/value':'Feueralarm','SmokeAlarmText/value':'Rauchalarm','WaterAlarmText/value':'Wasseralarm',
-					'GasAlarmText/value':'Gasalarm','Alarm1Text/value':'Alarm 1','Alarm2Text/value':'Alarm 2','Alarm3Text/value':'Alarm 3','Alarm4Text/value':'Alarm 4',
-					'BreakInAlarmText/value':'Einbruch!','DoorBell0Text/value':'Türklingel','DoorBell1Text/value':'2. Türklingel','DoorBell2Text/value':'3. Türklingel','DoorBell3Text/value':'4. Türklingel'},
-		'pagenames':{0:{PageIndex:1,text:'Seite 1'},
-					 1:{PageIndex:2,text:'Seite 2'},
-					 2:{PageIndex:3,text:'Seite 3'},
-					 3:{PageIndex:4,text:'Seite 4'},
-					 4:{PageIndex:5,text:'Seite 5'},
-					 5:{PageIndex:6,text:'Seite 6'},
-					 6:{PageIndex:7,text:'Seite 7'},
-					 7:{PageIndex:8,text:'Seite 8'},
-					 8:{PageIndex:9,text:'Seite 9'},
-					 9:{PageIndex:10,text:'Seite 10'}},
-		'generalSettings': {'ConfigFlagsLow/value':44,'ConfigFlagsHigh/value':240,'DisabledAlarmFlagsLow/value':0,
-			'DisabledAlarmFlagHigh/value':0,'ResetableAlarmFlagsLow/value':254,'ResetableAlarmFlagsHigh/value':1,
-			'JokerSubPageCountMaskLow/value':255,'JokerSubPageCountMaskHigh/value':255,'DayDesign/value':3,
-			'Language/value':1,'DayScreenSaverType/value':1,'ProximitySensorSensibility/value':50,'MotionDetectorLEDColors/value':2,
-			'BreakInAlarmConfig/value':0,'LongPressTime/value':35,'FadeInTime/value':2,'FadeOutTime/value':50,
-			'MenuLevelUpTime/value':20,'MenuLevelIncDecExtraTime/value':30,'DoorBellPageTime/value':10,'NightDesign/value':4,
-			'NightScreenSaverType/value':2,'DoorOpenerConfig0/value':0,'DoorOpenerConfig1/value':0,'DoorOpenerConfig2/value':0,
-			'DoorOpenerConfig3/value':0,'DayMainPageTime/value':15,'DayScreenSaverTime/value':40,
-			'DayStandByTime/value':30,'DayMinIntensity/value':20,'DayMaxIntensity/value':100,
-			'NightMainPageTime/value':15,'NightScreenSaverTime/value':40,'NightStandByTime/value':30,'NightMinIntensity/value':0,
-			'NightMaxIntensity/value':50,'ScreenSaverConfig/value':1,'TemperatureCorrection/value':-15,'HumidityCorrection/value':0,
-			'VentilationLevelCountMaskLow/value':255,'VentilationLevelCountMaskHigh/value':255,'AirRecirculationLevelCountMaskLow/value':255,'AirRecirculationLevelCountMaskHigh/value':255,
-			'DoorOpenerDeviceIndexTableHigh/value':0,'DoorOpenerDeviceIndexTableLow/value':0,
-			'ApartmentVentilationLevelCountMaskLow/value':255,'ApartmentVentilationLevelCountMaskHigh/value':255,
-			'TemperatureMin0/value':8,'TemperatureMin1/value':8,'TemperatureMin2/value':8,'TemperatureMin3/value':8,
-			'TemperatureMin4/value':8,'TemperatureMin5/value':8,'TemperatureMin6/value':8,'TemperatureMin7/value':8,
-			'TemperatureMax0/value':30,'TemperatureMax1/value':30,'TemperatureMax2/value':30,'TemperatureMax3/value':30,
-			'TemperatureMax4/value':30,'TemperatureMax5/value':30,'TemperatureMax6/value':30,'TemperatureMax7/value':30,
-			'HomeInSound_id/value':55,     'HomeOutSound_id/value':49,     'BreakInAlarmSound_id/value':4,        'PanicAlarmSound_id/value':4,       
-			'HomeInSound_volume/value':100,'HomeOutSound_volume/value':100,'BreakInAlarmSound_volume/value':100,  'PanicAlarmSound_volume/value':100, 
-			'HomeInSound_duration/value':0,'HomeOutSound_duration/value':0,'BreakInAlarmSound_duration/value':300,  'PanicAlarmSound_duration/value':10,
-			'HomeInSound_delay/value':0,   'HomeOutSound_delay/value':0,   'BreakInAlarmSound_delay/value':0,     'PanicAlarmSound_delay/value':0,    
-			'Alarm1Sound_id/value':4,       'Alarm2Sound_id/value':4,       'Alarm3Sound_id/value':4,       'Alarm4Sound_id/value':4,       
-			'Alarm1Sound_volume/value':100, 'Alarm2Sound_volume/value':100, 'Alarm3Sound_volume/value':100, 'Alarm4Sound_volume/value':100, 
-			'Alarm1Sound_duration/value':10,'Alarm2Sound_duration/value':10,'Alarm3Sound_duration/value':10,'Alarm4Sound_duration/value':10,
-			'Alarm1Sound_delay/value':0,    'Alarm2Sound_delay/value':0,    'Alarm3Sound_delay/value':0,    'Alarm4Sound_delay/value':0,    
-			'FireAlarmSound_id/value':5,        'SmokeAlarmSound_id/value':5,        'WaterAlarmSound_id/value':7,        'GasAlarmSound_id/value':3,        
-			'FireAlarmSound_volume/value':100,  'SmokeAlarmSound_volume/value':100,  'WaterAlarmSound_volume/value':100,  'GasAlarmSound_volume/value':100,  
-			'FireAlarmSound_duration/value':300,'SmokeAlarmSound_duration/value':300,'WaterAlarmSound_duration/value':300,'GasAlarmSound_duration/value':300,
-			'FireAlarmSound_delay/value':0,     'SmokeAlarmSound_delay/value':0,     'WaterAlarmSound_delay/value':0,     'GasAlarmSound_delay/value':0,    
-			'DoorBell0Sound_id/value':20,       'DoorBell1Sound_id/value':20,       'DoorBell2Sound_id/value':20,       'DoorBell3Sound_id/value':20,        
-			'DoorBell0Sound_volume/value':100,  'DoorBell1Sound_volume/value':100,  'DoorBell2Sound_volume/value':100,  'DoorBell3Sound_volume/value':100,  
-			'DoorBell0Sound_duration/value':10, 'DoorBell1Sound_duration/value':10, 'DoorBell2Sound_duration/value':10, 'DoorBell3Sound_duration/value':10,
-			'DoorBell0Sound_delay/value':3,     'DoorBell1Sound_delay/value':3,     'DoorBell2Sound_delay/value':3,     'DoorBell3Sound_delay/value':3}	
-	};
 
+var dataset103 = {
+    pages: {
+        0: {
+            0: { id: 0, SortIndex: 1, LibraryID: 17, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Licht' },
+            1: { id: 1, SortIndex: 2, LibraryID: 33, dsidIndex: 2, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Beschattung' },
+            2: { id: 2, SortIndex: 3, LibraryID: 161, dsidIndex: 3, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Temperatur' },
+            3: { id: 3, SortIndex: 4, LibraryID: 193, dsidIndex: 1, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: 'Anwesenheit' },
+            id: 0,
+            dsidIndex: 1,
+            centerSymbolConfig: 3
+        },
+        '1-9': {
+            '0-3': { SortIndex: 0, LibraryID: 0, dsidIndex: 0, AreaIndex: 0, ClickType: 0, ButtonNumber: 0, DisplayText: '' },
+            dsidIndex: 1,
+            centerSymbolConfig: 3
+        }
+    },
+    scenes: { '0-71': { dsidIndex: 0, ClickType: 0, ButtonNumber: 0, text: '' } },
+    baseText: {
+        'HomeNameText/value': 'Mein Zuhause',
+        'AllOffText/value': 'Alles aus',
+        'DeepOffText/value': 'Tiefschlaf',
+        'BoostText/value': 'Boost',
+        'PanicAlarmText/value': 'Panikalarm',
+        'FireAlarmText/value': 'Feueralarm',
+        'SmokeAlarmText/value': 'Rauchalarm',
+        'WaterAlarmText/value': 'Wasseralarm',
+        'GasAlarmText/value': 'Gasalarm',
+        'Alarm1Text/value': 'Alarm 1',
+        'Alarm2Text/value': 'Alarm 2',
+        'Alarm3Text/value': 'Alarm 3',
+        'Alarm4Text/value': 'Alarm 4',
+        'BreakInAlarmText/value': 'Einbruch!',
+        'DoorBell0Text/value': 'Türklingel',
+        'DoorBell1Text/value': '2. Türklingel',
+        'DoorBell2Text/value': '3. Türklingel',
+        'DoorBell3Text/value': '4. Türklingel'
+    },
+    pagenames: {
+        0: { PageIndex: 1, text: 'Seite 1' },
+        1: { PageIndex: 2, text: 'Seite 2' },
+        2: { PageIndex: 3, text: 'Seite 3' },
+        3: { PageIndex: 4, text: 'Seite 4' },
+        4: { PageIndex: 5, text: 'Seite 5' },
+        5: { PageIndex: 6, text: 'Seite 6' },
+        6: { PageIndex: 7, text: 'Seite 7' },
+        7: { PageIndex: 8, text: 'Seite 8' },
+        8: { PageIndex: 9, text: 'Seite 9' },
+        9: { PageIndex: 10, text: 'Seite 10' }
+    },
+    generalSettings: {
+        'ConfigFlagsLow/value': 44,
+        'ConfigFlagsHigh/value': 240,
+        'DisabledAlarmFlagsLow/value': 0,
+        'DisabledAlarmFlagHigh/value': 0,
+        'ResetableAlarmFlagsLow/value': 254,
+        'ResetableAlarmFlagsHigh/value': 1,
+        'JokerSubPageCountMaskLow/value': 255,
+        'JokerSubPageCountMaskHigh/value': 255,
+        'DayDesign/value': 3,
+        'Language/value': 1,
+        'DayScreenSaverType/value': 1,
+        'ProximitySensorSensibility/value': 50,
+        'MotionDetectorLEDColors/value': 2,
+        'BreakInAlarmConfig/value': 0,
+        'LongPressTime/value': 35,
+        'FadeInTime/value': 2,
+        'FadeOutTime/value': 50,
+        'MenuLevelUpTime/value': 20,
+        'MenuLevelIncDecExtraTime/value': 30,
+        'DoorBellPageTime/value': 10,
+        'NightDesign/value': 4,
+        'NightScreenSaverType/value': 2,
+        'DoorOpenerConfig0/value': 0,
+        'DoorOpenerConfig1/value': 0,
+        'DoorOpenerConfig2/value': 0,
+        'DoorOpenerConfig3/value': 0,
+        'DayMainPageTime/value': 15,
+        'DayScreenSaverTime/value': 40,
+        'DayStandByTime/value': 30,
+        'DayMinIntensity/value': 20,
+        'DayMaxIntensity/value': 100,
+        'NightMainPageTime/value': 15,
+        'NightScreenSaverTime/value': 40,
+        'NightStandByTime/value': 30,
+        'NightMinIntensity/value': 0,
+        'NightMaxIntensity/value': 50,
+        'ScreenSaverConfig/value': 1,
+        'TemperatureCorrection/value': -15,
+        'HumidityCorrection/value': 0,
+        'VentilationLevelCountMaskLow/value': 255,
+        'VentilationLevelCountMaskHigh/value': 255,
+        'AirRecirculationLevelCountMaskLow/value': 255,
+        'AirRecirculationLevelCountMaskHigh/value': 255,
+        'DoorOpenerDeviceIndexTableHigh/value': 0,
+        'DoorOpenerDeviceIndexTableLow/value': 0,
+        'ApartmentVentilationLevelCountMaskLow/value': 255,
+        'ApartmentVentilationLevelCountMaskHigh/value': 255,
+        'TemperatureMin0/value': 8,
+        'TemperatureMin1/value': 8,
+        'TemperatureMin2/value': 8,
+        'TemperatureMin3/value': 8,
+        'TemperatureMin4/value': 8,
+        'TemperatureMin5/value': 8,
+        'TemperatureMin6/value': 8,
+        'TemperatureMin7/value': 8,
+        'TemperatureMax0/value': 30,
+        'TemperatureMax1/value': 30,
+        'TemperatureMax2/value': 30,
+        'TemperatureMax3/value': 30,
+        'TemperatureMax4/value': 30,
+        'TemperatureMax5/value': 30,
+        'TemperatureMax6/value': 30,
+        'TemperatureMax7/value': 30,
+        'HomeInSound_id/value': 55,
+        'HomeOutSound_id/value': 49,
+        'BreakInAlarmSound_id/value': 4,
+        'PanicAlarmSound_id/value': 4,
+        'HomeInSound_volume/value': 100,
+        'HomeOutSound_volume/value': 100,
+        'BreakInAlarmSound_volume/value': 100,
+        'PanicAlarmSound_volume/value': 100,
+        'HomeInSound_duration/value': 0,
+        'HomeOutSound_duration/value': 0,
+        'BreakInAlarmSound_duration/value': 300,
+        'PanicAlarmSound_duration/value': 10,
+        'HomeInSound_delay/value': 0,
+        'HomeOutSound_delay/value': 0,
+        'BreakInAlarmSound_delay/value': 0,
+        'PanicAlarmSound_delay/value': 0,
+        'Alarm1Sound_id/value': 4,
+        'Alarm2Sound_id/value': 4,
+        'Alarm3Sound_id/value': 4,
+        'Alarm4Sound_id/value': 4,
+        'Alarm1Sound_volume/value': 100,
+        'Alarm2Sound_volume/value': 100,
+        'Alarm3Sound_volume/value': 100,
+        'Alarm4Sound_volume/value': 100,
+        'Alarm1Sound_duration/value': 10,
+        'Alarm2Sound_duration/value': 10,
+        'Alarm3Sound_duration/value': 10,
+        'Alarm4Sound_duration/value': 10,
+        'Alarm1Sound_delay/value': 0,
+        'Alarm2Sound_delay/value': 0,
+        'Alarm3Sound_delay/value': 0,
+        'Alarm4Sound_delay/value': 0,
+        'FireAlarmSound_id/value': 5,
+        'SmokeAlarmSound_id/value': 5,
+        'WaterAlarmSound_id/value': 7,
+        'GasAlarmSound_id/value': 3,
+        'FireAlarmSound_volume/value': 100,
+        'SmokeAlarmSound_volume/value': 100,
+        'WaterAlarmSound_volume/value': 100,
+        'GasAlarmSound_volume/value': 100,
+        'FireAlarmSound_duration/value': 300,
+        'SmokeAlarmSound_duration/value': 300,
+        'WaterAlarmSound_duration/value': 300,
+        'GasAlarmSound_duration/value': 300,
+        'FireAlarmSound_delay/value': 0,
+        'SmokeAlarmSound_delay/value': 0,
+        'WaterAlarmSound_delay/value': 0,
+        'GasAlarmSound_delay/value': 0,
+        'DoorBell0Sound_id/value': 20,
+        'DoorBell1Sound_id/value': 20,
+        'DoorBell2Sound_id/value': 20,
+        'DoorBell3Sound_id/value': 20,
+        'DoorBell0Sound_volume/value': 100,
+        'DoorBell1Sound_volume/value': 100,
+        'DoorBell2Sound_volume/value': 100,
+        'DoorBell3Sound_volume/value': 100,
+        'DoorBell0Sound_duration/value': 10,
+        'DoorBell1Sound_duration/value': 10,
+        'DoorBell2Sound_duration/value': 10,
+        'DoorBell3Sound_duration/value': 10,
+        'DoorBell0Sound_delay/value': 3,
+        'DoorBell1Sound_delay/value': 3,
+        'DoorBell2Sound_delay/value': 3,
+        'DoorBell3Sound_delay/value': 3
+    }
+};
diff --git a/scripts/ulux-queue.js b/scripts/ulux-queue.js
index 373a81d64981926659501fa2f15d517484427c38..d03d8be53dbc47539b52d0c640ccc863afedabca 100644
--- a/scripts/ulux-queue.js
+++ b/scripts/ulux-queue.js
@@ -1,1483 +1,1541 @@
-var LOGFILE_NAME = "ulux-comm.log";
+/* globals Logger, Property, raisedEvent, getDeviceConfig, getDeviceConfigWord, setDeviceConfig, setDeviceConfigBulk */
 
-var useBULK=true;
+var LOGFILE_NAME = 'ulux-comm.log';
 
-function hex(number) {
-	
-	var sString=parseInt("" + number,10).toString(16);
-	if (sString.length==1)
-		return "0" + sString;
-	else
-		return sString;
+var useBULK = true;
+
+function hex (number) {
+
+    var sString = parseInt('' + number, 10).toString(16);
+    if (sString.length === 1) {
+        return '0' + sString;
+    } else {
+        return sString;
+    }
 }
 
 
-function bit(number) {
-	
-	var sString=parseInt("" + number,10).toString(2);
-	while (sString.length<8)
-		sString= "0" + sString;
-	
-	return sString;
+function bit (number) {
+
+    var sString = parseInt('' + number, 10).toString(2);
+    while (sString.length < 8) {
+        sString = '0' + sString;
+    }
+
+    return sString;
 }
 
 
-function hex2(number) {
-	
-	var sString=parseInt("" + number,10).toString(16);
-	if (sString.length==1)
-		return "000" + sString;
-	else if (sString.length==2)
-		return "00" + sString;
-	else if (sString.length==3)
-		return "0" + sString;
-	else
-		return sString;
+function hex2 (number) {
+
+    var sString = parseInt('' + number, 10).toString(16);
+    if (sString.length === 1) {
+        return '000' + sString;
+    } else if (sString.length === 2) {
+        return '00' + sString;
+    } else if (sString.length === 3) {
+        return '0' + sString;
+    } else {
+        return sString;
+    }
 }
 
-function fDSID(dsidName) {
-	return dsidName.substr(26,6);
+function fDSID (dsidName) {
+    return dsidName.substr(26, 6);
 }
 
 var lWarn = {
-		logln : function(o) {
-		}
-	};
-	var lInfo = {
-		logln : function(o) {
-		}
-	};
-	var lNerv = {
-			logln : function(o) {
-			}
-		};
-	
-	function encode_utf8(s) {
-	  return unescape(encodeURIComponent(s));
-	}
-
-	function decode_utf8(s) {
-	  return decodeURIComponent(escape(s));
-	}
-	
-	
-	var Utf8 = {
-			 
-		    // public method for url encoding
-		    encode : function (string) {
-		        string = string.replace(/\r\n/g,"\n");
-		        var utftext = "";
-		 
-		        for (var n = 0; n < string.length; n++) {
-		 
-		            var c = string.charCodeAt(n);
-		 
-		            if (c < 128) {
-		                utftext += String.fromCharCode(c);
-		            }
-		            else if((c > 127) && (c < 2048)) {
-		                utftext += String.fromCharCode((c >> 6) | 192);
-		                utftext += String.fromCharCode((c & 63) | 128);
-		            }
-		            else {
-		                utftext += String.fromCharCode((c >> 12) | 224);
-		                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
-		                utftext += String.fromCharCode((c & 63) | 128);
-		            }
-		 
-		        }
-		 
-		        return utftext;
-		    },
-		 
-		    // public method for url decoding
-		    decode : function (utftext) {
-		        var string = "";
-		        var i = 0;
-		        var c = 0; var c1 = 0; var c2 = 0;
-		 
-		        while ( i < utftext.length ) {
-		 
-		            c = utftext.charCodeAt(i);
-		 
-		            if (c < 128) {
-		                string += String.fromCharCode(c);
-		                i++;
-		            }
-		            else if((c > 191) && (c < 224)) {
-		                c2 = utftext.charCodeAt(i+1);
-		                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
-		                i += 2;
-		            }
-		            else {
-		                c2 = utftext.charCodeAt(i+1);
-		                c3 = utftext.charCodeAt(i+2);
-		                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
-		                i += 3;
-		            }
-		 
-		        }
-		 
-		        return string;
-		    }
-		 
-		};
-	
-var globalRetryMax = 2;	
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+var lInfo = {
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+var lNerv = {
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+
+function encode_utf8 (s) {
+    return unescape(encodeURIComponent(s));
+}
+
+function decode_utf8 (s) {
+    return decodeURIComponent(escape(s));
+}
+
+
+var Utf8 = {
+
+    // public method for url encoding
+    encode: function (string) {
+        string = string.replace(/\r\n/g, '\n');
+        var utftext = '';
+
+        for (var n = 0; n < string.length; n++) {
+
+            var c = string.charCodeAt(n);
+
+            if (c < 128) {
+                utftext += String.fromCharCode(c);
+            } else if ((c > 127) && (c < 2048)) {
+                utftext += String.fromCharCode((c >> 6) | 192);
+                utftext += String.fromCharCode((c & 63) | 128);
+            } else {
+                utftext += String.fromCharCode((c >> 12) | 224);
+                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+                utftext += String.fromCharCode((c & 63) | 128);
+            }
+
+        }
+
+        return utftext;
+    },
+
+    // public method for url decoding
+    decode: function (utftext) {
+        var string = '';
+        var i = 0;
+        var c = 0;
+        var c1 = 0;
+        var c2 = 0;
+
+        while (i < utftext.length) {
+
+            c = utftext.charCodeAt(i);
+
+            if (c < 128) {
+                string += String.fromCharCode(c);
+                i++;
+            } else if ((c > 191) && (c < 224)) {
+                c2 = utftext.charCodeAt(i + 1);
+                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+                i += 2;
+            } else {
+                c2 = utftext.charCodeAt(i + 1);
+                var c3 = utftext.charCodeAt(i + 2);
+                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+                i += 3;
+            }
+
+        }
+
+        return string;
+    }
+
+};
+
+var globalRetryMax = 2;
 
 lInfo = new Logger(LOGFILE_NAME);
 lWarn = new Logger(LOGFILE_NAME);
 lNerv = new Logger(LOGFILE_NAME);
 
-Property.setSavedProperty=function (path,value) {
-	  Property.setProperty(path, value);
-	  Property.setFlag(path, 'ARCHIVE', true);
-}
+Property.setSavedProperty = function (path, value) {
+    Property.setProperty(path, value);
+    Property.setFlag(path, 'ARCHIVE', true);
+};
 
-function dsidFromIndex(anyDSID,deviceIndex) {
-	var baseIndex=Math.floor(parseInt(anyDSID.substring(anyDSID.length-3).substring(0,1),16)/8)*8;
-	var parentDSID=anyDSID.substring(0,anyDSID.length-3);
-	return parentDSID + '' + (baseIndex+deviceIndex).toString(16) + "00";			
+function dsidFromIndex (anyDSID, deviceIndex) {
+    var baseIndex = Math.floor(parseInt(anyDSID.substring(anyDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+    var parentDSID = anyDSID.substring(0, anyDSID.length - 3);
+    return parentDSID + '' + (baseIndex + deviceIndex).toString(16) + '00';
 }
 
 
-function cleanup() {
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();
-		
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getChild('state')!=null) {
-				if (oArray[iIndex].getChild('state').getValue()=='end') {
-					lInfo.logln('Removing ' + oArray[iIndex].getName());
-					Property.getNode('queue').removeChild(oArray[iIndex].getName());
-				}
-			}
-		}
-	}
-	
+function cleanup () {
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getChild('state') != null) {
+                if (oArray[iIndex].getChild('state').getValue() === 'end') {
+                    lInfo.logln('Removing ' + oArray[iIndex].getName());
+                    Property.getNode('queue').removeChild(oArray[iIndex].getName());
+                }
+            }
+        }
+    }
+
 }
 
-function getActiveQueueItem() {
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();		
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getChild('state')!=null) {
-				if (oArray[iIndex].getChild('state').getValue()=='working') {
-					return oArray[iIndex];					
-				}
-			}
-		}
-	}
-	return null;
+function getActiveQueueItem () {
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getChild('state') != null) {
+                if (oArray[iIndex].getChild('state').getValue() === 'working') {
+                    return oArray[iIndex];
+                }
+            }
+        }
+    }
+    return null;
 }
 
-function getEnqueueItem() {
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();		
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getChild('state')!=null) {
-				if (oArray[iIndex].getChild('state').getValue()=='queued') {
-					return oArray[iIndex];					
-				}
-			}
-		}
-	}
-	return null;
+function getEnqueueItem () {
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getChild('state') != null) {
+                if (oArray[iIndex].getChild('state').getValue() === 'queued') {
+                    return oArray[iIndex];
+                }
+            }
+        }
+    }
+    return null;
 }
 
-function startBulkQueue() {
-	
-	var fFirst=null;
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();
-		var fActionPending=false;
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getChild('state')!=null) {
-				if (oArray[iIndex].getChild('state').getValue()=='working') {
-					lInfo.logln('queue is already in working on ' + oArray[iIndex].getPath());
-					return;
-				}
-				if (oArray[iIndex].getChild('state').getValue()=='queued') {
-					if (fFirst==null)
-						fFirst=oArray[iIndex].getName();
-				}
-			}
-		}
-	}
-	if (fFirst!=null) {
-		var fSkipBecauseProblems=false;
-		if (Property.getNode('queue/'+ fFirst + '/data/0/dsid')!=null) {
-			var baseDSID=dsidFromIndex(Property.getNode('queue/'+ fFirst + '/data/0/dsid').getValue(),0);
-			if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/present')==null) {
-				lWarn.logln('ERROR: Device ' + baseDSID + ' is not present, stopping queue');
-				fSkipBecauseProblems=true;
-			} else if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/present').getValue()==false) {
-				lWarn.logln('ERROR: Device ' + baseDSID + ' is not present, stopping queue');
-				fSkipBecauseProblems=true;
-			}
-		}
-		
-		if (!fSkipBecauseProblems) {
-			var definitions=precogQueue(true);
-			lInfo.logln('starting with queue ' + fFirst);
-			Property.setProperty('queue/'+ fFirst + '/state','working');
-			if (definitions.length>0) {
-				if (Property.getNode('queue/'+ fFirst + '/timeoutDetection')) {
-					var dsid=Property.getNode('queue/'+ fFirst + '/timeoutDetection').getValue();
-					setDeviceConfig(dsidFromIndex(dsid,7),127,0xd1,0x10);
-				}
-				try {
-					lInfo.logln('start definition: '+JSON.stringify(definitions));
-					var taskID=setDeviceConfigBulk(JSON.stringify(definitions));
-					Property.setProperty('queue/'+ fFirst + '/bulkTaskID',taskID);
-					lInfo.logln('started setDeviceConfigBulk with taskID ' + taskID);
-				}
-				catch(e) {
-					lWarn.logln('ERROR on setDeviceConfigBulk:' + e);
-				}
-				lInfo.logln('started with queue ' + fFirst);
-			} else {
-				lInfo.logln('queue ' + fFirst + ' is empty, just deleting and go to the next');
-				Property.setProperty('queue/'+ fFirst + '/state','end');
-				cleanup();
-				new Event ('ulux.queue',{actions:'startBulkQueue',useBULK:useBULK}).raise();
-				new Event('ulux.saved',{}).raise();
-			}
-		} else {
-			lInfo.logln('skipping queue ' + fFirst);
-			Property.setProperty('queue/'+ fFirst + '/state','error');
-			new Event ('ulux.queue',{actions:'startBulkQueue',useBULK:useBULK}).raise();
-		}
-	} else {
-		Property.store();
-		lInfo.logln('nothing to do');
-		cleanup();
-		new Event('ulux.saved',{}).raise();
-	}
+function startBulkQueue () {
+
+    var fFirst = null;
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        var fActionPending = false;
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getChild('state') != null) {
+                if (oArray[iIndex].getChild('state').getValue() === 'working') {
+                    lInfo.logln('queue is already in working on ' + oArray[iIndex].getPath());
+                    return;
+                }
+                if (oArray[iIndex].getChild('state').getValue() === 'queued') {
+                    if (fFirst == null) {
+                        fFirst = oArray[iIndex].getName();
+                    }
+                }
+            }
+        }
+    }
+    if (fFirst != null) {
+        var fSkipBecauseProblems = false;
+        if (Property.getNode('queue/' + fFirst + '/data/0/dsid') != null) {
+            var baseDSID = dsidFromIndex(Property.getNode('queue/' + fFirst + '/data/0/dsid').getValue(), 0);
+            if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/present') == null) {
+                lWarn.logln('ERROR: Device ' + baseDSID + ' is not present, stopping queue');
+                fSkipBecauseProblems = true;
+            } else if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID + '/present').getValue() == false) {
+                lWarn.logln('ERROR: Device ' + baseDSID + ' is not present, stopping queue');
+                fSkipBecauseProblems = true;
+            }
+        }
+
+        if (!fSkipBecauseProblems) {
+            var definitions = precogQueue(true);
+            lInfo.logln('starting with queue ' + fFirst);
+            Property.setProperty('queue/' + fFirst + '/state', 'working');
+            if (definitions.length > 0) {
+                if (Property.getNode('queue/' + fFirst + '/timeoutDetection')) {
+                    var dsid = Property.getNode('queue/' + fFirst + '/timeoutDetection').getValue();
+                    setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd1, 0x10);
+                }
+                try {
+                    lInfo.logln('start definition: ' + JSON.stringify(definitions));
+                    var taskID = setDeviceConfigBulk(JSON.stringify(definitions));
+                    Property.setProperty('queue/' + fFirst + '/bulkTaskID', taskID);
+                    lInfo.logln('started setDeviceConfigBulk with taskID ' + taskID);
+                } catch (e) {
+                    lWarn.logln('ERROR on setDeviceConfigBulk:' + e);
+                }
+                lInfo.logln('started with queue ' + fFirst);
+            } else {
+                lInfo.logln('queue ' + fFirst + ' is empty, just deleting and go to the next');
+                Property.setProperty('queue/' + fFirst + '/state', 'end');
+                cleanup();
+                new Event('ulux.queue', { actions: 'startBulkQueue', useBULK: useBULK }).raise();
+                new Event('ulux.saved', {}).raise();
+            }
+        } else {
+            lInfo.logln('skipping queue ' + fFirst);
+            Property.setProperty('queue/' + fFirst + '/state', 'error');
+            new Event('ulux.queue', { actions: 'startBulkQueue', useBULK: useBULK }).raise();
+        }
+    } else {
+        Property.store();
+        lInfo.logln('nothing to do');
+        cleanup();
+        new Event('ulux.saved', {}).raise();
+    }
 }
 
-function handleFailedBulkWrite() {
-	var taskID = raisedEvent.parameter.taskId;
-	lInfo.logln('bulkwrite abruptly finished! seems to be an error! reverting queue');
-	if (Property.getNode('queue') != null) {
-	var oArray = Property.getNode('queue').getChildren();
-		for (var iIndex=0; iIndex < oArray.length; iIndex++) {
-			var queueNode = oArray[iIndex];
-			if (queueNode.getChild('bulkTaskID') != null) {
-				if (queueNode.getChild('bulkTaskID').getValue() == taskID) {
-					revertQueue(queueNode);
-					Property.store();
-					startBulkQueue();
-					return;
-				}
-			}
-		}
-	}
+function handleFailedBulkWrite () {
+    var taskID = raisedEvent.parameter.taskId;
+    lInfo.logln('bulkwrite abruptly finished! seems to be an error! reverting queue');
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            var queueNode = oArray[iIndex];
+            if (queueNode.getChild('bulkTaskID') != null) {
+                if (queueNode.getChild('bulkTaskID').getValue() == taskID) {
+                    revertQueue(queueNode);
+                    Property.store();
+                    startBulkQueue();
+                    return;
+                }
+            }
+        }
+    }
 }
 
-function updateCache() {
-	var taskID=raisedEvent.parameter.taskId;
-	if ((raisedEvent.parameter.bank==null) || (raisedEvent.parameter.offset==null) ||  (raisedEvent.parameter.value==null)) {
-		handleFailedBulkWrite();
-		return;
-	}
-		
-	var bank=parseInt(""+raisedEvent.parameter.bank,10);
-	var index=parseInt(""+raisedEvent.parameter.offset,10);
-	var value=parseInt(""+raisedEvent.parameter.value,10);
-	var dsid=raisedEvent.source.dsuid;
-	lNerv.logln("bulkwrite: B " + hex(bank) + " I "+ hex(index) + " V " + hex(value) + " D " + dsid + " task " + taskID);
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			var queueNode=oArray[iIndex];
-			if (queueNode.getChild('bulkTaskID')!=null)
-				if (queueNode.getChild('bulkTaskID').getValue()==taskID) 
-					if (queueNode.getChild('data')!=null) {
-						var fActionPending=false;
-						var dataNodes=queueNode.getChild('data').getChildren();
-						var dataNode;
-						var baseDSID=dsidFromIndex(dsid,0);
-						var lastDSID=dsidFromIndex(dsid,7);
-						
-						if (lastDSID==dsid) {
-							if (bank==0x7f) {
-								if (index==0xd3) {
-									Property.setProperty('devices/' + baseDSID + '/lastTextsel',value);
-									lNerv.logln('found txtselreq to ' + hex(value) + ' queue: ' + queueNode.getPath());
-								}
-							}
-						}
-						var lastTextSel=-1;
-						if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-							lastTextSel=Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue();
-						
-						for (var iIndex=0;iIndex<dataNodes.length;iIndex++) {
-							dataNode=dataNodes[iIndex];
-						
-							var queueBank=dataNode.getChild('bank').getValue();
-							var queueDSID=dataNode.getChild('dsid').getValue();
-							var queueIndex=dataNode.getChild('index').getValue();
-							var meta="";
-							if (dataNode.getChild('meta')!=null)
-								meta=dataNode.getChild('meta').getValue();
-							
-							if (queueBank==bank)
-								if (queueDSID==dsid) {
-									
-									var type=dataNode.getChild('type').getValue();
-									switch (type) {
-										case 'write':
-										case 'writeBitmask':{
-											if (dataNode.getChild('textSel')!=null) {
-												var textSel=dataNode.getChild('textSel').getValue();
-												if (lastTextSel!=textSel)
-													break;
-											}
-											if (queueIndex==index) {
-												lNerv.logln('found queueitem ' + dataNode.getPath());
-												if (meta!='nocache') {
-													var sCachePath=dataNode.getChild('cachePath').getValue();
-													if (Property.getNode(sCachePath)!=null) {
-														Property.setProperty(dataNode.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());												
-														Property.setSavedProperty(sCachePath,value);
-													}
-												}
-												Property.setProperty(dataNode.getChild('state').getPath(),'finish');
-											}
-											break;
-										}
-										case 'writeNibble':{
-											if (dataNode.getChild('textSel')!=null) {
-												var textSel=dataNode.getChild('textSel').getValue();
-												if (lastTextSel!=textSel)
-													break;
-											}
-											if (queueIndex==index) {
-												lNerv.logln('found queueitem ' + dataNode.getPath());
-												if (meta!='nocache') {
-											        var sCachePathHighNibble=dataNode.getChild('cachePath').getValue();;
-											        var sCachePathLowNibble=dataNode.getChild('cachePathLow').getValue();
-
-													if (Property.getNode(sCachePathHighNibble)!=null) {
-														Property.setProperty(dataNode.getPath()+'/oldValueHigh',Property.getNode(sCachePathHighNibble).getValue());
-													}
-													if (Property.getNode(sCachePathLowNibble)!=null) {
-														Property.setProperty(dataNode.getPath()+'/oldValueLow',Property.getNode(sCachePathLowNibble).getValue());
-													}
-													Property.setSavedProperty(sCachePathLowNibble,value&0x0f);
-											    	Property.setSavedProperty(sCachePathHighNibble,(value>>4)&0x0f);
-												}
-												Property.setProperty(dataNode.getChild('state').getPath(),'finish');
-											}
-											break;
-										}
-										case 'writeWord':{
-											// react on second value only
-											if (dataNode.getChild('textSel')!=null) {
-												var textSel=dataNode.getChild('textSel').getValue();
-												if (lastTextSel!=textSel)
-													break;
-											}
-											if ((queueIndex+1)==index) {
-												lNerv.logln('found queueitem ' + dataNode.getPath());
-												if (meta!='nocache') {
-													var sCachePath=dataNode.getChild('cachePath').getValue();
-													if (Property.getNode(sCachePath)!=null) {
-															Property.setProperty(dataNode.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-															var queueValue=dataNode.getChild('value').getValue();
-															Property.setSavedProperty(sCachePath,queueValue);
-													}
-												}
-												Property.setProperty(dataNode.getChild('state').getPath(),'finish');
-											}
-											break;
-										} 
-										case 'writeTextBlock': {											
-											var newString=Utf8.decode(dataNode.getChild('value').getValue());
-											var textSel=dataNode.getChild('textSel').getValue();
-											if (textSel==lastTextSel)
-												if ((index>=queueIndex)&&(index<(queueIndex+newString.length+1))) {
-													lNerv.logln('found queueitem ' + dataNode.getPath());
-													if (meta!='nocache') {
-														var sCachePath=dataNode.getChild('cachePath').getValue();
-														if (Property.getNode(sCachePath)!=null) {
-															if (Property.getNode(dataNode.getPath()+'/oldValue')==null)
-																Property.setProperty(dataNode.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-															
-															var oldString=Utf8.decode(Property.getNode(sCachePath).getValue());
-															var subIndex=index-queueIndex;
-															
-															if (value==0) {
-																oldString=oldString.substr(0,subIndex);
-																Property.setProperty(dataNode.getChild('state').getPath(),'finish');
-															} else {
-																oldString=oldString.substr(0,subIndex) + String.fromCharCode(value) + oldString.substr(subIndex+1);
-															}
-															lNerv.logln('update string on position '+subIndex+'  to ' + oldString);
-															Property.setSavedProperty(sCachePath,Utf8.encode(oldString));
-														}
-													} else {
-														if (value==0)
-															Property.setProperty(dataNode.getChild('state').getPath(),'finish');
-													}
-												}
-										} 
-									}
-								}
-								
-							if (dataNode.getChild('state').getValue()!='finish') {
-								fActionPending=true;
-							}
-							
-						}
-						Property.store();
-						if (!fActionPending) {
-							lNerv.logln('queue is finished');
-							var fTransmitOK=checkForTimeoutAndMaybeRestart(queueNode);
-							if (fTransmitOK) {
-								queueNode.getChild('state').setValue('end');
-								if (dataNode!=null)
-									if (dataNode.getChild('finishEvent')!=null)
-										if (dataNode.getChild('finishEventParameter')!=null) {
-											lNerv.logln('Raise finishevent ' + dataNode.getChild('finishEvent').getValue());
-											new Event(dataNode.getChild('finishEvent').getValue(),JSON.parse(dataNode.getChild('finishEventParameter').getValue())).raise();
-										}		
-								cleanup();
-							} else {
-								lNerv.logln('queue should be reset');
-							}
-							startBulkQueue();
-						}
-					}
-			}
-	}
+function updateCache () {
+    var taskID = raisedEvent.parameter.taskId;
+    if ((raisedEvent.parameter.bank == null) || (raisedEvent.parameter.offset == null) || (raisedEvent.parameter.value == null)) {
+        handleFailedBulkWrite();
+        return;
+    }
+
+    var bank = parseInt('' + raisedEvent.parameter.bank, 10);
+    var index = parseInt('' + raisedEvent.parameter.offset, 10);
+    var value = parseInt('' + raisedEvent.parameter.value, 10);
+    var dsid = raisedEvent.source.dsuid;
+    lNerv.logln('bulkwrite: B ' + hex(bank) + ' I ' + hex(index) + ' V ' + hex(value) + ' D ' + dsid + ' task ' + taskID);
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            var queueNode = oArray[iIndex];
+            if (queueNode.getChild('bulkTaskID') != null) {
+                if (queueNode.getChild('bulkTaskID').getValue() == taskID) {
+                    if (queueNode.getChild('data') != null) {
+                        var fActionPending = false;
+                        var dataNodes = queueNode.getChild('data').getChildren();
+                        var dataNode;
+                        var baseDSID = dsidFromIndex(dsid, 0);
+                        var lastDSID = dsidFromIndex(dsid, 7);
+
+                        if (lastDSID == dsid) {
+                            if (bank == 0x7f) {
+                                if (index == 0xd3) {
+                                    Property.setProperty('devices/' + baseDSID + '/lastTextsel', value);
+                                    lNerv.logln('found txtselreq to ' + hex(value) + ' queue: ' + queueNode.getPath());
+                                }
+                            }
+                        }
+                        var lastTextSel = -1;
+                        if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) { lastTextSel = Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue(); }
+
+                        for (var iIndex = 0; iIndex < dataNodes.length; iIndex++) {
+                            dataNode = dataNodes[iIndex];
+
+                            var queueBank = dataNode.getChild('bank').getValue();
+                            var queueDSID = dataNode.getChild('dsid').getValue();
+                            var queueIndex = dataNode.getChild('index').getValue();
+                            var meta = '';
+                            if (dataNode.getChild('meta') != null) { meta = dataNode.getChild('meta').getValue(); }
+
+                            if (queueBank == bank) {
+                                if (queueDSID == dsid) {
+
+                                    var type = dataNode.getChild('type').getValue();
+                                    switch (type) {
+                                        case 'write':
+                                        case 'writeBitmask': {
+                                            if (dataNode.getChild('textSel') != null) {
+                                                var textSel = dataNode.getChild('textSel').getValue();
+                                                if (lastTextSel != textSel) {
+                                                    break;
+                                                }
+                                            }
+                                            if (queueIndex == index) {
+                                                lNerv.logln('found queueitem ' + dataNode.getPath());
+                                                if (meta !== 'nocache') {
+                                                    var sCachePath = dataNode.getChild('cachePath').getValue();
+                                                    if (Property.getNode(sCachePath) != null) {
+                                                        Property.setProperty(dataNode.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                                                        Property.setSavedProperty(sCachePath, value);
+                                                    }
+                                                }
+                                                Property.setProperty(dataNode.getChild('state').getPath(), 'finish');
+                                            }
+                                            break;
+                                        }
+                                        case 'writeNibble': {
+                                            if (dataNode.getChild('textSel') != null) {
+                                                var textSel = dataNode.getChild('textSel').getValue();
+                                                if (lastTextSel != textSel) {
+                                                    break;
+                                                }
+                                            }
+                                            if (queueIndex == index) {
+                                                lNerv.logln('found queueitem ' + dataNode.getPath());
+                                                if (meta !== 'nocache') {
+                                                    var sCachePathHighNibble = dataNode.getChild('cachePath').getValue();
+                                                    var sCachePathLowNibble = dataNode.getChild('cachePathLow').getValue();
+
+                                                    if (Property.getNode(sCachePathHighNibble) != null) {
+                                                        Property.setProperty(dataNode.getPath() + '/oldValueHigh', Property.getNode(sCachePathHighNibble).getValue());
+                                                    }
+                                                    if (Property.getNode(sCachePathLowNibble) != null) {
+                                                        Property.setProperty(dataNode.getPath() + '/oldValueLow', Property.getNode(sCachePathLowNibble).getValue());
+                                                    }
+                                                    Property.setSavedProperty(sCachePathLowNibble, value & 0x0f);
+                                                    Property.setSavedProperty(sCachePathHighNibble, (value >> 4) & 0x0f);
+                                                }
+                                                Property.setProperty(dataNode.getChild('state').getPath(), 'finish');
+                                            }
+                                            break;
+                                        }
+                                        case 'writeWord': {
+                                            // react on second value only
+                                            if (dataNode.getChild('textSel') != null) {
+                                                var textSel = dataNode.getChild('textSel').getValue();
+                                                if (lastTextSel != textSel) {
+                                                    break;
+                                                }
+                                            }
+                                            if ((queueIndex + 1) == index) {
+                                                lNerv.logln('found queueitem ' + dataNode.getPath());
+                                                if (meta !== 'nocache') {
+                                                    var sCachePath = dataNode.getChild('cachePath').getValue();
+                                                    if (Property.getNode(sCachePath) != null) {
+                                                        Property.setProperty(dataNode.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                                                        var queueValue = dataNode.getChild('value').getValue();
+                                                        Property.setSavedProperty(sCachePath, queueValue);
+                                                    }
+                                                }
+                                                Property.setProperty(dataNode.getChild('state').getPath(), 'finish');
+                                            }
+                                            break;
+                                        }
+                                        case 'writeTextBlock': {
+                                            var newString = Utf8.decode(dataNode.getChild('value').getValue());
+                                            var textSel = dataNode.getChild('textSel').getValue();
+                                            if (textSel == lastTextSel) {
+                                                if ((index >= queueIndex) && (index < (queueIndex + newString.length + 1))) {
+                                                    lNerv.logln('found queueitem ' + dataNode.getPath());
+                                                    if (meta !== 'nocache') {
+                                                        var sCachePath = dataNode.getChild('cachePath').getValue();
+                                                        if (Property.getNode(sCachePath) != null) {
+                                                            if (Property.getNode(dataNode.getPath() + '/oldValue') == null) {
+                                                                Property.setProperty(dataNode.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                                                            }
+
+                                                            var oldString = Utf8.decode(Property.getNode(sCachePath).getValue());
+                                                            var subIndex = index - queueIndex;
+
+                                                            if (value == 0) {
+                                                                oldString = oldString.substr(0, subIndex);
+                                                                Property.setProperty(dataNode.getChild('state').getPath(), 'finish');
+                                                            } else {
+                                                                oldString = oldString.substr(0, subIndex) + String.fromCharCode(value) + oldString.substr(subIndex + 1);
+                                                            }
+                                                            lNerv.logln('update string on position ' + subIndex + '  to ' + oldString);
+                                                            Property.setSavedProperty(sCachePath, Utf8.encode(oldString));
+                                                        }
+                                                    } else if (value == 0) {
+                                                        Property.setProperty(dataNode.getChild('state').getPath(), 'finish');
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+
+                            if (dataNode.getChild('state').getValue() !== 'finish') {
+                                fActionPending = true;
+                            }
+
+                        }
+                        Property.store();
+                        if (!fActionPending) {
+                            lNerv.logln('queue is finished');
+                            var fTransmitOK = checkForTimeoutAndMaybeRestart(queueNode);
+                            if (fTransmitOK) {
+                                queueNode.getChild('state').setValue('end');
+                                if (dataNode != null) {
+                                    if (dataNode.getChild('finishEvent') != null) {
+                                        if (dataNode.getChild('finishEventParameter') != null) {
+                                            lNerv.logln('Raise finishevent ' + dataNode.getChild('finishEvent').getValue());
+                                            new Event(dataNode.getChild('finishEvent').getValue(), JSON.parse(dataNode.getChild('finishEventParameter').getValue())).raise();
+                                        }
+                                    }
+                                }
+                                cleanup();
+                            } else {
+                                lNerv.logln('queue should be reset');
+                            }
+                            startBulkQueue();
+                        }
+                    }
+                }
+            }
+        }
+    }
 }
 
-function checkForTimeoutAndMaybeRestart(queueNode) {
-	if (queueNode.getChild('timeoutDetection')!=null) {
-		lNerv.logln("Checking Timeout now for bulkwrite");
-		var checkerDSID=queueNode.getChild('timeoutDetection').getValue();
-		var value=getDeviceConfig(dsidFromIndex(checkerDSID,7),127,0xd1);
-		if ((value&0x10) != 0x10) {
-			lNerv.logln("TIMEOUT DETECTION! PANIC ON!");
-			revertQueue(queueNode);
-			Property.store();
-			return false;
-		} else {
-			if (queueNode.getChild('updateModeSet'))
-				if (queueNode.getChild('updateModeSet').getValue()) {
-					lNerv.logln("no timeout, setting update flag");
-					setDeviceConfig(dsidFromIndex(checkerDSID,7),127,0xd1,0x80);					
-				}
-		}
-	}
-	return true;
+function checkForTimeoutAndMaybeRestart (queueNode) {
+    if (queueNode.getChild('timeoutDetection') != null) {
+        lNerv.logln('Checking Timeout now for bulkwrite');
+        var checkerDSID = queueNode.getChild('timeoutDetection').getValue();
+        var value = getDeviceConfig(dsidFromIndex(checkerDSID, 7), 127, 0xd1);
+        if ((value & 0x10) != 0x10) {
+            lNerv.logln('TIMEOUT DETECTION! PANIC ON!');
+            revertQueue(queueNode);
+            Property.store();
+            return false;
+        } else if (queueNode.getChild('updateModeSet')) {
+            if (queueNode.getChild('updateModeSet').getValue()) {
+                lNerv.logln('no timeout, setting update flag');
+                setDeviceConfig(dsidFromIndex(checkerDSID, 7), 127, 0xd1, 0x80);
+            }
+        }
+    }
+    return true;
 }
 
-function startQueue() {
-	var fFirst=null;
-	if (Property.getNode('queue')!=null) {
-		var oArray=Property.getNode('queue').getChildren();
-		var fActionPending=false;
-		for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-			if (oArray[iIndex].getChild('state')!=null) {
-				if (oArray[iIndex].getChild('state').getValue()=='working') {
-					lInfo.logln('queue is already in working on ' + oArray[iIndex].getPath());
-					return;
-				}
-				if (oArray[iIndex].getChild('state').getValue()=='queued') {
-					if (fFirst==null)
-						fFirst=oArray[iIndex].getName();
-				}
-			}
-		}
-	}
-	if (fFirst!=null) {
-		precogQueue();
-		lInfo.logln('starting ' + fFirst);
-		Property.setProperty('queue/'+ fFirst + '/state','working');
-		if (Property.getNode('queue/'+ fFirst + '/timeoutDetection')) {
-			var dsid=Property.getNode('queue/'+ fFirst + '/timeoutDetection').getValue();
-			setDeviceConfig(dsidFromIndex(dsid,7),127,0xd1,0x10);
-		}
-		new Event ('ulux.queue',{actions:'exec',useBULK:useBULK}).raise();
-	} else {
-		Property.store();
-		lInfo.logln('nothing to do');
-		cleanup();
-		new Event('ulux.saved',{}).raise();
-	}
+function startQueue () {
+    var fFirst = null;
+    if (Property.getNode('queue') != null) {
+        var oArray = Property.getNode('queue').getChildren();
+        var fActionPending = false;
+        for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+            if (oArray[iIndex].getChild('state') != null) {
+                if (oArray[iIndex].getChild('state').getValue() === 'working') {
+                    lInfo.logln('queue is already in working on ' + oArray[iIndex].getPath());
+                    return;
+                }
+                if (oArray[iIndex].getChild('state').getValue() === 'queued') {
+                    if (fFirst == null) {
+                        fFirst = oArray[iIndex].getName();
+                    }
+                }
+            }
+        }
+    }
+    if (fFirst != null) {
+        precogQueue();
+        lInfo.logln('starting ' + fFirst);
+        Property.setProperty('queue/' + fFirst + '/state', 'working');
+        if (Property.getNode('queue/' + fFirst + '/timeoutDetection')) {
+            var dsid = Property.getNode('queue/' + fFirst + '/timeoutDetection').getValue();
+            setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd1, 0x10);
+        }
+        new Event('ulux.queue', { actions: 'exec', useBULK: useBULK }).raise();
+    } else {
+        Property.store();
+        lInfo.logln('nothing to do');
+        cleanup();
+        new Event('ulux.saved', {}).raise();
+    }
 }
 
-var maxSkips=10;
-
-function revertQueue(activeItem) {
-	lNerv.logln("revertQueue");
-	var data=activeItem.getChild('data').getChildren();
-	for (var iIndex=0;iIndex<data.length;iIndex++) {
-		var item=data[iIndex];
-		
-		if (item.getChild('oldValue')!=null) {
-			var cachePath=item.getChild('cachePath').getValue();
-			Property.setProperty(cachePath,item.getChild('oldValue').getValue());
-		}
-		if (item.getChild('oldValueHigh')!=null) {
-			var cachePath=item.getChild('cachePath').getValue();
-			Property.setProperty(cachePath,item.getChild('oldValueHigh').getValue());
-		}
-		if (item.getChild('oldValueLow')!=null) {
-			var cachePath=item.getChild('cachePathLow').getValue();
-			Property.setProperty(cachePath,item.getChild('oldValueLow').getValue());			
-		}
-		item.getChild('state').setValue('pending');
-		item.removeChild('subIndex');
-	}
-	activeItem.getChild('state').setValue('queued');
+var maxSkips = 10;
+
+function revertQueue (activeItem) {
+    lNerv.logln('revertQueue');
+    var data = activeItem.getChild('data').getChildren();
+    for (var iIndex = 0; iIndex < data.length; iIndex++) {
+        var item = data[iIndex];
+
+        if (item.getChild('oldValue') != null) {
+            var cachePath = item.getChild('cachePath').getValue();
+            Property.setProperty(cachePath, item.getChild('oldValue').getValue());
+        }
+        if (item.getChild('oldValueHigh') != null) {
+            var cachePath = item.getChild('cachePath').getValue();
+            Property.setProperty(cachePath, item.getChild('oldValueHigh').getValue());
+        }
+        if (item.getChild('oldValueLow') != null) {
+            var cachePath = item.getChild('cachePathLow').getValue();
+            Property.setProperty(cachePath, item.getChild('oldValueLow').getValue());
+        }
+        item.getChild('state').setValue('pending');
+        item.removeChild('subIndex');
+    }
+    activeItem.getChild('state').setValue('queued');
 }
 
 
-function precogQueue(buildUpDefintion) {
-	var fShouldCheckTimeout=false;
-	var answerQueue=[];
-	if (buildUpDefintion==null)
-		buildUpDefintion=false;
-	var activeItem=getEnqueueItem();
-	if (activeItem==null)
-		return [];
-	lInfo.logln('precogQueue ' + activeItem.getName());
-	var data=activeItem.getChild('data').getChildren();
-	
-	if (activeItem.getChild('timeoutDetection')!=null)
-		fShouldCheckTimeout=true;
-	
-	var simulatedTextSel={};
-	
-	
-	for (var iIndex=0;iIndex<data.length ;iIndex++) {
-		
-		var nextItem=data[iIndex];
-		var type=nextItem.getChild('type').getValue();
-
-		var dsid=nextItem.getChild('dsid').getValue();
-		var baseDSID=dsidFromIndex(dsid,0);
-		var bank=nextItem.getChild('bank').getValue();
-		var index=nextItem.getChild('index').getValue();
-		
-		var forcedWrite=false;
-		if (nextItem.getChild('forced')!=null)
-			forcedWrite=nextItem.getChild('forced');
-
-		var meta="";
-		if (nextItem.getChild('meta')!=null)
-			meta=nextItem.getChild('meta').getValue();
-		
-		var fSkip=!buildUpDefintion;
-		
-		switch (type) {
-			case 'write':
-			case 'writeWord': {
-				var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-				if (!forcedWrite) 
-					if (meta!='nocache') {
-						var sCachePath=nextItem.getChild('cachePath').getValue();
-						if (Property.getNode(sCachePath)!=null) { 
-							if (Property.getNode(sCachePath).getValue()==value) {
-								Property.setProperty(nextItem.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-								Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-								fSkip=true;
-							} 
-						}
-					}
-				if (!fSkip) {
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (simulatedTextSel[baseDSID]!=null)
-							if (simulatedTextSel[baseDSID]==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						answerQueue.push({dsuid:dsidFromIndex(dsid,7),bank:127,offset:0xd3,value:textSel});
-						simulatedTextSel[baseDSID]=textSel;
-					}					
-					
-					if (type=='write') {
-						answerQueue.push({dsuid:dsid,bank:bank,offset:index,value:value});
-					}
-					if (type=='writeWord') {
-						answerQueue.push({dsuid:dsid,bank:bank,offset:index,value:(value&0xff)});
-						answerQueue.push({dsuid:dsid,bank:bank,offset:(index+1),value:((value>>8)&0xff)});
-					}
-				}
-			}
-			break;
-			case 'writeTextBlock': {
-				
-				var newString=Utf8.decode(nextItem.getChild('value').getValue());
-				var oldString="";
-				if (!forcedWrite) 
-					if (meta!='nocache') {
-						var sCachePath=nextItem.getChild('cachePath').getValue();
-						if (Property.getNode(sCachePath)!=null) { 
-							oldString=Utf8.decode(Property.getNode(sCachePath).getValue());
-							if (oldString==newString) {
-								Property.setProperty(nextItem.getPath()+'/oldValue',Utf8.encode(oldString));
-								Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-								fSkip=true;
-							}
-						}
-					}
-				if (!fSkip) {
-					
-					var length=nextItem.getChild('length').getValue();
-
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (simulatedTextSel[baseDSID]!=null)
-						if (simulatedTextSel[baseDSID]==neededTextSel) {
-							textSelEnsured=true;
-						}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						answerQueue.push({dsuid:dsidFromIndex(dsid,7),bank:127,offset:0xd3,value:textSel});
-						simulatedTextSel[baseDSID]=textSel;
-					}		
-					var subIndex=0;
-					for (subIndex=0;subIndex<newString.length;subIndex++) {
-						var newValue=' '.charCodeAt(0);
-						if (subIndex<newString.length) {
-							newValue=newString.charCodeAt(subIndex);
-						}
-						var oldValue=0;
-						if (subIndex<oldString.length)
-							oldValue=oldString.charCodeAt(subIndex);
-						
-						if ((oldValue!=newValue)||forcedWrite) {		
-							answerQueue.push({dsuid:dsid,bank:bank,offset:(index+subIndex),value:newValue});
-						}						
-					}
-					answerQueue.push({dsuid:dsid,bank:bank,offset:(index+subIndex),value:0});
-					
-
-				}
-			}
-			break;
-			case 'writeBitmask':{
-				var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-				var bitMask=parseInt("" + nextItem.getChild('bitmask').getValue(),10);
-				var oldValue=0;
-				if (meta!='nocache') {
-					var sCachePath=nextItem.getChild('cachePath').getValue();
-					if (Property.getNode(sCachePath)!=null)  
-						oldValue=Property.getNode(sCachePath).getValue();
-				}
-				var revMask=bitMask ^ 0xff;
-				var filteredOld=oldValue & revMask;				
-				var maskedValue=value & bitMask;
-				var targetValue=maskedValue | filteredOld;				
-				
-				if (!forcedWrite) 
-					if (meta!='nocache') {
-						var sCachePath=nextItem.getChild('cachePath').getValue();
-						if (Property.getNode(sCachePath)!=null) { 
-							if (Property.getNode(sCachePath).getValue()==targetValue) {
-								Property.setProperty(nextItem.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-								Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-								fSkip=true;
-							}
-						}
-					}
-				
-				if (!fSkip) {
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (simulatedTextSel[baseDSID]!=null)
-							if (simulatedTextSel[baseDSID]==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						answerQueue.push({dsuid:dsidFromIndex(dsid,7),bank:127,offset:0xd3,value:textSel});
-						simulatedTextSel[baseDSID]=textSel;
-					}					
-					
-					answerQueue.push({dsuid:dsid,bank:bank,offset:index,value:targetValue});
-				
-				}
-				
-				
-			}
-			break;
-			case 'writeNibble':{
-				var valueHigh=parseInt("" + nextItem.getChild('valueHigh').getValue(),10);
-				var valueLow=parseInt("" + nextItem.getChild('valueLow').getValue(),10);
-
-				if (!forcedWrite) 
-					if (meta!='nocache') {
-						var sCachePathHighNibble=nextItem.getChild('cachePath').getValue();
-						var sCachePathLowNibble=nextItem.getChild('cachePathLow').getValue();						
-						if (Property.getNode(sCachePathHighNibble)!=null)
-							if (Property.getNode(sCachePathHighNibble).getValue()==valueHigh)
-								if (Property.getNode(sCachePathLowNibble)!=null)
-									if (Property.getNode(sCachePathLowNibble).getValue()==valueLow) {
-										Property.setProperty(nextItem.getPath()+'/oldValueHigh',Property.getNode(sCachePathHighNibble).getValue());
-										Property.setProperty(nextItem.getPath()+'/oldValueLow',Property.getNode(sCachePathLowNibble).getValue());
-										Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-										fSkip=true;
-									}
-					}
-				if (!fSkip) {
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (simulatedTextSel[baseDSID]!=null)
-							if (simulatedTextSel[baseDSID]==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						answerQueue.push({dsuid:dsidFromIndex(dsid,7),bank:127,offset:0xd3,value:textSel});
-						simulatedTextSel[baseDSID]=textSel;
-					}
-					var value=((valueHigh<<4)&0xf0)|(valueLow&0x0f);
-					answerQueue.push({dsuid:dsid,bank:bank,offset:index,value:value});
-				}
-			}
-			break;
-		
-		} 
-	}	
-	lInfo.logln('check for update end skip');
-	var nothingToWrite=true;
-	for (var iIndex=0;iIndex<data.length ;iIndex++) {
-		var nextItem=data[iIndex];
-		var type=nextItem.getChild('type').getValue();
-		switch (type) {
-			case 'write':
-			case 'writeWord': 
-			case 'writeTextBlock': 
-			case 'writeBitmask':
-			case 'writeNibble':{
-				var fSkip=false;
-				if (type=='write'){
-					var bank=nextItem.getChild('bank').getValue();
-					var index=nextItem.getChild('index').getValue();
-					var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-					if (bank==127)
-						if (index==0xd1)
-							if (value==0x80) {
-								lInfo.logln('found a update end on index ' + iIndex +' from '+data.length+' skip and nothingToWrite = ' + nothingToWrite);
-								fSkip=true;
-								if (nothingToWrite)
-									Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-							}
-				}
-				if (!fSkip) {
-					if (nextItem.getChild('state').getValue()!='finish')
-						nothingToWrite=false;
-				}
-			}
-			break;
-		}
-	}
-	if (useBULK)
-		if (fShouldCheckTimeout==true) {
-			if (answerQueue[answerQueue.length-1].offset==0xd1) 
-				if (answerQueue[answerQueue.length-1].value==0x80) {
-					answerQueue.splice(-1,1);
-					lInfo.logln('on bulkwrite and with timeout check the update flag should be set not by bulkwrite, it will be set after timeout check');
-					Property.setProperty(activeItem.getPath() + '/updateModeSet',true);
-
-					var lastNode=data[data.length-1];
-					var bank=lastNode.getChild('bank').getValue();
-					var index=lastNode.getChild('index').getValue();
-					var value=parseInt("" + lastNode.getChild('value').getValue(),10);
-					if (bank==127)
-						if (index==0xd1)
-							if (value==0x80) {
-								Property.setProperty(lastNode.getChild('state').getPath(),'finish');
-							}
-					
-				}
-					
-					
-		}
-	
-	//check for empty queue
-	var fOnlyConfigChanged=true;
-	for (var iIndex=0;iIndex<answerQueue.length;iIndex++) {
-		if (answerQueue[iIndex].dsuid!=dsidFromIndex(answerQueue[iIndex].dsuid,7))
-			fOnlyConfigChanged=false;
-		if (answerQueue[iIndex].bank!=127)
-			fOnlyConfigChanged=false;
-		if (answerQueue[iIndex].offset!=209)
-			fOnlyConfigChanged=false;
-		if (answerQueue[iIndex].value!=128)
-			fOnlyConfigChanged=false;
-	}
-	
-	lInfo.logln('queue might be: ' + JSON.stringify(answerQueue));
-	
-	if (fOnlyConfigChanged) {
-		lInfo.logln('queue is empty beside ConfigChange, queue is set to empty !');
-		answerQueue=[];
-	}
-	return answerQueue;
+function precogQueue (buildUpDefintion) {
+    var fShouldCheckTimeout = false;
+    var answerQueue = [];
+    if (buildUpDefintion == null) {
+        buildUpDefintion = false;
+    }
+    var activeItem = getEnqueueItem();
+    if (activeItem == null) {
+        return [];
+    }
+    lInfo.logln('precogQueue ' + activeItem.getName());
+    var data = activeItem.getChild('data').getChildren();
+
+    if (activeItem.getChild('timeoutDetection') != null) { fShouldCheckTimeout = true; }
+
+    var simulatedTextSel = {};
+
+
+    for (var iIndex = 0; iIndex < data.length; iIndex++) {
+
+        var nextItem = data[iIndex];
+        var type = nextItem.getChild('type').getValue();
+
+        var dsid = nextItem.getChild('dsid').getValue();
+        var baseDSID = dsidFromIndex(dsid, 0);
+        var bank = nextItem.getChild('bank').getValue();
+        var index = nextItem.getChild('index').getValue();
+
+        var forcedWrite = false;
+        if (nextItem.getChild('forced') != null) { forcedWrite = nextItem.getChild('forced'); }
+
+        var meta = '';
+        if (nextItem.getChild('meta') != null) { meta = nextItem.getChild('meta').getValue(); }
+
+        var fSkip = !buildUpDefintion;
+
+        switch (type) {
+            case 'write':
+            case 'writeWord': {
+                var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                if (!forcedWrite) {
+                    if (meta !== 'nocache') {
+                        var sCachePath = nextItem.getChild('cachePath').getValue();
+                        if (Property.getNode(sCachePath) != null) {
+                            if (Property.getNode(sCachePath).getValue() == value) {
+                                Property.setProperty(nextItem.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                                fSkip = true;
+                            }
+                        }
+                    }
+                }
+                if (!fSkip) {
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (simulatedTextSel[baseDSID] != null) {
+                            if (simulatedTextSel[baseDSID] == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        answerQueue.push({ dsuid: dsidFromIndex(dsid, 7), bank: 127, offset: 0xd3, value: textSel });
+                        simulatedTextSel[baseDSID] = textSel;
+                    }
+
+                    if (type === 'write') {
+                        answerQueue.push({ dsuid: dsid, bank: bank, offset: index, value: value });
+                    }
+                    if (type === 'writeWord') {
+                        answerQueue.push({ dsuid: dsid, bank: bank, offset: index, value: (value & 0xff) });
+                        answerQueue.push({ dsuid: dsid, bank: bank, offset: (index + 1), value: ((value >> 8) & 0xff) });
+                    }
+                }
+            }
+                break;
+            case 'writeTextBlock': {
+
+                var newString = Utf8.decode(nextItem.getChild('value').getValue());
+                var oldString = '';
+                if (!forcedWrite) {
+                    if (meta !== 'nocache') {
+                        var sCachePath = nextItem.getChild('cachePath').getValue();
+                        if (Property.getNode(sCachePath) != null) {
+                            oldString = Utf8.decode(Property.getNode(sCachePath).getValue());
+                            if (oldString == newString) {
+                                Property.setProperty(nextItem.getPath() + '/oldValue', Utf8.encode(oldString));
+                                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                                fSkip = true;
+                            }
+                        }
+                    }
+                }
+                if (!fSkip) {
+
+                    var length = nextItem.getChild('length').getValue();
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (simulatedTextSel[baseDSID] != null) {
+                            if (simulatedTextSel[baseDSID] == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        answerQueue.push({ dsuid: dsidFromIndex(dsid, 7), bank: 127, offset: 0xd3, value: textSel });
+                        simulatedTextSel[baseDSID] = textSel;
+                    }
+                    var subIndex = 0;
+                    for (subIndex = 0; subIndex < newString.length; subIndex++) {
+                        var newValue = ' '.charCodeAt(0);
+                        if (subIndex < newString.length) {
+                            newValue = newString.charCodeAt(subIndex);
+                        }
+                        var oldValue = 0;
+                        if (subIndex < oldString.length) {
+                            oldValue = oldString.charCodeAt(subIndex);
+                        }
+
+                        if ((oldValue != newValue) || forcedWrite) {
+                            answerQueue.push({ dsuid: dsid, bank: bank, offset: (index + subIndex), value: newValue });
+                        }
+                    }
+                    answerQueue.push({ dsuid: dsid, bank: bank, offset: (index + subIndex), value: 0 });
+
+
+                }
+            }
+                break;
+            case 'writeBitmask': {
+                var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                var bitMask = parseInt('' + nextItem.getChild('bitmask').getValue(), 10);
+                var oldValue = 0;
+                if (meta !== 'nocache') {
+                    var sCachePath = nextItem.getChild('cachePath').getValue();
+                    if (Property.getNode(sCachePath) != null) { oldValue = Property.getNode(sCachePath).getValue(); }
+                }
+                var revMask = bitMask ^ 0xff;
+                var filteredOld = oldValue & revMask;
+                var maskedValue = value & bitMask;
+                var targetValue = maskedValue | filteredOld;
+
+                if (!forcedWrite) {
+                    if (meta !== 'nocache') {
+                        var sCachePath = nextItem.getChild('cachePath').getValue();
+                        if (Property.getNode(sCachePath) != null) {
+                            if (Property.getNode(sCachePath).getValue() == targetValue) {
+                                Property.setProperty(nextItem.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                                fSkip = true;
+                            }
+                        }
+                    }
+                }
+
+                if (!fSkip) {
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (simulatedTextSel[baseDSID] != null) {
+                            if (simulatedTextSel[baseDSID] == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        answerQueue.push({ dsuid: dsidFromIndex(dsid, 7), bank: 127, offset: 0xd3, value: textSel });
+                        simulatedTextSel[baseDSID] = textSel;
+                    }
+
+                    answerQueue.push({ dsuid: dsid, bank: bank, offset: index, value: targetValue });
+
+                }
+
+
+            }
+                break;
+            case 'writeNibble': {
+                var valueHigh = parseInt('' + nextItem.getChild('valueHigh').getValue(), 10);
+                var valueLow = parseInt('' + nextItem.getChild('valueLow').getValue(), 10);
+
+                if (!forcedWrite) {
+                    if (meta !== 'nocache') {
+                        var sCachePathHighNibble = nextItem.getChild('cachePath').getValue();
+                        var sCachePathLowNibble = nextItem.getChild('cachePathLow').getValue();
+                        if (Property.getNode(sCachePathHighNibble) != null) {
+                            if (Property.getNode(sCachePathHighNibble).getValue() == valueHigh) {
+                                if (Property.getNode(sCachePathLowNibble) != null) {
+                                    if (Property.getNode(sCachePathLowNibble).getValue() == valueLow) {
+                                        Property.setProperty(nextItem.getPath() + '/oldValueHigh', Property.getNode(sCachePathHighNibble).getValue());
+                                        Property.setProperty(nextItem.getPath() + '/oldValueLow', Property.getNode(sCachePathLowNibble).getValue());
+                                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                                        fSkip = true;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                if (!fSkip) {
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (simulatedTextSel[baseDSID] != null) {
+                            if (simulatedTextSel[baseDSID] == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        answerQueue.push({ dsuid: dsidFromIndex(dsid, 7), bank: 127, offset: 0xd3, value: textSel });
+                        simulatedTextSel[baseDSID] = textSel;
+                    }
+                    var value = ((valueHigh << 4) & 0xf0) | (valueLow & 0x0f);
+                    answerQueue.push({ dsuid: dsid, bank: bank, offset: index, value: value });
+                }
+            }
+                break;
+
+        }
+    }
+    lInfo.logln('check for update end skip');
+    var nothingToWrite = true;
+    for (var iIndex = 0; iIndex < data.length; iIndex++) {
+        var nextItem = data[iIndex];
+        var type = nextItem.getChild('type').getValue();
+        switch (type) {
+            case 'write':
+            case 'writeWord':
+            case 'writeTextBlock':
+            case 'writeBitmask':
+            case 'writeNibble': {
+                var fSkip = false;
+                if (type === 'write') {
+                    var bank = nextItem.getChild('bank').getValue();
+                    var index = nextItem.getChild('index').getValue();
+                    var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                    if (bank == 127) {
+                        if (index == 0xd1) {
+                            if (value == 0x80) {
+                                lInfo.logln('found a update end on index ' + iIndex + ' from ' + data.length + ' skip and nothingToWrite = ' + nothingToWrite);
+                                fSkip = true;
+                                if (nothingToWrite) {
+                                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                                }
+                            }
+                        }
+                    }
+                }
+                if (!fSkip) {
+                    if (nextItem.getChild('state').getValue() !== 'finish') { nothingToWrite = false; }
+                }
+            }
+                break;
+        }
+    }
+    if (useBULK) {
+        if (fShouldCheckTimeout == true) {
+            if (answerQueue[answerQueue.length - 1].offset == 0xd1) {
+                if (answerQueue[answerQueue.length - 1].value == 0x80) {
+                    answerQueue.splice(-1, 1);
+                    lInfo.logln('on bulkwrite and with timeout check the update flag should be set not by bulkwrite, it will be set after timeout check');
+                    Property.setProperty(activeItem.getPath() + '/updateModeSet', true);
+
+                    var lastNode = data[data.length - 1];
+                    var bank = lastNode.getChild('bank').getValue();
+                    var index = lastNode.getChild('index').getValue();
+                    var value = parseInt('' + lastNode.getChild('value').getValue(), 10);
+                    if (bank == 127) {
+                        if (index == 0xd1) {
+                            if (value == 0x80) {
+                                Property.setProperty(lastNode.getChild('state').getPath(), 'finish');
+                            }
+                        }
+                    }
+
+                }
+            }
+
+
+        }
+    }
+
+    // check for empty queue
+    var fOnlyConfigChanged = true;
+    for (var iIndex = 0; iIndex < answerQueue.length; iIndex++) {
+        if (answerQueue[iIndex].dsuid != dsidFromIndex(answerQueue[iIndex].dsuid, 7)) { fOnlyConfigChanged = false; }
+        if (answerQueue[iIndex].bank != 127) {
+            fOnlyConfigChanged = false;
+        }
+        if (answerQueue[iIndex].offset != 209) {
+            fOnlyConfigChanged = false;
+        }
+        if (answerQueue[iIndex].value != 128) {
+            fOnlyConfigChanged = false;
+        }
+    }
+
+    lInfo.logln('queue might be: ' + JSON.stringify(answerQueue));
+
+    if (fOnlyConfigChanged) {
+        lInfo.logln('queue is empty beside ConfigChange, queue is set to empty !');
+        answerQueue = [];
+    }
+    return answerQueue;
 }
 
-function exec() {
-	maxSkips--;
-	var activeItem=getActiveQueueItem();
-	var data=null;
-	var nextItem=null;
-	var fShouldFinish=false;
-	var fDidSomething=false;
-	
-	if (activeItem != null) {
-		data = activeItem.getChild('data').getChildren();
-	}
-
-	for (var iIndex=0;(iIndex<data.length)&&(nextItem==null) ;iIndex++) {
-		if (data[iIndex].getChild('state').getValue()=='pending') {
-			nextItem=data[iIndex];
-		}		
-	}
-	try {
-		if (nextItem==null) {
-			Property.setProperty(activeItem.getChild('state').getPath(),'end');
-			startQueue();
-		} else {
-			var dsid=nextItem.getChild('dsid').getValue();
-			var baseDSID=dsidFromIndex(dsid,0);
-			var type=nextItem.getChild('type').getValue();
-			var bank=nextItem.getChild('bank').getValue();
-			var index=nextItem.getChild('index').getValue();
-			var forcedWrite=false;
-			if (nextItem.getChild('forced')!=null)
-				forcedWrite=nextItem.getChild('forced');
-			
-			var nowTime=new Date().getTime()%10000000;
-			if (type.substr(0,5)=='write')
-				if (Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/lastWrite")!=null) {
-					var lastTime=Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/lastWrite").getValue();
-					var firmwareVersion=-1;
-					if (Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/FirmwareVersion")!=null)
-						firmwareVersion=Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/FirmwareVersion").getValue();
-					var longWriteTime=5;
-					if (firmwareVersion>=0x1d5)
-						longWriteTime=15;
-					var deltaTime=nowTime-lastTime;
-					if (deltaTime<0)
-						deltaTime+=10000000;
-					if (deltaTime>longWriteTime*1000){
-						lNerv.logln("last write to long ago ("+longWriteTime+" sek), make a update write");
-						forcedWrite=true;
-						//setDeviceConfig(dsidFromIndex(dsid,7),127,0x10,Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/generalSettings/DayDesign/value").getValue());
-					}
-					if (deltaTime>90*1000){
-						if (activeItem.getChild('timeoutDetection')!=null) {
-							lNerv.logln("very long ago since last write, timeout detection has to be checked!");
-							var checkerDSID=activeItem.getChild('timeoutDetection').getValue();
-							var value=getDeviceConfig(dsidFromIndex(checkerDSID,7),127,0xd1);
-							if ((value&0x10) != 0x10) {
-								lNerv.logln("TIMEOUT DETECTION! PANIC ON!");
-								revertQueue(activeItem);						
-								Property.store();
-								new Event ('ulux.queue',{actions:'startQueue',useBULK:useBULK}).raise();
-								return;
-							}
-						}
-					}
-				}
-			
-			var sCachePath=nextItem.getChild('cachePath').getValue();
-			var meta="";
-			if (nextItem.getChild('meta')!=null)
-				meta=nextItem.getChild('meta').getValue();
-			if (nextItem.getChild('finishEvent')!=null) {
-				fShouldFinish=true;
-			}
-			
-			if (type=='readSigned') {	        		        	
-		        var value=getDeviceConfig(dsid,bank,index);
-		        if (value>127)
-		        	value=value-256;
-		        fDidSomething=true;
-		        
-		        lNerv.logln('READSIBY ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + " on " + sCachePath);
-				Property.setSavedProperty(sCachePath,value);
-				Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-			} else if (type=='read') {	        		        	
-		        var value=getDeviceConfig(dsid,bank,index);
-		        fDidSomething=true;
-		        
-		        lNerv.logln('READBYTE ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + " on " + sCachePath);
-				Property.setSavedProperty(sCachePath,value);
-				Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-			} else if (type=='readWord') {	        	
-		        var value=getDeviceConfigWord(dsid,bank,index);
-		        fDidSomething=true;
-		        lNerv.logln('READWORD ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + " on " + sCachePath);
-				Property.setSavedProperty(sCachePath,value);
-				Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-			} else if (type=='readNibble') {
-		        var value=getDeviceConfig(dsid,bank,index);
-		        fDidSomething=true;
-		        var sCachePathHighNibble=sCachePath;
-		        var sCachePathLowNibble=nextItem.getChild('cachePathLow').getValue();
-
-		        lNerv.logln('RDNBHigh ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(value&0x0f) + " on " + sCachePathHighNibble);
-		        lNerv.logln('RDNBLow  ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(((value&0xf0)>>4)) + " on " + sCachePathLowNibble);
-		        
-		    	Property.setSavedProperty(sCachePathLowNibble,value&0x0f);
-		    	Property.setSavedProperty(sCachePathHighNibble,((value&0xf0)>>4));
-				Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-			} else if (type=='readDataBlock') {
-				var length=nextItem.getChild('length').getValue();
-				var subIndex=0;
-				if (nextItem.getChild('subIndex')!=null) {
-					subIndex=nextItem.getChild('subIndex').getValue();
-				} else {
-					Property.setSavedProperty(sCachePath,'');
-				}
-
-				if (((index+subIndex)%2)==1) {
-					
-					var value=getDeviceConfig(dsid,bank,index+subIndex);
-					var sValue=decode_utf8(Property.getProperty(sCachePath));
-
-			        if (value!=0) {
-				        sValue+=String.fromCharCode(value);		        	
-			        } else 
-			        	subIndex=length;
-			        
-			        lNerv.logln('READSBlk ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' = ' + hex(value) + " on " + sCachePath + " -> '" + (sValue) + "'");
-
-			        Property.setSavedProperty(sCachePath,encode_utf8(sValue));
-			        subIndex+=1;
-				
-				} else {
-					var value=getDeviceConfigWord(dsid,bank,index+subIndex);
-			        var sValue=decode_utf8(Property.getProperty(sCachePath));
-
-			        if ((value&0xff)!=0) {
-				        sValue+=String.fromCharCode(value&0xff);		        	
-			        } else 
-			        	subIndex=length;
-			        
-			        if (((value>>8)&0xff)!=0) {
-				        sValue+=String.fromCharCode((value>>8)&0xff);	        		        	
-			        } else 
-			        	subIndex=length;
-
-			        lNerv.logln('READDBlk ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + " on " + sCachePath + " -> '" + (sValue) + "'");
-
-			        Property.setSavedProperty(sCachePath,encode_utf8(sValue));
-			        subIndex+=2;
-				}				
-		        fDidSomething=true;		        
-		        if (subIndex<length) {
-		        	//lNerv.logln("not finished yet ");
-		        	Property.setProperty(nextItem.getPath() + '/subIndex',subIndex);
-		        	fShouldFinish=false;
-		        } else {
-		        	//lNerv.logln("finished now");
-		        	Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-		        }
-			} else if (type=='writeBitmask') {
-				var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-				var bitMask=parseInt("" + nextItem.getChild('bitmask').getValue(),10);
-				
-				var oldValue=0;
-				if (meta!='nocache')
-					if (Property.getNode(sCachePath)!=null) {
-						oldValue=Property.getNode(sCachePath).getValue();
-						Property.setProperty(nextItem.getPath()+'/oldValue',oldValue);
-					}
-				var revMask=bitMask ^ 0xff;
-				var filteredOld=oldValue & revMask;				
-				var maskedValue=value & bitMask;
-				var targetValue=maskedValue | filteredOld;				
-
-				var fShouldWrite=true;
-				if (meta!='nocache')
-					if (Property.getNode(sCachePath)!=null)
-						if (Property.getNode(sCachePath).getValue()==targetValue)
-							fShouldWrite=false;
-				if (fShouldWrite || forcedWrite) {	
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-							if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue()==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						lNerv.logln('WRITBITM ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + " = textsel " + textSel + " on " + sCachePath);
-						setDeviceConfig(dsidFromIndex(dsid,7),127,0xd3,textSel);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						Property.setProperty('devices/' + baseDSID + '/lastTextsel',textSel);
-					} else {					
-
-						setDeviceConfig(dsid,bank,index,targetValue);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						lNerv.logln('WRITBITM ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(targetValue) + " on " + sCachePath + " BM: " + targetValue.toString(2));
-						fDidSomething=true;
-						if (meta!='nocache')
-							Property.setSavedProperty(sCachePath,targetValue);
-						Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-					}
-				} else {
-					lNerv.logln('noWRBITM ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(targetValue) + " on " + sCachePath + " BM: " + targetValue.toString(2));
-					if (meta!='nocache')
-						Property.setSavedProperty(sCachePath,targetValue);
-					Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-				}
-			} else if (type=='write') {
-				var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-				var fShouldWrite=true;
-				if (meta!='nocache')
-					if (Property.getNode(sCachePath)!=null) {
-						Property.setProperty(nextItem.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-						if (Property.getNode(sCachePath).getValue()==value)
-							fShouldWrite=false;
-					}
-				if (fShouldWrite || forcedWrite) {
-					
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-							if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue()==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						lNerv.logln('WRITBYTE ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + " = textsel " + textSel + " on " + sCachePath);
-						setDeviceConfig(dsidFromIndex(dsid,7),127,0xd3,textSel);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						Property.setProperty('devices/' + dsidFromIndex(dsid,0) + '/lastTextsel',textSel);
-					} else {
-						setDeviceConfig(dsid,bank,index,value);
-						if (sCachePath!='textSel')
-							Property.setProperty("devices/" + dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						if (sCachePath=='textSel')
-							Property.setProperty('devices/' + dsidFromIndex(dsid,0) + '/lastTextsel',value);
-						lNerv.logln('WRITBYTE ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + " on " + sCachePath);
-						fDidSomething=true;
-						if (meta!='nocache')
-							Property.setSavedProperty(sCachePath,value);
-						Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-					}
-				} else {
-			        lNerv.logln('noWRITEB ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + " on " + sCachePath);
-					if (meta!='nocache')
-						Property.setSavedProperty(sCachePath,value);
-					Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-				}
-			} else if (type=='writeWord') {
-				var value=parseInt("" + nextItem.getChild('value').getValue(),10);
-				var fShouldWrite=true;
-				if (meta!='nocache')
-					if (Property.getNode(sCachePath)!=null) {
-						Property.setProperty(nextItem.getPath()+'/oldValue',Property.getNode(sCachePath).getValue());
-						if (Property.getNode(sCachePath).getValue()==value)
-							fShouldWrite=false;
-					}
-				if (fShouldWrite || forcedWrite) {	
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-							if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue()==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						lNerv.logln('WRITWORD ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + " = textsel " + textSel + " on " + sCachePath);
-						setDeviceConfig(dsidFromIndex(dsid,7),127,0xd3,textSel);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						Property.setProperty('devices/' + baseDSID + '/lastTextsel',textSel);
-					} else {
-						setDeviceConfig(dsid,bank,index,(value&0xff));
-						setDeviceConfig(dsid,bank,index+1,((value>>8)&0xff));
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						lNerv.logln('WRITWORD ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + " on " + sCachePath);
-						fDidSomething=true;
-						if (meta!='nocache')
-							Property.setSavedProperty(sCachePath,value);
-						Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-					}
-				} else {
-			        lNerv.logln('noWRITEW ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + " on " + sCachePath);
-					if (meta!='nocache')
-						Property.setSavedProperty(sCachePath,value);
-					Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-				}
-			} else if (type=='writeNibble') {
-								
-				var valueHigh=parseInt("" + nextItem.getChild('valueHigh').getValue(),10);
-				var valueLow=parseInt("" + nextItem.getChild('valueLow').getValue(),10);
-
-		        var sCachePathHighNibble=sCachePath;
-		        var sCachePathLowNibble=nextItem.getChild('cachePathLow').getValue();
-
-				var value=((valueHigh<<4)&0xf0)|(valueLow&0x0f);
-
-				var fShouldWrite=true;
-				if (Property.getNode(sCachePathHighNibble)!=null)
-					if (Property.getNode(sCachePathHighNibble).getValue()==valueHigh)
-						if (Property.getNode(sCachePathLowNibble)!=null)
-							if (Property.getNode(sCachePathLowNibble).getValue()==valueLow)
-								fShouldWrite=false;
-
-				if (Property.getNode(sCachePathHighNibble)!=null) {
-					Property.setProperty(nextItem.getPath()+'/oldValueHigh',Property.getNode(sCachePathHighNibble).getValue());
-				}
-				if (Property.getNode(sCachePathLowNibble)!=null) {
-					Property.setProperty(nextItem.getPath()+'/oldValueLow',Property.getNode(sCachePathLowNibble).getValue());
-				}
-
-				
-				
-				if (fShouldWrite || forcedWrite) {
-					
-					var textSelEnsured=false;
-					if (nextItem.getChild('textSel')==null)
-						textSelEnsured=true;
-					else {
-						var neededTextSel=nextItem.getChild('textSel').getValue();
-						if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-							if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue()==neededTextSel) {
-								textSelEnsured=true;
-							}							
-					}
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						lNerv.logln('WRITNIBL ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + " = textsel " + textSel + " on " + sCachePath);
-						setDeviceConfig(dsidFromIndex(dsid,7),127,0xd3,textSel);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						Property.setProperty('devices/' + baseDSID + '/lastTextsel',textSel);
-					} else {
-
-						setDeviceConfig(dsid,bank,index,value);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-				        lNerv.logln('WRNBHigh ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + (valueHigh) + " on " + sCachePathHighNibble);
-				        lNerv.logln('WRNBLow  ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + (valueLow) + " on " + sCachePathLowNibble);
-						fDidSomething=true;
-						Property.setSavedProperty(sCachePathLowNibble,valueLow);
-				    	Property.setSavedProperty(sCachePathHighNibble,valueHigh);
-						Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-					}
-				} else {
-			        lNerv.logln('noWRNBh  ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + (valueHigh) + " on " + sCachePathHighNibble);
-			        lNerv.logln('noWRNBl  ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index) + ' =   ' + (valueLow) + " on " + sCachePathLowNibble);
-					Property.setSavedProperty(sCachePathLowNibble,valueLow);
-			    	Property.setSavedProperty(sCachePathHighNibble,valueHigh);
-					Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-				}
-			} else if (type=='writeTextBlock') {
-				var length=nextItem.getChild('length').getValue();
-				
-				var subIndex=0;
-				if (nextItem.getChild('subIndex')!=null) {
-					subIndex=nextItem.getChild('subIndex').getValue();
-				} 
-				
-				var newString=Utf8.decode(nextItem.getChild('value').getValue());
-				var oldString=Utf8.decode(Property.getNode(sCachePath).getValue());
-				
-				var bBlockSkip=false;
-				if (subIndex==0) {
-					Property.setProperty(nextItem.getPath()+'/oldValue',Utf8.encode(oldString));
-					if (newString==oldString) {
-						bBlockSkip=true;
-					}
-					Property.setProperty(nextItem.getPath() + '/oldLength',oldString.length);
-				}
-				if ((!bBlockSkip)|| forcedWrite) {
-					var textSelEnsured=false;
-					if (subIndex==0) {
-						if (nextItem.getChild('textSel')==null)
-							textSelEnsured=true;
-						else {
-							var neededTextSel=nextItem.getChild('textSel').getValue();
-							if (Property.getNode('devices/' + baseDSID + '/lastTextsel')!=null)
-								if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue()==neededTextSel) {
-									textSelEnsured=true;
-								}							
-						}
-					} else textSelEnsured=true;
-									
-					if (!textSelEnsured) {
-						var textSel=nextItem.getChild('textSel').getValue();
-						
-						lNerv.logln('WRITBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + " = textsel " + textSel + " on " + sCachePath + " -> '" + (oldString));
-						setDeviceConfig(dsidFromIndex(dsid,7),127,0xd3,textSel);
-						Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-						Property.setProperty('devices/' + baseDSID + '/lastTextsel',textSel);
-					} else {
-						var newValue=' '.charCodeAt(0);
-						if (subIndex<newString.length) {
-							newValue=newString.charCodeAt(subIndex);
-						} 
-											
-						var oldValue=0;
-						if (subIndex<oldString.length)
-							oldValue=oldString.charCodeAt(subIndex);
-						
-						if ((oldValue!=newValue)||forcedWrite) {		
-							setDeviceConfig(dsid,bank,index+subIndex,newValue);
-							Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-							fDidSomething=true;
-						} 
-				        while (oldString.length<subIndex)
-				        	oldString +=' ';
-						oldString=oldString.substr(0,subIndex) + newString.charAt(subIndex) + oldString.substr(subIndex+1);
-	
-						if ((oldValue!=newValue)||forcedWrite) {		
-							
-							lNerv.logln('WRITBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + ' = ' + hex2(newValue) + " on " + sCachePath + " -> '" + (oldString) + "'");
-						} else
-							lNerv.logln('noWRBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + ' = ' + hex2(newValue) + " on " + sCachePath + " -> '" + (oldString) + "'");
-	
-						Property.setSavedProperty(sCachePath,Utf8.encode(oldString));
-						subIndex+=1;
-					}
-					
-					if (subIndex<length) {
-			        	Property.setProperty(nextItem.getPath() + '/subIndex',subIndex);
-			        	fShouldFinish=false;
-			        } else {
-						var newLength=Utf8.decode(nextItem.getChild('value').getValue()).length;
-						var oldLength=-1;
-						if (nextItem.getChild('oldLength')==null)
-							oldLength=nextItem.getChild('oldLength').getValue();
-						
-						if ((oldLength!=newLength)||forcedWrite) {
-							lNerv.logln('WRITBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + ' = #0 on ' + sCachePath + " -> '" + (newString));
-							setDeviceConfig(dsid,bank,index+subIndex,0);
-							Property.setProperty("devices/"+dsidFromIndex(dsid,0) + "/lastWrite",new Date().getTime()%10000000);
-							fDidSomething=true;
-						} else {
-							lNerv.logln('noWRBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + ' = #0 on ' + sCachePath + " -> '" + (newString));
-						}
-			        	Property.setSavedProperty(sCachePath,Utf8.encode(newString));
-			        	Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-			        }
-					
-				} else {
-					lNerv.logln('noWRBLCK ' + fDSID(dsid) + ":" + hex(bank) + ':' + hex(index+subIndex) + " on " + sCachePath + " completly skipped");
-					Property.setProperty(nextItem.getPath() + '/subIndex',length);
-					Property.setSavedProperty(sCachePath,Utf8.encode(newString));
-		        	Property.setProperty(nextItem.getChild('state').getPath(),'finish');
-					subIndex=length;
-				}
-		        
-			}
-		}
-	}
-	catch (e) {
-	
-		if (nextItem!=null) {
-			lWarn.logln('ERROR on Exec '+nextItem.getPath()+':' + e);
-		} else {
-			lWarn.logln('ERROR on Exec :' + e);		
-		}
-		if (nextItem.getChild('retry')==null)
-			Property.setProperty(nextItem.getPath()+ '/retry',0);
-		var retry=nextItem.getChild('retry').getValue();
-		if (retry < globalRetryMax) {
-			lWarn.logln('Retry ' + retry + ' done, next try sheduled');
-			Property.setProperty(nextItem.getPath()+ '/retry',retry+1);
-		} else {
-			lWarn.logln('finally failed :-(');
-			Property.setProperty(nextItem.getChild('state').getPath(),'error');
-		}
-			
-	}
-	
-	if (fShouldFinish) {
-		if (nextItem!=null)
-			if (nextItem.getChild('finishEvent')!=null)
-				if (nextItem.getChild('finishEventParameter')!=null) {
-					lNerv.logln('Raise finishevent ' + nextItem.getChild('finishEvent').getValue());
-					new Event(nextItem.getChild('finishEvent').getValue(),JSON.parse(nextItem.getChild('finishEventParameter').getValue())).raise();
-				}		
-		cleanup();
-	}
-	
-	if (maxSkips==0) {
-		lInfo.logln("Exec nothing, but make a short break");
-		new Event ('ulux.queue',{actions:'exec',useBULK:useBULK}).raise();
-	} else
-	if (fDidSomething) {
-		Property.store();
-		new Event ('ulux.queue',{actions:'exec',useBULK:useBULK}).raise();
-	} else {
-		exec();
-	}
+function exec () {
+    maxSkips--;
+    var activeItem = getActiveQueueItem();
+    var data = null;
+    var nextItem = null;
+    var fShouldFinish = false;
+    var fDidSomething = false;
+
+    if (activeItem != null) {
+        data = activeItem.getChild('data').getChildren();
+    }
+
+    for (var iIndex = 0; (iIndex < data.length) && (nextItem == null); iIndex++) {
+        if (data[iIndex].getChild('state').getValue() === 'pending') {
+            nextItem = data[iIndex];
+        }
+    }
+    try {
+        if (nextItem == null) {
+            Property.setProperty(activeItem.getChild('state').getPath(), 'end');
+            startQueue();
+        } else {
+            var dsid = nextItem.getChild('dsid').getValue();
+            var baseDSID = dsidFromIndex(dsid, 0);
+            var type = nextItem.getChild('type').getValue();
+            var bank = nextItem.getChild('bank').getValue();
+            var index = nextItem.getChild('index').getValue();
+            var forcedWrite = false;
+            if (nextItem.getChild('forced') != null) { forcedWrite = nextItem.getChild('forced'); }
+
+            var nowTime = new Date().getTime() % 10000000;
+            if (type.substr(0, 5) === 'write') {
+                if (Property.getNode('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite') != null) {
+                    var lastTime = Property.getNode('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite').getValue();
+                    var firmwareVersion = -1;
+                    if (Property.getNode('devices/' + dsidFromIndex(dsid, 0) + '/FirmwareVersion') != null) {
+                        firmwareVersion = Property.getNode('devices/' + dsidFromIndex(dsid, 0) + '/FirmwareVersion').getValue();
+                    }
+                    var longWriteTime = 5;
+                    if (firmwareVersion >= 0x1d5) {
+                        longWriteTime = 15;
+                    }
+                    var deltaTime = nowTime - lastTime;
+                    if (deltaTime < 0) {
+                        deltaTime += 10000000;
+                    }
+                    if (deltaTime > longWriteTime * 1000) {
+                        lNerv.logln('last write to long ago (' + longWriteTime + ' sek), make a update write');
+                        forcedWrite = true;
+                    // setDeviceConfig(dsidFromIndex(dsid,7),127,0x10,Property.getNode("devices/"+dsidFromIndex(dsid,0) + "/generalSettings/DayDesign/value").getValue());
+                    }
+                    if (deltaTime > 90 * 1000) {
+                        if (activeItem.getChild('timeoutDetection') != null) {
+                            lNerv.logln('very long ago since last write, timeout detection has to be checked!');
+                            var checkerDSID = activeItem.getChild('timeoutDetection').getValue();
+                            var value = getDeviceConfig(dsidFromIndex(checkerDSID, 7), 127, 0xd1);
+                            if ((value & 0x10) != 0x10) {
+                                lNerv.logln('TIMEOUT DETECTION! PANIC ON!');
+                                revertQueue(activeItem);
+                                Property.store();
+                                new Event('ulux.queue', { actions: 'startQueue', useBULK: useBULK }).raise();
+                                return;
+                            }
+                        }
+                    }
+                }
+            }
+
+            var sCachePath = nextItem.getChild('cachePath').getValue();
+            var meta = '';
+            if (nextItem.getChild('meta') != null) { meta = nextItem.getChild('meta').getValue(); }
+            if (nextItem.getChild('finishEvent') != null) {
+                fShouldFinish = true;
+            }
+
+            if (type === 'readSigned') {
+                var value = getDeviceConfig(dsid, bank, index);
+                if (value > 127) {
+                    value -= 256;
+                }
+                fDidSomething = true;
+
+                lNerv.logln('READSIBY ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + ' on ' + sCachePath);
+                Property.setSavedProperty(sCachePath, value);
+                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+            } else if (type === 'read') {
+                var value = getDeviceConfig(dsid, bank, index);
+                fDidSomething = true;
+
+                lNerv.logln('READBYTE ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + ' on ' + sCachePath);
+                Property.setSavedProperty(sCachePath, value);
+                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+            } else if (type === 'readWord') {
+                var value = getDeviceConfigWord(dsid, bank, index);
+                fDidSomething = true;
+                lNerv.logln('READWORD ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + ' on ' + sCachePath);
+                Property.setSavedProperty(sCachePath, value);
+                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+            } else if (type === 'readNibble') {
+                var value = getDeviceConfig(dsid, bank, index);
+                fDidSomething = true;
+                var sCachePathHighNibble = sCachePath;
+                var sCachePathLowNibble = nextItem.getChild('cachePathLow').getValue();
+
+                lNerv.logln('RDNBHigh ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(value & 0x0f) + ' on ' + sCachePathHighNibble);
+                lNerv.logln('RDNBLow  ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(((value & 0xf0) >> 4)) + ' on ' + sCachePathLowNibble);
+
+                Property.setSavedProperty(sCachePathLowNibble, value & 0x0f);
+                Property.setSavedProperty(sCachePathHighNibble, ((value & 0xf0) >> 4));
+                Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+            } else if (type === 'readDataBlock') {
+                var length = nextItem.getChild('length').getValue();
+                var subIndex = 0;
+                if (nextItem.getChild('subIndex') != null) {
+                    subIndex = nextItem.getChild('subIndex').getValue();
+                } else {
+                    Property.setSavedProperty(sCachePath, '');
+                }
+
+                if (((index + subIndex) % 2) == 1) {
+
+                    var value = getDeviceConfig(dsid, bank, index + subIndex);
+                    var sValue = decode_utf8(Property.getProperty(sCachePath));
+
+                    if (value != 0) {
+                        sValue += String.fromCharCode(value);
+                    } else {
+                        subIndex = length;
+                    }
+
+                    lNerv.logln('READSBlk ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = ' + hex(value) + ' on ' + sCachePath + ' -> \'' + (sValue) + '\'');
+
+                    Property.setSavedProperty(sCachePath, encode_utf8(sValue));
+                    subIndex += 1;
+
+                } else {
+                    var value = getDeviceConfigWord(dsid, bank, index + subIndex);
+                    var sValue = decode_utf8(Property.getProperty(sCachePath));
+
+                    if ((value & 0xff) != 0) {
+                        sValue += String.fromCharCode(value & 0xff);
+                    } else {
+                        subIndex = length;
+                    }
+
+                    if (((value >> 8) & 0xff) != 0) {
+                        sValue += String.fromCharCode((value >> 8) & 0xff);
+                    } else {
+                        subIndex = length;
+                    }
+
+                    lNerv.logln('READDBlk ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + ' on ' + sCachePath + ' -> \'' + (sValue) + '\'');
+
+                    Property.setSavedProperty(sCachePath, encode_utf8(sValue));
+                    subIndex += 2;
+                }
+                fDidSomething = true;
+                if (subIndex < length) {
+                    // lNerv.logln("not finished yet ");
+                    Property.setProperty(nextItem.getPath() + '/subIndex', subIndex);
+                    fShouldFinish = false;
+                } else {
+                    // lNerv.logln("finished now");
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                }
+            } else if (type === 'writeBitmask') {
+                var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                var bitMask = parseInt('' + nextItem.getChild('bitmask').getValue(), 10);
+
+                var oldValue = 0;
+                if (meta !== 'nocache') {
+                    if (Property.getNode(sCachePath) != null) {
+                        oldValue = Property.getNode(sCachePath).getValue();
+                        Property.setProperty(nextItem.getPath() + '/oldValue', oldValue);
+                    }
+                }
+                var revMask = bitMask ^ 0xff;
+                var filteredOld = oldValue & revMask;
+                var maskedValue = value & bitMask;
+                var targetValue = maskedValue | filteredOld;
+
+                var fShouldWrite = true;
+                if (meta !== 'nocache') {
+                    if (Property.getNode(sCachePath) != null) {
+                        if (Property.getNode(sCachePath).getValue() == targetValue) {
+                            fShouldWrite = false;
+                        }
+                    }
+                }
+                if (fShouldWrite || forcedWrite) {
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) {
+                        textSelEnsured = true;
+                    } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) {
+                            if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue() == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        lNerv.logln('WRITBITM ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = textsel ' + textSel + ' on ' + sCachePath);
+                        setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd3, textSel);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        Property.setProperty('devices/' + baseDSID + '/lastTextsel', textSel);
+                    } else {
+                        setDeviceConfig(dsid, bank, index, targetValue);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        lNerv.logln('WRITBITM ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(targetValue) +
+                            ' on ' + sCachePath + ' BM: ' + targetValue.toString(2));
+                        fDidSomething = true;
+                        if (meta !== 'nocache') {
+                            Property.setSavedProperty(sCachePath, targetValue);
+                        }
+                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    }
+                } else {
+                    lNerv.logln('noWRBITM ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(targetValue) +
+                        ' on ' + sCachePath + ' BM: ' + targetValue.toString(2));
+                    if (meta !== 'nocache') {
+                        Property.setSavedProperty(sCachePath, targetValue);
+                    }
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                }
+            } else if (type === 'write') {
+                var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                var fShouldWrite = true;
+                if (meta !== 'nocache') {
+                    if (Property.getNode(sCachePath) != null) {
+                        Property.setProperty(nextItem.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                        if (Property.getNode(sCachePath).getValue() == value) { fShouldWrite = false; }
+                    }
+                }
+                if (fShouldWrite || forcedWrite) {
+
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) {
+                            if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue() == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        lNerv.logln('WRITBYTE ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = textsel ' + textSel + ' on ' + sCachePath);
+                        setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd3, textSel);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastTextsel', textSel);
+                    } else {
+                        setDeviceConfig(dsid, bank, index, value);
+                        if (sCachePath !== 'textSel') {
+                            Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        }
+                        if (sCachePath === 'textSel') {
+                            Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastTextsel', value);
+                        }
+                        lNerv.logln('WRITBYTE ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + ' on ' + sCachePath);
+                        fDidSomething = true;
+                        if (meta !== 'nocache') {
+                            Property.setSavedProperty(sCachePath, value);
+                        }
+                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    }
+                } else {
+                    lNerv.logln('noWRITEB ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + hex(value) + ' on ' + sCachePath);
+                    if (meta !== 'nocache') {
+                        Property.setSavedProperty(sCachePath, value);
+                    }
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                }
+            } else if (type === 'writeWord') {
+                var value = parseInt('' + nextItem.getChild('value').getValue(), 10);
+                var fShouldWrite = true;
+                if (meta !== 'nocache') {
+                    if (Property.getNode(sCachePath) != null) {
+                        Property.setProperty(nextItem.getPath() + '/oldValue', Property.getNode(sCachePath).getValue());
+                        if (Property.getNode(sCachePath).getValue() == value) { fShouldWrite = false; }
+                    }
+                }
+                if (fShouldWrite || forcedWrite) {
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) { textSelEnsured = true; } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) {
+                            if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue() == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        lNerv.logln('WRITWORD ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = textsel ' + textSel + ' on ' + sCachePath);
+                        setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd3, textSel);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        Property.setProperty('devices/' + baseDSID + '/lastTextsel', textSel);
+                    } else {
+                        setDeviceConfig(dsid, bank, index, (value & 0xff));
+                        setDeviceConfig(dsid, bank, index + 1, ((value >> 8) & 0xff));
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        lNerv.logln('WRITWORD ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + ' on ' + sCachePath);
+                        fDidSomething = true;
+                        if (meta !== 'nocache') {
+                            Property.setSavedProperty(sCachePath, value);
+                        }
+                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    }
+                } else {
+                    lNerv.logln('noWRITEW ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = ' + hex2(value) + ' on ' + sCachePath);
+                    if (meta !== 'nocache') {
+                        Property.setSavedProperty(sCachePath, value);
+                    }
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                }
+            } else if (type === 'writeNibble') {
+
+                var valueHigh = parseInt('' + nextItem.getChild('valueHigh').getValue(), 10);
+                var valueLow = parseInt('' + nextItem.getChild('valueLow').getValue(), 10);
+
+                var sCachePathHighNibble = sCachePath;
+                var sCachePathLowNibble = nextItem.getChild('cachePathLow').getValue();
+
+                var value = ((valueHigh << 4) & 0xf0) | (valueLow & 0x0f);
+
+                var fShouldWrite = true;
+                if (Property.getNode(sCachePathHighNibble) != null) {
+                    if (Property.getNode(sCachePathHighNibble).getValue() == valueHigh) {
+                        if (Property.getNode(sCachePathLowNibble) != null) {
+                            if (Property.getNode(sCachePathLowNibble).getValue() == valueLow) {
+                                fShouldWrite = false;
+                            }
+                        }
+                    }
+                }
+
+                if (Property.getNode(sCachePathHighNibble) != null) {
+                    Property.setProperty(nextItem.getPath() + '/oldValueHigh', Property.getNode(sCachePathHighNibble).getValue());
+                }
+                if (Property.getNode(sCachePathLowNibble) != null) {
+                    Property.setProperty(nextItem.getPath() + '/oldValueLow', Property.getNode(sCachePathLowNibble).getValue());
+                }
+
+                if (fShouldWrite || forcedWrite) {
+
+                    var textSelEnsured = false;
+                    if (nextItem.getChild('textSel') == null) {
+                        textSelEnsured = true;
+                    } else {
+                        var neededTextSel = nextItem.getChild('textSel').getValue();
+                        if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) {
+                            if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue() == neededTextSel) {
+                                textSelEnsured = true;
+                            }
+                        }
+                    }
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+                        lNerv.logln('WRITNIBL ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' = textsel ' + textSel + ' on ' + sCachePath);
+                        setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd3, textSel);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        Property.setProperty('devices/' + baseDSID + '/lastTextsel', textSel);
+                    } else {
+
+                        setDeviceConfig(dsid, bank, index, value);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        lNerv.logln('WRNBHigh ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + (valueHigh) + ' on ' + sCachePathHighNibble);
+                        lNerv.logln('WRNBLow  ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + (valueLow) + ' on ' + sCachePathLowNibble);
+                        fDidSomething = true;
+                        Property.setSavedProperty(sCachePathLowNibble, valueLow);
+                        Property.setSavedProperty(sCachePathHighNibble, valueHigh);
+                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    }
+                } else {
+                    lNerv.logln('noWRNBh  ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + (valueHigh) + ' on ' + sCachePathHighNibble);
+                    lNerv.logln('noWRNBl  ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index) + ' =   ' + (valueLow) + ' on ' + sCachePathLowNibble);
+                    Property.setSavedProperty(sCachePathLowNibble, valueLow);
+                    Property.setSavedProperty(sCachePathHighNibble, valueHigh);
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                }
+            } else if (type === 'writeTextBlock') {
+                var length = nextItem.getChild('length').getValue();
+
+                var subIndex = 0;
+                if (nextItem.getChild('subIndex') != null) {
+                    subIndex = nextItem.getChild('subIndex').getValue();
+                }
+
+                var newString = Utf8.decode(nextItem.getChild('value').getValue());
+                var oldString = Utf8.decode(Property.getNode(sCachePath).getValue());
+
+                var bBlockSkip = false;
+                if (subIndex == 0) {
+                    Property.setProperty(nextItem.getPath() + '/oldValue', Utf8.encode(oldString));
+                    if (newString == oldString) {
+                        bBlockSkip = true;
+                    }
+                    Property.setProperty(nextItem.getPath() + '/oldLength', oldString.length);
+                }
+                if ((!bBlockSkip) || forcedWrite) {
+                    var textSelEnsured = false;
+                    if (subIndex == 0) {
+                        if (nextItem.getChild('textSel') == null) {
+                            textSelEnsured = true;
+                        } else {
+                            var neededTextSel = nextItem.getChild('textSel').getValue();
+                            if (Property.getNode('devices/' + baseDSID + '/lastTextsel') != null) {
+                                if (Property.getNode('devices/' + baseDSID + '/lastTextsel').getValue() == neededTextSel) {
+                                    textSelEnsured = true;
+                                }
+                            }
+                        }
+                    } else {
+                        textSelEnsured = true;
+                    }
+
+                    if (!textSelEnsured) {
+                        var textSel = nextItem.getChild('textSel').getValue();
+
+                        lNerv.logln('WRITBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) +
+                            ' = textsel ' + textSel + ' on ' + sCachePath + ' -> \'' + (oldString));
+                        setDeviceConfig(dsidFromIndex(dsid, 7), 127, 0xd3, textSel);
+                        Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                        Property.setProperty('devices/' + baseDSID + '/lastTextsel', textSel);
+                    } else {
+                        var newValue = ' '.charCodeAt(0);
+                        if (subIndex < newString.length) {
+                            newValue = newString.charCodeAt(subIndex);
+                        }
+
+                        var oldValue = 0;
+                        if (subIndex < oldString.length) {
+                            oldValue = oldString.charCodeAt(subIndex);
+                        }
+
+                        if ((oldValue != newValue) || forcedWrite) {
+                            setDeviceConfig(dsid, bank, index + subIndex, newValue);
+                            Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                            fDidSomething = true;
+                        }
+                        while (oldString.length < subIndex) {
+                            oldString += ' ';
+                        }
+                        oldString = oldString.substr(0, subIndex) + newString.charAt(subIndex) + oldString.substr(subIndex + 1);
+
+                        if ((oldValue != newValue) || forcedWrite) {
+                            lNerv.logln('WRITBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) + ' = ' +
+                                hex2(newValue) + ' on ' + sCachePath + ' -> \'' + (oldString) + '\'');
+                        } else {
+                            lNerv.logln('noWRBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) + ' = ' +
+                                hex2(newValue) + ' on ' + sCachePath + ' -> \'' + (oldString) + '\'');
+                        }
+
+                        Property.setSavedProperty(sCachePath, Utf8.encode(oldString));
+                        subIndex += 1;
+                    }
+
+                    if (subIndex < length) {
+                        Property.setProperty(nextItem.getPath() + '/subIndex', subIndex);
+                        fShouldFinish = false;
+                    } else {
+                        var newLength = Utf8.decode(nextItem.getChild('value').getValue()).length;
+                        var oldLength = -1;
+                        if (nextItem.getChild('oldLength') == null) { oldLength = nextItem.getChild('oldLength').getValue(); }
+
+                        if ((oldLength != newLength) || forcedWrite) {
+                            lNerv.logln('WRITBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) + ' = #0 on ' + sCachePath + ' -> \'' + (newString));
+                            setDeviceConfig(dsid, bank, index + subIndex, 0);
+                            Property.setProperty('devices/' + dsidFromIndex(dsid, 0) + '/lastWrite', new Date().getTime() % 10000000);
+                            fDidSomething = true;
+                        } else {
+                            lNerv.logln('noWRBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) + ' = #0 on ' + sCachePath + ' -> \'' + (newString));
+                        }
+                        Property.setSavedProperty(sCachePath, Utf8.encode(newString));
+                        Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    }
+
+                } else {
+                    lNerv.logln('noWRBLCK ' + fDSID(dsid) + ':' + hex(bank) + ':' + hex(index + subIndex) + ' on ' + sCachePath + ' completly skipped');
+                    Property.setProperty(nextItem.getPath() + '/subIndex', length);
+                    Property.setSavedProperty(sCachePath, Utf8.encode(newString));
+                    Property.setProperty(nextItem.getChild('state').getPath(), 'finish');
+                    subIndex = length;
+                }
+
+            }
+        }
+    } catch (e) {
+
+        if (nextItem != null) {
+            lWarn.logln('ERROR on Exec ' + nextItem.getPath() + ':' + e);
+        } else {
+            lWarn.logln('ERROR on Exec :' + e);
+        }
+        if (nextItem.getChild('retry') == null) {
+            Property.setProperty(nextItem.getPath() + '/retry', 0);
+        }
+        var retry = nextItem.getChild('retry').getValue();
+        if (retry < globalRetryMax) {
+            lWarn.logln('Retry ' + retry + ' done, next try sheduled');
+            Property.setProperty(nextItem.getPath() + '/retry', retry + 1);
+        } else {
+            lWarn.logln('finally failed :-(');
+            Property.setProperty(nextItem.getChild('state').getPath(), 'error');
+        }
+
+    }
+
+    if (fShouldFinish) {
+        if (nextItem != null) {
+            if (nextItem.getChild('finishEvent') != null) {
+                if (nextItem.getChild('finishEventParameter') != null) {
+                    lNerv.logln('Raise finishevent ' + nextItem.getChild('finishEvent').getValue());
+                    new Event(nextItem.getChild('finishEvent').getValue(), JSON.parse(nextItem.getChild('finishEventParameter').getValue())).raise();
+                }
+            }
+        }
+        cleanup();
+    }
+
+    if (maxSkips == 0) {
+        lInfo.logln('Exec nothing, but make a short break');
+        new Event('ulux.queue', { actions: 'exec', useBULK: useBULK }).raise();
+    } else
+    if (fDidSomething) {
+        Property.store();
+        new Event('ulux.queue', { actions: 'exec', useBULK: useBULK }).raise();
+    } else {
+        exec();
+    }
 }
 
-function enqueueItem() {
-	
-	var	fEnqueueOnly=false;
-	if (raisedEvent.parameter.EnqueueOnly!=null)
-		fEnqueueOnly=raisedEvent.parameter.EnqueueOnly;
-	var sID="" + (new Date()).getTime();
+function enqueueItem () {
+
+    var fEnqueueOnly = false;
+    if (raisedEvent.parameter.EnqueueOnly != null) {
+        fEnqueueOnly = raisedEvent.parameter.EnqueueOnly;
+    }
+    var sID = '' + (new Date()).getTime();
     var oParameterObject = JSON.parse(raisedEvent.parameter.values);
-    if (oParameterObject.length==0)
-		return;
-    if (raisedEvent.parameter.timeoutDetection!=null)
-		Property.setProperty('queue/' + sID + '/timeoutDetection',raisedEvent.parameter.timeoutDetection);
-	Property.setProperty('queue/' + sID + '/state','queued');
-    for (var iIndex=0;iIndex<oParameterObject.length;iIndex++) {
-    	for (var sKey in oParameterObject[iIndex]) {
-    		try {
-    			if ((sKey=='value') && (oParameterObject[iIndex]['type']=='writeTextBlock')) {
-	    			Property.setProperty('queue/' + sID + '/data/' + iIndex + '/' + sKey,Utf8.encode(oParameterObject[iIndex][sKey]));
-	    		}
-	    		else		
-	    			Property.setProperty('queue/' + sID + '/data/' + iIndex + '/' + sKey,oParameterObject[iIndex][sKey]);
-    		} catch (e) {
-    			lWarn.logln('could not write ' + sKey + ' ' + oParameterObject[iIndex][sKey]);
-    		}
-    	}
-    	Property.setProperty('queue/' + sID + '/data/' + iIndex + '/state', 'pending');
+    if (oParameterObject.length === 0) {
+        return;
+    }
+    if (raisedEvent.parameter.timeoutDetection != null) {
+        Property.setProperty('queue/' + sID + '/timeoutDetection', raisedEvent.parameter.timeoutDetection);
+    }
+    Property.setProperty('queue/' + sID + '/state', 'queued');
+    for (var iIndex = 0; iIndex < oParameterObject.length; iIndex++) {
+        for (var sKey in oParameterObject[iIndex]) {
+            try {
+                if (sKey === 'value' && oParameterObject[iIndex].type === 'writeTextBlock') {
+                    Property.setProperty('queue/' + sID + '/data/' + iIndex + '/' + sKey, Utf8.encode(oParameterObject[iIndex][sKey]));
+                } else {
+                    Property.setProperty('queue/' + sID + '/data/' + iIndex + '/' + sKey, oParameterObject[iIndex][sKey]);
+                }
+            } catch (e) {
+                lWarn.logln('could not write ' + sKey + ' ' + oParameterObject[iIndex][sKey]);
+            }
+        }
+        Property.setProperty('queue/' + sID + '/data/' + iIndex + '/state', 'pending');
+    }
+    if (!fEnqueueOnly) {
+        if (useBULK) {
+            startBulkQueue();
+        } else {
+            startQueue();
+        }
     }
-    if (!fEnqueueOnly)
-	    if (useBULK) {
-	    	startBulkQueue();
-	    } else {
-	    	startQueue();
-	    }
 }
 
-function deepCopy(original,target) {
-	if (Property.getNode(original)!=null) {
-		var oChildArray=Property.getNode(original).getChildren();
-		if (oChildArray.length>0) {
-			for (var iIndex=0;iIndex<oChildArray.length;iIndex++)
-				deepCopy(oChildArray[iIndex].getPath(),target + '/' + oChildArray[iIndex].getName())
-		} else {
-			lInfo.logln('set Property ' + original + ' on ' + Property.getNode(original).getValue() + ' in ' + target);
-			Property.setProperty(target,Property.getNode(original).getValue());
-			
-		}
-		
-	}
+function deepCopy (original, target) {
+    if (Property.getNode(original) != null) {
+        var oChildArray = Property.getNode(original).getChildren();
+        if (oChildArray.length > 0) {
+            for (var iIndex = 0; iIndex < oChildArray.length; iIndex++) {
+                deepCopy(oChildArray[iIndex].getPath(), target + '/' + oChildArray[iIndex].getName());
+            }
+        } else {
+            lInfo.logln('set Property ' + original + ' on ' + Property.getNode(original).getValue() + ' in ' + target);
+            Property.setProperty(target, Property.getNode(original).getValue());
+
+        }
+
+    }
 }
 
-if (raisedEvent.name=='ulux.queue') {
-	if (raisedEvent.parameter.useBULK!=null)
-		useBULK=("" + raisedEvent.parameter.useBULK) == "true";
-	
-	if (raisedEvent.parameter.actions=='startQueue') {
-		startQueue();
-		new Event('ulux.saved',{}).raise();
-	}
-	
-	if (raisedEvent.parameter.actions=='exec') {
-		exec();
-	}
-	
-	
-	if (raisedEvent.parameter.actions=='revert') {
-		if (raisedEvent.parameter.queueID!=null)
-			if (Property.getNode('queue/'+raisedEvent.parameter.queueID)!=null)
-				revertQueue(Property.getNode('queue/'+raisedEvent.parameter.queueID));
-	}
-	
-	if (raisedEvent.parameter.actions=='enqueue') {
-		enqueueItem();
-		new Event('ulux.saved',{}).raise();	
-	}
-	
-	if (raisedEvent.parameter.actions=='cleanup') {
-		cleanup();
-		new Event('ulux.saved',{}).raise();
-	}
-	
-	if (raisedEvent.parameter.actions=='precogQueue') {
-		precogQueue();
-	}
-	if (raisedEvent.parameter.actions=='startBulkQueue') {
-		startBulkQueue();
-		new Event('ulux.saved',{}).raise();
-	}
-	if (raisedEvent.parameter.actions=='checkStalledQueue') {
-		if (Property.getNode('queue')!=null) {
-			var oArray=Property.getNode('queue').getChildren();
-			for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-				if (oArray[iIndex].getChild('data')!=null)
-					if (oArray[iIndex].getChild('data').getChildren().length>0){
-						var dsid=oArray[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
-						lInfo.logln('check for ' + dsid);
-						var baseDSID=dsidFromIndex(dsid,0);
-						if (Property.getNode('/apartment/zones/zone0/devices/'+baseDSID)==null) {
-							lInfo.logln('found a queue with a deleted device, removing entry');
-							Property.getNode('queue').removeChild(oArray[iIndex].getName());
-						}
-					}
-				
-			}
-		}
-		if (useBULK)
-			startBulkQueue();
-		else
-			startQueue();
-		new Event('ulux.queue',{actions:'moveErrorQueue'}).raise();
-	}
-	
-	if (raisedEvent.parameter.actions=='moveErrorQueue') {
-		if (Property.getNode('queue')!=null) {
-			var oArray=Property.getNode('queue').getChildren();
-			for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-				if (oArray[iIndex].getChild('state')!=null)
-					if (oArray[iIndex].getChild('state').getValue()=='error') {
-						lInfo.logln('moving queue ' + oArray[iIndex].getName() + ' to quarantine');
-						deepCopy(oArray[iIndex].getPath(),'quarantine/'+oArray[iIndex].getName());
-						Property.getNode('queue').removeChild(oArray[iIndex].getName());
-					}
-
-			}
-		}
-	}
+if (raisedEvent.name === 'ulux.queue') {
+    if (raisedEvent.parameter.useBULK != null) {
+        useBULK = ('' + raisedEvent.parameter.useBULK) === 'true';
+    }
+
+    if (raisedEvent.parameter.actions === 'startQueue') {
+        startQueue();
+        new Event('ulux.saved', {}).raise();
+    }
+
+    if (raisedEvent.parameter.actions === 'exec') {
+        exec();
+    }
+
+
+    if (raisedEvent.parameter.actions === 'revert') {
+        if (raisedEvent.parameter.queueID != null) {
+            if (Property.getNode('queue/' + raisedEvent.parameter.queueID) != null) {
+                revertQueue(Property.getNode('queue/' + raisedEvent.parameter.queueID));
+            }
+        }
+    }
+
+    if (raisedEvent.parameter.actions === 'enqueue') {
+        enqueueItem();
+        new Event('ulux.saved', {}).raise();
+    }
+
+    if (raisedEvent.parameter.actions === 'cleanup') {
+        cleanup();
+        new Event('ulux.saved', {}).raise();
+    }
+
+    if (raisedEvent.parameter.actions === 'precogQueue') {
+        precogQueue();
+    }
+    if (raisedEvent.parameter.actions === 'startBulkQueue') {
+        startBulkQueue();
+        new Event('ulux.saved', {}).raise();
+    }
+    if (raisedEvent.parameter.actions === 'checkStalledQueue') {
+        if (Property.getNode('queue') != null) {
+            var oArray = Property.getNode('queue').getChildren();
+            for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+                if (oArray[iIndex].getChild('data') != null) {
+                    if (oArray[iIndex].getChild('data').getChildren().length > 0) {
+                        var dsid = oArray[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
+                        lInfo.logln('check for ' + dsid);
+                        var baseDSID = dsidFromIndex(dsid, 0);
+                        if (Property.getNode('/apartment/zones/zone0/devices/' + baseDSID) == null) {
+                            lInfo.logln('found a queue with a deleted device, removing entry');
+                            Property.getNode('queue').removeChild(oArray[iIndex].getName());
+                        }
+                    }
+                }
+
+            }
+        }
+        if (useBULK) {
+            startBulkQueue();
+        } else {
+            startQueue();
+        }
+        new Event('ulux.queue', { actions: 'moveErrorQueue' }).raise();
+    }
+
+    if (raisedEvent.parameter.actions === 'moveErrorQueue') {
+        if (Property.getNode('queue') != null) {
+            var oArray = Property.getNode('queue').getChildren();
+            for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+                if (oArray[iIndex].getChild('state') != null) {
+                    if (oArray[iIndex].getChild('state').getValue() === 'error') {
+                        lInfo.logln('moving queue ' + oArray[iIndex].getName() + ' to quarantine');
+                        deepCopy(oArray[iIndex].getPath(), 'quarantine/' + oArray[iIndex].getName());
+                        Property.getNode('queue').removeChild(oArray[iIndex].getName());
+                    }
+                }
+
+            }
+        }
+    }
 }
 
-if (raisedEvent.name=='deviceBulkSetConfig') {
-	updateCache();
-} else if (raisedEvent.name == 'deviceBulkSetConfigFailed') {
-	handleFailedBulkWrite();
+if (raisedEvent.name === 'deviceBulkSetConfig') {
+    updateCache();
+} else if (raisedEvent.name === 'deviceBulkSetConfigFailed') {
+    handleFailedBulkWrite();
 }
diff --git a/scripts/ulux-reset.js b/scripts/ulux-reset.js
index 0ca8068978d7ed07c99ba469bc21f5641c7c76a4..6fcbe5f24aa5dd33204024beabfdc908ebf039e1 100644
--- a/scripts/ulux-reset.js
+++ b/scripts/ulux-reset.js
@@ -1,157 +1,156 @@
-var LOGFILE_NAME = "ulux.log";
+/* globals Logger, Property, raisedEvent, getDevices, getDeviceConfig, setDeviceConfig */
+
+var LOGFILE_NAME = 'ulux.log';
 var lWarn = {
-		logln : function(o) {
-		}
-	};
-	var lInfo = {
-		logln : function(o) {
-		}
-	};
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+var lInfo = {
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
 
 lInfo = new Logger(LOGFILE_NAME);
 lWarn = new Logger(LOGFILE_NAME);
 
 
-function dsidFromIndex(anyDSID,deviceIndex) {
-	var baseIndex=Math.floor(parseInt(anyDSID.substring(anyDSID.length-3).substring(0,1),16)/8)*8;
-	var parentDSID=anyDSID.substring(0,anyDSID.length-3);
-	return parentDSID + '' + (baseIndex+deviceIndex).toString(16) + "00";			
+function dsidFromIndex (anyDSID, deviceIndex) {
+    var baseIndex = Math.floor(parseInt(anyDSID.substring(anyDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+    var parentDSID = anyDSID.substring(0, anyDSID.length - 3);
+    return parentDSID + '' + (baseIndex + deviceIndex).toString(16) + '00';
 }
 
-function resetProperty(resetDSID) {
-	if (Property.getNode('devices')==null)
-		return;
-	Property.getNode('devices').removeChild(resetDSID);
-	Property.store();
+function resetProperty (resetDSID) {
+    if (Property.getNode('devices') == null) { return; }
+    Property.getNode('devices').removeChild(resetDSID);
+    Property.store();
 }
 
-function resetUlux(resetDSID) {
-	// kill queue
-	lInfo.logln('RESET DSID ' + resetDSID + ' : kill queue');
-	
-	if (Property.getNode('queue')!=null) {
-		var queue=Property.getNode('queue').getChildren();
-		for (var iIndex=0;iIndex<queue.length;iIndex++) {
-			if (queue[iIndex].getChild('data')!=null)
-			if (queue[iIndex].getChild('data').getChildren().length>0) {
-				if (queue[iIndex].getChild('data').getChildren()[0].getChild('dsid')!=null) {
-					var dsid=queue[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
-					var baseDSID=dsidFromIndex(dsid,0);
-					if (baseDSID==dsidFromIndex(resetDSID,0))
-						Property.getNode('queue').removeChild(queue[iIndex].getName());
-				}
-			}
-		}
-	}
-	lInfo.logln('RESET DSID ' + resetDSID + ' : setReset Flags');
-	// issue resetflags
-	var configDSID=dsidFromIndex(resetDSID,7);
-	
-	setDeviceConfig(dsidFromIndex(resetDSID,0),1,0x10,0xCF);
-	
-	setDeviceConfig(configDSID,127,0xd2,0xCF);
-	setDeviceConfig(configDSID,127,0xd1,0x80);
-	// resetPropertytree
-	lInfo.logln('RESET DSID ' + resetDSID + ' : clean propertytree');
-	resetProperty(dsidFromIndex(resetDSID,0));
-
-	for (var iIndex=7;iIndex>=0;iIndex-- ) {
-		try {					
-			var oDevice=getDevices().byDSUID(dsidFromIndex(resetDSID,iIndex));
-			oDevice.reregister();
-			lInfo.logln('RESET DSID ' + resetDSID + 'started reregisterDevice for ' + dsidFromIndex(resetDSID,iIndex));
-		} catch (e) {
-			lWarn.logln('error on reregister device ' + e);
-		}
-	}
-	new Event('ulux.reset',{waitForDsid:resetDSID,retryCounter:0}).raise();
+function resetUlux (resetDSID) {
+    // kill queue
+    lInfo.logln('RESET DSID ' + resetDSID + ' : kill queue');
+
+    if (Property.getNode('queue') != null) {
+        var queue = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < queue.length; iIndex++) {
+            if (queue[iIndex].getChild('data') != null) {
+                if (queue[iIndex].getChild('data').getChildren().length > 0) {
+                    if (queue[iIndex].getChild('data').getChildren()[0].getChild('dsid') != null) {
+                        var dsid = queue[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
+                        var baseDSID = dsidFromIndex(dsid, 0);
+                        if (baseDSID == dsidFromIndex(resetDSID, 0)) { Property.getNode('queue').removeChild(queue[iIndex].getName()); }
+                    }
+                }
+            }
+        }
+    }
+    lInfo.logln('RESET DSID ' + resetDSID + ' : setReset Flags');
+    // issue resetflags
+    var configDSID = dsidFromIndex(resetDSID, 7);
+
+    setDeviceConfig(dsidFromIndex(resetDSID, 0), 1, 0x10, 0xCF);
+
+    setDeviceConfig(configDSID, 127, 0xd2, 0xCF);
+    setDeviceConfig(configDSID, 127, 0xd1, 0x80);
+    // resetPropertytree
+    lInfo.logln('RESET DSID ' + resetDSID + ' : clean propertytree');
+    resetProperty(dsidFromIndex(resetDSID, 0));
+
+    for (var iIndex = 7; iIndex >= 0; iIndex--) {
+        try {
+            var oDevice = getDevices().byDSUID(dsidFromIndex(resetDSID, iIndex));
+            oDevice.reregister();
+            lInfo.logln('RESET DSID ' + resetDSID + 'started reregisterDevice for ' + dsidFromIndex(resetDSID, iIndex));
+        } catch (e) {
+            lWarn.logln('error on reregister device ' + e);
+        }
+    }
+    new Event('ulux.reset', { waitForDsid: resetDSID, retryCounter: 0 }).raise();
 
 }
 
-function resetUlux1(resetDSID) {
-	// kill queue
-	lInfo.logln('RESET DSID ' + resetDSID + ' : kill queue (Step 1)');
-	
-	if (Property.getNode('queue')!=null) {
-		var queue=Property.getNode('queue').getChildren();
-		for (var iIndex=0;iIndex<queue.length;iIndex++) {
-			if (queue[iIndex].getChild('data')!=null)
-			if (queue[iIndex].getChild('data').getChildren().length>0) {
-				if (queue[iIndex].getChild('data').getChildren()[0].getChild('dsid')!=null) {
-					var dsid=queue[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
-					var baseDSID=dsidFromIndex(dsid,0);
-					if (baseDSID==dsidFromIndex(resetDSID,0))
-						Property.getNode('queue').removeChild(queue[iIndex].getName());
-				}
-			}
-		}
-	}
-	lInfo.logln('RESET DSID ' + resetDSID + ' : setReset Flags');
-	// issue resetflags
-	var configDSID=dsidFromIndex(resetDSID,7);
-	
-	//setDeviceConfig(dsidFromIndex(resetDSID,0),1,0x10,0xCF);
-	
-	setDeviceConfig(configDSID,127,0xd2,0xCF);
-	setDeviceConfig(configDSID,127,0xd1,0xe0);
-
-	lInfo.logln('RESET DSID ' + resetDSID + ' wait a little and go to step 2');
-	new Event('ulux.reset',{dsid2:resetDSID,time:'+30',retryCounter:0}).raise();
+function resetUlux1 (resetDSID) {
+    // kill queue
+    lInfo.logln('RESET DSID ' + resetDSID + ' : kill queue (Step 1)');
+
+    if (Property.getNode('queue') != null) {
+        var queue = Property.getNode('queue').getChildren();
+        for (var iIndex = 0; iIndex < queue.length; iIndex++) {
+            if (queue[iIndex].getChild('data') != null) {
+                if (queue[iIndex].getChild('data').getChildren().length > 0) {
+                    if (queue[iIndex].getChild('data').getChildren()[0].getChild('dsid') != null) {
+                        var dsid = queue[iIndex].getChild('data').getChildren()[0].getChild('dsid').getValue();
+                        var baseDSID = dsidFromIndex(dsid, 0);
+                        if (baseDSID == dsidFromIndex(resetDSID, 0)) {
+                            Property.getNode('queue').removeChild(queue[iIndex].getName());
+                        }
+                    }
+                }
+            }
+        }
+    }
+    lInfo.logln('RESET DSID ' + resetDSID + ' : setReset Flags');
+    // issue resetflags
+    var configDSID = dsidFromIndex(resetDSID, 7);
+
+    // setDeviceConfig(dsidFromIndex(resetDSID,0),1,0x10,0xCF);
+
+    setDeviceConfig(configDSID, 127, 0xd2, 0xCF);
+    setDeviceConfig(configDSID, 127, 0xd1, 0xe0);
+
+    lInfo.logln('RESET DSID ' + resetDSID + ' wait a little and go to step 2');
+    new Event('ulux.reset', { dsid2: resetDSID, time: '+30', retryCounter: 0 }).raise();
 }
 
-function resetUlux2(resetDSID) {
-
-	var value=-2;
-	/*
-	var value=-1;
-	removed that handling because dsm seems to be a little picky if a device will not answer for this requests .....
-	try {
-		value=getDeviceConfig(dsidFromIndex(resetDSID,0),127,0);
-
-	} catch (e) {
-		lInfo.logln('wait for dsid '+ resetDSID +' comming back with retry ' + raisedEvent.parameter.retryCounter);
-		var retryCounter=parseInt("" + raisedEvent.parameter.retryCounter,10) + 1;
-		new Event('ulux.reset',{dsid2:resetDSID,time:'+10',retryCounter:retryCounter}).raise();
-		return;
-	}	
+function resetUlux2 (resetDSID) {
+
+    var value = -2;
+    /*
+    var value=-1;
+    removed that handling because dsm seems to be a little picky if a device will not answer for this requests .....
+    try {
+        value=getDeviceConfig(dsidFromIndex(resetDSID,0),127,0);
+
+    } catch (e) {
+        lInfo.logln('wait for dsid '+ resetDSID +' comming back with retry ' + raisedEvent.parameter.retryCounter);
+        var retryCounter=parseInt("" + raisedEvent.parameter.retryCounter,10) + 1;
+        new Event('ulux.reset',{dsid2:resetDSID,time:'+10',retryCounter:retryCounter}).raise();
+        return;
+    }
 */
-	if (value!=-1) {
-		// resetPropertytree
-		lInfo.logln('RESET DSID ' + resetDSID + ' : clean propertytree');
-		resetProperty(dsidFromIndex(resetDSID,0));
-
-		for (var iIndex=7;iIndex>=0;iIndex-- ) {
-			try {					
-				var oDevice=getDevices().byDSUID(dsidFromIndex(resetDSID,iIndex));
-				oDevice.reregister();
-				lInfo.logln('RESET DSID ' + resetDSID + 'started reregisterDevice for ' + dsidFromIndex(resetDSID,iIndex));
-			} catch (e) {
-				lWarn.logln('error on reregister device ' + e);
-			}
-		}
-		new Event('ulux.reset',{waitForDsid:resetDSID,retryCounter:0}).raise();
-	}	
+    if (value != -1) {
+        // resetPropertytree
+        lInfo.logln('RESET DSID ' + resetDSID + ' : clean propertytree');
+        resetProperty(dsidFromIndex(resetDSID, 0));
+
+        for (var iIndex = 7; iIndex >= 0; iIndex--) {
+            try {
+                var oDevice = getDevices().byDSUID(dsidFromIndex(resetDSID, iIndex));
+                oDevice.reregister();
+                lInfo.logln('RESET DSID ' + resetDSID + 'started reregisterDevice for ' + dsidFromIndex(resetDSID, iIndex));
+            } catch (e) {
+                lWarn.logln('error on reregister device ' + e);
+            }
+        }
+        new Event('ulux.reset', { waitForDsid: resetDSID, retryCounter: 0 }).raise();
+    }
 }
 
 
-
-if (raisedEvent.name=="ulux.reset") {
-	if (raisedEvent.parameter.waitForDsid!=null) {
-		var resetDSID=raisedEvent.parameter.waitForDsid;
-		try {
-	        var value=getDeviceConfig(dsidFromIndex(resetDSID,0),127,0);
-			new Event('ulux.config',{dsid:resetDSID,actions:'probeDevice',time:'+1'}).raise();	
-		} catch (e) {
-			lInfo.logln('wait for dsid comming back with retry ' + raisedEvent.parameter.retryCounter);
-			var retryCounter=parseInt("" + raisedEvent.parameter.retryCounter,10) + 1;
-			new Event('ulux.reset',{waitForDsid:resetDSID,time:'+1',retryCounter:retryCounter}).raise();
-		}
-	} else if (raisedEvent.parameter.dsid!=null) {
-		resetUlux1(raisedEvent.parameter.dsid);
-	} else if (raisedEvent.parameter.dsid1!=null) {
-		resetUlux1(raisedEvent.parameter.dsid1);
-	} else if (raisedEvent.parameter.dsid2!=null) {
-		resetUlux2(raisedEvent.parameter.dsid2);
-	}
+if (raisedEvent.name === 'ulux.reset') {
+    if (raisedEvent.parameter.waitForDsid != null) {
+        var resetDSID = raisedEvent.parameter.waitForDsid;
+        try {
+            var value = getDeviceConfig(dsidFromIndex(resetDSID, 0), 127, 0);
+            new Event('ulux.config', { dsid: resetDSID, actions: 'probeDevice', time: '+1' }).raise();
+        } catch (e) {
+            lInfo.logln('wait for dsid comming back with retry ' + raisedEvent.parameter.retryCounter);
+            var retryCounter = parseInt('' + raisedEvent.parameter.retryCounter, 10) + 1;
+            new Event('ulux.reset', { waitForDsid: resetDSID, time: '+1', retryCounter: retryCounter }).raise();
+        }
+    } else if (raisedEvent.parameter.dsid != null) {
+        resetUlux1(raisedEvent.parameter.dsid);
+    } else if (raisedEvent.parameter.dsid1 != null) {
+        resetUlux1(raisedEvent.parameter.dsid1);
+    } else if (raisedEvent.parameter.dsid2 != null) {
+        resetUlux2(raisedEvent.parameter.dsid2);
+    }
 }
-
diff --git a/scripts/ulux-timer.js b/scripts/ulux-timer.js
index e013f80be5e00418fdd931f039643d87b3d5be24..ab22582eb202deeb9f05b96b194eba9fb36ae73a 100644
--- a/scripts/ulux-timer.js
+++ b/scripts/ulux-timer.js
@@ -1,12 +1,12 @@
-var LOGFILE_NAME = "ulux.log";
+/* globals Logger, Property, raisedEvent */
+
+var LOGFILE_NAME = 'ulux.log';
 var lWarn = {
-		logln : function(o) {
-		}
-	};
-	var lInfo = {
-		logln : function(o) {
-		}
-	};
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
+var lInfo = {
+    logln: function (o) {}   // eslint-disable-line no-empty-function
+};
 
 lInfo = new Logger(LOGFILE_NAME);
 lWarn = new Logger(LOGFILE_NAME);
@@ -16,9 +16,10 @@ var iSunsetSecondsSinceMidnight = 0;
 var iDuskSecondsSinceMidnight = 0;
 var iDawnSecondsSinceMidnight = 0;
 
-function getAstroTimes() {
-    if (iSunriseSecondsSinceMidnight!=0)
+function getAstroTimes () {
+    if (iSunriseSecondsSinceMidnight != 0) {
         return;
+    }
     var sunriseNode = Property.getNode('/config/geodata/sunrise');
     if (sunriseNode == null) {
         lWarn.logln('scheduleSunTimedEvents - no sunrise Infomation');
@@ -26,7 +27,7 @@ function getAstroTimes() {
     }
     var sString = sunriseNode.getValue();
     var sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no sunrise Infomation');
         return;
     }
@@ -42,7 +43,7 @@ function getAstroTimes() {
     }
     sString = sunsetNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no sunset Infomation');
         return;
     }
@@ -58,7 +59,7 @@ function getAstroTimes() {
     }
     sString = duskNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no dusk Infomation');
         return;
     }
@@ -75,7 +76,7 @@ function getAstroTimes() {
     }
     sString = dawnNode.getValue();
     sArray = sString.split(':');
-    if (sArray.length != 3) {
+    if (sArray.length !== 3) {
         lWarn.logln('scheduleSunTimedEvents - no dawn Infomation');
         return;
     }
@@ -84,149 +85,158 @@ function getAstroTimes() {
     iDawnSecondsSinceMidnight += parseInt(sArray[0], 10) * 60 * 60;
     lInfo.logln('scheduleSunTimedEvents - Dawn at ' + sString + '; seconds since Midnight ' + iDawnSecondsSinceMidnight);
 
-} 
+}
 
 
-function dsidFromIndex(anyDSID,deviceIndex) {
-	var baseIndex=Math.floor(parseInt(anyDSID.substring(anyDSID.length-3).substring(0,1),16)/8)*8;
-	var parentDSID=anyDSID.substring(0,anyDSID.length-3);
-	return parentDSID + '' + (baseIndex+deviceIndex).toString(16) + "00";			
+function dsidFromIndex (anyDSID, deviceIndex) {
+    var baseIndex = Math.floor(parseInt(anyDSID.substring(anyDSID.length - 3).substring(0, 1), 16) / 8) * 8;
+    var parentDSID = anyDSID.substring(0, anyDSID.length - 3);
+    return parentDSID + '' + (baseIndex + deviceIndex).toString(16) + '00';
 }
 
 
-function nightEnd(baseDSID) {
-	lInfo.logln('ending night for ' + baseDSID);
-	
-	return [{
-		type:'writeBitmask',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xd0,
-		bitmask: 0x01,
-		value: 0x00,
-		cachePath:'nightEnd',
-		meta:'nocache'			
-	}];					
+function nightEnd (baseDSID) {
+    lInfo.logln('ending night for ' + baseDSID);
+
+    return [ {
+        type: 'writeBitmask',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xd0,
+        bitmask: 0x01,
+        value: 0x00,
+        cachePath: 'nightEnd',
+        meta: 'nocache'
+    } ];
 
 }
 
-function nightStart(baseDSID) {
-	lInfo.logln('starting night for ' + baseDSID);	
-	return [{
-		type:'writeBitmask',
-		dsid:dsidFromIndex(baseDSID,7),
-		bank:127,
-		index:0xd0,
-		bitmask: 0x01,
-		value: 0x01,
-		cachePath:'nightStart',
-		meta:'nocache'			
-	}];					
+function nightStart (baseDSID) {
+    lInfo.logln('starting night for ' + baseDSID);
+    return [ {
+        type: 'writeBitmask',
+        dsid: dsidFromIndex(baseDSID, 7),
+        bank: 127,
+        index: 0xd0,
+        bitmask: 0x01,
+        value: 0x01,
+        cachePath: 'nightStart',
+        meta: 'nocache'
+    } ];
 }
 
-function executeDusk() {
-	var oTargetArray=[];
-	if (Property.getNode('devices')==null)
-		return;
-	var oArray=Property.getNode('devices').getChildren();
-	for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-		var deviceNode=oArray[iIndex];		
-		if (deviceNode.getChild('additionalBehaviour/nightMode')!=null)
-			if (deviceNode.getChild('additionalBehaviour/nightMode').getValue()=='dusk_dawn')
-				oTargetArray=oTargetArray.concat(nightStart(deviceNode.getName()));
-	}
-	lInfo.logln('target : ' + JSON.stringify(oTargetArray));
-	if (oTargetArray.length>0)
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oTargetArray)}).raise();
+function executeDusk () {
+    var oTargetArray = [];
+    if (Property.getNode('devices') == null) { return; }
+    var oArray = Property.getNode('devices').getChildren();
+    for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+        var deviceNode = oArray[iIndex];
+        if (deviceNode.getChild('additionalBehaviour/nightMode') != null) {
+            if (deviceNode.getChild('additionalBehaviour/nightMode').getValue() === 'dusk_dawn') {
+                oTargetArray = oTargetArray.concat(nightStart(deviceNode.getName()));
+            }
+        }
+    }
+    lInfo.logln('target : ' + JSON.stringify(oTargetArray));
+    if (oTargetArray.length > 0) {
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oTargetArray) }).raise();
+    }
 }
 
-function syncDSID(dsid) {
-	try {
-		lInfo.logln('NIGHTTIMER : night sync for ' + dsid);
-		var nightMode=Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightMode');
-		var iNightStart=-1;
-		var iNightEnd=-1;
-		if (nightMode=='fixed_time') {
-			iNightStart=Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightStart');
-			iNightEnd=Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightEnd');
-			lInfo.logln('NIGHTTIMER : fixed time start at ' + iNightStart + ' night end at ' + iNightEnd);
-		}
-		if (nightMode=='dusk_dawn') {
-			iNightStart=iDuskSecondsSinceMidnight;
-			iNightEnd=iDawnSecondsSinceMidnight;
-			lInfo.logln('NIGHTTIMER : dusk_dawn time start at ' + iNightStart + ' night end at ' + iNightEnd);
-		}
-		if ((iNightStart!=-1)&& (iNightEnd!=-1)) {
-			var oDate=new Date();
-			var iNow=oDate.getHours() * 3600 + oDate.getMinutes() * 60 + oDate.getSeconds();
-			lInfo.logln('NIGHTTIMER : now we have ' + iNow + " or : "  + Math.floor(iNow/3600) + ':'  + Math.floor((iNow/60)%60) +  ':' + Math.floor(iNow%60) );
-			var fIsNightNow=false;
-			if (iNightStart<iNightEnd) {
-				// 0 ... 10
-				if (iNightStart<iNow)
-					if (iNow<iNightEnd)
-						fIsNightNow=true;
-			} else {
-				// 23 ...2
-				if ((iNow<iNightEnd) ||  (iNightStart<iNow))
-					fIsNightNow=true;
-			}
-			if (fIsNightNow) {
-				lInfo.logln('NIGHTTIMER : we assume night is active');
-				return nightStart(dsid);
-			} else  {
-				lInfo.logln('NIGHTTIMER : we assume night is not active');
-				return nightEnd(dsid);
-			}
-		}
-	} catch (e) {}
-	return [];
+function syncDSID (dsid) {
+    try {
+        lInfo.logln('NIGHTTIMER : night sync for ' + dsid);
+        var nightMode = Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightMode');
+        var iNightStart = -1;
+        var iNightEnd = -1;
+        if (nightMode === 'fixed_time') {
+            iNightStart = Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightStart');
+            iNightEnd = Property.getProperty('devices/' + dsid + '/additionalBehaviour/nightEnd');
+            lInfo.logln('NIGHTTIMER : fixed time start at ' + iNightStart + ' night end at ' + iNightEnd);
+        }
+        if (nightMode === 'dusk_dawn') {
+            iNightStart = iDuskSecondsSinceMidnight;
+            iNightEnd = iDawnSecondsSinceMidnight;
+            lInfo.logln('NIGHTTIMER : dusk_dawn time start at ' + iNightStart + ' night end at ' + iNightEnd);
+        }
+        if (iNightStart != -1 && iNightEnd != -1) {
+            var oDate = new Date();
+            var iNow = oDate.getHours() * 3600 + oDate.getMinutes() * 60 + oDate.getSeconds();
+            lInfo.logln('NIGHTTIMER : now we have ' + iNow + ' or : ' + Math.floor(iNow / 3600) + ':' + Math.floor((iNow / 60) % 60) + ':' + Math.floor(iNow % 60));
+            var fIsNightNow = false;
+            if (iNightStart < iNightEnd) {
+                // 0 ... 10
+                if (iNightStart < iNow) {
+                    if (iNow < iNightEnd) {
+                        fIsNightNow = true;
+                    }
+                }
+            } else {
+                // 23 ...2
+                if (iNow < iNightEnd || iNightStart < iNow) {
+                    fIsNightNow = true;
+                }
+            }
+            if (fIsNightNow) {
+                lInfo.logln('NIGHTTIMER : we assume night is active');
+                return nightStart(dsid);
+            } else {
+                lInfo.logln('NIGHTTIMER : we assume night is not active');
+                return nightEnd(dsid);
+            }
+        }
+    } catch (e) {}
+    return [];
 }
 
-function executeDawn() {
-	var oTargetArray=[];
-	if (Property.getNode('devices')==null)
-		return;
-	var oArray=Property.getNode('devices').getChildren();
-	for (var iIndex=0;iIndex<oArray.length;iIndex++) {
-		var deviceNode=oArray[iIndex];
-		if (deviceNode.getChild('additionalBehaviour/nightMode')!=null)
-			if (deviceNode.getChild('additionalBehaviour/nightMode').getValue()=='dusk_dawn')
-				oTargetArray=oTargetArray.concat(nightEnd(deviceNode.getName()));
-	}
-	if (oTargetArray.length>0)
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oTargetArray)}).raise();
+function executeDawn () {
+    var oTargetArray = [];
+    if (Property.getNode('devices') == null) { return; }
+    var oArray = Property.getNode('devices').getChildren();
+    for (var iIndex = 0; iIndex < oArray.length; iIndex++) {
+        var deviceNode = oArray[iIndex];
+        if (deviceNode.getChild('additionalBehaviour/nightMode') != null) {
+            if (deviceNode.getChild('additionalBehaviour/nightMode').getValue() === 'dusk_dawn') {
+                oTargetArray = oTargetArray.concat(nightEnd(deviceNode.getName()));
+            }
+        }
+    }
+    if (oTargetArray.length > 0) {
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oTargetArray) }).raise();
+    }
 }
 
-if (raisedEvent.name=='ulux.timer') {
-	Property.load();
-	if (raisedEvent.parameter.dusk!=null) {
-		executeDusk();	
-	}
-	if (raisedEvent.parameter.dawn!=null) {
-		executeDawn();	
-	}
-	if (raisedEvent.parameter.fixedStart!=null) {
-		var oArray=nightStart(raisedEvent.parameter.fixedStart);
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray)}).raise();	
-	} 
-	if (raisedEvent.parameter.fixedEnd!=null) {
-		var oArray=nightEnd(raisedEvent.parameter.fixedEnd);
-		new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray)}).raise();	
-	} 
-	if (raisedEvent.parameter.actions!=null)
-		if (raisedEvent.parameter.actions=="sync") {
-			getAstroTimes();
-			var oArray=[];
-			if (raisedEvent.parameter.dsid)
-				oArray=oArray.concat(syncDSID(raisedEvent.parameter.dsid));
-			else {
-				var oTargetArray=Property.getNode('devices').getChildren();
-				for (var iIndex=0;iIndex<oTargetArray.length;iIndex++) {
-					oArray=oArray.concat(syncDSID(oTargetArray[iIndex].getName()));
-				}
-			}
-			if (oArray.length>0)
-				new Event('ulux.queue',{actions:'enqueue',values:JSON.stringify(oArray)}).raise();
-		}
-}
\ No newline at end of file
+if (raisedEvent.name === 'ulux.timer') {
+    Property.load();
+    if (raisedEvent.parameter.dusk != null) {
+        executeDusk();
+    }
+    if (raisedEvent.parameter.dawn != null) {
+        executeDawn();
+    }
+    if (raisedEvent.parameter.fixedStart != null) {
+        var oArray = nightStart(raisedEvent.parameter.fixedStart);
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray) }).raise();
+    }
+    if (raisedEvent.parameter.fixedEnd != null) {
+        var oArray = nightEnd(raisedEvent.parameter.fixedEnd);
+        new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray) }).raise();
+    }
+    if (raisedEvent.parameter.actions != null) {
+        if (raisedEvent.parameter.actions === 'sync') {
+            getAstroTimes();
+            var oArray = [];
+            if (raisedEvent.parameter.dsid) {
+                oArray = oArray.concat(syncDSID(raisedEvent.parameter.dsid));
+            } else {
+                var oTargetArray = Property.getNode('devices').getChildren();
+                for (var iIndex = 0; iIndex < oTargetArray.length; iIndex++) {
+                    oArray = oArray.concat(syncDSID(oTargetArray[iIndex].getName()));
+                }
+            }
+            if (oArray.length > 0) {
+                new Event('ulux.queue', { actions: 'enqueue', values: JSON.stringify(oArray) }).raise();
+            }
+        }
+    }
+}