.. note::

    Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

3. Sicherheitssystem über @IFTTT
============================================
Mit diesem Projekt erstellen wir ein Sicherheitsgerät, das mithilfe eines PIR-Sensors erkennt, wenn ein Einbrecher oder ein streunendes Tier in Ihr Zuhause eindringt. In diesem Fall erhalten Sie eine E-Mail-Benachrichtigung.

Webhook wird als grundlegendster Dienst verwendet.
Ein POST-Request wird von Raspberry Pi Pico W an den IFTTT-Dienst gesendet.
Mit IFTTT erstellen wir ein Applet, das den Webhook abfängt und eine E-Mail sendet.

**1. Erforderliche Komponenten**

Für dieses Projekt benötigen wir die folgenden Bauteile.

Ein Komplett-Set ist definitiv praktisch, hier ist der Link dazu:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Bezeichnung
        - ARTIKEL IM KIT
        - LINK
    *   - Kepler-Kit
        - 450+
        - |link_kepler_kit|

Sie können die Bauteile auch einzeln über die untenstehenden Links erwerben.

.. list-table::
    :widths: 5 20 5 20
    :header-rows: 1

    *   - SN
        - KOMPONENTE
        - ANZAHL
        - LINK

    *   - 1
        - :ref:`cpn_pico_w`
        - 1
        - |link_picow_buy|
    *   - 2
        - Micro-USB-Kabel
        - 1
        - 
    *   - 3
        - :ref:`cpn_breadboard`
        - 1
        - |link_breadboard_buy|
    *   - 4
        - :ref:`cpn_wire`
        - Mehrere
        - |link_wires_buy|
    *   - 5
        - :ref:`cpn_transistor`
        - 1(S8050)
        - |link_transistor_buy|
    *   - 6
        - :ref:`cpn_resistor`
        - 2(1KΩ, 10KΩ)
        - |link_resistor_buy|
    *   - 7
        - :ref:`cpn_button`
        - 1
        - |link_button_buy|
    *   - 8
        - Aktiver :ref:`cpn_buzzer`
        - 1
        - 
    *   - 9
        - :ref:`cpn_lipo_charger`
        - 1
        -  
    *   - 10
        - 18650-Batterie
        - 1
        -  
    *   - 11
        - Batteriehalter
        - 1
        -  
    *   - 12
        - :ref:`cpn_pir`
        - 1
        - |link_pir_buy|

**2. Schaltkreis aufbauen**

.. warning:: 
        
    Achten Sie darauf, dass Ihr Li-Po-Ladegerät wie im Schaltplan dargestellt angeschlossen ist. Andernfalls kann ein Kurzschluss sowohl Ihre Batterie als auch Ihre Schaltung beschädigen.

.. image:: img/wiring/3.ifttt_mail_bb.png
    :width: 800


**3. IFTTT-Einrichtung**

IFTTT ist ein kostenloser Dienst, der vielfältige Möglichkeiten bietet, unterschiedliche Datendienste miteinander zu verknüpfen.

Wir erstellen ein Applet, das auf einen Webhook (benutzerdefinierte URL) reagiert und Daten an IFTTT sendet.
Im Anschluss wird Ihnen von IFTTT eine E-Mail geschickt.

Bitte folgen Sie den unten stehenden Schritten auf IFTTT.

1. Besuchen Sie |link_ifttt|, um sich einzuloggen oder ein Konto zu erstellen.

    .. image:: img/ifttt-1.png
        :width: 500

2. Klicken Sie auf **Erstellen**.

    .. image:: img/ifttt-2.png
        :width: 500

3. Fügen Sie ein **Wenn das** Ereignis hinzu.

    .. image:: img/ifttt-3.png
        :width: 500

4. Suchen Sie nach **Webhooks**.

    .. image:: img/ifttt-4.png
        :width: 500

5. Wählen Sie **Web-Anforderung empfangen** aus.

    .. image:: img/ifttt-5.png
        :width: 500

6. Tragen Sie den Ereignisnamen ein (z.B. Sicherheitswarnung) und klicken Sie auf **Trigger erstellen**.

    .. image:: img/ifttt-6.png
        :width: 500

7. Fügen Sie ein **Dann das** Ereignis hinzu.

    .. image:: img/ifttt-7.png
        :width: 500

8. Suchen Sie nach E-Mail.

    .. image:: img/ifttt-8.png
        :width: 500

9. Klicken Sie auf **Mir eine E-Mail senden**.

    .. image:: img/ifttt-9.png
        :width: 500

10. Füllen Sie **Betreff** und **Inhalt** aus und klicken Sie dann auf **Aktion erstellen**.

    .. image:: img/ifttt-10.png
        :width: 500

11. Klicken Sie auf **Weiter**, um die Konfiguration abzuschließen.

    .. image:: img/ifttt-11.png
        :width: 500

12. Ändern Sie den Titelnamen und schon sind Sie fertig.

    .. image:: img/ifttt-12.png
        :width: 500

13. Sie werden automatisch zur Detailseite des Applets weitergeleitet, wo Sie sehen können, dass das Applet derzeit verbunden ist. Hier können Sie den Schalter umlegen, um es zu starten bzw. zu stoppen.

    .. image:: img/ifttt-13.png
        :width: 500


**4. Ausführung des Skripts**

#. Jetzt, wo wir das IFTTT-Applet erstellt haben, benötigen wir noch den API-Schlüssel, den Sie von |link_webhooks| beziehen können, um den Zugang des Pico W zu IFTTT zu ermöglichen.

    .. image:: img/ifttt-14.png
        :width: 500

#. Kopieren Sie diesen in das ``secrets.py`` Skript auf Ihrem Raspberry Pi Pico W.

    .. image:: img/3_ifttt4.png

    .. note::

        Falls die Skripte ``do_connect.py`` und ``secrets.py`` noch nicht auf Ihrem Pico W vorhanden sind, entnehmen Sie bitte :ref:`iot_access`, wie diese erstellt werden können.

    .. code-block:: python
        :emphasize-lines: 4

        secrets = {
        'ssid': 'SSID',
        'password': 'PASSWORT',
        'webhooks_key':'WEBHOOKS_API_KEY'
        }

#. Öffnen Sie die Datei ``3_ifttt_mail.py`` im Verzeichnis ``kepler-kit-main/iot`` und wählen Sie dann **Datei** -> **Speichern unter** oder drücken Sie ``Strg+Umschalt+S``.

    .. image:: img/3_ifttt1.png

#. Wählen Sie im erscheinenden Popup-Fenster **Raspberry Pi Pico** aus.

    .. image:: img/3_ifttt2.png

#. Benennen Sie die Datei als ``main.py`` um. Eine Aufforderung erscheint, falls bereits eine gleichnamige Datei auf Ihrem Pico W existiert.

    .. image:: img/3_ifttt3.png

#. Nun können Sie das USB-Kabel entfernen und den Raspberry Pi Pico W über das Li-Po-Ladegerät mit Strom versorgen. Sobald das Skript läuft, ertönt ein akustisches Signal. Der Signalton setzt sich fort, wenn das PIR-Modul eine vorbeigehende Person oder ein Tier erkennt, und eine E-Mail-Warnung wird an Sie gesendet. Durch Betätigen der Taste kann das Skript neu gestartet werden.

**So funktioniert es**

Der Raspberry Pi Pico W muss, wie in :ref:`iot_access` beschrieben, mit dem Internet verbunden sein. Für dieses Projekt reicht das aus.

.. code-block:: python

    from do_connect import *
    do_connect()

Liest Daten vom PIR-Modul und ruft die Funktion ``motion_detected()`` auf, wenn es jemanden vorbeigehen bemerkt (Daten von 0 bis 1).

.. code-block:: python

    import machine

    sensor=machine.Pin(17,machine.Pin.IN)

    sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)

Als Nächstes sendet der Pico W Daten an IFTTT. Wie Sie sehen können, ist die ``message``, die Sie an IFTTT senden, eine URL-Zeichenfolge. IFTTT identifiziert den Absender über ``secrets['webhooks_key']``, das ausgelöste Ereignis wird durch ``event`` identifiziert. Stellen Sie also sicher, dass diese korrekt sind.

.. code-block:: python

    import urequests
    from secrets import *

    event='SecurityWarning'
    message=f"https://maker.ifttt.com/trigger/{event}/with/key/{secrets['webhooks_key']}"

    def motion_detected(pin):
        urequests.post(message)
        print(message)
        global warn_flag
        warn_flag=True
        sensor.irq(handler=None)

Wenn ``motion_detected()`` aufgerufen wird, wird die Variable ``warn_flag`` auf ``True`` gesetzt, was dazu führt, dass der Signalton weitergeht.

.. code-block:: python

    while True:
        if warn_flag==True:
            alarm.toggle()
            time.sleep_ms(50)

Der Button dient hier zum Neustart des Skripts.

.. code-block:: python

    button=machine.Pin(16,machine.Pin.IN)

    def reset_device(pin):
        machine.reset()

    button.irq(trigger=machine.Pin.IRQ_RISING, handler=reset_device)
