アイ〇ンのプロトコルの話


[ねとけん Advent Calendar 2015](http://www.adventar.org/calendars/886) の 24日の記事です．一応ガジェットネタです．

2021/10/02 古い記事ですが見てくれる人がいるようなので少し追記しました．

# プロローグ(※フィクションです)

　コンビニ帰り，マンションのエントランスで家の鍵を持っていないことに気付きます．鍵は家の中＝部屋の鍵は開いている，ということなのですが，マンションのエントランスにあるこいつが帰宅を阻みます．

![aiphone01.jpg](https://qiita-image-store.s3.amazonaws.com/0/58515/4b2ce43d-d1ea-aaf3-343e-1b0380d4f030.jpeg)

　こいつです．拡大します．

![aiphone02.jpg](https://qiita-image-store.s3.amazonaws.com/0/58515/9e439e72-7c5e-7089-6899-5ea1d48895cf.jpeg)

　アイ○ンです．色々なところで見かけます．

　こんなとき，フィクションの世界なら，仲間の凄腕のハッカーが怪しいカードをスリットに挿しこみ，接続された端末に謎の文字列がしばらく流れたあと，めでたくドアが開くのですが，残念ながら都合よくそんなハッカーの連れがいないし，そもそもカードを挿すスリットもありません．また，多くの場合，管理会社や不動産会社が使う番号が設定されていたりするのですが，不正アクセス禁止法とか色々面倒な世の中なのでおとなしく退散します．

　そして周りの目を気にしながらフェンスによじ登り非常階段から２階に上がりエレベータに乗る日々を送っています．

# 宣伝

　[第7開発セクション](https://sites.google.com/site/dai7sec/) から出る「ななかInside PRESS vol.8」に書いた内容の再利用です．**2015/12/31(木) 3日目 東4ホール ム-38ab** です．よろしくお願いします．ここでは端折っている部分ももう少し詳しく書いてあります．逆にこちらにしか書いてない部分もあるので合わせて読んで頂ければと思います．

# 変調方式を確認

　エントランスで怪しいことやっていると迷惑(というか通報されそう)になるので部屋にある室内の端末の挙動から観察します．

![IMAG0045.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/3fb53d02-0004-7f89-4b94-f4dcefd8f2a0.jpeg)![IMAG0051.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/cb81aa70-efa0-8e06-5a48-4bc379753ad2.jpeg)

　この機種の場合は「通話/終話」ボタンを手前に引くとネジが一本だけあるので，それを回せば簡単に開きました．あとは，パネルの裏に配線の説明が書いてあるので「データ」と書いてある２本の線があるので探しだして流れている信号を観察してみます．

![IMAG0052.jpg](https://qiita-image-store.s3.amazonaws.com/0/58515/16b5b0d9-c5c7-2f34-f640-60a220ef262d.jpeg)
　画像の画面では振幅が見えていますが実際には周波数で変調されています．

## データ

　ごく普通のシリアル通信を周波数変調したものです．

- 差動信号．±5V?
- 変調周波数 50～70kHz
- 1200bps, スタートビット0, データ8ビット, 偶数パリティ, LSBから送信

## 映像/音声

- NTSCのようなもの
- そのまま再生できそうな信号が流れてますが確認はしてないです

# プロトコル

[メッセージタイプ], [部屋番号], [データ...],[チェックサム] という共通のフォーマットでデータを送受信しています．

```
+--------------+----------+--------------------------+--------------+
| Message Type | Room No. |  Data                    | Check Sum    |
|  1B          |  1B      |   0...NB                 |  1B          |
+--------------+----------+--------------------------+--------------+
```

### Message Type

メッセージ先頭の8ビット．

| Type | 方向             |  説明                        |
| ---- | ---------------- | --------------------------- |
| 40h  | エントランス→部屋 |  リクエスト/レスポンス        |
| c0h  | エントランス←部屋 |  リクエスト/レスポンス        |
| 50h  | エントランス→部屋 |  ACK (Dataは無し)           |
| d0h  | エントランス←部屋 |  ACK (Dataは無し)           |
| 60h  | エントランス→部屋 |  NACK (Dataは無し)           |
| e0h  | エントランス←部屋 |  NACK (Dataは無し)           |

おそらくMSB1ビットは部屋の端末から送られたときに1になります．

### Room No.

　下位4ビットが階数，上位4ビットにその階の番号が入っていました．階ごとの部屋数など構成によって違うと思います．

### Data

　0 バイト以上のデータです．

| Data           | 送信元       |  説明                        |
| -------------- | ------------ | ---------------------------- |
| 68             | エントランス | PING(?)                      |
| 69 21          | 室内端末     | PONG(?)                      |
| 87 03 XX XX XX | 室内端末     | 不明．端末ON時等             |
| 81 00          | 室内端末     | 不明                         |
| 1C             | 室内端末     | 端末OFF時                    |
| 05 C0 | エントランス | 呼び出し                     |
| 45 8F | 室内端末     | 通話開始                     |
| 45 8C | 室内端末     | 解錠．**ドアが開きます**     |
| 45 0F | 室内端末     | 終話                         |
| 00    | エントランス | 切断．終話orタイムアウト     |

　まだ良くわからないものも多いです．宅配ボックスもつながってるみたいですが，テストしにくいので未調査です．

メモ: データ長は１バイト目の下位2ビットと相関がありそうです．

### Check Sum

チェックサムを含めたメッセージ全体のバイトごとの和をとると，下位8ビットが0になります．

# 受信回路

　オシロで眺めるのは限界があるので，適当なマイコンでデータを取り込みます．アナログ回路は素人ですが，基盤を眺めつつ学校で習った気がするRLC回路の知識でなんとかします．必要な信号を取り出せたら，あとはコンパレータで比較してソフトウェアで処理します．デジタルな世界まで来れば安心して色々できます．

![circuit.png](https://qiita-image-store.s3.amazonaws.com/0/58515/2fde04bf-b6b3-42f7-c354-3b484d0786e7.png)

　細かい抵抗やパスコンは省いてしまっていますが雰囲気は伝わると思います．~~送信側は作ってないです．変な信号送るの危なそうなので，端末の回路をそのまま使っています．~~

## 送信もする

　外付けのコンパレータを外してマイコン内部のコンパレータを使うようにしただけです．同じ回路で送受信を行えます．

![circuit_avr_only.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58515/3a9daf53-9239-a565-84c8-9d2158355f00.png)

　室内端末の電源が入った状態で同一部屋番号のコマンドを送信すると，エラー扱いになるようで切断メッセージが送信されて処理がキャンセルされてしまうので少し注意が必要です．切断メッセージを見つけたらチェックサムなどを壊して不正なメッセージに書き換え，NACKが返ってきた後の再送待ちの間に後続のメッセージを送信するのが良さそうです．このあたりは一般的なパケット通信を途中で乗っ取る必要があるときは似たようなことをすると思います．

# ファイル置き場

https://github.com/binzume/door-keeper/blob/master/AiphoneCtrl

コードやら回路図やらを置いてあります．

# 注意

- 自己の責任の範囲内でやってください
- 賃貸の場合は壊さないように注意．．．可能なら触らないのが無難です
- 他の部屋のデータも同じ線に流れてるようなのでそのへんはノータッチにしましょう
- 火災報知器とかも万が一の時は生命に関わるので触らないように

# 最後に

　21世紀に物理キー持ち歩いてるのに違和感あるのと，インターホンとドアの鍵くらいはスマホから履歴見たり操作できるのが普通だと思っていたのですが中々世の中は変わらないですね．というわけで[5年前に着手して放置してたネタ](http://www.binzume.net/diary/2010-09-14:A1)を再開するついでにまとめました．家の鍵などもスマホから操作できるようにしているのでそっちもいつか書くかもしれません．あと，ななかInside PRESS vol.8を買って読んでいただけると嬉しいです．