语音模块用的是科星的文本转语音,使用最简单的 TCP 协议,编码格式为 GB2312 思路是利用工作流取参数,因为我这边涉及子表,所以加了个子流程取关联表的参数,我不会代码,这是用文心一言写的语句,我这边测试没问题,语法如果不对,我也解释不了 😄 860fd6f94ea1f1c76fa3c17e751ec518.mp4 [图片] 最后用 python 发送播报内容 [图片] python 代码如下: import socket data = input["data" ] data3 = input["data3" ] # 注意这里使用了圆括号而不是方括号 def send_message_to_server(hostname, port, message): try: 创建一个 socket 对象 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: 连接到服务器 s.connect((hostname, port)) 将消息编码为 GB2312(如果原始消息是 Unicode 字符串) encoded_message = message.encode('gb2312') 发送数据 s.sendall(encoded_message) print(f"Message '{message}' (encoded as GB2312) sent successfully.") # 接收响应(可选),并假设服务器也使用GB2312编码发送响应 data = s.recv(1024) decoded_data = data.decode('gb2312') # 解码响应为GB2312 print(f"Received: {decoded_data}") except Exception as e: print(f"An error occurred: {e}") def api(hostname, port, message): 调用 send_message_to_server 函数 send_message_to_server(hostname, port, message) 由于 send_message_to_server 没有返回值(除了可能的异常),API 函数也返回 None return None 示例用法 hostname = ' ' # 替换为你的域名 port = 50000 # 替换为你的端口号 message = "#" +data+"运输车辆为"+data3+",请尽快发货。" # 使用中文字符串作为示例 调用 API 函数发送消息 output = api(hostname, port, message)


我刚开始也用的 emqx,发现一个问题,就是用 MQTT 的时候,传输的汉字到语音模块会出现不识别的情况,通过 API 接口发送的要两层双引号,结果导致数据一直不对,MQTTX 发送的就没问题,用 EMQX 的 API 就没办法传输,所以干脆用 tcp 协议推送,这两天测试中发现不稳定,十个播报有 2-3 个播放失败,所以修改了一下代码,加了接收返回值校验的,返回值如果不为 ok,循环执行 5 次,5 次都失败就返回 erro,然后用 JSON 解析代码块的参数,根据返回值弹出播报是否成功的弹窗。下边是代码,隐去了我的域名。
import socket
import time
data = input["data" ]
data3 = input["data3" ] # 注意这里使用了圆括号而不是方括号
data1=""
def send_message_to_server(hostname, port, message, max_retries=5, retry_delay=50): #max_retries 为最大重试次数,retry_delay 为重试等待时间。
retries = 0
while retries < max_retries:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((hostname, port))
encoded_message = message.encode('gb2312')
s.sendall(encoded_message)
print(f"Message '{message}' (encoded as GB2312) sent successfully.")
data1 = s.recv(1024)
decoded_data = data1.decode('gb2312')
if decoded_data == 'OK':
return decoded_data
else:
print(f"Received unexpected response '{decoded_data}', retrying...")
retries += 1
if retries < max_retries:
time.sleep(retry_delay) # Add import time if not already done
return "Reached max retries without success"
except Exception as e:
print(f"An error occurred: {e}")
return "Error occurred"
def api(hostname, port, message):
return send_message_to_server(hostname, port, message)
hostname = '******************' # Replace with your domain
port = 50000 # Replace with your port number
message = "#" + data + "测试" + data3
output = api(hostname, port, message)
output = {"output":output}
由于 output 是 None,所以这里不需要进一步处理它(除非你要检查是否有异常)
这个东西有牌子的基本也是 150-200,我买了 150 的 485 接口的,想着对接 emqx,但买了发现搞不定 emqx 的数据转发结构,而且 485 的要加 100 多块的 mqtt 网关,我想了想,楼主这个网口的反而更好,不需要 emqx 了。楼主已经测试过了,我也不测了,有项目就用这个方案了。
我做过用百度云翻译成语音的,但是没有网络音箱,楼主玩的花啊
这几天也搜了一下这些模块,便宜的裸板几十,要自己接;成品基本两三张了
![image.png]()
谁投资一下,让我测试测试 😄
最新的控件事件已经能播放上传的 mp3 了,只是没法通过工作流触发播放。
前端不调用播放器,貌似放不了语音吧,hap 的代码块貌似不能影响前端?
提过这个建议,官方没有反映,能直接在前端推语音是最好的,通过工作流触发
其实现在的控件事件就可以播放指定的语音了,奈何工作流里面还不支持。
我还以为是前端能推语音了
原来是物联网音箱 👀️
是的,我用的无线的,但是这个用网口的就行,都一样
感谢大佬分享,学习学习,论坛就需要多一些这样的帖子。
Cx830s-w?
你买的什么型号啊?不像是网口的,我看到了天线
视频大家点击看一下吧
860fd6f94ea1f1c76fa3c17e751ec518.mp4
感觉好神奇,录屏给大家展示一下啊
积分差一点,刷一下
了解的,我买的科星 TTL 设备是 485 的,图便宜没买网口的,退了改天在搞 😄
我是用的 ddns 域名做的端口转发,也可以直接用 IP,但是我没试过,因为 TTL 设备在本地,服务器不一定也在本地,所以用的花生壳的免费域名。
hostname = ' ' # 替换为你的域名
port = 50000 # 替换为你的端口号
这个是 TTL 设备的公网地址?
没看到前端能发出声音的效果,推到哪里了
如果可以,最好录个效果视频呗
先收藏