3 Commits

Author SHA1 Message Date
aadce7fb1a Raspian 11 update; python3 2021-11-13 17:23:46 +01:00
5d475701e6 Update to Raspbian 11; using python3 2021-11-13 16:14:15 +01:00
ce451daef1 Intendation; foodoord_oben - right API™ 2021-11-13 14:27:33 +01:00
2 changed files with 143 additions and 140 deletions

View File

@ -1,21 +1,22 @@
#!/usr/bin/env python2 #!/usr/bin/env python3
# vim: ts=2 sw=2 et
import os import os
import stat import stat
import time import time
import pifacedigitalio import pifacedigitalio
import urllib2
import signal import signal
import sys import sys
import grp import grp
from ConfigParser import SafeConfigParser from configparser import ConfigParser
#Read config #Read config
parser = SafeConfigParser() parser = ConfigParser()
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 +34,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,17 +1,17 @@
#! /usr/bin/python #! /usr/bin/python3
# vim: ts=2 sw=2 et
import os import os
import stat import stat
import time import time
import urllib2
import signal import signal
import sys import sys
import RPi.GPIO as gpio import RPi.GPIO as gpio
import grp import grp
from ConfigParser import SafeConfigParser from configparser import ConfigParser
#Read config #Read config
parser = SafeConfigParser() parser = ConfigParser()
parser.read('/etc/foodoord.conf') parser.read('/etc/foodoord.conf')
doorapi = parser.get('doorstatus', 'status_url') doorapi = parser.get('doorstatus', 'status_url')
@ -37,61 +37,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)