Unser Weihnachtsbaum zwitschert uns was! 2. Teil: Mit Temp(bo)o in Netz

Send to Kindle

Von Anja Schlenker und Mattias Schlenker

Horst von Forst’s “Herrchen” haben sich entschieden, ihm eine Stimme via Twitter zu verleihen (getriggerte Telefonanrufe erschienen uns dann doch zu…aufdringlich). Mit Temboo (das ist nicht etwa sächsisch für “Tempo”, aber dazu unten mehr) kann die Arduino-Automation zum Wasserstand direkt Kommunikationsplattformen wie z.B. Twitter oder Google+ angesprechen.

Tipp: Falls Sie einen Arduino Yún bestellt haben und nun in Betrieb nehmen möchten, achten Sie darauf, dass die Arduino-Entwicklungsumgebung wenigstens in Version 1.5 vorhanden ist, nur diese kennt den Yún und die mit ihm neu eingeführten APIs (Application Programming Interfaces definieren die Schnittstellen zwischen verschiedenen Softwarekomponenten)! Werfen Sie außerdem mal einen Blick in unseren Erstkontakt mit dem Yún um zu erfahren, wie Sie Arduino Yún mit einem WLAN verbinden.

Loslegen als Twitter-Entwickler

Damit Horst tweeten kann, muss er sich zunächst als Twitter-Entwickler für eine eigene App registrieren. Hierzu müssen Sie die Webseite https://dev.twitter.com/apps aufsuchen, sich mit Ihrem Twitter-Account anmelden und über den Link “Create an application” eine neue Twitter-Anwendung erstellen.

Damit der Weihnachtsbaum twittern kann, muss zunächst ein Entwicklerkonto erstellt werden

Damit der Weihnachtsbaum twittern kann, muss zunächst ein Entwicklerkonto erstellt werden

Im nächsten Reiter müssen Sie unter “Settings” die Rechte der App auf “read and write” setzen – sonst könnten zwar Tweets anderer gelesen, aber keine eigenen abgesetzt werden. Nun noch einmal in den Reiter “Details”, wo Sie ein Access-Token für Ihr Twitter-Konto generieren (wiird dieses als “raed-only” angezeigt, generieren Sie es neu):

Achten Sie auf Schreibrechte und erstellen Sie ein persönliches Token

Achten Sie auf Schreibrechte und erstellen Sie ein persönliches Token

Was ist Temboo?

Temboo ist ein relativ junges Startup, das sich zum Ziel gesetzt hat, die APIs verschiedener populärer webbasierter Dienste unter einer gemeinsamen Abstraktionsschicht zusammenzufassen. So soll es möglich sein, aus eigenen Anwendungen heraus Google+ und Twitter mit fast identischen Funktionen anzusprechen. Mit über einhundert unterstützten APIs ist bei Temboo für viele Einsatzzwecke etwas dabei. Wie wäre es beispielsweise mit der gehackten Registrierkasse, die dank Temboo und eingebautem Arduino Yún bei jedem Zahlungseingang per PayPal den Betrag ausdruckt? Der Temboo-Zugriff ist beim Arduino Yún Teil des APIs, so dass hierfür keine Bibliotheken installiert werden müssen. Allerdings müssen Sie sich auch bei Temboo für ein kostenloses Entwickleraccount anmelden und Tokens für eine eigene App generieren:

In Temboo sollte die App genauso heissen wie bei Twitter

In Temboo sollte die App genauso heissen wie bei Twitter

Erster Tweet – noch ohne Weihnachtsbaum

Unser erstes Codebeispiel basiert auf Temboos Tweet-Beispiel, vereinfacht dieses aber ein wenig. Da es ohne serielle Verbindung ewig im setup()-Loop verweilen müsste, muss der Yún per USB mit dem PC verbunden sein! Im Gegenzug können Sie Fehler – zum Beispiel, wenn kein Tweet abgesetzt werden kann – über die serielle Konsole mitlesen.

#include <Bridge.h>
#include <Temboo.h>

const String TEMBOO_ACCOUNT = "horstvonforst"; // anpassen!
const String TEMBOO_APP_KEY_NAME = "ZwitschernderWeihnachtsbaum"; // anpassen!
const String TEMBOO_APP_KEY = "geheim";
const String TWITTER_ACCESS_TOKEN = "nichtgeheim";
const String TWITTER_ACCESS_TOKEN_SECRET = "geheim";
const String TWITTER_CONSUMER_KEY = "nichtgeheim";
const String TWITTER_CONSUMER_SECRET = "geheim";

void setup() {
  Serial.begin(9600);
  delay(5000);
  while(!Serial);
  Bridge.begin();
}

void loop() { 
  String tweetText("TEST: Der Yun laeuft seit " + String(millis()) + " ms.");
  // Temboo-Objekt initialisieren
  TembooChoreo StatusesUpdateChoreo;
  StatusesUpdateChoreo.begin();
  StatusesUpdateChoreo.setAccountName(TEMBOO_ACCOUNT);
  StatusesUpdateChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
  StatusesUpdateChoreo.setAppKey(TEMBOO_APP_KEY);
  // Temboo mit Twitter verknüpfen
  StatusesUpdateChoreo.setChoreo("/Library/Twitter/Tweets/StatusesUpdate");
  StatusesUpdateChoreo.addInput("AccessToken", TWITTER_ACCESS_TOKEN);
  StatusesUpdateChoreo.addInput("AccessTokenSecret", TWITTER_ACCESS_TOKEN_SECRET);
  StatusesUpdateChoreo.addInput("ConsumerKey", TWITTER_CONSUMER_KEY);    
  StatusesUpdateChoreo.addInput("ConsumerSecret", TWITTER_CONSUMER_SECRET);
  // Tweet absetzen
  StatusesUpdateChoreo.addInput("StatusUpdate", tweetText);
  // Return Code ermitteln
  unsigned int returnCode = StatusesUpdateChoreo.run();
  if (returnCode == 0) {
    Serial.println(":-D Tweet erfolgreich gesendet!");
    StatusesUpdateChoreo.close();
    delay(36000000); // Zehn Stunden warten
  } else {
    Serial.println(":-( Fehler!");
    while (StatusesUpdateChoreo.available()) {
      char c = StatusesUpdateChoreo.read();
      Serial.print(c);
    }
    StatusesUpdateChoreo.close();
    delay(90000); // 90 Sekunden warten
  } 
}

Und so sieht es aus:

Jetzt aber mit Wasser!

Nach dieser Fingerübung können wir den gestrigen Code zur Wasserstandsmessung mit dem Twitter-Code kombinieren. Die Abhängigkeit von der seriellen Schnittstelle entfällt, wodurch der Arduino Yún an beliebigen Stellen in der Wohnung platziert werden kann. Zu beachten ist das Intervall der Tweets: Temboo erlaubt nur 1000 Anfragen pro Monat bei kostenlosen Accounts. So macht es Sinn, bei einem sehr hohen Wasserstand erst nach sechs Stunden oder mehr erneut zu prüfen, bei einem mäßigen nach vier und bei einem kritischen alle zwei Stunden zu warnen. Die als Konstanten definierten Schwellen sind natürlich an Ihre Wasserhärte und die Eintauchtiefe der Elektroden anzupassen. Da Twitter allergisch auf mehrfache Tweets reagiert, schicken Sie doch noch eine zusätzliche Information wie den gemessenen Widerstand mit! Der folgende Quellcode ist nur ein Ausschnitt, so wurde der eigentliche Tweet in eine eigene Funktion ausgelagert. Sie können den gesamten Quellcode aber von unserer Downloadseite herunterladen:

/*
const int maxResist = 10000;
const int critResist = 20000;
*/

void loop() { 
  String tweetText = "";
  digitalWrite(sourcePin, HIGH); 
  delay(1000);     
  sensorValue = analogRead(sensorPin); 
  digitalWrite(sourcePin, LOW);
  unsigned long resist = getResistor(sensorValue);
  unsigned int returnCode = 1;
  if (resist > critResist) {
    tweetText = "Hilfe! Ich verdurste! Gemessener Widerstand: " + String(resist);  
  } else if (resist > maxResist) {
    tweetText = "Ich brauche bald Wasser. Gemessener Widerstand: " + String(resist); 
  } else {
    tweetText = "Alles Prima! Gemessener Widerstand: " + String(resist); 
  } 
  returnCode = tweet(tweetText);
  if (returnCode > 0) {
    delay(120000); // bei Fehler zwei Minuten warten
  } else if (resist > critResist) {
    delay(7200000); // zwei Stunden warten
  } else if (resist > maxResist) {
    delay(14400000); // vier Stunden warten
  } else {
    delay(28800000); // acht Stunden warten
  }
}

Momentan hat der Weihnachtsbaum genug Wasser: