This repository is a set of Go packages that can be used to build Go-based device services for use within the EdgeX framework.
Developers can make their own device service by implementing the ProtocolDriver
interface for their desired IoT protocol, and the main
function to start the Device Service. To implement the main
function, the startup
package can be optionally leveraged, or developers can write customized bootstrap code by themselves.
Please see the provided simple device service as an example, included in this repository.
The following command line options are available
-c=<path>
--confdir=<path>
Specify an alternate configuration directory.
-p=<profile>
--profile=<profile>
Specify a profile other than default.
-f=<file>
--file=<file>
Indicates name of the local configuration file.
-i=<instace>
--instance=<instance>
Provides a service name suffix which allows unique instance to be created.
If the option is provided, service name will be replaced with "<name>_<instance>"
-o
--overwrite
Overwrite configuration in the Registry with local values.
-r
--registry
Indicates the service should use the registry.
-cp
--configProvider
Indicates to use Configuration Provider service at specified URL.
URL Format: {type}.{protocol}://{host}:{port} ex: consul.http://localhost:8500
In EdgeX, float values have two kinds of encoding, Base64, and scientific notation (eNotation
).
When EdgeX is given (or returns) a float32 or float64 value as a string, the format of the string is by default a base64 encoded little-endian of the float32 or float64 value, but the
floatEncoding
attribute relating to the value may instead specifyeNotation
in which case the representation is a decimal with exponent (eg1.234e-5
)
The above quote is from the official EdgeX device service requirements document, viewable on Google Docs here, under the "Device readings" section.
Currently, the C device service SDK converts float values to little-endian binary, which is consistent with the EdgeX device service specifications. However, the Go device service SDK converts float values to big-endian binary. This inconsistency is due to the fact that the device service specifications changed in the EdgeX Fuji release - to track the status of this, please review issue #457.
In the device profile (example here), configure a profile property with property values as follows:
- name: "Temperature"
description: "Temperature value"
properties:
value: { type: "FLOAT64", readWrite: "RW", floatEncoding: "Base64" }
units: { type: "String", readWrite: "R", defaultValue: "degrees Celsius" }
The SDK will convert incoming string values with scientific notation (aka e-notation) representation to float values. To enable this, the floatEncoding
field should be set to the value eNotation
, detailed below.
In the device profile (example here), configure a profile property with property values as follows:
- name: "Temperature"
description: "Temperature value"
properties:
value: { type: "FLOAT64", readWrite: "RW", floatEncoding: "eNotation" }
units: { type: "String", readWrite: "R", defaultValue: "degrees Celsius" }
- Chat: https://edgexfoundry.slack.com
- Mailing lists: https://lists.edgexfoundry.org/mailman/listinfo
Please refer to the EdgeX Foundry versioning policy for information on how EdgeX services are released and how EdgeX services are compatible with one another. Specifically, device services (and the associated SDK), application services (and the associated app functions SDK), and client tools (like the EdgeX CLI and UI) can have independent minor releases, but these services must be compatible with the latest major release of EdgeX.
Please refer to the EdgeX Foundry LTS policy for information on support of EdgeX releases. The EdgeX community does not offer support on any non-LTS release outside of the latest release.