Sympapaのスマートホーム日記

スマートなんとかはスマートじゃない方法でつくられている

Home Assistant: 電気錠付玄関ドアの制御(3) ~ESP32とJEM-A端子の接続回路を考える~

Sympapaです。
家を建てる計画中ですが最近は電子錠(スマートロック)を装備した玄関ドアが結構普及しているようです。
それらの電子錠には一般的にHA端子(JEM-A端子)が付いていて、そこにIP/JEM-A変換アダプタを取り付けるとEchonet Liteに対応させることが出来ます。
住設メーカー的には「Echonet Lite経由で各社HEMSに接続してIoT化してくださいね。」ってことのようですね。


私はHome Assistantから電気錠を制御したいと思っていますが、IP/JEM-A変換アダプタだけでも数万円するみたいですし、そもそもEchonet Lite経由で電気錠をハックしている例がググっても見つかりません。
これまで調べた結果、HA端子(JEM-A端子)は2値で制御、モニタする単純な仕組みのため、HA端子(JEM-A端子)を直接ハックした方が簡単そうで、その事例はググればある程度の数がヒットすることが判りました
そしてHome Assistantと連携するのであれば、Home AssistantのESP Homeアドオンを使いESP32のGPIOから制御、モニタするのが簡単だろうという結論に至りました。
今回は、ESP32とHA端子(JEM-A端子)を接続する回路について調べ、まだ玄関ドアの実機はありませんがESP32側の半分の回路を作って実験してみたというおはなしです。

■HA端子(JEM-A端子)とESP32の接続に関する調査

おさらいですが、こちらのページの図を引用させていただくと、HA端子(JEM-A端子)はコントロール用の線が2本とモニタ用の線が2本の計4本、そして2値という簡単仕様で、コントローラとはフォトカプラを介して接続しなさいということになっています。

mtrx.jp


更に調べていたところ、HA端子(JEM-A端子)とテレコントローラを接続するIFU(インターフェースユニット)というのが販売されていることがわかりました。
PanasonicのWTF47214WKがそのひとつで、その基本回路構成は下図のようになっているそうです。
フォトカプラと抵抗とダイオードで構成されているだけのようですがネット通販での勢価格は4,000円~5,000円します。こりゃ自作しないとですね(汗


フォトカプラーの仕様が書かれていないので抵抗の大きさなどは考えなくてはいけませんが、基本はこれと同じ回路を作っていくことに決めました。

■HA端子(JEM-A端子)の仕様調査

さてしかし、抵抗の大きさを決めようにもHA端子(JEM-A端子)側の仕様は規格が有償であるせいかネットで調べても明確な答えが見つかりません。
LIXILの電気錠コントローラの取説には以下のように書かれていて、LIXILの電気錠コントローラの場合はM1-M2間が「15V/6mA」であることはわかりました。
他メーカーや他の機器であってもM1-M2間の電圧は似たようなもんでしょう。
問題はC1-C2間が「0.2~0.3秒の無電圧a接点入力しろ」ってことですが、C1-C2間の実際の電圧がわかりません。

●モニタ信号
・施錠時 M1端子がHigh(M1-M2端子間に15V/6mA)
・解錠時 M1端子がLow(M1-M2端子間に0V)
●制御信号
・C1-C2端子間に0.2~0.3秒の無電圧a接点入力(短絡)
で電気錠が反転動作
※反転動作とは施錠中は解錠、解錠中は施錠する動きのことです。


実際にHA端子(JEM-A端子)をハックしている事例をみると、こちらではフォトカプラにTLP785を使ってC1-フォトカプラ間の抵抗は75Ωが使用されていますが、こちらではフォトカプラにTLP521を使ってC1-フォトカプラ間の抵抗は1000Ωが使われています。
TLP785とTLP521は細かい仕様の差はあれど推奨動作条件は同じなのに75Ωでも1000Ωでも動作しているってことなので、「まぁ大体でいいんだな」ということにしときます(笑)

■フォトカプラ入力側の抵抗選定

まずフォトカプラですが、ド田舎のマルツでも売っていたTLP785を2個買ってきました。
toshiba.semicon-storage.com
合わせてダイオード:1N4148やら抵抗を色々買って来ましたが400円でお釣りが来ました。

フォトカプラ入力側の抵抗の大きさの求め方はこちらのページに書かれていました。


フォトカプラーの入力電流(IF)は?
(1)入力側電源電圧 (Vcc)、(2)電流制限抵抗 (RIN)、(3)LEDの順方向電圧 (VF) によって決定されます。
仕様例から、順方向電圧 (VF)、入力電流 (IF)を決定し、電流制限抵抗を決定します。
RIN = (VCC-VF)/IF = (5V-1.3V)/10mA = 370 Ω


TLP785のTLP785のデータシートにはVF=最大1.3Vと書かれています。

従ってフォトカプラへの入力側抵抗は以下のように算出できます。たぶん。
【ESP32からの制御側】
ESP32のGPIO出力は3.3V/20mA or 40mAのようです。
元から推奨電源電圧Vcc:5V~24Vより低いので「抵抗入れると動かんのちゃう?」とも思いましたが、抵抗を求める計算式からすると抵抗が必要そうです。抵抗で10mAに規制する前提だと下記のようになります。
RIN = (VCC-VF)/IF = (3.3V-1.3V)/10mA = 200 Ω となりますが安全をみて300Ωとしておきましょう。

【HA端子(JEM-A端子)からのモニタ出力側】
LIXILの電子錠コントローラはM1-M2端子間は15V/6mAのようです。
仮にIF=5mAにするとしてVF=1.1Vくらいです。
RIN = (VCC-VF)/IF = (15V-1.1V)/5mA = 2780 Ω となるようですが、果たして1.1V/5mAで動くのか??

■フォトカプラ出力側の抵抗選定

フォトカプラからの出力側の抵抗算出は私にはかなり難解です。
こちらのページでは、まずIFとCTR(変換効率)から、フォトトランジスター出力電流を計算しろってことになってます。
CTR(変換効率)は、入力側の電流に対する出力側の電流ってことのようですが、電気的に絶縁されているのになんでそんなものが存在するのか私にはチンプンカンプンです。


TLP785のCTR(変換効率)は200%くらいでそのバラツキはGBランクで100~600%みたいです。
このカーブから IC=20 mA(@IF=10 mA、VCE=5V、Ta=25℃) となります。



次に上のICの値から抵抗RLを計算しろってことになってます。


出力トランジスターのIC-VCE特性からRLを決定します。信号伝送として使用するには、負荷側に接続するデバイスの“L”レベ ルを十分に満足する必要があります。ここでは、VCE=0.3 Vを目標値とします。 IF=10 mA の時、RL=1 kΩ ではVCE=0.9 V 程度となり不十分です。RL=2 kΩ ではVCE= 0.2 V程度になっており、目標値を達成していますのでRL=2 kΩ を選定します。実設計では負荷側のインピーダンスも考慮する必要があります。


うーん、要するにフォトカプラは入力側がオフでも出力側は結構お漏らししてるってことですか?(汗)

まぁESP32の場合は電圧が3.3Vなので、1kΩの抵抗を入れれば電流が3.3mAになります。
この時点でコレクタ-エミッタ電圧は0.2Vを下回って来るので1kΩもあれば問題なさそうですね。合ってますか?(笑)

HA端子(JEM-A端子)の方はC1-C2間の電圧が不明なので、こっちは実機で調べるしかなさそうです。

■そんなワケで実験してみる

とりあえず回路全体はこんな感じでいいんじゃないかと思います。


今回はHA端子(JEM-A端子)側の実機が無くESP32側からフォトカプラまでの間しか実験できないので、左側が制御、右側がモニタという感じで作ることにしました。


そんでHome AssistantにはESP Homeアドオンがあります。それを使うと私のような初心者も拍子抜けするほど簡単にESP32を動かすことが出来ます。
ESP HomeアドオンのESP32の設定(.yaml)は以下のようにしました。
上半分は制御側を想定したものでGPIO32から出力します。HA端子(JEM-A端子)のC1-C2トリガーは200ms~300msで受け付けるようなので250msの出力としています。下半分はモニター側を想定したものです。

switch:
  - platform: gpio
    pin: 32
    id: relay
    name: "entrance_lock_toggle"
    icon: "mdi:gate"
    on_turn_on:
    - delay: 250ms
    - switch.turn_off: relay

binary_sensor:
  - platform: gpio
    pin:
      number: 33
      mode: INPUT_PULLUP
      inverted: true
    name: 'entrance_lock_status'

Home Assistantの方で"entrance_lock_toggle"をオンにするとGPIO32の出力が0.25秒間オンになってその後オフになります。
それをGPIO33が入力することで”binary_sensor.entrance_lock_status”もオフから0.25秒間オンになりその後オフになります。

■まとめ

大体これでHA端子(JEM-A端子)をハックして玄関ドアの電子錠を制御/モニタする目途は付いたと思います。
残る課題はHA端子(JEM-A端子)のモニター(M1-M2端子)の仕様が判らない点ですね。
考えてみると一応HA端子(JEM-A端子)はエアコンにも付いているので気合いさえあれば電圧くらいは調べられるはずですがエアコンは高いところにあるし面倒いなぁ。まぁ気が向けばやってみますか。
Home AssistantのESP Homeアドオンを使ったESP32の制御が私のようなド素人にも簡単お手軽だったので、他にも色々やってみたいと思います。

それでは。