Hallo meine Torsteuerung via SMS läuft nun halbwegs zuverlässig und ich habe mich entschieden mein Projekt hier aus drei Gründen zu veröffentlichen.
- Das Projekt war meine erste Berührung mit dem Raspberry, mit Linux und mit Python. Ich würde natürlich gerne Rückmeldung haben, weil ich vieles bestimmt nicht so gelöst habe, wie der erfahrene Python Profi das machen würde. Um mein Projekt ständig zu verbessern, suche ich natürlich nach solchen Hinweisen.
- Als ich nach einer Torsteuerung mit dem Raspberry gesucht habe, war das was ich gefunden habe sehr rudimentär. Vielleicht hilft es jemand weiter, der ein ähnliches Projekt hat. Ich persönlich kann am besten mit neuen Programmiersprachen arbeiten, wenn ich Beispiel Code habe, den ich auf meine Bedürfnisse anpassen kann. Das ist leichter als sich erst mal tagelang bestimmten Dingen zu beschäftigen, bevor man erste Schritte in einer Programmiersprache gehen kann. Auch wenn das inhaltlich natürlich der besserre Weg wäre. Aber die liebe Zeit..
- Um dem Forum etwas zurückzugeben, denn ich habe hier Hilfe erfahren und ein Forum lebt ja von Projekten von Informationen von Diskussionen.
Ein schöner Nebeneffekt meines Projektes ist, dass ich Begeisterung am Raspberry gefunden habe und nächste Projekte schon im Kopf schlummern und dies meinen Einstieg in Linux erzwungen hat.
Doch zunächst was macht meine Tor Steuerung?
Ich verwende einen Raspberry Zwei mit einem Huawei E173 UMTS Stick und einem Piface Digital zwei Modul das über ein Relais einen Potenzial freien Schalter auf dem Tor schaltet und dies damit öffnet.
Auf jeden Fall habe ich Spaß am Raspberry gefunden, die nächsten Projekte schlummern schon im Arbeitsspeicher. Und als Nebeneffekt habe ich eine erste Begegnung mit Linux hinter, mir die ich vertiefen werde. Ich suche schon lange nach einer Alternative für den Windoof Schrott, der mich gefühlt 2 Jahren meines Lebens mit Problemen belastet hat, die ich unter Linux so nicht sehe. Natürlich war die Linux Welt bekannt aber damit beschäftigen tut man dann doch nicht, wenn man nicht muss. Und welcher Windoof Nutzer hat nicht Angst vor der Konsole…
Hintergrund der ganzen Geschichte ist, dass ich das Tor per Mobiltelefon öffnen können möchte. Ferner möchte ich Mietern auch die Möglichkeit einräumen das Tor zu öffnen, natürlich sollen nur Berechtigte das Tor öffnen können.
Des Weiteren wollte ich dass das Tor alle Aktionen protokolliert, damit ich im Nachgang nachvollziehen kann, wer, wann das Tor geöffnet hat.
Ein weiterer wichtiger Punkt war mir die Konfiguration des Ganzen via SMS Nachrichten. Das heiß ich möchte Mieter anlegen/ändern/löschen können, den Status des Tores, (gesperrt, offen standard) setzen können.
Ich verwende auf meinem Android Handy eine Software namens Macrodroid mit deren Hilfe ich mir Buttons auf der Oberfläche programmiert habe die bestimmte Aktionen auslösen. Zum Beispiel Tor öffnen, Statusmeldungen senden, Mieter anlegen und so weiter. Dies geschieht in Form einer strukturierten SMS, die an den Raspberry gesendet werden. Die SMS wird ausgewertet und entsprechend reagiert.
ACHTUNG: Der Code ist noch in Arbeit das ist ein erster Schuss. Wer Fehler findet darf mich gerne darauf hinweisen, ich versuche das Projekt laufend zu verbessern. Viele Dinge habe ich in meiner Unerfahrenheit mit Python sicher auch noch nicht ideal gelöst. Hinweise nehme ich gerne entgegen
Momentan habe ich noch folgende Probleme die allerdings nur zum Teil mit dem Code zu tun haben.
- Es gelingt mit leider noch nicht mit Gammu und meinem E173 Stick Anrufe entgegen zu nehmen. Eigentlich wollte ich das Tor per Anruf öffnen was ich komfortabler finde als per SMS. Ich musste aber das Tor, das vorher durch ein GX155 GSM Modul von Conrad gesteuert wurde welches leider spontan verstorben ist und das ich nach dem ganzen Ärger mit der Unzuverlässigkeit mit dem Modul nicht mehr ersetzen wollte, aber schnell realisieren. Deswegen übergangsweise erst mal Steuerung nur durch SMS.
- Das abholen von SMS ist mit Gammu leider tricky. Es gibt SMS bis 70 Zeichen, da geht alles easy. Aber darüber hinaus werden SMS, was ich auch nicht wusste vom Provider zerlegt, kommen als zwei oder mehrere? SMS und werden wieder zusammengesetzt. Das ist mir trotz Beispielcode nicht wirklich zuverlässig gelungen. Oder anders gesagt. Das zusammensetzen gelingt, das löschen der beiden Teile nicht wirklich gut. Deswegen habe ich zu dem Workaround gegriffen, dass meine Konfigurations-SMS immer mit @ beginnen und mit @ enden, damit ich zuverlässig prüfen kann, nicht mit einer „abgehackten“ Nachricht zu arbeiten.
- Bisher läuft der Code in der Shell, später möchte ich das er bei Neustart des Raspberry automatisch startet, damit z.B. nach Stromausfall das Tor wieder funktioniert, ohne dass ich erst per VNC auf den Raspberry muss und dort das Ganze manuell starten muss.
- Ich würde gerne noch eine GUI für Auswertungen einbauen, aber da habe ich mich noch gar nicht mit beschäftigt.
Na, ja. Hier der Code, bin mal gespannt auf die Rückmeldungen.
# -*- coding: utf8' -*-
import gammu
import pifacedigitalio
import pickle
import sqlite3
import time
pifacedigital = pifacedigitalio.PiFaceDigital()
pifacedigital.output_pins[0].turn_off() #pifacedigital Relais schliessen
# SQLite Datenbank verbinden
con = sqlite3.connect("/home/pi/tormann/daten/tormann.db")
dbcursor = con.cursor()
# Alte sms aus der Datenbank löschen
dbcursor.execute("DELETE FROM 'sms' ")
con.commit()
#Setup lesen
Pickle_Setup = pickle.load( open( "/home/pi/tormann/daten/setup.p", "rb" ) )
Meine_Nummer = Pickle_Setup["Meine Nummer"]
Tor_Status = Pickle_Setup["Tor Status"]
#GSM Modul initialieren
sm = gammu.StateMachine()
sm.ReadConfig()
sm.Init()
# Funktion zum SMS Versand
def SMSsenden(art,idnugr, text): #art: 1= ID, 2= Nummer, 3 = Gruppe, idnugr = ID, Nummer im Format "+17700000") oder Gruppe ,Text als String
idnugr = str(idnugr)
text = text.decode('utf-8', 'ignore')
#auf nur Ziffern ab der zweite Stelle in der Nummer pruefen
try:
int(idnugr[1:])
except:
idnugr_check =False
else:
idnugr_check =True
if not text:
return "Fehler in Funktion SMSsenden: Text leer"
elif not art or not idnugr or not text:
return "Fehler in Funktion SMSsenden: Art 1=ID, 2 = Nummer oder 3 = Gruppe, idnugr (ID, Nummer oder Gruppe) oder Text nicht definiert"
# wenn art = 1 also ID
elif art == 1 and int(idnugr):
#Wenn ID angegeben Nummer zu ID ermitteln
dbcursor.execute("SELECT * FROM `berechtigte` where id = " + str(idnugr))
for datensatz in dbcursor:
idnugr = datensatz[4]
# Create SMS info structure
smsinfo = {
'Class': -1,
'Unicode': False,
'Entries': [
{
'ID': 'ConcatenatedTextLong',
'Buffer':
text
}
]}
# Encode messages
encoded = gammu.EncodeSMS(smsinfo)
# Send messages
for message in encoded:
# Fill in numbers
message['SMSC'] = {'Location': 1}
message['Number'] = idnugr
# Actually send the message
sm.SendSMS(message)
return "SMS ID gesendet"
# wenn art = 2 also Nummer aber Nummer falsches Format
elif art == 2 and idnugr[0] != "+" or art == 2 and idnugr_check == False:
return "Fehler in Funktion SMSsenden: Art auf 2 = Nummer gesetzt aber Nummer im falschen Format. Beispiel gültige Nummer: +491772500000"
# wenn art = 2 also Nummer und Format richtig
elif art == 2 and idnugr[0] == "+" and idnugr_check == True:
# Create SMS info structure
smsinfo = {
'Class': -1,
'Unicode': False,
'Entries': [
{
'ID': 'ConcatenatedTextLong',
'Buffer':
text
}
]}
# Encode messages
encoded = gammu.EncodeSMS(smsinfo)
# Send messages
for message in encoded:
# Fill in numbers
message['SMSC'] = {'Location': 1}
message['Number'] = idnugr
# Actually send the message
sm.SendSMS(message)
return "SMS Nummer gesendet"
# wenn art = 3 also Gruppe
elif art == 3 and int(idnugr):
#Wenn Gruppe angegeben Nummern zu Gruppe ermitteln
dbcursor.execute("SELECT * FROM `berechtigte` where gruppe = " + str(idnugr) + " and sms = 1")
for datensatz in dbcursor:
idnugr = datensatz[4]
# Create SMS info structure
smsinfo = {
'Class': -1,
'Unicode': False,
'Entries': [
{
'ID': 'ConcatenatedTextLong',
'Buffer':
text
}
]}
# Encode messages
encoded = gammu.EncodeSMS(smsinfo)#
# Send messages
for message in encoded:
# Fill in numbers
message['SMSC'] = {'Location': 1}
message['Number'] = idnugr
# Actually send the message
sm.SendSMS(message)
#con.close()
return "SMS Gruppe gesendet"
# Funktion log schreiben
def log_schreiben(id, nummer, anforderung, aktion):
if not id:
sql_id = " "
sql_name= 'unbekannt'
sql_berechtigter= 'unbekannt'
sql_anrede = ''
sql_nummer= ''
sql_gruppe= ''
sql_sms = ''
sql_tab= ''
sql_tbis= ''
sql_zab= ''
sql_zbis= ''
sql_status= ''
sql_timestamp = time.strftime("%d.%m.%Y %H:%M:%S")
sql_aktion = aktion.decode('utf8')
sql_anforderung = anforderung.decode('utf8')
sql_torstatus = Tor_Status
elif id == '0':
sql_id = ' '
sql_name= 'System'
sql_berechtigter= 'System'
sql_anrede = ''
sql_nummer= ''
sql_gruppe= ''
sql_sms = ''
sql_tab= ''
sql_tbis= ''
sql_zab= ''
sql_zbis= ''
sql_status= ''
sql_timestamp = time.strftime("%d.%m.%Y %H:%M:%S")
sql_aktion = aktion.decode('utf8')
sql_anforderung = anforderung.decode('utf8')
sql_torstatus = Tor_Status
elif 1:
dbcursor.execute("SELECT * FROM `berechtigte` where id = " + str(id))
for datensatz in dbcursor:
sql_id = str(id)
sql_name= str(datensatz[1])
sql_berechtigter= str(datensatz[2])
sql_anrede = str(datensatz[3])
sql_nummer= str(datensatz[4])
sql_gruppe= str(datensatz[5])
sql_sms = str(datensatz[6])
sql_tab= str(datensatz[7])
sql_tbis= str(datensatz[8])
sql_zab= str(datensatz[9])
sql_zbis= str(datensatz[10])
sql_status= datensatz[11]
sql_timestamp = time.strftime("%d.%m.%Y %H:%M:%S")
sql_aktion = aktion.decode('utf8')
sql_anforderung = anforderung.decode('utf8')
sql_torstatus = Tor_Status
sql_text = "INSERT INTO 'logdaten' ('sql_id', `name`, `berechtigter`, `anrede`, 'nummer', 'gruppe', 'sms', 'tab', 'tbis', 'zab', 'zbis', 'status', 'timestamp' , 'aktion' , 'anforderung' , 'torstatus' ) \
VALUES ('" + id + "', '" + sql_name + "', '" + sql_berechtigter + "', '" + sql_anrede + "', '" + sql_nummer + "', '" + sql_gruppe + "', '" + sql_sms + "', '" \
+ sql_tab + "', '" + sql_tbis + "', '" + sql_zab + "', '" + sql_zbis + "', '" + sql_status + "', '" + sql_timestamp + "', '" + sql_aktion + "', '" + sql_anforderung + "', '" + sql_torstatus + "')"
dbcursor.execute(sql_text)
con.commit()
log_schreiben('0', '', 'System neu gestartet', 'System neu gestartet')
def SMS_holen(delete=1): #delete = 0 = nicht löschen, 1= verarbeitete SMS löschen, 2 = alle löschen
"""Holt über Gammu SMS fügt bei langen zusammen, schreibt die SMS in eine Datenbank und löscht nach Parameter."""
status = sm.GetSMSStatus()
remain = status['SIMUsed'] + status['PhoneUsed'] + status['TemplatesUsed']
sms = []
start = True
global sms_nummer
global sms_text
global sms_vorhanden
global suchtext
sms_nummer = ""
sms_text = ""
sms_vorhanden = False
suchtext = '@'
if remain == 0:
print ('Keine SMS vorhanden')
while remain > 0:
if start:
cursms = sm.GetNextSMS(Start = True, Folder = 0)
start = False
else:
cursms = sm.GetNextSMS(Location = cursms[0]['Location'], Folder = 0)
remain = remain - len(cursms)
sms.append(cursms)
data = gammu.LinkSMS(sms)
for x in data:
v = gammu.DecodeSMS(x)
m = x[0]
#print
#print '%-15s: %s' % ('Number', m['Number'])
sms_nummer = m['Number']
#print '%-15s: %s' % ('Date', str(m['DateTime']))
#print '%-15s: %s' % ('State', m['State'])
#print '%-15s: %s' % ('Folder', m['Folder'])
#print '%-15s: %s' % ('Validity', m['SMSC']['Validity'])
loc = []
for m in x:
loc.append(str(m['Location']))
#print '%-15s: %s' % ('Location(s)', ', '.join(loc))
if v == None:
sms_text = m['Text']
#print '\n%s' % m['Text']
else:
for e in v['Entries']:
#print
#print '%-15s: %s' % ('Type', e['ID'])
if e['Bitmap'] != None:
for bmp in e['Bitmap']:
print ('Bitmap:')
for row in bmp['XPM'][3:]:
print (row)
#print
if e['Buffer'] != None:
sms_text = e['Buffer']
#print 'Text:'
#print e['Buffer']
#print
sms_vorhanden = True
sms_time = time.strftime("%d.%m.%Y %H:%M:%S")
sql_text = ""
if sms_text.find(suchtext) <0 and delete <=1 :
sql_text = "INSERT INTO 'sms' (`status`, `nummer`, `text`, `datum`) VALUES ('1', '" + sms_nummer + "', '" + sms_text + "', '" + sms_time + "')"
dbcursor.execute(sql_text)
con.commit()
sm.DeleteSMS(cursms[0]['Folder'], int(loc[0]))
print ('Nachricht gelöscht, kein @')
elif sms_text.find(suchtext) == 0 and sms_text.find(suchtext,1) >=1 and delete <=1 :
sql_text = "INSERT INTO 'sms' (`status`, `nummer`, `text`, `datum`) VALUES ('1', '" + sms_nummer + "', '" + sms_text + "', '" + sms_time + "')"
dbcursor.execute(sql_text)
con.commit()
for x in range(len(cursms)):
try:
sm.DeleteSMS(cursms[x]['Folder'], int(loc[0]))
remain = remain - len(cursms)
sms.append(cursms)
except:
print ()
try:
sm.DeleteSMS(cursms[x]['Folder'], cursms[0]['Location'])
remain = remain - len(cursms)
sms.append(cursms)
except:
print ()
print ('Nachricht gelöscht, zwei @')
elif delete == 2 :
sm.DeleteSMS(cursms[0]['Folder'], int(loc[0]))
print ('Alle Nachrichten gelöscht,')
elif sms_text.find(suchtext,1) >=1 and delete <=1 :
sm.DeleteSMS(cursms[0]['Folder'], int(loc[0]))
print ('Rest gelöscht,')
elif delete <=1:
print ('Noch nicht vollständig')
sms_nummer = ""
sms_text = ""
sms_vorhanden = False
SMS_holen(2) # Alte aufgelaufene SMS löschen
#Loop
while 1:
#Pruefen auf SMS Eingang
SMS_holen(1)
if sms_vorhanden == True:
dbcursor.execute("SELECT * FROM `sms` WHERE id = (SELECT max(id) FROM sms)")
for datensatz in dbcursor:
sms_id = str(datensatz[0])
sms_status = str(datensatz[1])
sms_nummer = datensatz[2]
sms_text = datensatz[3]
sms_datum = datensatz[4]
print ('sms_id: ' + sms_id)
print ('sms_status: ' + sms_status)
print ('sms_nummer: ' + sms_nummer)
print ('sms_text: ' + sms_text)
print ('sms_datum: ' + sms_datum)
dbcursor.execute("DELETE FROM 'sms' WHERE id = " + sms_id)
con.commit()
#Eingang SMS Status abfragen
if sms_nummer == Pickle_Setup["Meine Nummer"] and sms_text == "@Status abfragen@":
print ("Status abfragen")
SMSText ="Status der Torsteuerung am: " + time.strftime("%d.%m.%Y %H:%M:%S") + "\nStatus Tor: " + Tor_Status + "\n"
dbcursor.execute("SELECT * FROM `berechtigte`")
for datensatz in dbcursor:
SMSText = SMSText +"\n" + str(datensatz[0]) + " " + datensatz[2] + " " + datensatz[11]
log_schreiben(1, '', 'Status senden', 'Status gesendet')
SMSsenden(1,1,SMSText)
#Eingang SMS Status Tor offen schreiben
elif sms_nummer == Pickle_Setup["Meine Nummer"] and sms_text == "@Tor offen@":
print ("Tor offen")
SMSsenden(1,1,'Status der Torsteuerung am: ' + time.strftime("%d.%m.%Y %H:%M:%S") + "\nauf \"Tor offen\" geändert: ")
Tor_Status = "Tor offen"
pifacedigital.output_pins[0].turn_on()
#Eingang SMS Status Tor sperren schreiben
elif sms_nummer == Pickle_Setup["Meine Nummer"] and sms_text == "@Tor sperren@":
print ("Tor sperren")
log_schreiben(1, '', 'Tor sperren', 'Tor sperren')
SMSsenden(1,1,'Status der Torsteuerung am: ' + time.strftime("%d.%m.%Y %H:%M:%S") + "\nauf \"Tor sperren\" geändert: ")
Tor_Status = "Tor sperren"
pifacedigital.output_pins[0].turn_off()
#Eingang SMS Status Tor standard schreiben
elif sms_nummer == Pickle_Setup["Meine Nummer"] and sms_text == "@Tor standard@":
print ("Tor standard")
log_schreiben(1, '', 'Tor standard', 'Tor standard')
SMSsenden(1,1,'Status der Torsteuerung am: ' + time.strftime("%d.%m.%Y %H:%M:%S") + "\nauf \"Tor standard\" geändert: ")
Tor_Status = "Tor standard"
pifacedigital.output_pins[0].turn_off()
#Eingang SMS Neuen anlegen
elif sms_nummer == Pickle_Setup["Meine Nummer"] and "@Neuen anlegen" in sms_text:
lines = sms_text.split("\n")
try:
sql_name = lines[1][lines[1].find(':') + 2:50]
sql_berechtigter = lines[2][lines[2].find(':') + 2:50]
sql_anrede = lines[3][lines[3].find(':') + 2:50]
sql_nummer = lines[4][lines[4].find(':') + 2:50]
sql_gruppe = lines[5][lines[5].find(':') + 2:50]
sql_sms = lines[6][lines[6].find(':') + 2:50]
sql_tab = lines[7][lines[7].find(':') + 2:50]
sql_tbis = lines[8][lines[8].find(':') + 2:50]
sql_zab = lines[9][lines[9].find(':') + 2:50]
sql_zbis = lines[10][lines[10].find(':') + 2:50]
sql_status = lines[11][lines[11].find(':') + 2:50]
except:
print ("Neuen anlegen fehlgeschlagen: Text unvollständig oder falsch!")
log_schreiben(1, '', 'Neuen anlegen fehlgeschlagen: Text unvollständig oder falsch!')
else:
sql_text = "INSERT INTO 'berechtigte' (`name`, `berechtigter`, `anrede`, 'nummer', 'gruppe', 'sms', 'tab', 'tbis', 'zab', 'zbis', 'status') \
VALUES ('" + sql_name + "', '" + sql_berechtigter + "', '" + sql_anrede + "', '" + sql_nummer + "', '" + sql_gruppe + "', '" + sql_sms + "', '" \
+ sql_tab + "', '" + sql_tbis + "', '" + sql_zab + "', '" + sql_zbis + "', '" + sql_status + "')"
dbcursor.execute(sql_text)
con.commit()
log_schreiben(1, '', 'Neuen anlegen', 'Neuen anlegen')
print ("Neuen anlegen")
#Eingang SMS bestehenden anfordern
elif sms_nummer == Pickle_Setup["Meine Nummer"] and "@User anfordern ID:" in sms_text :
try:
sql_id = sms_text[sms_text.find(':')+2:sms_text.find(':')+4]
dbcursor.execute("SELECT * FROM `berechtigte` where id = " + str(sql_id))
for datensatz in dbcursor:
SMSText = str(("@User ändern:\n" +\
'id: ' + str(datensatz[0]) + "\n" +\
'name: ' + str(datensatz[1]) + "\n" +\
'berechtigter: ' + str(datensatz[2]) + "\n" +\
'anrede: ' + str(datensatz[3]) + "\n" +\
'nummer: ' + str(datensatz[4]) + "\n" +\
'gruppe: ' + str(datensatz[5]) + "\n" +\
'sms: ' + str(datensatz[6]) + "\n" +\
'tab: ' + str(datensatz[7]) + "\n" +\
'tbis: ' + str(datensatz[8]) + "\n" +\
'zab: ' + str(datensatz[9]) + "\n" +\
'zbis: ' + str(datensatz[10]) + "\n" +\
'status: ' + str(datensatz[11]) + '\n@'))
SMSsenden(1,1,SMSText)
log_schreiben(1, '', 'User anfordern', 'User ' + str(sql_id) + ' geschickt')
print ("User anfordern")
except:
log_schreiben(1, '', 'User anfordern', 'fehlgeschlagen ' + str(sql_id) + ' ungltig!')
SMSsenden(1,1,'User anfordern fehlgeschlagen, Id nicht korrekt oder an falscher Stelle')
print ("User anfordern fehlgeschlagen")
#Eingang SMS User aendern
elif sms_nummer == Pickle_Setup["Meine Nummer"] and u"User ändern:" in sms_text :
lines = sms_text.split("\n")
try:
sql_id = lines[1][lines[1].find(':') + 2:50]
sql_name = lines[2][lines[2].find(':') + 2:50]
sql_berechtigter = lines[3][lines[3].find(':') + 2:50]
sql_anrede = lines[4][lines[4].find(':') + 2:50]
sql_nummer = lines[5][lines[5].find(':') + 2:50]
sql_gruppe = lines[6][lines[6].find(':') + 2:50]
sql_sms = lines[7][lines[7].find(':') + 2:50]
sql_tab = lines[8][lines[8].find(':') + 2:50]
sql_tbis = lines[9][lines[9].find(':') + 2:50]
sql_zab = lines[10][lines[10].find(':') + 2:50]
sql_zbis = lines[11][lines[11].find(':') + 2:50]
sql_status = lines[12][lines[12].find(':') + 2:50]
sql_text = "UPDATE 'berechtigte' SET `name` = '" + sql_name + "', `berechtigter` = '" + sql_berechtigter + "', `anrede` = '" + sql_anrede + "', 'nummer' = '" + sql_nummer + \
"', 'gruppe' = '" + sql_gruppe + "', 'sms' = '" + sql_sms + "', 'tab' = '" + sql_tab + "', 'tbis' = '" + sql_tbis + "', 'zab' = '" + sql_zab + \
"', 'zbis' = '" + sql_zbis + "', 'status' = '" + sql_status + "' WHERE id = '" + str(sql_id) + "'"
dbcursor.execute(sql_text)
con.commit()
SMSsenden(1,1,"User ID: " + str(sql_id) + " geändert")
log_schreiben(1, '', 'User ändern', 'User Id: ' + str(sql_id) + ' geändert!')
print 'User geändert'
except:
SMSsenden(1,1,"User ID: " + str(sql_id) + " fehlgeschlagen")
log_schreiben(1, '', 'User ändern', 'User Id: ' + str(sql_id) + ' fehlgeschlagen!')
print ('User ändern', 'User Id: ' + str(sql_id) + ' fehlgeschlagen')
#User löschen:
elif sms_nummer == Pickle_Setup["Meine Nummer"] and u"User löschen ID:" in sms_text:
lines = sms_text.split("\n")
try:
sql_id = lines[0][lines[0].find(':') + 2:50]
print sql_id
dbcursor.execute("DELETE FROM 'berechtigte' WHERE id = " + sql_id)
con.commit()
SMSsenden(1,1,"User ID: " + str(sql_id) + " gelöscht!")
log_schreiben(1, '', 'User löschen', 'User Id: ' + str(sql_id) + ' gelöscht!')
print "User Löschen ID: " + str(sql_id)
except:
SMSsenden(1,1,"User ID: " + str(sql_id) + " gelöscht!")
log_schreiben(1, '', 'User löschen', 'User Id: ' + str(sql_id) + ' fehlgeschlagen!')
print ("User Löschen ID: " + str(sql_id) + " fehlgeschlagen!")
#Rund SMS an Gruppe:
elif sms_nummer == Pickle_Setup["Meine Nummer"] and u"Rund SMS an Gruppe" in sms_text:
lines = sms_text.split("\n")
sql_gruppe = lines[0][lines[0].find(':') + 2:50]
sms_text_roh = sms_text[sms_text.find('\n')+1:len(sms_text)-1]
try:
sql_id = sms_text[sms_text.find(':')+2:sms_text.find(':')+4]
dbcursor.execute("SELECT * FROM `berechtigte` where gruppe = " + str(sql_gruppe) + " and sms = 1 and status = 'aktiv'")
for datensatz in dbcursor:
sms_berechtigter = datensatz[2]
sms_anrede = datensatz[3]
sm_nummer = datensatz[4]
SMSText = sms_anrede + '\n\n' + sms_text_roh
SMSText = SMSText.encode('utf-8')
SMSsenden(3,sql_gruppe ,SMSText)
log_schreiben(1, '', 'Rund SMS an Gruppe', 'SMS an: ' + sms_berechtigter + ' geschickt')
print ('Rund SMS verschickt')
except:
log_schreiben(1, '', 'Rund SMS an Gruppe,', 'fehlgeschlagen!')
SMSsenden(1,1,'Rund SMS schicken gescheitert')
print ('Rund SMS verschicken gescheitert')
#Tor via SMS oeffnen
elif sms_nummer and sms_text.find(suchtext) <0:
dbcursor.execute("SELECT * FROM `berechtigte` where nummer = '" + sms_nummer + "'")
for datensatz in dbcursor:
print ('Tor geöffnet. Tor Status: \"' + Tor_Status + '\"')
if str(datensatz[11]) == 'aktiv' and Tor_Status == "Tor standard":
pifacedigital.output_pins[0].turn_on()
time.sleep(1)
pifacedigital.output_pins[0].turn_off()
log_schreiben(str(datensatz[0]), '', 'Tor öffnen', 'Tor geöffnet')
SMSsenden(1,1,'Tor wurde von: ' + str(datensatz[2]) + ' am: '+ time.strftime("%d.%m.%Y %H:%M:%S") + " geöffnet! ")
elif 1 :
if str(datensatz[11]) == 'gesperrt':
log_schreiben(str(datensatz[0]), '', 'Tor öffnen', 'Tor gesperrt, öffnen verweigert')
SMSsenden(1,1,'Tor öffnen wurde: ' + str(datensatz[2]) + ' am: '+ time.strftime("%d.%m.%Y %H:%M:%S") + " verweigert! \nGrund: User gesperrt. ")
elif Tor_Status == "Tor sperren":
log_schreiben(str(datensatz[0]), '', 'Tor öffnen', 'User gesperrt, öffnen verweigert')
SMSsenden(1,1,'Tor öffnen wurde: ' + str(datensatz[2]) + ' am: '+ time.strftime("%d.%m.%Y %H:%M:%S") + " verweigert! \nGrund: Tor gesperrt. ")
time.sleep(1)
#Loop Ende
Alles anzeigen