Пример #1
0
def main():
  if len(sys.argv) == 3:
    db = sys.argv[1]
    obj_name = sys.argv[2]
    dev_name = None
  elif len(sys.argv) == 4:
    db = sys.argv[1]
    obj_name = sys.argv[2]
    dev_name = sys.argv[3]
  else:
    print "Usage: read_point.py db_file obj_name [dev_name]"
    sys.exit(1)

  devices = load(db)
  bacnet.Init('eth0', None)

  (dev, obj) = find(devices, obj_name, dev_name) 
  if dev == None:
    print "Point not found"
    sys.exit(1)

  #print "Reading: ", dev['props'], obj['props']
  print bacnet.read_prop(dev['props'], obj['props']['type'], obj['props']['instance'], bacnet.PROP_PRESENT_VALUE, -1)
Пример #2
0
def pollData(srcList):
  backOff = 1;
  randBackoff = 0;
  global isExiting; 
  while not isExiting:
    for s in srcList:
      val = None
      bacnetResource.acquire();
      try:
        print s[1]
        print s[2]
        print s[3]

        val = bacnet.read_prop(s[1], s[2], s[3], bacnet.PROP_PRESENT_VALUE, -1)
        #print("{0}+{1}+{2}".format(s[1], s[2], s[3]))
      except IOError as err:
        logging.warning(err)
        backOff = 2*backOff;
      except Exception as err:
        logging.warning(err)
        backOff = 2*backOff;
      finally:
        bacnetResource.release();

      if val is not None:
        logging.debug("Value: {0}".format(val));
        # Successful poll, decrement backoff
        if(backOff > 1):
           backOff = backOff - 0.01;

        ts = int(time.time() * 1000)
        bufFull.acquire()
        dataBuf.append( (s[0], [ts, val]) )
        if len(dataBuf) >= MAX_BUFFER_SIZE:
          # Notify the reporter
          bufFull.notify()
        bufFull.release()
      else:
         logging.debug("No value reported");

      randBackoff = random.randint(0, round(backOff)) + SAMPLING_RATE;
      pollingTimer.wait(randBackoff)
      safeExit();

    logging.info('Polled Data')
Пример #3
0
    u'max_apdu': 1024
}
h_dev = bacnet.whois(5)[0]
print h_dev
print
#h_obj = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_LIST, 11)
#print bacnet.read_prop(h_dev, h_obj['type'], h_obj['instance'], bacnet.PROP_PRESENT_VALUE, -1)
#print bacnet.write_prop(h_dev, h_obj['type'], h_obj['instance'], bacnet.PROP_PRESENT_VALUE, bacnet.BACNET_APPLICATION_TAG_REAL, '30', 16)

#h_obj = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_LIST, 2)
#h_obj={u'type_str': u'analog-value', u'instance': 17162, u'type': 2}
h_obj = {u'type_str': u'binary-output', u'instance': 17153, u'type': 4}
print h_obj
#print
#rint  bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_LIST, 0)
#print
#print
print bacnet.write_prop(h_dev, h_obj['type'], h_obj['instance'],
                        bacnet.PROP_PRESENT_VALUE,
                        bacnet.PROP_STATE_SYSTEM_STATUS, '0', 2)
#time.sleep(10)
print bacnet.read_prop(h_dev, h_obj['type'], h_obj['instance'],
                       bacnet.PROP_PRESENT_VALUE, -1)
"""for i in dir(bacnet):
    try:
        aaa = bacnet.write_prop(h_dev, h_obj['type'], h_obj['instance'], eval('bacnet.' + i),  bacnet.BACNET_APPLICATION_TAG_BOOLEAN, '0', 16)
	if aaa:
	    print i
#time.sleep(20)
    except: pass """
Пример #4
0
def main():
    parser = optparse.OptionParser()
    parser.add_option('-i',
                      '--interface',
                      dest='interface',
                      default=None,
                      help='Network interface to broadcast over')
    parser.add_option('-p',
                      '--ip-filter',
                      dest='fip',
                      default=None,
                      help='Filter devices by IP prefix')

    opts, args = parser.parse_args()
    filename = args[0] if len(args) else '-'
    if filename != '-':
        fout = open("test.json", 'wb')
    else:
        fout = open("test.json", 'wb')


#fout = sys.stdout
    print(opts)
    # MUST USE default port for whois
    bacnet.Init(opts.interface, None)

    device_list = []
    # Discover and store devices
    print(bacnet)
    devs = bacnet.whois(2)
    print >> sys.stderr, "Found", len(devs), "devices"

    for h_dev in sorted(devs, key=itemgetter('device_id')):
        # IP filter
        mac = '.'.join([str(i) for i in h_dev['mac']])
        if not opts.fip or mac.startswith(opts.fip):
            # Dev filter
            objs = []
            obj_count = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE,
                                         h_dev['device_id'],
                                         bacnet.PROP_OBJECT_LIST, 0)
            name = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE,
                                    h_dev['device_id'],
                                    bacnet.PROP_OBJECT_NAME, -1)
            try:
                desc = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE,
                                        h_dev['device_id'],
                                        bacnet.PROP_DESCRIPTION, -1)
            except IOError:
                desc = None

            device = {'props': h_dev, 'name': name, 'desc': desc, 'objs': []}

            if obj_count == 0:
                print >> sys.stderr, "No objects found:", d
                continue

            # Get object props and names
            for i in range(1, obj_count + 1):
                h_obj = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE,
                                         h_dev['device_id'],
                                         bacnet.PROP_OBJECT_LIST, i)
                if h_obj == None:
                    print >> sys.stderr, "Object not found:", i
                    continue
                try:
                    name = bacnet.read_prop(h_dev, h_obj['type'],
                                            h_obj['instance'],
                                            bacnet.PROP_OBJECT_NAME, -1)
                except IOError:
                    name = None
                try:
                    desc = bacnet.read_prop(h_dev, h_obj['type'],
                                            h_obj['instance'],
                                            bacnet.PROP_DESCRIPTION, -1)
                except IOError:
                    desc = None
                try:
                    unit = bacnet.read_prop(h_dev, h_obj['type'],
                                            h_obj['instance'],
                                            bacnet.PROP_UNITS, -1)
                except IOError:
                    unit = None
                try:
                    value = bacnet.read_prop(h_dev, h_obj['type'],
                                             h_obj['instance'],
                                             bacnet.PROP_PRESENT_VALUE, -1)
                except IOError:
                    value = None

                now = datetime.datetime.now()
                #date_time = now
                date_time = now.strftime("%Y-%m-%d %H:%M")
                device['objs'].append({
                    'props':
                    h_obj,
                    'name':
                    name,
                    'desc':
                    desc,
                    'unit':
                    unit,
                    'data_type':
                    process_point(device['name'], name),
                    'value':
                    value,
                    'date_time':
                    date_time
                })
            print >> sys.stderr, device['name'], "has", len(
                device['objs']), "objects"
            device_list.append(device)
    #print("\n\n\n\n ff \n",device_list)
    json.dump(device_list, fout)
    fout.close()
Пример #5
0
 def get_state(self, request):
     return bacnet.read_prop(self.dev['props'],
                             self.obj['props']['type'],
                             self.obj['props']['instance'],
                             bacnet.PROP_PRESENT_VALUE,
                             -1)
Пример #6
0
def main():
  parser = optparse.OptionParser()
  parser.add_option('-i', '--interface', dest='interface',
                    default=None,
                    help='Network interface to broadcast over')
  parser.add_option('-p', '--ip-filter', dest='fip', default=None,
                    help='Filter devices by IP prefix')

  opts, args = parser.parse_args()
  if len(args) != 1:
    print "Usage:", sys.argv[0], "[options] <output file>"
    parser.print_help()
    sys.exit(1)

  filename = args[0]
  fout = open(filename, 'wb')

  # MUST USE default port for whois
  bacnet.Init(opts.interface, None)

  device_list = []
  # Discover and store devices
  devs = bacnet.whois(5)
  print >>sys.stderr, "Found", len(devs), "devices"

  for h_dev in sorted(devs, key=itemgetter('device_id')):
    # IP filter
    mac = '.'.join([str(i) for i in h_dev['mac']])
    if not opts.fip or mac.startswith(opts.fip):
      # Dev filter
      objs = []
      obj_count = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_LIST, 0)
      name = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_NAME, -1)
      try:  
        desc = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_DESCRIPTION, -1)
      except IOError:
        desc = None

      device = {
        'props': h_dev,
        'name': name,
        'desc': desc,
        'objs': []
        }

      if obj_count == 0:
        print >>sys.stderr, "No objects found:", d
        continue 

      # Get object props and names
      for i in range(1, obj_count+1):
        h_obj = bacnet.read_prop(h_dev, bacnet.OBJECT_DEVICE, h_dev['device_id'], bacnet.PROP_OBJECT_LIST, i)
        if h_obj == None:
          print >>sys.stderr, "Object not found:", i 
          continue
        try:
          name = bacnet.read_prop(h_dev, h_obj['type'], h_obj['instance'], bacnet.PROP_OBJECT_NAME, -1)
        except IOError:
          name = None
        try:
          desc = bacnet.read_prop(h_dev, h_obj['type'], h_obj['instance'], bacnet.PROP_DESCRIPTION, -1)
        except IOError:
          desc = None
        try:
          unit = bacnet.read_prop(h_dev, h_obj['type'], h_obj['instance'], bacnet.PROP_UNITS, -1)
        except IOError:
          unit = None

        device['objs'].append({
          'props': h_obj,
          'name': name,
          'desc': desc,
          'unit': unit,
          'data_type': process_point(device['name'], name),
          })
      print >>sys.stderr, device['name'], "has", len(device['objs']), "objects"
      device_list.append(device)
  json.dump(device_list, fout)
  fout.close()