kormax / apple-home-key-reader

Apple Home Key Reader Implementation
Apache License 2.0
555 stars 45 forks source link

Connection via UDP #34

Closed maslyankov closed 2 months ago

maslyankov commented 4 months ago

Hello! I am trying to connect the python app to a Serial server (with PN532 connected to server device) hosted with ESPHome (https://github.com/oxan/esphome-stream-server). I have used this approach with Paradox Alarm Panels and it works very well. When I try to configure the apple-home-key-reader to use it, I get "Connection made to NFC Lock", but it does not seem to work with nfc at all. If I connect the same PN532 chip with serial adapter via usb, it works.

Config used (develop branch):

{
    "logging": {
        "level": 20
    },

    "nfc": {
        "path": "udp:10.32.1.116:8887",
        "broadcast": false
    },

    "hap": {
        "port": 51926,
        "persist": "hap.state",
        "default": "locked"
    },

    "homekey": {
        "persist": "homekey.json",
        "express": true,
        "finish": "gold",
        "flow": "fast"
    }
}

Maybe there are additional implementations that need to be made for this to work?

Logs:

[2024-05-30 20:34:46,347] [    INFO] __init__          :148  searching for reader on path udp:10.32.1.116:8887
[2024-05-30 20:34:46,347] [    INFO] accessory_driver  :320  Starting the event loop
[2024-05-30 20:34:46,347] [    INFO] accessory_driver  :372  Starting accessory NFC Lock on addresses ['192.168.1.169'], port 51926.
[2024-05-30 20:34:46,355] [    INFO] __init__          :151  using Darwin IP-Stack UDP at udp:10.32.1.116:8887
[2024-05-30 20:34:46,396] [    INFO] hap_protocol      :82   ('10.21.1.129', 51539): Connection made to NFC Lock
[2024-05-30 20:34:46,405] [    INFO] accessory         :138  get_hardware_finish
[2024-05-30 20:34:46,405] [    INFO] service           :281  get_hardware_finish=AQSq1uwA
[2024-05-30 20:34:46,405] [    INFO] accessory         :115  get_lock_current_state
[2024-05-30 20:34:46,405] [    INFO] accessory         :119  get_lock_target_state
[2024-05-30 20:34:46,406] [    INFO] accessory         :129  get_lock_version
[2024-05-30 20:34:46,406] [    INFO] accessory         :158  get_configuration_state
[2024-05-30 20:34:46,406] [    INFO] service           :336  get_configuration_state
[2024-05-30 20:34:46,406] [    INFO] accessory         :148  get_nfc_access_control_point
[2024-05-30 20:34:46,406] [    INFO] service           :294  get_nfc_access_control_point
[2024-05-30 20:34:46,406] [    INFO] accessory         :143  get_nfc_access_supported_configuration
[2024-05-30 20:34:46,406] [    INFO] service           :290  TODO get_nfc_access_supported_configuration=AQEQAgEQ
[2024-05-30 20:37:23,070] [   ERROR] threads           :17   Unhandled exception in runner homekey. Continuing in 5 seconds
Traceback (most recent call last):
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/threads.py", line 15, in function_
    target(*args, **kwargs)
  File "/Users/maslyankov/Developer/apple-home-key-reader/service.py", line 185, in run
    self._read_homekey()
  File "/Users/maslyankov/Developer/apple-home-key-reader/service.py", line 111, in _read_homekey
    remote_target = self.clf.sense(
                    ^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/bfclf.py", line 386, in sense
    self.target = sense_tta(target)
                  ^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/bfclf.py", line 290, in sense_tta
    target = self.device.sense_tta(target)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/venv/lib/python3.11/site-packages/nfc/clf/udp.py", line 94, in sense_tta
    brty, sens_res, addr = self._recv_data(1.0, target.brty)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/venv/lib/python3.11/site-packages/nfc/clf/udp.py", line 555, in _recv_data
    data, addr = self.socket.recvfrom(1024)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
ConnectionRefusedError: [Errno 61] Connection refused
[2024-05-30 20:37:28,082] [   ERROR] service           :175  Connecting to the NFC reader...
NoneType: None
[2024-05-30 20:37:28,082] [    INFO] __init__          :148  searching for reader on path udp:10.32.1.116:8887
[2024-05-30 20:37:28,094] [    INFO] __init__          :151  using Darwin IP-Stack UDP at udp:10.32.1.116:8887
[2024-05-30 20:37:51,208] [   ERROR] threads           :17   Unhandled exception in runner homekey. Continuing in 5 seconds
Traceback (most recent call last):
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/threads.py", line 15, in function_
    target(*args, **kwargs)
  File "/Users/maslyankov/Developer/apple-home-key-reader/service.py", line 185, in run
    self._read_homekey()
  File "/Users/maslyankov/Developer/apple-home-key-reader/service.py", line 111, in _read_homekey
    remote_target = self.clf.sense(
                    ^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/bfclf.py", line 386, in sense
    self.target = sense_tta(target)
                  ^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/util/bfclf.py", line 290, in sense_tta
    target = self.device.sense_tta(target)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/venv/lib/python3.11/site-packages/nfc/clf/udp.py", line 94, in sense_tta
    brty, sens_res, addr = self._recv_data(1.0, target.brty)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/maslyankov/Developer/apple-home-key-reader/venv/lib/python3.11/site-packages/nfc/clf/udp.py", line 555, in _recv_data
    data, addr = self.socket.recvfrom(1024)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
ConnectionRefusedError: [Errno 61] Connection refused
[2024-05-30 20:37:56,216] [   ERROR] service           :175  Connecting to the NFC reader...
NoneType: None
[2024-05-30 20:37:56,217] [    INFO] __init__          :148  searching for reader on path udp:10.32.1.116:8887
[2024-05-30 20:37:56,236] [    INFO] __init__          :151  using Darwin IP-Stack UDP at udp:10.32.1.116:8887
kormax commented 4 months ago

Woah, I didn't know that NFCPY supported UDP-UART.

At this moment I don't know what could be the issue with your set up. For me, your config looks fine, and the only info I can infer from logs is that no data gets returned from UDP.

kormax commented 4 months ago

Oh, I think i get the issue now.

Nfcpy support is for UDP

And this ESP32 library is for TCP

juaurodri commented 3 months ago

@maslyankov were you able to make it work?

kormax commented 3 months ago

Considering that you're using a ESP32 in your set up anyway, you could try using the ESP32 Project version made by @rednblkx. In this case, you wouldn't even need a Raspberry PI, and it would be faster and more reliable due to not relying on a network (in comparison to the TCP solution you intended on using).