CHANGELOG
All notable changes on Thinger.io will be documented here.
Release Date: 19-09-2023
Added
- Support for HTTP_HOST and HTTPS_HOST environment variables for HTTP requests over a proxy.
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.
Release Date: 04-07-2023
Added
- Widgets now have a "Show Offline" parameter to "turn off" the widget if the data is not recent.

Show Offline Configuration based on Timespan.

Widget displayed as "Disconnected".
- 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
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.
Alarm Rule Configuration- 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.

Alarm Instances
- Support for cloning almost any thinger.io resource, from dashboards to data buckets, file storages, and projects.

Clone Resource Functionality
- HTTP endpoints now support embedded NodeJS 🧑💻 scripts for custom payload processing when calling third-party services.

HTTP Endpoints with custom NodeJS Payload processor
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
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!image|690x254
- 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.image|690x97
- 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.image|672x500
- 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.
- 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 overimage|182x135
- Protocol column now displays the connection securityimage|351x171
- Error/Info messages on mobile viewimage|399x191image|402x196
- "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.

image|569x164
- Resource ID is also displayed on mobile view
- Set Type, Set Group, and Set Projects do not require a list refresh.
- 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
andunlock_sync
methods. Each lock acquires a fixed number of slots if they are available.

image|412x499
- 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.

image|475x107
- Product APIs can now target a script function for its destination and include additional placeholder data from properties or other device APIs.

image|582x454
- 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!🧑💻image|232x500
- 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
- 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.
- File Storage explorer does not download binary files automatically when clicked, it just displays a download button:
- Storage API now determine if a file without extension is
text/plain
orapplication/octect-stream
to set the correctcontent-type
on HTTP response - Add option
rewrite_base_path
to avoid base path rewrite in plugins reverse proxy - File Storages can now be opened with VS Code when the plugin is installed
- Support for limiting range selector on dashboard (i.e., allow only relative and/or absolute range selection).image|609x305
- 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
- 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 installimage|615x500
- 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.image|616x500
- 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
- Bucket view now display tag values in the first columnsimage
- 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
- Support for switching projects in the mobile viewimage
- Show dashboard name on project dash instead of the default navigation barimage|572x133
- Project dashboard switch when the user is not a member
- Open Graph support for title, description and image, configurable for each brand, i.e., when sharing a link over a social network.image
- Bucket data viewer now includes a filter by timeimage
- Set project dialog now keeps previous assigned projects on the resourcesimage
- 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 resourcesimage
- 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'image
- Console rebrand based on new image/logo, including emailsimage
- 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
- Support for multiple time series sources on time series widgets, i.e. charts, html time series, and maps.image
- Add new "Product" section to allow defining device profiles, that will help when managing devices at scale.image
- 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.image
- Dashboard support for buckets with tags.image
- New role named "Domain Admin", with the ability to manage developer/members inside the specified domain(s).image
- 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 dashboardsimage
- 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
- Initial version for OAuth2 Client authentication flow, i.e., connecting third party apps like Alexaimage
- New plugin: HTTP Device, supporting scaling HTTP devices deploymentsimage
- Hide Menu option for membersimage
- 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 > Deploymentimage
- Now it is possible to configure X-Frame-Options, to allow adding iframes on known pages. Available on Host Settings > Deploymentimage
- 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 descriptionimage
- 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.image|690x306image|690x306
- A problem with
PATCH
andPUT
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 loginimage|690x83
- Configurable dashboard for each project, shown by default after the member login or project selectionimage|581x106
- Console interface adapts to member permissions, hiding non-available actions or sections.
- Accounts management now allows changing per-user account limits (dashboards, devices, etc.)image|690x390
- Configurable Bucket data retention policy per-user account and default setting.image|690x64
- Impersonate functionality to check other accounts easily from admin accountimage|690x390, 100%
- 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