def build_request(config): request = None area = config.get('SERVICE_REGION', None) region = None if area is not None: region = build_region(area) else: region = simulatedClientPresets.pre_built_region() if config.get('REQUEST_TYPE', None) and config.get('REQUEST_TYPE') == 'sub': request = client.SubscriptionRequest(config.get('DATA'), region) # TEST REQUEST Manager if config.get('UPLOAD_TEST_DATA', False) and config.get('REQUEST_TYPE') == 'sub': request = client.BaseRequest("tst", "veh", region) elif config.get('REQUEST_TYPE', None) and config.get('REQUEST_TYPE') == 'qry': request = client.QueryRequest(config.get('DATA_TYPE'), region, config.get('START_DATE', start_date), config.get('END_DATE', end_date), config.get('SKIP', skip), config.get('LIMIT', limit)) if config.get('ROAD_SEGMENTS', False): for segment in config['ROAD_SEGMENTS']: if segment.get('startPoint'): startPoint = client.OdePoint( *tuple(segment['startPoint'].split(','))) else: startPoint = None endpoint = client.OdePoint(*tuple(segment['endPoint'].split(','))) rs = client.RoadSegment(segment['id'], startPoint=startPoint, endPoint=endpoint, previousSegmentId=segment.get( 'previousSegmentId', None)) request.add_road_segments(rs) return request
def build_request(config): request = None area = config.get('SERVICE_REGION', None) if area is not None: region = build_region(area) if config.get('REQUEST_TYPE', None): if config.get('REQUEST_TYPE') == 'sub': request = client.SubscriptionRequest(config.get('DATA_TYPE'), region) elif config.get('REQUEST_TYPE') == 'qry': request = client.QueryRequest(config.get('DATA_TYPE'), region, config.get('START_DATE', start_date), config.get('END_DATE', end_date), config.get('SKIP', skip), config.get('LIMIT', limit)) elif "INPUT_FILE" in config and (config.get('REQUEST_TYPE') == 'tst' or config.get('REQUEST_TYPE') == 'dep'): request = client.BaseRequest(config.get('REQUEST_TYPE'), config.get('DATA_TYPE'), region) if config.get('ROAD_SEGMENTS', False): for segment in config['ROAD_SEGMENTS']: if segment.get('startPoint'): startPoint = client.OdePoint( *tuple(segment['startPoint'].split(','))) else: startPoint = None endpoint = client.OdePoint(*tuple(segment['endPoint'].split(','))) rs = client.RoadSegment(segment['id'], startPoint=startPoint, endPoint=endpoint, previousSegmentId=segment.get( 'previousSegmentId', None)) request.add_road_segments(rs) return request
def eadfield(self, username, password, server, intersectionId, lanesetId): self.logger.debug('EAD is using Field Data at %s.' % intersectionId) intlat, intlon, uslat, uslon, angle = self.intMapping(intersectionId) if angle < 45 or angle > 315: #north facing direction = 'N' elif 45 < angle < 135: #east facing direction = 'E' elif 135 < angle < 225: direction = 'S' else: direction = 'W' #if intersectionId == "00000085" or intersectionId == "00000088": #nwLat=42.3344144 #nwLon=-83.0565548 #seLat=42.326815989 #seLon=-83.033766755 #else: nwLat = 42.53790 nwLon = -83.47790 seLat = 42.30575 seLon = -82.84275 region = client.GeographicRegion(nwLat, nwLon, seLat, seLon) sub_data_type = "veh" # veh, int, agg sub_request = client.SubscriptionRequest(sub_data_type, region) host = str(server) userName = str(username) password = str(password) ode = client.ODEClient(host) ode.get_token(userName, password) ode.setRequest(sub_request) self.logger.debug('VSD Subscription Requested.') async = client.AsyncODEClient(odeClient=ode) async .start() # will connect to the ODE in a separate thread. while True: CVData = [] #stores raw data uniqueData = [] #stores processed data # reset current counts self.messages, self.case5 = 0, 0 if not async .is_buffer_empty(): items = async .get_all_messages() #items = async.get_messages(10) # Specifiy number of items to process # update current number of messages self.messages = math.log(len(items), 10) for record in items: #logger.info("%s", record.get_payload_value('dateTime')) vehList = [0, 0, 0, 0, 0, 0, 0] vehList[0] = record.get_payload_value('tempId') vehList[1] = record.get_payload_value('latitude') vehList[2] = record.get_payload_value('longitude') vehList[3] = record.get_payload_value('speed') vehList[4] = record.get_payload_value('heading') vehList[5] = record.get_payload_value('dateTime') vehList[6] = record.get_payload_value('groupId') self.logger.debug('Data Received: %s' % str(vehList)) if vehList[3] != None: CVData.append(vehList) #print record.get_payload_value(key) #Get latest data from a vehicle. vehIDs = [] for i in range(1, len(CVData)): vehData = CVData[i] if vehData[0] not in vehIDs: uniqueData.append(vehData) vehIDs.append(vehData[0]) print len(vehIDs) TTC = timeToChange.get() CS = currState.get() self.logger.debug('Unique Data Submitted to EAD App %s' % str(uniqueData)) self.eadalgorithm(uniqueData, intersectionId, TTC, CS, intlat, intlon, uslat, uslon, angle, direction) #print uniqueData, intersectionId, TTC, CS self.signal.emit([self.messages, self.case5]) time.sleep(2)
def updateIntData(self, username, password, server, intersectionId, lanesetId): self.logger.debug('Intersection Update Thread started.') #if intersectionId == "00000085" or intersectionId == "00000088": # nwLat=42.333181 # nwLon=-83.051523 # seLat=42.327089 # seLon=-83.037940 #else: # nwLat=42.517880 # nwLon=-83.306152 # seLat=42.448886 # seLon=-83.259115 nwLat = 42.53790 nwLon = -83.47790 seLat = 42.30575 seLon = -82.84275 region = client.GeographicRegion(nwLat, nwLon, seLat, seLon) sub_data_type = "int" # veh, int, agg sub_request = client.SubscriptionRequest(sub_data_type, region) host = str(server) userName = str(username) password = str(password) ode = client.ODEClient(host) ode.get_token(userName, password) ode.setRequest(sub_request) def on_message(ws, message): try: msg = json.loads(message) #self.logger.debug("Intersection Message Received: %s", message) if msg.get('payload', { 'code': None }).get('code', None) is not None and msg.get('payload').get( 'code').upper() == 'SUCCESS': # send_file(ws,config['INPUT_FILE']) self.logger.info('Message from the Test API: %s', message) elif msg.get('payload', { 'code': None }).get('code', None) is not None and msg.get('payload').get( 'code').upper() == 'FAILURE': ws.close() else: pass #logger.debug('Message from the Test API: %s', message) if msg.get("payload", {'code': None}).get("code") == 'FAILURE': ws.close() except: # logger.warn(message) self.logger.exception("Exception convert Message to JSON: %s", message) if msg['payload']['spatData']['intersections'][ 'id'] == intersectionId: TTC = int(msg['payload']['spatData']['intersections']['states'] [lanesetId]['timeToChange']) CS = int(msg['payload']['spatData']['intersections']['states'] [lanesetId]['currState']) timeToChange.put(TTC) currState.put(CS) self.logger.debug( 'SPAT for specific intersection received. time to change = %s. current state = %s' % (str(TTC), str(CS))) ode.connect(on_message=on_message)
def inczonefield(self, username, password, server, location): #self.logger = logger.getLogger('ODEApplication.inczonefield') if location == 0: Loc = 'Congress Street' incLatitude = 42.329226 incLongitude = -83.048201 heading = 60 speedlimit = 25 nwLat = 42.53790 nwLon = -83.47790 seLat = 42.30575 seLon = -82.84275 elif location == 1: Loc = 'NB Telegraph Road' incLatitude = 42.500625 incLongitude = -83.284654 heading = 180 speedlimit = 50 nwLat = 42.517880 nwLon = -83.306150 seLat = 42.448888 seLon = -83.259115 else: Loc = 'SB Telegraph Road' incLatitude = 42.472016 incLongitude = -83.282423 heading = 0 speedlimit = 50 nwLat = 42.517880 nwLon = -83.306150 seLat = 42.448886 seLon = -83.259115 self.logger.debug('INC-ZONE is using Field Data on %s.' % Loc) z1lat, z1lon, z2lat, z2lon, z3lat, z3lon = self.zoning( incLatitude, incLongitude, heading, speedlimit) self.logger.debug('INC-ZONE Zoning Done.') region = client.GeographicRegion(nwLat, nwLon, seLat, seLon) sub_data_type = "veh" # veh, int, agg sub_request = client.SubscriptionRequest(sub_data_type, region) host = str(server) userName = str(username) password = str(password) ode = client.ODEClient(host) ode.get_token(userName, password) ode.setRequest(sub_request) self.logger.debug('VSD Subscription Requested.') async = client.AsyncODEClient(odeClient=ode) async .start() # will connect to the ODE in a separate thread. import time while True: CVData = [] #stores raw data uniqueData = [] #stores processed data # reset current counts self.messages, self.advisories, self.alerts, self.warnings = [0 ] * 4 if not async .is_buffer_empty(): items = async .get_all_messages() # update current number of messages self.messages = math.log(len(items), 10) #items = async.get_messages(10) # Specifiy number of items to process for record in items: #logger.info("%s", record.get_payload_value('dateTime')) vehList = [0, 0, 0, 0, 0, 0, 0] vehList[0] = record.get_payload_value('tempId') vehList[1] = record.get_payload_value('latitude') vehList[2] = record.get_payload_value('longitude') vehList[3] = record.get_payload_value('speed') vehList[4] = record.get_payload_value('heading') vehList[5] = record.get_payload_value('dateTime') vehList[6] = record.get_payload_value('groupId') self.logger.debug('Data Received: %s' % str(vehList)) if vehList[3] != None: CVData.append(vehList) vehIDs = [] for i in range(1, len(CVData)): vehData = CVData[i] if vehData[0] not in vehIDs: uniqueData.append(vehData) vehIDs.append(vehData[0]) #print uniqueData self.logger.debug('Unique Data Submitted to INC-ZONE %s' % str(uniqueData)) self.inczonemanage(uniqueData, location, incLatitude, incLongitude, z1lat, z1lon, z2lat, z2lon, z3lat, z3lon) time.sleep(1) # emit counts self.signal.emit([ self.messages, self.advisories, self.alerts, self.warnings ])
def build_subscription_request(config): return client.SubscriptionRequest(config.get('DATA'), build_region(config['SERVICE_REGION']))
ch.setLevel(logging.INFO) formatter = logging.Formatter( '%(asctime)s-%(name)s-%(levelname)s: %(message)s', datefmt="%Y-%m-%dT%H:%M:%S") ch.setFormatter(formatter) logger.addHandler(ch) nwLat = 42.3344143862 nwLon = -83.056554794 seLat = 42.326815989116625 seLon = -83.033766746521 region = client.GeographicRegion(nwLat, nwLon, seLat, seLon) sub_data_type = "veh" # veh, int, agg sub_request = client.SubscriptionRequest(sub_data_type, region) host = "52.90.45.32:8080/ode" userName = "******" password = "******" ode = client.ODEClient(host) #ode = client.ODEClient(host,userName,password) # only required if no userName or password is # provided in the constructor. # # Access Token is short lived token that will expire. # A new Token will need to be requested if the websocket is stopped ode.get_token(userName, password)
def build_sub_request(self, data_type): return client.SubscriptionRequest(data_type, self.region)
def inflofield(self, username, password, server, frequency, location): #self.logger = logger.getLogger('ODEApplication.inflofield') if location == 0: Loc = 'Larned Street' nwLat = 42.53790 nwLon = -83.47790 seLat = 42.30575 seLon = -82.84275 else: Loc = 'Telegraph Road' nwLat = 42.517879 nwLon = -83.306150 seLat = 42.448886 seLon = -83.259115 self.logger.debug('INFLO is using Field Data on %s.' % Loc) region = client.GeographicRegion(nwLat, nwLon, seLat, seLon) sub_data_type = "veh" # veh, int, agg sub_request = client.SubscriptionRequest(sub_data_type, region) host = str(server) userName = str(username) password = str(password) ode = client.ODEClient(host) ode.get_token(userName, password) ode.setRequest(sub_request) self.logger.debug('VSD Subscription Requested.') async = client.AsyncODEClient(odeClient=ode) async .start() # will connect to the ODE in a separate thread. while True: CVData = [] #stores raw data uniqueData = [] #stores processed data # reset current counts self.messages, self.triggers = 0, 0 if not async .is_buffer_empty(): items = async .get_all_messages() # update current number of messages self.messages = math.log(len(items), 10) #items = async.get_messages(10) # Specifiy number of items to process for record in items: #logger.info("%s", record.get_payload_value('dateTime')) vehList = [0, 0, 0, 0, 0, 0, 0] vehList[0] = record.get_payload_value('tempId') vehList[1] = record.get_payload_value('latitude') vehList[2] = record.get_payload_value('longitude') vehList[3] = record.get_payload_value('speed') vehList[4] = record.get_payload_value('heading') vehList[5] = record.get_payload_value('dateTime') vehList[6] = record.get_payload_value('groupId') self.logger.debug('Data Received: %s' % str(vehList)) if vehList[1] != None: CVData.append(vehList) #print record.get_payload_value(key) #Get latest data from a vehicle. vehIDs = [] for i in range(1, len(CVData)): vehData = CVData[i] if vehData[0] not in vehIDs: uniqueData.append(vehData) vehIDs.append(vehData[0]) self.logger.debug('Unique Data Submitted to INFLO %s' % str(uniqueData)) self.inflomanage(uniqueData, location) self.signal.emit([self.messages, self.triggers]) time.sleep(frequency)
def pre_built_subscriptions(data_type): return client.SubscriptionRequest(data_type, pre_built_region())