Фэндом


apt-get install bc

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

#!/bin/bash
# Параметр счетчика, указанный на счетчике (импульсов на киловат*час)
A=12800
# Номер порта gpio (задается первым аргументом)
[ $1 -ge 0 ] || exit 1
gpioN=$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/2"|bc -l`
echo "Имметируем нагрузку $P Ватт. Отправляем на GPIO$gpioN $impX импульсов длинной $t сек"
# Инициализация gpio
[ `cat /sys/class/gpio/gpio$gpioN/direction` == "out" ] || \
 ( echo $gpioN > /sys/class/gpio/export; \
   echo "out" > /sys/class/gpio/gpio$gpioN/direction  )
 
step=1
while [ "$step" -le $impX ]
do
 echo "1" > /sys/class/gpio/gpio$gpioN/value ; sleep $t
 echo "0" > /sys/class/gpio/gpio$gpioN/value ; sleep $t
 step=$(( $step + 1 ))
done

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

#!/bin/bash
# Параметр, указанный на счетчике (импульсов на киловат*час)
A=12800
 
# Номер порта gpio (задается первым аргументом). Выходить, если пропущен
[ $1 -ge 0 ] || exit 0
gpioN=$1
 
# Число импульсов после для расчета средней мощности, задаётся 3-м аргументом, если не задано, то 4
impX=$2
[ $2 -ge 0 ] 2>/dev/null || impX=4
 
# Инициализация gpio
[ `cat /sys/class/gpio/gpio$gpioN/direction` == "in" ] || \
 ( echo $gpioN > /sys/class/gpio/export; \
   echo "in" > /sys/class/gpio/gpio$gpioN/direction  )
# Запуск бесконечного цикла опроса датчика
while : 
do 
 a=0
 step=1
 # расчет средней мощности за заданное число импульсов
 while [ $step -le $impX ]
 do
  # Отлавливаем момент смены состояния датчика
  val=`cat /sys/class/gpio/gpio$gpioN/value`
  # Если произошла первая смена состояния датчика запоминаем этот момент,
  # а так-же выводим все остальные моменты. 
  if [ $a != $val ]
  then
   a=$val
   timestamp=`date +"%s.%N"`
   [ "$step" != "1" ] || timestamp0=$timestamp
   dt=`echo "$timestamp-$tm_prv"|bc -l`
   echo "$timestamp;$val;$dt"
   step=$(( $step + 1 ))
   tm_prv=$timestamp
 
  fi
 done
# Очищаем консоль
 clear
# Считаем среднюю мощность за период
# Зная время первого и последнего импульса,
# а так-же общее число импульсов, вычисляем среднюю мощность.
 
echo `echo "3600000/(($timestamp-$timestamp0)/($step-2)*$A*2)"|bc -l` Ватт
echo
done

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на Фэндоме

Случайная вики