Komplexere Abläufe - Ideen / Erfahrungswerte gesucht

Hallo,

ich beschäftige mich gerade mit der etwas komplexeren Steuerung von ganzen „Ablaufpaketen“, also z.B. auch der Steuerung eines Hauses über einen längeren Zeitraum.

Als Beispiel möchte ich mal eine gedachte Party-Steuerung nehmen. Das ist zwar alles „ein bischen an den Haaren herbei gezogen“, verdeutlicht aber m.E. ein bischen die Probleme, die ich - soweit als möglich - lösen möchte:

(die Zahl gibt den Schritt an)
Um 20:00 Uhr gehts los. Sollzustand wird eingestellt:
A01 - 5 Lampen auf bestimmten Helligkeitswert
A02 - Stereoanlage nur im Wohnzimmer ein, auf „Kanal 2“
A03 - Lautstärke 0%
A04 - Playlist X landen & Abspielen
A05 - Lautstärke langsam auf „25%“

Um 21:30 soll eine automatische Durchsage kommen:
C01 - Lampen etwas heller
C02 - Lautstärke Küche & Terrasse langsam auf 0% fahren (für den Fall, dass diese eingeschaltet sind)
C03 - Stereoanlage in Küche & Terrasse zuschalten auf „Kanal 1“
C04 - Lautstärke Wohnen langsam auf 0%
C05 - auf „Kanal 1“ schalten
C06 - Play auf Spieler, der Kanal 1 bedient
C07 - Lautstärke Wohnzimmer auf 50% hochfahren
C08 - Lautstärke Küche & Terrasse auf 50% hochfahren

Nun stellen sich bei der Realisierung folgende Fragen:

  • was, wenn just in der „Sekunde“, wo die Umsachltungen (21:30) vorgenommen werden, jemand manuell eine andere Quelle (Kanal 3?) einstellt, also z.B. zwischen C03 und C08
    (diese Befehle sind wegen der Responses der Geräte durchaus zwischen 20 und 100 ms lang, wir reden also über durchaus bis zu einer Sekunde oder gar mehr Zeit)

  • Was, wenn eine andere, z.B. aus Unachtsamkeit parallel laufende Prozedur etwas ganz anderes einstellen soll? (z.B. könnte ein Tagesprogramm nicht abgeschaltet sein und „zwischenrein funken“, z.B. just um 21:30:40 Uhr auf "Radio und „Lautstärke 40%“ schalten. Wenn diese Umschaltung dann gerade „Reinfunkt“ wenn die Party-Prozedur schon den Kanal umgeschaltet hat, kommt in der Küche die Durchsage, im Wohnzimmer läuft dann z.B. Nachrichten.

Hat sich hier schon jemand mit diesem Thema beschäftigt?

Da gibt es doch bestimmt „Konventionen“ oder „Standards“ oder „Best Practices“ ähnlich UPnP / DNLA etc., wie solche Sachen zu handhaben sind?

Bin sehr gespannt!
jwka

Das ist ein extrem komplexes Thema. Du müsstest ja jede Eventualität gegenseitig verriegeln, mal ganz davon abgesehen das alle von außen manuell vorgenommenen Aktionen ständig abgefragt werden müßten. Auf die Lösung wäre ich auch gespannt.
Ich habe bei mir verschiedene Szenarien angelegt und diverse gegenseitige Abfragen. Eine Universallösung ist das beileibe nicht. Lösen kann man das meines Erachtens sowieso nicht, dazu müßte man nämlich auch 100% Zugriff auf die Hardware haben, was aber nicht der Fall ist.

Klar ist das komplex.

Aber zwischen „ich schiess die Befehle mal ab, hoffentlich geht’s gut“ und „total control“ ist ja ne weite Spannweite.

Alles im Gesamtkontext (Licht & Ton & weitere) definiert (also ganz sicher) steuern zu können, bilde ich mir auch nicht ein.

Aber wenigstens „Device“-weise (also z.B. alle Audio-Geräte einerseits oder alle Licht-Geräte andereseits) würde ich das schon hoffen.

Beispiel:

Ich denke z.B. über so Sachen nach, wie einem Folgebefehl den Sollzustand der vorherigen Befehle mitzugeben, also quasi immer einen „Befehle-Stack“ zu schicken, der beim ersten mal aus einem Befehl, beim zweiten mal aus einem Zustand, einem „AltBefehl“ und dem zweiten Befehl besteht usf.

Ist der Zustand wie gewünscht da, wird nur der eigentliche Befehl ausgeführt.

Ist der Zustand nicht da, wird in der Befehlskette solange „zurückgespult“, bis ein Wunsch-Zustand erkannt wird ODER bis ein „Brachialbefehl“ erreicht ist (z.B. wäre „Kanalumschaltung“ oder „Volume=0“ ein solcher „Brachialbefehl“, weil ich durch diesen einen „Nullzustand“ herstelle, von dem aus dann die Folgebefehle ausgeführt werden können.

Natürlich könnten auch Befehlen als „Brachialbefehle“ gekennzeichnet werden, die eben „Brutal und ohne Rücksicht“ ausgeführt werden. DAs kann im Grunde jeder Befehl sein - der jenige, der das „Befehlsscript“ schreibt muss sich halt über die Folgen im Klaren sein (z.B. Umschaltung der Quelle bei voller Lautstärke, ohne diese runter- und hochzufahren).

Wie schon eingangs gesagt, ich könnte mir denken,. dass es für diese Dinge schon irgendeine „Beschreibungssprache“ plus „Implementierungsrichtlinie“ gibt.

Habe da bloss noch nix gefunden, was nix heissen mag, denn ich suche u.U. mangels Wissen schlicht mit den falschen Begriffen.

Hallo!
Guck mal bei Loxlive( die Demosoftware)
Fehlt noch die Anbindung zu IPS.
Schönen Gruß
Egon

Loxlive habe ich auch schon in die Diskussion hier gebracht.

Nur glaube ich nicht, dass deren Software an dem ngesprochenen Problem irgend etwas ändert. Warum sollte es auch? Es ist eine Frage der eigenen Programmierung und nicht des verwendeten Systems.

Oder fehlen mir da gaaaanz wichtige Infos?

jwka

Das von dir geschilderte Problem ist generelles Thema bei Eventsteuerung. Sobald die Abhängigkeiten oder Vorgänge komplexer werden, musst du mit Prozessabbild, Hilfsvariablen und / oder Semaphoren arbeiten.
Die erwähnte Loxone ist eigentlich eine klassische SPS wie Siemens S7 oder Wago 750-841. Dort läuft ein Programm zyklisch in einer Endlosschleife durch.
Zu Beginn wird der Zustand der Eingänge (Schalter, Taster, Analogsignale) eingelesen, dann die Signale entsprechend den Prozessbedingungen verknüpft und zum Schluss werden die Aktoren angesteuert. So ein Zyklus dauert - grob gesagt - etwa 100ms. Durch die sequentielle Abarbeitung und das Prozessabbild treten die von dir geschilderten Schwierigkeiten nicht auf.
Es ist also schon eine andere Art der Programmierung

Gruß
Dieter

Yep.

Und Loxone wird meine beschriebenen Themen erst noch kriegen, wenn wirklich Custom Installer sich mit dem Produkt beschäftigen und mehr als der Zusammenhang „Schalter --> Licht“ zu bedienen ist.

Bleibt meine Eingangsfrage nach einer Theorie / Best Practices für dieses Problem, das doch im Prinzip bei allen Steuerungen auftritt, die nicht innert kürzester Zeit durch sind. Die Scherereien fangen m.E. bei Durchlaufzeiten im Bereich von 1-2 Sekunden schon an, weil das die Reaktionszeit eines Benutzers ist, der gerade vor einem Gerät / Fernsteuerung ist.

Da muss es doch schlaue Leute geben, die sich mit dem Thema schon beschäftigt haben???

jwka

Der einfachste Weg ist das „Einziehen“ einer Logikschicht zwischen Sensoren und Aktoren. Das heisst, dass kein Sensor direkt einen Aktor schaltet. Der Sensor schaltet eine Hilfsvariable. Bei Zustandsänderung einer dieser Variablen wird ein Script aufgerufen, das abhängig von den Zuständen den Aktor steuert. Damit zentralisiert du die Logik für den Ausgang. Es muss natürlich sichergestellt sein, dass dieses Script nicht mehrfach zeitgleich aufgerufen werden kann.

Gruß
Dieter

Das reicht in meinem Falle leider nicht aus - es geht um eine Situation mit Verteilter „Intelligenz“ (oder auch „nicht-Intelligenz“), u.a. einem UPnP Netzwerk mit Geräten, die auch mnuell und von Control Points us gesteuert werden können.

1.) IPS soll z.B. eine komplexere (und mehrere Sekunden dauernde) Prozedur durchführen.

2.) Zwischen (zwei oder mehreren) Befehlen an ein beteiligtes Gerät können:

  • Benutzer manuelle Änderungen (im Zweifel genu konträr zum Script) am Gerät vornehmen

  • andere UPnP Controller Befehle an das Gerät senden.

Wieder ein Beispiel (nehmen wir mal die Zahl als Sekundenzähler, um es einfach zu halten), wie es „ideal und gewünscht“ ablaufen würde:

01 - Script fährt Volumen Gerät 1 runter um 5%
02 - Script fährt Volumen Gerät 1 runter um 5%
03 - Script fährt Volumen Gerät 1 runter um 5%
04 - Script fährt Volumen Gerät 1 runter um 5%
05 - Script fährt Volumen Gerät 1 runter um 5% (ist jetzt 0%)
06 - Script: Quelle wird umgesetzt
07 - Script macht anderes (z.B. Lichteinstellung oder anderes Gerät leiser)
08 - Script macht anderes (z.B. Lichteinstellung oder anderes Gerät leiser)
09 - Script macht anderes (z.B. Lichteinstellung oder anderes Gerät leiser)
10 - Script macht anderes (z.B. Lichteinstellung oder anderes Gerät leiser)
11 - Script macht anderes (z.B. Lichteinstellung oder anderes Gerät leiser)
12 - Script sendet „Volume +5%“ an mehrere Geräte
13 - Script sendet „Volume +5%“ an mehrere Geräte
14 - Script sendet „Volume +5%“ an mehrere Geräte
15 - Script sendet „Volume +5%“ an mehrere Geräte

Nun springt der Benutzer bei 07 auf, schaltet die Quelle um und dreht das Volumen wieder hoch.

Was tun??

Eigentlich: Vor Schritt 12 Volumen relativ schnell (schneller als am Anfang) wieder auf 0, Quelle umschalten und bei 12 weiter machen …

Das heisst aber auch, dass das Script „wissen muss“, was schon passiert ist und wie man das „in Zeitraffer“ wieder herstellen kann.

Mir ist schon klar, dass ds seine Grenzen hat …

jwka

Eigentlich hast du schon einen Lösungsansatz hingeschrieben und zwar:
Du hast deinen Ablauf in Schritte gegeliedert. Jetzt kannst du eine sogenannte Schrittkette aufbauen. Nimm eine Variable die du hochzählst. Entweder in deimen Zeitraster oder eben durch Events. Abhängig von der Schrittnummer führst du dann Aktionen aus. Finden dann Eingriffe von aussen statt, so kannst du „springen“. D.h. die Variable mit der Schrittnummer z.B. auf 12 setzen.

Gruß
Dieter