Difference between revisions of "Building monitoring"

From Earlham CS Department
Jump to navigation Jump to search
(Building Monitoring Data)
(Buildings)
 
(58 intermediate revisions by 6 users not shown)
Line 1: Line 1:
==Energy Display Scripts Outline version 1.0==
+
==General==
#Java scripts harvest data directly from Modbus
+
* [[Energy Monitoring Hardware|Equipment Details]] (keep current!)
#Perl scripts collects this data and put it in the Postgress database "energy" under the table "electrical_energy"
 
#*electrical_energy attributes:
 
#**area - what building.
 
#**preal - kW hours for that instant.
 
#**date - date of harvest.
 
#A final perl script (display/production|development/js-file-gen.pl) accesses this data and generates a .png graph using the Google graph API
 
#* This script takes one parameter for either the production or development branches.
 
#The images generated (day, week, month, year) are put in a html frame on a [http://proto.cs.earlham.edu/~energy/production/eDisplay/ page] to display the data.
 
#*This page refreshes every 5 minutes
 
  
==Energy Display Scripts Outline version 2.0==
+
==Buildings==
===Postgres db===
+
* Contact Daryl about Siemans (Tyler, Stanley, CST)
* Data stored in databse 'energy' under table 'electrical_energy'
+
* Central Switch - IB, CP, GC
* 'electrical energy' has the following attributes:
+
* EH - (good luck)
**area - which building.
+
* AWC - GC - (GC, 10-16-14, needs hooked up)
**preal - kW hours for that instant.
+
* Tyler - GC - (GC, 10-16-14, Steve Belec said that he will be receiving a walk-through from the contractors)
**date - date of harvest.
+
* Stanley - GC - (GC, 10-16-14, need direct access for configuration over powerconfig)
 +
* New Building - GC - (GC, 1-23-14, waiting for Siemens system designers to get here to hopefully explain Tyler, Stanley and the new building)
  
===data_gen.py===
+
==EGX100==
* generates a JSON file filled with data from a sql call to the database.
+
[[Energy Monitoring Hardware]]
* requires Python 2.5
 
*file run by cron
 
  
*Main(building_file)
+
==Siemens==
**Called from main loop.
+
[[Siemens Sentron Pac3200]]
**Calls CreateBuildingList(), ConnectToDatabase(), GetAllData(), EncodeData(), DisconnectFromDatabase()
 
 
*CreateBuildingList(building_file)
 
**Called by Main().
 
**For each building in building_file add to a python list.
 
**return that list.
 
 
*ConnectToDatabase()
 
**Called by Main().
 
**connects to 'energy' databse in Postgres
 
**returns database connection and the current name of database.
 
  
*GetAllData(db connection, building list)
+
==PowerLogic==
** Called by Main().
+
[[PowerLogic PM800]]
** makes a python dict of all data
 
** calls GetBuildingData()
 
** replace unwanted dates from older buildings
 
** calls EqualizeDataValues()
 
 
*GetBuildingData(dbconnection, building)
 
**called from GetAllData()
 
** calls SetSQLQuery()
 
** returns rows from sql call and row count
 
 
*SetSQLQuery(building)
 
** called from GetBuildingData()
 
** Makes a sql call to the databse energy from the table electrical_energy
 
** returns rows from sql call and row count
 
 
*EqualizeDataValues(all_data, dates)
 
** fills null values for dates of newer buildings.
 
** returns all data
 
 
*EncodeData(all_data, dates)
 
** Called by Main().
 
** sorts all_data by date
 
** dumps data in JSON file, note: columns are organized alphabetically.
 
** initializes gviz metadata
 
** calls LoadData().
 
** writes JSON file which JS reads from.
 
 
*LoadData()
 
** Called by EncodeData()
 
** gviz api call
 
** encodes data to JSON file with headers.
 
 
*DisconnectFromDatabase()
 
**Called by Main().
 
**disconnects from database 'energy'.
 
  
===main.js===
+
[[Sepam Series 20]]
*non-function
 
**creates several global variables.
 
***whichBiuldings: an array of booleans signifying which buildings get drawn
 
***buildingColors: an array of colors for each of the buttons and colors on the graph, change them here and only here.
 
***startDate, endDate: range on the graph, by default they are one week ago and today respectively, if the page was reached through a permalink these get modified.
 
***lineChartJSONData: this is the json file which data_gen.py makes, it's placed as a global so it doesn't have to be reloaded everytime a building is checked or unchecked.
 
  
*flipAndRedraw
+
[[Category:export]]
**called when a button is pressed
 
**flips values in the global whichBuildings[]
 
**calls drawLineChart() provided whichBuildings has at least 1 true value.
 
 
 
*flip(val)
 
** takes a boolean and returns its opposite.
 
 
 
*redrawVis(values[])
 
**Takes an array of booleans
 
**calls DrawLineChart()
 
 
*drawLineChart(buildingArray[], colors[])
 
**called when index.html loads and when RedrawVis() is called.
 
**takes an array of booleans processed by RedrawVis()
 
**creates a Dashboard
 
**creates a data table with the data source as the json file data-gen.py makes.
 
**creates a chart wrapper, this is where you can adjust basic settings about the main chart.
 
**creates a control wrapper, this creates the controling bar on the bottom. This is where you can adjust the starting range for the control wrapper.
 
**creates a listener for the 'statechange' event on the controlWrapper, when the control range is updated the dates are saved. When a building is unchecked and the graph redrawn, the selection stays the same.
 
**creates a listener for the 'ready' event on the chartWrapper. When chartWrapper is ready (all drawn) resizeControls is called.
 
**deletes columns in data table depending on the booleans that are in values[], the more columns that are deleted the better the performance.
 
**binds the chart wrapper and the control wrapper together, draws the chart.
 
 
 
*equalArrays(arr1, arr2)
 
**checks if the contents of arr1 are equal to arr2, returns true if they are, false otherwise.
 
 
*parseDate(urlArg[])
 
**takes the array of strings from a permalink and returns them as a date object
 
 
 
*parseInts(strArray[])
 
**takes the array of strings from a permalink and returns them as an array of integers.
 
 
 
*parseButtons()
 
**Takes button arguments from the permalink and unchecks the buttons on index.html accordingly using jQuery's removeClass medthod.
 
 
 
*removeIndices()
 
**processes and array to return containing indices of which columns delete and therefore not draw.
 
 
 
*genPermalink()
 
**generates a permalink to the chart's state and which buttons are checked. The format of the permalink is (url)/?(startDate, yyyy-mm-dd)%(endDate, yyyy-mm-dd)%(buttons, 0123)
 
**writes permalink to text box on index.html
 
 
 
*redrawControls()
 
**Accesses where the svg paths for the control are using getElementByTagName() and sets them using jQuery's attr method.
 
**This is called every time the graph sends a 'ready' event.
 
 
 
===HTML+CSS===
 
*index.html, the file people load.
 
**A small script detecting browser type adds the chrome class to #page-title. Without this page-title in chrome draws incorrectly, this is a chrome specific bug the tag draws correctly in all other browsers.
 
*includes jquery.minm.1.7.2, for gviz api
 
*main.js, draws graphs, handles data.
 
*bootratp-button.js, enables buttons to behave like checkboxes. Toggling these buttons updates a global array of booleans held in main.js, and then redraws the graph depending on which are selected.
 
*main.css, styling (some css3).
 
**there are several blank css elements for the buttons in the beginning, keep these lines where they are as main.js accesses them by an index and gives them a background-color attribute.
 
 
 
===Improvements and Bugs===
 
*Performance
 
**More resolution in the graph will come at the expense of performance, right now points on the graph are averaged values from each hour. It would be better for graph readability if points were every, let's say, two minutes, however the graph would be unusable. Already the control chart is graphing every 30 lines of data, perhaps as the data range expands there could be less points on the chart itself and when the range is small it could show more resolution.
 
 
 
==Harvest Scripts ==
 
 
 
There is a unique harvest script for every individual building, but the only differences between these scripts are the value of the ip number and the .
 
The harvest scripts are called by cron every minute.
 
 
 
'''Procedure for the Script'''
 
*0. Sets a timestamp.
 
*1. Sets a variable $pReal to the return value of java --cp with the following arguments:
 
** filepath to the production directory
 
** ModbusReadDemand
 
** the ip number of the EGX100 of the building in question
 
** the amperage correction of the building in question.
 
This return value represents electrical energy usage.
 
*2. Connects to the energy database.
 
*3. Inserts into the electrical_energy table (located within the energy database) a row for the energy usage of the building in question at the time of the timestamp.
 
 
 
==Building Monitoring Data==
 
{| class="wikitable" style="font-size: 85%; text-align: center; width: auto;"
 
| Building
 
| Installed?
 
| EGX100 IP
 
| MAC Addr.
 
| Directly off main switch?
 
| Amperage Correction
 
| Feed Size (Amps)
 
| Square Footage*
 
| Occupancy
 
|-
 
| Bundy
 
| Yes
 
| 159.28.165.100
 
|
 
| No
 
| 31.25
 
| 800
 
| 50012
 
|
 
|-
 
| Barrett
 
| Yes
 
| 159.28.165.101
 
|
 
| No
 
| 15.625
 
| 1600
 
|
 
|
 
|-
 
| Wilson
 
| Yes
 
| 159.28.165.102
 
|
 
| No
 
| 62.5
 
| 300/400
 
|
 
|
 
|-
 
| Warren
 
| Yes
 
| 159.28.165.103
 
|
 
| No
 
| 62.5
 
| 300/400
 
|
 
|
 
|-
 
| <div style="color:red;">Mills</div>
 
| No
 
| will be 159.28.165.104
 
|
 
| No
 
| 31.25
 
| 800 (bus bar)
 
|
 
|
 
|-
 
| Olvey Andis
 
| Yes
 
| 159.28.165.105
 
|
 
| No
 
| 31.25
 
| 800
 
|
 
|
 
|-
 
| <div style="color:red;">Hoerner</div>
 
| No
 
|
 
|
 
|
 
|
 
|
 
|
 
|
 
|-
 
| Carpenter
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| <div style="color:red;">Wildman Science Library</div>
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| Lilly Library
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|61,000
 
 
 
|-
 
| Runyan
 
| No
 
|
 
|
 
| Yes
 
|
 
|
 
|
 
 
 
|-
 
| Stanley
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| Dennis
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| Noyes
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| Tyler
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
|-
 
| LBC
 
| No
 
|
 
|
 
| Yes
 
|
 
|
 
|
 
 
 
|-
 
| Stout
 
| No
 
|
 
|
 
| No
 
|
 
|
 
|
 
 
 
|-
 
| Remander
 
| No
 
|
 
|
 
| No
 
| Unknown
 
| (Total Feed Size - Measured Feed Sizes)
 
|}
 
<nowiki />* : By Square Footage we mean the summed square footage of all the floors
 
Mills energy usage can be calculated as:  Total_of_the_U - (Warren + Wilson)
 
 
 
== Correct EGX100 Dip Switch States ==
 
<table border="1">
 
<tr> <td>Pin Number</td> <td> 1 </td>  <td> 2 </td> <td> 3 </td>  <td> 4 </td><td> 5 </td><td> 6 </td></tr>
 
<tr> <td>Up | Down</td> <td>Down</td> <td> Up</td><td>Up</td><td>Up</td><td>Up</td><td>Up</td></tr>
 
</table>
 
 
 
== EGX100 and Voltage Regulator ==
 
The voltage regulator takes 110/220VAC and converts it to 24VDC for the EGX100.<br>
 
The V- port on the voltage regulator connects to port #6 on the EGX100 <br>
 
The V+ port on the voltage regulator connects to port #7 on the EGX100 <br>
 
 
 
== EGX100 and the Enercept Meter==
 
A solid orange wire goes from port #3 on the EGX100 to the + port on the RS485 node of the Enercept meter.  <br>
 
A solid brown wire goes from port #4 on the EGX100 to the - port on the RS485 node of the Enercept meter.  <br>
 
A solid green wire goes from port #5 on the EGX100 to the shield port (S) on the RS485 node of the Enercept meter <br>
 
A 100 Ohm resistor is placed between the + and - ports on connector that plugs into the Enercept meter. <br>
 
 
 
== EGX100 and the Routers ==
 
A full network cable comes from the RS232 to a router.
 
 
 
==Setting up an EGX100 ==
 
# Using an ethernet cord, connect a personal computer to the 10/100 BASE TX port on the EGX100.
 
# Type in the default ip address, ''169.254.0.10'', into a web browser, a password prompt should appear.
 
# Enter the default username is ''Administrator'' and the default password is ''Gateway''
 
# This will bring you a setup wizard in which you can set all desired parameters.
 
 
 
* Troubleshoot with Wireshark and the ping command.
 
* The EGX100 Manual is also helpful to have on hand to decode the blinking lights.
 
* The reset button on the EGX100 only power cycles the device, it does not actually clear any data according to the manual.
 
 
 
== Mounting an EGX100 for Installation in Building ==
 
# Cut 14 cm length of din rail.
 
# Place the rail so that its center is as close to the box's center as possible. Mark holes at the rail hole locations and drill holes into plastic box at those locations.
 
# If the box provides enough room for the rail, mount it parallel to a pair of its walls. Otherwise, place the rail on a 45 degree diagonal path. Turn screws into the drilled holes until the rail is securely fixed in the box. If you chose to mount it parallel, your work should look like [[File:photo 1 | photo 1]]. If you mounted the rail along a diagonal, your work should look like [[File:photo 2 | photo 2]].
 
# BEFORE placing the EGX100 or power supply in the box, drill three holes into the box to provide access points to the power input, the wires coming from the magnet, and the top ethernet port (labeled 10/100 Base Tx). Choose the location of the holes so that wires running through them will take a short path to their ports. Because the hole will be used as space for a conduit screw (see photo documentation), select a drill bit that is appropriate for the diameter of the screw. See [[File:photo 3 | photo 3]] for an example.
 
# Turn a conduit screw (see photo documentation) into each hole in the box. This conduit will give passage to all necessary I/O.
 
# The EGX100 and power supply have clips on their undersides designed to fix onto the din rail. With the clip open, place the EGX100 and power supply onto the din rail. Then, click it closed. If everything has gone successfully (and if you have chosen to mount the rail diagonally), your work should look like [[File:photo 4 | photo 4]].
 
 
 
==Documentation==
 
* [[Media:Campus-Electrical-Schematic.pdf| Campus Electrical Schematic]]
 
* [[pm8-mib|MIB for the PM8]] (device mounted on the main switchgear)
 
* [[Media:enercept-registers.pdf|Register list]] for the Enercept/EGX100s (devices mounted in each of the buildings)
 
* [[Media:Enercept_Meter.pdf|Enercept Meter Installation Guide]]
 
* [[Media:EGX_100_installation.pdf| EGX100 Installation Guide]]
 
* [[Media:EGX_100_userguide.pdf| EGX100 User Guide]]
 

Latest revision as of 14:54, 4 January 2017

General

Buildings

  • Contact Daryl about Siemans (Tyler, Stanley, CST)
  • Central Switch - IB, CP, GC
  • EH - (good luck)
  • AWC - GC - (GC, 10-16-14, needs hooked up)
  • Tyler - GC - (GC, 10-16-14, Steve Belec said that he will be receiving a walk-through from the contractors)
  • Stanley - GC - (GC, 10-16-14, need direct access for configuration over powerconfig)
  • New Building - GC - (GC, 1-23-14, waiting for Siemens system designers to get here to hopefully explain Tyler, Stanley and the new building)

EGX100

Energy Monitoring Hardware

Siemens

Siemens Sentron Pac3200

PowerLogic

PowerLogic PM800

Sepam Series 20