分页: 1 / 1

红外遥控音响的语音控制

发表于 : 周日 1月 28, 2018 14:57
vonzeng
20180129 修改了代码。

家里有一音响 apple ipod hi-fi,音量调整由红外遥控器或顶部的触摸按钮来控制。
有将这红外控制信号学习到博联的黑豆,然后接入domo,也接入ha-bridge,可以通过google home 或 echo来语音加减音量,但每次只能类似于按一个按纽的方式在加减音量,太慢了。改造的目的是要实现能用语音一次指定音量到百分之几。

效果见上传到论坛的视频。

解决思路:
1.在domo中添加一个dimmer类型的开关,用来滑动调整音量。
2.在HA-bridge中添加一个dim类型的开关,用来执行语音命令的音量百分之。
3.在domo中的添加一events,用来将语音命令到dimmer开关的音量值变成要发送几次加减音量红外信号的过程。

前期准备:
测试计算下,你的音响从最低音量到最高音量要按几个遥控器。(我的音响是31下)
再测试出,你的音响通电开机后的默认音量等于要从音量为零时要按几次的加音量键。

我这音响没有音量大小显示,所以比较麻烦。
以下过程是基于音响每次通电开机后的默认音量都是相同的情况下。

过程:
1.添加dimmer开关,选用Dummy类型的硬件,创建一个开关,再将类型改为dimmer
Screen Shot 2018-01-28 at 2.29.03 PM.jpg
Screen Shot 2018-01-28 at 2.29.03 PM.jpg (53.22 KiB) 查看 20138 次
2.在HA-bridge中添加Dim Items
Screen Shot 2018-01-28 at 2.30.38 PM.jpg
Screen Shot 2018-01-28 at 2.30.38 PM.jpg (73.83 KiB) 查看 20138 次
3.在domoticz中添加一个events
Screen Shot 2018-01-28 at 2.31.42 PM.jpg
Screen Shot 2018-01-28 at 2.31.42 PM.jpg (40.97 KiB) 查看 20138 次
4.代码:

代码: 全选

commandArray = {}

SoundVol1 = 'Bedroom Sound';
BedroomSound = '主卧音响';

--音箱通电后默认音量的大小相当于遥控器从音量0按加音量12次时的音量。音响最大音量为遥控器从音量0按加音量31次。
if devicechanged[BedroomSound] == 'Off' then
    commandArray['Variable:bedroomsoundvol'] = tostring(12)
end

if devicechanged[BedroomSound] == 'Off' and otherdevices[SoundVol1] ~= 'Off' then
    commandArray[SoundVol1] = 'Off'
end

--如果主卧音响音量调整开关被激活
if devicechanged[SoundVol1] then
    if devicechanged[SoundVol1] =='Off' then
        if otherdevices[BedroomSound] == 'On' then
            commandArray[BedroomSound] = 'Off'
            commandArray['Variable:bedroomsoundvol'] = tostring(12)
        end
    else
        if otherdevices[BedroomSound] == 'Off' then
            commandArray[BedroomSound] = 'On'
        end
        Setvol1percent= otherdevices_svalues[SoundVol1]
        print('Bedroom Sound setting percnet %:'..Setvol1percent)
        Setvol1 = math.floor(Setvol1percent * 31 / 100)
        print('Setvol1:'..Setvol1)

        originalvol= tonumber(uservariables['bedroomsoundvol'])
    
        print('original volume:'..originalvol)
    
        voladjust = math.abs(Setvol1 - originalvol)
        print('volume adjust:'..voladjust)
    
        if Setvol1 > originalvol then
            m = 10
        else m = 20
        end
        commandArray['Apple iPod Hi-Fi in Bedroom'] = 'Set Level '..m..' REPEAT '..voladjust..' INTERVAL 1'
        commandArray['Variable:bedroomsoundvol'] = tostring(Setvol1)
    end
end

return commandArray
5.在domoticz中添加一个user variable
Screen Shot 2018-01-28 at 2.33.30 PM.jpg
Screen Shot 2018-01-28 at 2.33.30 PM.jpg (54.14 KiB) 查看 20138 次
初始值填为0好了。