Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 24

Thema: SMS-Alarmierung unter Linux FME-getriggert

  1. #1
    Registriert seit
    29.08.2005
    Beiträge
    423

    SMS-Alarmierung unter Linux FME-getriggert HOWTO

    Ich hab mir ne SMS-Alarmierung aus einem kleinen C-Programm und bash-Skripten gebastelt. Beim auslösen des FME (Anschluß des Relais am Parallelport des PC) geht die ganze Sache los.

    Hat jemand Interesse an einer näheren Beschreibung?

    duese
    Geändert von duese (10.02.2006 um 11:41 Uhr)

  2. #2
    rescueinstructor Gast

    ja gern

    immer gerne eine sehr praktische sache

  3. #3
    Registriert seit
    29.08.2005
    Beiträge
    423

    SMS-Alarm unter Linux mit FME-Trigger Howto

    Also hier die Beschreibung für eine SMS-Alarmierung unter Linux (ausgelöst durch einen FME):

    Ich entschuldige mich jetzt schon für die Länge, aber trotzdem viel Spaß!

    Fangen wir mit der Hardware an.
    Das Signal vom FME-Relais wird dem Rechner per paralleler Schnittstelle mitgegeben.
    Der Parallelport hat fünf Input-Leitungen S3-S7. Die Verteilung auf die Pins am Stecker ist wie folgt:
    S3 Pin15
    S4 Pin13
    S5 Pin12
    S6 Pin10
    S7 Pin11

    Von diesen fünf Pins wird jeweils ein 4,7kOhm Widerstand zu Pin1 gelötet (wenn weniger Eingänge benötigt werden, kann man auch weniger Widerstände einbauen. Aber die sind nicht teuer und man ist für alles kommende flexibel).
    Die Widerstände ziehen die Einganspins auf HIGH-Potential. Will man nun dem PC etwas mitteilen, wird der betreffende Pin auf LOW-Potential gezogen, d.h. einfach mit Masse (Pin18 - Pin25) verbunden. Die beiden Kontakte des FME-Relais werden also beispielsweise an Pin15 und Pin25 angeschlossen.

    Das wars schon von der Hardwareseite.

    Auslesen des Parallelports.
    Nachdem ich kein passendes fertiges Programm gefunden hab, hab ich ein kleines Tools selbst geschrieben: lpin1.0

    Das Tool ließt ca. 5 mal pro Sekunde den Status des ersten Parallelports (Basisadresse 0x378) ein. (Sollte ein andere Parallelport verwendet werden, wird das im Sourcecode geändert und nochmal kompiliert. Falls nötig einfach den Quellcode anschauen, sollte fast selbsterklärend sein, ansonsten Fragen, dann kriegen wir das hin)
    Eine kompilierte Version von lpin hab ich anghängt. Die Erweiterung ZIP ist nur, weil das Board lpin ohne erweiterung nicht wollte. Speichern, Erweiterung entfernen und chmod nicht vergessen. Der Quellcode kommt nach sobald ich eine README geschrieben hab. [Edit: Der Quellcode ist jetzt auch verfügbar, siehe Anhang]

    Das Tool wird als root gestartet.
    (Bei mir im GENTOO hab ich
    su - root -c "/usr/local/bin/lpin > /dev/tty9 &"
    in /etc/conf.d/local.start eingetragen ums beim Systemstart auszuführen)

    Verändert eine der Leitungen S3-S7 den Status wird ein zugehöriges Skript ausgeführt.
    Beispiel:
    Ein an Pin15 (S3) angeschlossenes Relais zieht an (wird eingeschaltet) führt /usr/local/bin/on3 aus.
    Fällt das Relais wieder ab, wird /usr/local/bin/off3 ausgeführt
    Für die anderen Leitungen entsprechen on4, off4, on5.........
    (Bemerkung: Solange eines dieser Skripen ausgeführt wird, hält das lpin an. Diese Zeit kann minimiert werden, z.B. durch den Aufruf von weiteren Skripten/Programmen druch screen im Hintergrund.)

    /usr/local/bin/on3 sieht bei mir z.B. so aus:
    Code:
    #!/bin/bash
    echo "`date +"%Y%m%d %X"` Ausfuehrung $0" >> /var/log/lpin.log  
    su - smsalarm -c 'screen -d -m /home/smsalarm/execute_alarm_by_fme'
    Zuerst wird ein Logeintrag in /var/log/lpin.log mit Datum und Uhrzeit und dem ausgeführten Skript erzeugt.
    Die nächste Zeile startet das Skript, daß alle weiteren Aktionen ausführt.
    su - smsalarm -c bewirkt, daß das Alarmierungsskript nicht mehr als root sondern als User smsalarm läuft. (Es kann natürlich jeder andere User verwendet werden...)
    screen -d -m bewirkt das execute_alarm_by_FME im Homeverzeichnis des Users smsalarm im Hintergrund ausgeführt wird. (Dafür ist natürlich das Programm screen nötig)

    Ab hier spielt sich alles alles im Homeverzeichnis vom User smsalarm ab.

    execute_alarm_by_FME:
    Code:
    #!/bin/bash
    screen -d -m /home/smsalarm/smsalarm alarm
    screen -d -m /Was_auch_immer_sonst_noch_ausgeführt_werden_soll
    Der eigentliche Aufruf der Alarmierung ist /home/smsalarm/smsalarm alarm
    Das zusätzliche screen ist nicht nötig, wenn nur der SMS-Alarm ausgelöst werden soll. Sollen jedoch noch andere Skripte/Programme zeitgleich mit der SMS-Alarmierung gestartet werden macht das Sinn (siehe zweite Zeile)

    Jetzt aber zum eigentlichen SMS-Alarmirungsskript
    Vorraussetzung ist eine Verbindung zum Internet. Entweder DSL-Faltrate (wie bei mir) oder auch Einwahl. Diese müßte dann halt noch an entsprechender Stelle eingebaut werden.

    Das Skript wurde zur Versendung von SMS mit sms77.net geschrieben.
    Solltet ihr euch da anmelden wollen, wäre es nett, ihr würdet es über folgenden Link tun:
    http://www.sms77.net/?ref=dmu

    In die Datei /home/smsalarm/smsalarm.users werden in jede Zeile einzeln die zu alarmierenden Handynummern geschrieben. Dahinter kann auch druch Leerzeichen getrennt ein Name stehen, um den Überblick zu behalten.
    z.B.
    Code:
    01797654321 Name1
    016166666666
    Alarmiert wird nur wenn als erster Parameter alarm Angegeben wird.: /home/smsalarm/smsalarm alarm
    Wird nichts angegeben wird nur bei sms77.net angefragt, ob die Parameter des Anrufs korrekt sind.
    wird /home/smsalarm/smsalarm debug aufgerufen, wird das das gleiche gemacht wie ohne Parameter, die Meldungen werden aber nicht in das logfile smsalarm.log geschrieben, sondern am Bildschirm ausgegeben.

    Im Skript selber müssen noch Username, Passwort, der zu schickende Text die Handynummer, an die die Statussms am Schluß geschickt werden soll und der Absender geändert werden.
    Für die Übermittlung der Daten an SMS77 muß das Programm curl installiert sein.

    Mit den jetzigen Einstellungen versucht das Skript jede SMS mit einem Timeout von max. 5 Sekunden zu verschicken. Schlägt der Versand einer oder mehrerer Nummern fehl (falscher oder kein Fehlercode von sms77) werden für jede Nummer maximal insgesamt 5 Versuche gemacht.
    Angehängte Dateien Angehängte Dateien
    Geändert von duese (17.11.2006 um 15:30 Uhr)

  4. #4
    Registriert seit
    29.08.2005
    Beiträge
    423

    Teil 2

    Das Skript ist kommentiert. Sollte doch was unklar sein, einfach fragen.....
    smsalarm:
    Code:
    #!/bin/bash
    #  Skript zur SMS-Alarmierung über SMS77
    #  Daniel Müllegger 2006
    #  Dieses Skript darf frei verwendet oder verändert werden.
    #  Für Funktion oder Fehlerfreiheit kann ich keinerlei Garantien übernehmen
    #  Viel Spaß beim alarmieren!
    #  Dieses Skript benötigt CURL
    
    
    # USER:		Username bei sms77.de:
    # PASS:	 	Passwort bei sms77.de:
    # USERSFILE: 	Diese Datei enthält die zu alarmierenden Tel.-Nummern, eine je Zeile:
    # ALARMTEXT: 	Der Text der in der SMS enthalten ist:
    # TYPE:		Typ der SMS. Möglich: basicplus, quality, standard, festnetz, flash
    # FROM:		Absender der SMS
    
    USER=xxx; 	PASS=xxxxxxxx
    
    ALARMTEXT="FFW XYZ SMS Benachrichtigung. Ein Alarm ist eingegangen. Alle Angaben ohne Gewähr "`date +"%X %d.%m.%Y"`
    TYPE=quality 
    FROM=FFWXyz	
    
    # STATUSUSER:	An diese Nummer wird als letztes eine SMS-verschickt mit Text, Startzeit, Datum, Endzeit der Alarmierung, 
    #		Anzahl erfolgreicher SMS/Anzahl User/Anzahl der Versuche insgesamt und Kontostand vor Versand der Statussms
    STATUSUSER=01711234567
    
    # USERSFILE:	In dieser Datei stehen die zu alarmierenden Handynummern je eine am Anfang einer Zeile.
    #			Dahinter durch ein Leerzeichen getrennt können Namen oder Kommentar stehen.
    # LOGFILE:	Logdatei
    # LOCKFILE:	Wenn diese Datei existiert, wird das Skript nicht ausgführt und nur eine Logmeldung ausgeben.
    #			Damit werden Mehrfachalarmierungen (z.B. durch mehrere Schleifen) vermieden.
    # URL:		An diese URL werden die Parameter per http-get-Befehl mittels curl übergeben.
    
    USERSFILE=$0.users
    LOGFILE=$0.log
    LOCKFILE=$0.lock
    URL="http://www.sms77.net/gateway/"
    
    #Für Logfile
    WHAT="[sms]  "
    
    # Wenn DISABLESMS=" -d debug=1" gesetzt ist, werden keine SMS verschickt,
    # sondern nur am Server angefragt, ob die Syntax i. O. ist
    
    DISABLESMS=" -d debug=1"
    if [ "$DISABLESMS" = " -d debug=1"  ] ;  then WHAT=[nosms]; fi
    if [ "$1" = "alarm" ] ;	then WHAT=[alarm]; 	DISABLESMS="" ; fi
    if [ "$1" = "debug" ] ;	then WHAT=[debug]; 	DISABLESMS=" -d debug=1" ; fi
    if [ -e $0.probe ] ;  	then WHAT=[probe]; 	DISABLESMS=" -d debug=1" ; fi
    
    if [ ! -e $LOCKFILE ]
    then    {
    	touch $LOCKFILE
    
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT ***************** Start der SMS Alarmierung ********************" ; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT *** Übermittelte Nachricht: $ALARMTEXT ***" ;  if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    
    	# Zu alarmierende Tel.-Nummern einlesen
    	USERSTOALARM=`cat $USERSFILE |awk '{ print $1}'`
    	USERSNOTALARMED=""
    	NOOFUSERS=0
    	NOOFALARMEDUSERS=0
    	NOOFTRYS=0
    	for TRY in `seq 5`
    	do
    		USERSNOTALARMED=""
    		for NUMBER in $USERSTOALARM
    		do
    			if [ $TRY = 1 ]; then NOOFUSERS=$[$NOOFUSERS + 1] ; fi
    			TEXT=$ALARMTEXT
    			DATA="-d u=$USER -d p=$PASS -d to=$NUMBER -d from=$FROM -d text=${TEXT//" "/%20} -d type=$TYPE$DISABLESMS"
    			RESULT=""
    			RESULT=$(curl -m 5 --silent --get $DATA --url $URL);
    			if [ "$RESULT" != "100" ]; 
    				then USERSNOTALARMED="$USERSNOTALARMED $NUMBER"; 
    				else NOOFALARMEDUSERS=$[$NOOFALARMEDUSERS +1];
    			fi
    			WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $TRY $RESULT $NUMBER $FROM $TYPE"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    			NOOFTRYS=$[$NOOFTRYS + 1]
    		done
    		USERSTOALARM=$USERSNOTALARMED
    		if [ "$USERSTOALARM" != "" ]; then sleep 3; fi
    	done
    	
    	ACCOUNTDATA="-d u=$USER -d p=$PASS"
    	GUTHABEN=-na-
    	GUTHABEN=$(curl -m 5 --silent --get $ACCOUNTDATA --url $URL/balance.php);
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT Konto: $USER Restguthaben: $GUTHABEN"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    
    	TO=$STATUSUSER
    	TRY=X
    	TEXT="$ALARMTEXT `date +"%X"` $NOOFALARMEDUSERS/$NOOFUSERS/$NOOFTRYS Konto: $USER $GUTHABEN EUR"
    	DATA="-d u=$USER -d p=$PASS -d to=$TO -d from=$FROM -d text=${TEXT//" "/%20} -d type=$TYPE$DISABLESMS"
    	RESULT=""
    	RESULT=$(curl -m 5 --silent --get $DATA --url $URL);
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $TRY $RESULT $TO $FROM $TYPE ---$TEXT---"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    
    	NOWAIT=""
    	if [ "$2" = "nosleep" ] ; then NOWAIT="ist deaktiviert"  ; fi
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT *** 60 Sekunden warten $NOWAIT ***";  if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    	if [ "$2" != "nosleep" ] ; then sleep 60 ; fi
    
            rm $LOCKFILE > /dev/null 2>&1
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT ***************** Ende der SMS Alarmierung  ********************"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    
            };
    else 	{
    	WRITETOLOG="`date +"%Y%m%d %X"` $WHAT $0 abgebrochen ($LOCKFILE existiert)"; if [ "$1" != "debug" ]; then echo "$WRITETOLOG" >> $LOGFILE; else echo "$WRITETOLOG"; fi; 
    	};
    fi
    Beim Start von smsalarm wird überprüft ob die Datei smsalarm.lock existiert. Wenn nicht wird sie angelegt und das Skript ausgeführt.
    Wenn nicht wird nur eine Log-Meldung geschrieben.
    Nachdem die Alarmierung durch ist wird noch 60 Sekunden gewartet und dann smsalarm.lock gelöscht. Auf diese Weise werden Mehrfachalarmierungen (z.B. durch AU) verhindert.
    Existiert die Datei /home/smsalarm/smsalarm.probe wird das Skript wie beim Aufruf smsalarm debug abgearbeitet und Logmeldungen geschrieben, aber keine SMS versandt.
    So können z.B. mit cronjobs einfach Probealarme ausgeblendet werden.

    Noch eine Anmerkung zu den Dateinamen:
    Die lock, log, users und probe Dateien sind abhängig von Name und Pfad des eigentlichen Alarmskriptes. Benennt man smsalarm um in kleineschleife, dann werden die Dateien
    kleineschleife.log, kleineschleife.lock, kleineschleife.users und kleineschleife.probe heißen.
    Auf diese Weise kann man einfach Verschiedene Schleifen realisieren.
    Ich hoffe ich hab verständlich genug geschrieben. Viel Spaß beim Alarmieren.

    duese

    P.S. Für Richtigkeit und Fehlerfreiheit der Skripten und Programme kann ich leider keine Garantie übernehmen. Aber den ersten erfolgreichen Einsatz hatte das System heute beim Probealarm

  5. #5
    Registriert seit
    14.12.2004
    Beiträge
    427
    Wäre es möglich auch ein Skript zu schreiben für IB-Systems und Aufruf durch den Crusader?
    Leider hab ich von dem ganzen Skripzeugs keine Ahnung.

    Vielen Dank aber schon im Voraus.

    Gruss Andy
    Weil kein <html> mehr zugelassen ist, muss ich mir erst eine neue Signatur im vB Code machen. So long....

  6. #6
    Registriert seit
    29.08.2005
    Beiträge
    423
    Natürlich kann das ganze umgebaut/erweitert werden um auch mit IB-Systems zu funktionieren. Ich hab aber bis jetzt noch keine Beschreibung der http-API gesehen.

    Der Aufruf kann selbstverständlich auch von jedem anderen Programm unter Linux aus passieren (läuft Crusader unter Linux?).

    duese

  7. #7
    Registriert seit
    07.08.2003
    Beiträge
    161
    Zitat Zitat von duese
    ...
    (läuft Crusader unter Linux?).

    duese
    Ja, der FMS-Crusader läuft unter Linux weil er in Java geschrieben wurde.

  8. #8
    Registriert seit
    29.08.2005
    Beiträge
    423
    Ok, dann kein Problem, wenn er externe Programme ausführen kann.

    /Verzeichnis_in_dem_das_skript_liegt/smsalarm alarm

    ausführen und der Spaß geht los.

    duese

  9. #9
    Registriert seit
    14.12.2004
    Beiträge
    427
    Hi duese,

    hab deinen Beitrag im "SMS über DSL für 4,7Ct" - Thread gelesen.
    Was meinst du mit http-api?

    Gruss Andy
    Weil kein <html> mehr zugelassen ist, muss ich mir erst eine neue Signatur im vB Code machen. So long....

  10. #10
    Registriert seit
    14.12.2004
    Beiträge
    427
    Meinst du das hier:
    www.gibma.de/ibss.zip In der Anleitung steht da was von Parametern und wie die html-Zeile aussieht, wenns rausgeschickt wird.

    Anbei noch ein Datenblatt von IB-Systems http-Schnittstelle,

    Gruss Andy
    Angehängte Dateien Angehängte Dateien
    Weil kein <html> mehr zugelassen ist, muss ich mir erst eine neue Signatur im vB Code machen. So long....

  11. #11
    Registriert seit
    29.08.2005
    Beiträge
    423
    Der Versand der SMS geschieht über eine http-Schnittstelle.
    (API steht glaub ich für AdvancedProgrammingInterface oder so ähnlich)

    Bei SMS77 (mit den anderen hab ich mich noch nicht näher beschäftigt) werden die benötigten Daten als Parameter eines http-get-Befehls übergeben.

    D.h. Du könntest allein mit einem Internet-Browser SMS verschicken.
    Gib im browser
    Code:
    http://www.sms77.de/gateway/?u=benutzer&p=passwort&to=00491609876543&text=
    meine%20erste%20nachricht&type=quality&from=sms77.de
    ein und es wird mit dem Benutzerkonto "benutzer", Passwort "passwort" eine qualitysms an "00491609876543" mit dem Text "meine erste nachricht" verschickt.

    Genau diese Aufrufe werden im Skript mit dem Programm curl statt einem Browser gemacht.

    duese

  12. #12
    Registriert seit
    14.12.2004
    Beiträge
    427
    Hallo duese,

    ja genau das ist es! Bei IB-Systems läuft des genauso. Nur dass hier andere Parameter/Variablen benutzt werden. Kann man sehr gut in dieser Beschreibung rausfinden: www.gibma.de/ibss.zip
    Wäre super, wenn du da was drehen könntest.

    Gruss Andy
    Weil kein <html> mehr zugelassen ist, muss ich mir erst eine neue Signatur im vB Code machen. So long....

  13. #13
    Registriert seit
    29.08.2005
    Beiträge
    423
    @kOnDeNsAtOr:

    Die Parameter die in der Beschreibung von ibss.exe angegeben werden sind nicht die gleichen wie die die dann von ibss.exe an das Gateway übergeben werden.
    Aber ich hab mich mal testweise bei ib-systems angemeldet und eine Beschreibung der API gefunden. Ich denk, daß sollte sich im Laufe der nächsten Woche machen lassen.

    Machst Du mir den (alpha/beta)Tester?

    duese

  14. #14
    Registriert seit
    14.07.2002
    Beiträge
    188
    Zitat Zitat von duese
    Also hier die Beschreibung für eine SMS-Alarmierung unter Linux (ausgelöst durch einen FME):
    Moin Düse, hast du Lust die Anleitung als Projekt mit in das MonitorWiki (http://monitor.gambri.net) einzupflegen?

  15. #15
    Registriert seit
    12.05.2004
    Beiträge
    341
    Hmm also den Anbieter SMS77 kann ich überhaupt nicht empfehlen.
    Ich habe mehrere Tests gemacht:

    Mail2SMS -> SMS kamen 2 Tage später auf meinem Handy an
    SMS per URL -> kam überhaupt nicht an

    das einzige was klappte, allerdings auch mit einer Verzögerung von gut 5min war
    das senden einer SMS von deren Webseite aus.

    Das hat mich garnicht überzeugt :/

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •