Module Gladys-shell


#21

En déplacement, ça va être chaud pour moi de t’aider précisément…
Si t’as capté la logique, c’est cool !
Réfère toi aux logs pour savoir à quel moment commande est undefined.
Et si tu veux « suivre » la valeur d’une variable au cours de l’exécution de ton programme, ajoute quelques logs :

console.log(`commentaire ˋ, variable)

#22

Ok merci je vais essayer de finir tout seul


#23

OUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII!!!

LE MODULE FONCTIONNE!!!

C’est assez cool ça surtout que l’erreur c’était juste que j’avais écrit identifer au lieu de identifier :smile:

le github


#24

Encore merci a tout ceux qui m’ont aidé a faire le module.

Maintenant si je veux le mettre sur le store il faut que je fasse quoi?


#25

Salut @joeypic,

Bravo pour ton premier module :+1:

Perso, j’ai quelques petites remarques pour simplifier ton code (je ne suis pas expert, mais je me débrouille pas mal :smile: ).
Je pense que tu peux te passer du promise.
Si tu regarde la doc sur “Promise.resolve(value)” ici et “Promise.reject(reason)” , tu verras que le fait d’écrire :

    var commande = params.deviceType.identitifer;
    return Promise.resolve(commande)
    .then((commande) => {
        sails.log.debug('commande :' + commande);
        ...

correspond à passer la valeur de “commande” dans le “then” sans effectuer d’action.
Tu peux donc le faire directement :

    var commande = params.deviceType.identitifer;
    sails.log.debug('commande :' + commande);
    ...

De plus, ton “catch” ne sert pas, vu que ta promise est toujours “resolve”.
Et si tu mets un “return”, il faut que tu penses à retourner quelque chose dans le “then”.

Ce qui donne pour ton code (avec une petite gestion des erreurs en prime :wink: ) :

    var commande = params.deviceType.identitifer;
    sails.log.debug('commande :' + commande);
    if((typeof commande != 'undefined') && commande != null) {
        exec(commande, (error, stdout, stderr) => {
            if (error) {
                sails.log.error(`exec error: ${error}`);
                return;
            }
            sails.log.info(`stdout: ${stdout}`);
            sails.log.error(`stderr: ${stderr}`);
        });
    }

Pour le proposer au store, suis ce lien :wink:


#26

Merci je vais essayer de le simplifier


#27

Voila j’ai envoyé le module

traduction faite avec DeePL
et logo avec gimp


#28

@joeypic, tu as pu tester avec ma modification de code ?


#29

non j’ai juste supprimé le catch comme tu me l’a dis mais j’ai pas copié ton code , merci de ton aide


#30

Bonjour,

Je viens de découvrir ce module car je voulais modifier le volume avec la commande :

sudo amixer cset numid=1 -- 90%

L’inquiétude était entre autre l’utilisation du sudo et ça fonctionne au top!

Plus qu’a apprendre à faire un script et l’y intégrer :wink:

Merci pour ce super module!


#31

Hello @joeypic!

J’ai bien vu ton module sur le store, merci de l’avoir publié :raised_hands:

Avant de l’accepter, juste quelques petites remarques :

  • Pourrais tu ajouter une gestion des erreurs à ton module ?

Si la commande shell rate, il faudrait que le “exec” reject et renvoie une erreur claire dans les logs.

D’après la doc de exec, tu peux facilement “promisifier” exec pour que la fonction retourne une promise.

const util = require('util');
const exec = util.promisify(require('child_process').exec);

Cf =>

https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

Ainsi dans ton module tu pourrais ici => https://github.com/joeypic/gladys-shell/blob/master/lib/exec.js#L13

Faire return exec(command);

  • Essaie de coder en anglais aussi, les variables avec des noms français comme “commande” c’est pas super propre :stuck_out_tongue:
  • ton premier promise.resolve() n’est pas utile, pourquoi ne pas mettre directement ton “if typeof” au début, si c’est undefined tu mets un petit message d’erreur dans les logs genre “Gladys-shell: This device does not have any command to execute.” et tu fais ton Promise.resolve, et sinon tu retourne le exec comme je te montrais plus haut :slight_smile:
  • Juste une petite remarque pour le logo, pourrais tu éviter de répéter le nom du module dans le logo ? ça fait bizarre sur la vue avec plein de modules =>

Le shell suffit!

C’est juste des petits remarques, globalement le module est nickel :slight_smile:

Hâte de pouvoir publier ça sur le store!


#32

Merci pour ta correction ,

j’ai renvoyé le module


#33

Je suis allé jeté un oeil => https://github.com/joeypic/gladys-shell/blob/master/lib/exec.js

Pourquoi tu répète 2 fois le “exec” ligne 14 et 15 ?

Voilà ce que je vois de mon côté, tu peux mettre ça:

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

module.exports = function (params) {

    var command = params.deviceType.identifier;

    if ((typeof command === 'undefined') || command === null || command === '') {
        return Promise.reject(new Error('gladys-shell: This device does not have any command to execute.'));
    } else {
        sails.log.debug('gladys-shell: Executing command ' + command);
        return exec(command);
    }
}

J’ai pas testé avec ton module, juste corrigé à vue, test avant de pousser et si c’est good je publierais :slight_smile:


#34

j’ai testé ça fonctionne merci :slight_smile: .


#36

@alain33: Je ne pense pas que @pierre-gilles pensait a mal :wink:

C’est surtout une bonne pratique à prendre en programmation (il voulais simplement donner un conseil).
Merci de ne pas être agressif dans vos propos :stuck_out_tongue:


#37

@joeypic: Merci pour tes changements rapides :slight_smile: Oui bien entendu comme dis spenceur je mets juste mes retours pour faire progresser la qualité des modules, rien de méchant ni personnel :stuck_out_tongue:

Et donc je suis heureux de t’annoncer que ton module est disponible sur le store ici même! =>

Juste une dernière remarque, maintenant que ton module est publié sur le store, tu peux modifier la description de ton module/ les instructions d’installations. Peux-tu ajouter un peu de style dans ton formatage?

Par exemple le module Voicerss :

Pour ajouter du formatage, tu peux formater ton texte en Markdown ( https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet )

Attention, pour les titres ne met pas des titres plus gros que h4!

Pour l’instant j’ai juste publier ton module sur le web, dès que tu as fais ces petits changements j’active la distribution du module sur les instances Gladys :wink:

Encore bravo pour ton module :metal:


#38

Voila je pense que c’est bon pour le module, dis moi si t trouve un autre problème :smile:


#39

salut @joeypic, je n’arrive pas à executer un script shell avec ton module.

Si j’ai bien compris :

  • on crée un device avec la commande shell que l’on veut executer
  • un devicetype de type binary

mais après comment je fais pour executer ma commande ?

J’ai essayer de créer un scénario mais il ne voit aucun devicetype dans la liste.

Merci pour votre aide


#40

Salut @fractalpit :slight_smile:

tu créer un device avec:

Nom: le nom de ton device
Identifier: /home/pi/scripts_pour_gladys/ton_script.sh
Protocol: shell
Service: shell

ensuite tu créer un sous device avec en type “binary” et tu active “afficher” et “dernière valeur” si tu le souhaite.


#41

ah ok je vais tenter ça
merci