Thatβs what it is, what is the problem? Create a DS2413 actuator and they one of the channels of the discovered DS2413.
I know but DS2413 is additional hardware there is not included in the expansion board, right?
BR Ken
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β
Thanks Richard
Added notes for new release.
Whatβs the simplest way to check your current firmware version?
Service page, spark widget.
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
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!
Added release notes.