Fehler bei automatischer Kategorieerstellung

Hallo zusammen
Ich steh gerade etwas auf dem Schlauch. Ich möchte automatisch eine neue Kategorie mit dem Namen der Sensor-ID erstellen, wenn ich Daten eines neuen Lora-Sensors dem LoraWAN-Netz erhalte. Die Daten erhalte ich, das ist nicht das Problem, aber das Erstellen der Kategorien bereitet mir Kopfzerbrechen.
Als eindeutige ID verwende ich die DeviceID. Diese ID setze ich auch als „Ident“ der Kategorie, damit der eigentliche Variablenname auch geändert werden kann bei Bedarf. Natürlich suche ich dann diesen Ident auch bevor ich eine neue Kategorie erstelle.

Dazu verwende ich folgenden Script:

//Auswerten nach Sensor-DEVID --> Pro Sensor eine neue Kategorie anlegen
 //prüfen, ob die Kategorie bereits existiert
 $sensorkategorie = 32586;
 $kategorieID = IPS_GetObjectIDByIdent($daten_decodiert["devid"], $sensorkategorie);
 if ($kategorieID === false)
 {
    echo "Kategorie nicht gefunden. Erstelle Kategorie für Sensor ".$daten_decodiert["devid"]."\r\n";
    $catID = IPS_CreateCategory();
    IPS_SetName($catID, $daten_decodiert["devid"]); 
    IPS_SetIdent($catID, $daten_decodiert["devid"]); 
    IPS_SetParent($catID, $sensorkategorie);
 }
 else
    echo "Die Kategorien-ID lautet: ". $kategorieID; 

Dabei kriege ich aber folgende Fehlermeldung:

Warning: Objekt mit Ident A81758FFFE06E3FA wurde nicht gefunden in C:\ProgramData\Symcon\scripts\58331.ips.php on line 22
Kategorie nicht gefunden. Erstelle Kategorie für Sensor A81758FFFE06E3FA

Warning: Ident muss für jede Ebene eindeutig sein in C:\ProgramData\Symcon\scripts\58331.ips.php on line 28

Die 1. Warnung ist nachvollziehbar, weil ich kein @ vor IPS_GetObjectIDByIdent habe und es diese Kategorie noch nicht gibt. Aber die Zweite Warnung verstehe ich nicht. Die erste Warnung sagt ja aus, dass es diese ID noch nicht gibt, wie kann dann etwas nicht eindeutig sein ?

… ich antworte mir gleich mal selber.

An einem anderen Ort war eine Kategorie mit diesem Ident bereits aus ersten Tests vorhanden. Und mit dem Befehl IPS_GetObjectIDByIdent($daten_decodiert["devid"], $sensorkategorie);
habe ich in der falschen „übergeordneten“ Kategorie gesucht. Daher wohl diese 2. Warnung.

Manchmal ist die Lösung auf ein Problem so einfach, benötigt aber doch soo lange um den Übeltäter zu finden. Kaum hat man dann um Hilfe gefragt, findet man den Fehler…

Das heißt, du hast die beiden nachfolgenden Zeilen getauscht und damit das Problem behoben?

Nein. Offenbar habe ich bei meinen ersten Versuchen eine Kategorie mit der DeviceID in der übergeordneten Kategorie 0 erstellt.

Die Zeile IPS_GetObjectIDByIdent($daten_decodiert["devid"], $sensorkategorie); sucht aber nur in der angegebenen übergeordneten Kategorie $sensorkategorie (bei mir ID 32586) nach diesem Ident und findet ihn dort aber natürlich nicht. Wenn ich dann eine neue Kategorie erstellt habe und den entsprechenden Ident setzen wollte kam die Warnung, dass es diesen Ident bereits gibt, einfach auf einer anderen Ebene (übergeordneten Kategorie).

Die Lösung war daher wirklich nur das Löschen der Kategorie am falschen Ort. Am Script selber habe ich nichts geändert.

Tip: Immer erst in die korrekte Ebene mit SetParent verschieben und dann den Ident setzten.
Michael

Besten Dank Michael, setze ich umgehend um.