From 065e754376ea7535668333ac561f7ab34192aca2 Mon Sep 17 00:00:00 2001 From: waxgourd Date: Thu, 24 Apr 2025 20:01:52 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8E=A8=E5=87=BAxiaozhi-esp?= =?UTF-8?q?32-server-mini=E3=80=81xiaozhi-esp32-server=E3=80=81xiaozhi-esp?= =?UTF-8?q?32-webui;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- redis-server/DOCS.md | 88 ++++++++ redis-server/README.md | 80 +++++++ redis-server/config.yaml | 29 +++ redis-server/icon.png | Bin 0 -> 482 bytes redis-server/logo.png | Bin 0 -> 1956 bytes xiaozhi-esp32-server-mini/CHANGELOG.md | 35 +++ xiaozhi-esp32-server-mini/DOCS.md | 52 +++++ xiaozhi-esp32-server-mini/README.md | 23 ++ xiaozhi-esp32-server-mini/config.yaml | 61 ++++++ xiaozhi-esp32-server-mini/icon.png | Bin 0 -> 2518 bytes xiaozhi-esp32-server-mini/logo.png | Bin 0 -> 33663 bytes .../translations/en.yaml | 59 +++++ .../translations/zh-Hans.yaml | 59 +++++ xiaozhi-esp32-server/CHANGELOG.md | 31 +++ xiaozhi-esp32-server/DOCS.md | 206 ++++++++++++++++++ xiaozhi-esp32-server/README.md | 24 ++ xiaozhi-esp32-server/config.yaml | 21 ++ xiaozhi-esp32-server/icon.png | Bin 0 -> 2503 bytes xiaozhi-esp32-server/logo.png | Bin 0 -> 19926 bytes xiaozhi-esp32-webui/DOCS.md | 27 +++ xiaozhi-esp32-webui/README.md | 15 ++ xiaozhi-esp32-webui/config.yaml | 39 ++++ xiaozhi-esp32-webui/icon.png | Bin 0 -> 2940 bytes xiaozhi-esp32-webui/logo.png | Bin 0 -> 37788 bytes xiaozhi-esp32-webui/translations/en.yaml | 29 +++ xiaozhi-esp32-webui/translations/zh-Hans.yaml | 29 +++ 26 files changed, 907 insertions(+) create mode 100644 redis-server/DOCS.md create mode 100644 redis-server/README.md create mode 100644 redis-server/config.yaml create mode 100644 redis-server/icon.png create mode 100644 redis-server/logo.png create mode 100644 xiaozhi-esp32-server-mini/CHANGELOG.md create mode 100644 xiaozhi-esp32-server-mini/DOCS.md create mode 100644 xiaozhi-esp32-server-mini/README.md create mode 100644 xiaozhi-esp32-server-mini/config.yaml create mode 100644 xiaozhi-esp32-server-mini/icon.png create mode 100644 xiaozhi-esp32-server-mini/logo.png create mode 100644 xiaozhi-esp32-server-mini/translations/en.yaml create mode 100644 xiaozhi-esp32-server-mini/translations/zh-Hans.yaml create mode 100644 xiaozhi-esp32-server/CHANGELOG.md create mode 100644 xiaozhi-esp32-server/DOCS.md create mode 100644 xiaozhi-esp32-server/README.md create mode 100644 xiaozhi-esp32-server/config.yaml create mode 100644 xiaozhi-esp32-server/icon.png create mode 100644 xiaozhi-esp32-server/logo.png create mode 100644 xiaozhi-esp32-webui/DOCS.md create mode 100644 xiaozhi-esp32-webui/README.md create mode 100644 xiaozhi-esp32-webui/config.yaml create mode 100644 xiaozhi-esp32-webui/icon.png create mode 100644 xiaozhi-esp32-webui/logo.png create mode 100644 xiaozhi-esp32-webui/translations/en.yaml create mode 100644 xiaozhi-esp32-webui/translations/zh-Hans.yaml diff --git a/redis-server/DOCS.md b/redis-server/DOCS.md new file mode 100644 index 0000000..64d8c2f --- /dev/null +++ b/redis-server/DOCS.md @@ -0,0 +1,88 @@ +# Redis 服务器 + +Redis 是一个开源的内存数据库,可以用作缓存、消息代理和数据存储。此插件为您的 Home Assistant 安装 Redis 服务器。 + +## 如何使用 + +安装后,Redis 服务器将在默认端口(6379)上运行,并可以通过 Home Assistant 或网络中的其他设备访问。 + +### 配置 + +以下选项可在插件配置页面上设置: + +```yaml +# 示例配置 +port: 6379 +databases: 4 +password: mypassword # 强烈建议设置密码 +appendonly: true +``` + +#### 选项 `port` + +Redis 服务器的监听端口。默认是 6379。 + +#### 选项 `databases` + +Redis 实例中的数据库数量。默认是 4。 + +#### 选项 `password` + +可选的 Redis 认证密码。为了安全起见,强烈建议设置此选项。 + +#### 选项 `appendonly` + +启用/禁用 AOF(Append Only File)持久化。此选项默认为启用,确保在重启后数据仍然可用。 + +## 高级配置 + +本插件支持使用完整的 Redis 配置文件进行高级配置。插件首次启动时,会在`/config/redis/redis.conf`创建一个默认的 Redis 配置文件,并通过软链接连接到`/etc/redis.conf`。 + +您可以通过直接编辑`/config/redis/redis.conf`文件来自定义 Redis 的所有设置。这些更改将在插件下次重启时生效。 + +### 配置文件路径 + +- 主配置文件:`/config/redis/redis.conf` +- 软链接位置:`/etc/redis.conf` + +### 常用高级配置选项 + +以下是一些您可能需要在配置文件中调整的常用高级选项: + +``` +# 内存限制 +maxmemory 100mb +maxmemory-policy allkeys-lru + +# 快照配置 +save 900 1 +save 300 10 +save 60 10000 + +# 连接限制 +maxclients 1000 + +# 日志级别 +loglevel notice +``` + +关于所有可用配置选项的详细说明,请参考[Redis 官方文档](https://redis.io/topics/config)。 + +### 注意事项 + +- 如果您在配置文件中修改了基本设置(如端口号),请确保同时更新插件的配置选项,以保持一致性。 +- 建议在修改配置文件前先创建备份。 +- 不当的配置更改可能导致 Redis 服务无法启动。 + +## 使用案例 + +Redis 服务器可以用于多种场景: + +1. 高速缓存 +2. 用于 Home Assistant 自动化规则的消息代理 +3. 临时数据存储 +4. 跨设备/服务的共享状态存储 + +## 支持 + +如有问题或建议,请通过 GitHub 仓库提交问题。 diff --git a/redis-server/README.md b/redis-server/README.md new file mode 100644 index 0000000..cece8f5 --- /dev/null +++ b/redis-server/README.md @@ -0,0 +1,80 @@ +# 冬瓜甄选addons:Home Assistant Redis 服务器插件 + +这个插件为 Home Assistant 提供了一个 Redis 服务器。Redis 是一个开源的内存数据库,可以用作缓存、消息代理和数据存储。 + +## 安装 + +1. 在 Home Assistant 中添加此存储库 URL 到您的插件商店 +2. 安装 Redis 服务器插件 +3. 启动 Redis 服务器插件 + +## 配置选项 + +| 选项 | 描述 | +| ---------- | ------------------------------ | +| port | Redis 服务器端口(默认:6379) | +| databases | Redis 数据库数量(默认:4) | +| password | Redis 认证密码(可选) | +| appendonly | 启用持久化存储(默认:开启) | + +## 配置文件 + +插件第一次启动时会在`/config/redis/redis.conf`创建一个默认的 Redis 配置文件,并通过软链接到`/etc/redis.conf`。您可以直接编辑此配置文件来自定义 Redis 的高级设置。 + +配置文件的更改将在插件下次重启时生效。插件的基本设置(端口、数据库数量、密码和持久化)会在首次创建配置文件时自动应用。 + +## 如何使用 + +安装并启动后,Redis 服务器将在您的 Home Assistant 实例上运行。您可以使用标准的 Redis 客户端连接它: + +``` +redis-cli -h -p 6379 +``` + +如果您设置了密码,可以通过以下方式连接: + +``` +redis-cli -h -p 6379 -a +``` + +## 数据持久化 + +默认情况下,Redis 数据将保存在`/data`目录中。如果您启用了`appendonly`选项,Redis 将使用 AOF(Append Only File)方式进行持久化。 + +## 开发信息 + +### 自动化构建 + +本项目使用 GitLab CI 进行自动化构建。当代码推送到主分支或创建标签时,CI 流水线会自动构建并推送 Docker 镜像。 + +支持的架构: + +- aarch64 (ARM 64 位) +- amd64 (x86_64) + +### 手动构建 + +如需手动构建,可以使用以下命令: + +```bash +# 获取版本号 +VERSION=$(jq -r '.version' config.yaml) +ARCH="aarch64" # 或 "amd64" + +# 从build.yaml获取基础镜像 +BUILD_FROM=$(yq eval ".build_from.${ARCH}" build.yaml) + +# 构建Docker镜像 +docker build \ + --build-arg BUILD_FROM="${BUILD_FROM}" \ + --build-arg BUILD_ARCH="${ARCH}" \ + --build-arg BUILD_VERSION="${VERSION}" \ + -t "registry.wghaos.com/wghaos/redis-server:${ARCH}-${VERSION}" \ + . +``` + +## 注意事项 + +- 默认情况下,Redis 仅监听本地网络。 +- 建议为您的 Redis 实例设置密码以增强安全性。 +- 如果您修改了配置文件中的基本设置(如端口),请确保同时更新插件的配置选项,以保持一致性。 diff --git a/redis-server/config.yaml b/redis-server/config.yaml new file mode 100644 index 0000000..d1a2c70 --- /dev/null +++ b/redis-server/config.yaml @@ -0,0 +1,29 @@ +name: "Redis Server" +version: "7.2.7" +slug: "redis-server" +description: "Redis数据库服务器插件,为您的Home Assistant提供高性能缓存和数据存储服务" +url: "https://github.com/redis/redis" +startup: services +boot: manual +init: false +host_network: false +ingress: false +arch: + - aarch64 + - amd64 +map: + - config:rw +ports: + 6379/tcp: 6379 +ports_description: + 6379/tcp: "Redis服务器端口" +schema: + port: "int(1025,65535)?" + databases: "int(1,16)?" + password: "str?" + appendonly: "bool?" +options: + port: 6379 + databases: 4 + appendonly: true +image: "r.hassbus.com/wghaos/redis-server" diff --git a/redis-server/icon.png b/redis-server/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..14f12192f0899d8fdaddb0463fb8f76f31216d4d GIT binary patch literal 482 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%0D|nEhwrW?rcynsvwRyIWV4e z9irrCXe-O)Bf~+^T?<^5LA@5`L=aPg{YI?M)St7A>{I82=%BY^5Z2 z67*KrN^YWr%~TL$K2iDjcn`tD4OQZF z7(P#gk$-Pq1sfoYHG;?#P|;m3cG!X>ov3YSQTYV;sOnkZ1^dzzEFc#pgQx)8%iSS+ z=O4%C;q&oz3`BfCriLPfZYqet$$td$`=b>-lYzp)Sz85haB$EXrH``#VBcMh#Gi2? zbIVk))k(*&Yg$JDcQ^PP3g{O?5ky~#XsIBsCqWOGoD{cVN?!A! zXiX<$4MLExB ztV%?oI}RmEb%&uR5wdsuH$Kju!(PJ_v0VsV6FpW|xbmxUyTdlxP#jT@HWbGY;;lE3R`y98D=6!z-KzTWGhNFH?pWvh%l|rJCR(_dkB1LS3$OX`cR@KaL*esV zMsUE#HC)}w5YlfGb~AF!PvY}KH8Wd?8A$poRLIrREK{)31VU&;B{q_k8DzIE zc9xbKusIOxsfSexzX%@!Lyy&h4}l7Y6xtK$%H9sx(HV!ns0wK-Sjt!z%sumEc$&n~ zduA7aUD?ABr02vgUs!1nI-hq~Cy!%>)ZcHf*2**w6~+qgAiDuhRs0 zir7%Y%7&s1#n}f|^n(pySdzpO=Z^8(aD)WbzQxBe4t(J7bQpP(jTLkN$o|MAlZUWf z5LpT0#*0@B_okC{K^MNv;5BHsoskl3`Uu$=J}k2DdHf75HPGTL0glCd2;W?;0pX@jKY6hetx-Lxuab;a<3|H%7QsVW#R-laOVw@b9>1v`)BhJO}rk znW1bUgh1XeFzJL)t*R70s)81zwMwa_cA#WSP(77_Pd6>04#c$uaiA`iBd|9NTW1j2l37t{>vprFGF$3qO?g|2e~SeJ!(xKP z@ATt-Z78arXg}F@=;#=H>wCwbf5r;6iOQ!BM=5k{cdg4=i3$cE zZ#DUNiBDGWu@l=_OvEyVEJ?vzGipmMOWF_<^7bs&2&7VrIQxCN6x~^^k14nq^Vv>< zz<2pTCw%0R5egP|fh`aR6C-bXhMb$9PZ#O_E24U5taF9Wsnk?>?Gpgge*LN7IBpowaTN{ElGzIxRu>=Pm zz%_w-(uHkUT*riqv3G*nPQI&GL!8Ame0-dTPo{b-Ub2tTQjmrXQb2m|&J##sj zESlG5ey*3EXc%r?(FK=v#$cNK8Exu&E*gT5KXn>rpxS6hi4DhNq!)s)RU&s$K($t` z-*RB;Y4VNEWT|T9t$H&~m#C5pEvg`nLYb}A3)V~pQ4#SIgWR}Ru@oWG06e8Z0{M8h zG(y;T+^vm@Hq_JK;S<@;Kx8`)qF1)mO1|`;n8-d&ROV1D+*)rDSxwMQ1rb^XAD_&5 z`0xZB!-wj3l&B5~e)N1>zYpu#BEpBthwz;&>Cl5SM&~qm_pgq@y~I||lqwWF zaiS%B{2Rw6;P3aHF&lf$Y<37CQ$m)Qu>z`kmo`fU?PQFn3f0XT_D-tK7U}ec%tEqq zgq=JoR2=bNxQ&6~tQ3Luz!-_0(dmh<(JK+-`xAK(c^LhaEIQ(0+C^=0q525xeePCl zU#gM>uYPwwG=Yn`QCom>tX$q_=83RRCnjC~^Y4ES(A#6%7qNR6{##eH#!`TlaFM0x znY|RVgqXCTi3=`M$Q~16J|2{pui?7Q$A9_!mT_EPv( z5f%HApJZ%5OK@X!Oh$Nr(eBXreJPiiA3 zV|e@7&J1c!aOK_F4xgNcCmtNNAHTULVUN>WOB(TO|NjT-jg%i%K-D7XseX30)4FPl zc8$eL*uYX;rm%xF@Nl61V^5I=Jx-42zOgx&A{MSfS_OTb_4#79P{$GFnD?tFuA?X@ zWL$QXPMjpozFL#mhU*C=!$tiN7L4_J$uGQzH14k*9rq0%zx~U>Gw}AUgYWqKaj_oNw7Vncy-+`x+rH$p-WL~I)>bx;$eopsk|=MKh0P%`RM@$1B% zR+RP%^0GusG9KFAQPu4}(HI9}QfAQ#=r>U#CTMQlIao8}tOy+&@Z-nF|KRjY_E2wU z0;1Lk3NabORIt^qX}H=Cz6N(z_xs_mCSeqeLVtHGj_SAG8cu}j_svH}X%818MIMXP z>flMz^}NNCSx-0ksA_B*fq%GkHMMT*lR?^mF;&lYd<>Hrf4O5NeJ6Ye}h#|3K7g|mpI+h7tQUIGlD1x|sRoXxm zTqsns2;pM~XYb4wO3+Cfe;0|z{LWzPrGA>GHPrp~AIT7#VNeggH4>z;ACBF_#LH(N zJlLRqbe1qavbL>_W;Sx6vC7i)e5Me=+mQ-8QuNq}F?M3RHISa(VxvTx_xg2%cB7QV zNX(+~R@5yPY*0VL+2>Q@r5s5k{Crez-07m?1?gI!Hb*6_y;gU_<#h z&@B_nmyYO9I3ph_g5Lm35%Of7;=4zTSb_}%)c(g0&oqvi<&u?)vY^efr82KO+#7dT zQSuElXh(}R{Rg*f8(0&L25;KDB7R$UM+&f;nwVITWkbaYeEFrB+4^^AKcAY;L(00+ z;(RS=JuxkP-<~lT{UwPFnfg`CE?ab-ORpam$Kf&c6RannrWZ4XxMR$OHgl%rtn6Tx za7R}XuJ23J297b-3;GhIVUEBT4v)bMiB<4DBl&ua#4H+!Q|{q~qNU7n70~Q9r2N?h z1qFy)2+%s?1p>bZW;=PHT2Vp%xoEr5j$>BTw(GnNEmfN)Tx1p$8&Z^W$S6uCGRH_x+Dv)yY=>d(dEO+`oUC}{ev3x!UKi^X#{aF6&?NMfvN9) z_^v14`|0l-`mJB?pSU-jh?6fJXh_D$Y^XgXMY0qXW<#;J!{ltSfS@w_Nk_61`-!91 z(V{T*WBn!hNn*vGB6iKsXQmM0W0}Ga?KwkZCYGibE!j`UW@&-~)rCQb*7PkKR@h3& zTTzEXgcaL{;&F;Lw84V<0foDupgJ)~@Vm&qLpv&ny<^z6CYfmKy+rsJnD&eTL;+a= zT~-S$7Amk*8>(S466m@AsfjeJ1+qkpTP9S6CEl17_vG|Uo z*d6Z`G8!8!rwTM#!A(Bo6)T~IWbk3K0^=oYw6YYvxFLuLD?*4?6(PKJWse;bGK ztywJSs@gO*uDQp6c0I89IUg5PiT^&e7FY5eFV=GtebLs;n3o0RCvxIT5v&#%ZSosb z^_p!#-R8e#;gXne##$gwSmr44S_OHTJ6tjV{Y=5eTT#1Yk&Z6ljt70qj=_N+?mGR0 z|9s>mB;(PxOA;&r^TdgItP}o9o`UT#8`dhx`VLq=N!x zLT7T7CH-8i1+w8uVh-f2Bw?DVAa2`+lT9I<$dv5aQ+{=H_QfCh(&Lt8@LRNR9NCQP z>g6X*7l2D{ZLn4bqBEJ1U`EOMIQbRBGg%?Veh3LBTv$?t!Pid1+dG$`-MM4Zdbj4#uJ!*saBCd<^IktlODwoy&4!F}_x) zHn)?O3W_lx>jUCeG7HgoKQQduLN6tFt}3V-)Zhn00lK8lNKd>fs-OeNJyY=LkqL;l zF~^Ewovfmj)eNmjHazFpoHNnm$b5PvD_B3thQA4!LbRTIrqGY|lx^611YyP<>t##@ znGJO`Ztl3mOenLUer%}yeg*kYIT#H!jqgNT%JxQ>>&JQAstdF3czV&FI*Bo$v=lKR z&xahW)Y@+A{Jb!-tSB!+vN|A3T%HvLWH2)CE8Chuc<@Z#kqMPh-Jp8Rv0?%S*F>KR zIvYKkIQRH;!I6Nm8%wb2v}|EHH2ln8tTezfg=jx9{^K)+i`jl%Ow4=h_57zTdc@7JYS~z>GU(g zWnryCa%^-aHOq;#G9m(PC@V!^Ezp@@YJOo4sd6jsHZ4WN_vPX}FAmhR0UrPFSSXNK zHIT4><-zW_=cTP$*63odQOQzVUIlqET*Nig%SE}ZIX#tkZ#==Ov!S|KP(cY;rVu|8 z>sx%LkXL|Ktte&+S%+s-48Gfz>^Ni=x%ipV9Ce*X-8BPnTaqFLm7Idk$v!Z|vgAP^a zTzCvZQ3Yx6TGaZeq68YJD|9<_!{y}8wa}x1S3frk+H7M3QO7;%SFKu6%oG;eEoI@z za*y~ACo-zr@QOoucngTi^ysu{P!Ukx+p4hS4?oxoWizc-{fDeeNZLj(_tB87~MMlL+mdfG)12p0Sqn z!a884NrH-HL}iUPP^q?kKD^?gwl@#hc?I{Cl(7;qR0YZVq7pG6urmO5A7k~vcWfJJ z`;ggdQ2}wZJhPvuw)mL{znA@N)(gh|o>nbTT|_bdY{GZe0pzzeeTkCacyK8;OyERf zP8-WsD@v>0F$}8-(zr>ItY8gP+%ik;Ph^Z#4f*l3nyj)KC5|D)I1nu!Dh<29Fcm}~ z5DWwaN3t^zefSU1=fd>vNIS|xG(T}Q_o)vr{w)lamaek>?cMsXbHVzz1vAQrXS zDYvd?=N!OjG!#+QKuA}>(+ePkYgVL+{;y2>lB%WiJv6COP%9*;3N{*Spm-H$Lu@vu zV!mS{S!~GP=i@CtRnJ>BUYTvHtT^L7_MI9w@d6{LApad9r_({SsDcO~eoq9dSyG0@ zd^~(;J@LH|KAHN-tZ}n-BJ2xjAmaPC?g{&=kA{2>k0`a6Sq;K@+|Y)O&lbY|ppdPo zt2(lwJbWqADEhP(U}SY4J?c%O|en>>9WOQLOwR+ z?_;JA6CbD+ELHDjA8}Yx&83c~C_xILq68f(s6>LM3gYKN#T@!nQRv8foR5aZf&nmd z%{b*3f`fx;Lsk>|<4r5+cgKVg-@AofK-ds01|DWTzp&5jId1f)P6Gc z^ArEk@0~4y9+5Zm)#RA`mb&~XAQs^l$b}Glb=|aMFn+-RNZONqNm|_-HBL;Ilx7fy zRq;J!>qhvue7KmVXX*gc&IH1mS~Bk&W~0SMpc-ZarISg7>xl}SvH`E!!9;{MBy50e zjuf1NfsL1Q1CJ>k15W%mcGAW;2?69&^|ZkP*lMBUItwnz6;b`<5aJ2e!5(!;zB8Sb ztg3>(P_oZ558(%Xb%KuA!1^RAKdNCf~mm*%{n0Y z9wBQaJa$PlW{UQ?TA2#b3w2K7rVOLe95#zE@ESuzV1`Y@dH?S502_{XK`NkZOU8mz z=9lr~j_V4@j~xt>`?y+DqCZZTH5NCVl5nq>9n)*h`+OZpso9OwjFS}FI1RLDxb^{B zH1ao`b`NL%!Ul;-c%O#~`sup$rnUVPKI{$iU!xhb(X!`DQuSQ+K|15L2qX_8E`m}s zYPJgEC(#8|K%?JNgb@4s-%%a2XGX&UJxkDt8yj$p*-oZ<_&s>|^tn8R&&Zi^sFEvF z_}W%Kat@RQGYc9ROqi?ZYUcUEZfMvaboG!qFAzT-(9gyf;bk>IHYYBF&uc*LxdYHJ zqHZea=?uAvniycHg1izc=+E^!gt~QtdaP*zGn{{)_sHq1HFEXE$$edlu=da$D^B7q z8mb`1NOv8dhqrF%rhPckntkxeW4_}-UKugL!PE~&ARyelVmJ~oR;u1D{__HnT2sr4 z;)+CcZX;$zb3ms<#L1ux&Tmi%$@h)SR*6$I;Ew#5J?dW^)qu8{#>bZ8@!)BNy6xoQ zYp|XzmL6!9RA*&~FocHF_L_mAg)((BsdNNZb(`%12jwP1L1_lG*5XoS1m**3K$&{{ z@JwGb^*bj3x+PzD2zeVCiUjG@-ocz(u&^k!E#sbAwN2 zJ)31d`2PW&!uI#uDq|hmOmR#joEzoaLMwShwDrjXxS?6VzuEz~k;UBF|*qDsL zOqW^6iMb2!4u)*9>eF=%MymYHlJOZz)=I) zGW|T7p|l{Z&SdHL)}}J_xahIrdWqyXY1Wk7$DRERpT{m9)N+#el3Gp9cCzmxv!4D` zC~R7AYvsJ~WrNgyire)g9W+dtDf{V|?N0@>MV!z}dB|@G;;btm4n+LJmu@nDSTzuG zQ^80?#r#MK3-y<;?wWrLq!W9!yp8lUD&35a<(zFRDx~Yx3P@FuB`UCi(MfkFDl|!f z^Sj`9KD491v8Ef&5M{(JU06=wvxPV+U|VNBiGdLpX2(Bwc%CY%n5=N9U#`-iehem- z`4qn!@ZZmhcPWHe=7_1}eMtNVyBT4=9Q1?QKnrtk^M=f`@|(eb8@q82o`x&z{yx~ctS2^gF;9oG%Kc1=fv z{ZxYi*943o!N3v(WC%z~-;UNY5liTV7fpBhe? zBjE!n3SWR&&w;*#Ju9}(l^=cm48&wC27QJC&F1jJzMnPK#fow& zXcw*p2tBifR?7aq903uR?{di$QhRJE9-q7r;lntoW?4^``4p`uRX@GfG{&`+UWAaS zAX-rdA-&k~mNXu=;$U+=(E#hMQgKf_1h}=}?F%NadW(dQ9)5@@V9m^Y#$U4)N){|= zKQa5652fhJ-#sFf~gQ!|BQexJ(*ESwVsBwq?YtQWhbl}dGg z!Kq(8F6>X9!pT$lGN4;2qTVY;cS&lHt88B!QfM_YWm=4fW{DWihDvLK)QT#Ny+_1s zp%wcuHDn;VWeUOa;A}vuEL+$BA1Vi`pW>s-ne4mZxg;$%P!p7pT2bqtF)IeEn5#44 z+UmGY1DhhyfgJa>=*mWw#_!nxols_IwWkY%57jS_PJw>12(jP41kxlv#c~b;WQ^tL zTrh#zBD~?+70{86!qKVvGJbXV)b`2`qz%qxt8o9G@m~@P+8OVVcSw*ebaYk$Wb5l z6gwGk_i=*mTF``0YDqaYWFYD|CBFrbt5+#h8U}+k45+QjXEbXIzMdWmA6n1VJNqGP z&BIzPXtw%YwPO%od(|M6tA@1pr;y*%s|SqRDEJgPKNIt%ePaCAECF-Y0mRipOMkdf zjuXp*bBbBT_yq4O*4-SCg71HB{0&Y!58X{ zFHQi=J~aUbT@4nOypgBqRn{mi2<_}*8Ry>&(%vJ$DWO-kkYxjDwoo$VgJT*74m>ei z$l$9dI5c^-Q&c?obqlS`FP@pp#}aT|lI@zG%uUncy*7 z@L|@o_f6X=e5ii;iVne}^HlxtXy3lEn?C>ae6B(LTFrin@n5M@JAlhE=rw}^h(-83 zH}?z`qmX*;lQ6|R@m8A5s7PXN z?;bA{JaQ4hLc31hR}V)ZlscWn{Ev%Q!quC4U@B9x)sKg- z9^TaLr=R#wvpW1AIzBhnN&)_y6ykCF>d#JStOghe1RU9+<5PJ@p>F${jvOXpM!Mri zqAtTkT3Ih59EroK&JgYOz>4v#7Kr^p8%9fW@sT0SaUt3{S~p|URwy;cxH`;CA}koQ zu_87t+ULy2ymow!VZ8?T0DFySJ4N`!W7XY8MW_wmPyDV7zWU!Q5X4SPI88%XqaY$c z4G=Ndgj@DJ_8ReZ2%DGfq-sd)CaNCG&;}A6Hhh7L24KU7Znl#y2?ADm)Qs^EzN0Bq14%O>Ev7_VK4?%AXt!PLZx3S z5*$T)&aVR~CSv5*64Qnn)?~dnInx$mL02=c-xq|*`7%w!tm%!@Y?*o{1JFxss7|b& z79j1q>QoC|_=G^9G2vmwgld&QQ6Xv=#!k(F#0Ao4Si0V@Y?&+xBd#US3i29JCCqqj8cD+=`^|;O zhpgwU?IP;9y$enufSe80Nle2xOwqDAdXiXn)c$r*2eD@L+zhbPV8Kk^i)Hmf>pX(JWrs)zQ=6Fy0)!C$FJ=jx)my}Lf2#I|~|GZ8-K1Q0x8H-qHw#w7VH0vM`Z*Wca@-CKKY_|Seb_;6bl4pI0b((cYGju%}RFt%=1i>cnrK(Bb zD^-oT#e6PP%2K%mS8V8mi#yHQ%w$KH)&sF)_N63nAGv10oFf!fP(ujgu5pqBL@PF; za9CiPaiP}GxtZ=&jO~ha=b?1$?u~Y6ubV2H$)U#DfuA z^)lq#O-OlP}Her)z4ipti@YU1??Zf$|$ibkl(c;6mIBIl_*{;7KIzO z_S=s!6~wWDufJ*?RY8OhRglgiO&SDKLa~AJ5C-&sYrPF&(MzQ|JY_kQ{Ek+ODjZX~ zvgUxACP13ScP{Fuc*M`L%xJ^ga;nIHL`0zjMy^< z@0ZDC3svyOExmBnW2fPfe92TntO?E)s0zOD6Zt}TV*u@cxm5H zcaI;s{j#BcUj5k8)Lsdga|Yn`whn^e`- z1-cGly#W+URp{zS!RxPC36K8QK3bIDrDn zD3@PFiQaP?7iPFXhK~^lb$(iZw2=l=Ih?1nMq9MGCI>km1UPk|2b9enbo^d$T^H?2 z=J;K$+MWm=Zm;X_fOlTfLoFvJ-Z0xK8)j6$-a`X;t*Rf^|57PB1c{D-Cl9UWpNsI} z($oY%*96Qt1Mq>v({pb#yQ7s!9Jm_eK;1A(-dAdn&S=D!BV=9Em>RNjgi4}hom|d} z#S&bzZ4h3tXA1uF=nS2bU>C8RH|eGo{gd0)!$*l#r)$P@5YpMvLMaLki}%DvZkH?U zkrNeaPg(I^I=)aWmNx;9K}WNax>KnPt8{|*DPRn)P}rebHe9&0c1@yS;%^YpoM4#` z@=uVzu!`r3U-ZUGP^n?l=64dS8cjfLWr|Li6u!70BDij!rF1E)$H+W^38BNz)V$5) zW4*Vo?SWginW{INDZr@J%SEPqeAbh~U*7h^Bq&&Iy3nB~5!rArmr; zZWad?3dPZIOulFZWg-f-0#L1RGj_ni~l1|198 zGzcGCxd}(I1X8rGtwG?zDFNB6WH>oeU?2fXB1~7SMc`6G_bd!AalkS{hhzBWB`eq> zcyAo;g4;KD(%w#GO@ZloGv0H9k0o5hxX(|o7twyA`r(u**Z~_y!0R=mPxd+-knYw6 z?VJLL+d`&vCea_=Oq36YCiOPNf!20-EZ0SB=p4D7uWGev0$r~NpR6d)mn85$Uc6LX z7L5FxUCGEX(BS;9U%Uq1cE?`oiVk2mFLKdj5Psq%JK@6wHngMW<(M>>NR6tYtwsnV z*^OYmR}51+3Y!Hc#&D=ec86#3xQbIB2Hoso*n$)xGVdF~ptD|ubu4h7^_i+xi#_;k z_$N&EULd@r;d`_DwkNw2t3&wx*<;qMfpgwJ_3E$Rs z&H((@V`Fn~eQ`%wQPnA(*ih0uNefpRZ0Lp+$vLyQsn266A{93QbW=gmhVot1becys zZD<@qP$017awWKURX_ag%MAFdZ#_-p!TqM}nh=th@B=U23_sc02mj~mdq6ohMgUBJ z+M6&NcU80Jh+(QjZ&mYb;^a+ic|NL?c1G6(i`{pE7pyObCfK?LWvcmuNeZV0SOZ+F zOI|8Q!J?0G>VP`nf_C=JIC0&PX@}5w2bEmXj|v$dWF8tfv_JvCtR`@V`1TTaW>W z>!N()7o(2&Pqu#MIRo(fyT``f@`8=oP$-xtki^5mP(sr*96g*670{{$9-hinPxg1j zHp<{@77I$RHstC!Z`s;gcMgyrPlr!@e?OhJaDOrkbHuOSgpGtic*~k@xbz*@!9U-7 z1fJS6PP?qp(GI;)^VWi~QN=hb7>@W;9_BL*_c+WCSW>u%a$$CtDpwe!)-cf-b-;yN zzqN+m`jq!vT4)zDM$+ zSLy}=-qv!ZdVpBOUlJwkJUNkX2v@Ki(ccl>aq;?&zhGA+1|Yjtm1awrSw8@|g3aWR& zd*jHJoh@=^G7rad<^?=sO&N*PJYbhE8C=aa1P&E0O`v7KZ5T*He@vnMcM&>W!C^k; zcc;Hwm8h`wJIfT02Tw6F5YqNh_}ILwC}g@}$Q99OR7RZ5f_GH48aIDyK!K?<4}5HG z$HAxbl|(!@*OUEu?)MIIT`y@bFpL423Z7R5#O?883;E}FrOK+R&cvdT-eRQ^Wmo-Z zNR5@MdNEVbdf9It38`nWjwepQ#MH1|6$J9*PR*JVRos5*F!XdP@WJmLHxn~tdxY#K zFhjba(VB->(|n9#V(?RKi@Y62Tm`5K3l})W6dHy9z(K9Gkp!GRpU;z$5oZZ zUV2(H!4{N@HUbiNrHJa3hEfzR9;`v~-KyOta2q<@)%Wm1xdAdBu=#~LP?aX@sYhM@ z9<~&;v%@?dJU-m;7&j4>9qLX{*!sG{&=U#SDu;@Mzi+|1U@Z`}!*%-*ya;(M2?oen z(p_z)eO#q)LOTE9rES3C$E<|+nO8Y-+@n$Goj&%#dlR4d%KE`n*OBq8uby1z6hN#8 z-n?@#8wdt-HBDO`4g`BDHEo93P=pZT!D)n$z}GoCU6@fq>YnYxsU3JFl*NF4AyhF) zBi|M~lhAKXesCO^IY8d?inT*<*Y9-0KM}k6&0S|8ldC`$DlkD5aR6=UR2{@$-!ee= zxl)xXBd#}(OJ3uuyQ9Sl6lTqId3DyAHWz1LGX!hL)GI+QNPXMPq#CYoh*N5;9yVv~ zz=j)L(@AGi>k+KYj1_3%Olxo^3y%}XLbD|pwmG1~Rx1tPzE-hzvc6 z2wmYA0gEM7=*Da(Io~)yn$6dWLxb@5s#;m(BC)InUV_N+R*35GtFT2PVRK?%TBgw< zVO@|7&cG@3)rxI71GQ76tLgvY1;`nD7AhWHhCe2)O==z=CwzjJOu=@l)P ze`6vR+hiE}<%ME-7uwMA*@9#A`{Y7}0y&p0AL#Cky?Ohp)SL6Aimin0SW(@w63mL? zkBmPy#uKTqudgaRS>#eoU<%KgXT-ii8DPH0WBGdB)vT2rpUdeZRFnsy1xLnD+J z3t?T6%|D8LPA4r3U63qsmF|f{XCegs1VC)Kz2vh}q=Dlw7wqVZu?b#yiWMCe3N^@( zm?}@yVUE1-C~0UsU<|I>Y-7#LFJug^Zeq81Wn~utc8u|$LDefv&Z7ty{T+fKFtjS2 znV?3zB!B*GTWJMeRbdoIh#UMIYG|-^&~WK!F_X#Sz5eWPKty}^oV4lc?kEM&ZsVO- zeCVsmzx+JLfD0itdqDyC{YOt;{rt;@Uxb-ZdgUvZe?+01Ez&{&Z$nW5S9C_#tQ(5| zZCL2d&?5D?PP^F2XnOw;R47U@f7U;Y-S)$A(Aw$=SdU?Tx>eZDXb}$*0Di?h{ z_gM%Q>yLm9o}E{WlNeAuU}Z^B+Y!fE^-&%;1Wd(wJvH6TW~-_+i^;&_Pta|5bcD@O_q>*26YptgL;Lw?cGtq$3D=Hv^ zaMg*C3jtKPutww~F< z5|?dl2AA6w5kd$z@EqZTiVAAjzoDwC4hTi~6zvoYXKy(#>gV_ygzo%J`26o(Pyph# z=g8!5Y+2L00|5j@-B&1;emOZ)=#|+}3gAHU_RT|yHU~5l2r?!$T*E@X-D#3Jg=ml1Jlw z)Qg8pbOkuO4O6mmZIMfF<9Q(OAyYgC9}gYtOyRci>LK3J_FJgb(+KzF%JE39W+QhF!kCR_)Ypf}Z`Z=X10ZVK4Y_ z`_u)M1!dcJ_KZFLmS5X)siLZb1cn3wXdQX@5c_+7M>x+Q?C*#MPz7f)+Pyu=$ZZwU zfY{ZN2hR;cX+~56VU*mm{2+dCh=7M`i2V!Mn6eaU{N2eoo#FuZ8+MrU&XftLlM8t$ z5gR*GQed)Zkoy`SWc#Vd|YRyR}=v_-Iwa|w^6s`OK8MjTvyIO;p-1TU?2ve%Zje* zS34f^C@ComPr%N9xgY_=&e;dvGo?F2|ImE?fY!G9DPVl+ z@77g4JFzHFPT!VHzPyFl&_m3I@|&fC$3wB;9!$m*h|-uTXx+6)@3%(C)KIks^f3_a zYMExX7HqiKfOA$HI<-)sJKJLMFohC<4YL?ESijGPMcFktNB_dQYUvheRpD5rJwJr6 z(+o&_&w)r7((xE96biI=2_9d6M~a@uu}ltf9KKRkrZl#oH#iW;)6M?qXE9U2&8eT2tN7Z1R1zi2b8 zAo1>@={d*e+v+DmD8_!=E&qB2kB!TAidjxstS5ud&2lpM=&|bi+*OIhfPU;JDqsNB zFJ!c(e#B?o;Ya<<5a>K^pT2wVE}W=|e3kvEg5jV#h{+fh2ijMOpqlMYggYk}N_$3U zD|-S$8d{by<9oF04FhNm*VvHm)_>UFkJ(bDW*7%XtT>Jb1_AThWw436sgwcRCL(ya z7+cs-O*b!kK6Yo+|6`@$Vji7yjvg!=r~! z!PdbZ+jdg*6RoDGgp&BN%zZX*J!SC8enURlBI`^ogO7e*ZNEE!@#}os&%ls-7d$WZ zGcVY+Px@uxyaM>(k(q-;jt-mU1Bk6%*}0ax;&sSk!D>M4s9zxwQ z%bDQ`B1_QVe+VHqBG%{;280kn5drd2H@D|9=)lVno!{9H+b>!HS8eU1UEFZH@{*Ns`%P=%x>sz0`MwT#{oB6>5A8n*>$*GYwv(wJ z51Oce+~aP&P(xf@&#T1XR^O9>$B$;fJ?5f-e$98&z;@zI6QbOyy2gL0#y<&R<1k5W1-$zq7{> zLS|JFLIjWp5y3!65E?fa{Q$?HQV=5x<4h!m1(nZ_(jr$M5-+%rIxcW7h(2~i2 z9+{yf6YP9`@9r^pFGMo^N;T zwVtSgXhX?wwZKD&HWY71dgDD<7t9v5Lm^@j{X*!ahBA99ix+uY%B!K7WB><@{5Ulk zaJ;pY*-PHO;b-EGaV@)#JN^yR_I4^?VneHyDtz-N#~`+Ifc6{3KCV*>B{-f8g0`iH z?&D>RKDPJiN$9_15YCWb_nu#zfZiLcLMEK}MPk*HC z45)2Cz0|L$E}8mW5CGy;;`nBAO70DzJ@|IK<7d8XY zVPD8WF%W5km)O#HIAp_wYQ_U8Q#gFS7|-$QhVRcHV^)}bz5E3~O{erz%-W*W*qItKXn2?qFt&@9QdBq|I9}Np zXzT)jpN%{JH@AtZ%$PX@Ibu1_Sm|2?3_%-8hUjESHQHOo>by*V#J};wm0H@k<1hqp zLrqk#UCSw6RKwc-wlko5<`n2tPrKUBR@Kjs{k&iR#8}W$!I%{bZizMk%!vO zL{_Viv^s;&lILP)?hb2;ew<2TXIG3i?5Sd*;WIX`O+%qvZuz%lcG}H;%D`*Ka*FU_ zMJNKN+s=SCv!6cH@9*1b`xgX&xPA7a6ZaKMxeu@NHVq>aQfvYzU!By)z zK{>uar-5MeYxWTsch40eL{9L!blra9^R6LEc;k-M^z~I#_di_ir#>6-RKFSo9wh3wuT}NCpa8^!{_0PT|Ab{kiRav$hy`}?&l&8F z7R9XSY`!u-y`bG$|B;+2Y|)asf!HpL4P^lW72A1>C_b)u3`F5SOWfV!SrL4+fwXr` z)qp>ETj6vDKJvResCriP);em-)GuH- zffK>=YdK{zmQ}Sne7MD7|5>r0+9B`BwE|H4%XZ+qpa8_}k6yn0rxUZ8Q45yYp3c-Z ztOqg`lx+whW<@a`3|p3r{jgqYC<9RjV>=srE#E6=G4JPh3rT=Dx{!qzT)rMY_U>yT z^yA}n3?YMXbRtJ@%SYy*W8W+cWXtfizq}S!4-dfULa8P2n!(5aE^L>nUMrT<{JYfy z3bJ&UE8vc{?I)@q?ym5Haz9bOhuZzkE+_zLS>lngJ57av6QN*WC10GEsUU+8<3a2t zgAms2OqnyaE&k99L@yZmf6M+RyJbqpHyB?1S^=?{Li6|eUM36#1Y_US9K80%jTEkz zBqJ2G#B9mlM@lt#`PM$T>klr4%hs)=(E0(62Tz0#mj#dkC&q%!3hQ2$lb^3MQgiQu z29b-}wx7+^PX*(z+f_fSonLs{p_9{Z9T`a976_vbzCEkBopze@m}yh+{A_4MEbK7^3k(dokHPzfVJXMa)tDl95uGgb6b!n0v3-Bi!( zGx_daycOk@@KiPrCy2TY4s_Eb3+@-M82}{~rH>=5wv`larIweio)%P~iW5jxb(eGM zoDRNS)nnkvW~%N9A97b2k0gwj{cNUwWc$a(z-Pvf7vOgAzAsmXu6%vr;`QCn({+7D z)3hseL!T!n`=nv6LI zV6C#H(8Q0ut5%~GyQ!(xdW5QwV#mo|mvZOdvoVcd|9re(KR)18PrN`WbY~~4pw%E# zsnQ)sbky3pa+8K%BUe7W)ipZ%ZNvE!Ehm4BRiSL;rh2k?PlRvnU<{Pm&p<3ND}_(( z`d!!WQTp-w$p=g}sGpG`A;dvX0FM*(d&gqnyI>WNC1g&FXC9*#A{08@-`#ON)&^NZ zCK6KTyHfSJ-%$lcB^)P8h&4i7@Kd}p^RbDTovXQI=J=lb&33Qn`F)ROua(79xQ8qi z3qDLoH`O zy|SO$@utJaKDb!;E@%L8`=@^hV)ZkB`HBKl-YN{oK*A{bUpEdZ}OfT_?V{6m9&12Joxz zy>TjukFb!XICl&D>}mPe}8lg{^3izV0F)YTNzNA{fy}i+0SOZUQqp(s*PXJ05U83 z|JXYh=r*b|kKcJnBgvK@@*}q6IF6GzaYEiN@`5CVP{KkBblbGu7P7Q^pxt%@Ezq7) zw)C{8Ej_e!7n;%*x@;c{6t>y3J`)TDvIIOy|r z%$z;9K6oIo|Lq>Mq@pM(>y`=%Z6l7Vo{vZ|(?Cq-2H!)!E8Q{arTmS48(e(U7obqg zU`=eIh#Bx_?Vn`Jxz!N>)r?&nmhU!>7f znQ8mx(Pd!Zia!0Ns}^BbG+?*eoW+8$sjGiz0J6DV9G*vZzKVq8i(=PdClrc5~p4-JiIU+iIY7jk9dlI#@4WlAum8ZD{ zZ5d}kjYhs_qJ9{-EqDXBW%#yS9^fiR9+_Q>@9)BpnwpY=L6?br@0t2l_k3i@ze|!F zkR)k6s9|g8&>!J7P{P5{Xi`SEeM z0Ks5J?dl58F5J%jk%+jAJJ8sV zp5K3#s9wIu34^l}?=8*oqS{a2ukSv)cOb6(m*d?}?0N!#d}RdjHDQ%13Pb^+Du!`m z;0h$X4~c+hG(l5B4G(2uw>BxFJBV*Lr-Sga0uZddXW${|n8*K179?ec{h_`7pmZF% zD6}e=4nlYgYIx5ri_yAy1;`%?6StK3<_6KRjlFbEnRpQZjb>11kWT5$fCsK-L6!|) zVI>0I%Wrg`w{YyvyKG6SNA2pWdi3y)$Mr9aMfW4N@V;@+hYx;}489dM`Vo_(nkk`& zCrYP&&eZR25{$Yn(kdZ$xdC`K|JtJ;-B@`wONQTZl8s~6Kqq}LB%i^5o;wtglhAPq zoD>L4iQhRIjAkt^cel-7QgW`Yp=(u7Q$Kp)&^dHI97Qt=v(eI7`G|={kuM@E9rpSu z{!8Iz79jO+ppT>S#J&R{OI1Li1y9WyfT#C9r=3L}7mo_C;`I)TXn$ibdg_m7(cZtc zqQ1c(D#&-@_vkm(?epJ6D`%e8S3u95h!Mt5l^ll7cXkNz3zCOhG1(YCA+w7bKr1#m zj9!MB9X|Ng>++uc&dd5Eoi958p-RSm#Vz&g7ZvZo4+A`Jv-2#oT$H3{NXldaVRd!k zxr3*AS0Qf*ojTrwUO3W@+F-$xJQrG4kx!Oz9t}lx8|%dsLhbi!fl3FE-eWUrW(G1X zZ0egDJeG{;XHb@dLwQb^GlxfReBXv$&C!sAuvdciz1fAH+;<8cJlu}F_kZ6h%L#+inkiEu1$!|xdE2B#cvok{l7r9j9BkP zWG!uD0|-xJ02`)-3#v}a?7nr$!!#Zg1YrP*wgVw~ly*;;Nz8yd`ki0af70JPdlXLz13R|@IgZW5anC}&7JQ-TUO6R>lPHF z6%|=nO>GFK#)nb(!DuXL2-0NWxfqt}7}Wr!>pq|z<-rh4sjnm<@OxlE8nCAJp~TvU z)JD7kG=N|4?De4lRyT;W;XFfZ2YpAGKu66j1W?^)znF0bR5yw8+M_6pZ%`9z2EbJ7 z0%j5eUe*ADJ#*mfr*7R`c^8GyZnvH9_KxgN1)&zi!W=v4JN)hoC$_!yO4}AtLS9)- zHZ%}I>~NT<;^Ha~sw~Sv*R7n1O7d)|G{=r$%)))ap<6@+Hh z@cX}Oymnt*^LFA&d6G{uG$_(|aHE2B`0_a(w0Ln5S=zZY*M%yJ1XQS65qE5{k=VGn z3*xwVg-P<72>rMbrvgX|PT~r#0*D-|0YqAus8OgUV-!eO*AVP)$GXtT=J*H&n!$|X zW7fi__gpF)R94aY&7FTfw7R% zFFGv%1bd~vp^6H4^f@(%6ihXseZ78EQj$INwVlfzyuRp`8(69BI$Z#<`Z4xR zBRxF=! z@Znvno-D}~I1soqYdsrPLJW;z(@s=&~xe)3cw67U5D zk}gpbDPVvPR1dbhb}ZQQxgGPL?;efhIyk0qwy*l9=`xkEC__5e6Aj+A5%IJ4CLRZV zyOXFQ#D41cjf?wQ?MQ4&J3=1fz7-h2*7q%d)E(WpwCom`Sq+pB!`R^u1ow6i1k*yO zr-tB?K3;qB`b^X?9e56bbAek%;e%=%KMv%;^-KkkeS+CmJ3AI9>OF7tI*lvgdn1|z zlN!o&AW}E{_`8Fs?$uV31$8_4l;Ba-o4=so9RpWIoRkjtn=VaB(xfO*-hw>vTRC{JP;%)X3D_Fw~&*tTvPXWm*C_4nnMi!C;7m zvbE8GbWRIlIuHRus5PZ(NVB4oRu|m3ipsLl_wQUs9{ZGjGd;-c>{zlz@BYOwEuh+j zj}}HfH3XM*&>un1zI28pQ@|zFv%XFra%9_x>g~RD(SA0DLfr#_aZGiimX%FqZq!sGd-u% z7C@REUAL&@Hh>W7Mx7496_w=YS~`bX^dL+HBDkb5>c-_FTXl0hn;9NKzQ>p1 zxDc!RM&qsrP`*_2f+}_p!?$%J=a!q!06w+nk=IvjzsW-kDkK z6&V%L7yo%Bx^i9~>KclWafvXmFvldrrXGPV*jY0B89Yz7&<_dI+`|?wr?5@TLCPpA zC#jxGb)%oBpQF7a@V#UW4COdrqAPl=Fy9p!xe<#Iw~-`H6qi+$)ysy*kd2G4;QtTvXoNLlQ9jf^g#XaTiG(^GRK4!wrc0 z)*ID&zOMlUd-kax9VuP&(XLhV3%AB%F?^DkAZ`%L@hSKCgWgW$Apwj{eLvqvr(Rxbt zjWjIHHj!CXy~m8H_X9TyCC|pUa$;RhCb1TU7DCc+r7>692tpCRrvNK|eN!JAIx~np z31{Gr8yEh3&lj$I@{01@hB$blOAQ`A4!ay18@kWW-QE=o4Ys4+0?{wzrCuu@OUVT_iI4}HL$QtZ! z4Bs=8X`Am00Kw{>f1>NGYs>ykHThLJ*{;R-3VfDhm^rx3tiUm%#B*Ge-EJ3Q$v*&5 z4@Rvr!nUK=pEa{ki2UQ`s$(BqTVAhLLI=#uV{`)Az^!_+kO!K5x38@OkVN9)p;A#%ycvlcORFUVZ zy<_W~AADrv?3Z0mo(1r7vjhat!Obv!#^5ECkYPfo>bh2xUmaxHURj1@F>wL`J~mHz z8_W-?WIsb#{h;XDzAU6mfOy1IXM62Lk}mJ7BuuId>E`7#KOsrdAjfg};c$2%&-1SZ zg5mvw-PRk9h{f8^j094bC_(aO(VRjbZW!THt=XhMdLe!%V|D#{XS*Hq^Ip~U0r zfCP)3w`JjLpvbbE4YsC|SQtVanGRt^F1FchSHqf;;<-a3^5KW8nEa~V2$%DMtL!Ha zV)v8Glt4?8XZZ&Fsw5clY<<~&c|0%Uoo_L7Ul&3#2)W(-u@H)r8H|wI*LBE4E@^;^H6h7(6svL!J`F?-q(Ik z4`wlgQB_9psR1;~h*I#t-K;KlHcIUa{Zq)9DzJB`MN3~9D<*!JdKVSq@C?0IZkhJw!HxZ(XED#XP6v(9!Uo}ek~l&nIM7QH+39Q z(GQ6hf#=Kc!_BaAGIl%L@jlw)?kd~f-Z}Wcb7mF1qk^we?S67)j}iCN|C7z6C>sDw zIwvNJtdYs71}y+5XgeM`DBQno-hEKQhTR+oj#WZL4G~$-;WZpD9*st${Qx3&(=&19YKC-0ie^B}wju zm~K{q{oTUc>~^)%0c3jn0`SxTrh<{G9_)|f*cBMG4G^m~D9cQf$hgSb0&oh9PIm$B zr~+c17>!igc>5^~;#(NN2FP}@3?t})sD)AsBLz`!3;P9ERozG-nbSWwQq|fQ&Ih-Z zG$IUV_fUw(Dp9P3)1M;UNwbr5?BT3@S5s-Oqf-S(H-!z3fq)^)q#6a{GB_qU9_mg{ z#I%YC?k4OXz>{TpH7rpsMx{J^~_+55tjgp&&R~af3NQ(&4dKcRZ8Ix{C(q4MAZQasJ_dg|ph!qhxoJ!n)TCvO2 z44uM|oipp6P5{twDiAY*XY3dg_to2}gpq;=%4)OmGqIZ2KvolCYziJMLxluWn;9q$~J}SYav+!`3=R-DvZj}LY}ixRXm4P@tmxbQB6`A!8-Rm)OmHvp zZ}x!FDeh+%%uuIlaOZjkM%rI|qwB!lGkvf9;Y(Y>Q}F{ad{A~)ulJhCB5S0;*Kjf0 ziv{2Xw8wvcvU+)C{*E;Zi4%vD=6R;6;oT!=k)&){LAFa2#7f8Y~7dp^i9aBy^~Ngi<(&l_->SxD5pH&5FiTzm^#wAHG#x0?cM6TjclGg!DsEY(; z!7gkdQKE(7sso^E{$%nxfRv;T*kx2bjKd?#F8ui-fC);#po@SW3;BXjH~_0qDc_Ii zcuIf{x?iw+*`Jf`XlU*6Ul66s#QmJA6^twZr?J(a?aiH6lD$E22n#hSdgGu)fg$xj z%lJ$kfYH8Gu#f*p95_(9z9HXfkK5TC2t?X%d%FJ6RK;`|0ysAIFSEGsf)!a?0A8l% z_XlTqM}n2dTZTQ`*H$dVuHic9oL1tj{1jknK}ps667MA=KH@4j-c=p1v{0B`f3kJ3 zr8w8-^ZKKw(v^l?Bmfg*|7hH2vdDT$2iIBvPGgl^INRgy>mQjp9Ei@ZsVpp4k|3a7 zPOaORUi9SPSUiY=N|yi>5|F{Ifj}?>)A*MZIL{A{hMNb2Qa8kTmjY}$@IlVpkZKdojYn0?@K)Z;GmIRpL86gV%Rm>c7JR(6Y-J!d3-Btr7y1yDrtZ&jQf0>86A$ z6vewN;y$%ml`xh~3mbW4HdMtNK=C@yUDg?~%(C|YLIp(2EVIlq%Ph0ZGRrKp%reU? nv&=HfEVIlq%PtA~e*p#nDccIZCC1?r00000NkvXXu0mjfGsoF* literal 0 HcmV?d00001 diff --git a/xiaozhi-esp32-server-mini/translations/en.yaml b/xiaozhi-esp32-server-mini/translations/en.yaml new file mode 100644 index 0000000..5a0e57c --- /dev/null +++ b/xiaozhi-esp32-server-mini/translations/en.yaml @@ -0,0 +1,59 @@ +--- +configuration: + timezone: + name: "Timezone" + description: "Set the server timezone" + log_level: + name: "Log Level" + description: "Set the verbosity of logs" + llm.type: + name: "LLM Type" + description: "Choose which Large Language Model service to use" + model_name: + name: "LLM Model Name" + description: "Specific model name for the LLM" + llm.api_key: + name: "LLM API Key" + description: "API key for the selected Large Language Model service" + tts.type: + name: "TTS Type" + description: "Choose which Text-to-Speech service to use" + tts.appid: + name: "TTS AppID" + description: "Application ID for text-to-speech service (required for DoubaoTTS only)" + tts.access_token: + name: "TTS Access Token" + description: "Access token for text-to-speech service (required for DoubaoTTS only)" + tts.voice: + name: "TTS Voice" + description: "Voice setting for text-to-speech service (optional, defaults to BV001_streaming)" + asr.type: + name: "Speech Recognition Model" + description: "Choose which speech recognition model to use, different models support different languages" + asr.appid: + name: "Speech Recognition AppID" + description: "Application ID for speech recognition service (required for online services only)" + asr.access_token: + name: "Speech Recognition Token/Secret ID" + description: "Access token or secret ID for speech recognition service (required for online services only)" + asr.secret_key: + name: "Speech Recognition Secret Key" + description: "Secret key for speech recognition service (required for Tencent ASR only)" + plugins.get_weather.api_key: + name: "Weather API Key" + description: "QWeather API key" + plugins.get_weather.default_location: + name: "Default Location" + description: "Default location for weather queries" + plugins.home_assistant.base_url: + name: "Home Assistant URL" + description: "URL of your Home Assistant instance" + plugins.home_assistant.api_key: + name: "Home Assistant Token" + description: "Long-lived access token for Home Assistant" + plugins.home_assistant.devices: + name: "Home Assistant Devices" + description: "List of Home Assistant devices to control" + +network: + 8000/tcp: "WebSocket server port for ESP32 device communication" diff --git a/xiaozhi-esp32-server-mini/translations/zh-Hans.yaml b/xiaozhi-esp32-server-mini/translations/zh-Hans.yaml new file mode 100644 index 0000000..aaa801e --- /dev/null +++ b/xiaozhi-esp32-server-mini/translations/zh-Hans.yaml @@ -0,0 +1,59 @@ +--- +configuration: + timezone: + name: "时区" + description: "设置服务器时区" + log_level: + name: "日志级别" + description: "设置日志详细程度" + llm.type: + name: "大语言模型(LLM)" + description: "选择使用哪个大语言模型(LLM), DoubaoLLM:豆包大语言模型, ChatGLMLLM:智谱 AI 大语言模型, DeepSeekLLM:DeepSeek 大语言模型" + model_name: + name: "LLM模型名称" + description: "大语言模型的具体模型名称" + llm.api_key: + name: "LLM API密钥" + description: "所选大语言模型服务的API密钥" + tts.type: + name: "文本转语音(TTS)" + description: "选择使用哪个文本转语音服务(TTS),DoubaoTTS:豆包/火山引擎 文本转语音,EdgeTTS:微软 Edge 浏览器 文本转语音" + tts.appid: + name: "语音合成AppID" + description: "语音合成服务的应用ID(仅DoubaoTTS需要)" + tts.access_token: + name: "语音合成访问令牌" + description: "语音合成服务的访问令牌(仅DoubaoTTS需要)" + tts.voice: + name: "语音合成音色" + description: "语音合成服务的音色设置(可选,默认为BV001_streaming)" + asr.type: + name: "语音识别模型(ASR)" + description: "选择使用哪种语音识别模型,不同模型支持不同语言,DoubaoASR:豆包语音识别,TencentASR:腾讯云语音识别,FunASR:Fun语音识别" + asr.appid: + name: "语音识别AppID" + description: "语音识别服务的应用ID(仅在线服务需要)" + asr.access_token: + name: "语音识别Token/Secret ID" + description: "语音识别服务的访问令牌或密钥ID(仅在线服务需要)" + asr.secret_key: + name: "语音识别Secret Key" + description: "语音识别服务的密钥(仅腾讯ASR需要)" + plugins.get_weather.api_key: + name: "天气API密钥" + description: "和风天气API密钥" + plugins.get_weather.default_location: + name: "默认位置" + description: "天气查询的默认位置" + plugins.home_assistant.base_url: + name: "Home Assistant地址" + description: "您的Home Assistant实例地址" + plugins.home_assistant.api_key: + name: "Home Assistant令牌" + description: "Home Assistant的长期访问令牌" + plugins.home_assistant.devices: + name: "Home Assistant设备" + description: "要控制的Home Assistant设备列表" + +network: + 8000/tcp: "ESP32设备通信的WebSocket服务器端口" diff --git a/xiaozhi-esp32-server/CHANGELOG.md b/xiaozhi-esp32-server/CHANGELOG.md new file mode 100644 index 0000000..8213934 --- /dev/null +++ b/xiaozhi-esp32-server/CHANGELOG.md @@ -0,0 +1,31 @@ +# 更新日志 + +## 1.0.3 + +- 添加 ASR(语音识别)配置选项到 Home Assistant 界面 +- 支持选择不同的语音识别模型(FunASR、SherpaASR、DoubaoASR、TencentASR) +- 为在线语音识别服务添加 API 凭据配置 +- 修复音乐目录递归软链接的问题 +- 优化脚本代码结构,删除冗余注释,提高可读性 +- 修复唤醒词配置保存时出现的空行累积问题 + +## 1.0.2 + +- 添加 LLM 模型名称配置选项,允许用户自定义模型名称 +- 修复翻译文件格式问题 +- 优化配置文件更新逻辑,避免文件格式损坏 +- 改进文件管理方式,使用软链接减少存储空间占用 + +## 1.0.1 + +- 修复 Home Assistant 加载项配置同步功能 +- 添加自动将加载项配置应用到.config.yaml 的功能 +- 完善配置同步机制,支持所有加载项配置参数 +- 更新文档,详细说明配置方法和故障排除 + +## 1.0.0 + +- 首次发布 +- 支持小智 ESP32 语音识别服务 +- 自动下载模型和配置 +- 使用 S6 Overlay 进行服务管理 diff --git a/xiaozhi-esp32-server/DOCS.md b/xiaozhi-esp32-server/DOCS.md new file mode 100644 index 0000000..cc5a396 --- /dev/null +++ b/xiaozhi-esp32-server/DOCS.md @@ -0,0 +1,206 @@ +# 小智 AI Server 最简化版 + +本加载项提供小智 ESP32 语音识别服务器功能,可与 ESP32 设备配合使用实现语音识别功能。 + +## 安装 + +1. 在 Home Assistant 的加载项商店中添加此仓库地址或复制到本地加载项目录 +2. 安装"小智 AI Server 最简化版"加载项 +3. 配置加载项 + +## 配置参数 + +| 参数 | 描述 | +| ------------------------------------ | --------------------------------- | +| timezone | 时区设置 | +| server.auth.enabled | 是否启用设备认证(可选) | +| server.auth.tokens | 设备认证令牌列表(可选) | +| log_level | 日志级别 (INFO/DEBUG) | +| llm.type | 大语言模型类型 | +| model_name | 大语言模型名称 | +| llm.api_key | 大语言模型 API 密钥 | +| tts.type | 语音合成服务类型 | +| tts.appid | TTS 服务应用 ID (DoubaoTTS 需要) | +| tts.access_token | TTS 服务访问令牌 (DoubaoTTS 需要) | +| tts.voice | TTS 音色 (DoubaoTTS 可选) | +| asr.type | 语音识别服务类型 | +| asr.appid | ASR 服务应用 ID(在线服务需要) | +| asr.access_token | ASR 服务访问令牌(在线服务需要) | +| asr.secret_key | ASR 服务密钥(腾讯 ASR 需要) | +| plugins.get_weather.api_key | 和风天气 API 密钥 | +| plugins.get_weather.default_location | 默认天气查询位置 | +| plugins.home_assistant.base_url | Home Assistant 地址 | +| plugins.home_assistant.api_key | Home Assistant 长期访问令牌 | +| plugins.home_assistant.devices | Home Assistant 设备列表 | + +## 使用说明 + +安装并启动后,服务器会在 8000 端口启动 WebSocket 服务。您可以通过 ESP32 设备连接到此服务进行语音识别。 + +### 配置方式说明 + +本加载项支持两种配置方式: + +1. **通过 Home Assistant 加载项页面配置**:在 Home Assistant -> 设置 -> 加载项 -> 小智 AI Server 最简化版 中配置基本参数 + + - 这些配置会自动应用到服务器的.config.yaml 文件中 + - 每次重启加载项时,Home Assistant 配置会自动覆盖相应的.config.yaml 设置 + +2. **手动编辑配置文件**: + - 配置文件位于: `/config/data/.config.yaml`(通过文件编辑器访问) + - 适合进行高级配置调整,如不在加载项页面提供的参数 + +**注意**:所有需要的 ASR 和 LLM 参数都应当在 Home Assistant 加载项配置页面中设置,这是推荐的配置方法。修改后需要重启加载项才能生效。 + +### 具体配置路径 + +1. **加载项配置页面**: + + - Home Assistant → 设置 → 加载项 → 小智 AI Server 极速版 → 配置 + - 在此页面可以设置所有主要参数,包括 ASR 类型、appid、access_token、LLM 类型、model_name 和 api_key 等 + +2. **通过文件编辑器**: + - Home Assistant → 设置 → 加载项 → 文件编辑器 + - 导航到 `/config/data/.config.yaml` (加载项配置文件) + - 此文件包含更详细的配置,但每次重启加载项后会被加载项配置页面的设置覆盖 + +### 模型文件 + +使用 FunASR 模型时,需要使用 SenseVoiceSmall 模型文件才能正常工作。系统会自动下载模型文件并放置在以下位置: + +``` +/config/models/SenseVoiceSmall/model.pt +``` + +如果自动下载失败,您需要手动下载并放置模型文件。 + +### 语音识别服务 (ASR) + +本插件支持以下语音识别服务: + +1. **FunASR**:本地语音识别模型,需要下载模型文件。无需配置 API 密钥。 +2. **DoubaoASR**:豆包 ASR 服务,需要配置 appid 和 access_token。 +3. **TencentASR**:腾讯云 ASR 服务,需要配置 appid、access_token 和 secret_key。 + +**注意**:如果您选择 DoubaoASR 或 TencentASR,但未提供完整的配置信息,系统将无法启动相应服务。请确保提供所有必要的参数。 + +### 大语言模型服务 (LLM) + +本插件支持以下大语言模型服务: + +1. **DoubaoLLM**:豆包大语言模型服务 +2. **ChatGLMLLM**:智谱 AI 大语言模型服务 +3. **DeepSeekLLM**:DeepSeek 大语言模型服务 + +每种 LLM 服务都需要配置相应的 model_name 和 api_key。 + +### 如何获取各服务的配置信息 + +#### DoubaoASR (豆包语音识别) + +- **获取地址**: [火山引擎语音服务](https://console.volcengine.com/speech/app) +- **appid**: 申请开通火山引擎语音合成服务后获取的 appid +- **access_token**: 开通后获取的访问令牌 + +#### TencentASR (腾讯云语音识别) + +- **密钥申请**: [获取密钥](https://console.cloud.tencent.com/cam/capi) +- **免费资源**: [领取免费资源](https://console.cloud.tencent.com/asr/resourcebundle) +- **appid**: 腾讯云语音识别服务应用 ID +- **secret_id**: 获取的腾讯云语音识别 SecretID +- **secret_key**: 获取的腾讯云语音识别 SecretKey + +#### DoubaoLLM (豆包大语言模型) + +- **开通地址**: [开通服务](https://console.volcengine.com/ark/region:ark+cn-beijing/openManagement?LLM=%7B%7D&OpenTokenDrawer=false) +- **获取密钥**: 开通后,进入[这里](https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D)获取 +- **适用模型**: 推荐模型名 `doubao-pro-32k-functioncall-241028` +- **免费额度**: 开通后提供 500000 token 的免费额度 + +#### ChatGLMLLM (智谱 AI 大语言模型) + +- **获取密钥**: [智谱 AI 平台](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) +- **推荐模型**: `glm-4-flash` (免费模型,但需要注册并填写 API 密钥) +- **API 访问**: 模型通过 `https://open.bigmodel.cn/api/paas/v4/` 接口访问 + +#### DeepSeekLLM (DeepSeek 大语言模型) + +- **获取密钥**: [DeepSeek 平台](https://platform.deepseek.com/) +- **模型名称**: 如 `deepseek-chat` +- **访问地址**: https://api.deepseek.com + +### 语音合成服务 (TTS) + +本插件支持多种语音合成服务: + +#### EdgeTTS (微软 Edge 浏览器 TTS) + +- **无需 API 密钥**: 免费使用的本地 TTS 服务 +- **默认语音**: `zh-CN-XiaoxiaoNeural`,中文女声 + +#### DoubaoTTS (豆包/火山引擎 TTS) + +- **配置参数**: 需要设置`tts.appid`、`tts.access_token`和`tts.voice`(可选) +- **获取地址**: [火山引擎语音合成](https://console.volcengine.com/speech/service/8) +- **购买建议**: 建议购买付费服务,起步价 30 元可获得 100 并发,免费版本只有 2 个并发 +- **特色音色**: 湾湾小何音色可在[此处开通](https://console.volcengine.com/speech/service/10007) +- **音色设置**: 默认使用`BV001_streaming`,湾湾小何音色设置为`zh_female_wanwanxiaohe_moon_bigtts` +- **开通说明**: 购买服务后,可能需要等待约半小时才能使用 +- **验证要求**: 系统会在启动时验证 appid 和 access_token,如果缺少将无法启动 + +### FunASR 才会使用下面模型文件 + +您可以通过以下方式下载模型文件(正常情况下会自动下载): + +1. 线路一:[阿里魔塔下载 SenseVoiceSmall](https://www.modelscope.cn/models/iic/SenseVoiceSmall/summary) +2. 线路二:[百度网盘下载 SenseVoiceSmall](https://pan.baidu.com/s/1HW_UmfLiXhWwMjzS0GIpWg?pwd=qvna) 提取码:`qvna` + +下载后,请将模型文件放置在上述路径中,或通过文件编辑器上传到 addon 配置目录的 models/SenseVoiceSmall 文件夹中。 + +### 配置文件 + +配置文件位于加载项配置目录: + +``` +/config/data/.config.yaml +``` + +如果未找到配置文件,系统会自动创建默认配置文件。首次运行时,会提示您修改配置文件中的 API 密钥等重要信息。 + +### 初次运行 + +首次启动插件时,会出现以下流程: + +1. 检查模型文件,不存在则自动下载 +2. 检查配置文件,不存在则自动创建 +3. 提示您修改配置文件中的 API 密钥和其他设置 +4. 配置好后需重启插件应用更改 + +这些提示只会在首次运行时显示,后续启动不会重复提示。 + +## 技术实现 + +本插件基于以下技术实现: + +1. 使用 Home Assistant 标准加载项结构 +2. 采用 S6-Overlay 进行服务管理,提高稳定性和可靠性 +3. 使用 addon_config 目录存储配置和模型文件,符合 Home Assistant 最佳实践 +4. 自动同步 Home Assistant 加载项配置到服务器配置 + +## 连接 ESP32 设备 + +1. 确保 ESP32 设备与 Home Assistant 在同一网络 +2. WebSocket 服务地址:`ws://<您的Home Assistant IP>:8000/xiaozhi/v1/` +3. 将 ESP32 设备配置为连接上述 WebSocket 地址 + +## 故障排除 + +如果遇到以下问题,请参考处理方法: + +1. **语音识别出现韩文、日文、英文**:检查模型文件是否正确加载 +2. **TTS 任务出错或超时**:检查网络连接和配置文件设置 +3. **连接问题**:确保 ESP32 设备与 Home Assistant 在同一网络 +4. **无法自动下载模型**:网络问题或服务器故障,请尝试手动下载 +5. **配置问题**:如果在加载项页面修改的配置未生效,请重启加载项并检查日志 +6. **ASR 配置不完整错误**:确保您选择的 ASR 服务(如 DoubaoASR 或 TencentASR)已配置所有必要的参数 +7. **TTS 配置不完整错误**:当选择 DoubaoTTS 时,确保已配置 appid 和 access_token diff --git a/xiaozhi-esp32-server/README.md b/xiaozhi-esp32-server/README.md new file mode 100644 index 0000000..e0894b7 --- /dev/null +++ b/xiaozhi-esp32-server/README.md @@ -0,0 +1,24 @@ +# 冬瓜甄选addons:小智 AI Server 最简化版 + +适用于 Home Assistant 的小智 AI Server 最简化版加载项。 + +## 功能特点 + +- 基于 WebSocket 的语音识别服务 +- 支持多种语音识别服务(FunASR 本地模型、豆包 ASR 在线服务、腾讯 ASR 在线服务) +- 支持大语言模型对话功能 +- 自动下载模型和配置 +- 支持常见架构:aarch64 和 amd64 +- 使用 S6-Overlay 管理服务 + +## 使用方法 + +1. 安装加载项 +2. 配置语音识别服务 (ASR) 和大语言模型 (LLM) 参数 +3. 点击启动,并查看日志,等待小智客户端接入 + +详细使用说明请参阅 DOCS.md 文档。 + +## 支持与反馈 + +本项目基于[xinnan-tech/xiaozhi-esp32-server](https://github.com/xinnan-tech/xiaozhi-esp32-server) 开发。 diff --git a/xiaozhi-esp32-server/config.yaml b/xiaozhi-esp32-server/config.yaml new file mode 100644 index 0000000..d129707 --- /dev/null +++ b/xiaozhi-esp32-server/config.yaml @@ -0,0 +1,21 @@ +name: "小智 AI Server 最简化版" +version: "0.3.4" +slug: "xiaozhi_esp32_server" +description: "小智 AI Server 最简化版 - 提供语音识别、对话和控制功能,支持与ESP32设备通信" +url: "https://github.com/xinnan-tech/xiaozhi-esp32-server" +arch: + - aarch64 + - amd64 +startup: application +boot: manual +ports: + 8000/tcp: 8000 +ports_description: + 8000/tcp: "WebSocket服务端口" +map: + - addon_config:rw +host_network: false +init: false +watchdog: "tcp://[HOST]:[PORT:8000]" +journald: true +image: r.hassbus.com/wghaos/xiaozhi-esp32-server diff --git a/xiaozhi-esp32-server/icon.png b/xiaozhi-esp32-server/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9798f0197255e6c175f07fbc3bc42e78627892 GIT binary patch literal 2503 zcmV;&2{`tNP)%K{#l6I-B?Z57|zPWeZd+zzZefBxAWFM-e*Zr)BI-)$PKY7&Cj5l((~fJOj_2JpQJug2QPx4+vxBJrm*>U% z*JiMBb9RVR=WLUnpO+>+o3x*e`C5m;^!|22-wrWdJJ0oR8QPav^SDo*9(T>$$WMKA zacI-1`Fz3H1$^`PrM!R2J3{D%b)xUZM6vPJ6gig!ZAi#ulMVG4K;PY>ecyTBA8clz zM~wx2-`pxpn7SsE5%)LVJ!iXsb(td4Psuo3%y6z+L3u+vN=*!BD`gxkWY&H8%JwsQ zHZ~N(Z5^xk!}BCQ9#KXM?zDL@xz?_(K6Obpo-;5QZ3%&WLbtJNe~HwC?YI~;KKrfp)iRE!$(5g0R@&;6_@P_U)H32Omh!2o6(~) zEBEDj^s2StF&g}yI}j=M@ezMe0C@)p5+KPS;s{hlA;?e^2?~?IWQjzG5J`Y0LLd=g z62X&*P)I-^q={g#cofvw6t%R8?JufBY;G>1uaO@t#+_9bWp}ej^>~62XvA%#j7Swg zQ2{jqM6@539zYZxU>JT5c`p|=EJafaab%k)k`rI{&3 zCbqet0{yOq;>aa7QEz505&%tr=Cwwy5ff#HwJD%j%doVBp|9tWs|(`5xd67E@M3kA z3$K46oqLRT^$satwX9o=5li9B|Wj zfg6?x?*0UD<5JLL*-<=l&V*4WJBH^QapS^6;6}%z%g8ktw5bLMEBvUl(`uSz`DnTP zC*o}ngSP#K#No!wZ}7-Ple)v|iFhPAf+mXhij*t3V+?uwi;d{M@Cbfc(120R4veWX zqxZ&KaF1^RH-rQ{m5Tc^N)c;!Aj)mW5L*lGNG}BU#0GFfm*JN95^OK_!DtszTrcB< zj;(n)2|YUma9rGebSjkPrt3 ze0+gC+zf8;N^lRYMf9r~xNlz>9?COf;GPSJdU+?f5ld->7UH%gg-E~XM~zjW9FQXi zOW8ZGC8F0g0h&?G9#L4WOwTv43n3vwWmmwg_*!(2r34$i99^cQ;`XGoc<^Wy?%rL3 zuCHWJ4v_cvEClznMI23MJsk72qD2iyNlxz!O<^Kt0TPB?wji#~8aWjRN8k#`SpA6&{YGsEclSJ+j3yjQN%ssT<8{qmbN!9e; zD-OJ5w5wUIp$Ih_1!wdj#4XdI|LCoV9=wXS9Zh`yO3K=I5j`{k-5%PA9;3IQ=cIJR zO#cjhUOS9i7v$is_lofF=k<8K#D~Ka%FA|vDx-`-la_#T?)q#z@J8CTUC?e`FZ$TL zcv;`5ZnFDS!LO|XHI=U_gLr3`6*E^>;K{j#m@uyhPp#HrT5=s;{Md}wvK(0Ol@BZP z0!S(i;X^%-EF;C*Dx%IQqTV5)%F0mEAmeO}j6)@I`qm@3CoZnjVMR+smmkkoHei*> zpq09^%oJl64}+UWW2*?W zhg!0OdVq!D$R!zxha@%og4BGlSe>^wAGd4U|2hGhIeZw@V8`N8le)XXsfJp7?LER1 zQegLqX!e9*^@?y(ez<}RCYOMPd94_GsuhQ8{iyH=sCJ8Ja51e7qx=fPH{>-P-SDdw zVtMLu_0KtF7@wMpn9kg7rnO3^4>PEDuPZhxC#tQAq;)c?kg$1G*uMoUp}`{~hq~WB zsu`D@6lbdU2D?o0W+-iB$R+Z%Spp_44?9+V$`;gF@uc2}LI2YGtJV@kKf4EuF4n1u zndjuQM@uDHN1oKu3Fj(mYz)-|1I1R0ubygrd9&P>$Yqrx=I7gX2P zG^;5InZjp}FZ0*M&i2YLCI@h!NWe)VJ*8`hc7Lo)#D03dEhmgOc7*un68M6hU$Ir* z0AA%KOegZbojJbOwAv6Bv51a&n{002ovPDHLkV1g22!z2Iz literal 0 HcmV?d00001 diff --git a/xiaozhi-esp32-server/logo.png b/xiaozhi-esp32-server/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a233d942dc63c05b5e2d7f6c26b95cf8434123a2 GIT binary patch literal 19926 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 W*flp%BXXq!0Jaw#F?6(F@_ztJt`GeH literal 0 HcmV?d00001 diff --git a/xiaozhi-esp32-webui/DOCS.md b/xiaozhi-esp32-webui/DOCS.md new file mode 100644 index 0000000..e5bb249 --- /dev/null +++ b/xiaozhi-esp32-webui/DOCS.md @@ -0,0 +1,27 @@ +# 小智 AI OTA 管理 + +本加载项提供小智 ESP32 语音识别服务器功能,可与 ESP32 设备配合使用实现语音识别功能。 + +## 安装 + 1. 在 Home Assistant 的加载项商店中添加此仓库地址或复制到本地加载项目录 + 1. 安装 "Redis Server" 并配置 + 1. 安装 "Mysql"或"MariaDB" 并配置 + 1. 安装 "小智 AI OTA 管理" 加载项 + +## 配置 + +```yaml +mysql_host: core-mariadb #MySQL/MariaDB数据库主机地址,查看方式:Home Assistant → 设置 → 加载项 → MySQL/MariaDB → 信息 → 宿主名 +mysql_port: 3306 #MySQL/MariaDB数据库端口(默认: 3306) +mysql_database: xiaozhi_esp32_server #要使用的数据库名称 +mysql_username: homeassistant #数据库认证用户名 +mysql_password: root #数据库认证密码 +redis_host: 0920e2ff-redis-server #Redis服务器主机地址,查看方式:Home Assistant → 设置 → 加载项 → Redis Server → 信息 → 宿主名 +redis_port: 6379 #Redis服务器端口(默认: 6379) +timezone: Asia/Shanghai #设置服务器时区 +``` + +## 使用说明 + +1. 启动后,点击“打开网页界面”,浏览器访问 http://homeassistant.local:8002 进入 Web 管理界面 +2. 首次访问需要注册用户 \ No newline at end of file diff --git a/xiaozhi-esp32-webui/README.md b/xiaozhi-esp32-webui/README.md new file mode 100644 index 0000000..3cf55b0 --- /dev/null +++ b/xiaozhi-esp32-webui/README.md @@ -0,0 +1,15 @@ +# 冬瓜甄选addons:小智 AI OTA 管理 + +适用于 Home Assistant 的 小智 AI OTA 管理加载项。 + +## 使用方法 + +1. 安装加载项 +2. 配置 Mysql 和 Redis 参数 +3. 点击启动,访问 http://homeassistant.local:8002 进入 Web 管理界面 + +详细使用说明请参阅 DOCS.md 文档。 + +## 支持与反馈 + +本项目基于[xinnan-tech/xiaozhi-esp32-server](https://github.com/xinnan-tech/xiaozhi-esp32-server) 开发。 diff --git a/xiaozhi-esp32-webui/config.yaml b/xiaozhi-esp32-webui/config.yaml new file mode 100644 index 0000000..e3068a1 --- /dev/null +++ b/xiaozhi-esp32-webui/config.yaml @@ -0,0 +1,39 @@ +name: "小智 AI OTA 管理" +version: "0.3.4" +slug: "xiaozhi_esp32_webui" +description: "小智 AI Server 全模块版 - 提供语音识别、对话和控制功能,支持与ESP32设备通信,集成WEB管理界面" +url: "https://github.com/xinnan-tech/xiaozhi-esp32-server" +arch: + - aarch64 + - amd64 +startup: application +boot: manual +translations: true +ports: + 8002/tcp: 8002 +ports_description: + 8002/tcp: "WEB服务端口" +host_network: false +init: false +webui: "http://[HOST]:[PORT:8002]/" +watchdog: "http://[HOST]:[PORT:8002]/" +journald: true +options: + mysql_host: core-mariadb + mysql_port: 3306 + mysql_database: xiaozhi_esp32_server + mysql_username: homeassistant + mysql_password: + redis_host: + redis_port: 6379 + timezone: Asia/Shanghai +schema: + mysql_host: str + mysql_port: port + mysql_database: str + mysql_username: str + mysql_password: str + redis_host: str + redis_port: port + timezone: str +image: "r.hassbus.com/wghaos/xiaozhi-esp32-webui" diff --git a/xiaozhi-esp32-webui/icon.png b/xiaozhi-esp32-webui/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..01869ac915f715cd85cc4ada120259ab83734434 GIT binary patch literal 2940 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