Où sommes nous ?

Retour

Tableaux de bord

Souvent délaissés, les tableaux de bord (ou dashboard en version british) sont l’élément visible de toute la domotique. Non seulement ils vous permettent de garder un œil sur ce qu’il se passe dans la maison, mais ce sont aussi une bonne méthode de promotion de ce que vous avez fait et améliore grandement le WAF.

La page web

La solution la plus rependue est d’exposer les informations de domotique à travers une « simple » page web … enfin, simple n’est qu’une expression, car les données étant par essence changeantes (sinon, pourquoi les surveiller ?) il faut maitriser le web Dynamique, PHP voir Ajax, tout ça …
L’avantage est que si votre site web est exposé sur la toile, vous pourrez voir ce qui se passe chez vous depuis votre taf … ou n’importe où d’ailleurs par votre smartphone. Je vous laisse vous pencher sur les problèmes de sécurité que cela pose et les mesures indispensables à mettre en place.

C’est la solution que j’avais déployé avec mon architecture V1 : Domestik collecte régulièrement toutes les informations, les agrège en base de données et les affiche à travers son interface Web avec moult graphiques.

L’écran du salon

Vous rentrez chez vous tard le soir … la porte du garage est-elle fermée ? Fallait-il passer par la boite aux lettres ? Les plantes ont-elles besoin d’être arrosées ?
Voilà, le besoin se fait sentir d’avoir toutes ces informations accessibles à n’importe quel moment : le besoin d’avoir un tableau de bord dans le salon.

La solution de facilité, et donc la plus courante est de recycler un vieux PC (vous rendez-vous compte de l’electricité que vous allez gaspiller ?) ou mieux de mettre un SBC tel qu’un BananaPI ou un Raspberry, avec un navigateur ouvert plein écran qui affichera la page décrite ci-dessus, en mode rafraîchissement automatique toutes les 30 secondes.
Le gros avantage est que le travail à accomplir est minime, n’importe quelle distribution Linux graphique fait l’affaire. Ensuite, tout n’est qu’une question de configuration :

rien que tu classique, et ça se trouve facilement sur le web.

A noté qu’il est parfaitement possible d’écrire des pages web dynamique clientes MQTT, à base de websockets.

Mais le problème est alors de trouver un navigateur léger qui supporte ces extensions.

Cette solution ne m’a pas paru très élégante :

La suite de cette page décrit les solutions que j’emploie sur ma propre domotique, à l’exclusion de la page web de Domotik abordée plus haut et qui ne nécessite pas plus de commentaire.

Conky

Le premier tableau de bord que j’ai mis en place tourne en arrière plan sur l’écran de mes PCs : il s’agit d’un « simple » script Lua pour Conky qui affiche les données lives issues de mes flux MQTT, sans autre fioriture. J’ai décrit dans cette page le mode opératoire et les scripts sont publiés sur mon GitHub.

Tablette

Comme tableau de bord dans le salon, j’ai recyclé une tablette Android Brickée (l’Android embarqué ne boot plus) : J’avais narré par ailleurs sur ce site l’aventure qui a conduit à sa résurrection. Sa lecture étant un peu indigeste voici une version un peu plus civilisée .

Booter sous Linux

Une tablette Android propulsée par un processeur Allwinner (je ne sais pas pour les autres fondeurs), boote en priorité sur sa carte SD puis, si elle n'y trouve pas de système, bascule sur sa NAND : la solution était donc d'installer linux sur une SD d'au moins 1Go (et oui, X n'est pas nécessaire pour mon dashboard, du coup, les besoins de stockage sont réduits) et de la rendre bootable. Comme bonus, je ne touche pas à la NAND, et peut-être qu'un jour, j'essaierai d'y réactiver Android … peut-être .

Installer Linux sur une SD, on sait faire : il suffit de suivre les indications du site SunXI ou de ma page dédiée au BananaPI. Elles indiquent aussi comment rendre la carte bootable en y installant uboot, qui est l'équivalent à la fois du boot sector et du BIOS des PC, en mieux.

La carte contiendra au moins 2 partitions :

A noter que pour économiser 10% de place supplémentaire sur la SD, j'ai choisie une version du système utilisant uclibc … 1Go commence en effet à devenir serré surtout lorsqu'on y installe la chaîne complète de développement (GCC, …). Mais du coup, je n'ai pu installer syslog : rotatelog à besoin d'une API non disponible dans uclibc ... on fera avec.

Sauvons notre SD

Profitons-en pour parler un peu de l'endurance de la SD : comme toute mémoire NAND (ce qui inclut les disques SSD), elle s'use rapidement face aux écritures, créant des blocs défectueux. Pas de risques pour nos données : chaque SD contient un petit processeur qui élimine ces blocs et les remplace par des saints, mais la place disponible diminue peu à peu.
Pour pallier ce problème, j'ai mis en RAM tout ce qui nécessite des écritures : les homes, les logs, … Ce qui me donne le /etc/fstab suivant :

/dev/mmcblk0p1		/boot		vfat		noauto,noatime	1 2
/dev/mmcblk0p2 / ext4 noatime 0 1
#/dev/SWAP none swap sw 0 0
#/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
#/dev/fd0 /mnt/floppy auto noauto 0 0

none /var/tmp tmpfs defaults 0 0
none /tmp tmpfs defaults 0 0
none /home/laurent tmpfs defaults 0 0

Évidemment, tout sera perdu lors d'un reboot … mais on s'en fout.

Le réseau

Toute tablette peut évidemment se connecter par WiFi … pour peu qu'on lui fournisse le driver qui va bien.
Et dans mon cas, ce n'était pas si simple : le dit driver n'existe qu'avec un kernel très récent, qui nécessite lui-même un uboot tout aussi récent, uboot pour lequel je n'avais pas de fichier de configuration. Bref, pas gagné.

Mais comme ma tablette se trouve juste à côté de ma Freebox, j'ai simplifié les choses en utilisant la possibilité d'établir un réseau par USBSimple USB Network Links » ou « CDC Ethernet subset ») : il suffit juste de compiler les modules kernel cdc_ether & usbnet.

On reboote, et voilà, la tablette accède à mon réseau et à ses précieux messages MQTT.

DirectFB

La partie matérielle étant maintenant couverte, passons au côté logiciel.

DirectFB (Direct Frame Buffer) est une librairie qui facilite la programmation aux couches graphique bas niveau de Linux et en particulier son fameux Frame Buffer (fbdev) et aux input devices s'y rapportant (clavier, souris). Il fournit même un système de fenêtrages simple mais qui va nous être bien utile.

Ses objectifs sont :

Y a-t-il un avenir pour DirectFB ?

A l'heure où j'écris ces lignes, août 2016, le projet semble en déshérence : son site ne répond plus, pas d’activité sur son git hub.

Cependant, il reste inclus dans la majorité des distributions (dont heureusement Gentoo) et est beaucoup utilisé dans l’embarqué d’où pleins de forks. Reste à savoir s’il y aura un repreneur officiel.

De toute façon, n’ayant pas d’autre solution pour le moment, je reste avec DirectFB.

Les frameworks

Séléné

Séléné ayant déjà sa page dédiée, je ne vais pas rentrer plus dans les détails.

En résumé, il prend en charge tout ce qui est bas niveau que ce soit pour les messages MQTT, graphique et fonction support (timer, ...).

Toile

Toile est un autre framework qui s'appuie sur Séléné et qui fournit des "widgets" pour les différents objets graphiques que l'on doit afficher : champs texte, graphismes, icônes ...
Programmer en méthode Objet, il permet une grande abstraction (et donc une facilité de programmation).

local srf_trndconso = GfxArea( srf, 0, 15, 100, 75, COL_RED, COL_GFXBG, { align=ALIGN_RIGHT } )

Dans cet exemple, on crée une surface graphique à la position 0,15 et de taille 100x75

local srf_conso = Field( srf, 0, 105, fsdigit, COL_DIGIT, {
	align = ALIGN_RIGHT,
	sample_text = "12345"
} )

On crée une surface de texte (Field) à la position 0,0 et dont la taille sera déterminée automatique pour la police donnée et pour laisser la place pour 5 digits (de part le texte d'exemple 12345)

local consommation = MQTTStoreGfx( 'consommation', 'TeleInfo/Consommation/values/PAPP', srf_consommation, srf_trndconso,
	{
		gradient = Gradient(
			{
				[500] = COL_DIGIT,
				[1500] = COL_ORANGE,
				[4500] = COL_RED
			}
		),
		forced_min = 0,
	}
)

Enfin, on crée une collection d'objet nommé "consommation", liée aux 2 surfaces précédemment créées et dont la couleur variera en fonction de la valeur.

Le tableau de bord en lui-même est une succession de pages qui défilent automatiquement et qui regroupent les informations par lieux géographiques (étage de la maison) ou par fonctions (gestion de l'énergie, ...).

Il est possible de les construire

C'est la seconde solution que j'ai utilisé : la piètre qualité de la dalle de ma tablette à bas coup ne permet pas beaucoup de débordements graphiques et cette méthode est plus adaptée à quelque chose qui est en constante évolution.

Ce tableau de bord permet aussi de configurer certains paramètres de la domotique par des menus accessibles par les boutons Vol+ / Vol- / Selection de la tablette ou par une télécommande lorsque c'est possible. Vraiment très très pratique.

Un jour peut-être, l'écran tactile de la tablette sera utilisable ... Un jour ...


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2017
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.