IPS Startup

Hallo zusammen,

ich versuche in meinem PHP-Modul das Ereignis zum Start von IPS zu abonieren. Leider will mir das nicht gelingen.

Folgenden Code verwende ich


public function ApplyChanges()
{
    ...
    $this->RegisterMessage(0, 10001 /*IPS_KERNELSTARTED*/);
}

public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
     switch ($SenderID)
     {
         ...

         case 0:
            $this->Reset();
            break;
     }
}

Was mache ich falsch?

Viele Grüße
Sven

Moin!

Ich verwende in ApplyChanges das hier:

$this->RegisterMessage(0, 10000);
$this->RegisterMessage(0, 10001);
................

if (IPS_GetKernelRunlevel() <> 10103)  // KR_READY
{
    $this->SendDebug("Function -ApplyChanges-", "Kernel is not ready! Kernel Runlevel = ".IPS_GetKernelRunlevel(), 0);
    return;
}

Und dann die function „MessageSink“:

public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
	switch ($Message)
	{
		case 10100: // IPS_KERNELMESSAGE
			switch ($Data[0])
			{
				case 10103: // KR_READY
					// Was auch immer du machen willst // z.B. Timer starten
				break;
			}
		break;
		
		case 10001:  // IPS_KERNELSTARTED
			// Was auch immer du machen willst
		break;
	}
}

Grüße,
Chris

IPS_KERNELSTARTED setzt eine bestimmte IPS Version vorraus, ab welcher es funktioniert kann ich dir gerade nicht sagen.
Mit 4.4 sollte es aber auf jeden Fall funktionieren.
Michael

Laut Doku sollte „IPS_KERNELSTARTED“ ab v4.2 funktionieren. Ich nutze v4.4

Leider funktioniert die Lösung von Chris bei mir auch nicht. Irgendetwas mache ich falsch, nur was? Auch 10103 (KR_READY) funktioniert bei mir nicht.

Moin!

Was genau willst du denn bei IPS_KERNELSTARTED machen? Vlt. funktioniert das was du vor hast zu dem Zeitpunkt noch nicht?!

Grüße,
Chris

Ich rufe diese function auf


public function Reset()
{
    SetValueInteger($this->GetIDForIdent("LightMode"), PowerMode::Auto);
}

Allerdings habe ich ein Ereignis abonniert welches den folgenden Code ausführt wenn die Variable „LightMode“ geändert wird.


private function LightModeChanged()
    {
        $currentLightMode = GetValueInteger($this->GetIDForIdent("LightMode"));

        switch($currentLightMode)
        {
            case PowerMode::On:

                $this->SetTimerInterval("AutoOffTimer", 1000 * 60 * $this->ReadPropertyInteger("MaxPowerTime"));

                // Set status LEDS
                EIB_Switch($this->ReadPropertyInteger("StatusLedAuto"), false);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOff"), false);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOn"), true);

                $this->SetPowerMode(PowerMode::On);

                break;

            case PowerMode::Auto:

                $this->SetTimerInterval("AutoOffTimer", 0);

                // Set status LEDS
                EIB_Switch($this->ReadPropertyInteger("StatusLedAuto"), true);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOff"), false);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOn"), false);

                $this->HandlePresenceSensor();

                break;

            case PowerMode::Off:

                $this->SetTimerInterval("AutoOffTimer", 0);

                // Set status LEDS
                EIB_Switch($this->ReadPropertyInteger("StatusLedAuto"), false);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOff"), true);
                EIB_Switch($this->ReadPropertyInteger("StatusLedOn"), false);

                $this->SetPowerMode(PowerMode::Off);

                break;
        }
    }

Viele Grüße
Sven