Man вики
Регистрация
Advertisement

Симулятор мигания счетчика

#!/bin/bash
# Параметр счетчика, указанный на счетчике (импульсов на киловат*час)
A=12800
# Номер порта gpio (задается первым аргументом)
[ $1 -ge 0 ] || exit 1
gpio=$1

# Имитируемая мощность нагрузки (в Ваттах) задаётся вторым аргументом,
# если не задано то 500 Ватт
P=$2
[ $2 -ge 0 ] 2>/dev/null || P=500
# Число импульсов задаётся 3-м аргументом, если не задано, то 1000
impX=$3
[ $3 -ge 0 ] 2>/dev/null || impX=1000

# Расчет времени интервала
t=`echo "3600000/$A/$P"|bc -l`
echo "Имметируем нагрузку $P Ватт. Отправляем на GPIO$gpio $impX импульсов длинной $t сек"
# Инициализация gpio
echo $gpio > /sys/class/gpio/export 2 > /dev/null
echo "out" > /sys/class/gpio/gpio$gpio/direction

step=1
while [ "$step" -le $impX ]
do
echo "1" > /sys/class/gpio/gpio$gpio/value && sleep $t
echo "0" > /sys/class/gpio/gpio$gpio/value && sleep $t
step=$(( $step + 1 ))

done

Подсчет импульсов

#!/bin/bash
# Параметр счетчика, указанный на счетчике (импульсов на киловат*час)
A=12800

# Номер порта gpio (задается первым аргументом)
[ $1 -ge 0 ] || exit 1
gpio=$1

# Инициализация gpio
echo $gpio > /sys/class/gpio/export 2 > /dev/null
echo "in" > /sys/class/gpio/gpio$gpio/direction


echo "" > /var/log/pool.log

while : 
do
a=0
step=1
while [ $step -le $2 ]
do
val=`cat /sys/class/gpio/gpio$gpio/value`
if [ $a != $val ]
then
a=$val
timestamp=`date +"%s.%N"`
[ "$step" != "1" ] || timestamp0=$timestamp
echo "$timestamp;$val"
step=$(( $step + 1 ))
fi
done
# Считаем среднюю мощность за период
echo "3600000/(($timestamp-$timestamp0)/($step-2)*$A)"|bc -l
echo
done
Advertisement