Change logs

These change logs document all relevant changes for the Cumulocity cloud deployments.

The following types of change are included:

  • Feature - New features which are generally available.
  • Preview - Features which are in Public Preview and not yet generally available.
  • Improvement - Small improvements.
  • Announcement - Deprecations, removals or important UI changes.
  • API change - Breaking changes in the APIs.

Displaying all changes since December 6, 2023

December 19, 2024

Added operation request counters to usage statistics

Two new properties, operationsCreatedCount and operationsUpdateCount, have been added to all REST endpoints which will return detailed request counters for usage statistics. In a first implementation step, the Cumulocity platform returns these properties with 0 values. In a future implementation, counting logic in reaction to REST requests and MQTT messages creating and updating operations will be added.

Added two new columns to the Usage Statistics page

To provide more detailed insights into platform usage, the Usage statistics page for Enterprise tenants has been extended with two new columns: “Operations Created” and “Operations Updated”. These columns present the number of operations that have been created and updated, respectively.

This change enhances the granularity of the usage statistics request counters, enabling better analysis and understanding of platform activity. Existing usage statistics data and functionality remain unaffected by this addition.

Improved performance of local smart rules creation and update

Previously, the request time for creating or updating a smart rule increased with the number of enabled or disabled sources. Therefore it was recommended to not select the Activate also for <number> child assets checkbox when a local smart rule was created on a group containing many devices.

With this change the performance of requests has been improved and now updating a smart rule by adding or removing a single device ID from the list of enabled or disabled sources (enabledSources or disabledSources) is very fast.

Additionally, creating a local smart rule has become much faster in case of a large number of direct children of a top-level group. In case of deeper inventory hierarchies only the first level of the hierarchy is validated faster, so creating a local smart rule can still take a long time if the group has hundreds of descendants deeper in the hierarchy and all of them are selected as enabledSources.

Migrated localization user interface from Digital Twin Manager application to Administration application

As part of the ongoing migration efforts, the user interface for managing translations has been migrated from the legacy Digital Twin Manager framework to a new modern framework. The functionality remains the same, allowing users to view, edit and manage translations as before. However, the underlying technology has been updated, providing better performance, stability and maintainability of the translations user interface going forward.

Added link to user documentation in the smart group creation dialog

To support users when creating smart groups, a link to the user documentation on smart groups has been added to the smart group creation dialog. This allows users to quickly access helpful information.

LWM2M device logging level configuration

For LWM2M devices, it is now possible to disable or adjust the granularity of logging events per device during the device registration or from the LWM2M configuration tab of the existing device. When enabled, log events are visible in the device’s events. Lifecycle events are the default selected option. The global configuration from the LWM2M Service for enabling event logging has been removed. For more details see LWM2M device registration advanced settings and LWM2M configuration.

LWM2M Opaque type serialization to byte array is now deprecated

By default, the LWM2M service serializes binary data of a resource such as Opaque type to a byte array in Cumulocity representations. This functionality is now deprecated and will be changed in the future to the hexadecimal string format. For now the default serializer is still serialized to the byte array and the format can be switched only on the instance level. This change affects the way the data is represented in Cumulocity objects (operations, values displayed in the Objects tab). It does not affect the communication with LWM2M devices.

Added a hook service to allow extension of alarm details view with custom tabs

To provide more flexibility for customizing alarm detail views, hook services have been added to extend alarm details with custom tabs, along with the inline tabs component. This enables developers to display additional context-specific information for alarms or easily integrate third-party data and visualizations in the view. The existing alarm details functionality remains unchanged, while custom tabs appear as additional options in the details view.

Auto refresh can now be enabled globally in dashboards

Previously, auto refresh was only available in certain parts of the application, such as the Alarms page, “Alarms” widget and “Map” widget. With this change, auto refresh can now be enabled globally in any dashboard. This means that the data displayed in widgets, that support this functionality and have it enabled, will be automatically updated at set and common intervals, without the need to manually refresh or set their intervals separately. The impact of this change is an improved user experience as users will always see the most up-to-date information without having to take any additional action.

Dashboard template setting now visible for devices without type property

Previously, when a device had no type property assigned, the dashboard template section in the dashboard settings was hidden. Now, in this case, the section is visible but information is provided that the dashboard template is only enabled when a type is added to the device. Moreover a button is provided which navigates the user to the device view in the Device Management application.

Enhanced Data points table widget

As part of the ongoing modernization efforts to migrate the UI to Angular, the “Data points table” widget has now been migrated from AngularJS to Angular. This change improves the performance, maintainability and consistency of the widget with the rest of the application. The widget now offers enhanced features including:

  • Configurable decimal place precision for data point visualization
  • Improved responsiveness across different screen sizes and devices
  • Auto-refresh based on configurable interval

All existing functionality remains unchanged, ensuring a seamless transition for current users.

New datapoint export component

To enable users to easily export datapoints from Cumulocity, a new generic datapoint export selector has been implemented. This new component allows users to select the time range, export type, aggregation (based on the export type) and file format for the datapoint export. Depending on the size of the datapoint records to be exported, the exported file is then generated and downloaded directly or emailed when ready. The datapoint export component makes it much simpler for users to get the device data they need out of Cumulocity in their desired format.

Translations loaded from a dedicated application

To improve the maintainability in the application, the translations are now loaded from a dedicated application. Previously, the translations were scattered across different parts of the codebase, making it difficult to manage and update them consistently. With this change, all translations are consolidated in a single location, simplifying the process of adding, updating, and maintaining translations. This change does not have any direct impact on end users or the functionality of the application, but it contributes to a cleaner and more organized application infrastructure.

December 12, 2024

Improved Custom properties tab in the tenant details

The Custom properties tab in the tenant details has been improved by moving extraneous information to a new Limits tab providing a cleaner and more consistent interface.

New "Limits" tab in tenant details

To provide a better overview of the resource limits and quotas configured for a tenant, a new Limits tab has been added to the tenant details page. This tab allows to configure the maximum number of devices, requests, and queue sizes for the tenant. With this change, tenant administrators can now easily view and manage the resource limits for their subtenant.

See also Setting limits.

Support for ID tokens provided by external IAM servers in the SSO authentication process

Support for ID tokens provided by external IAM servers has been added and can now be used in the authentication process via single sign-on (SSO). Previously, only access tokens were supported by the Cumulocity platform. Now, the administrator can decide through the configuration whether user data retrieved from the external server, such as first name, last name, phone number, email, and roles, should be loaded from the access token or the ID token.

Ability to create root-level assets using the add asset functionality in the UI

Previously, the add asset functionality in the subassets view only allowed to create child assets within existing hierarchies. With this change, users can now create root-level assets as well as complete asset hierarchies based on predefined asset models. This enhancement provides greater flexibility creating asset hierarchies through the UI.

Changed default date selection option in widgets configuration

In the “Data point graph”, “Data point table”, and “Event list” widgets configuration, the default option in the Date selection field has been changed from “Widget configuration” to “Dashboard time range”.

Date range filter added in the alarms overview

To improve the usability of the Alarms page, alarm filtering by a date range has been implemented. Users can now filter alarms by specifying a start and end date, allowing to narrow down the displayed alarms to a specific time period. This change enhances the alarm management experience by providing more granular control over the alarms being viewed, making it easier for users to focus on relevant alarms within a desired timeframe.

Option added to enable or disable the dashboard manager in the application configuration

In the Cockpit application, it is now possible to disable or enable the dashboard manager in the Application configuration page. By default, the dashboard manager is enabled.

Upgraded Angular and Web SDK versions

Angular has been upgraded to version 18.2.11 and the Web SDK has been updated to 1021.0.4.

December 10, 2024

Dashboard manager extracted into a separate plugin

In an upcoming version the dashboard manager module will be extracted from the Cockpit application and added as a separate plugin. This change might be a breaking change as the dashboard manager module will no longer be part of @c8y/ngx-components/context-dashboard, but will be part of @c8y/ngx-components/dasboard-manager.

This change does not affect the layout and UX of the Cockpit application nor does it add any new functionalities. As a side effect, a performance improvement might be noticed as the dashboard manager from now on will be loaded lazily (that is, only after main application is loaded).

December 5, 2024

Further improvements to Service Terms

The section on Service terms has been further enhanced. It now also contains

December 3, 2024
December 2, 2024

Microservice SDK updated to Spring Boot 3.3

This is a follow-up on a recent announcement about migrating the Microservice SDK to Spring Boot 3.

Starting from version 10.20.155.0, the Microservice SDK is now using Spring Spring Boot 3.3.x, which marks the end of the recent dependency updates published in quick succession. Notice that along Spring Boot, most other dependencies were also updated to eliminate all security vulnerabilities those dependencies had.

Because of the amount of changes we also published intermediate versions to help with the upgrade process of all the applications using the SDK.

Version 10.20.150.1 contains a fix for the previously announced version 10.20.150.0 for applications configuring additional servlets. Use this version when updating your application to Spring Boot 3.0. For details refer to the Spring Boot 3.0 Migration Guide.

Version 10.20.151.1 is based on Spring Boot 3.1 and is recommended as an intermediate step to limit the amount of changes done at once. For details refer to the Spring Boot 3.1 Migration Guide.

Version 10.20.153.1 is based on Spring Boot 3.2 and is another recommended intermediate step. For details refer to the Spring Boot 3.2 Migration Guide.

Finally, when upgrading to version 10.20.155.0 based on Spring Boot 3.3, refer to the Spring Boot 3.3 Migration Guide.

November 28, 2024

Option to log out all users when deleting or modifying a global role

When deleting or modifying a global role, an administrator can now ensure that changes take immediate effect by using a new option to log out all users assigned to that role.

Added filter chips examples to the Cumulocity Codex

To provide developers with more guidance on how to use filter chips in their applications, codex examples for filter chips have been added. The examples demonstrate how to implement filter chips in various scenarios and highlight best practices. With these new codex examples, developers can more easily understand and leverage filter chips in their own applications, enabling them to create more intuitive and user-friendly filtering experiences.

Added documentation and examples for hookServices in the Cumulocity Codex

To support developers in utilizing hookServices in their applications and plugins, documentation and examples have been added to the Cumulocity Codex. The documentation provides an overview of the hookServices API and suggests use cases for it. It also includes a code sample demonstrating widget plugins sharing a common state via an externally injected service. With these new resources available, developers should find it more straightforward to integrate hookServices into their projects, enabling them to extend and customize functionality as needed.

November 22, 2024

Improved error information for single sign-on login

Previously, when an error occurred on logging in via SSO, the plain HTML error text was displayed in the browser. With this change, optional Redirect to the user interface application configuration has been added which allows displaying the error text as a standard UI error message. The new configuration parameter is optional and does not affect current SSO configurations. Using this option requires updating the “Valid Redirect URIs” in the authorization server with the value “<tenant_domain>/apps/*”. For details, refer to Custom template configuration.

November 21, 2024

Device profiles list now displayed as a grid

The device profiles view has been migrated to a data grid. The data grid provides a more modern and user-friendly way to view and manage device profile items compared to the previous list view. The data grid offers enhanced features such as sorting, filtering, and pagination, making it easier to find and work with specific items.

Improved OPC UA operation ProcessMappingsForDeviceValues

In previous versions, the operation c8y_ua_command_ProcessMappingsForDeviceValues failed entirely if any single mapping failed. The new behavior allows the operation to continue reading nodes even if some nodes cannot be read due to bad status codes. Although the operation will still be marked as failed, all readable nodes will be mapped. Additionally, the result and failure messages have been improved to indicate which nodes failed and which were successful.

Added Asset properties widget into DTM plugins component

The DTM plugins component now includes a new asset properties widget module, which enhances the functionality of the existing “Asset properties” widget. This includes:

  • Simplified selection of the modelled properties for assets.
  • Support for listing properties of type: file
  • Ability to preview images attached to properties of type: file
  • The widget has been migrated to Angular.

The module is designed for easy integration into any Cumulocity application. In future releases, this widget will replace the current “Asset properties” widget across all Cumulocity applications.

Added Codex example for CountdownInterval component

To improve the documentation of UI components, a Codex example has been added for the CountdownInterval component. This example demonstrates how to use the CountdownInterval component in an application, showcasing its functionality and configuration options. Developers can now refer to this example to better understand how to integrate the CountdownInterval component into their projects, making it easier to implement countdown functionality in their applications.

Update illustrations in Cockpit

As part of continuous improvement efforts, the illustrations used in various sections of the Cockpit user interface have been updated. The new illustrations provide a fresh and modern look while still effectively conveying the intended message or concept. This change enhances the visual appeal and user experience of the Cockpit interface without impacting any functionality or existing user workflows.

Apama Docker images moving to Amazon ECR

The Apama Docker images are now available at public.ecr.aws/apama, and can be viewed at https://gallery.ecr.aws/apama/. Previously, they were available at softwareag/, and viewed at https://hub.docker.com/u/softwareag.

Within any Dockerfiles that use the Apama images, you will need to change FROM softwareag/<IMAGE>:<TAG> to FROM public.ecr.aws/apama/<IMAGE>:<TAG>.

The location of Apama within the image has been moved from /opt/softwareag to /opt/cumulocity. Existing images remain unchanged.

New alarm for delayed input events that are dropped from Analytics Builder models

Previously, warning messages were logged when input events were dropped by an Analytics Builder model because they were delayed beyond the reorder buffer duration. In addition to the warning messages, an alarm is now raised when input events are dropped. The alarm provides improved visibility compared to relying on viewing log messages, which is especially useful for multi-tenant Streaming Analytics microservices where it may not be possible to view the logs at the parent tenant. See Analytics Builder dropped events for more details on the alarm.

November 15, 2024

Microservice SDK updated to Spring Boot 3.0

This is a follow-up on a recent announcement about migrating the Microservice SDK to Spring Boot 3.

Starting from version 10.20.150.0, the Microservice SDK is now using Spring Spring Boot 3.0.x. Please follow the Spring Boot 3.0 Migration Guide to upgrade your applications when updating to that or later versions of the SDK. To make the migration process easier we recommend first updating to version 10.20.134.0 with JDK 17 and later to version 10.20.140.0 with Spring Security configuration changes, if it was not already done.

November 11, 2024

Added type information to widget configuration

To provide more clarity and improve validation when configuring widgets, type information has been added to the widget configuration. Previously, the widget configuration did not include any type information, which could lead to confusion and misconfiguration. With this change, each configuration property now specifies its expected type, such as string, number, or Boolean.

Enhanced select component with advanced features

To enhance the user experience and functionality a new select component has been introduced. This update includes significant changes that may require action from developers.

Key features:

  • Search functionality
  • Multi-select option
  • Chip-based selection display
  • Full keyboard support
Important
The interface of the new component is not compatible with the previous version. Existing implementations using the c8y-select component will need to be updated.

Required actions: Developers must select one of the following options:

  1. Migrate the existing c8y-select components to the new interface
  2. Rename the selector to c8y-legacy-select to maintain the current functionality

Filtering for alarm types added in the alarms overview

To improve the usability of the alarms overview, filtering for specific alarm types has been added. Users can now select which alarm types they want to see in the overview by using the new filter options. This allows users to focus on the alarms that are most relevant to them, making it easier to identify and address critical issues in a timely manner.

Message banner added to branding editor

To provide a more flexible and customizable user experience, a new message banner option has been added to the branding editor. This feature allows administrators to create and display custom messages or announcements within their branded applications. The message banner can be used to inform users about important updates, maintenance schedules, or any other relevant information. This feature enhances the communication capabilities of the platform and enables administrators to effectively convey important messages to their users without the need for additional tools or workarounds.

Remove deprecated ILabels interface

The deprecated ILabels interface has been removed from the Web SDK. Instead, the ModalLabels interface is used.

Renamed "Position in navigator" field in the dashboard settings

For better clarity, the Position in navigator field in the dashboard settings has been renamed to Position in tabs.

Updated branding colors and logo

As part of ongoing efforts to modernize the look and feel of the Cumulocity UI, the branding colors and the logo have been updated and aligned with current design trends. For example, the brand logo has been relocated to the bottom of the navigator to enhance user focus on navigation elements, reduce visual competition with the app icon, and optimize space utilization. This change provides a refreshed visual appearance throughout the Cumulocity UI, without impacting existing functionality or user workflows, but it could imply a need to review any custom branding applied as some design tokens have been updated or removed. Additionally, the link color is no longer related to the branding color and needs to be updated if a branded link color is wanted.

Upgrade to Angular 18

As part of keeping the Cumulocity platform up-to-date with the latest web technologies, Cumulocity has been upgraded to use Angular 18. This upgrade brings the latest features, performance improvements, and bug fixes from the Angular framework to the Cumulocity platform. The upgrade to Angular 18 should be largely transparent to users, with no visible changes to the user interface or existing functionality. However, any custom widgets or plugins developed for previous versions of Cumulocity may need to be updated to ensure compatibility with Angular 18.

October 31, 2024

Added new option to avoid unnecessary unavailability alarms for LWM2M devices

A new Automatic setting of required interval option has been added to the configuration of LWM2M devices. This setting is configurable so that unavailability alarms will only be triggered when an LWM2M device is truly unavailable, reducing the number of false alarms. For more details see LWM2M configuration.

Allowing LWM2M device to send empty payload without content-type data

The LWM2M specification allows devices to send an empty payload when there is no data to report. In case of an empty payload, no content-type is required. Previously, LWM2M agents would reject messages with an empty payload and no content-type. Now, these messages will be accepted and processed as intended.

Device management title now uses title case as all the application titles.

To improve readability and consistency, the titles of device management application now use title case (Device Management) instead of sentence case (Device management). The functionality of the entities remains the same, only the casing of the titles has been modified.

LWM2M location data handling has been improved

In earlier LWM2M agent versions, device location updates occurred only when the device provided complete location object data. Now, updates happen whenever both latitude and longitude resources are reported together.

Selected item IDs are now passed to the bulk action control

In the past, the bulk action control did not receive the IDs of the selected items, which made it impossible to display a bulk action conditionally based on the subset of selected items. With this change, the selected item IDs are now passed to the bulk action control showIf function.

Updated LWM2M bulk registration templates

The wizard for bulk registering LWM2M devices to Cumulocity provides default bulk registration templates. These templates have been updated to reflect new properties including the X.509 security mode.

Allow global asset search when duplicating a local smart rule

When creating a duplicate of a local smart rule, it is now possible to select an asset from outside of the hierarchy. A duplicate of the rule is now created in the context of the selected asset.

Enabled edit mode when opening a newly created dashboard

Previously, when creating a new dashboard, it would open in view mode which required an extra click on the Edit button to start editing the dashboard. With this change, newly created dashboards now directly open in edit mode. This allows users to immediately start editing and configuring the new dashboard, saving them a click and making the user experience more intuitive.

Prepare to update Microservice SDK to Spring Boot 3

This is a follow-up on a recent announcement about migrating the Microservice SDK to Spring Boot 3.

As a second step of this process, starting from version 10.20.140.0, the Microservice SDK is now using Spring Security 5.8. This change enabled a migration preparing for Spring Security 6.0 to be performed in the Microservice SDK following this migration guide. We recommend all users of the Microservice SDK to also follow that guide when updating their applications using the updated version of the SDK.

Note that following the changes in the MethodSecurityExpressionHandler configuration described here, the methods provided by com.cumulocity.microservice.security.service.SecurityExpressionService that were previously configured using a custom SecurityExpressionRoot extension, are now available via an independent bean definition named c8yAuthz. This means that, for example, the expression isCurrentTenantManagement() will no longer resolve and needs to be prefixed by the bean name instead @c8yAuthz.isCurrentTenantManagement(). This allows customers to easily add their own security expression extensions, if needed.

Improved option name and documentation for Pulse block in Analytics Builder

To improve the user experience in Analytics Builder, the On value change option of the Mode parameter in the Pulse block has been renamed to On value change (excluding to false). In addition, the block reference has been updated to clarify that for a boolean input, a pulse is only sent when the input changes to true (not false).

October 17, 2024

Character limit removed in OPC UA object-mapping functionalities

The text fields in the “Send measurement”, “Create alarm”, and “Send event” functionalities used to be limited to 100 characters. This limitation has been removed, allowing you to enter longer text without restrictions.

Configuration repository migrated to a data grid

The configuration repository has been migrated to a data grid. The data grid provides a more modern and user-friendly way to view and manage configuration items compared to the previous list view. The data grid offers enhanced features such as sorting, filtering, and pagination, making it easier to find and work with specific configuration items.

Extract a property with a period in its name using the Extract Property block

The Extract Property block in Analytics Builder now includes a new optional checkbox called Ignore Separators In Property Path. This allows you to extract a property that has a separator such as a period (.) in the property name. For example, if the Ignore Separators In Property Path checkbox is selected and the Property Path parameter is specified as location.city, then the property name location.city is extracted from the input value. For compatibility, the previous behavior remains as the default, that is, the new checkbox is not selected by default.

October 15, 2024

Removal of deprecated JWT login mode

The deprecated JWT authentication with Cumulocity has been removed. This change will only impact you if your organization used an early version of single sign on (SSO) on Cumulocity. For details, refer to the earlier announcement.

Angular 18 upgrade and rebranding

In a future version, we will update Angular to version 18 and update our base branding. This update brings improvements and new features, but may also introduce breaking changes that could impact your existing implementations. When updating to this new version, please verify your branding, especially the logo position, as it has been modified.

To ensure a smooth transition to Angular 18 and help you to adapt your implementations, we will provide an upgrade documentation when this change happens. This documentation will help you navigate through the changes and update your codebase accordingly.

Microservice SDK updating to Java 17

This is a follow-up on a recent announcement about migrating Microservice SDK to Spring Boot 3. As a first step of this process, starting from version 10.20.134.0, the Java SDK and Microservice SDK are now both using Java 17 both on the source as well as the runtime level. This means that using Java 17 is now a minimum requirement for using the Microservie SDK.

October 4, 2024

Upcoming Spring Boot version update for Microservice SDK

We are pleased to announce an upcoming update to the Spring Boot version used in the Microservice SDK. The new version will be Spring Boot 3.3.3, which will also bring updates to several third-party libraries and frameworks. These mandatory changes will include:

  • Minimum required Java version: 17 (currently Java 8)

  • Jakarta EE 9+ baseline

  • Spring Security: 6.3.3

  • Spring Framework: 6.1.12 (currently 5.3.24)

  • HTTP Client: 5.3.1

Impact: Each of these updates may impact your microservices, potentially requiring code changes.

Rollout: The update will be available in Continuous Deployment (CD) versions starting in Q4 2024 and in versions of the next annual release 2025. A separate announcement will be made to confirm the CD version containing the change.

Migration Resources: Refer to the following guides for assistance with the changes:

October 1, 2024

Advanced notice of changes to Notifications 2.0 tenant context subscriptions with no API filter

Notifications 2.0 subscriptions may specify the Cumulocity APIs to subscribe to, for example alarms or measurements. Subscriptions may use a wildcard value (*) for the API selector, indicating that the subscription should include all available APIs. If the API selector is omitted from a subscription request, it is treated as equivalent to using the wildcard value.

Currently, a tenant context subscription using the wildcard API selector will deliver updates from a subset of the available APIs. See the Notifications 2.0 subscription REST API documentation for details on the current tenant context subscription behaviour.

In future, such subscriptions will also deliver updates from the operations API. This applies to subscriptions that were created before the change is enabled, as well as new subscriptions. For example, after this change is enabled, an application that POSTs the following request to the /notification2/subscriptions endpoint may receive operations updates, regardless of when the subscription was created:

{
  "context": "tenant",
  "subscription": "testSubscription",
  "subscriptionFilter": {
    "apis": [
      "*"
    ]
  }
}

Applications using the wildcard API selector in tenant context subscriptions should be prepared to receive operations updates in addition to the updates they were previously receiving. To avoid disruption, application developers should either:

  • ensure that their applications can handle operations updates, or

  • include an API selector

before this change is enabled.

The change will be enabled in the Cumulocity CD deployments no earlier than January 15, 2025. It will also be included in the 2025 yearly release. A further announcement will be published when the change is enabled.

September 26, 2024

Added subassets module to DTM plugins component

A new subassets view module has been added to the DTM plugins component, which includes official DTM plugins and enables integration with both default and custom web applications. This module allows users to efficiently view and manage subassets. In future releases, it will replace the existing subassets view in other Cumulocity applications.

Display the label instead of the key for the default location property

In the Subassets page, instead of the key of the default location property, its label is displayed for improved user experience.

Improved naming and consistency in asset model samples

For simplicity, “model” has been removed from the asset model sample names. Additionally, the descriptions and UI layout have been improved to ensure consistency.

Improved real-time behavior for changes to asset models

Real-time updates have been improved to ensure that changes made by concurrent users to asset models are immediately reflected.

Renamed microservice from 'dtm-ms' to 'dtm'

The DTM microservice has been renamed from “dtm-ms” to “dtm”. REST endpoint paths have been updated accordingly, replacing the “dtm-ms” segment with “dtm”. Users will not perceive any change. However, they may need to manually unsubscribe and uninstall the older version.

Replaced subassets view in DTM with new subasset module from dtm-plugins component

The subasset module, which was originally imported from the ngx component, has now been replaced with the official plugin from the dtm-plugins component. This change maintains all existing functionality while enabling easy integration of module with both default and custom web applications.

Simplified New asset models page

In the New asset model page, the Asset models and Asset model samples tabs have been removed for a more focused user experience as they are not required for creating a new asset model.

September 23, 2024

Service-level agreement for Platforms

The Platform service-level agreement now provides a more precise definition on how Cumulocity manages the Cumulocity platform service for your tenants and what might be possible limitations and responsibilities that you should be aware of.

September 21, 2024

Alarm Input and Event Input blocks no longer use incorrect source time for alarm and event updates

Previously, the Alarm Input and Event Input blocks did not use the the correct source time for an update operation when the Ignore Timestamp checkbox was not selected. Instead, the creation time of the block was incorrectly used to schedule the input events. This has been fixed and alarm and event updates are no longer missed by the model. When the Ignore Timestamp checkbox is not selected, the input blocks now use the last update time of the block to schedule the input events in case of update operations.

September 19, 2024

Added documentation for REST-based LWM2M device registration

In the user documentation, information has been added on how to register and delete LWM2M devices using the REST API, see Registering LWM2M devices.

Custom firmware update URL in LWM2M device configuration is now deprecated

The custom firmware update URL has been replaced with a standard firmware definition that points to an external URL. Right now this parameter is still available and takes precedence over any other option, but it will be removed in future LWM2M agent versions.

Disabling the automatic configuration of the required interval for LWM2M devices

Cumulocity provides connectivity monitoring capabilities for which a required interval needs to be defined. For LwM2M device, this is automatically set by the LWM2M agent based on the registration lifetime. However, if the value is set manually, it will be overwritten by the LWM2M agent after each registration or registration update. This behavior can now be disabled both globally or for specific devices, allowing users to define the required interval independent of the registration lifetime.

LWM2M agent can now cancel observations using the "GET with observe option" method

Previously, the LWM2M agent could only cancel observations using the “reset” method. With this change, the LWM2M agent can now also use “GET with observe” method to cancel observations.

LWM2M service security improvement to ignore packets from certain source ports

To improve security, the LWM2M service can now ignore packets from predefined source ports.

LWM2M write operation using "Partial Update" mode is now fully supported

Previously, the LWM2M agent supported write operations in “Replace” mode only. With this change, write operations can now also be sent in the “Partial Update” mode using the “writep” command.

September 12, 2024

Firmware list migrated to grid view

To improve the user experience and to ensure consistency, the firmware list has been migrated from a simple list view to a grid view.

Enhanced branding editor

The branding editor allows users to create a unique and consistent branding across their applications, improving the overall user experience and making it easier to align the application’s appearance with corporate design guidelines.

We have made significant improvements to our branding editor, offering a more robust and user-friendly experience for managing brand identity across multiple applications.

New functionalities:

  • Configure unique branding for individual applications
  • Create, maintain, and easily switch between different branding configurations
  • Edit branding JSON objects directly from the UI and add custom CSS
  • Import/export branding variants
  • Automatically invalidate cookie consents when updating privacy policies
  • Implement light and dark theme choices
  • Generate color shades based on primary brand color with fine-tuning options

Functional improvements:

  • More intuitive interface for managing brand identity
  • Enhanced flexibility in customizing and applying branding elements

Plugins without modules are now supported

To simplify plugin development and deployment, support for module-less plugins has been added. With this change, plugins no longer require a module to function, allowing to implement and deploy plugins more easily. This impacts plugin developers who can now create plugins without the overhead of a module and users who can benefit from a wider variety of available plugins that are simpler to install and use.

September 5, 2024

Added breadcrumbs to Streaming Analytics application

To improve the user experience and maintain consistency with the default Cumulocity applications such as Cockpit, breadcrumbs have been added to the Streaming Analytics application. You can use the breadcrumbs to easily navigate up the hierarchy.

Rename Analytics Builder models and EPL apps

To improve the user experience, the links in the model editor and EPL editor for renaming a model or EPL app have been renamed to Model settings and App settings. Previously, these links displayed the name of the model or app. These names are now displayed at the top of the editor page.

August 22, 2024

Cumulocity schematics now handle Angular standalone projects by disabling standalone mode

Previously, adding Cumulocity schematics to Angular projects initialized with the standalone flag set to true failed. This issue has been addressed. Now, when integrating Cumulocity schematics into standalone Angular projects, the standalone flag is automatically set to false. Full support for standalone projects will be implemented in future updates. This interim solution allows developers to use Cumulocity schematics with projects initially set up as standalone, though with standalone features disabled.

August 13, 2024

Moved Add asset module as a separate plugin into DTM plugins

The Add Asset module has been moved from the Digital Twin Manager (DTM) application to the newly created DTM plugins component. This component consists of modules from DTM as official plugins, enabling their integration into default and custom web applications. The Add Asset button will continue to be available in the standard DTM interface.

August 8, 2024

Added hook service for alarm details button and alarm list indicator

To provide more flexibility for customizing the alarm list and details views, hook services have been added for the alarm details button and the alarm list indicator. This change allows you to modify the rendering and behavior of these UI elements by implementing the respective hook service interfaces. Existing alarm list and details views are not affected by this change and will continue to work as before, unless you explicitly customize them via the new hook services.

August 1, 2024

Add acknowledgement of service terms to microservice upload dialog

To ensure users agree to the service terms for microservice deployment when uploading a microservice, a new text acknowledgment has been added to the microservice upload dialog.

Reset password on next login option is now the default if Password reset link as email is deselected

Previously, a new user received an email with a link to set their password. Now when the checkbox Send password reset link as email is cleared, the User must reset password on next login option is selected by default. This means the new user must change their password during their first login.

Concatenate each value type with a string type using the Expression block in Analytics Builder

The Expression block in Analytics Builder has been updated to allow you to concatenate string and non-string values, similar to EPL. This is useful, for example, if you want to specify an expression like the following: “The current temperature is " + input1 + " degrees Celsius”.

Specify maximum values for the Counter block in Analytics Builder

The Counter block in Analytics Builder has been updated to allow you to set a maximum value for each counter independently. This change was made because it was difficult and cumbersome to create periodic behavior in Analytics Builder, and it gives more control over counting in general. The following new parameters are available for this purpose:

  • Maximum Count (input field)
  • Loop Count (checkbox)
  • Maximum Number Same (input field)
  • Loop Number Same (checkbox)

The counter in question can then loop. Depending on the setting of the corresponding checkbox, the counter either resets its corresponding output port (Count or Number Same) to one, counting the first input after reaching the maximum value, or it stops counting when reaching the maximum value and must then be reset manually. For compatibility, the previous behavior remains as the default. Note that the Reset input port resets both counters. If this is a problem, you must use a separate Counter block for each counter. See the description of the Counter block for detailed information on the new parameters.

July 31, 2024

Automatic stop of permanently failing offloadings

Offloading pipelines may fail permanently, for example, due to an invalid offloading configuration or a wrongly configured data lake. In a future release Cumulocity DataHub will automatically stop permanently failing offloading pipelines.

July 30, 2024

Added support for device certificate authentication

Cumulocity now supports the ability to infer the full certificate chain from an intermediate certificate, enabling devices that are only able to send the device certificate to connect to Cumulocity. For full details refer to Device authentication.

July 25, 2024

Alarm list widget configuration now supports showing or hiding child alarms

The “Alarm list” widget is used to display alarms in dashboards and other places in the Cumulocity UI. Previously, child alarms were always shown which could lead to information overload for users monitoring many alarms. With this change, a new toggle has been added to the widget configuration which allows showing or hiding the child alarms in the alarm list. This provides users with more flexibility to customize the widget to their specific use case and makes it easier to focus on the relevant top-level alarms.

Cockpit application split into plugins

The Cockpit application has been split into further plugins. This allows admins to tailor the Cockpit application to their needs without any coding effort. They can now easily remove certain plugins and thus certain features which they do not want to include in their Cockpit application. The following plugins are now available:

  • Cockpit widgets: Angular widgets used in the Cockpit application.
  • Cockpit alarms: Alarms functionality in the Cockpit application.
  • Sensor phone: Wizard for connecting a smartphone to the platform.
  • Child devices: List view of children of devices.
  • Assets navigator: “Groups” navigation entry, allowing to navigate through an asset hierarchy.
  • Data point library: To define certain features of data points.
  • Bookmarks: To bookmark views.
  • Location: To view location of devices and assets.
  • Search: To search for assets.
  • Reports: Reports list and report items in the navigator.

New alarm and event selector available for custom applications

To enable application developers to more easily select alarms and events in their custom applications, a new reusable alarm and event selector component has been introduced. For details refer to the Cumulocity Codex.

July 22, 2024

Microservice name validation

Starting with Q1 2025, the Cumulocity platform enforces name and context-path manifest fields naming restrictions for custom microservice deployments. You can verify the correctness of your microservices by uploading them via the UI or REST API. If this is successful, your configuration is correct. For details on the name and context-path fields, refer to Microservice manifest > Settings.

July 18, 2024

Updated the section on internationalization in the Cumulocity Codex

To improve the documentation around internationalization, the “Internationalization” section of the Cumulocity Codex was updated. The changes provide more detailed information and guidance on how to handle translations and localization in applications. This impacts developers who want to make their applications available in multiple languages, giving them better resources to understand and implement internationalization best practices.

July 12, 2024

Remove the ability to explicitly set a password for a device user

To improve security, user administrators can no longer explicitly set passwords for device users. This change prevents an attacker from having access to all device users, in case the administrator account is compromised. In case of losing the device password, the device must be registered again.

July 11, 2024

Microservice manifest advanced user input validation

Making Cumulocity more secure we have added a check on upload to ensure microservice settings do not contain any line feed characters such as HttpGet, exec, and TCPSocket of type Probe, aligned with items in the Kubernetes PodSpec.

July 8, 2024

Moving SNMP documentation

The documentation of the SNMP device protocol has been moved from the user documentation to the public GitHub repository: cumulocity-examples.

July 4, 2024

Added default sample asset models to facilitate asset modeling

In the Asset model samples page, the “Wind Turbine” and the “Solar Power Plant” sample asset models have been added. These samples serve as an example to help you quickly get started with your own asset modeling.

June 27, 2024

Restricting access to Spring Boot actuator endpoints

API Change

Improving the security for the Microservice SDK we have decided to restrict the initial configuration of the Spring Boot actuator endpoints (POST access to the /loggers endpoint) to the administrator roles only.

Version numbers in Streaming Analytics application moved to platform details file

The version numbers for the frontend and backend are no longer displayed in the right drawer of the Streaming Analytics application. Instead, details on all components can now be downloaded via the Download platform details button. This change simplifies the UI for the majority of users.

June 20, 2024
June 18, 2024

Service-level agreement for Microservices deployment

The Service-level agreement for Microservices deployment now provides a more precise definition on what is included in the Microservice Hosting functionality for your custom microservices. It also describes how you can benefit best from the service.

June 14, 2024

Enhancement of Home page to support investigation of offloading status

The Home page has been enhanced so that you can investigate the current status of your offloading pipelines. The status includes which offloadings are currently running, which ones have recently failed, and which ones have completed successfully.

Exploration of additional result columns

The editor for managing additional result columns of an offloading pipeline has been enhanced with convenience tooling for exploring nested data. Using sample data retrieved from the corresponding Cumulocity base collection, you can interactively browse through the structure of the data in order to determine which specific sub-structure you want to offload.

June 11, 2024

Model editor in Streaming Analytics application displays only valid toolbar icons in read-only mode

Previously, icons that could not be used when a model was active (that is, in read-only mode) were shown as disabled in the model editor’s toolbar. To improve usability when in read-only mode, icons that cannot be used (such as the save icon) are no longer displayed in the toolbar.

Resizable description field for models in Streaming Analytics application

When adding a new model or when editing the name of a model in the Streaming Analytics application, you can now resize the Description field. This is helpful when editing or viewing a longer description, including the case of the samples that have very detailed descriptions.

June 10, 2024

Removal of Microservice API version 1 in Cumulocity SaaS instances and next yearly release 2025

As published earlier, see release 10.15, Cumulocity has announced the availability of Microservice API version 2 and the deprecation of API version 1 to comply with new security requirements. Microservice API version 2 provides an improved microservice container security context restricting the invocation of privileged Linux Kernel APIs. Today Cumulocity announces the creation of alarms when subscribing a tenant to microservices still using API version 1. In Q3 2024 Microservice API version 1 will be removed from Cumulocity SaaS instances and in the yearly 2025 release. If not done yet migrate your microservices to API version 2. Refer to Microservice migration to API version 2 in the user documentation to understand how to accomplish this. Otherwise your microservices in Cumulocity SaaS instances may stop functioning in Q3 2024 or in environments using the yearly 2025 release.

Deprecation of TrendMiner offloading mode

For the offloading of the measurements collection Cumulocity DataHub offers a TrendMiner mode, which is designed for the specific interaction with TrendMiner. This mode is deprecated and will be removed in a future release as the integration with TrendMiner will be discontinued.

June 6, 2024

Device management services functionality is now available as plugin

The services component was previously an integral part of the default Device Management application. With this change, the functionality for services has been modularized into a plugin. By default, users will still have access to services within the Device Management application. However, if not needed, the functionality can be removed by deactivating the plugin. This approach offers flexibility for users who may or may not require certain functionalities within the application.

Separated Advanced Software Management functionality as a plugin

The Advanced Software Management functionality was previously an integral part of the default Device Management application. With this change, the Advanced Software Management service has been restructured to function as a separate plugin. It remains included by default but now offers the flexibility to be added or removed as needed.

Alarms can now be referenced via a link

Previously, alarms could not be shared as they had no unique link to reference them, for example in mails or chats. With this change, each alarm gets an unique link. This allows to share alarms and navigate between alarms more easily.

Alert for long-running managed object operations

In some situations, managed object operations in Cumulocity could take an unexpectedly long time without providing any feedback to the user. For more transparency, an alert is now shown in the UI when a certain operation exceeds a specific duration.

Allow self-imported plugins to be added even if a user already has plugins

If a user upgraded one of the default web applications (for example, Cockpit) after it had been cloned, it would only include the plugins that the application had offered during the initial clone/installation of the application. If additional self-imported plugins were introduced in the upgraded version, these would not have been present when using the application.

This especially caused issues when features of applications which were previously present as standard Angular modules were migrated to self-imported module federation plugins, as these features were missing until the plugin was manually installed to the application.

To fix this issue, an exclude list for these self-imported plugins has been utilized, in addition to the already existing include list used for the usual plugins.

Asset selector shows the selected element by default

Previously, the asset selector did not show the currently selected element by default, requiring users to always manually search for and select the desired asset. With this change, the asset selector now automatically displays the selected element when opened. This improvement streamlines the user workflow by eliminating the need to repeatedly locate and select the same asset, saving time and effort.

Data grid now support expandable rows

To provide a better user experience when displaying hierarchical data in a data grid, expandable rows have been introduced. With this change, users can now expand or collapse rows in the data grid to show or hide nested information. This allows for a more compact and organized presentation of data, especially when dealing with complex hierarchies or large amounts of related information. The expandable rows feature seamlessly integrates with the existing data grid component, providing a consistent and intuitive way for users to interact with and navigate through the displayed data.

Documented shell application styling via plugins

Documentation has been added on how to style the shell application via plugins. For details, refer to the Cumulocity Codex.

Extended information on dynamic forms in Codex

The Codex documentation provides information about developing applications with the Cumulocity platform. To make it easier for users to understand and use dynamic forms in their applications, the Dynamic forms page in the Codex documentation has been extended. For details, refer to the Cumulocity Codex.

New dashboard manager with list of device type dashboards

A dashboard manager view has been added to streamline the management of device type dashboards. This view aggregates and displays a list of all dashboards assigned to specific device types. From this list, dashboard templates linked to device types can be viewed, edited by navigating to a particular instance and templates can also be deleted if needed.

Redesign of the alarms feature

As announced earlier, a redesign of the alarms feature has been introduced with both visual and functional enhancements.

Visual and UX enhancements:

  • The way alarms are displayed in the alarms view and widgets has been redesigned.

Functional improvements:

  • The alarms view now only shows one single list of alarms, in which filters can be applied.
  • A details section has been introduced which contains all information related to the alarm.
  • The functionalities of the “Alarm list”, “All critical alarms”, and “Recent alarms” widgets have been merged into a single, comprehensive widget called “Alarm list”.
  • The “Alarm list” widget has been migrated to Angular.
  • The real-time functionality has been replaced with an auto-refresh functionality.
  • Already existing widgets: “Alarm list”, “All critical alarms”, and “Recent alarms” will be automatically updated and migrated to the new version of the “Alarm list” widget.

Reports page extracted into a separate plugin

As announced earlier, the report module has been extracted from the Cockpit application and added as a separate plugin. This is a first step towards removing the reports module entirely and replacing it with the dashboard manager. This change might be a breaking change as the reports module is no longer a part of @c8y/ngx-components/context-dashboard, but is be part of @c8y/ngx-components/report-dashboard.

This change does not affect the layout and UX of the Cockpit application nor does it add any new functionalities. As a side effect, a performance improvement might be noticed as reports from now on will be loaded lazily (that is, only when users navigate to the Reports page).

Support for loading dynamic options from app-specific paths

To provide more flexibility for configuring applications, Cumulocity now supports loading dynamic options from application-specific paths. With this change, each hosted application will load its dynamic options from a path that includes the application context path. This allows application-specific configurations to be loaded dynamically. The Cockpit application would now load it’s dynamic options from: /apps/public/public-options@app-cockpit/options.json while it previously did so from: /apps/public/public-options/options.json. This change was done as a preparation for upcoming changes to the branding manager.

June 3, 2024

Removal of deprecated JWT login mode

JWT authentication with Cumulocity has been deprecated since release 10.6 and will be removed in Q3 2024 for the SaaS instances and in 2025 for the yearly releases. This authentication method is not to be confused with SSO (single sign-on) or OAI-Secure authentication, which are both recommended and still supported. This change will only impact you if your organization used an early version of SSO on Cumulocity. For customers on the public cloud instances we will get in touch with you if you are using this type of authentication. For self-hosted or self-managed instances you need to do the following: Ask your Operations team to run this script. This will verify whether any tenant collections have an authenticationProviders configuration and if any tenant has the tenant options configured with the category token.publicKey. If either an authenticationProvider configuration or the tenant option token.publicKey category exists this indicates that the deprecated JWT is, or was, used in the past. In this case you need to check your external services for use of the JWT authentication and change it to use either SSO or OAI-Secure. These two methods provide a better and more secure approach to authentication. These methods are documented here:

May 30, 2024

Additional columns in preview step of Import asset models

In the Import dialog for asset models, users can now see Child asset models and Asset properties columns in the preview step.

Improved dropdown for child asset models and asset properties

When adding child asset models or asset properties to an asset model, those already added will no longer appear in the dropdown list.

Updated labels for buttons

The following action button labels have been changed:

  • In the Assets page, Import assets has been changed to Import.
  • In the Asset Models page, Import asset models and Export asset models have been changed to Import and Export respectively.
  • In the Asset properties page, Import asset properties and Export asset properties have been changed to Import and Export respectively.
May 21, 2024

Replace device functionality available as plugin

The “Replace device” functionality is now delivered as a self-hosted plugin by the Device Management application. This way, the functionality can easily be removed from the application if not needed.

Additionally, the device replace wizard was made more extensible by introducing hookable interfaces (hookDataGridActionControls and hookService).

May 16, 2024

Support for OPC UA operations directly on generated devices

It is now possible to directly create operations for generated OPC UA devices. This does not apply to all OPC UA operations. Only node-specific operations can be executed on that level. General operations such as address-space scan are still only allowed on the OPC UA Server. An additional configuration (gateway.operation.validateDeviceOperationNodes) has been added to enable/disable a validation check if the node-specific operation is done on a node which belongs to the device. If the check is enabled the opcua-device-gateway executes the operation after validation. If the node doesn’t belong to the device node list an alarm is created.

Bookmarks available from User menu in Streaming Analytics application

The right drawer of the Streaming Analytics application, which is displayed when you click the User button, now includes a Bookmarks section. This means that the bookmarks you have added in other Cumulocity applications are now also available in the Streaming Analytics application, and you can now also add bookmarks for the pages in the Streaming Analytics application.

New EPL actions for creating and parsing the c8y_Position fragment

The ManagedObject event has a unique way of handling c8y_Position fragments that have the parseable float values added to their position property, and all other values added to their params property. All other events of the Cumulocity transport API simply add the fragment as a whole to their params property. This has made it cumbersome to robustly copy c8y_Position to a ManagedObject from another event and vice versa. To make this easier, two new helper actions have been added to the ManagedObject event to populate ManagedObject from a c8y_Position object, and conversely create the object from the ManagedObject event.

  • action setC8yPosition(any c8y_Position)

    This new action sets the ManagedObject using the c8y_Position object. This must be of the form dictionary<string, any>, but is validated prior to use. Example:

    on all Event(type="locationUpdate") as evt
    
    { ManagedObject mo := new ManagedObject;
      mo.id := evt.source;
      mo.setC8yPosition(evt.params.getOrDefault("c8y_Position"));
      send mo to ManagedObject.SEND_CHANNEL; }
    
  • action getC8yPosition() returns dictionary<string, any>

    This new action produces a c8y_Position style object from the ManagedObject. Example:

    evt.params["c8y_Position"] := mo.getC8yPosition();
    
May 13, 2024

New switch for disabling/enabling case-sensitivity in usernames

To enhance the user experience, a switch has been added to the authentication settings, which allows to disable/enable case-sensitivity in usernames. When the switch is turned on, username validation will now treat uppercase and lowercase letters as distinct, requiring users to enter their username exactly as it was set. This affects all users.

Deprecated hookDeviceGridAction has been removed

The deprecated hookDeviceGridAction has been removed. Instead the recently introduced hookDataGridActionControls should be used. It gives more control over data grid actions, such as allowing actions to be added to any data grid or to override existing actions.

April 26, 2024

Set supported Cloud Remote Access protocols using SmartREST

A new SmartREST template has been added. Using the template ID 150, it is now possible to set the list of Cloud Remote Access protocols supported by a device.

Reports page extracted into a separate plugin

In the upcoming version the report module is extracted from the Cockpit application and added as a separate plugin. This is a first step towards removing the reports module entirely and replacing it with the dashboard manager. This change might be a breaking change as the reports module will no longer be part of @c8y/ngx-components/context-dashboard, but will be part of @c8y/ngx-components/report-dashboard.

This change does not affect the layout and UX of the Cockpit application nor does it add any new functionalities. As a side effect, a performance improvement might be noticed as reports from now on will be loaded lazily (that is, only when users navigate to the Reports page).

April 25, 2024

Dynamic forms page in Codex extended with additional information

The Components > Forms > Dynamic forms page in the Codex has been extended with additional details and examples to better explain the concept and usage of dynamic forms.

Private smart rules no longer require the contextData property

In the past, private smart rules had the property contextData in c8y_Context, even if the rule did not use it. This is no longer required. Private smart rules can now be created without the contextData property, to avoid storing redundant data in the database. This change only affects the creation of new private smart rules. Existing smart rules are not impacted.

UI improvement for ordering of complex properties

Users can now order the complex property keys by dragging and dropping them using the drag icon which appears on hovering over the row.

April 4, 2024

Added support for retrieving JWT session token with X.509 certificates for devices

Support has been added for retrieving JWT session tokens with X.509 certificates via REST API for devices. For details, refer to the Device authentication user documentation.

Option to ignore case of username or alias on login

To simplify the login process, tenant administrators can now activate an option which allows users to log in with case-insensitive usernames or aliases.

ZIP option now available when building an application

It is now possible to build an application with the –zip argument. This will generate a ZIP archive which contains the application and its dependencies in addition to the regular build artifacts.

New utility functions for the EPL TimeFormat event library

The following utility functions have been added to the TimeFormat event library to help with comparing and manipulating datetimes. As with the existing functions, the new utility functions work for the local time zone, an arbitrary time zone and, where appropriate, the UTC time zone.

  • dateComponent: Gives the datetime for the previous midnight in the time zone at the given datetime.
  • timeComponent: Gives the number of seconds since the previous midnight in the time zone at the given datetime.
  • daysSinceEpoch: Gives the number of Julian days since the beginning of the epoch at the given datetime.
  • getOffset: Gives the offset in seconds of the time zone from UTC at the given datetime, taking into account any daylight savings that may be being applied.
  • getRawOffset: Gives the base offset in seconds of the time zone, that is, without daylight savings applied.

For example, there are two ways to check if it is midnight in your local time zone:

float now := currentTime;

// Method 1
if TimeFormat.dateComponent(now) = now
{
     // It's midnight.
}
// Method 2
if TimeFormat.timeComponent(now) = 0.0
{
     // It's midnight.
}

For usage information, see the API Reference for EPL (ApamaDoc). This is available in Apama 10.15.5.

March 28, 2024

Alarms redesign and improvements

In the upcoming version, a redesign of the alarms feature will be introduced with both visual and functional enhancements.

Breaking change

  • The AngularJS widget implementation is no longer available. To use the “Alarms” widgets in a custom application, users must import the AlarmsWidgetModule from @c8y/ngx-components/widgets/implementations/alarms. To use the new alarms view only, users must import the AlarmsModule from @c8y/ngx-components/alarms.

Visual and UX enhancements:

  • The way alarms are displayed in the “Alarms” view and widgets has been redesigned.

Functional improvements:

  • The “Alarms” view now only shows one single list of alarms, in which filters can be applied.
  • A details section has been introduced which contains all information related to the alarm.
  • The functionalities of the “Alarm list”, “All critical alarms”, and “Recent alarms” widgets have been merged into a single, comprehensive widget called “Alarm list”.
  • The “Alarm list” widget has been migrated to Angular.
  • The real-time functionality has been replaced with an auto-refresh functionality.
  • Already existing widgets: “Alarm list”, “All critical alarms”, and “Recent alarms” will be automatically updated and migrated to the new version of the “Alarm list” widget.

Angular 17 upgrade

In a future version, we will update Angular to version 17. This update brings improvements and new features but may also introduce breaking changes that could impact your existing implementations.

To ensure a smooth transition and help you to adapt your implementations, we will provide an upgrade documentation when this change happens. This documentation will help you navigate through the changes and update your codebase accordingly.

Dashboards redesign and improvements

In the upcoming version, we will introduce redesigned dashboards with both visual and functional enhancements as well as new functionalities.

Visual and UX enhancements:

  • We have redesigned the way dashboards are edited.

Functional improvements:

  • The lock/unlock feature has been replaced with an edit mode for better control and clarity.

New functionalities:

  • Possibility to enable and disable dashboard template for device dashboards.
  • Versioning to manage and track dashboard changes.
  • Edit mode with undo/redo functionality for flexible adjustments.

For details refer to Working with dashboards.

March 27, 2024

Advance notice of reduced storage limits for Notifications 2.0 and microservice-based data broker

Messages processed by Notifications 2.0 are stored persistently by the Cumulocity Messaging Service until they have been delivered to, and acknowledged by, all interested consumers. Likewise, messages processed by the microservice-based data broker are stored persistently until they have been delivered successfully to the destination tenant.

The current persistent storage limits for these services are considered too large for typical use cases, which can lead to excessive resource consumption and consumers being forced to process outdated messages after a disconnection.

Therefore, these limits will be lowered to better align with the expected usage patterns of the services.

These changes will take place not less than three months from the date of this announcement, on or after July 1st, 2024.

Message backlog quota

Persistent messages are stored in a “backlog” until they are received and acknowledged. The maximum size of a backlog is determined by the “backlog quota” limit, which directly affects the number of unacknowledged messages that can be stored and therefore the resource consumption of the platform. If the quota limit is reached, no new messages can be added to the backlog until some older messages have been consumed and acknowledged.

For Notifications 2.0, a separate backlog exists for every unique subscription name used with the /notification2/subscriptions API. This backlog is shared by all subscriptions using the same subscription name, and by all consumers attached to that subscription. For the microservice-based data broker, a separate backlog exists for each data broker connector.

Summary of changes to message backlog quota limits:

Service Current Limit New Limit
Notifications 2.0 2 GiB 25 MiB
Microservice-based data broker 2 GiB 50 MiB

For example, assuming an average message size of 200 bytes, each Notifications 2.0 subscription will be able to retain approximately 130,000 unacknowledged messages in its backlog. Similarly, each microservice-based data broker connector will be able to retain approximately 260,000 messages.

Message time-to-live

Alongside the backlog quota reduction, a new default message “time-to-live" (TTL) limit will be introduced. Any unacknowledged messages will be automatically deleted if they have been on the backlog for longer than the TTL limit. This policy helps to limit overall resource usage and reduces the need to process outdated data after a prolonged disconnection of a consumer or destination tenant.

Summary of changes to message TTL limits:

Service Current Limit New Limit
Notifications 2.0 ∞ (no limit) 36 hours
Microservice-based data broker ∞ (no limit) 36 hours

Additional details

The message backlog quota and TTL are configurable for each Cumulocity tenant. Message backlog usage will be monitored during the three-month transition period, to identify tenants that may exceed the new limits when they are enabled. The owners of such tenants will be contacted to understand their use cases and whether a non-default limit could be appropriate.

Please contact product support if you have any questions or concerns about these changes.

March 21, 2024

Improved button text in Cockpit setup wizard

The text on the button in the Cockpit setup wizard has been updated. This change improves the clarity and consistency of the text for users going through the setup flow.

Improved measurement display in Linear Gauge and Silo widgets

The measurement display line size has been increased in both the “Linear Gauge” and the “Silo” widget. This enhancement improves readability, making it easier for users to interpret measurements at a glance.

Improvements to input range component

The input range component (c8y-range) can be used to show a slider to configure a range. The styling and documentation for this component has been improved to better suiting the overall styling of components and forms.

Introduce service registry with a hook for registering services

To improve the management and discoverability of services in Cumulocity, a new service registry has been introduced allowing services to register with the platform via hooks.

EPL improvement to string.toDecimal() method

Previously, performing string.toDecimal() for a string with an invalid conversion resulted in a ParseException error. This now returns “0.0”. This was done to make the experience of using toDecimal() similar to using toFloat(). If you want the previous strict behavior, use decimal.parse() instead.

Paste the JSON code of an Analytics Builder model from the clipboard

In the Analytics Builder model manager, the Import model command in the toolbar has been changed to a dropdown menu. This dropdown menu contains a new Paste command. If you click this command and the clipboard contains valid JSON code for a model, a card for the pasted model is shown in the model manager. This change complements the accessibility enhancement that allows the JSON for an Analytics Builder model to be copied to the clipboard by allowing the JSON to be pasted back into Analytics Builder after any changes have been made. In addition, the dropdown menu contains an Upload command. This has the same functionality as the Import model command from previous versions. See also Pasting a model and Uploading a model.

March 14, 2024

Enhanced XSS protection in Asset notes widget

XSS protection has been enhanced in the “Asset notes” widget.

Improved JSDoc annotations

The JSDoc annotations have been improved. Changes include fixing broken links, updating outdated information, adding missing code snippets, and improving overall clarity. These improvements aim at providing developers with better references and guides when working with the Web SDK.

Improved sorting of properties in complex custom property in Digital Twin Manager

In the Subassets page of the Digital Twin Manager, the properties in the complex custom property were sorted alphabetically. Now, the sorting reflects the order specified by the user in the Digital Twin Manager.

Version numbers moved to the platform details file

The version numbers for the frontend and backend are no longer displayed in the platform UI. Instead, details on all components can be downloaded via the Download platform details button. This change was motivated by a component split resulting in many different components following different version number schemes. However, custom apps developed with the Web SDK may show a default version number if desired. Support requests should now always include the platform details information.

Consistent support of Enter and Escape keys

Improved the consistency of support of Enter and Escape keys (for save and cancel actions, respectively) on the following views: tenant details, user details, global role details, retention rule settings, branding configuration.

Improved context help in Subassets page

In the Subassets page, context help now provides more specific information if the displayed group is a smart group.

Improved information on "Use source timestamp" configuration

The user documentation and the tooltip for the “Use source timestamp” configuration have been improved to explain how the LWM2M agent makes use of timestamp information if reported by a device.

Migration of the Tracking tab to Angular

The Tracking tab in the device details has been migrated to Angular. The obsolete AngularJS module AssetTrack has been removed from the imports of the Device Management application (import @c8y/ng1-modules/devicemanagement-tracking/cumulocity.json). It is deprecated and will be removed in the future. With this change, an issue with incorrect results of custom date range filters has been fixed. Moreover, position marker popups have been made more informative.

Supported security modes retrieved dynamically from LWM2M agent

The supported security modes, which are available for selection on the configuration page, are now retrieved dynamically from the LWM2M agent rather than being hardcoded in the UI.

March 7, 2024

Obsolete AngularJS module AssetTrack (c8y.parts.tracking) has been removed

The AngularJS module AssetTrack (c8y.parts.tracking) has been removed as it is now considered obsolete. To include device tracking in your applications you can now use the Angular standalone TrackingComponent (@c8y/ngx-components/tracking) or directly provide the trackingFeatureProvider environment provider.

February 29, 2024

Copy the JSON code of an Analytics Builder model to the clipboard

In the Analytics Builder model manager, the Copy command has been added to the actions menu of a model. This is an accessibility enhancement that allows you to copy the JSON for an Analytics Builder model to the clipboard so that you can quickly paste it into a third-party editor. The JSON can then be read, for example, by a screen reader or in a higher contrast environment. The new Copy command is also available to read-only users. In addition, the Download command, which also appears in this actions menu, is now also available to read-only users. See also Copying a model and Downloading a model.

EPL events no longer throw exceptions from the isCreate and isUpdate actions

The Alarm, Event, ManagedObject and Operation events now no longer throw exceptions from the isCreate() and isUpdate() actions. If the event being checked was generated in EPL code, these two actions now simply return false. try ... catch blocks around these calls are no longer necessary if the event being checked was generated in EPL code. EPL code that uses these actions therefore behaves more robustly because it no longer throws exceptions that, if not caught properly, cause the monitor or app to terminate. In the unlikely case that the try ... catch block is used to intentionally check for internally generated events, you need to change the check to the following:

if not (evt.isCreate() or evt.isUpdate()) { ... }

New Analytics Builder filters for selecting the input source or output destination

In Analytics Builder, the dialog box that appears when you select a different input source or output destination for an input or output block now allows you to filter the entries that appear in this dialog box. By default, the dialog box displays all defined devices, device groups, smart groups and assets. This is the same as the previous behavior. If you also want to display other managed objects in the dialog box, you can now select the “Other” checkbox. See also Editing the parameters of a block.

Streaming Analytics microservices upgraded to use Red Hat UBI 9

The Apama-ctrl microservices now have Red Hat UBI 9 as their base operating system. Previously, this was Red Hat UBI 8. With version 9, security has been improved.

February 13, 2024

Switching to Linux cgroup v2

As announced earlier, see release 10.18, Cumulocity SaaS instances will gradually be switched to Linux cgroup v2 in the second half of the year 2024. Microservices must use a Linux cgroup v2 aware application runtime from then on. When executing microservices which are not compatible with cgroup v2 on Cumulocity in these versions it might happen that the information provided by the application runtime concerning available CPU and memory is not correct. This might lead to incorrect memory and thread allocation in the microservice container process.

cgroup is a Linux kernel feature to organize processes hierarchically and distribute system resources along the hierarchy in a controlled and configurable manner. Every process in the system belongs to one and only one cgroup. In Cumulocity cgroups are used to enforce container resource limits.

When using the Cumulocity Microservice SDK for developing microservices, ensure to configure a Java version which is cgroup v2 aware when building your microservice. When using Java 8, ensure to use openjdk8u372 or higher. When using Java 11, use Java 11.0.16 or higher, or use Java 15 or higher. When using a server runtime other than OpenJDK Java as microservice application runtime, refer to the documentation of the provider.

February 6, 2024

Improved information on LWM2M "Use source timestamp" configuration

The user documentation and the tooltip for the Use source timestamp configuration have been improved to explain how the LWM2M agent makes use of timestamp information if reported by a device.

LWM2M Time-to-Live duration for device operation realtime subscription

The LWM2M agent realtime subscription for device operations now has a limited Time-To-Live (TTL) duration. The default TTL duration is 3 minutes. This setting may be configured on platform level.

Option to disable LWM2M object default actions

The default handling of object instance actions for LWM2M objects 3, 4 and 6 can now be turned off. In addition, the default server-side firmware update state machine for object 5 can be disabled. These settings can be enabled/disabled in the device´s LWM2M configuration in the UI.

December 20, 2023

Improved change password behavior

The password can now only be changed by the currently logged-in user. Administrators can no longer change the password and email for other users.

Added information on restrictions to auto-registration of LWM2M devices

The auto-registration option in trusted certification does not support devices communicating via the LWM2M protocol. This information has been included in the tooltip on the Trusted certificates page and in the user documentation.

New "Replace device" options

In the Subassets view, a “Replace device” option is now available in the context menu of every supported device. Previously, the “Replace device” option was only available in the All devices page. Moreover, a Replace device button has been added to the “Device status” widget on the Info tab in the device details. This functionality does not support LWM2M devices.

New toggle for switching off empty data in LWM2M device protocol

For LWM2M devices, it is now possible to switch off the sending of empty measurement/event/alarm/custom actions data for individual resources. Moreover, you can toggle on/off or optionally skip empty values for all resources using the LWM2M device protocol at once.

December 14, 2023

Assign a location to an asset

A new default property “Location” has been introduced. Add the Location property to the desired asset model to assign co-ordinates or select the location on a map while creating an asset.

Default values of asset properties available in assets bulk import template

The bulk import template now shows any default values that are set for asset properties.

DTM version moved under Platform info section

The DTM version is now displayed in the right drawer under the Platform info section.

Immediate feedback from validation of Key field

During the creation of asset models, asset properties and assets, upon entering input in the Key field, if the value entered is invalid then an error message will be shown, and if the value is valid and all required fields in the form are filled, the Save button will be enabled - no need to click outside the field. With de-bouncing implementation, the API requests are triggered after a short delay following the last key entry, significantly reducing the frequency of calls and enhancing the responsiveness of the application.

Implemented ordering of key value pairs in complex property

Key value pairs in a complex property can now be ordered as needed by entering the desired order in the Order field.

Improved action buttons in Localization page

Realigned the edit and delete icons for translations in the Localization page.

Improved asset model selection dropdown with search option

A search function has been added to the asset model dropdown when creating new assets.

Improved readability in Localization page

Renamed the column heading Keys to Identifier and the column heading Terms to Translation in the Localization page.

Improved validation for number property during asset instance creation

Users now receive validation errors when incorrect exponential values for asset properties are entered in number type fields during asset creation.

Improved visualization of steps skipped during asset instance creation

Non-mandatory steps that are skipped during the creation of an asset instance are now distinguished by a grey-colored tick.

Modified DTM URLs to match naming conventions of DTM entities

DTM URLs have been modified to reflect the naming conventions followed for DTM entities.

Optimized network calls for assets and asset models

Optimized calls to the backend from the Assets property and Asset model page.

Role-based access for bulk import of assets

Access to the bulk import feature can now be controlled using Cumulocity global and inventory roles.

Saved filters for columns on Localization page

Filters that apply for columns in the Localization page are now saved automatically.

December 13, 2023
December 6, 2023

User administrator can no longer set password for other users

As announced earlier, see the release notes for release 10.17, to improve security, from a future version, user administrators will no longer be able to explicitly set passwords or email addresses for other users in the tenant. This change prevents that an attacker could have access to all users, in case the administrator account was compromised. Note that the administrator will still have the option to force the user to reset the password on the next login or disable the user.

Update of 3-party protobuf-java

In order to address security vulnerabilities (CVE-2022-3509, CVE-2022-3510, CVE-2022-3171), the third-party software “protobuf-java” has been updated from version 3.19.2 to version 3.19.6.

Improved performance of the Inventory API

The performance of the Inventory API GET /managedObjects has been improved.

Improved performance of GET requests on /user/users

The performance of GET requests on the /user/users endpoint has been improved.

Search for fields with null values now possible

The query language used by the managed objects API has been improved. You can now search for fields with null values. MTM-52677

Alarm status and severity now case-insensitive

The alarm status and severity are now case-insensitive. When searching by alarm status active the API also returns alarms with status ACTIVE. The same applies for the alarm severity, that is, searching for critical alarms also returns CRITICAL alarms. Alarms with status active and acknowledged are now subject of alarm deduplication.

Apama correlator version

This version of Cumulocity Streaming Analytics includes the Apama version 10.15.4 correlator. EPL apps developers should also refer to What’s New In Apama 10.15.4 in the Apama documentation.

Extended ExplainQuery result

The ExplainQuery result info has been extended by the algorithm used when performing queries for a user with inventory roles:

GET {{url}}/inventory/hierarchy/info/management

Example: {“algorithm”: “Legacy” }

Possible results: Legacy, LimitedSourcesAcl, PostFilteringBySourceAcl, SingleSourceAcl, HierarchyAcl, SingleAgentAcl, SingleDeviceAcl, SingleAgentAndDeviceAcl.

Basic diagnostics information

The EPL memory profiler snapshots, which were previously only included in the enhanced diagnostics information, are now also included in the basic diagnostics information. This is helpful in case a high memory usage alarm is raised when the Apama-ctrl microservice consumes 90% of the maximum memory permitted for the microservice container and you only have basic diagnostics information available. See also Downloading diagnostics and logs.

Renamed commands for downloading analytic models and EPL apps

The commands for downloading analytic models and EPL apps have been renamed from Export to Download. See also Downloading a model and Developing apps with the Streaming Analytics application.

New EPL sample

A new EPL sample named “Receive update notifications” can now be accessed from the EPL editor of the Streaming Analytics application. It shows how to write an EPL app that can distinguish between notifications for creating and updating managed objects, measurements, alarms, events, and operations. See also Developing apps with the Streaming Analytics application.

For more detailed information, see Receiving update notifications in the Apama documentation for the Cumulocity transport connectivity plug-in.

Latest measurement values can be stored as part of a device managed object

Feature preview
This feature is in Public Preview, that is, it is not enabled by default and maybe subject to change in the future.

Support of automated persistence of measurement values under the c8y_LatestMeasurements fragment has been introduced. If a measurement is created with a series that matches the configuration the device managed object is updated with the last series sent to the platform.

For details on how to enable the feature and how it works, refer to Managing data.

Receive input from all input sources

The Analytics Builder input blocks can now be configured to receive inputs from all input sources. You can simplify global tasks by creating a single Analytics Builder model that works with inputs from all input sources, for example, send an email for every critical alarm of type C8Y_TemperatureAlarm that is generated, regardless of the device that generated the alarm. A new All Inputs option is available for this purpose. When you add a new block to your model or when you edit the parameters of a new template instance, the All Inputs option is now set by default. See also Editing the parameters of a block.

You can also use the new All Inputs option in the replace dialog box when replacing input sources. Keep in mind that the replace dialog box is used for both input blocks and output blocks. So when you replace a device with the new All Inputs option, all matching output devices are automatically changed to trigger devices. See also Replacing sources or destinations.

A new Analytics Builder sample named “Aggregate measurements per input source” is now available, which creates new measurements that average the measurement values for each input source that has a specified fragment and series. This is a simple sample that creates a model without template parameters, so you can activate the model directly in the model manager. See also The Samples tab.

Planned change in full text search feature of Inventory API

As of a future version, the full text search functionality will only include the following properties:

  • _id
  • name
  • type
  • owner
  • external id

A text search functionality corresponds to a text parameter of GET {url}/inventory/managedObjects.

Example: When executing the following query: GET {url}/inventory/managedObjects?text=c8y_MajorDevice only the properties idnametypeowner and external id will be examined.

This change improves the user experience of the text search functionality by returning more relevant managed objects. At the same time it improves the Inventory API performance.

This change will be implemented after a 3-month period at the earliest.

Additional value types for the Constant Value block

The Constant Value block in Analytics Builder now supports float and boolean value types and can produce output of these types. This enables the block’s output to be consumed by other blocks that take input of type float or boolean like the blocks in the Logic and Aggregate categories. The Type parameter is also now optional. If a type is not selected, the type of the output value is inferred from the Value parameter.

Removing template parameters

In Analytics Builder, an icon is now provided for removing a template parameter from the Template Parameter dialog box. The actions menu (the three vertical dots at the end of a row) has therefore been removed. See also Managing template parameters.

New text index

A new text index has been introduced for the GET /inventory/managedObjects endpoint. By default it only includes the following fields:

_idtypenameownerexternalIds

Selection lists for template parameters

You can now create a selection list for an Analytics Builder template parameter. This allows the model author to provide a predefined list of values for the user to select from, ensuring that the user only enters the values you allow. You can define selection lists for types such as string, float, source or destination, or geofence and you can also select a specific value to be the default value. The values that you define for a selection list are then available for selection when you create instances of the model. See also Adding a selection list for a template parameter.

Missing subassets in a device group or asset hierarchy

Previously, when reactivating an Analytics Builder model, an error was thrown if a subasset of a device group or asset hierarchy from which the model receives events no longer existed in the inventory, for example, because a device was deleted. As of this version, missing subassets in a device group or asset hierarchy are ignored and an error is no longer thrown. However, if the deletion of a subasset results in an empty device group or asset hierarchy, an error is still thrown.

Removal of Machine Learning

As announced with release 10.16, the Machine Learning block in Analytics Builder has been removed. This is in line with the deprecation of Machine Learning Engine announced in release 10.16.

New sorting of Inventory API queries

If users do a search from the UI or via the Inventory API, the text parameters are now sorted by relevance making it easier to see the more appropriate data returned.

Cumulocity transport in Apama 10.15.4

The Alarm and Operation events have new constants which define the valid values for their respective status and severity members. This allows more robust coding and eliminates runtime errors caused by typographical errors with literal strings.

External token validation in single sign-on configuration

In the single sign-on configuration page, users can now enable and configure the external token validation process.

Enhanced Cumulocity transport in Apama 10.15.4 to reflect changes in REST API

Due to a change in Cumulocity announced with release 10.17, Apama 10.15.4 now explicitly sets withTotalPages to true for applicable requests.

Range-based queries (such as FindManagedObject) attempt to retrieve all resources matching the query parameters by default. Explicitly setting a value for currentPage or setting withTotalPages to false can improve the query performance by disabling paging. See the information on REST usage and query result paging in the Cumulocity OpenAPI Specification for more information.

HTTP client in Apama 10.15.4 supports truncating responses

The HTTP client comes with two new configurable options, maxResponseKB and maxResponsePolicy, that enable the user to restrict the size of the server response. These options can be set for the entire transport, or on individual requests. Support has also been added to the predefined event definitions (see Using predefined generic event definitions to invoke HTTP services with JSON and string payloads in the Apama documentation). This enables you to prevent large server responses from causing out-of-memory issues.

Enhanced OpenSSL command

The OpenSSL command for generating a “signed verification code” for Proof of Possession has been enhanced to include additional encoding functionality.

Copy of web applications with versions

It is now possible to copy web applications with versions (packages) and web applications with SHARED availability. For applications with versions, by default the application with the “latest” tag is copied. The new application has a single version and no tags. If you want to copy different versions of an application, you can specify the query parameters “tag” or “version” (only a single version). For details, refer to the Cumulocity OpenAPI Specification.

Version matrix for packages

The repository-connect microservice now offers to sync packages that include a versioning matrix which allows to filter exactly the versions to be synced. Versions which are not included in the matrix but uploaded to the platform will be removed by the microservice.

New filter option

Searching for items has been improved by filtering on applications, features, microservices and extensions lists.

EPL enhancements in Apama 10.15.4

String concatenation operator + supports non-string operands

If only one operand expression is of type string, then string conversion is now performed on the other operand to produce a string at runtime. For more details, see Additive operators in the Apama documentation.

New built-in convenience methods on string, sequence and dictionary

The EPL language has been enhanced with some convenience methods for common operations such as checking if a string or sequence contains a specified substring or item, and determining if a string, sequence or dictionary is empty.

There is a method to get a sequence value with a fallback default if there is no value at the specified index:

mySequence.getOr(100, "default value");

There is also a powerful regular expression group search for strings that finds the first match and returns the text captured by each “(…)” group of the regular expression:

// Prints ["Bob", "Eve"]
 print "Today Bob met Eve".groupSearch("([a-zA-Z]) met ([a-zA-Z])").toString();

The following table lists all new methods:

New method Description
string.contains(), sequence.contains() Determines whether the string or sequence contains the specified substring or item. This is a convenient alternative to checking the find() or indexOf() integer value.
string.groupSearch() Finds the first regular expression match in this string, and returns a list of the matched “(…)” groups.
string.startsWith(), string.endsWith() Determines whether the string has the specified prefix or suffix.
string.rfind() Locates a string within this string, starting from the right (that is, from the end) of the string.
string.substringFrom() Extracts part of this string, starting at a specified character and ending at the end of the string.
string.quote() Adds quotation marks and escaping according to the standard EPL event representation. This method may be useful for logging strings that may contain spaces and newline characters. This is the reverse of the existing string.parse() method.
string.isEmpty() Determines whether the string has a length of zero characters.
dictionary.isEmpty(), sequence.isEmpty() Determines whether the size is 0.
any.isEmpty(), optional.isEmpty(), listener.isEmpty(), Channel.isEmpty(), chunk.isEmpty() Aliases for the existing empty() methods on these types. It is recommended to use the new isEmpty() methods, but the use of empty() is not deprecated.
sequence.getOr() Gets the value at the specified index, or a specified fallback value if the index is not valid.

For more information, see the API Reference for EPL (ApamaDoc).

Support for negative indexes for sequence[…] access

Instead of throwing an out of bounds exception, it is now possible to refer to items near the end of a sequence by specifying a negative index. For example, seq[-1] gives the last item in the sequence and seq[-2] gives the item before that. Negative sequence indexes can also be used in the sequence.remove() and sequence.insert() methods.

Note that negative values cannot be specified when accessing a sequence item using the any.getEntry() method.

Mixed-type sequence and dictionary literals are now treated as <any> by default

It is no longer necessary to add an <any> cast around the first item in a sequence or dictionary literal that contains a mixture of different types. For example, the following sequence literal which produces a sequence<any>:

[<any> 12345, "a string"]

can now be written more simply as

[12345, "a string"]

This simplifies the functional example given in EPL enhancements in 10.15.3 in the Apama documentation: the <any> is no longer needed in the setFields call.

Discarding of unused return values

In EPL, it is now possible to discard the return value of a function or expression and not assign it to a variable. This is useful if you only want the side effects of the function and do not need the return value. Be careful not to discard a return value that indicates important conditions that your program may need to use.

Previously, you had to write:

any _ := Functional(newAlarms).map(Fn.getEntry("alarm")).map(allAlarms.append);

But now you can write:

Functional(newAlarms).map(Fn.getEntry("alarm")).map(allAlarms.append);

See also Using an expression as a statement in the Apama documentation.

Functional operators

The com.apama.functional.Fn and com.apama.functional.Functional events now have a new method mapKeys which can return a dictionary container with modified keys. For more details, see Functional operators in the Apama documentation and the API Reference for EPL (ApamaDoc).

Functional listeners

The functional onTimeout action now returns the wait listener it creates so that it can be quit if needed. For more details, see Functional listeners in the Apama documentation.

Handling uncaught exceptions

EPL monitors are no longer terminated by default when an uncaught exception is thrown in some cases.

Programming errors and unexpected data in incoming events can cause an uncaught exception in EPL. This causes the monitor instance to be terminated, rendering the application unusable. To provide a better experience, exceptions thrown from listeners and stream listeners which are not caught no longer terminate the monitor instance. Instead, they just stop the handling of the current event.

Developers are still encouraged to correctly catch and handle the exceptions in their EPL. If an exception is thrown and not caught, it is still possible for the events to be lost and not correctly handled.

This is a change in behavior. Some users may be relying on this previous behavior, in combination with an ondie() action. EPL with an ondie() action retains the previous behavior of always terminating the monitor and calling ondie(). If you must retain the previous behavior, you can add an empty ondie() action to your monitor.

Info
If you have an action that is called from within a stream query (for example, as part of a where or group by clause, or a window definition) which throws an exception, this still terminates the monitor instance.
Updated events in com.apama.cumulocity

To avoid confusion as to whether events were being sent towards Cumulocity or being received back as updates from Cumulocity, the Cumulocity event definitions API was changed in a previous release (10.5.2.0) so that the existing CHANNEL constant was deprecated and replaced by either SEND_CHANNEL or SUBSCRIBE_CHANNEL constants as appropriate. Some events were omitted from these changes and this has now been rectified. Therefore, the CHANNEL constant is deprecated on the following events:

  • SubscribeMeasurements
  • UnsubscribeMeasurements
  • FindManagedObjectResponseAck
  • FindMeasurementResponseAck
  • GenericResponseComplete
  • Subscribe
  • Unsubscribe

In addition, a new SUBSCRIBE_CHANNEL or SEND_CHANNEL has been added to the following events instead:

  • SubscribeMeasurements
  • UnsubscribeMeasurements
  • Subscribe
  • Unsubscribe

The constants on the following events are instead replaced with SUBSCRIBE_CHANNEL constants on their corresponding Response types:

  • FindManagedObjectResponseAck
  • FindMeasurementResponseAck
  • GenericResponseComplete

The API Reference for EPL (ApamaDoc) has been amended to make it clear that acknowledgement events are always received on the same channel as the corresponding response events, and to avoid confusion the CHANNEL constant has been deprecated on those acknowledgement events where it had been defined.

Package availability

To improve usability, the package availability (SHARED or PRIVATE) can now be set in the package upload wizard.

Removal of org.json dependency

The dependency on org.json:json has been removed from the Java SDK.

Removal of json-path dependency

The dependency on com.jayway.jsonpath:json-path has been removed from Java SDK.

Update on jetty dependency

Dependencies on org.eclipse.jetty:jetty-* were updated to version 9.4.51.v20230217.

Update on Sprint Boot dependency

The Spring Boot dependency has been updated to version 2.7.11.

Deprecation of the Microservice SDK for C#

With the introduction of auto-generated SDKs, we provide an always up-to-date developer library with the purpose to facilitate the development of Cumulocity microservices in different programming languages including C#.

The new auto-generated SDKs make our existing Microservice SDK for C# obsolete. For this reason, the Microservice SDK for C# has been removed from our public product documentation.

To learn more about using the auto-generated SDKs, refer to our respective GitHub repository.

Location view migrated to Angular

The location view in the Device management and Cockpit application has been migrated to Angular. The map provider, the location search, and the map layers are now configurable via application options or tenant options. The angular.js module @c8y/ng1-modules/devicemanagement-location for location was removed and must be migrated or at least removed on update of a custom build application.

New wizard for device replacement

In the Device management application, a wizard has been implemented which guides users through replacing a physical device with another one. The replacing device must be registered in the platform in advance and is removed after the replacement procedure has been completed.

Customizable dashboard in the device details

Users can now customize the dashboard on the Info tab in the device details. Widgets can be moved and resized, and new widgets can be added from a list of available widgets. The dashboard can be reset anytime to the default dashboard settings. By default, the “Asset notes” widget has been removed.

Removal of software item

If the last version of a software is deleted, the software is entirely removed from the repository.

New option to remove a file when updating file property

It is now possible to remove a file when updating its file property within a complex property of an asset.

Improved device registration process

If a pending device in the registration list has been accepted, the device is now removed from the list instead of the list showing the “accepted” status for the device.

Improved smart group filter layout

In subasset views, smart group filters are now represented by a filter chips dropdown instead of displaying the raw text filter.

Improved filter by software type

In the Software tab in the device details, currently the Filter by software type dropdown in the Installed software list and the Install software modal shows types based on existing types in the software repository. This has been changed to show only the supported software types announced by the device in its c8y_SupportedSoftwareTypes fragment. If a device has not announced supported software types, then again all available existing software types are listed.

Removal of deprecated device-grid model classes, column implementations and services

As announced earlier, see also release 10.17, shared classes, components and services from the @c8y/ngx-components/device-grid are deprecated. Those deprecated items have now been removed.

This change only affects you, if you or your development team use the Web SDK to extend Cumulocity UI applications or to build your own web applications. If you use the device-grid functionalities, check the deprecation documentation and alter your code accordingly. Refer to the deprecations in the WebSDK resources documentation for the device-grid service. Other deprecations for reference are also marked in this documentation.

New versioning matrix for blueprints/plugins

A versioning matrix can now be added to the cumulocity.json of a blueprint/plugin. When a blueprint/plugin is installed, its version is validated against the platform version. If the versions are incompatible a warning is shown.

Upgrade to Angular 15

The Web SDK has been upgraded to Angular 15.

Removal of deprecated implementations

In release 10.16.0.0, core re-usable data-grid-related components and services have been moved to the @c8y/ngx-components. The initial implementations were deprecated and have now been removed.

New activeClassName input in data-grid and device-grid components

A new activeClassName input has been added to the data-grid and device-grid components. It can be used to define a class name to be appended to the last clicked row in the grid. Its default value is “active”. This option can be deactivated by setting the input value to an empty string.

New filter dropdown in data grids

In the data grid component, a new filter overview dropdown has been added. It displays all active filters in one place and allows users to remove filters. For custom column implementations, the WebSDK allows developers to provide their own logic to display active filters as items in the filter overview.

Improved shell applications behavior

Shell applications now wait with their initial navigation until all plugins have been loaded. This allows, for example, to directly navigate via a link to a route which is provided by a plugin.

Data grid components return to first page after reload

Data grid components no longer persist their current page. After reloading they always return to the first page in the list.

Removal of references to deprecated classes

References to the deprecated classes ComponentFactory and ComponentFactoryResolver have been removed from the @c8y/ngx-components library.

Context path in the remotes application option

Scaffolding an application that uses the remotes application option via the c8ycli now also updates the context path used in the remotes application option.

Removal of Impact connectivity feature

The Impact connectivity feature has been removed from @c8y/ngx-components and @c8y/ng1-modules packages.

Improved behavior on plugin installation

When installing a plugin and the tenant has no custom applications, it is now possible to duplicate any existing application.

Fine-grained positioning of widgets on dashboards

The grid used in dashboards for placing widgets now supports 24 instead of 12 columns. This allows finer-grained positioning of widgets on dashboards. In case you share the same dashboards between different application versions, we strongly recommend you to upgrade to a version that includes the fix MTM-55923.

Improved error message on failure of device deletion

If a user with minimal permission tries to delete a device an error message showed up stating “Could not delete device.” Now, together with the failure message, the reason of failure is displayed.

Change aggregation for entire dashboard

It is now possible to change the aggregation for all widgets in a dashboard that support the dashboard context functionality at once. The following widgets support the dashboard context aggregation: Data points graph, Data points graph 2.0, Data points table.

Disabling OPC UA Server endpoint validation

The endpoint validation happening during the connection to an OPC UA server can now optionally be disabled. This can be done in the gateway configuration by changing the gateway.connectivity.validateDiscoveredEndpoints setting to “false”. Alternatively, it can be controlled via the OPC UA server managed object by setting the fragment validateDiscoveredEndpoints to “false”. For details, refer to OPC UA.

Support of HTML in input fields

To be able to provide more information in input fields on the expected input, dynamic form fields now support HTML markup in their description.

New configuration flag in LWM2M device registration settings for firmware reset

The configuration flag fwResetStateMachineOnStart has been added to control if the LWM2M agent resets the firmware update state machine on the client at the beginning of a firmware update. The default of this flag is true which matches the existing behaviour of the LWM2M agent. It is available in the device registration settings.

New static template 201

Added the SmartREST static template 201 for creating measurements with multiple fragments and series.

New static template 125

Added the SmartREST static template 125 for sending heartbeat from a device.

New static template 507

Added the SmartREST static template 507 for changing the device operations status from EXECUTING to FAILED. The operations can be filtered by type. The template is intended for facilitating an operations cleanup after a crash.

Changed form validation for assets defined via the Digital Twin Manager

If an asset custom property in the Digital Twin Manager application is declared as required and complex, all of its sub-properties are required too.

New shell commands

Two new LWM2M shell commands have been added.

  • The new executelegacy command allows LWM2M execute requests with non-standard LWM2M parameters. The behavior of this operation resembles the semantics of the existing execute operation until version 10.15.
  • The new coap shell command enables making raw CoAP requests to devices to facilitate non-standard communication in exceptional cases.

For details, refer to Handling LWM2M shell commands.

Disable/enable realtime for widgets on dashboard level

If a widget supports realtime, it can now be linked to the dashboard real-time context to disable/enable realtime on dashboard level. The following widgets support the real-time dashboard context: Data point graph, Data point table, Event list, Map.

Map shown for assets created in the Digital Twin Manager

If a complex location property is set in the Digital Twin Manager application, the map is now visible in the asset view and users can select a location on the map.

Improved performance of migration operation

The performance of the migrateLwm2mDevices operation has been improved. New command line arguments have been introduced with the operation. A list of legacy LWM2M devices can be specified directly from the shell command. Moreover, the migration of the LWM2M client registration objects can be skipped by using an argument.

For details, refer to Migration of the LWM2M devices. [DM-1866]

New LWM2M configuration tab

The details of a LWM2M device now show a LWM2M configuration tab which replaces the LWM2M bootstrap parameters tab. The new tab is better structured and allows detailed configuration. It contains all configuration options of the former LWM2M bootstrap parameters tab as well as additional setting options:

  • LWM2M device settings such as awake time registration parameter, request timeout, serialization format, binary delivery encoding, use timestamp resources, keeping old values
  • Device security modes selection including the new X.509 certificate mode and selection for LWM2M bootstrap and server individually
  • Firmware update configurations
  • A set of LWM2M Server configurations that can be written to the device during bootstrap

For details, refer to the LWM2M user documentation.

If the new LWM2M configuration tab is not displayed and the LWM2M bootstrap parameters tab is displayed instead, the LWM2M agent is installed in an older version that does not yet support the new tab.

Customizable home dashboard

The Device management home page now also provides a customizable dashboard which lets users add customized widgets.

New filter option in the datapoint selector

The asset selection in the datapoint selector is now filterable.

Introduced required parameters in the Alarms, Events, Measurements APIs

As announced earlier, see also release 10.17, at least one query parameter limiting the affected data will now be required to prevent accidental deletion of too many objects during a bulk delete operation. This change affects the following APIs:

  • DELETE /alarm/alarms requires at least one of the following parameters: source, dateFrom, dateTo, createdFrom, createdTo
  • DELETE /event/events requires at least one of the following parameters: source, dateFrom, dateTo, createdFrom, createdTo
  • DELETE /measurements/measurement requires at least one of the following parameters: source, dateFrom, dateTo

New time ranges for exports

The following time range options have been added to the export configuration: “Last 24 hours”, “Last 7 days”, “Last 30 days”.

X.509 security mode support

LWM2M device connections with X.509 certificates are now supported. The X.509 security mode can be selected separately for the Bootstrap server and the LWM2M server either during device registration or, for existing devices, by using the new LWM2M configuration tab. The Certificate Authority that issued device certificates must be added and enabled in trusted certificates in the tenant.

Together with this change also the following changes are introduced:

Separate security mode for Bootstrap and LWM2M server

Now all LWM2M device security modes can be selected separately for Bootstrap server and LWM2M server connections. This can be defined either during the device registration or using the LWM2M configuration tab of the device.

Disable authentication for Bootstrap or LWM2M server

Under Connectivity in the LWM2M configuration tab, the Bootstrap or LWM2M server connection can be disabled for a device.

PSK-generated option for LWM2M server security mode

During device registration, the “PSK generated” option can be selected for LWM2M Server connection to make LWM2M agent to generate the PSK ID and PSK key credentials for the device. These will be set to the device during the bootstrap process. For details, refer to the LWM2M user documentation.

MongoDB Java driver version upgrade

The MongoDB Java driver has been upgraded to the latest version 4.10.2.