Previous releases
Device Management Edge 0.11.0
Changes
Edge
- Pelion Device Management Client library updated to version 3.4.0.
- Mbed TLS updated to version 2.18.1.
Examples
No changes.
Metalayers
No changes.
Known issues
- Concurrent certificate renewals or enrollments for certificates with the same name, when calling
pt_device_certificate_renew
orpt_certificate_renew
API, can fail unexpectedly because of incorrect detection of duplicate requests. A workaround for this is to only run one operation at a time and wait for the success or failure callback before calling the next certificate enrollment or renewal. - Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update. - Edge communicates on behalf of multiple devices. There is an underlying limitation in the CoAP communication to effectively reduce the number of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Device Management is 200 ms.
- 10 KB registration message.
- Underlying Device Management Client sends data in 1 KB blocks and waits for an acknowledgement for each block. This equals to 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lots of notification updates passed to from Edge to Device Management, the responsiveness to Device Management initated requests may be hindered.
- There is a maximum size limit to the full registration message, which limits the number of devices Edge can host.
- Maximum registration message size is 64 KB.
- Hosted devices with five typical Resources consume ~280 bytes (the exact size depends, for example, on the length of resource paths). This limits the maximum number to 270 devices.
- The more Resources you have, the fewer devices can be supported.
- The Edge device Resources are also included in the same registration message.
- Test the limits with your configuration and set guidance accordingly.
- Protocol translators may cause side effects on devices connecting through another protocol translator if both use the same names for the devices. Edge Core identifies the devices by their name. It is not always clear which protocol translator owns the device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Edge instances have corner cases that are not supported. You need to deregister the devices from the current Edge instance before connecting to an another Edge instance.
- Device lifetime tracking of mediated devices is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. glib
version used by default (2-48.2) can raise thread sanitizer errors. Updatingglib
can reduce those errors.
Device Management Edge 0.10.0
Edge
- Changed Edge to use the default TLS configuration file of the Device Management Client library instead of the TLS configuration file provided by Edge.
- Removed the now obsolete TLS configuration file (
/config/mbedtls_mbed_client_config.h
).
- Removed the now obsolete TLS configuration file (
- Added KCM certificate
GET
and KCM public keyGET
C APIs. - Updated Device Management Client to version 3.3.0.
- New KCM crypto JSON RPC APIs:
crypto_generate_random
API to generate a random buffer using KCM API.crypto_asymmetric_sign
API to perform asymmetric sign operation using KCM API.crypto_asymmetric_verify
API to perform asymmetric verify operation using KCM API.crypto_ecdh_key_agreement
API to perform ECDH key agreement using KCM API.
- New KCM crypto PT C APIs :
pt_crypto_generate_random
API to generate a random buffer using KCM API.pt_crypto_asymmetric_sign
API to perform asymmetric sign operation using KCM API.pt_crypto_asymmetric_verify
API to perform asymmetric verify operation using KCM API.pt_crypto_ecdh_key_agreement
API to perform ECDH key agreement operation using KCM API.
Examples
- Added fetch for certificate and public key to the
mqtt-example
. - Added an option to create a generic object to the
mqtt-example
. - Added device certificate renewal support to the
mqtt-example
. - Split the
simple-pt-example.js
Javascript example to two:simple-pt-example.js
demonstrating PT and Device Management.pt-crypto-api-example.js
demonstrating the crypto operations.
- Added new crypto operations to
pt-crypto-api-example.js
. - Replaced MQTT example
renew-certificates
API with two separate methods:renew-certificate
renews a single certificate.set-certificates-list
subscribes to receive notifications for a given list of certificates.
Metalayers
No changes.
Bugfixes
- Added NULL checks for connection in various API calls. These prevent potential segfaults in situations where a connection is missing.
Known issues
- Concurrent certificate renewals or enrollments for certificates with the same name, when calling
pt_device_certificate_renew
orpt_certificate_renew
API, can fail unexpectedly because of incorrect detection of duplicate requests. A workaround for this is to only run one operation at a time and wait for the success or failure callback before calling the next certificate enrollment or renewal. - Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update. - Edge communicates on behalf of multiple devices. There is an underlying limitation in the CoAP communication to effectively reduce the number of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Device Management is 200 ms.
- 10 KB registration message.
- Underlying Device Management Client sends data in 1 KB blocks and waits for an acknowledgement for each block. This equals to 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lots of notification updates passed to from Edge to Device Management, the responsiveness to Device Management initated requests may be hindered.
- There is a maximum size limit to the full registration message, which limits the number of devices Edge can host.
- Maximum registration message size is 64 KB.
- Hosted devices with five typical Resources consume ~280 bytes (the exact size depends, for example, on the length of resource paths). This limits the maximum number to 270 devices.
- The more Resources you have, the fewer devices can be supported.
- The Edge device Resources are also included in the same registration message.
- Test the limits with your configuration and set guidance accordingly.
- Protocol translators may cause side effects on devices connecting through another protocol translator if both use the same names for the devices. Edge Core identifies the devices by their name. It is not always clear which protocol translator owns the device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Edge instances have corner cases that are not supported. You need to deregister the devices from the current Edge instance before connecting to an another Edge instance.
- Device lifetime tracking of mediated devices is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. glib
version used by default (2-48.2) can raise thread sanitizer errors. Updatingglib
can reduce those errors.
Device Management Edge 0.9.0
Changes
- Added support for Texas Instruments AM4378 SDK (relevant metalayer added).
- Added handling for pending JSON RPC requests. Requests are cleaned with an error response if the client doesn't respond within the maximum time limit. You can configure this timeout in
cmake/edge_configure.cmake
by modifying valuesSERVER_REQUEST_TIMEOUT_THRESHOLD_MS
for Edge Core andCLIENT_REQUEST_TIMEOUT_THRESHOLD_MS
for protocol translator C API v2 client. The entity that made the request will getPT_API_REQUEST_TIMEOUT
error response. - Added handling for pending JSON RPC requests if the connection breaks. The entity that made the request will get
PT_API_REMOTE_DISCONNECTED
error response. - Added certificate renewal JSON RPC and C APIs.
- Added KCM certificate
GET
and KCM public keyGET
JSON RPC APIs. - Pelion Device Management updated to version 3.0.0 (from version 2.2.1).
- See the Client release notes.
- Updated Mbed TLS to version 2.17.0.
Examples
Added certificate renewal support to MQTT example, simple PT example and simple JS example.
Metalayers
initv
changed tosystemd
in the Raspberry Pi reference.- New metalayer for Texas Instruments AM437x SDK.
Bugfixes
Fixed the decoding buffer size in Base64 library.
Known issues
-
Edge examples use
git submodules
. Currently, the references are with git protocol. This requires the user to be authenticated to GitHub for the submodule init to work. You will see the following failure:[email protected]: Permission denied (publickey). fatal: Could not read from remote repository.
-
Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update. -
Edge communicates on behalf of multiple devices. There is an underlying limitation in the CoAP communication to effectively reduce the number of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Device Management is 200 ms.
- 10 KB registration message.
- Underlying Device Management Client sends data in 1 KB blocks and waits for an acknowledgement for each block. This equals to 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lots of notification updates passed to from Edge to Device Management, the responsiveness to Device Management initated requests may be hindered.
-
There is a maximum size limit to the full registration message, which limits the number of devices Edge can host.
- Maximum registration message size is 64 KB.
- Hosted devices with five typical Resources consume ~280 bytes (the exact size depends, for example, on the length of resource paths). This limits the maximum number to 270 devices.
- The more Resources you have, the fewer devices can be supported.
- The Edge device Resources are also included in the same registration message.
- Test the limits with your configuration and set guidance accordingly.
-
Protocol translators may cause side effects on devices connecting through another protocol translator if both use the same names for the devices. Edge Core identifies the devices by their name. It is not always clear which protocol translator owns the device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
-
DELETE
(CoAP/LwM2M) operation is not supported. -
Devices moving between Edge instances have corner cases that are not supported. You need to deregister the devices from the current Edge instance before connecting to an another Edge instance.
-
Device lifetime tracking of mediated devices is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. -
glib
version used by default (2-48.2) can raise thread sanitizer errors. Updatingglib
can reduce those errors.
Release 0.8.0
Changes
- Updated Mbed TLS to version 2.15.1.
- Added end-to-end support for asynchronous write operations (
OPERATION_WRITE
andOPERATION_EXECUTE
) from Web Client to protocol translator managed endpoints.- This allows the web application to detect if the operation has succeeded or failed.
- Pelion Device Management updated to version 2.2.1 (from version 2.1.1).
- This brings in lots of bug fixes. See the Client release notes.
- Especially HTTP firmware download fixes are important.
Examples
Multiple BLE example fixes, see below.
Bugfixes
- BLE PT example bugfixes.
- Fixed invalid read of options variant in
ble_write_characteristic
function. - Fixed unsafe signal handler calls to
g_idle_add
by using GLib provided signal handlers. - Removed stray call to
pthread_mutex_unlock
indevices_find_device
. - Fixed thread safety issues when the device is removed from dbus.
- Fixed invalid read of options variant in
Known issues
- Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update. - Device Management Edge communicates on behalf of multiple devices. There is an underlying limitation in the CoAP communication to effectively reduce the number of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Device Management is 200 ms.
- 10 KB registration message.
- Underlying Device Management Client sends data in 1 KB blocks and waits for an acknowledgement for each block. This equals to 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lot of notification updates passed to from Edge to Device Management, the responsiveness to Device Management initated requests may be hindered.
- There is a maximum size limit to the full registration message, which limits the number of devices Edge can host.
- Maximum registration message size is 64 KB.
- Hosted devices with five typical Resources consume ~280 bytes (exact size depends for example on the length of resource paths). This limits the maximum number to 270 devices.
- The more Resources you have, the fewer devices can be supported.
- The Edge device Resources are also included to the same registration message.
- Please test the limits with your configuration and set guidance accordingly.
- Protocol translators may cause side effects on devices connecting through another protocol translator if both protocol translators use the same names for the devices. Edge Core identifies the devices by their name. It is not always clear which protocol translator owns the device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Edge instances have corner cases that are not supported. You need to deregister the devices from the current Edge instance before connecting to an another Edge instance.
- Device lifetime tracking of mediated devices is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
.
Release 0.7.1
Changes
- Removed
Mbed
from documentation. - Removed obsolete injection of insecure RoT module in the Edge Core build.
- Moved the
include/jsonrpc/jsonrpc.h
underlib/jsonrpc/jsonrpc
. This header is internal. - Moved the
include/edge-rpc/rpc.h
underedge-rpc/edge-rpc
. This header is internal. - Implemented device unregistration message sending to Device Management backend. The unregistration relies on the lifetime expiration in the Device Management backend.
- Updated Device Management Client to version 2.1.1.
- Implemented Protocol Translator API v2.
- The old Protocol Translator API (v1) is still available.
- The new API has better thread safety than the v1 API.
ns_list.h
is not visible outside.- The API v2 uses a connection ID instead of a connection structure pointer.
- The API v2 optimizes the size of the payload in communication with Device Management Edge.
- Deprecated The Protocol Translator API v1. The deprecated API headers are under
include/pt-client
. - Removed Yocto toolchain and target. The build environments need to provide a correct toolchain and target.
Examples
- Updated examples to use the Protocol Translator API v2.
- New Bluetooth Low Energy (BLE) protocol translator example.
- Parameterized simple JavaScript protocol translator device to create, update and unregister functions with
deviceId
. The device ID is given in the main entry functions.
Bugfixes
- Fixed usage for
--cbor-conf
when combined with--reset-storage
. - Fixed possible invalid pointer dereference when calling
pt_client_final_cleanup
afterpt_client_start
has returned. Migration note: Thept_client_final_cleanup
API functionality has been moved inside thept_client_start
function and thept_client_final_cleanup
function has been deprecated. Any call topt_client_final_cleanup
should be removed, and thept-client/client.h
" include should be removed from protocol translator as it is an internal header. - Fixed memory leak on PUT/WRITE request handling. The payload pointer given from Device Management Client to Edge was never freed. The payload was copied for NUL-termination and the original pointer was not freed.
- Added a workaround for waiting for Device Management Client threads to stop on Edge Core close. The underlying Device Management Client's EventOS event loop thread is not joined. Occasionally it is reported as a memory leak by Valgrind.
Known issues
-
Firmware update from
morty
version of Yocto tosumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update. -
Device Management Edge communicates on behalf of multiple devices. There is an underlying limitation in the CoAP communication to effectively reduce the number of requests in flight to one. In heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round-trip time to Device Management is 200 ms.
- 10 KB registration message.
- Underlying Device Management Client sends data in 1 KB blocks and waits for an acknowledgement for each block (10 * 200 ms = 2 seconds).
- During that time, other messages are not processed.
- If there are many notification updates passed from Edge to Device Management, responsiveness to Device Management-initated requests may be hindered.
-
There is a maximum size limit to the full registration message, which limits the number of devices Edge can host.
- Maximum registration message size is 64 kilobytes.
- Hosted end points with 5 typical resources will consume ~280 bytes (exact size depends on length of resource paths etc.). This would limit the maximum number to 270 devices.
- The more resources you have, the fewer devices can be supported.
- The Edge device resources are also included to the same registration message.
- Please test the limits with your configuration and set guidance accordingly.
-
Protocol translators may cause side effects on devices connecting through another protocol translator if both use the same names for the devices. Edge Core identifies endpoint devices by name. It is not always clear which protocol translator owns the endpoint device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
-
DELETE
(CoAP/LwM2M) operation is not supported. -
Devices moving between Edge instances have corner cases that are not supported. You should deregister these devices from the current Edge instance before connecting to an another Edge instance.
-
Device lifetime tracking of mediated devices is not supported. Devices have the same lifetime as the Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
.
Release 0.6.0
Changes
- WISE-3160 content removed.
- Device Management Edge Local Management API introduced.
- New command line argument for Edge Core.
- It is now possible to control the log coloring using the
--color-log
argument. - Without the argument, a plain text log is produced.
- When giving the argument
--color-log
toedge-core
binary, an ANSI colored log is produced.
- It is now possible to control the log coloring using the
- Added support for setting user data to the
pt_device_t
structure. Seept_create_device_with_userdata
inpt_api.h.
- Removed the duplicate configuration file of Device Management Client.
mbed_client_user_config.h
removed.- Moved the TCP keepalive configuration to
mbed_cloud_client_user_config.h
.
- Renamed LoRa example to MQTT example.
- Updated the version of Yocto in the Raspberry Pi 3 reference implementation from
morty
tosumo
. - Updated Device Management Client to version 2.0.1.1.
- Added new fields
account-id
andlwm2m-server-uri
to Edge status REST API. - Removed the protocol translator examples from the
edge-core
repository.- The examples are now in the Mbed Edge protocol translator examples repository.
Bugfixes
- Added the
libevent_global_shutdown
function to the cleanup stage to prevent occasional memory leaks during shutdown. - Fixed issues in JSONRPC message handling on broken messages.
Known issues
Firmware update from morty
version of Yocto to sumo
does not work and makes devices unusable. The differences in the device trees of different versions cause problems when starting the kernel after the update.
Release 0.5.2
Changes
Implemented fragmented JSONRPC message handling. There was no check if the message was fragmented. Fragmentation occurred when the requested payload exceeded 2048 bytes
Release 0.5.1
Changes
- Added CBOR configuration file injection mechanism for
BYOC_MODE
.- Inject the configuration with
--cbor-conf
command line argument inedge-core
.
- Inject the configuration with
- Moved
read_file.[c|h]
frompt-example
tocommon
. - Added the support of Device Management developer credentials C source file conversion to CBOR into the
edge-tool
. - Updated Device Management Client to version 1.4.0.
- The developer update resources are available only in the developer mode.
Release 0.5.0
Changes
- Update Mbed Cloud Client to
1.3.3
. - Breaking change Revised the build system to support normal CMake cycle.
- Removed pregenerated
build
-directory. Normal out-of-tree builds are now supported. - Build helper script
build_mbed_edge.sh
removed. - Added
cmake
-directory for predefined CMake configurations. - Added
cmake/targets
-directory for predefined build targets. - Added
cmake/toolchains
-directory for predefined build toolchains.
- Removed pregenerated
- Breaking change Changed underlying communication channel between the Edge Core and protocol translators to use Unix domain socket instead of TCP socket.
- Breaking API change Removed host and port parameters from
pt_client_start()
function and replaced withsocket_path
. The underlying communication channel is changed to Unix domain socket. - Released JSON-RPC API documentation for protocol translators to use. The new API is a JSON-RPC 2.0 API and uses a websocket as transport.
- Added simple Javascript protocol translator example to
examples/simple-js-example
. - Added
jansson
andlibevent
to libraries. Removed runtime and compilation time dependency from environment and operating system. These are now built and linked into Mbed Edge binaries in the project. - Added
libwebsocket
andmbedtls
to libraries. These are now built and linked into Mbed Edge binaries in the project. - Removed
mbed_edge_config.h
fromWISE-3610-SDK
in favor of CMake configuration options. - Fixed the file path in the documentation for the
update_default_resources.c
. Correct folder for the file isconfig
. - Fixed the version information printed by Edge Core in product repository.
- Added WISE-3610 SDK 1.0.19e support.
- Improved performance when a lot of endpoints are used.
- Edge Core check the JSON-RPC Protocol API version of Edge Client. If the version doesn't match, the connection is closed.
- Implemented a common Trace API that all Edge components use.
- Removed
common/edge_common.[c|h]
. - Changed default for maximum number of registered endpoints limit. New default value is 500.
Bug fixes
- Fixed a bug where Edge Core didn't decrease the number of allocated endpoints if the Protocol API client was killed.
- Fixed leaks in Edge Core shutdown.
- Fixed a bug where objects were added twice to Mbed Cloud Client.
- Fixed a bug when Edge Core could not start when the --reset-storage parameter was used.
- Fixed Edge Core to return
Edge Core is shutting down
instead ofInternal error
when Edge Core is closing. - Fixed Edge Core to return
Invalid params
instead ofError
if deviceId is invalid. - Fixed Edge Core crash when it cannot allocate the HTTP port.
Known issues
- Mbed Edge communicates on behalf of multiple devices. There is a underlying limitation in the CoAP communication to effectively reduce the amount of requests in flight to be one. On very heavy communication cases, this introduces extra latency. An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud of 200 ms.
- 10 KB registration message.
- Underlying Mbed Cloud Client sends data in 1 KB blocks and waits for acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lot of notification updates passed to Mbed Cloud from Mbed Edge, the responsiveness to Mbed Cloud initated requests may be hindered.
- Protocol translators may cause side effects on devices connecting through another protocol translator if both protocol translators use the same names for the devices. The Mbed Edge Core identifies the endpoint devices by their name. There is limited checking on which protocol translator owns the endpoint device, and clashing names can cause unknown behavior. Ensure that devices have unique names across the protocol translators. For example, add a prefix or suffix based on the protocol translator name, which must be unique.
DELETE
(CoAP/LWM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should deregister the devices from the current Mbed Edge before connecting to an another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices have the same lifetime as the Mbed Edge device. Default is 1 hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
.
Release 0.4.4
Changes
- WISE-3610 compilation warnings fixes.
- Doxygen documentation formatting fixes.
- Contribution instructions and a pull request template added for the GitHub community.
Bug fixes
Corrected registration update messages. They were always populated with the translated endpoints, which caused a full registration for them in the Mbed Cloud. A full registration deletes all subscriptions to the endpoints resources. The functionality is now registration update which refreshes only the translated device lifetime.
Release 0.4.3
Changes
- Mbed Edge Yocto meta layer released.
- Mbed RaspberryPi3 Yocto meta layer released.
protocol_api.c
- fixed a misleading debug print -Create resource /d
was printed but actually we were doing a value update.lifetime
parameter documented inpt_create_device
ofpt-client
API to clearly mark the parameter to be reserved and unused.- Changed the default logging level to INFO.
Bug fixes
Ignored CoAP parse errors from Mbed Cloud Client as they are non-critical.
Known issues
- Mbed Edge communicates on behalf of multiple devices. There is an underlying limitation
in the CoAP communication to effectively reduce the amount of requests in flight to
be one. On very heavy communication cases, this introduces extra latency.
An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud 200 ms.
- 10 kB registration message.
- Underlying Mbed Cloud Client sends data in 1 kB blocks and waits for an acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lot of notification updates passed from Mbed Edge to Mbed Cloud, the responsiveness to Mbed Cloud initated requests may be hindered.
- Binding Mbed Edge Core to a port that is already reserved may cause a core dump. This is known to happen on Yocto 2.2.x running on Raspberry Pi 3.
- Protocol translators may cause a side effect on devices connecting through another protocol translator if both use same names for the devices. There is a limited check on the actual protocol translator which owns the translated device specified by the name. Ensure that devices have unique names across the protocol translators. As an example, add a prefix or suffix based on the protocol translator name which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should de-register the devices from the current Mbed Edge before connecting to another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices have the same lifetime
as the Mbed Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. - Device unregistration from Mbed Cloud uses the expiration mechanism only.
- A protocol translated device registration through Mbed Edge to Mbed Cloud initiates a register update message to Mbed Cloud. Mbed Cloud handles the mediated device update as a full registration. This drops the current subscriptions to Mbed Edge and protocol translated resources. The application logic must listen to the registration notifications and renew the subscriptions.
- Execute operation on a mediated device does not work with an empty payload. As a workaround, any non-empty payload can be sent in the execute POST request.
Release 0.4.2 (Early access)
API changes
Added API's for setting execute and value update callbacks to edge resources
Bug fixes
Ignore CoAP parse errors from mbed Cloud Client as they are non-critical
Known issues
- Mbed Edge communicates on behalf of multiple devices. There is an underlying limitation
in the CoAP communication to effectively reduce the amount of requests in flight to
be one. In very heavy communication cases this will introduce extra latency.
An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud is 200 ms.
- 10 kB registration message.
- Underlying Mbed Cloud Client sends data in 1 kB blocks and waits for an acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lot of notification updates passed to Mbed Cloud from Mbed Edge the responsiveness to Mbed Cloud initated requests may be hindered.
- Binding Mbed Edge core to a port that is already reserved may cause a core dump. This is known to happen on Yocto 2.2.x running on Raspberry Pi 3.
- Protocol translators may cause a side-effect on devices connecting through another protocol translator if both use same names for the devices. There is limited checking on the actual protocol translator which owns the translated device specified by the name. Ensure that devices have unique names across the protocol translators. As an example, add a prefix or suffix based on the protocol translator name which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should de-register the devices from the current Mbed Edge before connecting to another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices will have the same lifetime
as the Mbed Edge device. Default is one hour.
The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
- Device unregistration from Mbed Cloud uses the expiration mechanism only.
- A protocol translated device registration through Mbed Edge to Mbed Cloud initiates a register update message to Mbed Cloud. Mbed Cloud handles the mediated device update as a full registration. This drops the current subscriptions to protocol translated resources. The application logic must listen to the registration notifications and renew the subscriptions.
- Execute operation on a mediated device does not work with an empty payload. As a workaround, any non-empty payload can be sent in the execute POST request.
Release 0.4.1 (Early access)
Major changes
- Backwards incompatible Root of Trust key derivation fix.
For the backwards compatibility, you need to define a compiler flag
PAL_DEVICE_KEY_DERIVATION_BACKWARD_COMPATIBILITY_CALC
to value of1
. - Updated Mbed Cloud Client to
R1.3.0-RC13
release with the dependencies. - Added secure time support.
- Added 3rd party contribution instructions.
- Added configuration samples and files required by the update feature to the WISE-3610.
- Fixed the file path in the documentation for the
update_default_resources.c
. The correct folder for the file isedge-client
. - Remove the define
MBED_CLOUD_CLIENT_CONFIG_DIR
. UsePAL_FS_MOUNT_POINT_PRIMARY
andPAL_FS_MOUNT_POINT_SECONDARY
instead. - Edge-core returns an error when trying to registerer a device which is already
registered.
- This prevents accidental modifications of devices owned by another edge-core client process.
- This allows more CoAP messages to be stored for resending and duplicate detection.
- Added full messages on errors to
edge-tool
. In some cases, the Mbed Cloud SDK wraps the status codes, for example404
to400
. - Added Software One Time Programming (SOTP) security feature.
Bug fixes
- Removed resource values from debug logs. A resource value can be pure binary data and can break log consumers. The value size is logged instead.
Known issues
- Mbed Edge communicates on behalf of multiple devices. There is an underlying limitation
in the CoAP communication to effectively reduce the amount of requests in flight to
be one. On very heavy communication cases, this introduces extra latency.
An example calculation:
- 30 mediated devices with a resource tree of 20 resources.
- Round trip time to Mbed Cloud 200 ms.
- 10 kB registration message.
- Underlying Mbed Cloud Client sends data in 1 kB blocks and waits for an acknowledgement for each block. This equals 10 * 200 ms = 2 seconds.
- During that time, other messages are not processed.
- If there are lot of notification updates passed from Mbed Edge to Mbed Cloud, the responsiveness to Mbed Cloud initated requests may be hindered.
- Binding Mbed Edge Core to a port that is already reserved may cause a core dump. This is known to happen on Yocto 2.2.x running on Raspberry Pi 3.
- Protocol translators may cause a side effect on devices connecting through another protocol translator if both use same names for the devices. There is a limited check on the actual protocol translator which owns the translated device specified by the name. Ensure that devices have unique names across the protocol translators. As an example, add a prefix or suffix based on the protocol translator name which must be unique.
DELETE
(CoAP/LwM2M) operation is not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported. You should de-register the devices from the current Mbed Edge before connecting to another Mbed Edge.
- Mediated device lifetime tracking not supported. Devices have the same lifetime
as the Mbed Edge device. The default is one hour. The
#define
to change the lifetime isMBED_CLOUD_CLIENT_LIFETIME
. - Device unregistration from Mbed Cloud uses the expiration mechanism only.
- A protocol translated device registration through Mbed Edge to Mbed Cloud initiates a register update message to Mbed Cloud. Mbed Cloud handles the mediated device update as a full registration. This drops the current subscriptions to Mbed Edge and protocol translated resources. The application logic must listen to the registration notifications and renew the subscriptions.
- Execute operation on a mediated device does not work with an empty payload. As a workaround, any non-empty payload can be sent in the execute POST request.
- Sending more than one accept header in a REST request targeting Mbed Edge resources will
result in a critical error
no Mbed Edge
. This can be avoided by sending only a single accept header.
Release 0.4.0 (Early access)
Major changes
- The Edge Core resource value representation has been changed to
text-format
. This aligns the representation with Arm Mbed Cloud Client and its expected format for resource level values. TLV (type, length, value) format is not yet supported. The values manipulated from the Arm Mbed Cloud are intext-format
. See the LwM2M technical specification for exact definition of the data types. The link between the Protocol Translator and Edge Core uses binary representation of the data. When the protocol translator writes the data to Edge Core:- integer, time, float, boolean: network byte-order.
- string: utf-8.
- opaque: sequence of binary data.
- objlink: two 16 bit unsigned integers beside the other.
- When Edge Core writes the data to the protocol translator:
- integer, time, float: network byte-order. The value is 64 bits.
- string: utf-8.
- opaque: sequence of binary data.
- objlink: two 16 bit unsigned integers beside the other.
- Added a helper tool
edge-tool
for observing, manipulating and filtering resources. - Added graceful shutdown support to Edge Core.
- Edge Core disconnects if the client sends invalid JSON.
- Improved protocol API error codes to be more consistent and descriptive.
- Added Arm Mbed Cloud Update Client functionality.
- Added support to configure the network interface.
- Added version information to the status API.
- Added support for Reset Factory Settings. Customers may implement their own implementation for RFS in
edge-core/edge_server_customer_code.c
. - Fixed issues the Coverity analysis tool found.
- Protocol translator initiated value write and
device_register
methods improved on error situations. The first JSON error returns and if JSON errors exist, Edge Core does not update the value.
API changes
Breaking API changes
- Removed all global connection variables to make the protocol translator API usable from a shared library. This causes all API related functions to expect
struct connection *connection
in the arguments. - The
pt_client_start
function has output reference parameterstruct connection *connection
added. Applications must provide this to protocol translator API functions as argument. This binds the calls to the specific Edge Core connection. - All protocol translator API functions expect
struct connection *connection
as the first argument. - All protocol translator callback functions expect
struct connection *connection
as the first argument. - Resource values expect to be given in network byte-order format for certain LwM2M value types:
- integer, time, float, boolean: network byte-order.
- Changed the return type of
pt_received_write_handler
fromvoid
toint
. It is now possible to return a failure from the protocol translator implementation. - The
pt_object_instance_add_resource
signature changed. We removed the parameteruint8_t operations
. The function creates only read-only resources to the passed object instance.
New API function
Added a function to support creating resources with a callback. The callback is the specified action to do for the resource on the WRITE or EXECUTE operation. The function name is pt_object_instance_add_resource_with_callback
, and it has two differences in the signature over the read-only resource creation, uint8_t operations
and pt_resource_callback
callback function pointer. The signature of the resource callback is typedef void (*pt_resource_callback)(const pt_resource_opaque_t *resource, const uint8_t *value, const uint32_t size, void* userdata)
.
Other API changes
- Added
parent
field forpt_device_t
,pt_object_t
,pt_object_instance_t
andpt_resource_opaque_t
. - Added an optional helper API
pt-client/pt_device_object.h
for creating a standard LwM2M device resource object/3
.
Other changes
Protocol translator example:
- Added defaults to command-line arguments. Port and host arguments are optional. This connects to
127.0.0.1:22223
by default. - Updated the protocol translator example:
- To use network byte-order for float temperatures.
- To use the changed API when adding resources to object instances.
- To use the resource callback directly on the resource.
- IPSO object example to create
/3
device object for the CPU temperature example device.
lorapt example:
- This release adds defaults to command-line arguments. Port and host arguments are optional. This connects to
127.0.0.1:22223
by default. - This release updates the LoRa protocol translator example to use the changed protocol translator API when adding resources to object instances.
Bug fixes
This release fixes issues related to the following scenario:
- A message was written to the client, and the response was returned before the message went to request queue.
- The application could not match the response to any request. This caused a hidden memory leak; the messages were not removed because the response was already handled.
Release 0.3.2 (Early access)
Major changes
- Updated the version of the factory configurator client.
Other changes
- Changed the
network_interface
to a string in edge-client. - Removed an invalid assert from
pt_device_free
.
Release 0.3.1 (Early access)
Major changes
Mbed Cloud Edge
renamed toMbed Edge
.- The default Mbed Cloud Client configuration directory is changed from
./pal
to./mcc-config
. Please read the new instructions in theREADME.md
. - The configuration file
mbed_cloud_edge_config.h
renamed tombed_edge_config.h
. - Implemented
POST
andPUT
support from CoAP to mediated device resources. These are translated intoWRITE
andEXECUTE
operations on LwM2M resources.
API changes
All of the API changes listed here are breaking changes:
- A new callback (includes device_id) for device related operations.
pt_client_start
signature changed. Removed individual callback function parameters and replaced it with aprotocol_translator_callbacks_t
struct to contain all needed callback functions.- Added a shutdown callback to
pt_client_start
callback structure. - Added
pt_
namespace to the callback function prototypes. - Added
void* userdata
for callback function prototypes. - The received write handler signature changed. This was earlier unsupported but present in the
pt_api.h
.pt_received_write_handler
exposes the detailed argument list for handling writes and executes.
Other changes
Protocol translator example:
- Updated the example to use the changes in the API's.
- Protocol translator API moved to run in another thread instead of running in main thread.
- Devices are contained in list and are persistent during the process runtime.
- Removed the JSON-based example application configuration. The JSON file path parameter removed.
- The example application takes the protocol translator name as second parameter.
- Added CPU thermal zone thermometer IPSO objects if thermal zone with correct type is available.
If the host system is Linux the thermal zone and the type is checked from
/sys/class/thermal/
. - Example main thread now handles polling to CPU thermal zone for updating the thermal zone thermometer IPSO object.
- Changed the example client to use correct IPSO object ID (5432 -> 3303) for the simulated thermometer object.
- Implemented resettable minimum and maximum resources for CPU thermometer object.
/3303/0/5601
IPSO object path for the minumum measured temperature./3303/0/5602
IPSO object path for the maximum measured temperature./3303/0/5605
IPSO object path for the executable resource to reset the minumum and maximum measured temperature.
lorapt example:
Updated the example to use the changes in the API's. Documented new command line arguments.
Common:
- Added type definition
protocol_translator_t
forstruct protocol_translator
. - Split
misc_lib.[c|h]
into two reusable functions.- File
common/integer_length.[c|h]
for calculating integer length as characters. - File
common/default_message_id_generator.[c|h]
for default implementation of the message ID generator.
- File
Known issues
POST
(CoAP)/EXECUTE
(LwM2M) andPUT
(CoAP)/WRITE
(LwM2M) operations are not supported for other than resources.DELETE
(CoAP/LwM2M) operation not supported.- Devices moving between Mbed Edge instances have corner cases that are not supported.
- Device unregistration from Mbed Cloud uses only the expiration mechanism.
- Mbed Cloud Core does not have a hook point to add Mbed Cloud Core specific objects to resources.
- A protocol translated device registration to Core initiates a full registration message to Mbed Cloud. This drops the current subscriptions to Mbed Edge and protocol translated resources. The application must listen to the registration notifications and renew the subscriptions.
- Registration update from Core to Mbed Cloud is not supported.
Release 0.2.0 (Early access)
API changes
Breaking API change: Refactored the API to be simpler and easier to use.
Bug fixes
- Linux platform stability issue fixed with
glibc
versions<=2.2.4
. - Mbed Cloud Client is dynamically allocated. This fixes the random segmentation fault on Mbed Edge Core start.
- Interleaved registration and unregistration deadlocks fixed.
- Protocol translation API segmentation fault fixed. This fault was seen when the connection to Mbed Edge Core could not be established.
Other changes
- Protocol translator device count resource type changed from
opaque
tointeger
. client-wrapper
renamed toedge-client
. All API level functions namespaced withedgeclient_
prefix.- Registration and unregistration error handling added.
- Registration to Mbed Cloud is deferred if there is one already ongoing.
- Registration is prevented if Mbed Edge Core cannot bootstrap to Mbed Cloud.
- Mbed Cloud Client error status shown in Mbed Edge Core HTTP status API response.
- Mbed Edge Core endpoint name and internal ID shown in HTTP status API response.
- Reduced excessive
info
level logging. - Changed
example-client
to use the correct IPSO object ID (5432 -> 3300) for the simulated thermometer object. - Updated the
example-client
to use the refactored protocol translator API.
Known issues
This is an early access release that is not yet functionally complete.
- POST and DELETE operations are not supported yet.
- Moving devices have corner cases that are not supported yet.
- Device unregistration is not implemented fully and it relies on the expiration mechanism of Mbed Cloud. Expiration is set by Mbed Edge Core, see details of the configuration.
- Mbed Edge Core does not provide a hook point to add Mbed Edge Core specific objects with resources.
- Notifications from protocol translated endpoints are only observable through the Mbed Edge Core device resources. Notifications cannot yet be observed from the protocol translated endpoint directly.
- Protocol translated device registration to Core initiates a full registration message to Mbed Cloud. This causes current subscriptions to be dropped to Mbed Edge and protocol translated resources. Application logic must listen to registration notifications and renew subscriptions.
Release 0.1.2 (Early Access)
Changes since the previous release
- Example makefile for OpenWRT build included.
- Example implementation for WISE-1510 LoRa endpoint MQTT protocol translation included.
Release 0.1.1 (Early Access)
Changes since last release
- Mbed Edge Core writes Mbed Cloud Client errors as errors in log.
- Segmentation fault fixed. The fault was seen when registering multiple resources to an object.
Release 0.1.0 (Early Access)
Hardware support
Mbed Edge needs hardware providing the following:
Requirement | Details |
---|---|
Memory (RAM) | The total amount varies according to the needs of the protocol translator, the number of connected devices and services that run. Therefore, it is not possible to give a good estimate - we recommend to measure this in your configuration. |
Storage (Flash, disk) | The Mbed Edge binary is 4 megabytes (with debugs, 830 kB stripped). The size of the protocol translator depends on your implementation, minimum around 1.2 megabytes (with debugs, 270 kB stripped). A typical embedded Linux distribution takes 30-90 megabytes, but you need to also reserve space for boot SW and extra partition for firmware update. In practice, for a Linux-based device 256 megabytes can be considered the minimum. |
Networking | POSIX socket compliant networking stack for Cloud connectivity. |
TRNG | POSIX socket compliant networking stack for Cloud connectivity. |
Real Time Clock | Preferably battery backed up Real-Time Clock (RTC). |
Root of Trust | Secure Root of Trust to enable safe encryption of certificates. |
Please review the Security guidelines for more details.
Third Party IP
Please see the full TPIP report.
Linux
This release has been tested against WISE-3610 SDK and Raspberry Pi3 with simulated connected devices.
Known issues
This is an early access release that is not yet functionally complete.
- POST and DELETE operations are not supported yet.
- Moving devices have corner cases that are not supported yet.
- Device unregistration is not implemented fully and it relies on the expiration mechanism of Mbed Cloud.
- Expiration is set by Mbed Edge Core, see details of the configuration.