Exemplo n.º 1
0
def speak(person_name, location_name, ignore_motion, ignore_confirmation,
          voice_id, no_audio, simulate, fail_confirm):
    try:
        while True:
            click.echo("Checking for messages . . .")

            lm = LocationManager()
            loc = lm.get_location(location_name)
            if not ignore_motion and not loc.is_motion:
                print 'Exiting. No motion detected at ' + location_name
                exit(1)
            speaker = Speaker(NoAudio=no_audio)
            message_manager = MessageManager(LocationName=location_name)
            click.echo('getting files')
            cache_manager = CacheManager(BucketName='pollexy-media',
                                         CacheName='chimes')
            cache_manager.sync_remote_folder()
            print 'Writing speech'
            vid, speech = message_manager.write_speech(PersonName=person_name)
            if vid:
                voice_id = vid
            if not speech:
                print "I have nothing to say"
                message_manager.delete_sqs_msgs()
            else:
                print "Speech:\n\n%s" % speech
                try:
                    pm = PersonManager()
                    p = pm.get_person(person_name)
                    do_speech = True
                    if fail_confirm:
                        logging.warning("FORCE FAILING confirmation")
                        reason, do_speech = "NoResponse", False

                    elif not no_audio and p.require_physical_confirmation and \
                            not ignore_confirmation:
                        lv = LocationVerification(PersonName=person_name,
                                                  LocationName=location_name,
                                                  VoiceId=voice_id)
                        do_speech, retry_count, timeout = \
                            lv.verify_person_at_location(SpeechMethod=say)

                    if do_speech:
                        speaker = Speaker(NoAudio=no_audio)
                        speaker.generate_audio(Message=speech,
                                               TextType='ssml',
                                               VoiceId=voice_id)
                        speaker.speak(IncludeChime=True)
                        message_manager.succeed_speech(dont_delete=simulate)
                    else:
                        message_manager.fail_speech(Reason=reason)
                finally:
                    speaker.cleanup()

    except Exception as exc:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print repr(
            traceback.format_exception(exc_type, exc_value, exc_traceback))
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemplo n.º 2
0
def location_list():
    lm = LocationManager()
    locs = lm.get_all()
    if locs is None:
        click.echo("There are no locations")
    else:
        for l in locs:
            click.echo(l.location_name['S'])
Exemplo n.º 3
0
def location_delete(name):
    lm = LocationManager()
    loc = lm.get_location(name)
    if loc:
        lm.delete(Name=name)
        click.echo('Deleted location {}'.format(name))
    else:
        click.echo("Location {} does not exist".format(name))
Exemplo n.º 4
0
def test_saving_switch_saves_id():
    l = LocationAvailability(LocationName='kitchen')
    id = 'myswitch'
    l.with_switch(HardwareId=id, Color='Red', Name='Test', Style='Circle')
    lm = LocationManager()
    lm.update_input_capabilities(l)
    loc = lm.get_location('kitchen')
    assert id in loc.input_capabilities.keys()
Exemplo n.º 5
0
def update_location_activity(obj):
    try:
        error_if_missing(obj, 'location_name')
        location_name = obj.location_name
        lm = LocationManager()
        response = lm.update_location_activity(location_name)
        print response
    except Exception as exc:
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemplo n.º 6
0
def test_db_window_set_with_muted_window_is_not_available():
    now_dt = arrow.get('2014-01-01T09:09:00.000-05:00')
    tw = TimeWindow(ical=ical_event, CompareDateTime=now_dt)
    l = LocationAvailability(LocationName='kitchen')
    l.add_window(tw)
    tw = TimeWindow(ical=ical_event, CompareDateTime=now_dt, IsMuted=True)
    l.add_window(tw)
    lm = LocationManager()
    lm.update_window_set(l)
    l = lm.get_location('kitchen')
    assert not l.is_available(dt=now_dt)
Exemplo n.º 7
0
def test_saving_window_set_saves_set():
    now_dt = arrow.get('2014-01-01T09:09:00.000-05:00')
    tw = TimeWindow(ical=ical_event, CompareDateTime=now_dt)
    la = LocationAvailability(LocationName='kitchen')
    la.add_window(tw)
    tw = TimeWindow(IsMuted=True, ical=ical_event, CompareDateTime=now_dt)
    la.add_window(tw)
    lm = LocationManager()
    lm.update_window_set(la)
    loc = lm.get_location('kitchen')
    assert loc.time_windows.count() == 2
Exemplo n.º 8
0
def test_unmute_location_unmutes_location():
    lm = LocationManager()
    lm.toggle_mute('kitchen', True)
    loc = lm.get_location('kitchen')
    assert loc.is_muted
    lm.toggle_mute('kitchen', False)
    loc = lm.get_location('kitchen')
    assert not loc.is_muted
Exemplo n.º 9
0
def test_verify_switch_with_press_returns_true():
    rpi_mock.GPIO.setmode.return_value = None
    rpi_mock.GPIO.setup.return_value = None
    rpi_mock.GPIO.input.return_value = False
    pm = PersonManager()
    p = Person(Name='calvin')
    p.require_physical_confirmation = True
    pm.update_window_set(p)
    l = LocationAvailability(LocationName='kitchen')
    id = 12
    l.with_switch(HardwareId=id, Color='Red', Name='Test', Style='Circle')
    lm = LocationManager()
    lm.update_input_capabilities(l)
    lv = LocationVerification(LocationName='kitchen', PersonName='calvin')

    done, count, timeout = lv.verify_person_at_location()
    print done, count, timeout
    assert done and count == 1 and timeout < 3
Exemplo n.º 10
0
def monitor_motion(obj):
    try:
        error_if_missing(obj, 'location_name')
        location_name = obj.location_name
        pir = MotionSensor(4)
        i = 0

        while True:
            t_end = time.time() + 15
            while time.time() < t_end:
                if pir.motion_detected:
                    i = i + 1
            if i > 100000:
                location_name = obj.location_name
                lm = LocationManager()
                lm.update_location_activity(location_name)
                print "Updating activity for " + location_name
            i = 0
    except Exception as exc:
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemplo n.º 11
0
def speak(person_name,
          location_name,
          ignore_motion,
          ignore_confirmation,
          voice_id,
          no_audio,
          simulate,
          fail_confirm,
          verbose):
    log = logging.getLogger('PollexyCli')
    if verbose:
        os.environ['LOG_LEVEL'] = 'DEBUG'
        log.setLevel(logging.DEBUG)
    try:
        while True:
            lm = LocationManager()
            loc = lm.get_location(location_name)
            if not ignore_motion and not loc.is_motion:
                print 'Exiting. No motion detected at ' + location_name
                exit(1)
            speaker = Speaker(NoAudio=no_audio)
            message_manager = MessageManager(LocationName=location_name)
            bm = message_manager.get_messages(MessageType='Bot',
                                              PersonName=person_name)
            if bm and len(bm) > 0:
                log.debug('Bot count = {}'.format(len(bm)))
                for bot in bm:
                    username = str(uuid.uuid4())
                    try:
                        lp = LexPlayer(
                            BotNames=bot.bot_names,
                            Alias="$LATEST",
                            Username=username,
                            VoiceId=voice_id,
                            IceBreaker=bot.ice_breaker,
                            Introduction=bot.introduction,
                            NoAudio=no_audio,
                            BotsRequired=bot.required_bots)
                        while (not lp.is_done):
                            lp.get_user_input()
                    except Exception as e:
                        print 'Bot failed: {}'.format(e)
                        raise
                message_manager.succeed_messages(dont_delete=simulate)

            cache_manager = CacheManager(BucketName='pollexy-media',
                                         CacheName='chimes')
            cache_manager.sync_remote_folder()
            vid, speech = message_manager.write_speech(PersonName=person_name)
            if vid:
                voice_id = vid
            if not speech:
                message_manager.succeed_messages(dont_delete=simulate)
                message_manager.delete_sqs_msgs()
            else:
                try:
                    pm = PersonManager()
                    p = pm.get_person(person_name)
                    do_speech = True
                    if fail_confirm:
                        log.warn("FORCE FAILING confirmation")
                        reason, do_speech = "NoResponse", False

                    elif not no_audio and p.require_physical_confirmation and \
                            not ignore_confirmation:
                        lv = LocationVerification(PersonName=person_name,
                                                  LocationName=location_name,
                                                  VoiceId=voice_id)
                        do_speech, retry_count, timeout = \
                            lv.verify_person_at_location(SpeechMethod=say)
                    log.debug('do_speech={}'.format(bool(do_speech)))
                    if fail_confirm:
                        message_manager.fail_messages(Reason=reason)
                    else:
                        if do_speech:
                            log.debug('starting speech')
                            speaker = Speaker(NoAudio=no_audio)
                            speaker.generate_audio(Message=speech,
                                                   TextType='ssml',
                                                   VoiceId=voice_id)
                            speaker.speak(IncludeChime=True)
                        log.debug('Succeeding messages')
                        message_manager.succeed_messages(dont_delete=simulate)
                finally:
                    speaker.cleanup()

    except Exception as exc:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        print repr(traceback.format_exception(exc_type, exc_value,
                   exc_traceback))
        click.echo("Error: %s" % str(exc))
        exit(2)
Exemplo n.º 12
0
def location_upsert(name):
    lm = LocationManager()
    lm.upsert(Name=name)
    click.echo('Upserted location {}'.format(name))
Exemplo n.º 13
0
def location_create(name):
    lm = LocationManager()
    lm.create(Name=name)