fix: heartbeat no longer emits 'status' with remaining_ms=0

Heartbeat (1-byte FFE4 notify) now emits 'heartbeat' event only.
Only 33-byte state responses emit 'status' with parsed IO data.
Fixes timer jumping to 0 every second during treatment.
这个提交包含在:
Guoguo
2026-05-12 06:22:28 -07:00
父节点 7d7cb9d081
当前提交 8e306819ff
+16 -17
查看文件
@@ -85,19 +85,11 @@ function handleValueChange(res) {
if (protocol.PROTOCOL_MODE === 'vendor_33') { if (protocol.PROTOCOL_MODE === 'vendor_33') {
var parsed = protocol.parseVendorStatus(res.value) var parsed = protocol.parseVendorStatus(res.value)
emit('vendor_raw', parsed) emit('vendor_raw', parsed)
var status = { if (parsed.is_heartbeat) {
mode_state: parsed.is_heartbeat ? (parsed.heartbeat || 0) : protocol.MODE_STATE.IDLE, emit('heartbeat', { value: parsed.heartbeat })
region_mask: protocol.REGION.FULL_FACE, return
wavelength: 0,
brightness: 0,
remaining_ms: 0,
error_code: 0,
battery: 0,
temperature: 0,
bind_status: 1,
subscription: 1
} }
if (!parsed.is_heartbeat && parsed.ios) { if (parsed.ios) {
var anyActive = false var anyActive = false
for (var i = 0; i < parsed.ios.length; i++) { for (var i = 0; i < parsed.ios.length; i++) {
if (parsed.ios[i].red || parsed.ios[i].infrared || parsed.ios[i].uv || parsed.ios[i].warm_yellow) { if (parsed.ios[i].red || parsed.ios[i].infrared || parsed.ios[i].uv || parsed.ios[i].warm_yellow) {
@@ -105,12 +97,19 @@ function handleValueChange(res) {
break break
} }
} }
status.mode_state = anyActive ? protocol.MODE_STATE.ACTIVE : protocol.MODE_STATE.IDLE emit('status', {
if (parsed.hold_time > 0) { mode_state: anyActive ? protocol.MODE_STATE.ACTIVE : protocol.MODE_STATE.IDLE,
status.remaining_ms = parsed.hold_time * 1000 region_mask: protocol.REGION.FULL_FACE,
wavelength: 0,
brightness: 0,
remaining_ms: parsed.hold_time > 0 ? parsed.hold_time * 1000 : 0,
error_code: 0,
battery: 0,
temperature: 0,
bind_status: 1,
subscription: 1
})
} }
}
emit('status', status)
return return
} }
var frame = protocol.parseFrame(res.value) var frame = protocol.parseFrame(res.value)