Controle e Automação

Publicado por Bruno Santos em 15/06/2015

[ Hits: 2.684 ]

 


Controle e Automação



Eu não sou da área de TI, muito menos especialista em shell, mas sempre fui um apaixonado pelo Linux/Unix e sua ideologia.

Controladores lógicos industriais são caríssimos e eu sempre enxerguei e acreditei no potencial GNU em democratizar o acesso às tecnologias.

Temporizadores são imprescindíveis no controle eletromecânico, como não encontrei nada parecido, me senti no dever de divulgar, ainda é rudimentar, mas espero ajudar quem trilha esse caminho. Não espero nenhum retorno, é simplesmente pelo carinho de tantos anos suportado por essa linda família Linux!

Ainda não sei bem como fazer a comunicação com uma placa de IO, mas assim que eu precisar e descobrir, informarei com muito prazer!

#Desauto_V3.0_brsantos_02/06/15
menu="=======>>Desligamento Automático<<========
|==>Modos de desligamento                |
|Temporizado  >>T<< [HH:MM; H:M ou MMMM] |
|Agendado     >>A<< [H{0..24}  M{0..60}] |
|Imediato     >>I<<                      |
=========================================="
menuset1="|==>Modo Selecionado (Temporizado)       |"
menuset2="|==>Modo Selecionado (Agendado)          |"
echo "$menu"
read modo

if [ $modo = 'I' -o $modo = 'i' ]
    then sudo shutdown  -v -h -P +0
fi

if [ $modo = 'T' -o $modo = 't' ]
    then
        clear;echo "$menu"
        echo "|==>Setup Temporizado                    |\n|Quantas horas?                          |"
        read H
        clear;echo "$menu"
        echo "|==>Setup Temporizado                    |\n|Quantos minutos?                        |"
        read M
        clear;echo "$menu\n$menuset1\n|Iniciado   "$(date +%H:%M:%S)"||=======Timer=======|"
    elif [ $modo = 'A' -o $modo = 'a' ]
        then
        clear;echo "$menu"
        echo "|==>Setup Agendado                       |\n|Para que hora?                          |"
        read horaAG
        clear;echo "$menu"
        echo "|==>Setup Agendado                       |\n|Para que minuto?                        |"
        read minAG
        clear;echo "$menu\n$menuset2\n|Iniciado   "$(date +%H:%M:%S)"||=======Timer=======|"
        horaA=$(date +%H)
        minA=$(date +%M)

        if [ $(($horaAG-$horaA)) -lt 0 ]
            then
                H=$(($horaAG+24-$horaA))
            else
                H=$(($horaAG-$horaA))
        fi

        if [ $(($minAG-$minA)) -lt 0 ]
            then
                M=$(($minAG+60-$minA))
                H=$(($H-1))
            else
                M=$(($minAG-$minA))
        fi

    else clear;echo "Digite o modo corretamente: T ou t; A ou a; I ou i"
    exit
fi

horaA=$(date +%H)
minA=$(date +%M)
seg=$(date +%S)
minF=$M
horaF=$H

if [ $M -gt 60 ]
    then
        while [ $minF -gt 60 ]
            do
                minF=$(($minF-60))
                horaF=$(($horaF+1))
        done
fi

if [ $horaA -lt 10 -a $horaA -gt 0 ]
    then
        horaP=$(($H+${horaA#*0}))
    else
        horaP=$(($H+$horaA))
fi

if [ $minA -lt 10 -a $minA -gt 0 ]
    then
        minP=$(($M+${minA#*0}))
    else
        minP=$(($M+$minA))
fi

while [ $minP -ge 60 ]
    do
        minP=$(($minP-60))
        horaP=$(($horaP+1))
done

min=$minP
hora=$horaP

if [ $hora -ge 24 ]
    then
        hora=$(($hora-24))
fi

if [ $min -lt 10 -o $hora -lt 10 ]
    then
        if [ $min -lt 10 -a $hora -lt 10 ]
            then echo "|Hora_Final 0"$hora":0"$min":"$seg"||     "$horaF"H "$minF"M <=="
            elif [ $hora -lt 10 ]
                then echo "|Hora_Final 0"$hora":"$min":"$seg"||     "$horaF"H "$minF"M <=="
            else echo "|Hora_Final "$hora":0"$min":"$seg"||     "$horaF"H "$minF"M <=="
        fi
    else echo "|Hora_Final "$hora":"$min":"$seg"||     "$horaF"H "$minF"M <=="
fi

Thora=$horaF
Tmin=$minF
Tseg=0
segC=$seg

while [ $Thora$Tmin$Tseg -ne 000 ]
    do
        segA=$(date +%S)
        NsegA=$(date +%N)

        if [ $segC -ne $segA ]
            then
                Tseg=$(($Tseg-1))
                segC=$segA
        fi

        if [ $Tseg -lt 0 ]
            then
                Tseg=59
                Tmin=$(($Tmin-1))
        fi

        if [ $Tmin -lt 0 ]
            then
                Tmin=59
                Thora=$(($Thora-1))
        fi
echo -n "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b|Hora_Atual "$(date +%H:%M:%S)"|| ==> $Thora""H"" $Tmin""M"" $Tseg""S    "
done
Tseg=0
sudo shutdown -v -h -P +1
clear
exit

Download do script: desauto_v3.0.sh

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Hora no prompt do terminal

Arrays no BASH

Truques para tratamento de variáveis em shell script

Declarando constantes em shell scripts

Trabalhando com parâmetros em Shell Script

  

Comentários
[1] Comentário enviado por brsan7 em 15/06/2015 - 20:15h

segue o script um pouco mais refinado, comentado e voltado para a observação e posterior uso... Grande Abraço Família GNU!!!
https://drive.google.com/file/d/0B6BezlItOIy6aG1vSl9OVFUxdnM/view?usp=sharing



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts