Onboarding Existing Node-RED's - FlowFuse Plugin
Likely an extension/re-work of the existing NR Tools Plugin, key criteria here:
- Easy to connect to FlowFuse (without Device Agent)
- Easy backups/snapshots
Not going to make 2.14. Initial sizing invesitgation showed scale was just to much to go in with everything else we had planned.
@joepavitt Can you provide an estimate on how much design work is needed here? We can deprioritize other 2.18 items to deliver on this if needed.
This is mostly with @knolleary on sizing. It was more engineering design than UX design work because we weren't sure on the scope of what's possible to control via a plugin
The onboarding existing NR has got better because of the device agent improvements shipped in 2.17 too which can auto import existing NR flows
@joepavitt I'm conceiving of a revised onboarding flow that begins by asking the new user if they have Node-RED instances running elsewhere that they'd like to connect to, and if so, where they're hosted and then connect them to FlowFuse. With the Device Agent improvements just shipped, would this piece of work provided the remaining engineering work to permit us to offer that kind of onboarding experience?
So, for Hosted Instances, it's straight forward. For Remote, it's more complicated.
For the new device agent changes, we have the ability to import any flows found on the same hardware, but they still need to do a manual install of the device agent.
An alternative route would be a FlowFuse plugin for Node-RED which the user would install in their own local Node-RED instance, and that in turn would connect to FlowFuse and permit saving of snapshots. The challenge here is though that it doesn't permit replication of the full "Device" workflow, we cannot get remote access, restart Node-RED, etc from within a NR plugin.
Asking them where they are hosted is fine, but currently, we have no way of automatically connecting to that. The user would need to install device agent in that place
@joepavitt Thank you. Does this sound right?
A user has an instance of Node-RED running somewhere.
Either: (A) it is hosted in a cloud service or on other hardware, or (B) it is running on an edge device.
If (A), then "it's straightforward" (quoting you from above). I guess we'd just ask for where it is hosted and connect it? If (B), then either:
- (B1) the user needs to install the Device Agent on the device, which will import the Node-RED instance running there and connect to FlowFuse [better] or
- (B2) this new plugin can be installed into the remotely running Node-RED which will connect it to FlowFuse but allow for more limited control within FlowFuse [worse but better than what we have now].
If the user wants to migrate an existing NR application into the FlowFuse platform as a hosted instance, they can use the NR Tools Plugin to create a snapshot on their existing NR and push it to a hosted instance in FF. They then shutdown that external NR instance. I think that's what (A) is referring to - and is covered in the docs.
If the user wants to connect an existing NR as a Remote Instance, then they need to use the Device Agent. (B1)
The concept of this issue was to implement a plugin to do B2. I had looked at this in detail a while ago - I'm sure I wrote up my thoughts/findings on it, but I can't find them now.
We also discussed this last week. The hard part of implementing this plugin is it requires a new type of 'thing' on the platform. Our existing model of a device assumes a lot of basic functionality that the plugin won't have. So we need to go through every single piece of device functionality in both backend and frontend, and add 'awareness' of this new type of device so we don't offer-up bits of functionality we can't provide. When I started a quick PoC of the plugin, I quickly hit this and it was an overwhelming amount of change that made the PoC no-longer quick nor sensible to continue at the time.
I will put some more effort into a sizing here for the plugin - but not quick.
After further discussion with Nick and Joe, I'm taking the milestone off of this one and putting it to the backlog.