Rausfinden welches Ereignis ausgelöst hat.

Hallo Zusammen,

ich selbst habe leider keine großen Programmier Kenntnisse. Deswegen suche ich mir hier im Forum div. Codeschipsel und versuche diese dann zu verstehen und auf meine Bedürfnisse anzupassen. Da mir hier oft weitergeholfen werden kann, profitieren auch andere Anfänger davon.

Ok nun das eigentliche Problem. Wir haben für unsere Fa. den Zugang zum Gebäude mit Keymatic umgesetzt. Jeder hat einen Handsender. Wenn die Tür auf/abgeschlossen wird, bekommt der Chef eine Email mit Namen usw.


<?
HM_WriteValueBoolean(11111 /*[Aktoren\Schloss]*/, "OPEN", true);
SMTP_SendMailEx(22222 /*[Aktoren\Mail\E-Mail senden (SMTP)]*/, "Mail@mail.de", "Info", "Die Tür wird von Mustermann aufgeschlossen");
?>

Da ich es nicht besser wusste, habe ich für jeden Mitarbeiter 2 Scripte (Auf/Zu) angelegt. Bei 25 Mitarbeiter jede menge Scripte. Meine Idee ist ein Script das abfragt welches Ereignis/Aktor ausgelöst hat und das ganze dann in Variablen schreibt und zum Schluss aus den Variablen eine Email generiert. Richtig gut wäre auch wenn man die ganzen Logdaten (Wer wann auf/abgeschlossen hat) in zb. eine TXT Datei schreiben könnte. Leider konnte ich keinen passenden Codeschnipsel finden.

Wenn jemand so etwas hat bzw. weis wie man so etwas programmiert, wäre es toll wenn an den Programmzeilen auch eine kurze Beschreibung steht. was die Codezeile eigentlich tut. So kann ich und auch andere Anfänger besser verstehen was die einzelnen Befehle für einen Sinn haben.

Ich hoffe hier nicht zuviel zu verlangen. :rolleyes:

Besten Dank, Thomas

Schau mal hier: http://www.ip-symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Damit hast du ein wenig mehr Futter zum suchen. :slight_smile:

Wegen der Text-Datei sollte es sogesehen auch kein Problem sein. Das könnte z.B. helfen:
http://php.net/manual/de/function.fopen.php

Habe gerade leider nichts fertiges zur Hand.

paresy

Danke Paresy,

Ich bleib erstmal beim Script für die Auswertung. Wenn das funktioniert mach ich mit dem Log weiter.
Ich hab mal folgendes versucht:

<?
$Ausloeser = $_IPS['VARIABLE'];
//Liefert die ID des auslösenden Ereignis und schreibt den Wert in eine Variable mit dem Namen "Ausloeser"
$Wert = $_IPS['VALUE'];
//Liefert den Wert des Auslösenden Ereignis und schreibt den Wert in eine Variable mit dem Namen "Wert"
SMTP_SendMailEx(14436 /*[Aktoren\Mail\E-Mail senden (SMTP)]*/, "mail@mail.de", "INFO", "$ausloeser $Wert");
// Sendet eine Email an mich mit der ID und Wert der auslösenden Variable
?>

Soweit meine ersten Versuche…

Ich habe eine Variable angelegt auf der das Script reagiert. Ich bekomme auch eine Email, nur leider nicht mit der ID und Wert. Bei true bekomme ich eine 1 und bei false nichts.

Was mache ich falsch?

Gruß Thomas

Groß und kleinschreibung bei der Variable ist wohl wichtig…:cool:

Ich bekomme ich schon mal die ID und bei true eine 1 bei false nichts. Sollte da nicht 0 stehen?

Hallo,

$_IPS wird Dir da weiterhelfen. Hier ein Beispiel, wie ich in meiner Anwesenheitssteuerung feststelle, welcher Sender ausgelöst hat. Die Aufgabenstellung ist ja ähnlich :

		

IF ($_IPS['SENDER']="Variable")
				{
					$trigger=$_IPS['VARIABLE'];
					IF ($trigger==44743 /*[Anwesenheitssteuerung\AKM-868 ( Walter )\Available]*/)
						{ $name="Walter";
						}
					IF ($trigger==18931 /*[Anwesenheitssteuerung\AKM-868 ( Catherine )\Available]*/)
						{ $name="Catherine";
						}
					$aktion=GETVALUE($trigger);
				}

Zum Logdateischreiben, hier mal die Funktion, die ich benutze :

 
function logging( $dateiname, $text )
 {
	$text2=date("d.m. H:i:s")." ".$text."
";
	$datei="c:/ip-symcon/logs/".$dateiname.".log";
	$handler=fOpen($datei,"a+");
	fWrite($handler,$text2);
	fClose($handler);
 }

Eintrag in die Logdatei „Rolladen“, z.B. logging(„Rolladen“,„Rolladen WZ geschlossen“);. Zeitstempel wird automatisch eingefügt.

Schnelles Anzeigen der letzten Einträge in einer bestimmten Logdatei via Webfront :


function logpopup($logfile)
{
	$dateiname="c:/ip-symcon/logs/".$logfile.".log";
	$zeilen=file($dateiname);
	$count=count($zeilen);
	$text="";
	$anz=60;
	IF ($count < $anz)
	   $anz=$count+1;
	for ($i=1; $i <$anz; $i++)
			 {
	        	 $farbe="<bg style=color:#DF0101;>";
	        	 IF ( substr($zeilen[$count-$i],0,1)=="-" )
	        	   $farbe="<bg style=color:#ffffff;>";
	        	   
	        	 $text.=$farbe.$zeilen[$count-$i]."<br/>";

			 }
	WFC_SendPopup(43270 /*[Standard]*/,"<b style=color:#C00000;>".$logfile." Info",$text."</b>");
}

Aufrufen der letzten Einträge der Logdatei ROLLADEN: logpopup(„Rolladen“); ID des Webfront im WFC_Send… Kommando anpassen.

Ich hoffe, das waren ein paar brauchbare Anregungen zu Deinem Problem.

Gruß
Walter

adhoc ohne Gewähr:

einmal $Ausloeser und einmal $ausloeser

bin aber nicht sicher ob das die Ursache ist…

Flipper

Edit : viel zu langsam !

Wird daran liegen, dass die Variable vom Typ Bool ist. Bau vorher eine Abfrage rein :


$wort="abgeschlossen";

IF ($wert) 
          $wort="aufgeschlossen";


( oder so ähnlich )

Gruß
Walter

So ich bin einen Schritt weiter.

<?
IF ($_IPS['SENDER']="Variable")
                {
                    $trigger=$_IPS['VARIABLE'];
                    IF ($trigger==15582 /*[Scripts\Test\Thomas]*/)
                        { $name="Thomas";
                        }
                    IF ($trigger==41453 /*[Scripts\Test\Uwe]*/)
                        { $name="Uwe";
                        }

                }

IF ($_IPS['SENDER']="VALUE")
                {
                    $ist=$_IPS['VALUE'];
                    IF ($ist=1)
                        { $wert="aufgeschlossen";
                        }
                    else 
                        { $wert="abgeschlossen";
                        }
                    
                }

SMTP_SendMailEx(14436 /*[Aktoren\Mail\E-Mail senden (SMTP)]*/, "mail@mail.de", "INFO", "$name hat die Tür $wert");
// Sendet eine Email mit dem Namen und Zustand der auslösenden Variable
?>

Ich bekomme nun eine Email mit dem Namen und aufgeschlossen. Leider funktioniert das mit abgeschlossen (false) nicht.
Ich bekomme immer „aufgeschlossen“ zurück. Hab das auch schon so versucht:


IF ($ist=0)
                        { $wert="abgeschlossen";
                        }

Aber es wird wohl keine „0“ zurückgegeben…

@walter

was für ein Variablen Typ ist den hier sinnvoller?

Gruß Thomas

Vergleiche müssen mit == gemacht werden.

paresy

@Paresy

Besten dank. Kaum macht man es richtig funktioniert es auch schon…


<?
IF ($_IPS['SENDER']="Variable")
                {
                    $trigger=$_IPS['VARIABLE'];
                    IF ($trigger==15582 /*[Scripts\Test\Thomas]*/)
                        { $name="Thomas";
                        }
                    IF ($trigger==41453 /*[Scripts\Test\Uwe]*/)
                        { $name="Uwe";
                        }

                }

IF ($_IPS['SENDER']="VALUE")
                {
                    $ist=$_IPS['VALUE'];
                    IF ($ist==1)
                        { $wert="aufgeschlossen";
                        }
                    IF ($ist==0)
                        { $wert="abgeschlossen";
                        }
                    
                }
$zeit=date("d.m. H:i:s");
SMTP_SendMailEx(14436 /*[Aktoren\Mail\E-Mail senden (SMTP)]*/, "mail@mail.de", "INFO", "$name hat die Tür $wert. Zeitstempel: $zeit");
// Sendet eine Email mit dem Namen und Zustand der auslösenden Variable
?>

Ich hab noch einmal einen Zeitstempel eingefügt.

Als nächstes dann zum log :slight_smile:

Den Typ bekommst Du von der Homematic vorgegeben. Ich vermute, es wird der Status sein, und der ist bool, also TRUE oder FALSE. Dein Skript funktioniert nicht, weil das hier "IF ($_IPS[‚SENDER‘]=„VALUE“) " niemals eintrifft. $_IPS[‚SENDER‘] wird niemals den Wert „VALUE“ erhalten. $_IPS[‚VALUE‘] enthält den Wert der auslösenden Variable und ist damit immer gesetzt. Mach die IF-Klausel weg, frage den Bool-Wert ab ( IF $ist oder IF $ist==TRUE ) und dann wird es gehen.

Gruß
Walter

Hi Walter,

das Script läuft einwandfrei. Es lag an == für den vergleich von Werten.


IF ($ist==0)
                        { $wert="abgeschlossen";

Hier hatte ich 1x =

VALUE gibt nur den Wert einer Variable beim auslösen wieder.

Hir mal eine ein Auszug aus den Systemvariablen von IP-Symcon:
$_IPS[‚VALUE‘] Wert der auslösenden Variable zum Auslösezeitpunkt

http://www.ip-symcon.de/service/dokumentation/konzepte/skripte/systemvariablen/

Gruß Thomas

@walter

Ich versuch mich gerade mit dem Logging. Du hast mir ja ein Beispiel gepostet.


function logging( $dateiname, $text )
 {
    $text2=date("d.m. H:i:s")." ".$text."
";
    $datei="c:/ip-symcon/logs/".$dateiname.".log";
    $handler=fOpen($datei,"a+");
    fWrite($handler,$text2);
    fClose($handler);
 }  

Das Script läuft ohne Fehler durch, allerdings ohne das was passiert. Ich vermute mal es liegt an der Variable $dateiname
Die hat ja keinen Wert!? $text im übrigen auch nicht. Müssen hier erst noch Werte gesetzt werden?

Gruß Thomas

Hab es mal so versucht:


<?
$dateiname="test";
$text="HalloWelt";

function logging( $dateiname, $text )
 {
    $text2=date("d.m. H:i:s")." ".$text."
";
    $datei="c:/ip-symcon/logs/test".$dateiname.".log";
    $handler=fOpen($datei,"a+");
    fWrite($handler,$text2);
    fClose($handler);
 }
?>

Script läuft ohne Fehler, aber auch ohne das etwas in test.log geschrieben wird. Allerdings weis ich nicht was ich mit $handler anfangen soll.

@Walter
Kannst Du mir das Script genauer erklären?

Gruß Thomas

Genau das habe ich Dir ja geschrieben. Aber Du fragst ‚VALUE‘ als Inhalt von $_IPS[‚SENDER‘] ab, und das wir nicht gehen ! Schau Dir Dein Skript nochmal genau an und vergleich’s mal mit der o.a. Doku.

mfg.
Walter

Lies nochmal meinen Beitrag genau durch. Da steht drin, wie man diese Funktion aufruft. Eine Funktion muss man aufrufen, und wenn’s geht mit Parametern. :stuck_out_tongue:

Beispiel: logging(„Rolladen“,„Das ist ein Logbucheintrag“);
Anschließend solltest Du im Verzeichnis c:\ip-symcon\logs eine Datei „Rolladen“ finden, die o.a. Eintrag enthält. Weitere Einträge werden angehängt. Timestamp wird automatisch gesetzt.

Gruß
Walter

Hi Walter,

ich kann leider nicht folgen. Laut der Dokumentation ist

$_IPS[‚VALUE‘]

doch ein zulässiger Wert für

$_IPS[‚SENDER‘]

Ich habe leider bis heute nur genommen was ich gefunden habe und das dann endsprechend angepasst.
Das heute sind meine ersten versuche meine Ideen selbst umzusetzen. Natürlich mit Hilfe des Forums :slight_smile:

Wie sollte den der Code aussehen damit es richtig ist? Bin ja lernfähig :slight_smile:

Das Script funktioniert jedenfalls so wie es soll. Ich bekomme eine Email mit endsprechendem Namen und ob das Schloss nun auf oder zugeschlossen wurde.

Hast Du vielleicht noch eine Idee zum logging?

Gruß Thomas

Wie rufe ich den eine Funktion auf? Ich stehe echt auf dem Schlauch.

So Wohl nicht?


<?

logging("Rolladen","Das ist ein Logbucheintrag");
$dateiname="test";
$text="HalloWelt";

function logging( $dateiname, $text )
 {
    $text2=date("d.m. H:i:s")." ".$text."
";
    $datei="c:/ip-symcon/logs/test".$dateiname.".log";
    $handler=fOpen($datei,"a+");
    fWrite($handler,$text2);
    fClose($handler);
 }
?>

Bitte Schritt für Schritt

Gruß Thomas

Ich glaube ich habs…ich teste noch.