#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 спасибо тебе! это сработало