maximkulkin / esp-homekit-demo

Demo of Apple HomeKit accessory server library
MIT License
803 stars 233 forks source link

Index Label in a Stateless programmable switch - buttons #434

Open rubensx opened 1 year ago

rubensx commented 1 year ago

Hi Maxim! thanks for sharing your knowledge!

I have a strange result creating 8 stateless programmable buttons, my code:

homekit_accessory_t *accessories[] = {
 HOMEKIT_ACCESSORY(.id = 1, .category = homekit_accessory_category_switch, .services=(homekit_service_t*[]) {
      HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics=(homekit_characteristic_t*[]) {
        &name,
      HOMEKIT_CHARACTERISTIC(NAME, "Buttons_plate"),
                HOMEKIT_CHARACTERISTIC(MANUFACTURER, ACCESSORY_MANUFACTURER),
                &serial_number,
                HOMEKIT_CHARACTERISTIC(MODEL, "Buttons"),
                HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0.1"),
                HOMEKIT_CHARACTERISTIC(IDENTIFY, button_identify),
      NULL
    }),
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button01"),
      &button01_switch_event1,
      NULL
    }),
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button02"),
      &button02_switch_event2,
      NULL
    }),          
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button03"),
      &button03_switch_event3,
      NULL
    }),    
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button04"),
      &button04_switch_event4,
      NULL
    }), 
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button05"),
      &button05_switch_event5,
      NULL
    }),     
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=true, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button06"),
      &button06_switch_event6,
      NULL
    }),  
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button07"),
      &button07_switch_event7,
      NULL
    }),      
      HOMEKIT_SERVICE(STATELESS_PROGRAMMABLE_SWITCH, .primary=false, .characteristics=(homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Button08"),
      &button08_switch_event8,
      NULL
    }),  
    NULL
  }),
  NULL
 };

In this example, 8 buttos in the same id (because I've got some switches in the scketch after this). All light number an order are ok but I can't make the buttons order in hight place on iOS.

Example "button01" has

Single Click Double Click Long Press

In each category you can make a "scene" or automation shortcut, but when I get on the "single click" in "button01" sometimes I see the single click for button04 or other button in ramdom position (weird).

In my google search an others I found a characteristc who I never see a sketch...

"Linking Stateless Programmable Switch with a Service Label" somenting about "Service Label Index" to order these buttons when iOS populate on the screen

Someone can help me to create or explain to me how this work??

maybe a:

homekit_characteristic_t label = HOMEKIT_CHARACTERISTIC_(SERVICE_LABEL_INDEX, LABEL_INDEX);

??

renandw commented 1 year ago

Have you checked the pins you are using? Are you using ESP8266 or ESP32?