home-assistant / home-assistant/android
ButtonWidget executes a script twice if it runs longer than 15 seconds
- Dominant language
- Kotlin
- Stars
- 3.9k
- Forks
- 1.1k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 81
Description
**Home Assistant Android app version(s):**
2023.9.2-full
**Android version(s):**
10
**Device model(s):**
ONEPLUS A5000
**Home Assistant version:**
2023.9.3
**Last working Home Assistant release (if known):**
**Description of problem, include YAML if issue is related to notifications:**
If a button widget fires a script directly via `script.testscript`, and that script runs for at least for 15 seconds, then it is executed a second time 15 or 16 seconds after its initial execution. There is no second execution if the script is configured to run less than 15 seconds or the script is aborted prematurely via script.turn_off.
I feel like it has something to do with the animation the widget displays. It seems like it checks after 15 seconds if the animation is still supposed to show, and by that it accidentally triggers the script again. Maybe.
In this example, I got one HA trace for this script at `16:05:41` and another at `16:05:56`. The script config is this
```yaml
testscript:
mode: parallel
sequence:
- service: persistent_notification.create
data:
title: "Test notif {{ this.attributes.current }} {{ states.script.testscript.attributes.current }}"
message: "{{ now().strftime('%Y-%m-%d %H:%M:%S')}}"
- delay: 18
```
and I get notifications at `16:05:41` and `16:05:56`.
All that doesn't happen with Quick Setting Tiles, only with widgets afaik.
I enabled debug logging for the mobile_app integration and this is what was logged:
```yaml
HA core log with mobile app debug enabled
2023-10-08 16:05:11.683 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type get_config: {}
2023-10-08 16:05:11.860 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type update_sensor_states: [{'unique_id': 'last_update', 'state': 'SensorWorker', 'type': 'sensor...
2023-10-08 16:05:12.930 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type get_config: {}
2023-10-08 16:05:13.218 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type update_sensor_states: [{'unique_id': 'last_update', 'state': 'io.homeassistant.companion.android.UPDATE_SENSORS', 'type': 'sensor...
2023-10-08 16:05:41.010 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type call_service: {'domain': 'script', 'service': 'testscript', 'service_data': {}}
2023-10-08 16:05:56.043 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type call_service: {'domain': 'script', 'service': 'testscript', 'service_data': {}}
2023-10-08 16:06:12.232 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type get_config: {}
2023-10-08 16:06:12.510 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type update_sensor_states: [{'unique_id': 'last_update', 'state': 'android.intent.action.SCREEN_OFF', 'type': 'sensor...
2023-10-08 16:06:40.133 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type get_config: {}
2023-10-08 16:06:40.379 DEBUG (MainThread) [homeassistant.components.mobile_app.webhook] Received webhook payload from dd for type update_sensor_states: [{'unique_id': 'last_update', 'state': 'android.intent.action.SCREEN_ON', 'type': 'sensor...
```
**Companion App Logs:**
```
10-08 16:05:23.415 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:05:23.506 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:05:23.506 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:05:23.506 5425 5425 D MediaPlayCtrlsWidget: Fetching media preview image
10-08 16:05:23.518 5425 5425 D MediaPlayCtrlsWidget: Fetch and load complete
10-08 16:05:40.596 5425 5425 D ButtonWidget: Broadcast received:
10-08 16:05:40.596 5425 5425 D ButtonWidget: Broadcast action: io.homeassistant.companion.android.widgets.button.ButtonWidget.CALL_SERVICE
10-08 16:05:40.596 5425 5425 D ButtonWidget: AppWidgetId: 15
10-08 16:05:40.597 5425 5425 D ButtonWidget: Calling widget service
10-08 16:05:40.601 5425 5425 D ButtonWidget: Service Call Data loaded:
10-08 16:05:40.601 5425 5425 D ButtonWidget: domain: script
10-08 16:05:40.601 5425 5425 D ButtonWidget: service: testscript
10-08 16:05:40.601 5425 5425 D ButtonWidget: service_data: {}
10-08 16:05:40.604 5425 5425 D ButtonWidget: Sending service call to Home Assistant
10-08 16:05:40.608 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:05:52.210 5425 30051 D WebSocketRepository: Websocket: onMessage (text)
10-08 16:05:52.215 5425 7546 D WebSocketRepository: Message number 1052 received
10-08 16:05:52.227 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:05:52.227 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:05:52.232 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:05:52.232 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:05:52.307 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:05:52.307 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:05:52.307 5425 5425 D MediaPlayCtrlsWidget: Fetching media preview image
10-08 16:05:52.372 5425 5425 D MediaPlayCtrlsWidget: Fetch and load complete
10-08 16:06:11.604 5425 5425 D SensorReceiver: Received intent: android.intent.action.SCREEN_OFF
10-08 16:06:11.607 5425 5425 D LastUpdate: Last update is android.intent.action.SCREEN_OFF
10-08 16:06:11.614 5425 5425 D ButtonWidget: Broadcast received:
10-08 16:06:11.614 5425 5425 D ButtonWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.614 5425 5425 D ButtonWidget: AppWidgetId: -1
10-08 16:06:11.614 5425 7546 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:11.618 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.618 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.618 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.619 5425 6453 D WebSocketRepository: Unsubscribing from subscribe_trigger with data {trigger={platform=state, entity_id=[media_player.spotify]}}
10-08 16:06:11.620 5425 6453 D WebSocketRepository: Sending message 1053: {type=unsubscribe_events, subscription=1052, id=1053}
10-08 16:06:11.620 5425 6453 D WebSocketRepository: Message number 1053 sent
10-08 16:06:11.621 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.621 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.621 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.635 5425 7963 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:11.637 5425 7963 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:11.638 5425 5854 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=xxxxxxxxxxxx, tags={ io.homeassistant.companion.android.websocket.WebsocketManager } ]
10-08 16:06:11.640 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.640 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.640 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.644 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.644 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.644 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.648 5425 5425 I chatty : uid=10346(io.homeassistant.companion.android) identical 4 lines
10-08 16:06:11.649 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.649 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.649 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.651 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.651 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.651 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.662 5425 5425 I chatty : uid=10346(io.homeassistant.companion.android) identical 13 lines
10-08 16:06:11.663 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.663 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.663 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.677 5425 30051 D WebSocketRepository: Websocket: onMessage (text)
10-08 16:06:11.679 5425 7963 D WebSocketRepository: Message number 1053 received
10-08 16:06:11.753 5425 30051 D WebSocketRepository: Websocket: onClosing code: 1000, reason:
10-08 16:06:11.754 5425 30051 D WebSocketRepository: Websocket: onClosed
10-08 16:06:11.785 5425 7546 D NextAlarm: Next alarm is scheduled by com.urbandroid.sleep with trigger time 1696837500000
10-08 16:06:11.828 5425 7546 D StepsSensor: Steps sensor listener registered
10-08 16:06:11.833 5425 5425 D StepsSensor: Steps sensor listener unregistered
10-08 16:06:11.840 5425 7546 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:11.842 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.842 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.842 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.842 5425 7546 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:11.843 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.843 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.843 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.852 5425 5425 I chatty : uid=10346(io.homeassistant.companion.android) identical 10 lines
10-08 16:06:11.853 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.853 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.853 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.869 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.869 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.869 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.886 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.886 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.886 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.888 5425 5425 I chatty : uid=10346(io.homeassistant.companion.android) identical 2 lines
10-08 16:06:11.889 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.889 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.889 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.914 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.914 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.914 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:11.921 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:11.921 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_OFF
10-08 16:06:11.921 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:12.120 5425 7546 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:12.230 5425 6453 I SensorReceiver: Sensor updates and sync completed
10-08 16:06:20.765 5425 5425 D ButtonWidget: Service call sent successfully
10-08 16:06:39.548 5425 5425 D SensorReceiver: Received intent: android.intent.action.SCREEN_ON
10-08 16:06:39.550 5425 5425 D LastUpdate: Last update is android.intent.action.SCREEN_ON
10-08 16:06:39.558 5425 5425 D ButtonWidget: Broadcast received:
10-08 16:06:39.558 5425 5425 D ButtonWidget: Broadcast action: android.intent.action.SCREEN_ON
10-08 16:06:39.558 5425 5425 D ButtonWidget: AppWidgetId: -1
10-08 16:06:39.560 5425 5425 D ButtonWidget: Updating all widgets
10-08 16:06:39.560 5425 6453 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.574 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.582 5425 5425 D MediaPlayCtrlsWidget: Broadcast received:
10-08 16:06:39.582 5425 5425 D MediaPlayCtrlsWidget: Broadcast action: android.intent.action.SCREEN_ON
10-08 16:06:39.582 5425 5425 D MediaPlayCtrlsWidget: AppWidgetId: -1
10-08 16:06:39.582 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.585 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.603 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.603 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:06:39.607 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.607 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:06:39.609 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.609 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:06:39.609 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.609 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:06:39.676 5425 7963 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.678 5425 5425 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.678 5425 5425 D ServerConnectionInfo: Using external URL
10-08 16:06:39.678 5425 5425 D MediaPlayCtrlsWidget: Fetching media preview image
10-08 16:06:39.678 5425 7963 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.681 5425 5854 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=xxxxxxxxxxxx, tags={ io.homeassistant.companion.android.websocket.WebsocketManager } ]
10-08 16:06:39.685 5425 6453 D NextAlarm: Next alarm is scheduled by com.urbandroid.sleep with trigger time 1696837500000
10-08 16:06:39.694 5425 5425 D MediaPlayCtrlsWidget: Fetch and load complete
10-08 16:06:39.723 5425 6453 D StepsSensor: Steps sensor listener registered
10-08 16:06:39.742 5425 5425 D StepsSensor: Steps sensor listener unregistered
10-08 16:06:39.743 5425 6453 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.744 5425 6453 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.975 5425 6453 D ServerConnectionInfo: localUrl is: true, usesInternalSsid is: false, usesWifi is: true
10-08 16:06:39.989 5425 30051 D WebSocketRepository: Websocket: onOpen
10-08 16:06:39.989 5425 30051 D WebSocketRepository: Websocket: onMessage (text)
10-08 16:06:39.990 5425 6453 D WebSocketRepository: Message number null received
10-08 16:06:39.990 5425 6453 D WebSocketRepository: Auth Requested
10-08 16:06:40.081 5425 30051 D WebSocketRepository: Websocket: onMessage (text)
10-08 16:06:40.085 5425 6453 D WebSocketRepository: Message number null received
10-08 16:06:40.085 5425 5425 D WebSocketRepository: Sending message 1054: {type=supported_features, id=1054, features={coalesce_messages=1}}
10-08 16:06:40.085 5425 5425 D WebSocketRepository: Sending message 1055: {type=subscribe_trigger, trigger={platform=state, entity_id=[media_player.spotify]}, id=1055}
10-08 16:06:40.086 5425 5425 D WebSocketRepository: Message number 1055 sent
10-08 16:06:40.089 5425 6453 I SensorReceiver: Sensor updates and sync completed
10-08 16:06:40.180 5425 30051 D WebSocketRepository: Websocket: onMessage (text)
10-08 16:06:40.182 5425 6453 D WebSocketRepository: Message number 1054 received
```
**Screenshot or video of problem:**
**Additional information:**
Contributor guide
Assessment
This issue has not been assessed yet.