67 lines
2.0 KiB
Markdown
67 lines
2.0 KiB
Markdown
# doorman2: electric boogaloo
|
|
|
|
- `esp32/` contains the micropython source which talks w/ NFC module and keypad over UART (two channels)
|
|
- `keypad/` has some magical Arduino code (sorry)
|
|
|
|
## scanning new cards
|
|
|
|
connect USB cable, use `mpremote` or any serial termnal to listen to logs, read card hash from logs
|
|
|
|
example:
|
|
|
|
```
|
|
$ mpremote
|
|
Connected to MicroPython at /dev/ttyUSB1
|
|
Use Ctrl-] or Ctrl-x to exit this shell
|
|
PN532: No response from PN532!
|
|
PN532: No response from PN532!
|
|
PN532: No response from PN532!
|
|
Card UUID: 403dcb1e
|
|
Card hash: dfe9bedbf230cf67dfa65249a7517af81175496642724a18ac728ecac7c90862
|
|
Unknown hash, ignoring
|
|
PN532: No response from PN532!
|
|
PN532: No response from PN532!
|
|
$
|
|
```
|
|
|
|
## scanning new cards with a phone app
|
|
|
|
get a phone with nfc and the "nfc tools" app installed, scan card, look for "serial number", get first four bytes of that, use following code:
|
|
|
|
```
|
|
# assumes card serial number 0x13121337 and pin 2137
|
|
import hashlib
|
|
def generate_hash(card_uid, pin):
|
|
card_uid = bytes(reversed(card_uid[:4])).hex()
|
|
s = "{:08x}:{}".format(int(pin), card_uid)
|
|
hash=hashlib.sha256(s.encode('ascii')).digest().hex()
|
|
return hash
|
|
|
|
generate_hash([0x13,0x12,0x13,0x37],bytearray(source=[ord('2'),ord('1'),ord('3'),ord('7')]))
|
|
```
|
|
|
|
## syncing data from LDAP
|
|
|
|
big TODO; currently, you need to:
|
|
1. use the `tools/get_hashes` python script to pull card hashes from LDAP (requires python-ldap)
|
|
2. put the output in a `hashes` file
|
|
3. `mpremote fs cp hashes :hashes`
|
|
|
|
plans: web UI like vuko's design
|
|
|
|
## esp <-> keypad protocol definition
|
|
|
|
- one byte per command, no delimeters, keypad is supposed to be as stateless as possible
|
|
- the keypad can only send numbers and the hash symbol
|
|
- ESP can send the following commands:
|
|
- `H` ("happy" noise, success; turns on the green LED for a second and turns it back off)
|
|
- `S` ("sad" failure noise; likewise with the red LED)
|
|
- `F` ("flush"; turns off LEDs and tries to bring the env to a sane level)
|
|
- `G`, `R` ("green", "red"; turns on the specific LEDs)
|
|
- `Q` ("quiet"; turns on audible keypresses)
|
|
|
|
|
|
---
|
|
|
|
i am so sorry
|