Tag 24: Feuermelder für den Weihnachtsbaum

Das Abschlussprojekt besteht aus mehreren Elementen, die Sie im Laufe der Adventszeit kennengelernt haben. Eine Funktion ist die am vorrangegangenen Tag vorgestellte Cheerlights-Funktion. Sie können weiterhin die aktuelle Farbe des Cheerlights-Projekts empfangen und mit der RGB-LED darstellen. Außerdem wird das Board zur Langzeitüberwachung der Temperatur eingesetzt. Gleichzeitig kann das Board einen Alarmton ausgeben, wenn die Temperatur einen bestimmten Wert überschreitet, z.B. weil ein Feuer entsteht. Und als letzte Funktion kann das Board als Weihnachtsglocke eingesetzt werden, indem es über ein zeitgesteuertes TalkBack-Kommando dazu gebracht wird, den Song Jingle Bells zu spielen. Alles in allem ist das heutige Projekt ein Allrounder für den Weihnachtsbaum.

Hinter dem heutigen Türchen befindet sich noch einmal ein recht spannender Sensor, nämlich einen NTC (Negative Temperature Coefficient). Dieser verändert seinen Widerstand in Abhängigkeit von der Temperatur. Es lohnt sich also durchaus auch ein paar der älteren Versuche neu aufzurollen und diesmal den Tempertursensor zu verwenden. Der heutige Aufbau besteht aus recht vielen Elementen. Auch das Poti kommt erneut zum Einsatz, um eine Feinabstimmung am NTC vornehmen zu können. Alternativ können Sie auch den 10-kΩ-Widerstand einsetzen, dann ist allerdings keine Feinabstimmung möglich.

Der Aufbau des letzten Versuchs

Der Aufbau des letzten Versuchs

Das Programm: Day24_Christmas

Das finale Programm muss nun die vielen verschiedenen Elemente miteinander vereinen. Dabei kommt der ThingSpeak Seite wieder eine große Bedeutung zu. Unter anderem wird diesmal auch die Schwellwert-Überwachung des NTCs von einer ThingSpeak App übernommen. Von dort werden dann auch die Alarmaktionen ausgeführt, nämlich einmal eine Twitter Nachricht gesendet und ein TalkBack-Kommando eingefügt, welches auf dem Controller den Alarm auslöst. Über die Time-Control App der ThingSpeak Seite können Sie außerdem einen Zeitpunkt festlegen, an dem mit dem Jingle Bells Song die Familie zum Tannenbaum gerufen wird oder Sie am nächsten Tag von der Musik geweckt werden möchten.

Im ersten Schritt müssen Sie auf der ThingSpeak Seite einen neuen Kanal erstellen. Diesen können Sie beispielweise FireAlarm nennen. Das field1 bekommt dann die Bezeichnung Temp. Unter API-Keys finden Sie dann den ersten Schlüssel, den Sie in für ThingSpeakKEY eintragen müssen. Damit wäre schon mal die Übertragung des aktuellen Temperaturwerts gewährleistet.

Der FireAlarm-Kanal

Als zweiten Schritt sollten Sie nun ein neues TalkBack-Element erstellen. Als Namen können Sie beispielsweise Alarms verwenden. Außerdem können Sie die Kommandos im Channel FireAlarm loggen lassen. Den API-Key müssen Sie nun hinter TalkBackKEY und die ID hinter TalkBackID eintragen. Nun können Sie auch schon Kommandos an das Board senden. Sie können Kommandos auch manuell eintragen indem Sie in der TalkBack-Übersicht des Alarm-Channels auf Add a new Command klicken und dort unter Command String entweder Alarm oder Jingle eintragen. Eine Angabe der Position ist nicht nötig, da der Befehl automatisch an erster Stelle gespeichert wird. Sie können das Programm nun schon uploaden und testen, ob die Übertragung des aktuellen Temperaturwertes funktioniert und ob das Board die Kommandos ausführt. An dieser Stelle lohnt es sich auch, mit einen Raumthermometer den NTC über das Poti zu kalibrieren.

Im Grunde wäre dies nun schon ein vollwertiges Projekt aber es fehlen noch die Bonus-Funktionen. Diese müssen allerdings nicht mehr im Programm vorgenommen werden, sondern nur noch auf der ThingSpeak Seite. Dazu gehen Sie auf Apps und wählen anschließend React aus. Mit React kann auf bestimmte Ereignisse reagiert werden. Erstellen Sie also mit Klick auf New React eine neue React-Funktion und geben folgende Werte ein:

Name: FireDetect1

Condition Type: Numeric

Test Frequency: On Data Insertion

 Condition: If Channel

               FireAlarm

                field 1 (Temp)

               is great than

               40

Action: ThingTweet

               then tweet:

               Fire Alarm on the #NanoESP! Temp: %%trigger%%C #ThingSpeak #IoT

Using Twitter Account

               [Twitter Account]

Options: Run action only the first time the condition is met

ThingSpeak React mit Twitter-Anbindung

ThingSpeak React mit Twitter-Anbindung

ThingSpeak React mit ThingHTTP-Anbindung

ThingSpeak React mit ThingHTTP-Anbindung

Mit Save React speichern Sie die Einstellungen. Damit ist der erste Schritt der Überwachung bereits getan. Wenn der Wert überschritten wird, sendet ThingSpeak über Ihren Account eine Twitter-Nachricht gesendet. Für den zweiten Schritt, dem Einfügen des Alarm-Kommandos müssen Sie nun noch etwas tiefer in die Trickkiste greifen, denn die Funktion wird nicht automatisch unterstützt. Was unterstütz wird ist aber ThingHTTP. Also klicken Sie auf Apps und dann auf ThingHTTP. Dort erstellen Sie ein neues Element und stellen Folgendes ein:

Name:   Alarm

URL:      https://api.thingspeak.com/talkbacks/[YOUR TALKBACK ID]/commands

Method:              POST

HTTP Version:    1.1

Host:     api.thingspeak.com

Headers:

Body:    api_key=[YOUR TALKBACK ID]&command_string=Alarm&position=1

 

Die TalkBack-Einstellungen

Die TalkBack-Einstellungen

Achten Sie darauf, dass Sie die [YOUR TALKBACK ID] und [YOUR TALKBACK KEY] in der URL und im Body-Part durch Ihre TalkBack ID und KEY ersetzen. Nun können Sie einen weiteres React-Element erstellen, welches die gleichen Parameter wie das erste enthält, nur mit der Änderung, dass Sie bei Action nun ThingHTTP und dort den Punkt Alarm auswählen. Damit haben Sie nun sichergestellt, dass ein Alarm ertönt, wenn der kritische Wert überschritten wird.

Als letzte Funktion können Sie nun noch ein zeitgesteuertes Jingle Bells einrichten. Dazu klicken Sie unter Apps auf TimeControl und erstellen ein neues Element, z.B. mit dem Namen Bell. Dort nehmen Sie nun die folgenden Einstellungen vor:

Name:   Presents

Frequency:          One Time

Time Zone:         Berlin

Run At:                2015-24-12 7:00 pm

Fuzzy Time:         ± 0 minutes

TalkBack:            Alarms, add command: Jingle

Die TimeControll-Einstellungen

Die TimeControll-Einstellungen

Für einen ersten Test empfiehlt es sich, einen Zeitpunkt in ein paar Minuten zu wählen. Wenn dies funktioniert hat, kann man den richtigen Zeitpunkt einstellen.

Alles in allem kann man nun noch das Projekt mit dem 9V-Batterie-Clip oder auch einer Akku-Bank mobil machen. Wenn das Board nun im Tannenbaum versteckt wird, so dass nur die RGB-LED an passender Stelle aus dem Geäst lugt, wird das Ambiente auch nicht unnötig gestört. Und pünktlich um 19.00 werden alle Familienmittglieder durch die Klänge von Jingle Bells zum Baum gerufen.

Ich wünsche ein frohes Weihnachtsfest!

50 Kommentare

  1. Aulia

    Hey, can you share your code on arduino itself ? i dont know how to execute talkback and react on my arduino’s code..

  2. Sascha

    Kann mir einer vllt erklären woran es liegen könnte, dass mein Lautsprecher nicht funktioniert? Ich bekomme nicht einen Ton heruas. Ich gebe „Alarm“ oder „Jingle“ ein und es tut sich nichts. Weiterhin habe ich im seriellen Monitor immer weider folgende Error:
    ESP SEND ERROR: AT+CIPSTART=“TCP“,“api.thingspeak.com“,80
    ESP SEND ERROR: AT+CIPSEND=102
    ESP SEND ERROR: AT+CIPCLOSE

    Kann mir einer weiterhelfen?

  3. Rainer

    Auch wenn es etwas später ist, möchte ich mich auch recht herzlich für diesen tollen Adventskalender bedanken.

    Ich bin bei dem Abschlußprojekt aber leider an TalkBack gescheitert: Ich bekomme einfach keine Rückmeldung an den Controller hin. Bei ThingSpeak sehe ich zwar, dass die Kommandos abgearbeitet werden, aber im Seriellen Monitor kommt kein Kommando zurück, dort sehe ich nur eine Leerzeile. Egal, was ich mache. Trage ich die Kommandos „per Hand“ ein, wie an Tag 8, funktioniert alles, also am Api-Key oder TalkBack Key kann es nicht liegen :-(

    Ich hoffe, dass es noch genug Leute (oder den Autor) gibt, die diesen Kommentar noch lesen, und eventuell Hilfestellung geben können.

    Cheerlights funktioniert (geniales Projekt!), und die Temperaturen vom NTC werden auch übermittelt.

    Gruß

    Rainer

  4. Wolfgang

    Hallo,

    hat noch jemand Interesse an einem original erhaltenen Bausatz?
    Muß diesen leider aus Zeitgründen wieder verkaufen,

    mfg. Wolfgang

    1. Dirk

      Wieviel soll er den Kosten?

    2. Henning

      Hallo Wolfgang,

      willst Du den Kalender immer noch abgeben?
      Ich habe Interesse.

      Bitte antworte zunächst hier.

      Beste Grüße
      Henning

  5. Alois

    Hi Folks,
    Zunaechst ein hezliches Dankeschoen an den Verfasser fuer die Muehe den Adventskalender zusammen zu stellen.

    Die Bilder zu jedem Versuchsaufbau sind (fast immer) selbsterklaerend.
    Mir fehlen jedoch die Schaltplaene, die den Schaltungen zu Grunde liegen.
    Man koennte dann auch sofort erkennen, dass, beispielsweise im Versuch 22 (Talk Back), die Taster nicht nur die Eingaenge D5 und D10, sondern gleichzeitig mit D5 auch D2 und mit D10 auch D7 auf Masse gezogen werden.

    Have a nice day

    Alois

    P.S. Ein gutes Neues Jahr

  6. Christoph Sch

    kann mir jemand sagen, warum hier füttern die RGB-Led keine Vorwiderstände benötigt werden?

  7. AndreasB

    Hallo,
    ich möchte mich noch einmal herzlich für den Kalender bedanken. Eine tolle Idee und hat mich auf neue tolle Ideen gebracht. Es hat auch alles bisher immer tadellos funktioniert.

    Heute Abend wollte ich aber wenigstens doch noch zusätzlich den Alarmton bei Feueralarm ausgelöst wissen. Das hatte bisher nicht geklappt. JingleBells sehr wohl. :-) Witzige Idee.

    Was mache ich denn beim Alarm falsch?
    Unter Url kommt die ID – also die numerische Nummer rein. und unter body kommt der pi_key rein. Aber welche alphanumerischeID ist das? Die ich zu allererst als write APi (talbackKey) erhalten habe oder der neu oben angegebene key unter thinkhttp?

    Bei mir ertönt auf diese Weise leider nie der Alarmton. Es wird zwar eine Twitternachricht geschickt, aber der Signalton löst einfach nicht aus.

    Wenn mir da noch einmal jemand helfen könnte? Würde mich sehr freuen.

    Ansonsten bleibt mir nur zu sagen: Guten rutsch ins neue sJahr 2016! Bleibt gesund.

    LG
    Andi

  8. Nest

    Wer kann mir mit der Fehlermeldung helfen?
    Arduino: 1.6.6 (Windows 10), Board: „Arduino Nano, ATmega328“

    C:\Users\Kaltblut\Documents\Arduino\Day24_Christmas\Day24_Christmas.ino:26:20: fatal error: RGBLED.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren.

    1. Klaus

      Du hast die Bibliothek nicht in den libraries-Ordner kopiert. Beim Projekt gibt es einen Ordner libraries, wo ein Ordner RGBLED drin ist. Diesen musst Du in „Eigene Dateien\Arduino\libraries“ kopieren (wenn Du den Standardordner für Deine Projekte gelassen hast)

  9. HAWI

    https://www.instagram.com/p/_sWlJlpTp7/

    DANKE

    es hat Spaß gemacht

    Hans Wittek

  10. jz

    Möge das Pretzelboard viele neue Anhänger bekommen, und damit preisgünstiger werden, oder Konkurrenten auf den Plan rufen!
    IoT hebt definitiv ab.

  11. jz

    Danke für den tollen Kalender!
    (und Geduld für zusätzlichen Kommentar im Code des nächsten).

    Falls jemand das Beispiel Tag 24 erweitern möchte, empfehle ich, den Jingle im PROGMEM zu speichern, damit für Erweiterungen genügend dynamischer Speicher bleibt.

  12. JOJU

    Ich bin sehr enttäuscht von den teilweise überhaupt nicht dokumentierten Code der hier im Kalender verwendet wird!

    Das ist sehr schade da bestimmt sehr viel mehr Leute viel hätten lernen können – Nun konnten sie lediglich durch Experimente den Code verändern um zu sehen welche Bedeutung die Zeilen haben.

    Sehr sehr schade .

  13. Dubst3pg4m3r

    Hallo,
    bei mir hat alles Super funktioniert!
    Gibt es eine möglichkeit z.b. bei Tag 13 die LED von der Ferne aus zu Steuern?!
    sodass man nicht im selben Netzwerk sein muss?!
    Würde mich echt interessieren.
    LG

  14. Schlork

    Sehr schöner Kalender, vielen Dank dafür!

  15. Jonathan

    Ja, alle Experimente haben Spaß gemacht. Danke dem Autor. Bekommt es noch jemand hin, dass der Alarm nicht an Twitter sondern an whatsapp gesendet wird? Ähnlich
    http://www.embarcados.com.br/intel-edison-com-whatsapp/

    1. Jonathan

      Wer kann das???

    2. Jonathan

      Wer kann das?

  16. Andreas

    Alle Türchen haben Spaß gemacht, vielen Dank, noch ein schönes Weihnachtsfest und einen guten Rutsch.

  17. Andreas

    Alle Türchen haben Spasß gemacht, vielen Dank, noch ein schönes Weihnachtsfest und einen guten Rutsch.

  18. Michael Schuck

    Hallole,
    mir hat der Kalender auch mächtig Spaß gemacht und ich habe in Sachen Programmierung wieder einen Schritt noch vorne gemacht. Einzig, dass in Day24 bei mir im Beispielsprogramm die LED falsch definiert waren, dacht ich schon, dass meine RGB-Led defekt ist. Nach erneutem überprüfen mit Day16 konnte ich die LED mir dem richtigen Ausgang definieren, seitdem werden alle Farben von der LED korrekt dargestellt.

  19. Tobias

    Und was mache ich morgen?
    Danke für den Kalender, jedes Projekt hat bei mir funktioniert und hat Spass gemacht.

    Das Problem ist nur, morgen wird mir das experimentieren fehlen.

    Danke

    1. generalovernight

      Tobias schrieb:

      „Und was mache ich morgen?“

      … ein Projekt für den Wettbewerb entwerfen?

      http://www.elektronik-labor.de/Lernpakete/Kalender15/Contest15.html

  20. Peter

    Thank you very much for the 24 projects. I can only imagine the effort it has cost to make this work. I had a lot of fun, and used each daily project to show to my kids and educate them a little as well. Can’t wait to hear their response tomorrow on the Jingle Bells melody :).

    Also thanks for providing every project in English as well! Frohe Weihnachten!

  21. Martin

    Vielen Dank für den tollen Adventskalender. Nach meinen anfänglichen Schwierigkeiten mit Linux und nach dem Umstieg auf Windows haben bei mir fast alle Projekte sehr schnell funktioniert. Einzig das Projekt mit der Infrarot-Fernbedienung hat nicht geklappt. Wäre aber sicher auch irgednwie gegengen wenn ich noch etwas mehr Geduld gehabt hätte.

    Der Umfang der einzelnen Projekte war für mich genau richtig. Es hat mich jeden Tag so ca. 30 bis 60 Minuten beschäftigt. Mehr Zeit, um mich in den Programmcode einzuarbeiten, hätte ich gar nicht gehabt. Dennoch wäre eine ausführliche Kommentierung im Code hilfreich für die, die jetzt weitermachen wollen. Vlt kann jemand für das letzte Projekt, dass am umfangreichsten ist, einen kommentierten Code zur Verfügung stellen?

    Die Verarbeitung des Kalenders finde ich allerdings sehr billig. Die Pappkarton ist nicht genau passend auf die Kunststoffschale aufgeklebt. Zudem ist die Perforation nicht gut, sodass es jeden Tag aufs neue eine Herausforderung war das Türchen aufzubekommen ohne den ganzen Kalender zu zerreißen. An Tag 21 hat sich dann zudem der Karton komplett gelöst und ich hatten plötzlich den NTC von Tag 24 in der Hand ohne dass das Türchen offen war. Schnell war mir klar, dass es nicht am Tunneleffekt sondern an der schlechten Verklebung lag. Hier könnte Conrad nochmal nachlegen.

    Alles in allem war ich aber sehr zufrieden und ich hab mich jeden Tag aufs neue auf das Projekt gefreut. Ich würde mich freuen wenn es nächstes Jahr einen ähnlichen Kalender geben würde.

    Ich wünsch allen Frohe Weihnachten!

    Viele Grüße

    Martin

    1. generalovernight

      Da das nicht mein erster Adventskalender war, habe ich den Bogen inzwischen raus. Die Türchen gehen sauberer auf, wenn man sie am Rand entlang nach innen drückt. Wenn man sie komplett reindrückt bekommt man sie aber ohne Werkzeug schwer wieder heraus. Also entweder erst die obere oder untere Hälfte eindrücken, dann heruasziehen und anschließend die zweite Hälfte eindrücken oder einen Schraubenzieher o.ä. zu Hilfe nehmen.

      HTH für’s nächste Jahr

    2. generalovernight

      … und was das Windows, betrifft: mag sein, wenn man hauptsächlich Windows kennt, aber mir hat Linux die Installation zusätzlicher Software mit weiteren möglichen Fehlerquellen erspart, weil ich wusste, wie ich die Aufgaben mit den Standardmitteln des Betriebssystems schnell und einfach löse.

    3. Frank

      Bei mir tat ein Cutter gute Dienste, so dass mein Kalender vom ersten bis zum letzten Tag wie ausdem Ei gepellt aussah.

  22. RainerK

    Danke für den schönen Kalender, ich hab‘ alles mit Pretzelboard und Teilen aus der Bastelkiste nachgebaut. Es hat wunderbar geklappt. Nun bin ich auf den Wettbewerb gespannt.

  23. Joerg

    Nochmal vielen Dank für den 1A Kalender und die spannenden und lehrreichen Tage. Bin gespannt auf nächstes Jahr. Frohe Weihnachten an alle!

  24. Leuchten

    Hallo!
    Bei mir spinnt der NTC herum. Alles andere geht, aber er zeigt die ganze Zeit nur 327.83 an. Egal was ich am Poti herumdrehe, er zeigt nur dasselbe an. Meine Vermutung: Kaputt????? Wisst ihr da was?

    1. Franz

      Nochmal die Verkabelung überprüfen.
      war bei mir auch am Anfang, bis ich herausfand, dass das Poti gar nicht angeschlossen war (hatte mich um eine reihe vertan)

  25. bernd

    der kalender hat sehr viel spaß gemacht! Ich hoffe nächstes Jahr gibt es wieder einen. mal sehen was das nächste jahr an neuen themen bringt.
    ich könnte mir gut vorstellen, dass aus diesem kalender ein Conrad-experimentierkasten werden könnte.
    zum abschluss: thingspeak ist opensource und kann auf einem eigenen server installiert werden. dann kann man zwar cheerlights nicht verwenden, aber man hat alles in den eigenen händen. ich würde es gut finden, wenn der weg mit dem eigenen server aufgezeigt würde.

  26. Christoph

    Was mache ich denn mit den pitches aus
    Das Programm: Day24_Christmas ?
    Beim Kompilieren werden sie nicht gefunden und bewirken einen fatal error.

    1. nerd

      Sofern pitches.h und Day24_Christmas.ino sich im gleichen Ordner befinden, und #include „pitches.h“ nicht verändert wurde (nicht in Pfeilklammern) sollte dies funktionieren.

    2. Niklas

      Gleiches problem…

      1. Niklas

        Habe es hinbekommen:
        Ich musste im Programm auf Sketch -> Bibliothek einbinden -> .ZIP Bibliothek hinzufügen -> dann den RGBLED Ordner (!) auswählen und hinzufügen. Der Ordner befindet sich im libraries-Ordner des heutigen Downloads.

        1. nerd

          Geht auch einfacher wenn man sich an die Anleitung zu Tag 23 hält: Kopie der Library RGBLED.

    3. Klaus

      Hast Du vielleicht nicht alles entpackt? Im gleichen Verzeichnis wie die .ino muss sich auch die pitches.h befinden.

  27. hugoboss

    Frohe Weihnachten allen zusammen,
    es hat mega viel Spaß bereitet und war ein tolles interessantes Projekt.
    Dankeschön….
    Und jetzt muss ich Geschenke einpacken :-)

  28. hugoboss

    Hinweis:
    Body:
    api_key=[YOUR TALKBACK ID]&command_string=Alarm&position=1

    Korrekt ist:
    Body:
    api_key=[YOUR TALKBACK KEY]&command_string=Alarm&position=1

    1. Marco

      Danke

    2. Dirk

      Kannst du bitte die Zeile mit angeben.

      Vielen Dank.

      1. Schlork

        Das findest die in der obigen Beschreibung zur Konfiguration bei ThingSpeak („Achten Sie darauf…“).

  29. MC

    Hallo,
    ich wollte mich auf diesem Wege für die tollen und interessanten Projekte in dem Kalender bedanken. Es hat viel Spaß gemacht, und ich habe auch einiges lernen können.
    Obwohl es sicher auch so schon viel Arbeit war, die Projekte zu erstellen, wäre es noch schön gewesen, wenn der Code der Sketches sauber kommentiert gewesen wäre, so dass man schneller verstehen könnte, was genau hinter den einzelnen Zeilen steckt.
    Da große Teile der Sketches eh oft identisch waren, wäre der Aufwand hierfür sicher nicht zu groß gewesen.
    Und noch ein Wort an CONRAD:
    Die Qualität des Kalenders hätte für den Preis sicher besser sein können. Aufgrund der schlechten Perforation ließen sich manche Türchen recht schlecht öffnen, was dann dazu führte, dass sich die gesamte Pappe von Plastik löste, weil die Verklebung auch nichts gehalten hat. Also in Sachen Qualität hätte ich von CONRAD etwas mehr erwartet.
    Frohe Weihnachten an alle, MC.

  30. hugoboss

    ACHTUNG in Zeile:
    if (configStation(SSID, PASSWORT)) {

    muss das ‚T‘ in ‚D‘ geändert werden:
    if (configStation(SSID, PASSWORD)) {

  31. generalovernight

    Herzlichen Dank! Ab dem 19. haben mich die Experimente zwar nicht mehr interessiert – wenn ich eine Lampe in meiner Wohnung schalten oder eine Temperatur ablesen will, dann brauche ich dazu kein Internet und keinen fremden Server – aber nachdem ich Tag 18 zum Laufen gebracht und etwas modifiziert habe, kann ich endlich meinen Beamer vom Rechner ausschalten und brauche die blöde Fernbedienung nicht mehr :-)

    Natürlich ist dabei auch das WLAN überflüssig, wie man einen Taster an den nano klemmt habe ich hier ja auch gelernt und das ganze sollte wohl ohne Probleme auf einen normalen Arduino nano übertragbar sein. Alles in allem hat sich der Kalender für mich voll gelohnt.

    Was noch zu wünschen bleibt ist, dass beim Fabian ein englisches Wörterbuch unterm Weihnachtsbaum liegt ;-)

    Für alle, die auch weiterhin Webseiten basteln wollen, möchte ich noch die Seite https://selfhtml.org/ empfehlen. Dieses Standardwerk zu HTML existiert bereits seit dem letzten Jahrtausend ;-) und enthält neben einer detailierten Dokumentation aller Elemente und Konzepte, die irgendwie mit Webseiten zu tun haben, auch Einführungen für Anfänger – und das ganze steht jedem kostenlos und ohne Anmeldung zur Verfügung.

    Die Webseiten der IoT-Adventskalenders-Programme mögen zwar den Eindruck erweckt haben, es sei nicht so wichtig, Webseiten korrekt zu programmieren. Das liegt daran, dass die fetten Desktop-Browser fast jeden HTML-Code irgendwie darstellen können, egal wie viele Fehler er enthält. Die Betonung liegt hier auf „irgendwie“, man sollte sich dann nicht wundern, wenn die Seite nicht so aussieht, wie man sich das vorgestellt hat. Eine Überraschung erlebt man auch dann, wenn man einmal versucht die Seite zum Beispiel auf einem Raspi zu lesen, wo man eben keinen fetten Desktop-Browser zur Verfügung hat.

    Die meisten Fehler in den HTML-Seiten des Adventskalender sind aber sehr leicht zu entdecken, wenn man sich einmal die grundlegenden Eigenschaften eines HTML-Dokuments anschaut: Es ist heirarchisch aufgebaut und die meisten HTML-Elemente bestehen aus einem öffnenden und einem schließenden Tag sowie einem Inhalt dazwischen. Abgesehen vom äußersten ist daher jedes HTML-Element in einem anderen enthalten und es muss auch geschlossen werden, bevor das äußere Element geschlossen wird.

    Ein HTML-Code wie

    ≤head≥
    ≤center≥
    ≤title≥...≤/title≥
    ≤/head≥
    ≤body≥
    ...
    ≤/center≥
    ...

    kann daher grundsätzlich nicht richtig sein (abgesehen davon, dass ein Center-Tag im HTML-Head ohnehin sinnlos ist und die Formatierung mit Mitteln wie Center, Font, etc. sowas von 90er-Jahre ;-). Bestenfalls wird das ganze als zwei unvollständige HTML-Elemente interpretiert, eins das nicht geschlossen ist und eins, dem das öffnende Tag fehlt. Wie das ganze dann dargestellt (oder komplett ignoriert) wird liegt dann im Ermessen des Browsers bzw. denjenigen, der ihn programmiert haben.

    Damit wünsche ich allen hier ein frohes Weihnachtsfest und immer eine handbreit freie Bytes auf dem nanoESP-Heap.

    PS: Dieses kleine Perl-Skript rechnet den HTML-Quelltext nicht nur in die Byte-Darstellung um, sondern entfernt auch noch führende Leerzeichen und Zeilenendekennzeichnungen. Damit lassen sich bei den HTML-Seiten hier leicht 200 Bytes im Sketch einsparen (die Spitzen Klammern habe ich wieder durch „≤“ und „≥“ ersetzt.

    my ($i,$len)=0,0;
    while(≤≥) {
    my @chars = split //;
    my ($sol,$cr) = 1,0;

    $len += scalar @chars;
    CHAR:
    for my $char (@chars)
    {
    # skip over leading white space
    unless ($sol and $char =~ /\s/)
    {
    $cr = 1, next CHAR if $char eq "\r";
    $cr = 0, $sol = 1, next CHAR if $cr and $char eq "\n";
    $sol = 0;
    print "," if $i++;
    print ord($char);
    }
    }
    }
    printf STDERR "read %d, wrote %d chars\n", $len, $i;

  32. Bitbeißer

    Ich hatte mit den Keys und ID´s so meine Probleme. Hier meine Zuordnung.
    #define SSID „[Your SSID]“ //* Name des Heimnetzes / Router
    #define PASSWORT „[Your Password]“ //* Passwort des Heimnetzes / Router
    #define ThingSpeakKEY „[Your Key]“ //* Write API Key FireAlarm
    #define TalkBackKEY „[Your Key]“ //* API Key TalkBack Alarms
    #define TalkBackID „[Your ID]“ //* ID des TalkBack Alarm

Schreiben Sie einen Kommentar

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