A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.

Categories

  • Announcements regarding the MagicMirror software and forum.

    58 Topics
    417 Posts
    S
    [2.30.0] - 2025-01-01

    Thanks to: @xsorifc28, @HeikoGr, @bugsounet, @khassel, @KristjanESPERANTO, @rejas, @sdetweil.

    ⚠️ This release needs nodejs version v20 or v22 or higher, minimum version is v20.18.1

    Added [core] Add wayland and windows start options to package.json (#3594) [docs] Add step for npm publishing in release process (#3595) [core] Add GitHub workflow to run spellcheck a few days before each release (#3623) [core] Add test flag to index.html to pass to module js for test mode detection (needed by #3630) [core] Add export on animation names (#3644) [compliments] Add support for refreshing remote compliments file, and test cases (#3630) [linter] Re-add eslint-plugin-importnow that it supports ESLint v9 (#3586) [linter] Re-activate eslint-plugin-package-json to lint package.json (#3643) [linter] Add linting for markdown files (#3646) [linter] Add some handy ESLint rules. [calendar] Add ability to display end date for full date events, where end is not same day (showEnd=true) (#3650) [core] Add text to the config.js.sample file about the locale variable (#3654, #3655) [core] Add fetch timeout for all node_helpers (thru undici, forces node 20.18.1 minimum) to help on slower systems. (#3660) (3661) Changed [core] Run code style checks in workflow only once (#3648) [core] Fix animations export #3644 only on server side (#3649) [core] Use project URL in fallback config (#3656) [core] Fix Access Denied crash writing js/positions.js (on synology nas) #3651. new message, MM starts, but no modules showing (#3652) [linter] Switch to ‘npx’ for lint-staged in pre-commit hook (#3658) Removed [tests] Remove node-pty and drivelist from rebuilded test (#3575) [deps] Remove @eslint/js dependency. Already installed with eslint in deep (#3636) Updated [repo] Reactivate stale.yaml as GitHub action to mark issues as stale after 60 days and close them 7 days later (if no activity) (#3577, #3580, #3581) [core] Update electron dependency to v32 (test electron rebuild) and all other dependencies too (#3657) [tests] All test configs have been updated to allow full external access, allowing for easier debugging (especially when running as a container) [core] Run and test with node 23 (#3588) [workflow] delete exception allow-ghsas: GHSA-8hc4-vh64-cxmj in dep-review.yaml (#3659) Fixed [updatenotification] Fix pm2 using detection when pm2 script is inside or outside MagicMirror root folder (#3576) (#3605) (#3626) (#3628) [core] Fix loading node_helper of modules: avoid black screen, display errors and continue loading with next module (#3578) [weather] Change default value for weatherEndpoint of provider openweathermap to “/onecall” (#3574) [tests] Fix electron tests with mock dates, the mock on server side was missing (#3597) [tests] Fix testcases with hard coded Date.now (#3597) [core] Fix missing basePath where location.host is used (#3613) [compliments] croner library changed filenames used in latest version (#3624) [linter] Fix ESLint ignore pattern which caused that default modules not to be linted (#3632) [core] Fix module path in case of sub/sub folder is used and use path.resolve for resolve moduleFolder and defaultModuleFolder in app.js (#3653) [calendar] Update to resolve issues #3098 #3144 #3351 #3422 #3443 #3467 #3537 related to timezone changes [calendar] Fix #3267 (styles array), also fixes event with both exdate AND recurrence(and testcase) [calendar] Fix showEndsOnlyWithDuration not working, #3598, applies ONLY to full day events [calendar] Fix showEnd for Full Day events (#3602) [tests] Suppress “module is not defined” in e2e tests (#3647) [calendar] Fix #3267 (styles array, really this time!) [core] Fix #3662 js/positions.js created incorrectly

    https://github.com/MagicMirrorOrg/MagicMirror/releases/tag/v2.30.0

  • Discuss the MagicMirror² core framework.

    472 Topics
    4k Posts
    S

    @casper1 can you explain more??

    what did you do? update node??

  • Anything harware related can be found here.

    767 Topics
    7k Posts
    S

    The ReSpeaker 4-Mic Array is currently out of stock everywhere. Spent quite a while researching on the forum and elsewhere, before posting this. I believe it’s one of the best microphones for MM integration with voice control. Are there any similar or better alternatives available?

  • Add exciting new features to your mirror.

    6k Topics
    55k Posts
    S

    @emlowe its clearly a timing issue… multiple people have encountered it…

    I think you can change the waitFetch value up , depending on the time between fetchs as shown in the pm2 logs…

  • Make your mirror your own but modifying its appearance.

    409 Topics
    3k Posts
    K

    Hi everyone, i have no clue what im doing…i dont know how to code or really how the rpi/magicmirror works but here i am. So basically im using the default weather module (as it works) and i just wanna replace those icons with custom icons. I also wanna note that im using openmeteo and not the default openweathermap or wtv its called because it didn’t work.

    here is my config.js file (the weather part):

    module: "weather", position: "top_right", // Adjust position as needed locationName: "xxxx", displayLocation: "xxxx", header: "xxxx", config: { locationName: "xxxx", displayLocation: "xxxx", header: "xxxx", weatherProvider: "openmeteo", // Specify the Open-Meteo provider apiBase: "https://api.open-meteo.com/v1", // REQUIRED: Base URL for Open-Meteo lat: xxxx, // REQUIRED: Latitude of the location lon: xxxx, // REQUIRED: Longitude of the location maxNumberOfDays: 8, // OPTIONAL: Number of forecast days (default is 5) pastDays: 0, // OPTIONAL: Number of past days of data to include (default is 0) units: "imperial", // Set this to 'imperial' for Fahrenheit and miles per hour tempUnits: "imperial", // Make sure to match with 'imperial' windUnits: "imperial", type: "current", // OPTIONAL: Change to "current" if only current weather data is desired iconTable: { '0': 'wi-day-sunny', // Clear sky '1': 'wi-day-cloudy', // Mainly clear '2': 'wi-cloudy', // Partly cloudy '3': 'wi-cloudy', // Overcast '45': 'wi-fog', // Fog '48': 'wi-fog', // Depositing rime fog '51': 'wi-showers', // Drizzle: Light intensity '53': 'wi-showers', // Drizzle: Moderate intensity '55': 'wi-showers', // Drizzle: Dense intensity '56': 'wi-sleet', // Freezing drizzle: Light intensity '57': 'wi-sleet', // Freezing drizzle: Dense intensity '61': 'wi-rain', // Rain: Slight '63': 'wi-rain', // Rain: Moderate '65': 'wi-rain', // Rain: Heavy intensity '66': 'wi-sleet', // Freezing rain: Light intensity '67': 'wi-sleet', // Freezing rain: Heavy intensity '71': 'wi-snow', // Snow fall: Slight '73': 'wi-snow', // Snow fall: Moderate '75': 'wi-snow', // Snow fall: Heavy intensity '77': 'wi-snow', // Snow grains '80': 'wi-showers', // Rain showers: Slight '81': 'wi-rain', // Rain showers: Moderate '82': 'wi-rain', // Rain showers: Violent '85': 'wi-snow', // Snow showers: Slight '86': 'wi-snow', // Snow showers: Heavy '95': 'wi-thunderstorm', // Thunderstorm: Slight or moderate '96': 'wi-thunderstorm', // Thunderstorm with slight hail '99': 'wi-thunderstorm' // Thunderstorm with heavy hail } } }, { module: "weather", position: "top_right", // Adjust position as needed locationName: "xxxx", displayLocation: "xxxx", header: "xxxx", config: { locationName: "xxxx", displayLocation: "xxxx", header: "xxxx", weatherProvider: "openmeteo", // Specify the Open-Meteo provider apiBase: "https://api.open-meteo.com/v1", // REQUIRED: Base URL for Open-Meteo lat: xxxx, // REQUIRED: Latitude of the location lon: xxxx, // REQUIRED: Longitude of the location maxNumberOfDays: 8, // OPTIONAL: Number of forecast days (default is 5) pastDays: 0, // OPTIONAL: Number of past days of data to include (default is 0) units: "imperial", // Set this to 'imperial' for Fahrenheit and miles per hour tempUnits: "imperial", // Make sure to match with 'imperial' windUnits: "imperial", type: "forecast", // OPTIONAL: Change to "current" if only current weather data is desired iconTable: { '0': 'wi-day-sunny', // Clear sky '1': 'wi-day-cloudy', // Mainly clear '2': 'wi-cloudy', // Partly cloudy '3': 'wi-cloudy', // Overcast '45': 'wi-fog', // Fog '48': 'wi-fog', // Depositing rime fog '51': 'wi-showers', // Drizzle: Light intensity '53': 'wi-showers', // Drizzle: Moderate intensity '55': 'wi-showers', // Drizzle: Dense intensity '56': 'wi-sleet', // Freezing drizzle: Light intensity '57': 'wi-sleet', // Freezing drizzle: Dense intensity '61': 'wi-rain', // Rain: Slight '63': 'wi-rain', // Rain: Moderate '65': 'wi-rain', // Rain: Heavy intensity '66': 'wi-sleet', // Freezing rain: Light intensity '67': 'wi-sleet', // Freezing rain: Heavy intensity '71': 'wi-snow', // Snow fall: Slight '73': 'wi-snow', // Snow fall: Moderate '75': 'wi-snow', // Snow fall: Heavy intensity '77': 'wi-snow', // Snow grains '80': 'wi-showers', // Rain showers: Slight '81': 'wi-rain', // Rain showers: Moderate '82': 'wi-rain', // Rain showers: Violent '85': 'wi-snow', // Snow showers: Slight '86': 'wi-snow', // Snow showers: Heavy '95': 'wi-thunderstorm', // Thunderstorm: Slight or moderate '96': 'wi-thunderstorm', // Thunderstorm with slight hail '99': 'wi-thunderstorm' // Thunderstorm with heavy hail } } },

    sorry if that looks bad…also note that i got that table from this reddit post (the second image in the post): https://www.reddit.com/r/filemaker/comments/14yrpb9/openmeteo_weather_api_integration_free_icons_free/

    here is my custom.css file:

    /*! * Weather Icons 2.0.8 * Updated September 19, 2015 * Weather themed icons for Bootstrap * Author - Erik Flowers - erik@helloerik.com * Email: erik@helloerik.com * Twitter: http://twitter.com/Erik_UX * ------------------------------------------------------------------------------ * Maintained at http://erikflowers.github.io/weather-icons * * License * ------------------------------------------------------------------------------ * - Font licensed under SIL OFL 1.1 - * http://scripts.sil.org/OFL * - CSS, SCSS and LESS are licensed under MIT License - * http://opensource.org/licenses/mit-license.html * - Documentation licensed under CC BY 3.0 - * http://creativecommons.org/licenses/by/3.0/ * - Inspired by and works great as a companion with Font Awesome * "Font Awesome by Dave Gandy - http://fontawesome.io" */ @font-face { font-family: 'weathericons'; src: url('../font/weathericons-regular-webfont.woff') format('woff'); font-weight: normal; font-style: normal; } .wi { display: inline-block; font-family: 'weathericons'; font-style: normal; font-weight: normal; line-height: 1; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .wi-fw { text-align: center; width: 1.4em; } .wi-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .wi-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .wi-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .wi-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .wi-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } /* Current Weather Icons */ .currentweather .wi-day-sunny { content: url("/home/kool/MagicMirror/css/icons/6fa/day.svg") !important; } .currentweather .wi-night-clear { content: url("/home/kool/MagicMirror/css/icons/6fa/night.svg") !important; } .currentweather .wi-cloudy { content: url("/home/kool/MagicMirror/css/icons/6fa/cloudy.svg") !important; } .currentweather .wi-fog { content: url("/home/kool/MagicMirror/css/icons/6fa/fog.svg") !important; } .currentweather .wi-rain { content: url("/home/kool/MagicMirror/css/icons/6fa/rain.svg") !important; } /* Add more current weather icons as needed */ /* Weather Forecast Icons */ } .weatherforecast .wi-day-sunny { content: url("/home/kool/MagicMirror/css/icons/6fas/day.svg") !important; } .weatherforecast .wi-night-clear { content: url("/home/kool/MagicMirror/css/icons/6fa/night.svg") !important; } .weatherforecast .wi-cloudy { content: url("/home/kool/MagicMirror/css/icons/6fa/cloudy.svg") !important; } .weatherforecast .wi-fog { content: url("/home/kool/MagicMirror/css/icons/6fa/fog.svg") !important; } .weatherforecast .wi-rain { content: url("/home/kool/MagicMirror/css/icons/6fa/rain.svg") !important; } /* Hide Humidity */ .humidity { display: none !important; }

    I got the icons from this other weather module (but that module didn’t work as openweathermap is like glitchy or something)… weather module link: https://github.com/MarcLandis/MMM-OpenWeatherMapForecast
    when i try to load the magic mirror, i see the numbers - like whats the weather and stuff, but i keep getting the default weather icons.
    basically my idea was to override the default weather icons with some custom weather icons that i found but its not exactly working
    any help would be greatly appreciated plz help me :(

  • Share your project story with pictures.

    551 Topics
    5k Posts
    S

    @cyclonej Congratulations!!

  • You have a problem with your mirror? Ask for help.

    5k Topics
    33k Posts
    S

    @kasperb ok, his doc says

    At a minimum you need to supply the following required configuration parameters: apikey latitude longitude apikey needs to be specified as a String, while latitude and longitude can be specified as either a String or a Number. Both work fine. By default the module uses the OpenWeater One Call API in version 3.0 now cause version 2.5 has been shut down in June 2024. If you know what you are doing you can use the config option apiBaseURL to specify the URL you like.

    SO, you don’t need the apiBase property

    and you DID get a new 3.0 apikey, (which is backed by a credit card), right?

    the old (2.5) apiKey will not work with the 3.0 /onecall endpoint

    also, for future… all config and log info in a code block please here on the forum

    to do

    paste text into editor, blank line above and below
    select text just pasted
    hit </> button above editor

    the code block markers will be added… they MUST start a new line by themselves(why the blank line above/below)

  • A place to talk about whatever you want.

    1k Topics
    9k Posts
    S

    @chrisfr1976

    thanks for your patience… I think this will be better

    I have merged the installer function into the MMM-Config module

    currently the installer function is in a separate branch (with_installer) while we test it out

    note: if you are using docker, then these steps need to be done INSIDE the running container, using
    docker exec -it mm bash
    to get to a commandline inside the container
    AFTER using ssh to get to the docker host commandline

    if you don’t have MMM-Config

    cd ~/MagicMirror/modules git clone https://github.com/sdetweil/MMM-Config cd MMM-Config git checkout with_installer npm install

    see the readme above on how to add this module to your config.js

    if you already have MMM-Config

    cd ~/MagicMirror/modules/MMM-Config git pull git checkout with_installer npm install

    no configuration changes are required

    restart your MagicMirror instance

    for docker based MM instances, the steps are the same
    I notice that some of the files in the git pull will be marked as changed,
    altho its only the permissions
    so erase those files and then git pull
    and then checkout the with_installer branch
    etc

    Using the installer

    use this url

    http://mm_server:MM_port/installer

    and you will get the installer module selection page

    see the readme for usage

    after pushing the install selected modules button and the individual module installs complete,
    the MMM-Config configuration page will replace the installer page you had open

    when you are done configuring the modules, press Save, Create config
    and the current MMM-Config page will be closed, and your MM instance will be restarted
    (in most cases)

    from the readme

    MMM-Config will try to restart your MagicMirror system after configuration is complete if the MagicMirror instance is configured to auto restart due to config.js, that will happen naturally if the MagicMirror instance is NOT configured to auto restart due to config.js, then the MMM-Config **restart option** will be used to restart if the MagicMirror instance is in a docker container, like khassel's then the MagicMirror process will be killed, causing the container to restart if none of those options work, then you will have to restart the MagicMirror instance manually (same as if you modified config.js on your own)