コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home AssistantでDIY Smart Home】勝手口に戸締りセンサーをつける

【Home Assistant(Hass.io)】
換気窓付き勝手口のドアにセンサーを設置

「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。

 「さあ出勤!」という時に壁のタブレットで戸締りを確認してから家を出るのですが、実は1階のドア・窓で戸締りセンサーが付いていない場所が2か所あるのです。ひとつは勝手口のドア、もう一つはお風呂場の窓です。うむ、何とかしよう、第一弾です。

 お風呂場の窓は何故かと言うと簡単で「水回り」だからです。防水とか面倒くさそう、というだけで敬遠していました。で、もう一つの勝手口ですがこちらは「複雑」で敬遠してました。よし、まずは勝手口の方、がんばるぞ。

この記事の前提条件
Home Assistant 2024.3.1
HassOS 12.1
Server Raspberry Pi 4(4GB)

 上記バージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

1. はじめに


 うちの勝手口はこんな感じです。右側がドアの開閉用のレバーとその上下に鍵のノブ x2です。左側のノブが窓の開閉の鍵です。窓の上下は真ん中の窓枠を掴んで上下させます。
 で、窓の開閉ですが、閉まった状態で左の鍵ノブを回してロックすると当然窓は開きません。ですが、下の様に少しあけたところで、左の鍵ノブを回してロックすると、それ以上は上下どちらにも動かず固定されます。

 換気モードですね。

さて、まあ、この細長いドア・窓に、下記の4つのセンサーを設置する必要あります。

  1. ドア:開閉ロックのセンサー
  2. ドア:開閉検知のセンサー
  3. 上下窓:開閉ロックのセンサー
  4. 上下窓:開閉のセンサー

しかも、ドア開閉ロック用の鍵ノブは「2個」!
でもって、上下窓開閉ロックは「2つの位置」で固定可能!
ああん、面倒。でも頑張ろう。

2. 準備

2.1. 部材

(Xiaomi) Aqara Door & Window Sensor (MCCGQ14LM)
微妙に新型です。外形は同じ。既にzigbee2mqtt対応も終わっているので以前のセンサーと同様に使えます。基盤は変わっていますが、センサーを外に出せる端子/ランドは(場所は変わっていますが)あります。

強力両面テープ(白、屋内用)
これもキャンドゥのモノですが、他の百均にもありそう。ベースが不織布ですがそれなりに耐久力があります。主に屋内用ですがリードスイッチなどを固定するのには十分。
幅10mm、厚さ約0.14mm
価格:キャンドゥで110円でした。
超強力マグネット 6mm
左上がダイソーで買った在庫(今は別のかな)で今回使ったもの。キャンドゥ(下のふたつ)など他の百均でも手に入ります。直径約6mmのは、だいたい8個セット。
違いは厚みかな。ダイソーのは3mm、キャンドゥのは2mm。3Dモデルは都度調節必要です。
価格:ダイソーで110円でした。
リードスイッチSP3-1A16-3A
リードスイッチの弱点である壊れやすいガラス管の周りをプラスチックで覆っているので取り扱い性に優れています。壊れにくくて良いです。
価格:秋月電子通商で5本300円でしたが今見たら380円に。
配線ワイヤー
黒色のシリコンリボンケーブル 4ピン 30ゲージ3m。本当は2線で十分なのですが、そんなのはあまり見つかりません。半分に裂いて使います。線の細さは0.8mmでフニャフニャです。
価格:Amazonで800円弱。
XHコネクタ(2ピン)と圧着ペンチ
圧着ペンチ(IWISS SN-2549)はお安いのにラチェット式で使いやすいのでお薦めです。今見たら2,880円。
このXHコネクタ(2ピン)のセット(オスコネクタ、オスピン、メスコネクタ、メスピンのセット)はaliexpressで買いましたが、今ではAmazonで2ピン以外にも色々入っているXHコネクタセットで700円ぐらいなので、今買うならそれで良いかな。

2.2. センサーの改造

 左側が今回使った「新型」のMCCGQ14LMで、右側が今まで使っていたMCCGQ11LMです。*1

 センサーを外付けするための端子/ランドの位置が、旧型はリードスイッチの近くで、新型はリードスイッチの反対側になりました。違いはそのぐらい。その端子/ランドに2本のワイヤをはんだ付けして引き出してコネクタをつけます。
 あとから基板を取り出せるように、蓋にワイヤを通す切り込みを入れます。

 蓋は結構柔らかいのでドライバーセットに入っているようなキリでぐりぐりやって穴を開けカッターで切ればこんな感じの切り込みはつくれます。

※おまけ(新旧比較)

得られる情報 MCCGQ14LM MCCGQ11LM
contact v v
device_temperature v
power_outage_count v
trigger_count v
battery v v
battery_low v
voltage v v

 ううむ、廉価版ですかね。必須情報に絞った感じです。
 ただ、そもそもdevice_temperatureは「何を測っているかわからない」とコミュニティでも突っ込まれるほど、まあ、何となく温度の上下がわかるぐらいでしたし。power_outage_countに至っては何がしたいのかさっぱり、というものでしたので、なくても良いか(trigger_countは、知らないうちに生えている。これは使えるかも…)。

3. センサー設置

3.1. ドア開閉ロックのセンサー設置

 まずは難物その1から取り掛かりましょう。
 ドアの鍵は、ダブルロック(?)になっていて、ノブが2つあります。

 二つとも回さないと鍵は開きません。この鍵の判定を一つのドア・窓センサー(Aqara MCCGQ14LM)で検知するためには、どんな外付けリードセンサーにすれば良いかを考えましょう。
まずは「鍵がロックされているということはどういうことか?」ですね。

【A案:悲観的ロック判定】

上のノブ 下のノブ 鍵の施解錠判定
 ⇒  施錠
 ⇒  施錠でない
 ⇒  施錠でない
 ⇒  解錠

【B案:楽観的ロック判定】

上のノブ 下のノブ 鍵の施解錠判定
 ⇒  施錠
 ⇒  施錠
 ⇒  施錠
 ⇒  解錠

 どちらか一方のノブがロック位置(閉=水平)にあれば、扉はロック(施錠)されてるというB案でも十分かと思います。物理的には鍵がかかっていますしね。でも、じゃあ、なぜそもそもダブルロックか、という点を考えると、A案のような両方しっかりと鍵をかけてはじめて「ロック!」と言えないかと。今回はA案を採用しましょう。
 では「ロックノブの動作をどうやってリードセンサーとマグネットで検知するか」が次の課題です。
 ちょうどいい感じに横に窓枠があるのでそこにリードスイッチ(下の写真の灰色の長方形)を置いて、ノブにマグネットをつけてあげることで、開閉がわかるはず。(この写真は動作プロトタイプです)
 
このノブは水平になると「閉」、垂直になると「開」です。ノブが閉の位置では、マグネットがリードスイッチに近づくのでリードスイッチは「ON」になります。2つのノブの所にあるリードスイッチの値の組み合わせでA案を実現する配線方法を次に検討します。

3.1.2. 直列つなぎ

ノブのリードスイッチの状況を先ほどのA案の表に適用すると下記のようになります。

上のノブ 下のノブ 鍵の施解錠判定

ON

ON
 ⇒  施錠
ON

ON

OFF
 ⇒  施錠でない
Not ON

OFF

ON
 ⇒  施錠でない
Not ON

OFF

OFF
 ⇒  解錠
OFF

 ON=真, OFF=偽とすると、これは論理学で言うところのAND(論理積)ですね。ANDは下図の通り、スイッチ(リードスイッチ)を直列につなげば実現できます。

 3Dプリンタを駆使してとりあえず下記の様な部品を作りました。
 右側が上側に使う予定のリードスイッチホルダーとドアノブにマグネットをつけるホルダーです。マグネットをホルダーの穴にぐいっと押し込んで固定します。
 左側が下側で使う予定のリードスイッチホルダーとドアノブにマグネットをつけるホルダーです。途中にリードスイッチを挟む形にするので両側にワイヤーが出るようになっています。
(真ん中の3つのグレーの長方形はケーブルがぷらぷらしないように抑える部品です。あってもなくても良し)

いちおう部品のイメージをつけてもらうため、Thingiverseにも上げておきました。
(ドアごとにサイズが違うので直接は使えないかと…)
www.thingiverse.com

  • ドアノブのマグネットホルダー:KitchenDoor_MagnetHolder_LockKnob.stl
  • ドア・リードスイッチA(上側):KitchenDoor_ReedSwitchHolder_A.stl
  • ドア・リードスイッチB(下側):KitchenDoor_ReedSwitchHolder_B.stl
  • ケーブルおさえ:KitchenDoorWindow_CableCover.stl

で、ノブにマグネットのついたリングを差し込み(右側)、窓枠(ドア?)に両面テープでリードスイッチのパネルを両面テープで貼り付けます(左側)。

(この写真は下側のノブです)

 上下のノブにリードスイッチとマグネット取り付けて(適当にワイヤーがぷらぷらしないようにケーブルおさえを貼り付けて)、最後にセンサーを設置してコネクタを接続すれば出来上がり。


3.1.3. (おまけ)並列つなぎ

 もしB表のような「楽観的ロック判定」を使いたいときは、どうすれば良いでしょうか?
 同じようにロックノブの状態をB表に適用してみます。

上のノブ 下のノブ 鍵の施解錠判定

ON

ON
 ⇒  施錠
ON

ON

OFF
 ⇒  施錠
ON

OFF

ON
 ⇒  施錠
ON

OFF

OFF
 ⇒  解錠
OFF

ON=真, OFF=偽とすると、これは論理学で言うところのOR(論理和)ですね。ORは下図の通り、スイッチ(リードスイッチ)を並列につなげば実現できます。

 ちなみにセンサーユニットに内蔵されているリードスイッチと外付けセンサーはそもそも並列につながっていますから、うまい具合にマグネットを使うと、外付けリードスイッチ一つで、2か所の並列検知が出来ますね。ま、理論的には、ですが。

3.2. ドア開閉検知のセンサー設置

 次は息抜きに簡単なドアの開閉検知を。
 扉の上にセンサーと扉の枠の方にマグネットを設置するだけ。

 はい、できあがり!

3.3. 上下窓開閉ロックのセンサー設置

 さて次は難物その2。これ、ダブルロック以上に面倒…
 左の丸で囲ったところが、窓のロックノブです。右側の窓枠をぐいっと上下に動かすことで窓の開閉が出来ます。

 窓部分は、下図のように上下中央に寄るように開いてゆきますが、ロックがかかる位置が2か所あります。まずは当然ですが全閉(下図左)。で、少し開いている状態(下図中央)もロックが掛かって上下それ以上動きません。

 論理表いきますか…。

ロックノブ 窓の位置 窓の施解錠判定

ON
全閉
ON
 ⇒  施錠
ON

ON
換気ロック
ON
 ⇒  施錠
ON

ON
それ以外
not ON
 ⇒  解錠
OFF

OFF
どこでも
not ON
 ⇒  解錠
OFF

 これはあれですね、AND(論理積)ですね。
 3Dプリンタを駆使してとりあえず下記の様な部品を作りました*2
 右側が窓開閉のロックの為のノブに付けるリードスイッチAのホルダーです。左側の部品が、窓のロック位置を検出するリードスイッチBのホルダーです。
(真ん中の2つのグレーの長方形はケーブルがぷらぷらしないように抑える部品です)

Kitchen Door Window - Magnet and ReedSwtich by makyBa - Thingiverseで部品の形のイメージを掴むことができますよ)

  • 窓ロックのノブのマグネットホルダー:KitchenWindow_MagnetHolder_LockKnob.stl
  • 窓リードスイッチA(上側):KitchenWindow_ReedSwitchHolder_A.stl
  • 窓リードスイッチB(下側):KitchenWindow_ReedSwitchHolder_B.stl
  • ケーブルおさえ:KitchenDoorWindow_CableCover.stl

ノブにマグネットを取付け、その下にリードスイッチAを貼り付けます。

 下の方にリードスイッチBを貼り付けます。まず扉が閉まっている位置でリードスイッチBが反応するように付属のマグネット(A)を貼り付けます。次に換気モードの位置でリードスイッチBが反応するようにそこにも付属のマグネット(B)を貼り付けます。で、ぷらぷらしているセンサーユニットもいい感じに貼り付けて出来上がり。

 仕上がりは、こんな感じになりますね。

3.4. 上下窓開閉のセンサー設置

 最後は、簡単ですね。
 窓枠開閉ロックのセンサー設置で、マグネットを2つ付けました。窓枠が全閉の時、下のマグネットは特に何もしていません。そこにセンサーを設置すれば窓の開閉を確認できます。

 はい、できあがり!  

3.5. 仕上がり

 極力目立たないように、と心がけましたが、どうだか、今一歩ですね。

 センサーユニットの白が目立つ?カバー必要?

4. Home Assistantの間取り図に追記

 勝手口の扉に付けたセンサーの状況を間取り図で確認できるようにします。
 まず下のような画像を準備しておきます。

備考
ドア Inkscapeで作成
inkscapeで作成
マテリアルアイコンから

 間取り図に使っているピクチャーエレメントカードの「キッチン」パートに、勝手口ドアの鍵と開閉、勝手口窓の鍵と開閉を下記の様に記述します。

(前略)
  - type: image
    title: ■■■「キッチン」設定ココから■■■
  - type: state-icon
    title: キッチンモーション
    tap_action: none
    entity: binary_sensor.xiaomi_motion_occupancy
    style:
      top: 37%
      left: 78%
      transform: translate(-50%, -50%) scale(1.6, 1.6)
  - type: image
    title: ドア(キッチン)
    entity: binary_sensor.xiaomi_door_window_A_contact
    image: /local/floorplan/doors/Door_1F-KichenDoor_close.png
    tap_action:
      action: more-info
    state_image:
      'on': /local/floorplan/doors/Door_1F-KichenDoor_open.png
    style:
      top: 36.8%
      left: 89.5%
      width: 8%
  - type: image
    title: ドアロック(キッチン)
    entity: binary_sensor.xiaomi_door_window_B_contact
    tap_action:
      action: more-info
    state_image:
      'on': /local/floorplan/icons/icon_lock-open.png
      'off': /local/floorplan/icons/icon_lock.png
    style:
      top: 37%
      left: 89.5%
      width: 4%
  - type: image
    title: ドア窓(キッチン)
    entity: binary_sensor.xiaomi_door_window_C_contact
    image: /local/floorplan/windows/Window_1F-KitchenDoor_close.png
    tap_action:
      action: more-info
    state_image:
      'on': /local/floorplan/windows/Window_1F-KitchenDoor_open.png
    style:
      top: 36.8%
      left: 86.5%
      width: 2.5%
  - type: image
    title: ドア窓ロック(キッチン)
    entity: binary_sensor.xiaomi_door_window_D_contact
    tap_action:
      action: more-info
    state_image:
      'on': /local/floorplan/icons/icon_lock-open.png
      'off': /local/floorplan/icons/icon_lock.png
    style:
      top: 37%
      left: 84.3%
      width: 4%
(後略)

 左は勝手口のドアの鍵を開けて開いている状況、右は勝手口の窓の鍵を開けて開いている状況です。

5. おわりに

 ふう、やはり面倒だった…。最初からセンサーがついているドアとか窓とか売りに出されないものか…。YKKとかが、業界標準とか作って頑張ってくれないかな。
 次は風呂!!
maky-ba.hatenablog.com

*1:どうやらこれら2つの間に「MCCGQ12LM」なる型番のものもあるらしい。形は一緒ですが、zigbee2mqttで取れる情報が微妙に違う…。

*2:上もそうですが、これも部品自体は小さいので印刷時間が1時間もかからず、トライアンドエラーを繰り返すのが簡単です。大体5回ぐらいは試作を繰り返しています。