Aqara TVOC ZHAAirQuality data

Heu, IDK, I only use “pi” on my side, perhaps it s because the folder used.
Try to use another folder or change right on this one.

sudo chmod -R 777 folder_name

Values are in seconds, so can try 1800

I added the bindings for all 3 measurements to the DDF:

It looks good. I have a AirQuality measurements every 15 minutes.

I still don’t really get what “Reportable change” is and what 20 means…

And I don’t really get whats the benefit of editing my ddf files. Isn’t it overwritten by the next update?

It’s the minimum difference value you need to have to trigger a report, for exemple if the previous values for temperature was 2200, you will have a report when the value became 2220.

And I don’t really get whats the benefit of editing my ddf files. Isn’t it overwritten by the next update?

Realy good question ^^, and no, it 's for that we need you.
Something usefull for others users is you make tests on your side, to choose the better one (or just the one you prefer for you) and submit the modified DDF (visible on the last tab)

You can publish it here, but better to make a PR if you can, like that your changes will be automatically added on the next deconz version under your name.
Else you can just copy/paste it here, someone else will make the PR.

Ah, so 20 makes sense for temperature and humidity (0,2° / 0,2 % change). But what about the airqualityppb? better to use 1?

Oh, I just noticed it stopped reporting on 09:27 today. almost exactly 24 hours after I edited the DDF. All 3 types :frowning:

Har … The device is still connected ?
But it have started to report when you have added the bind, and stoped 24h after you have modified the report value ?

It’s still there but now “unreachable”. I pressed the button and it sent one value.

Yes

Ha yes, deconz mark it as “unreachable” after to much time without report.

Perhaps he don’t like thoses value . And if you set a bind, without setting the report ? (only use the left panel)

Im looking on z2m code
There setting a bind for temperature/humidity/powerconfig and Analog input
For the analog input it seem they are using 10/3600/5

I updated the DDF to




{
  "schema": "devcap1.schema.json",
  "manufacturername": "$MF_LUMI",
  "modelid": "lumi.airmonitor.acn01",
  "vendor": "Aqara",
  "product": "TVOC Air Quality Monitor",
  "sleeper": true,
  "status": "Bronze",
  "path": "/devices/xiaomi/xiaomi_airmonitor_acn01.json",
  "subdevices": [
    {
      "type": "$TYPE_AIR_QUALITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x000c"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x000C"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/temperature"
        },
        {
          "name": "state/airquality",
          "parse": {
            "fn": "numtostr",
            "op": "le",
            "srcitem": "state/airqualityppb",
            "to": [
              65,
              "excellent",
              220,
              "good",
              660,
              "moderate",
              10000,
              "unhealthy",
              65535,
              "out of scale"
            ]
          }
        },
        {
          "name": "state/airqualityppb",
          "awake": true,
          "parse": {
            "at": "0x0055",
            "cl": "0x000c",
            "ep": 1,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          },
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    },
    {
      "type": "$TYPE_HUMIDITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0405"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0405",
          "0xFCC0"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/offset",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/temperature"
        },
        {
          "name": "state/humidity",
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    },
    {
      "type": "$TYPE_TEMPERATURE_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0402"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0402",
          "0xFCC0"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/offset",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/temperature",
          "default": 0
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0001"
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0402"
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0405"
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x000C",
      "report": [
        {
          "at": "0x0055",
          "dt": "0x39",
          "min": 10,
          "max": 3600,
          "change": "0x00000005"
        }
      ]
    }
  ]
}

No real success

name: deflux_ZHAAirQuality
time                           age_secs airquality airqualityppb battery id name      source    type
----                           -------- ---------- ------------- ------- -- ----      ------    ----
2022-03-15T09:44:49.12833803Z  0        excellent  64            100     60 Büro TVOC websocket ZHAAirQuality
2022-03-15T07:54:55.496274589Z 0        good       100           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:59:58.651325465Z 0        good       136           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:20:00.905902758Z 0        good       188           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:19:30.430248921Z 0        good       219           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:18:30.492536959Z 0        moderate   252           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:18:00.56214095Z  0        moderate   284           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:17:00.928887472Z 0        moderate   316           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:16:30.735179193Z 0        moderate   347           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:09:31.336925582Z 0        moderate   379           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:09:01.418622751Z 0        moderate   341           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:08:31.462340706Z 0        moderate   288           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:08:01.446066129Z 0        moderate   228           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:07:31.52329712Z  0        good       170           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:07:01.546034078Z 0        good       133           31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:06:30.737315658Z 0        good       89            31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:06:00.779276972Z 0        excellent  43            31      60 Büro TVOC websocket ZHAAirQuality
2022-03-15T06:05:00.833468033Z 0        excellent  5             100     60 Büro TVOC websocket ZHAAirQuality

So same result ? it work but stop after a time ?
And why for others users, it work without bind …

And with classic report for temperature/humidity 10/300/20 ?
For power Configuration deconz use 300/2700/1

Should I set the bindings via bindings tab or DDF Editor?

I think DDF editor is better, with status gold and “hot reload”.
The DDF binding overwrite the binding from deconz.
As battery sensor are slepping, more boring to configure, need to use a queue list, perhaps can be better if you re-include the device.

new DDF:

{
  "schema": "devcap1.schema.json",
  "manufacturername": "$MF_LUMI",
  "modelid": "lumi.airmonitor.acn01",
  "vendor": "Aqara",
  "product": "TVOC Air Quality Monitor",
  "sleeper": true,
  "status": "Gold",
  "path": "/devices/xiaomi/xiaomi_airmonitor_acn01.json",
  "subdevices": [
    {
      "type": "$TYPE_AIR_QUALITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x000c"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x000C"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/temperature"
        },
        {
          "name": "state/airquality",
          "parse": {
            "fn": "numtostr",
            "op": "le",
            "srcitem": "state/airqualityppb",
            "to": [
              65,
              "excellent",
              220,
              "good",
              660,
              "moderate",
              10000,
              "unhealthy",
              65535,
              "out of scale"
            ]
          }
        },
        {
          "name": "state/airqualityppb",
          "awake": true,
          "parse": {
            "at": "0x0055",
            "cl": "0x000c",
            "ep": 1,
            "eval": "Item.val = Attr.val",
            "fn": "zcl"
          },
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    },
    {
      "type": "$TYPE_HUMIDITY_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0405"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0405",
          "0xFCC0"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/offset",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "config/temperature"
        },
        {
          "name": "state/humidity",
          "default": 0
        },
        {
          "name": "state/lastupdated"
        }
      ]
    },
    {
      "type": "$TYPE_TEMPERATURE_SENSOR",
      "restapi": "/sensors",
      "uuid": [
        "$address.ext",
        "0x01",
        "0x0402"
      ],
      "fingerprint": {
        "profile": "0x0104",
        "device": "0x0302",
        "endpoint": "0x01",
        "in": [
          "0x0000",
          "0x0001",
          "0x0402",
          "0xFCC0"
        ]
      },
      "items": [
        {
          "name": "attr/id"
        },
        {
          "name": "attr/lastannounced"
        },
        {
          "name": "attr/lastseen"
        },
        {
          "name": "attr/manufacturername"
        },
        {
          "name": "attr/modelid"
        },
        {
          "name": "attr/name"
        },
        {
          "name": "attr/swversion"
        },
        {
          "name": "attr/type"
        },
        {
          "name": "attr/uniqueid"
        },
        {
          "name": "config/battery",
          "parse": {
            "at": "0x00f7",
            "ep": 1,
            "fn": "xiaomi:special",
            "idx": "0x01",
            "script": "xiaomi_battery.js"
          }
        },
        {
          "name": "config/offset",
          "default": 0
        },
        {
          "name": "config/on"
        },
        {
          "name": "config/reachable"
        },
        {
          "name": "state/lastupdated"
        },
        {
          "name": "state/temperature",
          "default": 0
        }
      ]
    }
  ],
  "bindings": [
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0001",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 300,
          "max": 2700,
          "change": "0x00000001"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0402",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x29",
          "min": 10,
          "max": 300,
          "change": "0x00000014"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x0405",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x21",
          "min": 10,
          "max": 300,
          "change": "0x00000014"
        }
      ]
    },
    {
      "bind": "unicast",
      "src.ep": 1,
      "cl": "0x000C",
      "report": [
        {
          "at": "0x0055",
          "dt": "0x39",
          "min": 10,
          "max": 3600,
          "change": "0x00000005"
        }
      ]
    }
  ]
}

re-paired after save + hot reload. Got a few updates:

name: deflux_ZHAAirQuality
time                           age_secs airquality airqualityppb battery id name      source    type
----                           -------- ---------- ------------- ------- -- ----      ------    ----
2022-03-17T08:13:14.193552559Z 0        good       107           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-17T08:12:42.271693783Z 0        good       138           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-17T07:18:17.353286268Z 0        excellent  138           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:38:48.997315447Z 0        excellent  188           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:37:49.198935166Z 0        excellent  221           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:27:50.363692964Z 0        excellent  253           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:27:20.129437869Z 0        excellent  218           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:26:50.211535423Z 0        excellent  184           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:26:20.163031104Z 0        excellent  149           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:25:48.313882697Z 0        excellent  112           32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:25:14.532385368Z 0        excellent  79            32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:24:40.921431471Z 0        excellent  41            32      60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:23:00.043216679Z 0        excellent  3             100     60 Büro TVOC websocket ZHAAirQuality
2022-03-17T06:22:28.021924285Z 0        excellent  33            100     60 Büro TVOC websocket ZHAAirQuality

…but stopped since then. No success :frowning:

Peut etre des infos ici Aqara TVOC sensor (VOCKQJK11LM) stops updating · Issue #9454 · Koenkk/zigbee2mqtt · GitHub

Let’s see…

So I updated to 0.0.0_0029 on friday and re-paired it to deconz. No success, same as before: a few updates, then nothing.

So I did the binding via the binding dropbox to see if this changes something. And i looked really good: I had one update every 15 minutes from this time (friday ~10:00)… until this happened on sunday:

time                           age_secs airquality airqualityppb battery id name      source    type
----                           -------- ---------- ------------- ------- -- ----      ------    ----
2022-03-20T20:56:14.375568227Z -1       excellent  31            100     60 Büro TVOC websocket ZHAAirQuality
2022-03-20T16:21:13.884830342Z -1       excellent  62            100     60 Büro TVOC websocket ZHAAirQuality
2022-03-20T14:31:13.520195927Z 0        excellent  96            100     60 Büro TVOC websocket ZHAAirQuality
2022-03-20T13:36:13.478184926Z 0        excellent  130           100     60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:58:42.852138587Z 0        excellent  177           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:58:12.846052539Z 0        excellent  209           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:57:12.936459096Z 0        excellent  243           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:56:12.910894728Z 0        excellent  275           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:55:42.995212645Z 0        excellent  306           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:54:42.965367351Z 0        excellent  339           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:54:12.982281775Z 0        excellent  371           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:53:13.012969388Z 0        excellent  405           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:52:43.024876718Z 0        excellent  436           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:52:13.047185047Z 0        excellent  469           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:51:43.029582966Z 0        excellent  505           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:51:13.05493158Z  0        excellent  544           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:50:43.109085272Z 0        excellent  581           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:50:13.072476584Z 0        excellent  626           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:49:43.091186104Z 0        excellent  674           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:49:13.095031977Z 0        excellent  728           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:48:43.140083167Z 0        excellent  788           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:48:13.222837596Z 0        excellent  845           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:46:13.194965919Z 0        excellent  880           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:45:43.221518393Z 0        excellent  846           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:45:13.210617106Z 0        excellent  795           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:44:43.279426326Z 0        excellent  723           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:44:13.30771972Z  0        excellent  633           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:43:43.321003051Z 0        excellent  520           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:43:13.406314813Z 0        excellent  395           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:42:43.362918542Z 0        excellent  224           94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:42:13.289293073Z 0        excellent  59            94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:41:13.330636487Z 0        excellent  7             94      60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:33:10.155242352Z 0        excellent  18            100     60 Büro TVOC websocket ZHAAirQuality
2022-03-20T12:16:11.148952396Z 0        excellent  19            100     60 Büro TVOC websocket ZHAAirQuality

I changed the batteries after the update btw.

Really strange…

So it work if you make the bind using the GUI but not using DDF ?
(On the GUI you make just the bind not the reporting ?)

Gui, Bindung + reporting. Works, but only for 2 days

Looks like you already figured out what I was trying to do (add ability to set units in Z2M), but could you shed light on how to get the network key?

I just can’t capture any key exchanges when pairing a TVOC with a M2 hub, but pairing the same TVOC with Z2M I can capture key exchanges.

See:

Help appreciated.