Category Archives: Debian

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 :

Platine de test KNX

Platine de test KNX

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
state
-d, –daemon[=FILE] start the programm as daemon, the output will be
written to FILE, if the argument present
-D, –Discovery enable the EIBnet/IP server to answer discovery
and description requests (SEARCH, DESCRIPTION)
-e, –eibaddr=EIBADDR set our own EIB-address to EIBADDR (default
0.0.1), for drivers, which need an address
-f, –error=LEVEL set error level
-i, –listen-tcp[=PORT] listen at TCP port PORT (default 6720)
–no-tunnel-client-queuing do not assume KNXnet/IP Tunneling bus
interface can handle parallel cEMI requests
-p, –pid-file=FILE write the PID of the process to FILE
-R, –Routing enable EIBnet/IP Routing in the EIBnet/IP server
-S, –Server[=ip[:port]] starts the EIBnet/IP server part
-t, –trace=LEVEL set trace level
-T, –Tunnelling enable EIBnet/IP Tunneling in the EIBnet/IP
server
-u, –listen-local[=FILE] listen at Unix domain socket FILE (default
/tmp/eib)
-?, –help Give this help list
–usage Give a short usage message
-V, –version Print program version

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

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 …

# apt-get install build-essential
# cd /usr/src/

Et on attaque, la compilation de pthsem.

# wget http://www.auto.tuwien.ac.at/~mkoegler/pth/pthsem_2.0.8.tar.gz
# 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 :

# cd /usr/src/
# wget "http://downloads.sourceforge.net/project/bcusdk/bcusdk/bcusdk_0.0.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fbcusdk%2F&amp;ts=1334692790&amp;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 /usr/lib/libeibclient.so.0
# 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.

# adduser --disabled-password eibd
# 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.

Schéma de principe d'eibnetmux

Schéma de principe d’eibnetmux (source: eibnetmux @ sourceforge.net)

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 :

# cd /usr/src/
# 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&amp;ts=1334692716&amp;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&amp;ts=1334739400&amp;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 :

# eibnetmux -s -t -u -e 192.168.0.8

Puis dans un autre shell :

# groupsocketlisten ip:127.0.0.1

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.

# vi /etc/init.d/eibnetmux

#! /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
# chmox +x /etc/init.d/eibnetmux
# insserv eibnetmux

Conclusion

A ce stade nous avons une plateforme optimale pour la programmation et des tests avancés.

Posté dans Debian, KNX | 28 Commentaires

Capteur d’ouverture de fenêtres avec un DS2401

Datasheet du DS2401

Datasheet du 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.

Schéma d'utilisation du DS2401

Schéma d'utilisation du DS2401

Ce qui donne ceci :

DS2401 soudé à un switch

DS2401 soudé à un switch

Place aux tests.
Je garde les autres paires pour maintenir la solidité de l’installation.

Fenêtre ouverte le DS2401 est absent

Fenêtre ouverte le DS2401 est absent

Fenêtre fermée le DS2401 est présent

Fenêtre fermée le DS2401 est présent

É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 :

Fenêtre ouverte, DS2401 absent dans owhttp

Fenêtre ouverte, DS2401 absent dans owhttp

Mon composant a l’ID DC4343140000

Fenêtre fermée, DS2401 présent dans owhttp

Fenêtre fermée, DS2401 présent dans owhttp

Ou tout simplement en utilisant le uncaches via owfs :

# ls uncached/ -lha
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.

Posté dans 1-wire, Debian | 12 Commentaires

Tonido sur Debian Wheezy

Logo Tonido

Logo Tonido

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.
Mon utilisation tourne essentiellement autour de l’échange privé entre différents postes, quelques partages publics, sauvegardes de téléphones, fichiers à avoir sous le coude.
Mes besoins :
  • 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 !

# wget "http://www.tonido.com/download.php?TonidoSetup_i686.deb" -O TonidoSetup_i686.deb

Installation du package et des dépendances.

# dpkg -i TonidoSetup_i686.deb
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/

# cd /usr/local/tonido
# ./tonido.sh start
Starting Tonido Service:  nohup: redirige stderr sur stdout

Suivi de messages d’erreurs bizarres.

Pour l’arrêter.

# ps aux | grep tonido
# kill -9 du PID

Le script de démarrage est vraiment bizarre, j’en ai crée un autre inspiré d’un forum ArchLinux.

# vi /etc/init.d/tonido
#!/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
# chmod +x /etc/init.d/tonido
# insserv tonido

Et je choisis de lancer tonido avec un utilisateur appelé tonido

# adduser --disabled-password 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 start
# /etc/init.d/tonido stop
# vi /home/tonido/tonido/data/configex.xml

On autorise l’administration à distance.

RemoteAdmin
bool
1
# /etc/init.d/tonido start

Limiter les accès à un seul répertoireEt 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 :

# mkdir /home/tonido/files/
# chown -R tonido:tonido files

Rendez-vous dans Tools > Settings > Misc > « Add Allowed Folder » sauf que … Cannot Perform Operation Remotely.

Cannot Perform Operation Remotely

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é.

Tunneling Putty pour Tonido

Tunneling Putty pour Tonido

Tonido permet uniquement certains changement en LAN

Tonido permet uniquement certains changement en LAN

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.

TonidoSync l'application DropBox like

TonidoSync l'application DropBox like

Coté Android, l’application est moins jolie que celle de DropBox mais tout aussi performante, à voir sur Google Play.

Application Android Tonido

Application Android Tonido

En bonus, Tonido nous fait Streaming pour de la musique.

Tonido Steam la musique

Tonido Steam 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.

Posté dans Debian, Sysadmin, Tonido, Web | Laisser un commentaire

Capteur d’ouverture de fenêtres avec un DS2406

Datasheet DS2406

Datasheet DS2406

Dans mon projet domotique, je souhaite surveiller l’ouverture des fenêtres, et peut-être même les portes intérieures.
Et pour ça, je pars à la découverte du DS2406+, il s’agit d’un boîtier en TO-92 permentant soit de :

  • Lire l’état d’une sortie
  • Commander une sortie

Je ferai également le test avec un DS2401 quand j’en aurai.
Son utilisation est différente, on ne lit pas une sortie du composant mais on teste la présence de celui-ci sur le bus.
Je garde mon dernier DS2406 pour commander une sortie.

Donc je souhaite câbler mon DS2406 pour lire l’état de ma patte 3, nommée PIO.
Là encore, comme j’aime bien pomper, je re-utilise le schéma de queret, mais sans la LED.

Schéma du DS2406 en capteur

Schéma du DS2406 en capteur

R1 = 100 kΩ
5Volts provenant de mon injecteur.

Voilà pour la théorie, en pratique, je m’accorde un premier essai à l’air.
L’interrupteur est un ILS Interrupteur à Lame Souple (0.40 € pièce), je pensais naïvement pouvoir les encastrer dans les moulures de mes futures fenêtres, chose qu’on m’a déconseillé car, étant en verre, ils sont trop fragiles. Je m’en servirai pour mes tests.

Soudure en l'air d'un DS2406

Soudure en l'air d'un DS2406

Voila pour un premier test en l’air.
Une fois branché à mon serveur Debian Wheezy Domy OWFS powered, owhttp me donne ceci :

Vue d'OWHTTP pour le DS2406

Vue d'OWHTTP pour le DS2406

Le champs m’indiquant l’état de l’ILS est sensed.A.
La valeur est en cache pour 10 secondes.

Pour ne pas patienter 10 secondes entre chaque état, il est possible d’utiliser les valeurs « uncached », cf le lien en haut de la page d’owhttp.

Je préfère malgré tout utiliser owfs par simplicité.

# cd /mnt/1wire/uncached/12.D0457D000000/
# cat sensed.A
1

Direction le frigo pour piquer une bière un aimant.

DS2406+ avec un aimant et un ILS

DS2406+ avec un aimant et un ILS

# cat sensed.A
0

C’est finalement très simple ! Et je me rend compte que mon désir de pouvoir intervenir sur l’élément en cas de panne sera possible.

Je m’oriente vers un switch magnétique prévu pour être encastré dans une fenêtre, ceci :

Un switch à encastrer dans une porte

Un switch à encastrer dans une porte

D’après un constructeur de fenêtres, l’incrustation de ce type d’interrupteur ne pose pas de problème de pont thermique, il est même possible de fournir les composants de façon à ce qu’ils adaptent les trous et le passage des câbles.
D’autre part, comme soulevé sur le forum bricozone.be (mon pseudo : Aior) : « Pour les contacts encastrables, il faut savoir que les installateurs sont assez peu motivés pour ce genre d’installation car le prix de revient (surtout main d’oeuvre) est très élévé alors que sur 1 détecteur, la marge est cash. ».
Humm ! A voir avec le menuisier le jour venu.
L’avantage de ce type de switch magnétique et, au vu de la simplicité de câblage du DS2406, en cas de soucis, il me suffirait de déboiter le switch, de tirer délicatement sur celui-ci pour faire venir le DS2406 et sa résistance.
Donc la maintenance est possible !

Bon, revenons à notre DS2406, j’essaye de faire quelque chose de propre en « intégrant » les résistances dans la longueur du câble et enrober l’ensemble de gaine thermo :

Mise en place de la gaine thermo difficile avec les jonctions

Mise en place de la gaine thermo difficile avec les jonctions

Je fais sortir mon ILS  au-dessus du DS2406, ce qui donne un résultat *bien mais pas top*. 8 ans sans souder, 8 ans !

DS2406 planqué avec ILS

DS2406 planqué avec ILS

Le DS2406 a résisté au briquet.

Place aux tests soft.
Toujours depuis owfs uncached.

# watch -n1 'cat sensed.A'

Et là, essai avec l’aimant pour constater qu’il y’a parfois des loupés.
Bon, pour une fenêtre, ça marche bien, détecter une fenêtre ouverte dans le but de couper le chauffage, on est pas à 10 secondes près.
Mais j’aurais bien voulu porter ce fonctionnement à la boîte aux lettres… Vu comme c’est simple, autant ne pas se priver !

Sauf qu’avec ces ratés de détection, ça ne sera pas possible.
Le temps d’ouverture de la trappe de la boîte aux lettres pour le passage d’une lettre, c’est quoi ? 1 seconde, même pas ?
Bah si je présente mon aimant devant ILS juste 1 seconde, sensed.A passe seulement quelques fois à 0.
Ce n’est pas fiable pour détecter le passage du facteur, dommage !
D’autant plus qu’interroger le composant toutes les secondes dans le uncache, n’est pas une solution viable.

Fenêtre fermée sensed.A est à 0.
Fenêtre ouverte sensed.A est à 1.
Ça ne serait pas plus logique l’inverse ?

La solution pour obtenir l’inverse serait de câbler le DS2406 comme ceci :

DS2406 ILS sur PIO. Non testé.

DS2406 ILS sur PIO. Non testé.

R1 toujours à 100kΩ.

Mais je n’ai pas testé ce montage, donc sans garantie.

Conclusion

Détecter des ouvertures de portes/fenêtre est un jeu d’enfant avec le DS2406, son câblage est facile, il est solide, réactif.
Points négatifs : sa rareté, à part en échantillons, je ne sais pas où en acheter.
Je pense qu’il y’a moyen de faire plus simple avec le DS2401 qui fonctionne en mode parasite, et qui coûte moins d’1€ pièce, mais je reste perplexe sur le mode de fonctionnement de celui-ci.

Posté dans 1-wire, Debian | 9 Commentaires

Migration Lenny vers Wheezy : passage d’apache2 vers nginx

Aucun rapport avec la domotique.
J’ai changé de machine pour mes hébergements personnels, j’en ai profité pour abandonner Apache2 au profit NginX.

Deux petits mots pour dire que ça se passe super bien… du moment où c’est bien préparé…
Le gros du boulot a été l’abandon des .htaccess.
Les RewriteRules se placent dans la config du VirtualHost.
J’ai utilisé ce chouette script qui simplifie la vie.

Quand on a :
RewriteRule ^news/(.*)\+([0-9]+)$ /index.php?page=c_news_detail&news_id=$2 [L]

Ça Devient :
rewrite ^/news/(.*)\+([0-9]+)$ /index.php?page=c_news_detail&news_id=$2 last;

Rien de dramatique… Y’a juste à s’assurer que c’est bien transformé.
Quoi que … Les RewriteCond sont très différents…

RewriteCond %{HTTP_HOST} !^www.tfhq.fr$
 RewriteCond %{HTTP_HOST} !^tfhq$
 RewriteCond %{REQUEST_URI} !^/data/.*$
 RewriteCond %{REQUEST_URI} !^/images/.*$
 RewriteCond %{REQUEST_URI} !^(.*)\.css$
 RewriteCond %{REQUEST_URI} !^(.*)\.js$
 RewriteRule ^(.*) http://www.tfhq.fr/$1 [L,R=301]

Devient sous Nginx :

if ($http_host !~ "^www.tfhq.fr$"){
 set $rule_0 1$rule_0;
 }
 if ($http_host !~ "^tfhq$"){
 set $rule_0 2$rule_0;
 }
 if ($uri !~ "^/data/.*$"){
 set $rule_0 3$rule_0;
 }
 if ($uri !~ "^/images/.*$"){
 set $rule_0 4$rule_0;
 }
 if ($uri !~ "^(.*)\.css$"){
 set $rule_0 5$rule_0;
 }
 if ($uri !~ "^(.*)\.js$"){
 set $rule_0 6$rule_0;
 }
 if ($rule_0 = "654321"){
 rewrite ^/(.*) http://www.tfhq.fr/$1 permanent;
 break;
 }

La config gzip dans nginx.conf

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 8;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/xml text/css image/svg+xml application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/javascript application/x-httpd-php application/x-httpd-fastphp application/x-httpd-eruby;

Et pour terminer, la prise en compte de php-fpm pour les configs des VirtualHost :

location ~ \.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_script_name;
 include /etc/nginx/fastcgi_params;
 }

La seule mauvaise surprise étant la fin du package « ffmpeg-php ».
Voila voila, une bonne chose de faite !

Posté dans Debian, Web | 1 Commentaire

Générer des graphiques munin grâce aux sondes 1-wire

Grapher grapher grapher et grapher !
Déformation professionnelle ou pas, mais vive les graphs !

Analyser de bons graphiques en dit beaucoup.

  • l’inertie de mon chauffage est-il optimisé ?
  • Pourquoi ce pic de température, comment le lisser ?
  • Pourquoi cette soudaine chute de température ?

Obtenir une vue globale de l’ensemble des températures/hygrométrie, c’est primordial et bien sur, une base fondamentale en domotique.

Dans un premier temps, je souhaite monitorer les sondes de température via munin, plus tard, je doublerais très certainement le schlimblik via une base MySQL pour une meilleure exploitation des données. Il existe déjà des choses farfelues dans ce genre mais j’y reviendrai bien plus tard.

# apt-get install munin munin-node apache2

Je dé-commente et modifie les lignes de munin « /etc/munin/munin.conf » pour le faire fonctionner en tant que « serveur » comme je le souhaite, en rapport avec apache2.

dbdir /var/lib/munin
htmldir /var/www
logdir /var/log/munin
rundir /var/run/munin
#
# Where to look for the HTML templates
tmpldir /etc/munin/templates

J’utilise un script pompé et légèrement modifié de chez Yoann QUERET (qui au passage fait du super taff dans le domaine Asterisk & FreePBX). Merci à lui.

Le fichier du script se situe : /usr/share/munin/plugins/owfstemp

#!/bin/bash
DEVICE=`basename $0| cut -d "_" -f2`
ALIAS=`basename $0| cut -d "_" -f3`

if [ "$1" = "autoconf" ]; then
 echo yes
 exit 0
fi
if [ "$1" = "config" ]; then
 echo "graph_title Temperature $ALIAS"
 echo "graph_info Temperature pour la sonde $DEVICE"
 echo 'graph_args --base 1000 -l 0'
 echo 'graph_vlabel Celsius'
 echo 'graph_scale no'
 echo 'graph_category Temperature'
 echo "$ALIAS.label $ALIAS"
 exit 0
fi
# Pour une utilisation owserver avec owfs
#FS="/mnt/1wire"
#cd $FS/$DEVICE/
#echo "$ALIAS.label $ALIAS"
#echo -n "$ALIAS.value "
#sed -e 's/ //g'#echo

# Pour une utilisation owserver avec ow-shell et owread
TEMP=`owread -s localhost:4304 /$DEVICE/temperature`
echo -n "$ALIAS.value "
echo $TEMP

A noter qu’il est possible d’utiliser owread ou faire un cat/sed du fichier de température de la sonde, il ne me semble pas qu’il y’ait une différence ou une préférence dans l’utilisation.

On veille à rendre le fichier exécutable.

# chmod +x /usr/share/munin/plugins/owfstemp

Et on crée nos plugins munin :

# ln -s /usr/share/munin/plugins/owfstemp /etc/munin/plugins/owfstemp_28.EA54B5030000_Exterieur
# ln -s /usr/share/munin/plugins/owfstemp /etc/munin/plugins/owfstemp_28.7B2DB5030000_Chambre

Bien sûr, les ID changent selon chaque sonde, EA54B5030000 et 7B2DB5030000 me sont indiqués par owhttp http://domy:2121 par exemple.
Un petit essai :

# munin-run owfstemp_28.7B2DB5030000_Chambre
Chambre.value 21.5
munin-run owfstemp_28.EA54B5030000_Exterieur
Exterieur.value 21.125

Restart de munin-node pour la prise en compte de ces 2 plugins.

# /etc/init.d/munin-node restart

Et au bout d’une demi journée :

Graphique extérieur avec munin et une sonde DS18B20

Graphique extérieur avec munin et une sonde DS18B20

Graphique intérieur avec munin et une sonde DS18B20

Graphique intérieur avec munin et une sonde DS18B20

C’est un bon début, une base pour la supervision des températures sur le long terme, il faudra cependant très certainement repenser la récupérations des valeurs vers une base MySQL pour traiter les valeurs à court terme ; mais l’un n’empêche pas l’autre.

Posté dans 1-wire, Debian, graphs | 7 Commentaires

Premiers pas avec le 1-wire et owserver sous Debian Wheezy

Le 1-wire semble la meilleure solution pour répondre à ma volonté de surveiller les températures des pièces, l’hygrométrie, ouverture/fermeture des fenêtres.
Pour commencer, en lisant « one wire » je m’attendais à une techno qui tenats sur un seul et seul brin, que nenni, c’est un brin DATA et un brin GROUND minimum, donc du … 1-pair.

Je ne vais pas re-inventer l’eau chaude, les infos sur le fonctionnement du 1-wire sont existantes et très bien faites.

le DS9490R 1-wire USB

le DS9490R 1-wire USB

Après étude de la technologie, j’ai hésité entre  un adaptateur RS232/1-wire home made et un adaptateur USB/1-wire : DS9490R ; la différence se faisant dans les performances. J’ai choisi de commencer avec le RS9490R, il est toujours possible d’évoluer si je suis bloqué par les limites de celui-ci. D’autant plus que je suis tombé sur une enchère d’eBay que j’ai remporté étant le seul enchèreur, 20 € contre 29 € ailleurs ! Na !

Pour l’instant mon installation domotique se limite à… une VirtualBox… Donc j’y attache mon adaptateur USB.

Configuration de l'host usb sous virtualbox

Configuration de l'host usb sous virtualbox

De plus, à ce jour, Wheezy est à l’état de « testing », à quelques mois de son passage en « stable » on peut se permettre de proder en testing.
A ce sujet, un article intéressant : 5 raisons pour lesquelles Debian unstable ne mérite pas son nom.
Toute mon installation serveur est réalisée sous Debian Wheezy appelée en local domy.

# lsusb
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

Auparavant j’avais effectué une installation d’owserver, owfs, owread et ses potes sur Debian Squeeze, mais quelle bonne surprise d’y voir que les projets owserver & co sont maintenant intégrés à Wheezy !

# apt-get install owserver ow-shell owhttpd owfs-fuse

Je modifie le fichier /etc/owfs.conf, commente la ligne 16, décommente la 19 :

# This part must be changed on real installation
#server: FAKE = DS18S20,DS2405
#
# USB device: DS9490
server: usb = all

Restart pour la prise en compte

# /etc/init.d/owserver restart

Un petit tour sur http://domy:2121 pour constaté que mon DS9490R  soit bien reconnu.
Voila … Ça c’est fait.

Résultat d'owhttp avec le DS9490R

Résultat d'owhttp avec le DS9490R

Il est possible d’utiliser owfs, plus sympa à bidouiller.
owfs c’est quoi ? C’est l’exploitation owserver sous forme de système de fichiers.

On a owserver qui s’occupe de communication avec le DS9490R, il tourne en tant que serveur à l’écoute sur le port 4304 (cf conf /etc/owfs.conf).
C’est ensuite owhttp qui va interroger le serveur pour rendre un résultat sous forme de page web.
owfs, va rendre ces mêmes résultats sous forme de répertoires et de fichiers.
L’intérêt est de rendre le 1-wire plus malléable et de répondre à certains besoins.
Besoins que l’on aura très certainement… oui j’ai des idées en tête…

On crée un point de montage et on monte :

# mkdir /mnt/1wire/
# owfs -s localhost:4304 -m /mnt/1wire/

Résultat :

# ls -lh
total 0
drwxrwxrwx 1 root root 8 mars 11 00:09 81.BD2223000000
drwxr-xr-x 1 root root 8 mars 10 23:56 alarm
drwxr-xr-x 1 root root 8 mars 10 23:56 bus.0
drwxr-xr-x 1 root root 8 mars 10 23:56 bus.1
drwxr-xr-x 1 root root 8 mars 10 23:56 settings
drwxrwxrwx 1 root root 8 mars 11 00:09 simultaneous
drwxr-xr-x 1 root root 8 mars 10 23:56 statistics
drwxr-xr-x 1 root root 32 mars 10 23:56 structure
drwxr-xr-x 1 root root 8 mars 10 23:56 system
drwxr-xr-x 1 root root 8 mars 10 23:56 uncached

Très vite l’ajout d’une sonde de température et les premiers graphs.

Posté dans 1-wire, Debian | 9 Commentaires