How to receive push notifications from another server?



  • I would like to receive notifications from another server in my module. To be more precise, I have a running openhab server and I would like to display the state of lights and window contacts on my mirror. Up to now, I am using the first version of the mirror:

    magic mirror with floor plan and window contacts

    Currently, I use the openhab REST API to pull the states every 10 seconds, but this produces a lot of requests on the openhab server and an update delay of up to 10 seconds. Instead, I would like the openhab server to tell my mirror each state change. On the openhab side, I can easily add some arbitrary java code, for example to perform some http requests or to open and communicate via a socket connection to a specific IP.

    But how to implement a listener in a MM module? I don’t have much experience with electron and the new MM application infrastructure yet. How can I configure my module to receive notifications from another server? Is there maybe some module that does something similar?



  • The MagicMirror contains a SocketIO server. You could connect to that server and push notifications on the module specific channel. It’s an undocumented feature, so you might need to digg into the code.



  • Thanks for the really quick answer! 🙂
    Do you have any hint in which files I could start digging?



  • I did some experiments but no success yet. Maybe you could clarify some things:

    • What do you mean by ‘module specific channel’? How does that work?
    • I tried to emit an event via a java application, but I don’t know which parameters to use so that the event is passed to my module?
    • Where is the code that processes incoming socket events?

    I tried socket.io-java-client, but nothing happens on the server (log remains empty, module does not return anything):

    public static void main(String[] args) throws Exception {
    	Socket socket = IO.socket("http://raspi:8080"); // I also tried: http://raspi:8080/socket-test-module
    	socket.connect();
    	socket.emit("notification", "ping");
    	socket.close();
    }
    

    Any ideas how to get a simple external socket client running?



  • @paphko said in How to receive push notifications from another server?:

    On the openhab side, I can easily add some arbitrary java code, for example to perform some http requests or to open and communicate via a socket connection to a specific IP.

    in a module i forked from paviro, there is a functionality where you can make http requests to the module https://github.com/fewieden/MMM-syslog/blob/master/node_helper.js#L16



  • @strawberry-3.141 Awesome, thank you! That’s exactly what I was looking for 🙂