家居智能的关键是要带来方便,否则家居智能也失去意义。使用菜单控制比用代码方便了很多,但也不是最好的解决方案,只不过通过制作菜单也可以学习一些知识,仅仅是为了好玩,通过实践来看效果还是不错的。这个菜单是通过ssh连接树莓派,启动脚本实现菜单控制。先上菜单结构图给大家看看。
这个菜单最多有四级,即主菜单-单个设备开关机-电视-频道。其他最多两级,并且每个键只按一次自动回车,操作方便,效果也不错。
各菜单全截图:
主菜单:
开关机页面:
摇控灯页面(使用的是RF315Mhz):
摇控空调页面:
天威机顶盒摇控页面:
频道列表:
频道列表说明:因为为了方便每个单位不用回车,只要按一个按键就可以,所以频道列表的数量有限制,ssh一屏也就20个台,也够了,一般都是常看的。每个频道其实就是通过irsend命令发送三个频道红外代码。
我把代码也贴上来,虽然没有实际脚本,也可以跑起来看个样子,但肯定很多项会出错。800多行代码。
#!/bin/bash
function menu ()
{
clear
cat << EOF
----------------------------------------
|***************菜单主页***************|
----------------------------------------
`echo -e "\033[35m 1)开关机页面\033[0m"`
`echo -e "\033[35m 2)单个设备开关机\033[0m"`
`echo -e "\033[35m 3)摇控灯\033[0m"`
`echo -e "\033[35m 4)摇控空调\033[0m"`
`echo -e "\033[35m x)退出\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num1
case $num1 in
1)
clear
echo "欢迎进入开关机页面!!"
eleproduct_menu
;;
2)
clear
echo "欢迎进入单设备开关机页面!!"
singleonoff_menu
;;
3)
clear
echo "欢迎进入摇控灯页面!!"
light_menu
;;
4)
cp /etc/lirc/remotes/zhigao.conf /etc/lirc/remotes/tv.conf
killall -9 lircd
sh /etc/lirc/remotes/remake.sh
clear
echo "欢迎进入空调摇控页面!!"
airc_menu
;;
x)
clear
exit 0
;;
*)
clear
echo "没这个选项,标子!!"
sleep 1s
clear
menu
esac
}
function eleproduct_menu ()
{
cat << EOF
----------------------------------------
|**************开关机页面**************|
----------------------------------------
`echo -e "\033[35m 1)乐视盒子及相关设备开机\033[0m"`
`echo -e "\033[35m 2)乐视盒子及相关设备关机\033[0m"`
`echo -e "\033[35m 3)天威机顶盒和电视开/关机\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num2
case $num2 in
1)
echo "乐视盒子及相关设备开机"
sh /etc/lirc/remotes/poweronmediabox.sh
clear
eleproduct_menu
;;
2)
echo "乐视盒子及相关设备关机"
sh /etc/lirc/remotes/poweroffmediabox.sh
clear
eleproduct_menu
;;
3)
echo "天威机顶盒和电视开/关机!!"
sh /etc/lirc/remotes/onoff.sh
clear
eleproduct_menu
;;
x)
clear
menu
;;
*)
clear
echo "没这个选项,笨蛋!!"
sleep 1s
clear
eleproduct_menu
esac
}
function singleonoff_menu ()
{
cat << EOF
----------------------------------------
|***********单设备摇控页面*************|
----------------------------------------
`echo -e "\033[35m 1)电视\033[0m"`
`echo -e "\033[35m 2)天威机顶盒\033[0m"`
`echo -e "\033[35m 3)功放\033[0m"`
`echo -e "\033[35m 4)乐视盒子\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应设备的数字:" num3
case $num3 in
1)
sh /etc/lirc/remotes/dellirc.sh
cp /etc/lirc/remotes/tv1.conf /etc/lirc/remotes/tv.conf
killall -9 lircd
sh /etc/lirc/remotes/remake.sh
clear
echo "欢迎进入电视摇控页面!!"
tv1_menu
;;
2)
sh /etc/lirc/remotes/dellirc.sh
cp /etc/lirc/remotes/tianwei1.conf /etc/lirc/remotes/tv.conf
killall -9 lircd
sh /etc/lirc/remotes/remake.sh
clear
echo "欢迎进入天威机顶盒摇控页面!!"
tianwei_menu
;;
3)
sh /etc/lirc/remotes/dellirc.sh
cp /etc/lirc/remotes/malanshi.conf /etc/lirc/remotes/tv.conf
killall -9 lircd
sh /etc/lirc/remotes/remake.sh
clear
echo "欢迎进入功放摇控页面!!"
malanshi_menu
;;
4)
sh /etc/lirc/remotes/dellirc.sh
cp /etc/lirc/remotes/leshi.conf /etc/lirc/remotes/tv.conf
killall -9 lircd
sh /etc/lirc/remotes/remake.sh
clear
echo "欢迎进入乐视盒子摇控页面!!"
leshi_menu
;;
x)
clear
menu
;;
*)
clear
echo "又按错了!!"
clear
singleonoff_menu
esac
}
function tv1_menu ()
{
cat << EOF
----------------------------------------
|******** ***电视摇控页面** ***********|
----------------------------------------
`echo -e "\033[35m 1)开/关机\033[0m"`
`echo -e "\033[35m 2)静音\033[0m"`
`echo -e "\033[35m 3)返回\033[0m"`
`echo -e "\033[35m 4)视频源\033[0m"`
`echo -e "\033[35m 5)向下\033[0m"`
`echo -e "\033[35m 6)向上\033[0m"`
`echo -e "\033[35m 7)确定\033[0m"`
`echo -e "\033[35m 0)音量+\033[0m"`
`echo -e "\033[35m 9)音量—\033[0m"`
`echo -e "\033[35m a)向左\033[0m"`
`echo -e "\033[35m s)向右\033[0m"`
`echo -e "\033[35m d)3D\033[0m"`
`echo -e "\033[35m c)返回上级菜单\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num4
case $num4 in
1)
irsend send_once tv key_power
clear
tv1_menu
;;
2)
irsend send_once tv key_mute
clear
tv1_menu
;;
3)
irsend send_once tv key_back
clear
tv1_menu
;;
4)
irsend send_once tv key_a
clear
tv1_menu
;;
5)
irsend send_once tv key_down
clear
tv1_menu
;;
6)
irsend send_once tv key_up
clear
tv1_menu
;;
7)
irsend send_once tv key_pause
clear
tv1_menu
;;
0)
irsend send_once tv key_volumeup
clear
tv1_menu
;;
9)
irsend send_once tv key_volumedown
clear
tv1_menu
;;
a)
irsend send_once tv key_left
clear
tv1_menu
;;
b)
irsend send_once tv key_right
clear
tv1_menu
;;
d)
irsend send_once tv key_b
clear
tv1_menu
;;
c)
clear
singleonoff_menu
;;
x)
clear
menu
;;
*)
clear
echo "二货!按错了!!"
sleep 1s
clear
tv1_menu
esac
}
function tianwei_menu ()
{
cat << EOF
----------------------------------------
|*********天威机顶盒摇控页面***********|
----------------------------------------
`echo -e "\033[35m 1)开/关机\033[0m"`
`echo -e "\033[35m 2)静音\033[0m"`
`echo -e "\033[35m 3)返回\033[0m"`
`echo -e "\033[35m 4)菜单\033[0m"`
`echo -e "\033[35m 5)向下\033[0m"`
`echo -e "\033[35m 6)向上\033[0m"`
`echo -e "\033[35m o)确定\033[0m"`
`echo -e "\033[35m 0)音量+\033[0m"`
`echo -e "\033[35m 9)音量—\033[0m"`
`echo -e "\033[35m a)向左\033[0m"`
`echo -e "\033[35m s)向右\033[0m"`
`echo -e "\033[35m u)上页\033[0m"`
`echo -e "\033[35m j)下页\033[0m"`
`echo -e "\033[35m h)主页\033[0m"`
`echo -e "\033[35m p)频道列表\033[0m"`
`echo -e "\033[35m c)返回上级菜单\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num5
case $num5 in
1)
irsend send_once tv key_power
clear
tianwei_menu
;;
2)
irsend send_once tv key_mute
clear
tianwei_menu
;;
3)
irsend send_once tv key_back
clear
tianwei_menu
;;
4)
irsend send_once tv key_menu
clear
tianwei_menu
;;
5)
irsend send_once tv key_down
clear
tianwei_menu
;;
6)
irsend send_once tv key_up
clear
tianwei_menu
;;
o)
irsend send_once tv key_pause
clear
tianwei_menu
;;
0)
irsend send_once tv key_volumeup
clear
tianwei_menu
;;
9)
irsend send_once tv key_volumedown
clear
tianwei_menu
;;
a)
irsend send_once tv key_left
clear
tianwei_menu
;;
b)
irsend send_once tv key_right
clear
tianwei_menu
;;
u)
irsend send_once tv key_pageup
clear
tianwei_menu
;;
j)
irsend send_once tv key_pagedown
clear
tianwei_menu
;;
h)
irsend send_once tv key_home
clear
tianwei_menu
;;
p)
clear
echo "欢迎进入频道列表页面!!"
channellist_menu
;;
c)
clear
singleonoff_menu
;;
x)
clear
menu
;;
*)
clear
echo "二货!按错了!!"
sleep 1s
clear
tianwei_menu
esac
}
function channellist_menu ()
{
cat << EOF
----------------------------------------
|************频道列表页面**************|
----------------------------------------
`echo -e "\033[35m 1)深圳都市高清303\033[0m"`
`echo -e "\033[35m 2)深圳卫视高清302\033[0m"`
`echo -e "\033[35m 3)中央1高清301\033[0m"`
`echo -e "\033[35m 4)中央5高清316\033[0m"`
`echo -e "\033[35m 5)中央6高清320\033[0m"`
`echo -e "\033[35m 6)中央9高清(记录)323\033[0m"`
`echo -e "\033[35m 7)中央10高清(科教)324\033[0m"`
`echo -e "\033[35m 8)湖面卫视高清329\033[0m"`
`echo -e "\033[35m 9)浙江卫生高清332\033[0m"`
`echo -e "\033[35m 0)求索记录高清336\033[0m"`
`echo -e "\033[35m q)每日影院高清341\033[0m"`
`echo -e "\033[35m w)明珠台标清024\033[0m"`
`echo -e "\033[35m e)凤凰中文标清030\033[0m"`
`echo -e "\033[35m c)返回上级菜单\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num6
case $num6 in
1)
irsend send_once tv key_3
irsend send_once tv key_0
irsend send_once tv key_3
clear
channellist_menu
;;
2)
irsend send_once tv key_3
irsend send_once tv key_0
irsend send_once tv key_2
clear
channellist_menu
;;
3)
irsend send_once tv key_3
irsend send_once tv key_0
irsend send_once tv key_1
clear
channellist_menu
;;
4)
irsend send_once tv key_3
irsend send_once tv key_1
irsend send_once tv key_6
clear
channellist_menu
;;
5)
irsend send_once tv key_3
irsend send_once tv key_2
irsend send_once tv key_0
clear
channellist_menu
;;
6)
irsend send_once tv key_3
irsend send_once tv key_2
irsend send_once tv key_3
clear
channellist_menu
;;
7)
irsend send_once tv key_3
irsend send_once tv key_2
irsend send_once tv key_4
clear
channellist_menu
;;
8)
irsend send_once tv key_3
irsend send_once tv key_2
irsend send_once tv key_9
clear
channellist_menu
;;
9)
irsend send_once tv key_3
irsend send_once tv key_3
irsend send_once tv key_2
clear
channellist_menu
;;
0)
irsend send_once tv key_3
irsend send_once tv key_3
irsend send_once tv key_6
clear
channellist_menu
;;
q)
irsend send_once tv key_3
irsend send_once tv key_4
irsend send_once tv key_1
clear
channellist_menu
;;
w)
irsend send_once tv key_0
irsend send_once tv key_2
irsend send_once tv key_4
clear
channellist_menu
;;
e)
irsend send_once tv key_0
irsend send_once tv key_3
irsend send_once tv key_0
clear
channellist_menu
;;
c)
clear
tianwei_menu
;;
x)
clear
menu
;;
*)
clear
echo "三货!按错了!!"
sleep 1s
clear
channellist_menu
esac
}
function malanshi_menu ()
{
cat << EOF
----------------------------------------
|*********马兰士功放摇控页面***********|
----------------------------------------
`echo -e "\033[35m 1)开/关机\033[0m"`
`echo -e "\033[35m 2)静音\033[0m"`
`echo -e "\033[35m 3)CAL/SAT输入\033[0m"`
`echo -e "\033[35m 4)DVD输入\033[0m"`
`echo -e "\033[35m 5)AUX1输入\033[0m"`
`echo -e "\033[35m 6)FM收音机\033[0m"`
`echo -e "\033[35m 7)USB输入\033[0m"`
`echo -e "\033[35m 8)网络收音机\033[0m"`
`echo -e "\033[35m 0)音量+\033[0m"`
`echo -e "\033[35m 9)音量—\033[0m"`
`echo -e "\033[35m c)返回上级菜单\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num7
case $num7 in
1)
irsend send_once tv key_power
clear
malanshi_menu
;;
2)
irsend send_once tv key_mute
clear
malanshi_menu
;;
3)
irsend send_once tv key_sat
clear
malanshi_menu
;;
4)
irsend send_once tv key_dvd
clear
malanshi_menu
;;
5)
irsend send_once tv key_aux
clear
malanshi_menu
;;
6)
irsend send_once tv key_tuner
clear
malanshi_menu
;;
7)
irsend send_once tv key_u
clear
malanshi_menu
;;
8)
irsend send_once tv key_n
clear
malanshi_menu
;;
9)
irsend send_once tv key_volumedown
clear
malanshi_menu
;;
0)
irsend send_once tv key_volumeup
clear
malanshi_menu
;;
c)
clear
singleonoff_menu
;;
x)
clear
menu
;;
*)
clear
echo "二货!按错了!!"
sleep 1s
clear
tianwei_menu
esac
}
function leshi_menu ()
{
cat << EOF
----------------------------------------
|******欢迎进入乐视盒子摇控页面********|
----------------------------------------
`echo -e "\033[35m 1)开/关机\033[0m"`
`echo -e "\033[35m 2)静音\033[0m"`
`echo -e "\033[35m 3)返回\033[0m"`
`echo -e "\033[35m h)主页\033[0m"`
`echo -e "\033[35m m)菜单\033[0m"`
`echo -e "\033[35m w)向上\033[0m"`
`echo -e "\033[35m s)向下\033[0m"`
`echo -e "\033[35m a)向左\033[0m"`
`echo -e "\033[35m d)向右\033[0m"`
`echo -e "\033[35m o)确定\033[0m"`
`echo -e "\033[35m 4)设置\033[0m"`
`echo -e "\033[35m 5)乐视键\033[0m"`
`echo -e "\033[35m 0)音量+\033[0m"`
`echo -e "\033[35m 9)音量—\033[0m"`
`echo -e "\033[35m ,)频道+\033[0m"`
`echo -e "\033[35m .)频道—\033[0m"`
`echo -e "\033[35m c)返回上级菜单\033[0m"`
`echo -e "\033[35m x)返回主菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num8
case $num8 in
1)
irsend send_once tv key_power
clear
leshi_menu
;;
2)
irsend send_once tv key_mute
clear
leshi_menu
;;
3)
irsend send_once tv key_back
clear
leshi_menu
;;
4)
irsend send_once tv key_a
clear
leshi_menu
;;
5)
irsend send_once tv key_b
clear
leshi_menu
;;
h)
irsend send_once tv key_home
clear
leshi_menu
;;
m)
irsend send_once tv key_menu
clear
leshi_menu
;;
w)
irsend send_once tv key_up
clear
leshi_menu
;;
s)
irsend send_once tv key_down
clear
leshi_menu
;;
a)
irsend send_once tv key_left
clear
leshi_menu
;;
d)
irsend send_once tv key_right
clear
leshi_menu
;;
o)
irsend send_once tv key_pause
clear
leshi_menu
;;
,)
irsend send_once tv key_channelup
clear
leshi_menu
;;
.)
irsend send_once tv key_channeldown
clear
leshi_menu
;;
9)
irsend send_once tv key_volumedown
clear
leshi_menu
;;
0)
irsend send_once tv key_volumeup
clear
leshi_menu
;;
c)
clear
singleonoff_menu
;;
x)
clear
menu
;;
*)
clear
echo "二货!按错了!!"
sleep 1s
clear
leshi_menu
esac
}
function light_menu ()
{
clear
cat << EOF
----------------------------------------
|*************摇控灯主页面*************|
----------------------------------------
`echo -e "\033[35m 1)客厅灯全开/关\033[0m"`
`echo -e "\033[35m 2)闹闹房间灯开/关\033[0m"`
`echo -e "\033[35m 3)客厅灯A段开关\033[0m"`
`echo -e "\033[35m 4)客厅灯B段开关\033[0m"`
`echo -e "\033[35m 5)客厅灯C段开关\033[0m"`
`echo -e "\033[35m x)返回上级菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num9
case $num9 in
1)
clear
cd ~/433Utils/RPi_utils/
./codesend 2581592
cd ~
light_menu
;;
2)
clear
cd ~/433Utils/RPi_utils/
./codesend 16451928
cd ~
light_menu
;;
3)
clear
cd ~/433Utils/RPi_utils/
./codesend 2581585
cd ~
light_menu
;;
4)
clear
cd ~/433Utils/RPi_utils/
./codesend 2581586
cd ~
light_menu
;;
5)
clear
cd ~/433Utils/RPi_utils/
./codesend 2581588
cd ~
light_menu
;;
x)
clear
menu
;;
*)
clear
echo "没这个选项,标子!!"
sleep 1s
clear
menu
esac
}
function airc_menu ()
{
clear
cat << EOF
----------------------------------------
|*************摇控空调页面*************|
----------------------------------------
`echo -e "\033[35m 1)空调开,制冷温度25\033[0m"`
`echo -e "\033[35m 2)空调关\033[0m"`
`echo -e "\033[35m 3)温度调到23度\033[0m"`
`echo -e "\033[35m 4)温度调到24度\033[0m"`
`echo -e "\033[35m 6)温度调到26度\033[0m"`
`echo -e "\033[35m 7)温度调到27度\033[0m"`
`echo -e "\033[35m 8)温度调到28度\033[0m"`
`echo -e "\033[35m 9)温度调到29度\033[0m"`
`echo -e "\033[35m x)返回上级菜单\033[0m"`
EOF
read -n1 -p "请输入对应功能的数字:" num10
case $num10 in
1)
irsend send_once tv key_power
clear
airc_menu
;;
2)
irsend send_once tv key_off
clear
airc_menu
;;
3)
irsend send_once tv key_3
clear
airc_menu
;;
4)
irsend send_once tv key_4
clear
airc_menu
;;
6)
irsend send_once tv key_6
clear
airc_menu
;;
7)
irsend send_once tv key_7
clear
airc_menu
;;
8)
irsend send_once tv key_8
clear
airc_menu
;;
9)
irsend send_once tv key_9
clear
airc_menu
;;
x)
clear
menu
;;
*)
clear
echo "没这个选项,标子!!"
sleep 1s
clear
menu
esac
}
menu
感谢网上的一个大神,菜单的结构是根据他的资料学习的,并在其基础上改的,但不好意思没存网页!没记得是谁,请作者看到此贴跟我联系,我再具名感谢!