Compare commits

..

6 Commits

Author SHA1 Message Date
3fd97364e0 V 3.2.1 citysensor in allen Texten ersetzt durch ecocurious 2026-04-02 12:38:31 +02:00
5c1eb4a42d Initialize README with project details
Added project description and database structure information.
2026-03-31 14:39:30 +02:00
b4c153089f .env.local entfernt 2026-03-31 14:29:14 +02:00
cc664f6692 die .ignore-Files angepasst 2026-03-31 14:11:06 +02:00
rxf
6d99bdafbd V 3.2.0 2026-03-31 11:43:04 +02:00
rxf
58608f7cf8 Passenden THP-Sensor finden und anzeigen 2026-03-31 11:41:42 +02:00
12 changed files with 190 additions and 55 deletions

View File

@@ -1,10 +1,61 @@
node-modules # Node modules
PYTHON node_modules/
.gitignore
.dockerignore # Logs
build_and_copy.sh logs/
buildit.sh log/
copycontainder.sh *.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Dependency directories
dist/
build/
bower_components/
# Test, coverage, and debug
coverage/
.nyc_output/
*.out
*.tmp
# Editor directories and files
.vscode/
.idea/
*.swp
*.bak
*~
# Mac system files
.DS_Store
# Environment files
.env
.env.*
# Dumps and large sensor data
akws/dump/
*.bson
*.metadata.json
# Public generated files
public/js/*.map
public/js/*.tmp
# Ignore Python cache (if any)
__pycache__/
*.pyc
# Project-specific
Feinstaub_ToDos.pdf
this_is_MacBig
akws
# Build/Deployment files (nicht ins Image kopieren)
docker-compose.yml docker-compose.yml
docker-compose.*.yml
Dockerfile
Dockerfile* Dockerfile*
nginx-proxy *.sh
*.md

View File

@@ -1,18 +0,0 @@
# Environment Variables für lokale Entwicklung mit docker-compose.local.yml
# Diese Datei kann für lokale MongoDB-Verbindungseinstellungen verwendet werden
# Server Configuration
SERVERPORT=3005
DEBUG=true
# MongoDB Configuration - REMOTE SERVER
MONGOHOST=217.72.203.152
MONGOPORT=27037
MONGOBASE=sensor_data
MONGOAUTH=true
MONGOUSRP=admin:mongo4noise
# Timezone
TZ=Europe/Berlin
LOCALDIR=/Users/rxf/Projekte/Geiger_WEB_26

87
.gitignore vendored
View File

@@ -1,8 +1,91 @@
/node_modules/ /node_modules/
Feinstaub_ToDos.pdf Feinstaub_ToDos.pdf
this_is_MacBig this_is_MacBig
.idea /node_modules/
# Logs
logs/
log/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids/
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov/
# Coverage directory used by tools like istanbul
coverage/
# nyc test coverage
.nyc_output/
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt/
# Bower dependency directory (https://bower.io/)
bower_components/
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
dist/
build/
# Optional npm cache directory
.npm/
# Optional eslint cache
.eslintcache
# dotenv environment variables file
.env .env
.env.local.custom .env.*
# VS Code settings
.vscode/
# Mac system files
.DS_Store .DS_Store
# Public generated files
public/js/*.map
public/js/*.tmp
# Ignore dumps and large sensor data
akws/dump/
# Ignore test and debug scripts output
*.out
*.tmp
# Ignore database dumps
*.bson
*.metadata.json
# Ignore backup files
*~
*.bak
*.swp
# Ignore coverage reports
coverage/
# Ignore Python cache (if any)
__pycache__/
*.pyc
# IDEs
.idea
# Project-specific
Feinstaub_ToDos.pdf
this_is_MacBig
akws akws

View File

@@ -1,4 +1,6 @@
# Geiger_WEB # Geiger Web
Verschiedene Grafiken zur Auswertung des Multigeiger.
Stellt die Daten der Multigeiger-Sensoren grafisch dar.
Diese Version hier (geiger_web_26) ist hervorgegangen aus dem Projekt geiger_web und wurde an die neue Struktur der Datenbank angepasst. In der Datenbank werden die Werte nun in Zeitreihen gespeichert.
Beschreibung folgt ... irgendwann.

View File

@@ -1,7 +1,7 @@
{ {
"name": "geiger2", "name": "geiger",
"version": "3.1.3", "version": "3.2.1",
"date": "2026-03-31", "date": "2026-04-02",
"description": "Graphics for multigeiger sensors", "description": "Graphics for multigeiger sensors",
"main": "app.js", "main": "app.js",
"scripts": { "scripts": {

View File

@@ -10,7 +10,7 @@
<ul id = "fehlersensorenliste"></ul> <ul id = "fehlersensorenliste"></ul>
<p> <p>
Falls Dein Sensor dabei ist, kannst Du mir gerne eine <a class="hrefsimu" href="mailto:rexfue@gmail.com">email</a> Falls Dein Sensor dabei ist, kannst Du mir gerne eine <a class="hrefsimu" href="mailto:multigeiger@ecocurious.de">email</a>
schreiben. Wir können dann gemeinsam entscheiden, welche Maßnahmen wir ergreifen können. schreiben. Wir können dann gemeinsam entscheiden, welche Maßnahmen wir ergreifen können.
</p> </p>

View File

@@ -37,7 +37,7 @@
<p> <p>
<div id="fehlerexplain"></div> <br /> <div id="fehlerexplain"></div> <br />
</p> </p>
Du kannst mir gerne eine email ( <a href="mailto:rexfue@gmail.com">rexfue@gmail.com</a> ) Du kannst mir gerne eine email ( <a(href="mailto:multigeiger@ecocurious.de")> mailto:multigeiger@ecocurious.de</a> )
schreiben. Vielleicht können wir das Problem gemeinsam lösen. schreiben. Vielleicht können wir das Problem gemeinsam lösen.
</body> </body>

View File

@@ -2,10 +2,10 @@
<p>Auf der Karte wird jede Zählstation mit dem Radioaktivitäts-Symbol angezeigt. Die Farbe des Symbols ändert sich mit der Zählrate, der Zusammenhang ist rechts oben in der Legende dargestellt.<br> <p>Auf der Karte wird jede Zählstation mit dem Radioaktivitäts-Symbol angezeigt. Die Farbe des Symbols ändert sich mit der Zählrate, der Zusammenhang ist rechts oben in der Legende dargestellt.<br>
Hat der Sensor seit mind. 1 Stunde keine Daten mehr gesendet, so wird er dunkelgrau eingefärbt. Hat er über eine Woche nicht gesendet, wird er nicht mehr dargestellt.<br> Hat der Sensor seit mind. 1 Stunde keine Daten mehr gesendet, so wird er dunkelgrau eingefärbt. Hat er über eine Woche nicht gesendet, wird er nicht mehr dargestellt.<br>
Die Karte ist standardmäßig auf Stuttgart ausgerichtet. Wenn der Aufruf der Webseite mit einer Stadt erfolgt (z.B: <a href="https://multigeiger.citysensor.de/Berlin">https://multigeiger.citysensor.de/Berlin</a>), Die Karte ist standardmäßig auf Stuttgart ausgerichtet. Wenn der Aufruf der Webseite mit einer Stadt erfolgt (z.B: <a href="https://multigeiger.ecocurious.de/Berlin">https://multigeiger.ecocurious.de/Berlin</a>),
so wird die Karte auf diese Stadt zentriert. <br /> so wird die Karte auf diese Stadt zentriert. <br />
Wird statt dessen eine Sensornummer angegeben, so wird die Karte auf diesen Sensor zentriert und gleich die zugehörige Grafik angezeigt Wird statt dessen eine Sensornummer angegeben, so wird die Karte auf diesen Sensor zentriert und gleich die zugehörige Grafik angezeigt
(z.B. für den Sensor Nr. 34188 ist der Aufruf dann: <a href="https://multigeiger.citysensor.de/34188">https://multigeiger.citysensor.de/34188</a>). (z.B. für den Sensor Nr. 34188 ist der Aufruf dann: <a href="https://multigeiger.ecocurious.de/34188">https://multigeiger.ecocurious.de/34188</a>).
</p> </p>
<h3 id="toc_2">Bedienelemente</h3> <h3 id="toc_2">Bedienelemente</h3>

View File

@@ -64,34 +64,51 @@ function getSensorName(db,sid) {
// fetch the properties for the given sensor // fetch the properties for the given sensor
async function getSensorProperties(db,sid) { async function getSensorProperties(db,sid) {
let start = new Date(); let start = new Date();
console.log("Get properties for", sid,"from DB"); console.log("Get properties for", sid, "from DB");
let sensorEntries = [{'sid':sid}]; let sensorEntries = [{ sid: sid }];
let coll = db.collection('properties'); let coll = db.collection('properties');
let properties; let properties;
try { try {
properties = await coll.findOne({_id: sid}); properties = await coll.findOne({ _id: sid });
} } catch (e) {
catch(e) { console.log("getSensorProperties", e);
console.log("getSensorProperties",e);
return {}; return {};
} }
console.log("got properties - time:", new Date() - start); console.log("got properties - time:", new Date() - start);
if(properties == null) return null; if (properties == null) return null;
// name is now an array, get the current (last) entry // name is now an array, get the current (last) entry
let currentName = properties.name; let currentName = properties.name;
if (Array.isArray(properties.name)) { if (Array.isArray(properties.name)) {
currentName = properties.name[properties.name.length - 1].name; currentName = properties.name[properties.name.length - 1].name;
} }
// Overwrite name field with string for frontend compatibility // Overwrite name field with string for frontend compatibility
properties.name = currentName; properties.name = currentName;
sensorEntries[0]['name'] = currentName; sensorEntries[0]['name'] = currentName;
// Check if othersensors exists (might not in new DB structure) // Neue Logik: Immer nur den aktuellen Sensor eintragen, dann nach passendem thp-Sensor suchen
if (!properties.othersensors || properties.othersensors.length === 0) { let newSid = parseInt(sid) + 1;
properties.othersensors = sensorEntries; let properties2 = await coll.findOne({ _id: newSid });
return properties; if (properties2) {
// Prüfe Typ (name enthält "BME" oder "thp") und gleiche Koordinaten
let name2 = properties2.name;
if (Array.isArray(name2)) {
name2 = name2[name2.length - 1].name;
}
let isTHP = (properties2.type && properties2.type.toLowerCase() === 'thp');
let sameLocation = false;
try {
const loc1 = properties.location && Array.isArray(properties.location) && properties.location[0] && properties.location[0].id;
const loc2 = properties2.location && Array.isArray(properties2.location) && properties2.location[0] && properties2.location[0].id;
sameLocation = (loc1 !== undefined && loc2 !== undefined && loc1 === loc2);
} catch (e) {
sameLocation = false;
}
if (isTHP && sameLocation) {
sensorEntries.push({ sid: newSid, name: name2 });
}
} }
properties.othersensors = sensorEntries;
return properties;
let mustbeobject = false; let mustbeobject = false;
for(let i = 0, j=1; i<properties.othersensors.length; i++) { for(let i = 0, j=1; i<properties.othersensors.length; i++) {

View File

@@ -9,5 +9,5 @@ block content
#author #author
#mailadr #mailadr
a(href="mailto:rexfue@gmail.com") mailto:rexfue@gmail.com a(href="mailto:multigeiger@ecocurious.de") mailto:multigeiger@ecocurious.de
#versn Version: #{version} vom #{date} #versn Version: #{version} vom #{date}

View File

@@ -96,7 +96,7 @@ block content
#dialogWinSet #dialogWinSet
#author #author
#mailadr #mailadr
a(href="mailto:rexfue@gmail.com") mailto:rexfue@gmail.com a(href="mailto:multigeiger@ecocurious.de") mailto:multigeiger@ecocurious.de
#versn Version: #{version} vom #{date} #versn Version: #{version} vom #{date}

View File

@@ -27,5 +27,5 @@ block content
Auswahl entweder durch Anklicken der Auswahl entweder durch Anklicken der
Sensor-Nummer in der Tabelle oder direkt Aufrufen durch Sensor-Nummer in der Tabelle oder direkt Aufrufen durch
Anhängen der Sensornummer an die URL (z.B. Anhängen der Sensornummer an die URL (z.B.
<strong> feinstaub.rexfue.de/140</strong>). <strong> multigeiger.ecocurious.de/68890</strong>).