Station météo avec affichage ePaper (Dashboard) pour Jeedom sur Raspberry Pi (via l’API JSON RPC)

La semaine dernière, nous avons pu tester l’écran ePaper (eInk) 2,7 pouces du fabricant chinois Waveshare. Nous n’étions pas allé très loins dans la présentation. Il me fallait un peu de temps pour apprendre à maitriser la librairie Python Imaging Library (ou le fork Pillow). Je vous propose dans ce nouveau tutoriel d’aller beaucoup plus loin. Nous allons réaliser une station météo connectée à un serveur domotique Jeedom. Le plugin météo (gratuit) de Jeedom permet de récupérer très facilement les prévisions sur 5 jours sur le site  openweathermap.org. Bien évidemment, ce n’est qu’un prétexte. L’idée étant de montrer les différents mécanismes à mettre en place pour interroger le serveur Jeedom, récupérer les données d’un appareil et comment générer l’affichage ePaper.

Remarque. Vous pouvez tester et mettre au point votre code sur n’importe quel PC Windows ou Linux, Mac ou Raspberry Pi sans avoir d’écran eInk. Il suffira d’enregistrer l’image générée par la librairie Python Imaging.

Matériel utilisé pour la station météo ePaper

Pour ce projet, j’ai utilisé le matériel suivant. L’écran mesure 2,7 pouces de diagonale avec une résolution de 264 x 176 pixels. Il est assez grand pour afficher les prévisions météo en détail. Il possède 4 boutons sur le coté que l’on va utiliser pour naviguer entre les écrans. On pourrait également les utiliser pour déclencher un scénario domotique ou afficher d’autres états.

56,99€
3 nouveau de 56,99€
1 occasion de 53,00€
Relevé le 23 avril 2018 18 h 57 min
Amazon.fr
Livraison gratuite

Vous pouvez également choisir un autre écran dans la gamme Waveshare

Ecran

Couleurs

Niveau de gris

Résolution (pixels)

Taille écran (mm)

Taille totale (mm)

Temps de rafraîchissement (s)

Interface

Compatible HAT(1)

1.54 pouces

noir, blanc

2

200×200

27.60 × 27.60

48.0 × 33.0

2

SPI

x

1.54 pouces (B)

rouge, noir, blanc

2

200×200

27.60 × 27.60

48.0 × 33.0

8

SPI

x

2.13 pouces

noir, blanc

2

250×122

48.55 × 23.71

65.0 × 30.2

2

SPI

2.13 pouces (B)

rouge, noir, blanc

2

212×104

48.55 × 23.71

65.0 × 30.2

15

SPI

2.7 pouces

noir, blanc

2

264×176

57.29 × 38.19

85.0 × 56.0

6

SPI

2.7 pouces (B)

rouge, noir, blanc

2

264×176

57.29 × 38.19

85.0 × 56.0

15

SPI

2.9 pouces

noir, blanc

2

296×128

66.89 × 29.05

89.5 × 38.0

2

SPI

x

2.9 pouces (B)

rouge, noir, blanc

2

296×128

66.89 × 29.05

89.5 × 38.0

15

SPI

x

4.2 pouces

noir, blanc

2

400×300

84.80 × 63.60

103.0 × 78.5

4

SPI

x

4.2 pouces (B)

rouge, noir, blanc

2

400×300

84.80 × 63.60

103.0 × 78.5

15

SPI

x

4.3 pouces

noir, blanc

4

800×600

88.00 × 66.00

118.0 × 75.0

1.5

UART

x

7.5 pouces

noir, blanc

2

640×384

163.20×97.92

170.2×111.2

6

SPI

7.5 pouces (B)

rouge, noir, blanc

2

640×384

163.20×97.92

170.2×111.2

31

SPI

(1) Connecteur compatible avec Raspberry Pi 2B/3B/Zero/Zero W. Les autres écrans doivent être connectés à l’aide de Jumpers.

Librairies Python à installer

Si vous débutez avec les écrans ePaper de Waveshare, je vous conseille de lire l’article précédent qui explique comment les utiliser avec un ou deux exemples simples.

Le driver epd (pour EPaper Display j’imagine) ne fait “que” l’afficher une image. On va donc devoir la générer en Python au préalable. La librairie Python Imaging (Pil) ou son fork Pillow semble la plus puissante dans le domaine. Attention, Pil et Pillow ne peuvent pas cohabiter sur la même machine.

Pour installer Pil vous pouvez utiliser la commande pip. Vous aurez peut être besoin de faire précéder la commande pip d’un sudo.

Sur macOS, le plus facile est d’utiliser brew

La librairie Python Pil / Pillow rapidement

La librairie Pil ou Pillow permettent de manipuler des images (convertir, redimensionner, orienter…), ajouter des formes géométriques (ligne, ellipse, polygone, arc de cercle…) ou du texte sur une image existante. Ici nous allons créer un masque ayant comme dimension celle de l’écran ePaper 2,7”.

Comme nous l’avons vu dans l’article précédent, l’image produite est verticale. Si on veut un affichage horizontal, l’astuce consiste à créer une image dans les dimensions horizontales et verticales sont inversée puis la tourner de 90° avant de l’afficher sur l’écran ePaper. Créez un nouveau script nommé demopill.py et collez le code suivant

Enregistrez le script et exécutez le avec la commande python demopill.py.

Voici l’image générée par le script. Comme vous pouvez le voir, elle est horizontale car j’ai inversé la hauteur (Height) et la largeur (Width). Ici, il n’est pas nécessaire de tourner l’image.

Récupérer des images et des fonts Open Source

J’ai utilisé des images gratuites et Open Source pour ce projet. Vous pouvez en trouver un peu partout sur internet. Voici les sites que j’ai utilisé pour ce projet :

  • Les icônes Open Source de Kickstand Apps disponibles sur Github pour les symboles météo. Pratique, elles sont déjà au format PNG. Utilisez plutôt la version épaisse pour un meilleur rendu sur l’écran ePaper
  • icones8.fr pour les pictogrammes température, humidité, pression atmosphérique, direction du vent
  • La police FreeMonoBold.ttf peut être récupérée un peu partout sur internet comme ici sur GitHub

Installer et configurer le plugin météo sur Jeedom

Ouvrez le gestionnaire de plugin de Jeedom et recherchez le plugin Meteo officiel

Activez le plugin et configurez votre ville et attribuez un objet

Activer l’API JSON RPC et récupérer la clé API

Jeedom dispose de deux interfaces de communication. La première permet d’interroger Jeedom avec des requêtes HTTP. C’est cette interface qui avait été utilisé pour réaliser ce mini affichage déporté.

Pour varier les plaisirs (et aussi parce que l’API HTTP offre moins de possibilités), nous allons utiliser l’API JSON RPC pour ce projet. Le JSON RPC est un standard qui est documenté ici. Toutes les commandes exposées par Jeedom sont expliquées en détail sur la documentation en ligne.

Pour récupérer votre clé API et vérifier que les API sont activées, allez dans le menu de configuration (roue crantée) puis configuration. Ouvrez l’onglet API. Votre clé est la grande chaine de caractère. Vous pouvez en générée une nouvelle si vous pensez que la sécurité de votre serveur domotique a été corrompue. L’accès JSONPRC doit être activé. N’oubliez pas de sauvegarder si vous faites une modification.

Comment récupérer les prévisions météo avec l’API JSON RPC de Jeedom ?

Maintenant que tout est prêt, il est temps de commencer. Il existe (très grossièrement) deux types d’objets Jeedom qui vont nous intéresser ici. Les commandes et les équipements. Pour faire simple, le widget météo est un équipement. Un équipement est lui même attaché à un objet (le terme de groupe aurait été mieux adapté mais ce n’est pas très important). Ensuite chaque équipement peut posséder des commandes. Pour récupérer les identifiants de l’équipement et des commandes, il suffit d’ouvrir le panneau de Configuration avancée qui se trouve systématiquement dans le coins supérieur droit.

Ici l’équipement widget météo a l’IDentifiant 3.

id equipement jeedom json rpc api

Cliquez ensuite sur la roue crantée de chaque commande pour récupérer son identifiant (ici 17).

id commande equipement jeedom api json rpc

On peut aussi interroger l’API pour récupérer tous les identifiants mais la réponse renvoyée est très (trop) détaillée. Si vous avez de nombreux équipements vous risquez vite de vous noyer.

Créez un nouveau script python (par exemple jeedomrpc.py) et collez le code ci-dessous. Avant de l’exécuter vous devez modifier les paramètres suivants :

  • ip_jeedom : l’adresse IP du serveur Jeedom
  • Api_key : votre clé API récupérée précédemment
  • conditiontxt : l’IDentifiant de la commande condition. Elle renvoi la prévision sous la forme d’une chaine
  • condition: l’IDentifiant de la commande condition_numero. On récupère le code de la prévision d’OpenWeatherMap. On l’utilisera pour définir l’icône de la prévision à afficher

Exécutez le script (commande python jeedomrpc.py ). La réponse d’affiche directement dans le Terminal (ou l’invite de commande sous Windows). Pour “déplier” la réponse au format JSON et la rendre plus lisible pour nous pauvres humains, vous pouvez utiliser jsonlint.com par exemple.

Il ne faut pas s’inquiéter des ‘u’ devant chaque clé. Par contre ce qui est plus gênant c’est l’encodage des chaînes. Jeedom n’encode pas en utf-8 mais en latin-1. Cala risque de vous poser pas mal de problèmes. Voici quelques astuces :

  • Forcer l’encodage en utf-8 au début du script en ajoutant le paramètre # coding: utf-8
  • Créez une variable intermédiaire qui contient la condition avant de créer un objet texte avec la librairie Pill.

Pour info, voici également le dictionnaire (une variable) qui a été créé par ce script. On y retrouve la prévision et le code correspondant.

Code python complet

Voilà, maintenant il ne reste plus qu’à tout assembler. Nous savons interroger l’API JSON RPC de Jeedom pour récupérer des états et des informations sur des équipements. Nous savons comment générer une image à l’aide de la libraire Python Pil. Enfin, nous savons intercepter les boutons Key1 à Key2 sur le coté de l’écran pour modifier l’affichage ou déclencher un scénario.

Créez un nouveau script et collez le code ci-dessous. Modifiez les paramètres suivants dans le code

  • ip_jeedom : l’adresse IP du serveur Jeedom
  • Api_key : votre clé API
  • Dictionnaire idCmd : changez les identifiants des différentes commandes pour celles de votre équipement météo
  • modeTest : permet de générer l’image sur un ordinateur (PC Windows, Linux, Mac, Raspberry Pi) sans utiliser le GPIO et l’écran ePaper. Le script génère juste une image en sortie
  • Toutes les images et la police FreeMonoBold.ttf doivent être stockées dans le dossier image.

Téléchargez les images et la police FreeMonoBold.ttf depuis le blog en cliquant sur ce lien. Décompressez l’archive et placez le dossier à la racine du code python. La variable folder_img permet de modifier le dossier des ressources.



Remarque. J’ai juste un doute sur l’orientation correcte de la boussole en fonction de la direction du vent. Je compte sur vous pour le vérifier.

Le dashboard météo ePaper pour Jeedom obtenu

Il ne reste plus qu’à lancer le script. Au premier lancement, le script génère et affiche immédiatement la première page de la station météo. Pour afficher le second panneau, appuyer sur le bouton Key2. Les autres écrans sont disponibles pour afficher d’autres informations en provenance de Jeedom. Etat des lampes, des portes, niveau de CO2, température, consommation électrique…

La première page (Key1) récapitule la météo du jour

frame1 jeedom station meteo epaper waveshare eink jsin rpc

Le second écran (key2) permet d’afficher les prévisions à 4 jours. Et oui, c’est l’hivers 🙁

frame2 jeedom station meteo epaper waveshare eink jsin rpc prevision 4 jours

La même chose en vrai avec l’écran Waveshare 2,7” installé sur un Raspbery Pi3 qui fait tourner le serveur Jeedom !

jeedom epaper waveshare display dashboard weather station

jeedom epaper waveshare display dashboard weather station frame2

 

Voilà, il ne plus qu’à faire la même chose avec Domoticz ! J’espère que ce projet vous donnera plein de nouvelles idées. Pour le moment, j’ai réalisé les deux tutoriels avec un Raspberry Pi 3. L’intérêt principal des écrans ePaper étant l’absence de consommation électrique après le rafraichissement de l’affichage, il est temps de le tester avec un micro-contrôleur ESP8266 ou ESP32.

Print Friendly, PDF & Email

Inscrivez-vous à la newsletter hebdomadaire

Aucun spam et aucun autre usage ne sera fait de votre email. Vous pouvez vous dés inscrire à tout moment.

Comparateur de prix

Bons plans

Les offres suivantes se terminent bientôt. Utilisez le coupon indiqué pour profiter du prix promo

Projets DIY - Domotique et objets connectés à faire soi-même