大阪近郊で活動するフリーランスエンジニアのブログです 技術情報とか趣味など

*

Raspberry Pi2で室温、水温を計測してグラフ表示する

   

Raspberry Pi2に水温計と温度計を取り付け、10分ごとに室温と水温を計測してさくらVPSへ送信
送ったデータを記録してグラフ表示して可視化する

温度計を取り付ける

ものづくりエクスペリメントさんを参考に防水温度センサと温度センサ DS18B20を2つ取り付ける
防水温度センサはAitendoで買うと2線のものになってたので2線の場合はIT工房Zさん参照してください
私はよく解らなかったのでビクトリーセブンで3線タイプのものを買い直しました

配線はググって出てきた配線図の通りに
ds1820connect

配線が終わったらコンソールからデバイスを確認

ls /sys/bus/w1/devices
28-01146537b1ff  28-0414681d12ff  w1_bus_master1

28-01146537b1ff 28-0414681d12ff IDは各自で異なります
どちらが水温計でどちらが室温計なのか線を抜き差しして特定しておきます

温度計測

ターミナルからコマンドで確認 t=の所を1000で割ると温度になります

cat /sys/bus/w1/devices/28-01146537b1ff/w1_slave
bd 01 55 00 7f ff 0c 10 da : crc=da YES
bd 01 55 00 7f ff 0c 10 da t=27812

cat /sys/bus/w1/devices/28-0414681d12ff/w1_slave 
75 01 55 00 7f ff 0c 10 2b : crc=2b YES
75 01 55 00 7f ff 0c 10 2b t=23312

シェルスクリプト化

sudo vi /usr/local/bin/room_temp 

#!/bin/sh
DEVID="28-0414681d12ff"

cat /sys/bus/w1/devices/$DEVID/w1_slave \
     | perl -e 'while(<stdin>){ if(/t=([0-9]+)/){print $1/1000,"\n";} }'

コピって水温用にDEVIDだけ書き換えたものも用意しておきます

権限を与えて実行

sudo chmod +x /usr/local/bin/room_temp
room_temp
23.25

サーバーへ送信する

取得したデータをさくらVPSへPOST
参考サイトから丸コピしてデータ部分を追記

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'uri'
require 'net/http'

def http_request(method, uri, query_hash={})
    query = query_hash.map{|k, v| "#{k}=#{v}"}.join('&')        #ハッシュをオプションの書式に変換
    query_escaped = URI.escape(query)

    uri_parsed = URI.parse(uri)
    http = Net::HTTP.new(uri_parsed.host)

    case method.downcase!
    when 'get'
        return http.get(uri_parsed.path + '?' + query_escaped).body
    when 'post'
        return http.post(uri_parsed.path, query_escaped).body
    end
end

#cpu
cpu_temp = `cat /sys/class/thermal/thermal_zone0/temp`
cpu_usage = `mpstat | sed -n '4,4p' | awk '{ print $3 }' | tr -d '\n'`

#mem
usedmem = `free -m | sed -n '3,3p' | awk '{ print $3 }' | tr -d '\n'`
totalmem = `free -m | sed -n '2,2p' | awk '{ print $2 }' | tr -d '\n'`
mem_usage = totalmem.to_f.quo(usedmem.to_f)

#room
room_temp = `/usr/local/bin/room_temp`

#water
water_temp = `/usr/local/bin/water_temp`


http_request('POST', 'ポスト先URL', {:cpu_temp => cpu_temp.to_f.quo(1000), :cpu_usage => cpu_usage, :room_temp => room_temp,:water_temp => water_temp, :mem_usage => mem_usage})

オマケでCPU温度CPU使用率メモリ使用率も取得するよう設定してみました

cronに仕込んで10分おきに送信する

crontab -e
*/10 * * * * /usr/local/bin/send-temp > /dev/null 2>&1

POSTされたデータをDBに登録する

これはもう普通のWebアプリと一緒
さくらVPS側でphpを使って実装 やる気の感じられないPHPコードがこちら

<?php
require_once('./db_conf.php');
$pdo = getPDO();
$stmt = $pdo->prepare("INSERT INTO STAT (cpu_temp,room_temp,water_temp,cpu_usage,mem_usage,assay) VALUES (:cpu_temp,:room_temp,:water_temp, :cpu_usage, :mem_usage, NOW())");

foreach($_POST as $key => $value) {
        $stmt->bindValue(':'.$key, $value);
}

$stmt->execute();
$pdo = null;
?>

ラスパイから温度送信rubyファイルを叩いたりした後、さくらVPS上でデータを確認

select * from STAT order by id desc;
+------+----------+-----------+------------+-----------+-----------+---------------------+
| id   | cpu_temp | room_temp | water_temp | cpu_usage | mem_usage | assay               |
+------+----------+-----------+------------+-----------+-----------+---------------------+
| 1165 |    30.40 |     23.19 |      27.81 |      9.32 |     17.49 | 2015-04-19 19:40:03 |
| 1164 |    30.40 |     23.19 |      27.81 |      9.32 |     17.49 | 2015-04-19 19:30:03 |
| 1163 |    30.40 |     23.25 |      27.81 |      9.32 |     16.85 | 2015-04-19 19:20:04 |
| 1162 |    30.40 |     23.31 |      27.81 |      9.32 |     17.83 | 2015-04-19 19:10:03 |
| 1161 |    30.94 |     23.38 |      27.81 |      9.32 |     17.17 | 2015-04-19 19:00:05 |
| 1160 |    30.40 |     23.38 |      27.81 |      9.32 |     17.17 | 2015-04-19 18:50:03 |
| 1159 |    30.40 |     23.44 |      27.81 |      9.32 |     17.49 | 2015-04-19 18:40:04 |
| 1158 |    30.40 |     23.25 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:30:03 |
| 1157 |    29.86 |     23.25 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:20:04 |
| 1156 |    30.94 |     23.31 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:10:03 |

あとはグラフ化ですが長くなってきたので次回
完成品は金魚水槽ページで確認できますのでどうぞ

 - php, Raspberry Pi, ruby, 金魚 , , ,

  • このエントリーをはてなブックマークに追加
  • にほんブログ村 観賞魚ブログ 金魚へ

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

穂竜はじめました

先日新しく45cm水槽を立ち上げてまして穂竜という金魚を飼いはじめました。 高頭 …

RaspberryPi2で動画配信しながら写真も撮りたい

金魚デカくなった? 金魚にエサやってると4月の初頭から飼い始めた琉金が1周り大き …

プラ船の金魚がネコに襲撃された

ガレージに出してるプラ船がネコにやられました・・・ これはひどい どうもカメラを …

Raspberry Pi2で水槽のLEDを自動点灯/消灯する

先日Raspberry Pi2を購入し、自宅からのストリーミング配信する為あれこ …

45cm水槽を修理してみた

大昔に使ってた45cm水槽が出てきたので洗って使おうと思ったんですが水漏れしてま …

エサやりボタン復活しました

遠隔エサやりボタン 春になってきたので冬の間ストップしていたエサやりボタンを復活 …

福だるま 購入しました

新入り金魚 メイン水槽をリセットしたのでヤフオクで金魚を購入しました 福だるまと …

福だるま購入しました

福だるま?玉サバ? ちょっと前、寝室に60cm水槽に立ち上げた水槽へ福だるまを4 …

Raspberry Pi2で室温、水温を計測してグラフ表示する その2

前回でRaspberry PiからさくらVPSへ計測したデータを飛ばして登録でき …

RaspberryPi2を使ったリモートのエサやりボタン復活しました

春がきた 春になり水温が上がってきたのでプラ舟ページのエサやりボタンを復活させま …