appicals auf dem Tinkerforge System

Tinkerforge ist eine deutsche Firma, die embedded Hardware für eine Vielzahl von Anwendungsfällen anbietet. Das Besondere ist die Bereitstellung von Quellcode in nahezu allen wichtigen Programmiersprachen, um die Sensoren und Aktoren einfach in eigenen Projekten einsetzen zu können. Tinkerforge beschränkt sich dabei auf den LowLevel Zugriff und harmoniert daher hervorragend mit dem appicals System, welches einfach auf die existierende API aufgesetzt wird und Features wie Auto-Discovery, Smartphone Zugriff, Regeln oder Logging generalisiert nachliefert.

Vorbereitung

Die Tinkerforge-Library und die entsprechenden appicals Geräte sind Teil des normalen Java-Stacks, es ist also kein Extra-Download notwendig. Der Beispielcode arbeitet mit der Tinkerforge Wetterstation zusammen, diese muss also über Tinkerforge bestellt werden und verfügbar sein. Bei einer Aktualisierung des Tinkerforge-Systems kann die Tinkerforge.jar im lib-Ordner einfach durch die aktualisierte Version ersetzt werden.

Es gibt zwei einfache Wege, die Wetterstation appicals-fähig zu machen. Entweder über den Anschluss via USB an einen Windows-PC oder an einen RaspberryPi. Installieren Sie Tinkerforge wie vorgesehen, der entsprechende Hintergrunddienst bzw. der Tinkerforge Daemon müssen also bereits laufen. Starten Sie nun SCFTinkerforgeWeatherStationEntity.bat unter Windows bzw. SCFTinkerforgeWeatherStationEntity.sh auf dem RaspberryPi oder unter Linux. Anschließend sind die von der Wetterstation gelieferten Daten über appicals verfügbar, sie können die Werte also z.B. über den ValueLogger speichern, mit der appicals-App auf dem Smartphone anschauen, die Historie über den HistoryServer anschauen oder die Werte als Trigger für angelegte Regeln verwenden.

Mapping der Tinkerforge APIs auf appicals

Prinzipiell besteht der Tinkerforge spezifische Java-Code lediglich aus einem Übersetzen der rohen Werte in die entsprechenden existierenden appicals-Dienste. Anbei ein kleiner Quellcode-Ausschnitt, der das Prinzip zeigt und auch für andere Tinkerforge-HW herangezogen werden kann.

public class WeatherListener implements
  IPConnection.EnumerateListener,
  IPConnection.ConnectedListener,
  BrickletAmbientLight.IlluminanceListener,
  BrickletHumidity.HumidityListener,
  BrickletBarometer.AirPressureListener
{
  private IPConnection          ipcon                = null;
  
  ...

  /** appicals Device */
  private SCFLocalWeatherDevice localWeatherDevice   = null;

  public WeatherListener(IPConnection ipcon)
  {
    this.ipcon = ipcon;
  }
  
  ...

  /* (non-Javadoc)
   * @see com.tinkerforge.BrickletBarometer.AirPressureListener#airPressure(int)
   */
  public void airPressure(int airPressure)
  {
    // read temperature
    int temperature;
    try
    {
      temperature = brickletBarometer.getChipTemperature();
    } catch (com.tinkerforge.TinkerforgeException e)
    {
      System.out.println("Could not get temperature: " + e);
      return;
    }
    // show on LCD
    if (brickletLCD != null)
    {
      String text = String.format("P:%4.0f hPa", airPressure / 1000.0);
      try
      {
        brickletLCD.writeLine((short)3, (short)0, text);
      } catch (com.tinkerforge.TinkerforgeException e)
      {
      }
      // 0xDF == ° on LCD 20x4 charset
      text = String.format("T:%3.0f %cC", temperature / 100.0, 0xDF);
      try
      {
        brickletLCD.writeLine((short)3, (short)11, text);
      } catch (com.tinkerforge.TinkerforgeException e)
      {
      }
    }
    // push into appicals
    if (localWeatherDevice != null)
    {
      localWeatherDevice.getAirPressureService().setAirPressure(airPressure / 1000);
      localWeatherDevice.getTemperatureService().setTemperature((float)(temperature / 100.0));
    }
  }

  ...

Wie man sieht, wird zunächst der normale Tinkerforge-Code ausgeführt, welcher die Daten lokal auf dem Display anzeigt. Zusätzlich werden die gemessenenen Werte an die localWeatherDevice-Klasse weitergeleitet, welche bei Änderungen automatisch die appicals-Events generiert und sich um die Geräteverwaltung kümmert. So einfach werden Geräte in das appicals Netzwerk eingebunden!