Mit IoT Tweets immer auf dem aktuellen Stand bleiben

Internet of Things mit Java 8 und TinkerForge, Teil 8

Sven Ruppert
© S&S Media

Sensorwerte zu erfassen und auf dem Laptop zu Hause anzeigen zu können ist das eine. Wie aber kommt man ohne große Mühen an die Daten, wenn man unterwegs ist? Heute werden wir uns damit beschäftigen, wie die Sensorwerte per Twitter zugänglich gemacht werden können.

Was wäre IoT ohne Internet? Recht wenig. Aus diesem Grund werden wir heute die erste Verbindung zur großen weiten Welt herstellen. Ein Dienst, der sich sehr gut dafür eignet, ist Twitter. Hier werden Kurznachrichten in einer temporalen Abfolge ausgegeben und archiviert. Eigentlich genau das, was wir für unsere Wetterstation gebrauchen können. Wie also verbinden wir nun die beiden Welten?

Ein einfaches Beispiel

Aus den vorangegangenen Teilen dieser Serie wissen wir, dass es recht einfach ist, in regelmäßigen Abständen einen Messwert aus dem Sensor zu erhalten (Listing 1). Ebenfalls haben wir mittlerweile die Möglichkeit, einen Raspberry Pi als Recheneinheit zu verwenden, um die Sensorwerte zu verarbeiten. Dank geringer Stromkosten kann ein 24/7-Betrieb auf diese Weise erreicht werden. Da der Raspberry Pi im lokalen Netzwerk eingebunden ist, kann auch eine Verbindung zur großen weiten Welt hergestellt werden. 

public static final String HOST = "192.168.0.200";  //wetterstation
  public static final int PORT = 4223;
  private static int callbackPeriod = 5000;

final Temperature temperature = new Temperature("dXj",
                                            callbackPeriod, PORT, HOST);
    temperature.bricklet().addTemperatureListener(sensorvalue -> {
      final double tempNorm = sensorvalue / 100.0;
      final String text = LocalDateTime.now() + " - Temp  : " 
                            + tempNorm + " °C";
      System.out.println("text = " + text);
    });

//    new Thread(temperature).start();
    temperature.run();

Wie man als Plattform den Raspberry Pi verwendet, ist in dem Artikel „Internet of Things mit Java 8 und TinkerForge, Teil 6“ erklärt und kann hier gelesen werden.

Nun nehmen wir an, dass wir anstelle eines System.out.println(..) die Methode tweet(..) aufrufen. Schon ist der Messwert auf die Reise gesendet. Wie genau sieht also die Methode tweet(..) aus?

Tweet(..)

Um mit Java auf das Twitter API zuzugreifen, gibt es ein Projekt mit dem Namen Twitter4J. Dieses ist unter http://twitter4j.org zu finden. In diesem Projekt sind alle notwendigen Methoden vorhanden, die wir für unser Projekt heute benötigen. Um das API einzubinden, kann man entweder den Quelltext direkt in das Projekt kopieren oder es per Maven einbinden (Listing 2). 

       <dependency>
            <groupId>org.twitter4j</groupId>
            <artifactId>twitter4j-core</artifactId>
            <version>[4.0,)</version>
        </dependency>
        <dependency>
            <groupId>org.twitter4j</groupId>
            <artifactId>twitter4j-media-support</artifactId>
            <version>[4.0,)</version>
        </dependency>

Jetzt muss eine App (apps.twitter.com) in Twitter eingerichtet werden, damit die für die Authentifizierung notwendigen Schlüssel erzeugt werden. Mittels dieser Schlüssel kann der Verbindungsaufbau erfolgen. Es ist ratsam, einen weiteren Twitter-Account anzulegen, damit man mit den Testnachrichten nicht seinen realen Followern auf die Nerven geht. Ebenfalls kann man mit einem weiteren Account später eine 1-zu-1-Kommunikation zu seinem Raspberry Pi aufbauen.

Mit den Schlüsseln erzeugen wir eine Instanz der Klasse ConfigurationBuilder (Listing 3) und verwenden diese, um in der TwitterFactory einen Twitter-Handle zu bekommen. 

public class TwitterFactory {

  private twitter4j.TwitterFactory tf;

  public TwitterFactory() {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
        .setOAuthConsumerKey("xxxxxxxx ")
        .setOAuthConsumerSecret("xxxxxxxx")
        .setOAuthAccessToken("xxxxxxxx ")
        .setOAuthAccessTokenSecret("xxxxxxxx ");
    tf = new twitter4j.TwitterFactory(cb.build());
  }
  public Twitter createTwitter(){ return tf.getInstance();}
}

final Status status = twitter.updateStatus("IoT RapidPM in online soon..");
System.out.println("status.getText() = " + status.getText());

Nun können wir beginnen, Nachrichten zu versenden, was wir mittels der Methode twitter.updateStatus(..) erreichen. Genau hier senden wir unsere Messwerte.

Fazit

Dank des API Twitter4J können wir sehr einfach auf die Infrastruktur zugreifen und diese für die Kommunikation der eigenen Geräte verwenden. In den nächsten Teilen zeige ich Ihnen, wie und was man alles damit anstellen kann. Für die Android-Entwickler unter Ihnen werde ich in einem der nächsten Teile eine Anbindung darstellen.

Open-Source-Entwickler sind herzlich eingeladen, sich hierbei einzubringen. Wer Interesse hat, meldet sich bitte direkt bei mir.

Auch bei Ideen, Anregungen oder Fragen bitte einfach melden: Twitter: @SvenRuppert

Stay tuned. Happy coding!

P.S. Für diesen Artikel habe ich den TwitterAccount @NixFolgen eingerichtet. Wer also garantiert sinnlose Meldungen lesen möchte … 😉

Die Quelltexte zu diesem Text sind unter [1] zu finden. Wer umfangreichere Beispiele zu diesem Thema sehen möchte, dem empfehle einen Blick auf [2]. 

Geschrieben von
Sven Ruppert
Sven Ruppert
Sven Ruppert arbeitet seit 1996 mit Java und ist Developer Advocate bei Vaadin. In seiner Freizeit spricht er auf internationalen und nationalen Konferenzen, schreibt für IT-Magazine und für Tech-Portale. Twitter: @SvenRuppert
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: