I don’t see a reply from @onlycat yet, after 22 days and counting. Is it usual for them to take so long to respond on this board?
It’s a great product but the promised future local access for this was a strong reason why I purchased it.
Anyone else havinge their log filled with errors from the onlycat-integration?
I’ve had over 400 errors in two days now.
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10499, 'type': 'update', 'body': {'rfidCodes': ['578098100863997']}},)
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10499, 'type': 'update', 'body': {'deviceId': 'OC-8C1F644815C7', 'eventId': 10499, 'frameCount': 205}},)
Error while handling event deviceEventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10500, 'type': 'create', 'body': {'deviceId': 'OC-8C1F644815C7', 'eventId': 10500, 'timestamp': '2026-01-10T13:03:08.000Z', 'eventTriggerSource': '2', 'eventClassification': 0, 'accessToken': 'XXXXXX', 'globalId': 14991167}},)
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10500, 'type': 'update', 'body': {'rfidCodes': ['578098100863997']}},)
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10500, 'type': 'update', 'body': {'deviceId': 'OC-8C1F644815C7', 'eventId': 10500, 'frameCount': 282}},)
Not sure when it started, if it was an update of the onlycat flap, or home assistant.
Yep. I’m getting thousands of these a day.
OnlyCat seems pretty…absent…on GitHub atm… I’m running this branch on my HA instance without errors: Allow ignoring of flap and motion based rules by Alex-ala · Pull Request #58 · OnlyCatAI/onlycat-home-assistant · GitHub
I’m unfortunately getting a similar issue with your fork whenever attempting to change profiles.
Error while handling event deviceUpdate with args ({'deviceId': '*my device*', 'type': 'update', 'body': {'deviceId': '*my device*', 'deviceTransitPolicyId': 3298}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
File "/config/custom_components/onlycat/__init__.py", line 74, in update_device
AttributeError: 'ConfigEntry' object has no attribute 'runtime_data'
Error while handling event deviceUpdate with args ({'deviceId': '*my device*', 'type': 'update', 'body': {'deviceId': '*my device*', 'deviceTransitPolicyId': 3298}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
File "/config/custom_components/onlycat/binary_sensor_lock.py", line 80, in on_device_update
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
These are both really weird errors…
First one is an error on the config entry itself, having no runtime data shouldnt happen in HA.
The second one looks even weirder to me that writing Homeassitant state internally fails.
The update payload looks normal in both errors, so normally the integration should handle both just fine. I’d suggest reconfiguring or re-adding the integrations config to HA.
I have deleted, readded and reconfigured multiple times during testing. I have many devices in my HA instance and only get errors from OC.
I’m running in docker if that helps. Let me know if I can provide any other info for you.
Do you get a different error when HA or the integration start up or is configured?
The ConfigEntry not having a runtime_data should not happen, as it is created on config entry setup.
I would expect another error happening earlier preventing the correct setup of the ConfigEntry in onlycat-home-assistant/custom_components/onlycat/__init__.py at 22a44dc3d36669421ffa45a76939760f93a7a1c5 · Alex-ala/onlycat-home-assistant · GitHub
I found one instance in my log with an error on eventUpdate, that one happened because for some reason, I received another eventUpdate 2h after it actually happened…
Can you provide debug logs for the errors you get?
I’m not sure.
the latest errors I have this for:
Denne feilen stammer fra en tilpasset integrasjon.
Logger: custom_components.onlycat.api
Kilde: custom_components/onlycat/api.py:93
integrasjon: OnlyCat (dokumentasjon, problemer)
Første forekomst: 01:00:11 (12 occurrences)
Sist logget: 01:00:35
Error while handling event deviceEventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10717, 'type': 'create', 'body': {'deviceId': 'OC-8C1F644815C7', 'eventId': 10717, 'timestamp': '2026-01-24T00:00:21.000Z', 'eventTriggerSource': '2', 'eventClassification': 0, 'accessToken': 'laCtHj', 'globalId': 16102375}},)
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10717, 'type': 'update', 'body': {'rfidCodes': ['900217000732716']}},)
Error while handling event eventUpdate with args ({'deviceId': 'OC-8C1F644815C7', 'eventId': 10717, 'type': 'update', 'body': {'deviceId': 'OC-8C1F644815C7', 'eventId': 10717, 'frameCount': 153}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
await callback(*args)
File "/config/custom_components/onlycat/device_tracker.py", line 119, in on_event_update
self.async_write_ha_state()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
I am not getting any specific errors on restart. I am also getting the same errors as @doffen above.
I hope the following helps.
2026-01-26 12:35:49.781 DEBUG (MainThread) [custom_components.onlycat.select] Setting policy Locked for device OC-8C1F644811BE
2026-01-26 12:35:49.781 DEBUG (MainThread) [custom_components.onlycat.api] Sending activateDeviceTransitPolicy message to API: {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 3298}
2026-01-26 12:35:50.111 DEBUG (MainThread) [custom_components.onlycat.api] Received event: deviceUpdate with args: ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 3298}},)
2026-01-26 12:35:50.111 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDevice message to API: {'deviceId': 'OC-8C1F644811BE', 'subscribe': True}
2026-01-26 12:35:50.421 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDeviceTransitPolicy message to API: {'deviceTransitPolicyId': 3298}
2026-01-26 12:35:50.741 DEBUG (MainThread) [custom_components.onlycat] Updated device: Device(device_id='OC-8C1F644811BE', connectivity=DeviceConnectivity(connected=True, disconnect_reason=None, timestamp=datetime.datetime(2026, 1, 23, 9, 11, 33, 684000, tzinfo=datetime.timezone.utc)), description='Cat Door', time_zone=zoneinfo.ZoneInfo(key='Pacific/Auckland'), device_transit_policy_id=3298, device_transit_policy=DeviceTransitPolicy(device_transit_policy_id=3298, device_id='OC-8C1F644811BE', name='Locked', transit_policy=TransitPolicy(rules=[Rule(action=RuleAction(lock=True, lockout_duration=None, sound=None), criteria=None, description=None, enabled=True)], idle_lock=True, idle_lock_battery=True), device=...))
2026-01-26 12:35:50.741 ERROR (MainThread) [custom_components.onlycat.api] Error while handling event deviceUpdate with args ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 3298}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
await callback(*args)
File "/config/custom_components/onlycat/binary_sensor_lock.py", line 80, in on_device_update
self.async_write_ha_state()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
2026-01-26 12:35:50.742 ERROR (MainThread) [custom_components.onlycat.api] Error while handling event deviceUpdate with args ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 3298}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
await callback(*args)
File "/config/custom_components/onlycat/binary_sensor_connectivity.py", line 76, in on_device_update
self.async_write_ha_state()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
2026-01-26 12:35:50.742 DEBUG (MainThread) [custom_components.onlycat.select] Device update event received for select: {'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 3298}}
2026-01-26 12:35:50.742 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDeviceTransitPolicies message to API: {'deviceId': 'OC-8C1F644811BE'}
2026-01-26 12:35:51.043 DEBUG (MainThread) [custom_components.onlycat.select] Setting policy 3298 for device OC-8C1F644811BE
2026-01-26 12:35:53.788 DEBUG (MainThread) [custom_components.onlycat.select] Setting policy Custom Policy for device OC-8C1F644811BE
2026-01-26 12:35:53.788 DEBUG (MainThread) [custom_components.onlycat.api] Sending activateDeviceTransitPolicy message to API: {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 23920}
2026-01-26 12:35:54.121 DEBUG (MainThread) [custom_components.onlycat.api] Received event: deviceUpdate with args: ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 23920}},)
2026-01-26 12:35:54.121 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDevice message to API: {'deviceId': 'OC-8C1F644811BE', 'subscribe': True}
2026-01-26 12:35:54.425 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDeviceTransitPolicy message to API: {'deviceTransitPolicyId': 23920}
2026-01-26 12:35:54.729 DEBUG (MainThread) [custom_components.onlycat] Updated device: Device(device_id='OC-8C1F644811BE', connectivity=DeviceConnectivity(connected=True, disconnect_reason=None, timestamp=datetime.datetime(2026, 1, 23, 9, 11, 33, 684000, tzinfo=datetime.timezone.utc)), description='Cat Door', time_zone=zoneinfo.ZoneInfo(key='Pacific/Auckland'), device_transit_policy_id=23920, device_transit_policy=DeviceTransitPolicy(device_transit_policy_id=23920, device_id='OC-8C1F644811BE', name='Custom Policy', transit_policy=TransitPolicy(rules=[Rule(action=RuleAction(lock=False, lockout_duration=None, sound=None), criteria=RuleCriteria(event_trigger_sources=[<EventTriggerSource.INDOOR_MOTION: 2>], event_classifications=None, time_ranges=[TimeRange(start_hour=6, start_minute=0, end_hour=18, end_minute=44)], rfid_codes=None, rfid_timeout=None), description='Exit Rule', enabled=True), Rule(action=RuleAction(lock=True, lockout_duration=None, sound=<SoundAction.ALARM: 'alarm'>), criteria=RuleCriteria(event_trigger_sources=[<EventTriggerSource.OUTDOOR_MOTION: 3>], event_classifications=[<EventClassification.SUSPICIOUS: 2>, <EventClassification.CONTRABAND: 3>], time_ranges=None, rfid_codes=None, rfid_timeout=None), description='Contraband Rule', enabled=True), Rule(action=RuleAction(lock=False, lockout_duration=None, sound=None), criteria=RuleCriteria(event_trigger_sources=[<EventTriggerSource.OUTDOOR_MOTION: 3>], event_classifications=None, time_ranges=None, rfid_codes=['956000015952989', '956000015949802'], rfid_timeout=None), description='Entry Rule', enabled=True)], idle_lock=True, idle_lock_battery=False), device=...))
2026-01-26 12:35:54.730 ERROR (MainThread) [custom_components.onlycat.api] Error while handling event deviceUpdate with args ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 23920}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
await callback(*args)
File "/config/custom_components/onlycat/binary_sensor_lock.py", line 80, in on_device_update
self.async_write_ha_state()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
2026-01-26 12:35:54.731 ERROR (MainThread) [custom_components.onlycat.api] Error while handling event deviceUpdate with args ({'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 23920}},)
Traceback (most recent call last):
File "/config/custom_components/onlycat/api.py", line 93, in handle_event
await callback(*args)
File "/config/custom_components/onlycat/binary_sensor_connectivity.py", line 76, in on_device_update
self.async_write_ha_state()
~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1021, in async_write_ha_state
self._async_verify_state_writable()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 985, in _async_verify_state_writable
raise RuntimeError(f"Attribute hass is None for {self}")
RuntimeError: Attribute hass is None for <entity unknown.unknown=unknown>
2026-01-26 12:35:54.733 DEBUG (MainThread) [custom_components.onlycat.select] Device update event received for select: {'deviceId': 'OC-8C1F644811BE', 'type': 'update', 'body': {'deviceId': 'OC-8C1F644811BE', 'deviceTransitPolicyId': 23920}}
2026-01-26 12:35:54.733 DEBUG (MainThread) [custom_components.onlycat.api] Sending getDeviceTransitPolicies message to API: {'deviceId': 'OC-8C1F644811BE'}
2026-01-26 12:35:55.037 DEBUG (MainThread) [custom_components.onlycat.select] Setting policy 23920 for device OC-8C1F644811BE
Things seem to have gone really quiet on the promised local access for the onlycat flap. Please can we be updated on progress/timeline?
Thanks
@OnlyCat
@heisenberg
Very nice to have the event video feature now! Is there any way to know which cat triggered a contraband event?
Currently the integration does not correlate this data. You may be able to correlate the contraband and event sensor...
But thats a great suggestion for an improvement!
So what are you folks using for your cat based dashboards?
I’m not a dashboard kind of guy, while I still have one it’s more about function than looks.
the green cats in the screenshot are buttons to toggle their home state (blue when away) and is really the only thing I need cat-wise on my dashboard. I still have the other card with photos which tells me the time since the last state change.
I like that, what entity do you use for the button to say they have sneaked in?
I just use a regular button entity.
Here’s the relevant code for one of the cats, but I built the whole thing in the GUI.
- show_name: true
show_icon: true
type: button
entity: person.glupus
tap_action:
action: perform-action
perform_action: onlycat.toggle_pet_location
target: {}
data:
device_tracker: device_tracker.578098100863997_tracker
name: Glupus
icon: mdi:cat
….aaaand it’s August…
Any signs of life?
While I kinda like the product, this doesn’t instill too much confidence in them to really follow through ![]()
i thought it ws working. definitely integrates with HA? or is that via their web interface?
