Il y a 12 ans, nous avions réalisé un bricolage qui affichait les prochains événements d'un Calendrier Google sur un Yocto-MaxiDisplay qui était intégré dans un meuble de cuisine. Cette semaine, on va mettre à jour cette installation, pour qu'elle utilise notre nouveau module Yocto-Display-ePaper-C et affiche les éventements sur un écran ePaper. On va aussi profiter de cette occasion pour simplifier le code et se débarrasser du système d’authentification OAuth2.
Pour rappel, ce projet utilise notre mécanisme de callback HTTP. Le module Yocto-Display-ePaper-C (ou Yocto-MaxiDisplay) est connecté à un YoctoHub-Wireless-n qui va périodiquement se connecter à un script PHP. C'est ce script PHP qui récupère les prochains événements du calendrier et qui met à jour l'écran.

Le fonctionnement du callback HTTP
Les changements
L'ancien code utilisait la libraire Google API Client et une authentification OAuth2 pour accéder au calendrier Google. Ce mécanisme était relativement compliqué et peu utile pour un petit projet comme celui-ci. Dorénavant, le script PHP utilise l'adresse secrète au format iCal. Cette URL permet de récupérer tous les événements d'un calendrier Google au format iCal.
Nous avons du coup pu simplifier le code. Il n’est plus nécessaire d’utiliser Composer pour installer des bibliothèques externes ni d’utiliser une base de données. Les paramètres sont stockés dans un fichier JSON.
Enfin, nous avons légèrement modifié le code pour adapter la mise en page aux écrans ePaper.
if ($type == YDisplay::DISPLAYTYPE_MONO) {
$display->set_autoInvertDelay(3600);
$layer0->selectGrayPen(255);
} else {
$layer0->selectGrayPen(0);
}
$h = $display->get_displayHeight();
if ($h > 64) {
$layer0->selectFont("Medium.yfm");
$baseline_height = 16;
$nblines = 8;
} else {
$layer0->selectFont("Small.yfm");
$baseline_height = 8;
$nblines = 5;
}
La méthode get_displayType() permet de savoir s’il s'agit d'un écran OLED (Yocto-MaxiDisplay) ou d'un écran ePaper. Notez que, pour des raisons historiques, la constante pour les écrans OLED s'appelle DISPLAYTYPE_MONO et non pas DISPLAYTYPE_OLED_MONO.
Pour les écrans OLED, on va activer la fonctionnalité autoInvertDelay qui inverse périodiquement tous les pixels et évite le marquage de l'écran.
On a aussi profité de la meilleure résolution des écrans ePaper pour afficher trois lignes de plus.

Les écrans ePaper permettent d'afficher plus d'événements
Installation du projet
L'installation du projet est simplifiée, car il suffit d'uploader tous les fichiers du projet sur le serveur web.
Pour rappel voici la liste des fichiers :
- index.php : L'interface web
- callback.php : Le code du callback HTTP
- common.php : Les fonctions utilisées par l'interface web et le callback.
- yoctolib/ : Les fichiers de notre librairie PHP
La configuration se fait directement depuis l'interface web. Il faut, dans un premier temps, enregistrer le numéro de série de l'écran et l'URL secrète du calendrier.

L'interface web
Pour obtenir cette URL, il faut...
- Accéder à votre calendrier Google depuis un browser web
- Cliquer sur les trois points du menu du calendrier auquel vous souhaitez accéder.
- Cliquer sur "Paramètres et partage".
- Scroller vers la section "Intégrer l'agenda".
- Copier l'adresse secrète au format iCal.
Note: Cette URL unique permet de récupérer tout votre calendrier, il est donc important qu'elle reste privée et qu'elle ne soit pas partagée avec des inconnus.
Une fois enregistré, on peut prévisualiser les prochains événements pour vérifier que l'URL est correcte.
Configuration du YoctoHub
La dernière étape est de configurer le callback HTTP du YoctoHub. Vous pouvez le faire manuellement en configurant un callback de type Yocto-API et en entrant l'URL du fichier callback.php, ou vous pouvez utiliser le bouton "Import". Dans ce dernier cas, il faut cliquer sur le bouton "Copy settings" dans l’interface du script PHP et coller ces paramètres dans la fenêtre Import du YoctoHub.
Conclusion
Nous avons mis à jour le repository GitHub du vieux projet avec cette nouvelle version. Cette nouvelle version simplifie la manière de récupérer les événements du calendrier Google et ne dépend plus d'autres librairies.
Cela montre aussi qu'il est très facile de convertir une application qui était prévue pour un Yocto-MaxiDisplay pour qu'elle fonctionne avec un Yocto-Display-ePaper-C. Les fonctions sont les mêmes. Il faut simplement adapter les mises en page à la taille de l’écran ePaper.
Comme d'habitude, ces projets ne sont pas des applications finies, mais des exemples d'utilisation. Si vous devez utiliser ce projet de manière professionnelle, il faudra sans doute ajouter un mécanisme d'authentification et potentiellement un mécanisme de cache. Mais pour un usage personnel, cela suffit largement.
