# node-red-contrib-store-and-forward

A contributed Node-RED node, that queues undeliverable messages to file for later delivery.
This node package is intended for use on systems with unreliable network connectivity. It can also be used to serve as a data logger for node red

## Overview
If the network connection is lost during operation this node will divert all new  messages to file.
When the connection is established it will off-load the messages from that file in a `first in first out order`
The node has persistent storage so even if there is  1 or multiple blackouts it will still offload the file upon restart.
A good example is sensor data passing to an MQTT node. The Mqtt node is sending the sensor data to a broker outside it own network.
This could be a cloud broker or remote server on the same site.
The node also has a property to control how fast the stored messages offload. This allows the design to have more control on the handling of the messages.



## Installation

Install `smithtek-node-red-storenforward` by following the



### store Configuration

The `Connected Status Matches` section is a regular expression `^connected` which
matches all status text messages that start with *connected*.  In addition to regular
expressions, you can also specify a simple substring match.  Because there is no
value specified to match `Disconnected Status Matches`, any message that doesn't
match `^connected` will be deemed a disconnected state.  

Conversely, if a `Disconnected Status Matches` value is provided, but not for
`Connected Status Matches`, then any status text that does not match will be
deemed a connected state.  

Finally, if both a `Connected Status Matches` and `Disconnected Status Matches`
value is given, then any status text doesn't match either, will be ignored, and
the current state will remain.


You must also specify a filename for the sqlite database that stores queued
messages during a *disconnected* state.  This database file **must not** be
shared between multiple queue nodes.

Message release `node input` property is in `ms`. the messages will release from the store
at the selected time `ms`
An example : the store has saved 60 messages during the disconnected period.
You selected `1000 ms` the store would offload in 1 minute.


## Licence
Copyright (c) original development code 2017 Damien Clark, [Damo's World](https://damos.world)<br/> <br/>
Copyright (c) smithtek 2019, [Smithtek](https://www.smithtek.com.au)<br/> <br/>
Licenced under the terms of the
[GPLv3](https://www.gnu.org/licenses/gpl.txt)<br/>
![GPLv3](https://www.gnu.org/graphics/gplv3-127x51.png "GPLv3")

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL DAMIEN CLARK BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## Acknowledgements

We would like to thank the following people for their hard work, time and effort. For without them this node would not be possible
* Damien Clark for the birth of a great idea
* Creators of the [queue icon](https://commons.wikimedia.org/wiki/File:AWS_Simple_Icons_Messaging_Amazon_SQS_Queue.svg)
* Nick O'Leary and Dave Conway-Jones for creating [Node-Red](http://nodered.org/about/)
