Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Трех-кратное выполнение кода скрипта

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Трех-кратное выполнение кода скрипта

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
8 Beiträge 3 Kommentatoren 2.5k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • E Offline
    E Offline
    evgeny_nd
    schrieb am zuletzt editiert von
    #1

    Добрый день.

    Есть код:

    ! ````
    on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
    if (getState("megad.3.p9_G0_Boiler_Control2").val === false) { // если котел запущен
    setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0);
    time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
    var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
    setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
    log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
    sendTo("telegram.0", "send", {
    text: 'ТТ Котел запущен в '+ time_start
    })
    }
    else { // иначе если котел остановлен
    setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
    time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
    var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
    setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop);
    log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
    sendTo("telegram.0", "send", {
    text: 'ТТ Котел остановлен в '+ time_stop
    })
    }
    });

    
    Он рабочий, НО не понимаю почему драйвер Telegram присылает по три сообщения о включении или выключении котла.
    
    В остальных скриптах, сообщения приходят по одному, без повторения. А здесь…
    
    При этом не важно изменяется статус переменной megad.3.p9_G0_Boiler_Control2 (вручную нажатием кнопки в VIS или из скрипта по условию).
    
    Подскажите в какую сторону посмотреть?
    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      А так? Два срабатывания я могу объяснить. А вот три

      on({id: "megad.3.p9_G0_Boiler_Control2"/*G0_Boiler_Control2 - Размыкатель ТТ котла*/, change: 'any', ack: false}, function (obj) {    
          if (obj.state.val === false) { // если котел запущен
              setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0);
              time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
              var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
              setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
              log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
              sendTo("telegram.0", "send", {
                  text: 'ТТ Котел запущен в  '+ time_start
              })
          }
          else {                                                          // иначе если котел остановлен
              setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
              time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
              var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
              setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop);
              log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
              sendTo("telegram.0", "send", {
                  text: 'ТТ Котел остановлен в  '+ time_stop
              }) 
          }
      });
      
      
      1 Antwort Letzte Antwort
      0
      • I Offline
        I Offline
        instalator
        schrieb am zuletzt editiert von
        #3

        @evgeny_nd:

        Добрый день.

        Есть код:

        ! ````
        on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
        if (getState("megad.3.p9_G0_Boiler_Control2").val === false) { // если котел запущен
        setState("den.0.Отопление.ТТ_Котел.Время_до_запуска",0);
        time_start_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
        var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
        setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
        log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
        sendTo("telegram.0", "send", {
        text: 'ТТ Котел запущен в '+ time_start
        })
        }
        else { // иначе если котел остановлен
        setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
        time_stop_stamp = new Date(getState("megad.3.p9_G0_Boiler_Control2").ts);
        var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
        setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова",time_stop);
        log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
        sendTo("telegram.0", "send", {
        text: 'ТТ Котел остановлен в '+ time_stop
        })
        }
        });

        
        Он рабочий, НО не понимаю почему драйвер Telegram присылает по три сообщения о включении или выключении котла.
        
        В остальных скриптах, сообщения приходят по одному, без повторения. А здесь…
        
        При этом не важно изменяется статус переменной megad.3.p9_G0_Boiler_Control2 (вручную нажатием кнопки в VIS или из скрипта по условию).
        
        Подскажите в какую сторону посмотреть? `  
        

        На будущее оформляйте код на форуме в тег CODE и под спойлер.

        Вот так что выдает в логе?

        ! ````
        on({id: "megad.3.p9_G0_Boiler_Control2"/G0_Boiler_Control2 - Размыкатель ТТ котла/, change: 'any'}, function (obj) {
        log ('megad.3.p9_G0_Boiler_Control2 = ' + obj.state.val);
        if (obj.state.val === false) { // если котел запущен
        setState("den.0.Отопление.ТТ_Котел.Время_до_запуска", 0);
        var time_start_stamp = new Date(obj.state.ts);
        var time_start = ('0' + time_start_stamp.getHours()).slice(-2) + ':' + ('0' + time_start_stamp.getMinutes()).slice(-2);
        setState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска",time_start);
        log ('ТТ Котел запущен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_запуска").val);
        sendTo("telegram.0", "send", {
        text: 'ТТ Котел запущен в '+ time_start
        });
        }
        else { // иначе если котел остановлен
        setState("den.0.Отопление.ТТ_Котел.Время_до_останова",0);
        var time_stop_stamp = new Date(obj.state.ts);
        var time_stop = ('0' + time_stop_stamp.getHours()).slice(-2) + ':' + ('0' + time_stop_stamp.getMinutes()).slice(-2);
        setState("den.0.Отопление.ТТ_Котел.Время_последнего_останова", time_stop);
        log ('ТТ Котел остановлен в ' + getState("den.0.Отопление.ТТ_Котел.Время_последнего_останова").val);
        sendTo("telegram.0", "send", {
        text: 'ТТ Котел остановлен в '+ time_stop
        });
        }
        });

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

        http://blog.instalator.ru/

        1 Antwort Letzte Antwort
        0
        • E Offline
          E Offline
          evgeny_nd
          schrieb am zuletzt editiert von
          #4

          @Bluefox:

          А так? Два срабатывания я могу объяснить. А вот три

          on({id: "megad.3.p9_G0_Boiler_Control2"/*G0_Boiler_Control2 - Размыкатель ТТ котла*/, change: 'any', ack: false}, function (obj) {    
          
          ```` `  
          

          Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).

          To Instalator, в части написания сообщений с кодом, учту.

          1 Antwort Letzte Antwort
          0
          • I Offline
            I Offline
            instalator
            schrieb am zuletzt editiert von
            #5

            @evgeny_nd:

            Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).

            To Instalator, в части написания сообщений с кодом, учту. ` аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема

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

            http://blog.instalator.ru/

            1 Antwort Letzte Antwort
            0
            • E Offline
              E Offline
              evgeny_nd
              schrieb am zuletzt editiert von
              #6

              @instalator:

              @evgeny_nd:

              Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).

              To Instalator, в части написания сообщений с кодом, учту. аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема

              Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?

              А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка?

              1 Antwort Letzte Antwort
              0
              • I Offline
                I Offline
                instalator
                schrieb am zuletzt editiert von
                #7

                @evgeny_nd:

                @instalator:

                @evgeny_nd:

                Bluefox, спасибо, добавление ", ack: false" помогло. Сообщение приходят по одному. А можете объяснить назначение этого флага, либо дать ссылку где вообще подробнее почитать описание используемого языка. Потому что сейчас весь процесс обучения происходит по аналогии с увиденным, а хотелось бы так чтобы понимать основы и все возможности :).

                To Instalator, в части написания сообщений с кодом, учту. аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема

                Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?

                А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка? ` когда ты меняешь объект руками то аск будет фолс, а если в этот объект прилетит статус из драйвера то аск будет тру.

                Мой. По подписке ты уже получаешь все данные в объекте obj. И не нужно получать их другими функциями например getState

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

                http://blog.instalator.ru/

                1 Antwort Letzte Antwort
                0
                • E Offline
                  E Offline
                  evgeny_nd
                  schrieb am zuletzt editiert von
                  #8

                  @instalator:

                  @evgeny_nd:

                  @instalator:

                  аск это подтверждение. Если проверишь и проанализируешь оба предложенных варианта то скорее всего поймёшь в чём проблема `

                  Подтверждение в смысле дополнительное условие, т.е. подтверждение того что подписка срабатывает только тогда когда ее изменение переходят в значение которое указано после "ack"?

                  А второй вопрос, как правильнее должен быть устроен код? Мой или ваш, в котором проверяется не сама переменная внутри подписки, а статус ответа, который отдает подписка? ` когда ты меняешь объект руками то аск будет фолс, а если в этот объект прилетит статус из драйвера то аск будет тру.

                  Мой. По подписке ты уже получаешь все данные в объекте obj. И не нужно получать их другими функциями например getState `

                  Теперь все понял. Спасибо.

                  Кстати сейчас с вариантом Bluefox, сообщение приходят по одному разу. И в случае ручного включения, и в случае изменения по условию из другого скрипта.

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  412

                  Online

                  32.4k

                  Benutzer

                  81.5k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe