bomonike

How to visualize, predict, and stay ahead of your microclimate weather using NASA’s OpenMCT website and Python programs

US (English)   Norsk (Norwegian)   Español (Spanish)   Français (French)   Deutsch (German)   Italiano   Português   Estonian   اَلْعَرَبِيَّةُ (Egypt Arabic)   Napali   中文 (简体) Chinese (Simplified)   日本語 Japanese   한국어 Korean

Overview

openmct.png

NOTE: Content here are my personal opinions, and not intended to represent any employer (past or present). “PROTIP:” here highlight information I haven’t seen elsewhere on the internet because it is hard-won, little-know but significant facts based on my personal research and experience.

NASA’s OpenMCT

From NASA, the same organization that brought you the first man on the moon, the Space Station, landers and helicopters on Mars, etc. comes:

src/images/favicons/favicon-96x96.pngOpen MCT (Mission Control Technologies) was developed at NASA (National Aeronautics and Space Administration) Ames Research Center (@NASAAmes) in collaboration with the Jet Propulsion Laboratory (@NASAJPL). Open MCT is part of NASA’s Space Mission Design Tools.

Open MCT is among the most popular of NASA’s open-source projects at code.nasa.gov.

“Open MCT is designed to meet the rapidly evolving needs of mission control systems. At NASA, the requirements for Open MCT are being driven by a need to support distributed operations, access to data anywhere, data visualization for spacecraft analysis that spans multiple data sources, and flexible reconfiguration to support multiple missions and operator use cases.”

Overall architecture

openmct-dataflow.png

Open MCT is called “next generation” because it brings together many functions of mission operations so that operators no longer need to switch between different applications to view all data.

Web Server Tech

VIDEO: Open MCT is a front-end web server display accessed by desktop and mobile devices over the public internet. The server currently runs NodeJs using Vue.js GUI components.

OBSOLETED WARNING: Open MCT now runs on Node.js as of 24-10-13. So ignore diagram on the openmct-quickstart repo on GitHub for a previous version using Apache, NGINX, and Express.js now deprecated.

openmct-docker.png

openmct-components.png

https://www.youtube.com/watch?v=Yotx-l27MiM

External Interfaces

Displays are used by spacecraft missions to visualize and analyze telemetry data from systems such as:

Space Standards at CCSDS.org (Consultative Committee for Space Data Systems):

As of February 2021: CCSDS Member Agencies:

User Groups

Open MCT provides integrated situational awareness, health monitoring and telemetry display to many segments of rover mission teams, including operators, instrument specialists and strategic planners.

Open MCT is currently in use supporting multiple missions at NASA including:

Demo

There was a demo of Mars Science Laboratory dashboard at:

https://openmct-demo.herokuapp.com

Kerbal Space Game

openmct-small.jpeg

https://forum.kerbalspaceprogram.com/

“announcement” on the middle-bottom indicate that the dashboard is part of a pretend universe of various science fiction fandoms, such as the Kerbal Space Program adventure game

Notice date/time stamps are by default in UTC time at Grenwich, near London, UK.

On the left, lines over the same time span:

Mars Weather

A snapshot recoverd from The Mars Weather Display: openmct-weather-1280x860.jpg On the bottom is the selection of timeframe shown in charts.
On the left bottom is a list of “My items”

8 VIDEO playlist: OpenMCT for Engineers 2021

Generalized Usage

Open MCT was open-sourced for generalizable use for building applications for planning, operation, and analysis of ANY system producing telemetry data. Interfaces have been built for:

Open MCT is a next-generation mission operations data visualization framework. Web-based, for desktop and mobile.

Open MCT could be adapted for applications such as:

Plugins

Open MCT capabilities can be extended with plugins such as telemetry sources, object providers or new telemetry visualizations. Some Open MCT plugins are packaged along with Open MCT, with others are available for you to download from https://nasa.github.io/openmct/plugins/

Configure at: https://github.com/nasa/openmct/blob/master/index.html

Create your own Plugin at:

Alternatives to Open MCT

Social Interactions

https://github.com/nasa/openmct/discussions

https://openplanetary.discourse.group/

https://news.ycombinator.com/item?id=40077048


Glossary

The following terms are used throughout Open MCT. Other developer documentation, particularly in-line documentation, may presume an understanding of these terms.


Installation

Here are my modifications piercing together several documents:

CAUTION: There are several obsolete versions of docs about Open MCT on the internet, including NASA’s pages such as

https://github.com/nasa/openmct-hello give examples of extending the platform to add functionality and integrate with data sources.

* <a target="_blank" href="https://github.com/nasa/openmct-tutorial">https://github.com/nasa/openmct-tutorial</a>
* https://github.com/nasa/openmct/ contains docs/src/guide
* https://nasa.github.io/openmct/documentation/
* https://github.com/nasa/openmct-tutorial  <a target="_blank" href="https://ntrs.nasa.gov/api/citations/20150021313/downloads/20150021313.pdf">PDF</a>

https://github.com/CiscoDevNet/ContainerLabs/blob/master/artifacts/nodejs/openmct/README.md?plain=1

https://github.com/jaxxzer/openmct/blob/master/docs/src/guide/index.md?plain=1

https://www.youtube.com/watch?v=xWoR2OGSm9E

From the Institute of Aircraft Design TUM Jan 12, 2021:


  1. Install Google Chrome browser, the “test-“ browser.

    Because the browser cache can sometimes interfere with development (masking changes by using older versions of sources). So it is easiest to run Chrome with Developer Tools expanded, and “Disable cache” selected from the Network tab, as shown below.

  2. Install Docker and Docker Compose.

    QUESTION: Who keeps Docker images up to date and how long is the lag?

  3. PROTIP: Do not specify --depth 1 to limit branches downloaded because the tutorial addresses a specific back branch.
    git clone https://github.com/nasa/openmct.git
    cd openmct
    
  4. Install VSCode
  5. Remove VSCode extension unwantedRecommendation [“octref.vetur”]
  6. Install VSCode extensions https://github.com/nasa/openmct/blob/master/.vscode/extensions.json

    • Python
    • “Vue.volar”,
    • “dbaeumer.vscode-eslint”,
    • “rvest.vs-code-prettier-eslint”
  7. eslint for https://github.com/nasa/openmct/blob/master/.eslintrc.cjs
  8. cspell for https://github.com/nasa/openmct/blob/master/.cspell.json
  9. Code Coverage for https://github.com/nasa/openmct/blob/master/codecov.yml
  10. Karma for https://github.com/nasa/openmct/blob/master/karma.conf.cjs

    Install NodeJs

  11. PROTIP: Do not install the latest using brew install nodejs as instructed in the tutorial, which installs the absolute latest version:

  12. Install the Node Version Manager (nvm) to install a specific version and then switch to it. On macOS:
    brew install nvm
    

    FIXME: This did not work on my macOS.

  13. Add the path to node into your .bash_profile or .zshrc PATH:
    On a Mac Silicon machine:
    export PATH="/opt/homebrew/opt/node@20/bin:$PATH"
    
  14. Exit the Terminal and restart or source the startup file just edited.

    Install Open MCT from GitHub

  15. Identify the version of NodeJs Open MCT currently supports by viewing:

    PROTIP: The release ccompatible with Open MCT is version 20.

    https://github.com/nasa/openmct.git

    Specifying the back version of Nodejs avoids this error upon npm install:

    npm error notsup Required: {"node":">=18.14.2 <22"}
    npm error notsup Actual:   {"npm":"10.8.3","node":"v22.9.0"}
    

    CAUTION: Regularly update your Node.js version to take advantage of the latest features, security patches, and performance improvements. It’s recommended to stay up to date with the LTS (Long-Term Support) versions if stability is a priority.

    The list of specific release is at: https://nodejs.org/en/about/previous-releases

    As of 24-10-13, there is “ No available formula with the name “node@21”.

    There is a “20.18.0”.

    So, in a Terminal, define the specific version of NodeJs:

    OPENMCT_NODE_VER=20.18.0
    echo "${OPENMCT_NODE_VER}"
    
  16. PROTIP: Brew normally enables install of back versions using a command such as:
    brew install node@20
    

    If this works, skip to npm install.

    Manual fallback install

    So the manual fall-back approach is all of the following:

    So we can try to install a specific version of NodeJs using the command nvm install:

    nvm install "${OPENMCT_NODE_VER}"
    

    Then switch to that version using the command:

    nvm use "$OPENMCT_NODE_VER"
    
  17. click “Releases” on the same line as v21.7.3 dated “2024-04-10” at

    https://nodejs.org/download/release/v21.7.3/

  18. Replace “X.X.X” with the actual version number you want, click to download the link such as,
    on macOS:
    "https://nodejs.org/download/release/v${NODE_VER}/node-v${NODE_VER}-darwin-arm64.tar.gz"
    

    on Linux:

    "https://nodejs.org/download/release/v${NODE_VER}/node-v${NODE_VER}-linux-arm64.tar.gz"
    
  19. Switch to a CLI Terminal and navigate to the Downloads folder:
    cd ~/Downloads
    
  20. Verify the download (167_229_440 bytes):
    ls -al "node-v${NODE_VER}-darwin-arm64.tar"
    
  21. Extract the contents of the .tar.gz file:
    tar -xzf "node-v${NODE_VER}-darwin-arm64.tar"
    

    No response is a good response.

  22. Verify:
    ls -al "node-v${NODE_VER}-darwin-arm64"
    
  23. Move.
    If on ARM64 machine:
    sudo mv "node-v${NODE_VER}-darwin-arm64" /usr/local/node
    

    If on Intel AMD64 machine:

    sudo mv "node-v${NODE_VER}-darwin-amd64" /usr/local/node
    

    Type the Password when prompted.

  24. Verify:
    ls -al /usr/local/node/bin/node
    

    Expect to see (for v21.7.3):

    -rwxr-xr-x@ 1 johndoe  staff  100725664 Apr 10  2024 node
    
  25. Add Node.js to your PATH by editing your shell configuration file.
    If you are using ~/.zshrc
    echo 'export PATH="/usr/local/node/bin:$PATH"' >> ~/.zshrc
    

    Alternately, on ~/.bash_profile:

    echo 'export PATH="/usr/local/node/bin:$PATH"' >> ~/.bash_profile
    
  26. FIXME: If you get permission error on macOS:

    xattr -d com.apple.quarantine /usr/local/node/bin/node

    Apple Malicious Software

    To the pop-up ““node” can’t be opened because Apple cannot check it for malicious software.”

  27. Click “OK”
  28. Click the Apple icon to go to System Preferences > Security & Privacy > General tab.
  29. Look for a message about the blocked application and click “Open Anyway” or “Allow”.
  30. Right-click to Open

    Instead of double-clicking, right-click (or Control-click) on the application and select “Open”.

    You’ll see a security warning, but you’ll have the option to open the app anyway.

    For developers or advanced users, you can temporarily disable Gatekeeper using Terminal commands. However, this is not recommended for most users as it reduces system security.

npm install

  1. Verify the current Node.js version:
    node -v
    
  2. Install Open MCT for webpack:

    npm install
    

    Sample response:

     > openmct@4.1.0-next prepare
     > npm run build:prod && npx tsc
    &nbsp;
     > openmct@4.1.0-next build:prod
     > webpack --config ./.webpack/webpack.prod.mjs
    &nbsp;
     webpack compiled successfully
    &nbsp;
     added 1042 packages, and audited 1044 packages in 39s
    &nbsp;
     161 packages are looking for funding
     run `npm fund` for details
    &nbsp;
     10 vulnerabilities (3 low, 4 moderate, 3 high)
    &nbsp;
     To address issues that do not require attention, run:
     npm audit fix
    &nbsp;
     To address all issues, run:
     npm audit fix --force
    &nbsp;
     Run `npm audit` for details.
    

    NOTE: Webpack is a static module bundler for modern JavaScript applications.

  3. Fix:
    run npm audit --force
    

    npm start

  4. Start the dev server process running locally on your laptop:
    npm start
    

    Sample response: ```

    openmct@4.1.0-next start npx webpack serve –config ./.webpack/webpack.dev.mjs

[webpack-dev-server] Project is running at: [webpack-dev-server] Loopback: http://localhost:8080/ [webpack-dev-server] On Your Network (IPv4): http://192.168.1.26:8080/ [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:8080/ [webpack-dev-server] Content not from webpack is served from ‘$HOME/bomonike/openmct/dist’ directory webpack compiled successfully

   CAUTION: Create another Terminal window to do something else.
   Press control+C to stop the app running.

1. On macOS, click "Allow" in the pop-up "Do you want the application "node" to accept incoming network connections?

   ### Run Web Browser

1. Switch to the Chrome web browser.
1. Obtain the GUI <strong>with logging</strong> using its default port without a SSL certificate:

   <a target="_blank" href="http://localhost:8080?log=info">http://localhost:8080?log=info</a>

   You should see a screen that's the beginnings of what is shown in the <a href="#Demo">demo screen above</a>.

   PROTIP: Production servers have a different procedure:
   npm run build.

1. View the log:


   ### Web server status

   QUESTION: "Cannot GET /server-status" appears when the web server status is served from

   http://localhost:8080/server-status

Skip to <a href="#Configure">Configure</a>


<hr />

   ### Docker Compose

1. QUESTION: Docker Compose ???

   https://github.com/scottbell/openmct-quickstart/blob/main/openmct/Dockerfile

1. Enter the username/password testuser/NasaIsCool!

   Hosted websites are available at the following URLs:

   The OpenMCT web application is served from http://localhost:8040

   openmct builds the Open MCT web application into a shared volume (and quits).

   ## Database

   The CouchDB web application is served from

   http://localhost:8040/couchdb/_utils

   (with username admin and password password)

   ## Simulator

   A simple python simulator that generates telemetry data for YAMCS to serve.

   ## Retrieve Telemetry Data

   Telemetry is retrieved from the YAMCS telemetry & commanding server ???

   http://localhost:8040/yamcs


<hr />

<a name="Configure"></a>

## OpenMCT Configuration

1. Click "+ CREATE" on the upper-left for the menu of <strong>domain objects</strong> (or views) to add:
<img align="right" width="30" alt="openmct-create-menu.png" src="https://res.cloudinary.com/dcajqrroq/image/upload/v1728884710/openmct-create-menu_mthlc5.png">

   Domain objects can be created, organized, edited, placed in <strong>layouts</strong>.

   Victor.Woeltjen, NASA's author of Web Tutorials describes how to customize Open MCT (add features to it)by showing how to create a ToDo app like h​ttp://todomvc.com. All the following are done within a Terminal program.

1. Be sure you have forked the openmct repo.

   Below are customization of instructions to create a hello-world plugin:
   https://github.com/nasa/openmct-hello

1. Create a root folder named "todo" along a file path. Results of this is at

   https://github.com/bomonike.github.io/blob/main/openmct/bundle.json ???

1. Create a <tt>bundle.json</tt> file

   A bundle is a group of software components (including source code, declared
   as AMD modules, as well as resources such as images and HTML templates)
   that is intended to be added or removed as a single unit. A plug-in for
   Open MCT will be expressed as a bundle; platform components are also
   expressed as bundles.

{ “name”: “To­do Plugin”, “description”: “Create and edit to­do lists.”, “extensions”: { “types”: [ { “key”: “example.todo”, “name”: “To­Do List”, “glyph”: “j”, “description”: “A list of what has to be done.”, “features”: [“creation”] } ] } } ```

  1. In the root folder, create file bundles.json (note the plural) with an array of bundles (expressed as directory names) included in a running instance of Open MCT. Adding or removing paths from this list will add or remove bundles from the running application.

    QUESTION: Does the file already exist in the repo?

  2. Add a Domain Object Type

Step 3. Add a View

Step 4. Add a Controller

Step 5. Support Editing

Step 6. Customizing Look and Feel


Bar Graph

Telemetry Adapter

https://github.com/jvigliotta

Grafana Performance

https://n8n.io/integrations/grafana/and/nasa/ Save yourself the work of writing custom integrations for Grafana and NASA and use n8n instead. Build adaptable and scalable Development, Analytics, and Miscellaneous workflows that work with your technology stack. All within a building experience you will love.

https://grafana.com/blog/2016/01/19/grafana-its-rocket-science/ Grafana- It’s Rocket Science

https://www.youtube.com/watch?v=CpHQfwFPvw8 Grafana in Space: Monitoring Japan’s SLIM Moon Lander in Real Time | GrafanaCON 2024 | Grafana

https://grafana.com/blog/2021/07/13/how-astronomers-use-grafana-dashboards-to-read-the-stars-and-their-data-on-the-sofia-airborne-observatory/ How astronomers use Grafana dashboards to read the stars (and their data) on the SOFIA airborne observatory

https://grafana.com/events/grafanacon/2023/automated-performance-modeling-with-nasa-open-mct-grafana-cloud-k6/ Automated performance modeling with NASA Open MCT, Grafana Cloud, and k6 by John Hill @Ames

https://grafana.com/blog/2023/04/21/how-grafana-helped-a-rocket-engineering-team-break-a-world-record/ How Grafana helped a rocket engineering team break a world record

https://grafana.com/blog/2023/09/26/celebrating-grafana-10-top-10-oh-my-grafana-dashboard-moments-of-the-decade/ Celebrating Grafana 10: Top 10 ‘Oh my Grafana!’ dashboard moments of the decade

Weather tech

https://www.windandweather.com/category/advanced-weather-instruments

Air quality https://map.purpleair.com/air-quality-standards-us-epa-aqi