Funktion RegisterHook

Hallo Leute,

benutze aktuell in einigen Modulen diese Funktion zur Erstellung von Hooks:

private function RegisterHook($WebHook) 
	{ 
		$ids = IPS_GetInstanceListByModuleID("{015A6EB8-D6E5-4B93-B496-0D3F77AE9FE1}"); 
		if(count($ids) > 0) { 
			$hooks = json_decode(IPS_GetProperty($ids[0], "Hooks"), true); 
			$found = false; 
			foreach($hooks as $index => $hook) { 
				if($hook['Hook'] == $WebHook) { 
					if($hook['TargetID'] == $this->InstanceID) 
						return; 
					$hooks[$index]['TargetID'] = $this->InstanceID; 
					$found = true; 
				} 
			} 
			if(!$found) { 
				$hooks[] = Array("Hook" => $WebHook, "TargetID" => $this->InstanceID); 
			} 
			IPS_SetProperty($ids[0], "Hooks", json_encode($hooks)); 
			IPS_ApplyChanges($ids[0]); 
		} 
	}     

Ist nicht von mir, führt aber trotzdem zu einem Fehler beim Start von IP-Symcon. Gibt es da eine bessere Version?

Joachim

Das liegt nicht an der Funktion, sondern wann du sie im Modul ausführst.
Am besten im Applychanges und dann nur, wenn der Kernel Ready ist.
Da kommt dein Fehler her.
Siehe hier, Punkt 1.8
Best Practice zur PHP-Modul Erstellung · GitHub
Michael
Edit: Bitte im richtigen Bereich fragen, da war bestimmt auch schon die Antwort dazu :wink:

Hallo Michael,

bin mal mein Log durchgegangen - da werde ich in einigen Modulen noch einmal nacharbeiten müssen…:smiley:

Vielen Dank!

Joachim

Schau dir das als Basis mal an: SymconTest/WebHookModule.php at master · symcon/SymconTest · GitHub

Sollte dir sehr viel Kopfweh ersparen :slight_smile:

paresy

Hallo Michael und Paresy,

gestern und vermutlich auch noch die nächsten Tagen werde ich immer mal wieder mich damit beschäftigen den Start der Module fehlerfrei zu machen. Hatte gestern schon in diversen Modulen Updates gemacht und IP-Symcon dann wieder neu starten lassen.
Die Kontrolle im Log gibt mir dann Gewissheit, ob die „Operation“ erfolgreich war.

Erst einmal vielen Dank für den Tipp!

Joachim