Calendrier ICS

Hop Hop Hop on commence par le début …
bien lire de post et reformater avec une seule question.

Car la il y a même pas de point interrogation ! pas de question pas de réponse …

La solution passe par la lecture de ce-ci

1 « J'aime »

Bonjour Olive
j’étais en conversation avec @ZygOm4t1k
qui est le développeur pour répondre et trouver pourquoi cette erreur
Cordialement
Pierre

Des nouvelles car j’ai le même soucis.
Je vois bien les événements dans l’agenda mais pas dans le widget.

Je suis en V4 avec la derniére version stable du plugin.

Log :

ics.log (35,2 Ko)

Quel type d’agenda? Erreur dans les logs http.error?

Configuration de l’équipement? Page santé?

Bonjour

J’ai aussi le meme probleme, les events apparaissent dans l’agenda, mais pas dans le widget sur le dashboard desktop

agenda ics sur google
page sante OK

http.error donne :
[Fri Dec 18 17:05:19.676588 2020] [php7:notice] [pid 22011] [client 192.168.0.180:52334] PHP Notice: A non well formed numeric value encountered in /var/www/html/plugins/ics/core/class/ics.class.php on line 635, referer: http://192.168.0.124/index.php?v=d&p=dashboard
[Fri Dec 18 17:05:20.732586 2020] [php7:warn] [pid 18542] [client 192.168.0.180:52339] PHP Warning: file_get_contents(/var/www/html/plugins/ics/core/ajax/…/…/data/1214.json): failed to open stream: No such file or directory in /var/www/html/plugins/ics/core/ajax/ics.ajax.php on line 67, referer: http://192.168.0.124/index.php?v=d&p=dashboard

la ligne 635 de var/www/html/plugins/ics/core/class/ics.class.php c’est

$replace[’#height_cal#’] = $replace[’#height#’] - 40;

comme $replace[’#height#’] est un string (« 392px » par exemple), j’ai remplace par :

$replace[’#height_cal#’] = (intval($replace[’#height#’]) - 40) . « px »;

l’erreur disparait mais plus rien sur le widget

Il y a peut etre aussi des droits a adapter sur le fichier ics.ajax.php qui n’est pas executable ?

Salut,

Bizarre l’erreur sortait pas chez moi du $replace[’#height#’] , j’ai corrigé pour la prochaine version. Mais devrait ne pas être bloquante

Si tu ne vois pas les évènements c’est parce qu’un fichier n’est pas créé. Tu as mis quoi comme fréquence de rafraichissement? SI tu as laissé le champs vide essaie de rafraichir la page?

Voila ca marche avec cette syntaxe :

$replace[’#height_cal#’] = strval(intval($replace[’#height#’]) - 40);

les widgets apparaissent maintenant, nickel

Par contre j’aimerais pouvoir effectuer un test sur la description du prochain evenement, et pas seulement sur le titre, est ce possible ?

Merci

Salut,

Il n’affichait pas les événements car problème de refresh (le fichier n’existait pas).

J’ai corrigé pour la hauteur.

Non mais je peux regarder si possible de l’ajouter.

1 « J'aime »

ZygOm4t1k ce serait super, merci

la société de ramassage des déchets de ma commune publie son calendrier en ligne, et le type de déchets ramassés (« papier », « verre », …) est indiqué dans la description, le titre reste toujours le meme, « collecte de déchets »…

Pour les évènements la commande description se met à jour quand l’évènement est en cours. Je ne veux pas changer car peut-être que d’autres utilisateurs s’en serve.

Mais je peux ajouter une autre commande Description(next) qui retourne la description du prochain événement.

  • Dans ics , tu devras créer un événement « collecte de déchets » (Le nom de l’événement dans le calendrier)

  • Dans un scénario , tu mets en déclencheur , cette nouvelle commande et fais tes tests?

C’est pour faire quoi exactement?

je voudrais que Jeedom m’informe de la collecte suivante, et me rappelle la veille le type de collecte, avec une action speciale s’il s’agit d’une collecte spéciale de papier ou de verre par exemple.

j’avais a priori plutot pensé au calendrier plutot qu’a un evenement, où le titre et la description pourraient etre combinés, eventuellement selon un choix de config par calendrier, donc ils seraient affichés tous les deux sur le calendrier et la recherche de mot sur le titre fonctionnerait aussi sur la description

ou ne pas les combiner mais creer dans le calendrier en plus du champs existant titre un nouveau champ description qui comme le champs titre contiendrait la description du prochain event.
Mais je ne maitrise pas encore bien le plugin…

Salut,

J’ai mis à jour.

  • Dans ics , tu devras créer un événement « collecte de déchets » (Le nom de l’événement dans le calendrier)
  • Tu programmes un scénario tous les jours à 18h par exemple
  • Bloc if qui check si l’événement a lieu le lendemain (cmd tomorrow == 1) .
  • Tu envoies une notification avec la valeur de la commande Description(Next)

super merci j’essaye ca

je n’arrive pas à faire la mise à jour, j’ ai un 500 Internal error, d’ailleurs j’ai la meme erreur quand j’essaie de supprimer un device du plugin (je peux le supprimer s’il n’est associé a aucun objet parent)
pas d’erreur dans le log, pas de message dans http.error

Dans les deux cas je dois donc supprimer le plugin et le reinstaller.

Et alors un autre probleme apparait, le folder data est cree avec l’owner root, pas www-data, et donc jeedom ne peut pas creer les fichiers dans le folder data, d’où messaqe d’erreur ‹ unexpected end of JSON file › ou quelque chose comme cela.
je corrige en changeant les droits d’acces manuellement, mais je ne sais pas si cela n’arrive que chez moi…

Merci de ta reaction rapide en tout cas

Salut.

Je ne reproduis pas ni l’un ni l’autre. Il y a un couac quelque part .

Le dossier est créé avec une commande spécifique à jeedom donc là aussi bizarre.

Tu as quelle version de jeedom?

Jeedom 4.0.61
Version PHP 7.3.11-1~deb10u1
Apache 17
Version OS Linux jeedom 5.4.39-meson64 #20.02.15 SMP PREEMPT Sat May 9 01:11:32 CEST 2020 aarch64 GNU/Linux [10.4]

Quand j’effectue une verification systeme generale, j’obtiens ceci :

PHP Fatal error: Cannot redeclare log_message() (previously declared in /var/www/html/plugins/iCalendar/3rdparty/class.SimpleCalDAV/CalDAVClientICal.php:1310) in /var/www/html/plugins/ics/3rdparty/src/CalDAVClient.php on line 1304

j’ai aussi le plugin iCalendar, et si je le desactive je peux supprimer un device ICS et le message d’erreur 500 internal error n’apparait plus…

Voila ca fonctionne, j’ai aussi réglé le probleme d’internal error 500 en desactivant le plugin icalendar qui semble entrer en conflit.

Dans le code core/class/ics.class.php, apres la ligne 425, ne manque t’il pas la ligne :
$event->checkAndUpdateCmd(‹ nextdescription ›,false);

De facon à obtenir :
if(!$nextEvent) {
$event->checkAndUpdateCmd(‹ clock ›,false);
$event->checkAndUpdateCmd(‹ date ›,false);
$event->checkAndUpdateCmd(‹ title ›,false);
$event->checkAndUpdateCmd(‹ next ›,false);
$event->checkAndUpdateCmd(‹ nextdescription ›,false);
}

Par ailleurs, la mise à jour du champs ‹ last › dans un device calendar ne se fait pas correctement d’apres mon experience :

  • J’ai supprimé un évènement de type ‹ all day › de mon calendrier Google a la date d’aujourd’hui, le fichier .json du repertoire data est correctement mis a jour et l’évènement n’apparait plus dans l’onglet Agenda, mais le champs last affiche toujours cet evenement qui n’existe plus.

  • J’ai eu le probleme similaire en rajoutant un evenement de type ‹ all day › à la date d’aujourd’hui : last est reste sur l’evenement de la semaine passee, alors que next est reste sur celui de la semaine suivante.

J’ai modifié le plugin voir modif ci-dessous).
j’ai documente autant que possible dans les 4 fichiers modifés et joins le tout en zip (enlever d’abord l’extension .txt)
Les ameliorations principales sont:

  • possibilité d’utiliser des regexp pour filtrer les evenements
  • possibilité de recherche aussi sur la description en plus du titre
  • indication d’evenements a venir dans les 7 jours
  • quelques corrections de bugs.

Détails :

Dans l’objet Calendrier, j’ai rajoute :

  • Le champs info « Description », (id description), qui suit strictement les mêmes opérations que le champs « Titre » (id title)

Dans l’objet Event, j’ai rajoute :

  • Le champs info « Next 7 Days » (id next7days) qui indique si l’évènement se passe après après-demain mais dans les 7 jours

  • Le paramètre de config regexp

Si le champs est laissé vide, la sélection de l’évènement reste inchangée : le nom de l’objet Event ICS est recherche dans le titre de l’évènement du calendrier source.

Sinon, le texte du champs regexp est utilisé comme requête regexp pour la recherche dans le titre de l’événement du calendrier source.

Ne pas oublier les // qui encadrent la requete : PHP Regular Expressions

Ex = /.*/ n’importe quel événement du calendrier source , /papier/ : événement dont le champs titre contient ‘papier’, ……

  • Le paramètre de config descIncluded

Si pas coché, la recherche ne porte que sur le titre des événements, comportement par défaut et identique à celui déjà implémenté dans la version actuelle du plugin.

Si coché, la recherche porte sur le titre et la description des évènements

Dans le code, petites modifications et bug fixes :

  • Code et fichiers de définition nécessaires pour implémenter les additions ci-dessus

/var/www/html/plugins/ics/desktop/modal/event.configuration.php

/var/www/html/plugins/ics/core/class/ics.class.php

/var/www/html/plugins/ics/core/config/devices/calendar.json

/var/www/html/plugins/ics/core/config/devices/event.json

  • Corrections du champs ‘end’ de certains évènements de type AllDay, pour lesquels start et end sont identiques et correspondent au début de la journée

Le calendrier ICS qui m’est fourni en ligne et que je voudrais suivre ne comporte que des événements AllDay qui commencent et se terminent le même jour 00 :00 :00…

// correctif de end date pour les evenemenst AllDay qui commencent et se terminent le même jour à 00:00:00.

// exemple : un evenement AllDay du 25 decembre 2020 qui commence à 2020-12-25 00:00:00 et se termine le 2020-12-25 00:00:00

// avec la modification proposée, il se terminera le 2020-12-26 00:00:00

// et sera bien considéré comme un événement en cours tout au long de la journée du 25 decembre 2020

  • Détermination de l’événement last même si l’événement next reste inchangé.

// le last pourrait être diffèrent du précèdent même si le next est inchangé, donc il doit être teste indifféremment de next

// last pourrait avoir été rajoute ou supprime depuis le dernier refresh par exemple.

  • Correction cosmétique de la permutation entre $end et $date-t
  • Simplification dans les tests de détermination changed_today et changed_tomorrow,
  • Typo $nowtEvent corrigée en $nowEvent

ics.zip.txt (18,0 Ko)

[EDIT] Pour une raison inconnue ça fonctionne désormais… J’ai juste rajouté un second calendrier ICS pour tester si le problème venait de mon premier calendrier. Et comme le second fonctionnait je suis retourné sur le 1er qui s’est mis à fonctionner (alors que ça fait quelques heures que ça ne fonctionnait pas), bref mystère
[FIN EDIT]

Bonjour
Tout d’abord merci pour ton plugin car il devrait répondre à ma problématique
J’ai importé un calendrier web qui me donne les prochains matchs de mon équipe préférée et je souhaiterai afficher sur mon horloge connectée justement le détail de la prochaine rencontre
Or j’ai vu que la commande Next event pourrait effectivement me donner l’info

Mais c’est là que ça bloque
Lorsque je teste la commande, la valeur est vide
Alors que le calendrier est bien actif et que je vois bien les prochains matchs directement dessus.
J’ai un match aujourd’hui dans l’agenda importé et même la commande Event Today ne me donne rien…
D’ou peut provenir le problème?

Merci !

Bon j’ai un autre souci maintenant :
Dans les messages d’alerte Jeedom j’ai ces 2 lignes :

|2021-02-03 05:30:09|ics|Erreur exécution de la commande [Aucun][Ligue 1][Refresh] : This parser can only read from strings or streams.||6|
||2021-02-03 05:30:09|ics|Erreur pour le cron du calendrier : Ligue 1 : This parser can only read from strings or streams.|

D’ou peut provenir le problème svp?
Merci

Salut.

C’est que le plugin n’arrive pas à se connecter au fichier.
C’est géré par le plugin.