BrewBlox install

Thanx. For BrewPi I used Chromium for communication with the process (IP 0.0.0.0). Can I do it simpler? What do you guys do?

For using brewblox-ctl, it’s easiest to log in to your Pi using SSH. That way you don’t need to connect a keyboard/monitor to your Pi.

To use the UI, get the Pi IP address, and go there in the browser on your computer.

You can get the Pi IP address externally by installing Fing on your phone.
If you’re already logged in on the Pi, you can get its IP address by running:

ifconfig | grep 192

Example output:

pi@washberry:~ $ ifconfig | grep 192
        inet 192.168.2.8  netmask 255.255.255.0  broadcast 192.168.2.255

here 192.168.2.8 is the IP address.

Yepp, a great step for me, perhaps a small step for mankind.

When I entered PTTY I needed the IP address. I found it on Fing. I suggest that you mention the IP address procedure on your installation instruction.

When I got to the IP site, I get a heavy security warning. Should I just forget it?

That’s a good idea - I’ll add some instructions on how to find the Pi IP.

Yes, you can click on more info -> continue to get past the security warning.
The warning is because it’s using a self-signed certificate for HTTPS. You can’t get officially signed SSL certificates if your website is not accessible from the internet. (and you don’t want that here)

Yepp, and what you just thought me could be entered on the instructions as well: I can enter the IP in my PC browser.
Previously, on BrewPi, I used the Chromium browser end TeamViewer for remote. I think I just got a push in an improved direction.

The security warning is explained in the instructions (under step 7), but I’ll make it somewhat more explicit about IP addresses.

Yes, I agree. The security warnings are very well explained. I have been running in my own small circles here…
I think I am trough todays problems and ready to go on with creating a fermentation process.
I thank you very much for your patience with me.
Cheers :nerd_face:

1 Like

I hope im not in the wrong category here: but im having issues with basically starting over and reinstalling docker and getting BrewBlox up.

pi@Brewpi:~/brewblox $ brewblox-ctl up
No brewblox-ctl extensions found in current directory

Running command:
docker-compose up -d --remove-orphans

Starting brewblox_mdns_1 … error
Starting brewblox_traefik_1 …
Starting brewblox_eventbus_1 …
Starting brewblox_ui_1 …
Starting brewblox_datastore_1 …
Starting brewblox_influx_1 …
Starting brewblox_ui_1 … error
ERROR: for brewblox_mdns_1 Cannot start service mdns: failed to listen to abstract unix socket “/containerd-shim/moby/6bd6cb88cb7e025f95dff370fe6db5623701484072ff28efd23d04da0bf26cc6/shim.sock”: listen unix /containerd-shim/moby/6bd6Starting brewblox_eventbus_1 … error

ERROR: for brewblox_ui_1 Cannot start service ui: failed to listen to abstract unix socket “/containerd-shim/moby/eea01487d32e69be380bc3f0294bd2fa26d7ddfe12001936350b3e76c36b62f1/shim.sock”: listen unix /containerd-shim/moby/eea01487d32e69be380bc3f0294bd2fa26d7ddfe12001936350b3e76c36b62f1/shim.sock: bind: address already in use: unknown

Starting brewblox_datastore_1 … error
oby/af89fd40cf825ceefbb3f339915f875a3ebcf54ac0f6093bed05ae24ee12cffe/shim.sock: bind: address already in use: unknown

Starting brewblox_traefik_1 … error
Starting brewblox_influx_1 … error

ERROR: for brewblox_influx_1 Cannot start service influx: failed to listen to abstract unix socket “/containerd-shim/moby/30e266a8e5fcd1d6b742ab409e0b64bd53779c546b6cb00c727d5c5903ec0f8c/shim.sock”: listen unix /containerd-shim/moby/30e266a8e5fcd1d6b742ab409e0b64bd53779c546b6cb00c727d5c5903ec0f8c/shim.sock: bind: address already in use: unknown

ERROR: for brewblox_traefik_1 Cannot start service traefik: failed to listen to abstract unix socket “/containerd-shim/moby/309790c55d65f0c82a3e80ededef43923e10243a47d16b0340e48cbba4a25b69/shim.sock”: listen unix /containerd-shim/moby/309790c55d65f0c82a3e80ededef43923e10243a47d16b0340e48cbba4a25b69/shim.sock: bind: address already in use: unknown

ERROR: for mdns Cannot start service mdns: failed to listen to abstract unix socket “/containerd-shim/moby/6bd6cb88cb7e025f95dff370fe6db5623701484072ff28efd23d04da0bf26cc6/shim.sock”: listen unix /containerd-shim/moby/6bd6cb88cb7e025f95dff370fe6db5623701484072ff28efd23d04da0bf26cc6/shim.sock: bind: address already in use: unknown

ERROR: for traefik Cannot start service traefik: failed to listen to abstract unix socket “/containerd-shim/moby/309790c55d65f0c82a3e80ededef43923e10243a47d16b0340e48cbba4a25b69/shim.sock”: listen unix /containerd-shim/moby/309790c55d65f0c82a3e80ededef43923e10243a47d16b0340e48cbba4a25b69/shim.sock: bind: address already in use: unknown

ERROR: for ui Cannot start service ui: failed to listen to abstract unix socket “/containerd-shim/moby/eea01487d32e69be380bc3f0294bd2fa26d7ddfe12001936350b3e76c36b62f1/shim.sock”: listen unix /containerd-shim/moby/eea01487d32e69be380bc3f0294bd2fa26d7ddfe12001936350b3e76c36b62f1/shim.sock: bind: address already in use: unknown

ERROR: for eventbus Cannot start service eventbus: failed to listen to abstract unix socket “/containerd-shim/moby/af89fd40cf825ceefbb3f339915f875a3ebcf54ac0f6093bed05ae24ee12cffe/shim.sock”: listen unix /containerd-shim/moby/af89fd40cf825ceefbb3f339915f875a3ebcf54ac0f6093bed05ae24ee12cffe/shim.sock: bind: address already in use: unknown

ERROR: for datastore Cannot start service datastore: failed to listen to abstract unix socket “/containerd-shim/moby/76afcf03f05e533d2c0396ce3dc1aed6d72f7228b44a2e5b508f463e76f46acd/shim.sock”: listen unix /containerd-shim/moby/76afcf03f05e533d2c0396ce3dc1aed6d72f7228b44a2e5b508f463e76f46acd/shim.sock: bind: address already in use: unknown

ERROR: for influx Cannot start service influx: failed to listen to abstract unix socket “/containerd-shim/moby/30e266a8e5fcd1d6b742ab409e0b64bd53779c546b6cb00c727d5c5903ec0f8c/shim.sock”: listen unix /containerd-shim/moby/30e266a8e5fcd1d6b742ab409e0b64bd53779c546b6cb00c727d5c5903ec0f8c/shim.sock: bind: address already in use: unknown
ERROR: Encountered errors while bringing up the project.
Traceback (most recent call last):
File “/usr/local/bin/brewblox-ctl”, line 11, in
load_entry_point(‘brewblox-ctl==0.7.0’, ‘console_scripts’, ‘brewblox-ctl’)()
File “/usr/local/lib/python3.6/site-packages/brewblox_ctl/main.py”, line 81, in main
cli()
File “/usr/local/lib/python3.6/site-packages/click/core.py”, line 764, in call
return self.main(*args, **kwargs)
File “/usr/local/lib/python3.6/site-packages/click/core.py”, line 717, in main
rv = self.invoke(ctx)
File “/usr/local/lib/python3.6/site-packages/click/core.py”, line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File “/usr/local/lib/python3.6/site-packages/click/core.py”, line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File “/usr/local/lib/python3.6/site-packages/click/core.py”, line 555, in invoke
return callback(*args, **kwargs)
File “/usr/local/lib/python3.6/site-packages/brewblox_ctl/commands.py”, line 42, in up
utils.run_all(shell_commands)
File “/usr/local/lib/python3.6/site-packages/brewblox_ctl/utils.py”, line 130, in run_all
return [run(cmd) for cmd in shell_cmds]
File “/usr/local/lib/python3.6/site-packages/brewblox_ctl/utils.py”, line 130, in
return [run(cmd) for cmd in shell_cmds]
File “/usr/local/lib/python3.6/site-packages/brewblox_ctl/utils.py”, line 124, in run
return check_call(shell_cmd, shell=True, stderr=STDOUT)
File “/usr/local/lib/python3.6/subprocess.py”, line 291, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command ‘docker-compose up -d --remove-orphans’ returned non-zero exit status 1.
pi@Brewpi:~/brewblox $

If you want to do a clean install, I recommend removing all brewblox components, and then doing a clean install.

To remove the brewblox dir, stop all containers, and remove brewblox-ctl:

cd ~
sudo rm -rf brewblox
docker kill $(docker ps -aq)
sudo pip3 uninstall brewblox-ctl
pip3 uninstall brewblox-ctl

ok ran all that and got to here:

pi@Brewpi : ~ $ pip3 install --user setuptools brewblox-ctl

Requirement already satisfied: setuptools in /usr/local/lib/python3.6/site-packages

Requirement already satisfied: brewblox-ctl in ./.local/lib/python3.6/site-packages

Requirement already satisfied: python-dotenv[cli]<0.14.0,>=0.13.0 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: zeroconf<0.29.0,>=0.28.1 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: click<8.0.0,>=7.1.1 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: pyyaml<6.0.0,>=5.3.1 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: docker<5.0.0,>=4.3.1 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: requests<3.0.0,>=2.23.0 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: configobj<6.0.0,>=5.0.6 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: docker-compose<2.0.0,>=1.26.2 in ./.local/lib/python3.6/site-packages (from brewblox-ctl)

Requirement already satisfied: ifaddr>=0.1.7 in ./.local/lib/python3.6/site-packages (from zeroconf<0.29.0,>=0.28.1->brewblox-ctl)

Requirement already satisfied: websocket-client>=0.32.0 in ./.local/lib/python3.6/site-packages (from docker<5.0.0,>=4.3.1->brewblox-ctl)

Requirement already satisfied: six>=1.4.0 in ./.local/lib/python3.6/site-packages (from docker<5.0.0,>=4.3.1->brewblox-ctl)

Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in ./.local/lib/python3.6/site-packages (from requests<3.0.0,>=2.23.0->brewblox-ctl)

Requirement already satisfied: idna<3,>=2.5 in ./.local/lib/python3.6/site-packages (from requests<3.0.0,>=2.23.0->brewblox-ctl)

Requirement already satisfied: certifi>=2017.4.17 in ./.local/lib/python3.6/site-packages (from requests<3.0.0,>=2.23.0->brewblox-ctl)

Requirement already satisfied: chardet<4,>=3.0.2 in ./.local/lib/python3.6/site-packages (from requests<3.0.0,>=2.23.0->brewblox-ctl)

Requirement already satisfied: docopt<1,>=0.6.1 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: distro<2,>=1.5.0 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: jsonschema<4,>=2.5.1 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: texttable<2,>=0.9.0 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: cached-property<2,>=1.2.0 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: dockerpty<1,>=0.4.1 in ./.local/lib/python3.6/site-packages (from docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: pyrsistent>=0.14.0 in ./.local/lib/python3.6/site-packages (from jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: attrs>=17.4.0 in ./.local/lib/python3.6/site-packages (from jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: importlib-metadata; python_version < “3.8” in ./.local/lib/python3.6/site-packages (from jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

Requirement already satisfied: zipp>=0.5 in ./.local/lib/python3.6/site-packages (from importlib-metadata; python_version < “3.8”->jsonschema<4,>=2.5.1->docker-compose<2.0.0,>=1.26.2->brewblox-ctl)

You are using pip version 9.0.1, however version 20.2.2 is available.

You should consider upgrading via the ‘pip install --upgrade pip’ command.

pi@Brewpi : ~ $ brewblox-ctl install

bash: brewblox-ctl: command not found

pi@Brewpi : ~ $ exec $SHELL --login

SSH is enabled and the default password for the ‘pi’ user has not been changed.

This is a security risk - please login as the ‘pi’ user and type ‘passwd’ to set a new password.

pi@Brewpi : ~ $ brewblox-ctl install

bash: brewblox-ctl: command not found

pi@Brewpi : ~ $

What is the output from

echo $PATH

Can you run

~/.local/bin/brewblox-ctl --help

If you can run brewblox-ctl from the abs path, you may need to extend your path.

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
exec $SHELL --login

ok here you go:
pi@Brewpi:~ $ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
pi@Brewpi:~ $ ~/.local/bin/brewblox-ctl --help
Usage: brewblox-ctl [OPTIONS] COMMAND [ARGS]…

The Brewblox management tool.

It can be used to create and control Brewblox configurations. More
commands are available when used in a Brewblox installation directory.

If the command you’re looking for was not found, please check your current
directory.

By default, Brewblox is installed to ~/brewblox.

Example calls:

  brewblox-ctl install
  brewblox-ctl --quiet down
  brewblox-ctl --verbose up

Options:
-y, --yes Do not prompt to confirm commands.
-d, --dry, --dry-run Dry run mode: echo commands instead of running them.
-q, --quiet Show less detailed output.
-v, --verbose Show more detailed output.
–color / --no-color Format messages with unicode color codes.
–help Show this message and exit.

Commands:
up Start all services.
down Stop all services.
restart Stop and start all services.
follow Show logs for one or more services.
kill Stop and remove all containers on this computer.
install Create Brewblox directory; install system dependencies;…
flash Flash firmware on Spark.
wifi DISABLED: Configure Spark Wifi settings.
particle Start a Docker container with access to the Particle CLI.
disable-ipv6 Disable IPv6 support on the host machine.
env List, get, or set env values.
pi@Brewpi:~ $ echo ‘export PATH="$HOME/.local/bin:$PATH"’ >> ~/.bashrc
pi@Brewpi:~ $ exec $SHELL --login

SSH is enabled and the default password for the ‘pi’ user has not been changed.
This is a security risk - please login as the ‘pi’ user and type ‘passwd’ to set a new password.

pi@Brewpi:~ $

If you now call brewblox-ctl, does it work?

yes - but now I have this:

pi@Brewpi:~/brewblox $ brewblox-ctl up
ERROR:
Can’t find a suitable configuration file in this directory or any
parent. Are you in the right directory?

    Supported filenames: docker-compose.yml, docker-compose.yaml

Command ‘docker-compose up -d --remove-orphans’ returned non-zero exit status 1.
pi@Brewpi:~/brewblox $ ls
brewblox_ctl_lib

but the install process completed without errors…

pi@Brewpi : ~/brewblox/brewblox $ ls

pi@Brewpi : ~/brewblox/brewblox $ pwd

/home/pi/brewblox/brewblox

pi@Brewpi : ~/brewblox/brewblox $

After install, you need to run brewblox-ctl setup in the ~/brewblox dir.

ok sorry slow bus: - ok looks like it loaded - now ill be onto the next part about asking you about the blocks for my setup - I should start a new post about my setup with pictures for the diagram layout - would that be helpful for you and others to reference to help me troubleshoot? in case something is missing etc.?

You can get started with one of the wizards. Feel free to ask if anything is still missing or unclear.

Hello, Thought I would follow the conversation here. I am now on the UI web page which loads fine.

I simply want the dashboard with temperatures to show. Under the Spark-one it offers me to do an update. It was strange because I got a message in the box stating that it should be up to date.

When I do it, I get the following message on the UI:
Update failed: Request failed with status code 424

If retrying the update does not work, please run 'brewblox-ctl flash'

Log messages

Started updating spark-one@/dev/ttyACM0 to version 94793741 (2020-08-24 15:59:14 +0200)

Sending update command to controller

Waiting for normal connection to close

Connecting to /dev/ttyACM0

Failed to update firmware: SerialException([Errno 6] could not open port /dev/ttyACM0: [Errno 6] No such device or address: '/dev/ttyACM0')

Scheduling service reboot

So I went to the terminal and did the following:

pi@raspberrypi:~/brewblox $ brewblox-ctl flash
Please press ENTER when your Spark is connected over USB
INFO       Pulling flasher image...
edge: Pulling from brewblox/firmware-flasher
3cfb62949d9d: Pull complete 
1ef8a3a07026: Pull complete 
b0a4348231c5: Pull complete 
df326638a053: Pull complete 
ea880123298f: Pull complete 
0859a37932b6: Pull complete 
8d15d34ed1fe: Pull complete 
472f5e1053bb: Pull complete 
3d788ca7e49b: Pull complete 
d2cd1c45fa37: Pull complete 
6a1ef8b24086: Pull complete 
Digest: sha256:59d0c8da6abd437b43ebd4b65e7921cee917c53cc58a8302794ae44eb729042d
Status: Downloaded newer image for brewblox/firmware-flasher:edge
docker.io/brewblox/firmware-flasher:edge
INFO       Stopping services...
Stopping brewblox_datastore_1 ... done
Stopping brewblox_eventbus_1  ... 
Stopping brewblox_ui_1        ... 
Stopping brewblox_influx_1    ... 
Stopping brewblox_history_1   ... 
Stopping brewblox_traefik_1   ... 
Stopping brewblox_spark-one_1 ... 

ERROR: for brewblox_influx_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)

ERROR: for brewblox_history_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)

ERROR: for brewblox_ui_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)

ERROR: for brewblox_traefik_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)

ERROR: for brewblox_spark-one_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)

ERROR: for brewblox_eventbus_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=210)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 200).
Command 'docker-compose down' returned non-zero exit status 1.
pi@raspberrypi:~/brewblox $ brewblox-ctl particle -c flash-bootloader
Please press ENTER when your Spark is connected over USB
INFO       Pulling flasher image...
edge: Pulling from brewblox/firmware-flasher
Digest: sha256:59d0c8da6abd437b43ebd4b65e7921cee917c53cc58a8302794ae44eb729042d
Status: Image is up to date for brewblox/firmware-flasher:edge
docker.io/brewblox/firmware-flasher:edge
INFO       Stopping services...
Removing brewblox_datastore_1 ... done
Removing brewblox_eventbus_1  ... done
Removing brewblox_ui_1        ... done
Removing brewblox_influx_1    ... done
Removing brewblox_history_1   ... done
Removing brewblox_traefik_1   ... done
Removing brewblox_spark-one_1 ... done
Removing network brewblox_default
INFO       Starting Particle image...
INFO       Type 'exit' and press enter to exit the shell
Flashing P1 bootloader...
Done.
sending file: bootloader-p1.bin

Flash success!

Flash success!
Done.
pi@raspberrypi:~/brewblox $ brewblox-ctl up
Creating network "brewblox_default" with the default driver
Creating brewblox_history_1 ... 
Creating brewblox_traefik_1 ... 
Creating brewblox_influx_1  ... 
Creating brewblox_spark-one_1 ... 
Creating brewblox_ui_1        ... 
Creating brewblox_eventbus_1  ... 
Creating brewblox_datastore_1 ... 

ERROR: for brewblox_history_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_spark-one_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_ui_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_influx_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_traefik_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_datastore_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for brewblox_eventbus_1  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for history  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for spark-one  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for ui  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for influx  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for traefik  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for datastore  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)

ERROR: for eventbus  UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=200)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 200).
Command 'docker-compose up -d --remove-orphans' returned non-zero exit status 1.
pi@raspberrypi:~/brewblox $ brewblox-ctl --verbose up
SHELL      docker-compose up -d --remove-orphans
brewblox_datastore_1 is up-to-date
brewblox_spark-one_1 is up-to-date
brewblox_traefik_1 is up-to-date
brewblox_ui_1 is up-to-date
brewblox_history_1 is up-to-date
brewblox_influx_1 is up-to-date
brewblox_eventbus_1 is up-to-date
pi@raspberrypi:~/brewblox $ 

I reload the web page and it still asks for an update. I do the UI update and still get the same issue.

Does brewblox-ctl log work now?

The timeout errors still appear, indicating something is suffering from hangups.

Common issue checklist:

  • How old is your SD card?
  • Did you previously run brewblox-ctl disable-ipv6?
  • Have you disabled swap memory on your Pi?

(“huh, what?” are perfectly normal answers to the last two questions)

pi@raspberrypi:~/brewblox $ brewblox-ctl log
INFO Log file: /home/pi/brewblox/brewblox.log
/bin/sh: 1: echo: echo: I/O error
Command ‘echo “BREWBLOX DIAGNOSTIC DUMP” > brewblox.log’ returned non-zero exit status 1.

The SD card is less than 2 years old.

I did not run the disable-ipv6 command.
I remember thinking about removing the swap memory but I do not think I did.

But yes, “huh, What?”