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

    wswenson

    @wswenson

    11
    Reputation
    138
    Profile views
    14
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    wswenson Unfollow Follow

    Best posts made by wswenson

    • Mirror Redesign and update

      Spent a bunch of time updating and cleaning up the MagicMirror (really Kitchen Dashboard) and creating some modules. More screen captures of the various pages below. I need to work on the frame as I just made it (not a carpenter so happy with it so far).

      cb7c0850-831a-483a-b57c-2446982a1ef7-20250109_192514.jpg

      Hardware:

      • Beelink Mini PC, Mini S12 Pro Intel 12th N100
      • Portable Touchscreen Monitor 18.5 Inch, HDR, 350cd/m², 1920x1080 Touch Display with HDMI USB C, 99% sRGB, Built-in Speakers, Kickstand & VESA,Travel Second Monitor for Laptop PC Phone (Amazon)

      OS:

      • Linux Mint 22

      Modules:
      calendar
      clock
      newsfeed
      weather
      MMM-AVStock
      MMM-CalendarExt3
      MMM-EarthquakeMonitor
      MMM-EyeCandy
      MMM-Flights
      MMM-FoxNews
      MMM-Fuel
      MMM-Jast
      MMM-JsonTable
      MMM-MktIndex
      MMM-Multimonth
      MMM-MyScoreboard
      MMM-page-indicator
      MMM-pages
      MMM-TigoEnergySolar
      MMM-Tools
      MMM-TouchButton
      MMM-Wallpaper
      MMM-WeatherGraph

      Configuration File: (Using a template/env file)

      /* Config.js.template
       *   Date     Version       Initials       Comments
       * --------- ---------     ----------   -------------------------------------------------------------------
       *  09JAN25    0.9            WKS        Updated file to a template format and config.env file created
       *  09JAN25    0.9a           WKS        Tested with Millbury location - passes check
       *  09JAN25    1.0            WKS        Tested with Davenport location - passes check 
       * 
       *
       * For more information on how you can configure this file
       * see https://docs.magicmirror.builders/configuration/introduction.html
       * and https://docs.magicmirror.builders/modules/configuration.html
       *
       * You can use environment variables using a `config.js.template` file instead of `config.js`
       * which will be converted to `config.js` while starting. For more information
       * see https://docs.magicmirror.builders/configuration/introduction.html#enviromnent-variables
       */
      let config = {
          address: "${CONFIG_ADDRESS}",   // Address to listen on, can be:
                                  // - "localhost", "127.0.0.1", "::1" to listen on loopback interface
                                  // - another specific IPv4/6 to listen on a specific interface
                                  // - "0.0.0.0", "::" to listen on any interface
                                  // Default, when address config is left out or empty, is "localhost"
          port: ${CONFIG_PORT},
          basePath: "/",  // The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
                                          // you must set the sub path here. basePath must end with a /
          ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.1/120"],
                                          // or add a specific IPv4 of 192.168.1.5 :
                                          // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"],
                                          // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format :
                                          // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"],
      
          useHttps: ${USEHTTPS},  // Support HTTPS or not, default "false" will use HTTP
          httpsPrivateKey: "",    // HTTPS private key path, only require when useHttps is true
          httpsCertificate: "",   // HTTPS Certificate path, only require when useHttps is true
      
          language: "en",
          locale: "en-US",
          logLevel: ["INFO", "LOG", "WARN", "ERROR"], // Add "DEBUG" for even more logging
          timeFormat: 12,
          units: "${STANDARD_UNITS}",
      
          modules: [
          //*********************************************
          // Setup the pages and sequences for display
          // Location: https://github.com/edward-shen/MMM-pages
          //*********************************************/
          {
              module: "MMM-pages",
              config: {
                  modules: [
                      ['calendar', "clock", "currentweather", "MMM-EyeCandy", 'MMM-Jast'],        // Page 1: Dashboard display
                      ["MMM-CalendarExt3", 'MMM-Multimonth'],                                     // Page 2: Calendar displays
                      ["currentweather", "weather", "MMM-EyeCandy", "MMM-WeatherGraph"],          // Page 3: Weather page
                      ["newsfeed", 'MMM-MyScoreboard', "MMM-MktIndex", 'MMM-FoxNews', 'MMM-AVStock', 'MMM-EarthquakeMonitor'],            // Page 4: News and Information
                      ["MMM-Tools", "MMM-TigoEnergySolar", 'MMM-Fuel', 'MMM-JsonTable'],          // Page 5: Tools and other data
                      ["MMM-Flights"]                                                             // Page 6: Flight data
                  ],
                  fixed: ["MMM-TouchButton", "MMM-Wallpaper", "MMM-page-indicator"],              // Fixed modules on all pages
                  animationTime: 1000,                                                            // Transition time in milliseconds
                  rotationHomePage: 20000,
                  rotationDelay: 10000,
                  homePage: 0,
              }
          },
      
          // ----------
          // Base home page modules on page 1
          // ----------
          //*********************************************
          // Display clock module
          // Pages: 1
          // Location: Magic Mirror module
          //*********************************************/
          {
              module: "clock",
              position: "top_left",
              config: {
                  clockBold: true,
                  timeZone: "${TIMEZONE}",
                  showSunTimes: true,
                  showMoonTimes: true,
                  lat: ${LATTITUDE},
                  lon: ${LONGITUDE},
                  displayType: "digital"
              }
          },
      
          //*********************************************
          // Stock listings
          // Pages: 1
          // Location: https://github.com/jalibu/MMM-Jast
          //*********************************************/
          {
              module: 'MMM-Jast',
              position: 'upper_third',
              config: {
                  currencyStyle: "symbol", // One of ["code", "symbol", "name"]
                  fadeSpeedInSeconds: 3.5,
                  lastUpdateFormat: "HH:mm",
                  maxChangeAge: 1 * 24 * 60 * 60 * 1000,
                  maxWidth: "100%",
                  numberDecimalsPercentages: 1,
                  numberDecimalsValues: 2,
                  displayMode: "static", // One of ["none", "vertical", "horizontal", "table"]
                  showColors: true,
                  showCurrency: true,
                  showChangePercent: true,
                  showChangeValue: true,
                  showChangeValueCurrency: false,
                  showHiddenStocks: false,
                  showLastUpdate: false,
                  showPortfolioValue: false,
                  showPortfolioGrowthPercent: false,
                  showPortfolioGrowth: false,
                  showPortfolioPerformanceValue: false,
                  showPortfolioPerformancePercent: false,
                  showStockPerformanceValue: false,
                  showStockPerformanceValueSum: false,
                  showStockPerformancePercent: false,
                  stocksPerPage: 3, // Only relevant for display mode "table"
                  updateIntervalInSeconds: 300,
                  useGrouping: false,
                  virtualHorizontalMultiplier: 2,
                  stocks: [
                      { name: 'APPLE', symbol: 'AAPL'},
                      { name: 'Dell', symbol: 'DELL'},
                      { name: 'Google', symbol: 'GOOGL'},
                  ]
              }
          },
      
          // --------
          // News modules on page 3
          // --------
          //*********************************************
          // MMM-MyScoreBoard to display sports scores for major leagues
          // Pages: 4 - News
          // Location: https://github.com/jclarke0000/MMM-MyScoreboard
          //*********************************************/
          {
              module: "MMM-MyScoreboard",
              position: "bottom_right",
              classes: "default everyone",
              header: "My Scoreboard",
              config: {
                  showLeagueSeparators: true,
                  colored: true,
                  viewStyle: "mediumLogos",
                  sports: [
                  {
                      league: "NHL",
                      teams: ["BOS"],
                      teams: ["Atlantic"],
                      },
                      {
                      league: "NBA",
                      teams: ["BOS"],
                      groups: ["East"],
                      },
                      {
                          league: "MLB",
                          teams: ["BOS"]
                      },
                      {
                          league: "NFL",
                          teams: ["NE"]
                      },
                  ],
                  }
          },
      
          //*********************************************
          // MMM-EarthquakeMonitor
          // Pages: 4 - News
          // Location: https://github.com/rcollie/MMM-EarthquakeMonitor
          //*********************************************/
          {
              module: "MMM-EarthquakeMonitor",
              position: "bottom_left",
              config: {
                  updateInterval: 600000,
                  maxNumberOfQuakes: 5,
                  apiUrl: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.geojson"
              }
          },
      
          //*********************************************
          // My FoxNews module to display the FoxNews headlines with URL
          // Pages: 4
          // Location: TBD - Still in development
          //*********************************************/
          {
              module: 'MMM-FoxNews',
              position: 'upper_third',
              header: 'FoxNews Headlines',
              config: {
                      updateInterval: 600000,     // Update every 10 minutes
                      maxItems: 3,                // Show top 3 stories
                      debugFlag: false,           // Development flag
                  }
          },
      
          //*********************************************
          // Stock listings
          // Pages: 4
          // Location: https://github.com/lavolp3/MMM-AVStock
          //*********************************************/
          {
              module: 'MMM-AVStock',
              position: 'upper_third',
              header: "Market",
              config: {
                  symbols : ['AAPL', 'DELL', 'GOOGL'],
                  alias: ['Apple', 'Dell', 'Google'],
              }
          },
      
          //*********************************************
          // Display market indexes on the news page
          // Pages: 4
          // Location: https://github.com/thess/MMM-MktIndex
          //*********************************************/
          {
              module: "MMM-MktIndex",
                  position: "bottom_right",
                  config:{
                  timeFormat: "YYYY-MM-DD HH:mm:ss",
                  updateInterval: 180,
                  }
          },
      
          //*********************************************
          // Display newsfeed - default module
          // Pages: 4
          // Location: MagicMirror
          //*********************************************/
          {
              module: "newsfeed",
              position: "bottom_bar",
              config: {
                  feeds: [
                  {
                      title: "New York Times",
                      url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
                  }
                  ],
                  showSourceTitle: true,
                  showPublishDate: true
              }
          },
      
              //-------------------
              // Flights page 6
              // ------------------
          //*********************************************
          // Show local flights on the map
          // Pages: 6
          // Location: https://gitlab.com/khassel/MMM-Flights
          //*********************************************/
          {
              module: 'MMM-Flights',
              position: 'upper_third',
              provider: "${FLIGHT_PROVIDER}",
              config: {
                  laMin: ${FLIGHT_LAMIN},
                  laMax: ${FLIGHT_LAMAX},
                  loMax: ${FLIGHT_LOMIN},
                  loMin: ${FLIGHT_LOMAX},
                  showGrounded: false,
                  showMap: 'ifTraffic',
                  mapHeight: "400px",
                  mapFixedArea: false,
                  mapFont: '900 12px "Font Awesome 6 Free"',
                  mapGetPlaneText(flight) {
                      let txt = flight.flight;
                      if (!txt) txt = flight.radar;
                      txt = txt + "\n" + flight.altitude;
                      if (flight.rateOfClimb < 0) {
                          txt = txt + " \uf5af";
                      } else if (flight.rateOfClimb > 0) {
                          txt = txt + " \uf5b0";
                      }
                      return txt;
                  },
              },
          },
      
          //---------------------
          // Tools & Settings page 5
          // --------------------
          //*********************************************
          // Tools display for settings
          // Pages: 5
          // Location: https://github.com/eouia/MMM-Tools
          //*********************************************/
          {
              module: 'MMM-Tools',
              position: 'top_right',
              header: "System Statistics",
              config: {
                  refresh: 500 * 5,
                  containerSize: null,
                  itemSize: null
              }
          },
      
          //*********************************************
          // My module created for FL Solar - Tigo Energy API
          // Pages: 5
          // Location: TBD in development
          //*********************************************/
          {
              module: "MMM-TigoEnergySolar",
              position: "bottom_left", // The position where you want to display the module
              header: "Tigo Energy Solar Dashboard",
              config: {
                  apiUrl: "${TIGOENERGY_API}",
                  username: "${TIGOENERGY_USERNAME}",
                  password: "${TIGOENERGY_PASSWORD}",
                  systemId: "${TIGOENERGY_SYSTEMID}",
                  debugFlag: false,
              }
          },
      
          //*********************************************
          // Fuel prices module
          // Pages: 5
          // Location: https://github.com/fewieden/MMM-Fuel
          //*********************************************/
          {
              module: "MMM-Fuel",
              position: "bottom_bar",
              config: {
                  provider: "${MMM_FUEL_PROVIDER}",
                  zip: "${ZIP_CODE}",
                  types: ["regular", "midgrade", "premium"],
                  open: true,
                  showDistance: false,
                  showBrand: true,
              }
          },
      
          //*********************************************
          // JSON Table - used to display SmartOil output
          // Pages: 5
          // Location: https://github.com/timdows/MMM-JsonTable
          //*********************************************/
          {
              module: 'MMM-JsonTable',
                  position: 'top_left',
                  header: '${LOCATION_NAME} Smart Oil Sensor',
                  config: {
                      url: '${SMARTOIL_URL}',
                      arrayName: '${SMARTOIL_ARRAYNAME}',
                  }
          },
      
          //*********************************************
          // Background wallpaper from bing
          // Pages: All
          // Location: https://github.com/kolbyjack/MMM-Wallpaper
          //*********************************************/
          {
              module: "MMM-Wallpaper",
              position: "fullscreen_below",
              config: {
                  source: "bing",
                  slideInterval: 60 * 1000, // Change slides every minute
                  crossfade: true,
                  fadeEdges: true,
                  filter: "brightness(0.2)",
                  maximumEntries: 25,
                  caption: true,
              }
          },
          //*********************************************
          // Weather Graph 
          // Pages: 3
          // Location: https://github.com/FlatPepsi17/MMM-WeatherGraph
          //*********************************************/
          {
              module: 'MMM-WeatherGraph',
              header: '${LOCATION_FULL_NAME}',
              position: 'top_right',  // This can be any of the regions.
              config: {
                  apiKey: "${OPENWEATHER_APIKEY}",
                  showForecast: true,            // 7 day forecast list
                  showForecastPrecip: true,      // show precip totals in 7 day list
                  showGraph: true,               // enable all graphing of weather 
                  precipitationGraphWidth: 400,  // width in pixels. Default=400
                  precipitationGraphHeight: 150, // height in pixels. 0=auto-scales
                  graphHourRange: 48,            // how many hours in the graph? Max 48
                  showWind: true,                // current wind speed at top
                  showGraphPrecip: true,         // on graph, show rain and snowfall
                  showGraphTemp: true,           // on graph, show temp
                  graphTempColor: 'white',       // on graph, color of temp line
                  showGraphWind: true,           // on graph, show wind
                  graphWindColor: 'grey',        // on graph, color of temp line
                  showGraphHumid: true,          // on graph, show humidity
                  humidWindColor: '#88CC88',     // on graph, color of humid line
                  showGraphCloud: true,          // on graph, show cloud cover %
                  graphCloudColor: '#dedb49',    // on graph, color of cloud line
                  showSunrise: true,             // next sunrise or sunset at top
                  showSummary: true,             // text of next hour's conditions
                  showHotColdLines: true,        // blue line at freezing, red line at 80 F
                  showGraphLegend: true,         // legend on bottom right of graph
                  language: 'en', 
                  units: '${STANDARD_UNITS}',             // or 'metric'
                  time24hr: false,               // false for 12hr times, true for 24hr times
                  updateInterval: 1900000,        // 15 minutes ( 15 * 60 * 1000 )
                  animationSpeed: 2000,          // 2 seconds (2*1000)
                  initialLoadDelay: 0,           // 0 seconds (0*1000)
                  retryDelay: 2500,              // 2.5 seconds (2*1000)
                  latitude: ${LATTITUDE},
                  longitude: ${LONGITUDE}
              }
          },
      
          //*********************************************
          // EyeCandy used to display the local radar images
          // Pages: 3
          // Location: https://github.com/mykle1/MMM-EyeCandy
          //*********************************************/
              {
              module: "MMM-EyeCandy",
                  header: "${LOCATION_NAME} Radar",
                  position: "bottom_center",
                  config: {
                      maxWidth: "100%",       // Sizes the images. Retains aspect ratio.
                      style: '1',            // Style number or use ownImagePath to override style
                      ownImagePath: "${EYECANDY_RADAR_URL}",
                  }
              },
      
          //*********************************************
          // Display Weather Module
          // Pages: 1, 3
          // Locations: Standard MagicMirror module
          //*********************************************/
              {
              module: "weather",
              position: "bottom_center",
              classes: "currentweather",
              config: {
                  weatherProvider: "${WEATHER_PROVIDER}",
                  units: "${STANDARD_UNITS}",
                  tempUnits: "${STANDARD_UNITS}",
                  roundTemp: true,
                  type: "current",
                  lat: ${LATTITUDE},
                  lon: ${LONGITUDE}
              }
          },
      
          //*********************************************
          // Display Weather Module
          // Pages: 3
          // Locations: Standard MagicMirror module
          //*********************************************/
          {
              module: "weather",
              position: "top_left",
              header: "${OPPOSITE_LOCATION} Weather",
              config: {
                  weatherProvider: "${WEATHER_PROVIDER}",
                  units: "${STANDARD_UNITS}",
                  tempUnits: "${STANDARD_UNITS}",
                  roundTemp: true,
                  type: "forecast",
                  tableClass: 'medium',
                  lat: ${OPPOSITE_LATTITUDE},
                  lon: ${OPPOSITE_LONGITUDE}
              }
          },
      
          //*********************************************
          // Display multi-month calendar
          // Pages: 2
          // Locations: https://github.com/BKeyport/MMM-Multimonth
          //*********************************************/
          {
              module: "MMM-Multimonth",
              position: "bottom_bar",
              config: {
                  bigCalendar: false,
                  monthCount: 2,
                  monthsVertical: false,
                  startMonth: 0,
              }
          },
      
          //*********************************************
          // Calendar module for the list of calendars
          // Pages:
          // Locations: MagicMirror default module
          //*********************************************/
          {
              module: "calendar",
              header: "Family Events",
              position: "top_right",
              hiddenOnStartup: true,
              config: {
                  broadcastPastEvents: true,
                  calendars: [
                      {
                          symbol: "calendar-check",
                          name: "family_events",
                          color: "blue",
                          url: "${FAMILYEVENTS_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "wind_mill",
                          color: "red",
                          url: "${WINDMILLVILLAGE_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "dates_to_remember",
                          color: "gray",
                          url: "${DATESTOREMEMBER_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "us_holidays",
                          color: "red",
                          url: "${HOLIDAY_CALENDAR_URL}"
                      }
                      ]
              }
          },
      
          //*********************************************
          // Display the big ole calendar
          // Pages: 2
          // Locations: https://github.com/MMRIZE/MMM-CalendarExt3
          //*********************************************/
          {
              module: "MMM-CalendarExt3",
              position: "middle_center",
              title: "",
              config: {
                  mode: "week",
                  instanceId: "basicCalendar",
                  locale: 'en-US',
                  weeksInView: 4,
                  maxEventLines: 5,
                  firstDayOfWeek: 0,
                  calendarSet: ['family_events', "us_holidays", "wind_mill" , "dates_to_remember"],
              }
          },
      
          //*********************************************
          // Touch buttons on the top of the screen
          // Pages: All
          // Locations: https://github.com/Tom-Hirschberger/MMM-TouchButton
          //*********************************************/
          {
              module: "MMM-TouchButton",
              position: "top_bar",
              config: {
                  buttons: [
                      {
                          label: "Page1",                // Label for Page 1 button
                          imgIcon: "${BUTTON1_IMAGE}",
                          action: "notification",         // Trigger notification action
                          notification: "PAGE_CHANGED",   // Predefined notification in MMM-Pages
                          payload: 0                      // Page index (starts at 0)
                      },
                      {
                          label: "Page2",                // Label for Page 2 button
                          action: "notification",
                          imgIcon: "${BUTTON2_IMAGE}",
                          notification: "PAGE_CHANGED",
                          payload: 1                      // Page index for Page 2
                      },
                      {
                          label: "Page3",                // Label for Page 3 button
                          imgIcon: "${BUTTON3_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 2                      // Page index for Page 3
                      },
                      {
                          label: "Page4",                // Label for Page 4 button
                          imgIcon: "${BUTTON4_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 3                      // Page index for Page 4
                      },
                      {
                          label: "Page5",                // Label for Page 5 button
                          imgIcon: "${BUTTON5_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 4                      // Page index for Page 5
                      },
                      {
                          label: "Page6",                // Label for Page 5 button
                          imgIcon: "${BUTTON6_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 5                      // Page index for Page 5
                      }
                      ],
                  buttonStyle: {
                      color: "#ffffff",
                      backgroundColor: "#0000ff"
                  },
                  panelStyle: {
                      borderRadius: "10px",
                      padding: "10px"
                  }
              }
          },
      
          //*********************************************
          // Page indicators on the bottom of the screen
          // Pages: All
          // Locations: https://github.com/edward-shen/MMM-page-indicator
          //*********************************************/
          {
              module: "MMM-page-indicator",
              position: 'bottom_bar',
              config: {
                  pages: 6,
              },
          },
          ]
      };
      if (typeof module !== "undefined") {module.exports = config;}
      
      

      24c850aa-5b8e-49d5-ab7c-42fa55a9da34-Screenshot from 2025-01-09 15-55-00.png

      ffbdb3f5-b8db-4245-9db3-1ec32496f5f1-Screenshot from 2025-01-09 15-55-09.png

      eab8a02a-b667-473a-abc0-ec1153befd25-Screenshot from 2025-01-09 17-02-33.png

      29c81554-aab6-4e03-8dbd-5ecdc6a567eb-Screenshot from 2025-01-09 15-55-37.png

      a38abf59-4142-4426-b280-29166f635772-Screenshot from 2025-01-09 15-55-28.png

      posted in Show your Mirror
      W
      wswenson
    • Tigo Energy Solar Modules

      Just started understanding the modules and building a couple of modules that will show the status of our solar system. The system is by Tigo Energy and they have an API (cost $20.00 per year for access beyond their own interface. Seems to work but concerned about the reliability as it was down for 4 days. I have not spend much time on the actual display of data yet, just working through the API Calls. Now to start to formatting and cleaning it up. Been a fun exercise overall.

      Screenshot 2024-11-27 143304.png

      posted in Development
      W
      wswenson
    • First Try...

      Well not a mirror yet but my first build is coming along better than I thought it would. Still have some plans but the NHL and NFL modules seem to be my current sticking points.

      Modules Used:
      Default Weather
      MMM-Roomba
      MMM-Ring
      MMM-CalendarExt (Played with Ext2 but seem to like Ext better so far)
      Background image was added using custom CSS

      Want to build a frame and probably put a mirror on the front. Other plans include wanting to add buttons for turning on the game scores in place of the weather. Add motion detection as well.

      Without the Ring Module activated
      (0_1576338753346_20191214_103430.jpg image url)

      With the Ring Module activated by door bell press
      (0_1576338825986_20191214_103516.jpg image url)

      posted in Show your Mirror
      W
      wswenson
    • Any Interest: MMM-ThemeParkWaitTimes

      Working on a module for my family that is near the FL parks and can make decisions at the last minute for a day trip. Any interest in this type of a module? I have focused on getting FL parks working for now, but it should support any park that the API has available.

      b5ea9354-8705-4231-bd2b-aab000d07fa3-image.png

      posted in Development
      W
      wswenson
    • RE: Mirror Redesign and update

      Challenged by my son to add “swipe”

      Adding MMM-Touch to the configuration.

      /* Config.js.template
       *   Date     Version       Initials       Comments
       * --------- ---------     ----------   -------------------------------------------------------------------
       *  09JAN25    0.9            WKS        Updated file to a template format and config.env file created
       *  09JAN25    0.9a           WKS        Tested with Millbury location - passes check
       *  09JAN25    1.0            WKS        Tested with Davenport location - passes check 
       * 
       *
       * For more information on how you can configure this file
       * see https://docs.magicmirror.builders/configuration/introduction.html
       * and https://docs.magicmirror.builders/modules/configuration.html
       *
       * You can use environment variables using a `config.js.template` file instead of `config.js`
       * which will be converted to `config.js` while starting. For more information
       * see https://docs.magicmirror.builders/configuration/introduction.html#enviromnent-variables
       */
      let config = {
      	address: "${CONFIG_ADDRESS}",	// Address to listen on, can be:
      							// - "localhost", "127.0.0.1", "::1" to listen on loopback interface
      							// - another specific IPv4/6 to listen on a specific interface
      							// - "0.0.0.0", "::" to listen on any interface
      							// Default, when address config is left out or empty, is "localhost"
      	port: ${CONFIG_PORT},
      	basePath: "/",	// The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
      									// you must set the sub path here. basePath must end with a /
      	ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.1/120"],
      									// or add a specific IPv4 of 192.168.1.5 :
      									// ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"],
      									// or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format :
      									// ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"],
      
      	useHttps: ${USEHTTPS},	// Support HTTPS or not, default "false" will use HTTP
      	httpsPrivateKey: "",	// HTTPS private key path, only require when useHttps is true
      	httpsCertificate: "",	// HTTPS Certificate path, only require when useHttps is true
      
      	language: "en",
      	locale: "en-US",
      	logLevel: ["INFO", "LOG", "WARN", "ERROR"], // Add "DEBUG" for even more logging
      	timeFormat: 12,
      	units: "${STANDARD_UNITS}",
      
          modules: [
      	//*********************************************
      	// Setup the pages and sequences for display
      	// Location: https://github.com/edward-shen/MMM-pages
      	//*********************************************/
      	{
      		module: "MMM-pages",
       		config: {
              	modules: [
      				['calendar', "clock", "currentweather", "MMM-EyeCandy", 'MMM-Jast'], 		// Page 1: Dashboard display
                      ["MMM-CalendarExt3", 'MMM-Multimonth'],    									// Page 2: Calendar displays
                      ["currentweather", "weather", "MMM-EyeCandy", "MMM-WeatherGraph"],  		// Page 3: Weather page
                      ["newsfeed", 'MMM-MyScoreboard', "MMM-MktIndex", 'MMM-FoxNews', 'MMM-AVStock', 'MMM-EarthquakeMonitor'],			// Page 4: News and Information
      		 		["MMM-Tools", "MMM-TigoEnergySolar", 'MMM-Fuel', 'MMM-JsonTable', 'MMM-SmartOil'],			// Page 5: Tools and other data
      		 		["MMM-Flights"]																// Page 6: Flight data
                  ],
                  fixed: ["MMM-TouchButton", "MMM-Wallpaper", "MMM-page-indicator", 'MMM-Touch'],    			// Fixed modules on all pages
                  animationTime: 1000,              					 							// Transition time in milliseconds
      			rotationHomePage: 20000,
      			rotationDelay: 10000,
      			homePage: 0,
      		}
      	},
          
          {
          	module: 'MMM-SmartOil',
              position: 'top_left',
              config: {
              
              }
          },
      
      	// ----------
      	// Base home page modules on page 1
      	// ----------
       	//*********************************************
      	// Display clock module
      	// Pages: 1
      	// Location: Magic Mirror module
      	//*********************************************/
          {
      		module: "clock",
              position: "top_left",
      		config: {
      			clockBold: true,
      			timeZone: "${TIMEZONE}",
      			showSunTimes: true,
      			showMoonTimes: true,
      			lat: ${LATTITUDE},
      			lon: ${LONGITUDE},
      			displayType: "digital"
      		}
      	},
      
      	//*********************************************
      	// Stock listings
      	// Pages: 1
      	// Location: https://github.com/jalibu/MMM-Jast
      	//*********************************************/
      	{
      		module: 'MMM-Jast',
      		position: 'upper_third',
      		config: {
       			currencyStyle: "symbol", // One of ["code", "symbol", "name"]
      			fadeSpeedInSeconds: 3.5,
      			lastUpdateFormat: "HH:mm",
      			maxChangeAge: 1 * 24 * 60 * 60 * 1000,
      			maxWidth: "100%",
      			numberDecimalsPercentages: 1,
      			numberDecimalsValues: 2,
      			displayMode: "static", // One of ["none", "vertical", "horizontal", "table"]
      			showColors: true,
      			showCurrency: true,
      			showChangePercent: true,
      			showChangeValue: true,
      			showChangeValueCurrency: false,
       			showHiddenStocks: false,
      			showLastUpdate: false,
      			showPortfolioValue: false,
      			showPortfolioGrowthPercent: false,
      			showPortfolioGrowth: false,
      			showPortfolioPerformanceValue: false,
      			showPortfolioPerformancePercent: false,
      			showStockPerformanceValue: false,
      			showStockPerformanceValueSum: false,
      			showStockPerformancePercent: false,
      			stocksPerPage: 3, // Only relevant for display mode "table"
      			updateIntervalInSeconds: 300,
      			useGrouping: false,
      			virtualHorizontalMultiplier: 2,
      			stocks: [
      				{ name: 'APPLE', symbol: 'AAPL'},
      				{ name: 'Dell', symbol: 'DELL'},
      				{ name: 'Google', symbol: 'GOOGL'},
      			]
      		}
      	},
      
       	// --------
      	// News modules on page 3
      	// --------
      	//*********************************************
      	// MMM-MyScoreBoard to display sports scores for major leagues
      	// Pages: 4 - News
      	// Location: https://github.com/jclarke0000/MMM-MyScoreboard
      	//*********************************************/
      	{
       		module: "MMM-MyScoreboard",
       		position: "bottom_right",
      		classes: "default everyone",
      		header: "My Scoreboard",
      		config: {
       			showLeagueSeparators: true,
      			colored: true,
      			viewStyle: "mediumLogos",
      			sports: [
      			{
      				league: "NHL",
      				teams: ["BOS"],
      				teams: ["Atlantic"],
            			},
            			{
      				league: "NBA",
      				teams: ["BOS"],
       				groups: ["East"],
            			},
            			{
              			league: "MLB",
              			teams: ["BOS"]
            			},
            			{
      			        league: "NFL",
      			        teams: ["NE"]
      				},
      			],
              	}
      	},
      
       	//*********************************************
      	// MMM-EarthquakeMonitor
      	// Pages: 4 - News
      	// Location: https://github.com/rcollie/MMM-EarthquakeMonitor
      	//*********************************************/
          {
          	module: "MMM-EarthquakeMonitor",
              position: "bottom_left",
              config: {
              	updateInterval: 600000,
                  maxNumberOfQuakes: 5,
                  apiUrl: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.geojson"
      		}
      	},
      
       	//*********************************************
      	// My FoxNews module to display the FoxNews headlines with URL
      	// Pages: 4
      	// Location: TBD - Still in development
      	//*********************************************/
      	{
      		module: 'MMM-FoxNews',
      		position: 'upper_third',
      		header: 'FoxNews Headlines',
      		config: {
              		updateInterval: 600000, 	// Update every 10 minutes
              		maxItems: 3,				// Show top 3 stories
              		debugFlag: false,			// Development flag
          		}
      	},
      
      	//*********************************************
      	// Stock listings
      	// Pages: 4
      	// Location: https://github.com/lavolp3/MMM-AVStock
      	//*********************************************/
      	{
      		module: 'MMM-AVStock',
      		position: 'upper_third',
      		header: "Market",
      		config: {
      			symbols : ['AAPL', 'DELL', 'GOOGL'],
      			alias: ['Apple', 'Dell', 'Google'],
      		}
      	},
      
      	//*********************************************
      	// Display market indexes on the news page
      	// Pages: 4
      	// Location: https://github.com/thess/MMM-MktIndex
      	//*********************************************/
      	{
      		module: "MMM-MktIndex",
      	        position: "bottom_right",
              	config:{
              	timeFormat: "YYYY-MM-DD HH:mm:ss",
              	updateInterval: 180,
              	}
      	},
      
      	//*********************************************
      	// Display newsfeed - default module
      	// Pages: 4
      	// Location: MagicMirror
      	//*********************************************/
      	{
      		module: "newsfeed",
      		position: "bottom_bar",
      		config: {
              	feeds: [
      			{
      				title: "New York Times",
      				url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
                  }
                  ],
                  showSourceTitle: true,
                  showPublishDate: true
      		}
      	},
      
          	//-------------------
          	// Flights page 6
          	// ------------------
      	//*********************************************
      	// Show local flights on the map
      	// Pages: 6
      	// Location: https://gitlab.com/khassel/MMM-Flights
      	//*********************************************/
      	{
      		module: 'MMM-Flights',
      		position: 'upper_third',
      		provider: "${FLIGHT_PROVIDER}",
      		config: {
      			laMin: ${FLIGHT_LAMIN},
      			laMax: ${FLIGHT_LAMAX},
      			loMax: ${FLIGHT_LOMIN},
      			loMin: ${FLIGHT_LOMAX},
      			showGrounded: false,
      			showMap: 'ifTraffic',
      			mapHeight: "400px",
      			mapFixedArea: false,
      			mapFont: '900 12px "Font Awesome 6 Free"',
      			mapGetPlaneText(flight) {
      				let txt = flight.flight;
      				if (!txt) txt = flight.radar;
      				txt = txt + "\n" + flight.altitude;
      				if (flight.rateOfClimb < 0) {
      					txt = txt + " \uf5af";
      				} else if (flight.rateOfClimb > 0) {
      					txt = txt + " \uf5b0";
      				}
      				return txt;
      			},
      		},
       	},
      
      	//---------------------
      	// Tools & Settings page 5
      	// --------------------
          //*********************************************
      	// Tools display for settings
      	// Pages: 5
      	// Location: https://github.com/eouia/MMM-Tools
      	//*********************************************/
      	{
      		module: 'MMM-Tools',
      		position: 'top_right',
      		header: "System Statistics",
      		config: {
      			refresh: 500 * 5,
      			containerSize: null,
      			itemSize: null
      		}
      	},
      
      	//*********************************************
      	// My module created for FL Solar - Tigo Energy API
          // Pages: 5
          // Location: TBD in development
      	//*********************************************/
      	{
          	module: "MMM-TigoEnergySolar",
      		position: "bottom_left", // The position where you want to display the module
          	header: "Tigo Energy Solar Dashboard",
      		config: {
      			apiUrl: "${TIGOENERGY_API}",
      			username: "${TIGOENERGY_USERNAME}",
                  password: "${TIGOENERGY_PASSWORD}",
                  systemId: "${TIGOENERGY_SYSTEMID}",
      			debugFlag: false,
      		}
      	},
      
      	//*********************************************
      	// Fuel prices module
          // Pages: 5
          // Location: https://github.com/fewieden/MMM-Fuel
      	//*********************************************/
          {
      		module: "MMM-Fuel",
      		position: "bottom_bar",
              config: {
      			provider: "${MMM_FUEL_PROVIDER}",
                  zip: "${ZIP_CODE}",
                  types: ["regular", "midgrade", "premium"],
                  open: true,
                  showDistance: false,
                  showBrand: true,
              }
          },
      
      	//*********************************************
      	// JSON Table - used to display SmartOil output
          // Pages: 5
          // Location: https://github.com/timdows/MMM-JsonTable
      	//*********************************************/
      	{
      	    module: 'MMM-JsonTable',
      			position: 'top_left',
      			header: '${LOCATION_NAME} Smart Oil Sensor',
      			config: {
      				url: '${SMARTOIL_URL}',
      				arrayName: '${SMARTOIL_ARRAYNAME}',
      			}
      	},
      
      	//*********************************************
      	// Background wallpaper from bing
      	// Pages: All
      	// Location: https://github.com/kolbyjack/MMM-Wallpaper
      	//*********************************************/
      	{
      		module: "MMM-Wallpaper",
      		position: "fullscreen_below",
      		config: {
      			source: "bing",
      			slideInterval: 60 * 1000, // Change slides every minute
      			crossfade: true,
      			fadeEdges: true,
      			filter: "brightness(0.2)",
      			maximumEntries: 25,
      			caption: true,
      		}
      	},
      	//*********************************************
      	// Weather Graph 
      	// Pages: 3
      	// Location: https://github.com/FlatPepsi17/MMM-WeatherGraph
      	//*********************************************/
      	{
      		module: 'MMM-WeatherGraph',
      		header: '${LOCATION_FULL_NAME}',
      		position: 'top_right',  // This can be any of the regions.
      		config: {
      			apiKey: "${OPENWEATHER_APIKEY}",
      			showForecast: true,            // 7 day forecast list
      			showForecastPrecip: true,      // show precip totals in 7 day list
      			showGraph: true,               // enable all graphing of weather 
      			precipitationGraphWidth: 400,  // width in pixels. Default=400
      			precipitationGraphHeight: 150, // height in pixels. 0=auto-scales
      			graphHourRange: 48,            // how many hours in the graph? Max 48
      			showWind: true,                // current wind speed at top
      			showGraphPrecip: true,         // on graph, show rain and snowfall
      			showGraphTemp: true,           // on graph, show temp
      			graphTempColor: 'white',       // on graph, color of temp line
      			showGraphWind: true,           // on graph, show wind
      			graphWindColor: 'grey',        // on graph, color of temp line
      			showGraphHumid: true,          // on graph, show humidity
      			humidWindColor: '#88CC88',     // on graph, color of humid line
      			showGraphCloud: true,          // on graph, show cloud cover %
      			graphCloudColor: '#dedb49',    // on graph, color of cloud line
      			showSunrise: true,             // next sunrise or sunset at top
      			showSummary: true,             // text of next hour's conditions
      			showHotColdLines: true,        // blue line at freezing, red line at 80 F
      			showGraphLegend: true,         // legend on bottom right of graph
      			language: 'en', 
      			units: '${STANDARD_UNITS}',             // or 'metric'
      			time24hr: false,               // false for 12hr times, true for 24hr times
      			updateInterval: 1900000,        // 15 minutes ( 15 * 60 * 1000 )
      			animationSpeed: 2000,          // 2 seconds (2*1000)
      			initialLoadDelay: 0,           // 0 seconds (0*1000)
      			retryDelay: 2500,              // 2.5 seconds (2*1000)
      			latitude: ${LATTITUDE},
      			longitude: ${LONGITUDE}
      		}
      	},
      
      	//*********************************************
      	// EyeCandy used to display the local radar images
      	// Pages: 3
      	// Location: https://github.com/mykle1/MMM-EyeCandy
      	//*********************************************/
              {
       		module: "MMM-EyeCandy",
          		header: "${LOCATION_NAME} Radar",
      			position: "bottom_center",
      			config: {
      				maxWidth: "100%",       // Sizes the images. Retains aspect ratio.
      				style: '1',            // Style number or use ownImagePath to override style
      				ownImagePath: "${EYECANDY_RADAR_URL}",
      			}
      		},
      
      	//*********************************************
      	// Display Weather Module
      	// Pages: 1, 3
      	// Locations: Standard MagicMirror module
      	//*********************************************/
              {
      		module: "weather",
      		position: "bottom_center",
      		classes: "currentweather",
      		config: {
      			weatherProvider: "${WEATHER_PROVIDER}",
      			units: "${STANDARD_UNITS}",
      			tempUnits: "${STANDARD_UNITS}",
      			roundTemp: true,
      			type: "current",
      			lat: ${LATTITUDE},
      			lon: ${LONGITUDE}
      		}
      	},
      
      	//*********************************************
       	// Display Weather Module
      	// Pages: 3
      	// Locations: Standard MagicMirror module
      	//*********************************************/
      	{
      		module: "weather",
      		position: "top_left",
      		header: "${OPPOSITE_LOCATION} Weather",
      		config: {
      			weatherProvider: "${WEATHER_PROVIDER}",
      			units: "${STANDARD_UNITS}",
      			tempUnits: "${STANDARD_UNITS}",
      			roundTemp: true,
      			type: "forecast",
      			tableClass: 'medium',
      			lat: ${OPPOSITE_LATTITUDE},
      			lon: ${OPPOSITE_LONGITUDE}
      		}
      	},
      
      	//*********************************************
       	// Display multi-month calendar
      	// Pages: 2
      	// Locations: https://github.com/BKeyport/MMM-Multimonth
      	//*********************************************/
      	{
      		module: "MMM-Multimonth",
      		position: "bottom_bar",
      		config: {
              	bigCalendar: false,
              	monthCount: 2,
              	monthsVertical: false,
              	startMonth: 0,
              }
      	},
      
      	//*********************************************
       	// Calendar module for the list of calendars
      	// Pages:
      	// Locations: MagicMirror default module
      	//*********************************************/
      	{
      		module: "calendar",
      		header: "Family Events",
      		position: "top_right",
      		hiddenOnStartup: true,
      		config: {
      			broadcastPastEvents: true,
      			calendars: [
      				{
      					symbol: "calendar-check",
      					name: "family_events",
      					color: "blue",
      					url: "${FAMILYEVENTS_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "wind_mill",
      					color: "red",
      					url: "${WINDMILLVILLAGE_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "dates_to_remember",
      					color: "gray",
      					url: "${DATESTOREMEMBER_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "us_holidays",
      					color: "red",
      					url: "${HOLIDAY_CALENDAR_URL}"
      				}
      				]
      		}
      	},
      
      	//*********************************************
       	// Display the big ole calendar
      	// Pages: 2
      	// Locations: https://github.com/MMRIZE/MMM-CalendarExt3
      	//*********************************************/
      	{
      		module: "MMM-CalendarExt3",
      		position: "middle_center",
      		title: "",
      		config: {
      			mode: "week",
      			instanceId: "basicCalendar",
      			locale: 'en-US',
      			weeksInView: 4,
      			maxEventLines: 5,
      			firstDayOfWeek: 0,
      			calendarSet: ['family_events', "us_holidays", "wind_mill" , "dates_to_remember"],
      		}
      	},
      
      	//*********************************************
       	// Touch buttons on the top of the screen
      	// Pages: All
      	// Locations: https://github.com/Tom-Hirschberger/MMM-TouchButton
      	//*********************************************/
      	{
      		module: "MMM-TouchButton",
      		position: "top_bar",
      		config: {
      			buttons: [
      				{
      					label: "Page1",                // Label for Page 1 button
      					imgIcon: "${BUTTON1_IMAGE}",
      					action: "notification",         // Trigger notification action
      					notification: "PAGE_CHANGED",   // Predefined notification in MMM-Pages
      					payload: 0                      // Page index (starts at 0)
      				},
      				{
                          label: "Page2",                // Label for Page 2 button
                          action: "notification",
      					imgIcon: "${BUTTON2_IMAGE}",
                          notification: "PAGE_CHANGED",
                          payload: 1                      // Page index for Page 2
      				},
                      {
                          label: "Page3",                // Label for Page 3 button
      					imgIcon: "${BUTTON3_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 2                      // Page index for Page 3
                      },
                      {
                          label: "Page4",                // Label for Page 4 button
                          imgIcon: "${BUTTON4_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 3                      // Page index for Page 4
                      },
      				{
                          label: "Page5",                // Label for Page 5 button
                          imgIcon: "${BUTTON5_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 4                      // Page index for Page 5
                      },
      				{
                          label: "Page6",                // Label for Page 5 button
                          imgIcon: "${BUTTON6_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 5                      // Page index for Page 5
                      }
                      ],
                  buttonStyle: {
                      color: "#ffffff",
                      backgroundColor: "#0000ff"
                  },
                  panelStyle: {
                      borderRadius: "10px",
                      padding: "10px"
                  }
      		}
      	},
      
      	//*********************************************
       	// Page indicators on the bottom of the screen
      	// Pages: All
      	// Locations: https://github.com/edward-shen/MMM-page-indicator
      	//*********************************************/
      	{
             	module: "MMM-page-indicator",
             	position: 'bottom_bar',
             	config: {
             		pages: 6,
             	},
          },
      
      	//*********************************************
       	// Enable gesture commands on the mirror
      	// Pages: All
      	// Locations: https://github.com/gfischershaw/MMM-Touch
      	//*********************************************/
      	{
      		module: "MMM-Touch",
      		position: "bottom_bar",
      	    disabled: false,
      	    config: {
      			debug: false,
      			useDisplay: false,
      			autoMode: false,
      			defaultMode: "default",
      			gestureCommands: {
      				"default":{
      					"TAP_1": (commander) => {commander.sendNotification("USER_PRESENCE", true);},
      					"SWIPE_LEFT_1": (commander) => {commander.sendNotification("PAGE_INCREMENT", null);},
      					"SWIPE_RIGHT_1": (commander) => {commander.sendNotification("PAGE_DECREMENT", null);},
      				},
                  },
      		},
      	},
          
          ]
      };
      if (typeof module !== "undefined") {module.exports = config;}
      
      
      posted in Show your Mirror
      W
      wswenson
    • RE: Any Interest: MMM-ThemeParkWaitTimes

      @wswenson working through the CSS and options for display progress being made. I have a touch screen so this table view helps with the volume of rides available in some parks. 392828c0-2707-4c5b-ab9e-9d0626e8cb9a-image.png

      posted in Development
      W
      wswenson

    Latest posts made by wswenson

    • RE: Mirror Redesign and update

      Added Smart Oil Gauge module I built - uses the Smart Oil API ($) - still some fine tuning to work on and building up a dataset but the overall module seems to be working well.

      Screenshot from 2025-02-02 21-20-35.png

      posted in Show your Mirror
      W
      wswenson
    • RE: Mirror Redesign and update

      Challenged by my son to add “swipe”

      Adding MMM-Touch to the configuration.

      /* Config.js.template
       *   Date     Version       Initials       Comments
       * --------- ---------     ----------   -------------------------------------------------------------------
       *  09JAN25    0.9            WKS        Updated file to a template format and config.env file created
       *  09JAN25    0.9a           WKS        Tested with Millbury location - passes check
       *  09JAN25    1.0            WKS        Tested with Davenport location - passes check 
       * 
       *
       * For more information on how you can configure this file
       * see https://docs.magicmirror.builders/configuration/introduction.html
       * and https://docs.magicmirror.builders/modules/configuration.html
       *
       * You can use environment variables using a `config.js.template` file instead of `config.js`
       * which will be converted to `config.js` while starting. For more information
       * see https://docs.magicmirror.builders/configuration/introduction.html#enviromnent-variables
       */
      let config = {
      	address: "${CONFIG_ADDRESS}",	// Address to listen on, can be:
      							// - "localhost", "127.0.0.1", "::1" to listen on loopback interface
      							// - another specific IPv4/6 to listen on a specific interface
      							// - "0.0.0.0", "::" to listen on any interface
      							// Default, when address config is left out or empty, is "localhost"
      	port: ${CONFIG_PORT},
      	basePath: "/",	// The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
      									// you must set the sub path here. basePath must end with a /
      	ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.1/120"],
      									// or add a specific IPv4 of 192.168.1.5 :
      									// ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"],
      									// or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format :
      									// ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"],
      
      	useHttps: ${USEHTTPS},	// Support HTTPS or not, default "false" will use HTTP
      	httpsPrivateKey: "",	// HTTPS private key path, only require when useHttps is true
      	httpsCertificate: "",	// HTTPS Certificate path, only require when useHttps is true
      
      	language: "en",
      	locale: "en-US",
      	logLevel: ["INFO", "LOG", "WARN", "ERROR"], // Add "DEBUG" for even more logging
      	timeFormat: 12,
      	units: "${STANDARD_UNITS}",
      
          modules: [
      	//*********************************************
      	// Setup the pages and sequences for display
      	// Location: https://github.com/edward-shen/MMM-pages
      	//*********************************************/
      	{
      		module: "MMM-pages",
       		config: {
              	modules: [
      				['calendar', "clock", "currentweather", "MMM-EyeCandy", 'MMM-Jast'], 		// Page 1: Dashboard display
                      ["MMM-CalendarExt3", 'MMM-Multimonth'],    									// Page 2: Calendar displays
                      ["currentweather", "weather", "MMM-EyeCandy", "MMM-WeatherGraph"],  		// Page 3: Weather page
                      ["newsfeed", 'MMM-MyScoreboard', "MMM-MktIndex", 'MMM-FoxNews', 'MMM-AVStock', 'MMM-EarthquakeMonitor'],			// Page 4: News and Information
      		 		["MMM-Tools", "MMM-TigoEnergySolar", 'MMM-Fuel', 'MMM-JsonTable', 'MMM-SmartOil'],			// Page 5: Tools and other data
      		 		["MMM-Flights"]																// Page 6: Flight data
                  ],
                  fixed: ["MMM-TouchButton", "MMM-Wallpaper", "MMM-page-indicator", 'MMM-Touch'],    			// Fixed modules on all pages
                  animationTime: 1000,              					 							// Transition time in milliseconds
      			rotationHomePage: 20000,
      			rotationDelay: 10000,
      			homePage: 0,
      		}
      	},
          
          {
          	module: 'MMM-SmartOil',
              position: 'top_left',
              config: {
              
              }
          },
      
      	// ----------
      	// Base home page modules on page 1
      	// ----------
       	//*********************************************
      	// Display clock module
      	// Pages: 1
      	// Location: Magic Mirror module
      	//*********************************************/
          {
      		module: "clock",
              position: "top_left",
      		config: {
      			clockBold: true,
      			timeZone: "${TIMEZONE}",
      			showSunTimes: true,
      			showMoonTimes: true,
      			lat: ${LATTITUDE},
      			lon: ${LONGITUDE},
      			displayType: "digital"
      		}
      	},
      
      	//*********************************************
      	// Stock listings
      	// Pages: 1
      	// Location: https://github.com/jalibu/MMM-Jast
      	//*********************************************/
      	{
      		module: 'MMM-Jast',
      		position: 'upper_third',
      		config: {
       			currencyStyle: "symbol", // One of ["code", "symbol", "name"]
      			fadeSpeedInSeconds: 3.5,
      			lastUpdateFormat: "HH:mm",
      			maxChangeAge: 1 * 24 * 60 * 60 * 1000,
      			maxWidth: "100%",
      			numberDecimalsPercentages: 1,
      			numberDecimalsValues: 2,
      			displayMode: "static", // One of ["none", "vertical", "horizontal", "table"]
      			showColors: true,
      			showCurrency: true,
      			showChangePercent: true,
      			showChangeValue: true,
      			showChangeValueCurrency: false,
       			showHiddenStocks: false,
      			showLastUpdate: false,
      			showPortfolioValue: false,
      			showPortfolioGrowthPercent: false,
      			showPortfolioGrowth: false,
      			showPortfolioPerformanceValue: false,
      			showPortfolioPerformancePercent: false,
      			showStockPerformanceValue: false,
      			showStockPerformanceValueSum: false,
      			showStockPerformancePercent: false,
      			stocksPerPage: 3, // Only relevant for display mode "table"
      			updateIntervalInSeconds: 300,
      			useGrouping: false,
      			virtualHorizontalMultiplier: 2,
      			stocks: [
      				{ name: 'APPLE', symbol: 'AAPL'},
      				{ name: 'Dell', symbol: 'DELL'},
      				{ name: 'Google', symbol: 'GOOGL'},
      			]
      		}
      	},
      
       	// --------
      	// News modules on page 3
      	// --------
      	//*********************************************
      	// MMM-MyScoreBoard to display sports scores for major leagues
      	// Pages: 4 - News
      	// Location: https://github.com/jclarke0000/MMM-MyScoreboard
      	//*********************************************/
      	{
       		module: "MMM-MyScoreboard",
       		position: "bottom_right",
      		classes: "default everyone",
      		header: "My Scoreboard",
      		config: {
       			showLeagueSeparators: true,
      			colored: true,
      			viewStyle: "mediumLogos",
      			sports: [
      			{
      				league: "NHL",
      				teams: ["BOS"],
      				teams: ["Atlantic"],
            			},
            			{
      				league: "NBA",
      				teams: ["BOS"],
       				groups: ["East"],
            			},
            			{
              			league: "MLB",
              			teams: ["BOS"]
            			},
            			{
      			        league: "NFL",
      			        teams: ["NE"]
      				},
      			],
              	}
      	},
      
       	//*********************************************
      	// MMM-EarthquakeMonitor
      	// Pages: 4 - News
      	// Location: https://github.com/rcollie/MMM-EarthquakeMonitor
      	//*********************************************/
          {
          	module: "MMM-EarthquakeMonitor",
              position: "bottom_left",
              config: {
              	updateInterval: 600000,
                  maxNumberOfQuakes: 5,
                  apiUrl: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.geojson"
      		}
      	},
      
       	//*********************************************
      	// My FoxNews module to display the FoxNews headlines with URL
      	// Pages: 4
      	// Location: TBD - Still in development
      	//*********************************************/
      	{
      		module: 'MMM-FoxNews',
      		position: 'upper_third',
      		header: 'FoxNews Headlines',
      		config: {
              		updateInterval: 600000, 	// Update every 10 minutes
              		maxItems: 3,				// Show top 3 stories
              		debugFlag: false,			// Development flag
          		}
      	},
      
      	//*********************************************
      	// Stock listings
      	// Pages: 4
      	// Location: https://github.com/lavolp3/MMM-AVStock
      	//*********************************************/
      	{
      		module: 'MMM-AVStock',
      		position: 'upper_third',
      		header: "Market",
      		config: {
      			symbols : ['AAPL', 'DELL', 'GOOGL'],
      			alias: ['Apple', 'Dell', 'Google'],
      		}
      	},
      
      	//*********************************************
      	// Display market indexes on the news page
      	// Pages: 4
      	// Location: https://github.com/thess/MMM-MktIndex
      	//*********************************************/
      	{
      		module: "MMM-MktIndex",
      	        position: "bottom_right",
              	config:{
              	timeFormat: "YYYY-MM-DD HH:mm:ss",
              	updateInterval: 180,
              	}
      	},
      
      	//*********************************************
      	// Display newsfeed - default module
      	// Pages: 4
      	// Location: MagicMirror
      	//*********************************************/
      	{
      		module: "newsfeed",
      		position: "bottom_bar",
      		config: {
              	feeds: [
      			{
      				title: "New York Times",
      				url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
                  }
                  ],
                  showSourceTitle: true,
                  showPublishDate: true
      		}
      	},
      
          	//-------------------
          	// Flights page 6
          	// ------------------
      	//*********************************************
      	// Show local flights on the map
      	// Pages: 6
      	// Location: https://gitlab.com/khassel/MMM-Flights
      	//*********************************************/
      	{
      		module: 'MMM-Flights',
      		position: 'upper_third',
      		provider: "${FLIGHT_PROVIDER}",
      		config: {
      			laMin: ${FLIGHT_LAMIN},
      			laMax: ${FLIGHT_LAMAX},
      			loMax: ${FLIGHT_LOMIN},
      			loMin: ${FLIGHT_LOMAX},
      			showGrounded: false,
      			showMap: 'ifTraffic',
      			mapHeight: "400px",
      			mapFixedArea: false,
      			mapFont: '900 12px "Font Awesome 6 Free"',
      			mapGetPlaneText(flight) {
      				let txt = flight.flight;
      				if (!txt) txt = flight.radar;
      				txt = txt + "\n" + flight.altitude;
      				if (flight.rateOfClimb < 0) {
      					txt = txt + " \uf5af";
      				} else if (flight.rateOfClimb > 0) {
      					txt = txt + " \uf5b0";
      				}
      				return txt;
      			},
      		},
       	},
      
      	//---------------------
      	// Tools & Settings page 5
      	// --------------------
          //*********************************************
      	// Tools display for settings
      	// Pages: 5
      	// Location: https://github.com/eouia/MMM-Tools
      	//*********************************************/
      	{
      		module: 'MMM-Tools',
      		position: 'top_right',
      		header: "System Statistics",
      		config: {
      			refresh: 500 * 5,
      			containerSize: null,
      			itemSize: null
      		}
      	},
      
      	//*********************************************
      	// My module created for FL Solar - Tigo Energy API
          // Pages: 5
          // Location: TBD in development
      	//*********************************************/
      	{
          	module: "MMM-TigoEnergySolar",
      		position: "bottom_left", // The position where you want to display the module
          	header: "Tigo Energy Solar Dashboard",
      		config: {
      			apiUrl: "${TIGOENERGY_API}",
      			username: "${TIGOENERGY_USERNAME}",
                  password: "${TIGOENERGY_PASSWORD}",
                  systemId: "${TIGOENERGY_SYSTEMID}",
      			debugFlag: false,
      		}
      	},
      
      	//*********************************************
      	// Fuel prices module
          // Pages: 5
          // Location: https://github.com/fewieden/MMM-Fuel
      	//*********************************************/
          {
      		module: "MMM-Fuel",
      		position: "bottom_bar",
              config: {
      			provider: "${MMM_FUEL_PROVIDER}",
                  zip: "${ZIP_CODE}",
                  types: ["regular", "midgrade", "premium"],
                  open: true,
                  showDistance: false,
                  showBrand: true,
              }
          },
      
      	//*********************************************
      	// JSON Table - used to display SmartOil output
          // Pages: 5
          // Location: https://github.com/timdows/MMM-JsonTable
      	//*********************************************/
      	{
      	    module: 'MMM-JsonTable',
      			position: 'top_left',
      			header: '${LOCATION_NAME} Smart Oil Sensor',
      			config: {
      				url: '${SMARTOIL_URL}',
      				arrayName: '${SMARTOIL_ARRAYNAME}',
      			}
      	},
      
      	//*********************************************
      	// Background wallpaper from bing
      	// Pages: All
      	// Location: https://github.com/kolbyjack/MMM-Wallpaper
      	//*********************************************/
      	{
      		module: "MMM-Wallpaper",
      		position: "fullscreen_below",
      		config: {
      			source: "bing",
      			slideInterval: 60 * 1000, // Change slides every minute
      			crossfade: true,
      			fadeEdges: true,
      			filter: "brightness(0.2)",
      			maximumEntries: 25,
      			caption: true,
      		}
      	},
      	//*********************************************
      	// Weather Graph 
      	// Pages: 3
      	// Location: https://github.com/FlatPepsi17/MMM-WeatherGraph
      	//*********************************************/
      	{
      		module: 'MMM-WeatherGraph',
      		header: '${LOCATION_FULL_NAME}',
      		position: 'top_right',  // This can be any of the regions.
      		config: {
      			apiKey: "${OPENWEATHER_APIKEY}",
      			showForecast: true,            // 7 day forecast list
      			showForecastPrecip: true,      // show precip totals in 7 day list
      			showGraph: true,               // enable all graphing of weather 
      			precipitationGraphWidth: 400,  // width in pixels. Default=400
      			precipitationGraphHeight: 150, // height in pixels. 0=auto-scales
      			graphHourRange: 48,            // how many hours in the graph? Max 48
      			showWind: true,                // current wind speed at top
      			showGraphPrecip: true,         // on graph, show rain and snowfall
      			showGraphTemp: true,           // on graph, show temp
      			graphTempColor: 'white',       // on graph, color of temp line
      			showGraphWind: true,           // on graph, show wind
      			graphWindColor: 'grey',        // on graph, color of temp line
      			showGraphHumid: true,          // on graph, show humidity
      			humidWindColor: '#88CC88',     // on graph, color of humid line
      			showGraphCloud: true,          // on graph, show cloud cover %
      			graphCloudColor: '#dedb49',    // on graph, color of cloud line
      			showSunrise: true,             // next sunrise or sunset at top
      			showSummary: true,             // text of next hour's conditions
      			showHotColdLines: true,        // blue line at freezing, red line at 80 F
      			showGraphLegend: true,         // legend on bottom right of graph
      			language: 'en', 
      			units: '${STANDARD_UNITS}',             // or 'metric'
      			time24hr: false,               // false for 12hr times, true for 24hr times
      			updateInterval: 1900000,        // 15 minutes ( 15 * 60 * 1000 )
      			animationSpeed: 2000,          // 2 seconds (2*1000)
      			initialLoadDelay: 0,           // 0 seconds (0*1000)
      			retryDelay: 2500,              // 2.5 seconds (2*1000)
      			latitude: ${LATTITUDE},
      			longitude: ${LONGITUDE}
      		}
      	},
      
      	//*********************************************
      	// EyeCandy used to display the local radar images
      	// Pages: 3
      	// Location: https://github.com/mykle1/MMM-EyeCandy
      	//*********************************************/
              {
       		module: "MMM-EyeCandy",
          		header: "${LOCATION_NAME} Radar",
      			position: "bottom_center",
      			config: {
      				maxWidth: "100%",       // Sizes the images. Retains aspect ratio.
      				style: '1',            // Style number or use ownImagePath to override style
      				ownImagePath: "${EYECANDY_RADAR_URL}",
      			}
      		},
      
      	//*********************************************
      	// Display Weather Module
      	// Pages: 1, 3
      	// Locations: Standard MagicMirror module
      	//*********************************************/
              {
      		module: "weather",
      		position: "bottom_center",
      		classes: "currentweather",
      		config: {
      			weatherProvider: "${WEATHER_PROVIDER}",
      			units: "${STANDARD_UNITS}",
      			tempUnits: "${STANDARD_UNITS}",
      			roundTemp: true,
      			type: "current",
      			lat: ${LATTITUDE},
      			lon: ${LONGITUDE}
      		}
      	},
      
      	//*********************************************
       	// Display Weather Module
      	// Pages: 3
      	// Locations: Standard MagicMirror module
      	//*********************************************/
      	{
      		module: "weather",
      		position: "top_left",
      		header: "${OPPOSITE_LOCATION} Weather",
      		config: {
      			weatherProvider: "${WEATHER_PROVIDER}",
      			units: "${STANDARD_UNITS}",
      			tempUnits: "${STANDARD_UNITS}",
      			roundTemp: true,
      			type: "forecast",
      			tableClass: 'medium',
      			lat: ${OPPOSITE_LATTITUDE},
      			lon: ${OPPOSITE_LONGITUDE}
      		}
      	},
      
      	//*********************************************
       	// Display multi-month calendar
      	// Pages: 2
      	// Locations: https://github.com/BKeyport/MMM-Multimonth
      	//*********************************************/
      	{
      		module: "MMM-Multimonth",
      		position: "bottom_bar",
      		config: {
              	bigCalendar: false,
              	monthCount: 2,
              	monthsVertical: false,
              	startMonth: 0,
              }
      	},
      
      	//*********************************************
       	// Calendar module for the list of calendars
      	// Pages:
      	// Locations: MagicMirror default module
      	//*********************************************/
      	{
      		module: "calendar",
      		header: "Family Events",
      		position: "top_right",
      		hiddenOnStartup: true,
      		config: {
      			broadcastPastEvents: true,
      			calendars: [
      				{
      					symbol: "calendar-check",
      					name: "family_events",
      					color: "blue",
      					url: "${FAMILYEVENTS_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "wind_mill",
      					color: "red",
      					url: "${WINDMILLVILLAGE_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "dates_to_remember",
      					color: "gray",
      					url: "${DATESTOREMEMBER_CALENDAR_URL}",
      				},
      				{
      					symbol: "calendar-check",
      					name: "us_holidays",
      					color: "red",
      					url: "${HOLIDAY_CALENDAR_URL}"
      				}
      				]
      		}
      	},
      
      	//*********************************************
       	// Display the big ole calendar
      	// Pages: 2
      	// Locations: https://github.com/MMRIZE/MMM-CalendarExt3
      	//*********************************************/
      	{
      		module: "MMM-CalendarExt3",
      		position: "middle_center",
      		title: "",
      		config: {
      			mode: "week",
      			instanceId: "basicCalendar",
      			locale: 'en-US',
      			weeksInView: 4,
      			maxEventLines: 5,
      			firstDayOfWeek: 0,
      			calendarSet: ['family_events', "us_holidays", "wind_mill" , "dates_to_remember"],
      		}
      	},
      
      	//*********************************************
       	// Touch buttons on the top of the screen
      	// Pages: All
      	// Locations: https://github.com/Tom-Hirschberger/MMM-TouchButton
      	//*********************************************/
      	{
      		module: "MMM-TouchButton",
      		position: "top_bar",
      		config: {
      			buttons: [
      				{
      					label: "Page1",                // Label for Page 1 button
      					imgIcon: "${BUTTON1_IMAGE}",
      					action: "notification",         // Trigger notification action
      					notification: "PAGE_CHANGED",   // Predefined notification in MMM-Pages
      					payload: 0                      // Page index (starts at 0)
      				},
      				{
                          label: "Page2",                // Label for Page 2 button
                          action: "notification",
      					imgIcon: "${BUTTON2_IMAGE}",
                          notification: "PAGE_CHANGED",
                          payload: 1                      // Page index for Page 2
      				},
                      {
                          label: "Page3",                // Label for Page 3 button
      					imgIcon: "${BUTTON3_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 2                      // Page index for Page 3
                      },
                      {
                          label: "Page4",                // Label for Page 4 button
                          imgIcon: "${BUTTON4_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 3                      // Page index for Page 4
                      },
      				{
                          label: "Page5",                // Label for Page 5 button
                          imgIcon: "${BUTTON5_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 4                      // Page index for Page 5
                      },
      				{
                          label: "Page6",                // Label for Page 5 button
                          imgIcon: "${BUTTON6_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 5                      // Page index for Page 5
                      }
                      ],
                  buttonStyle: {
                      color: "#ffffff",
                      backgroundColor: "#0000ff"
                  },
                  panelStyle: {
                      borderRadius: "10px",
                      padding: "10px"
                  }
      		}
      	},
      
      	//*********************************************
       	// Page indicators on the bottom of the screen
      	// Pages: All
      	// Locations: https://github.com/edward-shen/MMM-page-indicator
      	//*********************************************/
      	{
             	module: "MMM-page-indicator",
             	position: 'bottom_bar',
             	config: {
             		pages: 6,
             	},
          },
      
      	//*********************************************
       	// Enable gesture commands on the mirror
      	// Pages: All
      	// Locations: https://github.com/gfischershaw/MMM-Touch
      	//*********************************************/
      	{
      		module: "MMM-Touch",
      		position: "bottom_bar",
      	    disabled: false,
      	    config: {
      			debug: false,
      			useDisplay: false,
      			autoMode: false,
      			defaultMode: "default",
      			gestureCommands: {
      				"default":{
      					"TAP_1": (commander) => {commander.sendNotification("USER_PRESENCE", true);},
      					"SWIPE_LEFT_1": (commander) => {commander.sendNotification("PAGE_INCREMENT", null);},
      					"SWIPE_RIGHT_1": (commander) => {commander.sendNotification("PAGE_DECREMENT", null);},
      				},
                  },
      		},
      	},
          
          ]
      };
      if (typeof module !== "undefined") {module.exports = config;}
      
      
      posted in Show your Mirror
      W
      wswenson
    • RE: Mirror Redesign and update

      @plainbroke Just confirmed in gasbuddy - no stations in my immediate area have prices posted right now in gasbuddy.

      posted in Show your Mirror
      W
      wswenson
    • RE: Mirror Redesign and update

      @plainbroke

      ZIP_CODE=“01527”
      MMM_FUEL_PROVIDER=“gasbuddy”

      I see good fuel prices when I look at my FL mirror (outside of Orlando) but I just deployed this update on my MA mirror (snow birds) and it is not yet showing fuel prices in the area. It shows the correct fuel stations in the area but prices are all set to NaN at this point. Looking through logs to see if there are any errors.

      Walter

      posted in Show your Mirror
      W
      wswenson
    • RE: MMM-Flights

      @karsten13 Very nice and thank you!

      posted in Transport
      W
      wswenson
    • Mirror Redesign and update

      Spent a bunch of time updating and cleaning up the MagicMirror (really Kitchen Dashboard) and creating some modules. More screen captures of the various pages below. I need to work on the frame as I just made it (not a carpenter so happy with it so far).

      cb7c0850-831a-483a-b57c-2446982a1ef7-20250109_192514.jpg

      Hardware:

      • Beelink Mini PC, Mini S12 Pro Intel 12th N100
      • Portable Touchscreen Monitor 18.5 Inch, HDR, 350cd/m², 1920x1080 Touch Display with HDMI USB C, 99% sRGB, Built-in Speakers, Kickstand & VESA,Travel Second Monitor for Laptop PC Phone (Amazon)

      OS:

      • Linux Mint 22

      Modules:
      calendar
      clock
      newsfeed
      weather
      MMM-AVStock
      MMM-CalendarExt3
      MMM-EarthquakeMonitor
      MMM-EyeCandy
      MMM-Flights
      MMM-FoxNews
      MMM-Fuel
      MMM-Jast
      MMM-JsonTable
      MMM-MktIndex
      MMM-Multimonth
      MMM-MyScoreboard
      MMM-page-indicator
      MMM-pages
      MMM-TigoEnergySolar
      MMM-Tools
      MMM-TouchButton
      MMM-Wallpaper
      MMM-WeatherGraph

      Configuration File: (Using a template/env file)

      /* Config.js.template
       *   Date     Version       Initials       Comments
       * --------- ---------     ----------   -------------------------------------------------------------------
       *  09JAN25    0.9            WKS        Updated file to a template format and config.env file created
       *  09JAN25    0.9a           WKS        Tested with Millbury location - passes check
       *  09JAN25    1.0            WKS        Tested with Davenport location - passes check 
       * 
       *
       * For more information on how you can configure this file
       * see https://docs.magicmirror.builders/configuration/introduction.html
       * and https://docs.magicmirror.builders/modules/configuration.html
       *
       * You can use environment variables using a `config.js.template` file instead of `config.js`
       * which will be converted to `config.js` while starting. For more information
       * see https://docs.magicmirror.builders/configuration/introduction.html#enviromnent-variables
       */
      let config = {
          address: "${CONFIG_ADDRESS}",   // Address to listen on, can be:
                                  // - "localhost", "127.0.0.1", "::1" to listen on loopback interface
                                  // - another specific IPv4/6 to listen on a specific interface
                                  // - "0.0.0.0", "::" to listen on any interface
                                  // Default, when address config is left out or empty, is "localhost"
          port: ${CONFIG_PORT},
          basePath: "/",  // The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
                                          // you must set the sub path here. basePath must end with a /
          ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.1/120"],
                                          // or add a specific IPv4 of 192.168.1.5 :
                                          // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"],
                                          // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format :
                                          // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"],
      
          useHttps: ${USEHTTPS},  // Support HTTPS or not, default "false" will use HTTP
          httpsPrivateKey: "",    // HTTPS private key path, only require when useHttps is true
          httpsCertificate: "",   // HTTPS Certificate path, only require when useHttps is true
      
          language: "en",
          locale: "en-US",
          logLevel: ["INFO", "LOG", "WARN", "ERROR"], // Add "DEBUG" for even more logging
          timeFormat: 12,
          units: "${STANDARD_UNITS}",
      
          modules: [
          //*********************************************
          // Setup the pages and sequences for display
          // Location: https://github.com/edward-shen/MMM-pages
          //*********************************************/
          {
              module: "MMM-pages",
              config: {
                  modules: [
                      ['calendar', "clock", "currentweather", "MMM-EyeCandy", 'MMM-Jast'],        // Page 1: Dashboard display
                      ["MMM-CalendarExt3", 'MMM-Multimonth'],                                     // Page 2: Calendar displays
                      ["currentweather", "weather", "MMM-EyeCandy", "MMM-WeatherGraph"],          // Page 3: Weather page
                      ["newsfeed", 'MMM-MyScoreboard', "MMM-MktIndex", 'MMM-FoxNews', 'MMM-AVStock', 'MMM-EarthquakeMonitor'],            // Page 4: News and Information
                      ["MMM-Tools", "MMM-TigoEnergySolar", 'MMM-Fuel', 'MMM-JsonTable'],          // Page 5: Tools and other data
                      ["MMM-Flights"]                                                             // Page 6: Flight data
                  ],
                  fixed: ["MMM-TouchButton", "MMM-Wallpaper", "MMM-page-indicator"],              // Fixed modules on all pages
                  animationTime: 1000,                                                            // Transition time in milliseconds
                  rotationHomePage: 20000,
                  rotationDelay: 10000,
                  homePage: 0,
              }
          },
      
          // ----------
          // Base home page modules on page 1
          // ----------
          //*********************************************
          // Display clock module
          // Pages: 1
          // Location: Magic Mirror module
          //*********************************************/
          {
              module: "clock",
              position: "top_left",
              config: {
                  clockBold: true,
                  timeZone: "${TIMEZONE}",
                  showSunTimes: true,
                  showMoonTimes: true,
                  lat: ${LATTITUDE},
                  lon: ${LONGITUDE},
                  displayType: "digital"
              }
          },
      
          //*********************************************
          // Stock listings
          // Pages: 1
          // Location: https://github.com/jalibu/MMM-Jast
          //*********************************************/
          {
              module: 'MMM-Jast',
              position: 'upper_third',
              config: {
                  currencyStyle: "symbol", // One of ["code", "symbol", "name"]
                  fadeSpeedInSeconds: 3.5,
                  lastUpdateFormat: "HH:mm",
                  maxChangeAge: 1 * 24 * 60 * 60 * 1000,
                  maxWidth: "100%",
                  numberDecimalsPercentages: 1,
                  numberDecimalsValues: 2,
                  displayMode: "static", // One of ["none", "vertical", "horizontal", "table"]
                  showColors: true,
                  showCurrency: true,
                  showChangePercent: true,
                  showChangeValue: true,
                  showChangeValueCurrency: false,
                  showHiddenStocks: false,
                  showLastUpdate: false,
                  showPortfolioValue: false,
                  showPortfolioGrowthPercent: false,
                  showPortfolioGrowth: false,
                  showPortfolioPerformanceValue: false,
                  showPortfolioPerformancePercent: false,
                  showStockPerformanceValue: false,
                  showStockPerformanceValueSum: false,
                  showStockPerformancePercent: false,
                  stocksPerPage: 3, // Only relevant for display mode "table"
                  updateIntervalInSeconds: 300,
                  useGrouping: false,
                  virtualHorizontalMultiplier: 2,
                  stocks: [
                      { name: 'APPLE', symbol: 'AAPL'},
                      { name: 'Dell', symbol: 'DELL'},
                      { name: 'Google', symbol: 'GOOGL'},
                  ]
              }
          },
      
          // --------
          // News modules on page 3
          // --------
          //*********************************************
          // MMM-MyScoreBoard to display sports scores for major leagues
          // Pages: 4 - News
          // Location: https://github.com/jclarke0000/MMM-MyScoreboard
          //*********************************************/
          {
              module: "MMM-MyScoreboard",
              position: "bottom_right",
              classes: "default everyone",
              header: "My Scoreboard",
              config: {
                  showLeagueSeparators: true,
                  colored: true,
                  viewStyle: "mediumLogos",
                  sports: [
                  {
                      league: "NHL",
                      teams: ["BOS"],
                      teams: ["Atlantic"],
                      },
                      {
                      league: "NBA",
                      teams: ["BOS"],
                      groups: ["East"],
                      },
                      {
                          league: "MLB",
                          teams: ["BOS"]
                      },
                      {
                          league: "NFL",
                          teams: ["NE"]
                      },
                  ],
                  }
          },
      
          //*********************************************
          // MMM-EarthquakeMonitor
          // Pages: 4 - News
          // Location: https://github.com/rcollie/MMM-EarthquakeMonitor
          //*********************************************/
          {
              module: "MMM-EarthquakeMonitor",
              position: "bottom_left",
              config: {
                  updateInterval: 600000,
                  maxNumberOfQuakes: 5,
                  apiUrl: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_day.geojson"
              }
          },
      
          //*********************************************
          // My FoxNews module to display the FoxNews headlines with URL
          // Pages: 4
          // Location: TBD - Still in development
          //*********************************************/
          {
              module: 'MMM-FoxNews',
              position: 'upper_third',
              header: 'FoxNews Headlines',
              config: {
                      updateInterval: 600000,     // Update every 10 minutes
                      maxItems: 3,                // Show top 3 stories
                      debugFlag: false,           // Development flag
                  }
          },
      
          //*********************************************
          // Stock listings
          // Pages: 4
          // Location: https://github.com/lavolp3/MMM-AVStock
          //*********************************************/
          {
              module: 'MMM-AVStock',
              position: 'upper_third',
              header: "Market",
              config: {
                  symbols : ['AAPL', 'DELL', 'GOOGL'],
                  alias: ['Apple', 'Dell', 'Google'],
              }
          },
      
          //*********************************************
          // Display market indexes on the news page
          // Pages: 4
          // Location: https://github.com/thess/MMM-MktIndex
          //*********************************************/
          {
              module: "MMM-MktIndex",
                  position: "bottom_right",
                  config:{
                  timeFormat: "YYYY-MM-DD HH:mm:ss",
                  updateInterval: 180,
                  }
          },
      
          //*********************************************
          // Display newsfeed - default module
          // Pages: 4
          // Location: MagicMirror
          //*********************************************/
          {
              module: "newsfeed",
              position: "bottom_bar",
              config: {
                  feeds: [
                  {
                      title: "New York Times",
                      url: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml"
                  }
                  ],
                  showSourceTitle: true,
                  showPublishDate: true
              }
          },
      
              //-------------------
              // Flights page 6
              // ------------------
          //*********************************************
          // Show local flights on the map
          // Pages: 6
          // Location: https://gitlab.com/khassel/MMM-Flights
          //*********************************************/
          {
              module: 'MMM-Flights',
              position: 'upper_third',
              provider: "${FLIGHT_PROVIDER}",
              config: {
                  laMin: ${FLIGHT_LAMIN},
                  laMax: ${FLIGHT_LAMAX},
                  loMax: ${FLIGHT_LOMIN},
                  loMin: ${FLIGHT_LOMAX},
                  showGrounded: false,
                  showMap: 'ifTraffic',
                  mapHeight: "400px",
                  mapFixedArea: false,
                  mapFont: '900 12px "Font Awesome 6 Free"',
                  mapGetPlaneText(flight) {
                      let txt = flight.flight;
                      if (!txt) txt = flight.radar;
                      txt = txt + "\n" + flight.altitude;
                      if (flight.rateOfClimb < 0) {
                          txt = txt + " \uf5af";
                      } else if (flight.rateOfClimb > 0) {
                          txt = txt + " \uf5b0";
                      }
                      return txt;
                  },
              },
          },
      
          //---------------------
          // Tools & Settings page 5
          // --------------------
          //*********************************************
          // Tools display for settings
          // Pages: 5
          // Location: https://github.com/eouia/MMM-Tools
          //*********************************************/
          {
              module: 'MMM-Tools',
              position: 'top_right',
              header: "System Statistics",
              config: {
                  refresh: 500 * 5,
                  containerSize: null,
                  itemSize: null
              }
          },
      
          //*********************************************
          // My module created for FL Solar - Tigo Energy API
          // Pages: 5
          // Location: TBD in development
          //*********************************************/
          {
              module: "MMM-TigoEnergySolar",
              position: "bottom_left", // The position where you want to display the module
              header: "Tigo Energy Solar Dashboard",
              config: {
                  apiUrl: "${TIGOENERGY_API}",
                  username: "${TIGOENERGY_USERNAME}",
                  password: "${TIGOENERGY_PASSWORD}",
                  systemId: "${TIGOENERGY_SYSTEMID}",
                  debugFlag: false,
              }
          },
      
          //*********************************************
          // Fuel prices module
          // Pages: 5
          // Location: https://github.com/fewieden/MMM-Fuel
          //*********************************************/
          {
              module: "MMM-Fuel",
              position: "bottom_bar",
              config: {
                  provider: "${MMM_FUEL_PROVIDER}",
                  zip: "${ZIP_CODE}",
                  types: ["regular", "midgrade", "premium"],
                  open: true,
                  showDistance: false,
                  showBrand: true,
              }
          },
      
          //*********************************************
          // JSON Table - used to display SmartOil output
          // Pages: 5
          // Location: https://github.com/timdows/MMM-JsonTable
          //*********************************************/
          {
              module: 'MMM-JsonTable',
                  position: 'top_left',
                  header: '${LOCATION_NAME} Smart Oil Sensor',
                  config: {
                      url: '${SMARTOIL_URL}',
                      arrayName: '${SMARTOIL_ARRAYNAME}',
                  }
          },
      
          //*********************************************
          // Background wallpaper from bing
          // Pages: All
          // Location: https://github.com/kolbyjack/MMM-Wallpaper
          //*********************************************/
          {
              module: "MMM-Wallpaper",
              position: "fullscreen_below",
              config: {
                  source: "bing",
                  slideInterval: 60 * 1000, // Change slides every minute
                  crossfade: true,
                  fadeEdges: true,
                  filter: "brightness(0.2)",
                  maximumEntries: 25,
                  caption: true,
              }
          },
          //*********************************************
          // Weather Graph 
          // Pages: 3
          // Location: https://github.com/FlatPepsi17/MMM-WeatherGraph
          //*********************************************/
          {
              module: 'MMM-WeatherGraph',
              header: '${LOCATION_FULL_NAME}',
              position: 'top_right',  // This can be any of the regions.
              config: {
                  apiKey: "${OPENWEATHER_APIKEY}",
                  showForecast: true,            // 7 day forecast list
                  showForecastPrecip: true,      // show precip totals in 7 day list
                  showGraph: true,               // enable all graphing of weather 
                  precipitationGraphWidth: 400,  // width in pixels. Default=400
                  precipitationGraphHeight: 150, // height in pixels. 0=auto-scales
                  graphHourRange: 48,            // how many hours in the graph? Max 48
                  showWind: true,                // current wind speed at top
                  showGraphPrecip: true,         // on graph, show rain and snowfall
                  showGraphTemp: true,           // on graph, show temp
                  graphTempColor: 'white',       // on graph, color of temp line
                  showGraphWind: true,           // on graph, show wind
                  graphWindColor: 'grey',        // on graph, color of temp line
                  showGraphHumid: true,          // on graph, show humidity
                  humidWindColor: '#88CC88',     // on graph, color of humid line
                  showGraphCloud: true,          // on graph, show cloud cover %
                  graphCloudColor: '#dedb49',    // on graph, color of cloud line
                  showSunrise: true,             // next sunrise or sunset at top
                  showSummary: true,             // text of next hour's conditions
                  showHotColdLines: true,        // blue line at freezing, red line at 80 F
                  showGraphLegend: true,         // legend on bottom right of graph
                  language: 'en', 
                  units: '${STANDARD_UNITS}',             // or 'metric'
                  time24hr: false,               // false for 12hr times, true for 24hr times
                  updateInterval: 1900000,        // 15 minutes ( 15 * 60 * 1000 )
                  animationSpeed: 2000,          // 2 seconds (2*1000)
                  initialLoadDelay: 0,           // 0 seconds (0*1000)
                  retryDelay: 2500,              // 2.5 seconds (2*1000)
                  latitude: ${LATTITUDE},
                  longitude: ${LONGITUDE}
              }
          },
      
          //*********************************************
          // EyeCandy used to display the local radar images
          // Pages: 3
          // Location: https://github.com/mykle1/MMM-EyeCandy
          //*********************************************/
              {
              module: "MMM-EyeCandy",
                  header: "${LOCATION_NAME} Radar",
                  position: "bottom_center",
                  config: {
                      maxWidth: "100%",       // Sizes the images. Retains aspect ratio.
                      style: '1',            // Style number or use ownImagePath to override style
                      ownImagePath: "${EYECANDY_RADAR_URL}",
                  }
              },
      
          //*********************************************
          // Display Weather Module
          // Pages: 1, 3
          // Locations: Standard MagicMirror module
          //*********************************************/
              {
              module: "weather",
              position: "bottom_center",
              classes: "currentweather",
              config: {
                  weatherProvider: "${WEATHER_PROVIDER}",
                  units: "${STANDARD_UNITS}",
                  tempUnits: "${STANDARD_UNITS}",
                  roundTemp: true,
                  type: "current",
                  lat: ${LATTITUDE},
                  lon: ${LONGITUDE}
              }
          },
      
          //*********************************************
          // Display Weather Module
          // Pages: 3
          // Locations: Standard MagicMirror module
          //*********************************************/
          {
              module: "weather",
              position: "top_left",
              header: "${OPPOSITE_LOCATION} Weather",
              config: {
                  weatherProvider: "${WEATHER_PROVIDER}",
                  units: "${STANDARD_UNITS}",
                  tempUnits: "${STANDARD_UNITS}",
                  roundTemp: true,
                  type: "forecast",
                  tableClass: 'medium',
                  lat: ${OPPOSITE_LATTITUDE},
                  lon: ${OPPOSITE_LONGITUDE}
              }
          },
      
          //*********************************************
          // Display multi-month calendar
          // Pages: 2
          // Locations: https://github.com/BKeyport/MMM-Multimonth
          //*********************************************/
          {
              module: "MMM-Multimonth",
              position: "bottom_bar",
              config: {
                  bigCalendar: false,
                  monthCount: 2,
                  monthsVertical: false,
                  startMonth: 0,
              }
          },
      
          //*********************************************
          // Calendar module for the list of calendars
          // Pages:
          // Locations: MagicMirror default module
          //*********************************************/
          {
              module: "calendar",
              header: "Family Events",
              position: "top_right",
              hiddenOnStartup: true,
              config: {
                  broadcastPastEvents: true,
                  calendars: [
                      {
                          symbol: "calendar-check",
                          name: "family_events",
                          color: "blue",
                          url: "${FAMILYEVENTS_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "wind_mill",
                          color: "red",
                          url: "${WINDMILLVILLAGE_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "dates_to_remember",
                          color: "gray",
                          url: "${DATESTOREMEMBER_CALENDAR_URL}",
                      },
                      {
                          symbol: "calendar-check",
                          name: "us_holidays",
                          color: "red",
                          url: "${HOLIDAY_CALENDAR_URL}"
                      }
                      ]
              }
          },
      
          //*********************************************
          // Display the big ole calendar
          // Pages: 2
          // Locations: https://github.com/MMRIZE/MMM-CalendarExt3
          //*********************************************/
          {
              module: "MMM-CalendarExt3",
              position: "middle_center",
              title: "",
              config: {
                  mode: "week",
                  instanceId: "basicCalendar",
                  locale: 'en-US',
                  weeksInView: 4,
                  maxEventLines: 5,
                  firstDayOfWeek: 0,
                  calendarSet: ['family_events', "us_holidays", "wind_mill" , "dates_to_remember"],
              }
          },
      
          //*********************************************
          // Touch buttons on the top of the screen
          // Pages: All
          // Locations: https://github.com/Tom-Hirschberger/MMM-TouchButton
          //*********************************************/
          {
              module: "MMM-TouchButton",
              position: "top_bar",
              config: {
                  buttons: [
                      {
                          label: "Page1",                // Label for Page 1 button
                          imgIcon: "${BUTTON1_IMAGE}",
                          action: "notification",         // Trigger notification action
                          notification: "PAGE_CHANGED",   // Predefined notification in MMM-Pages
                          payload: 0                      // Page index (starts at 0)
                      },
                      {
                          label: "Page2",                // Label for Page 2 button
                          action: "notification",
                          imgIcon: "${BUTTON2_IMAGE}",
                          notification: "PAGE_CHANGED",
                          payload: 1                      // Page index for Page 2
                      },
                      {
                          label: "Page3",                // Label for Page 3 button
                          imgIcon: "${BUTTON3_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 2                      // Page index for Page 3
                      },
                      {
                          label: "Page4",                // Label for Page 4 button
                          imgIcon: "${BUTTON4_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 3                      // Page index for Page 4
                      },
                      {
                          label: "Page5",                // Label for Page 5 button
                          imgIcon: "${BUTTON5_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 4                      // Page index for Page 5
                      },
                      {
                          label: "Page6",                // Label for Page 5 button
                          imgIcon: "${BUTTON6_IMAGE}",
                          action: "notification",
                          notification: "PAGE_CHANGED",
                          payload: 5                      // Page index for Page 5
                      }
                      ],
                  buttonStyle: {
                      color: "#ffffff",
                      backgroundColor: "#0000ff"
                  },
                  panelStyle: {
                      borderRadius: "10px",
                      padding: "10px"
                  }
              }
          },
      
          //*********************************************
          // Page indicators on the bottom of the screen
          // Pages: All
          // Locations: https://github.com/edward-shen/MMM-page-indicator
          //*********************************************/
          {
              module: "MMM-page-indicator",
              position: 'bottom_bar',
              config: {
                  pages: 6,
              },
          },
          ]
      };
      if (typeof module !== "undefined") {module.exports = config;}
      
      

      24c850aa-5b8e-49d5-ab7c-42fa55a9da34-Screenshot from 2025-01-09 15-55-00.png

      ffbdb3f5-b8db-4245-9db3-1ec32496f5f1-Screenshot from 2025-01-09 15-55-09.png

      eab8a02a-b667-473a-abc0-ec1153befd25-Screenshot from 2025-01-09 17-02-33.png

      29c81554-aab6-4e03-8dbd-5ecdc6a567eb-Screenshot from 2025-01-09 15-55-37.png

      a38abf59-4142-4426-b280-29166f635772-Screenshot from 2025-01-09 15-55-28.png

      posted in Show your Mirror
      W
      wswenson
    • RE: MMM-Flights

      I would like to see a configuration option to filter out non-commercial flights. I played around with this code segment and think it could be done with some minor logic added for a configuration option of onlyCommercial (or something like that). I live in an area where there is a high concentration of private planes as well, and generally I am mostly interested in the commercial flights.

      I tried to open an issue in Gitlabs, but wants me to create an account and pay for membership and such.

      Thanks for the module!

       async makeFlightArray(configPayload) {
            let flights = [];
      
            const prov = configPayload.provider.toLowerCase();
            if (this.providers.includes(prov)) {
              await require(`./provider/${prov}`).getData(
                configPayload,
                flights,
                this.airports,
                this.airlines,
                this.planes,
                this.setFlightData,
                this.fetchUrl
              );
            } else {
              Log.error(
                `${this.name}: Unknown provider  + ${configPayload.provider}`
              );
            }
      	  
      	  // Filter out flights with empty airline
            flights = flights.filter((flight) => flight.airline && flight.airline.trim() !== "");
      	  
      	  console.log(flights);
            return flights;
          },
      

      222ff981-bdda-48e5-a800-faeffafc449a-image.png

      posted in Transport
      W
      wswenson
    • RE: Large Numbers

      @NotMyCircus
      Made some changes to custom.css file working towards that style…

      
      .CX3 .cw { 
          display: none !important;
      }
      
      .CX3.bodice {
          background-image: linear-gradient(to top right, #22c1c3, #176561, #131813);
      }
      
      .CX3 .cell {
          background: transparent;
          border: transparent;
          display: flex; /* Use flexbox for layout */
          flex-direction: column; /* Stacks elements vertically */
          align-items: center; /* Centers items horizontally */
          justify-content: flex-start; /* Ensures content starts at the top */
          padding: 0.5em; /* Adds space inside the cell */
          text-align: center; /* Centers text content */
          overflow: hidden; /* Ensures no content overlaps outside the cell */
      }
      
      .CX3 .cell.today {
          border: transparent;
      }
      
      .CX3 .cell.today .cellDate {
          font-size: 4em; /* Adjust the size of the date text */
          line-height: 1; /* Avoids extra spacing */
          text-align: center; /* Centers the text within the circle */
          width: 1.5em; /* Set equal width and height */
          height: 1.5em; /* Matches width to create a circle */
          display: flex; /* Use flexbox to align text */
          justify-content: center; /* Centers text horizontally */
          align-items: center; /* Centers text vertically */
          background-color: red; /* Background color for the circle */
          color: #ffffff; /* Text color */
          border: 2px solid #e76f51; /* Optional border for the circle */
          border-radius: 50%; /* Makes the box a circle */
          margin: auto; /* Ensures proper alignment within the cell */
      }
      
      .CX3 .cellDate {
          font-size: 4em; /* Adjust font size for the date */
          line-height: 1; /* Avoids extra spacing */
          text-align: center;
          margin-bottom: 1em; /* Adds space below the date */
          width: auto; /* Removes fixed width */
          height: auto; /* Removes fixed height */
      }
      
      .CX3 .cellHeader {
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: flex-start;
          text-align: center;
      }
      
      .CX3 .cellHeader .cellDate span.dateParts.month.seq_0 {
          display: none;
      }
      
      /* Ensures the eventContainer is placed below the date numbers */
      .CX3 .eventContainer {
          margin-top: 1em; /* Adds space above the eventContainer */
      	top: 74px;
          width: 100%; /* Ensures it spans the cell width */
          text-align: left; /* Aligns event text to the left, adjust if needed */
          word-wrap: break-word; /* Prevents event text from overflowing */
          //display: block; /* Ensures it behaves as a block element */
          position: relative; /* Ensures it respects the flow of the document */
      }
      
      

      b345ed7c-bd38-42b4-b0a8-cf1070477bee-image.png

      posted in Custom CSS
      W
      wswenson
    • RE: Any Interest: MMM-ThemeParkWaitTimes

      @wswenson working through the CSS and options for display progress being made. I have a touch screen so this table view helps with the volume of rides available in some parks. 392828c0-2707-4c5b-ab9e-9d0626e8cb9a-image.png

      posted in Development
      W
      wswenson
    • Any Interest: MMM-ThemeParkWaitTimes

      Working on a module for my family that is near the FL parks and can make decisions at the last minute for a day trip. Any interest in this type of a module? I have focused on getting FL parks working for now, but it should support any park that the API has available.

      b5ea9354-8705-4231-bd2b-aab000d07fa3-image.png

      posted in Development
      W
      wswenson