Parlons de Gladys V4

Salut à tous!

J’espère que vous avez passé un bon week-end.

Hier et ce matin j’ai travaillé sur la définition des états / des transitions entre états. Cela peut paraître un sujet tout bête, mais c’est une vraie réflexion.

Chaque entité dans Gladys est un automate fini avec plusieurs états et des transitions entre chaque état. Ces états et ces transitions il faut les définir et les nommer.

Le sommeil d’un utilisateur

4 états:

  • Réveillé
  • Endormi
  • Doit se réveiller
  • Doit se coucher

Voilà le schéma des transitions. Chaque transition correspond à un événement dans Gladys, un “trigger” sur lequel n’importe quel scène peut se brancher.

L’alarme de la maison

Dans Gladys 4, j’amène la notion d’alarme pour la maison afin que Gladys puisse enfin est une centrale d’alarme propre et clair.

Comme le sommeil, 4 états:

  • Armée
  • Désarmée
  • En cours de tentative d’armement
  • En cours de tentative de désarmement

La présence à la maison des utilisateurs

L’exécution d’une scène

L’état du soleil

La présence au travail

Enfin exemple d’un périphérique de category "light"

Si ces exemples vous parle/vous font réagir, n’hésitez pas, rien n’est figé :slight_smile:

Oui tu parles de scenario, les graphes c’est le Flow entre les états.

Et il y’a bien l’état armed pour l’alarme.

En fait dans ce diagramme effectivement j’avais assumé que la partie « activation » de l’alarme était plus côté scénario, après je pense que tu as raison, ça vaudrait le coup de le mettre là, au moins pour définir les noms des différentes transitions :slight_smile:

Merci du retour!

Salut à tous!

Aujourd’hui gros boulot sur le frontend, je suis dans le dur du sujet :slight_smile:

Voilà un petit preview, vous avez des retours/idées pour l’organisation de la barre de navigation je suis preneur!

Pour le login j’hésite entre deux version…

Dites moi ce que vous en pensez!

1 « J'aime »

Avec logo pour le login pour moi. :stuck_out_tongue:
D’ailleurs, tu renommes pas Gladys Assistant également dans le dashboard ?

Je pense partir sur ça, sur Twitter tout le monde est unanime :stuck_out_tongue:

Bien vu! :slight_smile:

Nouvelle page, les integrations:

Hello @piznel! :slight_smile: Top tout ça!

Chaque périphérique Z-Wave a des paramètres (ex: fréquence de rafraichissement, sensibilité du capteur luminosité, seuil de détection d’un intru, etc…) que tu peux régler. J’ai proposé un DeviceParam pour pouvoir stocker ces paramètres, qui pour moi ne sont pas vraiment des features, ce sont des paramètres.

Ce DeviceParam pourrait servir à stocker d’autres choses, exemple: les credentials d’une caméra IP, ou autre.

Tu vois l’idée?

ça y est Philippe la machine est de retour :smiley:

ça se rapproche de ce qu’on s’est dit je trouve non? une category + un type?

A la différence de quelques différences de nommage, mais l’idée est la même!

Je suis 100% d’accord pour harmoniser!

Il faut qu’on fasse un choix qui ratisse assez large pour pas perdre d’information sur les périphériques qui permettent des valeurs fines, et il faudra convertir la couleur avant de l’enregistrer dans Gladys.

Le module hue c’est compliqué, tu as 3 deviceType: hue et saturation et brightness, c’est du HSL si je me trompe pas.

Milight j’ai l’impression qu’ils font du RGV mais il y a des fonctions de conversions HSL dans ce module par exemple => https://www.npmjs.com/package/node-milight-promise (rapide recherche)

A nous de décider quel format on préfère dans Gladys, et à coder les différents getters/setters dans Gladys 4 pour que le module puisse juste envoyer ses data

1 « J'aime »

Et hop le filtering qui fonctionne sur la page intégrations, ça en jette!

https://twitter.com/pierregillesl/status/1098166550345830406?s=20

Je pense oui, histoire que chacun n’ait pas à tout redévelopper :slight_smile: Après pour les cas très particulier le développeur devra coder lui même sa fonction de transformation dans un sens/dans l’autre.

Du coup tu verrais quoi comme format de couleur toi? Je pense il faudrait un format entier comme ça on peut le stocker et le colorpicker fonctionne, t’en pense quoi?

Je suis d’accord!

J’ai trouvé ça => https://www.npmjs.com/package/color-convert

On va forcément s’en servir mais bon c’est déjà des super exemples

Mes 2 centimes, un pourcentage est plus simple pour l’utilisateur final. Derrière comment ça se passe c’est une autre histoire :metal:

C’est une expression “my 2 cents” vulgairement traduite :grinning_face_with_smiling_eyes:, juste pour signifier ma toute petite contribution à la discussion

1 « J'aime »

Bonjour,

Cela serait peut être bien de prévoir nativement Gladys v4 avec un front-end et un back-end

  • le front-end donne accès au box ( boutons, infos,…)
  • le back-end accès aux paramétrages (ajout périphérique…)

avec aussi la possibilité de thème coté front-end
ainsi suivant l’endroit, le terminal on accède au front-end sur le thème désiré (avec un paramètre défini coté back-end [ user → terminal → template])

:notebook_with_decorative_cover: front-end
|------- :notebook_with_decorative_cover: theme1
|------- :notebook_with_decorative_cover: theme2
|------- …
:notebook_with_decorative_cover: back-end

C’est effectivement le cas dans Gladys 4, le front est une PWA avec preact et le back un serveur Express :slight_smile:

Pour le thème, Gladys 4 va offrir la possibilité de créer des dashboard personnalisé (et pas qu’un seul dashboard, plusieurs!), donc ça devrait répondre au besoin.

Pour avoir différentes UI, pour l’instant on va se concentrer sur créer une seule UI, c’est déjà assez complexe comme ça :slight_smile:

1 « J'aime »

:ok_hand::+1: Top merci

Les milight gèrent de 2700k à 6500k et les hue de 2000k à 6500k.

Salut,

Je partage avec vous une réflexion que j’ai eu en voyant le “Light device State”. Ne devrait-on pas représenter le changement de la température de la couleur ? Après c’est vrai que toutes les ampoules ne le gèrent pas, mais tout comme le HSB en fait. Du coup est-ce que le schéma ne devrait pas représenter que les états ON/OFF?

Ce schéma était un exemple non-exhaustif :slight_smile: Pour les ampoules, il faut qu’on choisisse effectivement le format qu’on va gérer, pour l’instant on est plus parti sur l’approche philips hue, après je pense qu’on va voir lors de l’implémentation avec les différents fabricants si ça se plug bien ou pas, et comment on résout les différentes incompatibilités.

j’adore, c’est très épuré. super boulot @pierre-gilles

Salut à tous!

Aujourd’hui j’ai travaillé sur tout le moteur de scénario, avec deux objectifs:

  • Concevoir un moteur riche avec toutes les fonctions dont on a besoin (Trigger + conditions multiples avec des ET/OU + actions)
  • Concevoir un moteur très performant et économe en ressource

Ce soir je viens de finir une première version minimale du moteur, et… ça dépote!!

1/ J’ai défini les différents évènements, états, et conditions dans un fichier de constantes. Ce n’est pas une liste exhaustive, mais cette première liste m’a permis de commencer :slight_smile: Je l’étofferais au fur et à mesure des développements (il faut pour cela écrire les schémas UML d’états, je fais ça proprement).

2/ Tous les états sont stocké dans un store en mémoire pour des performances en lectures maximales. Les états sont persistés sur disque mais cette persistence n’est utile que pour la visualisation (courbes), pas l’interrogation en temps réel dans un scénario.

J’ai donc fais une petite simulation de performance avec mon premier moteur.

J’ai créé un cas d’usage typique voir un peu extrême:

  • Un utilisateur avec 300 scénarios (généré aléatoirement, avec des triggers au hasard)
  • 5 conditions par trigger
  • 1000 états à surveiller
  • Pas de travail asynchrone. L’objectif du benchmark n’est pas de tester la performance d’une tierce-partie, mais juste du moteur en lui même, donc on évalue ici juste la performance de l’évaluation des conditions, en gros: combien le moteur peut manger par seconde!

La vidéo parle d’elle même =>

https://twitter.com/pierregillesl/status/1100344419742404608?s=20

On est sur du 1.35 millions d’évènements par secondes héhé :rocket:

Merci! :slight_smile:

3 « J'aime »

Biensûr! C’était dans le manifeste je crois :slight_smile:

1 « J'aime »

@piznel:

J’ai ajouté le delay au actions, c’était une action facile :wink:

Tu peux faire dans des actions:

[{
  "type": "delay",
  "seconds": 10,
  "then": [{
    type: "light.turn-on",
    deviceFeature: "piznel-lamp"
  }]
}]

Cette séquence d’action va attendre 10 secondes, puis allumer la lampe qui a pour selector “piznel-lamp”! :slight_smile:

Note: Tu peux utiliser “milliseconds”, “seconds”, “minutes”, ou “hours” !

3 « J'aime »