Proof of Concept - CircuitPython und Freifunk Nodes

Unter den Freifunk Nodes sind einige Router, die mit GPIO kommen und darüber schalten könnten - ist aber meist so uninteressant, dass es wohl kaum jemand macht.

Was aber, wenn an den sonst ungenutzen USB-Port ein IOT-Device mit Circuitpython angedockt wäre?
Die meisten Communities stellen wohl nur die Firmwareimages ohne die passenden Kernelmodule bereit - also müsste man selbst bauen, um die Kernelunterstützung für USB zu bekommen - nicht so bei Freifunk Rhein-Sieg. Dort liegen die entsprechenden Kernelmodule zur aktuellen Firmware auf dem Updateserver und das Repo ist bereits vorkonfiguriert. Reicht also ein einfaches ‚opkg update; opkg install ‘, sofern der Flashspeicher der Node genug Platz hat.

Circuitpython erlaubt die Programmierung von Microkontrollern über USB - einfaches Editieren von code.py, der per VFAT Filesytem von der Firmware bereitgestellt wird:

Parallel dazu einer Konsole mit dem Output, die per seriellem Terminal abliefert:

Dazu kommt noch USB-Hid Unterstützung für eine Latte von Controllern.

O.K. Da per default bei gluon kein image für den gl-mifi rauspurzelt, hier dasselbe nochmal für den unterstützten GL-AR-150:

Die übliche Sensorik wie Ultraschall-Sensor oder Infrarot Bewegungsmelder wird bei CircuitPython per libraries unterstützt, die jeweils in einen Unterordner ‚lib‘ auf dem vfat filesystem kopiert werden.

1 „Gefällt mir“

Wenn man mit der Paketauswahl extrem sparsam ist, läuft’s auch auf euinem 1043ndv2:


mit automatischem vfat-mount und Konsole:


4 „Gefällt mir“

Das Bereitlegen der Packages und KernelModule über opkg ist fix gemacht und lässt sich in Buildscripten automatisieren.
Die Herausforderung ist der langfristige Betrieb solcher Nodes mit HomebrewSetup, da der Auto Updater dort spätestens(!) bei Releasewechseln die Dinge zu ruinieren pflegt.
Umgekehrt möchte man aus Sicherheitsgründen eigentlich in einem Freifunknetz alle MeshRouter im AutoUpdater laufen haben.
Daher meine dringende Empfehlung, solche Dinge mit esp32 oder kleinen Raspis (wenn es auf einen wirklich funktionierenden IPv6 Stack ankommt) realisieren.

war nicht das Thema Bei Rhein-Sieg Hoods ist das halt schon bereitgestellt…

prinzipell schön - fast 50% der RSK-Nodes sind 4MB Flash/32MB Ram - da ist nix mehr mit autoupdate

Es geht eben drum, IOT-devices NICHT ins public Netz zu hängen, sondern administrativ aus den FF Nodes heraus steuern zu können.

BLE iBeacons abstrahlen, um den Router zu finden oder InfoDisplays/Relais ansteuern, statt für ein PowerCycling hinzufahren.


MIt recyceltem 18650er Akku - jetzt noch schauen, ob das device auch auf die FF-Router Shell kommt und als watchdog taugt, der bei der Node ggf. powercyclen kann

noch isses nur ein statischer dummy-output, noch keine scripte dahinter, die live Daten auslesen

Die Sensorwerte landen bereits uci conform in ‚sensors‘:
root@firmwaretest# cat /etc/config/sensors

config circuitpython
option disabled ‚0‘
option charging ‚0‘
option cputemp ‚26.50‘
option voltage ‚2.96‘

auf openwrt-Seite nimmt triggerhappy die Daten über usb.hid entgegen,

Bei Desktop Systemen unter Win 10/11, Linux Mint, mac OS Sonoma läuft es direkt in ein Terminal-Fenster, das dafür geöffnet wird.

root@firmwaretest:~# uci show sensors
sensors.@circuitpython[0]=circuitpython
sensors.@circuitpython[0].disabled='0'
sensors.@circuitpython[0].charging='0'
sensors.@circuitpython[0].cputemp='26.75'
sensors.@circuitpython[0].voltage='2.96'
sensors.bmp280=bme-device
sensors.bmp280.pressure='1012.2'
sensors.bmp280.temperature='25.5'

Kein Dummy mehr - die Werte werden in der status-page jetzt per uci live aus der config ausgelesen.

Github Repo mit Scripts und HowTOs