Commande javascript & paramètres - Version imprimable +- Forum Lifedomus (http://forum-lifedomus.com) +-- Forum : Les outils de configuration et design (http://forum-lifedomus.com/forumdisplay.php?fid=7) +--- Forum : Config Studio (CS) (http://forum-lifedomus.com/forumdisplay.php?fid=8) +--- Sujet : Commande javascript & paramètres (/showthread.php?tid=4678) Pages :
1
2
|
Commande javascript & paramètres - Intellencia - 03-16-2020 Bonsoir à tous ! Je rencontre un problème pour envoyer une commande en javascript à un connecteur IP que j'ai créé. La connexion, aucun problème, l'envoi de la commande également puisqu'il me renvoie une réponse JSON que je parse, par contre j'aimerais envoyer des paramètres à la commande et là je ne trouve pas comment faire dans mon cas : - j'ai créé 3 variables : p_hash, p_code & p_ts - ma commande : [attachment=2587] Le problème que j'ai c'est que je n'arrive pas à passer en paramètre la valeur de mes variables préalablement calculées. J'ai essayé plusieurs formes, dont $(p_ts) qui fonctionnerait si j'étais en format "application/json" mais seul le "application/x-www-form-urlencoded" est supporté par mon équipement. J'ai également essayé de créer un fichier .js que j’envoie dans le connecteur mais il n'affecte pas plus la valeur à la variable... Vous auriez une idée ou vous pouvez m'éclairer s'il vous plait ? Merci beaucoup et belle soirée à vous RE: Commande javascript & paramètres - sud-domotique-expert - 03-17-2020 j'ai pas forcément compris ce que tu veux faire tu veux passer dans ta ligne de commande une variable calculée ? tu veux écrire une valeur calculée après retour de ta requête ? tu veux stocker une valeur en même temps que tu passes une ligne de commande ? ce que tu montres dans ta copie d'écran c'est la chose suivante : tu créé une variable p_ts qui stocke le résultat du calcul de ""+Math.floor(Date.now()/1000) ==> j'ai déjà un gros doute sur cette syntaxe qui agrège du string et du numérique issue de format date ??? puis tu déclenches la commande "URL_connecteur"/open tu ne peux pas exécuter du Date.now() dans ta ligne de commande , la partie haute est un interpréteur de logique et n’exécute pas de fonction système si tu veux mettre quelque chose dans ta variable d'équipement p_ts , qui doit être déclarée dans l'équipement dans la partie variable (donc en String ou double) alors tu peux affecter comme cela p_ts = "une valeur" je ne suis pas certains que Math.floor (xxx) soit executé dans cette partie , mais c'est peut-être possible dans la commande "URL_connecteur"/open POST tu as un argument hash=$(p_hash)&identifier=5893&ts={p_ts} dans cette partie les variables sont du format $(variable) donc la syntaxe sera : hash=$(p_hash)&identifier=5893&ts=$(p_ts) tu peux mettre dans les entêtes Nom: content-type Valeur: application/json je ne sais pas à quoi correspond hash=$(p_hash) ???? RE: Commande javascript & paramètres - Intellencia - 03-17-2020 Merci pour ton aide Je veux effectivement passer une variable calculée dans ma ligne de commande. Concernant p_hash ça doit être un hmac256 en fonction : - d'un code de partage (que je possède) - et de ce fameux ts (= timestamp) qui est l'heure en cours au moment de l'envoi de la commande. D'ailleurs j'aurai besoin de fonctions javascript pour calculer ce Hmac (le module "crypto-js") et j'ai vu que dans cette partie commande on ne peut pas faire de "require". Si j’envoie cette fonction dans le js du connecteur, elle pourra ensuite être appelée dans la commande ? Mais d'abord, je veux déjà réussir à passer la variable calculée à ts puisque c'est le 1er retour du connecteur que j'ai : J'ai donc adopté la syntaxe : hash=$(p_hash)&identifier=5893&ts=$(p_ts) [attachment=2588] Et voici maintenant ce que j'ai dans le listener : [attachment=2589] On voit donc bien que ma variable p_ts = 1584426812, et s'affiche correctement lors du ldprint. D'ailleurs quand on regarde le json de retour on voit que le timestamp attendu est proche de celui affiché. Par contre le json indique qu'il reçoit une toute autre valeur (4282861759). La variable p_ts n'est donc pas passée correctement dans mes paramètres : hash=$(p_hash)&identifier=5893&ts=$(p_ts) Ou j'ai loupé quelque chose ? RE: Commande javascript & paramètres - sud-domotique-expert - 03-17-2020 c'est pas du tout cuit comme le comportement du LD / CS n'est pas forcément que ce l'on attend, on est souvent (quasiment tout le temps) amené à tâtonner. 1 - si ce n'est déjà le cas déclare p_ts comme variable de l'équipement (donc enlève var p_ts et remplace par p_ts) 2 - dans la partie DS affiche le contenu de p_ts avec un widget component / Etat 3 - tu compares avec ce que te donne le ldprint et le retour dans le lsitener 4 - test en passant p_ts en double et string ça va permettre de lever des doutes et de s'assurer du contenu, mais surtout de voir quel type de variable est affecté à p_ts et le contenu sous différentes formes revient on verra la suite en fonction. RE: Commande javascript & paramètres - sud-domotique-expert - 03-17-2020 tu peux aussi ajouter dans la partie en-tête cache: no-cache dans la partie paramètre tu as aussi la syntaxe suivante { "Hash" : $(p_hash), "identidier" : "5893", "ts" : $(p_ts) } je ne sais pas si ça peut jouer différemment déjà si tu mets à la main à la place de p_ts une valeur correcte , regardes si ta réponse est code: 200 OK RE: Commande javascript & paramètres - Intellencia - 03-17-2020 Bien vu ! La variable p_ts est bien remplie : [attachment=2594] [attachment=2595] [attachment=2596] Mais toujours pas envoyée dans les paramètres de la requête. Comme tu l'as suggéré, j'avais essayé la syntaxe json : { "Hash" : $(p_hash), "identidier" : "5893", "ts" : $(p_ts) } mais l'équipement ne reconnaît pas ce format... et demande bien un format "hash=$(hash)&identifier=5893&ts=$(p_ts)" J'ai testé avec succès cette méthode en python mais bon ça ne va pas m'être utile ici RE: Commande javascript & paramètres - sud-domotique-expert - 03-17-2020 si tu mets en dur la valeur du p_ts qu'est-ce ça donne ? RE: Commande javascript & paramètres - Intellencia - 03-17-2020 Si je la mets en dur, pas de soucis, il passe à la vérification du hash. Et si je lui mets ensuite le hash en dur qui correspond au ts, il me renvoie que le timestamp est trop ancien puisque plus le même que l'heure au moment de l'envoi de la commande. RE: Commande javascript & paramètres - Intellencia - 03-17-2020 Enfin en la mettant en dur direct dans les paramètres genre : hash=$(hash)&identifier=5893&ts=1584447108 Mais si je la mets en dur dans la commande genre : p_ts = 1584447108, là ce n'est toujours pas transmis. En fait j'ai peur que la récupération de la variable via l'instruction $(p_ts) ne fonctionne que par l'envoi de paramètre en format json... RE: Commande javascript & paramètres - sud-domotique-expert - 03-17-2020 si tu passes par une variable qui sera typée en numérique puis que lui affecte la valeur p_ts dans la partie commande : var temp_ts = 1; ===> pour la forcer en numérique p_ts = Math.floor(Date.now()/1000); ==> calcul de la valeur temp_ts = parseInt (p_ts); ==> conversion en numérique de la valeur puis dans les paramètres tu utilises $(temp_ts) |