Über 1-wire mit der Klingel ein Script starten

Hallo IP-Symcon Forum,

ich hoffe von euch kann mir einer helfen. Ich habe alle möglichen Beiträge durchsucht, aber nichts richtiges gefunden. Hier erstmal mein alter Zustand, bevor ich auf 1-Wire umgestellt habe:

Ich hatte bis vor kurzen noch eine FS20Sig als Klingel an meinem Haus. Sobald jemand geklingelt hat, hat der Gong geklingelt (Fs20…) und das Ipsymcon hat ein Bild von der WebCam geholt und mir das per E-Mail geschickt. Hat alles soweit super funktioniert, bis das der Funk mal ankam mal nicht. Daher meine Entscheidung 1-Wire

Ist Zustand:

1-Wire USB Adapter am PC und mit einem DS2405 verbunden. An dem DS2405 ist einmal GND, 1-wire und einmal 5V mit einem 12k Ohm Widerstand verbunden. Meine neue Sidle Sprechanlage schaltet kurz (drücken der Taste) ein Zeitrelais. Dieses hält für 10 sec. GND an dem I/O Pin. Im TMEX wird dieser DS2405 alle 7 sec. gepollt und fütter die Variable klingel_tuer_1wire (somit kann er nicht 2 mal erkannt werden).

Die Variable ist immer True, wenn es klingelt ist diese für 10 sec. False. Ich habe also ein Script erstellt (das mit dem grafischen Teil): Wenn Variable xx == False dann starte Script Mail Versand.

Das Problem ist aber nur das jetzt das IP-Symcon die Mails 10 mal und mehr verschickt.

Dank Torro2 gestern im Chat kam ich auf die Idee eine 2. Variable anzulegen, die heisst mail_versand_active. Idee von Torro2:
Wenn ich das erste mal die Variable triggere, dann die Variable mail_versand_active auf True zu setzen, un diese im Script ab zu fragen. ( Das Script nur weiter laufen lassen wenn Variable mail_versand_active gleich False. Alle Minute gab es dann ein Script was die Variable wieder auf False setzen soll.

Das hat jetzt auch besser geklappt, jedoch kommen immer noch ca 7 Mails an ?!?!?

Hat einer von euch eine Idee wie ich das am einfachsten machen kann? Ein Sleep und Co einzubauen hat leider auch nichts genutzt, da er das Script dann einfach mehrmals gestartet hat.

Ich werde noch bekloppt:confused: Ich will doch nur, das er die Variable einmal ausliest und dann 1 Mail verschickt :wink:

Schon mal Vielen Dank für euro Mühe mir zu Helfen.

also wenn der Grund dafür das mehrfachauslösen des Scriptes ist, dann solltest du mal die Forensuche nach Semaphore bemühen. Ein Semaphore verhindert dies. Wie triggerst du das script? onValue, onChange oder onUpdate?

Gruß,

Toni

Hallo Toni,

ich habe die Variable mit ziemlich allem getriggert was ging. Ich denke das die onChange die beste ist.

Das mit dem Semaphore schau ich mir mal an.

Danke Andy Meyer

onChange bedeutet das script wird jedesmal ausgeführt wenn sich die variable ändert. Also wenn dein Relais anzieht und wenn es nach 10 sekunden wieder abfällt. onValue (true oder false) würde das Script nur triggern wenn die Variable grade true oder false geworden ist - je nach dem was du vorgiebst.

Toni

Hallo Toni,

kannst du mir das mit dem Semaphore mal erklären bzw. in mein Script tüdeln? Ich stehe mit dem Semaphore irgenwie auf dem Schlauch.

Hier mein erstes Script, was ich dann mit der Variablen koppeln will (onValue)

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : klingel_tuer_active.ips.php
Trigger  : 
Interval : 
*/
IPS_RunScript("klingel_tuer_mail");


?>

Das wiederum startet dann den eigendlichen Mail versand.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : test_mail.ips.php
Trigger  :
Interval :
*/

$zu_hause = getValueBoolean("zu_hause");

// Hier wird das Bild gespeichert
$remoteImage = "http://xxx:xxx@192.168.x.x/goform/capture/capture.jpg";
$remoteFile = fopen("$remoteImage",'rb');
$localImage = "C:/Programme/IP-Symcon/cam_temp/eingang_tuer.jpg";
$localFile = fopen($localImage,'wb');
if($remoteFile)
{
  while (!feof($remoteFile))
         {
          $chunk = fread($remoteFile,1024);
          fwrite($localFile,$chunk);
         }
   fclose($remoteFile);
}
fclose($localFile);

// Die Variablen gesichert
SetValueString("Betreff", "Klingel, Tür");  //Betreff in Variable schreiben
SetValueString("Mail", "Es hat jemand für Sie an der Tür geklingeld");    //Mailinhalt in Variable schreiben
SetValueString("Anhang", "C:/Programme/IP-Symcon/cam_temp/eingang_tuer.jpg");

// Script zum Mailversand gestartet
IPS_RunScript("mail_senden_anhang");

//if ($zu_hause == false)
//{
//    IPS_RunScript("sms_senden");
//}

?>

Wäre echt super von dir!

Danke Andy Meyer

Hallo Andy,

als erstes solltest Dein Skript „OnValue“ mit Value=FALSE triggern lassen. Der Wechsel in den Zustand FALSE kann laut Deiner Beschreibung bei jedem Klingelvorgang nur einmal auftreten.

Dann solltest Du prüfen, ob Dein Skript wirklich nur einmal getriggert wird. Dazu wählst Du im Fenster „Variables“ aus dem Kontextmenü (Rechtsklick auf die Triggervariable) „Evaluate/Modify“ aus. Im dann erscheinenden Fenster wählst Du „Watch“ aus.

Wenn es jetzt klingelt, darf nur ein einziger Eintrag in der Liste erscheinen. Sind es mehrere, so liegt es nicht am Skript, sondern an der Signalaufbereitung.

Jetzt weißt Du zumindest, wo Du weitersuchen musst.

Die Mehrfachtriggerung sollte bereits im Signalweg ausgeschlossen werden. Daher sollte auch der Einsatz von Semaphoren (und die damit verbundene Problematik) überflüssig sein (allenfalls als Notlösung).

Gruß
HJH

Im Prinzip hat HJH recht. Dein Relais sollte den Einsatz vom Semaphore unnötig machen. Versuchs also lieber zunächst mit einem korrekten Trigger. Wenn du garnicht zurecht kommst, dann wäre dies die von ihm angesprochene Notlösung:

if ( ! IPS_SemaphoreEnter("klingel_tuer_active", 1) )
{
  return;
}

IPS_RunScript("klingel_tuer_mail");

IPS_SemaphoreLeave("klingel_tuer_active"); 

Ließ bitte auch die Hinweise zu IPS_RunScript.

Toni

Hallo,

ich habe keine Ahnung was gestern bei mir schief lief. Ich hatte gestern bewust alles von vorne nochmal gemacht.

Variablen anlegen Script erstellen trigerrn… es lief nicht. Jetzt von der ferne aus 10min alle sneu gemacht und alles geht:D

Ich habe keine Ahnung wo ich mich gestern verzettelt habe. Trigger jetzt direkt mein Mail Script mit der Vraiante als „OnValue“.

Für alle die auch Ihre Klingel mit dem 1-Wire verbinden wollen, ist das mit einem Zeitrelais eine einfach Lösung.

Danke euch HJH und Toni nochmal!!!

Gruß

Andy Meyer

Hallo Andy,

Da das Skript ja nur einmal getriggert wird, kannst Du das Abfrageintervall jetzt kürzer machen (z.B. 2 Sekunden). Du hast sonst im Extremfall eine Verzögerung von 7 Sekunden.

Gruß
HJH