VVO Online Monitor
    (GET http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do)

    :param stop: Name of Stop
    :param offset: Minimum time of arrival
    :param limit: Count of returned results
    :param city: Name of City
    :param raw: Return raw response
    :return: Dict of stops

def monitor(stop, offset=0, limit=10, city='Dresden', *, raw=False):
    """
    VVO Online Monitor
    (GET http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do)

    :param stop: Name of Stop
    :param offset: Minimum time of arrival
    :param limit: Count of returned results
    :param city: Name of City
    :param raw: Return raw response
    :return: Dict of stops
    """
    try:
        r = requests.get(
            url='http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do',
            params={
                'ort': city,
                'hst': stop,
                'vz': offset,
                'lim': limit,
            },
        )
        if r.status_code == 200:
            response = json.loads(r.content.decode('utf-8'))
        else:
            raise requests.HTTPError('HTTP Status: {}'.format(r.status_code))
    except requests.RequestException as e:
        print('Failed to access VVO monitor. Request Exception', e)
        response = None

    if response is None:
        return None
    return response if raw else [
        {
            'line': line,
            'direction': direction,
            'arrival': 0 if arrival == '' else int(arrival)
        } for line, direction, arrival in response
        ]