APPKEY = "******"

"""
Explanation: Vereisten
Voor deze oefening heb je een (gratis) account nodig bij http://www.realtime.co/; als je dit account aanmaakt en een "Realtime Messaging Free" subscription start, kan je daarvan de "Application Key" in de onderstaande variabele opslaan. Deze key wordt verder gebruikt bij het opzetten van de communicatie.
Bovendien heb je tijdens het uitvoeren van deze notebook een verbinding nodig met het internet.
End of explanation
"""


import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)

"""
Explanation: <img src="Doorbell01.png" height="300" />
We willen de software bibliotheek "RPi.GPIO" gebruiken in onze code
En voor de GPIO pinnetjes zullen we zoals gewoonlijk de BCM nummering gebruiken (cfr nummers op de behuizing)
End of explanation
"""


import ortc
oc = ortc.OrtcClient()
oc.cluster_url = "http://ortc-developers.realtime.co/server/2.1"

# Verbinding maken met het gedeelde account
oc.connect(APPKEY)

"""
Explanation: ortc is een bibliotheek die een verbinding maakt met een realtime communicatiesysteem in de cloud (http://www.realtime.co/)
Dit is te vergelijken met e-mail, Twitter of Facebook Messenger, maar dan voor computers.
"mWvTfc" is de login/paswoord/toegangscode voor het account dat we allemaal tegelijk zullen gebruiken.
End of explanation
"""


person_pins = {
    17: "Maleficent",
    27: "BozeWolf",
}

"""
Explanation: Met person_pins maken we een lijstje (eigenlijk een "dictionary" oftewel woordenboek) van GPIO pinnen met de bijhorende namen van de personen zodat de computer kan onthouden aan wie elk van de pinnen (en aangesloten deurbellen) toebehoort.
End of explanation
"""


print(person_pins[17])

"""
Explanation: We zullen eens kijken of dit werkt; person_pins[17] moet de waarde geven die hoort bij nummer 17
End of explanation
"""


def send_message(pin):
    oc.send("deurbel", person_pins[pin])

"""
Explanation: send_message() is een functie met een parameter (die we "pin" hebben genoemd). Via deze parameter kunnen we de uitkomst beïnvloeden; als "pin" gelijk is aan 17, dan zal een "deurbel" boodschap doorgestuurd worden met de naam "Maleficent".
End of explanation
"""


for pin in person_pins:
    GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
    GPIO.add_event_detect(pin, GPIO.FALLING, send_message, 200)

"""
Explanation: Laatste stukje van de setup: nu gaan we voor elk van de pin waarden in person_pins:
  1. de pin instellen als input
  2. er een event aan koppelen (als de waarde van de pin van 1 op 0 springt -GPIO.FALLING-, moet send_message uitgevoerd worden)
End of explanation
"""


for pin in person_pins:
    GPIO.remove_event_detect(pin)

GPIO.cleanup()

"""
Explanation: Tijd om te testen: druk maar op de knop en kijk of je boodschap in de cloud verschijnt!
Volg de volgende procedure om dit te checken:

log in op de Realtime website
klik op je naam om naar je account te gaan
klik op Subscriptions (het winkelkarretje links bovenaan)
open de "Realtime Messaging Free" subscription en klik op "Console"
voer onder Channel: "deurbel" in en klik op [Subscribe]
nu kan je een knop indrukken en zie je de boodschap verschijnen

En weer opkuisen:
End of explanation
"""


