示例#1
0
#! /usr/bin/env python

import sys
import ownet

if len(sys.argv) != 3:
    print 'temperatures.py server port'
    sys.exit(1)

r = ownet.Sensor('/', server=sys.argv[1], port=int(sys.argv[2]))
e = r.entryList()
s = r.sensorList()
print 'r:', r
print 'r.entryList():', e
print 'r.sensorList():', s

for x in r.sensors():
    if hasattr(x, 'temperature'):
        print x, x.temperature
示例#2
0
def OwCallback(a):

    context = a

    # polling timestamp
    utime = int(time.mktime(time.gmtime()))
    stime = int(time.mktime(time.localtime()))

    # slave 0x00 register 0x03 (HR)
    register = 0x03
    slave_id = 0x00

    builder = PayloadBuilder(endian=config.endian)

    owdata = {}

    # owdata persistency (load)
    if os.path.isfile(config.owstore):
        try:
            owfile = open(config.owstore, 'rb')
            owdata = pickle.load(owfile)
            owfile.close()
        except OSError:
            logger.warning("Cannot open %s for reading." % config.owstore)

    # init ownet configuration
    ownet.init('%s:%d' % (config.owserver, config.owport))

    # try to open ownet server
    try:
        ow = ownet.Sensor(config.owpath)
        owread = True
    except (socket.gaierror, socket.error):
        logger.warning("Cannot connect owserver %s:%d." %
                       (config.owserver, config.owport))
        owread = False

    # if connected, read known sensors and update owdata
    if owread:
        try:
            for sensor in ow.sensors():
                if (hasattr(sensor, 'id') & hasattr(sensor, 'temperature')):
                    owdata[sensor.id] = [sensor.temperature, stime]
                if (hasattr(sensor, 'id') & hasattr(sensor, 'humidity')):
                    owdata[sensor.id] = [sensor.humidity, stime]
        except (socket.gaierror, socket.error, OverflowError):
            pass

    # deinit ownet
    ownet.finish()

    # update RRDs
    if owread:
        rrdupdate(owdata)

    # owdata validation
    if '' in owdata: del owdata['']
    for sensor in owdata:
        last = owdata[sensor][1]
        if ((stime - last) > config.owhold) or owdata[sensor][0] == '':
            owdata[sensor][0] = config.owfail
            logger.warning(
                "Cannot read 1 wire sensor %s from owserver %s:%d." %
                (sensor, config.owserver, config.owport))
        if not owread:
            logger.warning(
                "Cannot read 1 wire sensor %s from owserver %s:%d." %
                (sensor, config.owserver, config.owport))

    # owdata persistency (save)
    if owread:
        try:
            owfile = open(config.owstore, 'wb')
            pickle.dump(owdata, owfile)
            owfile.close()
        except OSError:
            logger.warning("Cannot open %s for writing." % config.owstore)

    # reset holding registers with owfail value
    devices = config.getDevices(bus='onewire',
                                types=['Temperature', 'Humidity'])
    for sensor in devices:
        try:
            id = sensor.keys()[0]
            device = config.getDevice(id)
            mbaddr = int(device.values()[0]['register'])
            builder.reset()
            builder.add_32bit_float(config.owfail)
            context[slave_id].setValues(register, mbaddr, builder.values())
        except AttributeError:
            pass

    # update holding registers with owdata
    for address in owdata:
        try:
            device = config.getDevice(address=address)
            mbaddr = int(device.values()[0]['register'])
            data = owdata[address][0]
            builder.reset()
            builder.add_32bit_float(data)
            context[slave_id].setValues(register, mbaddr, builder.values())
        except AttributeError:
            pass
示例#3
0
                  dest='field',
                  help='sensor field to be used for monitoring.',
                  default='temperature')
options, args = parser.parse_args()

if len(args) != 3:
    print 'OW ' + nagios.unknown[1] + ' - ' + 'missing command line arguments'
    parser.print_help()
    sys.exit(nagios.unknown[0])

server = args[0]
port = int(args[1])
path = args[2]

try:
    s = ownet.Sensor(path, server=server, port=port)
except ownet.exUnknownSensor, ex:
    print 'OW ' + nagios.unknown[1] + ' - unknown sensor ' + str(ex)
    sys.exit(nagios.unknown[0])
except socket.error, ex:
    print 'OW ' + nagios.unknown[1] + ' - communication error ' + str(ex)
    sys.exit(nagios.unknown[0])

if options.verbose == 1:
    print s
elif options.verbose > 1:
    print s
    print 'entryList:', s.entryList()
    print 'sensorList:', s.sensorList()

if not hasattr(s, options.field):
示例#4
0
    def PollOwServer(self):
        #Init connection.
        self.root = ownet.Sensor("/", self.owserver, self.owport)

        #Create a list which keeps track of when sensors was read.
        self.LastChecked = self.CheckForNewSensors()

        #Init alarm path
        self.alarm = ownet.Sensor("/alarm", self.owserver, self.owport)

        #Check all sensors.
        self.CheckSensors(self.LastChecked.keys())

        now = time.time()

        while (True):

            #Update the LastChecked list with added or removed sensors.
            self.LastChecked = self.CheckForNewSensors(self.LastChecked)

            #Do some iterations then check for new sensors.
            for f in range(0, 30):

                #Sleep some to not overload the system with requests.
                time.sleep(0.1)

                #Time the loop
                lasttime = now
                now = time.time()
                self.cycletime = now - lasttime

                #Check if there is alarms and check them.
                self.alarmlist = self.GetAlarmList()
                for sensor in self.alarmlist:
                    sensor.alarm = now

                self.CheckSensors(self.alarmlist, False)

                #Update old values and non alarm sensors. Check one each iteration.

                #Update the LastChecked list with added or removed sensors.
                self.LastChecked = self.CheckForNewSensors(self.LastChecked)

                #Try to find the oldest one.
                try:
                    (sensor, checked) = self.GetOldestUpdate()[0]
                except IndexError:
                    continue

        #Avoid updating sensors more than once each second.
                if (now - checked) < 1.0:
                    continue

        #Check the sensor.
                self.CheckSensors([sensor])
                self.LastCycled = sensor

                #Debug print.
                if f % 1 == 0:
                    self.PrintLastCheckedTimes()

        return