Zusandsgruppen bilden für einzelne Gewerke

Hi zusammen,

letztens kam der Thread mit IPSLight hier im Forum hoch. Über sowas grüble ich schon länger.

Was hätte ich gern - eine leichtgewichte Steuerung bzw. Anzeige ob z.B. überalle das Licht an/aus ist, ob alle Türen bzw. Fenster geöffnet/geschlossen sind. Das aber gesammelt über eine Statusvariable, so daß man im Webfront schnell den überblick bekommt ob alles okay ist.

Wie macht man sowas am schlausten? Man kann natürlich alle Events einsammeln, aber man muß ja trotzdem dann immer alle anderen Zustände abfragen und nur dann den Zustand ändern wenn alle Geräte AUS bzw. EIN sind!?!?! Hat da jemand schon was einfach zu integrierendes gebastelt.

Hoffe ich habe mich klar in der Anforderung ausgedrückt :confused:

Danke & Ciao
Pitti

So was nennt man eine logische UND Verknüpfung.
Grins

Es muss ja nur einer aus der Gruppe auslösen, um den Sammelzustand zu ändern.

Gesendet von iPhone mit Tapatalk

Sorry, so schlau bin ich auch :wink:

Okay Beispiel:

[ul]
[li]Ich habe 5 Lampen im Haus
[/li][li]Habe ein Script welches durch die 5 Zustandsänderungen der Lampen befeuert wird
[/li][li]wenn ein Ereignis gleich AN liefert ist es einfach => Sammelzustand auch AN
[/li][li]wenn ein Ereignis AUS liefert kann immer noch eine andere Lampe an sein
[/li][li]also muss man alle Lampen abfragen und den Zustand lesen
[/li][/ul]

Programmtechnisch bekomme ich das schon hin :slight_smile:

Die Frage ist:

a) gibt es eine smartere Lösung und ich komme nur nicht drauf?
b) hat jemand dafür schon eine Art Vorlage / Template /Script ohne die IPSLibrary reinzuziehen

Danke Pitti

Deine Aufgabenstellung ist jetzt nicht so kompliziert, dass man die erneut erklären muss.
[emoji6]

Ich hab das so gelöst. Gruppen-AUS ist nur, wenn keine AN ist. Alles andere ist nicht relevant. Diesen Zustand liefert jede Lampe selbst über das auslösende Ereignis bei Zustandsänderung.

Gesendet von iPhone mit Tapatalk

Hi!

Finde das jetzt auch nichts besonderes. Hab ich an einigen Stellen im Einsatz.

Ich habe dann meist ein Array mit allen Variablen von z.B. Fenster-Zuständen.
Diese werden auch alle per Event überwacht.
Sobald sich bei einer Variable der Zustand ändert, wird einmal kurz das Array durchlaufen und wenn eine TRUE ist, dann ist der „Sammelzustand“ auf TRUE…ansonsten FALSE.
Dazu hab ich meist noch einen „Zähler“, damit ich z.B. nicht nur sehe, ob ein Fenster offen ist, sondern wie viele Fenster offen sind.

Aber da z.B. ein Modul machen wäre total oversized. Das kann sich jeder ganz einfach nach seinen Wünschen/Bedürfnissen in sein Script/Projekt einbauen.

Grüße,
Chris

Hatte auch irgendwo im Forum meine Lösung und Script gepostet, finde es aber gerade nicht :slight_smile:

Eigentlich war das sehr easy und unterstützt mehrere Stockwerke.

Aber imho gibt es sogar von jemanden ein Modul. Etagenlicht oder so?
Michael

Ich persönliche arbeite bei meinen Skripten immer mit Verlinkungen.

Sprich ich lege für mein Skript eine bestimmte Ordnerstruktur an. Eine Kategorie für Gruppen, welche untergeordnet weitere Kategorien für die logische Einordnung haben (z.B.: Erdgeschoss, Obergeschoss, etc).

In diese Gruppen packe ich dann die Verlinkungen zu den entsprechenden Schaltvariablen, die ich überwachen möchte. Mein Skript läuft dann über alle Kategorien und Links drüber, und erstellt für alle Statusvariablen ein auslösendes Event unter dem Skript. Dadurch startet das Skript immer, wenn sich der Zustand einer Statusvariable ändert.

Beim Auslösen des Skriptes wird dann geprüft, welche Statusvariablen eingeschaltet sind. Dementsprechend kann ich dann das Variablenprofil setzen, beispielsweise auf „EG & OG an“. Zusätzlich generiere ich mir noch eine HTML-Tabelle welche alle eingeschalteten Variablen anzeigt und mir gleichzeitig eine Schaltfäche zum Ausschalten bietet.

Dadurch dass ich mit Links arbeite, kann ich beliebig neue Statusvariablen hinzufügen, alte entfernen oder die logische Struktur ändern. Quasi „Drag and Drop“.

Ich spare mir sogar die Links. Die Ereignisse muss man ja eh anlegen und dienen durch den Namen und den Auslöser als Datenquelle.

Gefunden:
Alle Links zu einer Variablen finden - Seite 2

Zumindest den Teil zum festlegen ob Licht in der Etage nun an oder aus ist.
Das ActionScript der Etagen Variable fehlt in dem Beitrag allerdings.

Michael

Hi zusammen,

dachte schon ich muss die Frage wegen Trivialität zurückziehen:D

Okay, nehme mit - das Durchlaufen der einzelnen Zustände muss gemacht werden! Manchmal lohnt sich aber auch so eine Frage zu stellen weil einen das Gefühl nicht losläßt das es eleganter gehen sollte :rolleyes: .

Vielen Dank für die Anregung hinsichtlich Handling, Struktur und Link! Schau mir das jetzt an und passe es entsprechend meiner Struktur an.

Danke
Pitti

Das ist aber auch der große Nachteil an Foren. Oft schreibt man aneinander vorbei oder legt das eine oder andere Wort je nach eigener Gefühlslage so oder so aus.

Daher bevorzuge ich das persönliche Gespräch.

Helau

Gesendet von iPhone mit Tapatalk

Hi Boui,

bin da 100% bei Dir, mag auch lieber das persönliche Gespräch. Der Reichweitenvorteil eines Forums macht es aber auch so interessant!

Das tolle an diesem Forum ist, zum Schluß kommt eigentlich immer was hilfreiches bei raus!

Schöne Woche Euch - morgen gehts für ne Woche Skifahren :cool:

Hi Nall-chan,

genial einfach - genial effizent!!! Danke für den Hinweis und das Script - schon umgesetzt und glücklich :smiley:

Danke & Ciao
Pitti

Hi Nall-chan,

da war ich wohl zu voreilig :confused:

Ich hatte gerade gesehen das ich Fehler im Log hatte …


          switch (IPS_GetVariable($TriggerVariableID)['VariableValue']['ValueType'])

müsste das nicht


          switch (IPS_GetVariable($TriggerVariableID)['VariableType'])

heißen ???

Kurios nur, als ich es so in der switch Anweisung hatte landet es trotzdem immer bei Bool. Habe es jetzt so:


           $triggerVariableID = IPS_GetEvent($trigger)['TriggerVariableID'];
			$variableType = IPS_GetVariable($triggerVariableID)['VariableType'];
            switch ($variableType) {

und nun gehts … letzteres muss man nicht verstehen, oder :banghead:

Ciao Pitti

Das war noch für IPS 3.4.
Da war der Rückgabewert noch etwas anders.
Da das Index nicht existiert landet es dann durch den Switch immer bei 0.
Michael

Hallo Zusammen,

Beim lesen der ganzen Antworten, hab ich eine Idee, bei der ich mir allerdings nicht weiß wie sie umzustezten ist.
Aktuell habe ich ein Array in einem Skript in dem ich alle Betreffenden Status Variablen eintrage und dann prüfe, ob in dem Array ein Wert True ist. Gestartet wird das Skript per Ereignise.
Kann ich das Array im Skript auch durch die angehängten Ereignisse automatisch befüllen lassen bzw wenn das nicht geht durch Links.

Wahrscheinlich stehe ich momentan etwas auf dem Schlauch und die Lösung ist mal wieder ganz einfach :cool:
Jedenfalls schonmal, danke für eure Hilfe!!

Gruß
Daniel

Oder einfach das Array entsorgen und die Links bzw. Ereignisse durchwandern.
Geht alles. Musst nur wissen was du als Basis deiner Daten (in dem Fall also IDs von Statusvariablen) definieren willst.

Michael

Also am sinnvollsten erscheint mir, wenn ich die Ereignisse unterhalb des Skripts als Datenbasis nehmen kann.
Die Ereignisse muss ich ja sowieso anlegen um das Skript zu starten.
Ich vermute mal, das ich mit IPS_GetEvent an die notwendigen Daten hierfür komme.

Gibt es zufällig ein Beispiel, wie sowas funktoniert?

Danke & Grüße

Siehe Post von Nall-chan in Post #8

Danke, das hab ich wohl überlesen.
Das muss ich mir mal genauer anschauen und Testen. Sieht ganz gut aus =)