電脳郷News

2016.12.13
年末年始休業のご案内
弊社では、誠に勝手ながら、下記の期間を年末年始休暇とさせて戴きます。
2017年12月29日(金)~2018年1月4日(木)
お取引先の皆様には何かとご不便をおかけするかと存じますが、 何卒ご理解のほどよろしくお願い申し上げます。
2017.09.12
弊社クライアント「クイーンズ ジャパン株式会社 様」が「スマコミ」(飲食店・宿泊施設向けposレジ付きセルフオーダーシステム) の提供を開始しました。
2017.07.20
夏季休暇のお知らせ
弊社では、誠に勝手ながら、下記の期間を夏季休暇とさせていただきます。
2017年8月11日(金)~2016年8月16日(水)
大変ご迷惑をおかけしますが、何卒よろしくお願い申し上げます。
2016.12.1
年末年始休業のご案内
弊社では、誠に勝手ながら、下記の期間を年末年始休暇とさせて戴きます。
2016年12月29日(木)~2017年1月4日(水)
お取引先の皆様には何かとご不便をおかけするかと存じますが、 何卒ご理解のほどよろしくお願い申し上げます。
2016.8.3
夏季休暇のお知らせ
弊社では、誠に勝手ながら、下記の期間を夏季休暇とさせていただきます。
2016年8月11日(木)~2016年8月16日(火)
大変ご迷惑をおかけしますが、何卒よろしくお願い申し上げます。
2015.07.22
スマホも対応!格安WEB制作プランを始めました。
2015.05.25
「データ入力サービス」提供開始のお知らせ
2015.05.21
有期雇用型Javaプログラマコース開講のお知らせ
給与を受け取りながら受講できます。2015年9月28日から開講です。
詳しくは 若者就業支援プロジェクト をご覧ください。
2014.12.18
年末年始休業のお知らせ
弊社では下記の期間を休業とさせていただきます。
2014年12月27日(土)~2015年1月5日(日)
何卒よろしくお願い申し上げます。
2014.10.10
Webアプリ・スマホアプリ開発塾が開講されます。 2014年11月17日開講です。

電脳郷ブログ

Raspberry Piで水温計を作る(2)(2017/05/15)



前回でRaspberry Pi2に接続した水温計から温度を拾えるようになりました。
このデータをネット経由で確認することがゴールですが、ひとまずお手軽にdatadogでグラフを描画したいと思います。
datadogは本来はサーバ監視向けのサービスですが、任意の値を送ればそれもグラフ化してくれる上に、Web APIからも取得可能と、公開を考えなければグラフツールとしてもかなり使い勝手がよいです。

エージェントを導入するだけでこれだけのグラフが見られる。


datadog-agentの導入


datadogにデータを送信するため、datadog-agentをRaspberry Piにインストールします。
https://app.datadoghq.com/account/settings#agent/source

~/.datadog-agent/ に一式がインストールされますが、上記ページの説明によれば適当に移動できるとのこと。

エージェントの起動

cd ~/.datadog-agent
bin/agent start

この時点でCPUやメモリの使用率など、基本的なメトリクスはdatadogに送信されるようになりますが、流石に温度計のデータは拾ってくれません。
datadog公式のサンプルと、前回の温度を拾うスクリプトを組み合わせて、スクリプトをでっち上げます。

(thermo.py)
import os
import glob
import time
from datadog import initialize
from datadog import statsd

os.system('modprobe w1-gpio');
os.system('modprobe w1-therm');

base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'

# datadog client
options = {
'api_key':'API_KEY',
'app_key':'APP_KEY'
}
initialize(**options)

def read_temp_raw():
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines

def read_temp():
lines = read_temp_raw()
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw()
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
temp_c = float(temp_string) / 1000.0
return temp_c

while True:
temperature = read_temp()
statsd.gauge('temperature', temperature)
print(temperature)
time.sleep(1)

このスクリプトを走らせることで、おおよそ1.2秒ごとに"temperature"という名前でdatadogに水温計から拾った値が送信されるようになります。

python thermo.py &

実際の表示


好きなdashboardにグラフを追加し、このようにグラフを設定します。
ホストとプロットしたい値を選択する。
至極いいかげんな説明ですが、直感的に操作できますので、迷うところはないと思います。
実に簡単にグラフができてしまいました。スマートフォンからdatadogを開けば、もう当初の目標、「遠隔地から水槽の水温を確認する」が達成できてしまいます。



datadog agentの自動起動設定

datadogをコマンド手打ちで起動するのは普段使いには辛いため、datadog agentをdaemon化しよう…と思い、~/.datadog-agent/bin/agentの中身を見たところ、もともとsupervisorで走るようになっていました。
PIDファイルの取扱なども公式の起動スクリプトがやってくれるので、initは非常に単純になります。

(/etc/init.d/datadog-agent)
#! /bin/sh

### BEGIN INIT INFO
# Provides: datadog-agent
# Short-Description: Start and start datadog-agent
# Description: datadog-agent is the monitoring Agent component for Datadog
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO

DD_BASE="/home/hoge/.datadog-agent/"

case $1 in
start)
cd $DD_BASE
bin/agent start
;;

stop)
cd $DD_BASE
bin/agent stop
exit 0
;;

restart)
cd $DD_BASE
bin/agent stop
bin/agent start
exit 0
;;

esac
exit 0

起動時にこのスクリプトを走らせるように設定し、Raspberry Pi側の作業は一旦完了です。

sudo update-rc.d datadog-agent defaults


ついでに水温を収集するスクリプトもsupervisorを使ってdaemon化しておきました。

[program:thermometer]
command=python /home/hoge/thermo.py
redirect_stderr=true
priority=1000

これで電源を投入すれば温度が取れる、というところまではこぎ着けました。

電脳郷のオフショア開発

ベトナムの複数のパートナーIT企業と連携し、高品質で低価格なシステム開発が可能です。 パートナー企業には、技術系エリート大学の卒業生や日本への留学や日本のIT企業での 勤務経験があるエリート人材が在籍していますので幅広いOS,言語、開発ツールでの開発 を行うことが可能です。

日本人ブリッジSEと日本語でのコミュニケーションが可能なベトナム人ブリッジSEが 開発に携わりますので設計書の作成やコミュニケーションは日本語で行えます。 また品質については、日本人ブリッジSEが厳しくチェックいたしますので安心してお任せください。

詳細を確認する