Node-red dashboard "refused to connect"

Well that is definitely corrupt, it is just a load of unprintable characters.

Have you upgraded to the latest node-red so that you can see if that helps?

@jbudd this only happens when there is a power outage, so it probably isn't anything to do with the specific flows.

@larro96 The best thing might be to get a UPS to power the pc, or even a refurbished laptop so that it survives power failure for a while.

I don't really know when persistent context is actually written to the file and the buffer flushed but it seems more likely after a power outage that the file would be left with outdated but coherent data than nulls or other gibberish. Unless of course it's the file write process which triggers a crash.

So I wonder if it actually becomes corrupt when the flow first accesses it after a restart.

Maybe there are clues in the code of the flow.
Maybe it would be worth checking the context files before starting Node-red.
Perhaps watch the context directories to identify when files are modified.

Certainly, and I believe the s/w takes care to minimise the risk of corruption. Normally when that happens it is actually the fault of the hardware/OS, a power down during the write and the the file system not able to automatically roll back the half written data. This can happen on an SD card for example, but I presume this system is not on such a card, and the file system in use is NTFS or whatever Windows uses nowadays. So corruption should not happen.

I don't see how the restart would know that that there had been a power failure.

This statement implies that the problem can occur after a normal shutdown/reboot.
Unless the OP also experiences operating system corruption and has not told us, it rather points to something confined to Node-red.

But I asked and they didn't share the flow so I'm not going to carry on guessing without evidence.

True, but

Suggests the opposite. Clarification please @larro96

414336 240408.json (3.7 MB)
I am going to check both what you and @Colin suggest.
But I cannot do that whenever I want because the machine is in use in another country.
I have some timeframes when I am allowed to remotely connect to the PC.

I've attached the flow.

That file contains 16 flows!

Yes, I don't know which flow can cause the error, if it is causing it.

This is the flow of b1531b115956bc02.
flow_b1531b115956bc02.json (70.3 KB)

This is the node that gets invalid at power outage.
node_dcea7f832804799a.json (1.2 KB)

I've restarted the pc multiple times with node-red running but I can't force the corruption.

You are injecting flow.session_status and testing if it is true or false without checking if it is a boolean.
Shouldn't be a problem but I wonder if it's worth checking:

if (typeof(session_status) === "boolean") {
// process it
}
else {
node.warn ("Invalid session_status")
}

And I see that the inject node repeats 10 times a second.
There is an awful lot of setting and retrieving context variables going on here.
What is the program doing 10 times per second?
Could you get away with a lower frequency?

Also can you show us how the context store is configured in settings.js please.

* Runtime Settings
 *  - lang
 *  - runtimeState
 *  - diagnostics
 *  - logging
 *  - contextStorage
 *  - exportGlobalContextKeys
 *  - externalModules
 ******************************************************************************/

    /** Uncomment the following to run node-red in your preferred language.
     * Available languages include: en-US (default), ja, de, zh-CN, zh-TW, ru, ko
     * Some languages are more complete than others.
     */
    // lang: "de",

    /** Configure diagnostics options 
     * - enabled:  When `enabled` is `true` (or unset), diagnostics data will
     *   be available at http://localhost:1880/diagnostics  
     * - ui: When `ui` is `true` (or unset), the action `show-system-info` will 
     *   be available to logged in users of node-red editor  
    */
    diagnostics: {
        /** enable or disable diagnostics endpoint. Must be set to `false` to disable */
        enabled: true,
        /** enable or disable diagnostics display in the node-red editor. Must be set to `false` to disable */
        ui: true,
    },
    /** Configure runtimeState options 
     * - enabled:  When `enabled` is `true` flows runtime can be Started/Stoped 
     *   by POSTing to available at http://localhost:1880/flows/state  
     * - ui: When `ui` is `true`, the action `core:start-flows` and 
     *   `core:stop-flows` will be available to logged in users of node-red editor
     *   Also, the deploy menu (when set to default) will show a stop or start button
     */
    runtimeState: {
        /** enable or disable flows/state endpoint. Must be set to `false` to disable */
        enabled: false,
        /** show or hide runtime stop/start options in the node-red editor. Must be set to `false` to hide */
        ui: false,
    },
    /** Configure the logging output */
    logging: {
        /** Only console logging is currently supported */
        console: {
            /** Level of logging to be recorded. Options are:
             * fatal - only those errors which make the application unusable should be recorded
             * error - record errors which are deemed fatal for a particular request + fatal errors
             * warn - record problems which are non fatal + errors + fatal errors
             * info - record information about the general running of the application + warn + error + fatal errors
             * debug - record information which is more verbose than info + info + warn + error + fatal errors
             * trace - record very detailed logging + debug + info + warn + error + fatal errors
             * off - turn off all logging (doesn't affect metrics or audit)
             */
            level: "info",
            /** Whether or not to include metric events in the log output */
            metrics: false,
            /** Whether or not to include audit events in the log output */
            audit: false
        }
    },

    /** Context Storage
     * The following property can be used to enable context storage. The configuration
     * provided here will enable file-based context that flushes to disk every 30 seconds.
     * Refer to the documentation for further options: https://nodered.org/docs/api/context/
     */
    contextStorage: {
        default: {
            module:"localfilesystem"
        },
    },

    /** `global.keys()` returns a list of all properties set in global context.
     * This allows them to be displayed in the Context Sidebar within the editor.
     * In some circumstances it is not desirable to expose them to the editor. The
     * following property can be used to hide any property set in `functionGlobalContext`
     * from being list by `global.keys()`.
     * By default, the property is set to false to avoid accidental exposure of
     * their values. Setting this to true will cause the keys to be listed.
     */
    exportGlobalContextKeys: false,

    /** Configure how the runtime will handle external npm modules.
     * This covers:
     *  - whether the editor will allow new node modules to be installed
     *  - whether nodes, such as the Function node are allowed to have their
     * own dynamically configured dependencies.
     * The allow/denyList options can be used to limit what modules the runtime
     * will install/load. It can use '*' as a wildcard that matches anything.
     */
    externalModules: {
        // autoInstall: false,   /** Whether the runtime will attempt to automatically install missing modules */
        // autoInstallRetry: 30, /** Interval, in seconds, between reinstall attempts */
        // palette: {              /** Configuration for the Palette Manager */
        //     allowInstall: true, /** Enable the Palette Manager in the editor */
        //     allowUpdate: true,  /** Allow modules to be updated in the Palette Manager */
        //     allowUpload: true,  /** Allow module tgz files to be uploaded and installed */
        //     allowList: ['*'],
        //     denyList: [],
        //     allowUpdateList: ['*'],
        //     denyUpdateList: []
        // },
        // modules: {              /** Configuration for node-specified modules */
        //     allowInstall: true,
        //     allowList: [],
        //     denyList: []
        // }
    },

So the default settings for the file store. Do you still have the problem with the latest node red?

I've changed the node to repeat every second instead.
The program is counting how many seconds the online session has been established.

I haven't managed to update yet.
The machine is running locally without internet, how am I updating it the safest way without losing any data?

Hopefully you have everything important backed up.

I don't know how to update node red without Internet access. How did you install it?

Hopefully yes,
I installed it with internet access but now it is running locally without internet access.