Controle e Automação

Publicado por Bruno Santos em 15/06/2015

[ Hits: 2.895 ]

 


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

Shell Script - Imprimindo nome da própria função em execução

Variável de numero inteiro ou float

Transforme a manpage do GNU/Linux em PDF

Arrays no BASH

Nome de arquivo com espaço dentro de variáveis

  

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