Änderungen

ESPNOW Keyfob

497 Byte hinzugefügt, 23:39, 30. Dez. 2024
/* Kommandos */
=== Hardware ===
Einfachste Version: ESP01S oder ESP12S wird per CR2032 Knopfzelle über Taster mit Strom versorgt. Evtl. wird ein Pufferkondensator benötigt, weil recht hohe Stromspitzen auftreten können, die die Knopfzelle nicht schafft.
=== Details ===
* Grundidee:
** Knopf wird gedrückt, ESP wird aktiviert
** Private+Public Key und Name werden eingelesen, Test ob Public Key stimmt ** Keyfob fordert Challenge 'c' mit signierter Nachricht von der Tür an (Random value min 32bitChallenge egal) - ESPNow Broadcast
** Wenn eine Tür in der Nähe ist, sendet sie eine Challenge zurück, die sie sich merkt
** Challenge wird von Keyfob empfangen
** Keyfob baut Ed25519 signierte Nachricht 't' für trigger und sendet sie per ESPNow Broadcast zur Tür zurück*** Nachrichtenlänge (muss mit ESPNow Paketlänge übereinstimmen)*** Public Key (32 Bytes)*** Name (32 Bytes, 0 gefüllt)*** Signatur (64 Bytes)*** Challenge (32 Bytes)*** Aktion (1-xx Bytes) 'Open'+0
** Tür empfängt Nachricht. Wenn Signatur, Challenge, Länge und alles andere stimmt, wird Aktion ausgefürt.
*** Public Key inkl. Name muss 1:1 in der Tür vorhanden sein - daran sind die User-Rechte gespeichert.
*** Wichtig: Aktuelle challenge muss nach der Ausführung auf ungültig gesetzt werden!
*** War der Aufbau richtig, aber der Nutzer (=Public Key) nicht bekannt, wird dieser zwischengespeichert
** Tür bestätigt ggf. Nachricht (nicht Pflicht)
** ESP geht in Power-Off Mode.
==== Kommandos ====
Hier die Kommandos. Die meisten Kommandos werden hinterlegte Rechte und gültige Signaturen + Challenges benötigen.
* 'c': Get Challenge. Hierbei wird die Challenge nicht überprüft , auch damit die Übertragung schneller abläuft (sollte aber mit Random gefüllt werdenTest der Challenge dauert etwa 100ms). Je nach Sicherheitskonzept gibt es nur bei hinterlegten Public Keys auch eine Challenge zurück.* 't': Trigger. Triggert das Lock. Was hierbei passiert ist vom Schloss abhängig. Das ist das Kommando für KeyFobs mit nur einem Button. Einige Schlösser lassen sich damit nur öffnen, andere Öffnen und Schliessen.* 'U': Unlock debug und Webserver mode. Gerät wird sehr offen, nur kurz benutzen, danach Reset machen. Benötigt spezielle Rechte.* 'O': Tür öffnen.* 'C': Tür schließen.* 'R': Rest. Beendet auch den debug modus.* 's': Get Status. Status der Tür wird zurück gegeben: Je ein ASCII-Zeichen als Ziffer, doorState [0=unknown,1=closed,2=open], lockState [0=unknown,1=locked,2=unlocked,3=open], trigState [0=nothing,1=moving,2=waiting]* 'a': Stop adding all unknown users.* 'A': Add all unknown users.
==== Antworten ====
Signaturen sind normalerweise nicht nötig. Um ggf. einen bestimmten Anfrager zu unterscheiden wird dessen Public Key zurück gesendet. Bei Broadcasts ist dieser mit 0 gefüllt. Auch werden 4 Bytes für den Antworttyp definiert:Hier wird auch immer eine neue Challenge übertragen, die eine Zeit lang gültig ist.
{| class="wikitable"
|+ Hackffm Lock Protocol - Antwort
|-
! Offset !! Länge in Bytes !! Inhalt
|-
| -4 || 4 || Präambel "D00a"
|-
| 0 || 32 || Last public key of device that sent command (000.. for unspecific)
|-
| 32 || 4 8 || 'ANSW' for command answers, 'INFO' for generic infos, 'ERRR' for errorsNext challenge
|-
| 36 40 || x || Command specific answer
|}
Kommando Antworten, eingeleitet mit 'ANSW':* 'c' + 32 byte: Nächste zu verwendende Challenge (verfallen nach einigen Sekunden, evtl. können mehrere gültig sein)* 'tokt' : Trigger ausgeführt. Bei * 'INFOE' und 'ERRR' werden typischerweise Klartext Antworten gesendet: Error, more info in following bytes.
2.154
Bearbeitungen