Ergebnis 1 bis 15 von 24

Thema: SMS-Alarmierung unter Linux FME-getriggert

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #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 14:30 Uhr)

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
  •