Skip to content

Latest commit

 

History

History
150 lines (110 loc) · 4.42 KB

CreateService.md

File metadata and controls

150 lines (110 loc) · 4.42 KB

Creating Your Own Offline Voice Assistant Edge Service for Raspberry Pi

Follow the steps in this page to create your own Offline Voice Assistant Horizon edge service.

Preconditions for Developing Your Own Service

  1. If you have not already done so, complete the steps in these sections:
  1. 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
  1. 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
  1. 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.

  1. Install git and jq:

On Linux:

sudo apt install -y git jq

On macOS:

brew install git jq
  1. Clone this git repo:
cd ~   # or wherever you want
git clone git@github.com:open-horizon/examples.git
  1. 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
  1. 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
  1. Set the values in horizon/hzn.json to your own values.

  2. Edit processtext.sh however you want.

    • Note: This service is a shell script for brevity, but you can write your service in any language.
  3. Build the processtext docker image:

make
  1. Test the service by having Horizon start it locally:
hzn dev service start -S
  1. Check that the container is running:
sudo docker ps 
  1. See the processtext service output:
tail -f /var/log/syslog | grep OVA
  1. See the environment variables Horizon passes into your service container:
docker inspect $(docker ps -q --filter name=ibm.processtext) | jq '.[0].Config.Env'
  1. Stop the service:
hzn dev service stop
  1. 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
  1. 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
  1. Register your edge node with Horizon to use your deployment pattern (substitute <service-name> for the SERVICE_NAME you specified in horizon/hzn.json):
hzn register -p pattern-<service-name>-$(hzn architecture) -f horizon/userinput.json
  1. 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 and agreement_execution_start_time fields are filled in:
hzn agreement list
  1. Once the agreement is made, list the docker container edge service that has been started as a result:
sudo docker ps
  1. See the processtext service output:

    tail -f /var/log/syslog | grep OVA
    
  2. Unregister your edge node, stopping the processtext service:

hzn unregister -f