Script para registrar a temperatura

3

Eu tenho tentado escrever um script BASH para registrar a temperatura do meu pi framboesa. Meu plano é executá-lo como um crontab a cada 15 minutos ou algo assim. No entanto eu continuo recebendo erros, eu acho que é algo a ver comigo unindo as cordas, eu quero DATE1; TEMP1 DATE2; TEMP2 etc (a csv)

Meu código é:

 #!/bin/bash
vcgencmd measure_temp > /tmp/temp.txt
TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt
DATE= date +%Y-%m-%d\ %H:%M
STR="$DATE"
echo $STR
STR+=";"
echo $STR
STR+="$TEMP"
echo $STR
echo $STR >> /home/pi/temp_hist.csv

Todos os ecos são apenas eu tentando descobrir o que está acontecendo.

Gostaria de agradecer os ponteiros para corrigir este script, bem como uma maneira melhor de fazê-lo!

Eu postei originalmente na troca de pilha de pi framboesa - Script para registrar a temperatura - Mas foi dito que deveria ir aqui.

    
por Moohan 25.05.2015 / 17:26

4 respostas

3

O primeiro problema é que você tem um espaço depois do = :

TEMP= grep -o [1-9][0-9]\.[0-9] /tmp/temp.txt

Isso está errado e quebra seu roteiro. A próxima questão é que você está atribuindo os próprios comandos, como strings, às variáveis e não à sua saída:

$ foo=date
$ echo $foo
date

Para executar o comando e salvar sua saída em uma variável, você precisa usar $(command) ou 'command' :

$ foo=$(date)
$ echo $foo
Mon May 25 19:09:11 EEST 2015

Você também tem vários outros pedaços que podem ser melhorados. Tente isso:

#!/usr/bin/env bash
vcgencmd measure_temp > /tmp/temp.txt
## Avoid using UPPER CASE variable names since they
## can conflict with environmental variables. 
temp=$(grep -o "[1-9][0-9]\.[0-9]" /tmp/temp.txt)
date=$(date +"%Y-%m-%d %H:%M")
## No need for another variable
printf "%s;%s\n" "$date" "$temp" >> /home/pi/temp_hist.csv
    
por 25.05.2015 / 18:12
2

Assumindo que vcgencmd measure_temp criará um único número de ponto fixo, esse comando pode fazer o que você deseja:

temp=$( vcgencmd measure_temp | grep -o '[0-9]*\.[0-9]' )
date "+%Y-%m-%d %H:%M;${temp}" >> /home/pi/temp_hist.csv
    
por 25.05.2015 / 17:51
0

Em vez de criar uma string e anexar a ela, basta criar a string diretamente:

➜  ~  DATE="1234"
➜  ~  TEMP="15"
➜  ~  STR="$DATE;$TEMP"
➜  ~  echo $STR
1234;15
    
por 25.05.2015 / 17:41
0

Eu sou parcial com a resposta de Janis. No entanto, você pode achar rrdtool uma opção melhor para esse tipo de coisa. Ele registra seus valores em intervalos de tempo pré-determinados (ou NV se o intervalo de tempo for perdido). Ele pode então ser usado para criar alguns gráficos muito bons, ou enviar os dados para XML ou TSV. Aqui está um tutorial para iniciantes: link

    
por 26.05.2015 / 18:50