/**
|
* GPIO按键服务模块
|
* 处理GPIO按键相关的业务逻辑,主要包括防拆报警功能
|
*/
|
import logger from "../../dxmodules/dxLogger.js";
|
import config from "../../dxmodules/dxConfig.js";
|
import driver from "../driver.js";
|
import bus from "../../dxmodules/dxEventBus.js";
|
|
const gpiokeyService = {}
|
|
/**
|
* 接收GPIO按键消息并处理
|
* @param {object} data - GPIO按键数据
|
* @param {number} data.code - GPIO的标识,表示是哪个GPIO有输入 256-防拆,257-门磁
|
* @param {number} data.type - 按键类型,1表示防拆/门磁状态变化
|
* @param {number} data.value - 按键值,1表示触发/门开,0表示未触发/门关
|
*/
|
gpiokeyService.receiveMsg = function (data) {
|
logger.info('[gpiokeyService] 接收到GPIO消息:', JSON.stringify(data))
|
|
// 防拆报警处理
|
if (data.code === 256) {
|
if (config.get("access.tamperAlarm") && data.type == 1 && data.value == 1) {
|
logger.info('[gpiokeyService] 防拆报警触发')
|
driver.alsa.play("/app/code/resource/wav/alarm.wav")
|
}
|
}
|
|
// 门磁状态变化处理
|
if (data.code === 257) {
|
const doorStatus = data.value == 1 ? "门开" : "门关"
|
logger.info(`[gpiokeyService] 门磁状态变化: ${doorStatus}`)
|
|
if (data.value === 1) {
|
// 门开
|
driver.alsa.play("/app/code/resource/CN/wav/door_open.wav")
|
} else {
|
// 门关
|
driver.alsa.play("/app/code/resource/CN/wav/door_close.wav")
|
}
|
|
// 发送门磁状态变化通知事件
|
bus.fire('doorStatusChanged', {
|
status: data.value,
|
statusText: doorStatus,
|
time: Math.floor(Date.now() / 1000)
|
})
|
}
|
}
|
|
export default gpiokeyService
|