本帖最后由 Mr.G 于 2024-5-2 16:00 编辑
今天教程开始之前首先给大家介绍下企业微信如何通过服务器做中转,我这里是买的阿里云服务器,Centos7系统,装的宝塔面板
这里首先感谢花开堪折枝提醒node-red-contrib-bizwechat已经支持代理功能了,我还不知道,然后用的微信推送的插件,现在全部改掉
使用云服务器代理企微接口教程:https://mp.weixin.qq.com/s/pEP0RUhGSij3HYtasbHZig(这个是作者给的教程,宝塔面板可以按照我下方的方式配置反向代理)
这里首先大家买好服务器装好宝塔面板后,打开宝塔面板的网站----添加站点(域名这里输入你服务器的IP:11880),然后点提交
提交后找到你刚添加的这个站点,点击设置,出来的页面点击反向代理,然后把https://qyapi.weixin.qq.com/输入到下图对应的位置点提交
然后点击配置文件把 proxy_redirect off; 这一句代码添加到配置文件中后点保存,如下图,此时你就可以尝试浏览器打开http://ip:11880 看下能否访问成功,显示403 Forbidden 代表成功了。
注意:需要确保宝塔面板和云服务器后台都开放11880端口,否则无法正常访问。
因为现在企业微信必须要求设置可信IP,而家庭用户一般都是宽带,所以如果要用企业微信推送的话,就比较麻烦,因为企业微信后台的可信IP设置无法设置动态IP或者动态域名DDNS的地址,所以只能通过服务器中转。
完成以上所有步骤后,大家就可以继续配置下方的微信语音大喇叭的功能了。
进入正题:
使用场景,比如你在外面工作,家里女朋友在家里,你想让家里的小爱音响播报你发送语音内容,你可以打开微信,打开你的智能家居那个窗口,直接发送语音消息,比如你说 “我今天不回来吃饭了哈,不用等我了”、“我今天要加班,不用等我吃饭了”等等之类的语音消息的话,就可以使用到该流程
这个流程的大概逻辑我给大家说一下:首先服务器检测到你发送的语音消息(只过滤语音消息)后,家里的小爱音响首先会直接说一段“下面为您播放来自家庭成员、用户1、的语音消息:”后面就是播放你的话了,是你的声音哦,并不是小爱的声音。
(这里例如user1发送了一条消息后,如果1分钟之内不管user1和user2发送,都会提示发送失败,要等1分钟后才能发送,相当于冷却时间是1分钟,这个大家根据自己需求自己设置吧!)
提示语音消息已发送成功以后才能继续发送下一条语音消息
首先看下流程截图:
首先确保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地址)
(微信的企业ID在这里)
接收消息这里要设置,如下设置
②.小爱tts节点里需要修改你的小爱音响信息,还有设备id
③.function 22 和function 23中修改用户1和用户2为人名
④.两个参数设置里,需要修改ha的外网访问地址
⑤.所有的总推送内容中,修改target为你的企业微信账号 如下图
⑥.上下两个Get AccessToken和后面的函数里的两个网址去设置为企微代理服务器IP:11880
⑦.其他的好像也没什么了,自行查看吧。
步骤4:
这里要到小爱音响app,小爱训练中把重新播放一次、重新播放一次这条消息、重新播放一次该消息、重新播放一遍、重新播放一遍这条消息、重新播放一遍该消息 这些字样让小爱回复“好的,请稍等”
这样设置过后,当播报完一次这个你的语音消息后,如果家人(女朋友)没听清,可以说 小爱同学 --- 重新播放一次 小爱音响就会说 好的,请稍等,然后就会重复播放一次这个mp3音频文件
注:这里说下这个节点里的这个“当前状态等于先前状态”一定要去掉前面的勾,不然你两次都说同一个指令,小爱同学会不执行,去掉这个勾,两次说同样的指令,比如两次都说,“小爱同学,重新播放一次”也会重复执行。
注意:这里说下,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 即可。
这样操作之后就不会误触发了,包括如果实体更新的时候,也不会误触发了。只有你说小爱同学,重新播放一次的时候, 他才会触发。
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;
|