Esempio n. 1
0
def lockDoor():
    logger.debug("Lock the door")
    try:
        r = requests.post(config.get("danalock", "openhab_lock_item"), 'ON')
        logger.debug(str(r))
    except:
        logger.error("Danalock not available")
        sendMail("Danalock not available!: " + str(config.get("danalock", "openhab_lock_item")))
Esempio n. 2
0
def openDoor():
    # open the door
    logger.debug("Opening the door")
    payload = {"command": "OFF"}
    try:
        r = requests.post(config.get("danalock", "openhab_lock_item"), 'OFF')
        logger.debug(str(r))
    except:
        logger.error("Danalock not available")
        sendMail("Danalock not available!: " + str(config.get("danalock", "openhab_lock_item")))
Esempio n. 3
0
def sendMail(content, files=None):
    if str(config.get("mail", "smpt_use")) != "true":
        return

    s = smtplib.SMTP(host=config.get("mail", "smpt_host"), port=config.get("mail", "smtp_port"))
    s.starttls()
    logger.debug("Log in to " + config.get("mail", "smpt_host") + " for sending e-mail")
    try:
        s.login(config.get("mail", "smtp_user"), config.get("mail", "smtp_pass"))
    except smtplib.SMTPAuthenticationError:
        logger.error("Error in Login to SMTP Server")
        return

    msg = MIMEMultipart()  # create a message
    msg['From'] = config.get("mail", "mail_from")
    msg['To'] = config.get("mail", "mail_receiver")
    msg['Subject'] = config.get("mail", "mail_subject")

    # add in the message body
    msg.attach(MIMEText(content, 'plain'))
    for f in files or []:
        with open(f, "rb") as fil:
            part = MIMEApplication(
                fil.read(),
                Name=basename(f)
            )
        # After the file is closed
        logger.debug("Adding file to e-mail " + basename(f))
        part['Content-Disposition'] = 'attachment; filename="%s"' % basename(f)
        msg.attach(part)

    # send the message via the server set up earlier.
    s.send_message(msg)
    del msg
Esempio n. 4
0
def downloadImage():
    # request picture from API and save it
    door_bird_url = config.get("doorbird", "door_bird_url")
    currentdate = datetime.datetime.now().timestamp()
    filepath = config.get("data", "data_path_unknown_faces")
    filename = filepath + str(currentdate) + '.jpg'
    logger.debug("sending http request to: " + door_bird_url +
                 " and saving to " + filename)

    try:
        urllib.request.URLopener().retrieve(door_bird_url, filename)
        return filename
    except:
        sendMail("Doorbird not available!: " + str(door_bird_url))
        logger.debug("Doorbird not available: ")
        return "ERROR"
Esempio n. 5
0
def waitForEventAndDownloadImage():
    # bind socket
    udp_address = config.get("doorbird", "udp_ip_address")
    udp_port = config.get("doorbird", "udp_port")
    server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_sock.bind((udp_address, int(udp_port)))
    server_sock.settimeout(int(config.get("doorbird", "keep_alive_timeout")))
    logger.info("UDP service started on address: {} and port: {}".format(
        udp_address, udp_port))
    old_message = ""
    old_event = ""

    while True:

        try:
            data = server_sock.recvfrom(1024)
        except:
            # Timeout: No Keep Alive Packets
            sendMail(
                "No KeepAlive Pakcets from Doorbird! Check your Connection")
            logger.error(
                "No KeepAlive Pakcets from Doorbird! Check your Connection")
            continue

        try:
            #read received udp data
            message = data[0].decode()

            if message != old_message:
                logger.debug("Keep-alive msg: {}".format(message))

            old_message = message

        except:
            hex_bytes = binascii.hexlify(data[0])
            event = hex_bytes.decode("ascii")

            if event != old_event:
                logger.info("Message: An event has occured!")
                old_event = event
                return downloadImage()
            old_event = event
Esempio n. 6
0
 def test_qr_unregister(self):
     try:
         image = "test_unregister.png"
         qr_tuple = findQR(image)
         qr_detected = qr_tuple[0]
         qr_text = qr_tuple[1]
         qr_unregister = Configurator.get("machine_learning",
                                          "qr_unregister_key")
         self.assertEqual(qr_text, qr_unregister)
     except:
         self.fail("Error occured for deregistration code!")
Esempio n. 7
0
def main():
    # Login for Events
    logger.info("FaceID by HFU v" + version)
    failed_access = 0
    # init
    ml = FaceML()

    # read qr-codes for registration and deregistration from config
    qr_register = Configurator.get("machine_learning", "qr_register_key")
    qr_unregister = Configurator.get("machine_learning", "qr_unregister_key")

    while True:
        # wait for doorbird event
        image = waitForEventAndDownloadImage()

        # get QR-code from image
        qrtuple = findQR(image)

        if image == "ERROR":
            logger.error("No Image was downloaded from the Doorbird")
            continue

        if qrtuple[0]:
            # check if qr-code from image equals register code
            if qrtuple[1] == qr_register:
                # Danalock.open()
                logger.info('Register face')
                currentdate = datetime.datetime.now().timestamp()
                final = Configurator.get("data", "data_path_known_faces")
                file_path = final + str(currentdate) + '.jpg'

                # crop face from image
                if crop(image, file_path):
                    ml.load_new_face(file_path)
                    sendMail("Add Known Face", [image])
                    openDoor()
                    failed_access = 0
                else:
                    logger.error("No Face found in registering image " + image)
                # ml.load_known_faces()
            # check if qr-code from image equals deregistration code
            elif qrtuple[1] == qr_unregister:
                logger.info('Unregister face')
                results = ml.check_face(image)
                for result in results:
                    if result:
                        # find face in known faces and delete it
                        sendMail("Remove known face!", [result])
                        os.remove(result)
                        ml.load_known_faces()
                    else:
                        sendMail(
                            "Wanted to remove a known face, but could not find the regarding face!",
                            image)

        else:
            person_known = ml.check_face(image)
            if person_known:
                # open door
                logger.info("Open the door for authorised person...")
                openDoor()
                failed_access = 0
            else:
                # do not open door
                logger.info("No access!")
                failed_access += 1
                if failed_access > int(
                        Configurator.get("general",
                                         "max_num_of_failed_access")):
                    sendMail("5 failed attempts to access", image)
                    lockDoor()
Esempio n. 8
0
def run():
    if Configurator().run():
        Executor().execute()
Esempio n. 9
0
import src.config.GlobalSettings as GS
from src.config.Configurator import Configurator
from src.Executor import Executor


def run():
    if Configurator().run():
        Executor().execute()


if __name__ == "__main__":
    print("Runner Executed")
    GS.API_MODE = False
    GS.IS_PREDICTION = False
    try:
        Configurator().run_basics()
        GS.LOGGER.write_to_logger("Runner executed", starter=True)
        # Updating API Mode
        import argparse
        ap = argparse.ArgumentParser()
        ap.add_argument("-i", "--userID", required=False, help="userID")
        ap.add_argument("-m",
                        "--userModelSelection",
                        required=False,
                        help="userModelSelection")
        args = vars(ap.parse_args())
        USER_ID = args["userID"] if "userID" in args else None
        MODEL_SELECTED = args[
            "userModelSelection"] if "userModelSelection" in args else None
        if USER_ID and MODEL_SELECTED:
            GS.API_MODE = True
Esempio n. 10
0
import logging.handlers
from src.config.Configurator import Configurator as config

logger = logging.getLogger()
handler = logging.handlers.SysLogHandler(address='/dev/log')
formatter = logging.Formatter(
    '%(asctime)s %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
level = logging.getLevelName(config.get("general", "debug_level"))
logger.setLevel(level)
Esempio n. 11
0
 def __init__(self):
     config = Configurator.get("data", "data_path_known_faces")
     final = config
     # logger.warn(final)
     self.path = final
     self.load_known_faces()