Compare commits

...

4 Commits

Author SHA1 Message Date
Valdur Kana f43cfcf131 Handle button correctly. get_hex refactored as hex getter. 11 months ago
Valdur Kana 0920df1fb0 Code cleanup 11 months ago
Valdur Kana a9f7638c14 Rename uid_hash init param as uid_salt. 11 months ago
Valdur Kana 7cc479f468 Use f-string literal. 11 months ago
  1. 32
      kdoorpi.py
  2. 26
      wiegand.py

@ -29,12 +29,12 @@ class DoorController:
api_longpoll,
api_swipe,
api_key,
uid_hash):
uid_salt):
self.door = door
self.api_allowed = api_allowed
self.api_longpoll = api_longpoll
self.api_swipe = api_swipe
self.uid_hash = uid_hash
self.uid_salt = uid_salt
self.uids = {}
@ -67,20 +67,19 @@ class DoorController:
uids.add(token["token"]["uid_hash"].strip())
self.uids = uids
def wiegand_callback(self, bits, value):
uid_h = hash_uid(value, self.uid_hash)
logging.debug("hash %s", uid_h)
if uid_h in self.uids:
logging.info("Opening door for UID hash trail %s", uid_h[-10:])
def wiegand_callback(self, value):
uid_hash = hash_uid(value, self.uid_salt)
logging.debug(f"hash {uid_hash}")
if uid_hash in self.uids:
logging.info(f"Opening door for UID hash trail {uid_hash[-10:]}")
self.wiegand.open_door()
success = True
else:
logging.info("Access card not in allow list, hash trail %s",
uid_h[-10:])
logging.info(f"Access card not in allow list, hash trail {uid_hash[-10:]}")
success = False
data = {
"uid": value,
"uid_hash": uid_h,
"uid_hash": uid_hash,
"door": self.door,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
}
@ -127,9 +126,10 @@ class DoorController:
if __name__ == "__main__":
DoorController(
os.environ["KDOORPI_DOOR"],
os.environ["KDOORPI_API_ALLOWED"],
os.environ["KDOORPI_API_LONGPOLL"],
os.environ["KDOORPI_API_SWIPE"],
os.environ["KDOORPI_API_KEY"],
os.environ["KDOORPI_UID_SALT"])
door=os.environ["KDOORPI_DOOR"],
api_allowed=os.environ["KDOORPI_API_ALLOWED"],
api_longpoll=os.environ["KDOORPI_API_LONGPOLL"],
api_swipe=os.environ["KDOORPI_API_SWIPE"],
api_key=os.environ["KDOORPI_API_KEY"],
uid_salt=os.environ["KDOORPI_UID_SALT"],
)

@ -56,7 +56,7 @@ class Decoder:
self._cb)
self.button_cb_h = self.pi.callback(self.button_pin,
pigpio.FALLING_EDGE,
self._cb)
self.button_cb)
def cut_empty(self, item):
if item[0:8] == "00000000":
@ -64,7 +64,8 @@ class Decoder:
else:
return item
def get_hex(self):
@property
def hex(self):
try:
items = self.items
if len(self.items) == 26:
@ -79,12 +80,11 @@ class Decoder:
bits))).rstrip()
except ValueError:
logging.error("Failed to convert binary to hex: %s" % self.items)
logging.error(f"Failed to convert binary to hex: {self.items}")
return False
except Exception as e:
logging.error("Wiegand convert error (raw: %s): %s" % (
self.items, e))
logging.error(f"Wiegand convert error (raw: {self.items}): {e}")
return False
def _cb(self, gpio_pin, level, tick):
@ -99,7 +99,7 @@ class Decoder:
if self.in_code:
self.bits += 1
else:
logging.debug("Wiegand data transfer start")
logging.debug(f"Wiegand data transfer start")
self.bits = 1
self.items = ""
self.in_code = True
@ -129,20 +129,18 @@ class Decoder:
self.in_code = False
if self.bits >= 26:
hex = self.get_hex()
hex = self.hex
if hex:
self.callback(self.bits, hex)
self.callback(hex)
else:
logging.error("Expected 26 bits, but got %i: %s" %
(self.bits, self.items))
logging.error(f"Expected 26 bits, but got {self.bits:d}: {self.items}")
except Exception as e:
logging.error("Wiegand callback error: %s" % e)
logging.error(f"Wiegand callback error: {e}")
def button_cb(self, gpio_pin, level, tick):
print("button: gpio_pin:{}, level:{}, tick:{}".format(gpio_pin,
level,
tick))
print(f"button: gpio_pin:{gpio_pin}, level:{level}, tick:{tick}")
self.open_door()
def open_door(self):
self.pi.write(self.door_pin, 1)

Loading…
Cancel
Save