After watching the webinar replay on the AI assistant in Flowfuse I decided to give it a try using chatGPT.
Note: Flowfuse also use ChatGPT in their AI assistant.
One of the examples in the video was to generate sample test data so I thought I would give it a try.
This is the query I used

The code is below. There is a also a description of how it works generated by ChatGPT and I have included it below the code.
// Initialize the context variable to track the previous value
if (typeof context.previousValue === 'undefined') {
context.previousValue = 20; // Initial value centered around 20
}
// Function to generate a random number within a range
function randomInRange(min, max) {
return Math.random() * (max - min) + min;
}
// Generate a small or large deviation
let deviation;
if (Math.random() < 0.1) {
// 10% chance of a large deviation (±10%)
deviation = randomInRange(-0.1, 0.1);
} else {
// 90% chance of a small deviation (±5%)
deviation = randomInRange(-0.05, 0.05);
}
// Calculate the new value
let newValue = context.previousValue * (1 + deviation);
// Ensure the value stays between 0 and 100
newValue = Math.max(0, Math.min(100, newValue));
// Update the previous value in the context
context.previousValue = newValue;
// Create the output message
msg.payload = newValue;
msg.topic = "data";
// Return the message to be sent
return msg;
How it Works:
- Initial Setup: The function starts by checking if the
previousValueis already defined in the context. If not, it initializes it to 20. - Deviation Calculation:
- The function then decides whether to apply a small (±5%) or a large (±10%) deviation. This is controlled by a random chance, where there’s a 10% chance for a large deviation and a 90% chance for a small deviation.
- The deviation is applied to the previous value.
- Value Constraint: The result is then clamped between 0 and 100 to ensure it stays within this range.
- Message Creation: Finally, the function sets the value as
msg.payload, assigns the topic “data” tomsg.topic, and returns the message.
Usage:
- Add a Function node to your Node-RED flow.
- Paste the code above into the Function node.
- Add an Inject node to trigger this function every second (set the Inject node to repeat every 1 second).
- Connect the Inject node to the Function node.
- Add a Debug node to view the output or route the output to another node in your flow.
This setup will send a new message every second with the described properties.
Demo Flow
I created a demo flow as shown below using the function node without any edits:

The result is show in the graph below.It starts well but slowly drifts down as you can see below.

So the function node does need some manual editing but overall a good result .
Using ChatGpt should make writing function node code much easier and quicker.
Note: You will need a ChatGpt account to repeat this yourself, but they are free.
Related tutorials and resources: