Listen in PHP-Modulen

Musst Du Patami Bitbucket Zugangsdaten schicken dann kann er Dich zum Testen und Nachstellen des Fehlers vom Develop Repository freischalten. Öffentlich ist das noch nicht.

Ist unterwegs.

paresy

Kurze Frage. Dynamisch Listen aus dem Modul anzuzeigen ist ja möglich. Kann man nun zu diesen Elementen editierbare Felder hinzufügen?

Ich bräuchte das für das MiFlora Modul. Und zwar finde ich Pflanzensensoren (die würde ich in der Liste anzeigen) und nun will ich gerne ganz komfortabel einen MediaSelector bauen, wo ich dann zu jedem Sensor ein Foto auswählen kann. Sprich jeder Sensor bekommt ein Pflanzenbild. Das kann der User sicherlich auch selber irgendwo in eine Variable tippeln, ich würde es aber praktischer finden, wenn man per Selector nur ein Bild aus der Mediathek auswählen kann, und das Modul fühlt die HTML Variable selber mit dem gewünschten Inhalt.

Geht das irgendwie?

Ja, das geht. Du kannst deine vorhandenen Geräte im „values“ Bereich einfügen und auch editierbar machen. Zusätzlich wäre es aber wichtig, dass du an einer „index“ Spalte „save“ aktivierst, damit du hinterher auch weißt, welche MediaID zu welchem deiner Sensoren gehört.

paresy

Siehe PM, hab Dich freigeschaltet.

Habt ihr das Problem mit der Farbe gelöst? Ich hab genau die gleiche Problematik!

ich bin mir zwar nicht sicher ob es hilft, aber anbei ein Beispiel aus meinen Modul, in dem ich die Farben in den Listen abhängig vom Status von Device & Device Type setze:


if ($State) { 
41 					if ($ModuleID == osrIPSModule::omLight) 
42 						//$rowColor = "#".$Color; //State on 
43 						$rowColor = ($ColorTemp) ? "#FFDA48" : "#FFFCE0"; //State on 
44 					if ($ModuleID == osrIPSModule::omPlug) 
45 						$rowColor = "#98FF72"; //State on 
46 				} else { 
47 					if ($ModuleID == osrIPSModule::omLight) 
48 						//$rowColor = "#D6D6D6"; //State off 
49 						$rowColor = ($Online) ? "#FFFFFF" : "#D6D6D6"; //State off 
50 					if ($ModuleID == osrIPSModule::omPlug) 
51 						$rowColor = ($Online) ? "#FFA0A0	" : "#D6D6D6"; //State off 
52 				} 
53  
54 				$data->elements[1]->values[] = array( 
55 					"InstanceID" => $index, 
56 					"LightID" => IPS_GetProperty($item['DeviceID'], "DeviceID"), 
57 					//"State" => $State, 
58 					"Name" => IPS_GetName($item['DeviceID']), 
59 					//"UniqueID" => IPS_GetProperty($item['DeviceID'], "UniqueID"), 
60 					"Hue" => $Hue, 
61 					"Color" => ($Color != "") ? "#".$Color : "", 
62 					"CT" => ($ColorTemp != "") ? $ColorTemp."K" : "", 
63 					"Brightness" => $Bright, 
64 					"Saturation" => $Saturation, 
65 					"rowColor" => $rowColor 
66 				); 


Danke für die Rückmeldung. Leider kann ich keinen wesentlichen Unterschied zu meinem Code erkennen.
Mal schauen, ob @paresy irgendwas herausfindet.

Ich habe das Problem auf dem Schirm. Vermutlich komme ich aber erst nach dem Wochenende dazu :frowning:

paresy

Ich habe den Fehler für mich nun gefunden, weiß aber nicht, ob das so in Ordnung geht. Und dazu gleich noch ne Frage.

Und zwar werden ja in deinem ListBasic Testmodul bei der Erstellung der „TreeData“ registriert, und in GetConfigurationForm entsprechend heran geholt. Dort verarbeitet und dann wieder ausgegeben.

Wenn ich nun Daten zum ERSTEN mal über GetConfigurationForm in die Liste bringe (da werden sie rot angezeigt), diese verändere und speichere. Sind diese ab sofort in der Property gespeichert.

Im weiteren Verlauf steht das alles schon in der Property drin, wenn ich nun aber über GetConfigurationForm ein leeres Values Array, oder eins wo nicht mehr alle Values drin sind, scheint das System nicht so recht klar zu kommen. Irgendwie sind trotzdem alle Elemente der Propery vorhanden. Oder sehe ich das falsch? Das sind zumindest so meine Untersuchungen.

Ich dachte ich speise über GetConfigurationForm immer den Dateninhalt, wenn ich nix sende, wird auch nix angezeigt. Aber die überlagerst das irgendwie mit der Property!?

Das ist aber so richtig und auch so Dokumentiert.
Wird die Liste erneut geladen, so werden zuerst die Werte eingetragen, die als Modul-Eigenschaften gesichert wurden. Die weiteren Elemente, inklusive der Farbe, werden mit den initialen Werten aus values aufgefüllt.

Die Anwendung die Liste über GetConfigurationForm zu verändern brauchst du im values Bereich auch nicht, weil die Daten ja in der Instanz gespeichert werden.

Eine Liste mit dynamischen Inhalten über GetConfigurationForm ist eher für den Action-Bereich gedacht.
Somit ist ja auch jetzt schon möglich (eingeschränkt) einen Konfigurator zu erstellen.

Michael

Wozu machst Du die Unterscheidung?
Ich liefere jedes Mal immer die kompletten Values mit, dann muss ich auch schon nicht zwischen erstem und weiteren Aufrufen von GetConfigurationForm unterscheiden…

Schön wäre es wenn die liste über die komplette Breite geht.
Bei mir kann ich leider nichts mehr in meiner liste Sehen.

mfg: Swen

Ich habe da mal eine Frage. Ich möchte in einem Modul mehrere Instanzen in einer Liste auswählen können.
liste.PNG

{
  "elements":
  [
    {
    "type": "List",
    "name": "Devices",
    "caption": "Devices",
    "add": true,
    "delete": true,
    "sort": {
        "column": "name",
        "direction": "ascending"
    },
    "columns": [{
        "label": "InstanceID",
        "name": "instanceID", 
        "width": "75px",
        "add": 0,
        "save": 1,
        "edit": {
            "type": "SelectInstance"
        }
    },{
        "label": "Name",
        "name": "Name",
        "width": "auto",
        "add": ""
    }],
    "values": []
  }
 ]
}

Ist es möglich, dass der Name der ausgewählten Instanz in der Liste erscheint? Kann mir da jemand behilflich sein?

Grüße,
Christoph

Ich weiß nun mittlerweile, dass ich das komplette Konfigurationsformular per JSON und GetConfigurationForm übergeben muss. Im SymconMisc ist ein hervorragendes Beispiel dafür.

Danke!

Wie kann ich Listen in einem dynamisch erstellten Konfigurations Formular nutzen :confused:
Ich schaffe es irgendwie nicht Elemente und Daten zu retournieren.

Du schreibst das, was Du normalerweise in die form.json schreibst in die Funktion GetConfigurationForm und übergibst den kompletten JSON String im Return.

Danke für den Denkanstoss :smiley: - funktioniert nun!

Hast Du mittlerweile eine Idee, was nicht richtig ist?
Nachvollziehen solltest Du es können am Modul „Patami Object Group“ in meinem Branch „test“. Konfiguriere dort einfach mal eine Kategorie in der Objektliste, dafür gibt es keinen Treiber und die Zeile sollte rot werden.

@patami: Fehler mit den fehlenden Farben in der Liste ist im nächsten Update korrigiert.

paresy