Repository: Bluetooth-Devices/bthome-ble (language: python)

Issue:
Add a 16-bit 'tank' or 'volume' object ID
It would be convenient to have a `tank level` (or `volume`, though that term can be misconstrued) object ID measuring in Gallons (or Liters for the metrically inclined).  I have water and heating-oil tanks that I monitor. Today, I can use `percent`, `distance`, or `count` fields, but it would be nice to have a specified object-id with appropriate volume units.



Discussion / hints:
I will add that. I prefer to use "Volume", to make it useable in general for all kind of things (e.g. water consumption). 

What kind of precision do you want. With 16 bit, you can have:
- [ ] 65535 gallons/liters --> 0 decimals
- [ ] 6553.5 gallons/liters --> 1 decimals
- [ ] 655.35 gallons/liters --> 2 decimals
A standard heating oil tank in the US is 270gal (1022liters) (a double is 540gal).  I want to measure a 1500gal(5700 liter) water tank, but there is no standard for that and tanks could be much bigger or smaller.  55gal (208l) drums are also standard, as are 5-gal tanks.  On more consideration, I think you should probably stick with metric-only units.  Currently I see only 1 sensor that is imperial (0x07 - lb), and gallons are worse because there are multiple standards (the imperial gallon is 1.2 US gal).

I'm not sure a single decimal will cover all cases.  For my uses 0 or 1 decimal would be fine, but for a larger tank, you'd require 0 decimals, and for a 5gal tank, you'd want at least 1 decimal.  Another option would be 1 decimal with a 24bit value, which probably has sufficient range for most applications.  Anything smaller than that would probably be measured in ml.

If you want my recommendation, maybe 2 sensors
Volume(liters) - 24bit - 1 decimal
Volume(milileters) 16bit - 0 decimal

Also, while I don't currently have much use for it, flow-rate is another sensor to consider (my guess is that liters/sec 16 bit, 1 decimal would cover most needs).  But as I said, I don't have a use for such a sensor at this time.


I have started with adding these to the sensor-state-data pypi package, which we use. 
https://github.com/Bluetooth-Devices/sensor-state-data/pull/45

For "volume flow rate", there was already a unit "m3 per hour" apparently, I will use that if that is ok with you?
I guess 1 digit will be ok. 
Thanks.
I will reiterate that I don't currently have a direct need for flow-rate, so I am mostly speculating as to what it is useful for.  I'm thinking of things like household water usage, well pumps,  or monitoring fish tank pumps.  These would all do well with liters/min as a unit, and you will likely need more decimal points to use m^3/hr as a metric.

For instance, a low-flow shower head uses ~1.2gal/min which would be ~.273 m^3/hour

Also, having recently run out of space in the advertising payload, I guess 24bit values are not idea, and it is better to stick with 16bit values as much as possible.




Fix patch:
diff --git a/poetry.lock b/poetry.lock
index 18d2ab5..96b0eab 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -41,7 +41,7 @@ pytz = ">=2015.7"
 
 [[package]]
 name = "bleak"
-version = "0.19.1"
+version = "0.19.5"
 description = "Bluetooth Low Energy platform Agnostic Klient"
 category = "main"
 optional = false
@@ -65,7 +65,7 @@ python-versions = "*"
 
 [[package]]
 name = "bluetooth-data-tools"
-version = "0.2.0"
+version = "0.3.0"
 description = "Tools for converting bluetooth data and packets"
 category = "main"
 optional = false
@@ -91,7 +91,7 @@ docs = ["Sphinx (>=5.0,<6.0)", "myst-parser (>=0.18,<0.19)", "sphinx-rtd-theme (
 
 [[package]]
 name = "certifi"
-version = "2022.9.24"
+version = "2022.12.7"
 description = "Python package for providing Mozilla's CA Bundle."
 category = "main"
 optional = true
@@ -132,7 +132,7 @@ toml = ["tomli"]
 
 [[package]]
 name = "dbus-fast"
-version = "1.72.0"
+version = "1.82.0"
 description = "A faster version of dbus-next"
 category = "main"
 optional = false
@@ -151,7 +151,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 
 [[package]]
 name = "exceptiongroup"
-version = "1.0.1"
+version = "1.0.4"
 description = "Backport of PEP 654 (exception groups)"
 category = "dev"
 optional = false
@@ -162,7 +162,7 @@ test = ["pytest (>=6)"]
 
 [[package]]
 name = "home-assistant-bluetooth"
-version = "1.6.0"
+version = "1.9.0"
 description = "Home Assistant Bluetooth Models and Helpers"
 category = "main"
 optional = false
@@ -189,7 +189,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 
 [[package]]
 name = "importlib-metadata"
-version = "5.0.0"
+version = "5.1.0"
 description = "Read metadata from Python packages"
 category = "main"
 optional = true
@@ -256,7 +256,7 @@ python-versions = ">=3.7"
 
 [[package]]
 name = "mdit-py-plugins"
-version = "0.3.1"
+version = "0.3.3"
 description = "Collection of plugins for markdown-it-py"
 category = "main"
 optional = true
@@ -303,14 +303,11 @@ testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytes
 
 [[package]]
 name = "packaging"
-version = "21.3"
+version = "22.0"
 description = "Core utilities for Python packages"
 category = "main"
 optional = false
-python-versions = ">=3.6"
-
-[package.dependencies]
-pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
+python-versions = ">=3.7"
 
 [[package]]
 name = "pluggy"
@@ -326,7 +323,7 @@ testing = ["pytest", "pytest-benchmark"]
 
 [[package]]
 name = "pycryptodomex"
-version = "3.15.0"
+version = "3.16.0"
 description = "Cryptographic library for Python"
 category = "main"
 optional = false
@@ -385,17 +382,6 @@ python-versions = ">=3.6"
 [package.dependencies]
 pyobjc-core = ">=8.5.1"
 
-[[package]]
-name = "pyparsing"
-version = "3.0.9"
-description = "pyparsing module - Classes and methods to define and execute parsing grammars"
-category = "main"
-optional = false
-python-versions = ">=3.6.8"
-
-[package.extras]
-diagrams = ["jinja2", "railroad-diagrams"]
-
 [[package]]
 name = "pytest"
 version = "7.2.0"
@@ -467,7 +453,7 @@ use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"]
 
 [[package]]
 name = "sensor-state-data"
-version = "2.11.0"
+version = "2.13.0"
 description = "Models for storing and converting Sensor Data state"
 category = "main"
 optional = false
@@ -620,11 +606,11 @@ python-versions = ">=3.7"
 
 [[package]]
 name = "urllib3"
-version = "1.26.12"
+version = "1.26.13"
 description = "HTTP library with thread-safe connection pooling, file post, and more."
 category = "main"
 optional = true
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
 
 [package.extras]
 brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"]
@@ -633,7 +619,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
 
 [[package]]
 name = "zipp"
-version = "3.10.0"
+version = "3.11.0"
 description = "Backport of pathlib-compatible object wrapper for zip files"
 category = "main"
 optional = true
@@ -669,8 +655,8 @@ babel = [
     {file = "Babel-2.11.0.tar.gz", hash = "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"},
 ]
 bleak = [
-    {file = "bleak-0.19.1-py3-none-any.whl", hash = "sha256:5bf2c87ef370fcd80ebe75be361ef7b9655660c2e2baf957fab0f3a42c82ec7f"},
-    {file = "bleak-0.19.1.tar.gz", hash = "sha256:dff7c7f281dcb6629d0d722209c79ec3aa2a6c33867cb5c1ea3d44b72ca155c0"},
+    {file = "bleak-0.19.5-py3-none-any.whl", hash = "sha256:31e92e6754379bb394b8544457c77ce09a8a7dbc5f9adf3119b34576c901ef1e"},
+    {file = "bleak-0.19.5.tar.gz", hash = "sha256:87845a96453c58c19031c735444a7b3156800534bcd3f23ba74e119e9ae3cd88"},
 ]
 bleak-winrt = [
     {file = "bleak-winrt-1.2.0.tar.gz", hash = "sha256:0577d070251b9354fc6c45ffac57e39341ebb08ead014b1bdbd43e211d2ce1d6"},
@@ -686,16 +672,16 @@ bleak-winrt = [
     {file = "bleak_winrt-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:63130c11acfe75c504a79c01f9919e87f009f5e742bfc7b7a5c2a9c72bf591a7"},
 ]
 bluetooth-data-tools = [
-    {file = "bluetooth_data_tools-0.2.0-py3-none-any.whl", hash = "sha256:0c21b654de5420e0427ac86505d1ddd913aedd663a77572b3d6ec55d6f2a35b2"},
-    {file = "bluetooth_data_tools-0.2.0.tar.gz", hash = "sha256:cb207c7fa0fec0083adda195cbf61031dd7cf3e1f6a99377dcb244c781eb2e50"},
+    {file = "bluetooth_data_tools-0.3.0-py3-none-any.whl", hash = "sha256:06d6adfc98d800350afc9d61468599713f5d1e10908d172808468ad5292e446b"},
+    {file = "bluetooth_data_tools-0.3.0.tar.gz", hash = "sha256:b83df473166e6ffc568f092492e977a4c2442039b896494b9981d9a16ce2f513"},
 ]
 bluetooth-sensor-state-data = [
     {file = "bluetooth-sensor-state-data-1.6.0.tar.gz", hash = "sha256:ebd973a0859fd4b3c2204cd9451bbcdc6b01cd792924e9759549476f03cd8762"},
     {file = "bluetooth_sensor_state_data-1.6.0-py3-none-any.whl", hash = "sha256:c647f442891fdc02f57fc79d09ab8eb66f5ac7213012b5607755d40bcaec17a9"},
 ]
 certifi = [
-    {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"},
-    {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"},
+    {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"},
+    {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"},
 ]
 charset-normalizer = [
     {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"},
@@ -758,46 +744,46 @@ coverage = [
     {file = "coverage-6.5.0.tar.gz", hash = "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84"},
 ]
 dbus-fast = [
-    {file = "dbus_fast-1.72.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:3491d087c9540116c3f8687a85df91f90ca74debb683b249e5acac53116af9f1"},
-    {file = "dbus_fast-1.72.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b76f10087a6e6d7746df017ce691362e0b89886095192caed03db04d891cbc77"},
-    {file = "dbus_fast-1.72.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3fdb56190459bec48f68d811a67577484ec8a81b515fb2bd018dd542833211ad"},
-    {file = "dbus_fast-1.72.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9a224d4f3341abc91de9719e1cd688f7d2d26be24f1445a4024fbc84c3bc2a15"},
-    {file = "dbus_fast-1.72.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:0b0312b24f6b34f66f9c45706b74789e2cde65fc58034d19e0aec7803d56ff2e"},
-    {file = "dbus_fast-1.72.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76ffef2ff7bf7bbcd8b1a2e547bcacfa21027c6afb754479e8b7e5749eaf97f4"},
-    {file = "dbus_fast-1.72.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c7f6119e18d2c72314f63301c7465a6ac02b509903176d3a03e78f59cee97a"},
-    {file = "dbus_fast-1.72.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4535cd86d121b23d04cb600e9069b819b01037541275af4fad069e2fa5601f20"},
-    {file = "dbus_fast-1.72.0-cp37-cp37m-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:0c982a680e71cb5e87ed2e9514e0c36d8a9ee7cb0d4e788f65116e14a408f7a0"},
-    {file = "dbus_fast-1.72.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1782fdb42a4eb3b9c05fc2fc75d97658962df9a42d68f5208d5a128de69496da"},
-    {file = "dbus_fast-1.72.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:cd66c508f277812d3db93dee07a90870d32e1f38dfa03d1fa77b16a585203f9d"},
-    {file = "dbus_fast-1.72.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ea91b701de609a2fba2806de00eb2c33508aeeda750bcb80e5db8dbea4a634c6"},
-    {file = "dbus_fast-1.72.0-cp38-cp38-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:5ce05e96e4bb9d4d78e18f68d4e832996751a8f3f7a48761e3e608ae50aa0142"},
-    {file = "dbus_fast-1.72.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:780246c056bb5e0030213d0f4dcdaedf4d0c2464fad4065624fda8827b80ff2b"},
-    {file = "dbus_fast-1.72.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a083f4a9933fb6669db05fe300fd4a991f16461000e897d0c88ae46141b71a1c"},
-    {file = "dbus_fast-1.72.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8cb310823e6c5e1a6e2e38e32e1b6700e996fb3e23f79975ae8d3c6904413c6e"},
-    {file = "dbus_fast-1.72.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:88bc3b3af6399c77511233b45cbf9224709015c01437ff163d5414f151689590"},
-    {file = "dbus_fast-1.72.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dcf2d2c9038249a402b0201b8956750ba1b0234faa6e5fdcccf57e78a77665d3"},
-    {file = "dbus_fast-1.72.0-cp39-cp39-manylinux_2_31_x86_64.whl", hash = "sha256:238b3a62ff1e78054023312bfb2c7cde623812855ead34bd8cb2672c88397ee9"},
-    {file = "dbus_fast-1.72.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:34c5f086e088742e4ec2e0c4415297e75c7d1e259f4edf3a0f28cf85710ddd0e"},
-    {file = "dbus_fast-1.72.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc637b0caecfef8ccf772b447480b796651cd7b1f8d7d3addb18f6c9ea75dd8c"},
-    {file = "dbus_fast-1.72.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:6891931f834dc5726db22269b91992ce260dae79f3bfd8308988be2387e96801"},
-    {file = "dbus_fast-1.72.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0da41a97ee09de0d192d849fafea3fc58d614cd64562af72c7d67b607a061642"},
-    {file = "dbus_fast-1.72.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:1f3ea1b2c2037b4eef2c442d79e049f17bcd7b7c24cfe1668b0f0914a55703a6"},
-    {file = "dbus_fast-1.72.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75e7adaa29ee5e2bf717146d5ab2152d9ddee2792c9b73ceb523278ef8080146"},
-    {file = "dbus_fast-1.72.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:3cf6138fa9087c76dc20d34386843c923cee44a115ba294fe9f1f5c214b8e1ff"},
-    {file = "dbus_fast-1.72.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74bdd6aec7fc5c145b3ac74de313f06abafa05779664dd7a9cac3135df44c329"},
-    {file = "dbus_fast-1.72.0.tar.gz", hash = "sha256:9c5f09eba0da120abc60ad3ae2132ade4ad62f21bfbc26b1199a5a12c9ff4e3b"},
+    {file = "dbus_fast-1.82.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:a9b2a1cc06da121cb0fc59c65e70deaf8cc517ac9d87b02bc3b9c90813ef938d"},
+    {file = "dbus_fast-1.82.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:559f37263c5693cfec60e04c9841b47f9516435dbb18f8789696b5c476b75841"},
+    {file = "dbus_fast-1.82.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:43dd87fac5651f0b8f95def2150875c363703d4506387630d66345f4f7750a14"},
+    {file = "dbus_fast-1.82.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2f3b75b398c2f919a733ccbf1e830a711c0ea4d8beb357c9fb3b2c747f401027"},
+    {file = "dbus_fast-1.82.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:9109323cccf6af740e9699254e23f27e195267a21b07cf8dbb68f5b57b7169cc"},
+    {file = "dbus_fast-1.82.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09ba45bc9780476976d5ff2bd230101b72170a5825274ba44c807c4757ff8fc0"},
+    {file = "dbus_fast-1.82.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8ef4a3a70661f5abd3b1f9a72754da674ffdf889fe8ad8f905ff5a0f0f332ef"},
+    {file = "dbus_fast-1.82.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4b5de023add69e1a5ed39a2b6adaf6b761ea9a6013e8ce111b0bf44461631e47"},
+    {file = "dbus_fast-1.82.0-cp37-cp37m-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:f467000abfc2ffa54cc240bddf5b2c3c3e4860a9b4877a9789f15923f3b4c6eb"},
+    {file = "dbus_fast-1.82.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d123f913545ace0d7fd0c4655be035982df34902c4592e8b4c85da5923d9cd2"},
+    {file = "dbus_fast-1.82.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a670b92dfa20ea8cc8c38bd9ed5012b045a581f835e79cf8ec03dd272e09b6e3"},
+    {file = "dbus_fast-1.82.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:cda962d19d522b1733d8bf7e20c3a221c9ff424901f1534d7f710522074cf5a8"},
+    {file = "dbus_fast-1.82.0-cp38-cp38-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:f3c9a20e96c9b52fdbebef332d03e7a6ab23ef51b5d5077cb7e5e27c1e100053"},
+    {file = "dbus_fast-1.82.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:708a60285b78ad05edb4c29700e023a5896b8961b71c4616a76e84c4e3646c42"},
+    {file = "dbus_fast-1.82.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:88a9d0745d21b2bd4cbd9bdecec001742ca3604102a073d15bfd225c2c62dfac"},
+    {file = "dbus_fast-1.82.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8e93ef7e5e22dfd9fffa2ba748a9222e8f7e23e442e64cead9ae7a09480e958c"},
+    {file = "dbus_fast-1.82.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:813a51ebb0f3ce4074b1a931bf4d2f598ea97c54ff39b9081fd2451f45ce0285"},
+    {file = "dbus_fast-1.82.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de9df99820e3777203af573c1a9eadaa0ebf08437c7ee9ab454e649ced5ee30f"},
+    {file = "dbus_fast-1.82.0-cp39-cp39-manylinux_2_31_x86_64.whl", hash = "sha256:aba9865f546c7d2487b200b05188613a87f76e7554d04c81cc2cd6cefe7f0fb5"},
+    {file = "dbus_fast-1.82.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b68ffb8bb4969043c26d77549d5c8300734d04124d7bf21837a8da1dd1d8451c"},
+    {file = "dbus_fast-1.82.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9b0ede135b8495cfea0444dc55cdf43538ed38a2660e90a3d6b66530b9d8bca9"},
+    {file = "dbus_fast-1.82.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:02aa66cf85958a7269a1af9c4694afc4bb73cdb6e4cb2118266cca7067839c2d"},
+    {file = "dbus_fast-1.82.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a36fe9e9beac3baaa72dbcf9fee29124e2559e6a3ab092c0a2e21384be443d0"},
+    {file = "dbus_fast-1.82.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:7841584854baf52524b62a952bbc98c17b980649112347ef313c6b41f6a9c2f9"},
+    {file = "dbus_fast-1.82.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26ba99e901cc2f42f0edae257769d9cf9a7303af03e172d108d35a00f7cbb19f"},
+    {file = "dbus_fast-1.82.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:a6b8c48c749af70b3d7a962a3929389d7d08c50ca56d8080060107b213c2f155"},
+    {file = "dbus_fast-1.82.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux_2_5_x86_64.manylinux1_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38efaba0106a449e7b934d864751e40e5e2921241f164469435b77fe81790bd3"},
+    {file = "dbus_fast-1.82.0.tar.gz", hash = "sha256:700b3286c9693750621bb28d7a9e2b18bb00934d5d55e62e033ee2794a7efa3d"},
 ]
 docutils = [
     {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"},
     {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"},
 ]
 exceptiongroup = [
-    {file = "exceptiongroup-1.0.1-py3-none-any.whl", hash = "sha256:4d6c0aa6dd825810941c792f53d7b8d71da26f5e5f84f20f9508e8f2d33b140a"},
-    {file = "exceptiongroup-1.0.1.tar.gz", hash = "sha256:73866f7f842ede6cb1daa42c4af078e2035e5f7607f0e2c762cc51bb31bbe7b2"},
+    {file = "exceptiongroup-1.0.4-py3-none-any.whl", hash = "sha256:542adf9dea4055530d6e1279602fa5cb11dab2395fa650b8674eaec35fc4a828"},
+    {file = "exceptiongroup-1.0.4.tar.gz", hash = "sha256:bd14967b79cd9bdb54d97323216f8fdf533e278df937aa2a90089e7d6e06e5ec"},
 ]
 home-assistant-bluetooth = [
-    {file = "home_assistant_bluetooth-1.6.0-py3-none-any.whl", hash = "sha256:a39e82f121d0178a7ccde4d09fba84875413ae27625795d1174634639d2a22df"},
-    {file = "home_assistant_bluetooth-1.6.0.tar.gz", hash = "sha256:82487a7e6bdcf59a703def06b1659c9d7ed1bd8d8742129f5bc198d00360c8c7"},
+    {file = "home_assistant_bluetooth-1.9.0-cp39-cp39-manylinux_2_31_x86_64.whl", hash = "sha256:791b2f4a4cd19c1effa26654391ab8f1c40d3a2ac260f56355ef846bf87d50b0"},
+    {file = "home_assistant_bluetooth-1.9.0.tar.gz", hash = "sha256:8528640a88987e0a3e4f739288ef8b279f956069954d9807d40d0c7b113d8b49"},
 ]
 idna = [
     {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
@@ -808,8 +794,8 @@ imagesize = [
     {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"},
 ]
 importlib-metadata = [
-    {file = "importlib_metadata-5.0.0-py3-none-any.whl", hash = "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43"},
-    {file = "importlib_metadata-5.0.0.tar.gz", hash = "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab"},
+    {file = "importlib_metadata-5.1.0-py3-none-any.whl", hash = "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313"},
+    {file = "importlib_metadata-5.1.0.tar.gz", hash = "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b"},
 ]
 iniconfig = [
     {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -866,8 +852,8 @@ markupsafe = [
     {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
 ]
 mdit-py-plugins = [
-    {file = "mdit-py-plugins-0.3.1.tar.gz", hash = "sha256:3fc13298497d6e04fe96efdd41281bfe7622152f9caa1815ea99b5c893de9441"},
-    {file = "mdit_py_plugins-0.3.1-py3-none-any.whl", hash = "sha256:606a7f29cf56dbdfaf914acb21709b8f8ee29d857e8f29dcc33d8cb84c57bfa1"},
+    {file = "mdit-py-plugins-0.3.3.tar.gz", hash = "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"},
+    {file = "mdit_py_plugins-0.3.3-py3-none-any.whl", hash = "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9"},
 ]
 mdurl = [
     {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"},
@@ -878,44 +864,40 @@ myst-parser = [
     {file = "myst_parser-0.18.1-py3-none-any.whl", hash = "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8"},
 ]
 packaging = [
-    {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
-    {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
+    {file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"},
+    {file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"},
 ]
 pluggy = [
     {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
     {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
 ]
 pycryptodomex = [
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:6f5b6ba8aefd624834bc177a2ac292734996bb030f9d1b388e7504103b6fcddf"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:4540904c09704b6f831059c0dfb38584acb82cb97b0125cd52688c1f1e3fffa6"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0fadb9f7fa3150577800eef35f62a8a24b9ddf1563ff060d9bd3af22d3952c8c"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:fc9bc7a9b79fe5c750fc81a307052f8daabb709bdaabb0fb18fb136b66b653b5"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:f8be976cec59b11f011f790b88aca67b4ea2bd286578d0bd3e31bcd19afcd3e4"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:78d9621cf0ea35abf2d38fa2ca6d0634eab6c991a78373498ab149953787e5e5"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-win32.whl", hash = "sha256:b6306403228edde6e289f626a3908a2f7f67c344e712cf7c0a508bab3ad9e381"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:48697790203909fab02a33226fda546604f4e2653f9d47bc5d3eb40879fa7c64"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:18e2ab4813883ae63396c0ffe50b13554b32bb69ec56f0afaf052e7a7ae0d55b"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:3709f13ca3852b0b07fc04a2c03b379189232b24007c466be0f605dd4723e9d4"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:191e73bc84a8064ad1874dba0ebadedd7cce4dedee998549518f2c74a003b2e1"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:e3164a18348bd53c69b4435ebfb4ac8a4076291ffa2a70b54f0c4b80c7834b1d"},
-    {file = "pycryptodomex-3.15.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:5676a132169a1c1a3712edf25250722ebc8c9102aa9abd814df063ca8362454f"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:e2b12968522a0358b8917fc7b28865acac002f02f4c4c6020fcb264d76bfd06d"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:e47bf8776a7e15576887f04314f5228c6527b99946e6638cf2f16da56d260cab"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:996e1ba717077ce1e6d4849af7a1426f38b07b3d173b879e27d5e26d2e958beb"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:65204412d0c6a8e3c41e21e93a5e6054a74fea501afa03046a388cf042e3377a"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:dd452a5af7014e866206d41751886c9b4bf379a339fdf2dbfc7dd16c0fb4f8e0"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:b9279adc16e4b0f590ceff581f53a80179b02cba9056010d733eb4196134a870"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-win32.whl", hash = "sha256:46b3f05f2f7ac7841053da4e0f69616929ca3c42f238c405f6c3df7759ad2780"},
-    {file = "pycryptodomex-3.15.0-cp35-abi3-win_amd64.whl", hash = "sha256:8eecdf9cdc7343001d047f951b9cc805cd68cb6cd77b20ea46af5bffc5bd3dfb"},
-    {file = "pycryptodomex-3.15.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:67e1e6a92151023ccdfcfbc0afb3314ad30080793b4c27956ea06ab1fb9bcd8a"},
-    {file = "pycryptodomex-3.15.0-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:c4cb9cb492ea7dcdf222a8d19a1d09002798ea516aeae8877245206d27326d86"},
-    {file = "pycryptodomex-3.15.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:94c7b60e1f52e1a87715571327baea0733708ab4723346598beca4a3b6879794"},
-    {file = "pycryptodomex-3.15.0-pp27-pypy_73-win32.whl", hash = "sha256:04cc393045a8f19dd110c975e30f38ed7ab3faf21ede415ea67afebd95a22380"},
-    {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0776bfaf2c48154ab54ea45392847c1283d2fcf64e232e85565f858baedfc1fa"},
-    {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:463119d7d22d0fc04a0f9122e9d3e6121c6648bcb12a052b51bd1eed1b996aa2"},
-    {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a07a64709e366c2041cd5cfbca592b43998bf4df88f7b0ca73dca37071ccf1bd"},
-    {file = "pycryptodomex-3.15.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:35a8f7afe1867118330e2e0e0bf759c409e28557fb1fc2fbb1c6c937297dbe9a"},
-    {file = "pycryptodomex-3.15.0.tar.gz", hash = "sha256:7341f1bb2dadb0d1a0047f34c3a58208a92423cdbd3244d998e4b28df5eac0ed"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b3d04c00d777c36972b539fb79958790126847d84ec0129fce1efef250bfe3ce"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e5a670919076b71522c7d567a9043f66f14b202414a63c3a078b5831ae342c03"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:ce338a9703f54b2305a408fc9890eb966b727ce72b69f225898bb4e9d9ed3f1f"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:a1c0ae7123448ecb034c75c713189cb00ebe2d415b11682865b6c54d200d9c93"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-win32.whl", hash = "sha256:8851585ff19871e5d69e1790f4ca5f6fd1699d6b8b14413b472a4c0dbc7ea780"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27m-win_amd64.whl", hash = "sha256:8dd2d9e3c617d0712ed781a77efd84ea579e76c5f9b2a4bc0b684ebeddf868b2"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:2ad9bb86b355b6104796567dd44c215b3dc953ef2fae5e0bdfb8516731df92cf"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:e25a2f5667d91795f9417cb856f6df724ccdb0cdd5cbadb212ee9bf43946e9f8"},
+    {file = "pycryptodomex-3.16.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:b0789a8490114a2936ed77c87792cfe77582c829cb43a6d86ede0f9624ba8aa3"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:0da835af786fdd1c9930994c78b23e88d816dc3f99aa977284a21bbc26d19735"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:22aed0868622d95179217c298e37ed7410025c7b29dac236d3230617d1e4ed56"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1619087fb5b31510b0b0b058a54f001a5ffd91e6ffee220d9913064519c6a69d"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:70288d9bfe16b2fd0d20b6c365db614428f1bcde7b20d56e74cf88ade905d9eb"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7993d26dae4d83b8f4ce605bb0aecb8bee330bb3c95475ef06f3694403621e71"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:1cda60207be8c1cf0b84b9138f9e3ca29335013d2b690774a5e94678ff29659a"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:04610536921c1ec7adba158ef570348550c9f3a40bc24be9f8da2ef7ab387981"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-win32.whl", hash = "sha256:daa67f5ebb6fbf1ee9c90decaa06ca7fc88a548864e5e484d52b0920a57fe8a5"},
+    {file = "pycryptodomex-3.16.0-cp35-abi3-win_amd64.whl", hash = "sha256:231dc8008cbdd1ae0e34645d4523da2dbc7a88c325f0d4a59635a86ee25b41dd"},
+    {file = "pycryptodomex-3.16.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:4dbbe18cc232b5980c7633972ae5417d0df76fe89e7db246eefd17ef4d8e6d7a"},
+    {file = "pycryptodomex-3.16.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:893f8a97d533c66cc3a56e60dd3ed40a3494ddb4aafa7e026429a08772f8a849"},
+    {file = "pycryptodomex-3.16.0-pp27-pypy_73-win32.whl", hash = "sha256:6a465e4f856d2a4f2a311807030c89166529ccf7ccc65bef398de045d49144b6"},
+    {file = "pycryptodomex-3.16.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba57ac7861fd2c837cdb33daf822f2a052ff57dd769a2107807f52a36d0e8d38"},
+    {file = "pycryptodomex-3.16.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f2b971a7b877348a27dcfd0e772a0343fb818df00b74078e91c008632284137d"},
+    {file = "pycryptodomex-3.16.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e2453162f473c1eae4826eb10cd7bce19b5facac86d17fb5f29a570fde145abd"},
+    {file = "pycryptodomex-3.16.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:0ba28aa97cdd3ff5ed1a4f2b7f5cd04e721166bd75bd2b929e2734433882b583"},
+    {file = "pycryptodomex-3.16.0.tar.gz", hash = "sha256:e9ba9d8ed638733c9e95664470b71d624a6def149e2db6cc52c1aca5a6a2df1d"},
 ]
 pygments = [
     {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"},
@@ -957,10 +939,6 @@ pyobjc-framework-libdispatch = [
     {file = "pyobjc_framework_libdispatch-8.5.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:73226e224436eb6383e7a8a811c90ed597995adb155b4f46d727881a383ac550"},
     {file = "pyobjc_framework_libdispatch-8.5.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d115355ce446fc073c75cedfd7ab0a13958adda8e3a3b1e421e1f1e5f65640da"},
 ]
-pyparsing = [
-    {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
-    {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
-]
 pytest = [
     {file = "pytest-7.2.0-py3-none-any.whl", hash = "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71"},
     {file = "pytest-7.2.0.tar.gz", hash = "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"},
@@ -1013,8 +991,8 @@ requests = [
     {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"},
 ]
 sensor-state-data = [
-    {file = "sensor_state_data-2.11.0-py3-none-any.whl", hash = "sha256:f4fbd85ee98bfea190a4c4866f3a42a5aa664181077baf42b87be1bbc3c820db"},
-    {file = "sensor_state_data-2.11.0.tar.gz", hash = "sha256:85f83b89d8e0de04399522084a9cf72bbf0b0c7d92e1e396f6952a62584c7270"},
+    {file = "sensor_state_data-2.13.0-py3-none-any.whl", hash = "sha256:d729f657af6c35bf22f3876619e7eb0d0b05b8e4a86330bcdc8e15ba3f2fd334"},
+    {file = "sensor_state_data-2.13.0.tar.gz", hash = "sha256:4459941b491f0f99339a4df1bc1ab8f8abd11c76c4f853897b3fb13a5a93fa97"},
 ]
 snowballstemmer = [
     {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"},
@@ -1061,10 +1039,10 @@ typing-extensions = [
     {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
 ]
 urllib3 = [
-    {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"},
-    {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"},
+    {file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"},
+    {file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"},
 ]
 zipp = [
-    {file = "zipp-3.10.0-py3-none-any.whl", hash = "sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1"},
-    {file = "zipp-3.10.0.tar.gz", hash = "sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8"},
+    {file = "zipp-3.11.0-py3-none-any.whl", hash = "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa"},
+    {file = "zipp-3.11.0.tar.gz", hash = "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"},
 ]
diff --git a/src/bthome_ble/const.py b/src/bthome_ble/const.py
index 0e4947c..0e3ffa7 100644
--- a/src/bthome_ble/const.py
+++ b/src/bthome_ble/const.py
@@ -20,6 +20,7 @@ class MeasTypes:
 
 
 MEAS_TYPES: dict[int, MeasTypes] = {
+    0x00: MeasTypes(meas_format=SensorLibrary.PACKET_ID__NONE),
     0x01: MeasTypes(meas_format=SensorLibrary.BATTERY__PERCENTAGE),
     0x02: MeasTypes(
         meas_format=SensorLibrary.TEMPERATURE__CELSIUS,
@@ -297,4 +298,18 @@ class MeasTypes:
         data_length=1,
         factor=0.1,
     ),
+    0x47: MeasTypes(
+        meas_format=SensorLibrary.VOLUME__VOLUME_LITERS,
+        data_length=2,
+        factor=0.1,
+    ),
+    0x48: MeasTypes(
+        meas_format=SensorLibrary.VOLUME__VOLUME_MILLILITERS,
+        data_length=2,
+    ),
+    0x49: MeasTypes(
+        meas_format=SensorLibrary.VOLUME_FLOW_RATE__VOLUME_FLOW_RATE_CUBIC_METERS_PER_HOUR,
+        data_length=2,
+        factor=0.001,
+    ),
 }


Test patch:
diff --git a/tests/test_parser_v1.py b/tests/test_parser_v1.py
index 5e51812..d29bdfe 100644
--- a/tests/test_parser_v1.py
+++ b/tests/test_parser_v1.py
@@ -33,6 +33,7 @@
 KEY_ILLUMINANCE = DeviceKey(key="illuminance", device_id=None)
 KEY_MASS = DeviceKey(key="mass", device_id=None)
 KEY_MOISTURE = DeviceKey(key="moisture", device_id=None)
+KEY_PACKET_ID = DeviceKey(key="packet_id", device_id=None)
 KEY_PM25 = DeviceKey(key="pm25", device_id=None)
 KEY_PM10 = DeviceKey(key="pm10", device_id=None)
 KEY_POWER = DeviceKey(key="power", device_id=None)
@@ -1146,6 +1147,11 @@ def test_bthome_multiple_uuids(caplog):
             )
         },
         entity_descriptions={
+            KEY_PACKET_ID: SensorDescription(
+                device_key=KEY_PACKET_ID,
+                device_class=SensorDeviceClass.PACKET_ID,
+                native_unit_of_measurement=None,
+            ),
             KEY_VOLTAGE: SensorDescription(
                 device_key=KEY_VOLTAGE,
                 device_class=SensorDeviceClass.VOLTAGE,
@@ -1158,6 +1164,9 @@ def test_bthome_multiple_uuids(caplog):
             ),
         },
         entity_values={
+            KEY_PACKET_ID: SensorValue(
+                device_key=KEY_PACKET_ID, name="Packet Id", native_value=180
+            ),
             KEY_VOLTAGE: SensorValue(
                 device_key=KEY_VOLTAGE, name="Voltage", native_value=3.006
             ),
diff --git a/tests/test_parser_v2.py b/tests/test_parser_v2.py
index 5be9b16..d53e5c6 100644
--- a/tests/test_parser_v2.py
+++ b/tests/test_parser_v2.py
@@ -36,6 +36,7 @@
 KEY_ILLUMINANCE = DeviceKey(key="illuminance", device_id=None)
 KEY_MASS = DeviceKey(key="mass", device_id=None)
 KEY_MOISTURE = DeviceKey(key="moisture", device_id=None)
+KEY_PACKET_ID = DeviceKey(key="packet_id", device_id=None)
 KEY_PM25 = DeviceKey(key="pm25", device_id=None)
 KEY_PM10 = DeviceKey(key="pm10", device_id=None)
 KEY_POWER = DeviceKey(key="power", device_id=None)
@@ -47,6 +48,8 @@
 KEY_UV_INDEX = DeviceKey(key="uv_index", device_id=None)
 KEY_VOC = DeviceKey(key="volatile_organic_compounds", device_id=None)
 KEY_VOLTAGE = DeviceKey(key="voltage", device_id=None)
+KEY_VOLUME = DeviceKey(key="volume", device_id=None)
+KEY_VOLUME_FLOW_RATE = DeviceKey(key="volume_flow_rate", device_id=None)
 
 
 @pytest.fixture(autouse=True)
@@ -324,7 +327,7 @@ def test_bthome_wrong_object_id(caplog):
     )
 
 
-def test_bthome_battery_wrong_oobject_id_humidity(caplog):
+def test_bthome_battery_wrong_object_id_humidity(caplog):
     """
     Test BTHome parser for battery, wrong object id and humidity reading.
     Should only return the battery reading, as humidity is after wrong object id.
@@ -419,9 +422,9 @@ def test_bthome_temperature_humidity(caplog):
     )
 
 
-def test_bthome_temperature_humidity_battery(caplog):
-    """Test BTHome parser for temperature humidity battery reading."""
-    data_string = b"\x40\x01\x5d\x02\x5d\x09\x03\xb7\x18"
+def test_bthome_packet_id_temperature_humidity_battery(caplog):
+    """Test BTHome parser for packet_id, temperature, humidity and battery reading."""
+    data_string = b"\x40\x00\x09\x01\x5d\x02\x5d\x09\x03\xb7\x18"
     advertisement = bytes_to_service_info(
         data_string, local_name="ATC_8D18B2", address="A4:C1:38:8D:18:B2"
     )
@@ -439,6 +442,11 @@ def test_bthome_temperature_humidity_battery(caplog):
             )
         },
         entity_descriptions={
+            KEY_PACKET_ID: SensorDescription(
+                device_key=KEY_PACKET_ID,
+                device_class=SensorDeviceClass.PACKET_ID,
+                native_unit_of_measurement=None,
+            ),
             KEY_TEMPERATURE: SensorDescription(
                 device_key=KEY_TEMPERATURE,
                 device_class=SensorDeviceClass.TEMPERATURE,
@@ -461,6 +469,9 @@ def test_bthome_temperature_humidity_battery(caplog):
             ),
         },
         entity_values={
+            KEY_PACKET_ID: SensorValue(
+                device_key=KEY_PACKET_ID, name="Packet Id", native_value=9
+            ),
             KEY_TEMPERATURE: SensorValue(
                 device_key=KEY_TEMPERATURE, name="Temperature", native_value=23.97
             ),
@@ -1645,6 +1656,137 @@ def test_bthome_uv_index(caplog):
     )
 
 
+def test_bthome_volume_liters(caplog):
+    """Test BTHome parser for Volume in Liters."""
+    data_string = b"\x40\x47\x87\x56"
+    advertisement = bytes_to_service_info(
+        data_string, local_name="TEST DEVICE", address="A4:C1:38:8D:18:B2"
+    )
+
+    device = BTHomeBluetoothDeviceData()
+
+    assert device.update(advertisement) == SensorUpdate(
+        title="TEST DEVICE 18B2",
+        devices={
+            None: SensorDeviceInfo(
+                name="TEST DEVICE 18B2",
+                manufacturer=None,
+                model="BTHome sensor",
+                sw_version="BTHome BLE v2",
+                hw_version=None,
+            )
+        },
+        entity_descriptions={
+            KEY_VOLUME: SensorDescription(
+                device_key=KEY_VOLUME,
+                device_class=SensorDeviceClass.VOLUME,
+                native_unit_of_measurement=Units.VOLUME_LITERS,
+            ),
+            KEY_SIGNAL_STRENGTH: SensorDescription(
+                device_key=KEY_SIGNAL_STRENGTH,
+                device_class=SensorDeviceClass.SIGNAL_STRENGTH,
+                native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
+            ),
+        },
+        entity_values={
+            KEY_VOLUME: SensorValue(
+                device_key=KEY_VOLUME, name="Volume", native_value=2215.1
+            ),
+            KEY_SIGNAL_STRENGTH: SensorValue(
+                device_key=KEY_SIGNAL_STRENGTH, name="Signal Strength", native_value=-60
+            ),
+        },
+    )
+
+
+def test_bthome_volume_milliliters(caplog):
+    """Test BTHome parser for Volume in milliliters."""
+    data_string = b"\x40\x48\xDC\x87"
+    advertisement = bytes_to_service_info(
+        data_string, local_name="TEST DEVICE", address="A4:C1:38:8D:18:B2"
+    )
+
+    device = BTHomeBluetoothDeviceData()
+
+    assert device.update(advertisement) == SensorUpdate(
+        title="TEST DEVICE 18B2",
+        devices={
+            None: SensorDeviceInfo(
+                name="TEST DEVICE 18B2",
+                manufacturer=None,
+                model="BTHome sensor",
+                sw_version="BTHome BLE v2",
+                hw_version=None,
+            )
+        },
+        entity_descriptions={
+            KEY_VOLUME: SensorDescription(
+                device_key=KEY_VOLUME,
+                device_class=SensorDeviceClass.VOLUME,
+                native_unit_of_measurement=Units.VOLUME_MILLILITERS,
+            ),
+            KEY_SIGNAL_STRENGTH: SensorDescription(
+                device_key=KEY_SIGNAL_STRENGTH,
+                device_class=SensorDeviceClass.SIGNAL_STRENGTH,
+                native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
+            ),
+        },
+        entity_values={
+            KEY_VOLUME: SensorValue(
+                device_key=KEY_VOLUME, name="Volume", native_value=34780
+            ),
+            KEY_SIGNAL_STRENGTH: SensorValue(
+                device_key=KEY_SIGNAL_STRENGTH, name="Signal Strength", native_value=-60
+            ),
+        },
+    )
+
+
+def test_bthome_volume_flow_rate(caplog):
+    """Test BTHome parser for Volume flow rate in m3 per hour."""
+    data_string = b"\x40\x49\xDC\x87"
+    advertisement = bytes_to_service_info(
+        data_string, local_name="TEST DEVICE", address="A4:C1:38:8D:18:B2"
+    )
+
+    device = BTHomeBluetoothDeviceData()
+
+    assert device.update(advertisement) == SensorUpdate(
+        title="TEST DEVICE 18B2",
+        devices={
+            None: SensorDeviceInfo(
+                name="TEST DEVICE 18B2",
+                manufacturer=None,
+                model="BTHome sensor",
+                sw_version="BTHome BLE v2",
+                hw_version=None,
+            )
+        },
+        entity_descriptions={
+            KEY_VOLUME_FLOW_RATE: SensorDescription(
+                device_key=KEY_VOLUME_FLOW_RATE,
+                device_class=SensorDeviceClass.VOLUME_FLOW_RATE,
+                native_unit_of_measurement=Units.VOLUME_FLOW_RATE_CUBIC_METERS_PER_HOUR,
+            ),
+            KEY_SIGNAL_STRENGTH: SensorDescription(
+                device_key=KEY_SIGNAL_STRENGTH,
+                device_class=SensorDeviceClass.SIGNAL_STRENGTH,
+                native_unit_of_measurement=Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
+            ),
+        },
+        entity_values={
+            KEY_VOLUME_FLOW_RATE: SensorValue(
+                device_key=KEY_VOLUME_FLOW_RATE,
+                name="Volume Flow Rate",
+                native_value=34.780,
+            ),
+            KEY_SIGNAL_STRENGTH: SensorValue(
+                device_key=KEY_SIGNAL_STRENGTH, name="Signal Strength", native_value=-60
+            ),
+        },
+    )
+
+
 def test_bthome_double_temperature(caplog):
     """Test BTHome parser for double temperature reading without encryption."""
     data_string = b"\x40\x02\xca\x09\x02\xcf\x09"