Comme promis je me suis obstiné à accoupler mon Raspberry PI et mon OWL CM160 Usb pour centraliser l’état de ma consommation électrique, voici ce qu’il vous faut pour présenter Papa (OWL) à Maman (RaspBerry PI) pour que Papa puisse enfin communiquer avec Maman 😉 :
1ère PARTIE Préparation du RaspBerry
Matériel :
- 1 Raspberry PI avec 4 Go pour la SD minimum
- 1 Owl USB CM160
- 1 Lecteur de Carte SD
Logiciels :
Télécharger l’image Raspbian « Wheezy », maintenant préparons le Raspberry à l’aide d’un lecteur de carte SD et d’une carte SD (désolé déformation professionnelle, c’est pour éviter la question je fais quoi avec le lecteur ?)
Lancez le logiciel Win32diskimager, cliquez sur l’icone du dossier, sélectionnez votre image raspbian (ici 2012-12-16-wheezy-raspbian.img), choisissez la lettre du lecteur de la carte SD (ATTENTION !) dans la liste déroulante Device, puis cliquez enfin sur le bouton Write et patientez, voila il ne reste plus qu’a mettre la SD dans ….. le RaspBerry bien sur.
Branchez au choix :
- un clavier et une souris plus un écran (optionnel le réseau)
- ou simplement branchez le câble réseau
Connectez vous au raspberry :
Par défaut l’utilisateur : pi & le pass : raspberry
1 – Configurez le Raspberry :
sudo raspi-config
J’ai juste utilisé les deux options suivantes :
- expand_rootfs
- configure_keyboard
Pour l’option expand_rootfs, j’ai redémarré immédiatement après, le raspberry pi mettra un petit moment avant d’être accessible, il faudra patienter ! 🙂
2 – Mettre à jour le firmware & installez le gestionnaire :
A ne pas faire cette étape 2 maintenant si vous voulez que ce tuto fonctionne !
sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
sudo apt-get install ca-certificates
sudo rpi-update
3 – Préparation du pi à OWL
Pour ma part à cette étape la j’ai dû modifier l’installation du pi, voici ce qui rend compatible le rPi avec l’owl (vérifiez que vous avez bien la version 3.2.27 ! => uname -r) :
sudo bash
cd /usr/src
wget https://github.com/raspberrypi/linux/tarball/rpi-3.2.27
mv rpi-3.2.27
tar xzf rpi-3.2.27
cd raspberrypi-linux-*
zcat /proc/config.gz > .config
make oldconfig
make modules_prepare
wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
KSRC=`pwd`
pushd /lib/modules/`uname -r`
ln -s ${KSRC} source
ln -s ${KSRC} build
popd
pushd /usr/src
ln -s ${KSRC} linux-`uname -r`
ln -s ${KSRC} linux
popd
4 – Installation du driver cm210x (electricowl)
ces commandes se feront à partir de l’utilisateur pi ! Exit => quitte l’utilisateur root pour revenir sur l’utilisateur precedent (pi)
exit
cd /home/pi
wget http://downloads.sourceforge.net/project/electricowl/v2.0/electricowl_2.0.tgz
tar zxvf electricowl_2.0.tgz
cd /home/pi/electricowl_2.0/owl_cm160_driver/
./build.sh
Un petit redémarrage
sudo reboot
Ensuite nous vérifions que le pilote est bien activé :
lsmod | grep cp210x
qui me donne comme résultat :
cp210x 11244 1
usbserial 34545 3 cp210x
Si ce n’est pas le cas, pour l’ajouter au démarrage :
sudo bash
pico /etc/modules
ajoutez cp210x à la fin. (ctrl + x, puis o pour oui et touche entrée bande de naab !)
sudo reboot
Maintenant nous allons installer l’essentiel pour le cm160server, à savoir python et java :
cd /home/pi/electricowl_2.0/
sudo apt-get install python-serial
sudo apt-get install openjdk-7-jdk
Nous passons maintenant au serveur cm160server :
cd /home/pi/electricowl_2.0/
sudo ./install.sh
Maintenant nous allons lancer la commande pour voir que tout est operationnel :
cm160server
qui doit nous donner comme résultat ceci :
5 Fonctionnement du cm160server :
En fonction de l’utilisateur qui a lancé l’application (ici pi), cm160server créer une base de données sqlite par défaut dans /home/pi/ ayant pour nom cm160_data.db
INFO: -f : Followed by the sqlite DB file to log sensor
INFO: data (default=/home/pi/cm160_data.db).
INFO: -p : Followed by the server port (default=12745).
INFO: -s : Followed by the serial port to check for the
INFO: OWL+USB (CM160) device.
INFO: If not supplied then a search for a connected
INFO: OWL+USB (CM160) device is performed.
INFO: -r: Read data from the database and display on stdout. If -i/-l
INFO: arguments are not supplied then the entire database is displayed.
INFO: -i: Followed by the inital date/time. Only used if the -r argument
INFO: is provided.
INFO: Format of date time may be
INFO: dd/mm/yyyy or
INFO: hh:mi:dd/mm/yyyy
INFO: -l: Followed by the last date/time. Only used if the -r argument
INFO: is provided (same format as used for the -i argument).
INFO: -t: Forward the data from the sqlite database to a text file
INFO: named as per the sqlite DB, but with .txt extension
INFO: added. This is provided to allow user scripts to parse the
INFO: text file.
INFO: -o: Display data (when -r or -t arguments are used) in old compatible
INFO: mode format. This was the original output format for CM160
INFO: data and is retained only because some users have developed
INFO: scripts that parse data in this format.
INFO: -q : Quiet mode. No text is sent to stdout in this mode.
INFO: -d: Debug on. Send extra debug text to stdout if not in quiet mode.
INFO: -h : Display this help text.
Cependant il reste encore un problème, il faut lancer cm160server à partir de l’utilisateur dès le démarrage du système, allons régler ce problème :
6 – Démarrer cm160server à chaque redémarrage avec l’utilisateur pi :
Il faut tout d’abord créer un fichier sh dans le home de pi :
cd /home/pi/
> cm160server_script.sh
pico cm160server_script.sh
Nous insérons dans le fichier cm160server_script.sh la ligne suivante :
cm160server -t
Nous refermons le fichier (Ctrl + x, tapez o, puis touche entrée), maintenant il faut rendre exécutable ce fichier :
sudo chmod u+x /home/pi/cm160server_script.sh
Il faut ajouter ajouter ce fichier au démarrage :
sudo pico /etc/rc.local
Ajoutez la ligne suivante avant le exit 0
sudo -u pi /home/pi/cm160server_script.sh
Nous refermons le fichier (Ctrl + x, tapez o, puis touche entrée), puis nous lançons un reboot :
sudo reboot
On vérifie si le cm160server est bien lancé :
top | grep pi
Voila nous avons notre raspberry py qui récupère les data automatiquement à chaque reboot, c’est pas émouvant !
Pour la partie 2 de ce tuto, nous récupérerons les données du fichier cm160_data.db.txt à partir d’un fichier php en cron pour injecter la dernière mesure de l’OWL sur emoncms, ce qui doit nous donner ceci :
Merci pour ce tuto bien détaillé. J’attends la suite avec impatience… Merci d’avance
Merci, il est en cours de rédaction, il arrive bientôt, faut juste que j’isole tous les problèmes que j’ai rencontré avec le couple raspberry & owl pour avoir un tuto 100% fonctionnel.
Cool, thanks for this. I’ve scoured the net and come up with the same information but for some reason I encountered problems installing the driver. I keep getting:
WARNING: « usb_serial_disconnect » [/path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.ko] undefined!
WARNING: « usb_serial_probe » [/path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.ko] undefined!
WARNING: « usb_serial_deregister » [/path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.ko] undefined!
WARNING: « usb_serial_register » [/path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.ko] undefined!
CC /path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.mod.o
LD [M] /path/to/home/electricowl/build_linux/electricowl_2.1/owl_cm160_driver/cp210x.ko
make[1]: Leaving directory `/usr/src/raspberrypi-linux-ada8b44′
ERROR: could not insert ‘cp210x’: Exec format error
Did you have any similar problems when you tried this out?
Hi Matthews,
I formatted my raspberry pi many times, once it works, after i make the same thing (following my tutorial ^^), and then it doesn’t work, 3 times works, 6 times failed.
The problem you describe, is my last one, I hope to be able to solve this weekend, and to answer you quickly.
Sorry for my bad english
I can’t understand it either. I have no idea how compiling works in Linux. Any chance you could just post the compiled driver?
I think I’ve figured out what was wrong. Rather than downloading the Modules.symvers file I instead ran make on the Kernel source. It takes a couple of hours but when it finished I ran the build script and it seemed to compile fine. I had to leave for work before testing it out but if all is well I’ll post the Modules.symvers file and/or the cp210x.ko file.
Hi Matthew,
Thank’s for the tips, i dig in this direction,
Last weekend I compile with version 3.6, but without success :-/.
I hope the Modules.symbers is the good direction. I’ll try this week end, and add the correction.
I test this later :
Instead of Party 2 and 3 :
sudo bash
cd /usr/src
wget https://github.com/raspberrypi/linux/tarball/rpi-3.2.27
tar xzf rpi-3.2.27
ln -s /usr/src/raspberrypi-linux-ada8b44 /lib/modules/`uname -r`/build
cd /usr/src/raspberrypi-linux-ada8b44
sh -c ‘zcat /proc/config.gz > .config’
sed -i ‘s/EXTRAVERSION =.*/EXTRAVERSION = +/’ Makefile
cp ~/Module.symvers .
make oldconfig
make modules_prepare
Source :
https://www.grendelman.net/wp/compiling-kernel-modules-for-raspbian-raspberry-pi/
Ok, yes the problem is the modules.symvers, i try to compile with the 3.2.27+ to get the good modules.symver.
When it finish, i post the good modules.symver, and i correct the tuto.
Thanks again.
Bonjour.
Super tuto. Juste un probleme avec le lancement de cm160server, tout ce passe bien il scanne le usb0 rien et sur le usb1 il trouve le owl. Il m’indique download historical data puis download compete avec le temps. Puis il semble qu’il passe en mode real time. Mais lorsque je me connecte a la database aucune nouvelle donnee. Pour avoir les donnees je suis oblige de faire un ctrl+c sur le commande cm160server et la je vois les donnees apparaitre dans le shell linux, puis dans ma base.
Pouvez vous m’aider pour que la collecte des mesures soient automatique
Merci
Salut,
Je viens de remonter raspberry de zero avec les nouvelles mise à jour (rasbian et electricowl 2.3), pour voir s’il y a un problème :
Vérifie les droits sur le fichier :
cm160server_script.sh (il faut qu’il soit en 755)
il y a une erreur sur le tuto :
sudo chmod +x /home/pi/cm160server_script.sh (fonctionne mieux !)
Apparemment il est normal de ne pas le voir cm160server_script.sh avec la commande :
top | grep pi
Tu peux verifier tes fichiers qui doivent s’incrementer de data :
cm160_data.db.txt et cm160_data.db sur le home de pi.
Pour info je vais le mettre à jour, le pilote 2.3 fournit par electriowl est compatible avec le rapsberry, donc je mettrais en ligne la seconde partie du tuto.
++
Bonjour.
Merci pour les infos, je pense que le chmod 755 et chmod +x etaient deja fait.
Lors je lance le script il trouve bien le owl sur le usb1, il me dit qu’il fait le download, mais rien n’arrive sur la db (verifie en me connectant a la db). Par contre lorsque sur le shell ou est execute le cm160server_script.sh je fait un ctrl+c il m’indique qu’il fait un close du port usb1 et la les datas arrivent, et elles sont presentent dans la db.
Dans l attente de votre aide,merci
bonjour
ou peut t’on trouver la suite de ce super guide ?
merci