Table des matières

Introduction

Calaos propose un système de domotique centralise, a base de logiciel libre. Pour décrire rapidement :

  1. Tout les plafonniers/prises commandables/volets électriques voient leur alimentation provenir d'un seul point (plus de boites de dérivations)
  2. Tout les câblages des interrupteurs se rejoignent aussi en ce même point.
  3. Les plafonniers, etc. sont branchés a des séries de relais, eux mêmes interfacés a des modules de sorties de l'automate
  4. Les interrupteurs sont relies aux entrées de l'automate
  5. L'automate est relié en Ethernet a un serveur (de domotique)
  6. L'automate a un jeu d'action/réaction simple, le serveur permet plus de souplesse, scenario…
  7. Une interface tactile
  8. Une interface web

⇒ L'automate est donc un système de télé-rupteur super amélioré over-ethernet

En voici donc selon moi une petite liste des avantages et inconvenants :

Et quand bien même, ce dernier points et facilement by-passable en mettant en place des passerelles

Compilation d'il y-a 5 ans

Docs superbe, mais il me manquait des paquets tiers pour ma distro...

Mon contexte

Le contexte a changé, sans reinstallation, mode… euh… p___c

sources.list

J'ai donc du rajouter

deb http://packages.enlightenment.org/debian lenny main extras

Puis pour ne plus être embeté, faire un

wget -O- http://packages.enlightenment.org/repo.key | apt-key add -

Les apt-get

apt-get install libecore-dev
apt-get install liblog4cpp5-dev

jannson

Je ne sais plus si c'est vraiment nécessaire mais j'ai du aussi rajouter ca :

-rw-r--r-- 1 root root 18564 Jan 27 08:40 libjansson0_1.2-0ppa2_i386.deb
-rw-r--r-- 1 root root 20230 Jan 27 08:40 libjansson0-dev_1.2-0ppa2_i386.deb
Ca se trouve dans les repos ppa d'ubuntu (des repos tierses vachements sympas)

Compilation sur une Ubuntu Precise LTS

Youpi l'Ubuntu nouvelle est arrivée…

root@hector:/etc# apt-get install subversion build-essential 
root@hector:/etc# apt-get install libsigc++-2.0-dev
root@hector:/etc# apt-get install liblog4cpp5-dev
root@hector:/etc# apt-get install libvmime-dev
root@hector:/etc# apt-get install liblua5.1-0-dev
root@hector:/etc# apt-get install libjansson-dev
libcurl4-gnutls-dev

pour la suite c'est plus cool)

Pour le calahos home il nous faudra..

Configuration

Voici quelques points a voire selon moi :

Hacks

J'ai commis 2 petits hacks, rien que pour me faciliter la vie

Favicon

Favicon, ca sert a rien mais c'est joli (en fait c'est plus sympa un bookmark dans mon tel avec l'icon Calaos

Auth pour mon mobile

Avec mon mobile, je peux configurer par bookmark, un login mot de passe.

Ainsi configuré il est envoyé au site www, et donc ca m'évite de taper des login mot de passe en T9 ce qui n'est pas drole…

Le système Calaos a son authentification qui fonctionne par cookie… Donc ce que je fais c'est

J'ai modifier sur le fichier calaos-svn/calaos_web/mobile/index.php: Rajout a partir de la ligne 20

        if(isset($_SERVER['PHP_AUTH_USER']))
        {
                $_SESSION['calaos_user'] = $_SERVER['PHP_AUTH_USER'];
                $_SESSION['calaos_password'] = $_SERVER['PHP_AUTH_PW'];
      
        }

Et donc la nouvelle ligne 25 est passée de ca:

        if (isset($_POST['u']) && isset($_POST['p']))

à ca :

        elseif (isset($_POST['u']) && isset($_POST['p']))

Ainsi donc dans le fichier J'ai rajouté a partir de la ligne

Scriptation

J'ai besoin de faire réagir mon informatique en fonction de ma domotique, et réciproquement…

J'ai donc commis deux scripts pour cela… Il reste encore a améliorer les scripts

FIXME: lecture des login/pass dans un autre fichier

FIXME: parle.pl : générer un exit code en fonction du retour de calais, ajouter un mode silent

FIXME: ecoute.pl : mettre en place un système de réactions, juste pour l'exemple…

Codes

ecoute.pl

#!/usr/bin/perl -w
#######################################################################
# ecoute.pl
#######################################################################

use strict;
use Net::Telnet ();

# pour Flusher le STDOUT violement
$| = 1;

my $hostname    = "localhost";
my $port        = 4456;
my $user        = "showroom";
my $pass        = "pass";


### Uniquement pour faire un fallback vide
sub armure {
        }

my $listen = new Net::Telnet ( Telnetmode => 0,
        Errmode => \&armure );

$listen->open(Host => $hostname,Port => $port);
my $line="";

## Connexion....
$listen->print("login $user $pass");
$line=$listen->getline;
die $line unless $line =~ /ok/;
print "Procedure de login ok\n";

## Listen
$listen->print("listen");


while(1) {
        $line=$listen->getline;
        if($line) {
                chomp($line);
                print "Evenement recu :$line\n";
                }
        }

$listen->close;
exit;

parle.pl

#!/usr/bin/perl -w
#######################################################################
# parle.pl
#######################################################################

use strict;
use Net::Telnet ();

# pour Flusher le STDOUT violement
$| = 1;

my $hostname    = "localhost";
my $port        = 4456;
my $user        = "showroom";
my $pass        = "pass";
my $line        = "";


### Uniquement pour faire un fallback vide
sub armure {
        }

my $listen = new Net::Telnet ( Telnetmode => 0,
        Errmode => \&armure );

$listen->open(Host => $hostname,Port => $port);

## Connexion....
$listen->print("login $user $pass");
$line=$listen->getline;
die $line unless $line =~ /ok/;
print "Procedure de login ok\n";

$listen->print(join(" ",@ARGV));
$line=$listen->getline;

print "Retour $line";

$listen->close;
exit;

Exemples

Basique

    adlp@hector:~$ ./parle.pl input input_19 set true
    Procedure de login ok
    On envoie input input_19 set trueRetour input input_19 set ok
    adlp@hector:~$ ./parle.pl output output_2 set false
    Procedure de login ok
    On envoie output output_2 set falseRetour output output_2 set ok

Pour plus d'info, il faut ensuite aller voire par la : Protocol Calaos

Instinct

Pour l'instinct, l'instinct crépusculaire

#!/usr/bin/perl -w
 
use strict
use DateTime
use DateTime::Event::Sunrise
 
my $parle="/home/adlp/Calaos-proto/parle.pl"
 
my $offset='Europe/Paris'
 
 
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time)
$year+=1900
my $dt = DateTime->new( year   => $year, month  => $mon, day => $mday, time_zone => $offset ,)
 
my $sunrise = DateTime::Event::Sunrise ->new( longitude =>'7.599167' , latitude => '48.758057', altitude => '-18', iteration => '4')
my $dt2 = $sunrise->sunset_datetime( $dt )
 
print "Couche prevue a ".$dt2->hour.":".$dt2->min.":".$dt2->sec."\n"
 
open FD,$parle." input crepuscule set_param hour ".$dt2->hour." "
while(<FD>) {}
close(FD)
open FD,$parle." input crepuscule set_param min ".$dt2->min." "
while(<FD>) {}
close(FD)
open FD,$parle." input crepuscule set_param sec ".$dt2->sec." "
while(<FD>) {}
close(FD)

Librairies necessaires pour le crepuscule

 57  apt-get install libappconfig-perl
 58  su - compaq
 59  apt-get install libnet-telnet-perl
 60  su - compaq
 61  apt-get  install libdatetime-perl
 62  su - compaq
 63  apt-get install libdatetime-event-sunrise-perl