基于 openWRT、DS18B02、digitemp、rrdtool的开源多点温度监控系统
来源:互联网 发布:阿里巴巴软件 编辑:程序博客网 时间:2024/04/29 13:17
基于 openWRT、DS18B02、digitemp、rrdtool的开源多点温度监控系统
一、设备型号
主设备型号为贝尔RG-100A-AA刷为OpenWRT系统
温度芯片为DS18b20防水温度感应芯片,后端做成了音频线接口,便于下面的转接
转换接头为,音频转USB接口
硬件连接完之后如下
二、安装系统
1.设置OpenWRT
a) 设置源
由于设备的自带内存不足,会导致安装相关工具失败,需要更改opkg的使用位置
/dev/sda1设备是接上的U盘,虽然可写,但是不能将软件安装到上面
更改/etc/opkg.conf文件如下
b) 获取digitemp程序
c) 安装rrdtool
d) 安装USB驱动相关
opkg install kmod-usb-core kmod-usb-ohci kmod-usb-serial
opkg install libusb kmod-usb-acm chat comgt usb-modeswitch
opkg install kmod-usb-serial-ch341 usbutils cgilib rrdcgi
e) 查看端口,因为我们使用的是USB模拟串口设备,所以应当是ttyUSB0设备号 f) 从端口读取数据
2.Rrdtool操作
创建数据库(此处的脚本与下面的不对应,此处创建的数据库列为4个,下面为9个,请读者自行阅读修改)
rrdtool create home.rrd --step 60 DS:temp0:GAUGE:120:-10:100 DS:temp1:GAUGE:120:-10:100 DS:temp2:GAUGE:120:-10:100 RRA:AVERAGE:0.5:1:3000 RRA:AVERAGE:0.5:4:3500 RRA:AVERAGE:0.5:24:3900 RRA:AVERAGE:0.5:288:4000 RRA:MAX:0.5:1:3000 RRA:MAX:0.5:4:3500 RRA:MAX:0.5:24:3900 RRA:MAX:0.5:288:4000 RRA:MIN:0.5:1:3000 RRA:MIN:0.5:4:3500 RRA:MIN:0.5:24:3900 RRA:MIN:0.5:288:4000
3.读取,转换,更新数据库
上面从端口获取芯片数据的时候,显示有一个.digitemprc的文件,将该文件复制为配置文件
root@OpenWrt:~# cp .digitemprc /etc/digi.cfg
4.获取数据并存入数据库
脚本如下
cat /root/digi.sh
#!/bin/sh
# The rutinue
output1=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t0 -q -o"%4.1C"`
output2=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t1 -q -o"%4.1C"`
output3=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t2 -q -o"%4.1C"`
output4=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t3 -q -o"%4.1C"`
output5=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t4 -q -o"%4.1C"`
output6=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t5 -q -o"%4.1C"`
output7=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t6 -q -o"%4.1C"`
output8=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t7 -q -o"%4.1C"`
output9=`/usr/sbin/digitemp -s /dev/ttyUSB0 -c /etc/digi.cfg -t8 -q -o"%4.1C"`
/usr/bin/rrdtool update /tmp/A1.rrd N:$output1:$output2:$output3:$output4:$output5:$output6:$output7:$output8:$output9
5.读取数据
root@OpenWrt:~# rrdtool fetch /tmp/home.rrd AVERAGE
6.绘制图形
使用cgi脚本,将数据填入到png图形里面
#!/usr/bin/rrdcgi
<html>
<head><title>RRDCGI</title></head>
<body>
<h1> <p> Last temperature update at: <RRD::TIME::LAST /tmp/A1.rrd "%A %e. %B %Y on %H:%M"> </p> </h1>
<P>
<RRD::GRAPH /www/A1.png --title="A1-9F Temperatures"
--start now-48h
-w 1000
-h 500
--slope-mode
--color CANVAS#000000
--color BACK#363636
--color FONT#FFFFFF
DEF:ce1=/tmp/A1.rrd:temp0:AVERAGE
DEF:ce2=/tmp/A1.rrd:temp1:AVERAGE
DEF:ce3=/tmp/A1.rrd:temp2:AVERAGE
DEF:ce4=/tmp/A1.rrd:temp3:AVERAGE
DEF:ce5=/tmp/A1.rrd:temp4:AVERAGE
DEF:ce6=/tmp/A1.rrd:temp5:AVERAGE
DEF:ce7=/tmp/A1.rrd:temp6:AVERAGE
DEF:ce8=/tmp/A1.rrd:temp7:AVERAGE
DEF:ce9=/tmp/A1.rrd:temp8:AVERAGE
LINE1:ce1#006400:"Cabinet S3528 "
GPRINT:ce1:MIN:"Min %5.2lf C"
GPRINT:ce1:MAX:"Max %5.2lf C"
GPRINT:ce1:AVERAGE:"Avg %5.2lf C"
GPRINT:ce1:LAST:"Last %5.2lf C\n"
LINE1:ce4#00fa9a:"Cabinet S8512 "
GPRINT:ce4:MIN:"Min %5.2lf C"
GPRINT:ce4:MAX:"Max %5.2lf C"
GPRINT:ce4:AVERAGE:"Avg %5.2lf C"
GPRINT:ce4:LAST:"Last %5.2lf C\n"
LINE1:ce6#6b8e23:"Cabinet Servers "
GPRINT:ce6:MIN:"Min %5.2lf C"
GPRINT:ce6:MAX:"Max %5.2lf C"
GPRINT:ce6:AVERAGE:"Avg %5.2lf C"
GPRINT:ce6:LAST:"Last %5.2lf C\n"
LINE1:ce9#6b5200:"Cabinet UNICOM "
GPRINT:ce9:MIN:"Min %5.2lf C"
GPRINT:ce9:MAX:"Max %5.2lf C"
GPRINT:ce9:AVERAGE:"Avg %5.2lf C"
GPRINT:ce9:LAST:"Last %5.2lf C\n"
LINE1:ce7#1e90ff:"Battery Left "
GPRINT:ce7:MIN:"Min %5.2lf C"
GPRINT:ce7:MAX:"Max %5.2lf C"
GPRINT:ce7:AVERAGE:"Avg %5.2lf C"
GPRINT:ce7:LAST:"Last %5.2lf C\n"
LINE1:ce2#0000ff:"Battery Right "
GPRINT:ce2:MIN:"Min %5.2lf C"
GPRINT:ce2:MAX:"Max %5.2lf C"
GPRINT:ce2:AVERAGE:"Avg %5.2lf C"
GPRINT:ce2:LAST:"Last %5.2lf C\n"
LINE1:ce5#ffff00:"Air-Condition-Left "
GPRINT:ce5:MIN:"Min %5.2lf C"
GPRINT:ce5:MAX:"Max %5.2lf C"
GPRINT:ce5:AVERAGE:"Avg %5.2lf C"
GPRINT:ce5:LAST:"Last %5.2lf C\n"
LINE1:ce8#b8860b:"Air-Condition-Right "
GPRINT:ce8:MIN:"Min %5.2lf C"
GPRINT:ce8:MAX:"Max %5.2lf C"
GPRINT:ce8:AVERAGE:"Avg %5.2lf C"
GPRINT:ce8:LAST:"Last %5.2lf C\n"
LINE1:ce3#ff0000:"OutDoor "
GPRINT:ce3:MIN:"Min %5.2lf C"
GPRINT:ce3:MAX:"Max %5.2lf C"
GPRINT:ce3:AVERAGE:"Avg %5.2lf C"
GPRINT:ce3:LAST:"Last %5.2lf C\n"
>
</P>
</body>
</html>
运行一下该文件,将会有数据填充到图形里面
/usr/bin/wget -q http://10.254.252.186/cgi-bin/3s.cgi > /dev/null 2>&1
7.设定定时机制,不然不会自动存储显示数据的
root@OpenWrt:/www/cgi-bin# crontab -l
*/1 * * * * /etc/digi/digi.sh
*/5 * * * * /usr/bin/wget -q http://10.254.252.186/cgi-bin/3s.cgi > /dev/null 2>&1
8.使用浏览器访问,一段时间之后,将绘制出连续的图形
- 基于 openWRT、DS18B02、digitemp、rrdtool的开源多点温度监控系统
- 基于ZigBee 的多点温度采集系统设计与实现
- 系统中基于MAX6636的多点温度监测
- 基于stm32的无线多点温度采集系统设计
- 基于51单片机-温度监控系统
- 基于Qt的车载GPS监控系统(5)温度设置
- 温度监控系统
- 基于互联网的温度采集系统
- 基于数据库的温度采集上传系统
- 基于ZigBee的远程温度监测系统.
- 基于NRF905的无线温度采集系统
- 基于热电偶的温度测量系统
- 基于RRDTOOL+CACTI性能监视系统的架构
- [转]基于RRDTOOL+CACTI性能监视系统的架构
- 基于RRDTOOL+CACTI性能监视系统的架构
- 基于RRDTOOL+CACTI性能监视系统的架构
- “远程温度多点温度采集卡”的笔记
- 集群下的ganglia多点系统监控原理
- 形态学操作
- [置顶] 【Visual C++】游戏开发笔记之一——API函数、DirectX的关键系统
- 中美对抗
- android-线程同步
- xcode模拟器路径
- 基于 openWRT、DS18B02、digitemp、rrdtool的开源多点温度监控系统
- Specular Highlight Removal
- 教你如何电脑被盗还能找回
- UIPickerView
- ColorStateList用法
- QT creator 如何实现多窗口之间的切换
- Android Service生命周期及用法!
- 基于jsTree的无限级树JSON数据的转换
- 花1299美元购买一款基于云端的笔记本值吗?且看Chromebook Pixel与微软Surface Pro和MacBook Air的对比