Skip to content

Commit

Permalink
Merge pull request #153 from swistakm/feat/add-flood-data-type-suppor…
Browse files Browse the repository at this point in the history
…t-for-multisensor

add support for flood sensing for multisensors as binary moisture sensor
  • Loading branch information
swistakm authored Feb 27, 2024
2 parents dcc7319 + 55ac0a9 commit faf4db2
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 2 deletions.
39 changes: 37 additions & 2 deletions blebox_uniapi/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,26 @@ def __init__(self, product: "Box", alias: str, methods: dict):
def many_from_config(
cls, product, box_type_config, extended_state
) -> list["Feature"]:
type_class_map = {
"rain": Rain,
"flood": Flood,
}

output_list = list()
sensors_list = extended_state.get("multiSensor").get("sensors", {})
alias, methods = box_type_config[0]

for sensor in sensors_list:
sensor_type = sensor.get("type")
sensor_id = sensor.get("id")
if sensor.get("type") in ("rain", "flood"):

if sensor_type in type_class_map:
klass = type_class_map[sensor_type]

if methods.get(sensor_type) is not None:
value_method = {sensor_type: methods[sensor_type](sensor_id)}
output_list.append(
Rain(
klass(
product=product,
alias=sensor_type + "_" + str(sensor_id),
methods=value_method,
Expand Down Expand Up @@ -56,3 +65,29 @@ def _read_rain(self, field: str) -> Union[float, int, None]:

def after_update(self) -> None:
self._current = self._read_rain("rain")


class Flood(BinarySensor):
def __init__(self, product: "Box", alias: str, methods: dict):
self._device_class = "moisture"
super().__init__(product, alias, methods)

@property
def state(self) -> bool:
return self._current > 0

@property
def device_class(self) -> str:
return self._device_class

def _read_flood(self, field: str) -> Union[float, int, None]:
product = self._product

if product.last_data is not None:
raw = self.raw_value(field)
if raw is not None: # no reading
return self.raw_value("flood")
return 0

def after_update(self) -> None:
self._current = self._read_flood("flood")
2 changes: 2 additions & 0 deletions blebox_uniapi/box_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ def get_latest_api_level(product_type: str) -> Union[dict, int]:
"multiSensor",
{
"rain": lambda x: f"multiSensor/sensors/[id={x}]/value",
"flood": lambda x: f"multiSensor/sensors/[id={x}]/value",
},
]
],
Expand All @@ -631,6 +632,7 @@ def get_latest_api_level(product_type: str) -> Union[dict, int]:
"multiSensor",
{
"rain": lambda x: f"multiSensor/sensors/[id={x}]/value",
"flood": lambda x: f"multiSensor/sensors/[id={x}]/value",
},
]
],
Expand Down

0 comments on commit faf4db2

Please sign in to comment.