Version 0.9.1

Datei 'www/global/s_set_scene.js' Zurück zur Übersicht
var getStates = [];

function defaultSwipeEvent() {
	return createControl(arguments);
}

function createControl(device) {
    //create control
	device = device[0][0];
    var html = '<h1>Control '+ device.name +'</h1>', img;
    
    html += '<ul class="swipe-div common-in">';
    $(device.swipeMenuObjs).each(function () {
        img = (this.img)? '<span class="img"><img src="'+ this.img +'"></span>' : '';
        html += '<li onclick="'+ this.fn +'" class="common-item">'+ img + this.name +'</li>';
    });
    
    html += '</ul>';
    
    $('#main-ul').addClass('onControl');
    $('#control').html(html);
	$(document).scrollLeft(0);
	$(document).scrollTop(0);
}

function setOnFor(obj) {
	var device = $(obj).closest('.devices-box').attr('device');
	$('.device-name', '#on-for-control').text($('.common-title',$(obj).closest('.devices-box')).text());
	$('#on-for-control').show();
	$('#on-for-control #device').val(device);
}

function turnOnFor() {
	var device = $('#on-for-control #device').val(),
		min = $('#on-for-control .onfor-min').val();

	$('#on-for-control').hide();
	callSmart('on_for', device, (min * 60));
}

function getDeviceState(device, loops) {
	var z_wave_id = (typeof device === "string")? device : device.z_wave_id,
		url = 'ajax/get_state.php?device='+ z_wave_id, i,
		data = {},
		ajax = {url: url, data: data, dataType: "json", complete: function (r) { console.log(r); }};
	
	if(typeof loops === "undefined") var loops = 1;
	ajax.complete = function (data) {
		$('.devices-state', $('.'+ z_wave_id)).text(data.responseJSON.data.metrics.level);
	};
	
	for(i = 0; i < loops; i++) {
		setTimeout(function () { $.ajax(ajax); }, i*1000);
	}
}

function getAllDeviceStates(loops) {
	if(typeof loops === "undefined") var loops = 1;
	
	$(getStates).each(function () {
		getDeviceState(this, loops);
	});
}

function buildeScenes(scenes) {
    var html = '', deviceControlClass = '', room, changeDate, devices, img, scene;
    $(scenes).each(function () {
		scene = this;
        room = (this.room) ? this.room : '&nbsp;';
        changeDate = '';
        devices = '';
		deviceControlClass = (this.swipeFunction)? 'true' : 'false';
        
        $(this.devices).each(function () {
            devices += '<span class="im-'+ this.name.replace(/ /g,'-') +' '+ this.state +'" title="'+ this.name +'  '+ this.state +'"></span>';
        });
        
        img = (this.img) ? '<img src="'+ this.img +'">' : '&nbsp;';
        html = '<li class="scenes '+ this.name +'" scene="'+ this.name +'">'+
                '<div class="scenes-in common-in">'+
                    '<span class="scenes-img common-img">'+ img +'</span>'+
                    '<div class="scenes-content common-content">'+
                        '<div class="scenes-room">'+ room +'</div>'+
                        '<div class="common-title" title="'+ this.name +'">'+ this.title +'</div>'+
                    '</div>'+
                    '<div class="scenes-footer">'+
                        '<div class="devices">'+ devices +'</div>'+
                    '</div>'+
                '</div>'+
            '</li>';
        
        var obj = $(html).appendTo('#scenes');
		
		if(this.swipeFunction) {
			$(obj).addClass('hasControl').click(function () { scene.swipeFunction(scene) });
		}
    });
}

function buildeDevices(devices) {
    var i = 0, html = '', onForSpan = '', room, lastRoom, changeDate, img, device, deviceControlClass, roomFieldset;
    $(devices).each(function () {
        device = this;
        i++;
        room = (this.room) ? this.room : '&nbsp;';
        changeDate = '';
		deviceControlClass = (this.swipeFunction)? 'true' : 'false';
		onForSpan = (this.onFor)? '<div class="on-for-container"><span class="on-for" onclick="setOnFor(this)"></span></div>' : '';
        html = '';
		
		if(room != lastRoom) {
			roomFieldset = $('<fieldset><label>'+ room +'</label>').appendTo('#devices-all');
			lastRoom = room;
		}
		
		html += '<div class="devices devices-box '+ this.name.replace(/ /g,'-') +' '+ this.z_wave_id +'" device="'+ this.z_wave_id +'" id="device-'+ i +'">'+
			'<div class="devices-in common-in turn-toggle">'+
				'<div class="device-left">'+
					'<div class="devices-img common-img im-'+ this.type.replace(/ /g,'-') +'"></div>'+
					'<div class="devices-state"></div>'+
				'</div>'+
				'<div class="common-title" title="'+ this.z_wave_id +'">'+ this.name +'</div>'+
				onForSpan+
				'<div class="control-state">'+
					'<span class="turn-on device-switch switch-hover">On</span>'+
					'<span class="turn-off device-switch switch-hover">Off</span>'+
				'</div>'+
				'<div class="device-control '+ deviceControlClass +'"></div>'+
			'</div>'+
		'</div>';
		
		if(this.getState) getStates.push(this);
		var obj = $(html).appendTo(roomFieldset);
		
		if(this.swipeFunction) {
			console.log(device,device.swipeFunction);
			$(obj).closest('.devices-box').addClass('hasControl');
		    $('.device-control', obj).addClass('hasControl').click(function () { device.swipeFunction(device) });
		}
		
    });
}

function listenClick() {
	$('#scenes li.scenes, .device-switch').click(function () {
		setState(this);
	});
}

function setState(obj) {
	var p = $(obj).parent(),
		pID = $(p).attr('id'),
		mode = '', p1 = '', p2 = '', tmp;
	
	if(pID == 'scenes') {
		mode = 'set_scene';
		p1 = $(obj).attr('scene');
		
	} else if($(p).hasClass('devices')) {
		p1 = $(obj).closest('.devices-box').attr('device');
		tmp = ($(obj).closest('ul.devices').attr('id') == 'devices-on')? 'on' : 'off';
		mode="turn_"+ tmp;
	} else {
		p1 = $(obj).closest('.devices-box').attr('device');
		console.log(obj, $(obj).attr('class'));
		if($(obj).hasClass('turn-on')) {
			mode = 'turn_on';
		} else if($(obj).hasClass('turn-off')) {
			mode = 'turn_off';
		} else if($(obj).hasClass('turn-toggle')) {
			mode = 'turn_toggle';
		}
	}

	callSmart(mode, p1, p2);
}

function callSmart() {
	var url = 'ajax/call_script.php?i',
        data = {},
		ajax, i;
	for(i = 0; i < arguments.length; i++) {
		data['p'+i] = arguments[i];
	}
	ajax = {url: url, data: data, dataType: "json", complete: function() { getAllDeviceStates(10); }};
    $.ajax(ajax);
}

$(function () {
    buildeScenes(scenes);
	buildeDevices(devices);
	listenClick();
	getAllDeviceStates();
});