26 janvier 2014

Vous avez lu attentivement mon post précédent sur le montage teleinfo, récupéré l’optocoupleur qui va bien et sorti votre Raspberry Pi du placard. Maintenant, vous être prêt à passer à la partie soft.

Préparation de l’0S

La carte SD

Le point de départ est la distribution raspbian officielle que vous devez télécharger. Pour flasher une carte SD, je vous suggère de suivre les instructions sur le site elinux.org.

Si vous êtes sous linux, vous pouvez utiliser une commande du genre :

dd bs=4M if=./2013-09-25-wheezy-raspbian.img of=/dev/sdb

Attention, dans mon cas, /dev/sdb correspond à ma carte SD. Ne pas copier/coller cette ligne "à l’aveugle" … Si /dev/sdb correspond chez vous à un disque dur, vous risquez d’avoir quelques sueurs froides !

Désactivation de la console série

La Raspberry Pi ne dispose que d’un seul port série. Celui-ci est utilisé par défaut pour avoir une console. Il faut donc libérer le port série pour le montage téléinfo.

Désactiver de la console série au boot en modifiant le fichier /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

à remplacer par :

dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Désactiver la console getty en modifiant le fichier /etc/inittab. Il suffit de commenter la dernière ligne du fichier (ajout d’un #):

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Logguer les données dans une base MongoDB

Cette partie corresond à l’installation et la configuration d’un programme nodejs pour logguer les infos dans une base MongoDB. Dans mon cas, j’utilise une formule d’hébergement gratuite avec 512 Mo chez MongoLab. Vous pouvez choisir n’importe quel fournisseur à ce niveau (MongoHQ offre le même type de formule par exemple).

Installation de nodejs

Il y a quelques temps, il était difficile de trouver une version nodejs pour processeur ARM. Il fallait donc compiler les sources sur Raspberry Pi (~45 mn de temps de compilation) ou, pour les plus avertis, en "Cross Compiling" (moins de 2mn sur mon core i7). Désormais, une version officielle est disponible mais pas toujours dans la dernière version. Il faut donc fouiller dans les répertoires http://nodejs.org/dist/. La dernière version à ce jour est la v0.10.24.

L’installation consiste uniquement à décompresser l’archive :

tar -xzvf node-v0.10.24-linux-arm-pi.tar.gz

Si vous installez nodejs dans le répertoire /opt, vous pouvez ajouter les lignes suivantes au fichier /etc/profile pour positionner les variables d’environnement pour node :

NODE_JS_HOME="/opt/node"
PATH="$PATH:$NODE_JS_HOME/bin"
NODE_PATH="$NODE_JS_HOME/lib/node_modules"

Application nodejs

Vous pouvez commencer en utilisant mon application (en cours de développement) en clonant le repo git associé :

git clone https://github.com/lhuet/teleinfo-app.git

Pour obtenir les dépendances node, utilisez la commande classique node :

npm install -g

Le programme va chercher les éléments de configuration dans des variables d’environnement que vous pouvez positionner avec la commandes suivantes :

export MONGO_LOGIN="LOGIN_MONGOLAB"
export MONGO_PASSWORD="PASSWORD_MONGOLAB"
export MONGO_HOST="HOST_MONGOLAB"
export MONGO_PORT="PORT_MONGOLAB"
export MONGO_DATABASE="BASE_MONGOLAB"

Pour lancer l’application manuellement, vous devez positionner ces variables d’environnement et utiliser la commande :

node teleinfo-app.js

Script de démarrage

Lancer manuellement son application suffit en phase de développement. Pour être certain que le script se lance au démarrage de votre Raspberry Pi, vous devez faire un script du genre :

#!/bin/sh
#/etc/init.d/node-teleinfo

export PATH=$PATH:/opt/node/bin
export NODE_PATH=$NODE_PATH:/opt/node/lib/node_modules
export MONGO_LOGIN="LOGIN_MONGOLAB"
export MONGO_PASSWORD="PASSWORD_MONGOLAB"
export MONGO_HOST="HOST_MONGOLAB"
export MONGO_PORT="PORT_MONGOLAB"
export MONGO_DATABASE="BASE_MONGOLAB"

case "$1" in
  start)
  exec forever --sourceDir=/home/pi/teleinfo-app -p /tmp teleinfo-app.js
&
  ;;
stop)
  exec forever stop --sourceDir=/home/pi/teleinfo-app teleinfo-app.js
  ;;
*)
  echo "Usage: /etc/init.d/node-teleinfo {start|stop}"
  exit 1
  ;;
esac

exit 0

La commande suivante permet de configurer votre système pour que le script se lance au démarrage :

sudo update-rc.d node-teleinfo defaults

Pour la suite …

Maintenant que les données sont stockées, il va falloir les restituer ! Je n’ai pas encore beaucoup avancé sur cette partie. J’ai commencé à intégrer express pour avoir des infos "live" (puissance instantanée, intensité instantanée et index) . Il reste toute la partie exploitation des données.

J’ai oublié de le préciser, mais j’accepte les pull-requests ;-)

A suivre donc.