Skip to content

Commit

Permalink
Merge pull request #29 from Tamarinen/almendo-blusensor-aiq
Browse files Browse the repository at this point in the history
Add support for Almendo bluSensor AIQ
  • Loading branch information
Ernst79 committed Jul 5, 2022
2 parents d07693c + ee73e32 commit c13d966
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
5 changes: 5 additions & 0 deletions package/bleparser/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from .acconeer import parse_acconeer
from .airmentor import parse_airmentor
from .almendo import parse_almendo
from .altbeacon import parse_altbeacon
from .atc import parse_atc
from .bluemaestro import parse_bluemaestro
Expand Down Expand Up @@ -220,6 +221,10 @@ def parse_data(self, data):
# Ruuvitag V3/V5
sensor_data = parse_ruuvitag(self, man_spec_data, mac, rssi)
break
elif comp_id == 0x06E8:
# Almendo (Blusensor)
sensor_data = parse_almendo(self, man_spec_data, mac, rssi)
break
elif comp_id == 0x1000 and data_len == 0x15:
# Moat S2
sensor_data = parse_moat(self, man_spec_data, mac, rssi)
Expand Down
74 changes: 74 additions & 0 deletions package/bleparser/almendo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"""Parser for Almendo bluSensor BLE advertisements"""
# black -l 79
import logging
from struct import unpack
from .helpers import (
to_mac,
to_unformatted_mac,
)

_LOGGER = logging.getLogger(__name__)


def parse_almendo(self, data, source_mac, rssi):
"""Almendo parser"""
result = {
"mac": to_unformatted_mac(source_mac),
"rssi": rssi,
"data": False,
}
adstruct_type = data[1]
if adstruct_type == 0xFF:
comp_id = (data[3] << 8) | data[2]
if comp_id == 0x06E8:
# version, device_type, device_model, hw_revistion,
# status_bits, sstatus_code
version, _, dmodel, _, _, _ = data[4:10]
if version == 1 and dmodel == 0x0A:
# Almendo bluSensor V1 format (BSP02AIQ)
# sensor_state, temp, humi, co2e, tvoc, aiq
(_, temp, humi, co2e, tvoc, aiq) = unpack(
"<BhHHHB", data[10:20]
)

result.update(
{
"temperature": round(temp / 100, 2),
"humidity": round(humi / 100, 2),
"co2e": co2e,
"tvoc": tvoc,
"aiq": aiq,
"firmware": "Almendo V1",
"type": "bluSensor Mini",
"data": True,
}
)
else:
result = None
else:
result = None
if result is None:
if self.report_unknown == "Almendo":
_LOGGER.info(
"BLE ADV from UNKNOWN Almendo DEVICE: RSSI: %s, "
"MAC: %s, ADV: %s",
rssi,
to_mac(source_mac),
data.hex(),
)
return None
# check for MAC presence in sensor whitelist, if needed
if self.discovery is False and source_mac not in self.sensor_whitelist:
_LOGGER.debug(
"Discovery is disabled. MAC: %s is not whitelisted!",
to_mac(source_mac),
)
return None
if version != 1:
_LOGGER.info(
"Protocol version %i on device %s not yet known "
"by the Almendo parser",
version,
to_mac(source_mac),
)
return result

0 comments on commit c13d966

Please sign in to comment.