Hallo zusammen,
ich hab mein IPS mal auf 4.3 geupdatet und habe jetzt Probleme mit meiner MessageSink Methode, hat sich da was geändert? Wenn ich eine Device-Instanz erstelle, bekommt das mein Splitter nicht mehr mit. Starte ich dann IPS neu, funktioniert es ganz normal.
Im Splitter habe ich folgende Methoden:
public function ApplyChanges()
{
// register messages
$this->RegisterMessage(0, IPS_KERNELMESSAGE);
$this->RegisterMessage($this->InstanceID, FM_CONNECT);
$this->RegisterMessage($this->InstanceID, FM_DISCONNECT);
// call parent
parent::ApplyChanges();
// return when kernel is not ready
if (IPS_GetKernelRunlevel() != KR_READY) {
return;
}
....
}
public function MessageSink($TimeStamp, $SenderID, $Message, $Data)
{
switch ($Message) {
case IPS_KERNELMESSAGE :
if ($Data [0] == KR_READY)
$this->ApplyChanges();
break;
case FM_CONNECT :
case FM_DISCONNECT :
$this->ForceRefresh();
break;
case IM_CHANGESTATUS :
if (($SenderID == @IPS_GetInstance($this->InstanceID) ['ConnectionID']) and ($Data [0] == IS_ACTIVE)) {
$this->ForceRefresh();
}
break;
case IM_CHANGESETTINGS :
// check changed properties
foreach ($Data as $changedPropertyJson) {
$changedProperty = json_decode($changedPropertyJson, true);
// if property duoFernCode is changed
if (is_array($changedProperty) && array_key_exists("duoFernCode", $changedProperty)) {
$duoFernCode = $changedProperty["duoFernCode"];
// valid duo fern code
if (preg_match(DUOFERN_REGEX_DUOFERN_CODE, $duoFernCode)) {
$this->ForceRefresh();
break;
}
}
}
break;
}
}
Im Device nutze ich ConnectParent um den Splitter als Parent zu setzen:
public function ApplyChanges()
{
parent::ApplyChanges();
// require gateway as parent
$this->ConnectParent("{7AB07511-BABA-418B-81C5-88A7C709D318}");
...
}
Das Problem ist, dass die MessageSink Methode garnicht mehr aufgerufen wird bei einer neu erstellten Instanz, solange ich IPS nicht neustarte. Es funktioniert weder beim Erstellen oder Löschen einer Instanz noch beim Ändern einer Property.
Vielen Dank!
Gruß baba