Ankündigung

Einklappen
Keine Ankündigung bisher.

Senden von SMS

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] Senden von SMS

    Hallo Zusammen,

    nachdem ich seit geraumer Zeit zumeist stiller Mitleser in diesem Forum bin, möchte ich heute auch etwas dazu beitragen...

    Nachdem die Haussteuerung soweit einiger Maßen das tut, was sie soll, habe ich mich dem Thema SMS-Nachrichten angenommen. Vorhanden war noch ein UMTS-Stick von Huawai (E173) mit einer Prepaid-Karte eines Discounters. Über diesen Stick werden die SMS-Meldungen versand.
    Hierzu habe ich auf dem Raspi die SMS Tools installiert. Eine gute Anleitung findet ihr hier.

    Wenn das manuelle Senden einer SMS funktioniert, ist die Hälfte schon geschafft. Probleme kann es unter Umständen mit den Zugriffsberechtigungen auf die verschiedenen Verzeichnisse geben, welche die SMS-Tools benötigen.

    In der logic.conf wird nun ein neuer Eintrag angelegt:

    Code:
    [Feueralarm]
        filename = sms_alarm.py
        visu_acl = true
        watch_item = Alarme.*
    Im Verzeichnis "Items" habe ich dann eine neue Datei angelegt mit dem Namen "alarme.conf".

    Hierin definiert sind die Alarm-Items.

    Beispiel:

    Code:
    [Alarme]
        type = bool
        [[Feuer]]
            type = bool
            [[[Keller]]]
                type = bool
                [[[[Technik]]]]
                    name = "Feueralarm Keller Technikraum"
                    type = bool
                    visu_acl = rw
                    value = 0
                    knx_dpt = 1
                    knx_listen = 3/0/1
                    enforce_updates = on
                    alarmtext = "Feueralarm Keller Technikraum"
                    lebenszeichen = ""
            [[[EG]]]
                type = bool
                [[[[Kueche]]]]
                    name = "Feueralarm EG Kueche"
                    type = bool
                    visu_acl = rw
                    value = 0
                    knx_dpt = 1
                    knx_listen = 3/1/51
                    enforce_updates = on
                    alarmtext = "Feueralarm EG Kueche"
                    lebenszeichen = ""
    Ferner gibt es noch eine Datei "sms.conf" im "Items-Verzeichnis"

    Code:
    [sms]
        [[out]]
            type = str
            value = "49176xxxxxxxxxx 49171yyyyyyyyyy"
        [[in]]
            type = str
            value = "49176xxxxxxxxxx 491522yyyyyyyyyy 49171zzzzzzzzzzzz"
    Der Programmcode von sms_alarm.py lautet wie folgt:

    Code:
    #!/usr/bin/env python
    
    import sys
    import logging
    import time
    import datetime
    
    logger = logging.getLogger('')
    logger.info("Im Modul sms_alarm.py...")
    try:
        filename = "/var/spool/sms/outgoing/alarm" + time.strftime("%Y%m%d_%H%M%S")
        trigger_source = trigger['source']
        logger.info('SMS_ALARM: Triggered By '+trigger_source)
        trigger_item = sh.return_item(trigger_source)         
        if trigger_item() == 1:
            nr_to_call = sh.sms.out()
            logger.info("Zu wählende Nummern: "+nr_to_call)
            nr_list = nr_to_call.split( )
            for nr in nr_list:
                filename = filename + '_' + nr + '.txt'
                fobj_out = open(filename,"w")
                fobj_out.write('To: ' + nr + '\n')
                fobj_out.write('\n')
                alarmtext = trigger_item.conf['alarmtext']
                logger.info("Alarmtext: "+str(alarmtext))
                alarmmeldung = "F-RAUCHMELDER: [I]Ort[/I], [I]Strasse_mit_Hausnummer[/I] - "+str(alarmtext) + " "+ time.strftime("%H:%M:%S %d.%m.%Y")
                logger.info('Alarmmeldung: '+alarmmeldung)
                fobj_out.write(alarmmeldung +'\n')
                fobj_out.close()
        else:
            logger.info("SMS_ALARM: Wert von "+trigger_source+" ist nicht 1, damit kein Alarm")
            trigger_item.conf['lebenszeichen'] = time.strftime("%H:%M:%S %d.%m.%Y")   
    except Exception as e:
        logger.exception("Fehler in sms_alarm.py: {0}".format(e))
    Im Einsatz sind aktuell Funkrauchmelder von Hager, welche über den Funk/TP-Gateway angebunden sind. Bei einem Alarm sendet jeder Rauchmelder eine spezifische GA, mit dem Wert 1, welche einem Raum zugeordnet ist. Einmal am Tag senden die Rauchmelder einen Alarm mit dem Wert 0 (Lebenszeichen).
    Die Logic "Feueralarm" hört auf die Alarm-Items. Wird eines der Items getriggert, wird sms_alarm.py aufgerufen und es wird an die in der Datei "sms.conf" angegebene(n) Rufnummern (mit Leerzeichen getrennt) diejenige Alarmmeldung abgeschickt, welche bei den Alarmen mit der Variablen "alarmtext" definiert wurde.

    Die Verzögerung bei normaler Netzauslastung bei O2 beträgt ca. 10 bis 40 Sekunden...

    Ich hoffe, ich konnte dem Einen oder Anderen mit dieser Anleitung eine Anregung geben...

    Grüße vom Bodensee

    Uwe



    #2
    Klasse Idee und prima umgesetzt, danke Uwe!!!
    /tom

    Kommentar

    Lädt...
    X