Асинхронный цикл Nodejs Smart Light

#node.js #asynchronous #home-automation

Вопрос:

Я хочу настроить свою интеллектуальную лампочку в соответствии с текущим средним цветом на экране компьютера. Я использую библиотеки среднего цвета изображений и рабочего стола для скриншотов, чтобы сделать снимок экрана и получить среднее значение цвета этого изображения. Наконец, есть библиотека node-yeelight-wifi для управления потоком света. Моя проблема в том, что я не знаю, как делать скриншоты, находить средний цвет, а затем регулярно отправлять команду лампочке. Он должен, например, менять цвета в зависимости от фильма, который воспроизводится на экране. Что я хочу, так это создать «основную» функцию и запускать ее каждые 2 секунды. Я не мог сделать это с помощью setInterval, потому что я не могу передать параметр «light» полностью в setRGB

ПРИМЕЧАНИЕ: Все функции работают, если они автономны, с библиотеками проблем нет

 const screenshot = require("screenshot-desktop");
const average = require("image-average-color");
const Lookup = require("node-yeelight-wifi").Lookup;

let look = new Lookup();

look.on("detected", async (light) => {
  if (light.id == "mybulb") {
    setInterval((light) => {
      screenshot()
        .then((img) => {
          average(img, (err, color) => {
            if (err) throw err;
            light
              .setRGB(color)
              .then(() => {
                console.log("success");
              })
              .catch((error) => {
                console.log("failed", error);
              });
          });
        })
        .catch((err) => {
          console.log(err);
        });
    }, 3000);
  }
});
 

Комментарии:

1. Удалите light из setInterval(((light) => {... и измените его на setInterval(() => {... , и он должен просто работать с нулем других изменений

2. @slebetman спасибо тебе! это сработало