ARTEMIS
Almost Real-Time Environmental Monitoring & Information System
Getting Started
If you've already got some environmental sensors, great! You're halfway there.
Check Supported Devices to see if your equipment is known to work.
If not, for most devices a plugin should not be difficult to write, see Plugin Development
If you are starting from scratch either buy some Supported Devices or take a look at Building Sensors.
Prerequisites
- httpd
- php
- python 2.6+
- python-rrdtool
- rrdtool
- moment.js 1.7.2+
- python-sqlalchemy
- python-argparse
Installation
- Run
setup.shto initialise config files and storage directories. - Edit
artemis.confto your liking. - Run
./artemis_collect.pyto initialise the data store. - Add at least one node using
artemis_cli.py add_node. - Run
./artemis_collect.pyto detect and collect data from probes. - Update positions of probes using
artemis_cli.py update_probe. - If necessary, modify
artemis.cronand copy to/etc/cron.d/.
Architecture
{ sensors }->[ thread ]-. [ crond ]
{ sensors }->[ thread ]-| :
{ sensors }->[ thread ]-|->[ collector ]->/ json /->[ javascript ]->( display )
{ sensors }->[ thread ]-| |
{ sensors }->[ thread ]-' ( rrd files )
Supported Devices
This is not an exhaustive list, but devices listed have at least been tested once.
Some devices may be supported but not yet listed, check the git repository.
| Manufacturer | Model | Works | Protocol | Module |
|---|---|---|---|---|
| SwiftTech | CM-2 | ✓ | XML | xml_env_swift |
| SwiftTech | CM-2 | ✓ | SNMP | snmp_env_swift |
| APC | AP7953 | ✓ | SNMP | snmp_pdu_apc |
| Jacarta | Unknown | ? | SNMP | snmp_env_jacarta |
Plugin Development
Plugins for different sensors are implemented as individual modules in plugins/.
Each module is expected to define a class of the same name that subclasses node from base.py and as such must define at least one method (fetch()).
class node(object):
def __init__(self, ip):
self.ip = ip
def fetch(self):
passFor plugins implementing access to SNMP devices, base.py also provides the convenience function getMIB for fetching the contents of MIB trees by walking the tree from a defined point.
getMIB(ip, mib, community = "public")In addition base.py provides the definitions for unit symbols and a lookup table for 1-Wire device families.
UNIT_TEMPERATURE
UNIT_CURRENT
UNIT_AIRFLOW
UNIT_HUMIDITY
FAMILY_1WIRE[]Additional unit definitions and 1-wire families should be added as needed.
Reference Platform
1-Wire Sensors
Maxim 1-Wire sensors are low-cost, readily available and accurate devices which can easily be interfaced to a computer with USB or other interfaces.
- DS1822
- Temperature
- ±2C
- 9-12 bit
- DS18B20
- Temperature
- ±0.5C
- 9-12 bit
- DS18S20
- Temperature
- ±0.5C
- 9 bit
Base Units
There is currently an ongoing project to develop a low-cost base unit around the Raspberry Pi which when completed will be our recommended base unit.
For the time being, other good options are low cost development boards and systems based around a VIA or Atom CPU, many of which are available for under £100. Or existing commercial units which cost in the region of £500.