Fragen zu RegisterMessage und MessageSink

Ich beschäftige mich gerade mit diesen neuen Funktionen. Dazu 2 Fragen:

Übersteht ein RegisterMessage auch einen Neustart oder muss ich nach einem IPS-Neustart mit einer irgendwo abgelegten Liste die bisher vorhandenen Registrierungen wieder neu registrieren?

Was ist der Inhalt des 4. Parameters array $Data in der MessageSink Funktion? Gibt es (bzw. wird es ) eine Doku dazu geben?
Bei der Message VM_Update vermute ich auf [0] ist der neue Wert, auf [1] steht eine 1(wofür), auf [2] der alte Wert und auf [3] der Timestamp. Dafür steht im 1.Wert der Funktion $TimeStamp (Welcher TS?)nichts.

Tommi

Zu 1:
Nein, genauso wie bei den Filtern und Buffern. Die überstehen auch keinen Shutdown.
Aber es reicht das registrieren im Appylchanges durchzuführen.
Dann stehen ja meistens auch schon die Umgebungsbedingungen fest.
Zu 2:
Ich kenne keine, scheint aber mit dem alten SDK übereinzustimmen.
Ich glaube der Zweite Index bei VM_Update war ein boolen ob sich der Variablenwert geändert hat oder nicht.
Michael

OK, Danke. Ich hoffe, Properties können einen ausreichend langen String ab, um sich meine Subscriptions zu merken. Will jetzt nicht noch ein extra File auf die Platte schreiben.

Noch eine Frage: Wie subscribe ich die KernelMessages (KR_READY etc). Dafür habe ich keine SenderID, Oder ist das „0“

Tommi

Strings sollten kein Problem sein. Ich würde jedoch aus Performancegründen nicht empfehlen dort Megabytes zu speichern :slight_smile:

Bei den KR_* Messages ist die SenderID = 0. Ich bin mir ad hoc aber nicht ganz sicher, ob diese Nachrichten auch korrekt weitergeleitet werden.

paresy

Kernel geht so (sorry TapaTalk habe gerade keine PHP-Tags) :
$this->RegisterMessage(0, IPS_KERNELMESSAGE);
Im ersten Index von Data steht dann das eigentliche Event:
if ($Data[0] == KR_READY)
Usw…
Was für Daten möchtest du den in die Settings schreiben für deine Subscribes?
So rein aus Neugier, bisher ist mir da noch kein Anwendungsfall untergekommen.
Michael

Ich wollte in eine Property einfach ein Json-String mit dem Array der Variablen-IDs, für die ich VM_UPDATE und VM_DELETE registriert habe, schreiben. Bei letzterem bin ich mir nicht sicher, ob ich es überhaupt brauche. Man könnte auch vermuten, das automatisch ein UnRegisterMessage gemacht wird, wenn eine Variable mit existierender Registrierung entsorgt wird. Den String hole ich mir dann in ApplyChanges wieder raus und starte dort die Registrierung der schon bekannten IDs wieder neu. Ein ListRegisteredMessages gibt es ja nicht, um nur neue Registrierungen auszuführen.

Ich brauche ggfls. dann noch das KR_UNINIT um mich bei einem Server sauber beim Shutdown abzumelden.

Tommi

Ich muss mein altes NoTrigger Modul noch mal auf PHP portieren.
Dort hole ich mir beim KR_Init aus dem Objektbaum (Links unterhalb der Instanz) die Ziel-Variablen und registriere mich auf VM_Update und Delete.
Zusätzlich kommt das Array serialisiert in einen Buffer.
Bei Delete wird ein unregister durchgeführt.
Neue Links(Variablen) werden während der Laufzeit durch OM_CHANGEPARENT ebenfalls erfasst.
Somit brauche ich das nicht in die Settings schreiben.
Ist aber eigentlich nur aus der Not entstanden, dass IPS noch immer keine Girds in den Einstellungen der Instanz unterstützt.
Wenn Die mal eingebaut sind, ist deine Idee natürlich besser :slight_smile:
Michael