maximkulkin / esp-homekit

Apple HomeKit accessory server library for ESP-OPEN-RTOS
MIT License
1.1k stars 168 forks source link

Cannot combine GARAGE_DOOR_OPENER with other services #138

Closed killobatt closed 4 years ago

killobatt commented 4 years ago

Hi. I'm trying to create a garage door opener using ESP32, which is two light zones, temp + humidity sensor, and I'm planning to add a CO sensor in future.

However, I've found an issue with combining different services.

Here is my configuration:


homekit_accessory_t *accessories[] = {
    HOMEKIT_ACCESSORY(.id=1, .category=homekit_accessory_category_other, .services=(homekit_service_t*[]){
        HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]){
            HOMEKIT_CHARACTERISTIC(NAME, "garage"),
            HOMEKIT_CHARACTERISTIC(MANUFACTURER, "killobatt"),
            HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "237A2BAB119E"),
            HOMEKIT_CHARACTERISTIC(MODEL, "garage"),
            HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
            HOMEKIT_CHARACTERISTIC(IDENTIFY, led_identify),
            NULL
        }),
        HOMEKIT_SERVICE(GARAGE_DOOR_OPENER, .primary=true, .characteristics=(homekit_characteristic_t*[]){
            HOMEKIT_CHARACTERISTIC(NAME, "Garage opener"),
            HOMEKIT_CHARACTERISTIC(
                CURRENT_DOOR_STATE, HOMEKIT_CHARACTERISTIC_CURRENT_DOOR_STATE_CLOSED,
                .getter=gdo_current_state_get,
                .setter=NULL
            ),
            HOMEKIT_CHARACTERISTIC(
                TARGET_DOOR_STATE, HOMEKIT_CHARACTERISTIC_TARGET_DOOR_STATE_CLOSED,
                .getter=gdo_target_state_get,
                .setter=gdo_target_state_set
            ),
            HOMEKIT_CHARACTERISTIC(
                OBSTRUCTION_DETECTED, false,
                .getter=gdo_obstruction_get,
                .setter=NULL
            ),
            NULL
        }),
        HOMEKIT_SERVICE(LIGHTBULB, .primary = false, .characteristics = (homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Front light"),
            HOMEKIT_CHARACTERISTIC(
                ON, false,
                .getter=frontlight_on_get,
                .setter=frontlight_on_set
            ),
            NULL
        }),
        // Why doesn't thermo services work among with the garage? Simulator works.
        HOMEKIT_SERVICE(TEMPERATURE_SENSOR, .primary = false, .characteristics = (homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Temperature sensor"),
            &temp_hum_sensor.temperature,
            NULL
        }),
        HOMEKIT_SERVICE(HUMIDITY_SENSOR, .primary = false, .characteristics = (homekit_characteristic_t*[]) {
            HOMEKIT_CHARACTERISTIC(NAME, "Humidity sensor"),
            &temp_hum_sensor.humidity,
            NULL
        }),
        NULL
    }),
    NULL
};

...

temp_hum_sensor.temperature = HOMEKIT_CHARACTERISTIC_(CURRENT_TEMPERATURE, 0);
temp_hum_sensor.humidity = HOMEKIT_CHARACTERISTIC_(CURRENT_RELATIVE_HUMIDITY, 0);

When I'm commenting out temp/humidity sensor services, I can successfully pair with iOS Device (iOS 13.4.1).

When I'm trying to work in the config described above, iPhone unpairs just after reading the accessory status.

Here are the execution logs:

ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:7012
load:0x40078000,len:14076
load:0x40080400,len:4304
entry 0x400806e8
I (71) boot: Chip Revision: 1
I (71) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (39) boot: ESP-IDF v4.0-245-g718af6ed0 2nd stage bootloader
I (39) boot: compile time 16:41:42
I (39) boot: Enabling RNG early entropy source...
I (45) boot: SPI Speed      : 40MHz
I (49) boot: SPI Mode       : DIO
I (53) boot: SPI Flash Size : 4MB
I (57) boot: Partition Table:
I (61) boot: ## Label            Usage          Type ST Offset   Length
I (68) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (76) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (83) boot:  2 factory          factory app      00 00 00010000 00100000
I (91) boot: End of partition table
I (95) boot_comm: chip revision: 1, min. application chip revision: 0
I (102) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x1d150 (119120) map
I (153) esp_image: segment 1: paddr=0x0002d178 vaddr=0x3ffb0000 size=0x02e98 ( 11928) load
I (158) esp_image: segment 2: paddr=0x00030018 vaddr=0x400d0018 size=0x8a538 (566584) map
0x400d0018: _stext at ??:?

I (363) esp_image: segment 3: paddr=0x000ba558 vaddr=0x3ffb2e98 size=0x01298 (  4760) load
I (365) esp_image: segment 4: paddr=0x000bb7f8 vaddr=0x40080000 size=0x00400 (  1024) load
0x40080000: _WindowOverflow4 at /Users/killobatt/Projects/killobatt/esp-32/esp-idf/components/freertos/xtensa_vectors.S:1778

I (370) esp_image: segment 5: paddr=0x000bbc00 vaddr=0x40080400 size=0x153a0 ( 86944) load
I (428) boot: Loaded app from partition at offset 0x10000
I (428) boot: Disabling RNG early entropy source...
I (429) cpu_start: Pro cpu up.
I (432) cpu_start: Application information:
I (437) cpu_start: Project name:     esp-homekit-garage
I (443) cpu_start: App version:      e0034b7-dirty
I (448) cpu_start: Compile time:     Apr 17 2020 00:12:17
I (455) cpu_start: ELF file SHA256:  8ae1c736ac5dc2b9...
I (461) cpu_start: ESP-IDF:          v4.0-245-g718af6ed0
I (467) cpu_start: Starting app cpu, entry point is 0x40081280
0x40081280: call_start_cpu1 at /Users/killobatt/Projects/killobatt/esp-32/esp-idf/components/esp32/cpu_start.c:271

I (0) cpu_start: App cpu up.
I (477) heap_init: Initializing. RAM available for dynamic allocation:
I (484) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (490) heap_init: At 3FFBAA98 len 00025568 (149 KiB): DRAM
I (496) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (502) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (509) heap_init: At 400957A0 len 0000A860 (42 KiB): IRAM
I (515) cpu_start: Pro cpu start user code
I (533) spi_flash: detected chip: gd
I (534) spi_flash: flash io: dio
I (534) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (542) APP: Launched, initializing hardware...
E (552) gpio: gpio_install_isr_service(411): GPIO isr service already installed
E (552) gpio: gpio_install_isr_service(411): GPIO isr service already installed
I (562) gpio: GPIO[27]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
I (572) APP: Initializing wifi...
TIMEOUT: 75E (582) SENSOR: DHT22_ERROR_TIMEOUT
I (632) wifi: wifi driver task: 3ffc5724, prio:23, stack:3584, core=0
I (632) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (632) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE
I (662) wifi: wifi firmware version: c6203cc
I (662) wifi: config NVS flash: enabled
I (662) wifi: config nano formating: disabled
I (662) wifi: Init dynamic tx buffer num: 32
I (662) wifi: Init data frame dynamic rx buffer num: 32
I (672) wifi: Init management frame dynamic rx buffer num: 32
I (672) wifi: Init management short buffer num: 32
I (682) wifi: Init static rx buffer size: 1600
I (682) wifi: Init static rx buffer num: 10
I (682) wifi: Init dynamic rx buffer num: 32
I (792) phy: phy_version: 4180, cb3948e, Sep 12 2019, 16:39:13, 0, 0
I (802) wifi: mode : softAP (30:ae:a4:8f:11:4d)
I (802) wifi: Total power save buffer number: 16
I (802) wifi: Init max length of beacon: 752/752
I (802) wifi: Init max length of beacon: 752/752
I (812) APP: Starting HomeKit...
I (812) CONNECTION: SYSTEM_EVENT_AP_START
I (822) APP: Defining garage state...
I (7472) DEBOUNCE: GPIO 14 was pressed 0 times. The state is 1
I (7472) APP: reed_switch_bottom_handler level: 1
I (7612) DEBOUNCE: GPIO 14 was pressed 1 times. The state is 1
I (7612) APP: reed_switch_bottom_handler level: 1
I (7822) APP: Garage state changed to: GARAGE_DOOR_STATE_CLOSED
I (7822) APP: Notify garage state changed to 'Current Door State'

I (7822) APP: Notify garage TARGET state changed to 'Target Door State'

I (8832) APP: Garage initial state is GARAGE_DOOR_STATE_CLOSED
>>> HomeKit: Starting server
>>> HomeKit: Using existing accessory ID: 49:BE:35:35:19:72
>>> HomeKit: Configuring mDNS
>>> homekit_setup_mdns: Accessory Setup ID = 2A5B
>>> homekit_run_server: Staring HTTP server
I (10582) SENSOR: Read temperature: 26.1, humidity: 51.2
I (10932) DEBOUNCE: GPIO 14 was pressed 2 times. The state is 0
I (10932) APP: reed_switch_bottom_handler level: 0
I (10932) APP: Garage state changed to: GARAGE_DOOR_STATE_OPENING
I (10932) APP: Notify garage state changed to 'Current Door State'

I (10942) APP: Notify garage TARGET state changed to 'Target Door State'

I (12292) DEBOUNCE: GPIO 32 was pressed 0 times. The state is 1
I (12292) APP: reed_switch_top_handler level: 1
I (12292) APP: Garage state changed to: GARAGE_DOOR_STATE_OPEN
I (12302) APP: Notify garage state changed to 'Current Door State'

I (12422) DEBOUNCE: GPIO 32 was pressed 1 times. The state is 1
I (12422) APP: reed_switch_top_handler level: 1
I (20582) SENSOR: Read temperature: 26.0, humidity: 51.5
I (23122) wifi: new:<1,0>, old:<1,1>, ap:<1,1>, sta:<255,255>, prof:1
I (23122) wifi: station: 84:ad:8d:cf:b3:2b join, AID=1, bgn, 20
I (23142) CONNECTION: SYSTEM_EVENT_AP_STACONNECTED
I (23462) tcpip_adapter: softAP assign IP to station,IP is: 192.168.4.2
I (23462) CONNECTION: SYSTEM_EVENT_AP_STAIPASSIGNED
I (25272) tcpip_adapter: softAP assign IP to station,IP is: 192.168.4.2
I (25272) CONNECTION: SYSTEM_EVENT_AP_STAIPASSIGNED
I (30582) SENSOR: Read temperature: 26.0, humidity: 51.6
I (40582) SENSOR: Read temperature: 25.9, humidity: 51.6
TIMEOUT: 75E (50582) SENSOR: DHT22_ERROR_TIMEOUT
I (60582) SENSOR: Read temperature: 25.8, humidity: 51.9
>>> HomeKit: Got new client connection: 55 from 192.168.4.2
>>> homekit_client_process: [Client 55] Got 129 incomming data
homekit_server_on_url url: /pair-setup
>>> homekit_server_on_pair_setup: Pair Setup
>>> homekit_server_on_pair_setup: Free heap: 196584
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 0 value (1 bytes): \x00
>>> tlv_debug: Type 6 value (1 bytes): \x01
>>> HomeKit: [Client 55] Pair Setup Step 1/3
>>> homekit_server_on_pair_setup: Free heap: 196528
>>> crypto_srp_new: Initializing SRP
>>> homekit_server_on_pair_setup: [Client 55] Initializing crypto
>>> homekit_server_on_pair_setup: Free heap: 195876
>>> homekit_server_on_pair_setup: [Client 55] Using user-specified password: 385-29-023
>>> crypto_srp_init: Generating salt
>>> crypto_srp_init: Setting SRP username
>>> crypto_srp_init: Setting SRP params
>>> crypto_srp_init: Setting SRP password
>>> crypto_srp_init: Getting SRP verifier
>>> crypto_srp_init: Setting SRP verifier
>>> crypto_srp_get_public_key: Calculating public key
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 3 value (384 bytes): \x91\x18\xFD\x85*\xAFI\xE1\x0A0C\xAF\xCD\xBC\xFB\xAA)\x0BH\x1F\\\x82\xA7\x02E\x14\x9A\x17\xDE\xFE\xA9S\x1Aw\x93\xB6\x8D\xF3q\x07*\x9D\x80\xB8y\x92\x9D\xDF\x10F\xC0\x9D\x0B\xAC\xD1\xDA\xBD\x13\xDC\xFA\x92\xF5\xABF$\xFF\x91G\xF8\x00\xC9\xFD%\xA2\xD4\xCA\xFE\x98\xD46J\x13\xCE\xB1*\xFAXkHP\xD3\x85\xB4[\x15\xC5\xFF\x91:s\x8Do\xBFg&\xF7\xD8wC:\xFA\x17\xF2-q\xDB\xAA$\xCA\xDDO\xAA\x96l\xBC\x9F\x00 m\xEEZ_\xD3J\x84\xE9\x15\xC5\xACuJ\xA4\xDF\x80]L\x09@\xAD\xF6\xAB\x82\x8FV_\xAC\xDE\xC9{\xBC\xD8K\xC3\xDE\xF2\xDF\x87\xFF\xF9B\xECc?\xC9\xDE\x1B\xF5\xA6\xF7T\xEB\x0A\x0C\xB3\x04q\xCD\xEBk\xD6\xA1-\xEC\xB1\xC6\xFF\x1D\xD3\xD0\x88\xA6\xA9\xF1B\xBF\xBC\x95rF\x05\xBE/\x1DO\x07\xBBe\x1E\xFE\xE7\xF55aL\xB7\xE6\xAF\x1A\x0F \x11\xB2QK:=]@M\x99\xA0\xB6\x98\x06^I@J\xD1-\x87\x84\x9C\x86\xE4\x0D\xB9\xA65F\x19\x0B"\x83\xF2\x14x\x19\xA6\x87\xB8\xC4D\xF2\x01\x02\x0BT#\x00?\xB6\xA6\xD5\xF1\x07\xEDpdG\x80\x08}l4\xFF\x8B\x9Cg\xE1\xA14\xD6-\xCA\xA2\x12\x1B\xDBY\x1B\x88\xAA\x1A\x86\\\x05N\x1B\xD0\xFA\x9B\xB3)\xFF\x9C\x1E\xD9\x01\xB5\xB9\xCF$U"\x89Ox\xBC\xD4\\!\xD9\xFA\xA9\x82\xF0x\x1E\xC3\xF6\xBA!]\xC1\x88\xEE2yw\xEC\xFC\x0A\xDA\x0D9|\x19`\xE6\xF0\x82\xC5\x87\xF7\x92\xD7\xCF\x11\xE3(\x15
>>> tlv_debug: Type 2 value (16 bytes): T\xCA\x13\xEF\x10h"eS\xCE<q\x88>\xC9\xE5
>>> tlv_debug: Type 6 value (1 bytes): \x02
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 409\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x03\xFF\x91\x18\xFD\x85*\xAFI\xE1\x0A0C\xAF\xCD\xBC\xFB\xAA)\x0BH\x1F\\\x82\xA7\x02E\x14\x9A\x17\xDE\xFE\xA9S\x1Aw\x93\xB6\x8D\xF3q\x07*\x9D\x80\xB8y\x92\x9D\xDF\x10F\xC0\x9D\x0B\xAC\xD1\xDA\xBD\x13\xDC\xFA\x92\xF5\xABF$\xFF\x91G\xF8\x00\xC9\xFD%\xA2\xD4\xCA\xFE\x98\xD46J\x13\xCE\xB1*\xFAXkHP\xD3\x85\xB4[\x15\xC5\xFF\x91:s\x8Do\xBFg&\xF7\xD8wC:\xFA\x17\xF2-q\xDB\xAA$\xCA\xDDO\xAA\x96l\xBC\x9F\x00 m\xEEZ_\xD3J\x84\xE9\x15\xC5\xACuJ\xA4\xDF\x80]L\x09@\xAD\xF6\xAB\x82\x8FV_\xAC\xDE\xC9{\xBC\xD8K\xC3\xDE\xF2\xDF\x87\xFF\xF9B\xECc?\xC9\xDE\x1B\xF5\xA6\xF7T\xEB\x0A\x0C\xB3\x04q\xCD\xEBk\xD6\xA1-\xEC\xB1\xC6\xFF\x1D\xD3\xD0\x88\xA6\xA9\xF1B\xBF\xBC\x95rF\x05\xBE/\x1DO\x07\xBBe\x1E\xFE\xE7\xF55aL\xB7\xE6\xAF\x1A\x0F \x11\xB2QK:=]@M\x99\xA0\xB6\x98\x06^I@J\xD1-\x87\x84\x9C\x86\xE4\x03\x81\x0D\xB9\xA65F\x19\x0B"\x83\xF2\x14x\x19\xA6\x87\xB8\xC4D\xF2\x01\x02\x0BT#\x00?\xB6\xA6\xD5\xF1\x07\xEDpdG\x80\x08}l4\xFF\x8B\x9Cg\xE1\xA14\xD6-\xCA\xA2\x12\x1B\xDBY\x1B\x88\xAA\x1A\x86\\\x05N\x1B\xD0\xFA\x9B\xB3)\xFF\x9C\x1E\xD9\x01\xB5\xB9\xCF$U"\x89Ox\xBC\xD4\\!\xD9\xFA\xA9\x82\xF0x\x1E\xC3\xF6\xBA!]\xC1\x88\xEE2yw\xEC\xFC\x0A\xDA\x0D9|\x19`\xE6\xF0\x82\xC5\x87\xF7\x92\xD7\xCF\x11\xE3(\x15\x02\x10T\xCA\x13\xEF\x10h"eS\xCE<q\x88>\xC9\xE5\x06\x01\x02
>>> homekit_client_process: [Client 55] Finished processing
>>> homekit_client_process: [Client 55] Got 582 incomming data
homekit_server_on_url url: /pair-setup
>>> homekit_server_on_pair_setup: Pair Setup
>>> homekit_server_on_pair_setup: Free heap: 193668
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x03
>>> tlv_debug: Type 3 value (384 bytes): \x96\x89\x18-'\xF515\x8D\x1D\x00\xCF\xF1\x13\xD2P\x08\x06\x97\xE6oy.\xC3\x95\x1E\xD3\xA8y[\xE7\x09\xB8\x02]\xE0D\x04\xE3\xFF<\x11\x1B\xD5\x92\xF8q\xC1\x18d\x0E\xE2Ss\xF8\xC0\x8E\xD0.\x08\xD4~\x90\xB4H\xEC\x93Vc`\xD6\x0C\x97~\xFBU\xDA#BF\x902\xDE}\xB3\x1D\x86\xDD\xBE\x10\xDB\xCF\xC75\xB9\xFE\x0E\xF5;\xCD\xFF|Es\xD7\xA1+a|\x93x\xD1\x1A\x9Fl\xE5o\x1A\x81\xE6H\xE4\xD4\x13\x05\xD2P\xCEq1>\xA5`\x17V\xDFTP\x86\x07\x90^\xB4U\xF5V\xF9\xF4 9\xB4:F\x09\x86&\xB7&\x84t}!\xDC\x11l\xC6\x92m(\x02\xB4c\x05\xA8T=;[\xF9\x01\xB6oJ\xEC.\xCE3t\xF4\xBB\xEFU\x96C\xFB)s\x8D\xCA\xCE\x1A\xDA\xA6b\x05\xA2\xB1\x86\xD4\x0Bp\xEF0\x15\xDE\x126\x13a\xA3\xE6\xDD\x80Ez\xC8\x1B\xD3\xD6\xA6f\x06W\xA4N\x815\xDD\xE5i\x08\xD8'\xC7\xE9Zm\x127a\xC2\x95\x81\xA0\xF4\xA0\x0A\xE0j\xA1\x00|\xDB\xC7 \xF1\xC3\x04\x10\x1C\xFDy\xE2\x04*\xA5\xD7\xCC\x9CX\x02\xFDC\xA8\xD7v\xBE\xBFOZ\xC5B\x9B\xEA.x\xF7\xDD\xCDr\x8F\xA9\xC2!\x1E\xAA\xE9,\x0F\xED\xC4\x87\x93\xBE\xCBbt~S\xBFA\xE2S-\x8E,,'\xEC\xEC\x9F\xBD\xCA\xE2\xFF\xFA\xC4$9\x93}h4\x05\x1F\x18\x05\xC5\xBA\x0DkOZR\x9Ek\x03S\x19\xE8+x\x87p\x88\xE1m\xF8\xAF\xC8\x8B\x0EM\x1FzP\x82\x9D<\xCF\xC9\xAC
>>> tlv_debug: Type 4 value (64 bytes): \x8DN3(\x8C=\x0E\x97\x96A&\x16'\xE2u\xF5=\xAE\x10\x11\xEAA.X\xFB\xA5*\xB4\x86T\x89\xEB\x10;\xC9\x8B\xD4k\x0F;\xA7\x0D\xB9\xB7mN\x0Aj\xA1\x9A2\x96\xDFO\xFB\x07\xBFb\x1D\xBAe\x12\xB6
>>> HomeKit: [Client 55] Pair Setup Step 2/3
>>> homekit_server_on_pair_setup: Free heap: 193140
>>> homekit_server_on_pair_setup: [Client 55] Computing SRP shared secret
>>> homekit_server_on_pair_setup: Free heap: 193140
I (70582) SENSOR: Read temperature: 25.7, humidity: 52.0
>>> homekit_server_on_pair_setup: [Client 55] Verifying peer's proof
>>> homekit_server_on_pair_setup: Free heap: 193452
>>> homekit_server_on_pair_setup: [Client 55] Generating own proof
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x04
>>> tlv_debug: Type 4 value (64 bytes): G\xAB?X\xC8MR\xE1c\xAC\xAB\x83\xA1h\xBDY\xE8\xCA9l\x97B\xF4;\x8C\x86OJ\x17\x8D\xE0V8ic\xCC\x1A\xFB\x92c\x8DR?\x01p\xED\x00f\xE5\x14\xC9\xCB\x896XW@\x1EKVr\x92\x1D\x94
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 69\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x06\x01\x04\x04@G\xAB?X\xC8MR\xE1c\xAC\xAB\x83\xA1h\xBDY\xE8\xCA9l\x97B\xF4;\x8C\x86OJ\x17\x8D\xE0V8ic\xCC\x1A\xFB\x92c\x8DR?\x01p\xED\x00f\xE5\x14\xC9\xCB\x896XW@\x1EKVr\x92\x1D\x94
>>> homekit_client_process: [Client 55] Finished processing
>>> homekit_client_process: [Client 55] Got 284 incomming data
homekit_server_on_url url: /pair-setup
>>> homekit_server_on_pair_setup: Pair Setup
>>> homekit_server_on_pair_setup: Free heap: 194280
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 5 value (154 bytes): \x92>\x85\xEA#3\x14\x81=U\xFA\x8A_\xB0\xC2\x08\xB8\xE7\xB1#\xA3\xD7\x12\xF6/\xA2\xE8\xAF\xDB\xD7\x9C\xBF\xA2\x08\x08"\xC2]|\xD9QW\x07\xE5\xD0@\x16\x15\x01{4\xF0\xEF\x0A\xBD\xB7\xB8\x0D\x12\x0C\x8CUY\x14y\xAB\x12\x94\xE2dG\xB7\x07#[\xDC\x8C\x86\x00\x93\xCBwY\xA8\x84\x1F\xC3\xE3\xB2\x1A\xD579\x08>W\xCD\xE7 \xEA\x1Eyv\xBA\xF4\xC1\x15D\xCE#\xBC\x17Z}'\xFA1\xDEB?\xE2\x92\xF7\xAE\xF5\x94V9\xEE\xBCda\xBD-O\x16\x95\x89\x88\xFA\x08[\x9B\x9Ed6\xC09\x01m{\x1A\x9E\xE6
>>> tlv_debug: Type 6 value (1 bytes): \x05
>>> HomeKit: [Client 55] Pair Setup Step 3/3
>>> homekit_server_on_pair_setup: Free heap: 193864
>>> homekit_server_on_pair_setup: [Client 55] Calculating shared secret
>>> homekit_server_on_pair_setup: [Client 55] Decrypting payload
>>> homekit_server_on_pair_setup: [Client 55] Importing device public key
>>> homekit_server_on_pair_setup: [Client 55] Calculating DeviceX
>>> homekit_server_on_pair_setup: [Client 55] Verifying device signature
>>> HomeKit: Added pairing with 166DDF3F-ACD4-42A7-B075-085D1A678228
>>> homekit_server_on_pair_setup: [Client 55] Exporting accessory public key
>>> homekit_server_on_pair_setup: [Client 55] Calculating AccessoryX
>>> homekit_server_on_pair_setup: [Client 55] Generating accessory signature
>>> homekit_server_on_pair_setup: Free heap: 193948
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 1 value (17 bytes): 49:BE:35:35:19:72
>>> tlv_debug: Type 3 value (32 bytes): /\xE4\x0A\x99\xBE\x8E\x9A\xC2\xE4\xA7\x8AC\xDF\x0D\xEDL\x0DZ>>\xF7>\xA6iad V\xA2{<\xD7
>>> tlv_debug: Type 10 value (64 bytes): \xF5\xD8U\xACF,\x05\xD9\x19\x08l\xBD\x8F\x1E\xDD-\xCE\xFA\x0A\xA8\x1F"\x00\x8AX\\\x89\x8BbS\xF6*\x93\x1C8|\x87\xCE4k\xC3\x95\x17ve\xB7\xFB*\xE1\xA2\x16\xF2w\xCD8o\xDF\xDA\x02\xE9\xA5\xBE\xF1\x02
>>> homekit_server_on_pair_setup: [Client 55] Encrypting response
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x06
>>> tlv_debug: Type 5 value (135 bytes): \xB4\xEEl\xA7\xC8\xDD\xE1\xAB\xDE6\xDD\x9F\x92\\/\x90\xA8\xED\xB8\xE9RH\xBA\xD5\x0B\x92\x9C[E@G\xC0\x1C\x0C\xF3\xCE\xBEA\xA2T@\x9A\x13\xA2\x1E3\x08\xD1:\xB8\xD1S\xCD\xF0l\x80\xDDI\x0Dk\xDDS\xDE1\xF9\xDB\x8B\xAE\xB5\x1C\x07M\xA3\x97Y\xB8\xD4g\xD2\xE9\xE4\xC9c(\xE5Dt\x1A\x99\x85(K\xF3`M\xDEBY\xB7\x8A\x0A\xB7\xBB~\x04\xD1\xB9\xC4\xF49\xD7\x002\xF3[\x03&{BX\\QN'\xDF\xDEw\xB1\xF0\x90(\xA9$\xDA{
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 140\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x06\x01\x06\x05\x87\xB4\xEEl\xA7\xC8\xDD\xE1\xAB\xDE6\xDD\x9F\x92\\/\x90\xA8\xED\xB8\xE9RH\xBA\xD5\x0B\x92\x9C[E@G\xC0\x1C\x0C\xF3\xCE\xBEA\xA2T@\x9A\x13\xA2\x1E3\x08\xD1:\xB8\xD1S\xCD\xF0l\x80\xDDI\x0Dk\xDDS\xDE1\xF9\xDB\x8B\xAE\xB5\x1C\x07M\xA3\x97Y\xB8\xD4g\xD2\xE9\xE4\xC9c(\xE5Dt\x1A\x99\x85(K\xF3`M\xDEBY\xB7\x8A\x0A\xB7\xBB~\x04\xD1\xB9\xC4\xF49\xD7\x002\xF3[\x03&{BX\\QN'\xDF\xDEw\xB1\xF0\x90(\xA9$\xDA{
>>> HomeKit: Configuring mDNS
>>> homekit_setup_mdns: Accessory Setup ID = 2A5B
>>> HomeKit: [Client 55] Successfully paired
>>> homekit_client_process: [Client 55] Finished processing
>>> HomeKit: [Client 55] Closing client connection
>>> HomeKit: Got new client connection: 55 from 192.168.4.2
>>> homekit_client_process: [Client 55] Got 162 incomming data
homekit_server_on_url url: /pair-verify
>>> homekit_server_on_pair_verify: HomeKit Pair Verify
>>> homekit_server_on_pair_verify: Free heap: 196300
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x01
>>> tlv_debug: Type 3 value (32 bytes): \x18\x1Fo\x82\xD4\xCBv\x02\x10F\xAA\xE1\x8E\xF7\xBB\xBB\x1E\xE5L\xBC\xDC@\x81\xF1k)\xD4\x925\x8F\x05\x0B
>>> HomeKit: [Client 55] Pair Verify Step 1/2
>>> homekit_server_on_pair_verify: [Client 55] Importing device Curve25519 public key
>>> homekit_server_on_pair_verify: [Client 55] Generating accessory Curve25519 key
>>> homekit_server_on_pair_verify: [Client 55] Exporting accessory Curve25519 public key
>>> homekit_server_on_pair_verify: [Client 55] Generating Curve25519 shared secret
>>> homekit_server_on_pair_verify: [Client 55] Generating signature
>>> homekit_server_on_pair_verify: [Client 55] Generating proof
>>> homekit_server_on_pair_verify: [Client 55] Encrypting response
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x02
>>> tlv_debug: Type 3 value (32 bytes): 9\xFBJ\xC2\x0D"\xD2\xF1\x197\x05\xC7\x97-5J\xCA\xFD\xFD\xE6n\x19#\xE8\x92\x8B\xFC\xA8\xBD\xD4\xC7g
>>> tlv_debug: Type 5 value (101 bytes): /"\xB2\x1C\x09\xB2\xA3.8[\xD2\xFE\xF0\xB4\xC8\x1ES\x0F\x19\x91\xDF\xDA3\xFCg\x03\xFF\x12#\x83\xF7\x0A/\xA45%+\xCD\xDF'\xA2x\xA2V\xDAX\x9F0/4\x08\x15n\x07\x89\xC6\x88\xE2\x9E\x05hk\xE8\xE8\xCC\xF8\x95a\xEC=\xDD\x13O\x9C\x97]\xE7\x0B\xBE\x977Z.\xAB7\xC1\xB0Wie\xD8\xAD\x11\x19$\xF24lL\xD5
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 140\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x06\x01\x02\x03 9\xFBJ\xC2\x0D"\xD2\xF1\x197\x05\xC7\x97-5J\xCA\xFD\xFD\xE6n\x19#\xE8\x92\x8B\xFC\xA8\xBD\xD4\xC7g\x05e/"\xB2\x1C\x09\xB2\xA3.8[\xD2\xFE\xF0\xB4\xC8\x1ES\x0F\x19\x91\xDF\xDA3\xFCg\x03\xFF\x12#\x83\xF7\x0A/\xA45%+\xCD\xDF'\xA2x\xA2V\xDAX\x9F0/4\x08\x15n\x07\x89\xC6\x88\xE2\x9E\x05hk\xE8\xE8\xCC\xF8\x95a\xEC=\xDD\x13O\x9C\x97]\xE7\x0B\xBE\x977Z.\xAB7\xC1\xB0Wie\xD8\xAD\x11\x19$\xF24lL\xD5
>>> homekit_client_process: [Client 55] Finished processing
>>> homekit_client_process: [Client 55] Got 251 incomming data
homekit_server_on_url url: /pair-verify
>>> homekit_server_on_pair_verify: HomeKit Pair Verify
>>> homekit_server_on_pair_verify: Free heap: 196012
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 5 value (120 bytes): \x98d\x18C\x1D\x1A\xB0U\xB09\xD3\x88S\xBE\x90ghUsQ\xE6\xC1\x00\x99\x80\xBC/\x81\xA9\xC0\xE2\x0D\xD0D\xF4\x99\xE7\xD1YY\xFE%}\xC7d\x0C"\x0C\x985\xC65 \x0B\x9B\xEB\xB3pF\xED\xD3\x16-%\xB1\xE6\xF9\xB2\x0Fn\xA8\xF6\xD1\xE4\xA2\x01n\xEDd\xF2\xA1/}\x93\xB8\xB50\x94V\x8FB!\xD2B\x04\xE7\xD6\xAD`N\xB9\xA1f\xEE\xA0\xB4,\x8E\\\xCA\xE8\x1Bz\xD2eX\xE4\x9D\xBE
>>> tlv_debug: Type 6 value (1 bytes): \x03
>>> HomeKit: [Client 55] Pair Verify Step 2/2
>>> homekit_server_on_pair_verify: [Client 55] Decrypting payload
>>> homekit_server_on_pair_verify: [Client 55] Searching pairing with 166DDF3F-ACD4-42A7-B075-085D1A678228
>>> HomeKit: [Client 55] Found pairing with 166DDF3F-ACD4-42A7-B075-085D1A678228
>>> homekit_server_on_pair_verify: [Client 55] Verifying device signature
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x04
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 3\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x06\x01\x04
>>> HomeKit: [Client 55] Verification successful, secure session established
>>> homekit_client_process: [Client 55] Finished processing
>>> homekit_client_process: [Client 55] Got 82 incomming data
>>> homekit_client_process: [Client 55] Decrypting data
>>> homekit_client_process: [Client 55] Decrypted 64 bytes, available 0
Decrypted data (64 bytes): "GET /accessories HTTP/1.1\x0D\x0AHost: killogarage._hap._tcp.local\x0D\x0A\x0D\x0A"
homekit_server_on_url url: /accessories
>>> HomeKit: [Client 55] Get Accessories
>>> homekit_server_on_get_accessories: Free heap: 196456
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/hap+json\x0D\x0ATransfer-Encoding: chunked\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A
>>> client_send: [Client 55] Sending payload: 3ea\x0D\x0A{"accessories":[{"aid":1,"services":[{"iid":1,"type":"0000003E-0000-1000-8000-0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":2,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"killogarage"},{"aid":1,"iid":3,"type":"00000020-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Manufacturer","format":"string","value":"killobatt"},{"aid":1,"iid":4,"type":"00000030-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Serial Number","format":"string","value":"237A2BAB119E"},{"aid":1,"iid":5,"type":"00000021-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Model","format":"string","value":"killogarage"},{"aid":1,"iid":6,"type":"00000052-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Firmware Revision","format":"string","value":"1.0"},{"aid":1,"iid":7,"type":"00000014-0000-1000-8000-0026BB765291","perms":["pw"],"description":"Identify","format":"bool"}]},{"iid":8,"type":\x0D\x0A
>>> client_send: [Client 55] Sending payload: 3ff\x0D\x0A"00000041-0000-1000-8000-0026BB765291","hidden":false,"primary":true,"characteristics":[{"aid":1,"iid":9,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"Garage opener"},{"aid":1,"iid":10,"type":"0000000E-0000-1000-8000-0026BB765291","perms":["pr","ev"],"ev":false,"description":"Current Door State","format":"uint8","minValue":0,"maxValue":4,"minStep":1,"valid-values":[0,1,2,3,4],"value":0},{"aid":1,"iid":11,"type":"00000032-0000-1000-8000-0026BB765291","perms":["pr","pw","ev"],"ev":false,"description":"Target Door State","format":"uint8","minValue":0,"maxValue":1,"minStep":1,"valid-values":[0,1],"value":0},{"aid":1,"iid":12,"type":"00000024-0000-1000-8000-0026BB765291","perms":["pr","ev"],"ev":false,"description":"Obstruction Detected","format":"bool","value":false}]},{"iid":13,"type":"00000043-0000-1000-8000-0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":14,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"]\x0D\x0A
>>> client_send: [Client 55] Sending payload: 3ff\x0D\x0A,"description":"Name","format":"string","value":"Front light"},{"aid":1,"iid":15,"type":"00000025-0000-1000-8000-0026BB765291","perms":["pr","pw","ev"],"ev":false,"description":"On","format":"bool","value":false}]},{"iid":16,"type":"0000008A-0000-1000-8000-0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":17,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"Temperature sensor"},{"aid":1,"iid":18,"type":"00000011-0000-1000-8000-0026BB765291","perms":["pr","ev"],"ev":false,"description":"Current Temperature","format":"float","unit":"celsius","minValue":6.06114274642742e-39,"maxValue":1.69625058101164e-36,"minStep":-1.62387431414683e-29,"value":25.7000007629395}]},{"iid":19,"type":"00000082-0000-1000-8000-0026BB765291","hidden":false,"primary":false,"characteristics":[{"aid":1,"iid":20,"type":"00000023-0000-1000-8000-0026BB765291","perms":["pr"],"description":"Name","format":"string","value":"Humidity sensor"},{"aid":1,"iid"\x0D\x0A
>>> client_send: [Client 55] Sending payload: 10d\x0D\x0A:21,"type":"00000010-0000-1000-8000-0026BB765291","perms":["pr","ev"],"ev":false,"description":"Current Relative Humidity","format":"float","unit":"percentage","minValue":1.94711132195056e+34,"maxValue":-2.00439882278442,"minStep":4.33645168083315e-36,"value":52}]}]}]}\x0D\x0A
>>> client_send: [Client 55] Sending payload: 0\x0D\x0A\x0D\x0A
>>> homekit_client_process: [Client 55] Finished processing
>>> homekit_client_process: [Client 55] Got 184 incomming data
>>> homekit_client_process: [Client 55] Decrypting data
>>> homekit_client_process: [Client 55] Decrypted 166 bytes, available 0
Decrypted data (166 bytes): "POST /pairings HTTP/1.1\x0D\x0AHost: killogarage._hap._tcp.local\x0D\x0AContent-Length: 44\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0A\x0D\x0A\x00\x01\x04\x06\x01\x01\x01$166DDF3F-ACD4-42A7-B075-085D1A678228"
homekit_server_on_url url: /pairings
>>> homekit_server_on_pairings: HomeKit Pairings
>>> homekit_server_on_pairings: Free heap: 195600
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 0 value (1 bytes): \x04
>>> tlv_debug: Type 6 value (1 bytes): \x01
>>> tlv_debug: Type 1 value (36 bytes): 166DDF3F-ACD4-42A7-B075-085D1A678228
>>> HomeKit: [Client 55] Remove Pairing
>>> HomeKit: Removed pairing with 166DDF3F-ACD4-42A7-B075-085D1A678228
>>> HomeKit: Last admin pairing was removed, enabling pair setup
>>> HomeKit: Configuring mDNS
>>> homekit_setup_mdns: Accessory Setup ID = 2A5B
>>> send_tlv_response: [Client 55] Sending TLV response
>>> tlv_debug: Got following TLV values:
>>> tlv_debug: Type 6 value (1 bytes): \x02
>>> client_send: [Client 55] Sending payload: HTTP/1.1 200 OK\x0D\x0AContent-Type: application/pairing+tlv8\x0D\x0AContent-Length: 3\x0D\x0AConnection: keep-alive\x0D\x0A\x0D\x0A\x06\x01\x02
>>> homekit_client_process: [Client 55] Finished processing
>>> HomeKit: [Client 55] Closing client connection
TIMEOUT: 75E (80582) SENSOR: DHT22_ERROR_TIMEOUT
I (90582) SENSOR: Read temperature: 25.7, humidity: 52.3
I (100582) SENSOR: Read temperature: 25.6, humidity: 52.4
I (110582) SENSOR: Read temperature: 25.6, humidity: 52.7

I initially assumed I did something wrong in the config, but when I create the same accessory config in the Homekit Accessory Simulator, iPhone is able to pair and control the simulated accessory.

maximkulkin commented 4 years ago

Ok, I have built accessory with your services and it worked fine.

Then I decoded your accessories JSON and found this problem with CURRENT_TEMPERATURE characteristic:

            {
              "aid": 1,
              "iid": 18,
              "type": "00000011-0000-1000-8000-0026BB765291",
              "perms": [
                "pr",
                "ev"
              ],
              "ev": false,
              "description": "Current Temperature",
              "format": "float",
              "unit": "celsius",
              "minValue": 6.06114274642742e-39,
              "maxValue": 1.69625058101164e-36,
              "minStep": -1.62387431414683e-29,
              "value": 25.7000007629395
            }

Notice minValue, maxValue and minStep are all messed up (and thus current value is invalid). Same problem with CURRENT_HUMIDITY characteristic. You're probably initializing them in non-static context, and those characteristics need min/maxValue+minStep, which are defined as pointers (so you can opt in/out for those attributes), thus they are initialized with pointers to one-element arrays that are allocated on stack. Thus, when you copy data to proper structures, pointers remain pointers on stack and when you exit that subroutine they get garbage data.

To avoid that you should either initialize those characteristics in static context (e.g. global variable) thus those pointers will remain intact; or use NEW_HOMEKIT_CHARACTERISTIC() which will create A PROPER copy of characteristic (event if it is defined on stack).

killobatt commented 4 years ago

That worked. Thanks!