EIB-Instanz-Funktion kommt nicht mit Variable klar

Hi!

Hab da noch ein komisches Problem bei jemanden, das ich mir aktuell nicht erklären kann.

<?

// VARIANTE 1 // FEHLER // EIB Group*| Could not convert data, Len: 2 , Data: 008000
if (($Room == "wohnzimmer") AND ($RoomSub == "all"))
{
	$InstanceID_AR = array(56368,18842,26908,36396);  // EIB Instanzen
}

if ($DeviceAction == "up")
{
	$Value = false;
}
elseif ($DeviceAction == "down")
{
	$Value = true;
}

foreach ($InstanceID_AR as $InstanceID)
{
	EIB_Switch($InstanceID, $Value);
}



// VARIANTE 2 // OK
if (($Room == "wohnzimmer") AND ($RoomSub == "all"))
{
	$InstanceID_AR = array(56368,18842,26908,36396);  // EIB Instanzen
}

if ($DeviceAction == "up")
{
	foreach ($InstanceID_AR as $InstanceID)
	{
		EIB_Switch($InstanceID, false);
	}
}
elseif ($DeviceAction == "down")
{
	foreach ($InstanceID_AR as $InstanceID)
	{
		EIB_Switch($InstanceID, true);
	}
}

?>

Warum bekomme ich bei Variante 1, wenn ich das true/false über eine Variable verwende den Fehler „EIB Group*| Could not convert data, Len: 2 , Data: 008000“ in der Meldungen-Ausgabe und der Aktor macht nichts? Und ja, die Variable wird auch gefüllt, wenn ich diese mit IPS_LogMessage ausgebe, wird mir das richtige angezeigt - sonst würde Variante 2 ja auch nicht funktionieren.
Weil - verwende ich Variante 2 und setze direkt true/false bei „EIB_Switch“ ein, dann kommt kein Fehler im Meldungen-Fenster und der Aktor funktioniert korrekt :confused: :confused:

Bug? Übersehe ich was? …?

Viele Grüße,
Chris

Sehr seltsam. Kann ja eigentlich nur an PHP liegen. Welche Version?

Lässt sich das weiter reduzieren?


$Value = true;
EIB_Switch(56368, $Value);

müsste dann ja auch einen Fehler liefern.

Lass dir bei Variante 1 in der foreach-Schleife mal den Wert von $Value ausgeben.
Je nach Wert von $DeviceAction ist das bei Variante 1 eventuell nicht richtig initialisiert.

@bumaas: Ja, die „Kurzform“ liefert auch einen Fehler. Liegt definitiv nicht an der Schleife.

@volker: Wie im 1. Post geschrieben - lasse ich mir den Wert in der Schleife ausgeben, ist dieser korrekt - und sonst würde Variante 2 ja auch nicht funktionieren. Und, die Kurzform ohne Schleife liefert den gleichen Fehler.

IPS ist die aktuelle IPS 5 stable auf Ubuntu Server 18.04 LTS (nicht bei mir zu Hause) mit einem Weinzierl KNX IP Gateway.

Danke und Grüße,
Chris

Dein

EIB Group*| Could not convert data, Len: 2 , Data: 008000"

weist sehr deutlich drauf hin, daß der übergebene Wert kein Boolean ist.

Und dazu passend: Die erste Variante unterscheidet sind von der zweiten Variante darin, daß $Value nur für ($DeviceAction == „up“) und ($DeviceAction == „down“) einen Wert zugewiesen bekommt, aber das nachfolgende EIB_Switch() grundsätzlich immer aufgerufen wird.

Bei Variante 2 wird EIB_Switch() tatsächlich nur bei ($DeviceAction == „up“) und ($DeviceAction == „down“) aufgerufen.

~~

Wobei … Die Kurzform von bumaas in #2 liefert bei mir keinen Fehler (IPS5 Windows).

Nochmal…der Fehler kommt auch, wenn ich die Kurzform ohne Schleife verwende - wie von bumaas in Post 2 geschrieben.

Grüße,
Chris

Ja, ok.

Nochmal zum

EIB Group*| Could not convert data, Len: 2 , Data: 008000"

Sowas bekomme ich, wenn auf eine KNX-GA in IPS vom Bus ein Wert ankommt, der einen falschen Datentyp hat. Prüf das vielleicht auch nochmal, incl. der hörenden Adressen.

Wenn ich statt mit $Value direkt mit true/false im „EIB_Switch“ arbeite, dann gibt es keinen Fehler, sowohl beim Senden des Befehl zum Aktor nicht, als auch beim Empfangen eines Status, alles bestens und ohne Fehler.
Ich bekomme die genannte Fehlermeldung nur, wenn ich mit „$Value = true“ arbeite.

Adressen sind korrekt, sonst könnte ich direkt mit true/false auch nicht arbeiten und würde auch nicht den korrekten Status empfangen, wenn ich den Aktor anderweitig ansteuere. Denke ich. Vielleicht übersehe ich auch was, aber wenn true/false geht und $Value nicht…kann man nicht so viel falsch machen denke ich?! :confused:

Grüße,
Chris

Schau vielleicht mal mit dem Gruppenmontor der ETS, was da alles auf dem Bus passiert bei deinem Fehlerszenario. Vielleicht kommt irgendeine Rückmeldung vom falschen Datentyp an, wie es die Meldung sagt.

Und teste es auch mal mit einer neu angelegten 1-bit-GA, ob das mit „$Value = true“ fehlerfrei funktioniert. Also ganz einfach ohne Aktor, nur senden und im Gruppenmonitor schauen was ankommt.

Caste mal value auf (bool)$Value

Gesendet von iPad mit Tapatalk

$Value = true;
EIB_Switch(56368, (bool)$Value);

eib-shutter-meldungen.png

Leider kann ich grad nicht sehen, ob der Aktor sich wirklich bewegt oder nicht, da niemand mehr vor Ort ist.
Ich muss das morgen noch mal in Ruhe durchgehen. Am besten einen Aktor nochmal überall rauswerfen (auch aus dem KNX) und komplett neu einrichten. Irgendwas muss da irgendwo „komisch“/falsch sein.
Habe das KNX auch nicht selbst eingerichtet, kann auf der KNX-Seite einen Fehler also nicht komplett ausschließen.

Ich melde mich morgen mit hoffentlich neuen Erkenntnissen :slight_smile:

Erstmal Danke und beste Grüße,
Chris

Sieht nach einer Rückmeldung aus, wo der Datentyp vom Bus nicht mit dem in IPS zugewiesenen Datentyp übereinstimmt. Vielleicht kommt eine Rückmeldung Position (%) durch GA-Tippfehler in IPS auf einem falschen Objekt an. Länge 2 Byte würde jedenfalls zum Prozentwert passen.

Ich bin hier ein wenig weiter - wie ich herausfinden konnte, wurden dort im Objekt unterschiedliche Aktoren für die Rollos verbaut. An manchen Stellen richtige Shutter-Aktoren und an anderen Stellen irgendwelche „Universal-Aktoren“ (genauer Typ/Modell noch unbekannt) - und diese „Universal-Aktoren“ haben/verursachen diese Fehler(meldungen) - wie richtig von Volker vermutet > bei den GA von den Positionen.

Also kein IPS-Problem :slight_smile:

Vielen Dank für eure Unterstützung und beste Grüße,
Chris