feat: 更新依赖项版本,调整 pnpm-lock.yaml 和 package.json 中的 @kevisual/ha-api 版本,优化 WebSocket 处理逻辑

This commit is contained in:
2025-12-24 00:28:39 +08:00
parent 371d66b289
commit a52ac525bf
3 changed files with 55 additions and 28 deletions

View File

@@ -10,7 +10,7 @@
], ],
"author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)", "author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)",
"license": "MIT", "license": "MIT",
"packageManager": "pnpm@10.26.1", "packageManager": "pnpm@10.26.2",
"type": "module", "type": "module",
"files": [ "files": [
"dist", "dist",
@@ -76,7 +76,7 @@
"access": "public" "access": "public"
}, },
"dependencies": { "dependencies": {
"@kevisual/ha-api": "^0.0.1", "@kevisual/ha-api": "^0.0.4",
"@kevisual/video-tools": "^0.0.12", "@kevisual/video-tools": "^0.0.12",
"eventemitter3": "^5.0.1", "eventemitter3": "^5.0.1",
"lowdb": "^7.0.1", "lowdb": "^7.0.1",

View File

@@ -3,7 +3,7 @@ import { QwenAsrRelatime } from "@kevisual/video-tools/src/asr/index.ts";
import { Listener, WebSocketListenerFun, WebSocketReq } from "@kevisual/router"; import { Listener, WebSocketListenerFun, WebSocketReq } from "@kevisual/router";
import { lightHA } from "@/routes/ha-api/ha.ts"; import { lightHA } from "@/routes/ha-api/ha.ts";
const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelatime, msgId: string }>, res) => { const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelatime, msgId: string, startTime?: number }>, res) => {
const { ws, emitter, id, data } = req; const { ws, emitter, id, data } = req;
let asr = ws.data.asr; let asr = ws.data.asr;
@@ -22,7 +22,7 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
ws.send(JSON.stringify({ type: 'asr', code: 200, message: 'asr服务已连接', time: Date.now() })); ws.send(JSON.stringify({ type: 'asr', code: 200, message: 'asr服务已连接', time: Date.now() }));
if (!asr) return; if (!asr) return;
asr.emitter.on('message', (message) => { asr.emitter.on('message', (message) => {
console.log('ASR message', message); // console.log('ASR message', message);
}); });
asr.emitter.on('partial', (message) => { asr.emitter.on('partial', (message) => {
// console.log('ASR message', message); // console.log('ASR message', message);
@@ -39,6 +39,8 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
asr.emitter.on('result', async ({ text, raw }) => { asr.emitter.on('result', async ({ text, raw }) => {
let msgId = ws.data.msgId; let msgId = ws.data.msgId;
ws.data.msgId = Math.random().toString(36).substring(2, 10); ws.data.msgId = Math.random().toString(36).substring(2, 10);
const endTime = Date.now();
console.log('cost time', ws.data.startTime ? (endTime - ws.data.startTime) : 0);
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: 'result', type: 'result',
msgId: msgId, msgId: msgId,
@@ -63,11 +65,12 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
if (obj.type) { if (obj.type) {
try { try {
const search = await lightHA.searchLight(obj.appName || ''); const search = await lightHA.searchLight(obj.appName || '');
console.log('searchTime', Date.now() - endTime);
if (search.id) { if (search.id) {
lightHA.toggleLight({ entity_id: search.id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' }); await lightHA.runService({ entity_id: search.id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
} else if (search.hasMore) { } else if (search.hasMore) {
const [first] = search.result; const [first] = search.result;
lightHA.toggleLight({ entity_id: first.entity_id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' }); await lightHA.runService({ entity_id: first.entity_id, service: obj.type === '打开' ? 'turn_on' : 'turn_off' });
} else { } else {
console.log('未找到对应设备:', obj.appName); console.log('未找到对应设备:', obj.appName);
} }
@@ -76,6 +79,7 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
console.error('控制失败', e); console.error('控制失败', e);
} }
} }
console.log('toogle light time', Date.now() - endTime);
}); });
asr.start(); asr.start();
} }
@@ -84,18 +88,26 @@ const func: WebSocketListenerFun = async (req: WebSocketReq<{ asr: QwenAsrRelati
} }
const isConnected = await asr.checkConnected(); const isConnected = await asr.checkConnected();
if (!isConnected) return; if (!isConnected) return;
console.log('ASR receive data', 'has voice', !!data?.voice);
if (data?.type === 'blankVoice') { if (data?.type === 'blankVoice') {
asr.sendBlank(); asr.sendBlank();
console.log('ASR receive data', 'blank voice');
} else if (data?.voice) { } else if (data?.voice) {
console.log('ASR receive voice', data.voice.slice(0, 30)); if (!data?.isRelatime) {
console.log('ASR receive data', 'has voice', !!data?.voice);
}
const isBrowserFormat = data.format === 'float32'; const isBrowserFormat = data.format === 'float32';
const time = data?.time || 0;
if (time) {
console.log('receiveDelay', Date.now() - time);
}
let voice: Buffer; let voice: Buffer;
if (isBrowserFormat) { if (isBrowserFormat) {
voice = await asr.fixBrowerBuffer(data.voice); voice = await asr.fixBrowerBuffer(data.voice);
} else { } else {
voice = Buffer.from(data.voice, 'base64'); voice = Buffer.from(data.voice, 'base64');
} }
console.log('sendTime', Date.now());
ws.data.startTime = Date.now();
asr.sendBuffer(voice); asr.sendBuffer(voice);
} }
} }

55
pnpm-lock.yaml generated
View File

@@ -40,7 +40,7 @@ importers:
version: 7.7.3 version: 7.7.3
unstorage: unstorage:
specifier: ^1.17.3 specifier: ^1.17.3
version: 1.17.3(idb-keyval@6.2.1) version: 1.17.3(idb-keyval@6.2.2)
devDependencies: devDependencies:
'@kevisual/dts': '@kevisual/dts':
specifier: ^0.0.3 specifier: ^0.0.3
@@ -112,8 +112,8 @@ importers:
assistant: assistant:
dependencies: dependencies:
'@kevisual/ha-api': '@kevisual/ha-api':
specifier: ^0.0.1 specifier: ^0.0.4
version: 0.0.1 version: 0.0.4
'@kevisual/video-tools': '@kevisual/video-tools':
specifier: ^0.0.12 specifier: ^0.0.12
version: 0.0.12(dotenv@17.2.3)(supports-color@10.2.2) version: 0.0.12(dotenv@17.2.3)(supports-color@10.2.2)
@@ -131,7 +131,7 @@ importers:
version: 6.0.14(supports-color@10.2.2) version: 6.0.14(supports-color@10.2.2)
unstorage: unstorage:
specifier: ^1.17.3 specifier: ^1.17.3
version: 1.17.3(idb-keyval@6.2.1) version: 1.17.3(idb-keyval@6.2.2)
devDependencies: devDependencies:
'@kevisual/ai': '@kevisual/ai':
specifier: ^0.0.19 specifier: ^0.0.19
@@ -216,7 +216,7 @@ importers:
dependencies: dependencies:
'@astrojs/mdx': '@astrojs/mdx':
specifier: ^4.3.13 specifier: ^4.3.13
version: 4.3.13(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)) version: 4.3.13(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))
'@astrojs/react': '@astrojs/react':
specifier: ^4.4.2 specifier: ^4.4.2
version: 4.4.2(@types/node@25.0.3)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) version: 4.4.2(@types/node@25.0.3)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(jiti@2.6.1)(lightningcss@1.30.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -225,7 +225,7 @@ importers:
version: 3.6.0 version: 3.6.0
'@astrojs/vue': '@astrojs/vue':
specifier: ^5.1.3 specifier: ^5.1.3
version: 5.1.3(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2)) version: 5.1.3(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2))
'@kevisual/api': '@kevisual/api':
specifier: ^0.0.5 specifier: ^0.0.5
version: 0.0.5 version: 0.0.5
@@ -258,7 +258,7 @@ importers:
version: 6.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) version: 6.1.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
astro: astro:
specifier: ^5.16.6 specifier: ^5.16.6
version: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) version: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)
class-variance-authority: class-variance-authority:
specifier: ^0.7.1 specifier: ^0.7.1
version: 0.7.1 version: 0.7.1
@@ -1266,6 +1266,9 @@ packages:
'@kevisual/cache@0.0.3': '@kevisual/cache@0.0.3':
resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==} resolution: {integrity: sha512-BWEck69KYL96/ywjYVkML974RHjDJTj2ITQND1zFPR+hlBV1H1p55QZgSYRJCObg3EAV1S9Zic/fR2T4pfe8yg==}
'@kevisual/cache@0.0.4':
resolution: {integrity: sha512-NlyriJ9fC27TgQhWYbEH9hG84R2k0lIofOxo/+nVHN6a6LJSLnVbpDIysRcnH8MI52n/XHfWwLSjeDDL3D1/cQ==}
'@kevisual/context@0.0.4': '@kevisual/context@0.0.4':
resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==} resolution: {integrity: sha512-HJeLeZQLU+7tCluSfOyvkgKLs0HjCZrdJlZgEgKRSa8XTwZfMAUt6J7qZTbrZAHBlPtX68EPu/PI8JMCeu3WAQ==}
@@ -1273,8 +1276,8 @@ packages:
resolution: {integrity: sha512-4T/m2LqhtwWEW+lWmg7jLxKFW7VtIAftsWFDDZvh10bZunqFf8iXxChHcVSQWikghJb4cq1IkWzPkvc2l+Asdw==} resolution: {integrity: sha512-4T/m2LqhtwWEW+lWmg7jLxKFW7VtIAftsWFDDZvh10bZunqFf8iXxChHcVSQWikghJb4cq1IkWzPkvc2l+Asdw==}
hasBin: true hasBin: true
'@kevisual/ha-api@0.0.1': '@kevisual/ha-api@0.0.4':
resolution: {integrity: sha512-6wFXbHIVvQhK08XMdsCm5A5P/CrepDiqd4k5x+kwOlhHHhFlu+WbGYh+wxdi4+62+W7WxZK7jjNt2x8ioQEFgg==} resolution: {integrity: sha512-ZBtfE/zFieDU7ff9zo4pKR7LDhFEdkDQuYU/uH5ZJkFWke4gOxEIatZcM6CJmgKDjoMLMk2w+gpk8eJqJ42GBw==}
'@kevisual/hot-api@0.0.3': '@kevisual/hot-api@0.0.3':
resolution: {integrity: sha512-qZ4CNK08StZP4+DR1vWwJhKVDoSXXC+PBFG4ZxtkXF5vO2rybE055zp1n3dg5jo8GwW5wxpqMIG3KBp3pYSTkg==} resolution: {integrity: sha512-qZ4CNK08StZP4+DR1vWwJhKVDoSXXC+PBFG4ZxtkXF5vO2rybE055zp1n3dg5jo8GwW5wxpqMIG3KBp3pYSTkg==}
@@ -3381,6 +3384,9 @@ packages:
idb-keyval@6.2.1: idb-keyval@6.2.1:
resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==}
idb-keyval@6.2.2:
resolution: {integrity: sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==}
ieee754@1.2.1: ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -5357,12 +5363,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))': '@astrojs/mdx@4.3.13(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))':
dependencies: dependencies:
'@astrojs/markdown-remark': 6.3.10 '@astrojs/markdown-remark': 6.3.10
'@mdx-js/mdx': 3.1.1 '@mdx-js/mdx': 3.1.1
acorn: 8.15.0 acorn: 8.15.0
astro: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) astro: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)
es-module-lexer: 1.7.0 es-module-lexer: 1.7.0
estree-util-visit: 2.0.0 estree-util-visit: 2.0.0
hast-util-to-html: 9.0.5 hast-util-to-html: 9.0.5
@@ -5421,12 +5427,12 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@astrojs/vue@5.1.3(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2))': '@astrojs/vue@5.1.3(@types/node@25.0.3)(astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2))(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(vue@3.5.26(typescript@5.8.2))':
dependencies: dependencies:
'@vitejs/plugin-vue': 5.2.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) '@vitejs/plugin-vue': 5.2.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))
'@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) '@vitejs/plugin-vue-jsx': 4.2.0(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))
'@vue/compiler-sfc': 3.5.25 '@vue/compiler-sfc': 3.5.25
astro: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2) astro: 5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2)
vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
vite-plugin-vue-devtools: 7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2)) vite-plugin-vue-devtools: 7.7.9(rollup@4.43.0)(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))(vue@3.5.26(typescript@5.8.2))
vue: 3.5.26(typescript@5.8.2) vue: 3.5.26(typescript@5.8.2)
@@ -6359,6 +6365,12 @@ snapshots:
dependencies: dependencies:
idb-keyval: 6.2.1 idb-keyval: 6.2.1
'@kevisual/cache@0.0.4':
dependencies:
idb-keyval: 6.2.2
lru-cache: 11.2.4
nanoid: 5.1.6
'@kevisual/context@0.0.4': {} '@kevisual/context@0.0.4': {}
'@kevisual/dts@0.0.3(typescript@5.8.2)': '@kevisual/dts@0.0.3(typescript@5.8.2)':
@@ -6372,10 +6384,11 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
'@kevisual/ha-api@0.0.1': '@kevisual/ha-api@0.0.4':
dependencies: dependencies:
dotenv: 17.2.3 '@kevisual/cache': 0.0.4
fuse.js: 7.1.0 fuse.js: 7.1.0
lru-cache: 11.2.4
'@kevisual/hot-api@0.0.3(dotenv@17.2.3)': '@kevisual/hot-api@0.0.3(dotenv@17.2.3)':
dependencies: dependencies:
@@ -7898,7 +7911,7 @@ snapshots:
astring@1.9.0: {} astring@1.9.0: {}
astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.1)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2): astro@5.16.6(@types/node@25.0.3)(idb-keyval@6.2.2)(jiti@2.6.1)(lightningcss@1.30.2)(rollup@4.43.0)(typescript@5.8.2):
dependencies: dependencies:
'@astrojs/compiler': 2.13.0 '@astrojs/compiler': 2.13.0
'@astrojs/internal-helpers': 0.7.5 '@astrojs/internal-helpers': 0.7.5
@@ -7953,7 +7966,7 @@ snapshots:
ultrahtml: 1.6.0 ultrahtml: 1.6.0
unifont: 0.6.0 unifont: 0.6.0
unist-util-visit: 5.0.0 unist-util-visit: 5.0.0
unstorage: 1.17.3(idb-keyval@6.2.1) unstorage: 1.17.3(idb-keyval@6.2.2)
vfile: 6.0.3 vfile: 6.0.3
vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2) vite: 6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)
vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)) vitefu: 1.1.1(vite@6.4.1(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2))
@@ -8114,7 +8127,7 @@ snapshots:
centra@2.7.0: centra@2.7.0:
dependencies: dependencies:
follow-redirects: 1.15.9(debug@4.3.7) follow-redirects: 1.15.9(debug@4.3.7(supports-color@10.2.2))
transitivePeerDependencies: transitivePeerDependencies:
- debug - debug
@@ -9086,6 +9099,8 @@ snapshots:
idb-keyval@6.2.1: {} idb-keyval@6.2.1: {}
idb-keyval@6.2.2: {}
ieee754@1.2.1: {} ieee754@1.2.1: {}
ignore@7.0.5: {} ignore@7.0.5: {}
@@ -11117,7 +11132,7 @@ snapshots:
universalify@2.0.1: {} universalify@2.0.1: {}
unstorage@1.17.3(idb-keyval@6.2.1): unstorage@1.17.3(idb-keyval@6.2.2):
dependencies: dependencies:
anymatch: 3.1.3 anymatch: 3.1.3
chokidar: 4.0.3 chokidar: 4.0.3
@@ -11128,7 +11143,7 @@ snapshots:
ofetch: 1.5.1 ofetch: 1.5.1
ufo: 1.6.1 ufo: 1.6.1
optionalDependencies: optionalDependencies:
idb-keyval: 6.2.1 idb-keyval: 6.2.2
update-browserslist-db@1.2.3(browserslist@4.28.1): update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies: dependencies: