Fujimod
Try your camera firmware in the browser and build Fujimod SD boot files.
Besucherlenkung aus offenen Daten: Ist ein Ziel voll, steht hier, wohin sonst.
Translation pending
LifestylePython · TypeScriptGitHub @freddy-schuetzOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Wie voll ist es gerade — und ist das viel? Fünf offene Live-Zählquellen aus vier Ländern, jeder Wert gegen seinen eigenen Normalwert eingeordnet.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Wie voll ist es gerade — und ist das viel? Fünf offene Live-Zählquellen aus vier Ländern auf einer Karte. Jeder Wert wird nicht gegen eine Kapazität gehalten, sondern gegen den eigenen Normalwert für diese Tageszeit. Erst dadurch werden Personen, Parkplätze und Leihräder vergleichbar — und erst dadurch sagt eine Live-Zahl überhaupt etwas. „37 Personen auf der Kapellbrücke — normal sind um diese Zeit 15." Keine personenbezogenen Daten. Alle Quellen liefern aggregierte Zählwerte. Muster A — die gesamte Logik liegt in n8n, das Frontend ist ein dünner Proxy.Read the full README ↗
Wie voll ist es gerade — und ist das viel?
Fünf offene Live-Zählquellen aus vier Ländern auf einer Karte. Jeder Wert wird nicht gegen eine Kapazität gehalten, sondern gegen den eigenen Normalwert für diese Tageszeit. Erst dadurch werden Personen, Parkplätze und Leihräder vergleichbar — und erst dadurch sagt eine Live-Zahl überhaupt etwas.
„37 Personen auf der Kapellbrücke — normal sind um diese Zeit 15."
| Quelle | Was gezählt wird | Takt | Historie | Lizenz |
|---|---|---|---|---|
| Stadt Luzern (Devicecounter) | Fussgängerstrom, u.a. Radarsensor Kapellbrücke | ~5 Min | ❌ | OGD Stadt Luzern |
| Stadt Zürich (Crowd Monitor) | Badegäste in See-, Fluss- und Freibädern | ~2 Std | ✅ ~4 Tage | CC0 |
| Open Data Hub Südtirol | freie Parkplätze (Dolomitenpässe, Seilbahnen, Kurorte) | 1–5 Min | ✅ 14 Tage importiert | CC0/CC-BY |
| Open Data Hub Südtirol | Eco-Counter an Radwegen (Vinschgau, Drauradweg) | stündlich, ~28 h Verzug | ⚠️ siehe unten | CC0/CC-BY |
| nextbike (GBFS) | verfügbare Räder je Region (Usedom, Neusiedler See, Luzern) | 60 s | ❌ | CC0 |
Keine personenbezogenen Daten. Alle Quellen liefern aggregierte Zählwerte.
Muster A — die gesamte Logik liegt in n8n, das Frontend ist ein dünner Proxy.
n8n besucherpuls-collect Schedule 5 Min → 5 Quellen → Data Table besucherpuls_puffer
→ Puffer > 72 h löschen
n8n besucherpuls-status Webhook GET (x-bp-secret) → Profil + Puffer → GeoJSON
Next app/api/status Server-Route, reicht durch, kein Cache
Next app/page.tsx Karte + Liste + Detail, Refresh alle 60 s
Schneller pollen als die Quelle liefert erzeugt nur Duplikate: GBFS hat ttl 60 s, Luzern
aktualisiert ~5-minütlich, die Südtiroler Radzähler haben mperiod 900. Und mehr Rohdaten
verringern die Statistik-Freiheit in n8n, weil ein Code-Node Items in den Speicher lädt.
Deshalb zwei Tabellen mit konstanter Grösse statt einer wachsenden:
besucherpuls_puffer — 72 h in voller Auflösung, für den Verlaufbesucherpuls_profil — eine Zeile je Sensor, Vergleichsraster als JSONDas Raster hat zwei Ebenen: h (Median je Stunde) und dh (Median je Wochentag × Stunde,
nur wo n ≥ 3). Der Status-Webhook nimmt dh, wenn die Zelle existiert, sonst h. Diese
Zweistufigkeit ist nötig, weil die Zürcher Reihe nur rund vier Tage zurückreicht — für ein
Wochentagsraster zu wenig, für ein Stundenraster genug.
BikeCounter/*-Pfad über Mehrtagesfenster ist dem Open Data Hub zu teuer, auch mit
100-Sekunden-Pausen. Die Basis baut sich über den laufenden Sammler auf; ein Nachtrag mit
Tagesfenstern und einzelnem Datentyp statt * wäre der nächste Versuch.python scripts/build_sensors.py # lib/sensors.json aus den Live-Quellen erzeugen
python scripts/import_historie.py # einmalig: mitgelieferte Historien ins Profil
npm run dev
Env (.env.local, Vorlage in .env.example):
N8N_BASE=https://n8n.friedemann-schuetz.de
N8N_BP_SECRET=<Secret des besucherpuls-status-Webhooks>
Deploy: git push origin main (Vercel-GitHub-Integration), vorher lokal npm run build
grün. Nicht vercel deploy --prod.