NEWS
Скрипт контроля отопления
-
Скрипт переделал из php скрипта
! var room = 'Heat_control';
! var lhid = getIdByName ( room + '.log_heat' );
! var hkid = getIdByName ( room + '.heat_key' );
! var tbid = getIdByName ( room + '.temp_base' );
! var toaid = getIdByName ( room + '.temp_out_avr_2hours' );
! var shid = getIdByName ( room + '.temp_in_stair_hall' );
! var shaid = getIdByName ( room + '.temp_in_stair_hall_avr_30min' );
! var sfaid = getIdByName ( room + '.temp_in_sf_avr_30min' );
! var cmid = getIdByName ( room + '.circ_mix' );
! var cmuid = getIdByName ( room + '.circ_mix_up' );
! var cmdid = getIdByName ( room + '.circ_mix_down' );
! var cfid = getIdByName ( room + '.circ_flap' );
! var cfpid = getIdByName ( room + '.circ_flap_pol' );
! var cpsid = getIdByName ( room + '.circ_pump_status' );
! var cpspid = getIdByName ( room + '.circ_pump_status_pol' );
! var cpid = getIdByName ( room + '.circ_pump' );
! var cppid = getIdByName ( room + '.circ_pump_pol' );
! var ctwrid = getIdByName ( room + '.circ_temp_water_real' );
! var ctwrtpid = getIdByName ( room + '.circ_temp_water_real_tp' );
! var ctwid = getIdByName ( room + '.circ_temp_water' );
! var cstid = getIdByName ( room + '.circ_status' );
! var ttid = getIdByName ( room + '.temp_trend' );
! var ptid = getIdByName ( room + '.past_temp' );
! var ctid = getIdByName ( room + '.cur_temp' );
! var ctsfid = getIdByName ( room + '.cur_temp_sf' );
! function getTimeAsString(d) {
! var date = d || new Date();
! return ('0' + (date.getMonth() + 1)).slice(-2) + '/' + ('0' + date.getDate()).slice(-2) + ' '+ ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
! }
! function start ( addTimestamp ) {
! var request = require ( 'request' );
! var temp_base = getState(tbid).val;
! var temp_out = getState(toaid).val;
! var temp_in = getState(shaid).val;
! var temp_in_sf = getState(sfaid).val;
! var cur_temp = getState(ctid).val;
! var cur_temp_sf = getState(ctsfid).val;
! var circ_title = 'Дом';
! var circ_titlee = 'Тпол';
! var circ_type = 'Смесительный';
! var circ_typee = 'Прямой';
! var circ_mix = getState(cmid).val;
! var circ_mix_up = getState(cmuid).val;
! var circ_mix_down = getState(cmdid).val;
! var circ_flap = getState(cfid).val;
! var circ_flap_pol = getState(cfpid).val;
! var circ_pump_status = getState(cpsid).val;
! var circ_pump_status_pol = getState(cpspid).val;
! var circ_pump = getState(cpid).val;
! var circ_pump_pol = getState(cppid).val;
! var circ_temp_water_real = getState(ctwrid).val;
! var circ_temp_water_real_tp = getState(ctwrtpid).val;
! var circ_temp_water = getState(ctwid).val;
! var temp_trend = getState(ttid).val;
! var circ_status = getState(cstid).val;
! var circ_mix_step = 1;
! var turn_off;
! var circ_flap_duration;
! var circ_flap_duration2;
! var temp_corr;
! var circ_hyst = 0.15;
! var past_temp = getState(ptid).val;
! var circ_flap_x;
! var lines = getState ( 'javascript.2.Heat_log' ).val;
! lines = lines.split ('
');
! // Смотрим температуру на улице для расчета температуры подачи котла
! request ( 'http://192.168.1.11/avr_temp_out.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( toaid, body );
! }
! });
! var heat_key = getState ( hkid ).val;
! if ( heat_key <= 0 )
! lines.push ( getTimeAsString() + ' ' + 'Автоматическое управление отоплением отключено!' );
! // Обрабатываем контуры отопления
! request ('http://192.168.1.11/cur_temp.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ctid, body );
! }
! });
! request ('http://192.168.1.11/cur_temp_sf.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ctsfid, body );
! }
! });
! request ( 'http://192.168.1.11/past_temp.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ptid, body );
! }
! });
! // Считываем информацию от датчика в помещении
! // Текущая температура в помещении и температурный тренд
! request ('http://192.168.1.11/trend.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ttid, body );
! }
! });
! // Средняя температура в помещении за 30 минут
! request ( 'http://192.168.1.11/avr_temp_in_stair_hall.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( shaid, body );
! }
! });
! request ( 'http://192.168.1.11/avr_temp_in_sf.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( sfaid, body );
! }
! });
! // Средняя температура подачи за 5 минут
! request ( 'http://192.168.1.11/avr_temp_main_in.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ctwrid, body );
! }
! });
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Фактическая температура подачи: ' + circ_temp_water_real );
! request ( 'http://192.168.1.11/avr_temp_tp_in.php', function ( error, response, body ) {
! if ( !error && response.statusCode == 200 ) {
! setState ( ctwrtpid, body );
! }
! });
! // Отладка. Выводим информацию по температурам
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp );
! // РАССЧЕТ ТЕМПЕРАТУРЫ ПОДАЧИ ТЕПЛОНОСИТЕЛЯ
! // Если отопление отключено
! if ( heat_key <= 0 )
! {
! if ( circ_pump_status == 1 && circ_pump_status_pol == 1 )
! {
! if ( circ_type == 'Смесительный' )
! {
! setState ( cmuid, 0 );
! setState ( cmdid, 1 );
! setTimeout ( function () {
! setState ( cmdid, 0 );
! }, 140000 );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Полностью закрываем привод' );
! setState ( cfid, 0 );
! }
! setState ( cpsid, 0 );
! setState ( cpid, 0 );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Выключаем насос' );
! setState ( ctwid, 32 );
! if ( circ_typee == "Прямой" )
! {
! setState ( cmid, 0 );
! setState ( cfpid, 0 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Закрываем привод' );
! setState ( cpspid, 0 );
! setState ( cppid, 0 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Выключаем насос' );
! }
! }
! }
! // Если температура внутри выше базовой, снижаем расчетную температуру подачи
! else if ( temp_in > temp_base + circ_hyst && cur_temp > temp_base + circ_hyst )
! {
! if ( circ_type == 'Отключен' )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Контур отключен. Снижение температуры невозможно.' );
! else
! {
! // Изменять расчетную температуру подачи имеет смысл только если насос включен
! if ( circ_pump_status == 1 )
! {
! // Проверяем, не слишком ли температура подачи отличается от расчетной
! if ( circ_temp_water_real > circ_temp_water + 1 )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Фактическая температура подачи значительно отличается от расчетной. Ждем, когда t достигнет нормы.' );
! else if ( temp_trend == '-' )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Температура в помещении снижается (' + past_temp + ' -> ' + cur_temp + '). Наблюдаем' );
! else
! {
! temp_corr = 0.1;
! circ_temp_water = Math.round (( circ_temp_water - temp_corr ) * 10 ) / 10;
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Понижаем расчетную температуру подачи на ' + temp_corr + ': ' + circ_temp_water );
! // Записываем значение расчетной температуры теплоносителя в БД
! setState ( ctwid, circ_temp_water );
! setState ( cstid, '-' );
! }
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Насос отключен' );
! }
! }
! // Если температура внутри ниже базовой, увеличиваем расчетную температуру подачи
! else if ( temp_in < temp_base - circ_hyst && cur_temp < temp_base - circ_hyst )
! {
! if ( circ_type == 'Отключен' )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Контур отключен. Повышение температуры невозможно.' );
! else
! {
! // Если насос выключен, включаем его
! if ( circ_pump_status <= 0 )
! {
! setState( cpsid, 1 );
! setState( cpid, 1 );
! // Если привод на момент включения насоса в закрытом положении, открываем его.
! if ( circ_flap <= 0 )
! {
! if ( circ_title == 'Дом' )
! circ_flap = 35;
! setState( cfid, circ_flap );
! circ_temp_water = Math.round (( 38 - temp_out / 5 ) * 10 ) /10;
! setState( ctwid, circ_temp_water );
! setState( cmdid, 0 );
! setState( cmuid, 1 );
! setTimeout ( function () {
! setState ( cmuid, 0 );
! }, circ_flap*1000 );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Повышаем x ' + circ_flap + ' с. Положение привода ' + circ_flap + ' с.' );
! }
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Включаем насос' );
! }
! // Проверяем, не слишком ли температура подачи отличается от расчетной
! if ( circ_temp_water_real < circ_temp_water - 1 )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Фактическая температура подачи значительно отличается от расчетной. Ждем, когда t достигнет нормы.' );
! else if ( temp_trend == '+' )
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Температура в помещении повышается (' + past_temp + ' -> ' + cur_temp + '). Наблюдаем' );
! else
! {
! temp_corr = 0.1;
! circ_temp_water = Math.round(( circ_temp_water + temp_corr ) * 10 ) / 10;
! // Записываем значение расчетной температуры теплоносителя в БД
! setState( ctwid, circ_temp_water );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Повышаем расчетную температуру подачи на ' + temp_corr + ': ' + circ_temp_water);
! setState ( cstid, '+' );
! }
! }
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Температура в помещении соответствует норме' );
! // УПРАВЛЕНИЕ ПРИВОДАМИ
! // Если температура подачи в течение 5 минут больше расчетной температуры и нет повышения расч. температуры, убавляем
! if ( circ_type == 'Смесительный' && circ_pump_status == 1 && heat_key == 1 )
! {
! if ( circ_temp_water < 30 )
! //setState ( toffid, 1 );
! turn_off = 1;
! if ( circ_temp_water_real > circ_temp_water + 0.5 || turn_off == 1 )
! {
! if ( circ_status != '+' || circ_temp_water_real > circ_temp_water + 1 || turn_off == 1 )
! {
! if ( turn_off != 1 )
! {
! if ( circ_temp_water_real > circ_temp_water + 5 )
! circ_flap_duration = Math.round( circ_mix_step * ( circ_flap - 35 ) * 10 ) / 10;
! else if ( circ_temp_water_real > circ_temp_water + 3 )
! circ_flap_duration = circ_mix_step * 2;
! else
! circ_flap_duration = circ_mix_step;
! circ_flap_duration2 = circ_flap_duration * 1000;
! setState ( cmuid, 0 );
! setState ( cmdid, 1 );
! setTimeout ( function () {
! setState ( cmdid, 0 );
! }, circ_flap_duration2 );
! circ_flap = circ_flap - circ_flap_duration;
! setState ( cfid, circ_flap );
! }
! // Привод в полностью закрытом положении. Отключаем насос
! if ( circ_flap <= 0 || ( circ_title == "Дом" && circ_flap <= 20 ) || turn_off == 1 )
! {
! setState ( cfid, 0 );
! setState ( cpsid, 0 );
! setState ( cpid, 0 );
! setState ( cmuid, 0 );
! setState ( cmdid, 1 );
! setTimeout ( function () {
! setState ( cmdid, 0 );
! }, 140000 );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Полностью закрываем привод' );
! if ( turn_off == 1 )
! {
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Расчетная температура теплоносителя менее 30 градусов' );
! turn_off = 0;
! }
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Закрываем привод. Отключаем насос' );
! setState ( ctwid, 32 );
! }
! else
! {
! setState ( cfid, circ_flap );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Понижаем x ' + circ_flap_duration + ' c. Положение привода ' + circ_flap + ' с' );
! }
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Пропускаем цикл уменьшения темп. подачи, так как требуется увеличить температуру в помещении.' );
! }
! // Если температура подачи в течение 5 минут меньше расчетной температуры и нет снижения расч. температуры, прибавляем
! else if ( circ_temp_water_real < circ_temp_water - 0.5 )
! {
! if ( circ_status != '-' || circ_temp_water_real < circ_temp_water - 1 )
! {
! if ( circ_temp_water_real < circ_temp_water - 3 )
! circ_flap_duration = circ_mix_step * 2;
! else
! circ_flap_duration = circ_mix_step;
! circ_flap_duration2 = circ_flap_duration * 1000;
! setState ( cmdid, 0 );
! setState ( cmuid, 1 );
! setTimeout ( function () {
! setState ( cmuid, 0 );
! }, circ_flap_duration2 );
! circ_flap = circ_flap + circ_flap_duration;
! setState ( cfid, circ_flap );
! if ( circ_flap > 140 )
! circ_flap = 140;
! setState ( cfid, circ_flap );
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Повышаем x ' + circ_flap_duration + ' c. Положение привода ' + circ_flap + ' с' );
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Пропускаем цикл увеличение темп. подачи, так как требуется снизить температуру в помещении.' );
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_title + ': Изменение положения привода не требуется' );
! }
! if ( circ_titlee == 'Тпол' )
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Фактическая температура подачи: ' + circ_temp_water_real_tp );
! // Отладка. Выводим информацию по температурам
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Расчет: ' + temp_base + ', Сред: ' + temp_in_sf + ', Тек: ' + cur_temp_sf );
! // Определяем состояние основного контура
! if ( circ_pump_status == 1 )
! {
! // Если температура внутри выше базовой, снижаем расчетную температуру подачи
! if ( temp_in_sf > temp_base + circ_hyst && cur_temp_sf > temp_base + circ_hyst )
! {
! if ( circ_typee == 'Отключен' )
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Контур отключен. Снижение температуры невозможно.' );
! else if ( circ_typee == 'Прямой' )
! {
! if ( circ_flap_pol == 0 && circ_pump_status_pol == 1 )
! {
! setState ( cpspid, 0 );
! setState ( cppid, 0 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Выключаем насос' );
! }
! else if ( circ_pump_status_pol == 1 && circ_flap_pol == 1 )
! {
! setState ( cmid, 0 );
! setState ( cfpid, 0 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Закрываем привод' );
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Привод и насос уже выключены' );
! }
! }
! // Если температура внутри ниже базовой, увеличиваем расчетную температуру подачи
! else if ( temp_in_sf < temp_base - circ_hyst && cur_temp_sf < temp_base - circ_hyst )
! {
! if ( circ_typee == 'Отключен' )
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Контур отключен. Повышение температуры невозможно.' );
! else if ( circ_typee == 'Прямой' )
! {
! if ( circ_pump_status_pol <= 0 )
! {
! setState ( cpspid, 1 );
! setState ( cppid, 1 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Включаем насос' );
! setState ( cmid, 1 );
! setState ( cfpid, 1 );
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Открываем привод' );
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Насос и привод уже включены' );
! }
! }
! else
! lines.push ( getTimeAsString() + ' ' + circ_titlee + ': Температура в помещении соответствует норме' );
! }
! if ( lines.length > 10 ) lines.splice ( 0,1 ); // 10 количество строк
! setState ( lhid, lines.join('
'), true );
! }
! setInterval ( function () {
! start ();
! },300000 );Проблемы:
1. В php скрипт работает с задержкой на выполнения функции
08/04 21:32:49 Дом: Фактическая температура подачи: 17.57 08/04 21:32:49 Дом: Расчет: 21, Сред: 20.55, Тек: 20.56 08/04 21:33:26 Дом: Повышаем x 36.04 с. Положение привода 36.04 с. 08/04 21:33:26 Дом: Включаем насос 08/04 21:33:26 Дом: Фактическая температура подачи значительно отличается от расчетной. Ждем, когда t достигнет нормы. 08/04 21:33:26 T пол: Фактическая температура подачи: 20.03 08/04 21:33:26 T пол: Расчет: 21, Сред: 20.62, Тек: 20.63 08/04 21:33:26 T пол: Включаем насос 08/04 21:33:26 T пол: Открываем привод
в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница.
21:37:52.418 [info] javascript.1 script.js.Heat_Demo: ------------START------------ 21:37:52.419 [info] javascript.1 script.js.Heat_Demo: Дом: Фактическая температура подачи: 17.57 21:37:52.419 [info] javascript.1 script.js.Heat_Demo: Дом: Расчет: 21.0, Сред: 20.55, Тек: 20.56 21:37:52.420 [info] javascript.1 script.js.Heat_Demo: Дом: Повышаем x 35 с. Положение привода 35 с. 21:37:52.420 [info] javascript.1 script.js.Heat_Demo: Дом: Включаем насос 21:37:52.420 [info] javascript.1 script.js.Heat_Demo: Дом: Фактическая температура подачи значительно отличается от расчетной. Ждем, когда t достигнет нормы. 21:37:52.420 [info] javascript.1 script.js.Heat_Demo: Т пол: Фактическая температура подачи: 20.03 21:37:52.420 [info] javascript.1 script.js.Heat_Demo: Т пол: Расчет: 21.0, Сред: 20.62, Тек: 20.63 21:37:52.506 [info] javascript.1 script.js.Heat_Demo: Т пол: Включаем насос 21:37:52.506 [info] javascript.1 script.js.Heat_Demo: Т пол: Открываем привод 21:37:52.421 [info] javascript.1 script.js.Heat_Demo: -------------STOP--------------
2. Сделал пока костыль на PHP чтобы дёргать из базы средние значения температур за определённый период времени. Таких request штук 10 в скрипте все прописаны в начале скрипта, так вот в временном log('Текущая ' + body), log('Средняя ' + body) инфа актуальная но она как бы запаздывает и лог log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp) отображает прошлый request из переменных temp_in и cur_temp. Что можно сделать?
Буду рад любым комментариям и помощи в доработке скрипта
-
Чуток подправил скрипт, проблемы остались прежними. Народ 45 просмотров и не одного комментария?
В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
-
В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
filename="screencapture-192-168-1-11-8081-1460455685460.png" index="0">~~ `
попробуй замени в IFах == на === и != на !== -
в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница.
Используй callback
и -
В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
filename="screencapture-192-168-1-11-8081-1460455685460.png" index="0">~~попробуй замени в IFах == на === и != на !==
Попробовал, результат тот же. -
в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница.
Используй callback
и `
Если тебя не затруднит, хоть пару строчек на моем скрипте :oops: -
Подключение работает, средние значение всего столбца считает, каждый id тоже считает. Есть столбец ts с какими то цифрами даты и времени, как его расшифровать ? в других базах у меня форма 2016-04-14 21:56:32
createState('test','',{type:'number',role:'value',read:true}); createState('test_1','',{type:'number',role:'value',read:true}); createState('test_2','',{type:'number',role:'value',read:true}); createState('test_3','',{type:'number',role:'value',read:true}); createState('test_4','',{type:'number',role:'value',read:true}); var mysql = require('mysql'); var connection = mysql.createConnection({ host: 'localhost', user: 'root', password: '*********', database: 'iobroker', socketPath: '/var/run/mysqld/mysqld.sock' }); //создаем подключение к базе connection.connect(function(err) { if (err) { log('error connecting: ' + err.stack); return; } log('connected as id ' + connection.threadId); }); //function start () { schedule("* * * * *", function () { connection.query('SELECT AVG(val) AS id FROM ts_number', function(err, res_id, fields) { if (err) throw err; log('AVR: ' + (res_id[0].id).toFixed(2)); setState('test', (res_id[0].id).toFixed(2)); }); connection.query('SELECT AVG(val) AS id FROM ts_number WHERE id=1', function(err, res, fields) { if (err) throw err; log('Test_1: ' + (res[0].id).toFixed(2)); setState('test_1', (res[0].id).toFixed(2)); }); connection.query('SELECT AVG(val) AS id FROM ts_number WHERE id=2', function(err, res, fields) { if (err) throw err; log('Test_2: ' + (res[0].id).toFixed(2)); setState('test_2', (res[0].id).toFixed(2)); }); connection.query('SELECT AVG(val) AS id FROM ts_number WHERE id=3', function(err, res, fields) { if (err) throw err; log('Test_3: ' + (res[0].id).toFixed(2)); setState('test_3', (res[0].id).toFixed(2)); }); connection.query('SELECT AVG(val) AS id FROM ts_number WHERE id=4', function(err, res, fields) { if (err) throw err; log('Test_4: ' + (res[0].id).toFixed(2)); setState('test_4', (res[0].id).toFixed(2)); }); log('AVR: ' + getState('javascript.2.test').val + '; ' + 'Test_1: ' + getState('javascript.2.test_1').val + '; ' + 'Test_2: ' + getState('javascript.2.test_2').val + '; ' + 'Test_3: ' + getState('javascript.2.test_3').val + '; ' + 'Test_4: ' + getState('javascript.2.test_4').val); }); //} //setInterval ( function () { // start (); //},60000 );
-
Haus , из описания скриптов https://github.com/iobroker/ioBroker.ja … /README.md
! Parameters:
! date: number of seconds from state.ts or state.lc (Number seconds from 1970.01.01 00:00:00) or javascript new Date() object or number of milliseconds from (new Date().getTime())
! format: Can be "null", so the system time format will be used, elsewise
! YYYY, JJJJ, ГГГГ - full year, e.g 2015
! YY, JJ, ГГ - short year, e.g 15
! MM, ММ(cyrillic) - full month, e.g. 01
! M, М(cyrillic) - short month, e.g. 1
! DD, TT, ДД - full day, e.g. 02
! D, T, Д - short day, e.g. 2
! hh, SS, чч - full hours, e.g. 03
! h, S, ч - short hours, e.g. 3
! mm, мм(cyrillic) - full minutes, e.g. 04
! m, м(cyrillic) - short minutes, e.g. 4
! ss, сс(cyrillic) - full seconds, e.g. 05
! s, с(cyrillic) - short seconds, e.g. 5
! isSeconds: If date seconds from state.ts ot state.lc or milliseconds from (new Date().getTime())
! Example
! formatDate(new Date(), "YYYY-MM-DD") => Date "2015-02-24" formatDate(new Date(), "hh:mm") => Hours and minutes "17:41" formatDate(state.ts) => "24.02.2015" formatDate(state.ts, "JJJJ.MM.TT SS:mm:ss) => "2015.02.15 17:41:98"т.е. тебе надо использовать команду formatDate
-
в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница.
Используй callback
иЕсли тебя не затруднит, хоть пару строчек на моем скрипте :oops:
ну например самый простой вариант:// Средняя температура в помещении за 30 минут request ( 'http://192.168.1.11/avr_temp_in_stair_hall.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( shaid, body ); } }); request ( 'http://192.168.1.11/avr_temp_in_sf.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( sfaid, body ); } });
// Средняя температура в помещении за 30 минут request ( 'http://192.168.1.11/avr_temp_in_stair_hall.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( shaid, body ); request ( 'http://192.168.1.11/avr_temp_in_sf.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( sfaid, body ); } }); } });
второй request выполнится только после первого.
PS ПРЯЧЬТЕ ДЛИННЫЙ КОД ПОД СПОЙЛЕР
-
Используй callback
и
Если тебя не затруднит, хоть пару строчек на моем скрипте :oops: `
ну например самый простой вариант:второй request выполнится только после первого.
PS ПРЯЧЬТЕ ДЛИННЫЙ КОД ПОД СПОЙЛЕР `
Этот вариант я уже побывал. Проблема в том что из за долгого выполнения request не успевает обновить данные переменных и дальше идущий код использует старые данные из переменных.
// Средняя температура в помещении за 30 минут request ( 'http://192.168.1.11/cur_temp.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( ctid, body ); log(body); request ( 'http://192.168.1.11/avr_temp_in_stair_hall.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( shaid, body ); log(body); } }); } }); log('Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp );
то есть первым он выводит log('Расчет: ' + tem…. а потом меняются данные и появляется log(body); и log(body);
20:25:40.405 [info] javascript.1 script.js.Heat_Demo: Расчет: 20.00, Сред: 19.80, Тек: 19.63 20:25:40.436 [info] javascript.1 script.js.Heat_Demo: 19.63 20:25:40.534 [info] javascript.1 script.js.Heat_Demo: 19.80 20:26:10.432 [info] javascript.1 script.js.Heat_Demo: Расчет: 20.00, Сред: 19.80, Тек: 19.63 Вот тут Сред: 19.80 20:26:10.469 [info] javascript.1 script.js.Heat_Demo: 19.63 20:26:10.545 [info] javascript.1 script.js.Heat_Demo: 19.73 Вот тут Сред: 19.73 20:26:40.440 [info] javascript.1 script.js.Heat_Demo: Расчет: 20.00, Сред: 19.73, Тек: 19.63 20:26:40.488 [info] javascript.1 script.js.Heat_Demo: 19.63 20:26:40.574 [info] javascript.1 script.js.Heat_Demo: 19.73
-
Этот вариант я уже побывал. Проблема в том что из за долгого выполнения request не успевает обновить данные переменных и дальше идущий код использует старые данные из переменных. `
Ну вот так же тогда// Средняя температура в помещении за 30 минут request ( 'http://192.168.1.11/cur_temp.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( ctid, body ); log(body); request ( 'http://192.168.1.11/avr_temp_in_stair_hall.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { setState ( shaid, body ); log(body); } log('Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp ); }); } });
Можно обернуть остальной код в функцию и вызывать ее после последнего реквеста.