MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    • Profile
    • Following 0
    • Followers 5
    • Topics 18
    • Posts 269
    • Groups 1
    SnilleS Online
    1. Home
    2. Snille
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    Snille

    @Snille

    Module Developer

    3D-Printing geek with a passion for electronics and software. Work in Windows, prefer Linux, have the Amiga in my heart and FPV in my fingers!

    132
    Reputation
    6.3k
    Profile views
    269
    Posts
    5
    Followers
    0
    Following
    Joined
    Last Online
    Age 54
    Website www.snille.net
    Location Sweden

    Snille Unfollow Follow
    Module Developer
    • Snilles Magic Mirror Project

      Hi all!
      Here is my Mirror so far…
      c2bf3d5c-298d-4d75-abe5-fad9825a097e-MagicMirror.jpg
      For more pictures and some building information se here.
      I have added a comment on every picture in the gallery so you know what you are looking at. :)

      Update: 2026-08-10: The mirror has been “rebuilt” so that Home Assistant owns what is displayed.
      Update: 2023-01-16: Updated almost all information about mirror functionality and additions.
      Update: 2020-01-23: Video of some of the features…

      I’m still finding more use-cases for my Mirror, nowadays it is also heavily integrated with my Home Assistant…
      Even my family think it’s useful now!

      Just so you know, my Mirror is NOT using a Raspberry PI any more, I switched over to a small NUC computer, the RPi is not powerful enough for all the stuff that’s going on here.

      The Mirror has Mirror “Profiles” for each of us in the family, then also a “Weather”, “Work”, “Media” and “Clock” profile.
      Both our cats have a profiles (because why not?) as well.
      Mostly the profiles switches by time and day of the week. I’ll get in to the scheduling later. :)

      Short backstory. I live in the south of Sweden (in a small city called Åstorp) with my wife and daughter.
      I work in Stockholm (the capital of Sweden). The distance between the cities are about 560 kilometer or 248 (US/UK) miles.
      So, to get to work I fly. I do this two days a week (four flights). As you probably know flights
      gets delayed from time to time and when this happens I don’t want my wife to worry (too much)
      and I don’t want to have to text her for every change…

      So, to solve this, I opened a mail account for the mirror.
      Then I registered an account using the mirrors mail on the site “Flight Aware”.
      The site can send tracking information mails about (maximum 5) flights (airlines) for free!
      Then I use node-red in HA (Home Assistant) to fetch the mail, parse it and present the latest information on a MMM-Memo.
      This way my Wife only have to glance at the mirror to see if I’m going to be late or not. When I arrive at home (HA registers my presence) the Memo resets and gets hidden.

      Here are some scenarios when the Mirror is used:
      • Any of the cats enters or leaves through the cat-door, a message is sent telling what cat went where (shown for 5 minutes)
      • Any battery is low in any of my battery powered sensors in the house the leds around the Mirror will turn blue and a message telling what battery needs changing. (shown for 5 minutes) This will repet once every day until battery is replaced.
      • When the “default” light turns on (from HA if time is right or from remote) a message will say “Lights…” (for 5 minutes).
      • If temperature in the fridge or freezer is high the leds will turn red around the Mirror and a message will be displayed (for 5 minutes every 30 minutes until fixed).
      • If a leakage is discovered under the sink or in the bathrooms pipe switch, leds will turn red and a message will be displayed (indefinitely until fixed).
      • If any of my 3D-Printers starts to print, the Bed-Camera and status will show until print is done.
      • If at night and all lights is out and any of the motion-tracker are triggerd in the house. The leds will glow (yellow) faintly so you can see.
      • If the Vacuum Robot is cleaning, the map and status is shown until finished or paused.
      • If a bird visits the Bird Buddy the latest picture (and guessed species) will show up on the Mirror.
      • When I brew an Espresso, the total amount of brewed cups will show up in a message and when done brewing a new message show, wishing you to enjoy your coffee.
      • The positions of our cats GPS necklaces updates every minute and gets shown on the “MMM-GoogleMaps-Tracking” module.
      • The Mirror turns off the screen 00:15 all nights. It turns on again at 04:45 on Mondays and Wednesdays, the the other weekdays it turns on at 06:00 and on weekends it turns on at 07:00.
      Most of the information shown on the Mirror is triggered from Home Assistant via notifications (using MMM-Remote-Control).

      Module classes:
      • The modules with the “Default and Everyone” class are showed all the time (when not manually hidden).
      • The modules in the “None” class are only shown manually or with triggered by events by the Mirror or HA.
      • Each family member has a personal profile class (Erik, Camilla, Louise, Kakan and Cappuccino).
      • Then I have a set of specific classes for specific “themes”, those are: Jobba (Work), Media, Klocka (clock) and Väder (Weather).
      • Scheduled modules has it’s own class. This is for “single” day events. Like Halloween, Birthdays, Christmas and New Years Eve.
      • Modules with no class defined but used in other ways is MMM-Remote-Control, MMM-ModuleScheduler and MMM-ProfileSwitcher.

      For a list of all modules see end of this post.

      ModuleScheduler Information:
      Some profiles switches and functions are controlled by the scheduler (MMM-ModuleScheduler).

      **Scheduling (updated 2026):**
      
      I no longer use `MMM-ModuleScheduler` at all — it is removed. Everything it did
      (screen on/off times, profile switching by time of day, and the per-module
      schedules) moved into a single Node-RED flow in Home Assistant, where the whole
      schedule is one editable table instead of two dozen cron strings.
      

      7c844d8c-8275-48e6-aebb-d9c673adfeb5-image.jpeg

      ProfileSwitcher Information:

      • In the profile switcher (MMM-ProfileSwitcher) each profile has their own greeting and leave message.
      • The personal profiles and "Clock" has a timeout of 5 minutes, after that the mirror goes back to the "default" profile, if triggered via MMM-TouchNavigation.
      • The "Jobba" (Work), "Media" and "Väder" (Weather) profile does not have a time out, because it's suppose to be able to stay "all day" sometimes.
      

      TouchNavigation Information:

      • The "Text Clock" profile has a picture of an analog clock.
      • The "Kakan" profile has a picture of Kakan (Cat).
      • The "Cappuccino" profile has a picture of Cappuccino (Cat).
      • Each family member (human) profile has the persons own picture on the button.
      • The "Jobba" (Work) profile has a "gear" picture.
      • The "Media" profile has a "Camera Roll" picture.
      • The "Väder" (Weather) profile has a spinning globe (gif animation) picture.
      

      Above the TouchNavigation I have the MMM-ModuleBar
      It normally shows only two buttons. The first one is the “Hide all” function and the second one “expands” the MMM-ModuleBar. What’s really going on here is, when you press the “Expand” button, it hides the current ModuleBar and un-hides a second ModuleBar that contain the following buttons.

      ModuleBar Information (left to right):

      • Show/Hide this MMM-ModuleBar module and the "other" one.
      	module: "MMM-Modulebar"
      	idnum: [56,57]
      	symbol: "chevron-circle-left"
      • Show the Bird Buddy last visitor Text and Picture MMM-homeassistant-sensors modules (from HA).
      	module: "MMM-homeassistant-sensors"
      	idnum: [54,55]
      	symbol: "dove"
      	symbol2: "eye-slash"
      • Show/Hide the default Clock module.
      	module: "clock"
      	symbol: "bell"
      	symbol2: "bell-slash"
      • Show/Hide the default MMM-News module.
      	module: "MMM-News"
      	symbol: "fas fa-newspaper"
      	symbol2: "far fa-newspaper"
      • Show/Hide the MMM-MoonPhase module.
      	module: "MMM-MoonPhase"
      	symbol: "fas fa-moon"
      	symbol2: "far fa-moon"
      • Show/Hide the Cats location MMM-GoogleMaps-Tracking module, this shows the geographic location of our cats (from HA).
      	module: "MMM-GoogleMaps-Tracking"
      	symbol: "map-marked-alt"
      	symbol2: "map"
      • Show/Hide the MMM-homeassistant-sensors module showing the information local weather station (from HA).
      	module: "MMM-homeassistant-sensors"
      	idnum: 28
      	symbol: "thermometer-three-quarters"
      	symbol2: "thermometer-empty"
      • Show/Hide the MMM-Globe3D module.
      	module: "MMM-Globe"
      	symbol: "globe-europe"
      	symbol2: "globe-americas"
      • Show/Hide the MMM-TextClock module.
      	module: "MMM-TextClock"
      	symbol: "comment"
      	symbol2: "comment-slash"
      • Show/Hide the default Weather module.
      	module: "weather"
      	symbol: "cloud"
      	symbol2: "cloud-moon"
      • Show/Hide the MMM-nixie-clock module. 
      	module: "MMM-nixie-clock"
      	symbol: "eye"
      	symbol2: "eye-slash"
      • Show/Hide the MMM-cryptocurrency module.
      	module: "MMM-cryptocurrency"
      	symbol: "fab fa-bitcoin"
      	symbol2: "fab fa-btc"
      • Show/Hide the MMM-homeassistant-sensors module that show total Espresso cups/price/beans I have brewed in my Espresso Machine.
      	module: "MMM-homeassistant-sensors"
      	symbol: "mug-hot"
      	symbol2: "coffee"
      • Show/Hide the MMM-MotionEye module for the camera that show my Prusa i3 MK3 3D Printer bed.
      	module: "MMM-MotionEye"
      	idnum: 35
      	symbol: "layer-group"
      	symbol2: "toggle-off"
      	showUrl: "http://10.0.0.112:8080/motioneye/1",
      	hideUrl: "http://10.0.0.112:8080/motioneye/hide/1"
      • Show/Hide  the MMM-MotionEye module for the camera that show my Prusa i3 MK2.5 3D Printer bed.
      	module: "MMM-MotionEye"
      	idnum: 36
      	symbol: "layer-group"
      	symbol2: "toggle-off"
      	showUrl: "http://10.0.0.112:8080/motioneye/2",
      	hideUrl: "http://10.0.0.112:8080/motioneye/hide/2"
      

      Here are the defined classes and the modules they trigger.

      Profile classes: {
      	Eriks Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Clock - The time (Default module).
      		Compliments - Personal compliments (from specified json file).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-cryptocurrency - Current bitcoin price.
      		MMM-homeassistant-sensors - Espresso Machine information.
      		MMM-homeassistant-sensors - Local weather station information.
      		MMM-homeassistant-sensors - Information about the House (humidity, temperature and more).
      		MMM-Tibber - Information about price on electricity / hour.
      		MMM-News - Latest news from Sweden.
      	}, 
      	Camillas Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Clock - The time (Default module).
      		Compliments - Personal compliments (from specified json file).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-MoonPhase - Current Moon phase.
      		MMM-News - Latest news from Sweden.
      		MMM-homeassistant-sensors - Local weather station information.
      		MMM-homeassistant-sensors - Information about the family's whereabouts. 
      	}, 
      	Louises Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Clock - The time (Default module).
      		Compliments - Personal compliments (from specified json file).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-MoonPhase - Current Moon phase.
      		MMM-homeassistant-sensors - Today school lunch.
      		MMM-homeassistant-sensors - Information about the family's whereabouts. 
      	},
      	Jobbas Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Clock - The time (Default module).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-JsonTable - Espresso Machine information.
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-cryptocurrency - Current bitcoin price.
      		MMM-homeassistant-sensors - Local weather station information.
      		MMM-homeassistant-sensors - Information about the family's whereabouts. 
      		MMM-homeassistant-sensors - Information about the House (humidity, temperature and more).
      		MMM-Tibber - Information about price on electricity / hour.
      		MMM-News - Latest news from Sweden.
      	},
      	Medias Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Clock - The time (Default module).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-TautulliLatest - Latest Movies and TV-Series added to my Plex Server.
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-homeassistant-sensors - Local weather station information.
      		MMM-homeassistant-sensors - Information about the family's whereabouts. 
      		MMM-homeassistant-sensors - Information about the House (humidity, temperature and more).
      		MMM-Tibber - Information about price on electricity / hour.
      	},
      	Väders Modules: {
      		MMM-Profilepicture - Personal background picture.
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-Globe3D - Full disc 3D spinning globe with accurate weather clouds.
      		MMM-MoonPhase - Current Moon phase.
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-JsonTable - Espresso Machine information.
      		MMM-homeassistant-sensors - Local weather station information.
      		MMM-homeassistant-sensors - Information about the family's whereabouts. 
      		MMM-homeassistant-sensors - Information about the House (humidity, temperature and more).
      		MMM-Tibber - Information about price on electricity / hour.
      		MMM-News - Latest news from Sweden.
      	},
      	Kakan Modules: {
      		MMM-Profilepicture - Personal Picture Collage.
      		Clock - The time (Default module).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-homeassistant-sensors - Kakans information about active minutes, hours inside / outside and trips in / out through the Cat-door. GPS battery charge and GPS status.
      	},
      	Cappuccino Modules: {
      		MMM-Profilepicture - Personal Picture Collage.
      		Clock - The time (Default module).
      		Weather - Local weather information at Mirrors location (Default module).
      		Weather - Local weather forecast at Mirrors location (Default module).
      		MMM-GoogleMaps-Tracking - Geolocation of our Cats.
      		MMM-homeassistant-sensors - Cappuccino information about active minutes, hours inside / outside and trips in / out through the Cat-door. GPS battery charge and GPS status.
      	},
      	Default and Everyones Modules: {
      		MMM-Memo - Displays memos (Used for displaying temporary information in my case).
      		MMM-Modulebar - Bar with buttons for toggling (show/hide) other modules.
      		MMM-TouchNavigation - Profile switching buttons.
      	},	
      	Nones Modules: {
      		Alert - Used for "urgent information".
      		MMM-Remote-Control - For controlling the Mirror using notifications and Web-Meny.
      		MMM-ProfileSwitcher - Handling the switching of the profiles. 
      		MMM-homeassistant-sensors - Prusa i3 MK3 (3D-Printer) printing information. Only visible when I'm printing. 
      		MMM-homeassistant-sensors - Prusa i3 MK2.5 (3D-Printer) printing information. Only visible when I'm printing. 
      		MMM-MotionEye - Displaying the Prusa i3 MK3 (3D-Printer) camera when in action (or using MMM-Modulebar).
      		MMM-MotionEye - Displaying the Prusa i3 MK2.5 (3D-Printer) camera when in action (or using MMM-Modulebar).
      		MMM-Modulebar - The "full" MMM-ModuleBar. Only visible when activating it from the "small" MMM-ModuleBar.
      	}
      }
      

      Full module list with IDs and usage:

      00 MMM-Remote-Control      17 MMM-JsonTable            34 MMM-homeassistant-sensors
      01 MMM-ModuleScheduler *   18 MMM-homeassistant-sensors 35 MMM-homeassistant-sensors
      02 MMM-ProfileSwitcher     19 MMM-TautulliLatest        36 MMM-homeassistant-sensors
      03 MMM-Videoplayer         20 compliments               37 MMM-homeassistant-sensors
      04 MMM-Profilepicture      21 compliments               38 MMM-Tibber
      05 MMM-Profilepicture      22 compliments               39 MMM-anotherNewsFeed
      06 MMM-Profilepicture      23 MMM-Weather-SMHI          40 MMM-Snow *
      07 MMM-Profilepicture      24 MMM-homeassistant-sensors 41 MMM-Snow *
      08 MMM-Profilepicture      25 MMM-cryptocurrency        42 MMM-Snow *
      09 MMM-Profilepicture      26 MMM-Memo                  43 MMM-nixie-clock
      10 MMM-Profilepicture      27 MMM-homeassistant-sensors 44 MMM-homeassistant-sensors
      11 MMM-Profilepicture      28 MMM-MotionEye             45 MMM-homeassistant-sensors
      12 MMM-Profilepicture      29 MMM-homeassistant-sensors 46 MMM-Modulebar (small)
      13 MMM-Profilepicture      30 MMM-MotionEye             47 MMM-Modulebar (full)
      14 alert                   31 MMM-Globe3D               48 MMM-TouchNavigation
      15 MMM-GoogleMaps-Tracking 32 MMM-MoonPhase             49 MMM-ImmichSlideShow
      16 clock                   33 MMM-TextClock             50 MMM-HomeAssistant
      
      * = disabled
      

      I don’t know if you noticed but the frame around the mirror is “changeable”. I thought if I can display different things on the screen, I should be able to change the physical appearance of the mirror as well without having to build a completely new mirror. So, the front frame can easily be removed by just pulling out the bottom part and lifting it up. I have made two different front frames (as you have seen in the pictures). But I’ll probably do another one in time. :)

      Let me know if you want to know anything more. :)
      Thank you all for helping out and being awesome!

      posted in Show your Mirror
      SnilleS
      Snille
    • MMM-Chart - View your graphs on your Mirror

      Description:

      This Module adds graphs to your MagicMirror 2.1 using your JSON source(s) from a URL.
      It’s built upon the chartjs “ecosystem”.

      I’m currently using small PHP scripts to pull information from my own “house-database” and then let PHP create the JSON string form the data. :) You have to provide your own “data-source” of course. :)

      There are A LOT of configuration options in this module. I will update the README on git later on. But if you want to know more, just read the MMM-Chart.js. I have tried to document it fairly well.

      The source can be either a table of values for like this (updating the whole graph on every update):

       [["2017-04-21 15:58:00",8.3,95.5],["2017-04-21 14:55:00",9.3,90.5],["2017-04-21 12:56:00",10.7,87.7],["2017-04-21 11:53:00",10.5,87.7],["2017-04-21 11:01:00",10.6,88.8]]...
      

      That will give something like this:

      Screenshot:

      Two Line Graph
      Or you can use a “real time” source looking something like this (adding values to the graph on every update):

      [["2017-04-21 15:58:00",48.3,95.5,31]]
      

      Screenshot:

      Both together looks like this (video):
      Two Line Graph

      Download:

      [card:Snille/MMM-Chart]


      Version 1.0

      • Initial release.

      This is a work in progress…
      OBS: I have not yet tested this module on my RPI!!
      Please come with feedback/PR:s Let me know how it works.

      The idea was triggered from the “dynchart module” by Chris van Marl. Thank you!

      posted in Utilities
      SnilleS
      Snille
    • MMM-HomeAssistant-Sensors (Development) - Show your HA Sensors on your Mirror

      I could not find a “good enough” Home Assistant Module for the Mirror, so I forked and developed a bit on the one I thought worked the best.

      Description:

      Adds the defined Home Assistant Sensors to your Magic Mirror.

      Screenshots:

      Simplest possible:
      simple
      Different pictures depending on values from the sensors (with some modified CSS):
      simple+css
      Different icons depending on values from the sensors:
      simple+icons

      And here is my personal advanced “look”… :)
      Advanced

      Download:

      [card:Snille/MMM-homeassistant-sensors]

      posted in Utilities
      SnilleS
      Snille
    • MMM-Modulebar - A module that adds touch buttons for showing/hiding other modules.

      Description:

      This Module adds a touch menu to hide / show other the defined (in the config.js) modules.

      Screenshots:

      Module with symbols only in row mode:
      symbols row mode
      Module with symbols only in column mode:
      symbols column mode
      Module with symbols and text in column mode:
      symbols and text in column mode
      Module with symbols and text in row mode:
      symbols and text in row mode
      This is my own mirrors view (Bottom Bar) using some addition in the custom.css see below.
      my special

      Download:

      [card:Snille/MMM-Modulebar]

      Custom-CSS

      Here is my CSS settings for the module that I have added to my custom.css to give it the extra special look. :)

      /* MMM-Modulebar ------------------------------------*/
      .modulebar-button {
        margin: 1px;
        padding: 1px 1px;
        border: 2px solid #fff; 
        background-color: #fff;
        color: #000;
        border-radius: 0px;
        border-radius: 50%;
        width: 60px;
        height: 60px;
      }
      .modulebar-picture {
        margin: 0px 0px;
        border-radius: 50%;
      }
      .modulebar-menu {
        align-items: flex-start;
      }
      /*****************************************************/
      

      Version 0.2

      • Had to change the button array format a bit. Make sure to update your config to the new “standard”.
        The reason for the change where to be able control each module separately even if it is the same module multiple times. :)

      Version 0.1

      • Initial release.
      posted in Utilities
      SnilleS
      Snille
    • RE: stronger Raspberry Pi 3 Alternatives

      I just found this one: https://www.kickstarter.com/projects/librecomputer/libre-computer-board-next-gen-4k-sbc-dev-board-for/description
      It may be an alternative. :)

      posted in Hardware
      SnilleS
      Snille
    • Plexpy Module...

      Hi all!
      I know there is a Plex module out there. But it’s a bit limited.
      I’m currently using Plexpy (and frankly anyone who runs a Plex-server and loves statistics should).
      There a very nice API for plexpy
      All in nice JSON format…
      So, If someone feels up to it please, give it a try. :)

      Thank you.

      posted in Requests
      SnilleS
      Snille
    • RE: Snilles Magic Mirror Project

      @Mykle1 Thank you! :) And I have not yet published all the drawings and files for this this sculpture. :)

      posted in Show your Mirror
      SnilleS
      Snille
    • MagigMirror on Airtame!

      Hi all!
      Just wanted you all to know that you CAN actually use an Airtame to display the mirror!
      If you setup a “serveronly” instance of MM and then point your Airtame’s “Homescreen Backround” to a website and enter the URL to your MM (Server) there. It shows up!

      Of course you cant have any “touch” functionality and other “intelligence” on the Airtame. But if you just want to display stuff without interaction directly on the device it works great! You can also still use the “MMM-Remote” module to control what’s displayed on the device of course. Or why not MMM-Scheduler… :)

      I have tried this on an Airtime running with firmware version 3.0.0-b6.

      Enjoy!

      posted in Hardware
      SnilleS
      Snille
    • RE: Snilles Magic Mirror Project

      @ceddirr I saw your questions about the project… Answers below. :)

      First, I forgot to say thank you for your kind words!

      Question: “Which order is it? At first the IR frame, then the one way mirror, and finally the screen, is it correct?”

      Answer: Correct, from the “front” the IR-Frame is first, placed directly on to the mirror and behind the mirror sits the screen. :)

      Question: “I can see that the custom css of the MMM-Memo is already written in css file from the module’s folder. But, how do you manage to use it, and have this look with your memos? Mine are just white and simple… Thank you =)”

      Answer: Well, I’m actually not doing so much in the CSS file. The only thing I set in the custom.css is the size of the Memo. The rest is “built in”.

      This is the CSS part (in my custom.css file):

      /* MMM-Memo -----------------------------------------*/
      .MMM-Memo .small {
      	font-family: "Roboto Condensed", sans-serif;
      }
      .note {
        width: 500px;
        height: 200px;
      }
      /*****************************************************/
      

      And this is in my config.js:

      {
      	module: "MMM-Memo",
      	position: "upper_third",
      	classes: "default everyone",
      	config: {
      		memoTitle: "Flyginformation",
      		memoDisplayIfEmpty: false,
      		memoRotation: -4,
      		format: "YYYY-MM-DD - HH:mm",
      		memoWidth: 500,
      		memoDisplayHeader: true,
      		memoDisplayDuration: true,
      		memoDisplayId: true,
      		memoColorBackground: "LightGoldenrod",
      		memoDisplayNotification: true,
      	}
      },
      

      You can see all the options for the config on the MMM-Memo’s git.
      There are lot’s and lot’s of options for colors and themes. :)

      posted in Show your Mirror
      SnilleS
      Snille
    • Multi module install script

      Just to help you other people out there doing the same I’m doing, I made this little script to clone all the modules I’m using to a “new” mirror without any fuzz.
      First change the “Moddir” path to the correct one for you.

      array in script (I have all of mine in there, but just change or comment them out. :)

      Make the script executable (chmod +x installmodules.sh)
      And execute it.

      Each module will then be cloned and “npm installed” automatically.

      When it’s done, just copy the config.js and the custom.css files in place from your “other” mirror.
      Restart the “new” mirror (pm2 restart mm). Done! :)

      Here is the “installmodules.sh” script:

      #!/bin/bash
      
      ## ----------------------------------------------------------------------------
      ## Snilles automatic module clone and install script for MM2.
      ## ----------------------------------------------------------------------------
      
      ## Don't forget to add your public SSH key to your GIT profile!
      ## If you don't, nothing will be cloned!
      
      ## If you don't have an SSH key. This is how you get one.
      ## Generate SSH key(s).
      # cd ~
      # ssh-keygen -t rsa
      
      ## Press: Enter, Enter, Enter...
      
      ## See the public Key...
      # cat ~/.ssh/id_rsa.pub
      
      ## Copy the SSH public key and add it to you GIT SSH keys.
      
      ## ----------------------------------------------------------------------------
      ## Config below.
      ## ----------------------------------------------------------------------------
      
      ## The module install directory.
      Moddir='/home/pi/MagicMirror/modules'
      #Moddir='/home/linaro/MagicMirror/modules'
      #Moddir='/var/www/html/magicmirror/mm/modules'
      #Moddir='/var/www/html/magicmirror/m/modules'
      
      ## Package file
      Packfile='package.json'
      
      ## All the modules repos from Git.
      Repos[1]='git@github.com:KirAsh4/calendar_monthly.git'
      #Repos[2]='git@github.com:desertblade/iFrame.git'
      Repos[3]='git@github.com:masters1222/mm-hide-all.git'
      #Repos[4]='git@github.com:valmassoi/MMM-bitcoin.git'
      #Repos[5]='git@github.com:barnabycolby/MMM-Carousel.git'
      Repos[6]='git@github.com:Snille/MMM-Chart.git'
      Repos[7]='git@github.com:matteodanelli/MMM-cryptocurrency.git'
      #Repos[8]='git@github.com:cowboysdude/MMM-DailyQuote.git'
      #Repos[9]='git@github.com:brobergp/MMM-doomsDay.git'
      Repos[10]='git@github.com:LukeSkywalker92/MMM-Globe.git'
      Repos[11]='git@github.com:shbatm/MMM-JSONStatusChecker.git'
      Repos[12]='git@github.com:schnibel/MMM-Memo.git'
      Repos[13]='git@github.com:Snille/MMM-Modulebar.git'
      Repos[14]='git@github.com:Snille/MMM-ModuleScheduler.git'
      Repos[15]='git@github.com:CatoAntonsen/MMM-MotionEye.git'
      #Repos[16]='git@github.com:Tueti/MMM-MovieListings.git'
      #Repos[17]='git@github.com:Snille/MMM-MovieListings.git'
      Repos[18]='git@github.com:jclarke0000/MMM-MyCommute.git'
      #Repos[19]='git@github.com:ianperrin/MMM-NetworkScanner.git'
      Repos[20]='git@github.com:brobergp/MMM-newsfeedtouch.git'
      #Repos[21]='git@github.com/shbatm/MMM-OnScreenMenu.git'
      #Repos[22]='git@github.com:Snille/MMM-PiLights.git'
      #Repos[23]='git@github.com:Snille/MMM-PlexNowPlaying.git'
      Repos[24]='git@github.com:Gyran/MMM-plex-recently-added.git'
      Repos[25]='git@github.com:Snille/MMM-Profilepicture.git'
      Repos[26]='git@github.com:tosti007/MMM-ProfileSwitcher.git'
      Repos[27]='git@github.com:Jopyth/MMM-Remote-Control.git'
      Repos[28]='git@github.com:Snille/MMM-Sonos.git'
      Repos[29]='git@github.com:janbanan007/mmm-suncalc.git'
      Repos[30]='git@github.com:BenRoe/MMM-SystemStats.git'
      Repos[31]='git@github.com:brobergp/MMM-TextClock.git'
      Repos[32]='git@github.com:tosti007/MMM-TouchNavigation.git'
      Repos[33]='git@github.com/tosti007/MMM-TouchNotifications.git'
      Repos[34]='git@github.com:RedNax67/MMM-WunderGround.git'
      Repos[35]='git@github.com/jclarke0000/MMM-MyCalendar.git'
      Repos[36]='git@github.com/TheBogueRat/MMM-iFrameReload.git'
      
      ## ----------------------------------------------------------------------------
      
      ## Start!
      cd "$Moddir"
      for t in "${Repos[@]}"
      	do
      		git clone $t
      		#echo "Cloning $t"
      done
      
      echo "Cloning Done."
      echo "Now npm installing..."
      
      for f in *;
      	do
      		if [[ -d $f ]]; then
      			installmodule=$(basename $f)
      			[[ $installmodule =~ ^(default|node_modules)$ ]] && continue
      			cd "$installmodule"
      			if [ -e "$Packfile" ]; then
      #				npm install --production
      				npm install
      			fi
      			cd ".."
      		fi
      	done
      
      echo "All done."
      echo "Now you have to add all the modules to your config (or copy your old one) and don't forget your custom.css file."
      

      Enjoy! :)

      posted in Troubleshooting
      SnilleS
      Snille
    • RE: Snilles Magic Mirror Project

      Big update: I let Home Assistant take over the mirror completely

      It has been a while. This is the largest change I have made to the mirror since I moved off the Raspberry Pi, and since a lot of you here run Home Assistant too, I thought the whole story was worth writing down — including the part where I found out my mirror had been quietly burning a CPU core for years.

      It started with a fan

      The NUC was loud. Not “something is broken” loud, just always-working loud. I finally sat down to find out why, and the renderer process was sitting at 88% of a core, all day, every day.

      The cause turned out to be wonderful:

      Three MMM-Snow instances were running. In July. Invisible.

      They are scheduled to appear on three days a year. The rest of the time they are hidden — and hidden in MagicMirror does not mean stopped. hide() sets opacity: 0, not display: none. Their 90 snowflakes kept animating, 180 infinite CSS animations, holding the page at a steady 60fps around the clock.

      On its own that is cheap. The expensive part was that MMM-ImmichSlideShow had a fullscreen photo on screen, and that photo had to be re-rastered on every one of those 60 frames per second.

      Two A/B tests confirmed it — hide the photo and CPU went 88% → 12%; pause the snow and it went 88% → 9%. Neither half was the problem. The combination was.

      The bigger problem underneath

      With the snow disabled, CPU dropped to ~41%. Better. But then I counted what was actually on screen:

      16 modules visible at once. The complete wather profile, plus the Immich slideshow on top of it.

      That is when I understood that four independent things were writing to the same visibility state, none of them aware of the others, none using MagicMirror’s locking:

      Controls Triggered by
      MMM-ModuleScheduler class groups cron
      MMM-ProfileSwitcher the profile (exclusive) CURRENT_PROFILE
      Node-RED / HA individual modules presence, sensors
      MMM-Modulebar individual modules touch

      Only ProfileSwitcher is exclusive — set_profile() walks every module and either shows or hides it. The other three only touch what they point at and leave the rest alone.

      So my presence sensor showed the photo slideshow when nobody was there, but nothing ever told the other fifteen modules to go away. The globe kept spinning WebGL, the news feed kept scrolling, weather and electricity prices kept updating — all behind a picture nobody could see past.

      The intent was right. The transport was wrong.

      The fix: one owner

      The rule I settled on is simple:

      MMM-ProfileSwitcher is the only thing that sets visibility. Node-RED changes the profile instead of changing modules.

      That means:

      • MMM-ModuleScheduler is removed — its global_schedule, notification_schedule and module_schedule all moved into Node-RED
      • defaultClass: "Photos", so the resting state is the slideshow
      • includeEveryoneToDefault stays off, so resting state is the photo alone — walk up, presence fires, the profile comes up and brings the button bars with it
      • ProfileSwitcher’s timers removed, so there is only one thing deciding when to go back

      Now everything that is not part of the profile gets hide()d, and therefore suspend()ed.

      The one CSS line everyone here should copy

      This is the part I would have wanted to know years ago:

      /* css/custom.css */
      .module.hidden { content-visibility: hidden; }
      

      Module.suspend() in the base class is an empty hook. If a module does not implement it — and most do not — it keeps running when hidden. content-visibility: hidden skips style, layout, paint and animation for the entire subtree, so a hidden module genuinely costs nothing.

      The price is that a module disappears instantly instead of fading out. Worth it.

      The missing piece: the profile as a real HA entity

      Here is the thing that made it all click, and the reason this is worth a post rather than a footnote.

      I use MMM-HomeAssistant (my fork of ambarusa’s), which publishes every module as an MQTT switch entity. Great — but there was no way for Home Assistant to see or set the profile.

      So I added one. profileControl: true now publishes a select entity:

      {
          module: "MMM-HomeAssistant",
          config: {
              moduleControl: true,
              profileControl: true,
              profiles: ["Photos", "Night", "Work", "Weather", "Media", ...],
          }
      }
      
      select.magic_mirror_hallway_profile
      

      Selecting an option sends CURRENT_PROFILE — the same notification the on-screen buttons send. And the state is read back from ProfileSwitcher’s CHANGED_PROFILE notification, which it emits on every change including the one it makes at startup.

      That last detail is what makes it genuinely useful: the entity always shows what the mirror is really displaying, even when someone pressed a button on the mirror itself. So Node-RED can tell its own command apart from a human, and hold a manual choice for 20 minutes before handing back to the schedule.

      Without that feedback, an automation can only fire and hope — and it will happily fight the person standing in front of the mirror.

      The profile names have to be listed in the config because Home Assistant validates against them, and there is no way to discover them: a profile is only ever a class name on some module.

      What Node-RED looks like now

      All of it lives on one tab. Two decisions, both edge-triggered — nothing is sent unless it differs from what the mirror reports:

      1. Which profile? One function node, with the whole schedule as a table at the top. No cron strings, no month indices to get wrong:

      const SCHEDULE = [
          { profile: "NewYear",   date: "12-31", always: true, from: "23:45", to: "23:59" },
          { profile: "Halloween", date: "10-31",          from: "05:55", to: "23:00" },
          { profile: "Work",      days: [1,2,3,4,5],      from: "08:00", to: "16:00" },
          { profile: "Weather",   days: [1,2,3,4,5],      from: "16:01", to: "20:29" },
          { profile: "Media",     days: [0,1,2,3,4,5,6],  from: "20:30", to: "23:00" },
      ];
      

      Precedence: dark screen → night → always rows → a choice made at the mirror → nobody there → the table.

      2. The overlays. MagicMirror profiles are single-axis; my mirror is not. Printer cameras, the Bird Buddy panels, the Halloween video and a birthday background all come and go on events, not on the profile.

      Since set_profile() is exclusive it wipes them on every profile change. The solution needs no code: give them a class no profile uses, so they are always hidden by default, and have Node-RED re-assert them right after each profile change. Between changes it stays quiet — which is exactly what leaves MMM-Modulebar free to toggle things by hand.

      “Always hidden by default” is the right way to be wrong: at worst something is missing for a second, instead of unwanted content flashing up.

      Birthdays became a nice example. Instead of a whole Birthday profile that replaces whatever is up, it is now one overlay rule: swap the background picture, keep the profile.

      Results

      Before After
      Modules visible when idle 16 1
      Renderer CPU 41.3% 12.4%
      Xorg CPU 18.6% 0.1%
      Things writing visibility 4, unlocked 1
      Profile visible in HA no a real entity, both directions

      (Those are after the snow was already dealt with. Counting that, the renderer went from 88% to 12%.)

      The Xorg number is the one that tells the real story — 18.6% to 0.1% means the repainting actually stopped, rather than merely becoming invisible.

      The mirror is also just nicer now. Empty hallway: one photo, nothing else. Walk up: the right profile appears with the buttons. Walk away: back to the photo. Screen off at night puts it on an empty profile so nothing renders at all until morning.

      Things that bit me along the way

      • MMM-Remote-Control’s fuzzy module matching. If the exact identifier does not exist it falls back to matching module names, and runs the action on every hit. A wrong module number in my flow meant every Bird Buddy visit lit up all ten of my MMM-homeassistant-sensors instances — silently, for years. I tested module_05_MMM-Profilepicture against my mirror recently: 10 hits. If you address modules by number, check them.
      • Module indices include disabled modules. Setting disabled: true does not renumber anything. Handy, but not obvious.
      • The cron package changed month indexing from 0-11 to 1-12. My Halloween, New Year and birthday schedules had silently never fired — two of them threw “no execution date within 8 years” and were simply ignored.
      • Xorg’s -dpms flag is not xset -dpms. On the X server command line it removes the extension. My screen had not actually been turning off at all since the reinstall.
      • A profile can never be truly empty. everyone modules show in every profile except the default one. I use that on purpose now — the night profile keeps the two button bars, which cost nothing.

      Would I recommend it?

      If you run MagicMirror with Home Assistant and more than a handful of modules: yes, and the CSS line above regardless.

      The mental shift is small but it changes everything — stop telling the mirror which modules to show, and start telling it which mode it is in. Everything else follows, and you stop being able to get into contradictory states at all.

      Happy to share the Node-RED flow or the module config if anyone wants a starting point. Just ask. 🙂

      posted in Show your Mirror
      SnilleS
      Snille
    • MMM-TautulliLatest

      Here is a module for displaying the “latest” added Movies and TV-Shows from your Plex server (using Tautulli).
      MMM-TautulliLatest

      Overview:
      a5f1ab7e-b991-41dd-86bc-52de79a925df-image.jpeg

      Click/Pointed on a “cover” view:
      05dd85ee-d982-4513-91ad-458c5aee1a43-image.jpeg

      Exaple config:

      {
        module: "MMM-TautulliLatest",
        position: "middle_center",
        config: {
          tautulliProtocol: "http",
          tautulliHost: "192.168.1.50",
          tautulliPort: 8181,
          tautulliApiKey: "YOUR_TAUTULLI_API_KEY",
          itemLimit: 8,
          updateInterval: 5 * 60 * 1000,
          posterWidth: 150,
          posterHeight: 225,
          posterMaxWidth: 150,
          posterMaxHeight: 225,
          detailPosterWidth: 400,
          detailPosterHeight: 600,
          showWatchedBadge: true,
          user_id: 123456
        }
      }
      
      posted in Entertainment
      SnilleS
      Snille
    • RE: MMM-Remote-Control

      @KristjanESPERANTO It is working!! Awesome! Thanks you very much! :)

      posted in Utilities
      SnilleS
      Snille
    • RE: MMM-Remote-Control

      @KristjanESPERANTO You are welcome, It’s me who should thank you for all the great stuff! :) It’s almost working…
      The error messages are gone, but it still shows and hides “both” modules (MMM-MotionEye in my example clip)… :)

      Let me know if you want anything else? There is nothing in the “logs” now… :)

      posted in Utilities
      SnilleS
      Snille
    • RE: MMM-Remote-Control

      @KristjanESPERANTO
      I have this problem that has been bugging me for a while…
      Check this clip: https://photos.app.goo.gl/Zahc5xqttn33frbKA < From API

      My mirror have lot’s of modules many are multi instances (like MMM-MotionEye in this example).
      I see the same behavior (or similar) with other modules, mainly my “MMM-homeassistant-sensors”…
      I often makes API-calls from Node Red in Home Assistant, like this clip: https://photos.app.goo.gl/K9ktuXGKawoyHEez5

      Errors from the log:

      0|mmdev  | [2026-01-05 12:24:13.812] [ERROR] undefined Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
      0|mmdev  |     at ServerResponse.setHeader (node:_http_outgoing:700:11)
      0|mmdev  |     at ServerResponse.header (/var/www/html/magicmirror/m/node_modules/express/lib/response.js:686:10)
      0|mmdev  |     at ServerResponse.json (/var/www/html/magicmirror/m/node_modules/express/lib/response.js:249:10)
      0|mmdev  |     at Class.sendResponse (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:687:28)
      0|mmdev  |     at Class.handleSimpleSocketNotification (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:965:10)
      0|mmdev  |     at SHOW (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:1024:28)
      0|mmdev  |     at Class.executeQuery (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:1049:7)
      0|mmdev  |     at Class.answerModuleApi (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/API/api.js:442:14)
      0|mmdev  |     at /var/www/html/magicmirror/m/modules/MMM-Remote-Control/API/api.js:299:14
      0|mmdev  |     at Layer.handleRequest (/var/www/html/magicmirror/m/node_modules/router/lib/layer.js:152:17)
      0|mmdev  |     at next (/var/www/html/magicmirror/m/node_modules/router/lib/route.js:157:13)
      0|mmdev  |     at Route.dispatch (/var/www/html/magicmirror/m/node_modules/router/lib/route.js:117:3)
      0|mmdev  |     at handle (/var/www/html/magicmirror/m/node_modules/router/index.js:435:11)
      0|mmdev  |     at Layer.handleRequest (/var/www/html/magicmirror/m/node_modules/router/lib/layer.js:152:17)
      0|mmdev  |     at /var/www/html/magicmirror/m/node_modules/router/index.js:295:15
      0|mmdev  |     at param (/var/www/html/magicmirror/m/node_modules/router/index.js:600:14)
      0|mmdev  | [2026-01-05 12:24:28.662] [ERROR] undefined Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
      0|mmdev  |     at ServerResponse.setHeader (node:_http_outgoing:700:11)
      0|mmdev  |     at ServerResponse.header (/var/www/html/magicmirror/m/node_modules/express/lib/response.js:686:10)
      0|mmdev  |     at ServerResponse.send (/var/www/html/magicmirror/m/node_modules/express/lib/response.js:163:12)
      0|mmdev  |     at ServerResponse.json (/var/www/html/magicmirror/m/node_modules/express/lib/response.js:252:15)
      0|mmdev  |     at Class.sendResponse (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:687:28)
      0|mmdev  |     at Class.handleSimpleSocketNotification (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:965:10)
      0|mmdev  |     at HIDE (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:1023:28)
      0|mmdev  |     at Class.executeQuery (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/node_helper.js:1049:7)
      0|mmdev  |     at Class.answerModuleApi (/var/www/html/magicmirror/m/modules/MMM-Remote-Control/API/api.js:442:14)
      0|mmdev  |     at /var/www/html/magicmirror/m/modules/MMM-Remote-Control/API/api.js:299:14
      0|mmdev  |     at Layer.handleRequest (/var/www/html/magicmirror/m/node_modules/router/lib/layer.js:152:17)
      0|mmdev  |     at next (/var/www/html/magicmirror/m/node_modules/router/lib/route.js:157:13)
      0|mmdev  |     at Route.dispatch (/var/www/html/magicmirror/m/node_modules/router/lib/route.js:117:3)
      0|mmdev  |     at handle (/var/www/html/magicmirror/m/node_modules/router/index.js:435:11)
      0|mmdev  |     at Layer.handleRequest (/var/www/html/magicmirror/m/node_modules/router/lib/layer.js:152:17)
      0|mmdev  |     at /var/www/html/magicmirror/m/node_modules/router/index.js:295:15
      

      I also experience that when calling a specific module to show with “module_number_modulename”, it often shows the “wrong” module-instance (of that type of module, like MMM-homeassistant-sensors, but the wrong one)… I don’t know if it’s related to this.

      Let me know if you need anything more…
      Thank you for this great module! :)

      posted in Utilities
      SnilleS
      Snille
    • RE: MMM-HomeAssistant

      Awsome! This changes a lot in my “config”, my Mirror(s) are tightly integrated with Home Assistant.
      Thank you for this module!!

      I’m currently running 3 different mirrors, but two of them are “mixed” with each other in HA, the third (first one) are separate :). I’ll have to do some more investigating. Have you tested with multiple mirrors against one “HA-MQTT”?

      Again, thank you for this! :)

      Update: I did some cleaning in the MQTT-queue (with MQTT Explorer) and now it all works. I got to have had my config(s) mixed at some point during my testing. So, now it’s all good. :)

      posted in System
      SnilleS
      Snille
    • RE: Snilles Magic Mirror Project

      @nowayto Thank you! I’m glad to inspire!
      If you have any questions, just write. :)

      The mirror has It’s been in use in our family now for many years. Over time it’s been more and more integrated with my Home Assistant setup as well. It’s used for daily information such as news and weather. And of course, it’s been a big part of my daughters “Birthday Treasure Hunts” (check out last years hunt here). :)

      I highly recommend to build one… It’s not until you built it you understand how much you need it. :)

      posted in Show your Mirror
      SnilleS
      Snille
    • RE: MagicMirror With Face Recognition

      Nicely done!
      What computer hardware are you using? RPi5?

      posted in Show your Mirror
      SnilleS
      Snille
    • RE: Snilles Magic Mirror Project

      @justbob Thank you! Great to hear, please do! Share your ideas when you are done. It’s always fun to see what others do. :)

      posted in Show your Mirror
      SnilleS
      Snille
    • RE: My e-ink frame

      @Matuki Nice work!

      posted in Show your Mirror
      SnilleS
      Snille