Une première alpha de Gladys 3.0

Salut à tous!

J’ai sorti ce week end de Pâque une première alpha de Gladys :slight_smile: J’ai écris un petit tutoriel expliquant comment installer cette v3 sur un serveur avec Docker => http://gladysproject.com/fr/article/gladys-et-docker

Si vous voulez installer Gladys sur votre machine “manuellement” (sans Docker), pour développer, il vous suffit de cloner le repo :

git clone https://github.com/GladysProject/Gladys.git gladys && cd gladys

Ensuite de vous mettre sur la branche v3 :

git checkout v3

D’installer les dépendances :

npm install && npm install -g grunt-cli

( ou avec sudo suivant vos droits )

D’initialiser Gladys :

grunt buildProd && node init.js

Puis de lancer Gladys :

node app.js

Je suis conscient que ça peut être un peu long d’installer ça manuellement (c’est normal c’est pour dev ici). Sur Raspberry Pi je fournirais une build toute prête comme je disais !

N’hésitez pas à me donner vos retours !

Propre ! Beau boulot Pierre-Gilles

C’est du détail mais je passerai les tables en condensed ( table-condensed ).
Aussi l’engrenage en haut à droite du groupe d’onglet, il sert à rien. Peut être dans le breadcrumb plutot ?

Rien d’autre pour l’instant :wink:

Merci !

Pour les tables en condensed, tu trouves les lignes des tableaux trop épaisses ? J’ai peur que ça fasse trop fin condensed… Je vais tester :wink:

Pour l’engrenage inutile, j’ai pas encore mis d’actions, si il est inutile je le retirerais.

Ah oui, et je n’ai pas dis, petite surprise, fais Ctrl + espace sur n’importe quel écran de l’interface, tu verras une petite feature surprise :wink:

( Qui fonctionne, mais comme derrière ton Gladys n’est connecté à rien, ça ne fera pas grand chose… Regarde les logs et tu verras ce que ça donne ! )

Super ! Par contre pour initialiser la base de donnée on peut en créer une avec un autre nom ?

Oui ! mais du coup il faut aussi passer en variable d’environnement à Gladys le nom de ta base.

La variable d’environnement s’appelle : MYSQL_DATABASE côté Gladys !

Ok, merci, je tenterais ça en soirée !

[quote=“admin”]
Pour les tables en condensed, tu trouves les lignes des tableaux trop épaisses ? J’ai peur que ça fasse trop fin condensed… Je vais tester ;)[/quote]

Oui un petit peu mais c’est du détail

Ok

[quote=“admin”]
Ah oui, et je n’ai pas dis, petite surprise, fais Ctrl + espace sur n’importe quel écran de l’interface, tu verras une petite feature surprise :wink:

( Qui fonctionne, mais comme derrière ton Gladys n’est connecté à rien, ça ne fera pas grand chose… Regarde les logs et tu verras ce que ça donne ! )[/quote]

Sending 500 ("Server Error") response:
 Error: No command detected

Edit: tu peux activer le BBCode :wink: ?

[quote]Sending 500 (“Server Error”) response:
Error: No command detected[/quote]

C’est bon signe ! Cela veut dire que pour la commande que tu avais tapée, le réseau de neurone de Gladys n’a détecté aucune commande :slight_smile: Par curiosité tu avais tapé quelle question ? Par contre, tu avais spécifié langue française ou anglaise lors de l’inscription ? pour l’instant seul le réseau de neurone français est véritablement performant ( je l’ai construire grâce aux phrases du questionnaire en ligne que j’avais fais tourner en français )

Si tu es bien en français, tape des commandes style “allume la lumière”, “éteins le salon”, enfin ce que tu veux, et regarde comment Gladys analyse ça dans les logs :wink: ( tu verras toujours des grosses erreurs vus que Gladys ne pourra rien faire ensuite, genre “service does not exist”, mais au moins tu pourras voir la commande détectée )

Le BBCode en dessous de ton message tu as une options : “Désactiver le BBCode” qui était cochée je crois… :wink:

Je lui ai demandé de tout et rien lol

  • Donne moi la météo de demain
  • Fait moi un café
  • Raconte moi une blague

:smiley:

Et alors dans les logs ? :smiley:

Je vais peut être mettre en ligne une petite expérience ou les gens pourraient parler à Gladys depuis le site Gladys, histoire de voir comment réagit le truc, et proposer aux gens d’enrichir le système en proposant leurs actions quand Gladys ne reconnait pas le texte. Voir carrément intégrer ça dans Gladys, ça pourrait être super sympa l’aspect “communautaire” ou tout le monde peut proposer des phrases depuis Gladys :slight_smile:

Juste une question pour ma culture personnelle

J’ajoute à la mano des infos en BDD ( Bah oui c’est "Work in progress… " :wink: ), et dans certaines tables il y’ a une colonne uuid.
A première vue chaque chaque uuid est différent mais rien n’empêche d’en avoir 2 identiques ( en tout cas côté mysql ).

Ça peut paraitre bête mais a quoi ça sert ? L’id n’est il pas suffisant ? ( oups 2 questions :smiley: )

Pour la première question, tu parles de quelle table en particulier ? :smiley: Parce que c’est pas normal, j’ai du oublié un “unique” quelques part !

En fait j’ai mis des uuids dans certaines tables quand ce sont des données qui sont communes à tous les utilisateurs/ ou qui a un moment seront utilisés entre plusieurs instances gladys.

Exemple 1 : table sentence

La table “sentence” regroupe une liste de phrases qui sont utilisées pour entrainer le réseau de neurone qui va classifier les questions de l’utilisateur. ( “Allume la lumière”, etc… ). Ces phrases sont sur un repo github et l’objectif est de mettre régulièrement à jour cette base de phrases afin de pouvoir améliorer Gladys au fil du temps sans forcément mettre à jour le software complet.

Imaginons du coup qu’une phrase avait une erreur ( du genre j’avais mal orthographié le service appelé ), et que je veuille mettre à jour sur toutes les gladys cette phrase, il me faut pouvoir identifier avec un id unique cette phrase. Or l’attribut “id” dans la table est propre à la db du user, et peut être différente dans chaque base ( car le user peut rajouter des phrases à lui potentiellement ). La seule solution est d’avoir un “uuid” unique qui permette d’identifier et de mettre à jour cette phrase :slight_smile:

Exemple 2 : table House

  • Pour la table House & Machine, la raison est différente. Imaginons que tu ai plusieurs instances de Gladys, une dans une maison et une autre dans ta maison de vacances. Imagine que tu veuille mettre en place un bus MQTT central où sont publié des events (genre “allume lumière 1” ). Les deux instances sont connectés au bus, cependant elles ne doivent attraper que les events liés à leur maison/machine, et du coup il faut une façon de pouvoir identifier de façon unique chaque maison/machine, et comme dans l’exemple précédent l’id n’est pas suffisant car juste unique dans la DB d’une machine.
    Le nom de la maison pourrait être l’élément différentiateur, mais bon je préfère générer un UUID qui identifiera de façon unique la maison.

C’est vrai que j’aurais pu du coup virer l’id simple qui est inutile dans ces tables, après d’après ce que j’ai lu les perfs sur les JOIN sont bien moins bonne quand la clé primaire est un UUID… Mieux vaut garder l’id integer en local à mon avis

edit: Je suis allé jeter un coup d’oeil, visiblement la table House et Machine n’avait effectivement pas la contrainte “unique”, j’ai corrigé ça :slight_smile:

Merci pour la réponse détaillée, j’ai pigé le truc et c’est tellement logique au final.

Ouai c’était ces deux tables là, la sentence est ok :wink:

Sinon tu remarqueras que certaines tables qui pourtant sont partagées avec tous les utilisateurs n’ont pas d’uuid ( je pense à eventType ). C’est parce que ces tables ont déjà un élément unique pour les différencier (ici l’attribut “code” qui est le code de l’évènement , genre “wake-up” ).

Je n’ai ajouté d’UUID que lorsque c’était nécessaire :slight_smile:

Salut,

J’ai tenté de faire une installation manuelle à partir de JessieLite.
J’ai donc lancé les commandes indiquées, mais j’ai l’erreur suivante sur la commande npm install && npm install -g grunt-cli.

> bcrypt@0.8.5 install /home/pi/gladys/node_modules/bcrypt
> node-gyp rebuild

/bin/sh: 1: node: not found
gyp: Call to 'node -e "require('nan')"' returned exit status 127. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:344:16)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:809:12)
gyp ERR! System Linux 4.1.19+
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /home/pi/gladys/node_modules/bcrypt
gyp ERR! node -v v0.10.29
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian

Une idée ?

Tu as installé Node.js de quelle manière ?

Si tu ne l’as pas installé comme ça => github.com/GladysProject/Gladys … all.sh#L28 , réinstalle Node :slight_smile:

OK ça fonctionne !

En revanche pour les commandes, ce n’est pas très clair pour moi, il faut faire un mix des commandes mentionnées sur la 1ère page de ce topic et des commandes indiquées sur la page https://github.com/GladysProject/Gladys/blob/v3/rpi-install.sh#L28 ?

Je ne sais même pas comment gladys s’est installé, si c’est par :

git clone https://github.com/GladysProject/Gladys.git gladys && cd gladys

ou par :

sudo npm install -g gladys

En remarques également, les modules, on peut reprendre les anciens et les déposer toujours dans api/hooks ?
Pour les devices, ils s’ajoutent obligatoirement tout seul via le module qui les gère ou on peut en ajouter manuellement ?

Pierre Gilles suite à notre discussion twitter, j’ai recloner le module

Même retour pour:

gladys.modules.hue.search() .then(function(bridges){});

et

[code]
gladys.modules.hue.register({ipaddress: ‘192.168.1.85’})
.then(function(){

})
.catch(function(err){
// you forgot to press the button…
// or bridge is not responding
});[/code]

Pour être sur de l’IP:

[code]~$ hue search
1 stations found

1: 192.168.1.85[/code]

aah je vois, my bad…

Il faut la toute dernière version de Gladys, et tout simplement… je l’avais pas poussé sur le github :stuck_out_tongue:

Je viens de pousser tout ça :slight_smile:

Mais bon, c’est totalement expérimental ^^

Aïe d’ailleurs ça a pété les builds travis… Je peux pas regarder ça maintenant, je verrais demain si j’ai le temps

@admin, tu as dû zapper mes questions :smiley: