Mistake on this page? Email us

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 or pt_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 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.
  • 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 is MBED_CLOUD_CLIENT_LIFETIME.
  • glib version used by default (2-48.2) can raise thread sanitizer errors. Updating glib 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).
  • Added KCM certificate GET and KCM public key GET 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 or pt_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 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.
  • 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 is MBED_CLOUD_CLIENT_LIFETIME.
  • glib version used by default (2-48.2) can raise thread sanitizer errors. Updating glib 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.cmakeby modifying values SERVER_REQUEST_TIMEOUT_THRESHOLD_MS for Edge Core and CLIENT_REQUEST_TIMEOUT_THRESHOLD_MS for protocol translator C API v2 client. The entity that made the request will get PT_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 key GET JSON RPC APIs.
  • Pelion Device Management updated to version 3.0.0 (from version 2.2.1).
  • Updated Mbed TLS to version 2.17.0.

Examples

Added certificate renewal support to MQTT example, simple PT example and simple JS example.

Metalayers

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 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.

  • 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 is MBED_CLOUD_CLIENT_LIFETIME.

  • glib version used by default (2-48.2) can raise thread sanitizer errors. Updating glib 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 and OPERATION_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 in devices_find_device.
    • Fixed thread safety issues when the device is removed from dbus.

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.
  • 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 is MBED_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 under lib/jsonrpc/jsonrpc. This header is internal.
  • Moved the include/edge-rpc/rpc.h under edge-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 after pt_client_start has returned. Migration note: The pt_client_final_cleanup API functionality has been moved inside the pt_client_start function and the pt_client_final_cleanup function has been deprecated. Any call to pt_client_final_cleanup should be removed, and the pt-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 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.

  • 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 is MBED_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 to edge-core binary, an ANSI colored log is produced.
  • Added support for setting user data to the pt_device_t structure. See pt_create_device_with_userdata in pt_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 to sumo.
  • Updated Device Management Client to version 2.0.1.1.
  • Added new fields account-id and lwm2m-server-uri to Edge status REST API.
  • Removed the protocol translator examples from the edge-core 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 in edge-core.
  • Moved read_file.[c|h] from pt-example to common.
  • 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.
  • 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 with socket_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 and libevent 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 and mbedtls to libraries. These are now built and linked into Mbed Edge binaries in the project.
  • Removed mbed_edge_config.h from WISE-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 is config.
  • 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 of Internal error when Edge Core is closing.
  • Fixed Edge Core to return Invalid params instead of Error 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 is MBED_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 in pt_create_device of pt-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 is MBED_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 is MBED_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 of 1.
  • 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 is edge-client.
  • Remove the define MBED_CLOUD_CLIENT_CONFIG_DIR. Use PAL_FS_MOUNT_POINT_PRIMARY and PAL_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 example 404 to 400.
  • 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 is MBED_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 in text-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 parameter struct 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 from void to int. It is now possible to return a failure from the protocol translator implementation.
  • The pt_object_instance_add_resource signature changed. We removed the parameter uint8_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 for pt_device_t, pt_object_t, pt_object_instance_t and pt_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 to Mbed Edge.
  • The default Mbed Cloud Client configuration directory is changed from ./pal to ./mcc-config. Please read the new instructions in the README.md.
  • The configuration file mbed_cloud_edge_config.h renamed to mbed_edge_config.h.
  • Implemented POST and PUT support from CoAP to mediated device resources. These are translated into WRITE and EXECUTE 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 a protocol_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 for struct 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.

Known issues

  • POST (CoAP)/EXECUTE (LwM2M) and PUT (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 to integer.
  • client-wrapper renamed to edge-client. All API level functions namespaced with edgeclient_ 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.