A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.
  • Unable to create two clocks that looks alike

    Unsolved
    1
    2
    0 Votes
    1 Posts
    670 Views
    S
    Hi, I’m using the MMM-iClock module to display clock. Initially this was working fine, but here as per my requirement, I am trying to display 2 clocks side by side in top_right section. Here I’ve 2 questions. Here the functionality is working fine, but the UI(of the 2nd clock) seems messed up(the number bars doesn’t show up). As soon as the mirror starts, the clocks goes to the right corner and then automatically comes to place. Here is my code. var iClock; Module.register("MMM-iClock", { defaults: { seconds: true, size: "350px", color: "#FFFFFF", digital: 2, // 0 (no display), 1 (permanent display) or 2 (show for 5 seconds on every miniute) analogue: true, // false (no display), true (permanent display) glow: true, // false (no display), true (permanent display) }, getStyles: function () { return ["MMM-iClock.css"]; }, days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], start: function () { iClock = this; Log.info("Starting module: " + iClock.name); var style = document.querySelector('html'); style.style.setProperty('--fore', iClock.config.color); style.style.setProperty('--size', iClock.config.size); if (!iClock.config.glow) style.style.setProperty('--glow', "none"); setTimeout(iClock.updateClock, 1000) }, getDom: function () { var wrapper = document.createElement("div"); wrapper.className = "iClock"; if (iClock.config.analogue === true) { var x = document.createElement("div"); x.className = "x"; var y = document.createElement("div"); y.className = "y"; var z = document.createElement("div"); z.className = "z"; overlay = document.createElement("div"); overlay.className = "overlay"; var hour = document.createElement("div"); hour.className = "hour"; hour.id = "sHour"; overlay.appendChild(hour); var minute = document.createElement("div"); minute.className = "minute"; minute.id = "sMinute"; overlay.appendChild(minute); if (iClock.config.seconds === true) { var second = document.createElement("div"); second.className = "second"; second.id = "sSecond"; overlay.appendChild(second); } //SFO sfoTimeoverlay = document.createElement("div"); sfoTimeoverlay.className = "sfoTimeoverlay"; var sfoTimehour = document.createElement("div"); sfoTimehour.className = "hour"; sfoTimehour.id = "sfoTimesHour"; sfoTimeoverlay.appendChild(sfoTimehour); var sfoTimeminute = document.createElement("div"); sfoTimeminute.className = "minute"; sfoTimeminute.id = "sfoTimesMinute"; sfoTimeoverlay.appendChild(sfoTimeminute); if (iClock.config.seconds === true) { var sfoTimesecond = document.createElement("div"); sfoTimesecond.className = "second"; sfoTimesecond.id = "sfoTimesSecond"; sfoTimeoverlay.appendChild(sfoTimesecond); } z.appendChild(overlay); z.appendChild(sfoTimeoverlay); y.appendChild(z); x.appendChild(y); wrapper.append(x); } if (iClock.config.digital !== 0) { var time = document.createElement("div"); time.className = "time"; time.id = "sTime"; if (iClock.config.digital === 2) time.style.opacity = 0; if (iClock.config.analogue === true) overlay.appendChild(time); else wrapper.appendChild(time); } if (iClock.config.digital !== 0) { console.log('##########' + iClock.config.digital); var sfoTimetime = document.createElement("div"); sfoTimetime.className = "time"; sfoTimetime.id = "sfoTimesTime"; if (iClock.config.digital === 2) sfoTimetime.style.opacity = 0; if (iClock.config.analogue === true) sfoTimeoverlay.appendChild(sfoTimetime); else wrapper.appendChild(sfoTimetime); } return wrapper; }, updateClock: function () { var wait = 60; now = new Date(); console.log(now); wait -= now.getSeconds(); var sec = now.getSeconds() + (60 * now.getMinutes()) + (60 * 60 * now.getHours()); if (iClock.config.seconds === true) { wait = 1; sec += 1 } s = (360 / 60) * sec; m = s / 60; h = m / 12 sHour = hour = now.getHours(); sMinute = minute = now.getMinutes(); if (sHour < 10) sHour = "0" + sHour; if (sMinute < 10) sMinute = "0" + sMinute; var sDate = document.createElement("div"); sDate.className = "date"; sDate.innerHTML = iClock.days[now.getDay()] + " " + now.getDate() + " " + iClock.months[now.getMonth()]; document.getElementById('sTime').innerHTML = sHour + ":" + sMinute; document.getElementById('sTime').appendChild(sDate); if (iClock.config.digital == 2) { if ((iClock.config.seconds === true && (sec + 2) % 60 == 0) || iClock.config.seconds === false) document.getElementById('sTime').style.opacity = 1; setTimeout(function () { document.getElementById('sTime').style.opacity = 0; }, 5000); } if (iClock.config.analogue === true) { if (iClock.config.seconds === true) document.getElementById('sSecond').style.transform = "translate(-50%, -50%) rotate(" + s + "deg)"; document.getElementById('sMinute').style.transform = "translate(-50%, -50%) rotate(" + m + "deg)"; document.getElementById('sHour').style.transform = "translate(-50%, -50%) rotate(" + h + "deg)"; } var estTime = new Date(); estTime.setHours(now.getHours() - 12); estTime.setMinutes(now.getMinutes() - 30); console.log(estTime); sfoTime = estTime; wait = 60; wait -= sfoTime.getSeconds(); var sfoTimesec = sfoTime.getSeconds() + (60 * sfoTime.getMinutes()) + (60 * 60 * sfoTime.getHours()); if (iClock.config.seconds === true) { wait = 1; sfoTimesec += 1 } sfoTimes = (360 / 60) * sfoTimesec; sfoTimem = sfoTimes / 60; sfoTimeh = sfoTimem / 12 sfoTimesHour = sfoTimehour = sfoTime.getHours(); sfoTimesMinute = sfoTimeminute = sfoTime.getMinutes(); if (sfoTimesHour < 10) sfoTimesHour = "0" + sfoTimesHour; if (sfoTimesMinute < 10) sfoTimesMinute = "0" + sfoTimesMinute; var sfoTimesDate = document.createElement("div"); sfoTimesDate.className = "date"; sfoTimesDate.innerHTML = iClock.days[sfoTime.getDay()] + " " + sfoTime.getDate() + " " + iClock.months[sfoTime.getMonth()]; console.log(document.getElementById('sfoTimesTime')); document.getElementById('sfoTimesTime').innerHTML = sfoTimesHour + ":" + sfoTimesMinute; document.getElementById('sfoTimesTime').appendChild(sfoTimesDate); if (iClock.config.digital == 2) { if ((iClock.config.seconds === true && (sfoTimesec + 2) % 60 == 0) || iClock.config.seconds === false) document.getElementById('sfoTimesTime').style.opacity = 1; setTimeout(function () { document.getElementById('sfoTimesTime').style.opacity = 0; }, 5000); } if (iClock.config.analogue === true) { if (iClock.config.seconds === true) document.getElementById('sfoTimesSecond').style.transform = "translate(-50%, -50%) rotate(" + sfoTimes + "deg)"; document.getElementById('sfoTimesMinute').style.transform = "translate(-50%, -50%) rotate(" + sfoTimem + "deg)"; document.getElementById('sfoTimesHour').style.transform = "translate(-50%, -50%) rotate(" + sfoTimeh + "deg)"; } setTimeout(iClock.updateClock, wait * 1000); } }); and here is the CSS. :root { --back: #000; --fore: #00D6FF; --size: 350px; --glow: 0 0 8px var(--fore); } .iClock { position: relative; display: block; width: var(--size); height: var(--size); border-radius: 350px; } .iClock .x:after, .iClock .x:before, .iClock .x .y:after, .iClock .x .y:before, .iClock .x .y .z:after, .iClock .x .y .z:before { content: ""; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 2px; height: 100%; background: var(--fore); } .iClock:after { transform: translate(-50%, -50%) rotate(90deg); z-index: 1; } .iClock .x:before { transform: translate(-50%, -50%) rotate(30deg); } .iClock .x:after { transform: translate(-50%, -50%) rotate(60deg); } .iClock .x .y:before { transform: translate(-50%, -50%) rotate(120deg); } .iClock .x .y:after { transform: translate(-50%, -50%) rotate(150deg); } .iClock .x .y .z:before { transform: translate(-50%, -50%) rotate(0deg); } .iClock .x .y .z:after { transform: translate(-50%, -50%) rotate(90deg); } .overlay { float: left; } .sfoTimeoverlay { float: right; margin-left: 120% } .iClock .x .y .overlay, .iClock .x .y .sfoTimeoverlay { position: absolute; width: 91%; height: 91%; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--back); border-radius: 300px; z-index: 2; } .iClock .x .y .overlay .hour, .iClock .x .y .overlay .minute, .iClock .x .y .overlay .second, .iClock .x .y .sfoTimeoverlay .hour, .iClock .x .y .sfoTimeoverlay .minute, .iClock .x .y .sfoTimeoverlay .second { position: absolute; top: 50%; left: 50%; width: calc(100% + 40px); height: calc(100% + 40px); border-radius: 350px; transform: translate(-50%, -50%); border: 2px solid var(--fore); box-shadow: var(--glow); } .iClock .x .y .overlay .hour:after, .iClock .x .y .overlay .minute:after, .iClock .x .y .overlay .second:after, .iClock .x .y .sfoTimeoverlay .hour:after, .iClock .x .y .sfoTimeoverlay .minute:after, .iClock .x .y .sfoTimeoverlay .second:after { content: ""; position: absolute; width: 10px; height: 15px; top: -8px; left: 50%; transform: translate(-50%); background: var(--back); } .iClock .x .y .overlay .minute, .iClock .x .y .sfoTimeoverlay .minute { width: calc(100% - 18px); height: calc(100% - 18px); } .iClock .x .y .overlay .second, .iClock .x .y .sfoTimeoverlay .second { width: calc(100% - 50px); height: calc(100% - 50px); } .iClock .time { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; font-family: 'Titillium Web', sans-serif; text-align: center; font-size: 15px; white-space: nowrap; font-weight: 500; line-height: 30px; text-shadow: var(--glow); color: var(--fore); } .iClock .x .y .overlay .hour, .iClock .x .y .overlay .minute, .iClock .x .y .overlay .second, .iClock .time, .iClock .x .y .sfoTimeoverlay .hour, .iClock .x .y .sfoTimeoverlay .minute, .iClock .x .y .sfoTimeoverlay .second, .iClock .time { transition: 1s cubic-bezier(.4, 0, .2, 1); -o-transition: 1s cubic-bezier(.4, 0, .2, 1); -ms-transition: 1s cubic-bezier(.4, 0, .2, 1); -moz-transition: 1s cubic-bezier(.4, 0, .2, 1); -webkit-transition: 1s cubic-bezier(.4, 0, .2, 1); } .iClock .time .date { font-size: 10px; line-height: 25px; text-align: center; } I didn’t do much of coding here, I copy pasted the existing clock and did modifications on top of it. Here is how it looks while I start my mirror. [image: 1558974210801-screen-shot-2019-05-27-at-9.52.37-pm.png] And here it is after 2-3 seconds. [image: 1558974237730-screen-shot-2019-05-27-at-9.52.43-pm.png] please let me know on where am I going wrong and how can I fix this. Thanks, Sunny
  • MMM-google-route and coordinates

    Solved
    7
    0 Votes
    7 Posts
    2k Views
    S
    @Zippyczech cool. Thanks for providing feedback.
  • MMM-Remote COntrol

    Unsolved
    2
    0 Votes
    2 Posts
    2k Views
    thedoorsfanaticT
    Get rid of "pages": {"Video": "bottom_left"} and try that: { module: "MMM-Remote-Control", position: "bottom_left", config: { customMenu: "custom_menu.example.json", // Optional, See "Custom Menu Items" below } },
  • Mirror not working after upgrading to v2.7.0

    Unsolved
    6
    0 Votes
    6 Posts
    2k Views
    S
    @icripps for hotword there is a set of instructions in it’s readme about working thru this kind of problem. Will work for amk2 as well.
  • Whole font should be displayed brightly

    Unsolved
    4
    0 Votes
    4 Posts
    2k Views
    K
    Hello, thank you for your help. The changes works. Lars
  • Location of the icon table in wx module

    Unsolved
    9
    0 Votes
    9 Posts
    2k Views
    S
    See the weather.njk where it calculates the icon from the f.weathertype
  • Finding module classes

    Unsolved
    11
    0 Votes
    11 Posts
    6k Views
    S
    see the calendar module readme https://github.com/MichMich/MagicMirror/blob/master/modules/default/calendar/README.md#calendar-configuration-options
  • Would this cause a conflict with MMM-RemoteControl

    Unsolved
    8
    0 Votes
    8 Posts
    2k Views
    M
    @sdetweil ok got it. Was just trying to figure out how to adjust screen brightness like I would with the app. makes sense
  • 2 MagicMirror windows

    17
    0 Votes
    17 Posts
    7k Views
    U
    @bhepler This worked, thank you!
  • View from lan

    Solved
    2
    0 Votes
    2 Posts
    640 Views
    R
    OK my bad, I had not approved the connection on pi-hole.
  • Shelly Switch Status on Mirror

    Unsolved
    6
    0 Votes
    6 Posts
    2k Views
    S
    @Niggich sorry, I don’t know anything about the api’s other than what they documented, and I don’t have any of the hardware…
  • How to create a working config. For absolute beginners.

    4
    1
    7 Votes
    4 Posts
    20k Views
    Mykle1M
    @cherrero said in How to create a working config. For absolute beginners.: You are my HERO! Thanks a lot Uhhh . . . ok! :-) You are very welcome. Have fun.
  • CalDAV with Synology

    Solved
    4
    1 Votes
    4 Posts
    2k Views
    F
    Ok, I solved it temporarily by using unencrypted http and port 5000.
  • Moving a Module x Pixels Higher

    Unsolved
    1
    0 Votes
    1 Posts
    295 Views
    D
    The newsfeed across the bottom of my (mostly-default) Magic Mirror overlaps the time and date element in the bottom-right corner. I’d like to move the newsfeed maybe 30 pixels further up my monitor. How would I do this? Thanks for your time.
  • This topic is deleted!

    Unsolved
    1
    0 Votes
    1 Posts
    1 Views
  • MM Server Mode in Docker on Raspberry

    Unsolved
    4
    0 Votes
    4 Posts
    2k Views
    S
    @Serge ok, so you changed the magicmirror config to use port 80 inside the container your run command -p should be -p host_port:container_port so -p 80:80 requests to the host port 80 are forwarded to the container port 80 to make sure that MM in the container is working do docker inspect 37638fe6e1d0 | grep -i -m 1 \"ipaddress and look for the ip address assigned to the container should be "IPAddress": "172.17.0.??? ??? is most likely 2 then use your local system browser to go to http://172.17.0.???:80 skipping the port forwarding
  • 0 Votes
    2 Posts
    924 Views
    S
    A short update: I was able to move the modules manually using css. It seems to work but it’s not an elegant solution. Any ideas/suggestions how to do it right? [image: 1558509939648-screenshot-2019-05-21-at-23.30.34.png] tml { height: 1080px; width: 1920px; } header { text-transform: uppercase; font-size: 26px; font-family: "Roboto Condensed"; font-weight: 600; border-bottom: 1px solid white; line-height: 15px; padding-bottom: 5px; margin-bottom: 10px; color: cadetblue; } body { margin: 10px; position: absolute; height: 1080; width: 1920px; background-color: rgba(214, 214, 214, 0.8); background-repeat: no-repeat; /*background-size: 1920;*/ font-family: "Roboto Condensed", sans-serif; font-weight: 400; font-size: 2em; line-height: 1.5em; -webkit-font-smoothing: antialiased; } .region.top.left .container .module.currentweather { width: 400px; height: 250px; position: absolute; left: 90px; top: 90px; background-color: rgba(20, 102, 186, 0.5); /*kek*/ } .module.clock { width: 400px; height: 400px; position: absolute; left: 760px; top: 90px; background-color: rgba(80, 196, 0, 0.5); /*zold*/ } .region.top.right .container .module.MMM-SL-PublicTransport { width: 400px; height: 500px; position: absolute; left: 1490px; top: -00px; background-color: rgba(20, 102, 186, 0.5); } .region.bottom.bar .container { width: 1740px; height: 310px; position: absolute; left: 90px; top: 680px; background-color: rgba(247, 173, 236, 0.5); /*magente*/ }
  • MagicMirror uninstall/removal

    Solved
    12
    0 Votes
    12 Posts
    5k Views
    Mykle1M
    @sdetweil said in MagicMirror uninstall/removal: the script checks for node and npm and installs them first… the product script does this too, but the npm side was removed from the support the script uses… This is why you’re the king! :thumbsup:
  • Bluetooth speaker audio not working

    Unsolved
    2
    0 Votes
    2 Posts
    547 Views
    S
    @ruhulayaan what modules do you have installed that make sound?
  • How to use other than NYT for news stream

    Unsolved
    5
    0 Votes
    5 Posts
    1k Views
    B
    Please disregard all above. I guess I was not holding my mouth right when I tried it before. Working as you said. Thanks again