rodyla
July 15, 2021, 6:00pm
1
Hello, I trying to start a random screensaver from HomeyScript.
Code seems te be ok, I only get a 403 error (missing_scopes). Anyone some tips?
const devices = await Homey.ledring.getScreensavers();
let random = getRandomItem(Object.values(devices));
log(random.id);
let opt = { value : { uri : random.uri, id : random.id }};
await Homey.ledring.setOptionScreensaver(opt)
.then(() => log(‘OK’))
.catch(error => log(Error:
, error));
function getRandomItem(arr) {
// get random index value
const randomIndex = Math.floor(Math.random() * arr.length);
// get random item
const item = arr[randomIndex];
return item;
}
Basically, setOptionScreensaver
(I assume that’s what’s causing the error) requires permissions that HomeyScript doesn’t have (and you can’t change those permissions, Athom decides which permissions HomeyScript should have).
2 Likes
tb1962
July 16, 2021, 2:55pm
3
rodyla:
const devices = await Homey.ledring.getScreensavers();
let random = getRandomItem(Object.values(devices));
log(random.id);
let opt = { value : { uri : random.uri, id : random.id }};
await Homey.ledring.setOptionScreensaver(opt)
.then(() => log(‘OK’))
.catch(error => log( Error:
, error));
function getRandomItem(arr) {
// get random index value
const randomIndex = Math.floor(Math.random() * arr.length);
// get random item
const item = arr[randomIndex];
return item;
}
Actually, you can do it in javascript using runFlowCardAction. I have modified your code a little
const screensavers = await Homey.ledring.getScreensavers();
let random = getRandomItem(Object.values(screensavers));
log(random);
setScreenSaver(random)
await wait(15*1000)
const turnOff = { uri : 'homey:manager:ledring', id : 'off' };
setScreenSaver(turnOff)
function setScreenSaver(opt) {
Homey.flow.runFlowCardAction({
id: 'set_screensaver',
uri: opt.uri,
args: { screensaver: { uri: opt.uri, id: opt.id } },
delay: null,
});
}
function getRandomItem(arr) {
// get random index value
const randomIndex = Math.floor(Math.random() * arr.length);
// get random item
const item = arr[randomIndex];
return item;
}
3 Likes
rodyla
July 16, 2021, 3:28pm
4
tb1962:
const screensavers = await Homey.ledring.getScreensavers();
let random = getRandomItem(Object.values(screensavers));
log(random);
setScreenSaver(random)
await wait(15*1000)
const turnOff = { uri : 'homey:manager:ledring', id : 'off' };
setScreenSaver(turnOff)
function setScreenSaver(opt) {
Homey.flow.runFlowCardAction({
id: 'set_screensaver',
uri: opt.uri,
args: { screensaver: { uri: opt.uri, id: opt.id } },
delay: null,
});
}
function getRandomItem(arr) {
// get random index value
const randomIndex = Math.floor(Math.random() * arr.length);
// get random item
const item = arr[randomIndex];
return item;
}
Thanks a lot, works like a charm, now everytime a new Spotify song starts, I start a new screensaver
I only hard coded the uri of the flowcard since I also use different external screensavers.
function setScreenSaver(opt) {
Homey.flow.runFlowCardAction({
id: 'set_screensaver',
uri: 'homey:manager:ledring',
args: { screensaver: { uri: opt.uri, id: opt.id } },
delay: null,
});
}
3 Likes