tinkerforgeで温度をはかる
概要
ラズパイにtinkerforgeセンサーを接続し、node-exporter でデータ取得する。
ラズパイに以下をインストール
node-exporter (text collecter)
tinkerforge brickd
tinkerforge shell bindings
bc
install
node-exporter
apt install prometheus-node-exporter-collectors
tinkerforge brickd
wget https://download.tinkerforge.com/tools/brickd/linux/brickd_linux_latest_armhf.deb
dpkg -i brickd_linux_latest_armhf.deb
tinkerforge shell bindings
mkdir tinkerforge
cd tinkerforge
wget https://download.tinkerforge.com/bindings/shell/tinkerforge_shell_bindings_latest.zip
unzip tinkerforge_shell_bindings_latest.zip
bc
apt install bc
スクリプト設置
スクリプト作成
vi get-tinkerforge.sh
#!/bin/bash
TF_PATH=/root/tinkerforge
TF_CALL="${TF_PATH}/tinkerforge call"
PRM_PATH=/var/lib/prometheus/node-exporter
TMP_FILE=$PRM_PATH/tinkerforge.prom.tmp
PRM_FILE=$PRM_PATH/tinkerforge.prom
### target sensors ###
air_quality_bricklet=""
temperature_bricklet=""
humidity_bricklet=""
ambient_light_v2_bricklet=""
dust_detector_bricklet=""
### start
echo "# tinkerfoge sensor values" | tee $TMP_FILE
### air-quality-bricklet ###
if [[ $air_quality_bricklet = "" ]] ; then
echo "air-quality-bricklet is n/a"
else
TFID="$air_quality_bricklet"
#temperture
OUTPUT=`$TF_CALL air-quality-bricklet $TFID get-temperature`
ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
#humidity
OUTPUT=`$TF_CALL air-quality-bricklet $TFID get-humidity`
ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
#air-pressure
OUTPUT=`$TF_CALL air-quality-bricklet $TFID get-air-pressure`
#ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
ITEM=tinkerforge_air_pressure
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
fi
### temperature-bricklet ###
if [[ $temperature_bricklet = "" ]] ; then
echo "temperature-bricklet is n/a"
else
TFID=$temperature_bricklet
OUTPUT=`$TF_CALL temperature-bricklet $TFID get-temperature`
ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
fi
### humidity-bricklet ###
if [[ $humidity_bricklet = "" ]] ; then
echo "humidity-bricklet is n/a"
else
TFID=$humidity_bricklet
OUTPUT=`$TF_CALL humidity-bricklet $TFID get-humidity`
ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
fi
### ambient-light-v2-bricklet ###
if [[ $ambient_light_v2_bricklet = "" ]] ; then
echo "ambient-light-v2-bricklet is n/a"
else
TFID=$ambient_light_v2_bricklet
OUTPUT=`$TF_CALL ambient-light-v2-bricklet $TFID get-illuminance`
ITEM=tinkerforge_`echo $OUTPUT | cut -d"=" -f1`
VALUE=`echo $OUTPUT | cut -d"=" -f2`
VALUE=`bc <<< "scale=2; $VALUE/100"`
echo $ITEM $VALUE | tee -a $TMP_FILE
fi
### dust-detector-bricklet ###
if [[ $dust_detector_bricklet = "" ]] ; then
echo "dust-detector-bricklet is n/a"
else
TFID=$dust_detector_bricklet
OUTPUT=`$TF_CALL dust-detector-bricklet $TFID get-dust-density`
ITEM=tinkerforge_dust_density
VALUE=`echo $OUTPUT | cut -d"=" -f2`
echo $ITEM $VALUE | tee -a $TMP_FILE
fi
mv $TMP_FILE $PRM_FILE
動作確認
chmod 755 get-tinkerforge.sh
./get-tinkerforge.sh
以下に保存されていることを確認
ls -l /var/lib/prometheus/node-exporter/
cat /var/lib/prometheus/node-exporter/tinkerforge.prom
tinkerforge_temperature 23.31
tinkerforge_humidity 36.57
tinkerforge_air_pressure 1014.67
tinkerforge_illuminance 61.47
tinkerforge_dust_density 25
crontab
crontab -e
### tinkerforge-exporter ###
* * * * * /root/tinkerforge/get-tinkerforge.sh
prometheus 設定
prometheus.yaml に追記する
- job_name: node
# If prometheus-node-exporter is installed, grab stats about the local
# machine by default.
static_configs:
- targets:
- localhost:9100
- 192.168.0.50:9100 ★
grafana 設定
grafana-tinkerforge.json をインポートする
参考
https://github.com/tkhskh/tinkerforge-expoter