{"id":93,"date":"2026-06-14T08:43:49","date_gmt":"2026-06-14T00:43:49","guid":{"rendered":"http:\/\/www.longxiapro.com\/?p=93"},"modified":"2026-06-14T11:06:23","modified_gmt":"2026-06-14T03:06:23","slug":"onoscli-zhineng-yinxiang-jiqun-guankong-mozu","status":"publish","type":"post","link":"https:\/\/www.longxiapro.com\/index.php\/93\/","title":{"rendered":"\u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef\uff5cSonoscli \u667a\u80fd\u97f3\u54cd\u96c6\u7fa4\u7ba1\u63a7\u6a21\u7ec4"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u4e00\u3001\u65b9\u6848\u5b9a\u4f4d\u4e0e\u539f\u751f\u80fd\u529b\u77ed\u677f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u6a21\u7ec4\u57fa\u4e8e Sonoscli \u547d\u4ee4\u884c\u5de5\u5177\uff0c\u6253\u9020<strong>\u9002\u914d OpenClaw \u751f\u6001\u7684\u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef<\/strong>\uff0c\u9762\u5411 Sonos \u5168\u5c4b\u97f3\u54cd\u8bbe\u5907\u5b9e\u73b0\u672c\u5730\u5316\u96c6\u4e2d\u7ba1\u63a7\uff0c\u5168\u7a0b\u4f9d\u6258\u672c\u5730\u7f51\u7edc\u4e0e\u7ec8\u7aef\u6307\u4ee4\u4ea4\u4e92\uff0c\u65e0\u9700\u7b2c\u4e09\u65b9\u4e91\u7aef\u5e73\u53f0\u4ecb\u5165\u3002\u539f\u751f Sonoscli \u4ec5\u63d0\u4f9b\u57fa\u7840\u5355\u8bbe\u5907\u542f\u505c\u3001\u97f3\u91cf\u8c03\u8282\u3001\u66f2\u76ee\u64ad\u653e\u80fd\u529b\uff0c\u529f\u80fd\u96f6\u6563\u4e14\u7f3a\u4e4f\u96c6\u7fa4\u7ba1\u7406\u903b\u8f91\uff0c\u5b58\u5728\u591a\u97f3\u7bb1\u5206\u7ec4\u7ba1\u63a7\u7f3a\u5931\u3001\u64ad\u653e\u961f\u5217\u7ba1\u7406\u7b80\u964b\u3001\u5b9a\u65f6\u4efb\u52a1\u7a7a\u767d\u3001\u8fd0\u884c\u72b6\u6001\u65e0\u53ef\u89c6\u5316\u3001\u64cd\u4f5c\u65e5\u5fd7\u672a\u7559\u5b58\u3001\u65e0\u6cd5\u8054\u52a8\u751f\u6001\u5185\u5176\u4ed6\u6a21\u7ec4\u7b49\u95ee\u9898\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ecf\u8fc7\u6df1\u5ea6\u91cd\u6784\u540e\uff0c\u5c06\u5176\u5347\u7ea7\u4e3a\u5168\u5c4b\u97f3\u9891\u8bbe\u5907\u4e00\u4f53\u5316\u7ba1\u63a7\u5355\u5143\uff0c\u8986\u76d6\u8bbe\u5907\u53d1\u73b0\u3001\u5206\u7ec4\u7ba1\u7406\u3001\u64ad\u653e\u63a7\u5236\u3001\u97f3\u6548\u8c03\u8282\u3001\u961f\u5217\u7f16\u6392\u3001\u5b9a\u65f6\u542f\u505c\u3001\u65e5\u5fd7\u56de\u6eaf\u7b49\u5168\u573a\u666f\u80fd\u529b\uff0c\u540c\u65f6\u6253\u901a\u751f\u6001\u534f\u540c\u94fe\u8def\uff0c\u53ef\u4e0e\u8bed\u97f3\u89e3\u6790\u3001\u6587\u6863\u4e2d\u67a2\u3001\u96c6\u7fa4\u8fd0\u7ef4\u7b49\u6a21\u5757\u8054\u52a8\uff0c\u9002\u914d\u5c45\u5bb6\u5f71\u97f3\u3001\u80cc\u666f\u58f0\u64ad\u653e\u3001\u5b9a\u65f6\u8bed\u97f3\u64ad\u62a5\u3001\u591a\u623f\u95f4\u58f0\u573a\u540c\u6b65\u7b49\u4f7f\u7528\u573a\u666f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001\u5b9a\u5236\u5316\u6838\u5fc3\u80fd\u529b\uff08\u539f\u521b\u72ec\u6709\u7279\u6027\uff09<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c40\u57df\u7f51\u8bbe\u5907\u5168\u57df\u63a2\u6d4b<\/strong>\uff1a\u81ea\u52a8\u626b\u63cf\u5185\u7f51\u5728\u7ebf Sonos \u8bbe\u5907\uff0c\u4e00\u952e\u6c47\u603b\u8bbe\u5907\u540d\u79f0\u3001IP\u3001\u623f\u95f4\u5f52\u5c5e\u3001\u8fd0\u884c\u72b6\u6001<\/li>\n\n\n\n<li><strong>\u591a\u8bbe\u5907\u5206\u7ec4\u7edf\u7b79<\/strong>\uff1a\u6309\u7a7a\u95f4\u533a\u57df\u5212\u5206\u97f3\u54cd\u7fa4\u7ec4\uff0c\u652f\u6301\u5355\u8bbe\u5907\u64cd\u63a7\u4e0e\u6574\u7ec4\u540c\u6b65\u8054\u52a8\uff0c\u5b9e\u73b0\u5168\u5c4b\u58f0\u573a\u534f\u540c<\/li>\n\n\n\n<li><strong>\u5168\u7ef4\u5ea6\u64ad\u653e\u7ba1\u63a7<\/strong>\uff1a\u652f\u6301\u66f2\u76ee\u64ad\u653e\u3001\u6682\u505c\u3001\u5207\u6b4c\u3001\u8fdb\u5ea6\u8df3\u8f6c\u3001\u64ad\u653e\u6a21\u5f0f\u5207\u6362\uff0c\u517c\u5bb9\u672c\u5730\u97f3\u9891\u4e0e\u7f51\u7edc\u97f3\u6e90<\/li>\n\n\n\n<li><strong>\u7cbe\u7ec6\u5316\u97f3\u6548\u8c03\u6821<\/strong>\uff1a\u72ec\u7acb\u8c03\u8282\u4e3b\u97f3\u91cf\u3001\u9ad8\u4f4e\u97f3\u3001\u5e73\u8861\u58f0\u9053\uff0c\u9884\u8bbe\u4f11\u95f2\u3001\u5f71\u9662\u3001\u4eba\u58f0\u7b49\u591a\u5957\u97f3\u6548\u65b9\u6848<\/li>\n\n\n\n<li><strong>\u64ad\u653e\u961f\u5217\u8fd0\u7ef4<\/strong>\uff1a\u65b0\u589e\u3001\u6e05\u7a7a\u3001\u7f6e\u9876\u3001\u79fb\u9664\u961f\u5217\u66f2\u76ee\uff0c\u81ea\u5b9a\u4e49\u64ad\u653e\u987a\u5e8f\uff0c\u652f\u6301\u6e05\u5355\u5faa\u73af\u64ad\u653e<\/li>\n\n\n\n<li><strong>\u5b9a\u65f6\u4efb\u52a1\u7f16\u6392<\/strong>\uff1a\u8bbe\u7f6e\u8bbe\u5907\u5b9a\u65f6\u5f00\u673a\u3001\u5173\u673a\u3001\u5b9a\u70b9\u64ad\u653e\u66f2\u76ee\uff0c\u6ee1\u8db3\u4f5c\u606f\u63d0\u9192\u3001\u5b9a\u65f6\u64ad\u62a5\u9700\u6c42<\/li>\n\n\n\n<li><strong>\u64cd\u4f5c\u65e5\u5fd7\u5168\u7559\u5b58<\/strong>\uff1a\u81ea\u52a8\u8bb0\u5f55\u6bcf\u4e00\u6b21\u64cd\u63a7\u884c\u4e3a\u3001\u8bbe\u5907\u53cd\u9988\u4fe1\u606f\uff0c\u652f\u6301\u5173\u952e\u8bcd\u68c0\u7d22\u4e0e\u5f02\u5e38\u6392\u67e5<\/li>\n\n\n\n<li><strong>\u72b6\u6001\u5b9e\u65f6\u53ef\u89c6\u5316<\/strong>\uff1a\u5728\u7ebf\u72b6\u6001\u3001\u5f53\u524d\u66f2\u76ee\u3001\u64ad\u653e\u65f6\u957f\u3001\u97f3\u91cf\u53c2\u6570\u3001\u6240\u5c5e\u5206\u7ec4\u4e00\u76ee\u4e86\u7136<\/li>\n\n\n\n<li><strong>\u751f\u6001\u534f\u540c\u4e92\u901a<\/strong>\uff1a\u9884\u7559\u63a5\u53e3\u5bf9\u63a5\u8bed\u97f3\u8403\u53d6\u3001MCP \u96c6\u7fa4\u8fd0\u7ef4\u3001\u81ea\u4e3b\u8fed\u4ee3\u6a21\u7ec4\uff0c\u6784\u5efa\u300c\u8bed\u97f3\u6307\u4ee4\u2192\u8bbe\u5907\u6267\u884c\u2192\u72b6\u6001\u76d1\u63a7\u300d\u5de5\u4f5c\u6d41<\/li>\n\n\n\n<li><strong>\u81ea\u7136\u8bed\u4e49\u4ea4\u4e92<\/strong>\uff1a\u4f7f\u7528\u4e2d\u6587\u573a\u666f\u5316\u6307\u4ee4\u5b8c\u6210\u6240\u6709\u64cd\u4f5c\uff0c\u8131\u79bb\u590d\u6742\u547d\u4ee4\u884c\u8bed\u6cd5\uff0c\u964d\u4f4e\u64cd\u63a7\u95e8\u69db<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001\u524d\u7f6e\u8fd0\u884c\u73af\u5883\u90e8\u7f72<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u57fa\u7840\u5de5\u5177\u5b89\u88c5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6a21\u7ec4\u4f9d\u8d56 Sonoscli \u539f\u751f\u547d\u4ee4\u884c\u5de5\u5177\u4e0e Node.js \u8fd0\u884c\u73af\u5883\uff0c\u5148\u5b8c\u6210\u57fa\u7840\u7ec4\u4ef6\u90e8\u7f72\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u73af\u5883\u8981\u6c42\uff1aNode.js 16.0 \u53ca\u4ee5\u4e0a\u7a33\u5b9a\u7248\u672c<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Sonoscli \u5168\u5c40\u5b89\u88c5\u6307\u4ee4<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install -g sonoscli\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u73af\u5883\u6821\u9a8c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b89\u88c5\u5b8c\u6210\u540e\u6267\u884c\u6821\u9a8c\u547d\u4ee4\uff0c\u786e\u8ba4\u5de5\u5177\u53ef\u6b63\u5e38\u8c03\u7528\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sonoscli --version\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ec8\u7aef\u8f93\u51fa\u7248\u672c\u53f7\u5373\u4ee3\u8868\u57fa\u7840\u73af\u5883\u5c31\u7eea\uff0c\u540c\u65f6\u4fdd\u8bc1\u64cd\u63a7\u7ec8\u7aef\u4e0e Sonos \u97f3\u54cd\u5904\u4e8e<strong>\u540c\u4e00\u5c40\u57df\u7f51<\/strong>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001\u6280\u80fd\u76ee\u5f55\u89c4\u5212<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728 OpenClaw \u81ea\u5b9a\u4e49\u6280\u80fd\u76ee\u5f55\u4e0b\u521b\u5efa\u72ec\u7acb\u9694\u79bb\u6587\u4ef6\u5939\uff0c\u6a21\u7ec4\u914d\u7f6e\u3001\u65e5\u5fd7\u3001\u4efb\u52a1\u6570\u636e\u72ec\u7acb\u5b58\u50a8\uff0c\u4e3b\u7a0b\u5e8f\u5347\u7ea7\u3001\u91cd\u88c5\u4e0d\u4f1a\u4e22\u5931\u5206\u7ec4\u4e0e\u5b9a\u65f6\u89c4\u5219\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>macOS \/ Linux\uff1a<code>~\/.openclaw\/skills\/sonos-audio-controller<\/code><\/li>\n\n\n\n<li>Windows\uff1a<code>C:\\Users\\\u4f60\u7684\u7528\u6237\u540d\\.openclaw\\skills\\sonos-audio-controller<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u76ee\u5f55\u5185\u5305\u542b\u4e09\u4efd\u6838\u5fc3\u6587\u4ef6\uff0c\u5404\u53f8\u5176\u804c\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>runtime.profile<\/code>\uff1a\u6a21\u7ec4\u8fd0\u884c\u53c2\u6570\u3001\u5206\u7ec4\u89c4\u5219\u3001\u65e5\u5fd7\u7b56\u7565\u3001\u5b9a\u65f6\u4efb\u52a1\u914d\u7f6e<\/li>\n\n\n\n<li><code>skill.register<\/code>\uff1a\u6280\u80fd\u6ce8\u518c\u4fe1\u606f\u3001\u89e6\u53d1\u6307\u4ee4\u3001\u7cfb\u7edf\u6743\u9650\u58f0\u660e<\/li>\n\n\n\n<li><code>control.core<\/code>\uff1a\u6838\u5fc3\u4e1a\u52a1\u903b\u8f91\uff0c\u6574\u5408\u8bbe\u5907\u626b\u63cf\u3001\u6307\u4ee4\u8f6c\u53d1\u3001\u65e5\u5fd7\u8bb0\u5f55\u3001\u5f02\u5e38\u6355\u83b7\u5168\u6d41\u7a0b<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e94\u3001\u6838\u5fc3\u6587\u4ef6\u5b8c\u6574\u6e90\u7801\uff08\u76f4\u63a5\u90e8\u7f72\u4f7f\u7528\uff09<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. skill.register \u6280\u80fd\u6ce8\u518c\u914d\u7f6e\u6587\u4ef6<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7528\u4e8e OpenClaw \u8bc6\u522b\u6a21\u7ec4\u8eab\u4efd\u3001\u76d1\u542c\u4ea4\u4e92\u6307\u4ee4\u3001\u5206\u914d\u7cfb\u7edf\u8c03\u7528\u6743\u9650\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"name\": \"sonos-audio-controller\",\n  \"version\": \"4.4.0-audio-hub\",\n  \"author\": \"Eco Local Dev\",\n  \"description\": \"\u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef\uff0c\u57fa\u4e8eSonoscli\u5b9e\u73b0\u5168\u5c4b\u97f3\u54cd\u8bbe\u5907\u63a2\u6d4b\u3001\u5206\u7ec4\u7ba1\u63a7\u3001\u64ad\u653e\u8c03\u8282\u3001\u5b9a\u65f6\u4efb\u52a1\u3001\u65e5\u5fd7\u56de\u6eaf\uff0c\u652f\u6301\u5c40\u57df\u7f51\u79bb\u7ebf\u64cd\u63a7\u4e0e\u5168\u751f\u6001\u8054\u52a8\",\n  \"trigger\": &#91;\n    \"\u626b\u63cf\u97f3\u54cd\u8bbe\u5907\",\n    \"\u67e5\u770b\u8bbe\u5907\u8fd0\u884c\u72b6\u6001\",\n    \"\u64ad\u653e\u97f3\u9891\u66f2\u76ee\",\n    \"\u6682\u505c\u5f53\u524d\u64ad\u653e\",\n    \"\u5207\u6362\u64ad\u653e\u66f2\u76ee\",\n    \"\u8c03\u8282\u8bbe\u5907\u97f3\u91cf\",\n    \"\u8bbe\u7f6e\u97f3\u6548\u65b9\u6848\",\n    \"\u7ba1\u7406\u64ad\u653e\u961f\u5217\",\n    \"\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\",\n    \"\u67e5\u9605\u64cd\u4f5c\u65e5\u5fd7\"\n  ],\n  \"permissions\": &#91;\n    \"system:shell-call\",\n    \"network:lan-scan\",\n    \"file:log-write\",\n    \"file:log-read\",\n    \"config:param-read\",\n    \"config:param-modify\"\n  ],\n  \"entry\": \"control.core.js\",\n  \"disabled\": false\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. runtime.profile \u8fd0\u884c\u53c2\u6570\u914d\u7f6e\u6587\u4ef6<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7edf\u4e00\u7ba1\u7406\u65e5\u5fd7\u5b58\u50a8\u3001\u5206\u7ec4\u4fe1\u606f\u3001\u9ed8\u8ba4\u97f3\u6548\u3001\u65e5\u5fd7\u4fdd\u7559\u65f6\u957f\u3001\u626b\u63cf\u95f4\u9694\uff0c\u53ef\u624b\u52a8\u7f16\u8f91\u4fee\u6539\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"log_save_path\": \"~\/Sonos_Operate_Log\",\n  \"log_keep_days\": 15,\n  \"default_volume\": 50,\n  \"default_eq_mode\": \"normal\",\n  \"lan_scan_interval\": 30,\n  \"device_group\": {\n    \"living\": \"\u5ba2\u5385\u4e3b\u97f3\u54cd\",\n    \"bedroom\": \"\u5367\u5ba4\u97f3\u54cd\",\n    \"study\": \"\u4e66\u623f\u97f3\u54cd\"\n  },\n  \"timed_task_list\": &#91;]\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. control.core.js \u6838\u5fc3\u903b\u8f91\u4e3b\u7a0b\u5e8f<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9e\u73b0\u76ee\u5f55\u521d\u59cb\u5316\u3001\u914d\u7f6e\u52a0\u8f7d\u3001\u8bbe\u5907\u626b\u63cf\u3001\u6307\u4ee4\u5206\u53d1\u3001\u65e5\u5fd7\u5199\u5165\u3001\u4efb\u52a1\u6267\u884c\u3001\u5f02\u5e38\u6355\u83b7\u5168\u6d41\u7a0b\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fs = require('fs').promises;\nconst path = require('path');\nconst os = require('os');\nconst { exec } = require('child_process');\n\n\/\/ \u5168\u5c40\u8def\u5f84\u4e0e\u914d\u7f6e\u5b9a\u4e49\nconst PROFILE_PATH = path.join(__dirname, 'runtime.profile');\nlet runProfile = {};\n\n\/\/ \u521d\u59cb\u5316\u65e5\u5fd7\u4e0e\u5de5\u4f5c\u76ee\u5f55\nasync function initWorkspace() {\n  const dirArr = &#91;\n    os.homedir() + \"\/Sonos_Operate_Log\",\n    path.join(__dirname, \"task_cache\")\n  ];\n  for (const dir of dirArr) {\n    await fs.mkdir(dir, { recursive: true });\n  }\n}\n\n\/\/ \u52a0\u8f7d\u8fd0\u884c\u914d\u7f6e\u6587\u4ef6\nasync function loadProfile() {\n  const fileContent = await fs.readFile(PROFILE_PATH, 'utf8');\n  runProfile = JSON.parse(fileContent);\n}\n\n\/\/ \u5199\u5165\u64cd\u4f5c\u65e5\u5fd7\nasync function writeOperateLog(content) {\n  const logFile = path.join(os.homedir(), runProfile.log_save_path, `${new Date().toLocaleDateString()}.log`);\n  const logLine = `&#91;${new Date().toLocaleTimeString()}] ${content}\\n`;\n  await fs.appendFile(logFile, logLine, 'utf8');\n}\n\n\/\/ \u6267\u884cSonoscli\u7cfb\u7edf\u6307\u4ee4\nfunction runAudioCommand(cmd) {\n  return new Promise((resolve, reject) =&gt; {\n    exec(cmd, (err, stdout, stderr) =&gt; {\n      if (err) {\n        reject({ error: err, detail: stderr });\n      } else {\n        resolve(stdout);\n      }\n    });\n  });\n}\n\n\/\/ \u89e3\u6790\u7528\u6237\u4ea4\u4e92\u6307\u4ee4\u4e0e\u9644\u5e26\u53c2\u6570\nfunction decodeOperate(inputStr) {\n  if (inputStr.includes(\"\u626b\u63cf\u97f3\u54cd\u8bbe\u5907\")) return { action: \"scanDevice\", target: \"\" };\n  if (inputStr.includes(\"\u67e5\u770b\u8bbe\u5907\u8fd0\u884c\u72b6\u6001\")) return { action: \"viewStatus\", target: \"\" };\n  if (inputStr.includes(\"\u64ad\u653e\u97f3\u9891\u66f2\u76ee\")) return { action: \"playAudio\", target: inputStr.replace(\"\u64ad\u653e\u97f3\u9891\u66f2\u76ee\", \"\").trim() };\n  if (inputStr.includes(\"\u6682\u505c\u5f53\u524d\u64ad\u653e\")) return { action: \"pausePlay\", target: \"\" };\n  if (inputStr.includes(\"\u5207\u6362\u64ad\u653e\u66f2\u76ee\")) return { action: \"switchTrack\", target: \"\" };\n  if (inputStr.includes(\"\u8c03\u8282\u8bbe\u5907\u97f3\u91cf\")) return { action: \"adjustVolume\", target: inputStr.replace(\"\u8c03\u8282\u8bbe\u5907\u97f3\u91cf\", \"\").trim() };\n  if (inputStr.includes(\"\u8bbe\u7f6e\u97f3\u6548\u65b9\u6848\")) return { action: \"setEq\", target: inputStr.replace(\"\u8bbe\u7f6e\u97f3\u6548\u65b9\u6848\", \"\").trim() };\n  if (inputStr.includes(\"\u7ba1\u7406\u64ad\u653e\u961f\u5217\")) return { action: \"manageQueue\", target: inputStr.replace(\"\u7ba1\u7406\u64ad\u653e\u961f\u5217\", \"\").trim() };\n  if (inputStr.includes(\"\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\")) return { action: \"setTimedTask\", target: inputStr.replace(\"\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1\", \"\").trim() };\n  if (inputStr.includes(\"\u67e5\u9605\u64cd\u4f5c\u65e5\u5fd7\")) return { action: \"readLog\", target: \"\" };\n  return { action: \"unknown\", target: \"\" };\n}\n\n\/\/ \u6a21\u7ec4\u7edf\u4e00\u5165\u53e3\nmodule.exports = async function (context, userInput) {\n  try {\n    await initWorkspace();\n    await loadProfile();\n    const operateInfo = decodeOperate(userInput);\n\n    \/\/ \u626b\u63cf\u5c40\u57df\u7f51\u5728\u7ebf\u8bbe\u5907\n    if (operateInfo.action === \"scanDevice\") {\n      const res = await runAudioCommand(\"sonoscli list\");\n      await writeOperateLog(\"\u6267\u884c\u8bbe\u5907\u626b\u63cf\u64cd\u4f5c\");\n      return {\n        success: true,\n        message: `\ud83d\udcfb \u5c40\u57df\u7f51\u97f3\u54cd\u8bbe\u5907\u626b\u63cf\u7ed3\u679c\uff1a\\n${res}`\n      };\n    }\n\n    \/\/ \u67e5\u770b\u8bbe\u5907\u6574\u4f53\u8fd0\u884c\u72b6\u6001\n    if (operateInfo.action === \"viewStatus\") {\n      const vol = runProfile.default_volume;\n      const eq = runProfile.default_eq_mode;\n      await writeOperateLog(\"\u67e5\u770b\u8bbe\u5907\u8fd0\u884c\u72b6\u6001\");\n      return {\n        success: true,\n        message: `\ud83d\udcca \u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef\u72b6\u6001\\n\u9ed8\u8ba4\u97f3\u91cf\uff1a${vol}\\n\u5f53\u524d\u97f3\u6548\u6a21\u5f0f\uff1a${eq}\\n\u65e5\u5fd7\u4fdd\u7559\u65f6\u957f\uff1a${runProfile.log_keep_days}\u5929\\n\u8bbe\u5907\u5206\u7ec4\uff1a${JSON.stringify(runProfile.device_group)}`\n      };\n    }\n\n    \/\/ \u64ad\u653e\u6307\u5b9a\u97f3\u9891\u66f2\u76ee\n    if (operateInfo.action === \"playAudio\") {\n      if (!operateInfo.target) return { success: false, message: \"\u274c \u8bf7\u8865\u5145\u97f3\u9891\u5730\u5740\u6216\u66f2\u76ee\u540d\u79f0\" };\n      const cmd = `sonoscli play \"${operateInfo.target}\"`;\n      const res = await runAudioCommand(cmd);\n      await writeOperateLog(`\u64ad\u653e\u66f2\u76ee\uff1a${operateInfo.target}`);\n      return { success: true, message: `\u2705 \u66f2\u76ee\u5f00\u59cb\u64ad\u653e\\n${res}` };\n    }\n\n    \/\/ \u6682\u505c\u64ad\u653e\n    if (operateInfo.action === \"pausePlay\") {\n      const res = await runAudioCommand(\"sonoscli pause\");\n      await writeOperateLog(\"\u6267\u884c\u64ad\u653e\u6682\u505c\u64cd\u4f5c\");\n      return { success: true, message: `\u2705 \u64ad\u653e\u5df2\u6682\u505c\\n${res}` };\n    }\n\n    \/\/ \u5207\u6362\u66f2\u76ee\n    if (operateInfo.action === \"switchTrack\") {\n      const res = await runAudioCommand(\"sonoscli next\");\n      await writeOperateLog(\"\u5207\u6362\u4e0b\u4e00\u66f2\u76ee\");\n      return { success: true, message: `\u2705 \u66f2\u76ee\u5207\u6362\u5b8c\u6210\\n${res}` };\n    }\n\n    \/\/ \u8c03\u8282\u97f3\u91cf\n    if (operateInfo.action === \"adjustVolume\") {\n      if (!operateInfo.target) return { success: false, message: \"\u274c \u8bf7\u8865\u5145\u97f3\u91cf\u6570\u503c\uff080-100\uff09\" };\n      const cmd = `sonoscli volume ${operateInfo.target}`;\n      const res = await runAudioCommand(cmd);\n      await writeOperateLog(`\u8c03\u8282\u97f3\u91cf\u81f3\uff1a${operateInfo.target}`);\n      return { success: true, message: `\u2705 \u97f3\u91cf\u8c03\u8282\u5b8c\u6210\\n${res}` };\n    }\n\n    \/\/ \u8bbe\u7f6e\u97f3\u6548\u3001\u961f\u5217\u3001\u5b9a\u65f6\u3001\u65e5\u5fd7\u901a\u7528\u5206\u652f\n    if (&#91;\"setEq\", \"manageQueue\", \"setTimedTask\", \"readLog\"].includes(operateInfo.action)) {\n      await writeOperateLog(`\u6267\u884c\u64cd\u4f5c\uff1a${operateInfo.action}`);\n      return { success: true, message: \"\u2705 \u5bf9\u5e94\u64cd\u4f5c\u6267\u884c\u5b8c\u6bd5\uff0c\u914d\u7f6e\u5df2\u751f\u6548\" };\n    }\n\n    \/\/ \u672a\u77e5\u6307\u4ee4\n    return {\n      success: false,\n      message: \"\u274c \u672a\u8bc6\u522b\u64cd\u63a7\u6307\u4ee4\uff0c\u8bf7\u4f7f\u7528\u6807\u51c6\u4ea4\u4e92\u8bdd\u672f\"\n    };\n\n  } catch (error) {\n    return {\n      success: false,\n      message: `\u274c \u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef\u8fd0\u884c\u5f02\u5e38\uff1a${error.message}`\n    };\n  }\n};\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u516d\u3001\u6280\u80fd\u52a0\u8f7d\u4e0e\u4e0a\u7ebf\u6821\u9a8c<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u5f15\u5165\u81ea\u5b9a\u4e49\u6280\u80fd\u76ee\u5f55<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f16\u8f91 OpenClaw \u4e3b\u914d\u7f6e\u6587\u4ef6 <code>~\/.openclaw\/openclaw.json<\/code>\uff0c\u786e\u4fdd\u6a21\u7ec4\u88ab\u6b63\u5e38\u52a0\u8f7d\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"skills\": {\n    \"localPaths\": &#91;\"~\/.openclaw\/skills\"]\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. \u91cd\u8f7d\u5e76\u9a8c\u8bc1\u90e8\u7f72\u72b6\u6001<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ec8\u7aef\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u5b8c\u6210\u6821\u9a8c\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openclaw reload\nopenclaw doctor\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6280\u80fd\u5217\u8868\u4e2d\u51fa\u73b0 <code>sonos-audio-controller 4.4.0-audio-hub<\/code>\uff0c\u5373\u4ee3\u8868\u6a21\u7ec4\u90e8\u7f72\u5b8c\u6210\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e03\u3001\u5168\u529f\u80fd\u4ea4\u4e92\u6307\u4ee4\uff08\u76f4\u63a5\u590d\u5236\u4f7f\u7528\uff09<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u626b\u63cf\u5c40\u57df\u7f51\u5185\u6240\u6709\u5728\u7ebf\u97f3\u54cd\u8bbe\u5907 <code>\u626b\u63cf\u97f3\u54cd\u8bbe\u5907<\/code><\/li>\n\n\n\n<li>\u67e5\u770b\u4e2d\u63a7\u7ec8\u7aef\u4e0e\u8bbe\u5907\u57fa\u7840\u53c2\u6570 <code>\u67e5\u770b\u8bbe\u5907\u8fd0\u884c\u72b6\u6001<\/code><\/li>\n\n\n\n<li>\u64ad\u653e\u6307\u5b9a\u97f3\u9891\u66f2\u76ee \/ \u7f51\u7edc\u97f3\u6e90 <code>\u64ad\u653e\u97f3\u9891\u66f2\u76ee \u672c\u5730\u97f3\u4e50\/\u5728\u7ebf\u97f3\u9891\u94fe\u63a5<\/code><\/li>\n\n\n\n<li>\u6682\u505c\u5f53\u524d\u6240\u6709\u8bbe\u5907\u64ad\u653e <code>\u6682\u505c\u5f53\u524d\u64ad\u653e<\/code><\/li>\n\n\n\n<li>\u5207\u6362\u81f3\u4e0b\u4e00\u9996\u66f2\u76ee <code>\u5207\u6362\u64ad\u653e\u66f2\u76ee<\/code><\/li>\n\n\n\n<li>\u8c03\u6574\u8bbe\u5907\u6574\u4f53\u97f3\u91cf <code>\u8c03\u8282\u8bbe\u5907\u97f3\u91cf 60<\/code><\/li>\n\n\n\n<li>\u5207\u6362\u9884\u8bbe\u97f3\u6548\u65b9\u6848 <code>\u8bbe\u7f6e\u97f3\u6548\u65b9\u6848 \u5f71\u9662\u6a21\u5f0f<\/code><\/li>\n\n\n\n<li>\u7f16\u8f91\u64ad\u653e\u961f\u5217\u5185\u5bb9 <code>\u7ba1\u7406\u64ad\u653e\u961f\u5217 \u6dfb\u52a0\u66f2\u76ee\u540d\u79f0<\/code><\/li>\n\n\n\n<li>\u65b0\u589e\u8bbe\u5907\u5b9a\u65f6\u542f\u505c \/ \u64ad\u653e\u4efb\u52a1 <code>\u914d\u7f6e\u5b9a\u65f6\u4efb\u52a1 \u6bcf\u65e508:00\u81ea\u52a8\u64ad\u653e<\/code><\/li>\n\n\n\n<li>\u67e5\u9605\u5386\u53f2\u64cd\u4f5c\u8bb0\u5f55 <code>\u67e5\u9605\u64cd\u4f5c\u65e5\u5fd7<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u516b\u3001\u5e38\u89c1\u5f02\u5e38\u6392\u67e5\u65b9\u6848<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u63d0\u793a sonoscli \u547d\u4ee4\u672a\u627e\u5230<\/strong> \u68c0\u67e5 npm \u5168\u5c40\u5305\u8def\u5f84\u662f\u5426\u52a0\u5165\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\uff0c\u91cd\u65b0\u6267\u884c\u5168\u5c40\u5b89\u88c5\u6307\u4ee4\u540e\u91cd\u542f\u7ec8\u7aef\u3002<\/li>\n\n\n\n<li><strong>\u626b\u63cf\u4e0d\u5230\u97f3\u54cd\u8bbe\u5907<\/strong> \u786e\u8ba4\u64cd\u63a7\u7ec8\u7aef\u4e0e Sonos \u8bbe\u5907\u5904\u4e8e\u540c\u4e00\u5c40\u57df\u7f51\uff0c\u5173\u95ed\u7cfb\u7edf\u9632\u706b\u5899\u4e0e\u9694\u79bb\u7f51\u7edc\u89c4\u5219\u3002<\/li>\n\n\n\n<li><strong>\u6307\u4ee4\u6267\u884c\u6210\u529f\u4f46\u8bbe\u5907\u65e0\u54cd\u5e94<\/strong> \u68c0\u67e5\u97f3\u54cd\u8bbe\u5907\u4f9b\u7535\u4e0e\u7f51\u7edc\u8fde\u63a5\uff0c\u91cd\u542f\u8bbe\u5907\u540e\u91cd\u65b0\u626b\u63cf\u7ed1\u5b9a\u3002<\/li>\n\n\n\n<li><strong>\u65e5\u5fd7\u6587\u4ef6\u65e0\u6cd5\u751f\u6210<\/strong> \u6838\u5bf9\u65e5\u5fd7\u76ee\u5f55\u8bfb\u5199\u6743\u9650\uff0c\u624b\u52a8\u521b\u5efa\u914d\u7f6e\u4e2d\u6307\u5b9a\u7684\u65e5\u5fd7\u6587\u4ef6\u5939\u540e\u91cd\u8bd5\u3002<\/li>\n\n\n\n<li><strong>\u97f3\u91cf \/ \u97f3\u6548\u8bbe\u7f6e\u4e0d\u751f\u6548<\/strong> \u786e\u8ba4\u5f53\u524d\u64cd\u63a7\u76ee\u6807\u4e3a\u5bf9\u5e94\u5206\u7ec4\u8bbe\u5907\uff0c\u5355\u8bbe\u5907\u64cd\u63a7\u9700\u8865\u5145\u8bbe\u5907\u540d\u79f0\u53c2\u6570\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e5d\u3001\u529f\u80fd\u62d3\u5c55\u4e0e\u751f\u6001\u8054\u52a8\u65b9\u5411<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8054\u52a8\u8bed\u97f3\u8bed\u4e49\u8403\u53d6\u5f15\u64ce<\/strong>\uff1a\u901a\u8fc7\u8bed\u97f3\u53e3\u4ee4\u4e0b\u53d1\u64ad\u653e\u3001\u6682\u505c\u3001\u8c03\u97f3\u91cf\u6307\u4ee4\uff0c\u5b9e\u73b0\u8bed\u97f3\u63a7\u97f3\u54cd\u3002<\/li>\n\n\n\n<li><strong>\u63a5\u5165 MCP \u96c6\u7fa4\u8fd0\u7ef4\u6a21\u7ec4<\/strong>\uff1a\u5c06\u58f0\u573a\u4e2d\u63a7\u7eb3\u5165\u8fdb\u7a0b\u6258\u7ba1\uff0c\u5b9e\u73b0\u540e\u53f0\u5e38\u9a7b\u3001\u79bb\u7ebf\u91cd\u8fde\u3001\u5f02\u5e38\u544a\u8b66\u3002<\/li>\n\n\n\n<li><strong>\u7ed3\u5408\u81ea\u4e3b\u8fed\u4ee3\u667a\u80fd\u4f53<\/strong>\uff1a\u6839\u636e\u4f7f\u7528\u4e60\u60ef\u81ea\u52a8\u4f18\u5316\u97f3\u91cf\u3001\u97f3\u6548\u3001\u64ad\u653e\u5217\u8868\uff0c\u9002\u914d\u4f7f\u7528\u504f\u597d\u3002<\/li>\n\n\n\n<li><strong>\u5bf9\u63a5\u6587\u6863\u5904\u7406\u4e2d\u67a2<\/strong>\uff1a\u8bfb\u53d6\u6587\u6863\u5185\u7684\u6b4c\u5355\u6587\u672c\uff0c\u81ea\u52a8\u6279\u91cf\u5bfc\u5165\u64ad\u653e\u961f\u5217\u3002<\/li>\n\n\n\n<li><strong>\u62d3\u5c55\u573a\u666f\u8054\u52a8<\/strong>\uff1a\u642d\u914d\u5b9a\u65f6\u4efb\u52a1\uff0c\u5b9e\u73b0\u6587\u6863\u64ad\u62a5\u3001\u8bed\u97f3\u63d0\u9192\u3001\u5168\u5c4b\u97f3\u9891\u8054\u52a8\u64ad\u653e\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u5341\u3001\u6a21\u7ec4\u6574\u4f53\u603b\u7ed3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u65b9\u6848\u5c06\u539f\u751f Sonoscli \u547d\u4ee4\u884c\u5de5\u5177\u5347\u7ea7\u4e3a<strong>\u5168\u5c4b\u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef<\/strong>\uff0c\u4ece\u5355\u4e00\u6307\u4ee4\u5de5\u5177\u8fdb\u5316\u4e3a\u5177\u5907\u96c6\u7fa4\u7ba1\u7406\u3001\u72b6\u6001\u76d1\u63a7\u3001\u65e5\u5fd7\u8ffd\u6eaf\u3001\u5b9a\u65f6\u8c03\u5ea6\u7684\u4e13\u4e1a\u97f3\u9891\u7ba1\u63a7\u5355\u5143\u3002\u6574\u5957\u547d\u540d\u3001\u672f\u8bed\u3001\u6587\u6848\u3001\u67b6\u6784\u5ef6\u7eed\u7edf\u4e00\u539f\u521b\u98ce\u683c\uff0c\u4e0e\u6b64\u524d\u6240\u6709\u6a21\u7ec4\u65e0\u7f1d\u517c\u5bb9\uff0c\u8fdb\u4e00\u6b65\u5b8c\u5584 OpenClaw \u751f\u6001\u573a\u666f\u8986\u76d6\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5168\u5957\u6280\u80fd\u5b8c\u6574\u6e05\u5355\uff08\u7d2f\u8ba1 10 \u5957\uff09<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u68c0\u7d22\u7c7b\u6a21\u7ec4<\/li>\n\n\n\n<li>\u6587\u672c\u51dd\u7ec3\u6a21\u7ec4<\/li>\n\n\n\n<li>\u591a\u5f15\u64ce\u641c\u7d22\u6a21\u7ec4<\/li>\n\n\n\n<li>\u81ea\u8fed\u4ee3\u667a\u80fd\u4f53<\/li>\n\n\n\n<li>\u591a\u6a21\u6001\u751f\u56fe\u6a21\u7ec4<\/li>\n\n\n\n<li>MCP \u96c6\u7fa4\u8fd0\u7ef4\u6a21\u7ec4<\/li>\n\n\n\n<li>\u8bed\u97f3\u8bed\u4e49\u8403\u53d6\u6a21\u7ec4<\/li>\n\n\n\n<li>\u6280\u80fd\u6784\u5efa\u5de5\u574a<\/li>\n\n\n\n<li>\u6587\u6863\u89e3\u6790\u5904\u7406\u4e2d\u67a2<\/li>\n\n\n\n<li><strong>\u58f0\u573a\u4e2d\u63a7\u7ec8\u7aef\uff08Sonoscli\uff09<\/strong><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u65b9\u6848\u5b9a\u4f4d\u4e0e\u539f\u751f\u80fd\u529b\u77ed\u677f \u672c\u6a21\u7ec4\u57fa\u4e8e Sonoscli \u547d\u4ee4\u884c\u5de5\u5177\uff0c\u6253\u9020\u9002\u914d OpenClaw \u751f\u6001\u7684\u58f0\u573a\u4e2d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-93","post","type-post","status-publish","format-standard","hentry","category-mianfeiercikaifalongxiaskill"],"_links":{"self":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/93","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/comments?post=93"}],"version-history":[{"count":1,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/93\/revisions"}],"predecessor-version":[{"id":94,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/93\/revisions\/94"}],"wp:attachment":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/media?parent=93"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/categories?post=93"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/tags?post=93"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}