Module Gladys-shell


#1

Bonjour ,

Je suis en train de développer mon premier module Gladys et je ne suis pas très doué .

Le module doit permettre d’exécuter des commandes linux stockées dans l’identifier d’un device .

Le module

Le problème c’est que comme je l’ai dit plus haut je ne suis vraiment pas doué (première fois que je tape du javascript dans ma vie mais bon j’ai 15 ans donc ça va) ducoup j’aimerai savoir si mon code est correct (je connais déjà la réponse) .

Et j’ai aussi un problème quand je veut installer mon module dans avancé j’entre ça :

et quand je fais installer le bouton vert reste comme ça indefiniment :
capture%20bouton

pourtant je sais que je n’ai mis aucune dépendance au module donc pourquoi ce chargement infini ?

merci d’avance pour votre aide et si vous pouviez m’aider a corriger le code ce serai genial :slight_smile:


SPEAK - Modifier le volume de la sortie Jack de mon RPI
#2

Hello!

Bravo pour ton premier module :slight_smile:

Tu as regardé dans les logs de Gladys si quelque chose se passe mal ? :slight_smile:


#3

En fait après avoir redémarrè le raspberry ce matin Gladys me mettait une erreur 502 donc j’ai supprimé les dossiers dans api/hooks et ça c’est relancé je pense que mon fichier exec.js est rempli d’erreur .

le code du exec.js :

const Promise = require('bluebird');
var exec = require('child_process').exec;

module.exports = function exec(params){

    return .params.deviceType.identifier();
.then((cmd) => {
			sails.log.debug('commande :' + cmd);
			if((typeof cmd != 'undefined') && cmd != null)
				exec(cmd);
			}).catch(function(err){sails.log.debug('erreur : ' cmd + ' identifier')});

}

Je pense qu’il y a plein d’erreurs mais j’ai du mal a comprendre les systèmes de promises .

J’ai trouvé ça dans les logs :

0|gladys | npm ERR! “author”: "Math…’
0|gladys | npm ERR! File: /home/pi/gladys/api/hooks/shell/package.json
0|gladys | npm ERR! Failed to parse package.json data.
0|gladys | npm ERR! package.json must be actual JSON, not just JavaScript.
0|gladys | npm ERR!
0|gladys | npm ERR! Tell the package author to fix their package.json file. JSON.parse
0|gladys |
0|gladys | npm ERR! A complete log of this run can be found in:
0|gladys | npm ERR! /home/pi/.npm/_logs/2018-08-15T06_19_57_053Z-debug.log
0|gladys |
0|gladys | at ChildProcess.exithandler (child_process.js:275:12)
0|gladys | at emitTwo (events.js:126:13)
0|gladys | at ChildProcess.emit (events.js:214:7)
0|gladys | at maybeClose (internal/child_process.js:925:16)
0|gladys | at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
0|gladys | /home/pi/gladys/api/hooks/shell/lib/exec.js:6
0|gladys | return .params.deviceType.identifier();
0|gladys | ^
0|gladys | SyntaxError: Unexpected token .
0|gladys | at createScript (vm.js:80:10)
0|gladys | at Object.runInThisContext (vm.js:139:10)
0|gladys | at Module._compile (module.js:607:28)
0|gladys | at Object.Module._extensions…js (module.js:654:10)
0|gladys | at Module.load (module.js:556:32)
0|gladys | at tryModuleLoad (module.js:499:12)
0|gladys | at Function.Module._load (module.js:491:3)
0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:4:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17

Ca arrive quand je redémarre Gladys avec le module dans le dossier hooks , pourtant quand je l’installe dans modules/avancé le bouton reste bloqué sur installation des dépendances donc je pensais que Gladys ne lirait pas le module.

Je vais déjà essayer de corriger les erreurs des logs mais j’ai l’impression que c’est mon package.json qui est cassé.


#4

J’ai deja corrigé le package.json et le module s’installe mais j’ai ça dans les pm2 logs :

0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17
0|gladys | /home/pi/gladys/api/hooks/shell/lib/exec.js:7
0|gladys | .then((cmd) => {
0|gladys | ^
0|gladys | SyntaxError: Unexpected token .
0|gladys | at createScript (vm.js:80:10)
0|gladys | at Object.runInThisContext (vm.js:139:10)
0|gladys | at Module._compile (module.js:607:28)
0|gladys | at Object.Module._extensions…js (module.js:654:10)
0|gladys | at Module.load (module.js:556:32)
0|gladys | at tryModuleLoad (module.js:499:12)
0|gladys | at Function.Module._load (module.js:491:3)
0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17


#5

Bonjour,

Il y a un petit problème dans ton code dans le fichier lib/exec.js à la ligne 6 :
return params.deviceType.identifier();
.then((cmd) => {
Il y a un ‘;’ en trop.


#6

merci beaucoup je vais corriger tout de suite


#7

C’est corrigé mais j’ai toujours ça dans les logs :

0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17
0|gladys | /home/pi/gladys/api/hooks/shell/lib/exec.js:11
0|gladys | }).catch(function(err){sails.log.debug(‘erreur : ’ cmd + ’ identifier’)});
0|gladys | ^^^^^^^^^^^
0|gladys | SyntaxError: missing ) after argument list
0|gladys | at createScript (vm.js:80:10)
0|gladys | at Object.runInThisContext (vm.js:139:10)
0|gladys | at Module._compile (module.js:607:28)
0|gladys | at Object.Module._extensions…js (module.js:654:10)
0|gladys | at Module.load (module.js:556:32)
0|gladys | at tryModuleLoad (module.js:499:12)
0|gladys | at Function.Module._load (module.js:491:3)
0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17


#8

Rebonjour,

Il y a encore une erreur dans le code.

Donc ton code :

  const Promise = require('bluebird');
  var exec = require('child_process').exec;
  module.exports = function (params){

    return params.deviceType.identifier()
.then((cmd) => {
			sails.log.debug('commande :' + cmd);
			if((typeof cmd != 'undefined') && cmd != null)
				exec(cmd);
			}).catch(function(err){sails.log.debug('erreur : ' cmd + ' identifier')});
}

Le code corrigé :

  const Promise = require('bluebird');
  var exec = require('child_process').exec;
  module.exports = function (params){

    return params.deviceType.identifier()
.then((cmd) => {
			sails.log.debug('commande :' + cmd);
			if((typeof cmd != 'undefined') && cmd != null)
				exec(cmd);
			}
    }).catch((err) => {sails.log.debug('erreur : ' cmd + ' identifier')});
}

#9

encore merci pour ton aide je vais tester le code


#10

ton code a corrigé des erreurs mais visiblement il en reste (je sais pas comment j’ai pu en faire autant :smile: )

logs :

0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17
0|gladys | /home/pi/gladys/api/hooks/shell/lib/exec.js:10
0|gladys | }
0|gladys | ^
0|gladys | SyntaxError: missing ) after argument list
0|gladys | at createScript (vm.js:80:10)
0|gladys | at Object.runInThisContext (vm.js:139:10)
0|gladys | at Module._compile (module.js:607:28)
0|gladys | at Object.Module._extensions…js (module.js:654:10)
0|gladys | at Module.load (module.js:556:32)
0|gladys | at tryModuleLoad (module.js:499:12)
0|gladys | at Function.Module._load (module.js:491:3)
0|gladys | at Module.require (module.js:587:17)
0|gladys | at require (internal/module.js:11:18)
0|gladys | at Object.module.exports (/home/pi/gladys/api/hooks/shell/index.js:3:16)
0|gladys | at wrapper (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at prepareHook (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:45:17)
0|gladys | at /home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:149:13
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:181:20
0|gladys | at Object.async.forEachOf.async.eachOf (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:233:13)
0|gladys | at Object.async.forEach.async.each (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:209:22)
0|gladys | at prepare (/home/pi/gladys/node_modules/sails/lib/app/private/loadHooks.js:148:17)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:713:13
0|gladys | at iterate (/home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:262:13)
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:274:29
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:44:16
0|gladys | at /home/pi/gladys/node_modules/sails/node_modules/async/lib/async.js:718:17

je remet le lien du github


#11

Si tu veux essayer de debug tout seul, les messages sont « assez clairs » …
A condition de savoir quoi chercher. :slight_smile:
En l’occurrence, une référence à ton fichier « exec » :

T’es tout proche :wink:


#12

merci je vais continuer de chercher dans le exec.js mais ça va être long avec mon niveau moins que débutant :slight_smile: .


#13

Gladys s’est lancé et le module n’a plus d’erreur mais je crois que mon code ne fait pas ce que je voudrais

Pour récuperer l’identifier d’un device dans le exec c’est bien comma ça :

return params.deviceType.identifier

Et comment je peut créer un bouton sur mon device , je ne sais pas quoi ajouter il ne me faut pas un binary mais simplement un bouton qui éxecute toujours la même action.

Si vous regardez le code est ce que vous pouvez me dire si il est sensé faire quelques chose?

J’ai ça dans les logs quand je clique sur le bouton slider de mon device :

0|gladys | Sending 500 (“Server Error”) response:
0|gladys | TypeError: params.deviceType.identifier.then is not a function
0|gladys | at Hook.module.exports (/home/pi/gladys/api/hooks/shell/lib/exec.js:6:2)
0|gladys | at Hook.wrapper [as exec] (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:44:53
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)
0|gladys | Server Error:
0|gladys | TypeError: params.deviceType.identifier.then is not a function
0|gladys | at Hook.module.exports (/home/pi/gladys/api/hooks/shell/lib/exec.js:6:2)
0|gladys | at Hook.wrapper [as exec] (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:44:53
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)


#14

Oups, pardon. Je n’ai pas été assez précis. Ce log :

Veut dire erreur à la ligne 5 :5, à la position 30 sur la ligne:30
-> Pas besoin de trop chercher normalement :wink:

Pour ton log actuel, il te dit que

Effectivement, tu as confondu un appel à une méthode (ou fonction) de Gladys:
gladys.deviceType.update() // par exemple
, qui renvoie une Promise d’où l’usage d’un then() pour obtenir le résultat, avec le params.deviceType auquel tu as accès dans ta fonction “exec” qui lui est un objet.
Tu peux d’ailleurs

console.log('params', params) 

en tout début de ta fonction pour voir son contenu.
En gros, pas besoin de query ton deviceType, puisque son contenu t’es déjà passé via le “params” :
Tu as donc directement accès à params.deviceType.identitifier


#15

pardon j’ai modifié le code pendant que tu envoyais le message ce qui écrit dans les logs c’est ça :

Sending 500 (“Server Error”) response:
0|gladys | TypeError: params.deviceType.identifier.then is not a function
0|gladys | at Hook.module.exports (/home/pi/gladys/api/hooks/shell/lib/exec.js:7:2)
0|gladys | at Hook.wrapper [as exec] (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:44:53
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)
0|gladys | Server Error:
0|gladys | TypeError: params.deviceType.identifier.then is not a function
0|gladys | at Hook.module.exports (/home/pi/gladys/api/hooks/shell/lib/exec.js:7:2)
0|gladys | at Hook.wrapper [as exec] (/home/pi/gladys/node_modules/@sailshq/lodash/lib/index.js:3250:19)
0|gladys | at /home/pi/gladys/api/core/devicetype/deviceType.exec.js:44:53
0|gladys | at tryCatcher (/home/pi/gladys/node_modules/bluebird/js/release/util.js:16:23)
0|gladys | at Promise._settlePromiseFromHandler (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:512:31)
0|gladys | at Promise._settlePromise (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:569:18)
0|gladys | at Promise._settlePromise0 (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:614:10)
0|gladys | at Promise._settlePromises (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:693:18)
0|gladys | at Promise._fulfill (/home/pi/gladys/node_modules/bluebird/js/release/promise.js:638:18)
0|gladys | at /home/pi/gladys/node_modules/bluebird/js/release/nodeback.js:42:21
0|gladys | at /home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:120:16
0|gladys | at Object.poolfully [as releaseConnection] (/home/pi/gladys/node_modules/sails-mysql/lib/connections/release.js:28:12)
0|gladys | at Query._callback (/home/pi/gladys/node_modules/sails-mysql/lib/connections/spawn.js:105:35)
0|gladys | at Query.Sequence.end (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
0|gladys | at Query._handleFinalResultPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:144:8)
0|gladys | at Query.EofPacket (/home/pi/gladys/node_modules/mysql/lib/protocol/sequences/Query.js:128:8)
0|gladys | at Protocol._parsePacket (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:280:23)
0|gladys | at Parser.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Parser.js:73:12)
0|gladys | at Protocol.write (/home/pi/gladys/node_modules/mysql/lib/protocol/Protocol.js:39:16)
0|gladys | at Socket. (/home/pi/gladys/node_modules/mysql/lib/Connection.js:96:28)
0|gladys | at emitOne (events.js:116:13)
0|gladys | at Socket.emit (events.js:211:7)

C’est très gentil a toi de m’aider :slight_smile:

Ducoup je fais comment pour que mon script éxecute la commande qui est dans l’identifier du device ?


#16

J’ai modifié le code de exec.js :

const Promise = require('bluebird');
var exec = require('child_process').exec;

module.exports = function (params){
  
var commande = params.deviceType.identitifer;
return Promise.resolve()
  
.then((commande) => {
		sails.log.debug('commande :' + commande);
		if((typeof commande != 'undefined') && commande != null)
			exec(commande);
		
}).catch((err) => {sails.log.debug('erreur : ' + commande + ' identifier')});
}

Le module est quasiment fini.
Mais dans les logs gladys je vois : command : undefined , je ne comprend pas pourquoi puisque command je dis que c’est l’identifier du device.

Déjà je sais que le module fonctionne car quand j’affecte la variable commande en dur la commande s’éxecute bien mais le probleme c’est que la variable commande ne prend pas la valeur de l’identifier.

Donc je vous demande comment donner a une variable la valeur de l’identifier du device?


#17

De ce que je vois, tu ne définies jamais command. (Sans « e »). Cette erreur est sûrement levée en dehors de ton module.
Need logs :wink:

Par contre :

Ici « commande » vaut undefined puisque tu ne passes pas de paramètres à Promise.resolve.

Sors ta logique de la Promise : exécute ta commande puis renvoies ton Promise.resolve().
Tu verras déjà si ta commande passe.


#18

désolé si je suis vraiment nul en JS mais je n’ai aucune logique de promise , c’est le truc que j’ai le plus de mal a comprendre depuis le début je ne sais pas ce que c’est.

donc si je fais return Promise.resolve(commande) .then((commande) => { , dans le .then commande ne sera plus undefined?


#19

:+1: :+1:
Exactement !


#20

Pourtant je peux t’assusrer que ce code :

const Promise = require('bluebird');
var exec = require('child_process').exec;

module.exports = function (params){
  
var commande = params.deviceType.identitifer;
return Promise.resolve(commande)
  
.then((commande) => {
		sails.log.debug('commande :' + commande);
		if((typeof commande != 'undefined') && commande != null)
			exec(commande);
		
}).catch((err) => {sails.log.debug('erreur : ' + commande + ' identifier')});
}

me retourne dans les logs commande : undefined .

En fait pendant tout le programme la variable commande reste undefined , ça veut dire que ce n’est pas : var commande = params.deviceType.identitifer; que je dois écrire , je cherche donc comment affecter a une variable la valeur de l’identifier du device .

En tout cas grâce a tout ça je commence un comprendre un peu les lignes que je tape :smile: