Smart Mobile Home – Steuerung mit Raspberry Pi und Codesys

Veröffentlicht in: Smart Mobile Home | 3

Eigentlich bin ich der Meinung, dass möglichst wenig Elektronik ins Zuhause gehört. Dann kann auch wenig kaputt gehen. Der Meinung bin ich immer noch, allerdings… manches lässt sich mit Elektronik doch wesentlich besser machen. Gerade, wenn man länger im Wohnmobil lebt, dann stellen sich einige Fragen, die man dann kompliziert versucht zu beantworten. Wie viel Wasser ist noch im Tank? Liefert meine Solaranlage genügend Strom für den aktuellen Tagesverbrauch? Wie lange hält die Gasflasche noch?

In der Fertigungsindustrie ist momentan der Begriff „Industrie 4.0“ in aller Munde. In aller Kürze und vereinfachend zusammengefasst, geht es um eine komplette Vernetzung aller Produktionsschritte und Maschinen in der Wertschöpfungskette – und die Möglichkeiten, die sich daraus ergeben.

Das klingt recht ähnlich zu einem Thema in eigenen Zuhause: Smart Home. Endlich kann man per Sprachsteuerung aus dem Badezimmer den gewünschten Bräunungsgrad des Toastbrotes im Toaster einstellen. OK, es gibt auch sinnvolleres, vor allem im Bereich Energiemanagement. Die Bandbreite reicht hier wirklich von größtem Schwachsinn bis hin zu nachhaltigen Verbesserungen.

Und genau hier setzt dieses Projekt an: Für ein möglichst autarkes Wohnmobil gibt es einige Funktionen, die diese Autarkie vielleicht erweitern können. Ist es nur Spielerei? Kann sein. Vielleicht wird es nur eine tolle Anzeige, um über ein Display die aktuellen Füllstände von Wassertank und Batteriespeicher anzuzeigen. Vielleicht aber finde ich Parameter heraus, die einen sinnvolleren Umgang mit Ressourcen ermöglichen und die Autarkie erhöhen können.

So ist die Idee zum Smart Mobile Home geboren.

Kurze Ideensammlung zu den Bestandteilen:

  • Zentrale Rechnereinheit
    • Erfassung von Sensordaten
    • Datenspeicherung (neudeutsch: Data Mining)
    • Ansteuerung von Aktuatoren
    • Regelungstechnik
  • Erfassung von Umgebungsdaten durch Sensoren, z.B.:
    • Temperatur
    • Strom, Spannung
    • Füllstände
  • Interaktion mit der Umgebung mit Aktuatoren, z.B.:
    • Stellmotoren
    • Ventile
  • Anzeigen und Bedienelemente (HMI)

Um den Grundsatz „so wenig Elektronik wie möglich“ weiterhin zu befolgen, müssen die wichtigen Funktionen allerdings redundant sein. Ich möchte das Licht im Bad auch einschalten können, wenn die Elektronik nicht funktionieren sollte.

Ich bin gerade dabei, mit dem Projekt zu starten. Das heißt: Ich weiß noch nicht, was ich da eigentlich tue – na ja, ein bisschen vielleicht doch: Ich habe bereits einige Jahre an der Entwicklung von Autos mitgearbeitet – von Prototypen bis zu Serienfahrzeugen, vor allem im Bereich Vernetzung von Steuergeräten.

Was für mich allerdings im Moment Neuland ist: In den letzten Jahren hat sich einiges im Bereich der „Bastelelektronik“ getan und ich beginne auf einer grünen Wiese. Die letzten solchen Projekte habe ich während dem Studium gemacht und da war das höchste der Gefühle ein ATmega8 mit 16 MHz und 8 KB Flashspeicher. Ein Entwicklungsboard habe ich mir damals selber geätzt und Erweiterungskarten gelötet, um z.B. eine Displayanzeige zu haben… Wow, da kommen Nostalgiegefühle auf.

Heute ist das anders: Es gibt MiniPCs, wie z.B. den Raspberry Pi 3 mit einem 1200 MHz Quad-Core und 64 GB Speicher. Die Kosten für ein komplett bestücktes Board sind nicht teuerer als damals die einzelnen Bauelemente. Auch die Entwicklungsumgebungen haben sich natürlich deutlich weiter entwickelt.

Ich will dieses Projekt nicht im stillen Kämmerchen für mich allein entwickeln, sondern werde hier darüber berichten. Wenn du willst, dann nehme ich dich hier mit auf dieser Entwicklungsreise.

Und falls du Interesse hast, an dem Projekt mitzuarbeiten – melde dich bei mir!

Die Artikel entstehen während diesem Projekt live und sind deshalb manchmal vom Optischen her spartanisch gehalten. Ich hoffe, du verzeihst es mir. ;-)

Entwicklungsumgebung

Hardware

Die Auswahl an solchen MiniPCs ist gefühlt unbegrenzt: Da gibt es z.B. BeagleBone, Raspberry Pi, Banana Pi, LeMaker Guitar, Arduino, und viele mehr. Jeder hat mit Sicherheit seine Vorteile. Um alle miteinander zu vergleichen, könnte ich jetzt locker eine Woche verbringen. Da ich aber die Anforderungen noch nicht alle kenne und zügig starten will, ist die perfekte Plattform für mich aktuell nicht so wichtig. Typische Vorgehensweise für eine Prototypenphase.

Der Raspberry Pi ist mir über verschiedene Fachzeitschriften bereits öfters über den Weg gelaufen (das Marketing funktioniert offensichtlich sehr gut). Auch in Beschreibungen von Praktikantenjobs taucht der Begriff immer wieder auf. Zu jedem Thema das ich in Google eintippe bekomme ich einige Ergebnisse angezeigt – es scheint also ein breites Wissen vorhanden zu sein. Das hilft erfahrungsgemäß bei der Entwicklung gut weiter.

Die einzelnen Bauteile habe ich beim Reichelt bestellt:

Raspberry Pi 3
Zum Angebot
OTB 8012053 USB-Ladegerät mit 2,5 A, microUSB
Zum Angebot


Kühlsatz
Zum Angebot

MicroSDHC-Card 32GB
Zum Angebot
Experimentier-Steckboard 1260/300 Kontakte
Zum Angebot
Steckbrücken-Drahtbrücken-Set, 140-teilig
Zum Angebot
Entwicklerboards – Steckbrückenkabel, 40 Pole, f/f, 30 cm
Zum Angebot
Externe Beschaltung aus dem Vorratsschrank

Was man sonst noch braucht: Taster, LEDs, Tastatur und Maus, Monitor mit HDMI-Anschluss

Gerade für den Betrieb im Wohnmobil ist die Leistungsaufnahme wichtig: Laut c’t soll der Raspberry 4,7 W im Betrieb brauchen (Quelle: c’t), interessant ist dann für später, was er wirklich braucht mit einem Programm, das ihn voraussichtlich nicht voll auslastet.

Software

Man könnte es vielleicht auch einfacher machen, ich habe allerdings herausgefunden, dass man in Verbindung mit Codesys eine Soft-SPS realisieren kann… Und um ehrlich zu sein, damit ist auch dieses Projekt entstanden. ;-)

Für die Downloads und die Installation sollte man etwas Zeit einplanen, da die Files doch etwas groß sind. Die folgende Software wird benötigt und kann problemlos runtergeladen werden (wenn man genug Datenvolumen hat):

Betriebssystem Raspian

Das Image kann hier runtergeladen werden: https://downloads.raspberrypi.org/raspbian_latest (1,4 GB)

Nach dem Entzippen muss das Image auf eine MicroSD-Karte geschrieben werden (Anleitung für Windows, Linux und Mac OS), dazu braucht man unter Windows den Win32DiskImager (12 MB).

Entwicklungsumgebung CODESYS Developemt System

Gibt’s hier: https://store.codesys.com/codesys.html?___store=default (890 MB)

Ich verwende die Version 3.5.10.0

Laufzeitsystem CODESYS Control for Raspberry Pi

Download hier: https://store.codesys.com/codesys-control-for-raspberry-pi-sl.html (9 MB)

Die kostenlose Variante (einfach nach Registrierung auf „Download“ klicken“) soll 2 Stunden lang ohne Einschränkungen laufen und sich dann automatisch beenden. Das sollte für die Entwicklung ausreichen. Die Volllizenz für 50,- EUR ist für später auch erschwinglich.

Folgende Erweiterungen werden unterstützt:

  • Erweiterungshardware Raspberry PiFace Digital
  • Raspberry Pi Camera
  • Diverse Geräte mit
    • I²C-Schnittstelle (SRF02, Adafruit PWM, MPU6050, MPU9150, AK8975),
    • SPI-Schnittstelle (MCP3008, MCP23S17) oder
    • 1-wire-Schnittstelle (DS20B18)

Raspberry Pi einrichten

Wenn das Image auf die SD-Karte geschrieben ist, ist der Raspberry startklar. SD-Karte rein, Monitor, Tastatur und Maus anschließen, ans Netzteil anschließen und schon startet der Raspberry hoch. Perfekt :-)

Raspberry Pi Desktop - frisch nach der Installation

Die WLAN-Verbindung ist schnell und intuitiv eingerichtet.

Ein paar weitere Anpassungen sind für ein komfortables Handling sinnvoll:

Fernzugriff über VNC-Server

Es dauert ein bisschen, bis ich den missing Link herausfinde: Wenn von „sudo dies, sudo das, sudo sonstnochwas“ geredet wird, dann muss man dazu das Terminal öffnen:

  • Menü – Accessories – Terminal
  • (oder direkt über den Button in der oberen Leiste)

Jetzt kann man den Befehl eingeben…

VNC-Server aktivieren

Menü – Preferences – Rasberry Pi Configuration

Im Tab „Interfaces“ VNC auf enabled setzen

Bildschirmauflösung fest einstellen

Wenn kein Monitor angeschlossen ist, wechselt der Raspi leider in eine sehr kleine Auflösung. Das lässt sich über die Benutzeroberfläche auch nicht ändern.

Die Lösung habe ich hier gefunden: https://support.realvnc.com/knowledgebase/article/View/523#RaspberryPiResolution

Eine Übersicht über die verschiedenen Auflösungen und die entsprechenden Werte für „hdmi_mode“ gibt’s hier: https://elinux.org/RPiconfig#Video_mode_options

Für eine fest eingestellte Auflösung müssen die folgenden Punkte in der config.txt auskommentiert und angepasst werden:

  • hdmi_force_hotplug=1
  • hdmi_group=2
  • hdmi_mode=39

Die config.txt kann entweder am PC bearbeitet werden oder direkt über das Terminal (siehe oben) mit dem Befehl

  • sudo nano /boot/config.txt

Der hdmi_mode=39 entspricht einer Auflösung von 1360×768 bei 60 Hz. Das finde ich eine praktische Größe, damit das Bild nicht zu groß oder zu klein dargestellt wird, wenn man den VNC-Viewer auf dem PC mit einem normalen FullHD-Monitor verwendet.

Spracheinstellungen

Menü – Preferences – Rasberry Pi Configuration

Im Tab „Localisation“ alle vier Punkte anpassen

Update: Die Übersetzungen sind noch nicht wirklich gelungen bzw. unvollständig – ich bleibe lieber bei englisch.

Codesys einrichten

Die einzelnen Schritte sind hier detailliert beschrieben: https://store.codesys.com/attachments/files/download/id/4119/

Heruntergeladenes Package installieren

  • Tools – Package Manager – Installieren
  • Datei „CODESYS Control for Raspberry PI 3.5.10.0.package“ auswählen

Auf Raspberry installieren

  • Tools – RaspberryPI aktualisieren
  • IP, Standard- Username (pi) und PW (raspberry) eingeben und „ok“ klicken

ERROR [connect]: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 192.168.8.107:22
Could not connect to RPI: 192.168.8.107

Es folgt ein Auszug aus den autistischen Fähigkeiten eines eines Ingenieurgehirns:

  • Verbindung klappt nicht. Nochmal probieren. Gibt es andere Standard-Passwörter? Nochmal probieren. Hat sich zur aktuellen Softwareversion etwas geändert? Google it!
  • Alle möglichen Varianten ausprobiert. Auch die „y“ und „z“ -Problematik mit englischen Tastaturen ausprobiert. Keinen Hinweis in Hilfedateien oder sonstwo gefunden.
  • Dann hilft nur eines: Nachdenken.
  • PC und Raspi reden miteinander über das WLAN. Funktioniert hier etwas nicht? Will der Raspi lieber ein LAN-Kabel? Kommt das Windows auf meinem Laptop wieder mit sich selbst durcheinander? Also ab, direkt runter auf’s Bussystem: Wireshark anschmeißen
  • Einen Login-Versuch mit dem vermutlich richtigen Passwort mitprotokollieren
  • Aha, mein Rechner unterhält sich mit dem Router über das Wetter…
    TCP-IP smalltalk - das wetter
  • Filter einrichten: ((ip.src == 192.168.8.107) || (ip.dst == 192.168.8.107)) && ((ip.src == 192.168.8.103) || (ip.dst == 192.168.8.103))
  • Versuchen, die Frames grob zu analysieren
  • Zweiten Login-Versuch mitprotokollieren, allerdings bewusst mit einem falschen und viel zu langen Passwort
  • Frames im Detail miteinander vergleichen – Aha: Das Passwort wird also nicht übertragen. Noch nicht übertragen. Da gibt’s also vermutlich einen Handshake. Da steht was von SSH – wie funktioniert das SSH-Protokoll? Wikipedia anschmeißen – STOPPPPP!
  • SSH? Ich hab doch da bei der VNC-Einrichtung irgendwas in den Einstellungen gesehen, dass SSH deaktiviert ist…
  • Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaargh!

Weiter geht’s:

  • Raspi: Menü – Preferences – Rasberry Pi Configuration: Im Tab „Interfaces“ SSH auf enabled setzen
  • Passwort ändern und Reboot (sicherheitshalber)
  • Codesys: Tools – RaspberryPI aktualisieren
  • IP, Standard- Username (pi) und PW (raspberry) eingeben und „ok“ klicken
  • „Update finished“ – geht doch :-)

Lizenzierung

Da ich bisher nur mit der Demo arbeite, braucht’s das nicht.

Beispiele

Los geht’s mit Ausprobieren. Dazu schaue ich mir die mitgelieferten Beispiele an. Vor allem das GPIO-Beispiel nehme ich etwas genauer unter die Lupe und schließe die GPIO-Kabelpeitsche an mein LED-Modul an uuuund:

Die erste LED blinkt!

Details? Selber probieren! :-)

3 Antworten

  1. Benny

    Hi!
    Ich überlege auch gerade unsere Wohnmobilsteuerung etwas übersichtlicher zu gestalten und dafür ein Raspberry Pi zu verwenden. Bist du mit deinem Projekt weitergekommen oder hast du es abgebrochen?
    Gruß
    Benny

  2. Michi

    Hallo Benny,
    aktuell bin ich gerade dabei, einen Audioverstärker für einen Automobilzulieferer ans Laufen zu bringen. Da bleibt gerade wenig Luft dafür…
    Gedanklich bin ich (beflügelt durch das andere Projekt) allerdings auch etwas weitergekommen: Ich werde auf eine andere Plattform setzen. Zwei Fragen, die man sich vorweg stellen sollte: Mit was programmierst du am liebsten und für was willst du’s einsetzen? Raspberry läuft mit Python (objektorientiert, ordentlicher Overhead an Betriebssystem). Das ist für so Späße wie User Interfaces usw. ganz gut. Wenn es allerdings um die Auswertung von Sensoren und die Ansteuerung von Aktoren geht, dann ist für mich persönlich die Sprache C wesentlich interessanter => Ich werde dazu auf Arduino setzen. Der Raspberry liegt somit erstmal auf Eis und wird dann z.B. für die Darstellung usw. zum Einsatz kommen.
    Grüße
    Michael

  3. Hermann Pösken

    rhasberry und Wohnmobil, will alles sehen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert