Live weather and air quality (GAIA)

Weather, air quality and nearest live sensors anywhere, each with a signed receipt. Free, no key.

OtherPythonv1.0.0

🔄 Synced from a monorepo — but with a live history. gaia mirrors the canonical AI-Factory monorepo. History here is append-only (no force-push). Pull requests are welcome — merged PRs are imported back into the monorepo and re-synced here, so your contribution becomes canonical. 💬 Issues · Pull requests both welcome.

GAIA — physical-world oracle gateway

Own a weather station or air-quality sensor? Sell your readings through your own Hub + GAIA.

For an existing MQTT station, see the single-station MQTT adapter.

🌐 English · Русский · Español · Français · 中文 · Glossary

GAIA is a physical-world oracle gateway that sells Ed25519-attested sensor readings from virtual IoT devices as paid AIMarket v2 capabilities, and serves a Metis-envelope-compatible /v1/verify so the hub's Pay-on-Verified escrow can settle them — an honest reading gets the provider paid, a lying sensor refunds the buyer automatically.

It is the ecosystem's third oracle class: math oracles prove computations, Metis judges LLM output, GAIA grounds settlement in physics. The demo fleet is simulated (two co-located weather stations sharing one site truth, an air-quality node, an energy meter — models imitate BME280/SDS011/SCD30/Shelly-EM-class hardware), but every wire surface — manifest, invoke, receipts, provider signature, verify envelope, W3C WoT Thing Descriptions — is the real one.

📖 Deep-dive (monorepo): docs/iot-physical-oracles.md 🌍 Live devices: gaia/devices/live.py 🎬 3D visualization: frontend/ (cd frontend && npm i && npm run dev)

Quickstart

# Container
docker pull ghcr.io/alexar76/gaia:latest
docker run --rm -p 9320:9320 ghcr.io/alexar76/gaia:latest

# From source (satellite checkout vendors oracle-core)
pip install -e vendor/oracle-core -e ".[dev]"   # or: pip install -e ../oracles/core -e ".[dev]"
python -m gaia.main                             # :9320

Poke it:

curl -s localhost:9320/.well-known/ai-market.json
curl -s localhost:9320/ai-market/v2/manifest

curl -s -X POST localhost:9320/ai-market/v2/invoke \
  -H 'Content-Type: application/json' \
  -d '{"capability_id": "gaia.weather.read@v1", "product_id": "gaia.gateway",
       "input": {"device_id": "ws-01"}}'

Live devices — relay real public sensors

Set GAIA_ENABLE_LIVE=1 to register real public-API relays alongside the simulators. Every relay uses the same Ed25519 attestation + plausibility path. Unreachable upstream → DeviceOffline → 503 / {ok:false} → no debit. Upstream hosts are allowlisted (SSRF defence); invoke clients never supply a URL.

Device idCapabilityUpstreamKey?
nws-01gaia.weather.read@v1NOAA/NWS api.weather.govno
om-wx-01gaia.weather.read@v1Open-Meteo weatherno
osm-01gaia.air.read@v1openSenseMapno
om-aq-01gaia.air.read@v1Open-Meteo air qualityno
sta-01gaia.air.read@v1OGC SensorThings (Fraunhofer)no
openaq-01gaia.air.read@v1OpenAQ v3yes — free key from explore.openaq.org → GAIA_OPENAQ_API_KEY
uk-grid-01gaia.grid.read@v1UK Carbon Intensityno
usgs-quake-01gaia.quake.read@v1USGS GeoJSON feedno
noaa-tide-01gaia.tide.read@v1NOAA CO-OPS tidesno
firms-fire-01gaia.fire.read@v1NASA FIRMS VIIRS (cite NASA)no
safecast-01gaia.radiation.read@v1Safecast (CC0)no
cybernews-jam-01gaia.jamming.read@v1CyberNews GNSS (CC BY 4.0)no
feeder-adsb-01gaia.adsb.read@v1Own dump1090 ingestGAIA_FEEDER_*
feeder-ais-01gaia.ais.read@v1Own AIS ingestGAIA_FEEDER_*

Full operator notes (5 languages): docs/LIVE-RELAYS.md. Add a sensor / pin (GAIA → ATLAS): docs/add-gaia-atlas-sensor.md (EN · RU · ES · FR · ZH).

curl -s -X POST https://iot.modelmarket.dev/ai-market/v2/invoke \
  -H 'Content-Type: application/json' \
  -d '{"capability_id":"gaia.grid.read@v1","product_id":"gaia.gateway",
       "input":{"device_id":"uk-grid-01"}}'

Beyond reading — places, power prices, imagery, device control

CapabilityPriceWhat it doesGuide
gaia.place.resolve@v1freeAny populated place by name ("Kraków", "Paris, Texas", "東京") → one place, or the candidates when the name is ambiguous; says which GAIA reads cover it (GeoNames, CC BY 4.0)Places
gaia.power.price.read@v1$0.001Day-ahead electricity price of a European bidding zone, now and over the next 24 h (SMARD, CC BY 4.0; 15 zones)Power prices
gaia.power.window@v1$0.002When is power cheapest for N hours — with the prices used and their SHA-256 (an 11 kW EV charge was 38 % cheaper at 12:30 than at 08:40 on 2026-10-16)Power prices
gaia.imagery.read@v1$0.005Latest cloud-free Sentinel-2 view of any land point: NDVI, NDWI, NBR, NDMIImagery
gaia.actuator.list@v1freeThe operator's switchable devices and their limitsDevice control
gaia.actuate@v1$0.05Switch the public demo plug on for N seconds or off — paid only for the effect its meter measures (Pay-on-Verified). A real plug answers only its ownerDevice control
gaia.owner.command@v1freeThe owner (or a delegate) switches their own plug, signed with their wallet (EIP-712) — no hub, no paymentDevice control
gaia.owner.consumption@v1freeThe owner reads their plug's hourly or daily consumption, signed by the plug's keyDevice control
gaia.consumption.read@v1$0.01A plug's consumption statistics, only where its owner put them on sale, in whole finished hours or daysDevice control

License

MIT — see LICENSE.

Setup from the maintainer

This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.

Learn More