CHANGELOG
All notable changes on Thinger.io will be documented here.
Last updated
All notable changes on Thinger.io will be documented here.
Last updated
Community Release Date: 17-06-2024.
Private Servers Release Date: 20-06-2024.
Products
🗺️ Products now include a new functionality to configure how devices should be displayed on an Assets Maps widget, including icons, background colors, labels, and extended information when the icon is clicked. It supports conditional icons and background colors according to the latest bucket data, property values, or device status.
📡 Initial support for Device events as a source for Product resources (properties, buckets, endpoints), i.e., for reacting to device connection events.
🧩 Initial support for multiple data sources on Product properties, i.e., listening for different events/resources to update a single property.
🔄 Initial support for Product properties PATCH to allow partial updates.
📥 Initial support for property data fetch on Product property, endpoints, and buckets template payloads. For example, it can be useful for modifying incoming bucket data based on device configuration.
Other
📊 New Assets Table widget to display device information in a table, with the possibility to export data to a PDF report, CSV file, and filter and sort columns. The asset table can merge multiple pieces of information from each asset, i.e., from device state, buckets, or properties.
🔔 New notification icon to stay updated on the latest news in the Thinger.io ecosystem, like server updates, new library releases, etc.
🔒 Support for enabling legacy TLS protocols (TLS v1.0 and TLS v1.1) by reducing OpenSSL security level. This can be useful to support connectivity with old devices not supporting newer TLS versions. It can be configured under Cluster Host > Settings > SSL Certificates.
👥 Enable configuration for setting additional members and roles on project claims.
🔌 Devices services configured over Products will now use a configurable range of ports. This will simplify on-premise setup and speed up service access, as there will be no need to manage firewall rules dynamically.
🛠️ Product profile resources now simplify the payload configuration, by allowing the selection of the source event, source payload, or a template payload. It also allows defining a custom payload processing function that is easier to configure than the current {{payload:fn}}
definition.
✅ Schema validation error messages both on API and server logs.
📉 Reduce required buffer size for each connected device.
📈 Increased maximum dynamic buffer size, supporting larger message sizes.
🔄 Product API Resource responses can now use template placeholders, including properties or other API resources.
📝 Improved claim resources landing with more informative messages.
🛠️ Send device_state_change
after product initialization.
🛠️ Installing development plugin versions.
🛠️ Bucket export download URL for buckets updated from a Project Member.
🛠️ Inside and outside expression comparators on alarms.
🛠️ Potential socket leak if the client did not try to perform the TLS handshake.
🛠️ Console permissions when a developer/admin closes an external project.
🛠️ Dashboard widget on community server not allowing to select a value.
🛠️ Dashboard not showing configurable time selector.
Community Release Date: 18-04-2024.
Private Servers Release Date: 30-04-2024.
Devices associated with a Product can now display bucket data directly from their pages, under the menu option called "Buckets". Each device can now list all the associated buckets and will filter out its data in the Data view. In future releases, we will add options for exporting, importing, and clearing data. This opens the possibility to avoid sharing raw bucket data with project members, and effectively grant access only to their device data. With this feature, permissions are granted at the device level, with permissions like ViewDeviceBuckets, ReadDeviceBucket, ReadDeviceBucketTag, and ListDeviceBucketTags.
Introduced two new specific permissions for listing and reading bucket tags:ListBucketTags
: Allows listing of bucket tags.ReadBucketTag
: Allows reading of individual bucket tags. Previously, these operations required the more general ReadBucketConfig
permission. This change provides more granular control over permissions.
Claims now support including additional projects on the claim process. This way, claimed resources can be added automatically to parent "global" projects that can be used to manage the resources with different profiles.
Projects can be configured to limit bucket data access based on project devices. This functionality is useful for displaying aggregated data on the project dashboard or for restricting data access to project members. Additionally, this option can be set in the claim settings, ensuring that member projects are automatically created with this access limitation in place.
Device Tokens are now available for MQTT and HTTP devices, as they can have regular API resources over a product.
Improved
Templating system (used on products or endpoints) can now process placeholders with spaces.
Internal LRU cache with a modern and safer implementation.
Removed unused 'curl' dependency on the base image, slightly reducing image size.
Fixed
MQTT and HTTP devices can now also devices Device tokens via GUI, as they can define API resources over Products.
Problem when removing nested resources, i.e., Bucket exports, Project Members.
Bucket exports should not display set projects and clone context actions.
Bucket exports not loading by default.
Apex Chart Widget preview preventing dashboard from being saved.
Apex Chart Widget series colors are not being updated when the widget has titles.
Problem when updating device locations.
Community Release Date: 08-04-2024.
Private Servers Release Date: 15-04-2024.
Brand PWA configuration includes support for uploading app icons directly from the filesystem. It also allows the configuration of both 'maskable' and 'any' icon purposes. Fixes https://github.com/thinger-io/thinger-server/issues/84
Brand Share Image includes support for uploading an image directly from the filesystem.
Brand Logos are now served from web server instead of a JSON config, which should reduce load time.
Brand PWA "start_url" to make the console installable on Chrome.
Products can now be configured to resend device data to a given endpoint. For example, fetch a given resource every n seconds, or take data from a topic, and resend it to another service.
Products can now configure bucket tags to be used on the automatic initialization. Fixes https://github.com/thinger-io/thinger-server/issues/81
Products can now handle Resource Streams, i.e., to create custom profiles for HTTP devices.
Endpoint call event now provides context about the caller.
Add some resources cache for a better performance on massive endpoint calls and bucket writes.
HTTP devices have been migrated to a new connection schema where it is possible to log their statistics, like bytes sent, received, and connections, as any other MQTT or IOTMP device.
HTTP devices can be used now used inside dashboards with resources defined at product level.
Device property selector for HTML widgets allows selecting any parent node (with nested values), or all property values by not selecting any field. Fixes https://github.com/thinger-io/thinger-server/issues/16
Property PATCH now supports regular JSON for partial property updates. Fixes https://github.com/thinger-io/thinger-server/issues/16
Brand icons and logos are now served from filesystem instead of data url, improving page load.
Dashboard HTML widgets from external storage no longer require public storage access. In the case of members of a project, they will require read access to the storage.
Product properties, topics, resources, and functions can be generated now by calling a product function.
Product bucket writes can now override tags values based on the write payload. Previously, tags like device were always being set by the product, discarding any "device" field present on the payload.
Compatibility with OpenSSL 3.0 on SSL certificate provisioning.
IP Geocoding automatic updates.
Apex Charts widget colors do not honor time series color configuration.
Binary data on a product payload is not processed correctly.
Visual Studio Code not opening the file storage correctly.
Products with just "run" resources were not displayed on the API explorer.
Product profile list for buckets, endpoints, auto provision and api resources were displaying always "Property" instead of the resource type.
Info page display on empty or restricted resources.
Statistics on sockets count.
Release Date: 11-03-2024
Property Forms 📝 : Allow creating custom forms for improving the user experience when setting values inside a property, i.e., when configuring a device. The form can be defined at Product level, and it is currently supported by Formly.
Property Location 📍: Location properties now display a map for picking the address directly from the map or via a search bar for using an address. Once an address is selected, it automatially fills the coordinates and timezone.
Dashboard Functions ⚡: Dashboard now supports creating custom functions for processing any data used in dashboard, i.e., for changing units, cropping decimals, or filtering values. Conversion functions can be selected on the data source configuration.
Dashboard Placeholders 🏷: Dashboard now supports settings placeholders from a fixed value, or a device property. Placeholders can be used in a any string field on the dashboard, i.e., titles, units, or even inside functions to change the functions behaviour depending on current device configuration.
Dashboard Property Button 🆕 : New "Property Button" widget for opening device properties for its modification, even if they have a Property Form defined.
Dashboard Group Widget (BETA) 🔠 : New Group Widget that brings the possibility to add any number of widgets inside a parent widget.
Dashboard Property Table (BETA) 🔠 : Introducing a new widget that enables quick editing of properties for a device or a set of devices. This widget includes various built-in controls such as text display, input text, input number, slider, color selection, switch, a save button, and an edit button. These elements can be configured in each column to patch a single property value.
Claiming Feature☝️: The Claiming Feature is a versatile and user-friendly tool designed for administrators to configure and expose a selected number of resources, such as devices, for end-user claiming. This feature enables administrators to effortlessly set up various resources which end-users can subsequently request. Upon a successful request, these resources, like specific devices, are automatically integrated into the end-users' accounts. This streamlined process not only enhances user experience by simplifying resource acquisition but also provides administrators with efficient control over resource distribution and management.
One of the key strengths of this feature is its flexibility in claiming methods: users can initiate a claim through a directly generated URL, by scanning a QR Code, or by using a specific Claim Code:
Once claim is completed, the process may request the configuration of the devices, i.e., via the Property Forms defined on the product.
Configurable Brand Accounts👨💼: We've introduced a new "Accounts" section for each brand. This enhancement allows more control over brand-specific behaviors, including:
Cross Sign-In Control: Decide whether users registered with one brand can log in to another, enhancing security and user management.
Public Sign-Up Options: Choose whether to allow public sign-up for each brand, providing flexibility in user onboarding.
Automated Role Assignment: Set specific account roles for users who register through public sign-up, such as automatically assigning 'member' status for device claiming purposes.
This update offers more customization to better align with your brand's unique operational needs.
Configurable Brand Scripts 🖥️ : We've rolled out an exciting update: you can now configure custom scripts for your brand's index.html. This enhancement is perfect for integrating tools like Google Tag Manager and monitor your customers traffic.
New Permissions 🔒: Console is introducing an array of specific new permissions, enhancing the granularity with which administrators can control member access and actions within the console. This update distinctly separates permissions for actions performed through the API from those executed directly on the console interface. In the current version, all existing permissions will continue to function as before. However, future updates will require the explicit assignment of 'View' permissions to maintain the access level. This change lays the groundwork for more precise and customizable user role management, ensuring enhanced security and efficiency in operation. At this moment they are partially released for Devices, but will be covering the whole console in future updates.
Updated Editors 👩💻: Now editors are based on Monaco (the editor from Visual Studio Code) with support to maximize the editor and copy the contents:
New Icon Picker 🦄 : There is a new icon picker with much more variety of icon and improved search capabilities.
Double click on Widget now opens the Widget editor!
Create and update properties performance
Time series data should not present data wraps anymore.
Internal Google Maps loader to potentially avoid multiple loads.
Buckets API query now supports "group_by" parameter.
Move Swagger to an Angular component. New url https://console.thinger.io/swagger
Initial deprecation of InfluxDB v1
Widget add time series automatically selects a different name and color for each series.
Dashboard source switching now allows switching between bucket tags, with minimum and maximum selected tags.
Dashboard internals.
Push button widget not working on mobile devices.
Real-time dashboards now work properly with project members and shared dashboards.
Fixed the issue where the dashboard widget with device resource data source was showing offline, despite the widget receiving data.
Deletion event not triggered for nested resources, i.e., device property.
Creation event not triggered for property resources.
Data bucket storage from Products using device resource with fixed interval randomly stop writing.
Add Syncs to the tokens actions.
Dashboard editing not being disabled on non-active tabs.
Token configuration was missing the description field.
Delete resource from console sending parameters like index, count...
Partial migration from AngularJs to Angular 17
Update OpenSSL to versión 3
Update Boost to 1.83.0
Update Mongoc to 1.25.1
Update Mongocxx to 3.9.0
Update Crypto++ to 8.9.0
Release Date: 30-11-2023
Fixed
Issue while displaying default project on member accounts.
Reset password not working for some email addresses.
Release Date: 24-10-2023
Added
Support for HTTP_HOST and HTTPS_HOST environment variables for HTTP requests over a proxy.
Support for disabling HOSTNAME resolutions on installed plugins, i.e., useful for plugins that requires querying external public IP (like FTP).
Improved
Prevent large navigation breadcrumb overlapping the right menu button.
Fixed
Device link to a Product web page not working on mobile devices (on the aside menu).
Error while updating account limits.
Support for 303 HTTP See Other status.
Release Date: 04-07-2023
Added
Widgets now have a "Show Offline" parameter to "turn off" the widget if the data is not recent.
Product API Response can now be sourced directly from a function.
Product API Response can now be sourced directly from an IOTMP resource.
Improved
Internal HTTP client stability.
Fixed
Problem while counting active alarm instances on the menu.
Alarms not triggering notifications on creation when it has immediate activation.
Alarms not allowing to select hours as reminder intervals.
IOTMP with multiple property stream subscriptions.
Products not processing API Responses payload configuration, but returning just the original payload.
Input template params to Product API Request targeting functions not being correctly processed.
Plugins that require a MongodDB user to interact with the database fail to upgrade.
Dashboard widget settings being closed when removing widget background.
Release Date: 19-06-2023
Discussion Topic: Thinger.io Community
Added
New Alarms feature ⏰ (BETA)! A completely new solution for managing IoT alarms, which includes rule definitions, and alarm instances management. Some key features of the new solution:
Multiple data sources for configuring alarms triggering include data buckets, device properties, and device state.
Multiple severities: High, medium, low, none.
Independent activation and normalization conditions, including confirmations based on timespan or a number of consecutive events.
Multiple endpoint notifications on activation, normalization, or reminder., i.e., for sending an email, a message to mobile, etc.
Alarm instance management via Acknowledge, Shelve, Latch, or Clear, including reactivation timeouts and operator annotations.
Support for cloning almost any thinger.io resource, from dashboards to data buckets, file storages, and projects.
HTTP endpoints now support embedded NodeJS 🧑💻 scripts for custom payload processing when calling third-party services.
Improved
The bucket list automatically refreshes the bucket state, i.e., when finish exporting or importing, which happens on a clone operation.
IOTMP proxies now work correctly with TLS endpoints.
HTTP over IOTMP now correctly supports WebSockets.
Resource list and navigation:
It is possible to change the maximum number of elements to display per page.
Page navigation/sorting is not reset after entering one element and going back to the list.
Changelog is now available at https://docs.thinger.io/server/changelog.
Fixed
Remove project properties and project roles from the database on project deletion.
The bucket field selector now displays an input text for manually selecting the fields if the latest values cannot be queried, i.e., when they are older than one week.
Double loading of HTML widgets when the dashboard is open.
Proxy configuration was not displayed correctly if the source was different than TCP.
Bucket export list not being displayed under some circumstances.
Resource lists on the front-end not showing correct permissions on members.
Prevent members navigate to specific resources if no permissions are available.
UpdateDevice permission on front-end.
Release Date: 12-04-2023
Timestamp on HTTP device callbacks from HTTP plugin
Release Date: 10-04-2023
Discussion Topic: Thinger.io Community Forum
Added
Included support for installing Products over plugins. Now, there are some Shelly devices added to the plugins Marketplace. We will grow it soon! Looking for contributors and partnerships!
Initial support for devices auto-provisioning over products. It is currently based on the device id but will include other features like white lists, manual approval, etc.
New Plugins Marketplace based on a monorepo repository: Thinger.io Plugins. It will allow better maintainability, and simplify new contributions!
Initial Plugin Exporter feature inside Products. This way, a Product can be easily converted to a Plugin. enhancing user contributions.
Device type to "device_authentication_failed" event.
Avoid creating a Docker network if the plugin does not run a task (i.e., products).
Plugins marketplace on frontend, with better image alignment.
Permissions assigned to user File Storages are 1000:1000, so they can be easily edited over plugins, i.e, in Node-Red, VSCode, Juypyter plugins, etc.
Plugin files copied on installation now have 1000:1000 permissions, so, they are modifiable over plugin shells.
Bucket exports showing duplicate columns
Domain creation when setting a name
Temporal restore of default IOTMP buffer size until IOTMP-Websocket supports growing buffers
DynamoDB (community buckets) bucket projections when using reserved keywords
Null/false on bulk bucket writes when using tags on topic placeholders
DynamoDB (community buckets) bucket projections when using non-alpha characters
Bulk bucket writes are now also supported from products
Release Date: 06-03-2023
Center images on dashboard image widget.
Remove undesired console.log used in development
HTML widgets from file storages may fail to load
Dashboard add widget modal closes when adding new background color
DynamoDB can now use field projections from dashboards to save bandwidth
Reduced dashboards max chunks fetch to support large datasets on DynamoDB
Daily Data transmission on device Status (For MQTT and IOTMP)
Computed data transmission for current and past days
Big logo shown on shared dashboards
Problem when converting certain InfluxDB data back to JSON.
Maximum message size for IOTMP/MQTT devices.
Fix SSL certificates provisioning on instance startup.
Plugin Environment variables not initialized on upgrade.
Dashboard error popups hidden on device dashboard.
Menu on mobile not responding to first touch event.
Disconnect mechanism after server restart. It should correctly handle device disconnections and its events.
Discussion Topic: Thinger.io Community Forum
Infinity scroll on mobile view.
Support for bulk data bucket writes, i.e., [{"ts": 1675360078000, "val1": 0, "val2": 1},{"ts": 1675360088000, "val1":1, "val2":3}]
. Only working on private instances at this time.
Clock icon display full time when the mouse is over
Clock icon display full time when the mouse is over
Protocol column now displays the connection security
Error/Info messages on mobile view
"Never" is shown again when the device has not been connected
Resource inspector not opening
Minor bugs
Bucket import error reporting
Plugins logs not working with the latest Docker versions
Locks not deleted when Sync is removed
Scrollbars on left menu and content are now overlay scrollbars with auto hide.
Action buttons are now displayed on the left on desktop view.
Resource ID is also displayed on mobile view
Set Type, Set Group, and Set Projects do not require a list refresh.
Discussion Topic: Thinger.io Community Forum
Support for ARM64 (Raspberry Pi, Apple M1, Apple M2).
New 'Syncs' feature inside the Toolbox section: Semaphores for distributed IoT devices that can be used for bandwidth limiters, access control, max number of devices doing OTA, etc. This feature can be used both from API or IOTMP devices using new lock_sync
and unlock_sync
methods. Each lock acquires a fixed number of slots if they are available.
New Content-security-policy HTTP header configuration on Cluster Settings > Deployment.
Products can now target a File Storage for its script (still under testing). It will automatically load the index.js
script on the Storage.
Product APIs can now target a script function for its destination and include additional placeholder data from properties or other device APIs.
Product APIs with Property as its target (the property was not written).
Exception when TOKEN
is not provided.
Installed plugins are now automatically updated on impersonation changes.
UI with better support for mobile devices. Will be released as an APP. Still under development! 🧑💻
Base Docker Ubuntu version from 20.04 to 22.04
Updated OpenSSL version from 1.1.1m to 1.1.1t
Updated Boost version from 1.78 to 1.81
Updated mongoc version from 1.20.0 to 1.23.2
Updated mongocxx version from 3.6.6 to 3.7.0
Updated CryptoPP from 8.6.0 to 8.7
Updated Jemalloc from 5.2.1 to 5.3.0
Updated Maxmind from 1.5.2 to 1.7.1
SSL automatic updates
Search any field on resource lists via API, i.e., email on user accounts.
Internal configurable parameter "certificates.min_certificate_validity"
Validate sort and order query parameters on resource listing
Database initialization for users without an initial password
Device access without permissions, i.e., from a member
Bucket clear error
Remove export create log
Bucket export with custom date interval does nothing.
Difference transformation without aggregation provoked an error.
Representation issue on dashboard when setting absolute timeframe after a relative timeframe.
New setting on Dashboard control allow to hide hours from absolute date range picker.
Aggregated dashboard time series queries that includes a transform (i.e., a difference or derivative), now automatically expands the query interval (lower bound) to display the expected range displayed on the UI.
Date-time selector now relies on datetime-local HTML5 component, removing some issues related with previous date-time picker.
Access tokens without a project should not limit accessing to project resources
Discussion Topic: Thinger.io Community Forum
Experimental IOTMP Proxies (TCP/HTTP) for connecting with device local network resources, i.e., devices/routers webpages, terminals, RDP, VNC, etc. These proxies requires new IOTMP client library for Linux.
Example of the IOTMP Linux Client working on a RevPi, providing access to device configuration over the local web page:
Support for defining Web Services inside Products
section. It allows defining web pages that can be accessed over an IOTMP linux client.
Ability to create project members directly from the "Add Member" section, creating the user automatically by providing only the email address.
Each project can now define a set of Project Roles that can be used by any member within a project.
Each developer/admin account can now define a set of Global Roles that can be used by any member within any project. For example, a general purpose read role that can be shared in all projects.
Project member permissions can be now established by roles in addition to custom member permissions, simplifying permissions management. All global roles, project roles, and custom permissions can be established together (if required).
Members will go to the first allowed section after login or refresh, instead to the default Project Dashboard, i.e., devices or dashboards if they do not have access to read project dashboard.
Device resource streams includes now different signals: start, stop, data, and error (on IOTMP devices), in order to keep track of streams.
Device Terminal now supports multiple concurrent sessions (with the IOTMP linux client).
Server can now use wildcard certificates, stored as *.mydomain.com
on the certificates folder. Provisioning wildcard certificates over Domains section is not possible.
Internal socket server can now filter socket connections based on IP address. Used at this moment internally for proxies security.
Very high loads over websockets could cause a crash under some circumstances.
Automatic transition to newly created resources when they are nested more than 2 levels (i.e., while creating a new project member).
Potential crash with multi-thread product initialization at startup.
Switching between projects, or opening/closing projects reporting forbidden under some circumstances.
Set projects displayed on proxies (proxies does not support projects).
Missing selectors when configuring specific token permissions, i.e., over a proxy.
Access Tokens now are limited to the project scope where they are defined.
Payload not being sent on IOTMP devices.
Discussion Topic: Thinger.io Community Forum
Storage API now determine if a file without extension is text/plain
or application/octect-stream
to set the correct content-type
on HTTP response
Add option rewrite_base_path
to avoid base path rewrite in plugins reverse proxy
Discussion Topic: Thinger.io Community Forum
Support for limiting range selector on dashboard (i.e., allow only relative and/or absolute range selection).
Screen helpers for all resources on Thinger.io, with links to documentation, API, features, etc.
Location set from a device property now overwrites geo-ip location, and:
Trigger device_location_changed
event with new location
Execute the Geofence configuration to trigger any action based on location change
Fixed location is now displayed correctly on Assets Maps
Fix Bucket query when fields contain a path with dots, i.e., environment.temperature
Discussion Topic: Thinger.io Community Forum
New administration feature called 'Proxies' (starting on MEDIUM instances), which allows creating custom proxies to plugins or local services, i.e, redirect TCP or UDP traffic to Node-RED (for example, for COAP devices), or provide access to local InfluxDB2 install
New plugin InfluxDB2 (starting on MEDIUM instances, as it requires Proxies feature). It supports accessing the InfluxDB2 GUI and API for custom configurations, dashboards, alerts, ingestion, etc.
A plugin install can now initialize any resource in the console, i.e., InfluxDB2 plugin automatically initializes a proxy
Plugins can now be defined without a task, i.e., the InfluxDB2 plugin does not deploy any additional container
Swagger API Generation (tested on proxies API)
Plugin installs from File Storages
Left menu now correctly displays the current selected plugin
Some fixes on dashboards using image widget and map widget with geofences
Devices API v2 not respecting the v2 specification (wrapping response inside 'out')
Loading bucket data view without access to bucket config (required for loading tags information), i.e., when a member does not have permissions for ReadBucketConfig
Plugins API now supports "id" query parameter, required for Plugin selector
Discussion Topic: Thinger.io Community Forum
Bucket view now display tag values in the first columns
Buckets data query API now supports a new query param 'fields' for selecting specific fields from a bucket, i.e., ?fields=temperature,humidity
Buckets data query API now includes a v2 endpoint removing unnecessary 'val', or aggregation/transformation name on each measurement.
Dashboards now select only required fields from a bucket, improving bandwidth/resources for buckets with several fields
Bucket view now auto-resize columns according to the content size
Bucket view now display a 'Loading' overlay while fetching data
InfluxDB2 performance by relying on InfluxQL queries when possible
Grafana plugin is now able to automatically configure data sources (both InfluxDB1 (compatibility) and InfluxDB2)
Map widget initialization when the map is placed on a dashboard tab
Fix problem while installing plugins on small instances
Discussion Topic: Thinger.io Community Forum
Support for switching projects in the mobile view
Show dashboard name on project dash instead of the default navigation bar
Project dashboard switch when the user is not a member
Discussion Topic: Thinger.io Community Forum
Open Graph support for title, description and image, configurable for each brand, i.e., when sharing a link over a social network.
Bucket data viewer now includes a filter by time
Set project dialog now keeps previous assigned projects on the resources
Full support for new time-series backend: InfluxDB2
Server API updates with support for querying branch information and statistics from localhost
Landing pages for each resource type, providing information and links to resources
Support for launching processes inside plugins and get the command response over http/websocket
Shell over a plugin instance is now executed inside the plugin container (using exec)
Shell over a plugin now adapts to the original terminal size
Show page title according to navigation state, i.e., 'Devices | esp32 | terminal'
Console rebrand based on new image/logo, including emails
InfluxDB2 queries performance when using 'heavy' buckets with multiple tag values
Data bucket import now excludes empty or null values
Internal proxies to plugins, required for supporting latest Grafana version and its security requirements
Plugins can now (and should) set image version inside the task.image field (i.e. grafana/grafana:8.5.4) , so it can be decoupled from plugin version
InfluxDB2 + Grafana integration, with automatic source configuration on install
Console terminals now uses a custom user-friendly scrollbar
Dashboard view on mobile when controls are enabled (timespan selector and aggregation)
Mobile navigation when clicking on menu or showing tables
Data bucket viewer now display local time instead of ISO date on bucket entries.
Better compatibility for showing last update timestamp on dashboard widgets (even time series charts)
Using 'password' type on account management
Fix tachometer widget scaling and value update
Multiple dashboards queries on dashboards when using buckets with several tags values
Undesired timestamp plot on time series chart when no field mapping is present on the widget source
Slider widget malfunction when setting step width smaller than 1.0
Dashboard aggregation controls shown on community version (only supported on private instances)
Console terminal not releasing window
Plugin markdown not shown
Migration to new dashboard sources not working correctly on control widgets
Download bucket exports not working on the community
Problems with device terminals after the 4.0.0 upgrade
Search by id or name problem after introducing 'domain' on resources
MQTT Fix potential crash with malformed inputs
Email fixes when using multiple brands and multiple email servers
Discussion Topic: Thinger.io Community Forum
Support for multiple time series sources on time series widgets, i.e. charts, html time series, and maps.
Add new "Product" section to allow defining device profiles, that will help when managing devices at scale.
It supports updating device properties from MQTT topics / device resources
It supports defining buckets from MQTT topics/device resources
It allows creating custom device APIs for MQTT/HTTP/IOTMP devices.
Add support for processing data payloads with NodeJS runtime.
Add support for defining per-product dashboard, which is inherited by each device. Devices now automatically open the product dashboard if it is available.
It adds another property hierarchy for devices, with this order Product > Type > Group > Device.
Data buckets now supports tags: multiple data from the same type can be stored in the same bucket.
Dashboard support for buckets with tags.
New role named "Domain Admin", with the ability to manage developer/members inside the specified domain(s).
Initial support for device shadow information, i.e., being able to display last stream data on a dashboard even if de device is disconnected.
Add new Inspector tool for any resource, so, it is possible to see live Events related to monitored resources, i.e., MQTT live data sent by a device.
Disabling a device from its settings disconnects the ongoing connection.
APIs now support additional content-types: messagepack, cbor, ubjson, and form data.
Support for InfluxDB transformations on dashboards
Support for MQTT retained messages
Aggregated data in dashboards now use browser timezone to display data correctly.
Device API now lazy load device resources when clicked, useful for devices with several resources.
Device API now keeps track of opened resources when refreshing the API with the button.
Tokens and Device Tokens can be easily copied with a button.
Allow plugins to update current token permissions.
Auto-hide track waypoints on map widget depending on map zoom level.
Bucket data view now displays the real field case on the columns.
Brand email configuration not working properly
Profile Settings link not working
Buckets source switch not working when changing from a device resource to anything else
Disabling a bucket was not stopping a device resource streaming properly
Closing hosts dashboard throw error on console
Resource selector not taking the correct selected id when using similar ids
Device event 'device_authentication_failed' not throw
Device enable/disable setting not working properly
Fix Device API curl example when body request is 'false'
Endpoint HTTP request body editor not showing until 'Test' section is opened
Fixed butter-bar not showing while loading pages
Fixed Image/MJPEG widget not updating images or updating after modifications
MQTT client timeout not being used
Updated OpenSSL version from 1.1.1j to 1.1.1m
Updated Boost version from 1.75 to 1.78
Updated mongoc version from 1.20.0
Updated mongocxx version from 3.6.2 to 3.6.6
Updated CryptoPP from 8.4.0 to 8.6.0
Discussion Topic: Thinger.io Community Forum
Initial version for OAuth2 Client authentication flow, i.e., connecting third party apps like Alexa
New plugin: HTTP Device, supporting scaling HTTP devices deployments
Hide Menu option for members
Improved HTML Widgets with support for custom AngularJS directives!
Opening restricted link will redirect to the target url after login
Support for disabling Swagger API pages. Available on Host Settings > Deployment
Now it is possible to configure X-Frame-Options, to allow adding iframes on known pages. Available on Host Settings > Deployment
Endpoints have optional field name for displaying & search purposes
Dozens of new server events that can be used with Node-RED, i.e., any resource create/update/delete.
API Endpoint '/v1/server/events' to query all available server events
API Endpoint '/v1/server/assets' to query server assets types
API Endpoint '/v2/users//events' with support for registering/unregistering server events, providing commands feedback.
Brand configuration for web metadata like keywords and description
Access tokens now provides a field with the hostname for easier cloud integration
Devices can now be enabled or disabled from settings
Dashboards refresh buckets and properties sources in real-time
Removed "#!" from URLs. Previous URLs are still valid
Platform security by preventing refresh token re-usage
Improve refreshing token mechanism on frontend (avoiding multiple queries)
Internal event system is now much more flexible and fault tolerant
Show server version option in custom brand configuration
Set Project button not showing sometimes while changing between projects
Add resource button with broken layout when switching to a project with some selected items
Server not registering above 50 MQTT listeners after restart
Password update from users section not triggering internal event for database update
New instances not showing Hosts section after initial deployment
Time series chart with absolute dates not working
Set project dialog not showing Project selector under some circumstances
Access token link not working on shared dashboard settings
Device connection event trigger order on reconnection when 'reusing' credentials
Server Event 'device_state_listener' not triggering with MQTT devices on disconnect
Support for branding on login form, signup, forgot password, etc. It is possible to set background color, image, location of the forms, and hide public signup.
A problem with PATCH
and PUT
methods on properties, causing issues with Project dashboards or slider widget.
Groups section in console should be working now for members with allowed permissions
Fix Set Project
menu button for types and groups.
Assets menu now behaves correctly according to member permissions
Configurable default project for members after login
Configurable dashboard for each project, shown by default after the member login or project selection
Console interface adapts to member permissions, hiding non-available actions or sections.
Accounts management now allows changing per-user account limits (dashboards, devices, etc.)
Configurable Bucket data retention policy per-user account and default setting.
Impersonate functionality to check other accounts easily from admin account
Support for linking dashboard widgets to another dashboard
Websocket support for IOTMP and MQTT devices
Support for selecting timestamp as field from bucket data
Dashboard background now supports HTML color, i.e., #aabbcc instead of an url image
Improved
Keep menu and sub-menu items as "active" respecting the hierarchy
Refactored bucket layout section with different sections grouped by functionality
Hide project column when there is some project selected in the console
Hide "ugly" resource names when navigating on resources inside a project, i.e., user.device
Increased keep alive tolerance for better device connection stability
Disable close project button for members
Fixed
Apex Charts color contrast in title, subtitle, and axis labels
Device creation error when switching from Generic to HTTP after filling some fields
Bucket download links for community buckets exported to S3
Disable internal database creations for members
Bucket export state when export fails
DB error while updating a device without stats
Invalid property update event when modified from dashboard slider (or PATCH REST API)
Disable property creation when parent resource does not exists
Added
New HTML widget for its use with time series data (i.e., display tables)
Current HTML widget now supports multiple values to be selected
Fixed
Install/upgrade custom plugin version
Geofences not working for some polygons
Fix led colors editor (each color in a single row)
Set X and Y axis limits on time series charts to prevent freezes with wrong values
Fix a problem with min and max y-axis on time series chart when set to zero
Fix legacy bug regarding buckets query & merging
Allow to modify an existing widget type
Fix template replacement when using {{}} as pattern
Improved
Starting a plugin will show its log by default (some plugins require boot time, so this provides feedback to user)
Plugins with master or latest tags will force an update when installing or upgrading
Security when mounting volumes insides plugins
Added
Apex Charts are now available (in BETA)!
Add aggregation based on client browser timezone
Allow MQTT 3.1 client connections (in addition to 3.1.1)
Initial support for VSCode plugin (starting from Medium instances). Contact us for more details.
Added openapi.json to support restish
Add support for displaying last known location of a device on map
Improved
Show plugins in menu only if the plugin is running to avoid confusion
Assets Map widget options are now more legible with different backgrounds
Upgraded widgets buttons
Dashboard error handling with time series chart
Thinger.io Docker image is now smaller
Plugins engine now supporting installs from Storages, setting custom user, etc.
Fixed
A problem with instances using the server "www." subdomain.
Storage editor not opening due to Chrome security fix
Added
New widget "Assets Maps" for viewing all assets by type/group in map, with search capabilities.
New widget "Source Switcher" acting as previous template feature: allow to change the device/bucket within a tab.
Add support for disabling fullscreen button on widgets (@rin67630) .
Add an option in the shared dashboard settings to automatically update the permissions from the shared link.
Add support to modify min row height in dasbhoards.
Buckets can now support an asset type and group.
Add an option for setting asset types and groups for devices/buckets creation and from its settings/lists.
Devices can hold now a friendly name, i.e., a serial number, plate id, etc.
Support for creating new accounts (members and developers) without a password. The user will be required to initialize the password via email.
New page that allows the developers/members initialize their accounts passwords.
Support for multi-brand email templates and servers. Brands can now define its own emails templates and custom mail servers for communicating with users.
Added email template editor and mail server settings inside Brands section with options for template testing.
Add STARTTLS support in SMTP for old servers not supporting direct SSL/TLS connections.
Improved
Changed legacy email templates.
SMTP interface will correctly send the From Name.
Users without a verified email address, can verify it automatically after initializing/resetting its password (which requires an email).
All source selectors will display the friendly name of the resource, i.e, friendly name of a project, device, bucket.
Search supports now both search by id and friendly name in all resources.
Control Widgets (buttons/sliders) now supports mapped values (i.e., a field inside a resource).
Removed
Email communications when bucket export, clear, and delete succeed/failed.
Google Vector Maps by default in dashboards, as they were not enough performant.
Fixed
Swagger API rendering problems. Now it is completely usable again.
Tachometer widget when setting major axis to 0 (@hjfosse).
Fix case search root resources (domains, hosts, brands, etc.).
Fixed an error while removing panel title and subtitle (not updating).
Cropped aggregation menu from charts widget when the chart was smaller than the menu.
Fix chart aggregation menu padding hiding right selector border.
Fixed some problems when loading multiple maps on dashboards.
Core
Propagate websocket proxy error to caller in clustered deployments.
Asset types and groups are automatically created in the device/bucket creation (from API).
Updated OpenSSL version from 1.1.1h to 1.1.1j
Updated Boost version from 1.74 to 1.75
Updated mongoc version from 1.17.1 to 1.17.4
Updated mongocxx version from 3.6.0 to 3.6.2
Updated CryptoPP from 8.2.0 to 8.4.0
Updated MaxMindDB from 1.4.3 to 1.5.2
Added
Initial support for columns sorting in all console lists (devices, buckets, dashboards, etc.)
Add support for configuring axis on chart widget
Add support for setting placeholders in widgets title and subtitles
Add support for showing last widget update
Improved
Forgot, login, change password and signup forms metadata for improved browser compatibility
Fixed
Device tokens not opening under some circumstances
Email settings not being updated
Properties listing on types and groups (removed Source column)
Legacy PSON error while decoding uint64_t values
Core
Upgrade nlohmann JSON to 3.9.1
Experimental support for IOTMP protocol on private instances that will allow:
Clients running on different languages (currently C++, Node.JS, web). Support needed for Python, Java, etc.
Resource Path Parameters
Custom return code for HTTP methods
Publish/Subscribe to MQTT topics
Listen to server events
Remote Shell on Linux
Added
Add dashboard 'Developer' tab in settings showing source config, so users can share, copy, or edit dashboards from editor.
Add dashboard tabs, so, one dashboard can contain multiple tabs with different names and icons.
Add dashboard widget: push button (on only while it is pressed).
Add support for nested values on endpoint templates, i.e., {{location.lat}} {{location.lng}}
Add role field in accounts list showing: Admin, Developer, and Project Member.
Add icon color on progressbar widget.
Add inner icon size for button widgets.
Add full screen mode for properties editor.
Add brand config for show/hide support links and server version.
Improved
Dashboards settings are split on three different tabs.
Map widgets loading & initialization, now using vector maps instead of raster.
Disable popup exit when clicking outside, (i.e), when editing a property.
Font Awesome icons can be defined now as 'fas fa-...' to allow other styles (i.e. regular icons 'far fa-...').
Led indicator colors now works with boolean values (as 0, 1) (thanks rin67630).
Property list does not wrap source or time. Improved mobile view.
Tachometer widget now appears correctly centered inside widget.
Fixed
Bottom shadow on button widget.
Core
Updated server Docker base image to Ubuntu 20.04
Updated SSL version to 1.1.1h
Updated C++ Boost library to 1.74.0
Updated MongoDB to mongoc 1.17.1 and mongocxx 3.6.0
Reduce Docker image size: ~6MB
Added
Add (BETA) support for "template" dashboards, which allows switching resources (devices/buckets) directly from the dashboard.
Add template settings in dashboards.
Improved
Improve UI by adding icon according to its type to resource selectors.
Improve messages in dashboard when the device is not available.
Fixed
Fix JSON validation problem when creating tokens under some circumstances (i.e., from Dashboard with device properties) (thanks rin67631).
Fixed
Change device credentials not working properly (thanks rin67630).
Map size on load.
Remove plugin problem.
Removing user account did correctly clean all user plugins.
Bug with passwords being too long
Improved
Disable console being embedded into an iframe for security reasons (Clickjacking)
Added
Add support for users with role 'Project Member', specially useful for end users
Project Members are not limited with the regular max user license limit.
Project Members customizes the menu, hiding features not available for end-users
Add support for setting custom profile picture, removing the Gravatar approach.
Add support for changing roles to accounts between user, admin, and member.
Improved
User deletes now correctly erases all buckets, running plugins, and other critical resources associated to the account.
Token and members permissions with the possibility to set wildcards on actions, i.e., List*, Read*, etc.
Adding a member to a project now displays a selector with search capabilities (for admins).
Fixed
Batch users removal.
Fix removing properties from types, and groups after its deletion.
Fix restart other hosts in the cluster from Cluster Host Admin.
Remove bucket exports after bucket deletion.
Remove contextual "Set projects" button on resources that does not support it.
Avoid sending current project params on requests that does not support it.
"Close" project after account logout.
Other minor UI fixes.
Added
Add support for defining assets types and assets groups.
Add support for defining geofences, at device, type, and groups levels.
Add support for showing geofences in device overview.
Add support for "inherited" properties in devices from its assets types and groups.
Viewer for assets types, groups and all assets in map.
Generated device tokens points to the custom instance, so Mobile APP can be used with private instances.
Contextual menu on device list supports changing its type, group, and project.
Contextual menu on any other resource supports changing its project.
Resource lists show now the current project of each resource. Also type/group for devices.
Improved
Map widget contains more features, like show track route, default zoom level, map type, path color, show waypoints, default location, show geofences, or hide default Google Maps control.
Dashboards show now the dashboard name in the page title to differentiate several dashboards open.
Now it is possible to do insensitive case searches in lists or other resource selectors.
Property selectors now apply filtering at DB level when searching.
Fixed
Some problems with maps not loading property or showing "ghost" markers.
Printing nested values, i.e., location.lat, from buckets onto a dashboard.
Fixed properties listing for devices with same root identifier.
Fixed bucket export listing for buckets with same root identifier.
Minor bug fixes and improvements
Fixed
Brand limitation was not applying correctly
Updating a device property from a shared dashboard
Added
Add plugin settings for enabling public access to them (useful for plugins managing its own authentication like Grafana)
Add support for writable filesystems on plugins (useful for installing plugins, i.e, inside Grafana)
Add changelog viewer
Fixed
Fixed plugin management control states
Fixed Dashboard switch button when modifying a value from a property
Minor bug fixes and improvements
Security
Fixed plugins privileges when running a shell over a container. Now all containers run with UID and GUID 1000.
Added
Admin section "Cluster Hots", supporting viewing all Thinger.io nodes in the cluster, and:
View host resources in real time, like connections, CPU/RAM usage, etc.
Configure Thinger.io: HTTP Server, Thinger Server, MQTT Server, Email, Buckets, SSL Certificates, Accounts, Deployment and Restart Server
View host logs in real-time
Brand support for PWA (Progressive Web Applications), setting theme color, icons, App name...
Dashboard settings:
Now supports dashboard backgrounds
Now supports setting round corners on widgets
Allow alpha widgets, setting colors like "#000000aa"
Allow hide header with a shared dashboard
Fixed
Timezone update in settings
Date visualization on buckets according to timezone
Complex object visualization on buckets
Dashboard edition on mobile;
File Storage explorer does not download binary files automatically when clicked, it just displays a download button:
File Storages can now be opened with VS Code when the plugin is installed