Jump to content

GSM-Bricklet?? z.B. für DIY-Alarmanlage


Recommended Posts

Geschrieben

Ich schlage mich gerade mit Überlegungen über eine halbwegs manipulationssichere Alarmanlage herum. Die gängigen Modelle kommunizieren ja meist über Funk mit den Sensoren, was alles andere als Manipulationssicher ist. Ich tüfftele an einer DIY-Lösung mit Tinkerforge-Bricks und Bricklets. Reedkontakte würden sich ja per I/O16-Bricklet überwachen lassen. Rauchmelder wohl auch denke ich. Das ganze könnte dann über LAN-Kabel im ganzen Haus vernetzt werden und per POE mit Strom versorgt werden. Steuern könnte man das ganze z.B. über einen Raspberry-Pi, der NICHT im Internetz hängt (wegen Manipulation etc). Was nutzt einem allerding die Beste Alarmanlage, wenn Sie einen Einbruch/Brand zwar bemerkt, aber keinem bescheid sagt?

Dafür, und für jede andere Art der Fernüberwachung ohne Internet, währe ein GSM-Bricklet ideal. SIM-Karte rein und dann könnte man sich per SMS oä banachrichtigen lassen, bzw Sensorzustände auslesen, steuern etc..

Nicht so komfortabel wie übers I-Net, aber dafür sicherer und auch da, wo z.B. zwar ein Mobielfunknetz, aber kein W-Lan oä zur Verfügung steht.

 

Absichern könnte man sich dabei auch, indem man z.B. bei jeder SMS ZUM Bricklet ein PW mitschicken muss.

 

Was haltet Ihr von der Idee?

Geschrieben

Solange es noch kein GSM-Bricklet gitb, könntest Du Dir z.B. mit einem GSM USB-Stick behelfen. Ich habe einen alten UMTS USB-Stick verwendet, um damit unter Linux mit Hilfe der SMS Server Tools [1] Nachrichten zu versenden. Soweit ich mich erinnern kann, kannst Du auch auf eingehende Nachrichten reagieren.

 

Hoffe das hilft Dir weiter.

 

--mod

 

[1] http://smstools3.kekekasvi.com/

Geschrieben

Solange es noch kein GSM-Bricklet gitb, könntest Du Dir z.B. mit einem GSM USB-Stick behelfen. Ich habe einen alten UMTS USB-Stick verwendet, um damit unter Linux mit Hilfe der SMS Server Tools [1] Nachrichten zu versenden. Soweit ich mich erinnern kann, kannst Du auch auf eingehende Nachrichten reagieren ...

 

ja, Kommunikation geht in beiden Richtungen (auch unter Windows) . . .

  • 2 weeks later...
  • 4 weeks later...
Geschrieben

 

ein tf-dongle ist der stick (dongle) den tinkerforge verkauft wird ;-)

 

humod ist die einzig brauchbare gsm-library die ich ausgemacht habe :

https://github.com/oozie/pyhumod/

 

sie wird auch in den beispielen auf tinkerforge.com gebraucht und hat leider auch einige bugs bzw. "feinheiten".

 

wichtig ist z.b. dass beim pin-initialisieren nur "EADY" zurückkommt & dass man das senden von sms ein bisschen "kreativer" gestalten muss ....

 

(bemerkung : xpr() und xprexit() sind meine ausgaberoutinen )

 


import sys

def xpr(*args): # ausgabe-routine
  pass

def xprexit(*args):
  xpr(*args)
  sys.exit(1)

import humod

class ModemManager():

  CMD_STR_CPIN = '+CPIN' # PIN management
  CMD_STR_COPS = '+COPS' # Operator management
  CMD_STR_CSCS = '+CSCS' # Character set management
  CMD_STR_CSCA = '+CSCA' # sms-center phone number
  #CMD_STR_CMGR = '+CMGR' # read message number
  #CMD_STR_CMGD = '+CMGD' # delete messages
  ERR_MSG_INIT_MODEM = 'ERROR: Failed to initialze modem'
  ERR_MSG_PUK = 'ERROR: SIM requires PUK code'
  ERR_MSG_PIN_EMPTY = 'ERROR: SIM requires PIN but no PIN provided'
  ERR_MSG_PIN_QUERY = 'ERROR: SIM query for PIN failed'
  ERR_MSG_PIN_APPLY = 'ERROR: Failed to apply PIN'
  ERR_MSG_PIN_WRONG = 'ERROR: Wrong PIN supplied'
  ERR_MSG_PIN_UNDEFINED = 'ERROR: Undefined PIN status'
  ERR_MSG_CMD_COPS_FAILED = 'ERROR: Setting auto search mode failed'
  ERR_MSG_SET_TEXTMODE_FAILED = 'ERROR: Setting text mode failed'
  ERR_MSG_SET_CHARACTER_SET_FAILED = 'ERROR: Failed to setup character set of the modem'
  ERR_MSG_CMD_SMSCENTER_FAILED = 'ERROR: Setting sms center number'
  ERR_MSG_NEW_SMS_CB_FAILED = 'ERROR: Failed register callback for new SMS'

  def __init__(self, tty_device_file, pin, csca):
    self.prober_started = False
    try:
      self.MODEM = humod.Modem(tty_device_file, tty_device_file)
      signal.signal(signal.SIGALRM, self._handler_timeout_signal)
      signal.alarm(10)
      self.MODEM.show_model()
      signal.alarm(0)
    except:
      self.handle_error(self.ERR_MSG_INIT_MODEM)
    try:
      pin_status = humod.at_commands._common_get(self.MODEM,self.CMD_STR_CPIN)[0]
    except:
      self.handle_error(self.ERR_MSG_PIN_QUERY)
    if 'IM PUK' in pin_status:
      self.handle_error(self.ERR_MSG_PUK)
    if 'IM PIN' in pin_status:
     if pin == '':
        self.handle_error(self.ERR_MSG_PIN_EMPTY)
      try:
        humod.at_commands._common_set(self.MODEM,self.CMD_STR_CPIN,pin)
      except:
        self.handle_error(self.ERR_MSG_PIN_APPLY)
      try:
        pin_status = humod.at_commands._common_get(self.MODEM,self.CMD_STR_CPIN)[0]
      except:
        self.handle_error(self.ERR_MSG_PIN_QUERY)
      if 'EADY' not in pin_status:
        self.handle_error(self.ERR_MSG_PIN_WRONG)
    if 'EADY' not in pin_status:
      self.handle_error(self.ERR_MSG_PIN_UNDEFINED)
    try:
      humod.at_commands._common_set(self.MODEM,self.CMD_STR_COPS,0)
    except:
      self.handle_error(self.ERR_MSG_CMD_COPS_FAILED)
    time.sleep(10)
    try:
      humod.at_commands._common_set(self.MODEM,self.CMD_STR_CSCS,'"GSM"')
    except:
      self.handle_error(self.ERR_MSG_SET_CHARACTER_SET_FAILED)
    try:
      self.MODEM.enable_textmode(True)
    except:
      self.handle_error(self.ERR_MSG_SET_TEXTMODE_FAILED)
    self.CSCA='"'+csca+'"'
    try:
      humod.at_commands._common_set(self.MODEM,self.CMD_STR_CSCA,self.CSCA)
    except:
      self.handle_error(self.ERR_MSG_CMD_SMSCENTER_FAILED)

  def _handler_timeout_signal(self, signal_number, frame):
    raise Exception

  def handle_error(self, message):
    xprexit("modem error : {}".format(message))

  def stop_prober(self):
    if self.prober_started:
      try:
        self.MODEM.prober.stop()
      except:
        xpr("notice : prober stop on non-running prober attempted ...")

  def send_sms(self, numbers, message):
    try:
      humod.at_commands._common_set(self.MODEM,self.CMD_STR_CSCS,'"GSM"')
      humod.at_commands._common_set(self.MODEM,self.CMD_STR_CSCA,self.CSCA)
      self.MODEM.enable_textmode(True)
      for number in numbers:
        text_number = self.MODEM.sms_send(number,message)
        xpr("notice : sms sent : id {}".format(text_number))
    except Exception , e:
      xpr("notice : sms send exception : {}".format(e.message))


 

den code für das empfangs-callback spr ich mir hier, aber er ist auch nicht sehr gross oder komplex .... damit kann man dann auch dumme dinge anstellen über spezifische antwort-sms ...

 


## SIM-Card specific
SMSCSCA = "+436640501" # a1.net 
SMSPIN = ""

##
SMSNUMBERS = ("+4311111111111111111111111",)
#SMSNUMBERS = None

if __name__ == "__main__":

  sms_mm = ModemManager(SMSTTY, SMSPIN, SMSCSCA)

  def notifyme(str):
    xpr("*** NOTIFY *** {} ***".format(str))
    if sms_mm and SMSNUMBERS:
      sms_mm.send_sms(SMSNUMBERS,str)

  #
  # hier geschieht etwas ;-)
  #
  notifyme("eine katastrophe ...")

  if sms_mm:
    sms_mm.stop_prober()

  sys.exit(0)

 

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...