import glob
import time
import subprocess
import sqlite3
import threading
base_dir = '/sys/bus/w1/devices/'
device_folder = glob.glob(base_dir + '28*')[0]
device_file = device_folder + '/w1_slave'
db_file = '/home/pi/MTS/temperature.sqlite3'
def read_temp_raw():
catdata = subprocess.Popen(['cat',device_file], stdout = subprocess.PIPE, stderr = subprocess.PIPE)
out, err = catdata.communicate()
out_decode = out.decode('utf-8')
lines = out_decode.split('\n')
return lines
def read_temp():
lines = read_temp_raw()
if lines[0].strip()[-3:] != 'YES':
return False
equals_pos = lines[1].find('t=')
temp_string = lines[1][equals_pos + 2:]
temp_c = float(temp_string) / 1000.0
return temp_c
def save_temp():
try:
connection = sqlite3.connect(db_file)
cursor = connection.cursor()
temp = read_temp()
if temp:
cursor.execute("INSERT INTO DATE_TEMPERATURE VALUES (strftime('%Y/%m/%d', date('now', 'localtime')), strftime('%H:%M:%S',time('now', 'localtime')), ?);", (temp,))
connection.commit()
except:
connection.rollback()
finally:
connection.close()
while True:
th = threading.Thread(target=save_temp)
th.start()
time.sleep(3)
<?php
$dataNum = 180;
$check = false;
while ($check == false) {
try {
$db = new SQLite3("/home/pi/MTS/temperature.sqlite3", SQLITE3_OPEN_READONLY);
$date = date("Y/m/d");
$sql = "select * from DATE_TEMPERATURE where DATE = '" . $date . "' order by TIME desc limit " . $dataNum . ";";
$res = $db->query($sql);
$i = 0;
while ($t = $res->fetchArray(SQLITE3_NUM)) {
$b[$i] = $t;
$i += 1;
}
for ($k = 0; $k < $dataNum - $i; $k++) {
$a[$k][0] = $a[$k][1] = "";
$a[$k][2] = "null";
}
for ($k = 0; $k < $i; $k++) {
$a[$dataNum - $i + $k] = $b[$i - $k - 1];
}
$check = true;
} catch (Exception $e) {
$i = 0;
$check = false;
usleep(10000);
} finally {
$db->close();
$db = null;
}
}
$str = "[";
for ($k = 0; $k < $dataNum; $k++) {
$str .= "'" . $a[$k][1] . "'," . $a[$k][2] . ",";
}
$str .= "]";
echo $str;
?>
<script>
var today = new Date();
var date = '' + today.getFullYear() + ('00' + (today.getMonth() + 1)).substr(-2) + ('00' + today.getDate()).substr(-2);
var xhr
var xhr2;
var times = new Array();
var temps = new Array();
var ctx;
var chart;
var color;
onload = function(){
ctx = document.getElementById('temp').getContext('2d');
updateGraph();
setInterval(updateGraph, 1000);
}
function updateGraph(){
xhr = new XMLHttpRequest();
xhr.onreadystatechange = myupdate;
xhr.open("GET", "jsonTemps.php?date=" + date);
xhr.send(null);
}
function myupdate(){
if (xhr.readyState == 4 && xhr.status == 200) {
list = eval('(' + xhr.responseText + ')');
for (var i = 0; i < list.length / 2; i++) {
times[i] = list[2 * i];
temps[i] = list[2 * i + 1];
}
drawChart();
}
}
function startMt(){
xhr2 = new XMLHttpRequest();
xhr2.open("GET", "startMt.php");
xhr2.send(null);
}
function stopMt(){
xhr2 = new XMLHttpRequest();
xhr2.open("GET", "stopMt.php");
xhr2.send(null);
}
</script>
<script>
function drawChart() {
if (typeof chart != 'undefined') chart.destroy();
color = "rgb(100, 200, 200)";
chart = new Chart(ctx, {
type: "line",
data: {
labels: times,
datasets: [{
label: "温度",
lineTension: 0,
fill: false,
backgroundColor: color,
borderColor: color,
data: temps,
}]
},
options: {
responsive: false,
animation: false,
scales: {
xAxes: [{
scaleLabel: {
display: true,
labelString: date
}
}],
yAxes: [{
scaleLabel: {
display: true,
labelString: "温度(℃)"
},
ticks: {
min: -20,
max: 120
}
}]
}
}
});
}
</script>
ラズパイで設備稼働情報を「見える化」するための5ステップ
なぜIoTなのか、トヨタ生産方式の課題から考える
生産情報管理のIoT活用はどのように実践すべきか
日本製造業の品質保証が抱える問題、解決の方向性を示すCopyright © ITmedia, Inc. All Rights Reserved.
製造マネジメントの記事ランキング
コーナーリンク
よく読まれている編集記者コラム