Viewing entries in
IoT

Couchbase Live Tokyo 2015

Couchbase Live Tokyo 2015

みなさん、こんにちは。アットウェアの矢納です。
先日8/31(月)に豊洲で開催されたCouchbase Live Tokyo 2015にスピーカとして参加してきました。今回は発表の内容を紹介して行きたいと思います。

IoT Platform 「Yanoh!(TBD)」

今回のセッションのタイトルは"IoT Platform 「Yanoh!(TBD)」"です。「Yanoh!」は正式名ではありません。正式名は後ほど。

プラットフォーム名

zabuton-couch.png

内容の紹介に入る前にプラットフォーム名をご紹介します。

Zabutton




なぜZabutonなのか?

Couchbaseからカウチ(ソファ)を連想することができると思います。ソファは家人や来客がゆったりとくつろげるようにする物です。カウチの歴史は18世紀にフランスで誕生したものです。つまり西洋風の物なのです。
では和風な家人や来客がゆったりとくつろげるようにする物はなんでしょうか。そうです。座布団です。さらに座布団はどこにでも持ち運びが可能でどこでも使う事ができます。

これらの意味をこめて「Zabuton」という名がつきました。

Couchbase Mobile × IoT

さて、「IoTの分野にCouchbase Mobileは合致するのだろうか」という率直な疑問に答えていきましょう。

  • IoTの分野では多くのデータのやり取りを行います。リアルタイムを求められる状況で1ms以下の応答時間は非常に大事な物になって行きます。
  • 複数デバイスとの同期 IoTの分野ではセンサー等を使い、多くの場所からのデータを取得すると思います。その際のデータの同期処理を独自で実装するには非常にコストがかかります。この同期の処理が非常に簡単に書く事できます。

この2つの要点からCouchbase MobileとIoTのコラボができることを判断しました。

Office × IoT

CouchbaseとIoTをコラボさせるのは分かっていただけたでしょうか。では、次はどの分野とコラボするかです。今日、IoTは様々な分野に進出しています。家や鉄道、農業、学業、オフィス、商業施設など様々です。その中、今回選択したのは オフィス です。
農業じゃないのか!?と思われた人もいるかもしれません。確かに気温や空気流れ等を測定し、温度調整や換気窓の開閉の制御など色々と思い浮かべるかもしれません。ですが、農業とコラボをしようするとかなり多くのコストがかかります。自分でビニールハウスを建てるわけにはいきません。農家さんと協力が得れても、窓の開閉に使うモータの設置にコストがかかります。
それに比べオフィスはどうでしょう。私たちに身近なところにもなります。みなさん、会社の中を見回してみてください。解決したい問題なのに軽視されているものはありませんか。今回考えたユースケースはそのような問題に対してのソリューションです。

Technology

ユースケース紹介の前に「Zabuton」がどのような技術を使って実現しているかを見て行きましょう。

ベースレイヤー

ここはCouchbase社の Couchbase Mobile です。Couchbase Mobileは "Couchbase Server""Sync Gateway""Couchbase Lite" で構成されています。
Sync Gatewayを使う事により、複数のモバイル端末とデータの同期を簡単に行う事ができます。

エンドレイヤー

ここは 人とモノをつなげる 部分をなります。
iBeaconやNFC、各種センサーを使い、身の回りのデータを集めます。

ミドルレイヤー

ベースレイヤーとエンドレイヤーだけではデータを集めて、それを保存しているだけです。この二つのレイヤーだけでは動きません。 なので 収集したデータを中継・表示する ものが必要となります。スマートフォンやブラウザ、RaspberryPi等を使って、それらをやります。

アプリケーション

では、今回作成した「Zabuton」の紹介と「Zabuton」を使ったアプリケーションを紹介していきます。
ここで今回考えたユースケースを簡単に理解してもらうために動画を用意致しました。こちらをどうぞ。

今回考えたユースケースはこちらになります

  • リソース空き状況確認
  • チェックイン/チェックアウト
  • トラッキング

リソース空き状況確認

最初は リソース空き状況確認 ですね。動画でもあった通りトイレの空き状況チェックアプリです。

オフィスビルだとトイレの数はそれほど多くないのですぐに渋滞になることがあります。またオフィスビルだけでは無く、将来的に商業施設への展開を考えました。トイレについてから状況が分かっても仕方ないのです。トイレに着く前に空いているトイレがどこかを知りたいのです。

処理フロー

  1. IR Sensar(赤外線センサー)で人を認識。常にONになっているiBeaconをOFFにします。
  2. RaspberryPiがiBeaconのステータスを監視
  3. iBeaconのステータスを更新。
    iBeaconのステータスを更新する際に今回作成した「Zabuton」の一部、 "Zabuton Server"のAPI を呼びます。この"Zabuton Server"がSync GatewayのREST APIを使いデータを更新します。
  4. スマートフォンとはSync Gatewayにより自動同期され、空き状況を確認することができます






「なぜRaspberryPi上にCouchbase Liteを起動させないのか」と疑問を持たれた方もいるのではないでしょうか。
開発初期の頃はRaspberryPi上にCouchbase Liteを起動させ、Sync Gatewayを使って自動同期を行っていました。ですが、データ同期に10秒以上という非常に時間がかかっていました。この問題を解決するために"Zabuton Server"を開発し、そのAPIを呼ぶようにしました。
では、なぜ同期に時間がかかったのでしょうか。簡単な話でした。Couchbase ServerとSync Gatewayを動かしているサーバのスペック不足でした。サーバのスペックを上げたところ、同期にかかる時間が1秒近くになりました。

チェックイン/チェックアウト

次に2つ目の チェックイン/チェックアウト です。動画ではある場所についた際、アプリを使ってその場所のロックを解除することができるものでした。当初はiBeaconを使ってそれを実現しようと考えていましたが、時間との都合がつかず完成に至りませんでした。
ですが、その人がある場所に来たというのをNFCを利用して実現することができました。

処理フロー

  1. ICカードリーダでカード情報読みます。
  2. カードのIDをKEYにして、その人がどの場所に入った(出た)かを記録します。
    この際も"Zabuton Server"を経由してデータを更新しています。
  3. チェックイン状況はWEBから確認することができます。


これで誰がどこに行ったかは記録できるのですが、どのNFC(RaspberryPi)がどの場所なのかを事前に登録しておく必要が有ります。これは専用のサイトから登録が可能です。





トラッキング

最後に3つ目のトラッキングです。動画ではボスの位置を把握して慌てずに会議室に行くというものでした。ボスの位置を見ながらではなく、時間前に会議室に行くのがベストですよ。
さて、これを実現するにはこれは各所にiBeaconが配置されている前提です。各所に配置されたiBeaconを使ってその人がどこにいるかを記録するものです。

処理フロー

  1. スマートフォンでiBeaconシグナルを受けとる。
  2. 10秒以上連続でシグナルを受け取っている場合にその場所にいると判断する
  3. データの更新


これを利用すればチェックイン/チェックアウトにも適用することは可能です。





今後

「Zabuton」があることでほんの少し皆さんが幸せになるのではないのでしょうか。
ですが、まだ問題はたくさんあります。トラッキングでは個人がどこに行ったのかがまるわかりになってしますので、プライバシーの問題になりかねません。また、各所に配置するiBeaconの情報登録サイトは作成したのですが、セキュリティがありません。全員がすべてのiBeacon情報を更新することができます。
もちろん問題だけではありません。期待もあります。限度はあると思いますが、個人の情報を集めることができますので、その人だけの情報をお届けすることが可能となります。

スマートフォン向けのライブラリは現状Androidしかありません。iOS版は作成中です。また、RaspberryPi上でCouchbase Liteを動作させていませんでしたので、Couchbase Liteを使ったタイプを作成する予定です。
今回作成したライブライはatWareのGithubで公開予定です。公開した際にはこのブログで紹介したいと思います。

開発協力者

名前:Nguyễn Anh Huy(ベトナムインターンシップ生)
ニックネーム:ジャック
好きなこと:食、旅行、スポーツ、音楽
スキル:英語、Android、Go言語

名前:Tue Ngo(ベトナムインターンシップ生)
ニックネーム:けんじ
好きなこと:飲み、スポーツ
スキル:ハードウェア、Python

名前:Priyatam Mudivarti
会社:Facjure, LLC
「Zabuton」の名付け親

名前:北野弘治
役職:福社長
「Zabuton」のアドバイザー

RaspberryPi上でRedisを動かしてみた

RaspberryPi上でRedisを動かしてみた

みなさん、こんにちは。KEYチームの矢納です。

技術ネタ第4弾!!「RaspberryPi上でRedisを動かしてみた」です。
過去記事の目次はこちらに移動しました。

軽量なデータベース

第2弾でCouchbase Liteを使ってのデータ保存を行いました。ですが、Couchbase Liteを使う際にはCouchbase ServerとSync Gatewayを用意する必要が有ります。RaspberryPi単体で動かしたい場合には向いていません。とはいえ、非力なRaspberryPiにPostgreSQLやMySQLを入れるのは少し抵抗があります。軽量なデータベースを探していたら有りました!!Redisです。

セットアップ

では、RaspberryPiにRedisをインストールします。

$ sudo apt-get install redis-server

インストールすれば、Redisは起動しています、確認してみてください。

$ ps aux | grep redis
    redis     3191  0.1  0.5  27356  2360 ?        Ssl  02:11   0:00 /usr/bin/redis-server /etc/redis/redis.conf
$ netstat -aunt | grep 6379
    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN

既に自動起動にもなっています。

sudo chkconfig --list | grep redis-server

起動・停止の仕方も載せておきます。

$ sudo service redis-server stop
$ sudo service redis-server start
$ sudo service redis-server restart

設定

外部設定を許可します。

$ sudo vi /etc/redis/redis.conf
30行目をコメントアウト
# bind 127.0.0.1

パスワードを設定します。

$ sudo vi /etc/redis/redis.conf
166行目にパスワードを記述
requirepass <パスワード>

パスワードを設定する際に注意です。

Redisはとても高速なため、性能の良いマシン上で実行している場合は、毎秒150,000回程度のパスワードチェックを行うことができます。そのため、弱いパスワードであれば簡単に突破されてしまうため、非常に強いパスワードを設定するようにしてください。

Redisの公式ドキュメントに書かれています。

PythonでRedisを触る

PythonでRedisを扱うのにライブラリが用意されています。まずはインストール。

$ sudo pip install redis

実際にコードを書いて行きましょう。

おわりに

今回はRedisの基本の操作方法を行いました。他にも有効期限ありの保存、上書きはしないなど色々とできます。それはご自身でやってみてください。

それでは

Email: yanou at atware.co.jp

RaspberryPiからGoogle Calendar APIを呼んでみた

RaspberryPiからGoogle Calendar APIを呼んでみた

RaspberryPiでGoogle Calendar APIを呼んでみた

みなさん、こんにちは。KEYチームの矢納です。

技術ネタ第3弾!!「RaspberryPiでGoogle Calendar APIを呼んでみた」です。
過去記事の目次はこちらに移動しました。

なぜやろうとしたのか

弊社では会議室の予約にGoogle Caldendarを使用しています。皆さんスケジュール管理をほぼGoogle Calendarを使用しているので、同時に見る事ができて便利です。

さて、弊社には1〜3人しか入れない部屋があります。電話ボックスなどと言われています。もちろんこの部屋も予約可能です。ですが、多くの人が予約をせずにこの部屋を使います。そうすると実際に使おうと思っていた人が使えなくなってしまいます。

ですので、その部屋に入った際にその部屋の予定を表示してあげて、いきなり入った人にお知らせするモノを作ろうと思いました。部屋は小さいのでできればコンパクトに予定を表示したいです。最近、Raspberry Pi公式のディスプレイが発売されたのでそちらに表示させます。

表示の前にGoogle Calendar APIを利用してその部屋の予定を取得する必要が有ります。Raspberry PiでどのようにGoogle APIの呼ぶのかが気になったので、実際にやってみました。

OAuthのやり方

Google APIを使用するには認証をする必要が有ります。パソコンであるのならブラウザでID/PASSを入力するのですが、RaspberryPiには標準ではディスプレイがありません。ではどうすれば良いのでしょうか?

今回はこちらを参考にしました。

OAuthのやり方は右図を見ると分かり易いですね。

  1. Androidですか?iOSか? → いいえ、違います
  2. ブラウザがありますか? → いいえ、ありません

つまり、「Using OAuth 2.0 for Devices」となるのです。


Step1. Client ID と Client secret の作成

ここから、実際にGoogleAPIを呼ぶための準備等を行っていきます。

  1. Google Developers Consoleにアクセス。
  2. Create Project
    • Project Nameは任意に決めてください
  3. 左のメニューから APIs & auth -> credential 選択
  4. Create new Client ID ボタンクリック
    1. Installed Application -> Other -> Create Client ID 選択
    2. 作る際にConsent screenの入力を求められるかもしれません。その際は適当に入力してください。
  5. Client ID と Client secret の出来上がり

Step2. ユーザコードの取得

  1. https://accounts.google.com/o/oauth2/device/code に対してPOSTリクエスト

    • Hedaer: 'Content-Type: application/x-www-form-urlencoded'
    • Parameter: client_id={Step1で取得したClientID}
    • Parameter: scope={こちらを参照} $ curl -d "client_id={Client ID}&scope={scope}" https://accounts.google.com/o/oauth2/device/code

※scopeが複数ある場合は空白でつなげる

レスポンス

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

Step3. デバイスの承認

このステップはご自身のパソコンで行ってください。

  1. Step2でのレスポンス内のverification_urlの内容にブラウザでアクセス
  2. 「Enter the code displayed by your device:」と表示されますので、Step2でのレスポンスのdevice_codeではなく user_code を入力してください。
  3. あとは指示の通りに進んでください

Step4. アクセストークンの取得

  1. https://www.googleapis.com/oauth2/v3/token に対してPOSTリクエスト

    • Header: 'Content-Type: application/x-www-form-urlencoded'
    • Parameter: client_id={Step1で取得したClientID}
    • Parameter: client_secret={Step1で取得したClient secret}
    • Parameter: code={Step2でのレスポンスのdevice_code}
    • Parameter: granttype='http://oauth.net/granttype/device/1.0' $ curl -d "clientid={Client ID}&clientsecret={Client secret}&code={devicecode}&granttype=http://oauth.net/grant_type/device/1.0" https://www.googleapis.com/oauth2/v3/token`

レスポンス

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HELP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMLMDIMxo3JFc8lY8CAR-Q"
}

Step5. Google Calender API呼び出し

アクセストークンをパラメータに設定してリクエストを出せば結果が返ってきます。

例) ある特定の日のイベントを取得する。

https://www.googleapis.com/calendar/v3/calendars/{CalendarID}/events?singleEvents=true&orderBy=startTime&timeMin=2015-07-14T00%3A00%3A00.000Z&timeMax=2015-07-15T00%3A00%3A00.000Z&key={access_token}

Calendar APIに関してはこちらのリファレンスページをご参照下さい

さいごに

これでブラウザを持たないデバイスでのGoogle APIの呼び出しができました。アクセストークンには有効期限が有りますので、期限が切れてしまったらリフレッシュトークンを使って更新を行ってください。

Google Calendar APIで予定は取得できるようになったのですが、まだディスプレイが届いていないので実際のモノは作れていません(ToT)。またモノができましたら記事を書くかもしれませんのでお待ちください。

Email: yanou at atware.co.jp

Mackerel + Raspberry Pi で 職場環境をモニタリング

Mackerel + Raspberry Pi で 職場環境をモニタリング

皆さんMackerelをご存知ですか?

Mackerel とは はてな社が提供しているサーバー監視のサービスで、 サーバーにエージェントと言われるモジュールを設置するだけで、サーバーの状況がブラウザからグラフィカルに確認できるサービスです。

また、監視ルールを設定しておくことにより、サーバーが特定の状態(CPU使用率90%以上など)になった場合アラートを通知したり 無料プランでも一部制限はありますが、サーバー5台まで監視可能など、お手軽、便利、太っ腹なサービスです。

今回は、そんな本来はサーバー監視のサービスであるMackerelを本来の用途以外に使ってみようと思います。

突然ですが、夏ですね

だんだん気候も夏めいて来た今日このごろ、やはり気になるのはオフィスの環境。 健康を害するような環境で仕事をしないためにも、暑さで仕事の効率が落ちないためにも職場環境には気を使いたいところです。

というわけで、今回は職場(でなくてもいいですが)の温度と湿度を計測したいと思います。

温度・湿度を測定する

では、実際に監視システムを構築していきたいと思います。

今回使うもの

  • Raspberry pi 2 Type B
  • 温湿度センサー
    • 今回はAM2320 を使用しました。
  • Raspberry pi と 温度センサー接続用のブレッドボードやジャンパ線
    • 温度センサーとRaspberry Pi をつなぐための線を必要な分用意します。
  • 以前に使用したズゴック(オプション)

ハードウェアの準備

Raspberry Pi と AM2320 を接続する

この実体配線図のようにAM2320をRaspberry Pi と接続します。 AM2320は型番のシルク印刷を表に見た場合、 左から * VDD <-> Pin #2 5V * SDA <-> Pin #3 SDA * GND <-> Pin #20 等 GND * SCL <-> Pin #5 SCL と接続します。

raspi_am2320

ソフトウエアの準備

Raspberry Pi で I2C を使えるようにする

今回使用する AM2320 という温湿度計モジュールは I2C インターフェース経由でデータを取得します。 RaspberryPIは初期状態ではI2Cが有効になっていないため、 こちらのページ を参考にし、I2Cを有効にします。

AM2320からデータを取得するプログラムを用意する

こちらのコード をベースにし、出力をMackerelに対応させたコードがこちらです。

これをRaspberryPI上でコンパイルし、パスの通った場所に配置します。

$ curl -LO https://gist.githubusercontent.com/yenjoji/40d135519a0741d3718b/raw/5c7835651a539f16f3446108e15aa482f6c2111f/am2321.c

$ gcc -lm -o am2321 am2321.c

$ chmod a+x am2321 mv am2321 /usr/local/bin `

Mackerelとの連携

Mackerelに登録してオーガニゼーションを作成する

Mackerelのヘルプにそって、オーガニゼーションを作成します。

maeckrel-agent をインストールする

パッケージをダウンロードし、インストールします。

$ curl -LO http://file.mackerel.io/agent/deb/mackerel-agent_latest.all.deb
$ sudo dpkg -i mackerel-agent_latest.all.deb

ARM 版バイナリに実行ファイルを置き換える

通常ならば、パッケージをインストールすれば完了ですが、 RasperryPiはもともとMackerelが想定しているCPUとアーキテクチャが違うためかそのままではうまく起動しません。 そのため、RaspberryPiのCPUにあったアーキテクチャのMackerelの実行ファイルで上書きします。

$ curl -LO https://github.com/mackerelio/mackerel-agent/releases/download/v0.17.1/mackerel-agent_linux_arm.tar.gz tar xf mackerel-agent_linux_arm.tar.gz

$ sudo mv /usr/local/bin/mackerel-agent /usr/local/bin/mackerel-agent.org sudo mv mackerel-agent_linux_arm/mackerel-agent /usr/local/bin/mackerel-agent

maeckrel-agentの設定

インストールが完了したので、設定をしていきます。

設定ファイルに apiKeyとカスタムメトリクスの設定を追加します。 /etc/mackerel-agent/mackerel-agent.conf に オーガニゼーションの画面に表示されているAPIKEYと 以下のカスタムメトリクスの設定を追加してください。

# Get room status
[plugin.metrics.temperature]
command = "/usr/local/bin/am2321 -m" `

mackerel-agent 起動

以上で設定がひと通り完了しましたので、エージェントを起動します。

$ sudo /etc/init.d/mackerel-agent start

これで、先ほど作成したオーガニゼーションに自動的にホストが追加され、 mackerelのデフォルトの監視項目と、温湿度計のデータが記録されていくようになります。

mackerel-room

アラートの設定

無事に温度と湿度の記録が始まりました。 しかしながらこれだけでは、職場が危機な状況になっても気づくことが出来ません。

ということで、職場の労働環境を監視する尺度として、不快指数を使って職場環境をモニタリングしたいと思います。

実は先程のMackerelカスタムメトリクス取得プログラムには、温度、湿度以外に不快指数も取得できるようにしてあります。 なので、手順通りに設定した場合は、すでにカスタムメトリクス上に不快指数が記録されていると思います。

wikipediaによると、日本人は不快指数が77を超えた辺りから一部の方々が不快を覚え始め、80を超えるとみんなが不快感を感じるそうなので、 この値を超えた場合に通知が来るように設定したいと思います。

  • Macerel管理画面から Monitor メニューをクリックし、監視ルールを追加ボタンをクリックします。 mackerel-monitor_001
  • ポップアップしたウィンドウに監視条件を入力し作成ボタンをクリックします。 今回は不快指数(custom.room.1.discomfortindex)を選択し、77でWarning、80でCriticalとなるように設定します。

    mackerel-monitor_002

  • 作成した関し条件が一覧に表示されていれば成功です。 これで不快指数がしきい値を超えるた際にメール通知がされるようになりました。また、チャットなどメール以外の通知方法も用意されています。(私はHipChatにも通知しています。) momongar-discomfortindex

ズゴックと連携する

以前作成した、ズゴックXFDですが、 チームのみんながちゃんとテストが通ることを確認してからソースコードをPushするため、ほぼ活躍する機会がありません。 このままだと ただ職場にガンプラをおいている人になってしまう ので、 ズゴックの存在意義を上げるべく温度計を連携させたいと思います。

温度計の実装

  • ドリルで大まかな穴を開けた後、ニッパーで穴をつなぎ

    DSC_0093

  • カッターで凹凸を整えます

    DSC_0094

  • センサーを開けた穴にはめ込み、配線を足経由で踵から外部に引き出せば完成です。

    DSC_0101

  • 組み立てるとこんなかんじになります。

    DSC_0108

  • 後ろ

    DSC_0105

結果

晴れてズゴックに温度計が付き、職場の状況をモニタリングすることが可能になりました。

これで、自分の居室の不快指数を計測し放題です。 計測したところで、特に快適になったりはしないのは残念ですが、 計測データを元に現場のリーダーに職場環境のカイゼンをお願いする材料くらいにはなるはずです。

ただ、残念ながら、温度計を付けてもズゴック見た目に変化がないので、 相変わらず傍から見るとガンダム好きな人にしか見えないという点は今後の課題とします。

みなさんもMackerelと様々なセンサーを組み合わせて遊んでみてはいかがでしょうか?

参考URL

Raspberry Pi の I2C を有効化する方法 (2015年版)

Raspberry Pi で湿度センサ AM2321 を使う

Mackerelについて

不快指数

Raspberry Pi で XFD

Raspberry Pi で XFD

突然ですがXFDというものをご存知でしょうか?

XFDとは

オブジェクト倶楽部 http://objectclub.jp/community/xfd/ によると

プロジェクトステータスやメトリクスは、目に見えにくい。見えないからこそ難しい。
そんな悩みを解決してくれるのが、XFD(eXtreme Feedback Device)です。
目に見えて、楽しい、ユニークな装置。目に付いて、絶対見落とさないような装置を指します。安上がりならなおよろし。

とのことです。

例えばCIによるビルドエラーに連動したパトランプ http://gitgear.com/xfd/ など、 そのままだと気づきにくいイベントを気づきやすくするデバイスを指すようです。

今回すること

今回はそんなXFDをRaspberry Piを利用して作成してみたいと思います。 なお、今回はAtlassian の CIサーバー Atlassian Bamboo を対象としますが、ビルド結果取得の部分だけ替えればJenkinsなどにも対応可能です。

用意するもの

  • Raspberry Pi x 1
    • 今買うなら Raspberry Pi 2 Type B がお得だと思われます。
  • 赤色LED x 1
    • 色はお好みで。 今回はビルド失敗のエラー感を出すため 3mm径の赤色高輝度LEDとしました。
  • 330Ω抵抗 x 1
    • LEDが壊れないよう基本に則って抵抗を使用します。
  • ブレットボード x 1
  • 配線用ジャンパワイヤ 適量
    • その他配線用の機材を適宜用意します。

くみたて

上記のパーツを組み込むとこのようになります。

DSC_0078

一応実体配線図も作ってみました。

raspi-XFD

プログラム

例えば以下のようにREST APIでBambooのビルド結果を取得します。
なお、今回はBamboo上に複数ブランチが登録されていることを前提としているため、ブランチがないと動きません。

結果

これで、Bambooの指定したブランチがビルドエラーになった際には、 接続されたLEDが点灯するようになりました。

DSC_0079

しかし、ちょっとこれでは寂しいので、ひと手間加えたいと思います。

最近はだいぶJOJOや、仮面ライダーに押されているとはいえ、 エンジニアといえばガンダムです。

という訳で、ちょっとガンダム要素を足してみました。

ドリルでモノアイ部分に穴を開けてLEDを装着し、

DSC_0097

なるべく目立たないように配線をします。

DSC_0098

最近のプラモはよく出来ていて、関節可動部分が多いので、 昔のプラモのように脚部の中がスカスカでなかったのは誤算でした。

今回はちょっと妥協してこのくらいにしておきますが、機会があればもう少し綺麗に配線をしたいと思います。

動作例

さて、再度どうなるか試してみます。

万が一Bambooでのビルドが失敗した場合には

bamboo_build_failed

光ります。

DSC_0084

これでだいぶ危機感が増しました。

ジムがやられる前になんとしてもビルドエラーを修正しなければなりません!!

まとめ

Raspberry Piが発売されたことによって、ネットワークを利用した電子工作が簡単にできるようになりました。

電子工作初心者でも簡単に作れるオリジナルのXFDでプロジェクトを活性化して行きましょう!

第 9 回 はんだ部 活動レポート

第 9 回 はんだ部 活動レポート

みなさん、こんにちは。KEYチームの矢納です。今日も張り切ってはんだ部レポートを書いていきたいと思います。

Raspberry Piを使っているのに、技術ネタが今まで出てきてませんね(^^;;

と、いうことで今回は簡単にWeb Server?作成の手順をあげていきたいと思います!

今回やりたいことはこんな感じです。

さて、今回は大好きなJavaではなく、Pythonでやっていきたいと思います。なぜPythonなのかというと、せっかくRaspberry Piの推奨?言語なので、使ってみようと思った訳です。

では、最初にFlaskというフレームワークをインストールします。Flaskはpipを使います。

$ sudo apt-get install python-pip
$ sudo pip install flask

では、次にPythonでコードをガリガリと書いていきます。

from flask import Flask, render_template
import RPi.GPIO as GPIO
import datetime

OUTPUT_PIN = 4

app = Flask(__name__)

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(OUTPUT_PIN, GPIO.OUT)


@app.route("/")
def show_top_page():
    now = datetime.datetime.now()
    time_string = now.strftime("%Y-%m-%d %H:%M")
    template_data = {
        'title': 'Sample Top Page',
        'time': time_string
    }
    return render_template('top.html', **template_data)


@app.route("/light/on")
def light_on():
    GPIO.output(OUTPUT_PIN, GPIO.HIGH)
    return '{"result":"ok"}'


@app.route("/light/off")
def light_off():
    GPIO.output(OUTPUT_PIN, GPIO.LOW)
    return '{"result":"ok"}'


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80, debug=True)

とても簡単です。@app.route("/")でアクセスを受けて、処理を行います。今回 / でアクセスされた場合はHTMLを返すようにしてあります。HTMLを返すのにはFlaskのrender_tempalteを使用します。これは* templates *のフォルダにあるHTMLを返します。

では、top.htmlを見てましょう。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
<h1>{{ time }}</h1>
<hr>

<p id="msg"></p>

<button id="on" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-arrow-up"></span> On</button>
<br>
<button id="off" class="btn btn-success btn-lg"><span class="glyphicon glyphicon-arrow-down"></span> Off</button>

<script type="text/javascript" src="{{ url_for('static', filename='js/jquery-1.11.2.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/top.js') }}"></script>

</body>
</html>

{{ }}で書かれている部分がpythonで記述されていたtemplate_dataに対応します。また、Javascriptやcssも読み込みたいと思います。そのときはurl_for()を使います。第一引数はstatic(多分これだといけない気がします)、第二引数はその配下のファイルをしてします。ディレクトリ階層は下図の通りです。

あとはこれらのファイルを転送して sudo python top.py を実行するだけです。実行後ブラウザでRaspberry Piにアクセスしてみてください。画面上のボタンの「ON」」「OFF」でLEDの点灯・消灯が可能です。

意外と簡単に作成することができました。本当はBootstrapを使おうとしたのですが、よくわかりませんでしたので、今回はスキップです。軽く調べてみたら、Flask Bootstrapというのがあるらしいですね。まぁそれはおいおいということで(^^;)

今回はここまで。

Email:yanou at atware.co.jp

第 7 回 はんだ部 活動レポート

第 7 回 はんだ部 活動レポート

みなさん、こんにちは。KEYチームの矢納です。今日は1月のはんだ部の活動をレポートしていきたいと思います。

今まで何をしてたの?

最初に今まで何をしていたかをご紹介しましょう。と、いってもたいしたことは何もしておりません。電子回路の作成になれてもらうための活動。RaspberryPiにファンを接続して、そのファンを制御プログラムの作成。ホコリセンサーをRaspberryPiに接続し、掃除中の社内のホコリ状況を測ってみたりなどです。ちなみに、ホコリ状況ですが、掃除中はそんなにセンサー値は大きくありませんが、終わってから2時間後ぐらいに大きな値が出ました。推測ですが、舞い上がったホコリが落ちて来たのでしょう。

今まではこのような活動をしてました。とりあえず電子回路になれる、RaspberryPiの使い方を知るがメインの活動でした。

今は何をしているの?

では、今は何をしているのか?これから何をしていくのか?

これからは今まで作成したものを連携して一つのシステム?を作ろうかと思います。どんなものかというと、センサーで環境データを読み取り、そのデータにより、エアコン等を自動制御するものです。下図はイメージです。

これを作るにあたって、エアコン等を制御する部分を作成していきます。エアコン等はリモコンがありますので、そのリモコンの赤外線を一度受信し、同じ赤外線を送信するものを作成します。サンプル等もあったので、すぐにできると思ったら、全然すんなりと作業がすすみませんでした(ToT)

作業風景です

作業風景です

今後はこのシステム?を作っていきます。毎月第4土曜日に活動をしています。”こんな物をつくりたい!“、“私もやってみたい”という方は是非参加してみてください。もちろん、電子回路がわからない人や、ただ単にRaspberryPiを触りたい人でもOKです。興味のある方はご連絡ください。

Email: yanou at aware.co.jp

余談

Raspberry Pi 2 が発売されましたね