在domoticz给蓝牙音箱传送语音提醒
发表于 : 周三 7月 12, 2017 21:37
上文中搭建的mpd服务端位于群晖属于无奈之举,语音提醒初衷是出门建议,无奈调试的树莓派离门距离较远并且蓝牙距离有限。如mpd和mpc在同一设备,下文很多步骤可以简略。
安装mpc客户端,与domoticz系统在同一设备。
mpc的常用命令,如果和客户端在一个设备host和port可以不用设置
测试有效后进行下一步。
——————————————————————————————————————————————————
以下内容适合mpd和mpc异地,本地的请直接跳至注册百度tts。
因为未找出用mpc下add本地MP3的方法,只有迂回至在服务端music文件夹下挂载需要的媒体文件。
比如我将MP3文件存在tts文件夹下命名为tts.mp3,群晖mpd/music下挂载这个tts文件夹。
那么add语句如下:
——————————————————————————————————————————————————
注册百度tts:http://yuyin.baidu.com/tts
创建应用,拿到两个key。
在domoticz内创建一个text命名出行建议,文字内容可以从curl和风天气的api或者爬虫其他网站获取。
在domoticz的脚本目录下创建设备脚本,内容如下:
本人用的是人体感应和门磁先后顺序判断是否有人要出门,进而提醒雨雪,雾霾等出行建议语音。
安装mpc客户端,与domoticz系统在同一设备。
代码: 全选
sudo apt-get install mpc
代码: 全选
mpc -h YOUR_IP -p 6600 add <file>
mpc -h YOUR_IP -p 6600 volume 50
mpc -h YOUR_IP -p 6600 play
mpc -h YOUR_IP -p 6600 clear
——————————————————————————————————————————————————
以下内容适合mpd和mpc异地,本地的请直接跳至注册百度tts。
因为未找出用mpc下add本地MP3的方法,只有迂回至在服务端music文件夹下挂载需要的媒体文件。
比如我将MP3文件存在tts文件夹下命名为tts.mp3,群晖mpd/music下挂载这个tts文件夹。
那么add语句如下:
代码: 全选
mpc -h ip_host -p port add tts/tts.mp3
注册百度tts:http://yuyin.baidu.com/tts
创建应用,拿到两个key。
在domoticz内创建一个text命名出行建议,文字内容可以从curl和风天气的api或者爬虫其他网站获取。
在domoticz的脚本目录下创建设备脚本,内容如下:
代码: 全选
commandArray = {}
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
API_Key='abcdef1234567'
Secret_Key='hijk89012'
mpd_host='10.0.0.101'
mpd_port='6600'
t1 = os.time()
s = otherdevices_lastupdate['小米人体感应-大门']
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))
if(devicechanged['大门门磁']=='Open' and difference < 90) then
--if(devicechanged['Xiaomi Wireless Switch']=='Click') then
command="curl -s 'https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" .. API_Key .. "&client_secret=" .. Secret_Key.."'"
local handle = io.popen(command)
local result = handle:read("*a")
handle:close()
output= json:decode(result)
expires_time=output.expires_in
if(tonumber(expires_time)<=259200) then
print ("百度语音token将在3天后失效")
end
token=output.access_token
os.execute('wget -O /home/pi/domoticz/tts/tts.mp3 "http://tsn.baidu.com/text2audio?tex='..otherdevices['出行建议']..'&lan=zh&cuid=blindlight&ctp=1&tok='..token..'"')
os.execute('mpc -h '..mpd_host..' -p '..mpd_port..' clear')
os.execute('mpc -h '..mpd_host..' -p '..mpd_port..' volume 100')
os.execute('mpc -h '..mpd_host..' -p '..mpd_port..' add tts/tts.mp3')
os.execute('mpc -h '..mpd_host..' -p '..mpd_port..' play 1')
end
return commandArray