Weather, air quality and nearest live sensors anywhere, each with a signed receipt. Free, no key.
🔄 Synced from a monorepo — but with a live history.
gaiamirrors 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.
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.
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)
# 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"}}'
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 id | Capability | Upstream | Key? |
|---|---|---|---|
nws-01 | gaia.weather.read@v1 | NOAA/NWS api.weather.gov | no |
om-wx-01 | gaia.weather.read@v1 | Open-Meteo weather | no |
osm-01 | gaia.air.read@v1 | openSenseMap | no |
om-aq-01 | gaia.air.read@v1 | Open-Meteo air quality | no |
sta-01 | gaia.air.read@v1 | OGC SensorThings (Fraunhofer) | no |
openaq-01 | gaia.air.read@v1 | OpenAQ v3 | yes — free key from explore.openaq.org → GAIA_OPENAQ_API_KEY |
uk-grid-01 | gaia.grid.read@v1 | UK Carbon Intensity | no |
usgs-quake-01 | gaia.quake.read@v1 | USGS GeoJSON feed | no |
noaa-tide-01 | gaia.tide.read@v1 | NOAA CO-OPS tides | no |
firms-fire-01 | gaia.fire.read@v1 | NASA FIRMS VIIRS (cite NASA) | no |
safecast-01 | gaia.radiation.read@v1 | Safecast (CC0) | no |
cybernews-jam-01 | gaia.jamming.read@v1 | CyberNews GNSS (CC BY 4.0) | no |
feeder-adsb-01 | gaia.adsb.read@v1 | Own dump1090 ingest | GAIA_FEEDER_* |
feeder-ais-01 | gaia.ais.read@v1 | Own AIS ingest | GAIA_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"}}'
| Capability | Price | What it does | Guide |
|---|---|---|---|
gaia.place.resolve@v1 | free | Any 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.001 | Day-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.002 | When 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.005 | Latest cloud-free Sentinel-2 view of any land point: NDVI, NDWI, NBR, NDMI | Imagery |
gaia.actuator.list@v1 | free | The operator's switchable devices and their limits | Device control |
gaia.actuate@v1 | $0.05 | Switch 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 owner | Device control |
gaia.owner.command@v1 | free | The owner (or a delegate) switches their own plug, signed with their wallet (EIP-712) — no hub, no payment | Device control |
gaia.owner.consumption@v1 | free | The owner reads their plug's hourly or daily consumption, signed by the plug's key | Device control |
gaia.consumption.read@v1 | $0.01 | A plug's consumption statistics, only where its owner put them on sale, in whole finished hours or days | Device control |
MIT — see LICENSE.
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.