HTTP-Aufruf aus einer Internetanwendung empfangen und verarbeiten

Ich habe es extra Versucht deutlich zu machen. Du sollst den IDENT Ersetzen (dafür also in der ersten Zeile str_replace hinten $name stehen lassen und in den folgenden dann $ident verwenden.
So hast du jetzt zwei Variablen (den nicht angetasteten $namen und den modifizierten $ident).

str_replace aktzeptiert übrigens auch ein Array, sodass man mit einer Zeile auskommt.

$search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ","_");
$replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "","-");
$ident = str_replace($search, $replace, $name);

Vielen Dank für die Korrektur, schaut viel besser aus.
Ich hatte das nicht so richtig kapiert :grinning:
Ich hoffe dass es so richtig umgesetzt ist…

function CreateVariableByName($dummyID, $name, $type)
{
    $search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ","_");
    $replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "","-");
    $ident = str_replace($search, $replace, $name);
    $vid = @IPS_GetObjectIDByIdent($ident, $dummyID);
    if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $dummyID);
      IPS_SetName($vid, $ident);
      IPS_SetIdent($vid, $ident);
   }
   return $vid;
}

Der Name soll doch weiterhin $name sein.

Ach so…

Ich habe das so aufgefasst dass alle folgenden $name durch $ident ersetzt werden sollen…

function CreateVariableByName($dummyID, $name, $type)
{
    $search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ","_");
    $replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "","-");
    $ident = str_replace($search, $replace, $name);
    $vid = @IPS_GetObjectIDByIdent($ident, $dummyID);
    if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $dummyID);
      IPS_SetName($vid, $name);
      IPS_SetIdent($vid, $ident);
   }
   return $vid;
}

So sieht es auf den ersten Blick gut aus. geht es jetzt wie gewollt?

Perfekt danke.
Ich schnalle erst jetzt, dass deine Änderungen ja eigentlich die Umlaute in den Variablen ermöglichen und nicht umwandeln.
Dadurch, dass ich es vorher falsch gemacht habe, hat es alle Umlaute umgewandelt…

Jetzt mache ich mich an den zweiten, ähnlichen Script, den ich bereits abgeändert habe, nachdem ich so viel Inputs erhalten habe.
Diesen Script gibt es, wie schon vorher erwähnt, bereits im Forum. Nun ist er aber optimiert.

Auch dieser greift einen Webhook ab, welcher von Traccar die Events als json geliefert bekommt. Vielleicht magst du mal drüber sehen :wink:

<?
$ParentID = IPS_GetParent($_IPS['SELF']);
$hooks = file_get_contents("php://input");
$hooks =json_decode($hooks, true);
$NameDummyInstanz = $hooks['device']['name'];
$DummyID = CreateDummyInstance($ParentID,$NameDummyInstanz);
date_default_timezone_set("Europe/Berlin");
$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);



$event = $hooks['event']['type'];
$id = CreateVariableByName($DummyID, 'Event', 3);
SetValue($id, $event);

if ( ($event == 'geofenceEnter') or ($event == 'geofenceExit') )
  {
	$geofence = $hooks['geofence']['name'];
	$latitude = $hooks['position']['latitude'];
	$longitude = $hooks['position']['longitude'];
	$altitude = $hooks['position']['altitude'];
	$address = $hooks['position']['address'];

	$id = CreateVariableByName($DummyID, $geofence, 0);
	
	$id = CreateVariableByName($DummyID, 'Breitengrad', 2);
	SetValue($id, $latitude);
	$id = CreateVariableByName($DummyID, 'Längengrad', 2);
	SetValue($id, $longitude);
	$id = CreateVariableByName($DummyID, 'Höhe', 2);
	SetValue($id, $altitude);
	$id = CreateVariableByName($DummyID, 'Adresse', 3);
	SetValue($id, $address);

	$geofence_ID  = IPS_GetObjectIDByName($geofence, $DummyID );
	
	if ($event == 'geofenceEnter') 
	 {	SetValue ($geofence_ID ,1 );
	    $id = CreateVariableByName($DummyID, $geofence.' angekommen', 3);
	 	SetValue ($id ,($datum." - ".$uhrzeit." Uhr" ));
	
	 }
	if ($event == 'geofenceExit') 
	 {	SetValue ($geofence_ID ,0 );
	 	$id = CreateVariableByName($DummyID, $geofence.' verlassen', 3);
		SetValue ($id ,($datum." - ".$uhrzeit." Uhr"));
	 }
  } 
  else
  {
	$id = CreateVariableByName($DummyID, 'Zeit-'.$event, 3);
	SetValue ($id ,($datum." - ".$uhrzeit." Uhr" ));
  }

if ( ($event == 'deviceMoving') or ($event == 'deviceStopped') ){
	
	$latitude = $hooks['position']['latitude'];
	$longitude = $hooks['position']['longitude'];
	$altitude = $hooks['position']['altitude'];
	$address = $hooks['position']['address'];
	$speed = $hooks['position']['speed'];

	$id = CreateVariableByName($DummyID, 'Breitengrad', 2);
	SetValue($id, $latitude);
	$id = CreateVariableByName($DummyID, 'Längengrad', 2);
	SetValue($id, $longitude);
	$id = CreateVariableByName($DummyID, 'Höhe', 2);
	SetValue($id, $altitude);
	$id = CreateVariableByName($DummyID, 'Adresse', 3);
	SetValue($id, $address);
	$id = CreateVariableByName($DummyID, 'Geschwindigkeit', 2);
	SetValue($id, $speed);
	
}




function CreateVariableByName($dummyID, $name, $type)
{
    $search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ","_");
    $replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "","-");
    $ident = str_replace($search, $replace, $name);
    $vid = @IPS_GetObjectIDByIdent($ident, $dummyID);
    if($vid===false) {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $dummyID);
      IPS_SetName($vid, $name);
      IPS_SetIdent($vid, $ident);
   }
   return $vid;
}

function CreateDummyInstance($id, $name)
{
   $vid = @IPS_GetInstanceIDByName($name, $id);
   if($vid===false) {
      $vid = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
   }
   return $vid;
}