Monthly Archives: avril 2012
Installation d’OLA et prise en main du DMX à travers python & php
Maintenant que notre contrôleur compatible Open DMX, nous allons pouvoir l’exploiter logicielement.
Mon but étant de pouvoir changer la couleur (ce qui reviens à allumer/éteindre) en quelques clics ; ainsi que de voir ce qu’il est possible de faire en ligne de commande et idéalement de changer la couleur depuis une page web.
La platine de test DMX
Mon installation est composée de :
- DMX USB PC V3 (Contrôleur USB / DMX) → 36,50 €.
- Câble XLR de récup → 0 €.
- Décodeur DMX RGB → 23,08 €.
- Alim 12V de récup → 0 €.
- Câble pour connecter les bandeaux RGB → 1,50 €.
- 2x Bandeau RGB 12V 5050 30cm → 1,35 € / pièce.
- Bouchon DMX , livré avec le DMX USB PC → 0 €.
Soit environ 67 € le tout, frais de ports inclus.
Un petit schéma de principe :
En phase final, je compte remplacer le XLR par de l’Ethernet et le strip RGB par des spots encastrables LED RGB de ce style :
Le revendeur est l’ancien Eurolite.de, devenu Steinigke Showtechnic : la fiche produit du spot encastable LED RGB 10mm.
Installation de Open Lighting Architecture (OLA)
Toujours depuis une Debian Wheezy, on commence par installer différents paquets qui seront nécessaire pour la compilation.
# ldconfig
Et on récupère l’archive d’OLA.
# wget http://linux-lighting.googlecode.com/files/ola-0.8.18.tar.gz
# tar zxvf ola-0.8.18.tar.gz
# cd ola-0.8.18
# ./configure --enable-python-libs --enable-http
Le « enable-python-libs » permettra d’envoyer des commandes DMX à partir d’un script python.
Le « enable-http » permettra d’utiliser de tester ola à travers une page http.
# make install
# ldconfig
Et voila ! C’est installé.
Ola exige d’être démarré avec un utilisateur non root.
# su ola
Avant cette première exécution, il est important de veiller à ce que le contrôleur USB/DMX soit reconnu en tant que /dev/dmx0.
Le 3 (/4) correspond au niveau de verbosity.
Vous devriez voir au moins ces lignes apparaîtrent :
PluginManager.cpp:74: Trying to start Enttec Open DMX DeviceManager.cpp:111: Installed device: OpenDmx USB Device:6-0 PluginManager.cpp:78: Started Enttec Open DMX
Si vous avez installez libmicrohttpd5, vous devriez pouvoir accéder à la page http://ip_du_serveur_ola:9090 .
Et configurer votre fixture aka « universe« .
J’ai attribué au contrôleur RGB l’adressage DMX 1.
Dont la notice a été scannée.
Dans l’onglet Console, je peux modifier la valeur de mes trois canaux RGB et donc chacune des trois couleurs.
Ce qui donne :
Youpi !
De quoi être tranquille au démarrage de la machine, j’ai pondu ce petit init.d script pour ola à partir du skeleton.
#! /bin/sh ### BEGIN INIT INFO # Provides: olad # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: olad initscript # Description: Open Lighting Architecture init script ### END INIT INFO # Author: Lionel / domolio.fr # # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin/ DESC="Open Lighting Architecture Daemon" NAME=olad DAEMON=/usr/local/bin/$NAME DAEMON_ARGS="-f" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME USER=olad # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.2-14) to ensure that this file is present # and status_of_proc is working. . /lib/lsb/init-functions # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --chuid $USER --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon --start --chuid $USER --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend # on this one. As a last resort, sleep for some time. } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --chuid $USER --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 # Wait for children to finish too if this is a daemon that forks # and if the daemon is only ever run from this initscript. # If the above conditions are not satisfied then add some other code # that waits for the process to drop all resources that could be # needed by services started subsequently. A last resort is to # sleep for some time. start-stop-daemon --chuid $USER --stop --quiet --oknodo --retry=0/10/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 # Many daemons don't delete their pidfiles when they exit. rm -f $PIDFILE return "$RETVAL" } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # start-stop-daemon --chuid $USER --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 exit 3 ;; esac :
# insserv olad
Ainsi Open Lighting Architecture sera lancé à chaque démarrage.
Conclusion d’OLA
Cool, ça prend forme !
Il manque un gros détail : ça ne me semble pas viable de contrôler les couleurs à travers l’interface d’administration d’OLA, j’ai besoin de le faire en dehors de cette interface.
D’où l’intérêt d’avoir installé les libraires python d’Open Lighting Architecture.
Prise de contrôle du DMX par PHP & Python
Mon idée est de pouvoir disposer d’une roue chromatique depuis mon smartphone et pouvoir changer les couleurs de mon escalier, par exemple, pour la frime par challenge.
OLA a été installé avec des librairies python, servons-nous en.
Le wiki d’OLA fait part de scripts simple en pyhton.
import array from ola.ClientWrapper import ClientWrapper def DmxSent(state): wrapper.Stop() universe = 1 data = array.array('B') data.append(10) data.append(50) data.append(255) wrapper = ClientWrapper() client = wrapper.Client() client.SendDmx(universe, data, DmxSent) wrapper.Run()
En ayant olad d’exécuté, on lance :
Si le script ne vous retourne rien et vous éclaire d’un joli bleu, tant mieux !
A l’inverse, si le script python retourne ceci :
Traceback (most recent call last): File "testor.py", line 2, infrom ola.ClientWrapper import ClientWrapper ImportError: No module named ola.ClientWrapper
C’est que libraires d’OLA ne sont pas importables par le script.
L’une des solutions consiste à copier les libraires dans le script de travail de python.
Relancez le script et la vie est bleue !
Voila pour la partie pyhton -> DMX.
Place maintenant à la partie PHP Python.
Dans mon délire d’avoir une roue chromatique ou quelque chose qui y ressemble, j’ai utilisé un script jQuery.
J’ai modifié le script pyhton pour lui passer les couleurs RGB en argument :
#!/usr/bin/python import sys, array from ola.ClientWrapper import ClientWrapper def DmxSent(state): wrapper.Stop() universe = 1 data = array.array('B') data.append(int(sys.argv[1])) data.append(int(sys.argv[2])) data.append(int(sys.argv[3])) wrapper = ClientWrapper() client = wrapper.Client() client.SendDmx(universe, data, DmxSent) wrapper.Run()
Script nommé dmxchangecolor.py placé dans /usr/local/bin/ avec droit en éxecution.
Ma page php :
<?php function html2rgb($color) { if ($color[0] == '#') $color = substr($color, 1); if (strlen($color) == 6) list($r, $g, $b) = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]); elseif (strlen($color) == 3) list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]); else return false; $r = hexdec($r); $g = hexdec($g); $b = hexdec($b); return array($r, $g, $b); } if(isset($_POST['envoyer'])) { $htmlcolor = $_POST['htmlcolor']; $rgb = html2rgb($htmlcolor); exec("dmxchangecolor.py $rgb[0] $rgb[1] $rgb[2]"); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <link rel="stylesheet" href="css/colorpicker.css" type="text/css" /> <link rel="stylesheet" media="screen" type="text/css" href="css/layout.css" /> <title>ColorPicker DMX - jQuery plugin</title> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/colorpicker.js"></script> <script type="text/javascript" src="js/eye.js"></script> <script type="text/javascript" src="js/utils.js"></script> <script type="text/javascript" src="js/layout.js?ver=1.0.2"></script> </head> <body> <form action="" method="post" > <input type="text" maxlength="6" size="6" id="colorpickerField" name="htmlcolor" value="<?php echo $htmlcolor ?>" /><br /> <input type="submit" value="Envoyer" name="envoyer" /> </form> </body> </html>
Simple et efficace, je choisis ma couleur, valide le formulaire, la fonction php convertit la couleur HTML en RGB qui la soumet au script python.
Télécharger le script PHP/jQuery/DMX.
Et voila ! J’aurais préféré une libraire PHP comme pour le KNX et le 1-wire, mais je n’en ai pas trouvé malheureusement.
Passer les couleurs à un script python lui même appelé commande php, ça fera l’affaire pour ma future machine à gaz.
Php Show Controller
Autrement, j’ai découvert Php Show Controller (PSC) et son sympathique créateur Laurent.
https://github.com/RenZ0/php-show-controller
L’outil est très intéressant si l’on souhaite scénariser ses lumières.
Le principe est résumé dans le README :
With php interface you change sql data. Python engine reads sql data, and send it to OLA. OLA use your hardware to send DMX signal.
Le paquet a un petit défaut, il n’est pas encore compatible PHP 5.4 car il exige les register_globals (qui ont disparus depuis php 5.4)
Mais d’après l’auteur, les modifications sont pour très bientôt, pour les impatients, en modifiant les quelques GET et POST vous pourrez vite vous faire une idée de la puissance de PSC.
Voici comment l’installer :
Il faut dans un premier temps python-mysqldb et bien sûr un serveur MySQL.
# wget "http://www.imaginux.com/ccount/click.php?id=148" -O php-show-controller_1.1.1.tar.gz
# tar zxvf php-show-controller_1.1.1.tar.gz
# cd php-show-controller
On crée une base nommée psc.
mysql -p create database psc; quit;
On importe la structure et les paramètres de base :
# mysql -p psc < sql/psc_base.sql
Puis on copie les fichiers web pour apache2
# cd /var/www/
# chown -R www-data:www-data psc
On modifie le fichier des paramètres MySQL pour que PHP s’en serve :
Et les paramètres MySQL pour que pyton utilise également MySQL :
# vi config.py
Et rendez-vous sur la page web de votre installation pour découvrir PSC.
N’oubliez pas de vous aider de README pour le paramétrage de votre scénario.
Conclusion
Après avoir installé les drivers Open DMX USB, après avoir installé Open Lighting Architecture et ses libraires, après avoir testé un scripts python et php.
Je suis sûr et certain de pouvoir introduire des lumières d’ambiances dans mon projet domotique.
Escalier, pièces à vivre, informations lumineuses, les idées sont nombreuses, mais je sais que je pourrais le faire et introduire les interactions dans mon usine à gaz par l’intermédiaire de pages php.
Installation du contrôleur USB DMX (OpenDMX) sur Debian Wheezy
Ça y’est ! J’ai acquis tout le matériel me permettant d’effectuer des tests de DMX pour mon projet de lumières d’ambiances dans notre future maison.
J’ai opté pour un « DMX USB PC V3 » sur eBay, 36,50 € en enchère classique.
Après utilisation avec FreeStyler sous Windows, je peux être très content de mon achat, il répond à tous mes besoins, entre autres financiers.
Je n’anime pas de soirées, je souhaite simplement entre autre éclairer mes escaliers.
Il ne reste plus qu’à l’exploiter sur ma VirtualBox.
Le petit bémol est lié à la domination du produit d’Enttec Open DMX USB qui rend les recherches difficiles, mais au final, rien ne change, c’est effectivement 100% Open DMX compatible.
Installation du driver Open DMX
Si ce n’est pas encore fait, il faut installer le nécessaire pour récupérer et compiler les sources du driver.
Ensuite, il nous faudrait les headers et les sources du kernel pour la compilation.
Enfin, nous récupérons les sources du driver dmx usb module.
# git clone git://github.com/lowlander/dmx_usb_module.git
# cd dmx_usb_module/
MISE A JOUR 26/07/2012 :
la partie ci-dessous n’est plus utile depuis que l’auteur a adapté ses sources pour les kernels en 3.x ; cependant, je ne retirer pas le détail pour les lecteurs qui utilisent – à tord – des sources non actuelles.
Avec des sources à jour, passez directement au make.
Etant sous Debian Wheezy avec un kernel 3.2.0, il est nécessaire de modifier les sources :
(vu sur le tutoriel d’Open DMX).
Sans quoi, il est possible de rencontrer cette erreur :
/usr/src/dmx_usb_module/dmx_usb.c:21:28: fatal error: linux/smp_lock.h: Aucun fichier ou dossier de ce type compilation terminated.
Ou bien, celle-ci :
/usr/src/dmx_usb_module/dmx_usb.c:95:8: warning: type defaults to 'int' in declaration of 'DECLARE_MUTEX' [-Wimplicit-int] /usr/src/dmx_usb_module/dmx_usb.c:95:1: warning: parameter names (without types) in function declaration [enabled by default] /usr/src/dmx_usb_module/dmx_usb.c:123:2: error: unknown field 'ioctl' specified in initializer /usr/src/dmx_usb_module/dmx_usb.c:123:2: warning: initialization from incompatible pointer type [enabled by default] /usr/src/dmx_usb_module/dmx_usb.c:123:2: warning: (near initialization for 'dmx_usb_fops.aio_read') [enabled by default] /usr/src/dmx_usb_module/dmx_usb.c: In function 'dmx_usb_open': /usr/src/dmx_usb_module/dmx_usb.c:298:9: error: 'disconnect_sem' undeclared (first use in this function) /usr/src/dmx_usb_module/dmx_usb.c:298:9: note: each undeclared identifier is reported only once for each function it appears in /usr/src/dmx_usb_module/dmx_usb.c: In function 'dmx_usb_probe': /usr/src/dmx_usb_module/dmx_usb.c:620:2: error: implicit declaration of function 'init_MUTEX' [-Werror=implicit-function-declaration] /usr/src/dmx_usb_module/dmx_usb.c: In function 'dmx_usb_disconnect': /usr/src/dmx_usb_module/dmx_usb.c:731:9: error: 'disconnect_sem' undeclared (first use in this function) /usr/src/dmx_usb_module/dmx_usb.c: At top level: /usr/src/dmx_usb_module/dmx_usb.c:95:8: warning: 'DECLARE_MUTEX' declared 'static' but never defined [-Wunused-function]
Donc c’est parti pour la chasse aux modifs…
Supprimer la ligne 21, ce qui donne :
#include <linux/module.h> #include <linux/completion.h>
Au lieu de :
#include <linux/module.h> #include <linux/smp_lock.h> #include <linux/completion.h>
D’autres modifications :
/* prevent races between open() and disconnect() */ static DECLARE_MUTEX (disconnect_sem);
Devient :
/* prevent races between open() and disconnect() */ static DEFINE_SEMAPHORE(disconnect_sem);
Une autre modif,
.write = dmx_usb_write, .ioctl = dmx_usb_ioctl, .open = dmx_usb_open,
Devient :
.write = dmx_usb_write, .unlocked_ioctl = dmx_usb_ioctl, .open = dmx_usb_open,
Pour terminer,
init_MUTEX (&dev->sem); dev->udev = udev;
Devient :
sema_init(&dev->sem, 1); dev->udev = udev;
J’ai crée un patch, mais le git est régulièrement soumis à des modifications, d’où la présence du détail ci-dessus.
Voici le patch à enregistrer sous dmx_usb_patch.txt
--- dmx_usb_original.c 2012-04-20 17:13:47.508349903 +0200 +++ dmx_usb.c 2012-04-20 17:17:41.894998153 +0200 @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -93,7 +92,7 @@ /* prevent races between open() and disconnect() */ -static DECLARE_MUTEX (disconnect_sem); +static DEFINE_SEMAPHORE(disconnect_sem); /* local function prototypes */ //static ssize_t dmx_usb_read (struct file *file, char *buffer, size_t count, loff_t *ppos); @@ -121,7 +120,7 @@ /* .read = dmx_usb_read, */ .write = dmx_usb_write, - .ioctl = dmx_usb_ioctl, + .unlocked_ioctl = dmx_usb_ioctl, .open = dmx_usb_open, .release = dmx_usb_release, }; @@ -618,7 +617,7 @@ } memset (dev, 0x00, sizeof (*dev)); - init_MUTEX (&dev->sem); + sema_init(&dev->sem, 1); dev->udev = udev; dev->interface = interface;
Il s’applique ainsi :
S’il retourne autre chose que « patching file dmx_usb.c » c’est que le git a été modifié entre la rédaction de cet article et votre installation ; il ne reste plus qu’à remonter les erreurs les unes après les autres.
MISE A JOUR 26/07/2012 :
Ici prenne fin les modifications pour les kernels inférieur à 3.x
Installer le driver OpenDMX sous Ubuntu
Sous Ubuntu, vous devrez modifier le fichier dmx_usb.c pour remplacer chaque occurence de err( en pr_err( .Sans quoi, vous obtiendrez le message d’erreur suivant :
/home/quentin/Bureau/dmx_usb_module/dmx_usb.c: In function ‘dmx_usb_setup’:
/home/quentin/Bureau/dmx_usb_module/dmx_usb.c:256:3: erreur: implicit declaration of function ‘err’ [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [/home/quentin/Bureau/dmx_usb_module/dmx_usb.o] Erreur 1
make[1]: *** [_module_/home/quentin/Bureau/dmx_usb_module] Erreur 2
make[1]: quittant le répertoire « /usr/src/linux-headers-3.5.0-27-generic »
make: *** [default] Erreur 2
Merci à Quentin (cf commentaires).
Compilation
Place à la compilation et l’installation du driver :
# cp dmx_usb.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/
# depmod
Et un petit reboot pour être sûr.
Après insertion du contrôleur DMX USB PC V3 sur une prise USB, dmesg doit absolument vous retourner ceci :
/usr/src/dmx_usb_module/dmx_usb.c: DMX USB device now attached to dmx0
S’il vous est retourné ttyUSB0 au lieu de dmx0, c’est en raison de l’utilisation ftdi_sio au lieu de dmx_usb que nous venons de compiler.
La solution consisterait à décharger ftdi_sio et usbserial (rmmod ftdi_sio) mais ça serait très embêtant pour l’utilisation d’un éventuel autre adaptateur USB/serial.
Je me suis inspiré d’un article intitulé Gérer un pilote USB avec UDEV pour créer un fichier rules:
Fichier rules qui contient ceci :
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", PROGRAM="/bin/sh -c 'echo -n $id:1.0 > /sys/bus/usb/drivers/ftdi_sio/unbind; echo -n $id:1.0 > /sys/bus/usb/drivers/dmx_usb/bind'", MODE="0666"
A noter que le contrôleur USB ce présente comme ceci :
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 002 Device 003: ID 04fa:2490 Dallas Semiconductor DS1490F 2-in-1 Fob, 1-Wire adapter
Bus 002 Device 004: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
La présence du contrôleur USB/DMX n’entraîne pas de changement pour le DS9404 USB/1-Wire.
Lors de la connexion au port USB (ou au rattachement via VirtualBox dans mon cas), dmesg donne ceci :
[ 43.643958] usb 2-3: new full-speed USB device number 4 using ohci_hcd [ 44.184274] usb 2-3: New USB device found, idVendor=0403, idProduct=6001 [ 44.184278] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 44.184281] usb 2-3: Product: FT232R USB UART [ 44.184283] usb 2-3: Manufacturer: FTDI [ 44.184285] usb 2-3: SerialNumber: AH014RWJ [ 44.247045] usbcore: registered new interface driver usbserial [ 44.247061] USB Serial support registered for generic [ 44.247885] usbcore: registered new interface driver usbserial_generic [ 44.248222] usbserial: USB Serial Driver core [ 44.264304] USB Serial support registered for FTDI USB Serial Device [ 44.264682] ftdi_sio 2-3:1.0: FTDI USB Serial Device converter detected [ 44.264794] usb 2-3: Detected FT232RL [ 44.264796] usb 2-3: Number of endpoints 2 [ 44.264799] usb 2-3: Endpoint 1 MaxPacketSize 64 [ 44.264801] usb 2-3: Endpoint 2 MaxPacketSize 64 [ 44.264803] usb 2-3: Setting MaxPacketSize 64 [ 44.288179] usb 2-3: FTDI USB Serial Device converter now attached to ttyUSB0 [ 44.288218] usbcore: registered new interface driver ftdi_sio [ 44.288222] ftdi_sio: v1.6.0:USB FTDI Serial Converters Driver [ 44.300042] usbcore: registered new interface driver dmx_usb [ 44.300044] /usr/src/dmx_usb_module/dmx_usb.c: DMX USB Driver v0.1.20101106 [ 44.320269] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0 [ 44.320311] ftdi_sio 2-3:1.0: device disconnected [ 44.363993] /usr/src/dmx_usb_module/dmx_usb.c: DMX USB device now attached to dmx0
Pour terminer cette première partie, il est nécessaire que le contrôleur Open DMX USB soit lié à /dev/dmx0 avec des droits élargis en lecture et écriture aux utilisateurs du système :
crw-rw-rwT 1 root root 180, 0 avril 20 19:43 /dev/dmx0
Si ce n’est pas le cas, pas la peine d’aller plus loin, il y’a un couac quelque part, retour à la case départ.
Coté matériel, c’est maintenant terminé. Le matériel est reconnu, les modules sont chargés.
Place à l’exploitation logiciel du DMX avec l’installation de Open Lighting Architecture pour Debian Wheezy afin de contrôleur des spots RGB.
Prise en main du KNX en php
Ou comment allumer une lampe depuis une page web.
Après avoir testé linknx et knxweb, via le LiveCD de Ziki, je n’ai pas trop adhéré au principe du duo linknx + knxweb.
C’est sympa, mais pas assez souple par rapport à ce que je souhaite faire avec le 1-wire et le DMX, j’ai donc le choix entre monter une usine à gaz à partir de knxweb ou partir de zéro.
J’ai choisi de partir de zéro.
J’ai furtivement étudié le fonctionnement de linknx via la page d’example php, je prends note de ce fonctionnement xml.
En tirant un trait à linknx, je perdrai la notion de « rules », cette façon de gérer très rapidement des conditions.
A ce moment précis, je ne sais pas comment je vais faire sans.
En compilant eibnetmux, j’ai constaté qu’il embarqué un package php, en cherchant un peu, j’ai trouvé un paquet de samples :
# wget "http://downloads.sourceforge.net/project/eibnetmux/Sample%20client%20applications/1.7.0/eibnetmuxclientsamples-1.7.0.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Feibnetmux%2Ffiles%2FSample%2520client%2520applications%2F1.7.0%2F&ts=1334692571&use_mirror=freefr" -O eibnetmuxclientsamples-1.7.0.tar.gz
# tar zxvf eibnetmuxclientsamples-1.7.0.tar.gz
Je ne prends que la partie php, donc je ne compile rien.
# cp *.php /var/www/
Et le fichier php comprenant les class provient de la compilation.
Hum hum ! writegroup.php et readgroup.php on l’air sympa, voyons voir ça …
Usage: writegroup.php "hostname" "group" "eis" "value" [group eis value ...]
la lampe s’allume !
la lampe s’éteint.
0/0/11 étant un groupe d’adresse correspondant à on/off d’une lampe relié sur un TXA213.
eis étant le type de format, dont les valeurs possibles sont très bien reprises dans une doc d’ABB (page 15).
J’ai repris ces 2 fichiers php pour réaliser une page de test avec des fonctions php.
<?php include( "eibnetmux.php" ); $hostname = "127.0.0.1"; function readgroup($groupaddress,$eis) { global $hostname; $c = new eibnetmux( "php_client", $hostname, 4390 ); $groupaddress = new KNXgroup( $groupaddress, $eis ); $value = $groupaddress->read( $c ); return $value; $c->close(); } function readgroupboolean($groupaddress) { global $hostname; $c = new eibnetmux( "php_client", $hostname, 4390 ); $groupaddress = new KNXgroup( $groupaddress,1); $value = $groupaddress->read( $c ); //return $value; if ($value == 1) return true; elseif ($value == 0) return false; $c->close(); } function writegroup($groupaddress,$eis,$value) { global $hostname; $c = new eibnetmux( "php_client", $hostname, 4390 ); $groupaddress = new KNXgroup( $groupaddress, $eis ); $r = $groupaddress->write( $c, $value); return true; //$value = $groupaddress->read( $c ); //print "New value of $argv[$idx]: $value\n"; $c->close(); } if($_POST['action'] == 'on') writegroup($_POST['groupaddress'],1,1); if($_POST['action'] == 'off') writegroup($_POST['groupaddress'],1,0); ?> La lampe est <?php echo (readgroupboolean('0/0/11'))?"allumée":"eteinte"; ?><br /> <br /> <form action="#" method="POST"> <input type="hidden" readonly="readonly" name="action" value="<?php echo (readgroupboolean('0/0/11'))?"off":"on"; ?>" /> <input type="hidden" readonly="readonly" name="groupaddress" value="0/0/11" /> <input type="submit" name="toggle" value="<?php echo (readgroupboolean('0/0/11'))?"Eteindre":"Allumer"; ?> la lampe" /> </form>
Je voyais cette montagne plus impressionnante qu’elle l’est réellement, maintenant que j’ai franchi ce cap, je suis davantage d’attaque pour des fonctions avancées du KNX à travers PHP.
Affaire à suivre !
Installation de eibd et de eibnetmux sur Wheezy
Enfin un plongeon dans le vif du sujet !
Câblage de la platine
Il est temps de câbler et des profiter des modules achetés (cf article premiers pas en KNX).
Voici ma platine de test :
Bordélique sans rail DIN !
J’utilise du câble RJ45 rigide pour mon bus KNX.
EIBD/EIBNETMUX me servira à communiquer avec mon tableau électrique par l’intermédiaire de mon routeur Siemens IP/KNX .
L’ensemble de mon installation est fait sous Debian Wheezy.
Eibd ou Eibnetmux ?
Pourquoi deux paquets pour le même résultat ? Quelles différences ?
Lorsque eibd a été développé, il n’était pas très stable, c’est à ce moment là, qu’une version parallèle a été développée : eibnetmux.
Eibnetmux n’est pas une surcouche d’eibd, ce sont deux paquets distinct, c’est l’un ou l’autre.
Il y’a différence sur la gestion du tunneling & routing, ces notions ont quasi disparu dans eibnetmux.
Les 2 paquets proposent une utilisation php.
Eibd nécessite d’être exécute avec un utilisateur non root.
Voici un –help des deux outils.
eibd | eibnetmux |
Usage: eibd [OPTION…] URL eibd — a commonication stack for EIB (C) 2005-2011 Martin Koegler <mkoegler@auto.tuwien.ac.at> supported URLs are: ft12:/dev/ttySx ipt:router-ip[:dest-port[:src-port[:nat-ip[:data-port]]]]] iptn:router-ip[:dest-port[:src-port]] usb:[bus[:device[:config[:interface]]]]ft12 connects over a serial line without any driver with the FT1.2 Protocol to a BCU 2ipt connects with the EIBnet/IP Tunneling protocol over an EIBnet/IP gateway. The gateway must be so configured, that it routes the necessary addressesiptn connects with the EIBnet/IP Tunneling protocol over an EIBnet/IP gateway using the NAT mode usb connects over a KNX USB interface -c, –GroupCache enable caching of group communication network Mandatory or optional arguments to long options are also mandatory or optional |
Usage: eibnetmux [options] hostname[:port] where: hostname[:port] defines remote eibnet/ip tunneling server with default port of 3671options:-s –eib_server[=ip:port] activate eibnet/ip server default: no, port=3671 -t –tcp_server[=ip:port] activate tcp server default: no, port=4390 -u –unix_server[=path] activate unix socket server default: no, path=/tmp/eibnetmux -e –eibd_server[=ip:port] activate eibd server default: no, port=$$$ -l –log_level=level set log level default: 0 (0=none, 1=info, 2=verbose, 4=warning, 8=error, 16=critical) (32=fatal 64=user 128=debug 256=trace client 512=trace server) (1024=trace socketserver 2048=trace EIBD 4096=memory) -L –log_dest=udp:host:port send log to udp receiver host @ port -L –log_dest=file:filename write log to file -L –log_dest=syslog:facility send log to syslog using facility -r –ring_level=level set levels logged to ring buffer default: 128 -R –ring_size=kilobytes set size of debug ring buffer default: 32 -d –daemon run as daemon default: no -i –user=username run process as user default: – -g –group=groupname and group default: – -p –pidfile=file file to write pid to default: – -S –security=file file with security restrictions default: – -A –address=ip-address fixed IP address to use default: – -T –testmode run in testmode default: no |
Mon choix s’est porté sur eibnetmux par sa simplicité, son fonctionnement sans problèmes, sa maintenance.
J’ai par ailleurs rencontré des problèmes pour faire fonctionner eibd avec ETS. Problème de tuneling/routing ? probablement, mais le problème ne s’est pas posé avec eibnetmux.
Installation des composants nécessaires
Toujours sur Debian Wheezy (kernel 3.2.0).
Que ça soit eibd ou eibnetmux, il est nécessaire d’installer pthsem, il s’agit d’une libraire multithread dont je n’ai pas trop compris l’utilité, mais nécessaire, donc …
# cd /usr/src/
Et on attaque, la compilation de pthsem.
# tar zxvf pthsem_2.0.8.tar.gz
# cd pthsem-2.0.8/
# ./configure
# make
# make install
Voila pour le strict nécessaire.
Installation d’eibd
Puis on s’attaque à bcusdk qui contient EIBD :
# wget "http://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fbcusdk%2F&ts=1334692790&use_mirror=freefr" -O bcusdk_0.0.5.tar.gz
# tar -zxvf bcusdk_0.0.5.tar.gz
# cd bcusdk-0.0.5/
# export LD_LIBRARY_PATH=/usr/local/lib
# ./configure --enable-onlyeibd --enable-eibnetiptunnel --enable-usb --enable-eibnetipserver --enable-ft12
Le fait de forcer LD_LIBRARY_PATH dans /usr/local/lib induit que certaines librairies d’eibd se trouvent à tort dans ce répertoire.
# ln -s /usr/local/lib/libeibclient.so.0 /lib/libeibclient.so.0
Ce qui permet à groupswrite de trouver ses librairies.
groupswrite est l’outil permettant d’envoyer des données sur le bus KNX.
Test de connexion
D’après mon serveur DHCP, je vois que le routeur IP/KNX a pris l’ip 192.168.0.8.
# su eibd
# eibd --trace=1 -u ipt:192.168.0.8:3671
W00000001: EIBD should not run as root
Layer 0(0907EB30,4F897E60) Open
Layer 0(0907EB30,4F897E60) Openend
Layer 0(0907EB30,4F897E60) Send(026): 06 10 02 05 00 1A 08 01 C0 A8 00 32 0E 58 08 01 C0 A8 00 32 0E 58 04 04 02 00
Layer 0(0907EB30,4F897E60) Recv(020): 06 10 02 06 00 14 44 00 08 01 C0 A8 00 08 0E 57 04 04 02 BD
Connecté ! Youpi !
Installation de eibnetmux
Le soucis avec le routeur Siemens N146 5WG1 146-1AB01 tout comme le N148/21, c’est qu’il n’est capable de communiquer qu’avec un seul partenaire.
Je ne peux pas programmer, tester et utiliser en même temps, car ce module est neuneu semblable à une utilisation en unicast.
La solution consiste à utiliser eibnetmux qui va router l’ensemble des connexions vers le routeur Siemens.
Coté programmation, l’utilisation eibnetmux implique l’utilisation d’ETS v3.
A terme, mon routeur Siemens IP/KNX sera invisible.
Ce schéma est clair, c’est LA solution à adopter.
Coup de chance, la version 2.0.0 de eibnetmux est sortie depuis moins de 24 heures à la rédaction de ce billet.
Il faut répondre aux dépendances de eibnetmux, toujours sous Debian Wheezy :
# wget "http://downloads.sourceforge.net/project/zlogger/zlogger/1.5.0/zlogger-1.5.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fzlogger%2F&ts=1334692716&use_mirror=freefr" -O zlogger-1.5.0.tar.bz2
# tar xfv zlogger-1.5.0.tar.bz2
# cd zlogger-1.5.0
# ./configure --with-plugins
# make
# make install
# apt-get install libpth20 libpth-dev libpolarssl0 pkg-config
# cd /usr/src/
# wget "http://downloads.sourceforge.net/project/eibnetmux/eibnetmux/2.0.1/eibnetmux-2.0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Feibnetmux%2Ffiles%2Feibnetmux%2F2.0.1%2F&ts=1334739400&use_mirror=netcologne" -O eibnetmux-2.0.1.tar.gz
# tar zxvf eibnetmux-2.0.1.tar.gz
# cd eibnetmux-2.0.1
# ./configure --enable-php --with-phpdoc
# make
# make install
Et voila !
Je compile avec la prise en charge php, très important, j’y reviendrai plus tard.
Mon routeur IP/KNX limité à une connexion est devenu ouvert à toutes les connexions.
Pour le tester on lance eibnetmux :
Puis dans un autre shell :
Ou bien une connexion ETS, smartphone, etc … autant qu’on veut !
Je rappele juste que l’utilisation eibnetmux implique l’utilisation d’ETS3.
J’ai crée un petit script d’init pour lancer eibnetmux au démarrage.
L’adresse IP 192.168.0.8 est à adapter bien sur.
#! /bin/sh ### BEGIN INIT INFO # Provides: eibd # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start eibd service at the end of boot # Description: This services is for communications with knx/eib. ### END INIT INFO # by Lionel @ domolio.fr PATH=/sbin:/usr/sbin:/bin:/usr/bin NAME=eibnetmux DAEMON=/usr/local/bin/eibnetmux DAEMON_ARGS="-s -t -u -e -d --pidfile=/var/run/eibnetmux.pid 192.168.0.8" PIDFILE=/var/run/eibnetmux.pid # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions if [ ! -x $DAEMON ]; then echo "eibnetmux appears to be uninstalled." fi # # Function that starts the daemon/service # do_start() { echo -n "Starting eibdnetmux" /usr/local/bin/eibnetmux $DAEMON_ARGS echo " done" } do_stop() { echo "Stoping eibdnetmux" PID=`cat $PIDFILE` kill $PID &> /dev/null echo "done" } # # Function that stops the daemon/service # case "$1" in start) do_start ;; stop) do_stop ;; restart) do_stop sleep 1 do_start ;; status) pid=$(pidofproc -p $PIDFILE $DAEMON) ret=$? pid=${pid% } # pidofproc() supplies a trailing space, strip it if [ $ret -eq 0 ]; then echo "eibdnetmux is running (PID: $pid)" exit 0 elif [ $ret -eq 1 ] || [ $ret -eq 2 ]; then echo "eibdnetmux is dead, although $PIDFILE exists." exit 1 elif [ $ret -eq 3 ]; then echo "eibdnetmux is not running." exit 3 fi echo "sais pas" ;; *) echo "usage: $0 {start|stop|restart|status}" exit 1 esac
# insserv eibnetmux
Conclusion
A ce stade nous avons une plateforme optimale pour la programmation et des tests avancés.
Premiers pas en KNX
Construisant du neuf, je souhaite équiper mon installation électrique en KNX.
Le KNX, c’est quoi en quelques mots ?
C’est pouvoir gérer l’électricité de puissance par des modules intelligents à l’aide d’un bus de communication.
Un très bon topic pour s’initier au KNX.
Depuis septembre 2011, je suis à la recherche de bonnes affaires sur eBay pour me monter une platine de test.
A ce jour, je dispose de :
Produit | Prix obtenu | Prix e-commerce fr |
Hager TXA112 – Alimentation 640mA | 190 € | 437 € |
Hager TXA213 – 3 sorties varation | 160 € | 396 € |
Schneider RegK/640mA – Alimentation 640mA | 60 € | 272 € |
Hager TXA207C – 10 sorties 16A | 255 € | 481 € |
Siemens N146 5WG1 146-1AB01 – Routeur IP/KNX | 157 € | ??? |
C’est clair et net que les prix des modules en Allemagne sont plus intéressants.
Quelques références :
- eibmarkt.com
- eibhandel.de
- preisroboter.de (comparateur de prix)
Et encore plus intéressant sur eBay.de.
Au début, je ne m’imaginais pas investir dans deux alimentations KNX. Le routeur IP/KNX nécessite une alimentation supplémentaire, j’aurais préféré utilisé une alimentation classique pour ce module.
Mais l’occasion s’est présenté de m’équiper d’une seconde alimentation, de plus, il est conseillé d’avoir une alimentation KNX de secours, car elle est primordiale dans l’architecture du KNX.
Je n’ai malheureusement pas trouvé de rails DIN pour monter proprement ma platine de test.
A très vite pour l’installation !
Bientôt la découverte du DMX en domotique
L’escalier éclairé en rouge pour un mail important non lu, voila une idée qui fait sourire.
J’ai l’intention d’exploiter le DMX pour certains points d’éclairages de mon projet maison.
De la simple veilleuse, à la maison communiquante, il est possible de faire de multiples choses très sympas…
– Éclairage de l’escalier avec spots encastrées.
– Lumière d’ambiance.
– Spot encastré à l’extérieur (telle une piste d’atterrissage).
– Ambilight DIY.
– Constellation dans le plafond en fibre optique.
– Spot encastrés dans le parquet ou dans le faux plafond pour délimiter des espaces.
– Etc … Le créatif n’a pas de limite !
Ce projet va me rappeler mon bac STI Electronique, à l’époque orienté sur une console DMX et son scanner.
L’utilisation du DMX dans la maison intelligente est tutorialisée dans un article très complet de Christophe Nowicki :
Gestion de la lumière d’ambiance avec le protocole DMX sous Debian GNU/Linux
Y ‘a tout ce qu’il faut !
Sauf que je trouve l’utilisation du XLR sur l’Ethernet un peu onéreux pour une phase de tests, mais bien pratique en prod, je le conçois.
L’alim à 21 $ … J’ai un vieux boitier externe SATA, son alim 12V ferra parfaitement l’affaire.
Le contrôleur RGB à 32.80 $, y’ a un peu moins cher.
Au final, j’ai acheté sur un site d’enchère, frais de ports inclus :
- Cordon d’alimentation RGB Strip : 1.99 $
- Bandeau 30cm RGB 5050 : 3.38 $
- DMX-512 Decodeur RGB (qui fait XLR et Ethernet) : 30.38 $
J’ai récupéré des câbles XLR.
Il me manque le contrôleur USB / DMX, le plus important ! *snif*
Il coûte assez cher.
Je me pose régulièrement la question de l’utilisation d’un autre contrôleur que la référence du marché : Open DMX USB d’Enttec.
J’ai du mal à comprendre comment Enttec fait pour produire un contrôleur dans une boîte de 5 cm, tandis que les concurrents le font dans le profilé de la prise XLR.
Sauf que … j’attends une bonne occasion pour l’acheter, je guette eBay et leboncoin à l’affût de la bonne affaire.
Malgré que … les autres contrôleurs se disent 100% Open DMX compatible, donc compatible logiciellement.
- Bornier de connexion et le DMX Ethernet
- FUN à ON pour contrôleur les couleurs
- Bouchon DMX
- Oh la belle rose !
- Oh la belle bleue (cyan)
- Les bandeaux de test les moins chers du marchés
- Notice du controleur RGB
- Alimentation de boitier de disque dur externe
- Vivement le contrôleur USB DMX
- DMX_USB_PC V3 par DMX FH
- Enttec Open DMX USB
- Escalier éclairé par LED. source : dmx74.com
Capteur d’ouverture de fenêtres avec un DS2401
Après la découverte du DS2406 en tant que capteur d’ouverture / fermeture de fenêtre, je découvre le DS2401.
Il s’agit toujours d’un boîtier TO-92 dont la pin 3 n’est pas connectée.
Le principe est plus simple : le DS2401 est présent sur le bus ?
- Oui, la fenêtre est fermée.
- Non, la fenêtre est ouverte.
Pas de mode alimenté, l’alim du DATA suffit à alimenter le composant.
Donc il suffit de placer un switch magnétique sur la pin DATA.
Aucune utilisation du 5 Volts.
Ce qui donne ceci :
Place aux tests.
Je garde les autres paires pour maintenir la solidité de l’installation.
Évidemment, le jour venu de mettre ces capteurs en place dans les fenêtres, j’utiliserai de vrais switch magnétiques en accord avec l’entreprise en charge des menuiseries.
Vue dans owhttp :
Mon composant a l’ID DC4343140000
Ou tout simplement en utilisant le uncaches via owfs :
total 0
drwxr-xr-x 1 root root 8 avril 11 15:08 .
drwxr-xr-x 1 root root 8 avril 11 15:08 ..
drwxrwxrwx 1 root root 8 avril 11 15:53 01.DC4343140000
drwxrwxrwx 1 root root 8 avril 11 15:53 28.7B2DB5030000
drwxrwxrwx 1 root root 8 avril 11 15:53 81.BD2223000000
drwxr-xr-x 1 root root 8 avril 11 15:08 alarm
drwxr-xr-x 1 root root 8 avril 11 15:08 bus.0
drwxr-xr-x 1 root root 8 avril 11 15:08 bus.1
drwxr-xr-x 1 root root 8 avril 11 15:08 settings
drwxrwxrwx 1 root root 8 avril 11 15:53 simultaneous
drwxr-xr-x 1 root root 8 avril 11 15:08 statistics
drwxr-xr-x 1 root root 32 avril 11 15:08 structure
drwxr-xr-x 1 root root 8 avril 11 15:08 system
Voila, c’est encore plus simple à mettre en place que le DS2406.
J’ai hâte de faire les premiers tests en php pour utiliser pleinement ces composants.
Avantage du DS2401 par rappot au DS2406 ?
Le coût ! On peut facilement trouver des DS2401 par 10 à moins de 10 €, frais de port compris, ça fait moins d’un euro le capteur d’ouverture.
Tonido sur Debian Wheezy
Voila bientôt un an que j’utilise régulièrement DropBox.
Très pratique, sauf que, à moins d’aligner, je suis limité à 2,5Go, de plus, je ne sais pas où sont stockées mes données personnelles.
A ce jour, il existe quelques alternatives sympathiques :
- hubiC d’OVH : 25Go gratuit, mais je ne suis toujours pas garant de mes données.
- syncany : Projet Open Source prometteur, mais rien de disponible à ce jour.
- SparkleShare : Open Source, installable sur son propre serveur, très bon projet
- Google Drive : Rumeurs ? Quelle confidentialité ?
- OwnCloud : Open Source, très complet, full web (+ webdav), Android en cours, très bidouillable, prometteur.
- Tonido : Freeware (hmm) fouilli et bien complet.
- Client Windows.
- Client Android.
- Installable sur mon propre serveur.
- Une interface web.
Le projet se rapprochant le plus est SparkleShare, c’est également le projet le plus soutenu par la communauté, celui qui évolue le plus à mon goût.
Sauf qu’après l’avoir essayé, l’interface web (SparkleShare Dashboard) est trop légère, ne permet pas l’upload, idem pour le jeune soft Android : pas d’upload et interface légère. L’ensemble du projet semble trop jeune malheureusement.
J’étais parti pour faire un billet sur SparkleShare et son DashBoard pour Android, mais en l’installant et à l’utilisation, je me suis rendu compte qu’il n’était pas encore assez mature pour répondre à mes besoins.
C’est un bon projet, il y ‘a une grosse communauté, il devrait continuer à faire parler de lui.
Même discours OwnCloud, ça bouge beaucoup, mais ça manque de finalité sur l’ensemble.
L’interface web est parfaite, le synchro Windows / Cloud se fait via un lecteur réseau grâce à webdav.
L’appli Android est en développement.
Je possède un serveur kimsufi qui fait serveur mx, hébergement, backup, etc … Donc disposer d’un DropBox like sur mon serveur signifie un espace de stockage largement suffisant, des données sécurisées, et la fierté de dire SAYMOAQUILAIFAIT !!
Donc à défaut d’utiliser SparkleShare et OwnCloud, je m’oriente vers Tonido, le Freeware *sigh*.
Choisir entre Tonido, le dropbox like Freeware et DropBox lui même, limité, avec des données « quelque part », des questions se posent, mais… Tonido win !
Installation du package et des dépendances.
Selecting previously unselected package tonido.
(Lecture de la base de données... 41497 fichiers et répertoires déjà installés.)
Dépaquetage de tonido (à partir de TonidoSetup_i686.deb) ...
dpkg : des problèmes de dépendance empêchent la configuration de tonido :
tonido dépend de libjpeg62 ; cependant :
Le paquet libjpeg62 n'est pas installé.
dpkg : erreur de traitement de tonido (--install) :
problèmes de dépendance - laissé non configuré
Des erreurs ont été rencontrées pendant l'exécution :
tonido
# apt-get install -f
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les NOUVEAUX paquets suivants seront installés :
libjpeg62
0 mis à jour, 1 nouvellement installé, 0 à enlever et 0 non mis à jour.
1 partiellement installé ou enlevé.
Il est nécessaire de prendre 93,7 ko dans les archives.
Après cette opération, 221 ko d'espace disque supplémentaires seront utilisés.
Réception de : 1 http://ftp.fr.debian.org/debian/ wheezy/main libjpeg62 i386 6b1-2 [93,7 kB]
93,7 ko réceptionnés en 0s (1 238 ko/s)
Selecting previously unselected package libjpeg62.
(Lecture de la base de données... 41583 fichiers et répertoires déjà installés.)
Dépaquetage de libjpeg62 (à partir de .../libjpeg62_6b1-2_i386.deb) ...
Paramétrage de libjpeg62 (6b1-2) ...
Paramétrage de tonido (2.37.0.17274) ...
Le répertoire de travail : /usr/local/tonido/
# ./tonido.sh start
Starting Tonido Service: nohup: redirige stderr sur stdout
Suivi de messages d’erreurs bizarres.
Pour l’arrêter.
# kill -9 du PID
Le script de démarrage est vraiment bizarre, j’en ai crée un autre inspiré d’un forum ArchLinux.
#!/bin/bash ### BEGIN INIT INFO # Provides: tonido # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Should-Start: $all # Should-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop Tonido # Description: Start/stop Tonido ### END INIT INFO # Debian init script for Tonido # Inspired by Nick Davis : Arch Linux init script for Tonido Plug application @ Created 1-15-12 # 25/03/2012 USER=tonido TONIDODIR=/usr/local/tonido LOGFILE=/var/log/tonido.log PID=`pidof $TONIDODIR/tonidoconsole` case "$1" in start) echo -n "Starting Tonido Services" if [[ -z ${PID} ]] && su $USER -c "( cd $TONIDODIR && \ export LD_LIBRARY_PATH=. \ && $TONIDODIR/tonidoconsole &>$LOGFILE &)" &> /dev/null; then echo " done" else echo " failed" fi ;; stop) echo "Stopping Tonido Services" kill $PID &> /dev/null; ;; restart) $0 stop sleep 1 $0 start ;; *) echo "usage: $0 {start|stop|restart}" exit 1 ;; esac
# insserv tonido
Et je choisis de lancer tonido avec un utilisateur appelé tonido
# chown -R tonidot:staff /usr/local/tonido/
# touch /var/log/tonido.log
# chown tonido:root /var/log/tonido.log
Il faut avoir lancer Tonido au moins une fois pour avoir un fichier de config
# /etc/init.d/tonido stop
# vi /home/tonido/tonido/data/configex.xml
On autorise l’administration à distance.
RemoteAdmin bool 1
Et direction http://<votre_adresse>:10001 pour la configuration du premier compte admin.
Le truc qui m’embête tout de suite, c’est que tonido tappe dans le home de l’utilisation avec lequel il est lancé. Ainsi que l’ensemble des fichiers du serveur depuis sa racine.
Je ne trouve pas ça super de mélanger utilisateur système et données personnelles, c’est pour cette raison que j’ai choisi de créer un utilisateur dédié à Tonido.
Heureusement, on peut également au forcer l’utilisation d’un seul répertoire :
# chown -R tonido:tonido files
Rendez-vous dans Tools > Settings > Misc > « Add Allowed Folder » sauf que … Cannot Perform Operation Remotely.
La solution est de monter un tunneling VPN, et oui, pour les opérations déliquates, seule une IP LAN peut modifier les paramètres.
Un mal pour un bien, ça me réconforte que Tonido semble sécurisé.
Ah, sur cette même page, on peut le passer en Français, cool.
De nombreuses erreurs de traduction malgré tout.
A ce stade, Tonido est déjà bien configuré, il reste à adapter, créer des utilisateurs si nécessaire, installer les plugins gratuits.
L’application TonidoSync Client se compare à celle de DropBox.
Un répertoire dans « Mes Documents » correspondant à celui distant.
Coté Android, l’application est moins jolie que celle de DropBox mais tout aussi performante, à voir sur Google Play.
En bonus, Tonido nous fait Streaming pour de la musique.
OwnCloud sait en faire de même grâce à une application interne nommée MiniSub
Conclusion
Tonido est relativement sympa dans son ensemble, je l’ai choisi à défaut d’avoir une solution OpenSource convenable.
Dès qu’on souhaite utiliser des fonctions évoluées, le soft nous rappel bien qu’il s’agit d’un Freeware en proposant d’acheter une version Pro à 29 $.
A voir à l’usage, pas de coup de coeur pour Tonido à ce jour, je garde un oeil discret sur le twitter OwnCloud dans l’espoir d’y voir un apk beta du git android ou une application Android webdav qui me convienne.