[2.33.0] - 2025-10-01
Thanks to: @Crazylegstoo, @dathbe, @m-idler, @plebcity, @khassel, @KristjanESPERANTO, @rejas and @sdetweil!
⚠️ This release needs nodejs version v22.18.0 or higher
Added
Add configuration option for User-Agent, used by calendar & news module (#3255)
[linter] Add prettier plugin for nunjuck templates (#3887)
[core] Add clear log for occupied port at startup (#3890)
Changed
[clock] Add CSS to prevent line breaking of sunset/sunrise time display (#3816)
[core] Enhance system information logging format and include additional env and RAM details (#3839, #3843)
[refactor] Add new file js/module_functions.js to move code used in several modules to one place (#3837)
[refactor] Use global.root_path where possible and add tests for config:check (#3883, #3885, #3886, #3889)
[tests] refactor: simplify jest config file (#3844)
[tests] refactor: extract constants for weather electron tests (#3845)
[tests] refactor: add setupDOMEnvironment helper function to eliminate repetitive JSDOM setup code (#3860)
[tests] replace console with Log in calendar debug.js to avoid exception in eslint config (#3846)
[tests] speed up e2e tests, cleanup and stabilize weather e2e tests, update snapshot url (#3847, #3848, #3861)
[tests] refactor translation tests (#3866)
Remove sinon dependency in favor of Jest native mocking
Unify test helper functions across translation test suites
Rename setupDOMEnvironment to createTranslationTestEnvironment for consistency
Simplify DOM setup by removing unnecessary Promise/async patterns
Avoid potential port conflicts by using port 3001 for translator unit tests
Improve test reliability and maintainability
[tests] add alert module tests for different welcome_message configurations (#3867)
[lint-staged] use prettier --write --ignore-unknown in lint-staged to avoid errors on unsupported files (#3888)
Updated
[calendar] Update defaultSymbol name and also the link to the icon search site (#3879)
[core] Update dependencies including electron to v38 as well as github actions (#3831, #3849, #3857, #3858, #3872, #3876, #3882, #3891, #3896)
[weather] Update feels_like temperature calculation formula (#3869)
[weather] Update null value handling for weather type (#3892)
[layout] Update styles for weather and calendar (#3894)
Fixed
[calendar] Fixed broken unittest that only broke on the 1st of July and 1st of january (#3830)
[clock] Fixed missing icons when no other modules with icons is loaded (#3834)
[weather] Fixed handling of empty values in weathergov providers handling of precipitationAmount (#3859)
[calendar] Fix regression handling of limit days (#3840)
[calendar] Fixed regression of calendarfetcherutils.shouldEventBeExcluded (#3841)
[core] Fixed socket.io timeout when server is slow to send notification, notification lost at client (#3380)
[tests] refactor AnimateCSS tests after jsdom 27 upgrade (#3891)
[weather] Use apparent_temperature data from openmeteo’s hourly weather for current feelsLikeTemp (#3868).
[weather] Updated envcanada Provider to use new database/URL schema for accessing weather data (#3878).
HI
I am really not sure whether this is the right section to post, so please move if need be.
I have my MM set up on RP5, have the usual google calendar, weather etc, planning on adding some other bits and pieces as I go on.
This year, we have got a new EV (XPeng) and now have Sigenstor battery and have updated our panesl. We are also going to add WIFI to our Daikin splits. I have already set up MMM-Pages and would like to have a page to cover our Sigenergy information with solar and battery info, have info about our car battery and eventually to have the Daikin stuff on there. I have found the module for Daikin, but not for the other things. Home Assistant does seem to already have these things and I am trying to work out whether it is best to try and develop MM modules to access these information (or put a request in), or to add Home Assistant modules via iFrame or something like that. If the latter, then I am a little stuck on how to proceed. I don’t have anything set up for Home Assistant, and I’m reluctant to wipe the RaspberryPi and start again with the HAOS. I have seen something about dockers, do I create a docker on the Pi to setup HA there? and can that be on there whilst MM is installed on the RPi? I seem to be going in circles. I will possibly ask about creating HA in a docker container in their forum, but was wondering if anyone here, knows which is the best approach for those with a lot of MM set-up already.
Thanks in advance.
has anyone else had issues with full length mirrors? mine ended up breaking because it was pretty weak and low quality. the frame felt flimsy and it did not stay steady when leaning against the wall. now i am wondering if it is worth trying to repair or if i should just buy a new one. if so which type or brand of full length mirror do you recommend? any suggestions would be appreciated.
I want to introduce to you my first module MMM-DBF-Navigator.
https://github.com/Pascal-nie/MMM-DBF-Navigator
Inspired by the module MMM-DBF, I created a new module for Deutsche Bahn departures with multistation support, meaning you can filter the departures by multiple trainstations and directions.
As this is at the moment suited to my use cases, I would be happy for suggestions and feature requests.
[image: screenshot.png]
Features
Shows upcoming train departures from one or multiple configurable stations
Displays train name, destination, scheduled and real departure time, delay, and time remaining and highlights cancelled trains
Multistation Support: Select 2 or more stations to display information in one table
Multilingual support (English, German)
Dear mirror fans,
for your information and reference some findings with my mirror.
I’m running a MagicMirror on a PI5 with an NVME HAT as boot device.
My first approach was to de-assemble an original Pi power supply (because of its form factor) and to build this internally into the mirror-frame.
As reported earlier in a different thread this power supply died due to overheating.
My next approach was to use a new PI-power supply - this time externally.
Caused by the circumstances of my installation (power plug far below mirror position and Pi mounted on the top of the mirror) I have used a USB-C to USB-C cable (150cm, 5A) to extend the standard-cable.
As it turns out now this wasn’t a good idea, ether:
It worked pretty long (several weeks) good and without any problem.
But since some days I got more and more really stubborn WLAN losses which were often unrecoverable - only plugging out power supply to reforce a restart helped (I’m working headless as majority of you).
In the meantime I was able to implement a tiny service which automatically detects the connectivity loss and restarts the WLAN, so a sufficient symptomatic treatment is in place - this discovers connectivity every five minutes, which is OK to me.
While I was just tinkering I’ve thought it could be a nice idea to identify the root cause and so I added some logging features in the mentioned service.
Now the interesting (unexpected) finding: Obvious root cause was an undervoltage!
I’ve searched around (because initially I failed to remember my “cable-extension”) but couldn’t find any reason for this (nothing attached else than the NVME and my mirror doesn’t have anything heavily using the harddisk)…
Then the additional cable came in my mind and - voilà - this was the root cause - despite its thickness and 5A specification.
For now I have added some 230V cabeling to the top of the mirror, installed there (outside the mirror frame) a third (de-assembled) PI power supply and connected the standard-long cable of this power supply to the Pi.
Since then no undervoltage detected (prior to this every few minutes).
So my learning: Pi is bitchy with cable extensions and tiny undervoltages can lead to heavy WLAN problems.
May one or the other can benefit from these findings.
Warm regards,
Ralf
Hello,
I’m having trouble starting my magic mirror. When I power it on, the screen goes white, then turns black and stays that way. I also encounter these two errors when I run the “npm start” command:
[1781:0729/182107.882259:ERROR:object_proxy.cc(576)] Failed to call method: org.freedesktop.DBus.StartServiceByName: object_path=/org/freedesktop/DBus: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
[2024-07-29 18:21:40.316] [LOG] Launching application.
[1781:0729/182305.510139:ERROR:network_service_instance_impl.cc(600)] Network service crashed, restarting service.
I’ve tried everything but still can’t find a solution. Can anyone help me? I’m running it on a Raspberry Pi 3A+ with 64-bit Pi OS. Thanks in advance!
Pulled this from the Reddit group. Working on updating my MM² modules from an old project. Starting with a fresh updated copy on a new Pi 5.
Hey guys, long time first time.
I’ve been on this journey since the dog days of Covid. I originally started coding a MagicMirror and then had a daughter and job change. Unable to keep up with updates and the knowledge it took me to code, I scrapped that for the ease of a dakboard.
I currently run a screen in my kitchen with date/time, weather, calendar and some other fun stuff. I pay the $5 monthly so figured I might as well get use out of a second screen.
Fast-forward to a cheap buy on FB marketplace for a Peloton/ Lululemon mirror for $100. Cheaper than any monitor/mirror combo I could have ever dreamed. I followed a GitHub repository and put the below together.
Just throwing this out quickly and can update with specifics as questions come in.
The face on view is very clear, just didn’t want to show my ugly mug.
Future Plans
Want to add RSTP to show a live feed of my Wyze doorbell cam when the doorbell is pressed.
Want to figure out json coding so I could possibly add some MagicMirror modules. That has more scalability in my opinion. No clue how to get started on that.
See attached post until I upload pictures.
https://www.reddit.com/r/dakboard/s/bvqNWgvVev
On a new installation
var config =
{
address: '0.0.0.0',
ipWhitelist: [
'127.0.0.1',
'::ffff:127.0.0.1',
'::1',
'10.0.1.1/24'
],
modules: [
{
module: 'MMM-Remote-Control',
config: {
secureEndpoints: false
}
},
The entire section is copied from another instance of MM where Remote-Control is working fine.
On this new install I get
Cannot GET /remote.html
Help!
I’ve created a new module that displays EV charge state and location info pulled from Home Assistant: https://github.com/robotfishe/MMM-HAEV
I’ve been using my older MMM-Tronity module (https://github.com/robotfishe/MMM-Tronity) for years to fetch this data via Tronity’s API. I’ve recently traded in my Vauxhall for a Hyundai, and I’ve found Tronity doesn’t work as well with my new car, but thankfully there’s a very functional Home Assistant integration for getting data directly from Hyundai’s platform - hence this module. The style and layout are the same as MMM-Tronity.
The HA entities the module reads are configurable, so it should work with any vehicle/integration as long as the data exists somewhere on your Home Assistant instance.
I apologize for a every repeating question, but I cant figure it out completely.
So I want to change the color and/or the symbol, if the title has a specific text.
The readme says:
eventTransformer: (ev) => {
if (ev.title.search("John") > -1) ev.color = "blue";
return ev;
};
I also found, that I can be more detailed in styling, when I create a class for a event, like this:
eventTransformer: (event) => {
if (event.title.includes('Gus')) event.class = "gus"
return event
},
/* custom.css */
.CX3 .event.gus {
background-color: var(--calendarColor);
color: var(--oppositeColor);
border-radius: 4px;
}
If I want to change the symbol too, Sam said, I can use the same command just with “symbol” instead of color, I guess this?
eventTransformer: (ev) => {
if (ev.title.search("John") > -1) ev.symbol= "WHAT TO PUT HERE";
return ev;
};
Obviously I dont know how to put the symbol or the link to the symbol. I set “useIconify:true”, would this mean I can use ANY of the Iconify symbols by their name like “material-symbols:ar-on-you-outline-sharp”? Looks too easy to me, so I guess no.
If someone has time to spare Id appreciate some help.
I have the default module up and running, but the time appears to be off. For example, my local time currently is 1500 and the Current Weather shows the moon and the sunrise/sunset display is showing the next sunrise time. The header also says ETC/GMT (which I do not have set in my config.js).
// Current Weather Module
{
disabled: false,
module: "weather",
position: "top_right",
header: "Current Weather",
config: {
weatherProvider: "openweathermap",
type: "current",
location: "Norwich",
locationID: "4839843",
apiKey: "XXXX"
}
},
// 5-Day Weather Forecast Module
{
disabled: false,
module: "weather",
position: "top_right",
header: "5-Day Weather Forecast",
config: {
weatherProvider: "openweathermap",
type: "forecast", // Use "forecast" for the 5-day forecast
location: "Norwich",
locationID: "4839843",
apiKey: "XXXXX",
colored: true
}
},
My clock module is set to correct time, and my pi is also set correctly.
Any where else I should check? Thanks.
Hey guys,
I am building a MagicMirror with MMM-Framelight and a Button via MMM-GPIO-Notifications.
My goal is to send the notifications FRAMELIGHT_ON followed by a delayed FRAMELIGHT_OFF to make everything dark again.
How do i realise this kind of delay? Anyone knows a module with that functionality? Or can point me in the right direction?
Thanks for any help!
Description:
MMM-OPMStatus is a simple MagicMirror² module that displays the U.S. OPM Federal Operating Status (Washington, DC area).
It fetches the official JSON feed from OPM and shows the current status (Open, Closed, Delayed Arrival, etc.) along with the official message.
By default the module only shows when the status is not “Open”, making it great for kiosks and wall dashboards.
Features include:
Automatic refresh every X minutes (configurable)
Hide when Open, or briefly fade after a set time so you know data is fresh
Optional QR code display (only when not Open) so users can scan for details on their phone
No external dependencies; uses Node’s https client with proper headers to bypass CDN blocks
Screenshots:
[image: screenshot.png]
Download:
MMM-OPMStatus
Version 1.0.0
Initial release
Polls OPM JSON feed
Hides module when “Open”
Configurable refresh interval and fade-after display
Optional QR code support
A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.
Read the statement by Michael Teeuw here.
Categories
-
Announcements
Announcements regarding the MagicMirror software and forum.
-
Core System
Discuss the MagicMirror² core framework.
-
-
-
-
-
-