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

Subcategories

  • Useful additions for your everyday life.

    673 Topics
    12k Posts
    M

    @Ragged4310

    See the green events
    0771ed78-ac78-4934-a294-ffb5c971240e-image.png

    b4009779-62fa-4c74-975d-5d5460f16111-image.png

    eventPayload in CX3 config;

    /* CX3 config section in `config/config.js` */ eventPayload: (payload) => { const targetCalendar = "Reservation" const divideGap = 1000 * 60 * 60 * 1 const locale = 'en-US' const timeStyle = { timeStyle: 'short' } const condition = (ev) => { return (ev.calendarName === targetCalendar && ev.fullDayEvent === false) } const target = payload.filter(condition).sort((a, b) => a.endDate - b.endDate) const result = payload.filter(e => !condition(e)) const dateStr = (dateValue) => Intl.DateTimeFormat(locale, timeStyle).format(new Date(+dateValue)) const collapse = (template, ev) => { if (!template?.["title"]) template = { ...ev, collapseCount: 0, description: '', location: '' } template.collapseCount++ template.startDate = String(Math.min(+template.startDate, +ev.startDate)) template.endDate = String(Math.max(+template.endDate, +ev.endDate)) template.title = `${dateStr(template.startDate)} - ${dateStr(template.endDate)}` if (template.collapseCount > 1) template.title += ` <span class="count">${template.collapseCount}</span>` template.description += `<div class="collapsedEvent"> <p class="title">${ev.title}</p> <p class="period">${dateStr(ev.startDate)} - ${dateStr(ev.endDate)}</p>` if (ev.description) template.description += `<p class="description">${ev.description}</p>` if (ev.location) template.description += `<p class="location">${ev.location}</p>` template.description += '</div>' return template } const dateKey = (dateValue) => new Date(+dateValue).toLocaleDateString('en-CA') let collapsedEvent = {} for (const ev of target) { const currentKey = dateKey(ev.startDate) if (!collapsedEvent?.[ 'title' ]) { collapsedEvent = collapse(collapsedEvent, ev) continue } const collapsedKey = dateKey(collapsedEvent.startDate) if (collapsedKey !== currentKey || +ev.startDate - +collapsedEvent.endDate > divideGap) { result.push(collapsedEvent) collapsedEvent = collapse({}, ev) } else { collapsedEvent = collapse(collapsedEvent, ev) } } if (collapsedEvent?.[ 'title' ]) result.push(collapsedEvent) return result }

    You can modify targetCalendar, divideGap, locale ande timeStyle for your purpose.

    To beautify;

    /* css/custom.css */ .CX3 .event.calendar_Reservation .headline .time { display: none; } #CX3_POPOVER .title .count, .CX3 .calendar_Reservation .title .count { font-weight: bold; color: gray; } #CX3_POPOVER .title .count::before, .CX3 .calendar_Reservation .title .count::before { content: "["; } #CX3_POPOVER .title .count::after, .CX3 .calendar_Reservation .title .count::after { content: "]"; } #CX3_POPOVER .description .collapsedEvent { line-height: 115%; border-bottom: 2px solid silver; p { margin-top: 0; margin-bottom: 0; } .title { font-weight: bold; } .period { text-align: right; } .description { font-style: italic; white-space: pre; padding-left: 20px; } .location { font-style: italic; text-align: right; } }
  • Tweak your system until it is just right.

    137 Topics
    4k Posts
    D

    Re: MMM-AutoDimmer

    It looks like it doesn’t dim my entire screen. It looks like an Inverse letterbox so to speak. Anyone else having this problem?

  • Find your next train with ease!

    127 Topics
    2k Posts
    karsten13K

    @stashu said in MMM-Flights:

    if there is a way I can hide the horizontal line which is under the ‘Flights’ label.

    I updated the module, if you now set title and logoTitle to empty strings no header and no line is diplayed anymore.

  • Boost your productivity.

    56 Topics
    991 Posts
    htilburgsH

    @sdetweil In the netherlands, we do have that!
    Fortunately, otherwise I would not have been able to write this MagicMirror module ;-)

  • Learn something new every day.

    50 Topics
    891 Posts
    S

    @raymondjspigot i’d make a fork of the module
    clone that
    add a parameter to set the format differently
    and submit that as a pull request back to the module github

    others probably would like to change that format

  • Stay healthy and work on your well-being.

    24 Topics
    688 Posts
    S

    @MisterT 60*1000 is every minute,
    1440 times a day

    their limit us 100/15 minutes and 1000/ day
    Screenshot_20240320_130602_Chrome.jpg

  • Entertainment right from your mirror.

    153 Topics
    2k Posts
    S

    @cgillinger said in Let it snow now Magic Mirror:

    I cleared my MM installtion of modules to test this

    just fyi… you can use another config.js
    without removing the existing or removing any modules

    in the terminal window you are using to start/stop/test mm

    export MM_CONFIG_FILE=config/_other_config_name.js

    then npm start will use _other_config_name.js for config
    (and in that other config you can point to a different custom.css!)
    see https://docs.magicmirror.builders/configuration/introduction.html

  • Have some fun!

    55 Topics
    701 Posts
    C

    Hello,

    I’ve added one nice interactions to the module now. This took me some days to get it fully running. But now I’m quite happy with the result, so I also share it here again:

    CSS animations for door opening and closing effects. Manual Door Interaction: Click to Open/Close: Clicking a closed door opens it with an animated rotation. Door Opening Animation: 3D rotation animation from the right edge when opening. Reverse animation when closing.

    The state is written in the state.json file. So now your kids can “really” open a door in the morning and if you shut down your mirror in the night it has the same state after a reboot.

    If you’re already running the module delete the state.json file if you feel that something does not work correct (I deleted it quite often during development so I can’t say if there could be an issue).

    The update sounds easy but believe me for me it was not ;-)

    MMM-Adventskalender

  • Give your Mirror a work out!

    46 Topics
    1k Posts
    E

    @mumblebaj Thanks all appreciate any feedback

  • Showcase Guidelines

    Pinned
    5
    8 Votes
    5 Posts
    6k Views
    P

    @paviro NICE i’m loving it

  • 1 Votes
    2 Posts
    70 Views
    KristjanESPERANTOK

    @shehant Nice! Don’t forget to add it to the module list: https://github.com/MagicMirrorOrg/MagicMirror/wiki/3rd-party-modules :-)

  • 0 Votes
    1 Posts
    70 Views
    W
    Description:

    Hi everyone, created this module MMM-Hevy to show strength training muscle split and worked out days of the current week from Hevy workout App.

    Hevy is a free weight lifting workout tracker that lets athletes log their workouts, analyze progress.

    Note: At the moment, you will need a paid subscription to Hevy to use this module. The free version does not provide an API key to access the data.

    To grab an API key: visit https://hevy.com/settings?developer and Generate a new API key.

    Please feel free to reach out with any questions or suggestions. Feel free to leave a star on the repo if you are enjoying this module.

    Thank you.

    Screenshots:

    HevyMuscleSplit

    Download:

    [card: wathmal/MMM-Hevy]

    Version 1 Initial release Show muscle split and dats from the current weeks workouts.
  • MMM-whoshome A way to know who is home based on cellular phones

    19
    3 Votes
    19 Posts
    1k Views
    R

    @tintinmaster if you read description you can find this topic. You can deactivate it separate for every Network. At least i have no issues to keep my mac address in my home wifi.

  • MMM-SoccerLiveScore not loading

    2
    0 Votes
    2 Posts
    103 Views
  • Google Keep alternative

    3
    0 Votes
    3 Posts
    415 Views
    D

    In the past, I have used Todoist and the module here: https://github.com/cbrooker/MMM-Todoist

    Looks like this module has recently been updated, so I’d imagine it still works. Checkout Todoist and let us know if this module achieves what you need!

    EDIT* Me going to the the Github page and at the top of the page it says: " ** Developer is not actively maintaining this Extension. ** " so this may be hit or miss

  • MMM-TheSpaceDevs - Display Upcoming Launch Data from TheSpaceDevs API

    1
    1 Votes
    1 Posts
    134 Views
    A
    Description:

    Hi everyone! MMM-TheSpaceDevs is a module that displays upcoming rocket launch data from TheSpaceDevs API in either a table view or a detail view. This is my first MagicMirror Module and this project is still very much a work in progress but all the basics are present.

    The table view columns are not currently configurable but I plan to update that in the future.

    The detail view displays an image of the rocket, status of the launch, orbit, rocket name and company name, a count down timer to launch which transitions T + time after launch as well as a description of the mission.

    Its important to note that TheSpaceDevs API is free for up to 15 calls per hour before it gets throttled. If you use both the table and detail views at the same time you will be making an API call for each view. As a result, change your updateInterval accordingly so that you stay within range unless you are paying for increased API access.

    Please feel free to reach out with any questions or suggestions. I will be working on updating this module when I have time (maybe a couple of times a week). Also feel free to leave a star on the repo if you are enjoying this module. Thanks guys!

    Screenshots:

    Table View
    table_view.png

    Detail View
    detail_view.png

    Download:

    MMM-TheSpaceDevs

    Version 1 Initial release Table view of rocket launch data Detail view of rocket launch data
  • Lien hypertext via Google Sheets

    1
    0 Votes
    1 Posts
    94 Views
    C

    Bonjour,
    je suis à la recherche d’une astuce pour utiliser des liens cliquables sur le module GoogleSheets.
    Sur GoogleSheets, j’ai ajouté le module pour y faire figurer mes recettes de cuisine pour la semaine et j’aimerai cliquer directement sur un lien ouvrant la recette de cuisine pour suivre la recette.

    Auriez vous une astuce svp ?

    Je vous remercie.

  • [MMM-OnThisDayWikiApi] - Get Wikipedia's OnThisDay using the Wikimedia API

    17
    3 Votes
    17 Posts
    2k Views
    I

    @greedyvegan said in [MMM-OnThisDayWikiApi] - Get Wikipedia's OnThisDay using the Wikimedia API:

    @imdickie said

    The title seems to ignore the forced maxWidth. Is there any way to force the title to align to the body?!

    I’ve had this issue before
    try the developer view in a browser to see your options
    the default settings doesn’t prohibit you

    It didn’t accomplish what I wanted, but I can see you did send me down the right path. I’ll do some investigating some Custom CSS statements.

    Thanks.

  • MMM-PenPlotter -Render mesmerizing line animations on your mirror!

    18
    5 Votes
    18 Posts
    9k Views
    R

    Thanks for sharing your module!!

  • Football (soccer) broken since update

    3
    0 Votes
    3 Posts
    331 Views
    lavolp3L

    @dawookie1979 You can try my module MMM-soccer.
    See the link :backhand_index_pointing_down_light_skin_tone: in my signature.

  • Wider customization for GA

    5
    0 Votes
    5 Posts
    475 Views
    S

    @Alexjons see the recipes folder in the module folder… far as I know that is the only doc

  • Chatgpt+google STT + elevenlabs api

    8
    1 Votes
    8 Posts
    2k Views
    S

    @soldatino okay, I think it’s because you are using a different username it’s breaking. I will try to add the config options to set the files path in the coming days, for now just check you nodehelper of MMM-Chat.js line 21 and let me know if that helps. You will have to set it to your correct absolute path. Cheers.

  • Drunk AI

    1
    0 Votes
    1 Posts
    1k Views
    S

    Recently I came across this awesome module MMM-OpenAI, I have posted earlier with a short demo and YouTube link for the full demo. and I decided to do something fun, I was not expecting it to turn out this way, I have detailed the step by step instructions in the GitHub to set this up, Iam not from a technical background therefore the codes are not really polished and there maybe issues but I tried by best to be thorough in the instructions as much as possible, I’m sure someone else will come up with better idea to implement this, here is the link Drunk AI repo
    At the moment it’s quite slow and it will get faster will more enhancements

    Detailed instructions:
    Drunk-AI

    This is an integration of OPENAI chatgpt in the magicmirror. Demo below watch the full demo here ([https://youtu.be/eDcc7zqAFwE]) This is the initial version, I am not from a technical background therefore if the codes and scripts are little off the charts or there is a way to enhance it feel free to send PR. I admit this is quite messy and little long process to set up but in the end its worth it.

    Download the shortcuts linked below and configure it with the api key from MMM-RemoteControl
    more info here ([https://github.com/Jopyth/MMM-Remote-Control.git])

    ios shortcuts link

    ([https://www.icloud.com/shortcuts/8a0e7600808d45eb9616dae8105653ef])

    EDIT THE DOWNLOADED SHORTCUT with your magicmirror ip address AND REPLACE apikey in the text with your api key from MMM-RemoteControl. you need to run this shortcuts every time you want to interact with the chatgpt, or you can use the default telegram commands but that is without voice input, hotword detection will be added soon. When you run this shortcuts, the mirror with update with jarvis animation and text saying “say something”, you have to speak in the microphone after you see Say something and if the audio was captured successfully, it will update with the spoken text. the listening duration is set to 4 seconds by default, you can adjust this by editing the transcript.py in the MMM-Chat module mentioned below. Install and configure MMM-Chat from here ([ https://github.com/sdmydbr9/MMM-Chat]) Install MMM-NotificationTrigger ([https://github.com/MMRIZE/MMM-NotificationTrigger.git]) Add the following lines to the config { module: 'MMM-NotificationTrigger', config: { triggers: [ { trigger: 'SHOW_ALERT', fires: [ { fire: 'MY_COMMAND', exec: (payload) => `python3 /home/pi/MagicMirror/modules/MMM-11-TTS/main.py "${payload.message}"` } ] } ] } }, Install MMM-OpenAI from here ([https://github.com/MMRIZE/MMM-OpenAI.git])

    Add the following in your config

    { module: "MMM-OpenAI", position: 'top_right', config: { defaultChatInstruction: "Your name is Marvin and you are a paranoid android that reluctantly answers questions with sarcastic responses.", stealth: true, // <- This is needed to hide default module view. postProcessing: function (handler, responseObj) { if (responseObj.error) return // When the error happens, just do nothing. let method = responseObj.options.method let alertPayload = { title: responseObj.request.prompt, imageUrl: (method === 'IMAGE') ? responseObj.response.data[0].url : null, message: (method === 'TEXT') ? responseObj.response.choices[0].text : ((method === 'CHAT') ? responseObj.response.choices[0].message.content : null), timer: 2 * 1000 } handler.sendNotification('SHOW_ALERT', alertPayload) } } }, Clone the following respository ([https://github.com/sdmydbr9/MMM-11-TTS]) in your modules folder and install it according to instruction edit the main.py and add your api key and voice id, a voice id as already set by default, you can add any voice id, refer elevenlabs api doc for more details. Disclaimer: Even though the quality of the output of their voice is far superior to GOOGLE TTS, the character limit is very limited, 10,000 characters per month per account, I hope they will offer more in future, or you can opt for a paid account and get around 30,000 characters as well as voice cloning features, clone any voice you want, for example clone the voice of jarvis and transform your magicmirror into jarvis. just add the voice ID in the main.py and youre good to go. Disclaimer 2: The above module works in my test but it is not very efficient since the script will first downlaod the audio from the api request and convert it using fmpeg and play the audio as output. Depends on fmpeg. Install it if you dont have it installed using apt This whole implementation maybe possible to be implemented in a single module, I hope someone will try to make this in a single module and less messy
  • 0 Votes
    2 Posts
    2k Views
    I

    This is the link: https://github.com/ImanuelBertrand/MMM-ChatGPT
    The [ card ] syntax from the showcase guidelines doesn’t seem to work, or maybe I made a mistake.

  • Module for NFT collection - MMM-NFTcollections

    1
    1 Votes
    1 Posts
    311 Views
    T

    Hello everyone,

    I just want to let you know that I’ve managed to develop a new module that displays details about a specific NFT collection: name, image, count, and progress bar.

    magicMirror2.png

    It uses the Alchemy API to fetch data from the blockchain and Opensea and all you need is the API KEY from Alchemy and the contract address of the collection you want to follow.

    Once the count reaches the max number of tokens the status is changed to ‘Sold out’ and you can track another collection.

    More details about the installation and config can be found on the github repo: https://github.com/TemianMihai/MMM-NFTcollections

    Please let me know what you think about it and provide some feedback!

    Kind regards,
    Mihai

  • show jsontable by user using Face Reco DNN

    7
    0 Votes
    7 Posts
    489 Views
    J

    @sdetweil I am thankful, i will try it

  • 2 Votes
    4 Posts
    769 Views
    S

    @hayseed i agree, don’t know what it is supposed to do…

  • MMM-forecast-io migration to OpenWeatherMap from DarkSky

    8
    1 Votes
    8 Posts
    2k Views
    FlatPepsiF

    Felt inspired, added full metric support. Units set via the config file.

    ‘imperial’ for Fahrenheit temp and MPH wind ‘metric’ for Celsius temp and Meters Per Second wind

    Graph now should scale appropriately when using non-default widths.

  • 1 Votes
    2 Posts
    1k Views
    KamiSchamiK

    @cirdan said

    Hello, I didn’t know the MMM-Rijks module yet. Finally some culture is moving into my infoboard. Thanks. Greetings from Flensburg, Germany