• Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
MagicMirror Forum
  • Recent
  • Tags
  • Unsolved
  • Solved
  • MagicMirror² Repository
  • Documentation
  • 3rd-Party-Modules
  • Donate
  • Discord
  • Register
  • Login
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Module Sending notification to a python project

Scheduled Pinned Locked Moved Solved Requests
12 Posts 2 Posters 4.3k Views 2 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    bimbim2401
    last edited by bimbim2401 Jun 4, 2018, 10:11 AM Jun 4, 2018, 9:52 AM

    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

    I 1 Reply Last reply Jun 4, 2018, 11:30 AM Reply Quote 1
    • I Offline
      idoodler Module Developer @bimbim2401
      last edited by Jun 4, 2018, 11:30 AM

      @bimbim2401 Congratulations!

      1 Reply Last reply Reply Quote 0
      • 1
      • 2
      • 2 / 2
      2 / 2
      • First post
        11/12
        Last post
      Enjoying MagicMirror? Please consider a donation!
      MagicMirror created by Michael Teeuw.
      Forum managed by Sam, technical setup by Karsten.
      This forum is using NodeBB as its core | Contributors
      Contact | Privacy Policy