IPS-Start -> InstanceInterface is not available

Startet IPS und werden die Instanzen aus den PHP-Modulen erzeugt (also einmal Applychanges ausgeführt) so wird bei Zugriff auf andere Instanzen per InstanceInterface (IPS_SetProperty, IPS_GetProperty, IPS_Applychanges etc…) eine Fehlermeldung geworfen:


21:27:53 | 37340 | ERROR   | InstanceManager      | <br />
<b>Warning</b>:  InstanceInterface is not available in <b>C:\IP-Symcon\modules\SqueezeBox\LMSSplitter\module.php</b> on line <b>474</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>C:\IP-Symcon\modules\SqueezeBox\LMSSplitter\module.php</b> on line <b>476</b><br />
<br />
<b>Warning</b>:  InstanceInterface is not available in <b>C:\IP-Symcon\modules\SqueezeBox\LMSSplitter\module.php</b> on line <b>490</b><br />
<br />
<b>Warning</b>:  InstanceInterface is not available in <b>C:\IP-Symcon\modules\SqueezeBox\LMSSplitter\module.php</b> on line <b>491</b><br />

In diesem Fall hier, wird versucht der ‚eigene‘ WebHook zu ermitteln und ggfls. neu zu konfigurieren.


474: IPS_GetProperty
490: IPS_SetProperty
491: IPS_ApplyChanges

Jemand eine Idee wie ich das umgehen kann ?

Oder brauchen wir doch eine RunLevel-Benachrichtigung vom Kernel :smiley:

Michael

Hi!

Lange ist es her… Aber ich habe bei jemandem das gleiche Problem…
Hast du damals heraus gefunden, was die Ursache war?

Bei mir passiert das bei keinem meiner Module, aber bei einem Kumpel kommen nach jedem IPS-Neustart diese Meldungen bei einem meiner Module und beim IQL4Living Alexa Modul von Dave.
Angemeckert werden bei ihm jeweils die Zeilen, wo mit IPS_SetProperty die Config einer IO-Instanz gesetzt werden soll.

Wenn er dann bei meinem Modul einmal den Branch auf „test“ und wieder zurück auf „master“ ändert, dann funktioniert das Modul wieder.

Zusatzinfo >> Ich prüfe bei Apply Changes, ob der Kernel fertig gestartet hat. IPS ist also bereit. Die Fehler kommen wie gesagt nur bei meinem Kumpel (IPS unter Ubuntu), bei mir auf mehreren IPS (u.a. auch IPS auf Ubuntu) kommen die Fehler nicht.

Viele andere Module laufen hingegen einwandfrei bei meinem Kumpel…

Danke und Grüße,
Chris

Hallo Chris,

dieses Verhalten habe ich auch immer wieder beobachten können - insbesondere aber bei Updates…

In jedes Modul habe ich vor dem ersten SendToParent eine Abfrage eingebaut:

If ((IPS_GetKernelRunlevel() == 10103) AND ($this->HasActiveParent() == true)) {	

wobei HasActiveParent folgenden Inhalt hat:

private function HasActiveParent()
    	{
		$Instance = @IPS_GetInstance($this->InstanceID);
		if ($Instance['ConnectionID'] > 0)
		{
			$Parent = IPS_GetInstance($Instance['ConnectionID']);
			if ($Parent['InstanceStatus'] == 102)
			return true;
		}
        return false;
    	}  

Es wurde auch schon hier mal diskutiert.

Joachim

Das Thema hier ist lange erledigt, da es in diesem speziellen Fall nur auf Webhook (RegisterHook) zutraf wenn der Kernel nicht bereit war.
Das ist ja dank GetKernelRunlevel und auch der Möglichkeit bei IPS Neustart mit MessageSink zu arbeiten, erledigt.

Der Fall mit den Parent ist da manchmal etwas kniffliger.
Wobei auch hier keine Meldung kommen sollte, so etwas wie IPS_SetProperty auf den Parent sollte in der Regel kein Modul mehr benutzen!
Dafür reicht zu 90% auch GetConfigurationForParent.
Und wenn Paresy den ServerSocket noch etwas verbessert, sind es schon 99% :wink:
Michael

Abend Joachim!

Hab den Fehler gefunden :banghead:
Hatte zwar im ApplyChanges auf den KernelRunlevel geprüft, aber hatte im Create eine Funktion drin, die wiederum eine andere Funktion aufruft, in der auch was mit IPS_SetProperty war… args :banghead:

Komisch nur, dass das bei mir nie aufgefallen war und keine Probleme gab :confused: Egal, Fehler gefunden :slight_smile:

Danke und Grüße,
Chris

PS: Und im IQL4Living Alexa Modul wird nicht auf den KernelRunlevel bei ApplyChanges geprüft und deshalb ist da der Fehler „ok“.

EDIT: @Nall chan - Ich hab einen der 10% Fälle in dem Modul :wink: Mit dem geplanten Update vom paresy bin ich da aber auch raus und in den 99% :wink:

Was WebHook Registrierung angeht ist das bisher die schönste und vollständigste Lösung die ich im Angebot habe: SymconMisc/WebHookModule.php at master · symcon/SymconMisc · GitHub

paresy

Wenn das RegisterHook direkt in IPSModule-Klasse aufgenommen wird, entfällt sogar ein Großteil :wink:
Lieber wäre mir da aber die Events und das Steuern der Sockets bei TCP-IOs über den Datenaustausch :smiley:
Michael