A RedHat-related Blog for Our Partners
Header

Thema unseres vergangenen Avnet Red Hat Stammtisch am 17.11. war IoT. Ziel des Workshops war den Teilnehmern (für die meisten ein Erstkontakt mit der Materie) zu zeigen mit welch einfachen Mitteln und Wissen kleine IoT Projekte zu realisieren sind.

Als Plattform wurde der ESP8266 Chip eingesetzt. Die Teilnehmer waren aufgefordert ein IoT-Projekt mit zur Verfügung gestellten Sensoren (Temperatur, Feuchtigkeit, GPS, Gyro) zu entwickeln und die Daten per HTTP Post auf einen Webserver zu laden, der die Daten in einer MongoDB speichert. Anschliessend wurden die Daten aus der Datenbank ausgelesen und als Graphik auf einem Webserver dargestellt. Alle Online Resourcen liefen auf der Red Hat Openshift Plattform.

Erste Aufgabe war es die Entwicklungsumgebung (wir wählten Arduino) auf den Rechnern zu installieren und mit dem ESP8266 Entwicklungsboard zu verbinden.

img_20161121_131715Anschliessend wurden die ESP8266 und die Sensoren auf den Breadboards verkabelt und mit den entsprechenden Software Libraries eingebunden.

sensorscables

Die Arduino-Plattform stellt die meisten Sketches fix und fertig zur Verfügung und somit sind die Sensoren schnell in das Projekt eingebunden.

Die nächste Herausforderung war die durch die Sensoren gesammelten Daten via HTTP POST auf den bereitgestellten Webserver mit MongoDB hochzuladen.

void post(String group, String sensor, String timestamp, String value)
{
  String postData = "{\"group\": \"" + group + "\", \"sensor\": \"" + sensor + "\", \"timestamp\": \"" + timestamp + "\", \"value\": \"" + value + "\"}";

  Serial.print("connecting to ");
  Serial.println(host);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

Auf dem Webserver lief das Python Eve Plugin, welches einerseits eine einfache und schnell zu implementierende REST-Funktionalität bietet und andererseits eine MongoDB, die die Daten speichert.

def worker_eve():
    app = Eve()
    app.run(host = '0.0.0.0', port=8080)

Ein weiteres Pythonscript auf dem REST-Server generiert aus den gespeicherten Daten die graphische Darstellung der gemessenen Werte.

def worker_makeimage():
    groups = ['a', 'b', 'c', 'd', 'e']
    mongohost = os.getenv('IOT_DB_SERVICE_HOST')

    client = MongoClient('mongodb://iot-db:iot-db@' + mongohost + ':27017/iot-db')
    db = client['iot-db']
    events = db['iot-db']

    while True:
        for group in groups:
            timestamps = []
            values = []

            for event in events.find({'group': group}):
                timestamp = event['_updated']
                timestamps.append(timestamp.strftime('%Y-%m-%d %H:%M'))
                value = event['value']
                values.append(float(value))

            plot(group, timestamps, values)
	time.sleep(60)

Hier der Temperaturverlauf während des Workshops:

group_a

Danke allen Teilnehmern und natürlich auch der Cloudwerkstatt und der IT&Tel, die die Openshift Plattform zur Verfügung gestellt haben.