Door lock (new)
Find a file
2024-03-06 21:00:29 +01:00
esp32 add network support 2023-12-06 23:03:25 +01:00
keypad keypad: document avr fuse flashing 2023-12-06 22:55:47 +01:00
tools add tools/get_hashes python script, update README 2023-07-28 23:29:29 +02:00
README.md document manual hash generation 2024-03-06 21:00:29 +01:00

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