New device family: a standalone, battery-powered air-quality sensor
puck (ASM-KR-TP1-22-* board) with no controllable-appliance state at
all -- no /power/*, only /energy/battery/vs/0. Routes via both /oic/d
('x.com.st.d.airqualitysensor', confirmed against the real dump) and
the 'ASM' modelNum board token as a fallback.
/sensors/vs/0 reuses air_purifier.AIR_QUALITY's existing {type, value}
items-list decode (common.sensor_item_value) for dust/fine_dust/
super_fine_dust/odor/clean_level, sharing those capabilities' catalog
entries, and adds a CO2 reading those families don't report. The
particulate sensors deliberately get no pm10/pm25/pm1 device_class:
the values read as physically consistent (coarser >= finer) but
Samsung's own two-tier dust naming doesn't confirm where this board's
three-tier split actually maps, and mislabeling a read-side unit is a
standing, not one-shot, kind of wrong -- exposed as plain named
sensors instead. Humidity, battery/charging, and the informational air
quality standard are otherwise straightforward field reads.
/dnd/vs/0 (do-not-disturb window) is a flagged educated guess: the
write contract mirrors the read side's own string/time-format shape
(the safest kind of guess) but has no idle-vs-active dump to confirm
it end-to-end, so it's called out as such in code and will need a
reporter to verify on real hardware. /keepnormalstate/vs/0 and
/sensordatasinks/vs/0 are genuinely opaque (single unexplained value,
no supported-values list) and are ignored rather than guessed at.
Locked in with a scrubbed fixture, golden, and capability tests.
185 lines
5.1 KiB
JSON
185 lines
5.1 KiB
JSON
{
|
|
"device0": [
|
|
{
|
|
"rt": [
|
|
"x.com.samsung.devcol",
|
|
"oic.wk.col"
|
|
],
|
|
"if": [
|
|
"oic.if.baseline",
|
|
"oic.if.ll",
|
|
"oic.if.b"
|
|
]
|
|
},
|
|
{
|
|
"href": "/airqualitystandard/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.standard": "AirCleanAssociation"
|
|
}
|
|
},
|
|
{
|
|
"href": "/alarms/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.items": [
|
|
{
|
|
"x.com.samsung.da.id": "0",
|
|
"x.com.samsung.da.description": "Version",
|
|
"x.com.samsung.da.alarmType": "Device",
|
|
"x.com.samsung.da.code": "ErrorCode_OFF",
|
|
"x.com.samsung.da.triggeredTime": "2026-07-30T02:42:57",
|
|
"x.com.samsung.da.state": "Deleted"
|
|
}
|
|
],
|
|
"rt": [
|
|
"x.com.samsung.da.alarms"
|
|
],
|
|
"if": [
|
|
"oic.if.baseline",
|
|
"oic.if.a"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"href": "/dnd/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.value": "false",
|
|
"x.com.samsung.da.startTime": "14:00:00",
|
|
"x.com.samsung.da.endTime": "22:00:00",
|
|
"x.com.samsung.da.visible": "true"
|
|
}
|
|
},
|
|
{
|
|
"href": "/energy/battery/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.battery": "80",
|
|
"x.com.samsung.da.batteryResolution": "1",
|
|
"x.com.samsung.da.charging": "Off"
|
|
}
|
|
},
|
|
{
|
|
"href": "/humidity/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.humidity": "57",
|
|
"x.com.samsung.da.validity": "Valid"
|
|
}
|
|
},
|
|
{
|
|
"href": "/information/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.modelNum": "ASM-KR-TP1-22-ACMB1M|10243041|75000000001611C40800020000080000",
|
|
"x.com.samsung.da.description": "ASM-KR-TP1-22-ACMB1M",
|
|
"x.com.samsung.da.serialNum": "REDACTED",
|
|
"x.com.samsung.da.otnDUID": "REDACTED",
|
|
"x.com.samsung.da.items": [
|
|
{
|
|
"x.com.samsung.da.id": "0",
|
|
"x.com.samsung.da.description": "Version",
|
|
"x.com.samsung.da.type": "Software",
|
|
"x.com.samsung.da.number": "02443A260310",
|
|
"x.com.samsung.da.newVersionAvailable": "0"
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "1",
|
|
"x.com.samsung.da.description": "Version",
|
|
"x.com.samsung.da.type": "Firmware",
|
|
"x.com.samsung.da.number": "22050300",
|
|
"x.com.samsung.da.newVersionAvailable": "0"
|
|
}
|
|
],
|
|
"x.com.samsung.da.diagProtocolType": "WIFI_HTTPS",
|
|
"x.com.samsung.da.diagLogType": [
|
|
"errCode",
|
|
"dump"
|
|
],
|
|
"x.com.samsung.da.diagDumpType": "file",
|
|
"x.com.samsung.da.diagEndPoint": "SSM",
|
|
"x.com.samsung.da.diagMnid": "0AJT",
|
|
"x.com.samsung.da.diagSetupid": "AM0",
|
|
"x.com.samsung.da.diagMinVersion": "1.0"
|
|
}
|
|
},
|
|
{
|
|
"href": "/keepnormalstate/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.keepnormal": 0
|
|
}
|
|
},
|
|
{
|
|
"href": "/realtimenotiforclient/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.timeforshortnoti": "0",
|
|
"x.com.samsung.da.longnotisubscription": "true",
|
|
"x.com.samsung.da.periodicnotisubscription": "true"
|
|
}
|
|
},
|
|
{
|
|
"href": "/sensordatasinks/vs/0",
|
|
"rep": {
|
|
"remove": ""
|
|
}
|
|
},
|
|
{
|
|
"href": "/sensors/vs/0",
|
|
"rep": {
|
|
"x.com.samsung.da.cleanLevel": "2",
|
|
"x.com.samsung.da.refresh": "Off",
|
|
"x.com.samsung.da.lastSensingTime": "1785379376",
|
|
"x.com.samsung.da.items": [
|
|
{
|
|
"x.com.samsung.da.id": "0",
|
|
"x.com.samsung.da.description": "Sensor for CleanLevel",
|
|
"x.com.samsung.da.type": "CleanLevel",
|
|
"x.com.samsung.da.value": [
|
|
"2"
|
|
]
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "1",
|
|
"x.com.samsung.da.description": "Sensor for Odor",
|
|
"x.com.samsung.da.type": "Odor",
|
|
"x.com.samsung.da.value": [
|
|
"1"
|
|
]
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "2",
|
|
"x.com.samsung.da.description": "Sensor for Dust",
|
|
"x.com.samsung.da.type": "Dust",
|
|
"x.com.samsung.da.value": [
|
|
"31",
|
|
"2"
|
|
]
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "3",
|
|
"x.com.samsung.da.description": "Sensor for FineDust",
|
|
"x.com.samsung.da.type": "FineDust",
|
|
"x.com.samsung.da.value": [
|
|
"23",
|
|
"2"
|
|
]
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "4",
|
|
"x.com.samsung.da.description": "Sensor for SuperFineDust",
|
|
"x.com.samsung.da.type": "SuperFineDust",
|
|
"x.com.samsung.da.value": [
|
|
"18",
|
|
"2"
|
|
]
|
|
},
|
|
{
|
|
"x.com.samsung.da.id": "5",
|
|
"x.com.samsung.da.description": "Sensor for CO2",
|
|
"x.com.samsung.da.type": "CO2",
|
|
"x.com.samsung.da.value": [
|
|
"498",
|
|
"1"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|