foodoor ist oben!

This commit is contained in:
Bandie 2021-11-07 19:46:13 +01:00
parent a104fbf913
commit b3e57e3b57
2 changed files with 22 additions and 189 deletions

140
foodoord
View File

@ -1,140 +0,0 @@
#!/usr/bin/env python2
import os
import stat
import time
import pifacedigitalio
import urllib2
import signal
import sys
import grp
from ConfigParser import SafeConfigParser
#Read config
parser = SafeConfigParser()
parser.read('/etc/foodoord.conf')
url = parser.get('door_firstlevel', 'status_url')
old_api = parser.get('door_firstlevel_old', 'status_url')
#Definitions for output
LED_RED=6
LED_GREEN=7
RELAYS_LOCK=0
RELAYS_UNLOCK=1
#Definitions for input
DOOR_BELL=0
REED_RELAYS=1 #not implementet yet
#Definitions for LEDcolor
RED=1
GREEN=2
ORANGE=3
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 close_button(event):
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.register(0, pifacedigitalio.IODIR_RISING_EDGE, doorbell, settle_time=10)
listener.register(1, pifacedigitalio.IODIR_RISING_EDGE, close_button, settle_time=5)
listener.activate()
def signal_handler(signal, frame):
listener.deactivate()
os.remove("/var/run/foodoord.pipe")
try:
urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2)
urllib2.urlopen(old_api+'&status=closed', timeout=2)
except:
pass
set_led(RED)
sys.exit(0)
def set_led(color):
if (color==RED):
pifacedigital.leds[LED_RED].turn_on()
pifacedigital.leds[LED_GREEN].turn_off()
elif (color==GREEN):
pifacedigital.leds[LED_GREEN].turn_on()
pifacedigital.leds[LED_RED].turn_off()
elif (color==ORANGE):
pifacedigital.leds[LED_RED].turn_on()
pifacedigital.leds[LED_GREEN].turn_on()
pifacedigital = pifacedigitalio.PiFaceDigital()
signal.signal(signal.SIGTERM, signal_handler)
#Startsettings
STATUS = False
pifacedigital.leds[LED_RED].turn_on()
#Setting up FiFo to get sshd-output
try:
os.mkfifo("/var/run/foodoord.pipe")
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:
while 1:
#Read sshd-output from pipe
Pipe = ssh_input.readline()[:-1]
if (Pipe == "close" and STATUS):
pifacedigital.relays[RELAYS_LOCK].toggle()
time.sleep(1)
pifacedigital.relays[RELAYS_LOCK].toggle()
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)
elif (Pipe == "open"):
pifacedigital.relays[RELAYS_UNLOCK].toggle()
time.sleep(2)
pifacedigital.relays[RELAYS_UNLOCK].toggle()
if (STATUS==False):
try:
urllib2.urlopen(url+'&door=aerie&locked=0', timeout=2)
urllib2.urlopen(old_api+'&status=open', timeout=2)
except:
pass
STATUS = True
set_led(GREEN)
time.sleep(0.1)

View File

@ -1,10 +1,10 @@
#! /usr/bin/python #!/usr/bin/env python2
import os import os
import stat import stat
import time import time
import pifacedigitalio import pifacedigitalio
import requests import urllib2
import signal import signal
import sys import sys
import grp import grp
@ -14,9 +14,9 @@ from ConfigParser import SafeConfigParser
parser = SafeConfigParser() parser = SafeConfigParser()
parser.read('/etc/foodoord.conf') parser.read('/etc/foodoord.conf')
doorapi = parser.get('doorstatus', 'status_url') url = parser.get('door_firstlevel', 'status_url')
consumerkey = parser.get('doorstatus', 'key') old_api = parser.get('door_firstlevel_old', 'status_url')
consumersecret = parser.get('doorstatus', 'secret')
#Definitions for output #Definitions for output
LED_RED=6 LED_RED=6
@ -40,15 +40,18 @@ if __name__ == "__main__":
def doorbell(event): def doorbell(event):
if (STATUS): if (STATUS):
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_UNLOCK].toggle()
time.sleep(1.5) time.sleep(2)
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_UNLOCK].toggle()
#print 'got doorbell'
def close_button(event): def close_button(event):
global STATUS global STATUS
STATUS = False STATUS = False
write_state("closed") try:
urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2)
update_api(True) urllib2.urlopen(old_api+'&status=closed', timeout=2)
except:
pass
set_led(RED) set_led(RED)
@ -62,8 +65,11 @@ if __name__ == "__main__":
listener.deactivate() listener.deactivate()
os.remove("/var/run/foodoord.pipe") os.remove("/var/run/foodoord.pipe")
write_state("closed") try:
update_api(True) urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2)
urllib2.urlopen(old_api+'&status=closed', timeout=2)
except:
pass
set_led(RED) set_led(RED)
sys.exit(0) sys.exit(0)
@ -83,28 +89,6 @@ if __name__ == "__main__":
pifacedigital = pifacedigitalio.PiFaceDigital() pifacedigital = pifacedigitalio.PiFaceDigital()
signal.signal(signal.SIGTERM, signal_handler) signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
def write_state(state):
try:
handle = open("/tmp/door_state", "w")
handle.write(state)
handle.close()
except:
pass
def update_api(locked):
#if locked:
#
# try:
# os.system("/usr/bin/mosquitto_pub -h mqtt.chaospott.de -t foobar/aerie/licht -m 'zentral-aus'")
# except:
# pass
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
#Startsettings #Startsettings
STATUS = False STATUS = False
@ -129,15 +113,9 @@ if __name__ == "__main__":
pifacedigital.relays[RELAYS_LOCK].toggle() pifacedigital.relays[RELAYS_LOCK].toggle()
STATUS = False STATUS = False
write_state("closed")
update_api(True)
try: try:
r = requests.get(url+'&door=aerie&locked=1', timeout=2) urllib2.urlopen(url+'&door=aerie&locked=1', timeout=2)
#print (r.status_code) urllib2.urlopen(old_api+'&status=closed', timeout=2)
r = requests.get(old_api+'&status=closed', timeout=2)
#print (r.status_code)
except: except:
pass pass
@ -145,23 +123,18 @@ if __name__ == "__main__":
elif (Pipe == "open"): elif (Pipe == "open"):
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_UNLOCK].toggle()
time.sleep(1.5) time.sleep(2)
pifacedigital.relays[RELAYS_UNLOCK].toggle() pifacedigital.relays[RELAYS_UNLOCK].toggle()
if (STATUS==False): if (STATUS==False):
try: try:
r = requests.get(url+"&door=aerie&locked=0", timeout=2) urllib2.urlopen(url+'&door=aerie&locked=0', timeout=2)
#print (r.status_code) urllib2.urlopen(old_api+'&status=open', timeout=2)
r = requests.get(old_api+'&status=open', timeout=2)
#print (r.status_code)
except: except:
pass pass
update_api(False)
write_state("open")
STATUS = True STATUS = True
set_led(GREEN) set_led(GREEN)
time.sleep(0.1) time.sleep(0.1)