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.
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
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.
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
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
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
Ich finde es auch schade das die Dinge dahinter nicht erzahlt wird.
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.
Da kein Upload von ZIP möglich ist, poste ich die Lösung im Forum
Wofür brauchen wir eigentlich die ganzen 1 kOhm-Widerstände? Dürfte heute der 5. sein, oder?
Da stellen wa uns ma janz dumm und sajen:”Dat kriegen wa später!”
Oder sind 1Ohm Wiederstände etwa doch typische Verbrauchsartikel?
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 ?
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.
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.
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.
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?
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.
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?
Vielleicht wäre es möglich einen Screenshot von eurer Code-Passage zu posten. Wäre euch sehr dankbar ;)
Vielleicht wäre es möglich einen Screenshot von eurer Code-Passage zu posten. Wäre euch sehr dankbar ;)
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\”” };
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 ;)
ABER…HTML-Codes beginnen doch mit „…….“
Das will einfach nicht…
ABER…HTML-Codes beginnen doch mit „spitzenklammerHTMLspitzenklammer…”
Schau mal ins Forum. Dort habe ich ein Tool rein gestellt, was das gleiche macht
Genau das wollte ich vielen Dank ;-)
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.
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
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;
}
…
Beim Text kopieren alle nun umgewandelten doppelten Anführungszeichen durch ‘normale’ doppelten Anführungszeichen ersetzen :-)
Gruss Röbi
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.
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.
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.
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.
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.
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
Vielen Dank, so hat es funktioniert.