Ergebnis 1 bis 15 von 24

Thema: SMS-Alarmierung unter Linux FME-getriggert

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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

  2. #2
    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....

  3. #3
    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

  4. #4
    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.

  5. #5
    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

  6. #6
    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....

  7. #7
    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....

  8. #8
    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

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
  •