Esempio n. 1
0
File: hueni.py Progetto: fhats/hueni
def daemon_loop(config, muni_token, bridge):
    triggered_rules = []

    for stop_id, stop_config in config['stops'].iteritems():
        stop = Stop(muni_token, "", stop_id)

        for route_id, route_config in stop_config.iteritems():
            departure = stop.next_departures(route_id,
                                             route_config['direction'])
            print "%s - %s" % (route_id, departure.times)
            departure_rules_triggered = process_departures(
                departure, bridge, route_config)
            triggered_rules.extend(departure_rules_triggered)

    desired_light_states = colate_lights(triggered_rules)

    trigger_lights(bridge, desired_light_states)

    triggered_lights = set()
    for rule in triggered_rules:
        triggered_lights.update(rule['lights'].keys())

    for light_id in natural_light_state.iterkeys():
        if light_id not in triggered_lights:
            reset_light(bridge, light_id)

    return False
Esempio n. 2
0
File: hueni.py Progetto: fhats/hueni
def daemon_loop(config, muni_token, bridge):
    triggered_rules = []

    for stop_id, stop_config in config['stops'].iteritems():
        stop = Stop(muni_token, "", stop_id)

        for route_id, route_config in stop_config.iteritems():
            departure = stop.next_departures(route_id, route_config['direction'])
            print "%s - %s" % (route_id, departure.times)
            departure_rules_triggered = process_departures(departure, bridge, route_config)
            triggered_rules.extend(departure_rules_triggered)

    desired_light_states = colate_lights(triggered_rules)

    trigger_lights(bridge, desired_light_states)

    triggered_lights = set()
    for rule in triggered_rules:
        triggered_lights.update(rule['lights'].keys())

    for light_id in natural_light_state.iterkeys():
        if light_id not in triggered_lights:
            reset_light(bridge, light_id)

    return False
Esempio n. 3
0
def addStop(StopID):
    """
    Adds a stop to the list of stops for the user invoking the skill
    """
    if StopID is None:
        return question(render_template("no_stop_id")).reprompt(
            render_template("no_stop_id_reprompt"))

    stop = Stop(TOKEN, StopID, StopID)

    try:
        stop.load()
    except Exception:
        log.exception("error loading the stop")
        return question(render_template(
            "add_stop_question",
            stop=StopID)).reprompt(render_template("add_stop_reprompt"))

    departures = stop.all_departures()
    buses = list(set(d.route for d in departures))

    if len(buses) == 1:
        newStop = dict(code=stop.code, name=stop.name, buses=[buses[0]])
        return updateStopList(session.user.userId, newStop)
    else:
        session.attributes[STOPID_KEY] = stop.code
        session.attributes[STOPNAME_KEY] = stop.name
        session.attributes[BUSES_KEY] = ",".join(buses)

        return question(
            render_template("add_bus_question",
                            buses=getSentence(buses),
                            stop=StopID,
                            bus=buses[0])).reprompt(
                                render_template("add_bus_reprompt"))
Esempio n. 4
0
	def test_departures(self):
		route = Route(self.token, "SF-MUNI", "45-Union Stockton", "45", True)
		stop = Stop(self.token, "Union St and Buchanan St", "17056")
		departures = stop.next_departures(route.code)
		self.assertIsNotNone(departures)
		self.assertEqual(departures.route, route.code)
		self.assertTrue(len(departures.times) > 0)
		for time in departures.times:
			self.assertIsNotNone(time)

		outbound_departures = stop.next_departures(route.code, direction=route.OUTBOUND)
		self.assertIsNotNone(outbound_departures)
		self.assertEqual(outbound_departures.route, route.code)
		self.assertTrue(len(outbound_departures.times) > 0)
		for time in outbound_departures.times:
			self.assertIsNotNone(time)
Esempio n. 5
0
def addBus(BusID):
    """
    Adds a bus to the list of stops for the user invoking the skill
    """
    if STOPID_KEY not in session.attributes or \
            STOPNAME_KEY not in session.attributes or \
            BUSES_KEY not in session.attributes:
        return askToAddAStop()

    buses = session.attributes[BUSES_KEY].split(",")

    if BusID is None:
        return question(render_template("no_bus_id", bus=buses[0])).reprompt(
            "no_bus_id_reprompt", bus=buses[0])

    BusID = BusID.upper()
    stop = Stop(TOKEN, session.attributes[STOPID_KEY],
                session.attributes[STOPID_KEY])

    if BusID not in buses:
        return question(render_template("bad_route", bus=BusID)).reprompt(
            render_template("bad_route", bus=BusID))
    else:
        newStop = dict(code=stop.code,
                       name=session.attributes[STOPNAME_KEY],
                       buses=[BusID])
        return updateStopList(session.user.userId, newStop)
Esempio n. 6
0
def getBusTimes():
    """
    Returns the incoming times of the stops configured for the user. If not configured,
    it prompts the user to add a stop.
    """
    card_title = render_template('card_title')

    response = dynamodb_table.query(
        KeyConditionExpression=Key('userId').eq(session.user.userId))
    if isResponseEmpty(response):
        return askToAddAStop()
    else:
        departures = []

        for key in response["Items"][0]['stops']:
            s = response["Items"][0]['stops'][key]
            stop = Stop(TOKEN, s["name"], s["code"])
            if "buses" in s:
                for r in s["buses"]:
                    try:
                        d = stop.next_departures(r)
                        readable_departure_times = getSentence(d.times)
                        departures.append(
                            dict(bus=d.route,
                                 departures=readable_departure_times))
                    except Exception:
                        log.exception("Failed to get departures for %s", r)

        if len(departures) == 0:
            return statement(render_template("get_departures_failed"))
        else:
            responseStatement = render_template("get_departures_success",
                                                departures=departures)

            return statement(responseStatement).simple_card(
                card_title, responseStatement)