Was ist "Things of Camper"?
Allein der Name sagt versierten Technerds einiges, wo er sich doch vom "Internet of Things" ableitet. Allerdings sind die Teile für Camper eher schlecht über das Internet zu verbinden, auch wenn das alles sehr sehr sehr viel leichter gemacht hätte. Also geht es vordergründig um die lokale Verbindung von Elektronik wie bei einer smarten Haussteuerung. Das Projekt wäre ein riesiges Projekt mit hohen Chancen bei ebenso hohen Risiken und vielleicht lest ihr meinen kleinen Artikel zu meinem vorherigen Projekt, wo ich bewiesen habe solche Projekte technisch zu realisieren, dann versteht ihr, warum ich dieses Projekt sicher nicht auf die gleiche Weise angegangen bin.
Hier geht es zur Geschichte: "Mein erfolgreicher Weg zum Scheitern"
Das Projekt ToC soll ein halbwegs offenes Projekt werden und daher gibt es eine gut dokumentierte Kommandostruktur und mittels derer sollte eine Integration in eigene Apps, ioBroker oder HomeAssistant einfach möglich sein. Jedes Modul kann per BLE und MQTT integriert werden.
Module
- CamperFan
- WaterLevel
-
PwmKit
Die Liste an Sensoren und Controllern ist ewig lang und ebenso lang ist die Wunschliste. Fehlt lediglich die Umsetzung und da wird es sicher immer mal wieder etwas neues als Erweiterung geben.
Elektronik + Software + Mechanik?
Es braucht eine riesigen Mannschaft für die Entwicklung von guter Elektronik, Software und Mechanik, damit aus dem perfekten Zusammenspiel ein wertvolles System mit echtem Nutzen wird. Da ich bei SMaker3D allein agiere, kann ich diese Komplexität nur dadurch beherrschbar gestalten, dass ich auf etablierte Standards zurückgreife, was immer eine gute Idee ist.
Als Spezialist für Systementwicklung habe ich schon sehr viel komplexere Systeme entwickelt, aber eben in Teams. Aus dieser Erfahrung kenne ich die Herausforderungen sehr gut.
95% der Hardware nutze ich derzeit von M5Stack, die sich als chinesischer Hersteller von IoT-Education-Kits einen Namen gemacht haben. Das Preis-Leistungs-Niveau ist sehr fair und die Lernkurve für Mitstreiter liegt sehr niedrig, wobei dank solider Hardware nach oben keine Grenze gesetzt ist. Die restlichen 5% sind für den Camper notwendige PCB´s die als Adapter fungieren, denn es soll für den Verbraucher keine Bastellösung sein. Diese 5% entwickle ich derzeit selbst und lasse diese in Deutschland fertigen.
Bei der Mechanik greife ich auf meine Kompetenz zurück und fertige entsprechende Gehäuse selbst, ebenso wie nötige Adaptionen, um die ToC Module zum Beispiel an die Lüfter anbauen zu können.
Bleibt noch der größte Arbeitsbrocken, die Software. Hier wird sich eine permanente Entwicklung gar nicht vermeiden lassen. Die Firmware-Entwicklung ist dabei ein ganz eigene Challenge neben der restlichen Software. Für den Rollout der Firmware an den Endverbraucher verwende ich derzeit die Plattform von M5Stack, (sehr viel) später wünsche ich mir einen eigenen OTA Weg, also die kontaktlose Aktualisierung der Module, denn niemand kann ein Interesse daran haben, ständig alle Module per Kabel zu aktualisieren.
Naja und dann wäre da noch der Systemverbund, also meine eigentliches Spezialgebiet, die Abstimmung der drei Hauptdisziplinen zu einem System. Dazu gehören so viele Tätigkeiten, dass jedem klar sein sollte, das dieses kleine ToC-Projekt am Rande von SMaker3D nicht nur mich, sondern auch locker 30 Spezialisten in Vollzeit auslasten würde. Und genau deswegen bin ich gespannt wie es wird, also ob es den Status "Lösung für Markus" hinzu "Produkt für die Community" je schaffen kann und wird.
Camper über das Internet steuern?
Die Integration wird über eine MQTT Bridge im Camper möglich, um alle Befehle und Daten auch in der App außerhalb vom Camper so zu verwenden, als wäre man noch in der Nähe. Das ist der Plan und technisch funktioniert es sogar schon, jedoch fehlt an dieser Stelle die dazugehörige Dokumentation noch.
App & Software
Die App für ToC erreicht ihr über https://app.smaker3d.com was eine PWA-Website-App ist.
-
Android = perfekt als PWA wie eine App installierbar
-
Windows = in Edge und Chrome perfekt als PWA wie eine App installierbar
-
Linux = in Chrome perfekt als PWA wie eine App installierbar
-
iOS = für BLE Funktionalität per Bluefy App nutzbar und per MQTT im Browser nutzbar mit Link auf dem Home-Screen
Die App gibt es in zwei Ausprägungen:
-
Base .. für die einfachen Konfiguration von EINEM Node zur Interaktion, also Steuerung oder Auslesen
-
Mesh .. für die übersichtliche Steuerung aller Nodes im Netzwerk, wobei die Kommunikation über einen MQTT-Broker realisiert wird
- Derzeit kann der Kunden nur den Base Modus verwenden
Erste Kopplung per BLE und App
- Gerät mit Spannung versorgen
- App öffnen
- Verbinden Button drücken
- Gerät "ToC_SMaker3D" auswählen und koppeln
- In dem Bildschirm einen Namen vergeben "Frischwasser"
- Unten auf "An Gerät senden"
- Ein Countdown zählt runter
- Verbindung trennen und Gerät Spannungsversorgung kurz unterbrechen
SyncStore
Die Daten der App werden nach dem Zero-Knowledge-Prinzip gespeichert. Kurz ich sehe nur Datenmüll und kann damit nichts anfangen. Aber ihr könnt die Daten über einen QR Code auf verschiedenen Geräte "teilen". Damit kann beispielsweise das Mapping vom WasserLevel auf mehreren Geräte genutzt werden ohne ein Account oder aufwändige Transformationen.
Dieses Feature ist noch in der Anfangsphase und wird später deutlich mehr können, aber dazu später entsprechende Informationen.
Updates
Die App aktualisiert sich ständig automatisch, jedoch muss für die Firmware derzeit das Update manuell durchgeführt werden. In dem Anleitungsvideo habe ich ja gezeigt, wie einfach dies mit M5Burner ist.
Entwicklungsumgebung
Für die grafischen Entwicklung wie in meinen Videos empfiehlt sich UiFlow 2 von M5Stack.
Alternativ kann die Entwicklung auch in Thonny auf Windows, Linux oder Mac in richtiger Programmierung MicroPython erfolgen.
Zurücksetzen
Falls ihr wegen einem Fehler das Gerät mal zurücksetzen müsst, geht das recht einfach per UiFlow2 mit diesem vorgefertigten Skript.
- Gerät per USB an Computer stecken
- Website öffnen https://uiflow2.m5stack.com/?pkey=9179e7ce723647438c7ef1dcdef94f41
- UiFlow 2 auswählen
- Unten links am Fenster auf das Symbol mit dem Pfeil nach rechts und dem Strich daneben
- In dem Dialog dann das "UiFlow...." Gerät auswählen
- In dem Fenster den Play Button drücken
- kurz warten
- Gerät trennen und mit Spannung versorgen und Kopplung starten
Kommunikationskonzept
Bluetooth (BLE)
Jedes Gerät wird "Node" genannt, also ein Knoten im Netz. Ein Node muss per Bluetooth vor der ersten Benutzung konfiguriert werden. Die App öffnet, sofern sie den Node noch nicht kennt, die Konfigurationsoberfläche "BleSetup" und setzt bis auf den Namen alle Werte automatisch. Sollte der Node schon einmal konfiguriert worden sein, wird das Schreiben scheitern und der Node muss neu bespielt werden. Nach einem Update kann ein im ersten Moment unbekanntes System aber mit einem zuvor gespeicherten Wert bespielt werden.
Mqtt (MQTT)
Jeder Node kann ebenso per MQTT angesprochen werden, sofern dieser per Bluetooth entsprechend konfiguriert wurde.
Die Implementierung von MQTT ist hier sehr untypisch erfolgt. Mehr dazu in dem entsprechenden Erklärvideo, warum es hier nur eine MQTT-Topic gibt und es dennoch nicht zu Zirkelbezügen kommt.
WICHTIG: In der Version 1.6 ist MQTT zwar implementiert, jedoch bisher nur rudimentär.
Auth
Bevor man mit einem Node kommunizieren kann, muss eine Nachricht zur Authentifizierung gesendet werden. Dies gilt für BLE und MQTT gleichermaßen.
<Source>:<Node>:auth:<Sec>
Als Antwort erhält man eine Message mit der Information zur Firmware
<Node>:<Node>:firmware:<WaterLevel_v1.0_bySMaker3D>
Messages
Jeder Node kann über kleine Messages gesteuert werden, die ganz einfach aufgebaut sind.
<Source>:<Node>:<Key>:<Sec>
-
Source: ist die Quelle der Information z.B. abcd (es ist nicht zwingend der Sender der Information)
-
Node: ist die Kennung des Knoten z.B. abcd
-
Key: ist das Kommando (setName) oder der Schlüssel der Eigenschaft (name)
-
Value: ist der entsprechende Wert
Request, Response und Routing
Wird das Kommando von der App
app:abcd:setName:WaterLevel
an den Node gesendet, antwortet dieser mit
abcd:abcd:name:WaterLevel
Jede Msg die ein Gerät per Bluetooth empfängt wird bei übereinstimmender Kennung (z.B. abcd) direkt verarbeitet oder per MQTT weitergeleitet, wenn dies aktiviert ist. Auf diese Weise kann über eine Bluetooth-Verbindung jedes andere Gerät in dem Netz ebenfalls erreicht werden.
AutoSend
Bei aktiviertem AutoSend sendet das Gerät in einem definierten Zeitinterval (500ms * Cycle) aktuelle Zustandswerte. Diese können zum Beispiel der Temperaturwert eines angeschlossenen Thermometers sein. Über diese Methode kann man Automatisierungen ermöglichen, da andere Geräte auf diese Werte reagieren können. Alternativ kann jedes Gerät bei Bedarf angefragt werden.
Bei aktiviertem MQTT wird auch ohne vorheriges auth gesendet, damit muss man im Verbund nicht ständig auf die auth Befehle achten und erhält dennoch die Standardinformation direkt nach Anschluss der Spannung.
API Referenz
Jedes Modul hat spezifische Befehle und Werte. Allerdings gibt es nachfolgend eine Liste mit allgemein gültigen Befehlen.
-
setSec
- setzt einen neuen, geheimen Schlüssel für die Authentifizierung
- Vorsicht: bei der Vergabe die zulässige Definition beachten
-
setName
- setzt den Namen, mit dem der Knoten im BLE erkannt wird
- Vorsicht: bei der Vergabe die zulässige Definition beachten
-
setNode
- setzt die Kennung des Knoten
- Vorsicht: bei der Vergabe die zulässige Definition beachten
-
setMqtt .. 0/1
- für die Aktivierung der MQTT Verbindung
-
setCycle 0..n
- ist der Interval, mit dem der Node intern arbeitet (2 = 1s)
-
setAutoSend .. 0/1
- für die automatische, ungefragte Mitteilung von Werten (z.B. Temperatur)
-
setMqttSrv
- Adresse vom MQTT Broker als IP oder Domain
-
setMqttUsr
- User für die MQTT Verbindung
-
setMqttPw
- Passwort für die MQTT Verbindung
-
setMqttPort
- Port vom MQTT Broker, meist 1883
-
setMqttRoot
- Root-Topic für den MQTT Broker, wobei die App hierfür eine UUID erzeugt
-
setWifiSec
- Geheimer Schlüssel vom WLAN
-
setWifiSsid
-
reboot
-
init
- Node wird auf den Standard zurückgesetzt, um ihn z.B. an anderer Stelle neu anzulernen
-
enum
- gibt als Nachrichten die Kerndaten des Knoten aus
-
initMqtt
- startet die Verbindung zum MQTT-Server neu inkl. der Wifi-Verbindung