# How to lauch screensaver from HomeyScript

**URL:** https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470
**Category:** Developers
**Created:** [July 15, 2021, 6:00pm UTC](https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470 "2021-07-15T18:00:30Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![rodyla](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/rodyla/32/42771_2.png) [@rodyla](https://community.homey.app/u/rodyla)
#### Post date: [July 15, 2021, 6:00pm UTC](https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470/1 "2021-07-15T18:00:30Z")

</div>

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;

```

}

---

<div class="post-metadata">

### Author: ![robertklep](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/robertklep/32/160628_2.png) [@robertklep](https://community.homey.app/u/robertklep)
#### Post date: [July 15, 2021, 6:31pm UTC](https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470/2 "2021-07-15T18:31:42Z")

</div>

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).

---

<div class="post-metadata">

### Author: ![tb1962](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/tb1962/32/7888_2.png) [@tb1962](https://community.homey.app/u/tb1962)
#### Post date: [July 16, 2021, 2:55pm UTC](https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470/3 "2021-07-16T14:55:10Z")

</div>

> [@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) {
> 
> ```auto
> // 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

```auto
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;
}

```

---

<div class="post-metadata">

### Author: ![rodyla](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/rodyla/32/42771_2.png) [@rodyla](https://community.homey.app/u/rodyla)
#### Post date: [July 16, 2021, 3:28pm UTC](https://community.homey.app/t/how-to-lauch-screensaver-from-homeyscript/49470/4 "2021-07-16T15:28:33Z")

</div>

> [@tb1962](#):
>
> ```auto
> 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,

```

});

}
