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”
// 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));
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:
Of een Tag die je in een Homey variabele kan zetten:
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!" ])
// 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.
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.
// 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.