Skip to content

Hoe de bot een bericht laten sturen wanneer er beweging wordt gedetecteerd

Cederic Nijssen edited this page Apr 22, 2021 · 2 revisions

Hoe de bot een bericht laten sturen wanneer er beweging wordt gedetecteerd?

De bot moet een bericht kunnen sturen wanneer er beweging wordt gedetecteerd door de bewegingssensor. Dit betekend dat er deze keer geen commando moet worden aangemaakt. Want het is deze keer niet een lid op de server maar de bot zelf die bepaalt wanneer er een bericht gestuurd moet worden. Om beweging te kunnen detecteren zal er gebruikt gemaakt worden van de PIR bewegingssensor.

De eerste stap is het vastzetten van het channel ID. Dit is het ID van het serverkanaal waar de bot actief is. Hoe je aan deze ID geraakt is terug te vinden in de main readme op Github.

CHANNEL_ID = PlaatsChannel_IdHier

Het volgende stukje code is het declareren van de bewegingssensor. Merk op dat de sensor op pin 26 is de declareert (pin 26 is waar de sensor op het PCB aangesloten is):

#PIR declareren
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
pir_sensor = 24 #GPIO voor pir sensor
GPIO.setup(pir_sensor, GPIO.IN, GPIO.PUD_DOWN) #voor ruis weg te werken
current_state = 0

De derde stap is het stukje code schrijven dat een bericht stuurt naar de server bij beweging.

#Stuurt "motion detected" bij beweging
async def motionDetection():
    await bot.wait_until_ready()
    channel = bot.get_channel(CHANNEL_ID)
    msg_sent = False

    while True:
        try:
            time.sleep(0.1)
            current_state = GPIO.input(pir_sensor)
            if current_state == 1:
                if not msg_sent:
                    await channel.send('Motion Detected')
                    msg_sent = True
                else:
                    msg_sent = False
                time.sleep(4) # wait 4 seconds for PIR to reset.
        except KeyboardInterrupt:
            GPIO.cleanup()
        await asyncio.sleep(1)

De laatste regel die moet toegevoegd worden is een lijn code dat er voor zorgt dat de bovenstaande code blijft herhalen. Deze regel komt helemaal onderaan de code. Dit is belangrijk want je wilt natuurlijk dat je code blijft werken totdat de bot wordt uitgezet. Moest deze lijn er niet staan zou de code één keer doorlopen worden bij opstart en dan nooit meer, is er dan beweging voor de sensor zal dit niet gedetecteerd worden want die code is immers als afgelopen.

bot.loop.create_task(motionDetection())

📙 Uitbreiding

  • Telkens proberen te achterhalen wat je channel ID is, kan vervelend zijn. Daarom kun je eens proberen een functie te zoeken die zelf het channel ID zoekt a.d.h.v. de naam van het channel waar de bot actief is.