Actions - mehrere Fragen

Ich versuche die erste Action in meinem Modul zu integrieren. Diese wird soweit schon korrekt dargestellt und man kann sie auch konfigurieren.

In der Formular-Definition habe ich ein Listen-Element drin, in welchem mehrere Zeilen vorhanden sind:

"form": [
        {
            "type": "Select",
            "name": "BlockNr",
            "caption": "Block",
            "options": [
                {"caption": "Analog A1-A4", "value": 1},
                {"caption": "Analog A5-A8", "value": 2}
            ]
        },{
            "type": "List",
            "name": "ValueList",
            "rowCount": 4,
            "columns": [
                {
                    "name": "Nr",
                    "caption": "#", 
                    "width": "20px"
                },{
                    "name": "Value",
                    "caption": "Value",
                    "width": "200px",
                    "edit": {
                        "type": "NumberSpinner",
                        "minimum": -32768,
                        "maximum": 32767,
                        "digits": 0
                    }
                },{
                    "name": "Variable",
                    "caption": "Variable",
                    "width": "auto",
                    "edit": {
                        "type": "SelectVariable",
                        "validVariableTypes": [0, 1, 2]
                    }
                }
            ],
            "values": [
                {"Nr": 1, "Value": 0, "Variable": 0},
                {"Nr": 2, "Value": 0, "Variable": 0},
                {"Nr": 3, "Value": 0, "Variable": 0},
                {"Nr": 4, "Value": 0, "Variable": 0}
            ]
        }
    ],

Nun möchte ich im Action-Teil auf die Werte der Liste ValueList zugreifen. Dabei bekomme ich aber immer den Fehler, dass dieser Index nicht existiert. Ich habe mir nun folgende Action erstellt um einmal zu sehen, was da überhaupt daher kommt. BlockNr wird mir korrekt ausgegeben, so wie im Formular ausgewählt. ValueList spukt aber einen Fehler Notice: Undefined index: ValueList

"action": [
        "var_dump($_IPS['BlockNr']);",
        "var_dump($_IPS['ValueList']);"
    ],

Wie komme ich an die Werte in ValueList heran?
Danke für eure Hilfe :slight_smile:

Kann mir die Antwort gleich selber geben…
Habe immer nur das Modul neu geladen, jedoch den Dialog Befehle testen der Instanz offen gelassen :banghead:

Funktioniert wie es soll, einfach Modul neu laden und alle Dialoge neu öffnen :wink:

So, die Actions funktionieren nun wie sie sollen.
Ist übrigens eine tolle Lösung :slight_smile:

Seit einiger Zeit habe ich auch die Test-Stubs im Modul integriert und die Unit-Tests funktionieren soweit auch. Seit ich aber den neuen Unterordner actions mit den Aktionen erstellt habe, bekomme ich bei den Tests immer einen Fehler:
file_get_contents(D:\IP-Symcon\SymconData\modules\JoT.TACoE\tests/…/actions/module.json): failed to open stream: No such file or directory

Ursache ist anscheinend folgender Code in KernelStubs.php:

private static function loadModules(string $folder, string $libraryID): void
        {
            $modules = glob($folder . '/*', GLOB_ONLYDIR);
            $filter = ['libs', 'docs', 'imgs', 'tests'];
            foreach ($modules as $module) {
                if (!in_array(basename($module), $filter)) {
                    self::loadModule($module, $libraryID);
                }
            }
        }

Dabei ist actions in $filter nicht vorhanden, was dazu führt, dass versucht wird den Ordner actions als Modul zu laden. Könnt ihr die Test-Stubs entsprechend anpassen?

Oder muss da noch ein module.json in den Ordner? Das würde dann allerdings in der IPS-Doku fehlen…

@paresy
Habe mir soeben euer GitHub-Tutorial angeschaut und versucht das gemäss eurer Anleitung selber anzupassen. Einen entsprechenden PullRequest dürft ihr nun noch bestätigen :wink:

2 „Gefällt mir“

Sehr gut gemacht. Habe ich auch entsprechend gemerged :slight_smile:
Vielen Dank!

paresy