Alarm wenn Eingang länger als X Sekungen aktiv

Hallo zusammen,

ich möchte eine Eingangsvariable / Eingang überwachen und wenn dieser länger als z.B. 10 Sekungen aktiv ist einen Alarm auslösen.

Ich habe schon einiges versucht und gelesen, es aber nicht hinbekommen, mit PHP kenne ich mich leider nicht wirklich aus.

Gibt es da nichts fertiges oder kann mir jemand helfen? Danke, Grüße Thomas

Das Modul Variablenüberwachung aus dem Store sollte helfen.
Michael

Das hatte ich mir schon durchgelesen, aber das verstehe ich eher so dass es für Variablen ist welche regelmäßig den Zustand ändern müssen, das ist in meinem Fall ja nicht so.

Ja, stimmt. Du müsstest dann den Wert selbst prüfen.

Sonst das Modul Alarmierung?

Michael

So sollte dein Vorhaben klappen…

Setz einfach noch ein Ereignis bei Änderung auf die Eingangsvariable. Ist die Eingangsvariable 10sec auf true, wird die Alarmvariable auch auf true gestellt. Geht die EIngangsvariable auf false, geht die Alarmvariable sofort auf false…

<?php
$variableID = 27503; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Eingangsvariable
$alarmVariableID = 29630; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Alarmvariable

// Wert der Eingangsvariable abrufen
$variableValue = GetValue($variableID);

// Überprüfen, ob die Variable aktiv ist
if ($variableValue == true) {
    // Variable ist aktiv, starten oder zurücksetzen Sie den Timer
    IPS_SetScriptTimer($_IPS['SELF'], 10);
} else {
    // Variable ist inaktiv, setzen Sie den Timer zurück
    IPS_SetScriptTimer($_IPS['SELF'], 0);
    // Setzen Sie die Alarmvariable auf false, wenn die Eingangsvariable inaktiv wird
    SetValue($alarmVariableID, false);
}

if ($_IPS['SENDER'] == 'TimerEvent') {
    // Timer-Ereignis ausgelöst, die Variable ist seit 10 Sekunden aktiv
    SetValue($alarmVariableID, true); // Alarm auslösen
    IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer zurücksetzen
}

Setz einfach noch ein Ereignis bei Änderung auf die Eingangsvariable. Ist die Eingangsvariable 10sec auf true, wird die Alarmvariable auch auf true gestellt. Geht die EIngangsvariable auf false, geht die Alarmvariable sofort auf false…

Hallo mb-stern,

ich habe das eben mal getestet aber ich hatte einen Fehler in meiner Beschreibung. Die Eingangsvariable ist immer auf 1 (true) wenn alles in Ordnung ist, und im Fehlerfall 0 (false).

Jetzt habe ich das Script von dir geändert aber ich bin da totaler Laie. Und ich rufe eine Audidatei auf die auf Webfrontend abgespielt werden soll.

Für die Alarmvariable habe ich ein Script erstellt 15806 welches das Audiosignal auslöst.
Leider klappt es so aber nicht, das Alarmsignal wird nicht ausgelöst, was habe ich denn falsch gemacht? Vielen Dank, Thomas

<?php WFC_AudioNotification(18430, 'Gong!', 49578); //49578 ist die ID des Media Objekts in IP-Symcon
<?php $variableID = 43301; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Eingangsvariable $alarmVariableID = 15806; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Alarmvariable // Wert der Eingangsvariable abrufen $variableValue = GetValue($variableID); // Überprüfen, ob die Variable aktiv ist if ($variableValue == false) { // Variable ist aktiv, starten oder zurücksetzen Sie den Timer IPS_SetScriptTimer($_IPS['SELF'], 10); } else { // Variable ist inaktiv, setzen Sie den Timer zurück IPS_SetScriptTimer($_IPS['SELF'], 0); // Setzen Sie die Alarmvariable auf false, wenn die Eingangsvariable inaktiv wird SetValue($alarmVariableID, true); } if ($_IPS['SENDER'] == 'TimerEvent') { // Timer-Ereignis ausgelöst, die Variable ist seit 10 Sekunden aktiv SetValue($alarmVariableID, true); // Alarm auslösen IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer zurücksetzen }

Wenn du Code veröffentlichst, mach das bitte mit dieser Funktion.
Dann sieht es so wie unten aus…
image

Versuchs mal so, sollte bei dir funktionieren. Das zusätzlich Script für dein Audiosignal brauchst du nicht, das habe ich integriert…

<?php
$variableID = 43301; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Eingangsvariable

// Wert der Eingangsvariable abrufen
$variableValue = GetValue($variableID);

// Überprüfen, ob die Variable aktiv ist
if ($variableValue == 0) {
    // Variable ist aktiv, starten oder zurücksetzen Sie den Timer
    IPS_SetScriptTimer($_IPS['SELF'], 10);
} else {
    // Variable ist inaktiv, setzen Sie den Timer zurück
    IPS_SetScriptTimer($_IPS['SELF'], 0); 
}

if ($_IPS['SENDER'] == 'TimerEvent') {
    // Timer-Ereignis ausgelöst, die Variable ist seit 10 Sekunden aktiv
    WFC_AudioNotification(18430, 'Gong!', 49578); // Alarm auslösen
    IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer zurücksetzen
}

Hallo mb-stern,

vielen Dank für den Tipp mit </>

Also ich habe jetzt ein „Ausgelöstes Ereignis“ erstellt und den Eingang 43301 abgefragt sobald sich hier der Zustand ändert.

Bei Aktion habe ich dein Script hinzugefügt. Wenn nun der Eingang mehr als 10 Sekungen auf 0 ist sollte ja das Alarmsignal kommen. Leider tut sich aber gar nichts.

Was mache ich denn falsch, sorry… Grüße Thomas

Mach mal ein Printscreen des Objektbaums, wo man die betreffenden Variablen sieht, das würde helfen.
Ebenfalls ein Printscreen des Ereignisses.
Es sollte eigentlich funktionieren, das nach 10 sec der Alarmton abgespielt wird…
Ausser die Variablen stimmen nicht oder der Alarmton geht auch nicht als einzelnes Script. Bitte dies mal testen…

Da ich mich auch nicht mit dem Coden auskenne, nutze doch einfach den Ablaufplan. Für so Leute wie wir, die nichts bzw. wenig mit PHP anfangen können perfekt !
Im oberen Bereich fügst du deinen Auslöser hinzu (Eingangsvariable / Eingang) und im unteren Bereich kannst du dich austoben. z.B. „warten 10 sec“ hinzufügen und noch mal die Variable überprüfen. Wenn sie immer noch den Status hat, kannst du Alarm auslösen. Alles ohne Coding.

Hallo mb-stern,

hier mal ein Screenshot ist da alles dabei was du brauchst?

Danke, Grüße und schon mal nen guten Rutsch.

Hallo thezepter,

vielen Dank für den Vorschlag, habe ich mir mal angesehen, aber ich kann zwar den Ablauf mit der Variable starten, aber dann im Ablaufplan ja nur sagen wenn die Variable auf 0 bzw. Alarm geht dann soll 10 Sekunden gewartet werden.

Aber nach den 10 Sekunden wenn der Alarm immer noch ansteht soll das Audiosignal ausgelöst werden. Aber das verstehe ich nicht wie ich das mit den Funktionen im Ablaufplan realisiert bekommen könnte.

Danke, und schon mal einen guten Rutsch, Thomas

Doch, das ist ja ein „Ablaufplan“. Dieser wird der Reihe nach abgearbeitet.

„Aber nach den 10 Sekunden wenn der Alarm immer noch ansteht soll das Audiosignal ausgelöst werden.“ ← Genau diese Abfrage baust du mit einer „Wenn dann“ Abfrage ein. Spiel mal ein wenig mit dem Ablaufplan rum. Wenn es erstmal „klick“ gemacht hat, wirst du es lieben :slight_smile:

Welches ist hier die Eingangsvariable, also welche 0 oder 1 ausgibt?
Ist das immer noch ID 43301?

Hallo,

Objekt ID 43301 (Eingang, 1 ist OK, 0 ist Alarm)
Objekt ID 49578 (dort ist die Audiodatei enthalten für den Alarm)

Danke, Grüße Thomas

Wenn das bei dir nicht funktioniert, dann funktioniert wohl deine Audiowiedergabe nicht…
Hier meine Testumgebung.
Du musst das Script entweder manuell ausführen oder du legst ein Ereignis darauf

Hier der angepasste Script mit einer Alarmvariable zum überprüfen

<?php
$variableID = 42577; // Ersetzen Sie dies durch die tatsächliche ID Ihrer Eingangsvariable

// Wert der Eingangsvariable abrufen
$variableValue = GetValue($variableID);

// Überprüfen, ob die Variable aktiv ist
if ($variableValue == 0) {
    // Variable ist aktiv, starten oder zurücksetzen Sie den Timer
    IPS_SetScriptTimer($_IPS['SELF'], 10);
} else {
    // Variable ist inaktiv, setzen Sie den Timer zurück
    IPS_SetScriptTimer($_IPS['SELF'], 0); 
}

if ($_IPS['SENDER'] == 'TimerEvent') {
    // Timer-Ereignis ausgelöst, die Variable ist seit 10 Sekunden aktiv
    WFC_AudioNotification(18430, 'Gong!', 49578); // Alarm auslösen
    IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer zurücksetzen
    SetValue(31509, true);
}