piは、より簡易に使えるConductor-liteに移行しましたので、これから試したい方はConductor-liteのページをご覧ください。piを使ってGPIOを制御したりセンサーの値を読んだりするための方法は数多くの情報がありますが、Webブラウザから制御したり、タイマーで制御したりするためには、やはりそれなりのプログラムの作成が必要になってしまいます。piを使って、ホームオートメーションを作成することにしました。piを使うとブラウザ経由でGUIを使って制御論理を組み上げたり、リモートでIOを制御することができます。piの出力ポートをタイマーやWebブラウザでON/OFFする基本的な方法を紹介しています。STEP7では番外編でAppleのHomekitとの連携を記載しています。将来的には(興味のある方が多いようなら)、気温や気圧、湿度を観測し、それらの値や季節によって、庭の散水や池の給水を制御したり、スマートフォンから制御するシステムを紹介する予定です。ここの例では、クライアント(開発環境)にMac(ブラウザはSafari)を使っています。CardへOSをインストールOSのRaspbianをSDカードに書き込む。python(ver.2)も必要であるがデフォルトで含まれている。基本的にはこれだけで動作環境は十分であるが、リモートでの操作を行うためには、次のツール類もインストールすることが望ましい。Macからのファイル共有に便利netatalk:Macからのファイル共有に便利VNC:リモート操作(画面共有)に便利upstart:ホームオートメーションソフトの自動起動に便利なお、これらをインストール済みのSDカードイメージもある。piをインストールする。piのホームディレクトリ配下に置く。piのIPアドレスを指定しhttpでポート8080でindex.htmlにアクセスする。piのIPアドレスは192.168.1.7)http://192.168.1.7:8080/index.html2つ目の写真のような画面が表示されれば成功。タイマー設定タイマーでGPIOをON/OFFするプログラムを作る。以下は、サンプルプログラム(every10sec)を変更して、毎時30分に1分間だけGPIO18(12番ピン)をONにするプログラムを作成し、起動する例である。(IPアドレスが192.168.1.7なら、http://192.168.1.7:8080/index.html/)メニューの「Editor」を選択する。(30秒ほど時間がかかる)「File」メニューからOpenを選択し「Open」ボタンを押す。Asを選択してファイル名を入力し(ここではremoteControl)「Save」ボタンを押す。「every10sec」エレメントをポイントして、ダブルクリック、もしくは右ボタンからeditPropertyを選択する。適切なインスタンス名(ここではevery10min)とし、SecプロパティをMinプロパティに変えて値を30に、Keepaliveを60に設定し、「Set」ボタンを押す。「File」メニューからSaveを選択する。「File」メニューからExitを選択する。Load&Startのメニューに、上記で作成したプログラム(remoteControl)を指定し、「Load&Start」ボタンを押す。ver.0.5.2以降に付属しているsample-accessToObj.pyにアクセスすれば、ポートの状態をWebブラウザで確認することができる。piのIPアドレスが192.168.1.7ならば、http://192.168.1.7:8080/sample-accessToObj.pyである。uniTimer/WebServer/配下に配置されており、このソースのConductorAPI.getObjectByName("IO")によってエレメントにアクセスできる。ここで"IO"は、エレメントのインスタンス名であり、STEP3の"IO"エレメントである。Webブラウザでポートを制御するSTEP3で作成したremoteControlプログラムを改造して、WebブラウザでIOエレメントのポートをON/OFFできるようにする。remoteControlを編集して、図のように、ORエレメントと、「インスタンス名をremoteとした」ANDエレメントを追加する。これにより、毎時30分になるか、または、WebブラウザでONを指定するか、いずれかの条件の時に、IOエレメントがONになる。Webブラウザからのアクセスには、サンプルで付属しているsample-setToObj.pyを利用する。よってremoteエレメントにアクセスしている。Bの12番ピン)をON/OFFできるので、このポートにドライバをつければ外部機器を操作できる。秋月電子のSSRを接続すればAC100Vの機器をON/OFFできる。回路図の例は図の通り。piのポートの容量を超える可能性があるため、トランジスタでドライブすることが望ましい(ON/OFFが反転されるので注意)。家庭用電源(AC100V)の取り扱いは資格等を有することもあるので十分留意のこと。SSRで電磁弁を制御すれば散水システムになる。電磁弁はモノタローなどで購入可能。家庭用の水道の多くの呼び径は8A(1/4)である。接続にはシーリングテープを使って水漏れを防ぐ。HomekitAppleのHomekitが本格化しつつあるので、ネットを探してみると、homebridgeと呼ばれるソフトウェアが流行っているようだ。Node.js上で動作し、フロントエンドのhomebridgeとバックエンドのソフトウェアからなり、バックエンドはカスタマイズができるらしい。汎用的なバックエンドもあって、homebridge-readablehttpはhttpのリクエストインタフェースを提供する。homebridgeとhomebridge-readablehttpを使えば、iPhone等のiOSアプリのホームや、Siriによる音声でhttpインタフェースを持つ機器をON/OFFできる。0.5.3以降に付属する(予定の)サンプルプログラムsample-remote-triggerを使ってHomeKitに対応させる例である。GPIOで電磁弁をつけて散水を制御する想定である。Siriに「散水をオンにして」と指示すれば散水が開始され、sample-remote-triggerでプログラムされている時間だけ散水を行うことができる。piのhttpインタフェースで少々てこずった。インストールについては、幾つかのサイトで紹介されているのでそれらも参考にして欲しいが、概ね次のような手順である。libavahi-compat-libdnssd-devNode.jsのインストール。4.6.0の手順を踏む必要がある。直下にconfig.jsonを作る。usernameはEthernetアドレスを記載するらしい。pinはiOSアプリの設定に使う番号になるが、任意で問題ないようだ。""}]}ここで重要なのはread_url。このリクエストで対象の装置がONの場合は1を、OFFの場合は0を返すようにしておかないと、homebridgeがクラッシュすることがある。piのsample-homebridge.pyの内容は次の通り。このソースをWebServerディレクトリ配下に配置する。動作させるプログラムは冒頭に記載したようにsample-remote-triggerである。(ソースをコピーペーストしたらpythonコードなのにインデントが崩れてしまった。"-1",".txt"また、iOSアプリの設定(アクセサリ)の削除などを繰り返すと二度とアプリに表示されなくなる現象も見られたが、上記のusernameやpinを変えたら回復したりと、怪しげな挙動もあった。iOSのホームアプリの設定の説明は省略するが、設定は容易である。設定が終わると写真のような画面になり、Siriのコントロールも可能である。Trademarks。