• 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.5k 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 May 31, 2018, 5:36 PM

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

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