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.

    [MMM-RTSPStream] - Video Streaming from Live Feeds & Security Cameras

    Scheduled Pinned Locked Moved Utilities
    602 Posts 67 Posters 1.9m Views 68 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.
    • JerryPJ Offline
      JerryP @Egnos
      last edited by

      @Egnos said in [MMM-RTSPStream] - Video Streaming from Live Feeds & Security Cameras:

      Hi everyone,
      I believe that the MMM - RTSPStream module is incompatible with the MMM-Pages multi page module!
      By removing MMM-Pages, the RTSPStream module works again.
      The link for the video stream works correctly both with VLC and with the “omxplayer” command.

      The version of MM I am using is the latest available 2.14.0.

      The error I find in the console is the following:

      MMM-RTSPStream.js:164 MMM-RTSPStream has resumed... rotateStreams: true, autoStart: true
      MMM-RTSPStream.js:368 Uncaught TypeError: Cannot read property 'getBoundingClientRect' of null
          at Class.playStream (MMM-RTSPStream.js:368)
          at Class.rotateStream (MMM-RTSPStream.js:123)
          at Class.setupStreamRotation (MMM-RTSPStream.js:94)
          at Class.resumed (MMM-RTSPStream.js:168)
          at newCallback (MMM-RTSPStream.js:186)
          at main.js:324
      

      Here is my configuration:

      {
      		   module: "MMM-RTSPStream",
      		   position: "bottom_right",
      		   header: "Test",
      		   config: {
      			    //initialSetup: true,
      				autoStart: true,
      				rotateStreams: true,
      				rotateStreamTimeout: 10,
      				moduleWidth: 354,
      				moduleHeight: 240,
      				localPlayer: 'omxplayer',
      				remotePlayer: 'none',
      				showSnapWhenPaused: false,
      				remoteSnaps: false,
      				
      				stream1: {
      					name: 'Ingresso',
      					url: 'rtsp://xxxxxxxxxxx:xxxxxxxxx@xxx.xxx.x.xxx:554/stream1',
      					frameRate: 'undefined',
      					//width: undefined,
      					//height: undefined,
      						},
      				}
      		},
      

      In the “bottom_right” region what I see:
      alt text

      Have any of you noticed this incompatibility?

      Any advice / help is welcome.
      Thanks.

      Goodmorning, I belive.

      rtsp://gebruikersnaam:wachtwoord@IPCAM:554/cam/realmonitor?channel=1&subtype=2

      Pleas run this line in a VLC player. if you can see the camera screen than you know that the connection is oke.
      After that we kan see what’s wrong whit the config.js
      bur first check if you see the camera feet…
      pleas

      Whits type camera you use???

      Jerry frome Holland

      E 1 Reply Last reply Reply Quote 0
      • E Offline
        Egnos @JerryP
        last edited by

        @JerryP thank you for answering me!
        The stream is ok, I think the problem is the coexistence between MMM-Pages and this module. For now I have managed using the omxplayer command which he launched from the terminal outside of MM.

        My Mirror https://forum.magicmirror.builders/topic/17262/the-raspimirror-was-born/7

        BKeyportB 1 Reply Last reply Reply Quote 0
        • BKeyportB Offline
          BKeyport Module Developer @Egnos
          last edited by

          @Egnos that’s the best method, it seems. Only way i can keep my streams from crashing.

          The "E" in "Javascript" stands for "Easy"

          1 Reply Last reply Reply Quote 0
          • S Offline
            sophia787
            last edited by

            Sorry at this time I don’t have any solution.

            https://racketsblog.com/best-tennis-rackets/

            1 Reply Last reply Reply Quote 0
            • P Offline
              Plainbroke 0
              last edited by

              I understand that the developer of this module is not supporting it, but
              I see a lot of people are using it or at least trying to…
              I have it working with 3 Wyze v2 cams, using omxplayer.
              I would like to see if using vlc would possibly fix the lag time loading the cam output… I have a approximately 10 second lag between module start up and the picture actually showing up…
              Problem is when I change the localPlayer: to vlc from omxplayer I get a blank screen screen. I reinstalled vlc player to my rpi but can not figure out how to get it to load vlc. I use carousel and have approx 35 different modules working through it… I tried pm2 start vlc and it did but still did not show a feed.
              I posted my config.js minus keys and passwords of course. Any help is appreciated…

              
              /* Magic Mirror Config Sample
               *
               * By Michael Teeuw http://michaelteeuw.nl
               * MIT Licensed.
               *
               * For more information on how you can configure this file
               * See https://github.com/MichMich/MagicMirror#configuration
               *
               */
              
              var config = {
              	address: "0.0.0.0", // Address to listen on, can be:
              	port: 8080,
              	ipWhitelist: [], // Set [] to allow all IP addresses
              	useHttps: false, // Support HTTPS or not, default "false"
              	language: "en",
              	timeFormat: 12,
              	units: "imperial",
              
              	modules: [
              		{
              			module: "MMM-Carousel",
              			config: {
              				transitionInterval: 53000,
              				ignoreModules: ["MMM-Snow"],
              				mode: "slides",
              				slides: [
              					["MMM-CalendarExt"],
              					["calendar", "clock", "compliments"],
              					["calendarH", "clock", "compliments"],
              //					["calendarN", "clock", "compliments"],
              					["iFrame"],
              					["MMM-ATM", "clock", "compliments"],
              					["MMM-BMI", "clock", "compliments"],
                                                      ["MMM-RTSPStream"],
              					["MMM-Bored", "clock", "compliments"],
              					["MMM-CalvinAndHobbes", "clock", "compliments"],
              					["MMM-CloneWarsQuotes", "clock", "compliments"],
              					["MMM-Cocktails"],
              					["MMM-COVID19", "clock", "compliments"],
              					["MMM-DailyQuote", "clock", "compliments"],
              					["MMM-DarkSkyForecast", "clock", "compliments"],
              					["MMM-Dogs", "clock", "compliments"],
              					["MMM-Evil", "clock", "compliments"],
              					["MMM-Gas", "clock", "compliments"],
              					["MMM-GmailFeed", "clock", "compliments"],
              					["MMM-History", "clock", "compliments"],
                                                      ["MMM-RTSPStream2"],
              					["MMM-icanhazdadjoke", "clock", "compliments"],
              					["MMM-ImagesPhotos", "clock", "compliments"],
              					["MMM-learnlanguage", "clock", "compliments"],
              					["MMM-MotionEye"],
              					["MMM-MyWordOfTheDay", "clock", "compliments"],
              					["MMM-NetworkScanner"],
              					["MMM-Parcel", "clock", "compliments"],
              					["MMM-PoemOfTheDay"],
              					["MMM-quote-of-the-day", "clock", "compliments"],
              					["MMM-RAIN-MAP"],
              					["MMM-rfacts", "clock", "compliments"],
              					["MMM-RTSPStream3"],
              					["MMM-SimpleLogo", "clock", "compliments"],
              					["MMM-SugarValue", "clock", "compliments"],
              					["on-this-day", "clock", "compliments"],
              					["random_quotes", "clock", "compliments"]
              				]
              			}
              		},
              
              		{
              			module: "clock",
              			position: "top_left",
              			classes: "clock-time-only",
              			config: {
              				timeFormat: 12,
              				displaySeconds: false,
              				showPeriodUpper: false,
              				showPeriod: false
              			}
              		},
              
              		{
              			module: "clock",
              			position: "top_center",
              			classes: "clock-date-only",
              			config: {
              				timeFormat: 12,
              				showPeriod: false,
              				dateFormat: "ddd, ll",
              				displaySeconds: false
              			}
              		},
              
              		{
              			module: "clock",
              			position: "top_right",
              			classes: "clock-time-only",
              			config: {
              				timeFormat: 12,
              				displaySeconds: false,
              				showPeriodUpper: false,
              				showPeriod: false
              			}
              		},
              
                              {
                                      module: "calendar",
                                      position: "middle_center",
                                      header: "Birthdays",
                                      config: {
                                              fade: false,
                                              maximumEntries: 9,
                                              timeFormat: "absolute",
                                              urgency: 3,
                                              getRelative: 24,
                                              calendars: [
                                                      {
                                                              symbol: "birthday-cake",
                                                              url: ""
                                                      }
                                              ]
                                      }
                              },
              
                              {
                                      module: "calendarH",
                                      position: "middle_center",
                                      header: "US Holidays",
                                      config: {
                                              maximumEntries: 9,
                                              timeFormat: "absolute",
                                              urgency: 3,
                                              getRelative: 24,
                                              calendars: [
                                                      {
                                                              symbol: "h-square",
                                                              url:""
                                                      }
                                              ]
                                      }
                              },
              
                              {
                                      module: "calendarN",
                                      position: "middle_center",
                                      header: "Nascar",
                                      config: {
                                              maximumEntries: 9,
                                              timeFormat: "absolute",
                                              urgency: 3,
                                              getRelative: 24,
                                              calendars: [
                                                      {
                                                              symbol: "automobile",
                                                              url: ""
                                                      }
                                              ]
                                      }
                              },
              
                              {
                                      module: "compliments",
                                      position: "bottom_bar",
                                      config: {
                                              remoteFile: "compliments.json"
                                      }
                              },
              
              	        {
              	                module: "iFrame",
              	                position: "middle_center",
              	                config: {
                                                      url: "",
              	                                width: "1000px",
              	                                height: "950px"
              	                }
              	        },
              
              		{
              			module: "MMM-ATM",
              			position: "middle_center",
              			config: {
              				multipleChoice: "Yes",
              				useHeader: false,
              				header: "Another Trivia Module!",
              				maxWidth: "1240px"
              			}
              		},
              
              		{
              			module: "MMM-BMI",
              			position: "top_center",
              			config: {
              				name: "Jeffory",
              				imperialUnits: true,
              				weight: "250",
              				height: "73",
              				herName: "Stacey",
              				herWeight: "140",
              				herHeight: "67",
              				useHeader: false,
              				header: "Our Body Mass Index",
              				maxWidth: "1000px"
              			}
              		},
              
              		{
              			module: "MMM-Bored",
              			position: "middle_center",
              			config: {
              				maxWidth: "1310px"
              			}
              		},
              
              		{
              			module: "MMM-CalendarExt",
              			position: "middle_center",
              			config: {
                                  maxHeight: "100%",
                                  maxWidth: "100%",
              				system: {
              					show: ["month"],
              					locale: "en",
              					showEmptyView: 1,
              					fullDayEventLocalize: 0,
              					redrawInterval: 1 * 60 * 1000,
              					useProfileConfig: 0,
              					startProfile: "Birthdays",
              				},
              				defaultView: {
              					position: "middle_center",
              					positionOrder: 1,
              					overflowRolling: 0,
              					overflowHeight: 300,
              					overflowDuration: 3,
              					onlyStartingTime: 0,
              					timeFormat: "h:mm a",
              					dateFormat: "ddd, M/D",
              					fullDayEventDateFormat: "ddd, M/D",
              					ellipsis: 0,
              					limit: 0,
              				},
              				views: {
              					month: {
              						showWeeks: 0,
              					},
              				},
              				defaultCalendar: {
              					profiles: [],
              					views: ["month", "upcoming"],
              					symbol: "cake-variant@md",
              					styleName: "style5",
              					replaceTitle: [],
              					classPattern: [],
              					classPatternWhere: ["title"],
              					symbolPattern: [],
              					symbolPatternWhere: ["title"],
              					maxEntries: 90,
              					maxDays: 365,
              					interval: 300000,
              				},
              				calendars: [
              					{
              						name: "Holidays",
              						url: "webcal://ical.mac.com/ical/US32Holidays.ics",
              						profile: [""],
              						symbol: "pine-tree@md",
              					},
              					{
              						name: "Birthdays",
              						url: "",
              						profile: [""],
              						symbol: "cake-variant@md",
              					},
              				],
              			},
              		},
              
              		{
              			module: "MMM-CalvinAndHobbes",
              			position: "middle_center",
              			config: {
              			        invertColors: false,
              			        grayScale: false,
              			        updateInterval: 1000 * 60 * 60 * 2, // 2 Hr
                                              maxWidth: "100%",
                                              maxHieght: "100%"
              			}
              		},
              
              		{
              			module: "MMM-CloneWarsQuotes",
              			position: "middle_center",
              			config: {
              			}
                     		},
              
              		{
              			module: "MMM-Cocktails",
              			position: "top_center",
              			config: {
              				maxHeight: "100%",
              				maxWidth: "100%"
              			}
              		},
              
              		{
              			module: "MMM-COVID19",
              			position: "middle_center",
              			config: {
              				header: "",
              				updateInterval: 300000,
              				worldStats: true,
              				delta: true,
              				lastUpdateInfo: true,
              				countries: [  "Mexico", "United Kingdom", "Italy", "Asia", "Africa", "Spain", "USA" ],
              				headerRowClass: "small",
              				rapidapiKey : ""
              			}
              		},
              
              		{
              			module: "MMM-DailyQuote",
              			position: "middle_center",
              			config: {
              				updateInterval: 1*60*60*1000,
              			}
              		},
              
              		{
              			module: "MMM-DarkSkyForecast",
              			position: "top_center",
              			classes: "default everyone",
              			disabled: false,
              			config: {
              				header: "",
              				apikey: "",
              				latitude: "",
              				longitude: "",
              				iconset: "3c",
              				maxHourliesToShow: 1,
              				concise: false,
              				forecastLayout: "table"
              			}
              		},
              
              		{
              			disabled: false,
              			module: "MMM-Dogs",
              			position: "middle_center",
              			config: {
              				updateInterval: 35 * 60 * 1000,
                                              maxHeight: "475px",
                                              maxWidth: "700px"
              			}
              		},
              
                              {
                                      disabled: false,
                                      module: "MMM-Evil",
                                      position: "middle_center",
                                      config: {
                                              updateInterval: 35 * 60 * 1000,
                                              maxHeight: "300px",
                                              maxWidth: "1320px"
                                      }
                              },
              
              		{
              			module: "MMM-Gas",
              			position: "middle_center",
              			config: {
              				zip : "",
              				typeGas: "",
              				sortBy: "price",
              				items: 12,
              				distance: true
              			}
              		},
              
              		{
              			module: "MMM-GmailFeed",
              			position: "middle_center",
              			config: {
              				username: "",
              				password: "",
              				header: false,
              				updateInterval: 60000,
              				maxEmails: 8,
              				maxSubjectLength: 30,
              				maxFromLength: 12,
              				playSound: false
              			}
              		},
              
              		{
              			module: "MMM-History",
              			position: "middle_center",
              			config: {
              				maxWidth: "1320px"
              			}
              		},
              
              		{
              			module: "MMM-icanhazdadjoke",
              			position: "middle_center",
              			config: {
              				maxWidth: "100%"
              			}
              		},
              
              		{
              			module: "MMM-ImagesPhotos",
              			position: "middle_center",
              			config: {
              				opacity: 0.9,
              				animationSpeed: 500,
              				updateInterval: 2000,
              				backgroundColor: "black",
              				width: "500px",
              				height: "500px",
              				fill: false
              			}
              		},
              
              		{
              			module: "MMM-learnlanguage",
              			position: "middle_center",
              			config: {
              				language: "spanish",
              				nextWordInterval: 2160000,
              		                    showpair: "showboth",
              		  	}
              		},
              
              		{
              			module: "MMM-MotionEye",
              			position: "middle_center",
              			config: {
              				url: "",
              				forcedRefreshInterval: 60000,
              				width: "1000px",
              				debug: false
              			}
              		},
              
              		{
              			module: "MMM-MyWordOfTheDay",
              			position: "middle_center",
              			config: {
              				header: "Word Of The Day",
              				apiKey: "",
                                              width: "1320px",
                                              height: "505px"
              			}
              		},
              
              		{
              			module: "MMM-NetworkScanner",
              			position: "top_center",
              			header: "Who's home",
              			config: {
              				devices: [
              					{ macAddress: "", name: "00 Stacey", icon: "female" },
              					{ macAddress: "", name: "00 Jeff", icon: "male" },
              					{ macAddress: "", name: "01 Netgear M1", icon: "server" },
              					{ macAddress: "", name: "03 Ubiquiti", icon: "wifi" },
              					{ macAddress: "", name: "04 Omada EAP225", icon: "wifi" },
              					{ macAddress: "", name: "224 PiHole", icon: "server" },
              					{ macAddress: "", name: "30 WyzeBridge", icon: "wifi" },
              					{ macAddress: "", name: "31 WyzeCam1 Garage", icon: "camera" },
              					{ macAddress: "", name: "32 WyzeCam2", icon: "camera" },
              					{ macAddress: "", name: "33 WyzeCam3South", icon: "camera" },
                                  { macAddress: "", name: "34 WyzeCam4", icon: "camera" },
              	                                 ],
              				network: "192.168.1.0/24",
              				showUnknown: false,
              				showOffline: false, // shows devices specified in the 'devices' option even when offline
              				showLastSeen: false, // shows when the device was last seen e.g. "Device Name - last seen 5 minutes ago"
                              		keepAlive: 400, // how long (in seconds) a device should be considered 'alive' since it was last found on the network
              	             		updateInterval: 1500, // how often (in seconds) the module should scan the network
                              		sort: true, // sort the devices in the mirror
                              		colored: false, // show devices colorcoded with color defined in devices [] //
                              		coloredSymbolOnly: false, // show symbol only in color //
              				maxWidth: "100%",
              				maxHieght: "100%"
              			}
              		},
              
              		{
              			module: "MMM-Parcel",
              			position: "middle_center",
              			config: {
              				header: "",
              				maxWidth: "1320px",
              				apiKey: "",
              				autoTranslate : "en",
              				compactness: 2,
              				hideExpired: true, // don't show expired parcels
              				hideDelivered: true
              			}
              		},
              
              		{
              			module: "MMM-PoemOfTheDay",
              			position: "middle_center",
              			config: {
              				textLimit: 1000,
              				lineLimit: 10,
              				detectLanguageApiKey: "",
              				languageSet: ["en"],
              				updateInterval: 60000
              			}
              		},
              
              		{
              			module: "MMM-quote-of-the-day",
              			position: "middle_center",
              			config: {
              				language: "en",
              				updateInterval: "10m"
              			}
              		},
              
              		{
              			module: "MMM-RAIN-MAP",
              			position: "middle_center",
              			config: {
              				animationSpeed: 600,
              				displayClockSymbol: true,
              				displayTime: true,
              				extraDelayLastFrame: 2000,
              				height: "750px",
              				lat: ,
              				lng: ,
              				map: "OSM",
              				markers: [
              					{ lat: , lng: -, color: "red" },
              					{ lat: , lng: -, color: "blue" }
              					],
              					onlyOnRain: false,
              					opacity: 1, //0 to 1 .65 default
              					timeFormat: 12,
              					updateIntervalInSeconds: 300,
              					width: "1240px",
              					zoom: 8,
              					zoomOutEach: 1,
              					zoomOutLevel: 3,
              				}
              		},
              
              		{
              			module: "MMM-rfacts",
              			position: "middle_center",
              			config: {
              				updateInterval: 30 * 60 * 1000,
              				maxHeight: "505px",
              				maxWidth: "1310px"
              			}
              		},
              
              		{
              			module: "MMM-RTSPStream",
              			position: "middle_center",
              			config: {
              				autoStart: true,
              				rotateStreams: true,
              				rotateStreamTimeout: 0,
              				moduleWidth: 1240,
              				moduleHeight: 700,
              				localPlayer: "vlc",
              				remotePlayer: "none",
              				showSnapWhenPaused: false,
              				remoteSnaps: false,
                                              stream1: {
                                              name: "Wyze Drive",
                                              url: "rtsp://xxxxx:xxxxx@192.168.1.31:554/live",
                                              frameRate: "15",
                                              width: 1240,
                                              height: 700,
                                              },
              			}
              		},
              
                              {
                                      module: "MMM-RTSPStream2",
                                      position: "middle_center",
                                      config: {
                                              autoStart: true,
                                              rotateStreams: true,
                                              rotateStreamTimeout: 0,
                                              moduleWidth: 1240,
                                              moduleHeight: 700,
                                              localPlayer: "vlc",
                                              remotePlayer: "none",
                                              showSnapWhenPaused: false,
                                              remoteSnaps: false,
                                              stream1: {
                                              name: "Wyze Drive",
                                              url: "rtsp://xxxxx:xxxxx@192.168.1.32:554/live",
                                              frameRate: "15",
                                              width: 1240,
                                              height: 700,
                                              },
                                      }
                              },
              
              		{
                                      module: "MMM-RTSPStream3",
                                      position: "middle_center",
                                      config: {
                                              autoStart: true,
                                              rotateStreams: true,
                                              rotateStreamTimeout: 0,
                                              moduleWidth: 1240,
                                              moduleHeight: 700,
                                              localPlayer: "vlc",
                                              remotePlayer: "none",
                                              showSnapWhenPaused: false,
                                              remoteSnaps: false,
                                              stream1: {
                                              name: "Wyze Drive",
                                              url: "rtsp://xxxxx:xxxxx@192.168.1.33:554/live",
                                              frameRate: "15",
                                              width: 1240,
                                              height: 700,
                                              },
                                      }
                              },
              
              		{
              			module: "MMM-SimpleLogo",
              			position: "middle_center", // This can be any of the regions.
              			config: {
              				maxHeight: "490px",
              				maxWidth: "1240px",
              				refreshInterval: 10000,
              				text: ""
              			}
              		},
              
              		{
              			module: "MMM-Snow",
              			position: "fullscreen_above",
              			config: {
              				flakeCount: 200,
              				theme: "winter" //"water" //"winter" //"love"
              			}
              		},
              
              		{
              			module: "MMM-SugarValue",
              			position: "top_center",
              			config: {
              				username: "",
              				password: "",
              				units: "mg",
              		                height: "505px",
                              		width: "1320px"
              			}
              		},
              
              		{
              			module: "on-this-day",
              			position: "middle_center",
              			config: {
              				updateInterval: 10 * 1000 * 60
              			}
              		},
              
              		{
              			module: "random_quotes",
              			position: "middle_center",
              			config: {
              			}
              		},
              
              	]
              };
              /*************** DO NOT EDIT THE LINE BELOW ***************/
              if (typeof module !== "undefined") {module.exports = config;}
              
              1 Reply Last reply Reply Quote 0
              • B Offline
                Biebermann
                last edited by

                Hello, is the module still maintained or not?

                1 Reply Last reply Reply Quote 0
                • C Offline
                  codac
                  last edited by

                  I keep getting this error:

                  0|mm       | [15.04.2021 15:10.29.116] [ERROR] TypeError: Cannot set property 'omx_stream1' of undefined
                  0|mm       |     at Timeout.worker [as _onTimeout] (/home/pi/MagicMirror/modules/MMM-RTSPStream/node_helper.js:367:87)
                  0|mm       |     at listOnTimeout (internal/timers.js:549:17)
                  0|mm       |     at processTimers (internal/timers.js:492:7)
                  
                  1 Reply Last reply Reply Quote 0
                  • M Offline
                    mnyqvist
                    last edited by

                    Hi

                    I just get a white border when my MM starts. I´m using VLC and in the player I can see the stream. Here are the error codes.

                    [17.06.2021 08:31.58.706] [LOG] Starting stream stream1 using VLC with args --width 352 --height 242 -I dummy --video-on-top --no-video-deco --no-embedded-video --video-title=stream1 http://admin:password@192.168.1.79/video.cgi…
                    [17.06.2021 08:31.58.728] [ERROR] Failed to start subprocess: [object Object].
                    [17.06.2021 08:31.58.751] [LOG] DP2: Config File Saved!
                    [17.06.2021 08:31.58.752] [INFO] DP2: Running window resizers…
                    [17.06.2021 08:31.58.768] [ERROR] DP2: Failed to start.
                    [17.06.2021 08:32.05.769] [INFO] DP2: Running window resizers…
                    [17.06.2021 08:32.05.779] [ERROR] DP2: Failed to start.
                    npm ERR! code ELIFECYCLE
                    npm ERR! errno 1
                    npm ERR! magicmirror@2.15.0 start: electron js/electron.js
                    npm ERR! Exit status 1
                    npm ERR!
                    npm ERR! Failed at the magicmirror@2.15.0 start script.

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