Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Русский
    3. ioBroker
    4. Скрипты
    5. ioBroker скрипты
    6. Скрипт контроля отопления

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Скрипт контроля отопления

    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      Haus last edited by

      Скрипт переделал из 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. Что можно сделать?

      Буду рад любым комментариям и помощи в доработке скрипта

      1 Reply Last reply Reply Quote 0
      • H
        Haus last edited by

        Чуток подправил скрипт, проблемы остались прежними. Народ 45 просмотров и не одного комментария? 😢

        В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
        443_screencapture-192-168-1-11-8081-1460455685460.png

        1 Reply Last reply Reply Quote 0
        • I
          instalator last edited by

          @Haus:

          В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
          filename="screencapture-192-168-1-11-8081-1460455685460.png" index="0">~~ `
          попробуй замени в IFах == на === и != на !==

          1 Reply Last reply Reply Quote 0
          • I
            instalator last edited by

            @Haus:

            в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница. Используй callbackи

            1 Reply Last reply Reply Quote 0
            • H
              Haus last edited by

              @instalator:

              @Haus:

              В скрипте появился треугольник с надписью "Too many errors 81% scanhed" в чем ошибки, сам скрипт работает.
              filename="screencapture-192-168-1-11-8081-1460455685460.png" index="0">~~ попробуй замени в IFах == на === и != на !==
              Попробовал, результат тот же.

              1 Reply Last reply Reply Quote 0
              • H
                Haus last edited by

                @instalator:

                @Haus:

                в javascript читает сразу весь скрипт и выдаёт лог по скрипту, но в скрипте по худу есть всякие if с условиями и сравнениями и могут быть путаница. Используй callbackи `
                Если тебя не затруднит, хоть пару строчек на моем скрипте :oops:

                1 Reply Last reply Reply Quote 0
                • H
                  Haus last edited by

                  Подключение работает, средние значение всего столбца считает, каждый 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 );
                  
                  1 Reply Last reply Reply Quote 0
                  • H
                    Haba last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • I
                      instalator last edited by

                      @Haus:

                      @instalator:

                      @Haus:

                      в 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 ПРЯЧЬТЕ ДЛИННЫЙ КОД ПОД СПОЙЛЕР

                      1 Reply Last reply Reply Quote 0
                      • H
                        Haus last edited by

                        @instalator:

                        @Haus:

                        @instalator:

                        Используй 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
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • I
                          instalator last edited by

                          @Haus:

                          Этот вариант я уже побывал. Проблема в том что из за долгого выполнения 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 );
                             	    });
                                  }
                              });
                          
                          

                          Можно обернуть остальной код в функцию и вызывать ее после последнего реквеста.

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          869
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          3
                          11
                          4226
                          Loading More Posts
                          • Oldest to Newest
                          • Newest to Oldest
                          • Most Votes
                          Reply
                          • Reply as topic
                          Log in to reply
                          Community
                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                          The ioBroker Community 2014-2023
                          logo