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 5.1k 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.
    • idoodlerI Offline
      idoodler Module Developer @bimbim2401
      last edited by idoodler

      @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

        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

        idoodlerI 1 Reply Last reply Reply Quote 0
        • idoodlerI Offline
          idoodler Module Developer @bimbim2401
          last edited by

          @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

            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

            idoodlerI 1 Reply Last reply Reply Quote 1
            • idoodlerI Offline
              idoodler Module Developer @bimbim2401
              last edited by

              @bimbim2401 Congratulations!

              1 Reply Last reply Reply Quote 0
              • 1
              • 2
              • 2 / 2
              • First post
                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