maaash.jp

what I create

Amazon Alexaにエアコンをつけてもらう

Nature Remoは、機能的にはIRKitの正統な進化形と考えていただいてよいと思います。

と書き先日告知したNature RemoのKickstarterが成功して終了しました!!
応援していただいている方、ありがとうございます。

昨日から、引き続きMakuakeでクラウドファンディングを開始していますので、
Kickstarterを逃した方はぜひ!!

今日は、Kickstarterサイトでも提供すると約束していて、個人的にもすごく熱いと思っている、Alexa連携をIRKitで試してみました。
Nature Remoで試すとサンプルコードまだ出せないのでね。

Alexaは様々な理由から

  • Amazon Echoは国内で販売していない Amazon Tapはあるようだなあ…
  • Amazon.comアカウントが必要
  • Amazon.co.jpのPrimeアカウントが使えない><
  • 日本語対応していない

日本では流行ってる話をほとんど聞きませんが、こないだ渡米した時に感動して買ってきてしまいました。

感動ポイントはとにかく音声認識がすごいこと。

遠くからでも、音楽再生するなど雑音環境下でも、ほとんど認識失敗にしない感覚があります。
Siriだと、認識失敗したら「まだSiriにはできないか(落胆)」と感じるところ、
Alexaだと、「あれ、自分の英語の発音が悪かったかな」ってなる。
音声認識って使えるじゃん

Alexaの認識対象の語彙を限定するルールベースのアプローチがしばらくは優位なんじゃないか


さて、Alexaに何か音声でしゃべりかけて外部サービス連携するためには、Alexa Skills Kit (ASK)を使います。

Alexa Skills Kitの中にはCustom SkillsとSmart Home Skillsがあり
まずは簡単なCustom Skillsで作ります。

手順は

  1. Skillをつくる

  2. Invocation Nameを設定

    上のビデオの中で “Ask {IRKit} to turn on the air conditioner” と話していた {IRKit} の部分
    これはSmart Home Skillsでは操作対象が制限される分必要なくなるようだが、Custom Skillsには必要

  3. Intent Schemaの設定

    音声で操作したい内容を定義する

     {
       "intents": [
         {
           "intent": "ControlAC",
           "slots": [
             {
               "name": "Control",
               "type": "LIST_OF_CONTROLS"
             }
           ]
         },
         {
           "intent": "AMAZON.HelpIntent"
         },
         {
           "intent": "AMAZON.StopIntent"
         },
         {
           "intent": "AMAZON.CancelIntent"
         }
       ]
     }
    

    ControlACというのがエアコンの操作で、LIST_OF_CONTROLSというCustom Slot Typeで今回のアプリケーション固有の単語を設定する。
    今回は on | off | start | stop のみ。

  4. Sample Utterancesの設定

    音声認識する語彙を設定

     ControlAC turn {Control} my air conditioner
     ControlAC turn {Control} my AC
     ControlAC turn {Control} the air conditioner
     ControlAC turn {Control} the AC
     ControlAC turn {Control}
     ControlAC turn {Control}
     ControlAC {Control} my air conditioner
     ControlAC {Control} the air conditioner
    

    この文字列をしゃべると、{Control}に入ってたon | off | start | stopをLambda関数に渡してくれます。

  5. AWS Lambda関数を作成

    TriggerにAlexa Skills Kitを設定
    LambdaのNodejsのコードは最後に。
    IRKitにエアコンコントロールしてもらうのにIRKitのInternet HTTP APIを使うので必要なdeviceidclientkeyを取得します。

  6. これでiPhoneのAlexaアプリを開き Skills -> Your Skills と開くと

    Untitled

    IRKit Skillが見つかれば準備OK

  7. Alexaにしゃべりかける

    “Alexa, ask IRKit to turn on the air conditioner”

  8. 他の人にも使ってもらうためには審査に提出するが今回はしない

ということで、開発者であればわりと簡単に、
自分のIRKitをAlexaを通して音声で操ってエアコンをコントロールする、
ところまでいけますが、
開発者でない方でも(または開発者でも面倒であれば)、音声エージェントに話しかけてスマートホームしたければ、
ぜひ早期割引期間中にNature Remoをゲットしてください!!!!


Lambdaのコードはこんな。

USBRH Linux用ドライバをラズパイにインストールする

USBRH Linux用ドライバ をラズパイ上でビルドしインストールするまでのyak shavingの記録。

Makefile にあるように、ビルドしようとするラズパイのカーネルのソースが必要。

github.com/notro/rpi-source/wiki を使用すると、よしなにソースを /home/pi/linux-a7b329ab34dcea81650f5b5c9c77208907dde23c とかにダウンロードし、/lib/modules/4.4.14+/build からそこへのシンボリックリンクを作るなどしてくれる。

上記URLにあるようにgccのバージョンをあわせたり(Raspbian Wheezy上でgcc4.8.3以上を入れる)、ncurses-develを入れたりする。

Raspi上で素のviが全然使えず諦めてsudo apt-get install emacsした。

Nature RemoのKickstarterを開始しました

IRKitを販売し始めたのは 2014年1月15日 なので、2年と4ヶ月ちょいになります。
あっという間ですね。 その間製造したのは…
100 + 500 + 1000 + 1000 + 2000 + 2000 + 3200 = 9800
約1万台。なんで最後3400にしなかったのか、悔やみきれません。

そして昨日の夜、新作であるNature RemoのKickstarterを開始しました!

Nature Remoは、機能的にはIRKitの正統な進化形と考えていただいてよいと思います。
IRKitの欠点として一番多くTwitterで見かけたりお問い合わせいただいたのは

  • 青いLEDが眩しすぎる

という点で、それを修正するのと(笑)、

  • 38kHz周辺のキャリア周波数のみ対応 -> より広いキャリア周波数の範囲に対応する
  • 赤外線が飛ぶ方向が前方2方向のみ -> 広い範囲に飛ぶように

といった基本的な機能の強化。

  • ArduinoIDE, 自作のアップデート用PCアプリを使ったファームウェアアップデート -> Over-The-Airアップデートできる
  • いろんなセンサがついてる
  • 静電タッチセンサがついてる

さらに

  • ACアダプタが付属する

など(笑)、一般的な電気製品の様相を呈するようになっています。
自分は意外とこのタッチセンサが好評になるんじゃないかと想像しています・・・

電気回路やファームウェア全部がオープンソースになることは考えにくいですが、
メジャーなものを使っているので、おそらく開けれb…(略

IRKitのAPIを使ってハックしていた方は、そのままNature Remoに移行できればいいなと考えています。
が、、、まだどこまでできるか決まってはいません。
Remo用のAPIを用意する、という非互換の修正を入れる良いチャンスにそうしないではいられないので、うまくバランスを取っていきたいです。

長期的な構想も楽しみです。
一台で家中スマート化、米Natureが小型IoT機器、外からスマホで家電操作、電力の需給調整も

まとめると、
KickstarterキャンペーンのEARLY BIRDの価格を考えると
今ならIRKitより高機能なものがよりお安く手に入るかも?

もしよろしければ応援お願いします!
Nature RemoのKickstarter

メイカーズのエコシステム出版記念イベント@3331

メイカーズのエコシステム出版記念イベント@3331 に呼んでいただいて、IRKitの製造の話をしてきました。

メーヴェ作っている八谷さんを始めおもしろい登壇者陣。

7月末にやるという北海道のテストフライトは見に行きたいなあ。
自分のロールモデルである。
そのプレゼンに出ていた動画はこれ

「電波法の認証を、FCC認証とおってれば省略していいんじゃないか」
っていうアイディアが最後質疑の中であったけど、
日本が今後衰退していく中で置いてけぼりにならないためにもこういう工夫はしてほしいなあ

自分の発表資料はこちら
メイカーズのエコシステム出版記念イベント@3331 IRKitの話

次期製品は今月中盤以降、Kickstarterに出す予定なので、乞うご期待!

それでは メイカーズのエコシステム 新しいモノづくりがとまらない。 について。

“輪郭がはっきりしていない。” メイカームーブメントの輪郭、全容をつかめる一冊。
最も印象に残っているのは (書籍内の引用の引用だが…)

メイカームーブメントによって、世界は良い方向に変わっていくと考えている。 中略…
重要なのは、メイカー全員がMakeすることによって、「ある変化」を体験することだ。
いまの世の中には、コントロールできないものが多過ぎる。Makeのカルチャーは「コントロールできるものを自分たちの手に取り戻そう」という考え方だ。政治や経済は自分たちでコントロールできない。だが、ものを作ることは自分でコントロールできる。
この「自分は何かをコントロールできる」という想いをいただくことを、メイカーはとても大事にしている。
例えば、椅子を自作したとする。もちろん既成品より出来は劣る。しかし、自分で作った椅子には愛着が湧き、さらに「既成品の椅子が、どういう接着剤やネジを使って作られているか?」といった新しい視点が生まれる。それまでの人生では、作りの良い椅子を見ても特に何も感じなかったかもしれないが、実際に手を動かして関わってみることで、かつて無縁だったものに親しみが生まれ、まるで仲間が作ったもののように思えるようになる。
こうした経験を積むことで、作り手に対する感謝や尊敬の念を持てるようになるのだろう。

「そうなんだよ!」自分はこういった変化を促進しようとものづくりをしている。
人の言葉でそれを語られてくすぐったいような嬉しい気持ちだ。
自分で作ってみるからこそ、「これは自分には作れないなあ」とため息をついて、作れる人に対して尊敬の念が生じるのは気持ちがいい。
何気なく見かけた電気製品を見て、「おお、こだわって作ってるなあ」と笑みを浮かべるのも気持ちがいい。

メイカームーブメントってなんなんだろって思ってる人は手にとって見ると良いと思います。

IRKitをiftttから使う時はMaker Channelを使いましょう

Maker Channel[ifttt] についてはこちら

詳しくは
ifttt の maker channel から irkit の api に request を投げる

IFTTTのmaker channelを使ってIRKitを操作する
をご覧ください。

過去、まだMaker Channelが無い頃、
IFTTTとIRKitを連携する という記事を書き、
IFTTT/IRKit Integration をつくりましたが、
今後、IFTTTとIRKitの連携はMaker Channelを使ってください。

ifttt.getirkit.com は Deprecated とさせていただきます。
今から半年後以降に終了しますので、お使いいただいている方はMaker Channelへの移行をお願いします。

IRKit自体は今後も変わりなくお使いいただけます。

IRKitの脆弱性とファームウェアアップデートのお願い

IRKitはオープンソースであり公開されているAPIがあることから、多くの方が自分の好みの方法でリモコン信号を送れるようハックを行ってきました。

任意のきっかけで自宅のコンピューターからcurlコマンドを実行してリモコン信号を送ったり、自分でデザインしたウェブサイトからリモコン信号を送れるようにしたり。

ところが、ウェブサイトからリモコン信号を送ることのできる機能は、悪用されると、IRKitの使用者が意図しないタイミングでリモコン信号を送られる可能性があることがわかりました。 IRKitの使用者が、IRKitを接続しているネットワークと同一のネットワークに接続しているコンピューターを使い、ブラウザで攻撃者が用意したウェブサイトを開き、IRKitのIPアドレスを攻撃者が推測できる場合に、IRKitの使用者のインタラクション無しに、JavaScriptを利用してリモコン信号を送ることができます。
具体的には例えば、IRKitを家のWi-Fiアクセスポイントに接続するようセットアップ済みの状態で、IRKitの接続しているものと同じアクセスポイントに接続したコンピューターやスマートフォンを使い、Twitterやメールで送られてきたURLをブラウザで開くと、リモコン信号を送られる可能性があります。

この問題の発見者は自分です。この記事執筆時点までにこの問題を使用した攻撃は確認、報告されていません。

この問題の対象となるIRKitは、2014年1月〜2015年8月頃に販売したIRKitです。2015年8月中旬以降販売したIRKitにはこの問題を修正済みのファームウェア(IRKit内部のソフトウェア)を使用しています。IRKitのバージョンを以下のように確認し、バージョン番号が v3.0.0.gxxxxx 未満、つまり v1.x.x.gxxxx または v2.x.x.gxxxx と表示されている場合には、ファームウェアのアップデートを行ってください。

IRKit-firmware-version

上記バージョンが表示されていない場合には、IRKitXXXXと表示されているところをタップするとバージョン情報を再取得します。また、ご自身でIRKitのファームウェアを変更しアップデートを行っている場合にはバージョンが表示されない可能性があります。

IRKitのファームウェアのアップデートは、これまでArduino IDEを使用した方法をご案内していましたが、Mac, Windowsのコンピューターで使えるIRKitのファームウェアアップデート用アプリケーション IRKit Updaterを用意しましたので、お使いください。

IRKit Updaterの動作環境は、以下のとおりです。
- Mac OSX 10.8以降
- Windows 7以降

以下にIRKit Updaterの使用方法を説明します。

  1. 最新のIRKit Updaterをダウンロード
  2. ダウンロードしたzipファイルを展開
  3. IRKitをUSBケーブルを使ってコンピューターに接続
  4. Windowsをお使いの場合には、IRKitのドライバをインストール (Macをお使いの場合は必要ありません)
    1. 管理者としてログインします
    2. Windows 7, 8 の場合
      1. スタート メニューから、コントロール パネル、システムとセキュリティ、の順にクリックし、システム の下の デバイス マネージャー をクリックします
      2. ほかのデバイス の下に IRKit が表れるので、IRKit を右クリック
      3. ドライバーソフトウェアの更新、コンピューターを参照してドライバー ソフトウェアを検索します、 を順にクリック
      4. 次の場所でドライバー ソフトウェアを検索します の下にある参照ボタンをクリックし、IRKit Updaterを解凍したフォルダを選択
      5. サブフォルダーも検索する、にチェックをつけ、次へ をクリック
      6. ドライバー ソフトウェアの発行元を検証できません、と表示されたら このドライバー ソフトウェアをインストールします をクリック
    3. Windows 8.1 の場合
      1. スタート メニューから、PC設定、保守と管理、回復、を順にクリックし、PCの起動をカスタマイズする の下にある 今すぐ再起動する をクリックします
      2. 再起動後、トラブルシューティング、詳細オプション、スタートアップ設定、再起動、を順にクリックします
      3. スタートアップ設定 が表示されたら、7 を押す
      4. デスクトップの右下に テストモード と表示されます
      5. スタート メニューから、PC設定、コントロール パネル、システムとセキュリティ、システム、デバイス マネージャーを順にクリックします
      6. ほかのデバイス の下に IRKit が表れるので、IRKit を右クリック
      7. ドライバーソフトウェアの更新、コンピューターを参照してドライバー ソフトウェアを検索します、 を順にクリック
      8. 次の場所でドライバー ソフトウェアを検索します の下にある参照ボタンをクリックし、IRKit Updaterを解凍したフォルダを選択
      9. サブフォルダーも検索する、にチェックをつけ、次へ をクリック
      10. ドライバー ソフトウェアの発行元を検証できません、と表示されたら このドライバー ソフトウェアをインストールします をクリック
  5. IRKit Updater を実行
    Macの場合は “IRKit Updater.app” をダブルクリック、Windowsの場合は “IRKit Updater.exe” をダブルクリックしてください。
    • Windows 8.1 の場合、WindowsによってPCが保護されました、というダイアログが表れる場合があります。
      この場合には、このダイアログ上の、詳細情報、実行、を順にクリックして実行してください。
  6. 以下のように表示されるので Update をクリック
    スクリーンショット 2015-09-02 15.54.33
  7. Log areaに進行状況が詳しく表示されます。その後最後に以下のように表示されれば成功 スクリーンショット 2015-09-02 16.01.47
  8. うまくいかなければ、画面の指示にしたがい再度IRKitを抜き差ししてやり直し、それでもうまくいかなければ Log area 右上の Copy をクリックして、以下のサポートメール support@getirkit.com 宛に、本文に貼り付けて送ってください。

コンピューターをお持ちでなくアップデートができなければ、iPhone/Android向けのIRKit公式アプリ IRKit Simple Remote 内の設定画面の ご意見・ご要望・ご質問 からメールを送ってください。

このファームウェアの修正は、IRKitの Device HTTP API (IRKit本体のHTTPサーバが提供するHTTP API) に対する非互換の修正です。Device HTTP APIを使用したアプリやスクリプトを作成し使用していた場合には、ファームウェアのアップデート後にそれが動作しなくなります。

IRKitに対応している以下のアプリは、アップデート後のファームウェアに対応するよう修正を完了しています。最新版にアップデートをお願いします。

  • 公式iPhoneアプリ IRKit Simple Remote
  • 公式Androidアプリ IRKit Simple Remote
  • iPhoneアプリ NKリモコン
  • iPhoneアプリ Geo IR (申請中)
  • iPhoneアプリ ジオコマンド (申請中)

それ以外のアプリやご自身で作成されたスクリプトで、IRKit Device HTTP API を利用している場合には、以下のように修正を行ってください。

  • ブラウザ以外から IRKit Device HTTP API を利用する場合、HTTPリクエストには X-Requested-With: curl のようにヘッダをつけてください。
  • ブラウザから IRKit Device HTTP API を利用する場合、一部を除いて利用ができなくなります。
    POST /messages のAPIのみ、赤外線信号を表すJSONに以下のように、IRKitがWi-Fiアクセスポイントになる際のパスワードを追加し、X-Requested-With ヘッダを付けないで送信してください。
    {"format":"raw","freq":38,"data":[18031,8755,...省略...4400,1190],"password":"XXXXXXXXXX"}

    既に学習済みの赤外線信号を表すJSONをなんらかの形で予め記録している場合には、その送信のみできます。赤外線信号の学習は、IRKit Internet HTTP APIを使用すれば、(一手間かかりますが)ブラウザ上でも可能ですので、変更をお願いいたします。

IRKit Device HTTP APIを利用したコードをgithubに公開されている場合には、今後、私がレポジトリを発見次第、上記変更を行った pull request を送る可能性があります。

お手数おかけし申し訳ありませんが、よろしくお願いいたします。

iOS x BLE Core Bluetooth プログラミング

堤さん、松村さんによる iOS x BLE CoreBluetoothプログラミング本 をおすすめしよう。

まず前書き

「スマホアプリと外部デバイスと連携させるのは楽しい」

そうだよね〜。
IRKitも元はといえばCoreBluetoothというのが出てきて、MFi無しで手持ちのiPhoneと通信できるハードウェアがつくれるの!?何それ熱い!から入ったので親近感が沸く。
(IRKitはその後Wi-Fiを使うように変更している)

BLEを使いiPhoneと通信するハードウェアを開発しようとする時、
まず身につけるべきは、問題が起きた時の切り分け能力だと思う。

iPhone側はアプリから見るとCoreBluetoothという抽象化したレイヤなので、
アプリ開発者は「scanFor…してるのに見つからないよ?」
デバイス側では「advertiseしてるよ?」
となった時にすぐパケットロガーを出せると話が早い。

この辺もちゃんと10章,10-3,10-4で書いてあってすばらしい。
実戦をこなしている著者陣ならでは。
自分はTIのCC2540のドングルを買ってWireSharkで眺めていたけれど、こんな方法もあったんだなあ

次に、11章「ハマりどころ逆引き辞典」

これはずるいよ。

最後に、3章「BLEを理解する」

ふわっとiOSアプリの作り方を解説するだけではなく、BLEについて詳しい3章があるのが心強い。
ハードウェアを作るならば、Bluetooth4の仕様を読むことになるだろう。
だが Core_V4.0.pdf は2302ページもあってしんどい。

そんなときにまずこの3章を日本語で読んで挑めるとかなりスムーズになるだろう。 自分も仕様はところどころピックアップして読んだだけなので、3章はいざという時のためにあたためておきたい。

BLEデバイスつくりたい。

というあなたもぜひ
iOS x BLE CoreBluetoothプログラミング本

IRKitの公式Androidアプリが出たよ!!

IRKitシンプルリモコン Android

IRKitの公式Androidアプリが出たよ!!
IRKitシンプルリモコン [play.google.com]

古巣の同僚、なおやんがつくってくれました!

“IRKitのAndroidクライアントがようやく完成しました。” となおやんが言うので
初めてのAndroid機となるNexus6をSimフリーで買って遊んでいますが、
IRKitシンプルリモコン Android版めっちゃいいです。

IRKitなどWi-Fiを使ったデバイスを家のWi-Fiアクセスポイントにつなぐ場合、
どうやって家のWi-FiのSSID,パスワードをデバイスに渡すか、という問題があります)。

購入直後、パッケージ開封の興奮の最中にめんどくさいセットアップ作業があるので、
いくらデバイスの提供する機能が画期的でも、セットアップがくそだと第一印象としてくそになってしまいます。

IRKitもそこには気をつけてつくっていて、
iPhoneアプリではセットアップがスムーズな体験になるよう気をつけていますが、
それでもセットアップの中で一度iOSの”設定”アプリを開く必要があったり、面倒です。

Android版はそこがすばらしい。
Androidは、接続するWi-Fiアクセスポイントをアプリ内で切り替えることができるらしい、とは聞いていたものの、こんなに気持ちがいい体験になるとは!

AndroidユーザーでIRKitを使っている方はぜひ!
IRKitシンプルリモコン [play.google.com]

IFTTTとIRKitを連携する

というつぶやきをきっかけに、
IFTTT/IRKit Integration というページをつくった。

なんで今までやらなかったんだろう…

さて、IFTTTは… 省略

こんなことや
time-tv
Turn on TV at 08:00 AM on Mon Tue Wed Thu Fri.

こんなことが
twitter-aircon
Turn on Air Conditioner when Bot Tweets.
できそうですね!

WordPressのXMLRPCのふりをするサーバ側コードはこんなです。

Enjoy!