Actions: Was bedeutet 'Target is no Variable'?

Ich habe eine Liste mit Aktionen, welche bei einigen eigenen Aktionen als Beschreibung ‚Ungültige Aktion: Target is no variable‘ anzeigt.


Wo kommt diese Meldung her?
Das Target ist keine Variable, sondern eine Instanz.
Und die Variable ‚TARGET‘ ist gesetzt.
Die Aktion schaut so aus:

{
    "id": "{FEE9B3A7-1853-6914-EE2E-4A11D79A57A8}",
    "caption": "Control FTP service",
    "form": [
        {
            "type": "CheckBox",
            "name": "ACTIVE",
            "caption": "FTP service active?"
        }
    ],
    "action": "FB_SetFTPServer($_IPS['TARGET'],$_IPS['ACTIVE']);",
    "readable": "echo 'FB_SetFTPServer(' . $_IPS['TARGET'] . ',' . ($_IPS['ACTIVE'] ? 'true' : 'false') . ');';",
    "category": "target",
    "restrictions": {
        "objectType": [
            1
        ],
        "moduleID": [
            "{14588B6C-6F13-A3C1-0C79-88B6624E1D87}"
        ],
        "includeEnvironments": [
            "TestCommands",
            "Default"
        ]
    },
    "locale": {
        "de": {
            "Control FTP service": "FTP-Dienst steuern",
            "Enable or disable the FritzBox's FTP service": "Aktiviert oder deaktiviert den FTP Dienst der FritzBox",
            "Switch FTP service {ACTIVE, profile}": "Schalte FTP service {ACTIVE, profile}",
            "FTP service active?": "FTP Dienst aktiv?"
        }
    },
    "format": "Switch FTP service {ACTIVE, profile}",
    "description": "Enable or disable the FritzBox's FTP service"
}

Witzigerweise funktioniert diese hier aber :thinking:

{
    "id": "{BC658A7A-347C-DAB5-FCB1-432206CA4DEA}",
    "caption": "Send WebFront Notification",
    "form": [
        "$Form[]=['type' => 'ValidationTextBox','name'=>'TITLE','caption'=>'Title'];",
        "$Form[]=['type' => 'ValidationTextBox','name'=>'TEXT','caption'=>'Text'];",
        "$id = IPS_GetInstanceListByModuleID('{B69010EA-96D5-46DF-B885-24821B8C8DBD}')[0];",
        "$Options=[];",
        "foreach (UC_GetIconList($id) as $Icon) {",
        "   $Options[] = [",
        "       'caption'   =>  $Icon,",
        "       'value'     =>  $Icon",
        "   ];",
        "}",
        "sort($Options);",
        "array_unshift($Options, ['caption' => '<none>', 'value' => 'Transparent']);",
        "$Form[]=['type' => 'Select','name'=>'ICON','caption'=>'Icon','options'=>$Options];",
        "$Form[]=['type' => 'NumberSpinner','name'=>'TIMEOUT','caption'=>'Timeout','minimum'=>0,'suffix'=>'seconds'];",
        "return $Form;"
    ],
    "action": "WFC_SendNotification($_IPS['TARGET'], $_IPS['TITLE'], $_IPS['TEXT'], $_IPS['ICON'], $_IPS['TIMEOUT']);",
    "readable": [
        "echo 'WFC_SendNotification(' . $_IPS['TARGET'] .','",
        ". '\\'' . $_IPS['TITLE'] . '\\','",
        ". '\\'' . $_IPS['TEXT'] . '\\','",
        ". '\\'' . $_IPS['ICON'] . '\\','",
        ". $_IPS['TIMEOUT'] . ",
        "');';"
    ],
    "category": "target",
    "restrictions": {
        "objectType": [
            1
        ],
        "moduleID": [
            "{3565B1F2-8F7B-4311-A4B6-1BF1D868F39E}"
        ],
        "includeEnvironments": [
            "TestCommands",
            "Default"
        ]
    },
    "locale": {
        "de": {
            "Send WebFront Notification": "Verschicke WebFront Nachricht",
            "<none>": "keins",
            "Title": "Titel",
            "Text": "Text",
            "Icon": "Icon",
            "Target of Push Notification": "Ziel der Push Nachricht",
            "Send a Notification to all devices showing the the target WebFront": "Senden Sie eine Benachrichtigung an alle Geräte, die das Ziel-WebFront anzeigen",
            "Send Webfront Notification \"{TITLE} - {TEXT}\" with the icon {ICON} {TIMEOUT, select, 0 {} other {and timeout of {TIMEOUT, number} seconds}}": "Verschicke WebFront Nachricht \"{TITLE} - {TEXT}\" mit dem Icon {ICON} {TIMEOUT, select, 0 {} other {und einem Timeout von {TIMEOUT, number} Sekunden}}"
        }
    },
    "format": "Send Webfront Notification \"{TITLE} - {TEXT}\" with the icon {ICON} {TIMEOUT, select, 0 {} other {and timeout of {TIMEOUT, number} seconds}}",
    "description": "Send a Notification to all devices showing the the target WebFront"
}

Code ist hier verfügbar:

Actions hier:

Michael

Antworte mir hier mal selber… weil blöd :smiley:
Wenn man die Lösung weiß, ist der Erklärung warum es nicht funktioniert auch klar. Aber die Fehlermeldung ist leider gar nicht hilfeich.

Ursache ist das hier im Format:
{ACTIVE, profile}
ACTIVE ist keine IPS-Variable und hat natürlich kein Profil… es ist nur ein bool Wert true/false.
Somit funktioniert es so nun korrekt:
{ACTIVE, select, true {aktiv} false {inaktiv}}
Michael
PS: Eine Meldung wie ‚Target ACTIVE is no Variable‘ wäre schön. Und wer soll den wissen das die Meldung mit Variable eine IPS-Variable und keine aus der Form meint :stuck_out_tongue:

Tatsächlich geht es bei dem Fehler gar nicht um den Parameter ACTIVE, sondern um das Ziel, also TARGET. Die Formatierung profile würde den Wert von ACTIVE auf Basis des Profils des Ziels darstellen. Das klappt aber nicht, da das Ziel nunmal keine Variable ist. Die Parameter der Form heißen übrigens Parameter und nicht Variablen. Damit wäre deine gewünschte Fehlermeldung verkehrt. Hast du eine Idee, wie man die Fehlermeldung anpassen könnte, so dass sie dir besser hilft und korrekt ist?

Nö… das TARGET wird doch gar nicht benutz im Format.
Es ist doch eher so dass das Target der Formatierung für ‚profile‘ hier ‚ACTIVE‘ ist.

Korrekt.

Ja… ich meinte aber die Parameter/Variablen von „format“ nicht von der Form :wink:

Aber auch nicht besser als die jetzige von euch :smiley:

Was hast du dagegen einfach den Parameter mit in die Fehlermeldung aufzunehmen?
Also:
‚Parameter ACTIVE is no Variable‘ anstatt
‚Target is no Variable‘
Michael

Da hast du leider den Typ falsch verstanden, so funktioniert profile nicht. Der wird typischerweise für die ganzen „Schalte auf Wert“-Aktionen verwendet. Wenn du also beispielsweise eine Aktion hast die den Wert auf 5 schaltet (VALUE = 5), dann formatiert {VALUE, profile} diesen auf Basis des Ziels der Aktion. Dafür ist irrelevant, dass in diesem Block kein TARGET steht, da standardmäßig immer TARGET für das Profil verwendet wird auf dessen Basis VALUE formatiert wird. Schau dir für die Verwendung gerne mal die ganzen switchValue*.json in deinem actions-Ordner an.

Ja, das habe ich schon selber gemerkt und auch im zweiten Post geschrieben das ich da blöd war.
Das mit traget ist jetzt auch klar, weil das ja die Variable für das Profil angibt; was ich aber gar nicht habe. Ich wollte ja nur true/false auswerten :sweat_smile:
Michael