2013年8月30日金曜日

raspbian-siriproxy-ha1controlのSDカードイメージ


install作業が結構大変なのでSDカードのイメージファイルを作りました。
重複する部分がありますがまとめページとしてそのまま書いておきます。

一応、注意書きも重複しますが書いておきます。
以下、web pageはhttpsで接続してますが、クライアント認証はしてないのでLAN内での使用に限定してください。
TVのリモコン制御程度ならば家の外にTVのリモコンを置きっぱなしにしてる程度の危険度ですが、玄関の鍵などを繋ぎこむと玄関の前に鍵をぶら下げてるくらい危険です。

■SDカードの作成

イメージファイルをダウンロードし、zipを展開
raspbian-siriproxy-ha1controlのSDカードイメージ

SHA1(2013-08-29-ha1control.img.zip)= 67596ea282b6aa014101d90db65a95aed6541204

※すみません。bugがあったので置き直します。
既にダウンロードしてしまった場合は、root権限でloginして

# cd /root/ha1control
# git pull https://github.com/mnakada/ha1control.git
# cd ha1access
# make webpage
を実行してください。


raspbian-siriproxy-ha1controlのSDカードイメージ


SHA1(2013-08-31-ha1control.img.zip)= 15560e96c809fee415479c331d69b2e9f574c0b7


4GB/class 4以上のSDカードを用意

SDカードをセットしdfコマンドでmountされているデバイス名を確認。(Mac OSX上。Windowsでも構わないがやり方は調べてください)
# df                                
Filesystem                        512-blocks      Used Available Capacity  iused    ifree %iused  Mounted on
/dev/disk1                         466560312 294498768 171549544    64% 36876344 21443693   63%   /
devfs                                    403       403         0   100%      700        0  100%   /dev
map -hosts                                 0         0         0   100%        0        0  100%   /net
map auto_home                              0         0         0   100%        0        0  100%   /home
/dev/disk4s1                          114576     37888     76688    34%      512        0  100%   /Volumes/Untitled
ここでは/dev/disk4なので
# diskutil unmountDisk /dev/disk4
Unmount of all volumes on disk4 was successful
# sudo dd if=2013-08-29-ha1control.img of=/dev/rdisk4 bs=1m
Password:
1850+0 records in
1850+0 records out
1939865600 bytes transferred in 109.201742 secs (17764054 bytes/sec)

書き込み完了するとMacの場合勝手にmountされると思います。されない場合は手動で再mount
# vi /Volumes/Untitled/interfaces
でaddressの行〜gatewayの行までを自分の環境に合わせて設定して下さい。
# vi /Volumes/Untitled/resolv.conf
でDNSサーバの指定を変更する。
nameserver 8.8.8.8 (googleのpublic DNS)
nameserver 8.8.4.4
が入っているのでそのままでよければ何もしない。
routerなどを使う場合は環境に合わせて設定して下さい。
# vi /Volumes/Untitled/server.url
でwebアクセスするためのURLを指定して下さい。
hogehoge.or.jp
が入ってるので、適当に書き換えて下さい。

# diskutil eject /dev/disk4
でunmountされSDカードが出来上がったのでRaspberryPiにセットして起動
1分程度で起動しているので
# ssh pi@192.168.0.100 <-- 上でinterfacesに設定したアドレス
password: raspberry
でlogin

■基本設定 (以下はsshで入っているRaspberryPiのshell)
# sudo su
# passwd
でrootパスワード
# passwd pi
でpiのパスワードを設定

# raspi-config
expand_rootfsを実行。(2G用のイメージになってるのでパーティションを広げる)
設定し終了。rebootする。

ssh pi@ 192.168.0.100
passwd: 設定したもの
でlogin
# sudo su
でroot権限に。

■ 仮の証明書が入ってますが、危険なので自分用にsiriproxyやwebaccess用の証明ファイルを作成
# cd /root/ha1control/Certs
# make install
/var/ha1/ha1privateca.crtをiPhoneへメール等で転送しinstall

■ web pageの生成
# cd /root/ha1control/ha1access
# make webpage
/boot/server.urlで指定されたサーバー名でindex.htmlと関連のhtmlファイルを/var/www/以下に生成する

ここまで設定したらもう一度reboot
# init 6

■iPhone側の設定
先ほど作成したha1privateca.crtをiPhoneにメール等で転送しinstallする。
設定->Wi-Fi->ネットワークを選択し右側の>マークを選択する。
中のDNSの設定をタップし設定値をRaspberryPiのIPアドレスに変更し閉じる。

まずはweb accessの確認
 iPhoneのSafariから'http://hogehoge.or.jp:47910/' 'https://hogehoge.or.jp:80/'(hogehoge.or.jpは/boot/server.urlファイルに設定した名前)を開いてみる。エラーが出ずにいくつかのアイコンが表示されていれば取り敢えずOK。



次にSiriを起動してみる。
RaspberryPiにloginし
# tail -f /var/ha1/siriproxy.log
を実行した出力に
[Info - Plugin Manager] Plugins loaded: HA1Control
[Info - iPhone] Received Object: LoadAssistant
[Info - iPhone] Received Object: SetRestrictions
[Info - iPhone] Received Object: ClearContext
[Info - iPhone] Received Object: SetBackgroundContext
[Info - iPhone] Received Object: StartSpeechRequest
[Info - iPhone] Received Object: SetRequestOrigin
[Info - iPhone] Received Object: SpeechPacket
[Info - iPhone] Received Object: SpeechPacket
.....
と出てくれば正常に繋がっています。

■リモコンの登録
リモコンを登録する名前を決める。ここでは仮にhogehogeとする
# telnet 127.0.0.1 47900 (RaspberryPiからtenet, security的な懸念もあるのでRaspberryPi自信からしかtelnetを受け付けません)
irrec hogehoge
を実行後すると
Ackと返ってくる
10秒以内にRaspberry piの赤外線受光部に向けてリモコンを送信
正常に受けられれば
irrec hogehoge : OK
と返ってくる
タイムアウトしたりちゃんと記録できなかった場合
irrec hogehoge : Error IR-Remote Record Error
とエラーになるので、再度登録
hogehoge
で登録したリモコンコードを送出するので、正しく反応しているか動作確認する
全てを登録したら
exit
で抜ける

次にwebpageにアイコンを登録する。
# cd /root/ha1control/ha1access
# vi icon.list
hogehoge    ほげほげ ha1
などと追加する。
iconを変えたい場合は/root/ha1control/ha1access/icon/以下に適当に作って置く。
# make webpage
を実行すると/var/www/以下のwebpageを更新する。

SiriProxy-HA1Controlのinstall
# cd /root
# git clone https://github.com/mnakada/SiriProxy-HA1Control.git
  登録したリモコンコードに対応する部分を編集するので/root/SiriProxy-HA1Control/に展開する
# cd /root/SiriProxy-HA1Control/lib
# vi siriproxy-ha1control.rb
で編集する
listen_for /.../ do
から
request_competed
end
までのひとかたまりを適当にコピーして
listen_forの行に目的の言葉を正規表現で記述
ha1commandの行を送信するリモコンの名前
 res = ha1command("hogehoge")
に変更
sayの行は正常終了時の応答、異常終了時の応答をそれぞれ記述する

# cd /root/ha1control/SiriProxyDaemon
# vi config.yml
で18行目の
    - name: 'HA1Control'
      git: 'git://github.com/mnakada/SiriProxy-HA1Control.git'

    - name: 'HA1Control'
      path: '/root/SiriProxy-HA1Control'
に変更(この時pathの位置をnameの位置と同じにしないとエラーになるようです)して
# make install
# make restart

# tail -f /var/ha1/siriprxy.log

[Info - Server] SiriProxy up and running.
の行がでたらiPhoneのsiriを起動して登録した言葉を話してみてください。
滑舌によっては違う言葉になってしまうので正規表現で適当に解釈を広げて下さい。

6 件のコメント:

  1. 外出先でもアクセスしたいな
    セキュリティ怖いけど

    返信削除
    返信
    1. 基本的に危険なのでお勧めできません。
      どうしてもやってみたければ、LAN内のWebサーバーを外に見せる方法は色々なところで書かれているので探してみてください。固定IPを取得するか、DDNSなどで外からアクセスできるようにして、ルーターのポートフォワードでport 47910をraspberryPiに繋いで開放すれば繋がります。
      試す場合は赤外線リモコンの登録をアクセスされても無害なものだけにしておいたほうが良いと思います。一日くらいあとでraspberyPiのapache2のaccess log(/var/log/apache2/ssl_access.log)を見てると結構アクセスされてるのが分かります。

      削除
    2. siri proxyだけ外出先から使えるようにしようかな

      削除
    3. 残念ながらsiriproxyはその仕組み上、appleのサーバーをRaspberryPiのDNSサーバーで騙しているので同じLAN内でしか出来ません。

      削除
  2. vpnを使用したら安全でしょうか

    返信削除
    返信
    1. 安全かどうかはVPNの安全性に依存します。VPNを安全に設定できれば大丈夫かと思います。

      削除