Я ищу способ опубликовать одно и то же значение (число взято из 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>