Nerves ist - nach Eigendefinition - eine quelloffene Infrastruktur und Plattform, um die Software für eine Flotte von IOT-Geräten zu entwickeln, zu verteilen und sicher zu verwalten.
Hier die Potentiale von Nerves Projekten grob umrissen:
- Mit dem Raspberry Pi setzt sie auf eine günstige Hardware Plattform, die mit mehr als 30 Millionen verkaufen Geräten weit verbreitet ist. Laut Electronics Weekly ist es - vor Arduino und BeagleBone - sogar die am weitesten verbreitete SBC (Single Board Computer).
-
Es gibt noch weitere unterstütze Hardware Plattformen bis hin zum Grisp 2, einem Entwicklungsboard mit bare metal Erlang Virtual Machine.
- Anschluss unzähliger Sensoren entweder
- direkt über den 40 GPIO Port am Raspberry Pi
- ohne zu Löten und mit standardisiertem I2C Protokoll über die Qwiik Connect Schnittstelle von SparkFun
- über alternative Boards (auch mit bereits verlöteten Sensoren), siehe hier oder hier
- über Netzwerke: LAN (wired und wireless), MQTT, Bluetooth, BLE oder USB.
-
Einfache Datenübertragung via JSON oder XML über HTTPS zu und Verarbeitung der Daten in
- Phoenix Applikationen
- Ruby on Rails Applikation
- exstierenden Webapplikationen in beliebigen Sprachen
- in weiterer Folge Speicherung in PostgresQL, TimescaleDB, MySQL und anderen relationen und nicht-relationalen Datenbanksystemen
- Visualisierung mittels Graphana oder direkt aus der Phoenix-Applikation per klassischer Views oder LiveViews.
- Dabei können beliebige Charting-Bibliotheken verwendet werden, ich habe in letzter Zeit mit ApexCharts, Apache ECharts und Vega Lite gearbeitet.
Wie und warum meine Entscheidung für Nerves gefallen ist, habe ich ausführlich im Blogpost Meine Nerves Story beschrieben.
Der Stack
Die Visualisierung des einfachsten Stacks, der Datenfluss vom Sensor über die Datenbank bis zum Webbrowser ist durch Verbindungslinien gezeichnet. Grün sind Komponenten, die nicht unmittelbar im Stack zu finden sind, aber für einen zuverlässigen, nachhaltigen Betrieb einer IOT-Plattform nötig sind.
IOT - Nerves Applikation
Hardware
- Raspberry Pi als Hardware Plattform
- Qwiic Hat als Switch mit I2C Datenübertragung zu den Sensoren
- beliebige Qwiic Sensoren, die mittels I2C ausgelesen werden
- Beliebige Serverhardware für die Datenpersistierung, auch virtuelle Maschinen oder Docker Container
Software
- Betriebssystem-Kern Linux, abhängig vom verwendeten Board,
z.B. bei einem Raspberry Pi 3 ein abgespeckter 5.10 Linux Kernel mit Patches für Raspberry Pi. - Applikationsserver Nerves
- Programmiersprache Elixir
- Dokumentation in Markdown, auf Wunsch auch als stand alone statische Website in Jekyll
Webkomponenten
- Elixir/Phoenix - Applikation, siehe hierzu auch meine detaillierte Stack Beschreibung Elixir und das Phoenix Framework für Webapplikationsentwicklung
- Graphana Dashboards zur Datenvisualisierung