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

    11
    1
    0 Votes
    11 Posts
    3k Views
    mumblebajM
    @sdetweil Thanks Sam. Managed to resolve this. Everything works fine now and plays well with the other modules.
  • Maintaining modules - security updates

    5
    0 Votes
    5 Posts
    1k Views
    S
    @qistoph we don’t have any binaries, all our code is in JavaScript. we are exposed to the general internet trends, speed of delivery over stability breaking changes are everywhere. I will say that a couple volunteers have been are working hard on processes for mm to detect those breaking changes by implementing a test system . but nothing is perfect
  • struggle with MMM-Remote-Control and MMM-Buttons

    9
    0 Votes
    9 Posts
    2k Views
    M
    @sdetweil thanks very much Sam - I will try that
  • Find a maintainer for my modules

    1
    0 Votes
    1 Posts
    389 Views
    bugsounetB
    Hi, I change my coding plan for 2023 ;) I will code ONLY for Google Assistant and his plugins So I decide to part with the majority of my modules! Impected: MMM-NewsFeed MMM-Ecowatt [FR Module] MMM-FranceInfo [FR Module] MMM-Netatmo-Thermostat MMM-Weather MMM-PrixCarburants [FR Module] MMM-Shom MMM-Tools MMM-Pronote [FR Module] MMM-TuyaThermometer MMM-Freebox [FR Module] MMM-AirParif [FR Module] MMM-SpeedTest MMM-FreeBox4G [FR Module] MMM-Saint MMM-TelegramBot Notes: Wiki of the module will be sended Any npm library part will be sended (if needed) I have no time to maintened ALL modules You want to continue to maintain one of its modules.(and take care of it!) Manifest yourself ! I will transfer it to you with pleasure 🙂 @bugsounet
  • 0 Votes
    3 Posts
    2k Views
    S
    @nkc also you asked this in your other topic already
  • Magic Mirror Module Development - Powershell embeded

    4
    0 Votes
    4 Posts
    1k Views
    S
    @wishmaster270 I was going to recommend your modules but strayed into notifications , and I think that took him off path
  • From JSON to display on MM

    2
    0 Votes
    2 Posts
    527 Views
    S
    @lkthomas said in From JSON to display on MM: which module should I use as an example for JSON iteration? How could I filter the closest timestamp with current time then display it in minute on MM? there is an array filter function you pass in the array, the logic looks at each element one by one… true means keep it in the results, false say don’t keep it. the resulting array is the good subset of the total javascript and json are very close friends. url get request can return a javascript object of the json text … then u can pass the array part (data I think from your sample) to the filter… if you use fetch , you can do this in the browser side of the module, otherwise have to use a helper… https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch fetch('http://example.com/movies.json') .then((response) => response.json()) .then((data) => console.log(data)); data is now a js object of the json text see my sample module for building a starter… https://github.com/sdetweil/SampleModule the browserside of the module (I call it modulename.js, cause its name MUST match the name of the module, and it has to be in a folder called the exact same) creates a small segment of html content (either text or actual DOM nodes) … and gives that to MM when requested (the getDom() function) and MM will put the content where u configured the module to have its content shown. so folder, modulename.js and modulename all match if you do the fetch on a timed cycle, once u have the data, call updateDom() to inform mm your module has new content, then mm will call your getDom() to get the new content. getDom() either creates the content or knows where the previously created content is.
  • Svenskalag.se

    5
    0 Votes
    5 Posts
    1k Views
    S
    @Henrik nice work
  • ChatGPT is creating Modules

    3
    1
    1 Votes
    3 Posts
    1k Views
    K
    That is so cool, if it works
  • Widgit accessabililty

    6
    1 Votes
    6 Posts
    1k Views
    N6NGN
    @wishmaster270 I ended up using MMM-EmbedURL and it worked fine for what I was trying to do. Thanks all for your help N6NG DENNIS
  • Hide a module by default

    11
    0 Votes
    11 Posts
    3k Views
    S
    @BKeyport ah, I see the question… never heard a period called that
  • MM-PIR-motion-poweron

    pir sensor shutdown power-saving
    1
    0 Votes
    1 Posts
    409 Views
    C
    I created powersaving program for automatically start the RaspberryPi, if a motion ist detected via PIR-sensor and shut down after a waiting time. It’s at Git and I want to share it with you. I would be happy if you give me Feedback. https://github.com/ChrisBaehrig/MM-PIR-motion-poweron
  • Requesting assistance with GroceryApp module

    8
    0 Votes
    8 Posts
    1k Views
    S
    @CurlyQ12391 np. I was just trying to help you make progress. I know nothing about the API. but couldnt find anything similar to the code in the helper
  • turning Postman query into getJSONP()? (BTC node query)

    6
    1
    0 Votes
    6 Posts
    2k Views
    S
    @FlatPepsi also, something like this might help https://github.com/amcolash/MMM-json-feed put in your url, display data
  • ES6 notation

    7
    0 Votes
    7 Posts
    2k Views
    mumblebajM
    @MMRIZE and @sdetweil Thanks guys, Thought I would put the question out there and see what crawls out the woodwork. ;-)
  • Notion Integration

    Unsolved
    2
    2
    0 Votes
    2 Posts
    993 Views
    S
    @Amit5001 so, you will need to write a module. mm runs inside a browser, electron, chrome, Firefox, … it displays one web page each module gets data from somewhere and builds a small blob of html, or dom content, and gives that to mm, which places it in the browser DOM in the position you configured the spec is here https://docs.magicmirror.builders/development/introduction.html you can use my SampleModule as a starting place, it’s got all the parts https://github.com/sdetweil/SampleModule something to do before that, is to figure out how u want it displayed and build the html to do that, it’s just text. you can test that output in any browser. a module is split into 2 parts. the part that runs in the browser and does all the display work I call it modulename.js cause it’s filename matches the module name. it’s the part that interfaces to mm but a browser cannot read files (incl database) or touch hardware directly. for security. browser cannot import or require to load libraries. so if u need to do that, you use the helper, called node_helper.js. there is a small communication mechanism between the two parts. modulename.js sends a message, send socket notification and the helper receives them, receiveSocketNotification when done the exact same calls are used in the other direction. helper sends module name.js receives. this is a private channel between this module and it’s helper.
  • when to use init , start, loaded of node helper

    9
    0 Votes
    9 Posts
    2k Views
    kayakbabeK
    @kayakbabe DRAT! I just crushed my microSD with my wheelchair. It is definitely time for bed.
  • Trying to make my own LIRR live map module but don't know where to start

    4
    0 Votes
    4 Posts
    2k Views
    S
    @EphraimB you can view and save that as an image. the railroad tracks and terminals are not gonna move today… or anytime soon
  • Does node_helper know if all module instances are already started?

    15
    0 Votes
    15 Posts
    6k Views
    A
    @sdetweil Works as you wrote. Sadly its not in the documentation.
  • Need help with new Modul "Scare"

    8
    0 Votes
    8 Posts
    1k Views
    R
    @Rattenjunge8080 So, i found a Solution, if anyone is interested, be my guest to copy this (spaghetti-code! I catch exceptions cause i am not able to check if and how many pictures are already loaded): /* MagicMirror² * Module: Scare * * By Rattenjunge8080 * */ Module.register("Scare", { // Default module config. defaults: { }, start: function(){ //The container which will be shown in DOM this.container = document.createElement("div"); this.visible = true; //set true via resume this.blocker = false; //block multiple DOM-calls image1 = document.createElement("img"); image1.src = '/modules/Scare/img1.jpg'; image1.classList.add("image1"); image2 = document.createElement("img"); image2.src = '/modules/Scare/img2.jpg'; image2.classList.add("image2"); }, // system notification your module is being hidden // typically you would stop doing UI updates (getDom/updateDom) if the module is hidden suspend: function(){ console.log('suspend'); this.visible = false; this.updateDom(1000); //TODO If in future not all pictures are removed->Delete the container: //this.container.remove(); }, // system notification your module is being unhidden/shown // typically you would resume doing UI updates (getDom/updateDom) if the module is shown resume: function(){ console.log('resume'); //TODO If in future not all pictures are removed->add here the container: //this.container = document.createElement("div"); this.visible = true; this.updateDom(); }, /* * Here the first Image will be added to a container, shown on screen * and a timer will count down. Let them feel safe for a while... * then a new image will pop up and a sound is played */ showImageAndPlaySound() { this.blocker = true; //TODO: Maybe useful in future //this.container.innerHTML = "<img src=\"/modules/Scare/OVAL.png\" width=\"200px\" height=\"500px\">"; //Put in picture to let it print on DOM this.container.appendChild(image1); this.updateDom(); console.log("set timeout 10s"); try { setTimeout(() => this.container.removeChild(image1), 10000); }catch (e) {console.log("catch timeout line 70");} setTimeout(() => this.container.appendChild(image2), 10000); this.updateDom(); //Generate the Audio from local file TODO auch mit setTimeout machen var audio = new Audio("/modules/Scare/sound.mp3"); audio.play(); this.blocker = false; }, /* * Here the first Image will be added to a container, shown on screen * and a timer will count down. Let them feel safe for a while... * then a new image will pop up and a sound is played */ getDom: function(){ if(this.visible){ if(this.blocker === false){ this.showImageAndPlaySound(); }else{} }else{ //When the Module is not shown, then remove the 2 Images try { this.container.removeChild(image1); this.container.removeChild(image1); this.container.removeChild(image1); this.container.removeChild(image1); this.container.removeChild(image1); this.container.removeChild(image1); } catch (e) {console.log("catch remove child img 1");} try { this.container.removeChild(image2); this.container.removeChild(image2); this.container.removeChild(image2); this.container.removeChild(image2); this.container.removeChild(image2); this.container.removeChild(image2); }catch (e) {console.log("catch remove child img 2");} } return this.container; } });