Version 0.9.1
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 : ' ';
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 +'">' : ' ';
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 : ' ';
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();
});