# Impossibilité de créer des variables via un script

**URL:** <https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099>\
**Category:** Questions & Aide\
**Tags:** homeyscript\
**Created:** [July 18, 2024, 6:33pm UTC](https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099 "2024-07-18T18:33:27Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Fred85](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/fred85/32/78930_2.png) [@Fred85](https://community.homey.app/u/Fred85)\
**Post date:** [July 18, 2024, 6:33pm UTC](https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099/1 "2024-07-18T18:33:27Z")

</div>

Bonjour à tous,

Je suis nouveau dans le monde de la domotique avec des petites bases de programmation (mais dans d’autres langages que du JS).  
J’essaie d’échanger avec une webAPI pour la gestion de ma climatisation. J’arrive à obtenir des informations et à passer des commandes CURL, mais pas à gérer des variables à partir d’un script :

- créer des variables qui puissent être utilisables plus tard dans des flows
- les modifier à partir d’un script  
Avec ce que j’ai testé comme commandes, les variables qui seraient créées n’apparaissent pas la liste des variables comme dans l’image ci-jointe:  
 ![image](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/2/f/2f3c7cec4295fe0cbfe5a1078aa2f3f7f09c32aa.png)

J’ai essayé:  
await tag(‘ID\_Instal’,‘abc123’); avec ’ ou " et aussi sans \_  
global.set(‘ID\_Instal’,‘abc123’);

Rien y fait, la variable n’apparait dans la liste des variables ci-dessus.

A partir des autres sujets traitant de la manipulation de variables, je n’ai pas trouvé sur le forum la solution à mon problème. Quel est le bon code pour y arriver (les créer puis les modifier) ?  
Merci

---

<div class="post-metadata">

**Author:** ![sebyldino](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/sebyldino/32/20067_2.png) [@sebyldino](https://community.homey.app/u/sebyldino)\
**Post date:** [July 19, 2024, 4:31am UTC](https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099/2 "2024-07-19T04:31:21Z")

</div>

Salut,  
Pour qu’un tag créé depuis un script apparaisse, il faut que ce script soit exécuté une première fois.

Par exemple, pour créer différents tags, tu peux faire comme ceci:

```auto
const myArgs = JSON.parse(args[0]);

const myString = myArgs.String; // "hello!"
const myNumber = Number(myArgs.Number); // 123
const myBoolean = myArgs.Boolean === 'true'; // true

console.log(typeof myString, myString); // string
console.log(typeof myNumber, myNumber); // number
console.log(typeof myBoolean, myBoolean); // boolean

await tag ('myStr', myString); 
await tag ('myNum', myNumber); 
await tag ('myBool', myBoolean); 

return true;

```

Tu peux tester en utilisant une carte HomeyScript ET  
"Run _‘nom\_du\_script’_ with argument _{“String”: tag1, “Number”: tag2, “Boolean”: tag3_  
comme ceci:

 ![Capture d’écran 2024-07-20 à 12.35.18](https://us1.discourse-cdn.com/flex025/uploads/athom/original/3X/8/7/878875b8f7203e11f5e9e69605847a23558fac91.png)

Si tu veux tester directement dans HomeyScript, tu peux faire ceci:

```auto
const args = {"String": "Hello", "Number": "123", "Boolean": "true"};
const myArgs = args;

const myString = myArgs.String; // "Hello!"
const myNumber = Number(myArgs.Number); // 123
const myBoolean = myArgs.Boolean === 'true'; // true

console.log(typeof myString, myString); // string
console.log(typeof myNumber, myNumber); // number
console.log(typeof myBoolean, myBoolean); // boolean

await tag ('myStr', myString); 
await tag ('myNum', myNumber); 
await tag ('myBool', myBoolean); 

return true;

```

et tu cliques sur Run. Les trois tag devraient être créés.

Pour supprimer un tag:

```auto
await tag ('nom_du_tag', NULL); 

```

---

<div class="post-metadata">

**Author:** ![Fred85](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/fred85/32/78930_2.png) [@Fred85](https://community.homey.app/u/Fred85)\
**Post date:** [July 20, 2024, 9:23am UTC](https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099/3 "2024-07-20T09:23:24Z")

</div>

j’ai essayé le code que tu m’as donné de différentes manières, mais j’obtiens systématiquement une erreur à cause de JSON.parse:

```auto
SyntaxError: Unexpected token h in JSON at position 0
    at JSON.parse (<anonymous>)
    at test5.js:3:23
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)

```

J’ai essayé avec HomeyScript en le lançant avec clic droit \> démarrer ou via une carte dans un flow.  
J’ai également mis le code dans une carte avec entrée d’arguments sous différentes formes (directement hello! 123 true, avec des guillemets autour de chaque variable, et directement à partir de variable déjà existante).  
J’obtiens toujours cette erreur à cause de JSON.parse, seule la référence (token) change selon la méthode utilisée.

J’ai aussi essayé en ajoutant un JSON.stringify comme ci-dessous:

```auto
const myString = JSON.parse(JSON.stringify(args[0])); // ex: hello
const myNumber = JSON.parse(JSON.stringify(args[1])); // ex: 123
const myBoolean = JSON.parse(JSON.stringify(args[2])); // ex: true

```

J’obtiens alors l’exécution sans erreur, mais toujours pas de création de variables disponibles dans ma liste.

D’ailleurs, je précise que l’exécution de mes premières lignes de code sous la forme

```auto
await tag(‘ID_Instal’,‘abc123’);
global.set(‘ID_Instal’,‘abc123’);

```

me renvoyaient une exécution réussie.

Le code suivant:

```auto
const myString = 'hello!'; // ex: hello
const myNumber = 123; // ex: 123
const myBoolean = true; // ex: true

await tag('myStr', myString); 
await tag('myNum', myNumber); 
await tag('myBool', myBoolean); 

```

ne s’exécute correctement que si 123 et true sont placés entre guillemets. Par contre, il n’y pas de création de variables disponibles dans ma liste.

Les méthodes getVariables() et updateVariable() via Homey.logic fonctionnent bien:

```auto
const variables = await Homey.logic.getVariables()
console.log('variables', variables)
onst variables = await Homey.logic.updateVariable({id: 'e7ae1196-01b2-486a-b684-d6b3fe3c023e', variable: {value: 'abcd1234'}})
const variables = await Homey.logic.updateVariable({id: 'f4ebfe06-2a9b-41a8-a04f-0fd47dbac382', variable: {value: 25}})
const variables = await Homey.logic.updateVariable({id: '5fbc5076-8d85-49e2-b7aa-31743285efaf', variable: {value: false}})

```

J’obtiens bien la liste complète de toutes les variables dans le menu variables et l’actualisation de la valeur se fait également.

J’ai quelques questions, notamment pour ma compréhension:

- Faut-il passer par une variable locale (const var=…) pour utiliser la fonction tag ?
- Pourquoi utilises-tu JSON.parse ?
- N’est-il pas possible de taper directement quelque chose de la forme await tag(‘myNum’, 123) ?
- Existe-t-il une méthode pour Homey.logic qui permettrait de créer une variable ?
- Peut-il s’agir d’un bug ou d’un module manquant pour que la fonction tag ne fonctionne pas chez moi ?

Ca fait beaucoup de questions, mais je navigue un peu dans le brouillard sur les principes utilisés par Homey 🙄

---

<div class="post-metadata">

**Author:** ![sebyldino](https://sea1.discourse-cdn.com/flex025/user_avatar/community.homey.app/sebyldino/32/20067_2.png) [@sebyldino](https://community.homey.app/u/sebyldino)\
**Post date:** [July 20, 2024, 10:38am UTC](https://community.homey.app/t/impossibilite-de-creer-des-variables-via-un-script/113099/4 "2024-07-20T10:38:37Z")

</div>

J’ai corrigé mon post précédent
