- 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
customEndpointon 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
purgeIntervalof0. Resolves issue 399.
- Resolve an issue where the system fails to start if no secrets file exists but the existing
settings.jsonortriggers.jsonfile 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.jsonfile and inserted insettings.jsonandtriggers.jsonvia mustache templates. Resolves issue 371. - Update a package dependency to resolve a security vulnerability.
- Triggers can now specify
activateRegionswhich 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
/originalsand/annotationsfolders 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
/originalsfolder 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
annotateImageistruefor a trigger handler butenableAnnotationswasn't set totruein thesettings.jsonfile. 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.
statusTopiccan no longer be set on the mqtt configuration insettings.json. Overall status messages are always sent to thenode-deepstackai-trigger/statustopic. 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/statisticstopic. 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/statisticstopics and sub-topics. Resolves issue 308. - Statistics can be read and reset via new REST APIs. Overall statistics are available at
/statisticsand 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/motionMQTT 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 thesnapshotUrispecified 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.jsonandtriggers.jsoncan 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.jsonthen addpushbullethandlers 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
enableAnnotationsis 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.jsonandtriggers.jsonare 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
enableWebServersetting. It's off by default, and enabled automatically whenenableAnnotationsis on for backwards compatibility reasons. Resolves issue 265.
- Settings are now kept in a single
settings.jsonfile instead of separate ones for each handler. You will need to create asettings.jsonfile 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/configfolder. A sample is included in thesampleConfigurationfolder 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 forTZare 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
mainbranch. This means the location of the schema files has moved. If yourtriggers.jsonfile hasmasterin the$schemaproperty you will need to update them to saymaininstead.
- All the schema file references are updated to reflect the new
mainbranch 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
retainproperty inmqtt.conftotruemakes 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
analysisDurationMsproperty 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
nameproperty. 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
annotateImageproperty to true on the handler configuration. The annotated images are also exposed via a web server on port4242using 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_ANNOTATIONSenvironment 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_AWAITWRITEFINISHenvironment 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-triggermount point exists for future use. Resolves issue 191.
- MQTT
onlineandofflinestatus 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
captionproperty 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
topicmethod still works and is recommended for most use cases. See the wiki for an example of the new format. Resolves issue 153. - A
payloadproperty 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
VERBOSEenvironment variable. When set totrueadditional logging is shown in the console. Whenfalseor omitted only startup and successful detection messages are shown. Resolves issue 143.
- Add a
stateproperty 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 anoffstate is configurable with the newoffDelaysetting onmqtttriggers. 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.ymlandtrigger.conffiles 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