Impossibilité de créer des variables via un script

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

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

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:

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:

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

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:

await tag ('nom_du_tag', NULL); 

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:

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:

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

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

me renvoyaient une exécution réussie.

Le code suivant:

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:

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 :roll_eyes:

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