net.atmowx.observation

atmowx.net

Schema Diff

+41 -0

From

CID
bafyreidwjrtrgky...
Indexed At
2026-07-24 05:13 UTC
View this version

To

CID
bafyreig43ic32al...
Indexed At
2026-07-25 18:08 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 16 non-breaking changes.

Non-Breaking Changes (16)
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.co" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.no2" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.ozone" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm1" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm10" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm25" }
  • AddedVertex AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.so2" }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body", tgt: "net.atmowx.observation:body.airQuality", kind: "prop", name: Some("airQuality") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.co", kind: "prop", name: Some("co") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.no2", kind: "prop", name: Some("no2") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.ozone", kind: "prop", name: Some("ozone") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm1", kind: "prop", name: Some("pm1") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm10", kind: "prop", name: Some("pm10") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm25", kind: "prop", name: Some("pm25") }
  • AddedEdge AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.so2", kind: "prop", name: Some("so2") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.co" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.no2" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.ozone" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm1" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm10" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.pm25" }
  • AddedVertex { vertex_id: "net.atmowx.observation:body.airQuality.so2" }

Additional Notes

  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body", tgt: "net.atmowx.observation:body.airQuality", kind: "prop", name: Some("airQuality") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.co", kind: "prop", name: Some("co") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.no2", kind: "prop", name: Some("no2") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.ozone", kind: "prop", name: Some("ozone") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm1", kind: "prop", name: Some("pm1") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm10", kind: "prop", name: Some("pm10") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.pm25", kind: "prop", name: Some("pm25") }
  • Non-breaking: AddedEdge { src: "net.atmowx.observation:body.airQuality", tgt: "net.atmowx.observation:body.airQuality.so2", kind: "prop", name: Some("so2") }
1 1
{
2 2
  "id": "net.atmowx.observation",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "station",
11 11
          "observedAt"
12 12
        ],
13 13
        "properties": {
14 14
          "wind": {
15 15
            "type": "object",
16 16
            "properties": {
17 17
              "gust": {
18 18
                "ref": "net.atmowx.defs#quantity",
19 19
                "type": "ref",
20 20
                "description": "m/s."
21 21
              },
22 22
              "speed": {
23 23
                "ref": "net.atmowx.defs#quantity",
24 24
                "type": "ref",
25 25
                "description": "m/s."
26 26
              },
27 27
              "direction": {
28 28
                "type": "integer",
29 29
                "maximum": 359,
30 30
                "minimum": 0,
31 31
                "description": "Degrees true, 0 = north."
32 32
              },
33 33
              "gustDirection": {
34 34
                "type": "integer",
35 35
                "maximum": 359,
36 36
                "minimum": 0,
37 37
                "description": "Degrees true, 0 = north."
38 38
              }
39 39
            }
40 40
          },
41 41
          "extra": {
42 42
            "type": "array",
43 43
            "items": {
44 44
              "refs": [
45 45
                "net.atmowx.defs#measurement"
46 46
              ],
47 47
              "type": "union",
48 48
              "closed": false
49 49
            },
50 50
            "maxLength": 64,
51 51
            "description": "Measurements not covered by core fields. Open union."
52 52
          },
53 53
          "station": {
54 54
            "type": "string",
55 55
            "format": "at-uri",
56 56
            "description": "AT-URI of the net.atmowx.station this reading came from."
57 57
          },
58 58
          "uvIndex": {
59 59
            "ref": "net.atmowx.defs#quantity",
60 60
            "type": "ref",
61 61
            "description": "UV index, dimensionless."
62 62
          },
63 63
          "dewPoint": {
64 64
            "ref": "net.atmowx.defs#quantity",
65 65
            "type": "ref",
66 66
            "description": "Dew point, °C."
67 67
          },
68 68
          "snowDepth": {
69 69
            "ref": "net.atmowx.defs#quantity",
70 70
            "type": "ref",
71 71
            "description": "Millimeters."
72 72
          },
73 +
          "airQuality": {
74 +
            "type": "object",
75 +
            "properties": {
76 +
              "co": {
77 +
                "ref": "net.atmowx.defs#quantity",
78 +
                "type": "ref",
79 +
                "description": "CO mass concentration, µg/m³."
80 +
              },
81 +
              "no2": {
82 +
                "ref": "net.atmowx.defs#quantity",
83 +
                "type": "ref",
84 +
                "description": "NO₂ mass concentration, µg/m³."
85 +
              },
86 +
              "pm1": {
87 +
                "ref": "net.atmowx.defs#quantity",
88 +
                "type": "ref",
89 +
                "description": "PM1 mass concentration, µg/m³."
90 +
              },
91 +
              "so2": {
92 +
                "ref": "net.atmowx.defs#quantity",
93 +
                "type": "ref",
94 +
                "description": "SO₂ mass concentration, µg/m³."
95 +
              },
96 +
              "pm10": {
97 +
                "ref": "net.atmowx.defs#quantity",
98 +
                "type": "ref",
99 +
                "description": "PM10 mass concentration, µg/m³."
100 +
              },
101 +
              "pm25": {
102 +
                "ref": "net.atmowx.defs#quantity",
103 +
                "type": "ref",
104 +
                "description": "PM2.5 mass concentration, µg/m³."
105 +
              },
106 +
              "ozone": {
107 +
                "ref": "net.atmowx.defs#quantity",
108 +
                "type": "ref",
109 +
                "description": "O₃ mass concentration, µg/m³."
110 +
              }
111 +
            },
112 +
            "description": "Outdoor ambient air-quality mass concentrations, µg/m³. Derived indexes (AQI, EAQI, …) are intentionally not stored: they are jurisdiction- and time-window-specific and must be computed by consumers from the concentration series."
113 +
          },
73 114
          "observedAt": {
74 115
            "type": "string",
75 116
            "format": "datetime",
76 117
            "description": "Measurement time, UTC."
77 118
          },
78 119
          "visibility": {
79 120
            "ref": "net.atmowx.defs#quantity",
80 121
            "type": "ref",
81 122
            "description": "Meters."
82 123
          },
83 124
          "temperature": {
84 125
            "ref": "net.atmowx.defs#quantity",
85 126
            "type": "ref",
86 127
            "description": "Air temperature, °C."
87 128
          },
88 129
          "soilMoisture": {
89 130
            "ref": "net.atmowx.defs#quantity",
90 131
            "type": "ref",
91 132
            "description": "Percent."
92 133
          },
93 134
          "precipitation": {
94 135
            "type": "object",
95 136
            "properties": {
96 137
              "day": {
97 138
                "ref": "net.atmowx.defs#quantity",
98 139
                "type": "ref",
99 140
                "description": "mm since station-local midnight."
100 141
              },
101 142
              "hour": {
102 143
                "ref": "net.atmowx.defs#quantity",
103 144
                "type": "ref",
104 145
                "description": "mm in the last 60 minutes."
105 146
              },
106 147
              "rate": {
107 148
                "ref": "net.atmowx.defs#quantity",
108 149
                "type": "ref",
109 150
                "description": "mm/h."
110 151
              },
111 152
              "event": {
112 153
                "ref": "net.atmowx.defs#quantity",
113 154
                "type": "ref",
114 155
                "description": "mm in the current rain event."
115 156
              }
116 157
            }
117 158
          },
118 159
          "presentWeather": {
119 160
            "type": "integer",
120 161
            "maximum": 511,
121 162
            "minimum": 0,
122 163
            "description": "WMO code table 4680 (present weather from automatic station)."
123 164
          },
124 165
          "pressureStation": {
125 166
            "ref": "net.atmowx.defs#quantity",
126 167
            "type": "ref",
127 168
            "description": "Absolute station pressure, hPa."
128 169
          },
129 170
          "soilTemperature": {
130 171
            "ref": "net.atmowx.defs#quantity",
131 172
            "type": "ref",
132 173
            "description": "°C at default depth; use extra for multiple depths."
133 174
          },
134 175
          "solarIrradiance": {
135 176
            "ref": "net.atmowx.defs#quantity",
136 177
            "type": "ref",
137 178
            "description": "W/m²."
138 179
          },
139 180
          "pressureSeaLevel": {
140 181
            "ref": "net.atmowx.defs#quantity",
141 182
            "type": "ref",
142 183
            "description": "Mean-sea-level reduced pressure, hPa."
143 184
          },
144 185
          "relativeHumidity": {
145 186
            "ref": "net.atmowx.defs#quantity",
146 187
            "type": "ref",
147 188
            "description": "Relative humidity, percent."
148 189
          }
149 190
        }
150 191
      },
151 192
      "description": "One immutable weather observation. All measurement fields are optional and SI-only: celsius, hectopascal, meters/second, millimeters, W/m². Record key SHOULD be a TID derived from observedAt."
152 193
    }
153 194
  },
154 195
  "$type": "com.atproto.lexicon.schema",
155 196
  "lexicon": 1
156 197
}

Compare Other Versions

Lexicon Garden

@