Example #1
0
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
Example #2
0
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
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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
                ])
Example #6
0
def build_subscription_request(config):
    return client.SubscriptionRequest(config.get('DATA'),
                                      build_region(config['SERVICE_REGION']))
Example #7
0
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)
Example #9
0
    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)
Example #10
0
def pre_built_subscriptions(data_type):
    return client.SubscriptionRequest(data_type, pre_built_region())