Day 20: Twitch

The website ThingSpeak offers a lot more than just long-time monitoring of sensors. Today’s project is similar to the projects from days 9 and 10 in its basic idea. Information is collected from a website on the internet. In this case, it is whether a specific stream is currently online or not.

There are two decisive advantages of the ThingSpeak version over the first attempts. First, the ThingSpeak page can also call websites via HTTPS (HyperText Transfer Protocol Secure), while the module only supports the unsafe HTTP-protocol. Second, the website can pre-filter important information and thus clearly reduce the data volume to be processed by the controller.

In today’s project, you will implement a twitch streaming display as an example of different options. Twitch is a website on which live games or information around the subject of computer games are streamed. One of the best-known streaming channels is RocketBeansTV from the former GameOne producers, which sends around the clock and therefore is well suitable for the first test. Later, you can, of course, use a channel of your choice.

Der heutige Versuchsaufbau mit einer LED an Pin D9

Todays circuit: LED on Pin D9

The program: Day20_ThinkSpeakTwitch

In addition to the hardware setup, some steps on the ThingSpeak page are necessary. When you click APPs in the top-most menu of the website, you will be shown a number of different application options. Today, we will deal with the ThingHTTP-App. If you click the corresponding button, you will first be shown a rather empty interface. Click New ThingHTTP. Enter the following into the form that comes up:

Name:   Twitch

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

Method:              GET

HTTP Version:    1.1

Parse String:       _total

Eingaben ThingHTTP-APP

Settings of the ThingHTTP-APP

If you prefer another streamer, you can enter another channel in the URL behind "channel". Click Save ThingHTTP and then copy the API key that appears in the overview into your clipboard. You now need to copy the key into the program, after #define ThingHTTP. Do not forget the WLAN data. You can now upload the program. Once per minute, it will be checked if a stream can be found. If this is the case, the LED will light up.

34 Comments

  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

    Reply
  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

    Reply
  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

    Reply
    1. Marten

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

      Reply
  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.

    Reply
    1. Klaus

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

      Reply
  5. Kacki

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

    Reply
    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?

      Reply
  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 ?

    Reply
    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.

      Reply
  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.

    Reply
    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.

      Reply
      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?

        Reply
        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.

          Reply
          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 ;)

          Reply
          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

      Reply
      1. Florian

        Genau das wollte ich vielen Dank ;-)

        Reply
  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.

    Reply
  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

    Reply
    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;
      }

      Reply
      1. Roebi

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

        Reply
    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.

      Reply
  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.

    Reply
    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.

      Reply
      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.

        Reply
  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.

    Reply
    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

      Reply
      1. Dirk

        Vielen Dank, so hat es funktioniert.

        Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.