Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Скрипт контроля отопления

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    201

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

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

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

Scheduled Pinned Locked Moved ioBroker скрипты
11 Posts 3 Posters 4.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H Offline
    H Offline
    Haus
    wrote on last edited by
    #1

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

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

    js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

    admin: 3.6.0

    javascript: 4.1.10

    web: 2.4.1 vis: 1.1.10

    cloud: 2.6.2

    Server: DELL FX170 / linux: Debian 9.5 Stretch

    Adapter: MegaD-2561, Mega-ES…

    1 Reply Last reply
    0
    • H Offline
      H Offline
      Haus
      wrote on last edited by
      #2

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

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

      js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

      admin: 3.6.0

      javascript: 4.1.10

      web: 2.4.1 vis: 1.1.10

      cloud: 2.6.2

      Server: DELL FX170 / linux: Debian 9.5 Stretch

      Adapter: MegaD-2561, Mega-ES…

      1 Reply Last reply
      0
      • I Offline
        I Offline
        instalator
        wrote on last edited by
        #3

        @Haus:

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

        Высокий уровень Децибел вреден для здоровья!

        http://blog.instalator.ru/

        1 Reply Last reply
        0
        • I Offline
          I Offline
          instalator
          wrote on last edited by
          #4

          @Haus:

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

          Высокий уровень Децибел вреден для здоровья!

          http://blog.instalator.ru/

          1 Reply Last reply
          0
          • H Offline
            H Offline
            Haus
            wrote on last edited by
            #5

            @instalator:

            @Haus:

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

            js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

            admin: 3.6.0

            javascript: 4.1.10

            web: 2.4.1 vis: 1.1.10

            cloud: 2.6.2

            Server: DELL FX170 / linux: Debian 9.5 Stretch

            Adapter: MegaD-2561, Mega-ES…

            1 Reply Last reply
            0
            • H Offline
              H Offline
              Haus
              wrote on last edited by
              #6

              @instalator:

              @Haus:

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

              js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

              admin: 3.6.0

              javascript: 4.1.10

              web: 2.4.1 vis: 1.1.10

              cloud: 2.6.2

              Server: DELL FX170 / linux: Debian 9.5 Stretch

              Adapter: MegaD-2561, Mega-ES…

              1 Reply Last reply
              0
              • H Offline
                H Offline
                Haus
                wrote on last edited by
                #7

                Подключение работает, средние значение всего столбца считает, каждый 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 );
                

                js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

                admin: 3.6.0

                javascript: 4.1.10

                web: 2.4.1 vis: 1.1.10

                cloud: 2.6.2

                Server: DELL FX170 / linux: Debian 9.5 Stretch

                Adapter: MegaD-2561, Mega-ES…

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  Haba
                  wrote on last edited by
                  #8

                  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
                  0
                  • I Offline
                    I Offline
                    instalator
                    wrote on last edited by
                    #9

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

                    Высокий уровень Децибел вреден для здоровья!

                    http://blog.instalator.ru/

                    1 Reply Last reply
                    0
                    • H Offline
                      H Offline
                      Haus
                      wrote on last edited by
                      #10

                      @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
                      
                      

                      js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

                      admin: 3.6.0

                      javascript: 4.1.10

                      web: 2.4.1 vis: 1.1.10

                      cloud: 2.6.2

                      Server: DELL FX170 / linux: Debian 9.5 Stretch

                      Adapter: MegaD-2561, Mega-ES…

                      1 Reply Last reply
                      0
                      • I Offline
                        I Offline
                        instalator
                        wrote on last edited by
                        #11

                        @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 );
                           	    });
                                }
                            });
                        
                        

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

                        Высокий уровень Децибел вреден для здоровья!

                        http://blog.instalator.ru/

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        131

                        Online

                        32.4k

                        Users

                        81.3k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe