Affichage des courbes de capteurs sur le dashboard

Moi je viens de regarder pour tester ton intégration, globalement sur le fonctionnement / ui pas de soucis. J’ai pas vraiment pu tester ton intégration car mon instance de prod n’a aucune donnée en BDD. En gros il existe uniquement les dernières données. J’ai rien touché de particulier à mon instance de prod …

Pour c’est un capteur xiaomi intégré via zigbee2mqtt

Je cherche pourquoi il stocke pas plus de données …

keep_history à un … J’ai l’impression qu’il y a un bug …

Ah pareil ! Je c herchais ou était cette valeur

2 personnes qui ont la même chose bizarre :smiley:

Oui je cherchais aussi sur l’UI et si d’autres ont ce soucis ça pourrait être intéressant de l’afficher

Bizarre tout ça, je vais enquêter :slight_smile:

Et oui clairement il faut afficher la valeur dans l’UI maintenant qu’on utiliser l’historique

Pour information, @VonOx m’a fait un premier retour sur Github, auquel je viens de répondre ici: Add the ability to vizualize device states on the dashboard by Pierre-Gilles · Pull Request #1248 · GladysAssistant/Gladys · GitHub

Plein de bon retours, autant des bugs que des améliorations pratiques pour que la fonctionnalité soit vraiment utile pour l’utilisateur final.

C’est d’ailleurs ce genre de retour qui m’intéresse plus, je veux que vous disiez si selon vous c’est une fonctionnalité utile et utilisable, ou si il manque des choses.

L’objectif c’est d’avoir un truc en même temps:

  • Très design
  • Configurable et flexible comme un Grafana
  • Mais très facile à utiliser, et avec des valeurs par défaut qui mâche le travail et qui donne un bon rendu sans trop de configuration.

Du coup je vais améliorer ma copie et essayer de proposer une deuxième itération corrigée :slightly_smiling_face:

2 « J'aime »

Petite preview de sur quoi je bosse depuis ce matin, un affichage clean des erreurs dans la vue “tâches en arrière-plan” ! :slight_smile:

J’ai toujours été contre l’affichage des logs pures dans l’UI (car on sait ce que ça donne, ensuite on est flemmard et on fait des intégrations où on demande aux gens d’aller chercher des IDs dans les logs :joy:), en revanche je suis pour une vue de ce style, où:

  • Toutes les erreurs connues sont traduites, et la marche à suivre est clairement expliquée pour l’utilisateur. Exemple ici avec une erreur simple: Gladys a redémarré alors qu’une tâche tournait: c’est un comportement normal, et il faut le préciser.
  • Pour les erreurs inconnues, on l’affiche telle quelle pour que l’utilisateur puisse nous faire un retour, ensuite deux solutions:
    • C’est un bug, on corrige le bug
    • C’est une erreur qui peut arriver dans certains conditions (pas un bug): Exemple “OUT_OF_MEMORY”/“DISK FULL”, etc… Dans ce cas, on ajoute cette erreur à la liste d’erreur traduite, avec un message clair, et avec une marche à suivre pour résoudre l’erreur.

Voilà à quoi ressemble la vue pour l’instant:

Vous en pensez quoi ? :slight_smile:

1 « J'aime »

On est le matin :smirk:

C’est clair car l’erreur est contextualisee par rapport à la tâche.

Un accès au log complet pourrai être un plus ( ça évite à l’utilisateur de faire du ssh) mais c’est un autre sujet.

1 « J'aime »

:joy:

C’est l’erreur complète.

Dans le cas de l’agrégation des capteurs, comme Node.js est single thread, je voulais pas bloquer le thread Gladys principale, et donc l’agrégation est faite dans un worker séparé.

Le log qui est affichée là est le log d’erreur complète envoyée par le worker, donc il n’y a rien de plus à aller voir en SSH :slight_smile:

Dans tous les cas, normalement il ne devrait pas y avoir d’erreur. J’ai ajouté ça justement pour qu’on soit prêt le jour où on pousse une bêtise, ou le jour où quelqu’un avec une énorme DB se prend une limitation technique de sa machine (comme ça on le voit), mais normalement ce cas ne devrait pas arriver très fréquemment.

1 « J'aime »

Je parlais plus du log général, là tu le cas des tâches background.

Mon idée c’était plutôt pour tout ce qui est services etc…
C’est pour ça que je disais que c’était un autre sujet.

1 « J'aime »

La next step pour moi, et c’est une tâche en arrière plan, c’est d’ajouter l’exécution des scènes à cette vue.

L’objectif c’est de pouvoir voir ce qui s’est passé:

  • Pourquoi un trigger a été validé ? Ou pas ?
  • Le plan d’exécution de la scène, et les différentes conditions validée / ou pas

Après ça sera hors de cette PR.

Quelques retours :

  • à peu près 4 minutes pour faire les 3 agrégations (3 mois, une quinzaine de devices) :rocket:
  • le widget sur le dashboard est très simple à comprendre et à utiliser :clap: , il est aussi très réactif, quelque soit l’intervalle choisi
  • même remarque de @VonOx sur le titre. Si c’est un champ avec une assistance de remplissage, il faudrait le mettre après la sélection du device. Sinon, c’est frustrant d’entrer quelque chose et qu’il soit remplacé automatiquement
  • quand il n’y a pas de valeurs, “interval” s’écrit “intervalle” en français :wink:
  • même remarque que @VonOx sur l’affichage de l’heure pour les “Dernière 24h” (il manque un S d’ailleurs)

Super boulot en tout cas, c’est une belle fonctionnalité

Merci pour le retour @cicoub13, ça fait sens!

Je prend note.

Oui je suis d’accord, c’est hyper chiant si c’est en premier en plus :sweat_smile:

J’ai corrigé en mettant le titre à la fin (ça fait plus sens), et j’ai retiré l’auto-remplissage, c’est à l’utilisateur de choisir un nom.

Corrigé :slight_smile:

Je vais corriger !

@cicoub13 t’es sur raspberry ?

Non, sur un Macbook Pro :upside_down_face: donc performances à nuancer. Il y a une image docker dispo ?

Nope , mais ça m’a surpri 4 minutes

A mon avis c’est la partie disque SSD du Macbook Pro qui est rapide, car c’est quasiment que du disque au final (lecture/échantillonage mais c’est assez rapide/écriture). Donc si t’as un bon SSD sur ton Pi, ça devrait être bon niveau performance aussi à mon avis :slight_smile:

Je vais build une image :slight_smile:

1 « J'aime »

J’ai la réponse à cette énigme, c’est tout simple: -1 est censé représenter la valeur « illimitée », c’est ce qui est défini dans le code du signup lorsque tu clique sur le radio button « illimitée ».

Le souci, c’est qu’il y avait un double bug dans le code et dans les tests qui font que cette valeur -1 n’a jamais fonctionnée…

Ce qu’il s’est passé:

  • « -1 » s’est comportée comme si tu voulais garder que les états plus vieux que « dans 1 jour dans le futur » (NOW - (-1) = DEMAIN) :scream: Il n’y avait pas de if(-1) pour bloquer la purge des états, je pense j’ai du oublier en le codant. Comme on utilisait pas encore les valeurs de capteurs passée, ça s’est pas vu. Ce qui m’étonne c’est qu’il me semble que @Terdious a bien un historique illimité sur son instance. Tu confirme @Terdious ? Je pense tu dois avoir supprimé cette variable volontairement en DB non ?
  • Dans les tests, erreur assez bête, j’ai utilisé fake.resolves() pour mocker l’appel à variable.getValue(), sauf que j’ai mal utilisé fake.resolves() et du coup quand j’ai du faire mes tests à l’époque, le -1 se comportait comme voulu, car en gros je me retrouvais avec une fonction retournée au lieu de -1, et donc ça empêchait la purge, bref un truc très bête (c’était au tout début de la v4 il y a facile 1 an et demi je pense :D)

J’ai corrigé le bug et j’ai rajouté des tests plus solides pour s’assurer que ça bouge pas.

Dans l’UI, il y a maintenant la possibilité de modifier la valeur dans les paramètres:

@cicoub13 @VonOx pour résoudre le problème de l’affichage de la date sur la vue “dernière heure” ou “dernière 24h”, j’ai changé la vue par défaut, maintenant je format l’affichage du temps en relatif:

Nouvelle proposition d’un autre type d’affichage, l’affichage bar.

Pratique pour certain type de périphériques type “consommation énergie”, précipitation:

Pour l’affichage des axes, ce sera paramètrable aussi quand ça fait sens :slight_smile:

1 « J'aime »