Talk Weather - Anúncio do tempo e temperatura em voz sintetizada
Publicado por Khayla Elias dos Santos (última atualização em 25/09/2015)
[ Hits: 6.397 ]
Homepage: https://linktr.ee/khayla.elias
Download 1442259524.talk-weather (versão 2)
Este script permite a exibição do tempo (temperatura, umidade relativa do ar e outros) de uma determinada localidade através do terminal. Além de atualizar e exibir periodicamente os dados, este código permite o anúncio do tempo em voz sintetizada. Para ver como usá-lo, leia o comentário nas primeiras linhas do código.
Pré-requisito: é necessário ter instalado os pacotes do espeak.
Sugestão de uso: rodar em uma das janelas do "Screen" ou do "Terminator".
Versão 2 - Enviado por Khayla Elias dos Santos em 14/09/2015
Changelog: talk-weather (version 2 - 2015.09.14)
Últimas atualizações:
- Inclusão do help através da opção --help.
- Incluída três opções de perfil: silencioso; voz com pausador do 'mocp'; e default, somente com voz.
- Verificação dos parâmetros de entrada e outras (sanity checks).
- Reimplementação do tratamento de flexão gramatical (singular/plural).
Download 1442259524.talk-weather
#!/bin/bash # Description: get, talk and display weather data of station selected. # # Parameters: # 1) CODE: station code of local (get in http://www.nws.noaa.gov/tg/siteloc.shtml) # 2) INTERVAL: interval to updade data (in minutes) # 3) QUIET: desable speech synthesizer when weather is updated (use -q ) # # General use: # talk-weather [CODE [INTERVAL [-q]]] # Examples of use: # talk-weather SBCF # talk-weather SCSP 15 # talk-weather SLLP 30 -q # # By: Alexandre Elias dos Santos (aleniac@ufmg.br) # Date: July 2015 intervalo=$2; intervalo=${intervalo:=20} # intervalo de atualização intervalo=$(($intervalo*60)) # conversão de intervalo para segundos [ "$intervalo" -eq 0 ] && intervalo=1200 DIR="$HOME/.wmWeatherReports" COD="`echo "$1"|cut -c -4|tr '[:lower:]' '[:upper:]'`" COD="`echo ${COD:=SBBH}`" # define por default a estação de Belo Horizonte FILE="http://weather.noaa.gov/pub/data/observations/metar/decoded/$COD.TXT" UPDATE0="`ls -ltu $DIR/$COD.TXT 2>/dev/null|sed 's/ */ /g'|cut -d' ' -f 6-8|sed 's/[ :]//g'`" UPDATE="$UPDATE0" # flag de update QUIET=$3 # desable talk QUIET=${QUIET:=null} # vetor rosa do vento declare -A ROSA=([N]=Norte [NNE]=Nor-nordeste [NE]=Nordeste [ENE]=Lés-nordeste [E]=Leste [ESE]=Lés-sudeste [SE]=Sudeste [SSE]=Su-sudeste [S]=Sul [SSW]=Su-sudoeste [SW]=Sudoeste [WSW]=Oés-sudoeste [W]=Oeste [WNW]=Oés-noroeste [NW]=Noroeste [NNW]=Nor-noroeste [null]=null) if [ ! -d $DIR ]; then mkdir $DIR fi # verifica existencia do diretorio de trabalho cd $DIR clear printf "To get $COD each $(($intervalo/60)) minutes." [ "$QUIET" = "-q" ] && printf " Quiet." sleep 3 while true; do clear printf "Downloading $COD... "; tput cup 0 0 wget -qN $FILE || printf "\e[31;1mwget (`date +%H:%M:%S`): error to get file $COD.TXT\e[m\n" if [ -f $DIR/$COD.TXT ]; then printf "\e[1;36m`egrep "[0-9]-[0-9]|UTC" $DIR/$COD.TXT`\n" # EXTRAI DADOS DO ARQUIVO estacao="`grep "[0-9]-[0-9]" $DIR/$COD.TXT|sed 's/ *,.*//'`"; estacao=${estacao:=Estação desconhecida} temperatura="`grep Temp $DIR/$COD.TXT|cut -d"(" -f2|cut -d" " -f1`"; temperatura=${temperatura:=null} humid="`grep Hum $DIR/$COD.TXT|sed 's/.*:.//'|sed 's/%//'`"; humid=${humid:=null} est="`ls -ltu $DIR/$COD.TXT 2>/dev/null|sed 's/ */ /g'|cut -d' ' -f 6-8|sed -r 's/ [0-9][0-9]:/,&/'`"; est=${est:=null} from="`grep Wind: $DIR/$COD.TXT| cut -d" " -f4`"; from=${from:=null} angulo="`grep Wind: $DIR/$COD.TXT|sed -r "s/^.*\(([0-9][0-9]*) deg.*$/\1/"`"; angulo=${angulo:=null} velocidade="`grep Wind: $DIR/$COD.TXT|sed -r 's/^.*at ([0-9][0-9]*).MPH.*$/\1/'`"; velocidade=${velocidade:=null} grep -q "Calm:0" $DIR/$COD.TXT if [ "$?" = 0 ]; then wind="Vento calmo." else wind="Vento à $velocidade milhas por hora, vindo do ${ROSA[$from]}." fi sky="`grep Sky $DIR/$COD.TXT|sed 's/.*:.//'`" weather="`grep Weat $DIR/$COD.TXT|sed 's/.*:.//'`" ############################ printf '\e[33mTemperature:\e[m%s\n' " $temperatura °C" printf '\e[1;33mWind:\e[m%s\n' "`grep "^Wind:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Win.*ill:" $DIR/$COD.TXT && printf '\e[1;33mWindchill:\e[m%s\n' "`grep "^Win.*ll:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Vis.*:" $DIR/$COD.TXT && printf '\e[1;33mVisibility:\e[m%s\n' "`grep "^Vis.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Sky.*:" $DIR/$COD.TXT && printf '\e[1;33mSky conditions:\e[m%s\n' "`grep "^Sky.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Weather:" $DIR/$COD.TXT && printf '\e[1;33mWeather:\e[m%s\n' "`grep "^Wea.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Precip.*:" $DIR/$COD.TXT && printf '\e[1;33mPrecipitation last hour:\e[m%s\n' "`grep "^Precip.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Heat.*:" $DIR/$COD.TXT && printf '\e[1;33mHeat index:\e[m%s\n' "`grep "^Heat.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "Dew.*:" $DIR/$COD.TXT && printf '\e[1;33mDew Point:\e[m%s\n' "`grep "^Dew.*t:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Relat.*:" $DIR/$COD.TXT && printf '\e[1;33mRelative Humidity:\e[m%s\n' "`grep "^Relat.*:" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Press.*):" $DIR/$COD.TXT && printf '\e[1;33mPressurre (altimeter):\e[m%s\n' "`grep "^Press.*):" $DIR/$COD.TXT|cut -d":" -f2`" grep -q "^Press.*y:" $DIR/$COD.TXT && printf '\e[1;33mPressurre tendency:\e[m%s\n' "`grep "^Press.*y:" $DIR/$COD.TXT|cut -d":" -f2`" ### grep -q "^ob:" $DIR/$COD.TXT && printf '\e[1;33mob:\e[m%s\n' "`grep "^ob:" $DIR/$COD.TXT|sed 's/ob://'`" grep -q "^cycle:" $DIR/$COD.TXT && printf '\e[1;33mcycle:\e[m%s' "`grep "^cycle:" $DIR/$COD.TXT|cut -d":" -f2`" UPDATE0="`ls -ltu $DIR/$COD.TXT 2>/dev/null|sed 's/ */ /g'|cut -d' ' -f 6-8|sed 's/[ :]//g'`" if [ "$QUIET" != "-q" ] && [ "$UPDATE" != "$UPDATE0" ]; then UPDATE="$UPDATE0" temp="`echo "scale=1; ($temperatura^2)/1"|bc`" if [ "$temp" = "1.0" ]; then grau="grau" negativo="negativo" temp="`echo "scale=0; $temperatura/1"|bc`" else grau="graus" negativo="negativos" fi # faz tratamento de plural if [ "`echo "scale=0; 10*$temperatura/1"|bc`" -lt 0 ]; then if [ "$temp" = "-1" ]; then temp=1 else if [ `echo "$temperatura"|grep -q "\."; echo $?` = 0 ]; then temp="`echo "scale=1; $temperatura/(-1)"|bc`" else temp=$((-1*$temperatura)) fi fi temp="`echo $temp|sed 's/^\./0\./'`" temp="$temp $grau $negativo" else if [ "$temp" != "1" ]; then temp="`echo $temperatura|sed 's/^\./0\./'`" fi temp="$temp $grau" fi # faz tratamento de negativos ( # talking weather... pausado="" # estado do mocp (Muscic On Console Player) mocp -i|head -1|grep -q "PAUSE" &>/dev/null && pausado="on" mocp -P &>/dev/null # unpaused mocp espeak -k -20 -ven-us+m2 "$HOSTNAME: weather:" espeak -k -20 -vpt+f2 "Em $estacao, `echo $temp|sed 's/\./ponto/'`. Humidade relativa do ar: $humid por cento." [ -n "$sky" ] && espeak -k -20 -ven-us+m2 "Sky conditions: $sky`[ -n "$weather" ] && echo ","` $weather." [ $((`date +%H|sed 's/^0//'` % 3)) -eq 0 ] && espeak -k -20 -vpt+f2 "$wind" [ "$pausado" = "on" ] || mocp -U &>/dev/null # unpased mocp ) fi # saida de voz - tempo e temperatura fi sleep $intervalo done # atualiza e exibe os dados periodicamente
Determinar o tempo de compilação de um programa
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)