Add support for new device

Sensor

For every sensor which was found in devices.yml Robotice looking for python module in monitor/sensors/<sensor_type>.py. Each module has method get_data with one argument dict sensor

#!/usr/bin/python

import subprocess
import re
import sys
import logging

logger = logging.getLogger("robotice.sensor.sispm")

def get_data(sensor):
  """
  sispm reading
  """

  # adapt for specific OS internals

  if sensor.get('os_family') == 'Debian':
    executable = "/usr/bin/sispmctl"
  else:
    executable = "/usr/local/bin/sispmctl"

  # call executable

  output = subprocess.check_output([executable, "-d", str(sensor.get('port')), "-n", "-m", "all"]);

  # parse output

  lines = output.split("\n")

  data = []
  i = 0
  for line in lines:
    if i != 0:
      status = line.split("\t")
      if len(status) > 1:
        data.append( ["%s.socket%s" % (sensor.get('name'), i), int(status[1])] )
    i += 1

  # return data
  # return list of tuples [(metric.name, value)]

  return data

Actuator

For every sensor which was found in devices.yml Robotice looking for python module in monitor/sensors/<sensor_type>.py. Each module has method run with accepts three arguments dict device, model_data and real data is values which may take few data types boolean or 0 / 1, maybe float with number percent level 0.75 or something more complex.

Sispm as actuator

#!/usr/bin/python

import time
import subprocess
import logging

logger = logging.getLogger("robotice")
logger.setLevel(logging.DEBUG)

def run(device, model_data, real_data):

  if device.get('os_family') == 'Arch':
    executable = "/usr/local/bin/sispmctl"
  else:
    executable = "/usr/bin/sispmctl"

  if int(model_data) == 0:
    command = [executable, "-d", str(device.get('port')), '-f', str(device.get('socket'))]
  else:
    command = [executable, "-d", str(device.get('port')), '-o', str(device.get('socket'))]

  output = subprocess.check_output(command);

  return command, output