Skip to content
forked from stfc/artemis

Almost Real-Time Environmental Monitoring & Information System

License

Notifications You must be signed in to change notification settings

kelixin/artemis

 
 

Repository files navigation

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

  1. Run setup.sh to initialise config files and storage directories.
  2. Edit artemis.conf to your liking.
  3. Run ./artemis_collect.py to initialise the data store.
  4. Add at least one node using artemis_cli.py add_node.
  5. Run ./artemis_collect.py to detect and collect data from probes.
  6. Update positions of probes using artemis_cli.py update_probe.
  7. 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.

ManufacturerModelWorksProtocolModule
SwiftTechCM-2XMLxml_env_swift
SwiftTechCM-2SNMPsnmp_env_swift
APCAP7953SNMPsnmp_pdu_apc
JacartaUnknown?SNMPsnmp_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):
        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.

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.

About

Almost Real-Time Environmental Monitoring & Information System

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 40.7%
  • PHP 32.6%
  • JavaScript 19.1%
  • CSS 5.4%
  • Shell 2.2%