Page sur linux
Linux en Domotique

(Réalisation d'un Thermostat de chauffage Central)

Ca faisait longtemps que je n'avais pas touché à linux,la redhat 5.2 m'avait un peu "refroidie", elle manquait grandement de convivialité (et moi de bases pour me pencher sur les subtilités des fichiersde configurations et sans Internet c'est pas très facile). Dernièrement, je m'y suis remis à l'aide d'un bouquin et le CD fourni, la mandrake 7.2 est un peu plus abordable. Mon premier souci fut de me lancer dansla programmation C/C++ (que je maitrise pas mal dèja). Avec Internet, le plus long est de trouver l'information pertinente et on progresse vite. Je travaille en Mandrake 8.0 à ce jour.

Pour réaliser une application domotique, linux est idéal car il est multi-tâches, multi-utilisateurs et dispose d'outils réseaux assez intérressant.



Généralités de programmation  C/C++ sous linux


Ma première préoccupation fut de réaliser uneinterface entre une carte electronique et un réseaux TCP/IP : ilfallait maitriser 3 points majeurs :
- Les sockets pour réaliser une connexion TCP/IP.
- Le port série pour communiquer avec la carte electronique.
- Le lancement et le fonctionnement du programme en tache de fond.(Alias DAEMON sous linux et SERVICES sous Wbidule NT)

J'ai donc réalisé de nombreuses recherches sur internet, collecté de nombreuses informations, analysé de nombreuxlisting et j'ai réalisé les 3 "petits" porgrammes suvant:

Connexions TCP/IP
gestion des ports série
Réalisation d'un Daemon
Il faut pour réaliser une connexion sur un réseau TCP/IP,réaliser une structure client/serveur.

- Le Serveur possède une adresse IP, un numéro de portet un nombre de connexion simultanés possibles.
- Le Client est le processus qui se connecte au Serveur en précisant l'adresse IP du serveur et le numéro de port. Seul un client peut demander uneconnexion à un serveur.

"Détarez" dans un repertoire.
Lire readme.
Lire attentivement les commentaires des fonctions dans client_tcp_ip.ccet serveur_tcp_ip.cc.

L'ouverture du port série est réalisé exclusivement en 1200,n,8,1 dans ce module, a vous de reconfigurer selon vos besoin.

La procédure de lecture sur le port serie peut se faire de 2manières :
- Bloquante : l'instruction lire ne rendra la main que lorsque qu'uncaractère sera arrivé sur la porte sérire.
- Non Bloquante : l'instruction lire rendra la main même si aucuncaractère n'est présent dans le buffer de reception.

"Détarez" dans un repertoire.
Lire readme.
Lire attentivement les commentaires des fonctions dans port_serie.cc

Pour qu'un programme s'execute en tache de fond sans qu'aucune sessionne soit active sur le serveur, on réalise un Daemon, son execution et transparente pour un utilisateur connecté sur une console.

EchoTerm est un exemple le plus simplifié possible de daemon ou le role (process) est de faire un écho sur un port série.
 

"Détarez" dans un repertoire.
Lire readme.

J'utilise ce daemon comme point de départ à l'ecriture de tout mes daemons.

Télécharger sockets.tar.gz
Télécharger serie.tar.gz
Télécharger EchoTerm.tar.gz
"serveur" est le serveur TCP/IP
"client" est un client simple en lecture bloquante.
"client2" est un client en lecture non bloquante.
"client3" est un client en lecture non bloquante et détectionde coupure du serveur (SIG_PIPE)
"ser" est un programme de lecture de la porte série en mode non bloquant.

Thermostat Chauffage Central (Daemon)

En réalisant un "savant mélange" des 3 petites applications précédentes :

J'ai débuté la réalisation d'une application permettant de réguler un chauffage central, en utilisant la carte electronique "GestTemp" (fonctionnant avec un ATMEL AT90S2313 bien-sûr) : Telecharger le zip  (Attention il n'y a pas de schéma encore déssiné : lire attentivement les premiers commentaires de TempRS.asm contenu dans ce zip, me contacter si besoin)

Cette partie de projet est en cours de construction, faisons un état des lieux :

ServTemp : Daemon permettant de communiquer avec la carte electronique via le port serié d'un coté et de procurer une interfaceTCP/IP sur le port 15000 de la machine de l'autre. Ce daemon est complet.

thermostat : Daemon permettant d'utiliser la carte electronique en thermostat de chauffage central. Il ne manque plus que l'écriture du contenudu fichier process.cc qui permettra d'un coté de se connecter àServTemp par le port 15000 et de l'autre coté de réaliser l'interface de configuration du thermostat via le port 15001.

C_Dialogue : Client "tchat" (une commande passé attend une réponse du serveur), permet de tester la communication avec ServTemp sur le port15000 et avec thermostat sur le port 15001.

Télécharger cette partie du projet en date du 05/01/02


Interface Utilisateur du Thermostat

Pour réaliser une interface utilisateurmoderne et conviviale, l'utilisation d'un client http semble le plus pertinent.Il existe plusieurs solutions en matière de serveur http :
- Utiliser le serveur Apache fourni par linux,en permettant l'execution de fichiers cgi (ecrit en PERL ou en C/C++) onpeut réaliser une interface de dialogue trés simple et conviviale.
- Utiliser un autre serveur http indépendant d'apache. C'est cette solution que j'ai adopté car je l'ai déja mise en oeuvre dans un autre projet pour mon travail ( voir facilinux).

Le Téléchargement de cette partiesera disponible dès que l'interface sera réalisée