NEWS
Daten persistent halten in NR oder MQTT?
-
@hpgo Um vielleicht noch was zu ergänzen.
Ich bin der Meinung, dass man in der Regel lieber auf Echtdaten, als auf veraltete Werte zugreifen sollte. Sollte man Daten zum Initialisieren brauchen, kann man die im mqtt ja als retain speichern, dann bleiben sie ja erhalten und werden beim Neustart der Flows bzw. Verbinden automatisch gepublished.
Wenn Du den Kontext speicherst - ist auch OK es werden halt die globalen, flow und context Variablen im Dateisystem gespeichert.
Nachdem ich es ja auch noch im iobroker gespeichert habe ist ja gut. Also spricht aber nichts dagegen den Kontext zu speichern, auch wenn ich es halt nicht mache.
OB allerdings der Kontext in JOIN Nodes oder anderen Nodes gespeichert bleibt, weiß ich nicht. Müsstest Du halt ausprobieren.Für viele HIER, wird sich die Frage nicht stellen, da die Daten im iobroker dauerhaft gespeichert sind und man die iobroker-In Nodes so konfigurieren kann, dass die Daten bei Adapterneustart automatisch eingelesen werden.
-
Ok, deshalb liest man so wenig hier im Forum darüber.
Edit: Mit MQTT, das funktioniert
Mit Context Storing leider nicht
Vlt weiß ja jemand ob da was fehlt was in die settings.js muss.contextStorage: {
default: "menory"
memory: { module: "memory" },
file: { module: "localfilesystem"}
},Edit2: mit gestartet wird es - glaub ich (Bild)
Danke
-
@hpgo So ich habe es gerade in meiner Standalone Konfig getestest - funktioniert einwandfrei.
Du musst doch nur aus der Standard settings.js den context enablen.
/** 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" }, },
Bei Starten sieht man es:
16 Aug 23:52:47 - [info] Welcome to Node-RED =================== 16 Aug 23:52:47 - [info] Node-RED version: v3.0.2 16 Aug 23:52:47 - [info] Node.js version: v16.16.0 16 Aug 23:52:47 - [info] Windows_NT 10.0.22000 x64 LE 16 Aug 23:52:48 - [info] Loading palette nodes 16 Aug 23:52:48 - [info] Worldmap version 2.28.1 16 Aug 23:52:48 - [info] Dashboard version 3.1.6 started at /ui 16 Aug 23:52:48 - [info] Settings file : C:\Users\micky\.node-red\settings.js 16 Aug 23:52:48 - [info] Context store : 'default' [module=localfilesystem] 16 Aug 23:52:48 - [info] User directory : \Users\micky\.node-red 16 Aug 23:52:48 - [warn] Projects disabled : editorTheme.projects.enabled=false 16 Aug 23:52:48 - [info] Flows file : \Users\micky\.node-red\flows.json 16 Aug 23:52:48 - [info] Server now running at http://127.0.0.1:1880/ 16 Aug 23:52:48 - [warn] --------------------------------------------------------------------- Your flow credentials file is encrypted using a system-generated key. If the system-generated key is lost for any reason, your credentials file will not be recoverable, you will have to delete it and re-enter your credentials. You should set your own key using the 'credentialSecret' option in your settings file. Node-RED will then re-encrypt your credentials file using your chosen key the next time you deploy a change. --------------------------------------------------------------------- 16 Aug 23:52:48 - [info] Starting flows 16 Aug 23:52:48 - [info] [worldmap:bdefa1df675a158f] started at /worldmap 16 Aug 23:52:48 - [info] Started flows
Es wird automatisch ein Verzeichnis context erstellt.
Darunter gibts dann ein Flow ID und eine JSON Datei, die den Inhalt des Kontextes enthält.
-
@hpgo Auch die Auswahl mit 2 Storages funktioniert:
17 Aug 00:07:09 - [info] Welcome to Node-RED =================== 17 Aug 00:07:09 - [info] Node-RED version: v3.0.2 17 Aug 00:07:09 - [info] Node.js version: v16.16.0 17 Aug 00:07:09 - [info] Windows_NT 10.0.22000 x64 LE 17 Aug 00:07:09 - [info] Loading palette nodes 17 Aug 00:07:10 - [info] Worldmap version 2.28.1 17 Aug 00:07:10 - [info] Dashboard version 3.1.6 started at /ui 17 Aug 00:07:10 - [info] Settings file : C:\Users\micky\.node-red\settings.js 17 Aug 00:07:10 - [info] Context store : 'memoryOnly' [module=memory] 17 Aug 00:07:10 - [info] Context store : 'file' [module=localfilesystem] 17 Aug 00:07:10 - [info] User directory : \Users\micky\.node-red 17 Aug 00:07:10 - [warn] Projects disabled : editorTheme.projects.enabled=false 17 Aug 00:07:10 - [info] Flows file : \Users\micky\.node-red\flows.json 17 Aug 00:07:10 - [info] Server now running at http://127.0.0.1:1880/ 17 Aug 00:07:10 - [warn] --------------------------------------------------------------------- Your flow credentials file is encrypted using a system-generated key. If the system-generated key is lost for any reason, your credentials file will not be recoverable, you will have to delete it and re-enter your credentials. You should set your own key using the 'credentialSecret' option in your settings file. Node-RED will then re-encrypt your credentials file using your chosen key the next time you deploy a change. --------------------------------------------------------------------- 17 Aug 00:07:10 - [info] Starting flows 17 Aug 00:07:10 - [info] [worldmap:bdefa1df675a158f] started at /worldmap 17 Aug 00:07:10 - [info] Started flows
Auch bei 2fachem Kontextstore - ist dann bei Neustart der Kontext wieder geladen und man sieht auch woher der Kontext kommt:
Wenn Du beide Kontextmodes angibst - musst Du bei den function Nodes und dem lokalen Kontextstore diesen mitangeben.
Auch der Kontext im Filesystem bei beiden Kontextarten in einer function Node funktioniert - Du musst halt hier nun als 3.Parameter ebenfalls den Storagetype angeben:
Wenn Du beide Arten angibst und Du bei default memory angibst - dann wirds natürlich nicht im Filesystem gespeichert. Falls Du unten das default angegeben hast, dann hast Du einen Fehler bei der Schreibweise gemacht. Soll wohl memory heißten anstelle von menory.
Wenn Du default halt das Filesystem haben möchtest, dann musst das default eben ändern.
Der Kontext wird standardmäßig alle 30s gesichert wird Also bissi warten. Genau: https://nodered.org/docs/api/context/store/localfilesystem
-
@mickym
Danke das du das bei dir ausprobierst obwohl du es nicht brauchst.Leider funktioniert es bei mir nicht, eventuell wegen des Tippfehlers. Hoffe ich hab am Abend Zeit bevor ich wieder vorm PC einschlafe.
Die schreibst Standalone Konfig - worauf hast du NR installiert. (Raspi?)
Bei mir läuft NR in einem Docker Container und ich bin nicht sicher ob ich die richtige settings.js bearbeite.Danke
-
@hpgo Ich habe die Standalone auf Windows installiert. Schau doch mal in Deinem Dienst, ob es da drin steht. Wenn ich die Windows-Version hochfahre, dann steht genau, welche settings.js er zieht.
-
Ok ich muss doch die richtige settings.js haben ansonsten würde der context store ja nicht mit gestartet werden.
Auch die flows.json Datei wurde erstellt.Komisch ist nur, ich bekomm in der Change Node nicht die Auswahl der beiden Storages.
Vlt reicht es nicht nur den Container neu zu starten - das versuche ich erstmal.
Lg -
@hpgo Du hast nur ein Kontextstore Memory aktiv.
Entweder hast Du nur einen aktiv - dann hast du keine Auswahl - oder Du hast beide. Wie Du bei mir siehst müssen beide auftachen:
17 Aug 00:07:10 - [info] Context store : 'memoryOnly' [module=memory] 17 Aug 00:07:10 - [info] Context store : 'file' [module=localfilesystem]
Wenn Du beide aktiv haben willst musst Du in der settings.js folgendes eintragen:
contextStorage: { default: "memoryOnly", memoryOnly: { module: 'memory' }, file: { module: 'localfilesystem' } },
Bei Dir ist aber nur memory aktiv. Und Dein settings.js file scheint in dem /data Verzeichnis zu liegen.
Wenn das eine aktuelle settings.js ist dann ist das eigentlich auskommentiert schon vorhanden. Die settings.js ist ja quasi in Sektionen mit den entsprechenden Überschriften eingeteilt.
Sollte also unter den Runtime Settings stehen (ich habe allerdings schon auf 3.0.2 upgedated):
/******************************************************************************* * Runtime Settings * - lang * - runtimeState * - diagnostics * - logging * - contextStorage * - exportGlobalContextKeys * - externalModules ******************************************************************************/
-
@hpgo sagte in Daten persistent halten in NR oder MQTT?:
Ok ich muss doch die richtige settings.js haben ansonsten würde der context store ja nicht mit gestartet werden.
Nee das stimmt nicht - selbst wenn gar nichts in der settings.js steht - standardmässig ist ja auch alles auskommentiert, wird der memory context geladen. Ich glaube, dass Du einen Syntaxfehler in der settings.js hast, zum Ende das Komma fehlt oder sonst was.
-
Funktioniert jetzt auch, wie ich vermutet habe, habe ich immer die falsche settings.js bearbeitet.
Sorry das ich mich auf meinem eigenen System nicht auskenne wo, was, wie zu finden ist.Danke für die Hilfe!!