Variable im RAM speichern

Hallo,

Ist es möglich eine Variable von einem Script im RAM zu Speichern und später aus dem RAM wieder auszulesen??

Lege doch eine weitere Variable an, dort kannst du den/die Werte speichern. Bei mehreren Werten würde ich eine String Variable verwenden und mit json_encode die Werte speichern.

Später dann mit json_decode die Werte auslesen.

In der Modulerstellung hast du die Möglichkeit mit Buffern zu arbeiten. Dann musst du aber dein Skript komplett auf Modul umstellen.

Uli

Gesendet von iPad mit Tapatalk

Auch eine RegisterVariable hat einen Buffer, welcher im RAM liegt.
Wenn man z.B. Daten von einem IO verarbeiten möchte hat man diese sowieso.
Michael

Ich fürchte du musst da etwas exakter werden. Wann ist denn „später“?

Innerhalb eines Scriptes ist jede Variable im RAM gespeichert. Wenn du das Script beendest wird der RAM wieder geleert und für das nächste Script freigegeben.

vllt meint er die Variablen: $temp = xxx die ja nur zur Laufzeit vorhanden sind

Hallo,

Ich habe mich ev. nicht ganz genau ausgedrückt.

Ein Variable $test in einem Script ist mir klar.
Die gilt nur solange das Script läuft.

Am Ende vom Script will ich diese im RAM speichern und später wieder vom RAM in die Script Variable laden.

Im Prinzip das was getvalue und setvalue macht nur halt ins RAM.

Ich brauche die Daten nur zur Laufzeit von IP Symcon.
Das Problem der normalen String Variable ist die Begrenzung auf 1024kB und bei der Register Variable auf 64kB

Ich habe ca. 3000kB

Weiters wird der Inhalt einer Variable in den settings.json gespeichert wodurch diese unnötig groß wird.
(Ich brauche die Daten nicht nach einem IPS Neustart)

gelöscht
und eigentlich läuft bei uns IP-Symcon 24/7 :smiley:

Dann kannst du z.b. ein MediaObjekt nutzen. Typ Document und da z.b. base64 encodiert einen Json-String schreiben.
MediaObjekte kannst du als cached markieren, dann liegen die Daten im RAM.
Michael

Hallo,

Wo kann ich das Objekt cached markieren?

IPS_SetMediaCached — IP-Symcon :: Automatisierungssoftware
Michael

Hallo,

Ich will Daten im RAM speichern.
Von verschieden Anlage empfange ich Daten über IP Sockets.

Da ich mich mit Modulen ein wenig beschäftigt habe mein Frage:

  • Ich erstelle ein Modul.
  • Im Modul wird für jede Anlage ein Buffer erstellt
  • Über public Functions lese und schreibe ich dann pro Anlage die Daten in den Buffer

z.B.
public function Write($Anl, $JSONString)
{
$this->SetBuffer(Anl.$Anl,$JSONString );
}

Modulxy_Write(1,Daten);

Wie viele Buffer kann ich in einem Modul erstellen ??

Moin!

Wie hier in der Doku zu lesen ist:
SetBuffer — IP-Symcon :: Automatisierungssoftware

Der Buffer besitzt ein Softlimt von 8kb und ein Hardlimit von 64kb. Das heißt ab 8kb größe wirft IP-Symcon eine „Warning“ in die Meldungen und die maximale Größe des Buffers beträgt 64kb. Daten größer als 64kb werden abgeschnitten.

>> Also bei 8000 ein str_split machen und so einen Multi-Buffer bauen. Nall chan hat da mal was schönes gebaut - Infos dazu findest du in einigen seiner Module.

Viele Grüße,
Chris