samedi 15 août 2015

Domoticz sur BeagleBone

Introduction


Cet article résume la procèdure de compilation et d'installation de Domoticz sur une carte BeagleBone Black (rev B) configurée avec une distribution Linux Debian 8 (Jessie).

Prérequis


  • Un serveur Linux/Debian
  • Les outils de compilation C++
  • La librairie open-zwave pour utiliser ce protocole
  • Un client Subversion

Client git

Le client git s'installe depuis le repository de paquets Debian avec la commande suivante:
sudo apt-get install git

Outils de compilation C++

Les librairies nécessaires à la compilation s'installent avec les deux commandes suivantes:
sudo apt-get install build-essential -y
sudo apt-get install cmake libboost-dev libboost-thread-dev libboost-system-dev libsqlite3-dev curl libcurl4-openssl-dev libusb-dev zlib1g-dev libssl-dev

Compilation d'openZWave


Installer la dépendance libudev:
sudo apt-get install libudev-dev

Depuis le répertoire racine des compilations qui est par défaut /home/debian:
Récupérer les sources depuis github avec l'aide de la commande suivante:
git clone https://github.com/OpenZWave/open-zwave.git

Lancer la compilation:
/home/debian$ make

La sortie standard de la commande make devrait ressembler aux lignes suivantes (noter la version 1.3.437):
make -C /home/debian/open-zwave/cpp/build/ -
make[1]: Entering directory '/home/debian/open-zwave/cpp/build'
Building OpenZWave Version 1.3-437-g09a092
...
Linking Static Library
Linking Shared Library
make[1]: Leaving directory '/home/debian/open-zwave/cpp/build'
make -C /home/
debian/open-zwave/cpp/examples/MinOZW/ -
make[1]: Entering directory '/home/debian/open-zwave/cpp/examples/MinOZW'
Building Main.o
Linking /home/
debian/open-zwave/.lib/MinOZW
g++ -o /home/
debian/open-zwave/.lib/MinOZW /home/debian/open-zwave/.lib/Main.o /home/debian/open-zwave/libopenzwave.so -pthread
Creating Temporary Shell Launch Script
make[1]: Leaving directory '/home/
debian/open-zwave/cpp/examples/MinOZW'

Création d'un lien vers libOpenZWave


La librairie OpenZwave compilée précedemment correspond à la version 1.3-437. Je recommande la création d'un lien symbolique vers cette librairie depuis le répertoire racine utilisé pour les compilations (/home/debian):

ls -al
drwxr-xr-x 23 debian debiann  4096 Aug 9 15:23 domoticz
drwxr-xr-x 11 debian debian  4096 Aug 9 16:07 open-zwave

mv open-zwave ozw-1.3.434
ln -s ozw-1.3.434 ozw 

ls -al
drwxr-xr-x 23 debiandebian  4096 Aug 9 15:23 domoticz
lrwxrwxrwx 1 debiandebian  11 Aug 9 16:13 ozw -> ozw-1.3.434
drwxr-xr-x 11 debiandebian  4096 Aug 9 16:07 ozw-1.3.434

Compilation de domoticz



Etat des lieux

La commande free -mh affiche la quantité de RAM utilisée:
                              total       used       free     shared    buffers    cached
Mem:                     490M     102M      387M  8,3M       15M        51M
-/+ buffers/cache:  35M       455M
Swap:                     0B         0B            0B

La commande df -h affiche la liste des systémes de fichiers montés ainsi que leurs points de montage et taux d'occupation.
Sys. de fichiers   Taille  Utilisé   Dispo   Utilisé   Monté sur
udev                    10M    0          10M      0% /dev
tmpfs                   99M    4,3M    94M      5% /run
/dev/mmcblk0p1 1,8G    1,1G     573M    66% /
tmpfs                   246M  0          246M    0% /dev/shm
tmpfs                   5,0M   4,0K     5,0M     1% /run/lock
tmpfs                   246M  0          246M     0% /sys/fs/cgroup


Création d'un espace de swap

La commande free montre que ce système ne possède pas d'espace de swap.
L'utilisation de librairies templates comme boost requiert beaucoup de mémoire pendant l'étape de compilation de domoticz, en particulier lors de la fabrication du serveur Web. Afin de garantir le succès de cette étape, je recommande d'ajouter un RAM disk pour permettre au système de swapper s'il ne dispose pas de la quantité de memoire physique nécessaire.

Le file système dispose de 573Mo libre, on peut donc créer un espace de swap temporaire de 256Mo.

La commande suivante permet de créer un fichier d'une capacité de 256Mo pour le futur espace de swap (1024*256 = 262144 blocks).

sudo dd if=/dev/zero of=/swapfile bs=1024 count=262144

262144+0 enregistrements lus
262144+0 enregistrements écrits
268435456 octets (268 MB) copiés, 34,4415 s, 7,8 MB/s


Ensuite, il convient de sécuriser les accès à cet espace mémoire:

sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

Enfin, on définit puis on active cet espace de swap avec l'aide des commandes suivantes:
sudo mkswap /swapfile

Setting up swapspace version 1, size = 262140 KiB
no label, UUID=d1868600-d866-4982-a4f5-e7ee0abd580f


sudo swapon /swapfile
                              total       used       free       shared    buffers     cached
Mem:                     490M     330M      160M    4,3M       7,7M        287M
-/+ buffers/cache:  34M       455M
Swap:                    255M      0B           255M

Compilation

Depuis le répertoire racine des compilations (/home/debian).
Récupérer les sources depuis le repository git hub avec l'aide de la commande suivante:
git clone https://github.com/domoticz/domoticz.git domoticz

Aller dans le réperoire domoticz et modifier le chemin de recherche de la librarie openZWave dans le fichier CMakeLists.txt:

cd domoticz; vi  CMakeLists.txt:

# try to find open-zwave, if found, include supportfind_library(OpenZWave NAMES libopenzwave.a HINTS "../ozw" "../ozw/cpp/build")

Lancer la fabrication du makefile avec la commande suivante:
cmake -DCMAKE_BUILD_TYPE=Release .

La sortie standard de la commande cmake devrait ressembler aux lignes suivantes (noter la révision 2737 ainsi que la détection de libopenzwave):

-- Compiling Revision #2737
-- Boost version: 1.49.0
-- Found the following Boost libraries:
--   thread
--   date_time
--   system
-- Linking against boost static libraries
-- Found ZLIB: /usr/lib/arm-linux-gnueabihf/libz.so (found version "1.2.7")
-- ZLIB libraries found at: /usr/lib/arm-linux-gnueabihf/libz.so
-- ZLIB includes found at: /usr/include
-- Found CURL: /usr/lib/arm-linux-gnueabihf/libcurl.so (found version "7.26.0")
-- Curl libraries found at: /usr/lib/arm-linux-gnueabihf/libcurl.so
-- Curl includes found at: /usr/include
-- Found LIBUSB: /usr/lib/arm-linux-gnueabihf/libusb.so 
-- LIBUSB found at: /usr/lib/arm-linux-gnueabihf/libusb.so
-- Crypto library found at: /usr/lib/arm-linux-gnueabihf/libcrypto.so
-- /home/debian/ozw/libopenzwave.a
 

 Lancer la compilation de domoticz avec l'aide de la commande:
make
... 
Linking C static library liblua.a
[ 19%] Built target lua
Scanning dependencies of target mqtt
[ 19%] Building C object MQTT/CMakeFiles/mqtt.dir/mosquitto.c.o
[ 20%] Building C object MQTT/CMakeFiles/mqtt.dir/logging_mosq.c.o
[ 20%] Building C object MQTT/CMakeFiles/mqtt.dir/memory_mosq.c.o
[ 21%] Building C object MQTT/CMakeFiles/mqtt.dir/messages_mosq.c.o
[ 21%] Building C object MQTT/CMakeFiles/mqtt.dir/net_mosq.c.o
[ 22%] Building C object MQTT/CMakeFiles/mqtt.dir/read_handle.c.o
[ 22%] Building C object MQTT/CMakeFiles/mqtt.dir/read_handle_client.c.o
[ 23%] Building C object MQTT/CMakeFiles/mqtt.dir/read_handle_shared.c.o
[ 24%] Building C object MQTT/CMakeFiles/mqtt.dir/send_client_mosq.c.o
[ 24%] Building C object MQTT/CMakeFiles/mqtt.dir/send_mosq.c.o
[ 25%] Building C object MQTT/CMakeFiles/mqtt.dir/socks_mosq.c.o
[ 25%] Building C object MQTT/CMakeFiles/mqtt.dir/srv_mosq.c.o
[ 26%] Building C object MQTT/CMakeFiles/mqtt.dir/thread_mosq.c.o
[ 26%] Building C object MQTT/CMakeFiles/mqtt.dir/time_mosq.c.o
[ 27%] Building C object MQTT/CMakeFiles/mqtt.dir/tls_mosq.c.o
[ 27%] Building C object MQTT/CMakeFiles/mqtt.dir/util_mosq.c.o
[ 28%] Building C object MQTT/CMakeFiles/mqtt.dir/will_mosq.c.o
Linking C static library libmqtt.a
[ 28%] Built target mqtt
Scanning dependencies of target sqlite
...

Remarque

L'espace de swap est recommandé puisque lors de la phase de compilation du serveur web:
[ 36%] Building CXX object CMakeFiles/domoticz.dir/main/WebServer.cpp.o

Le système réalise quelques opérations de swap (14Mo):
             total         used       free      shared   buffers    cached
Mem:                     490M     456M   33M       280K       636K       
-/+ buffers/cache:  431M     59M
Swap:                     255M     14M     241M

Suppression du swap

La commande suivante desactive l'espace de swap:
sudo swapoff /swapfile

La commande suivante supprime le fichier de swap correspond:
sudo rm /swapfile

Création d'un lien vers domoticz


La version de domoticz compilée précedemment correspond à la révision  2737. Je recommande la création d'un lien symbolique vers cette librairie depuis le répertoire racine utilisé pour les compilations ((/home/debian):

ls -alh
drwxr-xr-x 25 pi   debian   4.0K Aug  9 19:35 domoticz
lrwxrwxrwx  1 debian   debian     11 Aug  9 16:13 ozw -> ozw-1.3.434
drwxr-xr-x 11 debian   debian   4.0K Aug  9 16:07 ozw-1.3.434
mv domoticz domoticz-2737
ln -s domoticz-2737 domoticz

ls -al
lrwxrwxrwx  1 debian   debian       13 Aug  9 19:39 domoticz -> domoticz-2737
drwxr-xr-x 25 debian   debian     4096 Aug  9 19:35 domoticz-2737
lrwxrwxrwx  1 debian   debian       11 Aug  9 16:13 ozw -> ozw-1.3.434
drwxr-xr-x 11 debian   debian     4096 Aug  9 16:07 ozw-1.3.434

Démarrage


Pour démarrer domoticz sous la forme d'un service recopier le script  domoticz.sh sous le répertoire /etc/init.d:
sudo cp domoticz.sh /etc/init.d 
sudo chmod +x /etc/init.d/domoticz.sh 
sudo update-rc.d domoticz.sh defaults 

Editer le script afin de mettre à jour le chemin d'accès au programme domoticz: 
sudo vi /etc/init.d/domoticz.sh 
DAEMON=/home/debian/domoticz/domoticz

Le script permet aussi de changer le port utilisé par l'interface Web:
OPTIONS=-www 8080

domoticz peut maintenant être supervisé avec les commandes suivantes:
sudo service domoticz.sh start
sudo service domoticz.sh stop
sudo service domoticz.sh status

Gestion des services


La commande update-rc.d permet d'ajouter, modifier ou supprimer un service.

Ajout

La commande update-rc.d [-n] domoticz.sh defaults ajoute le service domoticz (l’option -n permet de tester la commande sans la jouer).

Suppression

La commande update-rc.d domoticz.sh remove desactive le service domoticz. Cependant, si on souhaite réactiver le service ultérieurement, on pourra exécuter de nouveau la commande suivante: update-rc.d domoticz.sh defaults.

Aucun commentaire:

Enregistrer un commentaire