LoginSignup
1
0

More than 1 year has passed since last update.

ESPHomeでエントランスのオートロックを自動開錠

Last updated at Posted at 2022-02-26

要件

  • 自宅(賃貸)のオートロックを物理鍵なしで開けたい
  • 不在時は訪問者の画像をスマホへ通知したい
  • 賃貸なので加工はできない
  • インターホンはアイホン株式会社のVHK-RMA-S

検討内容

  • インターホン(VHK-RMA-S)をハックしてデータ取得、開錠コマンド送信
    • 解析してる人はいる模様 (アイ〇ンのプロトコルの話)
    • 火災報知機なども連動しているので、壊したり入居者に迷惑をかけるリスクが高いため却下
  • 備え付けのインターホンに、公式のネットワークアダプタを取り付ける

採用した方法

  • 自作
  • センサとサーボで物理ボタンを押す
    • 室内のインターホンに明るさセンサをつけて帰宅/来客を検知
    • サーボモータで開錠スイッチを押す。または通知を送信
    • デメリット:インターホンが使いづらい
  • 肉厚の両面テープで固定してるので、すぐ原状復帰可能
  • コストは5千円以下
  • 不在時の訪問者は、画面に表示されてるのをIPカメラで撮影
    • デメリット:画質いまいち

主な部品例

部品 型番 備考
マイコン ESP-WROOM-02 またはシリアル付きのもの
ピッチ変換基盤 ESP-WROOM-02ピッチ変換用基板
光センサ BH1750
サーボ FEETECH FS90
三端子レギュレータ TA48033S
電源 5V 1A 5Wあれば十分
ケース お好みのもの
WROOM-02のライタ お好みのもの マイコンがシリアル付きなら不要

配線

ESPHomeの設定

esphome:
  name: lobbydoor-opener
  platform: ESP8266
  board: esp_wroom_02

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api_password

ota:
  password: !secret ota_password


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: lobbydoor-outdoor
    password: !secret wifi_ap_password
captive_portal:



#############################
esphome:
  name: lobbydoor-opener
  platform: ESP8266
  board: esp_wroom_02

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api_password

ota:
  password: !secret ota_password


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: lobbydoor-outdoor
    password: !secret wifi_ap_password
captive_portal:



#############################
globals:
   - id: auto_open
     type: bool
     restore_value: no
     initial_value: 'false'
   - id: not_opened
     type: bool
     restore_value: no
     initial_value: 'false'
   - id: opening
     type: bool
     restore_value: no
     initial_value: 'false'
     
i2c:
  sda: GPIO4
  scl: GPIO5
  scan: True
  
sensor:
  - platform: bh1750
    name: "Interphone Illuminance"
    address: 0x23
    update_interval: 1s
    internal: true
    on_value_range:
      - above: 8 #8lux以上 
        then:
          - if:
              condition:
                 lambda: 'return id(auto_open) == true;'
              then:
                #flg on
                - globals.set:
                    id: opening
                    value: 'true'
                # open!
                #Click 応答
                - servo.write:
                    id: servo1
                    level: -40%
                - delay: 500ms
                - servo.write:
                    id: servo1
                    level: 0%
                #Click 開錠
                - servo.write:
                    id: servo2
                    level: -50%
                - delay: 500ms
                - servo.write:
                    id: servo2
                    level: 0%
                - servo.detach: servo2
                #Click 閉じる
                - servo.write:
                    id: servo1
                    level: -40%
                - delay: 500ms
                - servo.write:
                    id: servo1
                    level: 0%
                - servo.detach: servo1
                # auto off
                - globals.set:
                    id: auto_open
                    value: 'false'
                # flg off
                - globals.set:
                    id: opening
                    value: 'false'
              else:
                #flg on
                - globals.set:
                    id: not_opened
                    value: 'true'
                - delay: 500ms
                # flg off
                - globals.set:
                    id: not_opened
                    value: 'false'
                
              
binary_sensor:
  - platform: template
    name: "LobbyDoor not open"
    id: lobbydoor_not_open
    lambda: 'return id(not_opened);'
    
  - platform: template
    name: "LobbyDoor opening"
    id: lobbydoor_opening
    lambda: 'return id(opening);'
    
servo:
  - id: servo1
    output: pwm_output1
    auto_detach_time: 10s
  - id: servo2
    output: pwm_output2
    auto_detach_time: 10s

output:
  - platform: esp8266_pwm
    id: pwm_output1
    pin: GPIO12
    frequency: 50 Hz
  - platform: esp8266_pwm
    id: pwm_output2
    pin: GPIO13
    frequency: 50 Hz

switch:
  - platform: template
    name: Lobbydoor Auto Open
    id: lobbydoor_auto_open
    internal: false
    lambda: 'return id(auto_open);'
    turn_on_action:
      - globals.set:
          id: auto_open
          value: 'true'
    turn_off_action:
      - globals.set:
          id: auto_open
          value: 'false'

使い方

  • Home Assistantからスイッチをオンにして、ロビーから自分の部屋を呼び出す
    • entity: switch.lobbydoor_auto_open
  • 玄関の鍵開けたり⇒センサの変化をトリガーにオートメーションを設定
    • entity: binary_sensor.lobbydoor_opening
  • 不在通知など⇒センサの変化をトリガーにオートメーションを設定
    • entity: binary_sensor.lobbydoor_not_open
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0