createState('SamsungAir.state', ''); createState('SamsungAir.celcius', ''); //var airconditioner = require('node-samsung-airconditioner'); var API = require('node-samsung-airconditioner'); var connect = false; var aircon = null; var connecting_to = {}; var known_tokens = {}; function onstate(aircon){ //Функции подписки на обьекты ИОБ, подписываемся только после того как подключились к кондею on({id: 'javascript.0.SamsungAir.AC_FUN_TEMPSET', change: "ne", ack: false}, function (data){ // реагирем только если аск false, т.е. значение выставил не скрипт а напрямую в обьект например руками if(connect && aircon){ aircon.set_temperature(data.state.val); } }); on({id: 'javascript.0.SamsungAir.AC_FUN_POWER', change: "ne", ack: false}, function (data){ if(connect && aircon){ var st = data.state.val; if(st === 'on' || st === 'true' || st === true || st === 'On' || st === 'ON'){ st = true; } else { st = false; } aircon.onoff(st); } }); //aircon.mode(type); // one of 'auto', 'cool', 'dry', 'wind', or 'heat' on({id: 'javascript.0.SamsungAir.AC_FUN_OPMODE', change: "ne", ack: false}, function (data){ if(connect && aircon){ var st = data.state.val; aircon.mode(st); } }); //aircon.set_convenient_mode(mode); // one of 'off', 'quiet', 'sleep', 'smart', 'softcool', 'turbomode', // 'windmode1', 'windmode2', 'windmode3' on({id: 'javascript.0.SamsungAir.AC_FUN_COMODE', change: "ne", ack: false}, function (data){ if(connect && aircon){ var st = data.state.val; aircon.set_convenient_mode(st); } }); on({id: 'javascript.0.SamsungAir.AC_FUN_SLEEP', change: "ne", ack: false}, function (data){ if(connect && aircon){ var st = data.state.val; aircon.sleep_mode(st); } }); } new API().on('discover', function(air) { // ищем кондей aircon = air; if (connecting_to[aircon.options.ip]) { return; } if (aircon.options.ip != '192.168.1.14') { return; } known_tokens[aircon.options.ip] = 'xxxxxxxxxxx'; // Do we need to find get a token? if (!known_tokens[aircon.options.ip]) { connecting_to[aircon.options.ip] = true; aircon.get_token(function(err, token) { if (!!err) return log('get_token error: ' + err.message); log('Token is ' + token); known_tokens[aircon.options.ip] = token; connecting_to[aircon.options.ip] = false; }).on('waiting', function() { log('Please power on the device within the next 30 seconds'); }); return; } connecting_to[aircon.options.ip] = true; login(aircon); // кондей нашли, подключаемсяк нему }).on('error', function(err) { // подписываемся на ошибки, если ошибка то пробуем переподключится к кондею через минуту log('discovery error: ' + err.message); connect = false; setTimeout(function() { login(aircon); }, 60000); }); //var connecting_to = {'192_168_1_10'}; function login(aircon){ // подключаемся (логинимся) к кондею и подписываемся на изменение состояний кондея aircon.login(known_tokens[aircon.options.ip], function() { //aircon.onoff(true); //aircon.set_temperature(24); //setTimeout(function() { aircon.onoff(false); }, 5*60 * 1000); //setTimeout(function() { aircon.set_temperature(25); }, 5000); }).on('stateChange', function(state) { // какое то значение в кондее поменялось, значение и функция в обьекте state log("State changed"); log('Ответ*** ' + JSON.stringify(state)); parse(state); //Парсим ответ от кондея //setState('javascript.0.SamsungAir.state', state); //setState('javascript.0.Traffic.style', jsonData.regions[i].style); //log('Уровень пробок = ' + jsonData.regions[i].level); }).on('loginSuccess', function () { log("loginSuccess"); // авторизовались на кондее connect = true; onstate(aircon); // подписываемся на обьекты ИОБ aircon.status(); // Получаем текущие значения всех состояний кондея }); } function parse(obj){ // парсим обьект (ответ от кондея), разбиваем на состояние и его значение for (key in obj) { setState('SamsungAir.' + key, {val:obj[key], ack: true}, function(a){ // пишем в обьект иоб значение состояния if(a && ~a.indexOf('not found')){ // если такого обьекта нету то создаем его, иначе игнорируем createState('SamsungAir.' + key, {name: key}, function(){ // создали обьект и сразу в него записали значение setState('SamsungAir.' + key, {val:obj[key], ack: true}); //устанавливаем обьект и аск TRUE, т..е подтвержденное значение пришедшее от скрипта (кондея) }); } }); } }