# Script dat willekeurig een tekst selecteert en dit schrijft naar variabele

**URL:** <https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474>\
**Category:** Vragen & hulp\
**Tags:** homeyscript\
**Created:** [June 17, 2023, 6:30am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474 "2023-06-17T06:30:28Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Michiel\_C](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/michiel_c/32/47537_2.png) [@Michiel\_C](https://community.homey.app/u/Michiel_C)\
**Post date:** [June 17, 2023, 6:30am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/1 "2023-06-17T06:30:28Z")

</div>

Ik probeer om een willekeurige tekstregel uit een lijst naar een variabele te schrijven,  
ChatGPT is met onderstaande script gekomen,  
maar krijg een error:  
“TypeError: Homey.flow.setVariable is not a function”

```auto
// Voorbeeld HomeyScript
// Dit script selecteert willekeurig een tekstregel uit een lijst en wijst deze toe aan de variabele SlaapTekst

// Lijst met tekstregels
const tekstRegels = [
  "Goede nacht en slaap lekker!",
  "Droom zoet!",
  "Rust goed uit!",
  "Welterusten!",
  "Slaap zacht!"
];

// Selecteer een willekeurige index uit de lijst
const randomIndex = Math.floor(Math.random() * tekstRegels.length);

// Haal de geselecteerde tekstregel op
const geselecteerdeTekst = tekstRegels[randomIndex];

// Wijs de geselecteerde tekstregel toe aan de variabele SlaapTekst
Homey.flow.setVariable('SlaapTekst', geselecteerdeTekst)
  .then(() => console.log('SlaapTekst succesvol bijgewerkt'))
  .catch((err) => console.error('Fout bij het bijwerken van SlaapTekst:', err));

```

enig idee wat hier niet klopt?

---

<div class="post-metadata">

**Author:** ![Arie\_J\_Godschalk](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/arie_j_godschalk/32/63027_2.png) [@Arie\_J\_Godschalk](https://community.homey.app/u/Arie_J_Godschalk)\
**Post date:** [June 17, 2023, 7:10am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/2 "2023-06-17T07:10:19Z")

</div>

de updateVariable vereist volgens mij een ID, geen naam.

Zelf doe ik dit liever met de Better Logic Library:  
Je kunt het direct een variabele zetten:  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/b/2/b2fd1bd23907baf90c21d7250576849ac5988ee3.png)

Of een Tag die je in een Homey variabele kan zetten:  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/1/d/1d7ee0721517d649667cca175fd4e0cc66f2925c.png)

BLL heeft standaard lodash ingebouwd (net als HomeyScript ook trouwens).  
Die bevat de `_.sample()` functie, die geeft een Random waarde uit een Array terug.  
Je kunt dit invoeren in de BLL Expression kaarten:

`_.sample(["Goede nacht en slaap lekker!", "Droom zoet!", "Rust goed uit!", "Welterusten!", "Slaap zacht!"])`

En klaar, dit is alles wat je nodig hebt:

 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/e/f/ef964facf3b73c1752c323e607185b3ec69ed47d.png)

---

<div class="post-metadata">

**Author:** ![Michiel\_C](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/michiel_c/32/47537_2.png) [@Michiel\_C](https://community.homey.app/u/Michiel_C)\
**Post date:** [June 17, 2023, 8:14am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/3 "2023-06-17T08:14:27Z")

</div>

dank je wel @Arie_J_Godschalk , dat werkt in een flow.

Toch ben ik ook benieuwd hoe het in een script zou werken… iemand?

---

<div class="post-metadata">

**Author:** ![Arie\_J\_Godschalk](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/arie_j_godschalk/32/63027_2.png) [@Arie\_J\_Godschalk](https://community.homey.app/u/Arie_J_Godschalk)\
**Post date:** [June 17, 2023, 8:15am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/4 "2023-06-17T08:15:25Z")

</div>

Goed, één moment…

```auto
// Lijst met tekstregels
const tekstRegels = [
  "Goede nacht en slaap lekker!",
  "Droom zoet!",
  "Rust goed uit!",
  "Welterusten!",
  "Slaap zacht!"
];

// Selecteer een willekeurige index uit de lijst
const randomIndex = Math.floor(Math.random() * tekstRegels.length);

// Haal de geselecteerde tekstregel op
const geselecteerdeTekst = tekstRegels[randomIndex];

//Zoek de variabele op naam
let variable = _.find(await Homey.logic.getVariables(), x=>x.name=='SlaapTekst');

// Stel de waarde in
variable.value = geselecteerdeTekst;

// Wijs de geselecteerde tekstregel toe aan de variabele SlaapTekst
return await Homey.logic.updateVariable({id:variable.id, variable});

// door await ervoor, zorg je ervoor dat dit script voltooid wordt voordat de flowkaart waarmee je deze uitvoert is afgerond. Na de HS flowkaart is de variabele dus gewijzigd.

```

---

<div class="post-metadata">

**Author:** ![Michiel\_C](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/michiel_c/32/47537_2.png) [@Michiel\_C](https://community.homey.app/u/Michiel_C)\
**Post date:** [June 17, 2023, 8:25am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/5 "2023-06-17T08:25:10Z")

</div>

> [@Arie\_J\_Godschalk](#):
>
> ```auto
> // Lijst met tekstregels
> const tekstRegels = [
> "Goede nacht en slaap lekker!",
> "Droom zoet!",
> "Rust goed uit!",
> "Welterusten!",
> "Slaap zacht!"
> ];
> 
> // Selecteer een willekeurige index uit de lijst
> const randomIndex = Math.floor(Math.random() * tekstRegels.length);
> 
> // Haal de geselecteerde tekstregel op
> const geselecteerdeTekst = tekstRegels[randomIndex];
> 
> //Zoek de variabele op naam
> let variable = _.find(await Homey.logic.getVariables(), x=>x.name=='SlaapTekst');
> 
> // Stel de waarde in
> variable.value = geselecteerdeTekst;
> 
> // Wijs de geselecteerde tekstregel toe aan de variabele SlaapTekst
> return await Homey.logic.updateVariable({id:variable.id, variable});
> 
> // door await ervoor, zorg je ervoor dat dit script voltooid wordt voordat de flowkaart waarmee je deze uitvoert is afgerond. Na de HS flowkaart is de variabele dus gewijzigd.
> 
> ```

top @Arie_J_Godschalk ! dit werkt. dank je wel!

---

<div class="post-metadata">

**Author:** ![Arie\_J\_Godschalk](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/arie_j_godschalk/32/63027_2.png) [@Arie\_J\_Godschalk](https://community.homey.app/u/Arie_J_Godschalk)\
**Post date:** [June 17, 2023, 8:29am UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/6 "2023-06-17T08:29:44Z")

</div>

Je kunt, als je dat wil, het nog wel iets compacter maken door gebruik te maken van de lodash functie `_.sample()`.  
De code achter \_.sample is hetzelfde als je random functie.

```auto
// Lijst met tekstregels
const tekstRegels = [
  "Goede nacht en slaap lekker!",
  "Droom zoet!",
  "Rust goed uit!",
  "Welterusten!",
  "Slaap zacht!"
];

//Zoek de variabele op naam
let variable = _.find(await Homey.logic.getVariables(), x=>x.name=='SlaapTekst');

// Stel de waarde in
variable.value = _.sample(tekstRegels);

// Wijs de geselecteerde tekstregel toe aan de variabele SlaapTekst
return await Homey.logic.updateVariable({id:variable.id, variable});

// door await ervoor, zorg je ervoor dat dit script voltooid wordt voordat de flowkaart waarmee je deze uitvoert is afgerond. Na de HS flowkaart is de variabele dus gewijzigd.

```

---

<div class="post-metadata">

**Author:** ![Theo\_de\_Koning](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/theo_de_koning/32/136062_2.png) [@Theo\_de\_Koning](https://community.homey.app/u/Theo_de_Koning)\
**Post date:** [June 17, 2023, 2:05pm UTC](https://community.homey.app/t/script-dat-willekeurig-een-tekst-selecteert-en-dit-schrijft-naar-variabele/82474/7 "2023-06-17T14:05:07Z")

</div>

[Offtopic]  
Van deze voorbeelden leer ik het meest als visueel gericht mens. \>\>\> bookmark
