Newer
Older
bathroom-plugin / pi / 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 urllib2

import traceback

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

id = int(sys.argv[1])

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:
            response = urllib2.urlopen("https://www.mhack.io/bathroom/status-update.php?door_id=" + str(id) + "&status=" + ("1" if status else "0"))

            enc_verify = base64.b64decode(response.read())

            verify = rsa.decrypt(enc_verify)

            print " verifying with: " + verify

            response = urllib2.urlopen("https://www.mhack.io/bathroom/verify-status.php?door_id=" + str(id) + "&verify=" + verify)
            print " returned: " + response.read()
        except Exception as e:
            print str(e)
            traceback.print_tb(sys.exc_info()[2])

        sleep(1)