fc2ブログ

node.js + Express + Socket.IO が素晴らしい

安曇野の自宅に設置している全館暖房(セントラルヒーティング)をネットで制御する件。

先日ユーザーインターフェス部をざっくり実装したが、具体的な制御方法の検討をしてみると、自分でAjaxを使ってゴリゴリ書くより、もっと楽で早い方法があることが分かった。

根っからの組込みソフト、もっと言えばFPGA等のハード開発が専門なので、抽象的な世界のネットワーク系言語には殆ど縁が無かった。特にJava、Perl、PHP、Python、Rubyなどのサーバサイド言語は少々触った程度で基本的には門外漢だった。そのためサーバー系でやりたい事があっても、その身の丈に合った最適な言語やフレームワークのチョイスが未だに良くわからない。

安曇野の気温を呟かせるTwitter用のbotであるAzuminoKionの制御にはPerlを使った。特に理由は無かったが、気温を呟かせる処理は比較的単純だし、古典的なスクリプト言語であるPerlをまじめに勉強してみようと思っただけである。

今回、Webブラウザベースで操作パネルを表示し、電源スイッチや循環水温度の設定、ネットワークを通じて制御するボイラーからの反応(現在の循環水温度や燃焼状態)をリアルタイムに設定/表示したいと考えている。何となくAjax辺りを使えば実現できそうだが、実装が面倒そうだということは分かっていた。もっと楽な方法は無いかと調査していたら、最適なソリューションを見つけた。それがnode.jsである。しかもフレームワークのExpress、WebSocketを使うためのライブラリSocket.IOを使うと、やりたいことがあっという間に出来る事が判明した。

試しに、 サーバー側にシリアルポートをクロスケーブルで別なターミナルと接続し(ボイラーをhackして接続したArduinoの代替用)、サーバー側にnode.js + Expressで実験用サンプルソフトを実装してみた。ブラウザからボタンを押すと、リアルタイムにシリアル側へデータを送信できるし、ターミナル側から(シリアルから)データを受けるとブラウザ側にリアルタイムに反映/表示される。勿論、これらは非同期で独立して動作する。これをベースに、先日使ったユーザーインターフェースを被せれば、基本的にリアルタイム制御は可能になる。

この原理試作がわずか1日も掛からずに完成した。自分でスクラッチから書いたらどのくらい掛かるだろうか。これがネット系言語やフレームワーク、豊富なライブラリ群の凄さなのかもしれない。

後日、時間があれば詳細を記載予定。

theme : プログラミング
genre : コンピュータ

comment

管理者にだけメッセージを送る

プロフィール

hashiken

Author:hashiken
基本的に自分で作る、直す、メンテする。東京と安曇野の二重生活。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
Photoscope∀
different version
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
検索フォーム