special-devices.js 16.38 KiB
/*
answer:"special",
triggers:{zone-scene:[{group:1,scene:1,name:[{de_DE:'dingsa'}]},{group:0,scene:2},{zone:0,scene:3}],
          device:[{id:0,name:[{de_DE:'dingsa'}]}], // device click events
          sensor-event:[{id:'.0',value:'inactive',name:[{de_DE:'dingsa'}]}],  // akm event
          device-event:[{id:'eventXY',name:[{de_DE:'dingsa'}]}]}, // sensor event
actions:{ zone-action:[{scene:1,group:1,name:[{de_DE:'dingsa'}]},{group:0,scene:2},{zone:0,scene:3}]
          device-action:[{scene:1,name:[{de_DE:'dingsa'}]},
                         {outputValue:1,name:[{de_DE:'dingsa'}]}]
conditions:{
	   sensor-event:[{}]}
}*/
var lWarn = {
	logln : function(o) {
var lInfo = {
	logln : function(o) {
var LOGFILE_NAME = "sr-config.log";
lWarn = new Logger(LOGFILE_NAME);
lInfo = new Logger(LOGFILE_NAME)
Property.setSavedProperty = function(path, value) {
	Property.setProperty(path, value);
	Property.setFlag(path, 'ARCHIVE', true);
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 = c1 = c2 = 0;
	        while ( i < utftext.length ) {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
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; } }; try { if (raisedEvent.name=='system-addon-scene-responder.registerSpecialDSIDDevices') { lInfo.logln('system-addon-scene-responder.registerSpecialDSIDDevices'); for (var sKey in raisedEvent.parameter) { lInfo.logln('type ' + sKey + ' : ' + raisedEvent.parameter[sKey]); } if (raisedEvent.parameter._context!=null) if (raisedEvent.parameter.values!=null) { lInfo.logln('context ' + raisedEvent.parameter._context); lInfo.logln('values ' + raisedEvent.parameter.values); var context=raisedEvent.parameter._context; lInfo.logln('removing context ' + context); if (Property.getNode('specialDSIDAction')!=null) { var oArray=Property.getNode('specialDSIDAction').getChildren(); for (var iIndex=0;iIndex<oArray.length;iIndex++) { lInfo.logln('checking for ' + oArray[iIndex].getChild('context').getValue() + " in " + oArray[iIndex].getName()); if (oArray[iIndex].getChild('context').getValue()==context) Property.getNode('specialDSIDAction').removeChild(oArray[iIndex].getName()); } } var oArray=JSON.parse(raisedEvent.parameter.values); for (var jIndex=0;jIndex<oArray.length;jIndex++) { lInfo.logln('adding ' + jIndex + ' from ' +oArray.length); var basePath='specialDSIDAction/' + oArray[jIndex].dsid; if (Property.getNode('specialDSIDAction')!=null) Property.getNode('specialDSIDAction').removeChild(oArray[jIndex].dsid) Property.setSavedProperty(basePath+'/context',context); var DataObject=oArray[jIndex]; if (DataObject.actions != null) { if (DataObject.actions['zone-action'] != null) { for (var iIndex = 0; iIndex < DataObject.actions['zone-action'].length; iIndex++) { var oDataObject = DataObject.actions['zone-action'][iIndex]; for ( var sKey in oDataObject.name) { Property.setSavedProperty(basePath + '/actions/zoneAction/' + iIndex + '/name/' + sKey, Utf8.encode(oDataObject.name[sKey])); } Property.setSavedProperty(basePath + '/actions/zoneAction/' + iIndex + '/scene', oDataObject.scene); if (oDataObject.zone != null) Property.setSavedProperty(basePath + '/actions/zoneAction/' + iIndex + '/zone', oDataObject.zone); if (oDataObject.group != null) Property.setSavedProperty(basePath + '/actions/zoneAction/' + iIndex + '/group', oDataObject.group); }