I use below code for AIY VOICE KIT google assistant. This kit uses a raspberry pi to run google assistant. So basicly you can build your own mini google home and control other raspbery pis or whatever will talk to python. I have it set up with the built-in python demo so that when I push the button on top of the pi I am able to talk to google with a microphone. It's sort of like saying "OK google" with a button.
#!/usr/bin/env python3
# Copyright 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""A demo of the Google Assistant GRPC recognizer."""
import subprocess
import aiy.cloudspeech
import argparse
import locale
import logging
import signal
import sys
from aiy.assistant.grpc import AssistantServiceClientWithLed
from aiy.board import Board
def volume(string):
value = int(string)
if value < 0 or value > 100:
raise argparse.ArgumentTypeError('Volume must be in [0...100] range.')
return value
def locale_language():
language, _ = locale.getdefaultlocale()
return language
def main():
logging.basicConfig(level=logging.DEBUG)
signal.signal(signal.SIGTERM, lambda signum, frame: sys.exit(0))
parser = argparse.ArgumentParser(description='Assistant service example.')
parser.add_argument('--language', default=locale_language())
parser.add_argument('--volume', type=volume, default=100)
args = parser.parse_args()
with Board() as board:
assistant = AssistantServiceClientWithLed(board=board,
volume_percentage=args.volume,
language_code=args.language)
while True:
logging.info('Press button to start conversation...')
board.button.wait_for_press()
logging.info('Conversation started!')
assistant.conversation()
if __name__ == '__main__':
main()
The program runs fine. However, there is no way to power it off without being connected to a desktop. I want to modify the program so that if I hold down the button for ten seconds, it will shutdown. If this makes any difference I'm using a raspberry pi zero to run this. Can anyone help me?
I wrote some python code for rc.local that allows me to shut it down with the built in button.
import subprocess
from aiy.board import Board
with Board() as board:
board.button.wait_for_press()
subprocess.call('sudo shutdown now', shell=True)
I hope it helps anyone with the same problem.