#!/usr/bin/env python3 # -*- coding: utf-8 -*- # SMART SPEAKER THEATRE # This script reads the triggers for activated user intents sent by Snips over MQTT # Using this triggers, it will start particular actions and scripts # Libraries import re from config import characters, directions from logic import tts, read_script, select_script from subprocess import call import paho.mqtt.client as mqtt import json from time import sleep from pixel_ring import pixel_ring # === SETUP OF MQTT PART 1 === # Location of the MQTT server HOST = 'localhost' PORT = 1883 # Subscribe to relevant MQTT topics def on_connect(client, userdata, flags, rc): print("Connected to {0} with result code {1}".format(HOST, rc)) client.subscribe('hermes/intent/jocavdh:play_intro') # to check for intent to play the act client.subscribe('hermes/intent/jocavdh:play_question') # to check for the intent to continue to the next act client.subscribe('hermes/intent/jocavdh:play_verdict') # to check for the intent to continue to the next act client.subscribe('hermes/hotword/default/detected') client.subscribe("hermes/asr/textCaptured") client.subscribe("hermes/dialogueManager/sessionQueued") # === FUNCTIONS THAT ARE TRIGGERED WHEN AN INTENT IS DETECTED === def on_wakeword(client, userdata, msg): pixel_ring.think() # Function which is triggered when the intent introduction is activated def on_play_intro(client,userdata,msg): # # disable this intent to avoid playing another act triggered by the Google Home # client.publish("hermes/dialogueManager/configure", json.dumps({ # 'siteId': 'default', # 'intents': { # 'jocavdh:play': False # } # })) import pdb; pdb.set_trace() path = 'scripts_play/intro/' call(["python3", "act.py", 'scripts_play/intro/introduction_01.txt']) print('The act is over.') #on_play_question(client, userdata, msg) # Function which is triggered when the intent for another question is activated def on_play_question(client, userdata, msg): path = 'scripts_play/questions/' call(["python3", "act.py", select_script(path)]) print('The act is over.') # Function which is triggered when the intent for another question is activated def on_play_verdict(client, userdata, msg): path = 'scripts_play/verdict/' call(["python3", "act.py", select_script(path)]) print('The play is over.') # === SETUP OF MQTT PART 2 === # Initialise MQTT client client = mqtt.Client() client.connect(HOST, PORT, 60) client.on_connect = on_connect # Connect each MQTT topic to which you subscribed to a handler function client.message_callback_add('hermes/hotword/default/detected', on_wakeword) client.message_callback_add('hermes/intent/jocavdh:play_intro', on_play_intro) client.message_callback_add('hermes/intent/jocavdh:play_question', on_play_question) client.message_callback_add('hermes/intent/jocavdh:play_verdict', on_play_verdict) # Keep checking for new MQTT messages client.loop_forever()