動機
元々は、文ちゃん(文鳥)の住んでるケージ周辺の日中の環境(温度・湿度)をモニターしたかったのが始まり。
その為、ラズパイでLチカから勉強し始めたんだけど、色々自理由をつけていつの間にかフェードアウト。。。
しばらくして、ラズパイとUSBカメラが接続できて、写真をキャプチャ出きる事を知り、
何かできそうなのでやってみようと方向転換。
よって今回の最終目標を、
写真で文ちゃんの日中の挙動をカメラで定期的に撮影し、Twitterに投稿する。そして仕事場から見て楽しむ
とした。
目次
- 使った機材
- 環境構築(ラズパイ&開発環境)
- アプリ開発
- コードの置き場所とbotの紹介
※記事を書いていて長くなってきたので、今回は2.環境構築までに留める。
使用機材
ラズパイ側の環境構築
ログなどを取り忘れていたので、主に参考にしたサイトのリンクのみ・・・
ラズパイのバージョン
raspberrypi% uname -a
Linux raspberrypi 4.9.50-v7+ #1035 SMP Wed Sep 13 23:16:24 BST 2017 armv7l GNU/Linux
外から接続することを考えて公開鍵認証のみのログインに変更
crontabがエラーを吐いて実行されていなかったので、postfixをインストールし解決
時刻同期を修正
-
crontabの実行時間にズレがあったので、ntp.confのサーバの設定を近くのサーバに修正&サービスを再起動し確認。
ntp.conf# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will # pick a different set every time it starts up. Please consider joining the # pool: <http://www.pool.ntp.org/join.html> server ntp1.eonet.ne.jp server ntp2.eonet.ne.jp
-
動作確認
raspberrypi% ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *ntp1.eonet.ne.j 133.243.238.164 2 u 887 1024 377 10.998 -0.098 0.973 +ntp2.eonet.ne.j 133.243.238.244 2 u 211 1024 377 11.798 0.015 50.588
fswebcamをインストール
USBカメラでキャプチャを行うためのアプリをインストール&キャプチャできる事を確認。
-
インストール
raspberrypi% sudo apt-get install fswebcam
-
USBカメラが接続されているか確認。 Device 004で認識されている。
raspberrypi% lsusb Bus 001 Device 004: ID 056e:7016 Elecom Co., Ltd 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
-
キャプチャできる事を確認。
raspberrypi% fswebcam hoge.jpg --- Opening /dev/video0... Trying source module v4l2... /dev/video0 opened. No input was specified, using the first. Adjusting resolution from 384x288 to 352x288. --- Capturing frame... Captured frame in 0.00 seconds. --- Processing captured image... Writing JPEG image to 'hoge.jpg'.
auth.logをみると案の定アタックを受けているので、fail2banを導入 (2017.10.13追記)
-
インストール
raspberrypi% sudo apt-get install fail2ban raspberrypi% cd fail2ban raspberrypi% pwd /etc/fail2ban
-
jail.confをjail.localをコピーし設定
raspberrypi% sudo cp jail.conf jail.local
-
DEFAULTのbantimeを10分(600秒) -> 一日(86400秒)に変更
raspberrypi% diff jail.conf jail.local 30c30 < bantime = 600 --- > bantime = 86400
-
再起動
raspberrypi% sudo systemctl restart fail2ban
-
起動確認
aspberrypi% systemctl status fail2ban ● fail2ban.service - LSB: Start/stop fail2ban Loaded: loaded (/etc/init.d/fail2ban) Active: active (running) since 金 2017-10-13 21:38:56 JST; 13min ago Process: 11001 ExecStop=/etc/init.d/fail2ban stop (code=exited, status=0/SUCCESS) Process: 11017 ExecStart=/etc/init.d/fail2ban start (code=exited, status=0/SUCCESS) CGroup: /system.slice/fail2ban.service └─11029 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid
システム関連の設定はここまで。開発言語はライブラリの豊富さと触ってみたいという興味からpython3を選択。
そして、環境構築も知りたかったので下記の内容で構築。
- 使用言語 : python ver.3.6.1
- バージョン管理 : pyenv
- ライブラリ管理 : virtualenv
pyenvのインストール
-
pythonのバージョンを動的に切り替えるようにpyenvを導入
Raspberry PiでのPython 3.5環境構築 -
インストール後にコマンドが実行できるか確認。
raspberrypi% pyenv --version pyenv 1.0.10-22-g3292200
-
pythonインストール完了後に、ver.3.6.1をGlobalに設定
raspberrypi% pyenv install 3.6.1 pyenv: /home/pi/.pyenv/versions/3.6.1 already exists continue with installation? (y/N) y Downloading Python-3.6.1.tar.xz... -> https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz Installing Python-3.6.1... Installed Python-3.6.1 to /home/pi/.pyenv/versions/3.6.1 raspberrypi% pyenv global 3.6.1 raspberrypi% pyenv versions system 2.7.9 3.5.1 * 3.6.1 (set by /home/pi/.pyenv/version)
virtualenvをpipでインストール
```
raspberrypi% pip install virtualenv
Collecting virtualenv
Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
100% |████████████████████████████████| 1.8MB 143kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
raspberrypi% pip list
---- 省略 ----
virtualenv (15.1.0)
```