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.

Vagrant setup on RHEL7

November 21st, 2016 | Posted by Dorian in Avnet General | Technical News - (0 Comments)

Vagrant ist ein Toolset, dass es Entwicklern erlaubt schnell und einfach reproduzierbare und portierbare Umgebungen für Softwareentwicklung zu erstellen. Vagrant gibt es für die Betriebsystem Linux, OSX und Windwos und es unterstützt neben QEUM/KVM u.a. auch Vmware und Virtualbox.

Dieser Guide folgt dem Konzept welches unter


https://access.redhat.com/documentation/en/red-hat-container-development-kit/2.1/installation-guide/#installing_container_development_kit_on_red_hat_enterprise_linux

dargestellt wird. Als Virtualisierungplattform soll natürlich Qemu/KVM zum Einsatz kommen.

Installiert wird auf einem registrierten Red Hat System; hier die Schritte, die zur Registrierung notwendig sind und um die benötigten Repositories zu enablen.


# subscription-manager register --auto-attach --username=user --password=passwd
# subscription-manager repos --enable rhel-server-rhscl-7-rpms
# subscription-manager repos --enable rhel-7-server-optional-rpms

Nach der erfolgreichen Registrierung müssen die Repositories noch eingebunden werden. Für diese Demoinstallation werden die GPG-Checks disabled; was für den Produktionsbetrieb nicht zu empfehlen ist.


# yum-config-manager --add-repo=http://mirror.centos.org/centos-7/7/sclo/x86_64/sclo/
# echo "gpgcheck=0" >> \
/etc/yum.repos.d/mirror.centos.org_centos-7_7_sclo_x86_64_sclo_.repo

Mit dem nachfolgendem System werden die notwendigen Resourcen zur Virtualisierung installiert und anschliessend gestartet.


# yum groupinstall "Virtualization Host"
# systemctl start libvirtd
# systemctl enable libvirtd

Die Installation von Vagrant erfolgt mit:


# yum install sclo-vagrant1 sclo-vagrant1-vagrant-libvirt \
sclo-vagrant1-vagrant-libvirt-doc

Im Centos Repository sind die aktuellsten Versionen von Vagrant vorhanden. Diese sind auf Red Hat derzeit noch nicht supported. Somit erfolgt mit dem nächsten Schritt ein “downgrade” auf die supportete Version.


# yum downgrade sclo-vagrant1-vagrant-1.7.4

Zum Abschluss werden die Resourcen nochmals restartet und die notwendigen Berechtigungen angelegt, sprich jeder User, der das Tool verwenden will, muss in die Gruppe vagrant aufgenommen werden.


# systemctl restart libvirtd
# systemctl restart polkit
# usermod -a -G vagrant

logout / login as username


$ grep vagrant /etc/group
vagrant:x:978:joe
$ id
uid=1001(joe) gid=1001(joe) groups=1001(joe),978(vagrant)
context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ scl enable sclo-vagrant1 bash

Die Installation verlief erfolgreich, wenn der Aufruf des folgenden Kommandos ein Ergebnis liefert.


$ vagrant global-status
id name provider state directory
--------------------------------------------------------------------
There are no active Vagrant environments on this computer! Or,
you haven't destroyed and recreated Vagrant environments that were
started with an older version of Vagrant.

Nun können aus dem Repository https://atlas.hashicorp.com/boxes/search Konfigurationsfiles für virtuelle Maschinen heruntergeladen.

Python 3 in Redhat 7

July 20th, 2016 | Posted by Dorian in Technical News - (0 Comments)

Derzeit ist Python 2.7 immer noch Standard in Red Hat 7 und wird bis zum Ende des Red Hat 7 Live Cycles supported (30. Juni 2024).

Für einige Entwickler ist es aber interessant schon mit einer neueren Version (z.B. Python 3.4) zu testen. Ein Parallelbetrieb von beiden Varianten ist möglich und der Weg dorthin wird im Folgenden beschrieben.

In der RHSCL (Red Hat Software Collection Library) findet man die aktuelle Version, z.B.:

Einbinden der Software Collection Library

Aktivieren der yum-Repositories; die folgenden werden benötigt:

  • rhel-server-rhscl-7-rpms
  • rhel-server-rhscl-7-debug-rpms
  • rhel-server-rhscl-7-source-rpms
  • rhel-server-rhscl-7-eus-rpms
  • rhel-server-rhscl-7-eus-debug-rpms
  • rhel-server-rhscl-7-eus-source-rpms

for i in rhel-server-rhscl-7-rpms rhel-server-rhscl-7-debug-rpms rhel-server-rhscl-7-source-rpms rhel-server-rhscl-7-eus-rpms rhel-server-rhscl-7-eus-debug-rpms rhel-server-rhscl-7-eus-source-rpms
  do subscription-manager repos --enable $i
  done


check ob die Repositories aktiviert sind:

subscription-manager repos| grep -B 3 'Enabled:   1'

----- snip -----
Repo ID: rhel-server-rhscl-7-eus-source-rpms Repo Name: Red Hat Software Collections Source RPMs for Red Hat Enterprise Linux 7 RHEL 7 Server EUS Repo URL: https://cdn.redhat.com/content/eus/rhel/server/7/$releasever/$basearch/rhscl/1/source/SRPMS Enabled: 1 -- Repo ID: rhel-server-rhscl-7-eus-debug-rpms Repo Name: Red Hat Software Collections Debug RPMs for Red Hat Enterprise Linux 7 RHEL 7 Server EUS Repo URL: https://cdn.redhat.com/content/eus/rhel/server/7/$releasever/$basearch/rhscl/1/debug Enabled: 1 --
----- snip -----
yum search python yum -y install rh-python35

Aktivieren der Python 3 Umgebung

bash# scl enable rh-python35 bash
bash# python
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Testen mit beiden Versionen

scl enable python27 "python script.py"
scl enable python34 "python script.py"