Einem Arduino Uno beibringen, die Belegung von Zimmern zu erkennen – kann er selbst lernen oder muss ich meine Daten zuerst herausgeben?
Von English mit KI übersetzt ·
Facility Manager eines Hotels mit 90 Zimmern, ich bin kein Programmierer, habe aber schon ein wenig herumprobiert. In 12 Zimmern haben wir kleine Boards (Arduino Uno + ein ESP-01 für Wi-Fi, ein SCD40-CO2-Sensor, ein PIR), die alle 2 Minuten CO2, Temperatur und Bewegung an Hermetry senden.Ein Anbieter hat uns für viel Geld „KI am Edge, die lernt, wann Zimmer belegt sind“ angeboten. Ich dachte mir: Könnte ich nicht einfach ein kleines neuronales Netz direkt auf dem Uno trainieren, damit er selbstständig lernt? Das Housekeeping würde gern wissen, welche Zimmer wirklich leer sind. Ist das verrückt? Wo würde ich überhaupt anfangen?
Facility manager at a 90-room hotel, I’m not a programmer but I’ve been tinkering. We have small boards in 12 rooms (Arduino Uno + an ESP-01 for Wi-Fi, SCD40 CO2 sensor, a PIR) sending CO2, temperature and motion to Hermetry every 2 minutes.
A vendor pitched us „AI on the edge that learns when rooms are occupied“ for a lot of money. I thought, could I just train a small neural network on the Uno itself so it learns by itself? Housekeeping would love to know which rooms are really empty. Is this crazy? Where would I even start?
Von English mit KI übersetzt ·
Training auf einem Uno: verrückt, ja. 2 KB RAM. Ein winziges Modell ausführen, das woanders trainiert wurde: sehr machbar.
Training on an Uno: crazy, yes. 2 KB of RAM. Running a tiny model that was trained somewhere else: very doable.
Von English mit KI übersetzt ·
Warum ist das Training so viel schlechter als die Ausführung? Ist es nicht dieselbe Mathematik?
Why is training so much worse than running it? Isn’t it the same maths?
Von English mit KI übersetzt ·
Das Training benötigt alle Gewichte, deren Gradienten und einen Haufen Beispieldaten gleichzeitig im Speicher, und zwar über viele Durchläufe. Inferenz ist ein einziger Durchlauf aus Multiplikation und Addition, und die Gewichte können im Flash liegen.
Training needs every weight, its gradient and a pile of example data in memory at once, many passes. Inference is one pass, multiply and add, and the weights can sit in flash.
Von English mit KI übersetzt ·
Der eigentliche erste Schritt ist also ein Datensatz. Du hast in Hermetry bereits wochenlange Messwerte, es fehlen nur die Labels: Die Ein- und Auscheckzeiten der Housekeeping würden genügen.
So the real first step is a dataset. You already have weeks of readings in Hermetry, you just need labels: housekeeping’s check-in/check-out times would do.
Von English mit KI übersetzt ·
Megan hat recht. Ich würde Folgendes tun:1. Sende weiterhin co2, temperature und motion als Zahlen (motion als 0/1, nicht true/false, damit eine Historie entsteht).2. Hole die Rohdaten über die History-API ab, ein Tag pro Aufruf ist bequem:
curl -s -H "Authorization: Bearer $KEY" "https://$HOST/tenant/$TENANT/api/telemetry/series?kind=iot_device&entityId=$ROOM&keys=co2,temperature,motion&from=$FROM&to=$TO&bucket=raw"
Wenn ein Schlüssel 10.000 Punkte zurückgibt, frage erneut ab dem letzten ts + 1 an.3. Verbinde sie auf einem Laptop mit dem Export der Rezeption und trainiere in Python eine logistische Regression oder ein Netz mit 3 Eingängen und 8 Neuronen. Das reicht für CO2-Anstieg + Bewegungsanzahl völlig aus.4. Quantisiere die Gewichte auf int8, füge sie als Array const int8_t w[] PROGMEM ein, und der Uno führt nur den Forward-Pass aus. Sende das Ergebnis als occupied_p (0-100) zusammen mit den anderen Schlüsseln.Ehrlich gesagt bringt dich bei Belegung der CO2-Anstieg über 20 Minuten plus „irgendeine Bewegung in den letzten 30 min“ schon weit, noch bevor ein neuronales Netz ins Spiel kommt. Starte damit als Baseline, damit du weißt, ob sich das Modell lohnt. Die API-Seite findest du hier: Die History-API.
Megan’s right. What I’d do:
1. Keep sending co2, temperature and motion as numbers (motion as 0/1, not true/false, so it has a history).
2. Pull the raw data out with the history API, one day per call is comfortable:
curl -s -H "Authorization: Bearer $KEY" "https://$HOST/tenant/$TENANT/api/telemetry/series?kind=iot_device&entityId=$ROOM&keys=co2,temperature,motion&from=$FROM&to=$TO&bucket=raw"
If a key comes back with 10,000 points, ask again from the last ts + 1.
3. Join it with the front desk export on a laptop, train a logistic regression or a 3-input, 8-neuron net in Python. That is plenty for CO2 slope + motion count.
4. Quantise the weights to int8, paste them as a const int8_t w[] PROGMEM array, and the Uno only runs the forward pass. Send the result as occupied_p (0-100) alongside the other keys.
Honestly, for occupancy the CO2 rise over 20 minutes plus „any motion in the last 30 min“ gets you most of the way before any neural net. Start with that as a baseline so you know if the model is worth it. API side is here: The history API.
Von English mit KI übersetzt ·
Wenn Sie diesen Export skripten, geben Sie dem API-Schlüssel die Voreinstellung Nur Lesen und beschränken Sie ihn auf das Netzwerk Ihres Laptops. Ich habe schon zu viele Vollzugriffs-Schlüssel in Python-Notebooks gesehen.
If you script that export, give the API key the Read-only preset and restrict it to your laptop’s network. Seen too many full-admin keys in Python notebooks.
Von English mit KI übersetzt ·
Update nach zwei Wochen: Mein Neffe hat beim Python-Teil geholfen. Die einfache Regel (CO2 steigt + Bewegung in den letzten 30 Min.) traf in 87 % der Fälle mit dem Protokoll der Rezeption zu, das winzige Modell 91 %. Es läuft auf dem Uno, 24 Gewichte. Wir kaufen das Lösung des Herstellers nicht. Und ja, ich habe einen Read-only-Schlüssel erstellt, wie Brian gesagt hat, mein erster war ein Admin-Schlüssel…
Update after two weeks: my nephew helped with the Python part. The simple rule (CO2 rising + motion in last 30 min) was right 87% of the time against the front desk log, the tiny model 91%. It runs on the Uno, 24 weights. We’re not buying the vendor thing. And yes, I made a Read-only key like Brian said, my first one was an admin key…
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

