doorman2/README.md

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