PDA

Просмотр полной версии : Будильник своими руками


corteho
02.07.2010, 17:12
готовый скрипт для debian-дистрибутивов (у меня работает на ubuntu), скопировать в файл, дать права, доустановить фестиваль и ритмбокс, запихнутьскрипт в cron

и в заданное время скрипт будет включать проигрыватель, уменьшать звук, говорить приятные слова, затем включать музыку из списка.

#!/bin/bash

##Чтобы поставить будильник, вводим в терминале команду "crontab -e"
##И прописываем нужные параметры:
##PATH=/sbin:/bin:/usr/sbin:/usr/bin
##SHELL=/bin/bash
### m h dom mon dow command
##0 7 * * 1-5 bash alarm
##0 10 * * 6-7 bash alarm


export DISPLAY=:0
export LANG=ru_RU.UTF-8


# Склоняем в соответствующем падеже слова "час" и "минута" # 2 раза :)))

check_date ()

{

CURR_HOUR=`date +%H`
CURR_MIN=`date +%M`
TEMP_HOUR="`echo $CURR_HOUR | colrm 1 1`"
TEMP_MIN="`echo $CURR_MIN | colrm 1 1`"

if [ "$CURR_HOUR" -eq "0" ] || [ "$CURR_HOUR" -eq "5" ] || [ "$CURR_HOUR" -eq "6" ] || [ "$CURR_HOUR" -eq "7" ] || [ "$CURR_HOUR" -eq "8" ] || [ "$CURR_HOUR" -eq "9" ] || [ "$CURR_HOUR" -eq "11" ] || [ "$CURR_HOUR" -eq "12" ] || [ "$CURR_HOUR" -eq "13" ] || [ "$CURR_HOUR" -eq "14" ] || [ "$TEMP_HOUR" -eq "0" ] || [ "$TEMP_HOUR" -eq "5" ] || [ "$TEMP_HOUR" -eq "6" ] || [ "$TEMP_HOUR" -eq "7" ] || [ "$TEMP_HOUR" -eq "8" ] || [ "$TEMP_HOUR" -eq "9" ]; then LC_HOUR="часов"

elif [ "$CURR_HOUR" -eq "2" ] || [ "$CURR_HOUR" -eq "3" ] || [ "$CURR_HOUR" -eq "4" ] || [ "$TEMP_HOUR" -eq "2" ] || [ "$TEMP_HOUR" -eq "3" ] || [ "$TEMP_HOUR" -eq "4" ]; then LC_HOUR="часа"

elif [ "$CURR_HOUR" -eq "1" ] || [ "$TEMP_HOUR" -eq "1" ]; then LC_HOUR="час"

fi


if [ "$CURR_MIN" -eq "5" ] || [ "$CURR_MIN" -eq "6" ] || [ "$CURR_MIN" -eq "7" ] || [ "$CURR_MIN" -eq "8" ] || [ "$CURR_MIN" -eq "9" ] || [ "$CURR_MIN" -eq "11" ] || [ "$CURR_MIN" -eq "12" ] || [ "$CURR_MIN" -eq "13" ] || [ "$CURR_MIN" -eq "14" ] || [ "$TEMP_MIN" -eq "0" ] || [ "$TEMP_MIN" -eq "5" ] || [ "$TEMP_MIN" -eq "6" ] || [ "$TEMP_MIN" -eq "7" ] || [ "$TEMP_MIN" -eq "8" ] || [ "$TEMP_MIN" -eq "9" ]; then LC_MINUTE="минут"

elif [ "$CURR_MIN" -eq "3" ] || [ "$CURR_MIN" -eq "4" ] || [ "$TEMP_MIN" -eq "3" ] || [ "$TEMP_MIN" -eq "4" ]; then LC_MINUTE="минуты"

fi


if [ "$CURR_MIN" -eq "1" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR однa минута"

elif [ "$CURR_MIN" -eq "11" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR $CURR_MIN $LC_MINUTE"

elif [ "$TEMP_MIN" -eq "1" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR $(echo $CURR_MIN-1|bc) одна минута"

elif [ "$CURR_MIN" -eq "2" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR две минуты"

elif [ "$CURR_MIN" -eq "12" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR $CURR_MIN $LC_MINUTE"

elif [ "$TEMP_MIN" -eq "2" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR $(echo $CURR_MIN-2|bc) две минуты"

elif [ "$CURR_MIN" -eq "00" ]; then DATE_TIME="$CURR_HOUR $LC_HOUR ровно"

else DATE_TIME="$CURR_HOUR $LC_HOUR $CURR_MIN $LC_MINUTE"

fi

}


# Получаем температуру в своем городе

CURR_TEMP="`wget -O - http://www.gismeteo.ru/city/daily/3915/ 2>/dev/null | grep '<div class="deg">' | sed -r 's/<div class="deg">(.[0-9]+).*/\1/g' | awk '{print $1}'`"

if [ "`echo $CURR_TEMP | sed -r 's/(.)[0-9]+/\1/g'`" == "-" ]; then TEMP_SIGN="минус"

else TEMP_SIGN=""

fi

CURR_DEGREE="`echo $CURR_TEMP | sed -r 's/.([0-9]+)/\1/g'`"


# Склоняем в соответствующем падеже слово "градус"

TEMP_DEGREE="`echo $CURR_DEGREE | colrm 1 1`"

if [ "$CURR_DEGREE" -eq "0" ] || [ "$CURR_DEGREE" -eq "5" ] || [ "$CURR_DEGREE" -eq "6" ] || [ "$CURR_DEGREE" -eq "7" ] || [ "$CURR_DEGREE" -eq "8" ] || [ "$CURR_DEGREE" -eq "9" ] || [ "$CURR_DEGREE" -eq "11" ] || [ "$CURR_DEGREE" -eq "12" ] || [ "$CURR_DEGREE" -eq "13" ] || [ "$CURR_DEGREE" -eq "14" ] || [ "$TEMP_DEGREE" -eq "0" ] || [ "$TEMP_DEGREE" -eq "5" ] || [ "$TEMP_DEGREE" -eq "6" ] || [ "$TEMP_DEGREE" -eq "7" ] || [ "$TEMP_DEGREE" -eq "8" ] || [ "$TEMP_DEGREE" -eq "9" ]; then LC_DEGREE="градусов"

elif [ "$CURR_DEGREE" -eq "2" ] || [ "$CURR_DEGREE" -eq "3" ] || [ "$CURR_DEGREE" -eq "4" ] || [ "$TEMP_DEGREE" -eq "2" ] || [ "$TEMP_DEGREE" -eq "3" ] || [ "$TEMP_DEGREE" -eq "4" ]; then LC_DEGREE="градуса"

elif [ "$CURR_DEGREE" -eq "1" ] || [ "$TEMP_DEGREE" -eq "1" ]; then LC_DEGREE="градус"

fi


#А теперь сам будильник

check_date
amixer sset Master 100% unmute
rhythmbox-client --set-volume .1
sleep 5
rhythmbox-client --play
sleep 2
rhythmbox-client --set-volume .2
sleep 2
rhythmbox-client --set-volume .3
sleep 2
rhythmbox-client --set-volume .4
sleep 2
rhythmbox-client --set-volume .5
sleep 2
rhythmbox-client --set-volume .6
sleep 2
rhythmbox-client --set-volume .7
sleep 2
rhythmbox-client --set-volume .8
sleep 2
rhythmbox-client --set-volume .9
sleep 2
rhythmbox-client --set-volume 1.0
sleep 20
rhythmbox-client --set-volume .8
sleep 1
rhythmbox-client --set-volume .6
sleep 1
rhythmbox-client --set-volume .4
sleep 1
rhythmbox-client --set-volume .2
sleep 1
echo "Доброе утро!" | festival --tts --language russian
echo "Сегодня `date +%A`" | festival --tts --language russian
echo "Время $DATE_TIME" | festival --tts --language russian
echo "Температура $TEMP_SIGN $CURR_DEGREE $LC_DEGREE!" | festival --tts --language russian
echo "Удачного дня" | festival --tts --language russian
sleep 1
rhythmbox-client --set-volume .4
sleep 1
rhythmbox-client --set-volume .6
sleep 1
rhythmbox-client --set-volume .8
sleep 1
rhythmbox-client --set-volume 1.0
sleep 120
check_date
rhythmbox-client --set-volume .8
sleep 1
rhythmbox-client --set-volume .6
sleep 1
rhythmbox-client --set-volume .4
sleep 1
rhythmbox-client --set-volume .2
sleep 1
echo "Уже $DATE_TIME. Может пора вставать?" | festival --tts --language russian
sleep 1
rhythmbox-client --set-volume .4
sleep 1
rhythmbox-client --set-volume .6
sleep 1
rhythmbox-client --set-volume .8
sleep 1
rhythmbox-client --set-volume 1.0
exit 0