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.8k 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

      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