Best Practise: angelegte Profile wieder löschen

Hi,

wie handhabt ihr das mit Profilen die euer Modul anlegt? Wenn jemand die Instanz löscht, entfernt Ihr die Profile oder lasst ihr die „leichen“ einfach liegen?

Ich habe mal in meinem Profilmanager im Livesystem geschaut und war entsetzt was sich da so alles getümmelt hat :smiley:

Ich habe mal in der destroy() folgenden schnipsel drin

			if (!IPS_InstanceExists($this->InstanceID)) {
				$Profile = IPS_GetVariableProfileList();

				foreach($Profile as $key =>$value) {
					$ISM_Profile = strpos($value,"PontosBase.");
						if ($ISM_Profile === 0)
						{
							$this->UnregisterProfile("$value");
						}
				}
			}	

und nach löschen der Instanz werden auch die Profile entfernt. Oder soll man das besser lassen?

Viele Grüße

Ich lösche sie auch, aber ich prüfe vorher ob sie noch anderweitig benutzt werden.
Und ich lösche wirklich nur die angelegten und nicht einfach aufgrund der Annahme das ein Teil des Namens übereinstimmt.
Michael

Das macht Sinn und würde ich auch gerne übernehmen. Hättest du da eine Vorlage für mich?

1 „Gefällt mir“

Meine typischen helper :slight_smile:

Michael

1 „Gefällt mir“

Super. Das kann ich übernehmen.

Mir fällt aber auf, dass Profile auch als Achsenprofile in Diagrammen verwendet sein können. Da ist noch eine Lücke :slight_smile:

Wohl war.
Mir war zu dem Zeitpunkt wichtig, wenn ich fünf Instanzen von Modul A habe, erst beim löschen der letzten Instanz die Profile gelöscht werden und nicht schon vorher.
Michael

Hi,

Deine Helper sind klasse, danke dafür. Beim Wolf ISM8 Modul habe ich zum erstellen der Profile die Funktionen daraus benutzt. Ich werde auch bei Pontos umstellen, macht wirklich Sinn nur zu löschen wenn nicht benutzt. Könnte ja auch jemand zweckentfremdet haben.

Viele Grüße

Ich habe es nun bei mir übernommen und ergänzt:

    private function UnregisterProfile(string $Name): void
    {
        if (!IPS_VariableProfileExists($Name)) {
            return;
        }
 
        foreach (IPS_GetVariableList() as $VarID) {
            if (IPS_GetParent($VarID) == $this->InstanceID) {
                continue;
            }
            if (IPS_GetVariable($VarID)['VariableCustomProfile'] == $Name) {
                return;
            }
            if (IPS_GetVariable($VarID)['VariableProfile'] == $Name) {
                return;
            }
        }

        foreach (IPS_GetMediaListByType(MEDIATYPE_CHART) as $mediaID) {
            $content = json_decode(base64_decode(IPS_GetMediaContent($mediaID)), true);
            if (isset($content['axes']){
                foreach ($content['axes'] as $axis){
                   if ($axis['profile' === $Name]){
                       return;
                   }
                }
            }
        }
        
        IPS_DeleteVariableProfile($Name);
    }
1 „Gefällt mir“

Bin zufällig auf der Suche nach was ganz anderem hierüber gestolpert…

das Fragment soll doch bestimmt so lauten?

if ($axis['profile'] === $Name){

Stimmt. Das ist hier nicht korrekt.