Möchtest du deine Hausautomation auf das nächste Level bringen? 🔒 In diesem Tutorial zeige ich dir, wie du ein intelligentes Schloss für deinen Schrank, deine Schublade oder jeden anderen Ort, den du sichern möchtest, baust – und das alles steuerbar mit deiner Apple Watch oder deinem iPhone! 📱🔓

Damit kannst Du Deine Schränke vor Zugriff durch Deine Kinder schützen oder auch für jegliche andere Drittpartei schwerer zugänglich machen.

Dieses Projekt integriert sich nahtlos in Home Assistant mithilfe von ESPHome und ist zudem mit Apple HomeKit verbunden, um eine benutzerfreundliche und reibungslose Steuerung zu gewährleisten. Egal, ob du ein Smart-Home-Enthusiast bist oder einfach nur ein praktisches und unterhaltsames DIY-Projekt suchst, diese Anleitung bietet alles, was du brauchst, um loszulegen.

Tauchen wir ein in die Welt der intelligenten Sicherheit und Bequemlichkeit – direkt an deinen Fingerspitzen!

Hier findest du das komplette Tutorial in Form eines YouTube-Videos (Hinweis: Video nur auf Englisch):

Benötigte Komponenten

Du benötigst folgende Komponenten:

  • ESP32-Entwicklungsboard, z.B. ein D1 Mini ESP32
  • PN532 NFC-Tag-Lesegerät
  • Elektrisches Schloss, z.B. ein 12V elektrisches Schrankschloss
  • N-Kanal-MOSFET, um das elektrische Schloss ein- und auszuschalten
  • Eventuell einen Step-Down-Wandler, um die Spannung zwischen dem Schloss (in meinem Fall 12V) und dem ESP32-Entwicklungsboard (3,3V / 5V) umzuwandeln
  • Stromversorgung (in meinem Fall ein 12V-Netzteil)
  • Einige Kabel und Lötwerkzeuge

Schaltplan

Das folgende Schaubild illustriert die Verschaltung der Komponenten:

Auf der linken Seite siehst du das ESP32-Entwicklungsboard – hier ein D1 Mini ESP32. Dies ist das Herzstück der Architektur und steuert, was passiert.

Auf der rechten Seite des Schaltplans ist eine 12V-DC-Stromquelle dargestellt. Wir benötigen 12V für das elektrische Schloss. Die grüne Komponente ist ein DC-DC-Step-Down-Wandler, der die 12V auf 5V herunterwandelt, um den D1 Mini mit Strom zu versorgen.

Oben findest du das 12V-elektrische Schloss. Es hat zwei Kabelpaare: Eines dient zum Auslesen des Schlosszustands (blau/weiß), das andere zur Steuerung des Schlosszustands (rot/schwarz). Das 12V-Schloss wird durch den N-Kanal-MOSFET gesteuert, den du in der Mitte des Bildes sehen kannst. Der Gate-Pin des MOSFETs steuert, ob Strom durch ihn fließen kann, und somit, ob das Schloss mit Strom versorgt wird oder nicht. Das Gate ist mit GPIO25 verbunden.

Die rote Komponente unten rechts ist der PN532 NFC-Reader, der mit 5V Strom und GND verbunden werden muss. Außerdem wird er über SPI mit dem D1 Mini verbunden, also benutze einfach die GPIOs wie im Diagramm gezeigt – SCK geht an GPIO18, MSO an GPIO19, MOSI an GPIO23 und SS an GPIO26. Für den PN532 NFC-Reader ist es wichtig, die SPI-Kommunikation zu aktivieren. Stelle sicher, dass die kleinen Schalter auf der Platine richtig eingestellt sind. Für das Modell, das ich habe, kannst du sehen, wie die Schalter gesetzt werden müssen, um die SPI-Kommunikation zu aktivieren. Die kleine Tabelle unterhalb der Schalter zeigt dir, welcher Schalter in welche Richtung gekippt werden muss, um SPI zu aktivieren.

ESPHome YAML Code

Nachdem wir alles verkabelt haben, müssen wir die Software für den D1 Mini ESP32 vorbereiten, kompilieren und flashen. Dafür verwenden wir ESPHome, das eine super einfache Konfiguration mithilfe von YAML-Dateien ermöglicht. Um zu verstehen, wie du ESPHome-Code für den D1 Mini kompilieren und flashen kannst, folge bitte den offiziellen Dokumentationen. Im folgenden Listing findest du den ESPHome-YAML-Code.

Es wird davon ausgegangen, dass du alles genau wie oben gezeigt verkabelt hast, sodass alle GPIOs übereinstimmen. Beachte, dass YOUR_ENCRYPTION_KEY, YOUR_OTA_PASSWORD und YOUR_AP_PASSWORD nur Platzhalter sind, da diese Schlüssel/Passwörter normalerweise von ESPHome automatisch generiert werden. Statt YOUR_TAG_ID musst du die Tag-ID deines statischen NFC-Tags eingeben, das du verwenden möchtest. Die vollständige Erklärung des Codes findest du im oben verlinkten YouTube-Video.

esphome:
  name: smart-cupboard-lock
  friendly_name: smart-cupboard-lock

esp32:
  board: esp32dev
  framework:
    type: esp-idf
    version: 5.2.1
    platform_version: 6.7.0
    sdkconfig_options: 
      CONFIG_COMPILER_OPTIMIZATION_SIZE: y 
      CONFIG_LWIP_MAX_SOCKETS: "16"
      CONFIG_MBEDTLS_HKDF_C: y 

# Enable logging
logger:

external_components:
  - source: github://rednblkx/HAP-ESPHome@main

# Enable Home Assistant API
api:
  encryption: 
    key: YOUR_ENCRYPTION_KEY

ota:
  - platform: esphome
    password: YOUR_OTA_PASSWORD

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Smart-Cupboard-Lock"
    password: YOUR_AP_PASSWORD

captive_portal:

spi:
  clk_pin: GPIO18
  miso_pin: GPIO19
  mosi_pin: GPIO23

pn532_spi:
  id: nfc_spi_module
  cs_pin: GPIO26
  update_interval: 100ms
  on_tag:
    then:
      lambda: |-
        ESP_LOGI("INFO", "My Tag ID is: %s", x.c_str());
        if(x == YOUR_TAG_ID) {
          if (id(cupboard_lock).state == LOCK_STATE_LOCKED) {
            id(cupboard_lock).unlock();
          } else {
            id(cupboard_lock).lock();
          }
        }

homekit_base:
  setup_code: '466-37-726'

homekit:
  lock:
    - id: cupboard_lock
      nfc_id: nfc_spi_module
      on_hk_success:
        lambda: |-
          ESP_LOGI("INFO", "IssuerID: %s", x.c_str());
          ESP_LOGI("INFO", "EndpointID: %s", y.c_str());
          if (id(cupboard_lock).state == LOCK_STATE_LOCKED) {
            id(cupboard_lock).unlock();
          } else {
            id(cupboard_lock).lock();
          }
      on_hk_fail:
        lambda: |-
          ESP_LOGI("ERROR", "Authorizing HomeKit lock failed");
      hk_hw_finish: "SILVER"

button:
- platform: homekit_base
  factory_reset:
    name: "Reset Homekit pairings"

lock:
  - platform: template
    id: cupboard_lock
    name: "HomeKit Cupboard Lock"
    optimistic: True
    on_lock:
    - logger.log: "Door Locked!"
    - switch.turn_off: electronic_lock
    on_unlock:
    - logger.log: "Door Unlocked!"
    - switch.turn_on: electronic_lock
    - delay:  100ms
    - switch.turn_off: electronic_lock

output:
  - platform: gpio
    pin: GPIO25
    id: 'lock_out'
switch:
  - platform: output
    id: electronic_lock
    output: 'lock_out'

Probiere es aus!

Sobald dein Code auf den D1 Mini geflasht wurde, solltest du in der Lage sein, die HomeKit Bridge zu Apple Home hinzuzufügen. Tippe einfach auf das „+“-Symbol in deiner Apple Home App, wähle „Gerät hinzufügen“, dann „Weitere Optionen“, und dort solltest du die neue HomeKit Bridge sehen – beachte, dass du den setup_code eingeben musst, den du in homekit_base definiert hast (in meinem Fall 466-37-726). Du solltest auch in der Lage sein, das ESPHome-Gerät zu Home Assistant hinzuzufügen, um das Schloss von dort aus zu steuern. Sieh dir das oben verlinkte YouTube-Video für eine Demo an, wie es funktionieren sollte. Viel Spaß!

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert