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
[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
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
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.
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.
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“.
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.
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.
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
Jedenfalls schonmal, danke für eure Hilfe!!
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.
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?