Compare commits
6 Commits
973c8f11ab
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 3fd97364e0 | |||
| 5c1eb4a42d | |||
| b4c153089f | |||
| cc664f6692 | |||
| 6d99bdafbd | |||
| 58608f7cf8 |
@@ -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
|
||||||
|
|||||||
18
.env.local
18
.env.local
@@ -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
87
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
@@ -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.
|
|
||||||
|
|||||||
@@ -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": {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
let properties2 = await coll.findOne({ _id: newSid });
|
||||||
|
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;
|
properties.othersensors = sensorEntries;
|
||||||
return properties;
|
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++) {
|
||||||
|
|||||||
@@ -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}
|
||||||
@@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>).
|
||||||
|
|
||||||
Reference in New Issue
Block a user