Étape 5: logiciels
Ce projet d’éclairage n’est pas différent, bien qu’il représente mes premiers essais à l’à l’aide de services web.
Pour les services web, j’ai utilisé Apache 2.x et le module Soap::Lite pour perl, pour parler en réalité le contrôleur DMX en série, j’ai utilisé le module perl Device::SerialPort.
L’ensemble du lot s’exécute sous Redhat Linux j’ai appeler les services web depuis mon application domotique réelles comme ceci: (noter que c’est une partie d’un programme beaucoup plus vaste)
# Ne lights off si aucun mouvement pendant dix minutes et mouvement plus récemment dans le couloir
#
Si ($epoch - $in11_lastmove > 600 & & $in11_lastmove < $in23_lastmove & & $kitchenlights == 1) {}
& send_lights_soap(1,0) ;
$kitchenlights = 0 ;
}
La sous-routine réelle appelée est ici :
void send_lights_soap {}
$soap_response = SOAP::Lite
-> uri ("http://192.168.101.172/Lights")
-> proxy ('http://192.168.101.172/cgi-bin/lights')
-> send ("$_ [0]", « $_ [1] ») ;
$res = $soap_response -> résultat ;
}
Et comme il s’agit d’un service web, le code de service web et interface série réel réside sur un autre ordinateur sur mon réseau, le code de service web ressemble à ceci :
#! / usr/bin/perl - w
utiliser SOAP::Transport::HTTP ;
SOAP::transport::http::CGI
-> dispatch_to('Lights')
-> Manche ;
# Appel-> uri ("http://192.168.101.172/Lights")
# -> proxy ('http://192.168.101.172/cgi-bin/lights')
# -> send ("", "")
Lumières de paquet ;
void envoyer {}
utiliser Device::SerialPort ;
mon $port = Device::SerialPort -> new("/dev/ttyS0") ;
$port -> baudrate(9600) ; $port -> parity("none") ;
$port -> handshake("none") ; $port -> databits(8) ;
$port -> stopbits(1) ; $port -> read_char_time(0) ;
$port -> read_const_time(1) ;
mon ($class, $channel, $intensity) =
# Envoyer données
$port -> write (pack "C", $channel) ;
$port -> write (pack "C", $intensity) ;
Sleep(1) ;
$port -> close() ;
retour "terminé ! J’ai utilisé $class avec chn $channel et tire $intensity » ;
}
Code assez simple, je suis sûr que vous serez d’accord, et le meilleur de tous, parce qu’il fonctionne webservices, je peux étaler ces nœuds sur mon réseau et appelez-les facilement.
En outre vous avez peut-être remarqué que comme la plupart des gens j’ai RFC1918 adressée à mon réseau, mais avec une règle NAT appropriée, ces services peuvent facilement être appelées depuis n’importe où avec une connexion internet, ce qui signifie que je peux contrôler mon éclairage, de chauffage etc... depuis n’importe où (même un téléphone GPRS ou 3G!)