Listen in PHP-Modulen

Danke. Im nächsten 4.2er nehme ich an?

Im 4.3er Branch ist es ab sofort drin. Da das Release in den nächsten Wochen kommt, gehe ich nicht mehr davon aus, dass wir für die 4.2 noch ein Bugfix Release machen.

paresy

OK, danke Dir.

Warum ist ‚label‘ und ‚width‘ bei eine unsichtbaren Spalte ein Pflichtfeld ?
Benötigt wird in dem Fall ja beides nicht.

Michael

Fehler wenn eine Liste als Edit-Aktion eine Checkbox ohne caption enthält.


IP-Symcon Management Console [localhost]

Zugriffsverletzung bei Adresse 008DAE6E in Modul ‚ips_console.exe‘. Lesen von Adresse 000002D4.

OK

Dannach kommt man nicht mehr aus dem Fenster und muss die Konsole abschießen.
Michael

Edit darf nur einen festen Wert enthalten? Dort ist normalerweise kein Objekt erlaubt - Dies ist das „edit“ Feld?

paresy

Sorry edit aktion… nicht add :banghead:

Das hier (Auszug columns)

{
                            "label": "Visible",
                            "name": "show",
                            "width": "75px",
                            "edit": {
                                "caption": "Visible as column ?",                        
                                "type": "CheckBox"
                            }

Fehler, weil caption vergessen

{
                            "label": "Visible",
                            "name": "show",
                            "width": "75px",
                            "edit": {
                                "type": "CheckBox"
                            }

Michael

Auto ist bei width auch sehr böse, wenn man zu viele Spalten hat.
Die Spalte mit auto wird verschluckt. Eine Mindestgröße wird nicht gesetzt.
Auch mit der Maus dann die Spalte größer ziehen funktioniert nicht (bei anderen Spalten schon).
Zwischenablage07.png

Dann wäre da noch, das bei einem bool Wert eine Checkbox schöner wäre, als ‚true‘ und ‚false‘.
Die überhaupt fehlende Breite hatten wir schon,
Ebenso werden beim sortieren von Zahlen, diese als String behandelt und folglich nicht korrekt sortiert.
Siehe Spalte ‚No.‘ welche eine Zahl (int) enthält.

Michael

Bei mir funktioniert es jetzt mit den Farben @paresy. Danke!

Hat sich erledigt :slight_smile:

Ja. Schau dir mal meine Beispiele aus dem SymconTest Repo an :slight_smile:

paresy

So, habe mich jetzt mit der PHP Liste etwas vertraut gemacht.

Habe eine angelegt und kann diese auch auslesen.

Nun will ich von einem Netztwerkdevice Werte auslesen und Werte in diese Liste schreiben.

Die Werte bekomme ich aus dem Device entweder als json oder als array, aber das ist nicht so wichtig.

Wie bekomme ich jetzt die Werte in die Liste, so dass wenn man die Eigenschaften des Moduls aufruft diese aus angezeigt werden?

Mit GetConfigurationForm kam ich jetzt nicht ganz zurecht.

Schau dir mal die List Beispiele in meinem SymconTest Repository an. Dort sind einige passende Beispiele drin :slight_smile:

paresy

Danke, glaube es jetzt verstanden zu haben.

Gesendet von iPhone mit Tapatalk

Multi-Select wäre ganz toll für Listen im Aktionsbereich. (Konfigurator)

Dafür muss dann aber immer ein Array mit allen selektierten Einträgen als PHP-Variable an die Buttons übergeben werden.
Egal ob nun ein Eintrag ausgewählt, 5 oder alle.

Michael

PS: Hat schon wer die mangelnde Breite angesprochen ? :wink: (schnell wegduck und ab in den Urlaub :smiley: )

ich brauche nochmal Unterstützung bei den Listen…

Folgende Ausgangssituation:

Ich möchte von einem Bose SoundTouch Daten auslesen (damit kenne ich mich ja aus ;)) und in eine Liste schreiben.
Das klappt auch generell.

Diese „Liste“ soll aber weder editierter sein, noch soll der User in dieser Liste etwas hinzufügen.

Also habe ich es so angelegt:


{
			"type": "List",
			"name": "PresetsTable",
			"caption": "Device Presets",
			"rowCount": 6,
			"sort": {
				"column": "PresetNumber",
				"direction": "ascending"
			},
			"columns": [
				{
					"label": "Preset #",
					"name": "PresetNumber",
					"width": "75px",
					"save": true
				}, {
					"label": "Station ID",
					"name": "StationID",
					"width": "75px",
					"save": true
				}, {
					"label": "Station Name",
					"name": "StationName",
					"width": "auto",
					"save": true
				}
			],
			"values": [
			]
		}

Die Daten werden auch im Konfigurationsformular angezeigt.

Jetzt bin ich davon ausgegangen, das mit „save“ als Modul Eigenschaft gespeichert werden.

Wenn ich jetzt aber versuche

$arrString = $this->ReadPropertyString("PresetsTable");
$arr = json_decode($arrString);
print_r($arr);

auszulesen, ist der Wert NULL…

Irgendwie komme ich mit den Listen noch nicht so zurecht…

Jemand eine Idee?

PS:

Wenn ich eine zweite, unabhängige Liste erstelle, wo Werte hinzugefügt werden können, die auch editierter und lösbar sind, bekomme ich die Werte.

Bin auf IPS 4.4 auf meinem Develop System

Wozu eine Liste anzeigen und als Eigenschaft speichern, wenn der User weder editieren noch hinzugefügt oder löschen kann?
Solange Values leer ist, wird halt nix gespeichert.

Michael

Hallo Michael,

mir war fast bewusst, dass dein Einwand kommt. Im Prinzip hast du Recht und ob es Sinn macht oder nicht.

Ich wollte/will gerne eine bessere Übersicht für den Nutzer anzeigen und ich brauche dann nicht das device wieder abfragen, sondern sehe in der Eigenschaft nach.

D.h. wenn es nicht editierter ist, dann wird auch nichts gespeichert?!

Warum dann der Parameter „save“?

Zitat:
Beim Speichern der Liste werden alle Listenelemente, die editierbar sind oder den Paramter save gesetzt haben, als Modul-Eigenschaften gesichert.

Ich will es ja nur verstehen :wink:

Values wird gespeichert.
Dein Beispiel ist leer, nur das Gerüst hast du gepostet.
Und wenn nur Anzeigen, dann mit GetConfigurationForm dynamisch erstellen und im Action Bereich (Testcenter) ausgeben.
Michael

public function GetConfigurationForm()
{
$data = json_decode(file_get_contents(DIR . „/form.json“));

$deviceIP = $this->ReadPropertyString(„DeviceIP“);
if ($deviceIP != „“) {
$devicePresets = $this->getDevicePresets();
if (!is_array($devicePresets)) {
$devicePresets = array ();
}
}
if (!empty($devicePresets)) {
foreach ($devicePresets as $devicePreset) {
$data->elements[13]->values = Array( „PresetNumber“ => $devicePreset[„PresetNumber“],
„StationID“ => $devicePreset[„StationID“],
„StationName“ => $devicePreset[„StationName“]);
}
}
}
return json_encode($data);
}