Türschloss: Difference between revisions

From CCC Basel Wiki
Jump to navigation Jump to search
(Dokumentation auf die dritte Hardware-Version angepasst)
Line 1: Line 1:


== Hardware ==
== Geschichte==
Dieser Artikel beschreibt die aktuelle Situation. Die Dokumentationen der Vorgänger-Versionen finden sich unter:


* [[Türschloss/Erster-Versuch]] (Umgebauter kommerzieller Antrieb mit Raspi Zero)
* Raspberry Pi Zero W
* [[Türschloss/Zweiter-Versuch]] (Schrittmotor mit Stall-Erkennung, direkt am Raspi)
* «Eqiva BLUETOOTH SMART» Türschlossantrieb
* Lichtschranke im Türrahmen
* Pogopin-«Kontaktsensor»


==Hardware==
=== Türschlossantrieb ===

# Das Bluetooth-Modul (zu sehen in Abb. 5) wurde entfernt. Lötarbeiten sind nicht notwendig, der Chip lässt sich einfach mit einem Seitenschneider vom PCB trennen.
# An die folgenden Testpads wurden Drähte angelötet und ins Batteriefach geführt:
#* MP10 (Taster «Öffnen»)
#* MP11 (Taster «Schliessen)
#* MP16 (GND)
#* MP17 (Vcc)


*Raspberry Pi 3B+, per Ethernet im LAN, sendet "Door-WLAN" als Backup aus
*Türsteuerung mit ESP32-C3 und ein paar Relais, angebunden per USB an den Raspi
* Selbst konstruierter Türschlossantrieb, bestehend aus DC-Motor und 3d-gedruckten Zahnrädern
*Näherungssensor im Türrahmen, M8 induktiv NPN, Typ Heschen LJ8A3-2-Z/BX
<gallery>
<gallery>
File:Türschloss-CAD.png|Mechanik im CAD
File:Eqiva1.jpg|thumb|Der unmodifizierte Türschlossantrieb mit 2 Knöpfen und einem '''sehr''' unhandlichen Knauf zur manuellen Bedienung.
File:Türschloss-Motor.jpg|Mechanik vor dem Einbau
File:Eqiva6.jpg|thumb|Detailansicht des Teils, der über das bestehende Schloss mit Schlüssel gesteckt wird.
File:Türschloss-Platine.jpg|Platine mit ESP32-C3 und 3 Relais
File:Eqiva2.jpg|thumb|Der Türschlossantrieb mit entfernter Abdeckung.
File:Türschloss-Testaufbau.jpg|Testaufbau
File:Eqiva3.jpg|thumb|Detailansicht der PCB-Vorderseite, im Gehäuse eingebaut und mit den anderen Komponenten verbunden.
File:Türschloss-Schaltplan.jpg|Schaltplan
File:Eqiva4.jpg|thumb|Detailansicht der PCB-Rückseite, besonders prominent sind hier der Microcontroller sowie das Bluetooth-Modul.
</gallery>Die Getriebe sind 3d-gedruckt und auf die Welle bzw den Knauf aufgepresst. Der Motor wir dann von der Innenseite an die Klammplatte angeschraubt. Anschließend wird die ganze Konstuktion mittels zweier lagen Schrauben um den herausstehenden Teil des Schlosses geklemmt.
File:Eqiva5.jpg|thumb|Detailansicht des mechanischen Aufbaus.
File:Eqiva7.jpg|thumb|Drähte werden aus dem Innenraum in das Batteriefach geführt, und von dort weiter nach aussen.
File:Setup1.jpg|thumb|Experimentelles Setups aus modifiziertem Türschlossantrieb, einem Raspberry Pi und 2 MOSFETs.
</gallery>


== Elektronik und Programmierung der Steuerung ==
=== Lichtschranke ===
Die Platine steuert über 2 Relais den Links-Rechtslauf des Antriebsmotors und erfasst über einen Messwiderstand den Motorstrom. Der Riegelkontakt wird über ein Koppelrelais abgefragt. Die Programmierung erfasst seriell eingehende Kommandos (Öffnen, Schließen, Abfrage des Sperrzustands, ...)


===== Öffnen =====
* Die beiden Lichtschrankenteile wurden in einer 3D-gedruckte Halterung befestigt.
Zum Öffnen der Türe wir der Motor so lange gedreht, bis der Knauf auf den mechanischen Endanschlag läuft. Dabei Blockiert der Motor, was durch einen Anstieg des Motorstroms über einen programmierten Schwellwert erfasst wird. Anschließend wird für eine kurze Zeit zurück gedreht, um die Klinke freizugeben.
* Die Halterung wurde durch das Loch für den Riegel in den Rahmen geführt und von aussen durch bereits existierende Löcher mit Schrauben befestigt.
* Die Kabel der Lichtschranke wurden durch ein ebenfalls bereits existierendes Loch nach aussen geführt.


===== Schließen =====
<gallery>
Beim Öffnen mit Schlüssel von außen sorgt ein Mechanismus im Schloss dafür, dass der Knauf ausgekuppelt wird. Daher wird beim Schließen immer ein Zurückdrehen auf den Offenen Zustand ausgelöst, was den Knauf wieder einkuppeln lässt. Nun startet der Schließvorgang, der durch Auslösen des induktiven Sensors durch den Riegel beendet wird.
File:Sensor1.jpg|thumb|Eine Hälfte der Lichtschranke, innerhalb des Türrahmens montiert.
</gallery>


===== Störungen =====
Die Laufzeit des Motors wird überwacht, um den Motor auch bei Versagen der Endlagenerkennung zu stoppen. Wird beim Öffnen kein Stromanstieg durch Erreichen der Endlage oder beim Schließen kein Erreichen des Riegels im Türrahmen erkannt, wird der Motor gestoppt und es wird eine Laufzeitfehler-Störtmeldung ausgegeben. Fährt die Klinke beim Schließen auf das Schließblech auf oder wir andersweitig blockiert, schaltet die Stromüberwachung den Motor ab und weist per Störmeldung auf das Erreichen der Endlage ohne Erfassen des Riegelsensors hin.


== Software ==
==Software auf dem Raspberry Pi 3B+==


* Python-Skript zum öffnen/schliessen via Raspi-GPIO-Pins
*Python-Skript zum öffnen/schliessen via Raspi-GPIO-Pins
* Ansteuerung via SSH Pubkey + ForceCommand
*Ansteuerung via SSH Pubkey + ForceCommand
** <code>ssh open@<door></code> &rarr; öffnet das Schloss
**<code>ssh open@<door></code> &rarr; öffnet das Schloss
** <code>ssh close@<door></code> &rarr; schliesst das Schloss
**<code>ssh close@<door></code> &rarr; schliesst das Schloss
** <code>ssh status@<door></code> &rarr; Status-Abfrage des Schlosses
**<code>ssh status@<door></code> &rarr; Status-Abfrage des Schlosses
* Ansteuerung via SSH (Alternative für Kompatibilität mit der «Trigger»-App)
*Ansteuerung via SSH (Alternative für Kompatibilität mit der «Trigger»-App)
** <code>ssh door@<door> open</code> &rarr; öffnet das Schloss
**<code>ssh door@<door> open</code> &rarr; öffnet das Schloss
** <code>ssh door@<door> close</code> &rarr; schliesst das Schloss
**<code>ssh door@<door> close</code> &rarr; schliesst das Schloss
** <code>ssh door@<door> status</code> &rarr; Status-Abfrage des Schlosses
**<code>ssh door@<door> status</code> &rarr; Status-Abfrage des Schlosses
* Ansteuerung via TLS Client Certificate + HTTP cgi-bin
*Ansteuerung via TLS Client Certificate + HTTP cgi-bin
** <code>https://<door>/door/open.py</code> &rarr; öffnet das Schloss
**<code>https://<door>/door/open.py</code> &rarr; öffnet das Schloss
** <code>https://<door>/door/close.py</code> &rarr; schliesst das Schloss
**<code>https://<door>/door/close.py</code> &rarr; schliesst das Schloss
** <code>https://<door>/door/status.py</code> &rarr; Status-Abfrage des Schlosses
** <code>https://<door>/door/status.py</code> &rarr; Status-Abfrage des Schlosses


=== Clients ===
===Clients===


Siehe [[/Client-Einrichtung]].
Siehe [[/Client-Einrichtung]].


=== Status-Anzeige ===
===Status-Anzeige ===


Format: JSON
Format: JSON

Revision as of 18:48, 1 January 2025

Geschichte

Dieser Artikel beschreibt die aktuelle Situation. Die Dokumentationen der Vorgänger-Versionen finden sich unter:

Hardware

  • Raspberry Pi 3B+, per Ethernet im LAN, sendet "Door-WLAN" als Backup aus
  • Türsteuerung mit ESP32-C3 und ein paar Relais, angebunden per USB an den Raspi
  • Selbst konstruierter Türschlossantrieb, bestehend aus DC-Motor und 3d-gedruckten Zahnrädern
  • Näherungssensor im Türrahmen, M8 induktiv NPN, Typ Heschen LJ8A3-2-Z/BX

Die Getriebe sind 3d-gedruckt und auf die Welle bzw den Knauf aufgepresst. Der Motor wir dann von der Innenseite an die Klammplatte angeschraubt. Anschließend wird die ganze Konstuktion mittels zweier lagen Schrauben um den herausstehenden Teil des Schlosses geklemmt.

Elektronik und Programmierung der Steuerung

Die Platine steuert über 2 Relais den Links-Rechtslauf des Antriebsmotors und erfasst über einen Messwiderstand den Motorstrom. Der Riegelkontakt wird über ein Koppelrelais abgefragt. Die Programmierung erfasst seriell eingehende Kommandos (Öffnen, Schließen, Abfrage des Sperrzustands, ...)

Öffnen

Zum Öffnen der Türe wir der Motor so lange gedreht, bis der Knauf auf den mechanischen Endanschlag läuft. Dabei Blockiert der Motor, was durch einen Anstieg des Motorstroms über einen programmierten Schwellwert erfasst wird. Anschließend wird für eine kurze Zeit zurück gedreht, um die Klinke freizugeben.

Schließen

Beim Öffnen mit Schlüssel von außen sorgt ein Mechanismus im Schloss dafür, dass der Knauf ausgekuppelt wird. Daher wird beim Schließen immer ein Zurückdrehen auf den Offenen Zustand ausgelöst, was den Knauf wieder einkuppeln lässt. Nun startet der Schließvorgang, der durch Auslösen des induktiven Sensors durch den Riegel beendet wird.

Störungen

Die Laufzeit des Motors wird überwacht, um den Motor auch bei Versagen der Endlagenerkennung zu stoppen. Wird beim Öffnen kein Stromanstieg durch Erreichen der Endlage oder beim Schließen kein Erreichen des Riegels im Türrahmen erkannt, wird der Motor gestoppt und es wird eine Laufzeitfehler-Störtmeldung ausgegeben. Fährt die Klinke beim Schließen auf das Schließblech auf oder wir andersweitig blockiert, schaltet die Stromüberwachung den Motor ab und weist per Störmeldung auf das Erreichen der Endlage ohne Erfassen des Riegelsensors hin.

Software auf dem Raspberry Pi 3B+

  • Python-Skript zum öffnen/schliessen via Raspi-GPIO-Pins
  • Ansteuerung via SSH Pubkey + ForceCommand
    • ssh open@<door> → öffnet das Schloss
    • ssh close@<door> → schliesst das Schloss
    • ssh status@<door> → Status-Abfrage des Schlosses
  • Ansteuerung via SSH (Alternative für Kompatibilität mit der «Trigger»-App)
    • ssh door@<door> open → öffnet das Schloss
    • ssh door@<door> close → schliesst das Schloss
    • ssh door@<door> status → Status-Abfrage des Schlosses
  • Ansteuerung via TLS Client Certificate + HTTP cgi-bin
    • https://<door>/door/open.py → öffnet das Schloss
    • https://<door>/door/close.py → schliesst das Schloss
    • https://<door>/door/status.py → Status-Abfrage des Schlosses

Clients

Siehe /Client-Einrichtung.

Status-Anzeige

Format: JSON

{
  "latch": "OPEN|CLOSED|UNKNOWN",
  "lock": "UNLOCKED|LOCKED|UNKNOWN"
}