- Address security vulnerabilities in dependent packages. Resolves issue 440.
- Address security vulnerabilities in dependent packages. Resolves issue 437.
- Address security vulnerabilities in dependent packages. Resolves issue 434.
- Addresses a security vulnerability in a dependency. Resolves issue 427.
- System now sends an MQTT message every 60 seconds to report its status as online. Resolves issue 423.
- Add support for
customEndpoint
on a trigger to support custom Deepstack models. Resolves issue 416. - Support for glob patterns in trigger watchPatterns. Resolves issue 412.
- Address a minor security vulnerability in a dependency. Resolves issue 407.
- Support disabling auto-purge by specifying a
purgeInterval
of0
. Resolves issue 399.
- Resolve an issue where the system fails to start if no secrets file exists but the existing
settings.json
ortriggers.json
file uses mustache templates, or when the secrets method of loading the settings file isn't used. Resolves issue 394.
- Secrets can now be stored in a separate
secrets.json
file and inserted insettings.json
andtriggers.json
via mustache templates. Resolves issue 371. - Update a package dependency to resolve a security vulnerability.
- Triggers can now specify
activateRegions
which have the opposite effect of masks. If activateRegions are specified then the triggering object's bounding box must overlap with the activate region for the trigger to fire. Resolves issue 384.
- File watching now works on Macs when the folder of images is a mounted network share. Resolves issue 362.
- The
/originals
and/annotations
folders can now be viewed via the webserver. This enables browsing the list of all stored images instead of having to know the specific filename of the image. Resolves issue363.
- Address security vulnerability in webpack used during the build process. Resolves issue 357.
- Address security vulnerability in the annotated image processing library. Resolves issue 360.
- The original image that caused a trigger to fire is now stored temporarily and available for
use via the built-in web server. The images are available in the
/originals
folder with the original filename. Resolves issue 350.
- Address a low-severity security vulnerability in a 3rd party library. Resolves issue 347.
- Relax the test for valid watchObject folders at startup. If the path has globs in it a warning will still get thrown but system startup will proceed. Resolves issue 342.
- Warnings are now shown when
annotateImage
istrue
for a trigger handler butenableAnnotations
wasn't set totrue
in thesettings.json
file. Resolves issue 333. - Log messages are printed on startup to help confirm the image folder was mounted correctly with Docker. Resolves issue 330.
- Web server now shuts down properly when reloading settings. Resolves issue 323.
- Startup is now re-attempted if there are any failures during launch. Each re-attempt is 30 seconds apart and five re-attempts will happen before things are assumed to just be completely broken. Resolves issue 322.
statusTopic
can no longer be set on the mqtt configuration insettings.json
. Overall status messages are always sent to thenode-deepstackai-trigger/status
topic. This change aligns the status topic messages with the new MQTT messages that the system listens to for resetting statistics.
- Per-trigger statistics are now sent in new MQTT messages published to the
node-deepstackai-trigger/statistics
topic. The trigger name, triggered count and analyzed file count are included, as well as a formatted string version suitable for presentation to a user. The per-trigger statistics are also available as variables for mustache templates. Resolves issue 306. - Statistics can be reset by publishing specific MQTT messages to the
node-deepstackai-trigger/statistics
topics and sub-topics. Resolves issue 308. - Statistics can be read and reset via new REST APIs. Overall statistics are available at
/statistics
and per-trigger statistics are available at/statistics/triggerName
. Statistics for all triggers can be retrieved from/statistics/all
. See the API documentation for more information. Resolves issue 307 and issue 311. - Triggers can be activated by sending
node-deepstackai-trigger/motion
MQTT messages with the name of the trigger in the message. This is similar to activating a trigger via the REST API and results in the trigger attempting to download a snapshot from thesnapshotUri
specified in the trigger's configuration. Resolves issue 314. - Shutting down the system after a failed launch no longer throws an error. Resolves issue 301.
- The underlying Linux variant used for the Docker image is now
node:slim
. Resolves issue 299. - Pushbullet is now included in the settings JSON schema. Resolves issue 316.
settings.json
andtriggers.json
can no longer have unrecognized properties in them. While this is technically a breaking change it shouldn't impact anyone in practice. The addition of this requirement is to ensure new users get real-time notifications of typos/mistakes in their configuration files while editing in tools that support schema validation (such as Visual Studio Code). Resolves issue 291.
- Pushbullet notifications are now supported as trigger handlers. Enable it in
settings.json
then addpushbullet
handlers to your triggers intriggers.json
. See the wiki for more details. Resolves issue 119.
- Triggers can now be manually activated via a REST API, and can be configured to retrieve a camera snapshot from a REST API instead of watching for image files that appear in a folder. This is useful for NVR systems other than BlueIris that don't support writing a snapshot automatically when motion is detected and can only call a REST API as the motion activated action. Resolves issue 260.
- Occasional crashes when
enableAnnotations
is on are fixed. Resolves issue 284. - Requests to end the system (e.g. via ctrl+c) are handled gracefully now. Resolves issue 280.
- Changes to
settings.json
andtriggers.json
are automatically detected and cause a reload. No need to restart the Docker container anymore! Just save the file and the system should notice the change and reload with the new configuration. Resolves issue 278. - The internal web server can now be enabled independently from annotated images using the
enableWebServer
setting. It's off by default, and enabled automatically whenenableAnnotations
is on for backwards compatibility reasons. Resolves issue 265.
- Settings are now kept in a single
settings.json
file instead of separate ones for each handler. You will need to create asettings.json
file to use this release and will need to modify your Docker configuration to mount the settings file either as a secret or have it present in your/config
folder. A sample is included in thesampleConfiguration
folder as a base to start from. It is essentially what was in the separate files previously now just merged into one file. Additionally all environment variables except forTZ
are now just settings in this file. Any other environment variables for the trigger container can be removed from your Docker configuration. - The source code repository's latest builds now produce out of the
main
branch. This means the location of the schema files has moved. If yourtriggers.json
file hasmaster
in the$schema
property you will need to update them to saymain
instead.
- All the schema file references are updated to reflect the new
main
branch name. Resolves issue 255. - The ability to disable verbose logging is back. Somehow between version 1.8.0 and now it broke. Resolves issue 257.
- Setting the
retain
property inmqtt.conf
totrue
makes all MQTT messages get sent with the retain flag on. Default isfalse
. Resolves issue 249.
- Fix an incorrect message at startup regarding annotations being enabled when they aren't. Resolves issue 247.
- The length of time it takes to analyze an image is now calculated and available via the
analysisDurationMs
property in the default MQTT message. It is also available as a mustache template variable and shown in verbose logging messages. Resolves issue 242. - MQTT messages now include the trigger's name in the
name
property. Resolves issue 243. - Pushover is now supported as a trigger handler. See the wiki for how to enable it and how to configure it on a trigger. Resolves issue 232.
- Annotated images that show the objects and confidence percentage for things that fired the triggers are now available
for Telegram messages. To enable the annotated image in Telegram messages set the new
annotateImage
property to true on the handler configuration. The annotated images are also exposed via a web server on port4242
using their original file name for use by external services, for examplehttp://localhost:4242/Dog_20200523-075000.jpg
. By default the images are kept for 60 minutes before being deleted. This new capability comes with a performance impact due to the additional image manipulation required and is off by default. To enable it set theENABLE_ANNOTATIONS
environment variable on the trigger Docker container to true. Resolves issue 187. - Resolve a warning when using Telegram triggers. Resolves issue 174.
- Added a new
CHOKIDAR_AWAITWRITEFINISH
environment variable that, when true, resolves issues with images getting saved to a network share that's then mounted to Docker as the image source. As this has a performance impact it is off by default. Resolves issue 236. - An optional
/node-deepstackai-trigger
mount point exists for future use. Resolves issue 191.
- MQTT
online
andoffline
status messages are now sent when the service starts or fails to start. This, combined with the LWT message, makes it easy to set up MQTT binary sensors in Home Assistant to track the status of the system and send notifications to people if the system goes down or isn't running. This is a breaking change if you rely on the LWT message. The format of the offline message sent for the LWT changed to align with the online and processing status messages. See the wiki for documentation on the status message format. Resolves issue182. - webRequest URIs are no longer double-encoded. Instead only the text replaced with a mustache template is encoded. This is a breaking change if you had previously modified your webRequest URIs to work around issue 176. If you previously worked around the bug by removing encoding from the URIs in the trigger configuration file you will need to put the encoding in again. Resolves issue 176.
- MQTT detection messages now include a friendly formatted version of the predictions,
for example:
"formattedPredictions": "dog (98%)"
. Resolves issue 181. - Failed calls to the Deepstack server no longer throw an unhandled promise rejection exception. Resolves issue 175.
- MQTT status messages with statistics are now sent on every received file. The total number of files received and the number of triggers actually fired are included in the message payload. Resolves issue 146.
- Add a clear message after initialization indicating whether startup was successful. If it wasn't there's now a link to a troubleshooting wiki page for assistance. Resolves issue 167.
- Fix typos in the source code. Resolves issue 170.
- Fix typos in CHANGELOG.md. Resolves issue 168.
- The system no longer exits when configuration errors prevent startup. This leaves the container in a running state so it is possible to open a terminal window to the container to inspect things like volume mount points for missing configuration files. Resolves issue 164.
- Telegram trigger handlers now support an optional
caption
property to specify the text sent as the caption for the photo that fired the trigger. This supports mustache templates so the caption can be something like{{name}}: {{formattedPredictions}}
. Resolves issue 154. - MQTT trigger handlers now support an array of messages to send instead of a single message, allowing
for different format messages to different services. For example one message could be formatted
in a way that works for Home Assistant use and another could be formatted to trigger BlueIris recording.
This is an optional, more advanced, way to specify MQTT triggers. The previous, simple, single
topic
method still works and is recommended for most use cases. See the wiki for an example of the new format. Resolves issue 153. - A
payload
property is now supported on MQTT handler message configuration, along with support for mustache templates in the payload. This makes it possible to send a precisely formatted message to BlueIris that will trigger recording for a specific camera instead of having to use webRequest handlers. Resolves issue 151. - Mustache templates are now supported in the webRequest handler URIs. One way to use this is
to send additional data to BlueIris with the details of predictions that caused the trigger to fire,
for example
"http://localhost:81/admin?trigger&camera=Dog&memo={{formattedPredictions}}
. See the wiki for details on available mustache variables. Resolves issue 148. - The MQTT overall configuration now supports specifying a topic for status messages. Right now the only status message sent is a LWT message for when the system goes offline. Resolves issue 145.
- Logging level is now controlled by a
VERBOSE
environment variable. When set totrue
additional logging is shown in the console. Whenfalse
or omitted only startup and successful detection messages are shown. Resolves issue 143.
- Add a
state
property to the MQTT messages sent on motion detection. This makes it easier to build binary motion sensors based on the MQTT messages in Home Assistant by usingvalue_template: 'value_json.state'
. The delay before sending anoff
state is configurable with the newoffDelay
setting onmqtt
triggers. Resolves issue 139 and issue 141.
- watchObjects is now case insensitive when comparing against the matched objects (issue 134)
- Address a warning during config file validation (issue 123).
- Document the available Docker image tags (issue 128).
- Addresses code cleanup issue 136.
- Configuration files can now be mounted using Docker volumes instead of secrets. While less secure for MQTT configuration it does enable this image to load on systems that don't support setting Docker secrets, such as a Synology. Addresses issue 122.
- Address issue 116.
- Address issue 130.
- Add support for mask regions to triggers. See the defining triggers documentation for information on how to set this up.
- README.md updated to provide simplified instructions and links to the project wiki for additional details
- The default mount point for the image folder in the sample configuration now points
to /aiinput. This better aligns with future documentation and will simplify configuration
for first time users following the step by step guide. Existing
docker-compose.yml
andtrigger.conf
files aren't impacted as they won't be copying the new sample files locally. Developers working on the project using Remote - Containers will need to rebuild their containers to pick up the new mount point. VSCode should automatically prompt for this.
- Changes try/catch to .catch() for issue #68
- Add a cooldownTime option to the Telegram handler. This makes it easier to have a trigger that fires frequently without spamming Telegram chats with pictures.
- Fixed a bug where MQTT log messages contained "Trigger" as the message tag.
- Resolve an issue where disabling Telegram prevented startup
- Add timestamp to log messages
- Added two optional dependencies to resolve build warnings
- Added support for Telegram bots
- Updated the README.md sample with the new MQTT message format from v1.0.1.
- There was no version 1.0.3. Tag issues with git.
- Minor file code structure cleanup
- MQTT messages now includes a fileName and baseFileName property. Technically this is a breaking change since it moves the predictions to a predictions property too.
- Released 2020-05-25
- Initial release