{"id":19476661,"url":"https://github.com/oklabflensburg/open-sensor-map","last_synced_at":"2026-06-15T19:31:44.329Z","repository":{"id":178965657,"uuid":"662637399","full_name":"oklabflensburg/open-sensor-map","owner":"oklabflensburg","description":"Schnittstelle zur Auswertung der Luftdatensensoren und Darstellung der Feinstaubwerte","archived":false,"fork":false,"pushed_at":"2023-07-10T12:58:22.000Z","size":10,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-12T10:29:00.698Z","etag":null,"topics":["feinstaubsensor","feinstaubsensor-webserver","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://luftdaten.kunstbube.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oklabflensburg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-05T14:58:02.000Z","updated_at":"2023-12-06T15:57:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"e5f9650c-23ef-490d-9a6d-94f7eccc8880","html_url":"https://github.com/oklabflensburg/open-sensor-map","commit_stats":null,"previous_names":["oklabflensburg/open-sensor-map"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oklabflensburg/open-sensor-map","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oklabflensburg%2Fopen-sensor-map","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oklabflensburg%2Fopen-sensor-map/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oklabflensburg%2Fopen-sensor-map/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oklabflensburg%2Fopen-sensor-map/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oklabflensburg","download_url":"https://codeload.github.com/oklabflensburg/open-sensor-map/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oklabflensburg%2Fopen-sensor-map/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34377872,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feinstaubsensor","feinstaubsensor-webserver","hacktoberfest"],"created_at":"2024-11-10T19:41:18.876Z","updated_at":"2026-06-15T19:31:44.312Z","avatar_url":"https://github.com/oklabflensburg.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# open-sensor-map\n\nSchnittstelle zur Auswertung der Luftdatensensoren und Darstellung der Feinstaubwerte \n\n\n\n## Prerequisite\n\n```\nsudo apt install git python3.10 virtualenv nginx-full certbot python3-certbot-nginx\ngit clone https://github.com/oklabflensburg/open-trees-map.git\ncd open-trees-map\ntouch .env\nvirtualenv venv\n. venv/bin/activate\npip install -r requirements.txt\n```\n\n\n## Setup Database\n\n```\nwget -q https://repos.influxdata.com/influxdata-archive_compat.key\necho '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c \u0026\u0026 cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg \u003e /dev/null\necho 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list\nsudo apt update\nsudo apt upgrade\nsudo apt install influxdb2\n```\n\n```\nsudo systemctl start influxdb\nsudo systemctl enable influxdb\n```\n\n\n## Setup Service\n\n```\nsudo vim /etc/systemd/system/open-sensor-map-backend.service\n```\n\n```\n[Unit]\nDescription=API instance to serve the backend\nAfter=network.target\nRequires=postgresql.service\n\n[Service]\nType=simple\nUser=www-data\nGroup=www-data\nDynamicUser=true\n\nWorkingDirectory=/opt/git/open-sensor-map\nPrivateTmp=true\n\nEnvironmentFile=/opt/git/open-sensor-map/.env\nExecStart=/opt/git/open-sensor-map/venv/bin/uvicorn \\\n        --proxy-headers \\\n        --forwarded-allow-ips='*' \\\n        --workers=4 \\\n        --port=8000 \\\n        main:app\n\nExecReload=/bin/kill -HUP ${MAINPID}\nRestartSec=1\nRestart=always\n\n[Install]\nWantedBy=multi-user.target\n```\n\n\n## Start Service\n\n```\nsudo systemctl start open-sensor-map-backend.service\nsudo systemctl status open-sensor-map-backend.service \nsudo systemctl enable open-sensor-map-backend.service\n```\n\n\n## Setup Server\n\nSetup backend webserver configuration for nginx\n\n```\nserver {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name api.open-sensor-map.com;\n\n    charset uft-8;\n\n    add_header Content-Security-Policy \"default-src 'self'; script-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self'; worker-src 'none'; object-src 'none'\";\n\n    root /opt/git/open-sensor-map;\n\n    location / {\n        if ($request_method = 'OPTIONS') {\n            add_header 'Access-Control-Allow-Origin' '*';\n            #\n            # Om nom nom cookies\n            #\n            add_header 'Access-Control-Allow-Credentials' 'true';\n            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';\n\n            #\n            # Custom headers and headers various browsers *should* be OK with but aren't\n            #\n            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';\n\n            #\n            # Tell client that this pre-flight info is valid for 20 days\n            #\n            add_header 'Access-Control-Max-Age' 1728000;\n            add_header 'Content-Type' 'text/plain charset=UTF-8';\n            add_header 'Content-Length' 0;\n            return 204;\n        }\n\n        if ($request_method = 'POST') {\n            add_header 'Access-Control-Allow-Origin' '*';\n            add_header 'Access-Control-Allow-Credentials' 'true';\n            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';\n            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';\n        }\n\n        if ($request_method = 'GET') {\n            add_header 'Access-Control-Allow-Origin' '*';\n            add_header 'Access-Control-Allow-Credentials' 'true';\n            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';\n            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';\n        }\n\n        proxy_pass http://localhost:8000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n\n        proxy_buffering on;\n        proxy_cache_valid 200 5m;\n        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;\n        proxy_cache_bypass $http_cache_control;\n        add_header X-Proxy-Cache $upstream_cache_status;\n        add_header Strict-Transport-Security \"max-age=15768000; includeSubDomains; preload\" always;\n    }\n\n    ssl_certificate /etc/letsencrypt/live/open-sensor-map.de/fullchain.pem; # managed by Certbot\n    ssl_certificate_key /etc/letsencrypt/live/open-sensor-map.de/privkey.pem; # managed by Certbot\n    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot\n    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot\n}\n```\n\n\n## Setup Certificates\n\n```\nsudo nginx -t\nsudo certbot\nsudo systemctl reload nginx.service\n```\n\n\n## Start Application\n\n```\nuvicorn main:app --reload\n```\n\n```\nINFO:     Will watch for changes in these directories: ['/opt/git/open-sensor-map']\nINFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)\nINFO:     Started reloader process [11954] using StatReload\nINFO:     Started server process [11956]\nINFO:     Waiting for application startup.\nINFO:     Application startup complete.\n{'esp8266id': '15221686', 'software_version': 'NRZ-2020-133', 'sensordatavalues': [{'value_type': 'SDS_P1', 'value': '6.18'}, {'value_type': 'SDS_P2', 'value': '1.67'}, {'value_type': 'BME280_temperature', 'value': '15.13'}, {'value_type': 'BME280_pressure', 'value': '101313.66'}, {'value_type': 'BME280_humidity', 'value': '74.93'}, {'value_type': 'samples', 'value': '5033673'}, {'value_type': 'min_micro', 'value': '28'}, {'value_type': 'max_micro', 'value': '20050'}, {'value_type': 'interval', 'value': '145000'}, {'value_type': 'signal', 'value': '-51'}]}\nINFO:     127.0.0.1:39326 - \"POST /data/ HTTP/1.1\" 200 OK\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foklabflensburg%2Fopen-sensor-map","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foklabflensburg%2Fopen-sensor-map","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foklabflensburg%2Fopen-sensor-map/lists"}