• 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 May 31, 2018, 9:31 PM

    F12 and then network ? Right ?

    I 1 Reply Last reply Jun 1, 2018, 7:23 AM Reply Quote 0
    • I Offline
      idoodler Module Developer @bimbim2401
      last edited by idoodler Jun 1, 2018, 7:24 AM Jun 1, 2018, 7:23 AM

      @bimbim2401 Yep, on Windows its F12, on macOS its alt + cmd + i.

      • Open the Network-Tab
      • Look for the status code 101 (Switching Protocols) or just look for the type websocket
      • Open the request
      • Inspect the Socket as you wish (View frames, headers…)
      1 Reply Last reply Reply Quote 0
      • B Offline
        bimbim2401
        last edited by bimbim2401 Jun 2, 2018, 1:52 PM Jun 2, 2018, 1:38 PM

        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

        I 1 Reply Last reply Jun 2, 2018, 2:03 PM Reply Quote 0
        • I Offline
          idoodler Module Developer @bimbim2401
          last edited by Jun 2, 2018, 2:03 PM

          @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…

          1 Reply Last reply Reply Quote 0
          • 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