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