Add-on version: 0.17.7
You are running the latest version of this add-on.
System: Home Assistant OS 15.2 (aarch64 / raspberrypi4-64)
Home Assistant Core: 2025.7.0
Home Assistant Supervisor: 2025.06.2
Hi all, I’m having issues in my AppDaemon app due to adapi calls resolving to coroutines instead of values.
At a high level I’m listening for a state but I also support “additional_state_callback” that evaluates something to bool. That additional_state_callback is always true when getting an adapi call value as the coroutine itself evals to true.
# App - removed some stuff
class EntranceLight(ad.ADBase):
def initialize(self):
self.adapi = self.get_ad_api()
self.entrance_light_switch = BaseEntity(
self.adapi, ENTRANCE_LIGHT_SWITCH
)
self.motion_on_watcher = StateWatcher(self.adapi).watch_state(
name="entrance_motion_on",
entity_id=ENTRANCE_MOTION_SENSOR,
states={"on"},
callback=self.entrance_light_switch.turn_on,
additional_state_callback=self._is_sun_down
)
def turn_on(self, **kwargs):
if self.entrance_light_switch.is_on():
return
self.entrance_light_switch.turn_on()
def _is_sun_down(self):
sunset_offset = "sunset + 00:15:00"
sunrise_offset = "sunrise - 00:15:00"
return self.adapi.now_is_between(sunset_offset, sunrise_offset)
# StateWatcher -- trimmed
# ...
def watch_state(self,
name: str,
entity_id: str,
callback: Callable,
states: set[str],
delay_seconds: int = 0,
entity_attribute: str = None,
callback_kwargs: dict = None,
additional_state_callback: Callable[[], bool] = None, # type: ignore
):
watcher_id = str(uuid.uuid4())
# ...
def _new_state_internal(value):
self.adapi.log(f"Is None: {additional_state_callback is None} -- {additional_state_callback is None or additional_state_callback()}")
return value in states and (additional_state_callback is None or additional_state_callback())
self.new_state_checkers[watcher_id] = _new_state_internal
self.handles[watcher_id] = self.adapi.listen_state(
self._handle,
entity_id = entity_id,
attribute = entity_attribute,
new = _new_state_internal,
duration = delay_seconds,
watcher_id = watcher_id,
)
return self
When logging the additional_state_callback I get the following:
self.adapi.log(f"Is None: {additional_state_callback is None} -- {additional_state_callback is None or additional_state_callback()}")
INFO entrance_light: Is None: False -- <Task pending name='Task-5773' coro=<ADAPI.now_is_between() running at /usr/lib/python3.12/site-packages/appdaemon/adapi.py:2551> cb=[Futures.add_future.<locals>.safe_remove() at /usr/lib/python3.12/site-packages/appdaemon/futures.py:26]>