So ich habe es nun am laufen. Die Kommunikation läuft über eine Datei (comm.ini)
Das ist der Code der eigentlichen Alarmanlage:
Code: Select all
import smsgateway, emailsenden, sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM) # BCM - Modus verwenden
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) # GPIO 4 als Eingang setzen
GPIO.setup(0, GPIO.OUT)
aktiv = False # Bei Start Alarmanlage deaktiviert
print aktiv
while True:
while aktiv != True: # Solange Alarmanlage nicht aktiv
File = open('comm.ini', 'w+')
msg = File.read()
File.write('')
File.close()
if msg=='on': # Warten auf Aktivierung
aktiv = True
print aktiv
if msg=='status':
File = open('comm.ini', 'w')
if aktiv:
status = 'Aktiv'
else:
status = 'Inaktiv'
File.write(status)
File.close
while aktiv:
GPIO.output(0, True)
if False:#GPIO.input(4) != 0: # Wenn Tuer geoeffnet wird
#smsgateway.sms('Tuer geoeffnet')
emailsenden.send('Tuer geoeffnet')
aktiv = False
File = open('comm.ini', 'w+')
msg = File.read()
File.write('')
File.close()
if msg=='off': # Warten auf Deaktivierung
aktiv = False
print aktiv
if msg=='status':
File = open('comm.ini', 'w')
if aktiv:
status = 'Aktiv'
else:
status = 'Inaktiv'
File.write(status)
File.close
Und hier der Code des Websocket-Servers:
Code: Select all
import sys, time
from twisted.internet import reactor
from twisted.python import log
from autobahn.websocket import WebSocketServerFactory, \
WebSocketServerProtocol, \
listenWS
class EchoServerProtocol(WebSocketServerProtocol):
def onMessage(self, msg, binary):
print msg
if msg == "on":
file = open('comm.ini', 'w+')
file.write('on')
file.close()
self.sendMessage('AN', binary)
if msg == "off":
file = open('comm.ini', 'w+')
file.write('off')
file.close()
self.sendMessage('AUS', binary)
if msg == "status":
file = open('comm.ini', 'w+')
file.write('status')
file.close()
time.sleep(2)
file = open('comm.ini', 'r')
bmsg = file.read()
file.close()
file = open('comm.ini', 'w')
file.write('')
file.close()
self.sendMessage(bmsg, binary)
print 'Status', bmsg
if __name__ == '__main__':
#log.startLogging(sys.stdout)
factory = WebSocketServerFactory("ws://192.168.0.191:9123", debug = False)
factory.protocol = EchoServerProtocol
factory.setProtocolOptions(allowHixie76 = True)
listenWS(factory)
reactor.run()
Vielleicht hat jemand einen Tip wie ich das ganze besser lösen kann. Habe das Gefühl, dass das Alarmanlagenskript oft die Datei blockiert.