RaspberryPiのkiosk端末化

Zabbixのダッシュボード機能を表示専用端末に表示させ、運用オペレーションセンターを作成するというもの。

Raspberry Pi3でキオスク端末(自動ログイン+ブラウザ起動)を作る。を参考にする。
なお、@chromium-browserでZabbixのダッシュボード機能をKiosk表示したURLを指定する。

Zabbix 4.0.1よりダッシュボード機能をKiosk表示する方法は簡単で、kiosk=1パラメータを追加すればよい。

Zabbix Documentation 4.0より
Since Zabbix 4.0.1, the kiosk mode can also be accessed with the following URL parameters:
/zabbix.php?action=dashboard.view&kiosk=1. To exit to normal mode: /zabbix.php?action=dashboard.view&fullscreen=0

ところで、キオスク端末というのは世界共通用語なのだろうか?
WikipediaによるとKioskというのは簡易構造物一般を指す英語「KIOSK」からきているそうな。。。

PiServerを利用してRaspberry Pi3をシンクライアントにする

Raspberry Pi3をシンクライアントにすることができる。
これによって、どのRaspberry Piを使っても同じデスクトップ環境が利用できるようになり、会社だけでなく学校などの利用端末としても利用が期待できる。

VMWare ESXi 6.5上で構築した仮想マシンにPiServerを構築してシンクライアントを実現した。

しかし、ドキュメントが少なすぎる。
参考にしたサイトは次の通り。
[メモ] PiServerを使ってみた(VitrualBox使用)
ラズパイをmicroSD無しでネットブート、シンクライアント構築の「PiServer」

PiSeverを利用することでテレビ会議やYouTubeを見たりするなどの重たい処理をさせたときにRasberryPiがハングアップする事象はなくなるが、Ubuntuを入れたりするための方法については、公式サイトでも書かれていない。。。。

他にも困っていることが・・・・
・エラー表示され、日本語化ができない(chrootされているため?)

2017年7月18日より「Raspberry Pi Zero W」の販売を開始

2017年7月18日より「Raspberry Pi Zero W」の販売を開始

株式会社 ケイエスワイから3月に発売された以降、しばらく次の入荷がないと思っていたら技適を取得できていなかったらしい。(実は3月時点では販売できていなかった?)
発売開始されたことに気づいたのが1週間後でもう完売。。。。いつになったら手にできるのやら。

DHT11の温度センサー上限を超えてしまった。。。

日中の晴れた日は、どうやら温度が60℃を超えてしまうようだ。
らずぱい温度計20170504.png
DHT22であれば、80度まで計測できるうえ、分解能が0.1なのでより精度の高いセンサー情報を収集できる。
DHT11と同じく3ピンなので、置き換えだけでうまくいきそうな予感。。。。
送料の方が高くつきそうなので、お店に行って買ってくるとしよう。

Rasberry Pi 2で定期的に温湿度センサーの情報を送信する

/etc/crontabと/etc/cron.d設定ファイルの書き方を参考にプログラムの実行をスケジュール化する。
/etc/cron.d/send_temp
と登録し、下記を保存する。
#8~17時を除いた6~23時に毎時0時に送信する
0 6-7,18-23 * * * pi /home/pi/iot_source/send_temp.py 12> /home/pi/debug.txt
#土日は8~17時も毎時0時に送信する
0 8-17 * * 0,6 pi /home/pi/iot_source/send_temp.py 12> /home/pi/debug.txt
#5分ごとにセンサデータを収集する
*/5 * * * * pi /home/pi/iot_source/get_temp.py 12> /dev/null

Rasberry Pi 2で温湿度センサーの情報をZabbixサーバに送信する

Rasberry Pi 2で収集した情報をZabbixサーバに送信するためには大きくは2つの方法がある。
・Zabbixエージェントをインストールしてデータを送信(サーバから見ると収集)する方法(パッシブチェックとアクティブチェックというデータの収集のトリガーが異なる2つの方式がある。詳しくはこちら
・zabbix_senderコマンドを利用してデータをサーバに送信する方法
前者の方式は、エージェントを利用するので、サービスを常に起動しておかなければならないということと、ポートを待ち受けしないといけないことから、IoTディバイスとして節電して長く使いたい要求と、セキュリティを担保したい(エージェントの脆弱性によって問題が起こり得るか、DoS攻撃の対象になりうる)ことから後者を採用することにした。
ただ、zabbix_senderはRasberry Pi2を動かしているRaspianOSではちょっと導入が面倒。
Zabbix Server側の設定はこちらを参考にしてみるとよい。
これから始めるZabbix Sender(2) Raspberry Pi の温度データを送るには?
作成したソースはこんな感じ
配列に一度格納してまとめて1回のコマンドで実行することで通信回数を減らしてみた。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import dht11
import time
import subprocess
from datetime import datetime
now=time.time()
Zabbix_Server="(ZabbixサーバのIPアドレス)"
Host_Name="(Zabbixサーバに登録したホスト名)"
#Zabbixサーバに下記アイテムを2つ登録している必要がある
Temp_KeyName="sender_temperature"
Humi_KeyName="sender_humidity"
#define GPIO 14 as DHT11 data pin
Temp_sensor=14
try:
GPIO.setmode(GPIO.BCM)
instance = dht11.DHT11(pin = Temp_sensor)
while not 'result' in locals() or result.humidity==0:
result = instance.read()
if result.is_valid():
print("Tem:"+str(result.temperature)+" C Hum:"+str(result.humidity)+"%")
send_data = []
send_data.append(Host_Name + " " + Temp_KeyName + " " + str(int(now)) + " " + str(result.temperature))
send_data.append(Host_Name + " " + Humi_KeyName + " " + str(int(now)) + " " + str(result.humidity))
check = subprocess.check_call('echo "' + "\n".join(send_data) + '" |
zabbix_sender -z ' + Zabbix_Server + " -T -i -", shell=True)
except KeyboardInterrupt:
pass
finally:
print check

Rasberry Pi 2で温湿度センサーの情報を収集する

Raspberry Pi2に、
まずは温湿度センサー(DHT11センサー)を取り付ける。
DHT11センサーの結線方法は、こちらを参考にするとよい。
LEDが点灯したらとりあえず、5VとGNDピンが正常に結線されていることが分かるので、DATAピンが正しく結線されていることを確認する。
こちら↓
蓋なし.jpg
を参考にしても良いと思います。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import dht11
#define GPIO 14 as DHT11 data pin
Temp_sensor=14
try:
GPIO.setmode(GPIO.BCM)
instance = dht11.DHT11(pin = Temp_sensor)
while not 'result' in locals() or result.humidity==0:
result = instance.read()
if result.is_valid():
print("Tem:"+str(result.temperature)+" C Hum:"+str(result.humidity)+"%")
else:
print("error")
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()

これをget_temp.py として、

python get_temp.py

と実行して、

Tem:20 C Hum:40%

などと表示されれば温湿度が取得できていることが分かる。

(2018/11/06追記)
液晶ディスプレイへの表示を行う場合には、Raspberry Piボードを使って、 LCDで温湿度データを表示するを参考にして、I2Cを有効にする必要がある。RasberryPi 3ではAdvance OptionsというメニューからInterfaceのメニューに変更になっているので、注意してほしい。

Rasberry Pi 2で温湿度センサーの情報をZabbixで収集する

こんなケースに入れて、
蓋なし.jpg
穴をあけた蓋を付けて、
蓋つき.jpg
温室に取り付けると
取り付け.jpg
こんな感じで温室の温湿度が取得できる。
らずぱい温湿度センサー.png
これをやる為の方法を今後掲載していくことにする。
実現するために必要な材料
Raspberry Pi2
・無線LANアダプタ(余っていた WLI-UC-G を使用)
・温湿度センサー(DHT11センサー を使用。誤差が大きいので、気休め程度。気になる場合にはもう少し精度のよいものがよいかも?)
・リチウムイオンバッテリー(Anker PowerCore 10000)
・電子レンジであっためられるタッパー
・Zabbixサーバ(Cloudnで実現)
実現した結果として
・Raspberry Pi2はバッテリーからでも起動できる
・意外に電源を食うので、省電力対策は欠かせない
 →無線LAN通信を極力減らす必要がある。
今後したいこと
・電源のシャットダウン方法を確立する か バックアップをとる。
・Raspberry Pi2ではなく、Raspberry Pi Zero Wでやりたい。(さらに省電力にしたい)

OSOYOO Raspberry Pi Starter Kitを使い倒してIoTしたつもりになる その1

今日は、OSOYOO Raspberry Pi Starter Kitに入っている人体感知センサーモジュール(HC-SR501)の話。
チュートリアルはこちらなのだが、うまく動かない。
gcc -Wall -o blink blink.c -l wiringPi./blink
で/usr/bin/ld: -lwiringPi./blink が見つかりません と出て実行できない。
また、ドキュメント内もURLが変更になっていて、
wget http://osoyoo.com/blink.c → wget http://osoyoo.com/driver/blink.c が正しいようだ。
そこで、下記の説明を参考にpythonスクリプトで動作させることができた。
http://qiita.com/Fendo181/items/469469d143d3568fc692
LEDをGPIO21 ポートに接続。
テーマは人体感知センサーでLチカに変更。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import time
import RPi.GPIO as GPIO
INTAVAL = 3
SLEEPTIME = 3
SENSOR_PIN = 18
LED_PIN = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN)
GPIO.setup(LED_PIN,GPIO.OUT)
st = time.time()-INTAVAL
try:
while True:
print GPIO.input(SENSOR_PIN)
if(GPIO.input(SENSOR_PIN) == GPIO.HIGH) and (st + INTAVAL < time.time()): st = time.time() print("人を感知しました") GPIO.output(LED_PIN,True) else: GPIO.output(LED_PIN,False) time.sleep(SLEEPTIME) except KeyboardInterrupt: pass finally: GPIO.cleanup()

RasberryPi をリモートデスクトップでGUI操作する

Rasbian OSが入ったRasberryPiをリモート制御するには、Teraterm等を利用したSSH接続のほか、
xrdpというパッケージをインストールすることでリモートデスクトップによるRDP接続が可能となる。
$sudo apt-get install xrdp vnc4server
とするだけだ。
xrdpだけでは、接続はできるが、
connecting to 127.0.0.1 5910
error – problem connecting
と怒られて接続ができない。