ラベル OS X の投稿を表示しています。 すべての投稿を表示
ラベル OS X の投稿を表示しています。 すべての投稿を表示

2016年3月24日木曜日

HomeServerのinstall

GitHubにRaspberryPi 2 Model Bを使ったSiri対応の学習リモコンのコードを公開しました。
RaspberryPi Model A+/B+でも動くと思います。RaspberryPi 3に関しては確認できたら報告します。

■このソフトで現時点で出来ること
 ・赤外線リモコン、HA端子(JEM-A端子)、弱電スイッチなどの制御
 ・赤外線リモコン信号、HA端子、弱電スイッチ、各種センサーなどのステータス情報取得

 - telnet(socket)経由での上記制御と情報取得(human-readble IF, JSON IF)
 - HomeKit対応アプリからの上記制御と情報取得(HAP-nodeJS経由)
   AppleTV(3rd generation以降)を経由して外出先からの上記制御と情報取得
   iPhoneのsiriによる上記制御と情報取得
   ※ ただしAppleがHomeKitの認証を強化すると動かなくなる可能性あり
 - javascript(node.js)での制御
   センサー等の変化や30sec intervalのイベントでjavascriptの関数が呼び出されるので条件を設定して制御することが可能
     日没にあわせてシャッターを閉める、あかりをつける
     玄関のロックが5分間開いていたらメールする
     雨が降ってきたら窓を閉める
     室温に応じて起床前にエアコンをつける
     窓を開けたらエアコン停止
     etc

■今後追加していきたい機能(余裕があれば)
 - リモコンの学習、各種設定のWebUI化
 - javascriptでの制御部分のVisualPrograming化

■下のブレッドボード用回路の機能
 - 赤外線リモコン送信・受信

■RP-5基板の機能
 - 赤外線リモコン送信・受信
 - ZigBee(XBee)経由でのリモート子機(HA-5)制御
 - HA-5子機の故障診断とファームウェアアップデート、ペアリング

■HA-5基板の機能
 - 赤外線リモコン送信・受信
 - HA端子(JEM-A端子)での家電制御、ステータス確認
 - 弱電(24V以下)のスイッチ制御・ステータス確認(電動シャッターなどのスイッチ)
 - 各種センサー情報の取得(温度、湿度、雨、人感、etc)


ブレッドボード用回路は以下のとおりです。





リモコン学習時のブザー音とリモコン発光時の発光音が不要なら真ん中のブザー音出力ブロックは不要です。

LED101/102はリモコン用の940nmあたりの波長の赤外線LEDなら大体動くと思います。
ちゃんと赤外線LEDが発光しているかどうかはデジカメ等で見ながら発光させると確認できます。
ただし、iPhoneはカメラに赤外線フィルターが入っているようで見えませんでした。

赤外線受光モジュールは電源が逆になっているデバイスもあるので他のものを使う場合は気をつけて下さい。

FETもNchで耐圧がOKなら動くかと思います。こちらもピン配置を確認して使って下さい。

installの大まかな手順を書いておきます。
詳細手順はこちらのREADME.mdを御覧ください。(下の方です)
※scriptからダウンロードするので、gitをcloneする必要はありません。

1.最新版のRASPBIAN JESSIE LITEをダウンロードしてSDカードに書き込みます。
2.SDカードをRaspberryPiにセットしてNetworkを接続し起動後loginします。
3.setup scriptを実行する
 > curl -O https://raw.githubusercontent.com/mnakada/ha1control/master/setup.sh
 > sudo bash setup.sh
4.piのアカウントpasswordを変更する
5.reboot
6.HomeKit対応アプリをiPhoneにinstall
7.対応アプリでHA1HomeServerを登録

国内のエアコン等も大抵のものは動くかと思います。
Daikin/Panasonic/三菱重工は確認しました。

AppleTVの第3世代以降があってiCloudの設定をしてあれば外出先からもアクセス出来ます。
ただし、AppleTVの自動updateをonにしているとupdate後自動起動してくれるのですが、iCloudのloginを一度解除してからもう一度loginし直さないとアクセスできなくなってしまいます。

2016年3月1日火曜日

KiCad 4.0.2 bzr6238 for OS-X

OS-Xに関連するbugが今のところfixしているようなので、KiCad 4.0.2 bzr6238をbuildしたイメージをここにおいておきます。
(すみません。日本語fontを入れ忘れてたため更新しました。3/11)
サイズが大きいのでGoogleドライブのウィルススキャン出来ないと警告が出ますが、そのままダウンロードを選択してください。

念のためSHA1のhash値です。
> openssl sha1 kicad-4.0.2_bzr6238j.dmg
SHA1(kicad-4.0.2_bzr6238j.dmg)= 3b1fe687a90742ead03cb6ae08bdd15c14e8fa5c

標準のbuildとは下記の点が異なっています。
- TrackPad/MagicMouseの動作をMacの標準的な動作に変更しています
- Library/Application Support/kicad/internat/ja/のリソースを読むように修正しています
- fontが日本語対応になっています
変更分のpatchはこれです。
あと、なぜかオフィシャルパッケージのkicad-4.0.1.dmgからinternat以下の各国語リソースが抜けてるので、追加してあります。
Bazaarのツリーの方はbzr6225に4.0.2のTagが打たれていますが、公式パッケージは4.0.1が最新のようです。

イメージをダウンロードして開くとkicadアプリケーションとkicadディレクトリがあります。
kicad.appは/Applications
kicadは/Library/Application\ Support
にそれぞれコピーします。(finderで開いた時の矢印のとおりにDrag&Dropして下さい)

ライブラリをgitではなくlocalで持ちたい場合はKiCad extrasもここからダウンロードして展開、modulesとfp-lib-tableをREADME.txtの通りisntallしてください。

最初の1回めは開発元が未確認のため開けませんと言われてしまうので、/Applicationフォルダを開いてKiCadを右クリックし「開く」を選択して、ダイアログボックスの「開く」を選択すると起動します。

詳細とbuildの手順はRC2.0の時に書いたのでこちらを参照して下さい。

2016年2月27日土曜日

HomeBridge改めHAP-nodeJSと接続してsiriで家をコントロール その4

Siriとの会話に疲れてきたので、現状のコードを整理してGitHubに上げました。
とりあえずdemoModeに設定してあるので単独で動いて同じネットワーク上のiPhoneから繋がります。
demoModeではコントロールサーバーにコマンドを投げる所をconsole.logの出力だけ、statusなどを受ける所をダミーデータに置き換えています。

https://github.com/mnakada/HA1HomeBridge.git


動作確認済み環境
 MacBookPro OS-X El Capitan 10.11.3
 RaspberryPi2 RASPBIAN JESSIE LITE kernel 4.1.17
 node.js v4.3.1はnodejs.orgからinstall
 多分v5系でも動くと思います(未確認)。

iPhone側の環境は
 iPhone6S iOS9.3beta4
   (beta3以前の場合、package.sonファイルのhap-nodejsのversion指定を0.2.4にすると動くかもしれません)
 HomeKitアプリはElgato Eve (App Storeでhomekitで検索すると出てきます)

> git clone https://github.com/mnakada/HA1HomeBridge.git
で取得後、
> cd HA1HomeBridge
> nam install
> node .
でHomeKitのBridgeとして起動し、PINを表示します。
あとでこのPINの画面を取り込むのでそのままにしておきます。


iPhoneをWiFi接続にしてElgato Eveを起動
-> アクセサリを追加
-> 自動でホームの名前が入るので適当に修正して右上の次へ
-> アクセサリを選択でHA1HomeBridgeを選択
-> 真ん中のXXX-XX-XXXが囲われているところを選択
-> HomeKitアクセサリを追加のDialogでこのまま追加を選択
-> iPhoneのカメラで先ほどのPINの画面をキャプチャすると自動で接続してくれます。
(もしPINが読み込めないようでしたら、下の方にある手動で登録から登録します)
-> 部屋を選択は後で設定できるので取り敢えず次へ
-> 追加済みのアクセサリで完了
-> ホーム(デフォルトの部屋)を選択するとコントロール画面にたどり着きます。

この状態でアプリからスイッチなどをいじってnode.js側にそれらしいコマンドの表示が出ていれば正常につながっています。

siriで使えるコマンドはclient.uiファイル内でsiriNameのarrayで記述されているものになります。
ここのsiriNameで記述されているものがEveのコントロール画面の項目名として見えていて、siriへの指示はこの項目名に対して指示を出します。
例えば
「玄関の鍵を開けて・閉めて」「風呂のお湯を入れて・止めて」「南側のエアコンを一八度に設定して」「ダウンライトを点けて・消して」「リビングの湿度は?」「寝室の温度は?」
などが動いています。
現状、わかっている問題点は
1.「南側の窓を開けて」は「100%に設定しました」と答えて動くけど「南側の窓を閉めて」も「100%に設定しました」といわれて窓が開いてしまう
シャッター、ブラインドも同様
2.エアコンの温度は設定できるけど、暖房、冷房のモード切替が出来ない、エアコンをoff出来ない
3.「NHKをつけて」はWebの’NHKをつけて’を検索に行ってしまう
と言った感じです。


HomeBridge改めHAP-nodeJSと接続してsiriで家をコントロール その3

コントロールサーバーの動いているRaspberryPi2の上にhomebridgeを動かして、pluginとしてコントロールサーバーと接続しようとしていたのですが、いろいろ実装していく内にhomebridgeの下のレイヤーであるHAP-nodeJSと直接繋ぎこんだ方が良さそうなことがわかってきて繋ぎ方を改めました。
ところが、実装を切り替えて試してみてもEveで初期設定まではうまくいくのですが、接続されたホームの中にAccessoryが何もない状態になってしまいます。
そんなこんなをしている内にHomeBridgeとの接続も同じ状態になってしまい訳がわからなくなってしまいました。
2日ほどわからない状態だったのですが、色々と試している内に最初に試していたdirectoryのイメージを起動するとちゃんと繋がることに気が付きました。
差分を切り分けるために実験していくとHAP-nodeJSのVersionが0.2.4以前ならちゃんと繋がることが分かりました。
どうも0.2.5でHomeKitの最新のプロトコルにupdateされていたようで、自分のiPhoneがiOS9.3beta3だったため繋がらなかったようです。
iOS9.3beta4にupdateして、HAP-nodeJSも0.2.5にしたら無事に繋がるようになりました。
このdebugの過程でdebug情報を色々出していたのですが、何故かAppleTVとの通信をしているlogが残っていました。
AppleのHomeKitのページをよく読むと、うちにある第3世代のAppleTVだとHomeKitの外からのアクセスを中継してくれるようです。
AppleTVのiCloudの設定を再度し直して、LTE回線からiPhoneでEveを起動してみるとちゃんと繋がり、コントロールもできています。
LTE回線経由でもsiriでのコントロールもちゃんとできました。
なかなかいい感じです。

siriとの会話の方は相変わらず実験中で、まだエアコンとシャッター、電動窓、TVはNHKがうまくコントロールできていません。
エアコンは温度設定はできるのですが、暖房、冷房を指定することが出来ません。
エアコンを切ることも出来ていません。
シャッター、電動窓は開くことは出来ても閉じることが出来ません。
「シャッターを開けて」で「100%に設定しました」と言われてシャッターが開きますが、「シャッターを閉めて」でも「100%に設定しました』と言われてしまいます。これはsiriのbugのような気がします。
「NHKをつけて」はNHKをつけてをwebで検索されてしまいます。
もう少し会話の練習が続きそうです。

2016年1月4日月曜日

node.js foreverをRaspberryPi起動時に自動起動するように設定する

node.jsをRaspberryPiでnvm管理下で使っていたのですが、サービスを常時動かしておこうとするとforever等で管理することになります。
ところが、foreverはinit.dに登録されているわけではないのでRaspberryPiを再起動すると自動で動いてくれません。
最初nvmを使ってnode.jsをinstallしていたのですが、nvmだと自分のアカウントのhomeの.nvmというディレクトリ以下に色々とinstallされてしまいシステムの起動スクリプトに記述するには気持ち悪い事になってしまいます。(まぁ、そこはそういうものだと割りきってしまっても良いのですが)
nvmは開発用の環境であって運用のための環境ではないということかと思います。
次に考えたのはapt-getでnode.jsをinstallすることですが、versionが0.10.29と古いため結局試行錯誤の末node.js自体はnodejs.orgのDOWNLOADSのLTSのv4.2.4を入れることにしました。
今回は/usr/local/にダウンロードしてきたイメージを展開して/usr/local/nodeにシンボリックリンクを張って運用しています。
ダウンロードの実体は/usr/local/node-v4.2.4-linux-armv7l/以下に展開されて、そこに/usr/local/nodeからシンボリックリンクされているという形です。
$ PATH=/usr/local/node/bin/:$PATH
とpathを通してから
$ npm install -g forever
でforverをinstallします。
これでnode, npm, foreverが準備出来たので、次に/etc/init.d/に起動スクリプトを用意します。

以下の例は/etc/init.d/ha1observerという名前で/var/ha1/ha1observer.jsにパラメータを付けて起動するためのものです。

-----
#!/bin/sh

### BEGIN INIT INFO
# Provides:          ha1observer.js
# Required-Start:    $network $syslog
# Required-Stop:     $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: forever running ha1observer.js
### END INIT INFO

USER=ha1observer
SCRIPT=/var/ha1/EventValidate.js
PIDFILE=/var/run/ha1observer.pid
LOGFILE=/var/ha1/ha1observer.log
PATH=/usr/local/node/bin:$PATH
FOREVER=/usr/local/node/bin/forever
NODE=/usr/local/node/bin/node
NODEAPP=/var/ha1/HA1Observer/ha1observer.js

start() {
  $FOREVER start --pidFile $PIDFILE -l $LOGFILE -a -d -c "$NODE $NODEAPP -u $USER -f $SCRIPT"
  RETVAL=$?
}

restart() {
  $FOREVER restart $NODEAPP
  RETVAL=$?
}

stop() {
  $FOREVER stop $NODEAPP
  RETVAL=$?
}

status() {
  $FOREVER list
  RETVAL=$?
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  status)
    status
    ;;
  restart)
    restart
    ;;
  *)
    echo "Usage:  {start|stop|status|restart}" >&2
    exit 1
    ;;
esac
exit $RETVAL

-----

ha1observer.jsは起動後に-uで渡されたユーザーにprocess.setuid()で切り替えて実行されます。
init.dからはrootで実行されるのでsetuidしないと色々と危険です。
これを準備したあと
$ update-rc.d ha1observer defaults 3 1
を実行することでrc?.dにシンボリックリンクが張られます。
再起動して
$ ps aux | grep ha1observer
で確認するときちんと実行されていることが分かります。

2015年12月11日金曜日

KiCad 4.0.1 (bzr6195)

KiCadが立て続けに更新されてます。

KiCad 4.0.1をbuildしたイメージをここにおいておきます。

標準のbuildとは下記の点が異なっています。
- TrackPad/MagicMouseの動作をMacの標準的な動作に変更しています
- Library/Application Support/kicad/internat/ja/のリソースを読むように修正しています
- fontが日本語対応になっています
変更分のpatchはこれです。

イメージをダウンロードして開くとkicadアプリケーションとkicadディレクトリがあります。
kicad.appは/Applications
kicadは/Library/Application\ Support
にそれぞれコピーします。(finderで開いた時の矢印のとおりにDrag&Dropして下さい)

最初の1回めは開発元が未確認のため開けませんと言われてしまうので、/Applicationフォルダを開いてKiCadを右クリックし「開く」を選択して、ダイアログボックスの「開く」を選択すると起動します。

詳細とbuildの手順はRC2.0の時に書いたのでこちらを参照して下さい。

2015年12月8日火曜日

KiCad4.0.0 (bzr6194)

KiCad4.0 stable releaseが出ました。
buildしたのでイメージをここに置いておきます。


標準のbuildとは下記の点が異なっています。
- TrackPad/MagicMouseの動作をMacの標準的な動作に変更しています
- Library/Application Support/kicad/internat/ja/のリソースを読むように修正しています
- fontが日本語対応になっています

イメージをダウンロードして開くとkicadアプリケーションとkicadディレクトリがあります。
kicad.appは/Applications
kicadは/Library/Application\ Support
にそれぞれコピーします。(finderで開いた時の矢印のとおりにDrag&Dropして下さい)

最初の1回めは開発元が未確認のため開けませんと言われてしまうので、/Applicationフォルダを開いてKiCadを右クリックし「開く」を選択して、ダイアログボックスの「開く」を選択すると起動します。

詳細とbuildの手順はRC2.0の時に書いたのでこちらを参照して下さい。

一つだけ、buildするのに引っかかった点を書いておきます。
brewでboostをいれているとpcbnewを起動した時にExceptionで落ちてしまうようです。
自分でbuildする場合はbuildする前にbrew uninstall boostでuninstallしておいて下さい。

2015年11月27日金曜日

スマートロック

ちょっと頼まれて普通の鍵の玄関を電気錠化して遠隔制御を出来るようにしてみました。
自宅は建てた時から電気錠だったのでHA端子接続で簡単につなげられていたため、これまで普通の鍵を置き換える検討をしてませんでした。

今回鍵の電気錠化の部分は㈱ユーシン・ショウワのリ・ボーンIIを使います。




最初はAkerunとかQrioSmartLockとかも検討したのですが、どちらもBluetooth接続で暗号化されているのと鍵という性質上セキュリティが厳しくHack出来ないと考え別のものを探してみました。
リ・ボーンIIは玄関のサムターン部分を外して代わりにつけるタイプで、AkerunやQrioSmartLockと比べて面倒ですが、リモコンキーで制御なのでリモコンキーのボタンを制御できればどうとでもなるはずと考えて、とりあえず入手して検討します。

蓋をあけるとDIP-SWがあります。
今回はAutoLockはこちらで制御するので単純にopen/closeのリモコンでの制御通りに動くモードに設定します。




まず、リモコンキーをバラして確認していきます。



CR2032電池なので公証3Vですが回路は電池の初期電圧とかも当然対応しているので3.3Vでも大丈夫でしょう。



open/closeのpush-swがあって、片方の端子がGNDにつながっています。もう片方がpull-upされているようで、sw-offで3V,sw-onでGNDになります。
なので、ここをコントロールすれば鍵を制御できます。

改造に邪魔なので電池ホルダーをはずして、制御モジュールのコネクタと配線を繋いでいきます。
電源の3.3V,GNDの線とFET-SWの線をopen,closeのpush-swのpull-up側に接続します。
これで鍵自体は制御できました。


これにドアが開いているかを検知するセンサーと内側からドアを開けたい場合に押すスイッチを追加して完成です。




2015年11月14日土曜日

KiCad4.0RC2

KiCad4.0RC2が出ました。
buildしたのでイメージをKiCad4.0RC2.dmgに置いておきます。

標準のbuildとは下記の点が異なっています。
- TrackPad/MagicMouseの動作をMacの標準的な動作に変更しています
- /Library/Application Support/kicad/internatが読まれてないので検索パスを追加しています
- fontを日本語対応のものに差し替えています

イメージをダウンロードして開くとkicadアプリケーションとkicadディレクトリがあります。
kicad.appは/Applications
kicadは/Library/Application\ Support
にそれぞれコピーします。
(finderで開いた時の矢印のとおりにDrag&Dropして下さい)

最初の1回めは開発元が未確認のため開けませんと言われてしまうので、/Applicationフォルダを開いてKiCadを右クリックし「開く」を選択して、ダイアログボックスの「開く」を選択すると起動します。

変更の詳細とbuildの手順を以下のとおりです。
今回はKiCadのbuildよりもOS X El Capitanに入れ替えた影響で色々とはまってしまいました。

変更内容はRC1の時にも書きましたが、もう一度書いておきます。

build済みはNightlyBuildがhttp://downloads.kicad-pcb.org/osx/にありますが、TrackPad/MagicMouseの使い勝手がMacの標準的な使い方とあっていません。
具体的にはTrackPadならピンチで拡大・縮小、2本指の操作で指を動かす方向にスクロール、MagicMaouseなら1本指で指を動かした方向にスクロールというのが標準的な使い方かと思います。(人によっては異論があるかもしれませんが、私はこれに慣れてしまっています)
NightlyBuildの方はTrackPadのピンチは効かず、2本指の操作で拡大/縮小、MagicMouseの1本指の操作も拡大/縮小になっています。
これはWindowsマウスのホイール動作に拡大/縮小が割り当てられているためと思われますが、クリック感があり上下にしか動かないホイールの動作とTrackPad/MagicMouseの360°操作では使い勝手が大きく違って、何をするにも画面が大きく拡大/縮小されてしまって使い物になりません。
仕方がないので自分でbuildします。

幸いなことに、この件に関するpatchがKiCadの中に既に含まれていて必要なpatchを当ててbuildしてくれるscriptが用意されています。
以前~gcorral/kicad/osx-trackpad-gesturesというbranchで進んでいたOSXのtrackpad対応が入っているようです。
これでbuildしてみて実行してみましたが、どうも以前のようにうまく行きません。
TrackPadのピンチで拡大/縮小が出来るようになっているのですが、2本指での操作でも拡大/縮小になってしまいます。MagicMouseの方も同様です。
osx-trackpad-gesturesと4.0のツリーを比較してみると関係ありそうな所が数箇所あったので修正してみました。
後々の為にpatchにしておきます。(あとでbuildの詳細でやり方を説明します)
これでbuildすると、当初の目論見どおり2本指の操作でスクロール、MagicMouseでもスクロールに出来ました。
さらに基板に日本語でシルクを入れられるように日本語フォント対応も追加します。
Windows環境が必要ですが、ここの手順どおりで日本語フォントを含んだnewstroke_font.cppを作成出来ます。
 http://wiki.kicad.jp/日本語フォントのマージ手順

ここまででひと通り準備が整ったので、以下buildの詳細手順です。

最初に面倒くさいところからやっていきます。
1.brewの対応のための/usr/local/の作成(これは既にbrewをinstallされてれば存在しているので不要です)
2.boostのbuildの対応のために/usr/libにsymbolic-linkを貼ります
こちらは/usr/libに幾つかdylibが存在しないためエラーになるための対応です。

El Capitanの場合、通常は/usr以下はroot権限でも書込みできません。
そのため以下の手順で一旦書き込みできる状態にして、変更後に書き込みできない状態に戻します。

⌘-Rを押しながら再起動してリカバリーモードに入ります。
ユーティリティのTerminalを起動し
# csrutil disable
を設定し再起動
# sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/lib/*.dylib /usr/lib
でsymbolic linkを作成
もし/usr/local/を作ってない場合は作成します。
# sudo mkdir /usr/local
# sudo chown $(whoami):admin /usr/local
一応セキュリティリスクを減らすためにrootlessをenableに戻します。
再度⌘-Rを押しながら再起動し
Terminalで
# csrutil enable
にもどして再起動

以下はXcodeとCommandLineTools、brewが入っている前提で書きますので無い場合は入れて下さい。

まずはbrewを最新の状態にして必要な物をinstallします。
# brew update
# brew upgrade
# brew install cmake bzr glew cairo swig openssl

bzrに自分の名前とメールアドレスを設定します。
# bzr whoami '自分の名前 <name@example.net>'

適当なところにKiCad build用のdirectoryを掘ります。
# mkdir KiCad4.0
# cd KiCad4.0

KiCad 4.0のソースコード入手
# bzr branch lp:kicad/4.0

wxPythonソースコード入手
http://www.wxpython.org/download.php#source
から下の方にあるwxPython-srcのlinkをたどってtar-ballを取得し先ほどのdirectoryに移動し展開します。ブラウザで辿ってもいいですが下記で取得できます。
# curl -O http://jaist.dl.sourceforge.net/project/wxpython/wxPython/3.0.2.0/wxPython-src-3.0.2.0.tar.bz2
# tar xjvf wxPython-src-3.0.2.0.tar.bz2

展開されたdirectory名を変更しておきます。
# mv wxPython-src-3.0.2.0 wx-src

kicad4.0rc2_macosx_patch.tgzをダウンロードして先ほどのdirectoryに移動し展開します。


kicad_macosx_scroll.patch
kicad_macosx_internat.patch
newstroke_font.cpp_j
の3のつのファイルができます。

TrackPad、MagicMouseのスクロール対応とEl Capitan対応
# cd 4.0
# patch -p0 < ../kicad_maxosx_scroll.patch

このpatchで
common/draw_panel.cpp
common/view/wx_view_controls.cpp
scripts/osx_build_wx.sh
の3つのファイルを修正しています。

/Library/Application Support/kicad/internatのパスを検索していないようなので修正
# patch -p0 < ../kicad_macosx_internat.patch

このpatchで
common/pgm_base.cpp
のファイルを修正しています。

日本語フォント対応
# cp ../newstroke_font.cpp_j common/newstroke_font.cpp

更になぜか私の環境ではbzr-svnで/Library/Python/2.6/site-packages/subvertpy/client.soを呼び出しているところでrpathが設定されておらず下のようなエラーが発生します。

bzr: ERROR: Unable to import library "subvertpy": bzr-svn: Unable to load subvertpy extensions: dlopen(/Library/Python/2.6/site-packages/subvertpy/client.so, 2): Library not loaded: @rpath/lib/libsvn_diff-1.0.dylib
  Referenced from: /usr/lib/libsvn_client-1.0.dylib
  Reason: image not found

これは私の環境だけかもしれないのでエラーが出たら以下の対処をして下さい。
/Library/Python/2.6/site-packages/subvertpy/client.soに細工をします。
# cd /Library/Python/2.6/site-packages/subvertpy
戻せるようにbackupをとって
# sudo cp client.so client.so_org
client.soにrpathを/usrとして追加
# sudo install_name_tool -add_rpath /usr client.so
これでbzr-svnのエラーが出なくなります。

次にwxPythonのbuildです。結構時間がかかります。
# sh scripts/osx_build_wx.sh ../wx-src ../wx-bin ./ 10.11 -j4
# cd ..

kicad本体のbuild。こちらもかなり時間がかかります。
# mkdir build
# cd buld
# cmake ../4.0 \
      -DCMAKE_C_COMPILER=clang \
      -DCMAKE_CXX_COMPILER=clang++ \
      -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
      -DPYTHON_EXECUTABLE=`which python` \
      -DKICAD_SCRIPTING=ON \
      -DKICAD_SCRIPTING_MODULES=ON \
      -DKICAD_SCRIPTING_WXPYTHON=ON \
      -DwxWidgets_CONFIG_EXECUTABLE=../wx-bin/bin/wx-config \
      -DPYTHON_SITE_PACKAGE_PATH=`pwd`/../wx-bin/lib/python2.7/site-packages \
      -DCMAKE_INSTALL_PREFIX=../bin \
      -DUSE_IMAGES_IN_MENUS=ON \
      -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl \
      -DCMAKE_BUILD_TYPE=Release
# make
# make install
# cd ..

次にその他のリソースをNightlyBuildから持ってきて無理やりパッケージし直します。
http://downloads.kicad-pcb.org/osx/のRC2相当はkicad-r6303なのでこれをダウンロードしてマウントします。

# curl -O http://downloads.kicad-pcb.org/osx/kicad-r6303.20151109-045453.dmg

そのままではReadOnlyなのでRW出来るように変換します。

# hdiutil convert kicad-r6303.20151109-045453.dmg -format UDSP -o kicad-r6303.sparseimage
# hdiutil attach kicad-r6303.sparseimage

アプリケーション本体を置き換えるため大文字のKiCadディレクトリを削除します。
# rm -rf /Volumes/KiCad/Kicad
finder上の位置合わせをconsoleからできないのでfinderでbin/KiCad.appを開いているKiCad Volume上のKiCadディレクトリがあったところにコピーします。

フォルダを開いたままの状態でdiskimageをdetachします。
# hdiutil detach /Volumes/KiCad

イメージの未使用領域を開放します。
# hdiutil compact kicad-r6303.sparseimage

最終的なReadOnly圧縮イメージに変換します。
# hdiutil convert kicad-r6303.sparseimage -format UDZO -o KiCad4.0RC2.dmg

このイメージが一番上のほうに置いてあるイメージになります。

2015年11月7日土曜日

KiCad 4.0RC1でESP-WROOM-02用基板作成 その6

次はESP-WROOM-02版です。

RP-3基板





HA-4基板


こちらの基板はXBeeの裏面に書かれているアドレスを読み取れるようにXBeeの下のところに穴を開けてあるのですが、ESP-WROOM-02を載せると丁度放熱用のPadのところが穴に位置してしまってあまりよろしくないかもしれません。

まだ、ESP-WROOM-02をどう使うか悩み中です。ATコマンドのままでうまく使っていくのか、何らかの独自のバイナリのI/Fを定義してAVRと通信させるのか、とか考えてるところです。


2015年10月31日土曜日

KiCad 4.0RC1でESP-WROOM-02用基板作成 その5

基板が上がってきたので部品をマウントしてみます。
まずは従来通りのXBee版です。

RP-3基板
いい感じです。

HA-4基板
こちらもいい感じです。


RP-3基板をRaspberryPi2と組み合わせます。


あれ?

RP-3基板のHA-4基板書き込み用のコネクタがRaspberryPi2のHDMI、Audioコネクタと干渉しています。
CAD上で基板の板端をギリギリで避けたつもりだったのですが、コネクタの出っ張りを考慮するのを忘れてました。
実物確認しなかったためのミスです。
回路動作チェックをしてソフト書いたらもう一度出し直しです.......


2015年10月23日金曜日

KiCad 4.0RC1でESP-WROOM-02用基板作成 その4

日曜日に届きました。



速かったです。注文してから8日です。
10/10(土)の朝に出して10/14(水)の夕方には基板が上がってきてDHLに渡されています。
business day 4-7日となっていたのに土日も動いてくれてるんですね。
そのあと39時間後の10/16(金)の朝には国内についてますが、そこから配達されるまで49時間もかかってます。
実際の配達は佐川急便でした。
深センから成田のほうが成田から東京より近いようですね。

Wednesday, October 14, 2015
1 Shipment picked up SHENZHEN - CHINA             18:50
2 Processed at SHENZHEN - CHINA                      22:59
3 Departed Facility in SHENZHEN                      23:04
4 Clearance event SHENZHEN - CHINA, PEOPLES REPUBLIC 23:18

Thursday, October 15, 2015
5 Customs status updated HONG KONG            00:16
6 Clearance processing complete at SHENZHEN - CHINA  01:19
7 Arrived at Sort Facility HONG KONG                 03:17
8 Processed at HONG KONG                             06:37
9 Clearance processing complete at HONG KONG         06:37
10 Processed at HONG KONG                            19:15
11 Departed Facility in HONG KONG                    22:34

Friday, October 16, 2015
12 Customs status updated TOKYO - JAPAN        03:07
13 Transferred through TOKYO - JAPAN                 08:42
14 Arrived at Sort Facility TOKYO - JAPAN      10:00
15 Clearance event TOKYO - JAPAN                     10:37
16 Processed for clearance at TOKYO - JAPAN          10:37
17 Customs status updated TOKYO - JAPAN        22:42
18 Clearance processing complete at TOKYO - JAPAN    22:56

Saturday, October 17, 2015
19 Processed at TOKYO - JAPAN                        01:21
20 Departed Facility in TOKYO - JAPAN                01:45
21 Arrived at Delivery Facility in TOKYO - JAPAN     08:13
22 Forwarded for delivery TOKYO - JAPAN        09:33

Sunday, October 18, 2015
23 Delivery attempted; recipient not home            10:58
24 Delivered - Signed for by : DLVD BY AGNT          19:31


2015年10月16日金曜日

KiCad 4.0RC1でESP-WROOM-02用基板作成 その3

とくにパターン的におかしくなかったのでElecrowに出してみました。
Elecrowの注文のページは以前はクレジットカードもPayPalのシステム経由だったのでちゃんとしていたけど、今回は直接クレジットカードの番号を入れるように変わってました。
ただ、このページhttpで暗号化されていません。クレジットカードの入力が暗号化されてないのはちょっと不安なのでpaypalにしました。
送料は820gでShenzhen DHLが$20.44、Registerd Air Parcelが$17.02と$3位の差なのでDHLを選択。
片方はpanelize有りなので+1日かな。国慶節の連休明けなので注文が溜まってるから動きが遅そう。
10/10(土)に出したので月曜日から作業し始めてbusiness dayで10日くらいとすると10/26の週に到着ぐらいかな.....と思っていたら10/10の内に
10/10/2015 In production Dear Customer,
We have put your design into production, it will needs about 4-7 business days. Thank you!
Best Regards
Elecrow
と返ってきました。それでも混んでるから7business daysだろうと考えていたのですが10/15(木)の朝に写真付きで出荷の連絡がきました。


この辺がElecrowのいいところですね。深センは時差の関係で10/14(水)です。

DHLのTrackingを確認すると

Wednesday, October 14, 2015
1 Shipment picked up SHENZHEN - CHINA             18:50
2 Processed at SHENZHEN - CHINA                      22:59
3 Departed Facility in SHENZHEN                      23:04
4 Clearance event SHENZHEN - CHINA, PEOPLES REPUBLIC 23:18
Thursday, October 15, 2015
5 Customs status updated HONG KONG            00:16
6 Clearance processing complete at SHENZHEN - CHINA  01:19
7 Arrived at Sort Facility HONG KONG                 03:17
8 Processed at HONG KONG                             06:37
9 Clearance processing complete at HONG KONG         06:37
10 Processed at HONG KONG                            19:15
11 Departed Facility in HONG KONG                    22:34

Friday, October 16, 2015
12 Customs status updated TOKYO - JAPAN              03:07
13 Transferred through TOKYO - JAPAN                 08:42
14 Arrived at Sort Facility TOKYO - JAPAN            10:00
15 Clearance event TOKYO - JAPAN                     10:37
16 Processed for clearance at TOKYO - JAPAN          10:37

この調子だと週末か週明けには到着しそうです。

2015年10月9日金曜日

KiCad 4.0RC1でESP-WROOM-02用基板作成 その2

2つ目の基板を作成してみました。
HA端子、SW制御、赤外線リモコン送信、受信、GPIO、ADC機能の子基板で以前XBee用に設計したものをESP-WROOM-02対応とダイオード、FETが小さすぎてハンダ付けがしにくいのでひとまわり大きいものに変更したり、機能を変更したりしました。

回路図は以下のとおり


出来上がったパターンは以下のとおりです。



KiCADのバグでしょうか?

DRCの未配線は無いので大丈夫だと思うのですが、KiCADのpcbnewをOpenGLモードで見ていると下側のStatusのところの未配線が2になっています。

これが表示設定を標準にすると0になります。


KiCADのBZR5814とかで作った前回のパターンからいじったのでどこかにゴミデータでも残っているのかもしれませんが、よくわかりません。BZR5814で開くとOpenGLモードでも未配線が0になります。
最初から4.0RC1で作成したRP-3基板はOpenGLモードでも未配線0なので、この基板データ固有の問題かもしれません。

急いでも仕方が無いので週末にガーバーの確認をしてから出図しようかと思います。
Elecrowも国慶節明けで混んでそうなので、週明けくらいに出してもあまり変わらないかと。

今回の基板は10cm x 10cmに3枚面つけでV-Cutの予定です。
RP-3基板と今回の基板それぞれ10枚で、まとめると送料が安くなりそうです。




2015年10月2日金曜日

KiCad 4.0RC1でRaspberryPi2用のESP-WROOM-02用基板作成

KiCad 4.0RC1をせっかくbuildしたのでESP-WROOM-02用の基板を作成してみました。
RaspberryPi2用の基板ですがHAT規格ではありません。合わせられる所はHAT規格に合わせてますが、ACアダプタ用のコネクタを後ろ側から出すため基板外形を変更しています。
ケースは以前作成したRP-2基板用のものを流用する予定です。

回路は色々と余計なものがついていますが、基本的にはRaspberryPi2の電源をUSB-miniからではなくACアダプタ用のコネクタを背面側に出すための回路と、XBeeモジュール・ESP-WROOM-02のいずれか経由で子機と接続するための回路、RaspberryPi2に赤外線リモコンの送受信機能を追加するための回路、子機として使う時のためのAVRマイコン回路で必要に応じてマウント部品を変更して使うようにしています。

回路図は以下のとおり






で出来上がったパターンが以下のとおりです。


SWITCH-SCHIENCEがSeedStudioのPCB作成サービスの取り扱いを始めたのでこちらでお願いするか、以前出したElecrowに出すか、どちらが安いのか比較してみます。
今回は10cm x 10cm x 1.0mm panelizeなし、黒レジスト、10枚です。

SWITCH-SCHIENCEの場合
 Greenレジスト 10cmX10cm基板で3074円
 それ以外のレジスト 10cmX10cm基板で5882円
 +パブリックベータ期間なら送料324円、通常は1080円
で緑レジストの最安なら3398円
黒レジストにすると6206円

Elecrowの場合
 Greenレジスト 10cmX10cm基板$14
 それ以外のレジスト 10cmX10cm基板$15.9
 + 送料(Registerd Airmaailで$10.37,DHLで$16.37)
で緑レジストの最安で$24.37 = 2924円 ($1=120円換算)
黒レジストにすると$26.27 = 3152円
DHLにすると+720円

価格は緑レジストにすればいい勝負ですが他の色の場合はElecrowの方が半額近いですね。
納期はSWITCH-SCHIENCEは14-21日、ElecrowはこれまでDHLでの経験では1回目14日、2回目v-cutありでも14日だったので、こちらもそれほどの違いはなさそう。
ということで今回は黒色にしたいのでElecrowでRegisterd Airmailを試してみます。
.........
ところが、注文しようとしたらElecrowは国慶節で10/7までお休みでした。
別に急いでないので、もう1つの基板も描いてまとめて注文しようかと思います。

2015年9月18日金曜日

KiCad4.0 RC1(bzr6188) for OS-X

KiCad4.0 RC1が出ましたね。
早速試してみます。
build済みはNightlyBuildが
http://downloads.kicad-pcb.org/osx/
にありますが、TrackPad/MagicMouseの使い勝手がMacの標準的な使い方とあっていません。
具体的にはTrackPadならピンチで拡大・縮小、2本指の操作で指を動かす方向にスクロール、MagicMaouseなら1本指で指を動かした方向にスクロールというのが標準的な使い方ではないかと思います。(人によっては異論があるかもしれませんが、私はこれに慣れてしまっています)
NightlyBuildの方はTrackPadのピンチは効かず、2本指の操作で拡大/縮小、MagicMouseの1本指の操作も拡大/縮小になっています。
これはWindowsマウスのホイール動作に拡大/縮小が割り当てられているためと思われますが、クリック感があり上下にしか動かないホイールの動作とTrackPad/MagicMouseの360°操作では使い勝手が大きく違って、何をするにも画面が大きく拡大/縮小されてしまって使い物になりません。

仕方がないので自分でbuildします。
幸いなことに、この件に関するpatchがKiCadの中に既に含まれていて必要なpatchを当ててbuildしてくれるscriptが用意されています。
以前~gcorral/kicad/osx-trackpad-gesturesというbranchで進んでいたOSXのtrackpad対応が入っているようです。

これでbuildしてみて実行してみましたが、どうも以前のようにうまく行きません。
TrackPadのピンチで拡大/縮小が出来るようになっているのですが、2本指での操作でも拡大/縮小になってしまいます。MagicMouseの方も同様です。

osx-trackpad-gesturesと4.0のツリーを比較してみると関係ありそうな所が数箇所あったので修正してみました。
後々の為にpatchにしておきます。(あとでbuildの詳細でやり方を説明します)
これでbuildすると、当初の目論見どおり2本指の操作でスクロール、MagicMouseでもスクロールに出来ました。
さらに基板に日本語でシルクを入れられるように日本語フォント対応も追加します。
Windows環境が必要ですが、ここの手順どおりで日本語フォントを含んだnewstroke_font.cppを作成出来ます。
 http://wiki.kicad.jp/日本語フォントのマージ手順

ここまででひと通り準備が整ったので、以下buildの詳細手順です。
build方法は以下のページを参考にさせていただきました。
http://ochaochaocha3.hateblo.jp/entry/2015/01/05/installing-kicad-on-mac-os-x
ほぼ同じ手順ですが、patchに対応が入っていたりするので順番に記述します。

XcodeとCommandLineTools、brewが入っている前提で書きますので、ない場合は入れておいて下さい。

まずはbrewを最新の状態にして必要な物をinstallします。
# brew update
# brew install cmake bzr glew cairo swig

bzrに自分の名前とメールアドレスを設定します。
# bzr whoami '自分の名前 <name@example.net>'

適当なところにKiCad build用のdirectoryを掘ります。
# mkdir KiCad4.0
# cd KiCad4.0

KiCad 4.0のソースコード入手
# bzr branch lp:kicad/4.0

wxPythonソースコード入手
http://www.wxpython.org/download.php#source
から下の方にあるwxPython-srcのlinkをたどってtar-ballを取得し先ほどのdirectoryに移動し展開します。
# tar xjvf wxPython-src-3.0.2.0.tar.bz2

展開されたdirectory名を変更しておきます。
# mv wxPython-src-3.0.2.0 wx-src

以下のファイルをダウンロードして先ほどのdirectoryに移動し展開します。
kicad4.0_osx_patch.tgz

kicad_macosx_scroll.patch
newstroke_font.cpp
の2つのファイルができます。

TrackPad、MagicMouseのスクロール対応とyosemite対応
# cd 4.0
# patch -p0 < ../kicad_maxosx_scroll.patch

このpatchで
4.0/common/draw_panel.cpp
4.0/common/view/wx_view_controls.cpp
4.0/scripts/osx_build_wx.sh
の3つのファイルを修正しています。

日本語フォント対応
# cp ../newstroke_font.cpp common/newstroke_font.cpp

boost対応
/usr/libに幾つかdylibが存在しないためエラーになる
# sudo ln -s /Applications/Xcode.app/Contents/Developer/usr/lib/*.dylib /usr/lib
でsymbolic linkを作成

El Capitanではrootでも/usr/libに書き込み出来ないのでrootless対応が必要になるようです。

wxPythonのbuild 結構時間がかかります。
# sh scripts/osx_build_wx.sh ../wx-src ../wx-bin ./ 10.10 -j4
# cd ..

kicad本体のbuild こちらもかなり時間がかかります。
# mkdir build
# cd buld
# cmake ../4.0 \
      -DCMAKE_C_COMPILER=clang \
      -DCMAKE_CXX_COMPILER=clang++ \
      -DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 \
      -DPYTHON_EXECUTABLE=`which python` \
      -DKICAD_SCRIPTING=ON \
      -DKICAD_SCRIPTING_MODULES=ON \
      -DKICAD_SCRIPTING_WXPYTHON=ON \
      -DwxWidgets_CONFIG_EXECUTABLE=../wx-bin/bin/wx-config \
      -DPYTHON_SITE_PACKAGE_PATH=`pwd`/../wx-bin/lib/python2.7/site-packages \
      -DCMAKE_INSTALL_PREFIX=../bin \
      -DUSE_IMAGES_IN_MENUS=ON \
      -DCMAKE_BUILD_TYPE=Release
# make
# make install
# cd ..

ここまででKiCad4.0/bin/にkicadの本体が出来上がります。

次にライブラリなど/Library/Application\ Support/kicad/に配置するものを集めます。
まず集める為のdirectoryを準備します。

# mkdir -p release/kicad

NightlyBuildをみるとkicad以下には下記のdirectoryがあります。
kicad/demos
kicad/help
kicad/internat
kicad/library
kicad/packages3d
kicad/template
ただしkicad/internatはkicad/share/intarnatに置かないと効果がないようです。

kicadをbuildするとbinに出来ているkicad.appとdemosをコピーします。
# cp -pr bin/kicad.app release
# cp -pr bin/demos release/kicad

次にlibrary, packages3d, templateを取得します。
# git clone https://github.com/KiCad/kicad-library.git
# cp -pr kicad-library/library release/kicad
# cp -pr kicad-library/modules/packages3d release/kicad
# cp -pr kicad-library/template release/kicad

次はhelp,internatを取得します。
公式repoはbzr branch lp:~kicad-developers/kicad/docなのですがgitの方が速いので非公式repoですがこちらから取得。
# git clone https://github.com/blairbonnett-mirrors/kicad-doc.git
# cp -pr kicad-doc/doc/help release/kicad
# mkdir release/kicad/share
# cp -pr kicad-doc/internat release/kicad/share

helpが古いのでkicad.jpの方々の最新版の翻訳(感謝!)に差し替えます。
# curl http://kicad.jp/translate/CvPcb.pdf -o release/kicad/help/ja/CvPcb.pdf
# curl http://kicad.jp/translate/Eeschema.pdf -o release/kicad/help/ja/Eeschema.pdf
# curl http://kicad.jp/translate/GerbView.pdf -o release/kicad/help/ja/GerbView.pdf
# curl http://kicad.jp/translate/Getting_Started_in_KiCad.pdf -o release/kicad/help/ja/Getting_Started_in_KiCad.pdf
# curl http://kicad.jp/translate/IDF_Exporter.pdf -o release/kicad/help/ja/IDF_Exporter.pdf
# curl http://kicad.jp/translate/KiCad.pdf -o release/kicad/help/ja/KiCad.pdf
# curl http://kicad.jp/translate/Pcbnew.pdf -o release/kicad/help/ja/Pcbnew.pdf
# curl http://kicad.jp/translate/Pl_Editor.pdf -o release/kicad/help/ja/Pl_Editor.pdf

これでrelease以下にkicad.appとkicadの2つのdirectoryが出来上がりました。
ここまでのreleaseをKiCad4.0RC1にrenameしたものを下記に置いておきます。

KiCad4.0RC1.zip

上のファイルを展開して
kicad.appは/Applications
kicadは/Library/Application\ Support
にそれぞれ移動します。

上記からダウンロードした場合、最初の1回めは開発元が未確認のため開けませんと言われてしまうので /Applicationフォルダを開いてKiCadを右クリックし「開く」を選択してダイアログボックスの「開く」を選択すると起動します。
起動するとタイトルバーにKiCad (2015-09-12 BR6188) .....と出ていれば正しく開けていると思います。
/Library/Application\ Support/kicad/demoに幾つかサンプルが入っているのでkicadから開いてみてください。

まだRC1なのでお試し用であることを踏まえて使ってください。

2015年8月28日金曜日

node.jsとwebsocket

node.js自体のinstall方法は色々な方が書かれているのでここでは飛ばします。
今回はさくらVPS上でubuntu14.04LTSでサーバーを運用しています。

javascript初心者なので何かとつまらないところで躓いてますが、なんとか通信が動くようになりました。

最初にhttpsで接続し、upgradeでwebsocketに切り替える動作になるので、サーバー認証、クライアント認証はhttps接続時に行います。
最初に躓いたのは、自己認証局の証明書(いわゆるオレオレ証明書です)でMacのSafari(8.0.8)からwebsocketに接続しようとすると接続がハネられてしまうことに気が付かなかったため数日間悩みました。Chromeで接続するとちゃんと接続できたので、Safariの仕様のようです。wiresharkでみてみるとサーバー側からはリクエストが出ていますがSafariからクライアント証明書を送っていないようです。
最終的にはSafariではなくRaspberryPi上の自作プログラムから接続するので、このまま進めます。

最初に必要なモジュールを読み込みます。
var WebSocketServer = require('ws').Server;
var https = require('https');
var fs = require('fs');

後で変更しそうな設定値を記述したconfigファイルを用意して読み込みます。
var config = require('./config');

httpsのセキュリティ条件をoptsで設定します。
  var opts = {
    key: fs.readFileSync(config.keyFile),
    cert: fs.readFileSync(config.certFile),
    ca: fs.readFileSync(config.caFile),
    ciphers: "ALL:!EXP:!ADH:!LOW:!SSLv2:!SSLv3:!DES:!3DES:!RC4",
    honorCipherOrder: true,
    secureProtocol: "TLSv1_2_method",
    requestCert: true,
    rejectUnauthorized: true
  };

クライアント認証をするには最後のrejectUnauthorized:trueが必要です。
これがないとやりとりはするけど認証されてない相手でも通信を許してしまいます。
あとdebug時にwiresharkで暗号通信の中身を確認したい場合はciphers:の先頭のALL:をkRSA:にする必要があります。これをしないと暗号が解けないので中身が見えません。

  // connect from house controller
  var houseControllerServer = https.createServer(opts);
  var wss = new WebSocketServer({server:houseControllerServer});
  var houseControllerConnections = [];

  houseControllerServer.listen(config.houseControllerPort, function() {
    console.log("house controller listing on port %d", config.houseControllerPort);
  });
指定されたportでアクセスが来るのを待ちます。

  wss.on('connection', function (ws) {
    // connectionイベントの処理
    console.log('connect from house controller');
    houseControllerConnections.push(ws); // 接続先を記録しておきます。
  // ここにwebsocket接続時の処理を追加します。

    ws.on('close', function () {
      // closeイベントの処理
      console.log('disconnect from hosue controller');
      // closeする接続先を記録から除いています。
      houseControllerConnections = houseControllerConnections.filter(function (conn, i) {
        return (conn === ws) ? false : true;
      });
     // ここにdisconnect時の処理を追加します。
    });

    ws.on('message', function (message) {
      // mesageイベントの受信処理
      var OU = ws._socket.getPeerCertificate().subject.OU;
      var msg = JSON.parse(message);
      // ここに通信相手からのメッセージの処理を追加します。
      console.log(msg);
    });
  });

  //送信はイベント処理ではないのでfunctionです。
  function sendWebsocket(message) {
    houseControllerConnections.forEach(function (con, i) {
      // 登録されている通信相手にメッセージを送信します。
      con.send(JSON.stringify(message));
    });
  }

以上で接続、終了、受信、送信の処理となります。


2015年8月21日金曜日

websocket

これまでは自宅のNAT内のRaspberryPiのホームコントロールシステムを外からアクセス出来るようにするためにNAT内から外のサーバーに対してTLSでsocketを1本通しておいて、外部サーバーの443portにアクセスしてきたものをclient認証をした後にTLSを逆流させてRaspberryPiのapache2に繋ぐという仕組みを作って運用していました。
これはこれで簡単でいいのですが、apache2をRaspberryPiで運用していたのでどうしても重たくなっていました。
少し世間一般的な解決方法を取り入れようと考えて、色々と最近の流行を調べたりしているのですが、webの世界はフレームワークの標準とかの変化が激しすぎてなかなかついていけません。とりあえず始めないと始まらないので、まずは手始めにサーバーサイドをnode.jsにしてRaspberryPi上のホームコントロールサーバーにwebsocketのプロトコルを話せるような機能を追加してみました。
websocketはwikipediaの説明を読めば大体理解できたので対向のwebsocketサーバーにnode.jsのサンプルプログラムを利用してそのままTLS化して繋いで動作確認をしていきます。
まだ他の部分が安定して動作してないので安定してきたら公開しようかと思います。
最終的にはセンサー、HAコントロール、etcの機能をESP8266を使ったWiFiモジュールで実現し、RaspberryPi2上のホームコントロールサーバーで情報集約してsecure websocketでNAT越しにさくらVPSで借りているサーバー上のnode.jsに接続、そこからiPhone上のWebAppに繋ぐということを実現しようかと考えています。
まだjavascriptを勉強し始めたところなので道のりが長そうですが........

2015年8月14日金曜日

OS-XでESP8266開発環境その2

前回作ったSDKの環境でbuildしていきます。
# cd ~/ESP8266/esp_iot_sdk_v1.2.0
# cp -r examples/at/ .
# cd at
scriptの属性を実行可能に修正
# chmod +x gen_misc.sh
# ./gen_misc.sh
gen_misc.sh version 20150511

Please follow below steps(1-5) to generate specific bin(s):
STEP 1: choose boot version(0=boot_v1.1, 1=boot_v1.2+, 2=none)
enter(0/1/2, default 2):
1 <---最初にfirmware updateで使用したイメージと同じものを選択
boot mode: new

STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)
enter (0/1/2, default 0):
1 <---ここも最初にfirmware updateで使用したイメージと同じものを選択
generate bin: user1.bin

STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)
enter (0/1/2/3, default 2):
2 <---defaultを選択
spi speed: 40 MHz

STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)
enter (0/1/2/3, default 0):
0 <---defaultを選択
spi mode: QIO

STEP 5: choose spi size and map
    0= 512KB( 256KB+ 256KB)
    2=1024KB( 512KB+ 512KB)
    3=2048KB( 512KB+ 512KB)
    4=4096KB( 512KB+ 512KB)
    5=2048KB(1024KB+1024KB)
    6=4096KB(1024KB+1024KB)
enter (0/2/3/4/5/6, default 0):
2 <---ここも最初にfirmware updateで使用したイメージと同じものを選択
spi size: 1024KB
spi ota map:  512KB + 512KB


start...

DEPEND: xtensa-lx106-elf-gcc -M -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -DAT_UPGRADE_SUPPORT -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle user_main.c
xtensa-lx106-elf-gcc -Os -g -O2 -Wpointer-arith -Wundef -Werror -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections  -DICACHE_FLASH -DAT_UPGRADE_SUPPORT   -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle  -o .output/eagle/debug/obj/user_main.o -c user_main.c
xtensa-lx106-elf-ar ru .output/eagle/debug/lib/libuser.a .output/eagle/debug/obj/user_main.o 
xtensa-lx106-elf-gcc  -L../lib -nostdlib -T../ld/eagle.app.v6.new.1024.app1.ld -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain -ljson -lupgrade -lsmartconfig user/.output/eagle/debug/lib/libuser.a -lat -Wl,--end-group -o .output/eagle/debug/image/eagle.app.v6.out 

!!!
Support boot_v1.2 and +
Generate user1.1024.new.2.bin successully in folder bin/upgrade.
boot.bin------------>0x00000
user1.1024.new.2.bin--->0x01000
!!!

これで../bin/upgradeに
user1.4096.new.4.S 逆アセンブルコード
user1.4096.new.4.bin 書き込みイメージ
user1.4096.new.4.dump シンボル情報
が出来上がります。

# cd ../bin

基板のIO0のスイッチをUART書き込み側に倒してリセットします。

# esptool.py -p /dev/cu.usbserial-A101JG84 write_flash -fs 32m 0x00000 boot_v1.4\(b1\).bin 0x1000 upgrade/user1.1024.new.2.bin                                   
Connecting...
Erasing flash...
Writing at 0x00000800... (100 %)
Erasing flash...
Writing at 0x00040800... (100 %)

Leaving...

基板のIO0のスイッチを通常モードに戻してリセットします。
# jerm -b 115200 -r rntn /dev/cu.usbserial-A101JG84
を起動してATコマンドでバージョンを確認
AT+GMR
AT version:0.30.0.0(Jul  3 2015 19:35:49)
SDK version:1.2.0
compile time:Jul 25 2015 10:44:06
OK
ちゃんと更新されて動いているようです。

2015年8月7日金曜日

OS-XでESP8266開発環境その1

ともの技術メモさんを参考にArduinoIDE ESP8266の環境をinstallします。
linux版ですが非常にわかりやすく書いてくれています。
OS-Xでもほぼ同じ手順で行けます。

以下はOS-X yosemiteでの環境構築です。

Arduino IDE for ESP8266
のInstalling with Boards Managerに書かれているとおりの手順です。

Aruduino website
からARDUINO 1.6.5のMac OS X 10.7 Lion or newerをdownloadします。
ダウンロードしたzipファイルをダブルクリックして開くとArudiono.appが展開されます。
Arudiono.appをApplicationフォルダにコピーし、ファイルを右クリックで開きます。
メニューバーのArudino->Preferences...を開きます。
Additional Boards Manager URLs:に
    http://arduino.esp8266.com/package_esp8266com_index.json
を設定しOKボタンを押してPreferences...を閉じます。
メニューバーのツール->ボード->Board Manager..を開きます。
一番下にesp8266 by ESP8266 Communiyというものがあるので選択し、Installボタンを押します。
ダウンロードが完了したら閉じて、Aruduinoを終了します。

~/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9/
にxtensa-lx106のツール一式が出来上がっています。
このままでもいいのですが、diretoryが深すぎて使いにくいので
# cp -pr ~/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/1.20.0-26-gb404fb9 /usr/local/ESP8266
とします。(このへんは好みの問題です)
shellのPATH設定に/usr/local/ESP8266/binを追加します。

次にBRILLIANTSERVICE TECHNICAL BLOGさんを参考にESP8266のSDKとツール等を展開するためのdirectoryを掘ります。
まずは最新firmwareをbuild出来る環境を作って確認していきます。

# mkdir ~/ESP8266
# cd ~/ESP8266
# curl -o esp_iot_sdk_v1.2.0_15_07_03.zip https://raw.githubusercontent.com/esp8266/esp8266-wiki/master/sdk/esp_iot_sdk_v1.2.0_15_07_03.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11.7M  100 11.7M    0     0  2088k      0  0:00:05  0:00:05 --:--:-- 2992k
# unzip esp_iot_sdk_v1.2.0_15_07_03.zip
Archive:  esp_iot_sdk_v1.2.0_15_07_03.zip
..............
  inflating: release_note.txt  

buildに必要なincludeファイルを入れます。
# curl -o includes.tgz https://raw.githubusercontent.com/esp8266/esp8266-wiki/master/include.tgz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  956k  100  956k    0     0   316k      0  0:00:03  0:00:03 --:--:--  316k
# cd esp_iot_sdk_v1.2.0
# tar zxvf ../includes.tgz
x include/
..........
x include/wctype.h

libc.a,libhal.aを入れます。
# curl -o lib/libc.a https://raw.githubusercontent.com/esp8266/esp8266-wiki/master/libs/libc.a
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2689k  100 2689k    0     0   854k      0  0:00:03  0:00:03 --:--:--  854k
# curl -o lib/libhal.a https://raw.githubusercontent.com/esp8266/esp8266-wiki/master/libs/libhal.a
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  339k  100  339k    0     0   593k      0 --:--:-- --:--:-- --:--:--  594k

書き込みのためのツールを入れます。
# cd ..
#  git clone https://github.com/themadinventor/esptool esptool-py 
Cloning into 'esptool-py'...
remote: Counting objects: 192, done.
remote: Total 192 (delta 0), reused 0 (delta 0), pack-reused 192
Receiving objects: 100% (192/192), 66.80 KiB | 0 bytes/s, done.
Resolving deltas: 100% (93/93), done.
Checking connectivity... done.
# cd esptool-py 
# python setup.py install
running install
.......
Installing esptool.py script to /usr/local/bin
......
Finished processing dependencies for esptool==0.1.0
# cd ..

ここまででbuild出来る環境が出来上がりました。
次回は実際にbuildして書き込んで確認します。