Read the statement by Michael Teeuw here.
Module Sending notification to a python project
-
Thanks both for your response
Do you think that the python code I have wrote is ok or can you give me the direction for the python code for listening to the notification
-
@bimbim2401 Well, my Python times are a long time ago. Just try to run this script ans log the output. I also highly recogmend you to open Chrome and look at the Websocket frames.
-
F12 and then network ? Right ?
-
@bimbim2401 Yep, on Windows its
F12
, on macOS itsalt
+cmd
+i
.- Open the
Network
-Tab - Look for the status code
101
(Switching Protocols) or just look for the typewebsocket
- Open the request
- Inspect the Socket as you wish (View frames, headers…)
- Open the
-
Sorry but i cannot succeed to launch multiple script i found to intercept the get request from the module in python.
i need some help … sorry this is my first program in python language
Here is the script i want to modify : https://github.com/shivasiddharth/GassistPi/blob/master/src/main.py
-
@bimbim2401 I am not a Python guy either. Start small, create a simple Python script that establishes a Websocket connection, then interprete the websocket messages and so on…
-
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 writein 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
-
@bimbim2401 Congratulations!