IPS Chart per Skript erstellen

Ist es möglich die IPS Charts auch per Skript automatisch zu erstellen.
Alles Versuche bis jetzt enden mit „geht nicht“ :smiley:

Kann es sein, dass dies (noch) nicht funktioniert?

Das geht schon - aber es ist nicht dokumentiert und somit eher kompliziert.

Du willst ein Media Objekt vom Typ Chart erstellen. Und dann muss der Inhalt ein korrektes JSON-kodiertes Dokument sein. Wie dies aussehen muss, kannst du dir ja mal an fertigen Charts ansehen, die im media Ordner liegen.

paresy

Servus und danke für den kleinen aber entscheidenden Hinweis :smiley:

JSON und Datei ansehen, das wars.
Es kann auch einfach gehen :banghead:


	$path = IPS_GetKernelDir().join(DIRECTORY_SEPARATOR, array("media", "testChart.chart"));


	$json = '{
 			 "datasets": [
  			 {
   			  "variableID": 30534,
   			  "fillColor": "#0080FF",
   			  "strokeColor": "#0000A0",
   			  "title": "Batterie",
   			  "timeOffset": 0
  			  },{
   			   "variableID": 22326,
   			   "fillColor": "#FF8080",
   			   "strokeColor": "#FF0000",
   			   "title": "Spannung",
   			   "timeOffset": 0
  			  }],
 			 "profile": "_Robo_Battery",
 			 "type": "line"
			}';

	CreateMediaImage($_IPS['SELF'], "TEST-Chart", "testChart", 4, $json, $path, 10);



// Funktion MediaImage erstellen
// -----------------------------------------------------------------------------
function CreateMediaImage($parentID, $name, $ident, $typ, $media, $imagefile, $position, $option = true){
    $mediaID = @IPS_GetObjectIDByIdent($ident, $parentID);

    if ($mediaID === false){
        $mediaID = IPS_CreateMedia($typ);
        IPS_SetParent($mediaID, $parentID);
        IPS_SetIdent ($mediaID, $ident);
        IPS_SetPosition($mediaID, $position);
        IPS_SetMediaCached($mediaID, false);
        IPS_SetName($mediaID, $name);
        }
                
    IPS_SetMediaFile($mediaID, $imagefile, false);
    if($option) IPS_SetMediaContent($mediaID, base64_encode($media));
    IPS_SendMediaEvent($mediaID);
    
    return $mediaID;
    }


Vielen Dank für dein Script !

Ich habe es mal als Funktion für ein einfaches Chart umgewandelt:

function create_mediachart( $name, $variable, $vprovil, $position, $parentID)
{ 
    $mediaID = @IPS_GetObjectIDByName($name, $parentID); 

    if ($mediaID === false){ 
        $mediaID = IPS_CreateMedia(4); 
        IPS_SetParent($mediaID, $parentID);
		$media = IPS_GetKernelDir().join(DIRECTORY_SEPARATOR, array("media", "".$mediaID.".chart")); 
        IPS_SetPosition($mediaID, $position); 
        IPS_SetMediaCached($mediaID, false); 
        IPS_SetName($mediaID, $name); 
        }
	

	
	 $json = '{
 "datasets": [
  {
   "variableID": '.$variable.',
   "fillColor": "clear",
   "strokeColor": "#FFFF00",
   "timeOffset": 0
  }],
 "profile":"'.$vprovil.'" ,
 "type": "line"
}';

print $json;

$option = true;
                 
    IPS_SetMediaFile($mediaID, $media, false); 
    if($option) IPS_SetMediaContent($mediaID, base64_encode($json)); 
    IPS_SendMediaEvent($mediaID); 
     
    return $mediaID; 
    }