Modbus Instanzen via Skript, Name und Profil der Variable festlegen

Moin Moin,

ich habe mir ein Skript aus zwei anderen zusammen gebaut zum erstellen der Modbus Instanzen aus einer Datei.
Danke an die Skript erstellen @wibo050447 und @axelroro .

Nun will ich aber auch direkt das Variablen Profil setzen und den Namen gleich der Instanz.

<?php

// Change this to where you stored the sunspec definitions from above approach
$Mapping = "./16613.ips.php";
$id_Gateway = 38182;

$Ausgabe = CreateModbusInstanz();
print_r($Ausgabe);

function CreateModbusInstanz() 
{ 
    global $parentID ,$id_Gateway,
           $Mapping;

$row = 0;
if (($handle = fopen($Mapping, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        $sunspec_def[$row++]=$data;
        $address = $data[0];
        $name = trim($data[1]);
        $t = trim($data[2]);
        $Skal = $data[3];
        $info = $data[4];
        $Schreiben = $data[5];
        
        
     $parentID         = IPS_GetParent($_IPS['SELF']);
     $address_1 = ((int)$address - 1);
     $Datentyp =  $t ;

echo "$address";
echo "$Schreiben";


     CreateVariableByName($parentID,$address_1,$Datentyp,$name,$Skal,5000,$id_Gateway,$info,$Schreiben); 
} 






    }
    fclose($handle);
    //print_r($sunspec_def);

    return $sunspec_def;
 }



function CreateVariableByName($id_Kategorie,$adresse,$datenTyp,$name,$Skal,$time,$id_Gateway,$info,$Schreiben) { 
/*
    $id_Kategorie
	$adresse                          // Modbus Adresse 
	$datenTyp        = 0;             // 0=Bit, 1=Byte, 2=Word, 3=DWord, 4=Char(8Bit), 5=ShortInt(16Bit/Vorzeichenbehaftet), 6=Integer, 7=Real
	$name            = "ADR_";        // 1.Bezeichnung der Variable
	$time            = 500;           // Aktualisierungzeit in ms
	$id_Gateway      = 38182;
    $info            = SOLL_TEMP      // Beschreibung            
    $Schreiben       = True           // Variable wird geschrieben

*/	
	
		$num1adresse = zerofill($adresse);


		$neueInstanz = IPS_CreateInstance("{CB197E50-273D-4535-8C91-BB35273E3CA5}"); //http://www.symcon.de/service/dokumentation/befehlsreferenz/modulverwaltung/ips-getmodulelist/
		IPS_SetName($neueInstanz, $name);
        IPS_SetInfo($neueInstanz, $info); 

		# ModBus_SetType($neueInstanz, $datenTyp);
		IPS_SetProperty($neueInstanz, 'DataType', $datenTyp);
		IPS_SetProperty($neueInstanz, 'EmulateStatus', 1);			// hierzu noch eine Variable anlegen
		IPS_SetProperty($neueInstanz, 'Factor', $Skal);					// hierzu noch eine Variable anlegen
		# ModBus_SetPoller($neueInstanz, $time);
		IPS_SetProperty($neueInstanz, 'Poller', $time);
		# ModBus_SetReadAddress($neueInstanz,  $adresse_1);
		IPS_SetProperty($neueInstanz, 'ReadAddress', $adresse);
        IF ($datenTyp=0)
        {
		IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 1);	// hierzu noch eine Variable anlegen
        }
        else
        {
            
        IF ($Schreiben == "True")
        {
    	IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 3);  
        }
        else
        {	
        IPS_SetProperty($neueInstanz, 'ReadFunctionCode', 4);  
        }
          
        }

        IF ($Schreiben == "True")
        { 
		# ModBus_SetWriteAddress($neueInstanz, $adresse_1);
		IPS_SetProperty($neueInstanz, 'WriteAddress', $adresse);
		IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 16);		// hierzu noch eine Variable anlegen
        }   
        else
        {
   	    IPS_SetProperty($neueInstanz, 'WriteFunctionCode', 0);		// hierzu noch eine Variable anlegen 
        }
		IPS_ApplyChanges($neueInstanz);
	 	IPS_SetParent($neueInstanz, $id_Kategorie);

     //    IPS_DisconnectInstance($neueInstanz);

	   // IPS_ConnectInstance($neueInstanz, $id_Gateway);
      IPS_ApplyChanges($neueInstanz);	 	
 		IPS_SetPosition($neueInstanz, floatval($adresse) );
	 	$adresse++;
        usleep(50000);



// 	============================================================================
}


function zerofill ($num, $zerofill = 2) {
		return str_pad($num, $zerofill, '0', STR_PAD_LEFT);
	}

Danke im Vorraus

Die Variable hat vmtl. immer den Ident ‚Value‘ (ggf. den Objektbaum umschalten auf Anzeige des Ident) also kannst du mit

$variablenID = IPS_GetObjectIDByIdent ( 'Value', $neueInstanz);

die Variablen Id herausfinden.
Dann entsprechend mit
IPS_SetVariableCustomProfile($variablenID, "~Switch");
z.B. das Switch Profil zuweisen.
Ggf. entsprechend den Datentyp überprüfen und unterschiedliche Profile setzen

switch($datenTyp){
 case "DatenTyp1": /*entsprechend anpassen*/
    IPS_SetVariableCustomProfile($variablenID, "~Switch");
    break;
case "DatenTyp2": /*entsprechend anpassen*/
    IPS_SetVariableCustomProfile($variablenID, "MyShutter");
    break;
}

Und mit

IPS_SetName($variablenID, $name);

den Namen entsprechend anpassen.