0

Node.jsでプロセス終了前に何か処理する

process.on(“exit”, callback)に登録しておくと、プロセスが終了する時に処理できる。

しかしそこで非同期処理を行うと、処理が終わる前にプロセスが終了してしまう。

使いたいところ


BlendMicroとのBLEでの通信をシリアルポートのように使えるモジュールを作ってるんだけど、プロセス終了時にperipheral.disconnect()しないとBlendMicro側がずっと開きっぱなしになって、再接続できなくなる。

ctrl+cでnodeを終了した時とかに、ちゃんとBLEを閉じたい。

こうした

for signal in ['SIGINT', 'SIGHUP', 'SIGTERM']
process.on signal, ->
peripheral.disconnect ->
process.exit 1
signal受け取れる事は知ってたけど、signalを握りつぶせる事は知らなかった。
peripheralを閉じる処理終わったら、自分でprocess.exitする必要がある。


node v0.12以上ならprocess.on(“beforeExit”, callback)が使える


ようになるらしい

0

Bluetoothが載ってるArduino派生ボード「BlendMicro」とNode.jsでBLEした

追記:npmにしたり、firmata作った




Mac OSXで動かしてるNode.jsとBluetoothで通信できるようになった。無線でArduino制御するの超簡単になっちゃった。
もうXBeeとか無くていいと思う。ミニ四駆とかに乗せるのに良さそう。

試したのはちゃんとコネクションはって双方向通信するやつ。次はAdvertisementパケットにセンサーの値でも乗せて垂れ流すのをやってみたい。

ソースコードとかはgithubにおいてある
https://github.com/shokai/blendmicro-study


ArduinoMicroにBLE(Bluetooth Low Energy)を追加したBlend Microというボードが先月末に出たので、買って試した。
1枚$36なので、2枚買った。注文して1週間ぐらいで届いた。
普通のArduinoMicroより1000円高いだけなので、(各言語から通信できるライブラリが揃ってくれば)とても良いと思う。


Blend Micro


Blend Micro — RedBearLab

ほぼArduino Microなマイコン基板に、BLEのチップ(Nordic nRF8001)が追加されている。
ATMegaからはACIというSPIに似たプロトコルで通信して制御する。その部分はArduinoライブラリになっている

BlendMicro


Arduino Microと比べて少し小さい。小さいのはnRF8001の制御にピンを使っているからその分をIOピンに引き出していないからだと思う。多分。
VCCが5Vではなく3.3Vになっている。nRF8001の動作のためにUSB 5Vを3.3Vに落としている。

BlendMicro


セットアップ

チュートリアルをよく読んで、ライブラリを追加したり、Arduino IDEの中のファイルを置き換えたりとかする必要がある。ちょっと面倒。
Getting Started – Blend Micro — RedBearLab

Arduino IDE側の環境が整ったら、サンプルスケッチのBLEControllSketchをBlendMicroに書き込んで、AndroidアプリiOSアプリから操作してみるといい。

やってみた



Node.jsと通信する


nodeからBLEでデバイス見つけて、文字列を書き込んで、BlendMicroが受信して、nodeにエコーする、というのを作ってみた。
Bluetoothの仕様全然知らないし、ドキュメントとか無かったけどソース読んでたら理解できてきてnodeで書けた。



通信しているところ。「かずどん」「ざんまい」などの文字列を送ると、
「echo>」が頭に付いて返ってくる。日本語が普通に通ってしまった。



nodeでのBLEはnoble npmを使った。

通信方法はドキュメントが無いので、AndroidアプリのChatサンプルのコードと、
BlendMicro内で使ってるNordicSemiconductor/ble-sdk-arduinoRedBearLab/nRF8001などのライブラリを読んだ。
ペリフェラル(デバイス)は名前で探して、その中のserviceリストとservice内のcharacteristicsリストから、nRF8001のRX/TXになってる奴をUUIDで識別すればいいだけだった。

複数のデバイスを接続する場合はarduino側でble_set_nameメソッドで名前を個別に変えて、それをnode側でperipheral.advertisement.localNameで探すとよさそう。

0

RSS新着まとめてチェックしてSlackに投げるやつ作った

作った。

https://github.com/masuilab/rss-slackbot

主にgithubと、研究室の人のblogの更新をSlackに通知するのに使ってる。

Slackに最初からあるRSS integrationは、entryのdescriptionを埋め込んでしまうのでgithubのRSSを読み込ませるとデカくなって邪魔だった。

githubとかはURLをpostすれば適当にかっこよくslackがチャットにembedしてくれるので、titleとURLだけpostする感じにした。

あとたくさんfeedを管理するのもwebで1つずつ登録したりとか面倒なのでgithubでプルリクとかでやりたい。
RSS追加したい人はconfig.json編集してください。


docker/dokkuで動かしたかったので、crontabとかDBとか使うのやめた。
titleとURLなんて大したサイズ量じゃないから全部オンメモリでいいやという事でsetIntervalで定期的に見に行くだけにしてみた。

0

slackとnode-lindaとhubotとdockerとibeaconとraspiとarduino接続した

slackでhubotに頼むとドアあけてくれるようになった。hubotはじめて使った。
増井研はインドア派なので、ハローワールドするためにドアを開ける。



あと部屋を指定してスピーカーからmacのsayが流せる。



iBeaconで位置をはかって、誰が近づいたとか通知される。
試験的に、近づいたらドア勝手に開くようにしてみた。


電気ついたりとか、そういうセンサー値の大きな変化も通知される。


hubotがslackにつながってて、コマンドを待ち受けたりしてる。センサーとか実世界系の操作はnode-lindaに投げてる。
node-lindaの下にはraspberry pi+arduino+センサやサーボモータ色々のセットとか、dockerコンテナとかがたくさんぶら下がってて、色々処理してる。


そのうちくわしく書く羽目になると思う

0

twitterでエゴサーチしてslackに流す

https://github.com/shokai/twitter-egosearch-slack




こういう設定ファイル書いておくとtweetをslackのchannelに流してくれる

twitter:
user: shokai

slack:
team: "your-tean-name"
channel: "#general"
token: "your-slackbot-token"

words:
- "shokai.org"
- "橋本商会"
- "github.com/shokai"
- "shokai.github"

ignore:
users:
- bot
- shokai_twit
- shokai_bot
- shokai_log
- end_0606_shokai
- kirakira
- rurourafale
- YADAYOOOOOO
- aine0120
- K_T_Hotel_Annex
- sho1nco
- koyoshokai
words:
- shokai_bot
- shopping.yahoo
- キラキラ商会
- kirakira
- ビリケン