Gesichertes Ausschalten

Hallo,

ich hänge hier an einem Problem, das ich irgendwie nicht alleine gelöst bekomme.

Mein Haustürbuzzer ist an ein HM-LC-Sw4-PCB angeschlossen.
Dieser soll auf Tastendruck 1 Sekunde schließen und danach wieder Ruhe geben.

Nun habe ich es des Öfteren, dass er anfängt zu buzzern und nicht mehr aufhört.

Ich habe das veruscht über den Rückgabewert wie folgt zu lösen:


$return=false;

//solange, setzten bis Erfolgreich gesetzt
	while(!$return){
		$return = HM_WriteValueFloat(31753 /*[Homecontrol\Flur\Haustür Buzzer]*/ , "ON_TIME",  1.00);    // 1 Sekunde AN
	}
	HM_WriteValueBoolean(31753 /*[Homecontrol\Flur\Haustür Buzzer]*/ , "STATE",  true);


Mal davon abgesehen, dass ich so in eine Endlosschleife laufen könnte, wenn nämlich nichts zurückkommt (warum auch immer), funktioniert das auch nicht.
Es kommt immer noch vor, dass der Buzzer nicht aufhört.

Gleiches Prinzip mit dem Treppenhauslicht.
Dort brennt schonmal die ganze Nacht das Licht.

Wie löst man sowas zuverlässig?

Mic

Hallo.

Ein bidirektionales Funksystem sollte solcher Krücken nicht bedürfen. Eine Abfrage ob der Befehl angekommen ist sollte bei einem funktionierenden System nicht notwendig sein.

Die Frage muss daher eher lauten wieso der Schaltbefehl nicht ankommt und nicht wie man die Fehlfunktion „übertünchen“ kann.

Ein Ausgleich einer Fehlfunktion muss immer ein Backup und nicht die Normalität sein.

Aber es kann doch immer mal passieren, dass ein Befehl nicht ankommt.
Sei es wegen Funkproblemenen oder was auch immer.

Ein Bidirektionales System gleicht das ja nicht aus (zumindest dachte ich das bisher).

Für mich steckte im „bidirektional“ die Möglichkeit zu sehen, ob es geklappt hat (Returnwert).
Bei einem FS20 könnte ich das so ja nicht feststellen.

Mic

meinen Türbuzzer schalte ich zwar mit IP-Symcon ein, aber über ein internes Programm auf der CCU nach 1 sek. aus.
Funktioniert perfekt :wink:

d.h. du machst das über eine virtuelle Remote der CCU?

Kannst du das ein bisschen ausführen?

Geht auch ohne virtuelle FB.

Programme können auch auf Aktoren reagieren.

Michael

Ah ok, so machst du das …

… das hatte ich auch schonmal, bei was anderem gemacht, hat aber eine deutliche Verzögerung.
(so 4 bis 5 Sekunden ca.)

Hallo,
@Michael:
Ein kurzes Einschalten eines Aktors sollte man nicht über 2 Befehle (Ein und verzögertes Aus) machen! Der 2. Befehl könnte ja auch gestört werden, dann wäre der Aktor Dauerhaft an. Ausserdem hast Du den doppelten Funkverkehr und störst damit wieder andere Verbindungen.
Besser vorher in einer zusätzlichen Anweisungszeile die Einschaltdauer setzen (dies erzeugt keinen Funkbefehl!) und in der folgenden Ziele dann einschalten. Dann erledigt der Aktor das Ausschalten per internem Timer. Da kann dann nichts schief gehen.

Edit: Hab gerade gesehen, dass Du nur auf die Statusänderung des Aktor reagierst. Die Hintergründe für dies Programm sind nicht ganz klar, aber mag natürlich seinen Sinn haben. Aber wenn beim Einschalten des Aktors die Einschaltdauer gesetzt würde, wäre das Programm wahrscheinlich überflüssig.

Gruß DGH77

@DGH77

Besser vorher in einer zusätzlichen Anweisungszeile die Einschaltdauer setzen (dies erzeugt keinen Funkbefehl!) und in der folgenden Ziele dann einschalten. Dann erledigt der Aktor das Ausschalten per internem Timer. Da kann dann nichts schief gehen.

Alles richtig was du sagst. Ich setze auch alle meine Zeiten in den Aktoren.
Aber genau das funktioniert beim Thread-Ersteller ja nicht.
Und bei 1 sek. glaube ich nicht das genau in der Sekunde die CCU bzw. das Programm abschmiert, wäre schon sehr unwahrscheinlich.

Edit: Hab gerade gesehen, dass Du nur auf die Statusänderung des Aktor reagierst. Die Hintergründe für dies Programm sind nicht ganz klar, aber mag natürlich seinen Sinn haben. Aber wenn beim Einschalten des Aktors die Einschaltdauer gesetzt würde, wäre das Programm wahrscheinlich überflüssig.

:confused: Hast du das ganze Thema gelesen?
Zumal es über das Programm egal ist, wie der Aktor angesteuert wurde (IPS, Direktverknüpfung, WebUI, Homedroid, etc.).

Michael

So habe ich es versucht.
Ich setze zuerst mit ON_TIME die Zeit und schalte dann ein, indem ich STATE auf true setze.

Meine Annahme war / ist, dass dazu beide Befehle an den Aktor gehen müssen, wo sonst sollte die Einschaltzeit „hinterlegt“ werden.

D.h. ich schalte nicht ein, warte 1 Sekunde und schalte dann wieder aus.

Vorher hatte ich das ohne den Rückgabewert abzufragen / abzuwarten und dachte die Probleme liegen daran, dass entweder der ON_TIME Befehl garnicht ankam oder, funkbedingt oder was auch immer, nach dem Anschaltbefehl.

Weitere Annahme meinerseits:
Wenn der erste Befehl mit true zurückkommt, ist die Einschaltzeit korrekt an den Aktor übertragen und ein nachfolgendes einschalten basiert dann auf der 1s Beschränkung.

Das klappt auch in 95% aller Fälle.
Ich dachte aber mit der Abfrage des Ergebnisses müsste ich 100% erreichen können.
Ein hängender Buzzer ist eklig :wink:

Mic