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(); + } + } + } +}