• 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.6k 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.
  • 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
              12/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