Jamorham
Nightscout용 xDrip+ 버전
HamariHawa는 파키스탄·인도 지역의 농작물 화재·연기·교통·NO₂·오염을 실시간 위성 지도와 58개 도시의 건강 영향으로 보여줍니다
Live satellite map of crop fires, smoke, traffic NO₂ and pollution over Pakistan and India, and what the air means for health in 58 cities. English, Urdu, Hindi.
건강HTML · JavaScriptGitHub @hammadtq온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Live satellite map of fires, smoke and air pollution over Pakistan and North India, in English, Urdu and Hindi.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A live satellite map of fires, smoke and air pollution over Pakistan and India, in English, Urdu and Hindi: https://hamarihawa.org
flowchart LR
firms["NASA FIRMS<br/>satellite fires"] --> feed["GitHub Action, every 15 min<br/>scripts/build-feed.py"]
s5p["Sentinel-5P<br/>NO₂"] --> no2["GitHub Action, daily<br/>scripts/build-no2.py"]
feed --> kv[("Cloudflare KV<br/>fires-24/48/168, days, dist, no2-*")]
no2 --> kv
kv --> worker["Cloudflare Worker<br/>/api/*"]
meteo["Open-Meteo<br/>city air, wind"] --> worker
worker --> page["hamarihawa.org"]
The heavy work (naming every fire after its village, merging duplicate detections, building the KML and the daily archive) runs in GitHub Actions, so the Worker only serves files from KV and caches them at the edge. Everything fits Cloudflare's free plan.
site/: Cloudflare Worker (src/worker.js, src/kml.js, and src/pages.js for the daily and district pages, inside the shell src/shell.html that scripts/build-pages.py writes) plus the static site (public/). Plain HTML, CSS and JavaScript with Leaflet; there is no build step.scripts/build-feed.py: downloads NASA FIRMS fire detections (VIIRS + MODIS), names each fire after the nearest GeoNames village and writes the feed to Workers KV. Runs every 15 minutes from .github/workflows/feed.yml. It also keeps the daily archive in KV (days index, dist districts, day-YYYY-MM-DD spots, on Pakistan time) and adds a trend block to each feed. The dpages key holds the per-district season numbers for the district pages. It drops unconfirmed daytime "fire" bursts over the Thar desert (see drop_bursts).scripts/backfill-days.py: one-off fill of past days in the same archive from the FIRMS area API (needs a free MAP_KEY in ~/.config/hamarihawa/firms_key). Seasons 1 Oct–30 Nov 2019–2025 are filled.scripts/season-stats.py + scripts/build-report-punjabs.py: Suomi NPP season statistics for the two Punjabs (from the backfill cache) and the Two Punjabs report built from them (site/public/report/two-punjabs/).scripts/build-wind.py: 10 m wind on a 2° grid over the region from Open-Meteo, uploaded hourly to the KV key wind by .github/workflows/wind.yml and served at /api/wind.scripts/build-no2.py: 14-day Sentinel-5P NO₂ average and labelled traffic/industry hotspots, uploaded to KV daily by .github/workflows/no2.yml.scripts/build-places.py: rebuilds the village index in data/places/ from GeoNames dumps, plus the Pakistan and India outlines (geoBoundaries) that decide which country a fire is in. scripts/geo.py holds the region and the point-in-polygon test.scripts/build-landcover.py: one-time cropland and tree-cover grid (data/landcover.bin.gz) from ESA WorldCover 2021, which decides a fire's type. Needs rasterio and numpy.scripts/test_feed.py: tests for the write budget, the desert-burst filter and country assignment (python3 -I scripts/test_feed.py).scripts/build-sites.py, scripts/build-sources.py: the Pollution sites directory and source layers in .You need Node 18+ and Python 3.11+. The scripts use only the Python standard library, except build-no2.py (Pillow) and osm-industrial.py (pyosmium).
# build a fire feed from NASA's public files into ./feed (no keys needed)
python3 -I scripts/build-feed.py --out feed
# serve the site with a local KV store
cd site
npx wrangler kv key put --binding FEED --local fires-24 --path ../feed/fires-24.json
npx wrangler kv key put --binding FEED --local fires-48 --path ../feed/fires-48.json
npx wrangler kv key put --binding FEED --local fires-168 --path ../feed/fires-168.json
npx wrangler kv key put --binding FEED --local days --path ../feed/days.json
npx wrangler dev --var DEV:1 --port 8791
Then open http://127.0.0.1:8791. DEV:1 turns off the HTTPS redirect for local use. NO₂ layers stay empty until you run scripts/build-no2.py and load its output the same way.
npx wrangler kv namespace create FEED) and put its id in site/wrangler.jsonc and in the three workflows.routes in site/wrangler.jsonc, then cd site && npx wrangler deploy.CLOUDFLARE_API_TOKEN (permission: Workers KV Storage, Edit) and the variable CLOUDFLARE_ACCOUNT_ID. Point FIRMS_BASE in .github/workflows/feed.yml at your own Worker's /api/firms, since GitHub's runners can't reach NASA directly.Nothing on the site needs to be taken on trust: the inputs are public and every step is in this repository. If you use a coding assistant (Claude Code, Cursor, GitHub Copilot and the like), point it at this repo and ask it to verify a claim. Some starting points:
scripts/backfill-days.py and scripts/season-stats.py with my NASA FIRMS key, rebuild site/public/report/two-punjabs/seasons.json from scratch and tell me whether every number in the Two Punjabs report matches."scripts/build-feed.py and explain how a fire gets its village name and its 'likely type'. Find ways a fire could be tagged as a brick kiln or crop burning wrongly, and test a few against the live feed at https://hamarihawa.org/api/fires?hours=24&v=2."seasons.json with India's official CAQM figures and explain the year where they disagree."site/public/app.js (cigarettes, multiple of the WHO limit, years of life, extra deaths) against the sources cited on the About page."A free FIRMS key is only needed to rebuild past seasons (https://firms.modaps.eosdis.nasa.gov/api/map_key). The live feed and the local site need no keys. If you find something wrong, open an issue.
Issues and pull requests are welcome, especially:
site/public/i18n.js, scripts/pages/*-ur.html / *-hi.html and site/public/trends/trends.js. Natural phrasing matters more than word-for-word accuracy.Keep the site fast and dependency-free: no frameworks or build step. Write to [email protected] for anything else, and see SECURITY.md for security reports.
Code: MIT (LICENSE). Data files have their own licences, mostly CC BY 4.0, with OpenStreetMap layers under ODbL and the brick-kiln data non-commercial (CC BY-NC 4.0). See DATA-LICENSES.md for each file. Please credit "HamariHawa (hamarihawa.org)" along with the original sources.
Fire data: NASA FIRMS. NO₂: Copernicus Sentinel-5P via NASA GIBS. Air quality and wind: Copernicus CAMS and Open-Meteo. Place names: GeoNames. Map data: © OpenStreetMap contributors. Base map: Esri.
site/public/sources/scripts/osm-industrial.py: industrial estates, named fossil power plants and major roads (--roads) from Geofabrik OpenStreetMap extracts.scripts/build-og-report.py: the Two Punjabs link-preview card (site/public/og/two-punjabs.png), in the same style as scripts/build-og.py.scripts/build-og-live.py: fresh link-preview images for the live map and every city page, from the live feed and wind, every hour (.github/workflows/og.yml), stored in KV as one value (og-live) and served at /og/live/<id>.jpg. Fonts in scripts/fonts/ (Kalam and Inter, SIL Open Font License).scripts/build-kml.py: the pollution-sites layer for Google Earth (site/public/kml/sources.kml). site/public/hamarihawa.kml links it with the live layers the Worker serves.scripts/build-pages.py: builds /data/, /trends/, /reports/, the rolling /updates/ page with its Atom feed, and sitemap.xml (dates from git). Page text is in scripts/pages/{data,trends}-{en,ur,hi}.html. To post an update, add an entry at the top of site/public/updates/updates.json and rerun it.report/: the 24-month Lahore and Islamabad Air Ledger, also served at /report/.docs/IDEA.md: the original plan, kept for history.