Server Room Environment Monitor

From MCS Wiki
Jump to: navigation, search

Our server room needed an environment monitoring system. So we built a simple, expandable, cost effective solution.

Contents

Specs

  • Based on Arduino Uno
  • 4 Temperature sensors(DS18B20), 1 Humidity sensor(HIH-4030)
  • Add additional sensors without having to reprogram the Arduino. Just connect them to the bus.
  • Sensor values can be read via a simple UDP interface.
  • Powered by PoE
  • LCD Display cycles through sensors
  • Alarm LED

TempSensorDiagram.jpg

Hardware used

This device uses an Arduino Uno with a PoE Ethernet shield. The temperature sensors are Maxim IC DS18B20 using the 1-wire protocol. Temperature sensors are powered with parasite power which requires only two wires (Signal +5V, Ground). The humidity sensor is a Honeywell HIH-4030.

Cat5 Ethernet cable serves as the bus for the 1-wire devices.

3D Printed Parts

1-wire bus installation (outlined in red)

A housing for the device was modeled in sketchup and printed on a Thing-O-Matic.

Caseandclip.jpg

A case for each temperature sensor was also created with many vents to allow airflow through the housing.

We needed an easy way to attach the wire to the ceiling, so a cable hanger was created to easily clip the cat5 cable to the frame of the drop ceiling.

UDP Interface

Reading from the sensors is easily accomplished over a UDP interface and can be done from a command line as shown here using netcat.

C:\>nc -u dev.ice.ip.addy 8888
1
<serverroommonitor>
<sensordata>
       <temperature numsensors="4">
               <sensor address="28:12:8:55:3:0:0:A8">
                       23.00
               </sensor>
               <sensor address="28:2A:2C:61:3:0:0:45">
                       18.00
               </sensor>
               <sensor address="28:55:EF:79:3:0:0:B1">
                       17.00
               </sensor>
               <sensor address="28:5F:3D:B7:3:0:0:8F">
                       18.50
               </sensor>
       </temperature>
       <humidity>
               55
       </humidity>
</sensordata>
<device>
       <alarm>
               0
       </alarm>
       <message>

       </message>
</device>
</serverroommonitor>

It also provides the ability to flash the alarm LED and display a custom message on the LCD.

Entering a blank line or invalid input will print a list of commands

*********************List of Commands*********************
* 1 Get full status report - Returns Formatted output
* 2<index> get temp by sensor index - Returns temp in C
* 3 Get Humidity - Returns Humidity
* 4 Trigger LED Flash
* 5 Clear LED Flash
* 6 "messsage" Display Message on LCD
* 7 Clear LCD Message
**********************************************************

In addition to making the interface easy to use for human users, it's easy to use in a scripted environment. As an example, a simple PHP script was written to forward the XML output from the sensor to a web browser, then using jQuery and Highcharts JS a live graph of temperature data can be captured.

TempGraph.jpg

Future Expansion

Currently, the sensor is only used to monitor the status of the room until it can be determined that the system is reliable. We intend to implement email/SMS alerts and possibly a scripted response to high temperature alarms. This monitoring system will reside on another server rather than being on the arduino itself as the sensor was designed to be as "dumb" as possible, only reporting the status of the room.

Sensors monitoring the airflow from the A/C units and a door switch would be nice additions to the system.

Arduino Sketch

File:TempSensor.ino

Personal tools