ich versuche mich an einem Script, welches aus IPS View heraus gestartet wird.
Im verlauf des Scriptes möchte ich nun andere Variablen referenzieren, aus IPS View kann ich nur 3 mitgeben.
Mittels „IPS_GetInstanceIDByName“ möchte ich eine Variable suchen, da meine Namensgebung immer gleich ist, sollen nun die ersten 2 Teile, getrennt durch Bindestriche, erhalten bleiben, den letzten Teil setzte ich im Script ein.
So weit, so gut. Mein Problem ist allerdings, das „IPS_GetInstanceIDByName“ einen direkt eingegebenen String perfekt erkennt, eine frische Variable die nur den String enthält auch, aber mein mit explode zusammengebauter String funktioniert nicht!
Ich habe mit gettype geprüft, das beides Strings sind, und mit strcmp das sie Identisch sind, dennoch funktioniert der zusammengesetzte nicht.
Wo ist hier mein geistiger Hänger?
Anbei der php Schnipsel:
<?php
if(isset($_IPS['SENDER']) && isset($_IPS['VARIABLE']) && isset($_IPS['VALUE'])){
// Umgebungsvariablen
$parent_id = IPS_GetParent($_IPS['SENDER']); // Lese Parent ID aus
$RolladenName = IPS_GetName($_IPS['SENDER']); // Lese Rolladenname aus
$explRolladenName = explode("-", $RolladenName); // Rolladenname am Bindestrich trennen
$zusammensetztenfuerVerfahrstatusAB = $explRolladenName[0]." - ".$explRolladenName[1]." - VERFAHRSTATUS AB"; // Mit dieser Zeichenkette führt "IPS_GetInstanceIDByName" NICHT zum Erfolg
$test = "EG - Rollade Abstellkammer Fenster - VERFAHRSTATUS AB"; // Mit dieser Zeichenkette führt "IPS_GetInstanceIDByName" zum Erfolg
echo gettype($test)."<br>"; // String
echo gettype($zusammensetztenfuerVerfahrstatusAUF)."<br>"; // String
$test = "EG - Rollade Abstellkammer Fenster - VERFAHRSTATUS AB";
if(strcmp($test, $zusammensetztenfuerVerfahrstatusAUF) === 1) echo "gleich<br>"; // Ausgabe "gleich", Strings sind Identisch
$moveup_id = @IPS_GetInstanceIDByName($zusammensetztenfuerVerfahrstatusAUF, $parent_id); // Funktioniert so nicht, mit der Variable "$test" schon, Funktioniert auch mit $RolladenName
}else echo"Es wurde keine Rolladen ID angegeben!";
Japp, das war ein Schreibfehler, allerdings nur durch mein vieles hin und herprobieren …
die dann nochmal angehängte korrigierte Fassung tuts auch nicht, ich kann nicht verstehen, warum es mit allen „fixen“ Werten, oder auch extra Variablen funktioniert, nur mit der zusammengesetzten nicht
<?php
if(isset($_IPS['SENDER']) && isset($_IPS['VARIABLE']) && isset($_IPS['VALUE'])){
// Umgebungsvariablen
$parent_id = IPS_GetParent($_IPS['SENDER']); // Lese Parent ID aus
$RolladenName = IPS_GetName($_IPS['SENDER']); // Lese Rolladenname aus
$explRolladenName = explode("-", $RolladenName); // Rolladenname am Bindestrich trennen
$zusammensetztenfuerVerfahrstatusAB = $explRolladenName[0]." - ".$explRolladenName[1]." - VERFAHRSTATUS AB"; // Mit dieser Zeichenkette führt "IPS_GetInstanceIDByName" NICHT zum Erfolg
$test = "EG - Rollade Abstellkammer Fenster - VERFAHRSTATUS AB"; // Mit dieser Zeichenkette führt "IPS_GetInstanceIDByName" zum Erfolg
echo gettype($test)."<br>"; // String
echo gettype($zusammensetztenfuerVerfahrstatusAB)."<br>"; // String
$test = "EG - Rollade Abstellkammer Fenster - VERFAHRSTATUS AB";
if(strcmp($test, $zusammensetztenfuerVerfahrstatusAB) === 1) echo "gleich<br>"; // Ausgabe "gleich", Strings sind Identisch
$moveup_id = @IPS_GetInstanceIDByName($zusammensetztenfuerVerfahrstatusAB, $parent_id); // Funktioniert so nicht, mit der Variable "$test" schon, Funktioniert auch mit $RolladenName
echo $zusammensetztenfuerVerfahrstatusAB."-->". $moveup_id;
}else echo"Es wurde keine Rolladen ID angegeben!";
Dein delimiter bei explode() ist „-“, aber die Zeichenkette ist ja in Wahrheit durch " - " (mit Leerzeichen) getrennt. Das heißt, du hast als Tokens dann Strings mit ggf führenden oder nachfolgenden Leerzeichen. Beim Zusammenfügen packst du weitere Leerzeichen dazwischen, so dass die resultierenden Strings nicht gleich sind.
Also z.B. bei explode() ein " - " als delimiter angeben sollte helfen.
da laust mich doch der Affe, Lesen bildet, sry.
Ihr habt ja beide so recht, ich dachte, Gleichheit wäre 1, und nicht 0.
Den delimiter auf " - " gebracht, mein 1 und 0 Test korrigiert, und siehe da, alles Funktioniert.
Vielen dank euch zwei, ihr habt mir das Brett vom Kopf genommen
Die meisten Standard C Funktionen für C-Strings gibt es auch in PHP.
Vermutlich auch historisch, brauchen tut man die wenigsten in php.
In C ist das aber noch, gerne bei kleinen Mirkocontroller, häufiger anzutreffen. https://cplusplus.com/reference/cstring/strcmp/
Michael
Ai ja, stimmt schon, aber ich wollte auf meinem Weg durch die Käfer die Tests halt einzeln machen, das ich dabei ne Null nich von ner Eins unterscheiden konnte, hätte ich nicht gedacht