『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3206|回复: 27

[进阶教程] NR实现微信语音大喇叭(企业微信通过服务器中转)保姆教程

[复制链接]

22

主题

473

帖子

6293

积分

元老级技术达人

略懂一些皮毛而已!

积分
6293
金钱
5810
HASS币
40
发表于 2024-4-29 21:21:22 | 显示全部楼层 |阅读模式
本帖最后由 Mr.G 于 2024-5-2 16:00 编辑

今天教程开始之前首先给大家介绍下企业微信如何通过服务器做中转,我这里是买的阿里云服务器,Centos7系统,装的宝塔面板


这里首先感谢
花开堪折枝提醒node-red-contrib-bizwechat已经支持代理功能了,我还不知道,然后用的微信推送的插件,现在全部改掉


使用云服务器代理企微接口教程:https://mp.weixin.qq.com/s/pEP0RUhGSij3HYtasbHZig(这个是作者给的教程,宝塔面板可以按照我下方的方式配置反向代理)

这里首先大家买好服务器装好宝塔面板后,打开宝塔面板的网站----添加站点(域名这里输入你服务器的IP:11880),然后点提交

1.png

提交后找到你刚添加的这个站点,点击设置,出来的页面点击反向代理,然后把https://qyapi.weixin.qq.com/输入到下图对应的位置点提交


2.png

然后点击配置文件把     proxy_redirect off;   这一句代码添加到配置文件中后点保存,如下图,此时你就可以尝试浏览器打开http://ip:11880  看下能否访问成功,显示403 Forbidden 代表成功了。

注意:需要确保宝塔面板和云服务器后台都开放11880端口,否则无法正常访问。


3.png


4.png




因为现在企业微信必须要求设置可信IP,而家庭用户一般都是宽带,所以如果要用企业微信推送的话,就比较麻烦,因为企业微信后台的可信IP设置无法设置动态IP或者动态域名DDNS的地址,所以只能通过服务器中转。


123456.png





完成以上所有步骤后,大家就可以继续配置下方的微信语音大喇叭的功能了。


进入正题:

使用场景,比如你在外面工作,家里女朋友在家里,你想让家里的小爱音响播报你发送语音内容,你可以打开微信,打开你的智能家居那个窗口,直接发送语音消息,比如你说 “我今天不回来吃饭了哈,不用等我了”、“我今天要加班,不用等我吃饭了”等等之类的语音消息的话,就可以使用到该流程

这个流程的大概逻辑我给大家说一下:首先服务器检测到你发送的语音消息(只过滤语音消息)后,家里的小爱音响首先会直接说一段“下面为您播放来自家庭成员、用户1、的语音消息:”后面就是播放你的话了,是你的声音哦,并不是小爱的声音。

(这里例如user1发送了一条消息后,如果1分钟之内不管user1和user2发送,都会提示发送失败,要等1分钟后才能发送,相当于冷却时间是1分钟,这个大家根据自己需求自己设置吧!)


IMG_6777.png

提示语音消息已发送成功以后才能继续发送下一条语音消息

首先看下流程截图:

QQ截图20240430212124.png

首先确保nodered安装了node-red-contrib-bizwechat,还要确保nodered安装了ffmpeg,因为amr转换为mp3需要这个

到配置----加载项----Nodered----配置 页面,在nodered配置中添加如下代码

(注:该步骤是nodered安装ffmpeg




                               
登录/注册后可看大图

init_commands:
  - >-
    sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g'
    /etc/apk/repositories
  - apk update && apk add --no-cache ffmpeg

具体docker版的如何安装,请看下方两个帖子,根据这两个帖子的内容,来安装就行,这一部分我就是用的该两个帖子的流程

https://bbs.hassbian.com/thread-12904-1-1.html

https://bbs.hassbian.com/thread-6487-1-1.html


步骤1:导入下方流程

游客,如果您要查看本帖隐藏内容请回复


步骤2:请到ha的www文件夹中新建一个winxin文件夹,在微信文件夹中分别新建user1、user2两个文件夹,然后在user1和user2两个文件夹中分别新建amr文件夹


步骤3:下方流程中有多处需要修改的地方,这里我一一解答:


①.服务器  要设置企业微信的一些参数:

我这里的信息打码了,你们导入流程后每一个需要修改的地方都有文字解释

企微代理这里要输入http://ip:11880    输入你刚才创建好的反向代理服务器的地址(IP是你的服务器IP地址)


123413242314231432142314.png

1234.png
(微信的企业ID在这里)
12345.png


接收消息这里要设置,如下设置

13241234132.png



②.小爱tts节点里需要修改你的小爱音响信息,还有设备id

③.function 22 和function 23中修改用户1和用户2为人名

④.两个参数设置里,需要修改ha的外网访问地址

⑤.所有的总推送内容中,修改target为你的企业微信账号 如下图

132453413415.png

⑥.上下两个Get AccessToken和后面的函数里的两个网址去设置为企微代理服务器IP:11880

5.png


6.png

⑦.其他的好像也没什么了,自行查看吧。


步骤4:

这里要到小爱音响app,小爱训练中把重新播放一次、重新播放一次这条消息、重新播放一次该消息、重新播放一遍、重新播放一遍这条消息、重新播放一遍该消息   这些字样让小爱回复“好的,请稍等

这样设置过后,当播报完一次这个你的语音消息后,如果家人(女朋友)没听清,可以说 小爱同学 ---  重新播放一次   小爱音响就会说  好的,请稍等,然后就会重复播放一次这个mp3音频文件
IMG_6774.png

QQ截图20240430130738.png

注:这里说下这个节点里的这个“当前状态等于先前状态”一定要去掉前面的勾,不然你两次都说同一个指令,小爱同学会不执行,去掉这个勾,两次说同样的指令,比如两次都说,“小爱同学,重新播放一次”也会重复执行。


注意:这里说下,mp3音频文件的保存时间默认设置是7天, 在参数设置中可以进行修改,如果大家想让他保存时间长一些,可以自行修改!



我感觉我这套流程目前非常完美, 用了一段时间测试还是比较不错的, 这个功能并不是刚需, 这是小爱音箱的,  如果有小爱音响的同学, 可以借鉴参考一下,  做的不好的地方,也请回复指出,感谢!





平时我用到的一些推送到企业微信的图片,

警戒设防的 alert

按门铃的 anmenling

是否关门的 door

火警提示的  fire

燃气泄漏的   ranqi

温馨提示   reminder

天气预警的  tianqiyujing

warring  错误的

水浸传感器   water

天然气余额不足或者话费余额不足   yebz

自然灾害预警  ziranzaihai


                               
登录/注册后可看大图




上方图片也都是我在百度搜索到的,用来做智能家居推送的图片挺好的,在这个帖子里分享给大家吧,收个辛苦费哈


img.rar (400.17 KB, 下载次数: 20, 售价: 3 金钱)




2024.5.2更新:

今天早晨更新了下ha然后ha重启后发现,音响自动重复播报一次之前的音频文件,应该是ha启动后这个实体会刷新,所以就会自动触发,nodered流程文件不重新上传了,大家根据我截图添加一下就行。这里加一个函数,然后去判断sensor.xiaomi_lx06_83f8_conversation中的timestamp,这个就是你上次跟小爱对话的时间,判断这个时间如果早于当前时间,就不去做任何操作,代码让gpt帮忙写的,大家复制一下连线图照着下面的连接一下就行,红框内的三个为新增的,然后 匹配 中新增了一些触发的词,把 匹配 中的payload改为text即可,如下图,switch中只写一个 == 1  即可。


这样操作之后就不会误触发了,包括如果实体更新的时候,也不会误触发了。只有你说小爱同学,重新播放一次的时候, 他才会触发。

5.png

4.png
3.png





msg.text = msg.payload;
const isoDateString = msg.data.attributes.timestamp;
const date = new Date(isoDateString);

function formatDateTime(date) {
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    const seconds = date.getSeconds().toString().padStart(2, '0');

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

const formattedDateTime = formatDateTime(date);
const givenDateString = formattedDateTime;


const givenDate = new Date(givenDateString.replace(' ', 'T') + '.000Z');

const currentDate = new Date();

if (givenDate < currentDate) {
    msg.payload = "0";
} else {
    msg.payload = "1";
}

return msg;












评分

参与人数 1金钱 +12 收起 理由
隔壁的王叔叔 + 12 感谢楼主分享!

查看全部评分

回复

使用道具 举报

15

主题

108

帖子

1351

积分

论坛技术达人

积分
1351
金钱
1238
HASS币
20

教程狂人

发表于 2024-4-29 22:23:30 | 显示全部楼层
企业微信节点已经支持代理服务了,可以把版本升级到1.1.4,旁边有对应的说明信息。
回复

使用道具 举报

1

主题

59

帖子

295

积分

中级会员

Rank: 3Rank: 3

积分
295
金钱
236
HASS币
0
发表于 2024-4-29 23:48:14 | 显示全部楼层
感谢大佬分享
回复

使用道具 举报

3

主题

380

帖子

3325

积分

论坛元老

Rank: 8Rank: 8

积分
3325
金钱
2945
HASS币
0
发表于 2024-4-30 07:56:39 | 显示全部楼层

感谢大佬分享
回复

使用道具 举报

40

主题

2176

帖子

8286

积分

元老级技术达人

积分
8286
金钱
6095
HASS币
110
发表于 2024-4-30 08:39:02 | 显示全部楼层
企业微信现在这样有点难用了
我自己是捷径直接webhook
缺点是捷径里触发录音,及时界面不准(ios的问题吧),发语音要切换到捷径或者siri语音
其实如果能在ha app里搞一个插件,点击触发录音,发到服务器,这样才比较好
回复

使用道具 举报

3

主题

91

帖子

675

积分

高级会员

Rank: 4

积分
675
金钱
584
HASS币
0
发表于 2024-4-30 09:07:52 | 显示全部楼层
学习一下,感谢分享
回复

使用道具 举报

146

主题

2266

帖子

7000

积分

元老级技术达人

积分
7000
金钱
4729
HASS币
30
发表于 2024-4-30 11:08:01 | 显示全部楼层
花开堪折枝 发表于 2024-4-29 22:23
企业微信节点已经支持代理服务了,可以把版本升级到1.1.4,旁边有对应的说明信息。 ...

这个在哪里,没有看到
回复

使用道具 举报

22

主题

473

帖子

6293

积分

元老级技术达人

略懂一些皮毛而已!

积分
6293
金钱
5810
HASS币
40
 楼主| 发表于 2024-4-30 12:43:06 | 显示全部楼层
本帖最后由 Mr.G 于 2024-4-30 19:01 编辑
花开堪折枝 发表于 2024-4-29 22:23
企业微信节点已经支持代理服务了,可以把版本升级到1.1.4,旁边有对应的说明信息。 ...

https://mp.weixin.qq.com/s/pEP0RUhGSij3HYtasbHZig
我已经升级到1.1.4版本了,然后找到您说的这个了, 用这个是方便一些, 我一开始不知道这个支持代理,我这边后期可能都会用node-red-contrib-bizwechat  
回复

使用道具 举报

22

主题

473

帖子

6293

积分

元老级技术达人

略懂一些皮毛而已!

积分
6293
金钱
5810
HASS币
40
 楼主| 发表于 2024-4-30 12:44:10 | 显示全部楼层
ghostist 发表于 2024-4-30 08:39
企业微信现在这样有点难用了
我自己是捷径直接webhook
缺点是捷径里触发录音,及时界面不准(ios的问题吧) ...

其实也不难用吧,配置一次,以后都是正常用就行,像我自己本身就有备案的域名和服务器,也没有特意去购买,所以对我来说还好,我不知道我这个方法是不是最简便的,但是用起来还不错,起码稳定,而且这个发送语音消息是直接通过微信app就行,不用非得打开企业微信app,感觉还蛮方便的
回复

使用道具 举报

1

主题

59

帖子

295

积分

中级会员

Rank: 3Rank: 3

积分
295
金钱
236
HASS币
0
发表于 2024-4-30 14:35:51 | 显示全部楼层
大佬您好,我的宝塔面板安装好了呢,pm2也在商店下载了,但是PM2管理器中装nodered这个不会,这个步骤需要怎么操作呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 12:53 , Processed in 0.064773 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表