Mit Teamviewer IoT eine Indoor-Farm überwachen

© Alexander Raths, 123RF

Laubenpieper

Mit Teamviewer IoT passt der Remote-Desktop-Spezialist seine Software an die Anforderungen im Internet der Dinge an. Dabei bleibt der Raspberry Pi ein wichtiges Element.

Will man Gemüse und Blumen in einem Gewächshaus aufziehen, erfordert das die passenden Rahmenbedingungen. Ein Raspberry Pi mit Teamviewer IoT [1] hilft Ihnen dabei, alle Parameter zu überwachen. Das ganze System benötigt dabei eine stabile Basis.

Im Test kommt dazu ein aktuelles Raspbian Lite zum Einsatz, das den Vorteil hat, auf eine hier überflüssig aufwendige grafische Oberfläche von vornherein zu verzichten. Sie laden das Image von der Projekt-Homepage [2] und übertragen es mit einem Tool Ihrer Wahl auf eine SD-Karte [3].

Nun booten Sie den RasPi von dieser Karte und bringen als Erstes die Installation auf den neuesten Stand. Anschließend installieren Sie Mosqitto [4] als MQTT-Client. Zusätzlich installieren Sie eine Bibliothek, die Sie zum Betrieb von Teamviewer IoT benötigen. Im weiteren Verlauf des Projekts benötigen Sie außerdem die Bibliothek WiringPi [5]. Alle nötigen Befehle fasst Listing 1 zusammen.

Listing 1

 

$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install libavahi-client3 mosquitto-clients wiringpi

Teamviewer einrichten

Als zentrale Komponente von Teamviewer IoT fungiert ein Webinterface [6]. Um damit zu arbeiten, benötigen Sie zuerst ein entsprechendes Konto. Das erstellen Sie, indem Sie auf der Seite auf Konto erstellen klicken und den Anweisungen folgen (Abbildung 1). Falls Sie schon einen Teamviewer-Account haben, verwenden Sie ihn direkt.

Nach dem Registrieren sehen Sie die Startseite der Teamviewer-Applikation. Um nun einen Raspberry Pi als Gerät hinzuzufügen, klicken Sie auf add device (Abbildung 2). Die notwendigen Schritte zum Anbinden eines Geräts beschreibt die Applikation verständlich und detailliert.

Abbildung 1: Teamviewer IoT verfügt über ein eigenes Portal, über das Sie die angeschlossenen Geräte per Webbrowser verwalten.
Abbildung 2: Nach der Anmeldung im Portal haben Sie die Möglichkeit, neue Geräte hinzuzufügen, deren Daten Sie erfassen und auswerten möchten.

Neuer Sensor

In der aktuellen Version von Teamviewer IoT sprechen Sie die komplette API über den MQTT-Client Mosqitto an. Dahinter verbirgt sich eine weit verbreitete Implementation des MQTT-Protokolls. Die API erlaubt nur verschlüsselte und autorisierte, über Zertifikate abgesicherte Verbindungen. Daher müssen Sie eine Zertifikatsanforderung erstellen, aus der die API die entsprechenden Daten für den verschlüsselten Datentransfer generiert. Die komplette Kommunikation mit der API erfolgt über MQTT.

Die API kennt die Komponenten Connector, Sensor und Metric. Abbildung 3 verdeutlicht, wie diese zusammenhängen. Sie sprechen dabei jede Komponente über eine ID in Form eines 16-Byte-Hex-Werts an. Aufgrund des hierarchisch aufgebauten Systems müssen Sie beim Zugriff auf eine Komponente auch die IDs aller übergeordneten Elemente angeben.

Abbildung 3: Die Kommunikation über die API von Teamviewer IoT setzt voraus, dass Sie die Komponenten Connector, Sensor und Metric verwenden.

Darunter leidet schnell die Übersicht. Um den Überblick zu wahren und Schreibarbeit zu sparen, legen Sie am besten alle kryptischen oder langen Werte in Shell-Variablen ab. Diese können Sie später in den Kommandos verwenden. Achten Sie darauf, dass die folgenden Kommandos nur dann fehlerfrei funktionieren, wenn Sie alle Variablen akkurat gesetzt haben.

Im ersten Schritt erstellen Sie eine Zertifikatsanforderung (Listing 2, erste Zeile). Tragen Sie alle nötigen Werte für den Request ein; die Extra-Attribute dürfen Sie ignorieren. Um das Zertifikat über die API zu holen, benötigen Sie den SHA256-Hash des Requests (zweite Zeile). Zu guter Letzt speichern Sie den Hash in der Shell-Variablen hash (letzte Zeile).

Listing 2

 

$ openssl req -nodes -new -newkey rsa:2048 -sha256 -out csr.pem
$ sha256sum csr.pem
$ export hash=SHA256-Hash

Nun verwenden Sie ein zweites Terminal. Im ersten öffnen Sie einen MQTT-Subscriber, um das Zertifikat zu empfangen. Im zweiten Fenster setzen Sie die Anfrage für das Zertifikat ab. Achten Sie darauf, dass die Variable $hash in der Shell bekannt ist, die Sie gerade verwenden.

Speichern Sie dazu alle Export-Kommandos in eine Datei. So setzen Sie die Variablen immer auf den korrekten Wert. Die Datei heißt im Test tvenv.sh (siehe Kasten "Vererbt"). Den Ort für das Teamviewer-Zertifikat speichern Sie am besten ebenfalls in einer Shell-Variable (Listing 4, erste Zeile). Das gestaltet die folgenden Kommandos kürzer und leserlicher.

Vererbt

Variablen, die Sie zur Laufzeit setzen, gelten in einer Shell wie der Bash nur für den aktuellen Prozess. Möchten Sie (wie in diesem Beispiel) Werte in einem anderen Prozess nutzen, teilen Sie dieser Shell dies explizit mit. Dazu bietet es sich etwa an, eine Datei einzulesen. Um also die Variablen wieder aus der Datei in die Shell zu bekommen, nutzen Sie das Kommando source (Listing 3). Die vereinfachte Schreibweise lautet . tvenv.sh (Punkt, Leerzeichen, Dateiname).

Listing 3

 

$ echo $hash
$ source tvenv.sh
$ echo $hashSHA256-Hash

Listing 4

 

$ export cafile=/var/lib/teamviewer-iot-agent/certs/TeamviewerAuthority.crt
$ mosquitto_sub -h localhost -p 1883 --cafile $cafile -t /certBack/$hash

In einem Fenster, in dem alle Shell-Variablen definiert sind, starten Sie nun den MQTT-Subscriber (Listing 4, letzte Zeile). In einem zweiten Fenster, ebenfalls mit allen Shell-Variablen, setzen Sie dann den Request zum Erstellen eines Zertifikats ab (Listing 5, Zeile 2). Kurz nachdem Sie den Request abgesendet haben, erscheint im ersten Fenster das Zertifikat. Dieses kopieren Sie und speichern es in einer Datei, die im Beispiel myConnector.crt heißt.

Listing 5

 

$ . tvenv.sh
$ mosquitto_pub -h localhost -p 1883 --cafile $cafile -t /createConnector -f csr.pem
$ openssl x509 -noout -subject -in myConnector.crt -nameopt multiline | grep commonName | sed -r 's/commonName/ /g' | sed -r 's/=/ /g' | xargs | tr -d " \t\n\r"Connector-ID
$ export conID=Connector-ID

Nun parsen Sie aus dem Connector-Zertifikat die ID des Connectors heraus. Diese benötigen Sie später für alle Zugriffe auf die API. Daher legen Sie sie ebenfalls in einer Shell-Variable ab (Listing 5, Zeile 3 bis 7).

Im nächsten Schritt legen Sie den eigentlichen Sensor an. Er darf mehrere Metriken liefern; in unserem Beispiel stellt er alle drei Metriken der Indoor-Farm bereit. Wie gehabt starten Sie zuerst einen Subscriber, um das Ergebnis über MQTT zu empfangen (Listing 6, Zeile 2). Wenn Sie den Subscriber starten, liegt das Ergebnis noch nicht vor; erst mit dem Request stehen die Daten bereit.

Listing 6

 

$ . tvenv.sh
$ mosquitto_sub -h localhost -p 8883 --cert myConnector.crt --key privkey.pem --cafile $cafile -t /v1.0/$conID/sensor/inbox
{
  "name" : "Farm",
  "sensorId" : "Sensor-ID"
}
$ mosquitto_pub -h localhost -p 8883 --cert myConnector.crt --key privkey.pem --cafile $cafile -t /v1.0/$conID/sensor/create -m "{\"name\":\"Farm\"}"
$ export sensorID=Sensor-ID

Danach erstellen Sie den Sensor (ab Zeile 3). Er erhält wieder eine ID, die Sie in einer Shell-Variable speichern. Die ID erscheint im Fenster der Empfangsseite. Sie kopieren sie von dort einfach wieder in eine Variable. Vergessen Sie dabei nicht, alle Export-Kommandos in tvenv.sh anzulegen.

Bei einem anschließenden Blick auf die Weboberfläche von Teamviewer IoT unter dem Menüpunkt Devices fällt Ihnen vermutlich auf, dass ein neuer Sensor dazugekommen ist. Da er bis jetzt über keine Metriken verfügt, lässt er sich noch nicht abfragen. Die notwendigen Metriken erstellen Sie jedoch schnell.

Dazu verbinden Sie sich zunächst, wie bei allen Komponenten, auf den Kanal für den Empfang. Damit bekommen Sie die IDs der Metriken (Listing 7, Zeile 2 bis 18). Nun legen Sie auf dem Farm-Sensor drei neue Metriken an: Bodenfeuchte, Temperatur und Licht (Zeile 19). Aus der API erhalten Sie die drei dazugehörigen IDs, die Sie wie allen anderen Variablen in die Datei tvenv.sh speichern (Zeile 20 bis 22).

Listing 7

 

$ . tvenv.sh
$ mosquitto_sub -h localhost -p 8883 --cert myConnector.crt --key privkey.pem --cafile $cafile -t /v1.0/$conID/sensor/$sensorID/metric/inbox
[
  {
   "matchingId" : "1",
   "metricId" : "Feuchte-ID"
  },
  {
   "matchingId" : "2",
   "metricId" : "Temperatur-ID"
  },
  {
   "matchingId" : "3",
   "metricId" : "Licht-ID"
  }
]
new metrics created
$ mosquitto_pub -h localhost -p 8883 --cert myConnector.crt --key privkey.pem --cafile $cafile -t /v1.0/$conID/sensor/$sensorID/metric -m "{\"metrics\" : [{\"matchingId\" : \"1\", \"valueUnit\": \"NoSI.Dimensionless.PERCENT\", \"name\" : \"Bodenfeuchte\" },{\"matchingId\" : \"2\",\"valueUnit\": \"SI.Temperature.CELSIUS\", \"name\" :\"Temperatur\" },{\"matchingId\" : \"3\", \"valueType\" : \"integer\" , \"valueAnnotation\": \"Licht\", \"name\" : \"Licht\"}]}"
$ export FeuchteID=Feuchte-ID
$ export TempID=Temperatur-ID
$ export LichtID=Licht-ID

In Teamviewer IoT sehen Sie jetzt die neuen Metriken, die Sie mit einem Klick auf Pin to dashboard ins Dashboard kopieren. Dort ordnen Sie die Charts nach Belieben an. Abbildung 4 zeigt, wie das Dashboard im Test aussah – es waren schon einige Testeinträge für den Temperatursensor vorhanden.

Abbildung 4: Über das Dashboard haben Sie die Werte aller Sensoren im Blick.

Nun ist die Umgebung vollständig aufgebaut, und Sie fangen damit an, Messwerte in die API zu schicken. Das Kommando aus Listing 8 sendet einen Wert von 22 Grad Celsius für den Temperatursensor. Der Messwert erscheint mit einer kleinen Verzögerung auf dem Dashboard. Die Dokumentation der API, die alle Möglichkeiten ausführlich beschreibt, finden Sie online [7].

Listing 8

 

$ . tvenv.sh
$ mosquitto_pub -h localhost -p 8883 --cert myConnector.crt --key privkey.pem --cafile $cafile -t /v1.0/$conID/sensor/$sensorID -m "{\"metrics\" : [{\"metricId\" : \"$TempID\", \"value\" : 22 }]}"

Diesen Artikel als PDF kaufen

Express-Kauf als PDF
Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.