#! /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
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
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):
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