Intendation; foodoord_oben - right API™

This commit is contained in:
Bandie 2021-11-13 14:27:33 +01:00
parent 72b2276603
commit ce451daef1
Signed by: Bandie
GPG Key ID: 843D7FA93BA46312
2 changed files with 137 additions and 132 deletions

View File

@ -1,4 +1,5 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim: ts=2 sw=2 et
import os import os
import stat import stat
@ -14,8 +15,9 @@ from ConfigParser import SafeConfigParser
parser = SafeConfigParser() parser = SafeConfigParser()
parser.read('/etc/foodoord.conf') parser.read('/etc/foodoord.conf')
url = parser.get('door_firstlevel', 'status_url') doorapi = parser.get('doorstatus', 'status_url')
old_api = parser.get('door_firstlevel_old', 'status_url') consumerkey = parser.get('doorstatus', 'key')
consumersecret = parser.get('doorstatus', 'secret')
#Definitions for output #Definitions for output
@ -33,108 +35,110 @@ RED=1
GREEN=2 GREEN=2
ORANGE=3 ORANGE=3
def update_api(locked):
try:
os.system("/usr/bin/curl -XPOST --header 'Content-Type: application/json' --data '{ \"consumer_key\": \"" + consumerkey + "\", \"consumer_secret\": \"" + consumersecret + "\", \"aerie\": " + str(locked).lower() + " }' '" + doorapi + "' ")
except:
pass
if __name__ == "__main__": if __name__ == "__main__":
def doorbell(event):
if (STATUS):
pifacedigital.relays[RELAYS_UNLOCK].toggle()
time.sleep(2)
pifacedigital.relays[RELAYS_UNLOCK].toggle()
#print 'got doorbell'
def doorbell(event): def close_button(event):
if (STATUS): global STATUS
pifacedigital.relays[RELAYS_UNLOCK].toggle() STATUS = False
time.sleep(2) try:
pifacedigital.relays[RELAYS_UNLOCK].toggle() update_api(True)
#print 'got doorbell' except:
pass
def close_button(event): set_led(RED)
global STATUS
STATUS = False
try:
urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2)
urllib2.urlopen(old_api+'&status=closed', timeout=2)
except:
pass
set_led(RED)
listener = pifacedigitalio.InputEventListener() listener = pifacedigitalio.InputEventListener()
listener.register(0, pifacedigitalio.IODIR_RISING_EDGE, doorbell, settle_time=10) listener.register(0, pifacedigitalio.IODIR_RISING_EDGE, doorbell, settle_time=10)
listener.register(1, pifacedigitalio.IODIR_RISING_EDGE, close_button, settle_time=5) listener.register(1, pifacedigitalio.IODIR_RISING_EDGE, close_button, settle_time=5)
listener.activate() listener.activate()
def signal_handler(signal, frame): def signal_handler(signal, frame):
listener.deactivate() listener.deactivate()
os.remove("/var/run/foodoord.pipe") os.remove("/var/run/foodoord.pipe")
try: try:
urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2) update_api(True)
urllib2.urlopen(old_api+'&status=closed', timeout=2) except:
except: pass
pass
set_led(RED)
sys.exit(0)
def set_led(color): set_led(RED)
if (color==RED): sys.exit(0)
pifacedigital.leds[LED_RED].turn_on()
pifacedigital.leds[LED_GREEN].turn_off()
elif (color==GREEN): def set_led(color):
pifacedigital.leds[LED_GREEN].turn_on() if (color==RED):
pifacedigital.leds[LED_RED].turn_off() pifacedigital.leds[LED_RED].turn_on()
pifacedigital.leds[LED_GREEN].turn_off()
elif (color==ORANGE): elif (color==GREEN):
pifacedigital.leds[LED_RED].turn_on() pifacedigital.leds[LED_GREEN].turn_on()
pifacedigital.leds[LED_GREEN].turn_on() pifacedigital.leds[LED_RED].turn_off()
pifacedigital = pifacedigitalio.PiFaceDigital() elif (color==ORANGE):
signal.signal(signal.SIGTERM, signal_handler) pifacedigital.leds[LED_RED].turn_on()
pifacedigital.leds[LED_GREEN].turn_on()
#Startsettings pifacedigital = pifacedigitalio.PiFaceDigital()
STATUS = False signal.signal(signal.SIGTERM, signal_handler)
pifacedigital.leds[LED_RED].turn_on()
#Setting up FiFo to get sshd-output #Startsettings
try: STATUS = False
os.mkfifo("/var/run/foodoord.pipe") pifacedigital.leds[LED_RED].turn_on()
os.chown("/var/run/foodoord.pipe", -1, grp.getgrnam('foodoor')[2])
os.chmod("/var/run/foodoord.pipe", stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP)
except OSError:
pass
with open("/var/run/foodoord.pipe", "r") as ssh_input: #Setting up FiFo to get sshd-output
while 1: try:
#Read sshd-output from pipe os.mkfifo("/var/run/foodoord.pipe")
Pipe = ssh_input.readline()[:-1] os.chown("/var/run/foodoord.pipe", -1, grp.getgrnam('foodoor')[2])
os.chmod("/var/run/foodoord.pipe", stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP)
if (Pipe == "close" and STATUS): except OSError:
pifacedigital.relays[RELAYS_LOCK].toggle() pass
time.sleep(1)
pifacedigital.relays[RELAYS_LOCK].toggle()
STATUS = False
try: with open("/var/run/foodoord.pipe", "r") as ssh_input:
urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2) while 1:
urllib2.urlopen(old_api+'&status=closed', timeout=2) #Read sshd-output from pipe
except: Pipe = ssh_input.readline()[:-1]
pass
set_led(RED)
elif (Pipe == "open"): if (Pipe == "close" and STATUS):
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_LOCK].toggle()
time.sleep(2) time.sleep(1)
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_LOCK].toggle()
STATUS = False
if (STATUS==False): try:
update_api(True)
try: except:
urllib2.urlopen(url+'&door=aerie&locked=0', timeout=2) pass
urllib2.urlopen(old_api+'&status=open', timeout=2)
except:
pass
STATUS = True set_led(RED)
set_led(GREEN) elif (Pipe == "open"):
time.sleep(0.1) pifacedigital.relays[RELAYS_UNLOCK].toggle()
time.sleep(2)
pifacedigital.relays[RELAYS_UNLOCK].toggle()
if (STATUS==False):
try:
update_api(False)
except:
pass
STATUS = True
set_led(GREEN)
time.sleep(0.1)

View File

@ -1,4 +1,5 @@
#! /usr/bin/python #! /usr/bin/python
# vim: ts=2 sw=2 et
import os import os
import stat import stat
@ -37,61 +38,61 @@ ORANGE=3
def write_state(state): def write_state(state):
try: try:
handle = open("/tmp/door_state", "w") handle = open("/tmp/door_state", "w")
handle.write(state) handle.write(state)
handle.close() handle.close()
except: except:
pass pass
def update_api(locked): def update_api(locked):
try: try:
os.system("/usr/bin/curl -XPOST --header 'Content-Type: application/json' --data '{ \"consumer_key\": \"" + consumerkey + "\", \"consumer_secret\": \"" + consumersecret + "\", \"cellar\": " + str(locked).lower() + " }' '" + doorapi + "' ") os.system("/usr/bin/curl -XPOST --header 'Content-Type: application/json' --data '{ \"consumer_key\": \"" + consumerkey + "\", \"consumer_secret\": \"" + consumersecret + "\", \"cellar\": " + str(locked).lower() + " }' '" + doorapi + "' ")
except: except:
pass pass
if __name__ == "__main__": if __name__ == "__main__":
#Startsettings #Startsettings
STATUS=False STATUS=False
gpio.setmode(gpio.BCM) gpio.setmode(gpio.BCM)
gpio.setup(PIN_OPEN, gpio.OUT) gpio.setup(PIN_OPEN, gpio.OUT)
gpio.setup(PIN_CLOSE, gpio.OUT) gpio.setup(PIN_CLOSE, gpio.OUT)
#Setting up FiFo to get sshd-output #Setting up FiFo to get sshd-output
try: try:
os.mkfifo("/var/run/foodoord.pipe") os.mkfifo("/var/run/foodoord.pipe")
os.chown("/var/run/foodoord.pipe", -1, grp.getgrnam('foodoor')[2]) os.chown("/var/run/foodoord.pipe", -1, grp.getgrnam('foodoor')[2])
os.chmod("/var/run/foodoord.pipe", stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP) os.chmod("/var/run/foodoord.pipe", stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IWGRP)
except OSError: except OSError:
pass pass
with open("/var/run/foodoord.pipe", "r") as ssh_input: with open("/var/run/foodoord.pipe", "r") as ssh_input:
while 1: while 1:
#Read sshd-output from pipe #Read sshd-output from pipe
Pipe = ssh_input.readline()[:-1] Pipe = ssh_input.readline()[:-1]
if (Pipe == "close"): if (Pipe == "close"):
gpio.output(PIN_CLOSE,1) gpio.output(PIN_CLOSE,1)
time.sleep(1) time.sleep(1)
gpio.output(PIN_CLOSE,0) gpio.output(PIN_CLOSE,0)
write_state("closed") write_state("closed")
update_api(True) update_api(True)
elif (Pipe == "open"): elif (Pipe == "open"):
#Locking #Locking
gpio.output(PIN_OPEN,1) gpio.output(PIN_OPEN,1)
time.sleep(1) time.sleep(1)
gpio.output(PIN_OPEN,0) gpio.output(PIN_OPEN,0)
#Save State
write_state("open")
#Status Update
update_api(False)
#Save State time.sleep(0.2)
write_state("open")
#Status Update
update_api(False)
time.sleep(0.2)