Ergebnis 1 bis 5 von 5

Thema: NodeMCU - IFTTT Trigger funktioniert nicht.

  1. #1
    Mau Avatar von Zuyas
    Registriert seit
    Sep 2013
    Ort
    Aachen
    Beiträge
    106

    NodeMCU - IFTTT Trigger funktioniert nicht.

    Hallo,

    ich habe ein "NodeMCU ESP8266 ESP-12E WiFi" und als IDE verwende ich Arduino.
    Ich Sammel grade meine ersten Erfahrungen damit und für mein Projekt möchte ich per Knopfdruck eine IFTTT aktion Auslösen.
    Wenn ich die URL selber im Browser aufrufe klappt das auch, per Knopfdruck auf dem Controller jedoch nicht.

    Der Code ist:

    Spoiler: 

    #include <ESP8266WiFi.h>

    const char* ssid = "XXXX";
    const char* password = "XXXX";
    const char* host = "maker.ifttt.com";
    const char* apiKey = "XXXX";

    int pin = 0;

    volatile int flag = false;
    const char* PIN_state = "not pressed";

    void PINStatus()
    {
    PIN_state = "bell pressed";
    flag = true;
    }

    void setup() {
    Serial.begin(115200);

    Serial.println("door bell integration with IFTTT");
    delay(100);
    pinMode(pin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(pin), PINStatus, FALLING);

    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED)
    {
    delay(500);
    Serial.print(".");
    }

    Serial.println("");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
    }

    void loop() {
    if(flag)
    {
    Serial.print("connecting to ");
    Serial.println(host);

    WiFiClient client;
    const int httpPort = 80;
    if (!client.connect(host, httpPort))
    {
    Serial.println("connection failed");
    return;
    }

    String url = "/trigger/door_bell/with/key/";
    url += apiKey;

    Serial.print("Requesting URL: ");
    Serial.println(url);
    client.print(String("POST ") + url + " HTTP/1.1\r\n" +
    "Host: " + host + "\r\n" +
    "Content-Type: application/x-www-form-urlencoded\r\n" +
    "Content-Length: 13\r\n\r\n" +
    "value1=" + PIN_state + "\r\n");
    flag = false;
    }

    delay(100);
    }

    Der Serial Monitor zeigt mir an:

    Spoiler: 

    um 0x2d
    v0fd86a07
    ~ld
    door bell integration with IFTTT
    Connecting XXXX
    .
    IP address:
    192.168.0.31

    und wenn ich den Knopf drücke sagt er mir:

    Spoiler: 

    connecting to maker.ifttt.com
    Requesting URL: /trigger/door_bell/with/key/XXXX

    Allerdings triggert das Event nicht. Hat jemand eine Idee?

    lg Zuyas

  2. #2
    Feiner Herr Avatar von Ungesund
    Registriert seit
    Jul 2013
    Ort
    Achterbahn
    Beiträge
    1.392

    Re: NodeMCU - IFTTT Trigger funktioniert nicht.

    Heyho Zuyas,

    ist das Event "trigger/doorbell/with/key/" ein offizielles IFTTT Event, speziell für den Einsatz als Türklingel, oder nutzt du dazu auch die IFTTT Maker Webhooks, und hast das selbst definiert? Wenns Webhooks sind, kommt der evtl. nicht mit den Slashes klar... würde in dem Fall das Event so simpel wie nur möglich nennen, ist ja nur fürs triggern.

    Ich bin auch kein Mega-Arduino-Crack, habe aber vor einem halben Jahr etwas ähnliches gebastelt. link

    Ist eine Vorrichtung um den eigenen Briefkasten "smart" zu machen, ebenfalls aud NodeMCU Basis. Beim Auslösen eines Kontakts im Briefkasten schließt sich der Stromkreis an dem der ESP hängt und der Sketch wird ausgeführt (sende Message an Handy via IFTTT). Danach geht der ESP in den deep Sleep, entnehmen der Post trennt ihn wieder vom Strom, bis zum nächsten auslösen. (Wegen Battery-Usage)

    Evtl. hilft dir ja der Sketch den ich dafür geschrieben habe, musste ich damals auch Dokumentieren, das passt ja jetzt. Musst du halt schauen was du da für deine Zwecke raus ziehen kannst, aber zumindest stellt es eine getestete Umsetzung des triggerns der IFTTT-Webhooks dar.

    Spoiler: 

    /*
    Erstellt unter Zuhilfename von:
    c't "Dashbutton Build": https://github.com/pinae/ESP8266-Dash
    IFTTT Maker Guide: https://platform.ifttt.com/maker/guide
    ESP8266 Arduino-IDE Example "Blink"
    ESP8266 Arduino-IDE Example "Wificlient"
    */

    // Miteinbezogene Haupt-Libraries:

    #include <IFTTTMaker.h> // https://github.com/witnessmenow/arduino-ifttt-maker
    #include <ESP8266WiFi.h> //weitere Infos dazu hier: http://esp8266.github.io/Arduino/versions/2.1.0-rc1/doc/libraries.html
    #include <WiFiClientSecure.h>

    // Variabeln werden hier definiert:
    // IFTTT Login/Trigger Infos

    #define KEY "HIER IFTTT_API KEY EINFÜGEN" // IFTTT Key, also der 22-Stellige Code in der URL unter "https://ifttt.com/services/maker_webhooks/settings"
    #define EVENT_NAME "button_pressed" // Name des "Events" festgelegt beim erstellen eines IFTTT Applets
    #define AIO_SERVER "maker.ifttt.com" // IFTTT Server URL

    // LED für Status-Info wird definiert. Hier bediene ich mich der Internen ESP3266-NODEMCU LED

    #define LED LED_BUILTIN

    // Login Infos des Wlans

    #define mySSID "Wifi-Netzwerkname"
    #define myPASSWORD "Wifi-Passwort"


    WiFiClientSecure client;
    IFTTTMaker ifttt(KEY, client);

    void setup() {
    Serial.begin(115200);
    delay(100);
    Serial.println("Start");

    pinMode(LED, OUTPUT);
    digitalWrite(LED, HIGH);

    // Der Wlan-Mode wird als Client (Station) definiert (WIFI_STA)

    WiFi.mode(WIFI_STA);
    delay(100);

    // Verbindung mit dem Wlan wird hergestellt.
    // Dazu nutzen wir die im Sketch oben festgelegten Variabeln.

    Serial.print("Connecting Wifi: ");

    // Dazu nutzen wir die im Sketch oben festgelegten Variabeln.

    Serial.println(mySSID);
    WiFi.begin(mySSID, myPASSWORD);

    // Ebenso legen wir fest nach wie vielen Versuchen der Verbindungsaufbau abgebrochen wird.

    int retries = 50;
    while (WiFi.status() != WL_CONNECTED && --retries > 0) {
    Serial.print(".");

    // Ist eine verbindung aufgebaut, geben wir dem ganzen ein wenig Zeit

    delay(500);
    }
    if (retries == 0) ESP.restart();
    Serial.println("");
    Serial.print("WiFi connected ");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
    Serial.print("Connecting IFTTT: ");
    retries = 10;
    digitalWrite(LED, HIGH);
    unsigned long entry = millis();

    // Hier wird das IFTTT Event getriggert. Dazu können noch 3 eigene Variabeln definiert werden.
    while (!ifttt.triggerEvent(EVENT_NAME, "Die Post war da!", "Post wartet im Briefkasten.", "Lala!") && retries > 0) {
    Serial.println((millis() - entry) / 1000.0);
    entry = millis();
    Serial.print("!");
    }
    if (retries > 0) {
    Serial.println("Successfully sent");
    blinkSuccess();
    }
    else {
    Serial.println("Got no success message.");
    blinkError();
    }
    Serial.println("Going to sleep.");
    ESP.deepSleep(0);
    }

    void loop() {
    yield();
    }

    // Hier wird das Verhalten der LED bei erfolgreichem Versenden des Requests an IFTTT definiert.
    // Dazu habe ich zwei schöne LED Pattern aus dem oben genannten Sketch "ESP8266-Dash" kopiert,
    // da meinem Mathematik-unfähigen Hirn die darin gemachten Berechnungen im for-loop völlig abgehen.

    // Blink Success ist ein Blinken dass langsamer wird, Symbolisch für eine Nachricht die in die Ferne geschickt wird.

    void blinkSuccess() {
    for (int i = 4; i < 50; i = (5 * i) >> 2) {
    digitalWrite(LED, HIGH); // turn the LED off
    delay(10 * i); // wait
    digitalWrite(LED, LOW); // turn the LED on
    delay(10 * i); // wait
    }
    }

    // BlinkError ist ein schnelles, beständiges Blinken, das nervt und zeigt dass etwas nicht stimmt.

    void blinkError() {
    for (int i = 0; i < 28; i++) {
    digitalWrite(LED, HIGH); // turn the LED off
    delay(125); // wait
    digitalWrite(LED, LOW); // turn the LED on
    delay(125); // wait
    }
    }

    // Hat der ESP366 alle Aufgaben erfüllt, geht er in einen Deep-Sleep Modus, bis zum nächsten Reset,
    // bei dem der Sketch dann erneut ausgeführt wird.

    void shutdown() {
    Serial.println("Shutting down.");
    Serial.println("Going to sleep.");
    //digitalWrite(PORT, LOW); // make sure, the ESP is enabled even if button is released
    ESP.deepSleep(0);
    Serial.println("Sleep failed.");
    while (1) {
    blinkError();
    }
    }
    Für diesen Beitrag bedankt sich Zuyas
    Mehr geschriebener Unsinn: www.facebook.com/sirdevox
    Elektromusikalische Feinkost: www.facebook.com/craterfieldmusic

  3. #3
    Mau

    (Threadstarter)

    Avatar von Zuyas
    Registriert seit
    Sep 2013
    Ort
    Aachen
    Beiträge
    106

    Re: NodeMCU - IFTTT Trigger funktioniert nicht.

    Vielen Dank für deine Antwort.
    Zitat Zitat von Ungesund Beitrag anzeigen
    ist das Event "trigger/doorbell/with/key/" ein offizielles IFTTT Event, speziell für den Einsatz als Türklingel, oder nutzt du dazu auch die IFTTT Maker Webhooks, und hast das selbst definiert?
    Maker Webhooks selbst definiert.

    Auch mit deinem Code habe ich das Problem, dass nichts passiert. Hier der Log:

    Spoiler: 

    um 0x2d
    v0fd86a07
    ~ld
    Start
    Connecting Wifi: XXXX
    ...
    WiFi connected IP address: 192.168.0.31
    Connecting IFTTT: 0.67
    !0.63
    !0.71
    !0.74
    !0.67
    !0.63
    !0.64
    !0.64
    !0.64
    !Got no success message.
    Going to sleep.

  4. #4
    Feiner Herr Avatar von Ungesund
    Registriert seit
    Jul 2013
    Ort
    Achterbahn
    Beiträge
    1.392

    Re: NodeMCU - IFTTT Trigger funktioniert nicht.

    - Hast du in der Arduino IDE alle Libraries die im Sketch genannt sind installiert?
    - Hast du bei IFTTT ein Event mit dem Namen "button_pressed" erstellt, und deinen eigenen API-Key in den sketch eingefügt, bevor du ihn ausgeführt hast? Sonst hat der ja nichts was er triggern könnte.
    - Kommentier mal den Part mit dem er in den sleep-mode geht raus, und schau ob du den ESP auf netzwerkebene überhaupt anpingen kannst, nachdem er sich laut log mit dem Wlan verbunden hat.
    - Wenn dem so ist und du ihn anpingen kannst, verhindert evtl. dein Router eine Verbindung des ESP zu IFTTT, da mal schauen was die firewall sagt.
    - Letztendlich weiß ich nicht wie du dein IFTTT configt hast, da können auch noch Fehlerquellen liegen.
    Mehr geschriebener Unsinn: www.facebook.com/sirdevox
    Elektromusikalische Feinkost: www.facebook.com/craterfieldmusic

  5. #5
    Mau

    (Threadstarter)

    Avatar von Zuyas
    Registriert seit
    Sep 2013
    Ort
    Aachen
    Beiträge
    106

    Re: NodeMCU - IFTTT Trigger funktioniert nicht.

    Problem liegt am Netzwerk, ich habe dafür einen neuen Beitrag angelegt.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicke auf die Grafik für eine größere Ansicht 

Name:	ifttt.png 
Hits:	28 
Größe:	87,7 KB 
ID:	53082  
    Geändert von Zuyas (31.12.18 um 11:57 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •