raspberryPiにinfluxdbとgrafanaをインストールする
ラズベリーパイにinfluxdbをインストールして、データをgrafanaでvisualization化する方法です。
Install influxdb
1. install influxdb
$ wget http://ftp.us.debian.org/debian/pool/main/i/influxdb/influxdb_1.0.2+dfsg1-1_armhf.deb $ sudo dpkg -i influxdb_1.0.2+dfsg1-1_armhf.deb Selecting previously unselected package influxdb. (Reading database ... 133808 files and directories currently installed.) Preparing to unpack influxdb_1.0.2+dfsg1-1_armhf.deb ... Unpacking influxdb (1.0.2+dfsg1-1) ... Setting up influxdb (1.0.2+dfsg1-1) ... Adding system user 'influxdb' (UID 113) ... Adding new user 'influxdb' (UID 113) with group 'nogroup' ... Not creating home directory '/var/lib/influxdb'. Adding group 'influxdb' (GID 120) ... Done. Adding user 'influxdb' to group 'influxdb' ... Adding user influxdb to group influxdb Done. Processing triggers for systemd (215-17+deb8u4) ... Processing triggers for man-db (2.7.0.2-5) ... $ ps aux | grep influx influxdb 1442 0.5 3.1 897392 27904 ? Ssl 10:33 1:18 /usr/bin/influxd -config /etc/influxdb/influxdb.conf pi 6804 0.0 0.2 4276 1908 pts/1 S+ 14:17 0:00 grep influx $ ss -lntp | grep 808 LISTEN 0 128 :::8083 :::* LISTEN 0 128 :::8086 :::* LISTEN 0 128 :::8088 :::*
(※v1.2のinstall方法も書きました)
portaltan.hatenablog.com
2. confirm GUI
GUIのportは8083なので、「http://{raspberryPiのIP}:8083」にアクセスして、以下のようなGUI画面が出てくることを確認
「SHOW DATABASES」と打ち込み、きちんとクエリも投げられることを確認
influxdb APIの使い方
DATABASEの作成
$ curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE ${作成したいdatabase名}"
- endpointは/query
データ投入
method
$ curl -i -XPOST "http://localhost:8086/write?db=${データ投入したいdatabase名}" --data-binary '${measurement名} ${Field名(column名)}=${値}'
- endpointは/write
確認
$ curl -i -XPOST "http://localhost:8086/write?db=mydb" --data-binary 'test_measurement value=100' $ curl -i -XPOST "http://localhost:8086/write?db=mydb" --data-binary 'test_measurement value=200' $ curl -i -XPOST "http://localhost:8086/write?db=mydb" --data-binary 'test_measurement value2=200' $ curl -G 'http://localhost:8086/query?db=mydb&pretty=true' --data-urlencode 'q=SELECT * FROM test_measurement' { "results": [ { "series": [ { "name": "test_measurement", "columns": [ "time", "value", "value2" ], "values": [ [ "2017-02-03T05:45:22.049368887Z", 100, null ], [ "2017-02-03T05:45:31.98145523Z", 200, null ], [ "2017-02-03T05:49:57.29042142Z", null, 200 ] ] } ] } ] }
ちなみに自分の中ではinfluxdbの各項目はこんなイメージです
influxdb | mysql |
---|---|
database | database |
measurement | table |
field | column |
install grafana
1. install grafana
### install grafana-data $ wget http://ftp.us.debian.org/debian/pool/main/g/grafana/grafana-data_2.6.0+dfsg-3_all.deb $ sudo dpkg -i grafana-data_2.6.0+dfsg-3_all.deb $ sudo apt-get install -f ### install grafana $ wget http://ftp.us.debian.org/debian/pool/main/g/grafana/grafana_2.6.0+dfsg-3_armhf.deb $ sudo dpkg -i grafana_2.6.0+dfsg-3_armhf.deb $ sudo apt-get install -f $ ps aux | grep grafana grafana 5525 0.0 1.5 884972 13804 ? Ssl 10:54 0:07 /usr/sbin/grafana --config=/etc/grafana/grafana.ini cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana pi 7006 0.0 0.2 4276 1908 pts/1 S+ 15:43 0:00 grep grafana $ ss -lntp | grep 3000 LISTEN 0 128 :::3000 :::*
2. GUI確認
portは3000なので、「http://{raspberryPiのIP}:3000」にアクセスして、以下のようなGUI画面が出てくることを確認
- 初期アカウントはadmin/admin
ログインすると以下のような画面が表示される
3. Dashboard作成
Data Sourceの設定
- Name: 好きな名前
- Type: influxDB
- Url: influxDBのAPI
- Database: アクセスするdababase名
- user/pasword: root/root
気象庁の風向・風速の計測(計算)方法
瞬間風向・瞬間風速・最大瞬間風速
- 瞬間風向:0.25秒毎の瞬間の風の向き
- 瞬間風速:風速計の測定値(0.25秒間隔)を3秒間平均した値(測定値12個の平均値)
- 最大瞬間風速:(任意の期間中の)瞬間風速の最大値
平均風向・平均風速・最大風速
- 平均風向:10分間のデータの平均風向
- ただし航空機の離着陸のための観測においては2分間で平均を出す
- 平均風速:10分間のデータの平均風速
- ただし航空機の離着陸のための観測においては2分間で平均を出す
- 最大風速:(任意の期間中)平均風速の最大値
raspberryPi3(jessie)にopenCV3.1.0をインストールする
わりと手こずりましたが、ラズベリーパイにopencv3.1.0をインストールする方法です
以下のサイトを参考にさせて頂きました。
reference
Raspberry Pi 2 ★ OpenCV 3.1.0 のインストール 〜 C++ & Python サンプルでのカメラ動作確認まで | Home Made Garbage
Raspberry Pi 3にOpenCV 3.1のインストール | TomoSoft
Procedure
ライブラリのインストール
$ sudo apt-get install build-essential cmake cmake-qt-gui $ sudo apt-get install libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev python-dev python-numpy python-tk libeigen3-dev yasm libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev
packageのダウンロード
$ cd ~ $ mkdir src $ cd src # OpenCVのダウンロード $ wget https://github.com/Itseez/opencv/archive/3.1.0.zip $ unzip 3.1.0.zip # OpenCV contribもダウンロード $ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip $ unzip opencv_contrib.zip
build
$ cd opencv-3.1.0 $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=/home/pi/src/opencv_contrib-3.1.0/modules \ -D BUILD_EXAMPLES=ON .. $ make -j4
install
$ sudo make install $ sudo ldconfig
確認
$ python Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> print cv2.__version__ 3.1.0
無事3.1.0がインストールされていることを確認して完了
openCVでraspberryPiのUSBカメラのキャプチャをとって、サイズを変更する
import cv2 # cameraの設定 c = cv2.VideoCapture(0) # キャプチャ boolean, img = c.read() h, w = img.shape[:2] print h # 1280 print w # 720 # サイズ変更 half = cv2.resize(img, (320, 240)) hh, hw = half.shape[:2] print hh # 320 print hw # 240 cv2.imwrite('half.jpg', half)
- VideoCaptureでdeviceを指定して、readでキャプチャをとる
- resize(source, (heightのsize, widthのsize))でサイズ変更
- imwriteでimageをファイル出力
うまく行かない場合はlsusbとかでちゃんとUSBカメラが認識されているか確認する
motionを使ってRaspberryPiからUSBカメラの映像をストリーミングする方法
motionのインストール
sudo apt-get install motion
設定の変更
sudo vi /etc/motion/motion.conf ### USBカメラの設定をする(解像度やFramerate) 89 # Image width (pixels). Valid range: Camera dependent, default: 352 90 width 320 91 92 # Image height (pixels). Valid range: Camera dependent, default: 288 93 height 240 94 95 # Maximum number of frames to be captured per second. 96 # Valid range: 2-100. Default: 100 (almost no limit). 97 framerate 2 ### 画像ファイルとして保存する機能は今回はoffにする 250 output_pictures off ### Streamingの設定をする 473 # Maximum framerate for stream streams (default: 1) 474 stream_maxrate 2 475 476 # Restrict stream connections to localhost only (default: on) 477 stream_localhost off
motion起動
sudo motion -n
確認
以下のURLにアクセスして映像が確認できれば完了
http://{raspberryPiのIP}:8081
ただしMJPG-stremerに比べて3秒前後の遅延が発生する。
USBカメラの解像度等の情報を確認する方法
deviceの確認
まずはカメラを接続したらlsusbで認識されているか確認します
$ lsusb Bus 001 Device 005: ID 288c:0002 # <== これが追加された Bus 001 Device 007: ID 05ac:0222 Apple, Inc. Aluminum Keyboard (JIS) Bus 001 Device 006: ID 04ca:0061 Lite-On Technology Corp. Bus 001 Device 004: ID 05ac:1006 Apple, Inc. Hub in Aluminum Keyboard Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
今回はBus 001 Device 005にUSBカメラが設定されています。
このときカメラの製造元や会社の名前が出てくるときと出てこない場合があります
各項目の確認
概要確認
$ v4l2-ctl -d 0 --info Driver Info (not using libv4l2): Driver name : uvcvideo Card type : MS-M103HU Bus info : usb-3f980000.usb-1.5 Driver version: 4.4.11 Capabilities : 0x84200001 Video Capture Streaming Extended Pix Format Device Capabilities Device Caps : 0x04200001 Video Capture Streaming Extended Pix Format
全項目確認
$ v4l2-ctl -d 0 --all Driver Info (not using libv4l2): Driver name : uvcvideo Card type : MS-M103HU Bus info : usb-3f980000.usb-1.5 Driver version: 4.4.11 Capabilities : 0x84200001 Video Capture Streaming Extended Pix Format ・ ・ ・
対応解像度&FPS確認
$ v4l2-ctl -d 0 --list-formats-ext ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'YUYV' Name : YUYV 4:2:2 Size: Discrete 1280x720 Interval: Discrete 0.083s (12.000 fps) Index : 1 Type : Video Capture Pixel Format: 'MJPG' (compressed) Name : Motion-JPEG Size: Discrete 1280x720 Interval: Discrete 0.033s (30.000 fps)
lsusbでも確認できる
$ lsusb -s 001:005 -v | egrep "Width|Height" Couldn't open device, some information will be missing wWidth 1280 wHeight 720 wWidth( 0) 1280 wHeight( 0) 720 wWidth 1280 wHeight 720 wWidth( 0) 1280 wHeight( 0) 720
low voltage detected, date/time is not reliable.
エラー文
RaspberryPiでRTCから時刻合わせをしようとすると以下のようなエラーが出ることがある。
Jan 01 23:11:11 raspberrypi kernel: [ 131.098038] rtc-pcf8563 1-0051: low voltage detected, date/time is not reliable.
ちなみに使ったRTCはこちら
リアルタイムクロック(RTC)モジュール: 半導体 秋月電子通商 電子部品 ネット通販
エラーの意味としては『電圧低下が検知されたよ。だから今の時刻データは信頼できないよ。』って感じの警告だ。
調査
アプリケーションノートを読んでみると、RTCへの電源供給の電圧が一定以下になった場合、VLflag(Voltage Low Flag)が立つらしい。
対応
ちなみにこのVLフラグは秒数を管理しているメモリ区域で管理されている
なので上記のエラー文を出したくなければ、VLフラグを0クリアしてやればエラーは出なくなる。