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

Subcategories

  • Any suggestions or wishes for the forum?

    103 Topics
    720 Posts
    S
    @OrangeMirror the current docker setup will only work for multiple instances IF you use the MM_CONFIG_FILE environment variable to run instances off different config files, or the MM_PORT env variable to override the port if using the same config.js all the files will come from the ONE folder tree ~/magicmirror so this means you would have to setup multiple entries in the compose.yaml to launch multiple instances (with the different config parms) You have to change the container name too this is because all the DATA used by the container is external (on docker host filesystem) and not IN the container an example NOT using docker, but same idea here https://docs.magicmirror.builders/configuration/introduction.html#advanced-configuration-and-frequently-asked-how-to-configure-examples
  • Newbie - Using MM as a screensaver and when touched goes to browser

    1
    0 Votes
    1 Posts
    236 Views
    P
    Hi Guys, I’m new to MM and wasn’t too sure where to post this question, please forgive me if it’s in the wrong forum. I’m building a MM to use as a dashboard/control panel in our kitchen and was inspired by a YT video (https://www.youtube.com/watch?v=ZzZpRx7Mg1s). The owner is using Android/Dakboard/Fully Kiosk, however I am hoping to use Rpi/MM/Chrome browser (locked down), I’m unable to locate any info regarding using MM as screensaver and when touched defaults to Chrome in locked down mode to my Home Assistant URL and then after a specific time with no activity MM would start again as the screensaver. Hoping someone can point me in the right direction and thanks in advance for any advice.
  • Pool chlorine value in mirror

    Unsolved
    2
    0 Votes
    2 Posts
    446 Views
    D
    @differentjacob said in Pool chlorine value in mirror: I’m having a unit called blueconnect. A little floating things in the pool, this is connected to wifi or bluetooth and saving chlorine, temp values in the cloud. Is there someone here having same solution to the pool or spa. I’m not a developer but realy cool to see in the mirror every morning. Maybe anyone here can develop 😃
  • Premiership themed magic mirror/uk football leauges.

    Moved
    2
    0 Votes
    2 Posts
    683 Views
    M
    @andybriggs03 Hi Andy, I’ve kinda done this using the calendar to get all premiership fixtures and also MMM-soccer to show the Premier League table. Next job is to get the club emblem in the background. BTW, I’m a Leeds Fan. MOT [image: 1610895570615-0a4e1231-3624-4dfa-8e1e-8635faac3717-image.png]
  • Spotify WITH MUSIC for free user? kinda

    spotify music music player magic mirror
    1
    0 Votes
    1 Posts
    417 Views
    A
    So basically if u install chromium media edition on your rpi and use Spotify web as the music player and run magic mirror on top of it u might be able to use magic mirror with any Spotify control module to contol playback on the web play. Please someone develop a module for this Or just guide me with the first step in creating a module for Spotify
  • Simplifying the live on the bash command line

    7
    2 Votes
    7 Posts
    2k Views
    F
    Long time Linux user, still have problems remembering rarely used commands. Thanks N-O-D-E guy! Recommend anyone using this and hoping to master BASH to still create their own scripts (got to do it to learn it!). Create a dir, eg, “my_scripts” and add it to your path. jiofilocalhtml https://forpc.onl/snaptube-for-pc
  • Intro to all of u

    1
    0 Votes
    1 Posts
    235 Views
    J
    Re: Introduce yourself! Its Jesica Taylor. I am 25 years old. Doing job in a private company named as wapexp. I have 3 childs, one daughter and two sons.
  • MMM-Assistant2Display

    10
    0 Votes
    10 Posts
    2k Views
    T
    @Bugsounet Merci beaucoup pour ta réponse et, de manière générale pour l’ensemble des ressources mises à disposition.
  • Further personalization with Face-Reco

    16
    0 Votes
    16 Posts
    4k Views
    M
    It appears to be working now (snuck to the Pi on my lunch break). I left one compliment in the afternoon class of the defaults list in compliments.js and put one into the instance tagged with my name as the class in config.js using the proper formatting. I now see where I went wrong so thanks for the help. I’ll try making multiple instances in config.js with different users tagged in the classes.
  • Someone to help me through the process

    3
    0 Votes
    3 Posts
    510 Views
    M
    Pedro - trust me on this. There is so much satisfaction that comes from the major frustrations you’re sure to encounter in the process of “figuring it out” on your own. I’ve just now signed up to the forum to first thank everyone that helped me through their threads that Google found for me when I was stuck and now, with TWO mirrors running to dig deeper beyond the “already made” stuff. You can do it and you will, like me, learn a whole pile of new stuff that you’ll carry on to many other projects. I’ve learned about terminal commands in Python, installing stuff through git commands, searching through error code and more. My first mirror was a basic setup which I then searched and experimented with to get localization working for time setting, news relevance, weather etc. I then figured out how to get our own families’ Google calendar events showing and so on. Mirror #2 started out from there and had facial recognition added to it for four members of our household. There were MANY hiccups along the way but I did it. You can too! Follow the guides that are out there and celebrate each success you have! I started this with minimal previous knowledge other than how to flash an SD card.
  • Smart Mirror - how to find the right balance between monitor and mirror

    1
    0 Votes
    1 Posts
    315 Views
    L
    Hey, there are multiple mirror sizes available and I am unsure about whether the size of the monitor and mirror will be “in sync”. I am thinking of buying a 12" x 18" mirror. Advice for what size monitor to get? (Going for a budget mirror) shorturl.at/ntxIT -> It’s an amazon Link trust me on it Also, anyone has any examples of what sizes they have used for both the mirror and the monitor?
  • axios request returns no data, while http request does

    7
    0 Votes
    7 Posts
    3k Views
    lavolp3L
    @sharklaser said in axios request returns no data, while http request does: : axios.defaults.headers.common[‘User-Agent’] = ‘PostmanRuntime/7.26.2’; That was the solution! Thanks!!
  • how to make just 1 module bigger?

    6
    0 Votes
    6 Posts
    2k Views
    A
    This is amazing, thank you so much!
  • Rasbian in Portrait mode: How to make new windows open on top position

    1
    0 Votes
    1 Posts
    269 Views
    M
    Happy New Year everyone! May 2021 be the year that will bring everything you need in life. This is driving me insane. I’m running my MM in portrait mode. How do I tell raspbian to open any new window op top of the display instead of position middle? So when I open terminal the window opens in the middle of the screen and I have to drag it to top to work pleasantly. Same with the file explorer and all the other windows I open new. Sorry for being a massive n00b. I really can’t find a way to google myself out of this. Help?
  • No GitHub Info on Module Page

    9
    0 Votes
    9 Posts
    1k Views
    M
    Good info. Thanks again.
  • Combining keybindings and telegram bot?

    1
    0 Votes
    1 Posts
    248 Views
    C
    I have both MMM-KeyBindings and MMM-TelegramBot installed and working well. Is there a way to have telegram simulate key presses for MMM-KeyBindings to respond to? My scenario is this : I have MMM-Carousel set up to cycle through two pages but sometimes I want to manually advance the page. The only way MMM-KeyBindings works is when I’m connected to my Rpi using VNC. So that’s not very practical. If I can trigger a virtual keypress via MMM-TelegramBot, that would be awesome. Has anyone tried this?
  • Change the modul position remote with api or something similar!

    7
    0 Votes
    7 Posts
    1k Views
    P
    Thank you.:folded_hands: Then I have to use the remote-control module in a Javascript code to be able to access MMM-Dynamic-Modules. Maybe I can find a code example somewhere on the internet that makes it work too.
  • Help again...

    15
    0 Votes
    15 Posts
    3k Views
    S
    @smart_user the way you are supposed to do it is in config.js { module: “compliments”, position: “lower_third” config: { compliments: { anytime: [“Make today worth it!”], morning: [“Good morning!”, “Have a wonderful day”, “It’s your day today!”], afternoon: [“You can do this”, “Take a small nap”, “Enjoy your meal”], evening: [“Exercise time!”, “NO PAIN NO GAIN!”, “Well done for the day!”], “…-01-01”: [“HAPPY NEW YEAR!”], “…-12-25”: [“MERRY CHRISTMAS!”] } } }, { module: “compliments”, header: ‘’, position: “middle”, config:{ compliments: { anytime: [“Make today worth it!”], morning: [“Good morning!”, “Have a wonderful day”, “It’s your day today!”], afternoon: [“You can do this”, “Take a small nap”, “Enjoy your meal”], evening: [“Exercise time!”, “NO PAIN NO GAIN!”, “Well done for the day!”], “…-01-01”: [“HAPPY NEW YEAR!”], “…-12-25”: [“MERRY CHRISTMAS!”] } } } and u leave the original code untouched. this way we can change the code, without impacting your configuration
  • Need help - New programmer

    23
    0 Votes
    23 Posts
    5k Views
    S
    @innovation this sample module shows a whole host of things. default message that CAN be overridden by one placed in the module config in config.js defaults: { message: "STAY HYDRATED! DRINK A GLASS OF WATER" }, config:{ message: "some message to replace the default" } use of the notification that all modules are loaded and started, to send an event to the node_helper notificationReceived(), ALL_MODULES_STARTED sendSocketNotification the node helper received the config info and does some processing (by using a timer in this example), receiveSocketNotification then sends data back to the module sendSocketNotification() this 'data' is the configured message, the module sends all the config down to the helper, the helper sends back JUST the message to display from the config info it just shows how the parts fit together and communicate with each other 4a. the module receives the notice from the node_helper, and then setup up to display that data socketNotificationReceived() 4b. the module tells MM that there is new data to display updateDom(1000) the module formats the data for display getDom() now, the current implementation ONLY sends and displays the message once… send down to node_helper, timer, send to module, display u want two things make message go away display some other message but u need something to start the work… after all of the above, there is nothing to do… getDom() ALWAYS displays whatever is in the message variable. SO, we could start ANOTHER timer, and when it expires, cause getDom() to display something different (from the same old place) the timerRoutine() will do the second part , change the message variable, and tell MM it changed, which calls getDom() but some NEW code has to cause the timerRoutine to run… for this example, when getDom() runs, lets add some code to run the timerRoutine later setTimeout(this.timerRoutine, ???) where ??? is some number of milliseconds 15000 is 15 seconds (15 seconds times 1000 milliseconds per second) so , our updated getDom() looks like this getDom (){ var wrapper=createElement("div") wrapper.innerText=this.somestring // use the value of the somestring variable to display setTimeout(this.timerRoutine, 15000) // start a timer, when it expires call our routine return wrapper; } so lets look at our timerRoutine every time it runs, it will update the counter variable and then create a new message string timerRoutine: function(){ this.somestring="some other string "+ this.counter++; this.updateDom(?????) // time_to_delay_in_ms, 0 = immediately } updateDom takes a number as a parameter, number of milliseconds… how FAST do you want the new info to display??? immediately? or after some time? if immediately, then the number is 0 so, the updated routine looks like this timerRoutine: function(){ this.somestring="some other string "+ this.counter++; this.updateDom(0) // time_to_delay_in_ms, 0 = immediately } (ps u need to add the counter variable at the top near your defaults, not IN defaults, so that this code will work) so, now we have the whole loop, start, send to node_helper, node_helper waits, sends message back, module updates variable, and tells mm we have content, mm calls getDom, which creates the html content to display, starts ANOTHER (one time) timer, and gives the current content to MM. and then that timer expires and calls our routine, which changes the variable, and tells MM we have new content, mm calls getDom, which creates the html content to display, starts ANOTHER (one time) timer, and gives the current content to MM. repeat this last cycle forever, over and over and over. so the displayed message will change every 15 seconds so, NOW you want the message to go away, before the next message appears… well, we have to start some OTHER timer, OR piggy back on the existing timer… lets use a second timer and a second timerRoutine (otherwise the time cycle is 15 seconds on, 15 seconds off ----> need to add showMessage:true, to the variables at the top timerRoutine2: function(){ this.showMessage= !this.showMessage // this will cause the flagShowMessage to toggle between true and false this.updateDom(0) // time_to_delay_in_ms, 0 = immediately } and now we need to fix getDom() getDom (){ var wrapper=createElement("div") if(this.showMessage){ // if we should show the message wrapper.innerText=this.somestring // use the value of the somestring variable to display setTimeout(this.timerRoutine2, 5000) // start the timer to CLEAR the message in 5 seconds } // we don't need the negative case, cause we created a new empty div, so it will have nothing to display setTimeout(this.timerRoutine, 15000) // start a timer, when it expires call our routine return wrapper; } these are just examples, there are lots of ways to do something like this, up to your imagination… write it down on a piece of paper, walk thru it in your native language, get the flow… then write code to match
  • Magic Mirror invocation via Flask-ask Alexa Intent

    2
    0 Votes
    2 Posts
    281 Views
    S
    @ashokkn what is your intent doing? How is it starting mm? Line 93 in js/electron.js is a call to Log to print a message to the console
  • Module for German "DSB" (electronic bulletin board)?

    1
    0 Votes
    1 Posts
    307 Views
    kaiK
    Hi there, does anyone know if there is a module for the German “Digitales Schwarzes Brett” / DSBmobile (electronic bulletin board for schools)? I couldn’t find one within the 3rd party modules. (Maybe there are some other module sources?) I’m sorry I do not have any more information about it, our kids just use the DSBmobile app, and I saw that there is an API. It would be great if we could display supply teachers and changes of the class schedule on our magic mirror. :-) Any hints appreciated. Thanks a lot. May the code be with you -kai