Tag 20: Twitch

Die Webseite ThingSpeak bietet einiges mehr als nur die Langzeitüberwachung von Sensoren. Das heutige Projekt ist den Projekten von Tag 9 und Tag 10 in der Grundidee ähnlich. Es werden nämlich Informationen von einer Webseite aus dem Internet bezogen. In diesem Fall geht es darum ob ein bestimmter Stream gerade online ist oder nicht.

Dabei gibt es zwei bedeutende Vorteile der ThingSpeak-Variante gegenüber den ersten Versuchen. Erstens kann über die ThingSpeak Seite auch Webseiten über HTTPS (HyperText Transfer Protocol Secure) angesprochen werden, während das Modul nur das unsicherer HTTP Protokoll unterstützt. Zweites kann die Webseite wichtige Informationen bereits vorfilten und somit die vom Controller zu bearbeitende Datenmenge deutlich verringern.

In dem heutigen Projekt werden Sie nun eine Twitch-Streaming-Anzeige realisieren, als exemplarisches Beispiel für verschiedene Möglichkeiten. Twitch ist eine Webseite auf der live Games oder informatives rund ums Thema Computerspiele gestreamt werden. Einer der bekanntesten Streamingchannels heißt RocketBeansTV der ehemaligen GameOne Macher, welcher rund um die Uhr sendet und deswegen für einen ersten Test gut geeignet ist. Später können Sie natürlich einen Kanal Ihrer Wahl einsetzen.

Der heutige Versuchsaufbau mit einer LED an Pin D9

Der heutige Versuchsaufbau mit einer LED an Pin D9

Das Programm: Day20_ThinkSpeakTwitch

Neben dem Hardwareaufbau sind auch einige Schritte auf der ThingSpeak Seite nötig. Wenn Sie auf der Webseite im obersten Menü auf APPs klicken, bekommen Sie eine Reihe von verschiedenen Anwendungsmöglichkeiten angezeigt. Heute beschäftigen wir uns mit der ThingHTTP-App. Wenn Sie auf den entsprechenden Button klicken, bekommen Sie zunächst eine recht leere Oberfläche angezeigt. Klicken Sie auf New ThingHTTP. In dem nun erscheinenden Formular geben Sie folgendes ein:

Name:   Twitch

URL:      https://api.twitch.tv/kraken/streams?channel=rocketbeanstv

Method:              GET

HTTP Version:    1.1

Parse String:       _total

Eingaben ThingHTTP-APP

Eingaben ThingHTTP-APP

Falls Sie einen anderen Streamer bevorzugen, können Sie in der URL hinter channel einen anderen Kanal eingeben. Klicken Sie auf Save ThingHTTP und kopieren Sie anschließen den in der Übersicht erscheinenden API-Key in die Zwischenablage. Den Key müssen Sie nun in das Programm kopieren und zwar hinter #define ThingHTTP. Die WLAN-Daten nicht vergessen und schon können Sie das Programm uploaden. Einmal pro Minute wird nun überprüft, ob ein Stream zu finden ist. Falls dies der Fall ist, beginnt die LED zu leuchten.

 

34 Kommentare

  1. Ding

    Hallo,
    das Programm von Tag 20 hat funktioniert.

    Ich habe auf Thingspeak folgende Daten geändert:
    URL: http://www.temp.fkainka.de/?city=essen
    Parse String: Temp:

    Im Programm lasse ich mir die Werte anzeigen:
    Serial.println(vOnline); // Ausgabe auf Serial Monitor

    Ich bekomme jedoch nicht die Temperatur angezeigt die ich im Prorogramm von Tag 10 bekomme.

    Wass muß ich ändern damit ich die Website von Tag 10 mit Thingspeak auswerten kann?

    Gruß Ding

  2. UserA

    Hallo,
    das Programm von Tag 20 hat funktioniert.

    Ich habe auf Thingspeak folgende Daten geändert:
    URL: http://www.temp.fkainka.de/?city=essen
    Parse String: Temp:

    Im Programm lasse ich mir die Werte anzeigen:
    Serial.println(vOnline); // Ausgabe auf Serial Monitor

    Ich bekomme jedoch nicht die Temperatur angezeigt die ich im Prorogramm von Tag 10 bekomme.

    Wass muß ich ändern damit ich die Website von Tag 10 mit Thingspeak auswerten kann?

    Gruß UserA

  3. Willi

    Ich finde den Conrad IoT Adventskalender Super!
    Aber was ich schade finde, dass immer nur gezeigt wird wie man das Experiment zum laufen bringt und zum Schluss ein Resultat sieht, ich finde man sollte genauer auf die Technik dahinter noch eingehen und dem Bastler zeigen wie das ganze eigentlich genau funktioniert. Ich würde es z. B. besser finden, wenn einem der Programmier-Code erklärt wird, mit man ihn versteht und später auch eigene Sachen entwickeln kann, so wird auch noch Creativität gefragt und man hat mehr Spaß.

    Das wünsche Ich mir für nächstes Jahr, dass auf die Technik genauer eingegangen wird!

    Mit freundlichen Grüßen

    Willi

    1. Marten

      Ich finde es auch schade das die Dinge dahinter nicht erzahlt wird.

  4. Klaus

    Wer sich immer noch über die ESP SEND ERROR wundert:
    Das Programm hat einen Fehler. Die Funktion „getThingSpekaHttp“ muss umgebaut werden. Ich will jetzt die Spannung, oder den Bastelspaß nicht verderben, deshalb poste ich die Lösung erst morgen.
    Nur soviel als Hinweis. Eine Verbindung, die mit AT+CIPSTART geöffnet wird, muss auch wieder mit AT+CIPCLOSE geschlossen werden. Genau das fehlt hier. Deshalb kommt ab der zweiten Abfrage ein Fehler. Die Verbindung steht noch und kann nicht geöffnet werden.
    Die Lösung ist also, Ergebnis speichern, Verbindung schließen und erst dann das Ergebnis zurück geben. Übrigens liegt da noch ein zweiter Fehler. Die Originalfunktion gibt keinen Wert zurück, wenn das Senden aus irgendeinem Grund fehlschlägt. Dann kommt ein Zufallswert zurück. Das sollte auch noch verbessert werden.

    1. Klaus

      Da kein Upload von ZIP möglich ist, poste ich die Lösung im Forum

  5. Kacki

    Wofür brauchen wir eigentlich die ganzen 1 kOhm-Widerstände? Dürfte heute der 5. sein, oder?

    1. Christoph

      Da stellen wa uns ma janz dumm und sajen:“Dat kriegen wa später!“
      Oder sind 1Ohm Wiederstände etwa doch typische Verbrauchsartikel?

  6. Raimund

    Ich habe eine Compiler-Fehlermedlung an Tag 17. ich komme nicht weiter. Bitte um Hilfe.
    D:\Eigene\Arduino\Day17_IRmodul\Day17_IRmodul.ino: In function ‚void loop()‘:

    D:\Eigene\Arduino\Day17_IRmodul\Day17_IRmodul.ino:72:29: warning: deprecated conversion from string constant to ‚char*‘ [-Wwrite-strings]

    if (esp8266.find(„+IPD,“))

    ^

    Was mache ich falsch ?

    1. Klaus

      Das ist keine Fehlermeldung, sondern nur eine Warnung. Alles OK. Die Warnung sagt nur, dass die automatische Konvertierung von String in Char irgendwann nicht mehr gehen wird.

  7. Florian

    Kann mir jemand sagen ob es eine Alternativ Webseite zu The Buzz Media gibt, denn die Seite funktioniert nicht mehr? Ich möchte nämlich die Seite ändern und wieder konvertieren lassen.

    1. jz

      Ich würde den Text gar nicht wandeln, sondern:

      const char thingPost[] PROGMEM = {
      „POST *URL* HTTP/1.1\n“
      „etc\n“
      };

      verwenden. Dann hat man dies gleich im Programm ersichtlich.

      1. Roman_2

        In welchem „Format“ kann ich den Text dann eingeben?
        Der HTML-Code wird wohl nicht funktionieren?
        Oder muss man noch weitere Vorkehrungen treffen,damit das funktioniert?

        1. Klaus

          Doch, das geht. Die Zeichen müssen nur teilweise „getypecastet“ werden, sonst meint Arduino z.B. bei Anführungszeichen, dass der String zuende sei. Schau mal ins Forum. Da habe ich ein Tool gepostet. Zielformat wäre in diesem Fall „C++/PHP-String Text“. Als Quelle einfach den rohen HTML-Code einfügen und „Plain Text“ wählen. Zeilenenden bei Quelle vermutlich „CR LF“(Windows) und beim Ziel „CR“ einstellen.

          1. Roman_2

            Irgendwie funktioniert das bei mir noch nicht richtig. Immerwieder Fehler beim Kompilieren.
            Habe bereits den HTML-Code mit deiner Anwendung konvertiert.
            Liege ich richtig in der Annahme, dass es ggf.
            „const char site[] PROGMEM = {};“
            heißen muss, wenn der funktionierende Teil vorher
            „const byte site[] PROGMEM = {};“
            hieß?

            und nicht „const char thingPost[] PROGMEM = {};“

            braucht man für die Funktion noch irgendeine Libary oder andere Einstellungen?

          2. Roman_2

            Vielleicht wäre es möglich einen Screenshot von eurer Code-Passage zu posten. Wäre euch sehr dankbar ;)

        2. Roman_2

          Vielleicht wäre es möglich einen Screenshot von eurer Code-Passage zu posten. Wäre euch sehr dankbar ;)

          1. Klaus

            Einfach aus dem byte ein char machen und den Inhalt in den geschweiften Klammern ersetzen. Bei char natürlich dann mit Anführungszeichen vorne und hinten. Die macht mein Programm nicht.
            Aus
            const byte text[] PROGMEM = { 72,97,108,108,111,32,34,68,117,34 };
            wird dann
            const char text[] PROGMEM = { „Hallo \“Du\““ };

          2. Roman_2

            Gut, das funktioniert soweit ;)
            ABER…HTML-Codes beginnen doch mit „…….“
            diese verursachen bei mir Fehler beim Compilieren ;)

            Ich komme grundsätzlich ja gut mit den Byte-Codes zurecht, jedoch wäre die HTML-Variante wesentlich komfortabler, wenn sie funktionieren würde ;)

          3. Roman_2

            ABER…HTML-Codes beginnen doch mit „…….“

          4. Roman_2

            Das will einfach nicht…
            ABER…HTML-Codes beginnen doch mit „spitzenklammerHTMLspitzenklammer…“

    2. Klaus

      Schau mal ins Forum. Dort habe ich ein Tool rein gestellt, was das gleiche macht

      1. Florian

        Genau das wollte ich vielen Dank ;-)

  8. Roebi

    In der json Antwort von https://api.twitch.tv/kraken/streams?channel=rocketbeanstv
    wird nach dem Teil „_total“:1 geparst. D.h. beim NanoESP kommt eine 1 an. Für die Aussage, ob der bestimmte Stream gerade online ist oder nicht reicht das aus.

  9. Daniel

    Hallo zusammen,

    ich hätte auch mal eine allg. Frage:

    kann man dem Nano auch eine feste ip im netzwerk zuweisen?

    wenn ja, wie?

    für die letzten tage musste man immer gucken an welcher ip sich das/der nano gerade hängt. dabei habe ich schon festgestellt, dass er intern immer weiter hochzählt. was ist wenn er am ende bei 255 angekommen ist?

    danke für die hilfe

    1. Roebi

      Sali Daniel.
      Ich erweitere die C Programme jeweils oben bei den defines mit …

      #define STATIONIP „nnn.nnn.nnn.mmm“
      #define GATEWAY „nnn.nnn.nnn.nnn“
      // Class C Network
      #define NETMASK „255.255.255.0“

      … und unten erweitere ich die Funktion configStation() um zwei Befehle …

      boolean configStation(String vSSID, String vPASSWORT)
      {
      boolean succes = true;
      succes &= (sendCom(„AT+CWMODE=1“, „OK“));
      // DHCP disable for Station mode (client)
      succes &= (sendCom(„AT+CWDHCP=1,0“, „OK“));
      // Set IP Address
      succes &= (sendCom(„AT+CIPSTA=\““ + String(STATIONIP) + „\“,\““ + String(GATEWAY) + „\“,\““ + String(NETMASK) + „\““, „OK“));
      esp8266.setTimeout(20000);
      succes &= (sendCom(„AT+CWJAP=\““ + String(vSSID) + „\“,\““ + String(vPASSWORT) + „\““, „OK“));
      esp8266.setTimeout(1000);
      return succes;
      }

      1. Roebi

        Beim Text kopieren alle nun umgewandelten doppelten Anführungszeichen durch ’normale‘ doppelten Anführungszeichen ersetzen :-)
        Gruss Röbi

    2. Jörg

      Das kannst Du in Deinem Router einstellen unter DHCP/Address Reservation (je nach Router kann das Einstellungsmenü auch anders heißen). Dort gibst du die Mac-Adresse vom Nano und die gewünschte IP-Adresse ein.

  10. jz

    Heute scheint mir der Lerneffekt doch etwas bescheiden.
    Mindestens der thingPost Inhalt dürfte als Text mitgeliefert werden, damit man davon profitieren kann.
    Die empfohlenen Webseiten zur Wandlung sind ja offensichtlich nur teilweise verfügbar, oder mühsam zu bedienen.
    Aber man kann sich den Text im Serial Monitor anzeigen lassen.

    1. jz

      Aha, ich hatte Tag 19 noch nicht gemacht. Dort ist der Text vorhanden.
      Schade, wenn der Text direkt im Programm vorhanden wäre, wie auch schon, wäre alles klar.

      1. jz

        Aha, voll reingefallen!
        thingPost wird in diesem Beispiel ja gar nicht benötigt.
        Aus den eigenen Fehlern lernt man am meisten: muss Tag 19 nachholen.

  11. Dirk

    Hi, im Seriellen Monitor sieht die Meldung so aus.

    ESP SEND ERROR: AT+CIPSTART=“TCP“,“api.thingspeak.com“,80
    Stream Online

    Auch die LED leuchtet, aber ich bin mir nicht sicher ob ich da alles richtig gemacht habe. gibt es auch die Möglichkeit das der Stream nicht gefunden wird und die LED erlicht.

    1. hugoboss

      Speicher einfach den Link ohne den Buchstaben v am Ende ab: https://api.twitch.tv/kraken/streams?channel=rocketbeanst

      Resultat: LED ist aus
      ESP SEND ERROR: AT+CIPSTART=“TCP“,“api.thingspeak.com“,80
      Stream Offline

      Verwende nun den korrekten Link (mit dem Buchstabe v am Ende)
      https://api.twitch.tv/kraken/streams?channel=rocketbeanstv

      Resultat: LED ist an
      ESP SEND ERROR: AT+CIPSTART=“TCP“,“api.thingspeak.com“,80
      Stream Online

      1. Dirk

        Vielen Dank, so hat es funktioniert.

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.