Utilisation de l'agenda/calendrier dans les scènes

@Romuald_Pochet Merci pour ta PR!

Je vois que tu es parti sur ça pour le développement :

Avant même de parler du code, je pense que ce serait bien qu’on se mette d’accord sur ce qu’on veut au niveau de la feature, car pour moi il y a plein de façon de faire ça, et c’est pas une feature simple:

  • Typiquement, le trigger “évènement démarre” est utile, mais souvent ce qu’on veut c’est “evènement démarre dans 5/15/30 minutes” (si tu veux recevoir un reminder 15 minutes avant de partir à un rendez-vous pas exemple). Sachant que c’est un paradigme très différent, ça va changer énormément l’implémentation (vu qu’il faut programmer chaque trigger et pas chaque event), donc il faut y penser avant.
  • Au niveau de la sélection de l’évènement, ça marche comment ? Il y a une liste et tu sélectionne un évènement dans la liste ? Tu prend tous les évènements qui contiennent cette string ? A mon avis il y a une vrai réflexion à avoir là-dessus, ça peut-être utile d’avoir un trigger qui se déclenche sur un évènement précis, ou sur un match d’un texte précis, dans tous les cas il faut que ce soit clair dans l’UI.
  • Qui a le droit de voir quels calendriers ? C’est un sujet très chaud, on en parle ici avec @bertrandda : [Caldav] Configuration multicomptes - #13 by pierre-gilles. Il faut se mettre d’accord avant de faire ce dev.

Désolé si je pose beaucoup de questions, c’est une feature vraiment sympa et si on veut répondre au besoin de tout le monde il faut se poser les questions avant ! :slight_smile:

Merci en tout cas d’avoir commencé le développement @Romuald_Pochet, c’est du beau boulot en tout cas :pray:

Je me demande est que la feature que tu présentes ne répond qu’à ton besoin @Romuald_Pochet ?

Pour rappel les demandes lié à cette feature :

Avais tu bien vu qu’on avait fusionner les deux demande @pierre-gilles ? :slight_smile:

Bon courage

Bonjour,

En effet, la feature est bien sur incomplete! J’ai juste démarrer les développements de quoi également rentré dans le coeur de Gladys (et surtout la partie UI) :wink: N’est-ce pas une bonne manière de travailler?

  1. Le reminder est géré via le reminder donné par CalDav. Mais il faudrait mettre à jour le modèle de donnée “calendar_event” pour inclure la valeur; On pourrait aussi spécifier le reminder lors de la création de la scène et donc on crée le déclencheur lors de la création de la scène. Mais dans ce cas, on perd le déclenchement hors scene par ex. une notification sur l’UI ou Telegram.
  2. “Savoir récupérer des info pour des conditions d’événements”: a faire
  3. La condition actuelle ‘user’ + ‘calendrier’ + ‘evenement’, où ‘évènement’ est une expression régulière (ex. condition Papa/maman marche pour Papa, Maman Papa/maman, j’avoue c’est assez spécifique à mon besoin)
  4. Les droits ne sont pas gérés et ca me semble en effet assez complexe.

Discussion ouverte :wink:

Aucun problèmes il n’y avait rien de négatif dans mon message !! :stuck_out_tongue:

ça justement ça se débat, à mon avis c’est plus un truc qu’on voudrait gérer dans la scène plutôt que dans le calendrier, car typiquement on pourrait vouloir plusieurs scènes qui se déclenche sur le même event, exemple:

  • 30 minutes avant le rendez-vous, m’envoyer une notif Telegram
  • 15 minutes avant, si je n’ai pas quitté la maison, diffuser un son dans la maison
  • 5 minutes avant, faire flasher toutes les lumières du salon !

A mon avis, la programmation doit être spécifiée dans le trigger plus que dans le calendrier, c’est d’ailleurs plus simple à comprendre en terme d’UX je pense.

Là dessus, il faut peut-être proposer plusieurs cas:

  • Sélection d’un évènement précis (est-ce que c’est utile?)
  • Evènement dont le titre contient ce texte (et là dessus, il faut être clair dans l’UI, le mot « regex » n’est pas une évidence pour tout le monde :slight_smile: )

Je pense qu’il faut que la discussion avec @bertrandda continue avec ce développement en tête pour qu’on puisse justement faire un truc qui soit cohérent dans l’ensemble :slight_smile:

C’est le but :slight_smile:

En tout cas bravo pour le premier développement, c’est top ! Mes remarques ne sont qu’à but positif, l’objectif c’est surtout d’avancer!

1 « J'aime »

Citation
Aucun problèmes il n’y avait rien de négatif dans mon message !! :stuck_out_tongue:

Aucun soucis, c’est juste mon premier vrai PR donc je voulais être sur d’avoir bien fait les choses pour ne pas tout casser :wink:

@Romuald_Pochet Pour information, pour le partage des calendriers, on part sur 2 types de calendriers avec @bertrandda:

  • Calendrier « partagé » accessible à tous les utilisateurs de l’instance Gladys et dans les scènes
  • Calendrier « privée » affiché uniquement dans la vue « Calendrier » pour l’utilisateur qui l’a configuré.

Donc pour toi, tu vas devoir faire une requête pour récupérer tous les calendriers « partagés » dans les scènes.

La discussion est disponible ici:

1 « J'aime »

Pour info, je viens de merge le partage de calendrier, le travail sur les scènes peut donc reprendre :sunglasses:

Salut à tous !

Cette fonctionnalité étant assez demandée, et comme je viens de merger une PR qui débloque ce comportement, j’ai travaillé sur une petite spécification fonctionnelle pour qu’on puisse au moins être d’accord sur le fonctionnement souhaité (c’est le plus dur :stuck_out_tongue: ).

Spécification fonctionnelle pour le déclencheur de scène

Je propose un déclencheur dans les scènes qui pourrait se configurer de la façon suivante :

Les fonctionnalités:

  • Possibilité de déclencher une scène si un évènement quelconque d’un calendrier arrive dans XX minutes/heures/jours. Possibilité de sélectionner un ou plusieurs calendrier. Le calendrier doit être un calendrier partagé, car les scènes sont partagées au sein d’une instance.
  • Possibilité d’ajouter une condition sur le titre de l’évènement. Ex: est exactement “cours de musique”, contient “piscine”, contient “travail”, contient “école”, commence par “Cours”, fini par “volley”.
  • Le déclencheur s’exécute à l’avance par rapport à la date de début ou de fin de l’évènement : 10 minutes avant, 1 heure avant, 1 jour avant. La granularité la plus fine est la minute. Il est possible de mettre 0 minutes pour être prévenu à l’heure de début/fin de l’évènement

Spécification fonctionne pour la condition dans les scènes

Pour la partie conditionnelle dans les scènes, l’idée est de pouvoir continuer ou interrompre une scène si un évènement dans un/plusieurs calendrier donné répond à une condition et est en cours.

Exemple:

  • Si un mouvement est détecté
  • Qu’il y a un évènement dans le calendrier qui est en cours qui dit que je suis au travail
  • Alors m’envoyer un message

Proposition :

Qu’en pensez-vous ?

2 « J'aime »

Pour info, j’ai commencé les développements, pour l’instant uniquement sur le déclencheur de scène.

La partie backend est quasiment finie, je bosse sur le frontend là.

@bertrandda J’ai du changer un peu la requête de GET /calendar, en gros il me fallait une option pour aller chercher uniquement les calendriers partagées (et pas les miens privées), du coup j’ai rajouté 3 cas :

  • Pas de paramètres fournie → tous les calendriers que je peux voir (privée à moi + partagés)
  • shared = true → Que les calendriers partagés
  • shared = false → Que mes calendriers privées

J’ai pensé à aller mettre à jour le code frontend.

C’était nécessaire parce que du coup dans les scènes seules les calendriers partagés sont accessible.

La PR sur Github est ici :

1 « J'aime »

La vue complète avec toutes les options:

Tu prends aussi en compte les jours férié etc?
Ou tu gères que certain filtre sur les titre de mail

Je ne gère rien de tout !

Le but de cette fonctionnalité, c’est de laisser à l’utilisateur la possibilité de déclencher des scènes basées sur les évènements à venir / qui vont se terminer dans ses calendriers, après c’est à l’utilisateur de connecter ses calendriers à lui.

Le contenu du calendrier est propre à chacun, moi je fournis juste les outils pour faire les scènes :slight_smile:

Si tu veux connecter un calendrier avec des vacances, des jours fériés, le jour ou tu vas à la piscine, l’école des enfants, tout est possible !

On est d’accord qu’il n’y a pas de calendrier intégré dans Gladys, c’est ‘juste’ une synchronisation avec un service tiers?
Je l’utiliserais bien pour les périodes de chauffe dans un calendrier dédié…

1 « J'aime »

Ah ouai ok je vois.
C’est pas bête ça t’évite de te charger de récupérer une lib qui calcul les jours férié en fonction d’un pays donné.
C’est une autre façon de voir les choses, genre ça évite les erreurs de lib

Exactement, on considère qu’on est pas là pour coder un client calendrier complet (ce serait énormément de travail, et c’est pas vraiment notre métier)

L’idée c’est que les utilisateurs gardent leur client calendrier classique, continue de remplir les évènements sur leur téléphone/ordinateur comme ils font déjà, et ensuite nous on se synchronise juste avec.

Tu peux très bien créer un calendrier n’importe où spécifique pour tes périodes de chauffe et ça fera le boulot :slight_smile:

Exactement :slight_smile:

Pour les jours fériés par exemple, moi par défaut mon calendrier a un calendrier « jours fériés » je crois, et Gladys le synchronise. Il suffit de se plugger sur ce calendrier, de pas mettre de filtre sur le nom pour catcher tous les évènements, et hop tu gères les jours féries dans Gladys.

1 « J'aime »

Beau travail, ça va être utile à beaucoup de monde.

Encore une fois @AlexTrovato avait raison depuis le début :laughing: Add internal calendar sharing by bertrandda · Pull Request #1337 · GladysAssistant/Gladys · GitHub

1 « J'aime »

Salut à tous !

J’ai bien avancé aujourd’hui, et j’ai mergé sur master la première partie de ce développement : déclencher une scène en fonction d’un évènement qui arrive/qui va bientôt se terminer.

Concrètement, ce qu’il est possible de faire

  • “Envoie moi un message 15 minutes avant d’aller au sport”
  • “Réveille moi 1h avant un évènement travail”
  • “Si l’évènement “Disneyland” commence dans 1h ET que la maison n’est pas vide” => Clignoter dans le salon pour nous prévenir qu’il faut partir !
  • "Lance le chauffage quand il y a un évènement qui commence et qui s’appelle “chauffage”, et stoppe le chauffage quand il y a un évènement qui s’arrête et qui s’appelle “chauffage” "

Ce n’est que quelques exemples, mais bien-sûr les possibilités sont infinies !

A quoi ça ressemble ?

Ce qui est puissant, c’est qu’il est possible de récupérer dans les actions l’évènement qui a déclenché la scène ! :sunglasses: et ça donne ça :

Je vois déjà @lmilcent qui me dit : “mais attend ? on va pouvoir utiliser les valeurs de capteurs des déclencheurs là dedans ??” Pourquoi pas à l’avenir oui !! :smiley:

Démonstration en vidéo

J’ai enregistré une vidéo qui montre un exemple :slight_smile:

Comment tester ?

J’ai fais un build Docker sur le tag :dev comme d’habitude.

L’image Docker est la suivante:

gladysassistant/gladys:dev

Je suis preneur de tout retour, si vous avez le temps de tester ce week-end ce serait top :slight_smile:

Pour la deuxième partie du développement, ce sera plus tard je vous tiendrais au courant de l’avancement !

5 « J'aime »

:rofl::rofl:

C’est génial, j’adore ces messages : « hey regardez la nouvelle fonctionnalité super puissante que je viens de faire » :heart_eyes:

Merci beaucoup pour le boulot !!

Bon, pour l’exemple du chauffage, faut d’abord que ça soit supporté par Gladys :sweat_smile:

3 « J'aime »

J’ai pas osé le dire mais je pense que c’est une fonctionnalité qu’il fait en sous marin pour faire la surprise à la communauté :wink:

Je veux pas casser tes espoirs @spenceur mais c’est pas le cas :joy:

Le chauffage c’est un gros sujet, et 90% du travail c’est de définir ce qu’on veut faire. Pour l’instant on est encore au niveau 0 rien n’est fait.

1 « J'aime »