Follow the steps in this page to create your own Offline Voice Assistant Horizon edge service.
- If you have not already done so, complete the steps in these sections:
- Preconditions for Using the Offline Voice Assistant Example Edge Service
- Using the Offline Voice Assistant Example Edge Service with Deployment Pattern
- If you are using macOS as your development host, configure Docker to store credentials in
~/.docker
:
- Open the Docker Preferences dialog
- Uncheck Securely store Docker logins in macOS keychain
- If you do not already have a docker ID, obtain one at https://hub.docker.com/ . Log in to Docker Hub using your Docker Hub ID:
export DOCKER_HUB_ID="<dockerhubid>"
echo "<dockerhubpassword>" | docker login -u $DOCKER_HUB_ID --password-stdin
Output example:
WARNING! Your password will be stored unencrypted in /home/pi/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
- Create a cryptographic signing key pair. This enables you to sign services when publishing them to the exchange. This step only needs to be done once.
hzn key create "<x509-org>" "<x509-cn>"
where <x509-org>
is your company name, and <x509-cn>
is typically set to your email address.
- Install
git
andjq
:
On Linux:
sudo apt install -y git jq
On macOS:
brew install git jq
- Clone this git repo:
cd ~ # or wherever you want
git clone git@github.com:open-horizon/examples.git
- Checkout the branch that corresponds to your horizon CLI version. To get the branch name, remove the last bullet and any numbers after it, then prepend a
v
at the beginning:
$ hzn version
Horizon CLI version: 2.27.0-173 # Branch name in this example is v2.27
Horizon Agent version: 2.27.0-173
$ git checkout v2.27
- Copy the
processtext
dir to where you will start development of your new service:
cp -a examples/edge/services/processtext ~/myservice # or wherever
cd ~/myservice
-
Set the values in
horizon/hzn.json
to your own values. -
Edit
processtext.sh
however you want.- Note: This service is a shell script for brevity, but you can write your service in any language.
-
Build the processtext docker image:
make
- Test the service by having Horizon start it locally:
hzn dev service start -S
- Check that the container is running:
sudo docker ps
- See the processtext service output:
tail -f /var/log/syslog | grep OVA
- See the environment variables Horizon passes into your service container:
docker inspect $(docker ps -q --filter name=ibm.processtext) | jq '.[0].Config.Env'
- Stop the service:
hzn dev service stop
- Have Horizon push your docker image to your registry and publish your service in the Horizon Exchange and see it there:
hzn exchange service publish -f horizon/service.definition.json
hzn exchange service list
- Publish your edge node deployment pattern in the Horizon Exchange and see it there:
hzn exchange pattern publish -f horizon/pattern.json
hzn exchange pattern list
- Register your edge node with Horizon to use your deployment pattern (substitute
<service-name>
for theSERVICE_NAME
you specified inhorizon/hzn.json
):
hzn register -p pattern-<service-name>-$(hzn architecture) -f horizon/userinput.json
- The edge device will make an agreement with one of the Horizon agreement bots (this typically takes about 15 seconds). Repeatedly query the agreements of this device until the
agreement_finalized_time
andagreement_execution_start_time
fields are filled in:
hzn agreement list
- Once the agreement is made, list the docker container edge service that has been started as a result:
sudo docker ps
-
See the processtext service output:
tail -f /var/log/syslog | grep OVA
-
Unregister your edge node, stopping the processtext service:
hzn unregister -f