====== Introduction ======
[[http://www.calaos.fr|Calaos]] propose un système de domotique centralise, a base de logiciel libre.
Pour décrire rapidement :
- Tout les plafonniers/prises commandables/volets électriques voient leur alimentation provenir d'un seul point (plus de boites de dérivations)
- Tout les câblages des interrupteurs se rejoignent aussi en ce même point.
- 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
- Les interrupteurs sont relies aux entrées de l'automate
- L'automate est relié en Ethernet a un serveur (de domotique)
- L'automate a un jeu d'action/réaction simple, le serveur permet plus de souplesse, scenario...
- Une interface tactile
- 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 :
* +moins onéreux
* +plus simple de paramétrage
* +plus fiable (matériel industriel)
* -difficile a mettre en ouvre lorsqu'on ne refait pas l'électricité
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 ====
* une debian stable (Lenny - 5.0),
* dans une vielle VM Xen 3.0.3
* avec un vieux kernel (pas trop le droit de le modifier)
Le contexte a changé, sans reinstallation, mode... euh... p___c
* Toujours la meme vielle debian stable (l'ancienne hein...)
* Dans une VM basculé en KVM
* Avec un nouveau Kernel, pour tenir le coup sans les adaptation Xen
==== 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...
* Le serveur est encore et toujours une VM (maintenant dans du KVM en 64bits)
* Il m'a fallut rajouter les paquets suivants :
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
* Bidouiler un fichier, detail que je paye maintenant...
* Installer a partir des sources eina
* Installer a partir des sources ecore (avec le adlp@hector:/opt/calaos/ecore-1.2.0$ ./configure --enable-ecore-evas
pour la suite c'est plus cool)
* Installer a partir des sources eet (et donc apt-get install libjpeg62-dev)
Pour le calahos home il nous faudra..
* Installer a partir des sources evas
* donc install libcurl4-gnutls-dev libfreetype6-dev
* modifier le wscript pour qu'ilne cherche plus ecore-evas mais juste evas
* Installer a partir des sources edje
====== Configuration ======
Voici quelques points a voire selon moi :
* Types de pieces
* le toggle
* bin
====== 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
* Si apache a bien vu un login/mdp passer dans le http(s)
* Alors apache rempli les données de sessions (comme ca l'aurait fait s'agissait d'une entrée manuelle)
* Sinon, s'il s'agit d'une entrée manuelle, alors alors manuelle remplis les données de session
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 : [[http://dev.calaos.fr/trac/wiki/ProtocolCalaos|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() {}
close(FD);
open FD,$parle." input crepuscule set_param min ".$dt2->min." |";
while() {}
close(FD);
open FD,$parle." input crepuscule set_param sec ".$dt2->sec." |";
while() {}
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