UNPKG

iobroker.starline

Version:

Control your car from iobroker with Starline Telematics

420 lines (387 loc) 20.9 kB
/* ioBroker.starline Widget-Set version: "0.1.0" Copyright 10.2015-2016 instalator <vvvalt@mail.ru> */ "use strict"; // add translations for edit mode if (vis.editMode) { $.extend(true, systemDictionary, { "Date_on": {"en": "Date on", "de": "mainColor", "ru": "Данные на"}, "myColor_tooltip": { "en": "Description of\x0AmyColor", "de": "Beschreibung von\x0AmyColor", "ru": "Описание\x0AmyColor" }, "htmlText": {"en": "htmlText", "de": "htmlText", "ru": "htmlText"}, "group_extraMyset": {"en": "extraMyset", "de": "extraMyset", "ru": "extraMyset"}, "extraAttr": {"en": "extraAttr", "de": "extraAttr", "ru": "extraAttr"} }); } // add translations for non-edit mode $.extend(true, systemDictionary, { "Date_on": {"en": "Date on", "de": "mainColor", "ru": "Данные на"} }); // this code can be placed directly in template.html vis.binds.starline = { version: "0.1.0", showVersion: function () { if (vis.binds.starline.version) { console.log('Version starline: ' + vis.binds.starline.version); vis.binds.starline.version = null; } }, states: { oid_alias: {val: undefined, selector: '.alias_value', blink: false, objName: 'alias'}, oid_ctemp: {val: undefined, selector: '', blink: false, objName: 'ctemp'}, oid_etemp: {val: undefined, selector: '', blink: false, objName: 'etemp'}, oid_balance: {val: undefined, selector: '', blink: false, objName: 'balance'}, oid_battery: {val: undefined, selector: '', blink: false, objName: 'battery'}, oid_gsm_lvl: {val: undefined, selector: '.gsm-status', blink: false, objName: 'gsm_lvl'}, oid_gps_lvl: {val: undefined, selector: '.gps-status', blink: false, objName: 'gps_lvl'}, oid_status: {val: undefined, selector: '.menu-status', blink: false, objName: 'status'}, oid_position_sat_qty: {val: undefined, selector: '.gps-status', blink: false, objName: 'position.sat_qty'}, // oid_car_state_arm: {val: undefined, selector: '.car-arm > .s1, .car-arm > .s2, .car-arm > .s3, .car-arm > .s4, .car-arm > .s5', blink: false, objName: 'car_state.arm'}, oid_car_state_door: {val: undefined, selector: '.car-doors', blink: false, objName: 'car_state.door'}, oid_car_state_hijack: {val: undefined, selector: '.hijack-border', blink: false, objName: 'car_state.hijack'}, oid_car_state_valet: {val: undefined, selector: '.valet-border', blink: false, objName: 'car_state.valet'}, oid_car_state_hood: {val: undefined, selector: '.car-hood', blink: false, objName: 'car_state.hood'}, oid_car_state_ign: {val: undefined, selector: '.car-ign > .s1, .car-arm > .s2, .car-arm > .s3', blink: false, objName: 'car_state.ign'}, oid_car_state_trunk: {val: undefined, selector: '.car-trunk', blink: false, objName: 'car_state.trunk'}, oid_car_state_hbrake: {val: undefined, selector: '', blink: false, objName: 'car_state.hbrake'}, oid_car_state_pbrake: {val: undefined, selector: '', blink: false, objName: 'car_state.pbrake'}, oid_car_state_run: {val: undefined, selector: '.car-run', blink: false, objName: 'car_state.run'}, // oid_alr_state_door: {val: undefined, selector: '.car-doors-red', blink: false, objName: 'car_alr_state.door'}, oid_alr_state_add_h: {val: undefined, selector: '', blink: false, objName: 'car_alr_state.add_h'}, oid_alr_state_add_l: {val: undefined, selector: '', blink: false, objName: 'car_alr_state.add_l'}, oid_alr_state_hbrake: {val: undefined, selector: '', blink: false, objName: 'car_alr_state.hbrake'}, oid_alr_state_hood: {val: undefined, selector: '.car-hood-red', blink: false, objName: 'car_alr_state.hood'}, oid_alr_state_ign: {val: undefined, selector: '.car-key-red', blink: false, objName: 'car_alr_state.ign'}, oid_alr_state_pbrake: {val: undefined, selector: '', blink: false, objName: 'car_alr_state.pbrake'}, oid_alr_state_shock_h: {val: undefined, selector: '.car-hammer2-red', blink: false, objName: 'car_alr_state.shock_h'}, oid_alr_state_shock_l: {val: undefined, selector: '.car-hammer1-red', blink: false, objName: 'car_alr_state.shock_l'}, oid_alr_state_tilt: {val: undefined, selector: '.car-tiltsensor-red', blink: false, objName: 'car_alr_state.tilt'}, oid_alr_state_trunk: {val: undefined, selector: '.car-trunk-red', blink: false, objName: 'car_alr_state.trunk'}, oid_alr_state_hijack: {val: undefined, selector: '', blink: false, objName: 'car_alr_state.hijack'}, // oid_checkballance: {val: undefined, selector: '', blink: false, objName: 'control.checkballance'}, oid_checktemp: {val: undefined, selector: '', blink: false, objName: 'control.checktemp'} }, control: { oid_alias: {val: undefined, selector: '', blink: false, objName: 'alias'}, oid_car_state_arm: {val: undefined, selector: '', blink: false, objName: 'car_state.arm'}, oid_car_state_valet: {val: undefined, selector: '', blink: false, objName: 'car_state.valet'}, oid_car_state_run: {val: undefined, selector: '', blink: false, objName: 'car_state.run'}, oid_car_state_ign: {val: undefined, selector: '', blink: false, objName: 'car_state.ign'}, oid_car_state_hijack: {val: undefined, selector: '', blink: false, objName: 'car_state.hijack'}, oid_car_state_webasto: {val: undefined, selector: '', blink: false, objName: 'car_state.webasto'}, oid_car_state_shock_bpass: {val: undefined, selector: '', blink: false, objName: 'car_state.shock_bpass'}, oid_car_state_tilt_bpass: {val: undefined, selector: '', blink: false, objName: 'car_state.tilt_bpass'}, // oid_control_hijack: {val: undefined, selector: '', blink: false, objName: 'control.hijack'}, oid_control_arm: {val: undefined, selector: '', blink: false, objName: 'control.arm'}, oid_control_ign: {val: undefined, selector: '', blink: false, objName: 'control.ign'}, oid_control_poke: {val: undefined, selector: '', blink: false, objName: 'control.poke'}, oid_control_webasto: {val: undefined, selector: '', blink: false, objName: 'control.webasto'}, oid_control_shock_bpass: {val: undefined, selector: '', blink: false, objName: 'control.shock_bpass'}, oid_control_tilt_bpass: {val: undefined, selector: '', blink: false, objName: 'control.tilt_bpass'}, oid_control_valet: {val: undefined, selector: '', blink: false, objName: 'control.valet'}, oid_control_update_position: {val: undefined, selector: '', blink: false, objName: 'control.update_position'}, oid_control_out: {val: undefined, selector: '', blink: false, objName: 'control.out'} }, /********************createWidgetStatus****************************/ createWidgetStatus: function (widgetID, view, data, style) { var $div = $('#' + widgetID); // if nothing found => wait if (!$div.length) { return setTimeout(function () { vis.binds.starline.createWidgetStatus(widgetID, view, data, style); }, 100); } function setVisible(selector, isVisible, isBlink) { if (isVisible) { $(selector).show(); } else { $(selector).hide(); } if (isBlink) { $(selector).addClass('blink_me'); } else { $(selector).removeClass('blink_me'); } } //*************** function Visible(selector){ $(selector).attr('style', 'opacity: 1'); if (arm) {$(selector).addClass("blink_me");} } function UnVisible(selector){ $(selector).attr('style', 'opacity: 0'); $(selector).removeClass("blink_me"); } //******************* function updateStates() { var states = JSON.parse(JSON.stringify(vis.binds.starline.states)); var gsm = 0; var gps = 0; var arm = null; // read all states for (var s in states) { if (data[s] && data[s] !== 'nothing_selected') { states[s].val = vis.states[data[s] + '.val']; } } // convert time if (states.oid_alias) { var date = new Date(1000 * vis.states[data.oid_alias + '.ts']).toGMTString(); $div.find('.datedata').html('Данные на ' + date); } // convert gsm if (states.oid_gsm_lvl.val >= 1 && states.oid_gsm_lvl.val <= 7) {gsm = 1;} else if (states.oid_gsm_lvl.val >= 7 && states.oid_gsm_lvl.val < 14) {gsm = 2;} else if (states.oid_gsm_lvl.val >= 14 && states.oid_gsm_lvl.val < 21) {gsm = 3;} else if (states.oid_gsm_lvl.val >= 21 && states.oid_gsm_lvl.val < 28) {gsm = 4;} else if (states.oid_gsm_lvl.val >= 28 && states.oid_gsm_lvl.val <= 30) {gsm = 5;} // convert gps if (states.oid_gps_lvl.val >= 1 && states.oid_gps_lvl.val <= 7) {gps = 1;} else if (states.oid_gps_lvl.val >= 7 && states.oid_gps_lvl.val < 14) {gps = 2;} else if (states.oid_gps_lvl.val >= 14 && states.oid_gps_lvl.val < 21) {gps = 3;} if (states.oid_gsm_lvl){$('.gsm-status').attr('data-level', gsm);} if (states.oid_gsm_lvl){ $('.gps-status').attr('data-level', gps); $('.gps-status').attr('title', 'Уровень сигнала GPS. ' + states.oid_position_sat_qty.val + ' спутников'); } if (states.oid_status.val == 1){ $('.menu-status').removeClass('off').addClass('on'); $('.menu-status').attr('title', 'В сети'); } else { $('.menu-status').removeClass('on').addClass('off'); $('.menu-status').attr('title', 'Не в сети'); } if (states.oid_car_state_valet.val == 1){ $('.valet-border, .valet-content').show(); } else { $('.valet-border, .valet-content').hide(); } if (states.oid_car_state_hijack.val == 1){ $('.hijack-border').show(); } else { $('.hijack-border').hide(); } if (states.oid_car_state_arm.val == 1){ $('.car-arm').addClass("on"); arm = true; } else if (states.oid_car_state_arm.val != 1){ $('.car-arm').removeClass("on"); arm = false; } if (states.oid_alr_state_ign.val == 1 && arm){Visible('.car-key-red'); } else {UnVisible('.car-key-red');} if (states.oid_alr_state_shock_l.val == 1 && arm){Visible('.car-hammer1-red'); } else {UnVisible('.car-hammer1-red');} if (states.oid_alr_state_shock_h.val == 1 && arm){Visible('.car-hammer2-red'); } else {UnVisible('.car-hammer2-red');} if (states.oid_alr_state_tilt.val == 1 && arm){Visible('.car-tiltsensor-red'); } else {UnVisible('.car-tiltsensor-red');} if (states.oid_alr_state_trunk.val == 1 && arm){Visible('.car-trunk-red'); } else {UnVisible('.car-trunk-red');} if (states.oid_alr_state_door.val == 1 && arm){Visible('.car-doors-red'); } else {UnVisible('.car-doors-red');} if (states.oid_alr_state_ign.val == 1 && arm){Visible('.car-doors-red'); } else {UnVisible('.car-doors-red');} if (states.oid_alr_state_hood.val == 1 && arm){Visible('.car-hood-red'); } else {UnVisible('.car-hood-red');} if ((states.oid_alr_state_pbrake.val == 1 || states.oid_alr_state_hbrake.val == 1) && arm){Visible('.car-parking-red'); } else {UnVisible('.car-parking-red');} //****************************** if (states.oid_car_state_trunk.val == 1 && !arm){Visible('.car-trunk'); } else {UnVisible('.car-trunk');} if (states.oid_car_state_door.val == 1 && !arm){Visible('.car-doors'); } else {UnVisible('.car-doors');} if (states.oid_car_state_ign.val == 1 && !arm){Visible('.car-key'); } else {UnVisible('.car-key');} if (states.oid_car_state_run.val == 1){ Visible('.car-run'); if (arm){ $('.car-ign > .light').attr('style', 'opacity: 1'); $('.car-ign > .light').addClass("blink_me"); } else { $('.car-ign > .light').attr('style', 'opacity: 0'); $('.car-ign > .light').removeClass("blink_me"); } } else { UnVisible('.car-run'); UnVisible('.car-ign > .light'); } if (states.oid_car_state_hood.val == 1 && !arm){Visible('.car-hood');$('.car-hood').addClass("blink_me"); } else {$('.car-hood').removeClass("blink_me"); /*UnVisible('.car-hood');*/} if ((states.oid_car_state_pbrake.val == 1 || states.oid_car_state_hbrake.val == 1) && !arm){Visible('.car-parking'); } else {UnVisible('.car-parking');} if (states.oid_balance.val <=60){ $('.balance_icon').addClass("blink_me"); } else {$('.balance_icon').removeClass("blink_me");} /* if (neutral == 1){$('.car-neutral').attr('style', 'opacity: 1');} if (hfree == 1){$('.car-hfree').attr('style', 'opacity: 1');} */ /* for (var s in states) { if (states[s].selector) setVisible(states[s].selector, states[s].val, states[s].blink && states[s].val); } */ //setVisible('.car-doors', oid_car_state_door); $('.ctemp_value').html(states.oid_ctemp.val); $('.etemp_value').html(states.oid_etemp.val); $('.balance_value').html(states.oid_balance.val); $('.battery_value').html(states.oid_battery.val); } // on click button if (data.oid_checkballance && data.oid_checkballance !== 'nothing_selected') { $("li.balance").click(function () { vis.setValue(data.oid_checkballance, 1); }); } if (data.oid_checktemp && data.oid_checktemp !== 'nothing_selected') { $("li.ctemp, li.etemp").click(function () { vis.setValue(data.oid_checktemp, 1); }); } //debugger; // subscribe on updates of values for (var s in vis.binds.starline.states) { if (!data[s] || data[s] == 'nothing_selected') continue; vis.states.bind(data[s] + '.val', function () { updateStates(); }); } // initial update updateStates(); }, /********************createWidgetControl****************************/ createWidgetControl: function (widgetID, view, data, style) { var $div = $('#' + widgetID); var control; // if nothing found => wait if (!$div.length) { return setTimeout(function () { vis.binds.starline.createWidgetControl(widgetID, view, data, style); }, 100); } function updateStatesControl() { control = JSON.parse(JSON.stringify(vis.binds.starline.control)); // read all states for (var s in control) { if (data[s] && data[s] !== 'nothing_selected') {control[s].val = vis.states[data[s] + '.val'];} } //set icon button if (control.oid_car_state_hijack.val == 1){$('.control-icon-hijack').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat 0px -35px;'); } else {$('.control-icon-hijack').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat 0px 0px;');} if (control.oid_car_state_arm.val == 1){$('.control-icon-arm').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -72px -35px;'); } else {$('.control-icon-arm').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -72px 0px;');} if (control.oid_car_state_run.val == 1){$('.control-icon-ign').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -36px -35px;'); } else {$('.control-icon-ign').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -36px 0px;');} if (control.oid_car_state_webasto.val == 1){$('.control-icon-webasto').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -108px -35px;'); } else {$('.control-icon-webasto').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -108px 0px;');} if (control.oid_car_state_shock_bpass.val == 1){$('.control-icon-shock_bpass').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) -252px -35px no-repeat;'); } else {$('.control-icon-shock_bpass').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -252px 0px;');} if (control.oid_car_state_tilt_bpass.val == 1){$('.control-icon-tilt_bpass').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) -324px -35px no-repeat;'); } else {$('.control-icon-tilt_bpass').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -324px 0px;');} if (control.oid_car_state_valet.val == 1){$('.control-icon-valet').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) -288px -35px no-repeat;'); } else {$('.control-icon-valet').attr('style', 'background:url(./widgets/starline/img/buttons-icon-set_white.png) no-repeat -288px 0px;');} } // on click button $(".control-icon-hijack").click(function () { vis.setValue(data.oid_control_hijack, 1); }); $(".control-icon-arm").click(function () { if (control.oid_car_state_arm.val == 0 || control.oid_car_state_arm.val == 2){ vis.setValue(data.oid_control_arm, 1); } else {vis.setValue(data.oid_control_arm, 0);} }); $(".control-icon-ign").click(function () { if (control.oid_car_state_run.val == 0 || control.oid_car_state_run.val == 2){ vis.setValue(data.oid_control_ign, 1); } else {vis.setValue(data.oid_control_ign, 0);} }); $(".control-icon-poke").click(function () { vis.setValue(data.oid_control_poke, 1); }); $(".control-icon-webasto").click(function () { vis.setValue(data.oid_control_webasto, 1); if (control.oid_car_state_webasto.val == 0 || control.oid_car_state_webasto.val == 2){ vis.setValue(data.oid_control_webasto, 1); } else {vis.setValue(data.oid_control_webasto, 0);} }); $(".control-icon-shock_bpass").click(function () { if (control.oid_car_state_shock_bpass.val == 0 || control.oid_car_state_shock_bpass.val == 2){ vis.setValue(data.oid_control_shock_bpass, 1); } else {vis.setValue(data.oid_control_shock_bpass, 0);} }); $(".control-icon-tilt_bpass").click(function () { if (control.oid_car_state_tilt_bpass.val == 0 || control.oid_car_state_tilt_bpass.val == 2){ vis.setValue(data.oid_control_tilt_bpass, 1); } else {vis.setValue(data.oid_control_tilt_bpass, 0);} }); $(".control-icon-valet").click(function () { if (control.oid_control_valet.val == 0 || control.oid_control_valet.val == 2){ vis.setValue(data.oid_control_valet, 1); } else {vis.setValue(data.oid_control_valet, 0);} }); $(".control-icon-update_position").click(function () { vis.setValue(data.oid_control_update_position, 1); }); $(".control-icon-out").click(function () { vis.setValue(data.oid_control_out, 1); }); $(".control-button-toright").click(function () { $('.control-items').animate({ "marginLeft": "-=267px" }, "slow" ); $('.control-button-toleft').removeClass("off"); $('.control-button-toright').addClass("off"); }); $(".control-button-toleft").click(function () { $('.control-items').animate({ "marginLeft": "+=267px" }, "slow" ); $('.control-button-toright').removeClass("off"); $('.control-button-toleft').addClass("off"); }); //debugger; // subscribe on updates of values for (var s in vis.binds.starline.control) { if (!data[s] || data[s] == 'nothing_selected') continue; vis.states.bind(data[s] + '.val', function () { updateStatesControl(); }); } // initial update updateStatesControl(); } }; if (vis.editMode) { vis.binds.starline.changeOid = function (widgetID, view, newId, attr, isCss) { //console.log('---------: ' + widgetID +' - '+view+' - '+newId+' - '+attr+' - '+isCss); newId = newId ? newId.substring(0, newId.length - attr.length + 'oid_'.length) : ''; var changed = []; for (var s in vis.binds.starline.states) { if (s === 'oid_alias' || !vis.binds.starline.states[s].objName) continue; if (vis.objects[newId + vis.binds.starline.states[s].objName]) { changed.push(s); vis.views[view].widgets[widgetID].data[s] = newId + vis.binds.starline.states[s].objName; vis.widgets[widgetID].data[s] = newId + vis.binds.starline.states[s].objName; } } return changed; }; vis.binds.starline.changeOid2 = function (widgetID, view, newId, attr, isCss) { //console.log('---------: ' + widgetID +' - '+view+' - '+newId+' - '+attr+' - '+isCss); newId = newId ? newId.substring(0, newId.length - attr.length + 'oid_'.length) : ''; var changed2 = []; for (var s in vis.binds.starline.control) { if (s === 'oid_alias' || !vis.binds.starline.control[s].objName) continue; if (vis.objects[newId + vis.binds.starline.control[s].objName]) { changed2.push(s); vis.views[view].widgets[widgetID].data[s] = newId + vis.binds.starline.control[s].objName; vis.widgets[widgetID].data[s] = newId + vis.binds.starline.control[s].objName; } } return changed2; }; } vis.binds.starline.showVersion();