Newer
Older
bathroom-plugin / pi / monitor.py
@Mark Mark on 19 Oct 2019 1 KB Fixes for monitor.py
from time import sleep
import gpiozero as GP
from signal import pause

import base64
import sys
from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_OAEP

import urllib
import urllib2

import traceback

if len(sys.argv) < 2:
    print "No id"
    exit(1)

if len(sys.argv) < 3:
    print "No url"
    exit(1)

ext = ""
if len(sys.argv) > 3:
    ext = sys.argv[3]

id = int(sys.argv[1])
url_base = sys.argv[2]

l = GP.LED(18)

b = GP.Button(16)

l.source = b

status = False

private_key = RSA.import_key(open("private.pem").read())
rsa = PKCS1_OAEP.new(private_key);

while True:
    now_pressed = b.is_pressed
    if now_pressed == status:
        if now_pressed:
            b.wait_for_release(5)
        else:
            b.wait_for_press(5)
        now_pressed = b.is_pressed
    if now_pressed != status:
        status = now_pressed

        print "status now: " + str(status)

        try:
            url = url_base + "status-update" + ext + "?door_id=" + str(id) + "&status=" + ("1" if status else "0")
            print " open " + url
            response = urllib2.urlopen(url)

            responseStr = response.read()
            print "Response: " + responseStr
            enc_verify = base64.b64decode(responseStr)

            verify = rsa.decrypt(enc_verify)

            if ext == "":
                verify = base64.b64encode(verify)

            print " verifying with: " + verify

            url = url_base + "verify-status" + ext + "?door_id=" + str(id) + "&verify=" + urllib.quote(verify)
            print " open " + url
            response = urllib2.urlopen(url)
            print " returned: " + response.read()
        except Exception as e:
            print str(e)
            traceback.print_tb(sys.exc_info()[2])

        sleep(1)