New features:
- Remote commands for actuators, see the CAN actuators guide and the SOME/IP guide.
- Network agnostic data collection and actuator commands.
- SOME/IP support, see the SOME/IP guide for data collection and commands, the Device shadow proxy for SOME/IP guide, and the CAN over SOME/IP guide.
- String datatype support for both sensor data collection and actuator commands.
- Last Known State (LKS), a lighter method of data collection.
- Custom functions in expressions.
- Store and forward, for conditional upload of collected data.
- UDS DTC data collection.
Breaking changes:
- The
collectionSchemeListTopic
,decoderManifestTopic
,canDataTopic
andcheckinTopic
config fields are deprecated. If a config file has any of them, they will be ignored. Now FWE defaults to AWS reserved topics without needing any additional config. If you still need to customize the topics you can set the prefix using the newiotFleetWiseTopicPrefix
field. - Only affects existing iWave and Android instances: Replaced the CAN-based
CustomDataSource
implementation with the new Network agnostic data collection approach for custom data sources. Existing iWave and Android instances will need to be re-configured and have changes made to their decoder manifest to use this new version.- For iWave devices, see the iWave guide.
- For Android (including AAOS), see the Android guide.
Bug fixes:
- MQTT connection fixes:
- Retry MQTT topic subscription when it fails. When FWE starts up, it tries to establish the MQTT connection and retries until it succeeds. Only after that, it subscribes to the topics. But if a subscription failed (e.g. due to network issues), it never retried, making FWE never receive messages from the topic until the process is restarted.
- On shutdown only unsubscribe to MQTT Channels that are subscribed
- When persistent sessions are enabled, don't unsubscribe on shutdown. This is required for FWE to receive messages while it was offline.
- Connect only after all listeners are subscribed. If a message was received right after connection was established, it could be silently ignored because the listeners for the topic weren't registered yet.
- ROS2 related bug fixes:
- If more than one campaign used a ROS2 signal in its expression, only the first campaign would receive data for evaluation.
- If FWE receives a campaign more than once from the cloud, data collection would stop due to internal signal IDs being reallocated.
- Fixed segfault for VSD build when campaigns received before decoder manifest
- Fixed invalid read on shutdown when network is down
Improvements:
- Update AWS C++ SDK to
v1.11.284
. - Update Boost to
1.84.0
. - Enable flow control for MQTT5 client (when using
iotCore
connection type). This limits data sent by FWE to what is defined in IoT Core limits for throughput and number of publishes. - Change default values for some MQTT connection settings and make them configurable in the config
file. All defaults are now the same as the AWS SDK:
- Keep alive interval changed from
60
seconds to1200
seconds. SetkeepAliveIntervalSeconds
to override it. - Ping timeout default changed from
3000
ms to30000
ms. SetpingTimeoutMs
to override it. - Persistent sessions are now disabled by default. Set
sessionExpiryIntervalSeconds
to a non-zero value to enable it.
- Keep alive interval changed from
- Add implicit casting between numeric and Boolean data types in expression evaluation. E.g.
1 + true
will equal2
, andfalse || 3
will equaltrue
. - Add support for relative paths to the certificate, private key files and persistency directory, relative to the directory containing the configuration JSON file.
- Make
demo.sh
more generic, by 1/ Allowing multiple 'node', 'decoder', 'network interface', and 'campaign' JSON files to be passed, rather than having specific options for CAN, OBD and ROS2, 2/ Add--data-destination
option to specify data destination (default is still Amazon Timestream.) This allows the Android-specific demo script to be removed. - Previously if the CAN network interface goes down, FWE would exit with an error. Now it will continue to run and will resume data collection if the interface comes back up, however it will still exit with an error if the interface is removed from the system.
- Improved developer guides
- Added Disconnect Packet to the MQTT Client Stop sequence to help customers understand what the reason for the vehicle disconnection from the broker
- Added usage of data type from decoder manifest for CAN and OBD signals
- Add new signal type UNKNOWN
- Split MQTT channels into separate Sender and Receiver compared to previously using the same channel instance to send and receive messages
- Adaptive payload sizing for both compressed and uncompressed data
Bug fixes:
- Fixed possible segfaults at startup triggered by bad configuration.
- Fixed periodic upload trigger for heartbeat campaigns, that previously was only triggered by further data reception.
Improvements:
- Improve error output for bad configuration, to indicate where an option is missing or incorrect.
- Upgraded GitHub actions to support Node v20, as Node v16 is now EOL.
- Fixed some Coverity check regressions.
- Removed unsupported 'Geohash' feature.
- Corrected cleanup instructions in guides.
- Build Boost from source with
-fPIC
to enable linkage in a shared library.
Features:
- Add support for 'vision system data', with initial support for collection from
ROS2. This enables collection of complex data types including
structures, arrays and strings. Nested structures and arrays of structures are also supported.
- Known limitations:
- When no internet connection is available, collected vision system data is currently dropped, i.e. it is not persisted to the filesystem for later upload when connectivity is restored.
- When the upload of vision system data to S3 fails, e.g. due to poor connectivity or throttling by S3, currently only one retry is attempted.
- Known limitations:
Improvements:
- Update AWS C++ SDK to v1.11.177.
- Update Yocto reference to kirkstone and NXP Linux BSP 37.0.
- Switch to MQTT 5 client for better error messages. This is fully backward compatible with the previous client. Please note that currently we are not using nor supporting any MQTT 5 specific feature besides reason codes.
- When a CAN interface goes down at runtime, FWE will now exit with with an error.
- Enabled
FWE_FEATURE_IWAVE_GPS
for the GitHubarmhf
pre-built-binary, and added auto-detection of the iWave GPS for backwards compatibility with configuration files without the.staticConfig.iWaveGpsExample
section.
Bug fixes:
- Update AWS C++ SDK to v1.11.148, which includes an important bugfix for MQTT 3.1.1 clients.
Improvements:
- Add support for building as a library exported by CMake. Set the CMake option
FWE_BUILD_EXECUTABLE
toOFF
, then usefind_package(AwsIotFwe)
,${AwsIotFwe_INCLUDE_DIR}
and link withAwsIotFwe::AwsIotFwe
. - Non-functional source code improvements:
- Simplify
src/
folder structure, removing sub-namespaces & sub-libraries, and moving unit test files totest/unit/
. - Correct
#include
s usinginclude-what-you-use
. - Move from compile-time mocking to link-time mocking of AWS C++ SDK using Google Mock.
- Simplify
- Fix GitHub CI: support separate Ubuntu package mirror file, fix caching of Android install files.
- Add support for shared libraries to dependency install scripts.
- Developer guide and demo script improvements:
- Add clean up instructions.
- Better support existing S3 buckets, with check for same region & ACLs being disabled, and allow setting of bucket policy.
- Allow HTML generation of results for custom DBC files.
Features:
- Add Android Automotive (AAOS) support.
- Add experimental Greengrass V2 support
Bug fixes:
- Fix always saving data to disk when offline, even when configured not to in the campaign.
- Fix possible NullPointerException in Android app.
Improvements:
- Refactor persistent file handling, which now saves files under a subfolder called
FWE_Persistency
in the directory configured in the config file bypersistencyPath
. Now a separate file is saved for each payload file to be uploaded. An extra filePayloadMetadata.json
is created containing metadata for these files, the schema for which can be found here. - Reduce Android app
minSdk
to 21 (Android 5.0). - Update AWS C++ SDK to v1.11.111.
Deprecation:
- Remove the experimental camera feature (
-DFWE_FEATURE_CAMERA
). This is unsupported and it was not being maintained.
Features:
- Add Android support, including shared library and demonstration app.
Improvements:
- Change from
arn
tosync_id
for campaign_arn and document_arns, thesync_id
being the ARN followed by the timestamp of the last update. The change is backwards compatible with older versions of FWE. - Ubuntu package mirror from system used, rather than
ports.ubuntu.com
. - Add root CA and inline credentials support to static config file.
- Add extra metrics for AWS SDK heap usage, used signal buffer, MQTT messages sent out.
- Add support for in-process ingestion of external GPS, CAN and OBD PID values when FWE is compiled as a shared library.
- Fix compiler warnings for armhf build.
- Update Protobuf to v3.21.12, AWS C++ SDK to v1.11.94.
Bugfixes:
- RemoteProfiler not always uploading logs
Improvements:
- Refactor Producer/Consumer architecture, removing the buffer and thread between the
CANDataSource
and theCANDataConsumer
. The static config optionsocketCANBufferSize
was therefore removed. - Add documentation on how to use edge specific metrics.
- Change from
arn
tosync_id
for all decoder manifest Protobuf fields, thesync_id
being the ARN followed by the timestamp of the last update. The change is backwards compatible with older versions of FWE. - Improve MISRA C++ 2008, and AUTOSAR C++ compliance.
- Updated CloudFormation templates to use IMDSv2.
Bugfixes:
- Fix OBD timers not being reset. If the decoder manifest is empty or DTCs are not collected the OBD
PID or DTC timers were not reset, causing a 100% CPU and log spam with the following message
[WARN ] [OBDOverCANModule::doWork]: [Request time overdue by -X ms]
. - Support OBD2 PIDs ECU response in different order than requested. Also accept ECU response if not all requested PIDs are answered.
- Unsubscribe and disconnect from MQTT on shutdown: previously a message arriving during shutdown could cause a segmentation fault.
Improvements:
- Update to Ubuntu 20.04 for the development environment.
- Add flake8 checking of Python scripts.
- Improve GitHub CI caching.
- Improve MISRA C++ 2008, and AUTOSAR C++ compliance.
- Improve logging: macros used to automatically add file, line number and function.
- Improve unit test stability, by replacing sleep statements with 'wait until' loops.
- Removed redundant JSON output code from
DataCollection*
files.
Work in Progress:
- Support for signal datatypes other than
double
, includinguint64_t
andint64_t
.
Features:
- Added OBD broadcast support to send functional rather than physical requests to ECUs to improve
compatibility with a broader range of vehicles. This behavior does however increase CAN bus load.
The config option
broadcastRequests
can be set tofalse
to disable it.
Bugfixes:
- Fix
CollectionSchemeManager
andCollectionInspectionEngine
to use monotonic clock This now makes check-in and data collection work even when the system time jumps. Please note that the timestamp present in check-in and collected data may still represent the system time, which means that newly collected data may be sent with a timestamp that is earlier than the previous sent data in case the system time is changed to some time in the past.
Improvements:
- Logs now show time in ISO 8601 format and UTC.
- Added optional config
logColor
for controlling ANSI colors in the logs. Valid values:Auto
,Yes
,No
. Default value isAuto
, which will make FWE try to detect whether stdout can interpret the ANSI color escape sequences. - A containerized version of FWE is available from AWS ECR Public Gallery: https://gallery.ecr.aws/aws-iot-fleetwise-edge/aws-iot-fleetwise-edge.
- Improve CERT-CPP compliance.
- Improve quick start guide and demo script.
- Clarify the meaning of the
startBit
.
Bugfixes:
- Fix
Timer
to use a monotonic clock instead of system time. This ensures theTimer
will correctly measure the elapsed time when the system time changes. - Use
std::condition_variable::wait_until
instead ofwait_for
to avoid the bug whenwait_for
uses system time. - Fix extended id not working with cloud.
- Handle
SIGTERM
signal. Now when stopping FWE withsystemctl
orkill
without additional args, it should gracefully shutdown. - Fix bug in canigen.py when signal offset is greater than zero.
Improvements:
- Pass
signalIDsToCollect
toCANDecoder
by reference. This was causing unnecessary allocations/deallocations, impacting the performance on high load. - Add binary distribution of executables and container images built using GitHub actions.
- Add support for DBC files with the same signal name in different CAN messages to cloud demo script.
- Improve CERT-CPP compliance.
License Update:
- License changed from Amazon Software License 1.0 to Apache License Version 2.0
Security Updates:
- Update protcol buffer version used in customer build script to v3.21.7
Features:
- OBD module will automatic detect ECUs for both 11-bit and 29-bit. ECU address is no longer hardcoded.
- Support CAN-FD frames with up to 64 bytes
- Add an CustomDataSource for the IWave GPS module (NMEA output)
- iWave G26 TCU tutorial
- Renesas R-Car S4 setup guide
Bugfixes:
- Fix name of
persistencyUploadRetryIntervalMs
config. The dev guide wasn't including theMs
suffix and the code was mistakenly capitalizing the first letter. - Don't use SocketCAN hardware timestamp as default but software timestamp. Hardware timestamp not being a unix epoch timestamp leads to problems.
- install-socketcan.sh checks now if can-isotp is already loaded.
- The not equal operator =! in expression is now working as expected
- Fix kernel timestamps in 32-bit systems
Improvements:
- Added Mac-user-friendly commands in quick demo
- Added an extra attribute, so that users can search vehicle in the FleetWise console
- Added two extra steps for quick demo: suspending campaigns and resuming campaigns
Bugfixes:
- Fixed an OBD bug in which software requests more than six PID ranges in one message. The new revision request the extra range in a separate message.
- Fixed a bug in CANDataSource in which software didn't handle CAN message with extended ID correctly.
Improvements:
- Remove the HTML version of developer guide.
- Remove source code in S3 bucket. The S3 bucket will only be used to host quick demo CloudFormation.
- Remove
convertToPeculiarFloat
function fromDataCollectionProtoWriter
. - Set default checkin period to 2-min in
static-config.json
. The quick demo will still use 5 second as checkin period. - Update FleetWise CLI Model to GA release version.
- Update Customer Demo to remove service-linked role creation for FleetWise Account Registration.
Bugfixes:
- Fixed a bug in which software will continue requesting OBD-II PIDs or decoding CAN messages after all collection schemes removed.
Improvements:
- OBDOverCANModule will only request PIDs that are to be collected by Decoder Dictionary and supported by ECUs.
- OBDDataDecoder will validate the OBD PID response Length before decoding. If software detect response length mismatch with OBD Decoder Manifest, program will do 1) Log warning; 2) Discard the entire response.
- OBDDataDecoder will only decode the payload with the PIDs that previously requested.
- Improve OBD logging to log CAN ISOTP raw bytes for better debugging
Customer Demo:
- Updated demo scripts to match with latest AWS IoT FleetWise Cloud API changes
- Fix a bug in demo script that might render scatter plot incorrectly.
Docs:
- Updated the Edge Agent Developer Guide to match with latest AWS IoT FleetWise Cloud API changes
- Updated Security Best Practices in Edge Agent Developer Guide
Bugfixes:
- Fixed a bug which previously prevented OBD from functioning at 29-bit mode.
- Fixed a bug that potentially caused a crash when two collection schemes were using the same Signal Ids in the condition with different minimum sampling intervals
Improvements:
- Signal Ids sent over Protobuf from the cloud can now be spread across the whole 32 bit range, not only 0-50.000
- Security improvement to pass certificate and private key by content rather than by file path
- Improvement to Google test CMake configuration
- Clang tidy coverage improvements
- Improvement to AWS SDK memory allocation with change to custom thread-safe allocator
- Re-organized code to remove cycles among CMake library targets
- Refactored Vehicle Network module to improve extensibility for other network types
- Improvement to cansim to better handle ISO-TP error.
Features:
- No new features.
Bugfixes/Improvements:
- Unit tests added to release, including clang-format and clang-tidy tests.
- Source code now available on GitHub: https://github.com/aws/aws-iot-fleetwise-edge
- GitHub CI job added that runs subset of unit tests that do not require SocketCAN.
- FWE source code:
- No changes.
- Edge agent developer guide and associated scripts:
- Cloud demo script
demo.sh
:- Fixed bug that caused the Timestream query to fail.
- Script and files moved under edge source tree:
tools/cloud/
.
- Dependency installation scripts:
- AWS IoT C++ SDK updated to v1.14.1
- Support for GitHub CI caching added.
- CloudFormation template
fwdemo.yml
updated to pull source from GitHub instead of S3. - Developer guide converted to Markdown.
- Cloud demo script
Features:
- No new features.
Bugfixes/Improvements:
- FWE source code:
- Fixed bug in
PayloadManager.cpp
that caused corruption of the persisted data. - Improved the documentation of the Protobuf schemas.
- Added retry with exponential back-off for making initial connection to AWS IoT Core.
- Added retry for uploading previously-collected persistent data.
- Fixed bug in
- Edge agent developer guide and associated scripts:
- Fixed bug in
install-socketcan.sh
that caused thecan-gw
kernel module not to be loaded, which prevented data from being generated when the fleet size was greater than one. - Edge agent developer guide now available in HTML format as well as PDF format.
- Cloud demo script
demo.sh
:- Added retry loop if registration fails due to eventual-consistency of IAM.
- Added
--force-registration
option to allow re-creation of Timestream database or service role, if these resources have been manually deleted. - Updated
iotfleetwise-2021-06-17.json
to current released version, which improves the parameter validation and help documentation.
- CloudFormation templates
fwdemo.yml
andfwdev.yml
:- Kernel updated and SocketCAN modules installed from
linux-modules-extra-aws
to avoid modules becoming unavailable after system upgrade of EC2 instance. - FWE now compiled and run on the same EC2 instance, rather than using CodePipeline.
- Kernel updated and SocketCAN modules installed from
- Fixed bug in
Features:
- Initial preview release
Bugfixes/Improvements:
- N/A