Skip to content
liberpic edited this page Sep 13, 2014 · 5 revisions

##Driver Index

Part of the goal of sMAP is to foster a community support open data aquisition of many different devices. This page has a partial list of drivers distributed with sMAP as part of the smap.drivers package.

Unless otherwise specified, arguments without a default value are required.

###Generic Drivers

####XML

Module: smap.drivers.xml.XMLDriver

Communications: XML over file, http, or python loader

Data: whatever is exposed through the XSLT transform

Parameter Decription Default Value
URI URI to load: supported schemes are http, https, file, and python 30
Rate Polling frequency (seconds)
Xslt XSLT transformation to apply to document to convert it to sMAP-XML
Timeformat python strptime string used to parse the time in the document. %s
Timezone zone code for the data; the timeformat will be parsed as if it is a local timestamp in the zone. UTC

XSLT is a way of applying a declarative transformation to XML documents. Sometimes you can use that to very easily convert existing XML data into sMAP feeds. There are a few sample XSLT transformation available in trunk/xslt:

Stylesheet Description
greenbutton.xsl Transformation for US GreenButton data packed inside of Atom(http://naesb.org/espi)
obvius.xsl Generic transformation for Obvius Aquisuite XML data
ted5000.xsl Transform for the Ted 5000 which exports all channels

####Expression Driver

Module: smap.drivers.expr.ExprDriver

|Parameter |Description |Default Value | --------- |:-----------------------------------------------------------------------:| |Expression |An operator expression to compute | |Restreict |An ArdQuery where-clause restricting the set of input streams | |Group |A tagname specifying how streams are groups when passed into operators |

The expression driver is a way to compute ArdQuery operator expressions over new data. This gives you a way to create new “virtual” sMAP streams based on other data. The driver will create streams corresponding to the output of the query

`apply _Expression_ to data before now where _Restrict_ group by _Group_`

As new data arrives, it will be pushed through the expression and published as a new sMAP feed. To avoid circularity, it’s a good idea to make Restrict include at least has Path and not has Metadata/Extra/Operator.

###Electric Meters

####Dent PowerScout 18

Module: smap.drivers.dent.Dent18

Communications: Modbus over TCP

Data: 6 three-phase electric meters

Parameter Description Default Value
Address Hostname of device(or Modbus/IP gateway)
Port Port 4660
ModbusBase Device modbus address 1
Rate Polling frequency(seconds) 20

####Veris E30 Panel Meter

Module: smap.drivers.veris.VerisDriver

Communications: Modbus over TCP

Data: 42 single-phase power and energy measurements

Parameter Description Default Value
Address Hostname of device (or Modbus/IP gateway)
Port Port
BusID Device modbus address 1
Period Polling frequency(seconds) 30

####Power Standard Lab pQube

Module: smap.drivers.pqube.PQubeModbus

Communications: Modbus/TCP

Data: Three phase energy, power, and quality measurements

Parameter Description Default Value
Address Hostname of device (or Modbus/IP gateway) 502
Port Port 1
SlaveAddress Device modbus address 7000
BaseRegister Base register to start reading at 30
Rate Polling frequency (seconds)

####TED 5000

Module: smap.drivers.ted.Ted5000Driver

Communications: HTTP/XML

Parameter Description Default Value
Address URL of device data page
Timezone Local timezone of device America/Los_Angeles
Rate Polling frequency (seconds) 60

####UC Berkeley ACme X2

Module: smap.drivers.acmex2.acmex2.ACmeX2Driver

Communications: Proprietary UDP

Data: Per-device energy and power data.

Parameter Description Default Value
Port Local IPv6 port to listen on 702

####Obvius Aquisuite

Module: `smap.drivers.obvius.Driver

Communications: Proprietary XML

Parameter Description Default Value
Url URL to download from. Set to the link returned by the XML download link on the obvius page (e.g. http://10.0.0.1/setup/devicexml.cgi?ADDRESS=58&TYPE=DATA)
Username HTTP username to authenticate as
Password HTTP password
Period Polling frequency (seconds) 30
ObviusType Type of device represented by the xml (see below)

Device maps are stored in smap.drivers.obvius.sensordb. These map the somewhat opaque mappings present in the Aquisuite XML to nicer sMAP names. You can pick one from device type on the Aquisuite Page. Current mappings are:

ObviousType Description
Power Measurement ION 6200
Power Measurement ION 7300
Power Measurement ION 7330
Shark 100
Continental Control Systems LLC, WattNode MODBUS
Dent Power Scout A
Veris Full-Data Energy Meter
SquareD ?
GE Enhanced MicroVersaTrip

####PG&E GreenButton Downloader

Module: smap.drivers.pge + smap.drivers.xslt.XMLDriver

Communication: Web scrape + XML

PG&E makes residential smartmeter data available, but difficult to download through their webpage. You can combine a mechanized download of the xml with an XSLT transform to create a sMAP source from your PG&E data.

Parameter Description Example Value
Uri Set to tell XML driver to use the loader python://smap.drivers.pge.update
Xslt Path to XSLT stylesheet. Included with the sMAP distribution xslt/greenbutton.xsl
Period Frequency to poll at. PG&E data updates infrequently. 86400
Username PG&E Login
Password PG&E Password
To Optional; date to start download at 1/1/2010
From Optional; date to end download at 12/31/2012
Type Optional; type of data feed to use from the result "gas" or "electric"

Here's a full example:

[/pge-gas]
type = smap.drivers.xml.XMLDriver
Uri = python://smap.drivers.pge.update
Xslt = ~/smap-data/xslt/greenbutton.xsl
Period = 86400
Username = 
Password = 
# From = 1/1/2010
# To = 12/31/2012
Type = gas

###Weather

####Weather Underground

Module: smap.drivers.wunderground.WunderGround

Communications: XML

Data: Current conditions for the station.

Parameter Description Default Value
Address WUnderground API URL [http://api.wunderground.com/weatherstation/WXCurrentObXML.asp
ID WUnderground station ID KCABERKE25
Rate Polling frequency (seconds) 60
Period Polling frequency (seconds) 30

####NOAA Weather Forecasts

Module: smap.drivers.noaaforecast.NOAAForecast

Communications: XML

Parameter Description Default Value
lat Latitude fro forecast
lon Longitude for forecast

####NWS Weather Forecasts

Module: smap.drivers.forecastTemp.ForecastTempDriver

Communications: XML

Parameter Description Default Value
Latitude Latitude for forecast
Longitude Longitude for forecast
LocationName Location name

####Vaisala WXT 520

Module: smap.drivers.vaisala.VaisalaDriver

Communications: SDI-12 (serial) over IP

Parameter Description Default Value
Address Hostname of serial/io bridge
Port port

###ISO Data

####ETCOT

Module: smap.drivers.ercot.ErcotDriver

####PJM

Module: smap.drivers.pjm.PJMDriver

####NYISO

Module: smap.drivers.nyiso.NYIsoDriver

####MISO

Module: smap.drivers.miso.MIsoDriver

####Washington BPA

Module: smap.drivers.washingtonbpa.BPADriver

####ISO NE

Module: smap.drivers.isone.IsoNEDriver

####CA ISO

Module: smap.drivers.caiso.CaIsoDriver

####CA ISO LMP Data

Module: smap.drivers.caiso_price.CaIsoPrice

Parameter Description Default Value
Location LMP Node name OAKLAND_1_N001

###Other Drivers

####HearX Flow Meter

Module: smap.drivers.heatx.HeatX

Communication: Modbus over TCP

Data: Description from the Central Station Steam Co. Cadillac HEATX BTU Meter

Parameter Description Default Value
Host Hostname
Rate Polling rate (seconds) 20

####Omega iSeries Steam Gauge

Module: smap.drivers.iseries.IseriesSteam

Communication: Proprietary TCP

Parameter Description Default Value
Host Hostname
Rate Polling rate (seconds) 20

####Labjack UE9

Module: smap.drivers.labjack.LabjackDriver

Communication: Labjack modbus. Requires updated Labjack firmware.

|Parameter |Description |Default Value | | --------- |:------------------------------------:| | |ConfModule |Python module name with configuration | |

This module is configured through a python module you must write; here is an example (in a file named labjackconf.py:

BIP_5V = 0x08    # from the datasheet

def temp_cal(x):    # convert an analog reading to celsius
  return x*55.57-273.15+255.37

CONF = {
  'labjack01' : {
    'address' : '10.0.0.1',
    'rate' : 10,
    'channels' : {
    'freezer_bat_temp' : {
      'register' : 0,      # Ain0
      'unit' : 'C',
      'calibrate' : temp_cal,
      'range' : BIP_5V,
    },
    'freezer_air_temp' : {
      'register' : 2,      # Ain1
      'unit' : 'C',
      'calibrate' : lambda x: (x * 100) - 273.15,
      'range' : BIP_5V,
    },
  }
}
####Reading DB

**Module**: `smap.drivers.readingdb.Driver`

**Data**: Statistics from a [readingdb](https://github.com/stevedh/readingdb) database.

|Parameter |Description             |Default Value |
| -------- |:----------------------:| ------------ |
|Port      |ReadingDB database port |4242          |