MX on Linux

Using MX on UNIX-derived Operating Systems

MX runs on various UNIX-derived operating systems (OS), including those found on Apple Mac computers, and those found on devices running Linux. Although the article focusses on one computer type, the Rspberry Pi, the idea is that this article will complement another article Running Cumulus MX on Windows, so feel free to add more to this article to explain how it can be applied to other Unix-derived devices.

Introduction

This article focuses on a device called the Raspberry Pi. It is a small board of electronics that can actually run Windows, Mac OS, Chrome OS, various Linux distributions, or the Raspberry Pi OS (based on Ubantu Linux). In this article, the focus is on the last OS, because that is easiest to install, so look elsewhere on the web for details of installing alternatives. The notes here will generally apply to any version of Linux, although the configuration editor described is only on the Pi. The Apple Mac runs its own version of Unix, so is not covered here, but hopefully this article will still be of some use by telling you what steps are needed even if the key sequences are different.

The article will give you some guidance on:

  • Choosing a Pi model to buy
  • Setting up a Raspberry Pi,
    • either connecting it to a keyboard, mouse, and monitor (could be TV), and internet (wired Ethernet or wireless)
    • or running it headless, where all instructions are typed into another device and the Pi has no keyboard, mouse, or monitor, but is connected to internet (wired Ethernet or wireless)
  • Installing OS (the NOOBS described here can install various OS, you choose which one you want)
  • Installing Mono (needed on any Linux based OS, but can even run on Windows!)
  • Installing Apache, PHP, MariaDB, PhpMyAdmin, and copying your database from another device (obviously this installation can be done on any device, but the approach here is on a Pi)
  • Running MX (these notes apply to any Linux OS, but some hints need consideration even in Windows)

A very quick introduction to Linux

This article is not the place to teach you Linux, you can find books and on-line articles for yourself, but I list here enough for you to understand the instructions used elsewhere in this article.

If you have a Raspberry Pi with a monitor attached, you will see a raspberry icon that you can click to get access to many features including shutdown options.

  • To shutdown a Pi, type sudo halt, and then optionally turn the power off when the shut down has completed.
  • To reboot your Pi, type sudo reboot, and then you will see that your Pi shuts down and then boots up again. Although the notes below rarely mention this instruction, it is usually advisable to reboot after installing new packages, or changing the configuration, to ensure everything works correctly, so you will probably use it quite often during set up.

sudo

Almost all instructions here start with a "sudo", it basically gives administrative rights to whatever follows, and therefore allows you to do tasks that only work in the root user. You use it as a prefix to almost every command you type in terminal mode. There are 3 system commands that will only work with this prefix (or by using the shutdown options in the main menu - raspberry icon in square):

  • sudo halt = stops any cpu functions, but leaves Pi running; used when you have reached the end of commands you want to do for now
  • sudo poweroff = makes pi do a tidy shutdown and turn off its power; used when you will not be using Pi for a while
  • sudo reboot (or "sudo reboot -verbose" for diagnostic output during shutdown and reboot) = makes pi close down and then reboot; used when you change settings, and after you install new software, to ensure Pi starts with all applications

~ and /

The tilde symbol ~ denotes the home directory for the current user. Sub-directories within the current user's folder can be identified by ~/documents or similar notation. To reference a folder in root or any other area, the prefix is always /.

To see what files and folders are in the current directory, type dir for just names or ls for details.

To make a new folder in the current directory, type sudo mkdir folder_name. To give a folder and all its sub-folders and files full permissions (think carefully whether you really want to do this) type something like sudo chmod -R ugo+rw /var/www/html. See next sub-section for explanation.

chmod

When you are attempting any of the actions listed in this article that involve reading, creating, editing, or moving, files; you might see an error message generally because of a lack of write permissions on an existing file or folder. Whilst rm filename will remove a file even if it is write protected, for nano you need to change the file permissions with sudo chmod -R ugo+rw ~/CumulusMX for full access to all files in your Cumulus installation (see the syntax below if you want to restrict access).

  • chmod command to modify permissions
  • letters indicating whose permission is being modified
    • u = Owning user (sometimes the owner is the user root, sometimes the owner is the user Pi, for our web pages later we change ownership)
    • g = Group (by default there are no groups, but a group can be defined if you want to define multiple users, with different passwords, but same rights of access)
    • o = Other users (Public, needed if for example you are using FTP to move a file from a PC to your Pi, or vice versa)
  • sign for add or remove permissions
  • + = add permission
  • - = remove permission
  • letters indicating what permission is being changed
    • r = read [4]
    • w = write [2]
    • x = execute [1]

Note that as an alternative shorter syntax you can use numbers e.g. 666 is equivalent to ugo+rw. The first digit in the number relates to u, the second to g and the last to o. The values in [] brackets in list of permissions above are added to derive each digit. So if you are reading the Cumulus support forum and you see a reference to permissions which includes a string of 3 digits, now you can understand what is meant.

nano

There are various text editors available on a Pi, nano is a simple one. Like other text editors this can create a file when a file does not exist and edit (subject to file permissions) an existing file. The sudo gives you access to any file, it does not change the actual file access, so you might find you can read a file, but not save it after you have done your edit. If you change the file name shown, then it can save as another file, but you will be asked if the new name is correct (again type Y to continue saving). Do remember that file names are case sensitive, and when you open an existing file for editing look in case "new file" message appears because you have made a typo in the path/file name.

The full syntax is sudo nano -B Path_file_name where the -B means it will create a backup of how the file was before (this can be enabled while in the editor by pressing the control key down and typing B). Alternatively use -C which stores each version in a back-up directory. If you want to edit from a particular line and column you can use +line.column, and also optionally use -l (lower-case "L") to display line numbers which might be useful when trying to correct a problem with a log file like dayfile.txt. If you don't specify a file name, then nano will create a new file and you will need to specify where to save it before exit.

You will probably find it useful to type sudo nano /etc/nanorc as this puts you into the configuration file for nano where you can set back-up, line-numbering, and other options

After typing the nano command you need to specify a filename (it might include a path, see earlier sub-section for use of / and ~) and there are examples later in this article, but if you decide to host a web site on your Pi then you might want to edit its home page with (.html or .php) name like sudo nano /var/www/html/index.php. After you have made an alteration to the current contents of the file, various options are shown at the bottom. Here are two key ones:

  • First is ^O which is used to save the file whilst staying in the editor, to do this press the control key down and type O. Next it shows the current file name, if you press Enter then that file will be overwritten.
  • Another is ^X which means if you press the control key down and type X you get the exit dialogue. If you have not made any edits, or have already saved the file, this just exits the editor. If you have not used control and O to save the file, it asks whether you want to save the edited file (type Y), typing just the Y key lets save continue (any other key stroke exits without saving), then it shows the current file name, if you press Enter then that file will be overwritten.

install

This is used for installing packages, you will often see it used with a parameter -y; as without that parameter you have to type Y to continue at each step of an install.

It is important to mention here that the version of packages installed may well be obsolete, this install is finding versions from a Raspberian repository, more recent versions may be available from the providers of each package. To keep this article simple, I accept the Operating System that is installed by NOOBS, even if it is not the latest available from the Raspberian web site, I accept the versions of Mono, Apache, PHP, MariaDB, and others, that are found at the time you issue the install command. The update and upgrade command that I use in multiple places in this article is still only finding the versions available in the repository, and is included just in case the repository is being updated after any install finishes.

If you have more skill than the level of the person at which this article is aimed at, then you should know how to install the latest version from the appropriate web sites.

removing an unwanted file

You can remove a file or a folder with various commands, including sudo rm filename.

Miscellaneous

I have created a section here, in case anyone wants to add any more instructions. Please feel free to rename it, or indeed add any clarification anywhere in this article.

Meanwhile, look at either this web page or this one for more commands.

Which Raspberry Pi to buy

A standard desktop computer consumes at least 200 Watts of power (that is when it is idle, it will increase depending on peripherals attached and any processing being done) all the time it is switched on. A Pi Zero W consumes half a Watt when idle, and up to 1.78 Watt when running tasks or connected to peripherals. A Pi model 4 B (the latest model at time of writing) consumes 2.85 to 80 Watt depending on whether it is idle or working hard. Although Cumulus MX does not need to run 24/7, derived values like highest, lowest, average, and so on, will be more accurately calculated if MX is left running. Although the Pi is not the only small computer model available, it is probably the most popular and the easiest one to use if you do want to run MX all the time and not wreck the planet!

First make a list of what you need

  • Do you want to use a mouse and key board?
    • If so, a model with multiple USB sockets is advisable (like 3B+)
    • This also applies if you want to be able to plug in a USB stick (perhaps for transferring files between devices, e.g. Cumulus configuration and data folder files)
  • Do you want a wired connection to your hub or router?
    • Maybe you are going to update external sites, a wired connection may provide a faster and more dependable communication than a wireless link
    • If so, a model including an Ethernet socket is advisable (like 3 B+)
    • Remember that if you are operating the pi in headless mode, a wired or wireless connection to your LAN is needed for your other device to communicate with the Pi
  • Will your MX need to update a database, feed data to a web site, upload to external sites, or control other devices?
    • If so, a model Zero will have to do each task in turn, and you will see some delay in information updates, plus you will need to use a larger time between updates
    • If so, a model Three (or Four) will be noticeably faster, and support all options in MX, and can update external sites more frequently
  • What interface does your weather station use?
    • If your station communicates to MX via wireless, then you choose a model that supports wireless at the right frequency, all models support basic wireless
    • If your station communicates via Ethernet, then either a wired, or wireless, connection is possible between router/hub and Pi as the station will be plugged into your hub or router
    • If your station communicates to MX via USB, then choose between the model 0W with one USB socket, and the model 3B+ with 4 USB sockets depending on whether you might want to use another USB socket ever
    • If your station uses another communication port (such as serial interface), then you need the additional components that support that interface

Now research how the various models relate to your needs

You can look up online what features are included in the various Pi models, and how they differ in power consumption, and cost. But your decision also needs to consider what you need. Here, I won't describe all the different models, but concentrate on just 2 for simplicity.

The model Zero W is appealing as it has low power consumption, it is perfectly adequate for running MX (but has limited speed, it runs the various threads MX uses sequentially) especially if you only use standard MX functionality and don't ask MX to do all the optional extras, and has limited interfaces for peripherals.

The model Three B plus is appealing as it has medium power consumption, but can cope better with the multiple threads that MX starts, and has more interfaces built in, such as 4 USB 2 ports (useful if you want to connect a weather station using USB and connect a keyboard).

While both models support wireless links and Bluetooth, the latter model also allows a wired Ethernet connection, and that may be useful if that is how you connect to your weather station (an Ethernet connection is also advisable if you want to install a web server, on your Pi). Having an Ethernet connection, as explained later, makes it possible to easily install the Windows Operating System on your Raspberry Pi on first boot.

  • Raspberry Pi Zero W
    • Pi Zero W has WiFi and one micro-USB port which is all that is needed for headless running.
    • Installing onto a faster Pi might speed parts of the installation process, but for actual ‘production’ running this slower, and simpler, Pi will be perfectly adequate.
    • It could run a web server, but that might really slow it down.
    • If you run this headless, all updates are done remotely, so the connectivity and speed of the actual Pi are less important
  • Raspberry Pi Three B Plus
    • The faster speed of this Pi although NOT necessary for running Cumulus MX, will cope better if you are asking MX to do lots of processing (e.g. updating database tables or external sites as well as standard processing).
    • Pi Three B Plus has a socket for an external power supply, Ethernet socket (supports wired link); a HDMI socket for audio/video to TV, or computer monitor; a standard jack audio socket for external headphone, or speaker; 4 standard USB type 2 sockets for weather station, mouse, keyboard, USB stick, or other storage device; plus other connections (e.g. camera).
    • This might be better if you also want to run a web server, and if you want to do other tasks (e.g. word processing - Libre Office is installed as standard on a Pi) on the same Pi.
    • Also consider this model if it is to be used on a remote site so when you visit it is useful to be able to plug in a monitor and other peripherals, and to spend as little time on updating as possible.

Other models are available, but you need to check their specification against your needs. For example, the current model Four has more capabilities, but may be less appealing as it also consumes more power.

What else to buy

You can buy just the Pi, which is just a circuit board, or a kit that includes other components.

Generally buying as a kit is cheaper than buying items individually. A typical kit includes the Pi board with components and interfaces on it, a power supply (with a plug suitable for your mains sockets), a micro-SD card (see later sub-section), some connection leads, and a case that you can fit the board into to protect it.

You may want to buy a case, that will protect your Pi from accidental damage. A case specifically designed for your Pi model will have cut-outs in the right place for each interface connection, and will have sufficient ventilation for the electrical components to not over-heat. Some designs have additional holes for securing peripherals.

You may need a power supply.

  • This could be an official Raspberry Pi power supply.
  • Alternatively, any power supply unit that has a micro USB connector will do, the power consumption of a Pi (whichever model) is fairly small, but it will be powered on 24/7, so a low power consumption ‘switched mode’ type is preferred – i.e. one that does not become warm when plugged in with nothing attached.
    • You may have a suitable one left over from an earlier mobile phone.

You may need to buy connection leads:

  • You may need a HDMI lead to connect your PI to your TV or a spare computer monitor.
  • You may need a USB lead to connect to your weather station (the Pi model Zero requires a micro USB, the Pi model 3 requires a standard A end USB) and your station probably has a USB A end connection.
  • If your weather station connects by Ethernet, you will need one lead to connect the station to the router and possibly another to connect the hub or router to the Pi.

If you do choose a model 3 (or later), consider whether you do want to buy a USB mouse and USB keyboard to use with it.

Finally, you may wish to buy a second micro-SD unit as a spare, or some other USB connected (or network connected) storage for back-ups and extra storage needs.

Setting up your Pi

You can find, online, instructions (and videos) about setting up a Pi. A search engine will give you multiple choices!

The Micro-SD card

You will need a micro-SD card (preferably class 10, the class number indicates the relative speed of read/write compared to original design, so this class is 10 times faster).

  1. A Pi will work with either a class 4 (only 4 times faster), or a class 10, micro-SD card.
  2. Just for the standard install you need a card with a minimum of 8 GB.
  3. Given we are going to add Mono and Cumulus MX to the card, I advise you buy a card with at least 16 GB (as the default operating system installation takes up almost half of that),
    • but you might prefer to buy a 32 GB or 64 GB (or add an external USB drive or USB memory stick) if you intend to keep a lot of data on the Pi.

I won't mention manufacturer names here, but one well known brand (that uses descriptions like extreme) is the market leader, and does have greater reliability than cheaper cards from other manufacturers.

Setting up a Pi is simpler if you buy a micro-SD card that is:

NOOBS makes it easy to install (by default) Raspberry Pi operating system, as if you insert such a micro-SD card into a new Raspberry Pi computer, when you power up the Pi, the operating system will be installed during that first boot. If you have a Raspberry Pi model with an Ethernet connection, and you connect your Pi to your hub/router before you first switch it on, then at that first boot, NOOBS will offer you a choice of several operating systems, with Raspberry Pi as first choice.

Various suppliers offer cards of 16 to 64 GB with NOOBS pre-installed ready for use in a Pi (I bought from a firm in Haverhill, Suffolk, UK).

My advice is to buy your micro-SD card from a firm that specialises in selling Raspberry Pi computers and accessories. That should ensure you buy a card with the latest version of NOOBS (or Raspberry Pi Operating System) and that will make your life simpler than buying a blank micro-SD card and having to down load and add the operating system yourself.

If you want to be able to use the micro-SD card in other devices (like your PC), you may need to also buy an adapter which allows the micro-SD card to be plugged into a standard SD socket. This may be included if you buy a micro-SD card not sold specifically for the Pi, or may be available with the Pi micro-SD under a special offer for buying two items together.

The Operating System

As said before, a number of operating systems can be installed on your Pi, even Windows.

To keep this article simple, I will assume you have bought a micro-SD card either pre-installed with an operating system (OS) so you are ready to go, or you used NOOBS (as described earlier) to install your chosen OS.

If you do need to install any operating system you choose, normally the instructions will be found from where you download the system you have selected. If you have brought a card without NOOBS, you can download/install the Raspberry Operating System Buster yourself, following either instructions on the Raspberry Pi download page, those at this supplier's tutorial guide, or those in Cumulus support forum. To save you looking any of those up, the next sub-section summarises what you need to do.

How to add Raspberry Operating System to a card yourself

  • Download from https://www.raspberrypi.org/downloads.
  • That imager is run on any device, say your pc, and then you select write to save it onto the micro-SD card (don't forget this overwrites anything already on the card).
  • This should work without a need to format the card first, (but if you do need to format it, do so using a SD card formatter downloaded from https://www.sdcard.org/downloads/formatter_4/index.html, not the Windows format tool).
  • After this image has been stored it will have created two partitions on the micro-SD card (one the boot partition is a FAT partition that can be accessed by Windows, but the larger Linux partition is invisible to Windows).

Is the operating system obsolete or up to date?

It is important that your Raspberry Pi (or other device) has the latest operating system version installed. If the Operating System installed is an obsolete one, then each package it includes (e.g. Libre Office), and each package you add (e.g. Mono or PHP), will also be obsolete versions. In the worst case scenario, any attempt to install a package might fail giving an error message that the relevant Raspberry Pi repository is archived.

If you have a micro-SD card pre-installed with NOOBS, as described above, the first boot will install the operating system. It is the version of NOOBS that is included on the card that determines which Raspberry Pi Operating System version is set up:

  • Wheezy (7) released in 2013
  • Jessie (8) dating from 2015
  • Stretch (9) released in 2017 (up to this called Raspbian Operating System)
  • Buster (10) available from 2019 (the first to be called Raspberry Pi Operating System)
  • Bullseye (11) under test in 2020

Be aware that many such pre-loaded and pre-formatted cards include an obsolete version of NOOBS.

  • You may find your card installs the obsolete Raspbian Jessie (version 8 of Debian from 2015),
  • a few install the old Raspbian Stretch (Version 9 of Debian, dating from 2017),
  • a good supplier sells a card that installs latest Raspberry Operating System Buster (Version 10 of Debian, released in 2019).


Wireless Network

Depending on your Pi model, it may on first boot ask you to enter your wireless network details, it may list the wireless networks it finds and ask you to choose, or you might need to use the configuration tool, or you might need to click on an icon with two red crosses.


Other configuration

There are various other configurations you need to do on your PI. Unlike SSH, these can't be done by storing files on the micro-SD card. You need to use the raspbian configuration tool raspi-config, and this can be accessed on your Pi either in a Graphical User Interface (GUI), or by running a command in Terminal. The same command can be run from a remote device if you successfully have SSH running.

Whether on your Pi, or from a remote computer terminal session, the command to use is sudo raspi-config.

Mandatory configurations

When you use SSH for the first time to connect to your Pi, you will see a warning that SSH is enabled but the password has not been changed, which is a security risk. So it is mandatory to change the network password for your Pi from the default raspberry to something that you can remember but makes life hard for anybody trying to hack into your system with malicious intent.

Within the Raspberian configuration utility, you will see an option to change password. You will need to enter the new password twice before it replaces the old one.

The default network (host) name for your Pi is raspberrypi, obviously we need to replace that as well with a name that personalises it to you and does not make it easy for a hacker to know what device is represented by that network name. The name can most easily be changed within the Raspberian configuration utility, but it can also be edited by opening the file where it is stored using sudo nano /etc/hostname. Once we rename this hostname, if we are working headless, we will see an error message: sudo: unable to resolve host raspberrypi, appearing when we leave the configuration utility. These can be safely ignored (it's just because you renamed the Pi) and will disappear after next reboot of your Pi.

Within the Raspberian configuration utility, you will see a Network Options option, it is there that you change the network name. Network options can also be configured by clicking an icon on the Pi (this icon might be two red crosses if network settings are missing, two parallel arrows if the network settings are not correctly set, or the wireless symbol if your wireless network is working). Hopefully, for you the WiFi network and password have already been set by the wpa-supplicant.conf file added to micro-SD card earlier.

Recommended configurations

The default locale for a Pi is normally en_GB.UTF-8, as they are designed by a company based in UK. Within the configuration option, you can add additional locales (in most cases there is a UTF-8 option which is preferred and at least one other encoding), there are also a number of special alternative locales, but I am not going to explain all the options, look it up if the default locale is not acceptable.

  • Whatever locale you use, if you have already been using Cumulus (1 or MX), you need to ensure the locale matches the one used for your log files. The versions of MX released from the middle of 2020 onwards are very fussy that all dates use the same delimiter (see Cumulus_MX_formal_release_versions), so you need to check the chosen locale continues to use the same date separator as before. The locale is affected by the version of Mono you install and whether you use the locale parameter when starting MX, so I cannot cover all options.
  • Anyway, the default locale is fine if you are in the UK, you use decimal points for real numbers, you use commas for list separators, and you don't have dates with month first!
  • To change the locale, enter Localisation Options. Note that there is also a Wi-Fi network country which must be set, but as that has already been set by the wpa-supplicant.conf file added to micro-SD card earlier, it is listed here in the recommended section.

In the same option area, there are some more options:

  1. Change Time-zone, by default UTC is used all year round. In the UK if your Cumulus is set to roll over at 10am in summer, you will wish to change the time-zone to UK time.
  2. Change Keyboard Layout if needed, keyboards can support different numbers of characters, and can have different currency symbols, so select whatever is relevant to you

To leave configuration

Select ‘Finish’.

Installing Mono

Sponsored by Microsoft, Mono is an open source implementation of Microsoft's .NET Framework based on the ECMA standards for C# and the Common Language Runtime.

Preparing for Mono installation

Quite often when we try to install, or update, packages on our Pi we will see messages about dependencies, and in some cases error messages saying the installation has failed or been aborted. Before we can install Mono, there are other packages required and these vary depending upon the Raspbian operating system version we have installed, see Mono instructions for Raspberian. Here are the latest 2 options when this article was updated (if your Mono installation fails, then you selected wrong one):

For Raspberian 9 (stretch):

sudo apt install apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/debian stable-raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

For Raspberian 10 (buster):

sudo apt install apt-transport-https dirmngr gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/debian stable-raspbianbuster main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
sudo apt update

Checking all packages are up to date

Either type:

sudo apt-get update
sudo apt-get upgrade

or to insert in single line type instead sudo apt-get update && sudo apt-get upgrade.

Installing Mono

With all the pre-requisites correct as in previous steps, you can install mono by simply typing sudo apt-get install -y mono-complete. It is important to note that MX requires the complete edition of mono as there is also a cut-down developer edition of Mono that can be downloaded/installed. "sudo" as already described gives us rights, "apt-get" is one of the ways to search the Raspberry respository for applications, "install" is the action we want to do, and "mono-complete" is the package we want.

Completing Package Installation

As the Pi does not know exactly which components are needed when multiple packages are installed with various dependencies, sometimes extra components are installed which in the end are not needed when you complete all your installations. To clear up, delete any components that are not included in dependencies by typing sudo apt autoremove.

Installing (or updating) MX

In Cumulus.ini there are various settings that will need to be initialised if you start using MX, or updated if you have used Cumulus (1 or MX) before. Read the linked article for more information, but one item is to identify how to connect to our weather station. On a zero model with only one USB socket connecting to a weather station that uses USB, the default ComPort will be right. On a model 3 with 4 USB sockets, the first USB device to be connected takes the default (ending in zero), the next device will replace that zero with one, and so on; so providing you plug in your weather station without any other device plugged into USB (plug in keyboard, mouse, external storage or USB stick afterwards) again the default will work.

If you have moved from running MX on Windows to running on your Pi, then you potentially have lots of items to update. If you are using sudo nano Cumulus.ini, then you will see control sequences for replace, next page, prior page, and all these these will come in handy.

MX Distribution

Download whatever version of MX you have decided to install (sometimes the latest version has bugs that might cause a problem for your station or the functionality you use) from CumulusMX/releases

Download on Raspberry Pi

If you are download on your Pi, and that is the easiest option, you may download into ~/downloads folder or you may choose location (depending on whether you have changed settings in Chrome). It is recommended, you type sudo mkdir ~/CumulusMX first, and subsequently extract from that same level in zip, alternatively the extract can create the folder for you. Whichever approach you choose, simply open (if the distribution zip is visible right click gives you open option) the download distribution file, next you will need to click extract and choose where the files go.

Download on PC

If you download MX on your PC, then you will probably unzip the distribution there, and use a tool like FileZilla to copy the installation to your Pi. First of all you need to configure FileZilla Client, unless you have done that previously and saved the configuration:

  • Host - this is the IPv4 address of your Pi, I can't tell you what it is, but it is likely to be 192.168.z.xy where the z is likely to be a single figure like 0 or 1, and the xy is two figures you can find out by looking for "pi" (or whatever host username you have set on your Pi) in the admin interface for your hub or router. (It can also be found out by typing hostname -I). Most networks are setup in a way that the subnet range is from 192.168.1.0 to 192.168.1.255.
  • Username - the default for this is raspberrypi (although on older Pi it might be Pi), but you can may have changed this (as described earlier). (It can be found by typing hostname) or by looking at the contents of the file /etc/hostname.
  • Password - again the default for this is raspberry but we changed it as one of the mandatory configurations earlier.
  • Port - 22 is the default, and I have not said how you can change this!

Click QuickConnect and you should see the local files in the left frame and your Pi files in the right frame. The easiest way is to find the folder called CumulusMX in the distribution on the left and drag it to the correct position in the right hand frame. Then all you need to do is watch the progress until it successfully finishes.

Configuration issues

If you have used Cumulus before, but this is first installation on Pi, then you need to copy some files from old installation to your Pi, here are a couple but you may have further configuration files to copy across:

  • Cumulus.ini
  • Strings.ini

The two examples above are in same folder as Cumulus.exe or CumulusMX.exe. You also may have configuration files in a mqtt folder, or elsewhere (for example I store some batch files that Cumulus runs for me in a batch folder).

If you have not used Cumulus before, there is useful guidance in various other articles that is not repeated here (it may seem a lot to read, but reading these instructions my save you from days of issues, just look at the support forum for examples of people struggling because they did not read up first and so missed key settings):

  • To learn about what MX can do, please see About Cumulus article
  • To learn about configuration, please see MX Administrative Interface and Cumulus.ini articles.
    • It is important to see that whilst most settings can be done in the former, a few are read-only and must be done in latter
    • Also note that some settings are related (e.g. you need to enable real-time before any real-time actions can be selected; equally you need to enable moon image generation before you can tick the upload option; these are just the 2 most common errors)
  • For general advice relating to Cumulus MX, follow that link
  • For What to do when I have a problem with MX, follow that link
  • An article that needs someone to spend a lot of time improving it is Cumulus MX FAQ, but the article could be useful
    • The cumulus 1 FAQ might help (e.g. how to upload past data), but use with caution as Cumulus 1 and MX are very different in how they do many actions

Remember as mentioned earlier, the configuration file may need editing to update port names, any command locations, and to update file locations. Whilst you will find using the admin interface is easiest because it (in many cases) limits the selections to those that are valid; editing the Cumulus.ini file directly might be easier if you have moved from Windows and want to do repeat edits (e.g. changing multiple paths for files is easier using a repeat edit, that wading through all options in the interface).

  • There is advice about port names at Cumulus.ini#Swapping_from_Cumulus_1_to_MX.
  • For Extra Web Files, local file names will look like /home/pi/CumulusMX/web/trendsT.htm or /home/pi/cumulus_Templates/valuesRecentForDetailT.js.
    • Please note that Cumulus MX does not recognise "~/" as shorthand for /home/pi/.
    • Your remote file names, if you have a local server as set up in the notes here, will look like /var/www/html/weather/trends.html or /var/www/html/weather/js/valuesRecentForTrends.js, depending on your folder structure.
    • Remember, MX needs full rw permissions to the HTML folder on your web site, if web site is on your Pi, then give permissions recursively using sudo chmod -R ugo+rw /var/www/html for Cumulus MX to successfully copy there.

data and Reports files

The entire content of your existing data and Reports folder should also be copied across to your Pi or transferred across using FileZilla or a similar tool. The same settings as for the distribution can be used, but you will have a different starting point in your left frame.

Running Cumulus

The simplest command to start Cumulus is sudo mono CumulusMx.exe, but you may wish to add Optional_parameters. Just in case it is not obvious .... if you start MX using this command either in terminal on your Pi, or in a Command or Terminal window (or even in puTTY) on another device, the you must leave that session running for MX to continue to run. That is fine if you are happy to start it off directly on your Pi, and then switch off monitor or TV attached to your Pi, but leave Pi on so that terminal session continues. This is simple, you can use SSH access from my PC when you need to edit a file, or do a file transfer between Pi and PC or vice versa. Obviously my PC lets you view the admin interface to change settings or look at the web page provided in that interface. (I can also see my own web pages run on the web server on the Pi).

That is simple if your Pi is in your home, and you can go back to the Pi when you need to stop MX (perhaps to update it to a new release). But maybe you are running Pi headless, or it is in a remote location, in that case instead of starting and stopping MX in a terminal session, you will want to issue commands that connect to a separate session for starting MX so you can disconnect from that session without causing MX to close. As I type this a new release is allowing MX to run as a service, and a future release is planned to change the associated script, so anything I write here might become obsolete, and the next paragraph gives you some links to the support forum. Hopefully, someone will edit this article, when instructions have settled down and won't change on next release.

In the Cumulus Support forum, there are articles about a stop/start routine, a backup routine, and how to run MX as a service. I will let you hunt for and read the relevant topics, as you may find details in more than one place. This article currently avoids describing these to try to keep content simple. Here is just a list of some alternatives to having to leave your terminal session running:

  1. Use start/stop routine (see earlier link), this effectively starts a separate session for MX to run in and leaves the standard terminal session free.
  2. Run MX as an init service (see the earlier post in the service link above), be aware that this is a new feature in the new release of MX 3.8.0, again this starts MX outside your terminal session
  3. Use Screen software to start up a separate session that you can log off from without MX stopping (see how to run using screen}
  4. Run MX as a systemd service (see the more recent posts in the service link above), be aware that at time of typing this is planned to be incorporated in a future release but the MX developer has no knowledge in this area

Optional actions

The above has covered all you need to do to use a Raspberry Pi (or other Unix-based device) to run MX.

However, some people want to do more, so various options are covered in the remainder of this article.


Before adding any extra packages

  • We run sudo apt update && sudo apt upgrade -y to ensure all packages are up to date before we attempt to add another package.
  • I remind you here that this does not update everything on your computer to the latest versions available for a Pi, that requires a different (more risky) command not taught here.
  • Instead, the instruction quoted above just updates your Pi to a consistent state; based on what is in the repository you are already using.

Databases built into Cumulus MX

Cumulus MX includes two SQLite databases;

  1. The first database was added by Steve Loft, but he never documented what it is used for (see Cumulusmx.db) and in the support forum when someone asked, nobody was able to answer.
  2. The second database is the Weather Diary added by Mark Crossley, that is documented, and in the support forum there is a topic comparing the differences between Cumulus 1 and Cumulus MX weather diaries.

You do not need to know what is in those databases to use MX. The Admin Interface provides a page to view or edit the weather diary.

Optionally, you could install phpLiteAdmin (the significant part of that name is in the middle) to read those SQLite databases. Install it using sudo apt install phpliteadmin.

If you do find out what the first database is used for, please update the Wiki article on it!

Adding a web server and a database server

Now you have a Raspberry Pi (or another device than can be left running all the time without consuming a lot of electricity), you might want to add a web server and database server so you can make use of the web templates that Cumulus MX provides, and its ability to update database tables. This is an option, and may not be useful to you, but is described here in case it is something that you want to do.

Install Apache 2 (or another web server)

I will mention 3 possible web servers:

  1. If you choose Apache it is probably the most comprehensive, so if you have enough space on your Pi, install it using sudo apt install apache2 -y.
    • You might want to use Fast CGI (if you don't know what that is, skip this) and therefore add sudo apt-get install libapache2-mod-fcgid.
  2. If you choose nginx, install that web server with sudo apt-get install nginx -y.
  3. If you choose lighttpd, install it with sudo apt-get install lighttpd -y.

Install PHP Hypertext Pre-processor

  • PHP is not the only script language available, but it is quite comprehensive being able to be used either in a fairly simple way or in an object-oriented way for those trying to achieve more complex scripts.
  • The simplest instruction to install it is sudo apt install php -y, which version you get depends on your Pi and its operating system.
  • To check which PHP modules have been installed by the above command, type php -m.
  • If you later want to use a database (and a tool like PhpMyAdmin), then your php modules loaded must include at least mysqli and mbstring.
  • I will explain how to find the .ini files later, but unwanted modules can be commented out in your .ini file.

Alternatively, you can install particular php modules, or a particular PHP version, by selecting components from a list. To do this type something like sudo apt install php7-fpm php7-cgi php7-cli php7-common php7.3-mbstring php7.3-mysql php7.3-curl php7.3-gd php7.3-zip -y. Only use this approach to force a particular version (but you may find that is not available), or if you are short of space, and you are only going to use a minority of the php features available in the full set of modules.


To test that php is installed, type php -v into terminal, and you will see the exact version that has been installed, a confirmation that it offers command line interface (cli), and a copyright notice.

Creating a Home web page on your web server

You may wish to create a index.php web page at /var/www/html which is the web server root for browsing, or of course you may wish to copy or FTP here all your existing web pages. To view a php web page, go into a browser and type in a url with the same IPv4 address as you use for the admin interface, omit the port (:8998) and instead type in your web page name (e.g. //192.168.1.xy/index.php, where you need to determine digits that replace xy).

Finding your PHP configuration file

For sake of simplicity in this article, from now on I will assume the web server you installed is "apache2", change that segment (in the paths quoted below here), if you installed a different web server.

The web server main php.ini is found at /etc/php/7.n/apache2/php.ini (where 'n' depends on your Raspberry OS version and therefore which PHP version was installed, that was found out in last sub-section).

You may need to edit this file for example to specify where your include files are stored (if not in same folder as script with require/include). Replace "apache2" by "cli" in the path for the batch php.ini file that you may also need to edit.

To run a php script in batch, type php - f <file_name>. You can redirect the output by adding a greater than symbol and the destination file (i.e. > log_file) on the same terminal line.

If you want the MX external commands to run a PHP script for you, use something like "sh" as the program to run (i.e. run shell script); and in the parameters something like /home/pi/CumulusMX/MXutils/autoEOD.sh will run a script "autoEOD.sh" you have added to the "MXutils" folder. In that script, you put something like (assuming you have added a folder 'batch' with a subfolder 'log'):

#!/bin/sh
# This MX batch command file is initiated automatically by Cumulus MX software during last stage of processing the end of a meteorological day
echo "It stores feedback in log file CumulusMXDailyBatch (file name ends with day of month)"
sudo php -f the_path_and_filename_goes_here.php > /home/pi/CumulusMX/batch/log/DailyBatch_Day$(date +%d).log


Install Maria database

MySQL database software is controlled by Oracle and not made available for inclusion in Raspberry Pi repository.

Maria is an alternative that has largely similar command syntax so is likely to work with code (like MX) designed to work with MySQL. Since the MX developer (Mark Crossley) actually uses Maria DB, we can have plenty of confidence it is suitable.

To install this database server, we type sudo apt install mariadb-server php-mysql -y.

Our database files will be stored at /var/lib/mysql by default. Our MariaDB configuration is stored at /etc/mysql/mariadb.conf.d/50-server.cnf, and it is the datadir= entry that controls where the database files are stored.

Making your database secure

We need to assign passwords to control access to the database by typing into terminal sudo mysql_secure_installation. That brings up a screen:

  1. where we are asked to type current password for the root (as no password has yet been set, simply press Enter),
  2. next type Y to signify we are going to set a new password for root,
  3. next type in a new password that you will not forget,
  4. next as explained on the screen we are going to say whether users must select a user name as well as a password, type Y to Remove anonymous users
  5. next we have to decide whether we will only be logging into the database on our Pi (using Localhost) or we might be logging in remotely; type Y or N respectively, but if you choose N remember someone other than you might guess there is a root user and might guess the password you set,
  6. next we have another option of whether to retain or delete a test database, answer N or Y respectively, I would keep the test database for now as you can play with it and then remove it later,
  7. finally you type in another Y as that will Reload the privilege tables and ensure all is set up for your access to the database later.

The message, when the process successfully completes, is "Thanks for using MariDB".

Installing Adminer, or PhpMyAdmin

ExportMySQL.exe and CumulusMX.exe (see Cumulus_MX#Executables for details) both create SQL for updating tables in a MySQL database, such as the one our MariaDB software package we have installed can create; so maybe we want to install a package that lets us back up and manipulate tables in this database.

PHPMyAdmin is not the only tool that can be used to manipulate your MySQL like database (that is the significance of the "My" bit in the middle of the tools's name), and you may prefer to load a different tool, perhaps adminer that works using a drill down approach.

However, let me assume that you are happy to use PHPMyAdmin and I will describe how to install that. Start the install with sudo apt install phpmyadmin -y. (Alternatively install a drill down package with sudo apt install adminer and I leave you to work out the commands needed after that).

The PhpMyAdmin installer will ask some questions. Use your tab key to select <Yes> when it asks whether you want to configure with dbconfig-common.

Getting web and database servers ready for use

We need to create a user for PhpMyAdmin (or adMiner or whatever) to access our database and another for Cumulus to use to access the database tables. At the moment our database access has the single root@localhost user we created when we installed MariaDB. The initial password was set then, and we need to use it to get access to MariDB monitor where we can insert some SQL commands to create these two users. PhpMyAdmin on first start up will ask for username and password, thereafter it will use same log-in, let us create a user called 'admin' for it. The user name and password for the data base is set in MX using the MySQL_settings in the admin interface, let us create a user called 'weather'. Obviously, these names might not be what you use, but you can amend commands below accordingly. For each line with SQL, it must end with a semicolon (;) as shown. The SQL lines have a prompt of a greater than symbol (>) while the command lines have a prompt showing current path. Note that "identified by" is followed by a password enclosed in single quotes.

sudo mysqli --user=root --password=InitialPassword
create user admin@localhost identified by 'PhpMyAdminPassword';
create user weather@localhost identified by 'MXPassword';
grant all privileges on *.* to admin@localhost;
grant all privileges on *.* to weather@localhost;
FLUSH PRIVILEGES;
exit;

As I type this, MX has no exception handling if the username and password defined in the settings do not exist in the database, therefore it will crash out (with message press Enter to close).

Next, we need to add the mysqli module to our php install, to restart apache, to create a symbolic link for the phpadmin installation to the server web root so it can be seen (and used) in our browser, and we need to give the standard user (pi) ownership of the database files and the web pages:

sudo phpenmod mysqli
sudo service apache2 restart
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
sudo  chown -R pi:www-data /var/www/html/


You can view any index.php or PHPMyAdmin web page in your browser by prefixing the address with your Pi URL e.g. http://192.168.1.xy/phpmyadmin where x and y are digits you look up as mentioned before where FTP of MX distribution was described. If your Pi has both Ethernet and wireless connection, there will be two different values of y for you to choose one from. On first run of PhpMyAdmin, as already mentioned, you will see a PHP MyAdmin log on page where you type username and password we have just set up.

Transferring database tables to your Pi

If you have been using Cumulus before (and have a database) then you can use PhpMyAdmin on your old device to export out all the Cumulus tables as SQL in a zip file, FTP that zip file across to your Pi, use PhpMyAdmin to import that zip file.

Providing you selected the right options for what SQL you created in your export, the import will contain SQL to create the tables and to insert all the rows into each Cumulus table on your Pi. Please note that there is a limit of around 1000 rows that can be imported in one action, so for your bigger tables, you will only create the table once, but you will do several Replace row actions (export from old device, then import to Pi) each transferring just one thousand rows, until the whole table is on the Pi.

You might want to also export/import the PhpMyAdmin tables with your preferences in a separate zip, although these might need some extra transformations, as they are specific to a particular version of the database server (and the old device version may not match the MariaDB version on your Pi). Some PhpMyAdmin tables do change for different versions of the tool, so that too may make export/import of its tables more complicated.

Restarting Web Server

After all these installs, we need to restart Apache (so it loads the PHP and MariaDB), by typing sudo service apache2 restart or if we just want the Apache configuration reloaded by typing sudo systemctl reload apache2. Similar commands apply for other web servers.

We will need to restart Apache (or whichever web server we installed) any time we change our php.ini files, database passwords, and anything else that is checked when the web server starts.

Pre-configuring the Pi for headless operation

The terminology "headless" means using another device to send commands to a Pi via a wired or wireless network, instead of connecting a keyboard and monitor (or TV) to the Pi.

If you are only going to use the Pi in headless mode, you will select this next configuration. In Boot Options, Desktop / CLI, select Console Autologin. On your actual Pi, instead of showing the desktop as default, you will see the splash screen (unless in another option you turn it off) that says "Welcome to the Raspberry Pi Desktop - Powered by Raspbian" and a terminal prompt where you can enter commands. Alternatively, in boot options, select another option depending on what you want to do when you have a keyboard and monitor (or TV) connected to your Pi.

If you insert the micro-SD card (used on your Pi) into your PC, you can store files in the boot partition of the micro-SD card that can be accessed by Windows.


Secure Shell Home

What is SSH?

Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over an unsecured network. If you have two devices (your Pi and another computer), SSH will allow the two devices to exchange commands and responses between a terminal and a computer. You may be too young to remember when communication with a computer was often done remotely using a Teletype or similar device acting in terminal mode, just 4 decades ago this would have been a familiar experience to anyone working with computers, now it may seem strange for you. It is possible you have remote connection from home to a computer at your work (although that probably uses a different protocol as the network is likely to be more secured).

How to set up SSH?

If you want to run your Pi headless (without monitor, keyboard, mouse), then you must ensure SSH (which is off by default) is switched on as your Pi boots up. The only way to achieve that is by adding a file SSH to the boot partition before the micro=SD card is put into the Pi. If you don't do this you cannot get headless operation, and you will need to move a monitor or TV, mouse, and keyboard, across to the Pi, because you can't even close down the Pi tidily!

The file, you add to the boot partition, must be named "SSH" with those three letters in capitals, but with no file extension. You can create the file with whatever text editor you have available.

  • On a Windows PC, if you right click (while viewing the boot directory on the card) there is an option called New and if you select a text file it will create an empty file with the extension .txt. (In windows there is an option to hide extensions which is on by default, so you may need to deselect this option [New menu -> Options] to see this extension). On Windows you can open the file using Notepad to verify it is empty, if you gave accidentally created a file of another type like word processing it will be full of characters some of which do not display. Anyway, you must remove any extension from the file name so it is really just SSH.

Type into the file touch ssh, but nothing else, no empty lines, no end of line characters.

When the card is inserted into your Pi, on boot this file will be removed and the SSH option will be enabled. The default password is raspberry, once you have successfully got SSH working, then with sudo raspi-config (choose option 1 = Change User Password, and set the new password you will use for your SSH session next time).

Of course if you have a monitor or TY, and a mouse and a keyboard, then you don't need to use SSH, but you can give yourself the best of both worlds by switching SSH on, the easiest way is using the Raspi-config tool, either from the main menu (raspberry Pi icon inside a square) or in terminal mode with sudo raspi-config (choose option 1 = Change User Password, and set the password you will use for your SSH session; then choose option 5 = Interfacing Options, look for SSH).

How to use SSH?

If you have a Windows PC, this will allow you to open a Command prompt, Power Shell, or Terminal window (the selection you have available depends on certain settings). If you have a Linux or Mac device, open Terminal. Next, assuming your Pi is running, on whatever other device you have on the same local network, type ssh pi@raspberrypi to get access to default user in your Pi.

(As an alternative for Windows operating system, you can install PuTTY, and use that. PuTTY software (an SSH client for Windows) can be downloaded from https://www.putty.org/).

When you are using a terminal, some of the key combinations, or mouse actions, will be different to those that work when using the computer normally. You will need to check your terminal application, and also whatever you are running on your Pi; but you might find the mouse can't affect cursor location, the mouse might be needed to select text, the left click might copy what is selected, and the right click might paste what is in clipboard at current cursor position.

Alternative to SSH

While SSH gives you access to command lines, and lets you use sudo to overcome the fact that the default user does not have root rights, there might be some times when you are operating your Pi in a headless state (without keyboard or monitor) yet you want to explore its graphical user interface. See this tutorial for one way to do this.

Headless Wireless Network set up

If you don't connect a keyboard and monitor to your Raspberry Pi, you can't set up the wireless network configuration on it.

You can use the SSH approach described above to access the Raspi-config tool and in that do the necessary configuration.

There is one further, complicated, way to set up the wireless configuration so that the wireless network will work when you first boot up your Raspberry Pi. If you have brought the Zero model, that does not allow Ethernet connection, you might decide to follow this complex approach that involves creating a text file in the boot partition of your micro-SD card, and store it in the boot directory on your micro-SD card with a file name wpa_supplicant.conf.

A note of caution here, it is easy to make mistakes, and you may find this does not work. It is presented here just to cover all options, to use this does require some technical skill, a novice will be better off avoiding this.

Ensuring you are using a text editor that won't add any unwanted control characters, add the following text using UTF-8 encoding:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=GB

network={
    ssid="YourNetwork"
    psk="YourNetworkPassword"
    key_mgmt=WPA-PSK
}
  • Obviously, if you are not in United Kingdom, you will replace GB by the country code that applies to you.
  • Within the first set of quotes, replace YourNetwork by whatever Service Set IDentifier (SSID) is used for your wireless network.
    • You may have typed this into your mobile phone.
    • It may be shown on a card that slips into a slot on your hub or router, but you may have changed it from that initial setting.
    • Whatever it is, and it can be up to 32 characters (letters, numbers, and symbols), type it within the double quotes.
    • Some routers come with a default SSID that is the manufacturer's name, if left unchanged it might conflict with a neighbour, so it is left to you to pick a SSID that is unique to you using up to 32 characters to personalise it.
  • Within the next set of quotes, which relate to the key (or password) that protects access to your network, replace YourNetworkPassword by whatever Pre-Shared-Key (password) is used for your wireless network.
    • You will have typed this into your mobile phone, so that can automatically connect to your network.
    • In this case, you should have changed it (for security reasons) from whatever was shown as the initial password on the card that slips into a slot on your hub or router (possibly all you have done is add a prefix or suffix that means something to you).
  • Most wireless networks will use Wi-Fi Protected Access (WPA) or (from 2006) Wi-Fi Protected Access II (WPA2) protocols, so WPA-PSK is correct for you.
    • Note that your Pi is only able to use these protocols.
    • The earlier Wired Equivalent Privacy (WEP) was officially withdrawn in 2004 as too easy to crack, so it is not supported on a new Pi.

Should you wish to set up your Pi with several network definitions, please see Notes by ExperiMentor (a contributor, in Switzerland, to the Cumulus support forum).