Found a solution, with the help of ChatGPT: I created a custom driver for a virtual device that behaves like a window shade (which Amazon Alexa can interact with) and like a lock (for purposes of showing up in the Home/Security summary in Hubitat).
Whenever one of my Schlage locks is locked, an Alexa routine sets the device position to "0" for an associated virtual device.
Conversely, whenever one of my locks is unlocked, a separate Alexa routine sets the device position to "100" for the associated virtual device.
The VD's show up in Hubitat as locks, but do NOT show up in the Hubitat/Lights summary regardless of state.
metadata {
definition(name: "Virtual Shade with Lock for Alexa", namespace: "Hubitat", author: "John Land") {
capability "WindowShade"
capability "Actuator"
capability "Lock"
capability "Refresh"
command "open"
command "close"
command "setPosition", ["NUMBER"]
attribute "windowShade", "enum", ["open", "closed", "partially open"]
attribute "position", "number"
}
}
def installed() { initialize() }
def updated() { initialize() }
def initialize() {
if (device.currentValue("position") == null) sendEvent(name: "position", value: 0)
if (device.currentValue("windowShade") == null) sendEvent(name: "windowShade", value: "closed")
if (device.currentValue("lock") == null) sendEvent(name: "lock", value: "locked")
}
/**
* Shade Commands
*/
def open() {
sendEvent(name: "windowShade", value: "open")
sendEvent(name: "position", value: 100)
sendEvent(name: "lock", value: "unlocked")
}
def close() {
sendEvent(name: "windowShade", value: "closed")
sendEvent(name: "position", value: 0)
sendEvent(name: "lock", value: "locked")
}
def setPosition(value) {
def v = Math.max(0, Math.min(100, value as int))
sendEvent(name: "position", value: v)
if (v == 0) {
sendEvent(name: "windowShade", value: "closed")
sendEvent(name: "lock", value: "locked")
} else if (v == 100) {
sendEvent(name: "windowShade", value: "open")
sendEvent(name: "lock", value: "unlocked")
} else {
sendEvent(name: "windowShade", value: "partially open")
sendEvent(name: "lock", value: "unlocked")
}
}
/**
* Lock Commands
*/
def lock() { close() }
def unlock() { open() }
/**
* Misc
*/
def refresh() {
sendEvent(name: "windowShade", value: device.currentValue("windowShade"))
sendEvent(name: "position", value: device.currentValue("position"))
sendEvent(name: "lock", value: device.currentValue("lock"))
}