mercredi 23 août 2006

IOLan : lire les données météo via le réseau

IBM PS1Le 486 qui sert de serveur web a beau remplir sa fonction il est bruyant/consommateur pour une machine qui fonctionne tout le temps dans le salon. D'autant plus que dans le bureau, il y a un PC qui sert de passerelle et qui est presque tout le temps allumé. Il serait donc intéressant que ce 2ème PC héberge les données météo.

Mais la station de base doit rester dans le salon. Si elle déménage dans le bureau, elle ne servira plus. Deux solutions se proposent :

  • utiliser un long cà¢ble série (à  2400 bauds on peut monter à  3000 ft soit environ 914 m !), mais il doit traverser presque toutes les pièces de la maison :)
  • transformer l'interface série en interface wifi. Il existe des petits boà®tiers qui font ce genre de chose. J'en ai utilisé au boulot pour accéder aux consoles série de machines Sun.

L'idée serait donc d'avoir quelque chose comme cela : Réseau avec IOLan Ainsi, le serveur via Wifi/LiveBox/IOLan peux lire le port série de la station météo.

Je me suis donc acheté un boà®tier IOLan sur eBay. Il s'agit un Lantronix MSS1-T qui offre un port série. C'est un produit qui n'est plus supporté mais qui a le mérite de n'être pas cher par rapport à  ceux que l'on trouve neufs.

IOLanAucun problème en ce qui concerne la configuration réseau. Il prend une adresse IP par DHCP ou à  partir du 1er ping qu'il reçoit :

sudo arp -s 192.168.0.53 00:80:A3:0F:4D:95
ping 192.168.0.53

Une fois l'adresse IP attribuée, il suffit de faire un telnet dessus pour pouvoir configurer tranquillement l'iolan. On commence par enregistrer l'adresse pour ne pas reproduire la manip du ping à  chaque fois :

telnet 192.168.0.53
Local_2> SET PRIVILEGED
Local_2> CHANGE IPADDRESS 192.168.0.53

Puis l'on configure le port série pour pouvoir dialoguer avec la station météo (Les infos ont été trouvées dans le code source de open2300[1]) :

CHANGE SPEED 2400
CHANGE PARITY NONE
CHANGE STOPBITS 1
CHANGE CHARSIZE 8
CHANGE FLOW CONTROL NONE
CHANGE MODEM CONTROL DISABLED
CHANGE DTRWAIT ENABLED

ws2300La, je me dois de remercier chaleureusement Lolo, qui a mis le doigt sur un point que j'avais loupé, le DTR doit être au niveau bas avant la communication, sinon, rien ne fonctionne :( Qu'il en soit ici grandement remercié, j'ai passé plusieurs jours[2] avant que ce problème ne soit résolu.

Entre temps, j'ai trouvé un autre site qui offre de bonnes explications sur les stations ws2300 et en particulier sur le protocole de communication[3]

Une fois tout ceci fait, il suffit d'ouvrir une socket vers le port TCP 3001 dans laquelle on lit et on écrit comme sur le port série.

Maintenant, 2 nouvelles solutions s'offrent à  moi :

  • modifier open2300 pour qu'il utilise une socket plutôt que le port série
  • simuler un port série qui est en fait une socket vers mss1:3001

La 2ème a nettement ma préférence puisqu'elle évite toute modification de open2300 qu'il faudrait reporter à  chaque nouvelle version.

De plus après avoir envisagé de développer moi-même la glue entre tout ça, j'ai découvert que cela existait déjà . Merci les forums de LinuxFr. Le soft s'appelle ttyd dans le jargon debian et termpkg de son nom de baptême.

Je vais donc maintenant mettre en place une solution de ce type : utilisation de ttyd

Pour le moment, ça marchotte. Parfois la lecture de la valeur envoyée par la station ne se fait pas et open2300 reste bloqué en attente. Il faut sans doute que j'introduise un peu de latence dans ttyd[4], ou un mécanisme de timeout dans open2300.

Stay tuned ...

Notes

[1] Quel bonheur que la disponibilité des sources !

[2] et nuits

[3] ainsi qu'un soft en perl que je n'ai pas testé

[4] vive la disponibilité des sources et le droit de les modifier. Je me répète la non ?


Commentaires du post original