Anwesenheit/Abwesenheit in verschiedenen Systemen synchron halten

Hallo,

ich habe da ein Problem, bei dem ich gerade auf dem Schlauch stehe.

Ich möchte folgendes erreichen:
Es gibt derzeit drei Stellen, wo der Status „Anwesend“ gesetzt werden soll.

[ul]
[li]Homematic
[/li][li]Digitalstrom
[/li][li]IP-Symcon
[/li][li]
[/li][/ul]

Jetzt ist es so, dass IP-Symcon und Digitalstrom über eigene Variablen repräsentiert werden. In IPS eine Boolean Variable, und in Digitalstrom eine Integer die zwischen Wert 71 und 72 wechselt.

Ich habe am Eingang einen Homematic-Taster der dies Steuern soll, aber eben auch im Webfront die Variable mit einem Toggle-Script angezeigt. Wenn nun das Haus verlassen wird, soll der Taster gedrückt werden und alle Stellen auf Abwegen geschaltet werden. Aber auch wenn im Webfront geschaltet wird sollen alle Stellen geschaltet werden.

Beim ankommen zu Hause gibt es mehrere Möglichkeiten, entweder den Taster bedienen, oder ein Automatismus der durch Digitalstrom ausgelöst wurde, wenn jemand ein Licht bedient. Oder eben das Webfront.

So jetzt habe ich ein Script erstellt, was abhängig vom auslösenden die anderen beiden Stellen schaltet. Leider wird das Script aber von allen drei Stellen ausgelöst, und damit x-fach durchlaufen. Das führt zu merkwürdigem Wechselverhalten.

Wie macht Ihr das? Habe ich einen Denkfehler?

Würde mich über Eure Gedanken/Lösungen freuen.

Gruß
Christian

Hallo Christian.

Wenn Du durch geeignetes Auswerten der Auslöser nicht verhindern kannst, dass das Skript mehrfach getriggert wird hilft vielleich ein „entprellen“ durch Abfrage der letzten Ausführungtszeit.

So in der Art:


$Array = IPS_GetScript($_IPS['SELF']);
if (time()-$Array['LastExecute'] <= 1) return;

Hallo Christian

es sind relativ wenig Infos um eine genaue Lösung zu sagen
aber so als Tip
steuere sprich mach nur in einem System die Berechnung
dann schau das du nur auf die Änderung und dann nur einmal reagierst (flanke)

gruss Roman

Hallo,

vielen Dank für die Rückmeldungen.
Kronos liegt, denke ich ganz gut, ich muss es entprellen.

Sorry, wenn die Informationen zu wenig waren, ich wusste nicht so genau, wie ich es schreiben soll. Die Änderung der verschieden Variablen löst das gleiche Skript mehrfach aus, und ein Abfragen der auslösenden Bedingungen reicht nicht.

Ich werde es mal mit entfernen versuchen, so wie Kronos es geschrieben hat. Gerade die Anwesenheit ändert man ja nicht dauernd sehr zeitnah.

Gruß
Christian

Moin!

Vlt. zu einfach von mir gedacht…aber egal ob du nun von HomeMatic, DS oder dem WebFront eine Variable auf TRUE schalten willst > frag doch einfach im Skript mit ab, ob die Variable schon TRUE/FALSE ist, wenn nicht, nur dann schalten?!

Also z.B.:

// Skript getriggert durch Taster oder wie auch immer
$Anwesenheit = 12345;  // ID deiner Bool Variable für Anwesenheit

if ($HMtasterBetaetigung == true) {
   if (GetValue($Anwesenheit) == false) {
      SetValue($Anwesenheit, true);
   }
}

if ($DStasterBetaetigung == true) {
   if (GetValue($Anwesenheit) == false) {
      SetValue($Anwesenheit, true);
   }
}

…also so die Richtung. Weißte wie ich mein? Und dann getriggert durch die Anwesenheitsvariable (bei Änderung) entsprechend deine Variablen in HomeMatic, DS, … schalten. Dann wird nur einmal geschaltet, auch wenn der 2. Tastendruck nur 1ms später kommt.
Aber wie gesagt, vlt. war es zu einfach gedacht, hab deinen „Plan“ nicht unbedingt verstanden :smiley:

Grüße,
Chris

Hallo Chris,

danke für die Anregung. Ich habe es jetzt mal mit dem entfernen von Kronos versucht. Mal sehen ob das geht.

Bei Deinem Vorschlag schließe ich aus, dass die Variable noch mal gesetzt wird, und sich das System aufschaukelt. Ggfs. muss ich eine Kombination aus beidem einbauen.

ich werde berichten.

Gruß
Christian