MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    1. Home
    2. smart_user
    3. Topics
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.
    S
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 2
    • Posts 15
    • Groups 0

    Topics

    • S

      Help again...

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      15
      0 Votes
      15 Posts
      2k 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
    • S

      Need help - New programmer

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      23
      0 Votes
      23 Posts
      4k 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
    • 1 / 1