Hey,
i have succeed to make it works with the following in the main.py, my problem was due to the port which was already in use, and then i have to take another one.
add the import
from threading import Thread
from urllib.parse import unquote
then just before the main function add
class WebSocketsListener(Thread):
"""Thread chargé d'ecouter les messages sur la websocket."""
def __init__(self, assistant):
Thread.__init__(self)
self.websocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.websocket.bind(('127.0.0.1', 8081))
self.assistant = assistant
def run(self):
print ("Open socket")
while True:
self.websocket.listen(5)
client, address = self.websocket.accept()
print (format( address ))
response = client.recv(255)
if response != "":
print (response)
str_response = response.decode("utf-8")
if 'assistant' in str_response:
if 'mode' in str_response:
if 'start' in str_response:
print("start the assistant")
self.assistant.start_conversation()
if 'stop' in str_response:
print("stop the assistant")
self.assistant.stop_conversation()
elif 'say' in str_response:
token = str_response[str_response.find("say=")+4:str_response.find("HTTP")-1]
token = unquote(token)
say(token)
print ("Close socket")
client.close()
stock.close()
in the main function just before the for event in events
webSocketsListener = WebSocketsListener(assistant)
webSocketsListener.start()
With this, open a web browser and write
http://127.0.0.1:8081/assistant?mode=start
it will start manually the assistant like with the hotword"ok google"
http://127.0.0.1:8081/assistant?mode=stop
to stop the assistant if the conversation is too long
http://127.0.0.1:8081/assistant?say=Hello karim how are you
and then gassistPI will say what you write
in the magic mirror module, you have to send this request in the node helper.js
socketNotificationReceived: function(notification, payload) {
var res = "";
var ipadress = "127.0.0.1";
var port = "8081";
console.log("google assistant Node Helper Received a socket notification: " + notification + " payload:" + payload);
if (notification === "ASSISTANT_START"){
request("http://"+ipadress+":"+port+"/assistant?mode=start", { json: true }, (err, res, body) => {
if (err) { return console.log(err); }
console.log(body.url);
console.log(body.explanation);
});
}
else if (notification === "ASSISTANT_STOP"){
request("http://"+ipadress+":"+port+"/assistant?mode=stop", { json: true }, (err, res, body) => {
if (err) { return console.log(err); }
console.log(body.url);
console.log(body.explanation);
});
}
else if (notification === "ASSISTANT_SAY"){
console.log("assistant payload:"+payload);
request("http://"+ipadress+":"+port+"/assistant?say="+payload, { json: true }, (err, res, body) => {
if (err) { return console.log(err); }
console.log(body.url);
console.log(body.explanation);
});
}
}
Thanks for your help