Triggern von ApplyChanges in Modulen nach Kernel-Start

Hallo Leute,

ich habe das irgendwo schon mal diskutiert und auch eine Antwort erhalten, finde es aber nicht wieder…

Es geht darum das gewisse Dinge nicht funktionieren wenn IP-Symcon noch im Startmodus ist und der Kernel noch nicht komplett hochgefahren. Die Instanzen laufen aber unbeirrt davon schon los, wenn dort nicht besondere Maßnahmen getroffen werden. Hier die Version die ich für korrekt halte:
In der Modul Funktion „Create“

parent::Create();
$this->RegisterMessage(0, IPS_KERNELSTARTED);

In der Modul-Funktion Apply Changes Programmteile ausschließen die nicht ausgeführt werden sollen wenn der Kernel noch nicht vollständig bereit ist

If (IPS_GetKernelRunlevel() == 10103)  {
      // Dinge die nur ausgeführt werden sollen wenn der Kernel läuft
}

In der MessageSink-Funktion

switch ($Message) {
	case 10001:
		// IPS_KERNELSTARTED
		$this->ApplyChanges();
		break;
	}

Ich bitte um Bestätigung oder Korrektur weil ich bei meiner (schon fast historischen) Durchsicht aller meiner Module völlig verschiedene Vorgehensweisen vorgefunden habe.

Joachim

  1. Ich würde die Zahlen gegen Konstanten tauschen: Konstanten — IP-Symcon :: Automatisierungssoftware
  2. Lagere diese speziellen Dinge in eine extra Funktion aus, die du dann bei KERNELSTARTED ausführst oder in ApplyChanges, sofern KR_READY als Runlevel anliegt. $this->ApplyChanges() aufzurufen ist definitiv Bad Practice, sofern es keinen triftigen Grund gibt.

paresy

So korrekt? Dann würde ich es entsprechend in meinem Modulen - wo notwendig - umsetzen.

Joachim

Genau so. :slight_smile:

paresy