Property in eigener Funktion setzen

Hallo zusammen,

ich habe mich mal in die Welt der Module vorgewagt und habe eine Frage:

Im Create Teil kann ich mit $this->RegisterPropertyInteger die Properties setzen. Ich habe nun eine Funktion gebaut und möchte in dieser Funktion die Properties verändern. Ich habe es mit IPS_SetProperty($_IPS[‚SELF‘], …) probiert, aber das funktioniert natürlich nicht.

Geht das überhaupt, was ich vorhabe?

Freue mich auf einen kurzen Gedankenanstoß in die richtige Richtung.

Gruß,
Christoph

Hallo Christoph,

was genau meinst du denn mit ändern?

Grüße,
Kai

Das ist irgendwie falsch :wink:
$_IPS[‚SELF‘]
$this->InstanceID ist die ID von deiner Instanz.
Aber warum willst du deine Property im Modul selbst ändern?
Gibt nur ganz wenige Situation wo das Sinn macht.
Michael

Ich will außerhalb des Create Teils in einer eigenen Funktion das machen, was ich mit RegisterPropertyInteger im Create Teil mache.

Hab ich gemerkt :wink:

Danke!
Ich habe eine Splitter Instanz, an der mehrere Children Instanzen hängen. Ich möchte durch einen Befehl an die Splitter Instanz die Propertys der Children Instanzen auf einen Schlag ändern können.
Ich könnte natürlich auch ein Skript schreiben, welchen die Instanzen anhand der GUID sucht und dann mti IPS_SetProperty arbeiten … Habe mich aber dafür entschieden, dieses in der Splitter Instanz über eine Funktion zu lösen, welche dann über den Datenfluss ein IPS_SetProperty in den Children Instanzen auslöst.

Dank Deinem Hinweis funktioniert das nun auch wie gewünscht. Hab ich da eine Situation erwischt, in welcher das Sinn macht? :slight_smile:

Grüße

Das ist nicht gewünscht. Im Normalfall soll keine Instanz eine anderen Instanz aufrufen oder verändern. Im Normalfall schicken die Kinder Daten an den Splitter und der weiß damit unzugehen. Erklär mal bitte genauer was du umkonfigurieren willst, denn bisher ist die Vorgehensweise nicht sauber.

Die sprichst aber einen guten Punkt an, den ich im Draft vergessen habe. Die Konfiguration ist dafür da, dass der Benutzer diese über die Konsole macht. Eine „Selbstkonfiguration“ macht eigentlich nicht viel sinn. Dies eher die Aufgabe eines Konfigurators der die Instanz passend erstellst.

Schau mal hier: [Draft] Best Practice zur PHP-Modul Erstellung

Punkt 5.1 ist quasi interessant :slight_smile:

Ich habe Punkt 2.5 hinzugefügt:

Eigenschaften (Properties) dienen zur Konfiguration durch den Benutzer. Ein Modul sollte sich niemals selber umkonfigurieren (z.B. über IPS_SetProperty oder IPS_SetConfiguration). Ebenfalls ein Aufruf aus einem Splitter Modul (siehe 5.1) ist nicht gestattet. Sollen Instanzen vorkonfiguriert erstellt werden, muss dazu ein Konfigurator erstellt werden, über den der Benutzer passende Instanzen erstellen kann.

paresy

Ich habe verschiedene Instanzen, die an einer Splitter Instanz hängen. In den Instanzen habe ich verschiedene Propertys. Diese werden grundsätzlich erstellt und können pro Instanz verändert werden. Wenn sich jedoch etwas ändert, was alle Instanzen betrifft, dann möchte ich nicht jede Instanz einzeln anfassen.

Ich schicke den Befehl an den Splitter. Der Splitter sendet über den Datenfluss an die Childen und diese konfigurieren sich dann mit

IPS_SetProperty($this->InstanceID, $Property, $Value);

innerhalb des Moduls selbst. Also ich greife jetzt nicht direkt auf „fremde“ Instanzen zu.

Es funktioniert auch so, wie ich mir das vorstelle. Wie kann ich das denn besser lösen?

Grüße,
Christoph

Wenn sich jedoch etwas ändert, was alle Instanzen betrifft, dann möchte ich nicht jede Instanz einzeln anfassen.

Wenn sich jedoch etwas ändert, was alle Instanzen betrifft, dann gehört diese Property in den Splitter. Kannst du den Anwendungsfall etwas näher beschreiben? Warum „ändert“ sich etwas? Ändert der Benutzer etwas? Oder ist die Änderung von außen bedingt?

paresy

Ich versuche, eine Rolladensteuerung zu bauen. Jeder Rolladen ist eine eigene Instanz, für die ich z.B. Helligkeitswerte einstellen kann. Ich habe also die Properties GruppenID und HelligkeitID. Prinzipiell kann ich also pro Rolladen eine Helligkeit einstellen, zu welcher der Rolladen runterfährt. Wenn ich (oder der Benutzer) jetzt jedoch die Helligkeit aller Instanzen einer Gruppe auf einen definierten Wert X setzen möchte, dann möchte ich nicht alle Instanzen anfassen. Es betrifft also nicht ALLE Instanzen, sondern nur die mit der gewünschten GruppenID.

Aus dem Splitter heraus teile ich den Children mit der entsprechenden GruppenID mit, dass sie die Property „HelligkeitID“ entsprechend anpassen. Also ich rufe NICHT aus dem Splitter heraus IPS_SetProperty für die Instanz auf.

Wenn ich die Propertys in den Splitter packe, dann muss ich zum Zeitpunkt der Erstellung des Moduls ja schon wissen, wie viele Gruppen ich habe.

Grüße,
Christoph

Wäre es nicht sinnvoller die Schwelle für Helligkeit als Statusvariablen abzubilden ?
Dann kann der User diese auch bei Bedarf im WF ändern… So als Denkanstoß.
Michael

Wäre es nicht sinnvoll die Gruppen in einer Liste direkt im Splitter zu pflegen? Wie realisierst du die Trigger? Wäre es nicht sinnvoll, dass der Splitter sich um den Trigger pro Gruppe kümmert und über den Datenfluss nur das Event an die Instanzen weiterreicht?

paresy

Okay, für die Helligkeit macht das Sinn. Wird umgebaut.

Ich habe jedoch noch 1-2 andere Dinge, die ich dann trotzdem gerne auf dem angedachten Wege lösen wollen würde - wenn möglich.

Kann ich nicht beurteilen … :wink: Werde ich mir mal ansehen.

Über einen Timer, der alle X Minuten prüft, ob ein Kriterium zum Fahren des Rolladens vorliegt. Beim Windalarm über Message auf Änderung der Variable „Wind“.

Eine Gruppe ist hier in diesem Fall als Himmelsrichtung oder Fassade zu sehen. Auch wenn ein Rolladen Teil der Gruppe ist, muss ich teilweise andere Helligkeitswerte für einen Raum vorgeben. Somit würde ich die Trigger nicht vom Splitter aus steuern wollen würden.

Ich will wirklich nur ab und zu mal eine Änderung zentral an alle Children schicken.