Une bêta pour Gladys 3.0!

Salut,

Ok pour l’accès à la table param, c’est très pratique !
Je vais donc regarder ca.

Pour la reconnaissance automatique des devices, va falloir que je creuse, je sais que je recois la liste des équipements mais je ne suis pas sur de recevoir son profil, est-ce nécessaire ou bien l’objectif c’est de récupérer l’id de l’équipement puis le module de gestion des équipements fait le reste justement ? auquel ca je devrais pouvoir m’en sortir.

Tu entends quoi par profile ?

En fait c’est à ton module de créer chaque device dans Gladys, sachant que tu dois créer pour chaque device:

  • Le device ( le périphériques physique )
  • les devicetype associés ( pour chaque device physique peut être associé plusieurs “fonctionnalités”, exemple : capteur multi capteurs ( température/humidité) , il faut donc créer un deviceType par feature pour pouvoir ensuite enregistrer des données pour chaque type.

Inspire toi du module hue encore => https://github.com/GladysProject/gladys-hue/blob/master/lib/getAllLights.js#L17

Ca va pas être simple, je récupère mes équipements sous ce format la:

{ global: '<no definition>', TCM310_0: 'opened', WEB: 'Initialized', 'WEB_192.168.1.13_59754': 'Connected', WEBphone: 'Initialized', WEBtablet: 'Initialized', EnO_0089C766: 'M: off E: 2048', EnO_018644E6: 'on', EnO_018F6CB0: 'A0', EnO_0190503B: 'A0', EnO_UTE_0189DAC7: 'off', EnO_contact_018029C1: 'closed', EnO_contact_0181DF24: 'open', EnO_contact_018BBC4C: 'closed', EnO_sensor_018A796A: '20.5', EnO_switch_0029CDD5: 'AI', EnO_switch_002C0226: 'B0', eventTypes: 'active', initialUsbCheck: '2016-05-08 16:30:20', Logfile: 'active', SVG_EnO_0089C766: 'initialized', SVG_EnO_018644E6: 'initialized', autocreate: 'active' }

Donc il faut que je déduise les équipements qui en sont vraiment, puis que j’en déduise les types.

Par ailleurs, quels sont les différents types possible/connues de gladys ?

Si je regarde pour Hue, tu as mis Brightness, pour mon détecteur de luminosité, Brightness correspond-il ?

Ah oui effectivement les data sont pas hyper propre… Tu es sur qu’il n’y a pas une API qui te liste tous les périphériques ? Il n’y a pas une doc propre qui te permettre de faire un truc factorisable ?

Sinon, dans les data que tu me donne la, il y a un ID unique du capteur ? que tu puisse identifier ton capteur dans le champs “identifier” ?

[quote]Par ailleurs, quels sont les différents types possible/connues de gladys ?

Si je regarde pour Hue, tu as mis Brightness, pour mon détecteur de luminosité, Brightness correspond-il ?[/quote]

Les types possibles sont infinies, il n’y a pas de liste. Globalement, pour l’instant je fais la différence entre deux types :

  • binary ( qui deviendra un bouton on/off dans l’interface pour les actionneurs )
  • le reste ( qui deviendra un slider entre la valeur min et max dans l’interface pour les actionneurs )

Après à l’avenir je compte rajouter de plus en plus de picker différents, par exemple un type “color” pourra être affiché avec un colorPicker, des choses de ce type.

Ici pour toi je mettrais “luminosity” tout simplement. Et “sensor: true” vu que c’est un capteur :slight_smile:

Ok je vois la logique, je vais expérimenter tout ca.
Pour des capteurs type Ouverture de porte, c’est du binaire mais sans action derrière, je vais voir comment je peux gérer ca.

Coté source de données, je vais creuser… en fait j’utilise fhem.js qui cause à fhem via telnet et gladys cause à fhem.js via web socket.

Donc soit je creuse coté fhem mais je crois pas qu’il y ait d’API.
Soit je modifie fhem.js pour qu’il soit plus “propre”

A suivre;.

PS: un Update sur les Paramètres ca serait pas mal :wink:

Edit:
Après analyse du module fhem.js, ca me parait compliqué d’obtenir des infos plus propre puisqu’il se base sur la seule commande listant les équipements dans FHEM :

EnOcean: EnO_0089C766 (M: off E: 2048) EnO_018644E6 (off) EnO_018F6CB0 (A0) EnO_0190503B (A0) EnO_UTE_0189DAC7 (off) EnO_contact_018029C1 (closed) EnO_contact_0181DF24 (closed) EnO_contact_018BBC4C (closed) EnO_sensor_018A796A (20.4) EnO_switch_0029CDD5 (BI) EnO_switch_002C0226 (B0)

Je pense que je vais opter pour le choix de définir dans le nom de l’équipements, ce qui définit son “profile”.
Ca signifie que si je veux que mon module soit reconnu dans Gladys, il devra avoir une nomenclature spécifique.
Genre
EnO_binary_contact_XXX
EnO_sensor_temperature_XXX

En respectant une norme, je devrais m’en sortir… C’est pas ce qu’il y a de plus propre mais j’ai pas mieux.
Pour faire mieux, faudrait que je réintègre fhem.js dans le module Gladys … !

C’est tout simplement un type = binary avec min = 0 max = 1, et sensor = true, c’est géré tout seul par Gladys :slight_smile:

C’est à dire ? pour mettre à jour un paramètre ?

gladys.param.setValue() définie la valeur qu’elle existe ou non, pas besoin d’update !

Ok ! Je comprends pas tout à ce que te ressors fhem, tiens moi au courant de l’avancée histoire que je te dise si ça s’intègre bien comme prévu dans Gladys.

Pardon je me suis mal exprimé pour l’update des paramètres, je voulais effectivement dire de pouvoir updater un paramètre, via l’IHM.

Je continue d’avancer sur mon module et je te tiens au courant, sur la V2, j’ai déjà pas mal d’usage de mes équipements, comme faire une action sur une ouverture de porte (donc pas un actionneur mais juste un sensor binary).

Par ailleurs, je viens de constater que lorsque j’exporte ma fonction config dans l’index, la fonction est exécuté au démarrage sans attendre l’event ready de gladys, config ne devrait-il pas être appelé que lorsqu’on clic sur le bouton configuration du module ?

Ou alors je me trompe quelque part … je continue de creuser :confused:

C’est possible aussi ! Tu as juste à modifier la variable dans la text box, ça auto save normalement… :slight_smile:

Tu as un lien vers ton fichier index.js sur github ? tu as bien exporté comme je le fais dans le module hue par exemple ?
Normalement config est appelé uniquement lorsque l’on clique sur le bouton configuration !

Ok, j’avais pas fait attention.

[quote=“admin”]
Tu as un lien vers ton fichier index.js sur github ? tu as bien exporté comme je le fais dans le module hue par exemple ?
Normalement config est appelé uniquement lorsque l’on clique sur le bouton configuration ![/quote]

Non effectivement, j’ai mis un lien bidon, je l’ai pas poussé sur github.

Après j’exporte comme cela:

[code]module.exports = function(sails) {

var shared = require('./lib/shared.js');

// var config = require(’./lib/config.js’);

gladys.on('ready', function(){
    return gladys.param.getValues(['FHEM_SERVER','FHEM_PORT'])
    .spread(function(host, port){
            shared.getApi(host, port);
    });
});

return {
  config: config
};

};
[/code]

J’ai rajouté le lien github mais ca ne corrige pas mon comportement.

En testant le module Hue, j’ai la même chose, c’est à dire qu’en mettant un sails.log.info(‘test’) test est écrit dés le démarrage de sails:

[code]jp@gladysv3:/usr/lib/node_modules/gladys$ sails lift

info: Starting app…

info: test[/code]

J’ai du mal m’exprimer, je voulais juste que tu me donne un lien vers le fichier pour que je puisse voir ton code ^^

Ah intéressant !

c’est plus grave dans ce cas là, je savais que sails.js appelait au démarrage la fonction “configure”, mais pas “config”… c’est peut être un bug, je vais regarder, heureusement que tu vois ça ! :slight_smile:

github.com/Jean-PhilippeD/gladys-fhem

En fait je me trompe peut être mais toutes les fonctions exportées dans index.js sont exécutées au lancement j’ai l’impression… ou alors je suis à coté de la plaque…

Edit: quoi que pas toute puisque j’ai essayé la fonction install.js et rien se passe (ni à l’install ni après…)
Si tu veux jeter un oeil par ailleurs voir si je m’y prends bien pour l’install :slight_smile:

Bon, j’ai tout simplement demandé au fondateur de Sails.js pourquoi la fonction “config” était appelée au démarrage, et bien il m’a répondu => https://twitter.com/mikermcneil/status/742769470028943361. Il va falloir changer de nom de fonction, je n’avais pas pensé que sails utilisait déjà la variable “config” d’un module…

Je réfléchis à un nom pas utilisé pas sails.js et je reviens vers toi. Merci d’avoir trouvé le bug :slight_smile:

Par contre les autres fonctions ne sont pas appelés au démarrage, chez moi je n’ai pas le problème…

La fonction “install” est appelée après un redémarrage de Gladys quand tu as installé le module automatiquement via Gladys ( via le store ou le panneau “avancés” dans la partie module ). Quand tu es développeur je te conseille de te faire un script gladys qui appelle ta fonction install, c’est plus simple pour tester !

EDIT: le fondateur de sails a corrigé le bug en 5 minutes sur sails.js, ça c’est de l’open source réactif :slight_smile:

hé bé !

Super !

Pour les autres fonctions, je vais vérifier, j’ai p’tet fini par m’emmeler les pinceaux.

Concernant l’install, je vais re-checker après un redémarrage, je n’ai peut être pas vérifié cela.

ok pour le script, je n’y avais pas pensé. :slight_smile:

Merci à toi aussi pour la réactivité :wink:

C’est pushé sur github ! ( on est sur la branche master d’ailleurs, j’ai mergé la branche v3, étant donné qu’elle ne sert plus à rien, c’est deprecated… et que Gladys est presque prête )

Désormais la fonction ne doit plus s’appeler “config”, mais “setup” :slight_smile: je vais corriger dans la doc et partout ! dis moi ce que ça donne chez toi.

[quote=“admin”]C’est pushé sur github ! ( on est sur la branche master d’ailleurs, j’ai mergé la branche v3, étant donné qu’elle ne sert plus à rien, c’est deprecated… et que Gladys est presque prête )

Désormais la fonction ne doit plus s’appeler “config”, mais “setup” :slight_smile: je vais corriger dans la doc et partout ! dis moi ce que ça donne chez toi.[/quote]

Ca marche nikel ! :slight_smile:

J’ai réussi à créer un device et à lui associer une valeur.
Dans mon cas un capteur de temperature.

Il faudrait par contre pouvoir enregistrer des numerique plutot que des entiers pour le champ value de la table devicestate parceque 20,2 °C se transforme en 20°C

Par ailleurs, dans la vue des Graphes, je pense que le label du device sélectionné devrait être nom + pièce plutôt qu’actuellement le nom (ou id ?) + type

Effectivement, j’ai oublié de faire le changement je m’étais fais la remarque, je change de suite. EDIT: c’est pushé

nom + piece + type dans ce cas là :slight_smile: Parce que tu peux avoir un capteur 4 en 1 qui fait température + humidité +… et tu veux savoir quel type tu sélectionne dans la liste.

[quote=“admin”]
nom + piece + type dans ce cas là :slight_smile: Parce que tu peux avoir un capteur 4 en 1 qui fait température + humidité +… et tu veux savoir quel type tu sélectionne dans la liste.[/quote]

C’est juste !

Tant que je suis dans les questions, comment puis-je récupérer l’id du devicetype lorsque je veux insérer une valeur recue sur un device, sans avoir à faire un gladys.utils.sql() ?

Je n’ai pas trouvé de fonction pour cela.

getByIdentifier: 'SELECT * FROM device WHERE identifier = ?;'

Ne me renvoie l’id du device mais pas du devicetype, hors c’est la jointure sur devicetype qui est fait vers devicestate, si j’ai bien tout pigé :smiley:

Héhé pas bête, tu découvre les fonctions qui manque (c’est l’intérêt de cette bêta), je n’avais pas encore eu ce cas mais je vois très bien qu’une fonction manque.

Je verrais bien une fonction dans deviceState pour créer un state à partir d’un identifier et d’un type, genre :

gladys.deviceState.createByIdentifier(identifier, service, type, state); 

Je m’y pense de suite. Je te dis dans ce thread quand c’est pushé :slight_smile: