[Old release notes topic]

That’s what it is, what is the problem? Create a DS2413 actuator and they one of the channels of the discovered DS2413.

@Bob_Steers, Much clearer on the firmware requirements. thanks for the great work.

I know but DS2413 is additional hardware there is not included in the expansion board, right?
BR Ken

@Ken_Vejbaek

There is no need for additional hardware if you have the SSR Expansion board.

You will see the DS2413 Block and you can create two ActuatorDS2413, I have two SSR expansion boards and both are in use.

You can then create a ActuratorDS2413 for each channel A or B


This one is on channel β€˜B’

2 Likes

Thanks Richard :smiley:

1 Like

Added notes for new release.

What’s the simplest way to check your current firmware version?

Service page, spark widget.

1 Like

Had some trouble applying the last update (2019-05-20).

After repeating the update command it seemed to work (didn’t notice anything unusual yet).

Command results:

pi@raspberrypi:~/brewblox $ brewblox-ctl update
Do you want to update your Spark controller firmware? [Y/n]
n
The following shell commands will be used: 

	 docker-compose down
	 docker-compose pull
	 sudo /usr/bin/python3 -m pip install -U brewblox-ctl
	 docker rm ctl-lib 2> /dev/null || true
	 docker pull brewblox/brewblox-ctl-lib:rpi-edge || true
	 docker create --name ctl-lib brewblox/brewblox-ctl-lib:rpi-edge
	 rm -rf ./brewblox_ctl_lib 2> /dev/null || true 
	 docker cp ctl-lib:/brewblox_ctl_lib ./
	 docker rm ctl-lib
	 /usr/bin/python3 -m brewblox_ctl migrate

Press ENTER to continue, Ctrl+C to cancel

Running command: 
	 docker-compose down 

Stopping brewblox_history_1   ... done
Stopping brewblox_spark-one_1 ... done
Stopping brewblox_influx_1    ... done
Stopping brewblox_datastore_1 ... done
Stopping brewblox_mdns_1      ... done
Stopping brewblox_traefik_1   ... done
Stopping brewblox_ui_1        ... done
Stopping brewblox_eventbus_1  ... done
Removing brewblox_history_1   ... done
Removing brewblox_spark-one_1 ... done
Removing brewblox_influx_1    ... done
Removing brewblox_datastore_1 ... done
Removing brewblox_mdns_1      ... done
Removing brewblox_traefik_1   ... done
Removing brewblox_ui_1        ... done
Removing brewblox_eventbus_1  ... done
Removing network brewblox_default

Running command: 
	 docker-compose pull 

Pulling traefik   ... done
Pulling datastore ... done
Pulling mdns      ... done
Pulling ui        ... done
Pulling influx    ... done
Pulling eventbus  ... done
Pulling history   ... done
Pulling spark-one ... done

Running command: 
	 sudo /usr/bin/python3 -m pip install -U brewblox-ctl 

Requirement already up-to-date: brewblox-ctl in /usr/local/lib/python3.5/dist-packages
Requirement already up-to-date: click in /usr/local/lib/python3.5/dist-packages (from brewblox-ctl)
Collecting python-dotenv[cli] (from brewblox-ctl)
  Downloading https://files.pythonhosted.org/packages/df/e2/8acf58886c3f013290eb2e17c912fd989d28a61759927be2a28e0f4c1687/python_dotenv-0.10.2-py2.py3-none-any.whl
Collecting requests (from brewblox-ctl)
  Downloading https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl (57kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 61kB 177kB/s 
Exception:
Traceback (most recent call last):
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 391, in _make_request
    six.raise_from(e, None)
  File "<string>", line 2, in raise_from
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 387, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
    response.begin()
  File "/usr/lib/python3.5/http/client.py", line 297, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.5/http/client.py", line 266, in _read_status
    raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/lib/python3/dist-packages/pip/commands/install.py", line 353, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python3/dist-packages/pip/wheel.py", line 749, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 487, in _prepare_file
    req_to_install, finder)
  File "/usr/lib/python3/dist-packages/pip/req/req_set.py", line 428, in _check_skip_installed
    req_to_install, upgrade_allowed)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/usr/lib/python3/dist-packages/pip/index.py", line 568, in _get_pages
    page = self._get_page(location)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/usr/lib/python3/dist-packages/pip/index.py", line 792, in get_page
    "Cache-Control": "max-age=600",
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 501, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/pip/download.py", line 386, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/usr/share/python-wheels/CacheControl-0.11.7-py2.py3-none-any.whl/cachecontrol/adapter.py", line 47, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/usr/share/python-wheels/requests-2.12.4-py2.py3-none-any.whl/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 643, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
Traceback (most recent call last):
  File "/usr/local/bin/brewblox-ctl", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/dist-packages/brewblox_ctl/__main__.py", line 81, in main
    cli()
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.5/dist-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/pi/brewblox/brewblox_ctl_lib/commands.py", line 74, in update
    utils.run_all(shell_commands)
  File "/usr/local/lib/python3.5/dist-packages/brewblox_ctl/utils.py", line 130, in run_all
    return [run(cmd) for cmd in shell_cmds]
  File "/usr/local/lib/python3.5/dist-packages/brewblox_ctl/utils.py", line 130, in <listcomp>
    return [run(cmd) for cmd in shell_cmds]
  File "/usr/local/lib/python3.5/dist-packages/brewblox_ctl/utils.py", line 124, in run
    return check_call(shell_cmd, shell=True, stderr=STDOUT)
  File "/usr/lib/python3.5/subprocess.py", line 271, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'sudo /usr/bin/python3 -m pip install -U brewblox-ctl' returned non-zero exit status 2



----------------------------------------


pi@raspberrypi:~/brewblox $ brewblox-ctl update
Do you want to update your Spark controller firmware? [Y/n]
n
The following shell commands will be used: 

	 docker-compose down
	 docker-compose pull
	 sudo /usr/bin/python3 -m pip install -U brewblox-ctl
	 docker rm ctl-lib 2> /dev/null || true
	 docker pull brewblox/brewblox-ctl-lib:rpi-edge || true
	 docker create --name ctl-lib brewblox/brewblox-ctl-lib:rpi-edge
	 rm -rf ./brewblox_ctl_lib 2> /dev/null || true 
	 docker cp ctl-lib:/brewblox_ctl_lib ./
	 docker rm ctl-lib
	 /usr/bin/python3 -m brewblox_ctl migrate

Press ENTER to continue, Ctrl+C to cancel

Running command: 
	 docker-compose down 

Removing network brewblox_default
WARNING: Network brewblox_default not found.

Running command: 
	 docker-compose pull 

Pulling mdns      ... done
Pulling datastore ... done
Pulling eventbus  ... done
Pulling spark-one ... done
Pulling influx    ... done
Pulling history   ... done
Pulling ui        ... done
Pulling traefik   ... done

Running command: 
	 sudo /usr/bin/python3 -m pip install -U brewblox-ctl 

Requirement already up-to-date: brewblox-ctl in /usr/local/lib/python3.5/dist-packages
Collecting requests (from brewblox-ctl)
  Using cached https://files.pythonhosted.org/packages/51/bd/23c926cd341ea6b7dd0b2a00aba99ae0f828be89d72b2190f27c11d4b7fb/requests-2.22.0-py2.py3-none-any.whl
Requirement already up-to-date: click in /usr/local/lib/python3.5/dist-packages (from brewblox-ctl)
Collecting python-dotenv[cli] (from brewblox-ctl)
  Using cached https://files.pythonhosted.org/packages/df/e2/8acf58886c3f013290eb2e17c912fd989d28a61759927be2a28e0f4c1687/python_dotenv-0.10.2-py2.py3-none-any.whl
Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests->brewblox-ctl)
  Downloading https://files.pythonhosted.org/packages/e6/60/247f23a7121ae632d62811ba7f273d0e58972d75e58a94d329d51550a47d/urllib3-1.25.3-py2.py3-none-any.whl (150kB)
    100% |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ| 153kB 1.0MB/s 
Requirement already up-to-date: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.5/dist-packages (from requests->brewblox-ctl)
Requirement already up-to-date: idna<2.9,>=2.5 in /usr/local/lib/python3.5/dist-packages (from requests->brewblox-ctl)
Requirement already up-to-date: certifi>=2017.4.17 in /usr/local/lib/python3.5/dist-packages (from requests->brewblox-ctl)
Installing collected packages: urllib3, requests, python-dotenv
  Found existing installation: urllib3 1.24.3
    Uninstalling urllib3-1.24.3:
      Successfully uninstalled urllib3-1.24.3
  Found existing installation: requests 2.21.0
    Uninstalling requests-2.21.0:
      Successfully uninstalled requests-2.21.0
  Found existing installation: python-dotenv 0.10.1
    Uninstalling python-dotenv-0.10.1:
      Successfully uninstalled python-dotenv-0.10.1
Successfully installed python-dotenv-0.10.2 requests-2.22.0 urllib3-1.25.3

Running command: 
	 docker rm ctl-lib 2> /dev/null || true 


Running command: 
	 docker pull brewblox/brewblox-ctl-lib:rpi-edge || true 

rpi-edge: Pulling from brewblox/brewblox-ctl-lib
Digest: sha256:08514409858876d65ae573aa34168d52f76e2be9a8c3ada247aa7e02f2f0bfac
Status: Image is up to date for brewblox/brewblox-ctl-lib:rpi-edge

Running command: 
	 docker create --name ctl-lib brewblox/brewblox-ctl-lib:rpi-edge 

706b985e7b504d45399f94f5713d94321f46dbfddd4e48f238aba15a17d54e9f

Running command: 
	 rm -rf ./brewblox_ctl_lib 2> /dev/null || true  


Running command: 
	 docker cp ctl-lib:/brewblox_ctl_lib ./ 


Running command: 
	 docker rm ctl-lib 

ctl-lib

Running command: 
	 /usr/bin/python3 -m brewblox_ctl migrate 

The following shell commands will be used: 

	 docker-compose down --remove-orphans
	 docker-compose up -d
	 /usr/bin/python3 -m brewblox_ctl http wait https://localhost:443/history/ping
	 /usr/bin/python3 -m brewblox_ctl http post https://localhost:443/history/query/configure
	 /usr/bin/python3 -m dotenv.cli --quote never set BREWBLOX_CFG_VERSION 0.2.1

Press ENTER to continue, Ctrl+C to cancel

Running command: 
	 docker-compose down --remove-orphans 

Removing network brewblox_default
WARNING: Network brewblox_default not found.

Running command: 
	 docker-compose up -d 

Creating network "brewblox_default" with the default driver
Creating brewblox_datastore_1 ... done
Creating brewblox_traefik_1   ... done
Creating brewblox_mdns_1      ... done
Creating brewblox_influx_1    ... done
Creating brewblox_ui_1        ... done
Creating brewblox_eventbus_1  ... done
Creating brewblox_history_1   ... done
Creating brewblox_spark-one_1 ... done

Running command: 
	 /usr/bin/python3 -m brewblox_ctl http wait https://localhost:443/history/ping 

Connecting https://localhost:443/history/ping, attempt 1/60
Connecting https://localhost:443/history/ping, attempt 2/60
Connecting https://localhost:443/history/ping, attempt 3/60
Connecting https://localhost:443/history/ping, attempt 4/60
Connecting https://localhost:443/history/ping, attempt 5/60
Success!

Running command: 
	 /usr/bin/python3 -m brewblox_ctl http post https://localhost:443/history/query/configure 

{"results": [{"statement_id": 0, "series": [{"name": "databases", "columns": ["name"], "values": [["brewblox"], ["_internal"]]}]}, {"statement_id": 1, "series": [{"columns": ["name", "duration", "shardGroupDuration", "replicaN", "default"], "values": [["autogen", "24h0m0s", "6h0m0s", 1, true], ["downsample_1m", "0s", "168h0m0s", 1, false], ["downsample_10m", "0s", "168h0m0s", 1, false], ["downsample_1h", "0s", "672h0m0s", 1, false], ["downsample_6h", "0s", "672h0m0s", 1, false]]}]}, {"statement_id": 2, "series": [{"name": "brewblox", "columns": ["name", "query"], "values": [["cq_downsample_1m", "CREATE CONTINUOUS QUERY cq_downsample_1m ON brewblox BEGIN SELECT mean(*) AS m, sum(/(m_)* Combined Influx points/) AS m INTO brewblox.downsample_1m.:MEASUREMENT FROM brewblox.autogen./.*/ GROUP BY time(1m), * END"], ["cq_downsample_10m", "CREATE CONTINUOUS QUERY cq_downsample_10m ON brewblox BEGIN SELECT mean(*) AS m, sum(/(m_)* Combined Influx points/) AS m INTO brewblox.downsample_10m.:MEASUREMENT FROM brewblox.downsample_1m./.*/ GROUP BY time(10m), * END"], ["cq_downsample_1h", "CREATE CONTINUOUS QUERY cq_downsample_1h ON brewblox BEGIN SELECT mean(*) AS m, sum(/(m_)* Combined Influx points/) AS m INTO brewblox.downsample_1h.:MEASUREMENT FROM brewblox.downsample_10m./.*/ GROUP BY time(1h), * END"], ["cq_downsample_6h", "CREATE CONTINUOUS QUERY cq_downsample_6h ON brewblox BEGIN SELECT mean(*) AS m, sum(/(m_)* Combined Influx points/) AS m INTO brewblox.downsample_6h.:MEASUREMENT FROM brewblox.downsample_1h./.*/ GROUP BY time(6h), * END"]]}, {"name": "_internal", "columns": ["name", "query"]}]}]}

Running command: 
	 /usr/bin/python3 -m dotenv.cli --quote never set BREWBLOX_CFG_VERSION 0.2.1 

BREWBLOX_CFG_VERSION=0.2.1

Looks like a server-side hiccup while downloading updates.

Thanks for letting us know. We’ll keep an eye on it, see if it’s more than a freak error.

Huh, that makes sense, my network isn’t in its best days. I wouldn’t be surprised if it’s something on my side.

Added release notes.

Added release notes.

They say the only dumb question is the one not asked, so here is mine. I use my BrewPi V2 (+RPi) for fridge control exclusively, I use an expansion board with two SSRs etc, are we at the stage yet where I can β€œdaisy chain” another one or two fridges from that board into another expansion board?

Thanks

Yes you can do that.

Thanks Elco,

Looks like a visit to your shop then :wink:

So being a little impatient, now that I have ordered two expansion boards and associated sensors, when installed will it be a case of discovering them, unique naming and associating new pid’s etc? Do I need to allocate them into a new group? Or is there a shortcut of copying my existing block relations into a new group and configuring to the new chambers?

Thanks again

Dave.

Right now, the closest thing we have to a shortcut for cloning multiple blocks is to export the service blocks, and editing the JSON file. You can also run the fermentation setup again to generate additional preconfigured blocks. Choose a new name prefix, and it shouldn’t bother existing blocks.

Unless you want to activate/inactivate them all at once, you don’t need to assign them into a separate group.

Thanks Bob, piece if cake then! :wink:

Added release notes.