HSM Arm Changes Logic Help

I'm writing a SecurityKeypad driver. I have HSM configured to allow arming and disarming from the keypad. When I use the HSM GUI and tell it to Arm Away, I receive an arm command correctly.

Then 6 seconds later, it sends another command to arm away. Does my driver need to send a SecurityKeypad event of "armed away" after 6 seconds?

I figured it out after some tries - Yes, the driver needs to send a securityKeypad event:

sendEvent(name: "securityKeypad", value: "armed away")

I can't figure out the proper way to signal to HSM that a keypad is requesting to disarm. Any one have the details for this?

Is there any good documentation on the HSM interface and sequence diagrams for arming/disarming from the Hubitat docs?

Here are my logs from my App and driver.

First, the legend:
app:1371 = Front Door Keypad Dashboard
app:1374 = HSM
app:1378 = Bedroom Keypad Dashboard
dev:1141 = WallKeypadCase (aka Bedroom)
dev:1156 = WallKeypad MATTER (aka Front Door)

app:1371 2026-09-22 8:38:46.503 am debug Published controls dashboard payload={"title":"Controls","items":\[{"id":"slot_1","label":"pseudoGDO 2","value":"Closed","state":"ok","kind":"barrier","primary":true,"detail":false},{"id":"slot_2","label":"Office Smart Outlet","value":"Off","state":"ok","kind":"switch","primary":true,"detail":false},{"id":"slot_3","label":"pseudoBulb","value":"100%","state":"info","kind":"dimmer","primary":true,"detail":true,"level":100},{"id":"slot_4","label":"pseudoRain","value":"On","state":"info","kind":"switch","primary":true,"detail":false}\]}
dev:1156 2026-09-22 8:38:46.496 am debug Published controls dashboard \[dashboard_id:controls, device_id:front_door, items:\[\[detail:false, id:slot_1, kind:barrier, label:pseudoGDO 2, primary:true, state:ok, value:Closed\], \[detail:false, id:slot_2, kind:switch, label:Office Smart Outlet, primary:true, state:ok, value:Off\], \[detail:true, id:slot_3, kind:dimmer, label:pseudoBulb, level:100, primary:true, state:info, value:100%\], \[detail:false, id:slot_4, kind:switch, label:pseudoRain, primary:true, state:info, value:On\]\], title:Controls\]
dev:1156 2026-09-22 8:38:46.491 am debug LAN push dashboard status=200
app:1378 2026-09-22 8:38:46.172 am debug Published controls dashboard payload={"title":"Controls","items":\[{"id":"slot_1","label":"Office Smart Outlet","value":"Off","state":"ok","kind":"switch","primary":true,"detail":false},{"id":"slot_2","label":"pseudoGDO","value":"Closed","state":"ok","kind":"barrier","primary":true,"detail":false},{"id":"slot_3","label":"pseudoThermostat","value":"Unsupported","state":"offline","kind":"unsupported","primary":false,"detail":false}\]}
dev:1141 2026-09-22 8:38:46.165 am debug Published controls dashboard \[dashboard_id:controls, device_id:Bedroom, items:\[\[detail:false, id:slot_1, kind:switch, label:Office Smart Outlet, primary:true, state:ok, value:Off\], \[detail:false, id:slot_2, kind:barrier, label:pseudoGDO, primary:true, state:ok, value:Closed\], \[detail:false, id:slot_3, kind:unsupported, label:pseudoThermostat, primary:false, state:offline, value:Unsupported\]\], title:Controls\]
dev:1141 2026-09-22 8:38:46.161 am debug LAN push dashboard status=200
app:1371 2026-09-22 8:38:46.123 am debug Published dashboard id=hsm, payload={"title":"Home Summary","items":\[{"label":"Temp","value":"72\\u00b0F","state":"info"},{"label":"Power","value":"0W","state":"ok"},{"label":"Lights","value":"3 on","state":"info"},{"label":"Doors","value":"All closed","state":"ok"},{"label":"Locks","value":"All locked","state":"ok"},{"label":"Leak","value":"1 wet","state":"alert"},{"label":"Mode","value":"Day","state":"info"},{"label":"Security","value":"Disarmed","state":"ok"}\]}
dev:1156 2026-09-22 8:38:46.114 am debug Published hsm dashboard \[dashboard_id:hsm, device_id:front_door, items:\[\[label:Temp, state:info, value:72°F\], \[label:Power, state:ok, value:0W\], \[label:Lights, state:info, value:3 on\], \[label:Doors, state:ok, value:All closed\], \[label:Locks, state:ok, value:All locked\], \[label:Leak, state:alert, value:1 wet\], \[label:Mode, state:info, value:Day\], \[label:Security, state:ok, value:Disarmed\]\], title:Home Summary\]
dev:1156 2026-09-22 8:38:46.110 am debug LAN push dashboard status=200
dev:1141 2026-09-22 8:38:45.810 am debug Published state \[device_id:Bedroom, ready:true, armed_state:disarmed\]
dev:1141 2026-09-22 8:38:45.805 am debug LAN push state status=200
app:1378 2026-09-22 8:38:45.790 am debug Published dashboard id=bedroom, payload={"title":"BEDROOM","items":\[{"label":"Doors","value":"All closed","state":"ok"},{"label":"Mode","value":"Day","state":"info"},{"label":"Security","value":"Disarmed","state":"ok"}\]}
dev:1141 2026-09-22 8:38:45.784 am debug Published bedroom dashboard \[dashboard_id:bedroom, device_id:Bedroom, items:\[\[label:Doors, state:ok, value:All closed\], \[label:Mode, state:info, value:Day\], \[label:Security, state:ok, value:Disarmed\]\], title:BEDROOM\]
dev:1141 2026-09-22 8:38:45.781 am debug LAN push dashboard status=200
app:1371 2026-09-22 8:38:45.765 am debug Dashboard source event hsmStatus=disarmed
app:1371 2026-09-22 8:38:45.762 am debug HSM status=disarmed keypad_state=disarmed
dev:1156 2026-09-22 8:38:45.758 am debug Published state \[device_id:front_door, ready:true, armed_state:disarmed\]
dev:1156 2026-09-22 8:38:45.754 am debug LAN push state status=200
dev:1141 2026-09-22 8:38:45.638 am debug MQTT topic=keypad/Bedroom/status, payload={"device_id":"Bedroom","ready":true,"armed_state":"disarmed","wifi_connected":true,"mqtt_connected":true,"ip":"192.168.7.184","firmware":"0.2.6","topic_prefix":"keypad/Bedroom","last_request_id":"Bedroom-000009"}
app:1378 2026-09-22 8:38:45.506 am debug Dashboard source event hsmStatus=disarmed
app:1378 2026-09-22 8:38:45.503 am debug HSM status=disarmed keypad_state=disarmed
dev:1141 2026-09-22 8:38:45.495 am debug Published state \[device_id:Bedroom, ready:true, armed_state:disarmed\]
dev:1141 2026-09-22 8:38:45.492 am debug LAN push state status=200
dev:1156 2026-09-22 8:38:45.455 am debug Published state \[device_id:front_door, ready:true, armed_state:disarmed\]
dev:1156 2026-09-22 8:38:45.438 am debug LAN push state status=200
dev:1141 2026-09-22 8:38:45.435 am debug MQTT topic=keypad/Bedroom/status, payload={"device_id":"Bedroom","ready":true,"armed_state":"disarmed","wifi_connected":true,"mqtt_connected":true,"ip":"192.168.7.184","firmware":"0.2.6","topic_prefix":"keypad/Bedroom","last_request_id":"Bedroom-000009"}
app:1374 2026-09-22 8:38:45.299 am info  Disarmed
dev:1156 2026-09-22 8:38:45.253 am debug Requested HSM command=disarm through keypad protocol
dev:1156 2026-09-22 8:38:45.250 am debug Returned LAN action result \[device_id:front_door, request_id:front_door-000004, result:accepted, message:Disarmed\]
app:1371 2026-09-22 8:38:44.332 am debug LAN action payload=\[action:disarm, credential:1234, credential_length:4, device_id:front_door, request_id:front_door-000004, uptime_ms:89063953\]
app:1371 2026-09-22 8:38:36.501 am debug Published controls dashboard payload={"title":"Controls","items":\[{"id":"slot_1","label":"pseudoGDO 2","value":"Closed","state":"ok","kind":"barrier","primary":true,"detail":false},{"id":"slot_2","label":"Office Smart Outlet","value":"Off","state":"ok","kind":"switch","primary":true,"detail":false},{"id":"slot_3","label":"pseudoBulb","value":"100%","state":"info","kind":"dimmer","primary":true,"detail":true,"level":100},{"id":"slot_4","label":"pseudoRain","value":"On","state":"info","kind":"switch","primary":true,"detail":false}\]}
dev:1156 2026-09-22 8:38:36.494 am debug Published controls dashboard \[dashboard_id:controls, device_id:front_door, items:\[\[detail:false, id:slot_1, kind:barrier, label:pseudoGDO 2, primary:true, state:ok, value:Closed\], \[detail:false, id:slot_2, kind:switch, label:Office Smart Outlet, primary:true, state:ok, value:Off\], \[detail:true, id:slot_3, kind:dimmer, label:pseudoBulb, level:100, primary:true, state:info, value:100%\], \[detail:false, id:slot_4, kind:switch, label:pseudoRain, primary:true, state:info, value:On\]\], title:Controls\]
dev:1156 2026-09-22 8:38:36.456 am debug LAN push dashboard status=200
app:1378 2026-09-22 8:38:36.159 am debug Published controls dashboard payload={"title":"Controls","items":\[{"id":"slot_1","label":"Office Smart Outlet","value":"Off","state":"ok","kind":"switch","primary":true,"detail":false},{"id":"slot_2","label":"pseudoGDO","value":"Closed","state":"ok","kind":"barrier","primary":true,"detail":false},{"id":"slot_3","label":"pseudoThermostat","value":"Unsupported","state":"offline","kind":"unsupported","primary":false,"detail":false}\]}
dev:1141 2026-09-22 8:38:36.153 am debug Published controls dashboard \[dashboard_id:controls, device_id:Bedroom, items:\[\[detail:false, id:slot_1, kind:switch, label:Office Smart Outlet, primary:true, state:ok, value:Off\], \[detail:false, id:slot_2, kind:barrier, label:pseudoGDO, primary:true, state:ok, value:Closed\], \[detail:false, id:slot_3, kind:unsupported, label:pseudoThermostat, primary:false, state:offline, value:Unsupported\]\], title:Controls\]
dev:1141 2026-09-22 8:38:36.148 am debug LAN push dashboard status=200
app:1371 2026-09-22 8:38:36.111 am debug Published dashboard id=hsm, payload={"title":"Home Summary","items":\[{"label":"Temp","value":"72\\u00b0F","state":"info"},{"label":"Power","value":"0W","state":"ok"},{"label":"Lights","value":"3 on","state":"info"},{"label":"Doors","value":"All closed","state":"ok"},{"label":"Locks","value":"All locked","state":"ok"},{"label":"Leak","value":"1 wet","state":"alert"},{"label":"Mode","value":"Day","state":"info"},{"label":"Security","value":"Armed Night","state":"info"}\]}
dev:1156 2026-09-22 8:38:36.104 am debug Published hsm dashboard \[dashboard_id:hsm, device_id:front_door, items:\[\[label:Temp, state:info, value:72°F\], \[label:Power, state:ok, value:0W\], \[label:Lights, state:info, value:3 on\], \[label:Doors, state:ok, value:All closed\], \[label:Locks, state:ok, value:All locked\], \[label:Leak, state:alert, value:1 wet\], \[label:Mode, state:info, value:Day\], \[label:Security, state:info, value:Armed Night\]\], title:Home Summary\]
dev:1156 2026-09-22 8:38:36.099 am debug LAN push dashboard status=200
app:1378 2026-09-22 8:38:35.796 am debug Published dashboard id=bedroom, payload={"title":"BEDROOM","items":\[{"label":"Doors","value":"All closed","state":"ok"},{"label":"Mode","value":"Day","state":"info"},{"label":"Security","value":"Armed Night","state":"info"}\]}
dev:1141 2026-09-22 8:38:35.793 am debug HSM keypad command completed state=armed_stay
dev:1141 2026-09-22 8:38:35.790 am debug Published state \[device_id:Bedroom, ready:true, armed_state:armed_stay\]
dev:1141 2026-09-22 8:38:35.787 am debug LAN push state status=200
dev:1141 2026-09-22 8:38:35.775 am debug Published bedroom dashboard \[dashboard_id:bedroom, device_id:Bedroom, items:\[\[label:Doors, state:ok, value:All closed\], \[label:Mode, state:info, value:Day\], \[label:Security, state:info, value:Armed Night\]\], title:BEDROOM\]
dev:1141 2026-09-22 8:38:35.771 am debug LAN push dashboard status=200
dev:1156 2026-09-22 8:38:35.744 am debug HSM keypad command completed state=armed_stay
dev:1156 2026-09-22 8:38:35.742 am debug Published state \[device_id:front_door, ready:true, armed_state:armed_stay\]
dev:1156 2026-09-22 8:38:35.738 am debug LAN push state status=200
dev:1141 2026-09-22 8:38:35.616 am debug MQTT topic=keypad/Bedroom/status, payload={"device_id":"Bedroom","ready":true,"armed_state":"armed_stay","wifi_connected":true,"mqtt_connected":true,"ip":"192.168.7.184","firmware":"0.2.6","topic_prefix":"keypad/Bedroom","last_request_id":"Bedroom-000009"}
app:1371 2026-09-22 8:38:35.514 am debug Dashboard source event hsmStatus=armedNight
app:1371 2026-09-22 8:38:35.511 am debug HSM status=armedNight keypad_state=armed_stay
dev:1156 2026-09-22 8:38:35.506 am debug Published state \[device_id:front_door, ready:true, armed_state:armed_stay\]
dev:1156 2026-09-22 8:38:35.497 am debug LAN push state status=200
app:1378 2026-09-22 8:38:35.467 am debug Dashboard source event hsmStatus=armedNight
app:1378 2026-09-22 8:38:35.463 am debug HSM status=armedNight keypad_state=armed_stay
dev:1141 2026-09-22 8:38:35.456 am debug Published state \[device_id:Bedroom, ready:true, armed_state:armed_stay\]
dev:1141 2026-09-22 8:38:35.451 am debug LAN push state status=200
dev:1141 2026-09-22 8:38:35.437 am debug MQTT topic=keypad/Bedroom/status, payload={"device_id":"Bedroom","ready":true,"armed_state":"armed_stay","wifi_connected":true,"mqtt_connected":true,"ip":"192.168.7.184","firmware":"0.2.6","topic_prefix":"keypad/Bedroom","last_request_id":"Bedroom-000009"}
app:1374 2026-09-22 8:38:35.172 am info  Armed Night
dev:1156 2026-09-22 8:38:34.911 am debug Requested HSM command=armNight through keypad protocol
dev:1156 2026-09-22 8:38:34.908 am debug Returned LAN action result \[device_id:front_door, request_id:front_door-000003, result:accepted, message:Partial\]
app:1371 2026-09-22 8:38:34.874 am debug LAN action payload=\[action:arm_stay, credential:, credential_length:0, device_id:front_door, request_id:front_door-000003, uptime_ms:89054423\]

Like normal, Hubitat logs start at the bottom, which is where I tapped the PARTIAL button on my keypad. Then I tapped the disarm code and OK.

The logs today are very very verbose. But at least you can see what mine do.

I finally figured it out!

The correct way to signal HSM to disarm is:

sendEvent(name: "armingIn", value:0, data: [armCmd: "disarm"])

HSM will be signaled and then will do a call to disarm(0), where the driver needs to set: state.securityKeypad = "disarmed"

Some drivers will add armMode: "disarming" to the data map. I don't know why though.

Thanks to @csteele for pointing me in the right direction.