Portál AbcLinuxu, 6. května 2025 15:55
Ahojte,
snažím se rozběhnout script pro vytvoření cyklu, který spočítá teplotu dohramdy a na konci provedu dělení a získám tak průměrnou teplotu.
Bohužel se mně to nějak nedaří dát dohromady. Poradíte prosím?
#!/bin/bash
total_temp=0
avg_temp=0
for i in {1..5}
do
teplota="`cat /sys/bus/w1/devices/28-0301977927ab/w1_slave | sed -n 's/^.*\(t=[^ ]*\).*/\1/p' | sed 's/t=//' | awk '{x=$1}END{print(x/1000)}'`"
total_temp = $total_temp + $teplota
sleep 2
done
avg_temp = $total_temp / 4
echo $avg_temp
total_temp=$(($total_temp + $teplota)) avg_temp=$(($total_temp / 4))Co je vystupem prikazu:
cat /sys/bus/w1/devices/28-0301977927ab/w1_slave?
Co je vystupem prikazu:neco jako:cat /sys/bus/w1/devices/28-0301977927ab/w1_slave?
9a 01 4b 46 7f ff 0c 10 9f : crc=9f YES 9a 01 4b 46 7f ff 0c 10 9f t=25625
#!/bin/bash total_temp=0 values=0 for i in {1..5}; do teplota=`awk -F'=' '/t/{print $2/1000}' /sys/bus/w1/devices/28-0301977927ab/w1_slave` total_temp=`echo $total_temp + $teplota | bc -l` values=$(($values + 1)) sleep 2 done avg_temp=`echo $total_temp / $values |bc -l` echo $avg_temp
let values++
((values++))
#!/bin/bash total_temp=0 values=5 for ((i=0; i<$values; i++)); do teplota=`sed -n 's/^.*t=\([^ ]*\).*/\1/p' /sys/bus/w1/devices/28-0301977927ab/w1_slave` ((total_temp+=teplota)) sleep 2 done ((avg_temp=total_temp/values)) echo ${avg_temp%???}.${avg_temp: -3}A mas to aj s povodnou presnostou (fixed point arithmetic) a s minimom novych procesov (aj ta funkcnost toho sedu sa da prepisat do cisteho bashu, cim sa to asi 10x urychli, ale uz sa mi nechce).
# cat w1_awg.awk BEGIN { if ((ARGC < 2) || (ARGC > 3)) { print "Usage:", ARGV[0], "/sys/bus/w1/devices/[sensor_id]/w1_slave [samples]" exit 1 } if (ARGC==3){ SAMPLES=ARGV[2] if (SAMPLES !~ "[1-9][0-9]*") { print "Number of samples must be number greather than zero" exit 2 } } else { SAMPLES=5 } FNAME=ARGV[1] TEMP_SUM=0 for (i = 1; i <= SAMPLES; ++i) { while((getline line < FNAME) > 0 ) { if (line ~ "t=") { split(line, f, "=") TEMP_SUM+=f[2]/1000 } } close(FNAME) system("sleep 2") } print TEMP_SUM/SAMPLES }
# awk -f w1_awg.awk /sys/bus/w1/devices/28-0301977927ab/w1_slave 3 25.75 #
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.