HS100 über die Cloud steuern

Ja, und die bekommt fix die ID der Kategorie zugewiesen. Ich mag keine fixen Werte in Skripten. Deswegen habe ich es so gemacht.

Das Script läuft jetzt ohne Fehler durch, aber es werden keine Variablen unter der Kategorie angelegt .komm da nicht weiter.

Zeig mal her

Hier mal das Script

<?php

//Token ermitteln
include(IPS_GetScriptFile(36661/*Skript für die Ermittlung des Tokens*/));

$url = 'https://eu-wap.tplinkcloud.com?token='.GetValue(25698/*Token*/);
$devicelist="";
$InsID=0;
$VarID=0;
$root=getvalue(14870);/*ID der Kategorie wo die Instanzen erstellt werden sollen*/
$GUIDDummy=getvalue(33575/*UID der Dummy Instanz*/);
$ActionScriptID=getvalue(10141); /*ID des  füs Schalten */
if ($root>0 and $GUIDDummy != "bc48270-177-e7-a5b9-358956") /*nur zur Sicherheit, sollten die Werte mal verloren gehen */
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    $content = array (
    'method' => 'getDeviceList'
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($content));
    $result = curl_exec($ch);
    $devicelist=json_decode($result,true)["result"]["deviceList"];

    foreach ($devicelist as $device)
    {
        $instanceID=@IPS_GetInstanceIDByName($device["alias"],$root); /*Prüfen ob die Instanz schon vorhanden ist*/
        if ($instanceID == false)
        {
            //Schalterinstanz
            $InsID = IPS_CreateInstance($GUIDDummy);
            IPS_SetName($InsID, $device["alias"]);
            IPS_SetParent($InsID, $root);

            //Schaltervariable
            $VarID = IPS_CreateVariable(0);
            IPS_SetName($VarID,$device["alias"]); 
            IPS_SetParent($VarID,$InsID); 
            IPS_SetVariableCustomProfile($VarID,"~Switch");
            IPS_SetVariableCustomAction($VarID,$ActionScriptID);

            //DeviceID Variable
            $VarID = IPS_CreateVariable(3);
            IPS_SetName($VarID,$device["alias"]."ID");
            IPS_SetParent($VarID,$InsID); 
            setvalue($VarID,$device["deviceId"]);
        }
    }
}

Schau mal Bitte drauf ob da den Fehler findest

Du holst dir keinen Token. Bei mir ist das nach dem include
$token=TPLinkToken();
oder machst du das in dem Skript vom include?
entweder
$GUIDDummy == „bc48270-177-e7-a5b9-358956“)
oder $GUIDDummy != „“)
In deinem Fall geht er nicht in den IF Bereich rein.

Den Token hole ich im Skript vom include. Das klappt auch.

$GUIDDummy=getvalue(33575/*UID der Dummy Instanz*/);
$ActionScriptID=getvalue(10141); /*ID des  füs Schalten */
if ($root>0 and $GUIDDummy != "") /*nur zur Sicherheit, sollten die Werte mal verloren gehen */
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);
    $content = array (
    'method' => 'getDeviceList'
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/json"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($content));
    $result = curl_exec($ch);
    $devicelist=json_decode($result,true)["result"]["deviceList"];

    foreach ($devicelist as $device)
    {
        $instanceID=@IPS_GetInstanceIDByName($device["alias"],$root); /*Prüfen ob die Instanz schon vorhanden ist*/
        if ($instanceID == false)
        {
            //Schalterinstanz
            $InsID = IPS_CreateInstance($GUIDDummy);
            IPS_SetName($InsID, $device["alias"]);
            IPS_SetParent($InsID, $root);


Warning:  5245bcd8-8efa-4944-a891161 is not a valid GUID in C:\ProgramData\Symcon\scripts\35513.ips.php on line 33

Warning:  Root kann nicht geändert werden in C:\ProgramData\Symcon\scripts\35513.ips.php on line 35

Dann kommen wir dem Fehler schon näher. Hat was mit der ID der Dummy Instanz zu tun. Mal schauen wie ich das gemacht hab die herauszufinden. Könnte ja sein, dass die bei jeder Installation anders ist.
Edit: Am einfachsten ist es, du machst die settings.json mit einem Texteditor auf und suchst nach irgemd einem Dummy Modul. Dort ist die ID hinterlegt. Ich hab es anders gemacht, weiß aber nicht mehr wie.

Sorry jetzt, aber das ist wirklich Quark.
Die GUIDs sind immer gleich und stehen in der Dokumentation von Symcon.
Das schreibt man fix in das Script.
Und eine Startkategorie ermitteln dir meisten Scripte durch ihre eigene ParentID. Dann wird keine externe IPS-Variable und auch keine feste ObjektID benötigt.
Michael

Ich nehme das zur Kenntnis.