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.

    Show calendar based on IP Address accessed

    Scheduled Pinned Locked Moved Development
    68 Posts 3 Posters 21.4k Views 3 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.
    • M Offline
      MMRIZE @Spinster
      last edited by MMRIZE

      @Spinster
      With getip of @sdetweil and MMM-ModuleMonkeyPatch, I did it. (You don’t have to modify the original source code for future-proof.)

      Example.
      Server is running on 192.168.178.63 and I run 2 clients on 192.168.178.22 and 192.168.178.63.
      Both 2 clients can show different set of calendars.

      da786ea9-d7f4-4ad4-89ac-88c5621c03c6-image.png

      windows.192.168.178.22.png

      {
      	module: "MMM-ModuleMonkeyPatch",
      	config: {
      		patches: [
      			{
      				module: "calendar",
      				method: "socketNotificationReceived",
      				patch: async function (original, args) {
      					const [ notification, payload ] = args
      					if (notification === "CALENDAR_EVENTS") {
      						const calendarName = this.config.calendars.find((cal) => cal.url === payload?.url)?.name
      						const r = await fetch('http://192.168.178.63:8080/modules/getip')
      						const ip = JSON.parse(await r.text())?.[ 'address' ] ?? null
      						if (!this.config.clientMap?.[ ip ]?.includes(calendarName)) {
      							return original(notification, { ...payload, events: [] })
      						}
      					}
      					return original(notification, payload)
      				}
      			}
      		]
      	}
      },
      {
      	module: "getip",
      },
      {
      	module: "calendar",
      	header: "US Holidays",
      	position: "top_left",
      	config: {
      		clientMap: {
      			"192.168.178.63": [ "cal1", "cal2", "cal3" ],
      			"192.168.178.22": ["cal3", "cal4", "cal5"]
      		},
      		calendars: [
      			{
      				url: "...",
      				name: "cal1",
      			},
      			{
      				url: "...",
      				name: "cal2",
      			},
      			{
      				url: "...",
      				name: "cal3",
      			},
      
      			{
      				url: "...",
      				name: "cal4",
      			},
      			{
      				url: "...",
      				name: "cal5",
      			}
      		]
      	}
      },
      

      TO Improve
      Whenever notification CALENDAR_EVENTS coming, getip is called. After first execution, to store IP on the localStorage or cookie would be better.

      S S 2 Replies Last reply Reply Quote 0
      • S Offline
        Spinster @sdetweil
        last edited by

        @sdetweil will express ipfilter be useful? Similar to whitelist, can we try something

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          sdetweil @Spinster
          last edited by

          @Spinster no… as its in the wrong place… (inside node_helper…) we NEED the ip address to compare with

          just get it and return . one time

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • S Offline
            sdetweil @MMRIZE
            last edited by sdetweil

            @MMRIZE said in Show calendar based on IP Address accessed:

            (You don’t have to modify the original source code for future-proof.)

            BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
            that have to be processed… this is a bad waste of resources…

            and this exposes a cal problem, as if u fetch http://xyz on client 1 and client 2 and client 3, we fetch it 3 times. also bad
            this could also lead to different clients showing different data between fetchIntervals…

            Sam

            How to add modules

            learning how to use browser developers window for css changes

            M 2 Replies Last reply Reply Quote 0
            • M Offline
              MMRIZE @sdetweil
              last edited by

              @sdetweil said in Show calendar based on IP Address accessed:

              BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
              that have to be processed… this is a bad waste of resources…

              I Can’t understand your point.
              My code is just small injection that does filtering out calendars by condition on socketNotificationReceived. No additional fetching is needed.

              S 1 Reply Last reply Reply Quote 0
              • M Offline
                MMRIZE @sdetweil
                last edited by MMRIZE

                @sdetweil said in Show calendar based on IP Address accessed:

                @MMRIZE said in Show calendar based on IP Address accessed:

                (You don’t have to modify the original source code for future-proof.)

                BUT you are fetching cal for system not going to use it… SOME cals are 1000’s of entries especially old
                that have to be processed… this is a bad waste of resources…

                and this exposes a cal problem, as if u fetch http://xyz on client 1 and client 2 and client 3, we fetch it 3 times. also bad
                this could also lead to different clients showing different data between fetchIntervals…

                Well, if that is the issue, we need a new “calendar” module that can ignore duplicated feed on addCalendar.
                Regardless of my code, the original calendar module will fetch a same feed multiply on multi clients. It’s MM’s limitation.

                S 1 Reply Last reply Reply Quote 0
                • S Offline
                  sdetweil @MMRIZE
                  last edited by sdetweil

                  @MMRIZE yes

                  @Spinster

                  see later post

                  Sam

                  How to add modules

                  learning how to use browser developers window for css changes

                  S 1 Reply Last reply Reply Quote 0
                  • S Offline
                    sdetweil @MMRIZE
                    last edited by

                    @MMRIZE said in Show calendar based on IP Address accessed:

                    My code is just small injection that does filtering out calendars by condition on socketNotificationReceived. No additional fetching is needed.

                    AFTER fetching… so throw away data, which we fetched , knowing we wouldn’t use it…

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    M 1 Reply Last reply Reply Quote 0
                    • S Offline
                      Spinster @MMRIZE
                      last edited by

                      @MMRIZE I tried it, but it is still showing the calendar even if there is no calendar defined for the ip. I edited only the config.js file and added your code. Modified the calendars to suite mine. I could see even if there is no calendar defined for a particular ip. Please advice

                      M 1 Reply Last reply Reply Quote 0
                      • S Offline
                        Spinster @sdetweil
                        last edited by

                        @sdetweil Is this working? Should I try it, please advice

                        S 1 Reply Last reply Reply Quote 0
                        • 1
                        • 2
                        • 3
                        • 4
                        • 5
                        • 6
                        • 7
                        • 3 / 7
                        • 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