Almost Real-Time Environmental Monitoring & Information System
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.
- httpd
- php
- python 2.6+
- python-rrdtool
- rrdtool
- moment.js 1.7.2+
- python-sqlalchemy
- python-argparse
- Run
setup.sh
to initialise config files and storage directories. - Edit
artemis.conf
to your liking. - Run
./artemis_collect.py
to initialise the data store. - Add at least one node using
artemis_cli.py add_node
. - Run
./artemis_collect.py
to detect and collect data from probes. - Update positions of probes using
artemis_cli.py update_probe
. - If necessary, modify
artemis.cron
and copy to/etc/cron.d/
.
{ sensors }->[ thread ]-. [ crond ]
{ sensors }->[ thread ]-| :
{ sensors }->[ thread ]-|->[ collector ]->/ json /->[ javascript ]->( display )
{ sensors }->[ thread ]-| |
{ sensors }->[ thread ]-' ( rrd files )
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 |
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):
pass
For 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.
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
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.