Как опубликовать одно и то же значение в темах с разными именами с разными задержками для каждого - PullRequest
0 голосов
/ 10 июня 2019

Я ищу способ опубликовать одно и то же значение (число взято из html-ввода) в нескольких темах с разными именами.

Для каждой темы это значение должно быть отложено, поэтому я использую window.setTimeout ()

Число тем в разных темах отличается от времени задержки, которое находится на вкладке ArrayDel [] (одна задержка для одной темы)

Так, например, я хочу опубликовать число 421 для темы ESP0 / ledstate с задержкой 0, затем те же 421 для темы ESP1 / ledstate с задержкой 500 мс, затем 421 для ESP2 / ledstate с задержкой 1000 мс

Конечно, если бы у меня было только 3 темы для публикации с 3 разными задержками, это было бы просто, но у меня могло бы быть 100 тем для этого проекта.

Проблема в том, что я не могу получить значение как отложенное, так и опубликованное по разным темам: я не могу опубликовать значение в нужной теме с соответствующей задержкой (все управляется циклом for)

Итак, как уже было сказано, я использую цикл for.

Кажется, проблема связана с client.send (message), потому что все остальное без проблем принимает цикл for.

var xTopic = 3; // 100 …


function joueursCascade(){

     for (var i = 0; i <= xTopic; i++) //
     {  
          doSetTimeout(i);
     }
}


function doSetTimeout(i)
{

    // - m  : payload from html input
       message = new Paho.MQTT.Message(document.getElementById('btn3').value);

    // -t : several topics from several html input (input id=esp1, id=esp2…)
    // .value is the topic : ESP0/ledstate, ESP1/ledstate etc..
    message.destinationName = document.getElementById('esp'+i).value;

    //delays Array
    var del = tabDel[i];

    //PUBLISH message ISSUE : I tryed
    //1)this publish same message on all topics but with no delays, ok
    mon_client.send(message);

    //2) this publish message for the higher topic in the loop at successive delays
    window.setTimeout(function(){sendMess(message);}, del);

    //3) same than 2)
    window.setTimeout(function(){mon_client.send(message);}, del)

    //monitor
    console.log('esp'+i);
    console.log("doSetTimeout "+document.getElementById('btn3').value);
    console.log("message.destinationName: " + message.destinationName);
    console.log(del);
}


function sendMess(message)
{
    mon_client.send(message);
}

Вот HTML:

    <div><p>cascades</p>
        <input type="number" min="0" max="255" value="0" id="btn3">
        <button onclick="joueursCascade()">start</button>
        </div>

    <div><p>ESP-XXXXXX</p>
    <input type="text" name="client" id="esp0" value="ESP0/ledstate"><br>
    <input type="text" name="client" id="esp1" value="ESP1/ledstate"><br>
    <input type="text" name="client" id="esp2" value="ESP2/ledstate"><br>
...