I replaced the default clock with a Literary Clock.

I replaced the default clock with a Literary Clock.

@rmonkey I wonder what the percentage is? I using MM to power by desktop internet appliance. My next upgrade will be a new enclosure.
@kristjanesperanto I got my first real alert from MMM-PublicTransportHub
Toast Alert

Message Center

The toast immediately got my attention, but if I hadn’t been standing in front of the mirror at that moment, I would have missed it. That’s one of the reasons I like using MessageCenter, the alert remains available instead of disappearing completely.
Thanks again for adding support.
I am sharing a new MagicMirror² module called MMM-WorldClockMap.
I originally built it for my own mirror and my particular needs. I have contacts in places such as Stockholm and Tokyo, and I wanted an easy way to see when people might be awake and around without calculating time differences.

The module includes:
I optimized the presentation for my own mirror, but tried to make the layouts flexible enough for an ordinary MagicMirror installation as well. I hope someone else finds it useful.
Repository, screenshots, installation instructions, and configuration options:
https://github.com/bwente/MMM-WorldClockMap
Feedback and testing on different mirror sizes and orientations are welcome.
@sdetweil Thanks! I tried using the editor in MMM-Remote-Control years ago and broke it, so I just used nano since.
The settings are now grouped into sections. Choices such as display, urgency, and retention are dropdowns.
Thanks for pointing me toward the custom layout, it makes a fairly large configuration much more approachable.
One unrelated thing I noticed while testing, my config did not have an explicit language setting because it was using the normal English default. After saving through MMM-Config, the language changed to Afrikaans, which appears to be the first item in the dropdown.
A quick MMM-MessageCenter update: version 0.5.0 is now available.
The big change is that MessageCenter can now collect SHOW_ALERT and SHOW_NOTIFICATION events from other MagicMirror modules automatically. Module authors generally shouldn’t need to add MessageCenter-specific support.
For richer integrations, there is also a standard message API with stable IDs, urgency, expiration, updates, and active-message synchronization. Enhanced integrations are now handled through small, independent adapters; the current examples include the standard Weather module, MMM-Remote-Control, and MMM-PublicTransportHub.
A special thanks to Kristjan ESPERANTO for adding service-alert notifications to MMM-PublicTransportHub and helping work through the integration.
I opened a feature request for MMM-PublicTransportHub to optionally broadcast PTH_SERVICE_ALERT notifications.
For example, a delayed or cancelled departure could appear as an alert.
@Rags I might try that out. But use a Fully Kiosk Browser on an Android tablet for the display.
I could probably use the camera for motion detection.
I’ve been working on MMM-MessageCenter, a module that gives notifications from different sources one consistent place on the mirror.
The idea came from a pretty simple problem: a notification appears, disappears, and nobody knows whether anyone actually saw it. Different modules and services also handle alerts differently, so important information can easily get lost.
MessageCenter adds a small notification history with clear unread, viewed, acknowledged, dismissed, and expired states.
Everything:
It intentionally doesn’t collect every internal MagicMirror event. Modules either use the MessageCenter API or an explicitly enabled adapter, which keeps refresh, navigation, and module-control traffic out of the inbox.
A dishwasher notification can briefly appear as an alert and then remain in history until someone views it.
A doorbell message can include a camera snapshot captured when the event happened, so the image doesn’t change before somebody checks it.
The standard MagicMirror Weather module can add a “Rain approaching” message without requiring a separate weather service.
A local monitoring script can report low disk space, high temperature, network trouble, or another condition that should be visible on the mirror.

MessageCenter can be used as:
It can show temporary alerts, retain message history, expire old messages, update existing messages by ID, and publish attention events for other integrations. It only says that something needs attention, leaving other modules and integrations free to decide what that means.
The module now has a line mode for side regions. It uses a lightweight, transparent layout and can show just the title and time.
Other recent improvements:
Configuration, payload examples, and documentation:
@Niggich looks like trigger.payload_json.remainingSeconds is empty or double quoted. Can you view just the payload and see?
BTW MMM-WeatherHero is a great module for this. It looks right at home.

My Echo know I want to start a Timer but it’s asking for how long.
Great, now that you’ve confirmed MQTT is working, the next step is to add the Home Assistant automation.
alias: MagicMirror kitchen timer started
triggers:
- trigger: mqtt
topic: magicmirror/kitchen-timer/started
actions:
- action: media_player.play_media
target:
entity_id: media_player.kitchen_echo
data:
media_content_type: custom
media_content_id: >-
set a timer for
{{ trigger.payload_json.remainingSeconds | int }}
seconds
I think that will work. I don’t know if it needs to be escaped or not.
@JMac For simple modules you should be able to clone it from github.
cd ~/MagicMirror/modules
git clone https://github.com/bwente/MMM-KitchenTimer.git
Something like this for your MMM-MQTTbridge config on your mirror.
{
module: "MMM-MQTTbridge",
disabled: false,
config: {
mqttServer: "mqtt://USERNAME:PASSWORD@192.168.1.10:1883",
stringifyPayload: true,
mqttConfig: {
// This example only sends MagicMirror events to MQTT.
listenMqtt: false,
interval: 300000,
},
notiConfig: {
listenNoti: true,
ignoreNotiId: ["CLOCK_MINUTE", "CLOCK_SECOND", "NEWS_FEED"],
ignoreNotiSender: ["system"],
qos: 0,
},
},
},
then edit
~/MagicMirror/modules/MMM-MQTTbridge/dict/notiDictionary.js
var notiHook = [
{
notiId: "KITCHEN_TIMER_STARTED",
notiPayload: [
{
notiMqttCmd: ["Kitchen timer started"],
},
],
},
];
var notiMqttCommands = [
{
commandId: "Kitchen timer started",
mqttTopic: "magicmirror/kitchen-timer/started",
stringifyPayload: true,
retain: false,
qos: 0,
},
];
module.exports = { notiHook, notiMqttCommands };
after restarting your mirror you should be able to listen for the topic: magicmirror/kitchen-timer/started in Home Assistant developer tools.
I did something similar with my Reolink doorbell, but used Home Assistant as the middleman.
When motion is detected, Home Assistant grabs a snapshot and sends it to MagicMirror. I use MMM-MessageCenter to display the notification and keep the snapshot in the message history, so I can still see who was at the door afterward.

I went with snapshots rather than live video since it is lightweight and, for my use, I mostly just wanted to see who came to the door.
Thanks! Here is a look inside.

It is definitely a little packed in there. The Raspberry Pi runs MagicMirror, with the rotary encoder as the main physical control. There is also a small D1 mini running WLED for the illuminated ring, plus the internal speakers and amplifier.
A lot of the fun has been making all of those pieces work together. Turning and pressing the dial controls the channel selector, the LED ring can change based on status or notifications, and Home Assistant ties into it for messages and other events.
The enclosure is 3D printed and has gone through quite a few revisions to get everything to fit. Still needs a revision to fit my hands!
I am still cleaning up the code and documentation, but I am happy to share more of the hardware, wiring, software setup, or some of the failed prototypes if anyone is interested.
@Niggich On the HA side you would listen for the timer topic.
alias: Start Echo timer from MagicMirror
triggers:
- trigger: mqtt
topic: magicmirror/kitchen-timer/started
actions:
- action: media_player.play_media
target:
entity_id: media_player.kitchen_echo
data:
media_content_type: custom
media_content_id: >-
set a timer for
{{ trigger.payload_json.remainingSeconds | int }}
seconds
A quick follow-up with some well-deserved acknowledgements.
Seymour may look like a standalone appliance, but it was made possible by the MagicMirror community and its wonderfully reusable ecosystem. Much of the project has been about connecting existing modules into a cohesive experience rather than reinventing everything from scratch.
Edward Shen for MMM-pages, which provides the underlying page and channel system.
Tom Hirschberger for MMM-GPIO-Notifications, which connects Seymour’s rotary encoder to MagicMirror.
Jopyth and contributors for MMM-Remote-Control, which makes remote administration and updates easier.
shbatm for projects including MMM-KeyBindings and MMM-RTSPStream.
MMRIZE for MMM-CalendarExt3 and MMM-CalendarExt3Agenda.
The MagicMirror team and every module author whose work helped turn this experiment into a functioning appliance.
Seymour also builds on WLED, Home Assistant, and Raspberry Pi—another reminder of how much becomes possible when open-source projects are designed to work together.
I have added a few pieces for the Audrey experience, including the timer, centralized messages, themes, channel navigation, and LED attention behavior. But Seymour’s foundation belongs to the broader community.
Thank you to everyone who created, maintained, documented, tested, or answered questions about these projects. Seymour would not exist without your work.
I’ve been working on a small ambient information appliance called Seymour.
The inspiration is the original 3Com Audrey internet appliance. Seymour is built around a Raspberry Pi, a 7-inch touchscreen, a rotary encoder, an illuminated WLED ring, an internal speaker, and a 3D-printed enclosure. I chose MagicMirror because its module ecosystem already provides most of the useful building blocks.
Instead of presenting everything as one dashboard, Seymour organizes modules into channels. Pressing the encoder opens the channel selector, rotating chooses a channel, and pressing again opens it. The touchscreen is also available.

The current prototype includes clock, weather, news, calendar, messages, a kitchen timer, and local music playback through Music Assistant. The LED ring provides status and attention feedback, while the speaker handles music and timer sounds.

It is still a working prototype, although it may already be close to the finished personal appliance I wanted. I’m continuing to polish the documentation and software before making the repositories public.
Yes. Since you use Home Assistant, MagicMirror can publish an MQTT message when the timer starts, and HA can start a matching Alexa timer on the Echo paired with the Wall Clock.
The catch is they are separate timers, not truly synced. Starting and canceling can be synced, but pausing the MagicMirror timer will not pause Alexa.